diff --git a/pom.xml.example b/pom.xml.example deleted file mode 100644 index caa26f6ff..000000000 --- a/pom.xml.example +++ /dev/null @@ -1,142 +0,0 @@ - - 4.0.0 - - mod-group-name - EvilWithin - EvilWithin - 0.1.0 - - - Downfall is a full-featured Expansion for Slay the Spire, including a new campaign, four new heroes to play, new relics, new cards, new potions, and more. \n \n The Heart demands that this endless cycle of slaughter be finished. Answer the call as a Villain, and see to the defense of the Spire. \n \n This mod is a combination modpack which includes the former mods known as Slimebound Mod, Guardian Mod, and Playable Snecko, along with a ton of new content, a new character, and much more. - - - - - //Change below line to your Steam installation directory - D:/SteamLibrary/ - - ${steamFolder}steamapps/workshop/content/646570/ - ${steamFolder}steamapps/common/SlayTheSpire/ - 2.0 - 3.8.0 - UTF-8 - - - - - com.megacrit.cardcrawl - SlayTheSpire - ${SlayTheSpire.version} - system - ${stsPath}desktop-1.0.jar - - - com.evacipated.cardcrawl - ModTheSpire - ${ModTheSpire.version} - system - ${workshopFolder}1605060445/ModTheSpire.jar - - - basemod - basemod - 5.17.0 - system - ${workshopFolder}1605833019/BaseMod.jar - - - come.evacipated.cardcrawl - stslib - 1.17.2 - system - ${workshopFolder}1609158507/StSLib.jar - - - actlikeit - actlikeit - 1.0.0 - system - ${workshopFolder}1934902042/actlikeit.jar - - - com.megacrit.cardcrawl.mod - WidePotions - 0.4 - system - ${workshopFolder}2368513093/WidePotions.jar - - - quickRestart - quickRestart - 2.0.5 - system - ${workshopFolder}1805046408/quickRestart.jar - - - chronoMods - TogetherManager - 2.2 - system - ${workshopFolder}2395241968/Spire with Friends.jar - - - - - ${project.artifactId} - - - src/main/resources - false - - ModTheSpire.json - - - - src/main/resources - true - - ModTheSpire.json - - - - - - org.apache.maven.plugins - maven-jar-plugin - 3.3.0 - - - **/*.psd - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.7.0 - - 1.8 - 1.8 - - - - org.apache.maven.plugins - maven-antrun-plugin - 1.8 - - - package - - - - - - - run - - - - - - - \ No newline at end of file diff --git a/src/main/java/automaton/AutomatonMod.java b/src/main/java/automaton/AutomatonMod.java index 84689b733..202317fde 100644 --- a/src/main/java/automaton/AutomatonMod.java +++ b/src/main/java/automaton/AutomatonMod.java @@ -139,7 +139,6 @@ public static void loadJokeCardImage(AbstractCard card, String img) { ReflectionHacks.setPrivate(card, AbstractCard.class, "jokePortrait", cardImg); } - public static String makeCardPath(String resourcePath) { return getModID() + "Resources/images/cards/" + resourcePath; } @@ -226,12 +225,13 @@ public void receiveEditRelics() { BaseMod.addRelicToCustomPool(new BronzeCore(), AutomatonChar.Enums.BRONZE_AUTOMATON); BaseMod.addRelicToCustomPool(new CableSpool(), AutomatonChar.Enums.BRONZE_AUTOMATON); BaseMod.addRelic(new DecasWashers(), RelicType.SHARED); - BaseMod.addRelic(new DonusWashers(), RelicType.SHARED); + // BaseMod.addRelic(new DonusWashers(), RelicType.SHARED); + BaseMod.addRelicToCustomPool(new DonusWashers(), AutomatonChar.Enums.BRONZE_AUTOMATON); BaseMod.addRelicToCustomPool(new ElectromagneticCoil(), AutomatonChar.Enums.BRONZE_AUTOMATON); BaseMod.addRelicToCustomPool(new ProtectiveGoggles(), AutomatonChar.Enums.BRONZE_AUTOMATON); BaseMod.addRelicToCustomPool(new Mallet(), AutomatonChar.Enums.BRONZE_AUTOMATON); BaseMod.addRelicToCustomPool(new PlatinumCore(), AutomatonChar.Enums.BRONZE_AUTOMATON); - BaseMod.addRelic(new MakeshiftBattery(), RelicType.SHARED); + BaseMod.addRelicToCustomPool(new MakeshiftBattery(), AutomatonChar.Enums.BRONZE_AUTOMATON); BaseMod.addRelic(new BronzeIdol(), RelicType.SHARED); BaseMod.addRelicToCustomPool(new SilverBullet(), AutomatonChar.Enums.BRONZE_AUTOMATON); BaseMod.addRelicToCustomPool(new BottledCode(), AutomatonChar.Enums.BRONZE_AUTOMATON); diff --git a/src/main/java/automaton/actions/ChosenAction.java b/src/main/java/automaton/actions/ChosenAction.java index 5d35a064c..001c41822 100644 --- a/src/main/java/automaton/actions/ChosenAction.java +++ b/src/main/java/automaton/actions/ChosenAction.java @@ -1,16 +1,7 @@ -// -// Source code recreated from a .class file by IntelliJ IDEA -// (powered by Fernflower decompiler) -// - package automaton.actions; -import automaton.FunctionHelper; import com.megacrit.cardcrawl.actions.AbstractGameAction; -import com.megacrit.cardcrawl.cards.AbstractCard; -import com.megacrit.cardcrawl.dungeons.AbstractDungeon; -import com.megacrit.cardcrawl.helpers.GetAllInBattleInstances; -import java.util.Iterator; + import java.util.UUID; public class ChosenAction extends AbstractGameAction { diff --git a/src/main/java/automaton/actions/ScryBlockStatusAction.java b/src/main/java/automaton/actions/ScryBlockStatusAction.java index 98dccdb7d..84c6a0c18 100644 --- a/src/main/java/automaton/actions/ScryBlockStatusAction.java +++ b/src/main/java/automaton/actions/ScryBlockStatusAction.java @@ -11,7 +11,6 @@ import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.localization.UIStrings; import com.megacrit.cardcrawl.powers.AbstractPower; -import theHexaghost.HexaMod; public class ScryBlockStatusAction extends AbstractGameAction { private static final UIStrings uiStrings; @@ -73,8 +72,8 @@ public void update() { AbstractDungeon.player.drawPile.moveToDiscardPile(c); if (c.type == AbstractCard.CardType.STATUS) { addToBot(new GainBlockAction(AbstractDungeon.player, blockPerCard)); + addToBot(new ExhaustSpecificCardAction(c, AbstractDungeon.player.discardPile)); } - addToBot(new ExhaustSpecificCardAction(c, AbstractDungeon.player.discardPile)); } } AbstractDungeon.gridSelectScreen.selectedCards.clear(); diff --git a/src/main/java/automaton/actions/ScryEncodeCardsAction.java b/src/main/java/automaton/actions/ScryEncodeCardsAction.java index 30b46992a..db9ba9d32 100644 --- a/src/main/java/automaton/actions/ScryEncodeCardsAction.java +++ b/src/main/java/automaton/actions/ScryEncodeCardsAction.java @@ -1,7 +1,6 @@ package automaton.actions; import automaton.AutomatonMod; -import automaton.FunctionHelper; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.cards.CardGroup; diff --git a/src/main/java/automaton/cardmods/CardEffectsCardMod.java b/src/main/java/automaton/cardmods/CardEffectsCardMod.java index 6215551ba..78dc18771 100644 --- a/src/main/java/automaton/cardmods/CardEffectsCardMod.java +++ b/src/main/java/automaton/cardmods/CardEffectsCardMod.java @@ -18,8 +18,6 @@ import com.megacrit.cardcrawl.helpers.CardLibrary; import com.megacrit.cardcrawl.monsters.AbstractMonster; -import static automaton.FunctionHelper.WITH_DELIMITER; - public class CardEffectsCardMod extends BronzeCardMod { public CardSave store; diff --git a/src/main/java/automaton/cardmods/EncodeAndShuffleMod.java b/src/main/java/automaton/cardmods/EncodeAndShuffleMod.java index 29cb4eadf..492cf4149 100644 --- a/src/main/java/automaton/cardmods/EncodeAndShuffleMod.java +++ b/src/main/java/automaton/cardmods/EncodeAndShuffleMod.java @@ -2,7 +2,6 @@ import automaton.AutomatonMod; import basemod.abstracts.AbstractCardModifier; -import com.megacrit.cardcrawl.actions.common.MakeTempCardInDiscardAction; import com.megacrit.cardcrawl.actions.utility.UseCardAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.core.AbstractCreature; diff --git a/src/main/java/automaton/cardmods/EncodeMod.java b/src/main/java/automaton/cardmods/EncodeMod.java index 02ed919e7..6a59c6b00 100644 --- a/src/main/java/automaton/cardmods/EncodeMod.java +++ b/src/main/java/automaton/cardmods/EncodeMod.java @@ -5,8 +5,6 @@ import basemod.abstracts.AbstractCardModifier; import com.megacrit.cardcrawl.cards.AbstractCard; -import static automaton.FunctionHelper.WITH_DELIMITER; - public class EncodeMod extends BronzeCardMod { public static String ID = "bronze:EncodeModifier"; diff --git a/src/main/java/automaton/cardmods/PlayMeTwiceCardmod.java b/src/main/java/automaton/cardmods/PlayMeTwiceCardmod.java index 1dda150f4..378fc34e0 100644 --- a/src/main/java/automaton/cardmods/PlayMeTwiceCardmod.java +++ b/src/main/java/automaton/cardmods/PlayMeTwiceCardmod.java @@ -1,6 +1,5 @@ package automaton.cardmods; -import automaton.actions.RepeatCardAction; import basemod.abstracts.AbstractCardModifier; import com.megacrit.cardcrawl.actions.utility.UseCardAction; import com.megacrit.cardcrawl.cards.AbstractCard; diff --git a/src/main/java/automaton/cards/AbstractBronzeCard.java b/src/main/java/automaton/cards/AbstractBronzeCard.java index 626975e76..22881a2bc 100644 --- a/src/main/java/automaton/cards/AbstractBronzeCard.java +++ b/src/main/java/automaton/cards/AbstractBronzeCard.java @@ -18,7 +18,6 @@ import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; -import com.megacrit.cardcrawl.helpers.ImageMaster; import com.megacrit.cardcrawl.localization.CardStrings; import com.megacrit.cardcrawl.localization.UIStrings; import com.megacrit.cardcrawl.monsters.AbstractMonster; diff --git a/src/main/java/automaton/cards/AlphaBuild.java b/src/main/java/automaton/cards/AlphaBuild.java index 205131d38..5d82eaf26 100644 --- a/src/main/java/automaton/cards/AlphaBuild.java +++ b/src/main/java/automaton/cards/AlphaBuild.java @@ -1,4 +1,4 @@ -/* +package automaton.cards;/* package automaton.cards; import automaton.AutomatonMod; diff --git a/src/main/java/automaton/cards/Assembly.java b/src/main/java/automaton/cards/Assembly.java index 326e1d215..e691b44cd 100644 --- a/src/main/java/automaton/cards/Assembly.java +++ b/src/main/java/automaton/cards/Assembly.java @@ -4,7 +4,6 @@ import automaton.actions.ScryEncodeCardsAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; -import sneckomod.SneckoMod; public class Assembly extends AbstractBronzeCard { diff --git a/src/main/java/automaton/cards/Batch.java b/src/main/java/automaton/cards/Batch.java index 0a7e550e9..487075d66 100644 --- a/src/main/java/automaton/cards/Batch.java +++ b/src/main/java/automaton/cards/Batch.java @@ -1,10 +1,10 @@ package automaton.cards; -import automaton.AutomatonMod; import automaton.FunctionHelper; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import automaton.AutomatonMod; import static automaton.AutomatonMod.makeBetaCardPath; diff --git a/src/main/java/automaton/cards/BetaBuild.java b/src/main/java/automaton/cards/BetaBuild.java index 6de4a8f73..e462f0d3b 100644 --- a/src/main/java/automaton/cards/BetaBuild.java +++ b/src/main/java/automaton/cards/BetaBuild.java @@ -1,4 +1,4 @@ -/* +package automaton.cards;/* package automaton.cards; import automaton.AutomatonMod; diff --git a/src/main/java/automaton/cards/BitShift.java b/src/main/java/automaton/cards/BitShift.java index a4806361b..0fddf0018 100644 --- a/src/main/java/automaton/cards/BitShift.java +++ b/src/main/java/automaton/cards/BitShift.java @@ -10,12 +10,12 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; import expansioncontent.cardmods.PropertiesMod; -import expansioncontent.cardmods.RetainCardMod; - -import static automaton.AutomatonMod.makeBetaCardPath; +import sneckomod.SneckoMod; import java.util.ArrayList; +import static automaton.AutomatonMod.makeBetaCardPath; + public class BitShift extends AbstractBronzeCard { public final static String ID = makeID("BitShift"); @@ -23,6 +23,7 @@ public BitShift() { super(ID, 0, CardType.SKILL, CardRarity.COMMON, CardTarget.SELF); exhaust = true; baseMagicNumber = magicNumber = 1; + this.tags.add(SneckoMod.BANNEDFORSNECKO); AutomatonMod.loadJokeCardImage(this, makeBetaCardPath("BitShift.png")); } diff --git a/src/main/java/automaton/cards/Branch.java b/src/main/java/automaton/cards/Branch.java index 156415392..ac98dd595 100644 --- a/src/main/java/automaton/cards/Branch.java +++ b/src/main/java/automaton/cards/Branch.java @@ -2,25 +2,33 @@ import automaton.AutomatonMod; import automaton.actions.AddToFuncAction; +import awakenedOne.relics.EyeOfTheOccult; +import awakenedOne.relics.OnAwakenRelic; +import champ.powers.GladiatorFormPower; +import champ.powers.ParryPower; +import champ.relics.RageAmulet; import com.megacrit.cardcrawl.actions.AbstractGameAction; -import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; import com.megacrit.cardcrawl.actions.common.DamageAction; import com.megacrit.cardcrawl.actions.common.GainBlockAction; +import com.megacrit.cardcrawl.actions.common.RemoveSpecificPowerAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.cards.DamageInfo; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; -import com.megacrit.cardcrawl.powers.AbstractPower; import com.megacrit.cardcrawl.powers.watcher.VigorPower; +import com.megacrit.cardcrawl.relics.AbstractRelic; import com.megacrit.cardcrawl.unlock.UnlockTracker; import downfall.actions.OctoChoiceAction; import downfall.cards.OctoChoiceCard; import downfall.util.OctopusCard; +import guardian.powers.RevengePower; import java.util.ArrayList; +import static hermit.util.Wiz.removePower; + public class Branch extends AbstractBronzeCard implements OctopusCard { public final static String ID = makeID("Branch"); @@ -60,6 +68,23 @@ public void doChoiceStuff(AbstractMonster m, OctoChoiceCard card) { if (upgraded) q.upgrade(); att(new AddToFuncAction(q, null)); att(new DamageAction(m, new DamageInfo(AbstractDungeon.player, card.baseDamage, card.damageTypeForTurn), AbstractGameAction.AttackEffect.SLASH_HORIZONTAL)); + + if (AbstractDungeon.player.hasPower(GladiatorFormPower.POWER_ID)) { + GladiatorFormPower revengePower = (GladiatorFormPower) AbstractDungeon.player.getPower(GladiatorFormPower.POWER_ID); + + if (revengePower != null) { + revengePower.onSpecificTriggerBranch(); + } + } + + for (AbstractRelic r : AbstractDungeon.player.relics) { + if (r instanceof RageAmulet) { + ((RageAmulet) r).onSpecificTrigger(); + } + } + + atb(new RemoveSpecificPowerAction(AbstractDungeon.player, AbstractDungeon.player, VigorPower.POWER_ID)); + break; } case "bronze:BranchBlock": { diff --git a/src/main/java/automaton/cards/Break.java b/src/main/java/automaton/cards/Break.java index 44e6a7079..fcba81dfe 100644 --- a/src/main/java/automaton/cards/Break.java +++ b/src/main/java/automaton/cards/Break.java @@ -2,17 +2,14 @@ import automaton.AutomatonMod; import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.MakeTempCardInHandAction; import com.megacrit.cardcrawl.cards.AbstractCard; -import com.megacrit.cardcrawl.cards.status.Burn; -import com.megacrit.cardcrawl.cards.status.Slimed; -import com.megacrit.cardcrawl.cards.status.Wound; +import com.megacrit.cardcrawl.cards.status.*; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; import static automaton.AutomatonMod.makeBetaCardPath; -import static sneckomod.SneckoMod.getRandomStatus; - public class Break extends AbstractBronzeCard { public final static String ID = makeID("Break"); @@ -38,10 +35,11 @@ public void use(AbstractPlayer p, AbstractMonster m) { @Override public void onCompile(AbstractCard function, boolean forGameplay) { if (forGameplay) { - - shuffleIn(new Burn()); - shuffleIn(new Wound()); - shuffleIn(new Slimed()); + addToBot(new MakeTempCardInHandAction(new Dazed(), 1)); + addToBot(new MakeTempCardInHandAction(new Slimed(), 1)); + addToBot(new MakeTempCardInHandAction(new Wound(), 1)); + addToBot(new MakeTempCardInHandAction(new Burn(), 1)); + addToBot(new MakeTempCardInHandAction(new VoidCard(), 1)); } } diff --git a/src/main/java/automaton/cards/BugBarrage.java b/src/main/java/automaton/cards/BugBarrage.java index ac5abdc85..fe89a4b7b 100644 --- a/src/main/java/automaton/cards/BugBarrage.java +++ b/src/main/java/automaton/cards/BugBarrage.java @@ -21,14 +21,14 @@ public class BugBarrage extends AbstractBronzeCard { //stupid intellij stuff attack, enemy, common - private static final int DAMAGE = 7; - private static final int UPG_DAMAGE = 3; + private static final int DAMAGE = 5; + private static final int UPG_DAMAGE = 2; public BugBarrage() { super(ID, 1, CardType.ATTACK, CardRarity.COMMON, CardTarget.ENEMY); baseDamage = DAMAGE; // exhaust = true; - magicNumber = baseMagicNumber = 1; + magicNumber = baseMagicNumber = 2; AutomatonMod.loadJokeCardImage(this, makeBetaCardPath("BugBarrage.png")); } diff --git a/src/main/java/automaton/cards/BuggyMess.java b/src/main/java/automaton/cards/BuggyMess.java index 18614b83c..db2251880 100644 --- a/src/main/java/automaton/cards/BuggyMess.java +++ b/src/main/java/automaton/cards/BuggyMess.java @@ -1,13 +1,10 @@ package automaton.cards; import automaton.AutomatonMod; -import automaton.cards.goodstatus.Daze; import com.megacrit.cardcrawl.actions.common.GainEnergyAction; -import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.cards.status.Dazed; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; -import sneckomod.SneckoMod; import static automaton.AutomatonMod.makeBetaCardPath; diff --git a/src/main/java/automaton/cards/BurnOut.java b/src/main/java/automaton/cards/BurnOut.java index 981d2bee2..58e251680 100644 --- a/src/main/java/automaton/cards/BurnOut.java +++ b/src/main/java/automaton/cards/BurnOut.java @@ -6,7 +6,6 @@ import com.megacrit.cardcrawl.actions.common.ExhaustSpecificCardAction; import com.megacrit.cardcrawl.actions.utility.WaitAction; import com.megacrit.cardcrawl.cards.AbstractCard; -import com.megacrit.cardcrawl.cards.status.Burn; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; diff --git a/src/main/java/automaton/cards/ByteShift.java b/src/main/java/automaton/cards/ByteShift.java index c62d3747c..f2acc1fc7 100644 --- a/src/main/java/automaton/cards/ByteShift.java +++ b/src/main/java/automaton/cards/ByteShift.java @@ -9,7 +9,6 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; import expansioncontent.cardmods.PropertiesMod; -import expansioncontent.cardmods.RetainCardMod; import static automaton.AutomatonMod.makeBetaCardPath; diff --git a/src/main/java/automaton/cards/ChildClass.java b/src/main/java/automaton/cards/ChildClass.java index b42e788b4..df1e4556f 100644 --- a/src/main/java/automaton/cards/ChildClass.java +++ b/src/main/java/automaton/cards/ChildClass.java @@ -1,4 +1,4 @@ -/* +package automaton.cards;/* package automaton.cards; import com.megacrit.cardcrawl.actions.common.GainEnergyAction; diff --git a/src/main/java/automaton/cards/ChosenStrike.java b/src/main/java/automaton/cards/ChosenStrike.java index 0449fc1c5..9c2bd8c72 100644 --- a/src/main/java/automaton/cards/ChosenStrike.java +++ b/src/main/java/automaton/cards/ChosenStrike.java @@ -20,7 +20,7 @@ public class ChosenStrike extends AbstractBronzeCard { private static final int UPG_DAMAGE = 3; public ChosenStrike() { - super(ID, 1, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); + super(ID, 2, CardType.ATTACK, CardRarity.RARE, CardTarget.ENEMY); baseDamage = DAMAGE + misc; baseMagicNumber = magicNumber = 1; this.tags.add(CardTags.STRIKE); @@ -32,7 +32,7 @@ public ChosenStrike() { public void applyPowers() { super.applyPowers(); baseDamage = DAMAGE + misc; - if (upgraded) baseDamage += UPG_DAMAGE; + // if (upgraded) baseDamage += UPG_DAMAGE; } @Override @@ -62,8 +62,9 @@ public void onCompilePreCardEffectEmbed(boolean forGameplay) { } public void upp() { - misc += 3; - upgradedDamage = true; - baseDamage = DAMAGE + misc; + // misc += 3; + // upgradedDamage = true; + // baseDamage = DAMAGE + misc; + upgradeBaseCost(1); } } diff --git a/src/main/java/automaton/cards/CleanCode.java b/src/main/java/automaton/cards/CleanCode.java index a0bbaaf81..3eabccdbc 100644 --- a/src/main/java/automaton/cards/CleanCode.java +++ b/src/main/java/automaton/cards/CleanCode.java @@ -1,11 +1,9 @@ package automaton.cards; import automaton.AutomatonMod; -import automaton.powers.CleanCodePower; import automaton.powers.RemoveNextErrorPower; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; -import sneckomod.SneckoMod; public class CleanCode extends AbstractBronzeCard { @@ -17,7 +15,7 @@ public class CleanCode extends AbstractBronzeCard { private static final int UPG_MAGIC = 1; public CleanCode() { - super(ID, 1, CardType.POWER, CardRarity.RARE, CardTarget.SELF); + super(ID, 1, CardType.POWER, CardRarity.UNCOMMON, CardTarget.SELF); baseMagicNumber = magicNumber = MAGIC; // this.tags.add(SneckoMod.BANNEDFORSNECKO); AutomatonMod.loadJokeCardImage(this, AutomatonMod.makeBetaCardPath("CleanCode.png")); diff --git a/src/main/java/automaton/cards/CopyPaste.java b/src/main/java/automaton/cards/CopyPaste.java index 27cd1a810..88005efe3 100644 --- a/src/main/java/automaton/cards/CopyPaste.java +++ b/src/main/java/automaton/cards/CopyPaste.java @@ -1,4 +1,4 @@ -/* +package automaton.cards;/* package automaton.cards; import automaton.powers.CopyPastePower; diff --git a/src/main/java/automaton/cards/DarkDash.java b/src/main/java/automaton/cards/DarkDash.java index 88afab87b..527e8f016 100644 --- a/src/main/java/automaton/cards/DarkDash.java +++ b/src/main/java/automaton/cards/DarkDash.java @@ -1,4 +1,4 @@ -/* +package automaton.cards;/* package automaton.cards; import automaton.AutomatonMod; diff --git a/src/main/java/automaton/cards/Debug.java b/src/main/java/automaton/cards/Debug.java index 4f74d0bc6..0b0ca3cb6 100644 --- a/src/main/java/automaton/cards/Debug.java +++ b/src/main/java/automaton/cards/Debug.java @@ -6,8 +6,6 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; -import static automaton.FunctionHelper.WITH_DELIMITER; - import static automaton.AutomatonMod.makeBetaCardPath; public class Debug extends AbstractBronzeCard { diff --git a/src/main/java/automaton/cards/DecaBeam.java b/src/main/java/automaton/cards/DecaBeam.java index bcf8fcadb..bed2ac5b2 100644 --- a/src/main/java/automaton/cards/DecaBeam.java +++ b/src/main/java/automaton/cards/DecaBeam.java @@ -7,6 +7,7 @@ import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.PlatedArmorPower; +import downfall.downfallMod; import static automaton.AutomatonMod.makeBetaCardPath; @@ -36,6 +37,12 @@ public void onCompile(AbstractCard function, boolean forGameplay) { } } + @Override + public void initializeDescription() { + super.initializeDescription(); + String afterlife_name = downfallMod.keywords_and_proper_names.get("plated"); + this.keywords.add(afterlife_name); + } @Override public void upp() { diff --git a/src/main/java/automaton/cards/DelayedGuard.java b/src/main/java/automaton/cards/DelayedGuard.java index ecebac919..0718c3ce6 100644 --- a/src/main/java/automaton/cards/DelayedGuard.java +++ b/src/main/java/automaton/cards/DelayedGuard.java @@ -1,7 +1,6 @@ package automaton.cards; import automaton.AutomatonMod; -import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.NextTurnBlockPower; diff --git a/src/main/java/automaton/cards/DelayedSlice.java b/src/main/java/automaton/cards/DelayedSlice.java index 63d94e543..cfad9c863 100644 --- a/src/main/java/automaton/cards/DelayedSlice.java +++ b/src/main/java/automaton/cards/DelayedSlice.java @@ -2,8 +2,6 @@ import automaton.AutomatonMod; import com.megacrit.cardcrawl.actions.AbstractGameAction; -import com.megacrit.cardcrawl.actions.common.LoseHPAction; -import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.DrawCardNextTurnPower; @@ -16,6 +14,8 @@ public class DelayedSlice extends AbstractBronzeCard { //stupid intellij stuff attack, all_enemy, common + //Robo-Chop + public DelayedSlice() { super(ID, 1, CardType.ATTACK, CardRarity.COMMON, CardTarget.ENEMY); baseMagicNumber = magicNumber = 1; diff --git a/src/main/java/automaton/cards/Deprecate.java b/src/main/java/automaton/cards/Deprecate.java index e9228f9c2..cecc2c42a 100644 --- a/src/main/java/automaton/cards/Deprecate.java +++ b/src/main/java/automaton/cards/Deprecate.java @@ -1,12 +1,8 @@ package automaton.cards; import automaton.AutomatonMod; -import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; -import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; -import com.megacrit.cardcrawl.powers.VulnerablePower; -import com.megacrit.cardcrawl.powers.WeakPower; import static automaton.AutomatonMod.makeBetaCardPath; diff --git a/src/main/java/automaton/cards/DigitalCarnage.java b/src/main/java/automaton/cards/DigitalCarnage.java index 358ef0986..83acd3c1e 100644 --- a/src/main/java/automaton/cards/DigitalCarnage.java +++ b/src/main/java/automaton/cards/DigitalCarnage.java @@ -23,7 +23,7 @@ public class DigitalCarnage extends AbstractBronzeCard { private static final int UPG_DAMAGE = 5; public DigitalCarnage() { - super(ID, 2, CardType.ATTACK, CardRarity.RARE, CardTarget.ENEMY); + super(ID, 2, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); // isEthereal = true; baseDamage = DAMAGE; thisEncodes(); diff --git a/src/main/java/automaton/cards/DonuBeam.java b/src/main/java/automaton/cards/DonuBeam.java index bf6117536..864214756 100644 --- a/src/main/java/automaton/cards/DonuBeam.java +++ b/src/main/java/automaton/cards/DonuBeam.java @@ -12,7 +12,6 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; -import com.megacrit.cardcrawl.powers.DexterityPower; import com.megacrit.cardcrawl.powers.StrengthPower; import guardian.vfx.SmallLaserEffectColored; diff --git a/src/main/java/automaton/cards/Explode.java b/src/main/java/automaton/cards/Explode.java index 59c19db0b..1db23eb62 100644 --- a/src/main/java/automaton/cards/Explode.java +++ b/src/main/java/automaton/cards/Explode.java @@ -2,16 +2,14 @@ import automaton.AutomatonMod; import com.megacrit.cardcrawl.actions.AbstractGameAction; -import com.megacrit.cardcrawl.actions.animations.VFXAction; import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; -import com.megacrit.cardcrawl.actions.common.LoseHPAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.cards.status.Burn; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; -import com.megacrit.cardcrawl.vfx.combat.ExplosionSmallEffect; import theHexaghost.powers.BurnPower; +import theHexaghost.relics.CandleOfCauterizing; import static automaton.AutomatonMod.makeBetaCardPath; @@ -27,6 +25,14 @@ public Explode() { AutomatonMod.loadJokeCardImage(this, makeBetaCardPath("Explode.png")); } + @Override + public void applyPowers() { + if(AbstractDungeon.player.hasRelic(CandleOfCauterizing.ID)){ + this.magicNumber = this.baseMagicNumber + CandleOfCauterizing.SOULBURN_BONUS_AMOUNT; + } + this.isMagicNumberModified = this.magicNumber != this.baseMagicNumber; + } + @Override public void use(AbstractPlayer p, AbstractMonster m) { for (AbstractMonster q : AbstractDungeon.getCurrRoom().monsters.monsters) { diff --git a/src/main/java/automaton/cards/FindAndReplace.java b/src/main/java/automaton/cards/FindAndReplace.java index 7272ce486..3803ad1da 100644 --- a/src/main/java/automaton/cards/FindAndReplace.java +++ b/src/main/java/automaton/cards/FindAndReplace.java @@ -9,11 +9,11 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; -import static automaton.AutomatonMod.makeBetaCardPath; - import java.util.ArrayList; import java.util.Comparator; +import static automaton.AutomatonMod.makeBetaCardPath; + public class FindAndReplace extends AbstractBronzeCard { public final static String ID = makeID("FindAndReplace"); diff --git a/src/main/java/automaton/cards/FineTuning.java b/src/main/java/automaton/cards/FineTuning.java index 4bad8e3db..220a407d0 100644 --- a/src/main/java/automaton/cards/FineTuning.java +++ b/src/main/java/automaton/cards/FineTuning.java @@ -21,7 +21,7 @@ public FineTuning() { super(ID, 0, CardType.SKILL, CardRarity.COMMON, CardTarget.SELF); baseMagicNumber = magicNumber = MAGIC; exhaust = true; - // this.tags.add(SneckoMod.BANNEDFORSNECKO); + this.tags.add(SneckoMod.BANNEDFORSNECKO); AutomatonMod.loadJokeCardImage(this, makeBetaCardPath("FineTuning.png")); } diff --git a/src/main/java/automaton/cards/Flail.java b/src/main/java/automaton/cards/Flail.java index 9aae3ea5b..5f76f738c 100644 --- a/src/main/java/automaton/cards/Flail.java +++ b/src/main/java/automaton/cards/Flail.java @@ -2,9 +2,7 @@ import automaton.AutomatonMod; import com.megacrit.cardcrawl.actions.AbstractGameAction; -import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; -import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.ArtifactPower; diff --git a/src/main/java/automaton/cards/ForLoop.java b/src/main/java/automaton/cards/ForLoop.java index ecf17a327..e0f4f35af 100644 --- a/src/main/java/automaton/cards/ForLoop.java +++ b/src/main/java/automaton/cards/ForLoop.java @@ -5,6 +5,7 @@ import automaton.powers.CloningPower; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; public class ForLoop extends AbstractBronzeCard { @@ -14,7 +15,7 @@ public class ForLoop extends AbstractBronzeCard { public ForLoop() { super(ID, -1, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); - // this.tags.add(SneckoMod.BANNEDFORSNECKO); + this.tags.add(SneckoMod.BANNEDFORSNECKO); exhaust = true; baseMagicNumber = magicNumber = 0; AutomatonMod.loadJokeCardImage(this, AutomatonMod.makeBetaCardPath("ForLoop.png")); diff --git a/src/main/java/automaton/cards/ForceShield.java b/src/main/java/automaton/cards/ForceShield.java index dd77d9c78..daa414d39 100644 --- a/src/main/java/automaton/cards/ForceShield.java +++ b/src/main/java/automaton/cards/ForceShield.java @@ -20,7 +20,7 @@ public class ForceShield extends AbstractBronzeCard { private static final int UPG_BLOCK = 4; public ForceShield() { - super(ID, 3, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); + super(ID, 4, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); baseBlock = BLOCK; if (CardCrawlGame.dungeon != null && AbstractDungeon.currMapNode != null) { this.configureCostsOnNewCard(); diff --git a/src/main/java/automaton/cards/FullRelease.java b/src/main/java/automaton/cards/FullRelease.java index 9b2765f4c..74617a8ee 100644 --- a/src/main/java/automaton/cards/FullRelease.java +++ b/src/main/java/automaton/cards/FullRelease.java @@ -19,7 +19,7 @@ public class FullRelease extends AbstractBronzeCard { public FullRelease() { - super(ID, 2, CardType.SKILL, CardRarity.RARE, CardTarget.SELF); + super(ID, 1, CardType.SKILL, CardRarity.RARE, CardTarget.SELF); thisEncodes(); AutomatonMod.loadJokeCardImage(this, makeBetaCardPath("FullRelease.png")); } @@ -53,6 +53,6 @@ public String getBonusChar() { } public void upp() { - upgradeBaseCost(1); + upgradeBaseCost(0); } } \ No newline at end of file diff --git a/src/main/java/automaton/cards/FunctionCard.java b/src/main/java/automaton/cards/FunctionCard.java index 6b765b48c..bbb06a1c0 100644 --- a/src/main/java/automaton/cards/FunctionCard.java +++ b/src/main/java/automaton/cards/FunctionCard.java @@ -16,8 +16,8 @@ import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; -import downfall.util.CardIgnore; import com.megacrit.cardcrawl.unlock.UnlockTracker; +import downfall.util.CardIgnore; import sneckomod.SneckoMod; import java.util.ArrayList; diff --git a/src/main/java/automaton/cards/Hardcode.java b/src/main/java/automaton/cards/Hardcode.java index 07be5379e..1dbb46ac0 100644 --- a/src/main/java/automaton/cards/Hardcode.java +++ b/src/main/java/automaton/cards/Hardcode.java @@ -1,4 +1,4 @@ -/* +package automaton.cards;/* package automaton.cards; import automaton.AutomatonMod; diff --git a/src/main/java/automaton/cards/HardenedForm.java b/src/main/java/automaton/cards/HardenedForm.java index 91558ffd8..d2e2cf6a5 100644 --- a/src/main/java/automaton/cards/HardenedForm.java +++ b/src/main/java/automaton/cards/HardenedForm.java @@ -13,8 +13,8 @@ public class HardenedForm extends AbstractBronzeCard { //stupid intellij stuff power, self, rare - private static final int MAGIC = 4; - private static final int UPG_MAGIC = 2; + private static final int MAGIC = 3; + private static final int UPG_MAGIC = 1; public HardenedForm() { super(ID, 2, CardType.POWER, CardRarity.RARE, CardTarget.SELF); diff --git a/src/main/java/automaton/cards/HyperBeam.java b/src/main/java/automaton/cards/HyperBeam.java index 92d2143f9..b3b7ad3a5 100644 --- a/src/main/java/automaton/cards/HyperBeam.java +++ b/src/main/java/automaton/cards/HyperBeam.java @@ -4,7 +4,6 @@ import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.animations.VFXAction; import com.megacrit.cardcrawl.actions.common.MakeTempCardInDrawPileAction; -import com.megacrit.cardcrawl.actions.common.ReduceCostAction; import com.megacrit.cardcrawl.actions.utility.SFXAction; import com.megacrit.cardcrawl.cards.status.VoidCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; @@ -20,14 +19,14 @@ public class HyperBeam extends AbstractBronzeCard { //stupid intellij stuff attack, all_enemy, rare - private static final int DAMAGE = 25; + private static final int DAMAGE = 19; private static final int UPG_DAMAGE = 9; public HyperBeam() { super(ID, 1, CardType.ATTACK, CardRarity.RARE, CardTarget.ALL_ENEMY); baseDamage = DAMAGE; isMultiDamage = true; - // selfRetain = true; + selfRetain = true; // exhaust = true; baseMagicNumber = magicNumber = 5; cardsToPreview = new VoidCard(); @@ -49,6 +48,6 @@ public void use(AbstractPlayer p, AbstractMonster m) { } public void upp() { - upgradeDamage(10); + upgradeDamage(7); } } \ No newline at end of file diff --git a/src/main/java/automaton/cards/InfiniteLoop.java b/src/main/java/automaton/cards/InfiniteLoop.java index d748c2479..e71267932 100644 --- a/src/main/java/automaton/cards/InfiniteLoop.java +++ b/src/main/java/automaton/cards/InfiniteLoop.java @@ -18,7 +18,7 @@ public class InfiniteLoop extends AbstractBronzeCard { private boolean showCard; public InfiniteLoop(boolean showCard) { - super(ID, 1, CardType.ATTACK, CardRarity.RARE, CardTarget.ENEMY); + super(ID, 1, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); baseDamage = DAMAGE; baseMagicNumber = magicNumber = 2; thisEncodes(); diff --git a/src/main/java/automaton/cards/Invalidate.java b/src/main/java/automaton/cards/Invalidate.java index d668bdeab..07ad0673c 100644 --- a/src/main/java/automaton/cards/Invalidate.java +++ b/src/main/java/automaton/cards/Invalidate.java @@ -1,11 +1,8 @@ package automaton.cards; import automaton.AutomatonMod; -import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; -import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; -import com.megacrit.cardcrawl.powers.VulnerablePower; import static automaton.AutomatonMod.makeBetaCardPath; diff --git a/src/main/java/automaton/cards/ItsAFeature.java b/src/main/java/automaton/cards/ItsAFeature.java index 58d06ebdf..08b5349c1 100644 --- a/src/main/java/automaton/cards/ItsAFeature.java +++ b/src/main/java/automaton/cards/ItsAFeature.java @@ -15,16 +15,15 @@ public class ItsAFeature extends AbstractBronzeCard { public ItsAFeature() { super(ID, 1, CardType.POWER, CardRarity.UNCOMMON, CardTarget.SELF); + this.baseMagicNumber = this.magicNumber = 3; AutomatonMod.loadJokeCardImage(this, makeBetaCardPath("ItsAFeature.png")); } public void use(AbstractPlayer p, AbstractMonster m) { - applyToSelf(new FeaturePower(1)); + applyToSelf(new FeaturePower(magicNumber)); } public void upp() { - isInnate = true; - rawDescription = UPGRADE_DESCRIPTION; - initializeDescription(); + upgradeMagicNumber(1); } } \ No newline at end of file diff --git a/src/main/java/automaton/cards/MinorBeam.java b/src/main/java/automaton/cards/MinorBeam.java index 902a5cc40..4bd39ea14 100644 --- a/src/main/java/automaton/cards/MinorBeam.java +++ b/src/main/java/automaton/cards/MinorBeam.java @@ -16,7 +16,7 @@ public class MinorBeam extends AbstractBronzeCard { //stupid intellij stuff attack, enemy, special - private static final int DAMAGE = 5; + private static final int DAMAGE = 4; private static final int UPG_DAMAGE = 2; public MinorBeam() { diff --git a/src/main/java/automaton/cards/Mutator.java b/src/main/java/automaton/cards/Mutator.java index e66aaf0af..4bd874cc4 100644 --- a/src/main/java/automaton/cards/Mutator.java +++ b/src/main/java/automaton/cards/Mutator.java @@ -20,10 +20,11 @@ public class Mutator extends AbstractBronzeCard { public Mutator() { super(ID, 1, CardType.POWER, CardRarity.RARE, CardTarget.SELF); AutomatonMod.loadJokeCardImage(this, makeBetaCardPath("Mutator.png")); + baseMagicNumber = magicNumber = 2; } public void use(AbstractPlayer p, AbstractMonster m) { - applyToSelf(new StrengthPower(p, 1)); + applyToSelf(new StrengthPower(p, magicNumber)); AbstractCard q = this; atb(new SelectCardsInHandAction(1, masterUI.TEXT[6], c -> c.type == CardType.STATUS, (cards) -> { att(new MakeTempCardInHandAction(q.makeStatEquivalentCopy(), true)); diff --git a/src/main/java/automaton/cards/NullPointer.java b/src/main/java/automaton/cards/NullPointer.java index 521497b77..9f200e56d 100644 --- a/src/main/java/automaton/cards/NullPointer.java +++ b/src/main/java/automaton/cards/NullPointer.java @@ -1,15 +1,15 @@ package automaton.cards; import automaton.AutomatonMod; -import com.megacrit.cardcrawl.core.CardCrawlGame; -import expansioncontent.cardmods.UnplayableMod; import basemod.helpers.CardModifierManager; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.animations.VFXAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.vfx.combat.ViceCrushEffect; +import expansioncontent.cardmods.UnplayableMod; import static automaton.AutomatonMod.makeBetaCardPath; diff --git a/src/main/java/automaton/cards/Overheat.java b/src/main/java/automaton/cards/Overheat.java index 3d396eabb..e94b9414a 100644 --- a/src/main/java/automaton/cards/Overheat.java +++ b/src/main/java/automaton/cards/Overheat.java @@ -13,7 +13,7 @@ public class Overheat extends AbstractBronzeCard { //stupid intellij stuff attack, enemy, common private static final int DAMAGE = 18; - private static final int UPG_DAMAGE = 6; + private static final int UPG_DAMAGE = 4; public Overheat() { super(ID, 2, CardType.ATTACK, CardRarity.COMMON, CardTarget.ENEMY); diff --git a/src/main/java/automaton/cards/Overload.java b/src/main/java/automaton/cards/Overload.java index 2109937f6..2199950f4 100644 --- a/src/main/java/automaton/cards/Overload.java +++ b/src/main/java/automaton/cards/Overload.java @@ -9,6 +9,7 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.vfx.combat.LightningEffect; +import sneckomod.SneckoMod; import static automaton.AutomatonMod.makeBetaCardPath; @@ -21,6 +22,7 @@ public class Overload extends AbstractBronzeCard { public Overload() { super(ID, 1, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); exhaust = true; + this.tags.add(SneckoMod.BANNEDFORSNECKO); AutomatonMod.loadJokeCardImage(this, makeBetaCardPath("Overload.png")); } diff --git a/src/main/java/automaton/cards/Repair.java b/src/main/java/automaton/cards/Repair.java index 1f13dab03..146e03c80 100644 --- a/src/main/java/automaton/cards/Repair.java +++ b/src/main/java/automaton/cards/Repair.java @@ -6,7 +6,6 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; -import sneckomod.SneckoMod; import static automaton.AutomatonMod.makeBetaCardPath; diff --git a/src/main/java/automaton/cards/Replicate.java b/src/main/java/automaton/cards/Replicate.java index faaa42bb3..20971689e 100644 --- a/src/main/java/automaton/cards/Replicate.java +++ b/src/main/java/automaton/cards/Replicate.java @@ -1,9 +1,6 @@ package automaton.cards; import automaton.AutomatonMod; -import automaton.cardmods.EncodeAndShuffleMod; -import automaton.cardmods.EncodeMod; -import basemod.helpers.CardModifierManager; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.common.MakeTempCardInDiscardAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; diff --git a/src/main/java/automaton/cards/Repulsor.java b/src/main/java/automaton/cards/Repulsor.java index 4782f7cb6..897b2a72b 100644 --- a/src/main/java/automaton/cards/Repulsor.java +++ b/src/main/java/automaton/cards/Repulsor.java @@ -4,7 +4,6 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; import guardian.powers.ExhaustStatusesPower; -import sneckomod.SneckoMod; import static automaton.AutomatonMod.makeBetaCardPath; diff --git a/src/main/java/automaton/cards/Safeguard.java b/src/main/java/automaton/cards/Safeguard.java index 5d8c20bb7..204881458 100644 --- a/src/main/java/automaton/cards/Safeguard.java +++ b/src/main/java/automaton/cards/Safeguard.java @@ -1,13 +1,8 @@ package automaton.cards; import automaton.AutomatonMod; -import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; -import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; -import com.megacrit.cardcrawl.powers.FrailPower; -import com.megacrit.cardcrawl.powers.WeakPower; -import guardian.powers.ExhaustStatusesPower; import static automaton.AutomatonMod.makeBetaCardPath; @@ -17,12 +12,12 @@ public class Safeguard extends AbstractBronzeCard { //stupid intellij stuff skill, self, uncommon - private static final int BLOCK = 7; + private static final int BLOCK = 4; private static final int MAGIC = 2; private static final int UPG_MAGIC = -1; public Safeguard() { - super(ID, 1, CardType.SKILL, CardRarity.COMMON, CardTarget.SELF); + super(ID, 0, CardType.SKILL, CardRarity.COMMON, CardTarget.SELF); baseBlock = BLOCK; baseMagicNumber = magicNumber = MAGIC; thisEncodes(); diff --git a/src/main/java/automaton/cards/Shell.java b/src/main/java/automaton/cards/Shell.java index f213a5c02..86d421a8f 100644 --- a/src/main/java/automaton/cards/Shell.java +++ b/src/main/java/automaton/cards/Shell.java @@ -29,15 +29,16 @@ public void use(AbstractPlayer p, AbstractMonster m) { applyToSelf(new BlurPower(p, magicNumber)); } - @Override - public void onCompile(AbstractCard function, boolean forGameplay) { - if (forGameplay && upgraded) { - applyToSelf(new BlurPower(AbstractDungeon.player, magicNumber)); - } + @Override + public void onCompile(AbstractCard function, boolean forGameplay) { + if (forGameplay && upgraded) { + applyToSelf(new BlurPower(AbstractDungeon.player, magicNumber)); + } } public void upp() { + // upgradeBaseCost(1); rawDescription = UPGRADE_DESCRIPTION; - initializeDescription(); + initializeDescription(); } } \ No newline at end of file diff --git a/src/main/java/automaton/cards/Shield.java b/src/main/java/automaton/cards/Shield.java index 9d410c2c4..d95b813cc 100644 --- a/src/main/java/automaton/cards/Shield.java +++ b/src/main/java/automaton/cards/Shield.java @@ -19,6 +19,7 @@ public class Shield extends AbstractBronzeCard { public Shield() { super(ID, 1, CardType.SKILL, CardRarity.COMMON, CardTarget.SELF); baseBlock = BLOCK; + selfRetain = true; cardsToPreview = new Slimed(); AutomatonMod.loadJokeCardImage(this, makeBetaCardPath("Shield.png")); } diff --git a/src/main/java/automaton/cards/ShipIt.java b/src/main/java/automaton/cards/ShipIt.java index 00c6a0d95..739687809 100644 --- a/src/main/java/automaton/cards/ShipIt.java +++ b/src/main/java/automaton/cards/ShipIt.java @@ -7,89 +7,60 @@ import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; -import java.util.Iterator; - public class ShipIt extends AbstractBronzeCard { public final static String ID = makeID("ShipIt"); - //stupid intellij stuff attack, enemy, rare - + // Attack card constants private static final int DAMAGE = 5; - private static final int MAGIC = 2; - private static final int UPG_MAGIC = 1; + private static final int UPGRADE_DAMAGE = 2; public ShipIt() { super(ID, 1, CardType.ATTACK, CardRarity.RARE, CardTarget.ENEMY); baseDamage = DAMAGE; - baseMagicNumber = magicNumber = MAGIC; AutomatonMod.loadJokeCardImage(this, AutomatonMod.makeBetaCardPath("ShipIt.png")); } public static int countCards() { - int count = 0; - Iterator var1 = AbstractDungeon.player.hand.group.iterator(); - - AbstractCard c; - while (var1.hasNext()) { - c = (AbstractCard) var1.next(); + int statusCount = 0; + for (AbstractCard c : AbstractDungeon.player.exhaustPile.group) { if (c.type == CardType.STATUS) { - ++count; + statusCount++; } } + return statusCount; + } - var1 = AbstractDungeon.player.drawPile.group.iterator(); - - while (var1.hasNext()) { - c = (AbstractCard) var1.next(); - if (c.type == CardType.STATUS) { - ++count; - } - } + public void applyPowers() { + super.applyPowers(); - var1 = AbstractDungeon.player.discardPile.group.iterator(); + if (AbstractDungeon.player != null) { + this.rawDescription = cardStrings.DESCRIPTION; - while (var1.hasNext()) { - c = (AbstractCard) var1.next(); - if (c.type == CardType.STATUS) { - ++count; + int statusCount = 0; + for (AbstractCard c : AbstractDungeon.player.exhaustPile.group) { + if (c.type == CardType.STATUS) { + statusCount++; + } } - } - var1 = AbstractDungeon.player.exhaustPile.group.iterator(); + this.rawDescription = cardStrings.EXTENDED_DESCRIPTION[0] + statusCount + cardStrings.EXTENDED_DESCRIPTION[1]; - while (var1.hasNext()) { - c = (AbstractCard) var1.next(); - if (c.type == CardType.STATUS) { - ++count; - } + this.initializeDescription(); } - - return count; } - public void calculateCardDamage(AbstractMonster mo) { - int realBaseDamage = this.baseDamage; - this.baseDamage += this.magicNumber * countCards(); - super.calculateCardDamage(mo); - this.baseDamage = realBaseDamage; - this.isDamageModified = this.damage != this.baseDamage; - } - - public void applyPowers() { - int realBaseDamage = this.baseDamage; - this.baseDamage += this.magicNumber * countCards(); - super.applyPowers(); - this.baseDamage = realBaseDamage; - this.isDamageModified = this.damage != this.baseDamage; - } - - + @Override public void use(AbstractPlayer p, AbstractMonster m) { dmg(m, AbstractGameAction.AttackEffect.FIRE); + int count = countCards(); + for (int i = 0; i < count; i++) { + dmg(m, AbstractGameAction.AttackEffect.FIRE); + } } + @Override public void upp() { - upgradeMagicNumber(UPG_MAGIC); + upgradeDamage(UPGRADE_DAMAGE); } -} \ No newline at end of file +} diff --git a/src/main/java/automaton/cards/ThunderWave.java b/src/main/java/automaton/cards/ThunderWave.java index 9a9fc5816..4c00029b1 100644 --- a/src/main/java/automaton/cards/ThunderWave.java +++ b/src/main/java/automaton/cards/ThunderWave.java @@ -21,11 +21,11 @@ public class ThunderWave extends AbstractBronzeCard { //stupid intellij stuff attack, all_enemy, rare - private static final int DAMAGE = 18; - private static final int UPG_DAMAGE = 6; + private static final int DAMAGE = 12; + private static final int UPG_DAMAGE = 4; public ThunderWave() { - super(ID, 3, CardType.ATTACK, CardRarity.RARE, CardTarget.ALL_ENEMY); + super(ID, 2, CardType.ATTACK, CardRarity.RARE, CardTarget.ALL_ENEMY); baseDamage = DAMAGE; isMultiDamage = true; exhaust = true; diff --git a/src/main/java/automaton/cards/TinkerersToolbox.java b/src/main/java/automaton/cards/TinkerersToolbox.java index 655b3edb2..4a54aaf99 100644 --- a/src/main/java/automaton/cards/TinkerersToolbox.java +++ b/src/main/java/automaton/cards/TinkerersToolbox.java @@ -1,16 +1,19 @@ package automaton.cards; import automaton.AutomatonMod; +import basemod.patches.com.megacrit.cardcrawl.cards.AbstractCard.MultiCardPreview; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.megacrit.cardcrawl.actions.common.MakeTempCardInHandAction; import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.tempCards.Shiv; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.helpers.CardLibrary; import com.megacrit.cardcrawl.monsters.AbstractMonster; import downfall.util.SelectCardsCenteredAction; +import gremlin.cards.Ward; import sneckomod.SneckoMod; import static automaton.AutomatonMod.makeBetaCardPath; @@ -28,7 +31,7 @@ public class TinkerersToolbox extends AbstractBronzeCard { private ArrayList cardsList = new ArrayList<>(); public TinkerersToolbox() { - super(ID, 0, CardType.SKILL, CardRarity.RARE, CardTarget.SELF); + super(ID, 1, CardType.SKILL, CardRarity.RARE, CardTarget.SELF); exhaust = true; selfRetain = true; // this.tags.add(SneckoMod.BANNEDFORSNECKO); @@ -36,6 +39,7 @@ public TinkerersToolbox() { cardsList.add(new Batch()); cardsList.add(new Decompile()); cardsList.add(new ByteShift()); + MultiCardPreview.add(this, new Debug(), new Batch(), new Decompile(), new ByteShift()); AutomatonMod.loadJokeCardImage(this, makeBetaCardPath("TinkerersToolbox.png")); } @@ -44,31 +48,9 @@ public void use(AbstractPlayer p, AbstractMonster m) { } public void upp() { - exhaust = false; - rawDescription = UPGRADE_DESCRIPTION; - initializeDescription(); + upgradeBaseCost(0); } - @Override - public void update() { - super.update(); - if (hb.hovered) { - if (rotationTimer <= 0F) { - rotationTimer = 2F; - if (cardsList.size() == 0) { - cardsToPreview = CardLibrary.cards.get("Madness"); - } else { - cardsToPreview = cardsList.get(previewIndex); - } - if (previewIndex == cardsList.size() - 1) { - previewIndex = 0; - } else { - previewIndex++; - } - } else { - rotationTimer -= Gdx.graphics.getDeltaTime(); - } - } - } -} \ No newline at end of file + + } \ No newline at end of file diff --git a/src/main/java/automaton/cards/Verify.java b/src/main/java/automaton/cards/Verify.java index a3944a401..5706cabfe 100644 --- a/src/main/java/automaton/cards/Verify.java +++ b/src/main/java/automaton/cards/Verify.java @@ -17,7 +17,7 @@ public class Verify extends AbstractBronzeCard { public Verify() { super(ID, 3, CardType.POWER, CardRarity.RARE, CardTarget.SELF); - // this.tags.add(SneckoMod.BANNEDFORSNECKO); + this.tags.add(SneckoMod.BANNEDFORSNECKO); tags.add(BaseModCardTags.FORM); isEthereal = true; AutomatonMod.loadJokeCardImage(this, makeBetaCardPath("Verify.png")); diff --git a/src/main/java/automaton/cards/Virus.java b/src/main/java/automaton/cards/Virus.java index d3dab71d9..50f326315 100644 --- a/src/main/java/automaton/cards/Virus.java +++ b/src/main/java/automaton/cards/Virus.java @@ -1,14 +1,15 @@ package automaton.cards; import automaton.AutomatonMod; -import com.megacrit.cardcrawl.actions.common.ExhaustSpecificCardAction; -import com.megacrit.cardcrawl.actions.common.MakeTempCardInDrawPileAction; -import com.megacrit.cardcrawl.actions.common.MakeTempCardInHandAction; +import com.megacrit.cardcrawl.actions.common.*; import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.tempCards.Shiv; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.DrawCardNextTurnPower; import com.megacrit.cardcrawl.powers.FrailPower; +import gremlin.cards.Ward; import static com.megacrit.cardcrawl.actions.AbstractGameAction.AttackEffect.FIRE; import static com.megacrit.cardcrawl.actions.AbstractGameAction.AttackEffect.LIGHTNING; @@ -19,33 +20,38 @@ public class Virus extends AbstractBronzeCard { //stupid intellij stuff attack, enemy, uncommon - private static final int DAMAGE = 5; + private static final int DAMAGE = 4; public Virus() { super(ID, 1, CardType.ATTACK, CardRarity.RARE, CardTarget.ENEMY); baseDamage = DAMAGE; cardsToPreview = new MinorBeam(); - selfRetain = true; exhaust = true; AutomatonMod.loadJokeCardImage(this, AutomatonMod.makeBetaCardPath("Virus.png")); } public void use(AbstractPlayer p, AbstractMonster m) { dmg(m, LIGHTNING); - for (AbstractCard c:AbstractDungeon.player.hand.group){ - if (c != this) { - atb(new ExhaustSpecificCardAction(c, AbstractDungeon.player.hand)); - AbstractCard c2 = new MinorBeam(); - if (upgraded) c2.upgrade(); - atb(new MakeTempCardInHandAction(c2)); + int theSize = AbstractDungeon.player.hand.size(); + if (upgraded) { + AbstractCard s = (new MinorBeam()).makeCopy(); + s.upgrade(); + if (theSize>0) { + this.addToTop(new MakeTempCardInHandAction(s, theSize-1)); + } + } else { + if (theSize>0) { + this.addToTop(new MakeTempCardInHandAction(new MinorBeam(), theSize - 1)); } } - } + this.addToTop(new DiscardAction(AbstractDungeon.player, AbstractDungeon.player, theSize-1, false)); - public void upp() { - cardsToPreview.upgrade(); - upgradeDamage(2); - rawDescription = UPGRADE_DESCRIPTION; - initializeDescription(); } -} \ No newline at end of file + + public void upp () { + cardsToPreview.upgrade(); + upgradeDamage(2); + rawDescription = UPGRADE_DESCRIPTION; + initializeDescription(); + } + } \ No newline at end of file diff --git a/src/main/java/automaton/cards/WildBeam.java b/src/main/java/automaton/cards/WildBeam.java index c4e845646..9c542db0f 100644 --- a/src/main/java/automaton/cards/WildBeam.java +++ b/src/main/java/automaton/cards/WildBeam.java @@ -21,8 +21,8 @@ public class WildBeam extends AbstractBronzeCard { //stupid intellij stuff attack, enemy, common - private static final int DAMAGE = 9; - private static final int UPG_DAMAGE = 3; + private static final int DAMAGE = 10; + private static final int UPG_DAMAGE = 4; public WildBeam() { super(ID, 1, CardType.ATTACK, CardRarity.COMMON, CardTarget.ENEMY); diff --git a/src/main/java/automaton/events/AccursedBlacksmithAutomaton.java b/src/main/java/automaton/events/AccursedBlacksmithAutomaton.java index d0062097c..260bfbfe5 100644 --- a/src/main/java/automaton/events/AccursedBlacksmithAutomaton.java +++ b/src/main/java/automaton/events/AccursedBlacksmithAutomaton.java @@ -102,8 +102,8 @@ public void update() c.upgrade(); logMetricCardUpgrade(ID, "Forge", c); AbstractDungeon.player.bottledCardUpgradeCheck(AbstractDungeon.gridSelectScreen.selectedCards.get(0)); - AbstractDungeon.effectsQueue.add(new com.megacrit.cardcrawl.vfx.cardManip.ShowCardBrieflyEffect(c.makeStatEquivalentCopy())); - AbstractDungeon.topLevelEffects.add(new com.megacrit.cardcrawl.vfx.UpgradeShineEffect(Settings.WIDTH / 2.0F, Settings.HEIGHT / 2.0F)); + AbstractDungeon.effectsQueue.add(new ShowCardBrieflyEffect(c.makeStatEquivalentCopy())); + AbstractDungeon.topLevelEffects.add(new UpgradeShineEffect(Settings.WIDTH / 2.0F, Settings.HEIGHT / 2.0F)); AbstractDungeon.gridSelectScreen.selectedCards.clear(); this.pickCard = false; } diff --git a/src/main/java/automaton/events/AncientFactory.java b/src/main/java/automaton/events/AncientFactory.java index 791264f93..55c7a7480 100644 --- a/src/main/java/automaton/events/AncientFactory.java +++ b/src/main/java/automaton/events/AncientFactory.java @@ -10,10 +10,18 @@ import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.events.AbstractImageEvent; +import com.megacrit.cardcrawl.helpers.MonsterHelper; import com.megacrit.cardcrawl.localization.EventStrings; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.monsters.MonsterGroup; +import com.megacrit.cardcrawl.monsters.beyond.Deca; +import com.megacrit.cardcrawl.monsters.beyond.Donu; +import com.megacrit.cardcrawl.monsters.beyond.Spiker; import com.megacrit.cardcrawl.powers.StrengthPower; +import com.megacrit.cardcrawl.relics.ChampionsBelt; +import com.megacrit.cardcrawl.relics.CloakClasp; +import com.megacrit.cardcrawl.relics.WristBlade; +import slimebound.SlimeboundMod; public class AncientFactory extends AbstractImageEvent { public static final String ID = "bronze:AncientFactory"; @@ -51,6 +59,7 @@ protected void buttonEffect(int buttonPressed) { case 0: logMetric(ID, "Fought Donu"); this.screen = CurScreen.FIGHT; + //SlimeboundMod.logger.info("fight"); m = new ProtoDonu(); m.maxHealth = m.maxHealth / 2; m.currentHealth = m.maxHealth; @@ -67,6 +76,7 @@ protected void buttonEffect(int buttonPressed) { case 1: logMetric(ID, "Fought Deca"); this.screen = CurScreen.FIGHT; + //SlimeboundMod.logger.info("fight"); m = new ProtoDeca(); m.maxHealth = m.maxHealth / 2; m.currentHealth = m.maxHealth; @@ -82,6 +92,7 @@ protected void buttonEffect(int buttonPressed) { case 2: logMetric(ID, "Fought Donu and Deca"); this.screen = CurScreen.FIGHT; + //SlimeboundMod.logger.info("fight"); m = new ProtoDonu(); m.maxHealth = m.maxHealth / 2; m.currentHealth = m.maxHealth; diff --git a/src/main/java/automaton/events/BackToBasicsAutomaton.java b/src/main/java/automaton/events/BackToBasicsAutomaton.java index 72264c57b..8493a4b00 100644 --- a/src/main/java/automaton/events/BackToBasicsAutomaton.java +++ b/src/main/java/automaton/events/BackToBasicsAutomaton.java @@ -42,13 +42,13 @@ public class BackToBasicsAutomaton extends AbstractImageEvent { OPTIONSGUARDIAN = eventStringsGuardian.OPTIONS; } - private BackToBasicsAutomaton.CUR_SCREEN screen; + private CUR_SCREEN screen; private List cardsUpgraded; private ArrayList cardsToRemove; public BackToBasicsAutomaton() { super(NAME, DIALOG_1, "images/events/backToBasics.jpg"); - this.screen = BackToBasicsAutomaton.CUR_SCREEN.INTRO; + this.screen = CUR_SCREEN.INTRO; this.cardsUpgraded = new ArrayList(); for (AbstractCard c : AbstractDungeon.player.masterDeck.group) { @@ -130,7 +130,7 @@ protected void buttonEffect(int buttonPressed) { this.imageEventText.clearRemainingOptions(); } - this.screen = BackToBasicsAutomaton.CUR_SCREEN.COMPLETE; + this.screen = CUR_SCREEN.COMPLETE; break; case COMPLETE: this.openMap(); diff --git a/src/main/java/automaton/events/CrystalForgeAutomaton.java b/src/main/java/automaton/events/CrystalForgeAutomaton.java index 18fd6110c..37c20d91a 100644 --- a/src/main/java/automaton/events/CrystalForgeAutomaton.java +++ b/src/main/java/automaton/events/CrystalForgeAutomaton.java @@ -10,12 +10,9 @@ import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.events.AbstractImageEvent; import com.megacrit.cardcrawl.localization.EventStrings; -import com.megacrit.cardcrawl.vfx.UpgradeShineEffect; import com.megacrit.cardcrawl.vfx.cardManip.PurgeCardEffect; import com.megacrit.cardcrawl.vfx.cardManip.ShowCardAndObtainEffect; -import com.megacrit.cardcrawl.vfx.cardManip.ShowCardBrieflyEffect; import guardian.GuardianMod; -import guardian.cards.*; import java.util.ArrayList; @@ -56,10 +53,14 @@ public CrystalForgeAutomaton() { validCards = new ArrayList<>(); rareCards = new ArrayList<>(); - for (AbstractCard c : AbstractDungeon.player.masterDeck.group) { + + for (AbstractCard c : CardGroup.getGroupWithoutBottledCards(AbstractDungeon.player.masterDeck).group) { if (c.hasTag(AutomatonMod.ENCODES)) { validCards.add(c); } + } + + for (AbstractCard c : AbstractDungeon.player.masterDeck.group) { if (c.rarity == AbstractCard.CardRarity.RARE) rareCards.add(c); } if (validCards.size() == 0) { diff --git a/src/main/java/automaton/patches/DontShowFunctionInCardLibraryPatch.java b/src/main/java/automaton/patches/DontShowFunctionInCardLibraryPatch.java index b7d7c3015..01d9e82a8 100644 --- a/src/main/java/automaton/patches/DontShowFunctionInCardLibraryPatch.java +++ b/src/main/java/automaton/patches/DontShowFunctionInCardLibraryPatch.java @@ -1,4 +1,4 @@ -/*package automaton.patches; +package automaton.patches;/*package automaton.patches; import automaton.cards.FunctionCard; import basemod.patches.com.megacrit.cardcrawl.screens.compendium.CardLibraryScreen.EverythingFix; diff --git a/src/main/java/automaton/patches/StatusReplacePatch.java b/src/main/java/automaton/patches/StatusReplacePatch.java index fecaac1c4..8c4b88bb3 100644 --- a/src/main/java/automaton/patches/StatusReplacePatch.java +++ b/src/main/java/automaton/patches/StatusReplacePatch.java @@ -25,30 +25,27 @@ public class StatusReplacePatch { @SpirePrefixPatch public static SpireReturn Prefix(AbstractCard abstractCard) { - // //SlimeboundMod.logger.info("making stat equivalent copy"); if (abstractCard.type == AbstractCard.CardType.STATUS && !(abstractCard instanceof AbstractBossCard)) { if (AbstractDungeon.player != null && CardCrawlGame.isInARun()) { if (AbstractDungeon.getCurrRoom().phase == AbstractRoom.RoomPhase.COMBAT) { - ////SlimeboundMod.logger.info("IS STATUS!"); if (AbstractDungeon.player.hasRelic(BronzeIdol.ID)) { if (!abstractCard.hasTag(AutomatonMod.GOOD_STATUS)) { AbstractCard newStatus = AutomatonMod.getGoodStatus(abstractCard); - if(AbstractDungeon.player.hasRelic(MedicalKit.ID)&&!(newStatus instanceof UsefulSlime)){ - newStatus.cost=-2; - newStatus.costForTurn=-2; - newStatus.isCostModified=true; - newStatus.isCostModifiedForTurn=true; + if(AbstractDungeon.player.hasRelic(MedicalKit.ID)&&!(newStatus instanceof UsefulSlime)){ + newStatus.cost=-2; + newStatus.costForTurn=-2; + newStatus.isCostModified=true; + newStatus.isCostModifiedForTurn=true; + } + return SpireReturn.Return(newStatus); } - // //SlimeboundMod.logger.info("replacing with " + newStatus.name); - return SpireReturn.Return(newStatus); } } } } - } - return SpireReturn.Continue(); + return SpireReturn.Continue(); - } + } -} + } \ No newline at end of file diff --git a/src/main/java/automaton/powers/FeaturePower.java b/src/main/java/automaton/powers/FeaturePower.java index 0522838b2..a7514e15b 100644 --- a/src/main/java/automaton/powers/FeaturePower.java +++ b/src/main/java/automaton/powers/FeaturePower.java @@ -1,5 +1,6 @@ package automaton.powers; +import com.megacrit.cardcrawl.actions.common.GainBlockAction; import com.megacrit.cardcrawl.actions.common.ReducePowerAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; @@ -20,12 +21,9 @@ public FeaturePower(int amount) { @Override public void onCardDraw(AbstractCard card) { - if (card.type == AbstractCard.CardType.STATUS || card.type == AbstractCard.CardType.CURSE) { + if (card.type == AbstractCard.CardType.STATUS) { flash(); - applyToSelf(new StrengthPower(owner, amount)); - applyToSelf(new LoseStrengthPower(owner, amount)); - applyToSelf(new DexterityPower(owner, amount)); - applyToSelf(new LoseDexterityPower(owner, amount)); + AbstractDungeon.actionManager.addToBottom(new GainBlockAction(AbstractDungeon.player, AbstractDungeon.player, amount)); //Imagine how much time could be saved with some kind of function that could be used to make any power temporary. //IE: applyTempPower(new StrengthPower(owner, amount)): //Function applies the power, then uses some abstract Java trickery to make another power, called Lose [powername] @@ -39,8 +37,15 @@ public void onCardDraw(AbstractCard card) { } } + public void onExhaust(AbstractCard card){ + if (card.type == AbstractCard.CardType.STATUS) { + flash(); + AbstractDungeon.actionManager.addToBottom(new GainBlockAction(AbstractDungeon.player, AbstractDungeon.player, amount)); + } + } + @Override public void updateDescription() { - description = DESCRIPTIONS[0] + amount + DESCRIPTIONS[1] + amount + DESCRIPTIONS[2]; + description = DESCRIPTIONS[0] + amount + DESCRIPTIONS[1]; } } diff --git a/src/main/java/automaton/powers/HardenedFormPower.java b/src/main/java/automaton/powers/HardenedFormPower.java index 791b15f0d..4dcf8b3bd 100644 --- a/src/main/java/automaton/powers/HardenedFormPower.java +++ b/src/main/java/automaton/powers/HardenedFormPower.java @@ -45,7 +45,7 @@ public void update() { AbstractMonster m = AbstractDungeon.getMonsters().getRandomMonster(true); if (m != null) { addToTop(new GainBlockAction(owner, x)); - addToTop(new PseudoDamageRandomEnemyAction(m, new DamageInfo(owner, x, DamageInfo.DamageType.THORNS), AbstractGameAction.AttackEffect.NONE)); + addToTop(new PseudoDamageRandomEnemyAction(m, new DamageInfo(owner, x, DamageInfo.DamageType.THORNS), AttackEffect.NONE)); AbstractDungeon.actionManager.addToTop(new VFXAction(new com.megacrit.cardcrawl.vfx.combat.SmallLaserEffect(orbVFX.currentX + (50F * Settings.scale), orbVFX.currentY + (85F * Settings.scale), m.hb.cX, m.hb.cY), 0.1F)); AbstractDungeon.actionManager.addToTop(new SFXAction("ATTACK_MAGIC_BEAM_SHORT", 0.5F)); } diff --git a/src/main/java/automaton/relics/AnalyticalCore.java b/src/main/java/automaton/relics/AnalyticalCore.java index dd6c23abd..b854e7fcd 100644 --- a/src/main/java/automaton/relics/AnalyticalCore.java +++ b/src/main/java/automaton/relics/AnalyticalCore.java @@ -4,7 +4,6 @@ import automaton.cards.SpaghettiCode; import automaton.powers.LibraryModPower; import basemod.abstracts.CustomRelic; -import basemod.cardmods.EtherealMod; import basemod.helpers.CardModifierManager; import com.badlogic.gdx.graphics.Texture; import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; diff --git a/src/main/java/automaton/relics/BottledCode.java b/src/main/java/automaton/relics/BottledCode.java index cd88d4a7c..e88e900d8 100644 --- a/src/main/java/automaton/relics/BottledCode.java +++ b/src/main/java/automaton/relics/BottledCode.java @@ -6,6 +6,7 @@ import basemod.abstracts.CustomRelic; import basemod.abstracts.CustomSavable; import com.badlogic.gdx.graphics.Texture; +import com.evacipated.cardcrawl.mod.stslib.relics.OnRemoveCardFromMasterDeckRelic; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.cards.CardGroup; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; @@ -13,11 +14,12 @@ import com.megacrit.cardcrawl.helpers.PowerTip; import com.megacrit.cardcrawl.relics.AbstractRelic; import com.megacrit.cardcrawl.rooms.AbstractRoom; +import com.megacrit.cardcrawl.vfx.cardManip.ShowCardBrieflyEffect; import guardian.patches.BottledStasisPatch; import java.util.function.Predicate; -public class BottledCode extends CustomRelic implements CustomBottleRelic, CustomSavable { +public class BottledCode extends CustomRelic implements CustomBottleRelic, CustomSavable, OnRemoveCardFromMasterDeckRelic { public static final String ID = "bronze:BottledCode"; public static final String IMG_PATH = "bottledCode.png"; public static final String OUTLINE_IMG_PATH = "bottledCode.png"; @@ -26,7 +28,18 @@ public class BottledCode extends CustomRelic implements CustomBottleRelic, Custo public BottledCode() { super(ID, new Texture(AutomatonMod.makeRelicPath(IMG_PATH)), new Texture(AutomatonMod.makeRelicOutlinePath(OUTLINE_IMG_PATH)), - RelicTier.SPECIAL, LandingSound.FLAT); + RelicTier.SPECIAL, LandingSound.CLINK); + } + + @Override + public void onRemoveCardFromMasterDeck(AbstractCard var1) { + if (this.card != null) { + if (var1.uuid == card.uuid) { + this.flash(); + this.grayscale = true; + setDescriptionAfterLoading(); + } + } } @Override @@ -102,17 +115,51 @@ public void update() { AbstractDungeon.getCurrRoom().phase = AbstractRoom.RoomPhase.COMPLETE; AbstractDungeon.gridSelectScreen.selectedCards.clear(); + + AbstractDungeon.topLevelEffects.add(new ShowCardBrieflyEffect(card.makeStatEquivalentCopy())); + setDescriptionAfterLoading(); } } - private void setDescriptionAfterLoading() { - this.description = this.DESCRIPTIONS[2] + FontHelper.colorString(this.card.name, "y") + this.DESCRIPTIONS[3]; - tips.clear(); - tips.add(new PowerTip(name, description)); - initializeTips(); + public void setDescriptionAfterLoading() { + + boolean cardExists = false; + + if (cardSelected) { + if (card != null) { + for (AbstractCard c : AbstractDungeon.player.masterDeck.group) { + if (c.uuid == card.uuid) { + cardExists = true; + break; + } + } + } + + if (!cardExists) { + tips.clear(); + this.description = this.DESCRIPTIONS[4]; + this.grayscale = true; + initializeTips(); + } + + if (cardExists) { + this.description = this.DESCRIPTIONS[2] + FontHelper.colorString(this.card.name, "y") + this.DESCRIPTIONS[3]; + this.grayscale = false; + tips.clear(); + tips.add(new PowerTip(name, description)); + initializeTips(); + } + } } +// @Override +// public void onRemoveCardFromMasterDeck(AbstractCard var1){ +// if (var1.uuid == card.uuid) { +// setDescriptionAfterLoading(); +// } +// } + @Override public AbstractRelic makeCopy() { return new BottledCode(); diff --git a/src/main/java/automaton/relics/BronzeCore.java b/src/main/java/automaton/relics/BronzeCore.java index ed5a0f827..47cd6b34d 100644 --- a/src/main/java/automaton/relics/BronzeCore.java +++ b/src/main/java/automaton/relics/BronzeCore.java @@ -1,11 +1,11 @@ package automaton.relics; import automaton.AutomatonMod; -import com.megacrit.cardcrawl.actions.common.GainEnergyAction; -import downfall.util.TextureLoader; import basemod.abstracts.CustomRelic; import com.badlogic.gdx.graphics.Texture; +import com.megacrit.cardcrawl.actions.common.GainEnergyAction; import com.megacrit.cardcrawl.cards.AbstractCard; +import downfall.util.TextureLoader; import static automaton.AutomatonMod.makeRelicOutlinePath; import static automaton.AutomatonMod.makeRelicPath; @@ -17,7 +17,7 @@ public class BronzeCore extends CustomRelic implements OnCompileRelic { private static final Texture OUTLINE = TextureLoader.getTexture(makeRelicOutlinePath("BronzeCore.png")); public BronzeCore() { - super(ID, IMG, OUTLINE, RelicTier.STARTER, LandingSound.MAGICAL); + super(ID, IMG, OUTLINE, RelicTier.STARTER, LandingSound.CLINK); } boolean activated = false; diff --git a/src/main/java/automaton/relics/BronzeIdol.java b/src/main/java/automaton/relics/BronzeIdol.java index c6bd06f19..f5e8237a3 100644 --- a/src/main/java/automaton/relics/BronzeIdol.java +++ b/src/main/java/automaton/relics/BronzeIdol.java @@ -25,7 +25,7 @@ public class BronzeIdol extends CustomRelic { private CardPowerTip card_tip = new CardPowerTip(null); public BronzeIdol() { - super(ID, IMG, OUTLINE, RelicTier.COMMON, LandingSound.MAGICAL); + super(ID, IMG, OUTLINE, RelicTier.SHOP, LandingSound.MAGICAL); card_list.add(new Daze()); card_list.add(new UsefulSlime()); card_list.add(new Ignite()); diff --git a/src/main/java/automaton/relics/DecasWashers.java b/src/main/java/automaton/relics/DecasWashers.java index 8035e86ca..40f0c7af5 100644 --- a/src/main/java/automaton/relics/DecasWashers.java +++ b/src/main/java/automaton/relics/DecasWashers.java @@ -25,6 +25,9 @@ public DecasWashers() { super(ID, IMG, OUTLINE, RelicTier.UNCOMMON, LandingSound.MAGICAL); } + //How many turns does this relic work for? + private static final int TURNS = 3; + public void atBattleStart() { this.counter = 0; this.grayscale = false; @@ -38,7 +41,7 @@ public void atTurnStartPostDraw() { ++this.counter; } - if (this.counter == 3) { + if (this.counter == TURNS) { this.counter = -1; this.grayscale = true; } @@ -51,7 +54,7 @@ public void onVictory() { @Override public String getUpdatedDescription() { - return DESCRIPTIONS[0]; + return DESCRIPTIONS[0] + TURNS + DESCRIPTIONS[1]; } } diff --git a/src/main/java/automaton/relics/MakeshiftBattery.java b/src/main/java/automaton/relics/MakeshiftBattery.java index c51e8354b..a71fbb299 100644 --- a/src/main/java/automaton/relics/MakeshiftBattery.java +++ b/src/main/java/automaton/relics/MakeshiftBattery.java @@ -20,7 +20,7 @@ public class MakeshiftBattery extends CustomRelic { private static final Texture OUTLINE = TextureLoader.getTexture(makeRelicOutlinePath("MakeshiftBattery.png")); public MakeshiftBattery() { - super(ID, IMG, OUTLINE, RelicTier.BOSS, LandingSound.MAGICAL); + super(ID, IMG, OUTLINE, RelicTier.BOSS, LandingSound.HEAVY); } @Override diff --git a/src/main/java/automaton/relics/Mallet.java b/src/main/java/automaton/relics/Mallet.java index ec5ed4e54..5cd500800 100644 --- a/src/main/java/automaton/relics/Mallet.java +++ b/src/main/java/automaton/relics/Mallet.java @@ -26,7 +26,7 @@ public class Mallet extends CustomRelic { public boolean firstTurn = false; public Mallet() { - super(ID, IMG, OUTLINE, RelicTier.RARE, LandingSound.MAGICAL); + super(ID, IMG, OUTLINE, RelicTier.RARE, LandingSound.HEAVY); AbstractCard q = new FineTuning(); q.upgrade(); tips.add(new CardPowerTip(q)); diff --git a/src/main/java/automaton/relics/PlatinumCore.java b/src/main/java/automaton/relics/PlatinumCore.java index 1e980d422..f351a248a 100644 --- a/src/main/java/automaton/relics/PlatinumCore.java +++ b/src/main/java/automaton/relics/PlatinumCore.java @@ -17,15 +17,19 @@ public class PlatinumCore extends CustomRelic implements OnCompileRelic { private static final Texture IMG = TextureLoader.getTexture(makeRelicPath("PlatinumCore.png")); private static final Texture OUTLINE = TextureLoader.getTexture(makeRelicOutlinePath("BronzeCore.png")); + + //How many free functions does this relic grant? + private static final int FUNCTIONS = 3; + public PlatinumCore() { - super(ID, IMG, OUTLINE, RelicTier.BOSS, LandingSound.MAGICAL); + super(ID, IMG, OUTLINE, RelicTier.BOSS, LandingSound.CLINK); counter = 0; } @Override public void atBattleStart() { - counter = 3; + counter = FUNCTIONS; grayscale = false; } @@ -78,7 +82,7 @@ public String getUpdatedDescription() { sb.append("[#").append(AutomatonMod.placeholderColor.toString()).append("]"); } - return DESCRIPTIONS[0] + sb + DESCRIPTIONS[1]; + return DESCRIPTIONS[0] + sb + DESCRIPTIONS[1] + FUNCTIONS + DESCRIPTIONS[2]; } } diff --git a/src/main/java/automaton/relics/ProtectiveGoggles.java b/src/main/java/automaton/relics/ProtectiveGoggles.java index f7fa32725..379eac90f 100644 --- a/src/main/java/automaton/relics/ProtectiveGoggles.java +++ b/src/main/java/automaton/relics/ProtectiveGoggles.java @@ -19,15 +19,18 @@ public class ProtectiveGoggles extends CustomRelic { private static final Texture OUTLINE = TextureLoader.getTexture(makeRelicOutlinePath("ProtectiveGoggles.png")); public ProtectiveGoggles() { - super(ID, IMG, OUTLINE, RelicTier.COMMON, LandingSound.MAGICAL); + super(ID, IMG, OUTLINE, RelicTier.COMMON, LandingSound.CLINK); } + //How much Block does this Relic give? + private static final int BLOCK = 4; + @Override public void onPlayerEndTurn() { if (FunctionHelper.doStuff) { if (FunctionHelper.isSequenceEmpty()) { flash(); - addToTop(new GainBlockAction(AbstractDungeon.player, 4)); + addToTop(new GainBlockAction(AbstractDungeon.player, BLOCK)); addToTop(new RelicAboveCreatureAction(AbstractDungeon.player, this)); } } @@ -35,7 +38,7 @@ public void onPlayerEndTurn() { @Override public String getUpdatedDescription() { - return DESCRIPTIONS[0]; + return DESCRIPTIONS[0] + BLOCK + DESCRIPTIONS[1]; } } diff --git a/src/main/java/automaton/relics/SilverBullet.java b/src/main/java/automaton/relics/SilverBullet.java index 8e27a0d6a..79403ee87 100644 --- a/src/main/java/automaton/relics/SilverBullet.java +++ b/src/main/java/automaton/relics/SilverBullet.java @@ -20,7 +20,7 @@ public class SilverBullet extends CustomRelic { private static final Texture OUTLINE = TextureLoader.getTexture(makeRelicOutlinePath("SilverBullet.png")); public SilverBullet() { - super(ID, IMG, OUTLINE, RelicTier.COMMON, LandingSound.MAGICAL); + super(ID, IMG, OUTLINE, RelicTier.COMMON, LandingSound.CLINK); tips.add(new CardPowerTip(new WhirlingStrike())); } diff --git a/src/main/java/awakenedOne/AwakenedOneChar.java b/src/main/java/awakenedOne/AwakenedOneChar.java new file mode 100644 index 000000000..0bedcc584 --- /dev/null +++ b/src/main/java/awakenedOne/AwakenedOneChar.java @@ -0,0 +1,358 @@ +package awakenedOne; + +import awakenedOne.cards.Defend; +import awakenedOne.cards.Hymn; +import awakenedOne.cards.Strike; +import awakenedOne.cards.TalonRake; +import awakenedOne.effects.IroncladVictoryFlameEffectBlue; +import awakenedOne.effects.ReverseAwakenedWingParticle; +import awakenedOne.relics.RippedDoll; +import awakenedOne.util.Wiz; +import basemod.abstracts.CustomPlayer; +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.BitmapFont; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.math.MathUtils; +import com.esotericsoftware.spine.AnimationState; +import com.esotericsoftware.spine.Bone; +import com.evacipated.cardcrawl.modthespire.lib.SpireEnum; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.core.EnergyManager; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.helpers.CardLibrary; +import com.megacrit.cardcrawl.helpers.FontHelper; +import com.megacrit.cardcrawl.helpers.ImageMaster; +import com.megacrit.cardcrawl.helpers.ScreenShake; +import com.megacrit.cardcrawl.localization.CharacterStrings; +import com.megacrit.cardcrawl.monsters.beyond.AwakenedOne; +import com.megacrit.cardcrawl.screens.CharSelectInfo; +import com.megacrit.cardcrawl.vfx.AbstractGameEffect; +import com.megacrit.cardcrawl.vfx.AwakenedEyeParticle; +import com.megacrit.cardcrawl.vfx.AwakenedWingParticle; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import reskinContent.patches.CharacterSelectScreenPatches; + +import java.util.ArrayList; +import java.util.Iterator; + +import static awakenedOne.AwakenedOneMod.makeID; +import static awakenedOne.AwakenedOneMod.placeholderColor; +import static hermit.characters.hermit.update_timer; + +public class AwakenedOneChar extends CustomPlayer { + public static final String ID = makeID("awakenedOne"); + public static final CharacterStrings characterStrings = CardCrawlGame.languagePack.getCharacterString(ID); + private static final String[] NAMES = characterStrings.NAMES; + private static final String[] TEXT = characterStrings.TEXT; + private static final String[] orbTextures = { + "awakenedResources/images/mainChar/orb/layer1.png", + "awakenedResources/images/mainChar/orb/layer2.png", + "awakenedResources/images/mainChar/orb/layer3.png", + "awakenedResources/images/mainChar/orb/layer4.png", + "awakenedResources/images/mainChar/orb/layer5.png", + "awakenedResources/images/mainChar/orb/layer6.png", + "awakenedResources/images/mainChar/orb/layer1d.png", + "awakenedResources/images/mainChar/orb/layer2d.png", + "awakenedResources/images/mainChar/orb/layer3d.png", + "awakenedResources/images/mainChar/orb/layer4d.png", + "awakenedResources/images/mainChar/orb/layer5d.png",}; + private static final Logger logger = LogManager.getLogger(AwakenedOne.class.getName()); + private final String atlasURL = "awakenedResources/images/mainChar/awakened.atlas"; + private final String jsonURL = "awakenedResources/images/mainChar/awakened.json"; + public float renderscale = 1.2F; + public boolean animateParticles = false; + private float fireTimer = 0.0F; + private final boolean form1 = true; + private boolean revived = false; + private Bone eye; + private Bone back; + private final ArrayList wParticles = new ArrayList(); + private final ArrayList wParticles2 = new ArrayList(); + + + public AwakenedOneChar(String name, PlayerClass setClass) { + super(name, setClass, orbTextures, "awakenedResources/images/mainChar/orb/vfx.png", null, (String) null); + initializeClass(null, + CharacterSelectScreenPatches.characters[5].skins[CharacterSelectScreenPatches.characters[5].reskinCount].SHOULDER1, + CharacterSelectScreenPatches.characters[5].skins[CharacterSelectScreenPatches.characters[5].reskinCount].SHOULDER2, + CharacterSelectScreenPatches.characters[5].skins[CharacterSelectScreenPatches.characters[5].reskinCount].CORPSE, + getLoadout(), 0.0F, -30.0F, 270.0F, 310.0F, new EnergyManager(3)); + + this.reloadAnimation(); + + } + + public void reloadAnimation() { + this.loadAnimation(atlasURL, jsonURL, 1.2F); + + AnimationState.TrackEntry e = this.state.setAnimation(0, "Idle_1", true); + e.setTime(e.getEndTime() * MathUtils.random()); + this.stateData.setMix("Hit", "Idle_1", 0.3F); + this.stateData.setMix("Hit", "Idle_2", 0.2F); + this.stateData.setMix("Attack_1", "Idle_1", 0.2F); + this.stateData.setMix("Attack_2", "Idle_2", 0.2F); + this.state.getData().setMix("Idle_1", "Idle_2", 1.0F); + this.eye = this.skeleton.findBone("Eye"); + Iterator var4 = this.skeleton.getBones().iterator(); + + while (var4.hasNext()) { + Bone b = (Bone) var4.next(); + logger.info(b.getData().getName()); + } + + this.back = this.skeleton.findBone("Hips"); + + this.state.setAnimation(0, "Idle_1", true); + + } + + + //not used + public void revival() { + revived = true; + animateParticles = true; + } + + public void update() { + + super.update(); + + animateParticles = !this.isDying && Wiz.isAwakened() && Wiz.isInCombat(); + + if (this.isDying || !Wiz.isInCombat()) { + animateParticles = false; + } + + if (this.animateParticles) { + this.fireTimer -= Gdx.graphics.getDeltaTime(); + if (this.fireTimer < 0.0F) { + this.fireTimer = 0.1F; + //todo: replace with non-leaky animation + AbstractDungeon.effectList.add(new AwakenedEyeParticle(this.skeleton.getX() + this.eye.getWorldX(), this.skeleton.getY() + this.eye.getWorldY())); + if (!this.flipHorizontal) { + this.wParticles.add(new ReverseAwakenedWingParticle()); + } + if (this.flipHorizontal) { + this.wParticles2.add(new AwakenedWingParticle()); + } + + } + } + + Iterator p = this.wParticles.iterator(); + + while (p.hasNext()) { + ReverseAwakenedWingParticle e = p.next(); + e.update(); + if (e.isDone) { + p.remove(); + } + } + + if (this.flipHorizontal) { + Iterator p2 = this.wParticles2.iterator(); + + while (p2.hasNext()) { + AwakenedWingParticle e2 = p2.next(); + e2.update(); + if (e2.isDone) { + p2.remove(); + } + } + } + + } + + + public void render(SpriteBatch sb) { + if (!this.isDying) { + Iterator var2 = this.wParticles.iterator(); + + ReverseAwakenedWingParticle p; + while (var2.hasNext()) { + p = (ReverseAwakenedWingParticle) var2.next(); + if (p.renderBehind) { + p.render(sb, (this.skeleton.getX() - this.back.getWorldX()), this.skeleton.getY() + this.back.getWorldY()); + } + } + + super.render(sb); + var2 = this.wParticles.iterator(); + + while (var2.hasNext()) { + p = (ReverseAwakenedWingParticle) var2.next(); + if (!p.renderBehind) { + p.render(sb, this.skeleton.getX() - this.back.getWorldX(), this.skeleton.getY() + this.back.getWorldY()); + } + } + + } + } + + public void damage(DamageInfo info) { + if (info.owner != null && info.type != DamageInfo.DamageType.THORNS && info.output - this.currentBlock > 0 && skeleton.getData().findAnimation("Hit") != null) { + this.state.setAnimation(0, "Hit", false); + if (this.form1) { + this.state.addAnimation(0, "Idle_1", true, 0.0F); + } else { + this.state.addAnimation(0, "Idle_2", true, 0.0F); + } + } + super.damage(info); + } + + + @Override + public Texture getCustomModeCharacterButtonImage() { + return ImageMaster.loadImage(AwakenedOneMod.getModID() + "Resources/images/charSelect/leaderboard.png"); + } + + + @Override + public CharSelectInfo getLoadout() { + return new CharSelectInfo(NAMES[0], TEXT[0], + 70, 70, 0, 99, 5, this, getStartingRelics(), + getStartingDeck(), false); + } + + @Override + public ArrayList getStartingDeck() { + ArrayList retVal = new ArrayList<>(); + for (int i = 0; i < 4; i++) { + retVal.add(Strike.ID); + } + for (int i = 0; i < 4; i++) { + retVal.add(Defend.ID); + } + retVal.add(TalonRake.ID); + retVal.add(Hymn.ID); + return retVal; + } + + public ArrayList getStartingRelics() { + ArrayList retVal = new ArrayList<>(); + retVal.add(RippedDoll.ID); + return retVal; + } + + + @Override + public void updateVictoryVfx(ArrayList effects) { + + update_timer += Gdx.graphics.getDeltaTime(); + + update_timer += Gdx.graphics.getDeltaTime(); + + for (float i = 0; i + (1.0 / 120.0) <= update_timer; update_timer -= (1.0 / 120.0)) { + float spawn = (float) MathUtils.random(0, 20); + if (spawn == 1) { + effects.add(new IroncladVictoryFlameEffectBlue()); + AbstractDungeon.effectsQueue.add(new IroncladVictoryFlameEffectBlue()); + } + } + } + + @Override + public void doCharSelectScreenSelectEffect() { + if (MathUtils.randomBoolean()) { + CardCrawlGame.sound.play("VO_AWAKENEDONE_2", 0.3F); + } else { + CardCrawlGame.sound.play("VO_AWAKENEDONE_1", 0.3F); + } + CardCrawlGame.screenShake.shake(ScreenShake.ShakeIntensity.LOW, ScreenShake.ShakeDur.SHORT, false); + } + + @Override + public String getCustomModeCharacterButtonSoundKey() { + if (MathUtils.randomBoolean()) { + return "VO_CULTIST_1A"; + } else { + return "VO_CULTIST_1B"; + } + } + + @Override + public int getAscensionMaxHPLoss() { + return 4; + } + + @Override + public AbstractCard.CardColor getCardColor() { + return Enums.AWAKENED_BLUE; + } + + @Override + public Color getCardTrailColor() { + return placeholderColor.cpy(); + } + + @Override + public BitmapFont getEnergyNumFont() { + return FontHelper.energyNumFontRed; + } + + @Override + public String getLocalizedCharacterName() { + return NAMES[0]; + } + + @Override + public AbstractCard getStartCardForEvent() { + return new TalonRake(); + } + + @Override + public String getTitle(PlayerClass playerClass) { + return NAMES[1]; + } + + @Override + public AbstractPlayer newInstance() { + return new AwakenedOneChar(name, chosenClass); + } + + @Override + public Color getCardRenderColor() { + return placeholderColor.cpy(); + } + + @Override + public Color getSlashAttackColor() { + return placeholderColor.cpy(); + } + + @Override + public AbstractGameAction.AttackEffect[] getSpireHeartSlashEffect() { + return new AbstractGameAction.AttackEffect[]{ + AbstractGameAction.AttackEffect.FIRE, + AbstractGameAction.AttackEffect.SLASH_VERTICAL, + AbstractGameAction.AttackEffect.SLASH_HORIZONTAL}; + } + + @Override + public String getSpireHeartText() { + return TEXT[1]; + } + + @Override + public String getVampireText() { + return TEXT[2]; + } + + public static class Enums { + @SpireEnum + public static PlayerClass AWAKENED_ONE; + @SpireEnum(name = "AWAKENED_BLUE") + public static AbstractCard.CardColor AWAKENED_BLUE; + @SpireEnum(name = "AWAKENED_BLUE") + @SuppressWarnings("unused") + public static CardLibrary.LibraryType LIBRARY_COLOR; + } +} diff --git a/src/main/java/awakenedOne/AwakenedOneMod.java b/src/main/java/awakenedOne/AwakenedOneMod.java new file mode 100644 index 000000000..8f94e95e3 --- /dev/null +++ b/src/main/java/awakenedOne/AwakenedOneMod.java @@ -0,0 +1,380 @@ +package awakenedOne; + +import awakenedOne.actions.ConjureAction; +import awakenedOne.cards.*; +import awakenedOne.cards.cardvars.SecondDamage; +import awakenedOne.cards.cardvars.SecondMagicNumber; +import awakenedOne.cards.cardvars.ThirdMagicNumber; +import awakenedOne.events.BackToBasicsAwakened; +import awakenedOne.events.TheNestAwakened; +import awakenedOne.events.WingStatueAwakened; +import awakenedOne.patches.OnCreateCardSubscriber; +import awakenedOne.patches.OnLoseEnergyPowerPatch; +import awakenedOne.potions.CultistsDelight; +import awakenedOne.potions.SacramentalWine; +import awakenedOne.potions.SneckoPowersPotion; +import awakenedOne.relics.*; +import awakenedOne.ui.AwakenedIcon; +import awakenedOne.ui.OrbitingSpells; +import awakenedOne.util.CardFilter; +import basemod.BaseMod; +import basemod.ReflectionHacks; +import basemod.eventUtil.AddEventParams; +import basemod.eventUtil.EventUtils; +import basemod.helpers.RelicType; +import basemod.interfaces.*; +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.files.FileHandle; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.TextureAtlas; +import com.evacipated.cardcrawl.mod.stslib.icons.CustomIconHelper; +import com.evacipated.cardcrawl.mod.widepotions.WidePotionsMod; +import com.evacipated.cardcrawl.modthespire.Loader; +import com.evacipated.cardcrawl.modthespire.lib.SpireEnum; +import com.evacipated.cardcrawl.modthespire.lib.SpireInitializer; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.events.city.BackToBasics; +import com.megacrit.cardcrawl.events.city.Nest; +import com.megacrit.cardcrawl.events.exordium.GoldenWing; +import com.megacrit.cardcrawl.helpers.ImageMaster; +import com.megacrit.cardcrawl.rooms.AbstractRoom; +import downfall.downfallMod; +import downfall.util.CardIgnore; +import javassist.CtClass; +import javassist.Modifier; +import javassist.NotFoundException; +import org.clapper.util.classutil.*; + +import javax.crypto.SecretKeyFactory; +import java.io.File; +import java.net.URISyntaxException; +import java.net.URL; +import java.util.ArrayList; +import java.util.Collection; + +import static awakenedOne.ui.OrbitingSpells.spellCards; + +@SuppressWarnings({"ConstantConditions", "unused", "WeakerAccess"}) +@SpireInitializer +public class AwakenedOneMod implements + EditCardsSubscriber, + EditRelicsSubscriber, + EditCharactersSubscriber, + PostInitializeSubscriber, + OnStartBattleSubscriber, + OnPlayerTurnStartSubscriber, + PostPlayerUpdateSubscriber, + SetUnlocksSubscriber { + + public static final String SHOULDER1 = "awakenedResources/images/char/mainChar/shoulder.png"; + public static final String SHOULDER2 = "awakenedResources/images/char/mainChar/shoulderR.png"; + public static final String CORPSE = "awakenedResources/images/char/mainChar/corpse.png"; + public static final String CARD_ENERGY_S = "awakenedResources/images/512/card_awakened_orb.png"; + public static final String TEXT_ENERGY = "awakenedResources/images/512/card_small_orb.png"; + private static final String ATTACK_S_ART = "awakenedResources/images/512/bg_attack_awakened.png"; + private static final String SKILL_S_ART = "awakenedResources/images/512/bg_skill_awakened.png"; + private static final String POWER_S_ART = "awakenedResources/images/512/bg_power_awakened.png"; + private static final String ATTACK_L_ART = "awakenedResources/images/1024/bg_attack_awakened.png"; + private static final String SKILL_L_ART = "awakenedResources/images/1024/bg_skill_awakened.png"; + private static final String POWER_L_ART = "awakenedResources/images/1024/bg_power_awakened.png"; + private static final String CARD_ENERGY_L = "awakenedResources/images/1024/card_awakened_orb.png"; + private static final String CHARSELECT_BUTTON = "awakenedResources/images/charSelect/charButton.png"; + private static final String CHARSELECT_PORTRAIT = "awakenedResources/images/charSelect/charBG.png"; + + public static Color placeholderColor = new Color(18F / 255F, 250F / 255F, 240F / 255F, 1); + public static Color potionLabColor = new Color(18F / 255F, 250F / 255F, 240F / 255F, 1); + + @SpireEnum + public static com.megacrit.cardcrawl.cards.AbstractCard.CardTags DELVE; + + @SpireEnum + public static com.megacrit.cardcrawl.cards.AbstractCard.CardTags CHANT; + + @SpireEnum + public static com.megacrit.cardcrawl.cards.AbstractCard.CardTags ACTIVECHANT; + + @SpireEnum + public static com.megacrit.cardcrawl.cards.AbstractCard.CardTags UP_NEXT; + public static boolean awakenedthiscombat = false; + private static String modID = "awakened"; + + public AwakenedOneMod() { + BaseMod.subscribe(this); + + modID = "awakened"; + + BaseMod.addColor(AwakenedOneChar.Enums.AWAKENED_BLUE, placeholderColor, placeholderColor, placeholderColor, + placeholderColor, placeholderColor, placeholderColor, placeholderColor, + ATTACK_S_ART, SKILL_S_ART, POWER_S_ART, CARD_ENERGY_S, + ATTACK_L_ART, SKILL_L_ART, POWER_L_ART, + CARD_ENERGY_L, TEXT_ENERGY); + } + + public static String makeBetaCardPath(String resourcePath) { + String textureString = "awakenedResources/images/cards/joke/" + resourcePath; + FileHandle h = Gdx.files.internal(textureString); + if (!h.exists()) { + textureString = "awakenedResources/images/cards/programmerart/" + resourcePath; + } + return textureString; + } + + public static void loadJokeCardImage(AbstractCard card, String img) { + if (card instanceof AbstractAwakenedCard) { + ((AbstractAwakenedCard) card).betaArtPath = img; + } + Texture cardTexture; + cardTexture = ImageMaster.loadImage(img); + cardTexture.setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear); + int tw = cardTexture.getWidth(); + int th = cardTexture.getHeight(); + TextureAtlas.AtlasRegion cardImg = new TextureAtlas.AtlasRegion(cardTexture, 0, 0, tw, th); + ReflectionHacks.setPrivate(card, AbstractCard.class, "jokePortrait", cardImg); + } + + public static String makeCardPath(String resourcePath) { + return getModID() + "Resources/images/cards/" + resourcePath; + } + + public static String makeUIPath(String resourcePath) { + return getModID() + "Resources/images/ui/" + resourcePath; + } + + public static String makeRelicPath(String resourcePath) { + return getModID() + "Resources/images/relics/" + resourcePath; + } + + public static String makeRelicOutlinePath(String resourcePath) { + return getModID() + "Resources/images/relics/outline/" + resourcePath; + } + + public static String makePowerPath(String resourcePath) { + return getModID() + "Resources/images/powers/" + resourcePath; + } + + public static String getModID() { + return modID; + } + + public static void initialize() { + AwakenedOneMod awakenedOneMod = new AwakenedOneMod(); + } + + public static String makeID(String idText) { + return getModID() + ":" + idText; + } + + private static void autoAddCards() + throws URISyntaxException, IllegalAccessException, InstantiationException, NotFoundException, ClassNotFoundException { + ClassFinder finder = new ClassFinder(); + URL url = AwakenedOneMod.class.getProtectionDomain().getCodeSource().getLocation(); + finder.add(new File(url.toURI())); + + ClassFilter filter = + new AndClassFilter( + new NotClassFilter(new InterfaceOnlyClassFilter()), + new NotClassFilter(new AbstractClassFilter()), + new ClassModifiersClassFilter(Modifier.PUBLIC), + new CardFilter() + ); + Collection foundClasses = new ArrayList<>(); + finder.findClasses(foundClasses, filter); + + for (ClassInfo classInfo : foundClasses) { + CtClass cls = Loader.getClassPool().get(classInfo.getClassName()); + if (cls.hasAnnotation(CardIgnore.class)) { + continue; + } + boolean isCard = false; + CtClass superCls = cls; + while (superCls != null) { + superCls = superCls.getSuperclass(); + if (superCls == null) { + break; + } + if (superCls.getName().equals(AbstractCard.class.getName())) { + isCard = true; + break; + } + } + if (!isCard) { + continue; + } + System.out.println(classInfo.getClassName()); + AbstractCard card = (AbstractCard) Loader.getClassPool().getClassLoader().loadClass(cls.getName()).newInstance(); + BaseMod.addCard(card); + } + } + + /* + //Hex Stuff + public static void HexCurse(int begone, AbstractCreature m, AbstractCreature source) { + atb(new ApplyPowerAction(m, AbstractDungeon.player, new EnemyHexedPower(m, begone), begone)); + } + + */ + + public void receivePostInitialize() { + + BaseMod.addEvent(new AddEventParams.Builder(TheNestAwakened.ID, TheNestAwakened.class) //Event ID// + //Event Spawn Condition// + .spawnCondition(() -> AbstractDungeon.player instanceof AwakenedOneChar) + //Event ID to Override// + .overrideEvent(Nest.ID) + //Event Type// + .eventType(EventUtils.EventType.FULL_REPLACE) + .create()); + + BaseMod.addEvent(new AddEventParams.Builder(WingStatueAwakened.ID, WingStatueAwakened.class) //Event ID// + //Event Spawn Condition// + .spawnCondition(() -> AbstractDungeon.player instanceof AwakenedOneChar) + //Event ID to Override// + .overrideEvent(GoldenWing.ID) + //Event Type// + .eventType(EventUtils.EventType.FULL_REPLACE) + .create()); + + BaseMod.addEvent(new AddEventParams.Builder(BackToBasicsAwakened.ID, BackToBasicsAwakened.class) //Event ID// + //Event Character// + .playerClass(AwakenedOneChar.Enums.AWAKENED_ONE) + //Existing Event to Override// + .overrideEvent(BackToBasics.ID) + //Event Type// + .eventType(EventUtils.EventType.FULL_REPLACE) + .create()); + } + + @Override + public void receiveEditCharacters() { + BaseMod.addCharacter(new AwakenedOneChar("The Awakened One", AwakenedOneChar.Enums.AWAKENED_ONE), CHARSELECT_BUTTON, CHARSELECT_PORTRAIT, AwakenedOneChar.Enums.AWAKENED_ONE); + addPotions(); + } + + @Override + public void receiveEditRelics() { + //add awakened one relics here + BaseMod.addRelicToCustomPool(new RippedDoll(), AwakenedOneChar.Enums.AWAKENED_BLUE); //starter + BaseMod.addRelicToCustomPool(new ShreddedDoll(), AwakenedOneChar.Enums.AWAKENED_BLUE); //starter+ + BaseMod.addRelicToCustomPool(new WhiteRibbon(), AwakenedOneChar.Enums.AWAKENED_BLUE); //boss misc + BaseMod.addRelicToCustomPool(new TomeOfPortalmancy(), AwakenedOneChar.Enums.AWAKENED_BLUE); //common + BaseMod.addRelicToCustomPool(new ZenerDeck(), AwakenedOneChar.Enums.AWAKENED_BLUE); //uncommon + BaseMod.addRelicToCustomPool(new AbyssBlade(), AwakenedOneChar.Enums.AWAKENED_BLUE); //boss energy lose [e] refund + BaseMod.addRelicToCustomPool(new StrengthBooster(), AwakenedOneChar.Enums.AWAKENED_BLUE); //uncommon + BaseMod.addRelicToCustomPool(new HexxBomb(), AwakenedOneChar.Enums.AWAKENED_BLUE); //shop + + BaseMod.addRelicToCustomPool(new MoonTalisman(), AwakenedOneChar.Enums.AWAKENED_BLUE); //rare relic to replace dead bird's rare #2 slot + + BaseMod.addRelicToCustomPool(new EyeOfTheOccult(), AwakenedOneChar.Enums.AWAKENED_BLUE); //moved from rare to event + + BaseMod.addRelicToCustomPool(new CursedBlessing(), AwakenedOneChar.Enums.AWAKENED_BLUE); //new rare relic to fill Eye of the Occult's spot + + BaseMod.addRelicToCustomPool(new CurvedSword(), AwakenedOneChar.Enums.AWAKENED_BLUE); + + //only obtainable through console (the "conjure blade" relic) + BaseMod.addRelicToCustomPool(new CurvedSwordMeme(), AwakenedOneChar.Enums.AWAKENED_BLUE); + + //shared relics + BaseMod.addRelic(new CawingCask(), RelicType.SHARED); //rare shared + BaseMod.addRelic(new VioletPlumage(), RelicType.SHARED); //shop shared + BaseMod.addRelic(new ShardOfNowak(), RelicType.SHARED); //uncommon shared + BaseMod.addRelic(new MiniBlackHole(), RelicType.SHARED);//common shared + + BaseMod.addRelic(new DeadBird(), RelicType.SHARED); //decided this was useful enough to be shared + } + + public void addPotions() { + BaseMod.addPotion(CultistsDelight.class, Color.BLUE, Color.NAVY, Color.YELLOW, CultistsDelight.POTION_ID, AwakenedOneChar.Enums.AWAKENED_ONE); + BaseMod.addPotion(SacramentalWine.class, Color.NAVY, Color.VIOLET, Color.MAROON, SacramentalWine.POTION_ID, AwakenedOneChar.Enums.AWAKENED_ONE); + BaseMod.addPotion(SneckoPowersPotion.class, Color.CYAN, Color.TAN, Color.BLUE, SneckoPowersPotion.POTION_ID, AwakenedOneChar.Enums.AWAKENED_ONE); + + if (Loader.isModLoaded("widepotions")) { + WidePotionsMod.whitelistSimplePotion(CultistsDelight.POTION_ID); + WidePotionsMod.whitelistSimplePotion(SacramentalWine.POTION_ID); + WidePotionsMod.whitelistSimplePotion(SneckoPowersPotion.POTION_ID); + } + } + + + // CONTENT STUFF + + @Override + public void receiveEditCards() { + CustomIconHelper.addCustomIcon(AwakenedIcon.get()); + + BaseMod.addDynamicVariable(new SecondMagicNumber()); + BaseMod.addDynamicVariable(new ThirdMagicNumber()); + BaseMod.addDynamicVariable(new SecondDamage()); + + try { + autoAddCards(); + } catch (URISyntaxException | IllegalAccessException | InstantiationException | NotFoundException | + ClassNotFoundException e) { + throw new RuntimeException(e); + } + } + + @Override + public void receiveOnBattleStart(AbstractRoom abstractRoom) { + awakenedthiscombat = false; + ConjureAction.conjuresThisCombat = 0; + OnLoseEnergyPowerPatch.EnergyLostThisCombat = 0; + OnCreateCardSubscriber.CardsCreatedThisCombat = 0; + OnCreateCardSubscriber.CardsCreatedThisTurn = 0; + ConjureAction.refreshedthisturn = false; + spellCards.clear(); + OrbitingSpells.atBattleStart(); + } + + public void onVictory() { + ConjureAction.conjuresThisCombat = 0; + OnLoseEnergyPowerPatch.EnergyLostThisCombat = 0; + OnCreateCardSubscriber.CardsCreatedThisCombat = 0; + OnCreateCardSubscriber.CardsCreatedThisTurn = 0; + awakenedthiscombat = false; + spellCards.clear(); + OrbitingSpells.empty(); + } + + @Override + public void receiveOnPlayerTurnStart() { + OnCreateCardSubscriber.VoidCreatedThisTurn = false; + OnCreateCardSubscriber.CardsCreatedThisTurn = 0; + ConjureAction.refreshedthisturn = false; + } + + @Override + public void receivePostPlayerUpdate() { + OrbitingSpells.update(); + } + + @Override + public void receiveSetUnlocks() { + downfallMod.registerUnlockSuiteAlternating( + + SplitWide.ID, + Primacy.ID, + RisingChant.ID, + + TomeOfPortalmancy.ID, + AbyssBlade.ID, + HexxBomb.ID, + + Ensorcelate.ID, + Skyward.ID, + BloodRite.ID, + + VioletPlumage.ID, + DeadBird.ID, + ShardOfNowak.ID, + + FourthDimension.ID, + Grimoire.ID, + AphoticFount.ID, + + AwakenedOneChar.Enums.AWAKENED_ONE + ); + } + +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/AwakenedTextHelper.java b/src/main/java/awakenedOne/AwakenedTextHelper.java new file mode 100644 index 000000000..d94781420 --- /dev/null +++ b/src/main/java/awakenedOne/AwakenedTextHelper.java @@ -0,0 +1,24 @@ +package awakenedOne; + +import awakenedOne.cards.AbstractAwakenedCard; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; + +public class AwakenedTextHelper { + protected static String[] ifStr = CardCrawlGame.languagePack.getUIString("awakened:highlightChant").TEXT; + + public static void colorCombos(AbstractAwakenedCard card, boolean resetColors) { + if (AbstractDungeon.player != null) { + if (card.rawDescription.contains(ifStr[0])) { + if ((card.trig_chant) && !resetColors) { + card.rawDescription = card.rawDescription.replace(ifStr[0], ifStr[1]); + } + } else if (card.rawDescription.contains(ifStr[1])) { + if ((!card.trig_chant) || resetColors) { + card.rawDescription = card.rawDescription.replace(ifStr[1], ifStr[0]); + } + } + } + card.initializeDescription(); + } +} diff --git a/src/main/java/awakenedOne/actions/AddSpellCardAction.java b/src/main/java/awakenedOne/actions/AddSpellCardAction.java new file mode 100644 index 000000000..58e16ecb2 --- /dev/null +++ b/src/main/java/awakenedOne/actions/AddSpellCardAction.java @@ -0,0 +1,19 @@ +package awakenedOne.actions; + +import awakenedOne.ui.OrbitingSpells; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.cards.AbstractCard; + +public class AddSpellCardAction extends AbstractGameAction { + private final AbstractCard cardToAdd; + + public AddSpellCardAction(AbstractCard cardToAdd) { + this.cardToAdd = cardToAdd; + } + + @Override + public void update() { + isDone = true; + OrbitingSpells.addSpellCard(cardToAdd); + } +} diff --git a/src/main/java/awakenedOne/actions/AllEnemyLoseHPAction.java b/src/main/java/awakenedOne/actions/AllEnemyLoseHPAction.java new file mode 100644 index 000000000..4f51f4b84 --- /dev/null +++ b/src/main/java/awakenedOne/actions/AllEnemyLoseHPAction.java @@ -0,0 +1,53 @@ +package awakenedOne.actions; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.utility.WaitAction; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.vfx.combat.FlashAtkImgEffect; + +public class AllEnemyLoseHPAction extends AbstractGameAction { + private static final float DURATION = 0.01F; + + public AllEnemyLoseHPAction(int amount) { + this(amount, AttackEffect.NONE); + } + + public AllEnemyLoseHPAction(int amount, AttackEffect effect) { + this.source = AbstractDungeon.player; + this.amount = amount; + + this.actionType = ActionType.DAMAGE; + this.attackEffect = effect; + this.startDuration = this.duration = Settings.FAST_MODE ? 0.1f : DURATION; + } + + public void update() { + if (this.duration == this.startDuration) { + for (AbstractMonster m : AbstractDungeon.getMonsters().monsters) { + if (!m.isDeadOrEscaped()) { + AbstractDungeon.effectList.add(new FlashAtkImgEffect(m.hb.cX, m.hb.cY, this.attackEffect)); + } + } + } + + this.tickDuration(); + + if (this.isDone) { + for (AbstractMonster m : AbstractDungeon.getMonsters().monsters) { + if (!m.isDeadOrEscaped() && !m.halfDead) { + m.damage(new DamageInfo(this.source, this.amount, DamageInfo.DamageType.HP_LOSS)); + } + } + + if (AbstractDungeon.getCurrRoom().monsters.areMonstersBasicallyDead()) { + AbstractDungeon.actionManager.clearPostCombatActions(); + } + if (!Settings.FAST_MODE) { + this.addToTop(new WaitAction(0.1F)); + } + } + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/actions/ConjureAction.java b/src/main/java/awakenedOne/actions/ConjureAction.java new file mode 100644 index 000000000..cec36a281 --- /dev/null +++ b/src/main/java/awakenedOne/actions/ConjureAction.java @@ -0,0 +1,150 @@ +package awakenedOne.actions; + +import awakenedOne.powers.IntensifyDebuffPower; +import awakenedOne.ui.OrbitingSpells; +import awakenedOne.util.OnConjureSubscriber; +import awakenedOne.util.Wiz; +import charbosses.cards.colorless.EnApotheosis; +import com.evacipated.cardcrawl.mod.stslib.actions.common.SelectCardsCenteredAction; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.MakeTempCardInDrawPileAction; +import com.megacrit.cardcrawl.actions.common.MakeTempCardInHandAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; + +import java.util.ArrayList; + +import static awakenedOne.AwakenedOneMod.UP_NEXT; +import static awakenedOne.ui.AwakenButton.awaken; +import static awakenedOne.ui.OrbitingSpells.spellCards; +import static awakenedOne.util.Wiz.isAwakened; +import static downfall.downfallMod.DeterministicConjure; + +public class ConjureAction extends AbstractGameAction { + + public static boolean refreshedthisturn = false; + public static ArrayList conjuredCards = new ArrayList(); + public static int conjuresThisCombat = 0; + AbstractCard pick; + private final boolean choose; + private final boolean ontop; + private final boolean bstudy; + + + public ConjureAction(boolean choose) { + this.choose = choose; + ontop = false; + bstudy = false; + pick = null; + } + + public ConjureAction(boolean choose, boolean drawpile) { + this.choose = choose; + ontop = drawpile; + bstudy = false; + pick = null; + } + + public ConjureAction(boolean choose, boolean drawpile, boolean starterrelic, AbstractCard summon) { + this.choose = choose; + ontop = drawpile; + bstudy = starterrelic; + pick = summon; + } + + @Override + public void update() { + if (AbstractDungeon.player.hasPower(IntensifyDebuffPower.POWER_ID)) { + AbstractDungeon.player.getPower(IntensifyDebuffPower.POWER_ID).flash(); + this.isDone = true; + return; + } + if (AbstractDungeon.player.hasPower("No Draw")) { + AbstractDungeon.player.getPower("No Draw").flash(); + this.isDone = true; + return; + } + conjuresThisCombat += 1; + isDone = true; + conjuredCards.clear(); + addToTop(new AbstractGameAction() { + @Override + public void update() { + isDone = true; + if ((spellCards.isEmpty())) { + awaken(5); + OrbitingSpells.refreshSpells(); + //On Refresh... +// if (AbstractDungeon.player.hasPower(FeathersinksPower.POWER_ID)) { +// for (int i = 0; i < AbstractDungeon.player.getPower(FeathersinksPower.POWER_ID).amount; i++) { +// AbstractDungeon.actionManager.addToBottom(new GainEnergyAction(1)); +// } +// } + refreshedthisturn = true; + } + } + }); + if (!choose) { + AbstractCard tar = new EnApotheosis(); //dummy card + if (!bstudy) { + if (!DeterministicConjure) { + tar = Wiz.getRandomItem(spellCards, AbstractDungeon.cardRandomRng).makeStatEquivalentCopy(); + } + if (DeterministicConjure) { + for (AbstractCard c : spellCards) { + System.out.println("DEBUG: CHECKING: " + c.name); + if (c.hasTag(UP_NEXT)) { + System.out.println("DEBUG: YES! UP NEXT: " + c.name); + tar = c.makeStatEquivalentCopy(); + } + } + } + } + System.out.println("DEBUG: TARGET CARD: " + tar.name); + if (tar instanceof EnApotheosis) { + tar = spellCards.get(0); + } + + if (bstudy) { + tar = pick; + } + if (isAwakened()) { + tar.upgrade(); + } + if (!ontop) { + addToTop(new MakeTempCardInHandAction(tar)); + } + if (ontop) { + addToTop(new MakeTempCardInDrawPileAction(tar, 1, false, true)); + } + if (!bstudy) { + addToTop(new RemoveSpellCardAction(tar)); +// if (!spellCards.isEmpty()) { +// atb(new SetUpNextSpellAction()); +// } + } else { + addToTop(new RemoveSpellCardActionSpecial(tar)); + } + } else { + ArrayList possCards = new ArrayList<>(); + possCards.addAll(spellCards); + ArrayList availableCards = new ArrayList<>(); + while (!possCards.isEmpty()) { + availableCards.add(possCards.remove(AbstractDungeon.cardRandomRng.random(possCards.size() - 1))); + } + ArrayList actualChoices = new ArrayList<>(); + availableCards.forEach(q -> actualChoices.add(q.makeStatEquivalentCopy())); + addToTop(new SelectCardsCenteredAction(actualChoices, "", (cards) -> { + AbstractCard q = cards.get(0); + if (isAwakened()) { + q.upgrade(); + } + addToTop(new MakeTempCardInHandAction(q)); + addToTop(new RemoveSpellCardAction(q)); + })); + } + for (AbstractCard c : AbstractDungeon.player.discardPile.group) { + if (c instanceof OnConjureSubscriber) ((OnConjureSubscriber) c).OnConjure(); + } + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/actions/ConjureBladeSpellPileAction.java b/src/main/java/awakenedOne/actions/ConjureBladeSpellPileAction.java new file mode 100644 index 000000000..9e2a94383 --- /dev/null +++ b/src/main/java/awakenedOne/actions/ConjureBladeSpellPileAction.java @@ -0,0 +1,45 @@ +package awakenedOne.actions; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.cards.tempCards.Expunger; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.ui.panels.EnergyPanel; + +import static awakenedOne.ui.OrbitingSpells.spellCards; + +public class ConjureBladeSpellPileAction extends AbstractGameAction { + public int[] multiDamage; + private final boolean freeToPlayOnce; + private final AbstractPlayer p; + private final int energyOnUse; + + public ConjureBladeSpellPileAction(AbstractPlayer p, boolean freeToPlayOnce, int energyOnUse) { + this.p = p; + this.freeToPlayOnce = freeToPlayOnce; + this.duration = Settings.ACTION_DUR_XFAST; + this.actionType = ActionType.SPECIAL; + this.energyOnUse = energyOnUse; + } + + public void update() { + int effect = EnergyPanel.totalCount; + if (this.energyOnUse != -1) { + effect = this.energyOnUse; + } + + if (this.p.hasRelic("Chemical X")) { + effect += 2; + this.p.getRelic("Chemical X").flash(); + } + + Expunger c = new Expunger(); + c.setX(effect); + spellCards.add(c); + if (!this.freeToPlayOnce) { + this.p.energy.use(EnergyPanel.totalCount); + } + + this.isDone = true; + } +} diff --git a/src/main/java/awakenedOne/actions/DrawPowerAction.java b/src/main/java/awakenedOne/actions/DrawPowerAction.java new file mode 100644 index 000000000..821248e9a --- /dev/null +++ b/src/main/java/awakenedOne/actions/DrawPowerAction.java @@ -0,0 +1,78 @@ +package awakenedOne.actions; + +import basemod.BaseMod; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.DrawCardAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.CardGroup; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import hermit.actions.ReduceCostActionFixed; + +import java.util.Iterator; + +public class DrawPowerAction extends AbstractGameAction { + + public AbstractPlayer p; + public int cards_to_draw; + + public DrawPowerAction(int number) { + this.cards_to_draw = number; + this.p = AbstractDungeon.player; + this.setValues(this.p, this.p); + this.actionType = ActionType.CARD_MANIPULATION; + this.duration = Settings.ACTION_DUR_MED; + } + + public void update() { + if (this.duration == Settings.ACTION_DUR_MED) { + if (this.p.drawPile.isEmpty()) { + this.isDone = true; + return; + } + + if (AbstractDungeon.player.hasPower("No Draw")) { + AbstractDungeon.player.getPower("No Draw").flash(); + this.isDone = true; + return; + } + + int counter = 0; + CardGroup tmp = new CardGroup(CardGroup.CardGroupType.UNSPECIFIED); + Iterator var2 = this.p.drawPile.group.iterator(); + + AbstractCard card; + while (var2.hasNext() && (counter < this.cards_to_draw)) { + card = var2.next(); + if (card.type == AbstractCard.CardType.POWER) { + tmp.addToRandomSpot(card); + counter++; + } + } + + + if (tmp.size() == 0) { + this.isDone = true; + return; + } + + for (int i = 0; i < counter; ++i) { + if (!tmp.isEmpty()) { + tmp.shuffle(); + card = tmp.getBottomCard(); + tmp.removeCard(card); + if (this.p.hand.size() == BaseMod.MAX_HAND_SIZE) { + this.p.createHandIsFullDialog(); + } else { + this.p.drawPile.moveToDeck(card, false); + this.addToTop(new DrawCardAction(1)); + this.addToBot(new ReduceCostActionFixed(card.uuid, -1)); + } + } + } + this.isDone = true; + } + this.tickDuration(); + } +} diff --git a/src/main/java/awakenedOne/actions/EasyXCostAction.java b/src/main/java/awakenedOne/actions/EasyXCostAction.java new file mode 100644 index 000000000..03c2fc3b3 --- /dev/null +++ b/src/main/java/awakenedOne/actions/EasyXCostAction.java @@ -0,0 +1,55 @@ +package awakenedOne.actions; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.relics.ChemicalX; +import com.megacrit.cardcrawl.ui.panels.EnergyPanel; + +import java.util.function.BiFunction; + +public class EasyXCostAction extends AbstractGameAction { + public BiFunction xActionUpdate; + public int[] params; + protected int baseValue; + protected boolean freeToPlayOnce; + protected int effect; + private boolean firstUpdate = true; + + /** + * @param card The card played. Usually should simply be "this". + * @param xActionUpdate A BiFunction that receives an integer for the energy amount (includes Chem X) and any number of integer parameters in the form of an array. The return value of this function is isDone. + * @param params Any number of integer parameters. These will be passed to the update function to avoid possible value changes between the creation of this action and when it is updated. + */ + public EasyXCostAction(AbstractCard card, BiFunction xActionUpdate, int... params) { + this.baseValue = card.energyOnUse; + this.freeToPlayOnce = card.freeToPlayOnce; + this.xActionUpdate = xActionUpdate; + + this.params = params; + } + + @Override + public void update() { + if (firstUpdate) { + effect = EnergyPanel.totalCount; + if (this.baseValue != -1) { + effect = this.baseValue; + } + + if (AbstractDungeon.player.hasRelic(ChemicalX.ID)) { + effect += 2; + AbstractDungeon.player.getRelic(ChemicalX.ID).flash(); + } + + isDone = xActionUpdate.apply(effect, params) || duration < 0.0f; + firstUpdate = false; + + if (!this.freeToPlayOnce) { + AbstractDungeon.player.energy.use(EnergyPanel.totalCount); + } + } else { + isDone = xActionUpdate.apply(effect, params) || duration < 0.0f; + } + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/actions/FollowUpPowersAction.java b/src/main/java/awakenedOne/actions/FollowUpPowersAction.java new file mode 100644 index 000000000..b8363109b --- /dev/null +++ b/src/main/java/awakenedOne/actions/FollowUpPowersAction.java @@ -0,0 +1,29 @@ +package awakenedOne.actions; + +import com.badlogic.gdx.graphics.Color; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.actions.common.GainEnergyAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.AbstractCard.CardType; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.vfx.combat.MiracleEffect; + +public class FollowUpPowersAction extends AbstractGameAction { + public FollowUpPowersAction() { + } + + public void update() { + if (AbstractDungeon.actionManager.cardsPlayedThisCombat.size() >= 2 && AbstractDungeon.actionManager.cardsPlayedThisCombat.get(AbstractDungeon.actionManager.cardsPlayedThisCombat.size() - 2).type == CardType.POWER) { + this.addToTop(new GainEnergyAction(1)); + if (Settings.FAST_MODE) { + this.addToTop(new VFXAction(new MiracleEffect(Color.CYAN, Color.PURPLE, "ATTACK_MAGIC_SLOW_1"), 0.0F)); + } else { + this.addToTop(new VFXAction(new MiracleEffect(Color.CYAN, Color.PURPLE, "ATTACK_MAGIC_SLOW_1"), 0.3F)); + } + } + + this.isDone = true; + } +} diff --git a/src/main/java/awakenedOne/actions/ForTheHexAction.java b/src/main/java/awakenedOne/actions/ForTheHexAction.java new file mode 100644 index 000000000..11935b037 --- /dev/null +++ b/src/main/java/awakenedOne/actions/ForTheHexAction.java @@ -0,0 +1,23 @@ +package awakenedOne.actions; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import static awakenedOne.util.Wiz.atb; + +public class ForTheHexAction extends AbstractGameAction { + private final AbstractMonster m; + + public ForTheHexAction(int weakAmt, AbstractMonster m) { + this.actionType = ActionType.WAIT; + this.amount = weakAmt; + this.m = m; + } + + public void update() { + if (this.m != null && this.m.getIntentBaseDmg() >= 0) { + atb(new ConjureAction(false)); + } + this.isDone = true; + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/actions/GashCawAction.java b/src/main/java/awakenedOne/actions/GashCawAction.java new file mode 100644 index 000000000..fb132f0d4 --- /dev/null +++ b/src/main/java/awakenedOne/actions/GashCawAction.java @@ -0,0 +1,91 @@ +package awakenedOne.actions; + +import automaton.FunctionHelper; +import awakenedOne.cards.Caw; +import awakenedOne.ui.OrbitingSpells; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.orbs.AbstractOrb; +import guardian.orbs.StasisOrb; + +import java.util.Iterator; + +public class GashCawAction extends AbstractGameAction { + private final AbstractCard card; + + public GashCawAction(AbstractCard card, int amount) { + this.card = card; + this.amount = amount; + } + + public void update() { + AbstractCard var10000 = this.card; + var10000.baseDamage += this.amount; + this.card.applyPowers(); + Iterator var1 = AbstractDungeon.player.discardPile.group.iterator(); + + AbstractCard c; + while (var1.hasNext()) { + c = (AbstractCard) var1.next(); + if (c instanceof Caw) { + c.baseDamage += this.amount; + c.applyPowers(); + } + } + + var1 = AbstractDungeon.player.drawPile.group.iterator(); + + while (var1.hasNext()) { + c = (AbstractCard) var1.next(); + if (c instanceof Caw) { + c.baseDamage += this.amount; + c.applyPowers(); + } + } + + var1 = AbstractDungeon.player.hand.group.iterator(); + + while (var1.hasNext()) { + c = (AbstractCard) var1.next(); + if (c instanceof Caw) { + c.baseDamage += this.amount; + c.applyPowers(); + } + } + + //Claw doesn't even hit Claws in the exhaust pile? Caw >>>> Claw, clearly. + + OrbitingSpells.upgradeCaws(this.amount); + + var1 = AbstractDungeon.player.exhaustPile.group.iterator(); + + while (var1.hasNext()) { + c = (AbstractCard) var1.next(); + if (c instanceof Caw) { + c.baseDamage += this.amount; + c.applyPowers(); + } + } + + for (AbstractOrb o : AbstractDungeon.player.orbs) { + if (o instanceof StasisOrb) { + if (((StasisOrb) o).stasisCard instanceof Caw) { + ((StasisOrb) o).stasisCard.baseDamage += this.amount; + ((StasisOrb) o).stasisCard.applyPowers(); + } + } + } + + if (FunctionHelper.doStuff) { + for (AbstractCard q : FunctionHelper.held.group) { + if (q instanceof Caw) { + q.baseDamage += this.amount; + } + } + FunctionHelper.genPreview(); + } + + this.isDone = true; + } +} diff --git a/src/main/java/awakenedOne/actions/GrimoireAction.java b/src/main/java/awakenedOne/actions/GrimoireAction.java new file mode 100644 index 000000000..8c79668ee --- /dev/null +++ b/src/main/java/awakenedOne/actions/GrimoireAction.java @@ -0,0 +1,62 @@ +package awakenedOne.actions; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.helpers.GetAllInBattleInstances; +import com.megacrit.cardcrawl.orbs.AbstractOrb; +import com.megacrit.cardcrawl.vfx.combat.FlashAtkImgEffect; +import guardian.orbs.StasisOrb; + +import java.util.Iterator; +import java.util.UUID; + +public class GrimoireAction extends AbstractGameAction { + private static final float DURATION = 0.1F; + private final DamageInfo info; + private final UUID uuid; + private final AbstractPlayer p; + + public GrimoireAction(AbstractCreature target, DamageInfo info, UUID targetUUID) { + this.info = info; + this.setValues(target, info); + this.actionType = ActionType.DAMAGE; + this.duration = DURATION; + this.p = AbstractDungeon.player; + this.uuid = targetUUID; + } + + @Override + public void update() { + if (this.duration == DURATION) { + if (this.target != null) { + AbstractDungeon.effectList.add(new FlashAtkImgEffect(this.target.hb.cX, this.target.hb.cY, AttackEffect.FIRE)); + this.target.damage(this.info); + } + Iterator var1; + for (var1 = GetAllInBattleInstances.get(this.uuid).iterator(); var1.hasNext(); ) { + AbstractCard c = var1.next(); + addToBot(new GrimoireSpecificCardAction(c, AbstractDungeon.player.limbo, true)); + addToBot(new GrimoireSpecificCardAction(c, AbstractDungeon.player.drawPile, true)); + addToBot(new GrimoireSpecificCardAction(c, AbstractDungeon.player.hand, true)); + addToBot(new GrimoireSpecificCardAction(c, AbstractDungeon.player.discardPile, true)); + } + + for (AbstractOrb o : this.p.orbs) { + if (o instanceof StasisOrb) { + if (((StasisOrb) o).stasisCard.uuid == this.uuid) { + this.p.orbs.remove(o); + } + } + } + if (AbstractDungeon.getCurrRoom().monsters.areMonstersBasicallyDead()) { + AbstractDungeon.actionManager.clearPostCombatActions(); + } + this.tickDuration(); + } + + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/actions/GrimoireSpecificCardAction.java b/src/main/java/awakenedOne/actions/GrimoireSpecificCardAction.java new file mode 100644 index 000000000..39c470b0f --- /dev/null +++ b/src/main/java/awakenedOne/actions/GrimoireSpecificCardAction.java @@ -0,0 +1,33 @@ +package awakenedOne.actions; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.CardGroup; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; + +public class GrimoireSpecificCardAction extends AbstractGameAction { + private final AbstractCard targetCard; + private final CardGroup group; + private final float startingDuration; + + public GrimoireSpecificCardAction(AbstractCard targetCard, CardGroup group, boolean isFast) { + this.targetCard = targetCard; + this.setValues(AbstractDungeon.player, AbstractDungeon.player, this.amount); + this.actionType = ActionType.EXHAUST; + this.group = group; + this.startingDuration = Settings.ACTION_DUR_FAST; + this.duration = this.startingDuration; + } + + public GrimoireSpecificCardAction(AbstractCard targetCard, CardGroup group) { + this(targetCard, group, false); + } + + public void update() { + if (this.duration == this.startingDuration && this.group.contains(this.targetCard)) { + this.group.removeCard(targetCard); + } + this.tickDuration(); + } +} diff --git a/src/main/java/awakenedOne/actions/KillEnemyAction.java b/src/main/java/awakenedOne/actions/KillEnemyAction.java new file mode 100644 index 000000000..9cc4971f6 --- /dev/null +++ b/src/main/java/awakenedOne/actions/KillEnemyAction.java @@ -0,0 +1,114 @@ +package awakenedOne.actions; + +import com.badlogic.gdx.math.MathUtils; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.helpers.ScreenShake; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.vfx.combat.*; + +public class KillEnemyAction extends AbstractGameAction { + private static final float BLOCK_ICON_X = -14.0F * Settings.scale; + private static final float BLOCK_ICON_Y = -14.0F * Settings.scale; + private final AbstractMonster m; + + + public KillEnemyAction(AbstractMonster m) { + this.m = m; + } + + @Override + public void update() { + int damage = MathUtils.random(2, 13); + m.currentHealth = 0; + while (damage < Integer.MAX_VALUE / 13) { + loseHP(damage); + damage *= 13; + } + + m.damage(new DamageInfo(m, damage, DamageInfo.DamageType.HP_LOSS)); + m.die(); //(hopefully) ensure death + + if (AbstractDungeon.getMonsters().areMonstersBasicallyDead()) { + AbstractDungeon.actionManager.cleanCardQueue(); + AbstractDungeon.effectList.add(new DeckPoofEffect(64.0F * Settings.scale, 64.0F * Settings.scale, true)); + AbstractDungeon.effectList.add(new DeckPoofEffect((float) Settings.WIDTH - 64.0F * Settings.scale, 64.0F * Settings.scale, false)); + AbstractDungeon.overlayMenu.hideCombatPanels(); + } + + if (AbstractDungeon.getCurrRoom().monsters.areMonstersBasicallyDead()) { + AbstractDungeon.actionManager.clearPostCombatActions(); + } + this.isDone = true; + } + + private void loseHP(int damageAmount) { + boolean hadBlock = m.currentBlock != 0; + + boolean weakenedToZero = damageAmount == 0; + damageAmount = decrementBlock(damageAmount); + + if (damageAmount > 0) { + m.useStaggerAnimation(); + + if (damageAmount >= 99 && !CardCrawlGame.overkill) { + CardCrawlGame.overkill = true; + } + + m.currentHealth -= damageAmount; + AbstractDungeon.effectList.add(new StrikeEffect(m, m.hb.cX, m.hb.cY, damageAmount)); + if (m.currentHealth < 0) { + m.currentHealth = 0; + } + + m.healthBarUpdatedEvent(); + } else if (weakenedToZero && m.currentBlock == 0) { + if (hadBlock) { + AbstractDungeon.effectList.add(new BlockedWordEffect(m, m.hb.cX, m.hb.cY, AbstractMonster.TEXT[30])); + } else { + AbstractDungeon.effectList.add(new StrikeEffect(m, m.hb.cX, m.hb.cY, 0)); + } + } else if (Settings.SHOW_DMG_BLOCK) { + AbstractDungeon.effectList.add(new BlockedWordEffect(m, m.hb.cX, m.hb.cY, AbstractMonster.TEXT[30])); + } + } + + private int decrementBlock(int damageAmount) { + if (m.currentBlock > 0) { + CardCrawlGame.screenShake.shake(ScreenShake.ShakeIntensity.MED, ScreenShake.ShakeDur.SHORT, false); + if (damageAmount > m.currentBlock) { + damageAmount -= m.currentBlock; + if (Settings.SHOW_DMG_BLOCK) { + AbstractDungeon.effectList.add(new BlockedNumberEffect(m.hb.cX, m.hb.cY + m.hb.height / 2.0F, Integer.toString(m.currentBlock))); + } + + m.loseBlock(); + + AbstractDungeon.effectList.add(new HbBlockBrokenEffect(m.hb.cX - m.hb.width / 2.0F + BLOCK_ICON_X, m.hb.cY - m.hb.height / 2.0F + BLOCK_ICON_Y)); + CardCrawlGame.sound.play("BLOCK_BREAK"); + } else if (damageAmount == m.currentBlock) { + damageAmount = 0; + m.loseBlock(); + AbstractDungeon.effectList.add(new BlockedWordEffect(m, m.hb.cX, m.hb.cY, AbstractMonster.TEXT[1])); + } else { + CardCrawlGame.sound.play("BLOCK_ATTACK"); + m.loseBlock(damageAmount); + + for (int i = 0; i < 18; ++i) { + AbstractDungeon.effectList.add(new BlockImpactLineEffect(m.hb.cX, m.hb.cY)); + } + + if (Settings.SHOW_DMG_BLOCK) { + AbstractDungeon.effectList.add(new BlockedNumberEffect(m.hb.cX, m.hb.cY + m.hb.height / 2.0F, Integer.toString(damageAmount))); + } + + damageAmount = 0; + } + } + + return damageAmount; + } +} diff --git a/src/main/java/awakenedOne/actions/ModifyMagicAction.java b/src/main/java/awakenedOne/actions/ModifyMagicAction.java new file mode 100644 index 000000000..68c3a4312 --- /dev/null +++ b/src/main/java/awakenedOne/actions/ModifyMagicAction.java @@ -0,0 +1,29 @@ +package awakenedOne.actions; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.helpers.GetAllInBattleInstances; + +import java.util.UUID; + +public class ModifyMagicAction extends AbstractGameAction { + private final UUID uuid; + + public ModifyMagicAction(UUID targetUUID, int amount) { + this.setValues(this.target, this.source, amount); + this.actionType = ActionType.CARD_MANIPULATION; + this.uuid = targetUUID; + } + + public void update() { + for (AbstractCard c : GetAllInBattleInstances.get(this.uuid)) { + c.baseMagicNumber += this.amount; + if (c.baseMagicNumber < 0) { + c.baseMagicNumber = 0; + } + c.magicNumber = c.baseMagicNumber; + } + + this.isDone = true; + } +} diff --git a/src/main/java/awakenedOne/actions/NihilAction.java b/src/main/java/awakenedOne/actions/NihilAction.java new file mode 100644 index 000000000..cc8586d55 --- /dev/null +++ b/src/main/java/awakenedOne/actions/NihilAction.java @@ -0,0 +1,112 @@ +package awakenedOne.actions; + +import awakenedOne.powers.NihilPower; +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.utility.WaitAction; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.vfx.AbstractGameEffect; +import com.megacrit.cardcrawl.vfx.BorderLongFlashEffect; +import com.megacrit.cardcrawl.vfx.combat.FlashAtkImgEffect; +import com.megacrit.cardcrawl.vfx.combat.WaterDropEffect; + +import static awakenedOne.util.Wiz.atb; + +public class NihilAction extends AbstractGameAction { + private final int damage; + + public NihilAction(AbstractCreature target, AbstractCreature source, int amount, DamageInfo.DamageType type, AbstractGameAction.AttackEffect effect) { + setValues(target, source, amount); + this.damage = amount; + this.actionType = AbstractGameAction.ActionType.DAMAGE; + this.damageType = type; + this.attackEffect = effect; + } + + public void update() { + if (this.duration == 0.5F) + AbstractDungeon.effectList.add(new FlashAtkImgEffect(this.target.hb.cX, this.target.hb.cY, AttackEffect.SLASH_HEAVY)); + tickDuration(); + if (this.isDone) { + vigorattack(); + this.target.damage(new DamageInfo(this.source, this.damage, this.damageType)); + if (AbstractDungeon.getMonsters().areMonstersBasicallyDead()) + AbstractDungeon.actionManager.clearPostCombatActions(); + AbstractDungeon.actionManager.addToTop(new WaitAction(0.1F)); + } + } + + private void vigorattack() { + int tmp = this.damage; + tmp -= this.target.currentBlock; + if (tmp > this.target.currentHealth) + tmp = this.target.currentHealth; + if (tmp > 0) { + atb(new ApplyPowerAction(target, source, new NihilPower(target, tmp), tmp)); + if (Settings.FAST_MODE) { + this.addToBot(new VFXAction(this.source, new OfferingEnemyEffect(target), 0.2F)); + } else { + this.addToBot(new VFXAction(this.source, new OfferingEnemyEffect(target), 0.5F)); + } + } + } + + + private static class OfferingEnemyEffect extends AbstractGameEffect { + private int count = 0; + private float timer = 0.0F; + private final AbstractCreature target; + + public OfferingEnemyEffect(AbstractCreature target) { + this.target = target; + } + + public void update() { + this.timer -= Gdx.graphics.getDeltaTime(); + if (this.timer < 0.0F) { + this.timer += 0.3F; + switch (this.count) { + case 0: + CardCrawlGame.sound.playA("ATTACK_FIRE", -0.5F); + CardCrawlGame.sound.playA("BLOOD_SPLAT", -0.75F); + AbstractDungeon.effectsQueue.add(new BorderLongFlashEffect(new Color(1.0F, 0.1F, 0.1F, 1.0F))); + AbstractDungeon.effectsQueue.add(new WaterDropEffect(target.hb.cX, target.hb.cY + 250.0F * Settings.scale)); + break; + case 1: + AbstractDungeon.effectsQueue.add(new WaterDropEffect(target.hb.cX + 150.0F * Settings.scale, target.hb.cY - 80.0F * Settings.scale)); + break; + case 2: + AbstractDungeon.effectsQueue.add(new WaterDropEffect(target.hb.cX - 200.0F * Settings.scale, target.hb.cY + 50.0F * Settings.scale)); + break; + case 3: + AbstractDungeon.effectsQueue.add(new WaterDropEffect(target.hb.cX + 200.0F * Settings.scale, target.hb.cY + 50.0F * Settings.scale)); + break; + case 4: + AbstractDungeon.effectsQueue.add(new WaterDropEffect(target.hb.cX - 150.0F * Settings.scale, target.hb.cY - 80.0F * Settings.scale)); + } + + ++this.count; + if (this.count == 6) { + this.isDone = true; + } + } + + } + + public void render(SpriteBatch sb) { + } + + public void dispose() { + } + } + + +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/actions/NukeCardAction.java b/src/main/java/awakenedOne/actions/NukeCardAction.java new file mode 100644 index 000000000..a832f3552 --- /dev/null +++ b/src/main/java/awakenedOne/actions/NukeCardAction.java @@ -0,0 +1,60 @@ +package awakenedOne.actions; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.ExhaustSpecificCardAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.orbs.AbstractOrb; +import guardian.orbs.StasisOrb; + + +public class NukeCardAction extends AbstractGameAction { + public AbstractCard card; + + + public NukeCardAction(AbstractCard card) { + this.card = card; + this.duration = this.startDuration = Settings.ACTION_DUR_XFAST; + } + + public void update() { + this.isDone = true; + for (int i = 0; i < AbstractDungeon.player.drawPile.size(); ) { + AbstractCard c = AbstractDungeon.player.drawPile.group.get(i); + if (c.uuid == card.uuid) { + addToBot(new ExhaustSpecificCardAction(c, AbstractDungeon.player.drawPile, true)); + } + } + + for (int i = 0; i < AbstractDungeon.player.hand.size(); ) { + AbstractCard c = AbstractDungeon.player.hand.group.get(i); + if (c.uuid == card.uuid) { + addToBot(new ExhaustSpecificCardAction(c, AbstractDungeon.player.hand, true)); + } + } + + for (int i = 0; i < AbstractDungeon.player.discardPile.size(); ) { + AbstractCard c = AbstractDungeon.player.discardPile.group.get(i); + if (c.uuid == card.uuid) { + addToBot(new ExhaustSpecificCardAction(c, AbstractDungeon.player.discardPile, true)); + } + } + + for (int i = 0; i < AbstractDungeon.player.limbo.size(); ) { + AbstractCard c = AbstractDungeon.player.limbo.group.get(i); + if (c.uuid == card.uuid) { + addToBot(new ExhaustSpecificCardAction(c, AbstractDungeon.player.limbo, true)); + } + } + + //AAAAAAHHHHHH!!!!!!!!! + for (AbstractOrb o : AbstractDungeon.player.orbs) { + if (o instanceof StasisOrb) { + if (((StasisOrb) o).stasisCard.uuid == card.uuid) { + AbstractDungeon.player.orbs.remove(o); + } + } + } + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/actions/RefreshSpellsAction.java b/src/main/java/awakenedOne/actions/RefreshSpellsAction.java new file mode 100644 index 000000000..47dbdf05b --- /dev/null +++ b/src/main/java/awakenedOne/actions/RefreshSpellsAction.java @@ -0,0 +1,12 @@ +package awakenedOne.actions; + +import awakenedOne.ui.OrbitingSpells; +import com.megacrit.cardcrawl.actions.AbstractGameAction; + +public class RefreshSpellsAction extends AbstractGameAction { + @Override + public void update() { + isDone = true; + OrbitingSpells.refreshSpells(); + } +} diff --git a/src/main/java/awakenedOne/actions/RemoveSpellCardAction.java b/src/main/java/awakenedOne/actions/RemoveSpellCardAction.java new file mode 100644 index 000000000..1fcbb4fef --- /dev/null +++ b/src/main/java/awakenedOne/actions/RemoveSpellCardAction.java @@ -0,0 +1,19 @@ +package awakenedOne.actions; + +import awakenedOne.ui.OrbitingSpells; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.cards.AbstractCard; + +public class RemoveSpellCardAction extends AbstractGameAction { + private final AbstractCard card; + + public RemoveSpellCardAction(AbstractCard card) { + this.card = card; + } + + @Override + public void update() { + isDone = true; + OrbitingSpells.removeSpellCard(card); + } +} diff --git a/src/main/java/awakenedOne/actions/RemoveSpellCardActionSpecial.java b/src/main/java/awakenedOne/actions/RemoveSpellCardActionSpecial.java new file mode 100644 index 000000000..e685b2730 --- /dev/null +++ b/src/main/java/awakenedOne/actions/RemoveSpellCardActionSpecial.java @@ -0,0 +1,19 @@ +package awakenedOne.actions; + +import awakenedOne.ui.OrbitingSpells; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.cards.AbstractCard; + +public class RemoveSpellCardActionSpecial extends AbstractGameAction { + private final AbstractCard card; + + public RemoveSpellCardActionSpecial(AbstractCard card) { + this.card = card; + } + + @Override + public void update() { + isDone = true; + OrbitingSpells.removeSpellCardSpecial(card); + } +} diff --git a/src/main/java/awakenedOne/actions/RitualDaggerThreeAction.java b/src/main/java/awakenedOne/actions/RitualDaggerThreeAction.java new file mode 100644 index 000000000..328585089 --- /dev/null +++ b/src/main/java/awakenedOne/actions/RitualDaggerThreeAction.java @@ -0,0 +1,66 @@ +package awakenedOne.actions; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.helpers.GetAllInBattleInstances; +import com.megacrit.cardcrawl.vfx.combat.FlashAtkImgEffect; + +import java.util.Iterator; +import java.util.UUID; + + +//unused +//turn out that a ritual dagger that hits three times is stupid and even if it wasn't the code is annoying + +public class RitualDaggerThreeAction extends AbstractGameAction { + private final int increaseAmount; + private final DamageInfo info; + private final UUID uuid; + + public RitualDaggerThreeAction(AbstractCreature target, DamageInfo info, int incAmount, UUID targetUUID) { + this.info = info; + this.setValues(target, info); + this.increaseAmount = incAmount; + this.actionType = ActionType.DAMAGE; + this.duration = 0.1F; + this.uuid = targetUUID; + } + + public void update() { + if (this.duration == 0.1F && this.target != null && this.target.isDying) { + AbstractDungeon.effectList.add(new FlashAtkImgEffect(this.target.hb.cX, this.target.hb.cY, AttackEffect.SLASH_HORIZONTAL)); + AbstractDungeon.effectList.add(new FlashAtkImgEffect(this.target.hb.cX, this.target.hb.cY, AttackEffect.SLASH_VERTICAL)); + AbstractDungeon.effectList.add(new FlashAtkImgEffect(this.target.hb.cX, this.target.hb.cY, AttackEffect.SLASH_HORIZONTAL)); + this.target.damage(this.info); + if ((this.target.isDying || this.target.currentHealth <= 0) && !this.target.halfDead && !this.target.hasPower("Minion")) { + Iterator var1 = AbstractDungeon.player.masterDeck.group.iterator(); + + AbstractCard c; + while (var1.hasNext()) { + c = (AbstractCard) var1.next(); + if (c.uuid.equals(this.uuid)) { + c.misc += this.increaseAmount; + c.applyPowers(); + c.baseDamage = c.misc; + c.isDamageModified = false; + } + } + + for (var1 = GetAllInBattleInstances.get(this.uuid).iterator(); var1.hasNext(); c.baseDamage = c.misc) { + c = (AbstractCard) var1.next(); + c.misc += this.increaseAmount; + c.applyPowers(); + } + } + + if (AbstractDungeon.getCurrRoom().monsters.areMonstersBasicallyDead()) { + AbstractDungeon.actionManager.clearPostCombatActions(); + } + } + + this.tickDuration(); + } +} diff --git a/src/main/java/awakenedOne/actions/ScryChantAction.java b/src/main/java/awakenedOne/actions/ScryChantAction.java new file mode 100644 index 000000000..b942c9824 --- /dev/null +++ b/src/main/java/awakenedOne/actions/ScryChantAction.java @@ -0,0 +1,81 @@ +package awakenedOne.actions; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.CardGroup; +import com.megacrit.cardcrawl.cards.CardGroup.CardGroupType; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.UIStrings; +import com.megacrit.cardcrawl.powers.AbstractPower; + +public class ScryChantAction extends AbstractGameAction { + public static final String[] TEXT; + private static final UIStrings uiStrings; + + static { + uiStrings = CardCrawlGame.languagePack.getUIString("ReprogramAction"); + TEXT = uiStrings.TEXT; + } + + private final float startingDuration; + + public ScryChantAction(int numCards) { + this.amount = numCards; + if (AbstractDungeon.player.hasRelic("GoldenEye")) { + AbstractDungeon.player.getRelic("GoldenEye").flash(); + this.amount += 2; + } + + this.actionType = ActionType.CARD_MANIPULATION; + this.startingDuration = Settings.ACTION_DUR_FAST; + this.duration = this.startingDuration; + } + + public void update() { + if (AbstractDungeon.getMonsters().areMonstersBasicallyDead()) { + this.isDone = true; + } else { + if (this.duration == this.startingDuration) { + for (AbstractPower p : AbstractDungeon.player.powers) { + p.onScry(); + } + + if (AbstractDungeon.player.drawPile.isEmpty()) { + this.isDone = true; + return; + } + + CardGroup tmpGroup = new CardGroup(CardGroupType.UNSPECIFIED); + if (this.amount != -1) { + for (int i = 0; i < Math.min(this.amount, AbstractDungeon.player.drawPile.size()); ++i) { + tmpGroup.addToTop(AbstractDungeon.player.drawPile.group.get(AbstractDungeon.player.drawPile.size() - i - 1)); + } + } else { + for (AbstractCard c : AbstractDungeon.player.drawPile.group) { + tmpGroup.addToBottom(c); + } + } + + AbstractDungeon.gridSelectScreen.open(tmpGroup, this.amount, true, TEXT[0]); + } else if (!AbstractDungeon.gridSelectScreen.selectedCards.isEmpty()) { + for (int i = AbstractDungeon.gridSelectScreen.selectedCards.size() - 1; i >= 0; i--) { + AbstractCard c = AbstractDungeon.gridSelectScreen.selectedCards.get(i); + if (c.type == AbstractCard.CardType.POWER) { + AbstractDungeon.player.drawPile.moveToHand(c); + } else { + AbstractDungeon.player.drawPile.moveToDiscardPile(c); + } + AbstractDungeon.gridSelectScreen.selectedCards.clear(); + } + + for (AbstractCard c : AbstractDungeon.player.discardPile.group) { + c.triggerOnScry(); + } + + this.tickDuration(); + } + } + } +} diff --git a/src/main/java/awakenedOne/actions/SerpentIdolPowerAction.java b/src/main/java/awakenedOne/actions/SerpentIdolPowerAction.java new file mode 100644 index 000000000..74682eef9 --- /dev/null +++ b/src/main/java/awakenedOne/actions/SerpentIdolPowerAction.java @@ -0,0 +1,79 @@ +package awakenedOne.actions; + +import basemod.BaseMod; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.screens.CardRewardScreen; +import com.megacrit.cardcrawl.vfx.cardManip.ShowCardAndAddToDiscardEffect; +import com.megacrit.cardcrawl.vfx.cardManip.ShowCardAndAddToHandEffect; +import expansioncontent.patches.CardColorEnumPatch; +import sneckomod.SneckoMod; + +import java.util.ArrayList; + +public class SerpentIdolPowerAction extends AbstractGameAction { + private boolean retrieveCard = false; + private final int count; + + public SerpentIdolPowerAction(int count) { + this.actionType = ActionType.CARD_MANIPULATION;// 19 + this.duration = Settings.ACTION_DUR_FAST;// 20 + this.count = count; + }// 22 + + public void update() { + if (this.duration == Settings.ACTION_DUR_FAST) { + AbstractDungeon.cardRewardScreen.customCombatOpen(this.generateCardChoices(), CardRewardScreen.TEXT[1], true); + this.tickDuration(); + } else { + if (!this.retrieveCard) { + if (AbstractDungeon.cardRewardScreen.discoveryCard != null) { + for (int i = 0; i < this.count; i++) { + + + AbstractCard disCard = AbstractDungeon.cardRewardScreen.discoveryCard.makeStatEquivalentCopy(); + disCard.setCostForTurn(0); + + disCard.current_x = -1000.0F * Settings.scale; + if (AbstractDungeon.player.hand.size() < BaseMod.MAX_HAND_SIZE) { + AbstractDungeon.effectList.add(new ShowCardAndAddToHandEffect(disCard, (float) Settings.WIDTH / 2.0F, (float) Settings.HEIGHT / 2.0F)); + } else { + AbstractDungeon.effectList.add(new ShowCardAndAddToDiscardEffect(disCard, (float) Settings.WIDTH / 2.0F, (float) Settings.HEIGHT / 2.0F)); + } + + } + } + + AbstractDungeon.cardRewardScreen.discoveryCard = null; + + this.retrieveCard = true; + } + this.tickDuration(); + } + } + + private ArrayList generateCardChoices() { + ArrayList derp = new ArrayList<>();// 57 + + while (derp.size() != 3) {// 60 + boolean dupe = false;// 61 + + AbstractCard tmp = SneckoMod.getOffClassCardMatchingPredicatePotionRng(c -> c.type == AbstractCard.CardType.POWER && !c.hasTag(SneckoMod.BANNEDFORSNECKO) && c.color != AbstractCard.CardColor.COLORLESS && c.color != CardColorEnumPatch.CardColorPatch.BOSS); + + for (AbstractCard c : derp) { + if (c.cardID.equals(tmp.cardID)) {// 76 + dupe = true;// 77 + break;// 78 + } + } + + if (!dupe) {// 82 + derp.add(tmp.makeCopy());// 83 + } + } + + return derp;// 87 + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/actions/SetUpNextSpellAction.java b/src/main/java/awakenedOne/actions/SetUpNextSpellAction.java new file mode 100644 index 000000000..45bd1f567 --- /dev/null +++ b/src/main/java/awakenedOne/actions/SetUpNextSpellAction.java @@ -0,0 +1,15 @@ +package awakenedOne.actions; + +import awakenedOne.ui.OrbitingSpells; +import com.megacrit.cardcrawl.actions.AbstractGameAction; + +public class SetUpNextSpellAction extends AbstractGameAction { + public SetUpNextSpellAction() { + } + + @Override + public void update() { + isDone = true; + OrbitingSpells.setupnext(); + } +} diff --git a/src/main/java/awakenedOne/actions/nukePowerAction.java b/src/main/java/awakenedOne/actions/nukePowerAction.java new file mode 100644 index 000000000..3e7fa6163 --- /dev/null +++ b/src/main/java/awakenedOne/actions/nukePowerAction.java @@ -0,0 +1,67 @@ +package awakenedOne.actions; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.DrawCardAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.UIStrings; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +import static awakenedOne.util.Wiz.atb; + + +public class nukePowerAction extends AbstractGameAction { + private static final UIStrings uiStrings = CardCrawlGame.languagePack.getUIString("ExhaustAction"); + public static final String[] TEXT = uiStrings.TEXT; + private final int draw; + + + public nukePowerAction(int draw) { + this.draw = draw; + this.duration = this.startDuration = Settings.ACTION_DUR_XFAST; + } + + public void update() { + ArrayList hand = AbstractDungeon.player.hand.group; + if (this.duration == this.startDuration) { + if (hand.size() != 0) { + if (hand.size() == 1) { + mopUpSelectedCard(hand.stream().collect(Collectors.toList())); + + AbstractDungeon.player.hand.refreshHandLayout(); + AbstractDungeon.player.hand.applyPowers(); + this.isDone = true; + } else { + AbstractDungeon.handCardSelectScreen.open(TEXT[0], 1, false, false); + this.tickDuration(); + } + } else { + this.isDone = true; + } + } else if (!AbstractDungeon.handCardSelectScreen.wereCardsRetrieved) { + mopUpSelectedCard(AbstractDungeon.handCardSelectScreen.selectedCards.group); + + AbstractDungeon.handCardSelectScreen.wereCardsRetrieved = true; + AbstractDungeon.handCardSelectScreen.selectedCards.group.clear(); + + AbstractDungeon.player.hand.refreshHandLayout(); + AbstractDungeon.player.hand.applyPowers(); + this.isDone = true; + } else { + this.tickDuration(); + } + } + + private void mopUpSelectedCard(List cards) { + // if (cards.get(0) instanceof VoidCard || cards.get(0) instanceof IntoTheVoid || (cards.get(0).type == AbstractCard.CardType.POWER)) + if ((cards.get(0).type == AbstractCard.CardType.POWER)) { + atb(new DrawCardAction(draw)); + } + AbstractDungeon.player.hand.moveToExhaustPile(cards.get(0)); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cardmods/ConjureMod.java b/src/main/java/awakenedOne/cardmods/ConjureMod.java new file mode 100644 index 000000000..868c53e8f --- /dev/null +++ b/src/main/java/awakenedOne/cardmods/ConjureMod.java @@ -0,0 +1,56 @@ +package awakenedOne.cardmods; + +import awakenedOne.actions.ConjureAction; +import basemod.abstracts.AbstractCardModifier; +import basemod.helpers.CardModifierManager; +import com.megacrit.cardcrawl.actions.utility.UseCardAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.core.CardCrawlGame; + +import static awakenedOne.AwakenedOneMod.DELVE; +import static awakenedOne.util.Wiz.atb; + +public class ConjureMod extends AbstractCardModifier { + + public static String ID = "awakened:ConjureMod"; + + @Override + public String modifyDescription(String rawDescription, AbstractCard card) { + return rawDescription + CardCrawlGame.languagePack.getUIString("awakened:ConjureMod").TEXT[0]; + } + + @Override + public void onUse(AbstractCard card, AbstractCreature target, UseCardAction action) { + super.onUse(card, target, action); + atb(new ConjureAction(false)); + } + + @Override + public void onInitialApplication(AbstractCard card) { + card.tags.add(DELVE); + card.initializeDescription(); + } + + @Override + public void onRemove(AbstractCard card) { + card.tags.remove(DELVE); + card.initializeDescription(); + } + + @Override + public String identifier(AbstractCard card) { + return ID; + } + + @Override + public boolean shouldApply(AbstractCard card) { + return !CardModifierManager.hasModifier(card, ID); + } + + @Override + public AbstractCardModifier makeCopy() { + return new ConjureMod(); + } + +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cardmods/DrainingMod.java b/src/main/java/awakenedOne/cardmods/DrainingMod.java new file mode 100644 index 000000000..8c3b84b05 --- /dev/null +++ b/src/main/java/awakenedOne/cardmods/DrainingMod.java @@ -0,0 +1,55 @@ +package awakenedOne.cardmods; + +import basemod.abstracts.AbstractCardModifier; +import basemod.helpers.CardModifierManager; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.utility.UseCardAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import hermit.powers.Drained; + +public class DrainingMod extends AbstractCardModifier { + + public static String ID = "awakened:DrainingMod"; + + @Override + public String modifyDescription(String rawDescription, AbstractCard card) { + return rawDescription + CardCrawlGame.languagePack.getUIString("awakened:DrainingMod").TEXT[0]; + } + + @Override + public void onUse(AbstractCard card, AbstractCreature target, UseCardAction action) { + super.onUse(card, target, action); + this.addToBot(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new Drained(AbstractDungeon.player, AbstractDungeon.player, 1), 1)); + } + + @Override + public void onInitialApplication(AbstractCard card) { + card.updateCost(-1); + card.initializeDescription(); + } + + @Override + public void onRemove(AbstractCard card) { + card.updateCost(+1); + card.initializeDescription(); + } + + @Override + public String identifier(AbstractCard card) { + return ID; + } + + @Override + public boolean shouldApply(AbstractCard card) { + return !CardModifierManager.hasModifier(card, ID); + } + + @Override + public AbstractCardModifier makeCopy() { + return new DrainingMod(); + } + +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/AbstractAwakenedCard.java b/src/main/java/awakenedOne/cards/AbstractAwakenedCard.java new file mode 100644 index 000000000..1e24d887d --- /dev/null +++ b/src/main/java/awakenedOne/cards/AbstractAwakenedCard.java @@ -0,0 +1,281 @@ +package awakenedOne.cards; + +import awakenedOne.AwakenedOneChar; +import awakenedOne.AwakenedOneMod; +import awakenedOne.AwakenedTextHelper; +import awakenedOne.powers.RisingChantPower; +import awakenedOne.relics.CursedBlessing; +import awakenedOne.relics.WhiteRibbon; +import basemod.abstracts.CustomCard; +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.files.FileHandle; +import com.badlogic.gdx.graphics.Texture; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.DamageAction; +import com.megacrit.cardcrawl.actions.common.DamageAllEnemiesAction; +import com.megacrit.cardcrawl.actions.common.GainBlockAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.CardStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.unlock.UnlockTracker; +import hermit.util.TextureLoader; + +import static awakenedOne.AwakenedOneMod.ACTIVECHANT; +import static awakenedOne.util.Wiz.atb; +import static awakenedOne.util.Wiz.isChantActive; + +public abstract class AbstractAwakenedCard extends CustomCard { + + protected final CardStrings cardStrings; + public String betaArtPath; + + public int secondMagic; + public int baseSecondMagic = -1; + public boolean upgradedSecondMagic; + public boolean isSecondMagicModified; + + public int thirdMagic; + public int baseThirdMagic = -1; + public boolean upgradedThirdMagic; + public boolean isThirdMagicModified; + + public int secondDamage; + public int baseSecondDamage = -1; + public boolean upgradedSecondDamage; + public boolean isSecondDamageModified; + + public boolean trig_chant = false; + + public AbstractAwakenedCard(final String cardID, final int cost, final CardType type, final CardRarity rarity, final CardTarget target) { + this(cardID, cost, type, rarity, target, AwakenedOneChar.Enums.AWAKENED_BLUE); + } + + public AbstractAwakenedCard(final String cardID, final int cost, final CardType type, final CardRarity rarity, final CardTarget target, final CardColor color) { + super(cardID, "", getCardTextureString(cardID.replace(AwakenedOneMod.getModID() + ":", ""), type), + cost, "", type, color, rarity, target); + cardStrings = CardCrawlGame.languagePack.getCardStrings(this.cardID); + rawDescription = cardStrings.DESCRIPTION; + name = originalName = cardStrings.NAME; + initializeTitle(); + initializeDescription(); + } + + public static String getCardTextureString(final String cardName, final CardType cardType) { + String textureString = "awakenedResources/images/cards/" + cardName + ".png"; + FileHandle h = Gdx.files.internal(textureString); + if (!h.exists()) { + textureString = "awakenedResources/images/cards/joke/" + cardName + ".png"; + h = Gdx.files.internal(textureString); + } + if (!h.exists()) { + textureString = "awakenedResources/images/cards/programmerart/" + cardName + ".png"; + h = Gdx.files.internal(textureString); + } + if (!h.exists()) { + textureString = "awakenedResources/images/ui/missing.png"; + } + return textureString; + } + + @Override + protected Texture getPortraitImage() { + if (Settings.PLAYTESTER_ART_MODE || UnlockTracker.betaCardPref.getBoolean(this.cardID, false)) { + if (this.textureImg == null) { + return null; + } else { + if (betaArtPath != null) { + int endingIndex = betaArtPath.lastIndexOf("."); + String newPath = betaArtPath.substring(0, endingIndex) + "_p" + betaArtPath.substring(endingIndex); + System.out.println("Finding texture: " + newPath); + Texture portraitTexture; + portraitTexture = TextureLoader.getTexture(newPath); + return portraitTexture; + } + } + } + return super.getPortraitImage(); + } + + @Override + public void applyPowers() { + if (baseSecondDamage > -1) { + secondDamage = baseSecondDamage; + + int tmp = baseDamage; + baseDamage = baseSecondDamage; + + super.applyPowers(); + + secondDamage = damage; + baseDamage = tmp; + + super.applyPowers(); + + AwakenedTextHelper.colorCombos(this, false); + + isSecondDamageModified = (secondDamage != baseSecondDamage); + } else { + super.applyPowers(); + AwakenedTextHelper.colorCombos(this, false); + } + } + + @Override + public void calculateCardDamage(AbstractMonster mo) { + if (baseSecondDamage > -1) { + secondDamage = baseSecondDamage; + + int tmp = baseDamage; + baseDamage = baseSecondDamage; + + super.calculateCardDamage(mo); + + secondDamage = damage; + baseDamage = tmp; + + super.calculateCardDamage(mo); + + isSecondDamageModified = (secondDamage != baseSecondDamage); + } else super.calculateCardDamage(mo); + } + + public void resetAttributes() { + super.resetAttributes(); + secondMagic = baseSecondMagic; + isSecondMagicModified = false; + thirdMagic = baseThirdMagic; + isThirdMagicModified = false; + secondDamage = baseSecondDamage; + isSecondDamageModified = false; + } + + public void displayUpgrades() { + super.displayUpgrades(); + if (upgradedSecondMagic) { + secondMagic = baseSecondMagic; + isSecondMagicModified = true; + } + if (upgradedThirdMagic) { + thirdMagic = baseThirdMagic; + isThirdMagicModified = true; + } + if (upgradedSecondDamage) { + secondDamage = baseSecondDamage; + isSecondDamageModified = true; + } + } + + protected void upgradeSecondMagic(int amount) { + baseSecondMagic += amount; + secondMagic = baseSecondMagic; + upgradedSecondMagic = true; + } + + protected void upgradeThirdMagic(int amount) { + baseThirdMagic += amount; + thirdMagic = baseThirdMagic; + upgradedThirdMagic = true; + } + + protected void upgradeSecondDamage(int amount) { + baseSecondDamage += amount; + secondDamage = baseSecondDamage; + upgradedSecondDamage = true; + } + + public void upgrade() { + if (!upgraded) { + upgradeName(); + upp(); + if (cardStrings.UPGRADE_DESCRIPTION != null) { + rawDescription = cardStrings.UPGRADE_DESCRIPTION; + initializeDescription(); + } + } + } + + @Override + public void initializeDescription() { + super.initializeDescription(); + if (this.hasTag(ACTIVECHANT)) { + this.keywords.add("awakened:chant"); + } + } + + public abstract void upp(); + + // These shortcuts are specifically for cards. All other shortcuts that aren't specifically for cards can go in Wiz. + protected void dmg(AbstractMonster m, AbstractGameAction.AttackEffect fx) { + atb(new DamageAction(m, new DamageInfo(AbstractDungeon.player, damage, damageTypeForTurn), fx)); + } + + protected void allDmg(AbstractGameAction.AttackEffect fx) { + atb(new DamageAllEnemiesAction(AbstractDungeon.player, multiDamage, damageTypeForTurn, fx)); + } + + protected void altDmg(AbstractMonster m, AbstractGameAction.AttackEffect fx) { + atb(new DamageAction(m, new DamageInfo(AbstractDungeon.player, secondDamage, damageTypeForTurn), fx)); + } + + protected void blck() { + atb(new GainBlockAction(AbstractDungeon.player, AbstractDungeon.player, block)); + } + + //Chant Stuff + public void chant() { + } + + public void onVictory() { + if (this.hasTag(ACTIVECHANT)) this.tags.remove(ACTIVECHANT); + this.initializeDescription(); + } + + public boolean isChantActiveGlow(AbstractCard source) { + return !AbstractDungeon.actionManager.cardsPlayedThisCombat.isEmpty() && AbstractDungeon.actionManager.cardsPlayedThisCombat.get(AbstractDungeon.actionManager.cardsPlayedThisCombat.size() - 1).type == CardType.POWER || this.hasTag(ACTIVECHANT) || this.trig_chant; + } + + @Override + public AbstractCard makeStatEquivalentCopy() { + AbstractCard original = super.makeStatEquivalentCopy(); + ((AbstractAwakenedCard) original).trig_chant = this.trig_chant; + if (this.trig_chant) { + original.tags.add(ACTIVECHANT); + } + return original; + } + + public boolean isTrig_chant() { + if (isChantActive() || this.hasTag(ACTIVECHANT)) { + this.trig_chant = true; + AwakenedTextHelper.colorCombos(this, false); + } + return (trig_chant); + } + + //Whenever a Chant effect activates, do this!!! + public void checkOnChant() { + if (!this.hasTag(ACTIVECHANT)) { + this.tags.add(ACTIVECHANT); + AwakenedTextHelper.colorCombos(this, false); + this.initializeDescription(); + } + if (AbstractDungeon.player.hasRelic(CursedBlessing.ID)) { + AbstractDungeon.player.getRelic(CursedBlessing.ID).onTrigger(); + } + if (AbstractDungeon.player.hasRelic(WhiteRibbon.ID)) { + AbstractDungeon.player.getRelic(WhiteRibbon.ID).onTrigger(); + } + if (AbstractDungeon.player.hasPower(RisingChantPower.POWER_ID)) { + AbstractDungeon.player.getPower(RisingChantPower.POWER_ID).onSpecificTrigger(); + } + AwakenedTextHelper.colorCombos(this, false); + } + + public void update() { + super.update(); + } +} diff --git a/src/main/java/awakenedOne/cards/Altar.java b/src/main/java/awakenedOne/cards/Altar.java new file mode 100644 index 000000000..bd5b1d639 --- /dev/null +++ b/src/main/java/awakenedOne/cards/Altar.java @@ -0,0 +1,43 @@ +package awakenedOne.cards; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.actions.ConjureAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.localization.UIStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import hermit.actions.HandSelectAction; +import hermit.util.Wiz; + +import static awakenedOne.AwakenedOneMod.*; +import static awakenedOne.util.Wiz.atb; + +public class Altar extends AbstractAwakenedCard { + public final static String ID = makeID(Altar.class.getSimpleName()); + // intellij stuff skill, enemy, uncommon, , , , , 1, 1 + public static UIStrings uiStrings = CardCrawlGame.languagePack.getUIString("ExhaustAction"); + + public Altar() { + super(ID, 1, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); + baseBlock = 5; + this.tags.add(AwakenedOneMod.DELVE); + //selfRetain = true; + loadJokeCardImage(this, makeBetaCardPath(Altar.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + blck(); + Wiz.atb(new HandSelectAction(1, (c) -> true, list -> { + for (AbstractCard c : list) { + Wiz.p().hand.moveToExhaustPile(c); + } + list.clear(); + }, null, uiStrings.TEXT[0], false, false, false)); + atb(new ConjureAction(false)); + } + + public void upp() { + upgradeBlock(3); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/AphoticFount.java b/src/main/java/awakenedOne/cards/AphoticFount.java new file mode 100644 index 000000000..c0455577d --- /dev/null +++ b/src/main/java/awakenedOne/cards/AphoticFount.java @@ -0,0 +1,41 @@ +package awakenedOne.cards; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.cards.tokens.spells.AphoticShield; +import awakenedOne.powers.AphoticFountPower; +import basemod.patches.com.megacrit.cardcrawl.cards.AbstractCard.MultiCardPreview; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import static awakenedOne.AwakenedOneMod.loadJokeCardImage; +import static awakenedOne.AwakenedOneMod.makeBetaCardPath; +import static awakenedOne.ui.OrbitingSpells.spellCards; +import static awakenedOne.util.Wiz.applyToSelf; + +public class AphoticFount extends AbstractAwakenedCard { + + public final static String ID = AwakenedOneMod.makeID(AphoticFount.class.getSimpleName()); + // intellij stuff skill, self, basic, , , 5, 3, , + + public AphoticFount() { + super(ID, 1, CardType.POWER, CardRarity.RARE, CardTarget.SELF); + AbstractCard c = new AphoticShield(); + c.upgrade(); + MultiCardPreview.add(this, new AphoticShield(), c); + baseMagicNumber = magicNumber = 4; + loadJokeCardImage(this, makeBetaCardPath(AphoticFount.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + AbstractCard card = new AphoticShield(); + spellCards.add(card); + applyToSelf(new AphoticFountPower(false)); + } + + @Override + public void upp() { + //upgradeMagicNumber(2); + upgradeBaseCost(0); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/ArcaneNesting.java b/src/main/java/awakenedOne/cards/ArcaneNesting.java new file mode 100644 index 000000000..566efe204 --- /dev/null +++ b/src/main/java/awakenedOne/cards/ArcaneNesting.java @@ -0,0 +1,48 @@ +package awakenedOne.cards; + +import com.badlogic.gdx.graphics.Color; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.CardStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import expansioncontent.expansionContentMod; + +import static awakenedOne.AwakenedOneMod.*; + + +public class ArcaneNesting extends AbstractAwakenedCard { + public final static String ID = makeID(ArcaneNesting.class.getSimpleName()); + // intellij stuff attack, enemy, common, 8, 3, , , 3, 1 + private static final CardStrings strings = CardCrawlGame.languagePack.getCardStrings(ID); + + public ArcaneNesting() { + super(ID, -2, CardType.SKILL, CardRarity.RARE, CardTarget.SELF); + baseBlock = 4; + tags.add(expansionContentMod.UNPLAYABLE); + loadJokeCardImage(this, makeBetaCardPath(ArcaneNesting.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + } + + @Override + public void triggerOnCardPlayed(AbstractCard card) { + if (card.type == CardType.POWER && AbstractDungeon.player.hand.contains(this)) { + flash(Color.BLUE.cpy()); + blck(); + } + } + + @Override + public boolean canUse(AbstractPlayer p, AbstractMonster m) { + cantUseMessage = cardStrings.EXTENDED_DESCRIPTION[0]; + return false; + } + + public void upp() { + //upgradeMagicNumber(1); + upgradeBlock(2); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/Archmagus.java b/src/main/java/awakenedOne/cards/Archmagus.java new file mode 100644 index 000000000..fd07f4926 --- /dev/null +++ b/src/main/java/awakenedOne/cards/Archmagus.java @@ -0,0 +1,27 @@ +package awakenedOne.cards; + +import awakenedOne.powers.ArchmagusPower; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import static awakenedOne.AwakenedOneMod.*; +import static awakenedOne.util.Wiz.applyToSelf; + +public class Archmagus extends AbstractAwakenedCard { + public final static String ID = makeID(Archmagus.class.getSimpleName()); + // intellij stuff power, self, rare, , , , , , + + public Archmagus() { + super(ID, 3, CardType.POWER, CardRarity.RARE, CardTarget.SELF); + loadJokeCardImage(this, makeBetaCardPath(Archmagus.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + applyToSelf(new ArchmagusPower(1)); + } + + public void upp() { + upgradeBaseCost(2); + } + +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/AwakenedForm.java b/src/main/java/awakenedOne/cards/AwakenedForm.java new file mode 100644 index 000000000..cdddfa632 --- /dev/null +++ b/src/main/java/awakenedOne/cards/AwakenedForm.java @@ -0,0 +1,35 @@ +package awakenedOne.cards; + +import awakenedOne.powers.ReverseRitualPower; +import basemod.helpers.BaseModCardTags; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.CuriosityPower; + +import static awakenedOne.AwakenedOneMod.*; +import static awakenedOne.util.Wiz.applyToSelf; +import static awakenedOne.util.Wiz.applyToSelfTop; + +public class AwakenedForm extends AbstractAwakenedCard { + public final static String ID = makeID(AwakenedForm.class.getSimpleName()); + // intellij stuff power, self, rare, , , , , 2, 1 + + public AwakenedForm() { + super(ID, 3, CardType.POWER, CardRarity.RARE, CardTarget.SELF); + baseMagicNumber = magicNumber = 2; + baseSecondMagic = secondMagic = 2; + tags.add(BaseModCardTags.FORM); + loadJokeCardImage(this, makeBetaCardPath(AwakenedForm.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + applyToSelfTop(new CuriosityPower(p, secondMagic)); + applyToSelf(new ReverseRitualPower(magicNumber)); + } + + @Override + public void upp() { + upgradeSecondMagic(1); + //upgradeMagicNumber(-1); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/BirdsEye.java b/src/main/java/awakenedOne/cards/BirdsEye.java new file mode 100644 index 000000000..37fad36ad --- /dev/null +++ b/src/main/java/awakenedOne/cards/BirdsEye.java @@ -0,0 +1,36 @@ +package awakenedOne.cards; + +import awakenedOne.actions.ConjureAction; +import awakenedOne.ui.OrbitingSpells; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import static awakenedOne.AwakenedOneMod.*; +import static awakenedOne.util.Wiz.atb; + +public class BirdsEye extends AbstractAwakenedCard { + public final static String ID = makeID(BirdsEye.class.getSimpleName()); + // intellij stuff skill, enemy, uncommon, , , , , 1, 1 + + public BirdsEye() { + super(ID, 0, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); + loadJokeCardImage(this, makeBetaCardPath(BirdsEye.class.getSimpleName() + ".png")); + exhaust = true; + } + + public void use(AbstractPlayer p, AbstractMonster m) { + atb(new AbstractGameAction() { + @Override + public void update() { + isDone = true; + OrbitingSpells.refreshSpells(); + } + }); + atb(new ConjureAction(true)); + } + + public void upp() { + exhaust = false; + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/BloodRite.java b/src/main/java/awakenedOne/cards/BloodRite.java new file mode 100644 index 000000000..d91eb6ece --- /dev/null +++ b/src/main/java/awakenedOne/cards/BloodRite.java @@ -0,0 +1,41 @@ +package awakenedOne.cards; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.cards.tokens.Ceremony; +import awakenedOne.util.Wiz; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.MakeTempCardInHandAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import static awakenedOne.AwakenedOneMod.loadJokeCardImage; +import static awakenedOne.AwakenedOneMod.makeBetaCardPath; + + +public class BloodRite extends AbstractAwakenedCard { + public final static String ID = AwakenedOneMod.makeID(BloodRite.class.getSimpleName()); + // intellij stuff attack, enemy, basic, 6, 3, , , , + + public BloodRite() { + super(ID, 0, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); + baseDamage = 3; + this.cardsToPreview = new Ceremony(); + loadJokeCardImage(this, makeBetaCardPath(BloodRite.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + dmg(m, AbstractGameAction.AttackEffect.SLASH_HORIZONTAL); + AbstractCard c = new Ceremony(); + if (upgraded) { + c.upgrade(); + } + Wiz.atb(new MakeTempCardInHandAction(c, 1)); + } + + @Override + public void upp() { + cardsToPreview.upgrade(); + upgradeDamage(1); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/Bloodthirst.java b/src/main/java/awakenedOne/cards/Bloodthirst.java new file mode 100644 index 000000000..0595e85d1 --- /dev/null +++ b/src/main/java/awakenedOne/cards/Bloodthirst.java @@ -0,0 +1,47 @@ +package awakenedOne.cards; + +import com.badlogic.gdx.graphics.Color; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.vfx.StarBounceEffect; +import com.megacrit.cardcrawl.vfx.combat.ViolentAttackEffect; +import expansioncontent.actions.BloodthirstAction; + +import static awakenedOne.AwakenedOneMod.*; + +public class Bloodthirst extends AbstractAwakenedCard { + public final static String ID = makeID(Bloodthirst.class.getSimpleName()); + // intellij stuff attack, enemy, common, 8, 3, , , 3, 1 + + public Bloodthirst() { + super(ID, 2, CardType.ATTACK, CardRarity.RARE, CardTarget.ENEMY); + baseDamage = 20; + tags.add(CardTags.HEALING); + loadJokeCardImage(this, makeBetaCardPath(Bloodthirst.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + int i; + if (Settings.FAST_MODE) { + this.addToTop(new VFXAction(new ViolentAttackEffect(m.hb.cX, m.hb.cY, Color.RED))); + + for (i = 0; i < 5; ++i) { + this.addToTop(new VFXAction(new StarBounceEffect(m.hb.cX, m.hb.cY))); + } + } else { + this.addToTop(new VFXAction(new ViolentAttackEffect(m.hb.cX, m.hb.cY, Color.RED), 0.4F)); + + for (i = 0; i < 5; ++i) { + this.addToTop(new VFXAction(new StarBounceEffect(m.hb.cX, m.hb.cY))); + } + } + this.addToBot(new BloodthirstAction(m, new DamageInfo(p, this.damage, this.damageTypeForTurn), this.uuid, true)); + } + + public void upp() { + upgradeDamage(5); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/Brainshock.java b/src/main/java/awakenedOne/cards/Brainshock.java new file mode 100644 index 000000000..2940c7e75 --- /dev/null +++ b/src/main/java/awakenedOne/cards/Brainshock.java @@ -0,0 +1,51 @@ +package awakenedOne.cards; + +import awakenedOne.patches.OnLoseEnergyPowerPatch; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.vfx.combat.HemokinesisEffect; + +import static awakenedOne.AwakenedOneMod.*; + +public class Brainshock extends AbstractAwakenedCard { + public final static String ID = makeID(Brainshock.class.getSimpleName()); + // intellij stuff attack, enemy, common, 8, 3, , , 3, 1 + + public Brainshock() { + super(ID, 1, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); + baseDamage = 9; + this.baseMagicNumber = 3; + this.magicNumber = this.baseMagicNumber; + loadJokeCardImage(this, makeBetaCardPath(Brainshock.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + if (m != null) { + this.addToBot(new VFXAction(new HemokinesisEffect(p.hb.cX, p.hb.cY, m.hb.cX, m.hb.cY), 0.5F)); + } + dmg(m, AbstractGameAction.AttackEffect.BLUNT_HEAVY); + } + + public void calculateCardDamage(AbstractMonster mo) { + int realBaseDamage = this.baseDamage; + this.baseDamage += this.magicNumber * OnLoseEnergyPowerPatch.EnergyLostThisCombat; + super.calculateCardDamage(mo); + this.baseDamage = realBaseDamage; + this.isDamageModified = this.damage != this.baseDamage; + } + + + public void applyPowers() { + int realBaseDamage = this.baseDamage; + this.baseDamage += this.magicNumber * OnLoseEnergyPowerPatch.EnergyLostThisCombat; + super.applyPowers(); + this.baseDamage = realBaseDamage; + this.isDamageModified = this.damage != this.baseDamage; + } + + public void upp() { + upgradeMagicNumber(1); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/Carrionmaker.java b/src/main/java/awakenedOne/cards/Carrionmaker.java new file mode 100644 index 000000000..98dec21ed --- /dev/null +++ b/src/main/java/awakenedOne/cards/Carrionmaker.java @@ -0,0 +1,64 @@ +package awakenedOne.cards; + +import awakenedOne.cards.tokens.spells.AbstractSpellCard; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.AttackDamageRandomEnemyAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.CardStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import static awakenedOne.AwakenedOneMod.*; + +public class Carrionmaker extends AbstractAwakenedCard { + public final static String ID = makeID(Carrionmaker.class.getSimpleName()); + // intellij stuff attack, enemy, common, 8, 3, , , 3, 1 + + private static final CardStrings strings = CardCrawlGame.languagePack.getCardStrings(ID); + + //carrionmaker + public Carrionmaker() { + super(ID, 2, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ALL_ENEMY); + baseDamage = 9; + loadJokeCardImage(this, makeBetaCardPath(Carrionmaker.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + int count = (int) AbstractDungeon.actionManager.cardsPlayedThisTurn.stream() + .filter(card -> card instanceof AbstractSpellCard) + .count(); + + for (int i = 0; i < count + 1; i++) { + this.addToBot(new AttackDamageRandomEnemyAction(this, AbstractGameAction.AttackEffect.SLASH_HORIZONTAL)); + } + this.initializeDescription(); + } + + @Override + public void applyPowers() { + super.applyPowers(); + int count = (int) AbstractDungeon.actionManager.cardsPlayedThisTurn.stream() + .filter(card -> card instanceof AbstractSpellCard) + .count(); + this.rawDescription = strings.DESCRIPTION; + this.rawDescription = this.rawDescription + strings.EXTENDED_DESCRIPTION[0] + count; + if (count == 1) { + this.rawDescription += strings.EXTENDED_DESCRIPTION[1]; + } else { + this.rawDescription += strings.EXTENDED_DESCRIPTION[2]; + } + this.initializeDescription(); + } + + @Override + public void onMoveToDiscard() { + this.rawDescription = strings.DESCRIPTION; + this.initializeDescription(); + } + + + public void upp() { + upgradeDamage(3); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/Caw.java b/src/main/java/awakenedOne/cards/Caw.java new file mode 100644 index 000000000..f037d23b2 --- /dev/null +++ b/src/main/java/awakenedOne/cards/Caw.java @@ -0,0 +1,55 @@ +package awakenedOne.cards; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.actions.GashCawAction; +import com.badlogic.gdx.graphics.Color; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.vfx.combat.ClawEffect; + +import static awakenedOne.AwakenedOneMod.*; + +public class Caw extends AbstractAwakenedCard { + public final static String ID = makeID(Caw.class.getSimpleName()); + // intellij stuff power, self, rare, , , , , , + + public Caw() { + super(ID, 0, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); + baseDamage = 4; + this.baseMagicNumber = 4; + this.tags.add(AwakenedOneMod.CHANT); + this.magicNumber = this.baseMagicNumber; + loadJokeCardImage(this, makeBetaCardPath(Caw.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + CardCrawlGame.sound.playA("VO_CULTIST_1A", .3f); + if (m != null) { + this.addToBot(new VFXAction(new ClawEffect(m.hb.cX, m.hb.cY, Color.CYAN, Color.WHITE), 0.1F)); + } + dmg(m, AbstractGameAction.AttackEffect.NONE); + + if (isTrig_chant()) { + chant(); + } + } + + @Override + public void chant() { + this.addToBot(new GashCawAction(this, this.magicNumber)); + checkOnChant(); + } + + public void triggerOnGlowCheck() { + this.glowColor = isChantActiveGlow(this) ? GOLD_BORDER_GLOW_COLOR : BLUE_BORDER_GLOW_COLOR; + } + + @Override + public void upp() { + upgradeDamage(1); + upgradeMagicNumber(1); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/ChosenVerse.java b/src/main/java/awakenedOne/cards/ChosenVerse.java new file mode 100644 index 000000000..295f0ce6c --- /dev/null +++ b/src/main/java/awakenedOne/cards/ChosenVerse.java @@ -0,0 +1,34 @@ +package awakenedOne.cards; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.powers.ChosensVersePower; +import awakenedOne.util.Wiz; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import static awakenedOne.AwakenedOneMod.loadJokeCardImage; +import static awakenedOne.AwakenedOneMod.makeBetaCardPath; + + +public class ChosenVerse extends AbstractAwakenedCard { + public final static String ID = AwakenedOneMod.makeID(ChosenVerse.class.getSimpleName()); + // intellij stuff attack, enemy, basic, 6, 3, , , , + + public ChosenVerse() { + super(ID, 1, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); + baseBlock = 4; + baseMagicNumber = magicNumber = 2; + loadJokeCardImage(this, makeBetaCardPath(ChosenVerse.class.getSimpleName() + ".png")); + } + + + public void use(AbstractPlayer p, AbstractMonster m) { + Wiz.applyToSelf(new ChosensVersePower(magicNumber, block)); + } + + @Override + public void upp() { + //upgradeMagicNumber(1); + upgradeBlock(2); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/ClarionCall.java b/src/main/java/awakenedOne/cards/ClarionCall.java new file mode 100644 index 000000000..db013db8f --- /dev/null +++ b/src/main/java/awakenedOne/cards/ClarionCall.java @@ -0,0 +1,33 @@ +package awakenedOne.cards; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.powers.VoidRefundPower; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import static awakenedOne.AwakenedOneMod.loadJokeCardImage; +import static awakenedOne.AwakenedOneMod.makeBetaCardPath; +import static awakenedOne.util.Wiz.applyToSelf; + +public class ClarionCall extends AbstractAwakenedCard { + + public final static String ID = AwakenedOneMod.makeID(ClarionCall.class.getSimpleName()); + // intellij stuff skill, self, basic, , , 5, 3, , + + public ClarionCall() { + super(ID, 1, CardType.ATTACK, CardRarity.COMMON, CardTarget.ENEMY); + baseDamage = 8; + loadJokeCardImage(this, makeBetaCardPath(ClarionCall.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + dmg(m, AbstractGameAction.AttackEffect.BLUNT_LIGHT); + applyToSelf(new VoidRefundPower(p, 1)); + } + + @Override + public void upp() { + upgradeDamage(3); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/Clutch.java b/src/main/java/awakenedOne/cards/Clutch.java new file mode 100644 index 000000000..0f72ed586 --- /dev/null +++ b/src/main/java/awakenedOne/cards/Clutch.java @@ -0,0 +1,39 @@ +package awakenedOne.cards; + +import com.badlogic.gdx.graphics.Color; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import expansioncontent.actions.DrawSpecificAction; + +import static awakenedOne.AwakenedOneMod.*; +import static awakenedOne.util.Wiz.atb; + +public class Clutch extends AbstractAwakenedCard { + public final static String ID = makeID(Clutch.class.getSimpleName()); + // intellij stuff skill, self, rare, , , , , 4, 2 + + public Clutch() { + super(ID, 1, CardType.ATTACK, CardRarity.COMMON, CardTarget.ENEMY); + baseDamage = 9; + baseMagicNumber = magicNumber = 1; + loadJokeCardImage(this, makeBetaCardPath(Clutch.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + dmg(m, AbstractGameAction.AttackEffect.FIRE); + atb(new DrawSpecificAction(magicNumber, card -> card.cost == 0)); + } + + @Override + public void triggerOnGlowCheck() { + glowColor = AbstractDungeon.player.drawPile.group.stream().noneMatch(q -> q.cost == 0) ? Color.RED : AbstractCard.BLUE_BORDER_GLOW_COLOR; + } + + public void upp() { + upgradeDamage(1); + upgradeMagicNumber(1); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/DarkEcho.java b/src/main/java/awakenedOne/cards/DarkEcho.java new file mode 100644 index 000000000..0bd09b15a --- /dev/null +++ b/src/main/java/awakenedOne/cards/DarkEcho.java @@ -0,0 +1,27 @@ +package awakenedOne.cards; + +import awakenedOne.powers.DarkEchoPower; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import static awakenedOne.AwakenedOneMod.*; +import static awakenedOne.util.Wiz.applyToSelf; + +public class DarkEcho extends AbstractAwakenedCard { + public final static String ID = makeID(DarkEcho.class.getSimpleName()); + // intellij stuff attack, all_enemy, rare, 18, 4, , , 2, 1 + + public DarkEcho() { + super(ID, 2, CardType.POWER, CardRarity.UNCOMMON, CardTarget.SELF); + baseDamage = 4; + loadJokeCardImage(this, makeBetaCardPath(DarkEcho.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + applyToSelf(new DarkEchoPower(1)); + } + + public void upp() { + upgradeBaseCost(1); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/DarknessFalls.java b/src/main/java/awakenedOne/cards/DarknessFalls.java new file mode 100644 index 000000000..3a6838fd8 --- /dev/null +++ b/src/main/java/awakenedOne/cards/DarknessFalls.java @@ -0,0 +1,34 @@ +package awakenedOne.cards; + +import awakenedOne.powers.CursedStrength; +import awakenedOne.powers.DarknessFallsPower; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import static awakenedOne.AwakenedOneMod.*; + +public class DarknessFalls extends AbstractAwakenedCard { + public final static String ID = makeID(DarknessFalls.class.getSimpleName()); + + // intellij stuff power, self, rare, , , , , , + + public DarknessFalls() { + super(ID, 1, CardType.POWER, CardRarity.UNCOMMON, CardTarget.SELF); + this.baseMagicNumber = 3; + this.magicNumber = this.baseMagicNumber; + baseSecondMagic = secondMagic = 1; + loadJokeCardImage(this, makeBetaCardPath(DarknessFalls.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new DarknessFallsPower(p, magicNumber))); + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new CursedStrength(p, secondMagic))); + } + + @Override + public void upp() { + upgradeMagicNumber(1); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/DeathCoil.java b/src/main/java/awakenedOne/cards/DeathCoil.java new file mode 100644 index 000000000..4d19c9b12 --- /dev/null +++ b/src/main/java/awakenedOne/cards/DeathCoil.java @@ -0,0 +1,39 @@ +package awakenedOne.cards; + +import awakenedOne.powers.ManaburnPower; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.vfx.combat.HemokinesisEffect; +import hermit.powers.Drained; + +import static awakenedOne.AwakenedOneMod.*; + +public class DeathCoil extends AbstractAwakenedCard { + public final static String ID = makeID(DeathCoil.class.getSimpleName()); + // intellij stuff attack, enemy, 13, 6, , , , + + public DeathCoil() { + super(ID, 0, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); + baseDamage = 10; + baseMagicNumber = magicNumber = 4; + loadJokeCardImage(this, makeBetaCardPath(DeathCoil.class.getSimpleName() + ".png")); + } + + + public void use(AbstractPlayer p, AbstractMonster m) { + if (m != null) { + this.addToTop(new VFXAction(new HemokinesisEffect(p.hb.cX, p.hb.cY, m.hb.cX, m.hb.cY), 0.5F)); + } + dmg(m, AbstractGameAction.AttackEffect.SLASH_HEAVY); + this.addToBot(new ApplyPowerAction(m, p, new ManaburnPower(m, this.magicNumber), this.magicNumber)); + this.addToBot(new ApplyPowerAction(p, p, new Drained(p, p, 1), 1)); + } + + public void upp() { + upgradeMagicNumber(2); + upgradeDamage(4); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/Deathwish.java b/src/main/java/awakenedOne/cards/Deathwish.java new file mode 100644 index 000000000..64c2a6063 --- /dev/null +++ b/src/main/java/awakenedOne/cards/Deathwish.java @@ -0,0 +1,40 @@ +package awakenedOne.cards; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.actions.ConjureAction; +import basemod.patches.com.megacrit.cardcrawl.cards.AbstractCard.MultiCardPreview; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import downfall.util.CardIgnore; + +import static awakenedOne.AwakenedOneMod.*; +import static awakenedOne.ui.OrbitingSpells.spellCards; +import static awakenedOne.util.Wiz.atb; + +@Deprecated +@CardIgnore +public class Deathwish extends AbstractAwakenedCard { + public final static String ID = makeID(Deathwish.class.getSimpleName()); + // intellij stuff attack, all_enemy, common, 7, 3, , , , + + public Deathwish() { + super(ID, 1, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); + AbstractCard c = new DeathCoil(); + c.upgrade(); + MultiCardPreview.add(this, new DeathCoil(), c); + this.exhaust = true; + this.tags.add(AwakenedOneMod.DELVE); + loadJokeCardImage(this, makeBetaCardPath(Deathwish.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + AbstractCard card = new DeathCoil(); + spellCards.add(card); + atb(new ConjureAction(false, false, true, new DeathCoil())); + } + + public void upp() { + isInnate = true; + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/Defend.java b/src/main/java/awakenedOne/cards/Defend.java new file mode 100644 index 000000000..40c6cf07a --- /dev/null +++ b/src/main/java/awakenedOne/cards/Defend.java @@ -0,0 +1,26 @@ +package awakenedOne.cards; + +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import static awakenedOne.AwakenedOneMod.*; + +public class Defend extends AbstractAwakenedCard { + public final static String ID = makeID(Defend.class.getSimpleName()); + // intellij stuff skill, self, basic, , , 5, 3, , + + public Defend() { + super(ID, 1, CardType.SKILL, CardRarity.BASIC, CardTarget.SELF); + baseBlock = 5; + tags.add(CardTags.STARTER_DEFEND); + loadJokeCardImage(this, makeBetaCardPath(Defend.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + blck(); + } + + public void upp() { + upgradeBlock(3); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/Dejection.java b/src/main/java/awakenedOne/cards/Dejection.java new file mode 100644 index 000000000..13f6d3751 --- /dev/null +++ b/src/main/java/awakenedOne/cards/Dejection.java @@ -0,0 +1,49 @@ +package awakenedOne.cards; + +import awakenedOne.AwakenedOneMod; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.DrawCardAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.localization.UIStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import hermit.actions.HandSelectAction; +import hermit.util.Wiz; + +import static awakenedOne.AwakenedOneMod.loadJokeCardImage; +import static awakenedOne.AwakenedOneMod.makeBetaCardPath; + +public class Dejection extends AbstractAwakenedCard { + public final static String ID = AwakenedOneMod.makeID(Dejection.class.getSimpleName()); + // intellij stuff attack, enemy, basic, 6, 3, , , , + + public static UIStrings uiStrings = CardCrawlGame.languagePack.getUIString("ExhaustAction"); + + public Dejection() { + super(ID, 1, CardType.ATTACK, CardRarity.COMMON, CardTarget.ENEMY); + baseDamage = 7; + this.baseMagicNumber = this.magicNumber = 2; + loadJokeCardImage(this, makeBetaCardPath(Dejection.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + dmg(m, AbstractGameAction.AttackEffect.SLASH_HORIZONTAL); + Wiz.atb(new HandSelectAction(1, (c) -> true, list -> { + for (AbstractCard c : list) { + Wiz.p().hand.moveToExhaustPile(c); + if (c.type == CardType.POWER) { + Wiz.atb(new DrawCardAction(magicNumber)); + } + + } + list.clear(); + }, null, uiStrings.TEXT[0], false, false, false)); + } + + + @Override + public void upp() { + upgradeDamage(3); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/DemonGlyph.java b/src/main/java/awakenedOne/cards/DemonGlyph.java new file mode 100644 index 000000000..73e899b64 --- /dev/null +++ b/src/main/java/awakenedOne/cards/DemonGlyph.java @@ -0,0 +1,56 @@ +package awakenedOne.cards; + +import awakenedOne.powers.DemonGlyphPower; +import awakenedOne.util.Wiz; +import com.badlogic.gdx.graphics.Color; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.DexterityPower; +import com.megacrit.cardcrawl.powers.StrengthPower; +import com.megacrit.cardcrawl.vfx.combat.FastingEffect; +import com.megacrit.cardcrawl.vfx.combat.InflameEffect; + +import static awakenedOne.AwakenedOneMod.*; +import static awakenedOne.util.Wiz.applyToSelf; + +public class DemonGlyph extends AbstractAwakenedCard { + public final static String ID = makeID(DemonGlyph.class.getSimpleName()); + // intellij stuff skill, self, basic, , , 5, 3, , + + public DemonGlyph() { + super(ID, 0, CardType.POWER, CardRarity.RARE, CardTarget.SELF); + baseMagicNumber = magicNumber = 1; + baseSecondMagic = secondMagic = 2; + loadJokeCardImage(this, makeBetaCardPath(DemonGlyph.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + this.addToBot(new ApplyPowerAction(p, p, new StrengthPower(p, this.magicNumber), this.magicNumber)); + this.addToBot(new ApplyPowerAction(p, p, new DexterityPower(p, this.magicNumber), this.magicNumber)); + + if (p != null) { + this.addToBot(new VFXAction(new FastingEffect(p.hb.cX, p.hb.cY, Color.BLUE))); + } + + if (Wiz.isAwakened()) { + this.addToBot(new VFXAction(p, new InflameEffect(p), 1.0F)); + this.addToBot(new ApplyPowerAction(p, p, new StrengthPower(p, secondMagic), secondMagic)); + this.addToBot(new ApplyPowerAction(p, p, new DexterityPower(p, secondMagic), secondMagic)); + } else { + applyToSelf(new DemonGlyphPower(secondMagic)); + } + } + + + public void triggerOnGlowCheck() { + this.glowColor = (Wiz.isAwakened()) ? GOLD_BORDER_GLOW_COLOR : BLUE_BORDER_GLOW_COLOR; + } + + public void upp() { + //upgradeMagicNumber(1); + upgradeSecondMagic(1); + } + +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/DesperatePrayer.java b/src/main/java/awakenedOne/cards/DesperatePrayer.java new file mode 100644 index 000000000..bc11625e0 --- /dev/null +++ b/src/main/java/awakenedOne/cards/DesperatePrayer.java @@ -0,0 +1,40 @@ +package awakenedOne.cards; + +import com.megacrit.cardcrawl.actions.common.MakeTempCardInHandAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import static awakenedOne.AwakenedOneMod.*; + +public class DesperatePrayer extends AbstractAwakenedCard { + public final static String ID = makeID(DesperatePrayer.class.getSimpleName()); + // intellij stuff skill, self, basic, , , 5, 3, , + + public DesperatePrayer() { + super(ID, 3, CardType.SKILL, CardRarity.RARE, CardTarget.SELF); + loadJokeCardImage(this, makeBetaCardPath(DesperatePrayer.class.getSimpleName() + ".png")); + exhaust = true; + } + + public void use(AbstractPlayer p, AbstractMonster m) { + AbstractCard c = AbstractDungeon.returnTrulyRandomCardInCombat(CardType.ATTACK).makeCopy(); + c.setCostForTurn(0); + //if (upgraded) c.upgrade(); + this.addToBot(new MakeTempCardInHandAction(c, true)); + AbstractCard d = AbstractDungeon.returnTrulyRandomCardInCombat(CardType.SKILL).makeCopy(); + d.setCostForTurn(0); + //if (upgraded) d.upgrade(); + this.addToBot(new MakeTempCardInHandAction(d, true)); + AbstractCard e = AbstractDungeon.returnTrulyRandomCardInCombat(CardType.POWER).makeCopy(); + e.setCostForTurn(0); + //if (upgraded) e.upgrade(); + this.addToBot(new MakeTempCardInHandAction(e, true)); + } + + public void upp() { + upgradeBaseCost(2); + + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/EclipseEmbrace.java b/src/main/java/awakenedOne/cards/EclipseEmbrace.java new file mode 100644 index 000000000..837e6c8c1 --- /dev/null +++ b/src/main/java/awakenedOne/cards/EclipseEmbrace.java @@ -0,0 +1,33 @@ +package awakenedOne.cards; + +import awakenedOne.powers.EclipseEmbracePower; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.helpers.GameDictionary; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import static awakenedOne.AwakenedOneMod.*; +import static awakenedOne.util.Wiz.applyToSelf; + +public class EclipseEmbrace extends AbstractAwakenedCard { + public final static String ID = makeID(EclipseEmbrace.class.getSimpleName()); + // intellij stuff power, self, rare, , , , , , + + public EclipseEmbrace() { + super(ID, 3, CardType.POWER, CardRarity.RARE, CardTarget.SELF); + loadJokeCardImage(this, makeBetaCardPath(EclipseEmbrace.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + applyToSelf(new EclipseEmbracePower(1)); + } + + @Override + public void initializeDescription() { + super.initializeDescription(); + this.keywords.add(GameDictionary.VOID.NAMES[0].toLowerCase()); + } + + public void upp() { + upgradeBaseCost(2); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/Ensorcelate.java b/src/main/java/awakenedOne/cards/Ensorcelate.java new file mode 100644 index 000000000..f68ffc289 --- /dev/null +++ b/src/main/java/awakenedOne/cards/Ensorcelate.java @@ -0,0 +1,30 @@ +package awakenedOne.cards; + +import awakenedOne.powers.EnsorcelatePower; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import static awakenedOne.AwakenedOneMod.*; +import static awakenedOne.util.Wiz.applyToSelf; + +public class Ensorcelate extends AbstractAwakenedCard { + public final static String ID = makeID(Ensorcelate.class.getSimpleName()); + // intellij stuff attack, enemy, basic, 6, 3, , , , + + public Ensorcelate() { + super(ID, 2, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); + baseBlock = 8; + //baseMagicNumber = magicNumber = 2; + //this.tags.add(AwakenedOneMod.DELVE); + loadJokeCardImage(this, makeBetaCardPath(Ensorcelate.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + blck(); + applyToSelf(new EnsorcelatePower(1)); + } + + public void upp() { + upgradeBlock(3); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/Envision.java b/src/main/java/awakenedOne/cards/Envision.java new file mode 100644 index 000000000..59dd1d4a2 --- /dev/null +++ b/src/main/java/awakenedOne/cards/Envision.java @@ -0,0 +1,30 @@ +package awakenedOne.cards; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.actions.ConjureAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import static awakenedOne.AwakenedOneMod.*; +import static awakenedOne.util.Wiz.atb; + +public class Envision extends AbstractAwakenedCard { + public final static String ID = makeID(Envision.class.getSimpleName()); + // intellij stuff attack, enemy, basic, 6, 3, , , , + + public Envision() { + super(ID, 0, CardType.SKILL, CardRarity.COMMON, CardTarget.SELF); + baseBlock = 4; + this.tags.add(AwakenedOneMod.DELVE); + loadJokeCardImage(this, makeBetaCardPath(Envision.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + blck(); + atb(new ConjureAction(false, true)); + } + + public void upp() { + upgradeBlock(3); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/Extension.java b/src/main/java/awakenedOne/cards/Extension.java new file mode 100644 index 000000000..50dcd8155 --- /dev/null +++ b/src/main/java/awakenedOne/cards/Extension.java @@ -0,0 +1,41 @@ +package awakenedOne.cards; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import static awakenedOne.AwakenedOneMod.*; + +public class Extension extends AbstractAwakenedCard { + public final static String ID = makeID(Extension.class.getSimpleName()); + // intellij stuff attack, enemy, common, 8, 3, , , 3, 1 + + public Extension() { + super(ID, 0, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); + baseDamage = 3; + loadJokeCardImage(this, makeBetaCardPath(Extension.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + dmg(m, AbstractGameAction.AttackEffect.FIRE); + } + + @Override + public void triggerOnCardPlayed(AbstractCard cardPlayed) { + if (cardPlayed.type == CardType.POWER && AbstractDungeon.player.discardPile.contains(this)) { + AbstractDungeon.actionManager.addToBottom(new AbstractGameAction() { + @Override + public void update() { + isDone = true; + AbstractDungeon.player.discardPile.moveToHand(Extension.this); + } + }); + } + } + + public void upp() { + upgradeDamage(2); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/FeatherVeil.java b/src/main/java/awakenedOne/cards/FeatherVeil.java new file mode 100644 index 000000000..fa297fab4 --- /dev/null +++ b/src/main/java/awakenedOne/cards/FeatherVeil.java @@ -0,0 +1,35 @@ +package awakenedOne.cards; + +import awakenedOne.AwakenedOneMod; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.StrengthPower; + +import static awakenedOne.AwakenedOneMod.loadJokeCardImage; +import static awakenedOne.AwakenedOneMod.makeBetaCardPath; + +public class FeatherVeil extends AbstractAwakenedCard { + public final static String ID = AwakenedOneMod.makeID(FeatherVeil.class.getSimpleName()); + // intellij stuff skill, self, basic, , , 5, 3, , + + public FeatherVeil() { + super(ID, 0, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); + baseBlock = 12; + this.baseMagicNumber = 1; + this.magicNumber = this.baseMagicNumber; + loadJokeCardImage(this, makeBetaCardPath(FeatherVeil.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + blck(); + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, new StrengthPower(p, -magicNumber), -magicNumber)); + } + + + @Override + public void upp() { + upgradeBlock(4); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/FeatherWhirl.java b/src/main/java/awakenedOne/cards/FeatherWhirl.java new file mode 100644 index 000000000..468b7b48b --- /dev/null +++ b/src/main/java/awakenedOne/cards/FeatherWhirl.java @@ -0,0 +1,35 @@ +package awakenedOne.cards; + +import awakenedOne.actions.EasyXCostAction; +import awakenedOne.cards.tokens.PlumeJab; +import awakenedOne.util.Wiz; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import static awakenedOne.AwakenedOneMod.*; +import static awakenedOne.util.Wiz.att; + +public class FeatherWhirl extends AbstractAwakenedCard { + public final static String ID = makeID(FeatherWhirl.class.getSimpleName()); + // intellij stuff attack, enemy, common, 8, 3, , , 3, 1 + + public FeatherWhirl() { + super(ID, -1, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); + this.exhaust = true; + baseMagicNumber = magicNumber = 0; + cardsToPreview = new PlumeJab(); + loadJokeCardImage(this, makeBetaCardPath(FeatherWhirl.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + att(new EasyXCostAction(this, (effect, params) -> { + Wiz.makeInHand(new PlumeJab(), effect + params[0]); + return true; + }, magicNumber)); + } + + + public void upp() { + upgradeMagicNumber(1); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/FlareShot.java b/src/main/java/awakenedOne/cards/FlareShot.java new file mode 100644 index 000000000..f3a47e6b7 --- /dev/null +++ b/src/main/java/awakenedOne/cards/FlareShot.java @@ -0,0 +1,35 @@ +package awakenedOne.cards; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.powers.FlarePower; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import static awakenedOne.AwakenedOneMod.loadJokeCardImage; +import static awakenedOne.AwakenedOneMod.makeBetaCardPath; +import static awakenedOne.util.Wiz.applyToSelf; + +public class FlareShot extends AbstractAwakenedCard { + public final static String ID = AwakenedOneMod.makeID(FlareShot.class.getSimpleName()); + // intellij stuff attack, enemy, basic, 6, 3, , , , + + public FlareShot() { + super(ID, 1, CardType.ATTACK, CardRarity.COMMON, CardTarget.ENEMY); + baseDamage = 6; + this.baseMagicNumber = 2; + this.magicNumber = this.baseMagicNumber; + loadJokeCardImage(this, makeBetaCardPath(FlareShot.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + dmg(m, AbstractGameAction.AttackEffect.BLUNT_LIGHT); + applyToSelf(new FlarePower(this.magicNumber)); + } + + @Override + public void upp() { + upgradeDamage(2); + upgradeMagicNumber(1); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/FourthDimension.java b/src/main/java/awakenedOne/cards/FourthDimension.java new file mode 100644 index 000000000..35dc085d8 --- /dev/null +++ b/src/main/java/awakenedOne/cards/FourthDimension.java @@ -0,0 +1,40 @@ +package awakenedOne.cards; + +import com.evacipated.cardcrawl.mod.stslib.actions.common.SelectCardsInHandAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import static awakenedOne.AwakenedOneMod.*; +import static awakenedOne.ui.OrbitingSpells.spellCards; +import static awakenedOne.util.Wiz.atb; + +public class FourthDimension extends AbstractAwakenedCard { + public final static String ID = makeID(FourthDimension.class.getSimpleName()); + // intellij stuff skill, enemy, uncommon, , , , , 1, 1 + + public FourthDimension() { + super(ID, 1, CardType.SKILL, CardRarity.RARE, CardTarget.SELF); + this.exhaust = true; + baseMagicNumber = magicNumber = 3; + this.tags.add(CardTags.HEALING); + loadJokeCardImage(this, makeBetaCardPath(FourthDimension.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + atb(new SelectCardsInHandAction(1, FourthDimension.class.getSimpleName(), (cards) -> { + for (AbstractCard q : cards) { + AbstractCard q2 = q.makeStatEquivalentCopy(); + //q2.updateCost(-99); + for (int i = 0; i < magicNumber; i++) { + AbstractCard card = q2.makeStatEquivalentCopy(); + spellCards.add(card); + } + } + })); + } + + public void upp() { + upgradeBaseCost(0); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/Gather.java b/src/main/java/awakenedOne/cards/Gather.java new file mode 100644 index 000000000..299277d72 --- /dev/null +++ b/src/main/java/awakenedOne/cards/Gather.java @@ -0,0 +1,46 @@ +package awakenedOne.cards; + +import awakenedOne.AwakenedOneMod; +import com.megacrit.cardcrawl.actions.common.BetterDiscardPileToHandAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import static awakenedOne.AwakenedOneMod.*; +import static awakenedOne.util.Wiz.atb; + +public class Gather extends AbstractAwakenedCard { + public final static String ID = makeID(Gather.class.getSimpleName()); + // intellij stuff skill, enemy, uncommon, , , , , 1, 1 + + public Gather() { + super(ID, 1, CardType.SKILL, CardRarity.COMMON, CardTarget.SELF); + baseBlock = 4; + magicNumber = baseMagicNumber = 2; + this.tags.add(AwakenedOneMod.CHANT); + loadJokeCardImage(this, makeBetaCardPath("Victuals.png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + blck(); + if (isTrig_chant()) { + chant(); + } + } + + @Override + public void chant() { + //addToBot(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new PlatedArmorPower(AbstractDungeon.player, magicNumber), magicNumber)); + atb(new BetterDiscardPileToHandAction(1)); + checkOnChant(); + } + + + public void triggerOnGlowCheck() { + this.glowColor = isChantActiveGlow(this) ? GOLD_BORDER_GLOW_COLOR : BLUE_BORDER_GLOW_COLOR; + } + + @Override + public void upp() { + upgradeBlock(3); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/Gloomguard.java b/src/main/java/awakenedOne/cards/Gloomguard.java new file mode 100644 index 000000000..e49d4ad6e --- /dev/null +++ b/src/main/java/awakenedOne/cards/Gloomguard.java @@ -0,0 +1,30 @@ +package awakenedOne.cards; + +import awakenedOne.powers.ManaburnPower; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import static awakenedOne.AwakenedOneMod.*; + +public class Gloomguard extends AbstractAwakenedCard { + public final static String ID = makeID(Gloomguard.class.getSimpleName()); + // intellij stuff power, self, rare, , , , , , + + public Gloomguard() { + super(ID, 1, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.ENEMY); + baseBlock = 9; + baseMagicNumber = magicNumber = 3; + loadJokeCardImage(this, makeBetaCardPath(Gloomguard.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + blck(); + this.addToBot(new ApplyPowerAction(m, p, new ManaburnPower(m, this.magicNumber), this.magicNumber)); + } + + public void upp() { + upgradeBlock(3); + upgradeMagicNumber(1); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/Grimoire.java b/src/main/java/awakenedOne/cards/Grimoire.java new file mode 100644 index 000000000..2c9c56a54 --- /dev/null +++ b/src/main/java/awakenedOne/cards/Grimoire.java @@ -0,0 +1,43 @@ +package awakenedOne.cards; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.ModifyDamageAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import static awakenedOne.AwakenedOneMod.*; +import static awakenedOne.ui.OrbitingSpells.spellCards; +import static awakenedOne.util.Wiz.att; + +public class Grimoire extends AbstractAwakenedCard { + public final static String ID = makeID(Grimoire.class.getSimpleName()); + // intellij stuff attack, enemy, uncommon, 9, 1, , , 3, 1 + + public Grimoire() { + super(ID, 1, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); + this.selfRetain = true; + baseDamage = 7; + baseMagicNumber = magicNumber = 7; + this.exhaust = true; + loadJokeCardImage(this, makeBetaCardPath(Grimoire.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + dmg(m, AbstractGameAction.AttackEffect.FIRE); + att(new ModifyDamageAction(this.uuid, magicNumber)); + spellCards.add(this); + // atb(new AddSpellCardAction(this)); +// atb(new AbstractGameAction() { +// @Override +// public void update() { +// isDone = true; +// spellCards.add(q); +// } +// }); + } + + public void upp() { + upgradeDamage(2); + upgradeMagicNumber(2); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/Hatchery.java b/src/main/java/awakenedOne/cards/Hatchery.java new file mode 100644 index 000000000..3b59f531b --- /dev/null +++ b/src/main/java/awakenedOne/cards/Hatchery.java @@ -0,0 +1,39 @@ +//package awakenedOne.cards; +// +//import awakenedOne.AwakenedOneMod; +//import awakenedOne.util.OnConjureSubscriber; +//import com.megacrit.cardcrawl.actions.AbstractGameAction; +//import com.megacrit.cardcrawl.actions.utility.DiscardToHandAction; +//import com.megacrit.cardcrawl.characters.AbstractPlayer; +//import com.megacrit.cardcrawl.core.CardCrawlGame; +//import com.megacrit.cardcrawl.monsters.AbstractMonster; +// +//import static awakenedOne.AwakenedOneMod.loadJokeCardImage; +//import static awakenedOne.AwakenedOneMod.makeBetaCardPath; +// +//public class Hatchery extends AbstractAwakenedCard implements OnConjureSubscriber { +// public final static String ID = AwakenedOneMod.makeID(Hatchery.class.getSimpleName()); +// // intellij stuff attack, enemy, basic, 6, 3, , , , +// +// public Hatchery() { +// super(ID, 0, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); +// baseDamage = 4; +// this.tags.add(AwakenedOneMod.DELVE); +// loadJokeCardImage(this, makeBetaCardPath(Hatchery.class.getSimpleName() + ".png")); +// } +// +// public void use(AbstractPlayer p, AbstractMonster m) { +// CardCrawlGame.sound.playA("VO_CULTIST_1A", .3f); +// dmg(m, AbstractGameAction.AttackEffect.BLUNT_LIGHT); +// } +// +// @Override +// public void OnConjure() { +// this.addToBot(new DiscardToHandAction(this)); +// } +// +// @Override +// public void upp() { +// upgradeDamage(2); +// } +//} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/Hymn.java b/src/main/java/awakenedOne/cards/Hymn.java new file mode 100644 index 000000000..a9c8893e0 --- /dev/null +++ b/src/main/java/awakenedOne/cards/Hymn.java @@ -0,0 +1,40 @@ +package awakenedOne.cards; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.cards.tokens.Ceremony; +import awakenedOne.util.Wiz; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.MakeTempCardInHandAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import hermit.powers.Drained; + +import static awakenedOne.AwakenedOneMod.loadJokeCardImage; +import static awakenedOne.AwakenedOneMod.makeBetaCardPath; + + +public class Hymn extends AbstractAwakenedCard { + public final static String ID = AwakenedOneMod.makeID(Hymn.class.getSimpleName()); + + public Hymn() { + super(ID, 0, CardType.SKILL, CardRarity.BASIC, CardTarget.SELF); + loadJokeCardImage(this, makeBetaCardPath(Hymn.class.getSimpleName() + ".png")); + baseBlock = 4; + this.cardsToPreview = new Ceremony(); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + blck(); + AbstractCard c = new Ceremony(); + if (upgraded) c.upgrade(); + Wiz.atb(new MakeTempCardInHandAction(c, 1)); + this.addToBot(new ApplyPowerAction(p, p, new Drained(p, p, 1), 1)); + } + + @Override + public void upp() { + upgradeBlock(1); + cardsToPreview.upgrade(); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/Initiation.java b/src/main/java/awakenedOne/cards/Initiation.java new file mode 100644 index 000000000..73eee9369 --- /dev/null +++ b/src/main/java/awakenedOne/cards/Initiation.java @@ -0,0 +1,41 @@ +package awakenedOne.cards; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.cards.tokens.Ceremony; +import awakenedOne.util.Wiz; +import com.megacrit.cardcrawl.actions.common.MakeTempCardInHandAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import static awakenedOne.AwakenedOneMod.loadJokeCardImage; +import static awakenedOne.AwakenedOneMod.makeBetaCardPath; + +public class Initiation extends AbstractAwakenedCard { + public final static String ID = AwakenedOneMod.makeID(Initiation.class.getSimpleName()); + // intellij stuff skill, self, basic, , , 5, 3, , + + public Initiation() { + super(ID, 2, CardType.SKILL, CardRarity.COMMON, CardTarget.SELF); + baseBlock = 11; + this.cardsToPreview = new Ceremony(); + this.tags.add(AwakenedOneMod.CHANT); + loadJokeCardImage(this, makeBetaCardPath(Initiation.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + blck(); + AbstractCard c = new Ceremony(); + if (upgraded) { + c.upgrade(); + } + Wiz.atb(new MakeTempCardInHandAction(c, 1)); + } + + + @Override + public void upp() { + cardsToPreview.upgrade(); + upgradeBlock(3); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/Intensify.java b/src/main/java/awakenedOne/cards/Intensify.java new file mode 100644 index 000000000..94675c8ad --- /dev/null +++ b/src/main/java/awakenedOne/cards/Intensify.java @@ -0,0 +1,33 @@ +package awakenedOne.cards; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.actions.ConjureAction; +import awakenedOne.powers.IntensifyDebuffPower; +import awakenedOne.powers.IntensifyPower; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import static awakenedOne.AwakenedOneMod.*; +import static awakenedOne.util.Wiz.applyToSelf; +import static awakenedOne.util.Wiz.att; + +public class Intensify extends AbstractAwakenedCard { + public final static String ID = makeID(Intensify.class.getSimpleName()); + // intellij stuff skill, self, common, , , 10, 4, , + + public Intensify() { + super(ID, 1, CardType.SKILL, CardRarity.RARE, CardTarget.SELF); + this.tags.add(AwakenedOneMod.DELVE); + loadJokeCardImage(this, makeBetaCardPath("Intensify.png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + att(new ConjureAction(false)); + applyToSelf(new IntensifyPower(1)); + applyToSelf(new IntensifyDebuffPower(1)); + } + + public void upp() { + this.selfRetain = true; + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/KnifesEdge.java b/src/main/java/awakenedOne/cards/KnifesEdge.java new file mode 100644 index 000000000..e54278adb --- /dev/null +++ b/src/main/java/awakenedOne/cards/KnifesEdge.java @@ -0,0 +1,38 @@ +package awakenedOne.cards; + +import com.megacrit.cardcrawl.actions.common.MakeTempCardInDiscardAction; +import com.megacrit.cardcrawl.cards.status.VoidCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.helpers.GameDictionary; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.StrengthPower; + +import static awakenedOne.AwakenedOneMod.*; +import static awakenedOne.util.Wiz.applyToSelf; + +public class KnifesEdge extends AbstractAwakenedCard { + public final static String ID = makeID(KnifesEdge.class.getSimpleName()); + // intellij stuff skill, enemy, uncommon, , , , , 1, 1 + + public KnifesEdge() { + super(ID, 0, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); + baseMagicNumber = magicNumber = 2; + baseSecondMagic = secondMagic = 2; + loadJokeCardImage(this, makeBetaCardPath(KnifesEdge.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + addToBot(new MakeTempCardInDiscardAction(new VoidCard(), magicNumber)); + applyToSelf(new StrengthPower(p, secondMagic)); + } + + @Override + public void initializeDescription() { + super.initializeDescription(); + this.keywords.add(GameDictionary.VOID.NAMES[0].toLowerCase()); + } + + public void upp() { + upgradeSecondMagic(1); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/MagicStrike.java b/src/main/java/awakenedOne/cards/MagicStrike.java new file mode 100644 index 000000000..a520f8340 --- /dev/null +++ b/src/main/java/awakenedOne/cards/MagicStrike.java @@ -0,0 +1,55 @@ +package awakenedOne.cards; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.MakeTempCardInDiscardAction; +import com.megacrit.cardcrawl.cards.status.VoidCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.helpers.GameDictionary; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import static awakenedOne.AwakenedOneMod.*; +import static awakenedOne.util.Wiz.atb; + +public class MagicStrike extends AbstractAwakenedCard { + public final static String ID = makeID(MagicStrike.class.getSimpleName()); + // intellij stuff attack, enemy, common, 8, 3, , , 3, 1 + + public MagicStrike() { + super(ID, 1, CardType.ATTACK, CardRarity.COMMON, CardTarget.ENEMY); + baseDamage = 12; + tags.add(CardTags.STRIKE); + // baseSecondMagic = secondMagic = 1; + loadJokeCardImage(this, makeBetaCardPath(MagicStrike.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + dmg(m, AbstractGameAction.AttackEffect.FIRE); + atb(new MakeTempCardInDiscardAction(new VoidCard(), 1)); + //HexCurse(magicNumber, m, p); + //this.addToBot(new ForTheHexAction(this.magicNumber, m)); + } + +// public void triggerOnGlowCheck() { +// this.glowColor = AbstractCard.BLUE_BORDER_GLOW_COLOR.cpy(); +// Iterator var1 = AbstractDungeon.getCurrRoom().monsters.monsters.iterator(); +// +// while(var1.hasNext()) { +// AbstractMonster m = (AbstractMonster)var1.next(); +// if (!m.isDeadOrEscaped() && m.getIntentBaseDmg() == 0) { +// this.glowColor = AbstractCard.GOLD_BORDER_GLOW_COLOR.cpy(); +// break; +// } +// } +// +// } + + @Override + public void initializeDescription() { + super.initializeDescription(); + this.keywords.add(GameDictionary.VOID.NAMES[0].toLowerCase()); + } + + public void upp() { + upgradeDamage(5); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/Manastorm.java b/src/main/java/awakenedOne/cards/Manastorm.java new file mode 100644 index 000000000..6770285d7 --- /dev/null +++ b/src/main/java/awakenedOne/cards/Manastorm.java @@ -0,0 +1,37 @@ +package awakenedOne.cards; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.actions.ConjureAction; +import com.megacrit.cardcrawl.actions.common.DamageAllEnemiesAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import hermit.patches.EnumPatch; + +import static awakenedOne.AwakenedOneMod.loadJokeCardImage; +import static awakenedOne.AwakenedOneMod.makeBetaCardPath; +import static awakenedOne.util.Wiz.atb; + +public class Manastorm extends AbstractAwakenedCard { + + public final static String ID = AwakenedOneMod.makeID(Manastorm.class.getSimpleName()); + // intellij stuff attack, enemy, basic, 6, 3, , , , + + public Manastorm() { + super(ID, 2, CardType.ATTACK, CardRarity.RARE, CardTarget.ALL_ENEMY); + baseDamage = 14; + this.tags.add(AwakenedOneMod.DELVE); + this.isMultiDamage = true; + loadJokeCardImage(this, makeBetaCardPath(Manastorm.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + this.addToBot(new DamageAllEnemiesAction(p, this.multiDamage, this.damageTypeForTurn, EnumPatch.HERMIT_GHOSTFIRE)); + atb(new ConjureAction(false)); + atb(new ConjureAction(false)); + } + + @Override + public void upp() { + upgradeDamage(4); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/MiddenHeap.java b/src/main/java/awakenedOne/cards/MiddenHeap.java new file mode 100644 index 000000000..5f75717c8 --- /dev/null +++ b/src/main/java/awakenedOne/cards/MiddenHeap.java @@ -0,0 +1,57 @@ +package awakenedOne.cards; + +import awakenedOne.AwakenedOneMod; +import basemod.BaseMod; +import com.evacipated.cardcrawl.mod.stslib.actions.common.MultiGroupSelectAction; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.cards.CardGroup; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import java.util.Collections; + +import static awakenedOne.AwakenedOneMod.loadJokeCardImage; +import static awakenedOne.AwakenedOneMod.makeBetaCardPath; +import static awakenedOne.util.Wiz.atb; +import static awakenedOne.util.Wiz.att; + +public class MiddenHeap extends AbstractAwakenedCard { + public final static String ID = AwakenedOneMod.makeID(MiddenHeap.class.getSimpleName()); + // intellij stuff skill, self, basic, , , 5, 3, , + + public MiddenHeap() { + super(ID, 0, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); + baseBlock = 3; + this.baseMagicNumber = 1; + this.magicNumber = this.baseMagicNumber; + loadJokeCardImage(this, makeBetaCardPath(MiddenHeap.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + blck(); + atb(new MultiGroupSelectAction( + cardStrings.EXTENDED_DESCRIPTION[magicNumber == 1 ? 0 : 1], + (cards, groups) -> { + Collections.reverse(cards); + cards.forEach(c -> att(new AbstractGameAction() { + public void update() { + isDone = true; + if (p.hand.size() >= BaseMod.MAX_HAND_SIZE) { + if (groups.get(c) == p.drawPile) + p.drawPile.moveToDiscardPile(c); + p.createHandIsFullDialog(); + } else + p.hand.moveToHand(c, groups.get(c)); + } + })); + }, + magicNumber, false, c -> c.type == CardType.STATUS || c.type == CardType.CURSE, CardGroup.CardGroupType.DRAW_PILE, CardGroup.CardGroupType.DISCARD_PILE + )); + } + + @Override + public void upp() { + upgradeBlock(1); + upgradeMagicNumber(1); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/MirePit.java b/src/main/java/awakenedOne/cards/MirePit.java new file mode 100644 index 000000000..41098976d --- /dev/null +++ b/src/main/java/awakenedOne/cards/MirePit.java @@ -0,0 +1,62 @@ +package awakenedOne.cards; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.utility.SFXAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.GainStrengthPower; +import com.megacrit.cardcrawl.powers.StrengthPower; +import com.megacrit.cardcrawl.vfx.combat.ShockWaveEffect; +import hermit.powers.Drained; + +import java.util.Iterator; + +import static awakenedOne.AwakenedOneMod.*; + +public class MirePit extends AbstractAwakenedCard { + public final static String ID = makeID(MirePit.class.getSimpleName()); + // intellij stuff skill, enemy, uncommon, , , , , 1, 1 + + public MirePit() { + super(ID, 0, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.ALL_ENEMY); + baseMagicNumber = magicNumber = 6; + this.exhaust = true; + loadJokeCardImage(this, makeBetaCardPath(MirePit.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + this.addToBot(new SFXAction("VO_AWAKENEDONE_3")); + + if (Settings.FAST_MODE) { + this.addToBot(new VFXAction(p, new ShockWaveEffect(p.hb.cX, p.hb.cY, Settings.GREEN_TEXT_COLOR, ShockWaveEffect.ShockWaveType.CHAOTIC), 0.3F)); + } else { + this.addToBot(new VFXAction(p, new ShockWaveEffect(p.hb.cX, p.hb.cY, Settings.GREEN_TEXT_COLOR, ShockWaveEffect.ShockWaveType.CHAOTIC), 1.5F)); + } + + Iterator var3 = AbstractDungeon.getCurrRoom().monsters.monsters.iterator(); + + AbstractMonster mo; + while (var3.hasNext()) { + mo = (AbstractMonster) var3.next(); + this.addToBot(new ApplyPowerAction(mo, p, new StrengthPower(mo, -this.magicNumber), -this.magicNumber, true, AbstractGameAction.AttackEffect.POISON)); + } + + var3 = AbstractDungeon.getCurrRoom().monsters.monsters.iterator(); + + while (var3.hasNext()) { + mo = (AbstractMonster) var3.next(); + if (!mo.hasPower("Artifact")) { + this.addToBot(new ApplyPowerAction(mo, p, new GainStrengthPower(mo, this.magicNumber), this.magicNumber, true, AbstractGameAction.AttackEffect.NONE)); + } + } + this.addToBot(new ApplyPowerAction(p, p, new Drained(p, p, 1), 1)); + } + + public void upp() { + upgradeMagicNumber(2); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/MoonlitVision.java b/src/main/java/awakenedOne/cards/MoonlitVision.java new file mode 100644 index 000000000..c39fea4f4 --- /dev/null +++ b/src/main/java/awakenedOne/cards/MoonlitVision.java @@ -0,0 +1,27 @@ +package awakenedOne.cards; + +import awakenedOne.powers.MoonlitVisionPower; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import static awakenedOne.AwakenedOneMod.*; +import static awakenedOne.util.Wiz.applyToSelf; + +public class MoonlitVision extends AbstractAwakenedCard { + public final static String ID = makeID(MoonlitVision.class.getSimpleName()); + // intellij stuff power, self, rare, , , , , , + + public MoonlitVision() { + super(ID, 1, CardType.POWER, CardRarity.UNCOMMON, CardTarget.SELF); + loadJokeCardImage(this, makeBetaCardPath(MoonlitVision.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + applyToSelf(new MoonlitVisionPower()); + } + + @Override + public void upp() { + isInnate = true; + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/Murder.java b/src/main/java/awakenedOne/cards/Murder.java new file mode 100644 index 000000000..ea16f9747 --- /dev/null +++ b/src/main/java/awakenedOne/cards/Murder.java @@ -0,0 +1,81 @@ +package awakenedOne.cards; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.AttackDamageRandomEnemyAction; +import com.megacrit.cardcrawl.actions.utility.SFXAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import static awakenedOne.AwakenedOneMod.*; + +public class Murder extends AbstractAwakenedCard { + public final static String ID = makeID(Murder.class.getSimpleName()); + // intellij stuff attack, enemy, common, 8, 3, , , 3, 1 + + public Murder() { + super(ID, 1, CardType.ATTACK, CardRarity.RARE, CardTarget.ALL_ENEMY); + baseDamage = 4; + this.baseMagicNumber = 4; + this.magicNumber = this.baseMagicNumber; + this.exhaust = true; + loadJokeCardImage(this, makeBetaCardPath(Murder.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + for (int i = 0; i < this.magicNumber; i++) { + AbstractDungeon.actionManager.addToBottom(new SFXAction("VO_CULTIST_1A")); + this.addToBot(new AttackDamageRandomEnemyAction(this, AbstractGameAction.AttackEffect.SLASH_HORIZONTAL)); + } + } + + // int i; +// if (Settings.FAST_MODE) { +// this.addToTop(new VFXAction(new ViolentAttackEffect(m.hb.cX, m.hb.cY, Color.RED))); +// +// for(i = 0; i < 5; ++i) { +// this.addToTop(new VFXAction(new StarBounceEffect(m.hb.cX, m.hb.cY))); +// } +// } else { +// this.addToTop(new VFXAction(new ViolentAttackEffect(m.hb.cX, m.hb.cY, Color.RED), 0.4F)); +// +// for(i = 0; i < 5; ++i) { +// this.addToTop(new VFXAction(new StarBounceEffect(m.hb.cX, m.hb.cY))); +// } +// } +// +// if (m != null) { +// this.addToBot(new VFXAction(new VerticalImpactEffect(m.hb.cX + m.hb.width / 4.0F, m.hb.cY - m.hb.height / 4.0F))); +// } + +// public void applyPowers() { +// AbstractPower strength = AbstractDungeon.player.getPower("Strength"); +// if (strength != null) { +// strength.amount *= this.magicNumber; +// } +// +// super.applyPowers(); +// if (strength != null) { +// strength.amount /= this.magicNumber; +// } +// +// } +// +// public void calculateCardDamage(AbstractMonster mo) { +// AbstractPower strength = AbstractDungeon.player.getPower("Strength"); +// if (strength != null) { +// strength.amount *= this.magicNumber; +// } +// +// super.calculateCardDamage(mo); +// if (strength != null) { +// strength.amount /= this.magicNumber; +// } +// +// } + + public void upp() { + this.exhaust = false; + //upgradeMagicNumber(1); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/MysticOrder.java b/src/main/java/awakenedOne/cards/MysticOrder.java new file mode 100644 index 000000000..7eff1dd0d --- /dev/null +++ b/src/main/java/awakenedOne/cards/MysticOrder.java @@ -0,0 +1,37 @@ +package awakenedOne.cards; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.actions.ConjureAction; +import com.megacrit.cardcrawl.actions.common.DrawCardAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import static awakenedOne.AwakenedOneMod.loadJokeCardImage; +import static awakenedOne.AwakenedOneMod.makeBetaCardPath; +import static awakenedOne.util.Wiz.atb; + +public class MysticOrder extends AbstractAwakenedCard { + public final static String ID = AwakenedOneMod.makeID(MysticOrder.class.getSimpleName()); + // intellij stuff skill, self, basic, , , 5, 3, , + + public MysticOrder() { + super(ID, 1, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); + this.baseMagicNumber = 2; + this.magicNumber = this.baseMagicNumber; + this.tags.add(AwakenedOneMod.DELVE); + loadJokeCardImage(this, makeBetaCardPath(MysticOrder.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + atb(new DrawCardAction(AbstractDungeon.player, this.magicNumber)); + atb(new ConjureAction(false)); + //this.addToBot(new ApplyPowerAction(p, p, new RageExhaustPower(p, this.magicNumber), this.magicNumber)); + } + + + @Override + public void upp() { + upgradeMagicNumber(1); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/Nihil.java b/src/main/java/awakenedOne/cards/Nihil.java new file mode 100644 index 000000000..72d44a71e --- /dev/null +++ b/src/main/java/awakenedOne/cards/Nihil.java @@ -0,0 +1,115 @@ +package awakenedOne.cards; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.powers.ManaburnPower; +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.watcher.TriggerMarksAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.vfx.AbstractGameEffect; +import com.megacrit.cardcrawl.vfx.BorderLongFlashEffect; +import com.megacrit.cardcrawl.vfx.combat.WaterDropEffect; + +import static awakenedOne.AwakenedOneMod.loadJokeCardImage; +import static awakenedOne.AwakenedOneMod.makeBetaCardPath; + + +public class Nihil extends AbstractAwakenedCard { + public final static String ID = AwakenedOneMod.makeID(Nihil.class.getSimpleName()); + // intellij stuff skill, self, basic, , , 5, 3, , + + public Nihil() { + super(ID, 2, CardType.SKILL, CardRarity.RARE, CardTarget.ENEMY); + baseMagicNumber = magicNumber = 13; + this.tags.add(AwakenedOneMod.CHANT); + loadJokeCardImage(this, makeBetaCardPath(Nihil.class.getSimpleName() + ".png")); + } + + + public void use(AbstractPlayer p, AbstractMonster m) { + this.addToBot(new ApplyPowerAction(m, p, new ManaburnPower(m, this.magicNumber), this.magicNumber)); + if (isTrig_chant()) { + if (Settings.FAST_MODE) { + this.addToBot(new VFXAction(m, new OfferingEnemyEffect(m), 0.2F)); + } else { + this.addToBot(new VFXAction(m, new OfferingEnemyEffect(m), 0.5F)); + } + this.addToBot(new TriggerMarksAction(this)); + chant(); + } + } + + @Override + public void chant() { + checkOnChant(); + } + + public void triggerOnGlowCheck() { + this.glowColor = isChantActiveGlow(this) ? GOLD_BORDER_GLOW_COLOR : BLUE_BORDER_GLOW_COLOR; + } + + @Override + public void upp() { + upgradeMagicNumber(4); + } + + private static class OfferingEnemyEffect extends AbstractGameEffect { + private int count = 0; + private float timer = 0.0F; + private final AbstractCreature target; + + public OfferingEnemyEffect(AbstractCreature target) { + this.target = target; + } + + public void update() { + this.timer -= Gdx.graphics.getDeltaTime(); + if (this.timer < 0.0F) { + this.timer += 0.3F; + switch (this.count) { + case 0: + CardCrawlGame.sound.playA("ATTACK_FIRE", -0.5F); + CardCrawlGame.sound.playA("BLOOD_SPLAT", -0.75F); + CardCrawlGame.sound.playA("ATTACK_FIRE", -0.5F); + CardCrawlGame.sound.playA("BLOOD_SPLAT", -0.75F); + CardCrawlGame.sound.playA("ATTACK_FIRE", -0.5F); + CardCrawlGame.sound.playA("BLOOD_SPLAT", -0.75F); + AbstractDungeon.effectsQueue.add(new BorderLongFlashEffect(new Color(1.0F, 0.1F, 0.1F, 1.0F))); + AbstractDungeon.effectsQueue.add(new WaterDropEffect(target.hb.cX, target.hb.cY + 250.0F * Settings.scale)); + break; + case 1: + AbstractDungeon.effectsQueue.add(new WaterDropEffect(target.hb.cX + 150.0F * Settings.scale, target.hb.cY - 80.0F * Settings.scale)); + break; + case 2: + AbstractDungeon.effectsQueue.add(new WaterDropEffect(target.hb.cX - 200.0F * Settings.scale, target.hb.cY + 50.0F * Settings.scale)); + break; + case 3: + AbstractDungeon.effectsQueue.add(new WaterDropEffect(target.hb.cX + 200.0F * Settings.scale, target.hb.cY + 50.0F * Settings.scale)); + break; + case 4: + AbstractDungeon.effectsQueue.add(new WaterDropEffect(target.hb.cX - 150.0F * Settings.scale, target.hb.cY - 80.0F * Settings.scale)); + } + + ++this.count; + if (this.count == 6) { + this.isDone = true; + } + } + + } + + public void render(SpriteBatch sb) { + } + + public void dispose() { + } + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/Peck.java b/src/main/java/awakenedOne/cards/Peck.java new file mode 100644 index 000000000..dd02e8c99 --- /dev/null +++ b/src/main/java/awakenedOne/cards/Peck.java @@ -0,0 +1,37 @@ +package awakenedOne.cards; + +import awakenedOne.AwakenedOneMod; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.DrawCardAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import static awakenedOne.AwakenedOneMod.loadJokeCardImage; +import static awakenedOne.AwakenedOneMod.makeBetaCardPath; +import static awakenedOne.util.Wiz.atb; + +public class Peck extends AbstractAwakenedCard { + public final static String ID = AwakenedOneMod.makeID(Peck.class.getSimpleName()); + // intellij stuff attack, enemy, basic, 6, 3, , , , + + public Peck() { + super(ID, 1, CardType.ATTACK, CardRarity.COMMON, CardTarget.ENEMY); + baseDamage = 1; + baseBlock = 6; + magicNumber = baseMagicNumber = 1; + loadJokeCardImage(this, makeBetaCardPath(Peck.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + blck(); + dmg(m, AbstractGameAction.AttackEffect.BLUNT_LIGHT); + atb(new DrawCardAction(AbstractDungeon.player, this.magicNumber)); + } + + @Override + public void upp() { + upgradeDamage(1); + upgradeMagicNumber(1); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/Planeswalk.java b/src/main/java/awakenedOne/cards/Planeswalk.java new file mode 100644 index 000000000..e3b611f0f --- /dev/null +++ b/src/main/java/awakenedOne/cards/Planeswalk.java @@ -0,0 +1,37 @@ +package awakenedOne.cards; + +import com.megacrit.cardcrawl.actions.common.GainEnergyAction; +import com.megacrit.cardcrawl.cards.status.VoidCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.helpers.GameDictionary; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import static awakenedOne.AwakenedOneMod.*; +import static awakenedOne.util.Wiz.atb; +import static awakenedOne.util.Wiz.shuffleIn; + +public class Planeswalk extends AbstractAwakenedCard { + public final static String ID = makeID(Planeswalk.class.getSimpleName()); + // intellij stuff attack, enemy, basic, 6, 3, , , , + + public Planeswalk() { + super(ID, 0, CardType.SKILL, CardRarity.COMMON, CardTarget.SELF); + baseMagicNumber = magicNumber = 2; + loadJokeCardImage(this, makeBetaCardPath(Planeswalk.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + atb(new GainEnergyAction(magicNumber)); + shuffleIn(new VoidCard()); + } + + @Override + public void initializeDescription() { + super.initializeDescription(); + this.keywords.add(GameDictionary.VOID.NAMES[0].toLowerCase()); + } + + public void upp() { + upgradeMagicNumber(1); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/Pluck.java b/src/main/java/awakenedOne/cards/Pluck.java new file mode 100644 index 000000000..cc2a4ebdd --- /dev/null +++ b/src/main/java/awakenedOne/cards/Pluck.java @@ -0,0 +1,35 @@ +package awakenedOne.cards; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.actions.ConjureAction; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.DamageAllEnemiesAction; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import static awakenedOne.AwakenedOneMod.loadJokeCardImage; +import static awakenedOne.AwakenedOneMod.makeBetaCardPath; +import static awakenedOne.util.Wiz.atb; + +public class Pluck extends AbstractAwakenedCard { + public final static String ID = AwakenedOneMod.makeID(Pluck.class.getSimpleName()); + // intellij stuff attack, enemy, basic, 6, 3, , , , + + public Pluck() { + super(ID, 1, CardType.ATTACK, CardRarity.COMMON, CardTarget.ALL_ENEMY); + baseDamage = 5; + this.baseMagicNumber = this.magicNumber = 1; + loadJokeCardImage(this, makeBetaCardPath(Pluck.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + this.addToBot(new DamageAllEnemiesAction(p, multiDamage, DamageInfo.DamageType.NORMAL, AbstractGameAction.AttackEffect.BLUNT_HEAVY)); + atb(new ConjureAction(false)); + } + + @Override + public void upp() { + upgradeDamage(3); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/Primacy.java b/src/main/java/awakenedOne/cards/Primacy.java new file mode 100644 index 000000000..61d2425f6 --- /dev/null +++ b/src/main/java/awakenedOne/cards/Primacy.java @@ -0,0 +1,27 @@ +package awakenedOne.cards; + +import awakenedOne.powers.PrimacyPower; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import static awakenedOne.AwakenedOneMod.*; +import static awakenedOne.util.Wiz.applyToSelf; + +public class Primacy extends AbstractAwakenedCard { + public final static String ID = makeID(Primacy.class.getSimpleName()); + // intellij stuff power, self, uncommon, , , , , 3, 1 + + public Primacy() { + super(ID, 1, CardType.POWER, CardRarity.UNCOMMON, CardTarget.SELF); + baseMagicNumber = magicNumber = 1; + loadJokeCardImage(this, makeBetaCardPath(Primacy.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + applyToSelf(new PrimacyPower(magicNumber)); + } + + public void upp() { + upgradeMagicNumber(1); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/Procession.java b/src/main/java/awakenedOne/cards/Procession.java new file mode 100644 index 000000000..1476bc9ed --- /dev/null +++ b/src/main/java/awakenedOne/cards/Procession.java @@ -0,0 +1,40 @@ +package awakenedOne.cards; + +import com.megacrit.cardcrawl.actions.common.DrawCardAction; +import com.megacrit.cardcrawl.actions.common.MakeTempCardInDrawPileAction; +import com.megacrit.cardcrawl.cards.status.VoidCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.helpers.GameDictionary; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import static awakenedOne.AwakenedOneMod.*; +import static awakenedOne.util.Wiz.atb; + +public class Procession extends AbstractAwakenedCard { + public final static String ID = makeID(Procession.class.getSimpleName()); + // intellij stuff skill, enemy, uncommon, , , , , 1, 1 + + public Procession() { + super(ID, 0, CardType.SKILL, CardRarity.RARE, CardTarget.SELF); + baseSecondMagic = secondMagic = 3; + this.baseMagicNumber = 2; + this.magicNumber = this.baseMagicNumber; + loadJokeCardImage(this, makeBetaCardPath(Procession.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + atb(new DrawCardAction(AbstractDungeon.player, secondMagic)); + atb(new MakeTempCardInDrawPileAction(new VoidCard(), this.magicNumber, true, true)); + } + + @Override + public void initializeDescription() { + super.initializeDescription(); + this.keywords.add(GameDictionary.VOID.NAMES[0].toLowerCase()); + } + + public void upp() { + upgradeSecondMagic(1); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/ProfaneStrike.java b/src/main/java/awakenedOne/cards/ProfaneStrike.java new file mode 100644 index 000000000..60a56e763 --- /dev/null +++ b/src/main/java/awakenedOne/cards/ProfaneStrike.java @@ -0,0 +1,30 @@ +package awakenedOne.cards; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.PutOnDeckAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import static awakenedOne.AwakenedOneMod.*; + +public class ProfaneStrike extends AbstractAwakenedCard { + public final static String ID = makeID(ProfaneStrike.class.getSimpleName()); + // intellij stuff power, self, rare, , , , , , + + public ProfaneStrike() { + super(ID, 0, CardType.ATTACK, CardRarity.COMMON, CardTarget.ENEMY); + baseDamage = 7; + tags.add(CardTags.STRIKE); + loadJokeCardImage(this, makeBetaCardPath(ProfaneStrike.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + dmg(m, AbstractGameAction.AttackEffect.BLUNT_HEAVY); + this.addToBot(new PutOnDeckAction(p, p, 1, false)); + } + + @Override + public void upp() { + upgradeDamage(3); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/Psalm.java b/src/main/java/awakenedOne/cards/Psalm.java new file mode 100644 index 000000000..180d831a5 --- /dev/null +++ b/src/main/java/awakenedOne/cards/Psalm.java @@ -0,0 +1,55 @@ +package awakenedOne.cards; + +import awakenedOne.AwakenedOneMod; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.DamageAllEnemiesAction; +import com.megacrit.cardcrawl.actions.utility.SFXAction; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.WeakPower; +import com.megacrit.cardcrawl.vfx.combat.CleaveEffect; + +import java.util.Iterator; + +import static awakenedOne.AwakenedOneMod.loadJokeCardImage; +import static awakenedOne.AwakenedOneMod.makeBetaCardPath; + +public class Psalm extends AbstractAwakenedCard { + + public final static String ID = AwakenedOneMod.makeID(Psalm.class.getSimpleName()); + // intellij stuff attack, enemy, basic, 6, 3, , , , + + public Psalm() { + super(ID, 2, CardType.ATTACK, CardRarity.COMMON, CardTarget.ALL_ENEMY); + loadJokeCardImage(this, makeBetaCardPath(Psalm.class.getSimpleName() + ".png")); + baseDamage = 10; + + this.baseMagicNumber = 1; + this.magicNumber = this.baseMagicNumber; + + } + + public void use(AbstractPlayer p, AbstractMonster m) { + this.addToBot(new SFXAction("ATTACK_HEAVY")); + this.addToBot(new VFXAction(p, new CleaveEffect(), 0.1F)); + this.addToBot(new DamageAllEnemiesAction(p, multiDamage, DamageInfo.DamageType.NORMAL, AbstractGameAction.AttackEffect.NONE)); + + Iterator var3 = AbstractDungeon.getCurrRoom().monsters.monsters.iterator(); + + while (var3.hasNext()) { + AbstractMonster mo = (AbstractMonster) var3.next(); + this.addToBot(new ApplyPowerAction(mo, p, new WeakPower(mo, this.magicNumber, false), this.magicNumber, true, AbstractGameAction.AttackEffect.NONE)); + } + + } + + @Override + public void upp() { + upgradeDamage(2); + this.upgradeMagicNumber(1); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/RavenStrike.java b/src/main/java/awakenedOne/cards/RavenStrike.java new file mode 100644 index 000000000..35db5f361 --- /dev/null +++ b/src/main/java/awakenedOne/cards/RavenStrike.java @@ -0,0 +1,56 @@ +package awakenedOne.cards; + +import awakenedOne.AwakenedOneMod; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.PlayTopCardAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import static awakenedOne.AwakenedOneMod.*; +import static awakenedOne.util.Wiz.att; + +public class RavenStrike extends AbstractAwakenedCard { + public final static String ID = makeID(RavenStrike.class.getSimpleName()); + // intellij stuff power, self, rare, , , , , , + + public RavenStrike() { + super(ID, 2, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); + baseDamage = 15; + tags.add(CardTags.STRIKE); + this.tags.add(AwakenedOneMod.CHANT); + this.baseMagicNumber = 1; + this.magicNumber = this.baseMagicNumber; + loadJokeCardImage(this, makeBetaCardPath(RavenStrike.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + dmg(m, AbstractGameAction.AttackEffect.BLUNT_HEAVY); + if (isTrig_chant()) { + chant(); + } + } + + @Override + public void chant() { + addToBot(new AbstractGameAction() { + @Override + public void update() { + isDone = true; + att(new PlayTopCardAction(AbstractDungeon.getRandomMonster(), false)); + } + }); + checkOnChant(); + } + + + public void triggerOnGlowCheck() { + this.glowColor = isChantActiveGlow(this) ? GOLD_BORDER_GLOW_COLOR : BLUE_BORDER_GLOW_COLOR; + } + + + @Override + public void upp() { + upgradeDamage(4); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/RealityRift.java b/src/main/java/awakenedOne/cards/RealityRift.java new file mode 100644 index 000000000..791e1803b --- /dev/null +++ b/src/main/java/awakenedOne/cards/RealityRift.java @@ -0,0 +1,77 @@ +package awakenedOne.cards; + +import awakenedOne.AwakenedOneMod; +import basemod.BaseMod; +import com.evacipated.cardcrawl.mod.stslib.actions.common.MultiGroupSelectAction; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.MakeTempCardInDiscardAction; +import com.megacrit.cardcrawl.actions.common.MakeTempCardInDrawPileAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.CardGroup; +import com.megacrit.cardcrawl.cards.status.VoidCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.helpers.GameDictionary; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import java.util.Collections; + +import static awakenedOne.AwakenedOneMod.loadJokeCardImage; +import static awakenedOne.AwakenedOneMod.makeBetaCardPath; +import static awakenedOne.util.Wiz.atb; +import static awakenedOne.util.Wiz.att; + +public class RealityRift extends AbstractAwakenedCard { + public final static String ID = AwakenedOneMod.makeID(RealityRift.class.getSimpleName()); + // intellij stuff skill, self, basic, , , 5, 3, , + + public static final String[] TEXT; + + static { + TEXT = CardCrawlGame.languagePack.getUIString("BetterToHandAction").TEXT; + } + + public RealityRift() { + super(ID, 1, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); + this.exhaust = true; + loadJokeCardImage(this, makeBetaCardPath(RealityRift.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + atb(new MultiGroupSelectAction( + cardStrings.EXTENDED_DESCRIPTION[0], + (cards, groups) -> { + Collections.reverse(cards); + cards.forEach(c -> att(new AbstractGameAction() { + public void update() { + isDone = true; + if (p.drawPile.contains(c)) { + addToTop(new MakeTempCardInDrawPileAction(new VoidCard(), 1, true, true)); + } else if (p.discardPile.contains(c)) { + addToTop(new MakeTempCardInDiscardAction(new VoidCard(), 1)); + } + if (p.hand.size() >= BaseMod.MAX_HAND_SIZE) { + if (groups.get(c) == p.drawPile) + p.drawPile.moveToDiscardPile(c); + p.createHandIsFullDialog(); + } else { + p.hand.moveToHand(c, groups.get(c)); + } + } + })); + }, + 1, false, c -> c instanceof AbstractCard, CardGroup.CardGroupType.DRAW_PILE, CardGroup.CardGroupType.DISCARD_PILE + )); + } + + @Override + public void upp() { + upgradeBaseCost(0); + } + + @Override + public void initializeDescription() { + super.initializeDescription(); + this.keywords.add(GameDictionary.VOID.NAMES[0].toLowerCase()); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/Rebirth.java b/src/main/java/awakenedOne/cards/Rebirth.java new file mode 100644 index 000000000..742b363ec --- /dev/null +++ b/src/main/java/awakenedOne/cards/Rebirth.java @@ -0,0 +1,29 @@ +package awakenedOne.cards; + +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import expansioncontent.powers.AwakenDeathPower; + +import static awakenedOne.AwakenedOneMod.*; +import static awakenedOne.util.Wiz.atb; + +public class Rebirth extends AbstractAwakenedCard { + public final static String ID = makeID(Rebirth.class.getSimpleName()); + // intellij stuff skill, self, rare, , , , , 4, 2 + + public Rebirth() { + super(ID, 1, CardType.POWER, CardRarity.RARE, CardTarget.SELF); + baseMagicNumber = magicNumber = 8; + tags.add(CardTags.HEALING); + loadJokeCardImage(this, makeBetaCardPath(Rebirth.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + atb(new ApplyPowerAction(p, p, new AwakenDeathPower(p, p, this.magicNumber), this.magicNumber)); + } + + public void upp() { + upgradeMagicNumber(3); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/Recitation.java b/src/main/java/awakenedOne/cards/Recitation.java new file mode 100644 index 000000000..b6c1f59ea --- /dev/null +++ b/src/main/java/awakenedOne/cards/Recitation.java @@ -0,0 +1,47 @@ +package awakenedOne.cards; + +import awakenedOne.AwakenedOneMod; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import static awakenedOne.AwakenedOneMod.loadJokeCardImage; +import static awakenedOne.AwakenedOneMod.makeBetaCardPath; + +public class Recitation extends AbstractAwakenedCard { + + public final static String ID = AwakenedOneMod.makeID(Recitation.class.getSimpleName()); + // intellij stuff skill, self, basic, , , 5, 3, , + + public Recitation() { + super(ID, 1, CardType.ATTACK, CardRarity.COMMON, CardTarget.ENEMY); + baseDamage = 6; + this.tags.add(AwakenedOneMod.CHANT); + loadJokeCardImage(this, makeBetaCardPath(Recitation.class.getSimpleName() + ".png")); + } + + + public void use(AbstractPlayer p, AbstractMonster m) { + dmg(m, AbstractGameAction.AttackEffect.BLUNT_LIGHT); + if (isTrig_chant()) { + dmg(m, AbstractGameAction.AttackEffect.BLUNT_LIGHT); + chant(); + } + + } + + public void triggerOnGlowCheck() { + this.glowColor = isChantActiveGlow(this) ? GOLD_BORDER_GLOW_COLOR : BLUE_BORDER_GLOW_COLOR; + } + + @Override + public void chant() { + checkOnChant(); + } + + + @Override + public void upp() { + upgradeDamage(2); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/RisingChant.java b/src/main/java/awakenedOne/cards/RisingChant.java new file mode 100644 index 000000000..4dfbc7a32 --- /dev/null +++ b/src/main/java/awakenedOne/cards/RisingChant.java @@ -0,0 +1,28 @@ +package awakenedOne.cards; + +import awakenedOne.powers.RisingChantPower; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import static awakenedOne.AwakenedOneMod.*; +import static awakenedOne.util.Wiz.applyToSelf; + +public class RisingChant extends AbstractAwakenedCard { + public final static String ID = makeID(RisingChant.class.getSimpleName()); + // intellij stuff power, self, rare, , , , , , + + public RisingChant() { + super(ID, 1, CardType.POWER, CardRarity.UNCOMMON, CardTarget.SELF); + this.baseMagicNumber = 1; + this.magicNumber = this.baseMagicNumber; + loadJokeCardImage(this, makeBetaCardPath(RisingChant.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + applyToSelf(new RisingChantPower(this.magicNumber)); + } + + public void upp() { + upgradeMagicNumber(1); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/Scour.java b/src/main/java/awakenedOne/cards/Scour.java new file mode 100644 index 000000000..a7a48f602 --- /dev/null +++ b/src/main/java/awakenedOne/cards/Scour.java @@ -0,0 +1,35 @@ +package awakenedOne.cards; + +import awakenedOne.powers.ManaburnPower; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import static awakenedOne.AwakenedOneMod.*; + +public class Scour extends AbstractAwakenedCard { + public final static String ID = makeID(Scour.class.getSimpleName()); + // intellij stuff skill, enemy, uncommon, , , , , 1, 1 + + //Manaburn + + //rework to pressure points + + public Scour() { + super(ID, 1, CardType.ATTACK, CardRarity.COMMON, CardTarget.ENEMY); + baseDamage = 8; + baseMagicNumber = magicNumber = 4; + loadJokeCardImage(this, makeBetaCardPath(Scour.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + dmg(m, AbstractGameAction.AttackEffect.FIRE); + this.addToBot(new ApplyPowerAction(m, p, new ManaburnPower(m, this.magicNumber), this.magicNumber)); + } + + public void upp() { + upgradeDamage(1); + upgradeMagicNumber(2); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/SingularityShield.java b/src/main/java/awakenedOne/cards/SingularityShield.java new file mode 100644 index 000000000..86f6a33ae --- /dev/null +++ b/src/main/java/awakenedOne/cards/SingularityShield.java @@ -0,0 +1,33 @@ +package awakenedOne.cards; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.util.Wiz; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.NextTurnBlockPower; +import hermit.powers.Drained; + +import static awakenedOne.AwakenedOneMod.loadJokeCardImage; +import static awakenedOne.AwakenedOneMod.makeBetaCardPath; + +public class SingularityShield extends AbstractAwakenedCard { + public final static String ID = AwakenedOneMod.makeID(SingularityShield.class.getSimpleName()); + // intellij stuff skill, self, basic, , , 5, 3, , + + public SingularityShield() { + super(ID, 1, CardType.SKILL, CardRarity.COMMON, CardTarget.ENEMY); + baseBlock = 8; + loadJokeCardImage(this, makeBetaCardPath(SingularityShield.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + blck(); + Wiz.applyToSelf(new Drained(p, p, 1)); + Wiz.applyToSelf(new NextTurnBlockPower(p, block)); + } + + @Override + public void upp() { + upgradeBlock(2); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/Siphon.java b/src/main/java/awakenedOne/cards/Siphon.java new file mode 100644 index 000000000..d51041df8 --- /dev/null +++ b/src/main/java/awakenedOne/cards/Siphon.java @@ -0,0 +1,53 @@ +package awakenedOne.cards; + +import awakenedOne.AwakenedOneMod; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.GainStrengthPower; +import com.megacrit.cardcrawl.powers.LoseStrengthPower; +import com.megacrit.cardcrawl.powers.StrengthPower; + +import static awakenedOne.AwakenedOneMod.*; + +public class Siphon extends AbstractAwakenedCard { + public final static String ID = makeID(Siphon.class.getSimpleName()); + // intellij stuff power, self, rare, , , , , , + + public Siphon() { + super(ID, 1, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); + baseDamage = 7; + magicNumber = baseMagicNumber = 2; + this.tags.add(AwakenedOneMod.CHANT); + loadJokeCardImage(this, makeBetaCardPath(Siphon.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + dmg(m, AbstractGameAction.AttackEffect.BLUNT_HEAVY); + if (isTrig_chant()) { + this.addToBot(new ApplyPowerAction(m, p, new StrengthPower(m, -magicNumber), -magicNumber)); + if (m != null && !m.hasPower("Artifact")) { + this.addToBot(new ApplyPowerAction(m, p, new GainStrengthPower(m, magicNumber), magicNumber)); + this.addToBot(new ApplyPowerAction(p, p, new StrengthPower(p, magicNumber), magicNumber)); + this.addToBot(new ApplyPowerAction(p, p, new LoseStrengthPower(p, magicNumber), magicNumber)); + } + chant(); + } + } + + public void triggerOnGlowCheck() { + this.glowColor = isChantActiveGlow(this) ? GOLD_BORDER_GLOW_COLOR : BLUE_BORDER_GLOW_COLOR; + } + + @Override + public void chant() { + checkOnChant(); + } + + @Override + public void upp() { + upgradeDamage(2); + upgradeMagicNumber(1); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/Skyward.java b/src/main/java/awakenedOne/cards/Skyward.java new file mode 100644 index 000000000..731cf6b61 --- /dev/null +++ b/src/main/java/awakenedOne/cards/Skyward.java @@ -0,0 +1,50 @@ +package awakenedOne.cards; + +import com.megacrit.cardcrawl.actions.common.DrawCardAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import static awakenedOne.AwakenedOneMod.*; +import static awakenedOne.util.Wiz.atb; + +public class Skyward extends AbstractAwakenedCard { + public final static String ID = makeID(Skyward.class.getSimpleName()); + // intellij stuff power, self, rare, , , , , , + + public Skyward() { + super(ID, 8, CardType.SKILL, CardRarity.RARE, CardTarget.SELF); + baseBlock = 20; + this.magicNumber = this.baseMagicNumber = 1; + loadJokeCardImage(this, makeBetaCardPath(Skyward.class.getSimpleName() + ".png")); + if (CardCrawlGame.dungeon != null && AbstractDungeon.currMapNode != null) { + this.configureCostsOnNewCard(); + } + } + + public void use(AbstractPlayer p, AbstractMonster m) { + blck(); + atb(new DrawCardAction(magicNumber)); + } + + public void configureCostsOnNewCard() { + for (AbstractCard c : AbstractDungeon.actionManager.cardsPlayedThisCombat) { + if (c.type == CardType.POWER) { + updateCost(-1); + } + } + } + + public void triggerOnCardPlayed(AbstractCard c) { + if (c.type == CardType.POWER) { + this.updateCost(-1); + } + } + + public void upp() { + upgradeBlock(4); + upgradeMagicNumber(1); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/SludgeBomb.java b/src/main/java/awakenedOne/cards/SludgeBomb.java new file mode 100644 index 000000000..9a4656564 --- /dev/null +++ b/src/main/java/awakenedOne/cards/SludgeBomb.java @@ -0,0 +1,49 @@ +package awakenedOne.cards; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.status.VoidCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import java.util.Objects; + +import static awakenedOne.AwakenedOneMod.*; + +public class SludgeBomb extends AbstractAwakenedCard { + public final static String ID = makeID(SludgeBomb.class.getSimpleName()); + // intellij stuff skill, self, basic, , , 5, 3, , + + public SludgeBomb() { + super(ID, 0, CardType.ATTACK, CardRarity.RARE, CardTarget.ENEMY); + baseDamage = 9; + loadJokeCardImage(this, makeBetaCardPath(SludgeBomb.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + dmg(m, AbstractGameAction.AttackEffect.FIRE); + dmg(m, AbstractGameAction.AttackEffect.FIRE); + AbstractCard toRemove = null; + for (AbstractCard c : AbstractDungeon.player.exhaustPile.group) { + if (c instanceof VoidCard) { + toRemove = c; + break; + } + } + if (toRemove != null) AbstractDungeon.player.exhaustPile.removeCard(toRemove); + } + + @Override + public boolean canUse(AbstractPlayer p, AbstractMonster m) { + if (AbstractDungeon.player.exhaustPile.group.stream().noneMatch(card -> Objects.equals(card.cardID, VoidCard.ID))) { + cantUseMessage = cardStrings.EXTENDED_DESCRIPTION[0]; + return false; + } + return super.canUse(p, m); + } + + public void upp() { + upgradeDamage(3); + } +} diff --git a/src/main/java/awakenedOne/cards/SongOfSorrow.java b/src/main/java/awakenedOne/cards/SongOfSorrow.java new file mode 100644 index 000000000..c09fbfab1 --- /dev/null +++ b/src/main/java/awakenedOne/cards/SongOfSorrow.java @@ -0,0 +1,36 @@ +package awakenedOne.cards; + +import awakenedOne.powers.SongOfSorrowPower; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.helpers.GameDictionary; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import static awakenedOne.AwakenedOneMod.*; +import static awakenedOne.util.Wiz.applyToSelf; + +public class SongOfSorrow extends AbstractAwakenedCard { + public final static String ID = makeID(SongOfSorrow.class.getSimpleName()); + // intellij stuff power, self, rare, , , , , , + + public SongOfSorrow() { + super(ID, 1, CardType.POWER, CardRarity.UNCOMMON, CardTarget.SELF); + this.baseMagicNumber = 7; + this.magicNumber = this.baseMagicNumber; + loadJokeCardImage(this, makeBetaCardPath(SongOfSorrow.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + applyToSelf(new SongOfSorrowPower(magicNumber)); + } + + @Override + public void initializeDescription() { + super.initializeDescription(); + this.keywords.add(GameDictionary.VOID.NAMES[0].toLowerCase()); + } + + @Override + public void upp() { + upgradeMagicNumber(3); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/SoulStrike.java b/src/main/java/awakenedOne/cards/SoulStrike.java new file mode 100644 index 000000000..f9effcaff --- /dev/null +++ b/src/main/java/awakenedOne/cards/SoulStrike.java @@ -0,0 +1,80 @@ +package awakenedOne.cards; + +import awakenedOne.AwakenedOneMod; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import java.util.Iterator; + +import static awakenedOne.AwakenedOneMod.loadJokeCardImage; +import static awakenedOne.AwakenedOneMod.makeBetaCardPath; + +public class SoulStrike extends AbstractAwakenedCard { + public final static String ID = AwakenedOneMod.makeID(SoulStrike.class.getSimpleName()); + // intellij stuff attack, enemy, basic, 6, 3, , , , + + public SoulStrike() { + super(ID, 3, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); + baseDamage = 6; + this.baseMagicNumber = 3; + this.magicNumber = this.baseMagicNumber; + tags.add(CardTags.STRIKE); + loadJokeCardImage(this, makeBetaCardPath(SoulStrike.class.getSimpleName() + ".png")); + + if (CardCrawlGame.dungeon != null && AbstractDungeon.currMapNode != null) { + this.configureCostsOnNewCard(); + } + } + + public void atTurnStart() { + this.resetAttributes(); + this.applyPowers(); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + for (int i = 0; i < this.magicNumber; i++) { + dmg(m, AbstractGameAction.AttackEffect.SLASH_HEAVY); + } + } + + public void triggerWhenDrawn() { + super.triggerWhenDrawn(); + Iterator var1 = AbstractDungeon.actionManager.cardsPlayedThisTurn.iterator(); + int powers = 0; + while (var1.hasNext()) { + AbstractCard c = (AbstractCard) var1.next(); + if (c.type == CardType.POWER) { + powers++; + } + } + this.setCostForTurn(this.cost - powers); + } + + + public void configureCostsOnNewCard() { + Iterator var1 = AbstractDungeon.actionManager.cardsPlayedThisTurn.iterator(); + int powers = 0; + while (var1.hasNext()) { + AbstractCard c = (AbstractCard) var1.next(); + if (c.type == CardType.POWER) { + powers++; + } + } + this.setCostForTurn(this.cost - powers); + } + + public void triggerOnCardPlayed(AbstractCard c) { + if (c.type == CardType.POWER) { + this.setCostForTurn(this.costForTurn - 1); + } + } + + @Override + public void upp() { + upgradeDamage(2); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/Spellbinder.java b/src/main/java/awakenedOne/cards/Spellbinder.java new file mode 100644 index 000000000..4ea3e4ebc --- /dev/null +++ b/src/main/java/awakenedOne/cards/Spellbinder.java @@ -0,0 +1,28 @@ +package awakenedOne.cards; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.powers.SpellbinderPower; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import static awakenedOne.AwakenedOneMod.*; +import static awakenedOne.util.Wiz.applyToSelf; + +public class Spellbinder extends AbstractAwakenedCard { + public final static String ID = makeID(Spellbinder.class.getSimpleName()); + // intellij stuff power, self, rare, , , , , , + + public Spellbinder() { + super(ID, 1, CardType.POWER, CardRarity.RARE, CardTarget.SELF); + this.tags.add(AwakenedOneMod.DELVE); + loadJokeCardImage(this, makeBetaCardPath(Spellbinder.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + applyToSelf(new SpellbinderPower(1)); + } + + public void upp() { + upgradeBaseCost(0); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/Spellshield.java b/src/main/java/awakenedOne/cards/Spellshield.java new file mode 100644 index 000000000..ee07b4608 --- /dev/null +++ b/src/main/java/awakenedOne/cards/Spellshield.java @@ -0,0 +1,27 @@ +package awakenedOne.cards; + +import awakenedOne.powers.SpellshieldPower; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import hermit.util.Wiz; + +import static awakenedOne.AwakenedOneMod.*; + +public class Spellshield extends AbstractAwakenedCard { + public final static String ID = makeID(Spellshield.class.getSimpleName()); + // intellij stuff skill, enemy, uncommon, , , , , 1, 1 + + public Spellshield() { + super(ID, 2, CardType.POWER, CardRarity.UNCOMMON, CardTarget.SELF); + baseMagicNumber = magicNumber = 2; + loadJokeCardImage(this, makeBetaCardPath(Spellshield.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + Wiz.applyToSelf(new SpellshieldPower(magicNumber)); + } + + public void upp() { + upgradeMagicNumber(1); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/Spew.java b/src/main/java/awakenedOne/cards/Spew.java new file mode 100644 index 000000000..c19b647ec --- /dev/null +++ b/src/main/java/awakenedOne/cards/Spew.java @@ -0,0 +1,54 @@ +package awakenedOne.cards; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.patches.OnCreateCardSubscriber; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.DamageAction; +import com.megacrit.cardcrawl.actions.common.GainEnergyAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import static awakenedOne.AwakenedOneMod.loadJokeCardImage; +import static awakenedOne.AwakenedOneMod.makeBetaCardPath; +import static awakenedOne.util.Wiz.atb; + +public class Spew extends AbstractAwakenedCard { + public final static String ID = AwakenedOneMod.makeID(Spew.class.getSimpleName()); + private static final int COST = 2; + + public Spew() { + super(ID, COST, CardType.ATTACK, CardRarity.COMMON, CardTarget.ENEMY); + baseDamage = 12; + loadJokeCardImage(this, makeBetaCardPath(Spew.class.getSimpleName() + ".png")); + } + + public static boolean checkVoid() { + return OnCreateCardSubscriber.CardsCreatedThisTurn > 0; + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + int dam = this.damage; + AbstractDungeon.actionManager.addToBottom(new DamageAction(m, new DamageInfo(p, dam, damageTypeForTurn), AbstractGameAction.AttackEffect.POISON)); + if (checkVoid()) { + atb(new GainEnergyAction(2)); + } + } + + @Override + public void triggerOnGlowCheck() { + if (checkVoid()) { + this.glowColor = AbstractCard.GOLD_BORDER_GLOW_COLOR.cpy(); + } else { + this.glowColor = AbstractCard.BLUE_BORDER_GLOW_COLOR.cpy(); + } + } + + @Override + public void upp() { + upgradeDamage(4); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/SplitWide.java b/src/main/java/awakenedOne/cards/SplitWide.java new file mode 100644 index 000000000..aef4716a2 --- /dev/null +++ b/src/main/java/awakenedOne/cards/SplitWide.java @@ -0,0 +1,34 @@ +package awakenedOne.cards; + +import awakenedOne.powers.StrengthReturnPower; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import static awakenedOne.AwakenedOneMod.*; + +public class SplitWide extends AbstractAwakenedCard { + public final static String ID = makeID(SplitWide.class.getSimpleName()); + // intellij stuff power, self, rare, , , , , , + + public SplitWide() { + super(ID, 1, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); + baseDamage = 6; + this.baseMagicNumber = 1; + this.magicNumber = this.baseMagicNumber; + this.exhaust = true; + loadJokeCardImage(this, makeBetaCardPath(SplitWide.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + dmg(m, AbstractGameAction.AttackEffect.BLUNT_HEAVY); + this.addToBot(new ApplyPowerAction(m, p, new StrengthReturnPower(m, this.magicNumber), this.magicNumber)); + } + + @Override + public void upp() { + upgradeDamage(2); + upgradeMagicNumber(1); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/Strike.java b/src/main/java/awakenedOne/cards/Strike.java new file mode 100644 index 000000000..66b577080 --- /dev/null +++ b/src/main/java/awakenedOne/cards/Strike.java @@ -0,0 +1,28 @@ +package awakenedOne.cards; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import static awakenedOne.AwakenedOneMod.*; + +public class Strike extends AbstractAwakenedCard { + public final static String ID = makeID(Strike.class.getSimpleName()); + // intellij stuff attack, enemy, basic, 6, 3, , , , + + public Strike() { + super(ID, 1, CardType.ATTACK, CardRarity.BASIC, CardTarget.ENEMY); + baseDamage = 6; + tags.add(CardTags.STARTER_STRIKE); + this.tags.add(CardTags.STRIKE); + loadJokeCardImage(this, makeBetaCardPath(Strike.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + dmg(m, AbstractGameAction.AttackEffect.SLASH_DIAGONAL); + } + + public void upp() { + upgradeDamage(3); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/TakeFlight.java b/src/main/java/awakenedOne/cards/TakeFlight.java new file mode 100644 index 000000000..8cc135b24 --- /dev/null +++ b/src/main/java/awakenedOne/cards/TakeFlight.java @@ -0,0 +1,46 @@ +package awakenedOne.cards; + +import awakenedOne.AwakenedOneMod; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.BlurPower; + +import static awakenedOne.AwakenedOneMod.loadJokeCardImage; +import static awakenedOne.AwakenedOneMod.makeBetaCardPath; +import static awakenedOne.util.Wiz.applyToSelf; + +public class TakeFlight extends AbstractAwakenedCard { + + public final static String ID = AwakenedOneMod.makeID(TakeFlight.class.getSimpleName()); + // intellij stuff skill, self, basic, , , 5, 3, , + + public TakeFlight() { + super(ID, 2, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); + baseBlock = 12; + this.tags.add(AwakenedOneMod.CHANT); + loadJokeCardImage(this, makeBetaCardPath(TakeFlight.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + blck(); + if (isTrig_chant()) { + chant(); + } + } + + @Override + public void chant() { + applyToSelf((new BlurPower(AbstractDungeon.player, 1))); + checkOnChant(); + } + + public void triggerOnGlowCheck() { + this.glowColor = isChantActiveGlow(this) ? GOLD_BORDER_GLOW_COLOR : BLUE_BORDER_GLOW_COLOR; + } + + @Override + public void upp() { + upgradeBlock(4); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/TalonRake.java b/src/main/java/awakenedOne/cards/TalonRake.java new file mode 100644 index 000000000..439e0c583 --- /dev/null +++ b/src/main/java/awakenedOne/cards/TalonRake.java @@ -0,0 +1,55 @@ +package awakenedOne.cards; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.actions.ConjureAction; +import com.badlogic.gdx.graphics.Color; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.vfx.combat.RipAndTearEffect; + +import static awakenedOne.AwakenedOneMod.*; +import static awakenedOne.util.Wiz.atb; + +public class TalonRake extends AbstractAwakenedCard { + public final static String ID = makeID(TalonRake.class.getSimpleName()); + // intellij stuff attack, enemy, basic, 6, 3, , , , + + public TalonRake() { + super(ID, 2, CardType.ATTACK, CardRarity.BASIC, CardTarget.ENEMY); + baseDamage = 5; + //this.tags.add(AwakenedOneMod.CHANT); + this.tags.add(AwakenedOneMod.DELVE); + loadJokeCardImage(this, makeBetaCardPath(TalonRake.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + if (m != null) { + this.addToBot(new VFXAction(new RipAndTearEffect(m.hb.cX, m.hb.cY, Color.CYAN.cpy(), Color.WHITE))); + this.addToBot(new VFXAction(new RipAndTearEffect(m.hb.cX, m.hb.cY, Color.CYAN.cpy(), Color.WHITE))); + } + dmg(m, AbstractGameAction.AttackEffect.FIRE); + dmg(m, AbstractGameAction.AttackEffect.FIRE); + atb(new ConjureAction(false)); +// if (isTrig_chant()) { +// this.tags.add(ACTIVECHANT); +// chant(); +// } + } + +// public void triggerOnGlowCheck() { +// this.glowColor = isChantActiveGlow(this) ? GOLD_BORDER_GLOW_COLOR : BLUE_BORDER_GLOW_COLOR; +// } + + // @Override + // public void chant() { + // atb(new ConjureAction(false)); + // checkOnChant(); + // } + + public void upp() { + upgradeDamage(2); + //upgradeBaseCost(0); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/Thaumaturgy.java b/src/main/java/awakenedOne/cards/Thaumaturgy.java new file mode 100644 index 000000000..02a99a54f --- /dev/null +++ b/src/main/java/awakenedOne/cards/Thaumaturgy.java @@ -0,0 +1,33 @@ +package awakenedOne.cards; + +import awakenedOne.cards.tokens.Ceremony; +import awakenedOne.powers.ThaumaturgyPower; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.DexterityPower; + +import static awakenedOne.AwakenedOneMod.*; +import static awakenedOne.util.Wiz.applyToSelf; +import static awakenedOne.util.Wiz.applyToSelfTop; + +public class Thaumaturgy extends AbstractAwakenedCard { + public final static String ID = makeID(Thaumaturgy.class.getSimpleName()); + // intellij stuff power, self, rare, , , , , , + + public Thaumaturgy() { + super(ID, 1, CardType.POWER, CardRarity.UNCOMMON, CardTarget.SELF); + this.baseMagicNumber = 2; + this.magicNumber = this.baseMagicNumber; + cardsToPreview = new Ceremony(); + loadJokeCardImage(this, makeBetaCardPath(Thaumaturgy.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + applyToSelf(new DexterityPower(p, 1)); + applyToSelfTop(new ThaumaturgyPower(magicNumber)); + } + + public void upp() { + upgradeMagicNumber(1); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/TheTower.java b/src/main/java/awakenedOne/cards/TheTower.java new file mode 100644 index 000000000..3678d8f57 --- /dev/null +++ b/src/main/java/awakenedOne/cards/TheTower.java @@ -0,0 +1,70 @@ +package awakenedOne.cards; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.patches.OnCreateCardSubscriber; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.actions.common.DamageAllEnemiesAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.vfx.combat.ExplosionSmallEffect; + +import java.util.Iterator; + +import static awakenedOne.AwakenedOneMod.loadJokeCardImage; +import static awakenedOne.AwakenedOneMod.makeBetaCardPath; + +public class TheTower extends AbstractAwakenedCard { + + public final static String ID = AwakenedOneMod.makeID(TheTower.class.getSimpleName()); + // intellij stuff attack, enemy, basic, 6, 3, , , , + + public TheTower() { + super(ID, 2, CardType.ATTACK, CardRarity.RARE, CardTarget.ALL_ENEMY); + baseDamage = 4; + this.baseMagicNumber = 2; + this.magicNumber = this.baseMagicNumber; + loadJokeCardImage(this, makeBetaCardPath(TheTower.class.getSimpleName() + ".png")); + } + + public static int countCards() { + return OnCreateCardSubscriber.CardsCreatedThisCombat; + } + + public void use(AbstractPlayer p, AbstractMonster m) { + Iterator var2 = AbstractDungeon.getMonsters().monsters.iterator(); + + while (var2.hasNext()) { + AbstractMonster mo = (AbstractMonster) var2.next(); + if (!mo.isDeadOrEscaped()) { + this.addToBot(new VFXAction(new ExplosionSmallEffect(mo.hb.cX, mo.hb.cY), 0.1F)); + } + } + + this.addToBot(new DamageAllEnemiesAction(p, this.multiDamage, this.damageTypeForTurn, AbstractGameAction.AttackEffect.NONE)); + + } + + public void calculateCardDamage(AbstractMonster mo) { + int realBaseDamage = this.baseDamage; + this.baseDamage += this.magicNumber * countCards(); + super.calculateCardDamage(mo); + this.baseDamage = realBaseDamage; + this.isDamageModified = this.damage != this.baseDamage; + } + + public void applyPowers() { + int realBaseDamage = this.baseDamage; + this.baseDamage += this.magicNumber * countCards(); + super.applyPowers(); + this.baseDamage = realBaseDamage; + this.isDamageModified = this.damage != this.baseDamage; + } + + + @Override + public void upp() { + upgradeMagicNumber(1); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/Unleash.java b/src/main/java/awakenedOne/cards/Unleash.java new file mode 100644 index 000000000..1378f47ff --- /dev/null +++ b/src/main/java/awakenedOne/cards/Unleash.java @@ -0,0 +1,45 @@ +package awakenedOne.cards; + +import awakenedOne.patches.OnLoseEnergyPowerPatch; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import static awakenedOne.AwakenedOneMod.*; + +public class Unleash extends AbstractAwakenedCard { + public final static String ID = makeID(Unleash.class.getSimpleName()); + // intellij stuff skill, self, basic, , , 5, 3, , + + public Unleash() { + super(ID, 1, CardType.ATTACK, CardRarity.COMMON, CardTarget.ENEMY); + baseDamage = 5; + baseMagicNumber = magicNumber = 1; + loadJokeCardImage(this, makeBetaCardPath("Unleash.png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + dmg(m, AbstractGameAction.AttackEffect.BLUNT_HEAVY); + } + + public void calculateCardDamage(AbstractMonster mo) { + int realBaseDamage = this.baseDamage; + this.baseDamage += this.magicNumber * OnLoseEnergyPowerPatch.EnergyLostThisCombat; + super.calculateCardDamage(mo); + this.baseDamage = realBaseDamage; + this.isDamageModified = this.damage != this.baseDamage; + } + + public void applyPowers() { + int realBaseDamage = this.baseDamage; + this.baseDamage += this.magicNumber * OnLoseEnergyPowerPatch.EnergyLostThisCombat; + super.applyPowers(); + this.baseDamage = realBaseDamage; + this.isDamageModified = this.damage != this.baseDamage; + } + + public void upp() { + upgradeDamage(1); + upgradeMagicNumber(1); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/Victuals.java b/src/main/java/awakenedOne/cards/Victuals.java new file mode 100644 index 000000000..52d5ffe64 --- /dev/null +++ b/src/main/java/awakenedOne/cards/Victuals.java @@ -0,0 +1,42 @@ +package awakenedOne.cards; + +import awakenedOne.AwakenedOneMod; +import com.megacrit.cardcrawl.actions.common.GainEnergyAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import static awakenedOne.AwakenedOneMod.*; +import static awakenedOne.util.Wiz.atb; + +public class Victuals extends AbstractAwakenedCard { + public final static String ID = makeID(Victuals.class.getSimpleName()); + // intellij stuff skill, enemy, uncommon, , , , , 1, 1 + + public Victuals() { + super(ID, 0, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); + baseMagicNumber = magicNumber = 2; + this.exhaust = true; + this.tags.add(AwakenedOneMod.CHANT); + loadJokeCardImage(this, makeBetaCardPath(Victuals.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + if (isTrig_chant()) { + chant(); + } + } + + @Override + public void chant() { + atb(new GainEnergyAction(magicNumber)); + checkOnChant(); + } + + public void triggerOnGlowCheck() { + this.glowColor = isChantActiveGlow(this) ? GOLD_BORDER_GLOW_COLOR : BLUE_BORDER_GLOW_COLOR; + } + + public void upp() { + upgradeMagicNumber(1); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/WaveOfMiasma.java b/src/main/java/awakenedOne/cards/WaveOfMiasma.java new file mode 100644 index 000000000..e6527f099 --- /dev/null +++ b/src/main/java/awakenedOne/cards/WaveOfMiasma.java @@ -0,0 +1,36 @@ +package awakenedOne.cards; + +import awakenedOne.powers.ManaburnPower; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.WeakPower; +import hermit.util.Wiz; + +import static awakenedOne.AwakenedOneMod.*; + +public class WaveOfMiasma extends AbstractAwakenedCard { + public final static String ID = makeID(WaveOfMiasma.class.getSimpleName()); + // intellij stuff power, self, rare, , , , , , + + //Shroud of Miasma + + public WaveOfMiasma() { + super(ID, 2, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.ALL_ENEMY); + baseMagicNumber = magicNumber = 3; + baseSecondMagic = secondMagic = 9; + this.exhaust = true; + loadJokeCardImage(this, makeBetaCardPath(WaveOfMiasma.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + Wiz.forAllMonstersLiving(q -> { + Wiz.applyToEnemy(q, new WeakPower(q, magicNumber, false)); + Wiz.applyToEnemy(q, new ManaburnPower(q, secondMagic)); + }); + } + + public void upp() { + upgradeMagicNumber(2); + upgradeSecondMagic(3); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/cardvars/SecondDamage.java b/src/main/java/awakenedOne/cards/cardvars/SecondDamage.java new file mode 100644 index 000000000..4af72ed78 --- /dev/null +++ b/src/main/java/awakenedOne/cards/cardvars/SecondDamage.java @@ -0,0 +1,53 @@ +package awakenedOne.cards.cardvars; + +import awakenedOne.cards.AbstractAwakenedCard; +import basemod.abstracts.DynamicVariable; +import com.megacrit.cardcrawl.cards.AbstractCard; + +import static awakenedOne.AwakenedOneMod.makeID; + +public class SecondDamage extends DynamicVariable { + + @Override + public String key() { + return makeID("sd"); + } + + @Override + public boolean isModified(AbstractCard card) { + if (card instanceof AbstractAwakenedCard) { + return ((AbstractAwakenedCard) card).isSecondDamageModified; + } + return false; + } + + public void setIsModified(AbstractCard card, boolean v) { + if (card instanceof AbstractAwakenedCard) { + ((AbstractAwakenedCard) card).isSecondDamageModified = v; + } + } + + @Override + public int value(AbstractCard card) { + if (card instanceof AbstractAwakenedCard) { + return ((AbstractAwakenedCard) card).secondDamage; + } + return -1; + } + + @Override + public int baseValue(AbstractCard card) { + if (card instanceof AbstractAwakenedCard) { + return ((AbstractAwakenedCard) card).baseSecondDamage; + } + return -1; + } + + @Override + public boolean upgraded(AbstractCard card) { + if (card instanceof AbstractAwakenedCard) { + return ((AbstractAwakenedCard) card).upgradedSecondDamage; + } + return false; + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/cardvars/SecondMagicNumber.java b/src/main/java/awakenedOne/cards/cardvars/SecondMagicNumber.java new file mode 100644 index 000000000..34de38c52 --- /dev/null +++ b/src/main/java/awakenedOne/cards/cardvars/SecondMagicNumber.java @@ -0,0 +1,53 @@ +package awakenedOne.cards.cardvars; + +import awakenedOne.cards.AbstractAwakenedCard; +import basemod.abstracts.DynamicVariable; +import com.megacrit.cardcrawl.cards.AbstractCard; + +import static awakenedOne.AwakenedOneMod.makeID; + +public class SecondMagicNumber extends DynamicVariable { + + @Override + public String key() { + return makeID("m2"); + } + + @Override + public boolean isModified(AbstractCard card) { + if (card instanceof AbstractAwakenedCard) { + return ((AbstractAwakenedCard) card).isSecondMagicModified; + } + return false; + } + + @Override + public int value(AbstractCard card) { + if (card instanceof AbstractAwakenedCard) { + return ((AbstractAwakenedCard) card).secondMagic; + } + return -1; + } + + public void setIsModified(AbstractCard card, boolean v) { + if (card instanceof AbstractAwakenedCard) { + ((AbstractAwakenedCard) card).isSecondMagicModified = v; + } + } + + @Override + public int baseValue(AbstractCard card) { + if (card instanceof AbstractAwakenedCard) { + return ((AbstractAwakenedCard) card).baseSecondMagic; + } + return -1; + } + + @Override + public boolean upgraded(AbstractCard card) { + if (card instanceof AbstractAwakenedCard) { + return ((AbstractAwakenedCard) card).upgradedSecondMagic; + } + return false; + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/cardvars/ThirdMagicNumber.java b/src/main/java/awakenedOne/cards/cardvars/ThirdMagicNumber.java new file mode 100644 index 000000000..0c4da3e47 --- /dev/null +++ b/src/main/java/awakenedOne/cards/cardvars/ThirdMagicNumber.java @@ -0,0 +1,53 @@ +package awakenedOne.cards.cardvars; + +import awakenedOne.cards.AbstractAwakenedCard; +import basemod.abstracts.DynamicVariable; +import com.megacrit.cardcrawl.cards.AbstractCard; + +import static awakenedOne.AwakenedOneMod.makeID; + +public class ThirdMagicNumber extends DynamicVariable { + + @Override + public String key() { + return makeID("m3"); + } + + @Override + public boolean isModified(AbstractCard card) { + if (card instanceof AbstractAwakenedCard) { + return ((AbstractAwakenedCard) card).isThirdMagicModified; + } + return false; + } + + @Override + public int value(AbstractCard card) { + if (card instanceof AbstractAwakenedCard) { + return ((AbstractAwakenedCard) card).thirdMagic; + } + return -1; + } + + public void setIsModified(AbstractCard card, boolean v) { + if (card instanceof AbstractAwakenedCard) { + ((AbstractAwakenedCard) card).isThirdMagicModified = v; + } + } + + @Override + public int baseValue(AbstractCard card) { + if (card instanceof AbstractAwakenedCard) { + return ((AbstractAwakenedCard) card).baseThirdMagic; + } + return -1; + } + + @Override + public boolean upgraded(AbstractCard card) { + if (card instanceof AbstractAwakenedCard) { + return ((AbstractAwakenedCard) card).upgradedThirdMagic; + } + return false; + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/meme/NotConjureBlade.java b/src/main/java/awakenedOne/cards/meme/NotConjureBlade.java new file mode 100644 index 000000000..ecfa4b7c1 --- /dev/null +++ b/src/main/java/awakenedOne/cards/meme/NotConjureBlade.java @@ -0,0 +1,68 @@ +package awakenedOne.cards.meme; + +import awakenedOne.actions.ConjureBladeSpellPileAction; +import basemod.patches.com.megacrit.cardcrawl.screens.compendium.CardLibraryScreen.NoCompendium; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.purple.ConjureBlade; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.localization.CardStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import downfall.util.CardIgnore; + +@CardIgnore +@NoCompendium + +public class NotConjureBlade extends ConjureBlade { + public static final String ID = "awakened:NotConjureBlade"; + public static final String NAME; + public static final String DESCRIPTION; + public static final String[] EXTENDED_DESCRIPTION; + public static final String IMG_PATH = "purple/skill/conjure_blade"; + private static final CardStrings cardStrings; + private static final CardType TYPE = CardType.SKILL; + private static final CardRarity RARITY = CardRarity.RARE; + private static final CardTarget TARGET = CardTarget.SELF; + private static final int COST = -1; + public static String UPGRADED_DESCRIPTION; + + static { + cardStrings = CardCrawlGame.languagePack.getCardStrings("ConjureBlade"); + NAME = cardStrings.NAME; + DESCRIPTION = cardStrings.DESCRIPTION; + UPGRADED_DESCRIPTION = cardStrings.UPGRADE_DESCRIPTION; + EXTENDED_DESCRIPTION = cardStrings.EXTENDED_DESCRIPTION; + } + + +// public NotConjureBlade() { +// super(ID, NAME, IMG_PATH, COST, DESCRIPTION, TYPE, CardColor.PURPLE, RARITY, TARGET); +// this.cardsToPreview = new Expunger(); +// this.exhaust = true; +// this.tags.add(AwakenedOneMod.DELVE); +// } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + if (this.upgraded) { + this.addToBot(new ConjureBladeSpellPileAction(p, this.freeToPlayOnce, this.energyOnUse + 1)); + } else { + this.addToBot(new ConjureBladeSpellPileAction(p, this.freeToPlayOnce, this.energyOnUse)); + } + } + + @Override + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + this.rawDescription = cardStrings.UPGRADE_DESCRIPTION; + this.initializeDescription(); + } + } + + @Override + public AbstractCard makeCopy() { + return new NotConjureBlade(); + } + +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/tokens/Ceremony.java b/src/main/java/awakenedOne/cards/tokens/Ceremony.java new file mode 100644 index 000000000..c776094e7 --- /dev/null +++ b/src/main/java/awakenedOne/cards/tokens/Ceremony.java @@ -0,0 +1,41 @@ +package awakenedOne.cards.tokens; + +import awakenedOne.cards.AbstractAwakenedCard; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.StrengthPower; +import com.megacrit.cardcrawl.vfx.combat.InflameEffect; + +import static awakenedOne.AwakenedOneMod.*; + +public class Ceremony extends AbstractAwakenedCard { + public final static String ID = makeID(Ceremony.class.getSimpleName()); + // intellij stuff attack, enemy, special, 3, 2, , , , + + public Ceremony() { + super(ID, 0, CardType.POWER, CardRarity.SPECIAL, CardTarget.SELF, CardColor.COLORLESS); + this.baseMagicNumber = 1; + this.magicNumber = this.baseMagicNumber; + //selfRetain = true; + this.setBackgroundTexture("awakenedResources/images/512/bg_power_awakened.png", "awakenedResources/images/1024/bg_power_awakened.png"); + this.isEthereal = true; + this.baseSecondMagic = 2; + this.secondMagic = this.baseSecondMagic; + loadJokeCardImage(this, makeBetaCardPath(Ceremony.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + this.addToBot(new VFXAction(p, new InflameEffect(p), .1F)); + this.addToBot(new ApplyPowerAction(p, p, new StrengthPower(p, this.magicNumber), this.magicNumber)); + // applyToSelf(new StrengthOverTurnsPower(1, this.magicNumber)); + } + + @Override + public void upp() { + //upgradeMagicNumber(1); + selfRetain = true; + this.isEthereal = false; + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/tokens/PlumeJab.java b/src/main/java/awakenedOne/cards/tokens/PlumeJab.java new file mode 100644 index 000000000..e001a394f --- /dev/null +++ b/src/main/java/awakenedOne/cards/tokens/PlumeJab.java @@ -0,0 +1,31 @@ +package awakenedOne.cards.tokens; + +import awakenedOne.cards.AbstractAwakenedCard; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.AttackDamageRandomEnemyAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import static awakenedOne.AwakenedOneMod.*; + +public class PlumeJab extends AbstractAwakenedCard { + public final static String ID = makeID(PlumeJab.class.getSimpleName()); + // intellij stuff attack, enemy, special, 3, 2, , , , + + public PlumeJab() { + super(ID, 0, CardType.ATTACK, CardRarity.SPECIAL, CardTarget.ALL_ENEMY, CardColor.COLORLESS); + baseDamage = 2; + loadJokeCardImage(this, makeBetaCardPath(PlumeJab.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + for (int i = 0; i < 2; ++i) { + this.addToBot(new AttackDamageRandomEnemyAction(this, AbstractGameAction.AttackEffect.SLASH_HORIZONTAL)); + } + } + + @Override + public void upp() { + upgradeDamage(1); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/tokens/spells/AbstractSpellCard.java b/src/main/java/awakenedOne/cards/tokens/spells/AbstractSpellCard.java new file mode 100644 index 000000000..bca7d1c59 --- /dev/null +++ b/src/main/java/awakenedOne/cards/tokens/spells/AbstractSpellCard.java @@ -0,0 +1,71 @@ +package awakenedOne.cards.tokens.spells; + +import awakenedOne.cards.AbstractAwakenedCard; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.localization.UIStrings; + +import java.util.Collections; +import java.util.List; + +import static awakenedOne.AwakenedOneMod.makeID; + +public abstract class AbstractSpellCard extends AbstractAwakenedCard { + private static final UIStrings uiStrings = CardCrawlGame.languagePack.getUIString(makeID("SpellDescriptor")); + + public AbstractSpellCard(String cardID, final int cost, CardType type, CardTarget target) { + super(cardID, cost, type, CardRarity.SPECIAL, target, CardColor.COLORLESS); + this.selfRetain = true; + exhaust = true; + } + + +// @Override +// public void applyPowers() { +// if ((AbstractDungeon.player != null) && (AbstractDungeon.player.hasRelic(StrengthBooster.ID))) { +// +// int realBaseDamage = this.baseDamage; +// this.baseDamage += StrengthBooster.AMOUNT; +// +// int realBaseBlock = this.baseBlock; +// this.baseBlock += StrengthBooster.AMOUNT; +// +// super.applyPowers(); +// +// this.baseDamage = realBaseDamage; +// this.isDamageModified = this.damage != this.baseDamage; +// this.baseBlock = realBaseBlock; +// this.isBlockModified = this.block != this.baseBlock; +// +// } +// super.applyPowers(); +// } +// +// public void calculateCardDamage(AbstractMonster mo) { +// if ((AbstractDungeon.player != null) && (AbstractDungeon.player.hasRelic(StrengthBooster.ID))) { +// +// int realBaseDamage = this.baseDamage; +// +// if (AbstractDungeon.player.hasRelic(StrengthBooster.ID)) { +// this.baseDamage += StrengthBooster.AMOUNT; +// } +// +// int realBaseBlock = this.baseBlock; +// if (AbstractDungeon.player.hasRelic(StrengthBooster.ID)) { +// this.baseBlock += StrengthBooster.AMOUNT; +// } +// +// super.calculateCardDamage(mo); +// +// this.baseDamage = realBaseDamage; +// this.isDamageModified = this.damage != this.baseDamage; +// +// this.baseBlock = realBaseBlock; +// this.isBlockModified = this.block != this.baseBlock; +// } +// } + + @Override + public List getCardDescriptors() { + return Collections.singletonList(uiStrings.TEXT[0]); + } +} diff --git a/src/main/java/awakenedOne/cards/tokens/spells/AphoticShield.java b/src/main/java/awakenedOne/cards/tokens/spells/AphoticShield.java new file mode 100644 index 000000000..7c65ccc37 --- /dev/null +++ b/src/main/java/awakenedOne/cards/tokens/spells/AphoticShield.java @@ -0,0 +1,35 @@ +package awakenedOne.cards.tokens.spells; + +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.MetallicizePower; +import com.megacrit.cardcrawl.powers.PlatedArmorPower; + +import static awakenedOne.AwakenedOneMod.*; + +public class AphoticShield extends AbstractSpellCard { + public final static String ID = makeID(AphoticShield.class.getSimpleName()); + // intellij stuff skill, self, , , , , 2, 1 + + public AphoticShield() { + super(ID, 1, CardType.SKILL, CardTarget.SELF); + baseMagicNumber = magicNumber = 5; + this.setBackgroundTexture("awakenedResources/images/512/bg_skill_awakened.png", "awakenedResources/images/1024/bg_skill_awakened.png"); + loadJokeCardImage(this, makeBetaCardPath(AphoticShield.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + if (!upgraded) { + this.addToBot(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new PlatedArmorPower(AbstractDungeon.player, magicNumber), magicNumber)); + } + if (upgraded) { + this.addToBot(new ApplyPowerAction(p, p, new MetallicizePower(p, this.magicNumber), this.magicNumber)); + } + } + + public void upp() { + //upgradeMagicNumber(1); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/tokens/spells/BurningStudy.java b/src/main/java/awakenedOne/cards/tokens/spells/BurningStudy.java new file mode 100644 index 000000000..b30757f10 --- /dev/null +++ b/src/main/java/awakenedOne/cards/tokens/spells/BurningStudy.java @@ -0,0 +1,39 @@ +package awakenedOne.cards.tokens.spells; + +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.StrengthPower; +import com.megacrit.cardcrawl.vfx.combat.InflameEffect; + +import static awakenedOne.AwakenedOneMod.*; +import static awakenedOne.util.Wiz.applyToSelf; + +public class BurningStudy extends AbstractSpellCard { + public final static String ID = makeID(BurningStudy.class.getSimpleName()); + // intellij stuff skill, self, , , , , 2, 1 + + public BurningStudy() { + super(ID, 1, CardType.POWER, CardTarget.SELF); + baseMagicNumber = magicNumber = 2; + this.setBackgroundTexture("awakenedResources/images/512/bg_power_awakened.png", "awakenedResources/images/1024/bg_power_awakened.png"); + loadJokeCardImage(this, makeBetaCardPath(BurningStudy.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { +// int roll = MathUtils.random(2); +// if (roll == 0) { +// AbstractDungeon.actionManager.addToBottom(new SFXAction("VO_CULTIST_1A")); +// } else if (roll == 1) { +// AbstractDungeon.actionManager.addToBottom(new SFXAction("VO_CULTIST_1B")); +// } else { +// AbstractDungeon.actionManager.addToBottom(new SFXAction("VO_CULTIST_1C")); +// } + this.addToBot(new VFXAction(p, new InflameEffect(p), 1.0F)); + applyToSelf(new StrengthPower(p, magicNumber)); + } + + public void upp() { + upgradeMagicNumber(2); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/tokens/spells/Cryostasis.java b/src/main/java/awakenedOne/cards/tokens/spells/Cryostasis.java new file mode 100644 index 000000000..2fe28a4ad --- /dev/null +++ b/src/main/java/awakenedOne/cards/tokens/spells/Cryostasis.java @@ -0,0 +1,62 @@ +package awakenedOne.cards.tokens.spells; + +import awakenedOne.relics.EyeOfTheOccult; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.WeakPower; +import com.megacrit.cardcrawl.vfx.combat.FrostOrbActivateEffect; + +import static awakenedOne.AwakenedOneMod.*; +import static awakenedOne.util.Wiz.atb; + +public class Cryostasis extends AbstractSpellCard { + public final static String ID = makeID(Cryostasis.class.getSimpleName()); + // intellij stuff skill, self, , , 7, 1, 1, 1 + + public Cryostasis() { + super(ID, 1, CardType.SKILL, CardTarget.ENEMY); + baseBlock = 8; + baseMagicNumber = magicNumber = 1; + this.setBackgroundTexture("awakenedResources/images/512/bg_skill_awakened.png", "awakenedResources/images/1024/bg_skill_awakened.png"); + loadJokeCardImage(this, makeBetaCardPath(Cryostasis.class.getSimpleName() + ".png")); + } + + @Override + public void applyPowers() { + super.applyPowers(); + if (AbstractDungeon.player.hasRelic(EyeOfTheOccult.ID)) { + target = CardTarget.ALL_ENEMY; + } + } + + public void use(AbstractPlayer p, AbstractMonster m) { + CardCrawlGame.sound.play("ORB_FROST_CHANNEL", 0.1F); + AbstractDungeon.effectsQueue.add(new FrostOrbActivateEffect(p.hb.cX, p.hb.cY)); + blck(); + + // if (upgraded) { + if (!AbstractDungeon.player.hasRelic(EyeOfTheOccult.ID)) { + atb(new ApplyPowerAction(m, AbstractDungeon.player, new WeakPower(m, this.magicNumber, false), this.magicNumber, true, AbstractGameAction.AttackEffect.LIGHTNING)); + } + + if (AbstractDungeon.player.hasRelic(EyeOfTheOccult.ID)) { + //AbstractDungeon.player.getRelic(EyeOfTheOccult.ID).flash(); + for (AbstractMonster monster : AbstractDungeon.getMonsters().monsters) { + if (!monster.isDead && !monster.isDying) { + addToBot(new ApplyPowerAction(monster, p, new WeakPower(monster, this.magicNumber, false), this.magicNumber, true, AbstractGameAction.AttackEffect.LIGHTNING)); + // } + } + } + } + } + + + public void upp() { + upgradeBlock(2); + upgradeMagicNumber(1); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/tokens/spells/Darkleech.java b/src/main/java/awakenedOne/cards/tokens/spells/Darkleech.java new file mode 100644 index 000000000..fc4c535a8 --- /dev/null +++ b/src/main/java/awakenedOne/cards/tokens/spells/Darkleech.java @@ -0,0 +1,56 @@ +package awakenedOne.cards.tokens.spells; + +import awakenedOne.relics.EyeOfTheOccult; +import com.badlogic.gdx.graphics.Color; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.VulnerablePower; +import com.megacrit.cardcrawl.vfx.combat.GiantEyeEffect; + +import java.util.Iterator; + +import static awakenedOne.AwakenedOneMod.*; + +public class Darkleech extends AbstractSpellCard { + public final static String ID = makeID(Darkleech.class.getSimpleName()); + // intellij stuff skill, all_enemy, , , , , 7, 2 + + public Darkleech() { + super(ID, 1, CardType.SKILL, CardTarget.ENEMY); + baseMagicNumber = magicNumber = 2; + this.setBackgroundTexture("awakenedResources/images/512/bg_skill_awakened.png", "awakenedResources/images/1024/bg_skill_awakened.png"); + loadJokeCardImage(this, makeBetaCardPath(Darkleech.class.getSimpleName() + ".png")); + } + + @Override + public void applyPowers() { + super.applyPowers(); + if (AbstractDungeon.player.hasRelic(EyeOfTheOccult.ID)) { + target = CardTarget.ALL_ENEMY; + } + } + + public void use(AbstractPlayer p, AbstractMonster m) { + if (!AbstractDungeon.player.hasRelic(EyeOfTheOccult.ID)) { + this.addToBot(new VFXAction(new GiantEyeEffect(m.hb.cX, m.hb.cY + 300.0F * Settings.scale, new Color(1.0F, 0.3F, 1.0F, 0.0F)))); + this.addToBot(new ApplyPowerAction(m, p, new VulnerablePower(m, this.magicNumber, false), this.magicNumber)); + } else { + Iterator var3 = AbstractDungeon.getCurrRoom().monsters.monsters.iterator(); + while (var3.hasNext()) { + AbstractMonster mo = (AbstractMonster) var3.next(); + this.addToBot(new VFXAction(new GiantEyeEffect(mo.hb.cX, mo.hb.cY + 300.0F * Settings.scale, new Color(1.0F, 0.3F, 1.0F, 0.0F)))); + this.addToBot(new ApplyPowerAction(mo, p, new VulnerablePower(mo, this.magicNumber, false), this.magicNumber, true, AbstractGameAction.AttackEffect.NONE)); + } + } + + } + + public void upp() { + upgradeMagicNumber(2); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/tokens/spells/ESPSpell.java b/src/main/java/awakenedOne/cards/tokens/spells/ESPSpell.java new file mode 100644 index 000000000..e5a666c63 --- /dev/null +++ b/src/main/java/awakenedOne/cards/tokens/spells/ESPSpell.java @@ -0,0 +1,29 @@ +package awakenedOne.cards.tokens.spells; + +import com.megacrit.cardcrawl.actions.common.DrawCardAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import static awakenedOne.AwakenedOneMod.*; +import static awakenedOne.util.Wiz.atb; + +public class ESPSpell extends AbstractSpellCard { + public final static String ID = makeID(ESPSpell.class.getSimpleName()); + // intellij stuff skill, all_enemy, , , , , 7, 2 + + public ESPSpell() { + super(ID, 0, CardType.SKILL, CardTarget.SELF); + baseMagicNumber = magicNumber = 1; + this.setBackgroundTexture("awakenedResources/images/512/bg_skill_awakened.png", "awakenedResources/images/1024/bg_skill_awakened.png"); + loadJokeCardImage(this, makeBetaCardPath(ESPSpell.class.getSimpleName() + ".png")); + } + + + public void use(AbstractPlayer p, AbstractMonster m) { + atb(new DrawCardAction(magicNumber)); + } + + public void upp() { + upgradeMagicNumber(1); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/tokens/spells/Thunderbolt.java b/src/main/java/awakenedOne/cards/tokens/spells/Thunderbolt.java new file mode 100644 index 000000000..c42dd29e2 --- /dev/null +++ b/src/main/java/awakenedOne/cards/tokens/spells/Thunderbolt.java @@ -0,0 +1,66 @@ +package awakenedOne.cards.tokens.spells; + +import awakenedOne.relics.EyeOfTheOccult; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.actions.common.DamageAllEnemiesAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.vfx.combat.LightningEffect; +import com.megacrit.cardcrawl.vfx.combat.ReaperEffect; + +import static awakenedOne.AwakenedOneMod.*; +import static awakenedOne.util.Wiz.vfx; + +public class Thunderbolt extends AbstractSpellCard { + public final static String ID = makeID(Thunderbolt.class.getSimpleName()); + // intellij stuff attack, enemy, 13, 6, , , , + + public Thunderbolt() { + super(ID, 1, CardType.ATTACK, CardTarget.ENEMY); + baseDamage = 12; + this.setBackgroundTexture("awakenedResources/images/512/bg_attack_awakened.png", "awakenedResources/images/1024/bg_attack_awakened.png"); + loadJokeCardImage(this, makeBetaCardPath(Thunderbolt.class.getSimpleName() + ".png")); + } + + @Override + public void applyPowers() { + super.applyPowers(); + if (AbstractDungeon.player.hasRelic(EyeOfTheOccult.ID)) { + target = CardTarget.ALL_ENEMY; + } + } + + public void use(AbstractPlayer p, AbstractMonster m) { + if (!AbstractDungeon.player.hasRelic(EyeOfTheOccult.ID)) { + CardCrawlGame.sound.playA("ORB_LIGHTNING_EVOKE", 0.9F); + CardCrawlGame.sound.playA("ORB_LIGHTNING_PASSIVE", -0.3F); + vfx(new LightningEffect(m.hb.cX, m.hb.cY)); + dmg(m, AbstractGameAction.AttackEffect.NONE); + } else { + //AbstractDungeon.player.getRelic(EyeOfTheOccult.ID).flash(); + this.addToBot(new VFXAction(new ReaperEffect())); + this.addToBot(new DamageAllEnemiesAction(p, this.multiDamage, this.damageTypeForTurn, AbstractGameAction.AttackEffect.NONE)); + } + + if (upgraded) { + if (!AbstractDungeon.player.hasRelic(EyeOfTheOccult.ID)) { + CardCrawlGame.sound.playA("ORB_LIGHTNING_EVOKE", 0.9F); + CardCrawlGame.sound.playA("ORB_LIGHTNING_PASSIVE", -0.3F); + vfx(new LightningEffect(m.hb.cX, m.hb.cY)); + dmg(m, AbstractGameAction.AttackEffect.NONE); + } else { + //AbstractDungeon.player.getRelic(EyeOfTheOccult.ID).flash(); + this.addToBot(new VFXAction(new ReaperEffect())); + this.addToBot(new DamageAllEnemiesAction(p, this.multiDamage, this.damageTypeForTurn, AbstractGameAction.AttackEffect.NONE)); + } + } + + } + + public void upp() { + upgradeDamage(-6); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/effects/IroncladVictoryFlameEffectBlue.java b/src/main/java/awakenedOne/effects/IroncladVictoryFlameEffectBlue.java new file mode 100644 index 000000000..934388a5f --- /dev/null +++ b/src/main/java/awakenedOne/effects/IroncladVictoryFlameEffectBlue.java @@ -0,0 +1,80 @@ +package awakenedOne.effects; + +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +import awakenedOne.AwakenedOneMod; +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.graphics.g2d.TextureAtlas; +import com.badlogic.gdx.math.Interpolation; +import com.badlogic.gdx.math.MathUtils; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.helpers.ImageMaster; +import com.megacrit.cardcrawl.vfx.AbstractGameEffect; + +public class IroncladVictoryFlameEffectBlue extends AbstractGameEffect { + private float x; + private float y; + private final float vX; + private final float vY; + private final boolean flipX = MathUtils.randomBoolean(); + private final TextureAtlas.AtlasRegion img; + + public IroncladVictoryFlameEffectBlue() { + this.duration = 1.0F; + this.startingDuration = this.duration; + this.renderBehind = MathUtils.randomBoolean(); + switch (MathUtils.random(2)) { + case 0: + this.img = ImageMaster.FLAME_1; + break; + case 1: + this.img = ImageMaster.FLAME_2; + break; + default: + this.img = ImageMaster.FLAME_3; + } + + this.x = MathUtils.random(600.0F, 1320.0F) * Settings.xScale - (float) this.img.packedWidth / 2.0F; + this.y = -300.0F * Settings.scale - (float) this.img.packedHeight / 2.0F; + if (this.x > 960.0F * Settings.xScale) { + this.vX = MathUtils.random(0.0F, -120.0F) * Settings.xScale; + } else { + this.vX = MathUtils.random(120.0F, 0.0F) * Settings.xScale; + } + + this.vY = MathUtils.random(600.0F, 800.0F) * Settings.scale; + this.color = AwakenedOneMod.placeholderColor; + this.renderBehind = false; + this.scale = MathUtils.random(6.0F, 7.0F) * Settings.scale; + } + + public void update() { + this.x += this.vX * Gdx.graphics.getDeltaTime(); + this.y += this.vY * Gdx.graphics.getDeltaTime(); + this.color.a = Interpolation.pow3Out.apply(0.0F, 0.8F, this.duration / this.startingDuration); + this.duration -= Gdx.graphics.getDeltaTime(); + this.scale += Gdx.graphics.getDeltaTime(); + if (this.duration < 0.0F) { + this.isDone = true; + } + + } + + public void render(SpriteBatch sb) { + sb.setColor(this.color); + if (this.flipX && !this.img.isFlipX()) { + this.img.flip(true, false); + } else if (!this.flipX && this.img.isFlipX()) { + this.img.flip(true, false); + } + + sb.draw(this.img, this.x, this.y, (float) this.img.packedWidth / 2.0F, (float) this.img.packedHeight / 2.0F, (float) this.img.packedWidth, (float) this.img.packedHeight, this.scale, this.scale, this.rotation); + } + + public void dispose() { + } +} diff --git a/src/main/java/awakenedOne/effects/ReverseAwakenedWingParticle.java b/src/main/java/awakenedOne/effects/ReverseAwakenedWingParticle.java new file mode 100644 index 000000000..ffebd4ca7 --- /dev/null +++ b/src/main/java/awakenedOne/effects/ReverseAwakenedWingParticle.java @@ -0,0 +1,93 @@ +package awakenedOne.effects; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.graphics.g2d.TextureAtlas; +import com.badlogic.gdx.math.Interpolation; +import com.badlogic.gdx.math.MathUtils; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.helpers.ImageMaster; +import com.megacrit.cardcrawl.vfx.AbstractGameEffect; + +public class ReverseAwakenedWingParticle extends AbstractGameEffect { + private float x; + private float y; + private float tScale; + private final TextureAtlas.AtlasRegion img; + + public ReverseAwakenedWingParticle() { + this.duration = 2.0F; + this.startingDuration = this.duration; + this.img = ImageMaster.THICK_3D_LINE_2; + this.scale = 0.01F; + this.rotation = -MathUtils.random(25.0F, 85.0F); + this.renderBehind = MathUtils.randomBoolean(0.2F); + if (this.renderBehind) { + this.tScale = MathUtils.random(0.8F, 1.2F); + } + + this.color = new Color(0.3F, 0.3F, MathUtils.random(0.3F, 0.35F), MathUtils.random(0.5F, 0.9F)); + int roll = MathUtils.random(0, 2); + if (roll == 0) { + this.x = MathUtils.random(-340.0F, -170.0F) * Settings.scale; + this.y = MathUtils.random(-20.0F, 20.0F) * Settings.scale; + this.tScale = MathUtils.random(0.4F, 0.5F); + } else if (roll == 1) { + this.x = MathUtils.random(-220.0F, -20.0F) * Settings.scale; + this.y = MathUtils.random(-40.0F, -10.0F) * Settings.scale; + this.tScale = MathUtils.random(0.4F, 0.5F); + } else { + this.x = MathUtils.random(-270.0F, -60.0F) * Settings.scale; + this.y = MathUtils.random(-30.0F, -0.0F) * Settings.scale; + this.tScale = MathUtils.random(0.4F, 0.7F); + } + + this.x += 155.0F * Settings.scale; + this.y += 30.0F * Settings.scale; + this.x -= (float) (this.img.packedWidth / 2); + this.y -= (float) (this.img.packedHeight / 2); + } + + public void update() { + this.duration -= Gdx.graphics.getDeltaTime(); + if (this.duration < 0.0F) { + this.isDone = true; + } + + if (this.duration > 1.0F) { + this.scale = Interpolation.bounceIn.apply(this.tScale, 0.01F, this.duration - 1.0F) * Settings.scale; + } + + if (this.duration < 0.2F) { + this.color.a = Interpolation.fade.apply(0.0F, 0.5F, this.duration * 5.0F); + } + + } + + public void render(SpriteBatch sb) { + //this.img.flip(true, false); + + } + + public void render(SpriteBatch sb, float x, float y) { + + // if (!this.img.isFlipX()) { + // this.img.flip(true, false); + // } + + float derp = MathUtils.random(3.0F, 5.0F); + + sb.setColor(new Color(0.4F, 1.0F, 1.0F, this.color.a / 2.0F)); + sb.setBlendFunction(770, 1); + sb.draw(this.img, this.x + x, this.y + y, (float) this.img.packedWidth * 0.08F, (float) this.img.packedHeight / 2.0F, (float) this.img.packedWidth, (float) this.img.packedHeight, (this.scale * MathUtils.random(1.1F, 1.25F)), this.scale, this.rotation + derp + 180.0F); + sb.setBlendFunction(770, 771); + sb.setColor(this.color); + sb.draw(this.img, this.x + x, this.y + y, (float) this.img.packedWidth * 0.08F, (float) this.img.packedHeight / 2.0F, (float) this.img.packedWidth, (float) this.img.packedHeight, this.scale, this.scale, this.rotation + derp + 180.0F); + sb.setColor(new Color(0.0F, 0.0F, 0.0F, this.color.a / 5.0F)); + sb.draw(this.img, this.x + x, this.y + y, (float) this.img.packedWidth * 0.08F, (float) this.img.packedHeight / 2.0F, (float) this.img.packedWidth, (float) this.img.packedHeight, (this.scale * 0.7F), this.scale * 0.7F, this.rotation + derp - 40.0F + 180.0F); + } + + public void dispose() { + } +} diff --git a/src/main/java/awakenedOne/events/BackToBasicsAwakened.java b/src/main/java/awakenedOne/events/BackToBasicsAwakened.java new file mode 100644 index 000000000..46a9a8dad --- /dev/null +++ b/src/main/java/awakenedOne/events/BackToBasicsAwakened.java @@ -0,0 +1,168 @@ +package awakenedOne.events; + +import awakenedOne.cardmods.DrainingMod; +import awakenedOne.cards.Strike; +import basemod.helpers.CardModifierManager; +import com.badlogic.gdx.math.MathUtils; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.CardGroup; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.events.AbstractImageEvent; +import com.megacrit.cardcrawl.localization.EventStrings; +import com.megacrit.cardcrawl.vfx.cardManip.PurgeCardEffect; +import com.megacrit.cardcrawl.vfx.cardManip.ShowCardBrieflyEffect; + +import java.util.ArrayList; +import java.util.List; + +public class BackToBasicsAwakened extends AbstractImageEvent { + public static final String ID = "awakened:BackToBasics"; + public static final String NAME; + public static final String[] DESCRIPTIONS; + public static final String[] OPTIONS; + public static final String[] DESCRIPTIONSGUARDIAN; + public static final String[] OPTIONSGUARDIAN; + private static final EventStrings eventStrings; + private static final EventStrings eventStringsGuardian; + private static final String DIALOG_1; + private static final String DIALOG_2; + private static final String DIALOG_3; + + static { + eventStrings = CardCrawlGame.languagePack.getEventString("Back to Basics"); + NAME = eventStrings.NAME; + DESCRIPTIONS = eventStrings.DESCRIPTIONS; + OPTIONS = eventStrings.OPTIONS; + DIALOG_1 = DESCRIPTIONS[0]; + DIALOG_2 = DESCRIPTIONS[1]; + DIALOG_3 = DESCRIPTIONS[2]; + eventStringsGuardian = CardCrawlGame.languagePack.getEventString("awakened:BackToBasics"); + DESCRIPTIONSGUARDIAN = eventStringsGuardian.DESCRIPTIONS; + OPTIONSGUARDIAN = eventStringsGuardian.OPTIONS; + } + + private BackToBasicsAwakened.CUR_SCREEN screen; + private final List cardsUpgraded; + private final ArrayList cardsToRemove; + + public BackToBasicsAwakened() { + super(NAME, DIALOG_1, "images/events/backToBasics.jpg"); + this.screen = BackToBasicsAwakened.CUR_SCREEN.INTRO; + this.cardsUpgraded = new ArrayList(); + + for (AbstractCard c : AbstractDungeon.player.masterDeck.group) { + c.update(); + } + + cardsToRemove = new ArrayList<>(); + + for (AbstractCard c : AbstractDungeon.player.masterDeck.group) { + if (c.hasTag(AbstractCard.CardTags.STARTER_STRIKE)) { + cardsToRemove.add(c); + } + if (c.hasTag(AbstractCard.CardTags.STARTER_DEFEND)) { + cardsToRemove.add(c); + } + } + + AbstractCard card = new Strike(); + + CardModifierManager.addModifier(card, new DrainingMod()); + + if (cardsToRemove.size() >= 1) { + this.imageEventText.setDialogOption(OPTIONSGUARDIAN[0], card); + + } else { + this.imageEventText.setDialogOption(OPTIONSGUARDIAN[1], true); + + } + + + this.imageEventText.setDialogOption(OPTIONS[0]); + this.imageEventText.setDialogOption(OPTIONS[1]); + + + } + + public void onEnterRoom() { + if (Settings.AMBIANCE_ON) { + CardCrawlGame.sound.play("EVENT_ANCIENT"); + } + + this.cardsUpgraded.clear(); + } + + public void update() { + super.update(); + if (!AbstractDungeon.gridSelectScreen.selectedCards.isEmpty()) { + AbstractCard c = AbstractDungeon.gridSelectScreen.selectedCards.get(0); + AbstractDungeon.effectList.add(new PurgeCardEffect(c)); + AbstractDungeon.player.masterDeck.removeCard(c); + AbstractDungeon.gridSelectScreen.selectedCards.remove(c); + logMetricCardRemoval(ID, "Elegance", c); + } + } + + protected void buttonEffect(int buttonPressed) { + switch (this.screen) { + case INTRO: + if (buttonPressed == 0) { + + this.imageEventText.updateBodyText(DESCRIPTIONSGUARDIAN[0]); + + ArrayList cardsDrained = new ArrayList<>(); + for (AbstractCard c : cardsToRemove) { + CardModifierManager.addModifier(c, new DrainingMod()); + cardsDrained.add(c.cardID); + } + logMetricUpgradeCards(ID, "Desperation", cardsDrained); + + + this.imageEventText.updateDialogOption(0, OPTIONS[3]); + this.imageEventText.clearRemainingOptions(); + } else if (buttonPressed == 1) { + if (CardGroup.getGroupWithoutBottledCards(AbstractDungeon.player.masterDeck.getPurgeableCards()).size() > 0) { + this.imageEventText.updateBodyText(DIALOG_2); + AbstractDungeon.gridSelectScreen.open(CardGroup.getGroupWithoutBottledCards(AbstractDungeon.player.masterDeck.getPurgeableCards()), 1, OPTIONS[2], false); + } + + this.imageEventText.updateDialogOption(0, OPTIONS[3]); + this.imageEventText.clearRemainingOptions(); + } else { + this.imageEventText.updateBodyText(DIALOG_3); + this.upgradeStrikeAndDefends(); + this.imageEventText.updateDialogOption(0, OPTIONS[3]); + this.imageEventText.clearRemainingOptions(); + } + + this.screen = BackToBasicsAwakened.CUR_SCREEN.COMPLETE; + break; + case COMPLETE: + this.openMap(); + } + + } + + + private void upgradeStrikeAndDefends() { + for (AbstractCard c : AbstractDungeon.player.masterDeck.group) { + if (c.canUpgrade() && (c.hasTag(AbstractCard.CardTags.STARTER_DEFEND) || c.hasTag(AbstractCard.CardTags.STARTER_STRIKE))) { + c.upgrade(); + this.cardsUpgraded.add(c.cardID); + AbstractDungeon.player.bottledCardUpgradeCheck(c); + AbstractDungeon.effectList.add(new ShowCardBrieflyEffect(c.makeStatEquivalentCopy(), MathUtils.random(0.1F, 0.9F) * (float) Settings.WIDTH, MathUtils.random(0.2F, 0.8F) * (float) Settings.HEIGHT)); + } + } + logMetricUpgradeCards(ID, "Simplicity", cardsUpgraded); + } + + private enum CUR_SCREEN { + INTRO, + COMPLETE; + + CUR_SCREEN() { + } + } +} diff --git a/src/main/java/awakenedOne/events/TheNestAwakened.java b/src/main/java/awakenedOne/events/TheNestAwakened.java new file mode 100644 index 000000000..fefc6d3f4 --- /dev/null +++ b/src/main/java/awakenedOne/events/TheNestAwakened.java @@ -0,0 +1,183 @@ +package awakenedOne.events; + +import awakenedOne.potions.CultistsDelight; +import awakenedOne.relics.EyeOfTheOccult; +import com.badlogic.gdx.math.MathUtils; +import com.megacrit.cardcrawl.cards.curses.Doubt; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.events.AbstractImageEvent; +import com.megacrit.cardcrawl.helpers.PotionHelper; +import com.megacrit.cardcrawl.localization.EventStrings; +import com.megacrit.cardcrawl.relics.AbstractRelic; +import com.megacrit.cardcrawl.rewards.RewardItem; +import com.megacrit.cardcrawl.rooms.AbstractRoom; +import com.megacrit.cardcrawl.vfx.RainingGoldEffect; +import com.megacrit.cardcrawl.vfx.cardManip.ShowCardAndObtainEffect; +import downfall.relics.BrokenWingStatue; + +public class TheNestAwakened extends AbstractImageEvent { + public static final String ID = "awakened:Nest"; + public static final String NAME; + public static final String[] DESCRIPTIONS; + public static final String[] OPTIONS; + private static final EventStrings eventStrings; + + static { + eventStrings = CardCrawlGame.languagePack.getEventString(ID); + NAME = eventStrings.NAME; + DESCRIPTIONS = eventStrings.DESCRIPTIONS; + OPTIONS = eventStrings.OPTIONS; + } + + private int hpAmt = 0; + private int goldAmt = 0; + private CUR_SCREEN screen; + + public TheNestAwakened() { + super(NAME, DESCRIPTIONS[0], "images/events/theNest.jpg"); + this.noCardsInRewards = true; + AbstractDungeon.getCurrRoom().rewards.clear(); + if (AbstractDungeon.player.hasRelic(BrokenWingStatue.ID) || BrokenWingStatue.GIVEN) { + if ((AbstractDungeon.player.hasRelic(BrokenWingStatue.ID))) { + this.imageEventText.setDialogOption(OPTIONS[0]); + } else { + this.imageEventText.setDialogOption(OPTIONS[10]); + } + } else { + this.imageEventText.setDialogOption(OPTIONS[1], true); + } + + if (AbstractDungeon.ascensionLevel >= 15) { + this.hpAmt = MathUtils.round((float) AbstractDungeon.player.maxHealth * 0.25F); + } else { + this.hpAmt = MathUtils.round((float) AbstractDungeon.player.maxHealth * 0.20F); + } + + this.imageEventText.setDialogOption(OPTIONS[3] + hpAmt + OPTIONS[4], new EyeOfTheOccult()); + + this.imageEventText.setDialogOption(OPTIONS[2]); + + if (AbstractDungeon.ascensionLevel >= 15) { + this.goldAmt = 50; + } else { + this.goldAmt = 100; + } + this.imageEventText.setDialogOption(OPTIONS[5] + goldAmt + OPTIONS[6], new Doubt()); + + + this.screen = CUR_SCREEN.INTRO; + + } + + protected void buttonEffect(int buttonPressed) { + switch (this.screen) { + case INTRO: + switch (buttonPressed) { + case 0: + AbstractDungeon.player.loseRelic(BrokenWingStatue.ID); + this.imageEventText.updateBodyText(DESCRIPTIONS[3]); + this.imageEventText.clearAllDialogs(); + this.imageEventText.setDialogOption(OPTIONS[7]); + this.screen = CUR_SCREEN.GIFTSTAGE1; + return; + case 1: + this.screen = CUR_SCREEN.COMPLETE; + logMetric(ID, "Took Eye of the Occult for " + hpAmt + " Max HP."); + this.imageEventText.updateBodyText(DESCRIPTIONS[1]); + CardCrawlGame.sound.play("ATTACK_DAGGER_6"); + CardCrawlGame.sound.play("BLOOD_SPLAT"); + AbstractDungeon.player.maxHealth -= this.hpAmt; + + if (AbstractDungeon.player.currentHealth > AbstractDungeon.player.maxHealth) { + AbstractDungeon.player.currentHealth = AbstractDungeon.player.maxHealth; + } + + AbstractRelic eye = new EyeOfTheOccult(); + AbstractDungeon.getCurrRoom().spawnRelicAndObtain((float) (Settings.WIDTH / 2), (float) (Settings.HEIGHT / 2), eye); + + this.imageEventText.updateDialogOption(0, OPTIONS[7]); + this.imageEventText.clearRemainingOptions(); + + return; + case 2: + logMetric(ID, "Took Potion"); + this.imageEventText.updateBodyText(DESCRIPTIONS[2]); + this.screen = CUR_SCREEN.COMPLETE; + AbstractDungeon.getCurrRoom().rewards.add(new RewardItem(PotionHelper.getPotion(CultistsDelight.POTION_ID))); + AbstractDungeon.getCurrRoom().phase = AbstractRoom.RoomPhase.COMPLETE; + AbstractDungeon.combatRewardScreen.open(); + this.imageEventText.updateDialogOption(0, OPTIONS[7]); + this.imageEventText.clearRemainingOptions(); + return; + case 3: + logMetricGainGold(ID, "Donation Box", this.goldAmt); + this.imageEventText.updateBodyText(DESCRIPTIONS[8]); + this.imageEventText.updateDialogOption(0, OPTIONS[10]); + + AbstractDungeon.effectList.add(new RainingGoldEffect(this.goldAmt)); + AbstractDungeon.player.gainGold(this.goldAmt); + + AbstractRelic r = AbstractDungeon.returnRandomScreenlessRelic(AbstractRelic.RelicTier.COMMON); + AbstractDungeon.getCurrRoom().spawnRelicAndObtain((float) (Settings.WIDTH / 2), (float) (Settings.HEIGHT / 2), r); + logMetricObtainRelic(ID, "Donation Box", r); + this.imageEventText.clearAllDialogs(); + this.imageEventText.setDialogOption(OPTIONS[10]); + this.imageEventText.clearRemainingOptions(); + this.screen = CUR_SCREEN.GOLD2; + return; + } + break; + + case GOLD2: + this.screen = CUR_SCREEN.COMPLETE; + this.imageEventText.clearAllDialogs(); + AbstractDungeon.effectList.add(new ShowCardAndObtainEffect(new Doubt(), (float) Settings.WIDTH / 2.0F, (float) Settings.HEIGHT / 2.0F)); + this.imageEventText.updateBodyText(DESCRIPTIONS[9]); + this.imageEventText.setDialogOption(OPTIONS[7]); + this.imageEventText.clearRemainingOptions(); + AbstractDungeon.getCurrRoom().phase = AbstractRoom.RoomPhase.COMPLETE; + return; + case GIFTSTAGE1: + + AbstractDungeon.getCurrRoom().rewards.add(new RewardItem(PotionHelper.getPotion(CultistsDelight.POTION_ID))); + AbstractDungeon.effectList.add(new RainingGoldEffect(this.goldAmt)); + AbstractDungeon.player.gainGold(this.goldAmt); + AbstractRelic r = AbstractDungeon.returnRandomScreenlessRelic(AbstractRelic.RelicTier.COMMON); + AbstractDungeon.getCurrRoom().spawnRelicAndObtain((float) (Settings.WIDTH / 2), (float) (Settings.HEIGHT / 2), r); + + logMetricGainGold(ID, "Returned Statue", this.goldAmt); + logMetricObtainRelic(ID, "Returned Statue", r); + this.imageEventText.updateBodyText(DESCRIPTIONS[4]); + this.imageEventText.clearAllDialogs(); + this.imageEventText.setDialogOption(OPTIONS[2]); + this.screen = CUR_SCREEN.GIFTSTAGE4; + return; + case GIFTSTAGE4: + this.imageEventText.updateBodyText(DESCRIPTIONS[7]); + this.imageEventText.clearAllDialogs(); + this.imageEventText.setDialogOption(OPTIONS[7]); + this.screen = CUR_SCREEN.COMPLETE; + return; + + + default: + this.openMap(); + } + + } + + private enum CUR_SCREEN { + INTRO, + GIFTSTAGE1, + GIFTSTAGE2, + GIFTSTAGE3, + GIFTSTAGE4, + GOLD2, + COMPLETE; + + CUR_SCREEN() { + } + } +} diff --git a/src/main/java/awakenedOne/events/WingStatueAwakened.java b/src/main/java/awakenedOne/events/WingStatueAwakened.java new file mode 100644 index 000000000..f2d0c685f --- /dev/null +++ b/src/main/java/awakenedOne/events/WingStatueAwakened.java @@ -0,0 +1,94 @@ +package awakenedOne.events; + +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.events.AbstractImageEvent; +import com.megacrit.cardcrawl.localization.EventStrings; +import com.megacrit.cardcrawl.vfx.cardManip.ShowCardAndObtainEffect; +import downfall.cards.curses.CurseOfBlood; +import downfall.relics.BrokenWingStatue; +import downfall.relics.ShatteredFragment; + +public class WingStatueAwakened extends AbstractImageEvent { + public static final String ID = "awakened:WingStatue"; + public static final String NAME; + public static final String[] DESCRIPTIONS; + public static final String[] OPTIONS; + private static final EventStrings eventStrings; + + static { + eventStrings = CardCrawlGame.languagePack.getEventString(ID); + NAME = eventStrings.NAME; + DESCRIPTIONS = eventStrings.DESCRIPTIONS; + OPTIONS = eventStrings.OPTIONS; + } + + private final int damage; + private CurScreen screen; + + public WingStatueAwakened() { + super(NAME, DESCRIPTIONS[0], "images/events/goldenWing.jpg"); + this.screen = CurScreen.INTRO; + + if (AbstractDungeon.ascensionLevel >= 15) { + this.damage = (int) ((float) AbstractDungeon.player.maxHealth * 0.35F); + } else { + this.damage = (int) ((float) AbstractDungeon.player.maxHealth * 0.25F); + } + + this.imageEventText.setDialogOption(OPTIONS[0], new ShatteredFragment()); + this.imageEventText.setDialogOption(OPTIONS[2] + this.damage + OPTIONS[4], new BrokenWingStatue()); + this.imageEventText.setDialogOption(OPTIONS[3]); + } + + protected void buttonEffect(int buttonPressed) { + switch (this.screen) { + case INTRO: + switch (buttonPressed) { + case 0: + AbstractCard curse = new CurseOfBlood(); + AbstractDungeon.effectList.add(new ShowCardAndObtainEffect(curse, Settings.WIDTH * .35F, (float) (Settings.HEIGHT / 2))); + AbstractDungeon.effectList.add(new ShowCardAndObtainEffect(curse, Settings.WIDTH * .65F, (float) (Settings.HEIGHT / 2))); + + this.imageEventText.updateBodyText(DESCRIPTIONS[2]); + this.imageEventText.clearAllDialogs(); + this.imageEventText.setDialogOption(OPTIONS[3]); + AbstractDungeon.getCurrRoom().spawnRelicAndObtain((float) Settings.WIDTH / 2.0F, (float) Settings.HEIGHT / 2.0F, new ShatteredFragment()); + this.screen = CurScreen.RESULT; + logMetricObtainCardAndRelic(ID, "Destroyed Statue", curse, new ShatteredFragment()); + return; + case 1: + this.imageEventText.updateBodyText(DESCRIPTIONS[1]); + this.imageEventText.clearAllDialogs(); + this.imageEventText.setDialogOption(OPTIONS[3]); + AbstractDungeon.player.damage(new DamageInfo(null, (this.damage))); + this.screen = CurScreen.RESULT; + AbstractDungeon.getCurrRoom().spawnRelicAndObtain((float) Settings.WIDTH / 2.0F, (float) Settings.HEIGHT / 2.0F, new BrokenWingStatue()); + logMetricObtainRelicAndDamage(ID, "Collected Statue", new BrokenWingStatue(), ((AbstractDungeon.ascensionLevel >= 15) ? 7 : 5)); + return; + case 2: + this.imageEventText.updateBodyText(DESCRIPTIONS[3]); + this.imageEventText.clearAllDialogs(); + this.imageEventText.setDialogOption(OPTIONS[3]); + this.screen = CurScreen.RESULT; + logMetricIgnored(ID); + return; + default: + return; + } + default: + this.openMap(); + } + } + + private enum CurScreen { + INTRO, + RESULT; + + CurScreen() { + } + } +} diff --git a/src/main/java/awakenedOne/patches/FixDownfallBottlesPatch.java b/src/main/java/awakenedOne/patches/FixDownfallBottlesPatch.java new file mode 100644 index 000000000..106636961 --- /dev/null +++ b/src/main/java/awakenedOne/patches/FixDownfallBottlesPatch.java @@ -0,0 +1,130 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package awakenedOne.patches; + +import automaton.relics.BottledCode; +import awakenedOne.relics.MoonTalisman; +import champ.relics.SignatureFinisher; +import collector.relics.BottledCollectible; +import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.CardGroup; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import guardian.relics.BottledAnomaly; +import guardian.relics.BottledStasis; +import guardian.relics.StasisEgg; +import sneckomod.relics.D8; + +@SpirePatch( + clz = CardGroup.class, + method = "getGroupWithoutBottledCards" +) + +//todo: VERY VERY BAD CODE +public class FixDownfallBottlesPatch { + public FixDownfallBottlesPatch() { + } + + public static CardGroup Postfix(CardGroup __result, CardGroup group) { + +// for (AbstractCard card : __result.group) { +// if (card.hasTag(GuardianMod.GEM)) { +// __result.group.remove(card); +// } +// } + + + if (AbstractDungeon.player.hasRelic(SignatureFinisher.ID)) { + SignatureFinisher a = (SignatureFinisher) AbstractDungeon.player.getRelic(SignatureFinisher.ID); + if (a.card != null) { + for (AbstractCard card : __result.group) { + if (card.uuid == a.card.uuid) { + __result.group.remove(card); + } + } + } + } + + if (AbstractDungeon.player.hasRelic(BottledStasis.ID)) { + BottledStasis b = (BottledStasis) AbstractDungeon.player.getRelic(BottledStasis.ID); + if (b.card != null) { + for (AbstractCard card : __result.group) { + if (card.uuid == b.card.uuid) { + __result.group.remove(card); + } + } + } + } + + if (AbstractDungeon.player.hasRelic(BottledAnomaly.ID)) { + BottledAnomaly crelic = (BottledAnomaly) AbstractDungeon.player.getRelic(BottledAnomaly.ID); + if (crelic.card != null) { + for (AbstractCard card : __result.group) { + if (card.uuid == crelic.card.uuid) { + __result.group.remove(card); + } + } + } + } + + if (AbstractDungeon.player.hasRelic(MoonTalisman.ID)) { + MoonTalisman d = (MoonTalisman) AbstractDungeon.player.getRelic(MoonTalisman.ID); + if (d.card != null) { + for (AbstractCard card : __result.group) { + if (card.uuid == d.card.uuid) { + __result.group.remove(card); + } + } + } + } + + if (AbstractDungeon.player.hasRelic(BottledCollectible.ID)) { + BottledCollectible e = (BottledCollectible) AbstractDungeon.player.getRelic(BottledCollectible.ID); + if (e.card != null) { + for (AbstractCard card : __result.group) { + if (card.uuid == e.card.uuid) { + __result.group.remove(card); + } + } + } + } + + if (AbstractDungeon.player.hasRelic(D8.ID)) { + D8 f = (D8) AbstractDungeon.player.getRelic(D8.ID); + if (f.card != null) { + for (AbstractCard card : __result.group) { + if (card.uuid == f.card.uuid) { + __result.group.remove(card); + } + } + } + } + + if (AbstractDungeon.player.hasRelic(BottledCode.ID)) { + BottledCode g = (BottledCode) AbstractDungeon.player.getRelic(BottledCode.ID); + if (g.card != null) { + for (AbstractCard card : __result.group) { + if (card.uuid == g.card.uuid) { + __result.group.remove(card); + } + } + } + } + + if (AbstractDungeon.player.hasRelic(StasisEgg.ID)) { + StasisEgg s = (StasisEgg) AbstractDungeon.player.getRelic(StasisEgg.ID); + if (s.card != null) { + for (AbstractCard card : __result.group) { + if (card.uuid == s.card.uuid) { + __result.group.remove(card); + } + } + } + } + + return __result; + } +} diff --git a/src/main/java/awakenedOne/patches/MoonTalismanPatch.java b/src/main/java/awakenedOne/patches/MoonTalismanPatch.java new file mode 100644 index 000000000..d132db90d --- /dev/null +++ b/src/main/java/awakenedOne/patches/MoonTalismanPatch.java @@ -0,0 +1,53 @@ +package awakenedOne.patches; + +import awakenedOne.cardmods.ConjureMod; +import awakenedOne.util.Wiz; +import basemod.helpers.CardModifierManager; +import com.evacipated.cardcrawl.modthespire.lib.*; +import com.megacrit.cardcrawl.cards.AbstractCard; +import guardian.cards.AbstractGuardianCard; +import javassist.CtBehavior; + +import java.util.ArrayList; + +@SpirePatch(cls = "com.megacrit.cardcrawl.cards.AbstractCard", method = "") +public class MoonTalismanPatch { + public static SpireField inBottleTalisman = new SpireField(() -> Boolean.FALSE); + + @SpirePatch(cls = "com.megacrit.cardcrawl.cards.AbstractCard", method = "makeStatEquivalentCopy") + public static class MakeStatEquivalentCopy { + public static AbstractCard Postfix(AbstractCard __result, AbstractCard __instance) { + + if (Wiz.isInCombat()) { + //soularoid is not real, it does not exist, it cannot hurt you + MoonTalismanPatch.inBottleTalisman.set(__result, MoonTalismanPatch.inBottleTalisman.get(__instance)); + } + + if (!Wiz.isInCombat()) { + //this is consistent with how the vanilla bottles work + if ((CardModifierManager.hasModifier(__result, ConjureMod.ID))) { + CardModifierManager.removeModifiersById(__result, ConjureMod.ID, true); + } + MoonTalismanPatch.inBottleTalisman.set(__result, Boolean.FALSE); + } + + if (__instance instanceof AbstractGuardianCard) { + + ((AbstractGuardianCard) __result).socketCount = ((AbstractGuardianCard) __instance).socketCount; + + ((AbstractGuardianCard) __result).sockets = new ArrayList<>(((AbstractGuardianCard) __instance).sockets); + + ((AbstractGuardianCard) __result).updateDescription(); + } + + return __result; + } + } + + private static class Locator extends SpireInsertLocator { + public int[] Locate(CtBehavior ctBehavior) throws Exception { + Matcher.MethodCallMatcher methodCallMatcher = new Matcher.MethodCallMatcher("com.megacrit.cardcrawl.cards.AbstractCard", "atTurnStart"); + return LineFinder.findAllInOrder(ctBehavior, methodCallMatcher); + } + } +} diff --git a/src/main/java/awakenedOne/patches/MoreBottleUpgrades.java b/src/main/java/awakenedOne/patches/MoreBottleUpgrades.java new file mode 100644 index 000000000..6bf6c3885 --- /dev/null +++ b/src/main/java/awakenedOne/patches/MoreBottleUpgrades.java @@ -0,0 +1,82 @@ +package awakenedOne.patches; + +import automaton.relics.BottledCode; +import awakenedOne.relics.MoonTalisman; +import champ.relics.SignatureFinisher; +import collector.relics.BottledCollectible; +import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; +import com.evacipated.cardcrawl.modthespire.lib.SpirePostfixPatch; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import guardian.relics.BottledAnomaly; +import guardian.relics.BottledStasis; +import guardian.relics.StasisEgg; +import sneckomod.relics.D8; + + +//todo: make not jank +public class MoreBottleUpgrades { + @SpirePatch(clz = AbstractPlayer.class, method = "bottledCardUpgradeCheck") + public static class BottledCardUpgradeCheckPatch { + @SpirePostfixPatch + public static void Postfix(AbstractPlayer __instance, AbstractCard c) { + + if (__instance.hasRelic(SignatureFinisher.ID)) { + SignatureFinisher a = (SignatureFinisher) __instance.getRelic(SignatureFinisher.ID); + if (a.card.uuid == c.uuid) { + ((SignatureFinisher) __instance.getRelic(SignatureFinisher.ID)).setDescriptionAfterLoading(); + } + } + + if (__instance.hasRelic(BottledStasis.ID)) { + BottledStasis b = (BottledStasis) __instance.getRelic(BottledStasis.ID); + if (b.card.uuid == c.uuid) { + ((BottledStasis) __instance.getRelic(BottledStasis.ID)).setDescriptionAfterLoading(); + } + } + + if (__instance.hasRelic(BottledAnomaly.ID)) { + BottledAnomaly crelic = (BottledAnomaly) __instance.getRelic(BottledAnomaly.ID); + if (crelic.card.uuid == c.uuid) { + ((BottledAnomaly) __instance.getRelic(BottledAnomaly.ID)).setDescriptionAfterLoading(); + } + } + + if (__instance.hasRelic(MoonTalisman.ID)) { + MoonTalisman e = (MoonTalisman) __instance.getRelic(MoonTalisman.ID); + if (e.card.uuid == c.uuid) { + ((MoonTalisman) __instance.getRelic(MoonTalisman.ID)).setDescriptionAfterLoading(); + } + } + + if (__instance.hasRelic(BottledCollectible.ID)) { + BottledCollectible f = (BottledCollectible) __instance.getRelic(BottledCollectible.ID); + if (f.card.uuid == c.uuid) { + ((BottledCollectible) __instance.getRelic(BottledCollectible.ID)).setDescriptionAfterLoading(); + } + } + + if (__instance.hasRelic(D8.ID)) { + D8 g = (D8) __instance.getRelic(D8.ID); + if (g.card.uuid == c.uuid) { + ((D8) __instance.getRelic(D8.ID)).setDescriptionAfterLoading(); + } + } + + if (__instance.hasRelic(BottledCode.ID)) { + BottledCode h = (BottledCode) __instance.getRelic(BottledCode.ID); + if (h.card.uuid == c.uuid) { + ((BottledCode) __instance.getRelic(BottledCode.ID)).setDescriptionAfterLoading(); + } + } + + if (__instance.hasRelic(StasisEgg.ID)) { + StasisEgg i = (StasisEgg) __instance.getRelic(StasisEgg.ID); + if (i.card.uuid == c.uuid) { + ((BottledCode) __instance.getRelic(BottledCode.ID)).setDescriptionAfterLoading(); + } + } + + } + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/patches/OnCreateCardSubscriber.java b/src/main/java/awakenedOne/patches/OnCreateCardSubscriber.java new file mode 100644 index 000000000..6e816ba63 --- /dev/null +++ b/src/main/java/awakenedOne/patches/OnCreateCardSubscriber.java @@ -0,0 +1,75 @@ +package awakenedOne.patches; + +import automaton.cards.goodstatus.IntoTheVoid; +import awakenedOne.AwakenedTextHelper; +import awakenedOne.cards.AbstractAwakenedCard; +import awakenedOne.powers.SongOfSorrowPower; +import com.evacipated.cardcrawl.mod.stslib.StSLib; +import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; +import com.evacipated.cardcrawl.modthespire.lib.SpirePostfixPatch; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.status.VoidCard; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; + +import static awakenedOne.AwakenedOneMod.ACTIVECHANT; + +@SpirePatch(clz = StSLib.class, method = "onCreateCard", paramtypez = {AbstractCard.class}) +public class OnCreateCardSubscriber { + public static int CardsCreatedThisCombat = 0; + public static int CardsCreatedThisTurn = 0; + public static boolean VoidCreatedThisTurn = false; + + @SpirePostfixPatch + public static void onCreateCard(AbstractCard c) { + CardsCreatedThisCombat++; + CardsCreatedThisTurn++; + if (!AbstractDungeon.actionManager.turnHasEnded) { + + if (c instanceof VoidCard || c instanceof IntoTheVoid) { + if (!VoidCreatedThisTurn) { + // VoidCreatedThisTurn = true; + // if (AbstractDungeon.player.hasPower(SongOfSorrowPower.POWER_ID)) { + // for (int i = 0; i < AbstractDungeon.player.drawPile.size(); ) { + // AbstractCard q = AbstractDungeon.player.drawPile.group.get(i); + // if (c.uuid == q.uuid) { + // AbstractDungeon.player.drawPile.removeCard(c); + // AbstractDungeon.player.limbo.addToTop(c); + // atb(new ExhaustSpecificCardAction(c, AbstractDungeon.player.limbo)); + // atb(new WaitAction(0.1F)); + // } else { + // i++; + // } + // } + // + // for (int i = 0; i < AbstractDungeon.player.discardPile.size(); ) { + // AbstractCard q = AbstractDungeon.player.discardPile.group.get(i); + // if (c.uuid == q.uuid) { + // AbstractDungeon.player.discardPile.removeCard(c); + // AbstractDungeon.player.limbo.addToTop(c); + // atb(new ExhaustSpecificCardAction(c, AbstractDungeon.player.limbo)); + // atb(new WaitAction(0.1F)); + // } else { + // i++; + // } + // } + // + // for (int i = 0; i < AbstractDungeon.player.hand.size(); ) { + // AbstractCard q = AbstractDungeon.player.hand.group.get(i); + // if (c.uuid == q.uuid) { + // AbstractDungeon.player.hand.removeCard(c); + // AbstractDungeon.player.limbo.addToTop(c); + // atb(new ExhaustSpecificCardAction(q, AbstractDungeon.player.limbo)); + // atb(new WaitAction(0.1F)); + // } + if (AbstractDungeon.player.hasPower(SongOfSorrowPower.POWER_ID)) { + AbstractDungeon.player.getPower(SongOfSorrowPower.POWER_ID).onSpecificTrigger(); + } + } + } + } + if (c.hasTag(ACTIVECHANT)) { + AwakenedTextHelper.colorCombos((AbstractAwakenedCard) c, false); + c.initializeDescription(); + } + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/patches/OnLoseEnergyPowerPatch.java b/src/main/java/awakenedOne/patches/OnLoseEnergyPowerPatch.java new file mode 100644 index 000000000..e7adcf796 --- /dev/null +++ b/src/main/java/awakenedOne/patches/OnLoseEnergyPowerPatch.java @@ -0,0 +1,44 @@ +package awakenedOne.patches; + +import awakenedOne.powers.OnLoseEnergyPower; +import awakenedOne.relics.OnLoseEnergyRelic; +import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.AbstractPower; +import com.megacrit.cardcrawl.relics.AbstractRelic; + +@SpirePatch( + clz = AbstractPlayer.class, + method = "loseEnergy" +) +public class OnLoseEnergyPowerPatch { + + public static int EnergyLostThisCombat = 0; + + public static void Postfix(AbstractPlayer __instance, int e) { + EnergyLostThisCombat = EnergyLostThisCombat + e; + for (AbstractPower p : AbstractDungeon.player.powers) { + if (p instanceof OnLoseEnergyPower) { + ((OnLoseEnergyPower) p).LoseEnergyAction(e); + } + } + + for (AbstractRelic p : AbstractDungeon.player.relics) { + if (p instanceof OnLoseEnergyRelic) { + ((OnLoseEnergyRelic) p).LoseEnergyAction(e); + } + } + + for (AbstractMonster m2 : AbstractDungeon.getMonsters().monsters) { + if (!m2.isDead && !m2.isDying) { + for (AbstractPower p : m2.powers) { + if (p instanceof OnLoseEnergyPower) { + ((OnLoseEnergyPower) p).LoseEnergyAction(e); + } + } + } + } + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/patches/RenderSpellCardsPost.java b/src/main/java/awakenedOne/patches/RenderSpellCardsPost.java new file mode 100644 index 000000000..88b279fc5 --- /dev/null +++ b/src/main/java/awakenedOne/patches/RenderSpellCardsPost.java @@ -0,0 +1,20 @@ +package awakenedOne.patches; + +import awakenedOne.AwakenedOneChar; +import awakenedOne.actions.ConjureAction; +import awakenedOne.powers.DemonGlyphPower; +import awakenedOne.ui.OrbitingSpells; +import awakenedOne.util.Wiz; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; + +@SpirePatch(clz = AbstractPlayer.class, method = "render") +public class RenderSpellCardsPost { + public static void Postfix(AbstractPlayer obj, SpriteBatch sb) { + if (Wiz.isInCombat() && ((AbstractDungeon.player.chosenClass.equals(AwakenedOneChar.Enums.AWAKENED_ONE)) || Wiz.hasConjure() || ConjureAction.conjuresThisCombat > 0 || AbstractDungeon.player.hasPower(DemonGlyphPower.POWER_ID))) { + OrbitingSpells.postPlayerRender(sb); + } + } +} diff --git a/src/main/java/awakenedOne/patches/RenderSpellCardsPre.java b/src/main/java/awakenedOne/patches/RenderSpellCardsPre.java new file mode 100644 index 000000000..97b288ed9 --- /dev/null +++ b/src/main/java/awakenedOne/patches/RenderSpellCardsPre.java @@ -0,0 +1,19 @@ +//package awakenedOne.patches; +// +//import awakenedOne.AwakenedOneChar; +//import awakenedOne.actions.ConjureAction; +//import awakenedOne.ui.OrbitingSpells; +//import awakenedOne.util.Wiz; +//import com.badlogic.gdx.graphics.g2d.SpriteBatch; +//import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; +//import com.megacrit.cardcrawl.characters.AbstractPlayer; +//import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +// +//@SpirePatch(clz = AbstractPlayer.class, method = "render") +//public class RenderSpellCardsPre { +// public static void Prefix(AbstractPlayer obj, SpriteBatch sb) { +// if (Wiz.isInCombat() && ((AbstractDungeon.player.chosenClass.equals(AwakenedOneChar.Enums.AWAKENED_ONE)) || Wiz.hasConjure() || ConjureAction.conjuresThisCombat > 0)) { +// OrbitingSpells.prePlayerRender(sb); +// } +// } +//} diff --git a/src/main/java/awakenedOne/patches/VioletPlumagePatch.java b/src/main/java/awakenedOne/patches/VioletPlumagePatch.java new file mode 100644 index 000000000..762913c9a --- /dev/null +++ b/src/main/java/awakenedOne/patches/VioletPlumagePatch.java @@ -0,0 +1,45 @@ +package awakenedOne.patches; +// + +import awakenedOne.cards.tokens.spells.AbstractSpellCard; +import awakenedOne.powers.EnsorcelatePower; +import awakenedOne.powers.IntensifyPower; +import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; +import com.evacipated.cardcrawl.modthespire.lib.SpirePostfixPatch; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.rooms.AbstractRoom; +import downfall.relics.BlackCandle; +// +////This is code from the Aspiration mod! +////https://github.com/erasels/Aspiration-StS/blob/564c18fce53f30b105fc401fd22445aed018d178/src/main/java/aspiration/patches/cards/CardCostModificationPatches.java#L3 + +public class VioletPlumagePatch { + private static boolean isIndeedWithoutADoubtInCombat() { + return (AbstractDungeon.player != null && AbstractDungeon.currMapNode != null && (AbstractDungeon.getCurrRoom()).phase == AbstractRoom.RoomPhase.COMBAT); + } + + @SpirePatch(clz = AbstractCard.class, method = "freeToPlay") + public static class FreeToPlayPatch { + @SpirePostfixPatch + public static boolean patch(boolean __result, AbstractCard __instance) { + if (__result) + return true; + + if (isIndeedWithoutADoubtInCombat() && __instance.type == AbstractCard.CardType.CURSE) { + if (__instance.cost != 0) { + return (AbstractDungeon.player.hasRelic(BlackCandle.ID)); + } + } + + if (isIndeedWithoutADoubtInCombat() && __instance instanceof AbstractSpellCard && (AbstractDungeon.player.hasPower(IntensifyPower.POWER_ID))) { + return (AbstractDungeon.player.hasPower(IntensifyPower.POWER_ID)); + } + + if (isIndeedWithoutADoubtInCombat() && __instance.type == AbstractCard.CardType.POWER && (AbstractDungeon.player.hasPower(EnsorcelatePower.POWER_ID))) { + return (AbstractDungeon.player.hasPower(EnsorcelatePower.POWER_ID)); + } + return __result; + } + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/potions/CultistsDelight.java b/src/main/java/awakenedOne/potions/CultistsDelight.java new file mode 100644 index 000000000..03053b76f --- /dev/null +++ b/src/main/java/awakenedOne/potions/CultistsDelight.java @@ -0,0 +1,62 @@ +package awakenedOne.potions; + +import awakenedOne.AwakenedOneMod; +import basemod.ReflectionHacks; +import basemod.abstracts.CustomPotion; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.helpers.PowerTip; +import com.megacrit.cardcrawl.localization.PotionStrings; +import com.megacrit.cardcrawl.potions.AbstractPotion; +import com.megacrit.cardcrawl.powers.CuriosityPower; +import com.megacrit.cardcrawl.vfx.combat.LightBulbEffect; +import hermit.util.TextureLoader; + + +public class CultistsDelight extends CustomPotion { + public static final String POTION_ID = "awakened:CultistsDelight"; + private static final PotionStrings potionStrings = CardCrawlGame.languagePack.getPotionString(POTION_ID); + public static final String NAME = potionStrings.NAME; + public static final String[] DESCRIPTIONS = potionStrings.DESCRIPTIONS; + + public CultistsDelight() { + super(NAME, POTION_ID, PotionRarity.RARE, PotionSize.FAIRY, PotionColor.ANCIENT); + ReflectionHacks.setPrivate(this, AbstractPotion.class, "containerImg", TextureLoader.getTexture("hermitResources/images/potion/potion_eclipse_glass.png")); + ReflectionHacks.setPrivate(this, AbstractPotion.class, "liquidImg", TextureLoader.getTexture("hermitResources/images/potion/potion_eclipse_liquid.png")); + ReflectionHacks.setPrivate(this, AbstractPotion.class, "hybridImg", TextureLoader.getTexture("hermitResources/images/potion/potion_eclipse_hybrid.png")); + ReflectionHacks.setPrivate(this, AbstractPotion.class, "spotsImg", TextureLoader.getTexture("hermitResources/images/potion/potion_eclipse_spots.png")); + ReflectionHacks.setPrivate(this, AbstractPotion.class, "outlineImg", TextureLoader.getTexture("hermitResources/images/potion/potion_eclipse_outline.png")); + + this.isThrown = false; + this.targetRequired = false; + this.labOutlineColor = AwakenedOneMod.potionLabColor; + } + + public void initializeData() { + this.potency = getPotency(); + this.description = potionStrings.DESCRIPTIONS[0] + potency + potionStrings.DESCRIPTIONS[1]; + this.tips.clear(); + this.tips.add(new PowerTip(this.name, this.description)); + } + + public void use(AbstractCreature target) { + if (Settings.FAST_MODE) { + this.addToBot(new VFXAction(new LightBulbEffect(AbstractDungeon.player.hb))); + } else { + this.addToBot(new VFXAction(new LightBulbEffect(AbstractDungeon.player.hb), 0.2F)); + } + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new CuriosityPower(AbstractDungeon.player, potency))); + } + + public CustomPotion makeCopy() { + return new CultistsDelight(); + } + + public int getPotency(int ascensionLevel) { + return 1; + } +} diff --git a/src/main/java/awakenedOne/potions/SacramentalWine.java b/src/main/java/awakenedOne/potions/SacramentalWine.java new file mode 100644 index 000000000..4a91f7eeb --- /dev/null +++ b/src/main/java/awakenedOne/potions/SacramentalWine.java @@ -0,0 +1,57 @@ +package awakenedOne.potions; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.powers.SacramentPower; +import basemod.abstracts.CustomPotion; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.MakeTempCardInHandAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.helpers.PowerTip; +import com.megacrit.cardcrawl.localization.PotionStrings; +import com.megacrit.cardcrawl.vfx.combat.LightBulbEffect; + +public class SacramentalWine extends CustomPotion { + public static final String POTION_ID = "awakened:SacramentalWine"; + private static final PotionStrings potionStrings = CardCrawlGame.languagePack.getPotionString(POTION_ID); + public static final String NAME = potionStrings.NAME; + public static final String[] DESCRIPTIONS = potionStrings.DESCRIPTIONS; + + public SacramentalWine() { + super(NAME, POTION_ID, PotionRarity.UNCOMMON, PotionSize.M, PotionColor.ATTACK); + this.isThrown = false; + this.targetRequired = false; + this.labOutlineColor = AwakenedOneMod.potionLabColor; + } + + public void initializeData() { + this.potency = getPotency(); + this.description = potionStrings.DESCRIPTIONS[0] + potency + potionStrings.DESCRIPTIONS[1]; + this.tips.clear(); + this.tips.add(new PowerTip(this.name, this.description)); + } + + public void use(AbstractCreature target) { + if (Settings.FAST_MODE) { + this.addToBot(new VFXAction(new LightBulbEffect(AbstractDungeon.player.hb))); + } else { + this.addToBot(new VFXAction(new LightBulbEffect(AbstractDungeon.player.hb), 0.2F)); + } + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new SacramentPower(potency))); + AbstractCard c = AbstractDungeon.returnTrulyRandomCardInCombat(AbstractCard.CardType.POWER).makeCopy(); + c.setCostForTurn(0); + this.addToBot(new MakeTempCardInHandAction(c, true)); + } + + public CustomPotion makeCopy() { + return new SacramentalWine(); + } + + public int getPotency(int ascensionLevel) { + return 3; + } +} diff --git a/src/main/java/awakenedOne/potions/SneckoPowersPotion.java b/src/main/java/awakenedOne/potions/SneckoPowersPotion.java new file mode 100644 index 000000000..806d766ca --- /dev/null +++ b/src/main/java/awakenedOne/potions/SneckoPowersPotion.java @@ -0,0 +1,55 @@ +package awakenedOne.potions; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.actions.SerpentIdolPowerAction; +import basemod.BaseMod; +import basemod.abstracts.CustomPotion; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.helpers.PowerTip; +import com.megacrit.cardcrawl.helpers.TipHelper; +import com.megacrit.cardcrawl.localization.PotionStrings; +import expansioncontent.potions.BossPotion; +import sneckomod.SneckoMod; + +import static awakenedOne.util.Wiz.atb; + +public class SneckoPowersPotion extends CustomPotion { + public static final String POTION_ID = "awakened:SneckoPowersPotion"; + private static final PotionStrings potionStrings = CardCrawlGame.languagePack.getPotionString(POTION_ID); + public static final String NAME = potionStrings.NAME; + public static final String[] DESCRIPTIONS = potionStrings.DESCRIPTIONS; + + + public SneckoPowersPotion() { + super(NAME, POTION_ID, PotionRarity.COMMON, PotionSize.SNECKO, PotionColor.SMOKE); + this.isThrown = false; + this.targetRequired = false; + this.labOutlineColor = AwakenedOneMod.potionLabColor; + } + + public void initializeData() { + this.potency = getPotency(); + if (AbstractDungeon.player != null && potency > 1) { + this.description = potionStrings.DESCRIPTIONS[1] + this.potency + DESCRIPTIONS[2]; + } else { + this.description = potionStrings.DESCRIPTIONS[0]; + } + this.tips.clear(); + this.tips.add(new PowerTip(this.name, this.description)); + this.tips.add(new PowerTip(TipHelper.capitalize(BaseMod.getKeywordTitle(SneckoMod.makeID("offclass"))), BaseMod.getKeywordDescription(SneckoMod.makeID("offclass")))); + } + + public void use(AbstractCreature target) { + atb(new SerpentIdolPowerAction(this.potency)); + } + + public CustomPotion makeCopy() { + return new BossPotion(); + } + + public int getPotency(int ascensionLevel) { + return 1; + } +} diff --git a/src/main/java/awakenedOne/powers/AbstractAwakenedPower.java b/src/main/java/awakenedOne/powers/AbstractAwakenedPower.java new file mode 100644 index 000000000..74bf9cd15 --- /dev/null +++ b/src/main/java/awakenedOne/powers/AbstractAwakenedPower.java @@ -0,0 +1,105 @@ +package awakenedOne.powers; + +import awakenedOne.util.TexLoader; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.TextureAtlas; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.PowerStrings; +import com.megacrit.cardcrawl.powers.AbstractPower; + +import java.util.HashMap; +import java.util.Map; + +import static awakenedOne.AwakenedOneMod.getModID; + +public abstract class AbstractAwakenedPower extends AbstractPower { + protected static Map powerStrings = new HashMap<>(); + protected AbstractCreature source; + protected String[] DESCRIPTIONS; + + public AbstractAwakenedPower(String NAME, PowerType powerType, boolean isTurnBased, AbstractCreature owner, AbstractCreature source, int amount) { + this(NAME, powerType, isTurnBased, owner, source, amount, ""); + } + + public AbstractAwakenedPower(String NAME, PowerType powerType, boolean isTurnBased, AbstractCreature owner, AbstractCreature source, int amount, String IDModifier) { + this.ID = makeID(NAME); + this.isTurnBased = isTurnBased; + + if (!powerStrings.containsKey(this.ID)) + powerStrings.put(this.ID, getPowerStrings(this.ID)); + this.name = powerStrings.get(this.ID).NAME; + this.DESCRIPTIONS = powerStrings.get(this.ID).DESCRIPTIONS; + + this.owner = owner; + this.source = source; + this.amount = amount; + this.type = powerType; + + Texture normalTexture = TexLoader.getTexture("awakenedResources/images/powers/" + NAME + "32.png"); + Texture hiDefImage = TexLoader.getTexture("awakenedResources/images/powers/" + NAME + "84.png"); + if (hiDefImage != null) { + region128 = new TextureAtlas.AtlasRegion(hiDefImage, 0, 0, hiDefImage.getWidth(), hiDefImage.getHeight()); + if (normalTexture != null) + region48 = new TextureAtlas.AtlasRegion(normalTexture, 0, 0, normalTexture.getWidth(), normalTexture.getHeight()); + } else if (normalTexture != null) { + this.img = normalTexture; + region48 = new TextureAtlas.AtlasRegion(normalTexture, 0, 0, normalTexture.getWidth(), normalTexture.getHeight()); + } + + this.ID += IDModifier; + + this.updateDescription(); + } + + public AbstractAwakenedPower(String NAME, PowerType powerType, boolean isTurnBased, AbstractCreature owner, AbstractCreature source, int amount, boolean loadImage) { + this.ID = makeID(NAME); + this.isTurnBased = isTurnBased; + + if (!powerStrings.containsKey(this.ID)) + powerStrings.put(this.ID, getPowerStrings(this.ID)); + this.name = powerStrings.get(this.ID).NAME; + + this.owner = owner; + this.source = source; + this.amount = amount; + this.type = powerType; + + if (loadImage) { + Texture normalTexture = TexLoader.getTexture("awakenedResources/images/powers/" + NAME + "32.png"); + Texture hiDefImage = TexLoader.getTexture("awakenedResources/images/powers/" + NAME + "84.png"); + if (hiDefImage != null) { + region128 = new TextureAtlas.AtlasRegion(hiDefImage, 0, 0, hiDefImage.getWidth(), hiDefImage.getHeight()); + if (normalTexture != null) + region48 = new TextureAtlas.AtlasRegion(normalTexture, 0, 0, normalTexture.getWidth(), normalTexture.getHeight()); + } else if (normalTexture != null) { + this.img = normalTexture; + region48 = new TextureAtlas.AtlasRegion(normalTexture, 0, 0, normalTexture.getWidth(), normalTexture.getHeight()); + } + } + + this.updateDescription(); + } + + private static PowerStrings getPowerStrings(String ID) { + return CardCrawlGame.languagePack.getPowerStrings(ID); + } + + public static String makeID(String idText) { + return getModID() + ":" + idText; + } + + public void updateDescription() { + if (this.amount == 1) { + this.description = DESCRIPTIONS[0]; + } else { + this.description = DESCRIPTIONS[1] + amount + DESCRIPTIONS[2]; + } + } + + public void applyToSelf(AbstractPower po) { + addToBot(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, po, po.amount)); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/powers/AbstractTwoAmountAwakenedPower.java b/src/main/java/awakenedOne/powers/AbstractTwoAmountAwakenedPower.java new file mode 100644 index 000000000..392d82c96 --- /dev/null +++ b/src/main/java/awakenedOne/powers/AbstractTwoAmountAwakenedPower.java @@ -0,0 +1,106 @@ +package awakenedOne.powers; + +import awakenedOne.util.TexLoader; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.TextureAtlas; +import com.evacipated.cardcrawl.mod.stslib.powers.abstracts.TwoAmountPower; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.PowerStrings; +import com.megacrit.cardcrawl.powers.AbstractPower; + +import java.util.HashMap; +import java.util.Map; + +import static awakenedOne.AwakenedOneMod.getModID; + +public abstract class AbstractTwoAmountAwakenedPower extends TwoAmountPower { + protected static Map powerStrings = new HashMap<>(); + protected AbstractCreature source; + protected String[] DESCRIPTIONS; + + public AbstractTwoAmountAwakenedPower(String NAME, PowerType powerType, boolean isTurnBased, AbstractCreature owner, AbstractCreature source, int amount) { + this(NAME, powerType, isTurnBased, owner, source, amount, ""); + } + + public AbstractTwoAmountAwakenedPower(String NAME, PowerType powerType, boolean isTurnBased, AbstractCreature owner, AbstractCreature source, int amount, String IDModifier) { + this.ID = makeID(NAME); + this.isTurnBased = isTurnBased; + + if (!powerStrings.containsKey(this.ID)) + powerStrings.put(this.ID, getPowerStrings(this.ID)); + this.name = powerStrings.get(this.ID).NAME; + this.DESCRIPTIONS = powerStrings.get(this.ID).DESCRIPTIONS; + + this.owner = owner; + this.source = source; + this.amount = amount; + this.type = powerType; + + Texture normalTexture = TexLoader.getTexture("awakenedResources/images/powers/" + NAME + "32.png"); + Texture hiDefImage = TexLoader.getTexture("awakenedResources/images/powers/" + NAME + "84.png"); + if (hiDefImage != null) { + region128 = new TextureAtlas.AtlasRegion(hiDefImage, 0, 0, hiDefImage.getWidth(), hiDefImage.getHeight()); + if (normalTexture != null) + region48 = new TextureAtlas.AtlasRegion(normalTexture, 0, 0, normalTexture.getWidth(), normalTexture.getHeight()); + } else if (normalTexture != null) { + this.img = normalTexture; + region48 = new TextureAtlas.AtlasRegion(normalTexture, 0, 0, normalTexture.getWidth(), normalTexture.getHeight()); + } + + this.ID += IDModifier; + + this.updateDescription(); + } + + public AbstractTwoAmountAwakenedPower(String NAME, PowerType powerType, boolean isTurnBased, AbstractCreature owner, AbstractCreature source, int amount, boolean loadImage) { + this.ID = makeID(NAME); + this.isTurnBased = isTurnBased; + + if (!powerStrings.containsKey(this.ID)) + powerStrings.put(this.ID, getPowerStrings(this.ID)); + this.name = powerStrings.get(this.ID).NAME; + + this.owner = owner; + this.source = source; + this.amount = amount; + this.type = powerType; + + if (loadImage) { + Texture normalTexture = TexLoader.getTexture("awakenedResources/images/powers/" + NAME + "32.png"); + Texture hiDefImage = TexLoader.getTexture("awakenedResources/images/powers/" + NAME + "84.png"); + if (hiDefImage != null) { + region128 = new TextureAtlas.AtlasRegion(hiDefImage, 0, 0, hiDefImage.getWidth(), hiDefImage.getHeight()); + if (normalTexture != null) + region48 = new TextureAtlas.AtlasRegion(normalTexture, 0, 0, normalTexture.getWidth(), normalTexture.getHeight()); + } else if (normalTexture != null) { + this.img = normalTexture; + region48 = new TextureAtlas.AtlasRegion(normalTexture, 0, 0, normalTexture.getWidth(), normalTexture.getHeight()); + } + } + + this.updateDescription(); + } + + private static PowerStrings getPowerStrings(String ID) { + return CardCrawlGame.languagePack.getPowerStrings(ID); + } + + public static String makeID(String idText) { + return getModID() + ":" + idText; + } + + public void updateDescription() { + if (this.amount == 1) { + this.description = DESCRIPTIONS[0]; + } else { + this.description = DESCRIPTIONS[1] + amount + DESCRIPTIONS[2]; + } + } + + public void applyToSelf(AbstractPower po) { + addToBot(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, po, po.amount)); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/powers/AphoticFountPower.java b/src/main/java/awakenedOne/powers/AphoticFountPower.java new file mode 100644 index 000000000..fc34f6aa6 --- /dev/null +++ b/src/main/java/awakenedOne/powers/AphoticFountPower.java @@ -0,0 +1,39 @@ +package awakenedOne.powers; + +import awakenedOne.cards.tokens.spells.AphoticShield; +import awakenedOne.ui.OrbitingSpells; +import com.evacipated.cardcrawl.mod.stslib.powers.interfaces.NonStackablePower; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.powers.AbstractPower; + +public class AphoticFountPower extends AbstractAwakenedPower implements NonStackablePower { + // intellij stuff buff + public static final String NAME = AphoticFountPower.class.getSimpleName(); + public static final String POWER_ID = makeID(NAME); + private final boolean upgraded; + + public AphoticFountPower(boolean upgraded) { + super(NAME, PowerType.BUFF, false, AbstractDungeon.player, null, 1); + updateDescription(); + this.upgraded = upgraded; + } + + @Override + public void onSpecificTrigger() { + AbstractCard toAdd = new AphoticShield(); + if (upgraded) toAdd.upgrade(); + for (int i = 0; i < amount; i++) + OrbitingSpells.spellCards.add(new AphoticShield()); + } + + @Override + public boolean isStackable(AbstractPower power) { + if (power instanceof AphoticFountPower) return ((AphoticFountPower) power).upgraded == upgraded; + return false; + } + + public void updateDescription() { + description = (DESCRIPTIONS[0] + amount + DESCRIPTIONS[1] + (upgraded ? DESCRIPTIONS[2] : "") + DESCRIPTIONS[3]); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/powers/ArchmagusPower.java b/src/main/java/awakenedOne/powers/ArchmagusPower.java new file mode 100644 index 000000000..99856823b --- /dev/null +++ b/src/main/java/awakenedOne/powers/ArchmagusPower.java @@ -0,0 +1,28 @@ +package awakenedOne.powers; + +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; + +public class ArchmagusPower extends AbstractAwakenedPower { + // intellij stuff buff + public static final String NAME = ArchmagusPower.class.getSimpleName(); + public static final String POWER_ID = makeID(NAME); + + public ArchmagusPower(int amount) { + super(NAME, PowerType.BUFF, false, AbstractDungeon.player, null, amount); + } + + @Override + public void atStartOfTurn() { + flash(); + this.addToBot(new ApplyPowerAction(this.owner, this.owner, new DoubleSpellPower(this.amount), this.amount)); + } + + public void updateDescription() { + if (amount == 1) { + description = DESCRIPTIONS[0]; + } else { + description = DESCRIPTIONS[1] + this.amount + DESCRIPTIONS[2]; + } + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/powers/ChosensVersePower.java b/src/main/java/awakenedOne/powers/ChosensVersePower.java new file mode 100644 index 000000000..b3db8c79f --- /dev/null +++ b/src/main/java/awakenedOne/powers/ChosensVersePower.java @@ -0,0 +1,43 @@ +package awakenedOne.powers; + +import com.evacipated.cardcrawl.mod.stslib.powers.interfaces.NonStackablePower; +import com.megacrit.cardcrawl.actions.common.DrawCardAction; +import com.megacrit.cardcrawl.actions.common.GainBlockAction; +import com.megacrit.cardcrawl.actions.common.ReducePowerAction; +import com.megacrit.cardcrawl.actions.common.RemoveSpecificPowerAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +public class ChosensVersePower extends AbstractTwoAmountAwakenedPower implements NonStackablePower { + // intellij stuff buff + public static final String NAME = ChosensVersePower.class.getSimpleName(); + public static final String POWER_ID = makeID(NAME); + + public ChosensVersePower(int amount, int block) { + super(NAME, PowerType.BUFF, false, AbstractDungeon.player, null, amount); + amount2 = block; + updateDescription(); + } + + @Override + public void onPlayCard(AbstractCard card, AbstractMonster m) { + if (card.type != AbstractCard.CardType.ATTACK) { + flash(); + addToBot(new DrawCardAction(1)); + addToBot(new GainBlockAction(owner, amount2)); + addToBot(new ReducePowerAction(owner, owner, this, 1)); + } + } + + @Override + public void atEndOfTurn(boolean isPlayer) { + flash(); + addToBot(new RemoveSpecificPowerAction(owner, owner, this)); + } + + public void updateDescription() { + description = amount == 1 ? DESCRIPTIONS[0] + amount2 + DESCRIPTIONS[1] : DESCRIPTIONS[2] + amount + DESCRIPTIONS[3] + amount2 + DESCRIPTIONS[4]; + } + +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/powers/CursedStrength.java b/src/main/java/awakenedOne/powers/CursedStrength.java new file mode 100644 index 000000000..45dc56920 --- /dev/null +++ b/src/main/java/awakenedOne/powers/CursedStrength.java @@ -0,0 +1,30 @@ +package awakenedOne.powers; + +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.powers.StrengthPower; + +public class CursedStrength extends AbstractAwakenedPower implements OnLoseEnergyPower { + // intellij stuff buff + + public static final String NAME = CursedStrength.class.getSimpleName(); + public static final String POWER_ID = makeID(NAME); + + // intellij stuff buff + + public CursedStrength(final AbstractCreature owner, int amount) { + super(NAME, PowerType.BUFF, false, owner, null, amount); + updateDescription(); + } + + @Override + public void LoseEnergyAction(int gained) { + this.flash(); + applyToSelf(new StrengthPower(AbstractDungeon.player, amount)); + } + + @Override + public void updateDescription() { + description = DESCRIPTIONS[0] + amount + DESCRIPTIONS[1]; + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/powers/DarkEchoPower.java b/src/main/java/awakenedOne/powers/DarkEchoPower.java new file mode 100644 index 000000000..bd6047a91 --- /dev/null +++ b/src/main/java/awakenedOne/powers/DarkEchoPower.java @@ -0,0 +1,82 @@ +package awakenedOne.powers; + + +import basemod.interfaces.OnPowersModifiedSubscriber; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.TextureAtlas; +import com.evacipated.cardcrawl.mod.stslib.powers.abstracts.TwoAmountPower; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.actions.common.DamageAllEnemiesAction; +import com.megacrit.cardcrawl.actions.utility.SFXAction; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.PowerStrings; +import com.megacrit.cardcrawl.powers.StrengthPower; +import com.megacrit.cardcrawl.vfx.combat.ShockWaveEffect; +import downfall.util.TextureLoader; +import expansioncontent.expansionContentMod; + + +public class DarkEchoPower extends TwoAmountPower implements OnPowersModifiedSubscriber { + // intellij stuff buff + + public static final String POWER_ID = "awakened:DarkEchoPower"; + private static final PowerStrings powerStrings = CardCrawlGame.languagePack.getPowerStrings(POWER_ID); + public static final String NAME = powerStrings.NAME; + public static final String[] DESCRIPTIONS = powerStrings.DESCRIPTIONS; + + private static final Texture tex84 = TextureLoader.getTexture(expansionContentMod.getModID() + "Resources/images/powers/StudyHexaghost84.png"); + private static final Texture tex32 = TextureLoader.getTexture(expansionContentMod.getModID() + "Resources/images/powers/StudyHexaghost32.png"); + + public DarkEchoPower(int amount) { + this.name = NAME; + this.ID = POWER_ID; + this.owner = AbstractDungeon.player; + this.amount = amount; + if (AbstractDungeon.player.hasPower(StrengthPower.POWER_ID)) + this.amount2 = 4 + AbstractDungeon.player.getPower(StrengthPower.POWER_ID).amount; + else this.amount2 = 4; + this.type = PowerType.BUFF; + this.region128 = new TextureAtlas.AtlasRegion(tex84, 0, 0, 84, 84); + this.region48 = new TextureAtlas.AtlasRegion(tex32, 0, 0, 32, 32); + + this.updateDescription(); + } + + @Override + public void atEndOfTurn(boolean isPlayer) { + AbstractDungeon.actionManager.addToBottom(new SFXAction("VO_AWAKENEDONE_3")); + for (int i = 0; i < amount; i++) { + AbstractDungeon.actionManager.addToBottom(new VFXAction(AbstractDungeon.player, new ShockWaveEffect(AbstractDungeon.player.hb.cX, AbstractDungeon.player.hb.cY, new Color(0.1F, 0.0F, 0.2F, 1.0F), ShockWaveEffect.ShockWaveType.CHAOTIC), 0.3F)); + AbstractDungeon.actionManager.addToBottom(new VFXAction(AbstractDungeon.player, new ShockWaveEffect(AbstractDungeon.player.hb.cX, AbstractDungeon.player.hb.cY, new Color(0.3F, 0.2F, 0.4F, 1.0F), ShockWaveEffect.ShockWaveType.CHAOTIC), 1.0F)); + this.addToBot(new DamageAllEnemiesAction(null, DamageInfo.createDamageMatrix(amount2, true), DamageInfo.DamageType.THORNS, AbstractGameAction.AttackEffect.FIRE, true)); + } + } + + @Override + public void receivePowersModified() { + if (AbstractDungeon.player.hasPower(StrengthPower.POWER_ID)) + this.amount2 = 4 + AbstractDungeon.player.getPower(StrengthPower.POWER_ID).amount; + else this.amount2 = 4; + updateDescription(); + } + + @Override + public void updateDescription() { + if (this.amount != 1) { + this.description = DESCRIPTIONS[0] + amount2 + DESCRIPTIONS[1] + amount + DESCRIPTIONS[2]; + } + if (this.amount == 1) { + this.description = DESCRIPTIONS[0] + amount2 + DESCRIPTIONS[3]; + } + + } +} + + + + diff --git a/src/main/java/awakenedOne/powers/DarknessFallsPower.java b/src/main/java/awakenedOne/powers/DarknessFallsPower.java new file mode 100644 index 000000000..98f8cebc3 --- /dev/null +++ b/src/main/java/awakenedOne/powers/DarknessFallsPower.java @@ -0,0 +1,29 @@ +package awakenedOne.powers; + +import com.megacrit.cardcrawl.actions.common.GainBlockAction; +import com.megacrit.cardcrawl.core.AbstractCreature; + +public class DarknessFallsPower extends AbstractAwakenedPower implements OnLoseEnergyPower { + // intellij stuff buff + + public static final String NAME = DarknessFallsPower.class.getSimpleName(); + public static final String POWER_ID = makeID(NAME); + + // intellij stuff buff + + public DarknessFallsPower(final AbstractCreature owner, int amount) { + super(NAME, PowerType.BUFF, false, owner, null, amount); + updateDescription(); + } + + @Override + public void LoseEnergyAction(int gained) { + this.flash(); + addToBot(new GainBlockAction(owner, gained * amount)); + } + + @Override + public void updateDescription() { + description = DESCRIPTIONS[0] + amount + DESCRIPTIONS[1]; + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/powers/DemonGlyphPower.java b/src/main/java/awakenedOne/powers/DemonGlyphPower.java new file mode 100644 index 000000000..5353a42ef --- /dev/null +++ b/src/main/java/awakenedOne/powers/DemonGlyphPower.java @@ -0,0 +1,37 @@ +package awakenedOne.powers; + +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.powers.DexterityPower; +import com.megacrit.cardcrawl.powers.StrengthPower; +import com.megacrit.cardcrawl.vfx.combat.InflameEffect; + +public class DemonGlyphPower extends AbstractAwakenedPower implements OnAwakenPower { + // intellij stuff buff + public static final String NAME = DemonGlyphPower.class.getSimpleName(); + public static final String POWER_ID = makeID(NAME); + public boolean activated = false; + + public DemonGlyphPower(int amount) { + super(NAME, PowerType.BUFF, false, AbstractDungeon.player, null, amount); + updateDescription(); + activated = false; + } + + @Override + public void onAwaken(int vibe) { + if (vibe == 10 && !activated) { + activated = true; + flash(); + this.addToBot(new VFXAction(AbstractDungeon.player, new InflameEffect(AbstractDungeon.player), 1.0F)); + applyToSelf(new StrengthPower(AbstractDungeon.player, amount)); + applyToSelf(new DexterityPower(AbstractDungeon.player, amount)); + } + } + + + @Override + public void updateDescription() { + description = DESCRIPTIONS[0] + amount + DESCRIPTIONS[1]; + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/powers/DoubleSpellPower.java b/src/main/java/awakenedOne/powers/DoubleSpellPower.java new file mode 100644 index 000000000..6539af4bd --- /dev/null +++ b/src/main/java/awakenedOne/powers/DoubleSpellPower.java @@ -0,0 +1,68 @@ +package awakenedOne.powers; + +import awakenedOne.cards.tokens.spells.AbstractSpellCard; +import com.megacrit.cardcrawl.actions.common.RemoveSpecificPowerAction; +import com.megacrit.cardcrawl.actions.utility.UseCardAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.CardQueueItem; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +public class DoubleSpellPower extends AbstractAwakenedPower { + // intellij stuff buff + public static final String NAME = DoubleSpellPower.class.getSimpleName(); + public static final String POWER_ID = makeID(NAME); + + public DoubleSpellPower(int amount) { + super(NAME, PowerType.BUFF, true, AbstractDungeon.player, null, amount); + this.updateDescription(); + } + + public void onUseCard(AbstractCard card, UseCardAction action) { + if (!card.purgeOnUse && this.amount > 0 && (card instanceof AbstractSpellCard)) { + this.flash(); + AbstractMonster m = null; + if (action.target != null) { + m = (AbstractMonster) action.target; + } + + if (m == null) { + m = AbstractDungeon.getMonsters().getRandomMonster(true); + } + + AbstractCard tmp = card.makeSameInstanceOf(); + AbstractDungeon.player.limbo.addToBottom(tmp); + tmp.current_x = card.current_x; + tmp.current_y = card.current_y; + tmp.target_x = (float) Settings.WIDTH / 2.0F - 300.0F * Settings.scale; + tmp.target_y = (float) Settings.HEIGHT / 2.0F; + if (m != null) { + tmp.calculateCardDamage(m); + } + + tmp.purgeOnUse = true; + AbstractDungeon.actionManager.addCardQueueItem(new CardQueueItem(tmp, m, card.energyOnUse, true, true), true); + --this.amount; + if (this.amount == 0) { + this.addToTop(new RemoveSpecificPowerAction(this.owner, this.owner, ID)); + } + updateDescription(); + } + + } + + public void atEndOfTurn(boolean isPlayer) { + if (isPlayer) { + this.addToBot(new RemoveSpecificPowerAction(this.owner, this.owner, this)); + } + } + + public void updateDescription() { + if (this.amount == 1) { + this.description = DESCRIPTIONS[0]; + } else { + this.description = DESCRIPTIONS[1] + this.amount + DESCRIPTIONS[2]; + } + } +} diff --git a/src/main/java/awakenedOne/powers/EclipseEmbracePower.java b/src/main/java/awakenedOne/powers/EclipseEmbracePower.java new file mode 100644 index 000000000..02f48b0a3 --- /dev/null +++ b/src/main/java/awakenedOne/powers/EclipseEmbracePower.java @@ -0,0 +1,37 @@ +package awakenedOne.powers; + +import automaton.cards.goodstatus.IntoTheVoid; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.status.VoidCard; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.powers.DrawCardNextTurnPower; +import com.megacrit.cardcrawl.powers.EnergizedBluePower; + +public class EclipseEmbracePower extends AbstractAwakenedPower { + // intellij stuff buff + public static final String NAME = EclipseEmbracePower.class.getSimpleName(); + public static final String POWER_ID = makeID(NAME); + + public EclipseEmbracePower(int amount) { + super(NAME, PowerType.BUFF, false, AbstractDungeon.player, null, amount); + } + + @Override + public void onExhaust(AbstractCard card) { + if (card instanceof VoidCard || card instanceof IntoTheVoid) { + this.flash(); + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new EnergizedBluePower(AbstractDungeon.player, amount))); + applyToSelf(new DrawCardNextTurnPower(AbstractDungeon.player, amount)); + } + } + + @Override + public void updateDescription() { + if (amount == 1) { + description = DESCRIPTIONS[0]; + } else { + description = DESCRIPTIONS[1] + amount + DESCRIPTIONS[2] + amount + DESCRIPTIONS[3]; + } + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/powers/EnsorcelatePower.java b/src/main/java/awakenedOne/powers/EnsorcelatePower.java new file mode 100644 index 000000000..a4fab7c28 --- /dev/null +++ b/src/main/java/awakenedOne/powers/EnsorcelatePower.java @@ -0,0 +1,37 @@ +package awakenedOne.powers; + +import com.megacrit.cardcrawl.actions.common.RemoveSpecificPowerAction; +import com.megacrit.cardcrawl.actions.utility.UseCardAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; + +public class EnsorcelatePower extends AbstractAwakenedPower { + // intellij stuff buff + public static final String NAME = EnsorcelatePower.class.getSimpleName(); + public static final String POWER_ID = makeID(NAME); + + public EnsorcelatePower(int amount) { + super(NAME, PowerType.BUFF, false, AbstractDungeon.player, null, amount); + } + + + public void onUseCard(AbstractCard card, UseCardAction action) { + if (card.type == AbstractCard.CardType.POWER && !card.purgeOnUse && this.amount > 0) { + this.flash(); + --this.amount; + if (this.amount == 0) { + this.addToTop(new RemoveSpecificPowerAction(this.owner, this.owner, this)); + } + } + + } + + public void updateDescription() { + if (amount == 1) { + description = DESCRIPTIONS[0]; + } else { + description = DESCRIPTIONS[1] + this.amount + DESCRIPTIONS[2]; + } + } + +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/powers/FlarePower.java b/src/main/java/awakenedOne/powers/FlarePower.java new file mode 100644 index 000000000..7082fec0a --- /dev/null +++ b/src/main/java/awakenedOne/powers/FlarePower.java @@ -0,0 +1,36 @@ +package awakenedOne.powers; + +import awakenedOne.actions.AllEnemyLoseHPAction; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.RemoveSpecificPowerAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; + +public class FlarePower extends AbstractAwakenedPower { + // intellij stuff buff + public static final String NAME = FlarePower.class.getSimpleName(); + public static final String POWER_ID = makeID(NAME); + + public FlarePower(int amount) { + super(NAME, PowerType.BUFF, false, AbstractDungeon.player, null, amount); + } + + @Override + public void onAfterCardPlayed(AbstractCard usedCard) { + if (usedCard.type != AbstractCard.CardType.ATTACK) { + this.flash(); + this.addToBot(new AllEnemyLoseHPAction(amount, AbstractGameAction.AttackEffect.FIRE)); + } + } + + public void atEndOfTurn(boolean isPlayer) { + if (isPlayer) { + this.addToBot(new RemoveSpecificPowerAction(this.owner, this.owner, this)); + } + } + + @Override + public void updateDescription() { + description = DESCRIPTIONS[0] + amount + DESCRIPTIONS[1]; + } +} diff --git a/src/main/java/awakenedOne/powers/IntensifyDebuffPower.java b/src/main/java/awakenedOne/powers/IntensifyDebuffPower.java new file mode 100644 index 000000000..c553ba3f2 --- /dev/null +++ b/src/main/java/awakenedOne/powers/IntensifyDebuffPower.java @@ -0,0 +1,34 @@ +package awakenedOne.powers; + +import com.megacrit.cardcrawl.actions.common.RemoveSpecificPowerAction; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; + +public class IntensifyDebuffPower extends AbstractAwakenedPower { + // intellij stuff buff + public static final String NAME = IntensifyDebuffPower.class.getSimpleName(); + public static final String POWER_ID = makeID(NAME); + + public IntensifyDebuffPower(int amount) { + super(NAME, PowerType.DEBUFF, true, AbstractDungeon.player, null, amount); + } + + public void atEndOfTurn(boolean isPlayer) { + if (isPlayer) { + --this.amount; + updateDescription(); + if (this.amount == 0) { + this.addToTop(new RemoveSpecificPowerAction(this.owner, this.owner, ID)); + } + } + } + + public void updateDescription() { + if (this.amount == 1) { + this.description = DESCRIPTIONS[0]; + } else { + this.description = DESCRIPTIONS[1] + this.amount + DESCRIPTIONS[2]; + } + + } + +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/powers/IntensifyPower.java b/src/main/java/awakenedOne/powers/IntensifyPower.java new file mode 100644 index 000000000..b01692284 --- /dev/null +++ b/src/main/java/awakenedOne/powers/IntensifyPower.java @@ -0,0 +1,63 @@ +package awakenedOne.powers; + +import com.megacrit.cardcrawl.actions.common.RemoveSpecificPowerAction; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; + +public class IntensifyPower extends AbstractAwakenedPower { + // intellij stuff buff + public static final String NAME = IntensifyPower.class.getSimpleName(); + public static final String POWER_ID = makeID(NAME); + + public IntensifyPower(int amount) { + super(NAME, PowerType.BUFF, true, AbstractDungeon.player, null, amount); + } + + //public void onUseCard(AbstractCard card, UseCardAction action) { + // if (!card.purgeOnUse && this.amount > 0 && (card instanceof AbstractSpellCard)) { + // this.flash(); + // AbstractMonster m = null; + // if (action.target != null) { + // m = (AbstractMonster) action.target; + // } + // + // AbstractCard tmp = card.makeSameInstanceOf(); + // AbstractDungeon.player.limbo.addToBottom(tmp); + // tmp.current_x = card.current_x; + // tmp.current_y = card.current_y; + // tmp.target_x = (float) Settings.WIDTH / 2.0F - 300.0F * Settings.scale; + // tmp.target_y = (float) Settings.HEIGHT / 2.0F; + // if (m != null) { + // tmp.calculateCardDamage(m); + // } + // + // tmp.purgeOnUse = true; + // AbstractDungeon.actionManager.addCardQueueItem(new CardQueueItem(tmp, m, card.energyOnUse, true, true), true); + // --this.amount; + // updateDescription(); + // if (this.amount == 0) { + // this.addToTop(new RemoveSpecificPowerAction(this.owner, this.owner, ID)); + // } + // } + // + // } + + public void atEndOfTurn(boolean isPlayer) { + if (isPlayer) { + --this.amount; + updateDescription(); + if (this.amount == 0) { + this.addToTop(new RemoveSpecificPowerAction(this.owner, this.owner, ID)); + } + } + } + + public void updateDescription() { + if (this.amount == 1) { + this.description = DESCRIPTIONS[0]; + } else { + this.description = DESCRIPTIONS[1] + this.amount + DESCRIPTIONS[2]; + } + + } + +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/powers/ManaburnPower.java b/src/main/java/awakenedOne/powers/ManaburnPower.java new file mode 100644 index 000000000..bedd3a264 --- /dev/null +++ b/src/main/java/awakenedOne/powers/ManaburnPower.java @@ -0,0 +1,84 @@ +package awakenedOne.powers; + +import awakenedOne.cards.Nihil; +import awakenedOne.relics.StrengthBooster; +import com.megacrit.cardcrawl.actions.common.DamageAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.relics.AbstractRelic; +import hermit.patches.EnumPatch; + +public class ManaburnPower extends AbstractAwakenedPower implements OnLoseEnergyPower { + // intellij stuff buff + + public static final String NAME = ManaburnPower.class.getSimpleName(); + public static final String POWER_ID = makeID(NAME); + + + public ManaburnPower(final AbstractCreature owner, int amount) { + super(NAME, PowerType.DEBUFF, false, owner, null, amount); + updateDescription(); + } + + + @Override + public void LoseEnergyAction(int gained) { + this.flash(); + + boolean hascrow = AbstractDungeon.player.hasRelic(StrengthBooster.ID); + + if (!hascrow) { + this.addToBot(new DamageAction(owner, new DamageInfo(owner, amount * gained, DamageInfo.DamageType.HP_LOSS), EnumPatch.HERMIT_GHOSTFIRE)); + } + + if (hascrow) { + this.addToBot(new DamageAction(owner, new DamageInfo(owner, (amount * gained) + ((amount * gained) / 2), DamageInfo.DamageType.HP_LOSS), EnumPatch.HERMIT_GHOSTFIRE)); + + for (AbstractRelic r : AbstractDungeon.player.relics) { + if (r instanceof StrengthBooster) { + ((StrengthBooster) r).onSpecificTrigger((amount * gained) / 2); + } + } + } + } + + @Override + public void triggerMarks(AbstractCard card) { + if (card.cardID.equals(Nihil.ID)) { + + + boolean hascrow = AbstractDungeon.player.hasRelic(StrengthBooster.ID); + + if (!hascrow) { + this.addToBot(new DamageAction(owner, new DamageInfo(owner, amount, DamageInfo.DamageType.HP_LOSS), EnumPatch.HERMIT_GHOSTFIRE)); + } + + if (hascrow) { + this.addToBot(new DamageAction(owner, new DamageInfo(owner, (amount) + ((amount) / 2), DamageInfo.DamageType.HP_LOSS), EnumPatch.HERMIT_GHOSTFIRE)); + + for (AbstractRelic r : AbstractDungeon.player.relics) { + if (r instanceof StrengthBooster) { + ((StrengthBooster) r).onSpecificTrigger((amount) / 2); + } + } + } + + } + } + + @Override + public void updateDescription() { + boolean hascrow = AbstractDungeon.player.hasRelic(StrengthBooster.ID); + + if (!hascrow) { + description = DESCRIPTIONS[0] + amount + DESCRIPTIONS[1]; + } + + if (hascrow) { + description = DESCRIPTIONS[0] + (amount) + (amount / 2) + DESCRIPTIONS[1]; + } + + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/powers/MoonlitVisionPower.java b/src/main/java/awakenedOne/powers/MoonlitVisionPower.java new file mode 100644 index 000000000..252c2c478 --- /dev/null +++ b/src/main/java/awakenedOne/powers/MoonlitVisionPower.java @@ -0,0 +1,31 @@ +package awakenedOne.powers; + +import com.evacipated.cardcrawl.mod.stslib.powers.interfaces.NonStackablePower; +import com.megacrit.cardcrawl.actions.common.GainEnergyAction; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; + +import static awakenedOne.util.Wiz.atb; + +public class MoonlitVisionPower extends AbstractAwakenedPower implements NonStackablePower { + // intellij stuff buff + public static final String NAME = MoonlitVisionPower.class.getSimpleName(); + public static final String POWER_ID = makeID(NAME); + + public MoonlitVisionPower() { + super(NAME, PowerType.BUFF, false, AbstractDungeon.player, null, 1); + updateDescription(); + } + + @Override + public void atStartOfTurnPostDraw() { + if (AbstractDungeon.player.hand.size() >= 8) { + flash(); + atb(new GainEnergyAction(amount)); + } + } + + public void updateDescription() { + description = DESCRIPTIONS[0] + amount + DESCRIPTIONS[1]; + } + +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/powers/NihilPower.java b/src/main/java/awakenedOne/powers/NihilPower.java new file mode 100644 index 000000000..69f84f77d --- /dev/null +++ b/src/main/java/awakenedOne/powers/NihilPower.java @@ -0,0 +1,28 @@ +package awakenedOne.powers; + +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; + +public class NihilPower extends AbstractAwakenedPower { + + public static final String NAME = NihilPower.class.getSimpleName(); + public static final String POWER_ID = makeID(NAME); + + + public NihilPower(final AbstractCreature owner, int amount) { + super(NAME, PowerType.DEBUFF, false, owner, null, amount); + updateDescription(); + } + + @Override + public void atStartOfTurn() { + flash(); + addToBot(new ApplyPowerAction(owner, AbstractDungeon.player, new ManaburnPower(owner, amount), amount)); + } + + @Override + public void updateDescription() { + description = DESCRIPTIONS[0] + amount + DESCRIPTIONS[1]; + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/powers/OnAwakenPower.java b/src/main/java/awakenedOne/powers/OnAwakenPower.java new file mode 100644 index 000000000..c799fea3c --- /dev/null +++ b/src/main/java/awakenedOne/powers/OnAwakenPower.java @@ -0,0 +1,5 @@ +package awakenedOne.powers; + +public interface OnAwakenPower { + void onAwaken(int amount); +} diff --git a/src/main/java/awakenedOne/powers/OnLoseEnergyPower.java b/src/main/java/awakenedOne/powers/OnLoseEnergyPower.java new file mode 100644 index 000000000..0a11d9590 --- /dev/null +++ b/src/main/java/awakenedOne/powers/OnLoseEnergyPower.java @@ -0,0 +1,5 @@ +package awakenedOne.powers; + +public interface OnLoseEnergyPower { + void LoseEnergyAction(int amount); +} diff --git a/src/main/java/awakenedOne/powers/PrimacyPower.java b/src/main/java/awakenedOne/powers/PrimacyPower.java new file mode 100644 index 000000000..e0cfd71eb --- /dev/null +++ b/src/main/java/awakenedOne/powers/PrimacyPower.java @@ -0,0 +1,60 @@ +package awakenedOne.powers; + +import com.evacipated.cardcrawl.mod.stslib.powers.interfaces.OnReceivePowerPower; +import com.megacrit.cardcrawl.actions.common.DrawCardAction; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.powers.AbstractPower; +import com.megacrit.cardcrawl.powers.StrengthPower; + +import static awakenedOne.util.Wiz.atb; + +public class PrimacyPower extends AbstractAwakenedPower implements OnReceivePowerPower { + // intellij stuff buff + public static final String NAME = PrimacyPower.class.getSimpleName(); + public static final String POWER_ID = makeID(NAME); + private int cardsDoubledThisTurn = 0; + + + public PrimacyPower(int amount) { + super(NAME, PowerType.BUFF, false, AbstractDungeon.player, null, amount); + } + + + public void atStartOfTurn() { + this.cardsDoubledThisTurn = 0; + updateDescription(); + } + + @Override + public boolean onReceivePower(AbstractPower power, AbstractCreature target, AbstractCreature source) { + if (cardsDoubledThisTurn < this.amount) { + if ((power instanceof StrengthPower) && (power.amount > 0)) { + flash(); + this.cardsDoubledThisTurn += 1; + atb(new DrawCardAction(AbstractDungeon.player, 1)); + updateDescription(); + } + } + return true; + } + + + public void updateDescription() { + + + if (this.amount == 1) { + this.description = DESCRIPTIONS[0]; + } else { + this.description = (DESCRIPTIONS[1] + this.amount + DESCRIPTIONS[2]); + } + + if (cardsDoubledThisTurn >= 3) { + this.description += DESCRIPTIONS[6]; + } else if ((this.amount - cardsDoubledThisTurn) > 1) { + this.description += DESCRIPTIONS[3] + (this.amount - cardsDoubledThisTurn) + DESCRIPTIONS[4]; + } else { + this.description += DESCRIPTIONS[3] + (this.amount - cardsDoubledThisTurn) + DESCRIPTIONS[5]; + } + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/powers/ReverseRitualPower.java b/src/main/java/awakenedOne/powers/ReverseRitualPower.java new file mode 100644 index 000000000..d7cf61889 --- /dev/null +++ b/src/main/java/awakenedOne/powers/ReverseRitualPower.java @@ -0,0 +1,32 @@ +package awakenedOne.powers; + +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.powers.StrengthPower; + +public class ReverseRitualPower extends AbstractAwakenedPower { + // intellij stuff buff + public static final String NAME = ReverseRitualPower.class.getSimpleName(); + public static final String POWER_ID = makeID(NAME); + + + public ReverseRitualPower(int amount) { + super(NAME, PowerType.DEBUFF, false, AbstractDungeon.player, null, amount); + updateDescription(); + this.canGoNegative = false; + priority = -99; + } + + + public void updateDescription() { + this.description = DESCRIPTIONS[0] + this.amount + DESCRIPTIONS[1]; + } + + public void atEndOfTurn(boolean isPlayer) { + if (isPlayer) { + this.flash(); + this.addToBot(new ApplyPowerAction(this.owner, this.owner, new StrengthPower(this.owner, -this.amount), -this.amount)); + } + } + +} diff --git a/src/main/java/awakenedOne/powers/RisingChantPower.java b/src/main/java/awakenedOne/powers/RisingChantPower.java new file mode 100644 index 000000000..c073a7329 --- /dev/null +++ b/src/main/java/awakenedOne/powers/RisingChantPower.java @@ -0,0 +1,25 @@ +package awakenedOne.powers; + +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.powers.StrengthPower; + +public class RisingChantPower extends AbstractAwakenedPower { + // intellij stuff buff + public static final String NAME = RisingChantPower.class.getSimpleName(); + public static final String POWER_ID = makeID(NAME); + + public RisingChantPower(int amount) { + super(NAME, PowerType.BUFF, false, AbstractDungeon.player, null, amount); + } + + public void updateDescription() { + this.description = DESCRIPTIONS[0] + this.amount + DESCRIPTIONS[1]; + } + + @Override + public void onSpecificTrigger() { + applyToSelf(new StrengthPower(AbstractDungeon.player, amount)); + flash(); + } + +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/powers/SacramentPower.java b/src/main/java/awakenedOne/powers/SacramentPower.java new file mode 100644 index 000000000..e3d87b00c --- /dev/null +++ b/src/main/java/awakenedOne/powers/SacramentPower.java @@ -0,0 +1,28 @@ +package awakenedOne.powers; + +import com.megacrit.cardcrawl.actions.common.GainBlockAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; + +public class SacramentPower extends AbstractAwakenedPower { + // intellij stuff buff + public static final String NAME = SacramentPower.class.getSimpleName(); + public static final String POWER_ID = makeID(NAME); + + public SacramentPower(int amount) { + super(NAME, PowerType.BUFF, false, AbstractDungeon.player, null, amount); + } + + @Override + public void onAfterCardPlayed(AbstractCard card) { + if (card.type == AbstractCard.CardType.POWER) { + this.flash(); + addToBot(new GainBlockAction(owner, amount)); + } + } + + public void updateDescription() { + this.description = DESCRIPTIONS[0] + this.amount + DESCRIPTIONS[1]; + } + +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/powers/SheerTerrorPower.java b/src/main/java/awakenedOne/powers/SheerTerrorPower.java new file mode 100644 index 000000000..bc78807af --- /dev/null +++ b/src/main/java/awakenedOne/powers/SheerTerrorPower.java @@ -0,0 +1,42 @@ +package awakenedOne.powers; + +import com.megacrit.cardcrawl.actions.common.ReducePowerAction; +import com.megacrit.cardcrawl.actions.common.RemoveSpecificPowerAction; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; + +public class SheerTerrorPower extends AbstractAwakenedPower { + // intellij stuff buff + public static final String NAME = SheerTerrorPower.class.getSimpleName(); + public static final String POWER_ID = makeID(NAME); + + public SheerTerrorPower(AbstractCreature owner, int amount) { + super(NAME, PowerType.DEBUFF, true, owner, null, amount); + + if (this.amount <= 0) { + this.addToTop(new RemoveSpecificPowerAction(this.owner, this.owner, POWER_ID)); + } + updateDescription(); + } + + public void atStartOfTurn() { + if (this.amount <= 0) { + AbstractDungeon.actionManager.addToBottom(new RemoveSpecificPowerAction(this.owner, this.owner, this)); + } else { + flash(); + AbstractDungeon.actionManager.addToBottom(new ReducePowerAction(this.owner, this.owner, this, 1)); + } + } + + public void updateDescription() { + if (this.amount == 1) { + this.description = DESCRIPTIONS[0]; + } + + if (this.amount != 1) { + this.description = DESCRIPTIONS[1] + this.amount + DESCRIPTIONS[2]; + } + + } + +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/powers/ShroudOfMiasmaPower.java b/src/main/java/awakenedOne/powers/ShroudOfMiasmaPower.java new file mode 100644 index 000000000..f5de5b860 --- /dev/null +++ b/src/main/java/awakenedOne/powers/ShroudOfMiasmaPower.java @@ -0,0 +1,26 @@ +package awakenedOne.powers; + +import com.megacrit.cardcrawl.actions.common.GainBlockAction; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; + +public class ShroudOfMiasmaPower extends AbstractAwakenedPower { + // intellij stuff buff + public static final String NAME = ShroudOfMiasmaPower.class.getSimpleName(); + public static final String POWER_ID = makeID(NAME); + + public ShroudOfMiasmaPower(int amount) { + super(NAME, PowerType.BUFF, false, AbstractDungeon.player, null, amount); + } + + @Override + public void onSpecificTrigger() { + flash(); + addToTop(new GainBlockAction(owner, amount, true)); + } + + + @Override + public void updateDescription() { + description = DESCRIPTIONS[0] + amount + DESCRIPTIONS[1]; + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/powers/SongOfSorrowPower.java b/src/main/java/awakenedOne/powers/SongOfSorrowPower.java new file mode 100644 index 000000000..b258eba99 --- /dev/null +++ b/src/main/java/awakenedOne/powers/SongOfSorrowPower.java @@ -0,0 +1,32 @@ +package awakenedOne.powers; + +import awakenedOne.actions.AllEnemyLoseHPAction; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.DamageAllEnemiesAction; +import com.megacrit.cardcrawl.actions.common.LoseHPAction; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; + +public class SongOfSorrowPower extends AbstractAwakenedPower { + // intellij stuff buff + public static final String NAME = SongOfSorrowPower.class.getSimpleName(); + public static final String POWER_ID = makeID(NAME); + + private final boolean active = true; + + public SongOfSorrowPower(int amount) { + super(NAME, PowerType.BUFF, false, AbstractDungeon.player, null, amount); + } + + @Override + public void onSpecificTrigger() { + flash(); + this.addToBot(new AllEnemyLoseHPAction(amount, AbstractGameAction.AttackEffect.FIRE)); + } + + public void updateDescription() { + this.description = DESCRIPTIONS[0] + this.amount + DESCRIPTIONS[1]; + } + +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/powers/SpellbinderPower.java b/src/main/java/awakenedOne/powers/SpellbinderPower.java new file mode 100644 index 000000000..2535ea78b --- /dev/null +++ b/src/main/java/awakenedOne/powers/SpellbinderPower.java @@ -0,0 +1,33 @@ +package awakenedOne.powers; + +import awakenedOne.actions.ConjureAction; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; + +import static awakenedOne.util.Wiz.atb; + +public class SpellbinderPower extends AbstractAwakenedPower { + // intellij stuff buff + public static final String NAME = SpellbinderPower.class.getSimpleName(); + public static final String POWER_ID = makeID(NAME); + + public SpellbinderPower(int amount) { + super(NAME, PowerType.BUFF, false, AbstractDungeon.player, null, amount); + } + + @Override + public void atStartOfTurn() { + flash(); + for (int i = 0; i < amount; i++) { + atb(new ConjureAction(false)); + } + } + + public void updateDescription() { + if (amount == 1) { + description = DESCRIPTIONS[0]; + } else { + description = DESCRIPTIONS[1] + this.amount + DESCRIPTIONS[2]; + } + } + +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/powers/SpellshieldPower.java b/src/main/java/awakenedOne/powers/SpellshieldPower.java new file mode 100644 index 000000000..05f655147 --- /dev/null +++ b/src/main/java/awakenedOne/powers/SpellshieldPower.java @@ -0,0 +1,33 @@ +package awakenedOne.powers; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.GainBlockAction; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; + +public class SpellshieldPower extends AbstractAwakenedPower { + // intellij stuff buff + public static final String NAME = SpellshieldPower.class.getSimpleName(); + public static final String POWER_ID = makeID(NAME); + + public SpellshieldPower(int amount) { + super(NAME, PowerType.BUFF, false, AbstractDungeon.player, null, amount); + } + + public void atEndOfTurnPreEndTurnCards(boolean isPlayer) { + AbstractDungeon.actionManager.addToBottom(new AbstractGameAction() { + public void update() { + isDone = true; + if (AbstractDungeon.player.hand.group.stream().anyMatch(c -> c.selfRetain || c.retain)) + flash(); + AbstractDungeon.player.hand.group.stream() + .filter(c -> c.selfRetain || c.retain) + .forEach(c -> AbstractDungeon.actionManager.addToBottom(new GainBlockAction(owner, owner, SpellshieldPower.this.amount, true))); + } + }); + } + + @Override + public void updateDescription() { + description = DESCRIPTIONS[0] + amount + DESCRIPTIONS[1]; + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/powers/StrengthReturnPower.java b/src/main/java/awakenedOne/powers/StrengthReturnPower.java new file mode 100644 index 000000000..fe755e59f --- /dev/null +++ b/src/main/java/awakenedOne/powers/StrengthReturnPower.java @@ -0,0 +1,41 @@ +package awakenedOne.powers; + +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.powers.LoseStrengthPower; +import com.megacrit.cardcrawl.powers.StrengthPower; + +public class StrengthReturnPower extends AbstractAwakenedPower { + // intellij stuff buff + public static final String NAME = StrengthReturnPower.class.getSimpleName(); + public static final String POWER_ID = "awakened:StrengthReturnPower"; + + public StrengthReturnPower(final AbstractCreature owner, int amount) { + super(NAME, PowerType.DEBUFF, false, owner, null, amount); + updateDescription(); + } + + public void stackPower(int stackAmount) { + this.fontScale = 8.0F; + this.amount += stackAmount; + this.updateDescription(); + } + + public int onAttacked(DamageInfo info, int damageAmount) { + if (info.type != DamageInfo.DamageType.THORNS && info.type != DamageInfo.DamageType.HP_LOSS && info.owner != null && info.owner != this.owner) { + this.flash(); + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new StrengthPower(AbstractDungeon.player, this.amount), this.amount)); + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new LoseStrengthPower(AbstractDungeon.player, this.amount), this.amount)); + } + + return damageAmount; + } + + + @Override + public void updateDescription() { + description = DESCRIPTIONS[0] + amount + DESCRIPTIONS[1]; + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/powers/ThaumaturgyPower.java b/src/main/java/awakenedOne/powers/ThaumaturgyPower.java new file mode 100644 index 000000000..4e30d7260 --- /dev/null +++ b/src/main/java/awakenedOne/powers/ThaumaturgyPower.java @@ -0,0 +1,52 @@ +package awakenedOne.powers; + +import awakenedOne.cards.tokens.Ceremony; +import com.megacrit.cardcrawl.actions.common.MakeTempCardInHandAction; +import com.megacrit.cardcrawl.actions.common.RemoveSpecificPowerAction; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; + +public class ThaumaturgyPower extends AbstractAwakenedPower { + // intellij stuff buff + public static final String NAME = ThaumaturgyPower.class.getSimpleName(); + public static final String POWER_ID = makeID(NAME); + + public ThaumaturgyPower(int amount) { + super(NAME, PowerType.BUFF, false, AbstractDungeon.player, null, amount); + } + +// @Override +// public void onAfterCardPlayed(AbstractCard card) { +// if (card.type == AbstractCard.CardType.POWER) { +// this.flash(); +// this.addToBot(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new PlatedArmorPower(AbstractDungeon.player, amount), amount)); +// } +// } + +// @Override +// public boolean onReceivePower(AbstractPower power, AbstractCreature target, AbstractCreature source) { +// if ((power instanceof StrengthPower) && (power.amount > 0)) { +// flash(); +// addToBot(new GainBlockAction(owner, this.amount)); +//// addToBot(new GainBlockAction(owner, this.amount * power.amount)); +// updateDescription(); +// } +// return true; +// } + + @Override + public void atStartOfTurn() { + flash(); + this.addToBot(new MakeTempCardInHandAction(new Ceremony(), 1, false)); + this.amount--; + if (this.amount <= 0) { + addToBot(new RemoveSpecificPowerAction(this.owner, this.owner, this)); + } + updateDescription(); + } + + + public void updateDescription() { + this.description = DESCRIPTIONS[0] + this.amount + DESCRIPTIONS[1]; + } + +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/powers/VoidRefundPower.java b/src/main/java/awakenedOne/powers/VoidRefundPower.java new file mode 100644 index 000000000..d7512e78b --- /dev/null +++ b/src/main/java/awakenedOne/powers/VoidRefundPower.java @@ -0,0 +1,50 @@ +package awakenedOne.powers; + +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.GainEnergyAction; +import com.megacrit.cardcrawl.actions.common.RemoveSpecificPowerAction; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.powers.EnergizedBluePower; + +import static awakenedOne.util.Wiz.att; + +public class VoidRefundPower extends AbstractAwakenedPower implements OnLoseEnergyPower { + // intellij stuff buff + + public static final String NAME = VoidRefundPower.class.getSimpleName(); + public static final String POWER_ID = makeID(NAME); + + + public VoidRefundPower(final AbstractCreature owner, int amount) { + super(NAME, PowerType.BUFF, false, owner, null, amount); + updateDescription(); + } + + + @Override + public void LoseEnergyAction(int gained) { + this.flash(); + + if (!AbstractDungeon.actionManager.turnHasEnded) { + att(new GainEnergyAction(this.amount)); + } + + if (AbstractDungeon.actionManager.turnHasEnded) { + att(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new EnergizedBluePower(AbstractDungeon.player, this.amount), this.amount)); + } + + // atb(new DrawCardAction(AbstractDungeon.player, this.amount)); + addToTop(new RemoveSpecificPowerAction(owner, owner, this)); + } + + public void updateDescription() { + if (this.amount == 1) { + this.description = DESCRIPTIONS[0]; + } + + if (this.amount != 1) { + this.description = DESCRIPTIONS[1] + this.amount + DESCRIPTIONS[2]; + } + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/relics/AbyssBlade.java b/src/main/java/awakenedOne/relics/AbyssBlade.java new file mode 100644 index 000000000..fbd199643 --- /dev/null +++ b/src/main/java/awakenedOne/relics/AbyssBlade.java @@ -0,0 +1,73 @@ +package awakenedOne.relics; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.util.TexLoader; +import basemod.abstracts.CustomRelic; +import com.badlogic.gdx.graphics.Texture; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.DrawCardAction; +import com.megacrit.cardcrawl.actions.common.GainEnergyAction; +import com.megacrit.cardcrawl.actions.common.RelicAboveCreatureAction; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.powers.EnergizedBluePower; + +import static awakenedOne.AwakenedOneMod.makeRelicOutlinePath; +import static awakenedOne.AwakenedOneMod.makeRelicPath; + +public class AbyssBlade extends CustomRelic implements OnLoseEnergyRelic { + + //Prove you love ME above all else! + + public static final String ID = AwakenedOneMod.makeID("AbyssBlade"); + private static final Texture IMG = TexLoader.getTexture(makeRelicPath("AbyssBlade.png")); + private static final Texture OUTLINE = TexLoader.getTexture(makeRelicOutlinePath("AbyssBlade.png")); + + public AbyssBlade() { + super(ID, IMG, OUTLINE, RelicTier.BOSS, LandingSound.CLINK); + } + + + @Override + public void atBattleStart() { + this.counter = -1; + } + + @Override + public void atTurnStart() { + this.counter = -1; + beginLongPulse(); + } + + @Override + public void onVictory() { + this.counter = -1; + stopPulse(); + } + + @Override + public void LoseEnergyAction(int e) { + if (this.counter != 1) { + flash(); + stopPulse(); + this.addToTop(new RelicAboveCreatureAction(AbstractDungeon.player, this)); + + if (!AbstractDungeon.actionManager.turnHasEnded) { + addToTop(new GainEnergyAction(1)); + } + + if (AbstractDungeon.actionManager.turnHasEnded) { + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new EnergizedBluePower(AbstractDungeon.player, 1))); + } + + addToBot(new DrawCardAction(AbstractDungeon.player, 1)); + this.counter = 1; + } + } + + + @Override + public String getUpdatedDescription() { + return DESCRIPTIONS[0]; + } + +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/relics/CawingCask.java b/src/main/java/awakenedOne/relics/CawingCask.java new file mode 100644 index 000000000..cdc289fa9 --- /dev/null +++ b/src/main/java/awakenedOne/relics/CawingCask.java @@ -0,0 +1,65 @@ +package awakenedOne.relics; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.util.TexLoader; +import basemod.abstracts.CustomRelic; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.math.MathUtils; +import com.megacrit.cardcrawl.actions.animations.TalkAction; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.RelicAboveCreatureAction; +import com.megacrit.cardcrawl.actions.utility.SFXAction; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.city.Byrd; +import com.megacrit.cardcrawl.powers.RitualPower; +import com.megacrit.cardcrawl.rooms.AbstractRoom; + +import static awakenedOne.AwakenedOneMod.makeRelicOutlinePath; +import static awakenedOne.AwakenedOneMod.makeRelicPath; + +public class CawingCask extends CustomRelic { + + public static final String ID = AwakenedOneMod.makeID("CawingCask"); + private static final Texture IMG = TexLoader.getTexture(makeRelicPath("CawingCask.png")); + private static final Texture OUTLINE = TexLoader.getTexture(makeRelicOutlinePath("CawingCask.png")); + + //How much Ritual does drinking a potion give? + + private static final int AMOUNT = 1; + + public CawingCask() { + super(ID, IMG, OUTLINE, RelicTier.RARE, LandingSound.SOLID); + } + + //Cawing Cask + + //or, the cask of amontillado + + public void onUsePotion() { + if (AbstractDungeon.getCurrRoom().phase == AbstractRoom.RoomPhase.COMBAT) { + this.flash(); + this.playSfx(); + AbstractDungeon.actionManager.addToBottom(new TalkAction(true, Byrd.DIALOG[0], 1.2F, 1.2F)); + this.addToBot(new RelicAboveCreatureAction(AbstractDungeon.player, this)); + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new RitualPower(AbstractDungeon.player, AMOUNT, true), AMOUNT)); + } + } + + private void playSfx() { + int roll = MathUtils.random(2); + if (roll == 0) { + AbstractDungeon.actionManager.addToBottom(new SFXAction("VO_CULTIST_1A")); + } else if (roll == 1) { + AbstractDungeon.actionManager.addToBottom(new SFXAction("VO_CULTIST_1B")); + } else { + AbstractDungeon.actionManager.addToBottom(new SFXAction("VO_CULTIST_1C")); + } + + } + + @Override + public String getUpdatedDescription() { + return DESCRIPTIONS[0] + AMOUNT + DESCRIPTIONS[1]; + } + +} diff --git a/src/main/java/awakenedOne/relics/CursedBlessing.java b/src/main/java/awakenedOne/relics/CursedBlessing.java new file mode 100644 index 000000000..9472915df --- /dev/null +++ b/src/main/java/awakenedOne/relics/CursedBlessing.java @@ -0,0 +1,213 @@ +package awakenedOne.relics; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.util.TexLoader; +import basemod.abstracts.CustomRelic; +import com.badlogic.gdx.graphics.Texture; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.RelicAboveCreatureAction; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.powers.RitualPower; + +import static awakenedOne.AwakenedOneMod.*; + +public class CursedBlessing extends CustomRelic { + + public static final String ID = AwakenedOneMod.makeID("CursedBlessing"); + private static final Texture IMG = TexLoader.getTexture(makeRelicPath("CursedBlessing.png")); //TODO: Images + private static final Texture OUTLINE = TexLoader.getTexture(makeRelicOutlinePath("CursedBlessing.png")); + + + //required triggers + private static final int AMOUNT1 = 4; + //strength gain + private static final int AMOUNT2 = 1; + + public CursedBlessing() { + super(ID, IMG, OUTLINE, RelicTier.RARE, LandingSound.FLAT); + // DuvuStrings = CardCrawlGame.languagePack.getRelicStrings(DuVuDoll.ID); + this.counter = -1; + } + + //Final Rites + + +// public void onEquip() { +// this.counter = 0; +// } + + //optional anti stalling tech + + public void onEquip() { + this.counter = -1; + } + + public void onVictory() { + this.counter = -1; + } + + @Override + public void atBattleStart() { + this.counter = 0; + } + + @Override + public String getUpdatedDescription() { + return this.DESCRIPTIONS[0] + AMOUNT1 + DESCRIPTIONS[1] + AMOUNT2 + DESCRIPTIONS[2]; + } + + public void onTrigger() { + if (this.counter != -1) { + this.counter++; + if (this.counter == AMOUNT1) { + this.counter = -1; + flash(); + this.flash(); + this.addToBot(new RelicAboveCreatureAction(AbstractDungeon.player, this)); + //this.addToBot(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new StrengthPower(AbstractDungeon.player, AMOUNT2), AMOUNT2)); + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new RitualPower(AbstractDungeon.player, AMOUNT2, true), AMOUNT2)); + } + } + } + + + // public boolean canSpawn() { + // Iterator var1 = AbstractDungeon.player.masterDeck.group.iterator(); + // + // AbstractCard c; + // do { + // if (!var1.hasNext()) { + // return false; + // } + // + // c = (AbstractCard)var1.next(); + // } while(c.type != AbstractCard.CardType.CURSE); + // + // return true; + // } + // + // + // public void atBattleStart() { + // this.flash(); + // + // Iterator var1 = AbstractDungeon.player.masterDeck.group.iterator(); + // + // while(var1.hasNext()) { + // AbstractCard c = (AbstractCard)var1.next(); + // if (c.type == AbstractCard.CardType.CURSE) { + // + // Iterator var2 = AbstractDungeon.getCurrRoom().monsters.monsters.iterator(); + // + // while(var2.hasNext()) { + // AbstractMonster mo = (AbstractMonster)var2.next(); + // this.addToTop(new RelicAboveCreatureAction(mo, this)); + // this.addToTop(new ApplyPowerAction(mo, AbstractDungeon.player, new ManaburnPower(mo, AMOUNT), AMOUNT, true)); + // } + // + // } + // } + // } + // + // + // public void setCounter(int c) { + // this.counter = c; + // if (this.counter == 0) { + // this.description = this.DESCRIPTIONS[0] + AMOUNT + this.DESCRIPTIONS[1] + this.DESCRIPTIONS[2]; + // } else { + // this.description = this.DESCRIPTIONS[0] + AMOUNT + this.DESCRIPTIONS[1] + this.DESCRIPTIONS[3] + this.counter + this.DESCRIPTIONS[4]; + // } + // + // this.tips.clear(); + // this.tips.add(new PowerTip(this.name, this.description)); + // this.initializeTips(); + // } + // + // public void onMasterDeckChange() { + // this.counter = 0; + // Iterator var1 = AbstractDungeon.player.masterDeck.group.iterator(); + // + // while(var1.hasNext()) { + // AbstractCard c = (AbstractCard)var1.next(); + // if (c.type == AbstractCard.CardType.CURSE) { + // ++this.counter; + // } + // } + // + // if (this.counter == 0) { + // this.description = this.DESCRIPTIONS[0] + AMOUNT + this.DESCRIPTIONS[1] + this.DESCRIPTIONS[2]; + // } else { + // this.description = this.DESCRIPTIONS[0] + AMOUNT + this.DESCRIPTIONS[1] + this.DESCRIPTIONS[3] + this.counter + this.DESCRIPTIONS[4]; + // } + // + // this.tips.clear(); + // this.tips.add(new PowerTip(this.name, this.description)); + // this.initializeTips(); + // } + // + // public void onEquip() { + // this.counter = 0; + // Iterator var1 = AbstractDungeon.player.masterDeck.group.iterator(); + // + // while(var1.hasNext()) { + // AbstractCard c = (AbstractCard)var1.next(); + // if (c.type == AbstractCard.CardType.CURSE) { + // ++this.counter; + // } + // } + // + // if (this.counter == 0) { + // this.description = this.DESCRIPTIONS[0] + AMOUNT + this.DESCRIPTIONS[1] + this.DESCRIPTIONS[2]; + // } else { + // this.description = this.DESCRIPTIONS[0] + AMOUNT + this.DESCRIPTIONS[1] + this.DESCRIPTIONS[3] + this.counter + this.DESCRIPTIONS[4]; + // } + // + // this.tips.clear(); + // this.tips.add(new PowerTip(this.name, this.description)); + // this.initializeTips(); + // } + + //public void onExhaust(AbstractCard card) { + // if (card.type == AbstractCard.CardType.CURSE) { + // this.flash(); + // Iterator var2 = AbstractDungeon.getCurrRoom().monsters.monsters.iterator(); + // + // while (var2.hasNext()) { + // AbstractMonster mo = (AbstractMonster) var2.next(); + // if (!mo.isDead) { + // this.addToTop(new RelicAboveCreatureAction(mo, this)); + // this.addToTop(new ApplyPowerAction(mo, AbstractDungeon.player, new ManaburnPower(mo, AMOUNT), AMOUNT, true)); + // } + // } + // + // + // atb(new AbstractGameAction() { + // @Override + // public void update() { + // isDone = true; + // + // for (AbstractPower p : AbstractDungeon.player.powers) { + // if (p instanceof OnLoseEnergyPower) { + // ((OnLoseEnergyPower) p).LoseEnergyAction(1); + // } + // } + // + // for (AbstractMonster m2 : AbstractDungeon.getMonsters().monsters) { + // if (!m2.isDead && !m2.isDying) { + // for (AbstractPower p : m2.powers) { + // if (p instanceof OnLoseEnergyPower) { + // ((OnLoseEnergyPower) p).LoseEnergyAction(1); + // } + // } + // } + // + // for (AbstractRelic p : AbstractDungeon.player.relics) { + // if (p instanceof OnLoseEnergyRelic) { + // ((OnLoseEnergyRelic) p).LoseEnergyAction(1); + // } + // } + // } + // } + // }); + // } + // } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/relics/CurvedSword.java b/src/main/java/awakenedOne/relics/CurvedSword.java new file mode 100644 index 000000000..36889ad38 --- /dev/null +++ b/src/main/java/awakenedOne/relics/CurvedSword.java @@ -0,0 +1,60 @@ +package awakenedOne.relics; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.cards.tokens.Ceremony; +import awakenedOne.cards.tokens.spells.AbstractSpellCard; +import awakenedOne.util.TexLoader; +import basemod.abstracts.CustomRelic; +import basemod.helpers.CardPowerTip; +import com.badlogic.gdx.graphics.Texture; +import com.megacrit.cardcrawl.actions.common.MakeTempCardInHandAction; +import com.megacrit.cardcrawl.actions.common.RelicAboveCreatureAction; +import com.megacrit.cardcrawl.actions.utility.UseCardAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; + +import static awakenedOne.AwakenedOneMod.makeRelicOutlinePath; +import static awakenedOne.AwakenedOneMod.makeRelicPath; + +public class CurvedSword extends CustomRelic { + + //backflip scimmy + //ninja relic but spells. tried to add a funky sounding name + //the joke is that this is literally a "conjure blade" + + public static final String ID = AwakenedOneMod.makeID("CurvedSword"); + private static final Texture IMG = TexLoader.getTexture(makeRelicPath("CurvedSword.png")); //TODO: Images + private static final Texture OUTLINE = TexLoader.getTexture(makeRelicOutlinePath("CurvedSword.png")); + + public CurvedSword() { + super(ID, IMG, OUTLINE, RelicTier.UNCOMMON, LandingSound.CLINK); + tips.add(new CardPowerTip(new Ceremony())); + } + + public void atTurnStart() { + this.counter = 0; + } + + public void onUseCard(AbstractCard card, UseCardAction action) { + if (card instanceof AbstractSpellCard) { + ++this.counter; + if (this.counter % 3 == 0) { + this.flash(); + this.counter = 0; + this.addToBot(new RelicAboveCreatureAction(AbstractDungeon.player, this)); + this.addToTop(new MakeTempCardInHandAction(new Ceremony(), 1, false)); + } + } + + } + + public void onVictory() { + this.counter = -1; + } + + @Override + public String getUpdatedDescription() { + return DESCRIPTIONS[0] + 3 + DESCRIPTIONS[1]; + } + +} diff --git a/src/main/java/awakenedOne/relics/CurvedSwordMeme.java b/src/main/java/awakenedOne/relics/CurvedSwordMeme.java new file mode 100644 index 000000000..3fb5f0211 --- /dev/null +++ b/src/main/java/awakenedOne/relics/CurvedSwordMeme.java @@ -0,0 +1,42 @@ +package awakenedOne.relics; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.cards.meme.NotConjureBlade; +import awakenedOne.util.TexLoader; +import basemod.abstracts.CustomRelic; +import basemod.helpers.CardPowerTip; +import com.badlogic.gdx.graphics.Texture; +import com.megacrit.cardcrawl.actions.common.MakeTempCardInHandAction; +import com.megacrit.cardcrawl.actions.common.RelicAboveCreatureAction; +import com.megacrit.cardcrawl.cards.purple.ConjureBlade; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; + +import static awakenedOne.AwakenedOneMod.makeRelicOutlinePath; +import static awakenedOne.AwakenedOneMod.makeRelicPath; + +public class CurvedSwordMeme extends CustomRelic { + + public static final String ID = AwakenedOneMod.makeID("CurvedSwordMeme"); + private static final Texture IMG = TexLoader.getTexture(makeRelicPath("CurvedSword.png")); //TODO: Images + private static final Texture OUTLINE = TexLoader.getTexture(makeRelicOutlinePath("CurvedSword.png")); + + //You should only be able to obtain this from console. I couldn't help myself from making this joke, sorry. + //The Expunger goes into your Spell Pile. + + public CurvedSwordMeme() { + super(ID, IMG, OUTLINE, RelicTier.DEPRECATED, LandingSound.CLINK); + this.tips.add(new CardPowerTip(new ConjureBlade())); + } + + @Override + public void atBattleStart() { + this.addToTop(new RelicAboveCreatureAction(AbstractDungeon.player, this)); + this.addToTop(new MakeTempCardInHandAction(new NotConjureBlade(), 1, false)); + } + + @Override + public String getUpdatedDescription() { + return DESCRIPTIONS[0]; + } + +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/relics/DeadBird.java b/src/main/java/awakenedOne/relics/DeadBird.java new file mode 100644 index 000000000..6f85a7e81 --- /dev/null +++ b/src/main/java/awakenedOne/relics/DeadBird.java @@ -0,0 +1,108 @@ +package awakenedOne.relics; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.util.TexLoader; +import basemod.abstracts.CustomRelic; +import com.badlogic.gdx.graphics.Texture; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.DamageAction; +import com.megacrit.cardcrawl.actions.common.RelicAboveCreatureAction; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.StrengthPower; +import com.megacrit.cardcrawl.rooms.AbstractRoom; + +import static awakenedOne.AwakenedOneMod.makeRelicOutlinePath; +import static awakenedOne.AwakenedOneMod.makeRelicPath; +import static awakenedOne.util.Wiz.isInCombat; +import static hermit.util.Wiz.getLowestHealthEnemy; + +public class DeadBird extends CustomRelic { + + public static final String ID = AwakenedOneMod.makeID("DeadBird"); + private static final Texture IMG = TexLoader.getTexture(makeRelicPath("DeadBird.png")); //TODO: Images + private static final Texture OUTLINE = TexLoader.getTexture(makeRelicOutlinePath("DeadBird.png")); + //damage + private static final int AMOUNT = 4; + + //Corvid Spirit + + //or, Eve's Dead Bird + + public DeadBird() { + super(ID, IMG, OUTLINE, RelicTier.RARE, LandingSound.MAGICAL); + } + + public void update() { + super.update(); + if (isInCombat()) { + if (AbstractDungeon.player.hasPower(StrengthPower.POWER_ID)) { + this.counter = AMOUNT + AbstractDungeon.player.getPower(StrengthPower.POWER_ID).amount; + } + + if (this.counter < AMOUNT) { + this.counter = AMOUNT; + } + } else { + this.counter = 4; + } + } + + @Override + public void onEquip() { + this.counter = 4; + } + + @Override + public void atBattleStart() { + this.counter = 4; + } + + @Override + public void onVictory() { + this.counter = 4; + } + + @Override + public void onEnterRoom(AbstractRoom room) { + this.counter = 4; + } + + //Can't believe this was already pre-coded in Hermit's Wiz. Very helpful. + @Override + public void onPlayerEndTurn() { + flash(); + + int temp = AMOUNT; + + if (AbstractDungeon.player.hasPower(StrengthPower.POWER_ID)) { + temp += AbstractDungeon.player.getPower(StrengthPower.POWER_ID).amount; + } + + if (temp < AMOUNT) { + temp = AMOUNT; + } + + + int nocrashpls = 0; + + for (final AbstractMonster m : AbstractDungeon.getMonsters().monsters) { + if (!m.isDying && m.currentHealth > 0) { + nocrashpls++; + } + } + + + if (nocrashpls > 0) { + this.addToTop(new RelicAboveCreatureAction(getLowestHealthEnemy(), this)); + AbstractDungeon.actionManager.addToBottom(new DamageAction(getLowestHealthEnemy(), new DamageInfo(AbstractDungeon.player, temp, DamageInfo.DamageType.THORNS), AbstractGameAction.AttackEffect.BLUNT_LIGHT)); + } + } + + @Override + public String getUpdatedDescription() { + return DESCRIPTIONS[0] + AMOUNT + DESCRIPTIONS[1]; + } + +} diff --git a/src/main/java/awakenedOne/relics/EyeOfTheOccult.java b/src/main/java/awakenedOne/relics/EyeOfTheOccult.java new file mode 100644 index 000000000..7462ad568 --- /dev/null +++ b/src/main/java/awakenedOne/relics/EyeOfTheOccult.java @@ -0,0 +1,43 @@ +package awakenedOne.relics; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.cards.tokens.spells.AbstractSpellCard; +import awakenedOne.util.TexLoader; +import basemod.abstracts.CustomRelic; +import com.badlogic.gdx.graphics.Texture; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import static awakenedOne.AwakenedOneMod.makeRelicOutlinePath; +import static awakenedOne.AwakenedOneMod.makeRelicPath; +import static awakenedOne.util.Wiz.getEnemies; + +public class EyeOfTheOccult extends CustomRelic { + + //Eye of the Occult + + public static final String ID = AwakenedOneMod.makeID("EyeOfTheOccult"); + private static final Texture IMG = TexLoader.getTexture(makeRelicPath("EyeOfTheOccult.png")); //TODO: Images + private static final Texture OUTLINE = TexLoader.getTexture(makeRelicOutlinePath("EyeOfTheOccult.png")); + + //Yeah... you need to go look at the Spell cards for this one. + public EyeOfTheOccult() { + super(ID, IMG, OUTLINE, RelicTier.SPECIAL, LandingSound.MAGICAL); + } + + @Override + public void onPlayCard(AbstractCard card, AbstractMonster m) { + if (((card instanceof AbstractSpellCard) && card.target == AbstractCard.CardTarget.ALL_ENEMY)) { + //only flash if relevant + if (getEnemies().size() > 1) { + flash(); + } + } + } + + @Override + public String getUpdatedDescription() { + return DESCRIPTIONS[0]; + } + +} diff --git a/src/main/java/awakenedOne/relics/HexxBomb.java b/src/main/java/awakenedOne/relics/HexxBomb.java new file mode 100644 index 000000000..6718c41be --- /dev/null +++ b/src/main/java/awakenedOne/relics/HexxBomb.java @@ -0,0 +1,78 @@ +package awakenedOne.relics; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.powers.ManaburnPower; +import awakenedOne.util.TexLoader; +import basemod.abstracts.CustomRelic; +import com.badlogic.gdx.graphics.Texture; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.RelicAboveCreatureAction; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import downfall.monsters.NeowBoss; + +import static awakenedOne.AwakenedOneMod.makeRelicOutlinePath; +import static awakenedOne.AwakenedOneMod.makeRelicPath; +import static downfall.patches.EvilModeCharacterSelect.evilMode; + +public class HexxBomb extends CustomRelic { + + //Manabomb + + public static final String ID = AwakenedOneMod.makeID("HexxBomb"); + private static final Texture IMG = TexLoader.getTexture(makeRelicPath("HexxBomb.png")); + private static final Texture OUTLINE = TexLoader.getTexture(makeRelicOutlinePath("HexxBomb.png")); + + public HexxBomb() { + super(ID, IMG, OUTLINE, RelicTier.SHOP, LandingSound.MAGICAL); + } + + +// @Override +// public void atBattleStart() { +// onTrigger(); +// } + +// @Override +// public void onTrigger() { +// super.onTrigger(); +// this.flash(); +// //this.addToBot(new DelayedCurseAction); +// AbstractMonster mo = AbstractDungeon.getRandomMonster(); +// HexCurse(AMOUNT, mo, AbstractDungeon.player); +// this.addToBot(new VFXAction(new GiantEyeEffect(mo.hb.cX, mo.hb.cY + 300.0F * Settings.scale, new Color(1.0F, 0.3F, 1.0F, 0.0F)))); +// this.addToTop(new RelicAboveCreatureAction(mo, this)); +// } + + + public void onMonsterDeath(AbstractMonster m) { + if (m.hasPower(ManaburnPower.POWER_ID)) { + int amount = m.getPower(ManaburnPower.POWER_ID).amount; + if (!AbstractDungeon.getMonsters().areMonstersBasicallyDead()) { + this.flash(); + this.addToTop(new RelicAboveCreatureAction(m, this)); + AbstractMonster mo = AbstractDungeon.getMonsters().getRandomMonster(null, true, AbstractDungeon.relicRng); + //I don't know WHY this crashes against the act 4 elite. + if (!(mo instanceof NeowBoss)) { + if (!(mo == null)) { + this.addToBot(new RelicAboveCreatureAction(mo, this)); + this.addToBot(new ApplyPowerAction(mo, AbstractDungeon.player, new ManaburnPower(mo, amount), amount, true)); + } + } + } + } + } + + @Override + public boolean canSpawn() { + return Settings.isEndless || ((AbstractDungeon.floorNum <= 53 && AbstractDungeon.ascensionLevel >= 20) && !evilMode) || ((AbstractDungeon.floorNum <= 52 && AbstractDungeon.ascensionLevel < 20 && !evilMode)) || ((AbstractDungeon.floorNum <= 48)); + } + + + @Override + public String getUpdatedDescription() { + return DESCRIPTIONS[0]; + } + +} diff --git a/src/main/java/awakenedOne/relics/MiniBlackHole.java b/src/main/java/awakenedOne/relics/MiniBlackHole.java new file mode 100644 index 000000000..34911f53a --- /dev/null +++ b/src/main/java/awakenedOne/relics/MiniBlackHole.java @@ -0,0 +1,65 @@ +package awakenedOne.relics; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.util.TexLoader; +import basemod.abstracts.CustomRelic; +import com.badlogic.gdx.graphics.Texture; +import com.megacrit.cardcrawl.actions.common.DrawCardAction; +import com.megacrit.cardcrawl.actions.common.RelicAboveCreatureAction; +import com.megacrit.cardcrawl.actions.utility.UseCardAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; + +import static awakenedOne.AwakenedOneMod.makeRelicOutlinePath; +import static awakenedOne.AwakenedOneMod.makeRelicPath; + +public class MiniBlackHole extends CustomRelic { + + public static final String ID = AwakenedOneMod.makeID("MiniBlackHole"); + private static final Texture IMG = TexLoader.getTexture(makeRelicPath("MiniBlackHole.png")); //TODO: Images + private static final Texture OUTLINE = TexLoader.getTexture(makeRelicOutlinePath("MiniBlackHole.png")); + public boolean firstTurn = false; + + public MiniBlackHole() { + super(ID, IMG, OUTLINE, RelicTier.SHOP, LandingSound.MAGICAL); + } + + //Alethea + + @Override + public void atPreBattle() { + firstTurn = true; + } + + @Override + public void atTurnStartPostDraw() { + if (!firstTurn) { + if (!this.grayscale) { + this.flash(); + this.addToBot(new RelicAboveCreatureAction(AbstractDungeon.player, this)); + addToBot(new DrawCardAction(AbstractDungeon.player, 1)); + } + } + this.grayscale = false; + this.firstTurn = false; + } + + public void onUseCard(AbstractCard card, UseCardAction action) { + if (card.type == AbstractCard.CardType.POWER) { + if (!this.grayscale) { + this.flash(); + this.grayscale = true; + } + } + } + + public void onVictory() { + this.grayscale = false; + } + + @Override + public String getUpdatedDescription() { + return DESCRIPTIONS[0]; + } + +} diff --git a/src/main/java/awakenedOne/relics/MoonTalisman.java b/src/main/java/awakenedOne/relics/MoonTalisman.java new file mode 100644 index 000000000..af17ceeb2 --- /dev/null +++ b/src/main/java/awakenedOne/relics/MoonTalisman.java @@ -0,0 +1,222 @@ +package awakenedOne.relics; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.cardmods.ConjureMod; +import awakenedOne.patches.MoonTalismanPatch; +import awakenedOne.util.TexLoader; +import basemod.abstracts.CustomBottleRelic; +import basemod.abstracts.CustomRelic; +import basemod.abstracts.CustomSavable; +import basemod.helpers.CardModifierManager; +import com.badlogic.gdx.graphics.Texture; +import com.evacipated.cardcrawl.mod.stslib.relics.OnRemoveCardFromMasterDeckRelic; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.CardGroup; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.helpers.FontHelper; +import com.megacrit.cardcrawl.helpers.PowerTip; +import com.megacrit.cardcrawl.localization.LocalizedStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.relics.AbstractRelic; +import com.megacrit.cardcrawl.rooms.AbstractRoom; +import com.megacrit.cardcrawl.vfx.cardManip.PurgeCardEffect; +import com.megacrit.cardcrawl.vfx.cardManip.ShowCardBrieflyEffect; + +import java.util.function.Predicate; + +import static awakenedOne.AwakenedOneMod.*; + +public class MoonTalisman extends CustomRelic implements CustomBottleRelic, CustomSavable, OnRemoveCardFromMasterDeckRelic { + + public static final String ID = AwakenedOneMod.makeID("MoonTalisman"); + private static final Texture IMG = TexLoader.getTexture(makeRelicPath("MoonTalisman.png")); + private static final Texture OUTLINE = TexLoader.getTexture(makeRelicOutlinePath("MoonTalisman.png")); + public AbstractCard card = null; + public boolean cardSelected = true; + private boolean cardRemoved = false; + + //Don't forget me. + + public MoonTalisman() { + super(ID, IMG, OUTLINE, RelicTier.RARE, LandingSound.MAGICAL); + } + + @Override + public void onRemoveCardFromMasterDeck(AbstractCard var1) { + if (this.card != null) { + if (var1.uuid == card.uuid) { + this.flash(); + this.grayscale = true; + setDescriptionAfterLoading(); + } + } + } + + @Override + public void onPlayCard(AbstractCard card, AbstractMonster m) { + if (MoonTalismanPatch.inBottleTalisman.get(card)) { + this.flash(); + //added a modifier instead + //atb(new ConjureAction(false)); + } + } + + @Override + public Predicate isOnCard() { + return MoonTalismanPatch.inBottleTalisman::get; + } + + @Override + public String getUpdatedDescription() { + return DESCRIPTIONS[0]; + } + + public AbstractCard getCard() { + return card.makeCopy(); + } + + @Override + public Integer onSave() { + return AbstractDungeon.player.masterDeck.group.indexOf(card); + } + + @Override + public void onLoad(Integer cardIndex) { + if (cardIndex == null) { + return; + } + if (cardIndex >= 0 && cardIndex < AbstractDungeon.player.masterDeck.group.size()) { + card = AbstractDungeon.player.masterDeck.group.get(cardIndex); + if (card != null) { + MoonTalismanPatch.inBottleTalisman.set(card, true); + } + setDescriptionAfterLoading(); + } + } + + @Override + public void onEquip() { + cardSelected = false; + if (AbstractDungeon.isScreenUp) { + AbstractDungeon.dynamicBanner.hide(); + AbstractDungeon.overlayMenu.cancelButton.hide(); + AbstractDungeon.previousScreen = AbstractDungeon.screen; + } + AbstractDungeon.getCurrRoom().phase = AbstractRoom.RoomPhase.INCOMPLETE; + CardGroup tmp = new CardGroup(CardGroup.CardGroupType.UNSPECIFIED); + for (AbstractCard c : CardGroup.getGroupWithoutBottledCards(AbstractDungeon.player.masterDeck).group) { + if (!c.hasTag(DELVE) && c.cost != -2) { + tmp.addToTop(c); + } + } + AbstractDungeon.gridSelectScreen.open(tmp, + 1, DESCRIPTIONS[1] + name + LocalizedStrings.PERIOD, + false, false, false, false); + } + + @Override + public void onUnequip() { + if (card != null) { + AbstractCard cardInDeck = AbstractDungeon.player.masterDeck.getSpecificCard(card); + if (cardInDeck != null) { + AbstractCard copy = cardInDeck.makeStatEquivalentCopy(); + + CardModifierManager.removeModifiersById(cardInDeck, ConjureMod.ID, true); + MoonTalismanPatch.inBottleTalisman.set(cardInDeck, false); + +// for (AbstractRelic r : AbstractDungeon.player.relics) { +// if (r instanceof MoonTalisman) { +// AbstractDungeon.player.loseRelic(r.relicId); +// } +// } + AbstractDungeon.topLevelEffectsQueue.add(new ShowCardBrieflyEffect(copy)); + + CardCrawlGame.sound.play("CARD_EXHAUST"); + AbstractDungeon.topLevelEffects.add(new PurgeCardEffect(copy, (float) (Settings.WIDTH / 2), (float) (Settings.HEIGHT / 2))); + } + } + } + + @Override + public void update() { + super.update(); + if (!cardSelected && !AbstractDungeon.gridSelectScreen.selectedCards.isEmpty()) { + cardSelected = true; + card = AbstractDungeon.gridSelectScreen.selectedCards.get(0); + + AbstractCard cardInDeck = AbstractDungeon.player.masterDeck.getSpecificCard(card); + + //Note: This is the only source of this modifier on the entire character. + //If you detect this modifier being used, it's almost definitely from this bottle. + CardModifierManager.addModifier(cardInDeck, new ConjureMod()); + + cardRemoved = false; + + MoonTalismanPatch.inBottleTalisman.set(card, true); + AbstractDungeon.getCurrRoom().phase = AbstractRoom.RoomPhase.COMPLETE; + + AbstractDungeon.gridSelectScreen.selectedCards.clear(); + + AbstractDungeon.topLevelEffects.add(new ShowCardBrieflyEffect(card.makeStatEquivalentCopy())); + + setDescriptionAfterLoading(); + } + } + + public void setDescriptionAfterLoading() { + + boolean cardExists = false; + + if (card != null) { + for (AbstractCard c : AbstractDungeon.player.masterDeck.group) { + if (c.uuid == card.uuid) { + cardSelected = true; + cardExists = true; + break; + } + } + } + + if (!cardExists) { + cardRemoved = true; + tips.clear(); + this.description = this.DESCRIPTIONS[4]; + this.grayscale = true; + tips.add(new PowerTip(name, description)); + initializeTips(); + return; + } + + if (cardExists) { + cardRemoved = false; + this.description = this.DESCRIPTIONS[2] + FontHelper.colorString(this.card.name, "y") + this.DESCRIPTIONS[3]; + this.grayscale = false; + tips.clear(); + tips.add(new PowerTip(name, description)); + initializeTips(); + } + } + + + @Override + public AbstractRelic makeCopy() { + return new MoonTalisman(); + } + + public boolean canSpawn() { + + CardGroup tmp = new CardGroup(CardGroup.CardGroupType.UNSPECIFIED); + for (AbstractCard c : CardGroup.getGroupWithoutBottledCards(AbstractDungeon.player.masterDeck).group) { + //considered && c.rarity != CardRarity.BASIC); but decided against it + if (!c.hasTag(DELVE) && c.cost != -2) { + tmp.addToTop(c); + } + } + + return tmp.size() > 0; + + } + +} diff --git a/src/main/java/awakenedOne/relics/OnAwakenRelic.java b/src/main/java/awakenedOne/relics/OnAwakenRelic.java new file mode 100644 index 000000000..fc4fa61e2 --- /dev/null +++ b/src/main/java/awakenedOne/relics/OnAwakenRelic.java @@ -0,0 +1,5 @@ +package awakenedOne.relics; + +public interface OnAwakenRelic { + void onAwaken(int amount); +} diff --git a/src/main/java/awakenedOne/relics/OnLoseEnergyRelic.java b/src/main/java/awakenedOne/relics/OnLoseEnergyRelic.java new file mode 100644 index 000000000..648dfb010 --- /dev/null +++ b/src/main/java/awakenedOne/relics/OnLoseEnergyRelic.java @@ -0,0 +1,5 @@ +package awakenedOne.relics; + +public interface OnLoseEnergyRelic { + void LoseEnergyAction(int e); +} diff --git a/src/main/java/awakenedOne/relics/RippedDoll.java b/src/main/java/awakenedOne/relics/RippedDoll.java new file mode 100644 index 000000000..11a6e6692 --- /dev/null +++ b/src/main/java/awakenedOne/relics/RippedDoll.java @@ -0,0 +1,55 @@ +package awakenedOne.relics; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.actions.ConjureAction; +import awakenedOne.util.TexLoader; +import basemod.abstracts.CustomRelic; +import com.badlogic.gdx.graphics.Texture; + +import static awakenedOne.AwakenedOneMod.makeRelicOutlinePath; +import static awakenedOne.AwakenedOneMod.makeRelicPath; +import static awakenedOne.util.Wiz.atb; + +public class RippedDoll extends CustomRelic { + + public static final String ID = AwakenedOneMod.makeID("RippedDoll"); + private static final Texture IMG = TexLoader.getTexture(makeRelicPath("RippedDoll.png")); //TODO: Images + private static final Texture OUTLINE = TexLoader.getTexture(makeRelicOutlinePath("RippedDoll.png")); + + //Ripped Doll + + public RippedDoll() { + super(ID, IMG, OUTLINE, RelicTier.STARTER, LandingSound.MAGICAL); + } + + public void onEquip() { + this.counter = -1; + } + + public void onVictory() { + this.counter = -1; + } + + @Override + public void atBattleStart() { + this.counter = 0; + } + + @Override + public void atTurnStart() { + if (this.counter < 2 && this.counter != -1) { + this.counter++; + flash(); + atb(new ConjureAction(false, false)); + if (this.counter == 2) { + this.counter = -1; + } + } + } + + @Override + public String getUpdatedDescription() { + return DESCRIPTIONS[0] + 2 + DESCRIPTIONS[1]; + } + +} diff --git a/src/main/java/awakenedOne/relics/ShardOfNowak.java b/src/main/java/awakenedOne/relics/ShardOfNowak.java new file mode 100644 index 000000000..70394cd80 --- /dev/null +++ b/src/main/java/awakenedOne/relics/ShardOfNowak.java @@ -0,0 +1,104 @@ +package awakenedOne.relics; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.util.TexLoader; +import basemod.abstracts.CustomRelic; +import com.badlogic.gdx.graphics.Texture; +import com.evacipated.cardcrawl.mod.stslib.relics.OnLoseTempHpRelic; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.RelicAboveCreatureAction; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.powers.StrengthPower; +import com.megacrit.cardcrawl.rooms.AbstractRoom; + +import static awakenedOne.AwakenedOneMod.makeRelicOutlinePath; +import static awakenedOne.AwakenedOneMod.makeRelicPath; + +public class ShardOfNowak extends CustomRelic implements OnLoseTempHpRelic { + + public static final String ID = AwakenedOneMod.makeID("ShardOfNowak"); + private static final Texture IMG = TexLoader.getTexture(makeRelicPath("ShardOfNowak.png")); //TODO: Images + private static final Texture OUTLINE = TexLoader.getTexture(makeRelicOutlinePath("ShardOfNowak.png")); + + //Gilded Bone Shard + + //Brutal Orchestra mentioned!!! this is so brutal + + private static final int FOCUS = 3; + + private boolean isActive = false; + + public ShardOfNowak() { + super(ID, IMG, OUTLINE, RelicTier.UNCOMMON, LandingSound.CLINK); + } + + @Override + public void atBattleStart() { + this.grayscale = false; + isActive = true; + this.beginLongPulse(); + AbstractDungeon.player.addPower(new StrengthPower(AbstractDungeon.player, FOCUS)); + this.addToBot(new RelicAboveCreatureAction(AbstractDungeon.player, this)); + } + + + @Override + public void onLoseHp(int damageAmount) { + if (AbstractDungeon.getCurrRoom().phase == AbstractRoom.RoomPhase.COMBAT) { + if (!this.grayscale) { + this.grayscale = true; + AbstractPlayer p = AbstractDungeon.player; + this.addToBot(new RelicAboveCreatureAction(AbstractDungeon.player, this)); + this.addToTop(new ApplyPowerAction(p, p, new StrengthPower(p, -FOCUS), -FOCUS)); + } + } + this.stopPulse(); + isActive = false; + AbstractDungeon.player.hand.applyPowers(); + } + + +// public void onMonsterDeath(AbstractMonster m) { +// if (m.currentHealth == 0 && !AbstractDungeon.getMonsters().areMonstersBasicallyDead()) { +// if (this.grayscale) { +// this.flash(); +// this.addToBot(new RelicAboveCreatureAction(AbstractDungeon.player, this)); +// this.addToBot(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new StrengthPower(AbstractDungeon.player, FOCUS), FOCUS)); +// this.grayscale = false; +// } +// } +// } + + @Override + public void onVictory() { + stopPulse(); + this.isActive = false; + this.grayscale = false; + } + + + @Override + public int onLoseTempHp(DamageInfo info, int i) { + if (AbstractDungeon.getCurrRoom().phase == AbstractRoom.RoomPhase.COMBAT) { + if (!this.grayscale) { + this.addToBot(new RelicAboveCreatureAction(AbstractDungeon.player, this)); + AbstractPlayer p = AbstractDungeon.player; + this.addToTop(new ApplyPowerAction(p, p, new StrengthPower(p, -FOCUS), -FOCUS)); + } + } + + this.stopPulse(); + this.isActive = false; + this.grayscale = true; + AbstractDungeon.player.hand.applyPowers(); + return i; + } + + @Override + public String getUpdatedDescription() { + return DESCRIPTIONS[0] + FOCUS + DESCRIPTIONS[1]; + } + +} diff --git a/src/main/java/awakenedOne/relics/ShreddedDoll.java b/src/main/java/awakenedOne/relics/ShreddedDoll.java new file mode 100644 index 000000000..7704d43c3 --- /dev/null +++ b/src/main/java/awakenedOne/relics/ShreddedDoll.java @@ -0,0 +1,99 @@ +package awakenedOne.relics; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.actions.ConjureAction; +import awakenedOne.util.TexLoader; +import basemod.abstracts.CustomRelic; +import com.badlogic.gdx.graphics.Texture; +import com.megacrit.cardcrawl.actions.common.RelicAboveCreatureAction; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.powers.RitualPower; + +import static awakenedOne.AwakenedOneMod.makeRelicOutlinePath; +import static awakenedOne.AwakenedOneMod.makeRelicPath; +import static awakenedOne.util.Wiz.applyToSelf; +import static awakenedOne.util.Wiz.atb; + +public class ShreddedDoll extends CustomRelic implements OnAwakenRelic { + + public static final String ID = AwakenedOneMod.makeID("ShreddedDoll"); + private static final Texture IMG = TexLoader.getTexture(makeRelicPath("ShreddedDoll.png")); //TODO: Images + private static final Texture OUTLINE = TexLoader.getTexture(makeRelicOutlinePath("ShreddedDoll.png")); + private boolean activatedthiscombat = false; + + public ShreddedDoll() { + super(ID, IMG, OUTLINE, RelicTier.BOSS, LandingSound.MAGICAL); + + //Shredded Doll + + } + + + @Override + public void atBattleStart() { + this.beginLongPulse(); + activatedthiscombat = false; + } + + @Override + public void onVictory() { + stopPulse(); + } + + //Check AwakenButton.java. I'm just using this override for convenience. + @Override + public void onAwaken(int amount) { + if (amount == 5 && !activatedthiscombat) { + stopPulse(); + activatedthiscombat = true; + flash(); + this.addToTop(new RelicAboveCreatureAction(AbstractDungeon.player, this)); + applyToSelf(new RitualPower(AbstractDungeon.player, 1, true)); + } + } + + @Override + public void atTurnStart() { + flash(); + atb(new ConjureAction(false)); + } + + @Override + public void obtain() { + if (AbstractDungeon.player.hasRelic(RippedDoll.ID)) { + for (int i = 0; i < AbstractDungeon.player.relics.size(); ++i) { + if (AbstractDungeon.player.relics.get(i).relicId.equals(RippedDoll.ID)) { + instantObtain(AbstractDungeon.player, i, true); + break; + } + } + } else { + super.obtain(); + } + } + + public boolean canSpawn() { + return AbstractDungeon.player.hasRelic(RippedDoll.ID); + } + + @Override + public String getUpdatedDescription() { + // Colorize the starter relic's name + String name = new RippedDoll().name; + StringBuilder sb = new StringBuilder(); + if (Settings.language == Settings.GameLanguage.ZHS || Settings.language == Settings.GameLanguage.ZHT) { + sb.append("[#").append(AwakenedOneMod.placeholderColor.toString()).append("]").append(name).append("[]"); + + } else { + for (String word : name.split(" ")) { + sb.append("[#").append(AwakenedOneMod.placeholderColor.toString()).append("]").append(word).append("[] "); + } + sb.setLength(sb.length() - 1); + sb.append("[#").append(AwakenedOneMod.placeholderColor.toString()).append("]"); + } + + return DESCRIPTIONS[0] + sb + DESCRIPTIONS[1]; + } + +} diff --git a/src/main/java/awakenedOne/relics/StrengthBooster.java b/src/main/java/awakenedOne/relics/StrengthBooster.java new file mode 100644 index 000000000..9791d8eab --- /dev/null +++ b/src/main/java/awakenedOne/relics/StrengthBooster.java @@ -0,0 +1,44 @@ +package awakenedOne.relics; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.util.TexLoader; +import basemod.abstracts.CustomRelic; +import com.badlogic.gdx.graphics.Texture; + +import static awakenedOne.AwakenedOneMod.makeRelicOutlinePath; +import static awakenedOne.AwakenedOneMod.makeRelicPath; + +public class StrengthBooster extends CustomRelic { + + public static final String ID = AwakenedOneMod.makeID("StrengthBooster"); + public static final int AMOUNT = 50; + private static final Texture IMG = TexLoader.getTexture(makeRelicPath("StrengthBooster.png")); //TODO: Images + private static final Texture OUTLINE = TexLoader.getTexture(makeRelicOutlinePath("StrengthBooster.png")); + + //Paper Crow / Paper Krow + + public StrengthBooster() { + super(ID, IMG, OUTLINE, RelicTier.UNCOMMON, LandingSound.FLAT); + } +// +// //Look at ApplyPowerPatch +// public void onTrigger(int amount) { +// if (amount > 0) { +// this.flash(); +// this.addToBot(new RelicAboveCreatureAction(AbstractDungeon.player, this)); +// vigor(AMOUNT); +// } +// } + + //debug + public void onSpecificTrigger(int debug) { + this.flash(); + System.out.println(debug); + } + + @Override + public String getUpdatedDescription() { + return DESCRIPTIONS[0] + AMOUNT + DESCRIPTIONS[1]; + } + +} diff --git a/src/main/java/awakenedOne/relics/TomeOfPortalmancy.java b/src/main/java/awakenedOne/relics/TomeOfPortalmancy.java new file mode 100644 index 000000000..325b91227 --- /dev/null +++ b/src/main/java/awakenedOne/relics/TomeOfPortalmancy.java @@ -0,0 +1,61 @@ +package awakenedOne.relics; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.powers.ManaburnPower; +import awakenedOne.util.TexLoader; +import basemod.abstracts.CustomRelic; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.Texture; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.RelicAboveCreatureAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.status.VoidCard; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.vfx.combat.GiantEyeEffect; + +import java.util.Iterator; + +import static awakenedOne.AwakenedOneMod.makeRelicOutlinePath; +import static awakenedOne.AwakenedOneMod.makeRelicPath; +import static awakenedOne.util.Wiz.atb; + +public class TomeOfPortalmancy extends CustomRelic { + + public static final String ID = AwakenedOneMod.makeID("TomeOfPortalmancy"); + private static final Texture IMG = TexLoader.getTexture(makeRelicPath("TomeOfPortalmancy.png")); //TODO: Images + private static final Texture OUTLINE = TexLoader.getTexture(makeRelicOutlinePath("TomeOfPortalmancy.png")); + + private static final int AMOUNT = 1; + + public TomeOfPortalmancy() { + super(ID, IMG, OUTLINE, RelicTier.COMMON, LandingSound.MAGICAL); + } + + //tome of portalmancy + + public void onExhaust(AbstractCard card) { + if (card.cardID == VoidCard.ID) { + this.flash(); + Iterator var2 = AbstractDungeon.getCurrRoom().monsters.monsters.iterator(); + + while (var2.hasNext()) { + AbstractMonster mo = (AbstractMonster) var2.next(); + if (!mo.isDead && !mo.isDying) { + atb(new ApplyPowerAction(mo, AbstractDungeon.player, new ManaburnPower(mo, AMOUNT), AMOUNT)); + this.addToBot(new VFXAction(new GiantEyeEffect(mo.hb.cX, mo.hb.cY + 300.0F * Settings.scale, new Color(1.0F, 0.3F, 1.0F, 0.0F)))); + this.addToTop(new RelicAboveCreatureAction(mo, this)); + } + } + + } + } + + @Override + public String getUpdatedDescription() { + return DESCRIPTIONS[0] + AMOUNT + DESCRIPTIONS[1]; + } + +} diff --git a/src/main/java/awakenedOne/relics/VioletPlumage.java b/src/main/java/awakenedOne/relics/VioletPlumage.java new file mode 100644 index 000000000..dbed641bf --- /dev/null +++ b/src/main/java/awakenedOne/relics/VioletPlumage.java @@ -0,0 +1,73 @@ +package awakenedOne.relics; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.util.TexLoader; +import basemod.abstracts.CustomRelic; +import com.badlogic.gdx.graphics.Texture; +import com.megacrit.cardcrawl.actions.common.DrawCardAction; +import com.megacrit.cardcrawl.actions.common.RelicAboveCreatureAction; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.ui.panels.EnergyPanel; + +import static awakenedOne.AwakenedOneMod.makeRelicOutlinePath; +import static awakenedOne.AwakenedOneMod.makeRelicPath; + +public class VioletPlumage extends CustomRelic { + + public static final String ID = AwakenedOneMod.makeID("VioletPlumage"); + private static final Texture IMG = TexLoader.getTexture(makeRelicPath("VioletPlumage.png")); //TODO: Images + private static final Texture OUTLINE = TexLoader.getTexture(makeRelicOutlinePath("VioletPlumage.png")); + + //Hey, you! Go to VioletPlumagePatch! This relic also uses code from Aspiration, the GitHub and relevant patch is linked there! + + //the relic was reworked because mini black hole had to go to shop because its weird rip old effect + //violet plumage + public boolean firstTurn = false; + public boolean activated = false; + public VioletPlumage() { + super(ID, IMG, OUTLINE, RelicTier.COMMON, LandingSound.MAGICAL); + } + + @Override + public void atPreBattle() { + this.beginLongPulse(); + activated = false; + } + + @Override + public void atTurnStartPostDraw() { + if (!(this.grayscale)) { + if (activated) { + this.stopPulse(); + this.flash(); + this.addToBot(new RelicAboveCreatureAction(AbstractDungeon.player, this)); + addToBot(new DrawCardAction(AbstractDungeon.player, 3)); + this.grayscale = true; + } + } + activated = false; + } + + public void onPlayerEndTurn() { + if (!(this.grayscale)) { + if (EnergyPanel.totalCount > 0) { + activated = true; + } + } + } + + @Override + public void atBattleStart() { + this.grayscale = false; + } + + public void onVictory() { + this.grayscale = false; + } + + @Override + public String getUpdatedDescription() { + return DESCRIPTIONS[0] + 3 + DESCRIPTIONS[1]; + } + +} diff --git a/src/main/java/awakenedOne/relics/WhiteRibbon.java b/src/main/java/awakenedOne/relics/WhiteRibbon.java new file mode 100644 index 000000000..5148311e3 --- /dev/null +++ b/src/main/java/awakenedOne/relics/WhiteRibbon.java @@ -0,0 +1,81 @@ +package awakenedOne.relics; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.util.TexLoader; +import basemod.abstracts.CustomRelic; +import com.badlogic.gdx.graphics.Texture; +import com.megacrit.cardcrawl.actions.common.GainBlockAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import static awakenedOne.AwakenedOneMod.makeRelicOutlinePath; +import static awakenedOne.AwakenedOneMod.makeRelicPath; + +public class WhiteRibbon extends CustomRelic { + + public static final String ID = AwakenedOneMod.makeID("WhiteRibbon"); + private static final int AMOUNT = 3; + private static final Texture IMG = TexLoader.getTexture(makeRelicPath("WhiteRibbon.png")); + private static final Texture OUTLINE = TexLoader.getTexture(makeRelicOutlinePath("WhiteRibbon.png")); + + public WhiteRibbon() { + super(ID, IMG, OUTLINE, RelicTier.BOSS, LandingSound.MAGICAL); + } + + +// @Override +// public void atBattleStart() { +// this.counter = -1; +// } +// +// @Override +// public void atTurnStart() { +// this.counter = -1; +// beginLongPulse(); +// } +// +// @Override +// public void onVictory(){ +// this.counter = -1; +// stopPulse(); +// } + + + @Override + public void onPlayCard(AbstractCard card, AbstractMonster m) { + if (card.type == AbstractCard.CardType.POWER) { + this.flash(); + addToBot(new GainBlockAction(AbstractDungeon.player, AMOUNT)); + } + } + + public void onTrigger() { + flash(); + addToBot(new GainBlockAction(AbstractDungeon.player, AMOUNT)); + } + +// //Check AwakenButton.java. I'm just using this override for convenience. +// @Override +// public void onAwaken(int amount) { +// if (this.counter == -1) { +// if (amount == 1) { +// this.addToTop(new RelicAboveCreatureAction(AbstractDungeon.player, this)); +// //this should provide a little more visual feedback +// if (Settings.FAST_MODE) { +// this.addToTop(new VFXAction(new MiracleEffect(Color.CYAN, Color.PURPLE, "ATTACK_MAGIC_SLOW_1"), 0.0F)); +// } else { +// this.addToTop(new VFXAction(new MiracleEffect(Color.CYAN, Color.PURPLE, "ATTACK_MAGIC_SLOW_1"), 0.3F)); +// } +// stopPulse(); +// this.counter = 1; +// } +// } +// } + + @Override + public String getUpdatedDescription() { + return DESCRIPTIONS[0] + AMOUNT + DESCRIPTIONS[1]; + } + +} diff --git a/src/main/java/awakenedOne/relics/ZenerDeck.java b/src/main/java/awakenedOne/relics/ZenerDeck.java new file mode 100644 index 000000000..2f4ba77f2 --- /dev/null +++ b/src/main/java/awakenedOne/relics/ZenerDeck.java @@ -0,0 +1,42 @@ +package awakenedOne.relics; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.actions.ConjureAction; +import awakenedOne.cards.tokens.spells.ESPSpell; +import awakenedOne.util.TexLoader; +import basemod.abstracts.CustomRelic; +import basemod.helpers.CardPowerTip; +import com.badlogic.gdx.graphics.Texture; +import com.megacrit.cardcrawl.actions.common.RelicAboveCreatureAction; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; + +import static awakenedOne.AwakenedOneMod.makeRelicOutlinePath; +import static awakenedOne.AwakenedOneMod.makeRelicPath; +import static awakenedOne.util.Wiz.att; + +public class ZenerDeck extends CustomRelic { + + //Zener Deck + + public static final String ID = AwakenedOneMod.makeID("ZenerDeck"); + private static final Texture IMG = TexLoader.getTexture(makeRelicPath("ZenerDeck.png")); //TODO: Images + private static final Texture OUTLINE = TexLoader.getTexture(makeRelicOutlinePath("ZenerDeck.png")); + + public ZenerDeck() { + super(ID, IMG, OUTLINE, RelicTier.RARE, LandingSound.FLAT); + this.tips.add(new CardPowerTip(new ESPSpell())); + } + + @Override + public void atBattleStart() { + this.addToTop(new RelicAboveCreatureAction(AbstractDungeon.player, this)); + //actually conjuring it at the start of combat might be OP + att(new ConjureAction(false, false, true, new ESPSpell())); + } + + @Override + public String getUpdatedDescription() { + return DESCRIPTIONS[0]; + } + +} diff --git a/src/main/java/awakenedOne/ui/AwakenButton.java b/src/main/java/awakenedOne/ui/AwakenButton.java new file mode 100644 index 000000000..32ef72ab4 --- /dev/null +++ b/src/main/java/awakenedOne/ui/AwakenButton.java @@ -0,0 +1,66 @@ +package awakenedOne.ui; + +import awakenedOne.powers.OnAwakenPower; +import awakenedOne.relics.OnAwakenRelic; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.powers.AbstractPower; +import com.megacrit.cardcrawl.relics.AbstractRelic; + +public class AwakenButton { + +// private static final Texture tex = TexLoader.getTexture("awakenedResources/images/ui/BecomeAwesomeButton.png"); +// private static final Texture tex_hovered = TexLoader.getTexture("awakenedResources/images/ui/BecomeAwesomeButton_hovered.png"); + + public AwakenButton() { + } + + //What button? A button? A button that steals all of your energy when you click it? Never heard of it. + + // @Override + // public void update() { + // super.update(); + // if (hitbox.hovered) { + // ImageHelper.tipBoxAtMousePos("#yAwaken", "Click this to spend all your [E] and gain that much Awakened."); + // } + // } + // + // @Override + // protected void onHover() { + // if (canBeClicked()) + // this.image = tex_hovered; + // } + // + // @Override + // protected void onUnhover() { + // this.image = tex; + // } + // + // @Override + // protected void onClick() { + // if (canBeClicked()) { + // int amount = EnergyPanel.totalCount; + // AbstractDungeon.player.energy.use(amount); + // awaken(amount); + // } + // } + + public static void awaken(int amount) { + //Look, I'm not using this button. But I will use its subscription for a relic since it's already set up. + //applyToSelf(new AwakenedPower(amount)); + for (AbstractRelic r : AbstractDungeon.player.relics) { + if (r instanceof OnAwakenRelic) { + ((OnAwakenRelic) r).onAwaken(amount); + } + } + for (AbstractPower p : AbstractDungeon.player.powers) { + if (p instanceof OnAwakenPower) { + ((OnAwakenPower) p).onAwaken(amount); + } + } + } + +// private boolean canBeClicked() { +// return !AbstractDungeon.isScreenUp && AbstractDungeon.actionManager.actions.isEmpty() && AbstractDungeon.actionManager.currentAction == null && EnergyPanel.totalCount > 0; +// } + +} diff --git a/src/main/java/awakenedOne/ui/AwakenedIcon.java b/src/main/java/awakenedOne/ui/AwakenedIcon.java new file mode 100644 index 000000000..936a00940 --- /dev/null +++ b/src/main/java/awakenedOne/ui/AwakenedIcon.java @@ -0,0 +1,23 @@ +package awakenedOne.ui; + +import awakenedOne.util.TexLoader; +import com.badlogic.gdx.graphics.Texture; +import com.evacipated.cardcrawl.mod.stslib.icons.AbstractCustomIcon; + +public class AwakenedIcon extends AbstractCustomIcon { + public static final String ID = "awakened"; + private static final Texture iconTex = TexLoader.getTexture("awakenedResources/images/ui/AwesomeIcon.png"); + private static AwakenedIcon singleton; + + public AwakenedIcon() { + super(ID, iconTex); + } + + public static AwakenedIcon get() { + if (singleton == null) { + singleton = new AwakenedIcon(); + } + return singleton; + } + +} diff --git a/src/main/java/awakenedOne/ui/OrbitingSpells.java b/src/main/java/awakenedOne/ui/OrbitingSpells.java new file mode 100644 index 000000000..c5a2f5d71 --- /dev/null +++ b/src/main/java/awakenedOne/ui/OrbitingSpells.java @@ -0,0 +1,271 @@ +package awakenedOne.ui; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.actions.ConjureAction; +import awakenedOne.actions.SetUpNextSpellAction; +import awakenedOne.cards.*; +import awakenedOne.cards.tokens.spells.*; +import awakenedOne.relics.ZenerDeck; +import awakenedOne.util.TexLoader; +import awakenedOne.util.Wiz; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.helpers.CardLibrary; +import com.megacrit.cardcrawl.helpers.FontHelper; +import com.megacrit.cardcrawl.helpers.Hitbox; +import com.megacrit.cardcrawl.localization.UIStrings; +import com.megacrit.cardcrawl.powers.watcher.MasterRealityPower; +import com.megacrit.cardcrawl.vfx.ThoughtBubble; +import guardian.characters.GuardianCharacter; + +import java.util.ArrayList; +import java.util.HashMap; + +import static awakenedOne.AwakenedOneMod.*; +import static awakenedOne.ui.AwakenButton.awaken; +import static awakenedOne.util.Wiz.atb; +import static awakenedOne.util.Wiz.att; +import static downfall.downfallMod.DeterministicConjure; + +public class OrbitingSpells { + + public static final float POSITION_X = 95F * Settings.scale; + public static final float POSITION_Y = 300F * Settings.scale; + + private static final UIStrings uiStrings = CardCrawlGame.languagePack.getUIString(makeID("Spellbook")); + + private static final ArrayList spells = new ArrayList<>(); + + public static ArrayList spellCards = new ArrayList<>(); + public static ArrayList boxes = new ArrayList<>(); + private static final HashMap cardIcons = new HashMap<>(); + private static final HashMap cardColors = new HashMap<>(); + private static int hoveredCard = -1; + private static final Hitbox barBox = new Hitbox(POSITION_X - 75F * Settings.scale, Settings.HEIGHT - POSITION_Y - 350 * Settings.scale, 40 * Settings.scale, 350 * Settings.scale); + private static final Texture unfilledPip = TexLoader.getTexture("awakenedResources/images/ui/pip_unfilled.png"); + private static final Texture filledPip = TexLoader.getTexture("awakenedResources/images/ui/pip_filled.png"); + private static final Texture pipComplete = TexLoader.getTexture("awakenedResources/images/ui/pip_complete.png"); + private static final Color defaultNextColor = Color.GREEN.cpy(); + + static { + for (int i = 0; i < 10; i++) { + boxes.add(new Hitbox(POSITION_X, Settings.HEIGHT - (POSITION_Y + (i * (70F * Settings.scale))) - 35 * Settings.scale, 200F * Settings.scale, 45F * Settings.scale)); + } + + cardIcons.put(BurningStudy.ID, TexLoader.getTexture("awakenedResources/images/ui/BurningStudy.png")); + cardIcons.put(Cryostasis.ID, TexLoader.getTexture("awakenedResources/images/ui/Cryostasis.png")); + cardIcons.put(Darkleech.ID, TexLoader.getTexture("awakenedResources/images/ui/Darkleech.png")); + cardIcons.put(Thunderbolt.ID, TexLoader.getTexture("awakenedResources/images/ui/Thunderbolt.png")); + //cardIcons.put(DeathCoil.ID, TexLoader.getTexture("awakenedResources/images/ui/Deathcoil.png")); + cardIcons.put(AphoticShield.ID, TexLoader.getTexture("awakenedResources/images/ui/AphoticShield.png")); + cardIcons.put(ESPSpell.ID, TexLoader.getTexture("awakenedResources/images/ui/ESPSpell.png")); + cardIcons.put(Grimoire.ID, TexLoader.getTexture("awakenedResources/images/ui/Grimoire.png")); + + cardColors.put(BurningStudy.ID, Color.RED.cpy()); + cardColors.put(Cryostasis.ID, placeholderColor.cpy()); + cardColors.put(Darkleech.ID, Color.PURPLE.cpy()); + cardColors.put(Thunderbolt.ID, Color.YELLOW.cpy()); + cardColors.put(AphoticShield.ID, GuardianCharacter.cardRenderColor.cpy()); + cardColors.put(ESPSpell.ID, Color.PINK.cpy()); + cardColors.put(Grimoire.ID, Color.FIREBRICK.cpy()); + } + + static { + spells.add(BurningStudy.ID); + spells.add(Thunderbolt.ID); + spells.add(Cryostasis.ID); + spells.add(Darkleech.ID); + } + + private static Texture getIconForCard(AbstractCard tar) { + return cardIcons.getOrDefault(tar.cardID, TexLoader.getTexture("awakenedResources/images/ui/defaultSpell.png")); + } + + private static Color getColorForCard(AbstractCard tar) { + return cardColors.getOrDefault(tar.cardID, defaultNextColor); + } + + public static void refreshSpells() { + spellCards.clear(); + for (int i = 0; i < spells.size(); i++) { + addSpellCard(CardLibrary.getCard(spells.get(i)).makeCopy()); + } + + int count = (int) AbstractDungeon.actionManager.cardsPlayedThisCombat.stream().filter(q -> q instanceof Deathwish).count(); + for (int i = 0; i < count; i++) { + addSpellCard(CardLibrary.getCard(DeathCoil.ID).makeCopy()); + } + + int count2 = (int) AbstractDungeon.actionManager.cardsPlayedThisCombat.stream().filter(q -> q instanceof AphoticFount).count(); + for (int i = 0; i < count2; i++) { + addSpellCard(CardLibrary.getCard(AphoticShield.ID).makeCopy()); + } + + if (AbstractDungeon.player.hasRelic(ZenerDeck.ID)) { + addSpellCard(CardLibrary.getCard(ESPSpell.ID).makeCopy()); + } + setupnext(); + } + + + public static void upgradeCaws(int amount) { + for (AbstractCard c : OrbitingSpells.spellCards) { + if (c instanceof Caw) { + c.baseDamage += amount; + c.applyPowers(); + } + } + } + + public static void upgradeall() { + for (AbstractCard c : spellCards) { + c.upgrade(); + } + } + + public static void empty() { + spellCards.clear(); + } + + public static void addSpellCard(AbstractCard card) { + if (AbstractDungeon.player.hasPower(MasterRealityPower.POWER_ID)) { + card.upgrade(); + } + if (Wiz.isAwakened()) { + card.upgrade(); + } + if (spellCards.size() < 10) { + spellCards.add(card); + } else { + AbstractDungeon.effectList.add(new ThoughtBubble(AbstractDungeon.player.dialogX, AbstractDungeon.player.dialogY, 3.0F, CardCrawlGame.languagePack.getUIString("awakened:FullSpellbook").TEXT[0], true)); + } + } + + public static boolean removeSpellCard(AbstractCard card) { + int idx = getIndexOfCard(card); + if (idx != -1) { + spellCards.remove(getIndexOfCard(card)); + att(new AbstractGameAction() { + @Override + public void update() { + isDone = true; + if ((spellCards.isEmpty())) { + awaken(5); + OrbitingSpells.refreshSpells(); + ConjureAction.refreshedthisturn = true; + } else { + atb(new SetUpNextSpellAction()); + } + } + }); + return true; + } + return false; + } + + public static boolean removeSpellCardSpecial(AbstractCard card) { + int idx = getIndexOfCard(card); + if (idx != -1) { + spellCards.remove(getIndexOfCard(card)); + att(new AbstractGameAction() { + @Override + public void update() { + isDone = true; + if ((spellCards.isEmpty())) { + awaken(5); + OrbitingSpells.refreshSpells(); + ConjureAction.refreshedthisturn = true; + } + } + }); + return true; + } + return false; + } + + + public static void setupnext() { + for (AbstractCard c : spellCards) { + c.tags.remove(UP_NEXT); + } + AbstractCard card = Wiz.getRandomItem(spellCards, AbstractDungeon.cardRandomRng); + int idx = getIndexOfCard(card); + if (idx != -1) { + spellCards.get(getIndexOfCard(card)).tags.add(UP_NEXT); + } + } + + + public static void atBattleStart() { + refreshSpells(); + } + + public static void update() { + hoveredCard = -1; + for (int i = 0; i < boxes.size(); i++) { + boxes.get(i).update(); + if (boxes.get(i).hovered) { + if (i < spellCards.size()) { + hoveredCard = i; + } + } + } + } + + public static void postPlayerRender(SpriteBatch sb) { + sb.setColor(Color.WHITE.cpy()); + FontHelper.renderFontLeftTopAligned(sb, FontHelper.tipHeaderFont, uiStrings.TEXT[0], POSITION_X, Settings.HEIGHT - POSITION_Y + (50 * Settings.scale), Settings.GOLD_COLOR); + int xr = 0; + + for (AbstractCard s : spellCards) { + drawTextureScaled(sb, getIconForCard(s), boxes.get(xr).x, boxes.get(xr).y); + float dist = FontHelper.getWidth(FontHelper.tipHeaderFont, s.name, 1.0F); + + Color textColor = Color.WHITE.cpy(); + if (s.hasTag(UP_NEXT) && DeterministicConjure) { + textColor = getColorForCard(s); + } + FontHelper.renderFontLeft(sb, FontHelper.tipHeaderFont, s.name, boxes.get(xr).x + 40F, boxes.get(xr).y + 25F, textColor); + xr++; + } + + for (Hitbox h : boxes) { + h.render(sb); + } + + boolean woke = Wiz.isAwakened(); + for (int i = 0; i < Wiz.POWERS_TO_AWAKEN; i++) { + drawTextureScaled(sb, (woke ? pipComplete : (AbstractDungeon.actionManager.cardsPlayedThisCombat.stream().filter(card -> card.type == AbstractCard.CardType.POWER).count() - 1 >= i || AwakenedOneMod.awakenedthiscombat) ? filledPip : unfilledPip), + barBox.x, + barBox.y + (55 * Settings.yScale) * i); + } + barBox.render(sb); + + + if (hoveredCard != -1) { + AbstractCard tar = spellCards.get(hoveredCard); + tar.target_x = tar.current_x = barBox.x + 200 * Settings.scale; + tar.target_y = tar.current_y = Settings.HEIGHT - (POSITION_Y + 100 * Settings.scale); + spellCards.get(hoveredCard).render(sb); + } + } + + public static void drawTextureScaled(SpriteBatch sb, Texture tex, float x, float y) { + sb.draw(tex, x, y, 0, 0, tex.getWidth() * Settings.scale, tex.getHeight() * Settings.scale, 1, 1, 0, 0, 0, tex.getWidth(), tex.getHeight(), false, false); + } + + public static int getIndexOfCard(AbstractCard card) { + for (int i = 0; i < spellCards.size(); i++) { + if (spellCards.get(i).cardID.equals(card.cardID)) { + return i; + } + } + return -1; + } +} diff --git a/src/main/java/awakenedOne/util/CardFilter.java b/src/main/java/awakenedOne/util/CardFilter.java new file mode 100644 index 000000000..10e8ccb14 --- /dev/null +++ b/src/main/java/awakenedOne/util/CardFilter.java @@ -0,0 +1,14 @@ +package awakenedOne.util; + +import org.clapper.util.classutil.ClassFilter; +import org.clapper.util.classutil.ClassFinder; +import org.clapper.util.classutil.ClassInfo; + +public class CardFilter implements ClassFilter { + private static final String PACKAGE = "awakenedOne.cards"; + + @Override + public boolean accept(ClassInfo classInfo, ClassFinder classFinder) { + return classInfo.getClassName().startsWith(PACKAGE); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/util/OnConjureSubscriber.java b/src/main/java/awakenedOne/util/OnConjureSubscriber.java new file mode 100644 index 000000000..4643edfc2 --- /dev/null +++ b/src/main/java/awakenedOne/util/OnConjureSubscriber.java @@ -0,0 +1,6 @@ +package awakenedOne.util; + +public interface OnConjureSubscriber { + default void OnConjure() { + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/util/TexLoader.java b/src/main/java/awakenedOne/util/TexLoader.java new file mode 100644 index 000000000..ef62eb978 --- /dev/null +++ b/src/main/java/awakenedOne/util/TexLoader.java @@ -0,0 +1,47 @@ +package awakenedOne.util; + +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.utils.GdxRuntimeException; +import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; +import com.evacipated.cardcrawl.modthespire.lib.SpirePrefixPatch; + +import java.util.HashMap; + +public class TexLoader { + private static final HashMap textures = new HashMap<>(); + + public static Texture getTexture(final String textureString) { + + if (textures.get(textureString) == null) { + try { + loadTexture(textureString, true); + } catch (GdxRuntimeException e) { + return getTexture("awakenedResources/images/ui/missing.png"); + } + + } + return textures.get(textureString); + } + + private static void loadTexture(final String textureString, boolean linearFilter) throws GdxRuntimeException { + Texture texture = new Texture(textureString); + if (linearFilter) { + texture.setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear); + } else { + texture.setFilter(Texture.TextureFilter.Nearest, Texture.TextureFilter.Nearest); + } + textures.put(textureString, texture); + } + + @SpirePatch(clz = Texture.class, method = "dispose") + public static class DisposeListener { + @SpirePrefixPatch + public static void DisposeListenerPatch(final Texture __instance) { + textures.entrySet().removeIf(entry -> { + if (entry.getValue().equals(__instance)) + System.out.println("TexLoader | Removing Texture: " + entry.getKey()); + return entry.getValue().equals(__instance); + }); + } + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/util/Wiz.java b/src/main/java/awakenedOne/util/Wiz.java new file mode 100644 index 000000000..3583f08b8 --- /dev/null +++ b/src/main/java/awakenedOne/util/Wiz.java @@ -0,0 +1,247 @@ +package awakenedOne.util; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.cards.DemonGlyph; +import awakenedOne.powers.DemonGlyphPower; +import awakenedOne.ui.OrbitingSpells; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.actions.common.*; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.helpers.CardLibrary; +import com.megacrit.cardcrawl.helpers.Hitbox; +import com.megacrit.cardcrawl.helpers.input.InputHelper; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.AbstractPower; +import com.megacrit.cardcrawl.random.Random; +import com.megacrit.cardcrawl.rooms.AbstractRoom; +import com.megacrit.cardcrawl.vfx.AbstractGameEffect; + +import java.util.ArrayList; +import java.util.function.Consumer; +import java.util.function.Predicate; + +import static awakenedOne.AwakenedOneMod.*; +import static awakenedOne.ui.AwakenButton.awaken; + +public class Wiz { + public static int POWERS_TO_AWAKEN = 8; + + //The wonderful Wizard of Oz allows access to most easy compilations of data, or functions. + public static AbstractPlayer adp() { + return AbstractDungeon.player; + } + + public static void forAllCardsInList(Consumer consumer, ArrayList cardsList) { + for (AbstractCard c : cardsList) { + consumer.accept(c); + } + } + + public static ArrayList getAllCardsInCardGroups(boolean includeHand, boolean includeExhaust) { + ArrayList masterCardsList = new ArrayList<>(); + masterCardsList.addAll(AbstractDungeon.player.drawPile.group); + masterCardsList.addAll(AbstractDungeon.player.discardPile.group); + if (includeHand) { + masterCardsList.addAll(AbstractDungeon.player.hand.group); + } + if (includeExhaust) { + masterCardsList.addAll(AbstractDungeon.player.exhaustPile.group); + } + return masterCardsList; + } + + public static void forAllMonstersLiving(Consumer consumer) { + for (AbstractMonster m : getEnemies()) { + consumer.accept(m); + } + } + + public static ArrayList getEnemies() { + ArrayList monsters = new ArrayList<>(AbstractDungeon.getMonsters().monsters); + monsters.removeIf(m -> m.isDead || m.isDying); + return monsters; + } + + public static ArrayList getCardsMatchingPredicate(Predicate pred) { + return getCardsMatchingPredicate(pred, false); + } + + public static ArrayList getCardsMatchingPredicate(Predicate pred, boolean allcards) { + ArrayList cardsList = new ArrayList<>(); + if (allcards) { + for (AbstractCard c : CardLibrary.getAllCards()) { + if (pred.test(c)) cardsList.add(c.makeStatEquivalentCopy()); + } + } else { + for (AbstractCard c : AbstractDungeon.srcCommonCardPool.group) { + if (pred.test(c)) cardsList.add(c.makeStatEquivalentCopy()); + } + for (AbstractCard c : AbstractDungeon.srcUncommonCardPool.group) { + if (pred.test(c)) cardsList.add(c.makeStatEquivalentCopy()); + } + for (AbstractCard c : AbstractDungeon.srcRareCardPool.group) { + if (pred.test(c)) cardsList.add(c.makeStatEquivalentCopy()); + } + } + return cardsList; + } + + public static AbstractCard returnTrulyRandomPrediCardInCombat(Predicate pred, boolean allCards) { + return getRandomItem(getCardsMatchingPredicate(pred, allCards)); + } + + + public static AbstractCard returnTrulyRandomPrediCardInCombat(Predicate pred) { + return returnTrulyRandomPrediCardInCombat(pred, false); + } + + public static T getRandomItem(ArrayList list, Random rng) { + return list.isEmpty() ? null : list.get(rng.random(list.size() - 1)); + } + + public static T getRandomItem(ArrayList list) { + return getRandomItem(list, AbstractDungeon.cardRandomRng); + } + + private static boolean actuallyHovered(Hitbox hb) { + return InputHelper.mX > hb.x && InputHelper.mX < hb.x + hb.width && InputHelper.mY > hb.y && InputHelper.mY < hb.y + hb.height; + } + + public static boolean isInCombat() { + return CardCrawlGame.isInARun() && AbstractDungeon.currMapNode != null && AbstractDungeon.getCurrRoom() != null && AbstractDungeon.getCurrRoom().phase == AbstractRoom.RoomPhase.COMBAT; + } + + public static boolean hasConjure() { + boolean hasbasics = false; + for (AbstractCard c : AbstractDungeon.player.masterDeck.group) { + if (c.hasTag(DELVE) || c instanceof DemonGlyph) { + hasbasics = true; + } + } + return hasbasics; + } + + public static boolean isAwakened() { + int cool; + + cool = 0; + + for (AbstractCard c : AbstractDungeon.actionManager.cardsPlayedThisCombat) { + if (c.type == AbstractCard.CardType.POWER) { + cool++; + } + } + + if (AwakenedOneMod.awakenedthiscombat) { + cool = 100; + } + + if (cool >= POWERS_TO_AWAKEN) { + if (AbstractDungeon.player.hasPower(DemonGlyphPower.POWER_ID)) { + att(new RemoveSpecificPowerAction(AbstractDungeon.player, AbstractDungeon.player, DemonGlyphPower.POWER_ID)); + } + awakenedthiscombat = true; + awaken(10); + OrbitingSpells.upgradeall(); + return true; + } + + return false; + } + + + public static boolean isChantActive() { + if (AbstractDungeon.actionManager.cardsPlayedThisCombat.size() > 1) { + return (AbstractDungeon.actionManager.cardsPlayedThisCombat.get(AbstractDungeon.actionManager.cardsPlayedThisCombat.size() - 2).type == AbstractCard.CardType.POWER) || (AbstractDungeon.actionManager.cardsPlayedThisCombat.get(AbstractDungeon.actionManager.cardsPlayedThisCombat.size() - 1).hasTag(ACTIVECHANT)); + } + return false; + } + + + public static void atb(AbstractGameAction action) { + AbstractDungeon.actionManager.addToBottom(action); + } + + public static void att(AbstractGameAction action) { + AbstractDungeon.actionManager.addToTop(action); + } + + public static void vfx(AbstractGameEffect gameEffect) { + atb(new VFXAction(gameEffect)); + } + + public static void vfx(AbstractGameEffect gameEffect, float duration) { + atb(new VFXAction(gameEffect, duration)); + } + + public static void makeInHand(AbstractCard c, int i) { + atb(new MakeTempCardInHandAction(c, i)); + } + + public static void makeInHand(AbstractCard c) { + makeInHand(c, 1); + } + + public static void shuffleIn(AbstractCard c, int i) { + atb(new MakeTempCardInDrawPileAction(c, i, true, true)); + } + + public static void shuffleIn(AbstractCard c) { + shuffleIn(c, 1); + } + + public static void topDeck(AbstractCard c, int i) { + AbstractDungeon.actionManager.addToBottom(new MakeTempCardInDrawPileAction(c, i, false, true)); + } + + public static void topDeck(AbstractCard c) { + topDeck(c, 1); + } + + public static void applyToEnemy(AbstractMonster m, AbstractPower po) { + atb(new ApplyPowerAction(m, AbstractDungeon.player, po, po.amount)); + } + + public static void applyToEnemyTop(AbstractMonster m, AbstractPower po) { + att(new ApplyPowerAction(m, AbstractDungeon.player, po, po.amount)); + } + + public static void applyToSelf(AbstractPower po) { + atb(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, po, po.amount)); + } + + public static void applyToSelfTop(AbstractPower po) { + att(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, po, po.amount)); + } + + public static void thornDmg(AbstractCreature m, int amount, AbstractGameAction.AttackEffect AtkFX) { + atb(new DamageAction(m, new DamageInfo(AbstractDungeon.player, amount, DamageInfo.DamageType.THORNS), AtkFX)); + } + + public static void thornDmg(AbstractCreature m, int amount) { + thornDmg(m, amount, AbstractGameAction.AttackEffect.NONE); + } + + public static void discard(int amount, boolean isRandom) { + atb(new DiscardAction(adp(), adp(), amount, isRandom)); + } + + public static void discard(int amount) { + discard(amount, false); + } + + public static int pwrAmt(AbstractCreature check, String ID) { + AbstractPower found = check.getPower(ID); + if (found != null) { + return found.amount; + } + return 0; + } + +} diff --git a/src/main/java/champ/ChampChar.java b/src/main/java/champ/ChampChar.java index fa76cb8d1..1879a31fd 100644 --- a/src/main/java/champ/ChampChar.java +++ b/src/main/java/champ/ChampChar.java @@ -18,16 +18,19 @@ import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.core.EnergyManager; import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.helpers.*; import com.megacrit.cardcrawl.localization.CharacterStrings; import com.megacrit.cardcrawl.screens.CharSelectInfo; -import com.megacrit.cardcrawl.stances.NeutralStance; +import com.megacrit.cardcrawl.vfx.AbstractGameEffect; +import com.megacrit.cardcrawl.vfx.PetalEffect; import downfall.util.TextureLoader; import reskinContent.patches.CharacterSelectScreenPatches; import java.util.ArrayList; import static champ.ChampMod.*; +import static hermit.characters.hermit.update_timer; public class ChampChar extends CustomPlayer { public static final String ID = makeID("theChamp"); @@ -179,13 +182,13 @@ public void switchStanceVisualGo(String ID) { currentIdle = "IdleBerserker"; break; } - case NeutralStance - .STANCE_ID: { - this.stateData.setMix(currentIdle, "Idle", 0.5F); - this.state.setAnimation(0, "Idle", true); - currentIdle = "Idle"; - break; - } +// case NeutralStance +// .STANCE_ID: { +// this.stateData.setMix(currentIdle, "Idle", 0.5F); +// this.state.setAnimation(0, "Idle", true); +// currentIdle = "Idle"; +// break; +// } case UltimateStance .STANCE_ID: { this.stateData.setMix(currentIdle, "IdleUltimate", 0.5F); @@ -193,9 +196,13 @@ public void switchStanceVisualGo(String ID) { currentIdle = "IdleUltimate"; break; } + default: { + this.stateData.setMix(currentIdle, "Idle", 0.5F); + this.state.setAnimation(0, "Idle", true); + currentIdle = "Idle"; + break; + } } - - } @Override @@ -244,6 +251,28 @@ public String getCustomModeCharacterButtonSoundKey() { } } + + @Override + //wow look victory effect cool + public void updateVictoryVfx(ArrayList effects) { + AbstractDungeon.effectsQueue.add(new PetalEffect()); + AbstractDungeon.effectsQueue.add(new PetalEffect()); + + update_timer += Gdx.graphics.getDeltaTime(); + + update_timer += Gdx.graphics.getDeltaTime(); + + for (float i = 0; i + (1.0 / 120.0) <= update_timer; update_timer -= (1.0 / 120.0)) { + float spawn = (float) MathUtils.random(0, 10); + if (spawn == 1) { + effects.add(new PetalEffect()); + AbstractDungeon.effectsQueue.add(new PetalEffect()); + AbstractDungeon.effectsQueue.add(new PetalEffect()); + } + } + } + + @Override public int getAscensionMaxHPLoss() { return 5; diff --git a/src/main/java/champ/ChampMod.java b/src/main/java/champ/ChampMod.java index c24a3fb80..235faf78d 100644 --- a/src/main/java/champ/ChampMod.java +++ b/src/main/java/champ/ChampMod.java @@ -32,6 +32,7 @@ import com.evacipated.cardcrawl.modthespire.lib.SpireInitializer; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.RelicAboveCreatureAction; import com.megacrit.cardcrawl.actions.watcher.ChangeStanceAction; import com.megacrit.cardcrawl.actions.watcher.PressEndTurnButtonAction; import com.megacrit.cardcrawl.cards.AbstractCard; @@ -44,11 +45,13 @@ import com.megacrit.cardcrawl.monsters.MonsterGroup; import com.megacrit.cardcrawl.powers.watcher.VigorPower; import com.megacrit.cardcrawl.relics.AbstractRelic; +import com.megacrit.cardcrawl.relics.Calipers; import com.megacrit.cardcrawl.rooms.AbstractRoom; import com.megacrit.cardcrawl.stances.NeutralStance; import downfall.downfallMod; import downfall.util.CardIgnore; import downfall.util.TextureLoader; +import guardian.relics.ObsidianScales; import guardian.stances.DefensiveMode; import javassist.CtClass; import javassist.Modifier; @@ -263,6 +266,7 @@ public void receiveEditRelics() { BaseMod.addRelicToCustomPool(new GladiatorsBookOfMartialProwess(), ChampChar.Enums.CHAMP_GRAY); BaseMod.addRelicToCustomPool(new SignatureFinisher(), ChampChar.Enums.CHAMP_GRAY); BaseMod.addRelicToCustomPool(new PowerArmor(), ChampChar.Enums.CHAMP_GRAY); + BaseMod.addRelicToCustomPool(new RageAmulet(), ChampChar.Enums.CHAMP_GRAY); BaseMod.addRelicToCustomPool(new SpectersHand(), ChampChar.Enums.CHAMP_GRAY); BaseMod.addRelicToCustomPool(new LiftRelic(), ChampChar.Enums.CHAMP_GRAY); @@ -397,7 +401,7 @@ public void receivePostInitialize() { BaseMod.addEvent(new AddEventParams.Builder(Colosseum_Evil_Champ.ID, Colosseum_Evil_Champ.class) //Event ID// //Event Spawn Condition// - .spawnCondition(() -> evilMode && AbstractDungeon.player instanceof ChampChar) + .spawnCondition(() -> AbstractDungeon.player instanceof ChampChar) //Event ID to Override// .overrideEvent(Colosseum.ID) //Event Type// @@ -526,11 +530,22 @@ public static void triggerOpenerRelics(boolean fromNeutral) { @Override public int receiveOnPlayerLoseBlock(int i) { + + //This only seems to create a bug with Deflecting Bracers? + //Replaced i with 0 here. if(AbstractDungeon.player.stance instanceof DefensiveMode){ - return i; + return 0; } + if (AbstractDungeon.player.hasRelic(DeflectingBracers.ID)) { + int counter = Math.min(i, AbstractDungeon.player.currentBlock / 2); + + //Calipers would be good here. + if (AbstractDungeon.player.hasRelic(Calipers.ID)) { + counter = Math.min(7, AbstractDungeon.player.currentBlock / 2); + } + if (counter > 0) { AbstractDungeon.player.getRelic(DeflectingBracers.ID).flash(); AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new CounterPower(counter), counter)); @@ -551,6 +566,11 @@ public void receivePostUpdate() { public static void vigor(int begone) { + //this breaks if the player somehow goes from 0 vigor to over 10 + //this is possible with Gladiator Form or Masterful Slash + //decided to write a patch because of this + + ///VigorCounterPowerArmorPatch AbstractDungeon.actionManager.addToBottom(new AbstractGameAction() { @Override @@ -560,6 +580,7 @@ public void update() { if (AbstractDungeon.player.hasRelic(PowerArmor.ID) && AbstractDungeon.player.hasPower(VigorPower.POWER_ID)) { if (x + AbstractDungeon.player.getPower(VigorPower.POWER_ID).amount > PowerArmor.CAP_RESOLVE_ETC) { x = PowerArmor.CAP_RESOLVE_ETC - AbstractDungeon.player.getPower(VigorPower.POWER_ID).amount; + ((PowerArmor)(AbstractDungeon.player.getRelic(PowerArmor.ID))).onTrigger(begone - x); } } AbstractDungeon.actionManager.addToTop(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new VigorPower(AbstractDungeon.player, x), x)); diff --git a/src/main/java/champ/ChampTextHelper.java b/src/main/java/champ/ChampTextHelper.java index 1e1d398f3..d70989376 100644 --- a/src/main/java/champ/ChampTextHelper.java +++ b/src/main/java/champ/ChampTextHelper.java @@ -7,9 +7,7 @@ import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; -import static automaton.FunctionHelper.WITH_DELIMITER; import static champ.ChampMod.FINISHER; -import static champ.ChampMod.TECHNIQUE; public class ChampTextHelper { protected static String[] ifStr = CardCrawlGame.languagePack.getUIString(AbstractChampCard.makeID("highlightCombos")).TEXT; diff --git a/src/main/java/champ/StanceHelper.java b/src/main/java/champ/StanceHelper.java index e1eb750ef..e9c288341 100644 --- a/src/main/java/champ/StanceHelper.java +++ b/src/main/java/champ/StanceHelper.java @@ -1,23 +1,14 @@ package champ; -import basemod.BaseMod; -import champ.patches.SymbolDescriptionPatch; -import champ.stances.AbstractChampStance; import champ.stances.BerserkerStance; import champ.stances.DefensiveStance; import champ.stances.UltimateStance; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.badlogic.gdx.math.Vector2; -import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; -import com.megacrit.cardcrawl.helpers.GameDictionary; import com.megacrit.cardcrawl.helpers.Hitbox; -import com.megacrit.cardcrawl.helpers.TipHelper; -import com.megacrit.cardcrawl.helpers.input.InputHelper; -import com.megacrit.cardcrawl.rooms.AbstractRoom; -import downfall.downfallMod; public class StanceHelper { diff --git a/src/main/java/champ/TipHelperChamp1.java b/src/main/java/champ/TipHelperChamp1.java index a987381ce..c72b4c95c 100644 --- a/src/main/java/champ/TipHelperChamp1.java +++ b/src/main/java/champ/TipHelperChamp1.java @@ -1,8 +1,3 @@ -// -// Source code recreated from a .class file by IntelliJ IDEA -// (powered by Fernflower decompiler) -// - package champ; import com.badlogic.gdx.graphics.Color; diff --git a/src/main/java/champ/TipHelperChamp2.java b/src/main/java/champ/TipHelperChamp2.java index 7c25afd3d..4e80fdf71 100644 --- a/src/main/java/champ/TipHelperChamp2.java +++ b/src/main/java/champ/TipHelperChamp2.java @@ -1,8 +1,3 @@ -// -// Source code recreated from a .class file by IntelliJ IDEA -// (powered by Fernflower decompiler) -// - package champ; import champ.stances.BerserkerStance; diff --git a/src/main/java/champ/TipHelperChamp3.java b/src/main/java/champ/TipHelperChamp3.java index 46779c0ae..e689be184 100644 --- a/src/main/java/champ/TipHelperChamp3.java +++ b/src/main/java/champ/TipHelperChamp3.java @@ -1,8 +1,3 @@ -// -// Source code recreated from a .class file by IntelliJ IDEA -// (powered by Fernflower decompiler) -// - package champ; import champ.powers.CalledShotPower; diff --git a/src/main/java/champ/actions/AnimateSuplexAction.java b/src/main/java/champ/actions/AnimateSuplexAction.java index bf729c429..c619758af 100644 --- a/src/main/java/champ/actions/AnimateSuplexAction.java +++ b/src/main/java/champ/actions/AnimateSuplexAction.java @@ -5,7 +5,6 @@ import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.core.AbstractCreature; import com.megacrit.cardcrawl.core.Settings; -import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; public class AnimateSuplexAction extends AbstractGameAction diff --git a/src/main/java/champ/actions/CircumventAction.java b/src/main/java/champ/actions/CircumventAction.java index f9a0f1736..0f9560d1b 100644 --- a/src/main/java/champ/actions/CircumventAction.java +++ b/src/main/java/champ/actions/CircumventAction.java @@ -1,18 +1,10 @@ -// -// Source code recreated from a .class file by IntelliJ IDEA -// (powered by Fernflower decompiler) -// - package champ.actions; import champ.powers.CounterPower; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.common.GainBlockAction; -import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; -import java.util.ArrayList; - public class CircumventAction extends AbstractGameAction { public void update() { diff --git a/src/main/java/champ/actions/DevastateAction.java b/src/main/java/champ/actions/DevastateAction.java index b9f60e0ab..26a886f77 100644 --- a/src/main/java/champ/actions/DevastateAction.java +++ b/src/main/java/champ/actions/DevastateAction.java @@ -1,13 +1,9 @@ package champ.actions; -import com.megacrit.cardcrawl.actions.GameActionManager; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.cards.DamageInfo; import com.megacrit.cardcrawl.core.AbstractCreature; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; -import com.megacrit.cardcrawl.helpers.Hitbox; -import com.megacrit.cardcrawl.rooms.AbstractRoom; -import com.megacrit.cardcrawl.stances.NeutralStance; import java.util.UUID; diff --git a/src/main/java/champ/actions/DiscoverOpenerAction.java b/src/main/java/champ/actions/DiscoverOpenerAction.java index c9011fd09..394aaf57d 100644 --- a/src/main/java/champ/actions/DiscoverOpenerAction.java +++ b/src/main/java/champ/actions/DiscoverOpenerAction.java @@ -1,8 +1,8 @@ package champ.actions; +import basemod.BaseMod; import champ.ChampMod; import com.megacrit.cardcrawl.actions.AbstractGameAction; -import com.megacrit.cardcrawl.actions.common.MakeTempCardInHandAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; @@ -44,15 +44,15 @@ public void update() { disCard.current_x = -1000.0F * Settings.scale;// 70 disCard2.current_x = -1000.0F * Settings.scale + AbstractCard.IMG_HEIGHT_S;// 71 if (this.amount == 1) {// 73 - if (AbstractDungeon.player.hand.size() < 10) {// 74 + if (AbstractDungeon.player.hand.size() < BaseMod.MAX_HAND_SIZE) {// 74 AbstractDungeon.effectList.add(new ShowCardAndAddToHandEffect(disCard, (float) Settings.WIDTH / 2.0F, (float) Settings.HEIGHT / 2.0F));// 75 } else { AbstractDungeon.effectList.add(new ShowCardAndAddToDiscardEffect(disCard, (float) Settings.WIDTH / 2.0F, (float) Settings.HEIGHT / 2.0F));// 78 } - } else if (AbstractDungeon.player.hand.size() + this.amount <= 10) {// 83 + } else if (AbstractDungeon.player.hand.size() + this.amount <= BaseMod.MAX_HAND_SIZE) {// 83 AbstractDungeon.effectList.add(new ShowCardAndAddToHandEffect(disCard, (float) Settings.WIDTH / 2.0F - AbstractCard.IMG_WIDTH / 2.0F, (float) Settings.HEIGHT / 2.0F));// 84 AbstractDungeon.effectList.add(new ShowCardAndAddToHandEffect(disCard2, (float) Settings.WIDTH / 2.0F + AbstractCard.IMG_WIDTH / 2.0F, (float) Settings.HEIGHT / 2.0F));// 89 - } else if (AbstractDungeon.player.hand.size() == 9) {// 95 + } else if (AbstractDungeon.player.hand.size() == BaseMod.MAX_HAND_SIZE-1) {// 95 AbstractDungeon.effectList.add(new ShowCardAndAddToHandEffect(disCard, (float) Settings.WIDTH / 2.0F - AbstractCard.IMG_WIDTH / 2.0F, (float) Settings.HEIGHT / 2.0F));// 96 AbstractDungeon.effectList.add(new ShowCardAndAddToDiscardEffect(disCard2, (float) Settings.WIDTH / 2.0F + AbstractCard.IMG_WIDTH / 2.0F, (float) Settings.HEIGHT / 2.0F));// 101 } else { diff --git a/src/main/java/champ/actions/IncreaseMiscDamageAction.java b/src/main/java/champ/actions/IncreaseMiscDamageAction.java index f13d4af19..260802132 100644 --- a/src/main/java/champ/actions/IncreaseMiscDamageAction.java +++ b/src/main/java/champ/actions/IncreaseMiscDamageAction.java @@ -1,8 +1,3 @@ -// -// Source code recreated from a .class file by IntelliJ IDEA -// (powered by Fernflower decompiler) -// - package champ.actions; import com.megacrit.cardcrawl.actions.AbstractGameAction; diff --git a/src/main/java/champ/actions/LariatAction.java b/src/main/java/champ/actions/LariatAction.java index 54bc0bdec..ec5cde68b 100644 --- a/src/main/java/champ/actions/LariatAction.java +++ b/src/main/java/champ/actions/LariatAction.java @@ -1,14 +1,11 @@ package champ.actions; -import champ.powers.CounterPower; import champ.stances.AbstractChampStance; -import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; import com.megacrit.cardcrawl.actions.common.GainBlockAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import downfall.actions.AbstractXAction; -import theHexaghost.powers.EnhancePower; public class LariatAction extends AbstractXAction { private int boom; @@ -27,7 +24,6 @@ public void update() { if (AbstractDungeon.player.stance instanceof AbstractChampStance) ((AbstractChampStance) AbstractDungeon.player.stance).techique(); - //addToTop(new ApplyPowerAction(p, p, new CounterPower(boom), boom)); addToTop(new GainBlockAction(p, boom2)); } this.isDone = true; diff --git a/src/main/java/champ/actions/OpenerReduceCostAction.java b/src/main/java/champ/actions/OpenerReduceCostAction.java index 0a53492db..63a458fb5 100644 --- a/src/main/java/champ/actions/OpenerReduceCostAction.java +++ b/src/main/java/champ/actions/OpenerReduceCostAction.java @@ -1,8 +1,3 @@ -// -// Source code recreated from a .class file by IntelliJ IDEA -// (powered by Fernflower decompiler) -// - package champ.actions; import com.megacrit.cardcrawl.actions.AbstractGameAction; diff --git a/src/main/java/champ/actions/PreciseThrustAction.java b/src/main/java/champ/actions/PreciseThrustAction.java index e7b3ace74..59dfbb563 100644 --- a/src/main/java/champ/actions/PreciseThrustAction.java +++ b/src/main/java/champ/actions/PreciseThrustAction.java @@ -1,13 +1,6 @@ -// -// Source code recreated from a .class file by IntelliJ IDEA -// (powered by Fernflower decompiler) -// - package champ.actions; import com.megacrit.cardcrawl.actions.AbstractGameAction; -import com.megacrit.cardcrawl.actions.AbstractGameAction.ActionType; -import com.megacrit.cardcrawl.actions.AbstractGameAction.AttackEffect; import com.megacrit.cardcrawl.actions.animations.VFXAction; import com.megacrit.cardcrawl.actions.common.GainBlockAction; import com.megacrit.cardcrawl.actions.utility.WaitAction; diff --git a/src/main/java/champ/actions/SteelEdgeAction.java b/src/main/java/champ/actions/SteelEdgeAction.java index 524bc7753..10425e1bd 100644 --- a/src/main/java/champ/actions/SteelEdgeAction.java +++ b/src/main/java/champ/actions/SteelEdgeAction.java @@ -2,9 +2,7 @@ import champ.cards.AbstractChampCard; import com.megacrit.cardcrawl.actions.common.DamageAction; -import com.megacrit.cardcrawl.actions.common.DrawCardAction; import com.megacrit.cardcrawl.actions.common.GainBlockAction; -import com.megacrit.cardcrawl.actions.common.GainEnergyAction; import com.megacrit.cardcrawl.cards.DamageInfo; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.core.Settings; diff --git a/src/main/java/champ/actions/VigorWallopAction.java b/src/main/java/champ/actions/VigorWallopAction.java new file mode 100644 index 000000000..040549a07 --- /dev/null +++ b/src/main/java/champ/actions/VigorWallopAction.java @@ -0,0 +1,55 @@ +package champ.actions; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.utility.WaitAction; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.powers.watcher.VigorPower; +import com.megacrit.cardcrawl.vfx.combat.FlameBarrierEffect; +import com.megacrit.cardcrawl.vfx.combat.FlashAtkImgEffect; +import downfall.powers.NextTurnPowerPower; +import hermit.util.Wiz; + +public class VigorWallopAction extends AbstractGameAction { + private int damage; + + public VigorWallopAction(AbstractCreature target, AbstractCreature source, int amount, DamageInfo.DamageType type, AbstractGameAction.AttackEffect effect) { + setValues(target, source, amount); + this.damage = amount; + this.actionType = AbstractGameAction.ActionType.DAMAGE; + this.damageType = type; + this.attackEffect = effect; + } + + public void update() { + if (this.duration == 0.5F) + AbstractDungeon.effectList.add(new FlashAtkImgEffect(this.target.hb.cX, this.target.hb.cY, this.attackEffect)); + tickDuration(); + if (this.isDone) { + vigorattack(); + this.target.damage(new DamageInfo(this.source, this.damage, this.damageType)); + if (AbstractDungeon.getMonsters().areMonstersBasicallyDead()) + AbstractDungeon.actionManager.clearPostCombatActions(); + AbstractDungeon.actionManager.addToTop((AbstractGameAction) new WaitAction(0.1F)); + } + } + + private void vigorattack() { + int tmp = this.damage; + tmp -= this.target.currentBlock; + if (tmp > this.target.currentHealth) + tmp = this.target.currentHealth; + if (tmp > 0) { + Wiz.atb(new ApplyPowerAction(this.source, this.source, new NextTurnPowerPower(this.source, new VigorPower(this.source,tmp)), tmp)); + if (Settings.FAST_MODE) { + this.addToBot(new VFXAction(this.source, new FlameBarrierEffect(this.source.hb.cX, this.source.hb.cY), 0.1F)); + } else { + this.addToBot(new VFXAction(this.source, new FlameBarrierEffect(this.source.hb.cX, this.source.hb.cY), 0.5F)); + } + } + } +} \ No newline at end of file diff --git a/src/main/java/champ/cards/AbstractChampCard.java b/src/main/java/champ/cards/AbstractChampCard.java index 414b9dd74..0b1bb15bf 100644 --- a/src/main/java/champ/cards/AbstractChampCard.java +++ b/src/main/java/champ/cards/AbstractChampCard.java @@ -4,6 +4,7 @@ import champ.ChampChar; import champ.ChampMod; import champ.ChampTextHelper; +import champ.patches.SignatureMovePatch; import champ.powers.CalledShotPower; import champ.powers.DancingMasterPower; import champ.relics.SignatureFinisher; @@ -35,7 +36,6 @@ import static champ.ChampMod.*; - public abstract class AbstractChampCard extends AbstractDownfallCard { protected final CardStrings cardStrings; public String betaArtPath; @@ -211,7 +211,7 @@ public void finisher (boolean noExit){ } if (AbstractDungeon.player.hasRelic(SignatureFinisher.ID)) { SignatureFinisher s = (SignatureFinisher) AbstractDungeon.player.getRelic(SignatureFinisher.ID); - if (s.card.uuid == this.uuid) { + if (SignatureMovePatch.inSignatureMove.get(this)) { leaveStance = false; } } diff --git a/src/main/java/champ/cards/ArenaPreparation.java b/src/main/java/champ/cards/ArenaPreparation.java index f0d399845..3c1f2ebe8 100644 --- a/src/main/java/champ/cards/ArenaPreparation.java +++ b/src/main/java/champ/cards/ArenaPreparation.java @@ -7,7 +7,6 @@ import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.unlock.UnlockTracker; import expansioncontent.cardmods.PropertiesMod; -import expansioncontent.cardmods.RetainCardMod; import static champ.ChampMod.loadJokeCardImage; diff --git a/src/main/java/champ/cards/Backstep.java b/src/main/java/champ/cards/Backstep.java index d66dd2e13..4a42495e6 100644 --- a/src/main/java/champ/cards/Backstep.java +++ b/src/main/java/champ/cards/Backstep.java @@ -1,6 +1,5 @@ package champ.cards; -import champ.ChampMod; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; @@ -13,11 +12,11 @@ public class Backstep extends AbstractChampCard { public final static String ID = makeID("Backstep"); public Backstep() { - super(ID, 1, CardType.SKILL, CardRarity.COMMON, CardTarget.SELF); - tags.add(ChampMod.OPENER); + super(ID, 1, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); + // tags.add(ChampMod.OPENER); baseBlock = 6; - this.tags.add(ChampMod.OPENERDEFENSIVE); + //this.tags.add(ChampMod.OPENERDEFENSIVE); //tags.add(ChampMod.COMBO); //tags.add(ChampMod.COMBOBERSERKER); postInit(); @@ -25,7 +24,7 @@ public Backstep() { } public void use(AbstractPlayer p, AbstractMonster m) { - defenseOpen(); + // defenseOpen(); blck(); } diff --git a/src/main/java/champ/cards/BerserkerStyle.java b/src/main/java/champ/cards/BerserkerStyle.java index 42ed18723..069e0500b 100644 --- a/src/main/java/champ/cards/BerserkerStyle.java +++ b/src/main/java/champ/cards/BerserkerStyle.java @@ -1,15 +1,11 @@ package champ.cards; -import champ.ChampMod; -import champ.powers.BerserkerStylePower; -import champ.powers.ResolvePower; +import champ.powers.HonePower; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; import static champ.ChampMod.loadJokeCardImage; -import static champ.ChampMod.fatigue; - public class BerserkerStyle extends AbstractChampCard { public final static String ID = makeID("BerserkerStyle"); @@ -18,23 +14,17 @@ public class BerserkerStyle extends AbstractChampCard { public BerserkerStyle() { super(ID, 1, CardType.POWER, CardRarity.UNCOMMON, CardTarget.SELF); - this.tags.add(ChampMod.OPENER); - this.tags.add(ChampMod.OPENERBERSERKER); - baseMagicNumber = magicNumber = 1; + baseMagicNumber = magicNumber = 3; // myHpLossCost = 5; postInit(); loadJokeCardImage(this, "BerserkerStyle.png"); } public void use(AbstractPlayer p, AbstractMonster m) { - berserkOpen(); - // fatigue(5); - applyToSelf(new BerserkerStylePower(magicNumber)); + applyToSelf(new HonePower(p, magicNumber)); } public void upp() { - isInnate = true; - rawDescription = UPGRADE_DESCRIPTION; - initializeDescription(); + upgradeMagicNumber(1); } } \ No newline at end of file diff --git a/src/main/java/champ/cards/BerserkersShout.java b/src/main/java/champ/cards/BerserkersShout.java index 1568dee58..6d805c93f 100644 --- a/src/main/java/champ/cards/BerserkersShout.java +++ b/src/main/java/champ/cards/BerserkersShout.java @@ -1,9 +1,7 @@ package champ.cards; import champ.ChampMod; -import com.megacrit.cardcrawl.actions.common.DrawCardAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; -import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; import static champ.ChampMod.loadJokeCardImage; @@ -17,7 +15,7 @@ public class BerserkersShout extends AbstractChampCard { //stupid intellij stuff skill, self, uncommon private static final int MAGIC = 3; - private static final int UPG_MAGIC = 3; + private static final int UPG_MAGIC = 1; public BerserkersShout() { super(ID, 0, CardType.SKILL, CardRarity.BASIC, CardTarget.SELF); @@ -44,6 +42,6 @@ public void upp() { // tags.add(ChampMod.TECHNIQUE); //postInit(); // initializeDescription(); - upgradeMagicNumber(3); + upgradeMagicNumber(UPG_MAGIC); } } \ No newline at end of file diff --git a/src/main/java/champ/cards/BladeFlurry.java b/src/main/java/champ/cards/BladeFlurry.java index 1a9cc4c95..4a0d985d9 100644 --- a/src/main/java/champ/cards/BladeFlurry.java +++ b/src/main/java/champ/cards/BladeFlurry.java @@ -1,17 +1,13 @@ package champ.cards; -import champ.ChampMod; import champ.powers.DualPlaySrikePower; import champ.vfx.DaggerThrowAnyColorEffect; import com.badlogic.gdx.graphics.Color; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.animations.VFXAction; import com.megacrit.cardcrawl.actions.common.DamageAction; -import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; -import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; -import com.megacrit.cardcrawl.vfx.combat.ThrowDaggerEffect; import static champ.ChampMod.loadJokeCardImage; @@ -24,7 +20,7 @@ public class BladeFlurry extends AbstractChampCard { private static final int DAMAGE = 6; public BladeFlurry() { - super(ID, 1, CardType.ATTACK, CardRarity.COMMON, CardTarget.ENEMY); + super(ID, 1, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); baseDamage = DAMAGE; tags.add(CardTags.STRIKE); loadJokeCardImage(this, "BladeFlurry.png"); diff --git a/src/main/java/champ/cards/BringItOn.java b/src/main/java/champ/cards/BringItOn.java index e9b542f8b..2159ebc1d 100644 --- a/src/main/java/champ/cards/BringItOn.java +++ b/src/main/java/champ/cards/BringItOn.java @@ -12,8 +12,8 @@ public class BringItOn extends AbstractChampCard { public BringItOn() { super(ID, 1, CardType.SKILL, CardRarity.COMMON, CardTarget.SELF); - baseBlock = 8; - baseMagicNumber = magicNumber = 8; + baseBlock = 7; + baseMagicNumber = magicNumber = 7; tags.add(ChampMod.FINISHER); postInit(); loadJokeCardImage(this, "BringItOn.png"); diff --git a/src/main/java/champ/cards/CalledShot.java b/src/main/java/champ/cards/CalledShot.java index 19e16d144..23a631f8c 100644 --- a/src/main/java/champ/cards/CalledShot.java +++ b/src/main/java/champ/cards/CalledShot.java @@ -1,14 +1,9 @@ package champ.cards; import champ.ChampMod; -import champ.powers.CalledShotPower; -import champ.stances.BerserkerStance; -import champ.stances.DefensiveStance; -import champ.stances.UltimateStance; import com.megacrit.cardcrawl.actions.common.DrawCardAction; import com.megacrit.cardcrawl.actions.common.GainEnergyAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; -import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; import sneckomod.SneckoMod; diff --git a/src/main/java/champ/cards/CheapShot.java b/src/main/java/champ/cards/CheapShot.java index 65548f8fe..d2ccc1045 100644 --- a/src/main/java/champ/cards/CheapShot.java +++ b/src/main/java/champ/cards/CheapShot.java @@ -1,6 +1,5 @@ package champ.cards; -import champ.ChampMod; import charbosses.bosses.Merchant.CharBossMerchant; import com.evacipated.cardcrawl.mod.stslib.actions.common.StunMonsterAction; import com.megacrit.cardcrawl.actions.AbstractGameAction; @@ -31,7 +30,7 @@ public void use(AbstractPlayer p, AbstractMonster m) { atb(new VFXAction(new WallopEffect(30, m.hb.cX, m.hb.cY))); dmg(m, AbstractGameAction.AttackEffect.BLUNT_LIGHT); - if (m.type != AbstractMonster.EnemyType.BOSS || m instanceof CharBossMerchant) { + if (m.type != AbstractMonster.EnemyType.BOSS && !(m instanceof CharBossMerchant)) { atb(new StunMonsterAction(m, p)); } else { dmg(m, AbstractGameAction.AttackEffect.BLUNT_HEAVY); diff --git a/src/main/java/champ/cards/Circumvent.java b/src/main/java/champ/cards/Circumvent.java index e5def7e19..a5e3e66da 100644 --- a/src/main/java/champ/cards/Circumvent.java +++ b/src/main/java/champ/cards/Circumvent.java @@ -1,5 +1,6 @@ package champ.cards; +import champ.ChampMod; import com.megacrit.cardcrawl.actions.common.DiscardAction; import com.megacrit.cardcrawl.actions.common.DrawCardAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; @@ -12,8 +13,10 @@ public class Circumvent extends AbstractChampCard { public Circumvent() { super(ID, 1, CardType.SKILL, CardRarity.COMMON, CardTarget.SELF); - baseBlock = 7; + baseBlock = 6; baseMagicNumber = magicNumber = 2; + tags.add(ChampMod.COMBODEFENSIVE); + tags.add(ChampMod.COMBO); postInit(); loadJokeCardImage(this, "Circumvent.png"); } @@ -21,7 +24,12 @@ public Circumvent() { public void use(AbstractPlayer p, AbstractMonster m) { blck(); atb(new DrawCardAction(magicNumber)); - atb(new DiscardAction(p, p, magicNumber, false)); + if (!dcombo()) atb(new DiscardAction(p, p, magicNumber, false)); + } + + @Override + public void triggerOnGlowCheck() { + glowColor = dcombo() ? GOLD_BORDER_GLOW_COLOR : BLUE_BORDER_GLOW_COLOR; } public void upp() { diff --git a/src/main/java/champ/cards/CrownThrow.java b/src/main/java/champ/cards/CrownThrow.java index 5e0395e19..b55de74d8 100644 --- a/src/main/java/champ/cards/CrownThrow.java +++ b/src/main/java/champ/cards/CrownThrow.java @@ -1,12 +1,9 @@ package champ.cards; -import basemod.devcommands.draw.Draw; import basemod.helpers.VfxBuilder; import champ.ChampMod; -import champ.powers.DoubleStyleThisTurnPower; import com.megacrit.cardcrawl.actions.common.DrawCardAction; -import com.megacrit.cardcrawl.actions.utility.DrawPileToHandAction; import downfall.util.TextureLoader; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; @@ -52,7 +49,7 @@ public void use(AbstractPlayer p, AbstractMonster m) { .rotate(-300F) .build()); - if (bcombo()) atb(new DrawPileToHandAction(this.magicNumber, CardType.ATTACK)); + if (bcombo()) atb(new DrawCardAction(magicNumber)); } @Override diff --git a/src/main/java/champ/cards/DancingMaster.java b/src/main/java/champ/cards/DancingMaster.java index 22a97b1e9..04cb01adb 100644 --- a/src/main/java/champ/cards/DancingMaster.java +++ b/src/main/java/champ/cards/DancingMaster.java @@ -1,11 +1,8 @@ package champ.cards; -import automaton.AutomatonMod; -import champ.ChampMod; import champ.powers.DancingMasterPower; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; -import sneckomod.SneckoMod; import static champ.ChampMod.loadJokeCardImage; diff --git a/src/main/java/champ/cards/DefensiveShout.java b/src/main/java/champ/cards/DefensiveShout.java index d7c492c17..a3f440d75 100644 --- a/src/main/java/champ/cards/DefensiveShout.java +++ b/src/main/java/champ/cards/DefensiveShout.java @@ -37,6 +37,6 @@ public void upp() { // tags.add(ChampMod.TECHNIQUE); // postInit(); // initializeDescription(); - upgradeMagicNumber(4); + upgradeMagicNumber(2); } } \ No newline at end of file diff --git a/src/main/java/champ/cards/DefensiveStyle.java b/src/main/java/champ/cards/DefensiveStyle.java index f58c918ce..e18b50c59 100644 --- a/src/main/java/champ/cards/DefensiveStyle.java +++ b/src/main/java/champ/cards/DefensiveStyle.java @@ -1,16 +1,12 @@ package champ.cards; -import champ.ChampMod; +import champ.powers.BerserkerStylePower; import champ.powers.DefensiveStylePower; -import champ.powers.FocusedDefPower; -import champ.powers.ResolvePower; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; import static champ.ChampMod.loadJokeCardImage; -import static champ.ChampMod.fatigue; - public class DefensiveStyle extends AbstractChampCard { public final static String ID = makeID("DefensiveStyle"); @@ -18,24 +14,20 @@ public class DefensiveStyle extends AbstractChampCard { //stupid intellij stuff power, self, uncommon public DefensiveStyle() { - super(ID, 1, CardType.POWER, CardRarity.UNCOMMON, CardTarget.SELF); - this.tags.add(ChampMod.OPENER); - this.tags.add(ChampMod.OPENERDEFENSIVE); - baseMagicNumber = magicNumber = 1; + super(ID, 2, CardType.POWER, CardRarity.UNCOMMON, CardTarget.SELF); + baseMagicNumber = magicNumber = 2; //myHpLossCost = 5; postInit(); loadJokeCardImage(this, "DefensiveStyle.png"); } public void use(AbstractPlayer p, AbstractMonster m) { - defenseOpen(); - // fatigue(5); + applyToSelf(new BerserkerStylePower(magicNumber)); applyToSelf(new DefensiveStylePower(magicNumber)); } public void upp() { - isInnate = true; - rawDescription = UPGRADE_DESCRIPTION; - initializeDescription(); + //upgradeMagicNumber(1); + upgradeBaseCost(1); } } \ No newline at end of file diff --git a/src/main/java/champ/cards/EnGarde.java b/src/main/java/champ/cards/EnGarde.java index efa526717..29523b4f4 100644 --- a/src/main/java/champ/cards/EnGarde.java +++ b/src/main/java/champ/cards/EnGarde.java @@ -1,13 +1,8 @@ package champ.cards; -import champ.ChampMod; -import champ.powers.CounterPower; import champ.powers.EnGardePower; -import com.megacrit.cardcrawl.actions.AbstractGameAction; -import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; -import sneckomod.SneckoMod; import static champ.ChampMod.loadJokeCardImage; diff --git a/src/main/java/champ/cards/EnchantCrown.java b/src/main/java/champ/cards/EnchantCrown.java index c170ccadb..f8b6233f1 100644 --- a/src/main/java/champ/cards/EnchantCrown.java +++ b/src/main/java/champ/cards/EnchantCrown.java @@ -1,6 +1,5 @@ package champ.cards; -import champ.powers.ResolvePower; import com.evacipated.cardcrawl.mod.stslib.actions.common.SelectCardsInHandAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; @@ -9,8 +8,6 @@ import static champ.ChampMod.loadJokeCardImage; -import static champ.ChampMod.fatigue; - public class EnchantCrown extends AbstractChampCard { public final static String ID = makeID("EnchantCrown"); diff --git a/src/main/java/champ/cards/EnchantShield.java b/src/main/java/champ/cards/EnchantShield.java index 668bc626d..8761e47b1 100644 --- a/src/main/java/champ/cards/EnchantShield.java +++ b/src/main/java/champ/cards/EnchantShield.java @@ -1,6 +1,5 @@ package champ.cards; -import champ.powers.ResolvePower; import com.evacipated.cardcrawl.mod.stslib.actions.common.SelectCardsInHandAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; @@ -9,8 +8,6 @@ import static champ.ChampMod.loadJokeCardImage; -import static champ.ChampMod.fatigue; - public class EnchantShield extends AbstractChampCard { public final static String ID = makeID("EnchantShield"); diff --git a/src/main/java/champ/cards/EnchantSword.java b/src/main/java/champ/cards/EnchantSword.java index f89fa39ec..9892825cc 100644 --- a/src/main/java/champ/cards/EnchantSword.java +++ b/src/main/java/champ/cards/EnchantSword.java @@ -1,6 +1,5 @@ package champ.cards; -import champ.powers.ResolvePower; import com.evacipated.cardcrawl.mod.stslib.actions.common.SelectCardsInHandAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; @@ -9,8 +8,6 @@ import static champ.ChampMod.loadJokeCardImage; -import static champ.ChampMod.fatigue; - public class EnchantSword extends AbstractChampCard { public final static String ID = makeID("EnchantSword"); diff --git a/src/main/java/champ/cards/Encircle.java b/src/main/java/champ/cards/Encircle.java index 85db1fa48..8569472e2 100644 --- a/src/main/java/champ/cards/Encircle.java +++ b/src/main/java/champ/cards/Encircle.java @@ -1,10 +1,11 @@ package champ.cards; -import champ.ChampMod; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.actions.common.DrawCardAction; import com.megacrit.cardcrawl.actions.utility.SFXAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.vfx.combat.WhirlwindEffect; @@ -16,7 +17,7 @@ public class Encircle extends AbstractChampCard { //stupid intellij stuff attack, all_enemy, uncommon - private static final int DAMAGE = 7; + private static final int DAMAGE = 5; public Encircle() { super(ID, 1, CardType.ATTACK, CardRarity.COMMON, CardTarget.ALL_ENEMY); @@ -24,6 +25,7 @@ public Encircle() { isMultiDamage = true; // tags.add(ChampMod.COMBO); // tags.add(ChampMod.COMBOBERSERKER); + baseMagicNumber = magicNumber = 1; postInit(); loadJokeCardImage(this, "Encircle.png"); } @@ -35,10 +37,11 @@ public void use(AbstractPlayer p, AbstractMonster m) { atb(new VFXAction(new WhirlwindEffect(), 0.0F)); allDmg(AbstractGameAction.AttackEffect.NONE); - for (AbstractMonster q : monsterList()) { - techique(); + for (AbstractMonster monster : AbstractDungeon.getMonsters().monsters) { + if ((!monster.isDeadOrEscaped())) { + atb(new DrawCardAction(magicNumber)); + } } - } public void upp() { diff --git a/src/main/java/champ/cards/Endure.java b/src/main/java/champ/cards/Endure.java index 451351018..3089ed5b1 100644 --- a/src/main/java/champ/cards/Endure.java +++ b/src/main/java/champ/cards/Endure.java @@ -1,5 +1,6 @@ package champ.cards; +import champ.ChampMod; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; @@ -12,13 +13,19 @@ public class Endure extends AbstractChampCard { public final static String ID = makeID("Endure"); public Endure() { - super(ID, 1, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); - baseBlock = block = 8; + super(ID, 1, CardType.SKILL, CardRarity.COMMON, CardTarget.SELF); + tags.add(ChampMod.OPENER); + + this.tags.add(ChampMod.OPENERDEFENSIVE); + baseBlock = block = 6; postInit(); + loadJokeCardImage(this, "Endure.png"); + } public void use(AbstractPlayer p, AbstractMonster m) { + defenseOpen(); blck(); } diff --git a/src/main/java/champ/cards/FaceSlap.java b/src/main/java/champ/cards/FaceSlap.java index c3aabc5d5..a3833fc85 100644 --- a/src/main/java/champ/cards/FaceSlap.java +++ b/src/main/java/champ/cards/FaceSlap.java @@ -2,11 +2,8 @@ import champ.ChampMod; import com.megacrit.cardcrawl.actions.AbstractGameAction; -import com.megacrit.cardcrawl.actions.common.DamageAction; -import com.megacrit.cardcrawl.cards.DamageInfo; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; -import com.megacrit.cardcrawl.powers.VulnerablePower; import static champ.ChampMod.loadJokeCardImage; diff --git a/src/main/java/champ/cards/FalseCounter.java b/src/main/java/champ/cards/FalseCounter.java index 57d85733f..a9b62600a 100644 --- a/src/main/java/champ/cards/FalseCounter.java +++ b/src/main/java/champ/cards/FalseCounter.java @@ -1,20 +1,12 @@ package champ.cards; import champ.ChampMod; -import champ.powers.CounterPower; import champ.powers.EnergizedDurationPower; -import champ.powers.FalseCounterPower; -import champ.stances.BerserkerStance; -import champ.stances.DefensiveStance; -import champ.stances.UltimateStance; import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.DrawCardNextTurnPower; -import com.megacrit.cardcrawl.powers.EnergizedPower; -import slimebound.powers.EnergizedSlimeboundPower; -import sneckomod.SneckoMod; import static champ.ChampMod.loadJokeCardImage; diff --git a/src/main/java/champ/cards/FanOfKnives.java b/src/main/java/champ/cards/FanOfKnives.java index 3c2fb1425..c0b9fdbf0 100644 --- a/src/main/java/champ/cards/FanOfKnives.java +++ b/src/main/java/champ/cards/FanOfKnives.java @@ -17,11 +17,11 @@ public class FanOfKnives extends AbstractChampCard { //stupid intellij stuff attack, enemy, common - private static final int DAMAGE = 5; + private static final int DAMAGE = 4; private static final int UPG_DAMAGE = 2; public FanOfKnives() { - super(ID, 1, CardType.ATTACK, CardRarity.COMMON, CardTarget.ALL_ENEMY); + super(ID, 1, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ALL_ENEMY); baseDamage = DAMAGE; isMultiDamage = true; // tags.add(ChampMod.OPENER); diff --git a/src/main/java/champ/cards/FlashCut.java b/src/main/java/champ/cards/FlashCut.java index b3b42e903..236349070 100644 --- a/src/main/java/champ/cards/FlashCut.java +++ b/src/main/java/champ/cards/FlashCut.java @@ -15,12 +15,12 @@ public class FlashCut extends AbstractChampCard { //stupid intellij stuff attack, enemy, common private static final int DAMAGE = 6; - private static final int UPG_DAMAGE = 2; + private static final int UPG_DAMAGE = 3; - private static final int BLOCK = 4; + private static final int BLOCK = 5; private static final int UPG_BLOCK = 2; - private static final int MAGIC = 4; + private static final int MAGIC = 5; private static final int UPG_MAGIC = 2; public FlashCut() { diff --git a/src/main/java/champ/cards/FocusedBerserking.java b/src/main/java/champ/cards/FocusedBerserking.java index 4260f14e5..68f299317 100644 --- a/src/main/java/champ/cards/FocusedBerserking.java +++ b/src/main/java/champ/cards/FocusedBerserking.java @@ -1,11 +1,8 @@ package champ.cards; import champ.ChampMod; -import champ.powers.BerserkerStylePower; -import champ.powers.FocusedBerPower; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; -import sneckomod.SneckoMod; import static champ.ChampMod.loadJokeCardImage; diff --git a/src/main/java/champ/cards/GladiatorStyle.java b/src/main/java/champ/cards/GladiatorStyle.java index d6ab08ef0..c47d44ce3 100644 --- a/src/main/java/champ/cards/GladiatorStyle.java +++ b/src/main/java/champ/cards/GladiatorStyle.java @@ -1,5 +1,6 @@ package champ.cards; +import champ.ChampMod; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.DexterityPower; @@ -12,17 +13,29 @@ public class GladiatorStyle extends AbstractChampCard { public GladiatorStyle() { super(ID, 1, CardType.POWER, CardRarity.UNCOMMON, CardTarget.SELF); - baseMagicNumber = magicNumber = 1; + baseMagicNumber = magicNumber = 2; + tags.add(ChampMod.COMBO); + tags.add(ChampMod.COMBODEFENSIVE); + tags.add(ChampMod.COMBOBERSERKER); postInit(); loadJokeCardImage(this, "GladiatorStyle.png"); } public void use(AbstractPlayer p, AbstractMonster m) { - applyToSelf(new StrengthPower(p, magicNumber)); - applyToSelf(new DexterityPower(p, magicNumber)); + if (dcombo()) { + applyToSelf(new DexterityPower(p, magicNumber)); + } + if (bcombo()){ + applyToSelf(new StrengthPower(p, magicNumber)); + } + } + + @Override + public void triggerOnGlowCheck() { + glowColor = (bcombo() || dcombo()) ? GOLD_BORDER_GLOW_COLOR : BLUE_BORDER_GLOW_COLOR; } public void upp() { - upgradeBaseCost(0); + upgradeMagicNumber(1); } } \ No newline at end of file diff --git a/src/main/java/champ/cards/GutPunch.java b/src/main/java/champ/cards/GutPunch.java index 309507a38..dddb0298e 100644 --- a/src/main/java/champ/cards/GutPunch.java +++ b/src/main/java/champ/cards/GutPunch.java @@ -29,7 +29,7 @@ public void use(AbstractPlayer p, AbstractMonster m) { //berserkOpen(); dmg(m, AbstractGameAction.AttackEffect.BLUNT_LIGHT); // fatigue(2); - if (bcombo() || dcombo()) { + if (bcombo() || dcombo() || !AbstractDungeon.player.stance.ID.equals(NeutralStance.STANCE_ID)) { triggerOpenerRelics(AbstractDungeon.player.stance.ID.equals(NeutralStance.STANCE_ID)); ultimateStance(); applyToSelf(new UltimateFormPower(1)); @@ -43,6 +43,6 @@ public void upp() { @Override public void triggerOnGlowCheck() { - glowColor = dcombo() || bcombo() ? GOLD_BORDER_GLOW_COLOR : BLUE_BORDER_GLOW_COLOR; + glowColor = dcombo() || bcombo() || !AbstractDungeon.player.stance.ID.equals(NeutralStance.STANCE_ID) ? GOLD_BORDER_GLOW_COLOR : BLUE_BORDER_GLOW_COLOR; } } \ No newline at end of file diff --git a/src/main/java/champ/cards/Haymaker.java b/src/main/java/champ/cards/Haymaker.java index e06762d35..350962e5f 100644 --- a/src/main/java/champ/cards/Haymaker.java +++ b/src/main/java/champ/cards/Haymaker.java @@ -4,8 +4,6 @@ import champ.actions.AnimateSuplexAction; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; -import com.megacrit.cardcrawl.core.AbstractCreature; -import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.monsters.AbstractMonster; import static champ.ChampMod.loadJokeCardImage; diff --git a/src/main/java/champ/cards/HeavySlash.java b/src/main/java/champ/cards/HeavySlash.java index 19f4f9bad..3f037ca4e 100644 --- a/src/main/java/champ/cards/HeavySlash.java +++ b/src/main/java/champ/cards/HeavySlash.java @@ -1,11 +1,11 @@ package champ.cards; +import champ.actions.VigorWallopAction; import com.megacrit.cardcrawl.actions.AbstractGameAction; -import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.AbstractCreature; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; -import com.megacrit.cardcrawl.unlock.UnlockTracker; import static champ.ChampMod.loadJokeCardImage; @@ -14,25 +14,16 @@ public class HeavySlash extends AbstractChampCard { public HeavySlash() { super(ID, 2, CardType.ATTACK, CardRarity.RARE, CardTarget.ENEMY); - baseDamage = 10; + baseDamage = 9; postInit(); loadJokeCardImage(this, "HeavySlash.png"); } public void use(AbstractPlayer p, AbstractMonster m) { - dmg(m, AbstractGameAction.AttackEffect.BLUNT_HEAVY); - AbstractCard c = AbstractDungeon.returnTrulyRandomCardInCombat(CardType.SKILL).makeCopy(); - c.isSeen = true; - UnlockTracker.markCardAsSeen(c.cardID); - c.modifyCostForCombat(-99); - if (upgraded) c.upgrade(); - makeInHand(c); + AbstractDungeon.actionManager.addToBottom((AbstractGameAction)new VigorWallopAction((AbstractCreature)m, (AbstractCreature)p, this.damage, this.damageTypeForTurn, AbstractGameAction.AttackEffect.SLASH_HEAVY)); } - public void upp() { upgradeDamage(3); - rawDescription = UPGRADE_DESCRIPTION; - initializeDescription(); } } \ No newline at end of file diff --git a/src/main/java/champ/cards/IgnorePain.java b/src/main/java/champ/cards/IgnorePain.java index 91a82ac49..302a4020c 100644 --- a/src/main/java/champ/cards/IgnorePain.java +++ b/src/main/java/champ/cards/IgnorePain.java @@ -2,12 +2,9 @@ import champ.ChampMod; import champ.powers.PushThroughPower; -import champ.powers.ResolvePower; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; -import static champ.ChampMod.fatigue; - import static champ.ChampMod.loadJokeCardImage; public class IgnorePain extends AbstractChampCard { @@ -19,8 +16,10 @@ public class IgnorePain extends AbstractChampCard { public IgnorePain() { super(ID, 2, CardType.SKILL, CardRarity.RARE, CardTarget.SELF); exhaust = true; + tags.add(ChampMod.FINISHER); // tags.add(ChampMod.TECHNIQUE); // myHpLossCost = 5; + // this.tags.add(SneckoMod.BANNEDFORSNECKO); postInit(); loadJokeCardImage(this, "IgnorePain.png"); @@ -30,6 +29,7 @@ public void use(AbstractPlayer p, AbstractMonster m) { // techique(); // fatigue(5); applyToSelf(new PushThroughPower(1)); + finisher(); } public void upp() { diff --git a/src/main/java/champ/cards/Improvising.java b/src/main/java/champ/cards/Improvising.java index de2817eba..29e823153 100644 --- a/src/main/java/champ/cards/Improvising.java +++ b/src/main/java/champ/cards/Improvising.java @@ -3,7 +3,6 @@ import champ.powers.ImprovisingPower; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; -import sneckomod.SneckoMod; import static champ.ChampMod.loadJokeCardImage; @@ -13,14 +12,15 @@ public class Improvising extends AbstractChampCard { public Improvising() { super(ID, 1, CardType.POWER, CardRarity.RARE, CardTarget.SELF); postInit(); + baseMagicNumber = magicNumber = 2; loadJokeCardImage(this, "Improvising.png"); } public void use(AbstractPlayer p, AbstractMonster m) { - applyToSelf(new ImprovisingPower()); + applyToSelf(new ImprovisingPower(magicNumber)); } public void upp() { - upgradeBaseCost(0); + upgradeMagicNumber(1); } } \ No newline at end of file diff --git a/src/main/java/champ/cards/Lariat.java b/src/main/java/champ/cards/Lariat.java index c5a9234b5..097b38bdb 100644 --- a/src/main/java/champ/cards/Lariat.java +++ b/src/main/java/champ/cards/Lariat.java @@ -1,6 +1,8 @@ package champ.cards; +import automaton.actions.EasyXCostAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.helpers.GameDictionary; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.ui.panels.EnergyPanel; @@ -11,7 +13,7 @@ public class Lariat extends AbstractChampCard { public Lariat() { super(ID, -1, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); - baseBlock = 7; + baseBlock = 5; postInit(); loadJokeCardImage(this, "Lariat.png"); } @@ -22,6 +24,19 @@ public void use(AbstractPlayer p, AbstractMonster m) { } addToBot(new com.megacrit.cardcrawl.actions.defect.ReinforcedBodyAction(p, this.block, this.freeToPlayOnce, this.energyOnUse)); + atb(new EasyXCostAction(this, (effect, params) -> { + for (int i = 0; i < effect + params[0]; i++) { + techique(); + } + return true; + }, 0)); + + } + + @Override + public void initializeDescription() { + super.initializeDescription(); + this.keywords.add(GameDictionary.STANCE.NAMES[0].toLowerCase()); } public void upp() { diff --git a/src/main/java/champ/cards/LastStand.java b/src/main/java/champ/cards/LastStand.java index c771aad22..79df8c419 100644 --- a/src/main/java/champ/cards/LastStand.java +++ b/src/main/java/champ/cards/LastStand.java @@ -5,7 +5,6 @@ import com.megacrit.cardcrawl.actions.animations.ShoutAction; import com.megacrit.cardcrawl.actions.animations.VFXAction; import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; -import com.megacrit.cardcrawl.actions.common.RemoveSpecificPowerAction; import com.megacrit.cardcrawl.actions.unique.RemoveDebuffsAction; import com.megacrit.cardcrawl.actions.utility.SFXAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; @@ -61,6 +60,7 @@ public String getLimitBreak() { } public void upp() { + //upgradeMagicNumber(3); upgradeBaseCost(0); } } \ No newline at end of file diff --git a/src/main/java/champ/cards/MurderStrike.java b/src/main/java/champ/cards/MurderStrike.java index 04890aee7..bd7541e51 100644 --- a/src/main/java/champ/cards/MurderStrike.java +++ b/src/main/java/champ/cards/MurderStrike.java @@ -1,6 +1,5 @@ package champ.cards; -import champ.ChampMod; import com.badlogic.gdx.graphics.Color; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.cards.AbstractCard; @@ -16,7 +15,7 @@ public class MurderStrike extends AbstractChampCard { //stupid intellij stuff attack, enemy, rare - private static final int DAMAGE = 8; + private static final int DAMAGE = 6; public MurderStrike() { super(ID, 2, CardType.ATTACK, CardRarity.RARE, CardTarget.ENEMY); @@ -48,6 +47,7 @@ public void use(AbstractPlayer p, AbstractMonster m) { } public void upp() { + upgradeDamage(3); upgradeMagicNumber(1); } } \ No newline at end of file diff --git a/src/main/java/champ/cards/Parry.java b/src/main/java/champ/cards/Parry.java index 8b49e4e17..f9386868c 100644 --- a/src/main/java/champ/cards/Parry.java +++ b/src/main/java/champ/cards/Parry.java @@ -14,8 +14,8 @@ public class Parry extends AbstractChampCard { public Parry() { super(ID, 2, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); - baseBlock = 6; - baseMagicNumber = magicNumber = 10; + baseBlock = 8; + baseMagicNumber = magicNumber = 4; AbstractCard c = new Riposte(); c.rawDescription = UPGRADE_DESCRIPTION; c.initializeDescription(); @@ -31,6 +31,7 @@ public void use(AbstractPlayer p, AbstractMonster m) { } public void upp() { - upgradeMagicNumber(6); + upgradeBlock(4); + upgradeMagicNumber(2); } } \ No newline at end of file diff --git a/src/main/java/champ/cards/PreciseThrust.java b/src/main/java/champ/cards/PreciseThrust.java index 98e67e41b..c801d6ac8 100644 --- a/src/main/java/champ/cards/PreciseThrust.java +++ b/src/main/java/champ/cards/PreciseThrust.java @@ -1,10 +1,7 @@ package champ.cards; import champ.ChampMod; -import champ.actions.ModifyDamageAndBlockAction; -import champ.actions.PreciseThrustAction; import com.megacrit.cardcrawl.actions.AbstractGameAction; -import com.megacrit.cardcrawl.actions.watcher.WallopAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; diff --git a/src/main/java/champ/cards/PreemptiveStrike.java b/src/main/java/champ/cards/PreemptiveStrike.java index 8e7562e54..f08d75b95 100644 --- a/src/main/java/champ/cards/PreemptiveStrike.java +++ b/src/main/java/champ/cards/PreemptiveStrike.java @@ -1,13 +1,13 @@ package champ.cards; +import champ.ChampMod; import champ.powers.CounterPower; -import champ.stances.DefensiveStance; -import champ.stances.UltimateStance; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.common.ReducePowerAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; import static champ.ChampMod.loadJokeCardImage; @@ -20,14 +20,17 @@ public PreemptiveStrike() { baseDamage = 0; isMultiDamage = true; tags.add(CardTags.STRIKE); + tags.add(ChampMod.COMBO); + tags.add(ChampMod.COMBODEFENSIVE); postInit(); + this.tags.add(SneckoMod.BANNEDFORSNECKO); loadJokeCardImage(this, "PreemptiveStrike.png"); } public void use(AbstractPlayer p, AbstractMonster m) { allDmg(AbstractGameAction.AttackEffect.SLASH_VERTICAL); if (p.hasPower(CounterPower.POWER_ID)) { - addToTop(new ReducePowerAction(p, p, CounterPower.POWER_ID, p.getPower(CounterPower.POWER_ID).amount / 2)); + if (!dcombo()) addToTop(new ReducePowerAction(p, p, CounterPower.POWER_ID, p.getPower(CounterPower.POWER_ID).amount / 2)); } } @@ -58,6 +61,11 @@ public void onMoveToDiscard() { this.initializeDescription(); } + @Override + public void triggerOnGlowCheck() { + glowColor = dcombo() ? GOLD_BORDER_GLOW_COLOR : BLUE_BORDER_GLOW_COLOR; + } + public void upp() { upgradeBaseCost(0); } diff --git a/src/main/java/champ/cards/RageSigil.java b/src/main/java/champ/cards/RageSigil.java index f759d0809..597a1b6c0 100644 --- a/src/main/java/champ/cards/RageSigil.java +++ b/src/main/java/champ/cards/RageSigil.java @@ -1,5 +1,6 @@ package champ.cards; +import champ.ChampMod; import com.megacrit.cardcrawl.actions.utility.ScryAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; @@ -14,11 +15,14 @@ public RageSigil() { super(ID, 0, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); baseBlock = 2; baseMagicNumber = magicNumber = 3; + tags.add(ChampMod.OPENER); + this.tags.add(ChampMod.OPENERDEFENSIVE); postInit(); loadJokeCardImage(this, "RageSigil.png"); } public void use(AbstractPlayer p, AbstractMonster m) { + defenseOpen(); blck(); atb(new ScryAction(magicNumber)); } diff --git a/src/main/java/champ/cards/RapidStrikes.java b/src/main/java/champ/cards/RapidStrikes.java index 1f5c3d0a0..bf01e39cc 100644 --- a/src/main/java/champ/cards/RapidStrikes.java +++ b/src/main/java/champ/cards/RapidStrikes.java @@ -18,7 +18,7 @@ public class RapidStrikes extends AbstractChampCard { private static final int DAMAGE = 4; public RapidStrikes() { - super(ID, 1, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); + super(ID, 1, CardType.ATTACK, CardRarity.COMMON, CardTarget.ENEMY); baseDamage = DAMAGE; tags.add(CardTags.STRIKE); baseMagicNumber = magicNumber = 2; diff --git a/src/main/java/champ/cards/RecklessLeap.java b/src/main/java/champ/cards/RecklessLeap.java index b1856e81d..95e2c39e1 100644 --- a/src/main/java/champ/cards/RecklessLeap.java +++ b/src/main/java/champ/cards/RecklessLeap.java @@ -1,12 +1,9 @@ package champ.cards; import champ.ChampMod; -import champ.stances.AbstractChampStance; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; -import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; -import com.megacrit.cardcrawl.powers.DexterityPower; import com.megacrit.cardcrawl.powers.StrengthPower; import static champ.ChampMod.loadJokeCardImage; @@ -17,30 +14,33 @@ public class RecklessLeap extends AbstractChampCard { //stupid intellij stuff attack, self_and_enemy, uncommon - private static final int DAMAGE = 18; - private static final int UPG_DAMAGE = 2; + private static final int DAMAGE = 6; + private static final int UPG_DAMAGE = 3; - private static final int MAGIC = 3; + private static final int MAGIC = 1; private static final int UPG_MAGIC = 1; public RecklessLeap() { - super(ID, 2, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); + super(ID, 1, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); baseDamage = DAMAGE; baseMagicNumber = magicNumber = MAGIC; //myHpLossCost = MAGIC; - tags.add(CardTags.STRIKE); + tags.add(ChampMod.OPENER); + this.tags.add(ChampMod.OPENERBERSERKER); exhaust = true; + tags.add(CardTags.STRIKE); loadJokeCardImage(this, "RecklessLeap.png"); } public void use(AbstractPlayer p, AbstractMonster m) { + berserkOpen(); dmg(m, AbstractGameAction.AttackEffect.SLASH_HEAVY); - applyToSelf(new StrengthPower(p, 2)); - applyToSelf(new DexterityPower(p, -1)); + applyToSelf(new StrengthPower(p, magicNumber)); } public void upp() { exhaust = false; + upgradeDamage(3); rawDescription = UPGRADE_DESCRIPTION; initializeDescription(); } diff --git a/src/main/java/champ/cards/Riposte.java b/src/main/java/champ/cards/Riposte.java index 19ec9fb0b..fc23ccce2 100644 --- a/src/main/java/champ/cards/Riposte.java +++ b/src/main/java/champ/cards/Riposte.java @@ -13,9 +13,10 @@ public class Riposte extends AbstractChampCard { public final static String ID = makeID("Riposte"); public Riposte() { - super(ID, 1, CardType.ATTACK, CardRarity.SPECIAL, CardTarget.ENEMY); + super(ID, 0, CardType.ATTACK, CardRarity.SPECIAL, CardTarget.ENEMY); baseDamage = 0; isEthereal = true; + tags.add(CardTags.STRIKE); exhaust = true; postInit(); loadJokeCardImage(this, "Riposte.png"); @@ -26,6 +27,6 @@ public void use(AbstractPlayer p, AbstractMonster m) { } public void upp() { - upgradeBaseCost(0); + upgradeDamage(3); } } \ No newline at end of file diff --git a/src/main/java/champ/cards/RisingSlash.java b/src/main/java/champ/cards/RisingSlash.java index d7d43ec4f..c5677807d 100644 --- a/src/main/java/champ/cards/RisingSlash.java +++ b/src/main/java/champ/cards/RisingSlash.java @@ -13,9 +13,10 @@ public class RisingSlash extends AbstractChampCard { public final static String ID = makeID("RisingSlash"); public RisingSlash() { - super(ID, 1, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); - baseDamage = 8; + super(ID, 1, CardType.ATTACK, CardRarity.COMMON, CardTarget.ENEMY); + baseDamage = 5; tags.add(CardTags.STRIKE); + this.selfRetain = true; loadJokeCardImage(this, "RisingSlash.png"); } @@ -34,6 +35,6 @@ public void triggerOnGlowCheck() { } public void upp() { - upgradeDamage(3); + upgradeDamage(2); } } \ No newline at end of file diff --git a/src/main/java/champ/cards/SetATrap.java b/src/main/java/champ/cards/SetATrap.java index 459118ac8..fac7441d1 100644 --- a/src/main/java/champ/cards/SetATrap.java +++ b/src/main/java/champ/cards/SetATrap.java @@ -1,19 +1,9 @@ package champ.cards; import champ.ChampMod; -import champ.powers.CounterPower; -import com.megacrit.cardcrawl.actions.AbstractGameAction; -import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; -import com.megacrit.cardcrawl.actions.common.DamageAction; -import com.megacrit.cardcrawl.cards.AbstractCard; -import com.megacrit.cardcrawl.cards.DamageInfo; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; -import com.megacrit.cardcrawl.powers.VulnerablePower; -import com.megacrit.cardcrawl.powers.WeakPower; -import downfall.util.CardIgnore; -import sneckomod.SneckoMod; import static champ.ChampMod.loadJokeCardImage; diff --git a/src/main/java/champ/cards/Shatter.java b/src/main/java/champ/cards/Shatter.java index a74d9a507..b93032bd3 100644 --- a/src/main/java/champ/cards/Shatter.java +++ b/src/main/java/champ/cards/Shatter.java @@ -2,11 +2,14 @@ import champ.ChampMod; import com.megacrit.cardcrawl.actions.AbstractGameAction; -import com.megacrit.cardcrawl.actions.common.RemoveAllBlockAction; -import com.megacrit.cardcrawl.actions.common.RemoveSpecificPowerAction; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; -import com.megacrit.cardcrawl.powers.ArtifactPower; +import com.megacrit.cardcrawl.powers.VulnerablePower; +import com.megacrit.cardcrawl.powers.WeakPower; +import com.megacrit.cardcrawl.stances.NeutralStance; +import hermit.cards.AbstractDynamicCard; import static champ.ChampMod.loadJokeCardImage; @@ -17,24 +20,39 @@ public class Shatter extends AbstractChampCard { //stupid intellij stuff skill, self, uncommon public Shatter() { - super(ID, 1, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); - baseDamage = 10; + super(ID, 2, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); + baseDamage = 14; baseMagicNumber = magicNumber = 1; postInit(); + //tags.add(CardTags.STRIKE); + tags.add(ChampMod.COMBO); + tags.add(ChampMod.COMBODEFENSIVE); + tags.add(ChampMod.COMBOBERSERKER); loadJokeCardImage(this, "Shatter.png"); } public void use(AbstractPlayer p, AbstractMonster m) { - // techique(); - atb(new RemoveAllBlockAction(m, p)); - if (upgraded) atb(new RemoveSpecificPowerAction(m, p, ArtifactPower.POWER_ID)); dmg(m, AbstractGameAction.AttackEffect.SLASH_HEAVY); + if (bcombo() || dcombo() || !AbstractDungeon.player.stance.ID.equals(NeutralStance.STANCE_ID)) { + this.addToBot(new ApplyPowerAction(m, p, new WeakPower(m, this.magicNumber, false), this.magicNumber)); + this.addToBot(new ApplyPowerAction(m, p, new VulnerablePower(m, this.magicNumber, false), this.magicNumber)); + } + } + @Override + public void triggerOnGlowCheck() { // it glows now. + if (bcombo() || dcombo() || !AbstractDungeon.player.stance.ID.equals(NeutralStance.STANCE_ID)) { + this.glowColor = AbstractDynamicCard.GOLD_BORDER_GLOW_COLOR.cpy(); + } else { + this.glowColor = AbstractDynamicCard.BLUE_BORDER_GLOW_COLOR.cpy(); + } } + public void upp() { + upgradeName(); upgradeDamage(2); - rawDescription = UPGRADE_DESCRIPTION; - initializeDescription(); + upgradeMagicNumber(1); } + } \ No newline at end of file diff --git a/src/main/java/champ/cards/ShieldSigil.java b/src/main/java/champ/cards/ShieldSigil.java index 7a7156a96..7e1908d94 100644 --- a/src/main/java/champ/cards/ShieldSigil.java +++ b/src/main/java/champ/cards/ShieldSigil.java @@ -1,6 +1,5 @@ package champ.cards; -import champ.ChampMod; import champ.powers.DoubleStyleThisTurnPower; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; diff --git a/src/main/java/champ/cards/ShieldThrow.java b/src/main/java/champ/cards/ShieldThrow.java index 491c1ae83..e8cf1d9d6 100644 --- a/src/main/java/champ/cards/ShieldThrow.java +++ b/src/main/java/champ/cards/ShieldThrow.java @@ -2,13 +2,11 @@ import champ.ChampMod; import champ.powers.NoBlockNextTurnPower; +import com.badlogic.gdx.graphics.Color; import com.megacrit.cardcrawl.actions.AbstractGameAction; -import com.megacrit.cardcrawl.actions.common.ReducePowerAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; -import com.megacrit.cardcrawl.powers.FrailPower; -import com.megacrit.cardcrawl.powers.WeakPower; import static champ.ChampMod.loadJokeCardImage; @@ -19,9 +17,8 @@ public class ShieldThrow extends AbstractChampCard { //stupid intellij stuff attack, enemy, rare public ShieldThrow() { - super(ID, 1, CardType.ATTACK, CardRarity.RARE, CardTarget.ENEMY); - // tags.add(ChampMod.FINISHER); - baseBlock = block = 0; + super(ID, 2, CardType.ATTACK, CardRarity.RARE, CardTarget.ENEMY); + // baseBlock = block = 0; baseMagicNumber = magicNumber = 2; tags.add(ChampMod.COMBODEFENSIVE); tags.add(ChampMod.COMBO); @@ -30,8 +27,7 @@ public ShieldThrow() { } public void use(AbstractPlayer p, AbstractMonster m) { - //finisher(); - blck(); + // blck(); this.baseDamage = p.currentBlock; this.calculateCardDamage(m); dmg(m, AbstractGameAction.AttackEffect.SMASH); @@ -39,14 +35,14 @@ public void use(AbstractPlayer p, AbstractMonster m) { this.rawDescription = cardStrings.DESCRIPTION; this.initializeDescription(); - if (!dcombo()) applyToSelf(new FrailPower(p,2, false)); + if (!dcombo()) applyToSelf(new NoBlockNextTurnPower(1)); // if (bcombo()) atb(new ReducePowerAction(p,p,FrailPower.POWER_ID,2)); - // finisher(); + // finisher(); } @Override public void triggerOnGlowCheck() { - glowColor = dcombo() ? GOLD_BORDER_GLOW_COLOR : BLUE_BORDER_GLOW_COLOR; + glowColor = dcombo() ? GOLD_BORDER_GLOW_COLOR : Color.RED.cpy(); } public void applyPowers() { @@ -71,6 +67,6 @@ public void calculateCardDamage(AbstractMonster mo) { } public void upp() { - upgradeBaseCost(0); + upgradeBaseCost(1); } } \ No newline at end of file diff --git a/src/main/java/champ/cards/StanceDance.java b/src/main/java/champ/cards/StanceDance.java index 1bd9cbc81..02bad98b8 100644 --- a/src/main/java/champ/cards/StanceDance.java +++ b/src/main/java/champ/cards/StanceDance.java @@ -3,15 +3,11 @@ import champ.ChampMod; import champ.stances.BerserkerStance; import champ.stances.DefensiveStance; -import champ.stances.UltimateStance; import champ.vfx.StanceDanceEffect; import com.megacrit.cardcrawl.actions.animations.VFXAction; -import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; -import com.megacrit.cardcrawl.helpers.CardLibrary; import com.megacrit.cardcrawl.monsters.AbstractMonster; -import com.megacrit.cardcrawl.unlock.UnlockTracker; import downfall.actions.OctoChoiceAction; import downfall.cards.OctoChoiceCard; import downfall.util.OctopusCard; @@ -33,11 +29,8 @@ public StanceDance() { } public void use(AbstractPlayer p, AbstractMonster m) { - - //if (upgraded) techique(); atb(new OctoChoiceAction(m, this)); postInit(); - } public ArrayList choiceList() { @@ -50,31 +43,16 @@ public ArrayList choiceList() { public void doChoiceStuff(AbstractMonster m, OctoChoiceCard card) { switch (card.cardID) { case "octo:OctoBerserk": - if (upgraded || AbstractDungeon.player.stance.ID.equals(BerserkerStance.STANCE_ID)|| AbstractDungeon.player.stance.ID.equals(champ.stances.UltimateStance.STANCE_ID)) { - ArrayList rCardList = new ArrayList(); - for (AbstractCard t : CardLibrary.getAllCards()) { - if (!UnlockTracker.isCardLocked(t.cardID) && t.hasTag(ChampMod.COMBOBERSERKER) &&!t.hasTag(CardTags.HEALING)) - rCardList.add(t); - } - AbstractCard r = rCardList.get(AbstractDungeon.cardRandomRng.random(rCardList.size() - 1)); - UnlockTracker.markCardAsSeen(r.cardID); - makeInHand(r); - } ChampMod.berserkOpen(); - + BerserkerStance bs = new BerserkerStance(); + bs.techique(); + if (upgraded) bs.techique(); break; case "octo:OctoDefense": - if (upgraded || AbstractDungeon.player.stance.ID.equals(DefensiveStance.STANCE_ID) || AbstractDungeon.player.stance.ID.equals(UltimateStance.STANCE_ID)) { - ArrayList rCardList = new ArrayList(); - for (AbstractCard t : CardLibrary.getAllCards()) { - if (!UnlockTracker.isCardLocked(t.cardID) && t.hasTag(ChampMod.COMBODEFENSIVE) &&!t.hasTag(CardTags.HEALING)) - rCardList.add(t); - } - AbstractCard r = rCardList.get(AbstractDungeon.cardRandomRng.random(rCardList.size() - 1)); - UnlockTracker.markCardAsSeen(r.cardID); - makeInHand(r); - } ChampMod.defenseOpen(); + DefensiveStance ds = new DefensiveStance(); + ds.techique(); + if (upgraded) ds.techique(); break; } diff --git a/src/main/java/champ/cards/StanceDanceCrown.java b/src/main/java/champ/cards/StanceDanceCrown.java new file mode 100644 index 000000000..6be5e1fc3 --- /dev/null +++ b/src/main/java/champ/cards/StanceDanceCrown.java @@ -0,0 +1,35 @@ +package champ.cards; + +import basemod.patches.com.megacrit.cardcrawl.screens.compendium.CardLibraryScreen.NoCompendium; +import champ.ChampMod; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import static champ.ChampMod.loadJokeCardImage; +@NoCompendium +public class StanceDanceCrown extends AbstractChampCard { + + public final static String ID = makeID("StanceDanceCrown"); + + //stupid intellij stuff SKILL, SELF, UNCOMMON + + public StanceDanceCrown() { + super(ID, 0, CardType.SKILL, CardRarity.SPECIAL, CardTarget.SELF); + tags.add(ChampMod.OPENER); + tags.add(ChampMod.OPENERNOTIN); + loadJokeCardImage(this, "StanceDance.png"); + this.exhaust = true; + this.selfRetain = true; + } + + public void use(AbstractPlayer p, AbstractMonster m) { + AbstractDungeon.player.useJumpAnimation(); + } + + public void upp() { + rawDescription = UPGRADE_DESCRIPTION; + initializeDescription(); + this.exhaust = false; + } +} \ No newline at end of file diff --git a/src/main/java/champ/cards/SteelEdge.java b/src/main/java/champ/cards/SteelEdge.java index f7d79830a..397181c29 100644 --- a/src/main/java/champ/cards/SteelEdge.java +++ b/src/main/java/champ/cards/SteelEdge.java @@ -3,8 +3,12 @@ import automaton.actions.EasyXCostAction; import champ.ChampMod; import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.animations.VFXAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.vfx.combat.GoldenSlashEffect; import static champ.ChampMod.loadJokeCardImage; @@ -13,17 +17,22 @@ public class SteelEdge extends AbstractChampCard { public SteelEdge() { super(ID, -1, CardType.ATTACK, CardRarity.RARE, CardTarget.ENEMY); - baseDamage = 8; + baseDamage = 6; this.tags.add(ChampMod.FINISHER); postInit(); loadJokeCardImage(this, "SteelEdge.png"); } - public void use(AbstractPlayer p, AbstractMonster m) { + AbstractDungeon.player.useJumpAnimation(); + atb(new EasyXCostAction(this, (effect, params) -> { for (int i = 0; i < effect; i++) { - dmg(m, AbstractGameAction.AttackEffect.SLASH_VERTICAL); + atb(new VFXAction(new GoldenSlashEffect(m.hb.cX + 30.0F * Settings.scale, m.hb.cY, true), 0.1F)); + dmg(m, AbstractGameAction.AttackEffect.NONE); + if ((i < effect-1) && (effect !=0)){ + finisher(true); + } } return true; })); diff --git a/src/main/java/champ/cards/StrikeOfGenius.java b/src/main/java/champ/cards/StrikeOfGenius.java index 58c9e93c6..94d1144bd 100644 --- a/src/main/java/champ/cards/StrikeOfGenius.java +++ b/src/main/java/champ/cards/StrikeOfGenius.java @@ -4,7 +4,6 @@ import champ.powers.StrikeOfGeniusUpgradedPower; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; -import sneckomod.SneckoMod; import static champ.ChampMod.loadJokeCardImage; diff --git a/src/main/java/champ/cards/SwordSigil.java b/src/main/java/champ/cards/SwordSigil.java index 9acaaa876..b0fa798cd 100644 --- a/src/main/java/champ/cards/SwordSigil.java +++ b/src/main/java/champ/cards/SwordSigil.java @@ -1,7 +1,7 @@ package champ.cards; -import champ.ChampMod; import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.helpers.GameDictionary; import com.megacrit.cardcrawl.monsters.AbstractMonster; import static champ.ChampMod.loadJokeCardImage; @@ -11,9 +11,9 @@ public class SwordSigil extends AbstractChampCard { public final static String ID = makeID("SwordSigil"); public SwordSigil() { - super(ID, 0, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); - baseMagicNumber = magicNumber = 4; - this.exhaust = true; + super(ID, 1, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); + baseMagicNumber = magicNumber = 3; + // this.exhaust = true; loadJokeCardImage(this, "SwordSigil.png"); } @@ -23,8 +23,15 @@ public void use(AbstractPlayer p, AbstractMonster m) { } } + @Override + public void initializeDescription() { + super.initializeDescription(); + this.keywords.add(GameDictionary.STANCE.NAMES[0].toLowerCase()); + } + public void upp() { - upgradeMagicNumber(2); + upgradeMagicNumber(1); // upgradeCool(2); } + } \ No newline at end of file diff --git a/src/main/java/champ/cards/SwordThrow.java b/src/main/java/champ/cards/SwordThrow.java index 6b910e332..a7deeb25a 100644 --- a/src/main/java/champ/cards/SwordThrow.java +++ b/src/main/java/champ/cards/SwordThrow.java @@ -2,11 +2,10 @@ import champ.ChampMod; import champ.powers.EntangleNextTurnPower; +import com.badlogic.gdx.graphics.Color; import com.megacrit.cardcrawl.actions.AbstractGameAction; -import com.megacrit.cardcrawl.actions.common.ReducePowerAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; -import com.megacrit.cardcrawl.powers.WeakPower; import static champ.ChampMod.loadJokeCardImage; @@ -15,7 +14,7 @@ public class SwordThrow extends AbstractChampCard { public SwordThrow() { super(ID, 1, CardType.ATTACK, CardRarity.RARE, CardTarget.ENEMY); - baseDamage = 8; + baseDamage = 9; baseMagicNumber = magicNumber = 2; tags.add(ChampMod.COMBOBERSERKER); tags.add(ChampMod.COMBO); @@ -25,16 +24,15 @@ public SwordThrow() { public void use(AbstractPlayer p, AbstractMonster m) { for (int i = 0; i < magicNumber; i++) dmg(m, AbstractGameAction.AttackEffect.SMASH); - if (!bcombo()) applyToSelf(new WeakPower(p,2, false)); - // if (bcombo()) atb(new ReducePowerAction(p,p,WeakPower.POWER_ID,2)); + if (!bcombo()) applyToSelf(new EntangleNextTurnPower(1)); } @Override public void triggerOnGlowCheck() { - glowColor = bcombo() ? GOLD_BORDER_GLOW_COLOR : BLUE_BORDER_GLOW_COLOR; + glowColor = bcombo() ? GOLD_BORDER_GLOW_COLOR : Color.RED.cpy(); } public void upp() { - upgradeDamage(3); + upgradeDamage(4); } } \ No newline at end of file diff --git a/src/main/java/champ/cards/TornadoPunch.java b/src/main/java/champ/cards/TornadoPunch.java index cd940cea1..d10c986ca 100644 --- a/src/main/java/champ/cards/TornadoPunch.java +++ b/src/main/java/champ/cards/TornadoPunch.java @@ -1,15 +1,12 @@ package champ.cards; import champ.ChampMod; -import champ.powers.CounterPower; import com.megacrit.cardcrawl.actions.AbstractGameAction; -import com.megacrit.cardcrawl.actions.animations.VFXAction; -import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; -import com.megacrit.cardcrawl.actions.common.GainBlockAction; -import com.megacrit.cardcrawl.actions.utility.SFXAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; -import com.megacrit.cardcrawl.vfx.combat.WhirlwindEffect; + +import java.util.Iterator; import static champ.ChampMod.loadJokeCardImage; @@ -43,11 +40,17 @@ public TornadoPunch() { public void use(AbstractPlayer p, AbstractMonster m) { //if (upgraded) techique(); allDmg(AbstractGameAction.AttackEffect.BLUNT_HEAVY); - if (dcombo()) - for (AbstractMonster q : monsterList()) { - //atb(new ApplyPowerAction(p, p, new CounterPower(magicNumber), magicNumber)); - atb(new GainBlockAction(p, block)); + if (dcombo()){ + Iterator var2 = AbstractDungeon.getCurrRoom().monsters.monsters.iterator(); + + while (var2.hasNext()) { + AbstractMonster mo = (AbstractMonster) var2.next(); + if (!mo.isDeadOrEscaped()) { + blck(); + } } + } + } @Override diff --git a/src/main/java/champ/cards/TripleStrike.java b/src/main/java/champ/cards/TripleStrike.java index 4023d4cd3..7efd1d015 100644 --- a/src/main/java/champ/cards/TripleStrike.java +++ b/src/main/java/champ/cards/TripleStrike.java @@ -6,6 +6,10 @@ import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import expansioncontent.actions.EchoACardAction; +import expansioncontent.cardmods.EtherealMod; +import expansioncontent.cardmods.ExhaustMod; +import expansioncontent.cardmods.PropertiesMod; import static champ.ChampMod.loadJokeCardImage; @@ -21,9 +25,13 @@ public class TripleStrike extends AbstractChampCard { public TripleStrike() { super(ID, 2, CardType.ATTACK, CardRarity.RARE, CardTarget.ENEMY); baseDamage = DAMAGE; - exhaust = true; + // exhaust = true; AbstractCard r = new Strike(); r.updateCost(-999); + PropertiesMod mod = new PropertiesMod(PropertiesMod.supportedProperties.ECHO, false); + CardModifierManager.addModifier(r, mod); + CardModifierManager.addModifier(r, new EtherealMod()); + CardModifierManager.addModifier(r, new ExhaustMod()); CardModifierManager.addModifier(r, new TechniqueMod()); cardsToPreview = r; // CardModifierManager.addModifier(this, new TechniqueMod()); @@ -42,7 +50,8 @@ public void use(AbstractPlayer p, AbstractMonster m) { } r.updateCost(-999); CardModifierManager.addModifier(r, new TechniqueMod()); - makeInHand(r, 2); + addToBot(new EchoACardAction(r, true)); + addToBot(new EchoACardAction(r, true)); } public void upp() { diff --git a/src/main/java/champ/cards/UltimateStance.java b/src/main/java/champ/cards/UltimateStance.java index a6fd2c279..89d92fa3e 100644 --- a/src/main/java/champ/cards/UltimateStance.java +++ b/src/main/java/champ/cards/UltimateStance.java @@ -1,16 +1,8 @@ package champ.cards; -import basemod.helpers.CardModifierManager; -import champ.ChampMod; import champ.powers.UltimateFormNextTurnPower; -import champ.powers.UltimateFormPower; -import champ.stances.BerserkerStance; -import champ.stances.DefensiveStance; -import champ.util.TechniqueMod; import com.megacrit.cardcrawl.characters.AbstractPlayer; -import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; -import com.megacrit.cardcrawl.stances.NeutralStance; import static champ.ChampMod.loadJokeCardImage; diff --git a/src/main/java/champ/cards/VampiricStrike.java b/src/main/java/champ/cards/VampiricStrike.java index f2f14d10a..dff624de7 100644 --- a/src/main/java/champ/cards/VampiricStrike.java +++ b/src/main/java/champ/cards/VampiricStrike.java @@ -1,8 +1,5 @@ package champ.cards; -import champ.ChampMod; -import com.megacrit.cardcrawl.actions.AbstractGameAction; -import com.megacrit.cardcrawl.actions.common.GainEnergyAction; import com.megacrit.cardcrawl.actions.watcher.WallopAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; @@ -23,6 +20,7 @@ public VampiricStrike() { // tags.add(ChampMod.COMBO); // tags.add(ChampMod.COMBOBERSERKER); // tags.add(ChampMod.COMBODEFENSIVE); + tags.add(CardTags.STRIKE); postInit(); loadJokeCardImage(this, "VampiricStrike.png"); } diff --git a/src/main/java/champ/cards/ViciousMockery.java b/src/main/java/champ/cards/ViciousMockery.java index 8e9bee053..5408b339f 100644 --- a/src/main/java/champ/cards/ViciousMockery.java +++ b/src/main/java/champ/cards/ViciousMockery.java @@ -5,13 +5,9 @@ import com.megacrit.cardcrawl.actions.animations.TalkAction; import com.megacrit.cardcrawl.actions.utility.SFXAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.helpers.GameDictionary; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.monsters.city.Champ; -import com.megacrit.cardcrawl.powers.DexterityPower; -import com.megacrit.cardcrawl.powers.LoseDexterityPower; -import com.megacrit.cardcrawl.powers.LoseStrengthPower; -import com.megacrit.cardcrawl.powers.StrengthPower; -import com.megacrit.cardcrawl.powers.watcher.VigorPower; import static champ.ChampMod.loadJokeCardImage; @@ -22,7 +18,7 @@ public class ViciousMockery extends AbstractChampCard { public ViciousMockery() { super(ID, 1, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.ENEMY); - baseMagicNumber = magicNumber = 5; + baseMagicNumber = magicNumber = 4; baseDownfallMagic = downfallMagic = 1; postInit(); loadJokeCardImage(this, "ViciousMockery.png"); @@ -31,6 +27,7 @@ public ViciousMockery() { public void use(AbstractPlayer p, AbstractMonster m) { ChampMod.vigor(magicNumber); applyToEnemy(m, autoWeak(m, downfallMagic)); + techique(); atb(new SFXAction("VO_CHAMP_2A")); atb(new TalkAction(true, getTaunt(), 2.0F, 2.0F)); } @@ -44,8 +41,14 @@ private String getTaunt() { return derp.get(MathUtils.random(derp.size() - 1)); } + @Override + public void initializeDescription() { + super.initializeDescription(); + this.keywords.add(GameDictionary.STANCE.NAMES[0].toLowerCase()); + } + public void upp() { - upgradeMagicNumber(1); + //upgradeMagicNumber(1); upgradeDownfall(1); } } \ No newline at end of file diff --git a/src/main/java/champ/cards/WindUp.java b/src/main/java/champ/cards/WindUp.java index b6d7cd811..10bf05458 100644 --- a/src/main/java/champ/cards/WindUp.java +++ b/src/main/java/champ/cards/WindUp.java @@ -1,26 +1,10 @@ package champ.cards; import champ.ChampMod; -import champ.stances.BerserkerStance; -import champ.stances.DefensiveStance; -import champ.stances.UltimateStance; -import champ.vfx.StanceDanceEffect; -import com.badlogic.gdx.math.MathUtils; import com.evacipated.cardcrawl.mod.stslib.actions.common.FetchAction; -import com.megacrit.cardcrawl.actions.animations.TalkAction; -import com.megacrit.cardcrawl.actions.animations.VFXAction; -import com.megacrit.cardcrawl.actions.utility.SFXAction; -import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; -import com.megacrit.cardcrawl.helpers.CardLibrary; import com.megacrit.cardcrawl.monsters.AbstractMonster; -import com.megacrit.cardcrawl.monsters.city.Champ; -import com.megacrit.cardcrawl.powers.DexterityPower; -import com.megacrit.cardcrawl.powers.LoseDexterityPower; -import com.megacrit.cardcrawl.powers.LoseStrengthPower; -import com.megacrit.cardcrawl.powers.StrengthPower; -import com.megacrit.cardcrawl.unlock.UnlockTracker; import downfall.actions.OctoChoiceAction; import downfall.cards.OctoChoiceCard; import downfall.util.OctopusCard; diff --git a/src/main/java/champ/events/BackToBasicsChamp.java b/src/main/java/champ/events/BackToBasicsChamp.java index 6e96528df..34896f4e1 100644 --- a/src/main/java/champ/events/BackToBasicsChamp.java +++ b/src/main/java/champ/events/BackToBasicsChamp.java @@ -1,34 +1,20 @@ package champ.events; -import basemod.helpers.BaseModCardTags; import basemod.helpers.CardModifierManager; import champ.ChampMod; import champ.util.TechniqueMod; import com.badlogic.gdx.math.MathUtils; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.cards.CardGroup; -import com.megacrit.cardcrawl.cards.blue.Defend_Blue; -import com.megacrit.cardcrawl.cards.blue.Strike_Blue; -import com.megacrit.cardcrawl.cards.green.Defend_Green; -import com.megacrit.cardcrawl.cards.green.Strike_Green; -import com.megacrit.cardcrawl.cards.red.Defend_Red; -import com.megacrit.cardcrawl.cards.red.Strike_Red; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.events.AbstractImageEvent; -import com.megacrit.cardcrawl.helpers.CardLibrary; import com.megacrit.cardcrawl.localization.EventStrings; import com.megacrit.cardcrawl.vfx.cardManip.PurgeCardEffect; -import com.megacrit.cardcrawl.vfx.cardManip.ShowCardAndObtainEffect; import com.megacrit.cardcrawl.vfx.cardManip.ShowCardBrieflyEffect; -import sneckomod.cards.Defend; -import sneckomod.cards.Strike; -import sneckomod.cards.unknowns.AbstractUnknownCard; import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; import java.util.List; public class BackToBasicsChamp extends AbstractImageEvent { @@ -73,10 +59,10 @@ public BackToBasicsChamp() { cardsToRemove = new ArrayList<>(); for (AbstractCard c : AbstractDungeon.player.masterDeck.group) { - if (c.hasTag(BaseModCardTags.BASIC_STRIKE)) { + if (c.hasTag(AbstractCard.CardTags.STARTER_STRIKE)) { cardsToRemove.add(c); } - if (c.hasTag(BaseModCardTags.BASIC_DEFEND)) { + if (c.hasTag(AbstractCard.CardTags.STARTER_DEFEND)) { cardsToRemove.add(c); } } diff --git a/src/main/java/champ/events/Colosseum_Evil_Champ.java b/src/main/java/champ/events/Colosseum_Evil_Champ.java index 25a5406e5..16e5a5133 100644 --- a/src/main/java/champ/events/Colosseum_Evil_Champ.java +++ b/src/main/java/champ/events/Colosseum_Evil_Champ.java @@ -14,7 +14,6 @@ import com.megacrit.cardcrawl.localization.EventStrings; import com.megacrit.cardcrawl.relics.AbstractRelic; import downfall.downfallMod; -import slimebound.SlimeboundMod; public class Colosseum_Evil_Champ extends AbstractImageEvent { public static final String ID = "champ:Colosseum"; diff --git a/src/main/java/champ/events/Library_Champ.java b/src/main/java/champ/events/Library_Champ.java index 96e34f0d6..f8dda2601 100644 --- a/src/main/java/champ/events/Library_Champ.java +++ b/src/main/java/champ/events/Library_Champ.java @@ -5,7 +5,6 @@ import champ.relics.DefensiveTrainingManual; import champ.relics.FightingForDummies; import champ.relics.GladiatorsBookOfMartialProwess; -import champ.stances.DefensiveStance; import com.badlogic.gdx.math.MathUtils; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.cards.CardGroup; @@ -20,7 +19,6 @@ import com.megacrit.cardcrawl.unlock.UnlockTracker; import com.megacrit.cardcrawl.vfx.cardManip.ShowCardAndObtainEffect; import downfall.downfallMod; -import downfall.events.FaceTrader_Evil; import java.util.ArrayList; import java.util.Collections; diff --git a/src/main/java/champ/events/MinorLeagueArena.java b/src/main/java/champ/events/MinorLeagueArena.java index b85c9876b..1b8fdf138 100644 --- a/src/main/java/champ/events/MinorLeagueArena.java +++ b/src/main/java/champ/events/MinorLeagueArena.java @@ -1,19 +1,14 @@ package champ.events; - -import champ.relics.BlackKnightsHelmet; -import champ.relics.ChampionCrown; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.events.AbstractImageEvent; import com.megacrit.cardcrawl.helpers.MonsterHelper; import com.megacrit.cardcrawl.localization.EventStrings; -import com.megacrit.cardcrawl.relics.AbstractRelic; import com.megacrit.cardcrawl.relics.ChampionsBelt; import com.megacrit.cardcrawl.relics.CloakClasp; -import com.megacrit.cardcrawl.relics.WristBlade; import downfall.downfallMod; -import slimebound.SlimeboundMod; +import hermit.relics.Horseshoe; public class MinorLeagueArena extends AbstractImageEvent { public static final String ID = "champ:MinorLeagueArena"; @@ -38,7 +33,7 @@ public MinorLeagueArena() { this.imageEventText.clearAllDialogs(); this.imageEventText.setDialogOption(OPTIONS[0], new CloakClasp()); this.imageEventText.setDialogOption(OPTIONS[1], new ChampionsBelt()); - this.imageEventText.setDialogOption(OPTIONS[2], new WristBlade()); + this.imageEventText.setDialogOption(OPTIONS[2], new Horseshoe()); this.imageEventText.setDialogOption(OPTIONS[3]); } @@ -53,6 +48,7 @@ protected void buttonEffect(int buttonPressed) { AbstractDungeon.getCurrRoom().monsters = MonsterHelper.getEncounter("Centurion and Healer"); AbstractDungeon.getCurrRoom().rewards.clear(); AbstractDungeon.getCurrRoom().addRelicToRewards(new CloakClasp()); + downfallMod.removeAnyRelicFromPools("CloakClasp"); AbstractDungeon.getCurrRoom().addGoldToRewards(100); AbstractDungeon.getCurrRoom().eliteTrigger = true; AbstractDungeon.lastCombatMetricKey = "Centurion and Healer"; @@ -68,6 +64,7 @@ protected void buttonEffect(int buttonPressed) { AbstractDungeon.getCurrRoom().monsters = MonsterHelper.getEncounter("Gremlin Nob"); AbstractDungeon.getCurrRoom().rewards.clear(); AbstractDungeon.getCurrRoom().addRelicToRewards(new ChampionsBelt()); + downfallMod.removeAnyRelicFromPools("Champion Belt"); AbstractDungeon.getCurrRoom().addGoldToRewards(100); AbstractDungeon.getCurrRoom().eliteTrigger = true; AbstractDungeon.lastCombatMetricKey = "Gremlin Nob"; @@ -80,7 +77,8 @@ protected void buttonEffect(int buttonPressed) { //SlimeboundMod.logger.info("fight"); AbstractDungeon.getCurrRoom().monsters = MonsterHelper.getEncounter("Colosseum Slavers"); AbstractDungeon.getCurrRoom().rewards.clear(); - AbstractDungeon.getCurrRoom().addRelicToRewards(new WristBlade()); + AbstractDungeon.getCurrRoom().addRelicToRewards(new Horseshoe()); + downfallMod.removeAnyRelicFromPools(Horseshoe.ID); AbstractDungeon.getCurrRoom().addGoldToRewards(100); AbstractDungeon.getCurrRoom().eliteTrigger = true; AbstractDungeon.lastCombatMetricKey = "Colosseum Slavers"; diff --git a/src/main/java/champ/monsters/BlackKnight.java b/src/main/java/champ/monsters/BlackKnight.java index d70798abb..13f4ab55f 100644 --- a/src/main/java/champ/monsters/BlackKnight.java +++ b/src/main/java/champ/monsters/BlackKnight.java @@ -3,12 +3,8 @@ import champ.events.Colosseum_Evil_Champ; import com.badlogic.gdx.math.MathUtils; import com.esotericsoftware.spine.AnimationState; - import com.esotericsoftware.spine.AnimationState.TrackEntry; import com.megacrit.cardcrawl.actions.AbstractGameAction; -import com.megacrit.cardcrawl.actions.AbstractGameAction.AttackEffect; - import com.megacrit.cardcrawl.actions.GameActionManager; import com.megacrit.cardcrawl.actions.animations.AnimateFastAttackAction; - import com.megacrit.cardcrawl.actions.animations.ShoutAction; import com.megacrit.cardcrawl.actions.animations.TalkAction; import com.megacrit.cardcrawl.actions.animations.VFXAction; import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; @@ -16,27 +12,18 @@ import com.megacrit.cardcrawl.actions.common.DamageAction; import com.megacrit.cardcrawl.actions.utility.SFXAction; import com.megacrit.cardcrawl.actions.utility.WaitAction; - import com.megacrit.cardcrawl.audio.SoundMaster; import com.megacrit.cardcrawl.cards.DamageInfo; - import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; - import com.megacrit.cardcrawl.helpers.Hitbox; - import com.megacrit.cardcrawl.helpers.ScreenShake; import com.megacrit.cardcrawl.localization.MonsterStrings; import com.megacrit.cardcrawl.monsters.AbstractMonster; - import com.megacrit.cardcrawl.monsters.AbstractMonster.Intent; import com.megacrit.cardcrawl.powers.MetallicizePower; import com.megacrit.cardcrawl.powers.StrengthPower; import com.megacrit.cardcrawl.powers.VulnerablePower; import com.megacrit.cardcrawl.powers.WeakPower; - import com.megacrit.cardcrawl.rooms.AbstractRoom; - import com.megacrit.cardcrawl.scenes.AbstractScene; - import com.megacrit.cardcrawl.unlock.UnlockTracker; import com.megacrit.cardcrawl.vfx.combat.GoldenSlashEffect; import com.megacrit.cardcrawl.vfx.combat.InflameEffect; - import java.util.ArrayList; public class BlackKnight extends AbstractMonster { diff --git a/src/main/java/champ/patches/ChampAfraidOfGhostsPatch.java b/src/main/java/champ/patches/ChampAfraidOfGhostsPatch.java index 4bfdf6106..2697864ea 100644 --- a/src/main/java/champ/patches/ChampAfraidOfGhostsPatch.java +++ b/src/main/java/champ/patches/ChampAfraidOfGhostsPatch.java @@ -5,6 +5,8 @@ import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.events.city.Ghosts; import com.megacrit.cardcrawl.random.Random; +import downfall.events.CouncilOfGhosts_Evil; +import gremlin.characters.GremlinCharacter; import javassist.CtBehavior; import java.util.ArrayList; @@ -22,8 +24,12 @@ public static class EventSpawn { localvars = {"tmp"} ) public static void Insert(Random rng, ArrayList tmp) { - if (AbstractDungeon.player instanceof ChampChar) { + if (AbstractDungeon.player instanceof ChampChar || AbstractDungeon.player instanceof GremlinCharacter) { + //(AbstractDungeon.player instanceof ChampChar || AbstractDungeon.player instanceof GremlinCharacter) { + //to-do: figure out why this is here + //I've decided this is actually really funny so I'm keeping it lol, also Gremlins but because of the 50% hp thing not working tmp.remove(Ghosts.ID); + tmp.remove(CouncilOfGhosts_Evil.ID); } } diff --git a/src/main/java/champ/patches/NukeVigorPatch.java b/src/main/java/champ/patches/NukeVigorPatch.java new file mode 100644 index 000000000..afac045f9 --- /dev/null +++ b/src/main/java/champ/patches/NukeVigorPatch.java @@ -0,0 +1,26 @@ +package champ.patches; + +import champ.relics.PowerArmor; +import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; +import com.evacipated.cardcrawl.modthespire.lib.SpirePostfixPatch; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.powers.watcher.VigorPower; + +public class NukeVigorPatch { + @SpirePatch( + clz = VigorPower.class, + method = "updateDescription" + ) + public static class NukeVigor { + @SpirePostfixPatch + public static void Postfix(VigorPower instance) { + if (AbstractDungeon.player.hasRelic(PowerArmor.ID)) { + if (instance.amount > PowerArmor.CAP_RESOLVE_ETC) { + ((PowerArmor)(AbstractDungeon.player.getRelic(PowerArmor.ID))).onTrigger(instance.amount - PowerArmor.CAP_RESOLVE_ETC); + instance.amount = PowerArmor.CAP_RESOLVE_ETC; + instance.updateDescription(); + } + } + } + } +} \ No newline at end of file diff --git a/src/main/java/champ/patches/RenderBonusHealthPatch.java b/src/main/java/champ/patches/RenderBonusHealthPatch.java index f2d9654ae..a45c42e72 100644 --- a/src/main/java/champ/patches/RenderBonusHealthPatch.java +++ b/src/main/java/champ/patches/RenderBonusHealthPatch.java @@ -1,6 +1,5 @@ package champ.patches; - import champ.powers.ResolvePower; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.g2d.SpriteBatch; diff --git a/src/main/java/champ/patches/SignatureMovePatch.java b/src/main/java/champ/patches/SignatureMovePatch.java index 68fc20c10..66d8f49f0 100644 --- a/src/main/java/champ/patches/SignatureMovePatch.java +++ b/src/main/java/champ/patches/SignatureMovePatch.java @@ -1,11 +1,9 @@ package champ.patches; +import awakenedOne.util.Wiz; import com.evacipated.cardcrawl.modthespire.lib.SpireField; import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; import com.megacrit.cardcrawl.cards.AbstractCard; -import guardian.cards.AbstractGuardianCard; - -import java.util.ArrayList; @SpirePatch( clz = AbstractCard.class, @@ -20,7 +18,14 @@ public class SignatureMovePatch { ) public static class MakeStatEquivalentCopy { public static AbstractCard Postfix(AbstractCard __result, AbstractCard __instance) { - inSignatureMove.set(__result, inSignatureMove.get(__instance)); + + if (Wiz.isInCombat()) { + inSignatureMove.set(__result, inSignatureMove.get(__instance)); + } + + if (!Wiz.isInCombat()) { + inSignatureMove.set(__result, Boolean.FALSE); + } return __result; } diff --git a/src/main/java/champ/patches/SymbolDescriptionPatch.java b/src/main/java/champ/patches/SymbolDescriptionPatch.java index a7fbd5011..54845b52d 100644 --- a/src/main/java/champ/patches/SymbolDescriptionPatch.java +++ b/src/main/java/champ/patches/SymbolDescriptionPatch.java @@ -13,16 +13,11 @@ import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.helpers.FontHelper; -import com.megacrit.cardcrawl.helpers.TipHelper; import com.megacrit.cardcrawl.screens.SingleCardViewPopup; -import javassist.CannotCompileException; import javassist.CtBehavior; -import javassist.expr.ExprEditor; -import javassist.expr.MethodCall; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; -import java.util.ArrayList; public class SymbolDescriptionPatch { private static final String crown_icon_NAME = "crown_icon"; diff --git a/src/main/java/champ/patches/VigorCounterPowerArmorPatch.java b/src/main/java/champ/patches/VigorCounterPowerArmorPatch.java new file mode 100644 index 000000000..cd5f4f85b --- /dev/null +++ b/src/main/java/champ/patches/VigorCounterPowerArmorPatch.java @@ -0,0 +1,61 @@ +//package champ.patches; +// +//import basemod.ReflectionHacks; +//import champ.powers.CounterPower; +//import champ.relics.PowerArmor; +//import com.badlogic.gdx.Gdx; +//import com.evacipated.cardcrawl.modthespire.lib.SpireInsertPatch; +//import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; +//import com.evacipated.cardcrawl.modthespire.lib.SpireReturn; +//import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +//import com.megacrit.cardcrawl.actions.common.RelicAboveCreatureAction; +//import com.megacrit.cardcrawl.actions.utility.TextAboveCreatureAction; +//import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +//import com.megacrit.cardcrawl.powers.AbstractPower; +//import com.megacrit.cardcrawl.powers.StrengthPower; +//import com.megacrit.cardcrawl.powers.watcher.VigorPower; +//import gremlin.powers.UnforgivingPower; +// +//import java.lang.reflect.Field; +// +//import static hermit.util.Wiz.att; +//import static hermit.util.Wiz.pwrAmt; +// +//@SpirePatch( +// clz= ApplyPowerAction.class, +// method="update" +//) +//public class VigorCounterPowerArmorPatch { +// @SpireInsertPatch( +// rloc=35 +// ) +// public static SpireReturn Insert(ApplyPowerAction __instance) { +// AbstractPower powerToApply = (AbstractPower) ReflectionHacks.getPrivate(__instance, ApplyPowerAction.class, "powerToApply"); +// if ((powerToApply instanceof VigorPower || powerToApply instanceof CounterPower) && +// powerToApply.amount > 0 && +// AbstractDungeon.player.hasRelic(PowerArmor.ID)) { +// if (pwrAmt(AbstractDungeon.player, powerToApply.ID) >= PowerArmor.CAP_RESOLVE_ETC) { +// +// ((PowerArmor)(AbstractDungeon.player.getRelic(PowerArmor.ID))).onTrigger((powerToApply.amount)); +// +// AbstractDungeon.actionManager.addToTop(new TextAboveCreatureAction(__instance.target, ApplyPowerAction.TEXT[1])); +// float duration = (float) getPrivateInherited(__instance, ApplyPowerAction.class, "duration"); +// duration -= Gdx.graphics.getDeltaTime(); +// ReflectionHacks.setPrivateInherited(__instance, ApplyPowerAction.class, "duration", duration); +// return SpireReturn.Return(null); +// } +// } +// return SpireReturn.Continue(); +// } +// +// public static Object getPrivateInherited(Object obj, Class objClass, String fieldName) { +// try { +// Field targetField = objClass.getSuperclass().getDeclaredField(fieldName); +// targetField.setAccessible(true); +// return targetField.get(obj); +// } catch (Exception e) { +// } +// +// return null; +// } +//} \ No newline at end of file diff --git a/src/main/java/champ/patches/VigorPatch.java b/src/main/java/champ/patches/VigorPatch.java index d9648cb41..a32f9bf19 100644 --- a/src/main/java/champ/patches/VigorPatch.java +++ b/src/main/java/champ/patches/VigorPatch.java @@ -1,5 +1,6 @@ package champ.patches; +import automaton.cards.Branch; import basemod.ReflectionHacks; import champ.cards.CrookedStrike; import charbosses.bosses.AbstractCharBoss; @@ -18,8 +19,7 @@ public class VigorPatch { public static class DontConsumeVigorPatch { @SpirePrefixPatch public static SpireReturn patch(VigorPower __instance, AbstractCard card, UseCardAction action) { - if (card instanceof CrookedStrike){ - + if (card instanceof CrookedStrike || card instanceof Branch) { __instance.flash(); return SpireReturn.Return(null); } diff --git a/src/main/java/champ/potions/CounterstrikePotion.java b/src/main/java/champ/potions/CounterstrikePotion.java index ed3db1823..0bb1f4df6 100644 --- a/src/main/java/champ/potions/CounterstrikePotion.java +++ b/src/main/java/champ/potions/CounterstrikePotion.java @@ -1,9 +1,7 @@ package champ.potions; - import basemod.BaseMod; import basemod.abstracts.CustomPotion; -import champ.ChampMod; import champ.powers.CounterPower; import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; import com.megacrit.cardcrawl.core.AbstractCreature; diff --git a/src/main/java/champ/potions/OpenerPotion.java b/src/main/java/champ/potions/OpenerPotion.java index f73122ba4..0fb64c9de 100644 --- a/src/main/java/champ/potions/OpenerPotion.java +++ b/src/main/java/champ/potions/OpenerPotion.java @@ -1,6 +1,5 @@ package champ.potions; - import basemod.abstracts.CustomPotion; import champ.ChampMod; import com.megacrit.cardcrawl.actions.common.MakeTempCardInHandAction; @@ -71,8 +70,8 @@ private ArrayList generateColorlessCardChoices() { if (q.hasTag(ChampMod.OPENERBERSERKER)) bersOpenersList.add(q.makeCopy()); if (q.hasTag(ChampMod.OPENERDEFENSIVE)) defOpenersList.add(q.makeCopy()); } - choiceList.add(bersOpenersList.get(AbstractDungeon.cardRandomRng.random(bersOpenersList.size() - 1))); - choiceList.add(defOpenersList.get(AbstractDungeon.cardRandomRng.random(defOpenersList.size() - 1))); + choiceList.add(bersOpenersList.get(AbstractDungeon.potionRng.random(bersOpenersList.size() - 1))); + choiceList.add(defOpenersList.get(AbstractDungeon.potionRng.random(defOpenersList.size() - 1))); return choiceList; } diff --git a/src/main/java/champ/potions/TechPotion.java b/src/main/java/champ/potions/TechPotion.java index 23368d0bf..a03e5f859 100644 --- a/src/main/java/champ/potions/TechPotion.java +++ b/src/main/java/champ/potions/TechPotion.java @@ -1,20 +1,14 @@ package champ.potions; - -import basemod.BaseMod; import basemod.abstracts.CustomPotion; import champ.ChampMod; -import champ.actions.DiscoverOpenerAction; import champ.stances.AbstractChampStance; import com.megacrit.cardcrawl.core.AbstractCreature; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; -import com.megacrit.cardcrawl.helpers.GameDictionary; import com.megacrit.cardcrawl.helpers.PowerTip; -import com.megacrit.cardcrawl.helpers.TipHelper; import com.megacrit.cardcrawl.localization.PotionStrings; - public class TechPotion extends CustomPotion { public static final String POTION_ID = "champ:TechniquePotion"; private static final PotionStrings potionStrings = CardCrawlGame.languagePack.getPotionString(POTION_ID); diff --git a/src/main/java/champ/potions/UltimateStancePotion.java b/src/main/java/champ/potions/UltimateStancePotion.java index 24b24d1a8..152e57cd7 100644 --- a/src/main/java/champ/potions/UltimateStancePotion.java +++ b/src/main/java/champ/potions/UltimateStancePotion.java @@ -1,12 +1,10 @@ package champ.potions; - import basemod.BaseMod; import basemod.abstracts.CustomPotion; import champ.ChampMod; import champ.powers.UltimateFormPower; import champ.stances.UltimateStance; -import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; import com.megacrit.cardcrawl.actions.watcher.ChangeStanceAction; import com.megacrit.cardcrawl.core.AbstractCreature; diff --git a/src/main/java/champ/powers/CalledShotPower.java b/src/main/java/champ/powers/CalledShotPower.java index ae1c38b6c..fc7c45611 100644 --- a/src/main/java/champ/powers/CalledShotPower.java +++ b/src/main/java/champ/powers/CalledShotPower.java @@ -9,7 +9,6 @@ import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.localization.PowerStrings; import com.megacrit.cardcrawl.powers.AbstractPower; -import theHexaghost.HexaMod; import downfall.util.TextureLoader; public class CalledShotPower extends AbstractPower implements CloneablePowerInterface { diff --git a/src/main/java/champ/powers/CounterPower.java b/src/main/java/champ/powers/CounterPower.java index e896037f5..40b7cfc4a 100644 --- a/src/main/java/champ/powers/CounterPower.java +++ b/src/main/java/champ/powers/CounterPower.java @@ -3,11 +3,9 @@ import basemod.interfaces.CloneablePowerInterface; import champ.ChampMod; import champ.cards.Riposte; -import champ.cards.SetATrap; import champ.relics.PowerArmor; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.TextureAtlas; -import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.common.*; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.cards.DamageInfo; @@ -33,7 +31,7 @@ public CounterPower(final int amount) { this.owner = AbstractDungeon.player; this.amount = amount; this.type = PowerType.BUFF; - this.isTurnBased = true; + this.isTurnBased = false; this.region128 = new TextureAtlas.AtlasRegion(tex84, 0, 0, 84, 84); this.region48 = new TextureAtlas.AtlasRegion(tex32, 0, 0, 32, 32); @@ -66,20 +64,26 @@ public int onAttacked(DamageInfo info, int damageAmount) { AbstractDungeon.player.getPower(ParryPower.POWER_ID).onSpecificTrigger(); } } - this.addToTop(new DamageAction(info.owner, new DamageInfo(this.owner, this.amount, DamageInfo.DamageType.THORNS), AbstractGameAction.AttackEffect.SLASH_HORIZONTAL, true)); + //this.addToTop(new DamageAction(info.owner, new DamageInfo(this.owner, this.amount, DamageInfo.DamageType.THORNS), AbstractGameAction.AttackEffect.SLASH_HORIZONTAL, true)); if (owner.hasPower(GladiatorFormPower.POWER_ID)) { owner.getPower(GladiatorFormPower.POWER_ID).onSpecificTrigger(); } + AbstractCard c = new Riposte(); + c.baseDamage = amount; + addToBot(new MakeTempCardInHandAction(c)); } + return damageAmount; } @Override public void stackPower(int stackAmount) { if (AbstractDungeon.player.hasRelic(PowerArmor.ID)) - if (amount + stackAmount > PowerArmor.CAP_RESOLVE_ETC) + if (amount + stackAmount > PowerArmor.CAP_RESOLVE_ETC) { + ((PowerArmor)(AbstractDungeon.player.getRelic(PowerArmor.ID))).onTrigger((stackAmount - (PowerArmor.CAP_RESOLVE_ETC - amount))); stackAmount = (PowerArmor.CAP_RESOLVE_ETC - amount); + } super.stackPower(stackAmount); } diff --git a/src/main/java/champ/powers/DancingMasterPower.java b/src/main/java/champ/powers/DancingMasterPower.java index 6af8043fc..b94f694e5 100644 --- a/src/main/java/champ/powers/DancingMasterPower.java +++ b/src/main/java/champ/powers/DancingMasterPower.java @@ -10,7 +10,6 @@ import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.localization.PowerStrings; import com.megacrit.cardcrawl.powers.AbstractPower; -import com.megacrit.cardcrawl.stances.*; import downfall.util.TextureLoader; public class DancingMasterPower extends AbstractPower implements CloneablePowerInterface { diff --git a/src/main/java/champ/powers/DefensiveStylePower.java b/src/main/java/champ/powers/DefensiveStylePower.java index cfb7aa8c8..f07b18863 100644 --- a/src/main/java/champ/powers/DefensiveStylePower.java +++ b/src/main/java/champ/powers/DefensiveStylePower.java @@ -2,16 +2,12 @@ import basemod.interfaces.CloneablePowerInterface; import champ.ChampMod; -import champ.stances.DefensiveStance; -import champ.util.OnTechniqueSubscriber; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.TextureAtlas; -import com.megacrit.cardcrawl.actions.common.RemoveSpecificPowerAction; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.localization.PowerStrings; import com.megacrit.cardcrawl.powers.AbstractPower; -import com.megacrit.cardcrawl.stances.AbstractStance; import downfall.util.TextureLoader; public class DefensiveStylePower extends AbstractPower implements CloneablePowerInterface { diff --git a/src/main/java/champ/powers/DoubleStyleThisTurnPower.java b/src/main/java/champ/powers/DoubleStyleThisTurnPower.java index 8089a6699..9a6fc12a5 100644 --- a/src/main/java/champ/powers/DoubleStyleThisTurnPower.java +++ b/src/main/java/champ/powers/DoubleStyleThisTurnPower.java @@ -15,7 +15,7 @@ public class DoubleStyleThisTurnPower extends AbstractPower implements Cloneable public static final String POWER_ID = ChampMod.makeID("DoubleStyleThisTurnPower"); - private static final Texture tex84 = TextureLoader.getTexture(ChampMod.getModID() + "Resources/images/powers/ChainLash84.png"); //TODO: Icon Art + private static final Texture tex84 = TextureLoader.getTexture(ChampMod.getModID() + "Resources/images/powers/ChainLash84.png"); private static final Texture tex32 = TextureLoader.getTexture(ChampMod.getModID() + "Resources/images/powers/ChainLash32.png"); private static final PowerStrings powerStrings = CardCrawlGame.languagePack.getPowerStrings(POWER_ID); public static final String NAME = powerStrings.NAME; diff --git a/src/main/java/champ/powers/DrawLessNextTurnPower.java b/src/main/java/champ/powers/DrawLessNextTurnPower.java index 3502d5193..11609a418 100644 --- a/src/main/java/champ/powers/DrawLessNextTurnPower.java +++ b/src/main/java/champ/powers/DrawLessNextTurnPower.java @@ -2,15 +2,11 @@ import basemod.interfaces.CloneablePowerInterface; import champ.ChampMod; -import com.badlogic.gdx.graphics.Texture; -import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.megacrit.cardcrawl.actions.common.RemoveSpecificPowerAction; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.localization.PowerStrings; import com.megacrit.cardcrawl.powers.AbstractPower; -import theHexaghost.HexaMod; -import downfall.util.TextureLoader; public class DrawLessNextTurnPower extends AbstractPower implements CloneablePowerInterface { diff --git a/src/main/java/champ/powers/DualPlaySrikePower.java b/src/main/java/champ/powers/DualPlaySrikePower.java index 6dd70ed4c..a04e20a9b 100644 --- a/src/main/java/champ/powers/DualPlaySrikePower.java +++ b/src/main/java/champ/powers/DualPlaySrikePower.java @@ -1,12 +1,10 @@ package champ.powers; -import basemod.helpers.VfxBuilder; import basemod.interfaces.CloneablePowerInterface; import champ.ChampMod; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.evacipated.cardcrawl.mod.stslib.powers.interfaces.NonStackablePower; -import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.common.RemoveSpecificPowerAction; import com.megacrit.cardcrawl.actions.utility.UseCardAction; import com.megacrit.cardcrawl.cards.AbstractCard; diff --git a/src/main/java/champ/powers/EnchantedShieldPower.java b/src/main/java/champ/powers/EnchantedShieldPower.java index e174cb710..77fc5f729 100644 --- a/src/main/java/champ/powers/EnchantedShieldPower.java +++ b/src/main/java/champ/powers/EnchantedShieldPower.java @@ -4,8 +4,6 @@ import champ.ChampMod; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.TextureAtlas; -import com.megacrit.cardcrawl.actions.AbstractGameAction; -import com.megacrit.cardcrawl.actions.common.DamageAction; import com.megacrit.cardcrawl.actions.common.ReducePowerAction; import com.megacrit.cardcrawl.actions.common.RemoveSpecificPowerAction; import com.megacrit.cardcrawl.cards.DamageInfo; @@ -13,7 +11,6 @@ import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.localization.PowerStrings; import com.megacrit.cardcrawl.powers.AbstractPower; -import theHexaghost.HexaMod; import downfall.util.TextureLoader; public class EnchantedShieldPower extends AbstractPower implements CloneablePowerInterface { diff --git a/src/main/java/champ/powers/EnergizedDurationPower.java b/src/main/java/champ/powers/EnergizedDurationPower.java index e275e24c3..85c38a5e7 100644 --- a/src/main/java/champ/powers/EnergizedDurationPower.java +++ b/src/main/java/champ/powers/EnergizedDurationPower.java @@ -4,13 +4,11 @@ import champ.ChampMod; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.TextureAtlas; -import com.megacrit.cardcrawl.actions.common.ReducePowerAction; import com.megacrit.cardcrawl.actions.common.RemoveSpecificPowerAction; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.localization.PowerStrings; import com.megacrit.cardcrawl.powers.AbstractPower; -import theHexaghost.HexaMod; import downfall.util.TextureLoader; public class EnergizedDurationPower extends AbstractPower implements CloneablePowerInterface { diff --git a/src/main/java/champ/powers/EntangleNextTurnPower.java b/src/main/java/champ/powers/EntangleNextTurnPower.java index 79c15fc2c..e214bd7f2 100644 --- a/src/main/java/champ/powers/EntangleNextTurnPower.java +++ b/src/main/java/champ/powers/EntangleNextTurnPower.java @@ -11,7 +11,6 @@ import com.megacrit.cardcrawl.localization.PowerStrings; import com.megacrit.cardcrawl.powers.AbstractPower; import com.megacrit.cardcrawl.powers.EntanglePower; -import theHexaghost.HexaMod; import downfall.util.TextureLoader; public class EntangleNextTurnPower extends AbstractPower implements CloneablePowerInterface { diff --git a/src/main/java/champ/powers/FalseCounterPower.java b/src/main/java/champ/powers/FalseCounterPower.java index 05a66fd60..27420fafe 100644 --- a/src/main/java/champ/powers/FalseCounterPower.java +++ b/src/main/java/champ/powers/FalseCounterPower.java @@ -9,7 +9,6 @@ import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.localization.PowerStrings; import com.megacrit.cardcrawl.powers.AbstractPower; -import theHexaghost.HexaMod; import downfall.util.TextureLoader; public class FalseCounterPower extends AbstractPower implements CloneablePowerInterface { diff --git a/src/main/java/champ/powers/FocusedBerPower.java b/src/main/java/champ/powers/FocusedBerPower.java index 0063fada7..7bcfdcc6e 100644 --- a/src/main/java/champ/powers/FocusedBerPower.java +++ b/src/main/java/champ/powers/FocusedBerPower.java @@ -2,20 +2,18 @@ import basemod.interfaces.CloneablePowerInterface; import champ.ChampMod; -import champ.util.OnFinisherSubscriber; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.common.*; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.cards.DamageInfo; -import com.megacrit.cardcrawl.cards.green.Finisher; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.localization.PowerStrings; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.AbstractPower; -import com.megacrit.cardcrawl.powers.watcher.VigorPower; +import downfall.monsters.NeowBoss; import downfall.util.TextureLoader; public class FocusedBerPower extends AbstractPower implements CloneablePowerInterface { @@ -52,7 +50,9 @@ public void onAfterCardPlayed(AbstractCard card) { if (card.hasTag(ChampMod.FINISHER)) { flash(); for (AbstractMonster m : AbstractDungeon.getCurrRoom().monsters.monsters) { - addToBot(new DamageAction(m, new DamageInfo(owner, amount, DamageInfo.DamageType.THORNS), AbstractGameAction.AttackEffect.SLASH_HORIZONTAL)); + if (!m.isDead && !m.isDying && !(m instanceof NeowBoss)) { + addToBot(new DamageAction(m, new DamageInfo(owner, amount, DamageInfo.DamageType.THORNS), AbstractGameAction.AttackEffect.SLASH_HORIZONTAL)); + } } addToBot(new RemoveSpecificPowerAction(owner, owner, this)); } diff --git a/src/main/java/champ/powers/FocusedDefPower.java b/src/main/java/champ/powers/FocusedDefPower.java index e688d9dbc..e89fcc705 100644 --- a/src/main/java/champ/powers/FocusedDefPower.java +++ b/src/main/java/champ/powers/FocusedDefPower.java @@ -5,11 +5,8 @@ import champ.util.OnFinisherSubscriber; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.TextureAtlas; -import com.megacrit.cardcrawl.actions.AbstractGameAction; -import com.megacrit.cardcrawl.actions.common.DamageAllEnemiesAction; import com.megacrit.cardcrawl.actions.common.GainBlockAction; import com.megacrit.cardcrawl.actions.common.RemoveSpecificPowerAction; -import com.megacrit.cardcrawl.cards.DamageInfo; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.localization.PowerStrings; diff --git a/src/main/java/champ/powers/GladiatorFormPower.java b/src/main/java/champ/powers/GladiatorFormPower.java index f45436e61..9f6610f10 100644 --- a/src/main/java/champ/powers/GladiatorFormPower.java +++ b/src/main/java/champ/powers/GladiatorFormPower.java @@ -1,7 +1,9 @@ package champ.powers; +import automaton.cards.Branch; import basemod.interfaces.CloneablePowerInterface; import champ.ChampMod; +import champ.cards.CrookedStrike; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; @@ -46,10 +48,18 @@ public GladiatorFormPower(final int amount) { @Override public void onUseCard(AbstractCard card, UseCardAction action) { - if (card.type == AbstractCard.CardType.ATTACK && owner.hasPower(VigorPower.POWER_ID)) - addNextTurnPower(AbstractDungeon.player.getPower(VigorPower.POWER_ID)); + if (!(card instanceof CrookedStrike || card instanceof Branch)) { + if (card.type == AbstractCard.CardType.ATTACK && owner.hasPower(VigorPower.POWER_ID)) + addNextTurnPower(AbstractDungeon.player.getPower(VigorPower.POWER_ID)); + } + } + + public void onSpecificTriggerBranch() { + if (owner.hasPower(CounterPower.POWER_ID)) + addNextTurnPower(AbstractDungeon.player.getPower(CounterPower.POWER_ID)); } + @Override public void onSpecificTrigger() { if (owner.hasPower(CounterPower.POWER_ID)) diff --git a/src/main/java/champ/powers/GladiatorStylePower.java b/src/main/java/champ/powers/GladiatorStylePower.java index 740b62692..343d4cdf0 100644 --- a/src/main/java/champ/powers/GladiatorStylePower.java +++ b/src/main/java/champ/powers/GladiatorStylePower.java @@ -2,17 +2,14 @@ import basemod.interfaces.CloneablePowerInterface; import champ.ChampMod; -import champ.cards.AbstractChampCard; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; -import com.megacrit.cardcrawl.actions.common.GainBlockAction; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.localization.PowerStrings; import com.megacrit.cardcrawl.powers.*; import com.megacrit.cardcrawl.stances.NeutralStance; -import theHexaghost.HexaMod; import downfall.util.TextureLoader; public class GladiatorStylePower extends AbstractPower implements CloneablePowerInterface { diff --git a/src/main/java/champ/powers/HonePower.java b/src/main/java/champ/powers/HonePower.java new file mode 100644 index 000000000..9ec5473f5 --- /dev/null +++ b/src/main/java/champ/powers/HonePower.java @@ -0,0 +1,61 @@ +package champ.powers; + +import basemod.interfaces.CloneablePowerInterface; +import champ.ChampMod; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.TextureAtlas; +import com.megacrit.cardcrawl.actions.common.RemoveSpecificPowerAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.localization.PowerStrings; +import com.megacrit.cardcrawl.powers.AbstractPower; +import downfall.util.TextureLoader; + +public class HonePower extends AbstractPower implements CloneablePowerInterface { + public AbstractCreature source; + + public static final String POWER_ID = ChampMod.makeID("HonePower"); + + private static final Texture tex84 = TextureLoader.getTexture(ChampMod.getModID() + "Resources/images/powers/FalseCounter84.png"); + private static final Texture tex32 = TextureLoader.getTexture(ChampMod.getModID() + "Resources/images/powers/FalseCounter32.png"); + private static final PowerStrings powerStrings = CardCrawlGame.languagePack.getPowerStrings(POWER_ID); + public static final String NAME = powerStrings.NAME; + public static final String[] DESCRIPTIONS = powerStrings.DESCRIPTIONS; + + + public HonePower(final AbstractCreature owner, final int amount) { + name = NAME; + ID = POWER_ID; + + this.owner = owner; + this.amount = amount; + + type = PowerType.BUFF; + + if (this.amount <= 0) { + this.addToTop(new RemoveSpecificPowerAction(this.owner, this.owner, this.POWER_ID)); + } + + this.region128 = new TextureAtlas.AtlasRegion(tex84, 0, 0, 84, 84); + this.region48 = new TextureAtlas.AtlasRegion(tex32, 0, 0, 32, 32); + + updateDescription(); + } + + @Override + public float atDamageGive(float damage, DamageInfo.DamageType type, AbstractCard card) { + return super.atDamageGive(card.hasTag(AbstractCard.CardTags.STRIKE) ? damage + this.amount : damage, type, card); + } + + @Override + public void updateDescription() { + description = DESCRIPTIONS[0] + amount + DESCRIPTIONS[1]; + } + + @Override + public AbstractPower makeCopy() { + return new HonePower(owner, amount); + } +} \ No newline at end of file diff --git a/src/main/java/champ/powers/ImprovisingPower.java b/src/main/java/champ/powers/ImprovisingPower.java index 0270ef599..164026e7b 100644 --- a/src/main/java/champ/powers/ImprovisingPower.java +++ b/src/main/java/champ/powers/ImprovisingPower.java @@ -2,15 +2,14 @@ import basemod.interfaces.CloneablePowerInterface; import champ.ChampMod; -import champ.stances.BerserkerStance; -import champ.stances.DefensiveStance; +import champ.stances.AbstractChampStance; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.TextureAtlas; -import com.megacrit.cardcrawl.actions.watcher.ChangeStanceAction; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.localization.PowerStrings; import com.megacrit.cardcrawl.powers.AbstractPower; +import com.megacrit.cardcrawl.stances.AbstractStance; import com.megacrit.cardcrawl.stances.NeutralStance; import downfall.util.TextureLoader; @@ -21,11 +20,13 @@ public class ImprovisingPower extends AbstractPower implements CloneablePowerInt private static final Texture tex32 = TextureLoader.getTexture(ChampMod.getModID() + "Resources/images/powers/Improvising32.png"); private static final PowerStrings powerStrings = CardCrawlGame.languagePack.getPowerStrings(POWER_ID); - public ImprovisingPower() { + public ImprovisingPower(final int amount) { this.name = powerStrings.NAME; this.ID = POWER_ID; + this.amount = amount; this.owner = AbstractDungeon.player; this.type = PowerType.BUFF; + this.isTurnBased = true; this.region128 = new TextureAtlas.AtlasRegion(tex84, 0, 0, 84, 84); this.region48 = new TextureAtlas.AtlasRegion(tex32, 0, 0, 32, 32); @@ -34,23 +35,33 @@ public ImprovisingPower() { } @Override - public void atStartOfTurn() { - if (AbstractDungeon.player.stance instanceof NeutralStance) { - if (AbstractDungeon.cardRandomRng.randomBoolean()) { - addToBot(new ChangeStanceAction(new BerserkerStance())); - } else { - addToBot(new ChangeStanceAction(new DefensiveStance())); - } + public void onChangeStance(AbstractStance oldStance, AbstractStance newStance) { + if (!newStance.ID.equals(NeutralStance.STANCE_ID) && !(oldStance.ID.equals(newStance.ID))) { + if (newStance instanceof AbstractChampStance) + for (int x = 0; x < this.amount; x++) { + ((AbstractChampStance) newStance).technique(); + } } } +// @Override +// public void atStartOfTurn() { +// if (AbstractDungeon.player.stance instanceof NeutralStance) { +// if (AbstractDungeon.cardRandomRng.randomBoolean()) { +// addToBot(new ChangeStanceAction(new BerserkerStance())); +// } else { +// addToBot(new ChangeStanceAction(new DefensiveStance())); +// } +// } +// } + @Override public void updateDescription() { - description = powerStrings.DESCRIPTIONS[0]; + description = powerStrings.DESCRIPTIONS[0] + this.amount + powerStrings.DESCRIPTIONS[1]; } - @Override - public AbstractPower makeCopy() { - return new ImprovisingPower(); - } -} \ No newline at end of file + @Override + public AbstractPower makeCopy () { + return new ImprovisingPower(amount); + } + } \ No newline at end of file diff --git a/src/main/java/champ/powers/IronFortressPower.java b/src/main/java/champ/powers/IronFortressPower.java index 9a53aaeb7..deabebaf1 100644 --- a/src/main/java/champ/powers/IronFortressPower.java +++ b/src/main/java/champ/powers/IronFortressPower.java @@ -2,14 +2,11 @@ import basemod.interfaces.CloneablePowerInterface; import champ.ChampMod; -import champ.stances.AbstractChampStance; -import champ.stances.DefensiveStance; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.megacrit.cardcrawl.actions.common.GainBlockAction; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; -import com.megacrit.cardcrawl.localization.LocalizedStrings; import com.megacrit.cardcrawl.localization.PowerStrings; import com.megacrit.cardcrawl.powers.AbstractPower; import com.megacrit.cardcrawl.stances.AbstractStance; diff --git a/src/main/java/champ/powers/LastStandModPower.java b/src/main/java/champ/powers/LastStandModPower.java index b5a69c47f..f6f894c9f 100644 --- a/src/main/java/champ/powers/LastStandModPower.java +++ b/src/main/java/champ/powers/LastStandModPower.java @@ -14,7 +14,6 @@ import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.localization.PowerStrings; -import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.AbstractPower; import com.megacrit.cardcrawl.powers.StrengthPower; import com.megacrit.cardcrawl.vfx.AbstractGameEffect; diff --git a/src/main/java/champ/powers/LastStandPower.java b/src/main/java/champ/powers/LastStandPower.java index 0177c92c6..e12a48b1a 100644 --- a/src/main/java/champ/powers/LastStandPower.java +++ b/src/main/java/champ/powers/LastStandPower.java @@ -2,7 +2,6 @@ import basemod.interfaces.CloneablePowerInterface; import champ.ChampMod; -import champ.cards.LastStand; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.megacrit.cardcrawl.actions.animations.ShoutAction; @@ -19,7 +18,6 @@ import com.megacrit.cardcrawl.powers.StrengthPower; import com.megacrit.cardcrawl.vfx.combat.InflameEffect; import downfall.util.TextureLoader; -import slimebound.SlimeboundMod; import java.util.ArrayList; import java.util.Arrays; diff --git a/src/main/java/champ/powers/NoBlockNextTurnPower.java b/src/main/java/champ/powers/NoBlockNextTurnPower.java index 47d38e4ad..1d821b0f6 100644 --- a/src/main/java/champ/powers/NoBlockNextTurnPower.java +++ b/src/main/java/champ/powers/NoBlockNextTurnPower.java @@ -10,7 +10,6 @@ import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.localization.PowerStrings; import com.megacrit.cardcrawl.powers.AbstractPower; -import com.megacrit.cardcrawl.powers.EntanglePower; import com.megacrit.cardcrawl.powers.NoBlockPower; import downfall.util.TextureLoader; diff --git a/src/main/java/champ/powers/PushThroughPower.java b/src/main/java/champ/powers/PushThroughPower.java index 004f24aa7..35d8b35c5 100644 --- a/src/main/java/champ/powers/PushThroughPower.java +++ b/src/main/java/champ/powers/PushThroughPower.java @@ -10,7 +10,6 @@ import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.localization.PowerStrings; import com.megacrit.cardcrawl.powers.AbstractPower; -import theHexaghost.HexaMod; import downfall.util.TextureLoader; public class PushThroughPower extends AbstractPower implements CloneablePowerInterface { diff --git a/src/main/java/champ/powers/ResolvePower.java b/src/main/java/champ/powers/ResolvePower.java index 1d2c1d884..57202dcfd 100644 --- a/src/main/java/champ/powers/ResolvePower.java +++ b/src/main/java/champ/powers/ResolvePower.java @@ -2,17 +2,12 @@ import basemod.interfaces.CloneablePowerInterface; import champ.ChampMod; -import champ.relics.PowerArmor; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.TextureAtlas; -import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; -import com.megacrit.cardcrawl.actions.common.RemoveSpecificPowerAction; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.localization.PowerStrings; import com.megacrit.cardcrawl.powers.AbstractPower; -import com.megacrit.cardcrawl.powers.StrengthPower; -import theHexaghost.HexaMod; import downfall.util.TextureLoader; public class ResolvePower extends AbstractPower implements CloneablePowerInterface { diff --git a/src/main/java/champ/powers/ShieldWallPower.java b/src/main/java/champ/powers/ShieldWallPower.java index 44d100b6e..5fc0d8638 100644 --- a/src/main/java/champ/powers/ShieldWallPower.java +++ b/src/main/java/champ/powers/ShieldWallPower.java @@ -5,12 +5,10 @@ import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; -import com.megacrit.cardcrawl.cards.DamageInfo; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.localization.PowerStrings; import com.megacrit.cardcrawl.powers.AbstractPower; -import theHexaghost.HexaMod; import downfall.util.TextureLoader; public class ShieldWallPower extends AbstractPower implements CloneablePowerInterface { diff --git a/src/main/java/champ/powers/StrikeOfGeniusPower.java b/src/main/java/champ/powers/StrikeOfGeniusPower.java index edefa83da..62f93a309 100644 --- a/src/main/java/champ/powers/StrikeOfGeniusPower.java +++ b/src/main/java/champ/powers/StrikeOfGeniusPower.java @@ -1,11 +1,9 @@ package champ.powers; -import basemod.helpers.CardModifierManager; import basemod.interfaces.CloneablePowerInterface; import champ.ChampMod; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.TextureAtlas; -import com.megacrit.cardcrawl.actions.common.MakeTempCardInHandAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; @@ -13,7 +11,7 @@ import com.megacrit.cardcrawl.localization.PowerStrings; import com.megacrit.cardcrawl.powers.AbstractPower; import com.megacrit.cardcrawl.unlock.UnlockTracker; -import expansioncontent.cardmods.PropertiesMod; +import expansioncontent.actions.EchoACardAction; import sneckomod.cards.unknowns.AbstractUnknownCard; import downfall.util.TextureLoader; @@ -35,7 +33,7 @@ public StrikeOfGeniusPower(final int amount) { this.owner = AbstractDungeon.player; this.amount = amount; this.type = PowerType.BUFF; - this.isTurnBased = true; + this.isTurnBased = false; this.region128 = new TextureAtlas.AtlasRegion(tex84, 0, 0, 84, 84); this.region48 = new TextureAtlas.AtlasRegion(tex32, 0, 0, 32, 32); @@ -49,9 +47,7 @@ public void atStartOfTurn() { for (AbstractCard r : CardLibrary.getAllCards()) if (r.color == AbstractDungeon.player.getCardColor() && !UnlockTracker.isCardLocked(r.cardID)&& !r.hasTag(AbstractCard.CardTags.HEALING) && r.hasTag(AbstractCard.CardTags.STRIKE) && r.type == AbstractCard.CardType.ATTACK && !(r instanceof AbstractUnknownCard)) qCardList.add(r); AbstractCard l = qCardList.get(AbstractDungeon.cardRandomRng.random(qCardList.size() - 1)).makeStatEquivalentCopy(); - l.freeToPlayOnce = true; - if (!l.exhaust) CardModifierManager.addModifier(l, new PropertiesMod(PropertiesMod.supportedProperties.EXHAUST, false)); - this.addToBot(new MakeTempCardInHandAction(l)); + addToBot(new EchoACardAction(l, true)); } } diff --git a/src/main/java/champ/powers/StrikeOfGeniusUpgradedPower.java b/src/main/java/champ/powers/StrikeOfGeniusUpgradedPower.java index 4b4bb3a53..4a178e54f 100644 --- a/src/main/java/champ/powers/StrikeOfGeniusUpgradedPower.java +++ b/src/main/java/champ/powers/StrikeOfGeniusUpgradedPower.java @@ -1,11 +1,9 @@ package champ.powers; -import basemod.helpers.CardModifierManager; import basemod.interfaces.CloneablePowerInterface; import champ.ChampMod; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.TextureAtlas; -import com.megacrit.cardcrawl.actions.common.MakeTempCardInHandAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; @@ -14,7 +12,7 @@ import com.megacrit.cardcrawl.powers.AbstractPower; import com.megacrit.cardcrawl.unlock.UnlockTracker; import downfall.util.TextureLoader; -import expansioncontent.cardmods.PropertiesMod; +import expansioncontent.actions.EchoACardAction; import java.util.ArrayList; @@ -34,7 +32,7 @@ public StrikeOfGeniusUpgradedPower(final int amount) { this.owner = AbstractDungeon.player; this.amount = amount; this.type = PowerType.BUFF; - this.isTurnBased = true; + this.isTurnBased = false; this.region128 = new TextureAtlas.AtlasRegion(tex84, 0, 0, 84, 84); this.region48 = new TextureAtlas.AtlasRegion(tex32, 0, 0, 32, 32); @@ -49,9 +47,7 @@ public void atStartOfTurn() { if (r.color == AbstractDungeon.player.getCardColor() && !UnlockTracker.isCardLocked(r.cardID) && !r.hasTag(AbstractCard.CardTags.HEALING) && r.hasTag(AbstractCard.CardTags.STRIKE) && r.type == AbstractCard.CardType.ATTACK) qCardList.add(r); AbstractCard l = qCardList.get(AbstractDungeon.cardRandomRng.random(qCardList.size() - 1)).makeStatEquivalentCopy(); l.upgrade(); - if (!l.exhaust) CardModifierManager.addModifier(l, new PropertiesMod(PropertiesMod.supportedProperties.EXHAUST, false)); - l.freeToPlayOnce = true; - this.addToBot(new MakeTempCardInHandAction(l)); + addToBot(new EchoACardAction(l, true)); } } diff --git a/src/main/java/champ/powers/UltimateFormNextTurnPower.java b/src/main/java/champ/powers/UltimateFormNextTurnPower.java index 4f68879db..d0c9579de 100644 --- a/src/main/java/champ/powers/UltimateFormNextTurnPower.java +++ b/src/main/java/champ/powers/UltimateFormNextTurnPower.java @@ -6,15 +6,12 @@ import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; -import com.megacrit.cardcrawl.actions.common.ReducePowerAction; import com.megacrit.cardcrawl.actions.common.RemoveSpecificPowerAction; import com.megacrit.cardcrawl.actions.watcher.ChangeStanceAction; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.localization.PowerStrings; import com.megacrit.cardcrawl.powers.AbstractPower; -import com.megacrit.cardcrawl.stances.AbstractStance; -import com.megacrit.cardcrawl.stances.NeutralStance; import downfall.util.TextureLoader; public class UltimateFormNextTurnPower extends AbstractPower implements CloneablePowerInterface { diff --git a/src/main/java/champ/powers/UltimateFormPower.java b/src/main/java/champ/powers/UltimateFormPower.java index f19700d4c..2febb849b 100644 --- a/src/main/java/champ/powers/UltimateFormPower.java +++ b/src/main/java/champ/powers/UltimateFormPower.java @@ -6,7 +6,6 @@ import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.megacrit.cardcrawl.actions.common.ReducePowerAction; -import com.megacrit.cardcrawl.actions.common.RemoveSpecificPowerAction; import com.megacrit.cardcrawl.actions.watcher.ChangeStanceAction; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; @@ -44,7 +43,6 @@ public UltimateFormPower(final int amount) { @Override public void onChangeStance(AbstractStance oldStance, AbstractStance newStance) { if (!(newStance instanceof UltimateStance)) { - AbstractDungeon.actionManager.addToBottom(new ChangeStanceAction(UltimateStance.STANCE_ID)); } } diff --git a/src/main/java/champ/relics/Barbells.java b/src/main/java/champ/relics/Barbells.java index 51e527b5e..a0548ef01 100644 --- a/src/main/java/champ/relics/Barbells.java +++ b/src/main/java/champ/relics/Barbells.java @@ -2,6 +2,7 @@ import basemod.abstracts.CustomRelic; import champ.ChampMod; +import com.evacipated.cardcrawl.mod.stslib.relics.OnRemoveCardFromMasterDeckRelic; import downfall.util.TextureLoader; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.math.MathUtils; @@ -18,7 +19,7 @@ import static champ.ChampMod.makeRelicOutlinePath; import static champ.ChampMod.makeRelicPath; -public class Barbells extends CustomRelic { +public class Barbells extends CustomRelic implements OnRemoveCardFromMasterDeckRelic { public static final String ID = ChampMod.makeID("Barbells"); private static final Texture IMG = TextureLoader.getTexture(makeRelicPath("Barbell.png")); private static final Texture OUTLINE = TextureLoader.getTexture(makeRelicOutlinePath("Barbell.png")); @@ -27,6 +28,44 @@ public Barbells() { super(ID, IMG, OUTLINE, RelicTier.SHOP, LandingSound.MAGICAL); } + //# of required cards to perform an upgrade + private static final int AMOUNT = 10; + + + @Override + public void onEquip() { + ArrayList possibleCards = new ArrayList<>();// 38 + for (AbstractCard c : AbstractDungeon.player.masterDeck.group) { + if (c.canUpgrade()) {// 40 + possibleCards.add(c);// 41 + } + } + this.counter = possibleCards.size(); + } + + + @Override + public void onRemoveCardFromMasterDeck(AbstractCard var1) { + ArrayList possibleCards = new ArrayList<>();// 38 + for (AbstractCard c : AbstractDungeon.player.masterDeck.group) { + if (c.canUpgrade()) {// 40 + possibleCards.add(c);// 41 + } + } + this.counter = possibleCards.size(); + } + + public void onObtainCard(AbstractCard c) { + ArrayList possibleCards = new ArrayList<>();// 38 + for (AbstractCard card : AbstractDungeon.player.masterDeck.group) { + if (card.canUpgrade()) {// 40 + possibleCards.add(card);// 41 + } + } + this.counter = possibleCards.size(); + } + + @Override public void onEnterRoom(AbstractRoom room) { if (room instanceof RestRoom) { @@ -38,9 +77,11 @@ public void onEnterRoom(AbstractRoom room) { possibleCards.add(c);// 41 } } + this.counter = possibleCards.size(); - if (possibleCards.size() >= 10) {// 45 - AbstractCard card = possibleCards.get(AbstractDungeon.miscRng.random(0, possibleCards.size() - 1));// 46 + if (possibleCards.size() >= AMOUNT) {// 45 + this.counter = possibleCards.size() - 1; + AbstractCard card = possibleCards.get(AbstractDungeon.relicRng.random(0, possibleCards.size() - 1));// 46 card.upgrade();// 47 AbstractDungeon.player.bottledCardUpgradeCheck(card);// 48 float x = MathUtils.random(0.1F, 0.9F) * (float) Settings.WIDTH; @@ -51,8 +92,13 @@ public void onEnterRoom(AbstractRoom room) { } } + + public boolean canSpawn() { + return Settings.isEndless || (AbstractDungeon.floorNum <= 40); // cannot appear past early act 3 + } + @Override public String getUpdatedDescription() { - return DESCRIPTIONS[0]; + return DESCRIPTIONS[0] + AMOUNT + DESCRIPTIONS[1]; } } diff --git a/src/main/java/champ/relics/BerserkersGuideToSlaughter.java b/src/main/java/champ/relics/BerserkersGuideToSlaughter.java index 9a53285f8..544d5015c 100644 --- a/src/main/java/champ/relics/BerserkersGuideToSlaughter.java +++ b/src/main/java/champ/relics/BerserkersGuideToSlaughter.java @@ -2,14 +2,10 @@ import basemod.abstracts.CustomRelic; import champ.ChampMod; -import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; -import com.megacrit.cardcrawl.powers.watcher.VigorPower; import downfall.util.TextureLoader; import com.badlogic.gdx.graphics.Texture; -import com.megacrit.cardcrawl.dungeons.AbstractDungeon; -import static champ.ChampMod.makeRelicOutlinePath; -import static champ.ChampMod.makeRelicPath; +import static champ.ChampMod.*; public class BerserkersGuideToSlaughter extends CustomRelic { @@ -18,19 +14,22 @@ public class BerserkersGuideToSlaughter extends CustomRelic { private static final Texture OUTLINE = TextureLoader.getTexture(makeRelicOutlinePath("BerserkersGuide.png")); public BerserkersGuideToSlaughter() { - super(ID, IMG, OUTLINE, RelicTier.SHOP, LandingSound.MAGICAL); + super(ID, IMG, OUTLINE, RelicTier.COMMON, LandingSound.FLAT); } + //vigor gain per turn + private static final int AMOUNT = 3; + @Override public void atTurnStart() { super.atTurnStart(); - - addToBot(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new VigorPower(AbstractDungeon.player, 3), 3)); + vigor(AMOUNT); + //addToBot(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new VigorPower(AbstractDungeon.player, 3), 3)); } @Override public String getUpdatedDescription() { - return DESCRIPTIONS[0]; + return DESCRIPTIONS[0] + AMOUNT + DESCRIPTIONS[1]; } } diff --git a/src/main/java/champ/relics/ChampStancesModRelic.java b/src/main/java/champ/relics/ChampStancesModRelic.java index efb5f738c..c6964a038 100644 --- a/src/main/java/champ/relics/ChampStancesModRelic.java +++ b/src/main/java/champ/relics/ChampStancesModRelic.java @@ -28,7 +28,7 @@ public ChampStancesModRelic() { public void atBattleStart() { super.atBattleStart(); if (AbstractDungeon.player.stance.ID.equals(NeutralStance.STANCE_ID)) { - int x = AbstractDungeon.cardRandomRng.random(1); + int x = AbstractDungeon.relicRng.random(1); switch (x) { case 0: //SlimeboundMod.logger.info("Switching to Berserker (Mod Relic)"); diff --git a/src/main/java/champ/relics/ChampionCrown.java b/src/main/java/champ/relics/ChampionCrown.java index 63cc7c0dc..41aaf1168 100644 --- a/src/main/java/champ/relics/ChampionCrown.java +++ b/src/main/java/champ/relics/ChampionCrown.java @@ -2,20 +2,9 @@ import basemod.abstracts.CustomRelic; import champ.ChampMod; -import champ.actions.OpenerReduceCostAction; -import champ.stances.BerserkerStance; -import champ.stances.DefensiveStance; -import champ.stances.UltimateStance; -import champ.util.OnOpenerSubscriber; -import com.megacrit.cardcrawl.actions.AbstractGameAction; -import com.megacrit.cardcrawl.actions.common.DamageRandomEnemyAction; -import com.megacrit.cardcrawl.actions.common.GainBlockAction; -import com.megacrit.cardcrawl.actions.common.GainEnergyAction; -import com.megacrit.cardcrawl.actions.watcher.ChangeStanceAction; -import com.megacrit.cardcrawl.cards.DamageInfo; +import champ.cards.StanceDanceCrown; +import com.megacrit.cardcrawl.actions.common.*; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; -import com.megacrit.cardcrawl.stances.AbstractStance; -import com.megacrit.cardcrawl.stances.NeutralStance; import downfall.util.TextureLoader; import com.badlogic.gdx.graphics.Texture; @@ -29,7 +18,7 @@ public class ChampionCrown extends CustomRelic { private static final Texture OUTLINE = TextureLoader.getTexture(makeRelicOutlinePath("ChampionCrown.png")); public ChampionCrown() { - super(ID, IMG, OUTLINE, RelicTier.STARTER, LandingSound.MAGICAL); + super(ID, IMG, OUTLINE, RelicTier.STARTER, LandingSound.CLINK); } /* @@ -42,25 +31,28 @@ public void onChangeStance(AbstractStance prevStance, AbstractStance newStance) } */ + @Override public void atBattleStart() { - super.atBattleStart(); - // AbstractDungeon.actionManager.addToBottom(new GainEnergyAction(1)); - if (AbstractDungeon.player.stance.ID.equals(NeutralStance.STANCE_ID)) { - int x = AbstractDungeon.cardRandomRng.random(1); - switch (x) { - case 0: - //SlimeboundMod.logger.info("Switching to Berserker (Mod Relic)"); - addToBot(new ChangeStanceAction(BerserkerStance.STANCE_ID)); - break; - case 1: - //SlimeboundMod.logger.info("Switching to Defensive (Mod Relic)"); - addToBot(new ChangeStanceAction(DefensiveStance.STANCE_ID)); - break; - } - } + this.addToTop(new MakeTempCardInHandAction(new StanceDanceCrown(), 1, false)); } +// @Override +// public void atBattleStart() { +// super.atBattleStart(); +// if (AbstractDungeon.player.stance.ID.equals(NeutralStance.STANCE_ID)) { +// int x = AbstractDungeon.relicRng.random(1); +// switch (x) { +// case 0: +// addToBot(new ChangeStanceAction(BerserkerStance.STANCE_ID)); +// break; +// case 1: +// addToBot(new ChangeStanceAction(DefensiveStance.STANCE_ID)); +// break; +// } +// } +// } + @Override public String getUpdatedDescription() { return DESCRIPTIONS[0]; diff --git a/src/main/java/champ/relics/ChampionCrownUpgraded.java b/src/main/java/champ/relics/ChampionCrownUpgraded.java index 02e96bc59..d31aa6d08 100644 --- a/src/main/java/champ/relics/ChampionCrownUpgraded.java +++ b/src/main/java/champ/relics/ChampionCrownUpgraded.java @@ -2,22 +2,20 @@ import basemod.abstracts.CustomRelic; import champ.ChampMod; -import champ.actions.OpenerReduceCostAction; -import champ.powers.UltimateFormPower; -import champ.stances.UltimateStance; -import champ.util.OnOpenerSubscriber; +import com.evacipated.cardcrawl.mod.stslib.relics.OnAfterUseCardRelic; +import com.megacrit.cardcrawl.actions.common.DrawCardAction; +import com.megacrit.cardcrawl.actions.common.RelicAboveCreatureAction; +import com.megacrit.cardcrawl.actions.utility.UseCardAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.core.Settings; import downfall.util.TextureLoader; import com.badlogic.gdx.graphics.Texture; -import com.megacrit.cardcrawl.actions.AbstractGameAction; -import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; -import com.megacrit.cardcrawl.actions.watcher.ChangeStanceAction; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; -import slimebound.relics.AbsorbEndCombat; -import static champ.ChampMod.makeRelicOutlinePath; -import static champ.ChampMod.makeRelicPath; +import static champ.ChampMod.*; +import static collector.util.Wiz.atb; -public class ChampionCrownUpgraded extends CustomRelic { +public class ChampionCrownUpgraded extends CustomRelic implements OnAfterUseCardRelic { public static final String ID = ChampMod.makeID("ChampionCrownUpgraded"); private static final Texture IMG = TextureLoader.getTexture(makeRelicPath("UltimateChampionCrown.png")); @@ -25,15 +23,58 @@ public class ChampionCrownUpgraded extends CustomRelic { public ChampionCrownUpgraded() { - super(ID, IMG, OUTLINE, RelicTier.BOSS, LandingSound.MAGICAL); + super(ID, IMG, OUTLINE, RelicTier.BOSS, LandingSound.CLINK); + } + + //# of cards drawn + private static final int AMOUNT = 2; + +// @Override +// public void atBattleStart() { +// addToBot(new ChangeStanceAction(UltimateStance.STANCE_ID)); +// addToBot(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new UltimateFormPower(AMOUNT), AMOUNT)); +// } +// +// +// @Override +// public void onChangeStance(AbstractStance oldStance, AbstractStance newStance) { +// if (!newStance.ID.equals(NeutralStance.STANCE_ID) && !(oldStance.ID.equals(newStance.ID))) { +// flash(); +// atb(new DrawCardAction(AMOUNT)); +// } +// } + + + public void atTurnStart() { + this.counter = 0; } @Override - public void atBattleStart() { - addToBot(new ChangeStanceAction(UltimateStance.STANCE_ID)); - addToBot(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new UltimateFormPower(1), 1)); + public void onVictory() { + this.counter = 0; + } + + @Override + public void onAfterUseCard(AbstractCard c, UseCardAction var2) { + if (c.hasTag(ChampMod.FINISHER) && this.counter == 0) { + flash(); + this.addToTop(new RelicAboveCreatureAction(AbstractDungeon.player, this)); + atb(new DrawCardAction(AMOUNT)); + int x = AbstractDungeon.relicRng.random(1); + switch (x) { + case 0: + berserkOpen(); + break; + case 1: + defenseOpen(); + break; + } + this.counter = 1; + } } + + @Override public void obtain() { if (AbstractDungeon.player.hasRelic(ChampionCrown.ID)) { @@ -54,7 +95,21 @@ public boolean canSpawn() { @Override public String getUpdatedDescription() { - return DESCRIPTIONS[0]; + // Colorize the starter relic's name + String name = new ChampionCrown().name; + StringBuilder sb = new StringBuilder(); + if(Settings.language== Settings.GameLanguage.ZHS|| Settings.language== Settings.GameLanguage.ZHT){ + sb.append("[#").append(ChampMod.placeholderColor.toString()).append("]").append(name).append("[]"); + + }else { + for (String word : name.split(" ")) { + sb.append("[#").append(ChampMod.placeholderColor.toString()).append("]").append(word).append("[] "); + } + sb.setLength(sb.length() - 1); + sb.append("[#").append(ChampMod.placeholderColor.toString()).append("]"); + } + + return DESCRIPTIONS[0] + sb + DESCRIPTIONS[1] + AMOUNT + DESCRIPTIONS[2]; } } diff --git a/src/main/java/champ/relics/DefensiveTrainingManual.java b/src/main/java/champ/relics/DefensiveTrainingManual.java index 151395183..d431efe16 100644 --- a/src/main/java/champ/relics/DefensiveTrainingManual.java +++ b/src/main/java/champ/relics/DefensiveTrainingManual.java @@ -4,9 +4,6 @@ import champ.ChampMod; import downfall.util.TextureLoader; import com.badlogic.gdx.graphics.Texture; -import com.megacrit.cardcrawl.actions.common.GainBlockAction; -import com.megacrit.cardcrawl.dungeons.AbstractDungeon; -import com.megacrit.cardcrawl.stances.NeutralStance; import static champ.ChampMod.makeRelicOutlinePath; import static champ.ChampMod.makeRelicPath; @@ -17,13 +14,17 @@ public class DefensiveTrainingManual extends CustomRelic { private static final Texture IMG = TextureLoader.getTexture(makeRelicPath("DefensiveManual.png")); private static final Texture OUTLINE = TextureLoader.getTexture(makeRelicOutlinePath("DefensiveManual.png")); + //extra Block gain + public static final int OOMPH = 3; + + //DefensiveStance.java line 85 public DefensiveTrainingManual() { - super(ID, IMG, OUTLINE, RelicTier.COMMON, LandingSound.MAGICAL); + super(ID, IMG, OUTLINE, RelicTier.UNCOMMON, LandingSound.FLAT); } @Override public String getUpdatedDescription() { - return DESCRIPTIONS[0]; + return DESCRIPTIONS[0] + OOMPH + DESCRIPTIONS[1]; } } diff --git a/src/main/java/champ/relics/DeflectingBracers.java b/src/main/java/champ/relics/DeflectingBracers.java index 5c6dd300b..adfee313c 100644 --- a/src/main/java/champ/relics/DeflectingBracers.java +++ b/src/main/java/champ/relics/DeflectingBracers.java @@ -4,9 +4,6 @@ import champ.ChampMod; import downfall.util.TextureLoader; import com.badlogic.gdx.graphics.Texture; -import com.megacrit.cardcrawl.actions.common.GainBlockAction; -import com.megacrit.cardcrawl.dungeons.AbstractDungeon; -import com.megacrit.cardcrawl.stances.NeutralStance; import static champ.ChampMod.makeRelicOutlinePath; import static champ.ChampMod.makeRelicPath; diff --git a/src/main/java/champ/relics/DuelingGlove.java b/src/main/java/champ/relics/DuelingGlove.java index 12896c8b6..25c948745 100644 --- a/src/main/java/champ/relics/DuelingGlove.java +++ b/src/main/java/champ/relics/DuelingGlove.java @@ -5,10 +5,12 @@ import com.badlogic.gdx.graphics.Texture; import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.core.AbstractCreature; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.VulnerablePower; import downfall.util.TextureLoader; +import hermit.cards.Malice; import static champ.ChampMod.makeRelicOutlinePath; import static champ.ChampMod.makeRelicPath; @@ -26,9 +28,20 @@ public DuelingGlove() { @Override public void onPlayCard(AbstractCard c, AbstractMonster m) { System.out.println(c.type); - if (m != null) { - if (!m.hasPower(VulnerablePower.POWER_ID) && (c.target == AbstractCard.CardTarget.ENEMY || c.target == AbstractCard.CardTarget.SELF_AND_ENEMY) && c.type == AbstractCard.CardType.ATTACK) { - AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(m, AbstractDungeon.player, new VulnerablePower(m, 1, false), 1)); + //Malice is a "single target" card and the Vulnerable will even come BEFORE the card deals damage. TWO bugs! + if (!(c instanceof Malice)) { + if (m != null) { + if (!m.hasPower(VulnerablePower.POWER_ID) && (c.target == AbstractCard.CardTarget.ENEMY || c.target == AbstractCard.CardTarget.SELF_AND_ENEMY) && c.type == AbstractCard.CardType.ATTACK) { + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(m, AbstractDungeon.player, new VulnerablePower(m, 1, false), 1)); + } + } + } + } + + public void onTrigger(AbstractCreature target) { + if (target != null) { + if (!target.hasPower(VulnerablePower.POWER_ID)) { + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(target, AbstractDungeon.player, new VulnerablePower(target, 1, false), 1)); } } } diff --git a/src/main/java/champ/relics/FightingForDummies.java b/src/main/java/champ/relics/FightingForDummies.java index ab6448e8e..facafcef2 100644 --- a/src/main/java/champ/relics/FightingForDummies.java +++ b/src/main/java/champ/relics/FightingForDummies.java @@ -2,13 +2,10 @@ import basemod.abstracts.CustomRelic; import champ.ChampMod; -import champ.actions.OpenerReduceCostAction; -import champ.util.OnOpenerSubscriber; -import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; -import com.megacrit.cardcrawl.powers.DrawCardNextTurnPower; +import com.megacrit.cardcrawl.actions.common.DrawCardAction; +import com.megacrit.cardcrawl.actions.common.RelicAboveCreatureAction; import downfall.util.TextureLoader; import com.badlogic.gdx.graphics.Texture; -import com.megacrit.cardcrawl.actions.common.GainBlockAction; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.stances.NeutralStance; @@ -22,13 +19,36 @@ public class FightingForDummies extends CustomRelic { private static final Texture OUTLINE = TextureLoader.getTexture(makeRelicOutlinePath("FightingForDummies.png")); public FightingForDummies() { - super(ID, IMG, OUTLINE, RelicTier.COMMON, LandingSound.MAGICAL); + super(ID, IMG, OUTLINE, RelicTier.SHOP, LandingSound.MAGICAL); } + public boolean firstTurn = false; + public boolean activated = false; + //Dolphin's Style Guide + + @Override + public void atPreBattle() { + firstTurn = true; + activated = false; + } + + @Override + public void atTurnStartPostDraw() { + if (firstTurn == false) { + if (activated) { + this.flash(); + this.addToBot(new RelicAboveCreatureAction(AbstractDungeon.player, this)); + addToBot(new DrawCardAction(AbstractDungeon.player, 1)); + } + } + this.firstTurn = false; + activated = false; + } + @Override public void onPlayerEndTurn() { - if (AbstractDungeon.player.stance instanceof NeutralStance){ - addToBot(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new DrawCardNextTurnPower(AbstractDungeon.player, 1), 1)); + if (AbstractDungeon.player.stance instanceof NeutralStance) { + activated = true; } } diff --git a/src/main/java/champ/relics/GladiatorsBookOfMartialProwess.java b/src/main/java/champ/relics/GladiatorsBookOfMartialProwess.java index 08a08488e..17e8cb257 100644 --- a/src/main/java/champ/relics/GladiatorsBookOfMartialProwess.java +++ b/src/main/java/champ/relics/GladiatorsBookOfMartialProwess.java @@ -5,13 +5,11 @@ import downfall.util.TextureLoader; import com.badlogic.gdx.graphics.Texture; import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; -import com.megacrit.cardcrawl.actions.common.GainBlockAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.DexterityPower; import com.megacrit.cardcrawl.powers.StrengthPower; -import com.megacrit.cardcrawl.stances.NeutralStance; import static champ.ChampMod.*; @@ -27,7 +25,7 @@ public class GladiatorsBookOfMartialProwess extends CustomRelic { private boolean hasPlayedFinisher; public GladiatorsBookOfMartialProwess() { - super(ID, IMG, OUTLINE, RelicTier.RARE, LandingSound.MAGICAL); + super(ID, IMG, OUTLINE, RelicTier.RARE, LandingSound.FLAT); } @Override diff --git a/src/main/java/champ/relics/LiftRelic.java b/src/main/java/champ/relics/LiftRelic.java index f2c1cee62..62e2f6e94 100644 --- a/src/main/java/champ/relics/LiftRelic.java +++ b/src/main/java/champ/relics/LiftRelic.java @@ -1,8 +1,3 @@ -// -// Source code recreated from a .class file by IntelliJ IDEA -// (powered by Fernflower decompiler) -// - package champ.relics; import basemod.abstracts.CustomRelic; @@ -12,9 +7,6 @@ import com.megacrit.cardcrawl.actions.common.RelicAboveCreatureAction; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.powers.StrengthPower; -import com.megacrit.cardcrawl.relics.AbstractRelic; -import com.megacrit.cardcrawl.relics.AbstractRelic.LandingSound; -import com.megacrit.cardcrawl.relics.AbstractRelic.RelicTier; import downfall.util.TextureLoader; import static champ.ChampMod.makeRelicOutlinePath; @@ -24,19 +16,21 @@ public class LiftRelic extends CustomRelic { public static final String ID = ChampMod.makeID("LiftRelic"); private static final Texture IMG = TextureLoader.getTexture(makeRelicPath("LiftRelic.png")); private static final Texture OUTLINE = TextureLoader.getTexture(makeRelicOutlinePath("LiftRelic.png")); - private static final int STR = 1; public LiftRelic() { super(ID, IMG, OUTLINE, RelicTier.SPECIAL, LandingSound.CLINK); } + //Strength at the start of combat + private static final int STR = 1; + public String getUpdatedDescription() { - return this.DESCRIPTIONS[0] + 1 + this.DESCRIPTIONS[1]; + return this.DESCRIPTIONS[0] + STR + this.DESCRIPTIONS[1]; } public void atBattleStart() { this.flash(); - this.addToTop(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new StrengthPower(AbstractDungeon.player, 1), 1)); + this.addToTop(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new StrengthPower(AbstractDungeon.player, STR), STR)); this.addToTop(new RelicAboveCreatureAction(AbstractDungeon.player, this)); } } \ No newline at end of file diff --git a/src/main/java/champ/relics/PowerArmor.java b/src/main/java/champ/relics/PowerArmor.java index af9536d2a..d2c1c80db 100644 --- a/src/main/java/champ/relics/PowerArmor.java +++ b/src/main/java/champ/relics/PowerArmor.java @@ -1,29 +1,62 @@ package champ.relics; -import basemod.BaseMod; import basemod.abstracts.CustomRelic; import champ.ChampMod; +import champ.powers.CounterPower; +import com.evacipated.cardcrawl.mod.stslib.relics.OnReceivePowerRelic; +import com.megacrit.cardcrawl.actions.common.RelicAboveCreatureAction; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.powers.AbstractPower; +import com.megacrit.cardcrawl.powers.watcher.VigorPower; import downfall.util.TextureLoader; import com.badlogic.gdx.graphics.Texture; -import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import static champ.ChampMod.makeRelicOutlinePath; import static champ.ChampMod.makeRelicPath; +import static hermit.util.Wiz.pwrAmt; -public class PowerArmor extends CustomRelic { +public class PowerArmor extends CustomRelic implements OnReceivePowerRelic { public static final String ID = ChampMod.makeID("PowerArmor"); private static final Texture IMG = TextureLoader.getTexture(makeRelicPath("PowerArmor.png")); private static final Texture OUTLINE = TextureLoader.getTexture(makeRelicOutlinePath("PowerArmor.png")); + //Power Armor + + //Vigor / Counter Cap + public static final int CAP_RESOLVE_ETC = 10; + //debugging variable + public static int REMOVED = 0; + public PowerArmor() { - super(ID, IMG, OUTLINE, RelicTier.BOSS, LandingSound.MAGICAL); + super(ID, IMG, OUTLINE, RelicTier.BOSS, LandingSound.CLINK); + } + + @Override + public boolean onReceivePower(AbstractPower var1, AbstractCreature var2) { + if (var1.ID == VigorPower.POWER_ID || var1.ID == CounterPower.POWER_ID) { + if (pwrAmt(AbstractDungeon.player, var1.ID) >= CAP_RESOLVE_ETC) { + if (var1.amount > 0) { + onTrigger(var1.amount); + } + var1.amount = 0; + } + + if (var1.amount != 0) { + return true; + } + + return false; + } + + return true; } public void onEquip() { + REMOVED = 0; ++AbstractDungeon.player.energy.energyMaster; } @@ -31,9 +64,53 @@ public void onUnequip() { --AbstractDungeon.player.energy.energyMaster; } + //this should NEVER happen outside of Wreath of Flame or cross-mod stuff, but it's been a bug for centuries and + //I'm tired of seeing the bug reports so yeah + //I also want to catch any non vigor() applications inside this mod even though I think I just caught all of them + //including smoking barrel and gremlin wizard collectible + //also in case someone adds more by accident + //I have NO idea why trying to make it work via receivepowerrelic doesn't work either but it doesn't, trust me it doesn't work + //writing a patch for applypoweraction is also annoying + + //edit: I bit the bullet and decided to write a patch. + + //NukeVigorPatch + + //public void onTrigger(int amount) { + // if (amount > 0) { + // if (amount + pwrAmt(AbstractDungeon.player, VigorPower.POWER_ID) > CAP_RESOLVE_ETC) { + // flash(); + // addToTop(new RelicAboveCreatureAction(AbstractDungeon.player, this)); + // REMOVED = REMOVED + (CAP_RESOLVE_ETC - pwrAmt(AbstractDungeon.player, VigorPower.POWER_ID)); + // //System.out.println("DEBUG: REMOVED: " + REMOVED); + // addToTop(new ReducePowerAction(AbstractDungeon.player, AbstractDungeon.player, VigorPower.POWER_ID, - (CAP_RESOLVE_ETC - pwrAmt(AbstractDungeon.player, VigorPower.POWER_ID)))); + // } + // } + // } + // + // //this should literally never happen. + // public void onTrigger2(int amount) { + // if (amount > 0) { + // if (amount + pwrAmt(AbstractDungeon.player, CounterPower.POWER_ID) > CAP_RESOLVE_ETC) { + // flash(); + // addToTop(new RelicAboveCreatureAction(AbstractDungeon.player, this)); + // REMOVED = REMOVED + (CAP_RESOLVE_ETC - pwrAmt(AbstractDungeon.player, CounterPower.POWER_ID)); + // //System.out.println("DEBUG: REMOVED: " + REMOVED); + // addToTop(new ReducePowerAction(AbstractDungeon.player, AbstractDungeon.player, CounterPower.POWER_ID, -(CAP_RESOLVE_ETC - pwrAmt(AbstractDungeon.player, CounterPower.POWER_ID)))); + // } + // } + // } + + public void onTrigger (int amount) { + flash(); + this.addToTop(new RelicAboveCreatureAction(AbstractDungeon.player, this)); + REMOVED = REMOVED + amount; + //this.counter = REMOVED; + } + @Override public String getUpdatedDescription() { - return DESCRIPTIONS[0]; + return DESCRIPTIONS[0] + CAP_RESOLVE_ETC + DESCRIPTIONS[1]; } } diff --git a/src/main/java/champ/relics/RageAmulet.java b/src/main/java/champ/relics/RageAmulet.java new file mode 100644 index 000000000..f31f7934b --- /dev/null +++ b/src/main/java/champ/relics/RageAmulet.java @@ -0,0 +1,87 @@ +package champ.relics; + +import automaton.cards.Branch; +import basemod.abstracts.CustomRelic; +import champ.ChampMod; +import champ.cards.CrookedStrike; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.RelicAboveCreatureAction; +import com.megacrit.cardcrawl.actions.utility.UseCardAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.powers.AbstractPower; +import com.megacrit.cardcrawl.powers.StrengthPower; +import com.megacrit.cardcrawl.powers.watcher.VigorPower; +import downfall.util.TextureLoader; +import com.badlogic.gdx.graphics.Texture; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import hermit.util.Wiz; + +import static champ.ChampMod.makeRelicOutlinePath; +import static champ.ChampMod.makeRelicPath; + +public class RageAmulet extends CustomRelic { + + public static final String ID = ChampMod.makeID("RageAmulet"); + private static final Texture IMG = TextureLoader.getTexture(makeRelicPath("CrystallizedMud.png")); + private static final Texture OUTLINE = TextureLoader.getTexture(makeRelicOutlinePath("CrystallizedMud.png")); + int remainingVigor = 0; + private static final int VIGREQ = 8; + public RageAmulet() { + super(ID, IMG, OUTLINE, RelicTier.BOSS, LandingSound.HEAVY); + } + + @Override + public void atBattleStart() { + this.counter = 0; + } + + @Override + public void onVictory() { + remainingVigor = 0; + this.counter = -1; + } + + @Override + public void onUseCard(AbstractCard card, UseCardAction action) { + if (!(card instanceof CrookedStrike || card instanceof Branch)) { + if (card.type == AbstractCard.CardType.ATTACK && AbstractDungeon.player.hasPower(VigorPower.POWER_ID)) + addNextTurnPower(AbstractDungeon.player.getPower(VigorPower.POWER_ID)); + } + } + + public void onSpecificTrigger() { + addNextTurnPower(AbstractDungeon.player.getPower(VigorPower.POWER_ID)); + } + + public void addNextTurnPower(AbstractPower power) { + int found = power.amount; + int totaled = found / VIGREQ; + int finalized = totaled * 1; + boolean isVigor = (VigorPower.POWER_ID.equals(power.ID)); + + // Add remainder. + if (isVigor) { + remainingVigor += found % VIGREQ; + this.counter = remainingVigor; + } + // If remainder is beyond threshold, add to total and subtract. + if (remainingVigor >= VIGREQ) { + remainingVigor -= VIGREQ; + finalized += 1; + this.counter = remainingVigor; + } + + // Only do anything if the amount is greater than 0. + if (finalized > 0) { + this.flash(); + this.addToBot(new RelicAboveCreatureAction(AbstractDungeon.player, this)); + if (isVigor) + Wiz.atb(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new StrengthPower(AbstractDungeon.player, finalized), finalized)); + } + } + + @Override + public String getUpdatedDescription() { + return DESCRIPTIONS[0] + VIGREQ + DESCRIPTIONS[1]; + } +} diff --git a/src/main/java/champ/relics/SignatureFinisher.java b/src/main/java/champ/relics/SignatureFinisher.java index 355ca1dc7..d369ed4d5 100644 --- a/src/main/java/champ/relics/SignatureFinisher.java +++ b/src/main/java/champ/relics/SignatureFinisher.java @@ -6,32 +6,57 @@ import champ.ChampMod; import champ.patches.SignatureMovePatch; import com.badlogic.gdx.graphics.Texture; +import com.evacipated.cardcrawl.mod.stslib.relics.OnRemoveCardFromMasterDeckRelic; +import com.megacrit.cardcrawl.actions.common.RelicAboveCreatureAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.cards.CardGroup; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.helpers.FontHelper; import com.megacrit.cardcrawl.helpers.PowerTip; +import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.relics.AbstractRelic; import com.megacrit.cardcrawl.rooms.AbstractRoom; +import com.megacrit.cardcrawl.vfx.cardManip.ShowCardBrieflyEffect; import downfall.util.TextureLoader; import java.util.function.Predicate; import static champ.ChampMod.*; -public class SignatureFinisher extends CustomRelic implements CustomBottleRelic, CustomSavable { +public class SignatureFinisher extends CustomRelic implements CustomBottleRelic, CustomSavable, OnRemoveCardFromMasterDeckRelic { public static final String ID = ChampMod.makeID("SignatureFinisher"); private static final Texture IMG = TextureLoader.getTexture(makeRelicPath("SignatureMove.png")); private static final Texture OUTLINE = TextureLoader.getTexture(makeRelicOutlinePath("SignatureMove.png")); public AbstractCard card = null; - private boolean cardSelected = true; + public boolean cardSelected = false; + private boolean hasfinisher = false; + + private boolean cardRemoved = false; public SignatureFinisher() { super(ID, IMG, OUTLINE, RelicTier.RARE, LandingSound.MAGICAL); } + @Override + public void onPlayCard(AbstractCard card, AbstractMonster m) { + if (this.card != null && card.uuid.equals(this.card.uuid)) { + this.flash(); + } + } + + @Override + public void onRemoveCardFromMasterDeck(AbstractCard var1) { + if (this.card != null) { + if (var1.uuid == card.uuid) { + this.flash(); + this.grayscale = true; + setDescriptionAfterLoading(); + } + } + } + @Override public Predicate isOnCard() { return SignatureMovePatch.inSignatureMove::get; @@ -56,13 +81,49 @@ public void onLoad(Integer cardIndex) { if (card != null) { SignatureMovePatch.inSignatureMove.set(card, true); setDescriptionAfterLoading(); - card.cost = 0; - card.costForTurn = 0; - card.isCostModified = true; + //card.cost = 0; + //card.costForTurn = 0; + //card.isCostModified = true; } } } + @Override + public void atBattleStartPreDraw() { + if (!cardRemoved && cardSelected){ + boolean cardExists = false; + if (card!=null) { + for(AbstractCard c :AbstractDungeon.player.masterDeck.group){ + if (c.uuid==card.uuid){ + cardExists = true; + break; + } + } + } + if (!cardExists) { + cardRemoved = true; + tips.clear(); + this.description = this.DESCRIPTIONS[4]; + initializeTips(); + } + } + if (cardRemoved) { + return; + } + super.atBattleStartPreDraw(); + counter = 0; + for (AbstractCard c : AbstractDungeon.player.drawPile.group) { + if (SignatureMovePatch.inSignatureMove.get(card)) { + addToBot(new RelicAboveCreatureAction(AbstractDungeon.player, this)); + c.cost = 0; + c.costForTurn = 0; + c.isCostModified = true; + break; + } + } + } + + @Override public void onEquip() { cardSelected = false; @@ -89,9 +150,11 @@ public void onEquip() { public void onUnequip() { if (card != null) { AbstractCard cardInDeck = AbstractDungeon.player.masterDeck.getSpecificCard(card); + if (cardInDeck != null) { SignatureMovePatch.inSignatureMove.set(cardInDeck, false); } + } } @@ -102,24 +165,69 @@ public void update() { if (!cardSelected && !AbstractDungeon.gridSelectScreen.selectedCards.isEmpty()) { cardSelected = true; card = AbstractDungeon.gridSelectScreen.selectedCards.get(0); - card.cost = 0; - card.costForTurn = 0; - card.isCostModified = true; +// card.cost = 0; +// card.costForTurn = 0; +// card.isCostModified = true; SignatureMovePatch.inSignatureMove.set(card, true); AbstractDungeon.getCurrRoom().phase = AbstractRoom.RoomPhase.COMPLETE; - AbstractDungeon.gridSelectScreen.selectedCards.clear(); + + AbstractDungeon.topLevelEffects.add(new ShowCardBrieflyEffect(card.makeStatEquivalentCopy())); + setDescriptionAfterLoading(); } } - private void setDescriptionAfterLoading() { - this.description = FontHelper.colorString(this.card.name, "y") + this.DESCRIPTIONS[2]; - tips.clear(); - tips.add(new PowerTip(name, description)); - initializeTips(); + +// @Override +// public void onRemoveCardFromMasterDeck(AbstractCard var1){ +// if (var1.uuid == card.uuid){ +// setDescriptionAfterLoading(); +// } +// } + + + public void setDescriptionAfterLoading() { + boolean cardExists = false; + + if (cardSelected) { + if (card != null) { + for (AbstractCard c : AbstractDungeon.player.masterDeck.group) { + if (c.uuid == card.uuid) { + cardExists = true; + break; + } + } + } + + if (!cardExists) { + tips.clear(); + this.description = this.DESCRIPTIONS[3]; + this.grayscale = true; + initializeTips(); + } + + if (cardExists) { + this.description = FontHelper.colorString(this.card.name, "y") + this.DESCRIPTIONS[2]; + tips.clear(); + tips.add(new PowerTip(name, description)); + initializeTips(); + this.grayscale = false; + } + } } + + public boolean canSpawn() { + for (AbstractCard c : CardGroup.getGroupWithoutBottledCards(AbstractDungeon.player.masterDeck).group) { + if (c.hasTag(FINISHER)) { + hasfinisher = true; + } + } + return hasfinisher; + } + + @Override public AbstractRelic makeCopy() { return new SignatureFinisher(); diff --git a/src/main/java/champ/relics/SpectersHand.java b/src/main/java/champ/relics/SpectersHand.java index cbece2c18..49ed9ffaa 100644 --- a/src/main/java/champ/relics/SpectersHand.java +++ b/src/main/java/champ/relics/SpectersHand.java @@ -1,18 +1,16 @@ package champ.relics; import basemod.abstracts.CustomRelic; -import basemod.cardmods.ExhaustMod; -import basemod.helpers.CardModifierManager; import champ.ChampMod; import champ.cards.Defend; import champ.cards.Strike; import com.badlogic.gdx.graphics.Texture; -import com.megacrit.cardcrawl.actions.common.MakeTempCardInHandAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.stances.AbstractStance; import com.megacrit.cardcrawl.stances.NeutralStance; import downfall.util.TextureLoader; +import expansioncontent.actions.EchoACardAction; import static champ.ChampMod.makeRelicOutlinePath; import static champ.ChampMod.makeRelicPath; @@ -34,14 +32,10 @@ public void onChangeStance(AbstractStance oldStance, AbstractStance newStance) { flash(); if (AbstractDungeon.cardRng.randomBoolean()) { AbstractCard c2 = new Strike(); - CardModifierManager.addModifier(c2, new ExhaustMod()); - c2.freeToPlayOnce = true; - addToBot(new MakeTempCardInHandAction(c2)); + addToBot(new EchoACardAction(c2, true)); } else { AbstractCard c2 = new Defend(); - CardModifierManager.addModifier(c2, new ExhaustMod()); - c2.freeToPlayOnce = true; - addToBot(new MakeTempCardInHandAction(c2)); + addToBot(new EchoACardAction(c2, true)); } } diff --git a/src/main/java/champ/stances/AbstractChampStance.java b/src/main/java/champ/stances/AbstractChampStance.java index 1104561c5..55fb28cdc 100644 --- a/src/main/java/champ/stances/AbstractChampStance.java +++ b/src/main/java/champ/stances/AbstractChampStance.java @@ -2,41 +2,22 @@ import champ.ChampChar; import champ.ChampMod; -import champ.actions.FatigueHpLossAction; -import champ.cards.AbstractChampCard; -import champ.util.OnOpenerSubscriber; -import champ.util.OnTechniqueSubscriber; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.math.Interpolation; -import com.megacrit.cardcrawl.actions.AbstractGameAction; -import com.megacrit.cardcrawl.actions.animations.VFXAction; -import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; -import com.megacrit.cardcrawl.actions.watcher.ChangeStanceAction; import com.megacrit.cardcrawl.cards.AbstractCard; -import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.helpers.Hitbox; import com.megacrit.cardcrawl.helpers.TipHelper; import com.megacrit.cardcrawl.helpers.input.InputHelper; -import com.megacrit.cardcrawl.powers.AbstractPower; -import com.megacrit.cardcrawl.relics.AbstractRelic; import com.megacrit.cardcrawl.stances.AbstractStance; -import com.megacrit.cardcrawl.stances.NeutralStance; -import com.megacrit.cardcrawl.vfx.BorderFlashEffect; -import com.megacrit.cardcrawl.vfx.combat.IntenseZoomEffect; import downfall.util.TextureLoader; -import slimebound.SlimeboundMod; import theHexaghost.GhostflameHelper; import theHexaghost.HexaMod; -import theHexaghost.ghostflames.AbstractGhostflame; -import theHexaghost.vfx.MyOrb; - -import static theHexaghost.GhostflameHelper.activeGhostFlame; public abstract class AbstractChampStance extends AbstractStance { diff --git a/src/main/java/champ/stances/BerserkerStance.java b/src/main/java/champ/stances/BerserkerStance.java index 48b4fd660..355c015b1 100644 --- a/src/main/java/champ/stances/BerserkerStance.java +++ b/src/main/java/champ/stances/BerserkerStance.java @@ -8,18 +8,13 @@ import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.math.MathUtils; -import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; -import com.megacrit.cardcrawl.actions.common.HealAction; -import com.megacrit.cardcrawl.actions.common.RemoveSpecificPowerAction; import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; -import com.megacrit.cardcrawl.powers.AbstractPower; import com.megacrit.cardcrawl.powers.StrengthPower; import com.megacrit.cardcrawl.vfx.stance.StanceAuraEffect; import guardian.vfx.DefensiveModeStanceParticleEffect; -import static champ.ChampMod.fatigue; import static champ.ChampMod.vigor; public class BerserkerStance extends AbstractChampStance { diff --git a/src/main/java/champ/stances/DefensiveStance.java b/src/main/java/champ/stances/DefensiveStance.java index f14dbda52..53f1a8ccf 100644 --- a/src/main/java/champ/stances/DefensiveStance.java +++ b/src/main/java/champ/stances/DefensiveStance.java @@ -81,7 +81,7 @@ public static int amount() { public static int finisherAmount() { int x = 8; if (AbstractDungeon.player.hasRelic(DefensiveTrainingManual.ID)) { - x += 5; + x += DefensiveTrainingManual.OOMPH; } return x; } diff --git a/src/main/java/champ/util/OpenerModBerserker.java b/src/main/java/champ/util/OpenerModBerserker.java index c669d57ad..48c827225 100644 --- a/src/main/java/champ/util/OpenerModBerserker.java +++ b/src/main/java/champ/util/OpenerModBerserker.java @@ -12,7 +12,6 @@ import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.relics.AbstractRelic; import com.megacrit.cardcrawl.stances.NeutralStance; -import slimebound.SlimeboundMod; public class OpenerModBerserker extends AbstractCardModifier { diff --git a/src/main/java/champ/util/OpenerModDefensive.java b/src/main/java/champ/util/OpenerModDefensive.java index 520184982..c338305e9 100644 --- a/src/main/java/champ/util/OpenerModDefensive.java +++ b/src/main/java/champ/util/OpenerModDefensive.java @@ -2,7 +2,6 @@ import basemod.abstracts.AbstractCardModifier; import champ.ChampMod; -import champ.stances.BerserkerStance; import champ.stances.DefensiveStance; import champ.stances.UltimateStance; import com.megacrit.cardcrawl.actions.utility.UseCardAction; @@ -13,7 +12,6 @@ import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.relics.AbstractRelic; import com.megacrit.cardcrawl.stances.NeutralStance; -import slimebound.SlimeboundMod; public class OpenerModDefensive extends AbstractCardModifier { diff --git a/src/main/java/champ/util/TechniqueMod.java b/src/main/java/champ/util/TechniqueMod.java index 3d7e6a76e..d500ea38d 100644 --- a/src/main/java/champ/util/TechniqueMod.java +++ b/src/main/java/champ/util/TechniqueMod.java @@ -3,14 +3,12 @@ import basemod.abstracts.AbstractCardModifier; import basemod.helpers.CardModifierManager; import champ.ChampMod; -import champ.cards.AbstractChampCard; import champ.stances.AbstractChampStance; import com.megacrit.cardcrawl.actions.utility.UseCardAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.core.AbstractCreature; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; -import sneckomod.SneckoMod; public class TechniqueMod extends AbstractCardModifier { diff --git a/src/main/java/champ/vfx/DaggerSprayAnyColorEffect.java b/src/main/java/champ/vfx/DaggerSprayAnyColorEffect.java index bab5f5e8b..c732e1ec2 100644 --- a/src/main/java/champ/vfx/DaggerSprayAnyColorEffect.java +++ b/src/main/java/champ/vfx/DaggerSprayAnyColorEffect.java @@ -1,8 +1,3 @@ -// -// Source code recreated from a .class file by IntelliJ IDEA -// (powered by Fernflower decompiler) -// - package champ.vfx; import com.badlogic.gdx.graphics.Color; diff --git a/src/main/java/champ/vfx/DaggerThrowAnyColorEffect.java b/src/main/java/champ/vfx/DaggerThrowAnyColorEffect.java index 305ba35e6..a8fa12c95 100644 --- a/src/main/java/champ/vfx/DaggerThrowAnyColorEffect.java +++ b/src/main/java/champ/vfx/DaggerThrowAnyColorEffect.java @@ -1,8 +1,3 @@ -// -// Source code recreated from a .class file by IntelliJ IDEA -// (powered by Fernflower decompiler) -// - package champ.vfx; import com.badlogic.gdx.Gdx; diff --git a/src/main/java/champ/vfx/ExecuteEffect.java b/src/main/java/champ/vfx/ExecuteEffect.java index 9d0aefa37..8fd74fc20 100644 --- a/src/main/java/champ/vfx/ExecuteEffect.java +++ b/src/main/java/champ/vfx/ExecuteEffect.java @@ -1,13 +1,7 @@ package champ.vfx; -import basemod.ReflectionHacks; -import com.badlogic.gdx.Graphics; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.megacrit.cardcrawl.core.AbstractCreature; -import com.megacrit.cardcrawl.dungeons.AbstractDungeon; -import com.megacrit.cardcrawl.vfx.PetalEffect; - -import java.util.ArrayList; public class ExecuteEffect extends com.megacrit.cardcrawl.vfx.AbstractGameEffect { private float timer = 0.1F; diff --git a/src/main/java/champ/vfx/FlyingDaggerAnyColorEffect.java b/src/main/java/champ/vfx/FlyingDaggerAnyColorEffect.java index 82f3aa62a..4c80273f8 100644 --- a/src/main/java/champ/vfx/FlyingDaggerAnyColorEffect.java +++ b/src/main/java/champ/vfx/FlyingDaggerAnyColorEffect.java @@ -1,14 +1,11 @@ package champ.vfx; import com.badlogic.gdx.Gdx; -import com.badlogic.gdx.Graphics; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.graphics.g2d.TextureAtlas; -import com.badlogic.gdx.graphics.g2d.TextureAtlas.AtlasRegion; import com.badlogic.gdx.math.MathUtils; import com.badlogic.gdx.math.Vector2; -import com.megacrit.cardcrawl.audio.SoundMaster; import com.megacrit.cardcrawl.core.CardCrawlGame; public class FlyingDaggerAnyColorEffect extends com.megacrit.cardcrawl.vfx.AbstractGameEffect { diff --git a/src/main/java/champ/vfx/SelfSpikesEffect.java b/src/main/java/champ/vfx/SelfSpikesEffect.java index 904c47846..51c7a4dc6 100644 --- a/src/main/java/champ/vfx/SelfSpikesEffect.java +++ b/src/main/java/champ/vfx/SelfSpikesEffect.java @@ -1,13 +1,7 @@ -// -// Source code recreated from a .class file by IntelliJ IDEA -// (powered by Fernflower decompiler) -// - package champ.vfx; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.g2d.SpriteBatch; -import com.badlogic.gdx.math.MathUtils; import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.vfx.AbstractGameEffect; diff --git a/src/main/java/champ/vfx/StanceDanceEffect.java b/src/main/java/champ/vfx/StanceDanceEffect.java index f11cdf9fd..f1214c486 100644 --- a/src/main/java/champ/vfx/StanceDanceEffect.java +++ b/src/main/java/champ/vfx/StanceDanceEffect.java @@ -1,14 +1,10 @@ package champ.vfx; -import basemod.ReflectionHacks; -import com.badlogic.gdx.Graphics; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.megacrit.cardcrawl.core.AbstractCreature; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.vfx.PetalEffect; -import java.util.ArrayList; - public class StanceDanceEffect extends com.megacrit.cardcrawl.vfx.AbstractGameEffect { private float timer = 0.1F; private float timerFlip = 0F; diff --git a/src/main/java/charbosses/actions/orb/EnemyDecreaseMaxOrbAction.java b/src/main/java/charbosses/actions/orb/EnemyDecreaseMaxOrbAction.java new file mode 100644 index 000000000..d295b7fcf --- /dev/null +++ b/src/main/java/charbosses/actions/orb/EnemyDecreaseMaxOrbAction.java @@ -0,0 +1,25 @@ +package charbosses.actions.orb; + + +import charbosses.bosses.AbstractCharBoss; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.core.Settings; + +public class EnemyDecreaseMaxOrbAction extends AbstractGameAction { + public EnemyDecreaseMaxOrbAction(int slotIncrease) { + this.duration = Settings.ACTION_DUR_FAST; + this.amount = slotIncrease; + this.actionType = ActionType.BLOCK; + } + + public void update() { + if (this.duration == Settings.ACTION_DUR_FAST) { + for(int i = 0; i < this.amount; ++i) { + AbstractCharBoss.boss.decreaseMaxOrbSlots(1); + } + } + + this.tickDuration(); + } +} + diff --git a/src/main/java/charbosses/actions/orb/EnemyIncreaseMaxOrbAction.java b/src/main/java/charbosses/actions/orb/EnemyIncreaseMaxOrbAction.java index 424128a0b..3ac723ed0 100644 --- a/src/main/java/charbosses/actions/orb/EnemyIncreaseMaxOrbAction.java +++ b/src/main/java/charbosses/actions/orb/EnemyIncreaseMaxOrbAction.java @@ -3,17 +3,13 @@ import charbosses.bosses.AbstractCharBoss; import com.megacrit.cardcrawl.actions.AbstractGameAction; -import com.megacrit.cardcrawl.actions.AbstractGameAction.ActionType; import com.megacrit.cardcrawl.core.Settings; -import com.megacrit.cardcrawl.dungeons.AbstractDungeon; - public class EnemyIncreaseMaxOrbAction extends AbstractGameAction { public EnemyIncreaseMaxOrbAction(int slotIncrease) { this.duration = Settings.ACTION_DUR_FAST; this.amount = slotIncrease; this.actionType = ActionType.BLOCK; } - public void update() { if (this.duration == Settings.ACTION_DUR_FAST) { for(int i = 0; i < this.amount; ++i) { diff --git a/src/main/java/charbosses/actions/orb/EnemyRemoveOrbAction.java b/src/main/java/charbosses/actions/orb/EnemyRemoveOrbAction.java new file mode 100644 index 000000000..ee6984b70 --- /dev/null +++ b/src/main/java/charbosses/actions/orb/EnemyRemoveOrbAction.java @@ -0,0 +1,30 @@ +package charbosses.actions.orb; + +import charbosses.bosses.AbstractCharBoss; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.core.Settings; + +public class EnemyRemoveOrbAction extends AbstractGameAction { + private int orbCount; + + public EnemyRemoveOrbAction(final int amount) { + if (Settings.FAST_MODE) { + this.duration = Settings.ACTION_DUR_XFAST; + } else { + this.duration = Settings.ACTION_DUR_FAST; + } + this.duration = this.startDuration; + this.orbCount = amount; + this.actionType = ActionType.DAMAGE; + } + + @Override + public void update() { + if (this.duration == this.startDuration) { + for (int i = 0; i < this.orbCount; ++i) { + AbstractCharBoss.boss.removeNextOrb(); + } + } + this.tickDuration(); + } +} diff --git a/src/main/java/charbosses/bosses/AbstractCharBoss.java b/src/main/java/charbosses/bosses/AbstractCharBoss.java index c6e4d0d42..9a950bd93 100644 --- a/src/main/java/charbosses/bosses/AbstractCharBoss.java +++ b/src/main/java/charbosses/bosses/AbstractCharBoss.java @@ -32,6 +32,9 @@ import charbosses.ui.EnemyEnergyPanel; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.math.MathUtils; +import com.evacipated.cardcrawl.mod.stslib.patches.BindingPatches; +import com.evacipated.cardcrawl.mod.stslib.patches.BlockModifierPatches; +import com.evacipated.cardcrawl.mod.stslib.patches.DamageModifierPatches; import com.evacipated.cardcrawl.mod.stslib.powers.StunMonsterPower; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.utility.WaitAction; @@ -41,6 +44,7 @@ import com.megacrit.cardcrawl.cards.DamageInfo; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.characters.AbstractPlayer.PlayerClass; +import com.megacrit.cardcrawl.core.AbstractCreature; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; @@ -135,6 +139,7 @@ public AbstractCharBoss(String name, String id, int maxHealth, float hb_x, float this.stance = new EnNeutralStance(); this.orbs = new ArrayList(); this.relics = new ArrayList(); + type = EnemyType.BOSS; } @Override @@ -146,6 +151,7 @@ public void init() { super.init(); this.preBattlePrep(); AbstractCharBoss.finishedSetup = true; + this.type = EnemyType.BOSS; } @Override @@ -344,6 +350,9 @@ public void startTurn() { } public ArrayList getThisTurnCards() { + if (chosenArchetype == null) { + return new ArrayList<>(); + } return chosenArchetype.getThisTurnCards(); } @@ -415,7 +424,6 @@ public void update() { cB.refreshIntentHbLocation(); } - //TODO Add a way for create a hidden attack intent for the Boss if it intends to play an Attack. } }); } @@ -667,17 +675,31 @@ public int getIntentDmg() { int totalIntentDmg = -1; for (AbstractCard c : this.hand.group) { AbstractBossCard cB = (AbstractBossCard) c; - if (cB.intentDmg > 0 && (!cB.bossDarkened || AbstractDungeon.player.hasRelic(RunicDome.ID))) { - if (totalIntentDmg == -1) { - totalIntentDmg = 0; + if (cB.type == AbstractCard.CardType.ATTACK) { + if (cB.intentDmg > 0 && (!cB.bossDarkened || AbstractDungeon.player.hasRelic(RunicDome.ID))) { + if (totalIntentDmg == -1) { + totalIntentDmg = 0; + } + totalIntentDmg += cB.intentDmg; } - totalIntentDmg += cB.intentDmg; } } return totalIntentDmg; } public int getIntentBaseDmg() { + int totalIntentDmg = -1; + for (AbstractCard c : this.hand.group) { + AbstractBossCard cB = (AbstractBossCard) c; + if (cB.type == AbstractCard.CardType.ATTACK) { + if (cB.intentDmg > 0) { + if (totalIntentDmg == -1) { + totalIntentDmg = 0; + } + totalIntentDmg += cB.intentDmg; + } + } + } return getIntentDmg(); } @@ -1005,74 +1027,89 @@ public void combatUpdate() { public void onPlayAttackCardSound() { } - - @Override - public void damage(final DamageInfo info) { - int damageAmount = info.output; - boolean hadBlock = true; - if (this.currentBlock == 0) { - hadBlock = false; - } - if (damageAmount < 0) { - damageAmount = 0; - } - if (damageAmount > 1 && this.hasPower(IntangiblePower.POWER_ID)) { - damageAmount = 1; - } - final boolean weakenedToZero = damageAmount == 0; - damageAmount = this.decrementBlock(info, damageAmount); - ////SlimeboundMod.logger.info(info.owner + " pre damage about to apply relics"); - if (info.owner == this) { - for (final AbstractRelic r : this.relics) { - ////SlimeboundMod.logger.info(r.name + " onAttackToChange firing"); - damageAmount = r.onAttackToChangeDamage(info, damageAmount); +//start paste here +@Override +public void damage(final DamageInfo info) { + BindingPatches.DisableReactionaryActionBinding.disableBefore((AbstractCreature) this); + int damageAmount = info.output; + boolean hadBlock = true; + if (this.currentBlock == 0) { + hadBlock = false; + } + if (damageAmount < 0) { + damageAmount = 0; + } + if (damageAmount > 1 && this.hasPower(IntangiblePower.POWER_ID)) { + damageAmount = 1; + } + final boolean weakenedToZero = damageAmount == 0; + damageAmount = this.decrementBlock(info, damageAmount); + ////SlimeboundMod.logger.info(info.owner + " pre damage about to apply relics"); + if (info.owner == this) { + for (final AbstractRelic r : this.relics) { + ////SlimeboundMod.logger.info(r.name + " onAttackToChange firing"); + damageAmount = r.onAttackToChangeDamage(info, damageAmount); - } } - if (info.owner == AbstractDungeon.player) { - for (final AbstractRelic r : AbstractDungeon.player.relics) { - damageAmount = r.onAttackToChangeDamage(info, damageAmount); - } + } + if (info.owner == AbstractDungeon.player) { + for (final AbstractRelic r : AbstractDungeon.player.relics) { + damageAmount = r.onAttackToChangeDamage(info, damageAmount); } - if (info.owner != null) { - for (final AbstractPower p : info.owner.powers) { - damageAmount = p.onAttackToChangeDamage(info, damageAmount); - } + } + if (info.owner != null) { + for (final AbstractPower p : info.owner.powers) { + damageAmount = p.onAttackToChangeDamage(info, damageAmount); } + } + + int[] arrayOfInt2 = new int[1]; + arrayOfInt2[0] = damageAmount; + DamageModifierPatches.OnAttackMonster.toChangeDamage(this, info, arrayOfInt2); + damageAmount = arrayOfInt2[0]; + + for (final AbstractRelic r : this.relics) { + damageAmount = r.onAttackedToChangeDamage(info, damageAmount); + } + for (final AbstractPower p : this.powers) { + damageAmount = p.onAttackedToChangeDamage(info, damageAmount); + } + if (info.owner == this) { for (final AbstractRelic r : this.relics) { - damageAmount = r.onAttackedToChangeDamage(info, damageAmount); + r.onAttack(info, damageAmount, this); } - for (final AbstractPower p : this.powers) { - damageAmount = p.onAttackedToChangeDamage(info, damageAmount); - } - if (info.owner == this) { - for (final AbstractRelic r : this.relics) { - r.onAttack(info, damageAmount, this); - } + } + + //paste section 2 + + if (info.owner == AbstractDungeon.player) { + for (final AbstractRelic r : AbstractDungeon.player.relics) { + r.onAttack(info, damageAmount, this); } - if (info.owner == AbstractDungeon.player) { - for (final AbstractRelic r : AbstractDungeon.player.relics) { - r.onAttack(info, damageAmount, this); - } + } + DamageModifierPatches.OnAttackMonster.onAttack(this, info, damageAmount); + + if (info.owner != null) { + BlockModifierPatches.OnAttackMonster.onAttack(this, info, damageAmount); + for (final AbstractPower p : info.owner.powers) { + p.onAttack(info, damageAmount, this); } - if (info.owner != null) { - for (final AbstractPower p : info.owner.powers) { - p.onAttack(info, damageAmount, this); - } - for (final AbstractPower p : this.powers) { - damageAmount = p.onAttacked(info, damageAmount); - } - for (final AbstractRelic r : this.relics) { - damageAmount = r.onAttacked(info, damageAmount); - } + for (final AbstractPower p : this.powers) { + damageAmount = p.onAttacked(info, damageAmount); } for (final AbstractRelic r : this.relics) { - damageAmount = r.onLoseHpLast(damageAmount); + damageAmount = r.onAttacked(info, damageAmount); } - this.lastDamageTaken = Math.min(damageAmount, this.currentHealth); - final boolean probablyInstantKill = this.currentHealth == 0; - if (damageAmount > 0 || probablyInstantKill) { + } + for (final AbstractRelic r : this.relics) { + damageAmount = r.onLoseHpLast(damageAmount); + } + this.lastDamageTaken = Math.min(damageAmount, this.currentHealth); + DamageModifierPatches.OnAttackMonster.onLastDamageTakenUpdate(this, info, damageAmount); + final boolean probablyInstantKill = this.currentHealth == 0; + if (damageAmount > 0 || probablyInstantKill) { //here! + for (final AbstractPower p : this.powers) { damageAmount = p.onLoseHp(damageAmount); } @@ -1134,6 +1171,7 @@ public void damage(final DamageInfo info) { AbstractDungeon.overlayMenu.hideCombatPanels(); } if (this.currentBlock > 0) { + BlockModifierPatches.ClearContainerOnDeath.byeByeContainers(this); this.loseBlock(); AbstractDungeon.effectList.add(new HbBlockBrokenEffect(this.hb.cX - this.hb.width / 2.0f + AbstractMonster.BLOCK_ICON_X, this.hb.cY - this.hb.height / 2.0f + AbstractMonster.BLOCK_ICON_Y)); } @@ -1156,6 +1194,8 @@ public void damage(final DamageInfo info) { AbstractDungeon.effectList.add(new BlockedWordEffect(this, this.hb.cX, this.hb.cY, AbstractMonster.TEXT[30])); } } + BindingPatches.DisableReactionaryActionBinding.enableAfter((AbstractCreature)this); + DamageModifierPatches.OnAttackMonster.removeModsAfterUse(this, info); } @Override @@ -1164,22 +1204,11 @@ public void die() { BossMechanicDisplayPanel.resetBossPanel(); useFastShakeAnimation(5.0F); CardCrawlGame.screenShake.rumble(4.0F); - if (!(this instanceof CharBossMerchant)) { - if (hasPower(MinionPower.POWER_ID)) { - if (Settings.FAST_MODE) { - this.deathTimer += 0.7F; - } else { - ++this.deathTimer; - } - } else { - //SlimeboundMod.logger.info("Char boss On Boss Victory now playing"); - onBossVictoryLogic(); - } - } - + onBossVictoryLogic(); } + AbstractCharBoss.boss = null; AbstractCharBoss.finishedSetup = false; relics.clear(); diff --git a/src/main/java/charbosses/bosses/Defect/CharBossDefect.java b/src/main/java/charbosses/bosses/Defect/CharBossDefect.java index 28ed1dbaf..77b5c9dce 100644 --- a/src/main/java/charbosses/bosses/Defect/CharBossDefect.java +++ b/src/main/java/charbosses/bosses/Defect/CharBossDefect.java @@ -20,10 +20,11 @@ import com.megacrit.cardcrawl.core.Settings; import downfall.downfallMod; import downfall.monsters.NeowBoss; +import downfall.util.LocalizeHelper; public class CharBossDefect extends AbstractCharBoss { public static final String ID = downfallMod.makeID("Defect"); - public static final String NAME = CardCrawlGame.languagePack.getCharacterString("Defect").NAMES[0]; + public static final String NAME = LocalizeHelper.DonwfallRunHistoryMonsterNames.TEXT[3]; public int clawsPlayed = 0; diff --git a/src/main/java/charbosses/bosses/Defect/NewAge/ArchetypeAct1TurboNewAge.java b/src/main/java/charbosses/bosses/Defect/NewAge/ArchetypeAct1TurboNewAge.java index b1dfe2738..9d7603489 100644 --- a/src/main/java/charbosses/bosses/Defect/NewAge/ArchetypeAct1TurboNewAge.java +++ b/src/main/java/charbosses/bosses/Defect/NewAge/ArchetypeAct1TurboNewAge.java @@ -5,6 +5,8 @@ import charbosses.bosses.Defect.ArchetypeBaseDefect; import charbosses.cards.blue.*; import charbosses.cards.curses.EnAged; +import charbosses.cards.curses.EnClumsy; +import charbosses.cards.curses.EnInjury; import charbosses.cards.curses.EnShame; import charbosses.orbs.AbstractEnemyOrb; import charbosses.powers.bossmechanicpowers.DefectVoidPower; @@ -78,14 +80,14 @@ public ArrayList getThisTurnCards() { case 0: addToList(cardsList, new EnBuffer(), false); addToList(cardsList, new EnDoomAndGloom(), extraUpgrades); - addToList(cardsList, new EnShame(), false); + addToList(cardsList, new EnInjury(), false); turn++; break; case 1: //Turn 2 addToList(cardsList, new EnSteamBarrier(), false); addToList(cardsList, new EnDefendBlue(), false); - addToList(cardsList, new EnAged(), false); + addToList(cardsList, new EnClumsy(), false); turn++; steamBarrierCasts++; break; @@ -114,7 +116,7 @@ public ArrayList getThisTurnCards() { ((AbstractEnemyOrb) AbstractCharBoss.boss.orbs.get(0)).evokeOverride = true; } addToList(cardsList, new EnDefendBlue()); - addToList(cardsList, new EnShame(), false); + addToList(cardsList, new EnInjury(), false); turn++; break; case 1: diff --git a/src/main/java/charbosses/bosses/Defect/NewAge/ArchetypeAct2ClawNewAge.java b/src/main/java/charbosses/bosses/Defect/NewAge/ArchetypeAct2ClawNewAge.java index 0747a52a2..89eaf6609 100644 --- a/src/main/java/charbosses/bosses/Defect/NewAge/ArchetypeAct2ClawNewAge.java +++ b/src/main/java/charbosses/bosses/Defect/NewAge/ArchetypeAct2ClawNewAge.java @@ -21,11 +21,14 @@ import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.core.AbstractCreature; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.powers.ArtifactPower; import com.megacrit.cardcrawl.powers.NoBlockPower; import java.lang.reflect.Method; import java.util.ArrayList; +import static charbosses.bosses.Defect.NewAge.ArchetypeAct3OrbsNewAge.increasePretendFocus; + public class ArchetypeAct2ClawNewAge extends ArchetypeBaseDefect { private EnClaw c; @@ -55,9 +58,10 @@ public void addedPreBattle() { public void initialize() { addRelic(new CBR_NeowsBlessing()); - addRelic(new CBR_Kunai()); - addRelic(new CBR_RedMask()); - addRelic(new CBR_Turnip()); + addRelic(new CBR_IceCream()); + addRelic(new CBR_BagOfPreparation()); + addRelic(new CBR_NuclearBattery()); + // animation try { @@ -84,104 +88,72 @@ public ArrayList getThisTurnCards() { if (!looped) { switch (turn) { case 0: - // NO Orbs - addToList(cardsList, new EnBootSequence(), false); // removed - addToList(cardsList, new EnClaw(cB.clawsPlayed * 2), false); + addToList(cardsList, new EnChill(), true); + frostOrbsChanneled += 1; + addToList(cardsList, new EnChill(), true); + frostOrbsChanneled += 1; + addToList(cardsList, new EnBootSequence(), true); // removed + addToList(cardsList, new EnClaw(cB.clawsPlayed * 2), false); //1 addToList(cardsList, new EnMachineLearning(), true); // removed turn++; - // No Orbs break; case 1: - //Turn 2 - // No Orbs - addToList(cardsList, new EnLeap()); - addToList(cardsList, new EnColdSnap(), true); - frostOrbsChanneled += 1; - addToList(cardsList, new EnPanicButton()); // removed - addToList(cardsList, new EnStrikeBlue(), true); - // Frost + addToList(cardsList, new EnDefragment(), true); + increasePretendFocus(2); + addToList(cardsList, new EnChargeBattery());//2 + addToList(cardsList, new EnDefendBlue(), false);//4 + addToList(cardsList, new EnStrikeBlue(), true);//4 turn++; break; case 2: //Turn 3 - // Frost - addToList(cardsList, new EnReprogram(), false); - ArchetypeAct3OrbsNewAge.increasePretendFocus(-1); - addToList(cardsList, new EnSwiftStrike(), false); - addToList(cardsList, new EnRebound(), false); - addToList(cardsList, new EnClaw(cB.clawsPlayed * 2)); - // Frost - //Kunai Proc + addToList(cardsList, new EnCoreSurge(), false);//5 + addToList(cardsList, new EnReprogram(), extraUpgrades);//6 + addToList(cardsList, new EnRebound(), false);//7 + addToList(cardsList, new EnClaw(cB.clawsPlayed * 2), false);//8 turn++; break; case 3: - //Turn 4 - // Frost - addToList(cardsList, new EnClaw(cB.clawsPlayed * 2)); - addToList(cardsList, new EnChargeBattery(), false); + addToList(cardsList, new EnClaw(cB.clawsPlayed * 2), false);//8th + addToList(cardsList, new EnChargeBattery(), false);//9th addToList(cardsList, new EnGeneticAlgorithm(14), true); //removed - addToList(cardsList, new EnShame(), false); - // Frost + addToList(cardsList, new EnClumsy(), true);//removed turn++; break; case 4: - //Turn 5 - // Frost - addToList(cardsList, new EnHyperbeam(), extraUpgrades); - ArchetypeAct3OrbsNewAge.increasePretendFocus(-3); - addToList(cardsList, new EnMalfunctioning(), false); - addToList(cardsList, new EnDefendBlue(), false); - addToList(cardsList, new EnClumsy(), false); //removed - //Frost, but it's useless + addToList(cardsList, new EnCoreSurge(), false);//10 + addToList(cardsList, new EnHyperbeam(), false);//11 + addToList(cardsList, new EnClumsy(), false); + addToList(cardsList, new EnDefendBlue(), false);//12 turn = 0; looped = true; break; } } else { + //perfect 12 for a loop switch (turn) { case 0: - addToList(cardsList, new EnClaw(cB.clawsPlayed * 2), false); - //Play Leap if Block can be gained, otherwise play Stirike - if (AbstractCharBoss.boss.hasPower(NoBlockPower.POWER_ID)){ - addToList(cardsList, new EnColdSnap(), true); - frostOrbsChanneled += 1; - if (frostOrbsChanneled > 3 && AbstractCharBoss.boss.orbs.get(0) instanceof AbstractEnemyOrb) { - ((AbstractEnemyOrb) AbstractCharBoss.boss.orbs.get(0)).evokeOverride = true; - } - addToList(cardsList, new EnStrikeBlue(), true); - addToList(cardsList, new EnLeap()); - } else { - addToList(cardsList, new EnColdSnap(), true); - frostOrbsChanneled += 1; - if (frostOrbsChanneled > 3 && AbstractCharBoss.boss.orbs.get(0) instanceof AbstractEnemyOrb) { - ((AbstractEnemyOrb) AbstractCharBoss.boss.orbs.get(0)).evokeOverride = true; - } - addToList(cardsList, new EnLeap()); - addToList(cardsList, new EnStrikeBlue(), true); - } - //Kunai Proc + addToList(cardsList, new EnClaw(cB.clawsPlayed * 2), false); //1 + addToList(cardsList, new EnChargeBattery(), false); //2 + addToList(cardsList, new EnDefendBlue(), false);//4 + addToList(cardsList, new EnStrikeBlue(), true);//4 turn++; break; case 1: - //Turn 3 - addToList(cardsList, new EnHyperbeam(), extraUpgrades); - ArchetypeAct3OrbsNewAge.increasePretendFocus(-3); - addToList(cardsList, new EnChargeBattery(), false); - addToList(cardsList, new EnShame(), false); - addToList(cardsList, new EnRebound(), false); + addToList(cardsList, new EnCoreSurge(), false);//5 + addToList(cardsList, new EnHyperbeam(), false);//6 + addToList(cardsList, new EnChargeBattery(), false);//7 + addToList(cardsList, new EnRebound(), false);//8 turn++; break; case 2: - addToList(cardsList, new EnReprogram(), false); - ArchetypeAct3OrbsNewAge.increasePretendFocus(-1); - addToList(cardsList, new EnClaw(cB.clawsPlayed * 2), false); - addToList(cardsList, new EnDefendBlue(), false); - addToList(cardsList, new EnSwiftStrike(), false); - //Kunai Proc + addToList(cardsList, new EnCoreSurge(), false);//9 + addToList(cardsList, new EnReprogram(), extraUpgrades);//10 + addToList(cardsList, new EnClaw(cB.clawsPlayed * 2), false);//11 + addToList(cardsList, new EnDefendBlue(), false);//12 turn = 0; break; } - } return cardsList; @@ -189,6 +161,6 @@ public ArrayList getThisTurnCards() { @Override public void initializeBonusRelic() { - addRelic(new CBR_Vajra()); + addRelic(new CBR_ClockworkSouvenir()); } } \ No newline at end of file diff --git a/src/main/java/charbosses/bosses/Defect/NewAge/ArchetypeAct3OrbsNewAge.java b/src/main/java/charbosses/bosses/Defect/NewAge/ArchetypeAct3OrbsNewAge.java index 28d46f473..d07d93b16 100644 --- a/src/main/java/charbosses/bosses/Defect/NewAge/ArchetypeAct3OrbsNewAge.java +++ b/src/main/java/charbosses/bosses/Defect/NewAge/ArchetypeAct3OrbsNewAge.java @@ -6,15 +6,24 @@ import charbosses.cards.AbstractBossCard; import charbosses.cards.blue.*; import charbosses.cards.colorless.EnBlind; +import charbosses.cards.colorless.EnGoodInstincts; +import charbosses.cards.curses.EnInjury; +import charbosses.cards.curses.EnNormality; +import charbosses.cards.curses.EnPain; +import charbosses.cards.curses.EnShame; +import charbosses.cards.purple.EnLikeWater; import charbosses.orbs.AbstractEnemyOrb; -import charbosses.powers.bossmechanicpowers.DefectAncientConstructPower; +import charbosses.powers.bossmechanicpowers.DefectBiasCuriosityPower; import charbosses.powers.bossmechanicpowers.DefectCuriosityPower; import charbosses.relics.*; import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.HealAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.core.AbstractCreature; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.orbs.AbstractOrb; +import com.megacrit.cardcrawl.powers.BiasPower; +import com.megacrit.cardcrawl.powers.FocusPower; import java.util.ArrayList; @@ -27,10 +36,10 @@ public class ArchetypeAct3OrbsNewAge extends ArchetypeBaseDefect { public ArchetypeAct3OrbsNewAge() { super("DF_ARCHETYPE_ORBS", "Orbs"); - maxHPModifier += 350; + maxHPModifier += 300; actNum = 3; bossMechanicName = DefectCuriosityPower.NAME; - bossMechanicDesc = DefectCuriosityPower.DESCRIPTIONS[0] + 1 + DefectCuriosityPower.DESCRIPTIONS[1]; + bossMechanicDesc = DefectCuriosityPower.DESCRIPTIONS[0] + 1 + DefectCuriosityPower.DESCRIPTIONS[1] + DefectCuriosityPower.DESCRIPTIONS[2]; } @Override @@ -38,16 +47,16 @@ public void addedPreBattle() { super.addedPreBattle(); AbstractCreature p = AbstractCharBoss.boss; AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, new DefectCuriosityPower(p))); - } public void initialize() { addRelic(new CBR_NeowsBlessing()); - addRelic(new CBR_DataDisk()); + addRelic(new CBR_ArtOfWar()); addRelic(new CBR_Lantern()); - addRelic(new CBR_FossilizedHelix()); - addRelic(new CBR_CoffeeDripper()); + addRelic(new CBR_IceCream()); + addRelic(new CBR_FusionHammer()); + addRelic(new CBR_Enchiridon()); } @@ -87,61 +96,67 @@ public ArrayList getThisTurnCards() { if (!looped) { switch (turn) { case 0: - // No Orbs - addToList(cardsList, new EnRainbow()); - addToList(cardsList, new EnReinforcedBody()); + // No Orbs 4e + AbstractBossCard c = new EnBiasedCognition(); + c.freeToPlayOnce = true; + c.costForTurn = 0; + addToList(cardsList, c, false); + increasePretendFocus(4); + addToList(cardsList, new EnMachineLearning(),true); addToList(cardsList, new EnChargeBattery()); - // Lightning Frost Dark + addToList(cardsList, new EnRainbow()); + // Lightning Frost Dark 0e turn++; break; case 1: + increasePretendFocus(-1); //Turn 2 - // Lightning Frost Dark - addToList(cardsList, new EnZap(), true); - //Evokes Lightning + // Lightning Frost Dark 5e + addToList(cardsList, new EnDualcast()); + // Evokes Lightning 4e cB.orbsAsEn().get(0).evokeOverride = true; - // Frost Dark Lightning + cB.orbsAsEn().get(0).evokeMult = 2; + addToList(cardsList, new EnHologram(), true); + // Frost Dark 3e addToList(cardsList, new EnDualcast()); - // Evokes Frost + // Evokes Frost 2e cB.orbsAsEn().get(1).evokeOverride = true; cB.orbsAsEn().get(1).evokeMult = 2; - // Dark Lightning + addToList(cardsList, new EnStorm()); + AbstractBossCard.fakeStormPower = true; + // Dark 1e // Evokes Dark - if (!A19) { - addToList(cardsList, new EnMulticast(2)); - cB.orbsAsEn().get(2).evokeOverride = true; - cB.orbsAsEn().get(2).evokeMult = 2; - } - else { - addToList(cardsList, new EnMulticast(3)); + addToList(cardsList, new EnMulticast(1)); cB.orbsAsEn().get(2).evokeOverride = true; - cB.orbsAsEn().get(2).evokeMult = 3; - } - // Lightning + cB.orbsAsEn().get(2).evokeMult = 1; + // No Orbs 0e turn++; break; case 2: + increasePretendFocus(-1); //Turn 3 - //Lightning - addToList(cardsList, new EnColdSnap()); - //Lightning Frost - addToList(cardsList, new EnBarrage(2), true); // Bullseye was here, but Bullseye is a cursed thing - addToList(cardsList, new EnLeap()); + // No Orbs 4e + addToList(cardsList, new EnConsume()); + increasePretendFocus(2); + addToList(cardsList, new EnCapacitor()); + //Lightning 1e + addToList(cardsList, new EnColdSnap(),extraUpgrades); + //Lightning Frost 0e + + addToList(cardsList, new EnPain()); turn++; break; case 3: + increasePretendFocus(-1); //Turn 4 - //Lightning Frost - addToList(cardsList, new EnStorm(), false); - AbstractBossCard.fakeStormPower = true; - addToList(cardsList, new EnDefragment(), extraUpgrades); - if (extraUpgrades) { - increasePretendFocus(2); - }else { - increasePretendFocus(1); - } - //Lightning Frost Lightning - addToList(cardsList, new EnBlind(), false); + //Lightning Frost 3e + addToList(cardsList, new EnDoubleEnergy(),false); + // 4e + addToList(cardsList, new EnCreativeAI(),false); + //Lightning Frost Lightning 1e + addToList(cardsList, new EnFusion(true,false),true); + //Lightning Frost Lightning Plasma 0e + addToList(cardsList, new EnForceField()); turn = 0; looped = true; break; @@ -149,37 +164,94 @@ public ArrayList getThisTurnCards() { } else { switch (turn) { case 0: - //Lightning Frost Lightning - addToList(cardsList, new EnLeap()); + increasePretendFocus(-1); + //Lightning Frost Lightning Plasma 5e + addToList(cardsList, new EnDefragment(), false);//AI + increasePretendFocus(1); + cB.orbsAsEn().get(0).evokeOverride = true; + cB.orbsAsEn().get(0).evokeMult = 1; + // Evokes Lightning + //Frost Lightning Plasma Lightning 3e + addToList(cardsList, new EnGoodInstincts()); + addToList(cardsList, new EnStrikeBlue()); + addToList(cardsList, new EnColdSnap(),extraUpgrades); + cB.orbsAsEn().get(1).evokeOverride = true; + cB.orbsAsEn().get(1).evokeMult = 1; + //Lightning Plasma Lightning Frost 1e addToList(cardsList, new EnChargeBattery()); - addToList(cardsList, new EnBarrage(3), true); //Vex replaced Bullseye with Barrage+ here. + + //Lightning Plasma Lightning Frost 0e turn++; break; case 1: - //Lightning Frost Lightning - addToList(cardsList, new EnBlind()); - addToList(cardsList, new EnDualcast()); - //Evokes Lightning + increasePretendFocus(-1); + //Lightning Plasma Lightning Frost 5e + addToList(cardsList, new EnElectrodynamics(), false);//AI cB.orbsAsEn().get(0).evokeOverride = true; - cB.orbsAsEn().get(0).evokeMult = 2; - //Lightning Frost - addToList(cardsList, new EnMulticast(3)); - // Evokes Frost! + cB.orbsAsEn().get(0).evokeMult = 1; cB.orbsAsEn().get(1).evokeOverride = true; - cB.orbsAsEn().get(1).evokeMult = 3; - // Lightning + cB.orbsAsEn().get(1).evokeMult = 1; + cB.orbsAsEn().get(2).evokeOverride = true; + cB.orbsAsEn().get(2).evokeMult = 1; + //Frost Lightning Lightning Lightning 5e + addToList(cardsList, new EnDualcast()); + //Evokes Frost 4e + cB.orbsAsEn().get(3).evokeOverride = true; + cB.orbsAsEn().get(3).evokeMult = 2; + //Lightning Lightning Lightning 4e + addToList(cardsList, new EnFusion(true,false),true); + addToList(cardsList, new EnNormality()); + addToList(cardsList, new EnForceField()); + //Lightning Lightning Lightning Plasma 3e turn++; break; case 2: - // Lightning + increasePretendFocus(-1); + //Lightning Lightning Lightning Plasma + addToList(cardsList, new EnDefragment(), false);//AI + increasePretendFocus(1); + cB.orbsAsEn().get(0).evokeOverride = true; + cB.orbsAsEn().get(0).evokeMult = 1; + //Lightning Lightning Plasma Lightning addToList(cardsList, new EnColdSnap(), false); - //Lightning Frost - addToList(cardsList, new EnZap(), true); - // Lightning Frost Lightning. Perfect loop! :D - if (!A19) - addToList(cardsList, new EnReinforcedBody()); - else - addToList(cardsList, new EnReinforcedBody(3)); + cB.orbsAsEn().get(1).evokeOverride = true; + cB.orbsAsEn().get(1).evokeMult = 1; + //Lightning Plasma Lightning Frost + addToList(cardsList, new EnHologram(), true); + addToList(cardsList, new EnDualcast()); + cB.orbsAsEn().get(2).evokeOverride = true; + cB.orbsAsEn().get(2).evokeMult = 2; + //Plasma Lightning Frost + addToList(cardsList, new EnChargeBattery()); + addToList(cardsList, new EnGoodInstincts()); + cB.orbsAsEn().get(1).evokeOverride = true; + cB.orbsAsEn().get(1).evokeMult = 1; + //Plasma Lightning Frost + turn ++; + break; + case 3: + increasePretendFocus(-1); + //Plasma Lightning Frost + if (cB.maxOrbs == 4) { + addToList(cardsList, new EnCapacitor(), false);//AI + } else { + addToList(cardsList, new EnBuffer(), false); + } + //Plasma Lightning Frost Lightning + addToList(cardsList, new EnMulticastPlasma(cB.energyPanel.getCurrentEnergy()-1),false); + //Evokes Plasma + cB.orbsAsEn().get(0).evokeOverride = true; + cB.orbsAsEn().get(0).evokeMult = 4; + addToList(cardsList, new EnConsume()); + increasePretendFocus(2); + //Lightning Frost Lightning + addToList(cardsList, new EnFusion(true,false),true); + //Lightning Frost Lightning Plasma + + addToList(cardsList, new EnHologram(), true); + addToList(cardsList, new EnForceField()); + //increasePretendFocus(2); + //Lightning Frost Lightning Plasma. Perfect loop! :D turn = 0; looped = true; break; @@ -191,6 +263,6 @@ public ArrayList getThisTurnCards() { @Override public void initializeBonusRelic() { - addRelic(new CBR_ArtOfWar()); + addRelic(new CBR_BirdFacedUrn()); } } \ No newline at end of file diff --git a/src/main/java/charbosses/bosses/Hermit/CharBossHermit.java b/src/main/java/charbosses/bosses/Hermit/CharBossHermit.java index bd5783da7..a0e03a9d6 100644 --- a/src/main/java/charbosses/bosses/Hermit/CharBossHermit.java +++ b/src/main/java/charbosses/bosses/Hermit/CharBossHermit.java @@ -20,6 +20,7 @@ import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.helpers.FontHelper; import downfall.downfallMod; +import downfall.util.LocalizeHelper; import hermit.characters.hermit; import hermit.effects.HermitEyeParticle; @@ -32,7 +33,7 @@ public class CharBossHermit extends AbstractCharBoss { public static final String ID = downfallMod.makeID("Hermit"); - public static final String NAME = CardCrawlGame.languagePack.getCharacterString("hermit:hermit").NAMES[0]; + public static final String NAME = LocalizeHelper.DonwfallRunHistoryMonsterNames.TEXT[6]; public Slot eye; private float fireTimer = 0.0F; diff --git a/src/main/java/charbosses/bosses/Hermit/NewAge/ArchetypeAct1SharpshooterNewAge.java b/src/main/java/charbosses/bosses/Hermit/NewAge/ArchetypeAct1SharpshooterNewAge.java index 35280de23..ffde9b599 100644 --- a/src/main/java/charbosses/bosses/Hermit/NewAge/ArchetypeAct1SharpshooterNewAge.java +++ b/src/main/java/charbosses/bosses/Hermit/NewAge/ArchetypeAct1SharpshooterNewAge.java @@ -115,6 +115,9 @@ public ArrayList getThisTurnCards() { } else { switch (turn) { case 0: + if (AbstractCharBoss.boss.hasRelic(CBR_Abacus.ID)) { + AbstractCharBoss.boss.getRelic(CBR_Abacus.ID).onTrigger(); + } addToList(cardsList, new EnHeadshot()); addToList(cardsList, new EnDefendHermit()); addToList(cardsList, new EnInjury()); diff --git a/src/main/java/charbosses/bosses/Hermit/NewAge/ArchetypeAct2WheelOfFateNewAge.java b/src/main/java/charbosses/bosses/Hermit/NewAge/ArchetypeAct2WheelOfFateNewAge.java index b2bafda8e..d12878015 100644 --- a/src/main/java/charbosses/bosses/Hermit/NewAge/ArchetypeAct2WheelOfFateNewAge.java +++ b/src/main/java/charbosses/bosses/Hermit/NewAge/ArchetypeAct2WheelOfFateNewAge.java @@ -45,7 +45,7 @@ public void addedPreBattle() { super.addedPreBattle(); AbstractCreature p = AbstractCharBoss.boss; - AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, new HermitWheelOfFortune(p), 1)); + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, new HermitWheelOfFortune(p), 2)); } private void reshuffle() { @@ -115,9 +115,9 @@ public ArrayList getThisTurnCards() { AbstractCard target = getNextCard(); cardsList.add(target); -// if (target.cardID.equals(EnNecronomicurse.ID)) { -// AbstractCharBoss.boss.getPower(HermitWheelOfFortune.POWER_ID).onSpecificTrigger(); -// } + if (target.cardID.equals(EnNecronomicurse.ID)) { + AbstractCharBoss.boss.getPower(HermitWheelOfFortune.POWER_ID).onSpecificTrigger(); + } } if (AbstractCharBoss.boss instanceof CharBossHermit) { CharBossHermit.previewCard = mockDeck.get(0).makeStatEquivalentCopy(); @@ -152,9 +152,9 @@ public void reInitializeHand() { AbstractCard next = getNextCard(); AbstractCharBoss.boss.hand.addToTop(next); -// if (next.cardID.equals(EnNecronomicurse.ID)) { -// AbstractCharBoss.boss.getPower(HermitWheelOfFortune.POWER_ID).onSpecificTrigger(); -// } + if (next.cardID.equals(EnNecronomicurse.ID)) { + AbstractCharBoss.boss.getPower(HermitWheelOfFortune.POWER_ID).onSpecificTrigger(); + } AbstractCharBoss.boss.hand.refreshHandLayout(); AbstractDungeon.actionManager.addToTop(new AbstractGameAction() { diff --git a/src/main/java/charbosses/bosses/Hermit/NewAge/ArchetypeAct3DoomsdayNewAge.java b/src/main/java/charbosses/bosses/Hermit/NewAge/ArchetypeAct3DoomsdayNewAge.java index 0c488d00c..c7db0aa83 100644 --- a/src/main/java/charbosses/bosses/Hermit/NewAge/ArchetypeAct3DoomsdayNewAge.java +++ b/src/main/java/charbosses/bosses/Hermit/NewAge/ArchetypeAct3DoomsdayNewAge.java @@ -7,26 +7,32 @@ import charbosses.cards.hermit.*; import charbosses.powers.bossmechanicpowers.HermitDoomsday; import charbosses.relics.*; +import com.badlogic.gdx.math.MathUtils; +import com.megacrit.cardcrawl.actions.animations.ShoutAction; +import com.megacrit.cardcrawl.actions.animations.TalkAction; +import com.megacrit.cardcrawl.actions.animations.VFXAction; import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; import com.megacrit.cardcrawl.actions.common.SpawnMonsterAction; +import com.megacrit.cardcrawl.actions.utility.SFXAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.core.AbstractCreature; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.monsters.city.Byrd; import com.megacrit.cardcrawl.powers.RitualPower; import downfall.monsters.DoomedDagger; +import downfall.vfx.PotionThrowEffect; import java.util.ArrayList; -public class ArchetypeAct3DoomsdayNewAge extends ArchetypeBaseIronclad { +import static com.megacrit.cardcrawl.monsters.city.Byrd.DIALOG; +public class ArchetypeAct3DoomsdayNewAge extends ArchetypeBaseIronclad { + public boolean froegg = false; public ArchetypeAct3DoomsdayNewAge() { super("HERMIT_DOOMSDAY_ARCHETYPE", "Doomsday"); - maxHPModifier += 315; - if (AbstractDungeon.ascensionLevel >= 19) { - maxHPModifier += 24; - } + maxHPModifier += 363; actNum = 3; bossMechanicName = HermitDoomsday.NAME; bossMechanicDesc = HermitDoomsday.DESC[0]; @@ -40,11 +46,24 @@ public static AbstractMonster getDoomedSnake(){ // called by EnPurgatory too public void addedPreBattle() { super.addedPreBattle(); AbstractCreature p = AbstractCharBoss.boss; - AbstractDungeon.actionManager.addToBottom(new SpawnMonsterAction(getDoomedSnake(), true)); AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, new HermitDoomsday(p), 1)); -// AbstractDungeon.actionManager.addToBottom(new VFXAction(new PotionThrowEffect("downfallResources/images/vfx/CultistPotion.png", p.hb.cX, p.hb.cY, p.hb.cX, p.hb.cY, 2F, 0.6F, false, true), 0.6F)); + + //Cultist Potion!!! + AbstractDungeon.actionManager.addToBottom(new VFXAction(new PotionThrowEffect("downfallResources/images/vfx/CultistPotion.png", p.hb.cX-240, p.hb.cY-150, p.hb.cX-240, p.hb.cY-150, 2F, 0.6F, false, true), 0.6F)); + int roll = MathUtils.random(2); + if (roll == 0) { + AbstractDungeon.actionManager.addToBottom(new SFXAction("VO_CULTIST_1A")); + } else if (roll == 1) { + AbstractDungeon.actionManager.addToBottom(new SFXAction("VO_CULTIST_1B")); + } else { + AbstractDungeon.actionManager.addToBottom(new SFXAction("VO_CULTIST_1C")); + } + + AbstractDungeon.actionManager.addToBottom(new TalkAction(p, Byrd.DIALOG[0], 1.2F, 1.2F)); + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, new RitualPower(p, 1, false), 1)); + } public void initialize() { @@ -66,7 +85,12 @@ public ArrayList getThisTurnCards() { if (!looped) { switch (turn) { case 0: - addToList(cardsList, new EnShadowCloak()); + if (AbstractDungeon.ascensionLevel >= 19) { + addToList(cardsList, new EnShadowCloak(), extraUpgrades); + } + if (!(AbstractDungeon.ascensionLevel >= 19)) { + addToList(cardsList, new EnShadowCloak()); + } addToList(cardsList, new EnGrudge(15)); addToList(cardsList, new EnGlare()); turn++; @@ -115,6 +139,6 @@ public ArrayList getThisTurnCards() { @Override public void initializeBonusRelic() { - addRelic(new CBR_DarkstonePeriapt()); + addRelic(new CBR_FrozenEgg()); } } \ No newline at end of file diff --git a/src/main/java/charbosses/bosses/Ironclad/CharBossIronclad.java b/src/main/java/charbosses/bosses/Ironclad/CharBossIronclad.java index 2db4ba2b9..f1023735b 100644 --- a/src/main/java/charbosses/bosses/Ironclad/CharBossIronclad.java +++ b/src/main/java/charbosses/bosses/Ironclad/CharBossIronclad.java @@ -35,13 +35,14 @@ import com.megacrit.cardcrawl.ui.panels.energyorb.EnergyOrbRed; import downfall.downfallMod; import downfall.monsters.NeowBoss; +import downfall.util.LocalizeHelper; import guardian.powers.ConstructPower; import hermit.util.TextureLoader; import slimebound.SlimeboundMod; public class CharBossIronclad extends AbstractCharBoss { public static final String ID = downfallMod.makeID("Ironclad"); - public static final String NAME = CardCrawlGame.languagePack.getCharacterString("Ironclad").NAMES[0]; + public static final String NAME = LocalizeHelper.DonwfallRunHistoryMonsterNames.TEXT[1]; private Texture fgImg = TextureLoader.getTexture("downfallResources/images/fgShrooms.png"); private Texture bgImg = TextureLoader.getTexture("downfallResources/images/bgShrooms.png"); diff --git a/src/main/java/charbosses/bosses/Ironclad/NewAge/ArchetypeAct1StatusesNewAge.java b/src/main/java/charbosses/bosses/Ironclad/NewAge/ArchetypeAct1StatusesNewAge.java index 3c7118057..3747b2168 100644 --- a/src/main/java/charbosses/bosses/Ironclad/NewAge/ArchetypeAct1StatusesNewAge.java +++ b/src/main/java/charbosses/bosses/Ironclad/NewAge/ArchetypeAct1StatusesNewAge.java @@ -32,7 +32,7 @@ public class ArchetypeAct1StatusesNewAge extends ArchetypeBaseIronclad { public ArchetypeAct1StatusesNewAge() { super("IC_STATUS_ARCHETYPE", "Status"); - maxHPModifier += 75; + maxHPModifier += 60; actNum = 1; bossMechanicName = IroncladStatusPower.NAME; bossMechanicDesc = IroncladStatusPower.DESC[0]; @@ -76,13 +76,13 @@ public ArrayList getThisTurnCards() { turn++; break; case 1: + addToList(cardsList, new EnWildStrike()); addToList(cardsList, new EnRecklessCharge()); - addToList(cardsList, new EnWildStrike(), extraUpgrades); addToList(cardsList, new EnDefendRed()); turn++; break; case 2: - addToList(cardsList, new EnPowerThrough(true)); + addToList(cardsList, new EnPowerThrough(true), extraUpgrades); addToList(cardsList, new EnSecondWind()); addToList(cardsList, new EnDefendRed()); theArtOfWar.beginPulse(); @@ -112,7 +112,7 @@ public ArrayList getThisTurnCards() { } else { switch (turn) { case 0: - addToList(cardsList, new EnPowerThrough(true)); + addToList(cardsList, new EnPowerThrough(true), extraUpgrades); addToList(cardsList, new EnTrueGrit(), true); //IC will exhaust the Doubt the first time through the loop instead of a wound //So the wound will appear the second time through the loop onward @@ -121,7 +121,7 @@ public ArrayList getThisTurnCards() { theArtOfWar.beginPulse(); break; case 1: - addToList(cardsList, new EnWildStrike(), extraUpgrades); + addToList(cardsList, new EnWildStrike()); addToList(cardsList, new EnRecklessCharge()); addToList(cardsList, new EnBash()); //unused turn++; diff --git a/src/main/java/charbosses/bosses/Ironclad/NewAge/ArchetypeAct2MushroomsNewAge.java b/src/main/java/charbosses/bosses/Ironclad/NewAge/ArchetypeAct2MushroomsNewAge.java index 0bc9bd3bd..bf3b69bea 100644 --- a/src/main/java/charbosses/bosses/Ironclad/NewAge/ArchetypeAct2MushroomsNewAge.java +++ b/src/main/java/charbosses/bosses/Ironclad/NewAge/ArchetypeAct2MushroomsNewAge.java @@ -97,7 +97,7 @@ public ArrayList getThisTurnCards() { case 2: addToList(cardsList, new EnReaper()); addToList(cardsList, new EnDefendRed()); - addToList(cardsList, new EnHaunted()); + addToList(cardsList, new EnClumsy()); turn++; break; case 3: diff --git a/src/main/java/charbosses/bosses/Ironclad/NewAge/ArchetypeAct3BlockNewAge.java b/src/main/java/charbosses/bosses/Ironclad/NewAge/ArchetypeAct3BlockNewAge.java index 720351103..0d40045f2 100644 --- a/src/main/java/charbosses/bosses/Ironclad/NewAge/ArchetypeAct3BlockNewAge.java +++ b/src/main/java/charbosses/bosses/Ironclad/NewAge/ArchetypeAct3BlockNewAge.java @@ -77,7 +77,7 @@ public ArrayList getThisTurnCards() { case 0: addToList(cardsList, new EnFeelNoPain()); addToList(cardsList, new EnImpervious()); - addToList(cardsList, new EnIntimidate()); + addToList(cardsList, new EnIntimidate(), true); turn++; break; case 1: @@ -88,7 +88,7 @@ public ArrayList getThisTurnCards() { break; case 2: addToList(cardsList, new EnImpervious()); - addToList(cardsList, new EnIntimidate()); + addToList(cardsList, new EnIntimidate(), true); addToList(cardsList, new EnEntrench()); turn++; break; diff --git a/src/main/java/charbosses/bosses/Merchant/ArchetypeAct3MerchantBoss.java b/src/main/java/charbosses/bosses/Merchant/ArchetypeAct3MerchantBoss.java index cbf1fb9af..41e2057b6 100644 --- a/src/main/java/charbosses/bosses/Merchant/ArchetypeAct3MerchantBoss.java +++ b/src/main/java/charbosses/bosses/Merchant/ArchetypeAct3MerchantBoss.java @@ -31,9 +31,14 @@ public void initialize() { // addRelic(new CBR_Girya(3)); // addRelic(new CBR_Vajra()); // addRelic(new CBR_SmoothStone()); - addRelic(new CBR_FossilizedHelix()); + + // :) + addRelic(new CBR_SmilingMask()); + //addRelic(new CBR_BagOfPreparation()); - addRelic(new CBR_ClockworkSouvenir()); + + addRelic(new CBR_Toolbox()); + addRelic(new CBR_TungstenRod()); addRelic(new CBR_IceCream()); //addRelic(new CBR_FusionHammer()); @@ -57,35 +62,36 @@ public ArrayList getThisTurnCards() { if (!looped) { switch (turn) { case 0: - - addToList(cardsList, new EnPanicButton()); - addToList(cardsList, new EnDramaticEntrance()); - addToList(cardsList, new EnTheBomb(), extraUpgrades); + addToList(cardsList, new EnPanacea()); //Toolbox + addToList(cardsList, new EnPanicButton()); //exhausts + addToList(cardsList, new EnDramaticEntrance()); //exhausts + addToList(cardsList, new EnTheBomb(), extraUpgrades); //1 of 1 Bombs turn++; break; case 1: - addToList(cardsList, new EnApotheosis(), true); - addToList(cardsList, new EnPanacea(), true); - addToList(cardsList, new EnGoodInstincts(), true); + addToList(cardsList, new EnApotheosis(), true); //exhausts + addToList(cardsList, new EnPanacea(), true); // +2 artifact + addToList(cardsList, new EnGoodInstincts(), true); //1 of 2 Good Instincts turn++; break; case 2: //Bomb goes Boom. - addToList(cardsList, new EnPanacea(), true); + addToList(cardsList, new EnPanacea(), true); // +2 artifact, +5 total??????? remove clockwork and replace with another relic (abacus?) addToList(cardsList, new EnPanicButton(), true); - addToList(cardsList, new EnBlind(), true); + addToList(cardsList, new EnSadisticNature(), true); // sadistic here fills up a slot because there was an extra unaccounted for bomb turn++; break; case 3: - addToList(cardsList, new EnTrip(), true); - addToList(cardsList, new EnTheBomb(), true); - addToList(cardsList, new EnSwiftStrike(), true); + addToList(cardsList, new EnSwiftStrike(), true); //1 of 2 Swift Strikes + addToList(cardsList, new EnTrip(), true); // moved the trip here + addToList(cardsList, new EnBlind(), true); //moved a blind here + // 1 of 1 Trips turn++; break; case 4: - addToList(cardsList, new EnGoodInstincts(), true); - addToList(cardsList, new EnSwiftStrike(), true); - addToList(cardsList, new EnHandOfGreed(), true); + addToList(cardsList, new EnGoodInstincts(), true); //2 of 2 Good Instincts + addToList(cardsList, new EnSwiftStrike(), true); //2 of 2 Swift Strikes + addToList(cardsList, new EnHandOfGreed(), true); //1 of 1 Hand of Greed turn=0; looped = true; break; @@ -94,27 +100,28 @@ public ArrayList getThisTurnCards() { } else { switch (turn) { case 0: - //Bomb goes Boom. - addToList(cardsList, new EnTheBomb(), true); - addToList(cardsList, new EnTrip(), true); - addToList(cardsList, new EnGoodInstincts(), true); + //no bomb this turn + addToList(cardsList, new EnTheBomb(), true); //1 + addToList(cardsList, new EnSwiftStrike(), true); //2 + addToList(cardsList, new EnTrip(), true); //3 turn++; break; case 1: - addToList(cardsList, new EnHandOfGreed(), true); - addToList(cardsList, new EnTheBomb(), true); - addToList(cardsList, new EnBlind(), true); + addToList(cardsList, new EnHandOfGreed(), true); //4 + addToList(cardsList, new EnTheBomb(), true); //5 + addToList(cardsList, new EnBlind(), true); //6 turn++; break; case 2: //Bomb goes Boom. - addToList(cardsList, new EnGoodInstincts(), true); - addToList(cardsList, new EnSwiftStrike(), true); - addToList(cardsList, new EnSwiftStrike(), true); + addToList(cardsList, new EnGoodInstincts(), true); //7 + addToList(cardsList, new EnSwiftStrike(), true); //8 + addToList(cardsList, new EnGoodInstincts(), true); //9 + //changing this turn because this is too harsh compared to normal act 3 bosses, and this number could be higher depending on # of shops visited turn = 0; break; } - +// 1 Bomb. 2 Swift Strikes. 2 Good Instincts. 1 Trip. 1 Blind. 1 Hand of Greed. that's 9 cards total for a 3 turn loop } return cardsList; } diff --git a/src/main/java/charbosses/bosses/Merchant/CharBossMerchant.java b/src/main/java/charbosses/bosses/Merchant/CharBossMerchant.java index ed747cc5e..02cd4a490 100644 --- a/src/main/java/charbosses/bosses/Merchant/CharBossMerchant.java +++ b/src/main/java/charbosses/bosses/Merchant/CharBossMerchant.java @@ -14,6 +14,7 @@ import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; import com.megacrit.cardcrawl.actions.utility.WaitAction; import com.megacrit.cardcrawl.characters.AbstractPlayer.PlayerClass; +import com.megacrit.cardcrawl.characters.AbstractPlayer.PlayerClass; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; @@ -28,6 +29,7 @@ import com.megacrit.cardcrawl.vfx.combat.IntenseZoomEffect; import downfall.downfallMod; import downfall.monsters.FleeingMerchant; +import downfall.util.LocalizeHelper; import downfall.vfx.NeowBossRezEffect; public class CharBossMerchant extends AbstractCharBoss { @@ -52,16 +54,16 @@ public class CharBossMerchant extends AbstractCharBoss { private boolean neowSpoke = false; public static final String ID = downfallMod.makeID("CharBossMerchant"); - public static final String NAME = CardCrawlGame.languagePack.getCharacterString(ID).NAMES[0]; + public static final String NAME = LocalizeHelper.DonwfallRunHistoryMonsterNames.TEXT[5]; public CharBossMerchant() { super(NAME, ID, 300, 0f, -40f, 200.0f, 190.0f, null, 0.0f, 0.0f, PlayerClass.IRONCLAD); - if (downfallMod.tempAscensionHack) { - downfallMod.tempAscensionHack = false; - AbstractDungeon.ascensionLevel = downfallMod.tempAscensionOriginalValue; - downfallMod.tempAscensionOriginalValue = 0; - } +// if (downfallMod.tempAscensionHack) { +// downfallMod.tempAscensionHack = false; +// AbstractDungeon.ascensionLevel = downfallMod.tempAscensionOriginalValue; +// downfallMod.tempAscensionOriginalValue = 0; +// } this.energyOrb = new EnergyOrbRed(); this.energy = new EnemyEnergyManager(3); @@ -82,7 +84,7 @@ public CharBossMerchant() { this.tint.color = new Color(.5F, .5F, 1F, 0F); - this.type = EnemyType.BOSS; + type = EnemyType.BOSS; } @Override @@ -97,6 +99,8 @@ public void usePreBattleAction() { if (FleeingMerchant.CURRENT_STRENGTH > 0) { AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this, this, new StrengthPower(this, FleeingMerchant.CURRENT_STRENGTH), FleeingMerchant.CURRENT_STRENGTH)); AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this, this, new DexterityPower(this, FleeingMerchant.CURRENT_STRENGTH), FleeingMerchant.CURRENT_STRENGTH)); + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this, this, new StrengthPower(this, FleeingMerchant.CURRENT_STRENGTH), FleeingMerchant.CURRENT_STRENGTH)); + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this, this, new DexterityPower(this, FleeingMerchant.CURRENT_STRENGTH), FleeingMerchant.CURRENT_STRENGTH)); } super.usePreBattleAction(); @@ -111,13 +115,13 @@ public void initGlowMesh(float time) { this.atlasGlow = new TextureAtlas(Gdx.files.internal(downfallMod.assetPath("images/monsters/merchant/noShadow/skeletonGlow.atlas"))); SkeletonJson json = new SkeletonJson(this.atlasGlow); if (CardCrawlGame.dungeon != null && AbstractDungeon.player != null) { - if (AbstractDungeon.player.hasRelic("PreservedInsect") && !this.isPlayer && AbstractDungeon.getCurrRoom().eliteTrigger) { - glowscale += 0.3F; - } - - if (ModHelper.isModEnabled("MonsterHunter") && !this.isPlayer) { - glowscale -= 0.3F; - } + // if (AbstractDungeon.player.hasRelic("PreservedInsect") && !this.isPlayer && AbstractDungeon.getCurrRoom().eliteTrigger) { + // glowscale += 0.3F; + // } + // + // if (ModHelper.isModEnabled("MonsterHunter") && !this.isPlayer) { + // glowscale -= 0.3F; + // } } json.setScale(Settings.scale / glowscale); diff --git a/src/main/java/charbosses/bosses/Silent/CharBossSilent.java b/src/main/java/charbosses/bosses/Silent/CharBossSilent.java index d2d8c0a87..c649a772a 100644 --- a/src/main/java/charbosses/bosses/Silent/CharBossSilent.java +++ b/src/main/java/charbosses/bosses/Silent/CharBossSilent.java @@ -30,10 +30,11 @@ import com.megacrit.cardcrawl.vfx.combat.SmokeBombEffect; import downfall.downfallMod; import downfall.monsters.NeowBoss; +import downfall.util.LocalizeHelper; public class CharBossSilent extends AbstractCharBoss { public static final String ID = downfallMod.makeID("Silent"); - public static final String NAME = CardCrawlGame.languagePack.getCharacterString("Silent").NAMES[0]; + public static final String NAME = LocalizeHelper.DonwfallRunHistoryMonsterNames.TEXT[2]; public static boolean posStorage = false; diff --git a/src/main/java/charbosses/bosses/Silent/NewAge/ArchetypeAct1PoisonNewAge.java b/src/main/java/charbosses/bosses/Silent/NewAge/ArchetypeAct1PoisonNewAge.java index fc014f72c..8a167f96d 100644 --- a/src/main/java/charbosses/bosses/Silent/NewAge/ArchetypeAct1PoisonNewAge.java +++ b/src/main/java/charbosses/bosses/Silent/NewAge/ArchetypeAct1PoisonNewAge.java @@ -3,6 +3,7 @@ import charbosses.bosses.AbstractCharBoss; import charbosses.bosses.Silent.ArchetypeBaseSilent; import charbosses.cards.AbstractBossCard; +import charbosses.cards.colorless.EnShiv; import charbosses.cards.green.*; import charbosses.cards.other.Antidote; import charbosses.powers.bossmechanicpowers.SilentPoisonPower; @@ -44,7 +45,7 @@ public void initialize() { addRelic(new CBR_NeowsBlessing()); addRelic(new CBR_TwistedFunnel()); - addRelic(new CBR_HornCleat()); + addRelic(new CBR_Anchor()); addRelic(new CBR_Lantern()); // animation @@ -63,6 +64,7 @@ public void initialize() { public ArrayList getThisTurnCards() { ArrayList cardsList = new ArrayList<>(); boolean extraUpgrades = AbstractDungeon.ascensionLevel >= 4; + //boolean WhetstoneUpgrades = AbstractDungeon.ascensionLevel >= 19; if (!looped) { switch (turn) { case 0: //Turn 1 @@ -80,7 +82,7 @@ public ArrayList getThisTurnCards() { case 1: //Turn 2 - addToList(cardsList, new EnPoisonedStab()); + addToList(cardsList, new EnPoisonedStab(), true); addToList(cardsList, new EnDodgeAndRoll()); addToList(cardsList, new EnStrikeGreen()); turn++; @@ -90,7 +92,7 @@ public ArrayList getThisTurnCards() { addToList(cardsList, new EnFootwork(),extraUpgrades); addToList(cardsList, new EnNoxiousFumes()); - addToList(cardsList, new EnDeadlyPoison()); + addToList(cardsList, new EnPoisonedStab()); turn++; break; @@ -116,7 +118,7 @@ public ArrayList getThisTurnCards() { addToList(cardsList, new EnBurst()); addToList(cardsList, new EnDeflect()); addToList(cardsList, new EnDeflect()); - addToList(cardsList, new EnDeadlyPoison()); + addToList(cardsList, new EnPoisonedStab(), true); // c.cost = 0; // c.freeToPlayOnce = true; // c.modifyCostForCombat(-1); @@ -125,7 +127,7 @@ public ArrayList getThisTurnCards() { turn++; break; case 2: // Turn 7 + 3n - addToList(cardsList, new EnPoisonedStab()); + addToList(cardsList, new EnBane()); addToList(cardsList, new EnStrikeGreen()); addToList(cardsList, new EnDefendGreen()); turn = 0; @@ -138,6 +140,6 @@ public ArrayList getThisTurnCards() { @Override public void initializeBonusRelic() { - addRelic(new CBR_SneckoSkull()); + addRelic(new CBR_Vajra()); } } \ No newline at end of file diff --git a/src/main/java/charbosses/bosses/Watcher/CharBossWatcher.java b/src/main/java/charbosses/bosses/Watcher/CharBossWatcher.java index 6558ccd97..de6e16e03 100644 --- a/src/main/java/charbosses/bosses/Watcher/CharBossWatcher.java +++ b/src/main/java/charbosses/bosses/Watcher/CharBossWatcher.java @@ -2,10 +2,7 @@ import charbosses.bosses.AbstractBossDeckArchetype; import charbosses.bosses.AbstractCharBoss; -import charbosses.bosses.Watcher.NewAge.ArchetypeAct1RetainNewAge; -import charbosses.bosses.Watcher.NewAge.ArchetypeAct2CalmNewAge; -import charbosses.bosses.Watcher.NewAge.ArchetypeAct2StancesNewAge; -import charbosses.bosses.Watcher.NewAge.ArchetypeAct3DivinityNewAge; +import charbosses.bosses.Watcher.NewAge.*; import charbosses.core.EnemyEnergyManager; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.Color; @@ -21,10 +18,11 @@ import com.megacrit.cardcrawl.ui.panels.energyorb.EnergyOrbPurple; import downfall.downfallMod; import downfall.monsters.NeowBoss; +import downfall.util.LocalizeHelper; public class CharBossWatcher extends AbstractCharBoss { public static final String ID = downfallMod.makeID("Watcher"); - public static final String NAME = CardCrawlGame.languagePack.getCharacterString("Watcher").NAMES[0]; + public static final String NAME = LocalizeHelper.DonwfallRunHistoryMonsterNames.TEXT[4]; private Bone eyeBone; protected TextureAtlas eyeAtlas = null; @@ -109,7 +107,7 @@ public void generateDeck() { archetype = new ArchetypeAct2CalmNewAge(); break; case 3: - archetype = new ArchetypeAct3DivinityNewAge(); + archetype = new ArchetypeAct3DualityNewAge(); break; case 4: { switch (NeowBoss.Rezzes) { @@ -120,7 +118,7 @@ public void generateDeck() { archetype = new ArchetypeAct2CalmNewAge(); break; case 2: - archetype = new ArchetypeAct3DivinityNewAge(); + archetype = new ArchetypeAct3DualityNewAge(); break; default: archetype = new ArchetypeAct1RetainNewAge(); diff --git a/src/main/java/charbosses/bosses/Watcher/NewAge/ArchetypeAct3DivinityNewAge.java b/src/main/java/charbosses/bosses/Watcher/NewAge/ArchetypeAct3DivinityNewAge.java index 59976623d..bff6f0907 100644 --- a/src/main/java/charbosses/bosses/Watcher/NewAge/ArchetypeAct3DivinityNewAge.java +++ b/src/main/java/charbosses/bosses/Watcher/NewAge/ArchetypeAct3DivinityNewAge.java @@ -2,13 +2,14 @@ import charbosses.bosses.AbstractCharBoss; import charbosses.bosses.Defect.ArchetypeBaseDefect; +import charbosses.bosses.Watcher.ArchetypeBaseWatcher; import charbosses.cards.AbstractBossCard; import charbosses.cards.colorless.EnBlind; import charbosses.cards.colorless.EnGoodInstincts; +import charbosses.cards.colorless.EnSwiftStrike; +import charbosses.cards.curses.EnInjury; import charbosses.cards.curses.EnNormality; -import charbosses.cards.curses.EnShame; import charbosses.cards.purple.*; -import charbosses.powers.bossmechanicpowers.SilentPoisonPower; import charbosses.powers.bossmechanicpowers.WatcherDivinityPower; import charbosses.relics.*; import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; @@ -18,7 +19,7 @@ import java.util.ArrayList; -public class ArchetypeAct3DivinityNewAge extends ArchetypeBaseDefect { +public class ArchetypeAct3DivinityNewAge extends ArchetypeBaseWatcher { private AbstractBossCard theVeryImportantSandsOfTime = null; private AbstractBossCard theVeryImportantPerseverence = null; @@ -44,7 +45,7 @@ public void initialize() { addRelic(new CBR_NeowsBlessing()); addRelic(new CBR_ThreadAndNeedle()); - addRelic(new CBR_CaptainsWheel()); + addRelic(new CBR_Vajra()); addRelic(new CBR_Torii()); addRelic(new CBR_VelvetChoker()); } @@ -56,38 +57,43 @@ public ArrayList getThisTurnCards() { if (!looped) { switch (turn) { case 0: - //Turn 2 - addToList(cardsList, new EnWishPlated()); + //turn 1 + //nothing + addToList(cardsList, new EnWishPlated(), true); addToList(cardsList, new EnGoodInstincts()); - addToList(cardsList, new EnShame()); + addToList(cardsList, new EnInjury()); turn++; break; case 1: - //Turn 2 + //turn 2 + //25~ damage addToList(cardsList, new EnWaveOfTheHand()); - addToList(cardsList, new EnBlind()); + addToList(cardsList, new EnBrilliance(), extraUpgrades); // This is probably a terrible idea. This is where the Blind was, which was moved to where the Strike was. addToList(cardsList, new EnSwivel()); turn++; break; case 2: - //Turn 3 - AbstractBossCard c = new EnSignatureMove(); //Big attack - c.freeToPlayOnce = true; - addToList(cardsList, c, extraUpgrades, 2); - addToList(cardsList, new EnConjurBlade()); + //turn 3 + //off turn + addToList(cardsList, new EnSwiftStrike()); + addToList(cardsList, new EnConjurBlade(), false); addToList(cardsList, new EnSanctity()); //Not played turn++; break; case 3: + //turn 4 + //off turn / mercy addToList(cardsList, new EnProtect(), true); addToList(cardsList, new EnEmptyFist(), true); //Exit Divinity addToList(cardsList, new EnNormality()); turn++; break; case 4: - addToList(cardsList, new EnExpunger()); //Big Attack - addToList(cardsList, new EnStrikePurple()); - addToList(cardsList, new EnDevotion()); + //turn 5 + //big attack + addToList(cardsList, new EnExpunger()); //Big Attack // I mean, not really that big compared to what time eater hits for. + addToList(cardsList, new EnBlind()); // blind moved here to replace the strike + addToList(cardsList, new EnDevotion(), true); turn = 0; looped = true; break; @@ -95,6 +101,8 @@ public ArrayList getThisTurnCards() { } else { switch (turn) { case 0: + //loop starts here + //mercy turn / strength scaling if so addToList(cardsList, new EnWaveOfTheHand()); AbstractBossCard c = new EnSwivel(); c.energyGeneratedIfPlayed = 1; @@ -105,19 +113,22 @@ public ArrayList getThisTurnCards() { turn++; break; case 1: + //big attack turn addToList(cardsList, new EnExpunger()); //Big Attack addToList(cardsList, new EnSanctity()); //Exit Divinity - addToList(cardsList, new EnShame()); + addToList(cardsList, new EnInjury()); turn++; break; case 2: + //spam punish turn addToList(cardsList, new EnProtect(), true); - addToList(cardsList, new EnStrikePurple()); + addToList(cardsList, new EnBrilliance(), true); // this might be too difficult to block for but uhhhhhhhhhh addToList(cardsList, new EnBlind()); turn++; break; case 3: - addToList(cardsList, new EnSignatureMove(), extraUpgrades); //Big Attack + //off turn + addToList(cardsList, new EnSwiftStrike(), false); // signature move replaced with wallop addToList(cardsList, new EnGoodInstincts()); addToList(cardsList, new EnNormality()); turn = 0; @@ -130,6 +141,6 @@ public ArrayList getThisTurnCards() { @Override public void initializeBonusRelic() { - addRelic(new CBR_Damaru()); + addRelic(new CBR_DuvuDoll(2)); } } \ No newline at end of file diff --git a/src/main/java/charbosses/bosses/Watcher/NewAge/ArchetypeAct3DualityNewAge.java b/src/main/java/charbosses/bosses/Watcher/NewAge/ArchetypeAct3DualityNewAge.java new file mode 100644 index 000000000..e056b7db2 --- /dev/null +++ b/src/main/java/charbosses/bosses/Watcher/NewAge/ArchetypeAct3DualityNewAge.java @@ -0,0 +1,129 @@ +package charbosses.bosses.Watcher.NewAge; + +import charbosses.bosses.AbstractCharBoss; +import charbosses.bosses.Defect.ArchetypeBaseDefect; +import charbosses.bosses.Watcher.ArchetypeBaseWatcher; +import charbosses.cards.AbstractBossCard; +import charbosses.cards.colorless.*; +import charbosses.cards.curses.EnInjury; +import charbosses.cards.curses.EnNormality; +import charbosses.cards.purple.*; +import charbosses.powers.bossmechanicpowers.WatcherDivinityPower; +import charbosses.powers.bossmechanicpowers.WatcherSkillPower; +import charbosses.relics.*; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; + +import java.util.ArrayList; + +public class ArchetypeAct3DualityNewAge extends ArchetypeBaseWatcher { + + private AbstractBossCard theVeryImportantSandsOfTime = null; + private AbstractBossCard theVeryImportantPerseverence = null; + + public ArchetypeAct3DualityNewAge() { + super("WA_ARCHETYPE_DIVINITY", "Duality"); + + maxHPModifier += 380; + actNum = 3; + bossMechanicName = WatcherSkillPower.NAME; + bossMechanicDesc = WatcherSkillPower.DESCRIPTIONS[0] + 1 + WatcherSkillPower.DESCRIPTIONS[1] + 1 + WatcherSkillPower.DESCRIPTIONS[2] + 1 + WatcherSkillPower.DESCRIPTIONS[3]; + } + + @Override + public void addedPreBattle() { + super.addedPreBattle(); + AbstractCreature p = AbstractCharBoss.boss; + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, new WatcherSkillPower(p, 1))); + + } + + public void initialize() { + + addRelic(new CBR_NeowsBlessing()); + addRelic(new CBR_VelvetChoker()); + addRelic(new CBR_Duality()); + addRelic(new CBR_RedMask()); + addRelic(new CBR_Vajra()); + } + + @Override + public ArrayList getThisTurnCards() { + ArrayList cardsList = new ArrayList<>(); + boolean extraUpgrades = AbstractDungeon.ascensionLevel >= 4; + boolean egg = AbstractDungeon.ascensionLevel >= 19; + if (!looped) { + switch (turn) { + case 0: + //turn 1 + //nothing + addToList(cardsList, new EnVigilance()); + addToList(cardsList, new EnCrushJoints(), true); + addToList(cardsList, new EnNormality()); + turn++; + break; + case 1: + addToList(cardsList, new EnLikeWater()); + addToList(cardsList, new EnSwiftStrike(), egg); + addToList(cardsList, new EnConclude(), egg); + turn++; + break; + case 2: + addToList(cardsList, new EnSashWhip(), true); + addToList(cardsList, new EnJAX(), extraUpgrades); + addToList(cardsList, new EnInjury()); + turn++; + break; + case 3: + addToList(cardsList, new EnFasting()); + addToList(cardsList, new EnDarkShackles()); + addToList(cardsList, new EnEmptyFist(), egg); + turn++; + break; + case 4: + addToList(cardsList, new EnFollowUp(), egg); + addToList(cardsList, new EnGoodInstincts()); + addToList(cardsList, new EnSignatureMove(), egg); + turn = 0; + looped = true; + break; + } + } else { + switch (turn) { + case 0: + addToList(cardsList, new EnSwiftStrike(), egg); + addToList(cardsList, new EnVigilance()); + addToList(cardsList, new EnConclude(), egg); + turn++; + break; + case 1: + addToList(cardsList, new EnInjury()); + addToList(cardsList, new EnFollowUp(), egg); + addToList(cardsList, new EnSashWhip(), egg); + turn++; + break; + case 2: + addToList(cardsList, new EnEmptyFist(), egg); + addToList(cardsList, new EnGoodInstincts()); + addToList(cardsList, new EnCrushJoints(), true); + turn++; + break; + case 3: + addToList(cardsList, new EnJAX(), extraUpgrades); + addToList(cardsList, new EnSignatureMove(), egg); + addToList(cardsList, new EnNormality()); + turn = 0; + break; + } + } + + return cardsList; + } + + @Override + public void initializeBonusRelic() { + addRelic(new CBR_MoltenEgg()); + } +} \ No newline at end of file diff --git a/src/main/java/charbosses/cards/AbstractBossCard.java b/src/main/java/charbosses/cards/AbstractBossCard.java index 01fb76135..1bb90ed47 100644 --- a/src/main/java/charbosses/cards/AbstractBossCard.java +++ b/src/main/java/charbosses/cards/AbstractBossCard.java @@ -95,7 +95,7 @@ public abstract class AbstractBossCard extends AbstractCard { public boolean manualCustomVulnModifier = false; public static boolean fakeStormPower = false; //TODO - Does Vuln get actually calculated anywhere? this variable does not appear to be referenced - + //paper phrog? private static final float INTENT_HB_W = 64.0F * Settings.scale; public Hitbox intentHb = new Hitbox(INTENT_HB_W, INTENT_HB_W); diff --git a/src/main/java/charbosses/cards/blue/EnBiasedCognition.java b/src/main/java/charbosses/cards/blue/EnBiasedCognition.java index 944b47b4e..b35e821b2 100644 --- a/src/main/java/charbosses/cards/blue/EnBiasedCognition.java +++ b/src/main/java/charbosses/cards/blue/EnBiasedCognition.java @@ -4,18 +4,13 @@ import charbosses.cards.AbstractBossCard; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; -import com.megacrit.cardcrawl.actions.common.DamageAction; import com.megacrit.cardcrawl.cards.AbstractCard; -import com.megacrit.cardcrawl.cards.DamageInfo; -import com.megacrit.cardcrawl.cards.blue.BeamCell; -import com.megacrit.cardcrawl.cards.blue.BiasedCognition; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.localization.CardStrings; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.BiasPower; import com.megacrit.cardcrawl.powers.FocusPower; -import com.megacrit.cardcrawl.powers.VulnerablePower; import java.util.ArrayList; @@ -47,7 +42,6 @@ public void upgrade() { this.upgradeName(); this.upgradeMagicNumber(1); } - } @Override diff --git a/src/main/java/charbosses/cards/blue/EnBuffer.java b/src/main/java/charbosses/cards/blue/EnBuffer.java index 578801605..468fd4708 100644 --- a/src/main/java/charbosses/cards/blue/EnBuffer.java +++ b/src/main/java/charbosses/cards/blue/EnBuffer.java @@ -20,9 +20,14 @@ public EnBuffer() { super(ID, cardStrings.NAME, "blue/power/buffer", 2, cardStrings.DESCRIPTION, CardType.POWER, CardColor.BLUE, CardRarity.RARE, CardTarget.SELF, AbstractMonster.Intent.BUFF); this.baseMagicNumber = 1; this.magicNumber = this.baseMagicNumber; - // alwaysDisplayText = true; - } + } + public EnBuffer(boolean text) { + super(ID, cardStrings.NAME, "blue/power/buffer", 2, cardStrings.DESCRIPTION, CardType.POWER, CardColor.BLUE, CardRarity.RARE, CardTarget.SELF, AbstractMonster.Intent.BUFF); + this.baseMagicNumber = 1; + this.magicNumber = this.baseMagicNumber; + alwaysDisplayText = text; + } public void use(AbstractPlayer p, AbstractMonster m) { this.addToBot(new ApplyPowerAction(m, m, new BufferPower(m, this.magicNumber), this.magicNumber)); diff --git a/src/main/java/charbosses/cards/blue/EnConsume.java b/src/main/java/charbosses/cards/blue/EnConsume.java new file mode 100644 index 000000000..0d12768fc --- /dev/null +++ b/src/main/java/charbosses/cards/blue/EnConsume.java @@ -0,0 +1,57 @@ +package charbosses.cards.blue; + +import charbosses.actions.orb.EnemyDecreaseMaxOrbAction; +import charbosses.actions.orb.EnemyIncreaseMaxOrbAction; +import charbosses.bosses.Defect.NewAge.ArchetypeAct3OrbsNewAge; +import charbosses.cards.AbstractBossCard; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.DamageAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.localization.CardStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.FocusPower; + +import java.util.ArrayList; + +public class EnConsume extends AbstractBossCard { + public static final String ID = "downfall_Charboss:Consume"; + private static final CardStrings cardStrings; + + public EnConsume() { + super(ID, cardStrings.NAME, "blue/skill/consume", 2, cardStrings.DESCRIPTION, CardType.SKILL, CardColor.BLUE, CardRarity.UNCOMMON, CardTarget.SELF, AbstractMonster.Intent.BUFF); + this.baseMagicNumber = 2; + this.magicNumber = this.baseMagicNumber; + focusGeneratedIfPlayed = magicNumber; + } + + public void use(AbstractPlayer p, AbstractMonster m) { + ArchetypeAct3OrbsNewAge.resetPretendFocus(); + this.addToBot(new ApplyPowerAction(m, m, new FocusPower(m, this.magicNumber), this.magicNumber)); + this.addToBot(new EnemyDecreaseMaxOrbAction(1)); + } + + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + this.upgradeMagicNumber(1); + focusGeneratedIfPlayed = magicNumber; + } + + } + + @Override + public int getPriority(ArrayList hand) { + return 50; + } + + public AbstractCard makeCopy() { + return new EnConsume(); + } + + static { + cardStrings = CardCrawlGame.languagePack.getCardStrings("Consume"); + } +} diff --git a/src/main/java/charbosses/cards/blue/EnCoreSurge.java b/src/main/java/charbosses/cards/blue/EnCoreSurge.java index 8f4a0980f..471fd6142 100644 --- a/src/main/java/charbosses/cards/blue/EnCoreSurge.java +++ b/src/main/java/charbosses/cards/blue/EnCoreSurge.java @@ -10,6 +10,8 @@ import com.megacrit.cardcrawl.cards.blue.CoreSurge; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.localization.CardStrings; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.ArtifactPower; @@ -23,7 +25,12 @@ public class EnCoreSurge extends AbstractBossCard { public EnCoreSurge() { super(ID, cardStrings.NAME, "blue/attack/core_surge", 1, cardStrings.DESCRIPTION, CardType.ATTACK, CardColor.BLUE, CardRarity.RARE, CardTarget.ENEMY, AbstractMonster.Intent.ATTACK_BUFF); - this.exhaust = true; + if (AbstractDungeon.floorNum < 25) { + this.exhaust = true; + } + if (AbstractDungeon.floorNum > 25) { + this.exhaust = false; + } this.baseDamage = 11; this.baseMagicNumber = 1; this.magicNumber = this.baseMagicNumber; diff --git a/src/main/java/charbosses/cards/blue/EnCreativeAI.java b/src/main/java/charbosses/cards/blue/EnCreativeAI.java new file mode 100644 index 000000000..254088b25 --- /dev/null +++ b/src/main/java/charbosses/cards/blue/EnCreativeAI.java @@ -0,0 +1,55 @@ + +package charbosses.cards.blue; + +import charbosses.cards.AbstractBossCard; +import charbosses.powers.cardpowers.EnemyCreativeAIPower; +import charbosses.powers.general.EnemyDrawPower; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.GainBlockAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.blue.MachineLearning; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.localization.CardStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.DrawPower; + +import java.util.ArrayList; + +public class EnCreativeAI extends AbstractBossCard { + public static final String ID = "downfall_Charboss:CreativeAI"; + private static final CardStrings cardStrings; + + public EnCreativeAI() { + super(ID, cardStrings.NAME, "blue/power/creative_ai", 3, cardStrings.DESCRIPTION, CardType.POWER, CardColor.BLUE, CardRarity.RARE, CardTarget.SELF, AbstractMonster.Intent.BUFF); + alwaysDisplayText = true; + this.baseMagicNumber = 1; + this.magicNumber = 1; + } + + public void use(AbstractPlayer p, AbstractMonster m) { + this.addToBot(new ApplyPowerAction(m, m, new EnemyCreativeAIPower(m, this.magicNumber), this.magicNumber)); + } + + @Override + public int getPriority(ArrayList hand) { + return 50; + } + + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + this.upgradeBaseCost(2); + this.initializeDescription(); + } + + } + + public AbstractCard makeCopy() { + return new EnMachineLearning(); + } + + static { + cardStrings = CardCrawlGame.languagePack.getCardStrings("Creative AI"); + } +} diff --git a/src/main/java/charbosses/cards/blue/EnDoubleEnergy.java b/src/main/java/charbosses/cards/blue/EnDoubleEnergy.java index 254e93b4e..a56a489e8 100644 --- a/src/main/java/charbosses/cards/blue/EnDoubleEnergy.java +++ b/src/main/java/charbosses/cards/blue/EnDoubleEnergy.java @@ -22,7 +22,7 @@ public EnDoubleEnergy() { } public EnDoubleEnergy(int eGain) { - super(ID, cardStrings.NAME, "blue/skill/double_energy", 1, cardStrings.DESCRIPTION, CardType.SKILL, CardColor.BLUE, CardRarity.COMMON, CardTarget.SELF, AbstractMonster.Intent.BUFF); + super(ID, cardStrings.NAME, "blue/skill/double_energy", 1, cardStrings.DESCRIPTION, CardType.SKILL, CardColor.BLUE, CardRarity.UNCOMMON, CardTarget.SELF, AbstractMonster.Intent.BUFF); this.baseMagicNumber = eGain; this.magicNumber = this.baseMagicNumber; diff --git a/src/main/java/charbosses/cards/blue/EnElectrodynamics.java b/src/main/java/charbosses/cards/blue/EnElectrodynamics.java new file mode 100644 index 000000000..88595c48a --- /dev/null +++ b/src/main/java/charbosses/cards/blue/EnElectrodynamics.java @@ -0,0 +1,83 @@ +package charbosses.cards.blue; + +import charbosses.actions.orb.EnemyChannelAction; +import charbosses.bosses.AbstractCharBoss; +import charbosses.cards.AbstractBossCard; +import charbosses.orbs.AbstractEnemyOrb; +import charbosses.orbs.EnemyLightning; +import charbosses.powers.cardpowers.EnemyCreativeAIPower; +import charbosses.powers.cardpowers.EnemyElectroPower; +import charbosses.powers.cardpowers.EnemyStormPower; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.blue.Storm; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.localization.CardStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.ElectroPower; +import com.megacrit.cardcrawl.powers.FocusPower; +import com.megacrit.cardcrawl.powers.StormPower; + +import java.util.ArrayList; + +public class EnElectrodynamics extends AbstractBossCard { + public static final String ID = "downfall_Charboss:Electrodynamics"; + private static final CardStrings cardStrings; + + static { + cardStrings = CardCrawlGame.languagePack.getCardStrings("Electrodynamics"); + } + + public EnElectrodynamics() { + super(ID, cardStrings.NAME, "blue/power/electrodynamics", 2, cardStrings.DESCRIPTION, CardType.POWER, CardColor.BLUE, CardRarity.RARE, CardTarget.SELF, AbstractMonster.Intent.BUFF); + this.showEvokeValue = true; + this.showEvokeOrbCount = 2; + this.baseMagicNumber = 2; + this.magicNumber = this.baseMagicNumber; + alwaysDisplayText = true; + } + + public static int getFocusAmountSafe() { + if (AbstractCharBoss.boss.hasPower(FocusPower.POWER_ID)) { + return AbstractCharBoss.boss.getPower(FocusPower.POWER_ID).amount; + } + return 0; + } + + @Override + public String overrideIntentText() { + if (AbstractCharBoss.boss.hasPower(EnemyStormPower.POWER_ID)) { + int count=this.magicNumber+AbstractCharBoss.boss.getPower(EnemyStormPower.POWER_ID).amount; + return "(" + ( 3 + AbstractEnemyOrb.masterPretendFocus + getFocusAmountSafe()) +"×"+count+ ")"; + }else + return "(" + ( 3 + AbstractEnemyOrb.masterPretendFocus + getFocusAmountSafe()) +"×"+this.magicNumber+ ")"; + } + + public void use(AbstractPlayer p, AbstractMonster m) { + if (!p.hasPower(EnemyElectroPower.POWER_ID)) { + this.addToBot(new ApplyPowerAction(m, m, new EnemyElectroPower(m))); + } + for (int i = 0; i < this.magicNumber; ++i) { + this.addToBot(new EnemyChannelAction(new EnemyLightning())); + } + } + + @Override + public int getPriority(ArrayList hand) { + return 10; + } + + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + this.upgradeMagicNumber(1); + } + } + + public AbstractCard makeCopy() { + return new EnElectrodynamics(); + } +} \ No newline at end of file diff --git a/src/main/java/charbosses/cards/blue/EnForceField.java b/src/main/java/charbosses/cards/blue/EnForceField.java index ebc592014..76c580a4a 100644 --- a/src/main/java/charbosses/cards/blue/EnForceField.java +++ b/src/main/java/charbosses/cards/blue/EnForceField.java @@ -25,7 +25,7 @@ public class EnForceField extends AbstractBossCard { private static final CardStrings cardStrings; public EnForceField() { - super("Force Field", cardStrings.NAME, "blue/skill/forcefield", 4, cardStrings.DESCRIPTION, CardType.SKILL, CardColor.BLUE, CardRarity.UNCOMMON, CardTarget.SELF, AbstractMonster.Intent.DEFEND); + super("Force Field", cardStrings.NAME, "blue/skill/forcefield", 0, cardStrings.DESCRIPTION, CardType.SKILL, CardColor.BLUE, CardRarity.UNCOMMON, CardTarget.SELF, AbstractMonster.Intent.DEFEND); this.baseBlock = 12; } diff --git a/src/main/java/charbosses/cards/blue/EnFusion.java b/src/main/java/charbosses/cards/blue/EnFusion.java index b828a4d27..524eabc8a 100644 --- a/src/main/java/charbosses/cards/blue/EnFusion.java +++ b/src/main/java/charbosses/cards/blue/EnFusion.java @@ -29,14 +29,23 @@ public EnFusion(boolean upgraded) { } public EnFusion() { - super(ID, cardStrings.NAME, "blue/skill/fusion", 2, cardStrings.DESCRIPTION, CardType.SKILL, CardColor.BLUE, CardRarity.BASIC, CardTarget.SELF, AbstractMonster.Intent.BUFF); + super(ID, cardStrings.NAME, "blue/skill/fusion", 2, cardStrings.DESCRIPTION, CardType.SKILL, CardColor.BLUE, CardRarity.UNCOMMON, CardTarget.SELF, AbstractMonster.Intent.BUFF); this.showEvokeValue = true; this.showEvokeOrbCount = 1; this.baseMagicNumber = 1; this.magicNumber = this.baseMagicNumber; alwaysDisplayText = true; } - + public EnFusion(boolean upgraded,boolean text) { + super(ID, cardStrings.NAME, "blue/skill/fusion", 2, cardStrings.DESCRIPTION, CardType.SKILL, CardColor.BLUE, CardRarity.UNCOMMON, CardTarget.SELF, AbstractMonster.Intent.BUFF); + this.showEvokeValue = true; + this.showEvokeOrbCount = 1; + this.baseMagicNumber = 1; + this.magicNumber = this.baseMagicNumber; + alwaysDisplayText = text; + if (upgraded) + upgrade(); + } public void use(AbstractPlayer p, AbstractMonster m) { for (int i = 0; i < this.magicNumber; ++i) { this.addToBot(new EnemyChannelAction(new EnemyPlasma())); diff --git a/src/main/java/charbosses/cards/blue/EnHologram.java b/src/main/java/charbosses/cards/blue/EnHologram.java new file mode 100644 index 000000000..fe1924576 --- /dev/null +++ b/src/main/java/charbosses/cards/blue/EnHologram.java @@ -0,0 +1,45 @@ +package charbosses.cards.blue; + +import charbosses.cards.AbstractBossCard; +import com.megacrit.cardcrawl.actions.common.GainBlockAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.blue.Leap; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.localization.CardStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +public class EnHologram extends AbstractBossCard { + public static final String ID = "downfall_Charboss:Hologram"; + private static final CardStrings cardStrings; + + public EnHologram() { + super(ID, cardStrings.NAME, "blue/skill/hologram", 1, cardStrings.DESCRIPTION, CardType.SKILL, CardColor.BLUE, CardRarity.COMMON, CardTarget.SELF, AbstractMonster.Intent.DEFEND_BUFF); + this.baseBlock = 3; + this.exhaust=true; + } + + public void use(AbstractPlayer p, AbstractMonster m) { + + this.addToBot(new GainBlockAction(m, m, this.block)); + } + + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + this.exhaust=false; + this.upgradeBlock(2); + this.rawDescription = cardStrings.UPGRADE_DESCRIPTION; + this.initializeDescription(); + } + + } + + public AbstractCard makeCopy() { + return new EnHologram(); + } + + static { + cardStrings = CardCrawlGame.languagePack.getCardStrings("Hologram"); + } +} diff --git a/src/main/java/charbosses/cards/blue/EnHyperbeam.java b/src/main/java/charbosses/cards/blue/EnHyperbeam.java index 12e432cf8..e9045d5d3 100644 --- a/src/main/java/charbosses/cards/blue/EnHyperbeam.java +++ b/src/main/java/charbosses/cards/blue/EnHyperbeam.java @@ -14,6 +14,7 @@ import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.localization.CardStrings; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.ArtifactPower; import com.megacrit.cardcrawl.powers.FocusPower; import com.megacrit.cardcrawl.powers.LockOnPower; import com.megacrit.cardcrawl.vfx.combat.MindblastEffect; @@ -38,6 +39,7 @@ public void use(final AbstractPlayer p, final AbstractMonster m) { addToBot(new AbstractGameAction() { @Override public void update() { + ArchetypeAct3OrbsNewAge.resetPretendFocus(); isDone = true; } diff --git a/src/main/java/charbosses/cards/blue/EnMulticastPlasma.java b/src/main/java/charbosses/cards/blue/EnMulticastPlasma.java new file mode 100644 index 000000000..44bf22aeb --- /dev/null +++ b/src/main/java/charbosses/cards/blue/EnMulticastPlasma.java @@ -0,0 +1,61 @@ +package charbosses.cards.blue; + +import charbosses.actions.common.EnemyGainEnergyAction; +import charbosses.actions.orb.EnemyAnimateOrbAction; +import charbosses.actions.orb.EnemyEvokeOrbAction; +import charbosses.actions.orb.EnemyEvokeWithoutRemovingOrbAction; +import charbosses.actions.orb.EnemyRemoveOrbAction; +import charbosses.bosses.AbstractCharBoss; +import charbosses.cards.AbstractBossCard; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.localization.CardStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import java.util.ArrayList; + +public class EnMulticastPlasma extends AbstractBossCard { + public static final String ID = "downfall_Charboss:Multi-Cast"; + private static final CardStrings cardStrings; + private int cost; + + static { + cardStrings = CardCrawlGame.languagePack.getCardStrings("Multi-Cast"); + } + + public EnMulticastPlasma() { + this(2); + } + + public EnMulticastPlasma(int inCost) { + super(ID, cardStrings.NAME, "blue/skill/multicast", inCost, cardStrings.DESCRIPTION, CardType.SKILL, CardColor.BLUE, CardRarity.RARE, CardTarget.NONE, AbstractMonster.Intent.BUFF); + cost = inCost; + this.showEvokeValue = true; + this.energyGeneratedIfPlayed = inCost*2; + } + + + public void use(AbstractPlayer p, AbstractMonster m) { +// if (m instanceof AbstractCharBoss) { +// addToBot(new EnemyGainEnergyAction(((AbstractCharBoss) m).energyPanel.getCurrentEnergy())); +// } + if (m instanceof AbstractCharBoss) { + addToBot(new EnemyGainEnergyAction(((this.cost-2)))); + } + this.addToBot(new EnemyAnimateOrbAction(1)); + this.addToBot(new EnemyRemoveOrbAction(1)); + } + + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + this.rawDescription = cardStrings.UPGRADE_DESCRIPTION; + this.initializeDescription(); + } + } + + public AbstractCard makeCopy() { + return new EnMulticastPlasma(); + } +} diff --git a/src/main/java/charbosses/cards/blue/EnReprogram.java b/src/main/java/charbosses/cards/blue/EnReprogram.java index 30a631feb..111161efb 100644 --- a/src/main/java/charbosses/cards/blue/EnReprogram.java +++ b/src/main/java/charbosses/cards/blue/EnReprogram.java @@ -11,8 +11,10 @@ import com.megacrit.cardcrawl.cards.blue.Reprogram; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.localization.CardStrings; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.ArtifactPower; import com.megacrit.cardcrawl.powers.DexterityPower; import com.megacrit.cardcrawl.powers.FocusPower; import com.megacrit.cardcrawl.powers.StrengthPower; @@ -28,6 +30,9 @@ public EnReprogram() { this.baseMagicNumber = 1; this.magicNumber = this.baseMagicNumber; strengthGeneratedIfPlayed = 1; + if (AbstractDungeon.ascensionLevel >= 4) { + strengthGeneratedIfPlayed = 2; + } } public void use(AbstractPlayer p, AbstractMonster m) { @@ -39,8 +44,8 @@ public void update() { } }); this.addToBot(new ApplyPowerAction(m, m, new FocusPower(m, -this.magicNumber), -this.magicNumber)); - this.addToBot(new ApplyPowerAction(m, m, new StrengthPower(m, this.magicNumber), 1)); - this.addToBot(new ApplyPowerAction(m, m, new DexterityPower(m, this.magicNumber), 1)); + this.addToBot(new ApplyPowerAction(m, m, new StrengthPower(m, this.magicNumber), this.magicNumber)); + this.addToBot(new ApplyPowerAction(m, m, new DexterityPower(m, this.magicNumber), this.magicNumber)); } public AbstractCard makeCopy() { diff --git a/src/main/java/charbosses/cards/blue/EnTurbo.java b/src/main/java/charbosses/cards/blue/EnTurbo.java index c5d1117d2..89cf0968d 100644 --- a/src/main/java/charbosses/cards/blue/EnTurbo.java +++ b/src/main/java/charbosses/cards/blue/EnTurbo.java @@ -6,6 +6,7 @@ import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.animations.VFXAction; import com.megacrit.cardcrawl.actions.common.DamageAction; +import com.megacrit.cardcrawl.actions.common.MakeTempCardInDiscardAction; import com.megacrit.cardcrawl.actions.common.MakeTempCardInDrawPileAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.cards.DamageInfo; @@ -33,7 +34,7 @@ public EnTurbo() { public void use(AbstractPlayer p, AbstractMonster m) { addToBot(new EnemyGainEnergyAction(this.magicNumber)); - addToBot(new MakeTempCardInDrawPileAction(new VoidCard(), 1, false, true)); + addToBot(new MakeTempCardInDiscardAction(new VoidCard(),1)); } public void upgrade() { diff --git a/src/main/java/charbosses/cards/colorless/EnBlind.java b/src/main/java/charbosses/cards/colorless/EnBlind.java index 3b5417299..722e75b22 100644 --- a/src/main/java/charbosses/cards/colorless/EnBlind.java +++ b/src/main/java/charbosses/cards/colorless/EnBlind.java @@ -1,6 +1,10 @@ package charbosses.cards.colorless; +import charbosses.bosses.AbstractCharBoss; import charbosses.cards.AbstractBossCard; +import charbosses.orbs.AbstractEnemyOrb; +import charbosses.powers.cardpowers.EnemyStormPower; +import charbosses.powers.general.EnemyPoisonPower; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; import com.megacrit.cardcrawl.cards.AbstractCard; @@ -11,6 +15,7 @@ import com.megacrit.cardcrawl.localization.CardStrings; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.IntangiblePower; +import com.megacrit.cardcrawl.powers.SadisticPower; import com.megacrit.cardcrawl.powers.ThornsPower; import com.megacrit.cardcrawl.powers.WeakPower; @@ -42,6 +47,14 @@ public void upgrade() { } + public String overrideIntentText() { + if (AbstractCharBoss.boss.hasPower(SadisticPower.POWER_ID)) { + int count=this.magicNumber+AbstractCharBoss.boss.getPower(SadisticPower.POWER_ID).amount; + return "(" +count+ ")"; + } + return super.overrideIntentText(); + } + @Override public int getPriority(ArrayList hand) { return 10; diff --git a/src/main/java/charbosses/cards/colorless/EnDarkShackles.java b/src/main/java/charbosses/cards/colorless/EnDarkShackles.java new file mode 100644 index 000000000..dfa5b4cda --- /dev/null +++ b/src/main/java/charbosses/cards/colorless/EnDarkShackles.java @@ -0,0 +1,55 @@ +package charbosses.cards.colorless; + +import charbosses.cards.AbstractBossCard; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.GainBlockAction; +import com.megacrit.cardcrawl.actions.utility.SFXAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.colorless.DarkShackles; +import com.megacrit.cardcrawl.cards.green.PiercingWail; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.localization.CardStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.GainStrengthPower; +import com.megacrit.cardcrawl.powers.StrengthPower; +import com.megacrit.cardcrawl.vfx.combat.ShockWaveEffect; + +public class EnDarkShackles extends AbstractBossCard { + public static final String ID = "downfall_Charboss:DarkShackles"; + private static final CardStrings cardStrings; + + static { + cardStrings = CardCrawlGame.languagePack.getCardStrings(DarkShackles.ID); + } + + public EnDarkShackles() { + super(ID, EnDarkShackles.cardStrings.NAME, "colorless/skill/dark_shackles", 0, EnDarkShackles.cardStrings.DESCRIPTION, CardType.SKILL, CardColor.COLORLESS, CardRarity.UNCOMMON, CardTarget.ENEMY, AbstractMonster.Intent.STRONG_DEBUFF); + this.exhaust = true; + this.baseMagicNumber = 9; + this.magicNumber = this.baseMagicNumber; + } + + @Override + public void use(final AbstractPlayer p, final AbstractMonster m) { + this.addToBot(new ApplyPowerAction(p, m, new StrengthPower(p, -this.magicNumber), -this.magicNumber, true, AbstractGameAction.AttackEffect.NONE)); + if (!p.hasPower("Artifact")) + this.addToBot(new ApplyPowerAction(p, m, new GainStrengthPower(p, this.magicNumber), this.magicNumber, true, AbstractGameAction.AttackEffect.NONE)); + } + + @Override + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + this.upgradeMagicNumber(6); + } + } + + @Override + public AbstractCard makeCopy() { + return new EnDarkShackles(); + } +} diff --git a/src/main/java/charbosses/cards/colorless/EnTrip.java b/src/main/java/charbosses/cards/colorless/EnTrip.java index 8a2788465..da00338a2 100644 --- a/src/main/java/charbosses/cards/colorless/EnTrip.java +++ b/src/main/java/charbosses/cards/colorless/EnTrip.java @@ -1,6 +1,9 @@ package charbosses.cards.colorless; +import charbosses.bosses.AbstractCharBoss; import charbosses.cards.AbstractBossCard; +import charbosses.powers.cardpowers.EnemyStormPower; +import charbosses.powers.general.EnemyPoisonPower; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; import com.megacrit.cardcrawl.cards.AbstractCard; @@ -11,6 +14,7 @@ import com.megacrit.cardcrawl.localization.CardStrings; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.IntangiblePower; +import com.megacrit.cardcrawl.powers.SadisticPower; import com.megacrit.cardcrawl.powers.ThornsPower; import com.megacrit.cardcrawl.powers.VulnerablePower; @@ -46,9 +50,17 @@ public void upgrade() { this.rawDescription = cardStrings.UPGRADE_DESCRIPTION; this.initializeDescription(); } + } + public String overrideIntentText() { + if (AbstractCharBoss.boss.hasPower(SadisticPower.POWER_ID)) { + int count=this.magicNumber+AbstractCharBoss.boss.getPower(SadisticPower.POWER_ID).amount; + return "(" +count+ ")"; + } + return super.overrideIntentText(); } + @Override public int getPriority(ArrayList hand) { return 10; diff --git a/src/main/java/charbosses/cards/curses/EnAged.java b/src/main/java/charbosses/cards/curses/EnAged.java index 043367b03..863372d03 100644 --- a/src/main/java/charbosses/cards/curses/EnAged.java +++ b/src/main/java/charbosses/cards/curses/EnAged.java @@ -40,7 +40,7 @@ public void use(final AbstractPlayer p, final AbstractMonster m) { @Override public void triggerWhenDrawn() { - addToBot(new MakeTempCardInDrawPileAction(new VoidCard(), 1, false, true)); + addToBot(new MakeTempCardInDiscardAction(new VoidCard(), 1)); } @Override diff --git a/src/main/java/charbosses/cards/other/Antidote.java b/src/main/java/charbosses/cards/other/Antidote.java index f4fe6eb6a..49576b12d 100644 --- a/src/main/java/charbosses/cards/other/Antidote.java +++ b/src/main/java/charbosses/cards/other/Antidote.java @@ -21,7 +21,7 @@ public class Antidote extends AbstractDownfallCard { public Antidote() { super(ID, cardStrings.NAME, IMG_PATH, 1, cardStrings.DESCRIPTION, CardType.SKILL, CardColor.COLORLESS, CardRarity.SPECIAL, CardTarget.SELF); - baseMagicNumber = magicNumber = 12; + baseMagicNumber = magicNumber = 15; selfRetain = true; } @@ -35,8 +35,8 @@ public void use(AbstractPlayer p, AbstractMonster m) { } public void upp () { - upgradeMagicNumber(3); -// upgradeBaseCost(0); + //upgradeMagicNumber(3); + upgradeBaseCost(0); } static { diff --git a/src/main/java/charbosses/cards/purple/EnBrilliance.java b/src/main/java/charbosses/cards/purple/EnBrilliance.java index 4fa37a18f..934eaf0c0 100644 --- a/src/main/java/charbosses/cards/purple/EnBrilliance.java +++ b/src/main/java/charbosses/cards/purple/EnBrilliance.java @@ -31,6 +31,7 @@ public EnBrilliance() { this.magicNumber = this.baseMagicNumber; } + public void applyPowers() { int realBaseDamage = this.baseDamage; this.baseMagicNumber = AbstractCharBoss.boss.mantraGained; @@ -38,6 +39,7 @@ public void applyPowers() { super.applyPowers(); this.baseDamage = realBaseDamage; this.isDamageModified = this.damage != this.baseDamage; + super.applyPowers(); } public void calculateCardDamage(AbstractMonster mo) { diff --git a/src/main/java/charbosses/cards/purple/EnConclude.java b/src/main/java/charbosses/cards/purple/EnConclude.java new file mode 100644 index 000000000..7cbee7d89 --- /dev/null +++ b/src/main/java/charbosses/cards/purple/EnConclude.java @@ -0,0 +1,49 @@ +package charbosses.cards.purple; + +import charbosses.cards.AbstractBossCard; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.actions.common.DamageAction; +import com.megacrit.cardcrawl.actions.common.DamageAllEnemiesAction; +import com.megacrit.cardcrawl.actions.utility.SFXAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.localization.CardStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.vfx.combat.CleaveEffect; + +public class EnConclude extends AbstractBossCard { + public static final String ID = "downfall_Charboss:Conclude"; + private static final CardStrings cardStrings; + + static { + cardStrings = CardCrawlGame.languagePack.getCardStrings("Consecrate"); + } + + public EnConclude() { + super(ID, cardStrings.NAME, "purple/attack/conclude", 1, cardStrings.DESCRIPTION, CardType.ATTACK, CardColor.PURPLE, CardRarity.UNCOMMON, CardTarget.ALL_ENEMY, AbstractMonster.Intent.ATTACK); + this.baseDamage = 12; + } + + @Override + public void use(final AbstractPlayer p, final AbstractMonster m) { + this.addToBot(new SFXAction("ATTACK_HEAVY")); + this.addToBot(new VFXAction(p, new CleaveEffect(), 0.1F)); + this.addToBot(new DamageAction(p, new DamageInfo(m, this.damage, this.damageTypeForTurn), AbstractGameAction.AttackEffect.NONE)); + } + + @Override + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + this.upgradeDamage(4); + } + } + + @Override + public AbstractCard makeCopy() { + return new EnConclude(); + } +} diff --git a/src/main/java/charbosses/cards/purple/EnPressurePoints.java b/src/main/java/charbosses/cards/purple/EnPressurePoints.java index a2a0d5ab1..cd9ecb967 100644 --- a/src/main/java/charbosses/cards/purple/EnPressurePoints.java +++ b/src/main/java/charbosses/cards/purple/EnPressurePoints.java @@ -41,10 +41,11 @@ public String overrideIntentText() { @Override public void use(final AbstractPlayer p, final AbstractMonster m) { - //TODO: add vfx, this below wont work, still strikes the player from left to right like you use on a monster -// AbstractGameEffect pressure_vfx = new PressurePointEffect(p.hb.cX, p.hb.cY); -// pressure_vfx.renderBehind = true; -// addToBot(new VFXAction( pressure_vfx )); + //add vfx, this below wont work, still strikes the player from left to right like you use on a monster + //still probably worth using imo, removing the to-do. + AbstractGameEffect pressure_vfx = new PressurePointEffect(p.hb.cX, p.hb.cY); + pressure_vfx.renderBehind = true; + addToBot(new VFXAction( pressure_vfx )); addToBot(new ApplyPowerAction(p, m, new EnemyMarkPower(p, m, magicNumber), magicNumber)); if(countMarks()>0) { this.addToBot(new DamageAction(p, new DamageInfo(m, countMarks(), DamageInfo.DamageType.THORNS), AbstractGameAction.AttackEffect.FIRE)); diff --git a/src/main/java/charbosses/cards/purple/EnTantrum.java b/src/main/java/charbosses/cards/purple/EnTantrum.java index dd53fd391..a9a0de968 100644 --- a/src/main/java/charbosses/cards/purple/EnTantrum.java +++ b/src/main/java/charbosses/cards/purple/EnTantrum.java @@ -24,7 +24,7 @@ public class EnTantrum extends AbstractStanceChangeCard { boolean realWrath = false; public EnTantrum() { - super(ID, cardStrings.NAME, "purple/attack/tantrum", 1, cardStrings.DESCRIPTION, CardType.ATTACK, CardColor.PURPLE, CardRarity.COMMON, CardTarget.ENEMY, AbstractMonster.Intent.ATTACK_BUFF); + super(ID, cardStrings.NAME, "purple/attack/tantrum", 1, cardStrings.DESCRIPTION, CardType.ATTACK, CardColor.PURPLE, CardRarity.UNCOMMON, CardTarget.ENEMY, AbstractMonster.Intent.ATTACK_BUFF); this.baseDamage = 3; this.baseMagicNumber = 3; this.magicNumber = 3; diff --git a/src/main/java/charbosses/cards/red/EnIntimidate.java b/src/main/java/charbosses/cards/red/EnIntimidate.java index 861666211..a85859f4f 100644 --- a/src/main/java/charbosses/cards/red/EnIntimidate.java +++ b/src/main/java/charbosses/cards/red/EnIntimidate.java @@ -33,7 +33,7 @@ public class EnIntimidate extends AbstractBossCard { public EnIntimidate() { super(ID, cardStrings.NAME, "red/skill/intimidate", 0, cardStrings.DESCRIPTION, CardType.SKILL, CardColor.RED, CardRarity.UNCOMMON, CardTarget.ALL_ENEMY, AbstractMonster.Intent.DEBUFF); this.exhaust = true; - this.baseMagicNumber = 2; + this.baseMagicNumber = 1; this.magicNumber = this.baseMagicNumber; artifactConsumedIfPlayed = 1; } @@ -42,7 +42,7 @@ public EnIntimidate() { public void use(final AbstractPlayer p, final AbstractMonster m) { this.addToBot(new SFXAction("INTIMIDATE")); this.addToBot(new VFXAction(p, new IntimidateEffect(m.hb.cX, m.hb.cY), 1.0F)); - this.addToBot(new ApplyPowerAction(p, m, new WeakPower(p, this.magicNumber + 1, false), this.magicNumber + 1, true, AbstractGameAction.AttackEffect.NONE)); + this.addToBot(new ApplyPowerAction(p, m, new WeakPower(p, this.magicNumber, true), this.magicNumber)); } @Override diff --git a/src/main/java/charbosses/cards/red/EnReaper.java b/src/main/java/charbosses/cards/red/EnReaper.java index cffd46023..614bcf5da 100644 --- a/src/main/java/charbosses/cards/red/EnReaper.java +++ b/src/main/java/charbosses/cards/red/EnReaper.java @@ -46,6 +46,9 @@ public void use(final AbstractPlayer p, final AbstractMonster m) { calculateCardDamage(q); addToBot(new VampireDamageAction(q, new DamageInfo(m, damage, damageTypeForTurn), AbstractGameAction.AttackEffect.NONE)); //TODO - Technically this won't work if a modded effect has given the mushrooms Block or Buffer or something. If that ends up being a problem, we'll need a custom action here. + + //todo: well Collector has a card that does this, VoidArmor iirc so maybe this is a problem and no one has noticed yet? + // Is it actually a problem atm? Will check later. if (q.currentHealth <= damage){ addToBot(new WaitAction(0.1F)); addToBot(new ApplyPowerAction(m, m, new StrengthPower(m, 1),1)); diff --git a/src/main/java/charbosses/powers/bossmechanicpowers/DefectAncientConstructPower.java b/src/main/java/charbosses/powers/bossmechanicpowers/DefectAncientConstructPower.java index 38e582d3c..ae9097ff8 100644 --- a/src/main/java/charbosses/powers/bossmechanicpowers/DefectAncientConstructPower.java +++ b/src/main/java/charbosses/powers/bossmechanicpowers/DefectAncientConstructPower.java @@ -35,10 +35,10 @@ public void updateDescription() { @Override public void atEndOfTurn(boolean isPlayer) { - if (!this.owner.hasPower(ArtifactPower.POWER_ID)) { - AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this.owner, this.owner, new ArtifactPower(this.owner, this.amount), this.amount)); + // if (!this.owner.hasPower(ArtifactPower.POWER_ID)) { + // AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this.owner, this.owner, new ArtifactPower(this.owner, this.amount), this.amount)); // AbstractDungeon.actionManager.addToBottom(new LoseEnergyAction(this.amount)); - } + // } } static { diff --git a/src/main/java/charbosses/powers/bossmechanicpowers/DefectBiasCuriosityPower.java b/src/main/java/charbosses/powers/bossmechanicpowers/DefectBiasCuriosityPower.java new file mode 100644 index 000000000..491b1afde --- /dev/null +++ b/src/main/java/charbosses/powers/bossmechanicpowers/DefectBiasCuriosityPower.java @@ -0,0 +1,49 @@ +package charbosses.powers.bossmechanicpowers; + +import charbosses.bosses.AbstractCharBoss; +import charbosses.cards.AbstractBossCard; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.utility.UseCardAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.AbstractCard.CardType; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.localization.PowerStrings; +import com.megacrit.cardcrawl.powers.AbstractPower; +import com.megacrit.cardcrawl.powers.DexterityPower; +import com.megacrit.cardcrawl.powers.FocusPower; + + +public class DefectBiasCuriosityPower extends AbstractBossMechanicPower { + public static final String POWER_ID = "downfall:DefectBiasCuriosity"; + private static final PowerStrings powerStrings = CardCrawlGame.languagePack.getPowerStrings(POWER_ID); + public static final String NAME = powerStrings.NAME; + public static final String[] DESCRIPTIONS = powerStrings.DESCRIPTIONS; + private boolean triggered = false; + + public DefectBiasCuriosityPower(AbstractCreature owner) { + this.name = NAME; + this.ID = POWER_ID; + this.owner = owner; + this.amount = 1; + updateDescription(); + loadRegion("bias"); + this.type = AbstractPower.PowerType.DEBUFF; + } + + public void updateDescription() { + this.description = (DESCRIPTIONS[1] + this.amount + DESCRIPTIONS[2] + DESCRIPTIONS[3]); + } + +// @Override +// public void atEndOfRound() { +// super.atEndOfRound(); +// // triggered=false; +// updateDescription(); +// } + + public void atEndOfTurn(boolean isPlayer) { + // if(triggered==false) + addToBot(new ApplyPowerAction(this.owner, this.owner, new FocusPower(this.owner, -this.amount), -this.amount)); + } + } diff --git a/src/main/java/charbosses/powers/bossmechanicpowers/DefectCuriosityLightningPower.java b/src/main/java/charbosses/powers/bossmechanicpowers/DefectCuriosityLightningPower.java index 0daa1bf4a..8e1069739 100644 --- a/src/main/java/charbosses/powers/bossmechanicpowers/DefectCuriosityLightningPower.java +++ b/src/main/java/charbosses/powers/bossmechanicpowers/DefectCuriosityLightningPower.java @@ -33,7 +33,10 @@ public DefectCuriosityLightningPower(AbstractCreature owner) { public void updateDescription() { this.description = (DESCRIPTIONS[0] + this.amount + DESCRIPTIONS[1]); } - // TODO: display right damage when channeled on defrag round + + // TO-DO: display right damage when channeled on defrag round + //this power isn't used, so I'm removing this to-do + public void onUseCard(AbstractCard card, UseCardAction action) { if (card.type == CardType.POWER && !(card instanceof AbstractBossCard)) { flash(); diff --git a/src/main/java/charbosses/powers/bossmechanicpowers/DefectCuriosityPower.java b/src/main/java/charbosses/powers/bossmechanicpowers/DefectCuriosityPower.java index 11c866bb5..b4f66644b 100644 --- a/src/main/java/charbosses/powers/bossmechanicpowers/DefectCuriosityPower.java +++ b/src/main/java/charbosses/powers/bossmechanicpowers/DefectCuriosityPower.java @@ -1,18 +1,30 @@ package charbosses.powers.bossmechanicpowers; +import awakenedOne.powers.DoubleSpellPower; +import basemod.interfaces.CloneablePowerInterface; import charbosses.bosses.AbstractCharBoss; +import charbosses.bosses.Defect.NewAge.ArchetypeAct3OrbsNewAge; import charbosses.cards.AbstractBossCard; +import com.evacipated.cardcrawl.mod.stslib.powers.interfaces.OnReceivePowerPower; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.DamageAction; +import com.megacrit.cardcrawl.actions.common.RemoveSpecificPowerAction; import com.megacrit.cardcrawl.actions.utility.UseCardAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.cards.AbstractCard.CardType; +import com.megacrit.cardcrawl.cards.DamageInfo; import com.megacrit.cardcrawl.core.AbstractCreature; import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.localization.PowerStrings; import com.megacrit.cardcrawl.powers.AbstractPower; import com.megacrit.cardcrawl.powers.FocusPower; +import com.megacrit.cardcrawl.powers.StrengthPower; +import sneckomod.powers.VenomDebuff; -public class DefectCuriosityPower extends AbstractBossMechanicPower { +public class DefectCuriosityPower extends AbstractBossMechanicPower implements OnReceivePowerPower { public static final String POWER_ID = "downfall:DefectCuriosity"; private static final PowerStrings powerStrings = CardCrawlGame.languagePack.getPowerStrings(POWER_ID); public static final String NAME = powerStrings.NAME; @@ -38,5 +50,34 @@ public void onUseCard(AbstractCard card, UseCardAction action) { addToBot(new com.megacrit.cardcrawl.actions.common.ApplyPowerAction(this.owner, this.owner, new FocusPower(this.owner, this.amount), this.amount)); } } + + @Override + public void atStartOfTurn() { + addToTop(new AbstractGameAction() { + @Override + public void update() { + ArchetypeAct3OrbsNewAge.resetPretendFocus(); + isDone = true; + } + }); + } + + @Override + public boolean onReceivePower(AbstractPower power, AbstractCreature target, AbstractCreature source) { + if (power.ID == StrengthPower.POWER_ID) { + this.addToBot(new ApplyPowerAction(this.owner, this.owner, new FocusPower(this.owner, this.amount*power.amount), this.amount*power.amount)); + } + if (power.ID == FocusPower.POWER_ID && power.amount < 0 && !owner.hasPower("Artifact") && target == this.owner) { + addToTop(new AbstractGameAction() { + @Override + public void update() { + ArchetypeAct3OrbsNewAge.resetPretendFocus(); + isDone = true; + } + }); + } + return true; + } + } diff --git a/src/main/java/charbosses/powers/bossmechanicpowers/WatcherCripplePower.java b/src/main/java/charbosses/powers/bossmechanicpowers/WatcherCripplePower.java index 3d7b6ba6c..d5cb20d62 100644 --- a/src/main/java/charbosses/powers/bossmechanicpowers/WatcherCripplePower.java +++ b/src/main/java/charbosses/powers/bossmechanicpowers/WatcherCripplePower.java @@ -97,7 +97,6 @@ public void stackPower(int stackAmount) { @Override public void atEndOfRound() { super.atEndOfRound(); - this.amount = 3 * LOSE_1_STRENGTH_PER_X_HP; this.thirdused = false; this.secondused = false; diff --git a/src/main/java/charbosses/powers/bossmechanicpowers/WatcherDivinityPower.java b/src/main/java/charbosses/powers/bossmechanicpowers/WatcherDivinityPower.java index 49ce8fff6..ba09a2a72 100644 --- a/src/main/java/charbosses/powers/bossmechanicpowers/WatcherDivinityPower.java +++ b/src/main/java/charbosses/powers/bossmechanicpowers/WatcherDivinityPower.java @@ -5,9 +5,11 @@ package charbosses.powers.bossmechanicpowers; +import charbosses.bosses.AbstractCharBoss; import charbosses.cards.AbstractBossCard; import charbosses.powers.cardpowers.EnemyAccuracyPower; import charbosses.powers.cardpowers.EnemyMantraPower; +import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; import com.megacrit.cardcrawl.actions.common.ReducePowerAction; import com.megacrit.cardcrawl.actions.utility.UseCardAction; @@ -35,11 +37,6 @@ public WatcherDivinityPower(AbstractCreature owner) { this.type = PowerType.BUFF; } - @Override - public void atStartOfTurn() { - addToBot(new ReducePowerAction(this.owner, this.owner, EnemyMantraPower.POWER_ID, 5)); - } - public void updateDescription() { this.description = DESC[0]; } diff --git a/src/main/java/charbosses/powers/bossmechanicpowers/WatcherSkillPower.java b/src/main/java/charbosses/powers/bossmechanicpowers/WatcherSkillPower.java index 8de06293d..4f46a2bab 100644 --- a/src/main/java/charbosses/powers/bossmechanicpowers/WatcherSkillPower.java +++ b/src/main/java/charbosses/powers/bossmechanicpowers/WatcherSkillPower.java @@ -18,10 +18,7 @@ import com.megacrit.cardcrawl.core.AbstractCreature; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.localization.PowerStrings; -import com.megacrit.cardcrawl.powers.ArtifactPower; -import com.megacrit.cardcrawl.powers.GainStrengthPower; -import com.megacrit.cardcrawl.powers.LoseStrengthPower; -import com.megacrit.cardcrawl.powers.StrengthPower; +import com.megacrit.cardcrawl.powers.*; public class WatcherSkillPower extends AbstractBossMechanicPower { public static final String POWER_ID = "downfall:WatcherSkillPower"; @@ -41,7 +38,7 @@ public WatcherSkillPower(AbstractCreature owner, int newAmount) { } public void updateDescription() { - this.description = DESCRIPTIONS[0] + this.amount + DESCRIPTIONS[1]; + this.description = DESCRIPTIONS[0] + this.amount + DESCRIPTIONS[1] + this.amount + DESCRIPTIONS[2] + this.amount + DESCRIPTIONS[3]; } @Override public void onUseCard(final AbstractCard card, final UseCardAction action) { @@ -53,6 +50,21 @@ public void onUseCard(final AbstractCard card, final UseCardAction action) { this.addToBot(new ApplyPowerAction(owner, owner, new StrengthPower(owner, amount), amount, true, AbstractGameAction.AttackEffect.NONE)); this.addToBot(new ApplyPowerAction(owner, owner, new LoseStrengthPower(owner, this.amount), this.amount)); } + + if (card.type.equals(AbstractCard.CardType.ATTACK)) { + this.flash(); + this.addToBot(new ApplyPowerAction(owner, owner, new DexterityPower(owner, amount), amount, true, AbstractGameAction.AttackEffect.NONE)); + this.addToBot(new ApplyPowerAction(owner, owner, new LoseDexterityPower(owner, this.amount), this.amount)); + } + + if (card.type.equals(AbstractCard.CardType.POWER)) { + this.flash(); + this.addToBot(new ApplyPowerAction(owner, owner, new StrengthPower(owner, amount), amount, true, AbstractGameAction.AttackEffect.NONE)); + this.addToBot(new ApplyPowerAction(owner, owner, new LoseStrengthPower(owner, this.amount), this.amount)); + this.addToBot(new ApplyPowerAction(owner, owner, new DexterityPower(owner, amount), amount, true, AbstractGameAction.AttackEffect.NONE)); + this.addToBot(new ApplyPowerAction(owner, owner, new LoseDexterityPower(owner, this.amount), this.amount)); + } + } @Override diff --git a/src/main/java/charbosses/powers/cardpowers/EnemyCreativeAIPower.java b/src/main/java/charbosses/powers/cardpowers/EnemyCreativeAIPower.java new file mode 100644 index 000000000..71f2f3e24 --- /dev/null +++ b/src/main/java/charbosses/powers/cardpowers/EnemyCreativeAIPower.java @@ -0,0 +1,47 @@ +package charbosses.powers.cardpowers; + +import charbosses.bosses.AbstractCharBoss; +import charbosses.cards.AbstractBossCard; +import charbosses.ui.EnemyEnergyPanel; +import com.megacrit.cardcrawl.actions.utility.UseCardAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.CardQueueItem; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.PowerStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.AbstractPower; + +public class EnemyCreativeAIPower extends AbstractPower { + public static final String POWER_ID = "Creative AI"; + private static final PowerStrings powerStrings; + public static final String NAME; + public static final String[] DESCRIPTIONS; + + public EnemyCreativeAIPower(AbstractCreature owner, int amount) { + this.name = NAME; + this.ID = "Creative AI"; + this.owner = owner; + this.amount = amount; + this.updateDescription(); + this.loadRegion("ai"); + } + + public void updateDescription() { + if (this.amount > 1) { + this.description = DESCRIPTIONS[0] + this.amount + DESCRIPTIONS[2]; + } else { + this.description = DESCRIPTIONS[0] + this.amount + DESCRIPTIONS[1]; + } + } + + + static { + powerStrings = CardCrawlGame.languagePack.getPowerStrings("Creative AI"); + NAME = powerStrings.NAME; + DESCRIPTIONS = powerStrings.DESCRIPTIONS; + } +} + diff --git a/src/main/java/charbosses/powers/cardpowers/EnemyElectroPower.java b/src/main/java/charbosses/powers/cardpowers/EnemyElectroPower.java new file mode 100644 index 000000000..431a63541 --- /dev/null +++ b/src/main/java/charbosses/powers/cardpowers/EnemyElectroPower.java @@ -0,0 +1,42 @@ +package charbosses.powers.cardpowers; + +import charbosses.bosses.AbstractCharBoss; +import charbosses.cards.AbstractBossCard; +import charbosses.ui.EnemyEnergyPanel; +import com.megacrit.cardcrawl.actions.utility.UseCardAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.CardQueueItem; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.PowerStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.AbstractPower; + +public class EnemyElectroPower extends AbstractPower { + public static final String POWER_ID = "Electro"; + private static final PowerStrings powerStrings; + public static final String NAME; + public static final String[] DESCRIPTIONS; + + public EnemyElectroPower(AbstractCreature owner) { + this.name = NAME; + this.ID = "Electro"; + this.owner = owner; + this.updateDescription(); + this.loadRegion("mastery"); + } + + public void updateDescription() { + /* 23 */ this.description = DESCRIPTIONS[0]; + /* */ } + + + static { + powerStrings = CardCrawlGame.languagePack.getPowerStrings("Electro"); + NAME = powerStrings.NAME; + DESCRIPTIONS = powerStrings.DESCRIPTIONS; + } +} + diff --git a/src/main/java/charbosses/powers/cardpowers/EnemyFearNoEvilPower.java b/src/main/java/charbosses/powers/cardpowers/EnemyFearNoEvilPower.java index 38a4abd97..4dc1ec079 100644 --- a/src/main/java/charbosses/powers/cardpowers/EnemyFearNoEvilPower.java +++ b/src/main/java/charbosses/powers/cardpowers/EnemyFearNoEvilPower.java @@ -34,7 +34,7 @@ public EnemyFearNoEvilPower(AbstractCreature owner) { this.owner = owner; isActive = false; this.updateDescription(); -// this.loadRegion("curiosity"); // TODO: Region +// this.loadRegion("curiosity"); // this.region128 = new TextureAtlas.AtlasRegion(tex84, 0, 0, 84, 84); this.region48 = new TextureAtlas.AtlasRegion(tex32, 0, 0, 32, 32); diff --git a/src/main/java/charbosses/powers/cardpowers/EnemyMantraPower.java b/src/main/java/charbosses/powers/cardpowers/EnemyMantraPower.java index 78cc56693..ee67c07e0 100644 --- a/src/main/java/charbosses/powers/cardpowers/EnemyMantraPower.java +++ b/src/main/java/charbosses/powers/cardpowers/EnemyMantraPower.java @@ -1,7 +1,10 @@ package charbosses.powers.cardpowers; import charbosses.actions.unique.EnemyChangeStanceAction; import charbosses.bosses.AbstractCharBoss; +import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.GameActionManager; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.ReducePowerAction; import com.megacrit.cardcrawl.actions.common.RemoveSpecificPowerAction; import com.megacrit.cardcrawl.actions.watcher.ChangeStanceAction; import com.megacrit.cardcrawl.core.AbstractCreature; @@ -10,11 +13,13 @@ import com.megacrit.cardcrawl.localization.PowerStrings; import com.megacrit.cardcrawl.powers.AbstractPower; import com.megacrit.cardcrawl.powers.AbstractPower.PowerType; +import com.megacrit.cardcrawl.powers.StrengthPower; public class EnemyMantraPower extends AbstractPower { public static final String POWER_ID = "Mantra"; private static final PowerStrings powerStrings; private final int PRAYER_REQUIRED = 10; + private int initialAmount = 0; public EnemyMantraPower(AbstractCreature owner, int amount) { this.name = powerStrings.NAME; @@ -30,6 +35,41 @@ public EnemyMantraPower(AbstractCreature owner, int amount) { } } + @Override + public void atStartOfTurn() { + System.out.println("atStartOfTurn started..."); + + this.flash(); + + initialAmount = this.amount; + + System.out.println("Initial amount of Mantra: " + initialAmount); + + addToBot(new ReducePowerAction(this.owner, this.owner, EnemyMantraPower.POWER_ID, 5)); + } + + public void atEndOfRound() { + System.out.println("DEBUG: Reducing by 5..."); + + addToBot(new AbstractGameAction() { + @Override + public void update() { + System.out.println("Following up."); + + int reducedAmount = Math.min(5, initialAmount); + System.out.println("Predicted amount removed: " + reducedAmount); + + int previousMantraGained = AbstractCharBoss.boss.mantraGained; + AbstractCharBoss.boss.mantraGained -= reducedAmount; + System.out.println("MantraGained reduced from " + previousMantraGained + " to " + AbstractCharBoss.boss.mantraGained); + + this.isDone = true; + System.out.println("atStartOfTurn completed."); + } + }); + } + + public void playApplyPowerSfx() { CardCrawlGame.sound.play("POWER_MANTRA", 0.05F); } @@ -41,6 +81,7 @@ public void updateDescription() { public void stackPower(int stackAmount) { super.stackPower(stackAmount); if (this.amount >= 10) { + this.addToBot(new ApplyPowerAction(this.owner, this.owner, new StrengthPower(this.owner, 3), 3)); this.addToTop(new EnemyChangeStanceAction("Divinity")); this.amount -= 10; if (this.amount <= 0) { diff --git a/src/main/java/charbosses/powers/general/EnemyMarkPower.java b/src/main/java/charbosses/powers/general/EnemyMarkPower.java index 20f5ed251..9e0a2a781 100644 --- a/src/main/java/charbosses/powers/general/EnemyMarkPower.java +++ b/src/main/java/charbosses/powers/general/EnemyMarkPower.java @@ -1,29 +1,29 @@ -package charbosses.powers.general; - -import com.megacrit.cardcrawl.core.AbstractCreature; -import com.megacrit.cardcrawl.core.CardCrawlGame; -import com.megacrit.cardcrawl.localization.PowerStrings; -import com.megacrit.cardcrawl.powers.AbstractPower; - -public class EnemyMarkPower extends AbstractPower { - public static final String POWER_ID = "PathToVictoryPower"; - private static final PowerStrings powerStrings; - private AbstractCreature source; - public EnemyMarkPower(AbstractCreature owner, AbstractCreature source, int amt) { - this.name = powerStrings.NAME; - this.ID = "PathToVictoryPower"; - this.owner = owner; - this.amount = amt; - this.source = source; - this.type = PowerType.DEBUFF; - this.updateDescription(); - this.loadRegion("pressure_points"); - } - public void updateDescription() { - this.description = powerStrings.DESCRIPTIONS[0] + this.amount + powerStrings.DESCRIPTIONS[1]; - } - - static { - powerStrings = CardCrawlGame.languagePack.getPowerStrings("PathToVictoryPower"); - } +package charbosses.powers.general; + +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.localization.PowerStrings; +import com.megacrit.cardcrawl.powers.AbstractPower; + +public class EnemyMarkPower extends AbstractPower { + public static final String POWER_ID = "PathToVictoryPower"; + private static final PowerStrings powerStrings; + private AbstractCreature source; + public EnemyMarkPower(AbstractCreature owner, AbstractCreature source, int amt) { + this.name = powerStrings.NAME; + this.ID = "PathToVictoryPower"; + this.owner = owner; + this.amount = amt; + this.source = source; + this.type = PowerType.DEBUFF; + this.updateDescription(); + this.loadRegion("pressure_points"); + } + public void updateDescription() { + this.description = powerStrings.DESCRIPTIONS[0] + this.amount + powerStrings.DESCRIPTIONS[1]; + } + + static { + powerStrings = CardCrawlGame.languagePack.getPowerStrings("PathToVictoryPower"); + } } \ No newline at end of file diff --git a/src/main/java/charbosses/relics/CBR_Abacus.java b/src/main/java/charbosses/relics/CBR_Abacus.java index af45307d1..55c148b6b 100644 --- a/src/main/java/charbosses/relics/CBR_Abacus.java +++ b/src/main/java/charbosses/relics/CBR_Abacus.java @@ -19,7 +19,7 @@ public String getUpdatedDescription() { } - public void onShuffle() { + public void onTrigger() { this.flash(); this.addToBot(new RelicAboveCreatureAction(this.owner, this)); this.addToBot(new GainBlockAction(this.owner, this.owner, 6)); diff --git a/src/main/java/charbosses/relics/CBR_BottledLightning.java b/src/main/java/charbosses/relics/CBR_BottledLightning.java new file mode 100644 index 000000000..064a0d871 --- /dev/null +++ b/src/main/java/charbosses/relics/CBR_BottledLightning.java @@ -0,0 +1,30 @@ +package charbosses.relics; + +import charbosses.bosses.AbstractCharBoss; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.relics.AbstractRelic; +import com.megacrit.cardcrawl.relics.BottledLightning; +import com.megacrit.cardcrawl.relics.SmilingMask; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Random; + +public class CBR_BottledLightning extends AbstractCharbossRelic { + public static final String ID = "Bottled Lightning"; + + public CBR_BottledLightning() { + super(new BottledLightning()); + } + + @Override + public String getUpdatedDescription() { + return this.DESCRIPTIONS[0]; + } + + @Override + public AbstractRelic makeCopy() { + return new CBR_BottledLightning(); + } +} \ No newline at end of file diff --git a/src/main/java/charbosses/relics/CBR_NuclearBattery.java b/src/main/java/charbosses/relics/CBR_NuclearBattery.java new file mode 100644 index 000000000..e73642c84 --- /dev/null +++ b/src/main/java/charbosses/relics/CBR_NuclearBattery.java @@ -0,0 +1,32 @@ +package charbosses.relics; + +import charbosses.actions.orb.EnemyChannelAction; +import charbosses.orbs.EnemyLightning; +import charbosses.orbs.EnemyPlasma; +import com.megacrit.cardcrawl.relics.AbstractRelic; +import com.megacrit.cardcrawl.relics.CrackedCore; +import com.megacrit.cardcrawl.relics.NuclearBattery; + +public class CBR_NuclearBattery extends AbstractCharbossRelic { + public static final String ID = "NuclearBattery"; + public CBR_NuclearBattery() { + super(new NuclearBattery()); + } + + @Override + public String getUpdatedDescription() { + return this.DESCRIPTIONS[0]; + } + + @Override + public void atBattleStart() { + this.flash(); + this.addToTop(new EnemyChannelAction(new EnemyPlasma())); + } + + @Override + public AbstractRelic makeCopy() { + return new CBR_NuclearBattery(); + } + +} \ No newline at end of file diff --git a/src/main/java/charbosses/relics/CBR_SmilingMask.java b/src/main/java/charbosses/relics/CBR_SmilingMask.java index ad5140cce..06ec13cb8 100644 --- a/src/main/java/charbosses/relics/CBR_SmilingMask.java +++ b/src/main/java/charbosses/relics/CBR_SmilingMask.java @@ -19,7 +19,7 @@ public CBR_SmilingMask() { @Override public String getUpdatedDescription() { - return this.DESCRIPTIONS[0] + 2 + this.DESCRIPTIONS[1]; + return this.DESCRIPTIONS[0] + 50 + this.DESCRIPTIONS[1]; } @Override diff --git a/src/main/java/charbosses/relics/CBR_Toolbox.java b/src/main/java/charbosses/relics/CBR_Toolbox.java new file mode 100644 index 000000000..8993a1b28 --- /dev/null +++ b/src/main/java/charbosses/relics/CBR_Toolbox.java @@ -0,0 +1,22 @@ +package charbosses.relics; + +import com.megacrit.cardcrawl.relics.AbstractRelic; +import com.megacrit.cardcrawl.relics.Orrery; +import com.megacrit.cardcrawl.relics.Toolbox; + +public class CBR_Toolbox extends AbstractCharbossRelic { + public static final String ID = "Toolbox"; + + public CBR_Toolbox() { + super(new Toolbox()); + } + + public String getUpdatedDescription() { + return this.DESCRIPTIONS[0]; + } + + @Override + public AbstractRelic makeCopy() { + return new CBR_Toolbox(); + } +} \ No newline at end of file diff --git a/src/main/java/collector/CollectorCollection.java b/src/main/java/collector/CollectorCollection.java index f21033c12..05efc0336 100644 --- a/src/main/java/collector/CollectorCollection.java +++ b/src/main/java/collector/CollectorCollection.java @@ -140,7 +140,7 @@ public class CollectorCollection { collectionPool.put(CorruptHeart.ID, FinalBossCard.ID); collectionPool.put(TheCollector.ID, CollectorCard.ID); - collectionPool.put(SlimeBoss.ID, PrepareCrush.ID); + collectionPool.put(SlimeBoss.ID, SuperPrepareCrush.ID); collectionPool.put(TimeEater.ID, Chronoboost.ID); collectionPool.put(AwakenedOne.ID, AwakenDeath.ID); collectionPool.put(TheGuardian.ID, GuardianWhirl.ID); diff --git a/src/main/java/collector/CollectorMod.java b/src/main/java/collector/CollectorMod.java index ec818a647..5a31f678e 100644 --- a/src/main/java/collector/CollectorMod.java +++ b/src/main/java/collector/CollectorMod.java @@ -171,7 +171,7 @@ public void addPotions() { BaseMod.addPotion(MiniCursePotion.class, Color.FIREBRICK, Color.GRAY, Color.TAN, MiniCursePotion.POTION_ID, CollectorChar.Enums.THE_COLLECTOR); BaseMod.addPotion(ReservePotion.class, Color.RED, Color.GREEN, Color.CLEAR, ReservePotion.POTION_ID, CollectorChar.Enums.THE_COLLECTOR); BaseMod.addPotion(DebuffDoublePotion.class, Color.CORAL, Color.PURPLE, Color.MAROON, DebuffDoublePotion.POTION_ID, CollectorChar.Enums.THE_COLLECTOR); - + BaseMod.addPotion(TempHPPotion.class, Color.BLACK, Color.PURPLE, Color.GRAY, TempHPPotion.POTION_ID, CollectorChar.Enums.THE_COLLECTOR); // BanSharedContentPatch.registerRunLockedPotion(CollectorChar.Enums.THE_COLLECTOR, TempHPPotion.POTION_ID); if (Loader.isModLoaded("widepotions")) { @@ -186,25 +186,25 @@ public void addPotions() { public void receiveSetUnlocks() { downfallMod.registerUnlockSuite( - BrainDrain.ID, + Forgery.ID, DarkApotheosis.ID, - GreenpyreLocus.ID, + ShadowDaggers.ID, - Omen.ID, - RotwoodKindling.ID, - BlackBindings.ID, + CursedWail.ID, + InflictAgony.ID, + Karma.ID, - ReceiveTribute.ID, + GreenpyreLocus.ID, + Omen.ID, DoubleTrouble.ID, - Extricate.ID, + BottledCollectible.ID, JadeRing.ID, - ThimbleHelm.ID, - BlockedChakra.ID, + SoullitLamp.ID, - ForbiddenFruit.ID, Incense.ID, - RoughDiamond.ID, + ForbiddenFruit.ID, + FuelCanister.ID, CollectorChar.Enums.THE_COLLECTOR ); diff --git a/src/main/java/collector/actions/DrawCardFromCollectionAction.java b/src/main/java/collector/actions/DrawCardFromCollectionAction.java index fa4332578..551915d0f 100644 --- a/src/main/java/collector/actions/DrawCardFromCollectionAction.java +++ b/src/main/java/collector/actions/DrawCardFromCollectionAction.java @@ -4,11 +4,17 @@ import collector.CollectorCollection; import collector.cardmods.CollectedCardMod; import collector.cards.collectibles.LuckyWick; +import collector.patches.CollectorBottleField; +import collector.relics.BottledCollectible; import collector.relics.HolidayCoal; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.common.DrawCardAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.relics.FrozenEye; +import guardian.relics.PickAxe; +import hermit.relics.BartenderGlass; +import theHexaghost.relics.CandleOfCauterizing; import static collector.util.Wiz.att; @@ -20,7 +26,18 @@ public DrawCardFromCollectionAction() { @Override public void update() { if (!CollectorCollection.combatCollection.isEmpty()) { - AbstractCard tar = CollectorCollection.combatCollection.getTopCard(); + AbstractCard tar = CollectorCollection.combatCollection.getRandomCard(AbstractDungeon.cardRandomRng); + if(AbstractDungeon.player.hasRelic(FrozenEye.ID)) { + tar = CollectorCollection.combatCollection.getTopCard(); + } + + if(AbstractDungeon.player.hasRelic(BottledCollectible.ID)) { + if ((AbstractDungeon.player.getRelic(BottledCollectible.ID).counter == 0)) { + tar = CollectorCollection.combatCollection.getTopCard(); + AbstractDungeon.player.getRelic(BottledCollectible.ID).onTrigger(); + } + } + CollectorCollection.combatCollection.removeCard(tar); AbstractDungeon.player.drawPile.addToTop(tar); att(new DrawCardAction(1)); diff --git a/src/main/java/collector/actions/ScorchingRayAction.java b/src/main/java/collector/actions/ScorchingRayAction.java index 41682923c..fd19b20d4 100644 --- a/src/main/java/collector/actions/ScorchingRayAction.java +++ b/src/main/java/collector/actions/ScorchingRayAction.java @@ -1,36 +1,65 @@ -package collector.actions; - -import collector.effects.ColoredVerticalAttackEffect; -import com.badlogic.gdx.graphics.Color; -import com.badlogic.gdx.math.MathUtils; -import com.megacrit.cardcrawl.actions.AbstractGameAction; -import com.megacrit.cardcrawl.actions.animations.VFXAction; -import com.megacrit.cardcrawl.actions.common.DamageAction; -import com.megacrit.cardcrawl.cards.AbstractCard; -import com.megacrit.cardcrawl.cards.DamageInfo; -import com.megacrit.cardcrawl.dungeons.AbstractDungeon; -import com.megacrit.cardcrawl.monsters.AbstractMonster; - -import static collector.util.Wiz.att; - -public class ScorchingRayAction extends AbstractGameAction { - private final AbstractCard card; - - public ScorchingRayAction(AbstractCard card) { - this.card = card; - this.actionType = ActionType.DAMAGE; - this.startDuration = 0.1F; - this.duration = this.startDuration; - } - - public void update() { - isDone = true; - AbstractMonster q = AbstractDungeon.getMonsters().getRandomMonster(null, true, AbstractDungeon.cardRandomRng); - if (q != null) { - card.applyPowers(); - card.calculateCardDamage(q); - att(new DamageAction(q, new DamageInfo(AbstractDungeon.player, card.damage, card.damageTypeForTurn), AttackEffect.NONE)); - att(new VFXAction(new ColoredVerticalAttackEffect(q.hb.x + MathUtils.random(q.hb.width / 3, ((q.hb.width / 3) * 2)), q.hb.cY, true, new Color(MathUtils.random(), MathUtils.random(), MathUtils.random(), 1)))); - } - } -} +//package collector.actions; +// +//import champ.stances.BerserkerStance; +//import collector.effects.ColoredVerticalAttackEffect; +//import com.badlogic.gdx.graphics.Color; +//import com.badlogic.gdx.math.MathUtils; +//import com.megacrit.cardcrawl.actions.AbstractGameAction; +//import com.megacrit.cardcrawl.actions.animations.VFXAction; +//import com.megacrit.cardcrawl.actions.common.DamageAction; +//import com.megacrit.cardcrawl.cards.AbstractCard; +//import com.megacrit.cardcrawl.cards.DamageInfo; +//import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +//import com.megacrit.cardcrawl.monsters.AbstractMonster; +//import com.megacrit.cardcrawl.powers.PenNibPower; +//import com.megacrit.cardcrawl.powers.VulnerablePower; +//import com.megacrit.cardcrawl.powers.watcher.VigorPower; +//import com.megacrit.cardcrawl.stances.DivinityStance; +//import com.megacrit.cardcrawl.stances.WrathStance; +//import gremlin.actions.PseudoDamageRandomEnemyAction; +//import gremlin.relics.FragmentationGrenade; +// +//import static collector.util.Wiz.att; +// +//public class ScorchingRayAction extends AbstractGameAction { +// private final AbstractCard card; +// private static int stuff; +// +// public ScorchingRayAction(AbstractCard card, int cool) { +// this.card = card; +// this.actionType = ActionType.DAMAGE; +// this.startDuration = 0.1F; +// this.duration = this.startDuration; +// stuff = cool; +// } +// +// public void update() { +// isDone = true; +// AbstractMonster q = AbstractDungeon.getMonsters().getRandomMonster(null, true, AbstractDungeon.cardRandomRng); +// if (q != null) { +// card.applyPowers(); +// card.calculateCardDamage(q); +// int storage = stuff; +// +// if (q.hasPower(VulnerablePower.POWER_ID)) { +// stuff = (stuff + (stuff/2)); +// } +// +// if (AbstractDungeon.player.hasPower(PenNibPower.POWER_ID)) { +// stuff = stuff * 2; +// } +// +// if (AbstractDungeon.player.stance.ID.equals(WrathStance.STANCE_ID)) { +// stuff = stuff * 2; +// } +// +// if (AbstractDungeon.player.stance.ID.equals(DivinityStance.STANCE_ID)) { +// stuff = stuff * 3; +// } +// +// att(new PseudoDamageRandomEnemyAction(q, new DamageInfo(AbstractDungeon.player, card.damage + stuff, DamageInfo.DamageType.NORMAL), AttackEffect.FIRE)); +// att(new VFXAction(new ColoredVerticalAttackEffect(q.hb.x + MathUtils.random(q.hb.width / 3, ((q.hb.width / 3) * 2)), q.hb.cY, true, new Color(MathUtils.random(), MathUtils.random(), MathUtils.random(), 1)))); +// stuff = storage; +// } +// } +//} \ No newline at end of file diff --git a/src/main/java/collector/actions/SeekFromCollectionAction.java b/src/main/java/collector/actions/SeekFromCollectionAction.java index fb618c953..6c1b60c0f 100644 --- a/src/main/java/collector/actions/SeekFromCollectionAction.java +++ b/src/main/java/collector/actions/SeekFromCollectionAction.java @@ -1,5 +1,6 @@ package collector.actions; +import basemod.BaseMod; import collector.CollectorCollection; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.cards.AbstractCard; @@ -38,7 +39,7 @@ public void update() { this.isDone = true; } else if (tmp.size() == 1) { card = tmp.getTopCard(); - if (this.p.hand.size() == 10) { + if (this.p.hand.size() == BaseMod.MAX_HAND_SIZE) { CollectorCollection.combatCollection.moveToDiscardPile(card); this.p.createHandIsFullDialog(); } else { @@ -59,7 +60,7 @@ public void update() { } else if (tmp.size() <= this.amount) { for(int i = 0; i < tmp.size(); ++i) { card = tmp.getNCardFromTop(i); - if (this.p.hand.size() == 10) { + if (this.p.hand.size() == BaseMod.MAX_HAND_SIZE) { CollectorCollection.combatCollection.moveToDiscardPile(card); this.p.createHandIsFullDialog(); } else { @@ -93,7 +94,7 @@ public void update() { for (AbstractCard abstractCard : AbstractDungeon.gridSelectScreen.selectedCards) { card = abstractCard; card.unhover(); - if (this.p.hand.size() == 10) { + if (this.p.hand.size() == BaseMod.MAX_HAND_SIZE) { CollectorCollection.combatCollection.moveToDiscardPile(card); this.p.createHandIsFullDialog(); } else { diff --git a/src/main/java/collector/cards/Arrogance.java b/src/main/java/collector/cards/Arrogance.java index 017a8d536..f1e75be60 100644 --- a/src/main/java/collector/cards/Arrogance.java +++ b/src/main/java/collector/cards/Arrogance.java @@ -14,7 +14,7 @@ public class Arrogance extends AbstractCollectorCard { public Arrogance() { super(ID, 1, CardType.SKILL, CardRarity.COMMON, CardTarget.SELF); baseBlock = 7; - baseMagicNumber = magicNumber = 3; + baseMagicNumber = magicNumber = 4; } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/Billow.java b/src/main/java/collector/cards/Billow.java index ac6d1316c..e2ab37974 100644 --- a/src/main/java/collector/cards/Billow.java +++ b/src/main/java/collector/cards/Billow.java @@ -13,7 +13,7 @@ public class Billow extends AbstractCollectorCard { public Billow() { super(ID, 3, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); - baseBlock = 20; + baseBlock = 18; cardsToPreview = new Bellow(); } diff --git a/src/main/java/collector/cards/Blightning.java b/src/main/java/collector/cards/Blightning.java index eb0984832..861b82a0b 100644 --- a/src/main/java/collector/cards/Blightning.java +++ b/src/main/java/collector/cards/Blightning.java @@ -8,6 +8,7 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.vfx.combat.LightningEffect; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.applyToEnemy; @@ -22,6 +23,7 @@ public Blightning() { baseDamage = 6; baseMagicNumber = magicNumber = 6; exhaust = true; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/Bonfire.java b/src/main/java/collector/cards/Bonfire.java index 9a408c707..fb219d826 100644 --- a/src/main/java/collector/cards/Bonfire.java +++ b/src/main/java/collector/cards/Bonfire.java @@ -16,7 +16,7 @@ public class Bonfire extends AbstractCollectorCard { public Bonfire() { super(ID, 2, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); - baseBlock = 16; + baseBlock = 12; isPyre(); } diff --git a/src/main/java/collector/cards/BrainDrain.java b/src/main/java/collector/cards/BrainDrain.java index 8468e486d..a66674f85 100644 --- a/src/main/java/collector/cards/BrainDrain.java +++ b/src/main/java/collector/cards/BrainDrain.java @@ -8,6 +8,7 @@ import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.vfx.combat.LightBulbEffect; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.atb; @@ -21,6 +22,7 @@ public BrainDrain() { super(ID, 0, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.ENEMY); exhaust = true; baseMagicNumber = magicNumber = 6; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/CantTouchThis.java b/src/main/java/collector/cards/CantTouchThis.java index 154668feb..e2008c14c 100644 --- a/src/main/java/collector/cards/CantTouchThis.java +++ b/src/main/java/collector/cards/CantTouchThis.java @@ -13,8 +13,8 @@ public class CantTouchThis extends AbstractCollectorCard { // intellij stuff power, self, uncommon, , , , , 1, 1 public CantTouchThis() { - super(ID, 1, CardType.POWER, CardRarity.UNCOMMON, CardTarget.SELF); - baseMagicNumber = magicNumber = 1; + super(ID, 2, CardType.POWER, CardRarity.UNCOMMON, CardTarget.SELF); + baseMagicNumber = magicNumber = 2; baseSecondMagic = secondMagic = 2; } diff --git a/src/main/java/collector/cards/Condemn.java b/src/main/java/collector/cards/Condemn.java index 7cf05acb6..7ef5e5a26 100644 --- a/src/main/java/collector/cards/Condemn.java +++ b/src/main/java/collector/cards/Condemn.java @@ -18,7 +18,7 @@ public class Condemn extends AbstractCollectorCard { public Condemn() { super(ID, 1, CardType.SKILL, CardRarity.COMMON, CardTarget.ENEMY); baseMagicNumber = magicNumber = 1; - baseSecondMagic = secondMagic = 4; + baseSecondMagic = secondMagic = 5; } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/CursedWail.java b/src/main/java/collector/cards/CursedWail.java index b99896da7..a3c8d87ec 100644 --- a/src/main/java/collector/cards/CursedWail.java +++ b/src/main/java/collector/cards/CursedWail.java @@ -18,7 +18,7 @@ public class CursedWail extends AbstractCollectorCard { public CursedWail() { super(ID, 2, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.ALL_ENEMY); - baseMagicNumber = magicNumber = 8; + baseMagicNumber = magicNumber = 9; baseSecondMagic = secondMagic = 1; exhaust = true; } diff --git a/src/main/java/collector/cards/DarkApotheosis.java b/src/main/java/collector/cards/DarkApotheosis.java index ceaf54584..4205502e2 100644 --- a/src/main/java/collector/cards/DarkApotheosis.java +++ b/src/main/java/collector/cards/DarkApotheosis.java @@ -12,6 +12,7 @@ import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; import hermit.util.Wiz; +import sneckomod.SneckoMod; import java.util.ArrayList; @@ -25,6 +26,7 @@ public class DarkApotheosis extends AbstractCollectorCard { public DarkApotheosis() { super(ID, 1, CardType.SKILL, CardRarity.RARE, CardTarget.SELF); exhaust = true; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/DarkLordForm.java b/src/main/java/collector/cards/DarkLordForm.java index f1782f87a..e77dfd319 100644 --- a/src/main/java/collector/cards/DarkLordForm.java +++ b/src/main/java/collector/cards/DarkLordForm.java @@ -1,5 +1,6 @@ package collector.cards; +import basemod.helpers.BaseModCardTags; import collector.effects.GreenThirdEyeEffect; import collector.powers.DarkLordFormPower; import collector.powers.DarkLordFormPowerPlus; @@ -18,6 +19,7 @@ public class DarkLordForm extends AbstractCollectorCard { public DarkLordForm() { super(ID, 4, CardType.POWER, CardRarity.RARE, CardTarget.SELF); cardsToPreview = new YouAreMine(); + tags.add(BaseModCardTags.FORM); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/Darkstorm.java b/src/main/java/collector/cards/Darkstorm.java index bdf358a5d..6542e440d 100644 --- a/src/main/java/collector/cards/Darkstorm.java +++ b/src/main/java/collector/cards/Darkstorm.java @@ -5,6 +5,7 @@ import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.makeInHand; @@ -19,6 +20,7 @@ public Darkstorm() { baseMagicNumber = magicNumber = 2; cardsToPreview = new Blightning(); exhaust = true; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/DoMayhem.java b/src/main/java/collector/cards/DoMayhem.java index d99a8566f..120235cda 100644 --- a/src/main/java/collector/cards/DoMayhem.java +++ b/src/main/java/collector/cards/DoMayhem.java @@ -1,4 +1,4 @@ -/* +package collector.cards;/* package collector.cards; import collector.powers.DoMayhemPower; diff --git a/src/main/java/collector/cards/DoubleTrouble.java b/src/main/java/collector/cards/DoubleTrouble.java index e4ff04c91..25accdc9d 100644 --- a/src/main/java/collector/cards/DoubleTrouble.java +++ b/src/main/java/collector/cards/DoubleTrouble.java @@ -4,6 +4,7 @@ import com.megacrit.cardcrawl.actions.animations.AnimateHopAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.applyToSelf; @@ -16,6 +17,7 @@ public class DoubleTrouble extends AbstractCollectorCard { public DoubleTrouble() { super(ID, 1, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); baseBlock = 6; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/DragonsTrove.java b/src/main/java/collector/cards/DragonsTrove.java index 0d23b66e4..549ae4bd3 100644 --- a/src/main/java/collector/cards/DragonsTrove.java +++ b/src/main/java/collector/cards/DragonsTrove.java @@ -5,6 +5,7 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.atb; @@ -18,6 +19,7 @@ public DragonsTrove() { baseMagicNumber = magicNumber = 1; exhaust = true; isPyre(); + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/FeelMyPain.java b/src/main/java/collector/cards/FeelMyPain.java index df7cdbb44..4d6ffe521 100644 --- a/src/main/java/collector/cards/FeelMyPain.java +++ b/src/main/java/collector/cards/FeelMyPain.java @@ -13,7 +13,7 @@ public class FeelMyPain extends AbstractCollectorCard { public FeelMyPain() { super(ID, 1, CardType.POWER, CardRarity.UNCOMMON, CardTarget.SELF); - baseMagicNumber = magicNumber = 3; + baseMagicNumber = magicNumber = 4; } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/FingerOfDeath.java b/src/main/java/collector/cards/FingerOfDeath.java index bade643e6..4ec49280e 100644 --- a/src/main/java/collector/cards/FingerOfDeath.java +++ b/src/main/java/collector/cards/FingerOfDeath.java @@ -6,6 +6,7 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.VulnerablePower; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.*; @@ -16,7 +17,8 @@ public class FingerOfDeath extends AbstractCollectorCard { public FingerOfDeath() { super(ID, 4, CardType.SKILL, CardRarity.RARE, CardTarget.ENEMY); - baseMagicNumber = magicNumber = 50; + baseMagicNumber = magicNumber = 60; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/Forgery.java b/src/main/java/collector/cards/Forgery.java index d3589333c..35c3e294b 100644 --- a/src/main/java/collector/cards/Forgery.java +++ b/src/main/java/collector/cards/Forgery.java @@ -8,6 +8,7 @@ import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; import downfall.util.SelectCardsCenteredAction; +import sneckomod.SneckoMod; import java.util.ArrayList; @@ -19,9 +20,10 @@ public class Forgery extends AbstractCollectorCard { // intellij stuff attack, enemy, common, 9, 3, , , , public Forgery() { - super(ID, 1, CardType.ATTACK, CardRarity.COMMON, CardTarget.ENEMY); + super(ID, 1, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); baseDamage = 8; baseMagicNumber = magicNumber = 2; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/GreenpyreLocus.java b/src/main/java/collector/cards/GreenpyreLocus.java index bb9c7826f..c7d697a0a 100644 --- a/src/main/java/collector/cards/GreenpyreLocus.java +++ b/src/main/java/collector/cards/GreenpyreLocus.java @@ -10,6 +10,7 @@ import com.megacrit.cardcrawl.monsters.AbstractMonster; import downfall.util.SelectCardsCenteredAction; import hermit.util.Wiz; +import sneckomod.SneckoMod; import java.util.ArrayList; @@ -21,8 +22,9 @@ public class GreenpyreLocus extends AbstractCollectorCard { // intellij stuff skill, self, uncommon, , , , , 1, 1 public GreenpyreLocus() { - super(ID, 0, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); + super(ID, 1, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); baseMagicNumber = magicNumber = 2; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/Heatwave.java b/src/main/java/collector/cards/Heatwave.java index d3b833d57..f055658e5 100644 --- a/src/main/java/collector/cards/Heatwave.java +++ b/src/main/java/collector/cards/Heatwave.java @@ -18,7 +18,7 @@ public class Heatwave extends AbstractCollectorCard { public Heatwave() { super(ID, 0, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ALL_ENEMY); - baseDamage = 4; + baseDamage = 5; cardsToPreview = new Ember(); isMultiDamage = true; } diff --git a/src/main/java/collector/cards/HoardersStrike.java b/src/main/java/collector/cards/HoardersStrike.java index e9f35c68b..69718f6ce 100644 --- a/src/main/java/collector/cards/HoardersStrike.java +++ b/src/main/java/collector/cards/HoardersStrike.java @@ -7,6 +7,7 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.atb; @@ -18,8 +19,9 @@ public class HoardersStrike extends AbstractCollectorCard { public HoardersStrike() { super(ID, 2, CardType.ATTACK, CardRarity.RARE, CardTarget.ENEMY); - baseDamage = 15; + baseDamage = 16; tags.add(CardTags.STRIKE); + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { @@ -39,6 +41,6 @@ public void update() { } public void upp() { - upgradeDamage(5); + upgradeDamage(4); } } \ No newline at end of file diff --git a/src/main/java/collector/cards/IronbarkKindling.java b/src/main/java/collector/cards/IronbarkKindling.java index 9b60124c7..a16426797 100644 --- a/src/main/java/collector/cards/IronbarkKindling.java +++ b/src/main/java/collector/cards/IronbarkKindling.java @@ -13,7 +13,7 @@ public class IronbarkKindling extends AbstractCollectorCard { public IronbarkKindling() { super(ID, -2, CardType.SKILL, CardRarity.COMMON, CardTarget.NONE); - baseBlock = 8; + baseBlock = 9; tags.add(expansionContentMod.UNPLAYABLE); } diff --git a/src/main/java/collector/cards/ItMattersNot.java b/src/main/java/collector/cards/ItMattersNot.java index 7f17b0bab..40815c467 100644 --- a/src/main/java/collector/cards/ItMattersNot.java +++ b/src/main/java/collector/cards/ItMattersNot.java @@ -15,7 +15,7 @@ public class ItMattersNot extends AbstractCollectorCard { public ItMattersNot() { super(ID, 2, CardType.SKILL, CardRarity.COMMON, CardTarget.SELF); - baseBlock = 12; + baseBlock = 13; baseMagicNumber = magicNumber = 1; } diff --git a/src/main/java/collector/cards/JadedJabs.java b/src/main/java/collector/cards/JadedJabs.java index d22ec8019..0e46a1f37 100644 --- a/src/main/java/collector/cards/JadedJabs.java +++ b/src/main/java/collector/cards/JadedJabs.java @@ -47,6 +47,7 @@ public void onPyred(AbstractCard card) { } public void upp() { + upgradeDamage(2); upgradeMagicNumber(1); } } \ No newline at end of file diff --git a/src/main/java/collector/cards/LanternFlare.java b/src/main/java/collector/cards/LanternFlare.java index 197792caa..badf4b968 100644 --- a/src/main/java/collector/cards/LanternFlare.java +++ b/src/main/java/collector/cards/LanternFlare.java @@ -18,9 +18,9 @@ public class LanternFlare extends AbstractCollectorCard { // intellij stuff attack, all_enemy, uncommon, 12, 3, , , 12, 3 public LanternFlare() { - super(ID, 2, CardType.SKILL, CardRarity.RARE, CardTarget.ENEMY); + super(ID, 2, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.ENEMY); baseMagicNumber = magicNumber = 12; - baseSecondMagic = secondMagic = 4; + baseSecondMagic = secondMagic = 3; isPyre(); } diff --git a/src/main/java/collector/cards/Misdirect.java b/src/main/java/collector/cards/Misdirect.java index 7e53c2323..881120ed0 100644 --- a/src/main/java/collector/cards/Misdirect.java +++ b/src/main/java/collector/cards/Misdirect.java @@ -25,6 +25,6 @@ public void use(AbstractPlayer p, AbstractMonster m) { } public void upp() { - upgradeBlock(3); + upgradeBlock(2); } } \ No newline at end of file diff --git a/src/main/java/collector/cards/MysteryWeaving.java b/src/main/java/collector/cards/MysteryWeaving.java index 37c377b55..d7eb4e2d0 100644 --- a/src/main/java/collector/cards/MysteryWeaving.java +++ b/src/main/java/collector/cards/MysteryWeaving.java @@ -13,8 +13,8 @@ public class MysteryWeaving extends AbstractCollectorCard { // intellij stuff skill, self, uncommon, , , 10, 3, , public MysteryWeaving() { - super(ID, 0, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); - baseBlock = 8; + super(ID, 0, CardType.SKILL, CardRarity.COMMON, CardTarget.SELF); + baseBlock = 9; } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/Omen.java b/src/main/java/collector/cards/Omen.java index 1e2b53a8c..acc0f334e 100644 --- a/src/main/java/collector/cards/Omen.java +++ b/src/main/java/collector/cards/Omen.java @@ -3,6 +3,7 @@ import collector.powers.OmenPower; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.applyToSelf; @@ -12,8 +13,9 @@ public class Omen extends AbstractCollectorCard { // intellij stuff power, self, rare, , , , , 20, 5 public Omen() { - super(ID, 1, CardType.POWER, CardRarity.RARE, CardTarget.SELF); + super(ID, 2, CardType.POWER, CardRarity.RARE, CardTarget.SELF); baseMagicNumber = magicNumber = 1; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { @@ -21,7 +23,8 @@ public void use(AbstractPlayer p, AbstractMonster m) { } public void upp() { - isInnate = true; - uDesc(); + upgradeBaseCost(1); + //isInnate = true; + //uDesc(); } } \ No newline at end of file diff --git a/src/main/java/collector/cards/ReceiveTribute.java b/src/main/java/collector/cards/ReceiveTribute.java index 64a584312..52cfffd24 100644 --- a/src/main/java/collector/cards/ReceiveTribute.java +++ b/src/main/java/collector/cards/ReceiveTribute.java @@ -1,7 +1,10 @@ package collector.cards; -import basemod.cardmods.RetainMod; +import automaton.AutomatonChar; +import awakenedOne.AwakenedOneChar; import basemod.helpers.CardModifierManager; +import champ.ChampChar; +import collector.CollectorChar; import com.evacipated.cardcrawl.mod.stslib.actions.common.SelectCardsCenteredAction; import com.megacrit.cardcrawl.actions.common.MakeTempCardInHandAction; import com.megacrit.cardcrawl.cards.AbstractCard; @@ -9,7 +12,11 @@ import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.helpers.CardLibrary; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import expansioncontent.cardmods.PropertiesMod; import expansioncontent.expansionContentMod; +import guardian.characters.GuardianCharacter; +import slimebound.characters.SlimeboundCharacter; +import theHexaghost.TheHexaghost; import java.util.ArrayList; @@ -34,8 +41,26 @@ public void use(AbstractPlayer p, AbstractMonster m) { if (possibilities == null) { possibilities = new ArrayList<>(); for (AbstractCard q : CardLibrary.getAllCards()) { - if (q.rarity != CardRarity.SPECIAL && q.hasTag(expansionContentMod.STUDY)) { - possibilities.add(q.makeCopy()); + if (q.rarity != AbstractCard.CardRarity.SPECIAL && q.hasTag(expansionContentMod.STUDY) && !q.hasTag(AbstractCard.CardTags.HEALING)) { + + if (AbstractDungeon.player instanceof SlimeboundCharacter) { + if (q.hasTag(expansionContentMod.STUDY_SLIMEBOSS)){continue;} + } else if (AbstractDungeon.player instanceof TheHexaghost) { + if(q.hasTag(expansionContentMod.STUDY_HEXAGHOST)){continue;} + } else if (AbstractDungeon.player instanceof GuardianCharacter) { + if(q.hasTag(expansionContentMod.STUDY_GUARDIAN)){continue;} + } else if (AbstractDungeon.player instanceof ChampChar) { + if(q.hasTag(expansionContentMod.STUDY_CHAMP)){continue;} + } else if (AbstractDungeon.player instanceof AutomatonChar) { + if(q.hasTag(expansionContentMod.STUDY_AUTOMATON)){continue;} + } else if (AbstractDungeon.player instanceof CollectorChar) { + if(q.hasTag(expansionContentMod.STUDY_COLLECTOR)){continue;} + } else if (AbstractDungeon.player instanceof AwakenedOneChar) { + if(q.hasTag(expansionContentMod.STUDY_AWAKENEDONE)){continue;} + } + + AbstractCard r = q.makeCopy(); + possibilities.add(r); } } } @@ -44,7 +69,9 @@ public void use(AbstractPlayer p, AbstractMonster m) { ArrayList choices = new ArrayList<>(); for (int i = 0; i < magicNumber; i++) { AbstractCard toAdd = remaining.remove(AbstractDungeon.cardRandomRng.random(remaining.size() - 1)).makeCopy(); - CardModifierManager.addModifier(toAdd, new RetainMod()); + if (!toAdd.selfRetain) { + CardModifierManager.addModifier(toAdd, new PropertiesMod(PropertiesMod.supportedProperties.RETAIN, false)); + } choices.add(toAdd); } addToBot(new SelectCardsCenteredAction(choices, cardStrings.EXTENDED_DESCRIPTION[0], (cards) -> { diff --git a/src/main/java/collector/cards/Roast.java b/src/main/java/collector/cards/Roast.java index 1a3bad59b..ab81cc879 100644 --- a/src/main/java/collector/cards/Roast.java +++ b/src/main/java/collector/cards/Roast.java @@ -12,7 +12,7 @@ public class Roast extends AbstractCollectorCard { public Roast() { super(ID, 0, CardType.ATTACK, CardRarity.COMMON, CardTarget.ENEMY); - baseDamage = 6; + baseDamage = 4; isPyre(); } diff --git a/src/main/java/collector/cards/ScorchingRay.java b/src/main/java/collector/cards/ScorchingRay.java index 01641844b..b58587209 100644 --- a/src/main/java/collector/cards/ScorchingRay.java +++ b/src/main/java/collector/cards/ScorchingRay.java @@ -1,27 +1,41 @@ package collector.cards; import automaton.actions.EasyXCostAction; -import collector.actions.ScorchingRayAction; +import collector.effects.ColoredVerticalAttackEffect; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.math.MathUtils; import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.actions.common.AttackDamageRandomEnemyAction; +import com.megacrit.cardcrawl.cards.DamageInfo; import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.VulnerablePower; +import com.megacrit.cardcrawl.powers.watcher.VigorPower; +import gremlin.actions.PseudoDamageRandomEnemyAction; import static collector.CollectorMod.makeID; import static collector.util.Wiz.atb; +import static collector.util.Wiz.att; public class ScorchingRay extends AbstractCollectorCard { public final static String ID = makeID(ScorchingRay.class.getSimpleName()); - // intellij stuff attack, enemy, common, 4, 1, , , 4, + // intellij stuff attack, enemy, common, 4, 1, , , 4, public ScorchingRay() { super(ID, -1, CardType.ATTACK, CardRarity.COMMON, CardTarget.ALL_ENEMY); baseDamage = 8; + } public void use(AbstractPlayer p, AbstractMonster m) { - atb(new EasyXCostAction(this, (effect, params) -> { + att(new EasyXCostAction(this, (effect, params) -> { for (int i = 0; i < effect; i++) { - atb(new ScorchingRayAction(this)); + //ScorchingRayAction couldn't cut it. + AbstractMonster q = AbstractDungeon.getMonsters().getRandomMonster(null, true, AbstractDungeon.cardRandomRng); + atb(new VFXAction(new ColoredVerticalAttackEffect(q.hb.x + MathUtils.random(q.hb.width / 3, ((q.hb.width / 3) * 2)), q.hb.cY, true, new Color(MathUtils.random(), MathUtils.random(), MathUtils.random(), 1)))); + this.addToBot(new AttackDamageRandomEnemyAction(this, AbstractGameAction.AttackEffect.FIRE)); } return true; })); diff --git a/src/main/java/collector/cards/ShadowDaggers.java b/src/main/java/collector/cards/ShadowDaggers.java index 48f72a56c..4dc0e2fe9 100644 --- a/src/main/java/collector/cards/ShadowDaggers.java +++ b/src/main/java/collector/cards/ShadowDaggers.java @@ -5,6 +5,7 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; @@ -14,8 +15,9 @@ public class ShadowDaggers extends AbstractCollectorCard { public ShadowDaggers() { super(ID, 1, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); - baseDamage = 4; + baseDamage = 3; exhaust = true; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/ShootingStar.java b/src/main/java/collector/cards/ShootingStar.java index a21d32438..69c18d8a9 100644 --- a/src/main/java/collector/cards/ShootingStar.java +++ b/src/main/java/collector/cards/ShootingStar.java @@ -4,6 +4,7 @@ import collector.powers.ShootingStarPower; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.applyToSelf; @@ -14,6 +15,7 @@ public class ShootingStar extends AbstractCollectorCard { public ShootingStar() { super(ID, 3, CardType.POWER, CardRarity.RARE, CardTarget.SELF); + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/Soulforge.java b/src/main/java/collector/cards/Soulforge.java index b53cd9dbe..3c2f76061 100644 --- a/src/main/java/collector/cards/Soulforge.java +++ b/src/main/java/collector/cards/Soulforge.java @@ -10,6 +10,7 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.atb; @@ -20,9 +21,10 @@ public class Soulforge extends AbstractCollectorCard { // intellij stuff skill, self, uncommon, , , 8, 3, , public Soulforge() { - super(ID, 0, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); + super(ID, 1, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); baseMagicNumber = magicNumber = 1; exhaust = true; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/SpiritLeech.java b/src/main/java/collector/cards/SpiritLeech.java index 69c2eb337..fc26524de 100644 --- a/src/main/java/collector/cards/SpiritLeech.java +++ b/src/main/java/collector/cards/SpiritLeech.java @@ -22,8 +22,8 @@ public class SpiritLeech extends AbstractCollectorCard { public SpiritLeech() { super(ID, 2, CardType.ATTACK, CardRarity.COMMON, CardTarget.ENEMY); - baseDamage = 12; - baseBlock = 10; + baseDamage = 13; + baseBlock = 11; } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/StashAway.java b/src/main/java/collector/cards/StashAway.java index dbe775ae5..184724628 100644 --- a/src/main/java/collector/cards/StashAway.java +++ b/src/main/java/collector/cards/StashAway.java @@ -14,7 +14,7 @@ public class StashAway extends AbstractCollectorCard { // intellij stuff skill, self, uncommon, , , , , , public StashAway() { - super(ID, -1, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); + super(ID, -1, CardType.SKILL, CardRarity.RARE, CardTarget.SELF); baseBlock = 4; exhaust = true; } diff --git a/src/main/java/collector/cards/Torchbearer.java b/src/main/java/collector/cards/Torchbearer.java index 6fff104e4..4a92c67f4 100644 --- a/src/main/java/collector/cards/Torchbearer.java +++ b/src/main/java/collector/cards/Torchbearer.java @@ -20,9 +20,6 @@ public Torchbearer() { } public void use(AbstractPlayer p, AbstractMonster m) { - if (upgraded){ - this.exhaust = TempHPField.tempHp.get(p) > 0; - } atb(new AddTemporaryHPAction(p, p, magicNumber)); } diff --git a/src/main/java/collector/cards/VoidArmor.java b/src/main/java/collector/cards/VoidArmor.java index d961e798f..be2448eca 100644 --- a/src/main/java/collector/cards/VoidArmor.java +++ b/src/main/java/collector/cards/VoidArmor.java @@ -19,7 +19,7 @@ public class VoidArmor extends AbstractCollectorCard { public VoidArmor() { super(ID, 1, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.ALL); - baseBlock = 9; + baseBlock = 10; } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/WhirlingFlame.java b/src/main/java/collector/cards/WhirlingFlame.java index ac84ff89b..6d301e406 100644 --- a/src/main/java/collector/cards/WhirlingFlame.java +++ b/src/main/java/collector/cards/WhirlingFlame.java @@ -16,7 +16,7 @@ public class WhirlingFlame extends AbstractCollectorCard { public WhirlingFlame() { super(ID, 2, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ALL_ENEMY); - baseDamage = 12; + baseDamage = 15; isMultiDamage = true; } diff --git a/src/main/java/collector/cards/Wildfire.java b/src/main/java/collector/cards/Wildfire.java index a98d5413d..b8d70e034 100644 --- a/src/main/java/collector/cards/Wildfire.java +++ b/src/main/java/collector/cards/Wildfire.java @@ -33,7 +33,7 @@ public void update() { isDone = true; for (AbstractPower q : m.powers) { if (q.type == AbstractPower.PowerType.DEBUFF) { - dmg(m, AbstractGameAction.AttackEffect.FIRE); + dmg(m, AttackEffect.FIRE); } } } diff --git a/src/main/java/collector/cards/YouAreMine.java b/src/main/java/collector/cards/YouAreMine.java index 2f395616e..db212a3ac 100644 --- a/src/main/java/collector/cards/YouAreMine.java +++ b/src/main/java/collector/cards/YouAreMine.java @@ -23,7 +23,7 @@ public class YouAreMine extends AbstractCollectorCard { public YouAreMine() { super(ID, 2, CardType.SKILL, CardRarity.BASIC, CardTarget.ENEMY); baseMagicNumber = magicNumber = 1; - baseSecondMagic = secondMagic = 5; + baseSecondMagic = secondMagic = 6; } public void use(AbstractPlayer p, AbstractMonster m) { @@ -34,6 +34,6 @@ public void use(AbstractPlayer p, AbstractMonster m) { } public void upp() { - upgradeSecondMagic(3); + upgradeSecondMagic(2); } } \ No newline at end of file diff --git a/src/main/java/collector/cards/collectibles/AbstractCollectibleCard.java b/src/main/java/collector/cards/collectibles/AbstractCollectibleCard.java index d6292f174..473b48e11 100644 --- a/src/main/java/collector/cards/collectibles/AbstractCollectibleCard.java +++ b/src/main/java/collector/cards/collectibles/AbstractCollectibleCard.java @@ -2,10 +2,12 @@ import collector.cards.AbstractCollectorCard; import collector.patches.CollectiblesPatches.CollectibleCardColorEnumPatch; +import sneckomod.SneckoMod; public abstract class AbstractCollectibleCard extends AbstractCollectorCard { public AbstractCollectibleCard(String cardID, int cost, CardType type, CardRarity rarity, CardTarget target) { this(cardID, cost, type, rarity, target, CollectibleCardColorEnumPatch.CardColorPatch.COLLECTIBLE); + this.tags.add(SneckoMod.BANNEDFORSNECKO); } diff --git a/src/main/java/collector/cards/collectibles/AcidSlimeCard.java b/src/main/java/collector/cards/collectibles/AcidSlimeCard.java index 5bb8afc5e..b8cf071d1 100644 --- a/src/main/java/collector/cards/collectibles/AcidSlimeCard.java +++ b/src/main/java/collector/cards/collectibles/AcidSlimeCard.java @@ -6,6 +6,7 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; import java.util.ArrayList; import java.util.Arrays; @@ -20,6 +21,7 @@ public class AcidSlimeCard extends AbstractCollectibleCard { public AcidSlimeCard() { super(ID, 0, CardType.SKILL, CardRarity.COMMON, CardTarget.SELF); baseMagicNumber = magicNumber = 1; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/AugmenterCard.java b/src/main/java/collector/cards/collectibles/AugmenterCard.java index b02016809..931c549d3 100644 --- a/src/main/java/collector/cards/collectibles/AugmenterCard.java +++ b/src/main/java/collector/cards/collectibles/AugmenterCard.java @@ -4,6 +4,7 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.StrengthPower; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.applyToSelf; @@ -16,6 +17,7 @@ public class AugmenterCard extends AbstractCollectibleCard { public AugmenterCard() { super(ID, 0, CardType.POWER, CardRarity.SPECIAL, CardTarget.SELF); baseMagicNumber = magicNumber = 3; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/BearCard.java b/src/main/java/collector/cards/collectibles/BearCard.java index fce9cfc4f..84bcad844 100644 --- a/src/main/java/collector/cards/collectibles/BearCard.java +++ b/src/main/java/collector/cards/collectibles/BearCard.java @@ -6,6 +6,7 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.StrengthPower; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.atb; @@ -19,6 +20,7 @@ public BearCard() { super(ID, 2, CardType.ATTACK, CardRarity.SPECIAL, CardTarget.ENEMY); baseDamage = 10; baseBlock = 10; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/BlueSlaverCard.java b/src/main/java/collector/cards/collectibles/BlueSlaverCard.java index a3c6c1ffe..024f766af 100644 --- a/src/main/java/collector/cards/collectibles/BlueSlaverCard.java +++ b/src/main/java/collector/cards/collectibles/BlueSlaverCard.java @@ -4,6 +4,7 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.WeakPower; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.*; @@ -15,6 +16,7 @@ public class BlueSlaverCard extends AbstractCollectibleCard { public BlueSlaverCard() { super(ID, 1, CardType.ATTACK, CardRarity.COMMON, CardTarget.ENEMY); baseDamage = 6; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/BonfireSpiritsCard.java b/src/main/java/collector/cards/collectibles/BonfireSpiritsCard.java index d5ec5ff8e..9268a7741 100644 --- a/src/main/java/collector/cards/collectibles/BonfireSpiritsCard.java +++ b/src/main/java/collector/cards/collectibles/BonfireSpiritsCard.java @@ -7,6 +7,7 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.atb; @@ -21,6 +22,7 @@ public BonfireSpiritsCard() { baseMagicNumber = magicNumber = 4; isPyre(); tags.add(CardTags.HEALING); + this.tags.add(SneckoMod.BANNEDFORSNECKO); } private boolean wasRare = false; diff --git a/src/main/java/collector/cards/collectibles/BookOfStabbingCard.java b/src/main/java/collector/cards/collectibles/BookOfStabbingCard.java index b1f18d367..c55bfeb28 100644 --- a/src/main/java/collector/cards/collectibles/BookOfStabbingCard.java +++ b/src/main/java/collector/cards/collectibles/BookOfStabbingCard.java @@ -4,6 +4,7 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.applyToSelf; @@ -15,6 +16,7 @@ public class BookOfStabbingCard extends AbstractCollectibleCard { public BookOfStabbingCard() { super(ID, 1, CardType.POWER, CardRarity.UNCOMMON, CardTarget.SELF); baseMagicNumber = magicNumber = 2; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/BronzeOrbCard.java b/src/main/java/collector/cards/collectibles/BronzeOrbCard.java index 0da4f443f..bf8efc906 100644 --- a/src/main/java/collector/cards/collectibles/BronzeOrbCard.java +++ b/src/main/java/collector/cards/collectibles/BronzeOrbCard.java @@ -4,6 +4,7 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.atb; @@ -16,6 +17,7 @@ public BronzeOrbCard() { super(ID, 1, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); baseDamage = 5; baseBlock = 5; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/ByrdCard.java b/src/main/java/collector/cards/collectibles/ByrdCard.java index cc156d63d..bcf9a3733 100644 --- a/src/main/java/collector/cards/collectibles/ByrdCard.java +++ b/src/main/java/collector/cards/collectibles/ByrdCard.java @@ -3,6 +3,7 @@ import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; @@ -13,6 +14,7 @@ public class ByrdCard extends AbstractCollectibleCard { public ByrdCard() { super(ID, 1, CardType.ATTACK, CardRarity.COMMON, CardTarget.ENEMY); baseDamage = 1; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/CenturionCard.java b/src/main/java/collector/cards/collectibles/CenturionCard.java index ed6d8a0e7..8eb017497 100644 --- a/src/main/java/collector/cards/collectibles/CenturionCard.java +++ b/src/main/java/collector/cards/collectibles/CenturionCard.java @@ -3,6 +3,7 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.DexterityPower; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.applyToSelf; @@ -15,6 +16,7 @@ public CenturionCard() { super(ID, 2, CardType.SKILL, CardRarity.COMMON, CardTarget.SELF); baseBlock = 10; baseMagicNumber = magicNumber = 1; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/ChosenCard.java b/src/main/java/collector/cards/collectibles/ChosenCard.java index 690eeea0f..9eb53cb1b 100644 --- a/src/main/java/collector/cards/collectibles/ChosenCard.java +++ b/src/main/java/collector/cards/collectibles/ChosenCard.java @@ -6,6 +6,7 @@ import com.megacrit.cardcrawl.powers.StrengthPower; import com.megacrit.cardcrawl.powers.VulnerablePower; import com.megacrit.cardcrawl.powers.WeakPower; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.applyToEnemy; @@ -19,6 +20,7 @@ public ChosenCard() { super(ID, 1, CardType.SKILL, CardRarity.COMMON, CardTarget.ENEMY); baseMagicNumber = magicNumber = 2; baseSecondMagic = secondMagic = 3; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/ClericCard.java b/src/main/java/collector/cards/collectibles/ClericCard.java index 4f726b319..5e3e9d53c 100644 --- a/src/main/java/collector/cards/collectibles/ClericCard.java +++ b/src/main/java/collector/cards/collectibles/ClericCard.java @@ -3,6 +3,7 @@ import com.evacipated.cardcrawl.mod.stslib.actions.tempHp.AddTemporaryHPAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.atb; @@ -15,6 +16,7 @@ public ClericCard() { super(ID, 1, CardType.SKILL, CardRarity.SPECIAL, CardTarget.SELF); baseMagicNumber = magicNumber = 10; isPyre(); + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/CollectorCard.java b/src/main/java/collector/cards/collectibles/CollectorCard.java index e3a0e183e..66b391552 100644 --- a/src/main/java/collector/cards/collectibles/CollectorCard.java +++ b/src/main/java/collector/cards/collectibles/CollectorCard.java @@ -5,6 +5,7 @@ import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.VulnerablePower; import com.megacrit.cardcrawl.powers.WeakPower; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.applyToEnemy; @@ -20,6 +21,7 @@ public CollectorCard() { baseMagicNumber = magicNumber = 1; baseSecondMagic = secondMagic = 3; isPyre(); + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/CultistCard.java b/src/main/java/collector/cards/collectibles/CultistCard.java index ad00ccf1a..75fd42ba7 100644 --- a/src/main/java/collector/cards/collectibles/CultistCard.java +++ b/src/main/java/collector/cards/collectibles/CultistCard.java @@ -3,6 +3,7 @@ import collector.powers.StrengthOverTurnsPower; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.applyToSelf; @@ -14,6 +15,7 @@ public class CultistCard extends AbstractCollectibleCard { public CultistCard() { super(ID, 1, CardType.POWER, CardRarity.COMMON, CardTarget.SELF); isPyre(); + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/DaggerCard.java b/src/main/java/collector/cards/collectibles/DaggerCard.java index 4e6638ba2..8a8b07225 100644 --- a/src/main/java/collector/cards/collectibles/DaggerCard.java +++ b/src/main/java/collector/cards/collectibles/DaggerCard.java @@ -4,6 +4,7 @@ import com.megacrit.cardcrawl.actions.common.LoseHPAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.atb; @@ -16,6 +17,7 @@ public DaggerCard() { super(ID, 1, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); baseDamage = 20; baseMagicNumber = magicNumber = 3; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/DarklingsCard.java b/src/main/java/collector/cards/collectibles/DarklingsCard.java index d7cf21239..7063c36f3 100644 --- a/src/main/java/collector/cards/collectibles/DarklingsCard.java +++ b/src/main/java/collector/cards/collectibles/DarklingsCard.java @@ -8,6 +8,7 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.atb; @@ -20,6 +21,7 @@ public DarklingsCard() { super(ID, 1, CardType.ATTACK, CardRarity.COMMON, CardTarget.ENEMY); isPyre(); baseDamage = 8; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/DefaultCollectibleCard.java b/src/main/java/collector/cards/collectibles/DefaultCollectibleCard.java index 432ce81db..627fe2141 100644 --- a/src/main/java/collector/cards/collectibles/DefaultCollectibleCard.java +++ b/src/main/java/collector/cards/collectibles/DefaultCollectibleCard.java @@ -4,6 +4,7 @@ import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.DexterityPower; import com.megacrit.cardcrawl.powers.StrengthPower; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.applyToSelf; @@ -15,6 +16,7 @@ public class DefaultCollectibleCard extends AbstractCollectibleCard { public DefaultCollectibleCard() { super(ID, 1, CardType.POWER, CardRarity.SPECIAL, CardTarget.SELF); baseMagicNumber = magicNumber = 1; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/DesignerInSpireCard.java b/src/main/java/collector/cards/collectibles/DesignerInSpireCard.java index d2fadf736..b1f6f043f 100644 --- a/src/main/java/collector/cards/collectibles/DesignerInSpireCard.java +++ b/src/main/java/collector/cards/collectibles/DesignerInSpireCard.java @@ -4,6 +4,7 @@ import com.evacipated.cardcrawl.mod.stslib.actions.tempHp.AddTemporaryHPAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.*; @@ -15,6 +16,7 @@ public class DesignerInSpireCard extends AbstractCollectibleCard { public DesignerInSpireCard() { super(ID, 2, CardType.POWER, CardRarity.SPECIAL, CardTarget.SELF); baseMagicNumber = magicNumber = 6; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/FaceTraderCard.java b/src/main/java/collector/cards/collectibles/FaceTraderCard.java index 12bd4a6fa..19cbf21e1 100644 --- a/src/main/java/collector/cards/collectibles/FaceTraderCard.java +++ b/src/main/java/collector/cards/collectibles/FaceTraderCard.java @@ -17,6 +17,7 @@ public class FaceTraderCard extends AbstractCollectibleCard { public FaceTraderCard() { super(ID, 0, CardType.SKILL, CardRarity.SPECIAL, CardTarget.SELF); baseMagicNumber = magicNumber = 2; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/FatGremlinCard.java b/src/main/java/collector/cards/collectibles/FatGremlinCard.java index 26613624c..f7ddb066c 100644 --- a/src/main/java/collector/cards/collectibles/FatGremlinCard.java +++ b/src/main/java/collector/cards/collectibles/FatGremlinCard.java @@ -4,6 +4,7 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.WeakPower; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.applyToEnemy; @@ -16,6 +17,7 @@ public FatGremlinCard() { super(ID, 0, CardType.ATTACK, CardRarity.COMMON, CardTarget.ENEMY); baseDamage = 4; baseMagicNumber = magicNumber = 1; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/FinalBossCard.java b/src/main/java/collector/cards/collectibles/FinalBossCard.java index ff3ae9043..575a33d06 100644 --- a/src/main/java/collector/cards/collectibles/FinalBossCard.java +++ b/src/main/java/collector/cards/collectibles/FinalBossCard.java @@ -5,6 +5,7 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.InvinciblePower; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.atb; @@ -20,6 +21,7 @@ public FinalBossCard() { public void use(AbstractPlayer p, AbstractMonster m) { atb(new RemoveSpecificPowerAction(m, p, InvinciblePower.POWER_ID)); atb(new StunMonsterAction(m, p)); + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void upp() { diff --git a/src/main/java/collector/cards/collectibles/FungiBeastCard.java b/src/main/java/collector/cards/collectibles/FungiBeastCard.java index c1117caa9..b40ba5c01 100644 --- a/src/main/java/collector/cards/collectibles/FungiBeastCard.java +++ b/src/main/java/collector/cards/collectibles/FungiBeastCard.java @@ -3,6 +3,7 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.VulnerablePower; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.applyToEnemy; @@ -15,6 +16,7 @@ public class FungiBeastCard extends AbstractCollectibleCard { public FungiBeastCard() { super(ID, 1, CardType.SKILL, CardRarity.COMMON, CardTarget.ENEMY); baseMagicNumber = magicNumber = 2; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/GiantHeadCardStageOne.java b/src/main/java/collector/cards/collectibles/GiantHeadCardStageOne.java index af548bd1d..cf5d1953d 100644 --- a/src/main/java/collector/cards/collectibles/GiantHeadCardStageOne.java +++ b/src/main/java/collector/cards/collectibles/GiantHeadCardStageOne.java @@ -1,8 +1,12 @@ package collector.cards.collectibles; +import basemod.helpers.CardModifierManager; +import collector.cardmods.CollectedCardMod; import collector.powers.AddCopyNextTurnPower; +import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.applyToSelf; @@ -13,11 +17,16 @@ public class GiantHeadCardStageOne extends AbstractCollectibleCard { public GiantHeadCardStageOne() { super(ID, 1, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); - cardsToPreview = new GiantHeadCardStageTwo(); + AbstractCard tar = new GiantHeadCardStageTwo(); + CardModifierManager.addModifier(tar, new CollectedCardMod()); + cardsToPreview = tar; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { - applyToSelf(new AddCopyNextTurnPower(new GiantHeadCardStageTwo())); + AbstractCard tar = new GiantHeadCardStageTwo(); + CardModifierManager.addModifier(tar, new CollectedCardMod()); + applyToSelf(new AddCopyNextTurnPower(tar)); } public void upp() { diff --git a/src/main/java/collector/cards/collectibles/GiantHeadCardStageThree.java b/src/main/java/collector/cards/collectibles/GiantHeadCardStageThree.java index d162966cd..517a59198 100644 --- a/src/main/java/collector/cards/collectibles/GiantHeadCardStageThree.java +++ b/src/main/java/collector/cards/collectibles/GiantHeadCardStageThree.java @@ -3,6 +3,7 @@ import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; @@ -13,6 +14,7 @@ public class GiantHeadCardStageThree extends AbstractCollectibleCard { public GiantHeadCardStageThree() { super(ID, 3, CardType.ATTACK, CardRarity.SPECIAL, CardTarget.ALL_ENEMY, CardColor.COLORLESS); baseDamage = 70; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/GiantHeadCardStageTwo.java b/src/main/java/collector/cards/collectibles/GiantHeadCardStageTwo.java index 0a5c58401..e82d124bd 100644 --- a/src/main/java/collector/cards/collectibles/GiantHeadCardStageTwo.java +++ b/src/main/java/collector/cards/collectibles/GiantHeadCardStageTwo.java @@ -3,6 +3,7 @@ import collector.powers.AddCopyNextTurnPower; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.applyToSelf; @@ -14,6 +15,7 @@ public class GiantHeadCardStageTwo extends AbstractCollectibleCard { public GiantHeadCardStageTwo() { super(ID, 2, CardType.SKILL, CardRarity.SPECIAL, CardTarget.SELF, CardColor.COLORLESS); cardsToPreview = new GiantHeadCardStageThree(); + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/GremlinLeaderCard.java b/src/main/java/collector/cards/collectibles/GremlinLeaderCard.java index 64c76f91f..d2decc6c0 100644 --- a/src/main/java/collector/cards/collectibles/GremlinLeaderCard.java +++ b/src/main/java/collector/cards/collectibles/GremlinLeaderCard.java @@ -8,6 +8,7 @@ import com.megacrit.cardcrawl.helpers.CardLibrary; import com.megacrit.cardcrawl.monsters.AbstractMonster; import hermit.util.Wiz; +import sneckomod.SneckoMod; import java.util.ArrayList; @@ -21,6 +22,7 @@ public class GremlinLeaderCard extends AbstractCollectibleCard { public GremlinLeaderCard() { super(ID, 1, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); baseMagicNumber = magicNumber = 2; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/GremlinNobCard.java b/src/main/java/collector/cards/collectibles/GremlinNobCard.java index 2a6593fad..eee05bb0e 100644 --- a/src/main/java/collector/cards/collectibles/GremlinNobCard.java +++ b/src/main/java/collector/cards/collectibles/GremlinNobCard.java @@ -3,6 +3,7 @@ import collector.powers.collectioncards.GremlinNobCardPower; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.applyToSelf; @@ -14,6 +15,7 @@ public class GremlinNobCard extends AbstractCollectibleCard { public GremlinNobCard() { super(ID, 2, CardType.POWER, CardRarity.UNCOMMON, CardTarget.SELF); baseMagicNumber = magicNumber = 2; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/GremlinWizardCard.java b/src/main/java/collector/cards/collectibles/GremlinWizardCard.java index 7ed96a205..0bb418dca 100644 --- a/src/main/java/collector/cards/collectibles/GremlinWizardCard.java +++ b/src/main/java/collector/cards/collectibles/GremlinWizardCard.java @@ -4,6 +4,7 @@ import collector.powers.NextTurnVigorPower; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.applyToSelf; @@ -15,6 +16,7 @@ public class GremlinWizardCard extends AbstractCollectibleCard { public GremlinWizardCard() { super(ID, 0, CardType.SKILL, CardRarity.COMMON, CardTarget.SELF); baseMagicNumber = magicNumber = 4; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/JawWormCard.java b/src/main/java/collector/cards/collectibles/JawWormCard.java index 350f6e372..c88433c19 100644 --- a/src/main/java/collector/cards/collectibles/JawWormCard.java +++ b/src/main/java/collector/cards/collectibles/JawWormCard.java @@ -3,6 +3,7 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.StrengthPower; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.applyToSelf; @@ -15,6 +16,7 @@ public JawWormCard() { super(ID, 2, CardType.SKILL, CardRarity.COMMON, CardTarget.SELF); baseBlock = 12; baseMagicNumber = magicNumber = 1; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/JousterCard.java b/src/main/java/collector/cards/collectibles/JousterCard.java index 80389c7f8..b82568947 100644 --- a/src/main/java/collector/cards/collectibles/JousterCard.java +++ b/src/main/java/collector/cards/collectibles/JousterCard.java @@ -4,6 +4,7 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; import hermit.util.Wiz; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; @@ -15,6 +16,7 @@ public JousterCard() { super(ID, 1, CardType.ATTACK, CardRarity.SPECIAL, CardTarget.ENEMY); baseDamage = 12; baseBlock = 12; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/LagavulinCard.java b/src/main/java/collector/cards/collectibles/LagavulinCard.java index dc8d83ec3..24730eb10 100644 --- a/src/main/java/collector/cards/collectibles/LagavulinCard.java +++ b/src/main/java/collector/cards/collectibles/LagavulinCard.java @@ -3,6 +3,7 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.StrengthPower; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.applyToEnemy; @@ -15,6 +16,7 @@ public class LagavulinCard extends AbstractCollectibleCard { public LagavulinCard() { super(ID, 1, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.ALL_ENEMY); baseMagicNumber = magicNumber = 1; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/LivingWallCard.java b/src/main/java/collector/cards/collectibles/LivingWallCard.java index 947e70450..71aaf604d 100644 --- a/src/main/java/collector/cards/collectibles/LivingWallCard.java +++ b/src/main/java/collector/cards/collectibles/LivingWallCard.java @@ -4,6 +4,7 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.makeInHand; @@ -15,6 +16,7 @@ public class LivingWallCard extends AbstractCollectibleCard { public LivingWallCard() { super(ID, 1, CardType.SKILL, CardRarity.SPECIAL, CardTarget.SELF); isPyre(); + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/LouseCard.java b/src/main/java/collector/cards/collectibles/LouseCard.java index e178e664e..f86c600e6 100644 --- a/src/main/java/collector/cards/collectibles/LouseCard.java +++ b/src/main/java/collector/cards/collectibles/LouseCard.java @@ -4,6 +4,7 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.BlurPower; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.*; @@ -15,6 +16,7 @@ public class LouseCard extends AbstractCollectibleCard { public LouseCard() { super(ID, 0, CardType.SKILL, CardRarity.COMMON, CardTarget.SELF); baseBlock = 7; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/LuckyWick.java b/src/main/java/collector/cards/collectibles/LuckyWick.java index 2f6023fdb..2c6731842 100644 --- a/src/main/java/collector/cards/collectibles/LuckyWick.java +++ b/src/main/java/collector/cards/collectibles/LuckyWick.java @@ -3,6 +3,7 @@ import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; @@ -14,6 +15,7 @@ public LuckyWick() { super(ID, 0, CardType.ATTACK, CardRarity.SPECIAL, CardTarget.ENEMY, CardColor.COLORLESS); baseDamage = 3; baseBlock = 3; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/MadGremlinCard.java b/src/main/java/collector/cards/collectibles/MadGremlinCard.java index 7ae4ee387..56fd7f63f 100644 --- a/src/main/java/collector/cards/collectibles/MadGremlinCard.java +++ b/src/main/java/collector/cards/collectibles/MadGremlinCard.java @@ -4,6 +4,7 @@ import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.LoseStrengthPower; import com.megacrit.cardcrawl.powers.StrengthPower; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.applyToSelf; @@ -15,6 +16,7 @@ public class MadGremlinCard extends AbstractCollectibleCard { public MadGremlinCard() { super(ID, 0, CardType.SKILL, CardRarity.COMMON, CardTarget.SELF); baseMagicNumber = magicNumber = 3; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/MawCard.java b/src/main/java/collector/cards/collectibles/MawCard.java index de146b43b..9aef93510 100644 --- a/src/main/java/collector/cards/collectibles/MawCard.java +++ b/src/main/java/collector/cards/collectibles/MawCard.java @@ -3,6 +3,7 @@ import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; @@ -13,6 +14,7 @@ public class MawCard extends AbstractCollectibleCard { public MawCard() { super(ID, 3, CardType.ATTACK, CardRarity.COMMON, CardTarget.ENEMY); baseDamage = 32; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/MerchantCard.java b/src/main/java/collector/cards/collectibles/MerchantCard.java index efe680e03..d03a50a66 100644 --- a/src/main/java/collector/cards/collectibles/MerchantCard.java +++ b/src/main/java/collector/cards/collectibles/MerchantCard.java @@ -4,6 +4,7 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.makeInHand; @@ -15,6 +16,7 @@ public class MerchantCard extends AbstractCollectibleCard { public MerchantCard() { super(ID, 2, CardType.SKILL, CardRarity.SPECIAL, CardTarget.SELF); baseMagicNumber = magicNumber = 4; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/MushroomCard.java b/src/main/java/collector/cards/collectibles/MushroomCard.java index 41f64a79e..c60464efd 100644 --- a/src/main/java/collector/cards/collectibles/MushroomCard.java +++ b/src/main/java/collector/cards/collectibles/MushroomCard.java @@ -6,6 +6,7 @@ import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.VulnerablePower; import com.megacrit.cardcrawl.powers.WeakPower; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.applyToEnemy; @@ -18,6 +19,7 @@ public MushroomCard() { super(ID, 1, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); baseDamage = 5; baseMagicNumber = magicNumber = 3; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/MysticCard.java b/src/main/java/collector/cards/collectibles/MysticCard.java index 72a58b1a4..cada35714 100644 --- a/src/main/java/collector/cards/collectibles/MysticCard.java +++ b/src/main/java/collector/cards/collectibles/MysticCard.java @@ -3,6 +3,7 @@ import com.evacipated.cardcrawl.mod.stslib.actions.tempHp.AddTemporaryHPAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.atb; @@ -14,6 +15,7 @@ public class MysticCard extends AbstractCollectibleCard { public MysticCard() { super(ID, 0, CardType.SKILL, CardRarity.COMMON, CardTarget.SELF); baseMagicNumber = magicNumber = 4; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/NemesisCard.java b/src/main/java/collector/cards/collectibles/NemesisCard.java index 39bb24500..0887b04a5 100644 --- a/src/main/java/collector/cards/collectibles/NemesisCard.java +++ b/src/main/java/collector/cards/collectibles/NemesisCard.java @@ -4,6 +4,7 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.IntangiblePlayerPower; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.applyToSelf; @@ -15,6 +16,7 @@ public class NemesisCard extends AbstractCollectibleCard { public NemesisCard() { super(ID, 2, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/NlothCard.java b/src/main/java/collector/cards/collectibles/NlothCard.java index 1455b2e4a..b9e2ed98a 100644 --- a/src/main/java/collector/cards/collectibles/NlothCard.java +++ b/src/main/java/collector/cards/collectibles/NlothCard.java @@ -4,6 +4,7 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.*; @@ -15,6 +16,7 @@ public class NlothCard extends AbstractCollectibleCard { public NlothCard() { super(ID, 0, CardType.SKILL, CardRarity.SPECIAL, CardTarget.SELF); isPyre(); + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/OrbWalkerCard.java b/src/main/java/collector/cards/collectibles/OrbWalkerCard.java index 36262eb48..3dab23375 100644 --- a/src/main/java/collector/cards/collectibles/OrbWalkerCard.java +++ b/src/main/java/collector/cards/collectibles/OrbWalkerCard.java @@ -4,6 +4,7 @@ import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.makeInHand; @@ -17,6 +18,7 @@ public OrbWalkerCard() { baseDamage = 14; baseMagicNumber = magicNumber = 2; cardsToPreview = new Ember(); + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/PointyCard.java b/src/main/java/collector/cards/collectibles/PointyCard.java index 38ef18955..d818b2118 100644 --- a/src/main/java/collector/cards/collectibles/PointyCard.java +++ b/src/main/java/collector/cards/collectibles/PointyCard.java @@ -4,6 +4,7 @@ import com.megacrit.cardcrawl.actions.common.DrawCardAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.atb; @@ -15,6 +16,7 @@ public class PointyCard extends AbstractCollectibleCard { public PointyCard() { super(ID, 1, CardType.ATTACK, CardRarity.SPECIAL, CardTarget.ENEMY); baseDamage = 6; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/RanwidCard.java b/src/main/java/collector/cards/collectibles/RanwidCard.java index c6bb0aa78..b6f9c59a2 100644 --- a/src/main/java/collector/cards/collectibles/RanwidCard.java +++ b/src/main/java/collector/cards/collectibles/RanwidCard.java @@ -4,6 +4,7 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.*; @@ -14,6 +15,7 @@ public class RanwidCard extends AbstractCollectibleCard { public RanwidCard() { super(ID, 1, CardType.POWER, CardRarity.SPECIAL, CardTarget.SELF); + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/RedSlaverCard.java b/src/main/java/collector/cards/collectibles/RedSlaverCard.java index 8d687503b..32f10b43a 100644 --- a/src/main/java/collector/cards/collectibles/RedSlaverCard.java +++ b/src/main/java/collector/cards/collectibles/RedSlaverCard.java @@ -5,6 +5,7 @@ import com.megacrit.cardcrawl.powers.ArtifactPower; import com.megacrit.cardcrawl.powers.GainStrengthPower; import com.megacrit.cardcrawl.powers.StrengthPower; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.applyToEnemy; @@ -16,6 +17,7 @@ public class RedSlaverCard extends AbstractCollectibleCard { public RedSlaverCard() { super(ID, 1, CardType.SKILL, CardRarity.COMMON, CardTarget.ENEMY); baseMagicNumber = magicNumber = 9; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/ReptomancerCard.java b/src/main/java/collector/cards/collectibles/ReptomancerCard.java index 60a25c04b..36f54e6cf 100644 --- a/src/main/java/collector/cards/collectibles/ReptomancerCard.java +++ b/src/main/java/collector/cards/collectibles/ReptomancerCard.java @@ -4,6 +4,7 @@ import com.evacipated.cardcrawl.mod.stslib.actions.tempHp.AddTemporaryHPAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.applyToSelf; @@ -16,6 +17,7 @@ public ReptomancerCard() { super(ID, 1, CardType.POWER, CardRarity.UNCOMMON, CardTarget.SELF); baseMagicNumber = magicNumber = 6; baseSecondMagic = secondMagic = 3; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/RepulsorCard.java b/src/main/java/collector/cards/collectibles/RepulsorCard.java index 60c49a921..eab930ec7 100644 --- a/src/main/java/collector/cards/collectibles/RepulsorCard.java +++ b/src/main/java/collector/cards/collectibles/RepulsorCard.java @@ -3,6 +3,7 @@ import com.megacrit.cardcrawl.actions.common.DrawCardAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.atb; @@ -15,6 +16,7 @@ public RepulsorCard() { super(ID, 0, CardType.SKILL, CardRarity.COMMON, CardTarget.SELF); baseMagicNumber = magicNumber = 2; isPyre(); + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/RomeoCard.java b/src/main/java/collector/cards/collectibles/RomeoCard.java index d0a26e678..953739a50 100644 --- a/src/main/java/collector/cards/collectibles/RomeoCard.java +++ b/src/main/java/collector/cards/collectibles/RomeoCard.java @@ -4,7 +4,9 @@ import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.watcher.FreeAttackPower; import com.megacrit.cardcrawl.powers.watcher.VigorPower; +import sneckomod.SneckoMod; +import static champ.ChampMod.vigor; import static collector.CollectorMod.makeID; import static collector.util.Wiz.applyToSelf; @@ -15,11 +17,12 @@ public class RomeoCard extends AbstractCollectibleCard { public RomeoCard() { super(ID, 1, CardType.SKILL, CardRarity.SPECIAL, CardTarget.SELF); baseMagicNumber = magicNumber = 5; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { applyToSelf(new FreeAttackPower(p, 1)); - applyToSelf(new VigorPower(p, magicNumber)); + vigor(magicNumber); } public void upp() { diff --git a/src/main/java/collector/cards/collectibles/ScrapOozeCard.java b/src/main/java/collector/cards/collectibles/ScrapOozeCard.java index 5380b5bb6..2dd2767fe 100644 --- a/src/main/java/collector/cards/collectibles/ScrapOozeCard.java +++ b/src/main/java/collector/cards/collectibles/ScrapOozeCard.java @@ -6,6 +6,7 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.atb; @@ -18,6 +19,7 @@ public ScrapOozeCard() { super(ID, 1, CardType.SKILL, CardRarity.SPECIAL, CardTarget.SELF); baseMagicNumber = magicNumber = 2; isPyre(); + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/SentryCard.java b/src/main/java/collector/cards/collectibles/SentryCard.java index 9d7c6e32a..3a84d3cf6 100644 --- a/src/main/java/collector/cards/collectibles/SentryCard.java +++ b/src/main/java/collector/cards/collectibles/SentryCard.java @@ -8,6 +8,7 @@ import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.WeakPower; import com.megacrit.cardcrawl.vfx.combat.SmallLaserEffect; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.applyToEnemy; @@ -21,6 +22,7 @@ public SentryCard() { super(ID, 1, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); baseDamage = 8; baseMagicNumber = magicNumber = 1; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/ShelledParasiteCard.java b/src/main/java/collector/cards/collectibles/ShelledParasiteCard.java index d5ee2e615..c2a599fd8 100644 --- a/src/main/java/collector/cards/collectibles/ShelledParasiteCard.java +++ b/src/main/java/collector/cards/collectibles/ShelledParasiteCard.java @@ -3,6 +3,7 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.PlatedArmorPower; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.applyToSelf; @@ -14,6 +15,7 @@ public class ShelledParasiteCard extends AbstractCollectibleCard { public ShelledParasiteCard() { super(ID, 1, CardType.POWER, CardRarity.COMMON, CardTarget.SELF); baseMagicNumber = magicNumber = 4; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/ShieldGremlinCard.java b/src/main/java/collector/cards/collectibles/ShieldGremlinCard.java index 2b5edd90d..38f859a42 100644 --- a/src/main/java/collector/cards/collectibles/ShieldGremlinCard.java +++ b/src/main/java/collector/cards/collectibles/ShieldGremlinCard.java @@ -2,6 +2,7 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; @@ -12,6 +13,7 @@ public class ShieldGremlinCard extends AbstractCollectibleCard { public ShieldGremlinCard() { super(ID, 0, CardType.SKILL, CardRarity.COMMON, CardTarget.SELF); baseBlock = 6; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/SnakePlantCard.java b/src/main/java/collector/cards/collectibles/SnakePlantCard.java index 7e52acb05..c68c97359 100644 --- a/src/main/java/collector/cards/collectibles/SnakePlantCard.java +++ b/src/main/java/collector/cards/collectibles/SnakePlantCard.java @@ -9,6 +9,7 @@ import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.vfx.combat.BiteEffect; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; @@ -16,9 +17,13 @@ public class SnakePlantCard extends AbstractCollectibleCard { public final static String ID = makeID(SnakePlantCard.class.getSimpleName()); // intellij stuff attack, enemy, common, 7, 2, , , , + + //TODO: Rework into Skill: 1e, Apply 2 Weak and Vulnerable. + public SnakePlantCard() { super(ID, 2, CardType.ATTACK, CardRarity.COMMON, CardTarget.ENEMY); baseDamage = 7; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/SneakyGremlinCard.java b/src/main/java/collector/cards/collectibles/SneakyGremlinCard.java index 3532684d8..55457c7ff 100644 --- a/src/main/java/collector/cards/collectibles/SneakyGremlinCard.java +++ b/src/main/java/collector/cards/collectibles/SneakyGremlinCard.java @@ -4,6 +4,7 @@ import com.megacrit.cardcrawl.actions.common.DrawCardAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.atb; @@ -15,6 +16,7 @@ public class SneakyGremlinCard extends AbstractCollectibleCard { public SneakyGremlinCard() { super(ID, 0, CardType.ATTACK, CardRarity.COMMON, CardTarget.ENEMY); baseDamage = 6; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/SneckoCard.java b/src/main/java/collector/cards/collectibles/SneckoCard.java index 5de15a25a..044f18707 100644 --- a/src/main/java/collector/cards/collectibles/SneckoCard.java +++ b/src/main/java/collector/cards/collectibles/SneckoCard.java @@ -3,6 +3,7 @@ import com.megacrit.cardcrawl.actions.common.DrawCardAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; import sneckomod.actions.MuddleHandAction; import static collector.CollectorMod.makeID; @@ -15,6 +16,7 @@ public class SneckoCard extends AbstractCollectibleCard { public SneckoCard() { super(ID, 0, CardType.SKILL, CardRarity.COMMON, CardTarget.SELF); baseMagicNumber = magicNumber = 3; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/SphericGuardianCard.java b/src/main/java/collector/cards/collectibles/SphericGuardianCard.java index cdd0e4f98..1d9265edc 100644 --- a/src/main/java/collector/cards/collectibles/SphericGuardianCard.java +++ b/src/main/java/collector/cards/collectibles/SphericGuardianCard.java @@ -4,6 +4,7 @@ import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.BarricadePower; import com.megacrit.cardcrawl.powers.BlurPower; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.applyToSelf; @@ -15,6 +16,7 @@ public class SphericGuardianCard extends AbstractCollectibleCard { public SphericGuardianCard() { super(ID, 1, CardType.SKILL, CardRarity.COMMON, CardTarget.SELF); this.baseMagicNumber = this.magicNumber = 2; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/SpikeSlimeCard.java b/src/main/java/collector/cards/collectibles/SpikeSlimeCard.java index a733879e1..30f521515 100644 --- a/src/main/java/collector/cards/collectibles/SpikeSlimeCard.java +++ b/src/main/java/collector/cards/collectibles/SpikeSlimeCard.java @@ -3,6 +3,7 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.FlameBarrierPower; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.applyToSelf; @@ -15,6 +16,7 @@ public SpikeSlimeCard() { super(ID, 1, CardType.SKILL, CardRarity.COMMON, CardTarget.SELF); baseMagicNumber = magicNumber = 3; baseBlock = 8; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/SpikerCard.java b/src/main/java/collector/cards/collectibles/SpikerCard.java index e55835f5c..fe966784e 100644 --- a/src/main/java/collector/cards/collectibles/SpikerCard.java +++ b/src/main/java/collector/cards/collectibles/SpikerCard.java @@ -3,6 +3,7 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.ThornsPower; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.applyToSelf; @@ -14,6 +15,7 @@ public class SpikerCard extends AbstractCollectibleCard { public SpikerCard() { super(ID, 1, CardType.POWER, CardRarity.COMMON, CardTarget.SELF); baseMagicNumber = magicNumber = 5; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/SpireGrowthCard.java b/src/main/java/collector/cards/collectibles/SpireGrowthCard.java index 40ac7b915..f3d2a9cbd 100644 --- a/src/main/java/collector/cards/collectibles/SpireGrowthCard.java +++ b/src/main/java/collector/cards/collectibles/SpireGrowthCard.java @@ -3,6 +3,7 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.ConstrictedPower; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.applyToEnemy; @@ -14,6 +15,7 @@ public class SpireGrowthCard extends AbstractCollectibleCard { public SpireGrowthCard() { super(ID, 1, CardType.SKILL, CardRarity.COMMON, CardTarget.ENEMY); baseMagicNumber = magicNumber = 10; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/SpireShieldCard.java b/src/main/java/collector/cards/collectibles/SpireShieldCard.java index 6286f7d03..4f3a9be61 100644 --- a/src/main/java/collector/cards/collectibles/SpireShieldCard.java +++ b/src/main/java/collector/cards/collectibles/SpireShieldCard.java @@ -3,6 +3,7 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.DexterityPower; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.applyToSelf; @@ -14,6 +15,7 @@ public class SpireShieldCard extends AbstractCollectibleCard { public SpireShieldCard() { super(ID, 0, CardType.POWER, CardRarity.SPECIAL, CardTarget.SELF); baseMagicNumber = magicNumber = 3; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/SpireSpearCard.java b/src/main/java/collector/cards/collectibles/SpireSpearCard.java index d51f8f3a6..5b50258c9 100644 --- a/src/main/java/collector/cards/collectibles/SpireSpearCard.java +++ b/src/main/java/collector/cards/collectibles/SpireSpearCard.java @@ -3,6 +3,7 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.StrengthPower; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.applyToSelf; @@ -14,6 +15,7 @@ public class SpireSpearCard extends AbstractCollectibleCard { public SpireSpearCard() { super(ID, 0, CardType.POWER, CardRarity.SPECIAL, CardTarget.SELF); baseMagicNumber = magicNumber = 3; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/SsserpentCard.java b/src/main/java/collector/cards/collectibles/SsserpentCard.java index e86633584..3b0806ade 100644 --- a/src/main/java/collector/cards/collectibles/SsserpentCard.java +++ b/src/main/java/collector/cards/collectibles/SsserpentCard.java @@ -4,6 +4,7 @@ import com.megacrit.cardcrawl.cards.curses.Doubt; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.makeInHand; @@ -16,6 +17,7 @@ public SsserpentCard() { super(ID, 1, CardType.ATTACK, CardRarity.SPECIAL, CardTarget.ENEMY); baseDamage = 20; cardsToPreview = new Doubt(); + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/TaskmasterCard.java b/src/main/java/collector/cards/collectibles/TaskmasterCard.java index dacb4f6bb..8a61128df 100644 --- a/src/main/java/collector/cards/collectibles/TaskmasterCard.java +++ b/src/main/java/collector/cards/collectibles/TaskmasterCard.java @@ -5,6 +5,7 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.StrengthPower; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.applyToEnemy; @@ -19,6 +20,7 @@ public TaskmasterCard() { baseDamage = 10; baseMagicNumber = magicNumber = 1; baseSecondMagic = secondMagic = 10; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/ThievesCard.java b/src/main/java/collector/cards/collectibles/ThievesCard.java index e20785719..0b1c6dbab 100644 --- a/src/main/java/collector/cards/collectibles/ThievesCard.java +++ b/src/main/java/collector/cards/collectibles/ThievesCard.java @@ -3,6 +3,7 @@ import collector.powers.collectioncards.ThievesCardPower; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.applyToSelf; @@ -14,6 +15,7 @@ public class ThievesCard extends AbstractCollectibleCard { public ThievesCard() { super(ID, 1, CardType.SKILL, CardRarity.COMMON, CardTarget.SELF); baseMagicNumber = magicNumber = 5; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/TorchHeadCard.java b/src/main/java/collector/cards/collectibles/TorchHeadCard.java index c861a723a..31d31f1e2 100644 --- a/src/main/java/collector/cards/collectibles/TorchHeadCard.java +++ b/src/main/java/collector/cards/collectibles/TorchHeadCard.java @@ -9,6 +9,7 @@ import com.megacrit.cardcrawl.helpers.CardLibrary; import com.megacrit.cardcrawl.monsters.AbstractMonster; import hermit.util.Wiz; +import sneckomod.SneckoMod; import java.util.ArrayList; @@ -24,6 +25,7 @@ public class TorchHeadCard extends AbstractCollectibleCard { public TorchHeadCard() { super(ID, 1, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/TransientCard.java b/src/main/java/collector/cards/collectibles/TransientCard.java index d7c222143..3f7c48bd1 100644 --- a/src/main/java/collector/cards/collectibles/TransientCard.java +++ b/src/main/java/collector/cards/collectibles/TransientCard.java @@ -4,6 +4,7 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.StrengthPower; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.applyToSelf; @@ -15,6 +16,7 @@ public class TransientCard extends AbstractCollectibleCard { public TransientCard() { super(ID, 1, CardType.POWER, CardRarity.UNCOMMON, CardTarget.SELF); baseMagicNumber = magicNumber = 6; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/VagrantCard.java b/src/main/java/collector/cards/collectibles/VagrantCard.java index ebe529054..242d199c7 100644 --- a/src/main/java/collector/cards/collectibles/VagrantCard.java +++ b/src/main/java/collector/cards/collectibles/VagrantCard.java @@ -4,6 +4,7 @@ import com.megacrit.cardcrawl.cards.curses.Shame; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.*; @@ -16,6 +17,7 @@ public VagrantCard() { super(ID, 0, CardType.SKILL, CardRarity.SPECIAL, CardTarget.SELF); baseMagicNumber = magicNumber = 2; cardsToPreview = new Shame(); + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/WomanInBlueCard.java b/src/main/java/collector/cards/collectibles/WomanInBlueCard.java index 2ca39b368..1132e5be0 100644 --- a/src/main/java/collector/cards/collectibles/WomanInBlueCard.java +++ b/src/main/java/collector/cards/collectibles/WomanInBlueCard.java @@ -5,6 +5,7 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.*; @@ -16,6 +17,7 @@ public class WomanInBlueCard extends AbstractCollectibleCard { public WomanInBlueCard() { super(ID, 1, CardType.POWER, CardRarity.SPECIAL, CardTarget.SELF); tags.add(CardTags.HEALING); + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/collectibles/WrithingMassCard.java b/src/main/java/collector/cards/collectibles/WrithingMassCard.java index a6154253d..3ed4ad812 100644 --- a/src/main/java/collector/cards/collectibles/WrithingMassCard.java +++ b/src/main/java/collector/cards/collectibles/WrithingMassCard.java @@ -5,6 +5,7 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; import static collector.CollectorMod.makeID; import static collector.util.Wiz.atb; @@ -16,6 +17,7 @@ public class WrithingMassCard extends AbstractCollectibleCard { public WrithingMassCard() { super(ID, 1, CardType.SKILL, CardRarity.COMMON, CardTarget.SELF); baseMagicNumber = magicNumber = 3; + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/patches/CollectorBottleField.java b/src/main/java/collector/patches/CollectorBottleField.java index 8c8fe6d09..4e1fe5bb3 100644 --- a/src/main/java/collector/patches/CollectorBottleField.java +++ b/src/main/java/collector/patches/CollectorBottleField.java @@ -1,5 +1,6 @@ package collector.patches; +import awakenedOne.util.Wiz; import com.evacipated.cardcrawl.modthespire.lib.SpireField; import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; import com.megacrit.cardcrawl.cards.AbstractCard; @@ -10,7 +11,12 @@ public class CollectorBottleField { @SpirePatch(clz = AbstractCard.class, method = "makeStatEquivalentCopy") public static class MakeStatEquivalentCopy { public static AbstractCard Postfix(AbstractCard result, AbstractCard self) { - inCollectionBottle.set(result, inCollectionBottle.get(self)); // Read: + if (Wiz.isInCombat()) { + inCollectionBottle.set(result, inCollectionBottle.get(self)); + } + if (!Wiz.isInCombat()) { + inCollectionBottle.set(result, Boolean.FALSE); + } return result; } } diff --git a/src/main/java/collector/patches/OnExhaustPatch.java b/src/main/java/collector/patches/OnExhaustPatch.java index 92027b859..c3c4440fc 100644 --- a/src/main/java/collector/patches/OnExhaustPatch.java +++ b/src/main/java/collector/patches/OnExhaustPatch.java @@ -17,7 +17,7 @@ ) public class OnExhaustPatch { - @SpireInsertPatch(locator = OnExhaustPatch.Locator.class) + @SpireInsertPatch(locator = Locator.class) public static void TriggerOnExhaust(CardGroup instance, AbstractCard c) { for (AbstractCard other : AbstractDungeon.player.hand.group) { if (other instanceof OnOtherCardExhaustInHand) { diff --git a/src/main/java/collector/patches/PyrePatches/PyreTooltips1.java b/src/main/java/collector/patches/PyrePatches/PyreTooltips1.java index ef987f58a..e7d01632c 100644 --- a/src/main/java/collector/patches/PyrePatches/PyreTooltips1.java +++ b/src/main/java/collector/patches/PyrePatches/PyreTooltips1.java @@ -1,4 +1,4 @@ -/* +package collector.patches.PyrePatches;/* package collector.patches.PyrePatches; import basemod.BaseMod; diff --git a/src/main/java/collector/patches/PyrePatches/PyreTooltips2.java b/src/main/java/collector/patches/PyrePatches/PyreTooltips2.java index ea3d4b0b3..0b823ff90 100644 --- a/src/main/java/collector/patches/PyrePatches/PyreTooltips2.java +++ b/src/main/java/collector/patches/PyrePatches/PyreTooltips2.java @@ -1,4 +1,4 @@ -/* +package collector.patches.PyrePatches;/* package collector.patches.PyrePatches; import basemod.BaseMod; diff --git a/src/main/java/collector/potions/DebuffDoublePotion.java b/src/main/java/collector/potions/DebuffDoublePotion.java index 46cc0f04e..0d39447fc 100644 --- a/src/main/java/collector/potions/DebuffDoublePotion.java +++ b/src/main/java/collector/potions/DebuffDoublePotion.java @@ -4,14 +4,18 @@ import basemod.abstracts.CustomPotion; import collector.CollectorMod; import collector.actions.GainReservesAction; +import com.badlogic.gdx.graphics.Color; import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.animations.VFXAction; import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.utility.SFXAction; import com.megacrit.cardcrawl.core.AbstractCreature; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.helpers.PowerTip; import com.megacrit.cardcrawl.localization.PotionStrings; import com.megacrit.cardcrawl.powers.AbstractPower; +import com.megacrit.cardcrawl.vfx.combat.VerticalAuraEffect; import static collector.CollectorMod.makeID; import static collector.util.Wiz.atb; @@ -25,7 +29,7 @@ public class DebuffDoublePotion extends CustomPotion { public static final String[] DESCRIPTIONS = potionStrings.DESCRIPTIONS; public DebuffDoublePotion() { - super(NAME, POTION_ID, PotionRarity.RARE, PotionSize.H, PotionColor.ELIXIR); //TODO: Potion visual stuff + super(NAME, POTION_ID, PotionRarity.RARE, PotionSize.H, PotionColor.ELIXIR); this.isThrown = true; this.targetRequired = true; this.labOutlineColor= CollectorMod.potionLabColor; @@ -46,9 +50,14 @@ public void use(AbstractCreature targetFoe) { atb(new AbstractGameAction() { @Override public void update() { + this.addToBot(new VFXAction(targetFoe, new VerticalAuraEffect(Color.BLACK, targetFoe.hb.cX, targetFoe.hb.cY), 0.1F)); + this.addToBot(new SFXAction("ATTACK_FIRE")); + this.addToBot(new VFXAction(targetFoe, new VerticalAuraEffect(Color.PURPLE, targetFoe.hb.cX, targetFoe.hb.cY), 0.1F)); + this.addToBot(new VFXAction(targetFoe, new VerticalAuraEffect(Color.CYAN, targetFoe.hb.cX, targetFoe.hb.cY), 0.0F)); isDone = true; for (AbstractPower p : targetFoe.powers) { if (p.type == AbstractPower.PowerType.DEBUFF) { + p.amount *= potency + 1; } } diff --git a/src/main/java/collector/potions/MiniCursePotion.java b/src/main/java/collector/potions/MiniCursePotion.java index 1443f299f..ea5d3730b 100644 --- a/src/main/java/collector/potions/MiniCursePotion.java +++ b/src/main/java/collector/potions/MiniCursePotion.java @@ -5,6 +5,7 @@ import basemod.abstracts.CustomPotion; import collector.CollectorMod; import collector.powers.DoomPower; +import com.megacrit.cardcrawl.actions.animations.VFXAction; import com.megacrit.cardcrawl.core.AbstractCreature; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; @@ -15,9 +16,11 @@ import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.VulnerablePower; import com.megacrit.cardcrawl.powers.WeakPower; +import com.megacrit.cardcrawl.vfx.CollectorCurseEffect; import static collector.CollectorMod.makeID; import static collector.util.Wiz.applyToEnemy; +import static collector.util.Wiz.atb; public class MiniCursePotion extends CustomPotion { @@ -27,7 +30,7 @@ public class MiniCursePotion extends CustomPotion { public static final String[] DESCRIPTIONS = potionStrings.DESCRIPTIONS; public MiniCursePotion() { - super(NAME, POTION_ID, PotionRarity.COMMON, PotionSize.H, PotionColor.ELIXIR); //TODO: Potion visual stuff + super(NAME, POTION_ID, PotionRarity.COMMON, PotionSize.H, PotionColor.ELIXIR); this.isThrown = true; this.targetRequired = true; this.labOutlineColor= CollectorMod.potionLabColor; @@ -48,6 +51,7 @@ public void initializeData() { } public void use(AbstractCreature target) { + atb(new VFXAction(new CollectorCurseEffect(target.hb.cX, target.hb.cY), .2F)); applyToEnemy((AbstractMonster) target, new WeakPower(target, potency, false)); applyToEnemy((AbstractMonster) target, new VulnerablePower(target, potency, false)); applyToEnemy((AbstractMonster) target, new DoomPower((AbstractMonster) target, potency * 6)); diff --git a/src/main/java/collector/potions/ReservePotion.java b/src/main/java/collector/potions/ReservePotion.java index 149cbc8a2..e442084ed 100644 --- a/src/main/java/collector/potions/ReservePotion.java +++ b/src/main/java/collector/potions/ReservePotion.java @@ -5,12 +5,18 @@ import basemod.abstracts.CustomPotion; import collector.CollectorMod; import collector.actions.GainReservesAction; +import collector.effects.ColoredSanctityEffect; +import com.badlogic.gdx.graphics.Color; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.actions.utility.SFXAction; import com.megacrit.cardcrawl.core.AbstractCreature; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.helpers.PowerTip; import com.megacrit.cardcrawl.helpers.TipHelper; import com.megacrit.cardcrawl.localization.PotionStrings; +import com.megacrit.cardcrawl.vfx.BorderFlashEffect; +import com.megacrit.cardcrawl.vfx.combat.SanctityEffect; import static collector.CollectorMod.makeID; import static collector.util.Wiz.atb; @@ -23,7 +29,7 @@ public class ReservePotion extends CustomPotion { public static final String[] DESCRIPTIONS = potionStrings.DESCRIPTIONS; public ReservePotion() { - super(NAME, POTION_ID, PotionRarity.UNCOMMON, PotionSize.H, PotionColor.ELIXIR); //TODO: Potion visual stuff + super(NAME, POTION_ID, PotionRarity.UNCOMMON, PotionSize.H, PotionColor.ELIXIR); this.isThrown = false; this.targetRequired = false; this.labOutlineColor= CollectorMod.potionLabColor; @@ -42,6 +48,9 @@ public void initializeData() { } public void use(AbstractCreature target) { + atb(new VFXAction(new ColoredSanctityEffect(AbstractDungeon.player.hb.cX, AbstractDungeon.player.hb.cY, Color.CHARTREUSE.cpy()))); + this.addToTop(new SFXAction("HEAL_1")); + this.addToTop(new VFXAction(new BorderFlashEffect(Color.CHARTREUSE, true), 0.1F)); atb(new GainReservesAction(potency)); } diff --git a/src/main/java/collector/potions/TempHPPotion.java b/src/main/java/collector/potions/TempHPPotion.java index 538989366..8038526be 100644 --- a/src/main/java/collector/potions/TempHPPotion.java +++ b/src/main/java/collector/potions/TempHPPotion.java @@ -3,13 +3,19 @@ import basemod.BaseMod; import basemod.abstracts.CustomPotion; +import collector.effects.ColoredSanctityEffect; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.math.MathUtils; import com.evacipated.cardcrawl.mod.stslib.actions.tempHp.AddTemporaryHPAction; +import com.megacrit.cardcrawl.actions.animations.VFXAction; import com.megacrit.cardcrawl.core.AbstractCreature; import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.helpers.PowerTip; import com.megacrit.cardcrawl.helpers.TipHelper; import com.megacrit.cardcrawl.localization.PotionStrings; +import com.megacrit.cardcrawl.vfx.combat.HealVerticalLineEffect; import static collector.CollectorMod.makeID; import static collector.util.Wiz.atb; @@ -22,7 +28,7 @@ public class TempHPPotion extends CustomPotion { public static final String[] DESCRIPTIONS = potionStrings.DESCRIPTIONS; public TempHPPotion() { - super(NAME, POTION_ID, PotionRarity.COMMON, PotionSize.H, PotionColor.ELIXIR); //TODO: Potion visual stuff + super(NAME, POTION_ID, PotionRarity.COMMON, PotionSize.H, PotionColor.ELIXIR); this.isThrown = false; this.targetRequired = false; } @@ -40,6 +46,16 @@ public void initializeData() { } public void use(AbstractCreature target) { + atb(new VFXAction(new ColoredSanctityEffect(AbstractDungeon.player.hb.cX, AbstractDungeon.player.hb.cY, Color.CHARTREUSE.cpy()))); + int roll = MathUtils.random(0, 2); + if (roll == 0) { + CardCrawlGame.sound.play("HEAL_1"); + } else if (roll == 1) { + CardCrawlGame.sound.play("HEAL_2"); + } else { + CardCrawlGame.sound.play("HEAL_3"); + } + atb(new AddTemporaryHPAction(AbstractDungeon.player, AbstractDungeon.player, potency)); } diff --git a/src/main/java/collector/powers/DoomPower.java b/src/main/java/collector/powers/DoomPower.java index c00242a6b..6d63a70f8 100644 --- a/src/main/java/collector/powers/DoomPower.java +++ b/src/main/java/collector/powers/DoomPower.java @@ -1,5 +1,6 @@ package collector.powers; +import collector.relics.JadeRing; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.math.MathUtils; import com.evacipated.cardcrawl.mod.stslib.powers.interfaces.HealthBarRenderPower; @@ -11,6 +12,7 @@ import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.rooms.AbstractRoom; +import theHexaghost.relics.CandleOfCauterizing; import static collector.util.Wiz.atb; import static collector.util.Wiz.isAfflicted; @@ -30,7 +32,19 @@ public DoomPower(AbstractMonster target, int amount) { @Override public int getHealthBarAmount() { - return amount; + + int healthbar = 0; + + if(AbstractDungeon.player.hasRelic(JadeRing.ID)){ + healthbar = amount+6; + } + + if(!(AbstractDungeon.player.hasRelic(JadeRing.ID))){ + healthbar = amount; + } + + return healthbar; + } public void atStartOfTurn() { @@ -41,23 +55,56 @@ public void atStartOfTurn() { public void explode() { this.flashWithoutSound(); - if (isAfflicted((AbstractMonster) this.owner)) { + System.out.println("DEBUG: Checking Affliction."); + if (isAfflicted((AbstractMonster) this.owner)) { System.out.println("DEBUG: Affliction confirmed."); } else { if (this.owner.hasPower(DemisePower.POWER_ID)) { + System.out.println("DEBUG: There is no Affliction. Reducing DemisePower by 1."); atb(new ReducePowerAction(this.owner, this.owner, DemisePower.POWER_ID, 1)); } else { + System.out.println("DEBUG: There is no Affliction. Removing DoomPower"); this.addToBot(new RemoveSpecificPowerAction(this.owner, this.owner, this)); } } - if (amount >= owner.currentHealth) { - CardCrawlGame.sound.playA("BELL", MathUtils.random(-0.2F, -0.3F)); + + if (AbstractDungeon.player.hasRelic(JadeRing.ID)) { + if (amount+6 >= owner.currentHealth) { + System.out.println("DEBUG: Kill SFX with Jade Ring."); + CardCrawlGame.sound.playA("BELL", MathUtils.random(-0.2F, -0.3F)); + } + } + + if (!(AbstractDungeon.player.hasRelic(JadeRing.ID))) { + if (amount >= owner.currentHealth) { + System.out.println("DEBUG: Kill SFX without Jade Ring."); + CardCrawlGame.sound.playA("BELL", MathUtils.random(-0.2F, -0.3F)); + } + } + + if (AbstractDungeon.player.hasRelic(JadeRing.ID)) { + System.out.println("DEBUG: Dealing damage with Jade Ring."); + this.addToBot(new LoseHPAction(owner, owner, amount+6, AbstractGameAction.AttackEffect.NONE)); + } + + if (!AbstractDungeon.player.hasRelic(JadeRing.ID)) { + System.out.println("DEBUG: Dealing damage without Jade Ring."); + this.addToBot(new LoseHPAction(owner, owner, amount, AbstractGameAction.AttackEffect.NONE)); } - this.addToBot(new LoseHPAction(owner, owner, amount, AbstractGameAction.AttackEffect.NONE)); + } @Override public void updateDescription() { - description = DESCRIPTIONS[0] + amount + DESCRIPTIONS[1]; + + if (!(AbstractDungeon.player.hasRelic(JadeRing.ID))){ + description = DESCRIPTIONS[0] + amount + DESCRIPTIONS[1]; + } + + if(AbstractDungeon.player.hasRelic(JadeRing.ID)){ + int display = (this.amount+6); + description = DESCRIPTIONS[0] + display + DESCRIPTIONS[1]; + } + } @Override diff --git a/src/main/java/collector/powers/KarmaPower.java b/src/main/java/collector/powers/KarmaPower.java index 2e3439da9..981277f0f 100644 --- a/src/main/java/collector/powers/KarmaPower.java +++ b/src/main/java/collector/powers/KarmaPower.java @@ -3,6 +3,8 @@ import collector.util.Wiz; import com.megacrit.cardcrawl.actions.common.GainBlockAction; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import gremlin.GremlinMod; import static collector.util.Wiz.isAfflicted; @@ -24,8 +26,17 @@ public void atEndOfTurnPreEndTurnCards(boolean isPlayer) { } return false; })) { + flash(); - addToBot(new GainBlockAction(owner, amount)); + for (final AbstractMonster mo : AbstractDungeon.getCurrRoom().monsters.monsters) { + if (!mo.isDeadOrEscaped()) { + if (isAfflicted(mo)) { + addToBot(new GainBlockAction(owner, amount)); + } + } + } + + //addToBot(new GainBlockAction(owner, amount)); } } diff --git a/src/main/java/collector/powers/NextTurnVigorPower.java b/src/main/java/collector/powers/NextTurnVigorPower.java index 414cda0da..a84e788b8 100644 --- a/src/main/java/collector/powers/NextTurnVigorPower.java +++ b/src/main/java/collector/powers/NextTurnVigorPower.java @@ -4,6 +4,8 @@ import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.powers.watcher.VigorPower; +import static champ.ChampMod.vigor; + public class NextTurnVigorPower extends AbstractCollectorPower { public static final String NAME = "NextTurnVigor"; public static final String POWER_ID = makeID(NAME); @@ -17,7 +19,8 @@ public NextTurnVigorPower(int amount) { public void atStartOfTurn() { this.flash(); - applyToSelf(new VigorPower(owner, amount)); + //applyToSelf(new VigorPower(owner, amount)); + vigor(amount); this.addToBot(new RemoveSpecificPowerAction(this.owner, this.owner, this)); } @Override diff --git a/src/main/java/collector/powers/TorchHeadPower.java b/src/main/java/collector/powers/TorchHeadPower.java index 22a9f2997..9c6f2ffe1 100644 --- a/src/main/java/collector/powers/TorchHeadPower.java +++ b/src/main/java/collector/powers/TorchHeadPower.java @@ -101,31 +101,31 @@ public void updateDescription() { StringBuilder sb = new StringBuilder(); sb.append(DESCRIPTIONS[0]); if (onAttackRandomDoom > 0) { - sb.append(DESCRIPTIONS[1]).append(onAttackRandomDoom).append(DESCRIPTIONS[2]); - if (onAttackAOE > 0 || onAttackBlock > 0 || onAttackPoison > 0 || onAttackDraw > 0) { + sb.append(DESCRIPTIONS[1] + onAttackRandomDoom + DESCRIPTIONS[2]); + if (onAttackAOE > 0 || onAttackBlock > 0 || onAttackPoison > 0) { sb.append(" NL "); } } if (onAttackPoison > 0) { - sb.append(DESCRIPTIONS[1]).append(onAttackPoison).append(DESCRIPTIONS[7]); - if (onAttackAOE > 0 || onAttackBlock > 0 || onAttackDraw > 0) { + sb.append(DESCRIPTIONS[1] + onAttackPoison + DESCRIPTIONS[7]); + if (onAttackAOE > 0 || onAttackBlock > 0) { sb.append(" NL "); } } if (onAttackAOE > 0) { - sb.append(DESCRIPTIONS[3]).append(onAttackAOE).append(DESCRIPTIONS[4]); - if (onAttackBlock > 0 || onAttackDraw > 0) { + sb.append(DESCRIPTIONS[3] + onAttackAOE + DESCRIPTIONS[4]); + if (onAttackBlock > 0) { sb.append(" NL "); } } if (onAttackBlock > 0) { - sb.append(DESCRIPTIONS[5]).append(onAttackBlock).append(DESCRIPTIONS[6]); + sb.append(DESCRIPTIONS[5] + onAttackBlock + DESCRIPTIONS[6]); if (onAttackDraw > 0) { sb.append(" NL "); } } if (onAttackDraw > 0) { - sb.append(DESCRIPTIONS[8]).append(onAttackDraw).append(onAttackDraw == 1 ? DESCRIPTIONS[9] : DESCRIPTIONS[10]); + sb.append(DESCRIPTIONS[7] + onAttackDraw + (onAttackDraw == 1 ? DESCRIPTIONS[8] : DESCRIPTIONS[9])); } description = sb.toString(); } diff --git a/src/main/java/collector/powers/collectioncards/GremlinNobCardPower.java b/src/main/java/collector/powers/collectioncards/GremlinNobCardPower.java index 8537eea28..e1972d0e0 100644 --- a/src/main/java/collector/powers/collectioncards/GremlinNobCardPower.java +++ b/src/main/java/collector/powers/collectioncards/GremlinNobCardPower.java @@ -7,6 +7,8 @@ import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.powers.watcher.VigorPower; +import static champ.ChampMod.vigor; + public class GremlinNobCardPower extends AbstractCollectorPower { public static final String NAME = "GremlinNobCard"; public static final String POWER_ID = makeID(NAME); @@ -22,7 +24,7 @@ public GremlinNobCardPower(int amount) { @Override public void onUseCard(AbstractCard card, UseCardAction action) { if (card.type == AbstractCard.CardType.SKILL) { - this.addToTop(new ApplyPowerAction(this.owner, this.owner, new VigorPower(this.owner, this.amount), this.amount)); + vigor(this.amount); this.flash(); } } diff --git a/src/main/java/collector/relics/AutoCurser.java b/src/main/java/collector/relics/AutoCurser.java index 806bc5315..7310aadfb 100644 --- a/src/main/java/collector/relics/AutoCurser.java +++ b/src/main/java/collector/relics/AutoCurser.java @@ -16,7 +16,9 @@ public class AutoCurser extends CustomRelic { public static final String ID = CollectorMod.makeID(AutoCurser.class.getSimpleName()); private static final String IMG_PATH = AutoCurser.class.getSimpleName() + ".png"; private static final String OUTLINE_IMG_PATH = AutoCurser.class.getSimpleName() + ".png"; - //talisman + + //hexx talisman + public AutoCurser() { super(ID, TextureLoader.getTexture(CollectorMod.makeRelicPath(IMG_PATH)), TextureLoader.getTexture(CollectorMod.makeRelicOutlinePath(OUTLINE_IMG_PATH)), RelicTier.COMMON, LandingSound.MAGICAL); } diff --git a/src/main/java/collector/relics/BagOfTricks.java b/src/main/java/collector/relics/BagOfTricks.java index 32cb31ed3..ee4905c97 100644 --- a/src/main/java/collector/relics/BagOfTricks.java +++ b/src/main/java/collector/relics/BagOfTricks.java @@ -1,12 +1,16 @@ package collector.relics; import basemod.abstracts.CustomRelic; +import collector.CollectorCollection; import collector.CollectorMod; import collector.actions.DrawCardFromCollectionAction; import com.badlogic.gdx.graphics.Texture; +import com.megacrit.cardcrawl.actions.common.DrawCardAction; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import downfall.util.TextureLoader; import static collector.util.Wiz.atb; +import static collector.util.Wiz.att; public class BagOfTricks extends CustomRelic { public static final String ID = CollectorMod.makeID(BagOfTricks.class.getSimpleName()); diff --git a/src/main/java/collector/relics/BottledCollectible.java b/src/main/java/collector/relics/BottledCollectible.java index 292b1d49f..05f14a9a3 100644 --- a/src/main/java/collector/relics/BottledCollectible.java +++ b/src/main/java/collector/relics/BottledCollectible.java @@ -1,5 +1,6 @@ package collector.relics; +import automaton.AutomatonMod; import basemod.abstracts.CustomBottleRelic; import basemod.abstracts.CustomRelic; import basemod.abstracts.CustomSavable; @@ -7,12 +8,15 @@ import collector.CollectorMod; import collector.actions.DrawCardFromCollectionAction; import collector.patches.CollectorBottleField; +import com.megacrit.cardcrawl.actions.common.DrawCardAction; +import com.megacrit.cardcrawl.actions.common.RelicAboveCreatureAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.cards.CardGroup; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.helpers.FontHelper; import com.megacrit.cardcrawl.helpers.PowerTip; import com.megacrit.cardcrawl.rooms.AbstractRoom; +import com.megacrit.cardcrawl.vfx.cardManip.ShowCardBrieflyEffect; import downfall.util.TextureLoader; import java.util.function.Predicate; @@ -24,15 +28,27 @@ public class BottledCollectible extends CustomRelic implements CustomBottleRelic private static final String IMG_PATH = BottledCollectible.class.getSimpleName() + ".png"; private static final String OUTLINE_IMG_PATH = BottledCollectible.class.getSimpleName() + ".png"; - private static AbstractCard card; + public AbstractCard card; private boolean cardSelected = true; + private boolean cardRemoved = false; + private int idxToLoad = -1; public BottledCollectible() { super(ID, TextureLoader.getTexture(CollectorMod.makeRelicPath(IMG_PATH)), TextureLoader.getTexture(CollectorMod.makeRelicOutlinePath(OUTLINE_IMG_PATH)), RelicTier.RARE, LandingSound.MAGICAL); } + public void atBattleStart() { + this.counter = 0; + } + + @Override + public void onTrigger() { + this.flash(); + this.counter = -1; + } + @Override public Predicate isOnCard() { return CollectorBottleField.inCollectionBottle::get; @@ -110,15 +126,40 @@ public void update() { } AbstractDungeon.getCurrRoom().phase = AbstractRoom.RoomPhase.COMPLETE; AbstractDungeon.gridSelectScreen.selectedCards.clear(); + + AbstractDungeon.topLevelEffects.add(new ShowCardBrieflyEffect(card.makeStatEquivalentCopy())); + setDescriptionAfterLoading(); } } public void setDescriptionAfterLoading() { - this.description = DESCRIPTIONS[1] + FontHelper.colorString(card.name, "y") + DESCRIPTIONS[2]; - this.tips.clear(); - this.tips.add(new PowerTip(this.name, this.description)); - this.initializeTips(); + //todo: better card removal detection code!!!! + if (cardSelected) { + boolean cardExists = false; + + CardGroup tmp = CollectorCollection.collection; + for (AbstractCard c : tmp.group) { + if (c.uuid == card.uuid) { + cardExists = true; + break; + } + } + + + if (!cardExists) { + tips.clear(); + this.description = this.DESCRIPTIONS[4]; + initializeTips(); + this.grayscale = true; + } else { + this.description = DESCRIPTIONS[1] + FontHelper.colorString(card.name, "y") + DESCRIPTIONS[2]; + this.tips.clear(); + this.tips.add(new PowerTip(this.name, this.description)); + this.initializeTips(); + } + + } } @Override diff --git a/src/main/java/collector/relics/ForbiddenFruit.java b/src/main/java/collector/relics/ForbiddenFruit.java index 26d5a25a8..a7a64a5e3 100644 --- a/src/main/java/collector/relics/ForbiddenFruit.java +++ b/src/main/java/collector/relics/ForbiddenFruit.java @@ -1,6 +1,7 @@ package collector.relics; import basemod.abstracts.CustomRelic; +import basemod.helpers.CardPowerTip; import collector.CollectorMod; import com.megacrit.cardcrawl.cards.curses.Necronomicurse; import downfall.cards.curses.Sapped; @@ -12,9 +13,14 @@ import com.megacrit.cardcrawl.rooms.AbstractRoom; import com.megacrit.cardcrawl.vfx.cardManip.ShowCardAndObtainEffect; import downfall.util.TextureLoader; +import expansioncontent.cards.AwakenDeath; +import slimebound.characters.SlimeboundCharacter; +import sneckomod.TheSnecko; import java.util.stream.Collectors; +import static downfall.patches.EvilModeCharacterSelect.evilMode; + public class ForbiddenFruit extends CustomRelic { public static final String ID = CollectorMod.makeID(ForbiddenFruit.class.getSimpleName()); private static final String IMG_PATH = ForbiddenFruit.class.getSimpleName() + ".png"; @@ -24,7 +30,8 @@ public class ForbiddenFruit extends CustomRelic { private boolean selected = true; public ForbiddenFruit() { - super(ID, TextureLoader.getTexture(CollectorMod.makeRelicPath(IMG_PATH)), TextureLoader.getTexture(CollectorMod.makeRelicOutlinePath(OUTLINE_IMG_PATH)), RelicTier.BOSS, LandingSound.MAGICAL); + super(ID, TextureLoader.getTexture(CollectorMod.makeRelicPath(IMG_PATH)), TextureLoader.getTexture(CollectorMod.makeRelicOutlinePath(OUTLINE_IMG_PATH)), RelicTier.DEPRECATED, LandingSound.MAGICAL); + tips.add(new CardPowerTip( new Sapped() ) ); } public void onEquip() { @@ -58,7 +65,7 @@ public void update() { AbstractDungeon.gridSelectScreen.selectedCards.clear(); if (stage == 2) { - AbstractDungeon.effectList.add(new ShowCardAndObtainEffect(new Necronomicurse(), (float) Settings.WIDTH / 2.0F, (float)Settings.HEIGHT / 2.0F)); + AbstractDungeon.effectList.add(new ShowCardAndObtainEffect(new Sapped(), (float) Settings.WIDTH / 2.0F, (float)Settings.HEIGHT / 2.0F)); AbstractDungeon.getCurrRoom().phase = AbstractRoom.RoomPhase.COMPLETE; } else if (stage == 0) { @@ -88,6 +95,14 @@ else if (stage == 1) { } } + public boolean canSpawn() { + if (AbstractDungeon.player instanceof TheSnecko) { + return false; + } + + return ((AbstractDungeon.floorNum > 1)); // you cannot boss swap into forbidden fruit + } + @Override public String getUpdatedDescription() { return DESCRIPTIONS[0]; diff --git a/src/main/java/collector/relics/FuelCanister.java b/src/main/java/collector/relics/FuelCanister.java index 1cba35b40..c593c9f16 100644 --- a/src/main/java/collector/relics/FuelCanister.java +++ b/src/main/java/collector/relics/FuelCanister.java @@ -5,7 +5,10 @@ import com.badlogic.gdx.graphics.Texture; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.relics.RunicPyramid; import downfall.util.TextureLoader; +import expansioncontent.cardmods.RetainCardMod; +import hermit.relics.Memento; import hermit.util.Wiz; import java.util.ArrayList; @@ -21,23 +24,30 @@ public FuelCanister() { @Override public void onPlayerEndTurn() { - int max = -3; + int max = 999; + //retains minimum now ArrayList toRetain = new ArrayList<>(); for (AbstractCard q : AbstractDungeon.player.hand.group) { - if (q.costForTurn > max) { + //can retain unplayable cards but not x cost cards, cannot retain ethereal cards or cards that already retain themselves + if ((q.costForTurn < max) && !(q.costForTurn <= -1) && !(q.isEthereal) && !(q.selfRetain)) { + //if ((q.costForTurn < max) && !(q.costForTurn < -1) && !(q.selfRetain)) { toRetain.clear(); toRetain.add(q); max = q.costForTurn; - } else if (q.costForTurn == max) { + } else if ((q.costForTurn == max) && !(q.costForTurn < -1) && !(q.isEthereal) && !(q.selfRetain)) { toRetain.add(q); } } - toRetain.removeIf(c -> c.isEthereal); + //toRetain.removeIf(c -> c.isEthereal); if (!toRetain.isEmpty()) { Wiz.getRandomItem(toRetain).retain = true; } } + public boolean canSpawn() { + return !AbstractDungeon.player.hasRelic(RunicPyramid.ID); + } + @Override public String getUpdatedDescription() { return DESCRIPTIONS[0]; diff --git a/src/main/java/collector/relics/HolidayCoal.java b/src/main/java/collector/relics/HolidayCoal.java index 03b2dfbe5..108b7c880 100644 --- a/src/main/java/collector/relics/HolidayCoal.java +++ b/src/main/java/collector/relics/HolidayCoal.java @@ -12,7 +12,7 @@ public class HolidayCoal extends CustomRelic { private static final String OUTLINE_IMG_PATH = HolidayCoal.class.getSimpleName() + ".png"; public HolidayCoal() { - super(ID, TextureLoader.getTexture(CollectorMod.makeRelicPath(IMG_PATH)), TextureLoader.getTexture(CollectorMod.makeRelicOutlinePath(OUTLINE_IMG_PATH)), RelicTier.COMMON, LandingSound.MAGICAL); + super(ID, TextureLoader.getTexture(CollectorMod.makeRelicPath(IMG_PATH)), TextureLoader.getTexture(CollectorMod.makeRelicOutlinePath(OUTLINE_IMG_PATH)), RelicTier.SHOP, LandingSound.MAGICAL); tips.add(new CardPowerTip(new LuckyWick())); } diff --git a/src/main/java/collector/relics/JadeRing.java b/src/main/java/collector/relics/JadeRing.java index d0a914919..ef9e2ddd0 100644 --- a/src/main/java/collector/relics/JadeRing.java +++ b/src/main/java/collector/relics/JadeRing.java @@ -13,24 +13,23 @@ public class JadeRing extends CustomRelic { private static final String IMG_PATH = JadeRing.class.getSimpleName() + ".png"; private static final String OUTLINE_IMG_PATH = JadeRing.class.getSimpleName() + ".png"; - private static final int EXTRA_SOULS = 5; + private static final int EXTRA_SOULS = 6; public JadeRing() { super(ID, TextureLoader.getTexture(CollectorMod.makeRelicPath(IMG_PATH)), TextureLoader.getTexture(CollectorMod.makeRelicOutlinePath(OUTLINE_IMG_PATH)), RelicTier.UNCOMMON, LandingSound.MAGICAL); } - @Override - public void onMonsterDeath(AbstractMonster m) { - if (m.hasPower(DoomPower.POWER_ID) && !m.hasPower(MinionPower.POWER_ID) && !m.halfDead) { - flash(); - AbstractDungeon.player.gainGold(EXTRA_SOULS); - } - } - - @Override - public boolean canSpawn() { - return !(AbstractDungeon.getCurrRoom() instanceof com.megacrit.cardcrawl.rooms.ShopRoom); - } + //logic moved to DoomPower.java + //but basically the way it works is that DoomPower has +6 added to it when dealing damage and + //rendering health bars, and returning the amount of damage in the description + + // @Override + // public void onMonsterDeath(AbstractMonster m) { + // if (m.hasPower(DoomPower.POWER_ID) && !m.hasPower(MinionPower.POWER_ID) && !m.halfDead) { + // flash(); + // AbstractDungeon.player.gainGold(EXTRA_SOULS); + // } +// } @Override public String getUpdatedDescription() { diff --git a/src/main/java/collector/relics/PrismaticTorch.java b/src/main/java/collector/relics/PrismaticTorch.java index 2dce28b10..5fa57bf32 100644 --- a/src/main/java/collector/relics/PrismaticTorch.java +++ b/src/main/java/collector/relics/PrismaticTorch.java @@ -86,4 +86,4 @@ public String getUpdatedDescription() { return DESCRIPTIONS[0] + sb + DESCRIPTIONS[1]; } -} +} \ No newline at end of file diff --git a/src/main/java/collector/relics/RoughDiamond.java b/src/main/java/collector/relics/RoughDiamond.java index c06a9ac50..6123107f2 100644 --- a/src/main/java/collector/relics/RoughDiamond.java +++ b/src/main/java/collector/relics/RoughDiamond.java @@ -2,28 +2,64 @@ import basemod.abstracts.CustomRelic; import collector.CollectorMod; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; import com.megacrit.cardcrawl.actions.common.GainEnergyAction; +import com.megacrit.cardcrawl.actions.utility.UseCardAction; import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.EnergizedPower; +import com.megacrit.cardcrawl.relics.Orrery; +import downfall.util.RareCardReward; import downfall.util.TextureLoader; +import downfall.util.ThirdSealReward; +import org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter; +import sneckomod.util.ColorfulRareReward; public class RoughDiamond extends CustomRelic { public static final String ID = CollectorMod.makeID(RoughDiamond.class.getSimpleName()); private static final String IMG_PATH = RoughDiamond.class.getSimpleName() + ".png"; private static final String OUTLINE_IMG_PATH = RoughDiamond.class.getSimpleName() + ".png"; + private boolean triggeredThisTurn = false; + public RoughDiamond() { - super(ID, TextureLoader.getTexture(CollectorMod.makeRelicPath(IMG_PATH)), TextureLoader.getTexture(CollectorMod.makeRelicOutlinePath(OUTLINE_IMG_PATH)), RelicTier.RARE, LandingSound.MAGICAL); + super(ID, TextureLoader.getTexture(CollectorMod.makeRelicPath(IMG_PATH)), TextureLoader.getTexture(CollectorMod.makeRelicOutlinePath(OUTLINE_IMG_PATH)), RelicTier.DEPRECATED, LandingSound.MAGICAL); + } + + public void onEquip() { + AbstractDungeon.getCurrRoom().rewards.add(new RareCardReward(AbstractDungeon.player.getCardColor())); + AbstractDungeon.combatRewardScreen.open(this.DESCRIPTIONS[1]); + AbstractDungeon.getCurrRoom().rewardPopOutTimer = 0.0F; + AbstractDungeon.combatRewardScreen.rewards.remove(AbstractDungeon.combatRewardScreen.rewards.size()-1); } + @Override - public void onPlayCard(AbstractCard c, AbstractMonster m) { - if (c.rarity == AbstractCard.CardRarity.RARE && c.costForTurn >= 2) { - flash(); - addToBot(new GainEnergyAction(1)); + public void onVictory() { + stopPulse(); + } + + public void atTurnStart() { + this.triggeredThisTurn = false; + beginLongPulse(); + } + + public void onUseCard(AbstractCard card, UseCardAction action) { + if (card.rarity == AbstractCard.CardRarity.RARE) { + if (!this.triggeredThisTurn) { + this.triggeredThisTurn = true; + stopPulse(); + flash(); + this.addToBot(new GainEnergyAction(1)); + } } } + public boolean canSpawn() { + return ((AbstractDungeon.floorNum > 1)); // you cannot boss swap into this relic + } + @Override public String getUpdatedDescription() { return DESCRIPTIONS[0]; diff --git a/src/main/java/collector/relics/TheContract.java b/src/main/java/collector/relics/TheContract.java index 5b33088e9..aaef855c3 100644 --- a/src/main/java/collector/relics/TheContract.java +++ b/src/main/java/collector/relics/TheContract.java @@ -17,18 +17,21 @@ public class TheContract extends CustomRelic { private static final String IMG_PATH = TheContract.class.getSimpleName() + ".png"; private static final String OUTLINE_IMG_PATH = TheContract.class.getSimpleName() + ".png"; + //Essence granted + private static final int ESSENCE = 10; + public TheContract() { super(ID, TextureLoader.getTexture(CollectorMod.makeRelicPath(IMG_PATH)), TextureLoader.getTexture(CollectorMod.makeRelicOutlinePath(OUTLINE_IMG_PATH)), RelicTier.SHOP, LandingSound.MAGICAL); } @Override public void onEquip() { - EssenceSystem.changeEssence(10); + EssenceSystem.changeEssence(ESSENCE); } @Override public String getUpdatedDescription() { - return DESCRIPTIONS[0]; + return DESCRIPTIONS[0] + ESSENCE + DESCRIPTIONS[1]; } } diff --git a/src/main/java/collector/util/Wiz.java b/src/main/java/collector/util/Wiz.java index c0ecba74c..39deeb58f 100644 --- a/src/main/java/collector/util/Wiz.java +++ b/src/main/java/collector/util/Wiz.java @@ -5,10 +5,14 @@ import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.animations.VFXAction; import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.DamageAction; +import com.megacrit.cardcrawl.actions.common.DiscardAction; import com.megacrit.cardcrawl.actions.common.MakeTempCardInDrawPileAction; import com.megacrit.cardcrawl.actions.common.MakeTempCardInHandAction; import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.DamageInfo; import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.AbstractCreature; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; @@ -22,6 +26,8 @@ import com.megacrit.cardcrawl.vfx.AbstractGameEffect; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; import java.util.function.Consumer; import java.util.function.Predicate; @@ -101,12 +107,40 @@ public static boolean isInCombat() { return CardCrawlGame.isInARun() && AbstractDungeon.currMapNode != null && AbstractDungeon.getCurrRoom() != null && AbstractDungeon.getCurrRoom().phase == AbstractRoom.RoomPhase.COMBAT; } - public static void atb(AbstractGameAction action) { - AbstractDungeon.actionManager.addToBottom(action); + public static void atb(AbstractGameAction... actions) { + for (AbstractGameAction action : actions) + AbstractDungeon.actionManager.addToBottom(action); } - public static void att(AbstractGameAction action) { - AbstractDungeon.actionManager.addToTop(action); + public static void att(AbstractGameAction... actions) { + for (int i = actions.length - 1; i >= 0; i--) + AbstractDungeon.actionManager.addToTop(actions[i]); + } + + public static AbstractGameAction actionify(Runnable todo) { + return new AbstractGameAction() { + public void update() { + isDone = true; + todo.run(); + } + }; + } + + public static void actB(Runnable todo) { + atb(actionify(todo)); + } + + public static void actT(Runnable todo) { + att(actionify(todo)); + } + + public static AbstractGameAction multiAction(AbstractGameAction... actions) { + return actionify(() -> { + ArrayList actionsList = (ArrayList)Arrays.asList(actions); + Collections.reverse(actionsList); + for (AbstractGameAction action : actions) + att(action); + }); } public static void vfx(AbstractGameEffect gameEffect) { @@ -117,6 +151,14 @@ public static void vfx(AbstractGameEffect gameEffect, float duration) { atb(new VFXAction(gameEffect, duration)); } + public static void vfxTop(AbstractGameEffect gameEffect) { + att(new VFXAction(gameEffect)); + } + + public static void vfxTop(AbstractGameEffect gameEffect, float duration) { + att(new VFXAction(gameEffect, duration)); + } + public static void makeInHand(AbstractCard c, int i) { atb(new MakeTempCardInHandAction(c, i)); } diff --git a/src/main/java/downfall/actions/MessageCaller.java b/src/main/java/downfall/actions/MessageCaller.java index 4728b0c83..75e8707b1 100644 --- a/src/main/java/downfall/actions/MessageCaller.java +++ b/src/main/java/downfall/actions/MessageCaller.java @@ -4,10 +4,8 @@ import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import downfall.downfallMod; -import downfall.tutorials.CharbossTutorials; -import downfall.tutorials.CollectorTutorials; -import downfall.tutorials.GuardianTutorials; -import downfall.tutorials.HexaghostTutorials; +import downfall.mainmenu.TalesAndTacticsPopup; +import downfall.tutorials.*; import hermit.util.HermitTutorials; import java.io.IOException; @@ -30,6 +28,7 @@ public void update() { if (downfallMod.unseenTutorials[code]) { switch (code) { + //case 5 is the t&t advert and handled elsewhere case 0: AbstractDungeon.ftue = new HermitTutorials(); break; @@ -45,6 +44,24 @@ public void update() { case 4: AbstractDungeon.ftue = new CollectorTutorials(); break; + case 6: + AbstractDungeon.ftue = new SlimeBossTutorials(); + break; + case 7: + AbstractDungeon.ftue = new ChampTutorials(); + break; + case 8: + AbstractDungeon.ftue = new AutomatonTutorials(); + break; + case 9: + AbstractDungeon.ftue = new GremlinsTutorials(); + break; + case 10: + AbstractDungeon.ftue = new SneckoTutorials(); + break; + case 11: + AbstractDungeon.ftue = new AwakenedOneTutorials(); + break; } downfallMod.unseenTutorials[code] = false; diff --git a/src/main/java/downfall/cards/BloodySacrifice.java b/src/main/java/downfall/cards/BloodySacrifice.java index 60f1b772c..db5e59aee 100644 --- a/src/main/java/downfall/cards/BloodySacrifice.java +++ b/src/main/java/downfall/cards/BloodySacrifice.java @@ -27,20 +27,23 @@ public class BloodySacrifice extends AbstractDownfallCard { public BloodySacrifice() { super(ID, cardStrings.NAME, IMG_PATH, 0, cardStrings.DESCRIPTION, CardType.SKILL, CardColor.COLORLESS, CardRarity.SPECIAL, CardTarget.SELF); isEthereal = true; - baseMagicNumber = magicNumber = 12; + baseMagicNumber = magicNumber = 8; exhaust = true; } @Override public void applyPowers() { super.applyPowers(); - lose_hp = MathUtils.ceil((float) AbstractDungeon.player.maxHealth * (float)magicNumber * 0.01f); + lose_hp = MathUtils.floor((float) AbstractDungeon.player.maxHealth * (float)magicNumber * 0.01f); rawDescription = (cardStrings.DESCRIPTION + cardStrings.EXTENDED_DESCRIPTION[0].replace("{amount}",Integer.toString(lose_hp)) ); this.initializeDescription(); } public void use(AbstractPlayer p, AbstractMonster m) { - atb(new LoseHPAction(p, p, lose_hp)); + AbstractDungeon.player.maxHealth -= this.lose_hp; + if (AbstractDungeon.player.currentHealth > AbstractDungeon.player.maxHealth) { + AbstractDungeon.player.currentHealth = AbstractDungeon.player.maxHealth; + } AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new RitualPower(p, 1, true), 1)); } @@ -48,7 +51,7 @@ public void use(AbstractPlayer p, AbstractMonster m) { public void upgrade() { if (!upgraded) { upgradeName(); - upgradeMagicNumber(-5); + upgradeMagicNumber(-3); } } diff --git a/src/main/java/downfall/cards/MajorBeam.java b/src/main/java/downfall/cards/MajorBeam.java new file mode 100644 index 000000000..3be5c63a6 --- /dev/null +++ b/src/main/java/downfall/cards/MajorBeam.java @@ -0,0 +1,67 @@ +package downfall.cards; + +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.math.MathUtils; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.DamageAction; +import com.megacrit.cardcrawl.actions.common.DrawCardAction; +import com.megacrit.cardcrawl.actions.common.LoseHPAction; +import com.megacrit.cardcrawl.actions.utility.SFXAction; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.CardStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.RitualPower; +import expansioncontent.cards.AbstractDownfallCard; +import expansioncontent.cards.AbstractExpansionCard; +import expansioncontent.expansionContentMod; +import guardian.vfx.SmallLaserEffectColored; + +import java.util.Arrays; + +import static expansioncontent.cards.AbstractExpansionCard.makeID; +import static expansioncontent.expansionContentMod.loadJokeCardImage; + +public class MajorBeam extends AbstractExpansionCard { + + private static final int DAMAGE = 5; + public static final String ID = makeID("MajorBeam"); + public static final String IMG_PATH = expansionContentMod.makeCardPath("MajorBeam.png"); + private static final CardStrings cardStrings; + + public MajorBeam() { + super(ID, 0, CardType.ATTACK, CardRarity.SPECIAL, CardTarget.ENEMY, CardColor.COLORLESS); + baseDamage = DAMAGE; + loadJokeCardImage(this,"MajorBeam.png"); + baseMagicNumber = magicNumber = 1; + //exhaust = true; + } + + public void use(AbstractPlayer p, AbstractMonster m) { + if (m != null) { + AbstractDungeon.actionManager.addToBottom(new SFXAction("ATTACK_MAGIC_BEAM_SHORT", 0.5F)); + AbstractDungeon.actionManager.addToBottom(new VFXAction(new SmallLaserEffectColored(m.hb.cX, m.hb.cY, p.hb.cX, p.hb.cY, Color.WHITE), 0.2F)); + } + this.addToBot(new DamageAction(m, new DamageInfo(p, this.damage, this.damageTypeForTurn), AbstractGameAction.AttackEffect.NONE)); + this.addToBot(new DrawCardAction(p, magicNumber)); + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeDamage(2); + upgradeMagicNumber(1); + rawDescription = cardStrings.UPGRADE_DESCRIPTION; + initializeDescription(); + } + } + + static { + cardStrings = CardCrawlGame.languagePack.getCardStrings(ID); + } +} diff --git a/src/main/java/downfall/cards/curses/Bewildered.java b/src/main/java/downfall/cards/curses/Bewildered.java index c85a1fbf2..682c50d66 100644 --- a/src/main/java/downfall/cards/curses/Bewildered.java +++ b/src/main/java/downfall/cards/curses/Bewildered.java @@ -59,17 +59,6 @@ public void triggerWhenDrawn() { this.flash(); } - @Override - public boolean canUse(AbstractPlayer p, AbstractMonster m) { - return false; - } - - // public void triggerOnOtherCardPlayed(AbstractCard c) { -// AbstractDungeon.actionManager.addToBottom(new MuddleHandAction()); -// this.flash(); -// AbstractDungeon.actionManager.addToBottom(new DiscardSpecificCardAction(this)); -// } - public AbstractCard makeCopy() { return new Bewildered(); } diff --git a/src/main/java/downfall/cards/curses/CurseOfBlood.java b/src/main/java/downfall/cards/curses/CurseOfBlood.java new file mode 100644 index 000000000..f6dae7bed --- /dev/null +++ b/src/main/java/downfall/cards/curses/CurseOfBlood.java @@ -0,0 +1,67 @@ +package downfall.cards.curses; + + +import basemod.abstracts.CustomCard; +import com.badlogic.gdx.graphics.Color; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.LoseHPAction; +import com.megacrit.cardcrawl.actions.common.MakeTempCardInDrawPileAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.CardQueueItem; +import com.megacrit.cardcrawl.cards.status.VoidCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.CardStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.StrengthPower; +import downfall.downfallMod; +import expansioncontent.powers.DeEnergizedPower; +import guardian.GuardianMod; +import hermit.powers.Drained; + + +public class CurseOfBlood extends CustomCard { + public static final String ID = downfallMod.makeID("CurseOfBlood"); + public static final String NAME; + public static final String DESCRIPTION; + public static final String IMG_PATH = downfallMod.assetPath("images/cards/CurseOfBlood.png"); + + private static final CardType TYPE = CardType.CURSE; + private static final CardRarity RARITY = CardRarity.CURSE; + private static final CardTarget TARGET = CardTarget.NONE; + private static final CardStrings cardStrings; + private static final int COST = 0; + public static String UPGRADED_DESCRIPTION; + + static { + cardStrings = CardCrawlGame.languagePack.getCardStrings(ID); + NAME = cardStrings.NAME; + DESCRIPTION = cardStrings.DESCRIPTION; + UPGRADED_DESCRIPTION = cardStrings.UPGRADE_DESCRIPTION; + } + + public CurseOfBlood() { + super(ID, NAME, IMG_PATH, COST, DESCRIPTION, TYPE, CardColor.CURSE, RARITY, TARGET); + + this.exhaust = true; + + tags.add(downfallMod.DOWNFALL_CURSE); + + } + + public void use(AbstractPlayer p, AbstractMonster m) { + this.addToBot(new ApplyPowerAction(p, p, new Drained(p,p, 1), 1)); + } + + public AbstractCard makeCopy() { + return new CurseOfBlood(); + } + + public void upgrade() { + } + +} + + diff --git a/src/main/java/downfall/cards/curses/Haunted.java b/src/main/java/downfall/cards/curses/Haunted.java index b8d07942d..388cb2276 100644 --- a/src/main/java/downfall/cards/curses/Haunted.java +++ b/src/main/java/downfall/cards/curses/Haunted.java @@ -3,9 +3,12 @@ import basemod.abstracts.CustomCard; import basemod.helpers.CardModifierManager; +import collector.cards.OnOtherCardExhaustInHand; import com.badlogic.gdx.graphics.Color; import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.DamageAction; import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.DamageInfo; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; @@ -13,9 +16,10 @@ import com.megacrit.cardcrawl.monsters.AbstractMonster; import downfall.downfallMod; import expansioncontent.cardmods.PropertiesMod; +import sneckomod.cards.TyphoonFang; -public class Haunted extends CustomCard { +public class Haunted extends CustomCard implements OnOtherCardExhaustInHand { public static final String ID = downfallMod.makeID("Haunted"); public static final String NAME; public static final String DESCRIPTION; @@ -39,7 +43,7 @@ public class Haunted extends CustomCard { public Haunted() { super(ID, NAME, IMG_PATH, COST, DESCRIPTION, TYPE, CardColor.CURSE, RARITY, TARGET); - this.magicNumber = this.baseMagicNumber = 1; + this.magicNumber = this.baseMagicNumber = 2; this.isEthereal = true; tags.add(downfallMod.DOWNFALL_CURSE); @@ -52,25 +56,34 @@ public void use(AbstractPlayer p, AbstractMonster m) { @Override public void triggerWhenDrawn() { - super.triggerWhenDrawn(); - AbstractDungeon.actionManager.addToTop(new AbstractGameAction() { - @Override - public void update() { - isDone = true; - for (AbstractCard c : AbstractDungeon.player.hand.group) { - if (!c.isEthereal) { - CardModifierManager.addModifier(c, new PropertiesMod(PropertiesMod.supportedProperties.ETHEREAL, false)); - c.superFlash(Color.PURPLE.cpy()); - } - } - } - }); +// super.triggerWhenDrawn(); +// AbstractDungeon.actionManager.addToTop(new AbstractGameAction() { +// @Override +// public void update() { +// isDone = true; +// for (AbstractCard c : AbstractDungeon.player.hand.group) { +// if (!c.isEthereal) { +// CardModifierManager.addModifier(c, new PropertiesMod(PropertiesMod.supportedProperties.ETHEREAL, false)); +// c.superFlash(Color.PURPLE.cpy()); +// } +// } +// } +// }); } @Override public void atTurnStart() { } + @Override + public void onOtherCardExhaustWhileInHand(AbstractCard card) { + if (card != this) { + flash(Color.PURPLE.cpy()); + this.addToTop(new DamageAction(AbstractDungeon.player, new DamageInfo(AbstractDungeon.player, this.magicNumber, DamageInfo.DamageType.THORNS), AbstractGameAction.AttackEffect.FIRE)); + } + } + + public AbstractCard makeCopy() { return new Haunted(); } diff --git a/src/main/java/downfall/cards/curses/Sapped.java b/src/main/java/downfall/cards/curses/Sapped.java index b95088656..85ff56166 100644 --- a/src/main/java/downfall/cards/curses/Sapped.java +++ b/src/main/java/downfall/cards/curses/Sapped.java @@ -2,8 +2,12 @@ import collector.cards.AbstractCollectorCard; import com.evacipated.cardcrawl.mod.stslib.fields.cards.AbstractCard.SoulboundField; +import com.megacrit.cardcrawl.actions.unique.LoseEnergyAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.localization.CardStrings; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import downfall.downfallMod; import expansioncontent.expansionContentMod; import static collector.CollectorMod.makeID; @@ -11,9 +15,8 @@ public class Sapped extends AbstractCollectorCard { public final static String ID = makeID(Sapped.class.getSimpleName()); // intellij stuff skill, none, special, , , , , 1, 1 - public Sapped() { - super(ID, 1, CardType.CURSE, CardRarity.CURSE, CardTarget.NONE, CardColor.CURSE); + super(ID, 0, CardType.CURSE, CardRarity.SPECIAL, CardTarget.NONE, CardColor.CURSE); baseMagicNumber = magicNumber = 1; isPyre(); exhaust = true; @@ -23,7 +26,16 @@ public Sapped() { public void use(AbstractPlayer p, AbstractMonster m) { } + public void triggerWhenDrawn() { + this.addToBot(new LoseEnergyAction(1)); + } + + @Override + public boolean canUpgrade() { + return false; + } + public void upp() { - upgradeMagicNumber(1); } + } diff --git a/src/main/java/downfall/cards/curses/Scatterbrained.java b/src/main/java/downfall/cards/curses/Scatterbrained.java index e8e448960..d6c12268d 100644 --- a/src/main/java/downfall/cards/curses/Scatterbrained.java +++ b/src/main/java/downfall/cards/curses/Scatterbrained.java @@ -24,10 +24,10 @@ public class Scatterbrained extends CustomCard { public static final String IMG_PATH = downfallMod.assetPath("images/cards/scatterbrained.png"); private static final CardType TYPE = CardType.CURSE; - private static final CardRarity RARITY = CardRarity.CURSE; + private static final CardRarity RARITY = CardRarity.SPECIAL; private static final CardTarget TARGET = CardTarget.NONE; private static final CardStrings cardStrings; - private static final int COST = 2; + private static final int COST = 1; public static String UPGRADED_DESCRIPTION; private boolean auto_used_end_turn = false; diff --git a/src/main/java/downfall/downfallMod.java b/src/main/java/downfall/downfallMod.java index e3225fe52..a455d3445 100644 --- a/src/main/java/downfall/downfallMod.java +++ b/src/main/java/downfall/downfallMod.java @@ -16,6 +16,8 @@ import automaton.potions.BurnAndBuffPotion; import automaton.relics.*; import automaton.util.*; +import awakenedOne.AwakenedOneChar; +import awakenedOne.AwakenedOneMod; import basemod.BaseMod; import basemod.ModLabeledToggleButton; import basemod.ModPanel; @@ -39,11 +41,14 @@ import charbosses.bosses.Hermit.CharBossHermit; import charbosses.bosses.Ironclad.CharBossIronclad; import charbosses.bosses.Merchant.CharBossMerchant; +import charbosses.bosses.Merchant.CharBossMerchant; import charbosses.bosses.Silent.CharBossSilent; import charbosses.bosses.Watcher.CharBossWatcher; import collector.CollectorChar; import collector.CollectorMod; import collector.potions.TempHPPotion; +import com.megacrit.cardcrawl.rooms.MonsterRoomBoss; +import downfall.cards.MajorBeam; import downfall.cards.curses.Sapped; import collector.util.CollectibleCardReward; import collector.util.EssenceReward; @@ -139,6 +144,7 @@ import sneckomod.cards.unknowns.*; import sneckomod.potions.MuddlingPotion; import sneckomod.util.ColorfulCardReward; + import sneckomod.util.UpgradedUnknownReward; import theHexaghost.HexaMod; import theHexaghost.TheHexaghost; @@ -153,6 +159,7 @@ import static downfall.patches.EvilModeCharacterSelect.evilMode; import static reskinContent.reskinContent.unlockAllReskin; +import static sneckomod.OffclassHelper.getARandomOffclass; @SpireInitializer public class downfallMod implements OnPlayerDamagedSubscriber, OnStartBattleSubscriber, PostDrawSubscriber, PostDungeonInitializeSubscriber, EditStringsSubscriber, EditKeywordsSubscriber, AddCustomModeModsSubscriber, PostInitializeSubscriber, EditRelicsSubscriber, EditCardsSubscriber, PostUpdateSubscriber, StartGameSubscriber, StartActSubscriber, AddAudioSubscriber, RenderSubscriber, PostDeathSubscriber { @@ -190,6 +197,7 @@ public class downfallMod implements OnPlayerDamagedSubscriber, OnStartBattleSubs public static boolean normalMapLayout = false; public static boolean sneckoNoModCharacters = false; public static boolean useIconsForAppliedProperties = false; + public static boolean DeterministicConjure = true; public static ArrayList shareableRelics = new ArrayList<>(); public static final String PROP_RELIC_SHARING = "contentSharing_relics"; @@ -204,17 +212,27 @@ public class downfallMod implements OnPlayerDamagedSubscriber, OnStartBattleSubs public static final String PROP_SNECKO_MODLESS = "sneckoNoModCharacters"; public static final String PROP_NO_MUSIC = "disableMusicOverride"; public static final String PROP_ICONS_FOR_APPLIED_PROPERTIES = "useIconsForAppliedProperties"; + public static final String NO_RNG_CONJURE = "RNGlessConjure"; public static String Act1BossFaced = ""; public static String Act2BossFaced = ""; public static String Act3BossFaced = ""; - public static boolean[] unseenTutorials = new boolean[]{true, // Hermit - true, // Guardian - true, // Hexa - true, // Charboss Info - true, // COLLECTOR info. Wow, it's hard to believe how much has gone on since the last tutorial was made - true // THE T&T ADVERTISEMENT!!! ADVERTISING!! To be fair we worked really hard both on T&T and this project + public static boolean[] unseenTutorials = new boolean[]{ + true, // Hermit + true, // Guardian 1 + true, // Hexa 2 + true, // Charboss Info 3 + true, // COLLECTOR info. Wow, it's hard to believe how much has gone on since the last tutorial was made 4 + true, // t&t advert 5 + true, // Slime Boss 6 + true, // Champ 7 + true, // Auto 8 + true, // Gremlins 9 + true, // Snecko 10 + true, // Awakened 11 + true, // act 3 boss 2 12 + true // act 3 boss 3 13 }; public static Properties tutorialSaves = new Properties(); @@ -232,13 +250,15 @@ public class downfallMod implements OnPlayerDamagedSubscriber, OnStartBattleSubs public static Settings.GameLanguage[] SupportedLanguages = { // Insert other languages here // DONT FORGET TO TOGGLE AT reskinContent.getLanguageString() TOO - Settings.GameLanguage.ENG, Settings.GameLanguage.ZHS, - Settings.GameLanguage.JPN, + Settings.GameLanguage.ENG, + Settings.GameLanguage.ZHS, + Settings.GameLanguage.JPN, Settings.GameLanguage.KOR, - Settings.GameLanguage.FRA, -// Settings.GameLanguage.ZHT, - Settings.GameLanguage.RUS, -// Settings.GameLanguage.PTB + Settings.GameLanguage.SPA, + // Settings.GameLanguage.FRA, + // Settings.GameLanguage.ZHT, + // Settings.GameLanguage.RUS, + // Settings.GameLanguage.PTB }; public static ReplaceData[] wordReplacements; @@ -265,6 +285,7 @@ public downfallMod() { configDefault.setProperty(PROP_UNLOCK_ALL, "FALSE"); configDefault.setProperty(PROP_NO_MUSIC, "FALSE"); configDefault.setProperty(PROP_ICONS_FOR_APPLIED_PROPERTIES, "FALSE"); + configDefault.setProperty(NO_RNG_CONJURE, "TRUE"); loadConfigData(); @@ -326,6 +347,8 @@ public static String assetPath(String path, otherPackagePaths otherPath) { return "hermitResources/" + path; case PACKAGE_COLLECTOR: return "collectorResources/" + path; + case PACKAGE_AWAKENED: + return "awakenedResources/" + path; } return "downfallResources/" + path; } @@ -345,11 +368,11 @@ public static void saveData() { config.setBool(PROP_CHAR_CROSSOVER, crossoverCharacters); config.setBool(PROP_MOD_CHAR_CROSSOVER, crossoverModCharacters); config.setBool(PROP_NORMAL_MAP, normalMapLayout); - config.setBool(PROP_UNLOCK_ALL, unlockEverything); config.setBool(PROP_SNECKO_MODLESS, sneckoNoModCharacters); config.setBool(PROP_NO_MUSIC, noMusic); config.setBool(PROP_ICONS_FOR_APPLIED_PROPERTIES, useIconsForAppliedProperties); + config.setBool(NO_RNG_CONJURE, DeterministicConjure); config.save(); GoldenIdol_Evil.save(); } catch (IOException e) { @@ -421,6 +444,9 @@ private void loadLocalization(Settings.GameLanguage language, Class stringTyp BaseMod.loadCustomStringsFile(stringType, makeLocalizationPath(language, stringType.getSimpleName(), otherPackagePaths.PACKAGE_HERMIT)); BaseMod.loadCustomStringsFile(stringType, makeLocalizationPath(language, stringType.getSimpleName(), otherPackagePaths.PACKAGE_COLLECTOR)); + + BaseMod.loadCustomStringsFile(stringType, makeLocalizationPath(language, stringType.getSimpleName(), otherPackagePaths.PACKAGE_AWAKENED)); + } else { //SlimeboundMod.logger.info("loading loc:" + language + " PACKAGE_HERMIT" + stringType); @@ -452,6 +478,7 @@ public void receiveEditCards() { // BaseMod.addCard(new ShieldSmash()); // BaseMod.addCard(new Debug()); //BaseMod.addCard(new PeaceOut()); + BaseMod.addCard(new MajorBeam()); BaseMod.addCard(new Malfunctioning()); BaseMod.addCard(new Bewildered()); BaseMod.addCard(new Haunted()); @@ -460,6 +487,7 @@ public void receiveEditCards() { BaseMod.addCard(new Pride()); BaseMod.addCard(new Scatterbrained()); BaseMod.addCard(new Sapped()); + BaseMod.addCard(new CurseOfBlood()); /* BaseMod.addCard(new Slug()); BaseMod.addCard(new Defend_Crowbot()); @@ -526,6 +554,7 @@ public void receiveEditKeywords() { loadModKeywords(GremlinMod.getModID(), otherPackagePaths.PACKAGE_GREMLIN); loadModKeywords(HermitMod.getModID(), otherPackagePaths.PACKAGE_HERMIT); loadModKeywords(CollectorMod.getModID(), otherPackagePaths.PACKAGE_COLLECTOR); + loadModKeywords(AwakenedOneMod.getModID(), otherPackagePaths.PACKAGE_AWAKENED); loadModKeywords(modID, otherPackagePaths.PACKAGE_DOWNFALL); } @@ -546,13 +575,14 @@ public static ArrayList getRandomDownfallCurse(int count) { } public void receivePostInitialize() { + addPotions(); UnlockTracker.betaCardPref = new IndividualBetaArtEnablerPref(UnlockTracker.betaCardPref); soulsImage = TextureLoader.getTexture(downfallMod.assetPath("images/ui/Souls.png")); loadOtherData(); this.initializeMonsters(); -// this.addPotions(); + this.addPotions(); // sorry this.initializeEvents(); this.initializeConfig(); @@ -644,6 +674,15 @@ private void initializeConfig() { saveData(); }); + configPos -= configStep; + ModLabeledToggleButton NoRNGConjureButton = new ModLabeledToggleButton(configStrings.TEXT[14], 350.0f, configPos, Settings.CREAM_COLOR, FontHelper.charDescFont, DeterministicConjure, settingsPanel, (label) -> { + }, (button) -> { + DeterministicConjure = button.enabled; + CardCrawlGame.mainMenuScreen.charSelectScreen.options.clear(); + CardCrawlGame.mainMenuScreen.charSelectScreen.initialize(); + saveData(); + }); + // configPos -= configStep; // ModLabeledToggleButton useIconsForAppliedCardPropertiesBtn = new ModLabeledToggleButton(configStrings.TEXT[13], 350.0f, configPos, Settings.CREAM_COLOR, FontHelper.charDescFont, useIconsForAppliedProperties, settingsPanel, (label) -> { // }, (button) -> { @@ -652,6 +691,7 @@ private void initializeConfig() { // }); settingsPanel.addUIElement(characterCrossoverBtn); + settingsPanel.addUIElement(NoRNGConjureButton); //settingsPanel.addUIElement(useIconsForAppliedCardPropertiesBtn); if (!STEAM_MODE) { @@ -769,6 +809,7 @@ public static void loadConfigData() { crossoverCharacters = config.getBool(PROP_CHAR_CROSSOVER); crossoverModCharacters = config.getBool(PROP_MOD_CHAR_CROSSOVER); useIconsForAppliedProperties = config.getBool(PROP_ICONS_FOR_APPLIED_PROPERTIES); + DeterministicConjure = config.getBool(NO_RNG_CONJURE); } catch (Exception e) { e.printStackTrace(); clearData(); @@ -923,7 +964,7 @@ private void initializeEvents() { BaseMod.addEvent(new AddEventParams.Builder(Serpent_Evil.ID, Serpent_Evil.class) //Event ID// //Event Spawn Condition// - .spawnCondition(() -> evilMode) + .spawnCondition(() -> evilMode && !(AbstractDungeon.player instanceof TheSnecko)) //Event ID to Override// .overrideEvent(Sssserpent.ID) //Event Type// @@ -931,7 +972,7 @@ private void initializeEvents() { BaseMod.addEvent(new AddEventParams.Builder(WingStatue_Evil.ID, WingStatue_Evil.class) //Event ID// //Event Spawn Condition// - .spawnCondition(() -> evilMode) + .spawnCondition(() -> evilMode && !(AbstractDungeon.player instanceof AwakenedOneChar)) //Event ID to Override// .overrideEvent(GoldenWing.ID) //Event Type// @@ -959,6 +1000,7 @@ private void initializeEvents() { //Event ID to Override// .overrideEvent(Ghosts.ID) //Event Type// + .eventType(EventUtils.EventType.FULL_REPLACE).create()); BaseMod.addEvent(new AddEventParams.Builder(CursedTome_Evil.ID, CursedTome_Evil.class) //Event ID// @@ -1020,7 +1062,7 @@ private void initializeEvents() { BaseMod.addEvent(new AddEventParams.Builder(TheNest_Evil.ID, TheNest_Evil.class) //Event ID// //Event Spawn Condition// - .spawnCondition(() -> evilMode) + .spawnCondition(() -> evilMode && !(AbstractDungeon.player instanceof AwakenedOneChar)) //Event ID to Override// .overrideEvent(Nest.ID) //Event Type// @@ -1112,7 +1154,7 @@ private void initializeEvents() { .spawnCondition(() -> evilMode) //Event ID to Override// .overrideEvent(Duplicator.ID).eventType(EventUtils.EventType.FULL_REPLACE) - // .bonusCondition(() -> !(AbstractDungeon.player instanceof GuardianCharacter)) + .bonusCondition(() -> !(AbstractDungeon.player instanceof GuardianCharacter)) .create()); BaseMod.addEvent(new AddEventParams.Builder(PurificationShrineEvil.ID, PurificationShrineEvil.class) //Event ID// @@ -1120,7 +1162,7 @@ private void initializeEvents() { .spawnCondition(() -> evilMode) //Event ID to Override// .overrideEvent(PurificationShrine.ID).eventType(EventUtils.EventType.FULL_REPLACE) - //.bonusCondition(() -> !(AbstractDungeon.player instanceof GuardianCharacter)) + .bonusCondition(() -> !(AbstractDungeon.player instanceof GuardianCharacter)) .create()); BaseMod.addEvent(new AddEventParams.Builder(TransmogrifierEvil.ID, TransmogrifierEvil.class) //Event ID// @@ -1128,7 +1170,7 @@ private void initializeEvents() { .spawnCondition(() -> evilMode) //Event ID to Override// .overrideEvent(Transmogrifier.ID).eventType(EventUtils.EventType.FULL_REPLACE) - //.bonusCondition(() -> !(AbstractDungeon.player instanceof GuardianCharacter)) + .bonusCondition(() -> !(AbstractDungeon.player instanceof GuardianCharacter)) .create()); BaseMod.addEvent(new AddEventParams.Builder(UpgradeShrineEvil.ID, UpgradeShrineEvil.class) //Event ID// @@ -1136,7 +1178,7 @@ private void initializeEvents() { .spawnCondition(() -> evilMode) //Event ID to Override// .overrideEvent(UpgradeShrine.ID).eventType(EventUtils.EventType.FULL_REPLACE) - //.bonusCondition(() -> !(AbstractDungeon.player instanceof GuardianCharacter)) + .bonusCondition(() -> !(AbstractDungeon.player instanceof GuardianCharacter)) .create()); } @@ -1150,7 +1192,7 @@ private void initializeMonsters() { BaseMod.addMonster(FleeingMerchant.ID, FleeingMerchant::new); - BaseMod.addMonster("downfall:CharBossMerchant", () -> new CharBossMonsterGroup(new AbstractMonster[]{new CharBossMerchant()})); + //BaseMod.addMonster("downfall:CharBossMerchant", () -> new CharBossMonsterGroup(new AbstractMonster[]{new CharBossMerchant()})); moved to boss section BaseMod.addMonster(downfall.monsters.FaceTrader.ID, downfall.monsters.FaceTrader::new); @@ -1235,11 +1277,16 @@ private void initializeMonsters() { //new Hermit(), })); - BaseMod.addMonster(CharBossIronclad.ID, () -> new CharBossMonsterGroup(new AbstractMonster[]{new CharBossIronclad()})); - BaseMod.addMonster(CharBossSilent.ID, () -> new CharBossMonsterGroup(new AbstractMonster[]{new CharBossSilent()})); - BaseMod.addMonster(CharBossDefect.ID, () -> new CharBossMonsterGroup(new AbstractMonster[]{new CharBossDefect()})); - BaseMod.addMonster(CharBossWatcher.ID, () -> new CharBossMonsterGroup(new AbstractMonster[]{new CharBossWatcher()})); - BaseMod.addMonster(CharBossHermit.ID, () -> new CharBossMonsterGroup(new AbstractMonster[]{new CharBossHermit()})); + + //RUN HISTORY WORKS NOW!!! You can now actually see what bosses you fought in a run. + //it doesn't work :( + BaseMod.addMonster(CharBossIronclad.ID, LocalizeHelper.DonwfallRunHistoryMonsterNames.TEXT[1], () -> new CharBossMonsterGroup(new AbstractMonster[]{new CharBossIronclad()})); + BaseMod.addMonster(CharBossSilent.ID, LocalizeHelper.DonwfallRunHistoryMonsterNames.TEXT[2], () -> new CharBossMonsterGroup(new AbstractMonster[]{new CharBossSilent()})); + BaseMod.addMonster(CharBossDefect.ID, LocalizeHelper.DonwfallRunHistoryMonsterNames.TEXT[3], () -> new CharBossMonsterGroup(new AbstractMonster[]{new CharBossDefect()})); + BaseMod.addMonster(CharBossWatcher.ID, LocalizeHelper.DonwfallRunHistoryMonsterNames.TEXT[4], () -> new CharBossMonsterGroup(new AbstractMonster[]{new CharBossWatcher()})); + BaseMod.addMonster(CharBossHermit.ID, LocalizeHelper.DonwfallRunHistoryMonsterNames.TEXT[6], () -> new CharBossMonsterGroup(new AbstractMonster[]{new CharBossHermit()})); + BaseMod.addMonster(CharBossMerchant.ID, LocalizeHelper.DonwfallRunHistoryMonsterNames.TEXT[5], () -> new CharBossMonsterGroup(new AbstractMonster[]{new CharBossMerchant()})); + BaseMod.addMonster(NeowBoss.ID, () -> new MonsterGroup(new AbstractMonster[]{new NeowBoss()})); BaseMod.addMonster(NeowBossFinal.ID, () -> new CharBossMonsterGroup(new AbstractMonster[]{new NeowBossFinal()})); @@ -1249,17 +1296,16 @@ private void initializeMonsters() { } public void addPotions() { - if(EvilModeCharacterSelect.evilMode || downfallMod.contentSharing_potions){ BaseMod.addPotion(BossPotion.class, Color.MAROON, Color.MAROON, new Color(0x470000ff), BossPotion.POTION_ID); BaseMod.addPotion(BlockOnCardUsePotion.class, Color.ROYAL, Color.TEAL, Color.BLUE, BlockOnCardUsePotion.POTION_ID); - BaseMod.addPotion(SoulburnPotion.class, Color.GRAY, Color.GRAY, Color.BLACK, SoulburnPotion.POTION_ID); BaseMod.addPotion(MuddlingPotion.class, Color.CYAN, Color.CORAL, Color.MAROON, MuddlingPotion.POTION_ID); BaseMod.addPotion(ThreeZeroPotion.class, Color.FOREST, Color.BLACK, Color.BLACK, ThreeZeroPotion.POTION_ID); - BaseMod.addPotion(TempHPPotion.class, Color.BLACK, Color.PURPLE, Color.GRAY, TempHPPotion.POTION_ID); + // BaseMod.addPotion(TempHPPotion.class, Color.BLACK, Color.PURPLE, Color.GRAY, TempHPPotion.POTION_ID); BaseMod.addPotion(CounterstrikePotion.class, Color.GRAY, Color.GRAY, Color.BLACK, CounterstrikePotion.POTION_ID); BaseMod.addPotion(BurnAndBuffPotion.class, Color.RED, Color.GREEN, Color.CLEAR, BurnAndBuffPotion.POTION_ID); BaseMod.addPotion(WizPotion.class, Color.PURPLE, Color.PINK, Color.PURPLE, WizPotion.POTION_ID); - } + // BaseMod.addPotion(SoulburnPotion.class, Color.GRAY, Color.GRAY, Color.BLACK, SoulburnPotion.POTION_ID, TheHexaghost.Enums.THE_SPIRIT); + if(EvilModeCharacterSelect.evilMode || downfallMod.contentSharing_events){ BaseMod.addPotion(CursedFountainPotion.class, Color.PURPLE, Color.MAROON, Color.BLACK, CursedFountainPotion.POTION_ID); @@ -1274,8 +1320,11 @@ public void addPotions() { @Override public void receiveEditRelics() { BaseMod.addRelic(new ShatteredFragment(), RelicType.SHARED); + BaseMod.addRelic(new BlackCandle(), RelicType.SHARED); + BaseMod.addRelic(new Hecktoplasm(), RelicType.SHARED); BaseMod.addRelic(new BrokenWingStatue(), RelicType.SHARED); BaseMod.addRelic(new CloakOfManyFaces(), RelicType.SHARED); + BaseMod.addRelic(new BurdenOfKnowledge(), RelicType.SHARED); BaseMod.addRelic(new GremlinSack(), RelicType.SHARED); BaseMod.addRelic(new GremlinWheel(), RelicType.SHARED); BaseMod.addRelic(new RedIOU(), RelicType.SHARED); @@ -1289,6 +1338,7 @@ public void receiveEditRelics() { BaseMod.addRelic(new NeowBlessing(), RelicType.SHARED); BaseMod.addRelic(new ExtraCursedBell(), RelicType.SHARED); BaseMod.addRelic(new ExtraCursedKey(), RelicType.SHARED); + addPotions(); } public static boolean readyToDoThing = false; @@ -1403,7 +1453,7 @@ public void receiveStartAct() { public static boolean isDownfallCharacter(AbstractPlayer p) { - if (p instanceof SlimeboundCharacter || p instanceof TheHexaghost || p instanceof GuardianCharacter || p instanceof TheSnecko || p instanceof ChampChar || p instanceof AutomatonChar || p instanceof GremlinCharacter || p instanceof hermit.characters.hermit || p instanceof CollectorChar) { + if (p instanceof SlimeboundCharacter || p instanceof TheHexaghost || p instanceof GuardianCharacter || p instanceof TheSnecko || p instanceof ChampChar || p instanceof AutomatonChar || p instanceof GremlinCharacter || p instanceof hermit.characters.hermit || p instanceof CollectorChar || p instanceof AwakenedOneChar) { return true; } return false; @@ -1442,7 +1492,6 @@ public int receiveOnPlayerDamaged(int i, DamageInfo damageInfo) { @Override public void receivePostDungeonInitialize() { - addPotions(); if (CardCrawlGame.trial != null && CardCrawlGame.trial.dailyModIDs().contains(Jewelcrafting.ID) || ModHelper.isModEnabled(Jewelcrafting.ID)) { @@ -1520,16 +1569,11 @@ public void receivePostDungeonInitialize() { if (CardCrawlGame.trial != null && CardCrawlGame.trial.dailyModIDs().contains(Improvised.ID) || ModHelper.isModEnabled(Improvised.ID)) { - AbstractDungeon.player.masterDeck.addToTop(new UnknownCommonAttack()); - AbstractDungeon.player.masterDeck.addToTop(new UnknownCommonAttack()); - AbstractDungeon.player.masterDeck.addToTop(new UnknownCommonAttack()); - AbstractDungeon.player.masterDeck.addToTop(new UnknownCommonSkill()); - AbstractDungeon.player.masterDeck.addToTop(new UnknownCommonSkill()); - AbstractDungeon.player.masterDeck.addToTop(new UnknownCommonSkill()); - AbstractDungeon.player.masterDeck.addToTop(new UnknownUncommonAttack()); - AbstractDungeon.player.masterDeck.addToTop(new UnknownUncommonSkill()); - AbstractDungeon.player.masterDeck.addToTop(new UnknownUncommonPower()); - AbstractDungeon.player.masterDeck.addToTop(new Unknown()); + for (int i = 0; i < 10; i++) { + AbstractCard newCard = getARandomOffclass(); + AbstractDungeon.player.masterDeck.addToTop(newCard); + } + } if (CardCrawlGame.trial != null && CardCrawlGame.trial.dailyModIDs().contains(TooManyShivs.ID) || ModHelper.isModEnabled(TooManyShivs.ID)) { @@ -1621,7 +1665,7 @@ public void receivePostDeath() { public enum otherPackagePaths { - PACKAGE_SLIME, PACKAGE_GUARDIAN, PACKAGE_HEXAGHOST, PACKAGE_SNECKO, PACKAGE_EXPANSION, PACKAGE_CHAMP, PACKAGE_AUTOMATON, PACKAGE_GREMLIN, PACKAGE_HERMIT, PACKAGE_COLLECTOR, PACKAGE_DOWNFALL; + PACKAGE_SLIME, PACKAGE_GUARDIAN, PACKAGE_HEXAGHOST, PACKAGE_SNECKO, PACKAGE_EXPANSION, PACKAGE_CHAMP, PACKAGE_AUTOMATON, PACKAGE_GREMLIN, PACKAGE_HERMIT, PACKAGE_COLLECTOR, PACKAGE_DOWNFALL, PACKAGE_AWAKENED;; otherPackagePaths() { } @@ -1656,25 +1700,36 @@ public void receiveOnBattleStart(AbstractRoom abstractRoom) { AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(m, m, new LastStandModPower(m, AbstractDungeon.actNum * 2), AbstractDungeon.actNum * 2)); } + // Code 0 is Hermit's Tutorial and already within his own mod. + + if ((CardCrawlGame.trial != null && CardCrawlGame.trial.dailyModIDs().contains(ChampStances.ID)) || ModHelper.isModEnabled(ChampStances.ID)) { + AbstractDungeon.actionManager.addToBottom(new MakeTempCardInHandAction(new ModFinisher())); + } + + if ((CardCrawlGame.trial != null && CardCrawlGame.trial.dailyModIDs().contains(Enraging.ID)) || ModHelper.isModEnabled(Enraging.ID)) { + for (AbstractMonster m : abstractRoom.monsters.monsters) + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(m, m, new LastStandModPower(m, AbstractDungeon.actNum * 2), AbstractDungeon.actNum * 2)); + } + + //guardian tutorial 1 if (AbstractDungeon.player instanceof GuardianCharacter) { if (downfallMod.unseenTutorials[1]) { AbstractDungeon.actionManager.addToBottom(new MessageCaller(1)); } } - + //hexa tutorial 2 if (AbstractDungeon.player instanceof TheHexaghost) { if (downfallMod.unseenTutorials[2]) { AbstractDungeon.actionManager.addToBottom(new MessageCaller(2)); } } - + //collector tutorial 4 if (AbstractDungeon.player.chosenClass.equals(CollectorChar.Enums.THE_COLLECTOR)) { if (downfallMod.unseenTutorials[4]) { AbstractDungeon.actionManager.addToTop(new MessageCaller(4)); } } - - /* + //charboss tutorial 3 if (abstractRoom instanceof MonsterRoomBoss) { if (evilMode) { if (downfallMod.unseenTutorials[3]) { @@ -1682,7 +1737,43 @@ public void receiveOnBattleStart(AbstractRoom abstractRoom) { } } } - */ + //slime boss tutorial 6 + if (AbstractDungeon.player instanceof SlimeboundCharacter) { + if (downfallMod.unseenTutorials[6]) { + AbstractDungeon.actionManager.addToTop(new MessageCaller(6)); + } + } + //champ tutorial 7 + if (AbstractDungeon.player instanceof ChampChar) { + if (downfallMod.unseenTutorials[7]) { + AbstractDungeon.actionManager.addToTop(new MessageCaller(7)); + } + } + //auto tutorial 8 + if (AbstractDungeon.player instanceof AutomatonChar) { + if (downfallMod.unseenTutorials[8]) { + AbstractDungeon.actionManager.addToTop(new MessageCaller(8)); + } + } + //grems tutorial 9 + if (AbstractDungeon.player instanceof GremlinCharacter) { + if (downfallMod.unseenTutorials[9]) { + AbstractDungeon.actionManager.addToTop(new MessageCaller(9)); + } + } + //snecko tutorial 10 + if (AbstractDungeon.player instanceof TheSnecko) { + if (downfallMod.unseenTutorials[10]) { + AbstractDungeon.actionManager.addToTop(new MessageCaller(10)); + } + } + + //awakened tutorial 11 + if (AbstractDungeon.player instanceof AwakenedOneChar) { + if (downfallMod.unseenTutorials[11]) { + AbstractDungeon.actionManager.addToTop(new MessageCaller(11)); + } + } } diff --git a/src/main/java/downfall/events/Beggar_Evil.java b/src/main/java/downfall/events/Beggar_Evil.java index bca017c88..4572944f4 100644 --- a/src/main/java/downfall/events/Beggar_Evil.java +++ b/src/main/java/downfall/events/Beggar_Evil.java @@ -51,12 +51,18 @@ public Beggar_Evil() { super(NAME, DESCRIPTIONS[0], "images/events/beggar.jpg"); this.noCardsInRewards = true; + + if (AbstractDungeon.ascensionLevel >= 15) { this.gold = 50; } else { this.gold = 75; } + if (Cleric_Evil.encountered) { + this.gold = this.gold*2; + } + this.imageEventText.setDialogOption(OPTIONS[4]); this.screen = CurScreen.INTRO; this.cardsToRemove = 1; diff --git a/src/main/java/downfall/events/CouncilOfGhosts_Evil.java b/src/main/java/downfall/events/CouncilOfGhosts_Evil.java index 9531e0420..dbcad3e9c 100644 --- a/src/main/java/downfall/events/CouncilOfGhosts_Evil.java +++ b/src/main/java/downfall/events/CouncilOfGhosts_Evil.java @@ -7,12 +7,14 @@ import com.badlogic.gdx.math.MathUtils; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.cards.colorless.Apparition; +import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.events.AbstractImageEvent; import com.megacrit.cardcrawl.localization.EventStrings; import com.megacrit.cardcrawl.vfx.cardManip.ShowCardAndObtainEffect; +import gremlin.patches.GremlinEnum; import java.util.ArrayList; import java.util.Collections; @@ -45,15 +47,21 @@ public class CouncilOfGhosts_Evil extends AbstractImageEvent { private int screenNum = 0; private int hpLoss = 0; - private int goldCost = 150; + private int goldCost = 100; public CouncilOfGhosts_Evil() { super(NAME, DESCRIPTIONSALT[0], "images/events/ghost.jpg"); this.hpLoss = MathUtils.ceil((float) AbstractDungeon.player.maxHealth * 0.5F); + if (AbstractDungeon.player.chosenClass == GremlinEnum.GREMLIN) { + this.hpLoss = this.hpLoss*5; + } if (this.hpLoss >= AbstractDungeon.player.maxHealth) { this.hpLoss = AbstractDungeon.player.maxHealth - 1; } + if (AbstractDungeon.ascensionLevel >= 15){ + goldCost = 150; + } if (AbstractDungeon.player.gold >= goldCost) { this.imageEventText.setDialogOption(OPTIONSALT[0] + this.goldCost + OPTIONSALT[1], new Apparition()); diff --git a/src/main/java/downfall/events/ForgottenAltar_Evil.java b/src/main/java/downfall/events/ForgottenAltar_Evil.java index b4f4d6095..327afd61c 100644 --- a/src/main/java/downfall/events/ForgottenAltar_Evil.java +++ b/src/main/java/downfall/events/ForgottenAltar_Evil.java @@ -4,10 +4,14 @@ import com.badlogic.gdx.math.MathUtils; import com.megacrit.cardcrawl.cards.DamageInfo; import com.megacrit.cardcrawl.cards.colorless.Apparition; +import com.megacrit.cardcrawl.cards.curses.Pain; +import com.megacrit.cardcrawl.cards.curses.Shame; import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.events.AbstractImageEvent; import com.megacrit.cardcrawl.localization.EventStrings; +import com.megacrit.cardcrawl.vfx.cardManip.ShowCardAndObtainEffect; public class ForgottenAltar_Evil extends AbstractImageEvent { public static final String ID = "downfall:ForgottenAltar"; @@ -41,15 +45,30 @@ public ForgottenAltar_Evil() { this.hpLoss = MathUtils.round((float) AbstractDungeon.player.maxHealth * 0.2F); } + + if (AbstractDungeon.ascensionLevel >= 15) { + this.goldCost = 100; + } else { + this.goldCost = 50; + } + + if (this.goldCost > AbstractDungeon.player.gold) { + this.goldCost = AbstractDungeon.player.gold; + } + if (AbstractDungeon.player.gold >= goldCost) { this.imageEventText.setDialogOption(OPTIONSALT[0] + this.goldCost + OPTIONSALT[1] + (this.hpLoss + 10) + OPTIONSALT[2]); } else { this.imageEventText.setDialogOption(OPTIONSALT[3] + this.goldCost + OPTIONSALT[4], true); - } this.imageEventText.setDialogOption(OPTIONS[2] + 5 + OPTIONS[3] + this.hpLoss + OPTIONS[4]); - this.imageEventText.setDialogOption(OPTIONSALT[5]); + + if (15 > AbstractDungeon.ascensionLevel) { + this.imageEventText.setDialogOption(OPTIONSALT[5]); + } else { + this.imageEventText.setDialogOption(OPTIONSALT[6]); + } } protected void buttonEffect(int buttonPressed) { @@ -79,8 +98,15 @@ protected void buttonEffect(int buttonPressed) { return; case 2: this.imageEventText.clearAllDialogs(); - this.imageEventText.updateBodyText(DESCRIPTIONSALT[1]); - this.imageEventText.setDialogOption(OPTIONSALT[5]); + if (15 > AbstractDungeon.ascensionLevel) { + this.imageEventText.updateBodyText(DESCRIPTIONSALT[1]); + this.imageEventText.setDialogOption(OPTIONSALT[5]); + } else { + Shame curse = new Shame(); + AbstractDungeon.effectList.add(new ShowCardAndObtainEffect(curse, (float) Settings.WIDTH / 2.0F, (float) Settings.HEIGHT / 2.0F)); + this.imageEventText.updateBodyText(DESCRIPTIONSALT[2]); + this.imageEventText.setDialogOption(OPTIONSALT[5]); + } this.screenNum = 1; logMetricIgnored(ID); return; diff --git a/src/main/java/downfall/events/GoldenIdol_Evil.java b/src/main/java/downfall/events/GoldenIdol_Evil.java index 10cf63d2d..4177b18b1 100644 --- a/src/main/java/downfall/events/GoldenIdol_Evil.java +++ b/src/main/java/downfall/events/GoldenIdol_Evil.java @@ -36,6 +36,10 @@ public GoldenIdol_Evil() { super(NAME, "", "images/events/goldenIdol.jpg"); this.screen = CurScreen.INTRO; + if (AbstractDungeon.ascensionLevel >= 15){ + gold = 50; + } + if (!trapAlreadySet) { for (AbstractCard c : AbstractDungeon.player.masterDeck.group) { if (c.hasTag(AbstractCard.CardTags.STARTER_STRIKE)) { diff --git a/src/main/java/downfall/events/MindBloom_Evil.java b/src/main/java/downfall/events/MindBloom_Evil.java index 6d0212250..d6e66eaf1 100644 --- a/src/main/java/downfall/events/MindBloom_Evil.java +++ b/src/main/java/downfall/events/MindBloom_Evil.java @@ -2,6 +2,7 @@ import automaton.AutomatonChar; +import awakenedOne.AwakenedOneChar; import basemod.ReflectionHacks; import champ.ChampChar; import collector.CollectorChar; @@ -16,9 +17,11 @@ import com.megacrit.cardcrawl.events.AbstractImageEvent; import com.megacrit.cardcrawl.helpers.CardLibrary; import com.megacrit.cardcrawl.helpers.MonsterHelper; +import com.megacrit.cardcrawl.helpers.RelicLibrary; import com.megacrit.cardcrawl.localization.EventStrings; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.monsters.MonsterGroup; +import com.megacrit.cardcrawl.monsters.beyond.AwakenedOne; import com.megacrit.cardcrawl.monsters.city.BronzeAutomaton; import com.megacrit.cardcrawl.monsters.city.Champ; import com.megacrit.cardcrawl.monsters.city.GremlinLeader; @@ -33,19 +36,14 @@ import downfall.monsters.GremlinMirror; import downfall.monsters.SneckoMirror; import downfall.patches.ui.campfire.AddBustKeyButtonPatches; -import downfall.relics.HeartBlessingBlue; -import downfall.relics.HeartBlessingGreen; -import downfall.relics.HeartBlessingRed; +import downfall.relics.*; import gremlin.characters.GremlinCharacter; import guardian.characters.GuardianCharacter; import slimebound.characters.SlimeboundCharacter; import sneckomod.TheSnecko; import theHexaghost.TheHexaghost; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Random; +import java.util.*; import static com.megacrit.cardcrawl.dungeons.AbstractDungeon.lastCombatMetricKey; import static com.megacrit.cardcrawl.helpers.MonsterHelper.getGremlin; @@ -77,10 +75,19 @@ public MindBloom_Evil() { if (AbstractDungeon.player instanceof GremlinCharacter) { this.imageEventText.setDialogOption(OPTIONSALT[5]); } else { + //this.imageEventText.setDialogOption(OPTIONSALT[2]); + //if ruining the surprise is important use this instead this.imageEventText.setDialogOption(OPTIONSALT[2]); } } else { - this.imageEventText.setDialogOption(OPTIONSALT[3], true); + if (AbstractDungeon.player instanceof GremlinCharacter) { + this.imageEventText.setDialogOption(OPTIONSALT[5]); + } else { + this.imageEventText.setDialogOption(OPTIONSALT[2]); + //if ruining the surprise is important use this instead + // this.imageEventText.setDialogOption(OPTIONSALT[2], new BurdenOfKnowledge()); + } + //this.imageEventText.setDialogOption(OPTIONSALT[3], true); } if (AbstractDungeon.floorNum % 50 <= 40) { @@ -141,6 +148,13 @@ protected void buttonEffect(int buttonPressed) { m.currentHealth = m.maxHealth; m.powers.add(new StrengthPower(m, -3)); AbstractDungeon.getCurrRoom().monsters = new MonsterGroup(m); + } + else if (AbstractDungeon.player instanceof AwakenedOneChar) { + AbstractMonster m = new AwakenedOne(0,0); + m.maxHealth = Math.round(m.maxHealth * .4F); + m.currentHealth = m.maxHealth; + m.powers.add(new StrengthPower(m, -4)); + AbstractDungeon.getCurrRoom().monsters = new MonsterGroup(m); } else { ArrayList list = new ArrayList(); list.add("Slime Boss"); @@ -173,13 +187,15 @@ protected void buttonEffect(int buttonPressed) { this.screen = CurScreen.LEAVE; int effectCount = 0; List upgradedCards = new ArrayList(); + Iterator var11 = AbstractDungeon.player.masterDeck.group.iterator(); - for (AbstractCard c : AbstractDungeon.player.masterDeck.group) { + while(var11.hasNext()) { + AbstractCard c = (AbstractCard)var11.next(); if (c.canUpgrade()) { ++effectCount; if (effectCount <= 20) { - float x = MathUtils.random(0.1F, 0.9F) * (float) Settings.WIDTH; - float y = MathUtils.random(0.2F, 0.8F) * (float) Settings.HEIGHT; + float x = MathUtils.random(0.1F, 0.9F) * (float)Settings.WIDTH; + float y = MathUtils.random(0.2F, 0.8F) * (float)Settings.HEIGHT; AbstractDungeon.effectList.add(new ShowCardBrieflyEffect(c.makeStatEquivalentCopy(), x, y)); AbstractDungeon.topLevelEffects.add(new UpgradeShineEffect(x, y)); } @@ -190,9 +206,7 @@ protected void buttonEffect(int buttonPressed) { } } - AbstractDungeon.player.loseRelic(HeartBlessingRed.ID); - AbstractDungeon.player.loseRelic(HeartBlessingBlue.ID); - AbstractDungeon.player.loseRelic(HeartBlessingGreen.ID); + AbstractDungeon.getCurrRoom().spawnRelicAndObtain((float)Settings.WIDTH / 2.0F, (float)Settings.HEIGHT / 2.0F, RelicLibrary.getRelic("Mark of the Bloom").makeCopy()); logMetricUpgradeCards(ID, "Upgrade", upgradedCards); diff --git a/src/main/java/downfall/events/Nloth_Evil.java b/src/main/java/downfall/events/Nloth_Evil.java index c86a4785a..251cfd39c 100644 --- a/src/main/java/downfall/events/Nloth_Evil.java +++ b/src/main/java/downfall/events/Nloth_Evil.java @@ -1,19 +1,30 @@ package downfall.events; +import automaton.relics.BottledCode; +import awakenedOne.relics.MoonTalisman; +import champ.relics.SignatureFinisher; +import collector.relics.BottledCollectible; +import collector.relics.ForbiddenFruit; import com.megacrit.cardcrawl.cards.curses.Pain; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.events.AbstractImageEvent; import com.megacrit.cardcrawl.localization.EventStrings; -import com.megacrit.cardcrawl.relics.AbstractRelic; -import com.megacrit.cardcrawl.relics.Circlet; -import com.megacrit.cardcrawl.relics.NlothsGift; +import com.megacrit.cardcrawl.relics.*; import com.megacrit.cardcrawl.vfx.cardManip.ShowCardAndObtainEffect; +import guardian.relics.BottledStasis; +import guardian.relics.PickAxe; +import guardian.relics.StasisEgg; +import sneckomod.relics.D8; +import sneckomod.relics.SneckoBoss; +import sneckomod.relics.SneckoCommon; +import theHexaghost.relics.Libra; import java.util.ArrayList; import java.util.Collections; +import java.util.Iterator; import java.util.Random; public class Nloth_Evil extends AbstractImageEvent { @@ -48,7 +59,40 @@ public class Nloth_Evil extends AbstractImageEvent { public Nloth_Evil() { super(NAME, DIALOG_1, "images/events/nloth.jpg"); ArrayList relics = new ArrayList(); - relics.addAll(AbstractDungeon.player.relics); + Iterator relicIterator = relics.iterator(); + while (relicIterator.hasNext()) { + AbstractRelic r = relicIterator.next(); + //Starter / Boss fairness + if (r.tier == AbstractRelic.RelicTier.STARTER || r.tier == AbstractRelic.RelicTier.BOSS || + //commons + (r.relicId.equals(Strawberry.ID) || + r.relicId.equals(MawBank.ID) || + r.relicId.equals(PickAxe.ID) || + r.relicId.equals(Matryoshka.ID) || // I mixed up tiny chest and this lol + r.relicId.equals(WarPaint.ID) || + r.relicId.equals(Whetstone.ID) || r.relicId.equals(SneckoCommon.ID) || r.relicId.equals(PotionBelt.ID) || + //uncommons + r.relicId.equals(BottledFlame.ID) || + r.relicId.equals(BottledLightning.ID) || + r.relicId.equals(BottledTornado.ID) || + r.relicId.equals(BottledStasis.ID) || + r.relicId.equals(Pear.ID) || + //rares + r.relicId.equals(BottledCollectible.ID) || + r.relicId.equals(LizardTail.ID) || + r.relicId.equals(Mango.ID) || + r.relicId.equals(SignatureFinisher.ID) || + r.relicId.equals(WingBoots.ID)) || + r.relicId.equals(MoonTalisman.ID) || + //event + r.relicId.equals(StasisEgg.ID) || + r.relicId.equals(BottledCode.ID) || + r.relicId.equals(D8.ID)) + { + relicIterator.remove(); // Remove the blacklisted relic + } + } + Collections.shuffle(relics, new Random(AbstractDungeon.miscRng.randomLong())); this.choice1 = relics.get(0); this.choice2 = relics.get(1); diff --git a/src/main/java/downfall/events/ShiningLight_Evil.java b/src/main/java/downfall/events/ShiningLight_Evil.java index 2f3ae9c3f..2c3c433a4 100644 --- a/src/main/java/downfall/events/ShiningLight_Evil.java +++ b/src/main/java/downfall/events/ShiningLight_Evil.java @@ -2,6 +2,7 @@ import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.curses.Pain; import com.megacrit.cardcrawl.cards.curses.Regret; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.core.Settings; @@ -11,6 +12,7 @@ import com.megacrit.cardcrawl.vfx.UpgradeShineEffect; import com.megacrit.cardcrawl.vfx.cardManip.ShowCardAndObtainEffect; import com.megacrit.cardcrawl.vfx.cardManip.ShowCardBrieflyEffect; +import downfall.cards.curses.Icky; import downfall.cards.curses.Malfunctioning; import java.util.*; @@ -24,6 +26,7 @@ public class ShiningLight_Evil extends AbstractImageEvent { private static final String INTRO; private static final String AGREE_DIALOG; private static final String DISAGREE_DIALOG; + private int curseObtainChance = 3; private static final float HP_LOSS_PERCENT = 0.2F; private static final float A_2_HP_LOSS_PERCENT = 0.3F; @@ -45,7 +48,10 @@ public ShiningLight_Evil() { this.screen = CUR_SCREEN.INTRO; if (AbstractDungeon.player.masterDeck.hasUpgradableCards()) { - this.imageEventText.setDialogOption(OPTIONS[0], new Malfunctioning()); + if (AbstractDungeon.ascensionLevel >= 15) { + this.curseObtainChance = 2; + } + this.imageEventText.setDialogOption(OPTIONS[0] + this.curseObtainChance + OPTIONS[3], new Malfunctioning()); } else { this.imageEventText.setDialogOption(OPTIONS[2], true); } @@ -116,17 +122,23 @@ private void upgradeCards() { } else { upgradableCards.get(0).upgrade(); upgradableCards.get(1).upgrade(); - upgradableCards.get(2).upgrade(); + if (AbstractDungeon.ascensionLevel < 15) { + upgradableCards.get(2).upgrade(); + } cardMetrics.add(upgradableCards.get(0).cardID); cardMetrics.add(upgradableCards.get(1).cardID); - cardMetrics.add(upgradableCards.get(2).cardID); - AbstractDungeon.player.bottledCardUpgradeCheck(upgradableCards.get(0)); + if (AbstractDungeon.ascensionLevel < 15) { + cardMetrics.add(upgradableCards.get(2).cardID); + } + AbstractDungeon.player.bottledCardUpgradeCheck(upgradableCards.get(0)); AbstractDungeon.player.bottledCardUpgradeCheck(upgradableCards.get(1)); - AbstractDungeon.player.bottledCardUpgradeCheck(upgradableCards.get(2)); + if (AbstractDungeon.ascensionLevel < 15) { + AbstractDungeon.player.bottledCardUpgradeCheck(upgradableCards.get(2)); + } AbstractDungeon.effectList.add(new ShowCardBrieflyEffect(upgradableCards.get(0).makeStatEquivalentCopy(), (float) Settings.WIDTH / 2.0F - 300.0F * Settings.scale, (float) Settings.HEIGHT / 2.0F)); - AbstractDungeon.effectList.add(new ShowCardBrieflyEffect(upgradableCards.get(1).makeStatEquivalentCopy(), (float) Settings.WIDTH / 2.0F, (float) Settings.HEIGHT / 2.0F)); - AbstractDungeon.effectList.add(new ShowCardBrieflyEffect(upgradableCards.get(2).makeStatEquivalentCopy(), (float) Settings.WIDTH / 2.0F + 300.0F * Settings.scale, (float) Settings.HEIGHT / 2.0F)); - + AbstractDungeon.effectList.add(new ShowCardBrieflyEffect(upgradableCards.get(1).makeStatEquivalentCopy(), (float) Settings.WIDTH / 2.0F + 300.0F * Settings.scale, (float) Settings.HEIGHT / 2.0F)); + if (AbstractDungeon.ascensionLevel < 15) { + AbstractDungeon.effectList.add(new ShowCardBrieflyEffect(upgradableCards.get(2).makeStatEquivalentCopy(), (float) Settings.WIDTH / 2.0F, (float) Settings.HEIGHT / 2.0F));} } } diff --git a/src/main/java/downfall/events/WeMeetAgain_Evil.java b/src/main/java/downfall/events/WeMeetAgain_Evil.java index 8a689a348..a07e7489e 100644 --- a/src/main/java/downfall/events/WeMeetAgain_Evil.java +++ b/src/main/java/downfall/events/WeMeetAgain_Evil.java @@ -1,6 +1,11 @@ package downfall.events; +import automaton.relics.BottledCode; +import awakenedOne.relics.MoonTalisman; +import champ.relics.SignatureFinisher; import collector.CollectorChar; +import collector.relics.BottledCollectible; +import collector.relics.ForbiddenFruit; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.core.Settings; @@ -8,11 +13,19 @@ import com.megacrit.cardcrawl.events.AbstractImageEvent; import com.megacrit.cardcrawl.helpers.PotionHelper; import com.megacrit.cardcrawl.localization.EventStrings; -import com.megacrit.cardcrawl.relics.AbstractRelic; +import com.megacrit.cardcrawl.relics.*; import com.megacrit.cardcrawl.rewards.RewardItem; import com.megacrit.cardcrawl.rooms.AbstractRoom; import com.megacrit.cardcrawl.vfx.RainingGoldEffect; import com.megacrit.cardcrawl.vfx.cardManip.ShowCardAndObtainEffect; +import guardian.events.StasisEgg; +import guardian.relics.BottledAnomaly; +import guardian.relics.BottledStasis; +import guardian.relics.PickAxe; +import sneckomod.relics.D8; +import sneckomod.relics.SneckoBoss; +import sneckomod.relics.SneckoCommon; +import theHexaghost.relics.Libra; import java.util.ArrayList; import java.util.Collections; @@ -54,11 +67,49 @@ public WeMeetAgain_Evil() { ArrayList playerUncommonRelics = new ArrayList<>(); for (AbstractRelic r : AbstractDungeon.player.relics) { - if (r.tier == AbstractRelic.RelicTier.COMMON) { - playerCommonRelics.add(r); - } - if (r.tier == AbstractRelic.RelicTier.UNCOMMON) { - playerUncommonRelics.add(r); + if + //Commons + ((r.relicId != Strawberry.ID) && + (r.relicId != MawBank.ID) && + (r.relicId != PickAxe.ID) && + (r.relicId != Matryoshka.ID) && + (r.relicId != WarPaint.ID) && + (r.relicId != Whetstone.ID) && + (r.relicId != SneckoCommon.ID) && + (r.relicId != PotionBelt.ID) && + //Uncommons + (r.relicId != BottledFlame.ID) && + (r.relicId != BottledLightning.ID) && + (r.relicId != BottledTornado.ID) && + (r.relicId != BottledStasis.ID) && + (r.relicId != Pear.ID) && + //Rares + (r.relicId != BottledCollectible.ID) && + (r.relicId != LizardTail.ID) && + (r.relicId != Mango.ID) && + (r.relicId != SignatureFinisher.ID) && + (r.relicId != WingBoots.ID) && + (r.relicId != MoonTalisman.ID) && + + (r.relicId != BottledAnomaly.ID) && + (r.relicId != BottledCode.ID) && + (r.relicId != StasisEgg.ID) && + (r.relicId != D8.ID) && + + + //Boss + (r.relicId != Astrolabe.ID) && + (r.relicId != ForbiddenFruit.ID) && + (r.relicId != Libra.ID) && + (r.relicId != SneckoBoss.ID) && + (r.relicId != PandorasBox.ID)) { + + if (r.tier == AbstractRelic.RelicTier.COMMON) { + playerCommonRelics.add(r); + } + if (r.tier == AbstractRelic.RelicTier.UNCOMMON) { + playerUncommonRelics.add(r); + } } } diff --git a/src/main/java/downfall/events/WingStatue_Evil.java b/src/main/java/downfall/events/WingStatue_Evil.java index 5838fb79c..d8d76764b 100644 --- a/src/main/java/downfall/events/WingStatue_Evil.java +++ b/src/main/java/downfall/events/WingStatue_Evil.java @@ -12,6 +12,7 @@ import com.megacrit.cardcrawl.vfx.combat.FlashAtkImgEffect; import downfall.relics.BrokenWingStatue; import downfall.relics.ShatteredFragment; +import gremlin.patches.GremlinEnum; public class WingStatue_Evil extends AbstractImageEvent { public static final String ID = "downfall:WingStatue"; @@ -28,13 +29,43 @@ public class WingStatue_Evil extends AbstractImageEvent { } private CurScreen screen; - private int damage = MathUtils.ceil((float) AbstractDungeon.player.maxHealth * 0.15F); + private int goldLoss; public WingStatue_Evil() { super(NAME, DESCRIPTIONS[0], "images/events/goldenWing.jpg"); this.screen = CurScreen.INTRO; - this.imageEventText.setDialogOption(OPTIONS[0] + this.damage + OPTIONS[1], new ShatteredFragment()); + + + this.goldLoss = MathUtils.ceil((float) AbstractDungeon.player.maxHealth * 0.25F); + if (AbstractDungeon.ascensionLevel >= 15){ + this.goldLoss = MathUtils.ceil((float) AbstractDungeon.player.maxHealth * 0.35F); + } + + if (AbstractDungeon.player.chosenClass == GremlinEnum.GREMLIN) { + this.goldLoss = this.goldLoss*5; + } + +// if (AbstractDungeon.player.chosenClass == GremlinEnum.GREMLIN) { +// } +// if (this.goldLoss >= AbstractDungeon.player.maxHealth) { +// this.goldLoss = AbstractDungeon.player.maxHealth - 1; +// } + +// if (AbstractDungeon.ascensionLevel >= 15) { +// this.goldLoss = AbstractDungeon.miscRng.random(100, 125); +// } else { +// this.goldLoss = AbstractDungeon.miscRng.random(75, 100); +// } + +// if (this.goldLoss > AbstractDungeon.player.gold) { +// this.goldLoss = AbstractDungeon.player.gold; +// } + + + // lose 20 (25)% hp as damage, obtain relic + this.imageEventText.setDialogOption(OPTIONS [0] + goldLoss + OPTIONS[1], new ShatteredFragment()); + // this.imageEventText.setDialogOption(OPTIONS[2] + ((AbstractDungeon.ascensionLevel >= 15)?7:5) + OPTIONS[4], new BrokenWingStatue()); this.imageEventText.setDialogOption(OPTIONS[3]); } @@ -49,10 +80,11 @@ protected void buttonEffect(int buttonPressed) { this.imageEventText.setDialogOption(OPTIONS[3]); AbstractDungeon.getCurrRoom().spawnRelicAndObtain((float) Settings.WIDTH / 2.0F, (float) Settings.HEIGHT / 2.0F, new ShatteredFragment()); // AbstractDungeon.player.decreaseMaxHealth(this.damage); - AbstractDungeon.player.damage(new DamageInfo(null, this.damage)); - AbstractDungeon.effectList.add(new FlashAtkImgEffect(AbstractDungeon.player.hb.cX, AbstractDungeon.player.hb.cY, AttackEffect.FIRE)); + // AbstractDungeon.player.damage(new DamageInfo(null, this.damage)); + // AbstractDungeon.effectList.add(new FlashAtkImgEffect(AbstractDungeon.player.hb.cX, AbstractDungeon.player.hb.cY, AttackEffect.FIRE)); + AbstractDungeon.player.damage(new DamageInfo(null, this.goldLoss)); this.screen = CurScreen.RESULT; - logMetricObtainRelicAndDamage(ID, "Destroyed Statue", new ShatteredFragment(), damage); + logMetricObtainRelicAndDamage(ID, "Destroyed Statue", new ShatteredFragment(), goldLoss); return; case 1: this.imageEventText.updateBodyText(DESCRIPTIONS[1]); diff --git a/src/main/java/downfall/events/WorldOfGoop_Evil.java b/src/main/java/downfall/events/WorldOfGoop_Evil.java index 4c4629038..5d684d69e 100644 --- a/src/main/java/downfall/events/WorldOfGoop_Evil.java +++ b/src/main/java/downfall/events/WorldOfGoop_Evil.java @@ -1,5 +1,6 @@ package downfall.events; +import com.megacrit.cardcrawl.cards.DamageInfo; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; @@ -40,14 +41,15 @@ public WorldOfGoop_Evil() { this.screen = CurScreen.INTRO; if (AbstractDungeon.ascensionLevel >= 15) { - this.gold = 100; - } else { this.gold = 150; + } else { + this.gold = 175; } - this.imageEventText.setDialogOption(OPTIONS[0] + this.gold * 3 + OPTIONS[3], new Icky()); - this.imageEventText.setDialogOption(OPTIONS[1] + this.gold * 2 + OPTIONS[4], new Icky()); + this.imageEventText.setDialogOption(OPTIONS[0] + (this.gold+50) * 3 + OPTIONS[3], new Icky()); + this.imageEventText.setDialogOption(OPTIONS[1] + (this.gold+25) * 2 + OPTIONS[4], new Icky()); this.imageEventText.setDialogOption(OPTIONS[2] + this.gold + OPTIONS[5], new Icky()); + this.imageEventText.setDialogOption(OPTIONS[6]); } public void onEnterRoom() { @@ -80,7 +82,7 @@ protected void buttonEffect(int buttonPressed) { AbstractDungeon.effectList.add(new ShowCardAndObtainEffect(new Icky(), (float) Settings.WIDTH * .5F + 10.0F * Settings.scale, (float) Settings.HEIGHT / 2.0F)); AbstractDungeon.effectList.add(new ShowCardAndObtainEffect(new Icky(), (float) Settings.WIDTH * .75F + 10.0F * Settings.scale, (float) Settings.HEIGHT / 2.0F)); AbstractDungeon.effectList.add(new RainingGoldEffect(this.gold * 3)); - AbstractDungeon.player.gainGold(this.gold * 3); + AbstractDungeon.player.gainGold((this.gold+50) * 3); logMetricGoop(3); return; case 1: @@ -91,7 +93,7 @@ protected void buttonEffect(int buttonPressed) { AbstractDungeon.effectList.add(new ShowCardAndObtainEffect(new Icky(), (float) Settings.WIDTH * .75F + 10.0F * Settings.scale, (float) Settings.HEIGHT / 2.0F)); AbstractDungeon.effectList.add(new ShowCardAndObtainEffect(new Icky(), (float) Settings.WIDTH * .25F + 10.0F * Settings.scale, (float) Settings.HEIGHT / 2.0F)); AbstractDungeon.effectList.add(new RainingGoldEffect(this.gold * 2)); - AbstractDungeon.player.gainGold(this.gold * 2); + AbstractDungeon.player.gainGold((this.gold+25) * 2); logMetricGoop(2); return; case 2: @@ -105,6 +107,7 @@ protected void buttonEffect(int buttonPressed) { logMetricGoop(1); return; case 3: + //AbstractDungeon.player.damage(new DamageInfo(null, ((AbstractDungeon.ascensionLevel >= 15)?11:7))); this.imageEventText.updateBodyText(LEAVE_DIALOG); this.imageEventText.clearAllDialogs(); this.imageEventText.setDialogOption(OPTIONS[6]); diff --git a/src/main/java/downfall/events/shrines_evil/DuplicatorEvil.java b/src/main/java/downfall/events/shrines_evil/DuplicatorEvil.java index fa3f098cd..6bde00a8a 100644 --- a/src/main/java/downfall/events/shrines_evil/DuplicatorEvil.java +++ b/src/main/java/downfall/events/shrines_evil/DuplicatorEvil.java @@ -3,6 +3,8 @@ /* */ /* */ +import com.megacrit.cardcrawl.cards.curses.Pain; +import downfall.cards.curses.Aged; import downfall.cards.curses.Sapped; import com.megacrit.cardcrawl.cards.AbstractCard; /* */ import com.megacrit.cardcrawl.core.CardCrawlGame; @@ -39,7 +41,7 @@ public DuplicatorEvil() { DESCRIPTIONSALT = CardCrawlGame.languagePack.getEventString("downfall:EvilShrines").DESCRIPTIONS; OPTIONSALT = CardCrawlGame.languagePack.getEventString("downfall:EvilShrines").OPTIONS; - this.imageEventText.setDialogOption(OPTIONSALT[0], new Sapped()); + this.imageEventText.setDialogOption(OPTIONSALT[0], new Aged()); this.imageEventText.setDialogOption(OPTIONS[0]); this.imageEventText.setDialogOption(OPTIONS[1]); } @@ -68,7 +70,7 @@ public void update() { AbstractDungeon.effectList.add(new com.megacrit.cardcrawl.vfx.cardManip.ShowCardAndObtainEffect(c, com.megacrit.cardcrawl.core.Settings.WIDTH * 0.75F, com.megacrit.cardcrawl.core.Settings.HEIGHT / 2.0F)); cards.add(c.cardID); - AbstractCard curse = new Sapped(); + AbstractCard curse = new Aged(); cards.add(curse.cardID); AbstractDungeon.effectList.add(new ShowCardAndObtainEffect(curse, (float) (Settings.WIDTH * .5F), (float) (Settings.HEIGHT / 2)));// 66 diff --git a/src/main/java/downfall/events/shrines_evil/PurificationShrineEvil.java b/src/main/java/downfall/events/shrines_evil/PurificationShrineEvil.java index aba58ceee..4f20a5ea4 100644 --- a/src/main/java/downfall/events/shrines_evil/PurificationShrineEvil.java +++ b/src/main/java/downfall/events/shrines_evil/PurificationShrineEvil.java @@ -1,5 +1,7 @@ package downfall.events.shrines_evil; +import com.badlogic.gdx.math.MathUtils; +import com.megacrit.cardcrawl.cards.curses.Pain; import downfall.cards.curses.Sapped; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.core.CardCrawlGame; @@ -8,6 +10,7 @@ import com.megacrit.cardcrawl.localization.EventStrings; import com.megacrit.cardcrawl.vfx.cardManip.ShowCardAndObtainEffect; import downfall.downfallMod; +import gremlin.patches.GremlinEnum; import java.util.ArrayList; import java.util.Collections; @@ -26,7 +29,7 @@ public class PurificationShrineEvil extends com.megacrit.cardcrawl.events.Abstra private static final String DIALOG_2 = DESCRIPTIONS[1]; private static final String IGNORE = DESCRIPTIONS[2]; private CUR_SCREEN screen = CUR_SCREEN.INTRO; - + private int hpAmt = 0; private static enum CUR_SCREEN { INTRO, COMPLETE; @@ -38,7 +41,15 @@ public PurificationShrineEvil() { super(NAME, DIALOG_1, "images/events/shrine3.jpg"); DESCRIPTIONSALT = CardCrawlGame.languagePack.getEventString("downfall:EvilShrines").DESCRIPTIONS; OPTIONSALT = CardCrawlGame.languagePack.getEventString("downfall:EvilShrines").OPTIONS; - this.imageEventText.setDialogOption(OPTIONSALT[1], new Sapped()); + if (AbstractDungeon.ascensionLevel >= 15) { + this.hpAmt = MathUtils.round((float)AbstractDungeon.player.maxHealth * 0.15F); + } else { + this.hpAmt = MathUtils.round((float)AbstractDungeon.player.maxHealth * 0.10F); + } + if (AbstractDungeon.player.chosenClass == GremlinEnum.GREMLIN) { + //this.hpAmt = this.hpAmt*5; + } + this.imageEventText.setDialogOption(OPTIONSALT[1] + hpAmt + OPTIONSALT[2]); this.imageEventText.setDialogOption(OPTIONS[0]); this.imageEventText.setDialogOption(OPTIONS[1]); } @@ -73,17 +84,18 @@ public void update() { logMetricCardRemoval(ID, "Purged", (AbstractCard)AbstractDungeon.gridSelectScreen.selectedCards.get(0)); } - if (AbstractDungeon.gridSelectScreen.selectedCards.size() > 2){ + if (AbstractDungeon.gridSelectScreen.selectedCards.size() > 1){ AbstractDungeon.topLevelEffects.add(new com.megacrit.cardcrawl.vfx.cardManip.PurgeCardEffect( - (AbstractCard) AbstractDungeon.gridSelectScreen.selectedCards.get(2), com.megacrit.cardcrawl.core.Settings.WIDTH * 0.75F, com.megacrit.cardcrawl.core.Settings.HEIGHT / 2)); + (AbstractCard) AbstractDungeon.gridSelectScreen.selectedCards.get(1), com.megacrit.cardcrawl.core.Settings.WIDTH * 0.75F, com.megacrit.cardcrawl.core.Settings.HEIGHT / 2)); - AbstractCard curse = new Sapped(); - AbstractDungeon.effectList.add(new ShowCardAndObtainEffect(curse, (float) (Settings.WIDTH * .5F), (float) (Settings.HEIGHT * .75F)));// 66 - AbstractDungeon.player.masterDeck.removeCard((AbstractCard) AbstractDungeon.gridSelectScreen.selectedCards.get(2)); - cards.add(AbstractDungeon.gridSelectScreen.selectedCards.get(2).cardID); - - logMetric(ID, "Desecrated", Collections.singletonList(curse.cardID), cards, null, null, null, null, null, 0, 0, 0, 0, 0, 0); + AbstractDungeon.player.maxHealth -= this.hpAmt; + if (AbstractDungeon.player.currentHealth > AbstractDungeon.player.maxHealth) { + AbstractDungeon.player.currentHealth = AbstractDungeon.player.maxHealth; + } + AbstractDungeon.player.masterDeck.removeCard((AbstractCard) AbstractDungeon.gridSelectScreen.selectedCards.get(1)); + cards.add(AbstractDungeon.gridSelectScreen.selectedCards.get(1).cardID); + logMetric(ID, "Desecrated and lost " + hpAmt + " Max HP."); } AbstractDungeon.gridSelectScreen.selectedCards.clear(); @@ -99,7 +111,7 @@ protected void buttonEffect(int buttonPressed) { this.imageEventText.updateBodyText(DESCRIPTIONSALT[0]); AbstractDungeon.gridSelectScreen.open( com.megacrit.cardcrawl.cards.CardGroup.getGroupWithoutBottledCards(AbstractDungeon.player.masterDeck - .getPurgeableCards()), 3, OPTIONS[2], false, false, false, true); + .getPurgeableCards()), 2, OPTIONS[2], false, false, false, true); this.imageEventText.updateDialogOption(0, OPTIONS[1]); diff --git a/src/main/java/downfall/events/shrines_evil/TransmogrifierEvil.java b/src/main/java/downfall/events/shrines_evil/TransmogrifierEvil.java index 5a6dd9013..ea7930455 100644 --- a/src/main/java/downfall/events/shrines_evil/TransmogrifierEvil.java +++ b/src/main/java/downfall/events/shrines_evil/TransmogrifierEvil.java @@ -2,6 +2,8 @@ package downfall.events.shrines_evil; +import com.megacrit.cardcrawl.cards.curses.Pain; +import downfall.cards.curses.Malfunctioning; import downfall.cards.curses.Sapped; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.core.CardCrawlGame; @@ -42,7 +44,7 @@ public TransmogrifierEvil() { DESCRIPTIONSALT = CardCrawlGame.languagePack.getEventString("downfall:EvilShrines").DESCRIPTIONS; OPTIONSALT = CardCrawlGame.languagePack.getEventString("downfall:EvilShrines").OPTIONS; - this.imageEventText.setDialogOption(OPTIONSALT[2], new Sapped()); + this.imageEventText.setDialogOption(OPTIONSALT[3], new Malfunctioning()); this.imageEventText.setDialogOption(OPTIONS[0]); this.imageEventText.setDialogOption(OPTIONS[1]); @@ -73,7 +75,7 @@ public void update() { AbstractDungeon.gridSelectScreen.selectedCards.clear(); if (bonusShrine3){ - AbstractCard curse = new Sapped(); + AbstractCard curse = new Malfunctioning(); AbstractDungeon.effectList.add(new ShowCardAndObtainEffect(curse, (float) (Settings.WIDTH * .5F), (float) (Settings.HEIGHT / 2)));// 66 obtainedCards.add(curse.cardID); diff --git a/src/main/java/downfall/events/shrines_evil/UpgradeShrineEvil.java b/src/main/java/downfall/events/shrines_evil/UpgradeShrineEvil.java index 1fb8dfcb9..573cff15e 100644 --- a/src/main/java/downfall/events/shrines_evil/UpgradeShrineEvil.java +++ b/src/main/java/downfall/events/shrines_evil/UpgradeShrineEvil.java @@ -2,6 +2,7 @@ package downfall.events.shrines_evil; +import com.megacrit.cardcrawl.cards.curses.Pain; import downfall.cards.curses.Sapped; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.core.CardCrawlGame; @@ -49,7 +50,7 @@ public UpgradeShrineEvil() { OPTIONSALT = CardCrawlGame.languagePack.getEventString("downfall:EvilShrines").OPTIONS; if (AbstractDungeon.player.masterDeck.getUpgradableCards().size() >= 2) { - this.imageEventText.setDialogOption(OPTIONSALT[3], new Sapped()); + this.imageEventText.setDialogOption(OPTIONSALT[4], new Pain()); } else { this.imageEventText.setDialogOption(OPTIONS[3], true); } @@ -79,7 +80,7 @@ public void update() { AbstractDungeon.gridSelectScreen.selectedCards.clear(); if (bonusShrine2){ - AbstractCard curse = new Sapped(); + AbstractCard curse = new Pain(); AbstractDungeon.effectList.add(new ShowCardAndObtainEffect(curse, (Settings.WIDTH * .5F), Settings.HEIGHT * .5F));// 66 logMetric(ID, "Desecrated", Collections.singletonList(curse.cardID), null, null, upgradedCards, null, null, null, diff --git a/src/main/java/downfall/mainmenu/MainMenuAdPatch.java b/src/main/java/downfall/mainmenu/MainMenuAdPatch.java index e1177442e..ad43d3483 100644 --- a/src/main/java/downfall/mainmenu/MainMenuAdPatch.java +++ b/src/main/java/downfall/mainmenu/MainMenuAdPatch.java @@ -59,6 +59,9 @@ private MainMenuAdInfo(String text, String text2, String text3, String text4, St private static ArrayList ads = new ArrayList<>(); static { + // Star of Providence Info + ads.add(new MainMenuAdInfo("", "", "", "", "", "", "https://store.steampowered.com/app/603960/Star_of_Providence/", TextureLoader.getTexture("downfallResources/images/menustuff/"+ TalesAndTacticsPopup.langFolder() +"/menuSOP.png"))); + // T9 Game Info ads.add(new MainMenuAdInfo("", "", "", "", "", "", "https://store.steampowered.com/app/1652250/Tales__Tactics/", TextureLoader.getTexture("downfallResources/images/menustuff/" + TalesAndTacticsPopup.langFolder() + "/menuTNT.png"))); // STS Modding Info @@ -223,10 +226,10 @@ public void update() { btnTint.a = 0.25F; if (InputHelper.justClickedLeft) { CardCrawlGame.sound.play("UI_CLICK_1"); - if (advert.current == ads.get(0)) { - advert.current = ads.get(1); - } else { + if (advert.current == ads.get(2)) { advert.current = ads.get(0); + } else { + advert.current = ads.get(ads.indexOf(advert.current) + 1); } } } else { diff --git a/src/main/java/downfall/monsters/ChangingTotem.java b/src/main/java/downfall/monsters/ChangingTotem.java index d0ad51034..89db65155 100644 --- a/src/main/java/downfall/monsters/ChangingTotem.java +++ b/src/main/java/downfall/monsters/ChangingTotem.java @@ -44,7 +44,7 @@ public ChangingTotem() { AnimationState.TrackEntry e = this.state.setAnimation(0, "Idle", true); e.setTime(e.getEndTime() * MathUtils.random()); - if (AbstractDungeon.ascensionLevel >= 19) { + if (AbstractDungeon.ascensionLevel >= 18) { this.attackDmg = 6; this.secondaryEffect = 2; } else if (AbstractDungeon.ascensionLevel >= 4) { diff --git a/src/main/java/downfall/monsters/DoomedDagger.java b/src/main/java/downfall/monsters/DoomedDagger.java index cf037eb48..aafb98694 100644 --- a/src/main/java/downfall/monsters/DoomedDagger.java +++ b/src/main/java/downfall/monsters/DoomedDagger.java @@ -8,6 +8,7 @@ import com.megacrit.cardcrawl.actions.utility.WaitAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.cards.status.VoidCard; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; @@ -41,8 +42,8 @@ public void takeTurn() { AbstractDungeon.actionManager.addToBottom(new WaitAction(0.3F)); AbstractDungeon.actionManager.addToBottom(new DamageAction(AbstractDungeon.player, this.damage.get(0), AbstractGameAction.AttackEffect.SLASH_HORIZONTAL)); AbstractCard q = new ImpendingDoom(); - CardModifierManager.addModifier(q, new RetainCardMod()); - addToBot(new MakeTempCardInHandAction(q)); + //CardModifierManager.addModifier(q, new RetainCardMod()); + addToBot(new MakeTempCardInDrawPileAction((q), 1, false, true)); break; case 2: AbstractDungeon.actionManager.addToBottom(new ChangeStateAction(this, "SUICIDE")); diff --git a/src/main/java/downfall/monsters/FleeingMerchant.java b/src/main/java/downfall/monsters/FleeingMerchant.java index fb1ab8294..7fb8b147f 100644 --- a/src/main/java/downfall/monsters/FleeingMerchant.java +++ b/src/main/java/downfall/monsters/FleeingMerchant.java @@ -101,7 +101,15 @@ public FleeingMerchant() { e.setTime(e.getEndTime() * MathUtils.random()); e.setTimeScale(1.0F); - type = EnemyType.NORMAL; + // if (AbstractDungeon.floorNum >= 50) { + // type = EnemyType.BOSS; + // } + + // if (!(AbstractDungeon.floorNum < 50)) { + type = EnemyType.NORMAL; + // } + + dialogX = -200.0F * Settings.scale; dialogY = 10.0F * Settings.scale; diff --git a/src/main/java/downfall/monsters/ForgetfulTotem.java b/src/main/java/downfall/monsters/ForgetfulTotem.java index 0231d1fda..416d0628c 100644 --- a/src/main/java/downfall/monsters/ForgetfulTotem.java +++ b/src/main/java/downfall/monsters/ForgetfulTotem.java @@ -50,7 +50,7 @@ public ForgetfulTotem() { AnimationState.TrackEntry e = this.state.setAnimation(0, "Idle", true); e.setTime(e.getEndTime() * MathUtils.random()); - if (AbstractDungeon.ascensionLevel >= 19) { + if (AbstractDungeon.ascensionLevel >= 18) { this.attackDmg = 6; this.secondaryEffect = 2; } else if (AbstractDungeon.ascensionLevel >= 4) { diff --git a/src/main/java/downfall/monsters/GrowingTotem.java b/src/main/java/downfall/monsters/GrowingTotem.java index e4a70a0f0..5fe7c8f31 100644 --- a/src/main/java/downfall/monsters/GrowingTotem.java +++ b/src/main/java/downfall/monsters/GrowingTotem.java @@ -52,7 +52,7 @@ public GrowingTotem() { AnimationState.TrackEntry e = this.state.setAnimation(0, "Idle", true); e.setTime(e.getEndTime() * MathUtils.random()); - if (AbstractDungeon.ascensionLevel >= 19) { + if (AbstractDungeon.ascensionLevel >= 18) { this.attackDmg = 6; this.secondaryEffect = 2; } else if (AbstractDungeon.ascensionLevel >= 4) { diff --git a/src/main/java/downfall/monsters/Neow4Life30Heal.java b/src/main/java/downfall/monsters/Neow4Life30Heal.java index 4b0f102f2..6d16b2960 100644 --- a/src/main/java/downfall/monsters/Neow4Life30Heal.java +++ b/src/main/java/downfall/monsters/Neow4Life30Heal.java @@ -90,11 +90,11 @@ public Neow4Life30Heal() { e.setTime(e.getEndTime() * MathUtils.random()); if (AbstractDungeon.ascensionLevel >= 4) { + this.damage.add(new DamageInfo(this, 12)); //Eye Beam Damage + this.damage.add(new DamageInfo(this, 40)); //Scream Damage + } else { this.damage.add(new DamageInfo(this, 9)); //Eye Beam Damage this.damage.add(new DamageInfo(this, 25)); //Scream Damage - } else { - this.damage.add(new DamageInfo(this, 7)); //Eye Beam Damage - this.damage.add(new DamageInfo(this, 20)); //Scream Damage } this.strAmt = 2; //Strength Scaling for growth ability diff --git a/src/main/java/downfall/monsters/NeowBoss.java b/src/main/java/downfall/monsters/NeowBoss.java index 3bb45d118..95069e6a5 100644 --- a/src/main/java/downfall/monsters/NeowBoss.java +++ b/src/main/java/downfall/monsters/NeowBoss.java @@ -85,14 +85,14 @@ public NeowBoss() { type = EnemyType.ELITE; this.baseDrawX = drawX; - + StrGain = 1; if (AbstractDungeon.ascensionLevel >= 9) { StrGain = 2; } else { setHp(600); } if (AbstractDungeon.ascensionLevel >= 18) { - StrGain = 2; + StrGain = 3; } diff --git a/src/main/java/downfall/monsters/NeowBossFinal.java b/src/main/java/downfall/monsters/NeowBossFinal.java index 15ad54a08..489648826 100644 --- a/src/main/java/downfall/monsters/NeowBossFinal.java +++ b/src/main/java/downfall/monsters/NeowBossFinal.java @@ -30,6 +30,7 @@ import downfall.powers.neowpowers.*; import downfall.vfx.combat.FakeDeathScene; import guardian.vfx.SmallLaserEffectColored; +import hermit.cards.ImpendingDoom; import java.util.ArrayList; @@ -69,7 +70,7 @@ public class NeowBossFinal extends AbstractMonster { private int buffCount = 0; public NeowBossFinal() { - super(NAME, ID, 500, HB_X, HB_Y, HB_W, HB_H, "images/npcs/neow/skeleton.png"); + super(NAME, ID, 600, HB_X, HB_Y, HB_W, HB_H, "images/npcs/neow/skeleton.png"); this.loadAnimation("images/npcs/neow/skeleton.atlas", "images/npcs/neow/skeleton.json", 1.0F); @@ -80,20 +81,30 @@ public NeowBossFinal() { this.baseDrawX = drawX; if (AbstractDungeon.ascensionLevel >= 9) { - setHp(600); + setHp(800); } else { - setHp(550); + setHp(750); } AnimationState.TrackEntry e = this.state.setAnimation(0, "idle", true); e.setTime(e.getEndTime() * MathUtils.random()); + + //When adjusting these numbers, remember to keep the Heart Blessings in mind. + //The player has +1 dexterity and +10 temp hp, so they will be blocking for 4/5 extra than typically, and that they have a + //good buffer of Temp HP to get through the first cycle much easier. + //Not to mention the lack of Beat of Death, which makes Block much more permanent throughout this fight. + //This fight should test consistency and overall scaling to surpass the God of Life scaling that Neow has. + //Her buffs should reflect this fact and test consistency by increasing God of Life and + //gaining buffs like Artifact. (To test strategies that rely on a debuff like Goop, Soulburn, or Doom) + + if (AbstractDungeon.ascensionLevel >= 4) { - this.damage.add(new DamageInfo(this, 9)); //Eye Beam Damage - this.damage.add(new DamageInfo(this, 25)); //Scream Damage + this.damage.add(new DamageInfo(this, 10)); //Eye Beam Damage - 45 damage first cycle + this.damage.add(new DamageInfo(this, 44)); //Scream Damage - 66 damage first cycle } else { - this.damage.add(new DamageInfo(this, 7)); //Eye Beam Damage - this.damage.add(new DamageInfo(this, 20)); //Scream Damage + this.damage.add(new DamageInfo(this, 8)); //Eye Beam Damage - 32 damage first cycle + this.damage.add(new DamageInfo(this, 33)); //Scream Damage - 50 damage first cycle } this.strAmt = 2; //Strength Scaling for growth ability @@ -114,11 +125,12 @@ public void curses() { AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(AbstractDungeon.player, this, new WeakPower(AbstractDungeon.player, 3, true), 3)); AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(AbstractDungeon.player, this, new FrailPower(AbstractDungeon.player, 3, true), 3)); - AbstractDungeon.actionManager.addToBottom(new MakeTempCardInDrawPileAction(new Aged(), 1, true, false, false, (float) Settings.WIDTH * 0.18F, (float) Settings.HEIGHT / 2.0F)); - AbstractDungeon.actionManager.addToBottom(new MakeTempCardInDrawPileAction(new Bewildered(), 1, true, false, false, (float) Settings.WIDTH * 0.34F, (float) Settings.HEIGHT / 2.0F)); - AbstractDungeon.actionManager.addToBottom(new MakeTempCardInDrawPileAction(new Scatterbrained(), 1, true, false, false, (float) Settings.WIDTH * 0.5F, (float) Settings.HEIGHT / 2.0F)); + + AbstractDungeon.actionManager.addToBottom(new MakeTempCardInDrawPileAction(new Haunted(), 1, true, false, false, (float) Settings.WIDTH * 0.18F, (float) Settings.HEIGHT / 2.0F)); + AbstractDungeon.actionManager.addToBottom(new MakeTempCardInDrawPileAction(new Scatterbrained(), 1, true, false, false, (float) Settings.WIDTH * 0.34F, (float) Settings.HEIGHT / 2.0F)); + AbstractDungeon.actionManager.addToBottom(new MakeTempCardInDrawPileAction(new ImpendingDoom(), 1, true, false, false, (float) Settings.WIDTH * 0.5F, (float) Settings.HEIGHT / 2.0F)); AbstractDungeon.actionManager.addToBottom(new MakeTempCardInDrawPileAction(new Icky(), 1, true, false, false, (float) Settings.WIDTH * 0.66F, (float) Settings.HEIGHT / 2.0F)); - AbstractDungeon.actionManager.addToBottom(new MakeTempCardInDrawPileAction(new Malfunctioning(), 1, true, false, false, (float) Settings.WIDTH * 0.82F, (float) Settings.HEIGHT / 2.0F)); + AbstractDungeon.actionManager.addToBottom(new MakeTempCardInDrawPileAction(new Bewildered(), 1, true, false, false, (float) Settings.WIDTH * 0.82F, (float) Settings.HEIGHT / 2.0F)); // ArrayList ac = downfallMod.getRandomDownfallCurse(4); @@ -141,30 +153,36 @@ public void usePreBattleAction() { // halfDead = true; AbstractDungeon.getCurrRoom().playBgmInstantly("BOSS_ENDING"); - int beatAmount = 3; + int beatAmount = 3; //a19 healing, a18 healing is this -1 // if (AbstractDungeon.ascensionLevel >= 19) { // beatAmount += 1; // } int invincibleAmt = 250; -// if (AbstractDungeon.ascensionLevel >= 19) { -// invincibleAmt -= 50; -// } a19 difficulty setting is changed from god of life 2(3), invincible 300(250) , to, you (dont) get heart's favor + if (AbstractDungeon.ascensionLevel >= 19) { + invincibleAmt -= 50; + }// a19 difficulty setting is changed from god of life 2(3), invincible 300(250) , to, you (dont) get heart's favor - AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this, this, new NeowInvulnerablePower(this, beatAmount))); + if (AbstractDungeon.ascensionLevel >= 19) { + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this, this, new NeowInvulnerablePower(this, beatAmount))); + } + + if (AbstractDungeon.ascensionLevel < 19) { + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this, this, new NeowInvulnerablePower(this, beatAmount-1))); + } for (int i = 0; i < 3; i++) { AbstractDungeon.actionManager.addToBottom(new WaitAction(0.1F)); } AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this, this, new NeowInvinciblePower(this, invincibleAmt), invincibleAmt)); - if (AbstractDungeon.ascensionLevel < 19) { - for (int i = 0; i < 3; i++) { - AbstractDungeon.actionManager.addToBottom(new WaitAction(0.1F)); - } - AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(AbstractDungeon.player, null, new HeartsFavorPower(this, 2), 2)); - - } +// if (AbstractDungeon.ascensionLevel < 19) { +// for (int i = 0; i < 3; i++) { +// AbstractDungeon.actionManager.addToBottom(new WaitAction(0.1F)); +// } +// AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(AbstractDungeon.player, null, new HeartsFavorPower(this, 2), 2)); +// +// } /* for (int i = 0; i < 3; i++) { @@ -224,30 +242,90 @@ public void takeTurn() { // nukeDebuffs(); //AbstractDungeon.actionManager.addToBottom(new RemoveSpecificPowerAction(this, this, "Shackled")); - AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this, this, new NeowInvulnerablePower(this, 2))); - AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this, this, new StrengthPower(this, 6), 6)); + + // nerfed healing again + //Neow will only gain extra God of Life ONCE similar to the corrupt heart + +// int buf = 0; +// if (this.hasPower(NeowInvulnerablePower.POWER_ID)) { +// buf = this.getPower(NeowInvulnerablePower.POWER_ID).amount; +// } +// if (buf < 5) { +// AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this, this, new NeowInvulnerablePower(this, 1))); +// } + + if (AbstractDungeon.ascensionLevel >= 19) { + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this, this, new StrengthPower(this, 9), 9)); + // this is +27 damage for the multi hit, +36 total, 8 damage over the a19- version + } + if (AbstractDungeon.ascensionLevel < 19) { + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this, this, new StrengthPower(this, 7), 7)); + //this is +21 damage for the multi hit, +28 total + } switch(this.buffCount) { case 0: - AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this, this, new ArtifactPower(this, 3), 3)); + if (AbstractDungeon.ascensionLevel >= 19) { + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this, this, new ArtifactPower(this, 3), 3)); + //3 artifact prevents weak + vuln + doom and should make Collector's life harder - and test her artifact piercing and consistency, + //but should act as a minor annoyance for other characters, even for Hexa or Slime Boss. + } + if (AbstractDungeon.ascensionLevel < 19) { + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this, this, new ArtifactPower(this, 2), 3)); + //easier pre a19 version of artifact, still blocks an instance of weak + vuln + } break; case 1: - AbstractDungeon.actionManager.addToBottom(new HealAction(this, this, 100)); + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this, this, new NeowInvulnerablePower(this, 1))); + if (AbstractDungeon.ascensionLevel >= 19) { + AbstractDungeon.actionManager.addToBottom(new HealAction(this, this, 50)); + //this effectively makes her HP 700 - Not factoring in God of Life. + } + if (AbstractDungeon.ascensionLevel < 19) { + AbstractDungeon.actionManager.addToBottom(new HealAction(this, this, 30)); + //this pre a19 version effectively makes her hp 675, and 625 pre a4 - Not factoring in God of Life. + } + // AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this, this, new BeatOfDeathPower(this, 1), 1)); break; case 2: - AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this, this, new RegenerateMonsterPower(this, 50))); + if (AbstractDungeon.ascensionLevel >= 19) { + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this, this, new RegenerateMonsterPower(this, 50))); + //this is the part where it becomes significantly harder. If you factor in the God of Life Neow already has much more total HP than + //the corrupt heart, and she can easily reach 1000~ HP total depending on the rate that the player uses cards. + } + if (AbstractDungeon.ascensionLevel < 19) { + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this, this, new RegenerateMonsterPower(this, 30))); + //this lessened Regenerate should be significantly easier to deal with + } break; case 3: - AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this, this, new StrengthPower(this, 10), 10)); + if (AbstractDungeon.ascensionLevel >= 19) { + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this, this, new StrengthPower(this, 15), 10)); + //this is +45 damage on the multihit, +60 damage total. + } + if (AbstractDungeon.ascensionLevel < 19) { + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this, this, new StrengthPower(this, 12), 8)); + //this is +36 damage on the multihit, +48 damage total. + } break; default: - AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this, this, new StrengthPower(this, 30), 30)); + if (AbstractDungeon.ascensionLevel >= 19) { + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this, this, new StrengthPower(this, 30), 30)); + //this is +90 damage on the multihit, +120 damage total + //basically a slightly kinder version of the heart getting +50 strength, especially since Neow always does the big hit before the multihit + //not a total "now die" buff but pretty close + } + if (AbstractDungeon.ascensionLevel < 19) { + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this, this, new StrengthPower(this, 20), 20)); + //this is +60 damage on the multihit, +80 damage total + //I could see a player living through the multihit on this one + } } ++this.buffCount; -// AbstractDungeon.actionManager.addToBottom(new GainBlockAction(this, this.blockAmt)); + this.addToBot(new GainBlockAction(this, this, 20)); // if (hasPower(TrueNeowPower.POWER_ID)){ // getPower(TrueNeowPower.POWER_ID).onSpecificTrigger(); // } diff --git a/src/main/java/downfall/monsters/gauntletbosses/Defect.java b/src/main/java/downfall/monsters/gauntletbosses/Defect.java index 86792397d..fcb866407 100644 --- a/src/main/java/downfall/monsters/gauntletbosses/Defect.java +++ b/src/main/java/downfall/monsters/gauntletbosses/Defect.java @@ -6,10 +6,7 @@ import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.common.*; import com.megacrit.cardcrawl.cards.DamageInfo; -import com.megacrit.cardcrawl.cards.blue.Buffer; -import com.megacrit.cardcrawl.cards.blue.CoreSurge; -import com.megacrit.cardcrawl.cards.blue.Defend_Blue; -import com.megacrit.cardcrawl.cards.blue.Strike_Blue; +import com.megacrit.cardcrawl.cards.blue.*; import com.megacrit.cardcrawl.cards.curses.Doubt; import com.megacrit.cardcrawl.cards.green.Strike_Green; import com.megacrit.cardcrawl.characters.AbstractPlayer; @@ -23,6 +20,7 @@ import downfall.powers.DrawReductionPowerPlus; import downfall.powers.gauntletpowers.MonsterVigor; import downfall.powers.gauntletpowers.OnDeathEveryoneBuffer; +import hermit.cards.Maintenance; public class Defect extends GauntletBoss { @@ -88,11 +86,15 @@ public void takeTurn() { addToBot(new GainBlockAction(this, 10 + (dex * 2))); break; case 4: - addToBot(new DamageAction(AbstractDungeon.player, this.damage.get(2), AbstractGameAction.AttackEffect.BLUNT_HEAVY)); - addToBot(new ApplyPowerAction(this, this, new ArtifactPower(this, 1), 1)); - - if (hasPower(MonsterVigor.POWER_ID)) { - addToBot(new RemoveSpecificPowerAction(this, this, MonsterVigor.POWER_ID)); + if (AbstractDungeon.ascensionLevel < 18) { + this.addToBot(new ApplyPowerAction(this, this, new FocusPower(this, -1), -1)); + this.addToBot(new ApplyPowerAction(this, this, new StrengthPower(this, 1), 1)); + this.addToBot(new ApplyPowerAction(this, this, new DexterityPower(this, 1), 1)); + } + if (AbstractDungeon.ascensionLevel >= 18) { + this.addToBot(new ApplyPowerAction(this, this, new FocusPower(this, -2), -2)); + this.addToBot(new ApplyPowerAction(this, this, new StrengthPower(this, 2), 2)); + this.addToBot(new ApplyPowerAction(this, this, new DexterityPower(this, 2), 2)); } break; case 5: @@ -121,8 +123,13 @@ private void bossMove() { setMove(moveName(Defend_Blue.ID, Defend_Blue.ID), (byte) 3, Intent.DEFEND); break; case 3: - isAttacking = true; - setMove(moveName(CoreSurge.ID), (byte) 4, Intent.ATTACK_BUFF, this.damage.get(2).base); + isAttacking = false; + if (AbstractDungeon.ascensionLevel < 18) { + setMove(moveName(Reprogram.ID), (byte) 4, Intent.BUFF); + } + if (AbstractDungeon.ascensionLevel >= 18) { + setMove(moveName(Reprogram.ID) + "+", (byte) 4, Intent.BUFF); + } break; } } diff --git a/src/main/java/downfall/monsters/gauntletbosses/GauntletBoss.java b/src/main/java/downfall/monsters/gauntletbosses/GauntletBoss.java index 52caa2ffb..6527fe754 100644 --- a/src/main/java/downfall/monsters/gauntletbosses/GauntletBoss.java +++ b/src/main/java/downfall/monsters/gauntletbosses/GauntletBoss.java @@ -39,7 +39,6 @@ public String moveName(String ID, String ID2) { public void usePreBattleAction() { AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this, this, new DexterityPower(this, 3), 3)); AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this, this, new StrengthPower(this, 3), 3)); - } @Override diff --git a/src/main/java/downfall/monsters/gauntletbosses/Hermit.java b/src/main/java/downfall/monsters/gauntletbosses/Hermit.java index e0c5fc664..f4de39512 100644 --- a/src/main/java/downfall/monsters/gauntletbosses/Hermit.java +++ b/src/main/java/downfall/monsters/gauntletbosses/Hermit.java @@ -84,8 +84,17 @@ public void takeTurn() { addToBot(new ApplyPowerAction(this, this, new PlatedArmorPower(this, 4), 4)); break; case 5: - addToBot(new ApplyPowerAction(this, this, new StrengthPower(this, 3), 3)); - addToBot(new ApplyPowerAction(this, this, new DexterityPower(this, 3), 3)); + + if (AbstractDungeon.ascensionLevel >= 18) { + addToBot(new ApplyPowerAction(this, this, new StrengthPower(this, 4), 4)); + addToBot(new ApplyPowerAction(this, this, new DexterityPower(this, 2), 2)); + } + + if (AbstractDungeon.ascensionLevel < 18) { + addToBot(new ApplyPowerAction(this, this, new StrengthPower(this, 3), 3)); + addToBot(new ApplyPowerAction(this, this, new DexterityPower(this, 1), 1)); + } + break; } @@ -118,7 +127,13 @@ protected void getMove(int num) { turnNum++; if (turnNum == 5) { isAttacking = false; - setMove(moveName(Maintenance.ID), (byte) 5, Intent.BUFF); + if (AbstractDungeon.ascensionLevel < 18) { + setMove(moveName(Maintenance.ID), (byte) 5, Intent.BUFF); + } + + if (AbstractDungeon.ascensionLevel >= 18) { + setMove(moveName(Maintenance.ID) + "+", (byte) 5, Intent.BUFF); + } } else { if (isThird && turnNum > 1 && ally1 != null && ally2 != null) { diff --git a/src/main/java/downfall/monsters/gauntletbosses/Ironclad.java b/src/main/java/downfall/monsters/gauntletbosses/Ironclad.java index 1f33753b8..29b9c7eb8 100644 --- a/src/main/java/downfall/monsters/gauntletbosses/Ironclad.java +++ b/src/main/java/downfall/monsters/gauntletbosses/Ironclad.java @@ -1,11 +1,13 @@ package downfall.monsters.gauntletbosses; import charbosses.core.EnemyEnergyManager; +import charbosses.powers.cardpowers.EnemyWraithFormPower; import com.badlogic.gdx.math.MathUtils; import com.esotericsoftware.spine.AnimationState; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.common.*; import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.cards.blue.Buffer; import com.megacrit.cardcrawl.cards.blue.Defend_Blue; import com.megacrit.cardcrawl.cards.curses.Doubt; import com.megacrit.cardcrawl.cards.red.Bash; @@ -94,7 +96,12 @@ public void takeTurn() { } break; case 5: - addToBot(new ApplyPowerAction(this, this, new EnemyDemonFormPower(this, 2), 2)); + if (AbstractDungeon.ascensionLevel >= 18) { + addToBot(new ApplyPowerAction(this, this, new EnemyDemonFormPower(this, 3), 3)); + } + if (AbstractDungeon.ascensionLevel < 18) { + addToBot(new ApplyPowerAction(this, this, new EnemyDemonFormPower(this, 2), 2)); + } break; } @@ -104,6 +111,13 @@ public void takeTurn() { private void bossMove() { int rnd = AbstractDungeon.cardRandomRng.random(0, 3); + if (this.hasPower(EnemyDemonFormPower.POWER_ID)) { + if (rnd == 2) { + while (rnd == 2) { + rnd = AbstractDungeon.cardRandomRng.random(0, 3); + } + } + } switch (rnd) { case 0: isAttacking = true; @@ -121,14 +135,22 @@ private void bossMove() { isAttacking = true; setMove(moveName(Bash.ID), (byte) 4, Intent.ATTACK_DEBUFF, this.damage.get(2).base); break; - } + } } protected void getMove(int num) { turnNum++; if (turnNum == 5) { isAttacking = false; - setMove(moveName(DemonForm.ID), (byte) 5, Intent.BUFF); + + if (AbstractDungeon.ascensionLevel < 18) { + setMove(moveName(DemonForm.ID), (byte) 5, Intent.BUFF); + } + + if (AbstractDungeon.ascensionLevel >= 18) { + setMove(moveName(DemonForm.ID) + "+", (byte) 5, Intent.BUFF); + } + } else { if (isThird && turnNum > 1 && ally1 != null && ally2 != null) { diff --git a/src/main/java/downfall/monsters/gauntletbosses/Silent.java b/src/main/java/downfall/monsters/gauntletbosses/Silent.java index 2b41e3f16..01eef57b2 100644 --- a/src/main/java/downfall/monsters/gauntletbosses/Silent.java +++ b/src/main/java/downfall/monsters/gauntletbosses/Silent.java @@ -14,6 +14,7 @@ import com.megacrit.cardcrawl.cards.green.LegSweep; import com.megacrit.cardcrawl.cards.green.Strike_Green; import com.megacrit.cardcrawl.cards.green.WraithForm; +import com.megacrit.cardcrawl.cards.red.DemonForm; import com.megacrit.cardcrawl.cards.red.Strike_Red; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.core.CardCrawlGame; @@ -92,7 +93,15 @@ public void takeTurn() { addToBot(new GainBlockAction(this, 11)); break; case 5: - addToBot(new ApplyPowerAction(this, this, new IntangiblePower(this, 2), 2)); + + if (AbstractDungeon.ascensionLevel >= 18) { + addToBot(new ApplyPowerAction(this, this, new IntangiblePower(this, 3), 3)); + } + + if (AbstractDungeon.ascensionLevel < 18) { + addToBot(new ApplyPowerAction(this, this, new IntangiblePower(this, 2), 2)); + } + addToBot(new ApplyPowerAction(this, this, new EnemyWraithFormPower(this, -1), -1)); break; } @@ -130,7 +139,16 @@ protected void getMove(int num) { turnNum++; if (turnNum == 5) { isAttacking = false; - setMove(moveName(WraithForm.ID), (byte) 5, Intent.BUFF); + + if (AbstractDungeon.ascensionLevel < 18) { + setMove(moveName(WraithForm.ID), (byte) 5, Intent.BUFF); + } + + if (AbstractDungeon.ascensionLevel >= 18) { + setMove(moveName(WraithForm.ID) + "+", (byte) 5, Intent.BUFF); + } + + } else { if (isThird && turnNum > 1 && ally1 != null && ally2 != null) { diff --git a/src/main/java/downfall/monsters/gauntletbosses/Watcher.java b/src/main/java/downfall/monsters/gauntletbosses/Watcher.java index bc95ff6db..992db861c 100644 --- a/src/main/java/downfall/monsters/gauntletbosses/Watcher.java +++ b/src/main/java/downfall/monsters/gauntletbosses/Watcher.java @@ -3,6 +3,7 @@ import charbosses.cards.purple.EnWish; import charbosses.cards.purple.EnWishPlated; import charbosses.core.EnemyEnergyManager; +import charbosses.powers.cardpowers.EnemyEnergyDownPower; import com.esotericsoftware.spine.AnimationState; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.common.*; @@ -10,10 +11,7 @@ import com.megacrit.cardcrawl.cards.DamageInfo; import com.megacrit.cardcrawl.cards.blue.Defend_Blue; import com.megacrit.cardcrawl.cards.curses.Doubt; -import com.megacrit.cardcrawl.cards.purple.Defend_Watcher; -import com.megacrit.cardcrawl.cards.purple.Strike_Purple; -import com.megacrit.cardcrawl.cards.purple.Wallop; -import com.megacrit.cardcrawl.cards.purple.Wish; +import com.megacrit.cardcrawl.cards.purple.*; import com.megacrit.cardcrawl.cards.red.Strike_Red; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.core.CardCrawlGame; @@ -27,6 +25,7 @@ import downfall.powers.gauntletpowers.MonsterVigor; import downfall.powers.gauntletpowers.OnDeathEveryoneBuffer; import downfall.powers.gauntletpowers.OnDeathEveryoneVigor; +import hermit.cards.Maintenance; public class Watcher extends GauntletBoss { @@ -95,7 +94,18 @@ public void takeTurn() { } break; case 5: - addToBot(new ApplyPowerAction(this, this, new PlatedArmorPower(this, 8), 8)); + //addToBot(new ApplyPowerAction(this, this, new PlatedArmorPower(this, 8), 8)); + if (AbstractDungeon.ascensionLevel >= 18) { + this.addToBot(new ApplyPowerAction(this, this, new StrengthPower(this, 4), 4)); + this.addToBot(new ApplyPowerAction(this, this, new DexterityPower(this, 4), 4)); + } + + if (AbstractDungeon.ascensionLevel < 18) { + this.addToBot(new ApplyPowerAction(this, this, new StrengthPower(this, 3), 3)); + this.addToBot(new ApplyPowerAction(this, this, new DexterityPower(this, 3), 3)); + } + + this.addToBot(new ApplyPowerAction(this, this, new EnemyEnergyDownPower(this, 1,true), 1)); break; } @@ -130,7 +140,13 @@ protected void getMove(int num) { turnNum++; if (turnNum == 5) { isAttacking = false; - setMove(moveName(Wish.ID) + "+", (byte) 5, Intent.BUFF); + if (AbstractDungeon.ascensionLevel < 18) { + setMove(moveName(Fasting.ID), (byte) 5, Intent.BUFF); + } + + if (AbstractDungeon.ascensionLevel >= 18) { + setMove(moveName(Fasting.ID) + "+", (byte) 5, Intent.BUFF); + } } else { if (isThird && turnNum > 1 && ally1 != null && ally2 != null) { if (!ally1.isDeadOrEscaped() && !ally2.isDeadOrEscaped() && ally1.isAttacking && ally2.isAttacking) { diff --git a/src/main/java/downfall/patches/ApotheosisStasisFunctionPatch.java b/src/main/java/downfall/patches/ApotheosisStasisFunctionPatch.java index 324741e43..40efccf07 100644 --- a/src/main/java/downfall/patches/ApotheosisStasisFunctionPatch.java +++ b/src/main/java/downfall/patches/ApotheosisStasisFunctionPatch.java @@ -1,6 +1,7 @@ package downfall.patches; import automaton.FunctionHelper; +import awakenedOne.ui.OrbitingSpells; import basemod.ReflectionHacks; import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; import com.evacipated.cardcrawl.modthespire.lib.SpirePrefixPatch; @@ -25,6 +26,7 @@ public static class TimeToLearn { public static void Prefix(ApotheosisAction instance) { float duration = (float) ReflectionHacks.getPrivate(instance, AbstractGameAction.class, "duration"); if (duration == Settings.ACTION_DUR_MED) { + OrbitingSpells.upgradeall(); for (AbstractOrb o : AbstractDungeon.player.orbs) { if (o instanceof StasisOrb) { ((StasisOrb) o).stasisCard.upgrade(); diff --git a/src/main/java/downfall/patches/BanCards.java b/src/main/java/downfall/patches/BanCards.java index f742bf690..0523c5e0b 100644 --- a/src/main/java/downfall/patches/BanCards.java +++ b/src/main/java/downfall/patches/BanCards.java @@ -1,9 +1,21 @@ package downfall.patches; +import automaton.AutomatonChar; +import awakenedOne.AwakenedOneChar; +import champ.ChampChar; +import collector.CollectorChar; import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.cards.colorless.SadisticNature; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.helpers.CardLibrary; +import downfall.downfallMod; +import expansioncontent.patches.CardColorEnumPatch; +import guardian.characters.GuardianCharacter; +import slimebound.characters.SlimeboundCharacter; +import theHexaghost.TheHexaghost; + +import static expansioncontent.expansionContentMod.*; public class BanCards { @SpirePatch( @@ -17,6 +29,58 @@ public static void Postfix(AbstractDungeon __instance) { AbstractDungeon.colorlessCardPool.group.removeIf(c -> c instanceof SadisticNature); AbstractDungeon.srcColorlessCardPool.group.removeIf(c -> c instanceof SadisticNature); } + + if (!EvilModeCharacterSelect.evilMode && downfallMod.contentSharing_colorlessCards) { + for (AbstractCard q : CardLibrary.getAllCards()) { + if (q.rarity != AbstractCard.CardRarity.SPECIAL && q.color == CardColorEnumPatch.CardColorPatch.BOSS) { + + if (AbstractDungeon.player instanceof SlimeboundCharacter) { + if (q.hasTag(STUDY_SLIMEBOSS)) { + continue; + } + } + + if (AbstractDungeon.player instanceof TheHexaghost) { + if (q.hasTag(STUDY_HEXAGHOST)) { + continue; + } + } + + if (AbstractDungeon.player instanceof GuardianCharacter) { + if (q.hasTag(STUDY_GUARDIAN)) { + continue; + } + } + + if (AbstractDungeon.player instanceof ChampChar) { + if (q.hasTag(STUDY_CHAMP)) { + continue; + } + } + + if (AbstractDungeon.player instanceof AutomatonChar) { + if (q.hasTag(STUDY_AUTOMATON)) { + continue; + } + } + + if (AbstractDungeon.player instanceof CollectorChar) { + if (q.hasTag(STUDY_COLLECTOR)) { + continue; + } + } + + if (AbstractDungeon.player instanceof AwakenedOneChar) { + if (q.hasTag(STUDY_AWAKENEDONE)) { + continue; + } + } + AbstractCard r = q.makeCopy(); + AbstractDungeon.colorlessCardPool.group.add(r); + AbstractDungeon.srcColorlessCardPool.group.add(r); + } + } + } } } } \ No newline at end of file diff --git a/src/main/java/downfall/patches/BanSharedContentPatch.java b/src/main/java/downfall/patches/BanSharedContentPatch.java index fa9c1911e..66e8c2efc 100644 --- a/src/main/java/downfall/patches/BanSharedContentPatch.java +++ b/src/main/java/downfall/patches/BanSharedContentPatch.java @@ -1,15 +1,19 @@ package downfall.patches; import automaton.AutomatonChar; +import automaton.potions.BurnAndBuffPotion; import automaton.relics.BronzeIdol; import automaton.relics.DecasWashers; import automaton.relics.DonusWashers; -import automaton.relics.MakeshiftBattery; +import awakenedOne.AwakenedOneChar; +import awakenedOne.relics.*; import champ.ChampChar; +import champ.potions.CounterstrikePotion; import champ.relics.Barbells; import champ.relics.DeflectingBracers; import champ.relics.DuelingGlove; import collector.CollectorChar; +import collector.cards.WhirlingFlame; import collector.relics.*; import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; import com.megacrit.cardcrawl.characters.AbstractPlayer; @@ -17,26 +21,29 @@ import com.megacrit.cardcrawl.helpers.PotionHelper; import downfall.cards.curses.*; import downfall.downfallMod; -import downfall.events.HeartEvent; import expansioncontent.actions.RandomCardWithTagAction; import expansioncontent.cards.*; +import expansioncontent.potions.BossPotion; import expansioncontent.relics.StudyCardRelic; -import gremlin.relics.ImpeccablePecs; +import gremlin.characters.GremlinCharacter; +import gremlin.potions.WizPotion; import gremlin.relics.PricklyShields; import gremlin.relics.SupplyScroll; import guardian.characters.GuardianCharacter; +import guardian.potions.BlockOnCardUsePotion; import guardian.relics.BottledAnomaly; import guardian.relics.GemstoneGun; import guardian.relics.PocketSentry; +import hermit.characters.hermit; import hermit.relics.BloodyTooth; import hermit.relics.BrassTacks; import hermit.relics.RyeStalk; import slimebound.characters.SlimeboundCharacter; +import slimebound.potions.ThreeZeroPotion; import slimebound.relics.PreparedRelic; import slimebound.relics.StickyStick; -import sneckomod.SneckoMod; import sneckomod.TheSnecko; -import sneckomod.cards.unknowns.UnknownClass; +import sneckomod.potions.MuddlingPotion; import sneckomod.relics.BlankCard; import sneckomod.relics.SneckoTalon; import sneckomod.relics.SuperSneckoEye; @@ -71,12 +78,33 @@ public static void Postfix(AbstractDungeon __instance) { AbstractDungeon.colorlessCardPool.removeCard(HyperBeam.ID); AbstractDungeon.colorlessCardPool.removeCard(LastStand.ID); AbstractDungeon.colorlessCardPool.removeCard(ShapePower.ID); - AbstractDungeon.colorlessCardPool.removeCard(PrepareCrush.ID); + AbstractDungeon.colorlessCardPool.removeCard(SuperPrepareCrush.ID); AbstractDungeon.colorlessCardPool.removeCard(QuickStudy.ID); AbstractDungeon.colorlessCardPool.removeCard(StudyTheSpire.ID); AbstractDungeon.colorlessCardPool.removeCard(YouAreMine.ID); AbstractDungeon.colorlessCardPool.removeCard(InvincibleStrength.ID); + AbstractDungeon.colorlessCardPool.removeCard(BeatOfDeath.ID); + AbstractDungeon.colorlessCardPool.removeCard(BloodBarrage.ID); + AbstractDungeon.colorlessCardPool.removeCard(ChargeUp.ID); + AbstractDungeon.colorlessCardPool.removeCard(DoubleAct.ID); + AbstractDungeon.colorlessCardPool.removeCard(FaceSlap.ID); + AbstractDungeon.colorlessCardPool.removeCard(Flail.ID); + AbstractDungeon.colorlessCardPool.removeCard(GoopSpray.ID); + AbstractDungeon.colorlessCardPool.removeCard(ManipulateTime.ID); + AbstractDungeon.colorlessCardPool.removeCard(Pandemonium.ID); + AbstractDungeon.colorlessCardPool.removeCard(PeekPages.ID); + AbstractDungeon.colorlessCardPool.removeCard(SuperBloodthirst.ID); + AbstractDungeon.colorlessCardPool.removeCard(SuperBodyCrash.ID); + AbstractDungeon.colorlessCardPool.removeCard(SuperClobber.ID); + + AbstractDungeon.colorlessCardPool.removeCard(SuperEtherStep.ID); + AbstractDungeon.colorlessCardPool.removeCard(SuperGhostShield.ID); + AbstractDungeon.colorlessCardPool.removeCard(SuperLivingWall.ID); + AbstractDungeon.colorlessCardPool.removeCard(SuperSomberShield.ID); + AbstractDungeon.colorlessCardPool.removeCard(TakeFlight.ID); + AbstractDungeon.colorlessCardPool.removeCard(Virus.ID); + AbstractDungeon.srcColorlessCardPool.removeCard(AwakenDeath.ID); AbstractDungeon.srcColorlessCardPool.removeCard(Chronoboost.ID); AbstractDungeon.srcColorlessCardPool.removeCard(DashGenerateEvil.ID); @@ -85,12 +113,33 @@ public static void Postfix(AbstractDungeon __instance) { AbstractDungeon.srcColorlessCardPool.removeCard(HyperBeam.ID); AbstractDungeon.srcColorlessCardPool.removeCard(LastStand.ID); AbstractDungeon.srcColorlessCardPool.removeCard(ShapePower.ID); - AbstractDungeon.srcColorlessCardPool.removeCard(PrepareCrush.ID); + AbstractDungeon.srcColorlessCardPool.removeCard(SuperPrepareCrush.ID); AbstractDungeon.srcColorlessCardPool.removeCard(QuickStudy.ID); AbstractDungeon.srcColorlessCardPool.removeCard(StudyTheSpire.ID); AbstractDungeon.srcColorlessCardPool.removeCard(YouAreMine.ID); AbstractDungeon.srcColorlessCardPool.removeCard(InvincibleStrength.ID); + AbstractDungeon.srcColorlessCardPool.removeCard(BeatOfDeath.ID); + AbstractDungeon.srcColorlessCardPool.removeCard(BloodBarrage.ID); + AbstractDungeon.srcColorlessCardPool.removeCard(ChargeUp.ID); + AbstractDungeon.srcColorlessCardPool.removeCard(DoubleAct.ID); + AbstractDungeon.srcColorlessCardPool.removeCard(FaceSlap.ID); + AbstractDungeon.srcColorlessCardPool.removeCard(Flail.ID); + AbstractDungeon.srcColorlessCardPool.removeCard(GoopSpray.ID); + AbstractDungeon.srcColorlessCardPool.removeCard(ManipulateTime.ID); + AbstractDungeon.srcColorlessCardPool.removeCard(Pandemonium.ID); + AbstractDungeon.srcColorlessCardPool.removeCard(PeekPages.ID); + AbstractDungeon.srcColorlessCardPool.removeCard(SuperBloodthirst.ID); + AbstractDungeon.srcColorlessCardPool.removeCard(SuperBodyCrash.ID); + AbstractDungeon.srcColorlessCardPool.removeCard(SuperClobber.ID); + + AbstractDungeon.srcColorlessCardPool.removeCard(SuperEtherStep.ID); + AbstractDungeon.srcColorlessCardPool.removeCard(SuperGhostShield.ID); + AbstractDungeon.srcColorlessCardPool.removeCard(SuperLivingWall.ID); + AbstractDungeon.srcColorlessCardPool.removeCard(SuperSomberShield.ID); + AbstractDungeon.srcColorlessCardPool.removeCard(TakeFlight.ID); + AbstractDungeon.srcColorlessCardPool.removeCard(Virus.ID); + AbstractDungeon.curseCardPool.removeCard(Aged.ID); AbstractDungeon.curseCardPool.removeCard(Icky.ID); AbstractDungeon.curseCardPool.removeCard(Bewildered.ID); @@ -109,37 +158,66 @@ public static void Postfix(AbstractDungeon __instance) { AbstractDungeon.srcCurseCardPool.removeCard(Scatterbrained.ID); AbstractDungeon.srcCurseCardPool.removeCard(Sapped.ID); } + if (AbstractDungeon.player instanceof SlimeboundCharacter) { - AbstractDungeon.colorlessCardPool.removeCard(PrepareCrush.ID); - AbstractDungeon.srcColorlessCardPool.removeCard(PrepareCrush.ID); + AbstractDungeon.colorlessCardPool.removeCard(SuperPrepareCrush.ID); + AbstractDungeon.srcColorlessCardPool.removeCard(SuperPrepareCrush.ID); + + AbstractDungeon.colorlessCardPool.removeCard(GoopSpray.ID); + AbstractDungeon.srcColorlessCardPool.removeCard(GoopSpray.ID); + + AbstractDungeon.colorlessCardPool.removeCard(SuperLivingWall.ID); + AbstractDungeon.srcColorlessCardPool.removeCard(SuperLivingWall.ID); } if (AbstractDungeon.player instanceof TheHexaghost || RandomCardWithTagAction.hexaLocked()) { AbstractDungeon.colorlessCardPool.removeCard(Hexaburn.ID); AbstractDungeon.srcColorlessCardPool.removeCard(Hexaburn.ID); + + AbstractDungeon.colorlessCardPool.removeCard(SuperGhostShield.ID); + AbstractDungeon.srcColorlessCardPool.removeCard(SuperGhostShield.ID); + + AbstractDungeon.colorlessCardPool.removeCard(SuperEtherStep.ID); + AbstractDungeon.srcColorlessCardPool.removeCard(SuperEtherStep.ID); } if (AbstractDungeon.player instanceof GuardianCharacter || RandomCardWithTagAction.guardianLocked()) { AbstractDungeon.colorlessCardPool.removeCard(GuardianWhirl.ID); AbstractDungeon.srcColorlessCardPool.removeCard(GuardianWhirl.ID); + + AbstractDungeon.colorlessCardPool.removeCard(ChargeUp.ID); + AbstractDungeon.srcColorlessCardPool.removeCard(ChargeUp.ID); + + AbstractDungeon.colorlessCardPool.removeCard(SuperBodyCrash.ID); + AbstractDungeon.srcColorlessCardPool.removeCard(SuperBodyCrash.ID); } if (AbstractDungeon.player instanceof ChampChar || RandomCardWithTagAction.champLocked()) { AbstractDungeon.colorlessCardPool.removeCard(LastStand.ID); AbstractDungeon.srcColorlessCardPool.removeCard(LastStand.ID); + + AbstractDungeon.colorlessCardPool.removeCard(SuperClobber.ID); + AbstractDungeon.srcColorlessCardPool.removeCard(SuperClobber.ID); + + AbstractDungeon.colorlessCardPool.removeCard(FaceSlap.ID); + AbstractDungeon.srcColorlessCardPool.removeCard(FaceSlap.ID); } if (AbstractDungeon.player instanceof AutomatonChar || RandomCardWithTagAction.autoLocked()) { AbstractDungeon.colorlessCardPool.removeCard(HyperBeam.ID); AbstractDungeon.srcColorlessCardPool.removeCard(HyperBeam.ID); + + AbstractDungeon.colorlessCardPool.removeCard(Virus.ID); + AbstractDungeon.srcColorlessCardPool.removeCard(Virus.ID); + + AbstractDungeon.colorlessCardPool.removeCard(Flail.ID); + AbstractDungeon.srcColorlessCardPool.removeCard(Flail.ID); } if (AbstractDungeon.player instanceof CollectorChar || RandomCardWithTagAction.collectorLocked()) { AbstractDungeon.colorlessCardPool.removeCard(YouAreMine.ID); AbstractDungeon.srcColorlessCardPool.removeCard(YouAreMine.ID); - } + AbstractDungeon.colorlessCardPool.removeCard(SuperSomberShield.ID); + AbstractDungeon.srcColorlessCardPool.removeCard(SuperSomberShield.ID); - if (AbstractDungeon.player instanceof TheSnecko) { - if (SneckoMod.validColors != null && !SneckoMod.pureSneckoMode) { - AbstractDungeon.commonCardPool.group.removeIf(c -> c instanceof UnknownClass && !SneckoMod.validColors.contains(((UnknownClass) c).myColor)); - AbstractDungeon.srcCommonCardPool.group.removeIf(c -> c instanceof UnknownClass && !SneckoMod.validColors.contains(((UnknownClass) c).myColor)); - } + AbstractDungeon.colorlessCardPool.removeCard(SuperWhirlingFlame.ID); + AbstractDungeon.srcColorlessCardPool.removeCard(WhirlingFlame.ID); } } } @@ -153,38 +231,109 @@ public static class RelicPatch { public static void Prefix(AbstractDungeon __instance) { if (!EvilModeCharacterSelect.evilMode && !downfallMod.contentSharing_relics) { - //TODO: last checked in 5.12 ver in 2024.2.23 by Mwalls - AbstractDungeon.relicsToRemoveOnStart.add(AutoCurser.ID); - AbstractDungeon.relicsToRemoveOnStart.add(Bagpipes.ID); - AbstractDungeon.relicsToRemoveOnStart.add(Barbells.ID); - AbstractDungeon.relicsToRemoveOnStart.add(BottledAnomaly.ID); - AbstractDungeon.relicsToRemoveOnStart.add(BlankCard.ID); - AbstractDungeon.relicsToRemoveOnStart.add(BolsterEngine.ID); - AbstractDungeon.relicsToRemoveOnStart.add(BronzeIdol.ID); - AbstractDungeon.relicsToRemoveOnStart.add(BrassTacks.ID); - AbstractDungeon.relicsToRemoveOnStart.add(BloodyTooth.ID); + //last checked during awakened one dev, 5/14/25 + + if (!(AbstractDungeon.player instanceof CollectorChar)) { + AbstractDungeon.relicsToRemoveOnStart.add(AutoCurser.ID); + AbstractDungeon.relicsToRemoveOnStart.add(Bagpipes.ID); + } + + if (!(AbstractDungeon.player instanceof ChampChar)) { + AbstractDungeon.relicsToRemoveOnStart.add(Barbells.ID); + } + + if (!(AbstractDungeon.player instanceof GuardianCharacter)) { + AbstractDungeon.relicsToRemoveOnStart.add(BottledAnomaly.ID); + } + + if (!(AbstractDungeon.player instanceof TheSnecko)) { + AbstractDungeon.relicsToRemoveOnStart.add(BlankCard.ID); + } + + if (!(AbstractDungeon.player instanceof TheHexaghost)) { + AbstractDungeon.relicsToRemoveOnStart.add(BolsterEngine.ID); + } + + if (!(AbstractDungeon.player instanceof AutomatonChar)) { + AbstractDungeon.relicsToRemoveOnStart.add(BronzeIdol.ID); + } + + if (!(AbstractDungeon.player instanceof hermit)) { + AbstractDungeon.relicsToRemoveOnStart.add(BrassTacks.ID); + AbstractDungeon.relicsToRemoveOnStart.add(BloodyTooth.ID); + } // AbstractDungeon.relicsToRemoveOnStart.add(CandleOfCauterizing.ID); // red candle changed to hexa specific - AbstractDungeon.relicsToRemoveOnStart.add(DeflectingBracers.ID); - AbstractDungeon.relicsToRemoveOnStart.add(DuelingGlove.ID); - AbstractDungeon.relicsToRemoveOnStart.add(DecasWashers.ID); - AbstractDungeon.relicsToRemoveOnStart.add(DonusWashers.ID); - AbstractDungeon.relicsToRemoveOnStart.add(ForbiddenFruit.ID); - AbstractDungeon.relicsToRemoveOnStart.add(FuelCanister.ID); - AbstractDungeon.relicsToRemoveOnStart.add(GemstoneGun.ID); - AbstractDungeon.relicsToRemoveOnStart.add(ImpeccablePecs.ID); - AbstractDungeon.relicsToRemoveOnStart.add(Incense.ID); - AbstractDungeon.relicsToRemoveOnStart.add(MakeshiftBattery.ID); - AbstractDungeon.relicsToRemoveOnStart.add(PocketSentry.ID); - AbstractDungeon.relicsToRemoveOnStart.add(PricklyShields.ID); - AbstractDungeon.relicsToRemoveOnStart.add(PreparedRelic.ID); - AbstractDungeon.relicsToRemoveOnStart.add(RoughDiamond.ID); - AbstractDungeon.relicsToRemoveOnStart.add(RyeStalk.ID); - AbstractDungeon.relicsToRemoveOnStart.add(StickyStick.ID); - AbstractDungeon.relicsToRemoveOnStart.add(StudyCardRelic.ID); - AbstractDungeon.relicsToRemoveOnStart.add(SuperSneckoEye.ID); - AbstractDungeon.relicsToRemoveOnStart.add(SneckoTalon.ID); - AbstractDungeon.relicsToRemoveOnStart.add(Sixitude.ID); - AbstractDungeon.relicsToRemoveOnStart.add(SupplyScroll.ID); + + if (!(AbstractDungeon.player instanceof ChampChar)) { + AbstractDungeon.relicsToRemoveOnStart.add(DeflectingBracers.ID); + AbstractDungeon.relicsToRemoveOnStart.add(DuelingGlove.ID); + } + + if (!(AbstractDungeon.player instanceof AutomatonChar)) { + AbstractDungeon.relicsToRemoveOnStart.add(DecasWashers.ID); + AbstractDungeon.relicsToRemoveOnStart.add(DonusWashers.ID); + } + + if (!(AbstractDungeon.player instanceof CollectorChar)) { + AbstractDungeon.relicsToRemoveOnStart.add(ForbiddenFruit.ID); + AbstractDungeon.relicsToRemoveOnStart.add(FuelCanister.ID); + } + + if (!(AbstractDungeon.player instanceof GuardianCharacter)) { + AbstractDungeon.relicsToRemoveOnStart.add(GemstoneGun.ID); + } + + //AbstractDungeon.relicsToRemoveOnStart.add(ImpeccablePecs.ID); impeccable pecs moved to gremlins exclusive + if (!(AbstractDungeon.player instanceof CollectorChar)) { + AbstractDungeon.relicsToRemoveOnStart.add(Incense.ID); + } + + //AbstractDungeon.relicsToRemoveOnStart.add(MakeshiftBattery.ID); makeshift battery moved to automaton exclusive + if (!(AbstractDungeon.player instanceof GuardianCharacter)) { + AbstractDungeon.relicsToRemoveOnStart.add(PocketSentry.ID); + } + + if (!(AbstractDungeon.player instanceof GremlinCharacter)) { + AbstractDungeon.relicsToRemoveOnStart.add(PricklyShields.ID); + } + + if (!(AbstractDungeon.player instanceof SlimeboundCharacter)) { + AbstractDungeon.relicsToRemoveOnStart.add(PreparedRelic.ID); + } + + if (!(AbstractDungeon.player instanceof CollectorChar)) { + AbstractDungeon.relicsToRemoveOnStart.add(RoughDiamond.ID); + } + + if (!(AbstractDungeon.player instanceof hermit)) { + AbstractDungeon.relicsToRemoveOnStart.add(RyeStalk.ID); + } + + if (!(AbstractDungeon.player instanceof SlimeboundCharacter)) { + AbstractDungeon.relicsToRemoveOnStart.add(StickyStick.ID); + } + + if (!(AbstractDungeon.player instanceof TheSnecko)) { + AbstractDungeon.relicsToRemoveOnStart.add(StudyCardRelic.ID); + AbstractDungeon.relicsToRemoveOnStart.add(SuperSneckoEye.ID); + AbstractDungeon.relicsToRemoveOnStart.add(SneckoTalon.ID); + } + + if (!(AbstractDungeon.player instanceof TheHexaghost)) { + AbstractDungeon.relicsToRemoveOnStart.add(Sixitude.ID); + } + + if (!(AbstractDungeon.player instanceof GremlinCharacter)) { + AbstractDungeon.relicsToRemoveOnStart.add(SupplyScroll.ID); + } + + if (!(AbstractDungeon.player instanceof AwakenedOneChar)) { + AbstractDungeon.relicsToRemoveOnStart.add(CawingCask.ID); + AbstractDungeon.relicsToRemoveOnStart.add(VioletPlumage.ID); + AbstractDungeon.relicsToRemoveOnStart.add(ShardOfNowak.ID); + AbstractDungeon.relicsToRemoveOnStart.add(MiniBlackHole.ID); + AbstractDungeon.relicsToRemoveOnStart.add(DeadBird.ID); + } } } @@ -199,27 +348,29 @@ public static class PotionPatch { public static void Postfix(AbstractPlayer.PlayerClass chosenClass) { // edit: this patch doesn't work somehow, the function is moved to downfallMod.receivePostDungeonInitialize() // by checking the condition before adding them all together -// if (!EvilModeCharacterSelect.evilMode && !downfallMod.contentSharing_potions) { -// PotionHelper.potions.remove(SoulburnPotion.POTION_ID); -// PotionHelper.potions.remove(MuddlingPotion.POTION_ID); -// PotionHelper.potions.remove(ThreeZeroPotion.POTION_ID); -// PotionHelper.potions.remove(BlockOnCardUsePotion.POTION_ID); -// PotionHelper.potions.remove(CounterstrikePotion.POTION_ID); -// PotionHelper.potions.remove(BurnAndBuffPotion.POTION_ID); -// PotionHelper.potions.remove(WizPotion.POTION_ID); -// PotionHelper.potions.remove(BossPotion.POTION_ID); -// PotionHelper.potions.remove(TempHPPotion.POTION_ID); -// } + //todo: I'm thinking of just making all these potions character exclusive which fixes the compendium problem + // and people don't like these potions anyways + if (!EvilModeCharacterSelect.evilMode && !downfallMod.contentSharing_potions) { + // PotionHelper.potions.remove(SoulburnPotion.POTION_ID); + PotionHelper.potions.remove(MuddlingPotion.POTION_ID); + PotionHelper.potions.remove(ThreeZeroPotion.POTION_ID); + PotionHelper.potions.remove(BlockOnCardUsePotion.POTION_ID); + PotionHelper.potions.remove(CounterstrikePotion.POTION_ID); + PotionHelper.potions.remove(BurnAndBuffPotion.POTION_ID); + PotionHelper.potions.remove(WizPotion.POTION_ID); + PotionHelper.potions.remove(BossPotion.POTION_ID); + // PotionHelper.potions.remove(TempHPPotion.POTION_ID); + } // edit: below probably not functioning too but lazy to implement // Ban shared potions from other classes if you haven't played as that class before - runLockedPotions.forEach((playerClass, potionIds) -> { - // Shared potions will never be banned from their base class - if (chosenClass != playerClass) { - if (!HeartEvent.hasPlayedRun(playerClass)) { - PotionHelper.potions.removeAll(potionIds); - } - } - }); + // runLockedPotions.forEach((playerClass, potionIds) -> { + // Shared potions will never be banned from their base class + // if (chosenClass != playerClass) { + // if (!HeartEvent.hasPlayedRun(playerClass)) { + // PotionHelper.potions.removeAll(potionIds); + // } + // }); + // } } } } diff --git a/src/main/java/downfall/patches/BanStuffPatch.java b/src/main/java/downfall/patches/BanStuffPatch.java index 4e00e70ac..eec4f96c6 100644 --- a/src/main/java/downfall/patches/BanStuffPatch.java +++ b/src/main/java/downfall/patches/BanStuffPatch.java @@ -1,9 +1,20 @@ package downfall.patches; +import awakenedOne.AwakenedOneChar; +import basemod.devcommands.relic.RelicRemove; import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.helpers.PotionHelper; +import com.megacrit.cardcrawl.relics.BirdFacedUrn; +import com.megacrit.cardcrawl.relics.MummifiedHand; +import com.megacrit.cardcrawl.relics.OrangePellets; +import com.megacrit.cardcrawl.relics.PrismaticShard; import downfall.potions.CursedFountainPotion; +import gremlin.patches.GremlinEnum; + +import static com.megacrit.cardcrawl.dungeons.AbstractDungeon.relicsToRemoveOnStart; +import static hermit.characters.hermit.Enums.HERMIT; public class BanStuffPatch { @SpirePatch( @@ -13,6 +24,36 @@ public class BanStuffPatch { public static class PotionPatch { public static void Postfix(AbstractPlayer.PlayerClass chosenClass) { PotionHelper.potions.remove(CursedFountainPotion.POTION_ID); + + if (chosenClass == GremlinEnum.GREMLIN) { + relicsToRemoveOnStart.add("Prismatic Shard"); + } + + if (EvilModeCharacterSelect.evilMode || chosenClass == HERMIT) { + relicsToRemoveOnStart.add("Blue Candle"); + } + + if (EvilModeCharacterSelect.evilMode) { + relicsToRemoveOnStart.add("Ectoplasm"); + } + + boolean nukemummyhand = (AbstractDungeon.miscRng.randomBoolean()); + boolean nukepellets = (AbstractDungeon.miscRng.randomBoolean()); + boolean nukeurn = (AbstractDungeon.miscRng.randomBoolean()); + + if (nukemummyhand && (chosenClass == AwakenedOneChar.Enums.AWAKENED_ONE)) { + relicsToRemoveOnStart.add(MummifiedHand.ID); + } + + if (nukepellets && (chosenClass == AwakenedOneChar.Enums.AWAKENED_ONE)) { + relicsToRemoveOnStart.add(OrangePellets.ID); + } + + if (nukeurn && (chosenClass == AwakenedOneChar.Enums.AWAKENED_ONE)) { + relicsToRemoveOnStart.add(BirdFacedUrn.ID); + } + } } -} \ No newline at end of file +} + diff --git a/src/main/java/downfall/patches/BlackCandlePatch.java b/src/main/java/downfall/patches/BlackCandlePatch.java new file mode 100644 index 000000000..3a484f873 --- /dev/null +++ b/src/main/java/downfall/patches/BlackCandlePatch.java @@ -0,0 +1,23 @@ +package downfall.patches; + +import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import downfall.relics.BlackCandle; + + +public class BlackCandlePatch { + @SpirePatch(clz = AbstractCard.class, method = "canUse") + public static class MakeActuallyUsable { + public static boolean Postfix(boolean __result, AbstractCard __instance) { + + if ((__instance.type == AbstractCard.CardType.CURSE) && (__instance.cost == -2)) { + if (AbstractDungeon.player.hasRelic(BlackCandle.ID)) { + return true; + } + } + return (__result); + } + } + +} \ No newline at end of file diff --git a/src/main/java/downfall/patches/CNCardTextColorPatch.java b/src/main/java/downfall/patches/CNCardTextColorPatch.java index a52a363ee..0e6dd3580 100644 --- a/src/main/java/downfall/patches/CNCardTextColorPatch.java +++ b/src/main/java/downfall/patches/CNCardTextColorPatch.java @@ -44,7 +44,7 @@ public static void Insert(AbstractCard __instance, @ByRef String[] word, @ByRef if (!Settings.manualLineBreak) { // If the current line is reaching its end, then the ending punctuation's width should be ignored or it would result in // a new line with a single punctuation as the text - if( (letter == LocalizedStrings.PERIOD.charAt(0)) && ((currentWidth[0] + letterWidth) >= 0.8 * CN_DESC_BOX_WIDTH) ){ + if( (LocalizedStrings.PERIOD.length() != 0 && letter == LocalizedStrings.PERIOD.charAt(0)) && ((currentWidth[0] + letterWidth) >= 0.8 * CN_DESC_BOX_WIDTH) ){ letterWidth = 0F; } if((letter == ',') && ((currentWidth[0] + letterWidth) >= 0.8 * CN_DESC_BOX_WIDTH ) ){ diff --git a/src/main/java/downfall/patches/DeathScreenCharUnlockPatch.java b/src/main/java/downfall/patches/DeathScreenCharUnlockPatch.java index 5d8b23ab0..59ad766cc 100644 --- a/src/main/java/downfall/patches/DeathScreenCharUnlockPatch.java +++ b/src/main/java/downfall/patches/DeathScreenCharUnlockPatch.java @@ -2,16 +2,18 @@ package downfall.patches; import automaton.AutomatonChar; +import awakenedOne.AwakenedOneChar; import champ.ChampChar; +import collector.CollectorChar; import com.evacipated.cardcrawl.modthespire.lib.*; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.city.TheCollector; import com.megacrit.cardcrawl.ui.buttons.ReturnToMenuButton; import com.megacrit.cardcrawl.unlock.UnlockTracker; import gremlin.patches.GremlinEnum; import guardian.patches.GuardianEnum; -import slimebound.SlimeboundMod; import theHexaghost.TheHexaghost; @@ -45,17 +47,31 @@ public static void Postfix(ReturnToMenuButton __instance, float x, float y, Stri // //SlimeboundMod.logger.info("second if"); __instance.appear(Settings.WIDTH / 2.0F, Settings.HEIGHT * 0.15F, TEXT[40]); __instance.label = TEXT[40]; - } else if (UnlockTracker.isCharacterLocked("Gremlin") && EvilModeCharacterSelect.evilMode && AbstractDungeon.player.chosenClass == AutomatonChar.Enums.THE_AUTOMATON) { + } else if (UnlockTracker.isCharacterLocked("Collector") && EvilModeCharacterSelect.evilMode && AbstractDungeon.player.chosenClass == AutomatonChar.Enums.THE_AUTOMATON) { // //SlimeboundMod.logger.info("second if"); __instance.appear(Settings.WIDTH / 2.0F, Settings.HEIGHT * 0.15F, TEXT[40]); __instance.label = TEXT[40]; - } else if ((UnlockTracker.isCharacterLocked("Snecko")) && + } + } else if (UnlockTracker.isCharacterLocked("Awakened") && EvilModeCharacterSelect.evilMode && AbstractDungeon.player.chosenClass == CollectorChar.Enums.THE_COLLECTOR) { + // //SlimeboundMod.logger.info("second if"); + __instance.appear(Settings.WIDTH / 2.0F, Settings.HEIGHT * 0.15F, TEXT[40]); + __instance.label = TEXT[40]; + } + else if (UnlockTracker.isCharacterLocked("Gremlin") && EvilModeCharacterSelect.evilMode && AbstractDungeon.player.chosenClass == AwakenedOneChar.Enums.AWAKENED_ONE) { + // //SlimeboundMod.logger.info("second if"); + __instance.appear(Settings.WIDTH / 2.0F, Settings.HEIGHT * 0.15F, TEXT[40]); + __instance.label = TEXT[40]; + } + + else if ((UnlockTracker.isCharacterLocked("Snecko")) && !(UnlockTracker.isCharacterLocked("SlimeBoss")) && !(UnlockTracker.isCharacterLocked("Guardian")) && !(UnlockTracker.isCharacterLocked("Hexaghost")) && !(UnlockTracker.isCharacterLocked("Champ")) && !(UnlockTracker.isCharacterLocked("Automaton")) && !(UnlockTracker.isCharacterLocked("Gremlin")) && + !(UnlockTracker.isCharacterLocked("Awakened")) && + !(UnlockTracker.isCharacterLocked("Collector")) && EvilModeCharacterSelect.evilMode && AbstractDungeon.player.chosenClass == GremlinEnum.GREMLIN){ // //SlimeboundMod.logger.info("third if"); __instance.appear(Settings.WIDTH / 2.0F, Settings.HEIGHT * 0.15F, TEXT[40]); @@ -65,7 +81,5 @@ public static void Postfix(ReturnToMenuButton __instance, float x, float y, Stri } } -} - diff --git a/src/main/java/downfall/patches/DeathScreenScoreBonusesPatch.java b/src/main/java/downfall/patches/DeathScreenScoreBonusesPatch.java new file mode 100644 index 000000000..91aa91309 --- /dev/null +++ b/src/main/java/downfall/patches/DeathScreenScoreBonusesPatch.java @@ -0,0 +1,43 @@ +package downfall.patches; + +import basemod.ReflectionHacks; +import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.UIStrings; +import com.megacrit.cardcrawl.screens.DeathScreen; +import com.megacrit.cardcrawl.screens.GameOverScreen; +import com.megacrit.cardcrawl.screens.GameOverStat; +import com.megacrit.cardcrawl.screens.VictoryScreen; +import downfall.downfallMod; +import theHexaghost.relics.TheBrokenSeal; + +import java.util.ArrayList; + +public class DeathScreenScoreBonusesPatch { + + public static String CHECKAGAINST = CardCrawlGame.languagePack.getScoreString("Heartbreaker").NAME; + public static final UIStrings uiStrings = CardCrawlGame.languagePack.getUIString(downfallMod.makeID("WhaleHunter")); + public static final UIStrings uiStrings2 = CardCrawlGame.languagePack.getUIString(downfallMod.makeID("Unfettered")); + + @SpirePatch( + clz = DeathScreen.class, + method = "createGameOverStats" + ) + //use replaceheartkillbonuspatch too so it also counts on winning a run. + public static class DeathScreenPatch { + public static void Postfix(DeathScreen __instance) { + if (EvilModeCharacterSelect.evilMode) { + ArrayList stats = ReflectionHacks.getPrivate(__instance, GameOverScreen.class, "stats"); + //insert evil mode score bonuses here. + } + + + //insert non evil exclusive score bonuses here + // ArrayList stats2 = ReflectionHacks.getPrivate(__instance, GameOverScreen.class, "stats"); + // if (AbstractDungeon.player.hasRelic(TheBrokenSeal.ID)) { + // stats2.add(stats2.size()-2, new GameOverStat(uiStrings2.TEXT[0], uiStrings2.TEXT[1], Integer.toString(333))); + // } + } + } +} \ No newline at end of file diff --git a/src/main/java/downfall/patches/DeathScreenUnlockPatch.java b/src/main/java/downfall/patches/DeathScreenUnlockPatch.java index c07954c6a..fcd4b3d5a 100644 --- a/src/main/java/downfall/patches/DeathScreenUnlockPatch.java +++ b/src/main/java/downfall/patches/DeathScreenUnlockPatch.java @@ -1,6 +1,7 @@ package downfall.patches; import automaton.AutomatonChar; +import awakenedOne.AwakenedOneChar; import champ.ChampChar; import collector.CollectorChar; import com.evacipated.cardcrawl.modthespire.lib.*; @@ -47,36 +48,53 @@ public static SpireReturn Insert(DeathScreen __instance) { if ((AbstractDungeon.unlocks.isEmpty()) || (Settings.isDemo)) { if ((Settings.isDemo) || (Settings.isDailyRun)) { CardCrawlGame.startOver(); + + } else if (UnlockTracker.isCharacterLocked("Guardian") && !UnlockTracker.isCharacterLocked("The Silent") && (AbstractDungeon.player.chosenClass == SlimeboundEnum.SLIMEBOUND)) { AbstractDungeon.unlocks.add(new GuardianUnlock()); AbstractDungeon.unlockScreen.open((AbstractUnlock) AbstractDungeon.unlocks.remove(0)); ////SlimeboundMod.logger.info("Triggered Guardian Unlock screen!"); return SpireReturn.Return(null); + + } else if ((UnlockTracker.isCharacterLocked("Hexaghost")) && (AbstractDungeon.player.chosenClass == GuardianEnum.GUARDIAN)) { AbstractDungeon.unlocks.add(new HexaghostUnlock()); AbstractDungeon.unlockScreen.open((AbstractUnlock) AbstractDungeon.unlocks.remove(0)); // //SlimeboundMod.logger.info("Triggered Hexaghost Unlock screen!"); return SpireReturn.Return(null); + + } else if ((UnlockTracker.isCharacterLocked("Champ")) && (AbstractDungeon.player.chosenClass == TheHexaghost.Enums.THE_SPIRIT)) { AbstractDungeon.unlocks.add(new ChampUnlock()); AbstractDungeon.unlockScreen.open((AbstractUnlock) AbstractDungeon.unlocks.remove(0)); ////SlimeboundMod.logger.info("Triggered Champ Unlock screen!"); return SpireReturn.Return(null); + + } else if ((UnlockTracker.isCharacterLocked("Automaton")) && (AbstractDungeon.player.chosenClass == ChampChar.Enums.THE_CHAMP)) { AbstractDungeon.unlocks.add(new AutomatonUnlock()); AbstractDungeon.unlockScreen.open((AbstractUnlock) AbstractDungeon.unlocks.remove(0)); ////SlimeboundMod.logger.info("Triggered Automaton Unlock screen!"); return SpireReturn.Return(null); + + } else if ((UnlockTracker.isCharacterLocked("Collector")) && (AbstractDungeon.player.chosenClass == AutomatonChar.Enums.THE_AUTOMATON)) { AbstractDungeon.unlocks.add(new CollectorUnlock()); AbstractDungeon.unlockScreen.open((AbstractUnlock) AbstractDungeon.unlocks.remove(0)); ////SlimeboundMod.logger.info("Triggered Gremlin Unlock screen!"); return SpireReturn.Return(null); - } else if ((UnlockTracker.isCharacterLocked("Gremlin") && (AbstractDungeon.player.chosenClass == CollectorChar.Enums.THE_COLLECTOR))) { + + + } else if ((UnlockTracker.isCharacterLocked("Awakened") && (AbstractDungeon.player.chosenClass == CollectorChar.Enums.THE_COLLECTOR))) { + AbstractDungeon.unlocks.add(new AwakenedUnlock()); + AbstractDungeon.unlockScreen.open((AbstractUnlock) AbstractDungeon.unlocks.remove(0)); + return SpireReturn.Return(null); + + } else if ((UnlockTracker.isCharacterLocked("Gremlin") && (AbstractDungeon.player.chosenClass == AwakenedOneChar.Enums.AWAKENED_ONE))) { AbstractDungeon.unlocks.add(new GremlinUnlock()); AbstractDungeon.unlockScreen.open((AbstractUnlock) AbstractDungeon.unlocks.remove(0)); - ////SlimeboundMod.logger.info("Triggered Snecko Unlock screen!"); return SpireReturn.Return(null); + } else if ((UnlockTracker.isCharacterLocked("Snecko") && (AbstractDungeon.player.chosenClass == GremlinEnum.GREMLIN))) { AbstractDungeon.unlocks.add(new SneckoUnlock()); AbstractDungeon.unlockScreen.open(AbstractDungeon.unlocks.remove(0)); diff --git a/src/main/java/downfall/patches/EvilModeCharacterSelect.java b/src/main/java/downfall/patches/EvilModeCharacterSelect.java index 9d3a37e24..a37e36f6e 100644 --- a/src/main/java/downfall/patches/EvilModeCharacterSelect.java +++ b/src/main/java/downfall/patches/EvilModeCharacterSelect.java @@ -1,6 +1,7 @@ package downfall.patches; import automaton.AutomatonChar; +import awakenedOne.AwakenedOneChar; import basemod.CustomCharacterSelectScreen; import basemod.ReflectionHacks; import champ.ChampChar; @@ -55,7 +56,7 @@ public static void Insert(CustomCharacterSelectScreen __instance) { Iterator options = __instance.options.iterator(); ArrayList basegameOptions = new ArrayList<>(), moddedOptions = new ArrayList<>(); - CharacterOption[] villainOptions = new CharacterOption[8]; + CharacterOption[] villainOptions = new CharacterOption[9]; while (options.hasNext()) { CharacterOption o = options.next(); @@ -107,18 +108,26 @@ public static void Insert(CustomCharacterSelectScreen __instance) { ReflectionHacks.setPrivate(o, CharacterOption.class, "buttonImg", ImageMaster.CHAR_SELECT_LOCKED); } villainOptions[5] = o; + + } else if (o.c.chosenClass == AwakenedOneChar.Enums.AWAKENED_ONE) { + if (UnlockTracker.isCharacterLocked("Awakened")) { + o.locked = true; + ReflectionHacks.setPrivate(o, CharacterOption.class, "buttonImg", ImageMaster.CHAR_SELECT_LOCKED); + } + villainOptions[6] = o; + } else if (o.c.chosenClass == GremlinEnum.GREMLIN) { if (UnlockTracker.isCharacterLocked("Gremlin")) { o.locked = true; ReflectionHacks.setPrivate(o, CharacterOption.class, "buttonImg", ImageMaster.CHAR_SELECT_LOCKED); } - villainOptions[6] = o; + villainOptions[7] = o; } else if (o.c.chosenClass == TheSnecko.Enums.THE_SNECKO) { if (UnlockTracker.isCharacterLocked("Snecko")) { o.locked = true; ReflectionHacks.setPrivate(o, CharacterOption.class, "buttonImg", ImageMaster.CHAR_SELECT_LOCKED); } - villainOptions[7] = o; + villainOptions[8] = o; } else { isVillain = false; moddedOptions.add(o); diff --git a/src/main/java/downfall/patches/FixInitializeDescriptionCNWidthLogic.java b/src/main/java/downfall/patches/FixInitializeDescriptionCNWidthLogic.java new file mode 100644 index 000000000..d605e8219 --- /dev/null +++ b/src/main/java/downfall/patches/FixInitializeDescriptionCNWidthLogic.java @@ -0,0 +1,44 @@ +package downfall.patches; + +import com.evacipated.cardcrawl.modthespire.lib.ByRef; +import com.evacipated.cardcrawl.modthespire.lib.SpireInsertPatch; +import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; +import com.megacrit.cardcrawl.cards.AbstractCard; + +// This patch, corrects the incorrect text rendering issue for non alphabetic languages(ZHS, JPN, KOR etc) when there exists double space in cards.json +// For a comparison before and after the patch, visit https://github.com/daviscook477/BaseMod/pull/427 + +public class FixInitializeDescriptionCNWidthLogic { + + private static float currentWidthStore = -999F; // Initializing to an impossible value for checks, if it becomes any other value it means the value got updated. + + @SpirePatch( + clz = AbstractCard.class, + method = "initializeDescriptionCN" + ) + public static class InsertBefore { + @SpireInsertPatch( + rloc = 14, + localvars = {"currentWidth"} + ) + public static void Insert(AbstractCard __instance, @ByRef float[] currentWidth) { + currentWidthStore = currentWidth[0]; // insert before the assignemnt currentWidth = 0; to store the original width + } + } + + @SpirePatch( + clz = AbstractCard.class, + method = "initializeDescriptionCN" + ) + public static class InsertAfter { + @SpireInsertPatch( + rloc = 15, + localvars = {"currentWidth","word","sbuilder"} + ) + public static void Insert(AbstractCard __instance, @ByRef float[] currentWidth, @ByRef String[] word, @ByRef StringBuilder[] sbuilder) { + if(sbuilder[0].length() != 0 && currentWidthStore != -999F) currentWidth[0] = currentWidthStore ; // restores the width back if the width was set to 0 incorrectly + } + } + + +} \ No newline at end of file diff --git a/src/main/java/downfall/patches/GlobalOnCardUsePatch.java b/src/main/java/downfall/patches/GlobalOnCardUsePatch.java index b7cf776a0..42ff479d7 100644 --- a/src/main/java/downfall/patches/GlobalOnCardUsePatch.java +++ b/src/main/java/downfall/patches/GlobalOnCardUsePatch.java @@ -1,5 +1,6 @@ package downfall.patches; +import awakenedOne.AwakenedOneMod; import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.cards.CardGroup; @@ -13,6 +14,7 @@ ) public class GlobalOnCardUsePatch { public static void Prefix(CardGroup __instance, AbstractCard abstractCard) { + if(activeGhostFlame == null) return; if (!activeGhostFlame.charged && renderFlames && activeGhostFlame.advanceOnCardUse) activeGhostFlame.advanceTrigger(abstractCard); diff --git a/src/main/java/downfall/patches/HecktoplasmPatch.java b/src/main/java/downfall/patches/HecktoplasmPatch.java new file mode 100644 index 000000000..2f98e5f7a --- /dev/null +++ b/src/main/java/downfall/patches/HecktoplasmPatch.java @@ -0,0 +1,20 @@ +package downfall.patches; + +import charbosses.bosses.AbstractCharBoss; +import com.evacipated.cardcrawl.modthespire.lib.ByRef; +import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import downfall.relics.Hecktoplasm; + +//thorton code +@SpirePatch(clz = AbstractPlayer.class, method = "gainGold") +public class HecktoplasmPatch { + public static void Prefix(AbstractPlayer __instance, @ByRef int[] amount) { + if (AbstractDungeon.player.hasRelic(Hecktoplasm.ID)) { + AbstractDungeon.player.getRelic(Hecktoplasm.ID).flash(); + System.out.println("Removing " + amount[0] + " Souls."); + amount[0] = 0; + } + } +} diff --git a/src/main/java/downfall/patches/MetricsPatches.java b/src/main/java/downfall/patches/MetricsPatches.java index 1da78aebc..63520f84d 100644 --- a/src/main/java/downfall/patches/MetricsPatches.java +++ b/src/main/java/downfall/patches/MetricsPatches.java @@ -1,45 +1,44 @@ -//package downfall.patches; -// -//import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; -//import com.megacrit.cardcrawl.core.Settings; -//import com.megacrit.cardcrawl.dungeons.AbstractDungeon; -//import com.megacrit.cardcrawl.metrics.Metrics; -//import com.megacrit.cardcrawl.screens.GameOverScreen; -//import downfall.downfallMod; -//import org.apache.logging.log4j.LogManager; -//import org.apache.logging.log4j.Logger; -// -//import java.lang.reflect.InvocationTargetException; -//import java.lang.reflect.Method; -// disabled metric during beta since it get constant changes -//public class MetricsPatches { -// -// private static final Logger logger = LogManager.getLogger(MetricsPatches.class); -// private static final String url = "http://downfallstats.atwebpages.com/beta/"; -// -// @SpirePatch(clz = GameOverScreen.class, method = "shouldUploadMetricData") -// public static class ShouldUploadMetricData { -// public static boolean Postfix(boolean returnValue) { -// if (downfallMod.isDownfallCharacter(AbstractDungeon.player)) { -// returnValue = Settings.UPLOAD_DATA; -// } -// return returnValue; -// } -// } -// -// @SpirePatch(clz = Metrics.class, method = "run") -// public static class RunPatch { -// public static void Postfix(Metrics metrics) { -// if (metrics.type == Metrics.MetricRequestType.UPLOAD_METRICS && downfallMod.isDownfallCharacter(AbstractDungeon.player)) { -// try { -// Method m = Metrics.class.getDeclaredMethod("sendPost", String.class, String.class); -// m.setAccessible(true); -// m.invoke(metrics, url, null); -// } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) { -// logger.error("Exception while sending metrics", e); -// } -// } -// } -// -// } -//} \ No newline at end of file +package downfall.patches; + +import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.metrics.Metrics; +import com.megacrit.cardcrawl.screens.GameOverScreen; +import downfall.downfallMod; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +public class MetricsPatches { + + private static final Logger logger = LogManager.getLogger(MetricsPatches.class); + private static final String url = "http://downfallstats.atwebpages.com/beta/"; + + @SpirePatch(clz = GameOverScreen.class, method = "shouldUploadMetricData") + public static class ShouldUploadMetricData { + public static boolean Postfix(boolean returnValue) { + if (downfallMod.isDownfallCharacter(AbstractDungeon.player)) { + returnValue = Settings.UPLOAD_DATA; + } + return returnValue; + } + } +@SpirePatch(clz = Metrics.class, method = "run") + public static class RunPatch { + public static void Postfix(Metrics metrics) { + if (metrics.type == Metrics.MetricRequestType.UPLOAD_METRICS && downfallMod.isDownfallCharacter(AbstractDungeon.player)) { + try { + Method m = Metrics.class.getDeclaredMethod("sendPost", String.class, String.class); + m.setAccessible(true); + m.invoke(metrics, url, null); + } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) { + logger.error("Exception while sending metrics", e); + } + } + } + + } +} \ No newline at end of file diff --git a/src/main/java/downfall/patches/RelicOverrides.java b/src/main/java/downfall/patches/RelicOverrides.java index 01a28248f..7ff17b083 100644 --- a/src/main/java/downfall/patches/RelicOverrides.java +++ b/src/main/java/downfall/patches/RelicOverrides.java @@ -1,26 +1,34 @@ package downfall.patches; -import basemod.BaseMod; +import automaton.relics.BottledCode; +import awakenedOne.relics.MoonTalisman; import basemod.ReflectionHacks; -import basemod.abstracts.DynamicVariable; -import basemod.helpers.dynamicvariables.BlockVariable; -import basemod.helpers.dynamicvariables.DamageVariable; -import basemod.patches.com.megacrit.cardcrawl.cards.AbstractCard.CardModifierPatches; -import basemod.patches.com.megacrit.cardcrawl.cards.AbstractCard.RenderCustomDynamicVariableCN; -import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import champ.ChampChar; +import champ.relics.SignatureFinisher; +import collector.relics.BottledCollectible; import com.evacipated.cardcrawl.modthespire.lib.*; import com.evacipated.cardcrawl.modthespire.patcher.PatchingException; import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.CardGroup; +import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.helpers.ImageMaster; +import com.megacrit.cardcrawl.localization.RelicStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.relics.*; import downfall.downfallMod; +import downfall.relics.BlackCandle; import downfall.util.TextureLoader; -import javassist.CannotCompileException; -import javassist.CtBehavior; +import guardian.relics.BottledAnomaly; +import guardian.relics.BottledStasis; +import guardian.relics.StasisEgg; +import javassist.*; +import sneckomod.relics.D8; import java.util.Objects; -import java.util.regex.Pattern; + +import static downfall.patches.EvilModeCharacterSelect.evilMode; //TODO: I accidentally pushed one of my attempt code to change those evil run specific relic names(and image) for the related relics, it's not fully working // (breaks when you load a game) but shouldn't cause any bugs I think, Mwalls @@ -43,6 +51,225 @@ public class RelicOverrides { // // } +// @SpirePatch( +// clz = PreservedInsect.class, +// method = "canSpawn" +// ) +// public static class PreservedOverwrite { +// @SpirePrefixPatch +// public boolean canSpawn() { +// return Settings.isEndless || (AbstractDungeon.floorNum <= 52 && !evilMode) || (AbstractDungeon.floorNum <= 48 && evilMode); +// } +// } + + +// // thanks sandtag for the code +// @SpirePatch2(clz = PreservedInsect.class, method = "") +// public static class AddNewMethodPI { +// @SpireRawPatch +// public static void addMethod(CtBehavior ctMethodToPatch) throws CannotCompileException, NotFoundException { +// CtClass ctNestClass = ctMethodToPatch.getDeclaringClass(); +// CtClass superClass = ctNestClass.getSuperclass(); +// CtMethod superMethod = superClass.getDeclaredMethod("canSpawn"); +// CtMethod updateMethod = CtNewMethod.delegator(superMethod, ctNestClass); +// try { +// ctNestClass.addMethod(updateMethod); +// } catch (DuplicateMemberException ignored) { +// updateMethod = ctNestClass.getDeclaredMethod("canSpawn"); +// } +// updateMethod.insertBefore("if(true){return " + PreservedInsect.class.getName() + ".addCanSpawn48PI($0);}"); +// } +// } +// +// public static boolean addCanSpawn48PI(PreservedInsect __instance) { +// return (Settings.isEndless || (AbstractDungeon.floorNum <= 52 && !evilMode) || (AbstractDungeon.floorNum <= 48 && evilMode)); +// } + + +// @SpirePatch( +// clz= BottledFlame.class, +// method="onEquip" +// ) +// public static class BottledFlamePatch { +// @SpirePrefixPatch +// public static void Prefix(BottledFlame _instance) { +// +// CardGroup tmp = new CardGroup(CardGroup.CardGroupType.UNSPECIFIED); +// +// for (AbstractCard c : AbstractDungeon.player.masterDeck.getPurgeableCards().getAttacks().group) { +// if (!isDownfallBottle(c)) { +// tmp.addToTop(c); +// } +// } +// +// if (tmp.size() > 0) { +// //this.cardSelected = false; +// if (AbstractDungeon.isScreenUp) { +// AbstractDungeon.dynamicBanner.hide(); +// AbstractDungeon.overlayMenu.cancelButton.hide(); +// AbstractDungeon.previousScreen = AbstractDungeon.screen; +// } +// +// AbstractDungeon.getCurrRoom().phase = AbstractRoom.RoomPhase.INCOMPLETE; +// AbstractDungeon.gridSelectScreen.open(tmp, 1, _instance.DESCRIPTIONS[1] + _instance.name + LocalizedStrings.PERIOD, false, false, false, false); +// } +// } +// } + + // public CardGroup getPurgeableCards() { + // CardGroup retVal = new CardGroup(CardGroup.CardGroupType.UNSPECIFIED); + // Iterator var2 = this.group.iterator(); + // + // while(var2.hasNext()) { + // AbstractCard c = (AbstractCard)var2.next(); + // if (!c.cardID.equals("Necronomicurse") && !c.cardID.equals("CurseOfTheBell") && !c.cardID.equals("AscendersBane")) { + // retVal.group.add(c); + // } + // } + // + // return retVal; + // } + + //todo: make not a war crime + @SpirePatch( + clz = CardGroup.class, + method = "getPurgeableCards" + ) + public static class CardGroup_getPurgeableCards { + public CardGroup_getPurgeableCards() { + } + @SpirePostfixPatch + public static CardGroup Postfix(CardGroup __result, CardGroup __instance) { + if (UnbottledBottles()) { + + __result.group.removeIf((c) -> { + return (isDownfallBottle(c) && (__result.size() > 1)); + }); + } + + return __result; + } + } + + //todo: some of the worst code I've ever written, fix before release IMPORTANT + public static boolean UnbottledBottles() { + boolean result = false; + RelicStrings strings; + + if (AbstractDungeon.player.hasRelic(BottledFlame.ID)) { + BottledFlame a = (BottledFlame) AbstractDungeon.player.getRelic(BottledFlame.ID); + strings = CardCrawlGame.languagePack.getRelicStrings(BottledFlame.ID); + if (a.description == strings.DESCRIPTIONS[0]) { + result = true; + } + } + + if (AbstractDungeon.player.hasRelic(BottledLightning.ID)) { + BottledLightning a = (BottledLightning) AbstractDungeon.player.getRelic(BottledLightning.ID); + strings = CardCrawlGame.languagePack.getRelicStrings(BottledLightning.ID); + if (a.description == strings.DESCRIPTIONS[0]) { + result = true; + } + } + + if (AbstractDungeon.player.hasRelic(BottledTornado.ID)) { + BottledTornado a = (BottledTornado) AbstractDungeon.player.getRelic(BottledTornado.ID); + strings = CardCrawlGame.languagePack.getRelicStrings(BottledTornado.ID); + if (a.description == strings.DESCRIPTIONS[0]) { + result = true; + } + } + + return result; + } + + public static boolean isDownfallBottle (AbstractCard card) { + boolean result = false; + if (AbstractDungeon.player.hasRelic(SignatureFinisher.ID)) { + SignatureFinisher a = (SignatureFinisher) AbstractDungeon.player.getRelic(SignatureFinisher.ID); + if (a.card != null) { + if (card.uuid == a.card.uuid) { + result = true; + } + } + } + + if (AbstractDungeon.player.hasRelic(BottledStasis.ID)) { + BottledStasis b = (BottledStasis) AbstractDungeon.player.getRelic(BottledStasis.ID); + if (b.card != null) { + if (card.uuid == b.card.uuid) { + result = true; + } + } + } + + if (AbstractDungeon.player.hasRelic(BottledAnomaly.ID)) { + BottledAnomaly crelic = (BottledAnomaly) AbstractDungeon.player.getRelic(BottledAnomaly.ID); + if (crelic.card != null) { + if (card.uuid == crelic.card.uuid) { + result = true; + } + } + } + + if (AbstractDungeon.player.hasRelic(MoonTalisman.ID)) { + MoonTalisman d = (MoonTalisman) AbstractDungeon.player.getRelic(MoonTalisman.ID); + if (d.card != null) { + if (card.uuid == d.card.uuid) { + result = true; + } + } + } + + if (AbstractDungeon.player.hasRelic(BottledCollectible.ID)) { + BottledCollectible e = (BottledCollectible) AbstractDungeon.player.getRelic(BottledCollectible.ID); + if (e.card != null) { + if (card.uuid == e.card.uuid) { + result = true; + } + } + } + + if (AbstractDungeon.player.hasRelic(D8.ID)) { + D8 f = (D8) AbstractDungeon.player.getRelic(D8.ID); + if (f.card != null) { + if (card.uuid == f.card.uuid) { + result = true; + } + } + } + + if (AbstractDungeon.player.hasRelic(BottledCode.ID)) { + BottledCode g = (BottledCode) AbstractDungeon.player.getRelic(BottledCode.ID); + if (g.card != null) { + if (card.uuid == g.card.uuid) { + result = true; + } + } + } + + if (AbstractDungeon.player.hasRelic(StasisEgg.ID)) { + StasisEgg s = (StasisEgg) AbstractDungeon.player.getRelic(StasisEgg.ID); + if (s.card != null) { + if (card.uuid == s.card.uuid) { + result = true; + } + } + } + return result; + } + + + @SpirePatch(clz = BustedCrown.class, method = "getUpdatedDescription") + public static class BustedCrownJokeText { + @SpirePrefixPatch + public static void Prefix(BustedCrown _instance) { + if (AbstractDungeon.player != null && AbstractDungeon.player.chosenClass == ChampChar.Enums.THE_CHAMP) { + _instance.flavorText = CardCrawlGame.languagePack.getRelicStrings("downfall:BustedCrownGagText").FLAVOR; + } + } + } + @SpirePatch( clz = OldCoin.class, @@ -51,8 +278,8 @@ public class RelicOverrides { public static class oldCoinName { @SpirePrefixPatch public static void Prefix(OldCoin _instance) { - if (EvilModeCharacterSelect.evilMode && _instance.name != CardCrawlGame.languagePack.getRelicStrings("downfall:replacements").DESCRIPTIONS[1]) { - //ReflectionHacks.setPrivateStaticFinal(OldCoin.class, "name", CardCrawlGame.languagePack.getRelicStrings("downfall:replacements").DESCRIPTIONS[1]); + if (evilMode && _instance.name != CardCrawlGame.languagePack.getRelicStrings("downfall:replacements").DESCRIPTIONS[1]) { + ReflectionHacks.setPrivateStaticFinal(OldCoin.class, "name", CardCrawlGame.languagePack.getRelicStrings("downfall:replacements").DESCRIPTIONS[1]); _instance.img = TextureLoader.getTexture(downfallMod.assetPath("images/relics/oldCoinEvil.png")); _instance.outlineImg = TextureLoader.getTexture(downfallMod.assetPath("images/relics/Outline/oldCoinEvil.png")); _instance.flavorText = CardCrawlGame.languagePack.getRelicStrings("downfall:replacements").DESCRIPTIONS[2]; @@ -62,6 +289,61 @@ public static void Prefix(OldCoin _instance) { } +// @SpirePatch( +// clz = BlueCandle.class, +// method = "onUseCard" +// ) +// public static class BlueCandleOverride { +// // @SpirePatch +// public static void onUseCard(BlueCandle __instance, AbstractCard card, UseCardAction action) { +// if (card.type == AbstractCard.CardType.CURSE) { +// __instance.flash(); +// if (!EvilModeCharacterSelect.evilMode || card.cost == -2) { +// AbstractDungeon.actionManager.addToBottom( +// new LoseHPAction(AbstractDungeon.player, AbstractDungeon.player, 1, AbstractGameAction.AttackEffect.FIRE) +// ); +// } +// card.exhaust = true; +// action.exhaustCard = true; +// } +// } +// } +// +// @SpirePatch( +// clz = BlueCandle.class, +// method = "getUpdatedDescription" +// ) +// public static class bluecandleName { +// @SpirePrefixPatch +// public static void Prefix(BlueCandle _instance) { +// if (EvilModeCharacterSelect.evilMode) { +// _instance.imgUrl = null; +// ReflectionHacks.setPrivateStaticFinal(MembershipCard.class, "name", CardCrawlGame.languagePack.getRelicStrings("downfall:BlackCandle").DESCRIPTIONS[1]);_instance.img = TextureLoader.getTexture(downfallMod.assetPath("images/relics/BlackCandle.png")); +// _instance.outlineImg = TextureLoader.getTexture(downfallMod.assetPath("images/relics/Outline/BlackCandleOutline.png")); +// _instance.flavorText = CardCrawlGame.languagePack.getRelicStrings("downfall:BlackCandle").FLAVOR; +// } +// +// } +// } +// +// +// +// @SpirePatch( +// clz = BlueCandle.class, +// method = "setDescription" +// ) +// public static class BlueCandleDesc { +// @SpirePrefixPatch +// public static SpireReturn Prefix() { +// +// if (EvilModeCharacterSelect.evilMode) { +// return SpireReturn.Return(CardCrawlGame.languagePack.getRelicStrings("downfall:BlackCandle").DESCRIPTIONS[1]); +// } +// +// return SpireReturn.Continue(); +// } +// } + @SpirePatch( clz = MembershipCard.class, @@ -70,8 +352,8 @@ public static void Prefix(OldCoin _instance) { public static class membershipCardName { @SpirePrefixPatch public static void Prefix(MembershipCard _instance) { - if (EvilModeCharacterSelect.evilMode && _instance.name != CardCrawlGame.languagePack.getRelicStrings("downfall:replacements").DESCRIPTIONS[3]) { - //ReflectionHacks.setPrivateStaticFinal(MembershipCard.class, "name", CardCrawlGame.languagePack.getRelicStrings("downfall:replacements").DESCRIPTIONS[3]); + if (evilMode && _instance.name != CardCrawlGame.languagePack.getRelicStrings("downfall:replacements").DESCRIPTIONS[3]) { + ReflectionHacks.setPrivateStaticFinal(MembershipCard.class, "name", CardCrawlGame.languagePack.getRelicStrings("downfall:replacements").DESCRIPTIONS[3]); _instance.img = TextureLoader.getTexture(downfallMod.assetPath("images/relics/membershipCardEvil.png")); _instance.outlineImg = TextureLoader.getTexture(downfallMod.assetPath("images/relics/Outline/membershipCardEvil.png")); _instance.flavorText = CardCrawlGame.languagePack.getRelicStrings("downfall:replacements").DESCRIPTIONS[4]; @@ -89,8 +371,8 @@ public static void Prefix(MembershipCard _instance) { public static class courierName { @SpirePrefixPatch public static void Prefix(Courier _instance) { - if (EvilModeCharacterSelect.evilMode && _instance.name != CardCrawlGame.languagePack.getRelicStrings("downfall:replacements").DESCRIPTIONS[6]) { - //ReflectionHacks.setPrivateStaticFinal(Courier.class, "name", CardCrawlGame.languagePack.getRelicStrings("downfall:replacements").DESCRIPTIONS[6]); + if (evilMode && _instance.name != CardCrawlGame.languagePack.getRelicStrings("downfall:replacements").DESCRIPTIONS[6]) { + ReflectionHacks.setPrivateStaticFinal(Courier.class, "name", CardCrawlGame.languagePack.getRelicStrings("downfall:replacements").DESCRIPTIONS[6]); _instance.imgUrl = null; _instance.img = TextureLoader.getTexture(downfallMod.assetPath("images/relics/courierEvil.png")); _instance.outlineImg = TextureLoader.getTexture(downfallMod.assetPath("images/relics/Outline/courierEvil.png")); @@ -108,9 +390,9 @@ public static void Prefix(Courier _instance) { public static class prismaticDesc { @SpirePrefixPatch public static void Postfix(PrismaticShard _instance) { - if (EvilModeCharacterSelect.evilMode) { + if (evilMode) { //ReflectionHacks.setPrivateStaticFinal(Courier.class, "name", CardCrawlGame.languagePack.getRelicStrings("downfall:replacements").DESCRIPTIONS[6]); - _instance.description = CardCrawlGame.languagePack.getRelicStrings("downfall:replacements").DESCRIPTIONS[8]; + // _instance.description = CardCrawlGame.languagePack.getRelicStrings("downfall:replacements").DESCRIPTIONS[8]; } @@ -124,8 +406,9 @@ public static void Postfix(PrismaticShard _instance) { public static class EctoImage { @SpirePrefixPatch public static void Prefix(Ectoplasm _instance) { - if (EvilModeCharacterSelect.evilMode) { + if (evilMode) { _instance.imgUrl = null; + ReflectionHacks.setPrivateStaticFinal(Ectoplasm.class, "name", CardCrawlGame.languagePack.getRelicStrings("downfall:Hecktoplasm").DESCRIPTIONS[1]); _instance.img = TextureLoader.getTexture(downfallMod.assetPath("images/relics/ectoplasmEvil.png")); _instance.outlineImg = TextureLoader.getTexture(downfallMod.assetPath("images/relics/Outline/ectoplasmEvil.png")); _instance.flavorText = CardCrawlGame.languagePack.getRelicStrings("downfall:Hecktoplasm").FLAVOR; @@ -142,7 +425,7 @@ public static class EctoDesc { @SpirePrefixPatch public static SpireReturn Prefix() { - if (EvilModeCharacterSelect.evilMode) { + if (evilMode) { return SpireReturn.Return(CardCrawlGame.languagePack.getRelicStrings("downfall:replacements").DESCRIPTIONS[9]); } @@ -159,7 +442,7 @@ public static class EctoTitle { locator = Locator.class ) public static void Insert(AbstractRelic __instance,String setId, String imgName, AbstractRelic.RelicTier tier, AbstractRelic.LandingSound sfx) { - if(Objects.equals(__instance.relicId, "Ectoplasm") && EvilModeCharacterSelect.evilMode) { + if(Objects.equals(__instance.relicId, "Ectoplasm") && evilMode) { ReflectionHacks.setPrivateFinal(__instance, AbstractRelic.class, "relicStrings", CardCrawlGame.languagePack.getRelicStrings("downfall:Hecktoplasm").NAME); } diff --git a/src/main/java/downfall/patches/ReplaceHeartKillBonusPatch.java b/src/main/java/downfall/patches/ReplaceHeartKillBonusPatch.java index ca69a3ddc..d0e885715 100644 --- a/src/main/java/downfall/patches/ReplaceHeartKillBonusPatch.java +++ b/src/main/java/downfall/patches/ReplaceHeartKillBonusPatch.java @@ -3,14 +3,18 @@ import basemod.ReflectionHacks; import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.localization.UIStrings; import com.megacrit.cardcrawl.screens.GameOverScreen; import com.megacrit.cardcrawl.screens.GameOverStat; import com.megacrit.cardcrawl.screens.VictoryScreen; import downfall.downfallMod; +import theHexaghost.relics.TheBrokenSeal; import java.util.ArrayList; +import static downfall.patches.DeathScreenScoreBonusesPatch.uiStrings2; + public class ReplaceHeartKillBonusPatch { public static String CHECKAGAINST = CardCrawlGame.languagePack.getScoreString("Heartbreaker").NAME; @@ -35,6 +39,11 @@ public static void Postfix(VictoryScreen __instance) { stats.remove(idx); stats.add(idx, new GameOverStat(uiStrings.TEXT[0], uiStrings.TEXT[1], Integer.toString(250))); } - } - } -} \ No newline at end of file + // ArrayList stats2 = ReflectionHacks.getPrivate(__instance, GameOverScreen.class, "stats"); + // if (AbstractDungeon.player.hasRelic(TheBrokenSeal.ID)) { + // stats2.add(stats2.size()-2, new GameOverStat(uiStrings2.TEXT[0], uiStrings2.TEXT[1], Integer.toString(333))); + // } + + } + } + } diff --git a/src/main/java/downfall/patches/RestrictCardColor.java b/src/main/java/downfall/patches/RestrictCardColor.java index efff7c1c7..068914335 100644 --- a/src/main/java/downfall/patches/RestrictCardColor.java +++ b/src/main/java/downfall/patches/RestrictCardColor.java @@ -1,5 +1,6 @@ package downfall.patches; +import collector.patches.CollectiblesPatches.CollectibleCardColorEnumPatch; import com.evacipated.cardcrawl.modthespire.lib.SpireInsertPatch; import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; import com.megacrit.cardcrawl.cards.AbstractCard; @@ -7,30 +8,41 @@ import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.helpers.CardLibrary; import hermit.characters.hermit; +import sneckomod.SneckoMod; +import theHexaghost.HexaMod; @SpirePatch(clz = CardLibrary.class, method = "getAnyColorCard", paramtypez = {AbstractCard.CardRarity.class}) public class RestrictCardColor { - public static AbstractCard.CardColor[] vanillaColors = new AbstractCard.CardColor[]{AbstractCard.CardColor.RED, AbstractCard.CardColor.GREEN, AbstractCard.CardColor.BLUE, AbstractCard.CardColor.PURPLE, AbstractCard.CardColor.COLORLESS, AbstractCard.CardColor.CURSE, hermit.Enums.COLOR_YELLOW}; + // Instead of banning non Hero cards like it did previously, + // this bans cards that are additionally banned for Snecko. I was very harsh with banning useless + // cards from Snecko so it should be fine-ish to play with. + // If this still makes prismatic shard bad we can just revert it to the old version again. + //public static AbstractCard.CardColor[] vanillaColors = new AbstractCard.CardColor[]{AbstractCard.CardColor.RED, AbstractCard.CardColor.GREEN, AbstractCard.CardColor.BLUE, AbstractCard.CardColor.PURPLE, AbstractCard.CardColor.COLORLESS, AbstractCard.CardColor.CURSE, hermit.Enums.COLOR_YELLOW}; @SpireInsertPatch(rloc = 10, localvars = {"anyCard"}) public static void Insert(AbstractCard.CardRarity rarity, CardGroup anyCard) { CardGroup cardsToRemove = new CardGroup(CardGroup.CardGroupType.UNSPECIFIED); + for (AbstractCard card : anyCard.group) { boolean available = false; if (card.color == AbstractDungeon.player.getCardColor()) { available = true; - } else { - for (AbstractCard.CardColor color : vanillaColors) { - if (card.color == color) { - available = true; - break; - } - } } - if (!available) + else if (!card.hasTag(SneckoMod.BANNEDFORSNECKO) && !card.hasTag(HexaMod.GHOSTWHEELCARD)) { + available = true; + } + + //PLEASE WORK + if (card.color == CollectibleCardColorEnumPatch.CardColorPatch.COLLECTIBLE){ + available = false; + } + + if (!available) { cardsToRemove.addToBottom(card); + } } - for (AbstractCard card : cardsToRemove.group) + for (AbstractCard card : cardsToRemove.group) { anyCard.removeCard(card); + } } } diff --git a/src/main/java/downfall/patches/RestrictCardColorWithType.java b/src/main/java/downfall/patches/RestrictCardColorWithType.java index 1a8f64018..3e0ec1176 100644 --- a/src/main/java/downfall/patches/RestrictCardColorWithType.java +++ b/src/main/java/downfall/patches/RestrictCardColorWithType.java @@ -1,18 +1,23 @@ package downfall.patches; +import collector.patches.CollectiblesPatches.CollectibleCardColorEnumPatch; import com.evacipated.cardcrawl.modthespire.lib.SpireInsertPatch; import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.cards.CardGroup; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.helpers.CardLibrary; -import hermit.characters.hermit; - -import static downfall.patches.RestrictCardColor.vanillaColors; +import sneckomod.SneckoMod; +import theHexaghost.HexaMod; @SpirePatch(clz = CardLibrary.class, method = "getAnyColorCard", paramtypez = {AbstractCard.CardType.class, AbstractCard.CardRarity.class}) public class RestrictCardColorWithType { + // Instead of banning non Hero cards like it did previously, + // this bans cards that are additionally banned for Snecko. I was very harsh with banning useless + // cards from Snecko so it should be fine-ish to play with. + // If this still makes prismatic shard bad we can just revert it to the old version again. + @SpireInsertPatch(rloc = 11, localvars = {"anyCard"}) public static void Insert(AbstractCard.CardType type, AbstractCard.CardRarity rarity, CardGroup anyCard) { CardGroup cardsToRemove = new CardGroup(CardGroup.CardGroupType.UNSPECIFIED); @@ -20,18 +25,21 @@ public static void Insert(AbstractCard.CardType type, AbstractCard.CardRarity ra boolean available = false; if (card.color == AbstractDungeon.player.getCardColor()) { available = true; - } else { - for (AbstractCard.CardColor color : vanillaColors) { - if (card.color == color) { - available = true; - break; - } - } - } - if (!available) - cardsToRemove.addToBottom(card); - } - for (AbstractCard card : cardsToRemove.group) - anyCard.removeCard(card); + } + else if (!card.hasTag(SneckoMod.BANNEDFORSNECKO) && !card.hasTag(HexaMod.GHOSTWHEELCARD)) { + available = true; + } + + if (card.color == CollectibleCardColorEnumPatch.CardColorPatch.COLLECTIBLE){ + available = false; + } + + if (!available) { + cardsToRemove.addToBottom(card); + } + } + for (AbstractCard card : cardsToRemove.group) { + anyCard.removeCard(card); + } } } diff --git a/src/main/java/downfall/patches/ReturnRandomScreenlessRelicPatch.java b/src/main/java/downfall/patches/ReturnRandomScreenlessRelicPatch.java new file mode 100644 index 000000000..9d696f688 --- /dev/null +++ b/src/main/java/downfall/patches/ReturnRandomScreenlessRelicPatch.java @@ -0,0 +1,52 @@ +//package downfall.patches; +// +//import awakenedOne.relics.MoonTalisman; +//import champ.relics.*; +//import collector.relics.BottledCollectible; +//import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; +//import com.evacipated.cardcrawl.modthespire.lib.SpirePostfixPatch; +//import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +//import com.megacrit.cardcrawl.helpers.RelicLibrary; +//import com.megacrit.cardcrawl.relics.AbstractRelic; +//import guardian.GuardianMod; +//import guardian.relics.BottledAnomaly; +//import guardian.relics.BottledStasis; +//import guardian.relics.GemstoneGun; +//import guardian.relics.PickAxe; +//import sneckomod.relics.SneckoCommon; +// +//import java.util.ArrayList; +//import java.util.Objects; +// +//import static com.megacrit.cardcrawl.dungeons.AbstractDungeon.returnRandomRelicKey; +// +//@SpirePatch( +// clz = AbstractDungeon.class, +// method = "returnRandomScreenlessRelic" +//) +//public class ReturnRandomScreenlessRelicPatch { +// @SpirePostfixPatch +// public static void Postfix(AbstractDungeon __instance, AbstractRelic relic) { +// +// //I'm going to assume that this thing isn't going to be used to ask for event or boss relics +// //so I'm not going to include thEm +// +// +// AbstractRelic tmpRelic; +// for(tmpRelic = RelicLibrary.getRelic(returnRandomRelicKey(relic.tier)).makeCopy(); +// Objects.equals(tmpRelic.relicId, "Bottled Flame") || +// (Objects.equals(tmpRelic.relicId, PickAxe.ID) && AbstractDungeon.getCurrRoom().eliteTrigger) || +// Objects.equals(tmpRelic.relicId, SneckoCommon.ID) || +// Objects.equals(tmpRelic.relicId, BottledStasis.ID) || +// Objects.equals(tmpRelic.relicId, BottledAnomaly.ID) || +// Objects.equals(tmpRelic.relicId, GemstoneGun.ID) || +// Objects.equals(tmpRelic.relicId, SignatureFinisher.ID) || +// Objects.equals(tmpRelic.relicId, BottledCollectible.ID) || +// Objects.equals(tmpRelic.relicId, MoonTalisman.ID) || +// Objects.equals(tmpRelic.relicId, "Bottled Lightning") || Objects.equals(tmpRelic.relicId, "Bottled Tornado") || Objects.equals(tmpRelic.relicId, "Whetstone"); tmpRelic = RelicLibrary.getRelic(returnRandomRelicKey(relic.tier)).makeCopy()) { +// } +// +// relic = tmpRelic; +// +// } +//} \ No newline at end of file diff --git a/src/main/java/downfall/patches/SpireShieldPatch.java b/src/main/java/downfall/patches/SpireShieldPatch.java new file mode 100644 index 000000000..2f5ed3d6e --- /dev/null +++ b/src/main/java/downfall/patches/SpireShieldPatch.java @@ -0,0 +1,48 @@ +package downfall.patches; + +import com.evacipated.cardcrawl.modthespire.lib.SpireInsertPatch; +import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; +import com.evacipated.cardcrawl.modthespire.lib.SpireReturn; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.RollMoveAction; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.ending.SpireShield; +import com.megacrit.cardcrawl.powers.StrengthPower; +import guardian.characters.GuardianCharacter; +import slimebound.characters.SlimeboundCharacter; +import slimebound.powers.PotencyPower; +import sneckomod.TheSnecko; +import theHexaghost.TheHexaghost; +import theHexaghost.powers.EnhancePower; + + +//thanks to ocean for the code from cranky mod +@SpirePatch(clz=SpireShield.class, method="takeTurn") +public class SpireShieldPatch { + @SpireInsertPatch(rloc=8) + public static SpireReturn Insert(SpireShield __instance) { + if ((AbstractDungeon.player instanceof SlimeboundCharacter || AbstractDungeon.player instanceof TheHexaghost || AbstractDungeon.player instanceof TheSnecko) && AbstractDungeon.aiRng.randomBoolean()) { + + if (AbstractDungeon.player instanceof SlimeboundCharacter && !AbstractDungeon.player.orbs.isEmpty()) { + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(AbstractDungeon.player, __instance, new PotencyPower(AbstractDungeon.player, __instance, -1))); + } + + if (AbstractDungeon.player instanceof SlimeboundCharacter && (AbstractDungeon.player.orbs.isEmpty())) { + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(AbstractDungeon.player, __instance, new StrengthPower(AbstractDungeon.player, -1))); + } + + if (AbstractDungeon.player instanceof TheHexaghost) { + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(AbstractDungeon.player, __instance, new EnhancePower(-1), -1)); + } + + if (AbstractDungeon.player instanceof TheSnecko || AbstractDungeon.player instanceof GuardianCharacter) { + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(AbstractDungeon.player, __instance, new StrengthPower(AbstractDungeon.player, -1))); + } + + AbstractDungeon.actionManager.addToBottom(new RollMoveAction(__instance)); + return SpireReturn.Return(); + } + + return SpireReturn.Continue(); + } +} \ No newline at end of file diff --git a/src/main/java/downfall/patches/VictoryScreenUnlockPatch.java b/src/main/java/downfall/patches/VictoryScreenUnlockPatch.java index c1a1b9999..47b0d3b67 100644 --- a/src/main/java/downfall/patches/VictoryScreenUnlockPatch.java +++ b/src/main/java/downfall/patches/VictoryScreenUnlockPatch.java @@ -1,7 +1,9 @@ package downfall.patches; import automaton.AutomatonChar; +import awakenedOne.AwakenedOneChar; import champ.ChampChar; +import collector.CollectorChar; import com.evacipated.cardcrawl.modthespire.lib.*; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.core.Settings; @@ -53,18 +55,25 @@ public static SpireReturn Insert(VictoryScreen __instance) { AbstractDungeon.unlockScreen.open((AbstractUnlock) AbstractDungeon.unlocks.remove(0)); ////SlimeboundMod.logger.info("Triggered Automaton Unlock screen!"); return SpireReturn.Return(null); - } else if ((UnlockTracker.isCharacterLocked("Gremlin")) && (AbstractDungeon.player.chosenClass == AutomatonChar.Enums.THE_AUTOMATON)) { - AbstractDungeon.unlocks.add(new GremlinUnlock()); + } else if ((UnlockTracker.isCharacterLocked("Collector")) && (AbstractDungeon.player.chosenClass == AutomatonChar.Enums.THE_AUTOMATON)) { + AbstractDungeon.unlocks.add(new CollectorUnlock()); AbstractDungeon.unlockScreen.open((AbstractUnlock) AbstractDungeon.unlocks.remove(0)); ////SlimeboundMod.logger.info("Triggered Gremlin Unlock screen!"); return SpireReturn.Return(null); - } else if ((UnlockTracker.isCharacterLocked("Snecko")) && (AbstractDungeon.player.chosenClass == GremlinEnum.GREMLIN)) { - AbstractDungeon.unlocks.add(new SneckoUnlock()); + + } else if ((UnlockTracker.isCharacterLocked("Awakened")) && (AbstractDungeon.player.chosenClass == CollectorChar.Enums.THE_COLLECTOR)) { + AbstractDungeon.unlocks.add(new AwakenedUnlock()); AbstractDungeon.unlockScreen.open((AbstractUnlock) AbstractDungeon.unlocks.remove(0)); - ////SlimeboundMod.logger.info("Triggered Snecko Unlock screen!"); + ////SlimeboundMod.logger.info("Triggered Gremlin Unlock screen!"); return SpireReturn.Return(null); - } else if ((UnlockTracker.isCharacterLocked("Collector") && (AbstractDungeon.player.chosenClass == TheSnecko.Enums.THE_SNECKO))) { - AbstractDungeon.unlocks.add(new CollectorUnlock()); + + + } else if ((UnlockTracker.isCharacterLocked("Gremlin")) && (AbstractDungeon.player.chosenClass == AwakenedOneChar.Enums.AWAKENED_ONE)) { + AbstractDungeon.unlocks.add(new GremlinUnlock()); + AbstractDungeon.unlockScreen.open((AbstractUnlock) AbstractDungeon.unlocks.remove(0)); + return SpireReturn.Return(null); + } else if ((UnlockTracker.isCharacterLocked("Snecko") && (AbstractDungeon.player.chosenClass == GremlinEnum.GREMLIN))) { + AbstractDungeon.unlocks.add(new SneckoUnlock()); AbstractDungeon.unlockScreen.open(AbstractDungeon.unlocks.remove(0)); return SpireReturn.Return(null); } diff --git a/src/main/java/downfall/patches/rooms/ShopRoomReplacePatch.java b/src/main/java/downfall/patches/rooms/ShopRoomReplacePatch.java index 58302a79a..39282a700 100644 --- a/src/main/java/downfall/patches/rooms/ShopRoomReplacePatch.java +++ b/src/main/java/downfall/patches/rooms/ShopRoomReplacePatch.java @@ -35,8 +35,8 @@ public static void Postfix(ArrayList roomList, int availableRoomCo roomList.add(new HeartShopRoom()); } roomList.removeAll(shopRooms); + System.out.println("Shop rooms replaced with HeartShopRoom."); } - } } @@ -51,6 +51,7 @@ public static SpireReturn Prefix(AbstractDungeon __instance, Event if (EvilModeCharacterSelect.evilMode) { if (roomType == EventHelper.RoomResult.SHOP) { + System.out.println("Replacing SHOP room with HeartShopRoom."); return SpireReturn.Return(new HeartShopRoom()); } } @@ -59,7 +60,6 @@ public static SpireReturn Prefix(AbstractDungeon __instance, Event } } - @SpirePatch( clz = RoomTypeAssigner.class, method = "ruleParentMatches", @@ -71,6 +71,7 @@ public static void patch(ArrayList parents, AbstractRoom roomToBeSe if (EvilModeCharacterSelect.evilMode) { applicableRooms[0] = new ArrayList<>(applicableRooms[0]); applicableRooms[0].add(HeartShopRoom.class); + System.out.println("Added HeartShopRoom to applicableRooms."); } } } @@ -86,8 +87,8 @@ public static void patch(ArrayList parents, AbstractRoom roomToBeSe if (EvilModeCharacterSelect.evilMode) { applicableRooms[0] = new ArrayList<>(applicableRooms[0]); applicableRooms[0].add(HeartShopRoom.class); + System.out.println("Added HeartShopRoom to sibling applicableRooms."); } } } } - diff --git a/src/main/java/downfall/patches/ui/map/FlipMap.java b/src/main/java/downfall/patches/ui/map/FlipMap.java index 9697c03dd..c65bc5c9e 100644 --- a/src/main/java/downfall/patches/ui/map/FlipMap.java +++ b/src/main/java/downfall/patches/ui/map/FlipMap.java @@ -16,9 +16,11 @@ import com.megacrit.cardcrawl.map.MapEdge; import com.megacrit.cardcrawl.map.MapRoomNode; import com.megacrit.cardcrawl.map.RoomTypeAssigner; +import com.megacrit.cardcrawl.potions.AbstractPotion; import com.megacrit.cardcrawl.rooms.*; import com.megacrit.cardcrawl.screens.DungeonMapScreen; import com.megacrit.cardcrawl.ui.buttons.DynamicBanner; +import com.megacrit.cardcrawl.ui.panels.TopPanel; import downfall.downfallMod; import downfall.patches.EvilModeCharacterSelect; import downfall.patches.actlikeit.MapCompatiblity; @@ -31,6 +33,7 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import java.lang.reflect.Field; import java.util.*; public class FlipMap { @@ -636,4 +639,109 @@ public void edit(MethodCall m) throws CannotCompileException { } } } -} + @SpirePatch( + clz = DungeonMapScreen.class, + method = "updateControllerInput" + ) + public static class FixDownfallControllerInput { + private static Field visibleMapNodesField; + private static MapRoomNode lastSelectedNode; + + static { + try { + visibleMapNodesField = DungeonMapScreen.class.getDeclaredField("visibleMapNodes"); + visibleMapNodesField.setAccessible(true); + } catch (NoSuchFieldException e) { + e.printStackTrace(); + } + } + + @SpireInsertPatch( + locator = Locator.class, + localvars = {"nodes", "index", "anyHovered"} + ) + public static void Insert(DungeonMapScreen __instance, ArrayList nodes, @ByRef int[] index, @ByRef boolean[] anyHovered) { + if (EvilModeCharacterSelect.evilMode && !invalidActs.contains(AbstractDungeon.id) && !AbstractDungeon.firstRoomChosen) { + try { + @SuppressWarnings("unchecked") + ArrayList visibleMapNodes = (ArrayList) visibleMapNodesField.get(__instance); + nodes.clear(); + for (MapRoomNode n : visibleMapNodes) { + if (n.y == FlipMap.MapFlipper.startY) { + nodes.add(n); + } + } + + anyHovered[0] = false; + + for (int i = 0; i < nodes.size(); i++) { + if (nodes.get(i).hb.hovered) { + index[0] = i; + anyHovered[0] = true; + lastSelectedNode = nodes.get(i); + break; + } + } + + if (!anyHovered[0]) { + if (lastSelectedNode != null && nodes.contains(lastSelectedNode)) { + index[0] = nodes.indexOf(lastSelectedNode); + } else if (!nodes.isEmpty()) { + index[0] = nodes.size() / 2; + lastSelectedNode = nodes.get(index[0]); + } + + if (!nodes.isEmpty()) { + Gdx.input.setCursorPosition((int)nodes.get(index[0]).hb.cX, Settings.HEIGHT - (int)nodes.get(index[0]).hb.cY); + __instance.mapNodeHb = nodes.get(index[0]).hb; + } + } + + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + } + } + + private static class Locator extends SpireInsertLocator { + @Override + public int[] Locate(CtBehavior ctMethodToPatch) throws Exception { + Matcher finalMatcher = new Matcher.MethodCallMatcher(ArrayList.class, "isEmpty"); + return LineFinder.findInOrder(ctMethodToPatch, finalMatcher); + } + } + } + @SpirePatch(clz = TopPanel.class, method = "update") + public static class DisableTopPanelHoveringPatch { + @SpireInsertPatch(locator = Locator.class) + public static void Insert(TopPanel __instance) { + if (Settings.isControllerMode && EvilModeCharacterSelect.evilMode && !__instance.selectPotionMode) { + __instance.goldHb.hovered = false; + + for (AbstractPotion potion : AbstractDungeon.player.potions) { + potion.hb.hovered = false; + } + } + } + + private static class Locator extends SpireInsertLocator { + @Override + public int[] Locate(CtBehavior ctBehavior) throws Exception { + Matcher finalMatcher = new Matcher.MethodCallMatcher(TopPanel.class, "updateButtons"); + return LineFinder.findInOrder(ctBehavior, finalMatcher); + } + } + } + + @SpirePatch(clz = TopPanel.class, method = "updateAscensionHover") + public static class DisableAscensionHoveringPatch { + @SpirePrefixPatch + public static SpireReturn Prefix(TopPanel __instance) { + if (Settings.isControllerMode && EvilModeCharacterSelect.evilMode && !__instance.selectPotionMode) { + __instance.ascensionHb.hovered = false; + return SpireReturn.Return(null); + } + return SpireReturn.Continue(); + } + } +} \ No newline at end of file diff --git a/src/main/java/downfall/powers/ExhaustEndOfTurnPower.java b/src/main/java/downfall/powers/ExhaustEndOfTurnPower.java index 913ec8f68..22cf21d02 100644 --- a/src/main/java/downfall/powers/ExhaustEndOfTurnPower.java +++ b/src/main/java/downfall/powers/ExhaustEndOfTurnPower.java @@ -29,7 +29,7 @@ public class ExhaustEndOfTurnPower extends AbstractPower implements CloneablePow public ExhaustEndOfTurnPower(AbstractCreature owner) { this.ID = POWER_ID; this.owner = owner; - this.type = PowerType.BUFF; + this.type = PowerType.DEBUFF; this.isTurnBased = true; this.region128 = new TextureAtlas.AtlasRegion(tex84, 0, 0, 84, 84); diff --git a/src/main/java/downfall/powers/NextTurnPowerPower.java b/src/main/java/downfall/powers/NextTurnPowerPower.java index 83e201bb8..6f8cffe39 100644 --- a/src/main/java/downfall/powers/NextTurnPowerPower.java +++ b/src/main/java/downfall/powers/NextTurnPowerPower.java @@ -8,8 +8,11 @@ import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.localization.PowerStrings; import com.megacrit.cardcrawl.powers.AbstractPower; +import com.megacrit.cardcrawl.powers.watcher.VigorPower; import downfall.downfallMod; +import static champ.ChampMod.vigor; + public class NextTurnPowerPower extends AbstractPower { private AbstractPower powerToGain; private static PowerStrings powerStrings = CardCrawlGame.languagePack.getPowerStrings(downfallMod.makeID("NextTurnPowerPower")); @@ -43,7 +46,12 @@ public void stackPower(int stackAmount) { @Override public void atStartOfTurn() { flash(); - addToBot(new ApplyPowerAction(owner, owner, powerToGain, powerToGain.amount)); + if (powerToGain.ID != VigorPower.POWER_ID) { + addToBot(new ApplyPowerAction(owner, owner, powerToGain, powerToGain.amount)); + } + if (powerToGain.ID == VigorPower.POWER_ID) { + vigor(amount); + } addToBot(new RemoveSpecificPowerAction(owner, owner, this.ID)); } diff --git a/src/main/java/downfall/powers/TransformDrawnCardsPower.java b/src/main/java/downfall/powers/TransformDrawnCardsPower.java index a5bcbc1f9..aac651288 100644 --- a/src/main/java/downfall/powers/TransformDrawnCardsPower.java +++ b/src/main/java/downfall/powers/TransformDrawnCardsPower.java @@ -32,7 +32,7 @@ public TransformDrawnCardsPower(final AbstractCreature owner, final int amount) this.ID = POWER_ID; this.owner = owner; this.amount = amount; - this.type = PowerType.BUFF; + this.type = PowerType.DEBUFF; this.isTurnBased = true; this.name = NAME; diff --git a/src/main/java/downfall/powers/gauntletpowers/OnDeathEveryoneVigor.java b/src/main/java/downfall/powers/gauntletpowers/OnDeathEveryoneVigor.java index 3ed7967de..f20c6f9a3 100644 --- a/src/main/java/downfall/powers/gauntletpowers/OnDeathEveryoneVigor.java +++ b/src/main/java/downfall/powers/gauntletpowers/OnDeathEveryoneVigor.java @@ -13,6 +13,8 @@ import downfall.downfallMod; import downfall.util.TextureLoader; +import static champ.ChampMod.vigor; + public class OnDeathEveryoneVigor extends AbstractPower { public static final String POWER_ID = downfallMod.makeID("OnDeathEveryoneVigor"); public static final String NAME = CardCrawlGame.languagePack.getPowerStrings(POWER_ID).NAME; @@ -40,7 +42,8 @@ public OnDeathEveryoneVigor(final AbstractCreature owner, final int amount) { @Override public void onDeath() { flash(); - addToBot(new ApplyPowerAction(AbstractDungeon.player, this.owner, new VigorPower(AbstractDungeon.player, amount), amount)); + vigor(amount); + //addToBot(new ApplyPowerAction(AbstractDungeon.player, this.owner, new VigorPower(AbstractDungeon.player, amount), amount)); for(AbstractMonster m : AbstractDungeon.getCurrRoom().monsters.monsters) { if (!m.isDying && !m.isDead) { addToBot(new ApplyPowerAction(m, this.owner, new MonsterVigor(m, amount), amount)); diff --git a/src/main/java/downfall/powers/neowpowers/HeartsFavorPower.java b/src/main/java/downfall/powers/neowpowers/HeartsFavorPower.java index 40b633a7e..fdf03ca11 100644 --- a/src/main/java/downfall/powers/neowpowers/HeartsFavorPower.java +++ b/src/main/java/downfall/powers/neowpowers/HeartsFavorPower.java @@ -22,6 +22,7 @@ import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.AbstractPower; import com.megacrit.cardcrawl.powers.ArtifactPower; +import com.megacrit.cardcrawl.powers.BufferPower; import com.megacrit.cardcrawl.powers.StrengthPower; import downfall.cards.HeartsFavorWish; import downfall.cards.OctoChoiceCard; @@ -64,7 +65,12 @@ public void onSpecificTrigger() { AbstractPlayer p = AbstractDungeon.player; for (AbstractMonster m : AbstractDungeon.getCurrRoom().monsters.monsters) { if (m != null && !m.isDead && !m.isDying && !m.halfDead && m.id == NeowBossFinal.ID) { - addToBot(new ApplyPowerAction(m, p, new NeowInvulnerablePower(m, -this.amount), -this.amount)); + if (m.hasPower(NeowInvulnerablePower.POWER_ID)) { + int buf = m.getPower(NeowInvulnerablePower.POWER_ID).amount; + if (buf > 0) { + addToBot(new ApplyPowerAction(m, p, new NeowInvulnerablePower(m, -this.amount), -this.amount)); + } + } } } } diff --git a/src/main/java/downfall/powers/neowpowers/UnbiasedCognition.java b/src/main/java/downfall/powers/neowpowers/UnbiasedCognition.java index ae848aa06..588ae0464 100644 --- a/src/main/java/downfall/powers/neowpowers/UnbiasedCognition.java +++ b/src/main/java/downfall/powers/neowpowers/UnbiasedCognition.java @@ -1,6 +1,5 @@ package downfall.powers.neowpowers; -import charbosses.bosses.AbstractCharBoss; import charbosses.cards.AbstractBossCard; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.TextureAtlas; @@ -9,9 +8,6 @@ import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.core.AbstractCreature; import com.megacrit.cardcrawl.core.CardCrawlGame; -import com.megacrit.cardcrawl.dungeons.AbstractDungeon; -import com.megacrit.cardcrawl.powers.AbstractPower; -import com.megacrit.cardcrawl.powers.FocusPower; import com.megacrit.cardcrawl.powers.StrengthPower;import downfall.downfallMod; import charbosses.powers.bossmechanicpowers.AbstractBossMechanicPower; import downfall.util.TextureLoader; diff --git a/src/main/java/downfall/powers/neowpowers/WheelOfDeath.java b/src/main/java/downfall/powers/neowpowers/WheelOfDeath.java index 02c7f04b4..ed38e904a 100644 --- a/src/main/java/downfall/powers/neowpowers/WheelOfDeath.java +++ b/src/main/java/downfall/powers/neowpowers/WheelOfDeath.java @@ -4,16 +4,13 @@ import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; -import com.megacrit.cardcrawl.actions.common.ReducePowerAction; import com.megacrit.cardcrawl.actions.utility.UseCardAction; import com.megacrit.cardcrawl.cards.AbstractCard; -import com.megacrit.cardcrawl.cards.DamageInfo; import com.megacrit.cardcrawl.core.AbstractCreature; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.powers.StrengthPower; import downfall.downfallMod; import downfall.util.TextureLoader; -import expansioncontent.powers.DeEnergizedPower; public class WheelOfDeath extends AbstractBossMechanicPower { public static final String POWER_ID = downfallMod.makeID("NeowWheelOfDeath"); diff --git a/src/main/java/downfall/relics/BlackCandle.java b/src/main/java/downfall/relics/BlackCandle.java new file mode 100644 index 000000000..7cb7c30e4 --- /dev/null +++ b/src/main/java/downfall/relics/BlackCandle.java @@ -0,0 +1,57 @@ +package downfall.relics; +import basemod.abstracts.CustomRelic; +import com.badlogic.gdx.graphics.Texture; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.LoseHPAction; +import com.megacrit.cardcrawl.actions.utility.UseCardAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.relics.AbstractRelic; +import downfall.downfallMod; +import hermit.characters.hermit; +import hermit.patches.EnumPatch; + +import static downfall.patches.EvilModeCharacterSelect.evilMode; + +public class BlackCandle extends CustomRelic { + + public static final String ID = downfallMod.makeID("BlackCandle"); + private static final Texture IMG = new Texture(downfallMod.assetPath("images/relics/BlackCandle.png")); + private static final Texture OUTLINE = new Texture(downfallMod.assetPath("images/relics/Outline/BlackCandleOutline.png")); + + public BlackCandle() { + super(ID, IMG, OUTLINE, RelicTier.UNCOMMON, LandingSound.MAGICAL); + } + + @Override + public String getUpdatedDescription() { + return DESCRIPTIONS[0]; + } + + public void onUseCard(AbstractCard card, UseCardAction action) { + if (card.type == AbstractCard.CardType.CURSE) { + if (card.cost == -2) { + this.flash(); + this.addToBot(new LoseHPAction(AbstractDungeon.player, AbstractDungeon.player, 1, EnumPatch.HERMIT_GHOSTFIRE)); + card.exhaust = true; + action.exhaustCard = true; + } else { + if (card.exhaust && card.cost !=0 && card.freeToPlay() && card.cost !=-2) { + this.flash(); + this.addToBot(new LoseHPAction(AbstractDungeon.player, AbstractDungeon.player, 1, EnumPatch.HERMIT_GHOSTFIRE)); + card.exhaust = true; + action.exhaustCard = true; + } + } + } + } + + public boolean canSpawn() { + // return false; + return (evilMode || (AbstractDungeon.player instanceof hermit)); + } + + public AbstractRelic makeCopy() { + return new BlackCandle(); + } +} \ No newline at end of file diff --git a/src/main/java/downfall/relics/BurdenOfKnowledge.java b/src/main/java/downfall/relics/BurdenOfKnowledge.java new file mode 100644 index 000000000..395ca7b66 --- /dev/null +++ b/src/main/java/downfall/relics/BurdenOfKnowledge.java @@ -0,0 +1,125 @@ +package downfall.relics; + +import basemod.abstracts.CustomRelic; +import champ.relics.Barbells; +import champ.relics.PowerArmor; +import collector.CollectorCollection; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.math.MathUtils; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.EscapeAction; +import com.megacrit.cardcrawl.actions.common.RelicAboveCreatureAction; +import com.megacrit.cardcrawl.actions.unique.ArmamentsAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.CardGroup; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; + +import java.util.function.Predicate; +import com.megacrit.cardcrawl.powers.DexterityPower; +import com.megacrit.cardcrawl.powers.StrengthPower; +import com.megacrit.cardcrawl.powers.watcher.MasterRealityPower; +import com.megacrit.cardcrawl.relics.*; +import com.megacrit.cardcrawl.vfx.UpgradeShineEffect; +import com.megacrit.cardcrawl.vfx.cardManip.ShowCardBrieflyEffect; +import downfall.actions.WaitForEscapeAction; +import downfall.downfallMod; +import gremlin.characters.GremlinCharacter; +import guardian.relics.StasisUpgradeRelic; +import hermit.relics.Horseshoe; +import sneckomod.relics.UnknownEgg; + +import java.util.ArrayList; +import java.util.List; + +public class BurdenOfKnowledge extends CustomRelic { + + public static final String ID = downfallMod.makeID("BurdenOfKnowledge"); + private static final Texture IMG = new Texture(downfallMod.assetPath("images/relics/Burden.png")); + private static final Texture OUTLINE = new Texture(downfallMod.assetPath("images/relics/Outline/Burden.png")); + int effectCount = 0; + + public BurdenOfKnowledge() { + super(ID, IMG, OUTLINE, RelicTier.DEPRECATED, LandingSound.MAGICAL); + } + + public String getUpdatedDescription() { + return this.DESCRIPTIONS[0]; + } + + //todo: variables + + public void onEquip() { + + downfallMod.removeAnyRelicFromPools(ToxicEgg2.ID); + downfallMod.removeAnyRelicFromPools(FrozenEgg2.ID); + downfallMod.removeAnyRelicFromPools(MoltenEgg2.ID); + downfallMod.removeAnyRelicFromPools(UnknownEgg.ID); + downfallMod.removeAnyRelicFromPools(StasisUpgradeRelic.ID); + downfallMod.removeAnyRelicFromPools(Barbells.ID); + + AbstractDungeon.player.decreaseMaxHealth(20); + List upgradedCards = new ArrayList(); + + for (AbstractCard c : AbstractDungeon.player.masterDeck.group) { + if (c.canUpgrade()) { + ++effectCount; + if (effectCount <= 20) { + float x = MathUtils.random(0.1F, 0.9F) * (float) Settings.WIDTH; + float y = MathUtils.random(0.2F, 0.8F) * (float) Settings.HEIGHT; + AbstractDungeon.effectList.add(new ShowCardBrieflyEffect(c.makeStatEquivalentCopy(), x, y)); + AbstractDungeon.topLevelEffects.add(new UpgradeShineEffect(x, y)); + } + + upgradedCards.add(c.cardID); + c.upgrade(); + AbstractDungeon.player.bottledCardUpgradeCheck(c); + } + } + + + //collector compat + CardGroup group = CardGroup.getGroupWithoutBottledCards(CollectorCollection.collection); + for (AbstractCard c : group.group) { + if (c.canUpgrade()) { + ++effectCount; + if (effectCount <= 20) { + float x = MathUtils.random(0.1F, 0.9F) * (float) Settings.WIDTH; + float y = MathUtils.random(0.2F, 0.8F) * (float) Settings.HEIGHT; + AbstractDungeon.effectList.add(new ShowCardBrieflyEffect(c.makeStatEquivalentCopy(), x, y)); + AbstractDungeon.topLevelEffects.add(new UpgradeShineEffect(x, y)); + } + upgradedCards.add(c.cardID); + c.upgrade(); + AbstractDungeon.player.bottledCardUpgradeCheck(c); + } + } + + + AbstractDungeon.player.loseRelic(HeartBlessingRed.ID); + AbstractDungeon.player.loseRelic(HeartBlessingBlue.ID); + AbstractDungeon.player.loseRelic(HeartBlessingGreen.ID); + } + + public void onPreviewObtainCard(AbstractCard c) { + this.onObtainCard(c); + } + + public void onObtainCard(AbstractCard c) { + if (!c.upgraded) { + c.upgrade(); + } + } + + public void atPreBattle() { + this.flash(); + this.addToTop(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new MasterRealityPower(AbstractDungeon.player))); + this.addToTop(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new StrengthPower(AbstractDungeon.player, -2), -2)); + this.addToTop(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new DexterityPower(AbstractDungeon.player, -2), -2)); + this.addToTop(new RelicAboveCreatureAction(AbstractDungeon.player, this)); + } + + public AbstractRelic makeCopy() { + return new BurdenOfKnowledge(); + } +} diff --git a/src/main/java/downfall/relics/ExtraCursedBell.java b/src/main/java/downfall/relics/ExtraCursedBell.java index d082663e2..dba86d225 100644 --- a/src/main/java/downfall/relics/ExtraCursedBell.java +++ b/src/main/java/downfall/relics/ExtraCursedBell.java @@ -9,6 +9,7 @@ import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.helpers.input.InputHelper; +import com.megacrit.cardcrawl.relics.*; import com.megacrit.cardcrawl.rewards.RewardItem; import com.megacrit.cardcrawl.unlock.UnlockTracker; import downfall.downfallMod; @@ -35,7 +36,7 @@ public void onEquip() { CardGroup group = new CardGroup(CardGroup.CardGroupType.UNSPECIFIED); AbstractCard bellCurse = new CurseOfTheBell(); UnlockTracker.markCardAsSeen(bellCurse.cardID); - for (int i = 0; i < 2; i++) + for (int i = 0; i < 1; i++) group.addToBottom(bellCurse.makeCopy()); AbstractDungeon.gridSelectScreen.openConfirmationGrid(group, this.DESCRIPTIONS[1]); CardCrawlGame.sound.playA("BELL", MathUtils.random(-0.2F, -0.3F)); @@ -44,12 +45,32 @@ public void onEquip() { public void update() { super.update(); if (!this.cardsReceived && !AbstractDungeon.isScreenUp) { + for (int i = 0; i < 3; i++) { + AbstractRelic coolcommon = AbstractDungeon.returnRandomScreenlessRelic(RelicTier.COMMON); + //sandtag wanted these relics removed from this things pool + if ((coolcommon.relicId == ArtOfWar.ID) || + (coolcommon.relicId == AncientTeaSet.ID) || + (coolcommon.relicId == DreamCatcher.ID) || + (coolcommon.relicId == PotionBelt.ID) || + (coolcommon.relicId == RegalPillow.ID) || + (coolcommon.relicId == Boot.ID) || + (coolcommon.relicId == TinyChest.ID)) { + while ((coolcommon.relicId == ArtOfWar.ID) || + (coolcommon.relicId == AncientTeaSet.ID) || + (coolcommon.relicId == DreamCatcher.ID) || + (coolcommon.relicId == PotionBelt.ID) || + (coolcommon.relicId == RegalPillow.ID) || + (coolcommon.relicId == Boot.ID) || + (coolcommon.relicId == TinyChest.ID)) { + coolcommon = AbstractDungeon.returnRandomScreenlessRelic(RelicTier.COMMON); + } + } + AbstractDungeon.getCurrRoom().rewards.add(new RewardItem(coolcommon)); + System.out.println(coolcommon.relicId); + } AbstractDungeon.combatRewardScreen.open(); - AbstractDungeon.combatRewardScreen.rewards.clear(); - AbstractDungeon.combatRewardScreen.rewards.add(new RewardItem(AbstractDungeon.returnRandomScreenlessRelic(RelicTier.COMMON))); - AbstractDungeon.combatRewardScreen.rewards.add(new RewardItem(AbstractDungeon.returnRandomScreenlessRelic(RelicTier.UNCOMMON))); - AbstractDungeon.combatRewardScreen.rewards.add(new RewardItem(AbstractDungeon.returnRandomScreenlessRelic(RelicTier.RARE))); - AbstractDungeon.combatRewardScreen.positionRewards(); + //AbstractDungeon.combatRewardScreen.rewards.clear(); + //AbstractDungeon.combatRewardScreen.positionRewards(); AbstractDungeon.overlayMenu.proceedButton.setLabel(this.DESCRIPTIONS[2]); this.cardsReceived = true; AbstractDungeon.getCurrRoom().rewardPopOutTimer = 0.25F; @@ -60,6 +81,8 @@ public void update() { CardCrawlGame.sound.playA("souls1", -0.1F); this.flash(); } - } + + + } diff --git a/src/main/java/downfall/relics/ExtraCursedKey.java b/src/main/java/downfall/relics/ExtraCursedKey.java index 089dd12e6..4f10daf85 100644 --- a/src/main/java/downfall/relics/ExtraCursedKey.java +++ b/src/main/java/downfall/relics/ExtraCursedKey.java @@ -2,9 +2,15 @@ import basemod.abstracts.CustomRelic; import com.badlogic.gdx.graphics.Texture; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.GainEnergyAction; import com.megacrit.cardcrawl.actions.common.RelicAboveCreatureAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.curses.Injury; +import com.megacrit.cardcrawl.cards.curses.Necronomicurse; import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.powers.watcher.VigorPower; import com.megacrit.cardcrawl.rooms.AbstractRoom; import com.megacrit.cardcrawl.rooms.TreasureRoom; import com.megacrit.cardcrawl.vfx.cardManip.ShowCardAndObtainEffect; @@ -15,6 +21,7 @@ public class ExtraCursedKey extends CustomRelic { public static final String ID = downfallMod.makeID("ExtraCursedKey"); private static final Texture IMG = new Texture(downfallMod.assetPath("images/relics/ExtraCursedKey.png")); private static final Texture OUTLINE = new Texture(downfallMod.assetPath("images/relics/Outline/ExtraCursedKey.png")); + private boolean triggeredThisTurn = false; public ExtraCursedKey() { super(ID, IMG, OUTLINE, RelicTier.SPECIAL, LandingSound.CLINK); @@ -37,18 +44,26 @@ public void justEnteredRoom(AbstractRoom room) { public void onChestOpen(boolean bossChest) { if (!bossChest) { - for (int i = 0; i < 2; i++) { - AbstractDungeon.topLevelEffects.add(new ShowCardAndObtainEffect(AbstractDungeon.returnRandomCurse(), (float) (Settings.WIDTH / 2), (float) (Settings.HEIGHT / 2))); + for (int i = 0; i < 1; i++) { + AbstractDungeon.effectList.add(new ShowCardAndObtainEffect(new Injury(), (float) Settings.WIDTH / 2.0F, (float) Settings.HEIGHT / 2.0F)); this.addToTop(new RelicAboveCreatureAction(AbstractDungeon.player, this)); } } } - public void onEquip() { - ++AbstractDungeon.player.energy.energyMaster; + public void atTurnStart() { + this.triggeredThisTurn = false; } - public void onUnequip() { - --AbstractDungeon.player.energy.energyMaster; + public void onCardDraw(AbstractCard card) { + if (card.color == AbstractCard.CardColor.CURSE) { + if (!this.triggeredThisTurn) { + this.triggeredThisTurn = true; + this.flash(); + this.addToBot(new RelicAboveCreatureAction(AbstractDungeon.player, this)); + this.addToBot(new GainEnergyAction(1)); + } + + } } } diff --git a/src/main/java/downfall/relics/HeartBlessingBlue.java b/src/main/java/downfall/relics/HeartBlessingBlue.java index 1f8efe590..4bdca0440 100644 --- a/src/main/java/downfall/relics/HeartBlessingBlue.java +++ b/src/main/java/downfall/relics/HeartBlessingBlue.java @@ -3,9 +3,12 @@ import basemod.abstracts.CustomRelic; import com.badlogic.gdx.graphics.Texture; import com.evacipated.cardcrawl.mod.stslib.actions.tempHp.AddTemporaryHPAction; +import com.megacrit.cardcrawl.actions.common.HealAction; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; import downfall.downfallMod; +import gremlin.characters.GremlinCharacter; +import gremlin.patches.GremlinEnum; public class HeartBlessingBlue extends CustomRelic { @@ -26,7 +29,13 @@ public String getUpdatedDescription() { public void atBattleStart() { if (AbstractDungeon.getCurrRoom().monsters.monsters.stream().anyMatch(q -> q.type == AbstractMonster.EnemyType.BOSS)) { flash(); - addToBot(new AddTemporaryHPAction(AbstractDungeon.player, AbstractDungeon.player, 10)); + //addToBot(new AddTemporaryHPAction(AbstractDungeon.player, AbstractDungeon.player, 10)); + if (AbstractDungeon.player.chosenClass != GremlinEnum.GREMLIN) { + this.addToTop(new HealAction(AbstractDungeon.player, AbstractDungeon.player, 10, 0.0F)); + } + else { + ((GremlinCharacter)AbstractDungeon.player).healGremlins(2); + } } } } diff --git a/src/main/java/downfall/relics/HeartsMalice.java b/src/main/java/downfall/relics/HeartsMalice.java index 2f0e1c46a..7a97df785 100644 --- a/src/main/java/downfall/relics/HeartsMalice.java +++ b/src/main/java/downfall/relics/HeartsMalice.java @@ -8,6 +8,8 @@ import com.megacrit.cardcrawl.helpers.PowerTip; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.relics.AbstractRelic; +import com.megacrit.cardcrawl.rooms.MonsterRoom; +import com.megacrit.cardcrawl.rooms.ShopRoom; import downfall.actions.WaitForEscapeAction; import downfall.downfallMod; import gremlin.characters.GremlinCharacter; @@ -28,31 +30,32 @@ public String getUpdatedDescription() { } public void atBattleStart() { - if (this.counter > 0) { - --this.counter; - if (this.counter == 0) { - this.setCounter(-2); - this.description = this.DESCRIPTIONS[1]; - this.tips.clear(); - this.tips.add(new PowerTip(this.name, this.description)); - this.initializeTips(); - } + if (!(AbstractDungeon.getCurrRoom() instanceof ShopRoom)) { + if (this.counter > 0) { + --this.counter; + if (this.counter == 0) { + this.setCounter(-2); + this.description = this.DESCRIPTIONS[1]; + this.tips.clear(); + this.tips.add(new PowerTip(this.name, this.description)); + this.initializeTips(); + } - this.flash(); + this.flash(); - //AbstractDungeon.actionManager.actions.removeIf((act)->act instanceof DrawCardAction); Works, but may cause issues if somehow not all enemies flee. - AbstractDungeon.actionManager.addToTop(new WaitForEscapeAction()); //This works better. - for (AbstractMonster m : AbstractDungeon.getCurrRoom().monsters.monsters) { - AbstractDungeon.actionManager.addToTop(new EscapeAction(m)); - } + //AbstractDungeon.actionManager.actions.removeIf((act)->act instanceof DrawCardAction); Works, but may cause issues if somehow not all enemies flee. + AbstractDungeon.actionManager.addToTop(new WaitForEscapeAction()); //This works better. + for (AbstractMonster m : AbstractDungeon.getCurrRoom().monsters.monsters) { + AbstractDungeon.actionManager.addToTop(new EscapeAction(m)); + } - this.addToTop(new RelicAboveCreatureAction(AbstractDungeon.player, this)); + this.addToTop(new RelicAboveCreatureAction(AbstractDungeon.player, this)); - if(AbstractDungeon.player instanceof GremlinCharacter) { - ((GremlinCharacter) AbstractDungeon.player).mobState.startOfBattle((GremlinCharacter)AbstractDungeon.player); + if (AbstractDungeon.player instanceof GremlinCharacter) { + ((GremlinCharacter) AbstractDungeon.player).mobState.startOfBattle((GremlinCharacter) AbstractDungeon.player); + } } } - } public void setCounter(int setCounter) { diff --git a/src/main/java/downfall/relics/Hecktoplasm.java b/src/main/java/downfall/relics/Hecktoplasm.java index 1e7ca3ea3..e8ce07c70 100644 --- a/src/main/java/downfall/relics/Hecktoplasm.java +++ b/src/main/java/downfall/relics/Hecktoplasm.java @@ -13,7 +13,8 @@ import downfall.downfallMod; import downfall.patches.EvilModeCharacterSelect; -@Deprecated +import static downfall.patches.EvilModeCharacterSelect.evilMode; + public class Hecktoplasm extends CustomRelic { public static final String ID = downfallMod.makeID("Hecktoplasm"); @@ -38,7 +39,7 @@ public void onUnequip() { } public boolean canSpawn() { - return (AbstractDungeon.actNum <= 1 && EvilModeCharacterSelect.evilMode); + return (AbstractDungeon.actNum <= 1 && evilMode); } public AbstractRelic makeCopy() { diff --git a/src/main/java/downfall/relics/ShatteredFragment.java b/src/main/java/downfall/relics/ShatteredFragment.java index 1c1799bf8..aab1d278c 100644 --- a/src/main/java/downfall/relics/ShatteredFragment.java +++ b/src/main/java/downfall/relics/ShatteredFragment.java @@ -3,11 +3,29 @@ import basemod.abstracts.CustomRelic; import basemod.helpers.CardPowerTip; import com.badlogic.gdx.graphics.Texture; +import com.evacipated.cardcrawl.mod.stslib.actions.tempHp.AddTemporaryHPAction; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; import com.megacrit.cardcrawl.actions.common.MakeTempCardInHandAction; import com.megacrit.cardcrawl.actions.common.RelicAboveCreatureAction; +import com.megacrit.cardcrawl.actions.utility.UseCardAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.core.AbstractCreature; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.AbstractPower; +import com.megacrit.cardcrawl.powers.CuriosityPower; +import com.megacrit.cardcrawl.powers.RitualPower; +import com.megacrit.cardcrawl.powers.StrengthPower; import downfall.cards.BloodySacrifice; +import downfall.cards.curses.Scatterbrained; import downfall.downfallMod; +import expansioncontent.actions.EchoACardAction; +import expansioncontent.cards.AwakenDeath; + +import java.util.Iterator; + +import static hermit.util.Wiz.atb; public class ShatteredFragment extends CustomRelic { @@ -16,13 +34,16 @@ public class ShatteredFragment extends CustomRelic { private static final Texture OUTLINE = new Texture(downfallMod.assetPath("images/relics/Outline/WingShiv.png")); public ShatteredFragment() { - super(ID, IMG, OUTLINE, RelicTier.SPECIAL, LandingSound.FLAT); - tips.add(new CardPowerTip( new BloodySacrifice() ) ); + super(ID, IMG, OUTLINE, RelicTier.SPECIAL, LandingSound.MAGICAL); + //tips.add(new CardPowerTip( new AwakenDeath() ) ); } + //Variables + public static final int AMOUNT = 1; + @Override public String getUpdatedDescription() { - return DESCRIPTIONS[0]; + return DESCRIPTIONS[0] + AMOUNT + DESCRIPTIONS[1]; } // @Override @@ -30,10 +51,53 @@ public String getUpdatedDescription() { // this.addToBot(new RelicAboveCreatureAction(AbstractDungeon.player, this)); // this.addToBot(new MakeTempCardInHandAction(new CrystalShiv(), 1, false)); // } - @Override - public void atBattleStartPreDraw() { - this.addToBot(new RelicAboveCreatureAction(AbstractDungeon.player, this));// 24 - this.addToBot(new MakeTempCardInHandAction(new BloodySacrifice()));// 25 - } + +// @Override +// public void atBattleStartPreDraw() { +// this.addToBot(new RelicAboveCreatureAction(AbstractDungeon.player, this));// 24 +// this.addToBot(new MakeTempCardInHandAction(new BloodySacrifice()));// 25 +// } + + public void onUseCard(AbstractCard card, UseCardAction action) { + if (card.type == AbstractCard.CardType.POWER) { + boolean isEliteOrBoss = AbstractDungeon.getCurrRoom().eliteTrigger; + Iterator var2 = AbstractDungeon.getMonsters().monsters.iterator(); + while(var2.hasNext()) { + AbstractMonster m = (AbstractMonster)var2.next(); + if (m.type == AbstractMonster.EnemyType.BOSS) { + isEliteOrBoss = true; + } + } + + if (isEliteOrBoss) { + this.addToBot(new RelicAboveCreatureAction(AbstractDungeon.player, this)); + atb((AbstractGameAction)new ApplyPowerAction((AbstractCreature)AbstractDungeon.player, (AbstractCreature)AbstractDungeon.player, (AbstractPower)new StrengthPower((AbstractCreature)AbstractDungeon.player, AMOUNT), AMOUNT)); + } + } + } + + + +// public void atBattleStart() { +// boolean isEliteOrBoss = AbstractDungeon.getCurrRoom().eliteTrigger; +// Iterator var2 = AbstractDungeon.getMonsters().monsters.iterator(); +// +// while(var2.hasNext()) { +// AbstractMonster m = (AbstractMonster)var2.next(); +// if (m.type == AbstractMonster.EnemyType.BOSS) { +// isEliteOrBoss = true; +// } +// } +// +// if (isEliteOrBoss) { +// this.addToBot(new RelicAboveCreatureAction(AbstractDungeon.player, this)); +// // AbstractCard q = new AwakenDeath(); +// // addToTop(new EchoACardAction(q, true)); +// atb((AbstractGameAction)new ApplyPowerAction((AbstractCreature)AbstractDungeon.player, (AbstractCreature)AbstractDungeon.player, (AbstractPower)new CuriosityPower((AbstractCreature)AbstractDungeon.player, 1), 1)); +// +// } +// +// } + } diff --git a/src/main/java/downfall/tutorials/AutomatonTutorials.java b/src/main/java/downfall/tutorials/AutomatonTutorials.java new file mode 100644 index 000000000..258b3f96c --- /dev/null +++ b/src/main/java/downfall/tutorials/AutomatonTutorials.java @@ -0,0 +1,134 @@ +package downfall.tutorials; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.math.Interpolation; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.helpers.FontHelper; +import com.megacrit.cardcrawl.helpers.ImageMaster; +import com.megacrit.cardcrawl.helpers.controller.CInputActionSet; +import com.megacrit.cardcrawl.helpers.input.InputHelper; +import com.megacrit.cardcrawl.localization.TutorialStrings; +import com.megacrit.cardcrawl.ui.FtueTip; +import downfall.util.TextureLoader; + +public class AutomatonTutorials extends FtueTip { + + private static final TutorialStrings tutorialStrings = CardCrawlGame.languagePack.getTutorialString("HermitMod:AutomatonTutorials"); + public static final String[] txt = tutorialStrings.TEXT; + public static final String[] LABEL = tutorialStrings.LABEL; + private Texture img1; + private Texture img2; + private Texture img3; + private Color screen = Color.valueOf("1c262a00"); + private float x; + private float x1; + private float x2; + private float x3; + private float targetX; + private float startX; + private float scrollTimer = 0.0F; + private int currentSlot = 0; + private static String txt1 = txt[0]; + private static String txt2 = txt[1]; + + private int closeScreen; + + + public AutomatonTutorials() { + + this.img1 = TextureLoader.getTexture("hermitResources/images/tip/AutomatonTip1.png"); + this.img2 = TextureLoader.getTexture("hermitResources/images/tip/AutomatonTip2.png"); + + txt1 = txt[0]; + txt2 = txt[1]; + this.closeScreen = -1; + + AbstractDungeon.player.releaseCard(); + if (AbstractDungeon.isScreenUp) { + AbstractDungeon.dynamicBanner.hide(); + AbstractDungeon.previousScreen = AbstractDungeon.screen; + } + AbstractDungeon.isScreenUp = true; + AbstractDungeon.screen = AbstractDungeon.CurrentScreen.FTUE; + AbstractDungeon.overlayMenu.showBlackScreen(); + this.x = 0.0F; + this.x1 = 567.0F * Settings.scale; + this.x2 = this.x1 + Settings.WIDTH; + AbstractDungeon.overlayMenu.proceedButton.show(); + AbstractDungeon.overlayMenu.proceedButton.setLabel(LABEL[0]); + } + + + public void update() { + AbstractDungeon.overlayMenu.proceedButton.setLabel(LABEL[0]); + if (this.currentSlot <= this.closeScreen) { + AbstractDungeon.overlayMenu.proceedButton.setLabel(LABEL[1]); + } + if (this.screen.a != 0.8F) { + this.screen.a += Gdx.graphics.getDeltaTime(); + if (this.screen.a > 0.8F) { + this.screen.a = 0.8F; + } + } + if ((AbstractDungeon.overlayMenu.proceedButton.isHovered && InputHelper.justClickedLeft) || CInputActionSet.proceed + .isJustPressed()) { + + CInputActionSet.proceed.unpress(); + if (this.currentSlot <= this.closeScreen) { + + CardCrawlGame.sound.play("DECK_CLOSE"); + AbstractDungeon.closeCurrentScreen(); + AbstractDungeon.overlayMenu.proceedButton.hide(); + AbstractDungeon.effectList.clear(); + + } + + + this.currentSlot--; + this.startX = this.x; + this.targetX = (this.currentSlot * Settings.WIDTH); + this.scrollTimer = 0.3F; + if (this.currentSlot <= this.closeScreen) { + AbstractDungeon.overlayMenu.proceedButton.setLabel(LABEL[1]); + } + } + if (this.scrollTimer != 0.0F) { + this.scrollTimer -= Gdx.graphics.getDeltaTime(); + if (this.scrollTimer < 0.0F) { + this.scrollTimer = 0.0F; + } + } + this.x = Interpolation.fade.apply(this.targetX, this.startX, this.scrollTimer / 0.3F); + } + + + public void render(SpriteBatch sb) { + sb.setColor(this.screen); + sb.draw(ImageMaster.WHITE_SQUARE_IMG, 0.0F, 0.0F, Settings.WIDTH, Settings.HEIGHT); + + sb.setColor(Color.WHITE); + sb.draw(this.img1, this.x + this.x1 - 380.0F, Settings.HEIGHT / 2.0F - 290.0F, 380.0F, 290.0F, 760.0F, 580.0F, Settings.scale, Settings.scale, 0.0F, 0, 0, 760, 580, false, false); + /* */ + sb.draw(this.img2, this.x + this.x2 - 380.0F, Settings.HEIGHT / 2.0F - 290.0F, 380.0F, 290.0F, 760.0F, 580.0F, Settings.scale, Settings.scale, 0.0F, 0, 0, 760, 580, false, false); + /* */ + FontHelper.renderSmartText(sb, FontHelper.panelNameFont, txt1, this.x + this.x1 + 400.0F * Settings.scale, Settings.HEIGHT / 2.0F - + FontHelper.getSmartHeight(FontHelper.panelNameFont, txt1, 700.0F * Settings.scale, 40.0F * Settings.scale) / 2.0F, 700.0F * Settings.scale, 40.0F * Settings.scale, Settings.CREAM_COLOR); + + FontHelper.renderSmartText(sb, FontHelper.panelNameFont, txt2, this.x + this.x2 + 400.0F * Settings.scale, Settings.HEIGHT / 2.0F - + FontHelper.getSmartHeight(FontHelper.panelNameFont, txt2, 700.0F * Settings.scale, 40.0F * Settings.scale) / 2.0F, 700.0F * Settings.scale, 40.0F * Settings.scale, Settings.CREAM_COLOR); + + FontHelper.renderFontCenteredWidth(sb, FontHelper.panelNameFont, LABEL[2], Settings.WIDTH / 2.0F, Settings.HEIGHT / 2.0F - 360.0F * Settings.scale, Settings.GOLD_COLOR); + + FontHelper.renderFontCenteredWidth(sb, FontHelper.tipBodyFont, LABEL[3] + Integer.toString(Math.abs(this.currentSlot - 1)) + "/" + + Math.abs(this.closeScreen - 1) + LABEL[4], Settings.WIDTH / 2.0F, Settings.HEIGHT / 2.0F - 400.0F * Settings.scale, Settings.CREAM_COLOR); + + AbstractDungeon.overlayMenu.proceedButton.render(sb); + } + + +} diff --git a/src/main/java/downfall/tutorials/AwakenedOneTutorials.java b/src/main/java/downfall/tutorials/AwakenedOneTutorials.java new file mode 100644 index 000000000..3dece52ed --- /dev/null +++ b/src/main/java/downfall/tutorials/AwakenedOneTutorials.java @@ -0,0 +1,133 @@ +package downfall.tutorials; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.math.Interpolation; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.helpers.FontHelper; +import com.megacrit.cardcrawl.helpers.ImageMaster; +import com.megacrit.cardcrawl.helpers.controller.CInputActionSet; +import com.megacrit.cardcrawl.helpers.input.InputHelper; +import com.megacrit.cardcrawl.localization.TutorialStrings; +import com.megacrit.cardcrawl.ui.FtueTip; + +public class AwakenedOneTutorials extends FtueTip { + + private static final TutorialStrings tutorialStrings = CardCrawlGame.languagePack.getTutorialString("HermitMod:AwakenedOneTutorials"); + public static final String[] txt = tutorialStrings.TEXT; + public static final String[] LABEL = tutorialStrings.LABEL; + private Texture img1; + private Texture img2; + private Texture img3; + private Color screen = Color.valueOf("1c262a00"); + private float x; + private float x1; + private float x2; + private float x3; + private float targetX; + private float startX; + private float scrollTimer = 0.0F; + private int currentSlot = 0; + private static String txt1 = txt[0]; + private static String txt2 = txt[1]; + + private int closeScreen; + + + public AwakenedOneTutorials() { + + this.img1 = ImageMaster.loadImage("hermitResources/images/tip/awakened_t1.png"); + this.img2 = ImageMaster.loadImage("hermitResources/images/tip/awakened_t2.png"); + + txt1 = txt[0]; + txt2 = txt[1]; + this.closeScreen = -1; + + AbstractDungeon.player.releaseCard(); + if (AbstractDungeon.isScreenUp) { + AbstractDungeon.dynamicBanner.hide(); + AbstractDungeon.previousScreen = AbstractDungeon.screen; + } + AbstractDungeon.isScreenUp = true; + AbstractDungeon.screen = AbstractDungeon.CurrentScreen.FTUE; + AbstractDungeon.overlayMenu.showBlackScreen(); + this.x = 0.0F; + this.x1 = 567.0F * Settings.scale; + this.x2 = this.x1 + Settings.WIDTH; + AbstractDungeon.overlayMenu.proceedButton.show(); + AbstractDungeon.overlayMenu.proceedButton.setLabel(LABEL[0]); + } + + + public void update() { + AbstractDungeon.overlayMenu.proceedButton.setLabel(LABEL[0]); + if (this.currentSlot <= this.closeScreen) { + AbstractDungeon.overlayMenu.proceedButton.setLabel(LABEL[1]); + } + if (this.screen.a != 0.8F) { + this.screen.a += Gdx.graphics.getDeltaTime(); + if (this.screen.a > 0.8F) { + this.screen.a = 0.8F; + } + } + if ((AbstractDungeon.overlayMenu.proceedButton.isHovered && InputHelper.justClickedLeft) || CInputActionSet.proceed + .isJustPressed()) { + + CInputActionSet.proceed.unpress(); + if (this.currentSlot <= this.closeScreen) { + + CardCrawlGame.sound.play("DECK_CLOSE"); + AbstractDungeon.closeCurrentScreen(); + AbstractDungeon.overlayMenu.proceedButton.hide(); + AbstractDungeon.effectList.clear(); + + } + + + this.currentSlot--; + this.startX = this.x; + this.targetX = (this.currentSlot * Settings.WIDTH); + this.scrollTimer = 0.3F; + if (this.currentSlot <= this.closeScreen) { + AbstractDungeon.overlayMenu.proceedButton.setLabel(LABEL[1]); + } + } + if (this.scrollTimer != 0.0F) { + this.scrollTimer -= Gdx.graphics.getDeltaTime(); + if (this.scrollTimer < 0.0F) { + this.scrollTimer = 0.0F; + } + } + this.x = Interpolation.fade.apply(this.targetX, this.startX, this.scrollTimer / 0.3F); + } + + + public void render(SpriteBatch sb) { + sb.setColor(this.screen); + sb.draw(ImageMaster.WHITE_SQUARE_IMG, 0.0F, 0.0F, Settings.WIDTH, Settings.HEIGHT); + + sb.setColor(Color.WHITE); + sb.draw(this.img1, this.x + this.x1 - 380.0F, Settings.HEIGHT / 2.0F - 290.0F, 380.0F, 290.0F, 760.0F, 580.0F, Settings.scale, Settings.scale, 0.0F, 0, 0, 760, 580, false, false); + /* */ + sb.draw(this.img2, this.x + this.x2 - 380.0F, Settings.HEIGHT / 2.0F - 290.0F, 380.0F, 290.0F, 760.0F, 580.0F, Settings.scale, Settings.scale, 0.0F, 0, 0, 760, 580, false, false); + /* */ + FontHelper.renderSmartText(sb, FontHelper.panelNameFont, txt1, this.x + this.x1 + 400.0F * Settings.scale, Settings.HEIGHT / 2.0F - + FontHelper.getSmartHeight(FontHelper.panelNameFont, txt1, 700.0F * Settings.scale, 40.0F * Settings.scale) / 2.0F, 700.0F * Settings.scale, 40.0F * Settings.scale, Settings.CREAM_COLOR); + + FontHelper.renderSmartText(sb, FontHelper.panelNameFont, txt2, this.x + this.x2 + 400.0F * Settings.scale, Settings.HEIGHT / 2.0F - + FontHelper.getSmartHeight(FontHelper.panelNameFont, txt2, 700.0F * Settings.scale, 40.0F * Settings.scale) / 2.0F, 700.0F * Settings.scale, 40.0F * Settings.scale, Settings.CREAM_COLOR); + + FontHelper.renderFontCenteredWidth(sb, FontHelper.panelNameFont, LABEL[2], Settings.WIDTH / 2.0F, Settings.HEIGHT / 2.0F - 360.0F * Settings.scale, Settings.GOLD_COLOR); + + FontHelper.renderFontCenteredWidth(sb, FontHelper.tipBodyFont, LABEL[3] + Integer.toString(Math.abs(this.currentSlot - 1)) + "/" + + Math.abs(this.closeScreen - 1) + LABEL[4], Settings.WIDTH / 2.0F, Settings.HEIGHT / 2.0F - 400.0F * Settings.scale, Settings.CREAM_COLOR); + + AbstractDungeon.overlayMenu.proceedButton.render(sb); + } + + +} diff --git a/src/main/java/downfall/tutorials/ChampTutorials.java b/src/main/java/downfall/tutorials/ChampTutorials.java new file mode 100644 index 000000000..791307e6e --- /dev/null +++ b/src/main/java/downfall/tutorials/ChampTutorials.java @@ -0,0 +1,134 @@ +package downfall.tutorials; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.math.Interpolation; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.helpers.FontHelper; +import com.megacrit.cardcrawl.helpers.ImageMaster; +import com.megacrit.cardcrawl.helpers.controller.CInputActionSet; +import com.megacrit.cardcrawl.helpers.input.InputHelper; +import com.megacrit.cardcrawl.localization.TutorialStrings; +import com.megacrit.cardcrawl.ui.FtueTip; +import downfall.util.TextureLoader; + +public class ChampTutorials extends FtueTip { + + private static final TutorialStrings tutorialStrings = CardCrawlGame.languagePack.getTutorialString("HermitMod:ChampTutorials"); + public static final String[] txt = tutorialStrings.TEXT; + public static final String[] LABEL = tutorialStrings.LABEL; + private Texture img1; + private Texture img2; + private Texture img3; + private Color screen = Color.valueOf("1c262a00"); + private float x; + private float x1; + private float x2; + private float x3; + private float targetX; + private float startX; + private float scrollTimer = 0.0F; + private int currentSlot = 0; + private static String txt1 = txt[0]; + private static String txt2 = txt[1]; + + private int closeScreen; + + + public ChampTutorials() { + + this.img1 = TextureLoader.getTexture("hermitResources/images/tip/ChampTip1.png"); + this.img2 = TextureLoader.getTexture("hermitResources/images/tip/ChampTip2.png"); + + txt1 = txt[0]; + txt2 = txt[1]; + this.closeScreen = -1; + + AbstractDungeon.player.releaseCard(); + if (AbstractDungeon.isScreenUp) { + AbstractDungeon.dynamicBanner.hide(); + AbstractDungeon.previousScreen = AbstractDungeon.screen; + } + AbstractDungeon.isScreenUp = true; + AbstractDungeon.screen = AbstractDungeon.CurrentScreen.FTUE; + AbstractDungeon.overlayMenu.showBlackScreen(); + this.x = 0.0F; + this.x1 = 567.0F * Settings.scale; + this.x2 = this.x1 + Settings.WIDTH; + AbstractDungeon.overlayMenu.proceedButton.show(); + AbstractDungeon.overlayMenu.proceedButton.setLabel(LABEL[0]); + } + + + public void update() { + AbstractDungeon.overlayMenu.proceedButton.setLabel(LABEL[0]); + if (this.currentSlot <= this.closeScreen) { + AbstractDungeon.overlayMenu.proceedButton.setLabel(LABEL[1]); + } + if (this.screen.a != 0.8F) { + this.screen.a += Gdx.graphics.getDeltaTime(); + if (this.screen.a > 0.8F) { + this.screen.a = 0.8F; + } + } + if ((AbstractDungeon.overlayMenu.proceedButton.isHovered && InputHelper.justClickedLeft) || CInputActionSet.proceed + .isJustPressed()) { + + CInputActionSet.proceed.unpress(); + if (this.currentSlot <= this.closeScreen) { + + CardCrawlGame.sound.play("DECK_CLOSE"); + AbstractDungeon.closeCurrentScreen(); + AbstractDungeon.overlayMenu.proceedButton.hide(); + AbstractDungeon.effectList.clear(); + + } + + + this.currentSlot--; + this.startX = this.x; + this.targetX = (this.currentSlot * Settings.WIDTH); + this.scrollTimer = 0.3F; + if (this.currentSlot <= this.closeScreen) { + AbstractDungeon.overlayMenu.proceedButton.setLabel(LABEL[1]); + } + } + if (this.scrollTimer != 0.0F) { + this.scrollTimer -= Gdx.graphics.getDeltaTime(); + if (this.scrollTimer < 0.0F) { + this.scrollTimer = 0.0F; + } + } + this.x = Interpolation.fade.apply(this.targetX, this.startX, this.scrollTimer / 0.3F); + } + + + public void render(SpriteBatch sb) { + sb.setColor(this.screen); + sb.draw(ImageMaster.WHITE_SQUARE_IMG, 0.0F, 0.0F, Settings.WIDTH, Settings.HEIGHT); + + sb.setColor(Color.WHITE); + sb.draw(this.img1, this.x + this.x1 - 380.0F, Settings.HEIGHT / 2.0F - 290.0F, 380.0F, 290.0F, 760.0F, 580.0F, Settings.scale, Settings.scale, 0.0F, 0, 0, 760, 580, false, false); + /* */ + sb.draw(this.img2, this.x + this.x2 - 380.0F, Settings.HEIGHT / 2.0F - 290.0F, 380.0F, 290.0F, 760.0F, 580.0F, Settings.scale, Settings.scale, 0.0F, 0, 0, 760, 580, false, false); + /* */ + FontHelper.renderSmartText(sb, FontHelper.panelNameFont, txt1, this.x + this.x1 + 400.0F * Settings.scale, Settings.HEIGHT / 2.0F - + FontHelper.getSmartHeight(FontHelper.panelNameFont, txt1, 700.0F * Settings.scale, 40.0F * Settings.scale) / 2.0F, 700.0F * Settings.scale, 40.0F * Settings.scale, Settings.CREAM_COLOR); + + FontHelper.renderSmartText(sb, FontHelper.panelNameFont, txt2, this.x + this.x2 + 400.0F * Settings.scale, Settings.HEIGHT / 2.0F - + FontHelper.getSmartHeight(FontHelper.panelNameFont, txt2, 700.0F * Settings.scale, 40.0F * Settings.scale) / 2.0F, 700.0F * Settings.scale, 40.0F * Settings.scale, Settings.CREAM_COLOR); + + FontHelper.renderFontCenteredWidth(sb, FontHelper.panelNameFont, LABEL[2], Settings.WIDTH / 2.0F, Settings.HEIGHT / 2.0F - 360.0F * Settings.scale, Settings.GOLD_COLOR); + + FontHelper.renderFontCenteredWidth(sb, FontHelper.tipBodyFont, LABEL[3] + Integer.toString(Math.abs(this.currentSlot - 1)) + "/" + + Math.abs(this.closeScreen - 1) + LABEL[4], Settings.WIDTH / 2.0F, Settings.HEIGHT / 2.0F - 400.0F * Settings.scale, Settings.CREAM_COLOR); + + AbstractDungeon.overlayMenu.proceedButton.render(sb); + } + + +} diff --git a/src/main/java/downfall/tutorials/GremlinsTutorials.java b/src/main/java/downfall/tutorials/GremlinsTutorials.java new file mode 100644 index 000000000..8a7901b32 --- /dev/null +++ b/src/main/java/downfall/tutorials/GremlinsTutorials.java @@ -0,0 +1,135 @@ +package downfall.tutorials; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.math.Interpolation; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.helpers.FontHelper; +import com.megacrit.cardcrawl.helpers.ImageMaster; +import com.megacrit.cardcrawl.helpers.controller.CInputActionSet; +import com.megacrit.cardcrawl.helpers.input.InputHelper; +import com.megacrit.cardcrawl.localization.TutorialStrings; +import com.megacrit.cardcrawl.ui.FtueTip; +import downfall.util.TextureLoader; + + +public class GremlinsTutorials extends FtueTip { + + private static final TutorialStrings tutorialStrings = CardCrawlGame.languagePack.getTutorialString("HermitMod:GremlinsTutorials"); + public static final String[] txt = tutorialStrings.TEXT; + public static final String[] LABEL = tutorialStrings.LABEL; + private Texture img1; + private Texture img2; + private Texture img3; + private Color screen = Color.valueOf("1c262a00"); + private float x; + private float x1; + private float x2; + private float x3; + private float targetX; + private float startX; + private float scrollTimer = 0.0F; + private int currentSlot = 0; + private static String txt1 = txt[0]; + private static String txt2 = txt[1]; + + private int closeScreen; + + + public GremlinsTutorials() { + + this.img1 = TextureLoader.getTexture("hermitResources/images/tip/GremlinsTip1.png"); + this.img2 = TextureLoader.getTexture("hermitResources/images/tip/GremlinsTip2.png"); + + txt1 = txt[0]; + txt2 = txt[1]; + this.closeScreen = -1; + + AbstractDungeon.player.releaseCard(); + if (AbstractDungeon.isScreenUp) { + AbstractDungeon.dynamicBanner.hide(); + AbstractDungeon.previousScreen = AbstractDungeon.screen; + } + AbstractDungeon.isScreenUp = true; + AbstractDungeon.screen = AbstractDungeon.CurrentScreen.FTUE; + AbstractDungeon.overlayMenu.showBlackScreen(); + this.x = 0.0F; + this.x1 = 567.0F * Settings.scale; + this.x2 = this.x1 + Settings.WIDTH; + AbstractDungeon.overlayMenu.proceedButton.show(); + AbstractDungeon.overlayMenu.proceedButton.setLabel(LABEL[0]); + } + + + public void update() { + AbstractDungeon.overlayMenu.proceedButton.setLabel(LABEL[0]); + if (this.currentSlot <= this.closeScreen) { + AbstractDungeon.overlayMenu.proceedButton.setLabel(LABEL[1]); + } + if (this.screen.a != 0.8F) { + this.screen.a += Gdx.graphics.getDeltaTime(); + if (this.screen.a > 0.8F) { + this.screen.a = 0.8F; + } + } + if ((AbstractDungeon.overlayMenu.proceedButton.isHovered && InputHelper.justClickedLeft) || CInputActionSet.proceed + .isJustPressed()) { + + CInputActionSet.proceed.unpress(); + if (this.currentSlot <= this.closeScreen) { + + CardCrawlGame.sound.play("DECK_CLOSE"); + AbstractDungeon.closeCurrentScreen(); + AbstractDungeon.overlayMenu.proceedButton.hide(); + AbstractDungeon.effectList.clear(); + + } + + + this.currentSlot--; + this.startX = this.x; + this.targetX = (this.currentSlot * Settings.WIDTH); + this.scrollTimer = 0.3F; + if (this.currentSlot <= this.closeScreen) { + AbstractDungeon.overlayMenu.proceedButton.setLabel(LABEL[1]); + } + } + if (this.scrollTimer != 0.0F) { + this.scrollTimer -= Gdx.graphics.getDeltaTime(); + if (this.scrollTimer < 0.0F) { + this.scrollTimer = 0.0F; + } + } + this.x = Interpolation.fade.apply(this.targetX, this.startX, this.scrollTimer / 0.3F); + } + + + public void render(SpriteBatch sb) { + sb.setColor(this.screen); + sb.draw(ImageMaster.WHITE_SQUARE_IMG, 0.0F, 0.0F, Settings.WIDTH, Settings.HEIGHT); + + sb.setColor(Color.WHITE); + sb.draw(this.img1, this.x + this.x1 - 380.0F, Settings.HEIGHT / 2.0F - 290.0F, 380.0F, 290.0F, 760.0F, 580.0F, Settings.scale, Settings.scale, 0.0F, 0, 0, 760, 580, false, false); + /* */ + sb.draw(this.img2, this.x + this.x2 - 380.0F, Settings.HEIGHT / 2.0F - 290.0F, 380.0F, 290.0F, 760.0F, 580.0F, Settings.scale, Settings.scale, 0.0F, 0, 0, 760, 580, false, false); + /* */ + FontHelper.renderSmartText(sb, FontHelper.panelNameFont, txt1, this.x + this.x1 + 400.0F * Settings.scale, Settings.HEIGHT / 2.0F - + FontHelper.getSmartHeight(FontHelper.panelNameFont, txt1, 700.0F * Settings.scale, 40.0F * Settings.scale) / 2.0F, 700.0F * Settings.scale, 40.0F * Settings.scale, Settings.CREAM_COLOR); + + FontHelper.renderSmartText(sb, FontHelper.panelNameFont, txt2, this.x + this.x2 + 400.0F * Settings.scale, Settings.HEIGHT / 2.0F - + FontHelper.getSmartHeight(FontHelper.panelNameFont, txt2, 700.0F * Settings.scale, 40.0F * Settings.scale) / 2.0F, 700.0F * Settings.scale, 40.0F * Settings.scale, Settings.CREAM_COLOR); + + FontHelper.renderFontCenteredWidth(sb, FontHelper.panelNameFont, LABEL[2], Settings.WIDTH / 2.0F, Settings.HEIGHT / 2.0F - 360.0F * Settings.scale, Settings.GOLD_COLOR); + + FontHelper.renderFontCenteredWidth(sb, FontHelper.tipBodyFont, LABEL[3] + Integer.toString(Math.abs(this.currentSlot - 1)) + "/" + + Math.abs(this.closeScreen - 1) + LABEL[4], Settings.WIDTH / 2.0F, Settings.HEIGHT / 2.0F - 400.0F * Settings.scale, Settings.CREAM_COLOR); + + AbstractDungeon.overlayMenu.proceedButton.render(sb); + } + + +} diff --git a/src/main/java/downfall/tutorials/SlimeBossTutorials.java b/src/main/java/downfall/tutorials/SlimeBossTutorials.java new file mode 100644 index 000000000..4486b5e01 --- /dev/null +++ b/src/main/java/downfall/tutorials/SlimeBossTutorials.java @@ -0,0 +1,135 @@ +package downfall.tutorials; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.math.Interpolation; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.helpers.FontHelper; +import com.megacrit.cardcrawl.helpers.ImageMaster; +import com.megacrit.cardcrawl.helpers.controller.CInputActionSet; +import com.megacrit.cardcrawl.helpers.input.InputHelper; +import com.megacrit.cardcrawl.localization.TutorialStrings; +import com.megacrit.cardcrawl.ui.FtueTip; +import downfall.util.TextureLoader; + + +public class SlimeBossTutorials extends FtueTip { + + private static final TutorialStrings tutorialStrings = CardCrawlGame.languagePack.getTutorialString("HermitMod:SlimeBossTutorials"); + public static final String[] txt = tutorialStrings.TEXT; + public static final String[] LABEL = tutorialStrings.LABEL; + private Texture img1; + private Texture img2; + private Texture img3; + private Color screen = Color.valueOf("1c262a00"); + private float x; + private float x1; + private float x2; + private float x3; + private float targetX; + private float startX; + private float scrollTimer = 0.0F; + private int currentSlot = 0; + private static String txt1 = txt[0]; + private static String txt2 = txt[1]; + + private int closeScreen; + + + public SlimeBossTutorials() { + + this.img1 = TextureLoader.getTexture("hermitResources/images/tip/SlimeBossTip1.png"); + this.img2 = TextureLoader.getTexture("hermitResources/images/tip/SlimeBossTip2.png"); + + txt1 = txt[0]; + txt2 = txt[1]; + this.closeScreen = -1; + + AbstractDungeon.player.releaseCard(); + if (AbstractDungeon.isScreenUp) { + AbstractDungeon.dynamicBanner.hide(); + AbstractDungeon.previousScreen = AbstractDungeon.screen; + } + AbstractDungeon.isScreenUp = true; + AbstractDungeon.screen = AbstractDungeon.CurrentScreen.FTUE; + AbstractDungeon.overlayMenu.showBlackScreen(); + this.x = 0.0F; + this.x1 = 567.0F * Settings.scale; + this.x2 = this.x1 + Settings.WIDTH; + AbstractDungeon.overlayMenu.proceedButton.show(); + AbstractDungeon.overlayMenu.proceedButton.setLabel(LABEL[0]); + } + + + public void update() { + AbstractDungeon.overlayMenu.proceedButton.setLabel(LABEL[0]); + if (this.currentSlot <= this.closeScreen) { + AbstractDungeon.overlayMenu.proceedButton.setLabel(LABEL[1]); + } + if (this.screen.a != 0.8F) { + this.screen.a += Gdx.graphics.getDeltaTime(); + if (this.screen.a > 0.8F) { + this.screen.a = 0.8F; + } + } + if ((AbstractDungeon.overlayMenu.proceedButton.isHovered && InputHelper.justClickedLeft) || CInputActionSet.proceed + .isJustPressed()) { + + CInputActionSet.proceed.unpress(); + if (this.currentSlot <= this.closeScreen) { + + CardCrawlGame.sound.play("DECK_CLOSE"); + AbstractDungeon.closeCurrentScreen(); + AbstractDungeon.overlayMenu.proceedButton.hide(); + AbstractDungeon.effectList.clear(); + + } + + + this.currentSlot--; + this.startX = this.x; + this.targetX = (this.currentSlot * Settings.WIDTH); + this.scrollTimer = 0.3F; + if (this.currentSlot <= this.closeScreen) { + AbstractDungeon.overlayMenu.proceedButton.setLabel(LABEL[1]); + } + } + if (this.scrollTimer != 0.0F) { + this.scrollTimer -= Gdx.graphics.getDeltaTime(); + if (this.scrollTimer < 0.0F) { + this.scrollTimer = 0.0F; + } + } + this.x = Interpolation.fade.apply(this.targetX, this.startX, this.scrollTimer / 0.3F); + } + + + public void render(SpriteBatch sb) { + sb.setColor(this.screen); + sb.draw(ImageMaster.WHITE_SQUARE_IMG, 0.0F, 0.0F, Settings.WIDTH, Settings.HEIGHT); + + sb.setColor(Color.WHITE); + sb.draw(this.img1, this.x + this.x1 - 380.0F, Settings.HEIGHT / 2.0F - 290.0F, 380.0F, 290.0F, 760.0F, 580.0F, Settings.scale, Settings.scale, 0.0F, 0, 0, 760, 580, false, false); + /* */ + sb.draw(this.img2, this.x + this.x2 - 380.0F, Settings.HEIGHT / 2.0F - 290.0F, 380.0F, 290.0F, 760.0F, 580.0F, Settings.scale, Settings.scale, 0.0F, 0, 0, 760, 580, false, false); + /* */ + FontHelper.renderSmartText(sb, FontHelper.panelNameFont, txt1, this.x + this.x1 + 400.0F * Settings.scale, Settings.HEIGHT / 2.0F - + FontHelper.getSmartHeight(FontHelper.panelNameFont, txt1, 700.0F * Settings.scale, 40.0F * Settings.scale) / 2.0F, 700.0F * Settings.scale, 40.0F * Settings.scale, Settings.CREAM_COLOR); + + FontHelper.renderSmartText(sb, FontHelper.panelNameFont, txt2, this.x + this.x2 + 400.0F * Settings.scale, Settings.HEIGHT / 2.0F - + FontHelper.getSmartHeight(FontHelper.panelNameFont, txt2, 700.0F * Settings.scale, 40.0F * Settings.scale) / 2.0F, 700.0F * Settings.scale, 40.0F * Settings.scale, Settings.CREAM_COLOR); + + FontHelper.renderFontCenteredWidth(sb, FontHelper.panelNameFont, LABEL[2], Settings.WIDTH / 2.0F, Settings.HEIGHT / 2.0F - 360.0F * Settings.scale, Settings.GOLD_COLOR); + + FontHelper.renderFontCenteredWidth(sb, FontHelper.tipBodyFont, LABEL[3] + Integer.toString(Math.abs(this.currentSlot - 1)) + "/" + + Math.abs(this.closeScreen - 1) + LABEL[4], Settings.WIDTH / 2.0F, Settings.HEIGHT / 2.0F - 400.0F * Settings.scale, Settings.CREAM_COLOR); + + AbstractDungeon.overlayMenu.proceedButton.render(sb); + } + + +} diff --git a/src/main/java/downfall/tutorials/SneckoTutorials.java b/src/main/java/downfall/tutorials/SneckoTutorials.java new file mode 100644 index 000000000..74192fb71 --- /dev/null +++ b/src/main/java/downfall/tutorials/SneckoTutorials.java @@ -0,0 +1,134 @@ +package downfall.tutorials; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.math.Interpolation; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.helpers.FontHelper; +import com.megacrit.cardcrawl.helpers.ImageMaster; +import com.megacrit.cardcrawl.helpers.controller.CInputActionSet; +import com.megacrit.cardcrawl.helpers.input.InputHelper; +import com.megacrit.cardcrawl.localization.TutorialStrings; +import com.megacrit.cardcrawl.ui.FtueTip; +import downfall.util.TextureLoader; + +public class SneckoTutorials extends FtueTip { + + private static final TutorialStrings tutorialStrings = CardCrawlGame.languagePack.getTutorialString("HermitMod:SneckoTutorials"); + public static final String[] txt = tutorialStrings.TEXT; + public static final String[] LABEL = tutorialStrings.LABEL; + private Texture img1; + private Texture img2; + private Texture img3; + private Color screen = Color.valueOf("1c262a00"); + private float x; + private float x1; + private float x2; + private float x3; + private float targetX; + private float startX; + private float scrollTimer = 0.0F; + private int currentSlot = 0; + private static String txt1 = txt[0]; + private static String txt2 = txt[1]; + + private int closeScreen; + + + public SneckoTutorials() { + + this.img1 = TextureLoader.getTexture("hermitResources/images/tip/SneckoTip1.png"); + this.img2 = TextureLoader.getTexture("hermitResources/images/tip/SneckoTip2.png"); + + txt1 = txt[0]; + txt2 = txt[1]; + this.closeScreen = -1; + + AbstractDungeon.player.releaseCard(); + if (AbstractDungeon.isScreenUp) { + AbstractDungeon.dynamicBanner.hide(); + AbstractDungeon.previousScreen = AbstractDungeon.screen; + } + AbstractDungeon.isScreenUp = true; + AbstractDungeon.screen = AbstractDungeon.CurrentScreen.FTUE; + AbstractDungeon.overlayMenu.showBlackScreen(); + this.x = 0.0F; + this.x1 = 567.0F * Settings.scale; + this.x2 = this.x1 + Settings.WIDTH; + AbstractDungeon.overlayMenu.proceedButton.show(); + AbstractDungeon.overlayMenu.proceedButton.setLabel(LABEL[0]); + } + + + public void update() { + AbstractDungeon.overlayMenu.proceedButton.setLabel(LABEL[0]); + if (this.currentSlot <= this.closeScreen) { + AbstractDungeon.overlayMenu.proceedButton.setLabel(LABEL[1]); + } + if (this.screen.a != 0.8F) { + this.screen.a += Gdx.graphics.getDeltaTime(); + if (this.screen.a > 0.8F) { + this.screen.a = 0.8F; + } + } + if ((AbstractDungeon.overlayMenu.proceedButton.isHovered && InputHelper.justClickedLeft) || CInputActionSet.proceed + .isJustPressed()) { + + CInputActionSet.proceed.unpress(); + if (this.currentSlot <= this.closeScreen) { + + CardCrawlGame.sound.play("DECK_CLOSE"); + AbstractDungeon.closeCurrentScreen(); + AbstractDungeon.overlayMenu.proceedButton.hide(); + AbstractDungeon.effectList.clear(); + + } + + + this.currentSlot--; + this.startX = this.x; + this.targetX = (this.currentSlot * Settings.WIDTH); + this.scrollTimer = 0.3F; + if (this.currentSlot <= this.closeScreen) { + AbstractDungeon.overlayMenu.proceedButton.setLabel(LABEL[1]); + } + } + if (this.scrollTimer != 0.0F) { + this.scrollTimer -= Gdx.graphics.getDeltaTime(); + if (this.scrollTimer < 0.0F) { + this.scrollTimer = 0.0F; + } + } + this.x = Interpolation.fade.apply(this.targetX, this.startX, this.scrollTimer / 0.3F); + } + + + public void render(SpriteBatch sb) { + sb.setColor(this.screen); + sb.draw(ImageMaster.WHITE_SQUARE_IMG, 0.0F, 0.0F, Settings.WIDTH, Settings.HEIGHT); + + sb.setColor(Color.WHITE); + sb.draw(this.img1, this.x + this.x1 - 380.0F, Settings.HEIGHT / 2.0F - 290.0F, 380.0F, 290.0F, 760.0F, 580.0F, Settings.scale, Settings.scale, 0.0F, 0, 0, 760, 580, false, false); + /* */ + sb.draw(this.img2, this.x + this.x2 - 380.0F, Settings.HEIGHT / 2.0F - 290.0F, 380.0F, 290.0F, 760.0F, 580.0F, Settings.scale, Settings.scale, 0.0F, 0, 0, 760, 580, false, false); + /* */ + FontHelper.renderSmartText(sb, FontHelper.panelNameFont, txt1, this.x + this.x1 + 400.0F * Settings.scale, Settings.HEIGHT / 2.0F - + FontHelper.getSmartHeight(FontHelper.panelNameFont, txt1, 700.0F * Settings.scale, 40.0F * Settings.scale) / 2.0F, 700.0F * Settings.scale, 40.0F * Settings.scale, Settings.CREAM_COLOR); + + FontHelper.renderSmartText(sb, FontHelper.panelNameFont, txt2, this.x + this.x2 + 400.0F * Settings.scale, Settings.HEIGHT / 2.0F - + FontHelper.getSmartHeight(FontHelper.panelNameFont, txt2, 700.0F * Settings.scale, 40.0F * Settings.scale) / 2.0F, 700.0F * Settings.scale, 40.0F * Settings.scale, Settings.CREAM_COLOR); + + FontHelper.renderFontCenteredWidth(sb, FontHelper.panelNameFont, LABEL[2], Settings.WIDTH / 2.0F, Settings.HEIGHT / 2.0F - 360.0F * Settings.scale, Settings.GOLD_COLOR); + + FontHelper.renderFontCenteredWidth(sb, FontHelper.tipBodyFont, LABEL[3] + Integer.toString(Math.abs(this.currentSlot - 1)) + "/" + + Math.abs(this.closeScreen - 1) + LABEL[4], Settings.WIDTH / 2.0F, Settings.HEIGHT / 2.0F - 400.0F * Settings.scale, Settings.CREAM_COLOR); + + AbstractDungeon.overlayMenu.proceedButton.render(sb); + } + + +} diff --git a/src/main/java/downfall/ui/campfire/BustKeyOption.java b/src/main/java/downfall/ui/campfire/BustKeyOption.java index 7ca066a19..5471f4229 100644 --- a/src/main/java/downfall/ui/campfire/BustKeyOption.java +++ b/src/main/java/downfall/ui/campfire/BustKeyOption.java @@ -1,6 +1,7 @@ package downfall.ui.campfire; import basemod.ReflectionHacks; +import champ.relics.DeflectingBracers; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.core.Settings; @@ -14,9 +15,7 @@ import com.megacrit.cardcrawl.ui.campfire.AbstractCampfireOption; import downfall.downfallMod; import downfall.patches.ui.campfire.AddBustKeyButtonPatches; -import downfall.relics.HeartBlessingBlue; -import downfall.relics.HeartBlessingGreen; -import downfall.relics.HeartBlessingRed; +import downfall.relics.*; import downfall.util.TextureLoader; import downfall.vfx.campfire.BustKeyEffect; @@ -35,7 +34,7 @@ public BustKeyOption() { public BustKeyOption(Keys key) { this.key = key; - if (AbstractDungeon.player.hasRelic(Ectoplasm.ID)) soulToCost = 0; + if (AbstractDungeon.player.hasRelic(Ectoplasm.ID) || AbstractDungeon.player.hasRelic(Hecktoplasm.ID)) soulToCost = 0; if (AbstractDungeon.player.gold < soulToCost) { this.usable = false; updateImage(key); @@ -47,7 +46,7 @@ public BustKeyOption(Keys key) { public void updateImage(Keys key) { - if (AbstractDungeon.player.hasRelic(Ectoplasm.ID)) { + if (AbstractDungeon.player.hasRelic(Ectoplasm.ID) || AbstractDungeon.player.hasRelic(Hecktoplasm.ID)) { this.description = TEXT[10]; } else { this.description = TEXT[3]; @@ -162,21 +161,40 @@ public void useOption() { AbstractDungeon.effectList.add(new BustKeyEffect()); AbstractPlayer p = AbstractDungeon.player; p.loseGold(soulToCost); + if (soulToCost == 0) { + + if (AbstractDungeon.player.hasRelic(Hecktoplasm.ID)) { + AbstractDungeon.player.getRelic(Hecktoplasm.ID).flash(); + System.out.println("Saved Souls with Hecktoplasm."); + } + + if (AbstractDungeon.player.hasRelic(Ectoplasm.ID)) { + AbstractDungeon.player.getRelic(Ectoplasm.ID).flash(); + System.out.println("Saved Souls with Ectoplasm."); + } + + } this.used = true; this.usable = false; switch (key) { case SAPPHIRE: AddBustKeyButtonPatches.KeyFields.bustedSapphire.set(p, true); - AbstractDungeon.getCurrRoom().spawnRelicAndObtain((float) Settings.WIDTH / 2.0F, (float) Settings.HEIGHT / 2.0F, new HeartBlessingBlue()); + if (!AbstractDungeon.player.hasRelic(BurdenOfKnowledge.ID)) { + AbstractDungeon.getCurrRoom().spawnRelicAndObtain((float) Settings.WIDTH / 2.0F, (float) Settings.HEIGHT / 2.0F, new HeartBlessingBlue()); + } break; case EMERALD: AddBustKeyButtonPatches.KeyFields.bustedEmerald.set(p, true); - AbstractDungeon.getCurrRoom().spawnRelicAndObtain((float) Settings.WIDTH / 2.0F, (float) Settings.HEIGHT / 2.0F, new HeartBlessingGreen()); + if (!AbstractDungeon.player.hasRelic(BurdenOfKnowledge.ID)) { + AbstractDungeon.getCurrRoom().spawnRelicAndObtain((float) Settings.WIDTH / 2.0F, (float) Settings.HEIGHT / 2.0F, new HeartBlessingGreen()); + } break; default: AddBustKeyButtonPatches.KeyFields.bustedRuby.set(p, true); - AbstractDungeon.getCurrRoom().spawnRelicAndObtain((float) Settings.WIDTH / 2.0F, (float) Settings.HEIGHT / 2.0F, new HeartBlessingRed()); - } + if (!AbstractDungeon.player.hasRelic(BurdenOfKnowledge.ID)) { + AbstractDungeon.getCurrRoom().spawnRelicAndObtain((float) Settings.WIDTH / 2.0F, (float) Settings.HEIGHT / 2.0F, new HeartBlessingRed()); + } + } updateImage(key); } diff --git a/src/main/java/downfall/unlocks/AwakenedUnlock.java b/src/main/java/downfall/unlocks/AwakenedUnlock.java new file mode 100644 index 000000000..28f60fff7 --- /dev/null +++ b/src/main/java/downfall/unlocks/AwakenedUnlock.java @@ -0,0 +1,21 @@ +package downfall.unlocks; + +import awakenedOne.AwakenedOneChar; +import collector.CollectorChar; +import com.megacrit.cardcrawl.core.Settings; + +public class AwakenedUnlock extends com.megacrit.cardcrawl.unlock.AbstractUnlock { + public static final String KEY = "Awakened"; + + public AwakenedUnlock() { + this.type = UnlockType.CHARACTER; + this.key = "Awakened"; + this.title = "Awakened"; + } + + public void onUnlockScreenOpen() { + this.player = com.megacrit.cardcrawl.core.CardCrawlGame.characterManager.getCharacter(AwakenedOneChar.Enums.AWAKENED_ONE); + this.player.drawX = (Settings.WIDTH / 2.0F - 20.0F * Settings.scale); + this.player.drawY = (Settings.HEIGHT / 2.0F - 118.0F * Settings.scale); + } +} \ No newline at end of file diff --git a/src/main/java/downfall/util/RareCardReward.java b/src/main/java/downfall/util/RareCardReward.java index 075368b7c..2d21b7441 100644 --- a/src/main/java/downfall/util/RareCardReward.java +++ b/src/main/java/downfall/util/RareCardReward.java @@ -160,7 +160,7 @@ public void render(SpriteBatch sb) { sb.setBlendFunction(770, 771); } - Texture cardImg = ImageMaster.REWARD_CARD_NORMAL; + Texture cardImg = ImageMaster.REWARD_CARD_BOSS; sb.setColor(Color.WHITE); sb.draw(cardImg, REWARD_ITEM_X - 32.0F, this.y - 32.0F - 2.0F * Settings.scale, 32.0F, 32.0F, 64.0F, 64.0F, Settings.scale, Settings.scale, 0.0F, 0, 0, 64, 64, false, false); diff --git a/src/main/java/expansioncontent/actions/BloodthirstAction.java b/src/main/java/expansioncontent/actions/BloodthirstAction.java new file mode 100644 index 000000000..fa932fdb0 --- /dev/null +++ b/src/main/java/expansioncontent/actions/BloodthirstAction.java @@ -0,0 +1,91 @@ +package expansioncontent.actions; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.ExhaustSpecificCardAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.helpers.GetAllInBattleInstances; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import com.megacrit.cardcrawl.orbs.AbstractOrb; +import com.megacrit.cardcrawl.potions.AbstractPotion; +import com.megacrit.cardcrawl.potions.PowerPotion; +import com.megacrit.cardcrawl.relics.AbstractRelic; +import com.megacrit.cardcrawl.relics.Sozu; +import guardian.orbs.StasisOrb; + +import java.util.Iterator; +import java.util.UUID; + +public class BloodthirstAction extends AbstractGameAction { + private DamageInfo info; + private static final float DURATION = 0.1F; + private UUID uuid; + private boolean potion; + + public BloodthirstAction(AbstractCreature target, DamageInfo info, UUID targetUUID, boolean powerpotion) { + this.info = info; + this.setValues(target, info); + this.actionType = ActionType.DAMAGE; + this.duration = DURATION; + this.uuid = targetUUID; + potion = powerpotion; + } + + @Override + public void update() { + if (this.duration == DURATION && this.target != null) { + this.target.damage(this.info); + + if ((((AbstractMonster) this.target).isDying || this.target.currentHealth <= 0) + && !this.target.halfDead + && !this.target.hasPower("Minion")) { + + Iterator var1 = AbstractDungeon.player.masterDeck.group.iterator(); + while (var1.hasNext()) { + AbstractCard c = var1.next(); + if (c.uuid.equals(this.uuid)) { + addToBot((AbstractGameAction)new ExhaustSpecificCardAction(c, AbstractDungeon.player.hand, true)); + addToBot((AbstractGameAction)new ExhaustSpecificCardAction(c, AbstractDungeon.player.discardPile, false)); + addToBot((AbstractGameAction)new ExhaustSpecificCardAction(c, AbstractDungeon.player.limbo, true)); + } + } + for (var1 = GetAllInBattleInstances.get(this.uuid).iterator(); var1.hasNext();) { + AbstractCard c = var1.next(); + addToBot((AbstractGameAction)new ExhaustSpecificCardAction(c, AbstractDungeon.player.hand, true)); + addToBot((AbstractGameAction)new ExhaustSpecificCardAction(c, AbstractDungeon.player.discardPile, false)); + addToBot((AbstractGameAction)new ExhaustSpecificCardAction(c, AbstractDungeon.player.limbo, true)); + } + + for (AbstractOrb o : AbstractDungeon.player.orbs) { + if (o instanceof StasisOrb) { + if (((StasisOrb) o).stasisCard.uuid == this.uuid) { + AbstractDungeon.player.orbs.remove(o); + } + } + } + + AbstractRelic sozu = AbstractDungeon.player.getRelic(Sozu.ID); + if (sozu != null) { + sozu.flash(); + } else { + if (!potion) { + AbstractDungeon.player.obtainPotion(AbstractDungeon.returnRandomPotion(true)); + } + if (potion) { + AbstractPotion potion = new PowerPotion(); + AbstractDungeon.player.obtainPotion(potion.makeCopy()); + } + } + } + + if (AbstractDungeon.getCurrRoom().monsters.areMonstersBasicallyDead()) { + AbstractDungeon.actionManager.clearPostCombatActions(); + } + } + this.tickDuration(); + } + +} \ No newline at end of file diff --git a/src/main/java/expansioncontent/actions/DiscoverBossAction.java b/src/main/java/expansioncontent/actions/DiscoverBossAction.java index 1d5ed2b9a..d6d7a53c5 100644 --- a/src/main/java/expansioncontent/actions/DiscoverBossAction.java +++ b/src/main/java/expansioncontent/actions/DiscoverBossAction.java @@ -1,6 +1,8 @@ package expansioncontent.actions; import automaton.AutomatonChar; +import awakenedOne.AwakenedOneChar; +import basemod.BaseMod; import champ.ChampChar; import collector.CollectorChar; import com.megacrit.cardcrawl.actions.AbstractGameAction; @@ -44,7 +46,7 @@ public void update() { disCard.setCostForTurn(0); disCard.current_x = -1000.0F * Settings.scale; - if (AbstractDungeon.player.hand.size() < 10) { + if (AbstractDungeon.player.hand.size() < BaseMod.MAX_HAND_SIZE) { AbstractDungeon.effectList.add(new ShowCardAndAddToHandEffect(disCard, (float) Settings.WIDTH / 2.0F, (float) Settings.HEIGHT / 2.0F)); } else { AbstractDungeon.effectList.add(new ShowCardAndAddToDiscardEffect(disCard, (float) Settings.WIDTH / 2.0F, (float) Settings.HEIGHT / 2.0F)); @@ -66,22 +68,33 @@ private ArrayList generateCardChoices() { ArrayList cardsList = new ArrayList<>(); ArrayList selectionsList = new ArrayList<>(); for (AbstractCard q : CardLibrary.getAllCards()) { - if (q.rarity != AbstractCard.CardRarity.SPECIAL && q.hasTag(expansionContentMod.STUDY)) { + if (q.rarity != AbstractCard.CardRarity.SPECIAL && q.hasTag(expansionContentMod.STUDY) && !q.hasTag(AbstractCard.CardTags.HEALING)) { if (AbstractDungeon.player instanceof SlimeboundCharacter) { - if(q.cardID.equals(PrepareCrush.ID)){continue;} + if (q.hasTag(expansionContentMod.STUDY_SLIMEBOSS)){continue;} + } else if (AbstractDungeon.player instanceof TheHexaghost) { - if(q.cardID.equals(Hexaburn.ID)){continue;} + if(q.hasTag(expansionContentMod.STUDY_HEXAGHOST)){continue;} + } else if (AbstractDungeon.player instanceof GuardianCharacter) { - if(q.cardID.equals(GuardianWhirl.ID)){continue;} + if(q.hasTag(expansionContentMod.STUDY_GUARDIAN)){continue;} + } else if (AbstractDungeon.player instanceof ChampChar) { - if(q.cardID.equals(LastStand.ID)){continue;} + if(q.hasTag(expansionContentMod.STUDY_CHAMP)){continue;} + } else if (AbstractDungeon.player instanceof AutomatonChar) { - if(q.cardID.equals(HyperBeam.ID)){continue;} + if(q.hasTag(expansionContentMod.STUDY_AUTOMATON)){continue;} + } else if (AbstractDungeon.player instanceof CollectorChar) { - if(q.cardID.equals(YouAreMine.ID)){continue;} - } + if (q.hasTag(expansionContentMod.STUDY_COLLECTOR)) { + continue; + } + } else if (AbstractDungeon.player instanceof AwakenedOneChar) { + if (q.hasTag(expansionContentMod.STUDY_AWAKENEDONE)) { + continue; + } + } AbstractCard r = q.makeCopy(); cardsList.add(r); } diff --git a/src/main/java/expansioncontent/actions/DrawSpecificAction.java b/src/main/java/expansioncontent/actions/DrawSpecificAction.java new file mode 100644 index 000000000..ef88d896a --- /dev/null +++ b/src/main/java/expansioncontent/actions/DrawSpecificAction.java @@ -0,0 +1,46 @@ +package expansioncontent.actions; + +import basemod.BaseMod; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.DrawCardAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; + +import java.util.function.Predicate; + +public class DrawSpecificAction extends AbstractGameAction { + public AbstractPlayer p; + public Predicate predicate; + + public DrawSpecificAction(int number, Predicate condition) { + this.predicate = condition; + this.p = AbstractDungeon.player; + this.setValues(this.p, this.p, number); + this.actionType = AbstractGameAction.ActionType.CARD_MANIPULATION; + this.duration = Settings.ACTION_DUR_XFAST; + } + + public void update() { + this.isDone = true; + if (this.p.drawPile.isEmpty()) + return; + + if (this.p.hand.size() == BaseMod.MAX_HAND_SIZE) { + this.p.createHandIsFullDialog(); + return; + } + + for (AbstractCard c : this.p.drawPile.group) + if (this.predicate.test(c)) { + if (this.amount > 1) + addToTop(new DrawSpecificAction(this.amount-1, this.predicate)); + + this.p.drawPile.group.remove(c); + this.p.drawPile.addToTop(c); + addToTop(new DrawCardAction(1)); + return; + } + } +} diff --git a/src/main/java/expansioncontent/actions/EchoACardAction.java b/src/main/java/expansioncontent/actions/EchoACardAction.java index 29d4b4701..732ad95db 100644 --- a/src/main/java/expansioncontent/actions/EchoACardAction.java +++ b/src/main/java/expansioncontent/actions/EchoACardAction.java @@ -38,7 +38,7 @@ public void update() { mod.addProperty(PropertiesMod.supportedProperties.ETHEREAL, false); if (!card.exhaust) mod.addProperty(PropertiesMod.supportedProperties.EXHAUST, false); - if(this.free){ + if (this.free) { card.freeToPlayOnce = true; } diff --git a/src/main/java/expansioncontent/actions/EchoACardNextTurnAction.java b/src/main/java/expansioncontent/actions/EchoACardNextTurnAction.java new file mode 100644 index 000000000..a6043a23f --- /dev/null +++ b/src/main/java/expansioncontent/actions/EchoACardNextTurnAction.java @@ -0,0 +1,52 @@ +package expansioncontent.actions; + +import basemod.helpers.CardModifierManager; +import collector.powers.AddCopyNextTurnPower; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.MakeTempCardInHandAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import expansioncontent.cardmods.PropertiesMod; +import expansioncontent.expansionContentMod; + +import static collector.util.Wiz.applyToSelfTop; + +public class EchoACardNextTurnAction extends AbstractGameAction { + private final AbstractCard cardToEcho; + private boolean free = false; + + public EchoACardNextTurnAction(AbstractCard cardToEcho, int amount) { + this.cardToEcho = cardToEcho; + this.amount = amount; + } + + public EchoACardNextTurnAction(AbstractCard cardToEcho) { + this(cardToEcho, 1); + } + + public EchoACardNextTurnAction(AbstractCard cardToEcho, boolean freeToUse) { + this(cardToEcho, 1); + this.free = freeToUse; + } + + @Override + public void update() { + isDone = true; + if (cardToEcho.hasTag(expansionContentMod.ECHO)) + return; + + AbstractCard card = cardToEcho.makeStatEquivalentCopy(); + PropertiesMod mod = new PropertiesMod(PropertiesMod.supportedProperties.ECHO, false); + + if (!card.isEthereal) + mod.addProperty(PropertiesMod.supportedProperties.ETHEREAL, false); + if (!card.exhaust) + mod.addProperty(PropertiesMod.supportedProperties.EXHAUST, false); + if(this.free){ + card.freeToPlayOnce = true; + } + + CardModifierManager.addModifier(card, mod); + + applyToSelfTop(new AddCopyNextTurnPower(card)); + } +} diff --git a/src/main/java/expansioncontent/actions/ExhaustVirusAction.java b/src/main/java/expansioncontent/actions/ExhaustVirusAction.java new file mode 100644 index 000000000..9b07b23d1 --- /dev/null +++ b/src/main/java/expansioncontent/actions/ExhaustVirusAction.java @@ -0,0 +1,132 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package expansioncontent.actions; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.AbstractGameAction.ActionType; +import com.megacrit.cardcrawl.actions.common.MakeTempCardInDrawPileAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.tempCards.Insight; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.UIStrings; +import downfall.cards.MajorBeam; + +import java.util.Iterator; + +public class ExhaustVirusAction extends AbstractGameAction { + private static final UIStrings uiStrings; + public static final String[] TEXT; + private AbstractPlayer p; + private boolean isRandom; + private boolean anyNumber; + private boolean canPickZero; + public static int numExhausted; + + public ExhaustVirusAction(int amount, boolean isRandom, boolean anyNumber, boolean canPickZero) { + this.anyNumber = anyNumber; + this.p = AbstractDungeon.player; + this.canPickZero = canPickZero; + this.isRandom = isRandom; + this.amount = 5; + this.duration = this.startDuration = Settings.ACTION_DUR_FAST; + this.actionType = ActionType.EXHAUST; + } + + public ExhaustVirusAction(AbstractCreature target, AbstractCreature source, int amount, boolean isRandom, boolean anyNumber) { + this(amount, isRandom, anyNumber); + this.target = target; + this.source = source; + } + + public ExhaustVirusAction(AbstractCreature target, AbstractCreature source, int amount, boolean isRandom) { + this(amount, isRandom, false, false); + this.target = target; + this.source = source; + } + + public ExhaustVirusAction(AbstractCreature target, AbstractCreature source, int amount, boolean isRandom, boolean anyNumber, boolean canPickZero) { + this(amount, isRandom, anyNumber, canPickZero); + this.target = target; + this.source = source; + } + + public ExhaustVirusAction(boolean isRandom, boolean anyNumber, boolean canPickZero) { + this(99, isRandom, anyNumber, canPickZero); + } + + public ExhaustVirusAction(int amount, boolean canPickZero) { + this(amount, false, false, canPickZero); + } + + public ExhaustVirusAction(int amount, boolean isRandom, boolean anyNumber) { + this(amount, isRandom, anyNumber, false); + } + + public ExhaustVirusAction(int amount, boolean isRandom, boolean anyNumber, boolean canPickZero, float duration) { + this(amount, isRandom, anyNumber, canPickZero); + this.duration = this.startDuration = duration; + } + + public void update() { + if (this.duration == this.startDuration) { + if (this.p.hand.size() == 0) { + this.isDone = true; + return; + } + + int i; + if (!this.anyNumber && this.p.hand.size() <= this.amount) { + this.amount = this.p.hand.size(); + numExhausted = this.amount; + i = this.p.hand.size(); + + for(int z = 0; z < z; ++z) { + AbstractCard c = this.p.hand.getTopCard(); + this.p.hand.moveToExhaustPile(c); + } + + CardCrawlGame.dungeon.checkForPactAchievement(); + return; + } + + if (!this.isRandom) { + numExhausted = this.amount; + AbstractDungeon.handCardSelectScreen.open(TEXT[0], 5, this.anyNumber, this.canPickZero); + this.tickDuration(); + return; + } + + for(i = 0; i < this.amount; ++i) { + this.p.hand.moveToExhaustPile(this.p.hand.getRandomCard(AbstractDungeon.cardRandomRng)); + } + //this.addToBot(new MakeTempCardInDrawPileAction(new MajorBeam(), this.amount, true, true)); + CardCrawlGame.dungeon.checkForPactAchievement(); + } + + if (!AbstractDungeon.handCardSelectScreen.wereCardsRetrieved) { + Iterator var4 = AbstractDungeon.handCardSelectScreen.selectedCards.group.iterator(); + + while(var4.hasNext()) { + AbstractCard c = (AbstractCard)var4.next(); + this.p.hand.moveToExhaustPile(c); + this.addToBot(new MakeTempCardInDrawPileAction(new MajorBeam(), 1, true, true)); + } + CardCrawlGame.dungeon.checkForPactAchievement(); + AbstractDungeon.handCardSelectScreen.wereCardsRetrieved = true; + } + + this.tickDuration(); + } + + static { + uiStrings = CardCrawlGame.languagePack.getUIString("ExhaustAction"); + TEXT = uiStrings.TEXT; + } +} diff --git a/src/main/java/expansioncontent/actions/ManipulateTimeAction.java b/src/main/java/expansioncontent/actions/ManipulateTimeAction.java new file mode 100644 index 000000000..ea82b7517 --- /dev/null +++ b/src/main/java/expansioncontent/actions/ManipulateTimeAction.java @@ -0,0 +1,69 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package expansioncontent.actions; + +import com.badlogic.gdx.graphics.Color; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.AbstractGameAction.ActionType; +import com.megacrit.cardcrawl.actions.AbstractGameAction.AttackEffect; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.actions.common.DamageAction; +import com.megacrit.cardcrawl.actions.common.ObtainPotionAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.relics.AbstractRelic; +import com.megacrit.cardcrawl.relics.Sozu; +import com.megacrit.cardcrawl.vfx.GainPennyEffect; +import com.megacrit.cardcrawl.vfx.StarBounceEffect; +import com.megacrit.cardcrawl.vfx.combat.FlashAtkImgEffect; +import com.megacrit.cardcrawl.vfx.combat.ViolentAttackEffect; +import downfall.util.SelectCardsCenteredAction; + +public class ManipulateTimeAction extends AbstractGameAction { + private final boolean setCostForCombat; + + public ManipulateTimeAction(boolean upgraded) { + this.duration = Settings.ACTION_DUR_FAST; + this.actionType = ActionType.CARD_MANIPULATION; + this.setCostForCombat = upgraded; + } + + @Override + public void update() { + AbstractPlayer p = AbstractDungeon.player; + + if (!p.discardPile.isEmpty()) { + this.addToTop(new SelectCardsCenteredAction( + p.discardPile.group, + 1, + "Choose.", + (selectedCards) -> { + AbstractCard selectedCard = selectedCards.get(0); + p.discardPile.removeCard(selectedCard); + p.drawPile.addToBottom(selectedCard); + + if (setCostForCombat) { + selectedCard.modifyCostForCombat(-999); + } else { + if (selectedCard.cost > 0) { + selectedCard.freeToPlayOnce = true; + } + } + + selectedCard.unhover(); + selectedCard.applyPowers(); + } + )); + } + + this.isDone = true; + } +} diff --git a/src/main/java/expansioncontent/actions/RandomCardWithTagAction.java b/src/main/java/expansioncontent/actions/RandomCardWithTagAction.java index ea69a127a..dd6ece104 100644 --- a/src/main/java/expansioncontent/actions/RandomCardWithTagAction.java +++ b/src/main/java/expansioncontent/actions/RandomCardWithTagAction.java @@ -2,13 +2,16 @@ import automaton.AutomatonChar; +import awakenedOne.AwakenedOneChar; import champ.ChampChar; +import collector.CollectorChar; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.common.MakeTempCardInHandAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.helpers.CardLibrary; import com.megacrit.cardcrawl.unlock.UnlockTracker; +import downfall.unlocks.AwakenedUnlock; import downfall.unlocks.CollectorUnlock; import expansioncontent.expansionContentMod; import guardian.patches.GuardianEnum; @@ -66,6 +69,10 @@ public static boolean collectorLocked() { return UnlockTracker.isCharacterLocked(CollectorUnlock.KEY); } + public static boolean awakenedLocked() { + return UnlockTracker.isCharacterLocked(AwakenedUnlock.KEY); + } + public void update() { ArrayList tmp = new ArrayList<>(); @@ -85,6 +92,11 @@ public void update() { && (AbstractDungeon.player.chosenClass == ChampChar.Enums.THE_CHAMP || champLocked()))) && (!(c.getValue().hasTag(expansionContentMod.STUDY_AUTOMATON) && (AbstractDungeon.player.chosenClass == AutomatonChar.Enums.THE_AUTOMATON || autoLocked()))) + && (!(c.getValue().hasTag(expansionContentMod.STUDY_COLLECTOR) + && (AbstractDungeon.player.chosenClass == CollectorChar.Enums.THE_COLLECTOR || collectorLocked()))) + && (!(c.getValue().hasTag(expansionContentMod.STUDY_AWAKENEDONE) + && (AbstractDungeon.player.chosenClass == AwakenedOneChar.Enums.AWAKENED_ONE || awakenedLocked()))) + ) { tmp.add(c.getKey()); } diff --git a/src/main/java/expansioncontent/cardmods/EtherealMod.java b/src/main/java/expansioncontent/cardmods/EtherealMod.java index a2560622d..a7b942ad0 100644 --- a/src/main/java/expansioncontent/cardmods/EtherealMod.java +++ b/src/main/java/expansioncontent/cardmods/EtherealMod.java @@ -42,8 +42,9 @@ public String identifier(AbstractCard card) { } //Retain Override - do not remove - Stanek + //sorry - blue @Override - public void onRetained(AbstractCard card) { - AbstractDungeon.actionManager.addToTop(new ExhaustSpecificCardAction(card, AbstractDungeon.player.hand, true)); - } + public void onRetained(AbstractCard card) { + AbstractDungeon.actionManager.addToTop(new ExhaustSpecificCardAction(card, AbstractDungeon.player.hand, true)); + } } \ No newline at end of file diff --git a/src/main/java/expansioncontent/cardmods/PropertiesMod.java b/src/main/java/expansioncontent/cardmods/PropertiesMod.java index cbfe9b576..4fac405ed 100644 --- a/src/main/java/expansioncontent/cardmods/PropertiesMod.java +++ b/src/main/java/expansioncontent/cardmods/PropertiesMod.java @@ -358,7 +358,8 @@ public String identifier(AbstractCard card) { } //Retain Override - do not remove - even if it is technically different from how the game usually works, I will do what I am allowed to force the mechanics to work as they are described - Stanek - @Override + //sorry - blue + @Override public void onRetained(AbstractCard card) { if (card.isEthereal) AbstractDungeon.actionManager.addToTop(new ExhaustSpecificCardAction(card, AbstractDungeon.player.hand, true)); diff --git a/src/main/java/expansioncontent/cardmods/RetainCardMod.java b/src/main/java/expansioncontent/cardmods/RetainCardMod.java index 7b552443a..dea7fc735 100644 --- a/src/main/java/expansioncontent/cardmods/RetainCardMod.java +++ b/src/main/java/expansioncontent/cardmods/RetainCardMod.java @@ -44,9 +44,9 @@ public String identifier(AbstractCard card) { } //Ethereal check - do not remove - Stanek - @Override - public void onRetained(AbstractCard card) { - if (card.isEthereal) + @Override + public void onRetained(AbstractCard card) { + if (card.isEthereal) AbstractDungeon.actionManager.addToTop(new ExhaustSpecificCardAction(card, AbstractDungeon.player.hand, true)); } } diff --git a/src/main/java/expansioncontent/cards/AbstractExpansionCard.java b/src/main/java/expansioncontent/cards/AbstractExpansionCard.java index 4278fa426..95b3bdaed 100644 --- a/src/main/java/expansioncontent/cards/AbstractExpansionCard.java +++ b/src/main/java/expansioncontent/cards/AbstractExpansionCard.java @@ -1,9 +1,18 @@ package expansioncontent.cards; +import basemod.helpers.CardModifierManager; +import collector.cardmods.PyreMod; import com.badlogic.gdx.graphics.Texture; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.actions.common.DamageAction; +import com.megacrit.cardcrawl.actions.utility.WaitAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.DamageInfo; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.localization.CardStrings; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.unlock.UnlockTracker; @@ -11,6 +20,9 @@ import expansioncontent.expansionContentMod; import expansioncontent.patches.CardColorEnumPatch; import hermit.util.TextureLoader; +import theHexaghost.HexaMod; +import theHexaghost.cards.AbstractHexaCard; +import theHexaghost.vfx.AfterlifePlayEffect; import static expansioncontent.expansionContentMod.*; @@ -96,6 +108,50 @@ public boolean canUse(AbstractPlayer p, AbstractMonster m) { return super.canUse(p, m); } + @Override + public void triggerOnExhaust() { + int bonus = 0; + + att(new AbstractGameAction() { + @Override + public void update() { + if (useAfterlifeVFX() && duration == startDuration) { + atb(new VFXAction(new AfterlifePlayEffect(AbstractExpansionCard.this))); + } + tickDuration(); + if (isDone) { + + atb(new WaitAction(0.2F)); // from ShowCardAction + + applyPowers(); + afterlife(); + + atb(new WaitAction(0.15F)); // from UseCardAction + + if (type == AbstractCard.CardType.POWER) { // special case for powers in UseCardAction + if (com.megacrit.cardcrawl.core.Settings.FAST_MODE) { + atb(new WaitAction(0.1F)); + } else { + atb(new WaitAction(0.7F)); + } + } + } + } + }); + + } + + protected boolean useAfterlifeVFX() { + return AbstractExpansionCard.this.tags.contains(HexaMod.AFTERLIFE); + } + + public void afterlife() {} + + //collector pyre code + protected void isPyre() { + CardModifierManager.addModifier(this, new PyreMod()); + } + @Override protected Texture getPortraitImage() { if (Settings.PLAYTESTER_ART_MODE || UnlockTracker.betaCardPref.getBoolean(this.cardID, false)) { diff --git a/src/main/java/expansioncontent/cards/AwakenDeath.java b/src/main/java/expansioncontent/cards/AwakenDeath.java index 775bad848..48af5a0d2 100644 --- a/src/main/java/expansioncontent/cards/AwakenDeath.java +++ b/src/main/java/expansioncontent/cards/AwakenDeath.java @@ -1,44 +1,35 @@ package expansioncontent.cards; - +import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.AbstractCreature; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.AbstractPower; +import com.megacrit.cardcrawl.powers.CuriosityPower; import expansioncontent.expansionContentMod; -import expansioncontent.powers.AwakenDeathPower; - -import static expansioncontent.expansionContentMod.loadJokeCardImage; - public class AwakenDeath extends AbstractExpansionCard { - public final static String ID = makeID("AwakenDeath"); - - private static final int MAGIC = 8; - private static final int UPGRADE_MAGIC = 4; + public static final String ID = makeID("AwakenDeath"); public AwakenDeath() { - super(ID, 2, CardType.POWER, CardRarity.UNCOMMON, CardTarget.SELF); - tags.add(expansionContentMod.STUDY_AWAKENEDONE); - tags.add(expansionContentMod.STUDY); - this.setBackgroundTexture("expansioncontentResources/images/512/bg_boss_awakenedone.png", "expansioncontentResources/images/1024/bg_boss_awakenedone.png"); - baseMagicNumber = magicNumber = MAGIC; - tags.add(CardTags.HEALING); - loadJokeCardImage(this, "AwakenDeath.png"); + super(ID, 2, AbstractCard.CardType.POWER, AbstractCard.CardRarity.UNCOMMON, AbstractCard.CardTarget.SELF); + this.tags.add(expansionContentMod.STUDY); + this.tags.add(expansionContentMod.STUDY_AWAKENEDONE); + setBackgroundTexture("expansioncontentResources/images/512/bg_boss_awakenedone.png", "expansioncontentResources/images/1024/bg_boss_awakenedone.png"); + this.baseMagicNumber = this.magicNumber = 1; + expansionContentMod.loadJokeCardImage((AbstractCard)this, "AwakenDeath.png"); } public void use(AbstractPlayer p, AbstractMonster m) { - // atb(new ApplyPowerAction(p, p, new StrengthPower(p, 1), 1)); - atb(new ApplyPowerAction(p, p, new AwakenDeathPower(p, p, this.magicNumber), this.magicNumber)); - + atb((AbstractGameAction)new ApplyPowerAction((AbstractCreature)p, (AbstractCreature)p, (AbstractPower)new CuriosityPower((AbstractCreature)p, this.magicNumber), this.magicNumber)); } public void upgrade() { - if (!upgraded) { + if (!this.upgraded) { upgradeName(); - upgradeMagicNumber(UPGRADE_MAGIC); + upgradeMagicNumber(1); } } - } - - diff --git a/src/main/java/expansioncontent/cards/BeatOfDeath.java b/src/main/java/expansioncontent/cards/BeatOfDeath.java new file mode 100644 index 000000000..7f05e52f1 --- /dev/null +++ b/src/main/java/expansioncontent/cards/BeatOfDeath.java @@ -0,0 +1,33 @@ +package expansioncontent.cards; + +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.AbstractPower; +import expansioncontent.expansionContentMod; +import expansioncontent.powers.BeatOfDeathThatDoesntKillYouPower; + +public class BeatOfDeath extends AbstractExpansionCard { + public static final String ID = makeID("BeatOfDeath"); + + private static final int MAGIC = 2; + + public BeatOfDeath() { + super(ID, 2, AbstractCard.CardType.POWER, AbstractCard.CardRarity.RARE, AbstractCard.CardTarget.SELF); + setBackgroundTexture("expansioncontentResources/images/512/bg_boss_heart.png", "expansioncontentResources/images/1024/bg_boss_heart.png"); + this.magicNumber = this.baseMagicNumber = 2; + expansionContentMod.loadJokeCardImage((AbstractCard)this, "BeatOfDeath.png"); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + applyToSelf((AbstractPower)new BeatOfDeathThatDoesntKillYouPower((AbstractCreature)p, this.magicNumber)); + } + + public void upgrade() { + if (!this.upgraded) { + upgradeName(); + upgradeMagicNumber(1); + } + } +} diff --git a/src/main/java/expansioncontent/cards/BloodBarrage.java b/src/main/java/expansioncontent/cards/BloodBarrage.java new file mode 100644 index 000000000..07370bc8a --- /dev/null +++ b/src/main/java/expansioncontent/cards/BloodBarrage.java @@ -0,0 +1,40 @@ +package expansioncontent.cards; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.DamageAction; +import com.megacrit.cardcrawl.actions.common.PummelDamageAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import expansioncontent.expansionContentMod; + +public class BloodBarrage extends AbstractExpansionCard { + public static final String ID = makeID("BloodBarrage"); + + private static final int MAGIC = 5; + + public BloodBarrage() { + super(ID, 1, AbstractCard.CardType.ATTACK, AbstractCard.CardRarity.UNCOMMON, AbstractCard.CardTarget.ENEMY); + setBackgroundTexture("expansioncontentResources/images/512/bg_boss_heart.png", "expansioncontentResources/images/1024/bg_boss_heart.png"); + this.baseDamage = 3; + this.exhaust = true; + this.baseMagicNumber = 5; + this.magicNumber = this.baseMagicNumber; + expansionContentMod.loadJokeCardImage((AbstractCard)this, "BloodBarrage.png"); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + for (int i = 1; i < this.magicNumber; i++) + addToBot((AbstractGameAction)new PummelDamageAction((AbstractCreature)m, new DamageInfo((AbstractCreature)p, this.damage, this.damageTypeForTurn))); + addToBot((AbstractGameAction)new DamageAction((AbstractCreature)m, new DamageInfo((AbstractCreature)p, this.damage, this.damageTypeForTurn), AbstractGameAction.AttackEffect.BLUNT_HEAVY)); + } + + public void upgrade() { + if (!this.upgraded) { + upgradeName(); + upgradeMagicNumber(1); + } + } +} diff --git a/src/main/java/expansioncontent/cards/ChargeUp.java b/src/main/java/expansioncontent/cards/ChargeUp.java new file mode 100644 index 000000000..b9a2d4356 --- /dev/null +++ b/src/main/java/expansioncontent/cards/ChargeUp.java @@ -0,0 +1,47 @@ +package expansioncontent.cards; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import expansioncontent.expansionContentMod; +import guardian.GuardianMod; +import hermit.actions.ReduceDebuffsAction; + +import static guardian.GuardianMod.makeBetaCardPath; + +public class ChargeUp extends AbstractExpansionCard { + public static final String ID = makeID("ChargeUp"); + + private static final int BLOCK = 20; + + private static final int UPGRADE_BLOCK = 10; + + private static final int MAGIC = 2; + + public ChargeUp() { + super(ID, 0, AbstractCard.CardType.SKILL, AbstractCard.CardRarity.UNCOMMON, AbstractCard.CardTarget.SELF); + setBackgroundTexture("expansioncontentResources/images/512/bg_boss_guardian.png", "expansioncontentResources/images/1024/bg_boss_guardian.png"); + this.tags.add(expansionContentMod.STUDY_GUARDIAN); + this.tags.add(expansionContentMod.STUDY); + this.baseMagicNumber = this.magicNumber = 2; + this.exhaust = true; + expansionContentMod.loadJokeCardImage((AbstractCard)this, "BronzeArmor.png"); + + } + + public void use(AbstractPlayer p, AbstractMonster m) { + AbstractDungeon.actionManager.addToBottom((AbstractGameAction)new ReduceDebuffsAction((AbstractCreature)AbstractDungeon.player, this.magicNumber)); + } + + public void upgrade() { + if (!this.upgraded) { + upgradeName(); + this.exhaust = false; + this.rawDescription = this.UPGRADE_DESCRIPTION; + initializeDescription(); + } + } +} diff --git a/src/main/java/expansioncontent/cards/Chronoboost.java b/src/main/java/expansioncontent/cards/Chronoboost.java index 079575cb5..62355b7d1 100644 --- a/src/main/java/expansioncontent/cards/Chronoboost.java +++ b/src/main/java/expansioncontent/cards/Chronoboost.java @@ -1,43 +1,37 @@ package expansioncontent.cards; - +import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.AbstractCreature; import com.megacrit.cardcrawl.monsters.AbstractMonster; -import com.megacrit.cardcrawl.powers.StrengthPower; +import com.megacrit.cardcrawl.powers.AbstractPower; import expansioncontent.expansionContentMod; import expansioncontent.powers.ChronoBoostPower; -import static expansioncontent.expansionContentMod.loadJokeCardImage; - - public class Chronoboost extends AbstractExpansionCard { - public final static String ID = makeID("Chronoboost"); + public static final String ID = makeID("Chronoboost"); - private static final int MAGIC = 1; + private static final int MAGIC = 2; public Chronoboost() { - super(ID, 2, CardType.POWER, CardRarity.UNCOMMON, CardTarget.SELF); - tags.add(expansionContentMod.STUDY_TIMEEATER); - tags.add(expansionContentMod.STUDY); - this.setBackgroundTexture("expansioncontentResources/images/512/bg_boss_timeeater.png", "expansioncontentResources/images/1024/bg_boss_timeeater.png"); - loadJokeCardImage(this, "Chronoboost.png"); + super(ID, 1, AbstractCard.CardType.POWER, AbstractCard.CardRarity.UNCOMMON, AbstractCard.CardTarget.SELF); + this.tags.add(expansionContentMod.STUDY_TIMEEATER); + this.tags.add(expansionContentMod.STUDY); + this.baseMagicNumber = this.magicNumber = 2; + setBackgroundTexture("expansioncontentResources/images/512/bg_boss_timeeater.png", "expansioncontentResources/images/1024/bg_boss_timeeater.png"); + expansionContentMod.loadJokeCardImage((AbstractCard)this, "Chronoboost.png"); } public void use(AbstractPlayer p, AbstractMonster m) { - if (upgraded) atb(new ApplyPowerAction(p, p, new StrengthPower(p, 2), 2)); - - atb(new ApplyPowerAction(p, p, new ChronoBoostPower(p, p, 2), 2)); + atb((AbstractGameAction)new ApplyPowerAction((AbstractCreature)p, (AbstractCreature)p, (AbstractPower)new ChronoBoostPower((AbstractCreature)p, (AbstractCreature)p, this.magicNumber), this.magicNumber)); } public void upgrade() { - if (!upgraded) { + if (!this.upgraded) { upgradeName(); - rawDescription = UPGRADE_DESCRIPTION; - initializeDescription(); + upgradeMagicNumber(1); } } - } - - diff --git a/src/main/java/expansioncontent/cards/DashGenerateEvil.java b/src/main/java/expansioncontent/cards/DashGenerateEvil.java index 621cc4691..c0bac8a53 100644 --- a/src/main/java/expansioncontent/cards/DashGenerateEvil.java +++ b/src/main/java/expansioncontent/cards/DashGenerateEvil.java @@ -1,114 +1,42 @@ package expansioncontent.cards; - -import com.badlogic.gdx.Gdx; import com.megacrit.cardcrawl.actions.AbstractGameAction; -import com.megacrit.cardcrawl.actions.animations.VFXAction; -import com.megacrit.cardcrawl.actions.common.DamageAction; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; import com.megacrit.cardcrawl.cards.AbstractCard; -import com.megacrit.cardcrawl.cards.DamageInfo; import com.megacrit.cardcrawl.characters.AbstractPlayer; -import com.megacrit.cardcrawl.helpers.CardLibrary; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; -import com.megacrit.cardcrawl.vfx.combat.HemokinesisEffect; +import com.megacrit.cardcrawl.powers.AbstractPower; import expansioncontent.expansionContentMod; -import expansioncontent.actions.RandomCardWithTagAction; - -import static expansioncontent.expansionContentMod.loadJokeCardImage; - -import java.util.ArrayList; - +import expansioncontent.powers.EvilWithinPower; public class DashGenerateEvil extends AbstractExpansionCard { - public final static String ID = makeID("DashGenerateEvil"); - - private static final int BLOCK = 10; - private static final int UPGRADE_BLOCK = 2; - private static final int DAMAGE = 10; - private static final int UPGRADE_DAMAGE = 2; + public static final String ID = makeID("DashGenerateEvil"); - private ArrayList getList() { - ArrayList myList = new ArrayList<>(); - for (AbstractCard q : CardLibrary.getAllCards()) { - if (q.rarity != CardRarity.SPECIAL && q.hasTag(expansionContentMod.STUDY)) { - AbstractCard r = q.makeCopy(); - if (upgraded) { - r.upgrade(); - } - myList.add(r); - } - } - return myList; - } + private static final int MAGIC = 10; - private float rotationTimer; - private int previewIndex; - private ArrayList dupeListForPrev = new ArrayList<>(); + private static final int downfallMagic = 5; public DashGenerateEvil() { - super(ID, 1, CardType.ATTACK, CardRarity.RARE, CardTarget.ENEMY); - this.setBackgroundTexture("expansioncontentResources/images/512/bg_boss_attack.png", "expansioncontentResources/images/1024/bg_boss_attack.png"); - baseBlock = BLOCK; - baseDamage = DAMAGE; + super(ID, 0, AbstractCard.CardType.POWER, AbstractCard.CardRarity.RARE, AbstractCard.CardTarget.SELF); + setBackgroundTexture("expansioncontentResources/images/512/bg_boss_power.png", "expansioncontentResources/images/1024/bg_boss_power.png"); + this.baseDownfallMagic = 5; + this.baseMagicNumber = this.magicNumber = 10; this.exhaust = true; - loadJokeCardImage(this, "DashGenerateEvil.png"); + expansionContentMod.loadJokeCardImage((AbstractCard)this, "DashGenerateEvil.png"); } public void use(AbstractPlayer p, AbstractMonster m) { - - - this.addToBot(new VFXAction(new HemokinesisEffect(p.hb.cX, p.hb.cY, m.hb.cX, m.hb.cY), 0.5F)); - - // atb(new GainBlockAction(p, p, this.block)); - atb(new DamageAction(m, new DamageInfo(p, this.damage, this.damageTypeForTurn), AbstractGameAction.AttackEffect.BLUNT_HEAVY)); - - atb(new RandomCardWithTagAction(upgraded, expansionContentMod.STUDY, true)); - - + if (!AbstractDungeon.player.hasPower("expansioncontent:EvilWithinPower")) + addToBot((AbstractGameAction)new ApplyPowerAction((AbstractCreature)p, (AbstractCreature)p, (AbstractPower)new EvilWithinPower((AbstractCreature)p, this.magicNumber), this.magicNumber)); + addToBot((AbstractGameAction)new ApplyPowerAction((AbstractCreature)p, (AbstractCreature)p, (AbstractPower)new EvilWithinPower((AbstractCreature)p, this.magicNumber), this.magicNumber)); } public void upgrade() { - if (!upgraded) { + if (!this.upgraded) { upgradeName(); - upgradeBlock(UPGRADE_BLOCK); - upgradeDamage(UPGRADE_DAMAGE); - rawDescription = UPGRADE_DESCRIPTION; - for (AbstractCard q : this.dupeListForPrev) { - q.upgrade(); - } - initializeDescription(); - } - } - - @Override - public void update() { - super.update(); - if (dupeListForPrev.isEmpty()) { - dupeListForPrev.addAll(getList()); - } - if (hb.hovered) { - if (rotationTimer <= 0F) { - rotationTimer = 2F; - if (dupeListForPrev.size() == 0) { - cardsToPreview = CardLibrary.cards.get("Madness"); - } else { - cardsToPreview = dupeListForPrev.get(previewIndex); - } - if (previewIndex == dupeListForPrev.size() - 1) { - previewIndex = 0; - } else { - previewIndex++; - } - } else { - rotationTimer -= Gdx.graphics.getDeltaTime(); - } + upgradeMagicNumber(4); } } - - @Override - public void unhover() { - super.unhover(); - cardsToPreview = null; - } } - diff --git a/src/main/java/expansioncontent/cards/DecaShield.java b/src/main/java/expansioncontent/cards/DecaShield.java index d2acbfddf..b6ea4c936 100644 --- a/src/main/java/expansioncontent/cards/DecaShield.java +++ b/src/main/java/expansioncontent/cards/DecaShield.java @@ -1,4 +1,4 @@ -/* +package expansioncontent.cards;/* package expansioncontent.cards; import com.megacrit.cardcrawl.actions.AbstractGameAction; diff --git a/src/main/java/expansioncontent/cards/DoubleAct.java b/src/main/java/expansioncontent/cards/DoubleAct.java new file mode 100644 index 000000000..71991160a --- /dev/null +++ b/src/main/java/expansioncontent/cards/DoubleAct.java @@ -0,0 +1,49 @@ +package expansioncontent.cards; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.actions.common.*; +import com.megacrit.cardcrawl.actions.unique.LoseEnergyAction; +import com.megacrit.cardcrawl.actions.utility.SFXAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.*; +import com.megacrit.cardcrawl.vfx.combat.CleaveEffect; +import downfall.actions.OctoChoiceAction; +import downfall.cards.OctoChoiceCard; +import downfall.util.OctopusCard; +import expansioncontent.expansionContentMod; + +import static collector.util.Wiz.applyToEnemy; +import static expansioncontent.expansionContentMod.loadJokeCardImage; + +import java.util.ArrayList; + +public class DoubleAct extends AbstractExpansionCard{ + public final static String ID = makeID("DoubleAct"); + + private static final int downfallMagic = 0; + + public DoubleAct() { + super(ID, 3, CardType.SKILL, CardRarity.RARE, CardTarget.SELF); + //todo skill bg instead of power bg + this.setBackgroundTexture("expansioncontentResources/images/512/bg_boss_donudeca.png", "expansioncontentResources/images/1024/bg_boss_donudeca.png"); + tags.add(expansionContentMod.STUDY_SHAPES); + tags.add(expansionContentMod.STUDY); + baseDownfallMagic = downfallMagic; + baseMagicNumber = magicNumber = 0; + loadJokeCardImage(this, "DoubleAct.png"); + exhaust = true; + } + + public void use(AbstractPlayer p, AbstractMonster m) { + applyToSelf(new EnergizedBluePower(AbstractDungeon.player, p.energy.energyMaster)); + applyToSelf(new DrawCardNextTurnPower(AbstractDungeon.player, p.gameHandSize)); + } + + @Override + public void upp() { +upgradeBaseCost(2); + } +} \ No newline at end of file diff --git a/src/main/java/expansioncontent/cards/ExploitVulnerability.java b/src/main/java/expansioncontent/cards/ExploitVulnerability.java new file mode 100644 index 000000000..edc104509 --- /dev/null +++ b/src/main/java/expansioncontent/cards/ExploitVulnerability.java @@ -0,0 +1,82 @@ +package expansioncontent.cards; + +import com.badlogic.gdx.graphics.Color; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.DamageAllEnemiesAction; +import com.megacrit.cardcrawl.actions.common.GainBlockAction; +import com.megacrit.cardcrawl.actions.common.RemoveAllBlockAction; +import com.megacrit.cardcrawl.actions.utility.SFXAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.PlatedArmorPower; +import com.megacrit.cardcrawl.powers.StrengthPower; +import com.megacrit.cardcrawl.powers.VulnerablePower; +import com.megacrit.cardcrawl.vfx.combat.CleaveEffect; +import downfall.actions.OctoChoiceAction; +import downfall.cards.OctoChoiceCard; +import downfall.util.OctopusCard; +import expansioncontent.expansionContentMod; +import guardian.vfx.SmallLaserEffectColored; + +import static collector.util.Wiz.*; +import static expansioncontent.expansionContentMod.loadJokeCardImage; + +import java.util.ArrayList; + +public class ExploitVulnerability extends AbstractExpansionCard{ + public final static String ID = makeID("ExploitVulnerability"); + + private static final int downfallMagic = 2; + + public ExploitVulnerability() { + //todo attack bg instead of power bg + super(ID, 2, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); + this.setBackgroundTexture("expansioncontentResources/images/512/bg_boss_donudeca.png", "expansioncontentResources/images/1024/bg_boss_donudeca.png"); + tags.add(expansionContentMod.STUDY_SHAPES); + tags.add(expansionContentMod.STUDY); + baseDamage = 10; + baseDownfallMagic = downfallMagic; + baseMagicNumber = magicNumber = 999; + loadJokeCardImage(this, "ExploitVulnerability.png"); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + if (m != null) { + AbstractDungeon.actionManager.addToBottom(new SFXAction("ATTACK_MAGIC_BEAM_SHORT", 0.5F)); + AbstractDungeon.actionManager.addToBottom(new VFXAction(new SmallLaserEffectColored(m.hb.cX, m.hb.cY, p.hb.cX, p.hb.cY, Color.WHITE), 0.2F)); + } + if (m.currentBlock > 0) { + int toSteal = Math.min(magicNumber, m.currentBlock); + atb(new AbstractGameAction() { + @Override + public void update() { + isDone = true; + m.loseBlock(toSteal); + } + }); + atb(new GainBlockAction(p, toSteal)); + } + dmg(m, AbstractGameAction.AttackEffect.BLUNT_HEAVY); + dmg(m, AbstractGameAction.AttackEffect.BLUNT_HEAVY); + } + + @Override + public void triggerOnGlowCheck() { + for (AbstractMonster m : getEnemies()) { + if (m.currentBlock > 0) { + this.glowColor = AbstractCard.GOLD_BORDER_GLOW_COLOR; + return; + } + } + this.glowColor = AbstractCard.BLUE_BORDER_GLOW_COLOR; + } + + @Override + public void upp() { + upgradeDamage(4); + } +} \ No newline at end of file diff --git a/src/main/java/expansioncontent/cards/FaceSlap.java b/src/main/java/expansioncontent/cards/FaceSlap.java new file mode 100644 index 000000000..cfa090466 --- /dev/null +++ b/src/main/java/expansioncontent/cards/FaceSlap.java @@ -0,0 +1,65 @@ +package expansioncontent.cards; + + +import com.badlogic.gdx.math.MathUtils; +import com.megacrit.cardcrawl.actions.animations.TalkAction; +import com.megacrit.cardcrawl.actions.utility.SFXAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.monsters.city.Champ; +import expansioncontent.expansionContentMod; + +import static champ.ChampMod.vigor; + +import java.util.ArrayList; + +public class FaceSlap extends AbstractExpansionCard { + + //Super Vicious Mockery + public final static String ID = makeID("SuperViciousMockery"); + + private static final int MAGIC = 5; + private static final int UPGRADE_MAGIC = 3; + private static final int downfallMagic = 2; + private static final int UPGRADE_downfallMagic = 1; + + public FaceSlap() { + super(ID, 1, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.ENEMY); + //todo skill bg instead of power bg + this.setBackgroundTexture("expansioncontentResources/images/512/bg_boss_champ.png", "expansioncontentResources/images/1024/bg_boss_champ.png"); + + tags.add(expansionContentMod.STUDY_CHAMP); + tags.add(expansionContentMod.STUDY); + + baseDownfallMagic = downfallMagic; + baseMagicNumber = magicNumber = MAGIC; + expansionContentMod.loadJokeCardImage((AbstractCard)this, "ViciousMockery.png"); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + vigor(magicNumber); + applyToEnemy(m, autoWeak(m, downfallMagic)); + atb(new SFXAction("VO_CHAMP_2A")); + atb(new TalkAction(true, getTaunt(), 2.0F, 2.0F)); + } + + private String getTaunt() { + ArrayList derp = new ArrayList<>(); + derp.add(Champ.DIALOG[0]); + derp.add(Champ.DIALOG[1]); + derp.add(Champ.DIALOG[2]); + derp.add(Champ.DIALOG[3]); + return derp.get(MathUtils.random(derp.size() - 1)); + } + + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeDownfall(UPGRADE_downfallMagic); + upgradeMagicNumber(UPGRADE_MAGIC); + } + } + +} + diff --git a/src/main/java/expansioncontent/cards/deprecated/Flail.java b/src/main/java/expansioncontent/cards/Flail.java similarity index 52% rename from src/main/java/expansioncontent/cards/deprecated/Flail.java rename to src/main/java/expansioncontent/cards/Flail.java index 038f7fead..ecde603d0 100644 --- a/src/main/java/expansioncontent/cards/deprecated/Flail.java +++ b/src/main/java/expansioncontent/cards/Flail.java @@ -1,62 +1,49 @@ -package expansioncontent.cards.deprecated; +package expansioncontent.cards; import com.megacrit.cardcrawl.actions.AbstractGameAction; -import com.megacrit.cardcrawl.actions.animations.VFXAction; import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; -import com.megacrit.cardcrawl.actions.common.DamageAllEnemiesAction; -import com.megacrit.cardcrawl.actions.utility.SFXAction; +import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.ArtifactPower; -import com.megacrit.cardcrawl.vfx.combat.CleaveEffect; -import downfall.util.CardIgnore; -import expansioncontent.cards.AbstractExpansionCard; import expansioncontent.expansionContentMod; -@CardIgnore public class Flail extends AbstractExpansionCard { public final static String ID = makeID("Flail"); - private static final int DAMAGE = 6; - private static final int UPGRADE_DAMAGE = 1; - + private static final int DAMAGE = 4; + private static final int UPGRADE_DAMAGE = 2; + private static final int downfallMagic = 2; public Flail() { - super(ID, 2, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ALL_ENEMY); - + super(ID, 1, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ALL_ENEMY); + this.setBackgroundTexture("expansioncontentResources/images/512/bg_boss_automaton.png", "expansioncontentResources/images/1024/bg_boss_automaton.png"); + expansionContentMod.loadJokeCardImage((AbstractCard)this, "Flail.png"); tags.add(expansionContentMod.STUDY_AUTOMATON); tags.add(expansionContentMod.STUDY); + tags.add(CardTags.STRIKE); + baseDamage = DAMAGE; this.isMultiDamage = true; this.exhaust = true; this.baseMagicNumber = this.magicNumber = 1; + baseDownfallMagic = downfallMagic; } public void use(AbstractPlayer p, AbstractMonster m) { - - atb(new SFXAction("ATTACK_WHIRLWIND")); - - for (int i = 0; i < 2; i++) { - atb(new SFXAction("ATTACK_HEAVY")); - - atb(new VFXAction(p, new CleaveEffect(), 0.1F)); - atb(new DamageAllEnemiesAction(p, this.multiDamage, this.damageTypeForTurn, AbstractGameAction.AttackEffect.NONE)); - //atb(new WaitAction(0.1F)); - - + for (int i = 0; i < downfallMagic; i++) { + allDmg(AbstractGameAction.AttackEffect.SLASH_HORIZONTAL); } atb(new ApplyPowerAction(p, p, new ArtifactPower(p, this.magicNumber), this.magicNumber)); - - } public void upgrade() { if (!upgraded) { upgradeName(); upgradeDamage(UPGRADE_DAMAGE); - upgradeMagicNumber(1); + // upgradeMagicNumber(1); } } diff --git a/src/main/java/expansioncontent/cards/GoopSpray.java b/src/main/java/expansioncontent/cards/GoopSpray.java new file mode 100644 index 000000000..0a50d8984 --- /dev/null +++ b/src/main/java/expansioncontent/cards/GoopSpray.java @@ -0,0 +1,70 @@ +package expansioncontent.cards; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.utility.WaitAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.AbstractPower; +import com.megacrit.cardcrawl.powers.WeakPower; +import com.megacrit.cardcrawl.vfx.AbstractGameEffect; +import expansioncontent.expansionContentMod; +import slimebound.SlimeboundMod; +import slimebound.powers.SlimedPower; +import slimebound.vfx.SlimeProjectileEffect; + +import java.util.Iterator; + +public class GoopSpray extends AbstractExpansionCard { + public static final String ID = makeID("SuperGoopSpray"); + + private static final int MAGIC = 8; + + private static final int UPGRADE_MAGIC = 3; + + private static final int downfallMagic = 2; + + private static final int UPGRADE_downfallMagic = 1; + + public GoopSpray() { + super(ID, 1, AbstractCard.CardType.SKILL, AbstractCard.CardRarity.UNCOMMON, AbstractCard.CardTarget.ENEMY); + setBackgroundTexture("expansioncontentResources/images/512/bg_boss_slime.png", "expansioncontentResources/images/1024/bg_boss_slime.png"); + this.tags.add(expansionContentMod.STUDY_SLIMEBOSS); + this.tags.add(expansionContentMod.STUDY); + this.baseDownfallMagic = 2; + this.baseMagicNumber = this.magicNumber = 8; + expansionContentMod.loadJokeCardImage((AbstractCard)this, "GoopSpray.png"); + } + public void use(AbstractPlayer p, AbstractMonster m) { + if (!this.upgraded) { + atb((AbstractGameAction)new VFXAction((AbstractGameEffect)new SlimeProjectileEffect(p.hb.cX, p.hb.cY, m.hb.cX, m.hb.cY, 3.0F, false, 0.6F), 0.01F)); + atb((AbstractGameAction)new WaitAction(0.2F)); + atb((AbstractGameAction)new ApplyPowerAction((AbstractCreature)m, (AbstractCreature)p, (AbstractPower)new SlimedPower((AbstractCreature)m, (AbstractCreature)p, this.magicNumber), this.magicNumber, true, AbstractGameAction.AttackEffect.NONE)); + + this.addToBot(new ApplyPowerAction(m, p, new WeakPower(m, downfallMagic, false), downfallMagic)); + } else { + Iterator var3 = AbstractDungeon.getCurrRoom().monsters.monsters.iterator(); + while(var3.hasNext()) { + AbstractMonster mo = (AbstractMonster)var3.next(); + atb((AbstractGameAction)new VFXAction((AbstractGameEffect)new SlimeProjectileEffect(p.hb.cX, p.hb.cY, mo.hb.cX, mo.hb.cY, 3.0F, false, 0.6F), 0.01F)); + atb((AbstractGameAction)new ApplyPowerAction((AbstractCreature)mo, (AbstractCreature)p, (AbstractPower)new SlimedPower((AbstractCreature)mo, (AbstractCreature)p, this.magicNumber), this.magicNumber, true, AbstractGameAction.AttackEffect.NONE)); + this.addToBot(new ApplyPowerAction(mo, p, new WeakPower(mo, downfallMagic, false), downfallMagic, true, AbstractGameAction.AttackEffect.NONE)); + } + } + + } + + public void upgrade() { + if (!this.upgraded) { + upgradeName(); + upgradeMagicNumber(2); + this.target = CardTarget.ALL_ENEMY; + this.rawDescription = cardStrings.UPGRADE_DESCRIPTION; + this.initializeDescription(); + } + } +} diff --git a/src/main/java/expansioncontent/cards/GuardianWhirl.java b/src/main/java/expansioncontent/cards/GuardianWhirl.java index 103c4833c..01f1b97ba 100644 --- a/src/main/java/expansioncontent/cards/GuardianWhirl.java +++ b/src/main/java/expansioncontent/cards/GuardianWhirl.java @@ -1,62 +1,58 @@ package expansioncontent.cards; - +import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.actions.common.DamageAllEnemiesAction; import com.megacrit.cardcrawl.actions.utility.SFXAction; +import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.AbstractCreature; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.vfx.AbstractGameEffect; import com.megacrit.cardcrawl.vfx.combat.CleaveEffect; import expansioncontent.expansionContentMod; -import static expansioncontent.expansionContentMod.loadJokeCardImage; - public class GuardianWhirl extends AbstractExpansionCard { - public final static String ID = makeID("GuardianWhirl"); + public static final String ID = makeID("GuardianWhirl"); private static final int DAMAGE = 4; - private static final int UPGRADE_DAMAGE = 2; - public GuardianWhirl() { - super(ID, 2, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ALL_ENEMY); - this.setBackgroundTexture("expansioncontentResources/images/512/bg_boss_guardian.png", "expansioncontentResources/images/1024/bg_boss_guardian.png"); + private static final int MAGIC = 2; - tags.add(expansionContentMod.STUDY_GUARDIAN); - tags.add(expansionContentMod.STUDY); + private static final int downfallMagic = 10; - baseDamage = DAMAGE; + public GuardianWhirl() { + super(ID, 2, AbstractCard.CardType.ATTACK, AbstractCard.CardRarity.UNCOMMON, AbstractCard.CardTarget.ALL_ENEMY); + setBackgroundTexture("expansioncontentResources/images/512/bg_boss_guardian.png", "expansioncontentResources/images/1024/bg_boss_guardian.png"); + this.tags.add(expansionContentMod.STUDY_GUARDIAN); + this.tags.add(expansionContentMod.STUDY); + this.baseDamage = 4; this.isMultiDamage = true; - this.exhaust = true; - loadJokeCardImage(this, "GuardianWhirl.png"); + this.baseDownfallMagic = 10; + this.magicNumber = this.baseMagicNumber = 2; + expansionContentMod.loadJokeCardImage((AbstractCard)this, "GuardianWhirl.png"); } public void use(AbstractPlayer p, AbstractMonster m) { - - atb(new SFXAction("ATTACK_WHIRLWIND")); - - for (int i = 0; i < 4; i++) { - atb(new SFXAction("ATTACK_HEAVY")); - - atb(new VFXAction(p, new CleaveEffect(), 0.1F)); - atb(new com.megacrit.cardcrawl.actions.common.DamageAllEnemiesAction(p, this.multiDamage, this.damageTypeForTurn, com.megacrit.cardcrawl.actions.AbstractGameAction.AttackEffect.NONE)); - //atb(new WaitAction(0.1f)); - } - - } - - @Override - public boolean canUse(AbstractPlayer p, AbstractMonster m) { - if (p.currentBlock < 10) { - cantUseMessage = EXTENDED_DESCRIPTION[0]; - return false; + atb((AbstractGameAction)new SFXAction("ATTACK_WHIRLWIND")); + int i; + for (i = 0; i < this.magicNumber; i++) { + atb((AbstractGameAction)new SFXAction("ATTACK_HEAVY")); + atb((AbstractGameAction)new VFXAction((AbstractCreature)p, (AbstractGameEffect)new CleaveEffect(), 0.1F)); + atb((AbstractGameAction)new DamageAllEnemiesAction((AbstractCreature)p, this.multiDamage, this.damageTypeForTurn, AbstractGameAction.AttackEffect.NONE)); } - return super.canUse(p, m); + if (p.currentBlock >= 10) + for (i = 0; i < this.magicNumber; i++) { + atb((AbstractGameAction)new SFXAction("ATTACK_HEAVY")); + atb((AbstractGameAction)new VFXAction((AbstractCreature)p, (AbstractGameEffect)new CleaveEffect(), 0.1F)); + atb((AbstractGameAction)new DamageAllEnemiesAction((AbstractCreature)p, this.multiDamage, this.damageTypeForTurn, AbstractGameAction.AttackEffect.NONE)); + } } public void upgrade() { - if (!upgraded) { + if (!this.upgraded) { upgradeName(); - upgradeDamage(UPGRADE_DAMAGE); + upgradeDamage(2); } } - -} \ No newline at end of file +} diff --git a/src/main/java/expansioncontent/cards/Hexaburn.java b/src/main/java/expansioncontent/cards/Hexaburn.java index a6553552e..741f77af6 100644 --- a/src/main/java/expansioncontent/cards/Hexaburn.java +++ b/src/main/java/expansioncontent/cards/Hexaburn.java @@ -1,40 +1,43 @@ package expansioncontent.cards; - +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.actions.common.AttackDamageRandomEnemyAction; +import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.vfx.AbstractGameEffect; import expansioncontent.expansionContentMod; -import expansioncontent.powers.PretendHexWheelPower; - -import static expansioncontent.expansionContentMod.loadJokeCardImage; - +import hermit.vfx.ShortScreenFire; public class Hexaburn extends AbstractExpansionCard { - public final static String ID = makeID("Hexaburn"); + public static final String ID = makeID("Hexaburn"); public Hexaburn() { - super(ID, 2, CardType.POWER, CardRarity.UNCOMMON, CardTarget.SELF); - this.setBackgroundTexture("expansioncontentResources/images/512/bg_boss_hexaghost.png", "expansioncontentResources/images/1024/bg_boss_hexaghost.png"); - tags.add(expansionContentMod.STUDY_HEXAGHOST); - tags.add(expansionContentMod.STUDY); - baseMagicNumber = magicNumber = 3; - baseDamage = 6; - loadJokeCardImage(this, "Hexaburn.png"); + super(ID, 2, AbstractCard.CardType.ATTACK, AbstractCard.CardRarity.RARE, AbstractCard.CardTarget.ALL_ENEMY); + setBackgroundTexture("expansioncontentResources/images/512/bg_boss_hexaghost.png", "expansioncontentResources/images/1024/bg_boss_hexaghost.png"); + this.tags.add(expansionContentMod.STUDY_HEXAGHOST); + this.tags.add(expansionContentMod.STUDY); + this.baseMagicNumber = this.magicNumber = 6; + this.baseDamage = 4; + this.exhaust = true; + expansionContentMod.loadJokeCardImage((AbstractCard)this, "Hexaburn.png"); } public void use(AbstractPlayer p, AbstractMonster m) { - applyToSelf(new PretendHexWheelPower(magicNumber)); + AbstractDungeon.actionManager.addToBottom(new VFXAction(p, new ShortScreenFire(), 0.5F)); + for (int i = 0; i < this.magicNumber; i++) + addToBot((AbstractGameAction)new AttackDamageRandomEnemyAction((AbstractCard)this, AbstractGameAction.AttackEffect.FIRE)); } public void upgrade() { - if (!upgraded) { + if (!this.upgraded) { upgradeName(); - upgradeMagicNumber(-1); + this.exhaust = false; + this.rawDescription = UPGRADE_DESCRIPTION; + this.initializeDescription(); } } } - - - - - diff --git a/src/main/java/expansioncontent/cards/HyperBeam.java b/src/main/java/expansioncontent/cards/HyperBeam.java index 91790dedb..8f948d4f9 100644 --- a/src/main/java/expansioncontent/cards/HyperBeam.java +++ b/src/main/java/expansioncontent/cards/HyperBeam.java @@ -4,8 +4,10 @@ import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.animations.VFXAction; import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.MakeTempCardInDrawPileAction; import com.megacrit.cardcrawl.actions.utility.SFXAction; import com.megacrit.cardcrawl.actions.utility.WaitAction; +import com.megacrit.cardcrawl.cards.status.VoidCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.vfx.combat.MindblastEffect; @@ -19,32 +21,27 @@ public class HyperBeam extends AbstractExpansionCard { public final static String ID = makeID("HyperBeam"); - private static final int DAMAGE = 26; - private static final int UPGRADE_DAMAGE = 8; + private static final int DAMAGE = 17; + private static final int UPGRADE_DAMAGE = 4; public HyperBeam() { - super(ID, 2, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ALL_ENEMY); + super(ID, 1, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ALL_ENEMY); this.setBackgroundTexture("expansioncontentResources/images/512/bg_boss_automaton.png", "expansioncontentResources/images/1024/bg_boss_automaton.png"); tags.add(expansionContentMod.STUDY_AUTOMATON); tags.add(expansionContentMod.STUDY); - + cardsToPreview = new VoidCard(); baseDamage = DAMAGE; - this.exhaust = true; + this.exhaust = true; this.isMultiDamage = true; loadJokeCardImage(this, "HyperBeam.png"); } public void use(AbstractPlayer p, AbstractMonster m) { - atb(new SFXAction("ATTACK_HEAVY")); this.addToBot(new VFXAction(p, new MindblastEffect(p.hb.cX, p.hb.cY, p.flipHorizontal), 0.1F)); - atb(new WaitAction(0.1F)); - + addToBot(new MakeTempCardInDrawPileAction(new VoidCard(), 1, false, true)); allDmg(AbstractGameAction.AttackEffect.NONE); - atb(new ApplyPowerAction(p, p, new DeEnergizedPower(1), 1)); - - } public void upgrade() { diff --git a/src/main/java/expansioncontent/cards/InvincibleStrength.java b/src/main/java/expansioncontent/cards/InvincibleStrength.java index 4598554ef..49d7bec35 100644 --- a/src/main/java/expansioncontent/cards/InvincibleStrength.java +++ b/src/main/java/expansioncontent/cards/InvincibleStrength.java @@ -1,33 +1,31 @@ package expansioncontent.cards; - +import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.AbstractCreature; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.AbstractPower; import expansioncontent.expansionContentMod; import expansioncontent.powers.VexVinciblePower; -import static expansioncontent.expansionContentMod.loadJokeCardImage; - public class InvincibleStrength extends AbstractExpansionCard { - public final static String ID = makeID("InvincibleStrength"); + public static final String ID = makeID("InvincibleStrength"); public InvincibleStrength() { - super(ID, 2, CardType.POWER, CardRarity.UNCOMMON, CardTarget.SELF); - this.setBackgroundTexture("expansioncontentResources/images/512/bg_boss_heart.png", "expansioncontentResources/images/1024/bg_boss_heart.png"); - - tags.add(expansionContentMod.STUDY); - loadJokeCardImage(this, "InvincibleStrength.png"); + super(ID, 1, AbstractCard.CardType.POWER, AbstractCard.CardRarity.RARE, AbstractCard.CardTarget.SELF); + setBackgroundTexture("expansioncontentResources/images/512/bg_boss_heart.png", "expansioncontentResources/images/1024/bg_boss_heart.png"); + baseMagicNumber = magicNumber = 10; + expansionContentMod.loadJokeCardImage((AbstractCard)this, "InvincibleStrength.png"); } public void use(AbstractPlayer p, AbstractMonster m) { - applyToSelf(new VexVinciblePower(p, 1)); + applyToSelf((AbstractPower)new VexVinciblePower((AbstractCreature)p, 1, this.magicNumber, this.magicNumber)); } public void upgrade() { - if (!upgraded) { + if (!this.upgraded) { upgradeName(); - upgradeBaseCost(1); + upgradeMagicNumber(-5); } } } - diff --git a/src/main/java/expansioncontent/cards/LastStand.java b/src/main/java/expansioncontent/cards/LastStand.java index d1fddf5da..953cd35ea 100644 --- a/src/main/java/expansioncontent/cards/LastStand.java +++ b/src/main/java/expansioncontent/cards/LastStand.java @@ -21,11 +21,11 @@ public class LastStand extends AbstractExpansionCard { public final static String ID = makeID("LastStand"); - private static final int MAGIC = 8; - private static final int UPGRADE_MAGIC = 10; + private static final int MAGIC = 6; + private static final int UPGRADE_MAGIC = 3; public LastStand() { - super(ID, 2, CardType.POWER, CardRarity.UNCOMMON, CardTarget.SELF); + super(ID, 3, CardType.POWER, CardRarity.RARE, CardTarget.SELF); this.setBackgroundTexture("expansioncontentResources/images/512/bg_boss_champ.png", "expansioncontentResources/images/1024/bg_boss_champ.png"); tags.add(expansionContentMod.STUDY_CHAMP); @@ -48,27 +48,28 @@ public void use(AbstractPlayer p, AbstractMonster m) { atb(new ApplyPowerAction(p, p, new StrengthPower(p, 1), 1)); double currentPct = p.currentHealth * 1.001 / p.maxHealth * 1.001; - if (currentPct < 0.5) { - AbstractDungeon.effectList.add(new MegaSpeechBubble(p.hb.cX, p.hb.cY, 1.0F, Champ.DIALOG[6], true)); + // if (currentPct < 0.5) { + // AbstractDungeon.effectList.add(new MegaSpeechBubble(p.hb.cX, p.hb.cY, 1.0F, Champ.DIALOG[6], true)); atb(new VFXAction(p, new InflameEffect(p), 0.1F)); - atb(new ApplyPowerAction(p, p, new StrengthPower(p, 2), 2)); + atb(new ApplyPowerAction(p, p, new StrengthPower(p, magicNumber), magicNumber)); atb(new VFXAction(p, new InflameEffect(p), 0.1F)); - if (upgraded) atb(new HealAction(p, p, this.magicNumber)); - } + // if (upgraded) atb(new HealAction(p, p, this.magicNumber)); + // } } - @Override - public void triggerOnGlowCheck() { - this.glowColor = AbstractDungeon.player.currentHealth < AbstractDungeon.player.maxHealth / 2 ? GOLD_BORDER_GLOW_COLOR : BLUE_BORDER_GLOW_COLOR; - } + // @Override + // public void triggerOnGlowCheck() { + // this.glowColor = AbstractDungeon.player.currentHealth < AbstractDungeon.player.maxHealth / 2 ? GOLD_BORDER_GLOW_COLOR : BLUE_BORDER_GLOW_COLOR; + // } public void upgrade() { if (!upgraded) { upgradeName(); - rawDescription = UPGRADE_DESCRIPTION; - initializeDescription(); + upgradeMagicNumber(3); + // rawDescription = UPGRADE_DESCRIPTION; + // initializeDescription(); } } diff --git a/src/main/java/expansioncontent/cards/ManipulateTime.java b/src/main/java/expansioncontent/cards/ManipulateTime.java new file mode 100644 index 000000000..141172d8b --- /dev/null +++ b/src/main/java/expansioncontent/cards/ManipulateTime.java @@ -0,0 +1,37 @@ +package expansioncontent.cards; + + +import com.megacrit.cardcrawl.actions.unique.ForethoughtAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import expansioncontent.actions.ManipulateTimeAction; +import expansioncontent.expansionContentMod; + +import static expansioncontent.expansionContentMod.loadJokeCardImage; + +public class ManipulateTime extends AbstractExpansionCard { + public final static String ID = makeID("ManipulateTime"); + + public ManipulateTime() { + super(ID, 0, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); + //todo skill bg instead of power bg + this.setBackgroundTexture("expansioncontentResources/images/512/bg_boss_timeeater.png", "expansioncontentResources/images/1024/bg_boss_timeeater.png"); + loadJokeCardImage(this, "ManipulateTime.png"); + tags.add(expansionContentMod.STUDY_TIMEEATER); + tags.add(expansionContentMod.STUDY); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + this.addToTop(new ManipulateTimeAction(this.upgraded)); + } + + public void upgrade() { + if (!upgraded) { + upgradeName(); + this.rawDescription = UPGRADE_DESCRIPTION; + this.initializeDescription(); + } + } + +} + diff --git a/src/main/java/expansioncontent/cards/Pandemonium.java b/src/main/java/expansioncontent/cards/Pandemonium.java new file mode 100644 index 000000000..a91cf8504 --- /dev/null +++ b/src/main/java/expansioncontent/cards/Pandemonium.java @@ -0,0 +1,35 @@ +package expansioncontent.cards; + + +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.MayhemPower; +import expansioncontent.expansionContentMod; +import expansioncontent.powers.PandemoniumPower; +import expansioncontent.powers.VexVinciblePower; + +import static expansioncontent.expansionContentMod.loadJokeCardImage; + +public class Pandemonium extends AbstractExpansionCard { + public final static String ID = makeID("Pandemonium"); + + public Pandemonium() { + super(ID, 2, CardType.POWER, CardRarity.RARE, CardTarget.SELF); + baseMagicNumber = magicNumber = 1; + this.setBackgroundTexture("expansioncontentResources/images/512/bg_boss_power.png", "expansioncontentResources/images/1024/bg_boss_power.png"); + loadJokeCardImage(this, "Pandemonium.png"); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + this.addToBot(new ApplyPowerAction(p, p, new PandemoniumPower(p, this.magicNumber))); + } + + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeBaseCost(1); + } + } +} + diff --git a/src/main/java/expansioncontent/cards/PeekPages.java b/src/main/java/expansioncontent/cards/PeekPages.java new file mode 100644 index 000000000..5a2b60d5a --- /dev/null +++ b/src/main/java/expansioncontent/cards/PeekPages.java @@ -0,0 +1,52 @@ +package expansioncontent.cards; + +import automaton.AutomatonChar; +import champ.ChampChar; +import collector.CollectorChar; +import com.badlogic.gdx.Gdx; +import com.megacrit.cardcrawl.actions.common.MakeTempCardInDrawPileAction; +import com.megacrit.cardcrawl.actions.common.MakeTempCardInHandAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.tempCards.Insight; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.helpers.CardLibrary; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import downfall.util.SelectCardsCenteredAction; +import expansioncontent.actions.RandomCardWithTagAction; +import expansioncontent.expansionContentMod; +import guardian.characters.GuardianCharacter; +import slimebound.characters.SlimeboundCharacter; +import theHexaghost.TheHexaghost; + +import java.util.ArrayList; +import java.util.Collections; + +import static expansioncontent.expansionContentMod.loadJokeCardImage; + +public class PeekPages extends AbstractExpansionCard { + + public final static String ID = makeID("PeekPages"); + + public PeekPages() { + super(ID, 1, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); + this.setBackgroundTexture("expansioncontentResources/images/512/bg_boss_skill.png", "expansioncontentResources/images/1024/bg_boss_skill.png"); + this.baseMagicNumber = 3; + this.magicNumber = this.baseMagicNumber; + this.cardsToPreview = new Insight(); + this.exhaust = true; + loadJokeCardImage(this, "PeekPages.png"); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + this.addToBot(new MakeTempCardInDrawPileAction(this.cardsToPreview.makeStatEquivalentCopy(), magicNumber, false, true)); + + } + + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeMagicNumber(1); + } + } +} \ No newline at end of file diff --git a/src/main/java/expansioncontent/cards/PrepareCrush.java b/src/main/java/expansioncontent/cards/PrepareCrush.java deleted file mode 100644 index 45d55d290..000000000 --- a/src/main/java/expansioncontent/cards/PrepareCrush.java +++ /dev/null @@ -1,59 +0,0 @@ -package expansioncontent.cards; - - -import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; -import com.megacrit.cardcrawl.actions.common.GainBlockAction; -import com.megacrit.cardcrawl.actions.utility.ShakeScreenAction; -import com.megacrit.cardcrawl.characters.AbstractPlayer; -import com.megacrit.cardcrawl.dungeons.AbstractDungeon; -import com.megacrit.cardcrawl.helpers.ScreenShake; -import com.megacrit.cardcrawl.monsters.AbstractMonster; -import com.megacrit.cardcrawl.monsters.exordium.SlimeBoss; -import com.megacrit.cardcrawl.powers.EnergizedPower; -import com.megacrit.cardcrawl.vfx.MegaSpeechBubble; -import expansioncontent.expansionContentMod; -import slimebound.cards.SlimeCrush; -import slimebound.powers.NextTurnGainSlimeCrush; - -import static expansioncontent.expansionContentMod.loadJokeCardImage; - -public class PrepareCrush extends AbstractExpansionCard { - public final static String ID = makeID("PrepareCrush"); - - - private static final int BLOCK = 10; - private static final int UPGRADE_BLOCK = 5; - private static final int MAGIC = 3; - - public PrepareCrush() { - super(ID, 2, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); - this.setBackgroundTexture("expansioncontentResources/images/512/bg_boss_slime.png", "expansioncontentResources/images/1024/bg_boss_slime.png"); - - tags.add(expansionContentMod.STUDY_SLIMEBOSS); - tags.add(expansionContentMod.STUDY); - - baseBlock = BLOCK; - baseMagicNumber = magicNumber = MAGIC; - this.exhaust = true; - cardsToPreview = new SlimeCrush(); - loadJokeCardImage(this, "PrepareCrush.png"); - } - - public void use(AbstractPlayer p, AbstractMonster m) { - AbstractDungeon.effectList.add(new MegaSpeechBubble(p.hb.cX, p.hb.cY, 1.0F, SlimeBoss.DIALOG[0], true)); - atb(new ShakeScreenAction(0.3F, ScreenShake.ShakeDur.MED, ScreenShake.ShakeIntensity.LOW)); - - atb(new GainBlockAction(p, p, this.block)); - atb(new ApplyPowerAction(p, p, new EnergizedPower(p, magicNumber), magicNumber)); - atb(new ApplyPowerAction(p, p, new NextTurnGainSlimeCrush(p, p, 1, false), 1)); - } - - public void upgrade() { - if (!upgraded) { - upgradeName(); - upgradeBlock(UPGRADE_BLOCK); - initializeDescription(); - } - } - -} diff --git a/src/main/java/expansioncontent/cards/QuickStudy.java b/src/main/java/expansioncontent/cards/QuickStudy.java index 2786c0013..a5dfea6f1 100644 --- a/src/main/java/expansioncontent/cards/QuickStudy.java +++ b/src/main/java/expansioncontent/cards/QuickStudy.java @@ -1,6 +1,7 @@ package expansioncontent.cards; import automaton.AutomatonChar; +import awakenedOne.AwakenedOneChar; import champ.ChampChar; import collector.CollectorChar; import com.badlogic.gdx.Gdx; @@ -20,7 +21,7 @@ import java.util.ArrayList; import java.util.Collections; -import static expansioncontent.expansionContentMod.loadJokeCardImage; +import static expansioncontent.expansionContentMod.*; public class QuickStudy extends AbstractExpansionCard { @@ -31,30 +32,41 @@ private ArrayList getList() { for (AbstractCard q : CardLibrary.getAllCards()) { if (q.rarity != CardRarity.SPECIAL && q.hasTag(expansionContentMod.STUDY)) { + if(q.hasTag(CardTags.HEALING)){continue;} + if (AbstractDungeon.player instanceof SlimeboundCharacter) { - if(q.cardID.equals(PrepareCrush.ID)){continue;} + if(q.hasTag(STUDY_SLIMEBOSS)){continue;} } + if (AbstractDungeon.player instanceof TheHexaghost ) { - if(q.cardID.equals(Hexaburn.ID)){continue;} + if(q.hasTag(STUDY_HEXAGHOST)){continue;} } + if (AbstractDungeon.player instanceof GuardianCharacter ) { - if(q.cardID.equals(GuardianWhirl.ID)){continue;} + if(q.hasTag(STUDY_GUARDIAN)){continue;} } + if (AbstractDungeon.player instanceof ChampChar ) { - if(q.cardID.equals(LastStand.ID)){continue;} + if(q.hasTag(STUDY_CHAMP)){continue;} } + if (AbstractDungeon.player instanceof AutomatonChar ) { - if(q.cardID.equals(HyperBeam.ID)){continue;} + if(q.hasTag(STUDY_AUTOMATON)){continue;} } + if (AbstractDungeon.player instanceof CollectorChar ) { - if(q.cardID.equals(YouAreMine.ID)){continue;} + if(q.hasTag(STUDY_COLLECTOR)){continue;} + } + + if (AbstractDungeon.player instanceof AwakenedOneChar) { + if(q.hasTag(STUDY_AWAKENEDONE)){continue;} } AbstractCard r = q.makeCopy(); if (upgraded) { r.upgrade(); } - r.modifyCostForCombat(-99); + r.freeToPlayOnce = true; myList.add(r); } } @@ -70,6 +82,7 @@ public QuickStudy() { this.setBackgroundTexture("expansioncontentResources/images/512/bg_boss_skill.png", "expansioncontentResources/images/1024/bg_boss_skill.png"); this.exhaust = true; loadJokeCardImage(this, "QuickStudy.png"); + //this.tags.add(expansionContentMod.STUDY); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/expansioncontent/cards/Reverie.java b/src/main/java/expansioncontent/cards/Reverie.java new file mode 100644 index 000000000..28d39413c --- /dev/null +++ b/src/main/java/expansioncontent/cards/Reverie.java @@ -0,0 +1,42 @@ +package expansioncontent.cards; + + +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.StrengthPower; +import expansioncontent.expansionContentMod; +import expansioncontent.powers.ChronoBoostPower; +import expansioncontent.powers.ReveriePower; + +import static expansioncontent.expansionContentMod.loadJokeCardImage; + + +public class Reverie extends AbstractExpansionCard { + public final static String ID = makeID("Reverie"); + + private static final int MAGIC = 3; + + public Reverie() { + super(ID, 2, CardType.POWER, CardRarity.RARE, CardTarget.SELF); + tags.add(expansionContentMod.STUDY_TIMEEATER); + tags.add(expansionContentMod.STUDY); + baseMagicNumber = magicNumber = MAGIC; + this.setBackgroundTexture("expansioncontentResources/images/512/bg_boss_timeeater.png", "expansioncontentResources/images/1024/bg_boss_timeeater.png"); + loadJokeCardImage(this, "Reverie.png"); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + atb(new ApplyPowerAction(p, p, new ReveriePower(p, magicNumber), magicNumber)); + } + + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeMagicNumber(2); + } + } + +} + + diff --git a/src/main/java/expansioncontent/cards/ShapePower.java b/src/main/java/expansioncontent/cards/ShapePower.java index 4c6a48963..634845a59 100644 --- a/src/main/java/expansioncontent/cards/ShapePower.java +++ b/src/main/java/expansioncontent/cards/ShapePower.java @@ -15,7 +15,7 @@ import java.util.ArrayList; -public class ShapePower extends AbstractExpansionCard implements OctopusCard { +public class ShapePower extends AbstractExpansionCard { public final static String ID = makeID("ShapePower"); public ShapePower() { @@ -24,37 +24,18 @@ public ShapePower() { tags.add(expansionContentMod.STUDY_SHAPES); tags.add(expansionContentMod.STUDY); baseMagicNumber = magicNumber = 2; - baseDownfallMagic = downfallMagic = 5; + baseDownfallMagic = downfallMagic = 4; loadJokeCardImage(this, "ShapePower.png"); } public void use(AbstractPlayer p, AbstractMonster m) { - atb(new OctoChoiceAction(m, this)); - } - - public ArrayList choiceList() { - ArrayList cardList = new ArrayList<>(); - cardList.add(new OctoChoiceCard("expansioncontent:PolyBeam", EXTENDED_DESCRIPTION[0], "expansioncontentResources/images/cards/PolyBeam.png", EXTENDED_DESCRIPTION[1], -1, -1, magicNumber, CardType.POWER)); - cardList.add(new OctoChoiceCard("expansioncontent:DecaShield", EXTENDED_DESCRIPTION[2], "expansioncontentResources/images/cards/DecaShield.png", EXTENDED_DESCRIPTION[3], -1, -1, downfallMagic, CardType.POWER)); - return cardList; - } - - public void doChoiceStuff(AbstractMonster m, OctoChoiceCard card) { - AbstractPlayer p = AbstractDungeon.player; - switch (card.cardID) { - case "expansioncontent:PolyBeam": { - atb(new ApplyPowerAction(p, p, new StrengthPower(p, magicNumber), magicNumber)); - break; - } - case "expansioncontent:DecaShield": { - atb(new ApplyPowerAction(p, p, new PlatedArmorPower(p, downfallMagic))); - } - } + atb(new ApplyPowerAction(p, p, new StrengthPower(p, magicNumber), magicNumber)); + atb(new ApplyPowerAction(p, p, new PlatedArmorPower(p, downfallMagic))); } @Override public void upp() { upgradeMagicNumber(1); - upgradeDownfall(3); + upgradeDownfall(1); } } \ No newline at end of file diff --git a/src/main/java/expansioncontent/cards/StudyTheSpire.java b/src/main/java/expansioncontent/cards/StudyTheSpire.java index 891627f6f..5b9b493b8 100644 --- a/src/main/java/expansioncontent/cards/StudyTheSpire.java +++ b/src/main/java/expansioncontent/cards/StudyTheSpire.java @@ -2,6 +2,7 @@ import automaton.AutomatonChar; +import awakenedOne.AwakenedOneChar; import champ.ChampChar; import collector.CollectorChar; import com.badlogic.gdx.Gdx; @@ -34,22 +35,19 @@ private ArrayList getList() { if (q.rarity != CardRarity.SPECIAL && q.hasTag(expansionContentMod.STUDY)) { if (AbstractDungeon.player instanceof SlimeboundCharacter) { - if(q.cardID.equals(PrepareCrush.ID)){continue;} - } - if (AbstractDungeon.player instanceof TheHexaghost ) { - if(q.cardID.equals(Hexaburn.ID)){continue;} - } - if (AbstractDungeon.player instanceof GuardianCharacter ) { - if(q.cardID.equals(GuardianWhirl.ID)){continue;} - } - if (AbstractDungeon.player instanceof ChampChar ) { - if(q.cardID.equals(LastStand.ID)){continue;} - } - if (AbstractDungeon.player instanceof AutomatonChar ) { - if(q.cardID.equals(HyperBeam.ID)){continue;} - } - if (AbstractDungeon.player instanceof CollectorChar ) { - if(q.cardID.equals(YouAreMine.ID)){continue;} + if (q.hasTag(expansionContentMod.STUDY_SLIMEBOSS)){continue;} + } else if (AbstractDungeon.player instanceof TheHexaghost) { + if(q.hasTag(expansionContentMod.STUDY_HEXAGHOST)){continue;} + } else if (AbstractDungeon.player instanceof GuardianCharacter) { + if(q.hasTag(expansionContentMod.STUDY_GUARDIAN)){continue;} + } else if (AbstractDungeon.player instanceof ChampChar) { + if(q.hasTag(expansionContentMod.STUDY_CHAMP)){continue;} + } else if (AbstractDungeon.player instanceof AutomatonChar) { + if(q.hasTag(expansionContentMod.STUDY_AUTOMATON)){continue;} + } else if (AbstractDungeon.player instanceof CollectorChar) { + if(q.hasTag(expansionContentMod.STUDY_COLLECTOR)){continue;} + } else if (AbstractDungeon.player instanceof AwakenedOneChar) { + if(q.hasTag(expansionContentMod.STUDY_AWAKENEDONE)){continue;} } AbstractCard r = q.makeCopy(); diff --git a/src/main/java/expansioncontent/cards/SuperBloodthirst.java b/src/main/java/expansioncontent/cards/SuperBloodthirst.java new file mode 100644 index 000000000..17447dddb --- /dev/null +++ b/src/main/java/expansioncontent/cards/SuperBloodthirst.java @@ -0,0 +1,64 @@ +package expansioncontent.cards; + + +import com.badlogic.gdx.graphics.Color; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.ObtainPotionAction; +import com.megacrit.cardcrawl.actions.unique.GreedAction; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.vfx.StarBounceEffect; +import com.megacrit.cardcrawl.vfx.combat.ViolentAttackEffect; +import expansioncontent.actions.BloodthirstAction; +import expansioncontent.expansionContentMod; +import expansioncontent.powers.AwakenDeathPower; + +import static expansioncontent.expansionContentMod.loadJokeCardImage; + + +public class SuperBloodthirst extends AbstractExpansionCard { + public final static String ID = makeID("SuperBloodthirst"); + + private static final int DAMAGE = 20; + private static final int UPGRADE_DAMAGE = 5; + + public SuperBloodthirst() { + super(ID, 2, CardType.ATTACK, CardRarity.RARE, CardTarget.ENEMY); + tags.add(expansionContentMod.STUDY); + tags.add(expansionContentMod.STUDY_AWAKENEDONE); + //todo attack bg instead of power bg + this.setBackgroundTexture("expansioncontentResources/images/512/bg_boss_awakenedone.png", "expansioncontentResources/images/1024/bg_boss_awakenedone.png"); + this.baseDamage = DAMAGE; + tags.add(CardTags.HEALING); + loadJokeCardImage(this, "SuperBloodthirst.png"); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + int i; + if (Settings.FAST_MODE) { + this.addToTop(new VFXAction(new ViolentAttackEffect(m.hb.cX, m.hb.cY, Color.RED))); + + for(i = 0; i < 5; ++i) { + this.addToTop(new VFXAction(new StarBounceEffect(m.hb.cX, m.hb.cY))); + } + } else { + this.addToTop(new VFXAction(new ViolentAttackEffect(m.hb.cX, m.hb.cY, Color.RED), 0.4F)); + + for(i = 0; i < 5; ++i) { + this.addToTop(new VFXAction(new StarBounceEffect(m.hb.cX, m.hb.cY))); + } + } + this.addToBot(new BloodthirstAction(m, new DamageInfo(p, this.damage, this.damageTypeForTurn), this.uuid, false)); + } + + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + this.upgradeDamage(UPGRADE_DAMAGE); + } + } +} \ No newline at end of file diff --git a/src/main/java/expansioncontent/cards/SuperBodyCrash.java b/src/main/java/expansioncontent/cards/SuperBodyCrash.java new file mode 100644 index 000000000..04b989ee5 --- /dev/null +++ b/src/main/java/expansioncontent/cards/SuperBodyCrash.java @@ -0,0 +1,58 @@ +package expansioncontent.cards; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.DamageAction; +import com.megacrit.cardcrawl.actions.common.GainBlockAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import expansioncontent.expansionContentMod; +import guardian.GuardianMod; +import guardian.cards.BodySlam; + +import static guardian.GuardianMod.makeBetaCardPath; + +public class SuperBodyCrash extends AbstractExpansionCard { + public static final String ID = makeID("SuperBodyCrash"); + + private static final int BLOCK = 7; + + public SuperBodyCrash() { + super(ID, 1, AbstractCard.CardType.ATTACK, AbstractCard.CardRarity.RARE, AbstractCard.CardTarget.ENEMY); + setBackgroundTexture("expansioncontentResources/images/512/bg_boss_guardian.png", "expansioncontentResources/images/1024/bg_boss_guardian.png"); + expansionContentMod.loadJokeCardImage((AbstractCard)this, "SuperBodyCrash.png"); + this.baseBlock = 6; + this.tags.add(expansionContentMod.STUDY_GUARDIAN); + this.tags.add(expansionContentMod.STUDY); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + calculateCardDamage(m); + this.baseDamage = p.currentBlock + this.block; + calculateCardDamage(m); + addToBot((AbstractGameAction)new GainBlockAction((AbstractCreature)p, this.block)); + addToBot((AbstractGameAction)new DamageAction((AbstractCreature)m, new DamageInfo((AbstractCreature)p, this.damage, DamageInfo.DamageType.NORMAL), AbstractGameAction.AttackEffect.BLUNT_HEAVY)); + this.rawDescription = this.DESCRIPTION; + initializeDescription(); + + } + + public void applyPowers() { + super.applyPowers(); + this.baseDamage = AbstractDungeon.player.currentBlock + this.block; + super.applyPowers(); + this.rawDescription = this.DESCRIPTION; + this.rawDescription += BodySlam.UPGRADED_DESCRIPTION; + initializeDescription(); + } + + public void upgrade() { + if (!this.upgraded) { + upgradeName(); + upgradeBaseCost(0); + } + } +} diff --git a/src/main/java/expansioncontent/cards/SuperClobber.java b/src/main/java/expansioncontent/cards/SuperClobber.java new file mode 100644 index 000000000..6fe496bce --- /dev/null +++ b/src/main/java/expansioncontent/cards/SuperClobber.java @@ -0,0 +1,61 @@ +package expansioncontent.cards; + + +import champ.ChampMod; +import champ.relics.PowerArmor; +import com.badlogic.gdx.math.MathUtils; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.animations.TalkAction; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.DamageAction; +import com.megacrit.cardcrawl.actions.common.RemoveAllBlockAction; +import com.megacrit.cardcrawl.actions.utility.SFXAction; +import com.megacrit.cardcrawl.actions.watcher.WallopAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.monsters.city.Champ; +import com.megacrit.cardcrawl.powers.VulnerablePower; +import com.megacrit.cardcrawl.powers.watcher.VigorPower; +import downfall.util.CardIgnore; +import expansioncontent.expansionContentMod; + +import java.util.ArrayList; + +import static expansioncontent.expansionContentMod.loadJokeCardImage; + +public class SuperClobber extends AbstractExpansionCard { + + //Super Clobber + public final static String ID = makeID("SuperClobber"); + + private static final int DAMAGE = 6; + + public SuperClobber() { + super(ID, 1, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); + baseDamage = DAMAGE; + tags.add(CardTags.STRIKE); + //todo attack bg instead of power bg + this.setBackgroundTexture("expansioncontentResources/images/512/bg_boss_champ.png", "expansioncontentResources/images/1024/bg_boss_champ.png"); + + tags.add(expansionContentMod.STUDY_CHAMP); + tags.add(expansionContentMod.STUDY); + + expansionContentMod.loadJokeCardImage((AbstractCard)this, "SuperClobber.png"); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + atb(new WallopAction(m, makeInfo())); + } + + + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeDamage(3); + } + } + +} diff --git a/src/main/java/expansioncontent/cards/SuperEtherStep.java b/src/main/java/expansioncontent/cards/SuperEtherStep.java new file mode 100644 index 000000000..be033e103 --- /dev/null +++ b/src/main/java/expansioncontent/cards/SuperEtherStep.java @@ -0,0 +1,60 @@ +package expansioncontent.cards; + + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.DrawCardAction; +import com.megacrit.cardcrawl.actions.common.ExhaustAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.BlurPower; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.DrawCardAction; +import com.megacrit.cardcrawl.actions.common.ExhaustAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import downfall.downfallMod; +import theHexaghost.HexaMod; +import theHexaghost.util.HexaPurpleTextInterface; +import downfall.downfallMod; +import expansioncontent.expansionContentMod; +import theHexaghost.HexaMod; + +public class SuperEtherStep extends AbstractExpansionCard { + public final static String ID = makeID("SuperEtherStep"); + + private static final int DAMAGE = 10; + private static final int UPG_DAMAGE = 3; + + public SuperEtherStep() { + super(ID, 1, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); + //todo attack bg instead of power bg + this.setBackgroundTexture("expansioncontentResources/images/512/bg_boss_hexaghost.png", "expansioncontentResources/images/1024/bg_boss_hexaghost.png"); + tags.add(expansionContentMod.STUDY_HEXAGHOST); + tags.add(expansionContentMod.STUDY); + baseDamage = DAMAGE; + baseMagicNumber = magicNumber = 1; + //isEthereal = true; + //tags.add(HexaMod.AFTERLIFE); + expansionContentMod.loadJokeCardImage((AbstractCard)this, "EtherStep.png"); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + dmg(m, AbstractGameAction.AttackEffect.FIRE); + this.addToBot(new ExhaustAction(1, false)); + this.addToBot(new DrawCardAction(p, this.magicNumber)); + } + + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeDamage(UPG_DAMAGE); + upgradeMagicNumber(1); + rawDescription = UPGRADE_DESCRIPTION; + initializeDescription(); + } + } + +} diff --git a/src/main/java/expansioncontent/cards/SuperGhostShield.java b/src/main/java/expansioncontent/cards/SuperGhostShield.java new file mode 100644 index 000000000..3cfa3e2a1 --- /dev/null +++ b/src/main/java/expansioncontent/cards/SuperGhostShield.java @@ -0,0 +1,79 @@ +package expansioncontent.cards; + + +import com.megacrit.cardcrawl.actions.common.DrawCardAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.helpers.GameDictionary; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.BlurPower; +import downfall.downfallMod; +import expansioncontent.expansionContentMod; +import theHexaghost.HexaMod; + +public class SuperGhostShield extends AbstractExpansionCard { + public final static String ID = makeID("SuperGhostShield"); + + + private static final int BLOCK = 7; + private static final int UPG_BLOCK = 3; + private static final int MAGIC = 1; + + public SuperGhostShield() { + super(ID, 1, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); + //todo skill bg instead of power bg + this.setBackgroundTexture("expansioncontentResources/images/512/bg_boss_hexaghost.png", "expansioncontentResources/images/1024/bg_boss_hexaghost.png"); + tags.add(expansionContentMod.STUDY_HEXAGHOST); + tags.add(expansionContentMod.STUDY); + baseBlock = BLOCK; + isEthereal = true; + baseMagicNumber = magicNumber = MAGIC; + tags.add(HexaMod.AFTERLIFE); + expansionContentMod.loadJokeCardImage((AbstractCard)this, "GhostShield.png"); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + blck(); + applyToSelf(new BlurPower(AbstractDungeon.player, magicNumber)); + } + + @Override + public void afterlife() { + blck(); + applyToSelf(new BlurPower(AbstractDungeon.player, magicNumber)); + } + + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeBlock(UPG_BLOCK); + } + } + // to still show afterlife tooltip. because the format [purple]hexamod:afterlife[] doesnt get displayed correctly + // we are only using [purple]afterlife[] here for easier text comprehension for new players, but doing this + // means we dont have the keyword tooltip so we need to manually add it + // but after I tried adding it in the constrcutor it turns out sometimes who knows why it wont be added + // and this way seems to work + @Override + public void initializeDescription() { + super.initializeDescription(); + String afterlife_name = downfallMod.keywords_and_proper_names.get("afterlife"); + this.keywords.add(afterlife_name); + + this.keywords.add(GameDictionary.BLOCK.NAMES[0].toLowerCase()); + + if (Settings.language == Settings.GameLanguage.JPN) { + this.keywords.add("ブラー"); + } + + if (Settings.language != Settings.GameLanguage.JPN) { + String blur_name = downfallMod.keywords_and_proper_names.get("blur"); + this.keywords.add(blur_name); + } + + } + } + + diff --git a/src/main/java/expansioncontent/cards/SuperLivingWall.java b/src/main/java/expansioncontent/cards/SuperLivingWall.java new file mode 100644 index 000000000..bd7c1a348 --- /dev/null +++ b/src/main/java/expansioncontent/cards/SuperLivingWall.java @@ -0,0 +1,130 @@ +package expansioncontent.cards; + + +import champ.ChampMod; +import champ.relics.PowerArmor; +import com.badlogic.gdx.math.MathUtils; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.animations.TalkAction; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.DamageAction; +import com.megacrit.cardcrawl.actions.common.RemoveAllBlockAction; +import com.megacrit.cardcrawl.actions.utility.SFXAction; +import com.megacrit.cardcrawl.actions.watcher.WallopAction; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.CardStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.monsters.city.Champ; +import com.megacrit.cardcrawl.powers.VulnerablePower; +import com.megacrit.cardcrawl.powers.watcher.VigorPower; +import downfall.util.CardIgnore; +import com.badlogic.gdx.graphics.Color; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.CardStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import slimebound.SlimeboundMod; +import slimebound.patches.AbstractCardEnum; +import slimebound.powers.SlimedThornsPower; +import slimebound.vfx.FakeFlashAtkImgEffect; +import slimebound.vfx.SlimeDripsEffectPurple; +import slimebound.vfx.SlimeProjectileEffect; +import expansioncontent.expansionContentMod; +import slimebound.vfx.FakeFlashAtkImgEffect; +import slimebound.vfx.SlimeProjectileEffect; + +import java.util.ArrayList; + +import static expansioncontent.expansionContentMod.loadJokeCardImage; + +public class SuperLivingWall extends AbstractExpansionCard { + + public static final String ID = "expansioncontent:SuperLivingWall"; + public static final String NAME; + public static final String DESCRIPTION; + public static final String IMG_PATH = "cards/slimewave.png"; + private static final CardType TYPE = CardType.SKILL; + private static final CardRarity RARITY = CardRarity.COMMON; + private static final CardTarget TARGET = CardTarget.SELF; + private static final CardStrings cardStrings; + private static final int COST = 2; + private static final int MAGIC = 6; + private static final int UPGRADE_BONUS = 3; + public static String UPGRADED_DESCRIPTION; + + static { + cardStrings = CardCrawlGame.languagePack.getCardStrings(ID); + NAME = cardStrings.NAME; + DESCRIPTION = cardStrings.DESCRIPTION; + UPGRADED_DESCRIPTION = cardStrings.UPGRADE_DESCRIPTION; + + } + + + public SuperLivingWall() { + super(ID, 2, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); + this.setBackgroundTexture("expansioncontentResources/images/512/bg_boss_slime.png", "expansioncontentResources/images/1024/bg_boss_slime.png"); + expansionContentMod.loadJokeCardImage((AbstractCard)this, "LivingWall.png"); + tags.add(expansionContentMod.STUDY_SLIMEBOSS); + tags.add(expansionContentMod.STUDY); + + this.baseBlock = 14; + baseMagicNumber = magicNumber = MAGIC; + } + + public void use(AbstractPlayer p, AbstractMonster m) { + AbstractDungeon.actionManager.addToBottom(new VFXAction(new SlimeProjectileEffect(p.hb.cX, p.hb.cY, p.hb.cX + 275 * Settings.scale, p.hb.cY - 40 * Settings.scale, 2F, false, 0.6F, false, false), 0.0F)); + AbstractDungeon.actionManager.addToBottom(new VFXAction(new SlimeProjectileEffect(p.hb.cX, p.hb.cY, p.hb.cX + 275 * Settings.scale, p.hb.cY, 2F, false, 0.6F, true, false), 0.0F)); + AbstractDungeon.actionManager.addToBottom(new VFXAction(new SlimeProjectileEffect(p.hb.cX, p.hb.cY, p.hb.cX + 275 * Settings.scale, p.hb.cY + 40 * Settings.scale, 2F, false, 0.6F, true, false), 0.0F)); + AbstractDungeon.actionManager.addToBottom(new VFXAction(new SlimeProjectileEffect(p.hb.cX, p.hb.cY, p.hb.cX + 275 * Settings.scale, p.hb.cY + 80 * Settings.scale, 2F, false, 0.6F, true, false), 0.0F)); + AbstractDungeon.actionManager.addToBottom(new VFXAction(new SlimeProjectileEffect(p.hb.cX, p.hb.cY, p.hb.cX + 275 * Settings.scale, p.hb.cY + 120 * Settings.scale, 2F, false, 0.6F, true, false), 0.325F)); + + AbstractDungeon.actionManager.addToBottom(new VFXAction(new FakeFlashAtkImgEffect(p.hb.cX + 275 * Settings.scale, p.hb.cY - 30 * Settings.scale, Color.PURPLE, 1F, true, .4F), 0.0F)); + AbstractDungeon.actionManager.addToBottom(new VFXAction(new FakeFlashAtkImgEffect(p.hb.cX + 275 * Settings.scale, p.hb.cY, Color.PURPLE, 1F, false, .4F), 0.0F)); + AbstractDungeon.actionManager.addToBottom(new VFXAction(new FakeFlashAtkImgEffect(p.hb.cX + 275 * Settings.scale, p.hb.cY + 50 * Settings.scale, Color.PURPLE, 1F, false, .4F), 0.0F)); + AbstractDungeon.actionManager.addToBottom(new VFXAction(new FakeFlashAtkImgEffect(p.hb.cX + 275 * Settings.scale, p.hb.cY + 90 * Settings.scale, Color.PURPLE, 1F, false, .4F), 0.0F)); + AbstractDungeon.actionManager.addToBottom(new VFXAction(new FakeFlashAtkImgEffect(p.hb.cX + 275 * Settings.scale, p.hb.cY + 130 * Settings.scale, Color.PURPLE, 1F, false, .4F), 0.1F)); + AbstractDungeon.actionManager.addToBottom(new VFXAction(new SlimeDripsEffectPurple(p.hb.cX + 290 * Settings.scale, p.hb.cY - 40 * Settings.scale, 4), 0.0f)); + AbstractDungeon.actionManager.addToBottom(new VFXAction(new SlimeDripsEffectPurple(p.hb.cX + 290 * Settings.scale, p.hb.cY * Settings.scale, 4), 0.0f)); + AbstractDungeon.actionManager.addToBottom(new VFXAction(new SlimeDripsEffectPurple(p.hb.cX + 290 * Settings.scale, p.hb.cY + 40 * Settings.scale, 4), 0.0f)); + AbstractDungeon.actionManager.addToBottom(new VFXAction(new SlimeDripsEffectPurple(p.hb.cX + 290 * Settings.scale, p.hb.cY + 80 * Settings.scale, 4), 0.0f)); + AbstractDungeon.actionManager.addToBottom(new VFXAction(new SlimeDripsEffectPurple(p.hb.cX + 290 * Settings.scale, p.hb.cY + 120 * Settings.scale, 4), 0.0f)); + AbstractDungeon.actionManager.addToBottom(new VFXAction(new SlimeDripsEffectPurple(p.hb.cX + 310 * Settings.scale, p.hb.cY - 30 * Settings.scale, 4), 0.0f)); + AbstractDungeon.actionManager.addToBottom(new VFXAction(new SlimeDripsEffectPurple(p.hb.cX + 310 * Settings.scale, p.hb.cY + 10 * Settings.scale, 4), 0.0f)); + AbstractDungeon.actionManager.addToBottom(new VFXAction(new SlimeDripsEffectPurple(p.hb.cX + 310 * Settings.scale, p.hb.cY + 50 * Settings.scale, 4), 0.0f)); + AbstractDungeon.actionManager.addToBottom(new VFXAction(new SlimeDripsEffectPurple(p.hb.cX + 310 * Settings.scale, p.hb.cY + 80 * Settings.scale, 4), 0.0f)); + AbstractDungeon.actionManager.addToBottom(new VFXAction(new SlimeDripsEffectPurple(p.hb.cX + 310 * Settings.scale, p.hb.cY + 130 * Settings.scale, 4), 0.0f)); + + AbstractDungeon.actionManager.addToBottom(new com.megacrit.cardcrawl.actions.common.GainBlockAction(p, p, this.block)); + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, new SlimedThornsPower(p, p, this.magicNumber), this.magicNumber)); + + } + + public AbstractCard makeCopy() { + + return new SuperLivingWall(); + + } + + public void upgrade() { + + if (!this.upgraded) { + + upgradeName(); + + upgradeMagicNumber(2); + upgradeBlock(4); + } + + } +} + + diff --git a/src/main/java/expansioncontent/cards/SuperPrepareCrush.java b/src/main/java/expansioncontent/cards/SuperPrepareCrush.java new file mode 100644 index 000000000..c67fbfbca --- /dev/null +++ b/src/main/java/expansioncontent/cards/SuperPrepareCrush.java @@ -0,0 +1,68 @@ +package expansioncontent.cards; + + +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.utility.ShakeScreenAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.helpers.ScreenShake; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.vfx.MegaSpeechBubble; +import expansioncontent.expansionContentMod; +import slimebound.cards.SlimeCrush; +import slimebound.powers.EnergizedSlimeboundPower; +import slimebound.powers.NextTurnGainSlimeCrush; +import slimebound.powers.NextTurnGainStrengthPower; + +import static expansioncontent.expansionContentMod.loadJokeCardImage; + +public class SuperPrepareCrush extends AbstractExpansionCard { + public final static String ID = makeID("SuperPrepareCrush"); + + + private static final int BLOCK = 10; + private static final int UPGRADE_BLOCK = 5; + private static final int MAGIC = 3; + + public SuperPrepareCrush() { + super(ID, 2, CardType.SKILL, CardRarity.RARE, CardTarget.SELF); + this.setBackgroundTexture("expansioncontentResources/images/512/bg_boss_slime.png", "expansioncontentResources/images/1024/bg_boss_slime.png"); + + tags.add(expansionContentMod.STUDY_SLIMEBOSS); + tags.add(expansionContentMod.STUDY); + this.exhaust = true; + this.cardsToPreview = new SlimeCrush(); + this.magicNumber = this.baseMagicNumber = 3; + cardsToPreview = new SlimeCrush(); + loadJokeCardImage(this, "SuperPrepareCrush.png"); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + AbstractDungeon.effectList.add(new MegaSpeechBubble(p.hb.cX, p.hb.cY, 1.0F, EXTENDED_DESCRIPTION[0], true)); + AbstractDungeon.actionManager.addToBottom(new ShakeScreenAction(0.3F, ScreenShake.ShakeDur.MED, ScreenShake.ShakeIntensity.LOW)); + + if (upgraded) + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, new EnergizedSlimeboundPower(p, p, 4), 4)); + else + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, new EnergizedSlimeboundPower(p, p, 3), 3)); + + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, new NextTurnGainStrengthPower(p, p, this.magicNumber), this.magicNumber)); + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, new NextTurnGainSlimeCrush(p, p, 1, this.upgraded), 1)); + } + + public void upgrade() { + if (!this.upgraded) { + upgradeName(); + AbstractCard q = new SlimeCrush(); + q.upgrade(); + cardsToPreview = q; + this.setBackgroundTexture("expansioncontentResources/images/512/bg_boss_slime.png", "expansioncontentResources/images/1024/bg_boss_slime.png"); + upgradeMagicNumber(2); + this.rawDescription = UPGRADE_DESCRIPTION; + this.initializeDescription(); + } + } +} + + diff --git a/src/main/java/expansioncontent/cards/SuperSomberShield.java b/src/main/java/expansioncontent/cards/SuperSomberShield.java new file mode 100644 index 000000000..ad76ad3f4 --- /dev/null +++ b/src/main/java/expansioncontent/cards/SuperSomberShield.java @@ -0,0 +1,69 @@ +package expansioncontent.cards; + + +import champ.ChampMod; +import champ.relics.PowerArmor; +import collector.cards.AbstractCollectorCard; +import collector.cards.OnPyreCard; +import collector.cards.SomberShield; +import collector.powers.AddCopyNextTurnPower; +import com.badlogic.gdx.math.MathUtils; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.animations.TalkAction; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.DamageAction; +import com.megacrit.cardcrawl.actions.common.RemoveAllBlockAction; +import com.megacrit.cardcrawl.actions.utility.SFXAction; +import com.megacrit.cardcrawl.actions.watcher.WallopAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.monsters.city.Champ; +import com.megacrit.cardcrawl.powers.VulnerablePower; +import com.megacrit.cardcrawl.powers.watcher.VigorPower; +import downfall.util.CardIgnore; +import expansioncontent.expansionContentMod; + +import java.util.ArrayList; + +import static expansioncontent.cards.AbstractExpansionCard.makeID; +import static expansioncontent.expansionContentMod.loadJokeCardImage; +import static hermit.util.Wiz.applyToSelfTop; + +import collector.powers.AddCopyNextTurnPower; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + + +public class SuperSomberShield extends AbstractExpansionCard implements OnPyreCard { + public final static String ID = makeID(SuperSomberShield.class.getSimpleName()); + // intellij stuff skill, self, common, , , 7, 3, , + + public SuperSomberShield() { + super(ID, 1, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); + baseBlock = 9; + this.setBackgroundTexture("expansioncontentResources/images/512/bg_boss_collector.png", "expansioncontentResources/images/1024/bg_boss_collector.png"); + + tags.add(expansionContentMod.STUDY_COLLECTOR); + tags.add(expansionContentMod.STUDY); + + isPyre(); + expansionContentMod.loadJokeCardImage((AbstractCard)this, "SuperSomberShield.png"); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + blck(); + } + + @Override + public void onPyred(AbstractCard card) { + applyToSelfTop(new AddCopyNextTurnPower(card)); + } + + public void upp() { + upgradeBlock(3); + } +} \ No newline at end of file diff --git a/src/main/java/expansioncontent/cards/SuperWhirlingFlame.java b/src/main/java/expansioncontent/cards/SuperWhirlingFlame.java new file mode 100644 index 000000000..c3c1b2d35 --- /dev/null +++ b/src/main/java/expansioncontent/cards/SuperWhirlingFlame.java @@ -0,0 +1,66 @@ +package expansioncontent.cards; + + +import champ.ChampMod; +import champ.relics.PowerArmor; +import collector.cards.AbstractCollectorCard; +import collector.cards.OnPyreCard; +import collector.cards.SomberShield; +import collector.powers.AddCopyNextTurnPower; +import com.badlogic.gdx.math.MathUtils; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.animations.TalkAction; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.DamageAction; +import com.megacrit.cardcrawl.actions.common.RemoveAllBlockAction; +import com.megacrit.cardcrawl.actions.unique.DiscardPileToTopOfDeckAction; +import com.megacrit.cardcrawl.actions.utility.SFXAction; +import com.megacrit.cardcrawl.actions.watcher.WallopAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.monsters.city.Champ; +import com.megacrit.cardcrawl.powers.VulnerablePower; +import com.megacrit.cardcrawl.powers.watcher.VigorPower; +import downfall.util.CardIgnore; +import expansioncontent.expansionContentMod; + +import java.util.ArrayList; + +import static expansioncontent.cards.AbstractExpansionCard.makeID; +import static expansioncontent.expansionContentMod.loadJokeCardImage; +import static hermit.util.Wiz.applyToSelfTop; + +import collector.powers.AddCopyNextTurnPower; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + + +public class SuperWhirlingFlame extends AbstractExpansionCard { + public final static String ID = makeID(SuperWhirlingFlame.class.getSimpleName()); + // intellij stuff skill, self, common, , , 7, 3, , + + public SuperWhirlingFlame() { + super(ID, 1, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ALL_ENEMY); + baseDamage = 8; + isMultiDamage = true; + //todo attack bg instead of skill bg + this.setBackgroundTexture("expansioncontentResources/images/512/bg_boss_collector.png", "expansioncontentResources/images/1024/bg_boss_collector.png"); + + tags.add(expansionContentMod.STUDY_COLLECTOR); + tags.add(expansionContentMod.STUDY); + expansionContentMod.loadJokeCardImage((AbstractCard)this, "SuperWhirlingFlame.png"); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + allDmg(AbstractGameAction.AttackEffect.FIRE); + atb(new DiscardPileToTopOfDeckAction(p)); + } + + public void upp() { + upgradeDamage(3); + } +} \ No newline at end of file diff --git a/src/main/java/expansioncontent/cards/TakeFlight.java b/src/main/java/expansioncontent/cards/TakeFlight.java new file mode 100644 index 000000000..dbb375999 --- /dev/null +++ b/src/main/java/expansioncontent/cards/TakeFlight.java @@ -0,0 +1,86 @@ +package expansioncontent.cards; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.powers.RisingChantPower; +import awakenedOne.relics.CursedBlessing; +import awakenedOne.relics.WhiteRibbon; +import awakenedOne.util.Wiz; +import com.megacrit.cardcrawl.actions.common.HealAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.StrengthPower; +import expansioncontent.expansionContentMod; + +import static awakenedOne.AwakenedOneMod.ACTIVECHANT; +import static awakenedOne.AwakenedOneMod.CHANT; + +public class TakeFlight extends AbstractExpansionCard { + public static final String ID = makeID("TakeFlight"); + + private static final int BLOCK = 14; + + private static final int UPGRADE_BLOCK = 5; + + private static final int MAGIC = 1; + + public TakeFlight() { + super(ID, 1, AbstractCard.CardType.POWER, AbstractCard.CardRarity.UNCOMMON, AbstractCard.CardTarget.SELF); + this.tags.add(expansionContentMod.STUDY); + this.tags.add(expansionContentMod.STUDY_AWAKENEDONE); + setBackgroundTexture("expansioncontentResources/images/512/bg_boss_awakenedone.png", "expansioncontentResources/images/1024/bg_boss_awakenedone.png"); + this.baseMagicNumber = this.magicNumber = 6; + this.baseDownfallMagic = this.downfallMagic = 8; + tags.add(CardTags.HEALING); + this.tags.add(AwakenedOneMod.CHANT); + expansionContentMod.loadJokeCardImage((AbstractCard)this, "TakeFlight.png"); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + if (Wiz.isChantActive()) { + chant(); + } + if (!Wiz.isChantActive()) { + atb(new HealAction(p, p, magicNumber)); + } + } + + public void chant() { + atb(new HealAction(AbstractDungeon.player, AbstractDungeon.player, downfallMagic)); + + if (!this.hasTag(ACTIVECHANT) && this.hasTag(CHANT)) { + this.tags.add(ACTIVECHANT); + } + + if (AbstractDungeon.player.hasPower(RisingChantPower.POWER_ID)) { + applyToSelf(new StrengthPower(AbstractDungeon.player, AbstractDungeon.player.getPower(RisingChantPower.POWER_ID).amount)); + AbstractDungeon.player.getPower(RisingChantPower.POWER_ID).onSpecificTrigger(); + } + + if (AbstractDungeon.player.hasRelic(CursedBlessing.ID)) { + AbstractDungeon.player.getRelic(CursedBlessing.ID).onTrigger(); + } + if (AbstractDungeon.player.hasRelic(WhiteRibbon.ID)) { + AbstractDungeon.player.getRelic(WhiteRibbon.ID).onTrigger(); + } + + } + + public void triggerOnGlowCheck() { + if (!AbstractDungeon.actionManager.cardsPlayedThisCombat.isEmpty() && ((AbstractCard)AbstractDungeon.actionManager.cardsPlayedThisCombat.get(AbstractDungeon.actionManager.cardsPlayedThisCombat.size() - 1)).type == CardType.POWER) { + this.glowColor = AbstractCard.GOLD_BORDER_GLOW_COLOR.cpy(); + } else { + this.glowColor = AbstractCard.BLUE_BORDER_GLOW_COLOR.cpy(); + } + + } + + public void upgrade() { + if (!this.upgraded) { + upgradeName(); + upgradeMagicNumber(2); + upgradeDownfall(4); + } + } +} diff --git a/src/main/java/expansioncontent/cards/Virus.java b/src/main/java/expansioncontent/cards/Virus.java new file mode 100644 index 000000000..acbb5e5ff --- /dev/null +++ b/src/main/java/expansioncontent/cards/Virus.java @@ -0,0 +1,55 @@ +package expansioncontent.cards; + + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.ExhaustAction; +import com.megacrit.cardcrawl.actions.common.MakeTempCardInDrawPileAction; +import com.megacrit.cardcrawl.actions.utility.SFXAction; +import com.megacrit.cardcrawl.actions.utility.WaitAction; +import com.megacrit.cardcrawl.cards.status.VoidCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.vfx.combat.MindblastEffect; +import downfall.cards.MajorBeam; +import expansioncontent.actions.ExhaustVirusAction; +import expansioncontent.expansionContentMod; +import expansioncontent.powers.DeEnergizedPower; + +import static expansioncontent.expansionContentMod.loadJokeCardImage; + + +public class Virus extends AbstractExpansionCard { + public final static String ID = makeID("Virus"); + + + private static final int MAGIC = 5; + + public Virus() { + super(ID, 1, CardType.SKILL, CardRarity.RARE, CardTarget.SELF); + //todo skill bg instead of attack bg + this.setBackgroundTexture("expansioncontentResources/images/512/bg_boss_automaton.png", "expansioncontentResources/images/1024/bg_boss_automaton.png"); + + tags.add(expansionContentMod.STUDY_AUTOMATON); + tags.add(expansionContentMod.STUDY); + cardsToPreview = new MajorBeam(); + baseMagicNumber = MAGIC; + this.exhaust = true; + + loadJokeCardImage(this, "Virus.png"); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + this.addToBot(new ExhaustVirusAction(5, false, true, true)); + + } + + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeBaseCost(0); + } + } + +} diff --git a/src/main/java/expansioncontent/cards/YouAreMine.java b/src/main/java/expansioncontent/cards/YouAreMine.java index 83c98f32c..fb80250de 100644 --- a/src/main/java/expansioncontent/cards/YouAreMine.java +++ b/src/main/java/expansioncontent/cards/YouAreMine.java @@ -1,6 +1,7 @@ package expansioncontent.cards; +import collector.powers.DoomPower; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.animations.VFXAction; import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; @@ -13,6 +14,8 @@ import com.megacrit.cardcrawl.vfx.CollectorCurseEffect; import expansioncontent.expansionContentMod; +import static collector.util.Wiz.applyToEnemy; +import static collector.util.Wiz.forAllMonstersLiving; import static expansioncontent.expansionContentMod.loadJokeCardImage; public class YouAreMine extends AbstractExpansionCard { @@ -20,14 +23,17 @@ public class YouAreMine extends AbstractExpansionCard { private static final int MAGIC = 3; private static final int UPGRADE_MAGIC = 2; + private static final int downfallMagic = 6; + private static final int UPGRADE_downfallMagic = 4; public YouAreMine() { - super(ID, 2, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.ALL_ENEMY); + super(ID, 2, CardType.SKILL, CardRarity.RARE, CardTarget.ALL_ENEMY); this.setBackgroundTexture("expansioncontentResources/images/512/bg_boss_collector.png", "expansioncontentResources/images/1024/bg_boss_collector.png"); tags.add(expansionContentMod.STUDY_COLLECTOR); tags.add(expansionContentMod.STUDY); + baseDownfallMagic = downfallMagic; baseMagicNumber = magicNumber = MAGIC; this.exhaust = true; loadJokeCardImage(this, "YouAreMine.png"); @@ -41,24 +47,19 @@ public void use(AbstractPlayer p, AbstractMonster m) { for (AbstractMonster monster : AbstractDungeon.getMonsters().monsters) { if ((!monster.isDead) && (!monster.isDying) && !monster.halfDead) { atb(new VFXAction(new CollectorCurseEffect(monster.hb.cX, monster.hb.cY), .5F)); - atb(new RemoveAllBlockAction(monster, p)); - atb(new ApplyPowerAction(monster, p, new WeakPower(monster, this.magicNumber, false), this.magicNumber, true, AbstractGameAction.AttackEffect.NONE)); atb(new ApplyPowerAction(monster, p, new VulnerablePower(monster, this.magicNumber, false), this.magicNumber, true, AbstractGameAction.AttackEffect.NONE)); - - } + } + forAllMonstersLiving(q -> applyToEnemy(q, new DoomPower(q, 2*magicNumber))); } } - - - } - public void upgrade() { if (!upgraded) { upgradeName(); upgradeMagicNumber(UPGRADE_MAGIC); + upgradeDownfall(4); } } diff --git a/src/main/java/expansioncontent/cards/deprecated/ChargeUp.java b/src/main/java/expansioncontent/cards/deprecated/ChargeUp.java deleted file mode 100644 index aeb909b1b..000000000 --- a/src/main/java/expansioncontent/cards/deprecated/ChargeUp.java +++ /dev/null @@ -1,51 +0,0 @@ -package expansioncontent.cards.deprecated; - - -import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; -import com.megacrit.cardcrawl.actions.utility.SFXAction; -import com.megacrit.cardcrawl.characters.AbstractPlayer; -import com.megacrit.cardcrawl.monsters.AbstractMonster; -import com.megacrit.cardcrawl.powers.NextTurnBlockPower; -import downfall.util.CardIgnore; -import expansioncontent.expansionContentMod; -import expansioncontent.cards.AbstractExpansionCard; -import slimebound.powers.NextTurnGainStrengthPower; - -@CardIgnore -public class ChargeUp extends AbstractExpansionCard { - public final static String ID = makeID("ChargeUp"); - - private static final int BLOCK = 20; - private static final int UPGRADE_BLOCK = 10; - private static final int MAGIC = 2; - - public ChargeUp() { - super(ID, 2, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); - - tags.add(expansionContentMod.STUDY_GUARDIAN); - tags.add(expansionContentMod.STUDY); - - baseBlock = BLOCK; - baseMagicNumber = magicNumber = MAGIC; - this.exhaust = true; - } - - public void use(AbstractPlayer p, AbstractMonster m) { - - atb(new SFXAction("MONSTER_GUARDIAN_DESTROY")); - atb(new ApplyPowerAction(p, p, new NextTurnBlockPower(p, this.block), this.block)); - atb(new ApplyPowerAction(p, p, new NextTurnGainStrengthPower(p, p, this.magicNumber), this.magicNumber)); - - - } - - public void upgrade() { - if (!upgraded) { - upgradeName(); - upgradeBlock(UPGRADE_BLOCK); - } - } - -} - - diff --git a/src/main/java/expansioncontent/cards/deprecated/FaceSlap.java b/src/main/java/expansioncontent/cards/deprecated/FaceSlap.java deleted file mode 100644 index ce5133c7d..000000000 --- a/src/main/java/expansioncontent/cards/deprecated/FaceSlap.java +++ /dev/null @@ -1,54 +0,0 @@ -package expansioncontent.cards.deprecated; - - -import com.megacrit.cardcrawl.actions.AbstractGameAction; -import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; -import com.megacrit.cardcrawl.actions.common.DamageAction; -import com.megacrit.cardcrawl.actions.common.RemoveAllBlockAction; -import com.megacrit.cardcrawl.cards.DamageInfo; -import com.megacrit.cardcrawl.characters.AbstractPlayer; -import com.megacrit.cardcrawl.monsters.AbstractMonster; -import com.megacrit.cardcrawl.powers.VulnerablePower; -import downfall.util.CardIgnore; -import expansioncontent.expansionContentMod; -import expansioncontent.cards.AbstractExpansionCard; - -@CardIgnore -public class FaceSlap extends AbstractExpansionCard { - public final static String ID = makeID("FaceSlap"); - - private static final int DAMAGE = 12; - private static final int UPGRADE_DAMAGE = 3; - private static final int MAGIC = 2; - private static final int UPGRADE_MAGIC = 1; - - public FaceSlap() { - super(ID, 2, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); - - tags.add(expansionContentMod.STUDY_CHAMP); - tags.add(expansionContentMod.STUDY); - - baseDamage = DAMAGE; - baseMagicNumber = magicNumber = MAGIC; - this.exhaust = true; - } - - public void use(AbstractPlayer p, AbstractMonster m) { - - atb(new RemoveAllBlockAction(m, p)); - atb(new DamageAction(m, new DamageInfo(p, this.damage, this.damageTypeForTurn), AbstractGameAction.AttackEffect.BLUNT_HEAVY)); - atb(new ApplyPowerAction(m, p, new VulnerablePower(m, this.magicNumber, false), this.magicNumber, true, AbstractGameAction.AttackEffect.NONE)); - - - } - - public void upgrade() { - if (!upgraded) { - upgradeName(); - upgradeDamage(UPGRADE_DAMAGE); - upgradeMagicNumber(UPGRADE_MAGIC); - } - } - -} - diff --git a/src/main/java/expansioncontent/cards/deprecated/GoopSpray.java b/src/main/java/expansioncontent/cards/deprecated/GoopSpray.java deleted file mode 100644 index b2a7384ba..000000000 --- a/src/main/java/expansioncontent/cards/deprecated/GoopSpray.java +++ /dev/null @@ -1,74 +0,0 @@ -package expansioncontent.cards.deprecated; - - -import com.megacrit.cardcrawl.actions.AbstractGameAction; -import com.megacrit.cardcrawl.actions.animations.VFXAction; -import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; -import com.megacrit.cardcrawl.actions.utility.WaitAction; -import com.megacrit.cardcrawl.characters.AbstractPlayer; -import com.megacrit.cardcrawl.dungeons.AbstractDungeon; -import com.megacrit.cardcrawl.monsters.AbstractMonster; -import com.megacrit.cardcrawl.powers.VulnerablePower; -import downfall.util.CardIgnore; -import expansioncontent.cards.AbstractExpansionCard; -import expansioncontent.expansionContentMod; -import slimebound.powers.SlimedPower; -import slimebound.vfx.SlimeProjectileEffect; - -@CardIgnore -public class GoopSpray extends AbstractExpansionCard { - public final static String ID = makeID("GoopSpray"); - - private static final int MAGIC = 12; - private static final int UPGRADE_MAGIC = 4; - - public GoopSpray() { - super(ID, 2, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.ALL_ENEMY); - - tags.add(expansionContentMod.STUDY_SLIMEBOSS); - tags.add(expansionContentMod.STUDY); - - baseMagicNumber = magicNumber = MAGIC; - this.exhaust = true; - } - - public void use(AbstractPlayer p, AbstractMonster m) { - - - if (!AbstractDungeon.getMonsters().areMonstersBasicallyDead()) { - flash(); - for (AbstractMonster monster : AbstractDungeon.getMonsters().monsters) { - if ((!monster.isDead) && (!monster.isDying)) { - atb(new VFXAction(new SlimeProjectileEffect(p.hb.cX, p.hb.cY, monster.hb.cX, monster.hb.cY, 3F, false, 0.6F), 0.01F)); - - - } - atb(new WaitAction(0.2F)); - } - for (AbstractMonster monster : AbstractDungeon.getMonsters().monsters) { - if ((!monster.isDead) && (!monster.isDying)) { - - atb(new ApplyPowerAction(monster, p, new SlimedPower(monster, p, this.magicNumber), this.magicNumber, true, AbstractGameAction.AttackEffect.NONE)); - int vuln = 2; - if (upgraded) vuln++; - atb(new ApplyPowerAction(monster, p, new VulnerablePower(monster, vuln, false), vuln, true, AbstractGameAction.AttackEffect.NONE)); - - - } - - } - } - - - } - - public void upgrade() { - if (!upgraded) { - upgradeName(); - upgradeBlock(UPGRADE_MAGIC); - rawDescription = UPGRADE_DESCRIPTION; - initializeDescription(); - } - } - -} \ No newline at end of file diff --git a/src/main/java/expansioncontent/cards/deprecated/HeadSlam.java b/src/main/java/expansioncontent/cards/deprecated/HeadSlam.java index 9175c03df..e97fb2214 100644 --- a/src/main/java/expansioncontent/cards/deprecated/HeadSlam.java +++ b/src/main/java/expansioncontent/cards/deprecated/HeadSlam.java @@ -1,4 +1,4 @@ -/* +package expansioncontent.cards.deprecated;/* package expansioncontent.cards; diff --git a/src/main/java/expansioncontent/cards/deprecated/ManipulateTime.java b/src/main/java/expansioncontent/cards/deprecated/ManipulateTime.java deleted file mode 100644 index 2ba8d99f3..000000000 --- a/src/main/java/expansioncontent/cards/deprecated/ManipulateTime.java +++ /dev/null @@ -1,50 +0,0 @@ -package expansioncontent.cards.deprecated; - - -import com.megacrit.cardcrawl.characters.AbstractPlayer; -import com.megacrit.cardcrawl.core.CardCrawlGame; -import com.megacrit.cardcrawl.dungeons.AbstractDungeon; -import com.megacrit.cardcrawl.monsters.AbstractMonster; -import downfall.util.CardIgnore; -import expansioncontent.expansionContentMod; -import expansioncontent.cards.AbstractExpansionCard; -import slimebound.actions.TriggerStartOfTurnEffectsAction; - -@CardIgnore -public class ManipulateTime extends AbstractExpansionCard { - public final static String ID = makeID("ManipulateTime"); - - private static final int BLOCK = 10; - private static final int UPGRADE_BLOCK = 4; - - public ManipulateTime() { - super(ID, 2, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); - - tags.add(expansionContentMod.STUDY_TIMEEATER); - tags.add(expansionContentMod.STUDY); - - baseBlock = BLOCK; - this.exhaust = true; - } - - public void use(AbstractPlayer p, AbstractMonster m) { - - - CardCrawlGame.sound.play("POWER_TIME_WARP", 0.05F); - AbstractDungeon.effectsQueue.add(new com.megacrit.cardcrawl.vfx.BorderFlashEffect(com.badlogic.gdx.graphics.Color.GOLD, true)); - AbstractDungeon.topLevelEffectsQueue.add(new com.megacrit.cardcrawl.vfx.combat.TimeWarpTurnEndEffect()); - atb(new com.megacrit.cardcrawl.actions.common.GainBlockAction(p, p, this.block)); - - atb(new TriggerStartOfTurnEffectsAction(p)); - - } - - public void upgrade() { - if (!upgraded) { - upgradeName(); - upgradeBlock(UPGRADE_BLOCK); - } - } - -} - diff --git a/src/main/java/expansioncontent/cards/deprecated/SuperHexaguard.java b/src/main/java/expansioncontent/cards/deprecated/SuperHexaguard.java deleted file mode 100644 index 0ebbbc3fb..000000000 --- a/src/main/java/expansioncontent/cards/deprecated/SuperHexaguard.java +++ /dev/null @@ -1,51 +0,0 @@ -package expansioncontent.cards.deprecated; - - -import com.megacrit.cardcrawl.actions.common.DrawCardAction; -import com.megacrit.cardcrawl.characters.AbstractPlayer; -import com.megacrit.cardcrawl.dungeons.AbstractDungeon; -import com.megacrit.cardcrawl.monsters.AbstractMonster; -import downfall.util.CardIgnore; -import expansioncontent.cards.AbstractExpansionCard; -import expansioncontent.expansionContentMod; - -@CardIgnore -public class SuperHexaguard extends AbstractExpansionCard { - public final static String ID = makeID("SuperHexaguard"); - - - private static final int BLOCK = 12; - private static final int UPG_BLOCK = 4; - - public SuperHexaguard() { - super(ID, 2, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); - - tags.add(expansionContentMod.STUDY_HEXAGHOST); - tags.add(expansionContentMod.STUDY); - baseBlock = BLOCK; - isEthereal = true; - - } - - public void use(AbstractPlayer p, AbstractMonster m) { - - blck(); - atb(new DrawCardAction(p, 1)); - - } - - public void triggerOnExhaust() { - blck(); - atb(new DrawCardAction(AbstractDungeon.player, 1)); - } - - public void upgrade() { - if (!upgraded) { - upgradeName(); - upgradeBlock(UPG_BLOCK); - } - } - -} - - diff --git a/src/main/java/expansioncontent/patches/ShopBossPatch.java b/src/main/java/expansioncontent/patches/ShopBossPatch.java index 85936aa9d..aa198ae96 100644 --- a/src/main/java/expansioncontent/patches/ShopBossPatch.java +++ b/src/main/java/expansioncontent/patches/ShopBossPatch.java @@ -1,6 +1,7 @@ package expansioncontent.patches; import automaton.AutomatonChar; +import awakenedOne.AwakenedOneChar; import basemod.ReflectionHacks; import champ.ChampChar; import collector.CollectorChar; @@ -13,6 +14,7 @@ import downfall.patches.EvilModeCharacterSelect; import expansioncontent.actions.RandomCardWithTagAction; import expansioncontent.cards.*; +import expansioncontent.expansionContentMod; import guardian.characters.GuardianCharacter; import slimebound.characters.SlimeboundCharacter; import theHexaghost.TheHexaghost; @@ -27,7 +29,8 @@ public class ShopBossPatch { public static void Postfix(ShopScreen __instance) { if (EvilModeCharacterSelect.evilMode) { ArrayList colorlessCards = (ArrayList) ReflectionHacks.getPrivate(__instance, ShopScreen.class, "colorlessCards"); - if (AbstractDungeon.merchantRng.randomBoolean()) { + if (1 == 1) { + // if (AbstractDungeon.merchantRng.randomBoolean()) { int x = colorlessCards.get(0).price; colorlessCards.set(0, getReplacement(colorlessCards.get(0).rarity)); colorlessCards.get(0).price = x; @@ -35,7 +38,8 @@ public static void Postfix(ShopScreen __instance) { r.onPreviewObtainCard(colorlessCards.get(0)); } } - if (AbstractDungeon.merchantRng.randomBoolean()) { + if (1 == 1) { + // if (AbstractDungeon.merchantRng.randomBoolean()) { int x = colorlessCards.get(1).price; colorlessCards.set(1, getReplacement(colorlessCards.get(1).rarity)); colorlessCards.get(1).price = x; @@ -46,6 +50,31 @@ public static void Postfix(ShopScreen __instance) { } } + //public class ShopBossPatch { + // public static void Postfix(ShopScreen __instance) { + // //if (EvilModeCharacterSelect.evilMode) { + // ArrayList colorlessCards = (ArrayList) ReflectionHacks.getPrivate(__instance, ShopScreen.class, "colorlessCards"); + // if (1 == 1) { + // // if (AbstractDungeon.merchantRng.randomBoolean()) { + // int x = colorlessCards.get(0).price; + // colorlessCards.set(0, getReplacement(colorlessCards.get(0).rarity)); + // colorlessCards.get(0).price = x; + // for (final AbstractRelic r : AbstractDungeon.player.relics) { + // r.onPreviewObtainCard(colorlessCards.get(0)); + // } + // } + // if (EvilModeCharacterSelect.evilMode || (downfallMod.contentSharing_colorlessCards && (AbstractDungeon.merchantRng.randomBoolean()))) { + // // if (AbstractDungeon.merchantRng.randomBoolean()) { + // int x = colorlessCards.get(1).price; + // colorlessCards.set(1, getReplacement(colorlessCards.get(1).rarity)); + // colorlessCards.get(1).price = x; + // for (final AbstractRelic r : AbstractDungeon.player.relics) { + // r.onPreviewObtainCard(colorlessCards.get(1)); + // } + // } + // } + // //} + public static AbstractCard getReplacement(AbstractCard.CardRarity rarity) { ArrayList potentialCardsList = new ArrayList<>(); for (AbstractCard q : CardLibrary.getAllCards()) { @@ -60,25 +89,40 @@ public static boolean okayToSpawn(AbstractCard q) { if (q.rarity == AbstractCard.CardRarity.SPECIAL) return false; if (AbstractDungeon.player instanceof SlimeboundCharacter) { - if (q.cardID.equals(PrepareCrush.ID)) { + if (q.hasTag(expansionContentMod.STUDY_SLIMEBOSS)){ return false; } } if (AbstractDungeon.player instanceof TheHexaghost || RandomCardWithTagAction.hexaLocked()) { - if (q.cardID.equals(Hexaburn.ID)) return false; + if (q.hasTag(expansionContentMod.STUDY_HEXAGHOST)){ + return false; + } } if (AbstractDungeon.player instanceof GuardianCharacter || RandomCardWithTagAction.guardianLocked()) { - if (q.cardID.equals(GuardianWhirl.ID)) return false; + if (q.hasTag(expansionContentMod.STUDY_GUARDIAN)){ + return false; + } } if (AbstractDungeon.player instanceof ChampChar || RandomCardWithTagAction.champLocked()) { - if (q.cardID.equals(LastStand.ID)) return false; + if (q.hasTag(expansionContentMod.STUDY_CHAMP)){ + return false; + } } if (AbstractDungeon.player instanceof AutomatonChar || RandomCardWithTagAction.autoLocked()) { - return !q.cardID.equals(HyperBeam.ID); + if (q.hasTag(expansionContentMod.STUDY_AUTOMATON)){ + return false; + } } if (AbstractDungeon.player instanceof CollectorChar || RandomCardWithTagAction.collectorLocked()) { - return !q.cardID.equals(YouAreMine.ID); + if (q.hasTag(expansionContentMod.STUDY_COLLECTOR)) { + return false; + } } + + if (AbstractDungeon.player instanceof AwakenedOneChar || RandomCardWithTagAction.awakenedLocked()) { + return !q.hasTag(expansionContentMod.STUDY_AWAKENEDONE); + } + return true; } } diff --git a/src/main/java/expansioncontent/powers/AwakenDeathPower.java b/src/main/java/expansioncontent/powers/AwakenDeathPower.java index 7f4855977..eae219168 100644 --- a/src/main/java/expansioncontent/powers/AwakenDeathPower.java +++ b/src/main/java/expansioncontent/powers/AwakenDeathPower.java @@ -1,13 +1,17 @@ package expansioncontent.powers; +import awakenedOne.AwakenedOneMod; +import awakenedOne.ui.OrbitingSpells; import basemod.interfaces.CloneablePowerInterface; +import champ.powers.PushThroughPower; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.evacipated.cardcrawl.mod.stslib.powers.interfaces.OnPlayerDeathPower; import com.megacrit.cardcrawl.actions.animations.VFXAction; import com.megacrit.cardcrawl.actions.common.HealAction; import com.megacrit.cardcrawl.actions.common.RemoveSpecificPowerAction; +import com.megacrit.cardcrawl.actions.unique.RemoveDebuffsAction; import com.megacrit.cardcrawl.actions.utility.SFXAction; import com.megacrit.cardcrawl.cards.DamageInfo; import com.megacrit.cardcrawl.characters.AbstractPlayer; @@ -15,10 +19,13 @@ import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.powers.AbstractPower; +import com.megacrit.cardcrawl.rooms.AbstractRoom; import com.megacrit.cardcrawl.vfx.combat.IntenseZoomEffect; import expansioncontent.expansionContentMod; import downfall.util.TextureLoader; +import static awakenedOne.util.Wiz.*; + public class AwakenDeathPower extends AbstractPower implements OnPlayerDeathPower, CloneablePowerInterface { public static final String POWER_ID = expansionContentMod.makeID("AwakenDeathPower"); @@ -50,19 +57,24 @@ public boolean onPlayerDeath(AbstractPlayer abstractPlayer, DamageInfo damageInf return false; } - public void onVictory() - { - AbstractPlayer p = com.megacrit.cardcrawl.dungeons.AbstractDungeon.player; + public void onVictory() { + AbstractPlayer p = AbstractDungeon.player; if (p.currentHealth > 0) { p.heal(this.amount); } - } + } public void trigger(AbstractPlayer abstractPlayer) { AbstractDungeon.actionManager.addToTop(new RemoveSpecificPowerAction(this.owner, this.owner, AwakenDeathPower.POWER_ID)); + atb(new RemoveDebuffsAction(this.owner)); + if (AbstractDungeon.actionManager.turnHasEnded) { + applyToSelfTop(new PushThroughPower(1)); + } AbstractDungeon.actionManager.addToTop(new HealAction(abstractPlayer, abstractPlayer, this.amount)); AbstractDungeon.actionManager.addToTop(new VFXAction(this.owner, new IntenseZoomEffect(this.owner.hb.cX, this.owner.hb.cY, true), 0.05F, true)); AbstractDungeon.actionManager.addToTop(new SFXAction("VO_AWAKENEDONE_1")); + AwakenedOneMod.awakenedthiscombat = true; + OrbitingSpells.upgradeall(); } @Override diff --git a/src/main/java/expansioncontent/powers/BeatOfDeathThatDoesntKillYouPower.java b/src/main/java/expansioncontent/powers/BeatOfDeathThatDoesntKillYouPower.java new file mode 100644 index 000000000..4f6a04488 --- /dev/null +++ b/src/main/java/expansioncontent/powers/BeatOfDeathThatDoesntKillYouPower.java @@ -0,0 +1,42 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package expansioncontent.powers; + +import com.megacrit.cardcrawl.actions.common.DamageAllEnemiesAction; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.core.CardCrawlGame; + +import com.megacrit.cardcrawl.actions.AbstractGameAction.AttackEffect; +import com.megacrit.cardcrawl.actions.utility.UseCardAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.cards.DamageInfo.DamageType; +import com.megacrit.cardcrawl.powers.AbstractPower; + +public class BeatOfDeathThatDoesntKillYouPower extends AbstractPower { + public static final String POWER_ID = "expansioncontent:BeatOfDeathP"; + public static final String NAME = CardCrawlGame.languagePack.getPowerStrings(POWER_ID).NAME; + public static final String[] DESCRIPTIONS = CardCrawlGame.languagePack.getPowerStrings(POWER_ID).DESCRIPTIONS; + public int maxAmt; + + public BeatOfDeathThatDoesntKillYouPower(AbstractCreature owner, int amount) { + this.name = NAME; + this.ID = POWER_ID; + this.owner = owner; + this.amount = amount; + this.description = DESCRIPTIONS[0] + amount + DESCRIPTIONS[1]; + this.loadRegion("beat"); + this.type = PowerType.BUFF; + } + + public void onAfterCardPlayed(AbstractCard card) { + this.flash(); + this.addToBot(new DamageAllEnemiesAction(this.owner, DamageInfo.createDamageMatrix(this.amount, true), DamageType.THORNS, AttackEffect.BLUNT_LIGHT, true)); + } + public void updateDescription () { + this.description = DESCRIPTIONS[0] + this.amount + DESCRIPTIONS[1]; + } + } \ No newline at end of file diff --git a/src/main/java/expansioncontent/powers/DeEnergizedPower.java b/src/main/java/expansioncontent/powers/DeEnergizedPower.java index 51b7b43e5..91300eaee 100644 --- a/src/main/java/expansioncontent/powers/DeEnergizedPower.java +++ b/src/main/java/expansioncontent/powers/DeEnergizedPower.java @@ -29,7 +29,7 @@ public DeEnergizedPower(final int amount) { this.owner = AbstractDungeon.player; this.amount = amount; this.type = PowerType.DEBUFF; - this.isTurnBased = true; + this.isTurnBased = false; this.region128 = new TextureAtlas.AtlasRegion(tex84, 0, 0, 84, 84); this.region48 = new TextureAtlas.AtlasRegion(tex32, 0, 0, 32, 32); diff --git a/src/main/java/expansioncontent/powers/EvilWithinPower.java b/src/main/java/expansioncontent/powers/EvilWithinPower.java new file mode 100644 index 000000000..46b92bc43 --- /dev/null +++ b/src/main/java/expansioncontent/powers/EvilWithinPower.java @@ -0,0 +1,66 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package expansioncontent.powers; + +import com.megacrit.cardcrawl.actions.AbstractGameAction.AttackEffect; +import com.megacrit.cardcrawl.actions.common.DamageAllEnemiesAction; +import com.megacrit.cardcrawl.actions.utility.UseCardAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.cards.DamageInfo.DamageType; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.PowerStrings; +import com.megacrit.cardcrawl.powers.AbstractPower; + +public class EvilWithinPower extends AbstractPower { + public static final String POWER_ID = "expansioncontent:EvilWithinPower"; + private static final PowerStrings powerStrings = CardCrawlGame.languagePack.getPowerStrings(POWER_ID); + public static final String NAME = powerStrings.NAME; + public static final String[] DESCRIPTIONS = powerStrings.DESCRIPTIONS; + public static final int DEBUFF_AMT = 5; + private int damage; + + public EvilWithinPower(AbstractCreature owner, int damage) { + this.name = NAME; + this.ID = POWER_ID; + this.owner = owner; + this.amount = amount; + this.type = PowerType.BUFF; + this.amount = 5; + this.isTurnBased = false; + this.updateDescription(); + this.loadRegion("sadistic"); + } + + public void updateDescription() { + if (this.amount == 1) { + this.description = DESCRIPTIONS[0] + this.damage + DESCRIPTIONS[1] + this.amount + DESCRIPTIONS[3]; + } else { + this.description = DESCRIPTIONS[0] + this.damage + DESCRIPTIONS[1] + this.amount + DESCRIPTIONS[2]; + } + + } + + public void stackPower(int stackAmount) { + this.fontScale = 8.0F; + this.damage += stackAmount; + this.updateDescription(); + } + + public void onApplyPower(AbstractPower power, AbstractCreature target, AbstractCreature source) { + if (power.type == PowerType.DEBUFF && !power.ID.equals("Shackled") && source == this.owner && target != this.owner && !target.hasPower("Artifact")) { + --this.amount; + if (this.amount == 0) { + this.flash(); + this.amount = 5; + this.addToBot(new DamageAllEnemiesAction(AbstractDungeon.player, DamageInfo.createDamageMatrix(this.damage, true), DamageType.THORNS, AttackEffect.SLASH_DIAGONAL)); + } + this.updateDescription(); + } + } +} diff --git a/src/main/java/expansioncontent/powers/PandemoniumPower.java b/src/main/java/expansioncontent/powers/PandemoniumPower.java new file mode 100644 index 000000000..35fa02271 --- /dev/null +++ b/src/main/java/expansioncontent/powers/PandemoniumPower.java @@ -0,0 +1,75 @@ +package expansioncontent.powers; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.utility.UnlimboAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.CardQueueItem; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.PowerStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.AbstractPower; + +public class PandemoniumPower extends AbstractPower { + public static final String POWER_ID = "expansioncontent:PandemoniumPower"; + private static final PowerStrings powerStrings = CardCrawlGame.languagePack.getPowerStrings(POWER_ID); + public static final String NAME = powerStrings.NAME; + public static final String[] DESCRIPTIONS = powerStrings.DESCRIPTIONS; + + public PandemoniumPower(AbstractCreature owner, int amount) { + this.name = NAME; + this.ID = POWER_ID; + this.owner = owner; + this.amount = amount; + this.type = PowerType.BUFF; + this.isTurnBased = false; + this.updateDescription(); + this.loadRegion("mayhem"); + priority = -999; + } + + @Override + public void updateDescription() { + if (this.amount == 1) { + this.description = DESCRIPTIONS[0]; + } else { + this.description = DESCRIPTIONS[1] + this.amount + DESCRIPTIONS[2]; + } + } + + @Override + public void atStartOfTurn() { + this.flash(); + for (int i = 0; i < this.amount; ++i) { + if (!AbstractDungeon.player.discardPile.isEmpty()) { + AbstractCard cardToPlay = AbstractDungeon.player.discardPile.getRandomCard(AbstractDungeon.cardRandomRng); + AbstractDungeon.player.discardPile.removeCard(cardToPlay); + this.addToBot(new AbstractGameAction() { + @Override + public void update() { + AbstractMonster randomMonster = AbstractDungeon.getCurrRoom().monsters.getRandomMonster(null, true, AbstractDungeon.cardRandomRng); + //cardToPlay.freeToPlayOnce = true; + cardToPlay.applyPowers(); + cardToPlay.calculateCardDamage(randomMonster); + + // Add the card to the player's limbo (temporary play area) + AbstractDungeon.player.limbo.addToBottom(cardToPlay); + cardToPlay.current_y = -200.0F * Settings.scale; + cardToPlay.target_x = (Settings.WIDTH / 2.0F - 300.0F * Settings.scale); + cardToPlay.target_y = (Settings.HEIGHT / 2.0F); + // Calculate the damage for the target + cardToPlay.calculateCardDamage(randomMonster); + + // Add the card to the action manager's card queue, targeting the selected monster + AbstractDungeon.actionManager.cardQueue.add(new com.megacrit.cardcrawl.cards.CardQueueItem(cardToPlay, randomMonster, cardToPlay.energyOnUse)); + this.addToTop(new UnlimboAction(cardToPlay)); + this.isDone = true; + } + }); + + } + } + } +} diff --git a/src/main/java/expansioncontent/powers/ReveriePower.java b/src/main/java/expansioncontent/powers/ReveriePower.java new file mode 100644 index 000000000..0ebd37c41 --- /dev/null +++ b/src/main/java/expansioncontent/powers/ReveriePower.java @@ -0,0 +1,77 @@ +package expansioncontent.powers; + +import basemod.BaseMod; +import com.megacrit.cardcrawl.actions.common.GainBlockAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import downfall.util.SelectCardsCenteredAction; +import hermit.util.Wiz; +import sneckomod.SneckoMod; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.PowerStrings; +import com.megacrit.cardcrawl.powers.AbstractPower; + +import java.util.ArrayList; + +public class ReveriePower extends AbstractPower { + public static final String POWER_ID = "expansioncontent:ReveriePower"; + private static final PowerStrings powerStrings = CardCrawlGame.languagePack.getPowerStrings(POWER_ID); + public static final String NAME = powerStrings.NAME; + public static final String[] DESCRIPTIONS = powerStrings.DESCRIPTIONS; + + public ReveriePower(AbstractCreature owner, int amount) { + this.name = NAME; + this.ID = POWER_ID; + this.owner = owner; + this.amount = amount; + this.type = PowerType.BUFF; + this.isTurnBased = false; + this.updateDescription(); + this.loadRegion("time"); + priority = 999; + } + + @Override + public void updateDescription() { + if (this.amount == 1) { + this.description = DESCRIPTIONS[0]; + } else { + this.description = DESCRIPTIONS[1] + this.amount + DESCRIPTIONS[2]; + } + } + + @Override + public void atStartOfTurn() { + if (Wiz.hand().size() < BaseMod.MAX_HAND_SIZE) { + this.flash(); + if (!AbstractDungeon.player.discardPile.isEmpty()) { + ArrayList cardsToChooseFrom = new ArrayList<>(); + + for (int i = 0; i < this.amount && i < AbstractDungeon.player.discardPile.size(); ++i) { + cardsToChooseFrom.add(AbstractDungeon.player.discardPile.group.get(i)); + } + + if (!cardsToChooseFrom.isEmpty()) { + this.addToBot(new SelectCardsCenteredAction( + cardsToChooseFrom, + 1, + DESCRIPTIONS[3], + (selectedCards) -> { + AbstractCard chosenCard = selectedCards.get(0); + AbstractDungeon.player.discardPile.removeCard(chosenCard); + AbstractDungeon.player.hand.addToHand(chosenCard); + + chosenCard.lighten(false); + chosenCard.unhover(); + chosenCard.applyPowers(); + } + )); + } + } + } + } +} diff --git a/src/main/java/expansioncontent/powers/VexVinciblePower.java b/src/main/java/expansioncontent/powers/VexVinciblePower.java index 0a123ae32..969ac0214 100644 --- a/src/main/java/expansioncontent/powers/VexVinciblePower.java +++ b/src/main/java/expansioncontent/powers/VexVinciblePower.java @@ -1,29 +1,36 @@ package expansioncontent.powers; import com.evacipated.cardcrawl.mod.stslib.powers.abstracts.TwoAmountPower; +import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.common.ReducePowerAction; import com.megacrit.cardcrawl.core.AbstractCreature; import com.megacrit.cardcrawl.core.CardCrawlGame; - -import static expansioncontent.expansionContentMod.makeID; +import com.megacrit.cardcrawl.powers.AbstractPower; +import expansioncontent.expansionContentMod; public class VexVinciblePower extends TwoAmountPower { - public static final String POWER_ID = makeID("VexVinciblePower"); - public static final String NAME = CardCrawlGame.languagePack.getPowerStrings(POWER_ID).NAME; - public static final String[] DESCRIPTIONS = CardCrawlGame.languagePack.getPowerStrings(POWER_ID).DESCRIPTIONS; + public static final String POWER_ID = expansionContentMod.makeID("VexVinciblePower"); + + public static final String NAME = (CardCrawlGame.languagePack.getPowerStrings(POWER_ID)).NAME; + + public static final String[] DESCRIPTIONS = (CardCrawlGame.languagePack.getPowerStrings(POWER_ID)).DESCRIPTIONS; + public int maxAmt; + public int variable; + private boolean activated = false; - public VexVinciblePower(AbstractCreature owner, int amount) { + public VexVinciblePower(AbstractCreature owner, int amount, int amount2, int amount3) { this.name = NAME; this.ID = POWER_ID; this.owner = owner; - this.amount = amount; //duration - this.amount2 = 10; //damage cap, also "damage remaining this turn" + this.amount = amount; + this.amount2 = amount2; + this.variable = amount3; this.maxAmt = amount; - this.updateDescription(); - this.loadRegion("heartDef"); + updateDescription(); + loadRegion("heartDef"); this.priority = 99; this.activated = false; } @@ -31,32 +38,26 @@ public VexVinciblePower(AbstractCreature owner, int amount) { public int onLoseHp(int damageAmount) { if (damageAmount > this.amount2) { damageAmount = this.amount2; - activated = true; + this.activated = true; } - this.amount2 -= damageAmount; - if (this.amount2 < 0) { + if (this.amount2 < 0) this.amount2 = 0; - } - - this.updateDescription(); - + updateDescription(); return damageAmount; } - @Override - public void atEndOfRound(){ - if (activated) { - addToBot(new ReducePowerAction(owner, owner, this, 1)); - } - this.amount2 = 10; + public void atEndOfRound() { + if (this.activated) + addToBot((AbstractGameAction)new ReducePowerAction(this.owner, this.owner, (AbstractPower)this, 1)); + this.amount2 = this.variable; } public void updateDescription() { if (this.amount == 1) { this.description = DESCRIPTIONS[0] + this.amount2 + DESCRIPTIONS[1]; } else { - this.description = DESCRIPTIONS[2] + this.amount2 + DESCRIPTIONS[3] + amount + DESCRIPTIONS[4]; + this.description = DESCRIPTIONS[2] + this.amount2 + DESCRIPTIONS[3] + this.amount + DESCRIPTIONS[4]; } } } diff --git a/src/main/java/expansioncontent/relics/StudyCardRelic.java b/src/main/java/expansioncontent/relics/StudyCardRelic.java index 6df7b2331..f493d8e2f 100644 --- a/src/main/java/expansioncontent/relics/StudyCardRelic.java +++ b/src/main/java/expansioncontent/relics/StudyCardRelic.java @@ -23,7 +23,7 @@ public class StudyCardRelic extends CustomRelic { private static final Texture OUTLINE = TextureLoader.getTexture(makeRelicOutlinePath("tinybowlerhatOutline.png")); public StudyCardRelic() { - super(ID, IMG, OUTLINE, RelicTier.BOSS, LandingSound.FLAT); + super(ID, IMG, OUTLINE, RelicTier.DEPRECATED, LandingSound.FLAT); this.tips.add(new CardPowerTip(new StudyTheSpire())); } diff --git a/src/main/java/gremlin/GremlinMod.java b/src/main/java/gremlin/GremlinMod.java index 305044840..ebcda8b5b 100644 --- a/src/main/java/gremlin/GremlinMod.java +++ b/src/main/java/gremlin/GremlinMod.java @@ -175,7 +175,7 @@ public void receiveEditRelics() { addRelicToCustomPool(new WizardHat(), AbstractCardEnum.GREMLIN); // Uncommon - addRelic(new ImpeccablePecs(), RelicType.SHARED); + addRelicToCustomPool(new ImpeccablePecs(), AbstractCardEnum.GREMLIN); addRelicToCustomPool(new MagicalMallet(), AbstractCardEnum.GREMLIN); addRelicToCustomPool(new WizardStaff(), AbstractCardEnum.GREMLIN); addRelicToCustomPool(new WoundPoker(), AbstractCardEnum.GREMLIN); diff --git a/src/main/java/gremlin/actions/CounterStrikeAction.java b/src/main/java/gremlin/actions/CounterStrikeAction.java index 388588121..d4b8a2676 100644 --- a/src/main/java/gremlin/actions/CounterStrikeAction.java +++ b/src/main/java/gremlin/actions/CounterStrikeAction.java @@ -2,11 +2,19 @@ import com.megacrit.cardcrawl.actions.*; import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.DamageInfo; import com.megacrit.cardcrawl.monsters.*; import com.megacrit.cardcrawl.dungeons.*; import com.megacrit.cardcrawl.actions.common.*; +import com.megacrit.cardcrawl.powers.StrengthPower; +import com.megacrit.cardcrawl.powers.WeakPower; import gremlin.GremlinMod; import gremlin.cards.Ward; +import gremlin.characters.GremlinCharacter; +import gremlin.orbs.MadGremlin; +import gremlin.orbs.SneakyGremlin; +import gremlin.powers.ModifiedLoseStrengthPower; +import gremlin.powers.WizPower; public class CounterStrikeAction extends AbstractGameAction { @@ -23,12 +31,55 @@ public CounterStrikeAction(final AbstractMonster m, final int amount, boolean is @Override public void update() { if (GremlinMod.doesEnemyIntendToAttack(this.m)) { - AbstractCard c = new Ward(); - if(isUpgraded){ - c.upgrade(); + String gremlin = ""; + boolean isNob = false; + if(AbstractDungeon.player instanceof GremlinCharacter) { + if(((GremlinCharacter) AbstractDungeon.player).nob){ + isNob = true; + } else { + gremlin = ((GremlinCharacter) AbstractDungeon.player).currentGremlin; + } + } + + if(gremlin.equals("shield")){ + AbstractDungeon.actionManager.addToBottom(new GainBlockAction(AbstractDungeon.player, AbstractDungeon.player, 2)); + } + + if(gremlin.equals("angry")){ + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, + new StrengthPower(AbstractDungeon.player, MadGremlin.STRENGTH))); + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, + new ModifiedLoseStrengthPower(AbstractDungeon.player, MadGremlin.STRENGTH))); + } + + else if(gremlin.equals("wizard")){ + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, + new WizPower(AbstractDungeon.player, 1), 1)); + } else { + // AbstractDungeon.actionManager.addToBottom(new DamageAction(m, new DamageInfo(p, this.damage, + // this.damageTypeForTurn), AbstractGameAction.AttackEffect.SLASH_DIAGONAL)); + } + + if(gremlin.equals("fat")){ + for (final AbstractMonster mo : AbstractDungeon.getCurrRoom().monsters.monsters) { + if (!mo.isDeadOrEscaped()) { + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(mo, AbstractDungeon.player, + new WeakPower(mo, 1, false), 1)); + } + } + } + + if(gremlin.equals("sneak")){ + AbstractDungeon.actionManager.addToBottom( + new DamageRandomEnemyAction(new DamageInfo(AbstractDungeon.player, SneakyGremlin.DAMAGE, DamageInfo.DamageType.THORNS), + AbstractGameAction.AttackEffect.SLASH_DIAGONAL)); + } + + if(gremlin.equals("wizard")){ + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, + new WizPower(AbstractDungeon.player, 1), 1)); + } } - AbstractDungeon.actionManager.addToBottom(new MakeTempCardInHandAction(c, amount)); - } this.isDone = true; } } diff --git a/src/main/java/gremlin/actions/DamageRandomEnemyActionButItsRelicRng.java b/src/main/java/gremlin/actions/DamageRandomEnemyActionButItsRelicRng.java new file mode 100644 index 000000000..b41efea2e --- /dev/null +++ b/src/main/java/gremlin/actions/DamageRandomEnemyActionButItsRelicRng.java @@ -0,0 +1,40 @@ +package gremlin.actions; +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.AbstractGameAction.ActionType; +import com.megacrit.cardcrawl.actions.common.DamageAction; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import gremlin.relics.FragmentationGrenade; + +public class DamageRandomEnemyActionButItsRelicRng extends AbstractGameAction { + private DamageInfo info; + + public DamageRandomEnemyActionButItsRelicRng(DamageInfo info, AbstractGameAction.AttackEffect effect) { + this.info = info; + this.actionType = ActionType.DAMAGE; + this.attackEffect = effect; + } + + public void update() { + + if (AbstractDungeon.player.hasRelic(FragmentationGrenade.ID)) { + AbstractDungeon.player.getRelic(FragmentationGrenade.ID).flash(); + DamageInfo old = this.info; + this.info = new DamageInfo(old.owner, old.base + FragmentationGrenade.OOMPH, old.type); + } + + this.target = AbstractDungeon.getMonsters().getRandomMonster((AbstractMonster)null, true, AbstractDungeon.relicRng); + if (this.target != null) { + this.addToTop(new DamageAction(this.target, this.info, this.attackEffect)); + } + + this.isDone = true; + } +} diff --git a/src/main/java/gremlin/actions/DuplicatePowerAction.java b/src/main/java/gremlin/actions/DuplicatePowerAction.java new file mode 100644 index 000000000..11842ccc1 --- /dev/null +++ b/src/main/java/gremlin/actions/DuplicatePowerAction.java @@ -0,0 +1,89 @@ +package gremlin.actions; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.UIStrings; +import expansioncontent.actions.EchoACardAction; +import expansioncontent.actions.EchoACardNextTurnAction; +import expansioncontent.expansionContentMod; + +import java.util.ArrayList; + +public class DuplicatePowerAction extends AbstractGameAction { + private static final UIStrings uiStrings = CardCrawlGame.languagePack.getUIString("DualWieldAction"); + public static final String[] TEXT = uiStrings.TEXT; + private final AbstractPlayer p; + private final int dupeAmount; + private ArrayList cannotDuplicate = new ArrayList<>(); + + public DuplicatePowerAction(AbstractCreature source, int amount) { + setValues(AbstractDungeon.player, source, amount); + this.actionType = AbstractGameAction.ActionType.DRAW; + this.duration = Settings.ACTION_DUR_FAST; + this.p = AbstractDungeon.player; + this.dupeAmount = amount; + } + + public void update() { + if (this.duration == Settings.ACTION_DUR_FAST) { + if (this.p.hand.group.isEmpty()) { + this.isDone = true; + return; + } + + for (AbstractCard c : this.p.hand.group) { + if (c.type != AbstractCard.CardType.POWER || c.hasTag(expansionContentMod.ECHO)) { + this.cannotDuplicate.add(c); + } + } + + if (this.p.hand.size() == this.cannotDuplicate.size()) { + this.isDone = true; + return; + } + + if (this.p.hand.group.size() - this.cannotDuplicate.size() == 1) { + for (AbstractCard c : this.p.hand.group) { + if (!this.cannotDuplicate.contains(c)) { + createEchoes(c); + this.isDone = true; + return; + } + } + } + + this.p.hand.group.removeAll(this.cannotDuplicate); + + AbstractDungeon.handCardSelectScreen.open(TEXT[0], 1, false, false, false, false); + + } else if (!AbstractDungeon.handCardSelectScreen.wereCardsRetrieved) { + for (AbstractCard c : AbstractDungeon.handCardSelectScreen.selectedCards.group) { + this.p.hand.addToTop(c); + createEchoes(c); + } + returnCards(); + + AbstractDungeon.handCardSelectScreen.wereCardsRetrieved = true; + AbstractDungeon.handCardSelectScreen.selectedCards.group.clear(); + this.isDone = true; + } + tickDuration(); + } + + private void returnCards() { + for (AbstractCard c : this.cannotDuplicate) { + this.p.hand.addToTop(c); + } + this.p.hand.refreshHandLayout(); + } + + private void createEchoes(AbstractCard card) { + AbstractCard c = card.makeStatEquivalentCopy(); + addToTop(new EchoACardNextTurnAction(c, dupeAmount)); + } +} \ No newline at end of file diff --git a/src/main/java/gremlin/actions/ShivPerCardPlayedAction.java b/src/main/java/gremlin/actions/ShivPerCardPlayedAction.java index f6d3cd695..7dae12288 100644 --- a/src/main/java/gremlin/actions/ShivPerCardPlayedAction.java +++ b/src/main/java/gremlin/actions/ShivPerCardPlayedAction.java @@ -1,5 +1,6 @@ package gremlin.actions; +import basemod.BaseMod; import com.megacrit.cardcrawl.actions.*; import com.megacrit.cardcrawl.cards.tempCards.Shiv; import com.megacrit.cardcrawl.dungeons.*; @@ -20,11 +21,16 @@ public void update() { this.isDone = true; int count = AbstractDungeon.actionManager.cardsPlayedThisTurn.size(); --count; + int availableSpace = BaseMod.MAX_HAND_SIZE - AbstractDungeon.player.hand.size(); + if (count > availableSpace) { + count = availableSpace; + } AbstractCard c = new Shiv(); - if(upgraded){ + if (upgraded) { c.upgrade(); } AbstractDungeon.actionManager.addToTop(new MakeTempCardInHandAction(c, count)); } + } diff --git a/src/main/java/gremlin/cards/AbstractGremlinCard.java b/src/main/java/gremlin/cards/AbstractGremlinCard.java index 04c48fc90..39fd40bf4 100644 --- a/src/main/java/gremlin/cards/AbstractGremlinCard.java +++ b/src/main/java/gremlin/cards/AbstractGremlinCard.java @@ -19,6 +19,16 @@ protected static String getID(String ID) { public boolean wizardry = false; public boolean sorcery = false; + //Variables + //Second Magic - Downfall Magic (DM) + public int gremlinMagic; + public int basegremlinMagic; + public boolean isgremlinUpgraded; + public boolean isgremlinModified; + + public boolean upgradedsecondMagic; + public boolean issecondMagicModified; + public boolean isBlamageModifed = false; public int baseBlamage = 0; public int blamage = 0; @@ -45,9 +55,27 @@ public void displayUpgrades() { blamage = baseBlamage; isBlamageModifed = true; } + if (isgremlinUpgraded) { + gremlinMagic = basegremlinMagic; + isgremlinModified = true; + } + } + protected void upgradeBlammage(int amount) { + baseBlamage += amount; + blamage = baseBlamage; + upgradedBlamage = true; } + + public void resetAttributes() { + super.resetAttributes(); + gremlinMagic = basegremlinMagic; + isgremlinModified = false; + } + + + public void setBackgrounds() { //Call this immediately after any tag changes. if (getGremlinEnumFromCard(this).equals(ART_GREMLIN.NONE)) { diff --git a/src/main/java/gremlin/cards/AggressiveDefense.java b/src/main/java/gremlin/cards/AggressiveDefense.java index 63bd2ab87..29d81f4de 100644 --- a/src/main/java/gremlin/cards/AggressiveDefense.java +++ b/src/main/java/gremlin/cards/AggressiveDefense.java @@ -26,7 +26,7 @@ public class AggressiveDefense extends AbstractGremlinCard { private static final AbstractCard.CardTarget TARGET = AbstractCard.CardTarget.ENEMY; private static final int COST = 1; - private static final int POWER = 6; + private static final int POWER = 8; private static final int UPGRADE_BONUS = 2; private static final int MAGIC = 3; private static final int UPGRADE_MAGIC_BONUS = 1; diff --git a/src/main/java/gremlin/cards/ArmsTheft.java b/src/main/java/gremlin/cards/ArmsTheft.java index b75287fb9..d60223d37 100644 --- a/src/main/java/gremlin/cards/ArmsTheft.java +++ b/src/main/java/gremlin/cards/ArmsTheft.java @@ -8,6 +8,7 @@ import com.megacrit.cardcrawl.localization.CardStrings; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.StrengthPower; +import com.megacrit.cardcrawl.powers.WeakPower; import gremlin.GremlinMod; import static gremlin.GremlinMod.MAD_GREMLIN; @@ -39,6 +40,8 @@ public ArmsTheft() { } public void use(AbstractPlayer p, AbstractMonster m) { + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(m, p, + new WeakPower(m, magicNumber, false), magicNumber)); AbstractDungeon.actionManager.addToBottom( new ApplyPowerAction(m, p, new StrengthPower(m, -this.magicNumber), -this.magicNumber)); if (!m.hasPower("Artifact")) { diff --git a/src/main/java/gremlin/cards/Astound.java b/src/main/java/gremlin/cards/Astound.java index fef88f2e0..383671f4a 100644 --- a/src/main/java/gremlin/cards/Astound.java +++ b/src/main/java/gremlin/cards/Astound.java @@ -24,7 +24,7 @@ public class Astound extends AbstractGremlinCard { private static final AbstractCard.CardTarget TARGET = AbstractCard.CardTarget.SELF; private static final int COST = 0; - private static final int BLOCK = 3; + private static final int BLOCK = 5; private static final int MAGIC = 2; private static final int UPGRADE_BONUS = 2; diff --git a/src/main/java/gremlin/cards/BrokenShin.java b/src/main/java/gremlin/cards/BrokenShin.java index 626337f7a..164acdfca 100644 --- a/src/main/java/gremlin/cards/BrokenShin.java +++ b/src/main/java/gremlin/cards/BrokenShin.java @@ -24,7 +24,7 @@ public class BrokenShin extends AbstractGremlinCard { private static final AbstractCard.CardRarity RARITY = CardRarity.RARE; private static final AbstractCard.CardTarget TARGET = CardTarget.ENEMY; - private static final int COST = 0; + private static final int COST = 2; private static final int MAGIC = 4; private static final int UPGRADE_BONUS = -1; diff --git a/src/main/java/gremlin/cards/BubbleBarrier.java b/src/main/java/gremlin/cards/BubbleBarrier.java index a219ad56b..53c46e025 100644 --- a/src/main/java/gremlin/cards/BubbleBarrier.java +++ b/src/main/java/gremlin/cards/BubbleBarrier.java @@ -19,7 +19,7 @@ public class BubbleBarrier extends AbstractGremlinCard { private static final String IMG_PATH = "cards/bubble_barrier.png"; private static final AbstractCard.CardType TYPE = AbstractCard.CardType.SKILL; - private static final AbstractCard.CardRarity RARITY = CardRarity.COMMON; + private static final AbstractCard.CardRarity RARITY = CardRarity.UNCOMMON; private static final AbstractCard.CardTarget TARGET = AbstractCard.CardTarget.SELF; private static final int COST = 1; diff --git a/src/main/java/gremlin/cards/BulkUp.java b/src/main/java/gremlin/cards/BulkUp.java index ca4a1ca4b..e5dd62efb 100644 --- a/src/main/java/gremlin/cards/BulkUp.java +++ b/src/main/java/gremlin/cards/BulkUp.java @@ -10,6 +10,7 @@ import gremlin.GremlinMod; import gremlin.actions.GremlinSwapAction; import gremlin.orbs.FatGremlin; +import sneckomod.SneckoMod; import static gremlin.GremlinMod.FAT_GREMLIN; @@ -24,7 +25,7 @@ public class BulkUp extends AbstractGremlinCard { private static final AbstractCard.CardTarget TARGET = AbstractCard.CardTarget.SELF; private static final int COST = 1; - private static final int MAGIC = 5; + private static final int MAGIC = 4; private static final int UPGRADE_BONUS = 2; public BulkUp() @@ -36,6 +37,7 @@ public BulkUp() this.tags.add(FAT_GREMLIN); setBackgrounds(); GremlinMod.loadJokeCardImage(this, "BulkUp.png"); + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) diff --git a/src/main/java/gremlin/cards/BurlyBlow.java b/src/main/java/gremlin/cards/BurlyBlow.java index bc0e4e7b4..c13309547 100644 --- a/src/main/java/gremlin/cards/BurlyBlow.java +++ b/src/main/java/gremlin/cards/BurlyBlow.java @@ -26,7 +26,7 @@ public class BurlyBlow extends AbstractGremlinCard { private static final int COST = 2; private static final int POWER = 4; - private static final int UPGRADE_BONUS = 1; + private static final int UPGRADE_BONUS = 2; public BurlyBlow() { @@ -44,7 +44,7 @@ public void use(AbstractPlayer p, AbstractMonster m) { if(m.hasPower(WeakPower.POWER_ID)){ count = m.getPower(WeakPower.POWER_ID).amount; } - for(int i=0; i cardsList = new ArrayList<>(); @@ -37,58 +50,121 @@ public class GremlinArms extends AbstractGremlinCard { public GremlinArms() { super(ID, NAME, IMG_PATH, COST, strings.DESCRIPTION, TYPE, RARITY, TARGET); - + this.tags.add(SneckoMod.BANNEDFORSNECKO); this.baseMagicNumber = MAGIC; this.magicNumber = baseMagicNumber; - cardsList.add(new Shiv()); - cardsList.add(new Ward()); - - this.cardsToPreview = new Shiv(); - this.tags.add(SNEAKY_GREMLIN); - setBackgrounds(); GremlinMod.loadJokeCardImage(this, "GremlinArms.png"); } public void use(AbstractPlayer p, AbstractMonster m) { + + if(hasOptions){ + addToBot(new ChooseOneAction(updateModal())); + } + for(int i = 0; i < magicNumber; i++){ - int shiv = AbstractDungeon.cardRandomRng.random(0, 1); - if (shiv == 1) - AbstractDungeon.actionManager.addToBottom(new MakeTempCardInHandAction(new Shiv(), 1)); - else - AbstractDungeon.actionManager.addToBottom(new MakeTempCardInHandAction(new Ward(), 1)); + String gremlin = ""; + boolean isNob = false; + if(AbstractDungeon.player instanceof GremlinCharacter) { + if(((GremlinCharacter) AbstractDungeon.player).nob){ + isNob = true; + } else { + gremlin = ((GremlinCharacter) AbstractDungeon.player).currentGremlin; + } + } + + if(gremlin.equals("shield")){ + AbstractDungeon.actionManager.addToTop(new GainBlockAction(p, p, 2)); + } + + if(gremlin.equals("angry")){ + AbstractDungeon.actionManager.addToTop(new ApplyPowerAction(p, p, + new StrengthPower(p, MadGremlin.STRENGTH))); + AbstractDungeon.actionManager.addToTop(new ApplyPowerAction(p, p, + new ModifiedLoseStrengthPower(p, MadGremlin.STRENGTH))); + } + + else if(gremlin.equals("wizard")){ + AbstractDungeon.actionManager.addToTop(new ApplyPowerAction(p, p, + new WizPower(p, 1), 1)); + } else { + // AbstractDungeon.actionManager.addToBottom(new DamageAction(m, new DamageInfo(p, this.damage, + // this.damageTypeForTurn), AbstractGameAction.AttackEffect.SLASH_DIAGONAL)); + } + + if(gremlin.equals("fat")){ + for (final AbstractMonster mo : AbstractDungeon.getCurrRoom().monsters.monsters) { + if (!mo.isDeadOrEscaped()) { + AbstractDungeon.actionManager.addToTop(new ApplyPowerAction(mo, p, + new WeakPower(mo, 1, false), 1)); + } + } + } + + if(gremlin.equals("sneak")){ + AbstractDungeon.actionManager.addToTop( + new DamageRandomEnemyAction(new DamageInfo(AbstractDungeon.player, SneakyGremlin.DAMAGE, DamageInfo.DamageType.THORNS), + AbstractGameAction.AttackEffect.SLASH_DIAGONAL)); + } } } + private ArrayList updateModal(){ + if(AbstractDungeon.player != null){ + ArrayList living = new ArrayList<>(); + for(AbstractOrb orb : AbstractDungeon.player.orbs){ + if(orb instanceof GremlinStandby){ + living.add((GremlinStandby) orb); + } + } + if(living.size() == 0){ + hasOptions = false; + return new ArrayList<>(); + } + else { + hasOptions = true; + ArrayList options = new ArrayList<>(); + for(AbstractOrb grem : living){ + if(grem instanceof MadGremlin){ + options.add(new MadGremlinCard()); + } + else if(grem instanceof FatGremlin){ + options.add(new FatGremlinCard()); + } + else if(grem instanceof ShieldGremlin){ + options.add(new ShieldGremlinCard()); + } + else if(grem instanceof SneakyGremlin){ + options.add(new SneakyGremlinCard()); + } + else if(grem instanceof GremlinWizard){ + options.add(new GremlinWizardCard()); + } + } + return options; + } + } + hasOptions = false; + return new ArrayList<>(); + } + + @Override + public void applyPowers() { + updateModal(); + super.applyPowers(); + } + public void upgrade() { if (!this.upgraded) { upgradeName(); upgradeMagicNumber(UPGRADE_BONUS); + this.rawDescription = strings.UPGRADE_DESCRIPTION; + initializeDescription(); } } - @Override - public void update() { - super.update(); - if (hb.hovered) { - if (rotationTimer <= 0F) { - rotationTimer = 2F; - if (cardsList.size() == 0) { - cardsToPreview = CardLibrary.cards.get("Madness"); - } else { - cardsToPreview = cardsList.get(previewIndex); - } - if (previewIndex == cardsList.size() - 1) { - previewIndex = 0; - } else { - previewIndex++; - } - } else { - rotationTimer -= Gdx.graphics.getDeltaTime(); - } - } - } } diff --git a/src/main/java/gremlin/cards/GremlinDance.java b/src/main/java/gremlin/cards/GremlinDance.java index eb4c5b96c..d396ea6fa 100644 --- a/src/main/java/gremlin/cards/GremlinDance.java +++ b/src/main/java/gremlin/cards/GremlinDance.java @@ -37,7 +37,7 @@ public class GremlinDance extends AbstractGremlinCard { private static final int POWER = 6; private static final int BLOCK = 6; private static final int MAGIC = 2; - private static final int UPGRADE_BONUS = 3; + private static final int UPGRADE_BONUS = 2; private String gremlin; private float rotationTimer; @@ -96,6 +96,7 @@ public void use(AbstractPlayer p, AbstractMonster m) { if(gremlin.equals("angry")){ AbstractDungeon.actionManager.addToBottom(new DamageAllEnemiesAction(p, this.multiDamage, this.damageTypeForTurn, AbstractGameAction.AttackEffect.SLASH_DIAGONAL)); + } else if(gremlin.equals("wizard")){ AbstractDungeon.actionManager.addToBottom(new DamageAction(m, new DamageInfo(p, this.damage, this.damageTypeForTurn), AbstractGameAction.AttackEffect.FIRE)); @@ -137,6 +138,7 @@ public void update() { if (previewIndex == cardsList.size() - 1) { previewIndex = 0; } else { + previewIndex++; } } else { @@ -239,7 +241,8 @@ public void upgrade() { if (!this.upgraded) { upgradeName(); - upgradeDamage(UPGRADE_BONUS); + upgradeDamage(3); + upgradeBlock(3); } } diff --git a/src/main/java/gremlin/cards/GremlinOffensive.java b/src/main/java/gremlin/cards/GremlinOffensive.java index df23db363..75cccd608 100644 --- a/src/main/java/gremlin/cards/GremlinOffensive.java +++ b/src/main/java/gremlin/cards/GremlinOffensive.java @@ -25,7 +25,7 @@ public class GremlinOffensive extends AbstractGremlinCard { private static final AbstractCard.CardTarget TARGET = AbstractCard.CardTarget.ENEMY; private static final int COST = 1; - private static final int POWER = 6; + private static final int POWER = 7; private static final int UPGRADE_BONUS = 3; private boolean real = true; diff --git a/src/main/java/gremlin/cards/GremlinToss.java b/src/main/java/gremlin/cards/GremlinToss.java index 2ae4efcd3..6ec46368b 100644 --- a/src/main/java/gremlin/cards/GremlinToss.java +++ b/src/main/java/gremlin/cards/GremlinToss.java @@ -27,7 +27,7 @@ public class GremlinToss extends AbstractGremlinCard { private static final int COST = 1; private static final int POWER = 0; - private static final int MAGIC = 0; + private static final int MAGIC = 3; private static final int UPGRADE_BONUS = 3; public GremlinToss() @@ -44,9 +44,7 @@ public GremlinToss() @Override public void use(AbstractPlayer p, AbstractMonster m) { - if(upgraded) { - AbstractDungeon.actionManager.addToBottom(new AddTemporaryHPAction(p, p, magicNumber)); - } + AbstractDungeon.actionManager.addToBottom(new AddTemporaryHPAction(p, p, magicNumber)); AbstractDungeon.actionManager.addToBottom(new DamageAction(m, new DamageInfo(p, this.damage, this.damageTypeForTurn), AbstractGameAction.AttackEffect.BLUNT_HEAVY)); } @@ -100,9 +98,7 @@ public void upgrade() { if (!this.upgraded) { upgradeName(); - upgradeMagicNumber(UPGRADE_BONUS); - this.rawDescription = strings.UPGRADE_DESCRIPTION; - this.initializeDescription(); + upgradeBaseCost(0); } } } diff --git a/src/main/java/gremlin/cards/Heckle.java b/src/main/java/gremlin/cards/Heckle.java index 99cd5d4b9..4a7e638d6 100644 --- a/src/main/java/gremlin/cards/Heckle.java +++ b/src/main/java/gremlin/cards/Heckle.java @@ -19,11 +19,11 @@ public class Heckle extends AbstractGremlinCard { private static final String IMG_PATH = "cards/heckle.png"; private static final AbstractCard.CardType TYPE = CardType.POWER; - private static final AbstractCard.CardRarity RARITY = CardRarity.UNCOMMON; + private static final AbstractCard.CardRarity RARITY = CardRarity.RARE; private static final AbstractCard.CardTarget TARGET = AbstractCard.CardTarget.SELF; - private static final int COST = 3; - private static final int UPGRADE_COST = 2; + private static final int COST = 2; + private static final int UPGRADE_COST = 1; private static final int MAGIC = 2; public Heckle() diff --git a/src/main/java/gremlin/cards/IrksomeBlow.java b/src/main/java/gremlin/cards/IrksomeBlow.java index fc19aff31..c96c9ef44 100644 --- a/src/main/java/gremlin/cards/IrksomeBlow.java +++ b/src/main/java/gremlin/cards/IrksomeBlow.java @@ -24,8 +24,8 @@ public class IrksomeBlow extends AbstractGremlinCard { private static final AbstractCard.CardRarity RARITY = CardRarity.UNCOMMON; private static final AbstractCard.CardTarget TARGET = AbstractCard.CardTarget.ENEMY; - private static final int COST = 0; - private static final int POWER = 1; + private static final int COST = 1; + private static final int POWER = 5; private static final int UPGRADE_BONUS = 2; private static final int MAGIC = 4; diff --git a/src/main/java/gremlin/cards/Irritability.java b/src/main/java/gremlin/cards/Irritability.java index 290268819..58fceed5e 100644 --- a/src/main/java/gremlin/cards/Irritability.java +++ b/src/main/java/gremlin/cards/Irritability.java @@ -16,6 +16,7 @@ import gremlin.actions.GremlinSwapAction; import gremlin.orbs.MadGremlin; import guardian.powers.LoseThornsPower; +import sneckomod.SneckoMod; import static gremlin.GremlinMod.MAD_GREMLIN; @@ -42,6 +43,7 @@ public Irritability() this.magicNumber = baseMagicNumber; this.baseBlock = BLOCK; this.tags.add(MAD_GREMLIN); + this.tags.add(SneckoMod.BANNEDFORSNECKO); setBackgrounds(); GremlinMod.loadJokeCardImage(this, "Irritability.png"); } diff --git a/src/main/java/gremlin/cards/Kablamo.java b/src/main/java/gremlin/cards/Kablamo.java index ee208a1af..61a2188c3 100644 --- a/src/main/java/gremlin/cards/Kablamo.java +++ b/src/main/java/gremlin/cards/Kablamo.java @@ -23,8 +23,8 @@ public class Kablamo extends AbstractGremlinCard { private static final AbstractCard.CardTarget TARGET = CardTarget.ALL_ENEMY; private static final int COST = 2; - private static final int POWER = 13; - private static final int UPGRADE_BONUS = 4; + private static final int POWER = 4; + private static final int UPGRADE_BONUS = 2; public Kablamo() { @@ -44,6 +44,9 @@ public void use(AbstractPlayer p, AbstractMonster m) { AbstractDungeon.actionManager.addToBottom( new DamageAllEnemiesAction(p, this.multiDamage, this.damageTypeForTurn, AbstractGameAction.AttackEffect.FIRE)); + AbstractDungeon.actionManager.addToBottom( + new DamageAllEnemiesAction(p, this.multiDamage, this.damageTypeForTurn, + AbstractGameAction.AttackEffect.FIRE)); } @Override diff --git a/src/main/java/gremlin/cards/Mockery.java b/src/main/java/gremlin/cards/Mockery.java index 0d54b77c4..f939f29a8 100644 --- a/src/main/java/gremlin/cards/Mockery.java +++ b/src/main/java/gremlin/cards/Mockery.java @@ -24,7 +24,7 @@ public class Mockery extends AbstractGremlinCard { private static final AbstractCard.CardTarget TARGET = CardTarget.ENEMY; private static final int COST = 1; - private static final int BLOCK = 10; + private static final int BLOCK = 9; private static final int UPGRADE_BONUS = 3; private static final int MAGIC = 1; private static final int MAGIC_UPGRADE_BONUS = 1; diff --git a/src/main/java/gremlin/cards/Nob.java b/src/main/java/gremlin/cards/Nob.java index 827d3cec3..630d790d8 100644 --- a/src/main/java/gremlin/cards/Nob.java +++ b/src/main/java/gremlin/cards/Nob.java @@ -1,6 +1,7 @@ package gremlin.cards; import basemod.helpers.BaseModCardTags; +import basemod.patches.com.megacrit.cardcrawl.cards.AbstractCard.MultiCardPreview; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.math.MathUtils; import com.evacipated.cardcrawl.mod.stslib.actions.tempHp.AddTemporaryHPAction; @@ -8,6 +9,7 @@ import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; import com.megacrit.cardcrawl.actions.utility.SFXAction; import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.tempCards.Shiv; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; @@ -59,6 +61,7 @@ public Nob() { this.tags.add(NOB_GREMLIN); setBackgrounds(); GremlinMod.loadJokeCardImage(this, "Nob.png"); + MultiCardPreview.add(new Bellow(), new SkullBash(), new Rush()); } public void use(AbstractPlayer p, AbstractMonster m) { @@ -75,32 +78,11 @@ public void upgrade() { } } - @Override - public boolean canSpawn(ArrayList currentRewardCards) { - return AbstractDungeon.cardRandomRng.randomBoolean(); - } +// @Override +// public boolean canSpawn(ArrayList currentRewardCards) { +// return AbstractDungeon.cardRandomRng.randomBoolean(); +// } - @Override - public void update() { - super.update(); - if (hb.hovered) { - if (rotationTimer <= 0F) { - rotationTimer = 2F; - if (cardsList.size() == 0) { - cardsToPreview = CardLibrary.cards.get("Madness"); - } else { - cardsToPreview = cardsList.get(previewIndex); - } - if (previewIndex == cardsList.size() - 1) { - previewIndex = 0; - } else { - previewIndex++; - } - } else { - rotationTimer -= Gdx.graphics.getDeltaTime(); - } - } - } private void playSfx() { int roll = MathUtils.random(2); diff --git a/src/main/java/gremlin/cards/Patsy.java b/src/main/java/gremlin/cards/Patsy.java index e08f5008a..30eaffb41 100644 --- a/src/main/java/gremlin/cards/Patsy.java +++ b/src/main/java/gremlin/cards/Patsy.java @@ -9,6 +9,7 @@ import com.megacrit.cardcrawl.monsters.AbstractMonster; import gremlin.GremlinMod; import gremlin.actions.GremlinSwapAction; +import sneckomod.SneckoMod; public class Patsy extends AbstractGremlinCard { public static final String ID = getID("Patsy"); @@ -27,7 +28,7 @@ public class Patsy extends AbstractGremlinCard { public Patsy() { super(ID, NAME, IMG_PATH, COST, strings.DESCRIPTION, TYPE, RARITY, TARGET); - + this.tags.add(SneckoMod.BANNEDFORSNECKO); this.baseBlock = BLOCK; GremlinMod.loadJokeCardImage(this, "Patsy.png"); } diff --git a/src/main/java/gremlin/cards/Pickpocket.java b/src/main/java/gremlin/cards/Pickpocket.java index eeaa71cfd..7dbdc1116 100644 --- a/src/main/java/gremlin/cards/Pickpocket.java +++ b/src/main/java/gremlin/cards/Pickpocket.java @@ -9,7 +9,9 @@ import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.localization.CardStrings; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.vfx.GainPennyEffect; import gremlin.GremlinMod; +import gremlin.actions.ShackleAction; import gremlin.actions.StealArtifactAction; import static gremlin.GremlinMod.MAD_GREMLIN; @@ -24,27 +26,32 @@ public class Pickpocket extends AbstractGremlinCard { private static final AbstractCard.CardRarity RARITY = CardRarity.UNCOMMON; private static final AbstractCard.CardTarget TARGET = AbstractCard.CardTarget.ENEMY; - private static final int COST = 1; - private static final int POWER = 9; + private static final int COST = 2; + private static final int POWER = 10; + private static final int MAGIC = 10; private static final int UPGRADE_BONUS = 4; public Pickpocket() { super(ID, NAME, IMG_PATH, COST, strings.DESCRIPTION, TYPE, RARITY, TARGET); - + this.baseMagicNumber = MAGIC; + this.magicNumber = baseMagicNumber; this.baseDamage = POWER; this.exhaust = true; - this.tags.add(MAD_GREMLIN); + this.tags.add(CardTags.HEALING); setBackgrounds(); GremlinMod.loadJokeCardImage(this, "Pickpocket.png"); } @Override public void use(AbstractPlayer p, AbstractMonster m) { - AbstractDungeon.actionManager.addToBottom(new StealArtifactAction(m,p)); AbstractDungeon.actionManager.addToBottom(new DamageAction(m, new DamageInfo(p, this.damage, this.damageTypeForTurn), AbstractGameAction.AttackEffect.SLASH_DIAGONAL)); - } + AbstractDungeon.player.gainGold(magicNumber); + for (int i = 0; i < magicNumber; ++i) { + AbstractDungeon.effectList.add(new GainPennyEffect(p, p.hb.cX, p.hb.cY, p.hb.cX, p.hb.cY, true)); + } + } @Override public void upgrade() { @@ -52,6 +59,7 @@ public void upgrade() { { upgradeName(); upgradeDamage(UPGRADE_BONUS); + upgradeMagicNumber(4); } } } diff --git a/src/main/java/gremlin/cards/Polish.java b/src/main/java/gremlin/cards/Polish.java index 987993615..e9b73427b 100644 --- a/src/main/java/gremlin/cards/Polish.java +++ b/src/main/java/gremlin/cards/Polish.java @@ -1,5 +1,6 @@ package gremlin.cards; +import basemod.patches.com.megacrit.cardcrawl.cards.AbstractCard.MultiCardPreview; import com.badlogic.gdx.Gdx; import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; import com.megacrit.cardcrawl.cards.AbstractCard; @@ -35,15 +36,12 @@ public class Polish extends AbstractGremlinCard { public Polish() { super(ID, NAME, IMG_PATH, COST, strings.DESCRIPTION, TYPE, RARITY, TARGET); - - cardsList.add(new Shiv()); - cardsList.add(new Ward()); - this.baseMagicNumber = MAGIC; this.magicNumber = baseMagicNumber; this.tags.add(SHIELD_GREMLIN); setBackgrounds(); GremlinMod.loadJokeCardImage(this, "Polish.png"); + MultiCardPreview.add(this, new Shiv(), new Ward()); } public void use(AbstractPlayer p, AbstractMonster m) @@ -63,28 +61,6 @@ public void upgrade() } } - @Override - public void update() { - super.update(); - if (hb.hovered) { - if (rotationTimer <= 0F) { - rotationTimer = 2F; - if (cardsList.size() == 0) { - cardsToPreview = CardLibrary.cards.get("Madness"); - } else { - cardsToPreview = cardsList.get(previewIndex); - } - if (previewIndex == cardsList.size() - 1) { - previewIndex = 0; - } else { - previewIndex++; - } - } else { - rotationTimer -= Gdx.graphics.getDeltaTime(); - } - } - } - private float rotationTimer; private int previewIndex; private ArrayList cardsList = new ArrayList<>(); diff --git a/src/main/java/gremlin/cards/Presto.java b/src/main/java/gremlin/cards/Presto.java index 54583d046..65f48f7cd 100644 --- a/src/main/java/gremlin/cards/Presto.java +++ b/src/main/java/gremlin/cards/Presto.java @@ -26,8 +26,8 @@ public class Presto extends AbstractGremlinCard { private static final AbstractCard.CardTarget TARGET = AbstractCard.CardTarget.ENEMY; private static final int COST = 1; - private static final int POWER = 7; - private static final int UPGRADE_BONUS = 4; + private static final int POWER = 9; + private static final int UPGRADE_BONUS = 2; private static final int MAGIC = 1; private static final int UPGRADE_MAGIC = 1; diff --git a/src/main/java/gremlin/cards/Pretaliation.java b/src/main/java/gremlin/cards/Pretaliation.java index d904ac53c..e185137ad 100644 --- a/src/main/java/gremlin/cards/Pretaliation.java +++ b/src/main/java/gremlin/cards/Pretaliation.java @@ -35,17 +35,17 @@ public class Pretaliation extends AbstractGremlinCard { private static final AbstractCard.CardRarity RARITY = CardRarity.COMMON; private static final AbstractCard.CardTarget TARGET = AbstractCard.CardTarget.ENEMY; - private static final int COST = 2; - private static final int POWER = 20; + private static final int COST = 1; + private static final int POWER = 6; private static final int BLAMAGE = 5; - private static final int UPGRADE_POWER = 7; + private static final int UPGRADE_POWER = 2; public Pretaliation() { super(ID, NAME, IMG_PATH, COST, strings.DESCRIPTION, TYPE, RARITY, TARGET); this.baseDamage = POWER; - this.baseBlamage = BLAMAGE; + this.baseMagicNumber = magicNumber = 3; this.tags.add(MAD_GREMLIN); setBackgrounds(); GremlinMod.loadJokeCardImage(this, "Pretaliation.png"); @@ -53,14 +53,9 @@ public Pretaliation() @Override public void use(AbstractPlayer p, AbstractMonster m) { - if (GremlinMod.doesEnemyIntendToAttack(m)) { - AbstractDungeon.actionManager.addToBottom(new DamageAction(m, new DamageInfo(p, this.damage, - this.damageTypeForTurn), AbstractGameAction.AttackEffect.BLUNT_HEAVY)); - } else { - AbstractDungeon.actionManager.addToBottom(new DamageAction(m, new DamageInfo(p, this.blamage, - this.damageTypeForTurn), AbstractGameAction.AttackEffect.BLUNT_LIGHT)); - } -// AbstractDungeon.actionManager.addToBottom(new PretaliationAction(this.magicNumber, m)); + addToBot(new DamageAction(m, new DamageInfo(p, this.damage, this.damageTypeForTurn), AbstractGameAction.AttackEffect.SLASH_HORIZONTAL)); + addToBot(new DamageAction(m, new DamageInfo(p, this.damage, this.damageTypeForTurn), AbstractGameAction.AttackEffect.SLASH_HORIZONTAL)); + addToBot(new DamageAction(p, new DamageInfo(m, this.magicNumber, DamageInfo.DamageType.NORMAL), AbstractGameAction.AttackEffect.SLASH_DIAGONAL)); } @Override @@ -69,96 +64,7 @@ public void upgrade() { { upgradeName(); upgradeDamage(UPGRADE_POWER); - } - } - - public void applyPowers() { - super.applyPowers(); - AbstractPlayer player = AbstractDungeon.player; - this.isBlamageModifed = false; - float tmp = (float)this.baseBlamage; - Iterator var3 = player.relics.iterator(); - - while(var3.hasNext()) { - AbstractRelic r = (AbstractRelic)var3.next(); - tmp = r.atDamageModify(tmp, this); - if (this.baseBlamage != (int)tmp) { - this.isBlamageModifed = true; - } - } - - AbstractPower p; - for(var3 = player.powers.iterator(); var3.hasNext(); tmp = p.atDamageGive(tmp, this.damageTypeForTurn, this)) { - p = (AbstractPower)var3.next(); - } - - tmp = player.stance.atDamageGive(tmp, this.damageTypeForTurn, this); - if (this.baseBlamage != (int)tmp) { - this.isBlamageModifed = true; - } - - for(var3 = player.powers.iterator(); var3.hasNext(); tmp = p.atDamageFinalGive(tmp, this.damageTypeForTurn, this)) { - p = (AbstractPower)var3.next(); - } - - if (tmp < 0.0F) { - tmp = 0.0F; - } - - if (this.baseBlamage != MathUtils.floor(tmp)) { - this.isBlamageModifed = true; - } - - this.blamage = MathUtils.floor(tmp); - } - - public void calculateCardDamage(AbstractMonster mo) { - super.calculateCardDamage(mo); - AbstractPlayer player = AbstractDungeon.player; - if (mo != null) { - this.isBlamageModifed = false; - float tmp = (float)this.baseBlamage; - Iterator var9 = player.relics.iterator(); - - while(var9.hasNext()) { - AbstractRelic r = (AbstractRelic)var9.next(); - tmp = r.atDamageModify(tmp, this); - if (this.baseBlamage != (int)tmp) { - this.isBlamageModifed = true; - } - } - - AbstractPower p; - for(var9 = player.powers.iterator(); var9.hasNext(); tmp = p.atDamageGive(tmp, this.damageTypeForTurn, this)) { - p = (AbstractPower)var9.next(); - } - - tmp = player.stance.atDamageGive(tmp, this.damageTypeForTurn, this); - if (this.baseBlamage != (int)tmp) { - this.isBlamageModifed = true; - } - - for(var9 = mo.powers.iterator(); var9.hasNext(); tmp = p.atDamageReceive(tmp, this.damageTypeForTurn, this)) { - p = (AbstractPower)var9.next(); - } - - for(var9 = player.powers.iterator(); var9.hasNext(); tmp = p.atDamageFinalGive(tmp, this.damageTypeForTurn, this)) { - p = (AbstractPower)var9.next(); - } - - for(var9 = mo.powers.iterator(); var9.hasNext(); tmp = p.atDamageFinalReceive(tmp, this.damageTypeForTurn, this)) { - p = (AbstractPower)var9.next(); - } - - if (tmp < 0.0F) { - tmp = 0.0F; - } - - if (this.baseBlamage != MathUtils.floor(tmp)) { - this.isBlamageModifed = true; - } - - this.blamage = MathUtils.floor(tmp); + upgradeMagicNumber(-2); } } diff --git a/src/main/java/gremlin/cards/ProperTools.java b/src/main/java/gremlin/cards/ProperTools.java index e4a8099f4..c6f2d1412 100644 --- a/src/main/java/gremlin/cards/ProperTools.java +++ b/src/main/java/gremlin/cards/ProperTools.java @@ -1,5 +1,6 @@ package gremlin.cards; +import basemod.patches.com.megacrit.cardcrawl.cards.AbstractCard.MultiCardPreview; import com.badlogic.gdx.Gdx; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.common.DamageAction; @@ -14,6 +15,7 @@ import com.megacrit.cardcrawl.monsters.AbstractMonster; import gremlin.GremlinMod; import gremlin.actions.ProperToolsAction; +import guardian.cards.*; import java.util.ArrayList; @@ -45,10 +47,7 @@ public ProperTools() this.baseDamage = POWER; this.baseMagicNumber = MAGIC; this.magicNumber = MAGIC; - cardsList.add(new Shiv()); - cardsList.add(new Ward()); - - this.cardsToPreview = new Shiv(); + MultiCardPreview.add(this, new Shiv(), new Ward()); this.tags.add(SNEAKY_GREMLIN); setBackgrounds(); GremlinMod.loadJokeCardImage(this, "ProperTools.png"); @@ -67,28 +66,8 @@ public void upgrade() { { upgradeName(); upgradeDamage(UPGRADE_BONUS); + upgradeMagicNumber(1); } } - @Override - public void update() { - super.update(); - if (hb.hovered) { - if (rotationTimer <= 0F) { - rotationTimer = 2F; - if (cardsList.size() == 0) { - cardsToPreview = CardLibrary.cards.get("Madness"); - } else { - cardsToPreview = cardsList.get(previewIndex); - } - if (previewIndex == cardsList.size() - 1) { - previewIndex = 0; - } else { - previewIndex++; - } - } else { - rotationTimer -= Gdx.graphics.getDeltaTime(); - } - } - } } diff --git a/src/main/java/gremlin/cards/Rhythm.java b/src/main/java/gremlin/cards/Rhythm.java index f0f69b297..8ac79a8f1 100644 --- a/src/main/java/gremlin/cards/Rhythm.java +++ b/src/main/java/gremlin/cards/Rhythm.java @@ -9,6 +9,7 @@ import com.megacrit.cardcrawl.monsters.AbstractMonster; import gremlin.GremlinMod; import gremlin.actions.GremlinSwapAction; +import sneckomod.SneckoMod; import java.util.List; import java.util.function.Consumer; @@ -31,6 +32,7 @@ public Rhythm() { super(ID, NAME, IMG_PATH, COST, strings.DESCRIPTION, TYPE, RARITY, TARGET); GremlinMod.loadJokeCardImage(this, "Rhythm.png"); + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) diff --git a/src/main/java/gremlin/cards/SecondVolley.java b/src/main/java/gremlin/cards/SecondVolley.java index cec499d55..ae71d7cc8 100644 --- a/src/main/java/gremlin/cards/SecondVolley.java +++ b/src/main/java/gremlin/cards/SecondVolley.java @@ -26,7 +26,7 @@ public class SecondVolley extends AbstractGremlinCard { private static final AbstractCard.CardTarget TARGET = AbstractCard.CardTarget.ENEMY; private static final int COST = 2; - private static final int POWER = 6; + private static final int POWER = 4; public SecondVolley() { @@ -89,6 +89,7 @@ public void upgrade() { if (!this.upgraded) { upgradeName(); + upgradeDamage(2); this.rawDescription = strings.UPGRADE_DESCRIPTION; initializeDescription(); this.cardsToPreview.upgrade(); diff --git a/src/main/java/gremlin/cards/ShankStone.java b/src/main/java/gremlin/cards/ShankStone.java index 9774d16f9..0a3538493 100644 --- a/src/main/java/gremlin/cards/ShankStone.java +++ b/src/main/java/gremlin/cards/ShankStone.java @@ -19,7 +19,7 @@ public class ShankStone extends AbstractGremlinCard { private static final String IMG_PATH = "cards/shank_stone.png"; private static final AbstractCard.CardType TYPE = AbstractCard.CardType.SKILL; - private static final AbstractCard.CardRarity RARITY = CardRarity.UNCOMMON; + private static final AbstractCard.CardRarity RARITY = CardRarity.COMMON; private static final AbstractCard.CardTarget TARGET = AbstractCard.CardTarget.NONE; private static final int COST = -2; diff --git a/src/main/java/gremlin/cards/ShowStopper.java b/src/main/java/gremlin/cards/ShowStopper.java index 2bad36b60..473f65d95 100644 --- a/src/main/java/gremlin/cards/ShowStopper.java +++ b/src/main/java/gremlin/cards/ShowStopper.java @@ -27,7 +27,7 @@ public class ShowStopper extends AbstractGremlinCard { private static final AbstractCard.CardTarget TARGET = CardTarget.ALL_ENEMY; private static final int COST = 0; - private static final int POWER = 0; + private static final int POWER = 3; private static final int UPGRADE_BONUS = 2; private static final int SHOWMANSHIP = 7; @@ -36,7 +36,7 @@ public ShowStopper() super(ID, NAME, IMG_PATH, COST, strings.DESCRIPTION, TYPE, RARITY, TARGET); this.baseDamage = POWER; - + this.magicNumber = this.baseMagicNumber = 5; this.isMultiDamage = true; this.tags.add(SneckoMod.BANNEDFORSNECKO); this.tags.add(WIZARD_GREMLIN); @@ -47,10 +47,9 @@ public ShowStopper() @Override public void use(AbstractPlayer p, AbstractMonster m) { AbstractDungeon.actionManager.addToBottom(new VFXAction(new GrandFinalEffect(), 1.0F)); - for(int i=0;i<5;i++) { + for(int i=0;i getStartingDeck() { retVal.add("Gremlin:Defend"); retVal.add("Gremlin:Defend"); retVal.add("Gremlin:Defend"); + //welp, rip "draw relic means additional cards in starter deck" + //retVal.add("Gremlin:Defend"); retVal.add("Gremlin:TagTeam"); retVal.add("Gremlin:GremlinDance"); return retVal; diff --git a/src/main/java/gremlin/orbs/SneakyGremlin.java b/src/main/java/gremlin/orbs/SneakyGremlin.java index 9050366ec..efd4af090 100644 --- a/src/main/java/gremlin/orbs/SneakyGremlin.java +++ b/src/main/java/gremlin/orbs/SneakyGremlin.java @@ -5,7 +5,7 @@ import gremlin.powers.SneakyGremlinPower; public class SneakyGremlin extends GremlinStandby{ - public static final int DAMAGE = 3; + public static final int DAMAGE = 2; public SneakyGremlin(int hp) { super(hp, "Gremlin:SneakyGremlin", "sneak", "animation", 25); @@ -13,7 +13,7 @@ public SneakyGremlin(int hp) { @Override public void updateDescription() { - this.description = this.descriptions[0] + DAMAGE + this.descriptions[1]; + this.description = this.descriptions[0] + DAMAGE + this.descriptions[1] + DAMAGE + this.descriptions[2]; } @Override diff --git a/src/main/java/gremlin/patches/ApplyPowerPatch.java b/src/main/java/gremlin/patches/ApplyPowerPatch.java index b189e599c..94cd30d7c 100644 --- a/src/main/java/gremlin/patches/ApplyPowerPatch.java +++ b/src/main/java/gremlin/patches/ApplyPowerPatch.java @@ -1,6 +1,9 @@ package gremlin.patches; +import awakenedOne.relics.StrengthBooster; import basemod.ReflectionHacks; +import champ.powers.CounterPower; +import champ.relics.PowerArmor; import com.evacipated.cardcrawl.modthespire.lib.*; import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; @@ -8,6 +11,7 @@ import com.megacrit.cardcrawl.powers.AbstractPower; import com.megacrit.cardcrawl.powers.StrengthPower; import com.megacrit.cardcrawl.powers.WeakPower; +import com.megacrit.cardcrawl.powers.watcher.VigorPower; import gremlin.relics.ImpeccablePecs; import gremlin.relics.MagicalMallet; import javassist.CtBehavior; @@ -31,6 +35,29 @@ public static void patch(ApplyPowerAction __instance) { ((ImpeccablePecs)(AbstractDungeon.player.getRelic(ImpeccablePecs.ID))).onTrigger(powerToApply.amount); } } + +// if (AbstractDungeon.player.hasRelic(StrengthBooster.ID)) { +// AbstractPower powerToApply = ReflectionHacks.getPrivate(__instance, ApplyPowerAction.class, "powerToApply"); +// if (__instance.target != null && __instance.target.isPlayer && powerToApply.ID.equals(StrengthPower.POWER_ID)) { +// ((StrengthBooster)(AbstractDungeon.player.getRelic(StrengthBooster.ID))).onTrigger(powerToApply.amount); +// } +// } + +// if (AbstractDungeon.player.hasRelic(PowerArmor.ID)) { +// AbstractPower powerToApply = ReflectionHacks.getPrivate(__instance, ApplyPowerAction.class, "powerToApply"); +// if (__instance.target != null && __instance.target.isPlayer && powerToApply.ID.equals(VigorPower.POWER_ID)) { +// ((PowerArmor)(AbstractDungeon.player.getRelic(PowerArmor.ID))).onTrigger(powerToApply.amount); +// } +// } +// +// if (AbstractDungeon.player.hasRelic(PowerArmor.ID)) { +// AbstractPower powerToApply = ReflectionHacks.getPrivate(__instance, ApplyPowerAction.class, "powerToApply"); +// if (__instance.target != null && __instance.target.isPlayer && powerToApply.ID.equals(CounterPower.POWER_ID)) { +// ((PowerArmor)(AbstractDungeon.player.getRelic(PowerArmor.ID))).onTrigger2(powerToApply.amount); +// } +// } + + } public static class Locator extends SpireInsertLocator { diff --git a/src/main/java/gremlin/patches/CrippledPowerPatch.java b/src/main/java/gremlin/patches/CrippledPowerPatch.java index 2a0253b40..973a50ad0 100644 --- a/src/main/java/gremlin/patches/CrippledPowerPatch.java +++ b/src/main/java/gremlin/patches/CrippledPowerPatch.java @@ -1,19 +1,19 @@ -package gremlin.patches; - -import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; -import com.evacipated.cardcrawl.modthespire.lib.SpireReturn; -import com.megacrit.cardcrawl.powers.WeakPower; -import gremlin.powers.CrippledPower; - -@SpirePatch( - clz= WeakPower.class, - method="atEndOfRound" -) -public class CrippledPowerPatch { - public static SpireReturn Prefix(WeakPower __instance){ - if(__instance.owner.hasPower(CrippledPower.POWER_ID)){ - return SpireReturn.Return(null); - } - return SpireReturn.Continue(); - } -} +//package gremlin.patches; +// +//import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; +//import com.evacipated.cardcrawl.modthespire.lib.SpireReturn; +//import com.megacrit.cardcrawl.powers.WeakPower; +//import gremlin.powers.CrippledPower; +// +//@SpirePatch( +// clz= WeakPower.class, +// method="atEndOfRound" +//) +//public class CrippledPowerPatch { +// public static SpireReturn Prefix(WeakPower __instance){ +// if(__instance.owner.hasPower(CrippledPower.POWER_ID)){ +// return SpireReturn.Return(null); +// } +// return SpireReturn.Continue(); +// } +//} \ No newline at end of file diff --git a/src/main/java/gremlin/patches/DamageConditionalGivePatchApply.java b/src/main/java/gremlin/patches/DamageConditionalGivePatchApply.java index 342321064..d1e68b1c0 100644 --- a/src/main/java/gremlin/patches/DamageConditionalGivePatchApply.java +++ b/src/main/java/gremlin/patches/DamageConditionalGivePatchApply.java @@ -1,6 +1,8 @@ package gremlin.patches; +import awakenedOne.powers.IntensifyPower; import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import gremlin.powers.DamageConditionalGivePower; import com.evacipated.cardcrawl.modthespire.lib.ByRef; import com.evacipated.cardcrawl.modthespire.lib.SpireInsertPatch; @@ -9,6 +11,9 @@ import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.powers.AbstractPower; +import static awakenedOne.AwakenedOneMod.UP_NEXT; + + @SpirePatch(clz = AbstractCard.class, method = "applyPowers") public class DamageConditionalGivePatchApply { @SpireInsertPatch( diff --git a/src/main/java/gremlin/patches/GremlinPostBossHealPatch.java b/src/main/java/gremlin/patches/GremlinPostBossHealPatch.java index ef6722e1a..4995f647b 100644 --- a/src/main/java/gremlin/patches/GremlinPostBossHealPatch.java +++ b/src/main/java/gremlin/patches/GremlinPostBossHealPatch.java @@ -22,7 +22,15 @@ public static SpireReturn Insert() { } // Only rez 1 + // a4 and under, full rez + // a5 and up, rez 2 if (((GremlinCharacter) AbstractDungeon.player).canRez()) { + if (AbstractDungeon.ascensionLevel < 5) { + ((GremlinCharacter) AbstractDungeon.player).resurrect(multiplier); + ((GremlinCharacter) AbstractDungeon.player).resurrect(multiplier); + ((GremlinCharacter) AbstractDungeon.player).resurrect(multiplier); + } + ((GremlinCharacter) AbstractDungeon.player).resurrect(multiplier); ((GremlinCharacter) AbstractDungeon.player).resurrect(multiplier); } diff --git a/src/main/java/gremlin/potions/WizPotion.java b/src/main/java/gremlin/potions/WizPotion.java index 3d0e4584a..5fe3459bf 100644 --- a/src/main/java/gremlin/potions/WizPotion.java +++ b/src/main/java/gremlin/potions/WizPotion.java @@ -13,6 +13,8 @@ import com.megacrit.cardcrawl.powers.watcher.VigorPower; import gremlin.powers.WizPower; +import static champ.ChampMod.vigor; + public class WizPotion extends CustomPotion { public static final String POTION_ID = "gremlin:WizPotion"; private static final PotionStrings potionStrings = CardCrawlGame.languagePack.getPotionString(POTION_ID); @@ -39,8 +41,9 @@ public void initializeData() { public void use(AbstractCreature target) { - AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, - new VigorPower(AbstractDungeon.player, this.potency), this.potency)); + // AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, + //new VigorPower(AbstractDungeon.player, this.potency), this.potency)); + vigor(this.potency); } public CustomPotion makeCopy() { diff --git a/src/main/java/gremlin/powers/CrippledPower.java b/src/main/java/gremlin/powers/CrippledPower.java index 992aa9882..9acd83227 100644 --- a/src/main/java/gremlin/powers/CrippledPower.java +++ b/src/main/java/gremlin/powers/CrippledPower.java @@ -3,24 +3,28 @@ import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Texture; import com.evacipated.cardcrawl.mod.stslib.powers.interfaces.HealthBarRenderPower; +import com.evacipated.cardcrawl.mod.stslib.powers.interfaces.OnReceivePowerPower; import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.DamageAction; import com.megacrit.cardcrawl.actions.unique.PoisonLoseHpAction; +import com.megacrit.cardcrawl.cards.DamageInfo; import com.megacrit.cardcrawl.core.AbstractCreature; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.localization.PowerStrings; +import com.megacrit.cardcrawl.powers.AbstractPower; import com.megacrit.cardcrawl.powers.WeakPower; import com.megacrit.cardcrawl.rooms.AbstractRoom; import gremlin.GremlinMod; -public class CrippledPower extends AbstractGremlinPower implements HealthBarRenderPower { +public class CrippledPower extends AbstractGremlinPower implements OnReceivePowerPower { public static final String POWER_ID = getID("Crippled"); private static final PowerStrings strings = CardCrawlGame.languagePack.getPowerStrings(POWER_ID); private static final Texture IMG = new Texture(GremlinMod.getResourcePath("powers/crippled.png")); private AbstractCreature source; - public CrippledPower(AbstractCreature owner, AbstractCreature source) { + public CrippledPower(AbstractCreature owner, AbstractCreature source, int amount) { this.name = strings.NAME; this.ID = POWER_ID; this.owner = owner; @@ -28,35 +32,21 @@ public CrippledPower(AbstractCreature owner, AbstractCreature source) { this.img = IMG; this.type = PowerType.DEBUFF; - this.amount = -1; + this.amount = amount; this.updateDescription(); } - public void updateDescription() - { - this.description = strings.DESCRIPTIONS[0]; - } - - public void atEndOfTurn(boolean player) { - if (!player) { - if (AbstractDungeon.getCurrRoom().phase == AbstractRoom.RoomPhase.COMBAT && !AbstractDungeon.getMonsters().areMonstersBasicallyDead()) { - this.flashWithoutSound(); - AbstractDungeon.actionManager.addToBottom(new com.megacrit.cardcrawl.actions.common.LoseHPAction(this.owner, this.source, getHealthBarAmount(), AbstractGameAction.AttackEffect.POISON)); - } - } + public void updateDescription() { + this.description = strings.DESCRIPTIONS[0] + this.amount + strings.DESCRIPTIONS[1]; } @Override - public int getHealthBarAmount() { - if (owner.hasPower(WeakPower.POWER_ID)) { - return owner.getPower(WeakPower.POWER_ID).amount; + public boolean onReceivePower(AbstractPower power, AbstractCreature target, AbstractCreature source) { + if ((power instanceof WeakPower) && (target == this.owner) && + (!target.hasPower("Artifact"))) { + this.addToBot(new DamageAction(owner, new DamageInfo(owner, amount, DamageInfo.DamageType.HP_LOSS), AbstractGameAction.AttackEffect.POISON)); } - return 0; - } - - @Override - public Color getColor() { - return Color.YELLOW; + return true; } } diff --git a/src/main/java/gremlin/powers/ShadowShivPower.java b/src/main/java/gremlin/powers/ShadowShivPower.java index 5b6dda159..35914a4fb 100644 --- a/src/main/java/gremlin/powers/ShadowShivPower.java +++ b/src/main/java/gremlin/powers/ShadowShivPower.java @@ -40,7 +40,7 @@ public void updateDescription() @Override public void onUseCard(final AbstractCard card, final UseCardAction action) { if (card.type == AbstractCard.CardType.ATTACK && !card.exhaust) { - AbstractDungeon.actionManager.addToBottom(new MakeTempCardInHandAction(new Shiv(), this.amount)); + AbstractDungeon.actionManager.addToTop(new MakeTempCardInHandAction(new Shiv(), this.amount)); this.flash(); } } diff --git a/src/main/java/gremlin/powers/SneakyGremlinPower.java b/src/main/java/gremlin/powers/SneakyGremlinPower.java index cfff00c40..ecb1b5a69 100644 --- a/src/main/java/gremlin/powers/SneakyGremlinPower.java +++ b/src/main/java/gremlin/powers/SneakyGremlinPower.java @@ -22,7 +22,12 @@ public SneakyGremlinPower(int amount) { } public void updateDescription() { - this.description = (strings.DESCRIPTIONS[0] + this.pot + strings.DESCRIPTIONS[1]); + this.description = (strings.DESCRIPTIONS[0] + this.pot + strings.DESCRIPTIONS[1] + this.pot + strings.DESCRIPTIONS[2]); + } + + @Override + public float atDamageGive(float damage, DamageInfo.DamageType type, AbstractCard card) { + return super.atDamageGive(card.costForTurn == 0 ? damage + this.pot : damage, type, card); } @Override @@ -33,4 +38,5 @@ public void onUseCard(final AbstractCard card, final UseCardAction action) { AbstractGameAction.AttackEffect.SLASH_DIAGONAL)); } } + } diff --git a/src/main/java/gremlin/powers/WizPower.java b/src/main/java/gremlin/powers/WizPower.java index 9b1f8e51a..6ff480b3a 100644 --- a/src/main/java/gremlin/powers/WizPower.java +++ b/src/main/java/gremlin/powers/WizPower.java @@ -7,6 +7,7 @@ import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.localization.PowerStrings; import com.megacrit.cardcrawl.powers.AbstractPower; +import com.megacrit.cardcrawl.powers.BufferPower; import gremlin.GremlinMod; import gremlin.relics.WizardHat; import gremlin.relics.WizardStaff; @@ -43,14 +44,24 @@ public void updateDescription() @Override public void onInitialApplication() { - if(amount >= 3){ - if(AbstractDungeon.player.hasRelic(WizardStaff.ID)) - { - AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this.owner, this.owner, - new BangPower(this.owner, 10 + WizardStaff.OOMPH), 1)); - } else { - AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this.owner, this.owner, - new BangPower(this.owner, 10), 1)); + if(amount >= 3) { + if(!this.owner.hasPower(BangPower.POWER_ID)) { + if(AbstractDungeon.player.hasRelic(WizardStaff.ID)) + { + int buf = 0; + if (AbstractDungeon.player.hasPower(EncorePower.POWER_ID)) { + buf = AbstractDungeon.player.getPower(EncorePower.POWER_ID).amount; + } + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this.owner, this.owner, + new BangPower(this.owner, 7 + WizardStaff.OOMPH + buf), 1)); + } else { + int buf = 0; + if (AbstractDungeon.player.hasPower(EncorePower.POWER_ID)) { + buf = AbstractDungeon.player.getPower(EncorePower.POWER_ID).amount; + } + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this.owner, this.owner, + new BangPower(this.owner, 7 + buf), 1)); + } } } } @@ -58,15 +69,23 @@ public void onInitialApplication() { @Override public void stackPower(int stackAmount) { super.stackPower(stackAmount); - if(amount >= 3){ + if(amount >= 3) { if(!this.owner.hasPower(BangPower.POWER_ID)) { if(AbstractDungeon.player.hasRelic(WizardStaff.ID)) { + int buf = 0; + if (AbstractDungeon.player.hasPower(EncorePower.POWER_ID)) { + buf = AbstractDungeon.player.getPower(EncorePower.POWER_ID).amount; + } AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this.owner, this.owner, - new BangPower(this.owner, 10 + WizardStaff.OOMPH), 1)); + new BangPower(this.owner, 7 + WizardStaff.OOMPH + buf), 1)); } else { + int buf = 0; + if (AbstractDungeon.player.hasPower(EncorePower.POWER_ID)) { + buf = AbstractDungeon.player.getPower(EncorePower.POWER_ID).amount; + } AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this.owner, this.owner, - new BangPower(this.owner, 10), 1)); + new BangPower(this.owner, 7 + buf), 1)); } } } @@ -74,9 +93,9 @@ public void stackPower(int stackAmount) { @Override public void onRemove() { - if(this.owner.hasPower(EncorePower.POWER_ID)){ - this.owner.getPower(EncorePower.POWER_ID).onSpecificTrigger(); - } + // if(this.owner.hasPower(EncorePower.POWER_ID)){ + // this.owner.getPower(EncorePower.POWER_ID).onSpecificTrigger(); + // } if(AbstractDungeon.player.hasRelic(WizardHat.ID)) { AbstractDungeon.player.getRelic(WizardHat.ID).onTrigger(); } diff --git a/src/main/java/gremlin/relics/FragmentationGrenade.java b/src/main/java/gremlin/relics/FragmentationGrenade.java index 8615c3958..b67b2d83c 100644 --- a/src/main/java/gremlin/relics/FragmentationGrenade.java +++ b/src/main/java/gremlin/relics/FragmentationGrenade.java @@ -1,5 +1,6 @@ package gremlin.relics; +import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.localization.RelicStrings; import com.megacrit.cardcrawl.relics.AbstractRelic; @@ -7,7 +8,7 @@ public class FragmentationGrenade extends AbstractGremlinRelic { public static final String ID = getID("FragmentationGrenade"); private static final RelicStrings strings = CardCrawlGame.languagePack.getRelicStrings(ID); - private static final AbstractRelic.RelicTier TIER = RelicTier.COMMON; + private static final AbstractRelic.RelicTier TIER = RelicTier.UNCOMMON; private static final String IMG = "relics/fragmentation_grenade.png"; private static final AbstractRelic.LandingSound SOUND = LandingSound.CLINK; @@ -17,6 +18,10 @@ public FragmentationGrenade() { super(ID, IMG, TIER, SOUND); } +// public float atDamageModify(float damage, AbstractCard c) { +// return c.costForTurn != 0 && (!c.freeToPlayOnce || c.cost == -1) ? damage : damage + 2.0F; +// } + @Override public String getUpdatedDescription() { return strings.DESCRIPTIONS[0] + OOMPH + strings.DESCRIPTIONS[1]; diff --git a/src/main/java/gremlin/relics/ImpeccablePecs.java b/src/main/java/gremlin/relics/ImpeccablePecs.java index 8e1e1edb5..5139244d8 100644 --- a/src/main/java/gremlin/relics/ImpeccablePecs.java +++ b/src/main/java/gremlin/relics/ImpeccablePecs.java @@ -22,7 +22,10 @@ public ImpeccablePecs() { super(ID, IMG, TIER, SOUND); } - //TODO Rework this Relic at some point + // Rework this Relic at some point + // I mean I also want to rework this, it's very weird + // Removed to-do, made grems exclusive instead. Not worth the effort. + @Override public String getUpdatedDescription() { diff --git a/src/main/java/gremlin/relics/PricklyShields.java b/src/main/java/gremlin/relics/PricklyShields.java index fc5d18cab..2df10a0f7 100644 --- a/src/main/java/gremlin/relics/PricklyShields.java +++ b/src/main/java/gremlin/relics/PricklyShields.java @@ -9,6 +9,7 @@ import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.localization.RelicStrings; import com.megacrit.cardcrawl.relics.AbstractRelic; +import gremlin.actions.DamageRandomEnemyActionButItsRelicRng; public class PricklyShields extends AbstractGremlinRelic { public static final String ID = getID("PricklyShields"); @@ -35,7 +36,7 @@ public int onPlayerGainedBlock(float blockAmount) this.flash(); AbstractDungeon.actionManager.addToBottom(new RelicAboveCreatureAction(AbstractDungeon.player, this)); - AbstractDungeon.actionManager.addToBottom(new DamageRandomEnemyAction(new DamageInfo(AbstractDungeon.player, DMG_AMT, DamageInfo.DamageType.THORNS), AbstractGameAction.AttackEffect.BLUNT_LIGHT)); + AbstractDungeon.actionManager.addToBottom(new DamageRandomEnemyActionButItsRelicRng(new DamageInfo(AbstractDungeon.player, DMG_AMT, DamageInfo.DamageType.THORNS), AbstractGameAction.AttackEffect.BLUNT_LIGHT)); } return MathUtils.floor(blockAmount); } diff --git a/src/main/java/gremlin/relics/StolenMerchandise.java b/src/main/java/gremlin/relics/StolenMerchandise.java index b012b6f19..476c39d4f 100644 --- a/src/main/java/gremlin/relics/StolenMerchandise.java +++ b/src/main/java/gremlin/relics/StolenMerchandise.java @@ -10,6 +10,7 @@ import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.localization.RelicStrings; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.monsters.ending.CorruptHeart; import com.megacrit.cardcrawl.powers.StrengthPower; import com.megacrit.cardcrawl.relics.AbstractRelic; import downfall.monsters.FleeingMerchant; @@ -43,14 +44,14 @@ public void onGremlinSwap() { this.flash(); AbstractDungeon.actionManager.addToBottom(new RelicAboveCreatureAction(AbstractDungeon.player, this)); - AbstractCard colorless = AbstractDungeon.returnTrulyRandomColorlessCardInCombat().makeCopy(); + AbstractCard colorless = AbstractDungeon.returnTrulyRandomColorlessCardInCombat(AbstractDungeon.relicRng).makeCopy(); addToBot(new EchoACardAction(colorless)); } public void atBattleStart() { for (final AbstractMonster mo : AbstractDungeon.getCurrRoom().monsters.monsters) { if (!mo.isDeadOrEscaped()) { - if (mo instanceof FleeingMerchant || mo instanceof CharBossMerchant) { + if (mo instanceof FleeingMerchant || mo instanceof CharBossMerchant || mo instanceof CorruptHeart) { flash(); addToBot(new RelicAboveCreatureAction(mo, this)); AbstractDungeon.actionManager.addToBottom( diff --git a/src/main/java/gremlin/relics/SupplyScroll.java b/src/main/java/gremlin/relics/SupplyScroll.java index a62d0f98d..2512d2619 100644 --- a/src/main/java/gremlin/relics/SupplyScroll.java +++ b/src/main/java/gremlin/relics/SupplyScroll.java @@ -36,7 +36,7 @@ public void atTurnStart() { if (this.counter == 3) { this.flash(); this.addToBot(new RelicAboveCreatureAction(AbstractDungeon.player, this)); - addToBot(new GainEnergyAction(1)); + addToBot(new GainEnergyAction(2)); addToBot(new DrawCardAction(2)); this.counter = -1; diff --git a/src/main/java/gremlin/relics/WizardHat.java b/src/main/java/gremlin/relics/WizardHat.java index 7531fd91d..73cbbb040 100644 --- a/src/main/java/gremlin/relics/WizardHat.java +++ b/src/main/java/gremlin/relics/WizardHat.java @@ -9,7 +9,7 @@ public class WizardHat extends AbstractGremlinRelic { public static final String ID = getID("WizardHat"); private static final RelicStrings strings = CardCrawlGame.languagePack.getRelicStrings(ID); - private static final AbstractRelic.RelicTier TIER = RelicTier.RARE; + private static final AbstractRelic.RelicTier TIER = RelicTier.UNCOMMON; private static final String IMG = "relics/wizard_hat.png"; private static final AbstractRelic.LandingSound SOUND = LandingSound.MAGICAL; diff --git a/src/main/java/gremlin/relics/WizardStaff.java b/src/main/java/gremlin/relics/WizardStaff.java index 6d45c8d26..7ca7d878f 100644 --- a/src/main/java/gremlin/relics/WizardStaff.java +++ b/src/main/java/gremlin/relics/WizardStaff.java @@ -7,7 +7,7 @@ public class WizardStaff extends AbstractGremlinRelic { public static final String ID = getID("WizardStaff"); private static final RelicStrings strings = CardCrawlGame.languagePack.getRelicStrings(ID); - private static final AbstractRelic.RelicTier TIER = RelicTier.UNCOMMON; + private static final AbstractRelic.RelicTier TIER = RelicTier.RARE; private static final String IMG = "relics/wizard_staff.png"; private static final AbstractRelic.LandingSound SOUND = LandingSound.MAGICAL; diff --git a/src/main/java/gremlin/relics/WoundPoker.java b/src/main/java/gremlin/relics/WoundPoker.java index 7635e5192..3fa4c71f4 100644 --- a/src/main/java/gremlin/relics/WoundPoker.java +++ b/src/main/java/gremlin/relics/WoundPoker.java @@ -13,11 +13,11 @@ public class WoundPoker extends AbstractGremlinRelic { public static final String ID = getID("WoundPoker"); private static final RelicStrings strings = CardCrawlGame.languagePack.getRelicStrings(ID); - private static final AbstractRelic.RelicTier TIER = RelicTier.UNCOMMON; + private static final AbstractRelic.RelicTier TIER = RelicTier.COMMON; private static final String IMG = "relics/wound_poker.png"; private static final AbstractRelic.LandingSound SOUND = LandingSound.CLINK; - public static final int OOMPH = 6; + public static final int OOMPH = 4; public WoundPoker() { super(ID, IMG, TIER, SOUND); diff --git a/src/main/java/guardian/GuardianMod.java b/src/main/java/guardian/GuardianMod.java index 291d77455..c4908b300 100644 --- a/src/main/java/guardian/GuardianMod.java +++ b/src/main/java/guardian/GuardianMod.java @@ -157,7 +157,7 @@ public class GuardianMod implements PostDrawSubscriber, private CustomUnlockBundle unlocks4; - //TODO - content sharing if needed + //removed to-do due to content sharing being handled elsewhere /* public static Properties slimeboundDefault = new Properties(); public static boolean contentSharing_relics = true; @@ -185,7 +185,7 @@ public GuardianMod() { getResourcePath(ATTACK_CARD_PORTRAIT), getResourcePath(SKILL_CARD_PORTRAIT), getResourcePath(POWER_CARD_PORTRAIT), getResourcePath(ENERGY_ORB_PORTRAIT), getResourcePath(CARD_ENERGY_ORB)); - //TODO - Part of Settings + //Part of Settings /* slimeboundDefault.setProperty(PROP_EVENT_SHARING, "FALSE"); slimeboundDefault.setProperty(PROP_RELIC_SHARING, "FALSE"); @@ -324,43 +324,85 @@ public static String getModID() { } - public static AbstractCard getSingleRewardGemWithWeight() { - AbstractCard.CardRarity gem_rarity = AbstractDungeon.rollRarity(); - ArrayList gems = new ArrayList<>(); - gems.add(new Gem_Red()); - gems.add(new Gem_Blue()); - gems.add(new Gem_Green()); - gems.add(new Gem_Lightblue()); - gems.add(new Gem_Yellow()); - gems.add(new Gem_Purple()); - gems.add(new Gem_Fragmented()); - gems.add(new Gem_Crimson()); - gems.add(new Gem_White()); - gems.add(new Gem_Cyan()); - gems.add(new Gem_Orange()); - gems.add(new Gem_Synthetic()); - int i = AbstractDungeon.cardRng.random(gems.size()-1); - while(gems.get(i).rarity != gem_rarity){ - i = AbstractDungeon.cardRng.random(gems.size()-1); - } - return gems.get(i); - } - - public static ArrayList getRewardGemCards(boolean onlyCommon, int count) { ArrayList allGemCards = new ArrayList<>(); ArrayList rewardGemCards = new ArrayList<>(); allGemCards.add("RED"); - allGemCards.add("GREEN"); allGemCards.add("LIGHTBLUE"); + allGemCards.add("FRAGMENTED"); + if (!onlyCommon) allGemCards.add("ORANGE"); + if (!onlyCommon) allGemCards.add("CYAN"); + if (!onlyCommon) allGemCards.add("WHITE"); allGemCards.add("BLUE"); + if (!onlyCommon) allGemCards.add("CRIMSON"); + if (!onlyCommon) allGemCards.add("GREEN"); + if (!onlyCommon) allGemCards.add("PURPLE"); + if (!onlyCommon) allGemCards.add("SYNTHETIC"); + if (!onlyCommon) allGemCards.add("YELLOW"); + int rando; + String ID; + for (int i = 0; i < count; i++) { + rando = AbstractDungeon.cardRng.random(0, allGemCards.size() - 1); + ID = allGemCards.get(rando); + switch (ID) { + case "RED": + rewardGemCards.add(new Gem_Red()); + break; + case "GREEN": + rewardGemCards.add(new Gem_Green()); + break; + case "LIGHTBLUE": + rewardGemCards.add(new Gem_Lightblue()); + break; + case "ORANGE": + rewardGemCards.add(new Gem_Orange()); + break; + case "CYAN": + rewardGemCards.add(new Gem_Cyan()); + break; + case "WHITE": + rewardGemCards.add(new Gem_White()); + break; + case "BLUE": + rewardGemCards.add(new Gem_Blue()); + break; + case "CRIMSON": + rewardGemCards.add(new Gem_Crimson()); + break; + case "FRAGMENTED": + rewardGemCards.add(new Gem_Fragmented()); + break; + case "PURPLE": + rewardGemCards.add(new Gem_Purple()); + break; + case "SYNTHETIC": + rewardGemCards.add(new Gem_Synthetic()); + break; + case "YELLOW": + rewardGemCards.add(new Gem_Yellow()); + break; + } + allGemCards.remove(rando); + } + + return rewardGemCards; + } + + public static ArrayList getRewardGemCardsButRelicRng(boolean onlyCommon, int count) { + ArrayList allGemCards = new ArrayList<>(); + ArrayList rewardGemCards = new ArrayList<>(); + + allGemCards.add("RED"); + allGemCards.add("LIGHTBLUE"); + allGemCards.add("FRAGMENTED"); if (!onlyCommon) allGemCards.add("ORANGE"); if (!onlyCommon) allGemCards.add("CYAN"); if (!onlyCommon) allGemCards.add("WHITE"); + allGemCards.add("BLUE"); if (!onlyCommon) allGemCards.add("CRIMSON"); - if (!onlyCommon) allGemCards.add("FRAGMENTED"); + if (!onlyCommon) allGemCards.add("GREEN"); if (!onlyCommon) allGemCards.add("PURPLE"); if (!onlyCommon) allGemCards.add("SYNTHETIC"); if (!onlyCommon) allGemCards.add("YELLOW"); @@ -368,7 +410,7 @@ public static ArrayList getRewardGemCards(boolean onlyCommon, int int rando; String ID; for (int i = 0; i < count; i++) { - rando = AbstractDungeon.cardRng.random(0, allGemCards.size() - 1); + rando = AbstractDungeon.relicRng.random(0, allGemCards.size() - 1); ID = allGemCards.get(rando); switch (ID) { case "RED": @@ -447,7 +489,7 @@ public static boolean canSpawnStasisOrb() { return false; } - //TODO - Part of shared relics + //Part of shared relics /* public void addSharedRelics(){ if (contentSharing_relics){ @@ -562,7 +604,7 @@ public void receiveSetUnlocks() { FierceBash.ID, ChargeUp.ID, - GemFire.ID, + ShieldSpikes.ID, GemFinder.ID, StasisEngine.ID, @@ -594,6 +636,7 @@ public void receiveEditRelics() { BaseMod.addRelicToCustomPool(new StasisUpgradeRelic(), AbstractCardEnum.GUARDIAN); BaseMod.addRelicToCustomPool(new guardian.relics.StasisEgg(), AbstractCardEnum.GUARDIAN); BaseMod.addRelicToCustomPool(new guardian.relics.PickAxe(), AbstractCardEnum.GUARDIAN); + BaseMod.addRelicToCustomPool(new guardian.relics.ObsidianScales(), AbstractCardEnum.GUARDIAN); BaseMod.registerBottleRelic(BottledStasisPatch.inStasisEgg, new guardian.relics.StasisEgg()); BaseMod.addRelic(new GemstoneGun(), RelicType.SHARED); BaseMod.addRelic(new PocketSentry(), RelicType.SHARED); @@ -675,7 +718,7 @@ public void receiveEditCards() { BaseMod.addCard(new RefractedBeam()); BaseMod.addCard(new SpikerProtocol()); //BaseMod.addCard(new ArmoredProtocol()); - BaseMod.addCard(new ArmoredProtocol()); + BaseMod.addCard(new Metallicize()); BaseMod.addCard(new StrikeForStrike()); BaseMod.addCard(new EvasiveProtocol()); BaseMod.addCard(new TimeSifter()); @@ -898,7 +941,8 @@ public void receivePostInitialize() { //Act .dungeonID(TheBeyond.ID) //Only in Evil if content sharing is disabled - .spawnCondition(() -> (evilMode || downfallMod.contentSharing_events)) + //This is a guardian exclusive event that doesn't overwrite anything, it should appear in standard even without content sharing + // .spawnCondition(() -> (evilMode || downfallMod.contentSharing_events)) .create()); BaseMod.addEvent(new AddEventParams.Builder(CrystalForge.ID, CrystalForge.class) //Event ID// //Event Character// @@ -1080,7 +1124,7 @@ public void receivePostCreateStartingDeck(AbstractPlayer.PlayerClass playerClass AbstractGemCard starter_gem = (AbstractGemCard) GuardianMod.getRewardGemCards(true, 1).get(0).makeStatEquivalentCopy(); cardGroup.addToTop(starter_gem); // this adds the real save&load friendly gem on floor 0, sentences below enable the - // show-card-and-card-flies-to-deck visual effect, by adding a dummy card and remove it instantly + // show-card-and-card-flies-to-deck visual effect ,by adding a dummy card and remove it instantly AbstractGemCard dummy_starter_gem_to_be_removed = (AbstractGemCard) starter_gem.makeStatEquivalentCopy(); AbstractDungeon.effectList.add(new AddGemToStartingDeckEffect(dummy_starter_gem_to_be_removed, (Settings.WIDTH * 0.5F), (Settings.HEIGHT * 0.5F))); diff --git a/src/main/java/guardian/actions/BraceAction.java b/src/main/java/guardian/actions/BraceAction.java index 8c6aacdf9..8544a880c 100644 --- a/src/main/java/guardian/actions/BraceAction.java +++ b/src/main/java/guardian/actions/BraceAction.java @@ -55,7 +55,4 @@ public void update() { } this.isDone = true; } -} - - - +} \ No newline at end of file diff --git a/src/main/java/guardian/actions/BraceWallopAction.java b/src/main/java/guardian/actions/BraceWallopAction.java new file mode 100644 index 000000000..3ebec1fdb --- /dev/null +++ b/src/main/java/guardian/actions/BraceWallopAction.java @@ -0,0 +1,46 @@ +package guardian.actions; + +import com.evacipated.cardcrawl.mod.stslib.actions.tempHp.AddTemporaryHPAction; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.utility.WaitAction; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.vfx.combat.FlashAtkImgEffect; +import static guardian.cards.AbstractGuardianCard.brace; + + +//thorton code +public class BraceWallopAction extends AbstractGameAction { + private int damage; + + public BraceWallopAction(AbstractCreature target, AbstractCreature source, int amount, DamageInfo.DamageType type, AbstractGameAction.AttackEffect effect) { + setValues(target, source, amount); + this.damage = amount; + this.actionType = AbstractGameAction.ActionType.DAMAGE; + this.damageType = type; + this.attackEffect = effect; + } + + public void update() { + if (this.duration == 0.5F) + AbstractDungeon.effectList.add(new FlashAtkImgEffect(this.target.hb.cX, this.target.hb.cY, this.attackEffect)); + tickDuration(); + if (this.isDone) { + braceattack(); + this.target.damage(new DamageInfo(this.source, this.damage, this.damageType)); + if (AbstractDungeon.getMonsters().areMonstersBasicallyDead()) + AbstractDungeon.actionManager.clearPostCombatActions(); + AbstractDungeon.actionManager.addToTop((AbstractGameAction) new WaitAction(0.1F)); + } + } + + private void braceattack() { + int tmp = this.damage; + tmp -= this.target.currentBlock; + if (tmp > this.target.currentHealth) + tmp = this.target.currentHealth; + if (tmp > 0) + brace(tmp); + } +} \ No newline at end of file diff --git a/src/main/java/guardian/actions/CompilePackageAction.java b/src/main/java/guardian/actions/CompilePackageAction.java index 1db793e3b..d9b9ea5b6 100644 --- a/src/main/java/guardian/actions/CompilePackageAction.java +++ b/src/main/java/guardian/actions/CompilePackageAction.java @@ -39,13 +39,7 @@ public void update() { disCard.current_x = -1000.0F * Settings.scale; AbstractGuardianCard disG = (AbstractGuardianCard) disCard; disG.flipPreviewMode = true; - if (AbstractDungeon.player.hand.size() < 10) { - AbstractDungeon.effectList.add(new ShowCardAndAddToHandEffect(disCard, (float) Settings.WIDTH / 2.0F, (float) Settings.HEIGHT / 2.0F)); - } else { - AbstractDungeon.effectList.add(new ShowCardAndAddToDiscardEffect(disCard, (float) Settings.WIDTH / 2.0F, (float) Settings.HEIGHT / 2.0F)); - } - - + AbstractDungeon.actionManager.addToBottom(new PlaceActualCardIntoStasis(disCard)); AbstractDungeon.cardRewardScreen.discoveryCard = null; } diff --git a/src/main/java/guardian/actions/GemFireAction.java b/src/main/java/guardian/actions/GemFireAction.java index 015dd22ce..968ce5ab9 100644 --- a/src/main/java/guardian/actions/GemFireAction.java +++ b/src/main/java/guardian/actions/GemFireAction.java @@ -38,34 +38,34 @@ public class GemFireAction extends AbstractGameAction { private int exhaustCount; private ArrayList shots = new ArrayList<>(); - public GemFireAction(AbstractCreature target, DamageInfo info) { + public GemFireAction(AbstractCreature target) { this.info = info; this.setValues(target, info); this.actionType = ActionType.WAIT; this.attackEffect = AttackEffect.FIRE; this.startingDuration = Settings.ACTION_DUR_FAST; this.duration = this.startingDuration; + this.target = target; } - public class GemShootEffect extends AbstractGameEffect { + public static class GemShootEffect extends AbstractGameEffect { private GuardianMod.socketTypes gem; private float x1, y1, x2, y2, x3, y3, sX, sY, scaleX, scaleY; private Color glowColor; - public GemShootEffect(GuardianMod.socketTypes gem, int hitNo) { + public GemShootEffect(GuardianMod.socketTypes gem, int hitNo, AbstractCreature target, int total) { this.gem = gem; this.color = Color.WHITE.cpy(); this.duration = this.startingDuration = Settings.FAST_MODE - ? (1.0f + Settings.ACTION_DUR_XFAST * exhaustCount) - : (1.0f + Settings.ACTION_DUR_FAST * exhaustCount); + ? (1.0f + Settings.ACTION_DUR_XFAST * total) + : (1.0f + Settings.ACTION_DUR_FAST * total); this.duration += hitNo * (Settings.FAST_MODE ? 0.1 : 0.2); sX = x1 = AbstractDungeon.player.hb.cX - AbstractDungeon.player.animX; sY = y1 = AbstractDungeon.player.hb.cY - AbstractDungeon.player.animY; float theta = MathUtils.random(-1.0f, 1.0f); x2 = x1 + MathUtils.sin(theta) * 200 * Settings.xScale; y2 = y1 + MathUtils.cos(theta) * 200 * Settings.yScale; - AbstractMonster target = AbstractDungeon.getMonsters().getRandomMonster((AbstractMonster)null, true, AbstractDungeon.cardRandomRng); if (target == null) { x3 = Settings.WIDTH * 2; y3 = Settings.HEIGHT / 2f + MathUtils.random(-100f, 100f) * Settings.yScale; @@ -110,7 +110,7 @@ public void render(SpriteBatch sb) { @Override public void update() { - float deployed = this.startingDuration - 0.25f; + float deployed = this.startingDuration - 0.05f; this.duration -= Gdx.graphics.getDeltaTime(); this.rotation = this.duration * 1080.0f; @@ -148,9 +148,7 @@ public class GemFireDamageAction extends AbstractGameAction { @Override public void update() { if (this.duration == this.startDuration) { - for (GuardianMod.socketTypes socket : shots) { - addToTop(new DamageRandomEnemyAction(info, AttackEffect.SLASH_DIAGONAL)); - } + //addToTop(new DamageRandomEnemyAction(info, AttackEffect.SLASH_DIAGONAL)); this.duration = 0.0f; this.isDone = true; } @@ -159,18 +157,18 @@ public void update() { public int get_cards(){ addGemsFromGroup(AbstractDungeon.player.hand); -// addGemsFromGroup(AbstractDungeon.player.drawPile); -// addGemsFromGroup(AbstractDungeon.player.discardPile); -// addGemsFromGroup(this.gatherStasisCards()); + addGemsFromGroup(AbstractDungeon.player.drawPile); + addGemsFromGroup(AbstractDungeon.player.discardPile); + addGemsFromGroup(this.gatherStasisCards()); return exhaustCount; } public void update() { if (this.duration == this.startingDuration) { - addToTop(new GemFireDamageAction()); + //addToTop(new GemFireDamageAction()); addToTop(new AbstractGameAction() { - { duration = 0.5f; } + { duration = 0.1f; } @Override public void update() { tickDuration(); @@ -179,7 +177,7 @@ public void update() { this.get_cards(); int i = 0; for (GuardianMod.socketTypes socket : shots) { - AbstractDungeon.effectsQueue.add(new GemShootEffect(socket, i++)); + // AbstractDungeon.effectsQueue.add(new GemShootEffect(socket, i++, target)); } } @@ -226,7 +224,7 @@ private void addGemsFromGroup(CardGroup group) { } private void exhaustCard(CardGroup group, AbstractCard c) { - addToTop(new ExhaustGemAction(c, group, exhaustCount)); + // addToTop(new ExhaustGemAction(c, group, exhaustCount)); } public class ExhaustGemAction extends AbstractGameAction { diff --git a/src/main/java/guardian/actions/PlaceCardsInHandIntoStasisAction.java b/src/main/java/guardian/actions/PlaceCardsInHandIntoStasisAction.java index 2466d1932..89d23be0f 100644 --- a/src/main/java/guardian/actions/PlaceCardsInHandIntoStasisAction.java +++ b/src/main/java/guardian/actions/PlaceCardsInHandIntoStasisAction.java @@ -30,13 +30,14 @@ public PlaceCardsInHandIntoStasisAction(AbstractCreature source, int amount, boo public void update() { if (this.duration == 0.5F) { // removing Ethereal cards for Future Plans for consistency with similar affects. + // deprecated ethereal override if (this.endOfTurn) { ArrayList toMove = new ArrayList<>(); toMove.addAll(AbstractDungeon.player.hand.group); for (AbstractCard c : toMove) { if (c.isEthereal) { - AbstractDungeon.player.hand.removeCard(c); - invalidTargets.add(c); + // AbstractDungeon.player.hand.removeCard(c); + // invalidTargets.add(c); } } diff --git a/src/main/java/guardian/actions/PolyBeamAction.java b/src/main/java/guardian/actions/PolyBeamAction.java index 7a31f8440..8e96609d0 100644 --- a/src/main/java/guardian/actions/PolyBeamAction.java +++ b/src/main/java/guardian/actions/PolyBeamAction.java @@ -38,8 +38,8 @@ public void update() { AbstractDungeon.topLevelEffects.add(new SmallLaserEffect(this.target.hb.cX + (randoX * Settings.scale), this.target.hb.cY + (randoY * Settings.scale), AbstractDungeon.player.hb.cX, AbstractDungeon.player.hb.cY)); AbstractDungeon.topLevelEffects.add(new FlashAtkImgEffect(this.target.hb.cX, this.target.hb.cY, this.attackEffect)); - this.card.calculateCardDamage((AbstractMonster)this.target); - addToTop(new PseudoDamageRandomEnemyAction(target, new DamageInfo(AbstractDungeon.player, this.card.damage, this.card.damageTypeForTurn))); + // this.card.calculateCardDamage((AbstractMonster)this.target); + // addToTop(new PseudoDamageRandomEnemyAction(target, new DamageInfo(AbstractDungeon.player, this.card.damage, this.card.damageTypeForTurn))); } this.isDone = true; } diff --git a/src/main/java/guardian/cards/AbstractGemCard.java b/src/main/java/guardian/cards/AbstractGemCard.java index e9270b222..7ea3ac2e3 100644 --- a/src/main/java/guardian/cards/AbstractGemCard.java +++ b/src/main/java/guardian/cards/AbstractGemCard.java @@ -1,43 +1,43 @@ -package guardian.cards; - -import basemod.BaseMod; -import basemod.helpers.TooltipInfo; -import com.megacrit.cardcrawl.core.CardCrawlGame; -import downfall.downfallMod; -import guardian.GuardianMod; - -import java.util.ArrayList; -import java.util.List; - -public abstract class AbstractGemCard extends AbstractGuardianCard { - //private String[] descriptorStrings = CardCrawlGame.languagePack.getUIString(GuardianMod.makeID("gemDescriptor")).TEXT; - - public AbstractGemCard(String id, String name, String img, int cost, String rawDescription, CardType type, CardColor color, CardRarity rarity, CardTarget target) { - super(id, name, img, cost, rawDescription, type, color, rarity, target); - /* - if (downfallMod.disableDescriptors && !this.rawDescription.contains(descriptorStrings[1])) { - //If zht & zhs & kor need/needn't add in end you can add there if() - this.rawDescription = descriptorStrings[1] + this.rawDescription; - initializeDescription(); - } - } - - @Override - public List getCardDescriptors() { - List tags = new ArrayList<>(); - if (!downfallMod.disableDescriptors) { - tags.add(descriptorStrings[0]); - } - return tags; - } - - @Override - public List getCustomTooltipsTop() { - List tips = new ArrayList<>(); - if (!downfallMod.disableDescriptors && !keywords.contains(("guardianmod:" + descriptorStrings[0]).toLowerCase())) { - tips.add(new TooltipInfo(BaseMod.getKeywordTitle("guardianmod:gem"), BaseMod.getKeywordDescription("guardianmod:gem"))); - } - return tips; - */ - } -} +package guardian.cards; + +import basemod.BaseMod; +import basemod.helpers.TooltipInfo; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import downfall.downfallMod; +import guardian.GuardianMod; + +import java.util.ArrayList; +import java.util.List; + +public abstract class AbstractGemCard extends AbstractGuardianCard { + //private String[] descriptorStrings = CardCrawlGame.languagePack.getUIString(GuardianMod.makeID("gemDescriptor")).TEXT; + + public AbstractGemCard(String id, String name, String img, int cost, String rawDescription, CardType type, CardColor color, CardRarity rarity, CardTarget target) { + super(id, name, img, cost, rawDescription, type, color, rarity, target); + /* + if (downfallMod.disableDescriptors && !this.rawDescription.contains(descriptorStrings[1])) { + //If zht & zhs & kor need/needn't add in end you can add there if() + this.rawDescription = descriptorStrings[1] + this.rawDescription; + initializeDescription(); + } + } + + @Override + public List getCardDescriptors() { + List tags = new ArrayList<>(); + if (!downfallMod.disableDescriptors) { + tags.add(descriptorStrings[0]); + } + return tags; + } + + @Override + public List getCustomTooltipsTop() { + List tips = new ArrayList<>(); + if (!downfallMod.disableDescriptors && !keywords.contains(("guardianmod:" + descriptorStrings[0]).toLowerCase())) { + tips.add(new TooltipInfo(BaseMod.getKeywordTitle("guardianmod:gem"), BaseMod.getKeywordDescription("guardianmod:gem"))); + } + return tips; + */ + } +} diff --git a/src/main/java/guardian/cards/AncientConstruct.java b/src/main/java/guardian/cards/AncientConstruct.java index 3db29c8da..a3800f504 100644 --- a/src/main/java/guardian/cards/AncientConstruct.java +++ b/src/main/java/guardian/cards/AncientConstruct.java @@ -56,7 +56,7 @@ public AncientConstruct() { public void use(AbstractPlayer p, AbstractMonster m) { super.use(p, m); AbstractDungeon.effectsQueue.add(new com.megacrit.cardcrawl.vfx.BorderFlashEffect(com.badlogic.gdx.graphics.Color.GOLD, true)); - if (upgraded) AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, new ArtifactPower(p, 2), 2)); + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, new ArtifactPower(p, 1), 1)); //AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, new ArtifactPower(p,this.magicNumber))); AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, new ConstructPower(p, p, this.magicNumber), this.magicNumber)); @@ -71,7 +71,7 @@ public AbstractCard makeCopy() { public void upgrade() { if (!this.upgraded) { upgradeName(); - + upgradeBaseCost(2); this.rawDescription = UPGRADED_DESCRIPTION; this.initializeDescription(); diff --git a/src/main/java/guardian/cards/ArmoredProtocol.java b/src/main/java/guardian/cards/ArmoredProtocol.java index c23dc86a7..c33f5acdd 100644 --- a/src/main/java/guardian/cards/ArmoredProtocol.java +++ b/src/main/java/guardian/cards/ArmoredProtocol.java @@ -2,38 +2,38 @@ import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; -import com.megacrit.cardcrawl.actions.watcher.ChangeStanceAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.localization.CardStrings; import com.megacrit.cardcrawl.monsters.AbstractMonster; -import com.megacrit.cardcrawl.powers.MetallicizePower; import guardian.GuardianMod; import guardian.powers.BracePerTurnPower; -import guardian.stances.DefensiveMode; import guardian.patches.AbstractCardEnum; import guardian.powers.ArmoredProtocolPower; -import guardian.powers.DontLeaveDefensiveModePower; +@Deprecated public class ArmoredProtocol extends AbstractGuardianCard { public static final String ID = GuardianMod.makeID("ArmoredProtocol"); public static final String NAME; public static final String DESCRIPTION; - public static final String IMG_PATH = "cards/Metallicize.png"; + public static final String IMG_PATH = "cards/armoredScales.png"; private static final CardStrings cardStrings; private static final CardType TYPE = CardType.POWER; private static final CardRarity RARITY = CardRarity.UNCOMMON; private static final CardTarget TARGET = CardTarget.SELF; private static final int COST = 1; - private static final int METALLICIZE = 4; + //TUNING CONSTANTS + private static final int METALLICIZE = 5; private static final int SOCKETS = 0; private static final int BRACE_PER_TURN = 3; private static final boolean SOCKETSAREAFTER = true; public static String UPGRADED_DESCRIPTION; + //END TUNING CONSTANTS + static { cardStrings = CardCrawlGame.languagePack.getCardStrings(ID); NAME = cardStrings.NAME; @@ -54,6 +54,7 @@ public ArmoredProtocol() { public void use(AbstractPlayer p, AbstractMonster m) { super.use(p, m); AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, new ArmoredProtocolPower(p, magicNumber))); + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, new BracePerTurnPower(p, this.secondaryM))); } public AbstractCard makeCopy() { @@ -63,20 +64,19 @@ public AbstractCard makeCopy() { public void upgrade() { if (!this.upgraded) { upgradeName(); - upgradeBaseCost(0); -// upgradeMagicNumber(3); + upgradeMagicNumber(3); } } public void updateDescription() { -// -// if (this.socketCount > 0) { -// if (upgraded && UPGRADED_DESCRIPTION != null) { -// this.rawDescription = this.updateGemDescription(UPGRADED_DESCRIPTION, true); -// } else { -// this.rawDescription = this.updateGemDescription(DESCRIPTION, true); -// } -// } + + if (this.socketCount > 0) { + if (upgraded && UPGRADED_DESCRIPTION != null) { + this.rawDescription = this.updateGemDescription(UPGRADED_DESCRIPTION, true); + } else { + this.rawDescription = this.updateGemDescription(DESCRIPTION, true); + } + } this.initializeDescription(); } } diff --git a/src/main/java/guardian/cards/BaubleBeam.java b/src/main/java/guardian/cards/BaubleBeam.java index 06419d751..b4a995ef3 100644 --- a/src/main/java/guardian/cards/BaubleBeam.java +++ b/src/main/java/guardian/cards/BaubleBeam.java @@ -63,7 +63,7 @@ public BaubleBeam() { this.socketCount = SOCKETS; updateDescription(); loadGemMisc(); - this.tags.add(SneckoMod.BANNEDFORSNECKO); + //this.tags.add(SneckoMod.BANNEDFORSNECKO); GuardianMod.loadJokeCardImage(this, makeBetaCardPath("BaubleBeam.png")); } diff --git a/src/main/java/guardian/cards/BodySlam.java b/src/main/java/guardian/cards/BodySlam.java index 877282d18..f760ace71 100644 --- a/src/main/java/guardian/cards/BodySlam.java +++ b/src/main/java/guardian/cards/BodySlam.java @@ -1,7 +1,11 @@ package guardian.cards; +import basemod.helpers.BaseModCardTags; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.DamageAction; import com.megacrit.cardcrawl.actions.common.GainBlockAction; +import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.cards.DamageInfo; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.core.CardCrawlGame; @@ -9,6 +13,7 @@ import com.megacrit.cardcrawl.localization.CardStrings; import com.megacrit.cardcrawl.monsters.AbstractMonster; import guardian.GuardianMod; +import guardian.actions.BraceAction; import guardian.patches.AbstractCardEnum; import static guardian.GuardianMod.makeBetaCardPath; @@ -17,7 +22,7 @@ public class BodySlam extends AbstractGuardianCard { public static final String ID = GuardianMod.makeID("BodySlam"); public static final String NAME; - public static final String IMG_PATH = "cards/BodySlam.png"; + public static final String IMG_PATH = "cards/bodySlam.png"; private static final CardType TYPE = CardType.ATTACK; private static final CardRarity RARITY = CardRarity.RARE; private static final CardTarget TARGET = CardTarget.ENEMY; @@ -27,6 +32,8 @@ public class BodySlam extends AbstractGuardianCard { public static String DESCRIPTION; public static String UPGRADED_DESCRIPTION; + //END TUNING CONSTANTS + static { cardStrings = CardCrawlGame.languagePack.getCardStrings(ID); NAME = cardStrings.NAME; diff --git a/src/main/java/guardian/cards/BronzeOrb.java b/src/main/java/guardian/cards/BronzeOrb.java index 088be4808..18d2fcb40 100644 --- a/src/main/java/guardian/cards/BronzeOrb.java +++ b/src/main/java/guardian/cards/BronzeOrb.java @@ -1,6 +1,7 @@ package guardian.cards; +import collector.powers.DoomPower; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.animations.VFXAction; import com.megacrit.cardcrawl.actions.common.DamageAction; @@ -8,15 +9,18 @@ import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.cards.DamageInfo; import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.AbstractCreature; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.localization.CardStrings; import com.megacrit.cardcrawl.monsters.AbstractMonster; import guardian.GuardianMod; +import guardian.actions.BraceWallopAction; import guardian.actions.PlaceRandomCardIntoStasisAction; import guardian.patches.AbstractCardEnum; import guardian.vfx.BronzeOrbEffect; +import static collector.util.Wiz.applyToEnemy; import static guardian.GuardianMod.makeBetaCardPath; @@ -28,11 +32,11 @@ public class BronzeOrb extends AbstractGuardianCard { private static final CardRarity RARITY = CardRarity.UNCOMMON; private static final CardTarget TARGET = CardTarget.ENEMY; private static final CardStrings cardStrings; - private static final int COST = 0; - private static final int DAMAGE = 8; + private static final int COST = 2; + private static final int DAMAGE = 9; //TUNING CONSTANTS - private static final int UPGRADE_DAMAGE = 4; + private static final int UPGRADE_DAMAGE = 3; private static final int BLOCK = 5; private static final int UPGRADE_BLOCK = 2; private static final int SOCKETS = 0; @@ -54,10 +58,10 @@ public BronzeOrb() { super(ID, NAME, GuardianMod.getResourcePath(IMG_PATH), COST, DESCRIPTION, TYPE, AbstractCardEnum.GUARDIAN, RARITY, TARGET); this.baseDamage = DAMAGE; - // this.baseBlock = BLOCK; + // this.baseBlock = BLOCK; //this.sockets.add(GuardianMod.socketTypes.RED); - this.isInnate = true; + // this.isInnate = true; this.exhaust = true; this.socketCount = SOCKETS; this.tags.add(GuardianMod.BEAM); @@ -67,24 +71,13 @@ public BronzeOrb() { } - @Override - public float calculateModifiedCardDamage(AbstractPlayer player, AbstractMonster mo, float tmp) { - return tmp + calculateBeamDamage(); - } - - @Override - public float calculateModifiedCardDamage(AbstractPlayer player, float tmp) { - return tmp + calculateBeamDamage(); - } - - public void use(AbstractPlayer p, AbstractMonster m) { super.use(p, m); + AbstractDungeon.actionManager.addToBottom(new VFXAction(new BronzeOrbEffect(p, m), 0.5F)); - AbstractDungeon.actionManager.addToBottom(new PlaceRandomCardIntoStasisAction(1)); - // AbstractDungeon.actionManager.addToBottom(new GainBlockAction(p, p, this.block)); - AbstractDungeon.actionManager.addToBottom(new DamageAction(m, new DamageInfo(p, this.damage, this.damageTypeForTurn), AbstractGameAction.AttackEffect.BLUNT_HEAVY)); + AbstractDungeon.actionManager.addToBottom((AbstractGameAction)new BraceWallopAction((AbstractCreature)m, (AbstractCreature)p, this.damage, this.damageTypeForTurn, AbstractGameAction.AttackEffect.FIRE)); + this.useGems(p, m); } @@ -96,23 +89,8 @@ public void upgrade() { if (!this.upgraded) { upgradeName(); upgradeDamage(UPGRADE_DAMAGE); - // upgradeBlock(UPGRADE_BLOCK); + // upgradeBlock(UPGRADE_BLOCK); } - - - } - - public void updateDescription() { - - if (this.socketCount > 0) { - if (upgraded && UPGRADED_DESCRIPTION != null) { - this.rawDescription = this.updateGemDescription(UPGRADED_DESCRIPTION, true); - } else { - this.rawDescription = this.updateGemDescription(DESCRIPTION, true); - } - } - this.initializeDescription(); } } - diff --git a/src/main/java/guardian/cards/ChargeUp.java b/src/main/java/guardian/cards/ChargeUp.java index bdd07338a..6216f705f 100644 --- a/src/main/java/guardian/cards/ChargeUp.java +++ b/src/main/java/guardian/cards/ChargeUp.java @@ -23,7 +23,7 @@ public ChargeUp() { super(ID, cardStrings.NAME, IMG_PATH, 1, cardStrings.DESCRIPTION, CardType.SKILL, AbstractCardEnum.GUARDIAN, CardRarity.COMMON, CardTarget.SELF); this.baseBlock = 7; this.baseMagicNumber = this.magicNumber = 2; - this.socketCount = 0; + this.socketCount = 1; updateDescription(); loadGemMisc(); GuardianMod.loadJokeCardImage(this, makeBetaCardPath("ChargeUp.png")); diff --git a/src/main/java/guardian/cards/CompilePackage.java b/src/main/java/guardian/cards/CompilePackage.java index a7d2a919f..a4732937b 100644 --- a/src/main/java/guardian/cards/CompilePackage.java +++ b/src/main/java/guardian/cards/CompilePackage.java @@ -1,10 +1,13 @@ package guardian.cards; +import automaton.FunctionHelper; import automaton.cards.Batch; import automaton.cards.Debug; import automaton.cards.Decompile; +import basemod.patches.com.megacrit.cardcrawl.cards.AbstractCard.MultiCardPreview; import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.math.Interpolation; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.core.CardCrawlGame; @@ -41,12 +44,14 @@ public class CompilePackage extends AbstractGuardianCard { private float rotationTimer; private int previewIndex; private ArrayList cardsList = new ArrayList<>(); + public static final String[] TEXT; static { cardStrings = CardCrawlGame.languagePack.getCardStrings(ID); NAME = cardStrings.NAME; DESCRIPTION = cardStrings.DESCRIPTION; UPGRADED_DESCRIPTION = cardStrings.UPGRADE_DESCRIPTION; + TEXT = CardCrawlGame.languagePack.getUIString("Guardian:UIOptions").TEXT; } public CompilePackage() { @@ -57,6 +62,8 @@ public CompilePackage() { updateDescription(); loadGemMisc(); + //cardsList.add(new PackageDefect()); + cardsList.add(new PackageDefect()); cardsList.add(new PackageWalker()); cardsList.add(new PackageSphere()); @@ -64,6 +71,7 @@ public CompilePackage() { cardsList.add(new PackageSentry()); cardsList.add(new PackageDonuDeca()); cardsList.add(new PackageAutomaton()); + //MultiCardPreview.add(this, new PackageDefect(), new PackageWalker(), new PackageSphere(), new PackageShapes(), new PackageSentry(), new PackageDonuDeca(), new PackageAutomaton()); GuardianMod.loadJokeCardImage(this, makeBetaCardPath("CompilePackage.png")); } @@ -84,12 +92,16 @@ public void upgrade() { upgradeName(); this.rawDescription = UPGRADED_DESCRIPTION; this.initializeDescription(); - for(AbstractCard c:cardsList){ - c.upgrade(); - } + MultiCardPreview.multiCardPreview.get(this).forEach(AbstractCard::upgrade); } } + @Override + public boolean canUse(AbstractPlayer p, AbstractMonster m) { + this.cantUseMessage = TEXT[5]; + return AbstractDungeon.player.hasEmptyOrb(); + } + public void updateDescription() { if (this.socketCount > 0) { @@ -124,6 +136,4 @@ public void update() { } } } -} - - +} \ No newline at end of file diff --git a/src/main/java/guardian/cards/CrystalBeam.java b/src/main/java/guardian/cards/CrystalBeam.java index 3a1c8442b..1e86fdb66 100644 --- a/src/main/java/guardian/cards/CrystalBeam.java +++ b/src/main/java/guardian/cards/CrystalBeam.java @@ -122,6 +122,7 @@ public void upgrade() { if (!this.upgraded) { upgradeName(); upgradeDamage(UPGRADE_BONUS); + upgradeMagicNumber(1); } } diff --git a/src/main/java/guardian/cards/CrystalShiv.java b/src/main/java/guardian/cards/CrystalShiv.java index 194af614c..de728b459 100644 --- a/src/main/java/guardian/cards/CrystalShiv.java +++ b/src/main/java/guardian/cards/CrystalShiv.java @@ -24,7 +24,7 @@ public class CrystalShiv extends AbstractGuardianCard { private static final CardTarget TARGET = CardTarget.ENEMY; private static final CardStrings cardStrings; private static final int COST = 0; - private static final int DAMAGE = 4; + private static final int DAMAGE = 3; //TUNING CONSTANTS private static final int UPGRADE_BONUS = 2; diff --git a/src/main/java/guardian/cards/CrystalWard.java b/src/main/java/guardian/cards/CrystalWard.java index 346776724..505fe9316 100644 --- a/src/main/java/guardian/cards/CrystalWard.java +++ b/src/main/java/guardian/cards/CrystalWard.java @@ -23,7 +23,7 @@ public class CrystalWard extends AbstractGuardianCard { private static final CardTarget TARGET = CardTarget.SELF; private static final CardStrings cardStrings; private static final int COST = 0; - private static final int BLOCK = 3; + private static final int BLOCK = 4; //TUNING CONSTANTS private static final int UPGRADE_BONUS = 2; diff --git a/src/main/java/guardian/cards/DecasProtection.java b/src/main/java/guardian/cards/DecasProtection.java index 9fe80f27a..a65482be1 100644 --- a/src/main/java/guardian/cards/DecasProtection.java +++ b/src/main/java/guardian/cards/DecasProtection.java @@ -22,7 +22,7 @@ public class DecasProtection extends AbstractGuardianCard { public static final String DESCRIPTION; public static final String IMG_PATH = "cards/ancientProtection.png"; private static final CardType TYPE = CardType.SKILL; - private static final CardRarity RARITY = CardRarity.UNCOMMON; + private static final CardRarity RARITY = CardRarity.COMMON; private static final CardTarget TARGET = CardTarget.SELF; private static final CardStrings cardStrings; private static final int COST = 1; diff --git a/src/main/java/guardian/cards/DonusPower.java b/src/main/java/guardian/cards/DonusPower.java index b1a81239b..ed2620a11 100644 --- a/src/main/java/guardian/cards/DonusPower.java +++ b/src/main/java/guardian/cards/DonusPower.java @@ -49,7 +49,7 @@ public class DonusPower extends AbstractGuardianCard { public DonusPower() { super(ID, NAME, GuardianMod.getResourcePath(IMG_PATH), COST, DESCRIPTION, TYPE, AbstractCardEnum.GUARDIAN, RARITY, TARGET); - baseMagicNumber = magicNumber = 4; + baseMagicNumber = magicNumber = 2; GuardianMod.loadJokeCardImage(this, makeBetaCardPath("DonusPower.png")); } @@ -57,10 +57,7 @@ public DonusPower() { public void use(AbstractPlayer p, AbstractMonster m) { AbstractDungeon.actionManager.addToBottom(new DrawCardAction(magicNumber)); - AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, new DrawLessNextTurnPower(2), 2)); - if (upgraded){ - AbstractDungeon.actionManager.addToBottom(new ReduceDebuffsAction(AbstractDungeon.player, 1)); - } + AbstractDungeon.actionManager.addToBottom(new ReduceDebuffsAction(AbstractDungeon.player, 1)); } public AbstractCard makeCopy() { @@ -70,8 +67,7 @@ public AbstractCard makeCopy() { public void upgrade() { if (!this.upgraded) { upgradeName(); - this.rawDescription = UPGRADED_DESCRIPTION; - this.initializeDescription(); + upgradeMagicNumber(1); } } diff --git a/src/main/java/guardian/cards/Emergency.java b/src/main/java/guardian/cards/Emergency.java index 388eb84b8..47506ab53 100644 --- a/src/main/java/guardian/cards/Emergency.java +++ b/src/main/java/guardian/cards/Emergency.java @@ -9,6 +9,7 @@ import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.orbs.AbstractOrb; import guardian.GuardianMod; +import guardian.actions.AccelerateAllCardsInStasisAction; import guardian.orbs.StasisOrb; import guardian.patches.AbstractCardEnum; import sneckomod.SneckoMod; @@ -51,19 +52,10 @@ public Emergency() { public void use(AbstractPlayer p, AbstractMonster m) { super.use(p, m); - for (AbstractOrb o : p.orbs) { - if (o instanceof StasisOrb) { - int stasisCount = o.passiveAmount; - ((StasisOrb) o).stasisCard.superFlash(Color.GOLDENROD); - if(stasisCount <= 0) { - o.onStartOfTurn(); - }else { - for (int i = 0; i < stasisCount; i++) { - o.onStartOfTurn(); - } - } - break; - } + addToBot(new AccelerateAllCardsInStasisAction()); + + if (this.upgraded) { + addToBot(new AccelerateAllCardsInStasisAction()); } super.useGems(p, m); @@ -76,7 +68,7 @@ public AbstractCard makeCopy() { public void upgrade() { if (!this.upgraded) { upgradeName(); - exhaust = false; + // exhaust = false; rawDescription = UPGRADED_DESCRIPTION; initializeDescription(); } diff --git a/src/main/java/guardian/cards/EvasiveProtocol.java b/src/main/java/guardian/cards/EvasiveProtocol.java index fd312b464..4072addc9 100644 --- a/src/main/java/guardian/cards/EvasiveProtocol.java +++ b/src/main/java/guardian/cards/EvasiveProtocol.java @@ -2,15 +2,22 @@ import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.watcher.ChangeStanceAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.localization.CardStrings; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.DexterityPower; +import downfall.actions.ForceWaitAction; import guardian.GuardianMod; +import guardian.powers.BracePerTurnPower; +import guardian.stances.DefensiveMode; import guardian.patches.AbstractCardEnum; +import guardian.powers.DontLeaveDefensiveModePower; import guardian.powers.EvasiveProtocolPower; +import hermit.actions.ReduceDebuffsAction; import static guardian.GuardianMod.makeBetaCardPath; @@ -25,12 +32,15 @@ public class EvasiveProtocol extends AbstractGuardianCard { private static final CardTarget TARGET = CardTarget.SELF; private static final int COST = 1; - private static final int DEX = 2; - private static final int BRACE_PER_TURN = 3; + //TUNING CONSTANTS + private static final int DEX = 1; + private static final int BRACE_PER_TURN = 6; private static final int SOCKETS = 0; private static final boolean SOCKETSAREAFTER = true; public static String UPGRADED_DESCRIPTION; + //END TUNING CONSTANTS + static { cardStrings = CardCrawlGame.languagePack.getCardStrings(ID); NAME = cardStrings.NAME; @@ -49,12 +59,37 @@ public EvasiveProtocol() { } public void use(AbstractPlayer p, AbstractMonster m) { + + int moda = 999; + int mods = 0; super.use(p, m); + + if (AbstractDungeon.player.hasPower("Guardian:ModeShiftPower")) { + moda = AbstractDungeon.player.getPower("Guardian:ModeShiftPower").amount; + } + + if (!this.upgraded) { + brace(secondaryM); + mods = secondaryM; + } + + if (this.upgraded) { + brace(secondaryM); + mods = secondaryM; + } + + + if (p.stance instanceof DefensiveMode || mods >= moda) { + AbstractDungeon.actionManager.addToBottom(new ReduceDebuffsAction(AbstractDungeon.player, magicNumber)); + } + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, new EvasiveProtocolPower(p, magicNumber))); -// if (p.stance instanceof DefensiveMode) { -// AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, new DexterityPower(p, magicNumber), magicNumber)); -// } -// AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, new BracePerTurnPower(p, this.secondaryM))); + + // if (((moda - mods) <= 0)) { + // AbstractDungeon.actionManager.addToBottom(new ReduceDebuffsAction(AbstractDungeon.player, magicNumber)); + // } + + //AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, new BracePerTurnPower(p, this.secondaryM))); } public AbstractCard makeCopy() { @@ -64,21 +99,10 @@ public AbstractCard makeCopy() { public void upgrade() { if (!this.upgraded) { upgradeName(); -// upgradeMagicNumber(2); - upgradeBaseCost(0); + upgradeMagicNumber(1); + upgradeSecondaryM(3); } } - - public void updateDescription() { -// if (this.socketCount > 0) { -// if (upgraded && UPGRADED_DESCRIPTION != null) { -// this.rawDescription = this.updateGemDescription(UPGRADED_DESCRIPTION, true); -// } else { -// this.rawDescription = this.updateGemDescription(DESCRIPTION, true); -// } -// } - this.initializeDescription(); - } } diff --git a/src/main/java/guardian/cards/ExploitGems.java b/src/main/java/guardian/cards/ExploitGems.java index bcef66384..a3985a4f9 100644 --- a/src/main/java/guardian/cards/ExploitGems.java +++ b/src/main/java/guardian/cards/ExploitGems.java @@ -1,59 +1,50 @@ package guardian.cards; - import com.megacrit.cardcrawl.actions.common.DrawCardAction; +import com.megacrit.cardcrawl.actions.common.GainEnergyAction; import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.CardQueueItem; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.localization.CardStrings; import com.megacrit.cardcrawl.monsters.AbstractMonster; import guardian.GuardianMod; +import guardian.orbs.StasisOrb; import guardian.patches.AbstractCardEnum; +import sneckomod.SneckoMod; import static guardian.GuardianMod.makeBetaCardPath; -public class ExploitGems extends AbstractGuardianCard { +public class ExploitGems extends AbstractGuardianCard implements InStasisCard { public static final String ID = GuardianMod.makeID("ExploitGems"); - public static final String NAME; - public static final String DESCRIPTION; + private static final CardStrings cardStrings = CardCrawlGame.languagePack.getCardStrings(ID); + public static final String NAME = cardStrings.NAME; + public static final String DESCRIPTION = cardStrings.DESCRIPTION; + public static final String UPGRADED_DESCRIPTION = cardStrings.UPGRADE_DESCRIPTION; public static final String IMG_PATH = "cards/exploitGems.png"; - private static final CardStrings cardStrings; private static final CardType TYPE = CardType.SKILL; private static final CardRarity RARITY = CardRarity.RARE; private static final CardTarget TARGET = CardTarget.SELF; private static final int COST = 0; - //TUNING CONSTANTS + // Tuning Constants private static final int SOCKETS = 2; - private static final boolean SOCKETSAREAFTER = true; - public static String UPGRADED_DESCRIPTION; - - //END TUNING CONSTANTS - - static { - cardStrings = CardCrawlGame.languagePack.getCardStrings(ID); - NAME = cardStrings.NAME; - DESCRIPTION = cardStrings.DESCRIPTION; - UPGRADED_DESCRIPTION = cardStrings.UPGRADE_DESCRIPTION; - } + private static final boolean SOCKETS_ARE_AFTER = true; public ExploitGems() { super(ID, NAME, GuardianMod.getResourcePath(IMG_PATH), COST, DESCRIPTION, TYPE, AbstractCardEnum.GUARDIAN, RARITY, TARGET); - this.socketCount = SOCKETS; updateDescription(); + //this.tags.add(SneckoMod.BANNEDFORSNECKO); loadGemMisc(); GuardianMod.loadJokeCardImage(this, makeBetaCardPath("ExploitGems.png")); } public void use(AbstractPlayer p, AbstractMonster m) { - super.use(p, m); - - // if (upgraded) AbstractDungeon.actionManager.addToBottom(new GainEnergyAction(1)); AbstractDungeon.actionManager.addToBottom(new DrawCardAction(p, 1)); super.useGems(p, m); - } public AbstractCard makeCopy() { @@ -67,20 +58,13 @@ public void upgrade() { this.socketCount++; this.saveGemMisc(); } - // this.rawDescription = UPGRADED_DESCRIPTION; - - this.updateDescription(); - - + updateDescription(); } } public void updateDescription() { - this.rawDescription = this.updateGemDescription(DESCRIPTION, true); - this.initializeDescription(); } -} - +} diff --git a/src/main/java/guardian/cards/FastForward.java b/src/main/java/guardian/cards/FastForward.java index 2ebf42987..2a3ba704b 100644 --- a/src/main/java/guardian/cards/FastForward.java +++ b/src/main/java/guardian/cards/FastForward.java @@ -19,8 +19,6 @@ public class FastForward extends AbstractGuardianCard { public static final String IMG_PATH = GuardianMod.getResourcePath("cards/accelerate.png"); private static final CardStrings cardStrings; - // speed boost - public FastForward() { super(ID, cardStrings.NAME, IMG_PATH, 1, cardStrings.DESCRIPTION, CardType.SKILL, AbstractCardEnum.GUARDIAN, CardRarity.RARE, CardTarget.NONE); this.magicNumber = this.baseMagicNumber = 3; @@ -48,9 +46,10 @@ public AbstractCard makeCopy() { public void upgrade() { if (!this.upgraded) { upgradeName(); - selfRetain = true; - this.rawDescription = cardStrings.UPGRADE_DESCRIPTION; - this.initializeDescription(); +// selfRetain = true; +// this.rawDescription = cardStrings.UPGRADE_DESCRIPTION; +// this.initializeDescription(); + upgradeBaseCost(0); } } diff --git a/src/main/java/guardian/cards/FierceBash.java b/src/main/java/guardian/cards/FierceBash.java index cd96009ec..1769ed091 100644 --- a/src/main/java/guardian/cards/FierceBash.java +++ b/src/main/java/guardian/cards/FierceBash.java @@ -28,11 +28,11 @@ public class FierceBash extends AbstractGuardianCard implements InStasisCard { private static final CardRarity RARITY = CardRarity.RARE; private static final CardTarget TARGET = CardTarget.ENEMY; private static final CardStrings cardStrings; - private static final int COST = 3; + private static final int COST = 2; private static final int DAMAGE = 18; //TUNING CONSTANTS - private static final int UPGRADE_BONUS = 6; + private static final int UPGRADE_BONUS = 4; private static final int DAMAGEPERTURNINSTASIS = 2; private static final int SOCKETS = 0; private static final boolean SOCKETSAREAFTER = true; @@ -83,7 +83,8 @@ public AbstractCard makeCopy() { public void upgrade() { if (!this.upgraded) { upgradeName(); - upgradeDamage(UPGRADE_BONUS); + upgradeDamage(4); + // upgradeMagicNumber(1); } } diff --git a/src/main/java/guardian/cards/FloatingOrbs.java b/src/main/java/guardian/cards/FloatingOrbs.java index ecc8ff6e6..09a2bdfa5 100644 --- a/src/main/java/guardian/cards/FloatingOrbs.java +++ b/src/main/java/guardian/cards/FloatingOrbs.java @@ -18,7 +18,7 @@ public class FloatingOrbs extends AbstractGuardianCard { public static final String ID = GuardianMod.makeID("FloatingOrbs"); public static final String NAME; public static final String DESCRIPTION; - public static final String IMG_PATH = "cards/FloatingOrbs.png"; + public static final String IMG_PATH = "cards/floatingOrbs.png"; private static final CardStrings cardStrings; private static final CardType TYPE = CardType.POWER; private static final CardRarity RARITY = CardRarity.UNCOMMON; @@ -54,7 +54,7 @@ public AbstractCard makeCopy() { public void upgrade() { if (!this.upgraded) { upgradeName(); - upgradeMagicNumber(2); + upgradeMagicNumber(1); } } diff --git a/src/main/java/guardian/cards/FuturePlans.java b/src/main/java/guardian/cards/FuturePlans.java index 3e88d1b90..2ea6c8317 100644 --- a/src/main/java/guardian/cards/FuturePlans.java +++ b/src/main/java/guardian/cards/FuturePlans.java @@ -19,7 +19,7 @@ public class FuturePlans extends AbstractGuardianCard { private static final CardStrings cardStrings; public FuturePlans() { - super(ID, cardStrings.NAME, IMG_PATH, 1, cardStrings.DESCRIPTION, CardType.POWER, AbstractCardEnum.GUARDIAN, CardRarity.UNCOMMON, CardTarget.SELF); + super(ID, cardStrings.NAME, IMG_PATH, 1, cardStrings.DESCRIPTION, CardType.POWER, AbstractCardEnum.GUARDIAN, CardRarity.RARE, CardTarget.SELF); this.baseMagicNumber = this.magicNumber = 1; this.socketCount = 0; updateDescription(); diff --git a/src/main/java/guardian/cards/GearUp.java b/src/main/java/guardian/cards/GearUp.java index 4856102d3..7bd7db69f 100644 --- a/src/main/java/guardian/cards/GearUp.java +++ b/src/main/java/guardian/cards/GearUp.java @@ -17,7 +17,7 @@ public class GearUp extends AbstractGuardianCard { public GearUp() { super(ID, cardStrings.NAME, IMG_PATH, 1, cardStrings.DESCRIPTION, CardType.SKILL, CardColor.COLORLESS, CardRarity.SPECIAL, CardTarget.SELF); - this.baseMagicNumber = magicNumber = 15; + this.baseMagicNumber = magicNumber = 10; this.selfRetain = true; this.exhaust = true; updateDescription(); diff --git a/src/main/java/guardian/cards/GemFinder.java b/src/main/java/guardian/cards/GemFinder.java index b9ded7296..ce80c143d 100644 --- a/src/main/java/guardian/cards/GemFinder.java +++ b/src/main/java/guardian/cards/GemFinder.java @@ -11,6 +11,7 @@ import guardian.GuardianMod; import guardian.patches.AbstractCardEnum; import guardian.powers.GemFinderPower; +import sneckomod.SneckoMod; import static guardian.GuardianMod.makeBetaCardPath; @@ -23,13 +24,15 @@ public class GemFinder extends AbstractGuardianCard { private static final CardType TYPE = CardType.POWER; private static final CardRarity RARITY = CardRarity.RARE; private static final CardTarget TARGET = CardTarget.SELF; - private static final int COST = 1; + private static final int COST = 2; - private static final int UPGRADENEWCOST = 0; + //TUNING CONSTANTS + private static final int UPGRADENEWCOST = 1; private static final int SOCKETS = 0; private static final boolean SOCKETSAREAFTER = true; public static String UPGRADED_DESCRIPTION; + //END TUNING CONSTANTS static { cardStrings = CardCrawlGame.languagePack.getCardStrings(ID); @@ -40,7 +43,7 @@ public class GemFinder extends AbstractGuardianCard { public GemFinder() { super(ID, NAME, GuardianMod.getResourcePath(IMG_PATH), COST, DESCRIPTION, TYPE, AbstractCardEnum.GUARDIAN, RARITY, TARGET); - + isEthereal = true; this.baseMagicNumber = this.magicNumber = 1; this.socketCount = SOCKETS; updateDescription(); diff --git a/src/main/java/guardian/cards/GemFire.java b/src/main/java/guardian/cards/GemFire.java index d4eb525de..2abc4a52e 100644 --- a/src/main/java/guardian/cards/GemFire.java +++ b/src/main/java/guardian/cards/GemFire.java @@ -1,155 +1,211 @@ package guardian.cards; - +import collector.util.Wiz; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.actions.common.*; +import com.megacrit.cardcrawl.actions.utility.WaitAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.cards.CardGroup; import com.megacrit.cardcrawl.cards.DamageInfo; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.core.CardCrawlGame; -import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.localization.CardStrings; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.orbs.AbstractOrb; +import com.megacrit.cardcrawl.powers.*; +import downfall.actions.ForceWaitAction; import guardian.GuardianMod; import guardian.actions.GemFireAction; +import guardian.actions.ReduceRightMostStasisAction; import guardian.orbs.StasisOrb; import guardian.patches.AbstractCardEnum; +import guardian.powers.LoseThornsPower; +import hermit.actions.ReduceDebuffsAction; import sneckomod.SneckoMod; -import static guardian.GuardianMod.makeBetaCardPath; +import java.util.ArrayList; +import static collector.util.Wiz.applyToEnemy; +import static collector.util.Wiz.atb; public class GemFire extends AbstractGuardianCard { public static final String ID = GuardianMod.makeID("GemFire"); - public static final String NAME; + private static final CardStrings cardStrings = CardCrawlGame.languagePack.getCardStrings(ID); public static final String IMG_PATH = "cards/gemFire.png"; private static final CardType TYPE = CardType.ATTACK; private static final CardRarity RARITY = CardRarity.RARE; - private static final CardTarget TARGET = CardTarget.ALL_ENEMY; - private static final CardStrings cardStrings; + private static final CardTarget TARGET = CardTarget.ENEMY; private static final int COST = 2; - private static final int DAMAGE = 12; - private static int gem_count=0; + private static final int DAMAGE = 16; - private static final int UPGRADE_BONUS = 5; private static final int SOCKETS = 0; - private static final boolean SOCKETSAREAFTER = true; - public static String DESCRIPTION; - public static String UPGRADED_DESCRIPTION; - - static { - cardStrings = CardCrawlGame.languagePack.getCardStrings(ID); - NAME = cardStrings.NAME; - DESCRIPTION = cardStrings.DESCRIPTION; - UPGRADED_DESCRIPTION = cardStrings.UPGRADE_DESCRIPTION; - } - public GemFire() { - super(ID, NAME, GuardianMod.getResourcePath(IMG_PATH), COST, DESCRIPTION, TYPE, AbstractCardEnum.GUARDIAN, RARITY, TARGET); - -// this.exhaust = true; + super(ID, cardStrings.NAME, GuardianMod.getResourcePath(IMG_PATH), COST, cardStrings.DESCRIPTION, TYPE, AbstractCardEnum.GUARDIAN, RARITY, TARGET); + this.exhaust = true; this.baseDamage = DAMAGE; - magicNumber = baseMagicNumber = 0; this.socketCount = SOCKETS; + //this.tags.add(SneckoMod.BANNEDFORSNECKO); updateDescription(); loadGemMisc(); - //this.sockets.add(GuardianMod.socketTypes.RED); - this.tags.add(SneckoMod.BANNEDFORSNECKO); - GuardianMod.loadJokeCardImage(this, makeBetaCardPath("GemFire.png")); + GuardianMod.loadJokeCardImage(this, GuardianMod.makeBetaCardPath("GemFire.png")); } public void use(AbstractPlayer p, AbstractMonster m) { - super.use(p, m); - AbstractDungeon.actionManager.addToBottom(new GemFireAction(m, new DamageInfo(p, this.damage, this.damageTypeForTurn))); + // SECOND ARRAY TO AVOID CRASHING + ArrayList tempSockets = new ArrayList<>(); - } + // Collect sockets from piles and stasis + collectSocketsFromGroup(p.hand, tempSockets); + collectSocketsFromGroup(p.drawPile, tempSockets); + collectSocketsFromGroup(p.discardPile, tempSockets); + collectSocketsFromStasis(p, tempSockets); + + for (GuardianMod.socketTypes socket : tempSockets) { + + AbstractDungeon.actionManager.addToBottom(new VFXAction(new GemFireAction.GemShootEffect(socket,tempSockets.indexOf(socket),m, tempSockets.size()),0.00F)); + + //Wiz.atb(new ForceWaitAction(.1F)); + } + + if (tempSockets.size() > 0){ + Wiz.atb(new ForceWaitAction(1.25F + 0.05F*tempSockets.size())); + } - public void applyPowers() { - this.countCards(); - baseMagicNumber = magicNumber = GemFire.gem_count; - super.applyPowers(); - this.rawDescription = cardStrings.DESCRIPTION+cardStrings.UPGRADE_DESCRIPTION; - this.initializeDescription(); - } - public void countCards(){ - GemFire.gem_count=0; - count_gems_from_group(AbstractDungeon.player.hand); -// count_gems_from_group(AbstractDungeon.player.drawPile); -// count_gems_from_group(AbstractDungeon.player.discardPile); -// count_gems_from_group(this.gatherStasisCards()); + AbstractDungeon.actionManager.addToBottom(new DamageAction(m, new DamageInfo(p, this.damage, this.damageTypeForTurn), AbstractGameAction.AttackEffect.FIRE)); + + + // Process sockets (non-SYNTHETIC first, then SYNTHETIC) + ArrayList nonSyntheticSockets = new ArrayList<>(); + ArrayList syntheticSockets = new ArrayList<>(); + for (GuardianMod.socketTypes socket : tempSockets) { + if (socket == GuardianMod.socketTypes.SYNTHETIC) { + syntheticSockets.add(socket); + } else { + nonSyntheticSockets.add(socket); + } + } + nonSyntheticSockets.addAll(syntheticSockets); // Combine lists + + for (GuardianMod.socketTypes socket : nonSyntheticSockets) { + processSocket(p, m, socket); + AbstractDungeon.actionManager.addToBottom(new ForceWaitAction(0.02F)); + } } - public void count_gems_from_group(CardGroup group) { + private void collectSocketsFromGroup(CardGroup group, ArrayList tempSockets) { for (AbstractCard c : group.group) { - if (c instanceof AbstractGuardianCard) { + if (c instanceof AbstractGuardianCard && !c.hasTag(GuardianMod.GEM)) { AbstractGuardianCard gc = (AbstractGuardianCard) c; - if (gc.socketCount > 0 || c.hasTag(GuardianMod.GEM)) { - if (gc.sockets.size() > 0) { - for (GuardianMod.socketTypes socket : gc.sockets) { - if (socket != null) GemFire.gem_count++; - } - - } - if (gc.hasTag(GuardianMod.GEM)) { - GemFire.gem_count++; + tempSockets.addAll(gc.sockets); + } else if (c.hasTag(GuardianMod.GEM)) { + if (c instanceof AbstractGuardianCard) { + GuardianMod.socketTypes gemType = ((AbstractGuardianCard) c).thisGemsType; + if (gemType != null) { + tempSockets.add(gemType); } } } } } -// public CardGroup gatherStasisCards(){ -// CardGroup stasiscards = new CardGroup(CardGroup.CardGroupType.UNSPECIFIED); -// for (AbstractOrb o : AbstractDungeon.player.orbs) { -// if (o instanceof StasisOrb) { -// stasiscards.group.add( ((StasisOrb) o).stasisCard ); -// } -// } -// return stasiscards; -// } - - public AbstractCard makeCopy() { - return new GemFire(); + private void collectSocketsFromStasis(AbstractPlayer p, ArrayList tempSockets) { + for (AbstractOrb orb : p.orbs) { + if (orb instanceof StasisOrb) { + AbstractCard stasisCard = ((StasisOrb) orb).stasisCard; + if (stasisCard instanceof AbstractGuardianCard) { + AbstractGuardianCard gc = (AbstractGuardianCard) stasisCard; + tempSockets.addAll(gc.sockets); + } else if (stasisCard != null && stasisCard.hasTag(GuardianMod.GEM)) { + if (stasisCard instanceof AbstractGuardianCard) { + GuardianMod.socketTypes gemType = ((AbstractGuardianCard) stasisCard).thisGemsType; + if (gemType != null) { + tempSockets.add(gemType); + } + } + } + } + } } - public void upgrade() { - if (!this.upgraded) { - upgradeName(); - - upgradeBaseCost(1); + private void processSocket(AbstractPlayer p, AbstractMonster m, GuardianMod.socketTypes socketType) { + switch (socketType) { + case RED: + applyTemporaryPower(new StrengthPower(p, 2), new LoseStrengthPower(p, 2)); + break; + case GREEN: + applyTemporaryPower(new DexterityPower(p, 2), new LoseDexterityPower(p, 2)); + break; + case LIGHTBLUE: + applyTemporaryPower(new ThornsPower(p, 4), new LoseThornsPower(p, 4)); + break; + case ORANGE: + AbstractDungeon.actionManager.addToBottom(new GainEnergyAction(1)); + break; + case WHITE: + AbstractDungeon.actionManager.addToBottom(new DrawCardAction(p, 1)); + break; + case CYAN: + AbstractDungeon.actionManager.addToBottom(new MakeTempCardInHandAction(new CrystalWard(), 1)); + break; + case BLUE: + brace(4); + break; + case CRIMSON: + applyVulnerableToAllEnemies(p, 1); + break; + case FRAGMENTED: + AbstractDungeon.actionManager.addToBottom(new MakeTempCardInHandAction(new CrystalShiv(), 1)); + break; + case PURPLE: + weakenAllEnemies(p, 2); + break; + case SYNTHETIC: + AbstractDungeon.actionManager.addToBottom(new ReduceDebuffsAction(p, 1)); + break; + case YELLOW: + AbstractDungeon.actionManager.addToBottom(new ForceWaitAction(0.1F)); + AbstractDungeon.actionManager.addToBottom(new ReduceRightMostStasisAction()); + break; } - - } - public void updateDescription() { + private void applyTemporaryPower(AbstractPower power, AbstractPower lossPower) { + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, power, power.amount)); + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, lossPower, lossPower.amount)); + } -// if (this.socketCount > 0) { -// if (upgraded && UPGRADED_DESCRIPTION != null) { -// this.rawDescription = this.updateGemDescription(UPGRADED_DESCRIPTION, true); -// } else { -// this.rawDescription = this.updateGemDescription(DESCRIPTION, true); -// } -// } - this.initializeDescription(); + private void weakenAllEnemies(AbstractPlayer p, int amount) { + for (AbstractMonster monster : AbstractDungeon.getCurrRoom().monsters.monsters) { + applyToEnemy(monster, new StrengthPower(monster, -amount)); + if (!monster.hasPower(ArtifactPower.POWER_ID)) { + applyToEnemy(monster, new GainStrengthPower(monster, amount)); + } + } } - @Override //zhs card text thing - public void initializeDescriptionCN() { - super.initializeDescriptionCN(); - if((Settings.language == Settings.GameLanguage.ZHS || Settings.language == Settings.GameLanguage.ZHT) && this.description!=null && this.description.size()>=1 ) { - for(int i=0; i < this.description.size(); i++){ - if(this.description.get(i).text.equals(",")){ - StringBuilder sb = new StringBuilder(); - this.description.get(i-1).text = sb.append(this.description.get(i-1).text).append(",").toString(); - this.description.remove(i); - } + private void applyVulnerableToAllEnemies(AbstractPlayer p, int amount) { + for (AbstractMonster monster : AbstractDungeon.getCurrRoom().monsters.monsters) { + if (!monster.isDeadOrEscaped()) { + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(monster, p, new VulnerablePower(monster, amount, false), amount)); } } } -} + @Override + public AbstractCard makeCopy() { + return new GemFire(); + } + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + //upgradeBaseCost(1); + upgradeDamage(4); + } + } +} diff --git a/src/main/java/guardian/cards/Gem_Blue.java b/src/main/java/guardian/cards/Gem_Blue.java index 7c057bf36..ec8ae0160 100644 --- a/src/main/java/guardian/cards/Gem_Blue.java +++ b/src/main/java/guardian/cards/Gem_Blue.java @@ -50,7 +50,7 @@ public Gem_Blue() { this.tags.add(GuardianMod.GEM); this.thisGemsType = BLUE; - this.tags.add(SneckoMod.BANNEDFORSNECKO); + //this.tags.add(SneckoMod.BANNEDFORSNECKO); this.tags.add(CardTags.HEALING); GuardianMod.loadJokeCardImage(this, makeBetaCardPath("Sapphire.png")); } diff --git a/src/main/java/guardian/cards/Gem_Crimson.java b/src/main/java/guardian/cards/Gem_Crimson.java index bd9880650..d178625a4 100644 --- a/src/main/java/guardian/cards/Gem_Crimson.java +++ b/src/main/java/guardian/cards/Gem_Crimson.java @@ -50,7 +50,7 @@ public Gem_Crimson() { this.tags.add(GuardianMod.GEM); this.thisGemsType = CRIMSON; - this.tags.add(SneckoMod.BANNEDFORSNECKO); + //this.tags.add(SneckoMod.BANNEDFORSNECKO); this.tags.add(CardTags.HEALING); GuardianMod.loadJokeCardImage(this, makeBetaCardPath("Garnet.png")); } diff --git a/src/main/java/guardian/cards/Gem_Cyan.java b/src/main/java/guardian/cards/Gem_Cyan.java index 89fd8fd49..a0416d671 100644 --- a/src/main/java/guardian/cards/Gem_Cyan.java +++ b/src/main/java/guardian/cards/Gem_Cyan.java @@ -47,7 +47,7 @@ public Gem_Cyan() { this.tags.add(GuardianMod.GEM); this.thisGemsType = CYAN; - this.tags.add(SneckoMod.BANNEDFORSNECKO); + //this.tags.add(SneckoMod.BANNEDFORSNECKO); this.tags.add(CardTags.HEALING); this.cardsToPreview = new CrystalWard(); GuardianMod.loadJokeCardImage(this, makeBetaCardPath("Aquamarine.png")); diff --git a/src/main/java/guardian/cards/Gem_Fragmented.java b/src/main/java/guardian/cards/Gem_Fragmented.java index fd0d1209c..8c854efe7 100644 --- a/src/main/java/guardian/cards/Gem_Fragmented.java +++ b/src/main/java/guardian/cards/Gem_Fragmented.java @@ -21,7 +21,7 @@ public class Gem_Fragmented extends AbstractGemCard { public static final String NAME; public static final String IMG_PATH = "cards/gemFrag.png"; private static final CardType TYPE = CardType.SKILL; - private static final CardRarity RARITY = CardRarity.UNCOMMON; + private static final CardRarity RARITY = CardRarity.COMMON; private static final CardTarget TARGET = CardTarget.SELF; private static final CardStrings cardStrings; private static final int COST = 0; @@ -48,7 +48,7 @@ public Gem_Fragmented() { this.tags.add(GuardianMod.GEM); this.thisGemsType = FRAGMENTED; - this.tags.add(SneckoMod.BANNEDFORSNECKO); + //this.tags.add(SneckoMod.BANNEDFORSNECKO); this.tags.add(CardTags.HEALING); this.cardsToPreview = new CrystalShiv(); GuardianMod.loadJokeCardImage(this, makeBetaCardPath("Fragmented_Gem.png")); diff --git a/src/main/java/guardian/cards/Gem_Green.java b/src/main/java/guardian/cards/Gem_Green.java index 76c154b7f..3a7c13477 100644 --- a/src/main/java/guardian/cards/Gem_Green.java +++ b/src/main/java/guardian/cards/Gem_Green.java @@ -23,7 +23,7 @@ public class Gem_Green extends AbstractGemCard { public static final String NAME; public static final String IMG_PATH = "cards/gemGreen.png"; private static final CardType TYPE = CardType.SKILL; - private static final CardRarity RARITY = CardRarity.COMMON; + private static final CardRarity RARITY = CardRarity.UNCOMMON; private static final CardTarget TARGET = CardTarget.SELF; private static final CardStrings cardStrings; private static final int COST = 0; @@ -52,7 +52,7 @@ public Gem_Green() { this.baseMagicNumber = this.magicNumber = DAMAGEBUFF; this.tags.add(GuardianMod.GEM); this.thisGemsType = GREEN; - this.tags.add(SneckoMod.BANNEDFORSNECKO); + //this.tags.add(SneckoMod.BANNEDFORSNECKO); this.tags.add(CardTags.HEALING); GuardianMod.loadJokeCardImage(this, makeBetaCardPath("Emerald.png")); } diff --git a/src/main/java/guardian/cards/Gem_Lightblue.java b/src/main/java/guardian/cards/Gem_Lightblue.java index 57c36d519..1c284e570 100644 --- a/src/main/java/guardian/cards/Gem_Lightblue.java +++ b/src/main/java/guardian/cards/Gem_Lightblue.java @@ -30,7 +30,7 @@ public class Gem_Lightblue extends AbstractGemCard { private static final CardTarget TARGET = CardTarget.SELF; private static final CardStrings cardStrings; private static final int COST = 0; - private static final int Thorns = 2; //HARDCODED IN DESCRIPTION + private static final int Thorns = 4; //HARDCODED IN DESCRIPTION //TUNING CONSTANTS private static final int SOCKETS = 0; @@ -55,14 +55,14 @@ public Gem_Lightblue() { this.baseMagicNumber = this.magicNumber = Thorns; this.tags.add(GuardianMod.GEM); this.thisGemsType = LIGHTBLUE; - this.tags.add(SneckoMod.BANNEDFORSNECKO); + //this.tags.add(SneckoMod.BANNEDFORSNECKO); this.tags.add(CardTags.HEALING); GuardianMod.loadJokeCardImage(this, makeBetaCardPath("Tourmaline.png")); } public static void gemEffect(AbstractPlayer p, AbstractMonster m) { AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, new ThornsPower(p, Thorns), Thorns)); -// AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, new LoseThornsPower(p, Thorns), Thorns)); + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, new LoseThornsPower(p, Thorns), Thorns)); } diff --git a/src/main/java/guardian/cards/Gem_Orange.java b/src/main/java/guardian/cards/Gem_Orange.java index e9e0b02d3..51bcf9293 100644 --- a/src/main/java/guardian/cards/Gem_Orange.java +++ b/src/main/java/guardian/cards/Gem_Orange.java @@ -48,7 +48,7 @@ public Gem_Orange() { this.tags.add(GuardianMod.GEM); this.thisGemsType = ORANGE; - this.tags.add(SneckoMod.BANNEDFORSNECKO); + //this.tags.add(SneckoMod.BANNEDFORSNECKO); this.tags.add(CardTags.HEALING); GuardianMod.loadJokeCardImage(this, makeBetaCardPath("Citrine.png")); } diff --git a/src/main/java/guardian/cards/Gem_Purple.java b/src/main/java/guardian/cards/Gem_Purple.java index 6c44c8a62..aca494e77 100644 --- a/src/main/java/guardian/cards/Gem_Purple.java +++ b/src/main/java/guardian/cards/Gem_Purple.java @@ -55,7 +55,7 @@ public Gem_Purple() { this.tags.add(GuardianMod.GEM); this.thisGemsType = PURPLE; - this.tags.add(SneckoMod.BANNEDFORSNECKO); + // this.tags.add(SneckoMod.BANNEDFORSNECKO); this.tags.add(CardTags.HEALING); GuardianMod.loadJokeCardImage(this, makeBetaCardPath("Amethyst.png")); } diff --git a/src/main/java/guardian/cards/Gem_Red.java b/src/main/java/guardian/cards/Gem_Red.java index b089dce3b..cee34c652 100644 --- a/src/main/java/guardian/cards/Gem_Red.java +++ b/src/main/java/guardian/cards/Gem_Red.java @@ -52,7 +52,7 @@ public Gem_Red() { this.baseMagicNumber = this.magicNumber = DAMAGEBUFF; this.tags.add(GuardianMod.GEM); this.thisGemsType = RED; - this.tags.add(SneckoMod.BANNEDFORSNECKO); + //this.tags.add(SneckoMod.BANNEDFORSNECKO); this.tags.add(CardTags.HEALING); GuardianMod.loadJokeCardImage(this, makeBetaCardPath("Ruby.png")); } diff --git a/src/main/java/guardian/cards/Gem_Synthetic.java b/src/main/java/guardian/cards/Gem_Synthetic.java index 8af11e266..234c2de6d 100644 --- a/src/main/java/guardian/cards/Gem_Synthetic.java +++ b/src/main/java/guardian/cards/Gem_Synthetic.java @@ -45,7 +45,7 @@ public Gem_Synthetic() { this.tags.add(GuardianMod.GEM); this.thisGemsType = SYNTHETIC; - this.tags.add(SneckoMod.BANNEDFORSNECKO); + // this.tags.add(SneckoMod.BANNEDFORSNECKO); this.tags.add(CardTags.HEALING); GuardianMod.loadJokeCardImage(this, makeBetaCardPath("Onyx.png")); } diff --git a/src/main/java/guardian/cards/Gem_White.java b/src/main/java/guardian/cards/Gem_White.java index b50b5b800..1e92933ee 100644 --- a/src/main/java/guardian/cards/Gem_White.java +++ b/src/main/java/guardian/cards/Gem_White.java @@ -49,7 +49,7 @@ public Gem_White() { this.tags.add(GuardianMod.GEM); this.thisGemsType = WHITE; - this.tags.add(SneckoMod.BANNEDFORSNECKO); + // this.tags.add(SneckoMod.BANNEDFORSNECKO); this.tags.add(CardTags.HEALING); GuardianMod.loadJokeCardImage(this, makeBetaCardPath("Quartz.png")); } diff --git a/src/main/java/guardian/cards/Gem_Yellow.java b/src/main/java/guardian/cards/Gem_Yellow.java index e518b5bb6..696c49cfe 100644 --- a/src/main/java/guardian/cards/Gem_Yellow.java +++ b/src/main/java/guardian/cards/Gem_Yellow.java @@ -47,7 +47,7 @@ public Gem_Yellow() { this.tags.add(GuardianMod.GEM); this.thisGemsType = YELLOW; - this.tags.add(SneckoMod.BANNEDFORSNECKO); + // this.tags.add(SneckoMod.BANNEDFORSNECKO); this.tags.add(CardTags.HEALING); GuardianMod.loadJokeCardImage(this, makeBetaCardPath("Amber.png")); } diff --git a/src/main/java/guardian/cards/GuardianWhirl.java b/src/main/java/guardian/cards/GuardianWhirl.java index e3befbfbe..cbbad40e5 100644 --- a/src/main/java/guardian/cards/GuardianWhirl.java +++ b/src/main/java/guardian/cards/GuardianWhirl.java @@ -1,73 +1,40 @@ package guardian.cards; - import com.megacrit.cardcrawl.actions.animations.VFXAction; -import com.megacrit.cardcrawl.actions.common.ChangeStateAction; import com.megacrit.cardcrawl.actions.common.DamageAllEnemiesAction; import com.megacrit.cardcrawl.actions.utility.SFXAction; -import com.megacrit.cardcrawl.actions.watcher.ChangeStanceAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.localization.CardStrings; import com.megacrit.cardcrawl.monsters.AbstractMonster; -import com.megacrit.cardcrawl.stances.NeutralStance; import com.megacrit.cardcrawl.vfx.combat.CleaveEffect; import guardian.GuardianMod; import guardian.patches.AbstractCardEnum; -import guardian.stances.DefensiveMode; -import sneckomod.SneckoMod; +import hermit.cards.AbstractDynamicCard; import static guardian.GuardianMod.makeBetaCardPath; - public class GuardianWhirl extends AbstractGuardianCard { public static final String ID = GuardianMod.makeID("GuardianWhirl"); - public static final String NAME; public static final String IMG_PATH = "cards/guardianwhirl.png"; private static final CardType TYPE = CardType.ATTACK; private static final CardRarity RARITY = CardRarity.UNCOMMON; private static final CardTarget TARGET = CardTarget.ALL_ENEMY; - private static final CardStrings cardStrings; - private static final int COST = 1; - private static final int DAMAGE = 4; + private static final CardStrings cardStrings = CardCrawlGame.languagePack.getCardStrings(ID); - //TUNING CONSTANTS - private static final int MULTICOUNT = 4; + private static final int COST = 2; + private static final int DAMAGE = 4; + private static final int MULTICOUNT = 2; private static final int SOCKETS = 0; - private static final boolean SOCKETSAREAFTER = true; - public static String DESCRIPTION; - public static String UPGRADED_DESCRIPTION; - - //END TUNING CONSTANTS - static { - cardStrings = CardCrawlGame.languagePack.getCardStrings(ID); - NAME = cardStrings.NAME; - DESCRIPTION = cardStrings.DESCRIPTION; - UPGRADED_DESCRIPTION = cardStrings.UPGRADE_DESCRIPTION; - } - - @Override - public boolean canUse(AbstractPlayer p, AbstractMonster m) { - if (p.currentBlock >= 20) { - return super.canUse(p, m); - } else { - this.cantUseMessage = cardStrings.EXTENDED_DESCRIPTION[0]; - return false; - } - } + public static final String DESCRIPTION = cardStrings.DESCRIPTION; + public static final String UPGRADED_DESCRIPTION = cardStrings.UPGRADE_DESCRIPTION; public GuardianWhirl() { - super(ID, NAME, GuardianMod.getResourcePath(IMG_PATH), COST, DESCRIPTION, TYPE, AbstractCardEnum.GUARDIAN, RARITY, TARGET); - + super(ID, cardStrings.NAME, GuardianMod.getResourcePath(IMG_PATH), COST, DESCRIPTION, TYPE, AbstractCardEnum.GUARDIAN, RARITY, TARGET); this.baseDamage = DAMAGE; - this.tags.add(GuardianMod.MULTIHIT); - - //this.sockets.add(GuardianMod.socketTypes.RED); - - // this.tags.add(SneckoMod.BANNEDFORSNECKO); this.magicNumber = this.baseMagicNumber = MULTICOUNT; this.isMultiDamage = true; this.socketCount = SOCKETS; @@ -76,48 +43,56 @@ public GuardianWhirl() { GuardianMod.loadJokeCardImage(this, makeBetaCardPath("guardianwhirl.png")); } + @Override public void use(AbstractPlayer p, AbstractMonster m) { super.use(p, m); - - //AbstractDungeon.actionManager.addToBottom(new ChangeStanceAction(NeutralStance.STANCE_ID)); - AbstractDungeon.actionManager.addToBottom(new SFXAction("ATTACK_WHIRLWIND")); - for (int i = 0; i < this.magicNumber; i++) { - AbstractDungeon.actionManager.addToBottom(new SFXAction("ATTACK_HEAVY")); + for (int i = 0; i < 2; i++) { + AbstractDungeon.actionManager.addToBottom(new SFXAction("ATTACK_HEAVY")); AbstractDungeon.actionManager.addToBottom(new VFXAction(p, new CleaveEffect(), 0.05F)); AbstractDungeon.actionManager.addToBottom(new DamageAllEnemiesAction(p, this.multiDamage, this.damageTypeForTurn, com.megacrit.cardcrawl.actions.AbstractGameAction.AttackEffect.NONE)); + } + if (p.currentBlock >= 16) { + for (int i = 0; i < this.magicNumber; i++) { + AbstractDungeon.actionManager.addToBottom(new SFXAction("ATTACK_HEAVY")); + AbstractDungeon.actionManager.addToBottom(new VFXAction(p, new CleaveEffect(), 0.05F)); + AbstractDungeon.actionManager.addToBottom(new DamageAllEnemiesAction(p, this.multiDamage, this.damageTypeForTurn, com.megacrit.cardcrawl.actions.AbstractGameAction.AttackEffect.NONE)); + } } + this.useGems(p, m); } - public AbstractCard makeCopy() { - return new GuardianWhirl(); + @Override + public void triggerOnGlowCheck() { + this.glowColor = AbstractDynamicCard.BLUE_BORDER_GLOW_COLOR.cpy(); + if (AbstractDungeon.player.currentBlock >= 16) { + this.glowColor = AbstractDynamicCard.GOLD_BORDER_GLOW_COLOR.cpy(); + } } + @Override public void upgrade() { if (!this.upgraded) { upgradeName(); - upgradeMagicNumber(1); - - this.updateDescription(); + upgradeDamage(2); + //upgradeMagicNumber(1); + updateDescription(); } - - } + @Override public void updateDescription() { - if (this.socketCount > 0) { - if (upgraded && UPGRADED_DESCRIPTION != null) { - this.rawDescription = this.updateGemDescription(UPGRADED_DESCRIPTION, true); - } else { - this.rawDescription = this.updateGemDescription(DESCRIPTION, true); - } + this.rawDescription = upgraded && UPGRADED_DESCRIPTION != null ? updateGemDescription(UPGRADED_DESCRIPTION, true) : updateGemDescription(DESCRIPTION, true); } this.initializeDescription(); } -} - + @Override + public AbstractCard makeCopy() { + return new GuardianWhirl(); + } +} diff --git a/src/main/java/guardian/cards/Metallicize.java b/src/main/java/guardian/cards/Metallicize.java index 67743124a..412e532fe 100644 --- a/src/main/java/guardian/cards/Metallicize.java +++ b/src/main/java/guardian/cards/Metallicize.java @@ -1,48 +1,51 @@ -//package guardian.cards; -// -//import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; -//import com.megacrit.cardcrawl.cards.AbstractCard; -//import com.megacrit.cardcrawl.characters.AbstractPlayer; -//import com.megacrit.cardcrawl.core.CardCrawlGame; -//import com.megacrit.cardcrawl.core.Settings; -//import com.megacrit.cardcrawl.localization.CardStrings; -//import com.megacrit.cardcrawl.monsters.AbstractMonster; -//import com.megacrit.cardcrawl.powers.MetallicizePower; -//import guardian.GuardianMod; -//import guardian.patches.AbstractCardEnum; -// -//import static guardian.GuardianMod.makeBetaCardPath; -// -//public class Metallicize extends AbstractGuardianCard { -// public static final String ID = GuardianMod.makeID("Metallicize"); -// private static final CardStrings cardStrings; -// -// public Metallicize() { -// super(ID, cardStrings.NAME, GuardianMod.getResourcePath("cards/Metallicize.png"), 1, cardStrings.DESCRIPTION, CardType.POWER, AbstractCardEnum.GUARDIAN, CardRarity.UNCOMMON, CardTarget.SELF); -// this.baseMagicNumber = magicNumber = 3; -// GuardianMod.loadJokeCardImage(this, makeBetaCardPath("Metallicize.png")); -// } -// -// public void use(AbstractPlayer p, AbstractMonster m) { -// this.addToBot(new ApplyPowerAction(p, p, new MetallicizePower(p, this.magicNumber), this.magicNumber)); -// } -// -// public void upgrade() { -// if (!this.upgraded) { -// this.upgradeName(); -// this.upgradeMagicNumber(1); -// } -// } -// -// public AbstractCard makeCopy() { -// return new Metallicize(); -// } -// -// static { -// if( Settings.language == Settings.GameLanguage.ZHS || Settings.language == Settings.GameLanguage.ZHT ){ -// cardStrings = CardCrawlGame.languagePack.getCardStrings(GuardianMod.makeID("Metallicize")); -// }else{ -// cardStrings = CardCrawlGame.languagePack.getCardStrings("Metallicize"); -// } -// } -//} +package guardian.cards; + +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.localization.CardStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.MetallicizePower; +import com.megacrit.cardcrawl.powers.PlatedArmorPower; +import guardian.GuardianMod; +import guardian.patches.AbstractCardEnum; + +import static guardian.GuardianMod.makeBetaCardPath; + +public class Metallicize extends AbstractGuardianCard { + public static final String ID = GuardianMod.makeID("Metallicize"); + private static final CardStrings cardStrings; + + + //Harden + public Metallicize() { + super(ID, cardStrings.NAME, GuardianMod.getResourcePath("cards/Metallicize.png"), 1, cardStrings.DESCRIPTION, CardType.POWER, AbstractCardEnum.GUARDIAN, CardRarity.UNCOMMON, CardTarget.SELF); + this.baseMagicNumber = magicNumber = 4; + GuardianMod.loadJokeCardImage(this, makeBetaCardPath("Metallicize.png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + this.addToBot(new ApplyPowerAction(p, p, new PlatedArmorPower(p, this.magicNumber), this.magicNumber)); + } + + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + this.upgradeMagicNumber(2); + } + } + + public AbstractCard makeCopy() { + return new Metallicize(); + } + + static { + if( Settings.language == Settings.GameLanguage.ZHS || Settings.language == Settings.GameLanguage.ZHT ){ + cardStrings = CardCrawlGame.languagePack.getCardStrings(GuardianMod.makeID("Metallicize")); + }else{ + cardStrings = CardCrawlGame.languagePack.getCardStrings(GuardianMod.makeID("Metallicize")); + } + } +} diff --git a/src/main/java/guardian/cards/ModeShift.java b/src/main/java/guardian/cards/ModeShift.java index 705c8d03e..173fac988 100644 --- a/src/main/java/guardian/cards/ModeShift.java +++ b/src/main/java/guardian/cards/ModeShift.java @@ -25,12 +25,15 @@ public class ModeShift extends AbstractGuardianCard { private static final int COST = 1; private static final int DAMAGE = 4; + //TUNING CONSTANTS private static final int UPGRADE_BONUS = 2; private static final int SOCKETS = 0; private static final boolean SOCKETSAREAFTER = true; public static String DESCRIPTION; public static String UPGRADED_DESCRIPTION; + //END TUNING CONSTANTS + static { cardStrings = CardCrawlGame.languagePack.getCardStrings(ID); NAME = cardStrings.NAME; diff --git a/src/main/java/guardian/cards/MultiBeam.java b/src/main/java/guardian/cards/MultiBeam.java index 4df8100fb..7ac0e1137 100644 --- a/src/main/java/guardian/cards/MultiBeam.java +++ b/src/main/java/guardian/cards/MultiBeam.java @@ -29,11 +29,11 @@ public class MultiBeam extends AbstractGuardianCard implements InStasisCard { private static final CardTarget TARGET = CardTarget.ALL_ENEMY; private static final CardStrings cardStrings; private static final int COST = -1; - private static final int DAMAGE = 5; + private static final int DAMAGE = 6; //TUNING CONSTANTS private static final int UPGRADE_DAMAGE = 2; - private static final int BEAMBUFF = 1; + private static final int BEAMBUFF = 2; private static final int UPGRADE_BEAMBUFF = 1; private static final int SOCKETS = 0; private static final boolean SOCKETSAREAFTER = true; diff --git a/src/main/java/guardian/cards/Orbwalk.java b/src/main/java/guardian/cards/Orbwalk.java index faf6b50c0..23db49bc8 100644 --- a/src/main/java/guardian/cards/Orbwalk.java +++ b/src/main/java/guardian/cards/Orbwalk.java @@ -19,7 +19,7 @@ public class Orbwalk extends AbstractGuardianCard implements InStasisCard { public static final String ID = GuardianMod.makeID("Orbwalk"); public static final String NAME; public static final String DESCRIPTION; - public static final String IMG_PATH = "cards/Orbwalk.png"; + public static final String IMG_PATH = "cards/orbwalk.png"; private static final CardStrings cardStrings; private static final CardType TYPE = CardType.POWER; private static final CardRarity RARITY = CardRarity.UNCOMMON; @@ -44,7 +44,7 @@ public class Orbwalk extends AbstractGuardianCard implements InStasisCard { public Orbwalk() { super(ID, NAME, GuardianMod.getResourcePath(IMG_PATH), COST, DESCRIPTION, TYPE, AbstractCardEnum.GUARDIAN, RARITY, TARGET); - this.baseMagicNumber = this.magicNumber = 2; + this.baseMagicNumber = this.magicNumber = 3; this.tags.add(GuardianMod.TICK); this.tags.add(GuardianMod.VOLATILE); this.socketCount = SOCKETS; diff --git a/src/main/java/guardian/cards/PackageAutomaton.java b/src/main/java/guardian/cards/PackageAutomaton.java index 4c23221d7..e828222c8 100644 --- a/src/main/java/guardian/cards/PackageAutomaton.java +++ b/src/main/java/guardian/cards/PackageAutomaton.java @@ -25,7 +25,7 @@ public class PackageAutomaton extends AbstractGuardianCard { private static final CardType TYPE = CardType.SKILL; private static final CardRarity RARITY = CardRarity.SPECIAL; private static final CardTarget TARGET = CardTarget.SELF; - private static final int COST = 0; + private static final int COST = 1; //TUNING CONSTANTS private static final int SOCKETS = 0; diff --git a/src/main/java/guardian/cards/PackageDefect.java b/src/main/java/guardian/cards/PackageDefect.java index 00259c82e..a6b98af69 100644 --- a/src/main/java/guardian/cards/PackageDefect.java +++ b/src/main/java/guardian/cards/PackageDefect.java @@ -25,7 +25,7 @@ public class PackageDefect extends AbstractGuardianCard { private static final CardType TYPE = CardType.SKILL; private static final CardRarity RARITY = CardRarity.SPECIAL; private static final CardTarget TARGET = CardTarget.SELF; - private static final int COST = 0; + private static final int COST = 1; //TUNING CONSTANTS private static final int SOCKETS = 0; diff --git a/src/main/java/guardian/cards/PackageDonuDeca.java b/src/main/java/guardian/cards/PackageDonuDeca.java index e7b40e217..0de699722 100644 --- a/src/main/java/guardian/cards/PackageDonuDeca.java +++ b/src/main/java/guardian/cards/PackageDonuDeca.java @@ -26,7 +26,7 @@ public class PackageDonuDeca extends AbstractGuardianCard { private static final CardType TYPE = CardType.SKILL; private static final CardRarity RARITY = CardRarity.SPECIAL; private static final CardTarget TARGET = CardTarget.SELF; - private static final int COST = 0; + private static final int COST = 2; //TUNING CONSTANTS private static final int SOCKETS = 0; diff --git a/src/main/java/guardian/cards/PackageSentry.java b/src/main/java/guardian/cards/PackageSentry.java index 94d5f5a60..355219a59 100644 --- a/src/main/java/guardian/cards/PackageSentry.java +++ b/src/main/java/guardian/cards/PackageSentry.java @@ -26,7 +26,7 @@ public class PackageSentry extends AbstractGuardianCard { private static final CardType TYPE = CardType.SKILL; private static final CardRarity RARITY = CardRarity.SPECIAL; private static final CardTarget TARGET = CardTarget.SELF; - private static final int COST = 0; + private static final int COST = 1; //TUNING CONSTANTS private static final int SOCKETS = 0; diff --git a/src/main/java/guardian/cards/PackageSphere.java b/src/main/java/guardian/cards/PackageSphere.java index db6641b78..1287478a0 100644 --- a/src/main/java/guardian/cards/PackageSphere.java +++ b/src/main/java/guardian/cards/PackageSphere.java @@ -23,17 +23,19 @@ public class PackageSphere extends AbstractGuardianCard { private static final CardType TYPE = CardType.SKILL; private static final CardRarity RARITY = CardRarity.SPECIAL; private static final CardTarget TARGET = CardTarget.SELF; - private static final int COST = 0; + private static final int COST = 2; //TUNING CONSTANTS private static final int SOCKETS = 0; private static final boolean SOCKETSAREAFTER = true; public static String UPGRADED_DESCRIPTION; + //END TUNING CONSTANTS + public AbstractGuardianCard constPrev1 = new SphericShield(); public AbstractGuardianCard constPrev2 = new FloatingOrbs(); - public AbstractGuardianCard constPrev3 = new ArmoredProtocol(); + public AbstractGuardianCard constPrev3 = new Metallicize(); public AbstractGuardianCard prev1; public AbstractGuardianCard prev2; @@ -92,7 +94,7 @@ public void use(AbstractPlayer p, AbstractMonster m) { if (upgraded) tmp.upgrade(); addToBot(new MakeTempCardInHandAction(tmp, true)); - tmp = new ArmoredProtocol(); + tmp = new Metallicize(); if (upgraded) tmp.upgrade(); addToBot(new MakeTempCardInHandAction(tmp, true)); } diff --git a/src/main/java/guardian/cards/PiercingHide.java b/src/main/java/guardian/cards/PiercingHide.java index 564e67bf9..ad65604f2 100644 --- a/src/main/java/guardian/cards/PiercingHide.java +++ b/src/main/java/guardian/cards/PiercingHide.java @@ -69,7 +69,12 @@ public void use(AbstractPlayer p, AbstractMonster m) { AbstractDungeon.actionManager.addToBottom(new GainBlockAction(p, p, this.block)); AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, new ThornsPower(p, this.magicNumber), this.magicNumber)); AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, new LoseThornsPower(p, this.magicNumber), this.magicNumber)); - brace(3); + if (!upgraded) { + brace(3); + } + if (upgraded) { + brace(4); + } super.useGems(p, m); } @@ -82,6 +87,8 @@ public void upgrade() { upgradeName(); upgradeBlock(UPGRADE_BLOCK); upgradeMagicNumber(UPGRADE_THORNS); + this.rawDescription = UPGRADED_DESCRIPTION; + this.updateDescription(); } } diff --git a/src/main/java/guardian/cards/Planning.java b/src/main/java/guardian/cards/Planning.java index 8ebb2f329..64fda62d8 100644 --- a/src/main/java/guardian/cards/Planning.java +++ b/src/main/java/guardian/cards/Planning.java @@ -1,6 +1,7 @@ package guardian.cards; +import com.megacrit.cardcrawl.actions.common.GainBlockAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.core.CardCrawlGame; @@ -10,6 +11,7 @@ import guardian.GuardianMod; import guardian.actions.PlaceTopCardIntoStasisAction; import guardian.patches.AbstractCardEnum; +import hermit.actions.ReduceDebuffsAction; import static guardian.GuardianMod.makeBetaCardPath; @@ -23,9 +25,9 @@ public class Planning extends AbstractGuardianCard { private static final CardType TYPE = CardType.SKILL; private static final CardRarity RARITY = CardRarity.COMMON; private static final CardTarget TARGET = CardTarget.SELF; - private static final int COST = 0; + private static final int COST = 2; - private static final int CARDS = 2; + private static final int CARDS = 1; private static final int UPGRADE_CARDS = 1; private static final int SOCKETS = 1; private static final boolean SOCKETSAREAFTER = true; @@ -41,21 +43,18 @@ public class Planning extends AbstractGuardianCard { public Planning() { super(ID, NAME, GuardianMod.getResourcePath(IMG_PATH), COST, DESCRIPTION, TYPE, AbstractCardEnum.GUARDIAN, RARITY, TARGET); - + baseBlock = 12; this.baseMagicNumber = this.magicNumber = CARDS; - this.socketCount = SOCKETS; + this.socketCount = 0; updateDescription(); loadGemMisc(); GuardianMod.loadJokeCardImage(this, makeBetaCardPath("Planning.png")); } public void use(AbstractPlayer p, AbstractMonster m) { + AbstractDungeon.actionManager.addToBottom(new GainBlockAction(p, p, this.block)); super.use(p, m); - - for (int i = 0; i < this.magicNumber; i++) { - AbstractDungeon.actionManager.addToBottom(new PlaceTopCardIntoStasisAction()); - } - + AbstractDungeon.actionManager.addToBottom(new ReduceDebuffsAction(AbstractDungeon.player, this.magicNumber)); super.useGems(p, m); } @@ -66,11 +65,7 @@ public AbstractCard makeCopy() { public void upgrade() { if (!this.upgraded) { upgradeName(); - if (this.socketCount < 4) { - this.socketCount++; - this.saveGemMisc(); - } - this.updateDescription(); + upgradeBlock(4); } } diff --git a/src/main/java/guardian/cards/PolyBeam.java b/src/main/java/guardian/cards/PolyBeam.java index 70b9bdd3f..852cf8850 100644 --- a/src/main/java/guardian/cards/PolyBeam.java +++ b/src/main/java/guardian/cards/PolyBeam.java @@ -1,6 +1,8 @@ package guardian.cards; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.AttackDamageRandomEnemyAction; import com.megacrit.cardcrawl.actions.utility.WaitAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.cards.DamageInfo; @@ -12,6 +14,7 @@ import guardian.GuardianMod; import guardian.actions.PolyBeamAction; import guardian.patches.AbstractCardEnum; +import hermit.patches.EnumPatch; import static guardian.GuardianMod.makeBetaCardPath; @@ -21,7 +24,7 @@ public class PolyBeam extends AbstractGuardianCard { public static final String NAME; public static final String IMG_PATH = "cards/polybeam.png"; private static final CardType TYPE = CardType.ATTACK; - private static final CardRarity RARITY = CardRarity.UNCOMMON; + private static final CardRarity RARITY = CardRarity.COMMON; private static final CardTarget TARGET = CardTarget.ALL_ENEMY; private static final CardStrings cardStrings; private static final int COST = 1; @@ -67,6 +70,7 @@ public void use(AbstractPlayer p, AbstractMonster m) { super.use(p, m); for(int i=0; i 0) { -// if (upgraded && UPGRADED_DESCRIPTION != null) { -// this.rawDescription = this.updateGemDescription(UPGRADED_DESCRIPTION, true); -// } else { -// this.rawDescription = this.updateGemDescription(DESCRIPTION, true); -// } -// } + if (this.socketCount > 0) { + if (upgraded && UPGRADED_DESCRIPTION != null) { + this.rawDescription = this.updateGemDescription(UPGRADED_DESCRIPTION, true); + } else { + this.rawDescription = this.updateGemDescription(DESCRIPTION, true); + } + } this.initializeDescription(); } } diff --git a/src/main/java/guardian/cards/RevengeProtocol.java b/src/main/java/guardian/cards/RevengeProtocol.java index 314695959..d9dcfd624 100644 --- a/src/main/java/guardian/cards/RevengeProtocol.java +++ b/src/main/java/guardian/cards/RevengeProtocol.java @@ -2,14 +2,20 @@ import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.watcher.ChangeStanceAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.localization.CardStrings; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.StrengthPower; +import com.megacrit.cardcrawl.powers.ThornsPower; import guardian.GuardianMod; -import guardian.patches.AbstractCardEnum; import guardian.powers.BracePerTurnPower; +import guardian.stances.DefensiveMode; +import guardian.patches.AbstractCardEnum; +import guardian.powers.RevengePower; import static guardian.GuardianMod.makeBetaCardPath; @@ -22,13 +28,13 @@ public class RevengeProtocol extends AbstractGuardianCard { private static final CardType TYPE = CardType.POWER; private static final CardRarity RARITY = CardRarity.RARE; private static final CardTarget TARGET = CardTarget.SELF; - private static final int COST = 1; + private static final int COST = 2; public static String UPGRADED_DESCRIPTION; public RevengeProtocol() { super(ID, NAME, GuardianMod.getResourcePath(IMG_PATH), COST, DESCRIPTION, TYPE, AbstractCardEnum.GUARDIAN, RARITY, TARGET); this.magicNumber = this.baseMagicNumber = 2; - this.secondaryM = 5; + this.secondaryM = 4; this.socketCount = 0; updateDescription(); loadGemMisc(); @@ -37,10 +43,10 @@ public RevengeProtocol() { public void use(AbstractPlayer p, AbstractMonster m) { super.use(p, m); -// addToBot(new ApplyPowerAction(p, p, new RevengePower(p, p, magicNumber), magicNumber)); -// if (p.stance instanceof DefensiveMode) { -// addToBot(new ApplyPowerAction(p, p, new StrengthPower(p, magicNumber), magicNumber)); -// } + addToBot(new ApplyPowerAction(p, p, new RevengePower(p, p, magicNumber), magicNumber)); + if (p.stance instanceof DefensiveMode) { + addToBot(new ApplyPowerAction(p, p, new StrengthPower(p, magicNumber), magicNumber)); + } addToBot(new ApplyPowerAction(p, p, new BracePerTurnPower(p, secondaryM))); } @@ -51,20 +57,19 @@ public AbstractCard makeCopy() { public void upgrade() { if (!this.upgraded) { upgradeName(); - upgradeBaseCost(0); -// upgradeMagicNumber(1); -// upgradeSecondaryM(1); + upgradeMagicNumber(1); + upgradeSecondaryM(2); } } public void updateDescription() { -// if (this.socketCount > 0) { -// if (upgraded && UPGRADED_DESCRIPTION != null) { -// this.rawDescription = this.updateGemDescription(UPGRADED_DESCRIPTION, true); -// } else { -// this.rawDescription = this.updateGemDescription(DESCRIPTION, true); -// } -// } + if (this.socketCount > 0) { + if (upgraded && UPGRADED_DESCRIPTION != null) { + this.rawDescription = this.updateGemDescription(UPGRADED_DESCRIPTION, true); + } else { + this.rawDescription = this.updateGemDescription(DESCRIPTION, true); + } + } this.initializeDescription(); } diff --git a/src/main/java/guardian/cards/ShieldSpikes.java b/src/main/java/guardian/cards/ShieldSpikes.java index f8e81bf25..6e283145d 100644 --- a/src/main/java/guardian/cards/ShieldSpikes.java +++ b/src/main/java/guardian/cards/ShieldSpikes.java @@ -51,9 +51,8 @@ public void use(AbstractPlayer p, AbstractMonster m) { if (p.stance instanceof DefensiveMode) { addToBot(new ApplyPowerAction(p, p, new ThornsPower(p, this.magicNumber), this.magicNumber)); - } else { - brace(8); } + brace(8); } public void triggerOnGlowCheck() { diff --git a/src/main/java/guardian/cards/SphericShield.java b/src/main/java/guardian/cards/SphericShield.java index 1bf65b5be..8eb13ecb9 100644 --- a/src/main/java/guardian/cards/SphericShield.java +++ b/src/main/java/guardian/cards/SphericShield.java @@ -1,18 +1,17 @@ package guardian.cards; -import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; -import com.megacrit.cardcrawl.actions.common.GainBlockAction; -import com.megacrit.cardcrawl.actions.watcher.ChangeStanceAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.localization.CardStrings; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.potions.AbstractPotion; +import com.megacrit.cardcrawl.relics.AbstractRelic; +import com.megacrit.cardcrawl.relics.Sozu; import guardian.GuardianMod; -import guardian.powers.DontLeaveDefensiveModePower; -import guardian.stances.DefensiveMode; +import guardian.potions.DefensiveModePotion; import guardian.patches.AbstractCardEnum; import static guardian.GuardianMod.makeBetaCardPath; @@ -26,7 +25,7 @@ public class SphericShield extends AbstractGuardianCard { private static final CardType TYPE = CardType.SKILL; private static final CardRarity RARITY = CardRarity.RARE; private static final CardTarget TARGET = CardTarget.SELF; - private static final int COST = 2; + private static final int COST = 3; public static String UPGRADED_DESCRIPTION; static { @@ -37,10 +36,10 @@ public class SphericShield extends AbstractGuardianCard { } public SphericShield() { + super(ID, NAME, GuardianMod.getResourcePath(IMG_PATH), COST, DESCRIPTION, TYPE, AbstractCardEnum.GUARDIAN, RARITY, TARGET); - this.baseBlock = 20; - this.socketCount = 0; exhaust = true; + this.isEthereal = true; updateDescription(); loadGemMisc(); GuardianMod.loadJokeCardImage(this, makeBetaCardPath("SphericShield.png")); @@ -48,10 +47,13 @@ public SphericShield() { public void use(AbstractPlayer p, AbstractMonster m) { super.use(p, m); - AbstractDungeon.effectsQueue.add(new com.megacrit.cardcrawl.vfx.BorderFlashEffect(com.badlogic.gdx.graphics.Color.GOLD, true)); - addToBot(new GainBlockAction(p, p, this.block)); - addToBot(new ChangeStanceAction(new DefensiveMode())); - addToBot(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new DontLeaveDefensiveModePower(AbstractDungeon.player, 1), 1)); + AbstractRelic sozu = AbstractDungeon.player.getRelic(Sozu.ID); + if (sozu != null) { + sozu.flash(); + } else { + AbstractPotion potion = new DefensiveModePotion(); + AbstractDungeon.player.obtainPotion(potion.makeCopy()); + } } public AbstractCard makeCopy() { @@ -61,7 +63,9 @@ public AbstractCard makeCopy() { public void upgrade() { if (!this.upgraded) { upgradeName(); - upgradeBlock(5); + this.isEthereal = false; + rawDescription = UPGRADED_DESCRIPTION; + initializeDescription(); } } diff --git a/src/main/java/guardian/cards/SpikerProtocol.java b/src/main/java/guardian/cards/SpikerProtocol.java index 3eada9242..472a2353f 100644 --- a/src/main/java/guardian/cards/SpikerProtocol.java +++ b/src/main/java/guardian/cards/SpikerProtocol.java @@ -10,12 +10,15 @@ import com.megacrit.cardcrawl.localization.CardStrings; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.ThornsPower; +import downfall.actions.ForceWaitAction; import guardian.GuardianMod; import guardian.powers.BracePerTurnPower; +import guardian.powers.EvasiveProtocolPower; import guardian.stances.DefensiveMode; import guardian.patches.AbstractCardEnum; import guardian.powers.DontLeaveDefensiveModePower; import guardian.powers.SpikerProtocolPower; +import hermit.actions.ReduceDebuffsAction; import static guardian.GuardianMod.makeBetaCardPath; @@ -30,13 +33,16 @@ public class SpikerProtocol extends AbstractGuardianCard { private static final CardTarget TARGET = CardTarget.SELF; private static final int COST = 1; - private static final int THORNS = 4; - private static final int UPGRADE_THORNS = 2; + //TUNING CONSTANTS + private static final int THORNS = 2; + private static final int UPGRADE_THORNS = 1; private static final int SOCKETS = 0; - private static final int BRACE_PER_TURN = 3; + private static final int BRACE_PER_TURN = 6; private static final boolean SOCKETSAREAFTER = true; public static String UPGRADED_DESCRIPTION; + //END TUNING CONSTANTS + static { cardStrings = CardCrawlGame.languagePack.getCardStrings(ID); NAME = cardStrings.NAME; @@ -56,12 +62,35 @@ public SpikerProtocol() { } public void use(AbstractPlayer p, AbstractMonster m) { + int moda = 999; + int mods = 0; super.use(p, m); + + + if (AbstractDungeon.player.hasPower("Guardian:ModeShiftPower")) { + moda = AbstractDungeon.player.getPower("Guardian:ModeShiftPower").amount; + } + + // if (((moda - mods) <= 0)) { + // AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, new ThornsPower(p, magicNumber), magicNumber)); + + + + if (!this.upgraded) { + brace(secondaryM); + mods = secondaryM; + } + + if (this.upgraded) { + brace(secondaryM); + mods = secondaryM; + } + // } + if (p.stance instanceof DefensiveMode || mods >= moda) { + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, new ThornsPower(p, magicNumber), magicNumber)); + } AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, new SpikerProtocolPower(p, magicNumber))); -// if (p.stance instanceof DefensiveMode) { -// AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, new ThornsPower(p, magicNumber), magicNumber)); -// } -// AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, new BracePerTurnPower(p, this.secondaryM))); + // AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, new BracePerTurnPower(p, this.secondaryM))); } public AbstractCard makeCopy() { @@ -71,22 +100,11 @@ public AbstractCard makeCopy() { public void upgrade() { if (!this.upgraded) { upgradeName(); -// upgradeMagicNumber(UPGRADE_THORNS); - upgradeBaseCost(0); + upgradeMagicNumber(UPGRADE_THORNS); + upgradeSecondaryM(3); } } - public void updateDescription() { - -// if (this.socketCount > 0) { -// if (upgraded && UPGRADED_DESCRIPTION != null) { -// this.rawDescription = this.updateGemDescription(UPGRADED_DESCRIPTION, true); -// } else { -// this.rawDescription = this.updateGemDescription(DESCRIPTION, true); -// } -// } - this.initializeDescription(); - } } diff --git a/src/main/java/guardian/cards/StasisField.java b/src/main/java/guardian/cards/StasisField.java index 4662f8c05..74b7e491c 100644 --- a/src/main/java/guardian/cards/StasisField.java +++ b/src/main/java/guardian/cards/StasisField.java @@ -50,10 +50,10 @@ public void use(AbstractPlayer p, AbstractMonster m) { this.useGems(p, m); } - @Override - public void onEvoke(StasisOrb orb) { - addToBot(new GainBlockAction(AbstractDungeon.player, AbstractDungeon.player, this.block)); - } +// @Override +// public void onEvoke(StasisOrb orb) { +// addToBot(new GainBlockAction(AbstractDungeon.player, AbstractDungeon.player, this.block)); +// } public AbstractCard makeCopy() { @@ -83,6 +83,4 @@ public void updateDescription() { public void onStartOfTurn(StasisOrb orb) { } -} - - +} \ No newline at end of file diff --git a/src/main/java/guardian/cards/StasisStrike.java b/src/main/java/guardian/cards/StasisStrike.java index a8b019033..5db26f4f9 100644 --- a/src/main/java/guardian/cards/StasisStrike.java +++ b/src/main/java/guardian/cards/StasisStrike.java @@ -22,7 +22,7 @@ public class StasisStrike extends AbstractGuardianCard { public StasisStrike() { super(ID, cardStrings.NAME, IMG_PATH, 2, cardStrings.DESCRIPTION, CardType.ATTACK, AbstractCardEnum.GUARDIAN, CardRarity.UNCOMMON, CardTarget.ENEMY); - this.baseDamage = 15; + this.baseDamage = 16; this.socketCount = 0; this.tags.add(CardTags.STRIKE); updateDescription(); @@ -44,7 +44,7 @@ public AbstractCard makeCopy() { public void upgrade() { if (!this.upgraded) { upgradeName(); - upgradeDamage(5); + upgradeDamage(4); } } diff --git a/src/main/java/guardian/cards/Suspension.java b/src/main/java/guardian/cards/Suspension.java index 812946fd0..4df8b8fc7 100644 --- a/src/main/java/guardian/cards/Suspension.java +++ b/src/main/java/guardian/cards/Suspension.java @@ -23,7 +23,7 @@ public class Suspension extends AbstractGuardianCard { private static final CardType TYPE = CardType.SKILL; private static final CardRarity RARITY = CardRarity.COMMON; private static final CardTarget TARGET = CardTarget.SELF; - private static final int COST = 0; + private static final int COST = 1; private static final int SOCKETS = 1; private static final boolean SOCKETSAREAFTER = true; @@ -39,7 +39,7 @@ public class Suspension extends AbstractGuardianCard { public Suspension() { super(ID, NAME, GuardianMod.getResourcePath(IMG_PATH), COST, DESCRIPTION, TYPE, AbstractCardEnum.GUARDIAN, RARITY, TARGET); this.socketCount = SOCKETS; - baseBlock = 2; + baseBlock = 6; updateDescription(); loadGemMisc(); GuardianMod.loadJokeCardImage(this, makeBetaCardPath("Suspension.png")); @@ -64,8 +64,13 @@ public void upgrade() { } public void updateDescription() { + if (this.socketCount > 0) { - this.rawDescription = this.updateGemDescription(DESCRIPTION, true); + if (upgraded && UPGRADED_DESCRIPTION != null) { + this.rawDescription = this.updateGemDescription(UPGRADED_DESCRIPTION, true); + } else { + this.rawDescription = this.updateGemDescription(DESCRIPTION, true); + } } this.initializeDescription(); } diff --git a/src/main/java/guardian/cards/TemporalStrike.java b/src/main/java/guardian/cards/TemporalStrike.java index 08091632c..1d974407e 100644 --- a/src/main/java/guardian/cards/TemporalStrike.java +++ b/src/main/java/guardian/cards/TemporalStrike.java @@ -50,10 +50,11 @@ public TemporalStrike() { this.baseDamage = DAMAGE; this.socketCount = SOCKETS; + tags.add(CardTags.STRIKE); updateDescription(); loadGemMisc(); - tags.add(CardTags.STRIKE); + //this.sockets.add(GuardianMod.socketTypes.RED); this.updateDescription(); GuardianMod.loadJokeCardImage(this, makeBetaCardPath("TemporalStrike.png")); diff --git a/src/main/java/guardian/cards/TimeSifter.java b/src/main/java/guardian/cards/TimeSifter.java index 89c5ca517..5590f714e 100644 --- a/src/main/java/guardian/cards/TimeSifter.java +++ b/src/main/java/guardian/cards/TimeSifter.java @@ -22,7 +22,7 @@ public class TimeSifter extends AbstractGuardianCard { public static final String IMG_PATH = "cards/hourglass.png"; private static final CardStrings cardStrings; private static final CardType TYPE = CardType.POWER; - private static final CardRarity RARITY = CardRarity.RARE; + private static final CardRarity RARITY = CardRarity.UNCOMMON; private static final CardTarget TARGET = CardTarget.SELF; private static final int COST = 1; public static String UPGRADED_DESCRIPTION; diff --git a/src/main/java/guardian/cards/VentSteam.java b/src/main/java/guardian/cards/VentSteam.java index 55b4461b7..924405f8e 100644 --- a/src/main/java/guardian/cards/VentSteam.java +++ b/src/main/java/guardian/cards/VentSteam.java @@ -20,7 +20,7 @@ public class VentSteam extends AbstractGuardianCard { public static final String IMG_PATH = "cards/ventSteam.png"; private static final CardStrings cardStrings; private static final CardType TYPE = CardType.SKILL; - private static final CardRarity RARITY = CardRarity.COMMON; + private static final CardRarity RARITY = CardRarity.UNCOMMON; private static final CardTarget TARGET = CardTarget.ALL_ENEMY; private static final int COST = 1; diff --git a/src/main/java/guardian/characters/GuardianCharacter.java b/src/main/java/guardian/characters/GuardianCharacter.java index 41d748c53..551aa8641 100644 --- a/src/main/java/guardian/characters/GuardianCharacter.java +++ b/src/main/java/guardian/characters/GuardianCharacter.java @@ -1,9 +1,12 @@ package guardian.characters; +import automaton.vfx.CompileVictoryEffect; import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.helpers.*; +import com.megacrit.cardcrawl.vfx.AbstractGameEffect; +import com.megacrit.cardcrawl.vfx.scene.DefectVictoryNumberEffect; import downfall.util.TextureLoader; import guardian.modules.EnergyOrbGuardian; import guardian.powers.ModeShiftPower; @@ -114,8 +117,6 @@ public GuardianCharacter(String name, PlayerClass setClass) { } - //TODO - Victory screens - public CharSelectInfo getInfo() { return getLoadout(); } @@ -332,6 +333,14 @@ public String getVampireText() { return charStrings.TEXT[3]; } + + @Override + public void updateVictoryVfx(ArrayList effects) { + if (effects.stream().filter(e -> e instanceof DefectVictoryNumberEffect).count() < 8) + effects.add(new DefectVictoryNumberEffect()); + } + + @Override public void onVictory() { super.onVictory(); diff --git a/src/main/java/guardian/commands/SocketGems.java b/src/main/java/guardian/commands/SocketGems.java index f564e701b..cf705317e 100644 --- a/src/main/java/guardian/commands/SocketGems.java +++ b/src/main/java/guardian/commands/SocketGems.java @@ -1,33 +1,33 @@ -package guardian.commands; - -import basemod.devcommands.ConsoleCommand; -import com.badlogic.gdx.math.MathUtils; -import com.megacrit.cardcrawl.cards.AbstractCard; -import com.megacrit.cardcrawl.cards.CardGroup; -import com.megacrit.cardcrawl.dungeons.AbstractDungeon; -import guardian.GuardianMod; -import guardian.cards.AbstractGuardianCard; - -public class SocketGems extends ConsoleCommand { - // Fills all empty sockets with random gems, for testing purposes - @Override - protected void execute(String[] strings, int i) { - socketGems(AbstractDungeon.player.hand); - socketGems(AbstractDungeon.player.drawPile); - socketGems(AbstractDungeon.player.discardPile); - - } - - private void socketGems(CardGroup group) { - for (AbstractCard card : group.group) { - if(card instanceof AbstractGuardianCard) { - AbstractGuardianCard gc = (AbstractGuardianCard) card; - gc.sockets.clear(); - while(gc.socketCount > gc.sockets.size()) { - gc.sockets.add(GuardianMod.socketTypes.values()[MathUtils.random(GuardianMod.socketTypes.values().length-1)]); - } - gc.updateDescription(); - } - } - } -} +package guardian.commands; + +import basemod.devcommands.ConsoleCommand; +import com.badlogic.gdx.math.MathUtils; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.CardGroup; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import guardian.GuardianMod; +import guardian.cards.AbstractGuardianCard; + +public class SocketGems extends ConsoleCommand { + // Fills all empty sockets with random gems, for testing purposes + @Override + protected void execute(String[] strings, int i) { + socketGems(AbstractDungeon.player.hand); + socketGems(AbstractDungeon.player.drawPile); + socketGems(AbstractDungeon.player.discardPile); + + } + + private void socketGems(CardGroup group) { + for (AbstractCard card : group.group) { + if(card instanceof AbstractGuardianCard) { + AbstractGuardianCard gc = (AbstractGuardianCard) card; + gc.sockets.clear(); + while(gc.socketCount > gc.sockets.size()) { + gc.sockets.add(GuardianMod.socketTypes.values()[MathUtils.random(GuardianMod.socketTypes.values().length-1)]); + } + gc.updateDescription(); + } + } + } +} diff --git a/src/main/java/guardian/events/CrystalForge.java b/src/main/java/guardian/events/CrystalForge.java index 95f633c04..adc47a53c 100644 --- a/src/main/java/guardian/events/CrystalForge.java +++ b/src/main/java/guardian/events/CrystalForge.java @@ -245,14 +245,18 @@ protected void buttonEffect(int buttonPressed) { this.pickCardForSalvageGems = true; this.imageEventText.updateBodyText(SALVAGE); this.imageEventText.updateDialogOption(0, OPTIONS[4], true); + this.imageEventText.updateDialogOption(1, OPTIONS[4], true); + this.imageEventText.updateDialogOption(2, OPTIONS[4], true); AbstractDungeon.gridSelectScreen.open(GuardianMod.getCardsWithFilledSockets(), 1, false, DESCRIPTIONS[5]); - break; case 1: this.pickCardForGemRemoval = true; AbstractDungeon.gridSelectScreen.open(GuardianMod.getCardsWithFilledSockets(), 1, DESCRIPTIONS[6], false, false, false, false); this.imageEventText.updateBodyText(PRY); + + this.imageEventText.updateDialogOption(0, OPTIONS[4], true); this.imageEventText.updateDialogOption(1, OPTIONS[4], true); + this.imageEventText.updateDialogOption(2, OPTIONS[4], true); break; case 2: @@ -260,6 +264,8 @@ protected void buttonEffect(int buttonPressed) { this.imageEventText.updateBodyText(TRANSMUTE); AbstractDungeon.gridSelectScreen.open(CardGroup.getGroupWithoutBottledCards(AbstractDungeon.player.masterDeck.getPurgeableCards()), 1, DESCRIPTIONS[7], false, false, false, true); + this.imageEventText.updateDialogOption(0, OPTIONS[4], true); + this.imageEventText.updateDialogOption(1, OPTIONS[4], true); this.imageEventText.updateDialogOption(2, OPTIONS[4], true); break; diff --git a/src/main/java/guardian/events/GemMine.java b/src/main/java/guardian/events/GemMine.java index e4d2ac74f..008f80895 100644 --- a/src/main/java/guardian/events/GemMine.java +++ b/src/main/java/guardian/events/GemMine.java @@ -19,8 +19,10 @@ import com.megacrit.cardcrawl.relics.AbstractRelic; import com.megacrit.cardcrawl.rooms.AbstractRoom; import com.megacrit.cardcrawl.vfx.cardManip.ShowCardAndObtainEffect; +import downfall.relics.HeartBlessingRed; import guardian.GuardianMod; import guardian.relics.PickAxe; +import guardian.rewards.GemReward; import java.util.ArrayList; @@ -102,10 +104,20 @@ protected void buttonEffect(int buttonPressed) { AbstractDungeon.effectList.add(new ShowCardAndObtainEffect(card, (float) (Settings.WIDTH / 2), (float) (Settings.HEIGHT / 2))); CardCrawlGame.sound.play("MONSTER_BOOK_STAB_0"); + + AbstractDungeon.getCurrRoom().rewards.add(new GemReward()); + + AbstractDungeon.getCurrRoom().rewards.add(new GemReward()); + + AbstractDungeon.getCurrRoom().rewards.add(new GemReward()); + + AbstractDungeon.combatRewardScreen.rewards.remove(AbstractDungeon.combatRewardScreen.rewards.size()-1); + AbstractDungeon.player.getRelic(PickAxe.ID).onTrigger(); if (AbstractDungeon.player.getRelic(PickAxe.ID).counter == -2) { this.imageEventText.updateDialogOption(0, OPTIONS[5], true); + AbstractDungeon.player.loseRelic(PickAxe.ID); } this.tookGems = true; } else { @@ -125,13 +137,18 @@ protected void buttonEffect(int buttonPressed) { case 1: this.imageEventText.updateBodyText(DIALOG_MINE); - ArrayList gems = GuardianMod.getRewardGemCards(false, 1); - AbstractCard card = gems.get(0); - cardsAdded.add(card.cardID); + // ArrayList gems = GuardianMod.getRewardGemCards(false, 1); + // AbstractCard card = gems.get(0); + // cardsAdded.add(card.cardID); - AbstractDungeon.effectList.add(new ShowCardAndObtainEffect(card, (float) (Settings.WIDTH / 2), (float) (Settings.HEIGHT / 2))); + // AbstractDungeon.effectList.add(new ShowCardAndObtainEffect(card, (float) (Settings.WIDTH / 2), (float) (Settings.HEIGHT / 2))); CardCrawlGame.sound.play("MONSTER_BOOK_STAB_0"); AbstractDungeon.player.damage(new DamageInfo(null, this.damage)); + + AbstractDungeon.getCurrRoom().rewards.add(new GemReward()); + + AbstractDungeon.combatRewardScreen.rewards.remove(AbstractDungeon.combatRewardScreen.rewards.size()-1); + this.damageTaken += damage; this.tookGems = true; return; diff --git a/src/main/java/guardian/events/StasisEgg.java b/src/main/java/guardian/events/StasisEgg.java index b09512883..d7e8388c4 100644 --- a/src/main/java/guardian/events/StasisEgg.java +++ b/src/main/java/guardian/events/StasisEgg.java @@ -6,7 +6,9 @@ package guardian.events; +import automaton.AutomatonMod; import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.CardGroup; import com.megacrit.cardcrawl.cards.curses.Pain; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.core.Settings; @@ -19,6 +21,7 @@ import downfall.cards.curses.Aged; import guardian.ui.RelicPreviewButton; +import java.util.ArrayList; import java.util.Collections; public class StasisEgg extends AbstractImageEvent { @@ -31,6 +34,7 @@ public class StasisEgg extends AbstractImageEvent { private static final String DIALOG_LEAVE; private static final String DIALOG_USE; private static final String DIALOG_SMASH; + private ArrayList validCards; static { eventStrings = CardCrawlGame.languagePack.getEventString(ID); @@ -54,7 +58,21 @@ public StasisEgg() { } else { this.maxHP = (int) ((float) AbstractDungeon.player.maxHealth * 0.15F); } - imageEventText.optionList.add(new RelicPreviewButton(0, OPTIONS[0], new guardian.relics.StasisEgg(), false, new Aged())); + + CardGroup tmp = new CardGroup(CardGroup.CardGroupType.UNSPECIFIED); + for (AbstractCard c : CardGroup.getGroupWithoutBottledCards(AbstractDungeon.player.masterDeck).group) { + validCards.add(c); + } + + + if (validCards.size() > 0) { + imageEventText.optionList.add(new RelicPreviewButton(0, OPTIONS[0], new guardian.relics.StasisEgg(), false, new Aged())); + } else { + this.imageEventText.setDialogOption(OPTIONS[4], true); + } + + + //imageEventText.optionList.add(new RelicPreviewButton(0, OPTIONS[0], new guardian.relics.StasisEgg(), false, new Aged())); this.imageEventText.setDialogOption(OPTIONS[1] + this.maxHP + OPTIONS[2], CardLibrary.getCopy(Pain.ID, 0, 0)); this.imageEventText.setDialogOption(OPTIONS[3]); } diff --git a/src/main/java/guardian/patches/AddEnhanceButtonPatch.java b/src/main/java/guardian/patches/AddEnhanceButtonPatch.java index a5df0a0a7..91f333ed7 100644 --- a/src/main/java/guardian/patches/AddEnhanceButtonPatch.java +++ b/src/main/java/guardian/patches/AddEnhanceButtonPatch.java @@ -16,7 +16,7 @@ import javassist.CtBehavior; import sneckomod.TheSnecko; import sneckomod.relics.UnknownEgg; -import sneckomod.ui.LockInCampfireOption; + import java.util.ArrayList; @@ -26,23 +26,22 @@ public static class AddKeys { @SpireInsertPatch(locator = Locator.class) public static void patch(CampfireUI __instance, ArrayList ___buttons) { Boolean active = true; - if (GuardianMod.getSocketableCards().size() == 0) { active = false; } - if (GuardianMod.getGemCards().size() == 0) { active = false; } - if (AbstractDungeon.player instanceof GuardianCharacter || active) { GuardianMod.socketBonfireOption = new EnhanceBonfireOption(active); ___buttons.add(GuardianMod.socketBonfireOption); } - if (AbstractDungeon.player instanceof TheSnecko || AbstractDungeon.player.hasRelic(UnknownEgg.ID)) { - ___buttons.add(new LockInCampfireOption()); - } +// if (AbstractDungeon.player.hasRelic(PickAxe.ID)) { +// boolean relicActive; +// relicActive = AbstractDungeon.player.getRelic(PickAxe.ID).counter != -2; +// ___buttons.add(new FindGemsOption(relicActive)); +// } if (AbstractDungeon.player instanceof CollectorChar || !CollectorCollection.collection.isEmpty()) { ___buttons.add(new StashAwayCampfireOption()); diff --git a/src/main/java/guardian/patches/BottledStasisPatch.java b/src/main/java/guardian/patches/BottledStasisPatch.java index 3213e1fea..7e72012f4 100644 --- a/src/main/java/guardian/patches/BottledStasisPatch.java +++ b/src/main/java/guardian/patches/BottledStasisPatch.java @@ -1,5 +1,6 @@ package guardian.patches; +import awakenedOne.util.Wiz; import com.evacipated.cardcrawl.modthespire.lib.SpireField; import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; import com.megacrit.cardcrawl.cards.AbstractCard; @@ -23,10 +24,20 @@ public class BottledStasisPatch { ) public static class MakeStatEquivalentCopy { public static AbstractCard Postfix(AbstractCard __result, AbstractCard __instance) { - inBottledStasis.set(__result, inBottledStasis.get(__instance)); - inStasisEgg.set(__result, inStasisEgg.get(__instance)); - inBottledAnomaly.set(__result, inBottledAnomaly.get(__instance)); - inBottledCode.set(__result, inBottledCode.get(__instance)); + if (Wiz.isInCombat()) { + inBottledStasis.set(__result, inBottledStasis.get(__instance)); + inStasisEgg.set(__result, inStasisEgg.get(__instance)); + inBottledAnomaly.set(__result, inBottledAnomaly.get(__instance)); + inBottledCode.set(__result, inBottledCode.get(__instance)); + } + + if (!Wiz.isInCombat()) { + inBottledStasis.set(__result, Boolean.FALSE); + inStasisEgg.set(__result, Boolean.FALSE); + inBottledAnomaly.set(__result, Boolean.FALSE); + inBottledCode.set(__result, Boolean.FALSE); + } + if (__instance instanceof AbstractGuardianCard) { ((AbstractGuardianCard) __result).socketCount = ((AbstractGuardianCard) __instance).socketCount; diff --git a/src/main/java/guardian/potions/DefensiveModePotion.java b/src/main/java/guardian/potions/DefensiveModePotion.java index e4c76ac32..6cfa0dcc5 100644 --- a/src/main/java/guardian/potions/DefensiveModePotion.java +++ b/src/main/java/guardian/potions/DefensiveModePotion.java @@ -4,7 +4,9 @@ import basemod.BaseMod; import basemod.abstracts.CustomPotion; import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.DrawCardAction; import com.megacrit.cardcrawl.actions.common.GainBlockAction; +import com.megacrit.cardcrawl.actions.common.GainEnergyAction; import com.megacrit.cardcrawl.actions.watcher.ChangeStanceAction; import com.megacrit.cardcrawl.core.AbstractCreature; import com.megacrit.cardcrawl.core.CardCrawlGame; @@ -13,7 +15,8 @@ import com.megacrit.cardcrawl.helpers.PowerTip; import com.megacrit.cardcrawl.helpers.TipHelper; import com.megacrit.cardcrawl.localization.PotionStrings; -import guardian.powers.DontLeaveDefensiveModePower; +import guardian.powers.*; +import guardian.relics.ModeShifterPlus; import guardian.stances.DefensiveMode; import guardian.characters.GuardianCharacter; @@ -46,6 +49,43 @@ public void use(AbstractCreature target) { AbstractDungeon.actionManager.addToBottom(new GainBlockAction(AbstractDungeon.player, potency)); AbstractDungeon.actionManager.addToBottom(new ChangeStanceAction(DefensiveMode.STANCE_ID)); AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new DontLeaveDefensiveModePower(AbstractDungeon.player, 1), 1)); + + + ModeShifterPlus modeShifterPlusInstance = new ModeShifterPlus(); + if (AbstractDungeon.player.hasRelic(ModeShifterPlus.ID)) { + modeShifterPlusInstance.onTrigger(); + } + + if (AbstractDungeon.player.hasPower(RevengePower.POWER_ID)) { + RevengePower revengePower = + (RevengePower) AbstractDungeon.player.getPower(RevengePower.POWER_ID); + + if (revengePower != null) { + revengePower.onActivateCallR(target); + } + } + + if (AbstractDungeon.player.hasPower(SpikerProtocolPower.POWER_ID)) { + SpikerProtocolPower spikerProtocolPower = + (SpikerProtocolPower) AbstractDungeon.player.getPower(SpikerProtocolPower.POWER_ID); + + if (spikerProtocolPower != null) { + spikerProtocolPower.onActivateCallS(target); + } + } + + + if (AbstractDungeon.player.hasPower(EvasiveProtocolPower.POWER_ID)) { + EvasiveProtocolPower evasiveProtocolPower = + (EvasiveProtocolPower) AbstractDungeon.player.getPower(EvasiveProtocolPower.POWER_ID); + + if (evasiveProtocolPower != null) { + evasiveProtocolPower.onActivateCallE(target); + } + + + } + } @@ -54,7 +94,7 @@ public CustomPotion makeCopy() { } public int getPotency(int ascensionLevel) { - return 10; + return 16; } } diff --git a/src/main/java/guardian/powers/ArmoredProtocolPower.java b/src/main/java/guardian/powers/ArmoredProtocolPower.java index 511b4f8a2..cd3b7bf27 100644 --- a/src/main/java/guardian/powers/ArmoredProtocolPower.java +++ b/src/main/java/guardian/powers/ArmoredProtocolPower.java @@ -11,7 +11,7 @@ import guardian.stances.DefensiveMode; -public class ArmoredProtocolPower extends AbstractGuardianPower implements DefensiveModeBooster { +public class ArmoredProtocolPower extends AbstractGuardianPower { public static final String POWER_ID = "Guardian:ArmoredProtocolPower"; public static PowerType POWER_TYPE = PowerType.BUFF; public static String[] DESCRIPTIONS; @@ -30,25 +30,15 @@ public ArmoredProtocolPower(AbstractCreature owner, int amount) { updateDescription(); } -// -// public void atEndOfTurnPreEndTurnCards(boolean isPlayer) { -// flash(); -// if (AbstractDungeon.player.stance instanceof DefensiveMode) { -// addToBot(new com.megacrit.cardcrawl.actions.common.GainBlockAction(this.owner, this.owner, this.amount)); -// } -// } - public void updateDescription() { - this.description = DESCRIPTIONS[0] + this.amount + DESCRIPTIONS[1]; - } - - @Override - public void onEnter() { - this.addToBot(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new MetallicizePower(AbstractDungeon.player, amount), amount)); + public void atEndOfTurnPreEndTurnCards(boolean isPlayer) { + flash(); + if (AbstractDungeon.player.stance instanceof DefensiveMode) { + addToBot(new com.megacrit.cardcrawl.actions.common.GainBlockAction(this.owner, this.owner, this.amount)); + } } - @Override - public void onLeave() { - + public void updateDescription() { + this.description = DESCRIPTIONS[0] + this.amount + DESCRIPTIONS[1]; } } diff --git a/src/main/java/guardian/powers/ConstructModePower.java b/src/main/java/guardian/powers/ConstructModePower.java index ee8e288cb..3a3887f3c 100644 --- a/src/main/java/guardian/powers/ConstructModePower.java +++ b/src/main/java/guardian/powers/ConstructModePower.java @@ -33,14 +33,19 @@ public ConstructModePower(AbstractCreature owner, int amount) { } public void updateDescription() { - this.description = DESCRIPTIONS[0] + this.amount + DESCRIPTIONS[1]; + this.description = DESCRIPTIONS[0] + this.amount + DESCRIPTIONS[1] + this.amount + DESCRIPTIONS[2];; } public void atStartOfTurn() { - if (AbstractDungeon.player.hasPower(BufferPower.POWER_ID)){ - AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this.owner, this.owner, new StrengthPower(this.owner, amount), amount)); + ; + if (AbstractDungeon.player.hasPower(BufferPower.POWER_ID)) { + if (AbstractDungeon.player.hasPower("Buffer")) { + int buf = AbstractDungeon.player.getPower("Buffer").amount; + if (buf >= amount) { + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this.owner, this.owner, new StrengthPower(this.owner, amount), amount)); + } + } } } - } diff --git a/src/main/java/guardian/powers/EvasiveProtocolPower.java b/src/main/java/guardian/powers/EvasiveProtocolPower.java index 446856cb8..b15f5945a 100644 --- a/src/main/java/guardian/powers/EvasiveProtocolPower.java +++ b/src/main/java/guardian/powers/EvasiveProtocolPower.java @@ -2,13 +2,17 @@ import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.ReducePowerAction; import com.megacrit.cardcrawl.core.AbstractCreature; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.powers.DexterityPower; +import com.megacrit.cardcrawl.powers.ThornsPower; +import hermit.actions.ReduceDebuffsAction; +import hermit.util.Wiz; -public class EvasiveProtocolPower extends AbstractGuardianPower implements DefensiveModeBooster { +public class EvasiveProtocolPower extends AbstractGuardianPower { public static final String POWER_ID = "Guardian:EvasiveProtocolPower"; public static PowerType POWER_TYPE = PowerType.BUFF; public static String[] DESCRIPTIONS; @@ -27,17 +31,11 @@ public EvasiveProtocolPower(AbstractCreature owner, int amount) { updateDescription(); } - @Override - public void onEnter() { + public void onActivateCallE(AbstractCreature target) { flash(); - addToBot(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new DexterityPower(AbstractDungeon.player, amount), amount)); + AbstractDungeon.actionManager.addToBottom(new ReduceDebuffsAction(AbstractDungeon.player, amount)); } - @Override - public void onLeave() { -// flash(); -// addToBot(new ReducePowerAction(AbstractDungeon.player, AbstractDungeon.player, DexterityPower.POWER_ID, amount)); - } public void updateDescription() { this.description = DESCRIPTIONS[0] + this.amount + DESCRIPTIONS[1]; diff --git a/src/main/java/guardian/powers/ExhaustStatusesPower.java b/src/main/java/guardian/powers/ExhaustStatusesPower.java index b3bb810da..fdfe0a28b 100644 --- a/src/main/java/guardian/powers/ExhaustStatusesPower.java +++ b/src/main/java/guardian/powers/ExhaustStatusesPower.java @@ -29,6 +29,8 @@ public ExhaustStatusesPower(AbstractCreature owner, AbstractCreature source, int } + //ACTUAL EFFECTS IN RECEIVE POST DRAW OF GUARDIANMOD + @Override public void atStartOfTurn() { super.atStartOfTurn(); diff --git a/src/main/java/guardian/powers/LoseThornsPower.java b/src/main/java/guardian/powers/LoseThornsPower.java index db16b7282..0d52ae8ff 100644 --- a/src/main/java/guardian/powers/LoseThornsPower.java +++ b/src/main/java/guardian/powers/LoseThornsPower.java @@ -1,12 +1,16 @@ package guardian.powers; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.GainBlockAction; import com.megacrit.cardcrawl.actions.common.RemoveSpecificPowerAction; import com.megacrit.cardcrawl.core.AbstractCreature; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.powers.ArtifactPower; import com.megacrit.cardcrawl.powers.ThornsPower; +import guardian.relics.ObsidianScales; +import sneckomod.relics.LoadedDie; public class LoseThornsPower extends AbstractGuardianPower { @@ -60,6 +64,11 @@ public void atStartOfTurn() { } else { this.owner.getPower(ArtifactPower.POWER_ID).onSpecificTrigger(); } + ObsidianScales OScalesInstance = new ObsidianScales(); + if (AbstractDungeon.player.hasRelic(ObsidianScales.ID)) { + this.addToBot(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new ThornsPower(AbstractDungeon.player, 1), 1)); + OScalesInstance.flash(); + } } } diff --git a/src/main/java/guardian/powers/ModeShiftPower.java b/src/main/java/guardian/powers/ModeShiftPower.java index 41a31a90b..6db49f9ff 100644 --- a/src/main/java/guardian/powers/ModeShiftPower.java +++ b/src/main/java/guardian/powers/ModeShiftPower.java @@ -1,25 +1,31 @@ package guardian.powers; +import champ.powers.EnergizedDurationPower; import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.DrawCardAction; import com.megacrit.cardcrawl.actions.common.GainBlockAction; +import com.megacrit.cardcrawl.actions.common.GainEnergyAction; import com.megacrit.cardcrawl.actions.watcher.ChangeStanceAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.core.AbstractCreature; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.powers.BufferPower; +import com.megacrit.cardcrawl.powers.EnergizedBluePower; import com.megacrit.cardcrawl.rooms.AbstractRoom; +import guardian.relics.ModeShifterPlus; import guardian.stances.DefensiveMode; +import sneckomod.relics.LoadedDie; import static com.megacrit.cardcrawl.dungeons.AbstractDungeon.actionManager; public class ModeShiftPower extends AbstractGuardianPower { public static final String POWER_ID = "Guardian:ModeShiftPower"; - private static final int STARTING_AMOUNT = 30; - private static final int AMOUNT_GAIN_PER_ACTIVATION = 0; - private static final int MAX_AMOUNT = 30; - private static final int BLOCK_ON_TRIGGER = 20; + private static final int STARTING_AMOUNT = 20; + private static final int AMOUNT_GAIN_PER_ACTIVATION = 10; + private static final int MAX_AMOUNT = 50; + private static final int BLOCK_ON_TRIGGER = 16; public static PowerType POWER_TYPE = PowerType.BUFF; public static String[] DESCRIPTIONS; private AbstractCreature source; @@ -53,13 +59,52 @@ public void onSpecificTrigger(int brace) { actionManager.addToBottom(new GainBlockAction(this.owner, this.owner, BLOCK_ON_TRIGGER)); actionManager.addToBottom(new ChangeStanceAction(DefensiveMode.STANCE_ID)); -// int turns; -// if (AbstractDungeon.actionManager.turnHasEnded) -// turns = 2; -// else -// turns = 1; + ModeShifterPlus modeShifterPlusInstance = new ModeShifterPlus(); + if (AbstractDungeon.player.hasRelic(ModeShifterPlus.ID)) { + modeShifterPlusInstance.onTrigger(); + } + + + int turns; + if (AbstractDungeon.actionManager.turnHasEnded) + turns = 2; + else + turns = 1; AbstractPlayer p = AbstractDungeon.player; - actionManager.addToBottom(new ApplyPowerAction(p, p, new DontLeaveDefensiveModePower(p, 2), 2)); + + actionManager.addToBottom(new ApplyPowerAction(p, p, new DontLeaveDefensiveModePower(p, turns), turns)); + + if (AbstractDungeon.player.hasPower(RevengePower.POWER_ID)) { + RevengePower revengePower = + (RevengePower) AbstractDungeon.player.getPower(RevengePower.POWER_ID); + + if (revengePower != null) { + revengePower.onActivateCallR(p); + } + } + + if (AbstractDungeon.player.hasPower(SpikerProtocolPower.POWER_ID)) { + SpikerProtocolPower spikerProtocolPower = + (SpikerProtocolPower) AbstractDungeon.player.getPower(SpikerProtocolPower.POWER_ID); + + if (spikerProtocolPower != null) { + spikerProtocolPower.onActivateCallS(p); + } + } + + + if (AbstractDungeon.player.hasPower(EvasiveProtocolPower.POWER_ID)) { + EvasiveProtocolPower evasiveProtocolPower = + (EvasiveProtocolPower) AbstractDungeon.player.getPower(EvasiveProtocolPower.POWER_ID); + + if (evasiveProtocolPower != null) { + evasiveProtocolPower.onActivateCallE(p); + } + + + } + + this.activations++; this.amount += Math.min(STARTING_AMOUNT + (AMOUNT_GAIN_PER_ACTIVATION * activations), MAX_AMOUNT); //Set max of 40 Brace diff --git a/src/main/java/guardian/powers/RepulsiveProtocolPower.java b/src/main/java/guardian/powers/RepulsiveProtocolPower.java deleted file mode 100644 index 5de897f1a..000000000 --- a/src/main/java/guardian/powers/RepulsiveProtocolPower.java +++ /dev/null @@ -1,46 +0,0 @@ -package guardian.powers; - - -import com.megacrit.cardcrawl.actions.common.ExhaustAction; -import com.megacrit.cardcrawl.core.AbstractCreature; -import com.megacrit.cardcrawl.core.CardCrawlGame; - - -public class RepulsiveProtocolPower extends AbstractGuardianPower implements DefensiveModeBooster { - public static final String POWER_ID = "Guardian:RepulsiveProtocolPower"; - public static PowerType POWER_TYPE = PowerType.BUFF; - public static String[] DESCRIPTIONS; - - public RepulsiveProtocolPower(AbstractCreature owner, int amount) { - - this.ID = POWER_ID; - this.owner = owner; - this.setImage("EvasiveProtocolPower84.png", "EvasiveProtocolPower32.png"); - this.type = POWER_TYPE; - DESCRIPTIONS = CardCrawlGame.languagePack.getPowerStrings(this.ID).DESCRIPTIONS; - - this.name = CardCrawlGame.languagePack.getPowerStrings(this.ID).NAME; - this.amount = amount; - - updateDescription(); - } - - @Override - public void onEnter() { - flash(); - addToBot(new ExhaustAction(this.amount, false, true, true)); - } - - @Override - public void onLeave() { - } - - public void updateDescription() { - if( amount == 1){ - this.description = DESCRIPTIONS[0]; - }else{ - this.description = DESCRIPTIONS[1] + this.amount + DESCRIPTIONS[2]; - } - - } -} diff --git a/src/main/java/guardian/powers/RevengePower.java b/src/main/java/guardian/powers/RevengePower.java index 1ac9c3ccd..411310e77 100644 --- a/src/main/java/guardian/powers/RevengePower.java +++ b/src/main/java/guardian/powers/RevengePower.java @@ -8,9 +8,10 @@ import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.powers.LoseStrengthPower; import com.megacrit.cardcrawl.powers.StrengthPower; +import sneckomod.powers.VenomDebuff; -public class RevengePower extends AbstractGuardianPower implements DefensiveModeBooster { +public class RevengePower extends AbstractGuardianPower{ public static final String POWER_ID = "Guardian:RevengePower"; public static PowerType POWER_TYPE = PowerType.BUFF; @@ -37,15 +38,10 @@ public void updateDescription() { this.description = DESCRIPTIONS[0] + this.amount + DESCRIPTIONS[1]; } - @Override - public void onEnter() { + + public void onActivateCallR(AbstractCreature target) { flash(); AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(owner, owner, new StrengthPower(owner, amount), amount)); } - @Override - public void onLeave() { - flash(); - AbstractDungeon.actionManager.addToBottom(new ReducePowerAction(owner, owner, StrengthPower.POWER_ID, amount)); - } } \ No newline at end of file diff --git a/src/main/java/guardian/powers/SpikerProtocolPower.java b/src/main/java/guardian/powers/SpikerProtocolPower.java index 45825da74..e6866fb8e 100644 --- a/src/main/java/guardian/powers/SpikerProtocolPower.java +++ b/src/main/java/guardian/powers/SpikerProtocolPower.java @@ -6,10 +6,11 @@ import com.megacrit.cardcrawl.core.AbstractCreature; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.powers.StrengthPower; import com.megacrit.cardcrawl.powers.ThornsPower; -public class SpikerProtocolPower extends AbstractGuardianPower implements DefensiveModeBooster { +public class SpikerProtocolPower extends AbstractGuardianPower { public static final String POWER_ID = "Guardian:SpikerProtocolPower"; public static PowerType POWER_TYPE = PowerType.BUFF; public static String[] DESCRIPTIONS; @@ -28,18 +29,11 @@ public SpikerProtocolPower(AbstractCreature owner, int amount) { updateDescription(); } - @Override - public void onEnter() { + public void onActivateCallS(AbstractCreature target) { flash(); addToBot(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new ThornsPower(AbstractDungeon.player, amount), amount)); } - @Override - public void onLeave() { -// flash(); -// addToBot(new ReducePowerAction(AbstractDungeon.player, AbstractDungeon.player, ThornsPower.POWER_ID, amount)); - } - public void updateDescription() { this.description = DESCRIPTIONS[0] + this.amount + DESCRIPTIONS[1]; } diff --git a/src/main/java/guardian/relics/BottledAnomaly.java b/src/main/java/guardian/relics/BottledAnomaly.java index 2f3695c4a..e139308ec 100644 --- a/src/main/java/guardian/relics/BottledAnomaly.java +++ b/src/main/java/guardian/relics/BottledAnomaly.java @@ -4,22 +4,26 @@ import basemod.abstracts.CustomRelic; import basemod.abstracts.CustomSavable; import com.badlogic.gdx.graphics.Texture; +import com.evacipated.cardcrawl.mod.stslib.relics.OnRemoveCardFromMasterDeckRelic; import com.megacrit.cardcrawl.actions.common.MakeTempCardInHandAction; import com.megacrit.cardcrawl.actions.common.RelicAboveCreatureAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.cards.CardGroup; +import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.helpers.FontHelper; import com.megacrit.cardcrawl.helpers.PowerTip; import com.megacrit.cardcrawl.relics.AbstractRelic; import com.megacrit.cardcrawl.rooms.AbstractRoom; +import com.megacrit.cardcrawl.vfx.cardManip.PurgeCardEffect; +import com.megacrit.cardcrawl.vfx.cardManip.ShowCardBrieflyEffect; import guardian.GuardianMod; import guardian.patches.BottledStasisPatch; import sneckomod.cards.unknowns.AbstractUnknownCard; import java.util.function.Predicate; -public class BottledAnomaly extends CustomRelic implements CustomBottleRelic, CustomSavable { +public class BottledAnomaly extends CustomRelic implements CustomBottleRelic, CustomSavable, OnRemoveCardFromMasterDeckRelic { public static final String ID = "Guardian:BottledAnomaly"; public static final String IMG_PATH = "relics/bottledAnomaly.png"; public static final String OUTLINE_IMG_PATH = "relics/bottledAnomalyOutline.png"; @@ -29,7 +33,18 @@ public class BottledAnomaly extends CustomRelic implements CustomBottleRelic, Cu public BottledAnomaly() { super(ID, new Texture(GuardianMod.getResourcePath(IMG_PATH)), new Texture(GuardianMod.getResourcePath(OUTLINE_IMG_PATH)), - RelicTier.SHOP, LandingSound.FLAT); + RelicTier.SHOP, LandingSound.CLINK); + } + + @Override + public void onRemoveCardFromMasterDeck(AbstractCard var1) { + if (this.card != null) { + if (var1.uuid == card.uuid) { + this.flash(); + this.grayscale = true; + setDescriptionAfterLoading(); + } + } } @Override @@ -102,23 +117,52 @@ public void update() { BottledStasisPatch.inBottledAnomaly.set(card, true); AbstractDungeon.getCurrRoom().phase = AbstractRoom.RoomPhase.COMPLETE; AbstractDungeon.gridSelectScreen.selectedCards.clear(); + + AbstractDungeon.topLevelEffects.add(new ShowCardBrieflyEffect(card.makeStatEquivalentCopy())); + setDescriptionAfterLoading(); } } - private void setDescriptionAfterLoading() { - if(cardRemoved){ +// @Override +// public void onRemoveCardFromMasterDeck(AbstractCard var1){ +// if (var1.uuid == card.uuid) { +// setDescriptionAfterLoading(); +// } +// } + + + public void setDescriptionAfterLoading() { + boolean cardExists = false; + + if (cardSelected) { + if (card != null) { + for (AbstractCard c : AbstractDungeon.player.masterDeck.group) { + if (c.uuid == card.uuid) { + cardExists = true; + break; + } + } + } + } + + if (!cardExists) { + cardRemoved = true; tips.clear(); + this.grayscale = true; this.description = this.DESCRIPTIONS[4]; tips.add(new PowerTip(name, description)); initializeTips(); - return ; } - this.description = this.DESCRIPTIONS[2] + FontHelper.colorString(this.card.name, "y") + this.DESCRIPTIONS[3]; - tips.clear(); - tips.add(new PowerTip(name, description)); - initializeTips(); + + if (cardExists) { + this.grayscale = false; + this.description = this.DESCRIPTIONS[2] + FontHelper.colorString(this.card.name, "y") + this.DESCRIPTIONS[3]; + tips.clear(); + tips.add(new PowerTip(name, description)); + initializeTips(); + } } @Override @@ -172,10 +216,10 @@ public void atTurnStartPostDraw() { addToBot(new RelicAboveCreatureAction(AbstractDungeon.player, this)); if (card instanceof AbstractUnknownCard) { AbstractCard unknowncard = ( (AbstractUnknownCard)card ).generateFromPoolButNotIntoHand(); - unknowncard.modifyCostForCombat(-999); + unknowncard.setCostForTurn(0); addToBot( new MakeTempCardInHandAction( unknowncard ) ); }else { - card.modifyCostForCombat(-999); + card.setCostForTurn(0); addToBot(new MakeTempCardInHandAction(card)); } this.grayscale = true; diff --git a/src/main/java/guardian/relics/BottledStasis.java b/src/main/java/guardian/relics/BottledStasis.java index bbe08b419..931f9c951 100644 --- a/src/main/java/guardian/relics/BottledStasis.java +++ b/src/main/java/guardian/relics/BottledStasis.java @@ -4,6 +4,7 @@ import basemod.abstracts.CustomRelic; import basemod.abstracts.CustomSavable; import com.badlogic.gdx.graphics.Texture; +import com.evacipated.cardcrawl.mod.stslib.relics.OnRemoveCardFromMasterDeckRelic; import com.megacrit.cardcrawl.actions.defect.ChannelAction; import com.megacrit.cardcrawl.actions.utility.WaitAction; import com.megacrit.cardcrawl.cards.AbstractCard; @@ -13,6 +14,7 @@ import com.megacrit.cardcrawl.helpers.PowerTip; import com.megacrit.cardcrawl.relics.AbstractRelic; import com.megacrit.cardcrawl.rooms.AbstractRoom; +import com.megacrit.cardcrawl.vfx.cardManip.ShowCardBrieflyEffect; import guardian.GuardianMod; import guardian.orbs.StasisOrb; import guardian.patches.BottledStasisPatch; @@ -20,17 +22,28 @@ import java.util.function.Predicate; -public class BottledStasis extends CustomRelic implements CustomBottleRelic, CustomSavable { +public class BottledStasis extends CustomRelic implements CustomBottleRelic, CustomSavable, OnRemoveCardFromMasterDeckRelic { public static final String ID = "Guardian:BottledStasis"; public static final String IMG_PATH = "relics/bottledStasis.png"; public static final String OUTLINE_IMG_PATH = "relics/bottledStasisOutline.png"; public AbstractCard card = null; - private boolean cardSelected = true; + public boolean cardSelected = false; private boolean cardRemoved = false; public BottledStasis() { super(ID, new Texture(GuardianMod.getResourcePath(IMG_PATH)), new Texture(GuardianMod.getResourcePath(OUTLINE_IMG_PATH)), - RelicTier.SHOP, LandingSound.FLAT); + RelicTier.UNCOMMON, LandingSound.CLINK); + } + + @Override + public void onRemoveCardFromMasterDeck(AbstractCard var1) { + if (this.card != null) { + if (var1.uuid == card.uuid) { + this.flash(); + this.grayscale = true; + setDescriptionAfterLoading(); + } + } } @Override @@ -80,6 +93,8 @@ public void onEquip() { for (AbstractCard c : CardGroup.getGroupWithoutBottledCards(AbstractDungeon.player.masterDeck).group) { tmp.addToTop(c); } + + AbstractDungeon.gridSelectScreen.open(tmp, 1, DESCRIPTIONS[1] + name + ".", false, false, false, false); @@ -95,33 +110,58 @@ public void onUnequip() { } } +// @Override +// public void onRemoveCardFromMasterDeck(AbstractCard var1){ +// if (var1.uuid == card.uuid) { +// setDescriptionAfterLoading(); +// } +// } + @Override public void update() { super.update(); - if (!cardSelected && !AbstractDungeon.gridSelectScreen.selectedCards.isEmpty()) { + if (!cardSelected && !AbstractDungeon.gridSelectScreen.selectedCards.isEmpty() && card.uuid == null) { cardSelected = true; card = AbstractDungeon.gridSelectScreen.selectedCards.get(0); BottledStasisPatch.inBottledStasis.set(card, true); AbstractDungeon.getCurrRoom().phase = AbstractRoom.RoomPhase.COMPLETE; - AbstractDungeon.gridSelectScreen.selectedCards.clear(); + + AbstractDungeon.topLevelEffects.add(new ShowCardBrieflyEffect(card.makeStatEquivalentCopy())); + setDescriptionAfterLoading(); } } - private void setDescriptionAfterLoading() { - if(cardRemoved){ + public void setDescriptionAfterLoading() { + + boolean cardExists = false; + + if (cardSelected) { + if (card != null) { + for (AbstractCard c : AbstractDungeon.player.masterDeck.group) { + if (c.uuid == card.uuid) { + cardExists = true; + break; + } + } + } + } + + if (!cardExists) { + cardRemoved = true; tips.clear(); this.description = this.DESCRIPTIONS[4]; - tips.add(new PowerTip(name, description)); initializeTips(); - return ; } + + if (cardExists) { this.description = this.DESCRIPTIONS[2] + FontHelper.colorString(this.card.name, "y") + this.DESCRIPTIONS[3]; tips.clear(); tips.add(new PowerTip(name, description)); initializeTips(); + } } @Override diff --git a/src/main/java/guardian/relics/GemstoneGun.java b/src/main/java/guardian/relics/GemstoneGun.java index 339dbedeb..17d7a8545 100644 --- a/src/main/java/guardian/relics/GemstoneGun.java +++ b/src/main/java/guardian/relics/GemstoneGun.java @@ -14,6 +14,7 @@ import expansioncontent.patches.CenterGridCardSelectScreen; import guardian.GuardianMod; import guardian.cards.*; +import guardian.characters.GuardianCharacter; import java.util.ArrayList; @@ -89,6 +90,9 @@ public static ArrayList getCharacterSafeGems(int count) { allGemCards.add("PURPLE"); allGemCards.add("SYNTHETIC"); allGemCards.add("LIGHTBLUE"); + if (AbstractDungeon.player instanceof GuardianCharacter) { + allGemCards.add("BLUE"); + } int rando; String ID; diff --git a/src/main/java/guardian/relics/ModeShifter.java b/src/main/java/guardian/relics/ModeShifter.java index 4f61a7ef8..69740f661 100644 --- a/src/main/java/guardian/relics/ModeShifter.java +++ b/src/main/java/guardian/relics/ModeShifter.java @@ -19,7 +19,7 @@ public class ModeShifter extends CustomRelic { public ModeShifter() { super(ID, new Texture(GuardianMod.getResourcePath(IMG_PATH)), new Texture(GuardianMod.getResourcePath(OUTLINE_IMG_PATH)), - RelicTier.STARTER, LandingSound.FLAT); + RelicTier.STARTER, LandingSound.CLINK); this.tips.add(new CardPowerTip(new GearUp())); } diff --git a/src/main/java/guardian/relics/ModeShifterPlus.java b/src/main/java/guardian/relics/ModeShifterPlus.java index 41bdd8ca1..0889a1a1a 100644 --- a/src/main/java/guardian/relics/ModeShifterPlus.java +++ b/src/main/java/guardian/relics/ModeShifterPlus.java @@ -1,39 +1,54 @@ package guardian.relics; import basemod.abstracts.CustomRelic; +import champ.ChampMod; +import champ.relics.ChampionCrown; import com.badlogic.gdx.graphics.Texture; -import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; -import com.megacrit.cardcrawl.actions.common.GainBlockAction; -import com.megacrit.cardcrawl.actions.watcher.ChangeStanceAction; +import com.megacrit.cardcrawl.actions.common.*; +import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.relics.AbstractRelic; +import com.megacrit.cardcrawl.stances.AbstractStance; import guardian.GuardianMod; -import guardian.powers.DontLeaveDefensiveModePower; +import guardian.cards.GearUp; +import guardian.powers.EnergizedGuardianPower; import guardian.stances.DefensiveMode; public class ModeShifterPlus extends CustomRelic { public static final String ID = "Guardian:ModeShifterPlus"; public static final String IMG_PATH = "relics/guardianGear.png"; public static final String OUTLINE_IMG_PATH = "relics/guardianGearOutline.png"; - private static final int HP_PER_CARD = 1; public ModeShifterPlus() { - super(ID, new Texture(GuardianMod.getResourcePath(IMG_PATH)), new Texture(GuardianMod.getResourcePath(OUTLINE_IMG_PATH)), - RelicTier.BOSS, LandingSound.FLAT); + super(ID, new Texture(GuardianMod.getResourcePath(IMG_PATH)), + new Texture(GuardianMod.getResourcePath(OUTLINE_IMG_PATH)), + RelicTier.BOSS, LandingSound.CLINK); } @Override - public String getUpdatedDescription() { - return this.DESCRIPTIONS[0]; + public void atBattleStart() { + flash(); + addToTop(new MakeTempCardInHandAction(new GearUp())); + addToTop(new RelicAboveCreatureAction(AbstractDungeon.player, this)); } - public void atBattleStartPreDraw() { - this.flash(); - AbstractDungeon.actionManager.addToBottom(new GainBlockAction(AbstractDungeon.player, AbstractDungeon.player, 10)); - AbstractDungeon.actionManager.addToBottom(new ChangeStanceAction(DefensiveMode.STANCE_ID)); - AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new DontLeaveDefensiveModePower(AbstractDungeon.player, 3), 3)); - } + //finally got around to doing this + @Override + public void onTrigger() { + super.onTrigger(); + + addToTop(new RelicAboveCreatureAction(AbstractDungeon.player, this)); + + if (!AbstractDungeon.actionManager.turnHasEnded) { + addToTop(new GainEnergyAction(1)); + } + if (AbstractDungeon.actionManager.turnHasEnded) { + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new EnergizedGuardianPower(AbstractDungeon.player, 1))); + } + + addToTop(new DrawCardAction(AbstractDungeon.player, 2)); + } @Override public void obtain() { @@ -49,12 +64,33 @@ public void obtain() { } } + @Override + public String getUpdatedDescription() { + // Colorize the starter relic's name + String name = new ModeShifter().name; + StringBuilder sb = new StringBuilder(); + if(Settings.language== Settings.GameLanguage.ZHS|| Settings.language== Settings.GameLanguage.ZHT){ + sb.append("[#").append(GuardianMod.mainGuardianColor.toString()).append("]").append(name).append("[]"); + + }else { + for (String word : name.split(" ")) { + sb.append("[#").append(GuardianMod.mainGuardianColor.toString()).append("]").append(word).append("[] "); + } + sb.setLength(sb.length() - 1); + sb.append("[#").append(GuardianMod.mainGuardianColor.toString()).append("]"); + } + + return DESCRIPTIONS[0] + sb + DESCRIPTIONS[1]; + } + + @Override public AbstractRelic makeCopy() { return new ModeShifterPlus(); } + @Override public boolean canSpawn() { return AbstractDungeon.player.hasRelic(ModeShifter.ID); } -} \ No newline at end of file +} diff --git a/src/main/java/guardian/relics/ObsidianScales.java b/src/main/java/guardian/relics/ObsidianScales.java new file mode 100644 index 000000000..ca640454d --- /dev/null +++ b/src/main/java/guardian/relics/ObsidianScales.java @@ -0,0 +1,51 @@ +package guardian.relics; + +import basemod.abstracts.CustomRelic; +import com.badlogic.gdx.graphics.Texture; +import com.evacipated.cardcrawl.mod.stslib.relics.OnReceivePowerRelic; +import com.megacrit.cardcrawl.actions.common.*; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.powers.*; +import guardian.GuardianMod; + +public class ObsidianScales extends CustomRelic implements OnReceivePowerRelic{ + public static final String ID = "Guardian:ObsidianScales"; + public static final String IMG_PATH = "relics/obsidianscales.png"; + public static final String OUTLINE_IMG_PATH = "relics/obsidianscalesOutline.png"; + + //Thorns at start of battle + private static final int INITIALTHORNS = 3; + + //Thorns upon being debuffed + private static final int THORNS = 1; + + public ObsidianScales() { + super(ID, new Texture(GuardianMod.getResourcePath(IMG_PATH)), + new Texture(GuardianMod.getResourcePath(OUTLINE_IMG_PATH)), + RelicTier.BOSS, LandingSound.CLINK); + } + + public void atBattleStart() { + this.flash(); + this.addToTop(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new ThornsPower(AbstractDungeon.player, INITIALTHORNS), INITIALTHORNS)); + } + + + @Override + public boolean onReceivePower(AbstractPower var1, AbstractCreature var2) { + // was told that checking for flex / speed / thorns down was "not fun" so it uses determination rules + if (var1.type == AbstractPower.PowerType.DEBUFF){ + this.flash(); + this.addToBot(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new ThornsPower(AbstractDungeon.player, THORNS), THORNS)); + } + return true; + } + + + @Override + public String getUpdatedDescription() { + return DESCRIPTIONS[0] + INITIALTHORNS + DESCRIPTIONS[1] + THORNS + DESCRIPTIONS[2]; + } + +} diff --git a/src/main/java/guardian/relics/PickAxe.java b/src/main/java/guardian/relics/PickAxe.java index 2ea8ae822..e4ea3d671 100644 --- a/src/main/java/guardian/relics/PickAxe.java +++ b/src/main/java/guardian/relics/PickAxe.java @@ -2,22 +2,24 @@ import basemod.abstracts.CustomRelic; import com.badlogic.gdx.graphics.Texture; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.helpers.ImageMaster; import com.megacrit.cardcrawl.relics.AbstractRelic; -import com.megacrit.cardcrawl.ui.campfire.AbstractCampfireOption; +import downfall.util.TextureLoader; import guardian.GuardianMod; -import guardian.ui.FindGemsOption; - -import java.util.ArrayList; +import guardian.rewards.GemReward; +import guardian.rewards.GemRewardButRelicRng; public class PickAxe extends CustomRelic { public static final String ID = "Guardian:PickAxe"; public static final String IMG_PATH = "relics/pick.png"; public static final String OUTLINE_IMG_PATH = "relics/pickOutline.png"; + private static final int HP_PER_CARD = 1; public PickAxe() { super(ID, new Texture(GuardianMod.getResourcePath(IMG_PATH)), new Texture(GuardianMod.getResourcePath(OUTLINE_IMG_PATH)), - RelicTier.COMMON, LandingSound.FLAT); - + RelicTier.COMMON, LandingSound.CLINK); // this.counter = 3; } @@ -26,28 +28,40 @@ public String getUpdatedDescription() { return this.DESCRIPTIONS[0]; } + + public void onEquip() { + if ((AbstractDungeon.getCurrRoom()).eliteTrigger) { + AbstractDungeon.getCurrRoom().rewards.add(new GemRewardButRelicRng()); + // AbstractDungeon.combatRewardScreen.open(); + // AbstractDungeon.getCurrRoom().rewardPopOutTimer = 0.0F; + } + } + @Override - public void addCampfireOption(ArrayList options) { - options.add(new FindGemsOption(true)); - } - - // @Override -// public void onTrigger() { -// super.onTrigger(); -//// this.counter--; -// setCounter(this.counter); -// } - -// public void setCounter(int counter) { -// this.counter = counter; -// if (counter == 0) { -// this.counter = -2; -// this.img = TextureLoader.getTexture(GuardianMod.getResourcePath("relics/pickUsed.png")); -// this.usedUp(); -// } else { -// -// } -// } + public void onTrigger() { + //super.onTrigger(); + // this.counter = -2; + // setCounter(this.counter); + } + + public void setCounter(int counter) { + // this.counter = -2; + // this.img = TextureLoader.getTexture(GuardianMod.getResourcePath("relics/pickUsed.png")); + //this.usedUp(); + } + + public void onVictory(){ + if ((AbstractDungeon.getCurrRoom()).eliteTrigger) { + if (this.counter != -2) { + this.flash(); + AbstractDungeon.getCurrRoom().rewards.add(new GemReward()); + } + } + } + + public boolean canSpawn() { + return Settings.isEndless || AbstractDungeon.floorNum <= 48; // cannot appear in act 4 + } @Override public AbstractRelic makeCopy() { diff --git a/src/main/java/guardian/relics/SackOfGems.java b/src/main/java/guardian/relics/SackOfGems.java index 23efd5e70..bb81b2d67 100644 --- a/src/main/java/guardian/relics/SackOfGems.java +++ b/src/main/java/guardian/relics/SackOfGems.java @@ -2,14 +2,10 @@ import basemod.abstracts.CustomRelic; import com.badlogic.gdx.graphics.Texture; -import com.megacrit.cardcrawl.cards.AbstractCard; -import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.relics.AbstractRelic; -import com.megacrit.cardcrawl.vfx.cardManip.ShowCardAndObtainEffect; import guardian.GuardianMod; - -import java.util.ArrayList; +import guardian.rewards.GemRewardButRelicRng; public class SackOfGems extends CustomRelic { public static final String ID = "Guardian:SackOfGems"; @@ -28,21 +24,12 @@ public String getUpdatedDescription() { } public void onEquip() { - ArrayList gems = GuardianMod.getRewardGemCards(false, 5); - ArrayList rewards = new ArrayList<>(); - int rando; - for (int i = 0; i < 5; ++i) { - rando = AbstractDungeon.cardRng.random(gems.size() - 1); - rewards.add(gems.get(rando)); - gems.remove(rando); - } - - int times = 0; - for (AbstractCard c : rewards) { - - AbstractDungeon.effectList.add(new ShowCardAndObtainEffect(c, (float) (Settings.WIDTH * (0.1 + (0.2 * times))), (float) (Settings.HEIGHT / 2))); - times++; + for (int i = 0; i < 5; i++) { + AbstractDungeon.getCurrRoom().rewards.add(new GemRewardButRelicRng()); } + AbstractDungeon.combatRewardScreen.open(); + AbstractDungeon.getCurrRoom().rewardPopOutTimer = 0.0F; + AbstractDungeon.combatRewardScreen.rewards.remove(AbstractDungeon.combatRewardScreen.rewards.size()-1); } diff --git a/src/main/java/guardian/relics/StasisCodex.java b/src/main/java/guardian/relics/StasisCodex.java index 8edd6b4d9..aa43697e4 100644 --- a/src/main/java/guardian/relics/StasisCodex.java +++ b/src/main/java/guardian/relics/StasisCodex.java @@ -15,32 +15,53 @@ public class StasisCodex extends CustomRelic { public static final String IMG_PATH = "relics/constructCodex.png"; public static final String OUTLINE_IMG_PATH = "relics/constructCodexOutline.png"; public static final String LARGE_IMG_PATH = "relics/constructCodexLarge.png"; - private static final int HP_PER_CARD = 1; + private static final int MAX_MARKER = 3; + private int marker = 0; public StasisCodex() { super(ID, new Texture(GuardianMod.getResourcePath(IMG_PATH)), new Texture(GuardianMod.getResourcePath(OUTLINE_IMG_PATH)), - RelicTier.UNCOMMON, LandingSound.FLAT); + RelicTier.SHOP, LandingSound.FLAT); this.largeImg = TextureLoader.getTexture(GuardianMod.getResourcePath(LARGE_IMG_PATH)); } + @Override + public void atBattleStart() { + this.counter = 0; + marker = 0; + this.grayscale = false; + } + @Override public void onPlayerEndTurn() { super.onPlayerEndTurn(); - if (!GuardianMod.isStasisOrbInPlay()) { - - AbstractDungeon.actionManager.addToBottom(new RelicAboveCreatureAction(AbstractDungeon.player, this)); - AbstractDungeon.actionManager.addToBottom(new StasisCodexAction()); + if (marker < 3) { + ++this.counter; + marker++; + if (AbstractDungeon.player.hasEmptyOrb() || !GuardianMod.isStasisOrbInPlay()) { + AbstractDungeon.actionManager.addToBottom(new RelicAboveCreatureAction(AbstractDungeon.player, this)); + AbstractDungeon.actionManager.addToBottom(new StasisCodexAction()); + } + if (marker == 3) { + this.flash(); + this.grayscale = true; + } } } + @Override + public void onVictory() { + this.grayscale = false; + marker = 0; + this.counter = 0; + } + @Override public String getUpdatedDescription() { return this.DESCRIPTIONS[0]; } - @Override public AbstractRelic makeCopy() { return new StasisCodex(); } -} \ No newline at end of file +} diff --git a/src/main/java/guardian/relics/StasisEgg.java b/src/main/java/guardian/relics/StasisEgg.java index 423ae5824..a8fb16ae4 100644 --- a/src/main/java/guardian/relics/StasisEgg.java +++ b/src/main/java/guardian/relics/StasisEgg.java @@ -4,6 +4,7 @@ import basemod.abstracts.CustomRelic; import basemod.abstracts.CustomSavable; import com.badlogic.gdx.graphics.Texture; +import com.evacipated.cardcrawl.mod.stslib.relics.OnRemoveCardFromMasterDeckRelic; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.cards.CardGroup; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; @@ -11,23 +12,36 @@ import com.megacrit.cardcrawl.helpers.PowerTip; import com.megacrit.cardcrawl.relics.AbstractRelic; import com.megacrit.cardcrawl.rooms.AbstractRoom; +import com.megacrit.cardcrawl.vfx.cardManip.ShowCardBrieflyEffect; import guardian.GuardianMod; import guardian.patches.BottledStasisPatch; import java.util.function.Predicate; -public class StasisEgg extends CustomRelic implements CustomBottleRelic, CustomSavable { +import static awakenedOne.AwakenedOneMod.DELVE; + +public class StasisEgg extends CustomRelic implements CustomBottleRelic, CustomSavable, OnRemoveCardFromMasterDeckRelic { public static final String ID = "Guardian:StasisEgg"; public static final String IMG_PATH = "relics/stasisEgg.png"; public static final String OUTLINE_IMG_PATH = "relics/stasisEggOutline.png"; private boolean cardSelected = true; - private AbstractCard card = null; + public AbstractCard card = null; public StasisEgg() { super(ID, new Texture(GuardianMod.getResourcePath(IMG_PATH)), new Texture(GuardianMod.getResourcePath(OUTLINE_IMG_PATH)), RelicTier.SPECIAL, LandingSound.FLAT); } + @Override + public void onRemoveCardFromMasterDeck(AbstractCard var1) { + if (this.card != null) { + if (var1.uuid == card.uuid) { + this.flash(); + this.grayscale = true; + setDescriptionAfterLoading(); + } + } + } @Override public Predicate isOnCard() { @@ -102,15 +116,39 @@ public void update() { AbstractDungeon.getCurrRoom().phase = AbstractRoom.RoomPhase.COMPLETE; AbstractDungeon.gridSelectScreen.selectedCards.clear(); + + AbstractDungeon.topLevelEffects.add(new ShowCardBrieflyEffect(card.makeStatEquivalentCopy())); + setDescriptionAfterLoading(); } } private void setDescriptionAfterLoading() { - this.description = this.DESCRIPTIONS[2] + FontHelper.colorString(this.card.name, "y") + this.DESCRIPTIONS[3]; - tips.clear(); - tips.add(new PowerTip(name, description)); - initializeTips(); + boolean cardExists = false; + + if (card != null) { + for (AbstractCard c : AbstractDungeon.player.masterDeck.group) { + if (c.uuid == card.uuid) { + cardExists = true; + break; + } + } + } + + if (!cardExists) { + tips.clear(); + this.description = this.DESCRIPTIONS[4]; + this.grayscale = true; + initializeTips(); + } + + if (cardExists) { + this.description = FontHelper.colorString(this.card.name, "y") + this.DESCRIPTIONS[2]; + tips.clear(); + tips.add(new PowerTip(name, description)); + initializeTips(); + this.grayscale = false; + } } @Override @@ -158,4 +196,20 @@ public void atTurnStart() { } } + + public boolean canSpawn() { + + CardGroup tmp = new CardGroup(CardGroup.CardGroupType.UNSPECIFIED); + for (AbstractCard c : CardGroup.getGroupWithoutBottledCards(AbstractDungeon.player.masterDeck).group) { + tmp.addToTop(c); + } + + if (tmp.size() > 0) { + return true; + } else { + return false; + } + + } + } \ No newline at end of file diff --git a/src/main/java/guardian/rewards/GemReward.java b/src/main/java/guardian/rewards/GemReward.java index 1cf27b284..8100f24e8 100644 --- a/src/main/java/guardian/rewards/GemReward.java +++ b/src/main/java/guardian/rewards/GemReward.java @@ -32,7 +32,7 @@ public boolean claimReward() { public void generate_reward_cards(){ this.cards.clear(); - this.cards.add( GuardianMod.getSingleRewardGemWithWeight() ); + this.cards.addAll(GuardianMod.getRewardGemCards(false,1)); } } \ No newline at end of file diff --git a/src/main/java/guardian/rewards/GemRewardButRelicRng.java b/src/main/java/guardian/rewards/GemRewardButRelicRng.java new file mode 100644 index 000000000..67e17ace2 --- /dev/null +++ b/src/main/java/guardian/rewards/GemRewardButRelicRng.java @@ -0,0 +1,38 @@ +package guardian.rewards; + +import basemod.abstracts.CustomReward; +import com.badlogic.gdx.graphics.Texture; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import downfall.patches.RewardItemTypeEnumPatch; +import downfall.util.TextureLoader; +import guardian.GuardianMod; + +public class GemRewardButRelicRng extends CustomReward { + + public static final String[] TEXT; + private static final Texture TEXTURE = TextureLoader.getTexture(GuardianMod.getResourcePath("ui/gemreward.png")); + + static { + TEXT = CardCrawlGame.languagePack.getUIString("Guardian:UIOptions").TEXT; + } + + public GemRewardButRelicRng() { + super(TEXTURE, TEXT[2], RewardItemTypeEnumPatch.GEM); + } + + @Override + public boolean claimReward() { + if (AbstractDungeon.screen == AbstractDungeon.CurrentScreen.COMBAT_REWARD) { + AbstractDungeon.cardRewardScreen.open(this.cards, this, TEXT[1]); + AbstractDungeon.previousScreen = AbstractDungeon.CurrentScreen.COMBAT_REWARD; + } + return false; + } + + public void generate_reward_cards(){ + this.cards.clear(); + this.cards.addAll(GuardianMod.getRewardGemCardsButRelicRng(false,1)); + } + +} \ No newline at end of file diff --git a/src/main/java/guardian/stances/DefensiveMode.java b/src/main/java/guardian/stances/DefensiveMode.java index 7f6483191..02dd6c216 100644 --- a/src/main/java/guardian/stances/DefensiveMode.java +++ b/src/main/java/guardian/stances/DefensiveMode.java @@ -136,4 +136,4 @@ public void onEndOfRound() { public void updateDescription() { this.description = GuardianCharacter.charStrings.TEXT[5]; } -} +} \ No newline at end of file diff --git a/src/main/java/guardian/ui/EnhanceBonfireOption.java b/src/main/java/guardian/ui/EnhanceBonfireOption.java index 99df0800d..f83a173f5 100644 --- a/src/main/java/guardian/ui/EnhanceBonfireOption.java +++ b/src/main/java/guardian/ui/EnhanceBonfireOption.java @@ -5,7 +5,9 @@ import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.helpers.ImageMaster; import com.megacrit.cardcrawl.helpers.MathHelper; +import com.megacrit.cardcrawl.helpers.input.InputHelper; import com.megacrit.cardcrawl.localization.UIStrings; import com.megacrit.cardcrawl.ui.campfire.AbstractCampfireOption; import downfall.util.TextureLoader; @@ -23,6 +25,7 @@ public class EnhanceBonfireOption extends AbstractCampfireOption { } + //private ArrayList idleMessages; public EnhanceBonfireOption(boolean active) { this.label = DESCRIPTIONS[0]; diff --git a/src/main/java/guardian/ui/FindGemsOption.java b/src/main/java/guardian/ui/FindGemsOption.java index d780bf397..65a97d9a4 100644 --- a/src/main/java/guardian/ui/FindGemsOption.java +++ b/src/main/java/guardian/ui/FindGemsOption.java @@ -4,11 +4,13 @@ import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.helpers.ImageMaster; import com.megacrit.cardcrawl.helpers.MathHelper; import com.megacrit.cardcrawl.localization.UIStrings; import com.megacrit.cardcrawl.ui.campfire.AbstractCampfireOption; import downfall.util.TextureLoader; import guardian.GuardianMod; +import guardian.relics.PickAxe; import guardian.vfx.CampfireFindGemsEffect; @@ -22,8 +24,10 @@ public class FindGemsOption extends AbstractCampfireOption { } + //private ArrayList idleMessages; public FindGemsOption(boolean active) { this.label = DESCRIPTIONS[0]; + this.description = DESCRIPTIONS[1]; this.usable = active; if (active) { @@ -37,10 +41,10 @@ public FindGemsOption(boolean active) { @Override public void useOption() { + AbstractDungeon.effectList.add(new CampfireFindGemsEffect()); - this.description = DESCRIPTIONS[2]; - this.img = TextureLoader.getTexture(GuardianMod.getResourcePath("ui/minecampfiredisabled.png")); - this.usable = false; + AbstractDungeon.player.getRelic(PickAxe.ID).onTrigger(); + } @Override diff --git a/src/main/java/guardian/vfx/CampfireFindGemsEffect.java b/src/main/java/guardian/vfx/CampfireFindGemsEffect.java index 2580cc3d6..01cabccbd 100644 --- a/src/main/java/guardian/vfx/CampfireFindGemsEffect.java +++ b/src/main/java/guardian/vfx/CampfireFindGemsEffect.java @@ -1,3 +1,8 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by Fernflower decompiler) +// + package guardian.vfx; import com.badlogic.gdx.Gdx; @@ -9,16 +14,17 @@ import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.helpers.ImageMaster; +import com.megacrit.cardcrawl.rooms.AbstractRoom.RoomPhase; import com.megacrit.cardcrawl.rooms.RestRoom; import com.megacrit.cardcrawl.vfx.AbstractGameEffect; +import com.megacrit.cardcrawl.vfx.cardManip.ShowCardAndObtainEffect; import guardian.GuardianMod; +import guardian.rewards.GemReward; import java.util.ArrayList; -import java.util.Arrays; public class CampfireFindGemsEffect extends AbstractGameEffect { private static final float DUR = 2.0F; - private boolean got = false; private Color screenColor; @@ -33,25 +39,19 @@ public void update() { this.duration -= Gdx.graphics.getDeltaTime(); this.updateBlackScreenColor(); - if (this.duration < 1.0F) { - if(!got) { - got = true; - CardCrawlGame.sound.play("SHOVEL"); - ArrayList gems = new ArrayList<>(Arrays.asList(GuardianMod.getSingleRewardGemWithWeight())) ; - if (gems != null && !gems.isEmpty()) { - AbstractDungeon.cardRewardScreen.open(gems, null, ""); - } - -// AbstractDungeon.topLevelEffects.add(new ShowCardAndObtainEffect(gems.get(0), (float) (Settings.WIDTH * 0.35), (float) (Settings.HEIGHT / 2))); -// AbstractDungeon.topLevelEffects.add(new ShowCardAndObtainEffect(gems.get(1), (float) (Settings.WIDTH * 0.7), (float) (Settings.HEIGHT / 2))); + if (this.duration < 0.0F) { + CardCrawlGame.sound.play("SHOVEL"); + for (int i = 0; i < 2; i++) { + AbstractDungeon.getCurrRoom().rewards.add(new GemReward()); } - } + // AbstractDungeon.combatRewardScreen.rewards.remove(AbstractDungeon.combatRewardScreen.rewards.size()-1); + AbstractDungeon.combatRewardScreen.open(); + AbstractDungeon.getCurrRoom().rewardPopOutTimer = 0.0F; + - if (this.duration < 0.0F) { this.isDone = true; ((RestRoom) AbstractDungeon.getCurrRoom()).fadeIn(); - ((RestRoom) AbstractDungeon.getCurrRoom()).campfireUI.reopen(); -// AbstractDungeon.getCurrRoom().phase = RoomPhase.COMPLETE; + AbstractDungeon.getCurrRoom().phase = RoomPhase.COMPLETE; } } @@ -74,4 +74,4 @@ public void render(SpriteBatch sb) { public void dispose() { } -} +} \ No newline at end of file diff --git a/src/main/java/hermit/actions/EclipseAction.java b/src/main/java/hermit/actions/EclipseAction.java index 31bf061f7..4c85b3241 100644 --- a/src/main/java/hermit/actions/EclipseAction.java +++ b/src/main/java/hermit/actions/EclipseAction.java @@ -1,6 +1,8 @@ package hermit.actions; import java.util.Iterator; + +import basemod.BaseMod; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.AbstractGameAction.ActionType; import com.megacrit.cardcrawl.cards.AbstractCard; @@ -40,7 +42,7 @@ public void update() { this.isDone = true; } else if (tmp.size() == 1) { card = tmp.getTopCard(); - if (this.p.hand.size() == 10) { + if (this.p.hand.size() == BaseMod.MAX_HAND_SIZE) { this.p.exhaustPile.moveToDiscardPile(card); this.p.exhaustPile.removeCard(card); this.p.createHandIsFullDialog(); @@ -64,7 +66,7 @@ public void update() { } else if (tmp.size() <= this.amount) { for(int i = 0; i < tmp.size(); ++i) { card = tmp.getNCardFromTop(i); - if (this.p.hand.size() == 10) { + if (this.p.hand.size() == BaseMod.MAX_HAND_SIZE) { this.p.exhaustPile.moveToDiscardPile(card); this.p.createHandIsFullDialog(); } else { @@ -101,7 +103,7 @@ public void update() { while(var1.hasNext()) { card = (AbstractCard)var1.next(); card.unhover(); - if (this.p.hand.size() == 10) { + if (this.p.hand.size() == BaseMod.MAX_HAND_SIZE) { this.p.exhaustPile.moveToDiscardPile(card); this.p.exhaustPile.removeCard(card); card.setCostForTurn(0); diff --git a/src/main/java/hermit/actions/FullyLoadedAction.java b/src/main/java/hermit/actions/FullyLoadedAction.java index a86e6adc1..bd690e2ec 100644 --- a/src/main/java/hermit/actions/FullyLoadedAction.java +++ b/src/main/java/hermit/actions/FullyLoadedAction.java @@ -1,5 +1,6 @@ package hermit.actions; +import basemod.BaseMod; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.common.DrawCardAction; import com.megacrit.cardcrawl.cards.AbstractCard; @@ -53,7 +54,7 @@ public void update() { tmp.shuffle(); card = tmp.getBottomCard(); tmp.removeCard(card); - if (this.p.hand.size() == 10) { + if (this.p.hand.size() == BaseMod.MAX_HAND_SIZE) { this.p.createHandIsFullDialog(); } else { p.drawPile.group.remove(card); diff --git a/src/main/java/hermit/actions/GambitAction.java b/src/main/java/hermit/actions/GambitAction.java index 7505b87f2..30c700955 100644 --- a/src/main/java/hermit/actions/GambitAction.java +++ b/src/main/java/hermit/actions/GambitAction.java @@ -1,5 +1,6 @@ package hermit.actions; +import basemod.BaseMod; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.AbstractGameAction.ActionType; import com.megacrit.cardcrawl.actions.common.ReduceCostForTurnAction; @@ -53,7 +54,7 @@ public void update() { tmp.shuffle(); card = tmp.getBottomCard(); tmp.removeCard(card); - if (this.p.hand.size() == 10) { + if (this.p.hand.size() == BaseMod.MAX_HAND_SIZE) { this.p.createHandIsFullDialog(); } else { card.unhover(); diff --git a/src/main/java/hermit/actions/LuckDrawAction.java b/src/main/java/hermit/actions/LuckDrawAction.java index 6b2a6081d..274cb76f2 100644 --- a/src/main/java/hermit/actions/LuckDrawAction.java +++ b/src/main/java/hermit/actions/LuckDrawAction.java @@ -1,5 +1,6 @@ package hermit.actions; +import basemod.BaseMod; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.common.DrawCardAction; import com.megacrit.cardcrawl.actions.common.EmptyDeckShuffleAction; @@ -26,7 +27,7 @@ public LuckDrawAction(int energy) { public void update() { if (this.duration == Settings.ACTION_DUR_MED) { - if (tracker >= energy || (p.drawPile.isEmpty() && p.discardPile.isEmpty()) || p.hand.size() >= 10) { + if (tracker >= energy || (p.drawPile.isEmpty() && p.discardPile.isEmpty()) || p.hand.size() >= BaseMod.MAX_HAND_SIZE) { this.isDone = true; return; } diff --git a/src/main/java/hermit/cards/AbstractHermitCard.java b/src/main/java/hermit/cards/AbstractHermitCard.java index b148d01b0..39fac8d88 100644 --- a/src/main/java/hermit/cards/AbstractHermitCard.java +++ b/src/main/java/hermit/cards/AbstractHermitCard.java @@ -191,7 +191,7 @@ public void TriggerDeadOnEffect(AbstractPlayer p, AbstractMonster m) if (c.relicId.equals(BlackPowder.ID)) { this.addToBot(new RelicAboveCreatureAction(AbstractDungeon.player, c)); - this.addToBot(new DamageAllEnemiesAction((AbstractCreature) null, DamageInfo.createDamageMatrix(2, true), DamageInfo.DamageType.THORNS, AbstractGameAction.AttackEffect.FIRE,true)); + this.addToBot(new DamageAllEnemiesAction((AbstractCreature) null, DamageInfo.createDamageMatrix(BlackPowder.OOMPH, true), DamageInfo.DamageType.THORNS, AbstractGameAction.AttackEffect.FIRE,true)); } } } diff --git a/src/main/java/hermit/cards/Covet.java b/src/main/java/hermit/cards/Covet.java index 512fd0401..d6dec8690 100644 --- a/src/main/java/hermit/cards/Covet.java +++ b/src/main/java/hermit/cards/Covet.java @@ -5,6 +5,7 @@ import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.helpers.GameDictionary; import com.megacrit.cardcrawl.localization.CardStrings; import com.megacrit.cardcrawl.localization.UIStrings; import com.megacrit.cardcrawl.monsters.AbstractMonster; @@ -78,4 +79,12 @@ public void upgrade() { initializeDescription(); } } + + //add curse keyword + @Override + public void initializeDescription() { + super.initializeDescription(); + this.keywords.add(GameDictionary.CURSE.NAMES[0].toLowerCase()); + } + } \ No newline at end of file diff --git a/src/main/java/hermit/cards/EternalForm.java b/src/main/java/hermit/cards/EternalForm.java index 9f5f78e20..a23227fe0 100644 --- a/src/main/java/hermit/cards/EternalForm.java +++ b/src/main/java/hermit/cards/EternalForm.java @@ -1,5 +1,6 @@ package hermit.cards; +import basemod.helpers.BaseModCardTags; import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.core.CardCrawlGame; @@ -35,6 +36,7 @@ public EternalForm() { baseMagicNumber = magicNumber = 1; this.isEthereal = true; loadJokeCardImage(this, "eternal_form.png"); + tags.add(BaseModCardTags.FORM); } @Override diff --git a/src/main/java/hermit/cards/FinalCanter.java b/src/main/java/hermit/cards/FinalCanter.java index d869e52e7..c49a17ef9 100644 --- a/src/main/java/hermit/cards/FinalCanter.java +++ b/src/main/java/hermit/cards/FinalCanter.java @@ -11,6 +11,7 @@ import hermit.actions.FinalCanterAction; import hermit.characters.hermit; import hermit.util.Wiz; +import sneckomod.SneckoMod; import java.util.Iterator; @@ -46,6 +47,7 @@ public FinalCanter() { this.selfRetain = true; exhaust=true; loadJokeCardImage(this, "final_canter.png"); + this.tags.add(SneckoMod.BANNEDFORSNECKO); } // Actions the card should do. diff --git a/src/main/java/hermit/cards/ImpendingDoom.java b/src/main/java/hermit/cards/ImpendingDoom.java index 3680490a1..59e31d154 100644 --- a/src/main/java/hermit/cards/ImpendingDoom.java +++ b/src/main/java/hermit/cards/ImpendingDoom.java @@ -9,6 +9,7 @@ import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.localization.CardStrings; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import downfall.downfallMod; import hermit.HermitMod; import hermit.powers.Concentration; import hermit.powers.SnipePower; @@ -27,7 +28,7 @@ public class ImpendingDoom extends AbstractDynamicCard { // STAT DECLARATION - private static final CardRarity RARITY = CardRarity.SPECIAL; + private static final CardRarity RARITY = CardRarity.CURSE; // remove special rarity to become downfall curse private static final CardTarget TARGET = CardTarget.ALL; private static final CardType TYPE = CardType.CURSE; public static final CardColor COLOR = CardColor.CURSE; @@ -45,6 +46,10 @@ public ImpendingDoom() { baseDamage = DAMAGE; this.isMultiDamage = true; loadJokeCardImage(this, "impending_doom.png"); + + //Impending Doom can now show up as a Curse during Downfall Mode runs. + tags.add(downfallMod.DOWNFALL_CURSE); + } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/hermit/cards/Malice.java b/src/main/java/hermit/cards/Malice.java index 5b47394f4..ce047577d 100644 --- a/src/main/java/hermit/cards/Malice.java +++ b/src/main/java/hermit/cards/Malice.java @@ -1,5 +1,6 @@ package hermit.cards; +import champ.relics.DuelingGlove; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.common.DamageAction; import com.megacrit.cardcrawl.actions.common.DamageAllEnemiesAction; @@ -7,12 +8,15 @@ import com.megacrit.cardcrawl.cards.DamageInfo; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.localization.CardStrings; import com.megacrit.cardcrawl.localization.UIStrings; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import gremlin.relics.TagTeamwork; import hermit.HermitMod; import hermit.actions.HandSelectAction; import hermit.characters.hermit; +import hermit.relics.Spyglass; import hermit.util.Wiz; import static hermit.HermitMod.loadJokeCardImage; @@ -50,6 +54,7 @@ public Malice() { baseDamage = DAMAGE; loadJokeCardImage(this, "malice.png"); } + @Override public void use(AbstractPlayer p, AbstractMonster m) { Wiz.atb(new HandSelectAction(1, (c) -> true, list -> {}, list -> { @@ -62,10 +67,15 @@ public void use(AbstractPlayer p, AbstractMonster m) { isCurse = true; } - if (isCurse) + if (isCurse) { Wiz.att(new DamageAllEnemiesAction(p, DamageInfo.createDamageMatrix(this.baseDamage), DamageInfo.DamageType.NORMAL, AbstractGameAction.AttackEffect.FIRE)); - else + } else { Wiz.att(new DamageAction(m, new DamageInfo(p, this.damage, this.damageTypeForTurn), AbstractGameAction.AttackEffect.FIRE)); + //schrodinger's card target + if (AbstractDungeon.player.hasRelic(DuelingGlove.ID)) { + AbstractDungeon.player.getRelic(DuelingGlove.ID).onTrigger(m); + } + } }, uiStrings.TEXT[0],false,false,false)); } diff --git a/src/main/java/hermit/cards/RoundhouseKick.java b/src/main/java/hermit/cards/RoundhouseKick.java index 6a1c83104..61bf8fcc2 100644 --- a/src/main/java/hermit/cards/RoundhouseKick.java +++ b/src/main/java/hermit/cards/RoundhouseKick.java @@ -12,6 +12,7 @@ import com.megacrit.cardcrawl.vfx.combat.CleaveEffect; import hermit.HermitMod; import hermit.characters.hermit; +import sneckomod.SneckoMod; import java.util.Iterator; diff --git a/src/main/java/hermit/patches/VigorPatch.java b/src/main/java/hermit/patches/VigorPatch.java index 977b05fe8..e6286d405 100644 --- a/src/main/java/hermit/patches/VigorPatch.java +++ b/src/main/java/hermit/patches/VigorPatch.java @@ -11,6 +11,8 @@ import com.megacrit.cardcrawl.powers.watcher.VigorPower; import hermit.powers.BigShotPower; +import static champ.ChampMod.vigor; + public class VigorPatch { public static int isActive=0; @@ -23,7 +25,6 @@ public static class DisableHealing public static void Prefix(GameActionManager m) { if (m.actions.isEmpty() && m.preTurnActions.isEmpty() && m.cardQueue.isEmpty() && isActive > 0) { - VigorPatch.thisRun = true; } } @@ -38,7 +39,8 @@ public static void Postfix(GameActionManager m) AbstractPlayer p = AbstractDungeon.player; AbstractPower pow = AbstractDungeon.player.getPower(BigShotPower.POWER_ID); pow.flash(); - AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, new VigorPower(p, pow.amount), pow.amount)); + vigor(pow.amount); + //AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, new VigorPower(p, pow.amount), pow.amount)); } thisRun = false; isActive -= 1; diff --git a/src/main/java/hermit/powers/CoalescencePower.java b/src/main/java/hermit/powers/CoalescencePower.java index 6cbe1fba1..45efcfead 100644 --- a/src/main/java/hermit/powers/CoalescencePower.java +++ b/src/main/java/hermit/powers/CoalescencePower.java @@ -10,6 +10,7 @@ import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.localization.PowerStrings; import com.megacrit.cardcrawl.powers.AbstractPower; +import com.megacrit.cardcrawl.powers.watcher.EstablishmentPower; import hermit.HermitMod; import hermit.util.TextureLoader; @@ -49,7 +50,7 @@ public CoalescencePower(final AbstractCreature owner, final int amount) { public void atEndOfTurn(boolean isPlayer) { this.flash(); - if (isPlayer && !AbstractDungeon.player.hand.isEmpty() && !AbstractDungeon.player.hasRelic("Runic Pyramid") && !AbstractDungeon.player.hasPower("Equilibrium")) { + if ((isPlayer && !AbstractDungeon.player.hand.isEmpty() && !AbstractDungeon.player.hasPower("Equilibrium"))) { this.addToBot(new RetainCardsAction(this.owner, this.amount)); } diff --git a/src/main/java/hermit/powers/Drained.java b/src/main/java/hermit/powers/Drained.java index 35e91936c..f4ff6a37f 100644 --- a/src/main/java/hermit/powers/Drained.java +++ b/src/main/java/hermit/powers/Drained.java @@ -32,7 +32,7 @@ public Drained(final AbstractCreature owner, final AbstractCreature source, fina this.source = source; type = PowerType.DEBUFF; - isTurnBased = false; + isTurnBased = true; // We load those textures here. this.region128 = new TextureAtlas.AtlasRegion(tex84, 0, 0, 84, 84); diff --git a/src/main/java/hermit/relics/BartenderGlass.java b/src/main/java/hermit/relics/BartenderGlass.java index bbfdab705..eb73daa11 100644 --- a/src/main/java/hermit/relics/BartenderGlass.java +++ b/src/main/java/hermit/relics/BartenderGlass.java @@ -18,6 +18,10 @@ public class BartenderGlass extends CustomRelic { private static final Texture IMG = TextureLoader.getTexture(makeRelicPath("bartenders_glass.png")); private static final Texture OUTLINE = TextureLoader.getTexture(makeRelicOutlinePath("bartenders_glass.png")); + + //variables + private static final int POTION_LIMIT = 2; + public BartenderGlass() { super(ID, IMG, OUTLINE, RelicTier.BOSS, LandingSound.SOLID); counter = -1; @@ -27,7 +31,7 @@ public void obtain() { super.obtain(); if (AbstractDungeon.getCurrRoom().phase == AbstractRoom.RoomPhase.COMBAT) - counter = 2; + counter = POTION_LIMIT; else counter = -1; } @@ -35,7 +39,7 @@ public void obtain() { @Override public void atBattleStart() { flash(); - this.counter = 2; + this.counter = POTION_LIMIT; AbstractDungeon.actionManager.addToTop(new RelicAboveCreatureAction(AbstractDungeon.player, this)); this.grayscale = false; } @@ -59,7 +63,7 @@ public void onUsePotion() { @Override public String getUpdatedDescription() { - return DESCRIPTIONS[0]; + return DESCRIPTIONS[0] + POTION_LIMIT + DESCRIPTIONS[2] + POTION_LIMIT + DESCRIPTIONS[3]; } } diff --git a/src/main/java/hermit/relics/BlackPowder.java b/src/main/java/hermit/relics/BlackPowder.java index a0a3d782e..af97e9e1e 100644 --- a/src/main/java/hermit/relics/BlackPowder.java +++ b/src/main/java/hermit/relics/BlackPowder.java @@ -14,12 +14,15 @@ public class BlackPowder extends CustomRelic { private static final Texture IMG = TextureLoader.getTexture(makeRelicPath("black_powder.png")); private static final Texture OUTLINE = TextureLoader.getTexture(makeRelicOutlinePath("black_powder_outline.png")); + //aoe damage dealt + public static final int OOMPH = 2; + public BlackPowder() { super(ID, IMG, OUTLINE, RelicTier.COMMON, LandingSound.FLAT); } @Override public String getUpdatedDescription() { - return DESCRIPTIONS[0]; + return DESCRIPTIONS[0] + OOMPH + DESCRIPTIONS[1]; } } \ No newline at end of file diff --git a/src/main/java/hermit/relics/BloodyTooth.java b/src/main/java/hermit/relics/BloodyTooth.java index 96ff154f2..a7856680d 100644 --- a/src/main/java/hermit/relics/BloodyTooth.java +++ b/src/main/java/hermit/relics/BloodyTooth.java @@ -2,10 +2,12 @@ import basemod.abstracts.CustomRelic; import com.badlogic.gdx.graphics.Texture; +import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import hermit.HermitMod; import hermit.util.TextureLoader; +import static downfall.patches.EvilModeCharacterSelect.evilMode; import static hermit.HermitMod.makeRelicOutlinePath; import static hermit.HermitMod.makeRelicPath; @@ -19,20 +21,27 @@ public BloodyTooth() { super(ID, IMG, OUTLINE, RelicTier.UNCOMMON, LandingSound.FLAT); } + //variables + private static final int HEALING = 7; + private static final int GOLD = 35; + public void onVictory(){ if ((AbstractDungeon.getCurrRoom()).eliteTrigger) { this.flash(); if (AbstractDungeon.player.currentHealth > 0) { - AbstractDungeon.player.heal(7); + AbstractDungeon.player.heal(HEALING); } - AbstractDungeon.player.gainGold(35); + AbstractDungeon.player.gainGold(GOLD); } } + public boolean canSpawn() { + return Settings.isEndless || ((AbstractDungeon.floorNum <= 53 && AbstractDungeon.ascensionLevel >= 20) && !evilMode) || ((AbstractDungeon.floorNum <= 52 && AbstractDungeon.ascensionLevel < 20 && !evilMode)) || ((AbstractDungeon.floorNum <= 48 && evilMode)); + } + @Override public String getUpdatedDescription() { - return DESCRIPTIONS[0]; + return DESCRIPTIONS[0] + HEALING + DESCRIPTIONS[1] + GOLD + DESCRIPTIONS[2]; } - } diff --git a/src/main/java/hermit/relics/BrassTacks.java b/src/main/java/hermit/relics/BrassTacks.java index 77798cc41..7b4bfd99c 100644 --- a/src/main/java/hermit/relics/BrassTacks.java +++ b/src/main/java/hermit/relics/BrassTacks.java @@ -22,15 +22,18 @@ public BrassTacks() { super(ID, IMG, OUTLINE, RelicTier.COMMON, LandingSound.CLINK); } + //variables + private static final int BLOCK = 2; + public void atBattleStart() { this.flash(); - this.addToTop(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new MetallicizePower(AbstractDungeon.player, 2), 2)); + this.addToTop(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new MetallicizePower(AbstractDungeon.player, BLOCK), BLOCK)); this.addToTop(new RelicAboveCreatureAction(AbstractDungeon.player, this)); } @Override public String getUpdatedDescription() { - return DESCRIPTIONS[0]; + return DESCRIPTIONS[0] + BLOCK + DESCRIPTIONS[1]; } } diff --git a/src/main/java/hermit/relics/CharredGlove.java b/src/main/java/hermit/relics/CharredGlove.java index 328a60d98..fe9506208 100644 --- a/src/main/java/hermit/relics/CharredGlove.java +++ b/src/main/java/hermit/relics/CharredGlove.java @@ -21,6 +21,7 @@ import java.util.Iterator; import java.util.Random; +import static champ.ChampMod.vigor; import static hermit.HermitMod.makeRelicOutlinePath; import static hermit.HermitMod.makeRelicPath; @@ -36,10 +37,17 @@ public CharredGlove() { super(ID, IMG, OUTLINE, RelicTier.RARE, LandingSound.FLAT); } + //vigor gain per turn + private static final int AMOUNT = 3; + public void onCardDraw(AbstractCard card) { if (card.color == AbstractCard.CardColor.CURSE) { this.flash(); - AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new VigorPower(AbstractDungeon.player, 3), 3)); + //AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new VigorPower(AbstractDungeon.player, 3), 3)); + + //This should NEVER happen but maybe there's some cross-mod nonsense that allows it to happen. + //Mechanically speaking, this is basically identical. + vigor(AMOUNT); } } @@ -49,7 +57,7 @@ public void onCardDraw(AbstractCard card) { // Description @Override public String getUpdatedDescription() { - return DESCRIPTIONS[0]; + return DESCRIPTIONS[0] + AMOUNT + DESCRIPTIONS[1]; } } diff --git a/src/main/java/hermit/relics/ClaspedLocket.java b/src/main/java/hermit/relics/ClaspedLocket.java index 4db0dae4c..f0fc3c405 100644 --- a/src/main/java/hermit/relics/ClaspedLocket.java +++ b/src/main/java/hermit/relics/ClaspedLocket.java @@ -28,6 +28,11 @@ public ClaspedLocket() { super(ID, IMG, OUTLINE, RelicTier.BOSS, LandingSound.FLAT); } + + //variables + private static final int INJURIES_ADDED = 2; + private static final int DRAW = 2; + @Override public void obtain() { if (AbstractDungeon.player.hasRelic(Memento.ID)) { @@ -49,8 +54,11 @@ public void onCardDraw(AbstractCard card) { if (card.type == AbstractCard.CardType.CURSE) { this.flash(); + this.addToBot(new RelicAboveCreatureAction(AbstractDungeon.player, this)); this.canTrigger = false; - this.addToTop(new DrawCardAction(AbstractDungeon.player, 2)); + // visual feedback so the player can tell if it triggered that turn + stopPulse(); + this.addToTop(new DrawCardAction(AbstractDungeon.player, DRAW)); this.addToTop(new ExhaustSpecificCardAction(card,AbstractDungeon.player.hand)); } @@ -62,8 +70,15 @@ public boolean canSpawn() { public void atTurnStart() { this.canTrigger = true; + beginLongPulse(); //visual feedback + } + + @Override + public void onVictory() { + stopPulse(); } + public void update() { super.update(); @@ -71,7 +86,7 @@ public void update() { cardsReceived = true; CardCrawlGame.sound.play("NECRONOMICON"); CardGroup curseaddgroup = new CardGroup(CardGroup.CardGroupType.UNSPECIFIED); - for (int aaa = 0; aaa < 2; aaa++) { + for (int aaa = 0; aaa < INJURIES_ADDED; aaa++) { AbstractCard InjuryCard = new Injury(); curseaddgroup.addToBottom(InjuryCard.makeCopy()); } @@ -81,6 +96,6 @@ public void update() { @Override public String getUpdatedDescription() { - return DESCRIPTIONS[0]; + return DESCRIPTIONS[0] + DRAW + DESCRIPTIONS[2] + INJURIES_ADDED + DESCRIPTIONS[3]; } } diff --git a/src/main/java/hermit/relics/RedScarf.java b/src/main/java/hermit/relics/RedScarf.java index 9c808aefb..6616ce05d 100644 --- a/src/main/java/hermit/relics/RedScarf.java +++ b/src/main/java/hermit/relics/RedScarf.java @@ -23,6 +23,9 @@ public RedScarf() { super(ID, IMG, OUTLINE, RelicTier.RARE, LandingSound.MAGICAL); } + //variables + private static final int BLOCK = 3; + @Override public boolean onApplyPower(AbstractPower var1, AbstractCreature var2, AbstractCreature var3) { @@ -31,7 +34,7 @@ public boolean onApplyPower(AbstractPower var1, AbstractCreature var2, AbstractC this.addToTop(new RelicAboveCreatureAction(AbstractDungeon.player, this)); flash(); - this.addToBot(new GainBlockAction(AbstractDungeon.player, AbstractDungeon.player, 3)); + this.addToBot(new GainBlockAction(AbstractDungeon.player, AbstractDungeon.player, BLOCK)); } return true; @@ -39,7 +42,7 @@ public boolean onApplyPower(AbstractPower var1, AbstractCreature var2, AbstractC @Override public String getUpdatedDescription() { - return DESCRIPTIONS[0]; + return DESCRIPTIONS[0] + BLOCK + DESCRIPTIONS[1]; } } diff --git a/src/main/java/hermit/relics/StraightRazor.java b/src/main/java/hermit/relics/StraightRazor.java index 19987752e..91a111ca7 100644 --- a/src/main/java/hermit/relics/StraightRazor.java +++ b/src/main/java/hermit/relics/StraightRazor.java @@ -5,10 +5,12 @@ import com.evacipated.cardcrawl.mod.stslib.relics.OnRemoveCardFromMasterDeckRelic; import com.megacrit.cardcrawl.actions.common.RelicAboveCreatureAction; import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import hermit.HermitMod; import hermit.util.TextureLoader; +import static downfall.patches.EvilModeCharacterSelect.evilMode; import static hermit.HermitMod.makeRelicOutlinePath; import static hermit.HermitMod.makeRelicPath; @@ -18,6 +20,10 @@ public class StraightRazor extends CustomRelic implements OnRemoveCardFromMaster private static final Texture IMG = TextureLoader.getTexture(makeRelicPath("straight_razor.png")); private static final Texture OUTLINE = TextureLoader.getTexture(makeRelicOutlinePath("straight_razor_outline.png")); + + //variables + private static final int HEALING = 15; + public StraightRazor() { super(ID, IMG, OUTLINE, RelicTier.UNCOMMON, LandingSound.CLINK); } @@ -26,12 +32,15 @@ public StraightRazor() { public void onRemoveCardFromMasterDeck(AbstractCard var1){ this.flash(); this.addToTop(new RelicAboveCreatureAction(AbstractDungeon.player, this)); - AbstractDungeon.player.heal(15); + AbstractDungeon.player.heal(HEALING); + } + + public boolean canSpawn() { + return Settings.isEndless || (AbstractDungeon.floorNum <= 48); // cannot appear in act 4 } @Override public String getUpdatedDescription() { - return DESCRIPTIONS[0]; + return DESCRIPTIONS[0] + HEALING + DESCRIPTIONS[1]; } - } diff --git a/src/main/java/reskinContent/reskinContent.java b/src/main/java/reskinContent/reskinContent.java index 27bfe7934..4033a517d 100644 --- a/src/main/java/reskinContent/reskinContent.java +++ b/src/main/java/reskinContent/reskinContent.java @@ -73,18 +73,21 @@ public reskinContent() { public static String getLanguageString() { String language; switch (Settings.language) { + case PTB: + language = "ptb"; + break; case ZHS: language = "zhs"; break; -// case ZHT: -// language = "zht"; -// break; + case ZHT: + language = "zht"; + break; case RUS: language = "rus"; break; -// case FRA: -// language = "fra"; -// break; + case FRA: + language = "fra"; + break; case KOR: language = "kor"; break; diff --git a/src/main/java/reskinContent/skinCharacter/GremlinSkin.java b/src/main/java/reskinContent/skinCharacter/GremlinSkin.java new file mode 100644 index 000000000..f2d9ef257 --- /dev/null +++ b/src/main/java/reskinContent/skinCharacter/GremlinSkin.java @@ -0,0 +1 @@ +//there's nothing here! \ No newline at end of file diff --git a/src/main/java/slimebound/actions/ExhaustToHandDirectlyAction.java b/src/main/java/slimebound/actions/ExhaustToHandDirectlyAction.java index 90f70d14a..13f0c2f39 100644 --- a/src/main/java/slimebound/actions/ExhaustToHandDirectlyAction.java +++ b/src/main/java/slimebound/actions/ExhaustToHandDirectlyAction.java @@ -1,5 +1,6 @@ package slimebound.actions; +import basemod.BaseMod; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.core.Settings; @@ -16,7 +17,7 @@ public ExhaustToHandDirectlyAction(AbstractCard card) { public void update() { if (this.duration == Settings.ACTION_DUR_FAST) {// 19 - if ((AbstractDungeon.player.discardPile.contains(this.card)) && AbstractDungeon.player.hand.size() < 10) {// 20 21 + if ((AbstractDungeon.player.discardPile.contains(this.card)) && AbstractDungeon.player.hand.size() < BaseMod.MAX_HAND_SIZE) {// 20 21 AbstractDungeon.player.hand.addToHand(this.card);// 22 this.card.unhover();// 23 this.card.setAngle(0.0F, true);// 24 diff --git a/src/main/java/slimebound/actions/MakeTempCardInHandActionReduceCost.java b/src/main/java/slimebound/actions/MakeTempCardInHandActionReduceCost.java index f49f62d34..3f69c24be 100644 --- a/src/main/java/slimebound/actions/MakeTempCardInHandActionReduceCost.java +++ b/src/main/java/slimebound/actions/MakeTempCardInHandActionReduceCost.java @@ -1,5 +1,6 @@ package slimebound.actions; +import basemod.BaseMod; import com.badlogic.gdx.math.MathUtils; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.core.Settings; @@ -61,9 +62,9 @@ public void update() { int handAmount = this.amount; - if (this.amount + AbstractDungeon.player.hand.size() > 10) { + if (this.amount + AbstractDungeon.player.hand.size() > BaseMod.MAX_HAND_SIZE) { AbstractDungeon.player.createHandIsFullDialog(); - discardAmount = this.amount + AbstractDungeon.player.hand.size() - 10; + discardAmount = this.amount + AbstractDungeon.player.hand.size() - BaseMod.MAX_HAND_SIZE; handAmount -= discardAmount; } diff --git a/src/main/java/slimebound/actions/SlimeAutoAttack.java b/src/main/java/slimebound/actions/SlimeAutoAttack.java index f37cda518..bad22e3fe 100644 --- a/src/main/java/slimebound/actions/SlimeAutoAttack.java +++ b/src/main/java/slimebound/actions/SlimeAutoAttack.java @@ -166,7 +166,6 @@ public void update() { if (this.CultistBuff) { CardCrawlGame.sound.playA("VO_CULTIST_1A", .3f); AbstractDungeon.actionManager.addToTop(new SlimeAutoCultistBuff(1, this.slime)); - } if (slime instanceof ShieldSlime) @@ -174,7 +173,6 @@ public void update() { if (this.hitsAll) { AbstractDungeon.actionManager.addToTop(new DamageAllEnemiesAction(AbstractDungeon.player, DamageInfo.createDamageMatrix(this.damage, true, true), DamageInfo.DamageType.THORNS, AttackEffect.POISON)); - } else { AbstractDungeon.actionManager.addToTop(new DamageAction(mo, new DamageInfo(AbstractDungeon.player, this.damage, DamageInfo.DamageType.THORNS), diff --git a/src/main/java/slimebound/cards/AbstractSlimeboundCard.java b/src/main/java/slimebound/cards/AbstractSlimeboundCard.java index d57d3357b..727164eaa 100644 --- a/src/main/java/slimebound/cards/AbstractSlimeboundCard.java +++ b/src/main/java/slimebound/cards/AbstractSlimeboundCard.java @@ -1,6 +1,7 @@ package slimebound.cards; import basemod.abstracts.CustomCard; +import champ.relics.DefensiveTrainingManual; import com.badlogic.gdx.graphics.Texture; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; @@ -98,7 +99,7 @@ public void applyPowers() { super.applyPowers(); int base = baseSelfDamage; if (AbstractDungeon.player.hasRelic(SelfDamagePreventRelic.ID)) { - base -= 3; + base -= SelfDamagePreventRelic.AMOUNT; } if (AbstractDungeon.player.hasPower(TackleModifyDamagePower.POWER_ID)) { base += AbstractDungeon.player.getPower(TackleModifyDamagePower.POWER_ID).amount; diff --git a/src/main/java/slimebound/cards/DivideAndConquer.java b/src/main/java/slimebound/cards/DivideAndConquer.java index bf838d9a0..108221cb5 100644 --- a/src/main/java/slimebound/cards/DivideAndConquer.java +++ b/src/main/java/slimebound/cards/DivideAndConquer.java @@ -24,6 +24,7 @@ import slimebound.actions.TendrilFlailAction; import slimebound.orbs.SpawnedSlime; import slimebound.patches.AbstractCardEnum; +import sneckomod.SneckoMod; import java.util.ArrayList; @@ -56,6 +57,7 @@ public DivideAndConquer() { this.exhaust = true; this.isMultiDamage = true; baseDamage = 10; + this.tags.add(SneckoMod.BANNEDFORSNECKO); SlimeboundMod.loadJokeCardImage(this, "DivideAndConquer.png"); } diff --git a/src/main/java/slimebound/cards/FirmFortitude.java b/src/main/java/slimebound/cards/FirmFortitude.java index 2556671a8..94a041c81 100644 --- a/src/main/java/slimebound/cards/FirmFortitude.java +++ b/src/main/java/slimebound/cards/FirmFortitude.java @@ -13,6 +13,7 @@ import slimebound.SlimeboundMod; import slimebound.patches.AbstractCardEnum; import slimebound.powers.PotencyPower; +import sneckomod.SneckoMod; public class FirmFortitude extends AbstractSlimeboundCard { @@ -41,6 +42,7 @@ public FirmFortitude() { baseMagicNumber = magicNumber = 2; SlimeboundMod.loadJokeCardImage(this, "FirmFortitude.png"); + this.tags.add(SneckoMod.BANNEDFORSNECKO); } @@ -51,18 +53,18 @@ public void use(AbstractPlayer p, AbstractMonster m) { } - @Override - public boolean canUse(AbstractPlayer p, AbstractMonster m) { - if (AbstractDungeon.player.hasPower(StrengthPower.POWER_ID)) { - if (AbstractDungeon.player.getPower(StrengthPower.POWER_ID).amount < 0) { - if (!this.hasTag(expansionContentMod.UNPLAYABLE)) - this.tags.add(expansionContentMod.UNPLAYABLE); - return false; - } - } - this.tags.remove(expansionContentMod.UNPLAYABLE); - return super.canUse(p, m); - } + // @Override + // public boolean canUse(AbstractPlayer p, AbstractMonster m) { + // if (AbstractDungeon.player.hasPower(StrengthPower.POWER_ID)) { + // if (AbstractDungeon.player.getPower(StrengthPower.POWER_ID).amount < 0) { + // if (!this.hasTag(expansionContentMod.UNPLAYABLE)) + // this.tags.add(expansionContentMod.UNPLAYABLE); + // return false; + // } + // } + // this.tags.remove(expansionContentMod.UNPLAYABLE); + // return super.canUse(p, m); + // } public AbstractCard makeCopy() { return new FirmFortitude(); diff --git a/src/main/java/slimebound/cards/FormOfPuddle.java b/src/main/java/slimebound/cards/FormOfPuddle.java index 317a80c49..4efdf9c0c 100644 --- a/src/main/java/slimebound/cards/FormOfPuddle.java +++ b/src/main/java/slimebound/cards/FormOfPuddle.java @@ -20,8 +20,9 @@ public class FormOfPuddle extends AbstractSlimeboundCard { private static final CardStrings cardStrings; public FormOfPuddle() { - super(ID, cardStrings.NAME, IMG_PATH, 3, cardStrings.DESCRIPTION, CardType.SKILL, AbstractCardEnum.SLIMEBOUND, CardRarity.RARE, CardTarget.SELF); + super(ID, cardStrings.NAME, IMG_PATH, 2, cardStrings.DESCRIPTION, CardType.SKILL, AbstractCardEnum.SLIMEBOUND, CardRarity.RARE, CardTarget.SELF); this.magicNumber = this.baseMagicNumber = 1; + isEthereal = true; this.exhaust = true; SlimeboundMod.loadJokeCardImage(this, "FormOfPuddle.png"); } @@ -36,7 +37,7 @@ public void use(AbstractPlayer p, AbstractMonster m) { public void upgrade() { if (!this.upgraded) { upgradeName(); - upgradeBaseCost(2); + upgradeBaseCost(1); } } diff --git a/src/main/java/slimebound/cards/LevelUp.java b/src/main/java/slimebound/cards/LevelUp.java index 2463b9199..69e0cacc7 100644 --- a/src/main/java/slimebound/cards/LevelUp.java +++ b/src/main/java/slimebound/cards/LevelUp.java @@ -36,7 +36,7 @@ public class LevelUp extends AbstractSlimeboundCard { public LevelUp() { super(ID, NAME, SlimeboundMod.getResourcePath(IMG_PATH), COST, DESCRIPTION, TYPE, AbstractCardEnum.SLIMEBOUND, RARITY, TARGET); - this.magicNumber = this.baseMagicNumber = 1; + this.magicNumber = this.baseMagicNumber = 2; // this.tags.add(SneckoMod.BANNEDFORSNECKO); diff --git a/src/main/java/slimebound/cards/MassFeed.java b/src/main/java/slimebound/cards/MassFeed.java index caa740cef..e07314ce5 100644 --- a/src/main/java/slimebound/cards/MassFeed.java +++ b/src/main/java/slimebound/cards/MassFeed.java @@ -43,7 +43,7 @@ public MassFeed() { this.tags.add(CardTags.HEALING); this.baseDamage = 10; - this.magicNumber = this.baseMagicNumber = 3; + this.magicNumber = this.baseMagicNumber = 2; this.exhaust = true; this.isMultiDamage = true; diff --git a/src/main/java/slimebound/cards/MassRepurpose.java b/src/main/java/slimebound/cards/MassRepurpose.java index d6013cecd..b4f6cfa23 100644 --- a/src/main/java/slimebound/cards/MassRepurpose.java +++ b/src/main/java/slimebound/cards/MassRepurpose.java @@ -34,7 +34,7 @@ public class MassRepurpose extends AbstractSlimeboundCard { private static final CardRarity RARITY = CardRarity.RARE; private static final CardTarget TARGET = CardTarget.SELF; private static final CardStrings cardStrings; - private static final int COST = 1; + private static final int COST = 0; public static String UPGRADED_DESCRIPTION; static { @@ -51,7 +51,7 @@ public MassRepurpose() { this.exhaust = true; SlimeboundMod.loadJokeCardImage(this, "MassRepurpose.png"); - + this.tags.add(SneckoMod.BANNEDFORSNECKO); // this.tags.add(SneckoMod.BANNEDFORSNECKO); // this.tags.add(CardTags.HEALING); @@ -64,7 +64,10 @@ public void use(AbstractPlayer p, AbstractMonster m) { SlimeboundMod.spawnSpecialistSlime(); } } - if (upgraded) AbstractDungeon.actionManager.addToBottom(new TriggerSlimeAttacksAction(p)); + if (upgraded) { + AbstractDungeon.actionManager.addToBottom(new TriggerSlimeAttacksAction(p)); + checkMinionMaster(); + } } public void upgrade() { diff --git a/src/main/java/slimebound/cards/MinionMaster.java b/src/main/java/slimebound/cards/MinionMaster.java index ca59673ad..ae1594325 100644 --- a/src/main/java/slimebound/cards/MinionMaster.java +++ b/src/main/java/slimebound/cards/MinionMaster.java @@ -23,7 +23,7 @@ public class MinionMaster extends AbstractSlimeboundCard { private static final CardType TYPE = CardType.POWER; private static final CardRarity RARITY = CardRarity.RARE; private static final CardTarget TARGET = CardTarget.SELF; - private static final int COST = 2; + private static final int COST = 1; public static String UPGRADED_DESCRIPTION; private static int upgradedamount = 1; @@ -36,7 +36,7 @@ public class MinionMaster extends AbstractSlimeboundCard { public MinionMaster() { super(ID, NAME, SlimeboundMod.getResourcePath(IMG_PATH), COST, DESCRIPTION, TYPE, AbstractCardEnum.SLIMEBOUND, RARITY, TARGET); - + this.tags.add(SneckoMod.BANNEDFORSNECKO); this.magicNumber = this.baseMagicNumber = 1; // this.tags.add(SneckoMod.BANNEDFORSNECKO); diff --git a/src/main/java/slimebound/cards/OneTwoCombo.java b/src/main/java/slimebound/cards/OneTwoCombo.java index 449857bae..db0e5cbcf 100644 --- a/src/main/java/slimebound/cards/OneTwoCombo.java +++ b/src/main/java/slimebound/cards/OneTwoCombo.java @@ -36,7 +36,7 @@ public class OneTwoCombo extends AbstractSlimeboundCard { public OneTwoCombo() { super(ID, NAME, SlimeboundMod.getResourcePath(IMG_PATH), COST, DESCRIPTION, TYPE, AbstractCardEnum.SLIMEBOUND, RARITY, TARGET); - baseDamage = 3; + baseDamage = 4; SlimeboundMod.loadJokeCardImage(this, "OneTwoCombo.png"); // exhaust = true; } @@ -47,17 +47,17 @@ public void onSplit() { public void use(AbstractPlayer p, AbstractMonster m) { addToBot(new DamageAction(m, new DamageInfo(p, damage, damageTypeForTurn), AbstractGameAction.AttackEffect.SLASH_HEAVY)); - if (upgraded) addToBot(new CommandAction()); - - + addToBot(new CommandAction()); + // if (upgraded) addToBot(new CommandAction()); checkMinionMaster(); } public void upgrade() { if (!this.upgraded) { upgradeName(); - this.rawDescription = UPGRADED_DESCRIPTION; - this.initializeDescription(); + upgradeDamage(3); + //this.rawDescription = UPGRADED_DESCRIPTION; + // this.initializeDescription(); } } } diff --git a/src/main/java/slimebound/cards/OozeBath.java b/src/main/java/slimebound/cards/OozeBath.java index d735a9c7a..e30ded9cd 100644 --- a/src/main/java/slimebound/cards/OozeBath.java +++ b/src/main/java/slimebound/cards/OozeBath.java @@ -47,7 +47,7 @@ public OozeBath() { super(ID, NAME, SlimeboundMod.getResourcePath(IMG_PATH), COST, DESCRIPTION, TYPE, AbstractCardEnum.SLIMEBOUND, RARITY, TARGET); - this.magicNumber = this.baseMagicNumber = 6; + this.slimed = this.baseSlimed = 6; this.exhaust = true; SlimeboundMod.loadJokeCardImage(this, "OozeBath.png"); @@ -55,10 +55,7 @@ public OozeBath() { } public void use(AbstractPlayer p, AbstractMonster m) { - - AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(m, p, new GoopPerTurnPower(m, magicNumber), magicNumber, true, AbstractGameAction.AttackEffect.NONE)); - - + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(m, p, new GoopPerTurnPower(m, this.slimed), this.slimed, true, AbstractGameAction.AttackEffect.NONE)); } public AbstractCard makeCopy() { @@ -72,7 +69,7 @@ public void upgrade() { if (!this.upgraded) { upgradeName(); - upgradeMagicNumber(3); + upgradeSlimed(3); } diff --git a/src/main/java/slimebound/cards/Overexert.java b/src/main/java/slimebound/cards/Overexert.java index 7eec9a10b..b6bd92034 100644 --- a/src/main/java/slimebound/cards/Overexert.java +++ b/src/main/java/slimebound/cards/Overexert.java @@ -55,7 +55,7 @@ public void use(AbstractPlayer p, AbstractMonster m) { AbstractDungeon.actionManager.addToBottom(new VFXAction(p, new BorderFlashEffect(Color.GREEN, true), 0.05F, true)); - AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, new PotencyPower(p, p, 4), 4)); + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, new PotencyPower(p, p, 5), 5)); AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, new LoseSlimesPower(p, p, this.magicNumber), this.magicNumber)); if (upgraded) addToBot(new CommandAction()); diff --git a/src/main/java/slimebound/cards/PrepareCrush.java b/src/main/java/slimebound/cards/PrepareCrush.java index b1aae0dc3..621edee7b 100644 --- a/src/main/java/slimebound/cards/PrepareCrush.java +++ b/src/main/java/slimebound/cards/PrepareCrush.java @@ -11,6 +11,7 @@ import com.megacrit.cardcrawl.localization.CardStrings; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.vfx.MegaSpeechBubble; +import expansioncontent.expansionContentMod; import slimebound.SlimeboundMod; import slimebound.patches.AbstractCardEnum; import slimebound.powers.EnergizedSlimeboundPower; @@ -70,7 +71,7 @@ public void upgrade() { AbstractCard q = new SlimeCrush(); q.upgrade(); cardsToPreview = q; - + upgradeMagicNumber(2); this.rawDescription = UPGRADED_DESCRIPTION; this.initializeDescription(); } diff --git a/src/main/java/slimebound/cards/PressTheAttack.java b/src/main/java/slimebound/cards/PressTheAttack.java index 5cb54e2a4..a669b379a 100644 --- a/src/main/java/slimebound/cards/PressTheAttack.java +++ b/src/main/java/slimebound/cards/PressTheAttack.java @@ -48,18 +48,10 @@ public PressTheAttack() { } - @Override - public void triggerOnGlowCheck() { - slimedGlowCheck(); - } - public void use(AbstractPlayer p, AbstractMonster m) { AbstractDungeon.actionManager.addToBottom(new DamageAction(m, new com.megacrit.cardcrawl.cards.DamageInfo(p, this.damage, this.damageTypeForTurn), AbstractGameAction.AttackEffect.BLUNT_HEAVY)); - if (m.hasPower(SlimedPower.POWER_ID)) { addToBot(new CommandAction()); if (upgraded) addToBot(new CommandAction()); - } - checkMinionMaster(); } diff --git a/src/main/java/slimebound/cards/ProtectTheBoss.java b/src/main/java/slimebound/cards/ProtectTheBoss.java index 1a5690488..9101daeba 100644 --- a/src/main/java/slimebound/cards/ProtectTheBoss.java +++ b/src/main/java/slimebound/cards/ProtectTheBoss.java @@ -33,12 +33,13 @@ public class ProtectTheBoss extends AbstractSlimeboundCard { NAME = cardStrings.NAME; DESCRIPTION = cardStrings.DESCRIPTION; UPGRADED_DESCRIPTION = cardStrings.UPGRADE_DESCRIPTION; + } public ProtectTheBoss() { super(ID, NAME, SlimeboundMod.getResourcePath(IMG_PATH), COST, DESCRIPTION, TYPE, AbstractCardEnum.SLIMEBOUND, RARITY, TARGET); - + this.tags.add(SneckoMod.BANNEDFORSNECKO); //this.exhaust = true; this.magicNumber = this.baseMagicNumber = 1; SlimeboundMod.loadJokeCardImage(this, "ProtectTheBoss.png"); diff --git a/src/main/java/slimebound/cards/Repurpose.java b/src/main/java/slimebound/cards/Repurpose.java index 12a970c1d..401e75e42 100644 --- a/src/main/java/slimebound/cards/Repurpose.java +++ b/src/main/java/slimebound/cards/Repurpose.java @@ -46,6 +46,7 @@ public Repurpose() { super(ID, NAME, SlimeboundMod.getResourcePath(IMG_PATH), COST, DESCRIPTION, TYPE, AbstractCardEnum.SLIMEBOUND, RARITY, TARGET); this.baseMagicNumber = magicNumber = 2; exhaust = true; + this.tags.add(SneckoMod.BANNEDFORSNECKO); SlimeboundMod.loadJokeCardImage(this, "Repurpose.png"); // this.tags.add(SneckoMod.BANNEDFORSNECKO); diff --git a/src/main/java/slimebound/cards/ServeAndProtect.java b/src/main/java/slimebound/cards/ServeAndProtect.java index b673ffa28..877621cc5 100644 --- a/src/main/java/slimebound/cards/ServeAndProtect.java +++ b/src/main/java/slimebound/cards/ServeAndProtect.java @@ -21,6 +21,7 @@ import slimebound.actions.TendrilFlailAction; import slimebound.orbs.SpawnedSlime; import slimebound.patches.AbstractCardEnum; +import sneckomod.SneckoMod; import java.util.ArrayList; @@ -55,6 +56,7 @@ public ServeAndProtect() { baseMagicNumber = magicNumber = 1; baseBlock = block = 10; this.exhaust = true; + this.tags.add(SneckoMod.BANNEDFORSNECKO); SlimeboundMod.loadJokeCardImage(this, "ServeAndProtect.png"); } diff --git a/src/main/java/slimebound/cards/SlimeBrawl.java b/src/main/java/slimebound/cards/SlimeBrawl.java index 2b6bcc260..09ce33ace 100644 --- a/src/main/java/slimebound/cards/SlimeBrawl.java +++ b/src/main/java/slimebound/cards/SlimeBrawl.java @@ -11,6 +11,7 @@ import slimebound.SlimeboundMod; import slimebound.orbs.SpawnedSlime; import slimebound.patches.AbstractCardEnum; +import sneckomod.SneckoMod; public class SlimeBrawl extends AbstractSlimeboundCard { @@ -46,6 +47,7 @@ public SlimeBrawl() { this.exhaust = true; SlimeboundMod.loadJokeCardImage(this, "SlimeBrawl.png"); + this.tags.add(SneckoMod.BANNEDFORSNECKO); } diff --git a/src/main/java/slimebound/cards/SlimeCrush.java b/src/main/java/slimebound/cards/SlimeCrush.java index 5155352c8..b3c47d8a7 100644 --- a/src/main/java/slimebound/cards/SlimeCrush.java +++ b/src/main/java/slimebound/cards/SlimeCrush.java @@ -69,7 +69,7 @@ public AbstractCard makeCopy() { public void upgrade() { if (!this.upgraded) { upgradeName(); -// upgradeDamage(5); + // upgradeDamage(10); this.target = CardTarget.ALL_ENEMY; this.rawDescription = UPGRADED_DESCRIPTION; this.initializeDescription(); diff --git a/src/main/java/slimebound/cards/SlimeTap.java b/src/main/java/slimebound/cards/SlimeTap.java index 2ec58fdb6..a1acc33f6 100644 --- a/src/main/java/slimebound/cards/SlimeTap.java +++ b/src/main/java/slimebound/cards/SlimeTap.java @@ -45,7 +45,7 @@ public SlimeTap() { super(ID, NAME, SlimeboundMod.getResourcePath(IMG_PATH), COST, DESCRIPTION, TYPE, AbstractCardEnum.SLIMEBOUND, RARITY, TARGET); - + this.tags.add(SneckoMod.BANNEDFORSNECKO); this.exhaust = true; this.magicNumber = this.baseMagicNumber = 2; SlimeboundMod.loadJokeCardImage(this, "SlimeTap.png"); diff --git a/src/main/java/slimebound/cards/Split.java b/src/main/java/slimebound/cards/Split.java index ac8949176..b65edaf9d 100644 --- a/src/main/java/slimebound/cards/Split.java +++ b/src/main/java/slimebound/cards/Split.java @@ -3,9 +3,12 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.localization.CardStrings; import com.megacrit.cardcrawl.monsters.AbstractMonster; import slimebound.SlimeboundMod; +import slimebound.actions.CommandAction; +import slimebound.actions.SlimeSpawnAction; import slimebound.patches.AbstractCardEnum; @@ -20,7 +23,11 @@ public Split() { } public void use(AbstractPlayer p, AbstractMonster m) { - SlimeboundMod.spawnNormalSlime(); + //SlimeboundMod.spawnNormalSlime(); + AbstractDungeon.actionManager.addToBottom(new SlimeSpawnAction(new slimebound.orbs.PoisonSlime(), false, true, 0, 0)); + addToBot(new CommandAction()); + checkMinionMaster(); + // what if... not random?????? //Forever shall this code remain commented here. A legacy to the origins of how bad Mayhem was at coding when this all began. /* for (int i = 0; i < magicNumber; i++) { diff --git a/src/main/java/slimebound/cards/SplitAcid.java b/src/main/java/slimebound/cards/SplitAcid.java index 86ffbec3e..de1e93e62 100644 --- a/src/main/java/slimebound/cards/SplitAcid.java +++ b/src/main/java/slimebound/cards/SplitAcid.java @@ -41,7 +41,7 @@ public SplitAcid() { this.baseDamage = 7; - this.exhaust = true; + // this.exhaust = true; this.magicNumber = this.baseMagicNumber = 2; this.isMultiDamage = true; SlimeboundMod.loadJokeCardImage(this, "SplitAcid.png"); diff --git a/src/main/java/slimebound/cards/SplitBruiser.java b/src/main/java/slimebound/cards/SplitBruiser.java index 3ef6f059f..88b4ece6e 100644 --- a/src/main/java/slimebound/cards/SplitBruiser.java +++ b/src/main/java/slimebound/cards/SplitBruiser.java @@ -40,12 +40,11 @@ public SplitBruiser() { this.baseDamage = 9; this.magicNumber = this.baseMagicNumber = 2; - this.exhaust = true; + // this.exhaust = true; SlimeboundMod.loadJokeCardImage(this, "SplitBruiser.png"); } public void use(AbstractPlayer p, AbstractMonster m) { - int bonus = 0; //com.megacrit.cardcrawl.dungeons.AbstractDungeon.actionManager.addToBottom(new com.megacrit.cardcrawl.actions.common.DamageAction(m, new com.megacrit.cardcrawl.cards.DamageInfo(p, this.damage, this.damageTypeForTurn), AbstractGameAction.AttackEffect.BLUNT_LIGHT)); diff --git a/src/main/java/slimebound/cards/SplitLeeching.java b/src/main/java/slimebound/cards/SplitLeeching.java index 5c84d3816..33f5c5f17 100644 --- a/src/main/java/slimebound/cards/SplitLeeching.java +++ b/src/main/java/slimebound/cards/SplitLeeching.java @@ -40,7 +40,7 @@ public SplitLeeching() { this.baseBlock = 8; this.magicNumber = this.baseMagicNumber = 2; - this.exhaust = true; + //this.exhaust = true; SlimeboundMod.loadJokeCardImage(this, "SplitLeeching.png"); } diff --git a/src/main/java/slimebound/cards/SplitLicking.java b/src/main/java/slimebound/cards/SplitLicking.java index 115e363a8..d91d42ee0 100644 --- a/src/main/java/slimebound/cards/SplitLicking.java +++ b/src/main/java/slimebound/cards/SplitLicking.java @@ -44,7 +44,7 @@ public SplitLicking() { this.magicNumber = this.baseMagicNumber = 2; this.slimed = this.baseSlimed = 8; - this.exhaust = true; + //this.exhaust = true; SlimeboundMod.loadJokeCardImage(this, "SplitMire.png"); } diff --git a/src/main/java/slimebound/cards/Tackle.java b/src/main/java/slimebound/cards/Tackle.java index 3a069bf58..1aba14af9 100644 --- a/src/main/java/slimebound/cards/Tackle.java +++ b/src/main/java/slimebound/cards/Tackle.java @@ -39,7 +39,7 @@ public Tackle() { super(ID, NAME, SlimeboundMod.getResourcePath(IMG_PATH), COST, DESCRIPTION, TYPE, AbstractCardEnum.SLIMEBOUND, RARITY, TARGET); tags.add(SlimeboundMod.TACKLE); - this.baseDamage = 12; + this.baseDamage = 13; baseSelfDamage = this.selfDamage = 3; SlimeboundMod.loadJokeCardImage(this, "Tackle.png"); } diff --git a/src/main/java/slimebound/cards/ViciousTackle.java b/src/main/java/slimebound/cards/ViciousTackle.java index f3bc03db0..c2852a9ae 100644 --- a/src/main/java/slimebound/cards/ViciousTackle.java +++ b/src/main/java/slimebound/cards/ViciousTackle.java @@ -2,6 +2,7 @@ import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.animations.VFXAction; import com.megacrit.cardcrawl.actions.common.DamageAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.cards.DamageInfo; @@ -10,6 +11,7 @@ import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.localization.CardStrings; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.vfx.combat.VerticalImpactEffect; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import slimebound.SlimeboundMod; @@ -85,7 +87,9 @@ public float calculateModifiedCardDamage(AbstractPlayer player, AbstractMonster } public void use(AbstractPlayer p, AbstractMonster m) { - + if (m != null) { + this.addToBot(new VFXAction(new VerticalImpactEffect(m.hb.cX + m.hb.width / 4.0F, m.hb.cY - m.hb.height / 4.0F))); + } AbstractDungeon.actionManager.addToBottom(new DamageAction(m, new com.megacrit.cardcrawl.cards.DamageInfo(p, this.damage, this.damageTypeForTurn), AbstractGameAction.AttackEffect.BLUNT_HEAVY)); if (!AbstractDungeon.player.hasPower(PreventTackleDamagePower.POWER_ID)) addToBot(new TackleSelfDamageAction(new DamageInfo(p, selfDamage, DamageInfo.DamageType.THORNS), AbstractGameAction.AttackEffect.SMASH)); diff --git a/src/main/java/slimebound/cards/WasteNot.java b/src/main/java/slimebound/cards/WasteNot.java index 6d0f5270c..47e5352d5 100644 --- a/src/main/java/slimebound/cards/WasteNot.java +++ b/src/main/java/slimebound/cards/WasteNot.java @@ -10,6 +10,7 @@ import slimebound.SlimeboundMod; import slimebound.actions.OverexertionAction; import slimebound.patches.AbstractCardEnum; +import sneckomod.SneckoMod; public class WasteNot extends AbstractSlimeboundCard { @@ -39,7 +40,7 @@ public class WasteNot extends AbstractSlimeboundCard { public WasteNot() { super(ID, NAME, SlimeboundMod.getResourcePath(IMG_PATH), COST, DESCRIPTION, TYPE, AbstractCardEnum.SLIMEBOUND, RARITY, TARGET); - + this.tags.add(SneckoMod.BANNEDFORSNECKO); this.exhaust = true; this.magicNumber = this.baseMagicNumber = 1; SlimeboundMod.loadJokeCardImage(this, "WasteNot.png"); diff --git a/src/main/java/slimebound/events/ArtOfSlimeWar.java b/src/main/java/slimebound/events/ArtOfSlimeWar.java index f79d51e72..1811b2e55 100644 --- a/src/main/java/slimebound/events/ArtOfSlimeWar.java +++ b/src/main/java/slimebound/events/ArtOfSlimeWar.java @@ -191,7 +191,7 @@ private void replaceAttacks() { e = (AbstractCard) i.next(); cardsRemoved.add(e.cardID); - } while (!(e.hasTag(BaseModCardTags.BASIC_STRIKE))); + } while (!(e.hasTag(AbstractCard.CardTags.STARTER_STRIKE))); i.remove(); } diff --git a/src/main/java/slimebound/orbs/AttackSlime.java b/src/main/java/slimebound/orbs/AttackSlime.java index bd37baf0d..aa4d419c7 100644 --- a/src/main/java/slimebound/orbs/AttackSlime.java +++ b/src/main/java/slimebound/orbs/AttackSlime.java @@ -19,7 +19,7 @@ public class AttackSlime public AttackSlime() { - super(ID, new Color(1.0F, 100F / 255F, 100F / 255F, 100F), atlasString, skeletonString, false, true, 5, 0, true, new Color(.45F, .58F, .58F, 1), SlimeFlareEffect.OrbFlareColor.AGGRESSIVE, new Texture("slimeboundResources/SlimeboundImages/orbs/3.png")); + super(ID, new Color(1.0F, 100F / 255F, 100F / 255F, 100F), atlasString, skeletonString, false, true, 3, 0, true, new Color(.45F, .58F, .58F, 1), SlimeFlareEffect.OrbFlareColor.AGGRESSIVE, new Texture("slimeboundResources/SlimeboundImages/orbs/3.png")); spawnVFX(); } @@ -30,10 +30,8 @@ public void updateDescription() { public void activateEffectUnique() { - - AbstractDungeon.actionManager.addToBottom(new SlimeAutoAttack(AbstractDungeon.player, this.passiveAmount, AbstractGameAction.AttackEffect.BLUNT_LIGHT, this, false, false, false, 0, false, 0, false)); - + AbstractDungeon.actionManager.addToBottom(new SlimeAutoAttack(AbstractDungeon.player, this.passiveAmount, AbstractGameAction.AttackEffect.BLUNT_LIGHT, this, false, false, false, 0, false, 0, false)); } diff --git a/src/main/java/slimebound/orbs/DrawingSlime.java b/src/main/java/slimebound/orbs/DrawingSlime.java index afd068512..dcea2c1ca 100644 --- a/src/main/java/slimebound/orbs/DrawingSlime.java +++ b/src/main/java/slimebound/orbs/DrawingSlime.java @@ -20,15 +20,15 @@ public class DrawingSlime public DrawingSlime() { - super(ID, new Color(1.0F, 100F / 255F, 100F / 255F, 100F), atlasString, skeletonString, true, true, 3, 1, true, new Color(.45F, .58F, .58F, 1), SlimeFlareEffect.OrbFlareColor.AGGRESSIVE, new Texture("slimeboundResources/SlimeboundImages/orbs/attackBuff.png")); - this.debuffAmount = 1; - this.extraFontColor = new Color(.75F, .75F, .75F, 1F); + super(ID, new Color(1.0F, 100F / 255F, 100F / 255F, 100F), atlasString, skeletonString, true, false, 3, 0, true, new Color(.45F, .58F, .58F, 1), SlimeFlareEffect.OrbFlareColor.AGGRESSIVE, new Texture("slimeboundResources/SlimeboundImages/orbs/attackBuff.png")); + //this.debuffAmount = 1; + //this.extraFontColor = new Color(.75F, .75F, .75F, 1F); spawnVFX(); } public void updateDescription() { - this.description = this.descriptions[0] + this.passiveAmount + this.descriptions[1] + this.debuffAmount + this.descriptions[2]; + this.description = this.descriptions[0] + this.passiveAmount + this.descriptions[1] + 1 + this.descriptions[2]; } @@ -36,7 +36,7 @@ public void activateEffectUnique() { AbstractDungeon.actionManager.addToBottom(new SlimeAutoAttack(AbstractDungeon.player, this.passiveAmount, AbstractGameAction.AttackEffect.LIGHTNING, this, false, false, false, 0, false, 0, false, false, false, false, false)); - AbstractDungeon.actionManager.addToBottom(new DrawCardAction(AbstractDungeon.player, debuffAmount)); + AbstractDungeon.actionManager.addToBottom(new DrawCardAction(AbstractDungeon.player, 1)); } diff --git a/src/main/java/slimebound/orbs/HexSlime.java b/src/main/java/slimebound/orbs/HexSlime.java index 494581ecb..b9793a5cc 100644 --- a/src/main/java/slimebound/orbs/HexSlime.java +++ b/src/main/java/slimebound/orbs/HexSlime.java @@ -14,6 +14,7 @@ import slimebound.SlimeboundMod; import slimebound.actions.SlimeAutoAttack; import slimebound.vfx.SlimeFlareEffect; +import theHexaghost.relics.CandleOfCauterizing; public class HexSlime @@ -34,14 +35,20 @@ public class HexSlime public HexSlime() { - super(ID, new Color(.65F, .65F, 1.0F, 100F), atlasString, skeletonString, true, false, 3, 5, false, new Color(.36F, .55F, .85F, 1), SlimeFlareEffect.OrbFlareColor.HEX, new Texture("slimeboundResources/SlimeboundImages/orbs/attackDebuff.png")); + super(ID, new Color(.65F, .65F, 1.0F, 100F), atlasString, skeletonString, true, false, 4, 6, false, new Color(.36F, .55F, .85F, 1), SlimeFlareEffect.OrbFlareColor.HEX, new Texture("slimeboundResources/SlimeboundImages/orbs/attackDebuff.png")); this.x = (x * Settings.scale + (5F + MathUtils.random(-10.0F, 10.0F) * Settings.scale)); this.y = (y * Settings.scale + (-30F + MathUtils.random(-10.0F, 10.0F) * Settings.scale)); this.color = Color.CHARTREUSE.cpy(); this.extraFontColor = new Color(.5F, 1F, .5F, 1F); this.color.a = 0.0F; this.activated = true; - this.debuffAmount = 5; + this.debuffAmount = 6; + + //prismatic shard is a relic of all time + if(AbstractDungeon.player.hasRelic(CandleOfCauterizing.ID)){ + debuffAmount = debuffAmount + CandleOfCauterizing.SOULBURN_BONUS_AMOUNT; + } + spawnVFX(); } diff --git a/src/main/java/slimebound/orbs/PoisonSlime.java b/src/main/java/slimebound/orbs/PoisonSlime.java index c514cbf01..24d8047f7 100644 --- a/src/main/java/slimebound/orbs/PoisonSlime.java +++ b/src/main/java/slimebound/orbs/PoisonSlime.java @@ -21,7 +21,7 @@ public PoisonSlime() { } public PoisonSlime(boolean topLevelVFX) { - super(ID, new Color(.5F, 1.0F, .5F, 100F), atlasString, skeletonString, false, false, 3, 1, true, new Color(.58F, .81F, .35F, 1), SlimeFlareEffect.OrbFlareColor.POISON, new Texture("slimeboundResources/SlimeboundImages/orbs/4.png")); + super(ID, new Color(.5F, 1.0F, .5F, 100F), atlasString, skeletonString, false, false, 3, 0, true, new Color(.58F, .81F, .35F, 1), SlimeFlareEffect.OrbFlareColor.POISON, new Texture("slimeboundResources/SlimeboundImages/orbs/4.png")); this.topSpawnVFX = topLevelVFX; spawnVFX(); } diff --git a/src/main/java/slimebound/orbs/SpawnedSlime.java b/src/main/java/slimebound/orbs/SpawnedSlime.java index f5a5c118c..c77821453 100644 --- a/src/main/java/slimebound/orbs/SpawnedSlime.java +++ b/src/main/java/slimebound/orbs/SpawnedSlime.java @@ -287,7 +287,7 @@ public void applyFocus() { if (power != null) { this.passiveAmount = this.basePassiveAmount + power.amount + this.UniqueFocus + bonus; - this.debuffAmount = this.debuffBaseAmount + (power.amount / 2) ; + this.debuffAmount = (int) Math.ceil(this.debuffBaseAmount + (power.amount / 2.0)); } else { this.passiveAmount = this.basePassiveAmount + this.UniqueFocus + bonus; @@ -465,7 +465,7 @@ public void render(SpriteBatch sb) { public void renderText(SpriteBatch sb) { - if (this.extraFontColor != null) { + if (this.extraFontColor != null){ float fontOffset = 26 * Settings.scale; diff --git a/src/main/java/slimebound/potions/ThreeZeroPotion.java b/src/main/java/slimebound/potions/ThreeZeroPotion.java index dc241326e..5d3402467 100644 --- a/src/main/java/slimebound/potions/ThreeZeroPotion.java +++ b/src/main/java/slimebound/potions/ThreeZeroPotion.java @@ -47,7 +47,7 @@ public void use(AbstractCreature target) { for (int i = 0; i < this.potency; i++) { while (var1.hasNext()) { c3 = (AbstractCard) var1.next(); - if (c3.cost == 0) { + if (c3.cost == 0 && !c3.hasTag(AbstractCard.CardTags.HEALING)) { list.add(c3); } } @@ -56,7 +56,7 @@ public void use(AbstractCreature target) { while (var1.hasNext()) { c3 = (AbstractCard) var1.next(); - if (c3.cost == 0) { + if (c3.cost == 0 && !c3.hasTag(AbstractCard.CardTags.HEALING)) { list.add(c3); } } @@ -65,12 +65,12 @@ public void use(AbstractCreature target) { while (var1.hasNext()) { c3 = (AbstractCard) var1.next(); - if (c3.cost == 0) { + if (c3.cost == 0 && !c3.hasTag(AbstractCard.CardTags.HEALING)) { list.add(c3); } } - AbstractDungeon.actionManager.addToBottom(new MakeTempCardInHandAction(list.get(cardRandomRng.random(list.size() - 1)))); + AbstractDungeon.actionManager.addToBottom(new MakeTempCardInHandAction(list.get(potionRng.random(list.size() - 1)))); } } diff --git a/src/main/java/slimebound/powers/ComboAttackPower.java b/src/main/java/slimebound/powers/ComboAttackPower.java index ce271aa36..93c04d328 100644 --- a/src/main/java/slimebound/powers/ComboAttackPower.java +++ b/src/main/java/slimebound/powers/ComboAttackPower.java @@ -12,6 +12,8 @@ import slimebound.actions.CommandAction; import slimebound.actions.TrigggerSpecificSlimeAttackAction; +import static downfall.cardmods.CommandMod.checkMinionMaster; + public class ComboAttackPower extends TwoAmountPower { public static final String POWER_ID = "Slimebound:ComboAttackPower"; @@ -78,6 +80,7 @@ public void onAfterCardPlayed(AbstractCard usedCard) { { flash(); com.megacrit.cardcrawl.dungeons.AbstractDungeon.actionManager.addToBottom(new CommandAction()); + checkMinionMaster(); // maybe this crashes idk lol this.amount2--; updateDescription(); } diff --git a/src/main/java/slimebound/powers/CommandOnPlayPower.java b/src/main/java/slimebound/powers/CommandOnPlayPower.java index 357f88b76..dfb30ab3b 100644 --- a/src/main/java/slimebound/powers/CommandOnPlayPower.java +++ b/src/main/java/slimebound/powers/CommandOnPlayPower.java @@ -16,6 +16,8 @@ import theHexaghost.HexaMod; import downfall.util.TextureLoader; +import static downfall.cardmods.CommandMod.checkMinionMaster; + public class CommandOnPlayPower extends AbstractPower implements CloneablePowerInterface { public static final String POWER_ID = "Slimebound:CommandOnPlayPower"; @@ -46,6 +48,7 @@ public void onAfterCardPlayed(AbstractCard usedCard) { if (o != null) { addToBot(new TrigggerSpecificSlimeAttackAction(o)); } + checkMinionMaster(); // maybe this crashes idk lol addToBot(new ReducePowerAction(AbstractDungeon.player, AbstractDungeon.player, this, 1)); } diff --git a/src/main/java/slimebound/powers/PotencyPower.java b/src/main/java/slimebound/powers/PotencyPower.java index a20f7d2ca..8a986ba1a 100644 --- a/src/main/java/slimebound/powers/PotencyPower.java +++ b/src/main/java/slimebound/powers/PotencyPower.java @@ -49,11 +49,14 @@ public PotencyPower(AbstractCreature owner, AbstractCreature source, int amount) public void updateDescription() { - this.description = (DESCRIPTIONS[0] + this.amount + DESCRIPTIONS[1]+ this.amount/2 + DESCRIPTIONS[2]); - + if(this.amount<0){ + this.type = PowerType.DEBUFF; + }else{ + this.type = PowerType.BUFF; + } + this.description = (DESCRIPTIONS[0] + this.amount + DESCRIPTIONS[1]+ (int) Math.ceil((this.amount / 2.0)) + DESCRIPTIONS[2]); } - } diff --git a/src/main/java/slimebound/powers/SlimedPower.java b/src/main/java/slimebound/powers/SlimedPower.java index c9c2e8577..83fd65f5c 100644 --- a/src/main/java/slimebound/powers/SlimedPower.java +++ b/src/main/java/slimebound/powers/SlimedPower.java @@ -67,8 +67,12 @@ public void stackPower(int stackAmount) { } - public float atDamageFinalReceive(float damage, DamageInfo.DamageType damageType) { - return damageType == DamageInfo.DamageType.NORMAL ? damage + this.amount : damage; + public float atDamageReceive(float damage, DamageInfo.DamageType type) { + if (type == DamageInfo.DamageType.NORMAL) { + return damage +this.amount; + } else { + return damage; + } } diff --git a/src/main/java/slimebound/relics/AbsorbEndCombat.java b/src/main/java/slimebound/relics/AbsorbEndCombat.java index 550fdde7f..4a3810514 100644 --- a/src/main/java/slimebound/relics/AbsorbEndCombat.java +++ b/src/main/java/slimebound/relics/AbsorbEndCombat.java @@ -11,6 +11,8 @@ public class AbsorbEndCombat extends CustomRelic { public static final String ID = "Slimebound:AbsorbEndCombat"; public static final String IMG_PATH = "relics/heartofgoo.png"; public static final String OUTLINE_IMG_PATH = "relics/heartofgooOutline.png"; + + //Variables private static final int HP_PER_SLURP = 2; private static final int HP_PER_COMBAT = 8; @@ -21,7 +23,7 @@ public AbsorbEndCombat() { @Override public String getUpdatedDescription() { - return this.DESCRIPTIONS[0]; + return this.DESCRIPTIONS[0] + HP_PER_SLURP + DESCRIPTIONS[1] + HP_PER_COMBAT + DESCRIPTIONS[2]; } @Override diff --git a/src/main/java/slimebound/relics/AbsorbEndCombatUpgraded.java b/src/main/java/slimebound/relics/AbsorbEndCombatUpgraded.java index 241289ad0..1d7d274e6 100644 --- a/src/main/java/slimebound/relics/AbsorbEndCombatUpgraded.java +++ b/src/main/java/slimebound/relics/AbsorbEndCombatUpgraded.java @@ -22,6 +22,8 @@ public class AbsorbEndCombatUpgraded extends CustomRelic { public static final String ID = "Slimebound:AbsorbEndCombatUpgraded"; public static final String IMG_PATH = "relics/heartofgooblack.png"; public static final String OUTLINE_IMG_PATH = "relics/heartofgooOutline.png"; + + //variables private static final int HP_PER_SLURP = 3; private static final int HP_PER_COMBAT = 15; @@ -88,7 +90,7 @@ public String getUpdatedDescription() { sb.append("[#").append(SlimeboundMod.placeholderColor.toString()).append("]"); } - return DESCRIPTIONS[0] + sb.toString() + DESCRIPTIONS[1]; + return DESCRIPTIONS[0] + sb.toString() + DESCRIPTIONS[1] + HP_PER_SLURP + DESCRIPTIONS[2] + HP_PER_COMBAT + DESCRIPTIONS[3]; } diff --git a/src/main/java/slimebound/relics/PotencyRelic.java b/src/main/java/slimebound/relics/PotencyRelic.java index 226de3bb2..206b249d1 100644 --- a/src/main/java/slimebound/relics/PotencyRelic.java +++ b/src/main/java/slimebound/relics/PotencyRelic.java @@ -33,7 +33,7 @@ public String getUpdatedDescription() { public void atBattleStartPreDraw() { flash(); addToBot(new RelicAboveCreatureAction(AbstractDungeon.player, this)); - addToBot(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new PotencyPower(AbstractDungeon.player, AbstractDungeon.player, 2), 2)); + addToBot(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new PotencyPower(AbstractDungeon.player, AbstractDungeon.player, 1), 1)); } public boolean canSpawn() { diff --git a/src/main/java/slimebound/relics/PreparedRelic.java b/src/main/java/slimebound/relics/PreparedRelic.java index 975616dd1..22c64c581 100644 --- a/src/main/java/slimebound/relics/PreparedRelic.java +++ b/src/main/java/slimebound/relics/PreparedRelic.java @@ -3,6 +3,7 @@ import basemod.abstracts.CustomRelic; import com.badlogic.gdx.graphics.Texture; import com.megacrit.cardcrawl.actions.common.RelicAboveCreatureAction; +import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.helpers.ImageMaster; import com.megacrit.cardcrawl.relics.AbstractRelic; @@ -11,6 +12,8 @@ import downfall.util.TextureLoader; import slimebound.actions.AddPreparedAction; +import static downfall.patches.EvilModeCharacterSelect.evilMode; + public class PreparedRelic extends CustomRelic { public static final String ID = "Slimebound:PreparedRelic"; public static final String IMG_PATH = "relics/slimedteaSet.png"; @@ -67,6 +70,12 @@ public void onEnterRoom(AbstractRoom room) { } } + + public boolean canSpawn() { + return Settings.isEndless || (AbstractDungeon.floorNum <= 48 && !evilMode) || evilMode; + } + + @Override public AbstractRelic makeCopy() { return new PreparedRelic(); diff --git a/src/main/java/slimebound/relics/SelfDamagePreventRelic.java b/src/main/java/slimebound/relics/SelfDamagePreventRelic.java index 1ab3bbb0d..099264c96 100644 --- a/src/main/java/slimebound/relics/SelfDamagePreventRelic.java +++ b/src/main/java/slimebound/relics/SelfDamagePreventRelic.java @@ -10,6 +10,11 @@ public class SelfDamagePreventRelic extends CustomRelic { public static final String IMG_PATH = "relics/protectiveGear.png"; public static final String OUTLINE_IMG_PATH = "relics/protectiveGearOutline.png"; + //Protective Gear + + //Variables + public static final int AMOUNT = 3; + public SelfDamagePreventRelic() { super(ID, new Texture(SlimeboundMod.getResourcePath(IMG_PATH)), new Texture(SlimeboundMod.getResourcePath(OUTLINE_IMG_PATH)), RelicTier.SHOP, LandingSound.MAGICAL); @@ -17,7 +22,7 @@ public SelfDamagePreventRelic() { @Override public String getUpdatedDescription() { - return this.DESCRIPTIONS[0]; + return this.DESCRIPTIONS[0] + AMOUNT + DESCRIPTIONS[1]; } diff --git a/src/main/java/slimebound/relics/StickyStick.java b/src/main/java/slimebound/relics/StickyStick.java index a95da1e5c..41a2e6652 100644 --- a/src/main/java/slimebound/relics/StickyStick.java +++ b/src/main/java/slimebound/relics/StickyStick.java @@ -1,9 +1,11 @@ package slimebound.relics; +import automaton.cards.goodstatus.IntoTheVoid; import basemod.abstracts.CustomRelic; import com.badlogic.gdx.graphics.Texture; -import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; -import com.megacrit.cardcrawl.actions.common.RelicAboveCreatureAction; +import com.megacrit.cardcrawl.actions.common.*; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.status.VoidCard; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.helpers.ImageMaster; import com.megacrit.cardcrawl.powers.EvolvePower; @@ -15,8 +17,12 @@ public class StickyStick extends CustomRelic { public static final String IMG_PATH = "relics/StickyStick.png"; public static final String IMG_PATH_LARGE = "relics/StickyStickLarge.png"; public static final String OUTLINE_IMG_PATH = "relics/StickyStickOutline.png"; - private static final int HP_PER_CARD = 1; + //Gelatinous Cube + + //Variables + private static final int BLOCK_GAIN = 3; + public StickyStick() { super(ID, new Texture(slimebound.SlimeboundMod.getResourcePath(IMG_PATH)), new Texture(slimebound.SlimeboundMod.getResourcePath(OUTLINE_IMG_PATH)), RelicTier.UNCOMMON, LandingSound.SOLID); @@ -26,13 +32,14 @@ public StickyStick() { @Override public String getUpdatedDescription() { - return this.DESCRIPTIONS[0]; + return this.DESCRIPTIONS[0] + BLOCK_GAIN + DESCRIPTIONS[1]; } - public void atBattleStartPreDraw() { - this.flash(); - this.addToTop(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new EvolvePower(AbstractDungeon.player, 1), 1)); - this.addToTop(new RelicAboveCreatureAction(AbstractDungeon.player, this)); + public void onCardDraw(AbstractCard card) { + if (card.type == AbstractCard.CardType.STATUS || card.type == AbstractCard.CardType.CURSE) { + flash(); + addToBot(new GainBlockAction(AbstractDungeon.player, BLOCK_GAIN)); + } } @Override diff --git a/src/main/java/sneckomod/OffclassHelper.java b/src/main/java/sneckomod/OffclassHelper.java index 69b8fb5b3..013b592df 100644 --- a/src/main/java/sneckomod/OffclassHelper.java +++ b/src/main/java/sneckomod/OffclassHelper.java @@ -26,7 +26,7 @@ public static void addToLists(AbstractUnknownCard c, ArrayList> predList = new ArrayList<>(); ArrayList> listList = new ArrayList<>(); diff --git a/src/main/java/sneckomod/SneckoMod.java b/src/main/java/sneckomod/SneckoMod.java index 69d9f8760..aec8939ab 100644 --- a/src/main/java/sneckomod/SneckoMod.java +++ b/src/main/java/sneckomod/SneckoMod.java @@ -1,6 +1,12 @@ package sneckomod; +import automaton.AutomatonChar; import automaton.AutomatonMod; +import automaton.cards.Deprecate; +import automaton.cards.Invalidate; +import automaton.cards.Undervolt; +import awakenedOne.AwakenedOneChar; +import awakenedOne.cards.*; import basemod.BaseMod; import basemod.ReflectionHacks; import basemod.abstracts.CustomCard; @@ -9,6 +15,10 @@ import basemod.eventUtil.EventUtils; import basemod.helpers.RelicType; import basemod.interfaces.*; +import champ.ChampChar; +import champ.cards.*; +import collector.CollectorChar; +import collector.cards.*; import collector.patches.CollectiblesPatches.CollectibleCardColorEnumPatch; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Texture; @@ -19,7 +29,11 @@ import com.evacipated.cardcrawl.modthespire.lib.SpireInitializer; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.cards.CardGroup; -import com.megacrit.cardcrawl.cards.colorless.Madness; +import com.megacrit.cardcrawl.cards.blue.*; +import com.megacrit.cardcrawl.cards.colorless.*; +import com.megacrit.cardcrawl.cards.green.*; +import com.megacrit.cardcrawl.cards.purple.*; +import com.megacrit.cardcrawl.cards.red.*; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; @@ -28,18 +42,29 @@ import com.megacrit.cardcrawl.events.exordium.Sssserpent; import com.megacrit.cardcrawl.helpers.CardLibrary; import com.megacrit.cardcrawl.random.Random; +import com.megacrit.cardcrawl.relics.PrismaticShard; +import com.megacrit.cardcrawl.rooms.AbstractRoom; import downfall.cards.OctoChoiceCard; import downfall.downfallMod; import downfall.events.Serpent_Evil; import downfall.util.CardIgnore; import downfall.util.TextureLoader; +import expansioncontent.cards.DashGenerateEvil; +import expansioncontent.cards.SuperLivingWall; import expansioncontent.patches.CardColorEnumPatch; import expansioncontent.patches.CenterGridCardSelectScreen; +import gremlin.cards.*; +import guardian.cards.*; +import hermit.cards.*; +import hermit.characters.hermit; import hermit.util.Wiz; import javassist.CtClass; import javassist.Modifier; import javassist.NotFoundException; import org.clapper.util.classutil.*; +import slimebound.cards.*; +import slimebound.cards.Dissolve; +import slimebound.patches.AbstractCardEnum; import sneckomod.cards.*; import sneckomod.cards.unknowns.*; import sneckomod.events.BackToBasicsSnecko; @@ -52,7 +77,10 @@ import sneckomod.potions.MuddlingPotion; import sneckomod.potions.OffclassReductionPotion; import sneckomod.relics.*; +import sneckomod.util.ArchetypeHelper; import sneckomod.util.SneckoSilly; +import theHexaghost.TheHexaghost; +import theHexaghost.cards.*; import java.io.File; import java.net.URISyntaxException; @@ -63,6 +91,8 @@ import static com.megacrit.cardcrawl.cards.AbstractCard.CardType.*; import static downfall.downfallMod.sneckoNoModCharacters; import static downfall.patches.EvilModeCharacterSelect.evilMode; +import static sneckomod.util.ColorfulCardReward.TEXT; +import static theHexaghost.HexaMod.GHOSTWHEELCARD; @SuppressWarnings({"ConstantConditions", "unused", "WeakerAccess"}) @SpireInitializer @@ -73,7 +103,8 @@ public class SneckoMod implements EditCharactersSubscriber, PostInitializeSubscriber, StartGameSubscriber, - PostUpdateSubscriber { + PostUpdateSubscriber, + AddAudioSubscriber { public static final String SHOULDER1 = "sneckomodResources/images/char/shoulder.png"; public static final String SHOULDER2 = "sneckomodResources/images/char/shoulderR.png"; public static final String CORPSE = "sneckomodResources/images/char/corpse.png"; @@ -97,11 +128,17 @@ public class SneckoMod implements public static com.megacrit.cardcrawl.cards.AbstractCard.CardTags RNG; @SpireEnum public static com.megacrit.cardcrawl.cards.AbstractCard.CardTags BANNEDFORSNECKO; + @SpireEnum + public static com.megacrit.cardcrawl.cards.AbstractCard.CardTags OVERFLOW; + @SpireEnum + public static com.megacrit.cardcrawl.cards.AbstractCard.CardTags MUDDLED; + @SpireEnum + public static com.megacrit.cardcrawl.cards.AbstractCard.CardTags NO_TYPHOON; public static Random identifyRng; public static ArrayList validColors = new ArrayList<>(); - public static ArrayList allowedColors = new ArrayList<>(Arrays.asList("RED", "BLUE", "GREEN", "PURPLE", "GUARDIAN", "SLIMEBOUND", "HEXA_GHOST_PURPLE", "THE_CHAMP_GRAY", "THE_BRONZE_AUTOMATON", "GREMLIN", "HERMIT_YELLOW", "THE_COLLECTOR")); + public static ArrayList allowedColors = new ArrayList<>(Arrays.asList("RED", "BLUE", "GREEN", "PURPLE", "GUARDIAN", "SLIMEBOUND", "HEXA_GHOST_PURPLE", "THE_CHAMP_GRAY", "THE_BRONZE_AUTOMATON", "GREMLIN", "HERMIT_YELLOW", "THE_COLLECTOR", "AWAKENED_BLUE")); public static ArrayList unknownClasses = new ArrayList<>(); public static boolean pureSneckoMode = false; @@ -160,6 +197,7 @@ public class SneckoMod implements private CustomUnlockBundle unlocks3; private CustomUnlockBundle unlocks4; + public SneckoMod() { BaseMod.subscribe(this); @@ -170,7 +208,6 @@ public SneckoMod() { ATTACK_S_ART, SKILL_S_ART, POWER_S_ART, CARD_ENERGY_S, ATTACK_L_ART, SKILL_L_ART, POWER_L_ART, CARD_ENERGY_L, TEXT_ENERGY); - } public static void loadJokeCardImage(AbstractCard card, String img) { @@ -178,7 +215,7 @@ public static void loadJokeCardImage(AbstractCard card, String img) { ((AbstractSneckoCard) card).betaArtPath = img; } Texture cardTexture; - cardTexture = hermit.util.TextureLoader.getTexture(getModID() + "Resources/images/betacards/" + img); + cardTexture = downfall.util.TextureLoader.getTexture("sneckomodResources/images/betacards/" + img); cardTexture.setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear); int tw = cardTexture.getWidth(); int th = cardTexture.getHeight(); @@ -186,6 +223,15 @@ public static void loadJokeCardImage(AbstractCard card, String img) { ReflectionHacks.setPrivate(card, AbstractCard.class, "jokePortrait", cardImg); } + + public static String makeImagePath(String resourcePath) { + return getModID() + "Resources/images/" + resourcePath; + } + + public static String makeAudioPath(String resourcePath) { + return getModID() + "Resources/audio/" + resourcePath; + } + public static String makeCardPath(String resourcePath) { return getModID() + "Resources/images/cards/" + resourcePath; } @@ -262,6 +308,12 @@ private static void autoAddCards() // } } } + // THE SUPER IMPORTANT GIFT ARRAY + ArrayList> incomingGiftsList = new ArrayList<>(); + // + + + @Deprecated public static AbstractCard getOffClassCard() { @@ -274,26 +326,334 @@ public static AbstractCard getRandomAnyColorCard() { if (simplePossibilities == null) { simplePossibilities = new ArrayList<>(); for (AbstractCard q : CardLibrary.getAllCards()) { - if (!q.hasTag(AbstractCard.CardTags.STARTER_STRIKE) && !q.hasTag(AbstractCard.CardTags.STARTER_DEFEND) && q.color != AbstractCard.CardColor.CURSE && q.type != CURSE && q.type != STATUS && !q.hasTag(AbstractCard.CardTags.HEALING) && q.rarity != AbstractCard.CardRarity.SPECIAL) { + if (!q.hasTag(AbstractCard.CardTags.STARTER_STRIKE) && !q.hasTag(AbstractCard.CardTags.STARTER_DEFEND) && !q.hasTag(BANNEDFORSNECKO) && + q.color != AbstractCard.CardColor.CURSE && q.type != CURSE && q.type != STATUS && + !q.hasTag(AbstractCard.CardTags.HEALING) && q.rarity != AbstractCard.CardRarity.SPECIAL) { simplePossibilities.add(q.cardID); } } } - return CardLibrary.getCopy(Wiz.getRandomItem(simplePossibilities, AbstractDungeon.cardRandomRng)); + + String selectedCardID = Wiz.getRandomItem(simplePossibilities, AbstractDungeon.cardRandomRng); + return CardLibrary.getCopy(selectedCardID); } - //TODO Make rarity matter in Offclass card gen. + //removed to-do here, rarity is not relevant due to how gift generation works in a limited pool + public static AbstractCard getOffClassCardMatchingPredicate(Predicate q) { ArrayList possList = new ArrayList<>(CardLibrary.getAllCards()); - possList.removeIf(c -> c.hasTag(AbstractCard.CardTags.STARTER_STRIKE) || c.hasTag(AbstractCard.CardTags.STARTER_DEFEND) || c.color == AbstractDungeon.player.getCardColor() || c.color == AbstractCard.CardColor.CURSE || c.type == CURSE || c.rarity == AbstractCard.CardRarity.SPECIAL || c.type == STATUS || !q.test(c) || c.hasTag(AbstractCard.CardTags.HEALING) || c.hasTag(BANNEDFORSNECKO)); - if (!pureSneckoMode && AbstractDungeon.player instanceof TheSnecko) + possList.removeIf(c -> c.hasTag(AbstractCard.CardTags.STARTER_STRIKE) || c.hasTag(AbstractCard.CardTags.STARTER_DEFEND) || c.color == AbstractDungeon.player.getCardColor() || c.color == CollectibleCardColorEnumPatch.CardColorPatch.COLLECTIBLE || c.color == AbstractCard.CardColor.CURSE || c.type == CURSE || c.rarity == AbstractCard.CardRarity.SPECIAL || c.rarity == AbstractCard.CardRarity.BASIC || c.type == STATUS || !q.test(c) || c.hasTag(BANNEDFORSNECKO) || c.hasTag(GHOSTWHEELCARD)); + if (AbstractDungeon.getCurrRoom().phase == AbstractRoom.RoomPhase.COMBAT) { + possList.removeIf(c -> c.hasTag(AbstractCard.CardTags.HEALING)); + } + if ((!pureSneckoMode && !AbstractDungeon.player.hasRelic(PrismaticShard.ID) && AbstractDungeon.player instanceof TheSnecko)); possList.removeIf(c -> !validColors.contains(c.color)); - return possList.get(AbstractDungeon.cardRandomRng.random(possList.size() - 1)).makeCopy(); + + possList.removeIf(c -> c.color == AbstractDungeon.player.getCardColor()); + + possList.removeIf(c -> c.color == CardColorEnumPatch.CardColorPatch.BOSS); + + possList.removeIf(c -> c.color == AbstractCard.CardColor.COLORLESS); + + possList.removeIf(c -> c.color == CollectibleCardColorEnumPatch.CardColorPatch.COLLECTIBLE); + + if (possList.isEmpty()) { + return new Madness(); + } + + return possList.get(AbstractDungeon.miscRng.random(possList.size() - 1)).makeCopy(); + } + + public static AbstractCard getOffClassCardMatchingPredicatePotionRng(Predicate q) { + ArrayList possList = new ArrayList<>(CardLibrary.getAllCards()); + possList.removeIf(c -> c.hasTag(AbstractCard.CardTags.STARTER_STRIKE) || c.hasTag(AbstractCard.CardTags.STARTER_DEFEND) || c.color == AbstractDungeon.player.getCardColor() || c.color == CollectibleCardColorEnumPatch.CardColorPatch.COLLECTIBLE || c.color == AbstractCard.CardColor.CURSE || c.type == CURSE || c.rarity == AbstractCard.CardRarity.SPECIAL || c.rarity == AbstractCard.CardRarity.BASIC || c.type == STATUS || !q.test(c) || c.hasTag(BANNEDFORSNECKO) || c.hasTag(GHOSTWHEELCARD)); + if (AbstractDungeon.getCurrRoom().phase == AbstractRoom.RoomPhase.COMBAT) { + possList.removeIf(c -> c.hasTag(AbstractCard.CardTags.HEALING)); + } + if ((!pureSneckoMode && !AbstractDungeon.player.hasRelic(PrismaticShard.ID) && AbstractDungeon.player instanceof TheSnecko)); + possList.removeIf(c -> !validColors.contains(c.color)); + + possList.removeIf(c -> c.color == AbstractDungeon.player.getCardColor()); + + possList.removeIf(c -> c.color == CardColorEnumPatch.CardColorPatch.BOSS); + + possList.removeIf(c -> c.color == AbstractCard.CardColor.COLORLESS); + + possList.removeIf(c -> c.color == CollectibleCardColorEnumPatch.CardColorPatch.COLLECTIBLE); + + if (possList.isEmpty()) { + return new Madness(); + } + + return possList.get(AbstractDungeon.potionRng.random(possList.size() - 1)).makeCopy(); + } + + + public static AbstractCard getOffClassCardMatchingPredicateRelicRng(Predicate q) { + ArrayList possList = new ArrayList<>(CardLibrary.getAllCards()); + possList.removeIf(c -> c.hasTag(AbstractCard.CardTags.STARTER_STRIKE) || c.hasTag(AbstractCard.CardTags.STARTER_DEFEND) || c.color == AbstractDungeon.player.getCardColor() || c.color == CollectibleCardColorEnumPatch.CardColorPatch.COLLECTIBLE || c.color == AbstractCard.CardColor.CURSE || c.type == CURSE || c.rarity == AbstractCard.CardRarity.SPECIAL || c.rarity == AbstractCard.CardRarity.BASIC || c.type == STATUS || !q.test(c) || c.hasTag(BANNEDFORSNECKO) || c.hasTag(GHOSTWHEELCARD)); + if (AbstractDungeon.getCurrRoom().phase == AbstractRoom.RoomPhase.COMBAT) { + possList.removeIf(c -> c.hasTag(AbstractCard.CardTags.HEALING)); + } + if ((!pureSneckoMode && !AbstractDungeon.player.hasRelic(PrismaticShard.ID) && AbstractDungeon.player instanceof TheSnecko)); + possList.removeIf(c -> !validColors.contains(c.color)); + + possList.removeIf(c -> c.color == AbstractDungeon.player.getCardColor()); + + possList.removeIf(c -> c.color == CardColorEnumPatch.CardColorPatch.BOSS); + + possList.removeIf(c -> c.color == AbstractCard.CardColor.COLORLESS); + + possList.removeIf(c -> c.color == CollectibleCardColorEnumPatch.CardColorPatch.COLLECTIBLE); + + if (possList.isEmpty()) { + return new Madness(); + } + + return possList.get(AbstractDungeon.relicRng.random(possList.size() - 1)).makeCopy(); + } + + + //may God forgive me for this great sin. + public static AbstractCard getOffClassCardMatchingPredicateDebuff(Predicate q) { + ArrayList possList = new ArrayList<>(CardLibrary.getAllCards()); + possList.removeIf(c -> (!(ArchetypeHelper.appliesDebuff(c) || + // Ironclad Cards + (c.cardID.equals(Disarm.ID) || + // Silent Cards + c.cardID.equals(PiercingWail.ID) || + c.cardID.equals(Catalyst.ID) || + c.cardID.equals(NoxiousFumes.ID) || + c.cardID.equals(Envenom.ID) || + c.cardID.equals(Malaise.ID) || + //Defect Cards + c.cardID.equals(GoForTheEyes.ID) || + c.cardID.equals(BeamCell.ID) || + c.cardID.equals(LockOn.ID) || + // Watcher Cards + c.cardID.equals(CrushJoints.ID) || + c.cardID.equals(SashWhip.ID) || + c.cardID.equals(Indignation.ID) || + c.cardID.equals(WaveOfTheHand.ID) || + //Colorless Cards + c.cardID.equals(Trip.ID) || + c.cardID.equals(Blind.ID) || + c.cardID.equals(DarkShackles.ID) || + c.cardID.equals(SadisticNature.ID) || + //Gremlins Cards + c.cardID.equals(Jeer.ID) || + c.cardID.equals(AggressiveDefense.ID) || + c.cardID.equals(Dazzle.ID) || + c.cardID.equals(Exacerbate.ID) || + c.cardID.equals(BrokenShin.ID) || + c.cardID.equals(Heckle.ID) || + c.cardID.equals(ToeStub.ID) || + //Champ Cards + c.cardID.equals(ViciousMockery.ID) || + c.cardID.equals(Taunt.ID) || + c.cardID.equals(FaceSlap.ID) || + c.cardID.equals(Shatter.ID) || + c.cardID.equals(SetATrap.ID) || + c.cardID.equals(CheapShot.ID) || + //Slime Boss Cards + c.cardID.equals(LivingWall.ID) || + c.cardID.equals(ItLooksTasty.ID) || + c.cardID.equals(SplitLicking.ID) || + c.cardID.equals(Gluttony.ID) || + c.cardID.equals(HungryTackle.ID) || + c.cardID.equals(DisruptingSlam.ID) || + c.cardID.equals(Nibble.ID) || + c.cardID.equals(Dissolve.ID) || + c.cardID.equals(Recollect.ID) || + c.cardID.equals(Recycling.ID) || + c.cardID.equals(WasteNot.ID) || + //Boss Card Pool + c.cardID.equals(SuperLivingWall.ID) || + c.cardID.equals(DashGenerateEvil.ID) || + c.cardID.equals(expansioncontent.cards.GoopSpray.ID) || + c.cardID.equals(expansioncontent.cards.YouAreMine.ID) || + c.cardID.equals(expansioncontent.cards.FaceSlap.ID) || + //Collector Cards + c.cardID.equals(YouAreMine.ID) || + c.cardID.equals(SapStrength.ID) || + c.cardID.equals(CursedWail.ID) || + c.cardID.equals(SeedOfDoubt.ID) || + c.cardID.equals(ThornWhip.ID) || + c.cardID.equals(Arrogance.ID) || + c.cardID.equals(Invigorate.ID) || + c.cardID.equals(ItMattersNot.ID) || + c.cardID.equals(Billow.ID) || + c.cardID.equals(BindingCall.ID) || + c.cardID.equals(CantTouchThis.ID) || + c.cardID.equals(RotwoodKindling.ID) || + c.cardID.equals(Suffering.ID) || + c.cardID.equals(DarkLordForm.ID) || + c.cardID.equals(Darkstorm.ID) || + c.cardID.equals(Goodbye.ID) || + c.cardID.equals(Condemn.ID) || + c.cardID.equals(InevitableDemise.ID) || + c.cardID.equals(BlackBindings.ID) || + c.cardID.equals(MiniCurse.ID) || + c.cardID.equals(Finalize.ID) || + c.cardID.equals(InflictAgony.ID) || + c.cardID.equals(LanternFlare.ID) || + //Hexa Cards + c.cardID.equals(Sear.ID) || + c.cardID.equals(HeatMetal.ID) || + c.cardID.equals(BurningTouch.ID) || + c.cardID.equals(Firestarter.ID) || + c.cardID.equals(FlamesFromBeyond.ID) || + c.cardID.equals(SpectralSpark.ID) || + c.cardID.equals(GhostflameInferno.ID) || + c.cardID.equals(Incineration.ID) || + c.cardID.equals(LingeringShades.ID) || + c.cardID.equals(VolcanoVisage.ID) || + //Guardian Cards + c.cardID.equals(SentryBeam.ID) || + c.cardID.equals(Gem_Purple.ID) || + c.cardID.equals(Gem_Crimson.ID) || + //Hermit Cards + c.cardID.equals(Brawl.ID) || + c.cardID.equals(RoundhouseKick.ID) || + //Automaton Cards + c.cardID.equals(Deprecate.ID) || + c.cardID.equals(Invalidate.ID) || + c.cardID.equals(Undervolt.ID) || + //Snecko Cards + c.cardID.equals(Deception.ID) || + c.cardID.equals(MakeshiftBlade.ID) || + c.cardID.equals(Belittle.ID) || + c.cardID.equals(PoisonParadise.ID) || + c.cardID.equals(AceOfWands.ID) || + //Awakened One Cards + c.cardID.equals(Scour.ID) || + c.cardID.equals(SingularityShield.ID) || + c.cardID.equals(Deathwish.ID) || + c.cardID.equals(Gloomguard.ID) || + c.cardID.equals(MirePit.ID) || + c.cardID.equals(SludgeBomb.ID) || + c.cardID.equals(SplitWide.ID) || + c.cardID.equals(Spellshield.ID) || + c.cardID.equals(WaveOfMiasma.ID) || + c.cardID.equals(RavenStrike.ID) || + c.cardID.equals(Siphon.ID) || + c.cardID.equals(Nihil.ID) + ) + + ) || (c.hasTag(AbstractCard.CardTags.STARTER_STRIKE) || c.hasTag(AbstractCard.CardTags.STARTER_DEFEND) || c.color == AbstractDungeon.player.getCardColor() || c.color == AbstractCard.CardColor.CURSE || c.type == CURSE || c.rarity == AbstractCard.CardRarity.SPECIAL || c.rarity == AbstractCard.CardRarity.BASIC || c.type == STATUS || !q.test(c) || c.hasTag(BANNEDFORSNECKO) || c.hasTag(GHOSTWHEELCARD)) + || ( + //False Positives + c.cardID.equals(SwordThrow.ID) || + c.cardID.equals(ShieldThrow.ID) || + c.cardID.equals(HyperBeam_Guardian.ID) || + c.cardID.equals(HoleUp.ID) || + c.cardID.equals(Quickdraw.ID) || + c.cardID.equals(Gestalt.ID) || + c.cardID.equals(OverwhelmingPower.ID) || + c.cardID.equals(RadiantFlame.ID) || + c.cardID.equals(DecasProtection.ID) || + c.cardID.equals(BulletTime.ID) || + c.cardID.equals(WraithForm.ID) || + c.cardID.equals(AdrenalArmor.ID) || + c.cardID.equals(BattleTrance.ID) || + c.cardID.equals(Berserk.ID) || + c.cardID.equals(Flex.ID) || + c.cardID.equals(BiasedCognition.ID) || + c.cardID.equals(Hyperbeam.ID) || + c.cardID.equals(Fasting.ID) || + c.cardID.equals(Erupt.ID) || + c.cardID.equals(MachineLearning.ID) || + c.cardID.equals(GremlinMeal.ID) || + c.cardID.equals(FollowThrough.ID) || + c.cardID.equals(FeatherVeil.ID) || + c.cardID.equals(AwakenedForm.ID) || + c.cardID.equals(DemonGlyph.ID) || + c.cardID.equals(ProfaneStrike.ID) || + c.cardID.equals(Unleash.ID) || + + //Really Bad Offclass cards + c.cardID.equals(ChargedBarrage.ID) + )) + ); + if (AbstractDungeon.getCurrRoom().phase == AbstractRoom.RoomPhase.COMBAT) { + possList.removeIf(c -> c.hasTag(AbstractCard.CardTags.HEALING)); + } + if ((!pureSneckoMode && !AbstractDungeon.player.hasRelic(PrismaticShard.ID) && AbstractDungeon.player instanceof TheSnecko)); + possList.removeIf(c -> !validColors.contains(c.color)); + + possList.removeIf(c -> ( + //crossmod restriction pls work + c.color != AbstractCard.CardColor.RED && + c.color != AbstractCard.CardColor.GREEN && + c.color != AbstractCard.CardColor.BLUE && + c.color != AbstractCard.CardColor.PURPLE && + c.color != AbstractCard.CardColor.COLORLESS && + c.color != CardColorEnumPatch.CardColorPatch.BOSS && + //Downfall Characters + c.color != hermit.Enums.COLOR_YELLOW && + //Act 1 Bosses + c.color != AbstractCardEnum.SLIMEBOUND && + c.color != guardian.patches.AbstractCardEnum.GUARDIAN && + c.color != TheHexaghost.Enums.GHOST_GREEN && + //Act 2 Bosses + c.color != ChampChar.Enums.CHAMP_GRAY && + c.color != AutomatonChar.Enums.BRONZE_AUTOMATON && + c.color != CollectorChar.Enums.COLLECTOR && + //Act 3 Bosses + c.color != AwakenedOneChar.Enums.AWAKENED_BLUE && + + //Bonus Characters + c.color != TheSnecko.Enums.SNECKO_CYAN && + c.color != gremlin.patches.AbstractCardEnum.GREMLIN) + + && + //doesn't detect debuff application + (!ArchetypeHelper.appliesDebuff(c) || + //detects debuff application, BUT is not targeted at an enemy + (ArchetypeHelper.appliesDebuff(c) && + c.target != AbstractCard.CardTarget.ENEMY && + c.target != AbstractCard.CardTarget.SELF_AND_ENEMY && + c.target != AbstractCard.CardTarget.ALL_ENEMY) + )); + + + //PLEASE WORK + possList.removeIf(c -> c.color == AbstractDungeon.player.getCardColor()); + possList.removeIf(c -> c.color == CollectibleCardColorEnumPatch.CardColorPatch.COLLECTIBLE); + + possList.removeIf(c -> c.color == CardColorEnumPatch.CardColorPatch.BOSS); + + possList.removeIf(c -> c.color == AbstractCard.CardColor.COLORLESS); + + if (possList.isEmpty()) { + return new Madness(); + } + + return possList.get(AbstractDungeon.miscRng.random(possList.size() - 1)).makeCopy(); } + + public static AbstractCard getSpecificClassCard(AbstractCard.CardColor color) { ArrayList possList = new ArrayList<>(CardLibrary.getAllCards()); - possList.removeIf(c -> c.hasTag(AbstractCard.CardTags.STARTER_STRIKE) || c.hasTag(AbstractCard.CardTags.STARTER_DEFEND) || c.color != color || c.type == CURSE || c.type == STATUS || c.rarity == AbstractCard.CardRarity.SPECIAL || c.hasTag(AbstractCard.CardTags.HEALING) || c.hasTag(BANNEDFORSNECKO)); + + if (color != CollectibleCardColorEnumPatch.CardColorPatch.COLLECTIBLE) { + possList.removeIf(c -> c.hasTag(AbstractCard.CardTags.STARTER_STRIKE) || c.hasTag(AbstractCard.CardTags.STARTER_DEFEND) || c.color != color || c.type == CURSE || c.type == STATUS || c.rarity == AbstractCard.CardRarity.SPECIAL || c.hasTag(BANNEDFORSNECKO) || c.hasTag(GHOSTWHEELCARD)); + } + + if (color == CollectibleCardColorEnumPatch.CardColorPatch.COLLECTIBLE) { + ArrayList allCollecteds = Wiz.getCardsMatchingPredicate(c -> c.color == CollectibleCardColorEnumPatch.CardColorPatch.COLLECTIBLE && c.rarity != AbstractCard.CardRarity.SPECIAL && !c.hasTag(AbstractCard.CardTags.HEALING), true); + return (allCollecteds.remove(AbstractDungeon.cardRandomRng.random(allCollecteds.size() - 1))); + } + + if (AbstractDungeon.getCurrRoom().phase == AbstractRoom.RoomPhase.COMBAT) { + possList.removeIf(c -> c.hasTag(AbstractCard.CardTags.HEALING)); + } + + if (possList.size() == 0) { + possList.add(new Madness()); + } + return possList.get(AbstractDungeon.cardRandomRng.random(possList.size() - 1)).makeCopy(); } @@ -318,6 +678,7 @@ public void receiveEditRelics() { BaseMod.addRelicToCustomPool(new SleevedAce(), TheSnecko.Enums.SNECKO_CYAN); BaseMod.addRelicToCustomPool(new SuperSneckoSoul(), TheSnecko.Enums.SNECKO_CYAN); BaseMod.addRelicToCustomPool(new UnknownEgg(), TheSnecko.Enums.SNECKO_CYAN); + BaseMod.addRelicToCustomPool(new CrystallizedMud(), TheSnecko.Enums.SNECKO_CYAN); BaseMod.addRelic(new SuperSneckoEye(), RelicType.SHARED); BaseMod.addRelic(new SneckoTalon(), RelicType.SHARED); BaseMod.addRelic(new BlankCard(), RelicType.SHARED); @@ -351,36 +712,42 @@ public void receiveEditCards() { public void receiveSetUnlocks() { downfallMod.registerUnlockSuite( - Memorize.ID, + SoulDraw.ID, + Restock.ID, PureSnecko.ID, - Rotation.ID, - UnknownColorless.ID, - UnknownStrength.ID, - UnknownDexterity.ID, + LatchOn.ID, + SerpentineSleuth.ID, + SerpentsNest.ID, - MixItUp.ID, - Transmogrify.ID, - GlitteringGambit.ID, + TrashCan.ID, + TrashToTreasure.ID, + OverwhelmingPresence.ID, - RareBoosterPack.ID, + SneckoBoss.ID, SleevedAce.ID, CleanMud.ID, - SuperSneckoEye.ID, - UnknownEgg.ID, BlankCard.ID, + SneckoTalon.ID, + SleevedAce.ID, TheSnecko.Enums.THE_SNECKO ); } - public void addPotions() { + @Override + public void receiveAddAudio() { + BaseMod.addAudio(makeID("BUS"), makeAudioPath("bus.ogg")); + BaseMod.addAudio(makeID("SHOTGUN"), makeAudioPath("shotgun.ogg")); + } + public void addPotions() { BaseMod.addPotion(CheatPotion.class, Color.GRAY, Color.WHITE, Color.BLACK, CheatPotion.POTION_ID, TheSnecko.Enums.THE_SNECKO); BaseMod.addPotion(DiceRollPotion.class, Color.CYAN, Color.WHITE, Color.BLACK, DiceRollPotion.POTION_ID, TheSnecko.Enums.THE_SNECKO); BaseMod.addPotion(OffclassReductionPotion.class, Color.CYAN, Color.CORAL, Color.MAROON, OffclassReductionPotion.POTION_ID, TheSnecko.Enums.THE_SNECKO); + // BaseMod.addPotion(MuddlingPotion.class, Color.CYAN, Color.CORAL, Color.MAROON, OffclassReductionPotion.POTION_ID, TheSnecko.Enums.THE_SNECKO); // BanSharedContentPatch.registerRunLockedPotion(TheSnecko.Enums.THE_SNECKO, MuddlingPotion.POTION_ID); if (Loader.isModLoaded("widepotions")) { @@ -455,8 +822,6 @@ public void receivePostInitialize() { BaseMod.addEvent(new AddEventParams.Builder(Serpent_Snecko.ID, Serpent_Snecko.class) //Event ID// //Event Character// .playerClass(TheSnecko.Enums.THE_SNECKO) - //Event Spawn Condition// - .spawnCondition(() -> !evilMode) //Event ID to Override// .overrideEvent(Sssserpent.ID) //Event Type// @@ -466,8 +831,6 @@ public void receivePostInitialize() { BaseMod.addEvent(new AddEventParams.Builder(Serpent_Snecko.ID, Serpent_Snecko.class) //Event ID// //Event Character// .playerClass(TheSnecko.Enums.THE_SNECKO) - //Event Spawn Condition// - .spawnCondition(() -> evilMode) //Event ID to Override// .overrideEvent(Serpent_Evil.ID) //Event Type// @@ -502,7 +865,7 @@ public static void resetUnknownsLists() { } validColors.clear(); for (AbstractCard.CardColor c : AbstractCard.CardColor.values()) { - if (c != AbstractCard.CardColor.CURSE && c != AbstractCard.CardColor.COLORLESS) + if (c != AbstractCard.CardColor.CURSE && c != AbstractCard.CardColor.COLORLESS && c != CardColorEnumPatch.CardColorPatch.BOSS && c != CollectibleCardColorEnumPatch.CardColorPatch.COLLECTIBLE) validColors.add(c); } OffclassHelper.updateAllUnknownReplacements(); @@ -553,7 +916,7 @@ public static void findAWayToTriggerThisAtGameStart() { colorChoices = new CardGroup(CardGroup.CardGroupType.UNSPECIFIED); for (AbstractCard.CardColor r : AbstractCard.CardColor.values()) { if (r != AbstractCard.CardColor.CURSE && r != AbstractDungeon.player.getCardColor() && r != AbstractCard.CardColor.COLORLESS && r != CardColorEnumPatch.CardColorPatch.BOSS && r != CollectibleCardColorEnumPatch.CardColorPatch.COLLECTIBLE && (!sneckoNoModCharacters || allowedColors.contains(r.name()))) { - if (BaseMod.getBackColor(r) != null) { + if (1==1) { String s = getClassFromColor(r); AbstractCard q = playerStartCardForEventFromColor(r); @@ -583,6 +946,7 @@ public static void updateAllUnknownReplacements() { @Override public void receivePostUpdate() { + gifted = false; if (!SneckoMod.openedStarterScreen) { if (CardCrawlGame.isInARun() && downfallMod.readyToDoThing) { SneckoMod.findAWayToTriggerThisAtGameStart(); @@ -606,4 +970,21 @@ public void receivePostUpdate() { } } } + + public static boolean gifted = false; + + public static ArrayList> incomingPicks = new ArrayList<>(); + + public static void addGift(ArrayList incomingGift) { + incomingPicks.add(incomingGift); + } + + public static void nextGift() { + System.out.println("Next called" + incomingPicks.size()); + if (incomingPicks.size() > 0 && !gifted) { + gifted = true; + System.out.println(incomingPicks.get(0)); + AbstractDungeon.cardRewardScreen.open(incomingPicks.remove(0), null, TEXT[2]); + } + } } diff --git a/src/main/java/sneckomod/TheSnecko.java b/src/main/java/sneckomod/TheSnecko.java index b97b34fa2..9278b30e4 100644 --- a/src/main/java/sneckomod/TheSnecko.java +++ b/src/main/java/sneckomod/TheSnecko.java @@ -12,6 +12,7 @@ import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.core.EnergyManager; import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.cutscenes.CutscenePanel; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.helpers.CardLibrary; import com.megacrit.cardcrawl.helpers.FontHelper; @@ -19,6 +20,8 @@ import com.megacrit.cardcrawl.helpers.ScreenShake; import com.megacrit.cardcrawl.localization.CharacterStrings; import com.megacrit.cardcrawl.screens.CharSelectInfo; +import com.megacrit.cardcrawl.vfx.AbstractGameEffect; +import com.megacrit.cardcrawl.vfx.scene.DefectVictoryNumberEffect; import reskinContent.patches.CharacterSelectScreenPatches; import reskinContent.reskinContent; import sneckomod.cards.Defend; @@ -27,8 +30,10 @@ import sneckomod.cards.TailWhip; import sneckomod.cards.unknowns.*; import sneckomod.relics.SneckoSoul; +import sneckomod.vfx.SneckoVictoryNumberEffect; import java.util.ArrayList; +import java.util.List; import static sneckomod.SneckoMod.*; import static sneckomod.TheSnecko.Enums.SNECKO_CYAN; @@ -112,14 +117,13 @@ public ArrayList getStartingDeck() { retVal.add(Strike.ID); retVal.add(Strike.ID); retVal.add(Strike.ID); + retVal.add(Strike.ID); retVal.add(Defend.ID); retVal.add(Defend.ID); retVal.add(Defend.ID); retVal.add(Defend.ID); retVal.add(TailWhip.ID); retVal.add(SnekBite.ID); - retVal.add(Unknown.ID); - retVal.add(Unknown.ID); return retVal; } @@ -207,6 +211,24 @@ public Texture getCustomModeCharacterButtonImage() { */ + + //this is a total meme ending lol + @Override + public List getCutscenePanels() { + List panels = new ArrayList(); + panels.add(new CutscenePanel("sneckomodResources/images/ending/snecko1.png", "ATTACK_MAGIC_BEAM_SHORT")); + panels.add(new CutscenePanel("sneckomodResources/images/ending/snecko2.png")); + panels.add(new CutscenePanel("sneckomodResources/images/ending/snecko3.png")); + return panels; + } + + @Override + public void updateVictoryVfx(ArrayList effects) { + if (effects.stream().filter(e -> e instanceof SneckoVictoryNumberEffect).count() < 8) + effects.add(new SneckoVictoryNumberEffect()); + } + + @Override public String getSpireHeartText() { return TEXT[1]; diff --git a/src/main/java/sneckomod/actions/AceOfWandsAction.java b/src/main/java/sneckomod/actions/AceOfWandsAction.java new file mode 100644 index 000000000..7db24d66a --- /dev/null +++ b/src/main/java/sneckomod/actions/AceOfWandsAction.java @@ -0,0 +1,42 @@ +package sneckomod.actions; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.AbstractGameAction.ActionType; +import com.megacrit.cardcrawl.actions.common.GainBlockAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.CardGroup; +import com.megacrit.cardcrawl.cards.CardGroup.CardGroupType; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.UIStrings; +import com.megacrit.cardcrawl.powers.watcher.WaveOfTheHandPower; +import sneckomod.patches.WaveOfTheHandPatch; +import sneckomod.powers.AceOfWandsPower; + +import java.util.Iterator; + +public class AceOfWandsAction extends AbstractGameAction { + +private AbstractPlayer p; + +//Credit to Alex for this old code to prevent a softlock with AceOfWands / Queen of Pentacles, obviously + +public AceOfWandsAction(int amount) { + this.p = AbstractDungeon.player; + this.setValues(this.p, AbstractDungeon.player, amount); + this.actionType = ActionType.CARD_MANIPULATION; + this.duration = Settings.ACTION_DUR_MED; + this.amount = amount; +} + + public void update() { + if (AbstractDungeon.player.hasPower(WaveOfTheHandPower.POWER_ID)) { + WaveOfTheHandPatch.isActive = 1; + } + if (AbstractDungeon.player.hasPower(AceOfWandsPower.POWER_ID)) { + this.addToTop(new GainBlockAction(p, p, amount)); + } + this.isDone = true; + this.tickDuration(); +} + } \ No newline at end of file diff --git a/src/main/java/sneckomod/actions/BabySneckoAttackAction.java b/src/main/java/sneckomod/actions/BabySneckoAttackAction.java index 46fd71ae4..c890c21d5 100644 --- a/src/main/java/sneckomod/actions/BabySneckoAttackAction.java +++ b/src/main/java/sneckomod/actions/BabySneckoAttackAction.java @@ -21,7 +21,7 @@ public BabySneckoAttackAction(AbstractMonster m, BabySnecko b) { public void update() { this.b.baby.state.setAnimation(0, "boop", false); this.b.baby.state.addAnimation(0, "idle", true, 0.0f); - AbstractDungeon.actionManager.addToBottom(new PseudoDamageRandomEnemyAction(m, new DamageInfo(AbstractDungeon.player, 5, DamageInfo.DamageType.THORNS), AbstractGameAction.AttackEffect.BLUNT_LIGHT)); + AbstractDungeon.actionManager.addToBottom(new PseudoDamageRandomEnemyAction(m, new DamageInfo(AbstractDungeon.player, 9, DamageInfo.DamageType.THORNS), AbstractGameAction.AttackEffect.BLUNT_LIGHT)); this.isDone = true; } diff --git a/src/main/java/sneckomod/actions/BabySneckoMuddleAction.java b/src/main/java/sneckomod/actions/BabySneckoMuddleAction.java new file mode 100644 index 000000000..281445f4c --- /dev/null +++ b/src/main/java/sneckomod/actions/BabySneckoMuddleAction.java @@ -0,0 +1,42 @@ +package sneckomod.actions; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import expansioncontent.expansionContentMod; +import sneckomod.SneckoMod; + +import java.util.ArrayList; + +public class BabySneckoMuddleAction extends AbstractGameAction { + + @Override + public void update () { + ArrayList validCards = new ArrayList<>(); + + for (AbstractCard card : AbstractDungeon.player.hand.group) { + System.out.println("DEBUG: Baby Snecko checking card: " + card); + if ((card.costForTurn <= 0 || card.hasTag(SneckoMod.SNEKPROOF) || card.cost != card.costForTurn) || card.freeToPlay() || card.freeToPlayOnce) { + System.out.println("DEBUG: Card found invalid, costs: " + card.costForTurn); + continue; + } + System.out.println("DEBUG: Card found valid, costs: " + card.costForTurn); + validCards.add(card); + } + + if (!validCards.isEmpty()) { + int cardsToPick = Math.min(2, validCards.size()); + ArrayList chosenCards = new ArrayList<>(); + + for (int i = 0; i < cardsToPick; i++) { + AbstractCard randomCard = validCards.get(AbstractDungeon.relicRng.random(validCards.size() - 1)); + System.out.println("DEBUG: Decided to Muddle: " + randomCard + " which costs: " + randomCard.costForTurn); + AbstractDungeon.actionManager.addToBottom(new MuddleAction(randomCard)); + validCards.remove(randomCard); + chosenCards.add(randomCard); + } + } + + this.isDone = true; + } + } \ No newline at end of file diff --git a/src/main/java/sneckomod/actions/DrawOffclassAction.java b/src/main/java/sneckomod/actions/DrawOffclassAction.java new file mode 100644 index 000000000..3eec2a13d --- /dev/null +++ b/src/main/java/sneckomod/actions/DrawOffclassAction.java @@ -0,0 +1,45 @@ +package sneckomod.actions; + +import basemod.BaseMod; +import com.evacipated.cardcrawl.mod.stslib.actions.common.FetchAction; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.DrawCardAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.CardGroup; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import hermit.util.Wiz; +import sneckomod.actions.MuddleAction; + +import java.util.stream.Collectors; + +public class DrawOffclassAction extends AbstractGameAction { + private int draw; + private AbstractPlayer p; + + public DrawOffclassAction(int amount) { + draw = amount; + p = AbstractDungeon.player; + } + + @Override + public void update() { + int count = 0; + + // fully loaded code + CardGroup tmp = new CardGroup(CardGroup.CardGroupType.UNSPECIFIED); + tmp.group.addAll(AbstractDungeon.player.drawPile.group.stream() + .filter(c -> c.color != AbstractDungeon.player.getCardColor()) + .limit(draw) + .collect(Collectors.toList())); + + for (AbstractCard c : tmp.group) { + if (Wiz.hand().size() < BaseMod.MAX_HAND_SIZE) { + addToBot(new FetchAction(Wiz.p().drawPile, AbstractDungeon.cardRandomRng.random(tmp.size() - 1))); + count++; + if (count >= draw) break; + } + } + isDone = true; + } +} \ No newline at end of file diff --git a/src/main/java/sneckomod/actions/DrawThenMuddleAction.java b/src/main/java/sneckomod/actions/DrawThenMuddleAction.java index 7b20090df..409c0c884 100644 --- a/src/main/java/sneckomod/actions/DrawThenMuddleAction.java +++ b/src/main/java/sneckomod/actions/DrawThenMuddleAction.java @@ -50,4 +50,4 @@ public void update() { addToTop(new DrawCardAction(p, bruh)); } } -} +} \ No newline at end of file diff --git a/src/main/java/sneckomod/actions/MemorizeAction.java b/src/main/java/sneckomod/actions/MemorizeAction.java deleted file mode 100644 index d0ac07872..000000000 --- a/src/main/java/sneckomod/actions/MemorizeAction.java +++ /dev/null @@ -1,100 +0,0 @@ -// -// Source code recreated from a .class file by IntelliJ IDEA -// (powered by Fernflower decompiler) -// - -package sneckomod.actions; - -import com.megacrit.cardcrawl.actions.AbstractGameAction; -import com.megacrit.cardcrawl.cards.AbstractCard; -import com.megacrit.cardcrawl.cards.CardGroup; -import com.megacrit.cardcrawl.cards.colorless.Madness; -import com.megacrit.cardcrawl.cards.tempCards.Shiv; -import com.megacrit.cardcrawl.characters.AbstractPlayer; -import com.megacrit.cardcrawl.core.CardCrawlGame; -import com.megacrit.cardcrawl.core.Settings; -import com.megacrit.cardcrawl.dungeons.AbstractDungeon; -import com.megacrit.cardcrawl.helpers.CardLibrary; -import com.megacrit.cardcrawl.vfx.cardManip.ShowCardAndObtainEffect; -import slimebound.actions.MakeTempCardInHandActionReduceCost; -import sneckomod.SneckoMod; -import sneckomod.cards.unknowns.AbstractUnknownCard; -import sneckomod.cards.unknowns.Unknown; -import sneckomod.patches.UnknownExtraUiPatch; - -import java.util.ArrayList; - -public class MemorizeAction extends AbstractGameAction { - private static final String[] EXTENDED_DESCRIPTION = CardCrawlGame.languagePack.getCardStrings(SneckoMod.makeID("Memorize")).EXTENDED_DESCRIPTION; - private AbstractPlayer p; - - private ArrayList cannotMemorize = new ArrayList<>(); - - public MemorizeAction() { - this.actionType = ActionType.CARD_MANIPULATION;// 22 - this.p = AbstractDungeon.player;// 23 - this.duration = Settings.ACTION_DUR_FAST;// 24 - }// 26 - - public void update() { - if (this.duration == Settings.ACTION_DUR_FAST) {// 30 - - for (AbstractCard c : AbstractDungeon.player.hand.group) { - c.update(); - if (UnknownExtraUiPatch.parentCard.get(c) == null) { - cannotMemorize.add(c); - } - } - for (AbstractCard c : cannotMemorize) { - p.hand.group.remove(c); - } - - - if (this.p.hand.group.size() >= 1) {// 74 - AbstractDungeon.handCardSelectScreen.open(EXTENDED_DESCRIPTION[0], 1, false, false);// 75 - this.tickDuration();// 76 - return;// 77 - } - - } - - if (!AbstractDungeon.handCardSelectScreen.wereCardsRetrieved) {// 87 - for (AbstractCard c : AbstractDungeon.handCardSelectScreen.selectedCards.group) { - AbstractCard c3 = c.makeCopy(); - for (AbstractCard c2 : p.masterDeck.group) { - if (c2.uuid == UnknownExtraUiPatch.parentCard.get(c).uuid) { - if (c2.upgraded) c3.upgrade(); - p.masterDeck.removeCard(c2); - break; - } - } - - - AbstractDungeon.effectsQueue.add(new ShowCardAndObtainEffect(c3, (float) Settings.WIDTH * .75F, (float) Settings.HEIGHT / 2.0F)); - - AbstractDungeon.topLevelEffects.add(new com.megacrit.cardcrawl.vfx.cardManip.PurgeCardEffect( - - (AbstractCard) UnknownExtraUiPatch.parentCard.get(c), com.megacrit.cardcrawl.core.Settings.WIDTH * 0.35F, com.megacrit.cardcrawl.core.Settings.HEIGHT / 2)); - - - p.hand.addToTop(c);// 106 - - UnknownExtraUiPatch.parentCard.set(c, null); - } - - this.returnCards();// 95 - AbstractDungeon.handCardSelectScreen.wereCardsRetrieved = true;// 96 - AbstractDungeon.handCardSelectScreen.selectedCards.group.clear();// 97 - this.isDone = true;// 98 - } - this.tickDuration();// 101 - }// 102 - - private void returnCards () { - for (AbstractCard c : cannotMemorize) { - this.p.hand.addToTop(c);// 106 - } - this.p.hand.refreshHandLayout();// 108 - }// 109 - - } diff --git a/src/main/java/sneckomod/actions/MuddleAction.java b/src/main/java/sneckomod/actions/MuddleAction.java index 2f12207bf..b2f42b62d 100644 --- a/src/main/java/sneckomod/actions/MuddleAction.java +++ b/src/main/java/sneckomod/actions/MuddleAction.java @@ -2,15 +2,21 @@ import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.GainBlockAction; +import com.megacrit.cardcrawl.actions.common.RelicAboveCreatureAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.powers.AbstractPower; import com.megacrit.cardcrawl.powers.NextTurnBlockPower; +import gremlin.relics.WizardHat; import slimebound.SlimeboundMod; import sneckomod.SneckoMod; +import sneckomod.cards.RiskySword; +import sneckomod.powers.BlunderGuardPower; import sneckomod.powers.MudshieldPower; import sneckomod.relics.CleanMud; import sneckomod.relics.CrystallizedMud; +import sneckomod.relics.LoadedDie; import java.util.ArrayList; @@ -30,29 +36,80 @@ public MuddleAction(AbstractCard bruhCard) { public void update() { isDone = true; + if (card instanceof RiskySword) { + // Cast the card to RiskySword and call the onMuddled method + ((RiskySword) card).onMuddledSword(); + } if (card.cost >= 0 && !card.hasTag(SneckoMod.SNEKPROOF)) {// 32 if (AbstractDungeon.player.hasPower(MudshieldPower.POWER_ID)) { AbstractDungeon.player.getPower(MudshieldPower.POWER_ID).onSpecificTrigger(); } card.superFlash(); ArrayList numList = new ArrayList<>(); - if (!AbstractDungeon.player.hasRelic(CrystallizedMud.ID)) { + // if (!AbstractDungeon.player.hasRelic(CrystallizedMud.ID)) { if (card.costForTurn != 0) numList.add(0); - } + // } if (card.costForTurn != 1) numList.add(1); if (card.costForTurn != 2) numList.add(2); - if (!AbstractDungeon.player.hasRelic(CleanMud.ID)) { + //if (!AbstractDungeon.player.hasRelic(CleanMud.ID)) { if (!this.no3) { if (card.costForTurn != 3) numList.add(3); } - } + //} int newCost = numList.get(AbstractDungeon.cardRandomRng.random(numList.size() - 1));// 33 - //SlimeboundMod.logger.info("muddling " + card.name + " base " + card.cost + " new " + newCost); - if (card.costForTurn != newCost) {// 34 - card.setCostForTurn(newCost); + int truecost = newCost; + + System.out.println("DEBUG: Cost: " + newCost); + + if (( + ((newCost == 3) && AbstractDungeon.player.hasRelic(CleanMud.ID)) + || ((newCost == 0) && (AbstractDungeon.player.hasRelic(CrystallizedMud.ID))) + )) { + + System.out.println("DEBUG: Cost is 0 or 3: " + newCost); + CleanMud cleanMudInstance = new CleanMud(); + if (AbstractDungeon.player.hasRelic(CleanMud.ID) && (newCost == 3)) { + this.addToTop(new RelicAboveCreatureAction(AbstractDungeon.player, cleanMudInstance)); + AbstractDungeon.player.getRelic(CleanMud.ID).onTrigger(); + } + + CrystallizedMud crystallizedMudInstance = new CrystallizedMud(); + if (AbstractDungeon.player.hasRelic(CrystallizedMud.ID) && (newCost == 0)) { + this.addToTop(new RelicAboveCreatureAction(AbstractDungeon.player, crystallizedMudInstance)); + AbstractDungeon.player.getRelic(CrystallizedMud.ID).onTrigger(); + } + + ArrayList numListMud = new ArrayList<>(); + if (!AbstractDungeon.player.hasRelic(CrystallizedMud.ID)) { + if (card.costForTurn != 0) numListMud.add(0); + } + if (card.costForTurn != 1) numListMud.add(1); + if (card.costForTurn != 2) numListMud.add(2); + if (!AbstractDungeon.player.hasRelic(CleanMud.ID)) { + if (!this.no3) { + if (card.costForTurn != 3) numListMud.add(3); + } + } + + int newCosts = numListMud.get(AbstractDungeon.cardRandomRng.random(numListMud.size() - 1));// 33 + truecost = newCosts; + System.out.println("DEBUG: Modified (?) Cost: " + truecost); + } + + + System.out.println("DEBUG: Final Cost: " + truecost); + + if (card.costForTurn != truecost) { + card.setCostForTurn(truecost); + } + + LoadedDie loadedDieInstance = new LoadedDie(); + if (AbstractDungeon.player.hasRelic(LoadedDie.ID)) { + AbstractDungeon.player.getRelic(LoadedDie.ID).onTrigger(); } card.freeToPlayOnce = false;// 39 } } -} + +} \ No newline at end of file diff --git a/src/main/java/sneckomod/actions/MuddleHandAction.java b/src/main/java/sneckomod/actions/MuddleHandAction.java index a5f372ffe..f542c7549 100644 --- a/src/main/java/sneckomod/actions/MuddleHandAction.java +++ b/src/main/java/sneckomod/actions/MuddleHandAction.java @@ -16,22 +16,22 @@ public MuddleHandAction() { } public MuddleHandAction(boolean maxRangeMod) { - this.actionType = ActionType.CARD_MANIPULATION;// 14 - this.p = AbstractDungeon.player;// 15 - this.duration = Settings.ACTION_DUR_FAST;// 16 + this.actionType = ActionType.CARD_MANIPULATION; + this.p = AbstractDungeon.player; + this.duration = Settings.ACTION_DUR_FAST; this.maxRangeModifier = maxRangeMod; - }// 17 + } public void update() { - if (this.duration == Settings.ACTION_DUR_FAST) {// 21 + if (this.duration == Settings.ACTION_DUR_FAST) { for (AbstractCard card : this.p.hand.group) { addToTop(new MuddleAction(card, maxRangeModifier)); } - this.isDone = true;// 33 + this.isDone = true; } else { - this.tickDuration();// 38 + this.tickDuration(); } - }// 34 39 -} + } +} \ No newline at end of file diff --git a/src/main/java/sneckomod/actions/MuddleMarkedAction.java b/src/main/java/sneckomod/actions/MuddleMarkedAction.java new file mode 100644 index 000000000..ccbfe7705 --- /dev/null +++ b/src/main/java/sneckomod/actions/MuddleMarkedAction.java @@ -0,0 +1,94 @@ +package sneckomod.actions; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.GainBlockAction; +import com.megacrit.cardcrawl.actions.common.RelicAboveCreatureAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import slimebound.SlimeboundMod; +import sneckomod.SneckoMod; +import sneckomod.cards.Cower; +import sneckomod.cards.RiskySword; +import sneckomod.powers.BlunderGuardPower; +import sneckomod.powers.MudshieldPower; +import sneckomod.relics.CleanMud; +import sneckomod.relics.CrystallizedMud; +import sneckomod.relics.LoadedDie; + +import java.util.ArrayList; + +public class MuddleMarkedAction extends AbstractGameAction { + + private AbstractCard card; + private boolean no3; + + public MuddleMarkedAction(AbstractCard bruhCard, boolean modified) { + card = bruhCard; + this.no3 = modified; + } + + public MuddleMarkedAction(AbstractCard bruhCard) { + this(bruhCard, false); + } + + public void update() { + isDone = true; + + if ((card instanceof RiskySword)) { + ((RiskySword) card).onMuddledSword(); + } + + if (card.cost >= 0 && !card.hasTag(SneckoMod.SNEKPROOF)) { + if (AbstractDungeon.player.hasPower(MudshieldPower.POWER_ID)) { + AbstractDungeon.player.getPower(MudshieldPower.POWER_ID).onSpecificTrigger(); + } + + if (AbstractDungeon.player.hasRelic(LoadedDie.ID)) { + AbstractDungeon.player.getRelic(LoadedDie.ID).onTrigger(); + } + + card.superFlash(); + ArrayList numList = new ArrayList<>(); + + if (!AbstractDungeon.player.hasRelic(CrystallizedMud.ID)) { + numList.add(0); + } + + if (card.costForTurn > 1) numList.add(1); + if (card.costForTurn > 2) numList.add(2); + if (card.costForTurn > 3 && !AbstractDungeon.player.hasRelic(CleanMud.ID) && !this.no3) numList.add(3); + + if (numList.isEmpty()) { + numList.add(1); + } + + int newCost = numList.get(AbstractDungeon.cardRandomRng.random(numList.size() - 1)); + + if (((newCost == 3) && AbstractDungeon.player.hasRelic(CleanMud.ID))){ + ArrayList numListMud = new ArrayList<>(); + if (!AbstractDungeon.player.hasRelic(CrystallizedMud.ID) && (card.costForTurn != 1)){ + numListMud.add(0); + } + + CleanMud cleanMudInstance = new CleanMud(); + if (AbstractDungeon.player.hasRelic(CleanMud.ID) && (newCost == 3)) { + this.addToTop(new RelicAboveCreatureAction(AbstractDungeon.player, cleanMudInstance)); + //cleanMudInstance.flash(); + AbstractDungeon.player.getRelic(CleanMud.ID).onTrigger(); + } + + if (card.costForTurn > 1) numListMud.add(1); + if (card.costForTurn > 2) numListMud.add(2); + newCost = numListMud.get(AbstractDungeon.cardRandomRng.random(numListMud.size() - 1)); + } + + int truecost = newCost; + + if (card.costForTurn != truecost) { + card.setCostForTurn(truecost); + } + + card.freeToPlayOnce = false; + } + } +} \ No newline at end of file diff --git a/src/main/java/sneckomod/actions/MuddleRandomCardAction.java b/src/main/java/sneckomod/actions/MuddleRandomCardAction.java index 4ac88b9aa..a01d44d3c 100644 --- a/src/main/java/sneckomod/actions/MuddleRandomCardAction.java +++ b/src/main/java/sneckomod/actions/MuddleRandomCardAction.java @@ -62,4 +62,4 @@ public void update() { } } } -} +} \ No newline at end of file diff --git a/src/main/java/sneckomod/actions/NoApplyRandomDamageAction.java b/src/main/java/sneckomod/actions/NoApplyRandomDamageAction.java deleted file mode 100644 index 6ee3921af..000000000 --- a/src/main/java/sneckomod/actions/NoApplyRandomDamageAction.java +++ /dev/null @@ -1,108 +0,0 @@ -package sneckomod.actions; - -import com.badlogic.gdx.math.MathUtils; -import com.megacrit.cardcrawl.actions.AbstractGameAction; -import com.megacrit.cardcrawl.actions.utility.WaitAction; -import com.megacrit.cardcrawl.cards.DamageInfo; -import com.megacrit.cardcrawl.core.AbstractCreature; -import com.megacrit.cardcrawl.dungeons.AbstractDungeon; -import com.megacrit.cardcrawl.vfx.combat.FlashAtkImgEffect; -import sneckomod.SneckoMod; -import sneckomod.cards.AbstractSneckoCard; - -public class NoApplyRandomDamageAction extends AbstractGameAction { - - private static final float DURATION = 0.01F; - private DamageInfo info; - private int numTimes; - private int min; - private int max; - private AbstractSneckoCard source; - private int dmg; - - public NoApplyRandomDamageAction(AbstractCreature target, int min, int max, int numTimes, AttackEffect fx, AbstractSneckoCard source, DamageInfo.DamageType type) { - if (min > max) { - this.min = max; - this.max = min; - } else { - this.min = min; - this.max = max; - } - - dmg = AbstractSneckoCard.getRandomNum(min, max, source); - - this.source = source; - this.info = new DamageInfo(AbstractDungeon.player, dmg, type); - this.target = target; - this.actionType = ActionType.DAMAGE; - this.attackEffect = fx; - this.duration = DURATION; - this.numTimes = numTimes; - } - - public void update() { - if (this.target == null) { - this.isDone = true; - return; - } - if (AbstractDungeon.getCurrRoom().monsters.areMonstersBasicallyDead()) { - AbstractDungeon.actionManager.clearPostCombatActions(); - this.isDone = true; - return; - } - if (this.target.currentHealth > 0) { - AbstractDungeon.effectList.add( - new FlashAtkImgEffect( - this.target.hb.cX, this.target.hb.cY, this.attackEffect - ) - ); - - float tmp = info.output; - /* - for (AbstractPower p : target.powers) { - tmp = p.atDamageReceive(tmp, info.type); - if (info.base != (int) tmp) { - info.isModified = true; - } - } - for (AbstractPower p : target.powers) { - tmp = p.atDamageFinalReceive(tmp, info.type); - if (info.base != (int) tmp) { - info.isModified = true; - } - } - */ - info.output = MathUtils.floor(tmp); - if (info.output < 0) { - info.output = 0; - } - - this.target.damage(this.info); - /* - AbstractDungeon.actionManager.addToBottom( - new DamageAction( - this.target, - this.info, - this.attackEffect - ) - ); - */ - if ((this.numTimes > 1) && (!AbstractDungeon.getMonsters().areMonstersBasicallyDead())) { - this.numTimes--; - AbstractDungeon.actionManager.addToTop( - new NoApplyRandomDamageAction( - AbstractDungeon.getMonsters().getRandomMonster(true), - min, - max, - this.numTimes, - attackEffect, - source, - info.type - ) - ); - } - AbstractDungeon.actionManager.addToTop(new WaitAction(0.2F)); - } - this.isDone = true; - } -} \ No newline at end of file diff --git a/src/main/java/sneckomod/actions/NopeAction.java b/src/main/java/sneckomod/actions/NopeAction.java index 521ef5c04..96dc96499 100644 --- a/src/main/java/sneckomod/actions/NopeAction.java +++ b/src/main/java/sneckomod/actions/NopeAction.java @@ -1,93 +1,68 @@ -// -// Source code recreated from a .class file by IntelliJ IDEA -// (powered by Fernflower decompiler) -// - package sneckomod.actions; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.common.MakeTempCardInHandAction; import com.megacrit.cardcrawl.cards.AbstractCard; -import com.megacrit.cardcrawl.cards.tempCards.Shiv; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; -import com.megacrit.cardcrawl.helpers.CardLibrary; -import slimebound.actions.MakeTempCardInHandActionReduceCost; import sneckomod.SneckoMod; -import java.util.ArrayList; - public class NopeAction extends AbstractGameAction { private static final String[] EXTENDED_DESCRIPTION = CardCrawlGame.languagePack.getCardStrings(SneckoMod.makeID("Nope")).EXTENDED_DESCRIPTION; private AbstractPlayer p; - private boolean reduction; - public NopeAction(boolean reduceCost) { - this.actionType = ActionType.CARD_MANIPULATION;// 22 - this.p = AbstractDungeon.player;// 23 - this.duration = Settings.ACTION_DUR_FAST;// 24 - this.reduction = reduceCost; - }// 26 + public NopeAction() { + this.actionType = ActionType.CARD_MANIPULATION; + this.p = AbstractDungeon.player; + this.duration = Settings.ACTION_DUR_FAST; + } public void update() { - if (this.duration == Settings.ACTION_DUR_FAST) {// 30 - - if (this.p.hand.group.size() > 1) {// 74 - AbstractDungeon.handCardSelectScreen.open(EXTENDED_DESCRIPTION[0], 1, false, false);// 75 - this.tickDuration();// 76 - return;// 77 + if (this.duration == Settings.ACTION_DUR_FAST) { + if (this.p.hand.group.size() > 1) { + AbstractDungeon.handCardSelectScreen.open(EXTENDED_DESCRIPTION[0], 1, false, false); + this.tickDuration(); + return; } - if (this.p.hand.group.size() == 1) {// 78 + if (this.p.hand.group.size() == 1) { AbstractCard c = p.hand.getTopCard(); - p.hand.moveToExhaustPile(c); - AbstractCard.CardType q = c.type; - AbstractCard card; - - if (c.type == AbstractCard.CardType.CURSE) { - card = AbstractDungeon.returnRandomCurse(); - } else if (c.type == AbstractCard.CardType.STATUS) { - card = SneckoMod.getRandomStatus().makeCopy(); - } else { - card = SneckoMod.getSpecificClassCard(c.color); + if (isCardInvalid(c)) { + this.isDone = true; + return; } - if (reduction) { - this.addToBot(new MakeTempCardInHandActionReduceCost(card));// 34 - } else { - this.addToBot(new MakeTempCardInHandAction(card)); - } - - this.isDone = true;// 82 + //p.hand.moveToExhaustPile(c); + AbstractCard card = SneckoMod.getSpecificClassCard(c.color); + this.addToBot(new MakeTempCardInHandAction(card)); + this.isDone = true; } } - if (!AbstractDungeon.handCardSelectScreen.wereCardsRetrieved) {// 87 + if (!AbstractDungeon.handCardSelectScreen.wereCardsRetrieved) { for (AbstractCard c : AbstractDungeon.handCardSelectScreen.selectedCards.group) { - p.hand.moveToExhaustPile(c); - AbstractCard card = null; - if (c.type == AbstractCard.CardType.CURSE) { - card = AbstractDungeon.returnRandomCurse(); - } else if (c.type == AbstractCard.CardType.STATUS) { - card = SneckoMod.getRandomStatus().makeCopy(); - } else { - card = SneckoMod.getSpecificClassCard(c.color); + if (isCardInvalid(c)) { + continue; } - if (reduction) { - this.addToBot(new MakeTempCardInHandActionReduceCost(card));// 34 - } else { - this.addToBot(new MakeTempCardInHandAction(card)); - } + p.hand.moveToExhaustPile(c); + AbstractCard card = SneckoMod.getSpecificClassCard(c.color); + this.addToBot(new MakeTempCardInHandAction(card)); } - AbstractDungeon.handCardSelectScreen.wereCardsRetrieved = true;// 96 - AbstractDungeon.handCardSelectScreen.selectedCards.group.clear();// 97 - this.isDone = true;// 98 + AbstractDungeon.handCardSelectScreen.wereCardsRetrieved = true; + AbstractDungeon.handCardSelectScreen.selectedCards.group.clear(); + this.isDone = true; } - this.tickDuration();// 101 - }// 102 + this.tickDuration(); + } -} + private boolean isCardInvalid(AbstractCard card) { + p.hand.moveToExhaustPile(card); + return card.color == AbstractCard.CardColor.COLORLESS && card.rarity == AbstractCard.CardRarity.SPECIAL + || card.type == AbstractCard.CardType.STATUS + || card.type == AbstractCard.CardType.CURSE; + } +} \ No newline at end of file diff --git a/src/main/java/sneckomod/actions/PlayTyphoonAction.java b/src/main/java/sneckomod/actions/PlayTyphoonAction.java new file mode 100644 index 000000000..9cf0be96e --- /dev/null +++ b/src/main/java/sneckomod/actions/PlayTyphoonAction.java @@ -0,0 +1,56 @@ +package sneckomod.actions; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.EmptyDeckShuffleAction; +import com.megacrit.cardcrawl.actions.utility.NewQueueCardAction; +import com.megacrit.cardcrawl.actions.utility.UnlimboAction; +import com.megacrit.cardcrawl.actions.utility.WaitAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import sneckomod.cards.TyphoonFang; + +import static sneckomod.SneckoMod.NO_TYPHOON; + +public class PlayTyphoonAction extends AbstractGameAction { + private boolean exhaustCards; + private boolean bruh; + + public PlayTyphoonAction(AbstractCreature target, boolean exhausts, boolean upgraded) { + this.duration = Settings.ACTION_DUR_FAST; + this.actionType = ActionType.WAIT; + this.source = AbstractDungeon.player; + this.target = target; + this.exhaustCards = exhausts; + this.bruh = upgraded; + } + + public void update() { + if (this.duration == Settings.ACTION_DUR_FAST) { + AbstractCard card = new TyphoonFang(); + if (bruh) { + card.upgrade(); + } + card.tags.add(NO_TYPHOON); + card.exhaustOnUseOnce = true; + AbstractDungeon.player.limbo.group.add(card); + card.current_y = -200.0F * Settings.scale; + card.target_x = (float)Settings.WIDTH / 2.0F + 200.0F * Settings.xScale; + card.target_y = (float)Settings.HEIGHT / 2.0F; + card.targetAngle = 0.0F; + card.lighten(false); + card.drawScale = 0.12F; + card.targetDrawScale = 0.75F; + card.applyPowers(); + this.addToTop(new NewQueueCardAction(card, this.target, false, true)); + this.addToTop(new UnlimboAction(card)); + if (!Settings.FAST_MODE) { + this.addToTop(new WaitAction(Settings.ACTION_DUR_MED)); + } else { + this.addToTop(new WaitAction(Settings.ACTION_DUR_FASTER)); + } + } + this.isDone = true; + } + } diff --git a/src/main/java/sneckomod/actions/PureSneckoAction.java b/src/main/java/sneckomod/actions/PureSneckoAction.java deleted file mode 100644 index 8f07c2d18..000000000 --- a/src/main/java/sneckomod/actions/PureSneckoAction.java +++ /dev/null @@ -1,50 +0,0 @@ -package sneckomod.actions; - - -import com.megacrit.cardcrawl.actions.AbstractGameAction; -import com.megacrit.cardcrawl.actions.common.ExhaustSpecificCardAction; -import com.megacrit.cardcrawl.actions.common.MakeTempCardInHandAction; -import com.megacrit.cardcrawl.cards.AbstractCard; -import com.megacrit.cardcrawl.characters.AbstractPlayer; -import com.megacrit.cardcrawl.dungeons.AbstractDungeon; -import slimebound.actions.MakeTempCardInHandActionReduceCost; -import sneckomod.SneckoMod; - - -public class PureSneckoAction extends AbstractGameAction { - public AbstractPlayer p; - private boolean up; - - public PureSneckoAction(AbstractPlayer p, boolean upgraded) { - this.p = p; - this.up = upgraded; - - - } - - public void update() { - - int handSize = 0; - - for (AbstractCard c : p.hand.group) { - if (c.color != AbstractDungeon.player.getCardColor()) { - handSize++; - AbstractDungeon.actionManager.addToBottom(new ExhaustSpecificCardAction(c, p.hand, true)); - } - } - - for (int i = 0; i < handSize; i++) { - if (this.up) { - AbstractDungeon.actionManager.addToBottom(new MakeTempCardInHandActionReduceCost(SneckoMod.getOffClassCard())); - } else { - AbstractDungeon.actionManager.addToBottom(new MakeTempCardInHandAction(SneckoMod.getOffClassCard())); - } - - } - this.isDone = true; - } - -} - - - diff --git a/src/main/java/sneckomod/actions/RandomDamageAction.java b/src/main/java/sneckomod/actions/RandomDamageAction.java deleted file mode 100644 index 2da5adb4b..000000000 --- a/src/main/java/sneckomod/actions/RandomDamageAction.java +++ /dev/null @@ -1,105 +0,0 @@ -package sneckomod.actions; - -import com.badlogic.gdx.math.MathUtils; -import com.megacrit.cardcrawl.actions.AbstractGameAction; -import com.megacrit.cardcrawl.actions.utility.WaitAction; -import com.megacrit.cardcrawl.cards.DamageInfo; -import com.megacrit.cardcrawl.core.AbstractCreature; -import com.megacrit.cardcrawl.dungeons.AbstractDungeon; -import com.megacrit.cardcrawl.powers.AbstractPower; -import com.megacrit.cardcrawl.vfx.combat.FlashAtkImgEffect; -import sneckomod.cards.AbstractSneckoCard; - -public class RandomDamageAction extends AbstractGameAction { - - private static final float DURATION = 0.01F; - private DamageInfo info; - private int numTimes; - private int min; - private int max; - private int dmg; - - public RandomDamageAction(AbstractCreature target, int min, int max, int numTimes, AttackEffect fx) { - if (min > max) { - this.min = max; - this.max = min; - } else { - this.min = min; - this.max = max; - } - - if (this.max != this.min) { - dmg = AbstractSneckoCard.getRandomNum(min, max); - } else { - dmg = this.max; - } - this.info = new DamageInfo(AbstractDungeon.player, dmg); - this.target = target; - this.actionType = AbstractGameAction.ActionType.DAMAGE; - this.attackEffect = fx; - this.duration = DURATION; - this.numTimes = numTimes; - } - - public void update() { - if (this.target == null) { - this.isDone = true; - return; - } - if (AbstractDungeon.getCurrRoom().monsters.areMonstersBasicallyDead()) { - AbstractDungeon.actionManager.clearPostCombatActions(); - this.isDone = true; - return; - } - if (this.target.currentHealth > 0) { - AbstractDungeon.effectList.add( - new FlashAtkImgEffect( - this.target.hb.cX, this.target.hb.cY, this.attackEffect - ) - ); - - float tmp = info.output; - for (AbstractPower p : target.powers) { - tmp = p.atDamageReceive(tmp, info.type); - if (info.base != (int) tmp) { - info.isModified = true; - } - } - for (AbstractPower p : target.powers) { - tmp = p.atDamageFinalReceive(tmp, info.type); - if (info.base != (int) tmp) { - info.isModified = true; - } - } - info.output = MathUtils.floor(tmp); - if (info.output < 0) { - info.output = 0; - } - - this.target.damage(this.info); - /* - AbstractDungeon.actionManager.addToBottom( - new DamageAction( - this.target, - this.info, - this.attackEffect - ) - ); - */ - if ((this.numTimes > 1) && (!AbstractDungeon.getMonsters().areMonstersBasicallyDead())) { - this.numTimes--; - AbstractDungeon.actionManager.addToTop( - new RandomDamageAction( - AbstractDungeon.getMonsters().getRandomMonster(true), - min, - max, - this.numTimes, - attackEffect - ) - ); - } - AbstractDungeon.actionManager.addToTop(new WaitAction(0.2F)); - } - this.isDone = true; - } -} \ No newline at end of file diff --git a/src/main/java/sneckomod/actions/SerpentIdolAction.java b/src/main/java/sneckomod/actions/SerpentIdolAction.java index 886d77451..c7164edb9 100644 --- a/src/main/java/sneckomod/actions/SerpentIdolAction.java +++ b/src/main/java/sneckomod/actions/SerpentIdolAction.java @@ -1,5 +1,6 @@ package sneckomod.actions; +import basemod.BaseMod; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.cards.AbstractCard.CardRarity; @@ -17,66 +18,66 @@ public class SerpentIdolAction extends AbstractGameAction { private boolean retrieveCard = false; public SerpentIdolAction() { - this.actionType = ActionType.CARD_MANIPULATION;// 19 - this.duration = Settings.ACTION_DUR_FAST;// 20 - }// 22 + this.actionType = ActionType.CARD_MANIPULATION; + this.duration = Settings.ACTION_DUR_FAST; + } public void update() { - if (this.duration == Settings.ACTION_DUR_FAST) {// 26 - AbstractDungeon.cardRewardScreen.customCombatOpen(OffclassHelper.getXRandomOffclassCards(3), CardRewardScreen.TEXT[1], true);// 27 - this.tickDuration();// 28 + if (this.duration == Settings.ACTION_DUR_FAST) { + AbstractDungeon.cardRewardScreen.customCombatOpen(OffclassHelper.getXRandomOffclassCards(3), CardRewardScreen.TEXT[1], true); + this.tickDuration(); } else { - if (!this.retrieveCard) {// 32 - if (AbstractDungeon.cardRewardScreen.discoveryCard != null) {// 33 - AbstractCard disCard = AbstractDungeon.cardRewardScreen.discoveryCard.makeStatEquivalentCopy();// 34 - disCard.setCostForTurn(0);// 36 + if (!this.retrieveCard) { + if (AbstractDungeon.cardRewardScreen.discoveryCard != null) { + AbstractCard disCard = AbstractDungeon.cardRewardScreen.discoveryCard.makeStatEquivalentCopy(); + disCard.setCostForTurn(0); - disCard.current_x = -1000.0F * Settings.scale;// 38 - if (AbstractDungeon.player.hand.size() < 10) {// 39 - AbstractDungeon.effectList.add(new ShowCardAndAddToHandEffect(disCard, (float) Settings.WIDTH / 2.0F, (float) Settings.HEIGHT / 2.0F));// 40 + disCard.current_x = -1000.0F * Settings.scale; + if (AbstractDungeon.player.hand.size() < BaseMod.MAX_HAND_SIZE) { + AbstractDungeon.effectList.add(new ShowCardAndAddToHandEffect(disCard, (float) Settings.WIDTH / 2.0F, (float) Settings.HEIGHT / 2.0F)); } else { - AbstractDungeon.effectList.add(new ShowCardAndAddToDiscardEffect(disCard, (float) Settings.WIDTH / 2.0F, (float) Settings.HEIGHT / 2.0F));// 44 + AbstractDungeon.effectList.add(new ShowCardAndAddToDiscardEffect(disCard, (float) Settings.WIDTH / 2.0F, (float) Settings.HEIGHT / 2.0F)); } - AbstractDungeon.cardRewardScreen.discoveryCard = null;// 48 + AbstractDungeon.cardRewardScreen.discoveryCard = null; } - this.retrieveCard = true;// 50 + this.retrieveCard = true; } - this.tickDuration();// 53 + this.tickDuration(); } - }// 29 54 + } private ArrayList generateCardChoices() { - ArrayList derp = new ArrayList<>();// 57 + ArrayList derp = new ArrayList<>(); - while (derp.size() != 3) {// 60 - boolean dupe = false;// 61 - int roll = AbstractDungeon.cardRandomRng.random(99);// 64 + while (derp.size() != 3) { + boolean dupe = false; + int roll = AbstractDungeon.cardRandomRng.random(99); CardRarity cardRarity; - if (roll < 55) {// 65 - cardRarity = CardRarity.COMMON;// 66 - } else if (roll < 85) {// 67 - cardRarity = CardRarity.UNCOMMON;// 68 + if (roll < 55) { + cardRarity = CardRarity.COMMON; + } else if (roll < 85) { + cardRarity = CardRarity.UNCOMMON; } else { - cardRarity = CardRarity.RARE;// 70 + cardRarity = CardRarity.RARE; } AbstractCard tmp = SneckoMod.getOffClassCardMatchingPredicate(c -> c.rarity == cardRarity); for (AbstractCard c : derp) { - if (c.cardID.equals(tmp.cardID)) {// 76 - dupe = true;// 77 - break;// 78 + if (c.cardID.equals(tmp.cardID)) { + dupe = true; + break; } } - if (!dupe) {// 82 - derp.add(tmp.makeCopy());// 83 + if (!dupe) { + derp.add(tmp.makeCopy()); } } - return derp;// 87 + return derp; } -} +} \ No newline at end of file diff --git a/src/main/java/sneckomod/actions/SoulExchangeAction.java b/src/main/java/sneckomod/actions/SoulExchangeAction.java deleted file mode 100644 index 318badd28..000000000 --- a/src/main/java/sneckomod/actions/SoulExchangeAction.java +++ /dev/null @@ -1,70 +0,0 @@ -// -// Source code recreated from a .class file by IntelliJ IDEA -// (powered by Fernflower decompiler) -// - -package sneckomod.actions; - -import com.megacrit.cardcrawl.actions.AbstractGameAction; -import com.megacrit.cardcrawl.actions.common.ExhaustAction; -import com.megacrit.cardcrawl.actions.common.MakeTempCardInHandAction; -import com.megacrit.cardcrawl.cards.AbstractCard; -import com.megacrit.cardcrawl.characters.AbstractPlayer; -import com.megacrit.cardcrawl.core.CardCrawlGame; -import com.megacrit.cardcrawl.core.Settings; -import com.megacrit.cardcrawl.dungeons.AbstractDungeon; -import sneckomod.SneckoMod; - -public class SoulExchangeAction extends AbstractGameAction { - private static final String[] EXTENDED_DESCRIPTION = CardCrawlGame.languagePack.getCardStrings(SneckoMod.makeID("SoulExchange")).EXTENDED_DESCRIPTION; - private AbstractPlayer p; - - public SoulExchangeAction() { - this.actionType = ActionType.CARD_MANIPULATION;// 22 - this.p = AbstractDungeon.player;// 23 - this.duration = Settings.ACTION_DUR_FAST;// 24 - }// 26 - - public void update() { - if (this.duration == Settings.ACTION_DUR_FAST) {// 30 - - if (this.p.hand.group.size() > 1) {// 74 - AbstractDungeon.handCardSelectScreen.open(EXTENDED_DESCRIPTION[0], 1, false, false);// 75 - this.tickDuration();// 76 - return;// 77 - } - - if (this.p.hand.group.size() == 1) {// 78 - AbstractCard c = p.hand.getTopCard(); - p.hand.moveToExhaustPile(c); - this.isDone = true;// 82 - } - } - - if (!AbstractDungeon.handCardSelectScreen.wereCardsRetrieved) {// 87 - for (AbstractCard c : AbstractDungeon.handCardSelectScreen.selectedCards.group) { - p.hand.moveToExhaustPile(c); - addToBot(new ExhaustAction(p.hand.size(), true, false)); - for (int i = 0; i < p.hand.size(); i++) { - if (c.type != AbstractCard.CardType.STATUS && c.type != AbstractCard.CardType.CURSE) { - AbstractCard card = SneckoMod.getSpecificClassCard(c.color); - this.addToBot(new MakeTempCardInHandAction(card, true));// 34 - } else if (c.type == AbstractCard.CardType.STATUS) { - AbstractCard card = SneckoMod.getRandomStatus(); - this.addToBot(new MakeTempCardInHandAction(card, true));// 34 - } else { - AbstractCard card = AbstractDungeon.returnRandomCurse(); - this.addToBot(new MakeTempCardInHandAction(card, true));// 34 - } - } - - - } - - AbstractDungeon.handCardSelectScreen.wereCardsRetrieved = true;// 96 - AbstractDungeon.handCardSelectScreen.selectedCards.group.clear();// 97 - this.isDone = true;// 98 - } - this.tickDuration();// 101 - }// 102 -} diff --git a/src/main/java/sneckomod/actions/SuperSneckoSoulAction.java b/src/main/java/sneckomod/actions/SuperSneckoSoulAction.java new file mode 100644 index 000000000..094767a27 --- /dev/null +++ b/src/main/java/sneckomod/actions/SuperSneckoSoulAction.java @@ -0,0 +1,31 @@ +package sneckomod.actions; + +import basemod.BaseMod; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.DrawCardAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import sneckomod.actions.MuddleAction; + +public class SuperSneckoSoulAction extends AbstractGameAction { + + public SuperSneckoSoulAction() { + } + + @Override + public void update() { + if (AbstractDungeon.player.hand.size() < BaseMod.MAX_HAND_SIZE) { + addToBot(new DrawCardAction(1, new AbstractGameAction() { + @Override + public void update() { + if (AbstractDungeon.player.hand.size() > 0) { + AbstractCard drawnCard = AbstractDungeon.player.hand.getTopCard(); + addToTop(new MuddleAction(drawnCard)); + } + isDone = true; + } + })); + } + isDone = true; + } +} \ No newline at end of file diff --git a/src/main/java/sneckomod/cards/AbstractSneckoCard.java b/src/main/java/sneckomod/cards/AbstractSneckoCard.java index 5a3be685f..6421016f7 100644 --- a/src/main/java/sneckomod/cards/AbstractSneckoCard.java +++ b/src/main/java/sneckomod/cards/AbstractSneckoCard.java @@ -3,6 +3,7 @@ import basemod.abstracts.CustomCard; import basemod.helpers.TooltipInfo; import com.badlogic.gdx.graphics.Texture; +import com.evacipated.cardcrawl.mod.stslib.cards.interfaces.OnObtainCard; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.common.*; import com.megacrit.cardcrawl.cards.AbstractCard; @@ -10,13 +11,13 @@ import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; -import com.megacrit.cardcrawl.helpers.ImageMaster; import com.megacrit.cardcrawl.localization.CardStrings; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.AbstractPower; import com.megacrit.cardcrawl.powers.VulnerablePower; import com.megacrit.cardcrawl.powers.WeakPower; import com.megacrit.cardcrawl.unlock.UnlockTracker; +import hermit.cards.AbstractDynamicCard; import hermit.util.TextureLoader; import sneckomod.SneckoMod; import sneckomod.TheSnecko; @@ -25,27 +26,27 @@ import sneckomod.relics.LoadedDie; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; -import static sneckomod.SneckoMod.getModID; -import static sneckomod.SneckoMod.makeCardPath; +import static sneckomod.SneckoMod.*; -public abstract class AbstractSneckoCard extends CustomCard { - - protected String[] unknownUpgrade = CardCrawlGame.languagePack.getUIString(makeID("Unknown")).TEXT; - protected String[] unknownNames = CardCrawlGame.languagePack.getUIString(makeID("UnknownNames")).TEXT; +public abstract class AbstractSneckoCard extends CustomCard implements OnObtainCard { protected final CardStrings cardStrings; - public String betaArtPath; protected final String NAME; protected final String DESCRIPTION; - protected String UPGRADE_DESCRIPTION; protected final String[] EXTENDED_DESCRIPTION; + public String betaArtPath; public int silly; public int baseSilly; public boolean upgradedSilly; public boolean isSillyModified; + protected String[] unknownUpgrade = CardCrawlGame.languagePack.getUIString(makeID("Unknown")).TEXT; + protected String[] unknownNames = CardCrawlGame.languagePack.getUIString(makeID("UnknownNames")).TEXT; + protected String UPGRADE_DESCRIPTION; public AbstractSneckoCard(final String id, final int cost, final CardType type, final CardRarity rarity, final CardTarget target) { @@ -74,7 +75,7 @@ public AbstractSneckoCard(final String id, final int cost, final CardType type, initializeDescription(); } - public AbstractSneckoCard(final String id, final String img, final int cost, final CardType type, final CardRarity rarity, final CardTarget target, boolean IsClass) { + public AbstractSneckoCard(final String id, final String img, final int cost, final CardType type, final CardRarity rarity, final CardTarget target, boolean IsClass) { super(id, "ERROR", getCorrectPlaceholderImage(img), cost, "ERROR", type, TheSnecko.Enums.SNECKO_CYAN, rarity, target); cardStrings = CardCrawlGame.languagePack.getCardStrings("sneckomod:Unknown0Cost"); @@ -117,69 +118,77 @@ public static String getCorrectPlaceholderImage(String id) { return makeCardPath(id.replaceAll((getModID() + ":"), "")) + ".png"; } - public static int getRandomNum(int min, int max) { - int a, b, sum; - if (min > max) { - a = max; - b = min; - } else { - a = min; - b = max; - } - if (a != b) { - sum = AbstractDungeon.cardRandomRng.random(a, b); - } else { - sum = b; - } - return sum; - } - - - public static int getRandomNum(int a, int b, AbstractSneckoCard source) { - int min, max; - if (a > b) { - max = a; - min = b; - if (AbstractDungeon.player.hasRelic(LoadedDie.ID)) - min++; - } else if (b > a) { - max = b; - min = a; - if (AbstractDungeon.player.hasRelic(LoadedDie.ID)) - min++; - } else { - max = b; - min = a; - if (AbstractDungeon.player.hasRelic(LoadedDie.ID)) - max++; - } - - if (AbstractDungeon.player.hasPower(CheatPower.POWER_ID)) { - AbstractPower q = AbstractDungeon.player.getPower(CheatPower.POWER_ID); - q.flash(); - return max; - } - if (AbstractDungeon.player.hasRelic(D8.ID)) { - //SlimeboundMod.logger.info("min/max check passed D8 relic check"); - if (source != null) { - //SlimeboundMod.logger.info("min/max check passed card source check"); - D8 d8relic = (D8) AbstractDungeon.player.getRelic(D8.ID); - if (d8relic.card.uuid == source.uuid) - //SlimeboundMod.logger.info("min/max check passed card source = bottled card check"); - return max; - } - } - - if (min != max) { - return AbstractDungeon.cardRandomRng.random(min, max); - } - return max; - } +// public static int getRandomNum(int min, int max) { +// int a, b, sum; +// if (min > max) { +// a = max; +// b = min; +// } else { +// a = min; +// b = max; +// } +// if (a != b) { +// sum = AbstractDungeon.cardRandomRng.random(a, b); +// } else { +// sum = b; +// } +// return sum; +// } + + +// public static int getRandomNum(int a, int b, AbstractSneckoCard source) { +// int min, max; +// if (a > b) { +// max = a; +// min = b; +// if (AbstractDungeon.player.hasRelic(LoadedDie.ID)) +// min++; +// } else if (b > a) { +// max = b; +// min = a; +// if (AbstractDungeon.player.hasRelic(LoadedDie.ID)) +// min++; +// } else { +// max = b; +// min = a; +// if (AbstractDungeon.player.hasRelic(LoadedDie.ID)) +// max++; +// } +// +// if (AbstractDungeon.player.hasPower(CheatPower.POWER_ID)) { +// AbstractPower q = AbstractDungeon.player.getPower(CheatPower.POWER_ID); +// q.flash(); +// return max; +// } +// if (AbstractDungeon.player.hasRelic(D8.ID)) { +// //SlimeboundMod.logger.info("min/max check passed D8 relic check"); +// if (source != null) { +// //SlimeboundMod.logger.info("min/max check passed card source check"); +// D8 d8relic = (D8) AbstractDungeon.player.getRelic(D8.ID); +// if (d8relic.card.uuid == source.uuid) +// //SlimeboundMod.logger.info("min/max check passed card source = bottled card check"); +// return max; +// } +// } +// +// if (min != max) { +// return AbstractDungeon.cardRandomRng.random(min, max); +// } +// return max; +// } public static String makeID(String name) { return getModID() + ":" + name; } + public static String getCharList() { + StringBuilder s = new StringBuilder(); + for (CardColor c : SneckoMod.validColors) { + s.append(" NL ").append(SneckoMod.getClassFromColor(c)); + } + return s.toString(); + } + protected void atb(AbstractGameAction action) { addToBot(action); } @@ -259,6 +268,8 @@ public void displayUpgrades() { } } + public void onObtainCard() { + } void upgradeSilly(int amount) { baseSilly += amount; @@ -266,14 +277,6 @@ void upgradeSilly(int amount) { upgradedSilly = true; } - public static String getCharList() { - StringBuilder s = new StringBuilder(); - for (CardColor c : SneckoMod.validColors) { - s.append(" NL ").append(SneckoMod.getClassFromColor(c)); - } - return s.toString(); - } - @Override public List getCustomTooltips() { List tips = new ArrayList<>(); @@ -281,8 +284,7 @@ public List getCustomTooltips() { if (this.rawDescription.contains(name)) { if (SneckoMod.validColors.size() > 3) { tips.add(new TooltipInfo(unknownUpgrade[0], unknownUpgrade[5])); - } - else if (SneckoMod.validColors.isEmpty()) { + } else if (SneckoMod.validColors.isEmpty()) { tips.add(new TooltipInfo(unknownUpgrade[0], unknownUpgrade[4])); } else { tips.add(new TooltipInfo(unknownUpgrade[0], unknownUpgrade[2] + unknownUpgrade[3] + getCharList())); @@ -292,6 +294,84 @@ else if (SneckoMod.validColors.isEmpty()) { return tips; } + + public boolean isOverflowActive(AbstractCard source) { + boolean OVERFLOW = false; + + if (source.hasTag(SneckoMod.OVERFLOW)) { + if (AbstractDungeon.player.hand.size() > 5 || (AbstractDungeon.player.hasPower(CheatPower.POWER_ID))) { + OVERFLOW = true; + } + + if (source.hasTag(NO_TYPHOON)) { + return false; + } + + if (AbstractDungeon.player.hasRelic(D8.ID)) { + D8 d8Relic = (D8) AbstractDungeon.player.getRelic(D8.ID); + if (d8Relic != null && d8Relic.card != null) { + if (d8Relic.card.uuid.equals(source.uuid)) { + OVERFLOW = true; + } + } + } + } + + return OVERFLOW; + } + + + public void atBattleStart() { +// overrides moment + } + + + public int findSuitinHand() { + Set uniqueColors = new HashSet<>(); // check without status, curse, collectible, colorless common + + for (AbstractCard card : AbstractDungeon.player.hand.group) { + if ( + (card.color == AbstractCard.CardColor.COLORLESS && card.rarity == AbstractCard.CardRarity.SPECIAL)) { + continue; + } + + uniqueColors.add(card.color); + } + + return uniqueColors.size(); // number colors in hand, hopefully + } + + public int getUniqueSuitsPlayedThisTurn() { + Set uniqueColors = new HashSet<>(); // another one of these + + for (AbstractCard card : AbstractDungeon.actionManager.cardsPlayedThisTurn) { + if (( + !(card.color == AbstractCard.CardColor.COLORLESS && card.rarity == AbstractCard.CardRarity.SPECIAL))) { + + uniqueColors.add(card.color); + } + } + + return uniqueColors.size(); // number colors played per turn hopefully + } + + public void onMuddledSword() { + // help + } + + @Override + public void triggerOnGlowCheck() { // glowing overflow cards that hopefully work with the D8 + if (this.hasTag(SneckoMod.OVERFLOW)) { + if (isOverflowActive(this)) { + this.glowColor = AbstractDynamicCard.GOLD_BORDER_GLOW_COLOR.cpy(); + } else { + this.glowColor = AbstractDynamicCard.BLUE_BORDER_GLOW_COLOR.cpy(); + } + } else { + this.glowColor = AbstractDynamicCard.BLUE_BORDER_GLOW_COLOR.cpy(); + } + } + @Override protected Texture getPortraitImage() { if (Settings.PLAYTESTER_ART_MODE || UnlockTracker.betaCardPref.getBoolean(this.cardID, false)) { diff --git a/src/main/java/sneckomod/cards/AceOfWands.java b/src/main/java/sneckomod/cards/AceOfWands.java new file mode 100644 index 000000000..070279285 --- /dev/null +++ b/src/main/java/sneckomod/cards/AceOfWands.java @@ -0,0 +1,88 @@ +package sneckomod.cards; + +import automaton.cards.Undervolt; +import collector.cards.Billow; +import collector.cards.CursedWail; +import collector.cards.DarkLordForm; +import collector.cards.IllTakeThat; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.green.Choke; +import com.megacrit.cardcrawl.cards.green.PiercingWail; +import com.megacrit.cardcrawl.cards.purple.TalkToTheHand; +import com.megacrit.cardcrawl.cards.red.Disarm; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.relics.AbstractRelic; +import com.megacrit.cardcrawl.relics.FrozenEgg2; +import com.megacrit.cardcrawl.relics.MoltenEgg2; +import com.megacrit.cardcrawl.relics.ToxicEgg2; +import hermit.cards.HighCaliber; +import slimebound.cards.TongueLash; +import sneckomod.SneckoMod; +import sneckomod.powers.AceOfWandsPower; +import sneckomod.relics.UnknownEgg; + +import java.util.ArrayList; + +public class AceOfWands extends AbstractSneckoCard { + + public final static String ID = makeID("AceOfWands"); + + //stupid intellij stuff POWER, SELF, RARE + + private static int SOFTLOCK = 0; + //Queen of Pentacles + + public AceOfWands() { + super(ID, 3, CardType.POWER, CardRarity.RARE, CardTarget.SELF); + baseMagicNumber = magicNumber = 4; + isEthereal = true; + SneckoMod.loadJokeCardImage(this, "AceOfWands.png"); + } + + public static boolean cardListDuplicate(ArrayList cardsList, AbstractCard card) { + for (AbstractCard alreadyHave : cardsList) { + if (alreadyHave.cardID.equals(card.cardID) && (SOFTLOCK < 100)) { + SOFTLOCK++; + return true; + } + } + if (SOFTLOCK >= 100) { + System.out.println("SOFTLOCK DETECTED!!!"); + } + SOFTLOCK = 0; + return false; + } + + public void use(AbstractPlayer p, AbstractMonster m) { + applyToSelf(new AceOfWandsPower(this.magicNumber)); + } + + @Override + public void onObtainCard() { + ArrayList cardsToReward = new ArrayList<>(); + while (cardsToReward.size() < 3) { + AbstractCard newCard = SneckoMod.getOffClassCardMatchingPredicateDebuff(c -> (!c.hasTag(SneckoMod.BANNEDFORSNECKO))); + for (AbstractRelic r : AbstractDungeon.player.relics) { + r.onPreviewObtainCard(newCard); + } + + if (!cardListDuplicate(cardsToReward, newCard)) { + cardsToReward.add(newCard.makeCopy()); + } + } + + SneckoMod.addGift(cardsToReward); + ; + } + + public void upgrade() { + if (!upgraded) { + upgradeName(); + isEthereal = false; + rawDescription = UPGRADE_DESCRIPTION; + initializeDescription(); + } + } +} diff --git a/src/main/java/sneckomod/cards/Amass.java b/src/main/java/sneckomod/cards/Amass.java new file mode 100644 index 000000000..cc3234f67 --- /dev/null +++ b/src/main/java/sneckomod/cards/Amass.java @@ -0,0 +1,70 @@ +package sneckomod.cards; + +import com.megacrit.cardcrawl.actions.common.GainBlockAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; + +public class Amass extends AbstractSneckoCard { + + public static final String ID = SneckoMod.makeID("Amass"); + private static final int COST = 3; + private static final int BASE_BLOCK = 12; + private static final int MAGIC = 1; + private static final int UPGRADE_MAGIC = 1; + + public Amass() { + super(ID, COST, CardType.SKILL, CardRarity.COMMON, CardTarget.SELF); + SneckoMod.loadJokeCardImage(this, "Amass.png"); + baseMagicNumber = magicNumber = MAGIC; + baseBlock = BASE_BLOCK; + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + this.applyPowers(); + AbstractDungeon.actionManager.addToBottom(new GainBlockAction(p, p, this.block)); + } + + @Override + public void applyPowers() { + int realBaseBlock = this.baseBlock; + + int totalEnergyCost = 0; + for (AbstractCard card : AbstractDungeon.player.hand.group) { + totalEnergyCost += card.costForTurn; + } + + this.baseBlock += totalEnergyCost * this.magicNumber; + super.applyPowers(); + + this.baseBlock = realBaseBlock; + this.isBlockModified = this.block != this.baseBlock; + } + + @Override + public void calculateCardDamage(AbstractMonster mo) { + int realBaseBlock = this.baseBlock; + + int totalEnergyCost = 0; + for (AbstractCard card : AbstractDungeon.player.hand.group) { + totalEnergyCost += card.costForTurn; + } + + this.baseBlock += totalEnergyCost * this.magicNumber; + super.calculateCardDamage(mo); + + this.baseBlock = realBaseBlock; + this.isBlockModified = this.block != this.baseBlock; + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeBlock(4); + } + } +} diff --git a/src/main/java/sneckomod/cards/Behold.java b/src/main/java/sneckomod/cards/Behold.java new file mode 100644 index 000000000..9e4bdd3fd --- /dev/null +++ b/src/main/java/sneckomod/cards/Behold.java @@ -0,0 +1,43 @@ +package sneckomod.cards; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.DamageAction; +import com.megacrit.cardcrawl.actions.common.MakeTempCardInHandAction; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.cards.tempCards.Shiv; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; + +public class Behold extends AbstractSneckoCard { + + public static final String ID = SneckoMod.makeID("Behold"); + + private static final int BASE_DAMAGE = 6; + private static final int EXTRA_DAMAGE = 2; + + public Behold() { + super(ID, 1, CardType.ATTACK, CardRarity.COMMON, CardTarget.ENEMY); + baseDamage = BASE_DAMAGE; + baseMagicNumber = magicNumber = EXTRA_DAMAGE; + this.tags.add(SneckoMod.OVERFLOW); + SneckoMod.loadJokeCardImage(this, "Behold.png"); + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + this.addToBot(new DamageAction(m, new DamageInfo(p, this.damage, this.damageTypeForTurn), AbstractGameAction.AttackEffect.BLUNT_HEAVY)); + if (isOverflowActive(this)) { + AbstractDungeon.actionManager.addToBottom(new MakeTempCardInHandAction(new Shiv(), magicNumber)); + } + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeDamage(3); + } + } +} diff --git a/src/main/java/sneckomod/cards/Belittle.java b/src/main/java/sneckomod/cards/Belittle.java new file mode 100644 index 000000000..db3511e47 --- /dev/null +++ b/src/main/java/sneckomod/cards/Belittle.java @@ -0,0 +1,100 @@ +package sneckomod.cards; + +import automaton.cards.Undervolt; +import collector.cards.Billow; +import collector.cards.CursedWail; +import collector.cards.IllTakeThat; +import com.evacipated.cardcrawl.mod.stslib.cards.interfaces.OnObtainCard; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.actions.common.LoseHPAction; +import com.megacrit.cardcrawl.actions.utility.SFXAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.green.Choke; +import com.megacrit.cardcrawl.cards.green.PiercingWail; +import com.megacrit.cardcrawl.cards.purple.TalkToTheHand; +import com.megacrit.cardcrawl.cards.red.Disarm; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.AbstractPower; +import com.megacrit.cardcrawl.relics.AbstractRelic; +import com.megacrit.cardcrawl.relics.FrozenEgg2; +import com.megacrit.cardcrawl.relics.MoltenEgg2; +import com.megacrit.cardcrawl.relics.ToxicEgg2; +import com.megacrit.cardcrawl.vfx.combat.IntimidateEffect; +import hermit.cards.HighCaliber; +import slimebound.cards.TongueLash; +import sneckomod.SneckoMod; +import sneckomod.relics.UnknownEgg; +import sneckomod.util.ArchetypeHelper; + +import java.util.ArrayList; + +public class Belittle extends AbstractSneckoCard implements OnObtainCard { + + public static final String ID = makeID("Belittle"); + + // Card constants + private static final int MAGIC = 9; + private static final int UPGRADE_MAGIC = 3; + + public Belittle() { + super(ID, 1, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.ENEMY); + baseMagicNumber = magicNumber = MAGIC; + SneckoMod.loadJokeCardImage(this, "Belittle.png"); + } + + public static boolean cardListDuplicate(ArrayList cardsList, AbstractCard card) { + for (AbstractCard alreadyHave : cardsList) { + if (alreadyHave.cardID.equals(card.cardID)) { + return true; + } + } + return false; + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + atb(new AbstractGameAction() { + @Override + public void update() { + AbstractDungeon.actionManager.addToBottom(new SFXAction("MONSTER_SNECKO_GLARE")); + AbstractDungeon.actionManager.addToBottom(new VFXAction(p, new IntimidateEffect(p.hb.cX, p.hb.cY), 0.5F)); + isDone = true; + for (AbstractPower q : m.powers) { + if (q.type == AbstractPower.PowerType.DEBUFF) { + atb(new LoseHPAction(m, p, magicNumber, AttackEffect.BLUNT_LIGHT)); + } + } + } + }); + } + + @Override + public void onObtainCard() { + ArrayList cardsToReward = new ArrayList<>(); + while (cardsToReward.size() < 3) { + AbstractCard newCard = SneckoMod.getOffClassCardMatchingPredicateDebuff(c -> (c.rarity == AbstractCard.CardRarity.UNCOMMON)); + + for (AbstractRelic r : AbstractDungeon.player.relics) { + r.onPreviewObtainCard(newCard); + } + + if (!cardListDuplicate(cardsToReward, newCard)) { + cardsToReward.add(newCard.makeCopy()); + } + } + + SneckoMod.addGift(cardsToReward); + ; + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeMagicNumber(UPGRADE_MAGIC); + } + } +} diff --git a/src/main/java/sneckomod/cards/BeyondArmor.java b/src/main/java/sneckomod/cards/BeyondArmor.java new file mode 100644 index 000000000..0d0556203 --- /dev/null +++ b/src/main/java/sneckomod/cards/BeyondArmor.java @@ -0,0 +1,87 @@ +package sneckomod.cards; + +import basemod.BaseMod; +import com.evacipated.cardcrawl.mod.stslib.actions.common.FetchAction; +import com.megacrit.cardcrawl.actions.common.DrawCardAction; +import com.megacrit.cardcrawl.actions.common.GainBlockAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.CardGroup; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.relics.AbstractRelic; +import com.megacrit.cardcrawl.relics.FrozenEgg2; +import com.megacrit.cardcrawl.relics.MoltenEgg2; +import com.megacrit.cardcrawl.relics.ToxicEgg2; +import hermit.relics.Spyglass; +import hermit.util.Wiz; +import sneckomod.SneckoMod; +import sneckomod.actions.DrawOffclassAction; +import sneckomod.relics.UnknownEgg; + +import java.util.ArrayList; +import java.util.stream.Collectors; + +public class BeyondArmor extends AbstractSneckoCard { + + public final static String ID = makeID("BeyondArmor"); + + private static final int BLOCK = 5; + private static final int UPG_BLOCK = 3; + private static final int MAGIC = 2; + private static int SOFTLOCK = 0; + + public BeyondArmor() { + super(ID, 1, CardType.SKILL, CardRarity.COMMON, CardTarget.SELF); + baseBlock = BLOCK; + magicNumber = baseMagicNumber = MAGIC; + SneckoMod.loadJokeCardImage(this, "BeyondArmor.png"); + } + + public static boolean cardListDuplicate(ArrayList cardsList, AbstractCard card) { + for (AbstractCard alreadyHave : cardsList) { + if (alreadyHave.cardID.equals(card.cardID) && (SOFTLOCK < 100)) { + SOFTLOCK++; + return true; + } + } + if (SOFTLOCK >= 100) { + System.out.println("SOFTLOCK DETECTED!!!"); + } + return false; + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + + addToBot(new GainBlockAction(p, p, this.block)); + this.addToBot(new DrawOffclassAction(magicNumber)); + } + + @Override + public void onObtainCard() { + ArrayList cardsToReward = new ArrayList<>(); + while (cardsToReward.size() < 3) { + AbstractCard newCard = SneckoMod.getOffClassCardMatchingPredicate(c -> c.rarity == AbstractCard.CardRarity.COMMON); + + for (AbstractRelic r : AbstractDungeon.player.relics) { + r.onPreviewObtainCard(newCard); + } + + if (!cardListDuplicate(cardsToReward, newCard)) { + SOFTLOCK = 0; + cardsToReward.add(newCard.makeCopy()); + } + } + SneckoMod.addGift(cardsToReward); + ; + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeBlock(UPG_BLOCK); + } + } +} diff --git a/src/main/java/sneckomod/cards/BlunderGuard.java b/src/main/java/sneckomod/cards/BlunderGuard.java new file mode 100644 index 000000000..82be8a343 --- /dev/null +++ b/src/main/java/sneckomod/cards/BlunderGuard.java @@ -0,0 +1,40 @@ +package sneckomod.cards; + +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; +import sneckomod.powers.BigGunsBlockPower; +import sneckomod.powers.BigGunsStrengthPower; + +public class BlunderGuard extends AbstractSneckoCard { + + public final static String ID = makeID("BlunderGuard"); + + //stupid intellij stuff POWER, SELF, RARE + private static final int BASE_SILLY = 6; + private static final int UPG_SILLY = 2; + private static final int MAGIC = 2; + private static final int UPGRADE_MAGIC = 1; + + public BlunderGuard() { + super(ID, 0, CardType.POWER, CardRarity.UNCOMMON, CardTarget.SELF); + baseMagicNumber = magicNumber = MAGIC; + baseSilly = silly = 6; + SneckoMod.loadJokeCardImage(this, "BlunderGuard.png"); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + applyToSelf(new BigGunsBlockPower(this.silly)); + applyToSelf(new BigGunsStrengthPower(this.magicNumber)); + } + + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeMagicNumber(UPGRADE_MAGIC); + upgradeSilly(UPG_SILLY); + rawDescription = UPGRADE_DESCRIPTION; + initializeDescription(); + } + } +} \ No newline at end of file diff --git a/src/main/java/sneckomod/cards/Blunderbus.java b/src/main/java/sneckomod/cards/Blunderbus.java new file mode 100644 index 000000000..9ead30c24 --- /dev/null +++ b/src/main/java/sneckomod/cards/Blunderbus.java @@ -0,0 +1,341 @@ +package sneckomod.cards; + +import basemod.ReflectionHacks; +import collector.util.Wiz; +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.graphics.g2d.TextureAtlas; +import com.badlogic.gdx.math.MathUtils; +import com.esotericsoftware.spine.Bone; +import com.esotericsoftware.spine.Skeleton; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.DamageAllEnemiesAction; +import com.megacrit.cardcrawl.actions.utility.SFXAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.helpers.ImageMaster; +import com.megacrit.cardcrawl.helpers.ScreenShake; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.unlock.UnlockTracker; +import com.megacrit.cardcrawl.vfx.AbstractGameEffect; +import com.megacrit.cardcrawl.vfx.combat.FlashAtkImgEffect; +import com.megacrit.cardcrawl.vfx.combat.VerticalImpactEffect; +import downfall.util.TextureLoader; +import hermit.patches.EnumPatch; +import sneckomod.SneckoMod; + +public class Blunderbus extends AbstractSneckoCard { + + public final static String ID = SneckoMod.makeID("Blunderbus"); + + private static final int DAMAGE = 8; + private static final int UPGRADE_DAMAGE = 3; + private static final int BASE_HITS = 1; + + public Blunderbus() { + super(ID, 1, CardType.ATTACK, CardRarity.RARE, CardTarget.ALL_ENEMY); + baseDamage = DAMAGE; + SneckoMod.loadJokeCardImage(this, "Blunderbus.png"); + isMultiDamage = true; + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + Wiz.actB(() -> { + int additionalHits = 0; + if (this.costForTurn >= 3) + additionalHits++; + for (AbstractCard card : AbstractDungeon.player.hand.group) + if (card.costForTurn >= 3 && card != this) + additionalHits++; + + AbstractMonster mo = Wiz.getEnemies().get(0); + if (mo == null) return; + for (int i = 0; i < BASE_HITS + additionalHits; i++) { + if (Settings.PLAYTESTER_ART_MODE || UnlockTracker.betaCardPref.getBoolean(cardID, false)) { + Wiz.forAllMonstersLiving(mo2 -> Wiz.vfxTop(new CreatureFlyEffect(mo2))); + att(new DamageAllEnemiesAction(p, multiDamage, damageTypeForTurn, AbstractGameAction.AttackEffect.BLUNT_HEAVY, true)); + Wiz.vfxTop(new VerticalImpactEffect(mo.hb.cX + mo.hb.width / 4.0F, mo.hb.cY - mo.hb.height / 4.0F), BlunderbusEffect.STALL_DURATION); + Wiz.vfxTop(new BlunderbusEffect(mo), BlunderbusEffect.DURATION - 0.3f); + att(new SFXAction(SneckoMod.makeID("BUS"))); + } else { + for (int j = 0; j < 3; j++) { + Wiz.vfxTop(new FlashAtkImgEffect(mo.hb.cX + MathUtils.random(-100f, 100f) * Settings.scale, mo.hb.cY + MathUtils.random(-100f, 100f) * Settings.scale, AbstractGameAction.AttackEffect.BLUNT_LIGHT, true), 0.02f); + att(new SFXAction("BLUNT_FAST", 0.02f)); + } + att(new DamageAllEnemiesAction(p, multiDamage, damageTypeForTurn, AbstractGameAction.AttackEffect.BLUNT_HEAVY, true)); + Wiz.vfxTop(new BlunderbussEffect(mo), BlunderbussEffect.DURATION / 2f - 0.05f); + } + } + }); + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeDamage(UPGRADE_DAMAGE); + } + } + + private static class BlunderbussEffect extends AbstractGameEffect { + private static float DURATION = 0.8f; + private static float JUMP_HEIGHT = 250f * Settings.scale; + + private boolean fired; + private AbstractMonster target; + + public BlunderbussEffect(AbstractMonster target) { + this.target = target; + duration = DURATION; + } + + public void update() { + duration -= Gdx.graphics.getDeltaTime(); + float progress = 1f - duration / DURATION; + if (duration <= 0f) { + AbstractDungeon.player.animY = 0f; + isDone = true; + return; + } + AbstractDungeon.player.animY = (float)Math.sin(progress * Math.PI) * JUMP_HEIGHT; + if (progress >= 0.5f && !fired) { + fired = true; + CardCrawlGame.sound.play(SneckoMod.makeID("SHOTGUN")); + float x = AbstractDungeon.player.hb.x + AbstractDungeon.player.hb.width; + float y = AbstractDungeon.player.animY + AbstractDungeon.player.drawY; + if (target != null) + for (int i = 0; i < 10; i++) + AbstractDungeon.effectsQueue.add(new ShotgunPelletEffect(x, y, target.hb.cY)); + for (int i = 0; i < 15; i++) + AbstractDungeon.effectsQueue.add(new ShotgunSmokeEffect(x, y)); + } + } + + public void render(SpriteBatch sb) {} + public void dispose() {} + + + private static class ShotgunPelletEffect extends AbstractGameEffect { + private static TextureAtlas.AtlasRegion IMG = new TextureAtlas.AtlasRegion(TextureLoader.getTexture(SneckoMod.makeImagePath("vfx/shotgunpellet.png")), 0, 0, 64, 64); + private static final float DURATION = 0.2f; + + private float x, y, startX, startY, endX, endY; + + public ShotgunPelletEffect(float startX, float startY, float endY) { + duration = DURATION; + color = Color.WHITE.cpy(); + this.startX = startX; + this.startY = startY; + x = startX; + y = startY; + this.endX = Settings.WIDTH + MathUtils.random(128f, 500f) * Settings.scale; + this.endY = endY + MathUtils.random(-400f, 400f) * Settings.scale; + } + + public void update() { + duration -= Gdx.graphics.getDeltaTime(); + float progress = 1f - duration / DURATION; + x = startX + (endX - startX) * progress; + y = startY + (endY - startY) * progress; + if (duration <= 0f) + isDone = true; + } + + public void render(SpriteBatch sb) { + sb.setColor(color); + sb.draw(IMG, x - 32f, y - 32f, 64f * scale, 64f * scale); + } + + public void dispose() {} + } + + private static class ShotgunSmokeEffect extends AbstractGameEffect { + private static final float DURATION = 0.45f; + private static final float OPACITY = 0.9f; + private static final float FINAL_SCALE = 0.3f; + private float x, y; + private float xVel = MathUtils.random(0f, 200f) * Settings.scale; + private float yVel = MathUtils.random(-100f, 100f) * Settings.scale; + private float rotationalVel = MathUtils.random(-50f, 50f); + private float startScale; + private boolean shook = false; + private TextureAtlas.AtlasRegion img; + + public ShotgunSmokeEffect(float x, float y) { + this.x = x; + this.y = y; + duration = DURATION; + rotation = MathUtils.random(0f, 360f); + scale *= MathUtils.random(0.75f, 1.25f); + startScale = scale; + color = new Color(0.95f, 0.95f, 0.95f, OPACITY); + + img = MathUtils.randomBoolean(0.5f) ? ImageMaster.EXHAUST_L : ImageMaster.EXHAUST_S; + } + + public void update() { + if (!shook) { + shook = true; + CardCrawlGame.screenShake.shake(ScreenShake.ShakeIntensity.LOW, ScreenShake.ShakeDur.SHORT, false); + } + color.a = (duration / DURATION) * OPACITY; + scale = startScale * (FINAL_SCALE + (duration / DURATION) * (1f - FINAL_SCALE)); + rotation += rotationalVel * Gdx.graphics.getDeltaTime(); + x += xVel * Gdx.graphics.getDeltaTime(); + y += yVel * Gdx.graphics.getDeltaTime(); + duration -= Gdx.graphics.getDeltaTime(); + if (duration < 0f) + isDone = true; + } + + public void render(SpriteBatch sb) { + sb.setColor(color); + sb.draw(img, x, y, img.packedWidth / 2.0F, img.packedHeight / 2.0F, img.packedWidth, img.packedHeight, scale, scale, rotation); + } + + public void dispose() {} + } + } + + private static class BlunderbusEffect extends AbstractGameEffect { + private static TextureAtlas.AtlasRegion IMG = new TextureAtlas.AtlasRegion(TextureLoader.getTexture(SneckoMod.makeImagePath("vfx/bus.png")), 0, 0, 1000, 400); + private static float DURATION = 0.6f, + STALL_DURATION = 0.2f; + + private float x = -500 * scale, y = AbstractDungeon.floorY + 100f * scale, targetX, timeStalled; + + public BlunderbusEffect(AbstractMonster target) { + targetX = target.hb.cX - 400f * scale; + duration = DURATION; + } + + public void update() { + if (duration > 0f) + duration = Math.max(duration - Gdx.graphics.getDeltaTime(), 0f); + else if (duration == 0f) { + timeStalled += Gdx.graphics.getDeltaTime(); + if (timeStalled > STALL_DURATION) + duration = -0.01f; + } else + duration -= Gdx.graphics.getDeltaTime(); + + x = targetX + (-400f * scale - targetX) * (duration / DURATION); + isDone = x > Settings.WIDTH + 600f * scale; + } + + public void render(SpriteBatch sb) { + sb.setColor(Color.WHITE); + sb.draw(IMG, x - 500f, y - 200f, 500, 200, 1000, 400, scale, scale, rotation); + } + + public void dispose() {} + } + + public static class CreatureFlyEffect extends AbstractGameEffect { + private static final float ACCELERATION = -2000f; + private static final float SMOKE_GAP = 0.05f; + public AbstractCreature target; + private Bone rootBone; + private float initialRotation; + private float y = 0f; + private float vel = MathUtils.random(1200f, 1800f); + private float wholeDuration = vel * 2f / -ACCELERATION; + private float timer = 0f; + private float smokeTimer = SMOKE_GAP; + + public CreatureFlyEffect(AbstractCreature target) { + this.target = target; + if (target != null) { + Skeleton skeleton = ReflectionHacks.getPrivate(target, AbstractCreature.class, "skeleton"); + if (skeleton != null) { + rootBone = skeleton.getRootBone(); + } + } + } + + public void update() { + if (target == null) { + isDone = true; + return; + } + for (AbstractGameEffect effect : AbstractDungeon.effectList) { + if (effect == this) + break; + else if (effect instanceof CreatureFlyEffect && ((CreatureFlyEffect)effect).target == target) + return; + } + if (timer == 0f && rootBone != null) + initialRotation = rootBone.getRotation(); + while (smokeTimer >= SMOKE_GAP) { + smokeTimer -= SMOKE_GAP; + AbstractDungeon.effectsQueue.add(new RumbleSmokeEffect(target.hb.cX, target.animY + target.drawY)); + } + y += vel * Gdx.graphics.getDeltaTime() * Settings.scale; + vel += ACCELERATION * Gdx.graphics.getDeltaTime(); + timer += Gdx.graphics.getDeltaTime(); + smokeTimer += Gdx.graphics.getDeltaTime(); + if (y <= 0f) { + target.animY = 0; + if (rootBone != null) + rootBone.setRotation(initialRotation); + isDone = true; + } else { + target.animY = y; + if (rootBone != null) + rootBone.setRotation(initialRotation + Math.min(timer / wholeDuration, 1f) * 360f); + } + } + + public void render(SpriteBatch sb) {} + public void dispose() {} + + private static class RumbleSmokeEffect extends AbstractGameEffect { + private static float DURATION = 0.6f; + private static float OPACITY = 0.5f; + private static float FINAL_SCALE = 0.3f; + private float x, y; + private float rotationalVel = MathUtils.random(-50f, 50f); + private float startScale; + private boolean shook = false; + private TextureAtlas.AtlasRegion img; + + public RumbleSmokeEffect(float x, float y) { + this.x = x; + this.y = y; + renderBehind = true; + duration = DURATION; + rotation = MathUtils.random(0f, 360f); + scale *= MathUtils.random(0.5f, 1.5f); + startScale = scale; + color = new Color(0.7f, 0.7f, 0.7f, OPACITY); + img = MathUtils.randomBoolean(0.5f) ? ImageMaster.EXHAUST_L : ImageMaster.EXHAUST_S; + } + + public void update() { + if (!shook) { + shook = true; + CardCrawlGame.screenShake.shake(ScreenShake.ShakeIntensity.LOW, ScreenShake.ShakeDur.SHORT, false); + } + color.a = (duration / DURATION) * OPACITY; + scale = startScale * (FINAL_SCALE + (duration / DURATION) * (1f - FINAL_SCALE)); + rotation += rotationalVel * Gdx.graphics.getDeltaTime(); + duration -= Gdx.graphics.getDeltaTime(); + if (duration < 0f) + isDone = true; + } + + public void render(SpriteBatch sb) { + sb.setColor(color); + sb.draw(img, x, y, img.packedWidth / 2.0F, img.packedHeight / 2.0F, img.packedWidth, img.packedHeight, scale, scale, rotation); + } + + public void dispose() {} + } + } +} diff --git a/src/main/java/sneckomod/cards/CheapStock.java b/src/main/java/sneckomod/cards/CheapStock.java index 87d430c4a..5c57e79ca 100644 --- a/src/main/java/sneckomod/cards/CheapStock.java +++ b/src/main/java/sneckomod/cards/CheapStock.java @@ -2,28 +2,29 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; -import sneckomod.powers.CheapStockPower; import sneckomod.SneckoMod; +import sneckomod.powers.CheapStockPower; public class CheapStock extends AbstractSneckoCard { public final static String ID = makeID("CheapStock"); - //stupid intellij stuff POWER, SELF, UNCOMMON - public CheapStock() { - super(ID, 2, CardType.POWER, CardRarity.UNCOMMON, CardTarget.SELF); + super(ID, 1, CardType.POWER, CardRarity.UNCOMMON, CardTarget.SELF); + baseMagicNumber = magicNumber = 1; SneckoMod.loadJokeCardImage(this, "CheapStock.png"); } public void use(AbstractPlayer p, AbstractMonster m) { - applyToSelf(new CheapStockPower(1)); + applyToSelf(new CheapStockPower(this.magicNumber)); } public void upgrade() { if (!upgraded) { upgradeName(); - upgradeBaseCost(1); + upgradeMagicNumber(1); + rawDescription = UPGRADE_DESCRIPTION; + initializeDescription(); } } } \ No newline at end of file diff --git a/src/main/java/sneckomod/cards/Cheat.java b/src/main/java/sneckomod/cards/Cheat.java index f267fcb05..157e5dfed 100644 --- a/src/main/java/sneckomod/cards/Cheat.java +++ b/src/main/java/sneckomod/cards/Cheat.java @@ -2,9 +2,12 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import downfall.util.CardIgnore; import sneckomod.SneckoMod; import sneckomod.powers.CheatPower; +@Deprecated +@CardIgnore public class Cheat extends AbstractSneckoCard { public final static String ID = makeID("Cheat"); @@ -12,7 +15,8 @@ public class Cheat extends AbstractSneckoCard { //stupid intellij stuff SKILL, SELF, RARE public Cheat() { - super(ID, 0, CardType.SKILL, CardRarity.RARE, CardTarget.SELF); + super(ID, 0, CardType.SKILL, CardRarity.SPECIAL, CardTarget.SELF); + // super(ID, 0, CardType.SKILL, CardRarity.RARE, CardTarget.SELF); tags.add(SneckoMod.SNEKPROOF); exhaust = true; SneckoMod.loadJokeCardImage(this, "Cheat.png"); diff --git a/src/main/java/sneckomod/cards/CobraCoil.java b/src/main/java/sneckomod/cards/CobraCoil.java new file mode 100644 index 000000000..3a58a791b --- /dev/null +++ b/src/main/java/sneckomod/cards/CobraCoil.java @@ -0,0 +1,85 @@ +package sneckomod.cards; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.DamageAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.ConstrictedPower; +import com.megacrit.cardcrawl.relics.AbstractRelic; +import com.megacrit.cardcrawl.relics.FrozenEgg2; +import com.megacrit.cardcrawl.relics.MoltenEgg2; +import com.megacrit.cardcrawl.relics.ToxicEgg2; +import sneckomod.SneckoMod; +import sneckomod.relics.UnknownEgg; + +import java.util.ArrayList; + +public class CobraCoil extends AbstractSneckoCard { + + public static final String ID = makeID("CobraCoil"); + + private static final int DAMAGE = 20; + private static final int UPGRADE_DAMAGE = 4; + private static final int MAGIC = 10; + private static final int UPG_MAGIC = 2; + private static final int COST = 4; + private static int SOFTLOCK = 0; + + public CobraCoil() { + super(ID, COST, AbstractCard.CardType.ATTACK, AbstractCard.CardRarity.RARE, AbstractCard.CardTarget.ENEMY); + baseDamage = DAMAGE; + baseMagicNumber = magicNumber = MAGIC; + SneckoMod.loadJokeCardImage(this, "CobraCoil.png"); + } + + public static boolean cardListDuplicate(ArrayList cardsList, AbstractCard card) { + for (AbstractCard alreadyHave : cardsList) { + if (alreadyHave.cardID.equals(card.cardID) && (SOFTLOCK < 100)) { + SOFTLOCK++; + return true; + } + } + if (SOFTLOCK >= 100) { + System.out.println("SOFTLOCK DETECTED!!!"); + } + return false; + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + addToBot(new DamageAction(m, new DamageInfo(p, damage, damageTypeForTurn), AbstractGameAction.AttackEffect.SLASH_HEAVY)); + applyToEnemy(m, new ConstrictedPower(m, p, magicNumber)); + } + + @Override + public void onObtainCard() { + ArrayList cardsToReward = new ArrayList<>(); + while (cardsToReward.size() < 3) { + AbstractCard newCard = SneckoMod.getOffClassCardMatchingPredicate(c -> c.type == AbstractCard.CardType.ATTACK && c.rarity == AbstractCard.CardRarity.RARE); + + for (AbstractRelic r : AbstractDungeon.player.relics) { + r.onPreviewObtainCard(newCard); + } + + if (!cardListDuplicate(cardsToReward, newCard)) { + SOFTLOCK = 0; + cardsToReward.add(newCard.makeCopy()); + } + } + + SneckoMod.addGift(cardsToReward); + ; + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeDamage(UPGRADE_DAMAGE); + upgradeMagicNumber(UPG_MAGIC); + } + } +} diff --git a/src/main/java/sneckomod/cards/ComboString.java b/src/main/java/sneckomod/cards/ComboString.java new file mode 100644 index 000000000..61c6e8c92 --- /dev/null +++ b/src/main/java/sneckomod/cards/ComboString.java @@ -0,0 +1,102 @@ +package sneckomod.cards; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.DamageAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.relics.AbstractRelic; +import com.megacrit.cardcrawl.relics.FrozenEgg2; +import com.megacrit.cardcrawl.relics.MoltenEgg2; +import com.megacrit.cardcrawl.relics.ToxicEgg2; +import sneckomod.SneckoMod; +import sneckomod.relics.UnknownEgg; + +import java.util.ArrayList; + +public class ComboString extends AbstractSneckoCard { + + public static final String ID = SneckoMod.makeID("ComboString"); + + // Card constants + private static final int DAMAGE = 7; + private static final int UPGRADE_DAMAGE = 2; + private static final int COST = 1; + + private static int SOFTLOCK = 0; + + public ComboString() { + super(ID, COST, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); + baseDamage = DAMAGE; + SneckoMod.loadJokeCardImage(this, "ComboString.png"); + } + + public static boolean cardListDuplicate(ArrayList cardsList, AbstractCard card) { + for (AbstractCard alreadyHave : cardsList) { + if (alreadyHave.cardID.equals(card.cardID) && (SOFTLOCK < 100)) { + SOFTLOCK++; + return true; + } + } + if (SOFTLOCK >= 100) { + System.out.println("SOFTLOCK DETECTED!!!"); + } + return false; + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + int offclassCardsPlayed = (int) AbstractDungeon.actionManager.cardsPlayedThisTurn.stream() + .filter(card -> card.color != AbstractDungeon.player.getCardColor()) + .count(); + + for (int i = 0; i < offclassCardsPlayed; i++) { + addToBot(new DamageAction(m, new DamageInfo(p, this.damage, this.damageTypeForTurn), AbstractGameAction.AttackEffect.SLASH_DIAGONAL)); + } + } + + @Override + public void applyPowers() { + super.applyPowers(); + + int offclassCardsPlayed = (int) AbstractDungeon.actionManager.cardsPlayedThisTurn.stream() + .filter(card -> card.color != AbstractDungeon.player.getCardColor()) + .count(); + + updateDescription(offclassCardsPlayed); + } + + private void updateDescription(int offclassCardsPlayed) { + this.rawDescription = cardStrings.DESCRIPTION + EXTENDED_DESCRIPTION[0] + offclassCardsPlayed + EXTENDED_DESCRIPTION[1]; + initializeDescription(); + } + + @Override + public void onObtainCard() { + ArrayList cardsToReward = new ArrayList<>(); + while (cardsToReward.size() < 3) { + AbstractCard newCard = SneckoMod.getOffClassCardMatchingPredicate(c -> c.rarity == AbstractCard.CardRarity.UNCOMMON); + + for (AbstractRelic r : AbstractDungeon.player.relics) { + r.onPreviewObtainCard(newCard); + } + + if (!cardListDuplicate(cardsToReward, newCard)) { + cardsToReward.add(newCard.makeCopy()); + } + } + + SneckoMod.addGift(cardsToReward); + ; + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeDamage(UPGRADE_DAMAGE); + } + } +} diff --git a/src/main/java/sneckomod/cards/Cower.java b/src/main/java/sneckomod/cards/Cower.java new file mode 100644 index 000000000..6550a3c05 --- /dev/null +++ b/src/main/java/sneckomod/cards/Cower.java @@ -0,0 +1,54 @@ +package sneckomod.cards; + +import com.megacrit.cardcrawl.actions.common.GainBlockAction; +import com.megacrit.cardcrawl.actions.common.MakeTempCardInHandAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import hermit.cards.HoleUp; +import slimebound.cards.SlimeCrush; +import sneckomod.SneckoMod; + +public class Cower extends AbstractSneckoCard { + + public static final String ID = SneckoMod.makeID("Cower"); + + private static final int BLOCK = 14; + private static final int UPG_BLOCK = 4; + private static final int MAGIC = 2; + private static final int UPG_MAGIC = 0; + + public Cower() { + super(ID, 2, CardType.SKILL, CardRarity.COMMON, CardTarget.SELF); + baseBlock = BLOCK; + SneckoMod.loadJokeCardImage(this, "Cower.png"); + magicNumber = baseMagicNumber = MAGIC; + this.exhaust = true; + this.cardsToPreview = new HoleUp(); + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + AbstractDungeon.actionManager.addToBottom(new GainBlockAction(p, p, block)); + AbstractCard g = new HoleUp(); + if (this.upgraded) { + g.upgrade(); + } + AbstractDungeon.actionManager.addToBottom(new MakeTempCardInHandAction(g)); + + } + + @Override + public void upgrade() { + if (!upgraded) { + AbstractCard q = new HoleUp(); + q.upgrade(); + cardsToPreview = q; + upgradeName(); + upgradeBlock(UPG_BLOCK); + rawDescription = UPGRADE_DESCRIPTION; + initializeDescription(); + } + } +} diff --git a/src/main/java/sneckomod/cards/CrystalBoomerang.java b/src/main/java/sneckomod/cards/CrystalBoomerang.java new file mode 100644 index 000000000..47faa6900 --- /dev/null +++ b/src/main/java/sneckomod/cards/CrystalBoomerang.java @@ -0,0 +1,64 @@ +package sneckomod.cards; + +import com.megacrit.cardcrawl.actions.common.GainBlockAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import downfall.util.SelectCardsCenteredAction; +import sneckomod.SneckoMod; + +public class CrystalBoomerang extends AbstractSneckoCard { + + public static final String ID = SneckoMod.makeID("CrystalBoomerang"); + private static final int COST = 1; + private static final int BLOCK = 5; + private static final int UPGRADE_BLOCK = 3; + + public static final String[] TEXT; + + public CrystalBoomerang() { + super(ID, COST, CardType.SKILL, CardRarity.COMMON, CardTarget.SELF); + SneckoMod.loadJokeCardImage(this, "CrystalBoomerang.png"); + baseBlock = BLOCK; + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + if (!p.discardPile.isEmpty()) { + this.addToBot(new SelectCardsCenteredAction( + + p.discardPile.group, + 1, + TEXT[0], + + (selectedCards) -> { + + AbstractCard selecteda = selectedCards.get(0); + p.discardPile.removeCard(selecteda); + p.hand.addToHand(selecteda); + selecteda.lighten(false); + selecteda.unhover(); + selecteda.applyPowers(); + + if (selecteda.color != p.getCardColor()) { + blck(); + } + } + )); + } + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeBlock(UPGRADE_BLOCK); + } + } + + static { + TEXT = CardCrawlGame.languagePack.getUIString("BetterToHandAction").TEXT; + } + +} diff --git a/src/main/java/sneckomod/cards/DangerNoodle.java b/src/main/java/sneckomod/cards/DangerNoodle.java index eff998e75..af452cb26 100644 --- a/src/main/java/sneckomod/cards/DangerNoodle.java +++ b/src/main/java/sneckomod/cards/DangerNoodle.java @@ -1,57 +1,90 @@ package sneckomod.cards; +import basemod.BaseMod; +import com.evacipated.cardcrawl.mod.stslib.actions.common.SelectCardsInHandAction; +import com.evacipated.cardcrawl.mod.stslib.cards.interfaces.OnObtainCard; import com.megacrit.cardcrawl.actions.AbstractGameAction; -import com.megacrit.cardcrawl.actions.common.DamageAction; -import com.megacrit.cardcrawl.actions.common.ExhaustSpecificCardAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.relics.AbstractRelic; +import com.megacrit.cardcrawl.relics.FrozenEgg2; +import com.megacrit.cardcrawl.relics.MoltenEgg2; +import com.megacrit.cardcrawl.relics.ToxicEgg2; +import downfall.downfallMod; import sneckomod.SneckoMod; +import sneckomod.actions.MuddleAction; +import sneckomod.relics.UnknownEgg; import java.util.ArrayList; -public class DangerNoodle extends AbstractSneckoCard { +public class DangerNoodle extends AbstractSneckoCard implements OnObtainCard { - public final static String ID = makeID("DangerNoodle"); + public static final String ID = makeID("DangerNoodle"); - //stupid intellij stuff ATTACK, ENEMY, RARE - - private static final int DAMAGE = 9; - private static final int UPG_DAMAGE = 3; + private static final int DAMAGE = 14; + private static final int UPG_DAMAGE = 4; + private static int SOFTLOCK = 0; public DangerNoodle() { - super(ID, 2, CardType.ATTACK, CardRarity.RARE, CardTarget.ENEMY); + super(ID, 1, CardType.ATTACK, CardRarity.RARE, CardTarget.ENEMY); baseDamage = DAMAGE; SneckoMod.loadJokeCardImage(this, "DangerNoodle.png"); } + public static boolean cardListDuplicate(ArrayList cardsList, AbstractCard card) { + for (AbstractCard alreadyHave : cardsList) { + if (alreadyHave.cardID.equals(card.cardID) && (SOFTLOCK < 100)) { + SOFTLOCK++; + return true; + } + } + if (SOFTLOCK >= 100) { + System.out.println("SOFTLOCK DETECTED!!!"); + } + return false; + } + + @Override public void use(AbstractPlayer p, AbstractMonster m) { dmg(m, makeInfo(), AbstractGameAction.AttackEffect.BLUNT_HEAVY); - atb(new AbstractGameAction() { - @Override - public void update() { - isDone = true; - ArrayList myList = new ArrayList<>(); - for (AbstractCard q : p.hand.group) { - if (q.color != AbstractDungeon.player.getCardColor()) { - myList.add(q); + + addToBot(new SelectCardsInHandAction(1, BaseMod.getKeywordProper("sneckomod:muddle"), + (AbstractCard c) -> true, + (cards) -> { + for (AbstractCard card : cards) { + addToBot(new MuddleAction(card)); } } - for (AbstractCard q : myList) { - att(new ExhaustSpecificCardAction(q, p.hand)); - } - for (AbstractCard q : myList) { - att(new DamageAction(m, makeInfo(), AttackEffect.BLUNT_HEAVY)); - } + )); + } + + @Override + public void onObtainCard() { + ArrayList cardsToReward = new ArrayList<>(); + while (cardsToReward.size() < 3) { + AbstractCard newCard = SneckoMod.getOffClassCardMatchingPredicate(c -> c.cost >= 3); + + for (AbstractRelic r : AbstractDungeon.player.relics) { + r.onPreviewObtainCard(newCard); } - }); + + if (!cardListDuplicate(cardsToReward, newCard)) { + SOFTLOCK = 0; + cardsToReward.add(newCard.makeCopy()); + } + } + + SneckoMod.addGift(cardsToReward); + ; } + @Override public void upgrade() { if (!upgraded) { upgradeName(); upgradeDamage(UPG_DAMAGE); } } -} \ No newline at end of file +} diff --git a/src/main/java/sneckomod/cards/Deception.java b/src/main/java/sneckomod/cards/Deception.java new file mode 100644 index 000000000..8c43d443e --- /dev/null +++ b/src/main/java/sneckomod/cards/Deception.java @@ -0,0 +1,42 @@ +package sneckomod.cards; + +import com.megacrit.cardcrawl.actions.common.MakeTempCardInHandAction; +import com.megacrit.cardcrawl.cards.red.Shockwave; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; + +public class Deception extends AbstractSneckoCard { + + public final static String ID = makeID("Deception"); + + //stupid intellij stuff SKILL, SELF, COMMON + + //this is definitely one of the cards of all time - blue + + private static final int BLOCK = 11; + private static final int UPG_BLOCK = 4; + + private static final int MAGIC = 1; + private static final int UPG_MAGIC = 1; + + public Deception() { + super(ID, 2, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); + baseBlock = BLOCK; + SneckoMod.loadJokeCardImage(this, "Deception.png"); + this.cardsToPreview = new Shockwave(); + exhaust = true; + } + + public void use(AbstractPlayer p, AbstractMonster m) { + blck(); + addToBot(new MakeTempCardInHandAction(new Shockwave(), 1)); + } + + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeBlock(UPG_BLOCK); + } + } +} \ No newline at end of file diff --git a/src/main/java/sneckomod/cards/DefensiveFlair.java b/src/main/java/sneckomod/cards/DefensiveFlair.java index cd2b7937b..86e18ebfc 100644 --- a/src/main/java/sneckomod/cards/DefensiveFlair.java +++ b/src/main/java/sneckomod/cards/DefensiveFlair.java @@ -4,7 +4,14 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.relics.AbstractRelic; +import com.megacrit.cardcrawl.relics.FrozenEgg2; +import com.megacrit.cardcrawl.relics.MoltenEgg2; +import com.megacrit.cardcrawl.relics.ToxicEgg2; import sneckomod.SneckoMod; +import sneckomod.relics.UnknownEgg; + +import java.util.ArrayList; public class DefensiveFlair extends AbstractSneckoCard { @@ -13,10 +20,12 @@ public class DefensiveFlair extends AbstractSneckoCard { //stupid intellij stuff SKILL, SELF, UNCOMMON private static final int BLOCK = 8; - private static final int UPG_BLOCK = 2; + private static final int UPG_BLOCK = 1; - private static final int MAGIC = 1; + private static final int MAGIC = 2; private static final int UPG_MAGIC = 1; + private static int SOFTLOCK = 0; + public DefensiveFlair() { super(ID, 1, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); @@ -25,6 +34,19 @@ public DefensiveFlair() { SneckoMod.loadJokeCardImage(this, "DefensiveFlair.png"); } + public static boolean cardListDuplicate(ArrayList cardsList, AbstractCard card) { + for (AbstractCard alreadyHave : cardsList) { + if (alreadyHave.cardID.equals(card.cardID) && (SOFTLOCK < 100)) { + SOFTLOCK++; + return true; + } + } + if (SOFTLOCK >= 100) { + System.out.println("SOFTLOCK DETECTED!!!"); + } + return false; + } + @Override protected void applyPowersToBlock() { int realBaseBlock = this.baseBlock; @@ -37,6 +59,26 @@ protected void applyPowersToBlock() { this.isBlockModified = block != baseBlock; } + @Override + public void onObtainCard() { + ArrayList cardsToReward = new ArrayList<>(); + while (cardsToReward.size() < 3) { + AbstractCard newCard = SneckoMod.getOffClassCardMatchingPredicate(c -> c.rarity == AbstractCard.CardRarity.UNCOMMON); + + for (AbstractRelic r : AbstractDungeon.player.relics) { + r.onPreviewObtainCard(newCard); + } + + if (!cardListDuplicate(cardsToReward, newCard)) { + SOFTLOCK = 0; + cardsToReward.add(newCard.makeCopy()); + } + } + + SneckoMod.addGift(cardsToReward); + ; + } + public void use(AbstractPlayer p, AbstractMonster m) { blck(); } diff --git a/src/main/java/sneckomod/cards/DiceBlock.java b/src/main/java/sneckomod/cards/DiceBlock.java index b88a5ef99..0a1ad8d80 100644 --- a/src/main/java/sneckomod/cards/DiceBlock.java +++ b/src/main/java/sneckomod/cards/DiceBlock.java @@ -1,49 +1,36 @@ package sneckomod.cards; -import com.megacrit.cardcrawl.actions.common.GainBlockAction; -import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; -import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; import sneckomod.SneckoMod; -import sneckomod.actions.MuddleAction; -import sneckomod.cards.unknowns.AbstractUnknownCard; public class DiceBlock extends AbstractSneckoCard { - public final static String ID = makeID("DiceBlock"); + public static final String ID = SneckoMod.makeID("DiceBlock"); + + private static final int BASE_BLOCK = 5; + private static final int UPG_BASE_BLOCK = 2; public DiceBlock() { - super(ID, 2, CardType.SKILL, CardRarity.COMMON, CardTarget.SELF); - baseMagicNumber = magicNumber = 10; //Min Block - baseBlock = 15; //Max Block - tags.add(SneckoMod.RNG); + super(ID, 1, CardType.SKILL, CardRarity.COMMON, CardTarget.SELF); + baseBlock = BASE_BLOCK; SneckoMod.loadJokeCardImage(this, "DiceBlock.png"); + this.tags.add(SneckoMod.OVERFLOW); } + @Override public void use(AbstractPlayer p, AbstractMonster m) { - atb(new GainBlockAction(p, getRandomNum(magicNumber, block, this))); + blck(); + if (isOverflowActive(this)) { + blck(); + } } @Override - protected void applyPowersToBlock() { - int CURRENT_MAGIC_NUMBER = baseMagicNumber; - int CURRENT_BLOCK = baseBlock; - baseBlock = CURRENT_MAGIC_NUMBER; - super.applyPowersToBlock(); - magicNumber = block; - isMagicNumberModified = block != baseBlock; - - baseBlock = CURRENT_BLOCK; - super.applyPowersToBlock(); - isBlockModified = baseBlock != block; - } - public void upgrade() { if (!upgraded) { upgradeName(); - upgradeMagicNumber(4); - upgradeBlock(4); + upgradeBlock(UPG_BASE_BLOCK); } } -} \ No newline at end of file +} diff --git a/src/main/java/sneckomod/cards/DiceBoulder.java b/src/main/java/sneckomod/cards/DiceBoulder.java index eb69f0ebf..5a996d054 100644 --- a/src/main/java/sneckomod/cards/DiceBoulder.java +++ b/src/main/java/sneckomod/cards/DiceBoulder.java @@ -1,72 +1,40 @@ package sneckomod.cards; -import com.megacrit.cardcrawl.actions.AbstractGameAction; -import com.megacrit.cardcrawl.cards.AbstractCard; -import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.actions.common.ModifyBlockAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import hermit.actions.ReduceCostActionFixed; import sneckomod.SneckoMod; -import sneckomod.actions.NoApplyRandomDamageAction; + public class DiceBoulder extends AbstractSneckoCard { public final static String ID = makeID("DiceBoulder"); + private static final int BASE_BLOCK = 7; + private static final int UPG_BLOCK = 1; + private static final int MAGIC = 4; + private static final int UPGRADE_MAGIC = 1; public DiceBoulder() { - super(ID, 2, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); - baseMagicNumber = magicNumber = 1; //Min damage - baseDamage = 27; //Max damage - tags.add(SneckoMod.RNG); + super(ID, 0, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); + baseMagicNumber = magicNumber = MAGIC; + baseBlock = BASE_BLOCK; + baseSilly = silly = 1; SneckoMod.loadJokeCardImage(this, "DiceBoulder.png"); } public void use(AbstractPlayer p, AbstractMonster m) { - atb(new NoApplyRandomDamageAction(m, magicNumber, damage, 1, AbstractGameAction.AttackEffect.BLUNT_HEAVY, this, DamageInfo.DamageType.NORMAL)); - } - - @Override - public void applyPowers() { - int maxDamage = baseDamage; - baseDamage = baseMagicNumber; - super.applyPowers(); - - magicNumber = damage; // magic number holds the first condition's modified damage, so !M! will work - isMagicNumberModified = isDamageModified; - - baseDamage = maxDamage; - super.applyPowers(); - } - - @Override - public void calculateCardDamage(final AbstractMonster mo) { - int maxDamage = baseDamage; - baseDamage = baseMagicNumber; - super.calculateCardDamage(mo); // takes baseDamage and applies things like Strength or Pen Nib to set damage - - magicNumber = damage; // magic number holds the first condition's modified damage, so !M! will work - isMagicNumberModified = isDamageModified; - - // repeat so damage holds the second condition's damage - baseDamage = maxDamage; - super.calculateCardDamage(mo); + blck(); + this.addToBot(new ModifyBlockAction(this.uuid, this.magicNumber)); + this.addToBot(new ReduceCostActionFixed(this.uuid, 1)); } - @Override - public boolean canUpgrade() { - return true; - } - - @Override - public AbstractCard makeCopy() { - return new DiceBoulder(); - } public void upgrade() { - this.upgradeDamage(3 + timesUpgraded); - upgradeMagicNumber(6 + timesUpgraded); - ++this.timesUpgraded; - this.upgraded = true; - this.name = cardStrings.NAME + "+" + this.timesUpgraded; - this.initializeTitle(); + if (!upgraded) { + upgradeName(); + upgradeBlock(UPG_BLOCK); + upgradeMagicNumber(UPGRADE_MAGIC); + } } } \ No newline at end of file diff --git a/src/main/java/sneckomod/cards/DiceCrush.java b/src/main/java/sneckomod/cards/DiceCrush.java index 833828590..da6bbdfc0 100644 --- a/src/main/java/sneckomod/cards/DiceCrush.java +++ b/src/main/java/sneckomod/cards/DiceCrush.java @@ -1,65 +1,41 @@ package sneckomod.cards; import com.megacrit.cardcrawl.actions.AbstractGameAction; -import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.actions.common.DrawCardAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; import sneckomod.SneckoMod; -import sneckomod.actions.NoApplyRandomDamageAction; public class DiceCrush extends AbstractSneckoCard { public final static String ID = makeID("DiceCrush"); + //stupid intellij stuff ATTACK, ENEMY, BASIC + + private static final int DAMAGE = 18; + private static final int MAGIC = 2; + private static final int UPG_DAMAGE = 4; + public DiceCrush() { super(ID, 2, CardType.ATTACK, CardRarity.COMMON, CardTarget.ENEMY); - baseMagicNumber = magicNumber = 12; // Min Damage - baseDamage = 18; //Max Damage - tags.add(SneckoMod.RNG); + baseDamage = DAMAGE; + baseMagicNumber = magicNumber = MAGIC; SneckoMod.loadJokeCardImage(this, "DiceCrush.png"); + this.tags.add(SneckoMod.OVERFLOW); } public void use(AbstractPlayer p, AbstractMonster m) { - atb(new NoApplyRandomDamageAction(m, magicNumber, damage, 1, AbstractGameAction.AttackEffect.SMASH, this, DamageInfo.DamageType.NORMAL)); - } - - @Override - public void applyPowers() { - int CURRENT_MAGIC_NUMBER = baseMagicNumber; - int CURRENT_DMG = baseDamage; - baseDamage = CURRENT_MAGIC_NUMBER; - super.applyPowers(); // takes baseDamage and applies things like Strength or Pen Nib to set damage - - magicNumber = damage; // magic number holds the first condition's modified damage, so !M! will work - isMagicNumberModified = magicNumber != baseMagicNumber; - - // repeat so damage holds the second condition's damage - baseDamage = CURRENT_DMG; - super.applyPowers(); - isDamageModified = baseDamage != damage; + dmg(m, makeInfo(), AbstractGameAction.AttackEffect.BLUNT_LIGHT); + if (isOverflowActive(this)) { + atb(new DrawCardAction(magicNumber)); + } } - @Override - public void calculateCardDamage(final AbstractMonster mo) { - int CURRENT_MAGIC_NUMBER = baseMagicNumber; - int CURRENT_DMG = baseDamage; - baseDamage = CURRENT_MAGIC_NUMBER; - super.calculateCardDamage(mo); // takes baseDamage and applies things like Strength or Pen Nib to set damage - - magicNumber = damage; // magic number holds the first condition's modified damage, so !M! will work - isMagicNumberModified = magicNumber != baseMagicNumber; - - // repeat so damage holds the second condition's damage - baseDamage = CURRENT_DMG; - super.calculateCardDamage(mo); - isDamageModified = baseDamage != damage; - } public void upgrade() { if (!upgraded) { upgradeName(); - upgradeMagicNumber(4); - upgradeDamage(4); + upgradeDamage(UPG_DAMAGE); } } } \ No newline at end of file diff --git a/src/main/java/sneckomod/cards/DragonsHoard.java b/src/main/java/sneckomod/cards/DragonsHoard.java new file mode 100644 index 000000000..0285d3b57 --- /dev/null +++ b/src/main/java/sneckomod/cards/DragonsHoard.java @@ -0,0 +1,39 @@ +package sneckomod.cards; + +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.DexterityPower; +import com.megacrit.cardcrawl.powers.StrengthPower; +import com.megacrit.cardcrawl.vfx.combat.InflameEffect; +import sneckomod.SneckoMod; + +public class DragonsHoard extends AbstractSneckoCard { + + public final static String ID = makeID("DragonsHoard"); + + private static final int MAGIC = 3; + + public DragonsHoard() { + super(ID, 3, CardType.POWER, CardRarity.UNCOMMON, CardTarget.SELF); + baseMagicNumber = magicNumber = MAGIC; + isEthereal = true; + SneckoMod.loadJokeCardImage(this, "DragonsHoard.png"); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + this.addToBot(new VFXAction(p, new InflameEffect(p), 1.0F)); + this.addToBot(new ApplyPowerAction(p, p, new StrengthPower(p, this.magicNumber), this.magicNumber)); + this.addToBot(new ApplyPowerAction(p, p, new DexterityPower(p, this.magicNumber), this.magicNumber)); + } + + public void upgrade() { + if (!upgraded) { + upgradeName(); + isEthereal = false; + rawDescription = UPGRADE_DESCRIPTION; + initializeDescription(); + } + } +} \ No newline at end of file diff --git a/src/main/java/sneckomod/cards/FlashInThePan.java b/src/main/java/sneckomod/cards/FlashInThePan.java new file mode 100644 index 000000000..43dac128b --- /dev/null +++ b/src/main/java/sneckomod/cards/FlashInThePan.java @@ -0,0 +1,48 @@ +package sneckomod.cards; + +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.DiscardAction; +import com.megacrit.cardcrawl.actions.common.GainBlockAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.DrawCardNextTurnPower; +import sneckomod.SneckoMod; + +public class FlashInThePan extends AbstractSneckoCard { + + public static final String ID = SneckoMod.makeID("FlashInThePan"); + + private static final int BLOCK = 13; + private static final int COST = 2; + private static final int UPG_BLOCK = 3; + + public FlashInThePan() { + super(ID, COST, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); + baseBlock = BLOCK; + SneckoMod.loadJokeCardImage(this, "FlashInThePan.png"); + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + blck(); + + int handSize = p.hand.size(); + if (handSize > 0) { + addToBot(new DiscardAction(p, p, handSize, false)); + } + + if (handSize > 1) { + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, new DrawCardNextTurnPower(p, handSize - 1), handSize - 1)); + } + } + + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeBlock(UPG_BLOCK); + } + } +} diff --git a/src/main/java/sneckomod/cards/FourOfAKind.java b/src/main/java/sneckomod/cards/FourOfAKind.java new file mode 100644 index 000000000..1881c4917 --- /dev/null +++ b/src/main/java/sneckomod/cards/FourOfAKind.java @@ -0,0 +1,2 @@ +//deprecated +//was rare - 1 - if you played 4 unique colors this turn, gain 1 intangible. exhaust \ No newline at end of file diff --git a/src/main/java/sneckomod/cards/GildedShield.java b/src/main/java/sneckomod/cards/GildedShield.java new file mode 100644 index 000000000..113de80bf --- /dev/null +++ b/src/main/java/sneckomod/cards/GildedShield.java @@ -0,0 +1,33 @@ +package sneckomod.cards; + +import com.megacrit.cardcrawl.actions.common.GainBlockAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; +import sneckomod.actions.MuddleAction; + +public class GildedShield extends AbstractSneckoCard { + + public static final String ID = makeID("GildedShield"); + + public GildedShield() { + super(ID, 1, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); + baseBlock = 8; + this.returnToHand = true; + SneckoMod.loadJokeCardImage(this, "GildedShield.png"); + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + addToBot(new GainBlockAction(p, p, this.block)); + addToBot(new MuddleAction(this)); + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeBlock(3); + } + } +} diff --git a/src/main/java/sneckomod/cards/GlitteringGambit.java b/src/main/java/sneckomod/cards/GlitteringGambit.java index 5de27a90a..f565fbb9e 100644 --- a/src/main/java/sneckomod/cards/GlitteringGambit.java +++ b/src/main/java/sneckomod/cards/GlitteringGambit.java @@ -1,38 +1,92 @@ package sneckomod.cards; +import com.evacipated.cardcrawl.mod.stslib.fields.cards.AbstractCard.SoulboundField; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.curses.CurseOfTheBell; +import com.megacrit.cardcrawl.cards.curses.Necronomicurse; import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.vfx.NecronomicurseEffect; +import com.megacrit.cardcrawl.vfx.cardManip.ShowCardAndObtainEffect; +import expansioncontent.expansionContentMod; import sneckomod.SneckoMod; -import sneckomod.actions.ChangeGoldAction; -public class GlitteringGambit extends AbstractSneckoCard { +import java.util.ArrayList; +public class GlitteringGambit extends AbstractSneckoCard { public final static String ID = makeID("GlitteringGambit"); - //stupid intellij stuff SKILL, SELF, RARE - - private static final int MAGIC = -10; - private static final int UPG_MAGIC = 10; + private static final int MAGIC = 150; + private static int SOFTLOCK = 0; public GlitteringGambit() { - super(ID, 0, CardType.SKILL, CardRarity.RARE, CardTarget.SELF); + super(ID, -2, CardType.POWER, CardRarity.RARE, CardTarget.SELF); baseMagicNumber = magicNumber = MAGIC; - tags.add(SneckoMod.SNEKPROOF); - exhaust = true; + isEthereal = false; tags.add(CardTags.HEALING); - tags.add(SneckoMod.RNG); + tags.add(expansionContentMod.UNPLAYABLE); SneckoMod.loadJokeCardImage(this, "GlitteringGambit.png"); + SoulboundField.soulbound.set(this, true); } + public static boolean cardListDuplicate(ArrayList cardsList, AbstractCard card) { + for (AbstractCard existingCard : cardsList) { + if (existingCard.cardID.equals(card.cardID) && (SOFTLOCK < 100)) { + SOFTLOCK++; + return true; + } + } + if (SOFTLOCK >= 100) { + System.out.println("SOFTLOCK DETECTED!!!"); + } + return false; + } + + @Override public void use(AbstractPlayer p, AbstractMonster m) { - atb(new ChangeGoldAction((int) Math.ceil((getRandomNum(magicNumber, 30, this))))); } + @Override + public void onObtainCard() { + AbstractDungeon.player.gainGold(this.magicNumber); + for (int i = 0; i < 1; i++) + displayCardRewards(AbstractCard.CardRarity.RARE, "Special Bonus Card!"); + } + + private void displayCardRewards(AbstractCard.CardRarity rarity, String rewardText) { + ArrayList cardsToReward = new ArrayList<>(); + + while (cardsToReward.size() < 3) { + AbstractCard newCard = SneckoMod.getOffClassCardMatchingPredicate(c -> c.rarity == rarity); + if (newCard != null && !cardListDuplicate(cardsToReward, newCard)) { + SOFTLOCK = 0; + AbstractCard cardCopy = newCard.makeCopy(); + cardCopy.upgrade(); + cardsToReward.add(cardCopy); + } + } + + SneckoMod.addGift(cardsToReward); + } + + @Override + public boolean canUse(AbstractPlayer p, AbstractMonster m) { + return false; + } + + public void onRemoveFromMasterDeck() { + AbstractDungeon.effectList.add(new ShowCardAndObtainEffect(new CurseOfTheBell(), (float)Settings.WIDTH / 2.0F, (float)Settings.HEIGHT / 2.0F)); + } + + @Override public void upgrade() { if (!upgraded) { upgradeName(); - upgradeMagicNumber(UPG_MAGIC); + isEthereal = true; + rawDescription = UPGRADE_DESCRIPTION; + initializeDescription(); } } -} \ No newline at end of file +} diff --git a/src/main/java/sneckomod/cards/ImmovableObject.java b/src/main/java/sneckomod/cards/ImmovableObject.java new file mode 100644 index 000000000..5b9ac1765 --- /dev/null +++ b/src/main/java/sneckomod/cards/ImmovableObject.java @@ -0,0 +1,61 @@ +package sneckomod.cards; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.ExhaustSpecificCardAction; +import com.megacrit.cardcrawl.actions.common.GainBlockAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import downfall.util.CardIgnore; +import sneckomod.SneckoMod; + +@Deprecated +@CardIgnore + +public class ImmovableObject extends AbstractSneckoCard { + + public static final String ID = makeID("ImmovableObject"); + + private static final int COST = 2; + private static final int BLOCK = 10; + private static final int UPG_BLOCK = 3; + private static final int MAGIC = 12; + private static final int UPG_MAGIC = -2; + + public ImmovableObject() { + super(ID, COST, CardType.SKILL, CardRarity.SPECIAL, CardTarget.SELF); + baseBlock = BLOCK; + magicNumber = baseMagicNumber = MAGIC; + SneckoMod.loadJokeCardImage(this, "ImmovableObject.png"); + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + addToBot(new GainBlockAction(p, p, block)); + + int totalCost = 0; + for (AbstractCard card : p.hand.group) { + totalCost += card.costForTurn; + } + + if (totalCost > magicNumber) { + addToBot(new AbstractGameAction() { + @Override + public void update() { + p.addBlock(block); + isDone = true; + } + }); + addToBot(new ExhaustSpecificCardAction(this, p.hand)); + } + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeBlock(UPG_BLOCK); + upgradeMagicNumber(UPG_MAGIC); + } + } +} diff --git a/src/main/java/sneckomod/cards/ImprovisedAttack.java b/src/main/java/sneckomod/cards/ImprovisedAttack.java index 221093579..533f9081b 100644 --- a/src/main/java/sneckomod/cards/ImprovisedAttack.java +++ b/src/main/java/sneckomod/cards/ImprovisedAttack.java @@ -4,16 +4,20 @@ import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import downfall.util.CardIgnore; import sneckomod.SneckoMod; import sneckomod.actions.MuddleAction; +@Deprecated +@CardIgnore public class ImprovisedAttack extends AbstractSneckoCard { public final static String ID = makeID("ImprovisedAttack"); public static AbstractCard storage; public ImprovisedAttack() { - super(ID, 1, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); + super(ID, 1, CardType.ATTACK, CardRarity.SPECIAL, CardTarget.ENEMY); + // super(ID, 1, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); baseDamage = 9; SneckoMod.loadJokeCardImage(this, "ImprovisedAttack.png"); } diff --git a/src/main/java/sneckomod/cards/ImprovisedGuard.java b/src/main/java/sneckomod/cards/ImprovisedGuard.java index 0de5c230c..b84536d89 100644 --- a/src/main/java/sneckomod/cards/ImprovisedGuard.java +++ b/src/main/java/sneckomod/cards/ImprovisedGuard.java @@ -4,9 +4,12 @@ import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import downfall.util.CardIgnore; import sneckomod.SneckoMod; import sneckomod.actions.MuddleAction; +@Deprecated +@CardIgnore public class ImprovisedGuard extends AbstractSneckoCard { public final static String ID = makeID("ImprovisedGuard"); diff --git a/src/main/java/sneckomod/cards/InertBlade.java b/src/main/java/sneckomod/cards/InertBlade.java new file mode 100644 index 000000000..d08bcb958 --- /dev/null +++ b/src/main/java/sneckomod/cards/InertBlade.java @@ -0,0 +1,64 @@ +package sneckomod.cards; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.DamageAction; +import com.megacrit.cardcrawl.actions.common.DrawCardAction; +import com.megacrit.cardcrawl.actions.common.GainEnergyAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.StrengthPower; +import sneckomod.SneckoMod; + +public class InertBlade extends AbstractSneckoCard { + + public static final String ID = makeID("InertBlade"); + + private static final int DAMAGE = 10; + private static final int UPG_DAMAGE = 3; + private static final int MAGIC = 3; + private static final int UPG_MAGIC = 1; + private static final int ENERGY_GAIN = 1; + private static final int UPG_ENERGY = 1; + private static final int COST = 0; + + private int energypayout; + + public InertBlade() { + super(ID, COST, AbstractCard.CardType.ATTACK, AbstractCard.CardRarity.RARE, AbstractCard.CardTarget.ENEMY); + baseDamage = DAMAGE; + magicNumber = baseMagicNumber = MAGIC; + energypayout = ENERGY_GAIN; + SneckoMod.loadJokeCardImage(this, "InertBlade.png"); + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + addToBot(new DamageAction(m, new DamageInfo(p, damage, damageTypeForTurn), AbstractGameAction.AttackEffect.SLASH_HEAVY)); + if (!this.freeToPlay() && !this.freeToPlayOnce) { + if (this.costForTurn >= 1) { + addToBot(new DrawCardAction(p, magicNumber)); + } + if (this.costForTurn >= 2) { + addToBot(new ApplyPowerAction(p, p, new StrengthPower(p, magicNumber), magicNumber)); + } + if (this.costForTurn >= 3) { + addToBot(new GainEnergyAction(energypayout)); + } + } + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeDamage(UPG_DAMAGE); + upgradeMagicNumber(UPG_MAGIC); + energypayout += UPG_ENERGY; + rawDescription = UPGRADE_DESCRIPTION; + initializeDescription(); + } + } +} diff --git a/src/main/java/sneckomod/cards/IronFang.java b/src/main/java/sneckomod/cards/IronFang.java index dab14f1dd..27da2c155 100644 --- a/src/main/java/sneckomod/cards/IronFang.java +++ b/src/main/java/sneckomod/cards/IronFang.java @@ -2,80 +2,49 @@ import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.animations.VFXAction; -import com.megacrit.cardcrawl.actions.common.GainBlockAction; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.DamageAction; +import com.megacrit.cardcrawl.actions.common.DamageAllEnemiesAction; import com.megacrit.cardcrawl.cards.DamageInfo; import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.WeakPower; import com.megacrit.cardcrawl.vfx.combat.BiteEffect; import sneckomod.SneckoMod; -import sneckomod.actions.NoApplyRandomDamageAction; public class IronFang extends AbstractSneckoCard { - public final static String ID = makeID("IronFang"); + public final static String ID = SneckoMod.makeID("IronFang"); - public IronFang() { - super(ID, 1, CardType.ATTACK, CardRarity.COMMON, CardTarget.ENEMY); - baseDamage = 9; - baseBlock = 9; - baseMagicNumber = magicNumber = 3; - baseSilly = silly = 3; - tags.add(SneckoMod.RNG); - SneckoMod.loadJokeCardImage(this, "IronFang.png"); - } - - @Override - protected void applyPowersToBlock() { - int CURRENT_MAGIC_NUMBER = baseMagicNumber; - int CURRENT_BLOCK = baseBlock; - baseBlock = CURRENT_MAGIC_NUMBER; - super.applyPowersToBlock(); - magicNumber = block; - isMagicNumberModified = block != baseBlock; - baseBlock = CURRENT_BLOCK; - super.applyPowersToBlock(); - } - - @Override - public void applyPowers() { - int CURRENT_SILLY = baseSilly; - int CURRENT_DAMAGE = baseDamage; - baseDamage = CURRENT_SILLY; - super.applyPowers(); - silly = damage; - isSillyModified = damage != baseDamage; + private static final int DAMAGE = 6; + private static final int UPGRADE_DAMAGE = 3; - baseDamage = CURRENT_DAMAGE; - super.applyPowers(); - } - - @Override - public void calculateCardDamage(final AbstractMonster m) { - int CURRENT_SILLY = baseSilly; - int CURRENT_DAMAGE = baseDamage; - baseDamage = CURRENT_SILLY; - super.calculateCardDamage(m); - silly = damage; - isSillyModified = damage != baseDamage; + private static final int MAGIC = 1; // Weak application + private static final int COST = 1; - baseDamage = CURRENT_DAMAGE; - super.calculateCardDamage(m); + public IronFang() { + super(ID, COST, CardType.ATTACK, CardRarity.COMMON, CardTarget.ALL_ENEMY); + baseDamage = DAMAGE; + this.isMultiDamage = true; + baseMagicNumber = magicNumber = MAGIC; + SneckoMod.loadJokeCardImage(this, "IronFang.png"); } public void use(AbstractPlayer p, AbstractMonster m) { - atb(new GainBlockAction(p, getRandomNum(magicNumber, block, this))); - atb(new VFXAction(new BiteEffect(m.hb.cX, m.hb.cY), 0.3F));// 117 - atb(new NoApplyRandomDamageAction(m, silly, damage, 1, AbstractGameAction.AttackEffect.NONE, this, DamageInfo.DamageType.NORMAL)); - + this.addToBot(new DamageAllEnemiesAction(p, this.multiDamage, this.damageTypeForTurn, AbstractGameAction.AttackEffect.SLASH_DIAGONAL)); + for (AbstractMonster monster : AbstractDungeon.getMonsters().monsters) { + if (!monster.isDead && !monster.isDying) { + addToBot(new ApplyPowerAction(monster, p, new WeakPower(monster, this.magicNumber, false), this.magicNumber, true, AbstractGameAction.AttackEffect.NONE)); + addToBot(new VFXAction(new BiteEffect(monster.hb.cX, monster.hb.cY), 0.1F)); + } + } } public void upgrade() { if (!upgraded) { upgradeName(); - upgradeSilly(2); - upgradeDamage(2); - upgradeMagicNumber(2); - upgradeBlock(2); + upgradeDamage(UPGRADE_DAMAGE); } } } diff --git a/src/main/java/sneckomod/cards/Jackpot.java b/src/main/java/sneckomod/cards/Jackpot.java new file mode 100644 index 000000000..5853f6e2d --- /dev/null +++ b/src/main/java/sneckomod/cards/Jackpot.java @@ -0,0 +1,36 @@ +package sneckomod.cards; + +import com.megacrit.cardcrawl.actions.common.GainEnergyAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; + +public class Jackpot extends AbstractSneckoCard { + + public final static String ID = makeID("Jackpot"); + + //stupid intellij stuff SKILL, SELF, UNCOMMON + private static final int MAGIC = 2; + private static final int UPGRADE_MAGIC = 1; + + public Jackpot() { + super(ID, 3, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); + baseMagicNumber = magicNumber = MAGIC; + exhaust = true; + this.selfRetain = true; + SneckoMod.loadJokeCardImage(this, "Jackpot.png"); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + atb(new GainEnergyAction(magicNumber)); + } + + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeMagicNumber(UPGRADE_MAGIC); + rawDescription = UPGRADE_DESCRIPTION; + initializeDescription(); + } + } +} diff --git a/src/main/java/sneckomod/cards/Lacerate.java b/src/main/java/sneckomod/cards/Lacerate.java new file mode 100644 index 000000000..af3c6bcfa --- /dev/null +++ b/src/main/java/sneckomod/cards/Lacerate.java @@ -0,0 +1,58 @@ +package sneckomod.cards; + +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.MakeTempCardInHandAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.green.CripplingPoison; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; +import sneckomod.powers.VenomDebuff; + +public class Lacerate extends AbstractSneckoCard { + + public static final String ID = SneckoMod.makeID("Lacerate"); + + private static final int COST = 2; + private static final int UPGRADE_MAGIC = 2; + private static final int MAGIC = 4; + + public Lacerate() { + super(ID, COST, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.ALL_ENEMY); + //baseDamage = DAMAGE; + baseMagicNumber = magicNumber = MAGIC; + this.cardsToPreview = new CripplingPoison(); + SneckoMod.loadJokeCardImage(this, "Lacerate.png"); + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + if (!AbstractDungeon.getMonsters().areMonstersBasicallyDead()) { + flash(); + for (AbstractMonster monster : AbstractDungeon.getMonsters().monsters) { + if ((!monster.isDead) && (!monster.isDying) && !monster.halfDead) { + addToBot(new ApplyPowerAction(monster, p, new VenomDebuff(monster, magicNumber), magicNumber)); + } + } + } + AbstractCard g = new CripplingPoison(); + if (this.upgraded) { + g.upgrade(); + } + AbstractDungeon.actionManager.addToBottom(new MakeTempCardInHandAction(g)); + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + AbstractCard q = new CripplingPoison(); + q.upgrade(); + cardsToPreview = q; + upgradeName(); + rawDescription = UPGRADE_DESCRIPTION; + initializeDescription(); + } + } +} diff --git a/src/main/java/sneckomod/cards/LaserEyes.java b/src/main/java/sneckomod/cards/LaserEyes.java new file mode 100644 index 000000000..61987386f --- /dev/null +++ b/src/main/java/sneckomod/cards/LaserEyes.java @@ -0,0 +1,45 @@ +package sneckomod.cards; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.actions.common.DamageAction; +import com.megacrit.cardcrawl.actions.common.GainEnergyAction; +import com.megacrit.cardcrawl.actions.utility.SFXAction; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.vfx.combat.MindblastEffect; +import sneckomod.SneckoMod; + +public class LaserEyes extends AbstractSneckoCard { + + public static final String ID = SneckoMod.makeID("SnekBeam"); + + private static final int COST = 3; + private static final int DAMAGE = 15; + private static final int UPGRADE_DAMAGE = 5; + + public LaserEyes() { + super(ID, COST, CardType.ATTACK, CardRarity.COMMON, CardTarget.ENEMY); + baseDamage = DAMAGE; + SneckoMod.loadJokeCardImage(this, "SnekBeam.png"); + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + this.addToBot(new SFXAction("ATTACK_HEAVY")); + AbstractDungeon.actionManager.addToBottom(new VFXAction(p, new MindblastEffect(p.dialogX, p.dialogY, p.flipHorizontal), 0.1F)); + addToBot(new DamageAction(m, new DamageInfo(p, damage, damageTypeForTurn), AbstractGameAction.AttackEffect.NONE)); + + addToBot(new GainEnergyAction(1)); + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeDamage(UPGRADE_DAMAGE); + } + } +} diff --git a/src/main/java/sneckomod/cards/LastStrike.java b/src/main/java/sneckomod/cards/LastStrike.java new file mode 100644 index 000000000..7355afacf --- /dev/null +++ b/src/main/java/sneckomod/cards/LastStrike.java @@ -0,0 +1,151 @@ +package sneckomod.cards; + +import automaton.cards.goodstatus.IntoTheVoid; +import collector.cards.BramblesparKindling; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.DamageAction; +import com.megacrit.cardcrawl.actions.watcher.ExpungeVFXAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.relics.AbstractRelic; +import com.megacrit.cardcrawl.relics.FrozenEgg2; +import com.megacrit.cardcrawl.relics.MoltenEgg2; +import com.megacrit.cardcrawl.relics.ToxicEgg2; +import hermit.cards.HighCaliber; +import sneckomod.SneckoMod; +import sneckomod.relics.UnknownEgg; + +import java.util.ArrayList; +import java.util.HashSet; + +public class LastStrike extends AbstractSneckoCard { + public static final String ID = SneckoMod.makeID("LastStrike"); + + // Constants + private static final int BASE_DAMAGE = 6; + private static final int UPGRADE_DAMAGE = 3; + private static int SOFTLOCK = 0; + + // Strike tracking + private HashSet uniqueStrikeIDs; + private boolean hasPlayedOnce; + + public LastStrike() { + super(ID, 1, CardType.ATTACK, CardRarity.RARE, CardTarget.ENEMY); + baseDamage = BASE_DAMAGE; + tags.add(CardTags.STRIKE); + SneckoMod.loadJokeCardImage(this, "LastStrike.png"); + + resetMultiplierTracking(); + } + + private void resetMultiplierTracking() { + uniqueStrikeIDs = new HashSet<>(); + hasPlayedOnce = false; + } + + @Override + public void atBattleStart() { + resetMultiplierTracking(); + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + int uniqueStrikesCount = calculateDamageMultiplier(!hasPlayedOnce); + + for (int i = 0; i < uniqueStrikesCount + 1; ++i) { + this.addToBot(new ExpungeVFXAction(m)); + this.addToBot(new DamageAction(m, new DamageInfo(p, this.damage, this.damageTypeForTurn), AbstractGameAction.AttackEffect.NONE)); + } + + if (!hasPlayedOnce) { + uniqueStrikeIDs.add(this.cardID); + hasPlayedOnce = true; + } + + updateDescription(uniqueStrikesCount); + } + + @Override + public void applyPowers() { + super.applyPowers(); + int uniqueStrikesCount = calculateDamageMultiplier(!hasPlayedOnce); + updateDescription(uniqueStrikesCount); + } + + private int calculateDamageMultiplier(boolean excludeThisCard) { + uniqueStrikeIDs.clear(); + for (AbstractCard card : AbstractDungeon.actionManager.cardsPlayedThisCombat) { + if (card.hasTag(CardTags.STRIKE) + && (!excludeThisCard || card != this)) { + uniqueStrikeIDs.add(card.cardID); + } + } + return uniqueStrikeIDs.size(); + } + + private void updateDescription(int uniqueStrikesCount) { + this.rawDescription = cardStrings.DESCRIPTION + EXTENDED_DESCRIPTION[0] + uniqueStrikesCount + EXTENDED_DESCRIPTION[1]; + initializeDescription(); + } + + @Override + public void onMoveToDiscard() { + if (upgraded) { + this.rawDescription = cardStrings.UPGRADE_DESCRIPTION; + } + else { + this.rawDescription = cardStrings.DESCRIPTION; + } + this.initializeDescription(); + } + + @Override + public void onObtainCard() { + ArrayList cardsToReward = new ArrayList<>(); + + while (cardsToReward.size() < 3) { + AbstractCard newCard = SneckoMod.getOffClassCardMatchingPredicate( + c -> c.rarity != CardRarity.BASIC && (c.hasTag(CardTags.STRIKE) || c.cardID.equals(HighCaliber.ID) || c.cardID.equals(BramblesparKindling.ID)) + ); + + for (AbstractRelic r : AbstractDungeon.player.relics) { + r.onPreviewObtainCard(newCard); + } + + if (!cardListDuplicate(cardsToReward, newCard)) { + SOFTLOCK = 0; + cardsToReward.add(newCard.makeCopy()); + } + } + + SneckoMod.addGift(cardsToReward); + ; + } + + private boolean cardListDuplicate(ArrayList cardsToReward, AbstractCard newCard) { + for (AbstractCard card : cardsToReward) { + if (card.cardID.equals(newCard.cardID) && (SOFTLOCK < 100)) { + SOFTLOCK++; + return true; + } + } + if (SOFTLOCK >= 100) { + System.out.println("SOFTLOCK DETECTED!!!"); + } + return false; + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeDamage(UPGRADE_DAMAGE); + rawDescription = cardStrings.UPGRADE_DESCRIPTION; + initializeDescription(); + } + } +} diff --git a/src/main/java/sneckomod/cards/LatchOn.java b/src/main/java/sneckomod/cards/LatchOn.java new file mode 100644 index 000000000..b1e3bdbb7 --- /dev/null +++ b/src/main/java/sneckomod/cards/LatchOn.java @@ -0,0 +1,50 @@ +package sneckomod.cards; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.actions.common.DamageAction; +import com.megacrit.cardcrawl.actions.common.DamageAllEnemiesAction; +import com.megacrit.cardcrawl.actions.common.MakeTempCardInHandAction; +import com.megacrit.cardcrawl.actions.utility.SFXAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.vfx.combat.CleaveEffect; +import sneckomod.SneckoMod; + +public class LatchOn extends AbstractSneckoCard { + + public static final String ID = SneckoMod.makeID("LatchOn"); + + // Card constants + private static final int DAMAGE = 7; + private static final int UPGRADE_DAMAGE = 3; + private static final int COST = 1; + + public LatchOn() { + super(ID, COST, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ALL); + baseDamage = DAMAGE; + this.isMultiDamage = true; + SneckoMod.loadJokeCardImage(this, "LatchOn.png"); + this.cardsToPreview = new ViperEssence(); + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + this.addToBot(new SFXAction("ATTACK_HEAVY")); + this.addToBot(new VFXAction(p, new CleaveEffect(), 0.1F)); + this.addToBot(new DamageAllEnemiesAction(p, this.multiDamage, this.damageTypeForTurn, AbstractGameAction.AttackEffect.NONE)); + AbstractCard viperEssence = new ViperEssence(); + addToBot(new MakeTempCardInHandAction(viperEssence, 1)); + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeDamage(UPGRADE_DAMAGE); + } + } +} diff --git a/src/main/java/sneckomod/cards/LilGuardian.java b/src/main/java/sneckomod/cards/LilGuardian.java new file mode 100644 index 000000000..583fdd01c --- /dev/null +++ b/src/main/java/sneckomod/cards/LilGuardian.java @@ -0,0 +1,44 @@ +package sneckomod.cards; + +import com.megacrit.cardcrawl.actions.common.DiscardSpecificCardAction; +import com.megacrit.cardcrawl.actions.common.GainBlockAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.CardQueueItem; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; + +public class LilGuardian extends AbstractSneckoCard { + + public static final String ID = SneckoMod.makeID("LilGuardian"); + private static final int COST = 1; + private static final int BLOCK = 7; + private static final int UPGRADE_BLOCK = 2; + + public LilGuardian() { + super(ID, COST, CardType.SKILL, CardRarity.COMMON, CardTarget.SELF); + baseBlock = BLOCK; + SneckoMod.loadJokeCardImage(this, "LilGuardian.png"); + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + addToBot(new GainBlockAction(p, p, block)); + } + + @Override + public void triggerOnCardPlayed(AbstractCard card) { + if (card.costForTurn >= 2 && AbstractDungeon.player.hand.contains(this)) { + AbstractDungeon.actionManager.cardQueue.add(new CardQueueItem(this, false)); + } + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeBlock(UPGRADE_BLOCK); + } + } +} diff --git a/src/main/java/sneckomod/cards/LuckyBreak.java b/src/main/java/sneckomod/cards/LuckyBreak.java new file mode 100644 index 000000000..7453d5d4f --- /dev/null +++ b/src/main/java/sneckomod/cards/LuckyBreak.java @@ -0,0 +1,53 @@ +package sneckomod.cards; + +import com.megacrit.cardcrawl.actions.common.DrawCardAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; + + +public class LuckyBreak extends AbstractSneckoCard { + + public final static String ID = makeID("LuckyBreak"); + + //stupid intellij stuff SKILL, SELF, COMMON + + private static final int BLOCK = 8; + private static final int UPG_BLOCK = 3; + + private static final int MAGIC = 1; + private static final int BASE_DRAW = 0; + + public LuckyBreak() { + super(ID, 1, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); + baseBlock = BLOCK; + baseMagicNumber = magicNumber = MAGIC; + SneckoMod.loadJokeCardImage(this, "LuckyBreak.png"); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + blck(); + int additionalHits = 0; + + if (this.costForTurn >= 2) { + additionalHits++; + } + + for (AbstractCard card : AbstractDungeon.player.hand.group) { + if (card.costForTurn >= 2 && card != this) { + additionalHits++; + } + } + int totalHits = BASE_DRAW + additionalHits; + addToBot(new DrawCardAction(p, totalHits)); + } + + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeBlock(UPG_BLOCK); + } + } +} \ No newline at end of file diff --git a/src/main/java/sneckomod/cards/MakeshiftBlade.java b/src/main/java/sneckomod/cards/MakeshiftBlade.java new file mode 100644 index 000000000..a1581bb70 --- /dev/null +++ b/src/main/java/sneckomod/cards/MakeshiftBlade.java @@ -0,0 +1,106 @@ +package sneckomod.cards; + +import automaton.cards.Undervolt; +import collector.cards.Billow; +import collector.cards.CursedWail; +import collector.cards.IllTakeThat; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.actions.common.DamageAction; +import com.megacrit.cardcrawl.actions.common.DrawCardAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.cards.green.Choke; +import com.megacrit.cardcrawl.cards.green.PiercingWail; +import com.megacrit.cardcrawl.cards.purple.TalkToTheHand; +import com.megacrit.cardcrawl.cards.red.Disarm; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.AbstractPower; +import com.megacrit.cardcrawl.relics.AbstractRelic; +import com.megacrit.cardcrawl.relics.FrozenEgg2; +import com.megacrit.cardcrawl.relics.MoltenEgg2; +import com.megacrit.cardcrawl.relics.ToxicEgg2; +import com.megacrit.cardcrawl.vfx.combat.BiteEffect; +import slimebound.cards.TongueLash; +import sneckomod.SneckoMod; +import sneckomod.relics.UnknownEgg; + +import java.util.ArrayList; + +public class MakeshiftBlade extends AbstractSneckoCard { + // todo: try to make this one glow later + public static final String ID = SneckoMod.makeID("MakeshiftBlade"); + + // Card constants + private static final int DAMAGE = 9; + private static final int COST = 1; + private static final int MAGIC = 3; + private static int SOFTLOCK = 0; + + + public MakeshiftBlade() { + super(ID, COST, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); + baseDamage = DAMAGE; + baseMagicNumber = magicNumber = MAGIC; + baseSilly = silly = 3; + SneckoMod.loadJokeCardImage(this, "MakeshiftBlade.png"); + } + + public static boolean cardListDuplicate(ArrayList cardsList, AbstractCard card) { + System.out.println("DEBUG: Checking for duplicate: " + card.name); + for (AbstractCard alreadyHave : cardsList) { + if (alreadyHave.cardID.equals(card.cardID) && (SOFTLOCK < 100)) { + SOFTLOCK++; + System.out.println("DEBUG: Duplicate detected: " + card.name); + return true; + } + } + if (SOFTLOCK >= 100) { + System.out.println("SOFTLOCK DETECTED!!!"); + } + System.out.println("DEBUG: No Duplicate detected: " + card.name); + return false; + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + addToBot(new VFXAction(new BiteEffect(m.hb.cX, m.hb.cY), 0.3F)); + addToBot(new DamageAction(m, new DamageInfo(p, damage, DamageInfo.DamageType.NORMAL), AbstractGameAction.AttackEffect.SLASH_HEAVY)); + if (m != null && m.powers.stream().filter(power -> power.type == AbstractPower.PowerType.DEBUFF).count() >= magicNumber) { + addToBot(new DrawCardAction(p, this.silly)); + } + } + + @Override + public void onObtainCard() { + System.out.println("DEBUG: Took Makeshift Blade."); + ArrayList cardsToReward = new ArrayList<>(); + while (cardsToReward.size() < 3) { + AbstractCard newCard = SneckoMod.getOffClassCardMatchingPredicateDebuff(c -> (c.rarity != AbstractCard.CardRarity.RARE)); + + for (AbstractRelic r : AbstractDungeon.player.relics) { + r.onPreviewObtainCard(newCard); + } + + System.out.println("DEBUG: Card generated: " + newCard.name); + if (!cardListDuplicate(cardsToReward, newCard)) { + SOFTLOCK = 0; + cardsToReward.add(newCard.makeCopy()); + System.out.println("DEBUG: Card added: " + newCard.name); + } + } + + SneckoMod.addGift(cardsToReward); + ; + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeDamage(4); + } + } +} diff --git a/src/main/java/sneckomod/cards/MarkedCard.java b/src/main/java/sneckomod/cards/MarkedCard.java new file mode 100644 index 000000000..7637f2619 --- /dev/null +++ b/src/main/java/sneckomod/cards/MarkedCard.java @@ -0,0 +1,47 @@ +package sneckomod.cards; + +import basemod.BaseMod; +import com.evacipated.cardcrawl.mod.stslib.actions.common.SelectCardsInHandAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import downfall.downfallMod; +import sneckomod.SneckoMod; +import sneckomod.actions.MuddleMarkedAction; + +public class MarkedCard extends AbstractSneckoCard { + + public final static String ID = makeID("MarkedCard"); + + //stupid intellij stuff SKILL, SELF, COMMON + + private static final int MAGIC = 1; + + public MarkedCard() { + super(ID, 0, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); + SneckoMod.loadJokeCardImage(this, "MarkedCard.png"); + baseMagicNumber = magicNumber = MAGIC; + this.selfRetain = true; + exhaust = true; + } + + public void use(AbstractPlayer p, AbstractMonster m) { + addToBot(new SelectCardsInHandAction(magicNumber, BaseMod.getKeywordProper("sneckomod:muddle"), + (AbstractCard c) -> true, + (cards) -> { + for (AbstractCard card : cards) { + addToBot(new MuddleMarkedAction(card)); + } + } + )); + } + + public void upgrade() { + if (!upgraded) { + upgradeName(); + rawDescription = UPGRADE_DESCRIPTION; + this.exhaust = false; + initializeDescription(); + } + } +} \ No newline at end of file diff --git a/src/main/java/sneckomod/cards/MasterEye.java b/src/main/java/sneckomod/cards/MasterEye.java index a66a0630b..5200e1489 100644 --- a/src/main/java/sneckomod/cards/MasterEye.java +++ b/src/main/java/sneckomod/cards/MasterEye.java @@ -2,17 +2,21 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; -import sneckomod.SneckoMod; import com.megacrit.cardcrawl.powers.ConfusionPower; import com.megacrit.cardcrawl.powers.DrawPower; +import downfall.util.CardIgnore; +import sneckomod.SneckoMod; +@Deprecated +@CardIgnore public class MasterEye extends AbstractSneckoCard { public final static String ID = makeID("MasterEye"); public MasterEye() { - super(ID, 2, CardType.POWER, CardRarity.RARE, CardTarget.SELF); + super(ID, 3, CardType.POWER, CardRarity.SPECIAL, CardTarget.SELF); baseMagicNumber = magicNumber = 2; rawDescription = UPGRADE_DESCRIPTION; + tags.add(SneckoMod.SNEKPROOF); initializeDescription(); SneckoMod.loadJokeCardImage(this, "MasterEye.png"); } @@ -25,7 +29,7 @@ public void use(AbstractPlayer p, AbstractMonster m) { public void upgrade() { if (!upgraded) { upgradeName(); - upgradeBaseCost(1); + upgradeBaseCost(2); } } } \ No newline at end of file diff --git a/src/main/java/sneckomod/cards/Medusa.java b/src/main/java/sneckomod/cards/Medusa.java new file mode 100644 index 000000000..205ff56bd --- /dev/null +++ b/src/main/java/sneckomod/cards/Medusa.java @@ -0,0 +1,82 @@ +package sneckomod.cards; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.relics.AbstractRelic; +import com.megacrit.cardcrawl.vfx.combat.BiteEffect; +import sneckomod.SneckoMod; +import sneckomod.powers.VenomDebuff; + +import java.util.ArrayList; + +public class Medusa extends AbstractSneckoCard { + + public static final String ID = SneckoMod.makeID("Medusa"); + + private static final int DAMAGE = 6; + private static final int UPG_DAMAGE = 2; + private static final int MAGIC = 3; + private static final int UPG_MAGIC = 1; + private static int SOFTLOCK = 0; + + public Medusa() { + super(ID, 1, CardType.ATTACK, CardRarity.COMMON, CardTarget.ENEMY); + baseDamage = DAMAGE; + baseMagicNumber = magicNumber = MAGIC; + SneckoMod.loadJokeCardImage(this, "Medusa.png"); + } + + public static boolean cardListDuplicate(ArrayList cardsList, AbstractCard card) { + for (AbstractCard alreadyHave : cardsList) { + if (alreadyHave.cardID.equals(card.cardID) && (SOFTLOCK < 100)) { + SOFTLOCK++; + return true; + } + } + if (SOFTLOCK >= 100) { + System.out.println("SOFTLOCK DETECTED!!!"); + } + return false; + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + addToBot(new VFXAction(new BiteEffect(m.hb.cX, m.hb.cY), 0.3F)); + dmg(m, makeInfo(), AbstractGameAction.AttackEffect.NONE); + addToBot(new ApplyPowerAction(m, p, new VenomDebuff(m, magicNumber), magicNumber)); + } + + @Override + public void onObtainCard() { + ArrayList cardsToReward = new ArrayList<>(); + while (cardsToReward.size() < 3) { + AbstractCard newCard = SneckoMod.getOffClassCardMatchingPredicateDebuff(c -> (c.rarity == AbstractCard.CardRarity.COMMON)); + + for (AbstractRelic r : AbstractDungeon.player.relics) { + r.onPreviewObtainCard(newCard); + } + + if (!cardListDuplicate(cardsToReward, newCard)) { + SOFTLOCK = 0; + cardsToReward.add(newCard.makeCopy()); + } + } + + SneckoMod.addGift(cardsToReward); + ; + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeDamage(UPG_DAMAGE); + upgradeMagicNumber(UPG_MAGIC); + } + } +} diff --git a/src/main/java/sneckomod/cards/Memorize.java b/src/main/java/sneckomod/cards/Memorize.java deleted file mode 100644 index c64d67672..000000000 --- a/src/main/java/sneckomod/cards/Memorize.java +++ /dev/null @@ -1,52 +0,0 @@ -package sneckomod.cards; - -import com.evacipated.cardcrawl.mod.stslib.fields.cards.AbstractCard.FleetingField; -import com.megacrit.cardcrawl.cards.AbstractCard; -import com.megacrit.cardcrawl.characters.AbstractPlayer; -import com.megacrit.cardcrawl.dungeons.AbstractDungeon; -import com.megacrit.cardcrawl.monsters.AbstractMonster; -import sneckomod.SneckoMod; -import sneckomod.actions.MemorizeAction; -import sneckomod.patches.UnknownExtraUiPatch; - -public class Memorize extends AbstractSneckoCard { - - public final static String ID = makeID("Memorize"); - - //stupid intellij stuff SKILL, SELF, COMMON - - public Memorize() { - super(ID, 0, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); - tags.add(SneckoMod.SNEKPROOF); - tags.add(CardTags.HEALING); - FleetingField.fleeting.set(this, true); - SneckoMod.loadJokeCardImage(this, "Memorize.png"); - } - - public void use(AbstractPlayer p, AbstractMonster m) { - atb(new MemorizeAction()); - } - - public void upgrade() { - if (!upgraded) { - upgradeName(); - selfRetain = true; - rawDescription = UPGRADE_DESCRIPTION; - initializeDescription(); - } - } - - @Override - public boolean canUse(AbstractPlayer p, AbstractMonster m) { - - for (AbstractCard c : AbstractDungeon.player.hand.group) { - c.update(); - if (UnknownExtraUiPatch.parentCard.get(c) != null) { - return super.canUse(p, m); - } - } - - - return false; - } -} \ No newline at end of file diff --git a/src/main/java/sneckomod/cards/Mesmerize.java b/src/main/java/sneckomod/cards/Mesmerize.java new file mode 100644 index 000000000..6a8299d04 --- /dev/null +++ b/src/main/java/sneckomod/cards/Mesmerize.java @@ -0,0 +1,52 @@ +package sneckomod.cards; + +import basemod.BaseMod; +import com.evacipated.cardcrawl.mod.stslib.actions.common.SelectCardsInHandAction; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.actions.utility.SFXAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.StrengthPower; +import com.megacrit.cardcrawl.vfx.combat.IntimidateEffect; +import downfall.downfallMod; +import sneckomod.SneckoMod; +import sneckomod.actions.MuddleAction; + +import static collector.util.Wiz.forAllMonstersLiving; + +public class Mesmerize extends AbstractSneckoCard { + + public static final String ID = makeID("Mesmerize"); + + public Mesmerize() { + super(ID, 3, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.ALL_ENEMY); + baseMagicNumber = magicNumber = 2; + this.exhaust = true; + SneckoMod.loadJokeCardImage(this, "Mesmerize.png"); + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + AbstractDungeon.actionManager.addToBottom(new SFXAction("MONSTER_SNECKO_GLARE")); + this.addToBot(new VFXAction(p, new IntimidateEffect(p.hb.cX, p.hb.cY), 1.0F)); + forAllMonstersLiving(q -> applyToEnemy(q, new StrengthPower(q, -magicNumber))); + addToBot(new SelectCardsInHandAction(1, BaseMod.getKeywordProper("sneckomod:muddle"), + (AbstractCard c) -> true, + (cards) -> { + for (AbstractCard card : cards) { + addToBot(new MuddleAction(card)); + } + } + )); + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeMagicNumber(1); + } + } +} diff --git a/src/main/java/sneckomod/cards/MintCondition.java b/src/main/java/sneckomod/cards/MintCondition.java new file mode 100644 index 000000000..8aa2c07c4 --- /dev/null +++ b/src/main/java/sneckomod/cards/MintCondition.java @@ -0,0 +1,41 @@ +package sneckomod.cards; + +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.StrengthPower; +import com.megacrit.cardcrawl.vfx.combat.InflameEffect; +import sneckomod.SneckoMod; + +public class MintCondition extends AbstractSneckoCard { + + public final static String ID = makeID("MintCondition"); + + private static final int MAGIC = 3; + private static final int UPG_MAGIC = 1; + + //this is a show-off clone + + public MintCondition() { + super(ID, 1, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); + baseMagicNumber = magicNumber = MAGIC; + this.tags.add(SneckoMod.OVERFLOW); + SneckoMod.loadJokeCardImage(this, "MintCondition.png"); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + if (isOverflowActive(this)) { + this.addToBot(new VFXAction(p, new InflameEffect(p), 1.0F)); + this.addToBot(new ApplyPowerAction(p, p, new StrengthPower(p, this.magicNumber), this.magicNumber)); + } + } + + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeMagicNumber(UPG_MAGIC); + initializeDescription(); + } + } +} diff --git a/src/main/java/sneckomod/cards/MixItUp.java b/src/main/java/sneckomod/cards/MixItUp.java index 9143bed38..c27b0a964 100644 --- a/src/main/java/sneckomod/cards/MixItUp.java +++ b/src/main/java/sneckomod/cards/MixItUp.java @@ -1,49 +1 @@ -package sneckomod.cards; - -import com.megacrit.cardcrawl.actions.AbstractGameAction; -import com.megacrit.cardcrawl.actions.common.ObtainPotionAction; -import com.megacrit.cardcrawl.characters.AbstractPlayer; -import com.megacrit.cardcrawl.helpers.PotionHelper; -import com.megacrit.cardcrawl.monsters.AbstractMonster; -import sneckomod.SneckoMod; -import com.megacrit.cardcrawl.potions.AbstractPotion; -import com.megacrit.cardcrawl.potions.PotionSlot; - -public class MixItUp extends AbstractSneckoCard { - public final static String ID = makeID("MixItUp"); - - public MixItUp() { - super(ID, 1, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); - baseDamage = 5; - this.magicNumber = this.baseMagicNumber = 2; - exhaust = true; - tags.add(CardTags.HEALING); - SneckoMod.loadJokeCardImage(this, "MixItUp.png"); - } - - public void use(AbstractPlayer p, AbstractMonster m) { - atb(new AbstractGameAction() { - @Override - public void update() { - isDone = true; - for (AbstractPotion q : p.potions) { - if (!(q instanceof PotionSlot)) { - p.removePotion(q); - att(new ObtainPotionAction(PotionHelper.getRandomPotion())); - } - } - } - }); - for (int i = 0; i < this.magicNumber; i++) { - dmg(m, makeInfo(), AbstractGameAction.AttackEffect.BLUNT_LIGHT); - } - - } - - public void upgrade() { - if (!upgraded) { - upgradeName(); - upgradeMagicNumber(1); - } - } -} \ No newline at end of file +//deprecated \ No newline at end of file diff --git a/src/main/java/sneckomod/cards/MorePower.java b/src/main/java/sneckomod/cards/MorePower.java deleted file mode 100644 index 510f77a3d..000000000 --- a/src/main/java/sneckomod/cards/MorePower.java +++ /dev/null @@ -1,30 +0,0 @@ -package sneckomod.cards; - -import com.megacrit.cardcrawl.characters.AbstractPlayer; -import com.megacrit.cardcrawl.monsters.AbstractMonster; -import sneckomod.SneckoMod; -import sneckomod.powers.UnknownUpgradedPostCombatPower; - -public class MorePower extends AbstractSneckoCard { - - public final static String ID = makeID("MorePower"); - - //stupid intellij stuff POWER, SELF, UNCOMMON - - public MorePower() { - super(ID, 1, CardType.POWER, CardRarity.RARE, CardTarget.SELF); - tags.add(CardTags.HEALING); - SneckoMod.loadJokeCardImage(this, "MorePower.png"); - } - - public void use(AbstractPlayer p, AbstractMonster m) { - applyToSelf(new UnknownUpgradedPostCombatPower(1)); - } - - public void upgrade() { - if (!upgraded) { - upgradeName(); - upgradeBaseCost(0); - } - } -} \ No newline at end of file diff --git a/src/main/java/sneckomod/cards/Mudshield.java b/src/main/java/sneckomod/cards/Mudshield.java index dc942b99a..ea801bfcd 100644 --- a/src/main/java/sneckomod/cards/Mudshield.java +++ b/src/main/java/sneckomod/cards/Mudshield.java @@ -12,7 +12,7 @@ public class Mudshield extends AbstractSneckoCard { //stupid intellij stuff POWER, SELF, RARE public Mudshield() { - super(ID, 2, CardType.POWER, CardRarity.RARE, CardTarget.SELF); + super(ID, 1, CardType.POWER, CardRarity.RARE, CardTarget.SELF); baseMagicNumber = magicNumber = 2; SneckoMod.loadJokeCardImage(this, "Mudshield.png"); } @@ -24,9 +24,7 @@ public void use(AbstractPlayer p, AbstractMonster m) { public void upgrade() { if (!upgraded) { upgradeName(); - isInnate = true; - rawDescription = UPGRADE_DESCRIPTION; - initializeDescription(); + upgradeMagicNumber(1); } } } \ No newline at end of file diff --git a/src/main/java/sneckomod/cards/Nope.java b/src/main/java/sneckomod/cards/Nope.java index 735afffbc..95d06cbb0 100644 --- a/src/main/java/sneckomod/cards/Nope.java +++ b/src/main/java/sneckomod/cards/Nope.java @@ -2,7 +2,6 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; -import com.megacrit.cardcrawl.monsters.city.Snecko; import sneckomod.SneckoMod; import sneckomod.actions.NopeAction; @@ -12,19 +11,24 @@ public class Nope extends AbstractSneckoCard { //stupid intellij stuff SKILL, SELF, COMMON + private static final int BLOCK = 7; + private static final int UPG_BLOCK = 3; + public Nope() { - super(ID, 0, CardType.SKILL, CardRarity.COMMON, CardTarget.SELF); - tags.add(SneckoMod.SNEKPROOF); + super(ID, 1, CardType.SKILL, CardRarity.COMMON, CardTarget.SELF); + baseBlock = BLOCK; SneckoMod.loadJokeCardImage(this, "Nope.png"); } public void use(AbstractPlayer p, AbstractMonster m) { - atb(new NopeAction(upgraded)); + blck(); + atb(new NopeAction()); } public void upgrade() { if (!upgraded) { upgradeName(); + upgradeBlock(UPG_BLOCK); rawDescription = UPGRADE_DESCRIPTION; initializeDescription(); } diff --git a/src/main/java/sneckomod/cards/OtherworldlySlash.java b/src/main/java/sneckomod/cards/OtherworldlySlash.java new file mode 100644 index 000000000..240082077 --- /dev/null +++ b/src/main/java/sneckomod/cards/OtherworldlySlash.java @@ -0,0 +1,95 @@ +package sneckomod.cards; + +import com.evacipated.cardcrawl.mod.stslib.cards.interfaces.OnObtainCard; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.relics.AbstractRelic; +import com.megacrit.cardcrawl.relics.FrozenEgg2; +import com.megacrit.cardcrawl.relics.MoltenEgg2; +import com.megacrit.cardcrawl.relics.ToxicEgg2; +import hermit.cards.AbstractDynamicCard; +import sneckomod.SneckoMod; +import sneckomod.relics.UnknownEgg; + +import java.util.ArrayList; + +public class OtherworldlySlash extends AbstractSneckoCard implements OnObtainCard { + + public final static String ID = makeID("OtherworldlySlash"); + + private static final int DAMAGE = 7; + private static final int UPG_DAMAGE = 2; + private static int SOFTLOCK = 0; + + public OtherworldlySlash() { + super(ID, 1, CardType.ATTACK, CardRarity.COMMON, CardTarget.ENEMY); + baseDamage = DAMAGE; + SneckoMod.loadJokeCardImage(this, "OtherworldlySlash.png"); + } + + public static boolean cardListDuplicate(ArrayList cardsList, AbstractCard card) { + for (AbstractCard alreadyHave : cardsList) { + if (alreadyHave.cardID.equals(card.cardID) && (SOFTLOCK < 100)) { + SOFTLOCK++; + return true; + } + } + if (SOFTLOCK >= 100) { + System.out.println("SOFTLOCK DETECTED!!!"); + } + return false; + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + dmg(m, makeInfo(), AbstractGameAction.AttackEffect.SLASH_HEAVY); + boolean playedOffClassCard = AbstractDungeon.actionManager.cardsPlayedThisTurn.stream() + .anyMatch(card -> card.color != this.color); + + if (playedOffClassCard) { + dmg(m, makeInfo(), AbstractGameAction.AttackEffect.SLASH_HEAVY); + } + } + + @Override + public void triggerOnGlowCheck() { // it glows now. + boolean playedOffClassCard = AbstractDungeon.actionManager.cardsPlayedThisTurn.stream() + .anyMatch(card -> card.color != this.color); + if (playedOffClassCard) { + this.glowColor = AbstractDynamicCard.GOLD_BORDER_GLOW_COLOR.cpy(); + } else { + this.glowColor = AbstractDynamicCard.BLUE_BORDER_GLOW_COLOR.cpy(); + } + } + + @Override + public void onObtainCard() { + ArrayList cardsToReward = new ArrayList<>(); + while (cardsToReward.size() < 3) { + AbstractCard newCard = SneckoMod.getOffClassCardMatchingPredicate(c -> c.rarity == AbstractCard.CardRarity.COMMON); + + for (AbstractRelic r : AbstractDungeon.player.relics) { + r.onPreviewObtainCard(newCard); + } + + if (!cardListDuplicate(cardsToReward, newCard)) { + SOFTLOCK = 0; + cardsToReward.add(newCard.makeCopy()); + } + } + + SneckoMod.addGift(cardsToReward); + ; + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeDamage(UPG_DAMAGE); + } + } +} diff --git a/src/main/java/sneckomod/cards/OverwhelmingPresence.java b/src/main/java/sneckomod/cards/OverwhelmingPresence.java new file mode 100644 index 000000000..e0f69c42b --- /dev/null +++ b/src/main/java/sneckomod/cards/OverwhelmingPresence.java @@ -0,0 +1,30 @@ +package sneckomod.cards; + +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; +import sneckomod.powers.OverwhelmingPresencePower; + +public class OverwhelmingPresence extends AbstractSneckoCard { + + public final static String ID = makeID("OverwhelmingPresence"); + + public OverwhelmingPresence() { + super(ID, 1, CardType.POWER, CardRarity.UNCOMMON, CardTarget.SELF); + SneckoMod.loadJokeCardImage(this, "OverwhelmingPresence.png"); + this.isEthereal = true; + } + + public void use(AbstractPlayer p, AbstractMonster m) { + applyToSelf(new OverwhelmingPresencePower(p, 1)); + } + + public void upgrade() { + if (!upgraded) { + upgradeName(); + this.isEthereal = false; + rawDescription = UPGRADE_DESCRIPTION; + initializeDescription(); + } + } +} diff --git a/src/main/java/sneckomod/cards/PerpetualSerpent.java b/src/main/java/sneckomod/cards/PerpetualSerpent.java new file mode 100644 index 000000000..748f10660 --- /dev/null +++ b/src/main/java/sneckomod/cards/PerpetualSerpent.java @@ -0,0 +1,39 @@ +package sneckomod.cards; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.GainEnergyAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; + +public class PerpetualSerpent extends AbstractSneckoCard { + + public static final String ID = makeID("PerpetualSerpent"); + + private static final int DAMAGE = 20; + private static final int UPG_DAMAGE = 5; + private static final int MAGIC = 2; + + public PerpetualSerpent() { + super(ID, 2, CardType.ATTACK, CardRarity.RARE, CardTarget.ENEMY); + baseDamage = DAMAGE; + SneckoMod.loadJokeCardImage(this, "PerpetualSerpent.png"); + this.tags.add(SneckoMod.OVERFLOW); + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + dmg(m, makeInfo(), AbstractGameAction.AttackEffect.SLASH_HEAVY); + if (isOverflowActive(this)) { + addToBot(new GainEnergyAction(MAGIC)); + } + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeDamage(UPG_DAMAGE); + } + } +} diff --git a/src/main/java/sneckomod/cards/PoisonParadise.java b/src/main/java/sneckomod/cards/PoisonParadise.java new file mode 100644 index 000000000..22235689a --- /dev/null +++ b/src/main/java/sneckomod/cards/PoisonParadise.java @@ -0,0 +1,28 @@ +package sneckomod.cards; + +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; +import sneckomod.powers.FountainPower; + +public class PoisonParadise extends AbstractSneckoCard { + + public final static String ID = SneckoMod.makeID("PoisonParadise"); + + public PoisonParadise() { + super(ID, 1, CardType.POWER, CardRarity.RARE, CardTarget.SELF); + baseMagicNumber = magicNumber = 4; + SneckoMod.loadJokeCardImage(this, "PoisonParadise.png"); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + applyToSelf(new FountainPower(this.magicNumber)); + } + + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeMagicNumber(2); + } + } +} diff --git a/src/main/java/sneckomod/cards/PowerShot.java b/src/main/java/sneckomod/cards/PowerShot.java new file mode 100644 index 000000000..07022d71b --- /dev/null +++ b/src/main/java/sneckomod/cards/PowerShot.java @@ -0,0 +1,42 @@ +package sneckomod.cards; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.DamageAction; +import com.megacrit.cardcrawl.actions.utility.DiscardToHandAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import hermit.util.Wiz; +import sneckomod.SneckoMod; + +public class PowerShot extends AbstractSneckoCard { + + public static final String ID = SneckoMod.makeID("PowerShot"); + private static final int DAMAGE = 5; + private static final int UPGRADE_DAMAGE = 2; + + public PowerShot() { + super(ID, 0, CardType.ATTACK, CardRarity.COMMON, CardTarget.ENEMY); + baseDamage = DAMAGE; + SneckoMod.loadJokeCardImage(this, "PowerShot.png"); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + this.addToBot(new DamageAction(m, new DamageInfo(p, this.damage, this.damageTypeForTurn), AbstractGameAction.AttackEffect.FIRE)); + } + + public void triggerOnCardPlayed(AbstractCard c) { + if (c.type == CardType.POWER) + Wiz.atb(new DiscardToHandAction(this)); + } + + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeDamage(UPGRADE_DAMAGE); + } + } +} diff --git a/src/main/java/sneckomod/cards/PureSnecko.java b/src/main/java/sneckomod/cards/PureSnecko.java index 2fd9e4058..4ba66e271 100644 --- a/src/main/java/sneckomod/cards/PureSnecko.java +++ b/src/main/java/sneckomod/cards/PureSnecko.java @@ -1,32 +1,58 @@ package sneckomod.cards; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.DrawCardAction; +import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; import sneckomod.SneckoMod; -import sneckomod.actions.PureSneckoAction; +import sneckomod.actions.MuddleAction; + +import java.util.ArrayList; public class PureSnecko extends AbstractSneckoCard { - public final static String ID = makeID("PureSnecko"); + public final static String ID = SneckoMod.makeID("PureSnecko"); + + //I'm sorry but this card just HAD to be changed, the action still exists though - //stupid intellij stuff SKILL, SELF, UNCOMMON + // SKILL, SELF, UNCOMMON + private static final int MAGIC = 3; + private static final int UPG_MAGIC = 1; public PureSnecko() { - super(ID, 0, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); - tags.add(SneckoMod.SNEKPROOF); + super(ID, 1, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); + baseMagicNumber = magicNumber = MAGIC; + SneckoMod.loadJokeCardImage(this, "PureSnecko.png"); } + @Override public void use(AbstractPlayer p, AbstractMonster m) { - // if (upgraded) atb(new DrawCardAction(1)); - atb(new PureSneckoAction(p, upgraded)); + ArrayList preHand = new ArrayList<>(p.hand.group); + addToBot(new DrawCardAction(magicNumber, new AbstractGameAction() { + @Override + public void update() { + ArrayList drawnCards = new ArrayList<>(); + for (AbstractCard card : p.hand.group) { + if (!preHand.contains(card)) { + drawnCards.add(card); + } + } + for (AbstractCard card : drawnCards) { + addToBot(new MuddleAction(card)); + } + isDone = true; + } + })); } + @Override public void upgrade() { if (!upgraded) { upgradeName(); - rawDescription = UPGRADE_DESCRIPTION; + upgradeMagicNumber(UPG_MAGIC); initializeDescription(); } } -} \ No newline at end of file +} diff --git a/src/main/java/sneckomod/cards/QuickBite.java b/src/main/java/sneckomod/cards/QuickBite.java index ad0596511..b0c55b8b4 100644 --- a/src/main/java/sneckomod/cards/QuickBite.java +++ b/src/main/java/sneckomod/cards/QuickBite.java @@ -3,12 +3,16 @@ import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.animations.VFXAction; import com.megacrit.cardcrawl.actions.common.DrawCardAction; +import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.vfx.combat.BiteEffect; import sneckomod.SneckoMod; +import sneckomod.actions.MuddleAction; import sneckomod.actions.MuddleRandomCardAction; +import java.util.ArrayList; + public class QuickBite extends AbstractSneckoCard { public final static String ID = makeID("QuickBite"); @@ -16,28 +20,34 @@ public class QuickBite extends AbstractSneckoCard { //stupid intellij stuff ATTACK, ENEMY, COMMON private static final int DAMAGE = 9; - private static final int UPG_DAMAGE = 3; - - private static final int MAGIC = 0; - private static final int UPG_MAGIC = 1; + private static final int UPG_DAMAGE = 1; public QuickBite() { super(ID, 1, CardType.ATTACK, CardRarity.COMMON, CardTarget.ENEMY); baseDamage = DAMAGE; - baseMagicNumber = magicNumber = MAGIC; - tags.add(SneckoMod.RNG); + baseMagicNumber = magicNumber = 1; SneckoMod.loadJokeCardImage(this, "QuickBite.png"); } public void use(AbstractPlayer p, AbstractMonster m) { atb(new VFXAction(new BiteEffect(m.hb.cX, m.hb.cY), 0.3F));// 117 dmg(m, makeInfo(), AbstractGameAction.AttackEffect.NONE); - int x = getRandomNum(magicNumber, 2, this); - - if (x > 0) - atb(new DrawCardAction(x)); - - atb(new MuddleRandomCardAction(1, true)); + ArrayList preHand = new ArrayList<>(p.hand.group); + addToBot(new DrawCardAction(magicNumber, new AbstractGameAction() { + @Override + public void update() { + ArrayList drawnCards = new ArrayList<>(); + for (AbstractCard card : p.hand.group) { + if (!preHand.contains(card)) { + drawnCards.add(card); + } + } + for (AbstractCard card : drawnCards) { + addToBot(new MuddleAction(card)); + } + isDone = true; + } + })); } @@ -45,7 +55,9 @@ public void upgrade() { if (!upgraded) { upgradeName(); upgradeDamage(UPG_DAMAGE); - upgradeMagicNumber(UPG_MAGIC); + upgradeMagicNumber(1); + rawDescription = UPGRADE_DESCRIPTION; + initializeDescription(); } } } \ No newline at end of file diff --git a/src/main/java/sneckomod/cards/QuickMove.java b/src/main/java/sneckomod/cards/QuickMove.java index 293427268..09b72fe7c 100644 --- a/src/main/java/sneckomod/cards/QuickMove.java +++ b/src/main/java/sneckomod/cards/QuickMove.java @@ -1,41 +1,47 @@ package sneckomod.cards; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.VulnerablePower; import sneckomod.SneckoMod; -import sneckomod.actions.MuddleRandomCardAction; public class QuickMove extends AbstractSneckoCard { - public final static String ID = makeID("QuickMove"); - - //stupid intellij stuff SKILL, SELF, COMMON - - private static final int BLOCK = 8; - private static final int UPG_BLOCK = 2; + public static final String ID = SneckoMod.makeID("QuickMove"); + private static final int BASE_BLOCK = 7; + private static final int UPG_BLOCK = 3; private static final int MAGIC = 1; - private static final int UPG_MAGIC = 1; + //private static final int UPG_MAGIC = 1; public QuickMove() { super(ID, 1, CardType.SKILL, CardRarity.COMMON, CardTarget.SELF); - baseBlock = BLOCK; baseMagicNumber = magicNumber = MAGIC; + baseBlock = BASE_BLOCK; + tags.add(SneckoMod.OVERFLOW); SneckoMod.loadJokeCardImage(this, "QuickMove.png"); } + @Override public void use(AbstractPlayer p, AbstractMonster m) { blck(); - atb(new MuddleRandomCardAction(magicNumber, true)); + if (isOverflowActive(this)) { + for (AbstractMonster monster : AbstractDungeon.getMonsters().monsters) { + if ((!monster.isDead) && (!monster.isDying) && !monster.halfDead) { + atb(new ApplyPowerAction(monster, p, new VulnerablePower(monster, this.magicNumber, false), this.magicNumber, true, AbstractGameAction.AttackEffect.NONE)); + } + } + } } + @Override public void upgrade() { if (!upgraded) { upgradeName(); upgradeBlock(UPG_BLOCK); - upgradeMagicNumber(UPG_MAGIC); - rawDescription = UPGRADE_DESCRIPTION; - initializeDescription(); } } -} \ No newline at end of file +} diff --git a/src/main/java/sneckomod/cards/RainOfDice.java b/src/main/java/sneckomod/cards/RainOfDice.java index b2ec76f5f..e05c9e103 100644 --- a/src/main/java/sneckomod/cards/RainOfDice.java +++ b/src/main/java/sneckomod/cards/RainOfDice.java @@ -1,65 +1,71 @@ package sneckomod.cards; +import basemod.BaseMod; +import com.evacipated.cardcrawl.mod.stslib.actions.common.SelectCardsInHandAction; import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.DamageAction; +import com.megacrit.cardcrawl.actions.common.MakeTempCardInHandAction; +import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.cards.DamageInfo; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import downfall.downfallMod; import sneckomod.SneckoMod; import sneckomod.actions.MuddleAction; -import sneckomod.actions.NoApplyRandomDamageAction; -import sneckomod.powers.MuddleDrawnCardsPower; public class RainOfDice extends AbstractSneckoCard { - public final static String ID = makeID("RainOfDice"); + public static final String ID = SneckoMod.makeID("RainOfDice"); + + private static final int BASE_DAMAGE = 6; + private static final int UPGRADE_DAMAGE = 2; public RainOfDice() { - super(ID, 1, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ALL_ENEMY); - baseSilly = silly = 6; - baseDamage = 12; - this.returnToHand = true; - tags.add(SneckoMod.RNG); + super(ID, 1, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); + baseDamage = BASE_DAMAGE; + exhaust = true; SneckoMod.loadJokeCardImage(this, "RainOfDice.png"); } @Override public void applyPowers() { super.applyPowers(); - int CURRENT_SILLY = baseSilly; - int CURRENT_DAMAGE = baseDamage; - baseDamage = CURRENT_SILLY; - super.applyPowers(); - silly = damage; - isSillyModified = damage != baseDamage; - - baseDamage = CURRENT_DAMAGE; - super.applyPowers(); } @Override public void calculateCardDamage(final AbstractMonster m) { - int CURRENT_SILLY = baseSilly; - int CURRENT_DAMAGE = baseDamage; - baseDamage = CURRENT_SILLY; - super.calculateCardDamage(m); - silly = damage; - isSillyModified = damage != baseDamage; - - baseDamage = CURRENT_DAMAGE; + int originalBaseDamage = baseDamage; super.calculateCardDamage(m); + baseDamage = originalBaseDamage; } + @Override public void use(AbstractPlayer p, AbstractMonster m) { - atb(new NoApplyRandomDamageAction(AbstractDungeon.getMonsters().getRandomMonster(true), silly, damage, 1, AbstractGameAction.AttackEffect.BLUNT_LIGHT, this, DamageInfo.DamageType.NORMAL)); - atb(new MuddleAction(this)); + addToBot(new DamageAction(m, new DamageInfo(p, damage, DamageInfo.DamageType.NORMAL), AbstractGameAction.AttackEffect.BLUNT_LIGHT)); + + addToBot(new SelectCardsInHandAction(1, BaseMod.getKeywordProper("sneckomod:muddle"), + (AbstractCard c) -> true, + (cards) -> { + for (AbstractCard card : cards) { + addToBot(new MuddleAction(card)); + } + } + )); + AbstractCard g = new RainOfDice(); + if (this.upgraded) { + g.upgrade(); + } + AbstractDungeon.actionManager.addToBottom(new MakeTempCardInHandAction(g)); } + @Override public void upgrade() { if (!upgraded) { upgradeName(); - upgradeSilly(3); - upgradeDamage(3); + upgradeDamage(UPGRADE_DAMAGE); + rawDescription = UPGRADE_DESCRIPTION; + initializeDescription(); } } -} \ No newline at end of file +} diff --git a/src/main/java/sneckomod/cards/Restock.java b/src/main/java/sneckomod/cards/Restock.java index 5551ff575..08ad27c78 100644 --- a/src/main/java/sneckomod/cards/Restock.java +++ b/src/main/java/sneckomod/cards/Restock.java @@ -5,24 +5,26 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; import sneckomod.SneckoMod; +import sneckomod.actions.MuddleHandAction; public class Restock extends AbstractSneckoCard { public final static String ID = makeID("Restock"); //stupid intellij stuff SKILL, SELF, RARE + private static final int MAGIC = 6; public Restock() { super(ID, 1, CardType.SKILL, CardRarity.RARE, CardTarget.SELF); - tags.add(SneckoMod.SNEKPROOF); - tags.add(SneckoMod.RNG); - this.exhaust = true; + baseMagicNumber = magicNumber = MAGIC; + exhaust = true; SneckoMod.loadJokeCardImage(this, "Restock.png"); } public void use(AbstractPlayer p, AbstractMonster m) { atb(new DiscardAction(p, p, p.hand.size(), true)); - atb(new DrawCardAction(getRandomNum(5, 10, this))); + atb(new DrawCardAction(magicNumber)); + atb(new MuddleHandAction()); // it's 12% cooler now. } public void upgrade() { diff --git a/src/main/java/sneckomod/cards/RiskySword.java b/src/main/java/sneckomod/cards/RiskySword.java new file mode 100644 index 000000000..c3cffce35 --- /dev/null +++ b/src/main/java/sneckomod/cards/RiskySword.java @@ -0,0 +1,46 @@ +package sneckomod.cards; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.vfx.combat.BiteEffect; +import sneckomod.SneckoMod; + +public class RiskySword extends AbstractSneckoCard { + + public final static String ID = makeID("RiskySword"); + + private static final int DAMAGE = 8; + private static final int MAGIC = 8; + private static final int UPGRADE_DAMAGE = 2; + private static final int UPGRADE_MAGIC = 2; + + public RiskySword() { + super(ID, 1, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); + baseDamage = DAMAGE; + baseMagicNumber = magicNumber = MAGIC; + SneckoMod.loadJokeCardImage(this, "RiskySword.png"); + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + dmg(m, makeInfo(), AbstractGameAction.AttackEffect.SLASH_DIAGONAL); + } + + @Override + public void onMuddledSword() { + flash(); + baseDamage += magicNumber; + applyPowers(); + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeDamage(UPGRADE_DAMAGE); + upgradeMagicNumber(UPGRADE_MAGIC); + } + } +} diff --git a/src/main/java/sneckomod/cards/Rotation.java b/src/main/java/sneckomod/cards/Rotation.java index 86d19adf9..c27b0a964 100644 --- a/src/main/java/sneckomod/cards/Rotation.java +++ b/src/main/java/sneckomod/cards/Rotation.java @@ -1,55 +1 @@ -package sneckomod.cards; - -import com.megacrit.cardcrawl.actions.AbstractGameAction; -import com.megacrit.cardcrawl.actions.common.DiscardSpecificCardAction; -import com.megacrit.cardcrawl.actions.common.DrawCardAction; -import com.megacrit.cardcrawl.cards.AbstractCard; -import com.megacrit.cardcrawl.characters.AbstractPlayer; -import com.megacrit.cardcrawl.dungeons.AbstractDungeon; -import com.megacrit.cardcrawl.monsters.AbstractMonster; -import sneckomod.SneckoMod; - -import java.util.ArrayList; - -public class Rotation extends AbstractSneckoCard { - - public final static String ID = makeID("Rotation"); - - public Rotation() { - super(ID, 0, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); - baseMagicNumber = magicNumber = 0; - tags.add(SneckoMod.SNEKPROOF); - SneckoMod.loadJokeCardImage(this, "Rotation.png"); - } - - public void use(AbstractPlayer p, AbstractMonster m) { - atb(new AbstractGameAction() { - @Override - public void update() { - isDone = true; - int x = 0; - ArrayList cardsToDiscard = new ArrayList<>(); - for (AbstractCard q : p.hand.group) { - if (q.color != AbstractDungeon.player.getCardColor()) { - cardsToDiscard.add(q); - x++; - } - } - x += magicNumber; - att(new DrawCardAction(x)); - for (AbstractCard q : cardsToDiscard) { - att(new DiscardSpecificCardAction(q)); - } - } - }); - } - - public void upgrade() { - if (!upgraded) { - upgradeName(); - upgradeMagicNumber(1); - rawDescription = UPGRADE_DESCRIPTION; - initializeDescription(); - } - } -} \ No newline at end of file +//deprecated \ No newline at end of file diff --git a/src/main/java/sneckomod/cards/RoundaboutSwing.java b/src/main/java/sneckomod/cards/RoundaboutSwing.java new file mode 100644 index 000000000..8d2254881 --- /dev/null +++ b/src/main/java/sneckomod/cards/RoundaboutSwing.java @@ -0,0 +1,39 @@ +package sneckomod.cards; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.PutOnDeckAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.DrawCardNextTurnPower; +import sneckomod.SneckoMod; + +public class RoundaboutSwing extends AbstractSneckoCard { + + public static final String ID = SneckoMod.makeID("RoundaboutSwing"); + + private static final int DAMAGE = 8; + private static final int UPGRADE_DAMAGE = 3; + private static final int MAGIC = 2; + + public RoundaboutSwing() { + super(ID, 1, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); + baseDamage = DAMAGE; + magicNumber = baseMagicNumber = MAGIC; + SneckoMod.loadJokeCardImage(this, "RoundaboutSwing.png"); + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + dmg(m, makeInfo(), AbstractGameAction.AttackEffect.SLASH_HEAVY); + this.addToBot(new PutOnDeckAction(p, p, 1, false)); + applyToSelf(new DrawCardNextTurnPower(p, magicNumber)); + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeDamage(UPGRADE_DAMAGE); + } + } +} diff --git a/src/main/java/sneckomod/cards/SaveForLater.java b/src/main/java/sneckomod/cards/SaveForLater.java new file mode 100644 index 000000000..70a544e8e --- /dev/null +++ b/src/main/java/sneckomod/cards/SaveForLater.java @@ -0,0 +1,45 @@ +package sneckomod.cards; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.DamageAction; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import hermit.powers.CoalescencePower; +import sneckomod.SneckoMod; + +public class SaveForLater extends AbstractSneckoCard { + + public static final String ID = SneckoMod.makeID("SaveForLater"); + + private static final int MAGIC = 1; + private static final int DAMAGE = 8; + private static final int UPGRADE_DAMAGE = 3; + private static final int UPGRADE_MAGIC = 1; + + public SaveForLater() { + super(ID, 1, CardType.ATTACK, CardRarity.COMMON, CardTarget.ENEMY); + baseDamage = DAMAGE; + baseMagicNumber = magicNumber = MAGIC; + SneckoMod.loadJokeCardImage(this, "SaveForLater.png"); + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + addToBot(new DamageAction(m, new DamageInfo(p, damage, damageTypeForTurn), AbstractGameAction.AttackEffect.SLASH_HORIZONTAL)); + this.addToBot(new ApplyPowerAction(p, p, new CoalescencePower(p, magicNumber), magicNumber)); + } + + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeDamage(UPGRADE_DAMAGE); + upgradeMagicNumber(UPGRADE_MAGIC); + rawDescription = UPGRADE_DESCRIPTION; + initializeDescription(); + } + } +} diff --git a/src/main/java/sneckomod/cards/SerpentBottle.java b/src/main/java/sneckomod/cards/SerpentBottle.java new file mode 100644 index 000000000..44dccce5a --- /dev/null +++ b/src/main/java/sneckomod/cards/SerpentBottle.java @@ -0,0 +1,55 @@ +package sneckomod.cards; + +import basemod.BaseMod; +import com.evacipated.cardcrawl.mod.stslib.actions.common.SelectCardsInHandAction; +import com.megacrit.cardcrawl.actions.common.DrawCardAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import downfall.downfallMod; +import sneckomod.SneckoMod; +import sneckomod.actions.MuddleAction; + +public class SerpentBottle extends AbstractSneckoCard { + + public static final String ID = SneckoMod.makeID("SerpentBottle"); + + private static final int MAGIC = 1; + private static final int UPG_MAGIC = 1; + private static final int BASE_SILLY = 2; + + //snecko adrenaline + + public SerpentBottle() { + super(ID, 0, CardType.SKILL, CardRarity.RARE, CardTarget.SELF); + baseMagicNumber = magicNumber = MAGIC; + baseSilly = silly = 2; + SneckoMod.loadJokeCardImage(this, "SerpentBottle.png"); + exhaust = true; + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + + addToBot(new DrawCardAction(p, this.silly)); + + addToBot(new SelectCardsInHandAction(magicNumber, BaseMod.getKeywordProper("sneckomod:muddle"), + (AbstractCard c) -> true, + (cards) -> { + for (AbstractCard card : cards) { + addToBot(new MuddleAction(card)); + } + } + )); + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeMagicNumber(UPG_MAGIC); + rawDescription = UPGRADE_DESCRIPTION; + initializeDescription(); + } + } +} diff --git a/src/main/java/sneckomod/cards/SerpentIdol.java b/src/main/java/sneckomod/cards/SerpentIdol.java index 616a83d60..d6fb4a4d3 100644 --- a/src/main/java/sneckomod/cards/SerpentIdol.java +++ b/src/main/java/sneckomod/cards/SerpentIdol.java @@ -14,8 +14,8 @@ public class SerpentIdol extends AbstractSneckoCard { public SerpentIdol() { super(ID, 1, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); exhaust = true; - tags.add(SneckoMod.SNEKPROOF); SneckoMod.loadJokeCardImage(this, "SerpentIdol.png"); + magicNumber = baseMagicNumber = 3; } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/sneckomod/cards/SerpentMind.java b/src/main/java/sneckomod/cards/SerpentMind.java index ed8d1cb02..31aa71a3c 100644 --- a/src/main/java/sneckomod/cards/SerpentMind.java +++ b/src/main/java/sneckomod/cards/SerpentMind.java @@ -1,36 +1,80 @@ package sneckomod.cards; import basemod.helpers.BaseModCardTags; +import com.evacipated.cardcrawl.mod.stslib.cards.interfaces.OnObtainCard; +import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.relics.AbstractRelic; +import com.megacrit.cardcrawl.relics.FrozenEgg2; +import com.megacrit.cardcrawl.relics.MoltenEgg2; +import com.megacrit.cardcrawl.relics.ToxicEgg2; import sneckomod.SneckoMod; import sneckomod.powers.SerpentMindPower; +import sneckomod.relics.UnknownEgg; -public class SerpentMind extends AbstractSneckoCard { +import java.util.ArrayList; + +public class SerpentMind extends AbstractSneckoCard implements OnObtainCard { public final static String ID = makeID("SerpentMind"); //stupid intellij stuff POWER, SELF, RARE private static final int MAGIC = 1; + private static int SOFTLOCK = 0; public SerpentMind() { super(ID, 3, CardType.POWER, CardRarity.RARE, CardTarget.SELF); baseMagicNumber = magicNumber = MAGIC; - tags.add(BaseModCardTags.FORM); - tags.add(SneckoMod.SNEKPROOF); + isEthereal = true; SneckoMod.loadJokeCardImage(this, "SerpentMind.png"); } + public static boolean cardListDuplicate(ArrayList cardsList, AbstractCard card) { + for (AbstractCard alreadyHave : cardsList) { + if (alreadyHave.cardID.equals(card.cardID) && (SOFTLOCK < 100)) { + SOFTLOCK++; + return true; + } + } + if (SOFTLOCK >= 100) { + System.out.println("SOFTLOCK DETECTED!!!"); + } + return false; + } + public void use(AbstractPlayer p, AbstractMonster m) { - applyToSelf(new SerpentMindPower(1)); + applyToSelf(new SerpentMindPower(magicNumber)); + } + + @Override + public void onObtainCard() { + ArrayList cardsToReward = new ArrayList<>(); + while (cardsToReward.size() < 3) { + AbstractCard newCard = SneckoMod.getOffClassCardMatchingPredicate(c -> c.rarity == AbstractCard.CardRarity.RARE); + + for (AbstractRelic r : AbstractDungeon.player.relics) { + r.onPreviewObtainCard(newCard); + } + + if (newCard != null && !cardListDuplicate(cardsToReward, newCard)) { + SOFTLOCK = 0; + AbstractCard cardCopy = newCard.makeCopy(); + cardsToReward.add(cardCopy); + } + } + + SneckoMod.addGift(cardsToReward); + ; } public void upgrade() { if (!upgraded) { - tags.remove(SneckoMod.SNEKPROOF); upgradeName(); + isEthereal = false; rawDescription = UPGRADE_DESCRIPTION; initializeDescription(); } diff --git a/src/main/java/sneckomod/cards/SerpentineSleuth.java b/src/main/java/sneckomod/cards/SerpentineSleuth.java new file mode 100644 index 000000000..a45353dfe --- /dev/null +++ b/src/main/java/sneckomod/cards/SerpentineSleuth.java @@ -0,0 +1,74 @@ +package sneckomod.cards; + +import com.evacipated.cardcrawl.mod.stslib.cards.interfaces.OnObtainCard; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.relics.AbstractRelic; +import com.megacrit.cardcrawl.relics.FrozenEgg2; +import com.megacrit.cardcrawl.relics.MoltenEgg2; +import com.megacrit.cardcrawl.relics.ToxicEgg2; +import sneckomod.SneckoMod; +import sneckomod.powers.SerpentineSleuthPower; +import sneckomod.relics.UnknownEgg; + +import java.util.ArrayList; + +public class SerpentineSleuth extends AbstractSneckoCard implements OnObtainCard { + + public final static String ID = makeID("SerpentineSleuth"); + + //stupid intellij stuff POWER, SELF, RARE + private static int SOFTLOCK = 0; + + public SerpentineSleuth() { + super(ID, 4, CardType.POWER, CardRarity.RARE, CardTarget.SELF); + isEthereal = true; + SneckoMod.loadJokeCardImage(this, "SerpentineSleuth.png"); + } + + public static boolean cardListDuplicate(ArrayList cardsList, AbstractCard card) { + for (AbstractCard alreadyHave : cardsList) { + if (alreadyHave.cardID.equals(card.cardID) && (SOFTLOCK < 100)) { + SOFTLOCK++; + return true; + } + } + if (SOFTLOCK >= 100) { + System.out.println("SOFTLOCK DETECTED!!!"); + } + SOFTLOCK = 0; + return false; + } + + public void use(AbstractPlayer p, AbstractMonster m) { + applyToSelf(new SerpentineSleuthPower(1)); + } + + @Override + public void onObtainCard() { + ArrayList cardsToReward = new ArrayList<>(); + while (cardsToReward.size() < 3) { + AbstractCard newCard = SneckoMod.getOffClassCardMatchingPredicate(c -> c.type == AbstractCard.CardType.POWER && c.rarity == AbstractCard.CardRarity.RARE); + + for (AbstractRelic r : AbstractDungeon.player.relics) { + r.onPreviewObtainCard(newCard); + } + + if (!cardListDuplicate(cardsToReward, newCard)) { + cardsToReward.add(newCard.makeCopy()); + } + } + + SneckoMod.addGift(cardsToReward); + ; + } + + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeBaseCost(3); + } + } +} \ No newline at end of file diff --git a/src/main/java/sneckomod/cards/SerpentsNest.java b/src/main/java/sneckomod/cards/SerpentsNest.java new file mode 100644 index 000000000..453fe7820 --- /dev/null +++ b/src/main/java/sneckomod/cards/SerpentsNest.java @@ -0,0 +1,74 @@ +package sneckomod.cards; + +import com.evacipated.cardcrawl.mod.stslib.cards.interfaces.OnObtainCard; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.relics.AbstractRelic; +import com.megacrit.cardcrawl.relics.FrozenEgg2; +import com.megacrit.cardcrawl.relics.MoltenEgg2; +import com.megacrit.cardcrawl.relics.ToxicEgg2; +import sneckomod.SneckoMod; +import sneckomod.powers.SerpentsNestPower; +import sneckomod.relics.UnknownEgg; + +import java.util.ArrayList; + +public class SerpentsNest extends AbstractSneckoCard implements OnObtainCard { + + public final static String ID = makeID("SerpentsNest"); + + private static int SOFTLOCK = 0; + //stupid intellij stuff POWER, SELF, RARE + + public SerpentsNest() { + super(ID, 1, CardType.POWER, CardRarity.UNCOMMON, CardTarget.SELF); + baseMagicNumber = magicNumber = 9; + + SneckoMod.loadJokeCardImage(this, "SerpentsNest.png"); + } + + public static boolean cardListDuplicate(ArrayList cardsList, AbstractCard card) { + for (AbstractCard alreadyHave : cardsList) { + if (alreadyHave.cardID.equals(card.cardID) && (SOFTLOCK < 100)) { + SOFTLOCK++; + return true; + } + } + if (SOFTLOCK >= 100) { + System.out.println("SOFTLOCK DETECTED!!!"); + } + return false; + } + + public void use(AbstractPlayer p, AbstractMonster m) { + applyToSelf(new SerpentsNestPower(this.magicNumber)); + } + + @Override + public void onObtainCard() { + ArrayList cardsToReward = new ArrayList<>(); + while (cardsToReward.size() < 3) { + AbstractCard newCard = SneckoMod.getOffClassCardMatchingPredicate(c -> c.type == AbstractCard.CardType.POWER && c.rarity == AbstractCard.CardRarity.UNCOMMON); + + for (AbstractRelic r : AbstractDungeon.player.relics) { + r.onPreviewObtainCard(newCard); + } + + if (!cardListDuplicate(cardsToReward, newCard)) { + SOFTLOCK = 0; + cardsToReward.add(newCard.makeCopy()); + } + } + + SneckoMod.addGift(cardsToReward); + } + + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeMagicNumber(3); + } + } +} \ No newline at end of file diff --git a/src/main/java/sneckomod/cards/Serpentscale.java b/src/main/java/sneckomod/cards/Serpentscale.java new file mode 100644 index 000000000..b1e37318c --- /dev/null +++ b/src/main/java/sneckomod/cards/Serpentscale.java @@ -0,0 +1,51 @@ +package sneckomod.cards; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.PlatedArmorPower; +import com.megacrit.cardcrawl.vfx.combat.BiteEffect; +import downfall.downfallMod; +import sneckomod.SneckoMod; + +public class Serpentscale extends AbstractSneckoCard { + + public final static String ID = makeID("Serpentscale"); + + // Card constants + private static final int DAMAGE = 9; + private static final int UPGRADE_DAMAGE = 3; + private static final int MAGIC = 3; + private static final int UPG_MAGIC = 1; + + public Serpentscale() { + super(ID, 1, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); + baseDamage = DAMAGE; + baseMagicNumber = magicNumber = MAGIC; + this.tags.add(SneckoMod.OVERFLOW); + SneckoMod.loadJokeCardImage(this, "Serpentscale.png"); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + atb(new VFXAction(new BiteEffect(m.hb.cX, m.hb.cY), 0.3F)); + dmg(m, makeInfo(), AbstractGameAction.AttackEffect.NONE); + + if (!isOverflowActive(this)) { + addToBot(new ApplyPowerAction(p, p, new PlatedArmorPower(p, 1), 1)); + } + if (isOverflowActive(this)) { + addToBot(new ApplyPowerAction(p, p, new PlatedArmorPower(p, magicNumber), magicNumber)); + } + } + + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeBlock(UPGRADE_DAMAGE); + upgradeMagicNumber(UPG_MAGIC); + } + } + +} \ No newline at end of file diff --git a/src/main/java/sneckomod/cards/SlitherStrike.java b/src/main/java/sneckomod/cards/SlitherStrike.java deleted file mode 100644 index b30a14903..000000000 --- a/src/main/java/sneckomod/cards/SlitherStrike.java +++ /dev/null @@ -1,49 +0,0 @@ -package sneckomod.cards; - -import com.megacrit.cardcrawl.actions.AbstractGameAction; -import com.megacrit.cardcrawl.actions.common.ReduceCostForTurnAction; -import com.megacrit.cardcrawl.cards.AbstractCard; -import com.megacrit.cardcrawl.characters.AbstractPlayer; -import com.megacrit.cardcrawl.dungeons.AbstractDungeon; -import com.megacrit.cardcrawl.monsters.AbstractMonster; -import sneckomod.SneckoMod; - -public class SlitherStrike extends AbstractSneckoCard { - - public final static String ID = makeID("SlitherStrike"); - - //stupid intellij stuff ATTACK, ENEMY, UNCOMMON - - private static final int DAMAGE = 9; - private static final int UPG_DAMAGE = 3; - - public SlitherStrike() { - super(ID, 1, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); - baseDamage = DAMAGE; - tags.add(CardTags.STRIKE); - SneckoMod.loadJokeCardImage(this, "SlitherStrike.png"); - } - - public void use(AbstractPlayer p, AbstractMonster m) { - dmg(m, makeInfo(), AbstractGameAction.AttackEffect.SLASH_DIAGONAL); - atb(new AbstractGameAction() { - @Override - public void update() { - isDone = true; - for (AbstractCard q : p.hand.group) { - if (q.color != AbstractDungeon.player.getCardColor()) { - addToTop(new ReduceCostForTurnAction(q, 1)); - q.superFlash(); - } - } - } - }); - } - - public void upgrade() { - if (!upgraded) { - upgradeName(); - upgradeDamage(UPG_DAMAGE); - } - } -} \ No newline at end of file diff --git a/src/main/java/sneckomod/cards/SlitherThrough.java b/src/main/java/sneckomod/cards/SlitherThrough.java new file mode 100644 index 000000000..f03b382f0 --- /dev/null +++ b/src/main/java/sneckomod/cards/SlitherThrough.java @@ -0,0 +1,91 @@ +package sneckomod.cards; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.ReduceCostForTurnAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.relics.AbstractRelic; +import com.megacrit.cardcrawl.relics.FrozenEgg2; +import com.megacrit.cardcrawl.relics.MoltenEgg2; +import com.megacrit.cardcrawl.relics.ToxicEgg2; +import sneckomod.SneckoMod; +import sneckomod.relics.UnknownEgg; + +import java.util.ArrayList; + +public class SlitherThrough extends AbstractSneckoCard { + + public final static String ID = makeID("SlitherThrough"); + + //stupid intellij stuff ATTACK, ENEMY, UNCOMMON + + private static final int DAMAGE = 14; + private static final int UPG_DAMAGE = 4; + private static final int MAGIC = 1; + private static int SOFTLOCK = 0; + + public SlitherThrough() { + super(ID, 2, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); + baseDamage = DAMAGE; + baseMagicNumber = magicNumber = MAGIC; + SneckoMod.loadJokeCardImage(this, "SlitherThrough.png"); + } + + public static boolean cardListDuplicate(ArrayList cardsList, AbstractCard card) { + for (AbstractCard alreadyHave : cardsList) { + if (alreadyHave.cardID.equals(card.cardID) && (SOFTLOCK < 100)) { + SOFTLOCK++; + return true; + } + } + if (SOFTLOCK >= 20) { + System.out.println("SOFTLOCK DETECTED!!!"); + } + return false; + } + + public void use(AbstractPlayer p, AbstractMonster m) { + dmg(m, makeInfo(), AbstractGameAction.AttackEffect.SLASH_DIAGONAL); + atb(new AbstractGameAction() { + @Override + public void update() { + isDone = true; + for (AbstractCard q : p.hand.group) { + if (q.color != AbstractDungeon.player.getCardColor()) { + addToTop(new ReduceCostForTurnAction(q, magicNumber)); + q.superFlash(); + } + } + } + }); + } + + @Override + public void onObtainCard() { + ArrayList cardsToReward = new ArrayList<>(); + while (cardsToReward.size() < 3) { + AbstractCard newCard = SneckoMod.getOffClassCardMatchingPredicate(c -> c.rarity == AbstractCard.CardRarity.UNCOMMON); + + for (AbstractRelic r : AbstractDungeon.player.relics) { + r.onPreviewObtainCard(newCard); + } + + if (!cardListDuplicate(cardsToReward, newCard)) { + SOFTLOCK = 0; + cardsToReward.add(newCard.makeCopy()); + } + } + + SneckoMod.addGift(cardsToReward); + ; + } + + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeDamage(UPG_DAMAGE); + } + } +} \ No newline at end of file diff --git a/src/main/java/sneckomod/cards/SnakeEyes.java b/src/main/java/sneckomod/cards/SnakeEyes.java new file mode 100644 index 000000000..6b854b441 --- /dev/null +++ b/src/main/java/sneckomod/cards/SnakeEyes.java @@ -0,0 +1,81 @@ +package sneckomod.cards; + +import com.evacipated.cardcrawl.mod.stslib.cards.interfaces.OnObtainCard; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.relics.AbstractRelic; +import com.megacrit.cardcrawl.relics.FrozenEgg2; +import com.megacrit.cardcrawl.relics.MoltenEgg2; +import com.megacrit.cardcrawl.relics.ToxicEgg2; +import sneckomod.SneckoMod; +import sneckomod.powers.SnakeEyesPower; +import sneckomod.relics.UnknownEgg; + +import java.util.ArrayList; + +public class SnakeEyes extends AbstractSneckoCard implements OnObtainCard { + + + //Snake Eyes + public final static String ID = makeID("SnakeEyes"); + + private static final int MAGIC = 1; + private static final int UPG_MAGIC = 1; + private static int SOFTLOCK = 0; + + public SnakeEyes() { + super(ID, 1, CardType.SKILL, CardRarity.RARE, CardTarget.SELF); + baseMagicNumber = magicNumber = MAGIC; + SneckoMod.loadJokeCardImage(this, "SnakeEyes.png"); + } + + public static boolean cardListDuplicate(ArrayList cardsList, AbstractCard card) { + for (AbstractCard alreadyHave : cardsList) { + if (alreadyHave.cardID.equals(card.cardID) && (SOFTLOCK < 100)) { + SOFTLOCK++; + return true; + } + } + if (SOFTLOCK >= 100) { + System.out.println("SOFTLOCK DETECTED!!!"); + } + SOFTLOCK = 0; + return false; + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + applyToSelf(new SnakeEyesPower(magicNumber)); + } + + @Override + public void onObtainCard() { + ArrayList cardsToReward = new ArrayList<>(); + while (cardsToReward.size() < 3) { + AbstractCard newCard = SneckoMod.getOffClassCardMatchingPredicate(c -> c.type == AbstractCard.CardType.SKILL && c.rarity == AbstractCard.CardRarity.RARE); + + for (AbstractRelic r : AbstractDungeon.player.relics) { + r.onPreviewObtainCard(newCard); + } + + if (!cardListDuplicate(cardsToReward, newCard)) { + cardsToReward.add(newCard.makeCopy()); + } + } + + SneckoMod.addGift(cardsToReward); + ; + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeMagicNumber(UPG_MAGIC); + rawDescription = UPGRADE_DESCRIPTION; + initializeDescription(); + } + } +} diff --git a/src/main/java/sneckomod/cards/SnakeSap.java b/src/main/java/sneckomod/cards/SnakeSap.java index 427904c96..c27b0a964 100644 --- a/src/main/java/sneckomod/cards/SnakeSap.java +++ b/src/main/java/sneckomod/cards/SnakeSap.java @@ -1,72 +1 @@ -package sneckomod.cards; - -import com.megacrit.cardcrawl.actions.AbstractGameAction; -import com.megacrit.cardcrawl.actions.common.GainEnergyAction; -import com.megacrit.cardcrawl.cards.DamageInfo; -import com.megacrit.cardcrawl.characters.AbstractPlayer; -import com.megacrit.cardcrawl.monsters.AbstractMonster; -import sneckomod.SneckoMod; -import sneckomod.actions.NoApplyRandomDamageAction; - -public class SnakeSap extends AbstractSneckoCard { - - public final static String ID = makeID("SnakeSap"); - - //stupid intellij stuff ATTACK, ENEMY, UNCOMMON - - private static final int DAMAGE = 3; - private static final int MAGIC = 3; - private static final int UPG_MAGIC = 1; - - public SnakeSap() { - super(ID, 1, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); - baseDamage = DAMAGE; - baseMagicNumber = magicNumber = MAGIC; - baseSilly = silly = 1; - exhaust = true; - tags.add(SneckoMod.SNEKPROOF); - tags.add(SneckoMod.RNG); - SneckoMod.loadJokeCardImage(this, "SnakeSap.png"); - } - - @Override - public void applyPowers() { - int CURRENT_SILLY = baseSilly; - int CURRENT_DAMAGE = baseDamage; - baseDamage = CURRENT_SILLY; - super.applyPowers(); - silly = damage; - isSillyModified = damage != baseDamage; - - baseDamage = CURRENT_DAMAGE; - super.applyPowers(); - } - - @Override - public void calculateCardDamage(final AbstractMonster m) { - int CURRENT_SILLY = baseSilly; - int CURRENT_DAMAGE = baseDamage; - baseDamage = CURRENT_SILLY; - super.calculateCardDamage(m); - silly = damage; - isSillyModified = damage != baseDamage; - - baseDamage = CURRENT_DAMAGE; - super.calculateCardDamage(m); - } - - public void use(AbstractPlayer p, AbstractMonster m) { - atb(new NoApplyRandomDamageAction(m, silly, damage, 1, AbstractGameAction.AttackEffect.SLASH_HORIZONTAL, this, DamageInfo.DamageType.NORMAL)); - int x = getRandomNum(1, magicNumber, this); - if (x > 0) - atb(new GainEnergyAction(x)); - } - - public void upgrade() { - if (!upgraded) { - upgradeName(); - upgradeMagicNumber(UPG_MAGIC); - upgradeDamage(1); - } - } -} \ No newline at end of file +//deprecated \ No newline at end of file diff --git a/src/main/java/sneckomod/cards/SnekBeam.java b/src/main/java/sneckomod/cards/SnekBeam.java deleted file mode 100644 index 69998f064..000000000 --- a/src/main/java/sneckomod/cards/SnekBeam.java +++ /dev/null @@ -1,76 +0,0 @@ -package sneckomod.cards; - -import com.megacrit.cardcrawl.actions.AbstractGameAction; -import com.megacrit.cardcrawl.actions.animations.VFXAction; -import com.megacrit.cardcrawl.cards.AbstractCard; -import com.megacrit.cardcrawl.characters.AbstractPlayer; -import com.megacrit.cardcrawl.dungeons.AbstractDungeon; -import com.megacrit.cardcrawl.monsters.AbstractMonster; -import sneckomod.SneckoMod; -import com.megacrit.cardcrawl.vfx.combat.MindblastEffect; -import sneckomod.cards.unknowns.AbstractUnknownCard; - -import static com.megacrit.cardcrawl.cards.red.PerfectedStrike.countCards; - -public class SnekBeam extends AbstractSneckoCard { - - public final static String ID = makeID("SnekBeam"); - - //stupid intellij stuff ATTACK, ALL_ENEMY, UNCOMMON - - private static final int DAMAGE = 0; - - public SnekBeam() { - super(ID, 1, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ALL_ENEMY); - baseDamage = DAMAGE; - isMultiDamage = true; - this.exhaust = true; - SneckoMod.loadJokeCardImage(this, "SnekBeam.png"); - } - - public static int countCards() { - int i = 0; - for (AbstractCard c : AbstractDungeon.player.masterDeck.group) { - if (c instanceof AbstractUnknownCard) { - i++; - } - } - return i; - } - - public void calculateCardDamage(AbstractMonster mo) { - int realBaseDamage = this.baseDamage; - this.baseDamage += countCards(); - super.calculateCardDamage(mo); - this.baseDamage = realBaseDamage; - this.isDamageModified = this.damage != this.baseDamage; - this.rawDescription = upgraded ? UPGRADE_DESCRIPTION + cardStrings.EXTENDED_DESCRIPTION[1] : - UPGRADE_DESCRIPTION + cardStrings.EXTENDED_DESCRIPTION[0]; - this.initializeDescription(); - } - - public void applyPowers() { - int realBaseDamage = this.baseDamage; - this.baseDamage += countCards(); - super.applyPowers(); - this.baseDamage = realBaseDamage; - this.isDamageModified = this.damage != this.baseDamage; - this.rawDescription = upgraded ? UPGRADE_DESCRIPTION + cardStrings.EXTENDED_DESCRIPTION[1] : - UPGRADE_DESCRIPTION + cardStrings.EXTENDED_DESCRIPTION[0]; - this.initializeDescription(); - } - - public void use(AbstractPlayer p, AbstractMonster m) { - atb(new VFXAction(new MindblastEffect(p.dialogX, p.dialogY, p.flipHorizontal))); - allDmg(AbstractGameAction.AttackEffect.FIRE); - } - - public void upgrade() { - if (!upgraded) { - upgradeName(); - exhaust = false; - rawDescription = cardStrings.UPGRADE_DESCRIPTION; - initializeDescription(); - } - } -} \ No newline at end of file diff --git a/src/main/java/sneckomod/cards/SnekBite.java b/src/main/java/sneckomod/cards/SnekBite.java index b9d22334c..ee0b88af4 100644 --- a/src/main/java/sneckomod/cards/SnekBite.java +++ b/src/main/java/sneckomod/cards/SnekBite.java @@ -1,37 +1,59 @@ package sneckomod.cards; +import basemod.BaseMod; +import com.evacipated.cardcrawl.mod.stslib.actions.common.SelectCardsInHandAction; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.monsters.AbstractMonster; -import sneckomod.SneckoMod; import com.megacrit.cardcrawl.vfx.combat.BiteEffect; -import sneckomod.actions.MuddleRandomCardAction; +import downfall.downfallMod; +import sneckomod.SneckoMod; +import sneckomod.actions.MuddleAction; public class SnekBite extends AbstractSneckoCard { public final static String ID = makeID("SnekBite"); + // Card constants + private static final int DAMAGE = 8; + private static final int MAGIC = 1; + private static final int UPGRADE_DAMAGE = 1; + private static final int UPGRADE_MAGIC = 1; + + public SnekBite() { super(ID, 1, CardType.ATTACK, CardRarity.BASIC, CardTarget.ENEMY); - baseDamage = 7; - baseMagicNumber = magicNumber = 1; + baseDamage = DAMAGE; + baseMagicNumber = magicNumber = MAGIC; SneckoMod.loadJokeCardImage(this, "SnekBite.png"); } public void use(AbstractPlayer p, AbstractMonster m) { - atb(new VFXAction(new BiteEffect(m.hb.cX, m.hb.cY), 0.3F));// 117 + atb(new VFXAction(new BiteEffect(m.hb.cX, m.hb.cY), 0.3F)); dmg(m, makeInfo(), AbstractGameAction.AttackEffect.NONE); - atb(new MuddleRandomCardAction(magicNumber, true)); + + // muddle is no longer random here + addToBot(new SelectCardsInHandAction(magicNumber, BaseMod.getKeywordProper("sneckomod:muddle"), + (AbstractCard c) -> true, + (cards) -> { + for (AbstractCard card : cards) { + addToBot(new MuddleAction(card)); + } + } + )); } public void upgrade() { if (!upgraded) { upgradeName(); - upgradeDamage(2); - upgradeMagicNumber(1); + upgradeDamage(UPGRADE_DAMAGE); + upgradeMagicNumber(UPGRADE_MAGIC); rawDescription = UPGRADE_DESCRIPTION; initializeDescription(); } } -} \ No newline at end of file + +} diff --git a/src/main/java/sneckomod/cards/SoulCleanse.java b/src/main/java/sneckomod/cards/SoulCleanse.java index 31235b7d4..c27b0a964 100644 --- a/src/main/java/sneckomod/cards/SoulCleanse.java +++ b/src/main/java/sneckomod/cards/SoulCleanse.java @@ -1,34 +1 @@ -package sneckomod.cards; - -import com.megacrit.cardcrawl.characters.AbstractPlayer; -import com.megacrit.cardcrawl.monsters.AbstractMonster; -import com.megacrit.cardcrawl.monsters.city.Snecko; -import sneckomod.SneckoMod; -import sneckomod.actions.MuddleHandAction; - -public class SoulCleanse extends AbstractSneckoCard { - - public final static String ID = makeID("SoulCleanse"); - - //stupid intellij stuff SKILL, SELF, UNCOMMON - - public SoulCleanse() { - super(ID, 0, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); - tags.add(SneckoMod.SNEKPROOF); - exhaust = true; - SneckoMod.loadJokeCardImage(this, "SoulCleanse.png"); - } - - public void use(AbstractPlayer p, AbstractMonster m) { - atb(new MuddleHandAction(true)); - } - - public void upgrade() { - if (!upgraded) { - upgradeName(); - rawDescription = UPGRADE_DESCRIPTION; - initializeDescription(); - this.exhaust = false; - } - } -} \ No newline at end of file +//deprecated \ No newline at end of file diff --git a/src/main/java/sneckomod/cards/SoulDraw.java b/src/main/java/sneckomod/cards/SoulDraw.java index 614d74258..f3d6472b1 100644 --- a/src/main/java/sneckomod/cards/SoulDraw.java +++ b/src/main/java/sneckomod/cards/SoulDraw.java @@ -1,8 +1,10 @@ package sneckomod.cards; +import basemod.helpers.CardModifierManager; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import expansioncontent.cardmods.PropertiesMod; import sneckomod.OffclassHelper; import sneckomod.SneckoMod; @@ -13,16 +15,21 @@ public class SoulDraw extends AbstractSneckoCard { public final static String ID = makeID("SoulDraw"); public SoulDraw() { - super(ID, 0, CardType.SKILL, CardRarity.COMMON, CardTarget.SELF); + super(ID, 1, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); baseMagicNumber = magicNumber = 2; exhaust = true; - tags.add(SneckoMod.SNEKPROOF); SneckoMod.loadJokeCardImage(this, "SoulDraw.png"); } + + // coffee blast reprint because public void use(AbstractPlayer p, AbstractMonster m) { + ArrayList cards = OffclassHelper.getXRandomOffclassCards(magicNumber); for (AbstractCard c : cards) { + if (!c.selfRetain) { + CardModifierManager.addModifier(c, new PropertiesMod(PropertiesMod.supportedProperties.RETAIN, false)); + } makeInHand(c); } } @@ -30,7 +37,7 @@ public void use(AbstractPlayer p, AbstractMonster m) { public void upgrade() { if (!upgraded) { upgradeName(); - upgradeMagicNumber(1); + upgradeBaseCost(0); } } } \ No newline at end of file diff --git a/src/main/java/sneckomod/cards/SoulExchange.java b/src/main/java/sneckomod/cards/SoulExchange.java index 62859dcec..dcc2b1589 100644 --- a/src/main/java/sneckomod/cards/SoulExchange.java +++ b/src/main/java/sneckomod/cards/SoulExchange.java @@ -1,58 +1,33 @@ package sneckomod.cards; -import basemod.BaseMod; -import com.evacipated.cardcrawl.mod.stslib.actions.common.SelectCardsInHandAction; -import com.megacrit.cardcrawl.actions.common.DrawCardAction; -import com.megacrit.cardcrawl.actions.common.ExhaustAction; -import com.megacrit.cardcrawl.actions.common.MakeTempCardInHandAction; -import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; -import com.megacrit.cardcrawl.dungeons.AbstractDungeon; -import com.megacrit.cardcrawl.helpers.CardLibrary; import com.megacrit.cardcrawl.monsters.AbstractMonster; import sneckomod.SneckoMod; - -import java.util.ArrayList; +import sneckomod.actions.MuddleHandAction; public class SoulExchange extends AbstractSneckoCard { - public final static String ID = makeID("SoulExchange"); + public static final String ID = SneckoMod.makeID("SoulExchange"); - //stupid intellij stuff SKILL, SELF, RARE + private static final int COST = 1; public SoulExchange() { - super(ID, 0, CardType.SKILL, CardRarity.RARE, CardTarget.SELF); - tags.add(SneckoMod.SNEKPROOF); - baseMagicNumber = magicNumber = 1; + super(ID, COST, CardType.SKILL, CardRarity.RARE, CardTarget.SELF); + this.selfRetain = true; + this.exhaust = true; SneckoMod.loadJokeCardImage(this, "SoulExchange.png"); } + @Override public void use(AbstractPlayer p, AbstractMonster m) { - atb(new DrawCardAction(magicNumber)); - atb(new SelectCardsInHandAction(1, EXTENDED_DESCRIPTION[0], (cards) -> { - AbstractCard q = cards.get(0); - CardColor c = q.color; - ArrayList coloredCards = new ArrayList<>(); - for (AbstractCard r : CardLibrary.getAllCards()) { - if (r.color == c && r.rarity != CardRarity.SPECIAL && r.rarity != CardRarity.BASIC && !r.hasTag(CardTags.HEALING)) { - coloredCards.add(r); - } - } - int x = p.hand.size(); - if (!coloredCards.isEmpty()) - for (int i = 0; i < x; i++) { - att(new MakeTempCardInHandAction(coloredCards.get(AbstractDungeon.cardRandomRng.random(0, coloredCards.size() - 1)))); - } - att(new ExhaustAction(BaseMod.MAX_HAND_SIZE, true, false)); - })); + addToBot(new MuddleHandAction()); } + @Override public void upgrade() { if (!upgraded) { upgradeName(); - upgradeMagicNumber(1); - rawDescription = UPGRADE_DESCRIPTION; - initializeDescription(); + upgradeBaseCost(0); } } -} \ No newline at end of file +} diff --git a/src/main/java/sneckomod/cards/SoulRoll.java b/src/main/java/sneckomod/cards/SoulRoll.java index 41d56784e..525f68989 100644 --- a/src/main/java/sneckomod/cards/SoulRoll.java +++ b/src/main/java/sneckomod/cards/SoulRoll.java @@ -1,38 +1,50 @@ package sneckomod.cards; -import com.megacrit.cardcrawl.actions.common.DrawCardAction; +import basemod.BaseMod; +import com.evacipated.cardcrawl.mod.stslib.actions.common.SelectCardsInHandAction; +import com.megacrit.cardcrawl.actions.common.GainBlockAction; +import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; -import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import downfall.downfallMod; import sneckomod.SneckoMod; -import sneckomod.actions.MuddleHandAction; +import sneckomod.actions.MuddleAction; public class SoulRoll extends AbstractSneckoCard { public final static String ID = makeID("SoulRoll"); //stupid intellij stuff SKILL, SELF, COMMON + private static final int BLOCK = 3; + private static final int UPGRADE_BLOCK = 3; + private static final int MAGIC = 1; public SoulRoll() { - super(ID, 0, CardType.SKILL, CardRarity.COMMON, CardTarget.SELF); - tags.add(SneckoMod.SNEKPROOF); + super(ID, 0, CardType.SKILL, CardRarity.SPECIAL, CardTarget.SELF); SneckoMod.loadJokeCardImage(this, "SoulRoll.png"); + baseBlock = BLOCK; + baseMagicNumber = magicNumber = MAGIC; + exhaust = true; + this.selfRetain = true; } public void use(AbstractPlayer p, AbstractMonster m) { - atb(new MuddleHandAction()); - if (upgraded) upgradeAction(p,m); - } - - public void upgradeAction(AbstractPlayer p, AbstractMonster m){ - AbstractDungeon.actionManager.addToBottom(new DrawCardAction(p, 1)); + addToBot(new GainBlockAction(p, p, block)); + addToBot(new SelectCardsInHandAction(magicNumber, BaseMod.getKeywordProper("sneckomod:muddle"), + (AbstractCard c) -> true, + (cards) -> { + for (AbstractCard card : cards) { + addToBot(new MuddleAction(card)); + } + } + )); } public void upgrade() { if (!upgraded) { upgradeName(); - rawDescription = UPGRADE_DESCRIPTION; - initializeDescription(); + upgradeBlock(UPGRADE_BLOCK); + } } } \ No newline at end of file diff --git a/src/main/java/sneckomod/cards/TailWhip.java b/src/main/java/sneckomod/cards/TailWhip.java index 837b0d3f2..3975f2246 100644 --- a/src/main/java/sneckomod/cards/TailWhip.java +++ b/src/main/java/sneckomod/cards/TailWhip.java @@ -12,33 +12,41 @@ public class TailWhip extends AbstractSneckoCard { //stupid intellij stuff ATTACK, ENEMY, BASIC private static final int DAMAGE = 10; - private static final int MAGIC = 0; + private static final int MAGIC = 1; private static final int UPG_MAGIC = 1; + private static final int UPG_DAMAGE = 2; public TailWhip() { super(ID, 2, CardType.ATTACK, CardRarity.BASIC, CardTarget.ENEMY); baseDamage = DAMAGE; baseMagicNumber = magicNumber = MAGIC; SneckoMod.loadJokeCardImage(this, "TailWhip.png"); - this.tags.add(SneckoMod.RNG); + this.tags.add(SneckoMod.OVERFLOW); } public void use(AbstractPlayer p, AbstractMonster m) { dmg(m, makeInfo(), AbstractGameAction.AttackEffect.SLASH_HEAVY); - int x = getRandomNum(magicNumber, 2, this); + int x = 0; + // this is probably bad practice but it works + if (isOverflowActive(this)) { + x = magicNumber; + } if (x > 0) applyToEnemy(m, autoWeak(m, x)); - int y = getRandomNum(magicNumber, 2, this); + int y = 0; + if (isOverflowActive(this)) { + y = magicNumber; + } if (y > 0) applyToEnemy(m, autoVuln(m, y)); - // atb(new MuddleHandAction()); } + public void upgrade() { if (!upgraded) { upgradeName(); - upgradeDamage(3); upgradeMagicNumber(UPG_MAGIC); + upgradeDamage(UPG_DAMAGE); } } } \ No newline at end of file diff --git a/src/main/java/sneckomod/cards/ThrowingCards.java b/src/main/java/sneckomod/cards/ThrowingCards.java new file mode 100644 index 000000000..4f664d752 --- /dev/null +++ b/src/main/java/sneckomod/cards/ThrowingCards.java @@ -0,0 +1,52 @@ +package sneckomod.cards; + +import automaton.actions.EasyXCostAction; +import com.megacrit.cardcrawl.actions.common.GainEnergyAction; +import com.megacrit.cardcrawl.actions.common.MakeTempCardInHandAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.blue.FTL; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import hermit.cards.HoleUp; +import sneckomod.SneckoMod; + +public class ThrowingCards extends AbstractSneckoCard { + + public static final String ID = SneckoMod.makeID("ThrowingCards"); + + public ThrowingCards() { + super(ID, -1, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); + cardsToPreview = new FTL(); + exhaust = true; + baseMagicNumber = magicNumber = 0; + SneckoMod.loadJokeCardImage(this, "ThrowingCards.png"); + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + atb(new EasyXCostAction(this, (effect, params) -> { + for (int i = 0; i < effect + params[0]; i++) { + AbstractCard g = new FTL(); + if (this.upgraded) { + g.upgrade(); + } + AbstractDungeon.actionManager.addToBottom(new MakeTempCardInHandAction(g)); + } + return true; + }, magicNumber)); + AbstractDungeon.actionManager.addToBottom(new GainEnergyAction(1)); + } + + @Override + public void upgrade() { + if (!upgraded) { + AbstractCard q = new FTL(); + q.upgrade(); + cardsToPreview = q; + upgradeName(); + rawDescription = UPGRADE_DESCRIPTION; + initializeDescription(); + } + } +} \ No newline at end of file diff --git a/src/main/java/sneckomod/cards/ToothAndClaw.java b/src/main/java/sneckomod/cards/ToothAndClaw.java new file mode 100644 index 000000000..a8bb5103f --- /dev/null +++ b/src/main/java/sneckomod/cards/ToothAndClaw.java @@ -0,0 +1,89 @@ +package sneckomod.cards; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.actions.common.MakeTempCardInHandAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.green.CripplingPoison; +import com.megacrit.cardcrawl.cards.tempCards.Shiv; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.relics.AbstractRelic; +import com.megacrit.cardcrawl.relics.FrozenEgg2; +import com.megacrit.cardcrawl.relics.MoltenEgg2; +import com.megacrit.cardcrawl.relics.ToxicEgg2; +import com.megacrit.cardcrawl.vfx.combat.BiteEffect; +import sneckomod.SneckoMod; +import sneckomod.relics.UnknownEgg; + +import java.util.ArrayList; + +public class ToothAndClaw extends AbstractSneckoCard { + + public final static String ID = makeID("ToothAndClaw"); + private static int SOFTLOCK = 0; + // this card exists + + public ToothAndClaw() { + super(ID, 1, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); + baseDamage = 4; + SneckoMod.loadJokeCardImage(this, "ToothAndClaw.png"); + this.cardsToPreview = new Shiv(); + } + + public static boolean cardListDuplicate(ArrayList cardsList, AbstractCard card) { + for (AbstractCard alreadyHave : cardsList) { + if (alreadyHave.cardID.equals(card.cardID) && (SOFTLOCK < 100)) { + SOFTLOCK++; + return true; + } + } + if (SOFTLOCK >= 100) { + System.out.println("SOFTLOCK DETECTED!!!"); + } + return false; + } + + public void use(AbstractPlayer p, AbstractMonster m) { + atb(new VFXAction(new BiteEffect(m.hb.cX, m.hb.cY), 0.3F));// 117 + dmg(m, makeInfo(), AbstractGameAction.AttackEffect.NONE); + for (int i = 0; i < findSuitinHand(); i++) { + AbstractCard s = new Shiv(); + if (this.upgraded) { + s.upgrade(); + } + AbstractDungeon.actionManager.addToBottom(new MakeTempCardInHandAction(s)); + } + } + + @Override + public void onObtainCard() { + ArrayList cardsToReward = new ArrayList<>(); + while (cardsToReward.size() < 3) { + AbstractCard newCard = SneckoMod.getOffClassCardMatchingPredicate(c -> c.rarity == AbstractCard.CardRarity.UNCOMMON); + + for (AbstractRelic r : AbstractDungeon.player.relics) { + r.onPreviewObtainCard(newCard); + } + + if (!cardListDuplicate(cardsToReward, newCard)) { + SOFTLOCK = 0; + cardsToReward.add(newCard.makeCopy()); + } + } + + SneckoMod.addGift(cardsToReward); + ; + } + + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeDamage(2); + rawDescription = UPGRADE_DESCRIPTION; + initializeDescription(); + this.cardsToPreview.upgrade(); + } + } +} \ No newline at end of file diff --git a/src/main/java/sneckomod/cards/ToxicPersonality.java b/src/main/java/sneckomod/cards/ToxicPersonality.java new file mode 100644 index 000000000..542335856 --- /dev/null +++ b/src/main/java/sneckomod/cards/ToxicPersonality.java @@ -0,0 +1,75 @@ +//Toxic Personality - Whenever you apply a debuff to an enemy, apply !M! Venom. + +//This was using an old version of Venom but honestly it was just too simple and too strong at the same time. + +//Queen of Pentacles was just cooler. + +//package sneckomod.cards; +// +//import com.megacrit.cardcrawl.cards.AbstractCard; +//import com.megacrit.cardcrawl.characters.AbstractPlayer; +//import com.megacrit.cardcrawl.monsters.AbstractMonster; +//import downfall.util.CardIgnore; +//import sneckomod.SneckoMod; +//import sneckomod.powers.ToxicPersonalityPower; +// +//import java.util.ArrayList; + +//@Deprecated +//@CardIgnore +//public class ToxicPersonality extends AbstractSneckoCard { +// +// public final static String ID = makeID("ToxicPersonality"); +// +// //stupid intellij stuff POWER, SELF, RARE +// +// private static final int MAGIC = 5; +// private static final int UPG_MAGIC = 2; +// +// public ToxicPersonality() { +// super(ID, 2, CardType.POWER, CardRarity.SPECIAL, CardTarget.SELF); +// baseMagicNumber = magicNumber = MAGIC; +// SneckoMod.loadJokeCardImage(this, "AceOfWands.png"); +// } +// +// public static boolean cardListDuplicate(ArrayList cardsList, AbstractCard card) { +// for (AbstractCard alreadyHave : cardsList) { +// if (alreadyHave.cardID.equals(card.cardID)) { +// return true; +// } +// } +// return false; +// } +// +// public void use(AbstractPlayer p, AbstractMonster m) { +// applyToSelf(new ToxicPersonalityPower(magicNumber)); +// } +// +// @Override +// public void onObtainCard() { +// ArrayList cardsToReward = new ArrayList<>(); +// while (cardsToReward.size() < 3) { +// AbstractCard newCard = SneckoMod.getOffClassCardMatchingPredicate( +// c -> (c.rarity == AbstractCard.CardRarity.UNCOMMON || c.rarity == AbstractCard.CardRarity.RARE) && +// ((((c.rawDescription.contains("Apply") || c.rawDescription.contains("apply") || c.rawDescription.contains("applies") +// || c.rawDescription.contains("Lick") || c.rawDescription.contains("Debuff") || c.rawDescription.contains("Steal") +// || c.name.contains("Disarm") || c.name.contains("Choke") || c.name.contains("Talk to the Hand") || c.name.contains("Cursed Wail") +// || c.name.contains("Undervolt")) || c.name.contains("Dark Lord Form"))))); +// +// +// +// if (!cardListDuplicate(cardsToReward, newCard)) { +// cardsToReward.add(newCard.makeCopy()); +// } +// } +// +// SneckoMod.addGift(cardsToReward); +// ; +// } +// +// public void upgrade() { +// if (!upgraded) { +// upgradeName(); +// upgradeMagicNumber(UPG_MAGIC); +// } +// }} \ No newline at end of file diff --git a/src/main/java/sneckomod/cards/Transmogrify.java b/src/main/java/sneckomod/cards/Transmogrify.java index 0b2778db5..d657cde0f 100644 --- a/src/main/java/sneckomod/cards/Transmogrify.java +++ b/src/main/java/sneckomod/cards/Transmogrify.java @@ -7,16 +7,19 @@ import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.helpers.RelicLibrary; import com.megacrit.cardcrawl.monsters.AbstractMonster; -import sneckomod.SneckoMod; import com.megacrit.cardcrawl.relics.AbstractRelic; import com.megacrit.cardcrawl.relics.Circlet; import downfall.cards.OctoChoiceCard; +import downfall.util.CardIgnore; import downfall.util.SelectCardsCenteredAction; +import sneckomod.SneckoMod; import java.util.ArrayList; import java.util.Collections; import java.util.Locale; +@Deprecated +@CardIgnore public class Transmogrify extends AbstractSneckoCard { public final static String ID = makeID("Transmogrify"); @@ -24,7 +27,8 @@ public class Transmogrify extends AbstractSneckoCard { //stupid intellij stuff SKILL, SELF, RARE public Transmogrify() { - super(ID, 1, CardType.SKILL, CardRarity.RARE, CardTarget.SELF); + super(ID, 1, CardType.SKILL, CardRarity.SPECIAL, CardTarget.SELF); + // super(ID, 1, CardType.SKILL, CardRarity.RARE, CardTarget.SELF); exhaust = true; tags.add(CardTags.HEALING); SneckoMod.loadJokeCardImage(this, "Transmogrify.png"); @@ -111,8 +115,7 @@ public void update() { AbstractDungeon.getCurrRoom().spawnRelicAndObtain(Settings.WIDTH / 2F, Settings.HEIGHT / 2F, returnTrueRandomScreenlessRelic(q.tier)); } }); - } - else { + } else { AbstractRelic q2 = eligibleRelicsList.get(1); ArrayList cardChoices = new ArrayList<>(); cardChoices.add(new OctoChoiceCard(q.relicId, q.name, getCorrectPlaceholderImage(ID), EXTENDED_DESCRIPTION[2] + q.name + EXTENDED_DESCRIPTION[3] + q.tier.name().toLowerCase(Locale.ROOT) + EXTENDED_DESCRIPTION[4], CardColor.COLORLESS)); diff --git a/src/main/java/sneckomod/cards/TrashCan.java b/src/main/java/sneckomod/cards/TrashCan.java new file mode 100644 index 000000000..479d9ea87 --- /dev/null +++ b/src/main/java/sneckomod/cards/TrashCan.java @@ -0,0 +1,32 @@ +package sneckomod.cards; + +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; +import sneckomod.powers.TrashCanPower; + +public class TrashCan extends AbstractSneckoCard { + + public final static String ID = makeID("TrashCan"); + + //stupid intellij stuff POWER, SELF, UNCOMMON + + public TrashCan() { + super(ID, 1, CardType.POWER, CardRarity.UNCOMMON, CardTarget.SELF); + SneckoMod.loadJokeCardImage(this, "TrashCan.png"); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + AbstractDungeon.actionManager.addToBottom( + new ApplyPowerAction(p, p, new TrashCanPower(p, p, 1), 1)); + } + + public void upgrade() { + if (!upgraded) { + upgradeBaseCost(0); + upgradeName(); + } + } +} \ No newline at end of file diff --git a/src/main/java/sneckomod/cards/TrashToTreasure.java b/src/main/java/sneckomod/cards/TrashToTreasure.java index 675d480e5..a8c83eeb9 100644 --- a/src/main/java/sneckomod/cards/TrashToTreasure.java +++ b/src/main/java/sneckomod/cards/TrashToTreasure.java @@ -10,22 +10,24 @@ public class TrashToTreasure extends AbstractSneckoCard { public final static String ID = makeID("TrashToTreasure"); //stupid intellij stuff SKILL, SELF, UNCOMMON + private static final int BASE_BLOCK = 9; public TrashToTreasure() { - super(ID, 0, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); - tags.add(SneckoMod.SNEKPROOF); - this.exhaust = true; + super(ID, 1, CardType.SKILL, CardRarity.RARE, CardTarget.SELF); SneckoMod.loadJokeCardImage(this, "TrashToTreasure.png"); + baseBlock = BASE_BLOCK; + exhaust = true; } public void use(AbstractPlayer p, AbstractMonster m) { + blck(); atb(new RecycleAction()); } public void upgrade() { if (!upgraded) { upgradeName(); - this.exhaust = false; + exhaust = false; rawDescription = UPGRADE_DESCRIPTION; initializeDescription(); } diff --git a/src/main/java/sneckomod/cards/Tsunami.java b/src/main/java/sneckomod/cards/Tsunami.java new file mode 100644 index 000000000..64abf2383 --- /dev/null +++ b/src/main/java/sneckomod/cards/Tsunami.java @@ -0,0 +1,28 @@ +package sneckomod.cards; + +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; +import sneckomod.powers.BlunderGuardPower; + +public class Tsunami extends AbstractSneckoCard { + + public final static String ID = makeID("Tsunami"); + + public Tsunami() { + super(ID, 1, CardType.POWER, CardRarity.UNCOMMON, CardTarget.SELF); + baseMagicNumber = magicNumber = 4; + SneckoMod.loadJokeCardImage(this, "Tsunami.png"); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + applyToSelf(new BlunderGuardPower(this.magicNumber)); + } + + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeMagicNumber(1); + } + } +} diff --git a/src/main/java/sneckomod/cards/TyphoonFang.java b/src/main/java/sneckomod/cards/TyphoonFang.java new file mode 100644 index 000000000..392cffbb9 --- /dev/null +++ b/src/main/java/sneckomod/cards/TyphoonFang.java @@ -0,0 +1,51 @@ +package sneckomod.cards; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.vfx.combat.BiteEffect; +import sneckomod.SneckoMod; +import sneckomod.powers.TyphoonPlusPower; +import sneckomod.powers.TyphoonPower; + +import static sneckomod.SneckoMod.NO_TYPHOON; + +public class TyphoonFang extends AbstractSneckoCard { + + public final static String ID = makeID("TyphoonFang"); + + //stupid intellij stuff ATTACK, ENEMY, BASIC + + // this card was a herculean effort to code + + private static final int DAMAGE = 12; + + public TyphoonFang() { + super(ID, 1, CardType.ATTACK, CardRarity.RARE, CardTarget.ENEMY); + baseDamage = DAMAGE; + // baseMagicNumber = magicNumber = MAGIC; + SneckoMod.loadJokeCardImage(this, "TyphoonFang.png"); + this.tags.add(SneckoMod.OVERFLOW); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + atb(new VFXAction(new BiteEffect(m.hb.cX, m.hb.cY), 0.3F));// reused snek bite animation + dmg(m, makeInfo(), AbstractGameAction.AttackEffect.NONE); + if (isOverflowActive(this) && !this.hasTag(NO_TYPHOON)) { + if (!upgraded) { + applyToSelf(new TyphoonPower(1)); + } + if (upgraded) { + applyToSelf(new TyphoonPlusPower(1)); + } + } + } + + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeDamage(4); + } + } +} diff --git a/src/main/java/sneckomod/cards/UnendingSupply.java b/src/main/java/sneckomod/cards/UnendingSupply.java index 8bee69807..3c864b1b9 100644 --- a/src/main/java/sneckomod/cards/UnendingSupply.java +++ b/src/main/java/sneckomod/cards/UnendingSupply.java @@ -12,7 +12,8 @@ public class UnendingSupply extends AbstractSneckoCard { //stupid intellij stuff POWER, SELF, UNCOMMON public UnendingSupply() { - super(ID, 1, CardType.POWER, CardRarity.RARE, CardTarget.SELF); + super(ID, 2, CardType.POWER, CardRarity.UNCOMMON, CardTarget.SELF); + isInnate = false; SneckoMod.loadJokeCardImage(this, "UnendingSupply.png"); } @@ -22,8 +23,11 @@ public void use(AbstractPlayer p, AbstractMonster m) { public void upgrade() { if (!upgraded) { + isInnate = true; upgradeName(); - upgradeBaseCost(0); + // upgradeBaseCost(1); + rawDescription = UPGRADE_DESCRIPTION; + initializeDescription(); } } } \ No newline at end of file diff --git a/src/main/java/sneckomod/cards/UnlimitedRolls.java b/src/main/java/sneckomod/cards/UnlimitedRolls.java index 12afa25b9..2113481e3 100644 --- a/src/main/java/sneckomod/cards/UnlimitedRolls.java +++ b/src/main/java/sneckomod/cards/UnlimitedRolls.java @@ -4,10 +4,13 @@ import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import downfall.util.CardIgnore; import expansioncontent.cardmods.ExhaustMod; import sneckomod.SneckoMod; import sneckomod.powers.UnlimitedRollsPower; +@Deprecated +@CardIgnore public class UnlimitedRolls extends AbstractSneckoCard { public final static String ID = makeID("UnlimitedRolls"); @@ -15,7 +18,8 @@ public class UnlimitedRolls extends AbstractSneckoCard { //stupid intellij stuff POWER, SELF, RARE public UnlimitedRolls() { - super(ID, 1, CardType.POWER, CardRarity.RARE, CardTarget.SELF); + super(ID, 1, CardType.POWER, CardRarity.SPECIAL, CardTarget.SELF); + // super(ID, 1, CardType.POWER, CardRarity.RARE, CardTarget.SELF); AbstractCard q = new SoulRoll(); CardModifierManager.addModifier(q, new ExhaustMod()); q.initializeDescription(); diff --git a/src/main/java/sneckomod/cards/ViperEssence.java b/src/main/java/sneckomod/cards/ViperEssence.java new file mode 100644 index 000000000..deefd5fb8 --- /dev/null +++ b/src/main/java/sneckomod/cards/ViperEssence.java @@ -0,0 +1,37 @@ +package sneckomod.cards; + +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.StrengthPower; +import com.megacrit.cardcrawl.vfx.combat.InflameEffect; +import sneckomod.SneckoMod; + +public class ViperEssence extends AbstractSneckoCard { + + public final static String ID = makeID("ViperEssence"); + + private static final int MAGIC = 1; + private static final int UPG_MAGIC = 1; + + public ViperEssence() { + super(ID, 0, CardType.POWER, CardRarity.SPECIAL, CardTarget.SELF, CardColor.COLORLESS); + SneckoMod.loadJokeCardImage(this, "ViperEssence.png"); + baseMagicNumber = magicNumber = MAGIC; + isEthereal = true; + } + + public void use(AbstractPlayer p, AbstractMonster m) { + this.addToBot(new VFXAction(p, new InflameEffect(p), 1.0F)); + this.addToBot(new ApplyPowerAction(p, p, new StrengthPower(p, this.magicNumber), this.magicNumber)); + } + + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + this.upgradeMagicNumber(UPG_MAGIC); + } + + } +} \ No newline at end of file diff --git a/src/main/java/sneckomod/cards/Whack.java b/src/main/java/sneckomod/cards/Whack.java new file mode 100644 index 000000000..fd99d1ea7 --- /dev/null +++ b/src/main/java/sneckomod/cards/Whack.java @@ -0,0 +1,53 @@ +package sneckomod.cards; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.DamageAction; +import com.megacrit.cardcrawl.actions.common.MakeTempCardInHandAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.cards.purple.Wallop; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import hermit.cards.HoleUp; +import sneckomod.SneckoMod; + +public class Whack extends AbstractSneckoCard { + + public static final String ID = SneckoMod.makeID("Whack"); + + private static final int DAMAGE = 9; + private static final int UPGRADE_DAMAGE = 3; + private static final int COST = 1; + + public Whack() { + super(ID, COST, AbstractCard.CardType.ATTACK, AbstractCard.CardRarity.UNCOMMON, AbstractCard.CardTarget.ENEMY); + baseDamage = DAMAGE; + this.exhaust = true; + this.cardsToPreview = new Wallop(); + SneckoMod.loadJokeCardImage(this, "Whack.png"); + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + addToBot(new DamageAction(m, new DamageInfo(p, damage, damageTypeForTurn), AbstractGameAction.AttackEffect.SLASH_HEAVY)); + AbstractCard g = new Wallop(); + if (this.upgraded) { + g.upgrade(); + } + AbstractDungeon.actionManager.addToBottom(new MakeTempCardInHandAction(g)); + } + + @Override + public void upgrade() { + if (!upgraded) { + AbstractCard q = new Wallop(); + q.upgrade(); + cardsToPreview = q; + upgradeName(); + upgradeDamage(UPGRADE_DAMAGE); + rawDescription = UPGRADE_DESCRIPTION; + initializeDescription(); + } + } +} diff --git a/src/main/java/sneckomod/cards/WideAngle.java b/src/main/java/sneckomod/cards/WideAngle.java new file mode 100644 index 000000000..b7713e135 --- /dev/null +++ b/src/main/java/sneckomod/cards/WideAngle.java @@ -0,0 +1,40 @@ +package sneckomod.cards; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.DamageAction; +import com.megacrit.cardcrawl.actions.common.DamageAllEnemiesAction; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; + +public class WideAngle extends AbstractSneckoCard { + + public final static String ID = makeID("WideAngle"); + + private static final int COST = 3; + private static final int DAMAGE = 18; + private static final int UPGRADE_DMG = 4; + + public WideAngle() { + super(ID, COST, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ALL_ENEMY); + this.baseDamage = DAMAGE; + this.isMultiDamage = true; + this.selfRetain = true; + SneckoMod.loadJokeCardImage(this, "WideAngle.png"); + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + this.addToBot(new DamageAllEnemiesAction(p, this.multiDamage, this.damageTypeForTurn, AbstractGameAction.AttackEffect.SLASH_HORIZONTAL)); + } + + @Override + public void upgrade() { + if (!this.upgraded) { + upgradeName(); + upgradeDamage(UPGRADE_DMG); + } + } +} diff --git a/src/main/java/sneckomod/cards/WideSting.java b/src/main/java/sneckomod/cards/WideSting.java index a71e98dfa..7e04716bc 100644 --- a/src/main/java/sneckomod/cards/WideSting.java +++ b/src/main/java/sneckomod/cards/WideSting.java @@ -1,14 +1,22 @@ package sneckomod.cards; import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.DamageAction; +import com.megacrit.cardcrawl.actions.common.DamageAllEnemiesAction; import com.megacrit.cardcrawl.actions.common.UpgradeSpecificCardAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.cards.DamageInfo; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.relics.AbstractRelic; +import com.megacrit.cardcrawl.relics.FrozenEgg2; +import com.megacrit.cardcrawl.relics.MoltenEgg2; +import com.megacrit.cardcrawl.relics.ToxicEgg2; import sneckomod.SneckoMod; -import sneckomod.actions.NoApplyRandomDamageAction; +import sneckomod.relics.UnknownEgg; + +import java.util.ArrayList; public class WideSting extends AbstractSneckoCard { @@ -16,68 +24,65 @@ public class WideSting extends AbstractSneckoCard { //stupid intellij stuff ATTACK, ALL, COMMON - private static final int DAMAGE = 12; - private static final int MAGIC = 7; + private static final int DAMAGE = 7; + private static final int UPG_DAMAGE = 3; + + private static int SOFTLOCK = 0; public WideSting() { - super(ID, 2, CardType.ATTACK, CardRarity.COMMON, CardTarget.ALL); + super(ID, 1, CardType.ATTACK, CardRarity.COMMON, CardTarget.ALL_ENEMY); baseDamage = DAMAGE; - baseMagicNumber = magicNumber = MAGIC; SneckoMod.loadJokeCardImage(this, "WideSting.png"); } - @Override - public void applyPowers() { - int CURRENT_MAGIC_NUMBER = baseMagicNumber; - int CURRENT_DMG = baseDamage; - baseDamage = CURRENT_MAGIC_NUMBER; - super.applyPowers(); // takes baseDamage and applies things like Strength or Pen Nib to set damage - - magicNumber = damage; // magic number holds the first condition's modified damage, so !M! will work - isMagicNumberModified = magicNumber != baseMagicNumber; - - // repeat so damage holds the second condition's damage - baseDamage = CURRENT_DMG; - super.applyPowers(); - } - - @Override - public void calculateCardDamage(final AbstractMonster mo) { - int CURRENT_MAGIC_NUMBER = baseMagicNumber; - int CURRENT_DMG = baseDamage; - baseDamage = CURRENT_MAGIC_NUMBER; - super.calculateCardDamage(mo); // takes baseDamage and applies things like Strength or Pen Nib to set damage - - magicNumber = damage; // magic number holds the first condition's modified damage, so !M! will work - isMagicNumberModified = magicNumber != baseMagicNumber; - - // repeat so damage holds the second condition's damage - baseDamage = CURRENT_DMG; - super.calculateCardDamage(mo); + public static boolean cardListDuplicate(ArrayList cardsList, AbstractCard card) { + for (AbstractCard alreadyHave : cardsList) { + if (alreadyHave.cardID.equals(card.cardID) && (SOFTLOCK < 100)) { + SOFTLOCK++; + return true; + } + } + if (SOFTLOCK >= 100) { + System.out.println("SOFTLOCK DETECTED!!!"); + } + return false; } public void use(AbstractPlayer p, AbstractMonster m) { - for (AbstractMonster q : monsterList()) { - atb(new NoApplyRandomDamageAction(q, magicNumber, damage, 1, AbstractGameAction.AttackEffect.LIGHTNING, this, DamageInfo.DamageType.NORMAL)); - } - atb(new AbstractGameAction() { - @Override - public void update() { - isDone = true; - for (AbstractCard q : p.hand.group) { - if (q.color != AbstractDungeon.player.getCardColor()) { - atb(new UpgradeSpecificCardAction(q)); - // atb(new MuddleAction(q)); - } + this.addToBot(new DamageAllEnemiesAction(p, this.multiDamage, this.damageTypeForTurn, AbstractGameAction.AttackEffect.SLASH_DIAGONAL)); + + for (AbstractCard q : p.hand.group) { + if (q.color != AbstractDungeon.player.getCardColor()) { + atb(new UpgradeSpecificCardAction(q)); + // atb(new MuddleAction(q)); } } - }); + } + + @Override + public void onObtainCard() { + ArrayList cardsToReward = new ArrayList<>(); + while (cardsToReward.size() < 3) { + AbstractCard newCard = SneckoMod.getOffClassCardMatchingPredicate(c -> c.rarity == AbstractCard.CardRarity.COMMON); + + for (AbstractRelic r : AbstractDungeon.player.relics) { + r.onPreviewObtainCard(newCard); + } + + if (!cardListDuplicate(cardsToReward, newCard)) { + SOFTLOCK = 0; + cardsToReward.add(newCard.makeCopy()); // Use makeCopy() to ensure a new instance + } + } + + SneckoMod.addGift(cardsToReward); + ; } public void upgrade() { if (!upgraded) { upgradeName(); - upgradeBaseCost(1); + upgradeDamage(UPG_DAMAGE); } } } \ No newline at end of file diff --git a/src/main/java/sneckomod/cards/Yearn.java b/src/main/java/sneckomod/cards/Yearn.java new file mode 100644 index 000000000..ba33006e9 --- /dev/null +++ b/src/main/java/sneckomod/cards/Yearn.java @@ -0,0 +1,55 @@ +package sneckomod.cards; + +import basemod.helpers.CardModifierManager; +import com.badlogic.gdx.graphics.Color; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.DrawCardAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import downfall.util.CardIgnore; +import expansioncontent.cardmods.PropertiesMod; +import sneckomod.SneckoMod; + +@Deprecated +@CardIgnore +public class Yearn extends AbstractSneckoCard { + + public final static String ID = makeID("Yearn"); + + //stupid intellij stuff SKILL, SELF, COMMON + + private static final int MAGIC = 2; + + public Yearn() { + super(ID, 2, CardType.SKILL, CardRarity.SPECIAL, CardTarget.NONE); + baseMagicNumber = magicNumber = MAGIC; + exhaust = true; + SneckoMod.loadJokeCardImage(this, "Yearn.png"); + } + + // code taken from hoard but modified + public void use(AbstractPlayer p, AbstractMonster m) { + atb(new DrawCardAction(magicNumber, new AbstractGameAction() { + @Override + public void update() { + isDone = true; + for (AbstractCard q : DrawCardAction.drawnCards) { + q.superFlash(Color.GREEN.cpy()); + PropertiesMod mod = new PropertiesMod(); + if (!q.selfRetain) + mod.addProperty(PropertiesMod.supportedProperties.RETAIN, false); + if (!mod.bonusPropertiesForThisTurn.isEmpty()) + CardModifierManager.addModifier(q, mod); + } + } + })); + } + + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeBaseCost(1); + } + } +} \ No newline at end of file diff --git a/src/main/java/sneckomod/cards/unknowns/AbstractUnknownCard.java b/src/main/java/sneckomod/cards/unknowns/AbstractUnknownCard.java index 5e80e97bd..4dd982d47 100644 --- a/src/main/java/sneckomod/cards/unknowns/AbstractUnknownCard.java +++ b/src/main/java/sneckomod/cards/unknowns/AbstractUnknownCard.java @@ -17,13 +17,11 @@ import com.megacrit.cardcrawl.helpers.input.InputHelper; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.unlock.UnlockTracker; -import guardian.patches.BottledStasisPatch; import sneckomod.SneckoMod; import sneckomod.TheSnecko; import sneckomod.cards.AbstractSneckoCard; import sneckomod.patches.UnknownExtraUiPatch; -import javax.smartcardio.Card; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.function.Predicate; @@ -31,22 +29,51 @@ public abstract class AbstractUnknownCard extends AbstractSneckoCard implements StartupCard, CustomSavable { + public static final float IMPULSE_AMOUNT = 0.15f; + public static final float MAX_IMPULSE = 0.5f; + public static final float SCROLL_ROTATION_DELAY = 4.0f; + public static float rotationDelay; + public static AbstractCard lastPreviewed; + public static ArrayList unknownReplacements = new ArrayList<>(); + public static ArrayList unknown0CostReplacements = new ArrayList<>(); + public static ArrayList unknown1CostReplacements = new ArrayList<>(); + public static ArrayList unknown2CostReplacements = new ArrayList<>(); + public static ArrayList unknown3CostReplacements = new ArrayList<>(); + public static ArrayList unknownBlockReplacements = new ArrayList<>(); + public static ArrayList> unknownClassReplacements = new ArrayList<>(); + public static ArrayList unknownColorlessReplacements = new ArrayList<>(); + public static ArrayList unknownCommonAttackReplacements = new ArrayList<>(); + public static ArrayList unknownCommonSkillReplacements = new ArrayList<>(); + public static ArrayList unknownDexterityReplacements = new ArrayList<>(); + public static ArrayList unknownExhaustReplacements = new ArrayList<>(); + public static ArrayList unknownRareAttackReplacements = new ArrayList<>(); + public static ArrayList unknownRarePowerReplacements = new ArrayList<>(); + public static ArrayList unknownRareSkillReplacements = new ArrayList<>(); + public static ArrayList unknownStrengthReplacements = new ArrayList<>(); + public static ArrayList unknownStrikeReplacements = new ArrayList<>(); + public static ArrayList unknownUncommonAttackReplacements = new ArrayList<>(); + public static ArrayList unknownUncommonPowerReplacements = new ArrayList<>(); + public static ArrayList unknownUncommonSkillReplacements = new ArrayList<>(); + public static ArrayList unknownVulnerableReplacements = new ArrayList<>(); + public static ArrayList unknownWeakReplacements = new ArrayList<>(); + public static ArrayList unknownXCostReplacements = new ArrayList<>(); + public static ArrayList unknownDrawReplacements = new ArrayList<>(); + public static ArrayList unknownBossReplacements = new ArrayList<>(); public AbstractCard lastUnknownRoll; - + public float rotationTimer; + public float scrollImpulse; public AbstractUnknownCard(final String id, final CardType type, final CardRarity rarity) { super(id, -2, type, rarity, CardTarget.NONE); tags.add(CardTags.HEALING); purgeOnUse = true; cardsToPreview = CardLibrary.cards.get("Madness"); } - public AbstractUnknownCard(final String id, final CardType type, final CardRarity rarity, CardColor color) { super(id, -2, type, rarity, CardTarget.NONE, color); tags.add(CardTags.HEALING); purgeOnUse = true; cardsToPreview = CardLibrary.cards.get("Madness"); } - public AbstractUnknownCard(final String id, final String img, final CardType type, final CardRarity rarity, boolean IsClass) { super(id, img, -2, type, rarity, CardTarget.NONE, IsClass); tags.add(CardTags.HEALING); @@ -68,40 +95,48 @@ public AbstractUnknownCard(final String id, final String img, final CardType typ cardsToPreview = CardLibrary.cards.get("Madness"); } + public static void updateReplacements(ArrayList> funkyPredicates, ArrayList> funkyLists) { + boolean validCard; + + for (AbstractCard c : CardLibrary.getAllCards()) { + if (!c.isSeen) + UnlockTracker.markCardAsSeen(c.cardID); + validCard = !c.hasTag(CardTags.STARTER_STRIKE) && !c.hasTag(CardTags.STARTER_DEFEND) && c.type != CardType.STATUS && c.color != CardColor.CURSE && c.type != CardType.CURSE && c.rarity != CardRarity.SPECIAL && !c.hasTag(SneckoMod.BANNEDFORSNECKO); + + if (AbstractDungeon.player != null && validCard) { + validCard = c.color != AbstractDungeon.player.getCardColor(); + } else if (AbstractDungeon.player == null && validCard) { + validCard = c.color != TheSnecko.Enums.SNECKO_CYAN; + } + + for (int i = 0; i < funkyPredicates.size(); i++) { + Predicate funkyPredicate = funkyPredicates.get(i); + if (funkyPredicate.test(c) && (SneckoMod.pureSneckoMode || (SneckoMod.validColors.contains(c.color) || (AbstractDungeon.player != null && AbstractDungeon.player.chosenClass != TheSnecko.Enums.THE_SNECKO)) || i >= 22)) { + if (validCard) { + ArrayList s = funkyLists.get(funkyPredicates.indexOf(funkyPredicate)); + if (s == null) { + s = new ArrayList<>(); + } + s.add(c.cardID); + } + } + } + } + + // Sort the card lists so the preview shows them in order + for (ArrayList cardList : funkyLists) { + cardList.sort((lhs, rhs) -> { + AbstractCard rCard = CardLibrary.getCard(lhs); + AbstractCard lCard = CardLibrary.getCard(rhs); + return (lCard.color.name() + lCard.rarity.ordinal() + lCard.name).compareTo(rCard.color.name() + rCard.rarity.ordinal() + rCard.name); + }); + } + } + public TextureAtlas.AtlasRegion getOverBannerTex() { return SneckoMod.overBannerAnything; } - public float rotationTimer; - public float scrollImpulse; - public static float rotationDelay; - public static AbstractCard lastPreviewed; - - public static ArrayList unknownReplacements = new ArrayList<>(); - public static ArrayList unknown0CostReplacements = new ArrayList<>(); - public static ArrayList unknown1CostReplacements = new ArrayList<>(); - public static ArrayList unknown2CostReplacements = new ArrayList<>(); - public static ArrayList unknown3CostReplacements = new ArrayList<>(); - public static ArrayList unknownBlockReplacements = new ArrayList<>(); - public static ArrayList> unknownClassReplacements = new ArrayList<>(); - public static ArrayList unknownColorlessReplacements = new ArrayList<>(); - public static ArrayList unknownCommonAttackReplacements = new ArrayList<>(); - public static ArrayList unknownCommonSkillReplacements = new ArrayList<>(); - public static ArrayList unknownDexterityReplacements = new ArrayList<>(); - public static ArrayList unknownExhaustReplacements = new ArrayList<>(); - public static ArrayList unknownRareAttackReplacements = new ArrayList<>(); - public static ArrayList unknownRarePowerReplacements = new ArrayList<>(); - public static ArrayList unknownRareSkillReplacements = new ArrayList<>(); - public static ArrayList unknownStrengthReplacements = new ArrayList<>(); - public static ArrayList unknownStrikeReplacements = new ArrayList<>(); - public static ArrayList unknownUncommonAttackReplacements = new ArrayList<>(); - public static ArrayList unknownUncommonPowerReplacements = new ArrayList<>(); - public static ArrayList unknownUncommonSkillReplacements = new ArrayList<>(); - public static ArrayList unknownVulnerableReplacements = new ArrayList<>(); - public static ArrayList unknownWeakReplacements = new ArrayList<>(); - public static ArrayList unknownXCostReplacements = new ArrayList<>(); - public static ArrayList unknownDrawReplacements = new ArrayList<>(); - public static ArrayList unknownBossReplacements = new ArrayList<>(); // public static ArrayList unknownEtherealReplacements = new ArrayList<>(); // @Override @@ -110,12 +145,8 @@ public void update() { updateInput(false); } - public static final float IMPULSE_AMOUNT = 0.15f; - public static final float MAX_IMPULSE = 0.5f; - public static final float SCROLL_ROTATION_DELAY = 4.0f; - public void updateInput(boolean isSingleView) { - if(this.hb.hovered || isSingleView) { + if (this.hb.hovered || isSingleView) { if (InputHelper.scrolledDown) { rotationDelay = SCROLL_ROTATION_DELAY; scrollImpulse -= IMPULSE_AMOUNT; @@ -128,13 +159,12 @@ public void updateInput(boolean isSingleView) { } } - @Override public void renderCardPreview(SpriteBatch sb) { if ((AbstractDungeon.player != null) && (AbstractDungeon.player.isDraggingCard)) { return; } - if(lastPreviewed != this) { + if (lastPreviewed != this) { // reset delay between scrolling and resuming auto scroll if a different card is previewed lastPreviewed = this; rotationDelay = 0.0f; @@ -146,9 +176,10 @@ public void renderCardPreview(SpriteBatch sb) { public void renderCardPreviewInSingleView(SpriteBatch sb) { renderCardPreviewImpl(sb, true); } + public void renderCardPreviewImpl(SpriteBatch sb, boolean isSingleView) { ArrayList cardList = myList(); - if(cardList.size() == 0) { + if (cardList.size() == 0) { // render default preview card: Madness if (isSingleView) { super.renderCardPreviewInSingleView(sb); @@ -161,15 +192,15 @@ public void renderCardPreviewImpl(SpriteBatch sb, boolean isSingleView) { float interval = 1.5f; - if(rotationTimer <= 0F) { + if (rotationTimer <= 0F) { rotationTimer = interval * cardList.size(); } - int cardIdx = (int)(rotationTimer / interval) % cardList.size(); + int cardIdx = (int) (rotationTimer / interval) % cardList.size(); AbstractCard[] cards = new AbstractCard[7]; - for(int i = 0; i < cards.length; i++) { + for (int i = 0; i < cards.length; i++) { cards[i] = CardLibrary.cards.get(cardList.get(cardIdx)).makeCopy(); // please cache these UnknownExtraUiPatch.parentCard.set(cards[i], this); - if(upgraded) { + if (upgraded) { cards[i].upgrade(); } @@ -181,15 +212,15 @@ public void renderCardPreviewImpl(SpriteBatch sb, boolean isSingleView) { float tmpScale = this.drawScale * 0.8F; - for(int i=0; i Settings.WIDTH * 0.75F) { card.current_x = (this.current_x + (IMG_WIDTH * 0.9f + 16.0F) * this.drawScale); } else { @@ -199,17 +230,16 @@ public void renderCardPreviewImpl(SpriteBatch sb, boolean isSingleView) { } - card.render(sb); } - if(rotationDelay > 0.0f) { + if (rotationDelay > 0.0f) { rotationDelay -= Gdx.graphics.getDeltaTime(); } else { rotationTimer -= Gdx.graphics.getDeltaTime(); } rotationTimer += scrollImpulse; scrollImpulse *= 0.85; - if(Math.abs(scrollImpulse) < 0.01) scrollImpulse = 0; + if (Math.abs(scrollImpulse) < 0.01) scrollImpulse = 0; } @@ -246,43 +276,6 @@ public void update() { public abstract ArrayList myList(); - public static void updateReplacements(ArrayList> funkyPredicates, ArrayList> funkyLists) { - boolean validCard; - - for (AbstractCard c : CardLibrary.getAllCards()) { - if (!c.isSeen) - UnlockTracker.markCardAsSeen(c.cardID); - validCard = !c.hasTag(CardTags.STARTER_STRIKE) && !c.hasTag(CardTags.STARTER_DEFEND) && c.type != CardType.STATUS && c.color != CardColor.CURSE && c.type != CardType.CURSE && c.rarity != CardRarity.SPECIAL && !c.hasTag(SneckoMod.BANNEDFORSNECKO); - - if (AbstractDungeon.player != null && validCard) { - validCard = c.color != AbstractDungeon.player.getCardColor(); - } else if (AbstractDungeon.player == null && validCard) { - validCard = c.color != TheSnecko.Enums.SNECKO_CYAN; - } - - for (int i = 0; i < funkyPredicates.size(); i++) { - Predicate funkyPredicate = funkyPredicates.get(i); - if (funkyPredicate.test(c) && (SneckoMod.pureSneckoMode || (SneckoMod.validColors.contains(c.color) || (AbstractDungeon.player != null && AbstractDungeon.player.chosenClass != TheSnecko.Enums.THE_SNECKO)) || i >= 22)) { if (validCard) { - ArrayList s = funkyLists.get(funkyPredicates.indexOf(funkyPredicate)); - if (s == null) { - s = new ArrayList<>(); - } - s.add(c.cardID); - } - } - } - } - - // Sort the card lists so the preview shows them in order - for (ArrayList cardList: funkyLists) { - cardList.sort((lhs, rhs) -> { - AbstractCard rCard = CardLibrary.getCard(lhs); - AbstractCard lCard = CardLibrary.getCard(rhs); - return (lCard.color.name() + lCard.rarity.ordinal() + lCard.name).compareTo(rCard.color.name() + rCard.rarity.ordinal() + rCard.name); - }); - } - } - @Override public boolean atBattleStartPreDraw() { addToBot(new AbstractGameAction() { @@ -309,7 +302,7 @@ public void replaceUnknown() { if (this.upgraded) cUnknown.upgrade(); if (StSLib.getMasterDeckEquivalent(this) != null) { - ((AbstractUnknownCard)StSLib.getMasterDeckEquivalent(this)).lastUnknownRoll = cUnknown.makeCopy(); + ((AbstractUnknownCard) StSLib.getMasterDeckEquivalent(this)).lastUnknownRoll = cUnknown.makeCopy(); } @@ -321,7 +314,7 @@ public void replaceUnknown() { } else { //This check should always pass, but a crash report indicates it rarely can not. //So if the idx is somehow outside the array's bounds, add the card to bottom instead. - if (idx > -1 && idx < p.drawPile.group.size()){ + if (idx > -1 && idx < p.drawPile.group.size()) { AbstractDungeon.player.drawPile.group.add(idx, cUnknown); } else { AbstractDungeon.player.drawPile.addToBottom(cUnknown); @@ -377,7 +370,7 @@ public void replaceUnknownFromHand() { @Override public String onSave() { - if (lastUnknownRoll != null){ + if (lastUnknownRoll != null) { return lastUnknownRoll.cardID; } return ""; @@ -386,7 +379,7 @@ public String onSave() { @Override public void onLoad(String cardID) { // Not the most elegant solution but I can't make AbstractDamageModifier serializable because it isn't my code. - if (cardID != ""){ + if (cardID != "") { if (CardLibrary.isACard(cardID)) { lastUnknownRoll = CardLibrary.getCard(cardID).makeCopy(); } @@ -398,4 +391,4 @@ public void onLoad(String cardID) { public Type savedType() { return String.class; } -} +} \ No newline at end of file diff --git a/src/main/java/sneckomod/cards/unknowns/Unknown.java b/src/main/java/sneckomod/cards/unknowns/Unknown.java index 5fc0d3c65..715b90fd6 100644 --- a/src/main/java/sneckomod/cards/unknowns/Unknown.java +++ b/src/main/java/sneckomod/cards/unknowns/Unknown.java @@ -1,5 +1,6 @@ package sneckomod.cards.unknowns; +import basemod.patches.com.megacrit.cardcrawl.screens.compendium.CardLibraryScreen.NoCompendium; import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.megacrit.cardcrawl.cards.AbstractCard; import sneckomod.SneckoMod; @@ -7,11 +8,12 @@ import java.util.ArrayList; import java.util.function.Predicate; +@NoCompendium public class Unknown extends AbstractUnknownCard { public final static String ID = makeID("Unknown"); public Unknown() { - super(ID, CardType.SKILL, CardRarity.BASIC); + super(ID, CardType.SKILL, CardRarity.SPECIAL); SneckoMod.loadJokeCardImage(this, "Unknown.png"); } diff --git a/src/main/java/sneckomod/cards/unknowns/Unknown0Cost.java b/src/main/java/sneckomod/cards/unknowns/Unknown0Cost.java index 88fdf39bb..9b3c23c0e 100644 --- a/src/main/java/sneckomod/cards/unknowns/Unknown0Cost.java +++ b/src/main/java/sneckomod/cards/unknowns/Unknown0Cost.java @@ -1,6 +1,6 @@ package sneckomod.cards.unknowns; -import com.badlogic.gdx.graphics.Texture; +import basemod.patches.com.megacrit.cardcrawl.screens.compendium.CardLibraryScreen.NoCompendium; import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.megacrit.cardcrawl.cards.AbstractCard; import sneckomod.SneckoMod; @@ -8,11 +8,12 @@ import java.util.ArrayList; import java.util.function.Predicate; +@NoCompendium public class Unknown0Cost extends AbstractUnknownCard { public final static String ID = makeID("Unknown0Cost"); public Unknown0Cost() { - super(ID, CardType.SKILL, CardRarity.UNCOMMON); + super(ID, CardType.SKILL, CardRarity.SPECIAL); SneckoMod.loadJokeCardImage(this, "Unknown0Cost.png"); } diff --git a/src/main/java/sneckomod/cards/unknowns/Unknown1Cost.java b/src/main/java/sneckomod/cards/unknowns/Unknown1Cost.java index 38187b229..9adbee01e 100644 --- a/src/main/java/sneckomod/cards/unknowns/Unknown1Cost.java +++ b/src/main/java/sneckomod/cards/unknowns/Unknown1Cost.java @@ -1,6 +1,6 @@ package sneckomod.cards.unknowns; -import com.badlogic.gdx.graphics.Texture; +import basemod.patches.com.megacrit.cardcrawl.screens.compendium.CardLibraryScreen.NoCompendium; import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.megacrit.cardcrawl.cards.AbstractCard; import sneckomod.SneckoMod; @@ -8,11 +8,12 @@ import java.util.ArrayList; import java.util.function.Predicate; +@NoCompendium public class Unknown1Cost extends AbstractUnknownCard { public final static String ID = makeID("Unknown1Cost"); public Unknown1Cost() { - super(ID, CardType.SKILL, CardRarity.COMMON); + super(ID, CardType.SKILL, CardRarity.SPECIAL); SneckoMod.loadJokeCardImage(this, "Unknown1Cost.png"); } diff --git a/src/main/java/sneckomod/cards/unknowns/Unknown2Cost.java b/src/main/java/sneckomod/cards/unknowns/Unknown2Cost.java index c56d6a0ab..4a1cfbe58 100644 --- a/src/main/java/sneckomod/cards/unknowns/Unknown2Cost.java +++ b/src/main/java/sneckomod/cards/unknowns/Unknown2Cost.java @@ -1,6 +1,6 @@ package sneckomod.cards.unknowns; -import com.badlogic.gdx.graphics.Texture; +import basemod.patches.com.megacrit.cardcrawl.screens.compendium.CardLibraryScreen.NoCompendium; import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.megacrit.cardcrawl.cards.AbstractCard; import sneckomod.SneckoMod; @@ -8,11 +8,12 @@ import java.util.ArrayList; import java.util.function.Predicate; +@NoCompendium public class Unknown2Cost extends AbstractUnknownCard { public final static String ID = makeID("Unknown2Cost"); public Unknown2Cost() { - super(ID, CardType.SKILL, CardRarity.UNCOMMON); + super(ID, CardType.SKILL, CardRarity.SPECIAL); SneckoMod.loadJokeCardImage(this, "Unknown2Cost.png"); } diff --git a/src/main/java/sneckomod/cards/unknowns/Unknown3Cost.java b/src/main/java/sneckomod/cards/unknowns/Unknown3Cost.java index d665dde52..3bdc88aaf 100644 --- a/src/main/java/sneckomod/cards/unknowns/Unknown3Cost.java +++ b/src/main/java/sneckomod/cards/unknowns/Unknown3Cost.java @@ -1,6 +1,6 @@ package sneckomod.cards.unknowns; -import com.badlogic.gdx.graphics.Texture; +import basemod.patches.com.megacrit.cardcrawl.screens.compendium.CardLibraryScreen.NoCompendium; import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.megacrit.cardcrawl.cards.AbstractCard; import sneckomod.SneckoMod; @@ -8,11 +8,12 @@ import java.util.ArrayList; import java.util.function.Predicate; +@NoCompendium public class Unknown3Cost extends AbstractUnknownCard { public final static String ID = makeID("Unknown3Cost"); public Unknown3Cost() { - super(ID, CardType.SKILL, CardRarity.RARE); + super(ID, CardType.SKILL, CardRarity.SPECIAL); SneckoMod.loadJokeCardImage(this, "Unknown3Cost.png"); } diff --git a/src/main/java/sneckomod/cards/unknowns/UnknownBlock.java b/src/main/java/sneckomod/cards/unknowns/UnknownBlock.java index 76c8cf262..2777a4139 100644 --- a/src/main/java/sneckomod/cards/unknowns/UnknownBlock.java +++ b/src/main/java/sneckomod/cards/unknowns/UnknownBlock.java @@ -1,6 +1,6 @@ package sneckomod.cards.unknowns; -import com.badlogic.gdx.graphics.Texture; +import basemod.patches.com.megacrit.cardcrawl.screens.compendium.CardLibraryScreen.NoCompendium; import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.core.CardCrawlGame; @@ -10,12 +10,13 @@ import java.util.ArrayList; import java.util.function.Predicate; +@NoCompendium public class UnknownBlock extends AbstractUnknownCard { public final static String ID = makeID("UnknownBlock"); public static boolean bruh = false; public UnknownBlock() { - super(ID, CardType.SKILL, CardRarity.COMMON); + super(ID, CardType.SKILL, CardRarity.SPECIAL); SneckoMod.loadJokeCardImage(this, "UnknownBlock.png"); } @@ -24,7 +25,7 @@ public boolean useCheck(AbstractCard card) { Keyword keywordString = CardCrawlGame.languagePack.getKeywordString("Game Dictionary").BLOCK; for (int i = 0; i < keywordString.NAMES.length; i++) { - if (!bruh){ + if (!bruh) { String key = keywordString.NAMES[i]; key = key.toLowerCase(); String test = card.rawDescription.toLowerCase(); diff --git a/src/main/java/sneckomod/cards/unknowns/UnknownBoss.java b/src/main/java/sneckomod/cards/unknowns/UnknownBoss.java index 1de1fd0ad..1268be625 100644 --- a/src/main/java/sneckomod/cards/unknowns/UnknownBoss.java +++ b/src/main/java/sneckomod/cards/unknowns/UnknownBoss.java @@ -1,5 +1,6 @@ package sneckomod.cards.unknowns; +import basemod.patches.com.megacrit.cardcrawl.screens.compendium.CardLibraryScreen.NoCompendium; import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.megacrit.cardcrawl.cards.AbstractCard; import expansioncontent.expansionContentMod; @@ -8,11 +9,12 @@ import java.util.ArrayList; import java.util.function.Predicate; +@NoCompendium public class UnknownBoss extends AbstractUnknownCard { public final static String ID = makeID("UnknownBoss"); public UnknownBoss() { - super(ID, CardType.SKILL, CardRarity.RARE); + super(ID, CardType.SKILL, CardRarity.SPECIAL); SneckoMod.loadJokeCardImage(this, "UnknownBoss.png"); } diff --git a/src/main/java/sneckomod/cards/unknowns/UnknownClass.java b/src/main/java/sneckomod/cards/unknowns/UnknownClass.java index c21b2e0cd..5c4b2af3e 100644 --- a/src/main/java/sneckomod/cards/unknowns/UnknownClass.java +++ b/src/main/java/sneckomod/cards/unknowns/UnknownClass.java @@ -1,6 +1,7 @@ package sneckomod.cards.unknowns; import basemod.BaseMod; +import basemod.patches.com.megacrit.cardcrawl.screens.compendium.CardLibraryScreen.NoCompendium; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.megacrit.cardcrawl.cards.AbstractCard; @@ -17,14 +18,15 @@ import static sneckomod.SneckoMod.makeCardPath; @CardIgnore +@NoCompendium public class UnknownClass extends AbstractUnknownCard { public final static String ID = makeID("UnknownClass"); - private static String[] unknownClass = CardCrawlGame.languagePack.getUIString(ID).TEXT; - private String TID; //Temporary ID + private static final String[] unknownClass = CardCrawlGame.languagePack.getUIString(ID).TEXT; public CardColor myColor; + private final String TID; //Temporary ID public UnknownClass(CardColor cardColor) { - super(ID + cardColor.name(), determineCardImg(cardColor), CardType.SKILL, CardRarity.COMMON, true); + super(ID + cardColor.name(), determineCardImg(cardColor), CardType.SKILL, CardRarity.SPECIAL, true); TID = ID + cardColor.name(); myColor = cardColor; name = unknownClass[0]; @@ -38,10 +40,10 @@ public UnknownClass(CardColor cardColor) { } UPGRADE_DESCRIPTION = unknownClass[6] + rawDescription; if (CardCrawlGame.languagePack.getCardStrings(TID).NAME == "[MISSING_TITLE]") { - BaseMod.loadCustomStrings(CardStrings.class, "{\"" + TID - + "\": {\"NAME\": \"" + name - + "\", \"DESCRIPTION\": \"" + rawDescription - + "\", \"UPGRADE_DESCRIPTION\": \"" + UPGRADE_DESCRIPTION +"\"}}"); + BaseMod.loadCustomStrings(CardStrings.class, "{\"" + TID + + "\": {\"NAME\": \"" + name + + "\", \"DESCRIPTION\": \"" + rawDescription + + "\", \"UPGRADE_DESCRIPTION\": \"" + UPGRADE_DESCRIPTION + "\"}}"); } initializeDescription(); SneckoMod.loadJokeCardImage(this, "UnknownClass.png"); diff --git a/src/main/java/sneckomod/cards/unknowns/UnknownColorless.java b/src/main/java/sneckomod/cards/unknowns/UnknownColorless.java index 33607d723..cc2dcf998 100644 --- a/src/main/java/sneckomod/cards/unknowns/UnknownColorless.java +++ b/src/main/java/sneckomod/cards/unknowns/UnknownColorless.java @@ -1,5 +1,6 @@ package sneckomod.cards.unknowns; +import basemod.patches.com.megacrit.cardcrawl.screens.compendium.CardLibraryScreen.NoCompendium; import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.megacrit.cardcrawl.cards.AbstractCard; import sneckomod.SneckoMod; @@ -7,11 +8,12 @@ import java.util.ArrayList; import java.util.function.Predicate; +@NoCompendium public class UnknownColorless extends AbstractUnknownCard { public final static String ID = makeID("UnknownColorless"); public UnknownColorless() { - super(ID, CardType.SKILL, CardRarity.UNCOMMON); + super(ID, CardType.SKILL, CardRarity.SPECIAL); SneckoMod.loadJokeCardImage(this, "UnknownColorless.png"); } diff --git a/src/main/java/sneckomod/cards/unknowns/UnknownCommonAttack.java b/src/main/java/sneckomod/cards/unknowns/UnknownCommonAttack.java index 06801a4ed..f39d9f9af 100644 --- a/src/main/java/sneckomod/cards/unknowns/UnknownCommonAttack.java +++ b/src/main/java/sneckomod/cards/unknowns/UnknownCommonAttack.java @@ -1,6 +1,6 @@ package sneckomod.cards.unknowns; -import com.badlogic.gdx.graphics.Texture; +import basemod.patches.com.megacrit.cardcrawl.screens.compendium.CardLibraryScreen.NoCompendium; import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.megacrit.cardcrawl.cards.AbstractCard; import sneckomod.SneckoMod; @@ -8,11 +8,12 @@ import java.util.ArrayList; import java.util.function.Predicate; +@NoCompendium public class UnknownCommonAttack extends AbstractUnknownCard { public final static String ID = makeID("UnknownCommonAttack"); public UnknownCommonAttack() { - super(ID, CardType.ATTACK, CardRarity.COMMON); + super(ID, CardType.ATTACK, CardRarity.SPECIAL); SneckoMod.loadJokeCardImage(this, "UnknownCommonAttack.png"); } diff --git a/src/main/java/sneckomod/cards/unknowns/UnknownCommonSkill.java b/src/main/java/sneckomod/cards/unknowns/UnknownCommonSkill.java index 2b91f8dd8..5c06f11bb 100644 --- a/src/main/java/sneckomod/cards/unknowns/UnknownCommonSkill.java +++ b/src/main/java/sneckomod/cards/unknowns/UnknownCommonSkill.java @@ -1,6 +1,6 @@ package sneckomod.cards.unknowns; -import com.badlogic.gdx.graphics.Texture; +import basemod.patches.com.megacrit.cardcrawl.screens.compendium.CardLibraryScreen.NoCompendium; import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.megacrit.cardcrawl.cards.AbstractCard; import sneckomod.SneckoMod; @@ -8,11 +8,12 @@ import java.util.ArrayList; import java.util.function.Predicate; +@NoCompendium public class UnknownCommonSkill extends AbstractUnknownCard { public final static String ID = makeID("UnknownCommonSkill"); public UnknownCommonSkill() { - super(ID, CardType.SKILL, CardRarity.COMMON); + super(ID, CardType.SKILL, CardRarity.SPECIAL); SneckoMod.loadJokeCardImage(this, "UnknownCommonSkill.png"); } diff --git a/src/main/java/sneckomod/cards/unknowns/UnknownDexterity.java b/src/main/java/sneckomod/cards/unknowns/UnknownDexterity.java index 97b9edda7..176a047fb 100644 --- a/src/main/java/sneckomod/cards/unknowns/UnknownDexterity.java +++ b/src/main/java/sneckomod/cards/unknowns/UnknownDexterity.java @@ -1,27 +1,22 @@ package sneckomod.cards.unknowns; -import com.badlogic.gdx.graphics.Texture; +import basemod.patches.com.megacrit.cardcrawl.screens.compendium.CardLibraryScreen.NoCompendium; import com.badlogic.gdx.graphics.g2d.TextureAtlas; -import com.evacipated.cardcrawl.modthespire.Loader; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.localization.Keyword; -import com.megacrit.cardcrawl.powers.AbstractPower; -import com.megacrit.cardcrawl.powers.DexterityPower; -import javassist.*; -import javassist.expr.ExprEditor; -import javassist.expr.NewExpr; import sneckomod.SneckoMod; import java.util.ArrayList; import java.util.function.Predicate; +@NoCompendium public class UnknownDexterity extends AbstractUnknownCard { public final static String ID = makeID("UnknownDexterity"); public static boolean bruh = false; public UnknownDexterity() { - super(ID, CardType.SKILL, CardRarity.UNCOMMON); + super(ID, CardType.SKILL, CardRarity.SPECIAL); SneckoMod.loadJokeCardImage(this, "UnknownDexterity.png"); } @@ -30,7 +25,7 @@ public boolean useCheck(AbstractCard card) { Keyword keywordString = CardCrawlGame.languagePack.getKeywordString("Game Dictionary").DEXTERITY; for (int i = 0; i < keywordString.NAMES.length; i++) { - if (!bruh){ + if (!bruh) { String key = keywordString.NAMES[i]; key = key.toLowerCase(); String test = card.rawDescription.toLowerCase(); diff --git a/src/main/java/sneckomod/cards/unknowns/UnknownDraw.java b/src/main/java/sneckomod/cards/unknowns/UnknownDraw.java index 57bd590ad..805268f07 100644 --- a/src/main/java/sneckomod/cards/unknowns/UnknownDraw.java +++ b/src/main/java/sneckomod/cards/unknowns/UnknownDraw.java @@ -1,15 +1,13 @@ package sneckomod.cards.unknowns; -import com.badlogic.gdx.graphics.Texture; +import basemod.patches.com.megacrit.cardcrawl.screens.compendium.CardLibraryScreen.NoCompendium; import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.evacipated.cardcrawl.modthespire.Loader; import com.megacrit.cardcrawl.actions.AbstractGameAction; -import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; import com.megacrit.cardcrawl.actions.common.DrawCardAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.powers.AbstractPower; import com.megacrit.cardcrawl.powers.DrawCardNextTurnPower; -import com.megacrit.cardcrawl.powers.StrengthPower; import javassist.*; import javassist.expr.ExprEditor; import javassist.expr.NewExpr; @@ -18,12 +16,13 @@ import java.util.ArrayList; import java.util.function.Predicate; +@NoCompendium public class UnknownDraw extends AbstractUnknownCard { public final static String ID = makeID("UnknownDraw"); public static boolean bruh = false; public UnknownDraw() { - super(ID, CardType.SKILL, CardRarity.COMMON); + super(ID, CardType.SKILL, CardRarity.SPECIAL); SneckoMod.loadJokeCardImage(this, "UnknownDraw.png"); } diff --git a/src/main/java/sneckomod/cards/unknowns/UnknownExhaust.java b/src/main/java/sneckomod/cards/unknowns/UnknownExhaust.java index a96a419b5..8111c0bfd 100644 --- a/src/main/java/sneckomod/cards/unknowns/UnknownExhaust.java +++ b/src/main/java/sneckomod/cards/unknowns/UnknownExhaust.java @@ -1,6 +1,6 @@ package sneckomod.cards.unknowns; -import com.badlogic.gdx.graphics.Texture; +import basemod.patches.com.megacrit.cardcrawl.screens.compendium.CardLibraryScreen.NoCompendium; import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.core.CardCrawlGame; @@ -10,12 +10,13 @@ import java.util.ArrayList; import java.util.function.Predicate; +@NoCompendium public class UnknownExhaust extends AbstractUnknownCard { public final static String ID = makeID("UnknownExhaust"); public static boolean bruh = false; public UnknownExhaust() { - super(ID, CardType.SKILL, CardRarity.UNCOMMON); + super(ID, CardType.SKILL, CardRarity.SPECIAL); SneckoMod.loadJokeCardImage(this, "UnknownExhaust.png"); } @@ -25,7 +26,7 @@ public boolean useCheck(AbstractCard card) { Keyword keywordString = CardCrawlGame.languagePack.getKeywordString("Game Dictionary").EXHAUST; for (int i = 0; i < keywordString.NAMES.length; i++) { - if (!bruh){ + if (!bruh) { String key = keywordString.NAMES[i]; key = key.toLowerCase(); String test = card.rawDescription.toLowerCase(); diff --git a/src/main/java/sneckomod/cards/unknowns/UnknownRareAttack.java b/src/main/java/sneckomod/cards/unknowns/UnknownRareAttack.java index c4ead5c40..95d7bdb2d 100644 --- a/src/main/java/sneckomod/cards/unknowns/UnknownRareAttack.java +++ b/src/main/java/sneckomod/cards/unknowns/UnknownRareAttack.java @@ -1,6 +1,6 @@ package sneckomod.cards.unknowns; -import com.badlogic.gdx.graphics.Texture; +import basemod.patches.com.megacrit.cardcrawl.screens.compendium.CardLibraryScreen.NoCompendium; import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.megacrit.cardcrawl.cards.AbstractCard; import sneckomod.SneckoMod; @@ -8,11 +8,12 @@ import java.util.ArrayList; import java.util.function.Predicate; +@NoCompendium public class UnknownRareAttack extends AbstractUnknownCard { public final static String ID = makeID("UnknownRareAttack"); public UnknownRareAttack() { - super(ID, CardType.ATTACK, CardRarity.RARE); + super(ID, CardType.ATTACK, CardRarity.SPECIAL); SneckoMod.loadJokeCardImage(this, "UnknownRareAttack.png"); } diff --git a/src/main/java/sneckomod/cards/unknowns/UnknownRarePower.java b/src/main/java/sneckomod/cards/unknowns/UnknownRarePower.java index 34c3f1524..404b9fab2 100644 --- a/src/main/java/sneckomod/cards/unknowns/UnknownRarePower.java +++ b/src/main/java/sneckomod/cards/unknowns/UnknownRarePower.java @@ -1,6 +1,6 @@ package sneckomod.cards.unknowns; -import com.badlogic.gdx.graphics.Texture; +import basemod.patches.com.megacrit.cardcrawl.screens.compendium.CardLibraryScreen.NoCompendium; import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.megacrit.cardcrawl.cards.AbstractCard; import sneckomod.SneckoMod; @@ -8,11 +8,12 @@ import java.util.ArrayList; import java.util.function.Predicate; +@NoCompendium public class UnknownRarePower extends AbstractUnknownCard { public final static String ID = makeID("UnknownRarePower"); public UnknownRarePower() { - super(ID, CardType.POWER, CardRarity.RARE); + super(ID, CardType.POWER, CardRarity.SPECIAL); SneckoMod.loadJokeCardImage(this, "UnknownRarePower.png"); } diff --git a/src/main/java/sneckomod/cards/unknowns/UnknownRareSkill.java b/src/main/java/sneckomod/cards/unknowns/UnknownRareSkill.java index d8d9bec63..049c614cc 100644 --- a/src/main/java/sneckomod/cards/unknowns/UnknownRareSkill.java +++ b/src/main/java/sneckomod/cards/unknowns/UnknownRareSkill.java @@ -1,6 +1,6 @@ package sneckomod.cards.unknowns; -import com.badlogic.gdx.graphics.Texture; +import basemod.patches.com.megacrit.cardcrawl.screens.compendium.CardLibraryScreen.NoCompendium; import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.megacrit.cardcrawl.cards.AbstractCard; import sneckomod.SneckoMod; @@ -8,11 +8,12 @@ import java.util.ArrayList; import java.util.function.Predicate; +@NoCompendium public class UnknownRareSkill extends AbstractUnknownCard { public final static String ID = makeID("UnknownRareSkill"); public UnknownRareSkill() { - super(ID, CardType.SKILL, CardRarity.RARE); + super(ID, CardType.SKILL, CardRarity.SPECIAL); SneckoMod.loadJokeCardImage(this, "UnknownRareSkill.png"); } diff --git a/src/main/java/sneckomod/cards/unknowns/UnknownStrength.java b/src/main/java/sneckomod/cards/unknowns/UnknownStrength.java index e7a519a82..6fe71e044 100644 --- a/src/main/java/sneckomod/cards/unknowns/UnknownStrength.java +++ b/src/main/java/sneckomod/cards/unknowns/UnknownStrength.java @@ -1,30 +1,22 @@ package sneckomod.cards.unknowns; -import com.badlogic.gdx.graphics.Texture; +import basemod.patches.com.megacrit.cardcrawl.screens.compendium.CardLibraryScreen.NoCompendium; import com.badlogic.gdx.graphics.g2d.TextureAtlas; -import com.evacipated.cardcrawl.modthespire.Loader; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.localization.Keyword; -import com.megacrit.cardcrawl.localization.KeywordStrings; -import com.megacrit.cardcrawl.localization.LocalizedStrings; -import com.megacrit.cardcrawl.powers.AbstractPower; -import com.megacrit.cardcrawl.powers.StrengthPower; -import javassist.*; -import javassist.expr.ExprEditor; -import javassist.expr.NewExpr; -import slimebound.SlimeboundMod; import sneckomod.SneckoMod; import java.util.ArrayList; import java.util.function.Predicate; +@NoCompendium public class UnknownStrength extends AbstractUnknownCard { public final static String ID = makeID("UnknownStrength"); public static boolean bruh = false; public UnknownStrength() { - super(ID, CardType.SKILL, CardRarity.UNCOMMON); + super(ID, CardType.SKILL, CardRarity.SPECIAL); SneckoMod.loadJokeCardImage(this, "UnknownStrength.png"); } @@ -33,7 +25,7 @@ public boolean useCheck(AbstractCard card) { Keyword keywordString = CardCrawlGame.languagePack.getKeywordString("Game Dictionary").STRENGTH; for (int i = 0; i < keywordString.NAMES.length; i++) { - if (!bruh){ + if (!bruh) { String key = keywordString.NAMES[i]; key = key.toLowerCase(); String test = card.rawDescription.toLowerCase(); diff --git a/src/main/java/sneckomod/cards/unknowns/UnknownStrike.java b/src/main/java/sneckomod/cards/unknowns/UnknownStrike.java index d42814eb6..e4d01b664 100644 --- a/src/main/java/sneckomod/cards/unknowns/UnknownStrike.java +++ b/src/main/java/sneckomod/cards/unknowns/UnknownStrike.java @@ -1,6 +1,6 @@ package sneckomod.cards.unknowns; -import com.badlogic.gdx.graphics.Texture; +import basemod.patches.com.megacrit.cardcrawl.screens.compendium.CardLibraryScreen.NoCompendium; import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.megacrit.cardcrawl.cards.AbstractCard; import sneckomod.SneckoMod; @@ -8,11 +8,12 @@ import java.util.ArrayList; import java.util.function.Predicate; +@NoCompendium public class UnknownStrike extends AbstractUnknownCard { public final static String ID = makeID("UnknownStrike"); public UnknownStrike() { - super(ID, CardType.ATTACK, CardRarity.UNCOMMON); + super(ID, CardType.ATTACK, CardRarity.SPECIAL); tags.add(CardTags.STRIKE); SneckoMod.loadJokeCardImage(this, "UnknownStrike.png"); } diff --git a/src/main/java/sneckomod/cards/unknowns/UnknownUncommonAttack.java b/src/main/java/sneckomod/cards/unknowns/UnknownUncommonAttack.java index 0ff97d310..2a961746e 100644 --- a/src/main/java/sneckomod/cards/unknowns/UnknownUncommonAttack.java +++ b/src/main/java/sneckomod/cards/unknowns/UnknownUncommonAttack.java @@ -1,6 +1,6 @@ package sneckomod.cards.unknowns; -import com.badlogic.gdx.graphics.Texture; +import basemod.patches.com.megacrit.cardcrawl.screens.compendium.CardLibraryScreen.NoCompendium; import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.megacrit.cardcrawl.cards.AbstractCard; import sneckomod.SneckoMod; @@ -8,11 +8,12 @@ import java.util.ArrayList; import java.util.function.Predicate; +@NoCompendium public class UnknownUncommonAttack extends AbstractUnknownCard { public final static String ID = makeID("UnknownUncommonAttack"); public UnknownUncommonAttack() { - super(ID, CardType.ATTACK, CardRarity.UNCOMMON); + super(ID, CardType.ATTACK, CardRarity.SPECIAL); SneckoMod.loadJokeCardImage(this, "UnknownUncommonAttack.png"); } diff --git a/src/main/java/sneckomod/cards/unknowns/UnknownUncommonPower.java b/src/main/java/sneckomod/cards/unknowns/UnknownUncommonPower.java index 8e2a4a340..77555c09d 100644 --- a/src/main/java/sneckomod/cards/unknowns/UnknownUncommonPower.java +++ b/src/main/java/sneckomod/cards/unknowns/UnknownUncommonPower.java @@ -1,5 +1,6 @@ package sneckomod.cards.unknowns; +import basemod.patches.com.megacrit.cardcrawl.screens.compendium.CardLibraryScreen.NoCompendium; import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.megacrit.cardcrawl.cards.AbstractCard; import sneckomod.SneckoMod; @@ -7,11 +8,12 @@ import java.util.ArrayList; import java.util.function.Predicate; +@NoCompendium public class UnknownUncommonPower extends AbstractUnknownCard { public final static String ID = makeID("UnknownUncommonPower"); public UnknownUncommonPower() { - super(ID, CardType.POWER, CardRarity.UNCOMMON); + super(ID, CardType.POWER, CardRarity.SPECIAL); SneckoMod.loadJokeCardImage(this, "UnknownUncommonPower.png"); } diff --git a/src/main/java/sneckomod/cards/unknowns/UnknownUncommonSkill.java b/src/main/java/sneckomod/cards/unknowns/UnknownUncommonSkill.java index 5062d35a1..346bc7892 100644 --- a/src/main/java/sneckomod/cards/unknowns/UnknownUncommonSkill.java +++ b/src/main/java/sneckomod/cards/unknowns/UnknownUncommonSkill.java @@ -1,6 +1,6 @@ package sneckomod.cards.unknowns; -import com.badlogic.gdx.graphics.Texture; +import basemod.patches.com.megacrit.cardcrawl.screens.compendium.CardLibraryScreen.NoCompendium; import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.megacrit.cardcrawl.cards.AbstractCard; import sneckomod.SneckoMod; @@ -8,11 +8,12 @@ import java.util.ArrayList; import java.util.function.Predicate; +@NoCompendium public class UnknownUncommonSkill extends AbstractUnknownCard { public final static String ID = makeID("UnknownUncommonSkill"); public UnknownUncommonSkill() { - super(ID, CardType.SKILL, CardRarity.UNCOMMON); + super(ID, CardType.SKILL, CardRarity.SPECIAL); SneckoMod.loadJokeCardImage(this, "UnknownUncommonSkill.png"); } diff --git a/src/main/java/sneckomod/cards/unknowns/UnknownVulnerable.java b/src/main/java/sneckomod/cards/unknowns/UnknownVulnerable.java index 9ef81c936..2389ea7db 100644 --- a/src/main/java/sneckomod/cards/unknowns/UnknownVulnerable.java +++ b/src/main/java/sneckomod/cards/unknowns/UnknownVulnerable.java @@ -1,28 +1,22 @@ package sneckomod.cards.unknowns; -import com.badlogic.gdx.graphics.Texture; +import basemod.patches.com.megacrit.cardcrawl.screens.compendium.CardLibraryScreen.NoCompendium; import com.badlogic.gdx.graphics.g2d.TextureAtlas; -import com.evacipated.cardcrawl.modthespire.Loader; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.localization.Keyword; -import com.megacrit.cardcrawl.powers.AbstractPower; -import com.megacrit.cardcrawl.powers.VulnerablePower; -import javassist.*; -import javassist.expr.ExprEditor; -import javassist.expr.NewExpr; -import slimebound.SlimeboundMod; import sneckomod.SneckoMod; import java.util.ArrayList; import java.util.function.Predicate; +@NoCompendium public class UnknownVulnerable extends AbstractUnknownCard { public final static String ID = makeID("UnknownVulnerable"); public static boolean bruh = false; public UnknownVulnerable() { - super(ID, CardType.SKILL, CardRarity.UNCOMMON); + super(ID, CardType.SKILL, CardRarity.SPECIAL); SneckoMod.loadJokeCardImage(this, "UnknownVulnerable.png"); } @@ -33,15 +27,15 @@ public boolean useCheck(AbstractCard card) { Keyword keywordString = CardCrawlGame.languagePack.getKeywordString("Game Dictionary").VULNERABLE; for (int i = 0; i < keywordString.NAMES.length; i++) { - if (!bruh){ + if (!bruh) { String key = keywordString.NAMES[i]; key = key.toLowerCase(); String test = card.rawDescription.toLowerCase(); bruh = (test.contains(" " + key + " ") || test.contains(" " + key + ",") || test.contains(" " + key + ".") || test.contains(" " + key + "。")); - // SlimeboundMod.logger.info("Strength U checks: keywordString: " + keywordString); - // SlimeboundMod.logger.info("Strength U checks: key: " + key); - // SlimeboundMod.logger.info("Strength U checks: test: " + test); - // SlimeboundMod.logger.info("bruh " + bruh); + // SlimeboundMod.logger.info("Strength U checks: keywordString: " + keywordString); + // SlimeboundMod.logger.info("Strength U checks: key: " + key); + // SlimeboundMod.logger.info("Strength U checks: test: " + test); + // SlimeboundMod.logger.info("bruh " + bruh); } } /* diff --git a/src/main/java/sneckomod/cards/unknowns/UnknownWeak.java b/src/main/java/sneckomod/cards/unknowns/UnknownWeak.java index bc65025d3..041ae9af1 100644 --- a/src/main/java/sneckomod/cards/unknowns/UnknownWeak.java +++ b/src/main/java/sneckomod/cards/unknowns/UnknownWeak.java @@ -1,27 +1,22 @@ package sneckomod.cards.unknowns; -import com.badlogic.gdx.graphics.Texture; +import basemod.patches.com.megacrit.cardcrawl.screens.compendium.CardLibraryScreen.NoCompendium; import com.badlogic.gdx.graphics.g2d.TextureAtlas; -import com.evacipated.cardcrawl.modthespire.Loader; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.localization.Keyword; -import com.megacrit.cardcrawl.powers.AbstractPower; -import com.megacrit.cardcrawl.powers.WeakPower; -import javassist.*; -import javassist.expr.ExprEditor; -import javassist.expr.NewExpr; import sneckomod.SneckoMod; import java.util.ArrayList; import java.util.function.Predicate; +@NoCompendium public class UnknownWeak extends AbstractUnknownCard { public final static String ID = makeID("UnknownWeak"); public static boolean bruh = false; public UnknownWeak() { - super(ID, CardType.SKILL, CardRarity.UNCOMMON); + super(ID, CardType.SKILL, CardRarity.SPECIAL); SneckoMod.loadJokeCardImage(this, "UnknownWeak.png"); } @@ -29,12 +24,11 @@ public boolean useCheck(AbstractCard card) { bruh = false; - Keyword keywordString = CardCrawlGame.languagePack.getKeywordString("Game Dictionary").WEAK; for (int i = 0; i < keywordString.NAMES.length; i++) { - if (!bruh){ - String key = keywordString.NAMES[i]; + if (!bruh) { + String key = keywordString.NAMES[i]; key = key.toLowerCase(); String test = card.rawDescription.toLowerCase(); bruh = (test.contains(" " + key + " ") || test.contains(" " + key + ",") || test.contains(" " + key + ".") || test.contains(" " + key + "。")); diff --git a/src/main/java/sneckomod/cards/unknowns/UnknownX.java b/src/main/java/sneckomod/cards/unknowns/UnknownX.java index ffc5309cb..167a5673d 100644 --- a/src/main/java/sneckomod/cards/unknowns/UnknownX.java +++ b/src/main/java/sneckomod/cards/unknowns/UnknownX.java @@ -1,6 +1,6 @@ package sneckomod.cards.unknowns; -import com.badlogic.gdx.graphics.Texture; +import basemod.patches.com.megacrit.cardcrawl.screens.compendium.CardLibraryScreen.NoCompendium; import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.megacrit.cardcrawl.cards.AbstractCard; import sneckomod.SneckoMod; @@ -8,11 +8,12 @@ import java.util.ArrayList; import java.util.function.Predicate; +@NoCompendium public class UnknownX extends AbstractUnknownCard { public final static String ID = makeID("UnknownX"); public UnknownX() { - super(ID, CardType.SKILL, CardRarity.UNCOMMON); + super(ID, CardType.SKILL, CardRarity.SPECIAL); SneckoMod.loadJokeCardImage(this, "UnknownX.png"); } diff --git a/src/main/java/sneckomod/events/BackToBasicsSnecko.java b/src/main/java/sneckomod/events/BackToBasicsSnecko.java index 73229d6b1..5fef6e59c 100644 --- a/src/main/java/sneckomod/events/BackToBasicsSnecko.java +++ b/src/main/java/sneckomod/events/BackToBasicsSnecko.java @@ -1,35 +1,40 @@ package sneckomod.events; -import basemod.helpers.BaseModCardTags; import com.badlogic.gdx.math.MathUtils; +import com.megacrit.cardcrawl.actions.common.MakeTempCardInDiscardAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.cards.CardGroup; import com.megacrit.cardcrawl.cards.blue.Defend_Blue; import com.megacrit.cardcrawl.cards.blue.Strike_Blue; import com.megacrit.cardcrawl.cards.green.Defend_Green; import com.megacrit.cardcrawl.cards.green.Strike_Green; +import com.megacrit.cardcrawl.cards.purple.Defend_Watcher; +import com.megacrit.cardcrawl.cards.purple.Strike_Purple; import com.megacrit.cardcrawl.cards.red.Defend_Red; import com.megacrit.cardcrawl.cards.red.Strike_Red; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.events.AbstractImageEvent; -import com.megacrit.cardcrawl.helpers.CardLibrary; import com.megacrit.cardcrawl.localization.EventStrings; import com.megacrit.cardcrawl.vfx.cardManip.PurgeCardEffect; import com.megacrit.cardcrawl.vfx.cardManip.ShowCardAndObtainEffect; import com.megacrit.cardcrawl.vfx.cardManip.ShowCardBrieflyEffect; -import sneckomod.SneckoMod; -import sneckomod.cards.Defend; -import sneckomod.cards.Strike; -import sneckomod.cards.unknowns.AbstractUnknownCard; -import sneckomod.cards.unknowns.UnknownClass; +import downfall.cards.curses.*; +import guardian.cards.Defend_Guardian; +import guardian.cards.Strike_Guardian; +import hermit.cards.Defend_Hermit; +import hermit.cards.Strike_Hermit; +import slimebound.cards.Defend_Slimebound; +import slimebound.cards.Strike_Slimebound; +import theHexaghost.cards.Defend; +import theHexaghost.cards.Strike; import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; import java.util.List; +import static com.megacrit.cardcrawl.dungeons.AbstractDungeon.cardRandomRng; + public class BackToBasicsSnecko extends AbstractImageEvent { public static final String ID = "sneckomod:BackToBasics"; public static final String NAME; @@ -43,44 +48,42 @@ public class BackToBasicsSnecko extends AbstractImageEvent { private static final String DIALOG_2; private static final String DIALOG_3; + static { eventStrings = CardCrawlGame.languagePack.getEventString("Back to Basics"); NAME = eventStrings.NAME; + eventStringsGuardian = CardCrawlGame.languagePack.getEventString("sneckomod:BackToBasics"); + DESCRIPTIONSGUARDIAN = eventStringsGuardian.DESCRIPTIONS; + OPTIONSGUARDIAN = eventStringsGuardian.OPTIONS; DESCRIPTIONS = eventStrings.DESCRIPTIONS; OPTIONS = eventStrings.OPTIONS; DIALOG_1 = DESCRIPTIONS[0]; DIALOG_2 = DESCRIPTIONS[1]; DIALOG_3 = DESCRIPTIONS[2]; - eventStringsGuardian = CardCrawlGame.languagePack.getEventString("sneckomod:BackToBasics"); - DESCRIPTIONSGUARDIAN = eventStringsGuardian.DESCRIPTIONS; - OPTIONSGUARDIAN = eventStringsGuardian.OPTIONS; } - private BackToBasicsSnecko.CUR_SCREEN screen; + private CUR_SCREEN screen; private List cardsUpgraded; - private ArrayList cardsToRemove; + private ArrayList strikesToRemove; + private ArrayList defendsToRemove; public BackToBasicsSnecko() { super(NAME, DIALOG_1, "images/events/backToBasics.jpg"); - this.screen = BackToBasicsSnecko.CUR_SCREEN.INTRO; - this.cardsUpgraded = new ArrayList(); - - for (AbstractCard c : AbstractDungeon.player.masterDeck.group) { - c.update(); - } - - cardsToRemove = new ArrayList<>(); + this.screen = CUR_SCREEN.INTRO; + this.cardsUpgraded = new ArrayList<>(); + this.strikesToRemove = new ArrayList<>(); + this.defendsToRemove = new ArrayList<>(); for (AbstractCard c : AbstractDungeon.player.masterDeck.group) { - if (c.hasTag(AbstractCard.CardTags.STARTER_DEFEND)) { - cardsToRemove.add(c); - } if (c.hasTag(AbstractCard.CardTags.STARTER_STRIKE)) { - cardsToRemove.add(c); + strikesToRemove.add(c); + } + if (c.hasTag(AbstractCard.CardTags.STARTER_DEFEND)) { + defendsToRemove.add(c); } } - if (cardsToRemove.size() >= 1) { + if (strikesToRemove.size()+defendsToRemove.size() >= 1) { this.imageEventText.setDialogOption(OPTIONSGUARDIAN[0]); } else { @@ -94,12 +97,10 @@ public BackToBasicsSnecko() { } - public void onEnterRoom() { if (Settings.AMBIANCE_ON) { CardCrawlGame.sound.play("EVENT_ANCIENT"); } - this.cardsUpgraded.clear(); } @@ -112,42 +113,83 @@ public void update() { AbstractDungeon.gridSelectScreen.selectedCards.remove(c); logMetricCardRemoval(ID, "Elegance", c); } - } protected void buttonEffect(int buttonPressed) { switch (this.screen) { case INTRO: if (buttonPressed == 0) { - ArrayList list = new ArrayList<>(); - - for (AbstractCard c : CardLibrary.getAllCards()) { - if (c instanceof AbstractUnknownCard) { - if (c instanceof UnknownClass) { - UnknownClass cU = (UnknownClass) c; - if (SneckoMod.validColors.contains(cU.myColor)) { - list.add(c); - } - } else { - list.add(c); - } - } - } ArrayList cardsRemoved = new ArrayList<>(); ArrayList cardsAdded = new ArrayList<>(); - for (AbstractCard c : cardsToRemove) { - Collections.shuffle(list); - AbstractCard cU = list.get(0); - cardsAdded.add(cU.cardID); - AbstractDungeon.effectList.add(new ShowCardAndObtainEffect(cU.makeStatEquivalentCopy(), (Settings.WIDTH / 2F), (float) (Settings.HEIGHT / 2))); - } + for (AbstractCard c : strikesToRemove) { + cardsRemoved.add(c.cardID); + int choice; + choice = cardRandomRng.random(0,12); + AbstractCard newCard = new Strike_Red(); + switch (choice) { + case 0: newCard = new Strike_Red(); break; + case 1: newCard = new Strike_Green(); break; + case 2: newCard = new Strike_Blue(); break; + case 3: newCard = new Strike_Purple(); break; + case 4: newCard = new Strike_Hermit(); break; + + case 5: newCard = new Strike_Slimebound(); break; + case 6: newCard = new Strike_Guardian(); break; + case 7: newCard = new Strike(); break; + + case 8: newCard = new champ.cards.Strike(); break; + case 9: newCard = new automaton.cards.Strike(); break; + case 10: newCard = new collector.cards.Strike(); break; + + case 11: newCard = new gremlin.cards.Strike(); break; + + case 12: newCard = new awakenedOne.cards.Strike(); break; + } - for (AbstractCard c : cardsToRemove) { + if (c.upgraded) { + newCard.upgrade(); + } + cardsAdded.add(newCard.cardID); AbstractDungeon.player.masterDeck.removeCard(c); + AbstractDungeon.effectList.add(new ShowCardAndObtainEffect(newCard, (float) Settings.WIDTH / 2.0F, (float) Settings.HEIGHT / 2.0F)); + } + + for (AbstractCard c : defendsToRemove) { cardsRemoved.add(c.cardID); + + int choice; + choice = cardRandomRng.random(0,12); + AbstractCard newCard = new Strike_Red(); + switch (choice) { + case 0: newCard = new Defend_Red(); break; + case 1: newCard = new Defend_Green(); break; + case 2: newCard = new Defend_Blue(); break; + case 3: newCard = new Defend_Watcher(); break; + case 4: newCard = new Defend_Hermit(); break; + + case 5: newCard = new Defend_Slimebound(); break; + case 6: newCard = new Defend_Guardian(); break; + case 7: newCard = new Defend(); break; + + case 8: newCard = new champ.cards.Defend(); break; + case 9: newCard = new automaton.cards.Defend(); break; + case 10: newCard = new collector.cards.Defend(); break; + + case 11: newCard = new gremlin.cards.Defend(); break; + + case 12: newCard = new awakenedOne.cards.Defend(); break; + } + + if (c.upgraded) { + newCard.upgrade(); + } + cardsAdded.add(newCard.cardID); + AbstractDungeon.player.masterDeck.removeCard(c); + AbstractDungeon.effectList.add(new ShowCardAndObtainEffect(newCard, (float) Settings.WIDTH / 2.0F, (float) Settings.HEIGHT / 2.0F)); } - logMetricTransformCards(ID, "Improvisation", cardsAdded, cardsRemoved); + + logMetric(ID, "Creativity", cardsAdded, cardsRemoved, null, null, null, null, null, 0, 0, 0, 0, 0, 0); this.imageEventText.updateBodyText(DESCRIPTIONSGUARDIAN[0]); this.imageEventText.updateDialogOption(0, OPTIONS[3]); @@ -167,17 +209,17 @@ protected void buttonEffect(int buttonPressed) { this.imageEventText.clearRemainingOptions(); } - this.screen = BackToBasicsSnecko.CUR_SCREEN.COMPLETE; + this.screen = CUR_SCREEN.COMPLETE; break; + case COMPLETE: this.openMap(); } - } private void upgradeStrikeAndDefends() { - for (AbstractCard c: AbstractDungeon.player.masterDeck.group){ - if (c.canUpgrade() && (c.hasTag(AbstractCard.CardTags.STARTER_DEFEND) || c.hasTag(AbstractCard.CardTags.STARTER_STRIKE)) ) { + for (AbstractCard c : AbstractDungeon.player.masterDeck.group) { + if (c.canUpgrade() && (c.hasTag(AbstractCard.CardTags.STARTER_DEFEND) || c.hasTag(AbstractCard.CardTags.STARTER_STRIKE))) { c.upgrade(); this.cardsUpgraded.add(c.cardID); AbstractDungeon.player.bottledCardUpgradeCheck(c); @@ -189,9 +231,6 @@ private void upgradeStrikeAndDefends() { private enum CUR_SCREEN { INTRO, - COMPLETE; - - CUR_SCREEN() { - } + COMPLETE } } diff --git a/src/main/java/sneckomod/events/D8.java b/src/main/java/sneckomod/events/D8.java index be2e1b8e0..1b3cac41b 100644 --- a/src/main/java/sneckomod/events/D8.java +++ b/src/main/java/sneckomod/events/D8.java @@ -1,10 +1,8 @@ package sneckomod.events; - import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.cards.CardGroup; import com.megacrit.cardcrawl.cards.DamageInfo; -import com.megacrit.cardcrawl.cards.DamageInfo.DamageType; import com.megacrit.cardcrawl.cards.curses.Pain; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.core.Settings; @@ -14,10 +12,10 @@ import com.megacrit.cardcrawl.localization.EventStrings; import com.megacrit.cardcrawl.vfx.cardManip.ShowCardAndObtainEffect; import sneckomod.SneckoMod; -import sneckomod.cards.unknowns.AbstractUnknownCard; import java.util.ArrayList; -import java.util.Collections; + +import static sneckomod.util.ColorfulCardReward.TEXT; public class D8 extends AbstractImageEvent { public static final String ID = "sneckomod:D8"; @@ -25,6 +23,8 @@ public class D8 extends AbstractImageEvent { public static final String[] DESCRIPTIONS; public static final String[] OPTIONS; private static final EventStrings eventStrings; + private final int finalDmg; + private CurScreen screen; static { eventStrings = CardCrawlGame.languagePack.getEventString(ID); @@ -33,104 +33,102 @@ public class D8 extends AbstractImageEvent { OPTIONS = eventStrings.OPTIONS; } - private int finalDmg; - private CurScreen screen; - public D8() { super(NAME, DESCRIPTIONS[0], "sneckomodResources/images/events/D8.png"); this.screen = CurScreen.INTRO; this.noCardsInRewards = true; - if (AbstractDungeon.ascensionLevel >= 15) { - this.finalDmg = 15; - } else { - this.finalDmg = 10; - } + this.finalDmg = AbstractDungeon.ascensionLevel >= 15 ? 15 : 10; - CardGroup tmp = new CardGroup(CardGroup.CardGroupType.UNSPECIFIED); + CardGroup overflowCards = new CardGroup(CardGroup.CardGroupType.UNSPECIFIED); for (AbstractCard c : CardGroup.getGroupWithoutBottledCards(AbstractDungeon.player.masterDeck).group) { - if (c.hasTag(SneckoMod.RNG)) { - tmp.addToTop(c); + if (c.hasTag(SneckoMod.OVERFLOW)) { + overflowCards.addToTop(c); } } this.imageEventText.setDialogOption(OPTIONS[0] + this.finalDmg + OPTIONS[1]); - if (tmp.size() > 0) { + if (overflowCards.size() > 0) { this.imageEventText.setDialogOption(OPTIONS[2], new Pain(), new sneckomod.relics.D8()); } else { this.imageEventText.setDialogOption(OPTIONS[4], true); } - this.imageEventText.setDialogOption(OPTIONS[3]); } + @Override protected void buttonEffect(int buttonPressed) { switch (this.screen) { case INTRO: this.imageEventText.clearAllDialogs(); switch (buttonPressed) { case 0: - ArrayList list = new ArrayList<>();// 1201 - for (AbstractCard c : CardLibrary.getAllCards()) { - if (c instanceof AbstractUnknownCard) - list.add(c); - - } - Collections.shuffle(list); - - int times = 0; - ArrayList cardsAdded = new ArrayList<>(); - for (AbstractCard c : list) { - cardsAdded.add(c.cardID); - AbstractDungeon.effectList.add(new ShowCardAndObtainEffect(c, (float) (Settings.WIDTH * (0.1 + (0.2 * times))), (float) (Settings.HEIGHT / 2))); - times++; - if (times == 5) break; - } - - CardCrawlGame.sound.play("EVENT_TOME"); - this.imageEventText.clearAllDialogs(); - AbstractDungeon.player.damage(new DamageInfo(null, this.finalDmg, DamageType.HP_LOSS)); - this.imageEventText.setDialogOption(OPTIONS[3]); - this.imageEventText.updateBodyText(DESCRIPTIONS[1]); - this.screen = CurScreen.END; - list.clear(); - logMetric(ID, "Shatter", cardsAdded, null, null, null, - null, null, null, - finalDmg, 0, 0, 0, 0, 0); + handleSpecialBonusOption(); break; case 1: - - Pain curse = new Pain(); - AbstractDungeon.effectList.add(new ShowCardAndObtainEffect(curse, (float) Settings.WIDTH / 2.0F, (float) Settings.HEIGHT / 2.0F)); - sneckomod.relics.D8 relic = new sneckomod.relics.D8(); - AbstractDungeon.getCurrRoom().spawnRelicAndObtain((float) (Settings.WIDTH / 2), (float) (Settings.HEIGHT / 2), relic); - - this.imageEventText.clearAllDialogs(); - this.imageEventText.setDialogOption(OPTIONS[3]); - this.imageEventText.updateBodyText(DESCRIPTIONS[2]); - this.screen = CurScreen.END; - logMetricObtainCardAndRelic(ID, "Take", curse, relic); - return; + handleTakeOption(); + break; case 2: - this.imageEventText.clearAllDialogs(); - this.imageEventText.setDialogOption(OPTIONS[3]); - this.imageEventText.updateBodyText(DESCRIPTIONS[3]); - this.screen = CurScreen.END; - logMetricIgnored(ID); - return; + handleIgnoreOption(); + break; } - - + break; case END: this.openMap(); + break; } + } + private void handleSpecialBonusOption() { + ArrayList cardsToReward = new ArrayList<>(); + while (cardsToReward.size() < 3) { + AbstractCard newCard = SneckoMod.getOffClassCardMatchingPredicate(c -> c.rarity == AbstractCard.CardRarity.RARE); + if (newCard != null && !cardListDuplicate(cardsToReward, newCard)) { + cardsToReward.add(newCard.makeCopy()); + } + } + AbstractDungeon.cardRewardScreen.open(cardsToReward, null, TEXT[2]); + + CardCrawlGame.sound.play("EVENT_TOME"); + this.imageEventText.clearAllDialogs(); + AbstractDungeon.player.damage(new DamageInfo(null, this.finalDmg, DamageInfo.DamageType.HP_LOSS)); + this.imageEventText.setDialogOption(OPTIONS[3]); + this.imageEventText.updateBodyText(DESCRIPTIONS[1]); + this.screen = CurScreen.END; + logMetric(ID, "Shatter", null, null, null, null, null, null, null, finalDmg, 0, 0, 0, 0, 0); + } + + private void handleTakeOption() { + Pain curse = new Pain(); + AbstractDungeon.effectList.add(new ShowCardAndObtainEffect(curse, (float) Settings.WIDTH / 2.0F, (float) Settings.HEIGHT / 2.0F)); + sneckomod.relics.D8 relic = new sneckomod.relics.D8(); + AbstractDungeon.getCurrRoom().spawnRelicAndObtain((float) (Settings.WIDTH / 2), (float) (Settings.HEIGHT / 2), relic); + + this.imageEventText.clearAllDialogs(); + this.imageEventText.setDialogOption(OPTIONS[3]); + this.imageEventText.updateBodyText(DESCRIPTIONS[2]); + this.screen = CurScreen.END; + logMetricObtainCardAndRelic(ID, "Take", curse, relic); + } + + private void handleIgnoreOption() { + this.imageEventText.clearAllDialogs(); + this.imageEventText.setDialogOption(OPTIONS[3]); + this.imageEventText.updateBodyText(DESCRIPTIONS[3]); + this.screen = CurScreen.END; + logMetricIgnored(ID); + } + + private boolean cardListDuplicate(ArrayList cardsList, AbstractCard card) { + for (AbstractCard alreadyHave : cardsList) { + if (alreadyHave.cardID.equals(card.cardID)) { + return true; + } + } + return false; } private enum CurScreen { INTRO, END; - - CurScreen() { - } } } diff --git a/src/main/java/sneckomod/events/Serpent_Snecko.java b/src/main/java/sneckomod/events/Serpent_Snecko.java index ff5fc7cd2..79cdffb3c 100644 --- a/src/main/java/sneckomod/events/Serpent_Snecko.java +++ b/src/main/java/sneckomod/events/Serpent_Snecko.java @@ -1,15 +1,28 @@ package sneckomod.events; +import champ.relics.BerserkersGuideToSlaughter; +import champ.relics.DefensiveTrainingManual; +import champ.relics.FightingForDummies; +import champ.relics.GladiatorsBookOfMartialProwess; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.events.AbstractImageEvent; import com.megacrit.cardcrawl.helpers.CardLibrary; +import com.megacrit.cardcrawl.helpers.RelicLibrary; import com.megacrit.cardcrawl.localization.EventStrings; +import com.megacrit.cardcrawl.relics.AbstractRelic; +import com.megacrit.cardcrawl.relics.Circlet; import com.megacrit.cardcrawl.vfx.cardManip.ShowCardAndObtainEffect; import downfall.cards.curses.Bewildered; +import downfall.downfallMod; +import sneckomod.relics.*; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Random; public class Serpent_Snecko extends AbstractImageEvent { public static final String ID = "sneckomod:Serpent"; @@ -47,7 +60,19 @@ public Serpent_Snecko() { } this.curse = new Bewildered(); - this.imageEventText.setDialogOption(OPTIONS[0], CardLibrary.getCopy(this.curse.cardID)); + + if (AbstractDungeon.player.hasRelic(ConfusingCodex.ID) && + AbstractDungeon.player.hasRelic(LoadedDie.ID) && + AbstractDungeon.player.hasRelic(RareBoosterPack.ID) && + AbstractDungeon.player.hasRelic(SleevedAce.ID) && + AbstractDungeon.player.hasRelic(UnknownEgg.ID) && + AbstractDungeon.player.hasRelic(SneckoCommon.ID)){ + + this.imageEventText.setDialogOption(OPTIONS[0], true, CardLibrary.getCopy(this.curse.cardID)); + } else { + this.imageEventText.setDialogOption(OPTIONS[0], CardLibrary.getCopy(this.curse.cardID)); + } + this.imageEventText.setDialogOption(OPTIONS[1]); } @@ -66,10 +91,10 @@ protected void buttonEffect(int buttonPressed) { this.imageEventText.removeDialogOption(1); this.imageEventText.updateDialogOption(0, OPTIONS[2]); AbstractDungeon.effectList.add(new ShowCardAndObtainEffect(this.curse, (float) Settings.WIDTH / 2.0F, (float) Settings.HEIGHT / 2.0F)); - - com.megacrit.cardcrawl.relics.AbstractRelic r = AbstractDungeon.returnRandomScreenlessRelic(AbstractDungeon.returnRandomRelicTier()); - AbstractDungeon.getCurrRoom().spawnRelicAndObtain(Settings.WIDTH / 2, Settings.HEIGHT / 2, r); - logMetricObtainCardAndRelic(ID, "Agree", curse, r); + AbstractRelic r = this.getRandomFace(); + AbstractDungeon.getCurrRoom().spawnRelicAndObtain((float) Settings.WIDTH / 2.0F, (float) Settings.HEIGHT / 2.0F, r); + downfallMod.removeAnyRelicFromPools(r.relicId); + logMetricObtainCardAndRelic(ID, "Agree", curse, r); this.screen = CUR_SCREEN.AGREE; } else { this.imageEventText.updateBodyText(DISAGREE_DIALOG); @@ -85,6 +110,39 @@ protected void buttonEffect(int buttonPressed) { } + private AbstractRelic getRandomFace() { + ArrayList ids = new ArrayList(); + + + // BaseMod.addRelicToCustomPool(new ConfusingCodex(), TheSnecko.Enums.SNECKO_CYAN); + if (!AbstractDungeon.player.hasRelic(ConfusingCodex.ID)) { + ids.add(ConfusingCodex.ID); + } + // BaseMod.addRelicToCustomPool(new LoadedDie(), TheSnecko.Enums.SNECKO_CYAN); + if (!AbstractDungeon.player.hasRelic(LoadedDie.ID)) { + ids.add(LoadedDie.ID); + } + // BaseMod.addRelicToCustomPool(new RareBoosterPack(), TheSnecko.Enums.SNECKO_CYAN); + if (!AbstractDungeon.player.hasRelic(RareBoosterPack.ID)) { + ids.add(RareBoosterPack.ID); + } + // BaseMod.addRelicToCustomPool(new SleevedAce(), TheSnecko.Enums.SNECKO_CYAN); + if (!AbstractDungeon.player.hasRelic(SleevedAce.ID)) { + ids.add(SleevedAce.ID); + } + // BaseMod.addRelicToCustomPool(new UnknownEgg(), TheSnecko.Enums.SNECKO_CYAN); + if (!AbstractDungeon.player.hasRelic(UnknownEgg.ID)) { + ids.add(UnknownEgg.ID); + } + // BaseMod.addRelicToCustomPool(new SneckoCommon(), TheSnecko.Enums.SNECKO_CYAN); + if (!AbstractDungeon.player.hasRelic(SneckoCommon.ID)) { + ids.add(SneckoCommon.ID); + } + Collections.shuffle(ids, new Random(AbstractDungeon.miscRng.randomLong())); + return RelicLibrary.getRelic(ids.get(0)).makeCopy(); + } + + private enum CUR_SCREEN { INTRO, AGREE, diff --git a/src/main/java/sneckomod/events/SuspiciousHouse.java b/src/main/java/sneckomod/events/SuspiciousHouse.java index c64ae4180..9c230a18a 100644 --- a/src/main/java/sneckomod/events/SuspiciousHouse.java +++ b/src/main/java/sneckomod/events/SuspiciousHouse.java @@ -1,12 +1,14 @@ package sneckomod.events; - import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.events.AbstractImageEvent; import com.megacrit.cardcrawl.localization.EventStrings; -import com.megacrit.cardcrawl.vfx.cardManip.ShowCardAndObtainEffect; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.monsters.MonsterGroup; +import com.megacrit.cardcrawl.monsters.city.Centurion; +import com.megacrit.cardcrawl.powers.StrengthPower; import downfall.cards.curses.Bewildered; import sneckomod.relics.BabySnecko; @@ -25,33 +27,40 @@ public class SuspiciousHouse extends AbstractImageEvent { } private CurScreen screen; + private boolean postFightTriggered = false; public SuspiciousHouse() { super(NAME, DESCRIPTIONS[0], "sneckomodResources/images/events/cityStreet.png"); this.screen = CurScreen.INTRO; this.noCardsInRewards = true; - this.imageEventText.setDialogOption(OPTIONS[0], new Bewildered(), new BabySnecko()); + this.imageEventText.setDialogOption(OPTIONS[0], new BabySnecko()); this.imageEventText.setDialogOption(OPTIONS[1]); } + @Override protected void buttonEffect(int buttonPressed) { switch (this.screen) { case INTRO: this.imageEventText.clearAllDialogs(); switch (buttonPressed) { case 0: - Bewildered curse = new Bewildered(); - AbstractDungeon.effectList.add(new ShowCardAndObtainEffect(curse, (float) Settings.WIDTH / 2.0F, (float) Settings.HEIGHT / 2.0F)); BabySnecko relic = new BabySnecko(); AbstractDungeon.getCurrRoom().spawnRelicAndObtain((float) (Settings.WIDTH / 2), (float) (Settings.HEIGHT / 2), relic); - this.imageEventText.clearAllDialogs(); - this.imageEventText.setDialogOption(OPTIONS[1]); - this.imageEventText.updateBodyText(DESCRIPTIONS[1]); - this.screen = CurScreen.END; - logMetricObtainCardAndRelic(ID, "Rescued", curse, relic); - return; - case 2: + this.screen = CurScreen.COMBAT; + + AbstractMonster m = new Centurion(0, 0); + if (AbstractDungeon.ascensionLevel >= 15) { + m.powers.add(new StrengthPower(m, 3)); + } + AbstractDungeon.getCurrRoom().monsters = new MonsterGroup(m); + + AbstractDungeon.getCurrRoom().rewards.clear(); + AbstractDungeon.getCurrRoom().rewardAllowed = false; + AbstractDungeon.lastCombatMetricKey = "Angry Centurion"; + this.enterCombatFromImage(); + break; + case 1: this.imageEventText.clearAllDialogs(); this.imageEventText.setDialogOption(OPTIONS[1]); this.imageEventText.updateBodyText(DESCRIPTIONS[2]); @@ -59,18 +68,60 @@ protected void buttonEffect(int buttonPressed) { logMetricIgnored(ID); return; } + break; + + case POSTFIGHT: + this.imageEventText.clearAllDialogs(); + // this.imageEventText.setDialogOption(OPTIONS[1]); + // this.imageEventText.updateBodyText(DESCRIPTIONS[1]); + // this.screen = CurScreen.END; + return; case END: this.openMap(); + break; + } + } + + @Override + public void update() { + super.update(); + if (this.screen == CurScreen.COMBAT && AbstractDungeon.getCurrRoom().monsters.areMonstersBasicallyDead() && !postFightTriggered) { + postFightTriggered = true; + this.screen = CurScreen.POSTFIGHT; + this.imageEventText.clearAllDialogs(); + AbstractDungeon.getCurrRoom().rewards.clear(); + AbstractDungeon.getCurrRoom().rewardAllowed = false; + AbstractDungeon.resetPlayer(); + AbstractDungeon.player.drawX = (float) Settings.WIDTH * 0.25F; + AbstractDungeon.player.preBattlePrep(); + this.imageEventText.clearAllDialogs(); + this.imageEventText.updateBodyText(DESCRIPTIONS[1]); + this.imageEventText.setDialogOption(OPTIONS[1]); + this.enterImageFromCombat(); + this.screen = CurScreen.END; } + } + @Override + public void reopen() { + if (this.screen == CurScreen.POSTFIGHT) { + AbstractDungeon.getCurrRoom().rewards.clear(); + AbstractDungeon.getCurrRoom().rewardAllowed = false; + AbstractDungeon.resetPlayer(); + AbstractDungeon.player.drawX = (float) Settings.WIDTH * 0.25F; + AbstractDungeon.player.preBattlePrep(); + this.imageEventText.clearAllDialogs(); + //this.imageEventText.updateBodyText(DESCRIPTIONS[1]); + //this.imageEventText.setDialogOption(OPTIONS[1]); + this.enterImageFromCombat(); + } } private enum CurScreen { INTRO, + COMBAT, + POSTFIGHT, END; - - CurScreen() { - } } } diff --git a/src/main/java/sneckomod/patches/BottledD8Patch.java b/src/main/java/sneckomod/patches/BottledD8Patch.java index 56185a2a0..6011193af 100644 --- a/src/main/java/sneckomod/patches/BottledD8Patch.java +++ b/src/main/java/sneckomod/patches/BottledD8Patch.java @@ -1,5 +1,7 @@ package sneckomod.patches; +import awakenedOne.patches.MoonTalismanPatch; +import awakenedOne.util.Wiz; import com.evacipated.cardcrawl.modthespire.lib.SpireField; import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; import com.megacrit.cardcrawl.cards.AbstractCard; @@ -17,7 +19,14 @@ public class BottledD8Patch { ) public static class MakeStatEquivalentCopy { public static AbstractCard Postfix(AbstractCard __result, AbstractCard __instance) { - inD8.set(__result, inD8.get(__instance)); + + if (Wiz.isInCombat()) { + inD8.set(__result, inD8.get(__instance)); + } + + if (!Wiz.isInCombat()) { + inD8.set(__result, Boolean.FALSE); + } return __result; } diff --git a/src/main/java/sneckomod/patches/NoGlitteringFalling.java b/src/main/java/sneckomod/patches/NoGlitteringFalling.java new file mode 100644 index 000000000..0d91a51ff --- /dev/null +++ b/src/main/java/sneckomod/patches/NoGlitteringFalling.java @@ -0,0 +1,62 @@ +package sneckomod.patches; + +import champ.ChampChar; +import com.evacipated.cardcrawl.mod.stslib.fields.cards.AbstractCard.SoulboundField; +import com.evacipated.cardcrawl.modthespire.lib.*; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.events.beyond.Falling; +import com.megacrit.cardcrawl.events.city.Ghosts; +import com.megacrit.cardcrawl.random.Random; +import downfall.events.CouncilOfGhosts_Evil; +import gremlin.characters.GremlinCharacter; +import javassist.CtBehavior; +import sneckomod.cards.GlitteringGambit; +import theHexaghost.events.HexaFalling; + +import java.util.ArrayList; + +import static awakenedOne.AwakenedOneMod.DELVE; + +public class NoGlitteringFalling { + + @SpirePatch( + clz = AbstractDungeon.class, + method = "getEvent" + ) + public static class EventSpawn { + + @SpireInsertPatch( + locator = Locator.class, + localvars = {"tmp"} + ) + + //TODO: Replace this with an actual patch, somehow... + //it would probably patch CardHelper.returnCardOfType and remove cards with the soulbound tag if and only + //if the player is in a falling event, but I've just tortured myself coding bottle code so I don't + //want to do it right now + public static void Insert(Random rng, ArrayList tmp) { + boolean hasSoulboundNotCurse = false; + + for (AbstractCard c : AbstractDungeon.player.masterDeck.group) { + if (c instanceof GlitteringGambit) { + hasSoulboundNotCurse = true; + } + } + + //out of sight, out of mind? + if (hasSoulboundNotCurse) { + tmp.remove(Falling.ID); + tmp.remove(HexaFalling.ID); + } + } + + private static class Locator extends SpireInsertLocator { + @Override + public int[] Locate(CtBehavior ctMethodToPatch) throws Exception { + Matcher finalMatcher = new Matcher.MethodCallMatcher(ArrayList.class, "isEmpty"); + return LineFinder.findInOrder(ctMethodToPatch, finalMatcher); + } + } + } +} \ No newline at end of file diff --git a/src/main/java/sneckomod/patches/OnObtainCardPatches.java b/src/main/java/sneckomod/patches/OnObtainCardPatches.java new file mode 100644 index 000000000..20bda28ef --- /dev/null +++ b/src/main/java/sneckomod/patches/OnObtainCardPatches.java @@ -0,0 +1,29 @@ +package sneckomod.patches; + +import basemod.ReflectionHacks; +import com.evacipated.cardcrawl.mod.stslib.cards.interfaces.OnObtainCard; +import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.vfx.FastCardObtainEffect; +import com.megacrit.cardcrawl.vfx.cardManip.ShowCardAndObtainEffect; +import sneckomod.SneckoMod; + +public class OnObtainCardPatches { + @SpirePatch(clz = ShowCardAndObtainEffect.class, method = "update") + public static class OnPickupCardDoStuffPatch { + public static void Postfix(ShowCardAndObtainEffect __instance) { + if (!SneckoMod.incomingPicks.isEmpty() && __instance.isDone) { + SneckoMod.nextGift(); + } + } + } + + @SpirePatch(clz = FastCardObtainEffect.class, method = "update") + public static class OnPickupCardDoStuffPatch2 { + public static void Postfix(FastCardObtainEffect __instance) { + if (!SneckoMod.incomingPicks.isEmpty() && __instance.isDone) { + SneckoMod.nextGift(); + } + } + } +} \ No newline at end of file diff --git a/src/main/java/sneckomod/patches/SingleCardViewPopupPatches.java b/src/main/java/sneckomod/patches/SingleCardViewPopupPatches.java deleted file mode 100644 index 48c7aedf7..000000000 --- a/src/main/java/sneckomod/patches/SingleCardViewPopupPatches.java +++ /dev/null @@ -1,68 +0,0 @@ -package sneckomod.patches; - -import basemod.ReflectionHacks; -import com.badlogic.gdx.graphics.g2d.SpriteBatch; -import com.evacipated.cardcrawl.modthespire.lib.LineFinder; -import com.evacipated.cardcrawl.modthespire.lib.Matcher; -import com.evacipated.cardcrawl.modthespire.lib.SpireInsertLocator; -import com.evacipated.cardcrawl.modthespire.lib.SpireInsertPatch; -import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; -import com.evacipated.cardcrawl.modthespire.lib.SpirePostfixPatch; -import com.megacrit.cardcrawl.cards.AbstractCard; -import com.megacrit.cardcrawl.characters.AbstractPlayer; -import com.megacrit.cardcrawl.screens.SingleCardViewPopup; -import javassist.CtBehavior; -import sneckomod.cards.unknowns.AbstractUnknownCard; -import sneckomod.relics.BabySnecko; - - -public class SingleCardViewPopupPatches { - @SpirePatch( - clz = SingleCardViewPopup.class, - method = "updateInput", - paramtypez = {} - - ) - public static class UpdateInputPatch { - @SpirePostfixPatch - public static void __updateInput(SingleCardViewPopup __instance, AbstractCard ___card) { - if (___card instanceof AbstractUnknownCard) { - // Allow scroll wheel to roll through Unknown card's previews in the single-card popup - AbstractUnknownCard unkCard = (AbstractUnknownCard) ___card; - unkCard.updateInput(true); - } - } - } - - @SpirePatch( - clz = SingleCardViewPopup.class, - method = "render", - paramtypez = {SpriteBatch.class} - - ) - public static class RenderPatch { - @SpireInsertPatch( - locator=RenderPatchLocator.class, - localvars={"copy"} - ) - public static void __render(SingleCardViewPopup __instance, SpriteBatch sb, AbstractCard ___card, AbstractCard copy) { - if (copy instanceof AbstractUnknownCard && ___card instanceof AbstractUnknownCard) { - // Allow preview rotation to work while the 'Show Upgrade' option is checked. The option causes - // a copy of the card to be created and rendered each frame. So, we need to get the new state - // of the preview rotation from the copy and move it back to the original. - ((AbstractUnknownCard)copy).rotationTimer = ((AbstractUnknownCard)___card).rotationTimer; - ((AbstractUnknownCard)copy).scrollImpulse = ((AbstractUnknownCard)___card).scrollImpulse; - - } - } - } - - private static class RenderPatchLocator extends SpireInsertLocator { - @Override - public int[] Locate(CtBehavior ctBehavior) throws Exception { - Matcher matcher = new Matcher.FieldAccessMatcher(SingleCardViewPopup.class, "card"); - int[] lines = LineFinder.findAllInOrder(ctBehavior, matcher); - return new int[]{lines[lines.length-1]}; // last access moves 'copy' into 'this.card' - } - } -} diff --git a/src/main/java/sneckomod/patches/SnekCardPoolPatch.java b/src/main/java/sneckomod/patches/SnekCardPoolPatch.java index 7f95ca802..e69de29bb 100644 --- a/src/main/java/sneckomod/patches/SnekCardPoolPatch.java +++ b/src/main/java/sneckomod/patches/SnekCardPoolPatch.java @@ -1,23 +0,0 @@ -package sneckomod.patches; - -import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; -import com.evacipated.cardcrawl.modthespire.lib.SpirePostfixPatch; -import com.megacrit.cardcrawl.characters.AbstractPlayer; -import com.megacrit.cardcrawl.dungeons.AbstractDungeon; -import sneckomod.relics.SneckoBoss; -import sneckomod.relics.SneckoCommon; - -@SpirePatch( - clz = AbstractDungeon.class, - method = "initializeCardPools" - -) -public class SnekCardPoolPatch { - @SpirePostfixPatch - public static void Postfix(AbstractDungeon __instance) { - AbstractPlayer player = __instance.player; - if(player.hasRelic(SneckoCommon.ID) || player.hasRelic(SneckoBoss.ID)) { - SneckoBoss.updateCardPools(); - } - } -} diff --git a/src/main/java/sneckomod/patches/StartOverPatch.java b/src/main/java/sneckomod/patches/StartOverPatch.java new file mode 100644 index 000000000..ea4aed41a --- /dev/null +++ b/src/main/java/sneckomod/patches/StartOverPatch.java @@ -0,0 +1,18 @@ +package sneckomod.patches; + +import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; +import com.megacrit.cardcrawl.screens.mainMenu.MainMenuScreen; +import sneckomod.SneckoMod; + +public class StartOverPatch { + @SpirePatch( + clz = MainMenuScreen.class, + method = SpirePatch.CONSTRUCTOR, + paramtypez = {} + ) + public static class OnRemoveDefendDoAThing { + public static void Postfix() { + SneckoMod.incomingPicks.clear(); + } + } +} diff --git a/src/main/java/sneckomod/patches/WaveOfTheHandPatch.java b/src/main/java/sneckomod/patches/WaveOfTheHandPatch.java new file mode 100644 index 000000000..ce7f02a63 --- /dev/null +++ b/src/main/java/sneckomod/patches/WaveOfTheHandPatch.java @@ -0,0 +1,21 @@ +package sneckomod.patches; +import com.evacipated.cardcrawl.modthespire.lib.ByRef; +import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; +import com.evacipated.cardcrawl.modthespire.lib.SpirePrefixPatch; +import com.megacrit.cardcrawl.powers.watcher.WaveOfTheHandPower; + +//This is AlexMdle's code, not mine. + +public class WaveOfTheHandPatch { + public static int isActive=0; + @SpirePatch(clz = WaveOfTheHandPower.class, method = "onGainedBlock") + public static class AbstractWaveOfTheHandPatch { + @SpirePrefixPatch + public static void Prefix(WaveOfTheHandPower __instance, @ByRef float[] blockAmount) { + if (isActive == 1) { + blockAmount[0] = 0.0F; + isActive = 0; + } + } + } +} \ No newline at end of file diff --git a/src/main/java/sneckomod/patches/relicpatches/PrismaticShardPatch.java b/src/main/java/sneckomod/patches/relicpatches/PrismaticShardPatch.java new file mode 100644 index 000000000..e69de29bb diff --git a/src/main/java/sneckomod/potions/CheatPotion.java b/src/main/java/sneckomod/potions/CheatPotion.java index 686c8b543..f5eb0a416 100644 --- a/src/main/java/sneckomod/potions/CheatPotion.java +++ b/src/main/java/sneckomod/potions/CheatPotion.java @@ -21,7 +21,7 @@ public class CheatPotion extends CustomPotion { public static final String[] DESCRIPTIONS = potionStrings.DESCRIPTIONS; public CheatPotion() { - super(NAME, POTION_ID, PotionRarity.RARE, PotionSize.H, PotionColor.SMOKE); + super(NAME, POTION_ID, PotionRarity.COMMON, PotionSize.H, PotionColor.SMOKE); this.isThrown = false; this.targetRequired = false; this.labOutlineColor = SneckoMod.placeholderColor; @@ -37,7 +37,7 @@ public void initializeData() { } this.tips.clear(); this.tips.add(new PowerTip(this.name, this.description)); - this.tips.add(new PowerTip(TipHelper.capitalize(BaseMod.getKeywordTitle(SneckoMod.makeID("lucky"))), BaseMod.getKeywordDescription(SneckoMod.makeID("lucky")))); + //this.tips.add(new PowerTip(TipHelper.capitalize(BaseMod.getKeywordTitle(SneckoMod.makeID("lucky"))), BaseMod.getKeywordDescription(SneckoMod.makeID("lucky")))); } diff --git a/src/main/java/sneckomod/potions/DiceRollPotion.java b/src/main/java/sneckomod/potions/DiceRollPotion.java index 856534971..8846d1e8a 100644 --- a/src/main/java/sneckomod/potions/DiceRollPotion.java +++ b/src/main/java/sneckomod/potions/DiceRollPotion.java @@ -1,53 +1,88 @@ package sneckomod.potions; - import basemod.abstracts.CustomPotion; -import com.megacrit.cardcrawl.actions.AbstractGameAction; -import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.core.AbstractCreature; import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.helpers.PowerTip; import com.megacrit.cardcrawl.localization.PotionStrings; +import com.megacrit.cardcrawl.potions.AbstractPotion; +import com.megacrit.cardcrawl.rooms.AbstractRoom; +import com.megacrit.cardcrawl.vfx.combat.LightBulbEffect; import sneckomod.SneckoMod; -import sneckomod.actions.NoApplyRandomDamageAction; +import sneckomod.util.DiceRollPotionReward; +import java.util.ArrayList; public class DiceRollPotion extends CustomPotion { public static final String POTION_ID = "sneckomod:DiceRollPotion"; + private static final PotionStrings potionStrings = CardCrawlGame.languagePack.getPotionString(POTION_ID); + public static final String NAME = potionStrings.NAME; public static final String[] DESCRIPTIONS = potionStrings.DESCRIPTIONS; - public DiceRollPotion() { - super(NAME, POTION_ID, PotionRarity.COMMON, PotionSize.SPHERE, PotionColor.FAIRY); - this.isThrown = true; - this.targetRequired = true; + super(NAME, POTION_ID, AbstractPotion.PotionRarity.RARE, AbstractPotion.PotionSize.SPHERE, AbstractPotion.PotionColor.FAIRY); this.labOutlineColor = SneckoMod.placeholderColor; } - + @Override public void initializeData() { this.potency = getPotency(); - this.description = (DESCRIPTIONS[0] + this.potency + DESCRIPTIONS[1] + this.potency * 40 + DESCRIPTIONS[2]); + if (this.potency == 1) { + this.description = potionStrings.DESCRIPTIONS[0] + this.potency + potionStrings.DESCRIPTIONS[1]; + } + if (this.potency != 1) { + this.description = potionStrings.DESCRIPTIONS[0] + this.potency + potionStrings.DESCRIPTIONS[2]; + } this.tips.clear(); this.tips.add(new PowerTip(this.name, this.description)); } - + @Override public void use(AbstractCreature target) { - AbstractDungeon.actionManager.addToBottom(new NoApplyRandomDamageAction(target, this.potency, this.potency * 40, 1, AbstractGameAction.AttackEffect.SMASH, null, DamageInfo.DamageType.THORNS)); + if (AbstractDungeon.getCurrRoom() != null) { + if (Settings.FAST_MODE) { + this.addToBot(new VFXAction(new LightBulbEffect(AbstractDungeon.player.hb))); + } else { + this.addToBot(new VFXAction(new LightBulbEffect(AbstractDungeon.player.hb), 0.2F)); + } + int i; + for (i = 0; i < this.potency; i++) { + AbstractDungeon.getCurrRoom().rewards.add(new DiceRollPotionReward()); + } + } } + public static boolean cardListDuplicate(ArrayList cardsList, AbstractCard card) { + for (AbstractCard alreadyHave : cardsList) { + if (alreadyHave.cardID.equals(card.cardID)) { + return true; + } + } + return false; + } + @Override + public boolean canUse() { + return AbstractDungeon.getCurrRoom() != null && AbstractDungeon.getCurrRoom().phase == AbstractRoom.RoomPhase.COMBAT; + } + + public boolean canSpawn() { + return Settings.isEndless || AbstractDungeon.floorNum <= 48; // cannot appear in act 4 + } + + @Override public CustomPotion makeCopy() { return new DiceRollPotion(); } + @Override public int getPotency(int ascensionLevel) { return 1; } } - - diff --git a/src/main/java/sneckomod/powers/AceOfWandsPower.java b/src/main/java/sneckomod/powers/AceOfWandsPower.java new file mode 100644 index 000000000..40aad59e1 --- /dev/null +++ b/src/main/java/sneckomod/powers/AceOfWandsPower.java @@ -0,0 +1,64 @@ +package sneckomod.powers; + +import basemod.interfaces.CloneablePowerInterface; +import charbosses.bosses.Merchant.CharBossMerchant; +import com.megacrit.cardcrawl.actions.common.GainBlockAction; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.TextureAtlas; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.localization.PowerStrings; +import com.megacrit.cardcrawl.monsters.beyond.Transient; +import com.megacrit.cardcrawl.powers.AbstractPower; +import com.megacrit.cardcrawl.powers.ShiftingPower; +import com.megacrit.cardcrawl.powers.StrengthPower; +import com.megacrit.cardcrawl.powers.watcher.WaveOfTheHandPower; +import downfall.util.TextureLoader; +import sneckomod.SneckoMod; +import sneckomod.actions.AceOfWandsAction; +import sneckomod.patches.WaveOfTheHandPatch; + +public class AceOfWandsPower extends AbstractPower implements CloneablePowerInterface { + public static final String POWER_ID = SneckoMod.makeID("AceOfWandsPower"); + private static final PowerStrings powerStrings = CardCrawlGame.languagePack.getPowerStrings(POWER_ID); + public static final String NAME = powerStrings.NAME; + public static final String[] DESCRIPTIONS = powerStrings.DESCRIPTIONS; + private static final Texture tex84 = TextureLoader.getTexture(SneckoMod.getModID() + "Resources/images/powers/ApplyBurnAtStartOfTurn84.png"); + private static final Texture tex32 = TextureLoader.getTexture(SneckoMod.getModID() + "Resources/images/powers/ApplyBurnAtStartOfTurn32.png"); + + + public AceOfWandsPower(final int amount) { + this.name = NAME; + this.ID = POWER_ID; + this.owner = AbstractDungeon.player; + this.amount = amount; + this.type = PowerType.BUFF; + this.isTurnBased = false; + + this.region128 = new TextureAtlas.AtlasRegion(tex84, 0, 0, 84, 84); + this.region48 = new TextureAtlas.AtlasRegion(tex32, 0, 0, 32, 32); + + this.updateDescription(); + } + + public void onApplyPower(AbstractPower power, AbstractCreature target, AbstractCreature source) { + if (power.type == PowerType.DEBUFF && !power.ID.equals("Shackled") && source == this.owner && target != this.owner && !target.hasPower("Artifact")) { + this.flash(); + //patched in old hermit code to prevent wave of the hand softlock + if (!((power.ID.equals(StrengthPower.POWER_ID) && target.hasPower(ShiftingPower.POWER_ID)))) { + addToTop(new AceOfWandsAction(amount)); + } + } + } + + @Override + public void updateDescription() { + this.description = DESCRIPTIONS[0] + this.amount + DESCRIPTIONS[1]; + } + + @Override + public AbstractPower makeCopy() { + return new AceOfWandsPower(this.amount); + } +} diff --git a/src/main/java/sneckomod/powers/BigGunsBlockPower.java b/src/main/java/sneckomod/powers/BigGunsBlockPower.java new file mode 100644 index 000000000..fea99f7f9 --- /dev/null +++ b/src/main/java/sneckomod/powers/BigGunsBlockPower.java @@ -0,0 +1,64 @@ +package sneckomod.powers; + +import basemod.interfaces.CloneablePowerInterface; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.TextureAtlas; +import com.megacrit.cardcrawl.actions.common.GainBlockAction; +import com.megacrit.cardcrawl.actions.common.GainEnergyAction; +import com.megacrit.cardcrawl.actions.utility.UseCardAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.PowerStrings; +import com.megacrit.cardcrawl.powers.AbstractPower; +import com.megacrit.cardcrawl.powers.StrengthPower; +import downfall.util.TextureLoader; +import sneckomod.SneckoMod; + +import static hermit.util.Wiz.applyToSelf; + +public class BigGunsBlockPower extends AbstractPower implements CloneablePowerInterface { + public static final String POWER_ID = SneckoMod.makeID("BigGunsBlockPower"); + private static final PowerStrings powerStrings = CardCrawlGame.languagePack.getPowerStrings(POWER_ID); + public static final String NAME = powerStrings.NAME; + public static final String[] DESCRIPTIONS = powerStrings.DESCRIPTIONS; + + private static final Texture tex84 = TextureLoader.getTexture(SneckoMod.getModID() + "Resources/images/powers/guns_blazing2_p.png"); + private static final Texture tex32 = TextureLoader.getTexture(SneckoMod.getModID() + "Resources/images/powers/guns_blazing2.png"); + + public BigGunsBlockPower(int amount) { + this.name = NAME; + this.ID = POWER_ID; + this.owner = AbstractDungeon.player; + this.amount = amount; + this.type = PowerType.BUFF; + this.isTurnBased = false; + + this.region128 = new TextureAtlas.AtlasRegion(tex84, 0, 0, 84, 84); + this.region48 = new TextureAtlas.AtlasRegion(tex32, 0, 0, 32, 32); + + this.updateDescription(); + } + + @Override + public void onUseCard(AbstractCard card, UseCardAction action) { + if (card.costForTurn >= 3 || (card.cost == -1 && card.energyOnUse >= 3)) { + this.flash(); + addToTop(new GainBlockAction(owner, amount, true)); + } + } + + @Override + public void updateDescription() { + if (this.amount == 1) { + this.description = DESCRIPTIONS[0] + this.amount + DESCRIPTIONS[1]; + } else { + this.description = DESCRIPTIONS[0] + this.amount + DESCRIPTIONS[2]; + } + } + + @Override + public AbstractPower makeCopy() { + return new BigGunsStrengthPower(this.amount); + } +} diff --git a/src/main/java/sneckomod/powers/BigGunsStrengthPower.java b/src/main/java/sneckomod/powers/BigGunsStrengthPower.java new file mode 100644 index 000000000..dbc7ccedb --- /dev/null +++ b/src/main/java/sneckomod/powers/BigGunsStrengthPower.java @@ -0,0 +1,63 @@ +package sneckomod.powers; + +import basemod.interfaces.CloneablePowerInterface; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.TextureAtlas; +import com.megacrit.cardcrawl.actions.common.GainEnergyAction; +import com.megacrit.cardcrawl.actions.utility.UseCardAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.PowerStrings; +import com.megacrit.cardcrawl.powers.AbstractPower; +import com.megacrit.cardcrawl.powers.StrengthPower; +import downfall.util.TextureLoader; +import sneckomod.SneckoMod; + +import static hermit.util.Wiz.applyToSelf; + +public class BigGunsStrengthPower extends AbstractPower implements CloneablePowerInterface { + public static final String POWER_ID = SneckoMod.makeID("BigGunsStrengthPower"); + private static final PowerStrings powerStrings = CardCrawlGame.languagePack.getPowerStrings(POWER_ID); + public static final String NAME = powerStrings.NAME; + public static final String[] DESCRIPTIONS = powerStrings.DESCRIPTIONS; + + private static final Texture tex84 = TextureLoader.getTexture(SneckoMod.getModID() + "Resources/images/powers/guns_blazing_p.png"); + private static final Texture tex32 = TextureLoader.getTexture(SneckoMod.getModID() + "Resources/images/powers/guns_blazing.png"); + + public BigGunsStrengthPower(int amount) { + this.name = NAME; + this.ID = POWER_ID; + this.owner = AbstractDungeon.player; + this.amount = amount; + this.type = PowerType.BUFF; + this.isTurnBased = false; + + this.region128 = new TextureAtlas.AtlasRegion(tex84, 0, 0, 84, 84); + this.region48 = new TextureAtlas.AtlasRegion(tex32, 0, 0, 32, 32); + + this.updateDescription(); + } + + @Override + public void onUseCard(AbstractCard card, UseCardAction action) { + if (card.costForTurn >= 3 || (card.cost == -1 && card.energyOnUse >= 3)) { + this.flash(); + applyToSelf(new StrengthPower(owner, amount)); + } + } + + @Override + public void updateDescription() { + if (this.amount == 1) { + this.description = DESCRIPTIONS[0] + this.amount + DESCRIPTIONS[1]; + } else { + this.description = DESCRIPTIONS[0] + this.amount + DESCRIPTIONS[2]; + } + } + + @Override + public AbstractPower makeCopy() { + return new BigGunsStrengthPower(this.amount); + } +} diff --git a/src/main/java/sneckomod/powers/BlunderGuardPower.java b/src/main/java/sneckomod/powers/BlunderGuardPower.java new file mode 100644 index 000000000..a8236e6c6 --- /dev/null +++ b/src/main/java/sneckomod/powers/BlunderGuardPower.java @@ -0,0 +1,100 @@ +package sneckomod.powers; + +import basemod.interfaces.CloneablePowerInterface; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.TextureAtlas; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.DrawCardAction; +import com.megacrit.cardcrawl.actions.common.GainBlockAction; +import com.megacrit.cardcrawl.actions.utility.UseCardAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.PowerStrings; +import com.megacrit.cardcrawl.powers.AbstractPower; +import com.megacrit.cardcrawl.powers.NextTurnBlockPower; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import hermit.cards.AbstractDynamicCard; +import sneckomod.SneckoMod; +import sneckomod.SneckoMod; +import downfall.util.TextureLoader; +import sneckomod.cards.TyphoonFang; +import sneckomod.relics.D8; + +import static sneckomod.SneckoMod.NO_TYPHOON; + +public class BlunderGuardPower extends AbstractPower implements CloneablePowerInterface { + + public static final String POWER_ID = SneckoMod.makeID("BlunderGuardPower"); + + private static final Texture tex84 = TextureLoader.getTexture(SneckoMod.getModID() + "Resources/images/powers/BurnVenom84.png"); + private static final Texture tex32 = TextureLoader.getTexture(SneckoMod.getModID() + "Resources/images/powers/BurnVenom32.png"); + + private static final PowerStrings powerStrings = CardCrawlGame.languagePack.getPowerStrings(POWER_ID); + public static final String NAME = powerStrings.NAME; + public static final String[] DESCRIPTIONS = powerStrings.DESCRIPTIONS; + + public BlunderGuardPower(final int amount) { + this.name = NAME; + this.ID = POWER_ID; + this.owner = AbstractDungeon.player; + this.amount = amount; + this.type = PowerType.BUFF; + this.isTurnBased = false; + + this.loadRegion("deva"); + + this.updateDescription(); + } + + public boolean isOverflowActive(AbstractCard source) { + boolean OVERFLOW = false; + + if (source.hasTag(SneckoMod.OVERFLOW)) { + if (AbstractDungeon.player.hand.size() > 5 || (AbstractDungeon.player.hasPower(CheatPower.POWER_ID))) { + OVERFLOW = true; + } + + if (source.hasTag(NO_TYPHOON)) { + return false; + } + + if (AbstractDungeon.player.hasRelic(D8.ID)) { + D8 d8Relic = (D8) AbstractDungeon.player.getRelic(D8.ID); + if (d8Relic != null && d8Relic.card != null) { + if (d8Relic.card.uuid.equals(source.uuid)) { + OVERFLOW = true; + } + } + } + } + + return OVERFLOW; + } + + @Override + public void onUseCard(AbstractCard card, UseCardAction action) { + if (!isOverflowActive(card) || card.purgeOnUse) { + return; + } + flash(); + addToTop(new GainBlockAction(owner, amount, false)); + } + + + @Override + public void updateDescription() { + if (amount == 1) { + description = DESCRIPTIONS[0] + amount + DESCRIPTIONS[1]; + } else { + description = DESCRIPTIONS[0] + amount + DESCRIPTIONS[2]; + } + } + + @Override + public AbstractPower makeCopy() { + return new BlunderGuardPower(amount); + } +} \ No newline at end of file diff --git a/src/main/java/sneckomod/powers/CheapStockPower.java b/src/main/java/sneckomod/powers/CheapStockPower.java index 121670d7e..0f03d9a65 100644 --- a/src/main/java/sneckomod/powers/CheapStockPower.java +++ b/src/main/java/sneckomod/powers/CheapStockPower.java @@ -11,9 +11,13 @@ import com.megacrit.cardcrawl.powers.AbstractPower; import sneckomod.SneckoMod; import downfall.util.TextureLoader; +import sneckomod.actions.MuddleRandomCardAction; + import java.util.ArrayList; +import static hermit.util.Wiz.atb; + public class CheapStockPower extends AbstractPower implements CloneablePowerInterface { public static final String POWER_ID = SneckoMod.makeID("CheapStockPower"); @@ -40,30 +44,9 @@ public CheapStockPower(final int amount) { } public void atStartOfTurnPostDraw() { - for (int i = 0; i < amount; i++) - addToBot(new AbstractGameAction() { - @Override - public void update() { - isDone = true; - int x = 0; - for (AbstractCard q : AbstractDungeon.player.hand.group) { - if (q.color != AbstractDungeon.player.getCardColor() && q.cost > x) - x = q.cost; - } - ArrayList possCardsList = new ArrayList<>(); - for (AbstractCard q : AbstractDungeon.player.hand.group) { - if (q.cost == x && q.color != AbstractDungeon.player.getCardColor()) - possCardsList.add(q); + atb(new MuddleRandomCardAction(amount, true)); } - if (!possCardsList.isEmpty()) { - flash(); - AbstractCard q = possCardsList.get(AbstractDungeon.cardRandomRng.random(possCardsList.size() - 1)); - q.modifyCostForCombat(-1); - q.superFlash(); - } - } - }); - } + @Override public void updateDescription() { diff --git a/src/main/java/sneckomod/powers/FountainPower.java b/src/main/java/sneckomod/powers/FountainPower.java new file mode 100644 index 000000000..c0da608a0 --- /dev/null +++ b/src/main/java/sneckomod/powers/FountainPower.java @@ -0,0 +1,96 @@ +package sneckomod.powers; + +import basemod.interfaces.CloneablePowerInterface; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.TextureAtlas; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.utility.UseCardAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.PowerStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.AbstractPower; +import downfall.util.TextureLoader; +import sneckomod.SneckoMod; +import sneckomod.cards.TyphoonFang; +import sneckomod.relics.D8; + +import static sneckomod.SneckoMod.NO_TYPHOON; + +public class FountainPower extends AbstractPower implements CloneablePowerInterface { + public static final String POWER_ID = SneckoMod.makeID("FountainPower"); + private static final PowerStrings powerStrings = CardCrawlGame.languagePack.getPowerStrings(POWER_ID); + public static final String NAME = powerStrings.NAME; + public static final String[] DESCRIPTIONS = powerStrings.DESCRIPTIONS; + + private static final Texture tex84 = TextureLoader.getTexture(SneckoMod.getModID() + "Resources/images/powers/BurnVenom84.png"); + private static final Texture tex32 = TextureLoader.getTexture(SneckoMod.getModID() + "Resources/images/powers/BurnVenom32.png"); + + + public FountainPower(int amount) { + this.name = NAME; + this.ID = POWER_ID; + this.owner = AbstractDungeon.player; + this.amount = amount; + this.type = PowerType.BUFF; + this.isTurnBased = false; + + this.region128 = new TextureAtlas.AtlasRegion(tex84, 0, 0, 84, 84); + this.region48 = new TextureAtlas.AtlasRegion(tex32, 0, 0, 32, 32); + + this.updateDescription(); + } + + @Override + public void onUseCard(AbstractCard card, UseCardAction action) { + if (isOverflowActive(card)) { + AbstractMonster randomTarget = getRandomAliveMonster(); + if (randomTarget != null) { + this.addToBot(new ApplyPowerAction(randomTarget, this.owner, new VenomDebuff(randomTarget, this.amount), this.amount)); + } + } + } + + public boolean isOverflowActive(AbstractCard source) { + boolean OVERFLOW = false; + + if (source.hasTag(SneckoMod.OVERFLOW)) { + if (AbstractDungeon.player.hand.size() > 5 || (AbstractDungeon.player.hasPower(CheatPower.POWER_ID))) { + OVERFLOW = true; + } + + if (source.hasTag(NO_TYPHOON)) { + return false; + } + + if (AbstractDungeon.player.hasRelic(D8.ID)) { + D8 d8Relic = (D8) AbstractDungeon.player.getRelic(D8.ID); + if (d8Relic != null && d8Relic.card != null) { + if (d8Relic.card.uuid.equals(source.uuid)) { + OVERFLOW = true; + } + } + } + } + + return OVERFLOW; + } + + private AbstractMonster getRandomAliveMonster() { + AbstractMonster randomTarget = AbstractDungeon.getMonsters().getRandomMonster(true); + return (randomTarget != null && randomTarget.isDeadOrEscaped()) ? null : randomTarget; + } + + @Override + public void updateDescription() { + this.description = DESCRIPTIONS[0] + this.amount + DESCRIPTIONS[1]; + } + + @Override + public AbstractPower makeCopy() { + return new FountainPower(this.amount); + } +} diff --git a/src/main/java/sneckomod/powers/LacerateDebuff.java b/src/main/java/sneckomod/powers/LacerateDebuff.java new file mode 100644 index 000000000..5c1ac7cbd --- /dev/null +++ b/src/main/java/sneckomod/powers/LacerateDebuff.java @@ -0,0 +1,79 @@ +//package sneckomod.powers; +// +//import basemod.interfaces.CloneablePowerInterface; +//import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +//import com.megacrit.cardcrawl.core.AbstractCreature; +//import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +//import com.badlogic.gdx.graphics.Texture; +//import com.badlogic.gdx.graphics.g2d.TextureAtlas; +//import com.megacrit.cardcrawl.core.CardCrawlGame; +//import com.megacrit.cardcrawl.localization.PowerStrings; +//import com.megacrit.cardcrawl.powers.AbstractPower; +//import downfall.util.TextureLoader; +//import com.evacipated.cardcrawl.mod.stslib.powers.interfaces.OnReceivePowerPower; +//import sneckomod.SneckoMod; +// +//public class LacerateDebuff extends AbstractPower implements CloneablePowerInterface, OnReceivePowerPower { +// public static final String POWER_ID = SneckoMod.makeID("LacerateDebuff"); +// private static final PowerStrings powerStrings = CardCrawlGame.languagePack.getPowerStrings(POWER_ID); +// public static final String NAME = powerStrings.NAME; +// public static final String[] DESCRIPTIONS = powerStrings.DESCRIPTIONS; +// +// private static final Texture tex84 = TextureLoader.getTexture(SneckoMod.getModID() + "Resources/images/powers/BurnPerTurn84.png"); +// private static final Texture tex32 = TextureLoader.getTexture(SneckoMod.getModID() + "Resources/images/powers/BurnPerTurn32.png"); +// +// +// public LacerateDebuff(AbstractCreature owner, int amount) { +// this.name = NAME; +// this.ID = POWER_ID; +// this.owner = owner; +// this.amount = amount; +// this.type = PowerType.DEBUFF; +// this.isTurnBased = true; +// this.canGoNegative = false; +// +// +// this.region128 = new TextureAtlas.AtlasRegion(tex84, 0, 0, 84, 84); +// this.region48 = new TextureAtlas.AtlasRegion(tex32, 0, 0, 32, 32); +// +// this.updateDescription(); +// } +// +// @Override +// public void atEndOfTurn(boolean isPlayer) { +// if (!this.owner.isPlayer) { +// this.addToBot(new com.megacrit.cardcrawl.actions.common.RemoveSpecificPowerAction(this.owner, this.owner, POWER_ID)); +// } +// } +// +// @Override +// public boolean onReceivePower(AbstractPower power, AbstractCreature target, AbstractCreature source) { +// if (power.type == PowerType.DEBUFF && target == this.owner && !(power instanceof VenomDebuff) && !power.ID.equals("Shackled") && !target.hasPower("Artifact")) { +// int additionalAmount = 0; +// +// if (AbstractDungeon.player.hasPower(ToxicPersonalityPower.POWER_ID)) { +// AbstractPower toxicPersonality = AbstractDungeon.player.getPower(ToxicPersonalityPower.POWER_ID); +// additionalAmount += toxicPersonality.amount; +// } +// +// if (AbstractDungeon.player.hasPower(ToxicPersonalityPower.POWER_ID)) { +// AbstractPower toxicPersonality = AbstractDungeon.player.getPower(ToxicPersonalityPower.POWER_ID); +// additionalAmount += toxicPersonality.amount; +// } +// +// AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(target, AbstractDungeon.player, new VenomDebuff(target, this.amount), this.amount)); +// //AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(target, AbstractDungeon.player, new VenomDebuff(target, additionalAmount), additionalAmount)); +// } +// return true; +// } +// +// @Override +// public void updateDescription() { +// this.description = DESCRIPTIONS[0] + this.amount + DESCRIPTIONS[1]; +// } +// +// @Override +// public AbstractPower makeCopy() { +// return new LacerateDebuff(this.owner, this.amount); +// } +//} \ No newline at end of file diff --git a/src/main/java/sneckomod/powers/OverwhelmingPresencePower.java b/src/main/java/sneckomod/powers/OverwhelmingPresencePower.java new file mode 100644 index 000000000..8bec71cbb --- /dev/null +++ b/src/main/java/sneckomod/powers/OverwhelmingPresencePower.java @@ -0,0 +1,72 @@ +package sneckomod.powers; + +import basemod.interfaces.CloneablePowerInterface; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.TextureAtlas; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.DrawCardAction; +import com.megacrit.cardcrawl.actions.common.GainEnergyAction; +import com.megacrit.cardcrawl.actions.utility.UseCardAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.PowerStrings; +import com.megacrit.cardcrawl.powers.AbstractPower; +import com.megacrit.cardcrawl.powers.DrawCardNextTurnPower; +import downfall.util.TextureLoader; +import sneckomod.SneckoMod; + +public class OverwhelmingPresencePower extends AbstractPower implements CloneablePowerInterface { + public static final String POWER_ID = SneckoMod.makeID("OverwhelmingPresencePower"); + private static final PowerStrings powerStrings = CardCrawlGame.languagePack.getPowerStrings(POWER_ID); + public static final String NAME = powerStrings.NAME; + public static final String[] DESCRIPTIONS = powerStrings.DESCRIPTIONS; + + private static final Texture tex84 = TextureLoader.getTexture(SneckoMod.getModID() + "Resources/images/powers/EtherealRefund84.png"); + private static final Texture tex32 = TextureLoader.getTexture(SneckoMod.getModID() + "Resources/images/powers/EtherealRefund32.png"); + + private int previousDrawPileSize; + private boolean hasTriggeredThisTurn; + + public OverwhelmingPresencePower(AbstractCreature owner, int amount) { + this.name = NAME; + this.ID = POWER_ID; + this.owner = owner; + this.amount = amount; + this.type = PowerType.BUFF; + + this.region128 = new TextureAtlas.AtlasRegion(tex84, 0, 0, 84, 84); + this.region48 = new TextureAtlas.AtlasRegion(tex32, 0, 0, 32, 32); + + this.previousDrawPileSize = AbstractDungeon.player.drawPile.size(); + this.updateDescription(); + } + + @Override + public void atStartOfTurn() { + hasTriggeredThisTurn = false; + } + + @Override + public void onUseCard(AbstractCard card, UseCardAction action) { + if (hasTriggeredThisTurn = false) { + if (card.color != AbstractDungeon.player.getCardColor() && !card.purgeOnUse) { + this.flash(); + addToBot(new DrawCardAction(amount)); + } + } + } + + @Override + public void updateDescription() { + this.description = (amount == 1) + ? DESCRIPTIONS[0] + : DESCRIPTIONS[1] + this.amount + DESCRIPTIONS[2]; + } + + @Override + public AbstractPower makeCopy() { + return new OverwhelmingPresencePower(this.owner, this.amount); + } +} diff --git a/src/main/java/sneckomod/powers/SerpentMindPower.java b/src/main/java/sneckomod/powers/SerpentMindPower.java index 998a8e3c8..096b4d3ae 100644 --- a/src/main/java/sneckomod/powers/SerpentMindPower.java +++ b/src/main/java/sneckomod/powers/SerpentMindPower.java @@ -3,16 +3,20 @@ import basemod.interfaces.CloneablePowerInterface; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.TextureAtlas; -import com.megacrit.cardcrawl.actions.common.DrawCardAction; -import com.megacrit.cardcrawl.actions.utility.UseCardAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.localization.PowerStrings; import com.megacrit.cardcrawl.powers.AbstractPower; +import com.megacrit.cardcrawl.powers.StrengthPower; import sneckomod.SneckoMod; import downfall.util.TextureLoader; +import java.util.HashSet; +import java.util.Set; + +import static hermit.util.Wiz.applyToSelf; + public class SerpentMindPower extends AbstractPower implements CloneablePowerInterface { public static final String POWER_ID = SneckoMod.makeID("SerpentMindPower"); @@ -24,6 +28,23 @@ public class SerpentMindPower extends AbstractPower implements CloneablePowerInt public static final String NAME = powerStrings.NAME; public static final String[] DESCRIPTIONS = powerStrings.DESCRIPTIONS; + public int getUniqueSuitsPlayedThisTurn() { + Set uniqueColors = new HashSet<>(); // another one of these + + for (AbstractCard card : AbstractDungeon.actionManager.cardsPlayedThisTurn) { + // Sandtag convinced me that status and curse should count. + if ( + //(card.type != AbstractCard.CardType.STATUS && + // card.type != AbstractCard.CardType.CURSE && + !(card.color == AbstractCard.CardColor.COLORLESS && card.rarity == AbstractCard.CardRarity.SPECIAL)) { + + uniqueColors.add(card.color); + } + } + + return uniqueColors.size(); // number colors played per turn hopefully + } + public SerpentMindPower(final int amount) { this.name = NAME; this.ID = POWER_ID; @@ -39,13 +60,13 @@ public SerpentMindPower(final int amount) { } @Override - public void onUseCard(AbstractCard card, UseCardAction action) { - if (card.color != AbstractDungeon.player.getCardColor()) { - flash(); - addToBot(new DrawCardAction(amount)); + public void atEndOfTurn(boolean isPlayer) { + if (getUniqueSuitsPlayedThisTurn() > 0) { + applyToSelf(new StrengthPower(owner, amount * getUniqueSuitsPlayedThisTurn())); // wow boring nerf really cool (it's not cool) } } + @Override public void updateDescription() { if (amount == 1) diff --git a/src/main/java/sneckomod/powers/SerpentineSleuthPower.java b/src/main/java/sneckomod/powers/SerpentineSleuthPower.java new file mode 100644 index 000000000..b7d1ea605 --- /dev/null +++ b/src/main/java/sneckomod/powers/SerpentineSleuthPower.java @@ -0,0 +1,60 @@ +package sneckomod.powers; + +import basemod.interfaces.CloneablePowerInterface; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.TextureAtlas; +import com.megacrit.cardcrawl.actions.common.GainEnergyAction; +import com.megacrit.cardcrawl.actions.utility.UseCardAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.PowerStrings; +import com.megacrit.cardcrawl.powers.AbstractPower; +import downfall.util.TextureLoader; +import sneckomod.SneckoMod; + +public class SerpentineSleuthPower extends AbstractPower implements CloneablePowerInterface { + public static final String POWER_ID = SneckoMod.makeID("SerpentineSleuthPower"); + private static final PowerStrings powerStrings = CardCrawlGame.languagePack.getPowerStrings(POWER_ID); + public static final String NAME = powerStrings.NAME; + public static final String[] DESCRIPTIONS = powerStrings.DESCRIPTIONS; + + private static final Texture tex84 = TextureLoader.getTexture(SneckoMod.getModID() + "Resources/images/powers/Rolls84.png"); + private static final Texture tex32 = TextureLoader.getTexture(SneckoMod.getModID() + "Resources/images/powers/Rolls32.png"); + + public SerpentineSleuthPower(int amount) { + this.name = NAME; + this.ID = POWER_ID; + this.owner = AbstractDungeon.player; + this.amount = amount; + this.type = PowerType.BUFF; + this.isTurnBased = false; + + this.region128 = new TextureAtlas.AtlasRegion(tex84, 0, 0, 84, 84); + this.region48 = new TextureAtlas.AtlasRegion(tex32, 0, 0, 32, 32); + + this.updateDescription(); + } + + @Override + public void onUseCard(AbstractCard card, UseCardAction action) { + if (card.type == AbstractCard.CardType.POWER) { + this.flash(); + addToBot(new GainEnergyAction(this.amount)); + } + } + + @Override + public void updateDescription() { + if (this.amount == 1) { + this.description = DESCRIPTIONS[0] + this.amount + DESCRIPTIONS[1]; + } else { + this.description = DESCRIPTIONS[0] + this.amount + DESCRIPTIONS[2]; + } + } + + @Override + public AbstractPower makeCopy() { + return new SerpentineSleuthPower(this.amount); + } +} diff --git a/src/main/java/sneckomod/powers/SerpentsNestPower.java b/src/main/java/sneckomod/powers/SerpentsNestPower.java new file mode 100644 index 000000000..591d7b147 --- /dev/null +++ b/src/main/java/sneckomod/powers/SerpentsNestPower.java @@ -0,0 +1,65 @@ +package sneckomod.powers; + +import basemod.interfaces.CloneablePowerInterface; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.TextureAtlas; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.DamageAllEnemiesAction; +import com.megacrit.cardcrawl.actions.common.GainEnergyAction; +import com.megacrit.cardcrawl.actions.utility.UseCardAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.PowerStrings; +import com.megacrit.cardcrawl.powers.AbstractPower; +import downfall.util.TextureLoader; +import sneckomod.SneckoMod; + +public class SerpentsNestPower extends AbstractPower implements CloneablePowerInterface { + public static final String POWER_ID = SneckoMod.makeID("SerpentsNestPower"); + private static final PowerStrings powerStrings = CardCrawlGame.languagePack.getPowerStrings(POWER_ID); + public static final String NAME = powerStrings.NAME; + public static final String[] DESCRIPTIONS = powerStrings.DESCRIPTIONS; + + private static final Texture tex84 = TextureLoader.getTexture(SneckoMod.getModID() + "Resources/images/powers/Rolls84.png"); + private static final Texture tex32 = TextureLoader.getTexture(SneckoMod.getModID() + "Resources/images/powers/Rolls32.png"); + + public SerpentsNestPower(int amount) { + this.name = NAME; + this.ID = POWER_ID; + this.owner = AbstractDungeon.player; + this.amount = amount; + this.type = PowerType.BUFF; + this.isTurnBased = false; + + this.region128 = new TextureAtlas.AtlasRegion(tex84, 0, 0, 84, 84); + this.region48 = new TextureAtlas.AtlasRegion(tex32, 0, 0, 32, 32); + + this.updateDescription(); + } + + @Override + public void onUseCard(AbstractCard card, UseCardAction action) { + if (card.type == AbstractCard.CardType.POWER) { + this.flash(); + AbstractDungeon.actionManager.addToBottom(new DamageAllEnemiesAction(null, + DamageInfo.createDamageMatrix(amount, true), + DamageInfo.DamageType.THORNS, AbstractGameAction.AttackEffect.FIRE)); + } + } + + @Override + public void updateDescription() { + if (this.amount == 1) { + this.description = DESCRIPTIONS[0] + this.amount + DESCRIPTIONS[1]; + } else { + this.description = DESCRIPTIONS[1] + this.amount + DESCRIPTIONS[2]; + } + } + + @Override + public AbstractPower makeCopy() { + return new SerpentsNestPower(this.amount); + } +} diff --git a/src/main/java/sneckomod/powers/SnakeEyesPower.java b/src/main/java/sneckomod/powers/SnakeEyesPower.java new file mode 100644 index 000000000..c7adf2534 --- /dev/null +++ b/src/main/java/sneckomod/powers/SnakeEyesPower.java @@ -0,0 +1,91 @@ +package sneckomod.powers; + +import basemod.interfaces.CloneablePowerInterface; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.TextureAtlas; +import com.megacrit.cardcrawl.actions.utility.UseCardAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.CardQueueItem; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.PowerStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.AbstractPower; +import com.megacrit.cardcrawl.actions.common.RemoveSpecificPowerAction; +import downfall.util.TextureLoader; +import sneckomod.SneckoMod; + +public class SnakeEyesPower extends AbstractPower implements CloneablePowerInterface { + public static final String POWER_ID = SneckoMod.makeID("SnakeEyesPower"); + private static final PowerStrings powerStrings = CardCrawlGame.languagePack.getPowerStrings(POWER_ID); + public static final String NAME = powerStrings.NAME; + public static final String[] DESCRIPTIONS = powerStrings.DESCRIPTIONS; + + private static final Texture tex84 = TextureLoader.getTexture(SneckoMod.getModID() + "Resources/images/powers/Rolls84.png"); + private static final Texture tex32 = TextureLoader.getTexture(SneckoMod.getModID() + "Resources/images/powers/Rolls32.png"); + + public SnakeEyesPower(int amount) { + this.name = NAME; + this.ID = POWER_ID; + this.owner = AbstractDungeon.player; + this.amount = amount; + this.type = PowerType.BUFF; + this.isTurnBased = true; + + this.region128 = new TextureAtlas.AtlasRegion(tex84, 0, 0, 84, 84); + this.region48 = new TextureAtlas.AtlasRegion(tex32, 0, 0, 32, 32); + + this.updateDescription(); + } + + @Override + public void onUseCard(AbstractCard card, UseCardAction action) { + if (card.color != AbstractDungeon.player.getCardColor() && !card.purgeOnUse) { + this.flash(); + AbstractMonster m = null; + if (action.target != null) { + m = (AbstractMonster)action.target; + } + + AbstractCard tmp = card.makeSameInstanceOf(); + AbstractDungeon.player.limbo.addToBottom(tmp); + tmp.current_x = card.current_x; + tmp.current_y = card.current_y; + tmp.target_x = (float)Settings.WIDTH / 2.0F - 300.0F * Settings.scale; + tmp.target_y = (float)Settings.HEIGHT / 2.0F; + if (m != null) { + tmp.calculateCardDamage(m); + } + + tmp.purgeOnUse = true; + AbstractDungeon.actionManager.addCardQueueItem(new CardQueueItem(tmp, m, card.energyOnUse, true, true), true); + this.amount--; + if (this.amount <= 0) { + addToBot(new RemoveSpecificPowerAction(this.owner, this.owner, this)); + } + updateDescription(); + } + } + + @Override + public void atEndOfTurn(boolean isPlayer) { + if (isPlayer) { + addToBot(new RemoveSpecificPowerAction(this.owner, this.owner, this)); + } + } + + @Override + public void updateDescription() { + if (this.amount == 1) { + this.description = DESCRIPTIONS[0]; + } else { + this.description = DESCRIPTIONS[1] + this.amount + DESCRIPTIONS[2]; + } + } + + @Override + public AbstractPower makeCopy() { + return new SnakeEyesPower(this.amount); + } +} diff --git a/src/main/java/sneckomod/powers/ToxicPersonalityPower.java b/src/main/java/sneckomod/powers/ToxicPersonalityPower.java new file mode 100644 index 000000000..2f4cbe5df --- /dev/null +++ b/src/main/java/sneckomod/powers/ToxicPersonalityPower.java @@ -0,0 +1,63 @@ +//package sneckomod.powers; +// +//import basemod.interfaces.CloneablePowerInterface; +//import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +//import com.megacrit.cardcrawl.core.AbstractCreature; +//import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +//import com.badlogic.gdx.graphics.Texture; +//import com.badlogic.gdx.graphics.g2d.TextureAtlas; +//import com.megacrit.cardcrawl.core.CardCrawlGame; +//import com.megacrit.cardcrawl.localization.PowerStrings; +//import com.megacrit.cardcrawl.powers.AbstractPower; +//import downfall.util.TextureLoader; +//import sneckomod.SneckoMod; +// +//public class ToxicPersonalityPower extends AbstractPower implements CloneablePowerInterface { +// public static final String POWER_ID = SneckoMod.makeID("ToxicPersonalityPower"); +// private static final PowerStrings powerStrings = CardCrawlGame.languagePack.getPowerStrings(POWER_ID); +// public static final String NAME = powerStrings.NAME; +// public static final String[] DESCRIPTIONS = powerStrings.DESCRIPTIONS; +// +// private static final Texture tex84 = TextureLoader.getTexture(SneckoMod.getModID() + "Resources/images/powers/Rolls84.png"); +// private static final Texture tex32 = TextureLoader.getTexture(SneckoMod.getModID() + "Resources/images/powers/Rolls32.png"); +// +// public ToxicPersonalityPower(int amount) { +// this.name = NAME; +// this.ID = POWER_ID; +// this.owner = AbstractDungeon.player; +// this.amount = amount; +// this.type = PowerType.BUFF; +// this.isTurnBased = false; +// +// this.region128 = new TextureAtlas.AtlasRegion(tex84, 0, 0, 84, 84); +// this.region48 = new TextureAtlas.AtlasRegion(tex32, 0, 0, 32, 32); +// +// this.updateDescription(); +// } +// +// @Override +// public void onApplyPower(AbstractPower power, AbstractCreature target, AbstractCreature source) { +// // Check if the applied power is a debuff and not Venom/Shackle AND they don't have Artifact +// if ((power.type == PowerType.DEBUFF && !(power instanceof VenomDebuff) && source == this.owner && target != this.owner) && !power.ID.equals("Shackled") && !target.hasPower("Artifact")){ +// onActivateCall(target); +// } +// } +// +// public void onActivateCall(AbstractCreature target) { +// this.flash(); +// this.addToBot(new ApplyPowerAction(target, this.owner, new VenomDebuff(target, this.amount), this.amount)); +// } +// +// +// +// +// @Override +// public void updateDescription() { +// this.description = DESCRIPTIONS[0] + this.amount + DESCRIPTIONS[1]; +// } +// +// @Override +// public AbstractPower makeCopy() { +// return new ToxicPersonalityPower(this.amount); +// } +//} \ No newline at end of file diff --git a/src/main/java/sneckomod/powers/TrashCanPower.java b/src/main/java/sneckomod/powers/TrashCanPower.java new file mode 100644 index 000000000..14acbbda3 --- /dev/null +++ b/src/main/java/sneckomod/powers/TrashCanPower.java @@ -0,0 +1,86 @@ +package sneckomod.powers; + +import basemod.interfaces.CloneablePowerInterface; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.TextureAtlas; +import com.megacrit.cardcrawl.actions.common.GainBlockAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.localization.PowerStrings; +import com.megacrit.cardcrawl.localization.UIStrings; +import com.megacrit.cardcrawl.powers.AbstractPower; +import downfall.util.TextureLoader; +import hermit.HermitMod; +import hermit.actions.HandSelectAction; +import basemod.interfaces.CloneablePowerInterface; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.TextureAtlas; +import com.megacrit.cardcrawl.actions.common.DrawCardAction; +import com.megacrit.cardcrawl.actions.common.GainEnergyAction; +import com.megacrit.cardcrawl.actions.common.RelicAboveCreatureAction; +import com.megacrit.cardcrawl.actions.utility.UseCardAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.PowerStrings; +import com.megacrit.cardcrawl.powers.AbstractPower; +import gremlin.actions.GremlinSwapAction; +import hermit.util.Wiz; +import sneckomod.SneckoMod; + +public class TrashCanPower extends AbstractPower implements CloneablePowerInterface { + public AbstractCreature source; + + public static final String POWER_ID = SneckoMod.makeID("TrashCanPower"); + private static final PowerStrings powerStrings = CardCrawlGame.languagePack.getPowerStrings(POWER_ID); + public static final String NAME = powerStrings.NAME; + public static final String[] DESCRIPTIONS = powerStrings.DESCRIPTIONS; + public static UIStrings uiStrings = CardCrawlGame.languagePack.getUIString("ExhaustAction"); + + private static final Texture tex84 = downfall.util.TextureLoader.getTexture(SneckoMod.getModID() + "Resources/images/powers/MoreBlockWithTempHP84.png"); + private static final Texture tex32 = TextureLoader.getTexture(SneckoMod.getModID() + "Resources/images/powers/MoreBlockWithTempHP32.png"); + + public TrashCanPower(final AbstractCreature _owner, final AbstractCreature _source, final int _amount) { + name = NAME; + ID = POWER_ID; + + owner = _owner; + amount = _amount; + source = _source; + + type = PowerType.BUFF; + isTurnBased = false; + + region128 = new TextureAtlas.AtlasRegion(tex84, 0, 0, 84, 84); + region48 = new TextureAtlas.AtlasRegion(tex32, 0, 0, 32, 32); + + updateDescription(); + } + + @Override + public void atEndOfRound() { + this.flash(); + Wiz.atb(new HandSelectAction(this.amount, (c) -> true, list -> { + for (AbstractCard c : list) + { + Wiz.p().hand.moveToExhaustPile(c); + } + }, null, uiStrings.TEXT[0],false,true,true)); + } + + @Override + public void updateDescription() { + if (this.amount == 1) { + this.description = DESCRIPTIONS[0]; + } else { + this.description = DESCRIPTIONS[1] + this.amount + DESCRIPTIONS[2]; + } + } + + + @Override + public AbstractPower makeCopy() { + return new TrashCanPower(owner, source, amount); + } +} diff --git a/src/main/java/sneckomod/powers/TyphoonPlusPower.java b/src/main/java/sneckomod/powers/TyphoonPlusPower.java new file mode 100644 index 000000000..2a7644477 --- /dev/null +++ b/src/main/java/sneckomod/powers/TyphoonPlusPower.java @@ -0,0 +1,110 @@ +package sneckomod.powers; + +import basemod.interfaces.CloneablePowerInterface; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.TextureAtlas; +import com.megacrit.cardcrawl.actions.common.PlayTopCardAction; +import com.megacrit.cardcrawl.actions.utility.UseCardAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.PowerStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.AbstractPower; +import downfall.util.TextureLoader; +import sneckomod.SneckoMod; +import sneckomod.actions.PlayTyphoonAction; +import sneckomod.cards.PoisonParadise; +import sneckomod.cards.TyphoonFang; +import com.megacrit.cardcrawl.core.Settings; +import sneckomod.relics.D8; + +import static sneckomod.SneckoMod.NO_TYPHOON; + +public class TyphoonPlusPower extends AbstractPower implements CloneablePowerInterface { + public static final String POWER_ID = SneckoMod.makeID("TyphoonPlusPower"); + private static final PowerStrings powerStrings = CardCrawlGame.languagePack.getPowerStrings(POWER_ID); + public static final String NAME = powerStrings.NAME; + public static final String[] DESCRIPTIONS = powerStrings.DESCRIPTIONS; + + private static final Texture tex84 = TextureLoader.getTexture(SneckoMod.getModID() + "Resources/images/powers/DemisePlus84.png"); + private static final Texture tex32 = TextureLoader.getTexture(SneckoMod.getModID() + "Resources/images/powers/DemisePlus32.png"); + + //this is a near identical copy of TyphoonPower, so held together with the same amount of duct tape and prayers + //Both of these are less terrible now. + + public TyphoonPlusPower(int amount) { + this.name = NAME; + this.ID = POWER_ID; + this.owner = AbstractDungeon.player; + this.amount = amount; + this.type = PowerType.BUFF; + this.isTurnBased = true; + + this.region128 = new TextureAtlas.AtlasRegion(tex84, 0, 0, 84, 84); + this.region48 = new TextureAtlas.AtlasRegion(tex32, 0, 0, 32, 32); + + this.updateDescription(); + } + + public boolean isOverflowActive(AbstractCard source) { + boolean OVERFLOW = false; + if (source.hasTag(SneckoMod.OVERFLOW)) { + if (AbstractDungeon.player.hand.size() > 5 || (AbstractDungeon.player.hasPower(CheatPower.POWER_ID))) { + OVERFLOW = true; + } + + if (source.hasTag(NO_TYPHOON)) { + return false; + } + + if (AbstractDungeon.player.hasRelic(D8.ID)) { + D8 d8Relic = (D8) AbstractDungeon.player.getRelic(D8.ID); + if (d8Relic != null && d8Relic.card != null) { + if (d8Relic.card.uuid.equals(source.uuid)) { + OVERFLOW = true; + } + } + } + } + + return OVERFLOW; + } + + + @Override + public void onUseCard(AbstractCard card, UseCardAction action) { + if (!isOverflowActive(card) || card.hasTag(NO_TYPHOON)) { + return; + } + + for (int i = 0; i < this.amount; i++) { + this.addToBot(new PlayTyphoonAction(AbstractDungeon.getCurrRoom().monsters.getRandomMonster((AbstractMonster)null, true, AbstractDungeon.cardRandomRng), true, true)); + } + } + + + @Override + public void atEndOfTurn(boolean isPlayer) { + if (isPlayer) { + addToBot(new com.megacrit.cardcrawl.actions.common.RemoveSpecificPowerAction(this.owner, this.owner, this)); + } + } + + @Override + public void updateDescription() { + if (this.amount == 1) { + this.description = DESCRIPTIONS[0]; + } + if (this.amount != 1) { + this.description = DESCRIPTIONS[1] + this.amount + DESCRIPTIONS[2]; + } + } + + + @Override + public AbstractPower makeCopy() { + return new TyphoonPlusPower(this.amount); + } +} diff --git a/src/main/java/sneckomod/powers/TyphoonPower.java b/src/main/java/sneckomod/powers/TyphoonPower.java new file mode 100644 index 000000000..09908d2f8 --- /dev/null +++ b/src/main/java/sneckomod/powers/TyphoonPower.java @@ -0,0 +1,108 @@ +package sneckomod.powers; + +import basemod.interfaces.CloneablePowerInterface; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.TextureAtlas; +import com.megacrit.cardcrawl.actions.utility.UseCardAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.PowerStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.AbstractPower; +import downfall.util.TextureLoader; +import sneckomod.SneckoMod; +import sneckomod.actions.PlayTyphoonAction; +import sneckomod.cards.PoisonParadise; +import sneckomod.cards.TyphoonFang; +import com.megacrit.cardcrawl.core.Settings; +import sneckomod.relics.D8; + +import static sneckomod.SneckoMod.NO_TYPHOON; + +public class TyphoonPower extends AbstractPower implements CloneablePowerInterface { + public static final String POWER_ID = SneckoMod.makeID("TyphoonPower"); + private static final PowerStrings powerStrings = CardCrawlGame.languagePack.getPowerStrings(POWER_ID); + public static final String NAME = powerStrings.NAME; + public static final String[] DESCRIPTIONS = powerStrings.DESCRIPTIONS; + + private static final Texture tex84 = TextureLoader.getTexture(SneckoMod.getModID() + "Resources/images/powers/Demise84.png"); + private static final Texture tex32 = TextureLoader.getTexture(SneckoMod.getModID() + "Resources/images/powers/Demise32.png"); + + //I'm finally biting the bullet and making this work because I'm not stupid anymore. + + public TyphoonPower(int amount) { + this.name = NAME; + this.ID = POWER_ID; + this.owner = AbstractDungeon.player; + this.amount = amount; + this.type = PowerType.BUFF; + this.isTurnBased = true; + + this.region128 = new TextureAtlas.AtlasRegion(tex84, 0, 0, 84, 84); + this.region48 = new TextureAtlas.AtlasRegion(tex32, 0, 0, 32, 32); + + this.updateDescription(); + } + + public boolean isOverflowActive(AbstractCard source) { + boolean OVERFLOW = false; + + if (source.hasTag(SneckoMod.OVERFLOW)) { + if (AbstractDungeon.player.hand.size() > 5 || (AbstractDungeon.player.hasPower(CheatPower.POWER_ID))) { + OVERFLOW = true; + } + + if (source.hasTag(NO_TYPHOON)) { + return false; + } + + if (AbstractDungeon.player.hasRelic(D8.ID)) { + D8 d8Relic = (D8) AbstractDungeon.player.getRelic(D8.ID); + if (d8Relic != null && d8Relic.card != null) { + if (d8Relic.card.uuid.equals(source.uuid)) { + OVERFLOW = true; + } + } + } + } + + return OVERFLOW; + } + + + + @Override + public void onUseCard(AbstractCard card, UseCardAction action) { + if (!isOverflowActive(card) || card.hasTag(NO_TYPHOON)) { + return; + } + + for (int i = 0; i < this.amount; i++) { + this.addToTop(new PlayTyphoonAction(AbstractDungeon.getCurrRoom().monsters.getRandomMonster((AbstractMonster) null, true, AbstractDungeon.cardRandomRng), true, false)); + } + } + + @Override + public void atEndOfTurn(boolean isPlayer) { + if (isPlayer) { + addToBot(new com.megacrit.cardcrawl.actions.common.RemoveSpecificPowerAction(this.owner, this.owner, this)); + } + } + + @Override + public void updateDescription() { + if (this.amount == 1) { + this.description = DESCRIPTIONS[0]; + } + if (this.amount != 1) { + this.description = DESCRIPTIONS[1] + this.amount + DESCRIPTIONS[2]; + } + } + + @Override + public AbstractPower makeCopy() { + return new TyphoonPower(this.amount); + } +} diff --git a/src/main/java/sneckomod/powers/UnendingSupplyPower.java b/src/main/java/sneckomod/powers/UnendingSupplyPower.java index 7eab61249..5624f17e2 100644 --- a/src/main/java/sneckomod/powers/UnendingSupplyPower.java +++ b/src/main/java/sneckomod/powers/UnendingSupplyPower.java @@ -1,5 +1,6 @@ package sneckomod.powers; +import basemod.helpers.CardModifierManager; import basemod.interfaces.CloneablePowerInterface; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.TextureAtlas; @@ -9,6 +10,9 @@ import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.localization.PowerStrings; import com.megacrit.cardcrawl.powers.AbstractPower; +import expansioncontent.actions.EchoACardAction; +import expansioncontent.cardmods.EtherealMod; +import expansioncontent.cardmods.ExhaustMod; import sneckomod.OffclassHelper; import sneckomod.SneckoMod; import downfall.util.TextureLoader; @@ -41,12 +45,11 @@ public UnendingSupplyPower(final int amount) { } public void atStartOfTurn() { - if (!AbstractDungeon.getMonsters().areMonstersBasicallyDead()) {// 27 - this.flash();// 28 - + if (!AbstractDungeon.getMonsters().areMonstersBasicallyDead()) { + this.flash(); ArrayList cards = OffclassHelper.getXRandomOffclassCards(this.amount); - for (AbstractCard card : cards) {// 29 - this.addToBot(new MakeTempCardInHandAction(card, 1, false));// 30 32 33 + for (AbstractCard card : cards) { + addToBot(new EchoACardAction(card, false)); } } @@ -54,7 +57,12 @@ public void atStartOfTurn() { @Override public void updateDescription() { - description = DESCRIPTIONS[0] + amount + DESCRIPTIONS[1]; + if (this.amount == 1) { + this.description = DESCRIPTIONS[1]; + } + if (this.amount != 1) { + this.description = DESCRIPTIONS[0] + this.amount + DESCRIPTIONS[2]; + } } @Override diff --git a/src/main/java/sneckomod/powers/VenomDebuff.java b/src/main/java/sneckomod/powers/VenomDebuff.java new file mode 100644 index 000000000..734659643 --- /dev/null +++ b/src/main/java/sneckomod/powers/VenomDebuff.java @@ -0,0 +1,77 @@ +package sneckomod.powers; + +import basemod.interfaces.CloneablePowerInterface; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.TextureAtlas; +import com.evacipated.cardcrawl.mod.stslib.powers.interfaces.HealthBarRenderPower; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.DamageAction; +import com.megacrit.cardcrawl.cards.DamageInfo; +import basemod.interfaces.CloneablePowerInterface; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.TextureAtlas; +import com.evacipated.cardcrawl.mod.stslib.powers.interfaces.OnReceivePowerPower; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.RemoveSpecificPowerAction; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.PowerStrings; +import com.megacrit.cardcrawl.monsters.beyond.Transient; +import com.megacrit.cardcrawl.powers.AbstractPower; +import com.megacrit.cardcrawl.powers.StrengthPower; +import hermit.HermitMod; +import hermit.util.TextureLoader; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.PowerStrings; +import com.megacrit.cardcrawl.powers.AbstractPower; +import com.megacrit.cardcrawl.rooms.AbstractRoom; + +import sneckomod.SneckoMod; + +public class VenomDebuff extends AbstractPower implements CloneablePowerInterface, OnReceivePowerPower { + public static final String POWER_ID = SneckoMod.makeID("VenomDebuff"); + + private static final Texture tex84 = TextureLoader.getTexture(SneckoMod.getModID() + "Resources/images/powers/PoisonResist84.png"); + private static final Texture tex32 = TextureLoader.getTexture(SneckoMod.getModID() + "Resources/images/powers/PoisonResist32.png"); + + private static final PowerStrings powerStrings = CardCrawlGame.languagePack.getPowerStrings(POWER_ID); + public static final String NAME = powerStrings.NAME; + public static final String[] DESCRIPTIONS = powerStrings.DESCRIPTIONS; + + public VenomDebuff(AbstractCreature owner, int amount) { + this.ID = POWER_ID; + this.name = NAME; + this.owner = owner; + this.amount = amount; + this.type = PowerType.DEBUFF; + this.region48 = new TextureAtlas.AtlasRegion(tex32, 0, 0, 32, 32); + this.region128 = new TextureAtlas.AtlasRegion(tex84, 0, 0, 84, 84); + updateDescription(); + } + + @Override + public boolean onReceivePower(AbstractPower power, AbstractCreature target, AbstractCreature source) { + if (source == AbstractDungeon.player) { + if (power.type == PowerType.DEBUFF && target == this.owner && !power.ID.equals("Shackled") && !target.hasPower("Artifact") && !(power instanceof VenomDebuff)) { + if (!((target.hasPower("Shifting") && (power instanceof StrengthPower)))) + this.addToBot(new DamageAction(owner, new DamageInfo(owner, amount, DamageInfo.DamageType.HP_LOSS), AbstractGameAction.AttackEffect.POISON)); + } + } + return true; + } + + @Override + public void updateDescription() { + description = DESCRIPTIONS[0] + amount + DESCRIPTIONS[1]; + } + + @Override + public AbstractPower makeCopy() { + return new VenomDebuff(owner, amount); + } +} diff --git a/src/main/java/sneckomod/relics/BabySnecko.java b/src/main/java/sneckomod/relics/BabySnecko.java index 9cc29fe63..9ffa6fe77 100644 --- a/src/main/java/sneckomod/relics/BabySnecko.java +++ b/src/main/java/sneckomod/relics/BabySnecko.java @@ -3,6 +3,7 @@ import basemod.abstracts.CustomRelic; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; @@ -11,6 +12,10 @@ import sneckomod.SneckoMod; import sneckomod.actions.BabySneckoAttackAction; import downfall.util.TextureLoader; +import sneckomod.actions.BabySneckoMuddleAction; +import sneckomod.actions.MuddleAction; + +import java.util.ArrayList; public class BabySnecko extends CustomRelic { @@ -18,29 +23,29 @@ public class BabySnecko extends CustomRelic { private static final Texture IMG = TextureLoader.getTexture(SneckoMod.makeRelicPath("BabySnecko.png")); private static final Texture OUTLINE = TextureLoader.getTexture(SneckoMod.makeRelicOutlinePath("BabySnecko.png")); - public CustomAnimatedNPC baby; public BabySnecko() { super(ID, IMG, OUTLINE, RelicTier.SPECIAL, LandingSound.MAGICAL); } - public void atPreBattle() { this.flash(); - this.baby = new CustomAnimatedNPC(AbstractDungeon.player.hb.cX + 230F * Settings.scale, AbstractDungeon.player.hb.cY + 130.0F * Settings.scale, "sneckomodResources/images/monsters/BabySnecko/BabySnecko.atlas", "sneckomodResources/images/monsters/BabySnecko/BabySnecko.json", "idle", false, 0); + this.baby = new CustomAnimatedNPC(AbstractDungeon.player.hb.cX + 230F * Settings.scale, AbstractDungeon.player.hb.cY + 130.0F * Settings.scale, + "sneckomodResources/images/monsters/BabySnecko/BabySnecko.atlas", + "sneckomodResources/images/monsters/BabySnecko/BabySnecko.json", "idle", false, 0); this.baby.customFlipX = true; this.baby.setTimeScale(0.9F); } - @Override public void atTurnStartPostDraw() { - super.atTurnStartPostDraw(); AbstractMonster m = AbstractDungeon.getMonsters().getRandomMonster(true); - if (m != null) { AbstractDungeon.actionManager.addToBottom(new BabySneckoAttackAction(m, this)); + AbstractDungeon.actionManager.addToBottom(new BabySneckoMuddleAction()); + // AbstractDungeon.actionManager.addToBottom(new BabySneckoMuddleAction()); + flash(); // tracking attacks } } @@ -49,7 +54,7 @@ public void onVictory() { if (this.baby != null) { this.baby.dispose(); this.baby = null; - //SlimeboundMod.logger.info("Disposing baby snecko "); + // SlimeboundMod.logger.info("Disposing baby snecko "); } } @@ -62,15 +67,12 @@ public void update() { } public void renderBaby(SpriteBatch sb) { - ////SlimeboundMod.logger.info("Rendering"); if (this.baby != null) { this.baby.render(sb); - // //SlimeboundMod.logger.info("Rendering baby snecko " + this.baby.skeleton.getX() + " " + this.baby.skeleton.getY()); } } - public String getUpdatedDescription() { return DESCRIPTIONS[0]; } -} +} \ No newline at end of file diff --git a/src/main/java/sneckomod/relics/BlankCard.java b/src/main/java/sneckomod/relics/BlankCard.java index b373444e9..f2df4baa4 100644 --- a/src/main/java/sneckomod/relics/BlankCard.java +++ b/src/main/java/sneckomod/relics/BlankCard.java @@ -1,14 +1,14 @@ package sneckomod.relics; import basemod.abstracts.CustomRelic; -import basemod.cardmods.EtherealMod; -import basemod.cardmods.ExhaustMod; -import basemod.helpers.CardModifierManager; import com.badlogic.gdx.graphics.Texture; -import com.megacrit.cardcrawl.actions.common.MakeTempCardInHandAction; import com.megacrit.cardcrawl.actions.common.RelicAboveCreatureAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.helpers.GameDictionary; +import com.megacrit.cardcrawl.helpers.PowerTip; +import com.megacrit.cardcrawl.helpers.TipHelper; +import downfall.downfallMod; import downfall.util.TextureLoader; import expansioncontent.actions.EchoACardAction; import sneckomod.SneckoMod; @@ -16,29 +16,60 @@ import java.util.ArrayList; +import static com.megacrit.cardcrawl.cards.AbstractCard.CardType.CURSE; +import static com.megacrit.cardcrawl.cards.AbstractCard.CardType.STATUS; + public class BlankCard extends CustomRelic { public static final String ID = SneckoMod.makeID("BlankCard"); private static final Texture IMG = TextureLoader.getTexture(SneckoMod.makeRelicPath("BlankCard.png")); private static final Texture OUTLINE = TextureLoader.getTexture(SneckoMod.makeRelicOutlinePath("BlankCard.png")); + public boolean activated = false; public BlankCard() { super(ID, IMG, OUTLINE, RelicTier.UNCOMMON, LandingSound.MAGICAL); + this.tips.add(new PowerTip(TipHelper.capitalize(GameDictionary.STATUS.NAMES[0]), GameDictionary.keywords.get(GameDictionary.STATUS.NAMES[0]))); + this.tips.add(new PowerTip(TipHelper.capitalize(GameDictionary.CURSE.NAMES[0]), GameDictionary.keywords.get(GameDictionary.CURSE.NAMES[0]))); } @Override public void atBattleStart() { ArrayList possCardsList = new ArrayList<>(AbstractDungeon.player.drawPile.group); - AbstractCard card2 = possCardsList.get(AbstractDungeon.cardRandomRng.random(possCardsList.size() - 1)).makeStatEquivalentCopy(); + possCardsList.removeIf(c -> (c.color == AbstractCard.CardColor.CURSE || c.type == CURSE || c.type == STATUS)); + AbstractCard card2 = possCardsList.get(AbstractDungeon.relicRng.random(possCardsList.size() - 1)).makeStatEquivalentCopy(); + // cool code that does nothing because unid cards don't exist anymore if (card2 instanceof AbstractUnknownCard) { card2 = ((AbstractUnknownCard) card2).generateFromPoolButNotIntoHand(); - } // Get one of the cards in the unknown pool instead of the Unknown card which is already free to play. + } flash(); addToBot(new RelicAboveCreatureAction(AbstractDungeon.player, this)); card2.freeToPlayOnce = true; addToBot(new EchoACardAction(card2)); } +// @Override +// public void atBattleStart() { +// activated = false; +// beginLongPulse(); +// } + +// @Override +// public void onCardDraw(AbstractCard card) { +// if (!activated) +// addToBot(new AbstractGameAction() { +// @Override +// public void update() { +// isDone = true; +// if (card.cost == 3 && !activated) { +// stopPulse(); +// flash(); +// activated = true; +// addToBot(new MuddleAction(card)); +// } +// } +// }); +// } + public String getUpdatedDescription() { return DESCRIPTIONS[0]; } diff --git a/src/main/java/sneckomod/relics/CleanMud.java b/src/main/java/sneckomod/relics/CleanMud.java index 00aeeb3ea..96d09b8e5 100644 --- a/src/main/java/sneckomod/relics/CleanMud.java +++ b/src/main/java/sneckomod/relics/CleanMud.java @@ -12,9 +12,11 @@ public class CleanMud extends CustomRelic { private static final Texture OUTLINE = TextureLoader.getTexture(SneckoMod.makeRelicOutlinePath("CleanMud.png")); public CleanMud() { - super(ID, IMG, OUTLINE, RelicTier.RARE, LandingSound.MAGICAL); + super(ID, IMG, OUTLINE, RelicTier.BOSS, LandingSound.MAGICAL); } + public void onTrigger() {this.flash();} + public String getUpdatedDescription() { return DESCRIPTIONS[0]; } diff --git a/src/main/java/sneckomod/relics/ConfusingCodex.java b/src/main/java/sneckomod/relics/ConfusingCodex.java index a774da7c0..16652a447 100644 --- a/src/main/java/sneckomod/relics/ConfusingCodex.java +++ b/src/main/java/sneckomod/relics/ConfusingCodex.java @@ -2,14 +2,20 @@ import basemod.abstracts.CustomRelic; import com.badlogic.gdx.graphics.Texture; -import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.RelicAboveCreatureAction; +import com.megacrit.cardcrawl.actions.utility.UseCardAction; +import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.VulnerablePower; import com.megacrit.cardcrawl.powers.WeakPower; import sneckomod.SneckoMod; -import sneckomod.cards.AbstractSneckoCard; import downfall.util.TextureLoader; +import sneckomod.powers.CheatPower; + +import static collector.util.Wiz.applyToEnemy; +import static collector.util.Wiz.atb; +import static sneckomod.SneckoMod.NO_TYPHOON; public class ConfusingCodex extends CustomRelic { @@ -18,20 +24,64 @@ public class ConfusingCodex extends CustomRelic { private static final Texture OUTLINE = TextureLoader.getTexture(SneckoMod.makeRelicOutlinePath("ConfusingCodex.png")); public ConfusingCodex() { - super(ID, IMG, OUTLINE, RelicTier.UNCOMMON, LandingSound.MAGICAL); + super(ID, IMG, OUTLINE, RelicTier.RARE, LandingSound.MAGICAL); + } + + //Variables + public static final int AMOUNT = 3; + + @Override + public void onEquip() { + this.counter = 0; } + + public boolean isOverflowActive(AbstractCard source) { + boolean OVERFLOW = false; + + if (source.hasTag(SneckoMod.OVERFLOW)) { + if (AbstractDungeon.player.hand.size() > 5 || (AbstractDungeon.player.hasPower(CheatPower.POWER_ID))) { + OVERFLOW = true; + } + + if (source.hasTag(NO_TYPHOON)) { + return false; + } + + if (AbstractDungeon.player.hasRelic(D8.ID)) { + D8 d8Relic = (D8) AbstractDungeon.player.getRelic(D8.ID); + if (d8Relic != null && d8Relic.card != null) { + if (d8Relic.card.uuid.equals(source.uuid)) { + OVERFLOW = true; + } + } + } + } + + return OVERFLOW; + } + + + @Override - public void atBattleStart() { - int x = AbstractSneckoCard.getRandomNum(0, 2); - if (x != 0) - for (AbstractMonster q : AbstractDungeon.getCurrRoom().monsters.monsters) { - addToBot(new ApplyPowerAction(q, AbstractDungeon.player, new WeakPower(q, x, false), x)); - addToBot(new ApplyPowerAction(q, AbstractDungeon.player, new VulnerablePower(q, x, false), x)); + public void onUseCard(AbstractCard card, UseCardAction action) { + if (!isOverflowActive(card)) { + return; + } + ++this.counter; + if (this.counter % AMOUNT == 0) { + this.counter = 0; + AbstractMonster q = AbstractDungeon.getRandomMonster(); + if (q != null) { + atb(new RelicAboveCreatureAction(q, this)); + applyToEnemy(q, new WeakPower(q, 1, false)); + applyToEnemy(q, new VulnerablePower(q, 1, false)); + flash(); // relic tracking } + } } public String getUpdatedDescription() { - return DESCRIPTIONS[0]; + return DESCRIPTIONS[0] + AMOUNT + DESCRIPTIONS[1]; } } diff --git a/src/main/java/sneckomod/relics/CrystallizedMud.java b/src/main/java/sneckomod/relics/CrystallizedMud.java index 6f631bc25..84fcfdb7a 100644 --- a/src/main/java/sneckomod/relics/CrystallizedMud.java +++ b/src/main/java/sneckomod/relics/CrystallizedMud.java @@ -12,8 +12,9 @@ public class CrystallizedMud extends CustomRelic { private static final Texture IMG = TextureLoader.getTexture(SneckoMod.makeRelicPath("CrystallizedMud.png")); private static final Texture OUTLINE = TextureLoader.getTexture(SneckoMod.makeRelicOutlinePath("CrystallizedMud.png")); + //sorry mesmerizing pendant but the people hate you and champ needs a third boss relic public CrystallizedMud() { - super(ID, IMG, OUTLINE, RelicTier.BOSS, LandingSound.MAGICAL); + super(ID, IMG, OUTLINE, RelicTier.DEPRECATED, LandingSound.MAGICAL); } public void onEquip() { @@ -24,6 +25,8 @@ public void onUnequip() { --AbstractDungeon.player.energy.energyMaster;// 42 }// 43 + public void onTrigger() {this.flash();} + public String getUpdatedDescription() { return DESCRIPTIONS[0]; } diff --git a/src/main/java/sneckomod/relics/D8.java b/src/main/java/sneckomod/relics/D8.java index 878479a35..a2b9e6973 100644 --- a/src/main/java/sneckomod/relics/D8.java +++ b/src/main/java/sneckomod/relics/D8.java @@ -1,22 +1,29 @@ package sneckomod.relics; +import awakenedOne.patches.MoonTalismanPatch; import basemod.abstracts.CustomBottleRelic; import basemod.abstracts.CustomRelic; import basemod.abstracts.CustomSavable; import com.badlogic.gdx.graphics.Texture; +import com.evacipated.cardcrawl.mod.stslib.relics.OnRemoveCardFromMasterDeckRelic; +import com.megacrit.cardcrawl.actions.common.GainBlockAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.cards.CardGroup; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.helpers.FontHelper; import com.megacrit.cardcrawl.helpers.PowerTip; +import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.rooms.AbstractRoom; +import com.megacrit.cardcrawl.vfx.cardManip.ShowCardBrieflyEffect; import sneckomod.SneckoMod; +import sneckomod.cards.TyphoonFang; import sneckomod.patches.BottledD8Patch; import downfall.util.TextureLoader; +import sneckomod.powers.CheatPower; import java.util.function.Predicate; -public class D8 extends CustomRelic implements CustomBottleRelic, CustomSavable { +public class D8 extends CustomRelic implements CustomBottleRelic, CustomSavable, OnRemoveCardFromMasterDeckRelic { public static final String ID = SneckoMod.makeID("D8"); private static final Texture IMG = TextureLoader.getTexture(SneckoMod.makeRelicPath("D8.png")); @@ -28,6 +35,21 @@ public D8() { super(ID, IMG, OUTLINE, RelicTier.SPECIAL, LandingSound.MAGICAL); } + //mystical octahedron + //todo: set variable for block gain + //oh god this will be annoying, do later + + @Override + public void onRemoveCardFromMasterDeck(AbstractCard var1) { + if (this.card != null) { + if (var1.uuid == card.uuid) { + this.flash(); + this.grayscale = true; + setDescriptionAfterLoading(); + } + } + } + @Override public Integer onSave() { return AbstractDungeon.player.masterDeck.group.indexOf(card); @@ -58,7 +80,7 @@ public void onEquip() { AbstractDungeon.getCurrRoom().phase = AbstractRoom.RoomPhase.INCOMPLETE; CardGroup tmp = new CardGroup(CardGroup.CardGroupType.UNSPECIFIED); for (AbstractCard c : CardGroup.getGroupWithoutBottledCards(AbstractDungeon.player.masterDeck).group) { - if (c.hasTag(SneckoMod.RNG)) { + if (c.hasTag(SneckoMod.OVERFLOW)) { tmp.addToTop(c); } } @@ -67,6 +89,21 @@ public void onEquip() { false, false, false, false); } + @Override + public void onPlayCard(AbstractCard card, AbstractMonster m) { + if (BottledD8Patch.inD8.get(card)) { + if (!(card instanceof TyphoonFang && card.purgeOnUse)) { + addToBot(new GainBlockAction(AbstractDungeon.player, 4)); + this.flash(); //block tracking + } + } + if (BottledD8Patch.inD8.get(card) && AbstractDungeon.player.hand.size() <= 5 && !(AbstractDungeon.player.hasPower(CheatPower.POWER_ID))) { + if (!(card instanceof TyphoonFang && card.purgeOnUse)) { + this.flash(); //overflow tracking + } + } + } + @Override public void onUnequip() { if (card != null) { @@ -86,23 +123,56 @@ public void update() { card = AbstractDungeon.gridSelectScreen.selectedCards.get(0); BottledD8Patch.inD8.set(card, true); AbstractDungeon.getCurrRoom().phase = AbstractRoom.RoomPhase.COMPLETE; - AbstractDungeon.gridSelectScreen.selectedCards.clear(); + + AbstractDungeon.topLevelEffects.add(new ShowCardBrieflyEffect(card.makeStatEquivalentCopy())); + setDescriptionAfterLoading(); } } @Override public Predicate isOnCard() { - return BottledD8Patch.inD8::get; } - private void setDescriptionAfterLoading() { - this.description = this.DESCRIPTIONS[2] + FontHelper.colorString(this.card.name, "y") + this.DESCRIPTIONS[3]; - tips.clear(); - tips.add(new PowerTip(name, description)); - initializeTips(); + public void setDescriptionAfterLoading() { + boolean cardExists = false; + + if (card != null) { + for (AbstractCard c : AbstractDungeon.player.masterDeck.group) { + if (c.uuid == card.uuid) { + cardExists = true; + break; + } + } + } + + if (!cardExists) { + tips.clear(); + this.description = this.DESCRIPTIONS[4]; + this.grayscale = true; + initializeTips(); + } + + if (cardExists) { + this.description = FontHelper.colorString(this.card.name, "y") + this.DESCRIPTIONS[2]; + tips.clear(); + tips.add(new PowerTip(name, description)); + initializeTips(); + this.grayscale = false; + } + } + + public boolean canSpawn() { + + for (AbstractCard c : CardGroup.getGroupWithoutBottledCards(AbstractDungeon.player.masterDeck).group) { + if (c.hasTag(SneckoMod.OVERFLOW)) { + return true; + } + } + + return false; } public String getUpdatedDescription() { diff --git a/src/main/java/sneckomod/relics/LoadedDie.java b/src/main/java/sneckomod/relics/LoadedDie.java index e1a91ac83..695b07c9f 100644 --- a/src/main/java/sneckomod/relics/LoadedDie.java +++ b/src/main/java/sneckomod/relics/LoadedDie.java @@ -2,6 +2,8 @@ import basemod.abstracts.CustomRelic; import com.badlogic.gdx.graphics.Texture; +import com.megacrit.cardcrawl.actions.common.GainBlockAction; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import sneckomod.SneckoMod; import downfall.util.TextureLoader; @@ -11,11 +13,20 @@ public class LoadedDie extends CustomRelic { private static final Texture IMG = TextureLoader.getTexture(SneckoMod.makeRelicPath("LoadedDie.png")); private static final Texture OUTLINE = TextureLoader.getTexture(SneckoMod.makeRelicOutlinePath("LoadedDie.png")); + //variables + private static final int BLOCK = 1; + public LoadedDie() { - super(ID, IMG, OUTLINE, RelicTier.COMMON, LandingSound.MAGICAL); + super(ID, IMG, OUTLINE, RelicTier.COMMON, LandingSound.SOLID); + } + + public void onTrigger() { + this.flash(); + + addToBot(new GainBlockAction(AbstractDungeon.player, BLOCK)); } public String getUpdatedDescription() { - return DESCRIPTIONS[0]; + return DESCRIPTIONS[0] + BLOCK + DESCRIPTIONS[1]; } } diff --git a/src/main/java/sneckomod/relics/RareBoosterPack.java b/src/main/java/sneckomod/relics/RareBoosterPack.java index 24bd0cb08..1542aa67b 100644 --- a/src/main/java/sneckomod/relics/RareBoosterPack.java +++ b/src/main/java/sneckomod/relics/RareBoosterPack.java @@ -2,15 +2,20 @@ import basemod.abstracts.CustomRelic; import com.badlogic.gdx.graphics.Texture; -import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; -import com.megacrit.cardcrawl.vfx.cardManip.ShowCardAndObtainEffect; +import com.megacrit.cardcrawl.helpers.PowerTip; +import com.megacrit.cardcrawl.relics.AbstractRelic; +import com.megacrit.cardcrawl.relics.FrozenEgg2; +import com.megacrit.cardcrawl.relics.MoltenEgg2; +import com.megacrit.cardcrawl.relics.ToxicEgg2; import sneckomod.SneckoMod; -import sneckomod.cards.unknowns.UnknownRareAttack; -import sneckomod.cards.unknowns.UnknownRarePower; -import sneckomod.cards.unknowns.UnknownRareSkill; import downfall.util.TextureLoader; +import java.util.ArrayList; + +import static sneckomod.util.ColorfulCardReward.TEXT; + public class RareBoosterPack extends CustomRelic { public static final String ID = SneckoMod.makeID("RareBoosterPack"); @@ -23,14 +28,27 @@ public RareBoosterPack() { @Override public void onEquip() { - float displayCount = 0.0F; - AbstractDungeon.topLevelEffectsQueue.add(new ShowCardAndObtainEffect(new UnknownRareAttack(), (float) Settings.WIDTH / 3.0F + displayCount, (float) Settings.HEIGHT / 2.0F, false));// 87 89 - displayCount += (float) Settings.WIDTH / 6.0F;// 93 - AbstractDungeon.topLevelEffectsQueue.add(new ShowCardAndObtainEffect(new UnknownRareSkill(), (float) Settings.WIDTH / 3.0F + displayCount, (float) Settings.HEIGHT / 2.0F, false));// 87 89 - displayCount += (float) Settings.WIDTH / 6.0F;// 93 - AbstractDungeon.topLevelEffectsQueue.add(new ShowCardAndObtainEffect(new UnknownRarePower(), (float) Settings.WIDTH / 3.0F + displayCount, (float) Settings.HEIGHT / 2.0F, false));// 87 89 + ArrayList cardsToReward = new ArrayList<>(); + while (cardsToReward.size() < 3) { + AbstractCard newCard = SneckoMod.getOffClassCardMatchingPredicate(c -> + c.rarity == AbstractCard.CardRarity.RARE); + + for (AbstractRelic r : AbstractDungeon.player.relics) { + r.onPreviewObtainCard(newCard); + } + + if (!isDuplicate(cardsToReward, newCard)) { + cardsToReward.add(newCard.makeCopy()); + } + } + AbstractDungeon.cardRewardScreen.open(cardsToReward, null, TEXT[2]); } + private boolean isDuplicate(ArrayList cardsList, AbstractCard card) { + return cardsList.stream().anyMatch(c -> c.cardID.equals(card.cardID)); + } + + @Override public String getUpdatedDescription() { return DESCRIPTIONS[0]; } diff --git a/src/main/java/sneckomod/relics/SleevedAce.java b/src/main/java/sneckomod/relics/SleevedAce.java index 18069e028..0df097549 100644 --- a/src/main/java/sneckomod/relics/SleevedAce.java +++ b/src/main/java/sneckomod/relics/SleevedAce.java @@ -2,13 +2,16 @@ import basemod.abstracts.CustomRelic; import basemod.helpers.CardModifierManager; +import basemod.helpers.CardPowerTip; import com.badlogic.gdx.graphics.Texture; import com.megacrit.cardcrawl.actions.common.MakeTempCardInHandAction; import com.megacrit.cardcrawl.cards.AbstractCard; import expansioncontent.cardmods.RetainCardMod; +import guardian.cards.GearUp; import sneckomod.SneckoMod; import sneckomod.cards.Cheat; import downfall.util.TextureLoader; +import sneckomod.cards.MarkedCard; public class SleevedAce extends CustomRelic { @@ -17,13 +20,13 @@ public class SleevedAce extends CustomRelic { private static final Texture OUTLINE = TextureLoader.getTexture(SneckoMod.makeRelicOutlinePath("SleevedAce.png")); public SleevedAce() { - super(ID, IMG, OUTLINE, RelicTier.SHOP, LandingSound.MAGICAL); + super(ID, IMG, OUTLINE, RelicTier.UNCOMMON, LandingSound.MAGICAL); + this.tips.add(new CardPowerTip(new MarkedCard())); } @Override public void atBattleStart() { - AbstractCard q = new Cheat(); - CardModifierManager.addModifier(q, new RetainCardMod()); + AbstractCard q = new MarkedCard(); addToBot(new MakeTempCardInHandAction(q)); } diff --git a/src/main/java/sneckomod/relics/SneckoBoss.java b/src/main/java/sneckomod/relics/SneckoBoss.java index e15874b96..730c85c50 100644 --- a/src/main/java/sneckomod/relics/SneckoBoss.java +++ b/src/main/java/sneckomod/relics/SneckoBoss.java @@ -6,16 +6,17 @@ import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.cards.CardGroup; import com.megacrit.cardcrawl.core.CardCrawlGame; -import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.helpers.CardLibrary; import com.megacrit.cardcrawl.helpers.PowerTip; +import com.megacrit.cardcrawl.relics.PrismaticShard; import com.megacrit.cardcrawl.rooms.AbstractRoom; -import com.megacrit.cardcrawl.vfx.cardManip.ShowCardAndObtainEffect; import downfall.util.TextureLoader; import sneckomod.SneckoMod; import sneckomod.cards.unknowns.UnknownClass; import sneckomod.util.ColorfulCardReward; +import sneckomod.util.ColorfulRareReward; +import sneckomod.util.ColorfulUncommonUpgradedReward; public class SneckoBoss extends CustomRelic implements CustomSavable { @@ -23,81 +24,77 @@ public class SneckoBoss extends CustomRelic implements CustomSavable q instanceof UnknownClass && ((UnknownClass) q).myColor != myColor); - } @Override public void update() { super.update(); if (!AbstractDungeon.gridSelectScreen.selectedCards.isEmpty() && !chosenInGeneral) { chosenInGeneral = true; - AbstractCard c = AbstractDungeon.gridSelectScreen.selectedCards.get(0); - myColor = ((UnknownClass) c).myColor; - AbstractDungeon.effectList.add(new ShowCardAndObtainEffect(c.makeCopy(), Settings.WIDTH * 0.2F, Settings.HEIGHT / 2F)); - AbstractDungeon.effectList.add(new ShowCardAndObtainEffect(c.makeCopy(), Settings.WIDTH * 0.35F, Settings.HEIGHT / 2F)); - AbstractDungeon.effectList.add(new ShowCardAndObtainEffect(c.makeCopy(), Settings.WIDTH * 0.5F, Settings.HEIGHT / 2F)); - AbstractDungeon.effectList.add(new ShowCardAndObtainEffect(c.makeCopy(), Settings.WIDTH * 0.65F, Settings.HEIGHT / 2F)); - AbstractDungeon.effectList.add(new ShowCardAndObtainEffect(c.makeCopy(), Settings.WIDTH * 0.8F, Settings.HEIGHT / 2F)); - updateCardPools(); - AbstractDungeon.getCurrRoom().phase = AbstractRoom.RoomPhase.COMPLETE; - AbstractDungeon.gridSelectScreen.selectedCards.clear(); - this.description = getUpdatedDescription(); - this.tips.clear(); - this.tips.add(new PowerTip(this.name, this.description)); + AbstractCard selectedCardsnek = AbstractDungeon.gridSelectScreen.selectedCards.get(0); + if (selectedCardsnek instanceof UnknownClass) { + myColor = ((UnknownClass) selectedCardsnek).myColor; + createColorSpecificRewards(); + AbstractDungeon.getCurrRoom().phase = AbstractRoom.RoomPhase.COMPLETE; + AbstractDungeon.gridSelectScreen.selectedCards.clear(); + updateDescriptionAndTips(); + } + } + } + + private void createColorSpecificRewards() { + // Add 3 upgraded uncommon rewards + for (int i = 0; i < 3; i++) { + AbstractDungeon.getCurrRoom().rewards.add(new ColorfulUncommonUpgradedReward(myColor)); } + + // Add 2 rare rewards + for (int i = 0; i < 2; i++) { + AbstractDungeon.getCurrRoom().rewards.add(new ColorfulRareReward(myColor)); + } + + AbstractDungeon.combatRewardScreen.open(); + AbstractDungeon.combatRewardScreen.rewards.remove(AbstractDungeon.combatRewardScreen.rewards.size()-1); + (AbstractDungeon.getCurrRoom()).rewardPopOutTimer = 0.05F; + } + + private void updateDescriptionAndTips() { + this.description = getUpdatedDescription(); + this.tips.clear(); + this.tips.add(new PowerTip(this.name, this.description)); } + @Override public String getUpdatedDescription() { if (myColor != null) { return DESCRIPTIONS[1] + SneckoMod.getClassFromColor(myColor) + DESCRIPTIONS[2] + SneckoMod.getClassFromColor(myColor) + DESCRIPTIONS[3]; @@ -111,11 +108,9 @@ public AbstractCard.CardColor onSave() { } @Override - public void onLoad(AbstractCard.CardColor s) { - myColor = s; - this.description = getUpdatedDescription(); - this.tips.clear(); - this.tips.add(new PowerTip(this.name, this.description)); + public void onLoad(AbstractCard.CardColor color) { + myColor = color; + updateDescriptionAndTips(); } @Override diff --git a/src/main/java/sneckomod/relics/SneckoCommon.java b/src/main/java/sneckomod/relics/SneckoCommon.java index a7e69280e..5c60f98ae 100644 --- a/src/main/java/sneckomod/relics/SneckoCommon.java +++ b/src/main/java/sneckomod/relics/SneckoCommon.java @@ -1,106 +1,47 @@ package sneckomod.relics; import basemod.abstracts.CustomRelic; -import basemod.abstracts.CustomSavable; import com.badlogic.gdx.graphics.Texture; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.cards.CardGroup; import com.megacrit.cardcrawl.core.CardCrawlGame; -import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.helpers.CardLibrary; -import com.megacrit.cardcrawl.helpers.PowerTip; +import com.megacrit.cardcrawl.relics.AbstractRelic; +import com.megacrit.cardcrawl.relics.FrozenEgg2; +import com.megacrit.cardcrawl.relics.MoltenEgg2; +import com.megacrit.cardcrawl.relics.ToxicEgg2; import com.megacrit.cardcrawl.rooms.AbstractRoom; -import com.megacrit.cardcrawl.vfx.cardManip.ShowCardAndObtainEffect; +import downfall.util.TextureLoader; +import guardian.rewards.GemRewardButRelicRng; import sneckomod.SneckoMod; import sneckomod.cards.unknowns.UnknownClass; -import downfall.util.TextureLoader; +import sneckomod.util.ColorfulPowersReward; -public class SneckoCommon extends CustomRelic implements CustomSavable { +import java.util.ArrayList; +import static sneckomod.util.ColorfulCardReward.TEXT; + +public class SneckoCommon extends CustomRelic { public static final String ID = SneckoMod.makeID("SneckoCommon"); + private static final Texture IMG = TextureLoader.getTexture(SneckoMod.makeRelicPath("SealOfApproval.png")); + private static final Texture OUTLINE = TextureLoader.getTexture(SneckoMod.makeRelicOutlinePath("SealOfApproval.png")); public SneckoCommon() { - super(ID, IMG, OUTLINE, RelicTier.COMMON, LandingSound.MAGICAL); + super(ID, IMG, OUTLINE, AbstractRelic.RelicTier.COMMON, AbstractRelic.LandingSound.MAGICAL); } - private boolean chosenInGeneral = true; - - @Override public void onEquip() { - if (SneckoBoss.myColor != null && AbstractDungeon.player.hasRelic(SneckoBoss.ID)) { // already got Lucky Horseshoe - for (AbstractCard c : CardLibrary.getAllCards()) { - if (c instanceof UnknownClass && SneckoBoss.myColor == ((UnknownClass) c).myColor) { - AbstractDungeon.effectList.add(new ShowCardAndObtainEffect(c.makeCopy(), Settings.WIDTH / 2F, Settings.HEIGHT / 2F)); - } - } - } else { - chosenInGeneral = false; - if (AbstractDungeon.isScreenUp) { - AbstractDungeon.dynamicBanner.hide(); - AbstractDungeon.overlayMenu.cancelButton.hide(); - AbstractDungeon.previousScreen = AbstractDungeon.screen; - } - - AbstractDungeon.getCurrRoom().phase = AbstractRoom.RoomPhase.INCOMPLETE; - CardGroup c = new CardGroup(CardGroup.CardGroupType.UNSPECIFIED); - for (AbstractCard q : CardLibrary.getAllCards()) { - if (q instanceof UnknownClass) { - if (SneckoMod.validColors.contains(((UnknownClass) q).myColor) || SneckoMod.pureSneckoMode) { - c.addToTop(q.makeCopy()); - } - } - } - if (SneckoMod.pureSneckoMode) { - c.shuffle(); - CardGroup r = new CardGroup(CardGroup.CardGroupType.UNSPECIFIED); - for (int i = 0; i < 3; i++) { - r.addToTop(c.group.get(i)); - } - AbstractDungeon.gridSelectScreen.open(r, 1, false, CardCrawlGame.languagePack.getUIString("bronze:MiscStrings").TEXT[8]); - } else - AbstractDungeon.gridSelectScreen.open(c, 1, false, CardCrawlGame.languagePack.getUIString("bronze:MiscStrings").TEXT[8]); - } - + AbstractDungeon.getCurrRoom().rewards.add(new ColorfulPowersReward()); + AbstractDungeon.combatRewardScreen.open(this.DESCRIPTIONS[1]); + AbstractDungeon.getCurrRoom().rewardPopOutTimer = 0.0F; + AbstractDungeon.combatRewardScreen.rewards.remove(AbstractDungeon.combatRewardScreen.rewards.size()-1); } - @Override - public void update() { - super.update(); - if (!AbstractDungeon.gridSelectScreen.selectedCards.isEmpty() && !chosenInGeneral) { - chosenInGeneral = true; - AbstractCard c = AbstractDungeon.gridSelectScreen.selectedCards.get(0); - SneckoBoss.myColor = ((UnknownClass)c).myColor; - AbstractDungeon.effectList.add(new ShowCardAndObtainEffect(c.makeCopy(), Settings.WIDTH / 2F, Settings.HEIGHT / 2F)); - SneckoBoss.updateCardPools(); - AbstractDungeon.getCurrRoom().phase = AbstractRoom.RoomPhase.COMPLETE; - AbstractDungeon.gridSelectScreen.selectedCards.clear(); - this.description = getUpdatedDescription(); this.tips.clear(); - this.tips.add(new PowerTip(this.name, this.description)); - } - } public String getUpdatedDescription() { - if (SneckoBoss.myColor != null) { - return DESCRIPTIONS[1] + SneckoMod.getClassFromColor(SneckoBoss.myColor) + DESCRIPTIONS[2]; - } - return DESCRIPTIONS[0]; - } - - @Override - public boolean canSpawn() { - return !AbstractDungeon.player.hasRelic(SneckoBoss.ID); - } - - @Override - public AbstractCard.CardColor onSave() { - return SneckoBoss.myColor; - } - - @Override - public void onLoad(AbstractCard.CardColor s) { - SneckoBoss.myColor = s; + return this.DESCRIPTIONS[0]; } } diff --git a/src/main/java/sneckomod/relics/SneckoSoul.java b/src/main/java/sneckomod/relics/SneckoSoul.java index 0158ab474..04ef46c4e 100644 --- a/src/main/java/sneckomod/relics/SneckoSoul.java +++ b/src/main/java/sneckomod/relics/SneckoSoul.java @@ -1,14 +1,14 @@ package sneckomod.relics; import basemod.abstracts.CustomRelic; +import basemod.helpers.CardPowerTip; import com.badlogic.gdx.graphics.Texture; -import com.megacrit.cardcrawl.actions.common.DrawCardAction; -import com.megacrit.cardcrawl.actions.common.GainEnergyAction; -import com.megacrit.cardcrawl.actions.utility.UseCardAction; -import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.actions.common.MakeTempCardInHandAction; +import com.megacrit.cardcrawl.actions.common.RelicAboveCreatureAction; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import sneckomod.SneckoMod; import downfall.util.TextureLoader; +import sneckomod.cards.SoulRoll; public class SneckoSoul extends CustomRelic { @@ -18,22 +18,13 @@ public class SneckoSoul extends CustomRelic { public SneckoSoul() { super(ID, IMG, OUTLINE, RelicTier.STARTER, LandingSound.MAGICAL); + tips.add(new CardPowerTip(new SoulRoll())); } + @Override public void atBattleStart() { - this.grayscale = false; - } - - public void onVictory() { - grayscale = false; - } - - public void onUseCard(AbstractCard c, UseCardAction action) { - if (!grayscale && c.color != AbstractDungeon.player.getCardColor()) { - addToBot(new DrawCardAction(1)); - addToBot(new GainEnergyAction(1)); - grayscale = true; - } + this.addToTop(new RelicAboveCreatureAction(AbstractDungeon.player, this)); + this.addToTop(new MakeTempCardInHandAction(new SoulRoll(), 1, false)); } public String getUpdatedDescription() { diff --git a/src/main/java/sneckomod/relics/SneckoTalon.java b/src/main/java/sneckomod/relics/SneckoTalon.java index 8dae83bdd..1125ba373 100644 --- a/src/main/java/sneckomod/relics/SneckoTalon.java +++ b/src/main/java/sneckomod/relics/SneckoTalon.java @@ -26,16 +26,18 @@ public void atTurnStartPostDraw() { @Override public void update() { isDone = true; - int x = 0; - for (AbstractCard q : AbstractDungeon.player.hand.group) { - if (!q.freeToPlay()) - if (q.costForTurn > x) - x = q.costForTurn; - } + //old code when it hit highest cost card + //int x = 0; + //for (AbstractCard q : AbstractDungeon.player.hand.group) { + // if (!q.freeToPlay() && !q.freeToPlayOnce) + // if (q.costForTurn > 0) + // x = q.costForTurn; + //} + ArrayList possCardsList = new ArrayList<>(); for (AbstractCard q : AbstractDungeon.player.hand.group) { - if (!q.freeToPlay()) - if (q.costForTurn == x) + if (!q.freeToPlay() && !q.freeToPlayOnce) + if (q.costForTurn > 0) possCardsList.add(q); } if (!possCardsList.isEmpty()) { @@ -52,4 +54,4 @@ public void update() { public String getUpdatedDescription() { return DESCRIPTIONS[0]; } -} +} \ No newline at end of file diff --git a/src/main/java/sneckomod/relics/SuperSneckoEye.java b/src/main/java/sneckomod/relics/SuperSneckoEye.java index 8fab0738f..12c1574c0 100644 --- a/src/main/java/sneckomod/relics/SuperSneckoEye.java +++ b/src/main/java/sneckomod/relics/SuperSneckoEye.java @@ -4,6 +4,7 @@ import com.badlogic.gdx.graphics.Texture; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.GainEnergyAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.powers.ConfusionPower; @@ -11,6 +12,8 @@ import downfall.util.TextureLoader; import sneckomod.SneckoMod; +import static hermit.util.Wiz.atb; + public class SuperSneckoEye extends CustomRelic { public static final String ID = SneckoMod.makeID("SuperSneckoEye"); @@ -19,7 +22,7 @@ public class SuperSneckoEye extends CustomRelic { public boolean activated = false; private boolean added_hand_size = false; public SuperSneckoEye() { - super(ID, IMG, OUTLINE, RelicTier.UNCOMMON, LandingSound.MAGICAL); + super(ID, IMG, OUTLINE, RelicTier.DEPRECATED, LandingSound.MAGICAL); } @Override @@ -43,35 +46,27 @@ public void obtain() { } } - @Override - public void onCardDraw(AbstractCard card) { - if (!activated) - addToBot(new AbstractGameAction() { - @Override - public void update() { - isDone = true; - if (card.cost == 3 && !activated) { - stopPulse(); - flash(); - activated = true; - card.cost = 0; - card.costForTurn = card.cost; - card.isCostModified = true; - card.freeToPlayOnce = false; - } + public void onEquip() { + if (AbstractDungeon.player.hasRelic(SneckoEye.ID)) { + for (int i = 0; i < AbstractDungeon.player.relics.size(); ++i) { + if (AbstractDungeon.player.relics.get(i).relicId.equals(SneckoEye.ID)) { + instantObtain(AbstractDungeon.player, i, true); + break; } - }); - } + } + } else { + super.obtain(); + } + - public void onEquip() { if(!added_hand_size) { - AbstractDungeon.player.masterHandSize += 2; + AbstractDungeon.player.masterHandSize += 4; added_hand_size = true; } } public void onUnequip() { - AbstractDungeon.player.masterHandSize -= 2; + AbstractDungeon.player.masterHandSize -= 4; } public void atPreBattle() { diff --git a/src/main/java/sneckomod/relics/SuperSneckoSoul.java b/src/main/java/sneckomod/relics/SuperSneckoSoul.java index 9f29c4fc4..8e377037a 100644 --- a/src/main/java/sneckomod/relics/SuperSneckoSoul.java +++ b/src/main/java/sneckomod/relics/SuperSneckoSoul.java @@ -1,16 +1,15 @@ package sneckomod.relics; import basemod.abstracts.CustomRelic; +import basemod.helpers.CardPowerTip; import com.badlogic.gdx.graphics.Texture; -import com.megacrit.cardcrawl.actions.common.DrawCardAction; -import com.megacrit.cardcrawl.actions.common.GainEnergyAction; -import com.megacrit.cardcrawl.actions.utility.UseCardAction; -import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.actions.common.MakeTempCardInHandAction; +import com.megacrit.cardcrawl.actions.common.RelicAboveCreatureAction; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; -import com.megacrit.cardcrawl.monsters.AbstractMonster; import sneckomod.SneckoMod; -import sneckomod.cards.unknowns.AbstractUnknownCard; +import sneckomod.actions.SuperSneckoSoulAction; import downfall.util.TextureLoader; +import sneckomod.cards.SoulRoll; public class SuperSneckoSoul extends CustomRelic { @@ -20,21 +19,34 @@ public class SuperSneckoSoul extends CustomRelic { public SuperSneckoSoul() { super(ID, IMG, OUTLINE, RelicTier.BOSS, LandingSound.MAGICAL); + this.counter = 0; + tips.add(new CardPowerTip(new SoulRoll())); } - public void atTurnStart() { - grayscale = false; + @Override + public void atBattleStart() { + this.counter = 0; } + @Override public void onVictory() { - grayscale = false; + this.counter = 0; } - public void onUseCard(AbstractCard c, UseCardAction action) { - if (!grayscale && c.color != AbstractDungeon.player.getCardColor()) { - addToTop(new GainEnergyAction(1)); - grayscale = true; + @Override + public void atTurnStartPostDraw() { + if (this.counter == 2) { + this.counter = 0; + } + if (this.counter == 0) { + this.addToTop(new MakeTempCardInHandAction(new SoulRoll(), 1, false)); + flash(); } + if (this.counter != 0) { + AbstractDungeon.actionManager.addToBottom(new SuperSneckoSoulAction()); + } + + ++this.counter; } @Override @@ -60,5 +72,4 @@ public boolean canSpawn() { public String getUpdatedDescription() { return DESCRIPTIONS[0]; } - } diff --git a/src/main/java/sneckomod/relics/UnknownEgg.java b/src/main/java/sneckomod/relics/UnknownEgg.java index f85ad3cbb..4fc10fe21 100644 --- a/src/main/java/sneckomod/relics/UnknownEgg.java +++ b/src/main/java/sneckomod/relics/UnknownEgg.java @@ -6,11 +6,16 @@ import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.rewards.RewardItem; +import com.megacrit.cardcrawl.vfx.UpgradeShineEffect; +import com.megacrit.cardcrawl.vfx.cardManip.ShowCardBrieflyEffect; +import downfall.util.TextureLoader; import sneckomod.SneckoMod; import sneckomod.cards.unknowns.AbstractUnknownCard; -import downfall.util.TextureLoader; +import java.util.ArrayList; +import java.util.Collections; import java.util.Iterator; +import java.util.Random; public class UnknownEgg extends CustomRelic { @@ -23,37 +28,61 @@ public UnknownEgg() { } public void onEquip() { - Iterator var1 = AbstractDungeon.combatRewardScreen.rewards.iterator();// 22 + ArrayList upgradableCards = new ArrayList(); + Iterator var2 = AbstractDungeon.player.masterDeck.group.iterator(); - while (true) { - RewardItem reward; - do { - if (!var1.hasNext()) { - return;// 29 - } + while (var2.hasNext()) { + AbstractCard c = (AbstractCard) var2.next(); + if (c.canUpgrade() && (c.color != AbstractDungeon.player.getCardColor())) { + upgradableCards.add(c); + } + } - reward = (RewardItem) var1.next(); - } while (reward.cards == null);// 23 + Collections.shuffle(upgradableCards, new Random(AbstractDungeon.relicRng.randomLong())); + if (!upgradableCards.isEmpty()) { + if (upgradableCards.size() == 1) { + ((AbstractCard) upgradableCards.get(0)).upgrade(); + AbstractDungeon.player.bottledCardUpgradeCheck((AbstractCard) upgradableCards.get(0)); + AbstractDungeon.topLevelEffects.add(new ShowCardBrieflyEffect(((AbstractCard) upgradableCards.get(0)).makeStatEquivalentCopy())); + AbstractDungeon.topLevelEffects.add(new UpgradeShineEffect((float) Settings.WIDTH / 2.0F, (float) Settings.HEIGHT / 2.0F)); + } else { + ((AbstractCard) upgradableCards.get(0)).upgrade(); + ((AbstractCard) upgradableCards.get(1)).upgrade(); + AbstractDungeon.player.bottledCardUpgradeCheck((AbstractCard) upgradableCards.get(0)); + AbstractDungeon.player.bottledCardUpgradeCheck((AbstractCard) upgradableCards.get(1)); + AbstractDungeon.topLevelEffects.add(new ShowCardBrieflyEffect(((AbstractCard) upgradableCards.get(0)).makeStatEquivalentCopy(), (float) Settings.WIDTH / 2.0F - AbstractCard.IMG_WIDTH / 2.0F - 20.0F * Settings.scale, (float) Settings.HEIGHT / 2.0F)); + AbstractDungeon.topLevelEffects.add(new ShowCardBrieflyEffect(((AbstractCard) upgradableCards.get(1)).makeStatEquivalentCopy(), (float) Settings.WIDTH / 2.0F + AbstractCard.IMG_WIDTH / 2.0F + 20.0F * Settings.scale, (float) Settings.HEIGHT / 2.0F)); + AbstractDungeon.topLevelEffects.add(new UpgradeShineEffect((float) Settings.WIDTH / 2.0F, (float) Settings.HEIGHT / 2.0F)); + } + } + Iterator rewardIterator = AbstractDungeon.combatRewardScreen.rewards.iterator(); + + while(rewardIterator.hasNext()) + + { + RewardItem reward = rewardIterator.next(); + if (reward.cards != null) { for (AbstractCard c : reward.cards) { - this.onPreviewObtainCard(c);// 25 + this.onPreviewObtainCard(c); } } } +} public void onPreviewObtainCard(AbstractCard c) { - this.onObtainCard(c);// 33 - }// 34 + this.onObtainCard(c); + } public void onObtainCard(AbstractCard c) { - if (c instanceof AbstractUnknownCard && !c.upgraded) { + if (!c.upgraded && c.color != AbstractDungeon.player.getCardColor() || (!c.upgraded && (c instanceof AbstractUnknownCard))) { c.upgrade(); } } public boolean canSpawn() { - return Settings.isEndless || AbstractDungeon.floorNum <= 48;// 45 - } + return Settings.isEndless || AbstractDungeon.floorNum <= 48; + } //cannot appear in act 4 public String getUpdatedDescription() { return DESCRIPTIONS[0]; diff --git a/src/main/java/sneckomod/ui/LockInCampfireEffect.java b/src/main/java/sneckomod/ui/LockInCampfireEffect.java deleted file mode 100644 index e7182a951..000000000 --- a/src/main/java/sneckomod/ui/LockInCampfireEffect.java +++ /dev/null @@ -1,148 +0,0 @@ -package sneckomod.ui; - -import com.badlogic.gdx.Gdx; -import com.badlogic.gdx.graphics.Color; -import com.badlogic.gdx.graphics.g2d.SpriteBatch; -import com.badlogic.gdx.math.Interpolation; -import com.megacrit.cardcrawl.cards.AbstractCard; -import com.megacrit.cardcrawl.cards.CardGroup; -import com.megacrit.cardcrawl.cards.colorless.Madness; -import com.megacrit.cardcrawl.core.CardCrawlGame; -import com.megacrit.cardcrawl.core.Settings; -import com.megacrit.cardcrawl.dungeons.AbstractDungeon; -import com.megacrit.cardcrawl.helpers.CardLibrary; -import com.megacrit.cardcrawl.helpers.ImageMaster; -import com.megacrit.cardcrawl.localization.UIStrings; -import com.megacrit.cardcrawl.monsters.city.Snecko; -import com.megacrit.cardcrawl.random.Random; -import com.megacrit.cardcrawl.rooms.AbstractRoom; -import com.megacrit.cardcrawl.rooms.RestRoom; -import com.megacrit.cardcrawl.screens.select.GridCardSelectScreen; -import com.megacrit.cardcrawl.vfx.cardManip.ShowCardAndObtainEffect; -import slimebound.SlimeboundMod; -import sneckomod.SneckoMod; -import sneckomod.cards.unknowns.AbstractUnknownCard; -import sneckomod.patches.UnknownExtraUiPatch; -import sneckomod.relics.SuperSneckoSoul; -import sneckomod.relics.UnknownEgg; - -public class LockInCampfireEffect extends com.megacrit.cardcrawl.vfx.AbstractGameEffect { - private static final UIStrings uiStrings = CardCrawlGame.languagePack.getUIString("sneckomod:LockInBonfireOptions"); - public static final String[] TEXT = uiStrings.TEXT; - - private static final float DUR = 1.5F; - private boolean openedScreen = false; - private Color screenColor = AbstractDungeon.fadeColor.cpy(); - - public static int identifyRngCount; - - public LockInCampfireEffect() { - this.duration = 1.5F; - this.screenColor.a = 0.0F; - AbstractDungeon.overlayMenu.proceedButton.hide(); - - identifyRngCount = SneckoMod.identifyRng.counter; - } - - public void update() { - if (!AbstractDungeon.isScreenUp) { - this.duration -= Gdx.graphics.getDeltaTime(); - updateBlackScreenColor(); - } - - if (!AbstractDungeon.isScreenUp) { - if (!AbstractDungeon.gridSelectScreen.selectedCards.isEmpty()) { - for (AbstractCard c : AbstractDungeon.gridSelectScreen.selectedCards) { - - AbstractDungeon.effectsQueue.add(new ShowCardAndObtainEffect(c, (float) Settings.WIDTH * .75F, (float) Settings.HEIGHT / 2.0F)); - - AbstractDungeon.topLevelEffects.add(new com.megacrit.cardcrawl.vfx.cardManip.PurgeCardEffect( - - (AbstractCard) UnknownExtraUiPatch.parentCard.get(c), Settings.WIDTH * 0.35F, Settings.HEIGHT / 2)); - - - AbstractDungeon.player.masterDeck.removeCard(UnknownExtraUiPatch.parentCard.get(c)); - - } - AbstractDungeon.gridSelectScreen.selectedCards.clear(); - ((RestRoom) AbstractDungeon.getCurrRoom()).fadeIn(); - LockInCampfireOption.usedIdentify = true; - } else if (this.openedScreen && !LockInCampfireOption.usedIdentify) { - // Cancelled - isDone = true; - ((RestRoom) AbstractDungeon.getCurrRoom()).campfireUI.reopen(); - SneckoMod.identifyRng = new Random(Settings.seed, identifyRngCount); - } - } - - if ((this.duration < 1.0F) && (!this.openedScreen)) { - this.openedScreen = true; - - CardGroup cg = new CardGroup(CardGroup.CardGroupType.UNSPECIFIED); - - for (AbstractCard c : AbstractDungeon.player.masterDeck.group) { - c.update(); - AbstractCard c2; - if (c instanceof AbstractUnknownCard){ - if (((AbstractUnknownCard) c).myList().size() > 0) { - - if (((AbstractUnknownCard)c).lastUnknownRoll != null){ - SlimeboundMod.logger.info("Detected last unknown roll!"); - c2 = ((AbstractUnknownCard)c).lastUnknownRoll.makeCopy(); - - } else { - c2 = CardLibrary.getCard(((AbstractUnknownCard) c).myList().get(SneckoMod.identifyRng.random(0, ((AbstractUnknownCard) c).myList().size() - 1))).makeCopy(); - } - - } else { - c2 = CardLibrary.getCard(Madness.ID).makeCopy(); - } - - if (c.upgraded) c2.upgrade(); - cg.addToBottom(c2); - UnknownExtraUiPatch.parentCard.set(c2, (AbstractUnknownCard)c); - - } - } - AbstractDungeon.overlayMenu.cancelButton.show(GridCardSelectScreen.TEXT[1]); - AbstractDungeon.gridSelectScreen.open(cg, 1, TEXT[3], false, false, true, false); - - } - - - if (this.duration < 0.0F) { - this.isDone = true; - if (com.megacrit.cardcrawl.rooms.CampfireUI.hidden) { - com.megacrit.cardcrawl.rooms.AbstractRoom.waitTimer = 0.0F; - if (AbstractDungeon.player.hasRelic(UnknownEgg.ID)){ - ((RestRoom) AbstractDungeon.getCurrRoom()).campfireUI.reopen(); - } else { - AbstractDungeon.getCurrRoom().phase = AbstractRoom.RoomPhase.COMPLETE; - } - ((RestRoom) AbstractDungeon.getCurrRoom()).cutFireSound(); - } - } - - } - - - private void updateBlackScreenColor() { - if (this.duration > 1.0F) { - this.screenColor.a = Interpolation.fade.apply(1.0F, 0.0F, (this.duration - 1.0F) * 2.0F); - } else { - this.screenColor.a = Interpolation.fade.apply(0.0F, 1.0F, this.duration / 1.5F); - } - } - - public void render(SpriteBatch sb) { - sb.setColor(this.screenColor); - sb.draw(ImageMaster.WHITE_SQUARE_IMG, 0.0F, 0.0F, Settings.WIDTH, Settings.HEIGHT); - - if (AbstractDungeon.screen == AbstractDungeon.CurrentScreen.GRID) { - AbstractDungeon.gridSelectScreen.render(sb); - } - } - - public void dispose() { - } -} diff --git a/src/main/java/sneckomod/ui/LockInCampfireOption.java b/src/main/java/sneckomod/ui/LockInCampfireOption.java deleted file mode 100644 index 5e395548c..000000000 --- a/src/main/java/sneckomod/ui/LockInCampfireOption.java +++ /dev/null @@ -1,97 +0,0 @@ -package sneckomod.ui; - -import basemod.ReflectionHacks; -import com.megacrit.cardcrawl.cards.AbstractCard; -import com.megacrit.cardcrawl.core.CardCrawlGame; -import com.megacrit.cardcrawl.core.Settings; -import com.megacrit.cardcrawl.dungeons.AbstractDungeon; -import com.megacrit.cardcrawl.helpers.MathHelper; -import com.megacrit.cardcrawl.localization.UIStrings; -import com.megacrit.cardcrawl.ui.campfire.AbstractCampfireOption; -import downfall.util.TextureLoader; -import sneckomod.cards.unknowns.AbstractUnknownCard; -import sneckomod.relics.UnknownEgg; - -import java.util.ArrayList; - - -public class LockInCampfireOption extends AbstractCampfireOption { - public static final String[] DESCRIPTIONS; - private static final UIStrings UI_STRINGS; - public static boolean usedIdentify = false; - - private ArrayList validCards = new ArrayList<>(); - - - static { - UI_STRINGS = CardCrawlGame.languagePack.getUIString("sneckomod:LockInBonfireOptions"); - DESCRIPTIONS = UI_STRINGS.TEXT; - - } - - //private ArrayList idleMessages; - public LockInCampfireOption() { - this.label = DESCRIPTIONS[0]; - boolean active = false; - for (AbstractCard c : AbstractDungeon.player.masterDeck.group) { - c.update(); - if (c instanceof AbstractUnknownCard){ - active = true; - } - } - - this.usable = active; - if (active) { - if (AbstractDungeon.player.hasRelic(UnknownEgg.ID)) { - this.description = DESCRIPTIONS[4]; - } else { - this.description = DESCRIPTIONS[1]; - } - } else { - this.description = DESCRIPTIONS[2]; - } - usedIdentify = false; - updateImage(active); - - } - - public void updateImage(boolean active) { - if (active) { - this.img = TextureLoader.getTexture("sneckomodResources/images/ui/lockincampfire.png"); - } else { - this.img = TextureLoader.getTexture("sneckomodResources/images/ui/lockincampfiredisabled.png"); - } - } - - @Override - public void useOption() { - if (this.usable) { - LockInCampfireEffect e = new LockInCampfireEffect(); - AbstractDungeon.effectList.add(e); - } - } - - @Override - public void update() { - float hackScale = (float) ReflectionHacks.getPrivate(this, AbstractCampfireOption.class, "scale"); - if (usable && usedIdentify) { - usable = false; - updateImage(false); - } - - if (this.hb.hovered) { - - if (!this.hb.clickStarted) { - ReflectionHacks.setPrivate(this, AbstractCampfireOption.class, "scale", MathHelper.scaleLerpSnap(hackScale, Settings.scale)); - ReflectionHacks.setPrivate(this, AbstractCampfireOption.class, "scale", MathHelper.scaleLerpSnap(hackScale, Settings.scale)); - - } else { - ReflectionHacks.setPrivate(this, AbstractCampfireOption.class, "scale", MathHelper.scaleLerpSnap(hackScale, 0.9F * Settings.scale)); - - } - } else { - ReflectionHacks.setPrivate(this, AbstractCampfireOption.class, "scale", MathHelper.scaleLerpSnap(hackScale, 0.9F * Settings.scale)); - } - super.update(); - } -} diff --git a/src/main/java/sneckomod/util/ArchetypeHelper.java b/src/main/java/sneckomod/util/ArchetypeHelper.java new file mode 100644 index 000000000..b4524eed4 --- /dev/null +++ b/src/main/java/sneckomod/util/ArchetypeHelper.java @@ -0,0 +1,225 @@ +package sneckomod.util; + +import com.evacipated.cardcrawl.modthespire.Loader; +import com.megacrit.cardcrawl.actions.common.DrawCardAction; +import com.megacrit.cardcrawl.actions.common.GainEnergyAction; +import com.megacrit.cardcrawl.actions.defect.*; +import com.megacrit.cardcrawl.actions.unique.*; +import com.megacrit.cardcrawl.actions.utility.ConditionalDrawAction; +import com.megacrit.cardcrawl.actions.watcher.CollectAction; +import com.megacrit.cardcrawl.actions.watcher.FollowUpAction; +import com.megacrit.cardcrawl.actions.watcher.InnerPeaceAction; +import com.megacrit.cardcrawl.actions.watcher.SanctityAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.blue.MachineLearning; +import com.megacrit.cardcrawl.cards.green.Reflex; +import com.megacrit.cardcrawl.cards.green.Tactician; +import com.megacrit.cardcrawl.cards.purple.DeusExMachina; +import com.megacrit.cardcrawl.cards.red.Sentinel; +import com.megacrit.cardcrawl.cards.tempCards.Miracle; +import com.megacrit.cardcrawl.helpers.GameDictionary; +import com.megacrit.cardcrawl.helpers.GameDictionary; +import com.megacrit.cardcrawl.orbs.Plasma; +import com.megacrit.cardcrawl.powers.*; +import com.megacrit.cardcrawl.powers.watcher.DevaPower; +import com.megacrit.cardcrawl.powers.watcher.RushdownPower; +import javassist.*; +import javassist.expr.ExprEditor; +import javassist.expr.FieldAccess; +import javassist.expr.NewExpr; + +import java.util.Arrays; + + +//This code is Mistress Autumn's, not mine! + +public class ArchetypeHelper { + public static Class[] energyShenaniganCards = {Sentinel.class, Tactician.class, DeusExMachina.class}; + public static Class[] energyClasses = {GainEnergyAction.class, EnergizedPower.class, EnergizedBluePower.class, Plasma.class, BerserkPower.class, DropkickAction.class, DoppelgangerAction.class, HeelHookAction.class, GainEnergyIfDiscardAction.class, AggregateEnergyAction.class, DoubleEnergyAction.class, FissionAction.class, RecycleAction.class, SunderAction.class, CollectAction.class, CollectPower.class, FollowUpAction.class, DevaPower.class}; + public static Class[] drawShenaniganCards = {Reflex.class}; + public static Class[] drawClasses = {DrawCardAction.class, DrawCardNextTurnPower.class, ConditionalDrawAction.class, DarkEmbracePower.class, DropkickAction.class, EvolvePower.class, BrutalityPower.class, CalculatedGambleAction.class, DoppelgangerAction.class, ExpertiseAction.class, ToolsOfTheTradePower.class, CompileDriverAction.class, FTLAction.class, HeatsinkPower.class, FissionAction.class, MachineLearning.class, InnerPeaceAction.class, RushdownPower.class, SanctityAction.class}; + public static String[] orbCodes = {"[E]","[R]","[B]","[G]","[W]"}; + + public static boolean hasBlockKeyword(AbstractCard card) { + return Arrays.stream(GameDictionary.BLOCK.NAMES).anyMatch(s -> card.keywords.contains(s)); + } + + public static boolean givesEnergy(AbstractCard card) { + if (Arrays.stream(orbCodes).anyMatch(s -> card.rawDescription.contains(s))) { + return true; + } + + //TO-DO should probably also check if it actually spawns the card + //this isn't our code so I'm just gonna remove the to-do, also this only ever comes up in cross-mod things + + if (card.cardsToPreview instanceof Miracle) { + return true; + } + //More annoying cases for matching are hardcoded, like Sentinel + if (Arrays.stream(energyShenaniganCards).anyMatch(clz -> clz.getName().equals(card.getClass().getName()))) { + return true; + } + final boolean[] foundEnergy = {false}; + try { + //Grab the use method + ClassPool pool = Loader.getClassPool(); + CtClass ctClass = pool.get(card.getClass().getName()); + ctClass.defrost(); + CtMethod useMethod; + try { + useMethod = ctClass.getDeclaredMethod("use"); + } catch (NotFoundException ignore) { + // This card doesn't have a `use` method, skip it + // I blame Infinite Spire + return false; + } + + useMethod.instrument(new ExprEditor() { + @Override + public void edit(NewExpr n) { + try { + //Check if the new object happens to match one of our energy related classes + CtConstructor constructor = n.getConstructor(); + CtClass activeClass = constructor.getDeclaringClass(); + + if (activeClass != null) { + CtClass[] plz = {activeClass}; + //Loop until we either run out of supers or we find a matching class + while (activeClass != null && (Arrays.stream(energyClasses).noneMatch(clz -> clz.getName().equals(plz[0].getName())))) { + activeClass = activeClass.getSuperclass(); + plz[0] = activeClass; + } + //We found it, nice + if (activeClass != null && (Arrays.stream(energyClasses).anyMatch(clz -> clz.getName().equals(plz[0].getName())))) { + foundEnergy[0] = true; + } + } + } catch (Exception ignored) {} + } + }); + } catch(Exception ignored) {} + return foundEnergy[0]; + } + + public static boolean drawsCards(AbstractCard card) { + //More annoying cases for matching are hardcoded, like Reflex + if (Arrays.stream(drawShenaniganCards).anyMatch(clz -> clz.getName().equals(card.getClass().getName()))) { + return true; + } + final boolean[] foundDrawCard = {false}; + try { + //Grab the use method + ClassPool pool = Loader.getClassPool(); + CtClass ctClass = pool.get(card.getClass().getName()); + ctClass.defrost(); + CtMethod useMethod; + try { + useMethod = ctClass.getDeclaredMethod("use"); + } catch (NotFoundException ignore) { + // This card doesn't have a `use` method, skip it + // I blame Infinite Spire + return false; + } + + useMethod.instrument(new ExprEditor() { + @Override + public void edit(NewExpr n) { + try { + //Check if the new object extends DrawCardAction or DrawCardNextTurnPower + CtConstructor constructor = n.getConstructor(); + CtClass activeClass = constructor.getDeclaringClass(); + + if (activeClass != null) { + CtClass[] plz = {activeClass}; + //Loop until we either run out of supers or we find a matching class + while (activeClass != null && (Arrays.stream(drawClasses).noneMatch(clz -> clz.getName().equals(plz[0].getName())))) { + activeClass = activeClass.getSuperclass(); + plz[0] = activeClass; + } + //We found it, nice + if (activeClass != null && (Arrays.stream(drawClasses).anyMatch(clz -> clz.getName().equals(plz[0].getName())))) { + foundDrawCard[0] = true; + } + } + } catch (Exception ignored) {} + } + }); + } catch(Exception ignored) {} + return foundDrawCard[0]; + } + + public static boolean appliesDebuff(AbstractCard card) { + //Set up some flags + final boolean[] foundDebuff = {false}; + final boolean[] foundBuff = {false}; + final boolean[] isDebuff = {false}; + try { + //Grab the use method + ClassPool pool = Loader.getClassPool(); + CtClass ctClass = pool.get(card.getClass().getName()); + ctClass.defrost(); + CtMethod useMethod; + try { + useMethod = ctClass.getDeclaredMethod("use"); + } catch (NotFoundException ignore) { + // This card doesn't have a `use` method, skip it + // I blame Infinite Spire + return false; + } + + useMethod.instrument(new ExprEditor() { + @Override + public void edit(NewExpr n) { + try { + //Check if the new object extends AbstractPower + CtConstructor constructor = n.getConstructor(); + CtClass originalClass = constructor.getDeclaringClass(); + + if (originalClass != null) { + CtClass currentClass = originalClass; + while (currentClass != null && !currentClass.getName().equals(AbstractPower.class.getName())) { + currentClass = currentClass.getSuperclass(); + } + //We found AbstractPower, good to go + if (currentClass != null && currentClass.getName().equals(AbstractPower.class.getName())) { + //Define a checker for finding the power type + ExprEditor debuffChecker = new ExprEditor() { + @Override + public void edit(FieldAccess f) { + if (f.getClassName().equals(AbstractPower.PowerType.class.getName())) { + if (f.getFieldName().equals("DEBUFF")) { + foundDebuff[0] = true; + } + if (f.getClassName().equals("BUFF")) { + foundBuff[0] = true; + } + } + } + }; + + //Check both the constructor and the updateDescription to catch things like Strength + constructor.instrument(debuffChecker); + CtMethod descriptionMethod = currentClass.getDeclaredMethod("updateDescription"); + descriptionMethod.instrument(debuffChecker); + + //If we actually found a debuff + if (foundDebuff[0]) { + //Check if it also isn't a buff sometimes + if (!foundBuff[0]) { + isDebuff[0] = true; + } else { + //Guess based on the card target + if (card.target == AbstractCard.CardTarget.ENEMY || card.target == AbstractCard.CardTarget.ALL_ENEMY) { + isDebuff[0] = true; + } + } + } + } + } + } catch (Exception ignored) {} + } + }); + } catch (Exception ignored) {} + return isDebuff[0]; + } +} \ No newline at end of file diff --git a/src/main/java/sneckomod/util/ColorfulCardReward.java b/src/main/java/sneckomod/util/ColorfulCardReward.java index 2d6cf7176..71b188bde 100644 --- a/src/main/java/sneckomod/util/ColorfulCardReward.java +++ b/src/main/java/sneckomod/util/ColorfulCardReward.java @@ -28,28 +28,57 @@ public ColorfulCardReward(AbstractCard.CardColor myColor) { public ArrayList getCards() { ArrayList cardsList = new ArrayList<>(); ArrayList listOfColoredCards = new ArrayList<>(); - for (AbstractCard q : CardLibrary.getAllCards()) { - if (q.color == myColor && q.rarity != AbstractCard.CardRarity.SPECIAL && !q.tags.contains(SneckoMod.BANNEDFORSNECKO)) { - listOfColoredCards.add(q); + + for (AbstractCard card : CardLibrary.getAllCards()) { + if (card.color == myColor && card.rarity != AbstractCard.CardRarity.SPECIAL && !card.tags.contains(SneckoMod.BANNEDFORSNECKO)) { + listOfColoredCards.add(card); } } + if (!listOfColoredCards.isEmpty()) { while (cardsList.size() < 3) { - AbstractCard q = listOfColoredCards.get(AbstractDungeon.cardRandomRng.random(0, listOfColoredCards.size() - 1)); - if (!cardListDuplicate(cardsList, q)) { - cardsList.add(q.makeCopy()); + AbstractCard card = getRandomCardByRarity(listOfColoredCards); + if (!cardListDuplicate(cardsList, card)) { + cardsList.add(card.makeCopy()); } } return cardsList; } else { + ArrayList debug = new ArrayList<>(); - for (AbstractCard q : CardLibrary.getAllCards()) { - debug.add(q.makeCopy()); + for (AbstractCard card : CardLibrary.getAllCards()) { + debug.add(card.makeCopy()); } return debug; } } + private AbstractCard getRandomCardByRarity(ArrayList cardPool) { + int roll = AbstractDungeon.cardRandomRng.random(0, 99); // 0-99 random number + AbstractCard.CardRarity rarity; + + if (roll < 50) { + rarity = AbstractCard.CardRarity.COMMON; // 50% + } else if (roll < 90) { + rarity = AbstractCard.CardRarity.UNCOMMON; // 40% + } else { + rarity = AbstractCard.CardRarity.RARE; // 10% + } + + ArrayList filteredPool = new ArrayList<>(); + for (AbstractCard card : cardPool) { + if (card.rarity == rarity) { + filteredPool.add(card); + } + } + + if (filteredPool.isEmpty()) { + return cardPool.get(AbstractDungeon.cardRandomRng.random(0, cardPool.size() - 1)); + } + + return filteredPool.get(AbstractDungeon.cardRandomRng.random(0, filteredPool.size() - 1)); + } + public static boolean cardListDuplicate(ArrayList cardsList, AbstractCard card) { for (AbstractCard alreadyHave : cardsList) { if (alreadyHave.cardID.equals(card.cardID)) { @@ -67,4 +96,4 @@ public boolean claimReward() { } return false; } -} \ No newline at end of file +} diff --git a/src/main/java/sneckomod/util/ColorfulPowersReward.java b/src/main/java/sneckomod/util/ColorfulPowersReward.java new file mode 100644 index 000000000..5dfc74e15 --- /dev/null +++ b/src/main/java/sneckomod/util/ColorfulPowersReward.java @@ -0,0 +1,65 @@ +package sneckomod.util; + +import basemod.abstracts.CustomReward; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.helpers.CardLibrary; +import downfall.downfallMod; +import downfall.patches.RewardItemTypeEnumPatch; +import downfall.util.TextureLoader; +import sneckomod.SneckoMod; + +import java.util.ArrayList; + +import static com.megacrit.cardcrawl.cards.AbstractCard.CardType.POWER; + +public class ColorfulPowersReward extends CustomReward { + public static final String ID = downfallMod.makeID("ColorfulPowersCardReward"); + public static final String[] TEXT = CardCrawlGame.languagePack.getUIString(ID).TEXT; + + + public ColorfulPowersReward() { + super(TextureLoader.getTexture("downfallResources/images/rewards/placeholder.png"), TEXT[0] + TEXT[1], RewardItemTypeEnumPatch.COLORFULCARD); + cards.clear(); + cards.addAll(getUpgradedUncommonCards()); + } + + private ArrayList getUpgradedUncommonCards() { + ArrayList selectedCards = new ArrayList<>(); + ArrayList availableCards = new ArrayList<>(); + + while (selectedCards.size() < 5) { + AbstractCard card = SneckoMod.getOffClassCardMatchingPredicate(c -> + c.type == AbstractCard.CardType.POWER && c.rarity == AbstractCard.CardRarity.UNCOMMON); + if (!isDuplicate(selectedCards, card)) { + card.upgrade(); + selectedCards.add(card); + } + } + + // Fallback in case there aren't enough unique uncommon cards of the color + return selectedCards.isEmpty() ? getDebugFallbackCards() : selectedCards; + } + + private ArrayList getDebugFallbackCards() { + ArrayList debugCards = new ArrayList<>(); + for (AbstractCard card : CardLibrary.getAllCards()) { + debugCards.add(card.makeCopy()); + } + return debugCards; + } + + private boolean isDuplicate(ArrayList cardList, AbstractCard card) { + return cardList.stream().anyMatch(c -> c.cardID.equals(card.cardID)); + } + + @Override + public boolean claimReward() { + if (AbstractDungeon.screen == AbstractDungeon.CurrentScreen.COMBAT_REWARD) { + AbstractDungeon.cardRewardScreen.open(this.cards, this, TEXT[2]); + AbstractDungeon.previousScreen = AbstractDungeon.CurrentScreen.COMBAT_REWARD; + } + return false; + } +} diff --git a/src/main/java/sneckomod/util/ColorfulRareReward.java b/src/main/java/sneckomod/util/ColorfulRareReward.java new file mode 100644 index 000000000..1f67ee8c8 --- /dev/null +++ b/src/main/java/sneckomod/util/ColorfulRareReward.java @@ -0,0 +1,75 @@ +package sneckomod.util; + +import basemod.abstracts.CustomReward; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.helpers.CardLibrary; +import downfall.downfallMod; +import downfall.patches.RewardItemTypeEnumPatch; +import downfall.util.TextureLoader; +import sneckomod.SneckoMod; + +import java.util.ArrayList; + +public class ColorfulRareReward extends CustomReward { + public static final String ID = downfallMod.makeID("ColorfulUncommonCardReward"); + public static final String[] TEXT = CardCrawlGame.languagePack.getUIString(ID).TEXT; + + private final AbstractCard.CardColor myColor; + + public ColorfulRareReward(AbstractCard.CardColor myColor) { + super(TextureLoader.getTexture("downfallResources/images/rewards/placeholder.png"), + TEXT[0] + SneckoMod.getClassFromColor(myColor) + TEXT[1], + RewardItemTypeEnumPatch.COLORFULCARD); + this.myColor = myColor; + cards.clear(); + cards.addAll(getUpgradedUncommonCards()); + } + + private ArrayList getUpgradedUncommonCards() { + ArrayList selectedCards = new ArrayList<>(); + ArrayList availableCards = new ArrayList<>(); + + // Filter for colored uncommon cards that are not banned for Snecko + for (AbstractCard card : CardLibrary.getAllCards()) { + if (card.color == myColor && + card.rarity == AbstractCard.CardRarity.RARE && + !card.tags.contains(SneckoMod.BANNEDFORSNECKO)) { + availableCards.add(card); + } + } + + // If we have enough cards, add three unique upgraded ones to the list + while (selectedCards.size() < 3 && !availableCards.isEmpty()) { + AbstractCard card = availableCards.get(AbstractDungeon.relicRng.random(0, availableCards.size() - 1)).makeCopy(); + if (!isDuplicate(selectedCards, card)) { + selectedCards.add(card); + } + } + + // Fallback in case there aren't enough unique uncommon cards of the color + return selectedCards.isEmpty() ? getDebugFallbackCards() : selectedCards; + } + + private ArrayList getDebugFallbackCards() { + ArrayList debugCards = new ArrayList<>(); + for (AbstractCard card : CardLibrary.getAllCards()) { + debugCards.add(card.makeCopy()); + } + return debugCards; + } + + private boolean isDuplicate(ArrayList cardList, AbstractCard card) { + return cardList.stream().anyMatch(c -> c.cardID.equals(card.cardID)); + } + + @Override + public boolean claimReward() { + if (AbstractDungeon.screen == AbstractDungeon.CurrentScreen.COMBAT_REWARD) { + AbstractDungeon.cardRewardScreen.open(this.cards, this, TEXT[2]); + AbstractDungeon.previousScreen = AbstractDungeon.CurrentScreen.COMBAT_REWARD; + } + return false; + } +} diff --git a/src/main/java/sneckomod/util/ColorfulUncommonUpgradedReward.java b/src/main/java/sneckomod/util/ColorfulUncommonUpgradedReward.java new file mode 100644 index 000000000..c4ef0dd99 --- /dev/null +++ b/src/main/java/sneckomod/util/ColorfulUncommonUpgradedReward.java @@ -0,0 +1,76 @@ +package sneckomod.util; + +import basemod.abstracts.CustomReward; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.helpers.CardLibrary; +import downfall.downfallMod; +import downfall.patches.RewardItemTypeEnumPatch; +import downfall.util.TextureLoader; +import sneckomod.SneckoMod; + +import java.util.ArrayList; + +public class ColorfulUncommonUpgradedReward extends CustomReward { + public static final String ID = downfallMod.makeID("ColorfulUncommonCardReward"); + public static final String[] TEXT = CardCrawlGame.languagePack.getUIString(ID).TEXT; + + private final AbstractCard.CardColor myColor; + + public ColorfulUncommonUpgradedReward(AbstractCard.CardColor myColor) { + super(TextureLoader.getTexture("downfallResources/images/rewards/placeholder.png"), + TEXT[0] + SneckoMod.getClassFromColor(myColor) + TEXT[1], + RewardItemTypeEnumPatch.COLORFULCARD); + this.myColor = myColor; + cards.clear(); + cards.addAll(getUpgradedUncommonCards()); + } + + private ArrayList getUpgradedUncommonCards() { + ArrayList selectedCards = new ArrayList<>(); + ArrayList availableCards = new ArrayList<>(); + + // Filter for colored uncommon cards that are not banned for Snecko + for (AbstractCard card : CardLibrary.getAllCards()) { + if (card.color == myColor && + card.rarity == AbstractCard.CardRarity.UNCOMMON && + !card.tags.contains(SneckoMod.BANNEDFORSNECKO)) { + availableCards.add(card); + } + } + + // If we have enough cards, add three unique upgraded ones to the list + while (selectedCards.size() < 3 && !availableCards.isEmpty()) { + AbstractCard card = availableCards.get(AbstractDungeon.cardRandomRng.random(0, availableCards.size() - 1)).makeCopy(); + card.upgrade(); + if (!isDuplicate(selectedCards, card)) { + selectedCards.add(card); + } + } + + // Fallback in case there aren't enough unique uncommon cards of the color + return selectedCards.isEmpty() ? getDebugFallbackCards() : selectedCards; + } + + private ArrayList getDebugFallbackCards() { + ArrayList debugCards = new ArrayList<>(); + for (AbstractCard card : CardLibrary.getAllCards()) { + debugCards.add(card.makeCopy()); + } + return debugCards; + } + + private boolean isDuplicate(ArrayList cardList, AbstractCard card) { + return cardList.stream().anyMatch(c -> c.cardID.equals(card.cardID)); + } + + @Override + public boolean claimReward() { + if (AbstractDungeon.screen == AbstractDungeon.CurrentScreen.COMBAT_REWARD) { + AbstractDungeon.cardRewardScreen.open(this.cards, this, TEXT[2]); + AbstractDungeon.previousScreen = AbstractDungeon.CurrentScreen.COMBAT_REWARD; + } + return false; + } +} diff --git a/src/main/java/sneckomod/util/DiceRollPotionReward.java b/src/main/java/sneckomod/util/DiceRollPotionReward.java new file mode 100644 index 000000000..3e79b8780 --- /dev/null +++ b/src/main/java/sneckomod/util/DiceRollPotionReward.java @@ -0,0 +1,63 @@ +package sneckomod.util; + +import basemod.abstracts.CustomReward; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.helpers.CardLibrary; +import downfall.downfallMod; +import downfall.patches.RewardItemTypeEnumPatch; +import downfall.util.TextureLoader; +import sneckomod.SneckoMod; + +import java.util.ArrayList; + +import static com.megacrit.cardcrawl.cards.AbstractCard.CardType.POWER; + +public class DiceRollPotionReward extends CustomReward { + public static final String ID = downfallMod.makeID("DiceRollPotionReward"); + public static final String[] TEXT = CardCrawlGame.languagePack.getUIString(ID).TEXT; + + + public DiceRollPotionReward() { + super(TextureLoader.getTexture("downfallResources/images/rewards/placeholder.png"), TEXT[0] + TEXT[1], RewardItemTypeEnumPatch.COLORFULCARD); + cards.clear(); + cards.addAll(getUpgradedUncommonCards()); + } + + private ArrayList getUpgradedUncommonCards() { + ArrayList selectedCards = new ArrayList<>(); + + while (selectedCards.size() < 3) { + AbstractCard card = SneckoMod.getOffClassCardMatchingPredicate(c -> c.rarity == AbstractCard.CardRarity.UNCOMMON); + card.upgrade(); + if (!isDuplicate(selectedCards, card)) { + selectedCards.add(card); + } + } + + // Fallback in case there aren't enough unique uncommon cards of the color + return selectedCards.isEmpty() ? getDebugFallbackCards() : selectedCards; + } + + private ArrayList getDebugFallbackCards() { + ArrayList debugCards = new ArrayList<>(); + for (AbstractCard card : CardLibrary.getAllCards()) { + debugCards.add(card.makeCopy()); + } + return debugCards; + } + + private boolean isDuplicate(ArrayList cardList, AbstractCard card) { + return cardList.stream().anyMatch(c -> c.cardID.equals(card.cardID)); + } + + @Override + public boolean claimReward() { + if (AbstractDungeon.screen == AbstractDungeon.CurrentScreen.COMBAT_REWARD) { + AbstractDungeon.cardRewardScreen.open(this.cards, this, TEXT[2]); + AbstractDungeon.previousScreen = AbstractDungeon.CurrentScreen.COMBAT_REWARD; + } + return false; + } +} diff --git a/src/main/java/sneckomod/vfx/SneckoVictoryNumberEffect.java b/src/main/java/sneckomod/vfx/SneckoVictoryNumberEffect.java new file mode 100644 index 000000000..090959196 --- /dev/null +++ b/src/main/java/sneckomod/vfx/SneckoVictoryNumberEffect.java @@ -0,0 +1,92 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package sneckomod.vfx; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.math.Interpolation; +import com.badlogic.gdx.math.MathUtils; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.helpers.FontHelper; +import com.megacrit.cardcrawl.helpers.MathHelper; +import com.megacrit.cardcrawl.vfx.AbstractGameEffect; + +public class SneckoVictoryNumberEffect extends AbstractGameEffect { + private float x; + private float y; + private float incrementTimer; + private String num = ""; + private boolean dontIncrement = false; + public static Color placeholderColor = new Color(64F / 255F, 123F / 255F, 147F / 255F, 1); + + //look mom I used vanilla code! + public SneckoVictoryNumberEffect() { + this.renderBehind = true; + this.x = MathUtils.random(0.0F, 1870.0F) * Settings.xScale; + this.y = MathUtils.random(50.0F, 990.0F) * Settings.yScale; + this.duration = MathUtils.random(2.0F, 4.0F); + this.color = new Color(MathUtils.random(0.5F, 1.0F), MathUtils.random(0.5F, 1.0F), MathUtils.random(0.5F, 1.0F), 0.0F); + this.scale = MathUtils.random(0.7F, 1.3F); + this.incrementTimer = MathUtils.random(0.02F, 0.1F); + switch (MathUtils.random(100)) { +// case 0: +// this.num = "013102"; +// this.dontIncrement = true; +// break; +// case 1: +// this.num = "321310"; +// this.dontIncrement = true; +// break; +// case 2: +// this.num = "201310"; +// this.dontIncrement = true; + } + + } + + public void update() { + if (!this.dontIncrement) { + this.incrementTimer -= Gdx.graphics.getDeltaTime(); + if (this.incrementTimer < 0.0F) { + switch (MathUtils.random(4)) { + case 0: + this.num = this.num + "0"; + case 1: + this.num = this.num + "1"; + case 2: + this.num = this.num + "2"; + case 3: + this.num = this.num + "3"; + } + this.incrementTimer = MathUtils.random(0.1F, 0.4F); + } + } + + this.duration -= Gdx.graphics.getDeltaTime(); + if (this.duration < 0.0F) { + this.isDone = true; + } else { + if (this.duration < 1.0F) { + this.color.a = Interpolation.bounceOut.apply(0.0F, 0.5F, this.duration); + } else { + this.color.a = MathHelper.slowColorLerpSnap(this.color.a, 0.5F); + } + + } + } + + public void render(SpriteBatch sb) { + sb.setBlendFunction(770, 1); + FontHelper.energyNumFontBlue.getData().setScale(this.scale); + FontHelper.renderFont(sb, FontHelper.energyNumFontBlue, this.num, this.x, this.y, placeholderColor); + FontHelper.energyNumFontBlue.getData().setScale(1.0F); + sb.setBlendFunction(770, 771); + } + + public void dispose() { + } +} diff --git a/src/main/java/theHexaghost/GhostflameHelper.java b/src/main/java/theHexaghost/GhostflameHelper.java index 6a4d01260..349b0cbbd 100644 --- a/src/main/java/theHexaghost/GhostflameHelper.java +++ b/src/main/java/theHexaghost/GhostflameHelper.java @@ -28,13 +28,22 @@ public class GhostflameHelper { public static void init() { hexaGhostFlames.clear(); - hexaGhostFlames.add(new SearingGhostflame(globalX + AbstractDungeon.player.drawX - (120.0F * Settings.scale), globalY + AbstractDungeon.player.drawY + (370.0F * Settings.scale))); - hexaGhostFlames.add(new CrushingGhostflame(globalX + AbstractDungeon.player.drawX + (60.0F * Settings.scale), globalY + AbstractDungeon.player.drawY + (370.0F * Settings.scale))); - hexaGhostFlames.add(new BolsteringGhostflame(globalX + AbstractDungeon.player.drawX + (140.0F * Settings.scale), globalY + AbstractDungeon.player.drawY + (230.0F * Settings.scale))); - hexaGhostFlames.add(new SearingGhostflame(globalX + AbstractDungeon.player.drawX + (60.0F * Settings.scale), globalY + AbstractDungeon.player.drawY + (90.0F * Settings.scale))); - hexaGhostFlames.add(new CrushingGhostflame(globalX + AbstractDungeon.player.drawX - (120.0F * Settings.scale), globalY + AbstractDungeon.player.drawY + (90.0F * Settings.scale))); - hexaGhostFlames.add(new InfernoGhostflame(globalX + AbstractDungeon.player.drawX - (200.0F * Settings.scale), globalY + AbstractDungeon.player.drawY + (230.0F * Settings.scale))); - hexaGhostFlames.get(0).activate(); + if (AbstractDungeon.player instanceof TheHexaghost) { + hexaGhostFlames.add(new SearingGhostflame(globalX + AbstractDungeon.player.drawX - (120.0F * Settings.scale), globalY + AbstractDungeon.player.drawY + (370.0F * Settings.scale))); + hexaGhostFlames.add(new CrushingGhostflame(globalX + AbstractDungeon.player.drawX + (60.0F * Settings.scale), globalY + AbstractDungeon.player.drawY + (370.0F * Settings.scale))); + hexaGhostFlames.add(new BolsteringGhostflame(globalX + AbstractDungeon.player.drawX + (140.0F * Settings.scale), globalY + AbstractDungeon.player.drawY + (230.0F * Settings.scale))); + hexaGhostFlames.add(new SearingGhostflame(globalX + AbstractDungeon.player.drawX + (60.0F * Settings.scale), globalY + AbstractDungeon.player.drawY + (90.0F * Settings.scale))); + hexaGhostFlames.add(new CrushingGhostflame(globalX + AbstractDungeon.player.drawX - (120.0F * Settings.scale), globalY + AbstractDungeon.player.drawY + (90.0F * Settings.scale))); + hexaGhostFlames.add(new InfernoGhostflame(globalX + AbstractDungeon.player.drawX - (200.0F * Settings.scale), globalY + AbstractDungeon.player.drawY + (230.0F * Settings.scale))); + hexaGhostFlames.get(0).activate(); + } + + if (!(AbstractDungeon.player instanceof TheHexaghost)) { + hexaGhostFlames.add(new SearingGhostflame(globalX + AbstractDungeon.player.drawX - (120.0F * Settings.scale), globalY + AbstractDungeon.player.drawY + (370.0F * Settings.scale))); + hexaGhostFlames.add(new CrushingGhostflame(globalX + AbstractDungeon.player.drawX + (60.0F * Settings.scale), globalY + AbstractDungeon.player.drawY + (370.0F * Settings.scale))); + hexaGhostFlames.add(new BolsteringGhostflame(globalX + AbstractDungeon.player.drawX + (90.0F * Settings.scale), globalY + AbstractDungeon.player.drawY + (90.0F * Settings.scale))); + hexaGhostFlames.get(0).activate(); + } } public static AbstractGhostflame getNextGhostFlame() { @@ -91,7 +100,34 @@ public static void retract() { public static void end_on_random_flame(){ - int new_flame_num = AbstractDungeon.miscRng.random(hexaGhostFlames.size()-1); + int new_flame_num = AbstractDungeon.cardRng.random(hexaGhostFlames.size()-1); + + + if (new_flame_num == hexaGhostFlames.indexOf(activeGhostFlame)) { + while (new_flame_num == hexaGhostFlames.indexOf(activeGhostFlame)) { + new_flame_num = AbstractDungeon.cardRng.random(hexaGhostFlames.size() - 1); + } + } + + AbstractGhostflame x = hexaGhostFlames.get(new_flame_num); + if (x.charged) { + x.extinguish(); + } + x.activate(); + + } + + public static void end_on_random_flame_relic_rng(){ + + int new_flame_num = AbstractDungeon.relicRng.random(hexaGhostFlames.size()-1); + + + if (new_flame_num == hexaGhostFlames.indexOf(activeGhostFlame)) { + while (new_flame_num == hexaGhostFlames.indexOf(activeGhostFlame)) { + new_flame_num = AbstractDungeon.relicRng.random(hexaGhostFlames.size() - 1); + } + } + AbstractGhostflame x = hexaGhostFlames.get(new_flame_num); if (x.charged) { x.extinguish(); diff --git a/src/main/java/theHexaghost/HexaMod.java b/src/main/java/theHexaghost/HexaMod.java index a24ea717a..3de799fb9 100644 --- a/src/main/java/theHexaghost/HexaMod.java +++ b/src/main/java/theHexaghost/HexaMod.java @@ -30,7 +30,7 @@ import com.megacrit.cardcrawl.scenes.TheBottomScene; import com.megacrit.cardcrawl.vfx.scene.InteractableTorchEffect; import downfall.downfallMod; -import downfall.patches.BanSharedContentPatch; +//import downfall.patches.BanSharedContentPatch; import downfall.patches.EvilModeCharacterSelect; import downfall.util.CardIgnore; import downfall.util.TextureLoader; @@ -95,9 +95,14 @@ public class HexaMod implements private static final String CHARSELECT_PORTRAIT = "hexamodResources/images/charSelect/charBG.png"; public static boolean renderFlames = false; public static boolean unsealed = false; + + //prismatic shard check + private static int ghostwheelcards = 0; + public static Color placeholderColor = new Color(114F / 255F, 62F / 255F, 109F / 255F, 1); private static String modID; + public static int[] seal_weight = new int[7]; public static int[] new_seal_weight = new int[7]; // public double[] seal_chance = new double[7]; @@ -182,6 +187,7 @@ public static String makeID(String idText) { return getModID() + ":" + idText; } + private static void autoAddCards() throws URISyntaxException, IllegalAccessException, InstantiationException, NotFoundException, ClassNotFoundException { ClassFinder finder = new ClassFinder(); @@ -270,7 +276,7 @@ public void atb(AbstractGameAction q) { public void addPotions() { - + BaseMod.addPotion(SoulburnPotion.class, Color.GRAY, Color.GRAY, Color.BLACK, SoulburnPotion.POTION_ID, TheHexaghost.Enums.THE_SPIRIT); BaseMod.addPotion(EctoCoolerPotion.class, Color.GRAY, Color.GRAY, Color.BLACK, EctoCoolerPotion.POTION_ID, TheHexaghost.Enums.THE_SPIRIT); BaseMod.addPotion(DoubleChargePotion.class, Color.BLUE, Color.PURPLE, Color.MAROON, DoubleChargePotion.POTION_ID, TheHexaghost.Enums.THE_SPIRIT); BaseMod.addPotion(InfernoChargePotion.class, Color.PURPLE, Color.PURPLE, Color.MAROON, InfernoChargePotion.POTION_ID, TheHexaghost.Enums.THE_SPIRIT); @@ -289,6 +295,12 @@ public void receiveOnBattleStart(AbstractRoom abstractRoom) { GhostflameHelper.init(); // ExhaustCardTickPatch.exhaustedLastTurn = false; // ExhaustCardTickPatch.exhaustedThisTurn = false; + ghostwheelcards = 0; +// for (AbstractCard c : AbstractDungeon.player.masterDeck.group) { +// if (c.hasTag(GHOSTWHEELCARD)) { +// ghostwheelcards++; +// } +// } if (AbstractDungeon.player instanceof TheHexaghost) { renderFlames = true; @@ -344,6 +356,7 @@ public void receivePostBattle(AbstractRoom abstractRoom) { // ExhaustCardTickPatch.exhaustedThisTurn = false; for (int i = 1; i <= 6; i++) { seal_weight[i] = seal_weight[i] + new_seal_weight[i]; + seal_weight[i] = seal_weight[i] + new_seal_weight[i]; } bonus_seal_drop_chance = bonus_seal_drop_chance + new_bonus_seal_drop_chance; } @@ -459,7 +472,7 @@ public void receivePostInitialize() { .create()); BaseMod.addEvent(new AddEventParams.Builder(SealChamber.ID, SealChamber.class) //Event ID// - .spawnCondition(() -> !AbstractDungeon.player.hasRelic(TheBrokenSeal.ID)) + .spawnCondition(() -> !AbstractDungeon.player.hasRelic(TheBrokenSeal.ID) && !hasAllSeals()) //Event Character// .playerClass(TheHexaghost.Enums.THE_SPIRIT) .create()); @@ -492,6 +505,48 @@ public void receivePostInitialize() { .create()); } + public boolean hasAllSeals(){ + int variable = 0; + int hasone = 0; + int hastwo = 0; + int hasthree = 0; + int hasfour = 0; + int hasfive = 0; + int hassix = 0; + + if (AbstractDungeon.player.hasRelic(TheBrokenSeal.ID)) { + return false; + } + + for (AbstractCard c : AbstractDungeon.player.masterDeck.group) { + if (c instanceof FirstSeal && hasone == 0) { + variable++; + hasone++; + } else if (c instanceof SecondSeal && hastwo == 0) { + variable++; + hastwo++; + } else if (c instanceof ThirdSeal && hasthree == 0) { + variable++; + hasthree++; + } else if (c instanceof FourthSeal && hasfour == 0) { + variable++; + hasfour++; + } else if (c instanceof SixthSeal && hasfive == 0) { + variable++; + hasfive++; + } else if (c instanceof FifthSeal && hassix == 0) { + variable++; + hassix++; + } + } + + if (variable == 6) { + return false; + } + + return true; + } + @Override public void receiveCardUsed(AbstractCard abstractCard) { diff --git a/src/main/java/theHexaghost/TheHexaghost.java b/src/main/java/theHexaghost/TheHexaghost.java index fd3449ac7..ce992184e 100644 --- a/src/main/java/theHexaghost/TheHexaghost.java +++ b/src/main/java/theHexaghost/TheHexaghost.java @@ -1,6 +1,19 @@ package theHexaghost; +import automaton.vfx.CompileVictoryEffect; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.cutscenes.CutscenePanel; import com.megacrit.cardcrawl.helpers.*; +import com.megacrit.cardcrawl.vfx.AbstractGameEffect; +import com.megacrit.cardcrawl.vfx.combat.GiantFireEffect; +import com.megacrit.cardcrawl.vfx.combat.ScreenOnFireEffect; +import com.megacrit.cardcrawl.vfx.scene.DefectVictoryNumberEffect; +import com.megacrit.cardcrawl.vfx.scene.IroncladVictoryFlameEffect; +import downfall.downfallMod; +import hermit.effects.HermitVictoryEmbers; +import hermit.effects.HermitVictoryMoon; +import hermit.vfx.GreenFireEffect; +import hermit.vfx.ShortScreenFire; import reskinContent.patches.CharacterSelectScreenPatches; import reskinContent.reskinContent; import basemod.abstracts.CustomEnergyOrb; @@ -26,16 +39,25 @@ import com.megacrit.cardcrawl.rooms.RestRoom; import com.megacrit.cardcrawl.screens.CharSelectInfo; import com.megacrit.cardcrawl.vfx.BobEffect; +import reskinContent.vfx.PortraitScreenOnFireEffect; import sneckomod.SneckoMod; import theHexaghost.cards.*; import theHexaghost.cards.Float; import theHexaghost.ghostflames.*; import theHexaghost.relics.SpiritBrand; import downfall.util.TextureLoader; +import theHexaghost.vfx.ActiveFireEffect; import theHexaghost.vfx.MyBody; +import theHexaghost.vfx.SpookyEmberEffect; import java.util.ArrayList; +import java.util.List; +import static com.badlogic.gdx.graphics.Color.GREEN; +import static com.badlogic.gdx.graphics.Color.PURPLE; +import static hermit.characters.hermit.update_timer; +import static hermit.util.Wiz.atb; +import static java.awt.Color.green; import static theHexaghost.GhostflameHelper.*; import static theHexaghost.HexaMod.*; import static theHexaghost.TheHexaghost.Enums.GHOST_GREEN; @@ -121,6 +143,42 @@ public TheHexaghost(String name, PlayerClass setClass) { myBody = new MyBody(); } + @Override + public Texture getCutsceneBg() { + return TextureLoader.getTexture("images/scenes/purpleBg.jpg"); + } + + @Override + public List getCutscenePanels() { + List panels = new ArrayList(); + //wow look standard mode ending + panels.add(new CutscenePanel(downfallMod.assetPath("images/scenes/hexaending1.jpg"), "GHOST_FLAMES")); + panels.add(new CutscenePanel(downfallMod.assetPath("images/scenes/hexaending2.jpg"))); + panels.add(new CutscenePanel(downfallMod.assetPath("images/scenes/hexaending3.jpg"))); + return panels; + } + + @Override + public void updateVictoryVfx(ArrayList effects) { + + AbstractDungeon.effectsQueue.add(new GiantFireEffect()); + AbstractDungeon.effectsQueue.add(new GreenFireEffect()); + + update_timer += Gdx.graphics.getDeltaTime(); + + update_timer += Gdx.graphics.getDeltaTime(); + + for (float i = 0; i + (1.0 / 120.0) <= update_timer; update_timer -= (1.0 / 120.0)) { + float spawn = (float) MathUtils.random(0, 10); + if (spawn == 1) { + effects.add(new GiantFireEffect()); + AbstractDungeon.effectsQueue.add(new GreenFireEffect()); + } + } + } + + + public void reloadAnimation() { this.loadAnimation( CharacterSelectScreenPatches.characters[2].skins[CharacterSelectScreenPatches.characters[2].reskinCount].atlasURL, diff --git a/src/main/java/theHexaghost/actions/DiscoverEtherealAction.java b/src/main/java/theHexaghost/actions/DiscoverEtherealAction.java index 7df438ad0..385d54f36 100644 --- a/src/main/java/theHexaghost/actions/DiscoverEtherealAction.java +++ b/src/main/java/theHexaghost/actions/DiscoverEtherealAction.java @@ -1,5 +1,6 @@ package theHexaghost.actions; +import basemod.BaseMod; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.core.Settings; @@ -38,7 +39,7 @@ public void update() { disCard.setCostForTurn(0); disCard.current_x = -1000.0F * Settings.scale; - if (AbstractDungeon.player.hand.size() < 10) { + if (AbstractDungeon.player.hand.size() < BaseMod.MAX_HAND_SIZE) { AbstractDungeon.effectList.add(new ShowCardAndAddToHandEffect(disCard, (float) Settings.WIDTH / 2.0F, (float) Settings.HEIGHT / 2.0F)); } else { AbstractDungeon.effectList.add(new ShowCardAndAddToDiscardEffect(disCard, (float) Settings.WIDTH / 2.0F, (float) Settings.HEIGHT / 2.0F)); @@ -61,7 +62,7 @@ private ArrayList generateCardChoices() { while (derp.size() != 3) { boolean dupe = false; - int roll = AbstractDungeon.cardRandomRng.random(99); + int roll = AbstractDungeon.potionRng.random(99); AbstractCard.CardRarity cardRarity; if (roll < 60) { cardRarity = AbstractCard.CardRarity.COMMON; @@ -73,7 +74,7 @@ private ArrayList generateCardChoices() { ArrayList possList = new ArrayList<>(CardLibrary.getAllCards()); - possList.removeIf(c -> (!c.isEthereal || c.color == AbstractCard.CardColor.CURSE || c.type == CURSE || c.rarity == AbstractCard.CardRarity.SPECIAL || c.type == STATUS || c.hasTag(AbstractCard.CardTags.HEALING))); + possList.removeIf(c -> (c.color != AbstractDungeon.player.getCardColor() || !c.isEthereal || c.color == AbstractCard.CardColor.CURSE || c.type == CURSE || c.rarity == AbstractCard.CardRarity.SPECIAL || c.type == STATUS || c.hasTag(AbstractCard.CardTags.HEALING))); AbstractCard tmp = possList.get(AbstractDungeon.cardRandomRng.random(possList.size() - 1)).makeCopy(); diff --git a/src/main/java/theHexaghost/actions/DrawEtherealAction.java b/src/main/java/theHexaghost/actions/DrawEtherealAction.java index 5ab15b50c..4bd99a1dc 100644 --- a/src/main/java/theHexaghost/actions/DrawEtherealAction.java +++ b/src/main/java/theHexaghost/actions/DrawEtherealAction.java @@ -1,5 +1,6 @@ package theHexaghost.actions; +import basemod.BaseMod; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.common.DrawCardAction; import com.megacrit.cardcrawl.cards.AbstractCard; @@ -10,6 +11,7 @@ import java.util.Iterator; +@Deprecated public class DrawEtherealAction extends AbstractGameAction{ public AbstractPlayer p; @@ -53,7 +55,7 @@ public void update() { tmp.shuffle(); card = tmp.getBottomCard(); tmp.removeCard(card); - if (this.p.hand.size() == 10) { + if (this.p.hand.size() == BaseMod.MAX_HAND_SIZE) { this.p.createHandIsFullDialog(); } else { p.drawPile.group.remove(card); diff --git a/src/main/java/theHexaghost/actions/LimboToHandAction.java b/src/main/java/theHexaghost/actions/LimboToHandAction.java index 9bc7a75e9..0e60f4b70 100644 --- a/src/main/java/theHexaghost/actions/LimboToHandAction.java +++ b/src/main/java/theHexaghost/actions/LimboToHandAction.java @@ -1,5 +1,6 @@ package theHexaghost.actions; +import basemod.BaseMod; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.core.Settings; @@ -17,7 +18,7 @@ public LimboToHandAction(AbstractCard card) { public void update() { if (duration == Settings.ACTION_DUR_FAST) { if (AbstractDungeon.player.limbo.contains(card) && - AbstractDungeon.player.hand.size() < 10) { + AbstractDungeon.player.hand.size() < BaseMod.MAX_HAND_SIZE) { AbstractDungeon.player.hand.addToHand(card); card.unhover(); card.setAngle(0.0F, true); diff --git a/src/main/java/theHexaghost/cards/RandomFlameAction.java b/src/main/java/theHexaghost/actions/RandomFlameAction.java similarity index 90% rename from src/main/java/theHexaghost/cards/RandomFlameAction.java rename to src/main/java/theHexaghost/actions/RandomFlameAction.java index ce7f39f6b..fefc6a52b 100644 --- a/src/main/java/theHexaghost/cards/RandomFlameAction.java +++ b/src/main/java/theHexaghost/actions/RandomFlameAction.java @@ -1,4 +1,4 @@ -package theHexaghost.cards; +package theHexaghost.actions; import com.megacrit.cardcrawl.actions.AbstractGameAction; import theHexaghost.GhostflameHelper; diff --git a/src/main/java/theHexaghost/actions/RandomFlameActionRelicRng.java b/src/main/java/theHexaghost/actions/RandomFlameActionRelicRng.java new file mode 100644 index 000000000..e0fe9ae3d --- /dev/null +++ b/src/main/java/theHexaghost/actions/RandomFlameActionRelicRng.java @@ -0,0 +1,14 @@ +package theHexaghost.actions; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import theHexaghost.GhostflameHelper; + +public class RandomFlameActionRelicRng extends AbstractGameAction { + + public RandomFlameActionRelicRng(){} + + public void update() { + isDone = true; + GhostflameHelper.end_on_random_flame_relic_rng(); + } +} diff --git a/src/main/java/theHexaghost/actions/RandomizeFlameAction.java b/src/main/java/theHexaghost/actions/RandomizeFlameAction.java new file mode 100644 index 000000000..f6d6b2c3a --- /dev/null +++ b/src/main/java/theHexaghost/actions/RandomizeFlameAction.java @@ -0,0 +1,72 @@ +package theHexaghost.actions; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import theHexaghost.GhostflameHelper; +import theHexaghost.ghostflames.AbstractGhostflame; +import theHexaghost.ghostflames.BolsteringGhostflame; +import theHexaghost.ghostflames.CrushingGhostflame; +import theHexaghost.ghostflames.SearingGhostflame; + +public class RandomizeFlameAction extends AbstractGameAction { + public AbstractGhostflame flameToRandomize; + public int bruh = 0; + + + public RandomizeFlameAction() { + + } + + public void update() { + + AbstractGhostflame newgf = GhostflameHelper.activeGhostFlame; + System.out.println("DEBUG: Old Ghostflame: " + newgf.getName()); + //this is only called by a relic, so it'll use relic rng here + bruh = AbstractDungeon.relicRng.random(0, 2); + + if (bruh == 0) { + newgf = new SearingGhostflame(GhostflameHelper.activeGhostFlame.lx, GhostflameHelper.activeGhostFlame.ly); + } + + if (bruh == 1) { + newgf = new CrushingGhostflame(GhostflameHelper.activeGhostFlame.lx, GhostflameHelper.activeGhostFlame.ly); + } + + if (bruh == 2) { + newgf = new BolsteringGhostflame(GhostflameHelper.activeGhostFlame.lx, GhostflameHelper.activeGhostFlame.ly); + } + + System.out.println("DEBUG: Found Ghostflame: " + newgf.getName()); + + // randomize until it's different + + if (newgf.getName() == GhostflameHelper.activeGhostFlame.getName()) { + System.out.println("DEBUG: Both Ghostflames are identical: " + newgf.getName()); + while (newgf.getName() == GhostflameHelper.activeGhostFlame.getName()) { + bruh = AbstractDungeon.relicRng.random(0, 2); + + if (bruh == 0) { + newgf = new SearingGhostflame(GhostflameHelper.activeGhostFlame.lx, GhostflameHelper.activeGhostFlame.ly); + } + + if (bruh == 1) { + newgf = new CrushingGhostflame(GhostflameHelper.activeGhostFlame.lx, GhostflameHelper.activeGhostFlame.ly); + } + + if (bruh == 2) { + newgf = new BolsteringGhostflame(GhostflameHelper.activeGhostFlame.lx, GhostflameHelper.activeGhostFlame.ly); + } + + System.out.println("DEBUG: Found Ghostflame: " + newgf.getName()); + } + } + + System.out.println("DEBUG: Decided on Ghostflame: " + newgf.getName()); + + GhostflameHelper.hexaGhostFlames.set((GhostflameHelper.hexaGhostFlames.indexOf(GhostflameHelper.activeGhostFlame)), newgf); + newgf.activate(); + + isDone = true; + } + +} diff --git a/src/main/java/theHexaghost/actions/RecurringNightmareAction.java b/src/main/java/theHexaghost/actions/RecurringNightmareAction.java index a2bb0bbcd..15cc9dc8b 100644 --- a/src/main/java/theHexaghost/actions/RecurringNightmareAction.java +++ b/src/main/java/theHexaghost/actions/RecurringNightmareAction.java @@ -1,5 +1,6 @@ package theHexaghost.actions; +import basemod.BaseMod; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; @@ -27,7 +28,7 @@ public RecurringNightmareAction(int amount) { public void update() { if (this.duration == Settings.ACTION_DUR_FAST) { - if (AbstractDungeon.player.hand.size() == 10) { + if (AbstractDungeon.player.hand.size() == BaseMod.MAX_HAND_SIZE) { AbstractDungeon.player.createHandIsFullDialog(); this.isDone = true; } else if (this.p.exhaustPile.isEmpty()) { diff --git a/src/main/java/theHexaghost/cards/AdvancingGuard.java b/src/main/java/theHexaghost/cards/AdvancingGuard.java index fc2190294..0a2dee460 100644 --- a/src/main/java/theHexaghost/cards/AdvancingGuard.java +++ b/src/main/java/theHexaghost/cards/AdvancingGuard.java @@ -3,6 +3,7 @@ import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; import theHexaghost.HexaMod; import theHexaghost.actions.AdvanceAction; @@ -20,6 +21,8 @@ public AdvancingGuard() { baseBlock = BLOCK; tags.add(HexaMod.GHOSTWHEELCARD); + this.tags.add(SneckoMod.BANNEDFORSNECKO); + HexaMod.loadJokeCardImage(this, "AdvancingGuard.png"); } diff --git a/src/main/java/theHexaghost/cards/BacktrackSmack.java b/src/main/java/theHexaghost/cards/BacktrackSmack.java index 7621e4b98..79c3a6ca0 100644 --- a/src/main/java/theHexaghost/cards/BacktrackSmack.java +++ b/src/main/java/theHexaghost/cards/BacktrackSmack.java @@ -3,6 +3,7 @@ import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; import theHexaghost.HexaMod; import theHexaghost.actions.RetractAction; @@ -11,7 +12,10 @@ public class BacktrackSmack extends AbstractHexaCard { public BacktrackSmack() { super(ID, 1, CardType.ATTACK, CardRarity.COMMON, CardTarget.ENEMY); - baseDamage = 7; + baseDamage = 6; + tags.add(HexaMod.GHOSTWHEELCARD); + this.tags.add(SneckoMod.BANNEDFORSNECKO); + HexaMod.loadJokeCardImage(this, "BacktrackSmack.png"); } diff --git a/src/main/java/theHexaghost/cards/BurningQuestion.java b/src/main/java/theHexaghost/cards/BurningQuestion.java index 79e866591..29077a0e2 100644 --- a/src/main/java/theHexaghost/cards/BurningQuestion.java +++ b/src/main/java/theHexaghost/cards/BurningQuestion.java @@ -3,6 +3,7 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.helpers.GameDictionary; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.DexterityPower; import com.megacrit.cardcrawl.powers.StrengthPower; @@ -40,7 +41,7 @@ protected boolean useAfterlifeVFX() { public void upgrade() { if (!upgraded) { upgradeName(); - upgradeMagicNumber(2); + upgradeMagicNumber(1); } } @@ -55,12 +56,6 @@ public void initializeDescription() { super.initializeDescription(); String afterlife_name = downfallMod.keywords_and_proper_names.get("afterlife"); this.keywords.add(afterlife_name); - if (Settings.language == Settings.GameLanguage.ZHS){ - this.keywords.add("敏捷"); - }else if (Settings.language == Settings.GameLanguage.RUS){ - this.keywords.add("ловкость"); - }else{ - this.keywords.add("dexterity"); + this.keywords.add(GameDictionary.DEXTERITY.NAMES[0].toLowerCase()); } } -} diff --git a/src/main/java/theHexaghost/cards/CatchUp.java b/src/main/java/theHexaghost/cards/CatchUp.java index f254a2018..081ada005 100644 --- a/src/main/java/theHexaghost/cards/CatchUp.java +++ b/src/main/java/theHexaghost/cards/CatchUp.java @@ -15,6 +15,7 @@ public CatchUp() { super(ID, 1, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); baseMagicNumber = magicNumber = 2; this.exhaust = true; + tags.add(HexaMod.GHOSTWHEELCARD); this.tags.add(SneckoMod.BANNEDFORSNECKO); HexaMod.loadJokeCardImage(this, "CatchUp.png"); } diff --git a/src/main/java/theHexaghost/cards/ChargedBarrage.java b/src/main/java/theHexaghost/cards/ChargedBarrage.java index 45b7f8baa..c81ea531a 100644 --- a/src/main/java/theHexaghost/cards/ChargedBarrage.java +++ b/src/main/java/theHexaghost/cards/ChargedBarrage.java @@ -29,6 +29,7 @@ public class ChargedBarrage extends AbstractHexaCard { public ChargedBarrage() { super(ID, 1, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.ENEMY); baseBurn = burn = MAGIC; + tags.add(HexaMod.GHOSTWHEELCARD); this.tags.add(SneckoMod.BANNEDFORSNECKO); HexaMod.loadJokeCardImage(this, "ChargedBarrage.png"); } diff --git a/src/main/java/theHexaghost/cards/EmpoweredFlame.java b/src/main/java/theHexaghost/cards/EmpoweredFlame.java index 37b2675b7..2d59f0acb 100644 --- a/src/main/java/theHexaghost/cards/EmpoweredFlame.java +++ b/src/main/java/theHexaghost/cards/EmpoweredFlame.java @@ -10,7 +10,7 @@ public class EmpoweredFlame extends AbstractHexaCard { public final static String ID = makeID("EmpoweredFlame"); - private static final int MAGIC = 3; + private static final int MAGIC = 2; private static final int UPG_MAGIC = 1; public EmpoweredFlame() { diff --git a/src/main/java/theHexaghost/cards/EtherStep.java b/src/main/java/theHexaghost/cards/EtherStep.java index cb6e9c4a3..8b14e1b49 100644 --- a/src/main/java/theHexaghost/cards/EtherStep.java +++ b/src/main/java/theHexaghost/cards/EtherStep.java @@ -1,12 +1,19 @@ package theHexaghost.cards; +import champ.powers.GladiatorFormPower; +import champ.relics.RageAmulet; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.common.DrawCardAction; import com.megacrit.cardcrawl.actions.common.ExhaustAction; +import com.megacrit.cardcrawl.actions.common.ReducePowerAction; +import com.megacrit.cardcrawl.actions.common.RemoveSpecificPowerAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.watcher.VigorPower; +import com.megacrit.cardcrawl.relics.AbstractRelic; import downfall.downfallMod; +import gremlin.relics.FragmentationGrenade; import theHexaghost.HexaMod; import theHexaghost.util.HexaPurpleTextInterface; @@ -26,22 +33,49 @@ public EtherStep() { } public void use(AbstractPlayer p, AbstractMonster m) { + dmg(m, makeInfo(), AbstractGameAction.AttackEffect.FIRE); this.addToBot(new ExhaustAction(1, false)); this.addToBot(new DrawCardAction(p, this.magicNumber)); - dmg(m, makeInfo(), AbstractGameAction.AttackEffect.FIRE); } public void afterlife() { AbstractMonster m = AbstractDungeon.getRandomMonster(); if (m == null) return; this.calculateCardDamage(m); + + if (AbstractDungeon.player.hasRelic(FragmentationGrenade.ID)) { + AbstractDungeon.player.getRelic(FragmentationGrenade.ID).flash(); + this.damage = this.damage + FragmentationGrenade.OOMPH; + } + if(AbstractDungeon.player.hasPower("Pen Nib") ){ this.damage /= 2; dmg(m, makeInfo(), AbstractGameAction.AttackEffect.FIRE); this.damage *= 2; - }else { + } else { dmg(m, makeInfo(), AbstractGameAction.AttackEffect.FIRE); } + + if (AbstractDungeon.player.hasRelic(FragmentationGrenade.ID)) { + AbstractDungeon.player.getRelic(FragmentationGrenade.ID).flash(); + this.damage = this.damage - FragmentationGrenade.OOMPH; + } + + if (AbstractDungeon.player.hasPower(GladiatorFormPower.POWER_ID)) { + GladiatorFormPower revengePower = (GladiatorFormPower) AbstractDungeon.player.getPower(GladiatorFormPower.POWER_ID); + + if (revengePower != null) { + revengePower.onSpecificTriggerBranch(); + } + } + + for (AbstractRelic r : AbstractDungeon.player.relics) { + if (r instanceof RageAmulet) { + ((RageAmulet) r).onSpecificTrigger(); + } + } + + atb(new RemoveSpecificPowerAction(AbstractDungeon.player, AbstractDungeon.player, VigorPower.POWER_ID)); } public void upgrade() { diff --git a/src/main/java/theHexaghost/cards/EtherealExpedition.java b/src/main/java/theHexaghost/cards/EtherealExpedition.java index dead2ee4a..b77dd6a1f 100644 --- a/src/main/java/theHexaghost/cards/EtherealExpedition.java +++ b/src/main/java/theHexaghost/cards/EtherealExpedition.java @@ -49,7 +49,21 @@ public static AbstractCard returnTrulyRandomEtherealCardInCombat() { } } if (list.isEmpty()) { + //Since this card can show up on Snecko, and Snecko obviously doesn't have any afterlife + //cards in their pool, ALL of these cards need to be added here, and not just Power from Beyond. + list.add(new Hexaguard()); + list.add(new NightmareGuise()); + list.add(new NightmareStrike()); + list.add(new SpectersWail()); + list.add(new BurningQuestion()); + list.add(new EtherealExpedition()); + list.add(new FlamesFromBeyond()); + list.add(new Floatwork()); + list.add(new GhostLash()); + list.add(new GhostShield()); + list.add(new Haunt()); list.add(new PowerFromBeyond()); + list.add(new EtherStep()); } return list.get(cardRandomRng.random(list.size() - 1)); } diff --git a/src/main/java/theHexaghost/cards/ExtraCrispy.java b/src/main/java/theHexaghost/cards/ExtraCrispy.java index f52bab4c3..c408bfe8b 100644 --- a/src/main/java/theHexaghost/cards/ExtraCrispy.java +++ b/src/main/java/theHexaghost/cards/ExtraCrispy.java @@ -13,7 +13,7 @@ public class ExtraCrispy extends AbstractHexaCard { public ExtraCrispy() { super(ID, 1, CardType.POWER, CardRarity.UNCOMMON, CardTarget.SELF); - baseMagicNumber = magicNumber = 10; + baseMagicNumber = magicNumber = 12; HexaMod.loadJokeCardImage(this, "ExtraCrispy.png"); } diff --git a/src/main/java/theHexaghost/cards/FastForward.java b/src/main/java/theHexaghost/cards/FastForward.java index fe93286e7..4353a2a26 100644 --- a/src/main/java/theHexaghost/cards/FastForward.java +++ b/src/main/java/theHexaghost/cards/FastForward.java @@ -3,6 +3,7 @@ import com.megacrit.cardcrawl.actions.common.DrawCardAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; import theHexaghost.HexaMod; import theHexaghost.actions.AdvanceAction; @@ -12,6 +13,8 @@ public class FastForward extends AbstractHexaCard { public FastForward() { super(ID, 1, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); this.baseMagicNumber = this.magicNumber = 2; + tags.add(HexaMod.GHOSTWHEELCARD); + this.tags.add(SneckoMod.BANNEDFORSNECKO); HexaMod.loadJokeCardImage(this, "FastForward.png"); } diff --git a/src/main/java/theHexaghost/cards/FlameDevourer.java b/src/main/java/theHexaghost/cards/FlameDevourer.java index 8fc1add9e..00a2324e1 100644 --- a/src/main/java/theHexaghost/cards/FlameDevourer.java +++ b/src/main/java/theHexaghost/cards/FlameDevourer.java @@ -3,6 +3,7 @@ import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; import theHexaghost.GhostflameHelper; import theHexaghost.HexaMod; import theHexaghost.actions.RetractAction; @@ -13,6 +14,8 @@ public class FlameDevourer extends AbstractHexaCard{ public FlameDevourer() { super(ID, 0, CardType.SKILL, AbstractCard.CardRarity.COMMON, AbstractCard.CardTarget.SELF); baseBlock = 9; + tags.add(HexaMod.GHOSTWHEELCARD); + this.tags.add(SneckoMod.BANNEDFORSNECKO); HexaMod.loadJokeCardImage(this, "FlameDevourer.png"); } @@ -45,8 +48,8 @@ public FlameDevourer() { public void use(AbstractPlayer p, AbstractMonster m) { if((GhostflameHelper.getPreviousGhostFlame()).charged) { blck(); + atb(new RetractAction()); } - atb(new RetractAction()); } public void triggerOnGlowCheck() { diff --git a/src/main/java/theHexaghost/cards/FlameSwitch.java b/src/main/java/theHexaghost/cards/FlameSwitch.java index 40c34b92c..6680255e0 100644 --- a/src/main/java/theHexaghost/cards/FlameSwitch.java +++ b/src/main/java/theHexaghost/cards/FlameSwitch.java @@ -6,6 +6,7 @@ import downfall.actions.OctoChoiceAction; import downfall.cards.OctoChoiceCard; import downfall.util.OctopusCard; +import sneckomod.SneckoMod; import theHexaghost.GhostflameHelper; import theHexaghost.HexaMod; import theHexaghost.ghostflames.AbstractGhostflame; @@ -24,6 +25,8 @@ public FlameSwitch() { // baseBurn = burn = 16; baseMagicNumber = magicNumber = 1; exhaust = true; + tags.add(HexaMod.GHOSTWHEELCARD); + this.tags.add(SneckoMod.BANNEDFORSNECKO); HexaMod.loadJokeCardImage(this, "FlameSwitch.png"); } diff --git a/src/main/java/theHexaghost/cards/Floatwork.java b/src/main/java/theHexaghost/cards/Floatwork.java index 5d682515a..a4f06b4e9 100644 --- a/src/main/java/theHexaghost/cards/Floatwork.java +++ b/src/main/java/theHexaghost/cards/Floatwork.java @@ -3,6 +3,7 @@ import com.megacrit.cardcrawl.actions.common.ExhaustSpecificCardAction; import com.megacrit.cardcrawl.actions.common.GainBlockAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.DexterityPower; @@ -46,7 +47,7 @@ public void upgrade() { if (!upgraded) { upgradeName(); // upgradeBlock(2); - upgradeMagicNumber(2); + upgradeMagicNumber(1); } } @@ -60,5 +61,15 @@ public void initializeDescription() { super.initializeDescription(); String afterlife_name = downfallMod.keywords_and_proper_names.get("afterlife"); this.keywords.add(afterlife_name); + + if (Settings.language == Settings.GameLanguage.ZHS){ + this.keywords.add("多层护甲"); + }else if (Settings.language == Settings.GameLanguage.RUS){ + this.keywords.add("plated"); + }else{ + this.keywords.add("plated"); + } + + } } \ No newline at end of file diff --git a/src/main/java/theHexaghost/cards/ForkedFlame.java b/src/main/java/theHexaghost/cards/ForkedFlame.java index 7b2bc8a3a..427a621b1 100644 --- a/src/main/java/theHexaghost/cards/ForkedFlame.java +++ b/src/main/java/theHexaghost/cards/ForkedFlame.java @@ -16,7 +16,9 @@ public class ForkedFlame extends AbstractHexaCard { public ForkedFlame() { super(ID, 1, CardType.ATTACK, CardRarity.RARE, CardTarget.ENEMY); - baseDamage = 5; + baseDamage = 4; + tags.add(HexaMod.GHOSTWHEELCARD); + this.tags.add(SneckoMod.BANNEDFORSNECKO); HexaMod.loadJokeCardImage(this, "ForkedFlame.png"); } @@ -31,7 +33,7 @@ public void use(AbstractPlayer p, AbstractMonster m) { public void upgrade() { if (!upgraded) { upgradeName(); - upgradeDamage(3); + upgradeDamage(4); } } } \ No newline at end of file diff --git a/src/main/java/theHexaghost/cards/GhostLash.java b/src/main/java/theHexaghost/cards/GhostLash.java index ab23046b3..cdbeb6800 100644 --- a/src/main/java/theHexaghost/cards/GhostLash.java +++ b/src/main/java/theHexaghost/cards/GhostLash.java @@ -1,11 +1,18 @@ package theHexaghost.cards; +import champ.powers.GladiatorFormPower; +import champ.relics.RageAmulet; import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.ReducePowerAction; +import com.megacrit.cardcrawl.actions.common.RemoveSpecificPowerAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.watcher.VigorPower; +import com.megacrit.cardcrawl.relics.AbstractRelic; import downfall.downfallMod; +import gremlin.relics.FragmentationGrenade; import theHexaghost.HexaMod; import theHexaghost.util.HexaPurpleTextInterface; @@ -13,15 +20,13 @@ public class GhostLash extends AbstractHexaCard implements HexaPurpleTextInterfa public final static String ID = makeID("GhostLash"); - private static final int DAMAGE = 10; - private static final int UPG_DAMAGE = 2; private static int ethereal_inhand = 0; private boolean can_show = false; private boolean trigger_by_afterlife = false; public GhostLash() { super(ID, 1, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); - baseDamage = DAMAGE; + baseDamage = 8; baseMagicNumber = magicNumber = 3; isEthereal = true; tags.add(HexaMod.AFTERLIFE); @@ -76,6 +81,12 @@ public void afterlife() { AbstractMonster m = AbstractDungeon.getRandomMonster(); if (m == null) return; this.calculateCardDamage(m); + + if (AbstractDungeon.player.hasRelic(FragmentationGrenade.ID)) { + AbstractDungeon.player.getRelic(FragmentationGrenade.ID).flash(); + this.damage = this.damage + FragmentationGrenade.OOMPH; + } + if(AbstractDungeon.player.hasPower("Pen Nib") ){ this.damage /= 2; dmg(m, makeInfo(), AbstractGameAction.AttackEffect.SLASH_HEAVY); @@ -84,12 +95,34 @@ public void afterlife() { dmg(m, makeInfo(), AbstractGameAction.AttackEffect.SLASH_HEAVY); } this.can_show = false; + + if (AbstractDungeon.player.hasRelic(FragmentationGrenade.ID)) { + AbstractDungeon.player.getRelic(FragmentationGrenade.ID).flash(); + this.damage = this.damage - FragmentationGrenade.OOMPH; + } + + + if (AbstractDungeon.player.hasPower(GladiatorFormPower.POWER_ID)) { + GladiatorFormPower revengePower = (GladiatorFormPower) AbstractDungeon.player.getPower(GladiatorFormPower.POWER_ID); + + if (revengePower != null) { + revengePower.onSpecificTriggerBranch(); + } + } + + for (AbstractRelic r : AbstractDungeon.player.relics) { + if (r instanceof RageAmulet) { + ((RageAmulet) r).onSpecificTrigger(); + } + } + + atb(new RemoveSpecificPowerAction(AbstractDungeon.player, AbstractDungeon.player, VigorPower.POWER_ID)); } public void upgrade() { if (!upgraded) { upgradeName(); - upgradeDamage(UPG_DAMAGE); + upgradeDamage(2); upgradeMagicNumber(1); } } diff --git a/src/main/java/theHexaghost/cards/GhostShield.java b/src/main/java/theHexaghost/cards/GhostShield.java index a66c55763..c728a48bc 100644 --- a/src/main/java/theHexaghost/cards/GhostShield.java +++ b/src/main/java/theHexaghost/cards/GhostShield.java @@ -1,10 +1,14 @@ package theHexaghost.cards; +import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.helpers.GameDictionary; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.BlurPower; import downfall.downfallMod; +import expansioncontent.expansionContentMod; import theHexaghost.HexaMod; import theHexaghost.util.HexaPurpleTextInterface; @@ -22,7 +26,7 @@ public GhostShield() { baseMagicNumber = magicNumber = MAGIC; isEthereal = true; tags.add(HexaMod.AFTERLIFE); - HexaMod.loadJokeCardImage(this, "GhostShield.png"); + expansionContentMod.loadJokeCardImage((AbstractCard)this, "GhostShield.png"); } public void use(AbstractPlayer p, AbstractMonster m) { @@ -52,6 +56,6 @@ public void initializeDescription() { super.initializeDescription(); String afterlife_name = downfallMod.keywords_and_proper_names.get("afterlife"); this.keywords.add(afterlife_name); - } - -} + this.keywords.add(GameDictionary.BLOCK.NAMES[0].toLowerCase()); + } + } diff --git a/src/main/java/theHexaghost/cards/GhostflameBarrier.java b/src/main/java/theHexaghost/cards/GhostflameBarrier.java index 6170350dc..fb1dd46cc 100644 --- a/src/main/java/theHexaghost/cards/GhostflameBarrier.java +++ b/src/main/java/theHexaghost/cards/GhostflameBarrier.java @@ -9,22 +9,12 @@ import theHexaghost.powers.SoulburnOnExhaustPower; public class GhostflameBarrier extends AbstractHexaCard { - public final static String ID = makeID("WhisperFromBeyond"); - - private static final int DAMAGE = 10; -// private static final int UPG_BLOCK = 4; - - private static final int MAGIC = 5; - private static final int UPG_MAGIC = 2; - public GhostflameBarrier() { - super(ID, 1, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); -// baseBlock = BLOCK; - baseDamage = DAMAGE; -// baseMagicNumber = magicNumber = MAGIC; - baseBurn = burn = MAGIC; + super(ID, 2, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); + baseDamage = 12; + baseBurn = burn = 5; HexaMod.loadJokeCardImage(this, "GhostflameBarrier.png"); } @@ -44,9 +34,8 @@ public void use(AbstractPlayer p, AbstractMonster m) { public void upgrade() { if (!upgraded) { upgradeName(); -// upgradeBlock(UPG_BLOCK); - upgradeDamage(2); - upgradeBurn(UPG_MAGIC); + upgradeDamage(3); + upgradeBurn(2); } } diff --git a/src/main/java/theHexaghost/cards/HauntingEcho.java b/src/main/java/theHexaghost/cards/HauntingEcho.java index 19cd0640c..d89b5cf73 100644 --- a/src/main/java/theHexaghost/cards/HauntingEcho.java +++ b/src/main/java/theHexaghost/cards/HauntingEcho.java @@ -18,7 +18,7 @@ public class HauntingEcho extends AbstractHexaCard { public final static String ID = makeID("HauntingEcho"); - private static final int DAMAGE = 9; + private static final int DAMAGE = 8; private static final int UPG_DAMAGE = 3; public HauntingEcho() { diff --git a/src/main/java/theHexaghost/cards/HexaLevel.java b/src/main/java/theHexaghost/cards/HexaLevel.java index 14da0a117..915af9cb5 100644 --- a/src/main/java/theHexaghost/cards/HexaLevel.java +++ b/src/main/java/theHexaghost/cards/HexaLevel.java @@ -10,7 +10,7 @@ public class HexaLevel extends AbstractHexaCard { - public final static String ID = makeID("InfernalForm"); + public final static String ID = makeID("HexaLevel"); //infernal form diff --git a/src/main/java/theHexaghost/cards/Hexaguard.java b/src/main/java/theHexaghost/cards/Hexaguard.java index 1567d34dd..e598b62f2 100644 --- a/src/main/java/theHexaghost/cards/Hexaguard.java +++ b/src/main/java/theHexaghost/cards/Hexaguard.java @@ -2,7 +2,9 @@ import com.megacrit.cardcrawl.actions.common.DrawCardAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.helpers.GameDictionary; import com.megacrit.cardcrawl.monsters.AbstractMonster; import downfall.downfallMod; import theHexaghost.HexaMod; @@ -50,5 +52,6 @@ public void initializeDescription() { super.initializeDescription(); String afterlife_name = downfallMod.keywords_and_proper_names.get("afterlife"); this.keywords.add(afterlife_name); - } -} \ No newline at end of file + this.keywords.add(GameDictionary.BLOCK.NAMES[0].toLowerCase()); + } + } \ No newline at end of file diff --git a/src/main/java/theHexaghost/cards/Incineration.java b/src/main/java/theHexaghost/cards/Incineration.java index ca178131b..414e3bee4 100644 --- a/src/main/java/theHexaghost/cards/Incineration.java +++ b/src/main/java/theHexaghost/cards/Incineration.java @@ -9,15 +9,16 @@ import theHexaghost.HexaMod; import gremlin.actions.PseudoDamageRandomEnemyAction; import theHexaghost.powers.BurnPower; +import theHexaghost.relics.CandleOfCauterizing; public class Incineration extends AbstractHexaCard { public final static String ID = makeID("Incineration"); public Incineration() { - super(ID, 2, CardType.ATTACK, CardRarity.RARE, CardTarget.ENEMY); - baseDamage = 5; - baseBurn = burn = 5; + super(ID, 2, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); + baseDamage = 4; + baseBurn = burn = 4; baseMagicNumber = magicNumber = 3; HexaMod.loadJokeCardImage(this, "Incineration.png"); } diff --git a/src/main/java/theHexaghost/cards/LingeringShades.java b/src/main/java/theHexaghost/cards/LingeringShades.java index 6cb2e0e19..7c748417a 100644 --- a/src/main/java/theHexaghost/cards/LingeringShades.java +++ b/src/main/java/theHexaghost/cards/LingeringShades.java @@ -3,6 +3,7 @@ import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; import theHexaghost.HexaMod; import theHexaghost.actions.AllEtherealToHandAction; import theHexaghost.actions.RetractAction; @@ -15,6 +16,8 @@ public LingeringShades() { super(ID, 1, AbstractCard.CardType.SKILL, AbstractCard.CardRarity.RARE, AbstractCard.CardTarget.ENEMY); baseBurn = burn = 11; HexaMod.loadJokeCardImage(this, "LingeringShades.png"); + tags.add(HexaMod.GHOSTWHEELCARD); + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/theHexaghost/cards/MatchstickFloat.java b/src/main/java/theHexaghost/cards/MatchstickFloat.java new file mode 100644 index 000000000..30289326c --- /dev/null +++ b/src/main/java/theHexaghost/cards/MatchstickFloat.java @@ -0,0 +1,76 @@ +package theHexaghost.cards; + +import com.megacrit.cardcrawl.actions.animations.AnimateHopAction; +import com.megacrit.cardcrawl.actions.common.DrawCardAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import downfall.actions.OctoChoiceAction; +import downfall.cards.OctoChoiceCard; +import downfall.util.OctopusCard; +import sneckomod.SneckoMod; +import theHexaghost.HexaMod; +import theHexaghost.actions.AdvanceAction; +import theHexaghost.actions.RetractAction; +import basemod.patches.com.megacrit.cardcrawl.screens.compendium.CardLibraryScreen.NoCompendium; + +import java.util.ArrayList; +@NoCompendium +public class MatchstickFloat extends AbstractHexaCard implements OctopusCard { + +//This card exists for the sake of tracking what Sneaky Teakwood Match does. It shouldn't be encountered in a run. If a player reported this, that means there's a bug. + + public final static String ID = makeID("MatchstickFloat"); + + public MatchstickFloat() { + super(ID, 0, CardType.SKILL, CardRarity.SPECIAL, CardTarget.SELF); + tags.add(HexaMod.GHOSTWHEELCARD); + this.tags.add(SneckoMod.BANNEDFORSNECKO); + HexaMod.loadJokeCardImage(this, "Float.png"); + } + + public ArrayList choiceList() { + + ArrayList cardList = new ArrayList<>(); + cardList.add(new OctoChoiceCard("octo:OctoRetractM", this.name, HexaMod.makeCardPath("Float.png"), this.EXTENDED_DESCRIPTION[1])); + cardList.add(new OctoChoiceCard("octo:OctoNothingM", this.name, HexaMod.makeCardPath("Float.png"), this.EXTENDED_DESCRIPTION[2])); + cardList.add(new OctoChoiceCard("octo:OctoAdvanceM", this.name, HexaMod.makeCardPath("Float.png"), this.EXTENDED_DESCRIPTION[0])); + + return cardList; + } + + public void doChoiceStuff(AbstractMonster m, OctoChoiceCard card) { + switch (card.cardID) { + case "octo:OctoAdvanceM": + atb(new AdvanceAction(false)); + System.out.println("DEBUG: Used MatchstickCase to Advance."); + break; + case "octo:OctoRetractM": + atb(new RetractAction()); + System.out.println("DEBUG: Used MatchstickCase to Retract."); + break; + case "octo:OctoNothingM": + System.out.println("DEBUG: Did nothing with MatchstickCase."); + break; + } + + } + + public void use(AbstractPlayer p, AbstractMonster m) { + atb(new AnimateHopAction(p)); + atb(new DrawCardAction(1)); + if (upgraded) { + atb(new OctoChoiceAction(m, this)); + } else { + atb(new AdvanceAction(false)); + } + } + + public void upgrade() { + if (!upgraded) { + // upgradeName(); + + rawDescription = UPGRADE_DESCRIPTION; + initializeDescription(); + } + } +} \ No newline at end of file diff --git a/src/main/java/theHexaghost/cards/NightmareGuise.java b/src/main/java/theHexaghost/cards/NightmareGuise.java index 6d85a3a33..a5dc71b97 100644 --- a/src/main/java/theHexaghost/cards/NightmareGuise.java +++ b/src/main/java/theHexaghost/cards/NightmareGuise.java @@ -15,7 +15,7 @@ public class NightmareGuise extends AbstractHexaCard implements HexaPurpleTextIn public NightmareGuise() { super(ID, 1, CardType.SKILL, CardRarity.COMMON, CardTarget.SELF); - baseBlock = 2; + baseBlock = 3; isEthereal = true; cardsToPreview = new ShadowGuise(); tags.add(HexaMod.AFTERLIFE); diff --git a/src/main/java/theHexaghost/cards/OpposingAction.java b/src/main/java/theHexaghost/cards/OpposingAction.java index 5f9ebf6ca..e31b7acb4 100644 --- a/src/main/java/theHexaghost/cards/OpposingAction.java +++ b/src/main/java/theHexaghost/cards/OpposingAction.java @@ -6,6 +6,7 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.ui.panels.EnergyPanel; +import sneckomod.SneckoMod; import theHexaghost.HexaMod; import theHexaghost.actions.RetractAction; @@ -15,31 +16,18 @@ public class OpposingAction extends AbstractHexaCard{ public OpposingAction() { super(ID, 0, CardType.SKILL, CardRarity.UNCOMMON, AbstractCard.CardTarget.SELF); HexaMod.loadJokeCardImage(this, "OpposingAction.png"); + tags.add(HexaMod.GHOSTWHEELCARD); + this.tags.add(SneckoMod.BANNEDFORSNECKO); + this.exhaust = true; } public void use(AbstractPlayer p, AbstractMonster m) { - -// if (this.energyOnUse < EnergyPanel.totalCount) { -// this.energyOnUse = EnergyPanel.totalCount; -// } -// if (p.hasRelic("Chemical X")) { -// this.energyOnUse += 2; -// p.getRelic("Chemical X").flash(); -// } -// -// int times = this.energyOnUse; -// if(upgraded){times += 1;} -// -// for (int i = 0; i < times; i++) { -// atb(new DrawCardAction(1)); -// } atb(new RetractAction(1)); -// if (!this.freeToPlayOnce) { -// p.energy.use(EnergyPanel.totalCount); -// } - atb(new GainEnergyAction(1)); - if(upgraded) atb(new GainEnergyAction(1)); + if(!upgraded) + atb(new GainEnergyAction(2)); + else + atb(new GainEnergyAction(3)); } public void upgrade() { diff --git a/src/main/java/theHexaghost/cards/PowerFromBeyond.java b/src/main/java/theHexaghost/cards/PowerFromBeyond.java index b26ef7d42..9351fe9ac 100644 --- a/src/main/java/theHexaghost/cards/PowerFromBeyond.java +++ b/src/main/java/theHexaghost/cards/PowerFromBeyond.java @@ -27,7 +27,6 @@ public PowerFromBeyond() { @Override public void afterlife() { -// applyToSelf(new EnergizedBluePower(AbstractDungeon.player, 1)); applyToSelf(new DrawCardNextTurnPower(AbstractDungeon.player, magicNumber)); } diff --git a/src/main/java/theHexaghost/cards/RadiantFlame.java b/src/main/java/theHexaghost/cards/RadiantFlame.java index 045901588..a47a31b32 100644 --- a/src/main/java/theHexaghost/cards/RadiantFlame.java +++ b/src/main/java/theHexaghost/cards/RadiantFlame.java @@ -7,36 +7,33 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; -import downfall.powers.gauntletpowers.MonsterVigor; -import theHexaghost.GhostflameHelper; import theHexaghost.HexaMod; import sneckomod.SneckoMod; import theHexaghost.powers.BurnPower; import theHexaghost.powers.EnhancePower; -import theHexaghost.powers.HexalevelPower; public class RadiantFlame extends AbstractHexaCard { public final static String ID = makeID("RadiantFlame"); public RadiantFlame() { - super(ID, 1, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); - baseDamage = damage = 10; + super(ID, 0, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); + baseDamage = damage = 4; baseMagicNumber = magicNumber = 2; this.tags.add(SneckoMod.BANNEDFORSNECKO); HexaMod.loadJokeCardImage(this, "RadiantFlame.png"); } public void triggerOnGlowCheck() { - this.glowColor = AbstractCard.BLUE_BORDER_GLOW_COLOR; - if (AbstractDungeon.getCurrRoom().monsters != null) - for (AbstractMonster m : AbstractDungeon.getCurrRoom().monsters.monsters) { + for (AbstractMonster m : AbstractDungeon.getMonsters().monsters) { if (!m.isDeadOrEscaped() && m.hasPower(BurnPower.POWER_ID)) { this.glowColor = AbstractCard.GOLD_BORDER_GLOW_COLOR; - break; + return; } } + + this.glowColor = AbstractCard.BLUE_BORDER_GLOW_COLOR; } public void use(AbstractPlayer p, AbstractMonster m) { @@ -51,7 +48,6 @@ public void update() { this.isDone = true; } }); -// applyToSelf(new RadiantPower(magicNumber)); } public void upgrade() { diff --git a/src/main/java/theHexaghost/cards/RainOfEmbers.java b/src/main/java/theHexaghost/cards/RainOfEmbers.java index 72a257cc0..a51e40a1a 100644 --- a/src/main/java/theHexaghost/cards/RainOfEmbers.java +++ b/src/main/java/theHexaghost/cards/RainOfEmbers.java @@ -1,11 +1,8 @@ package theHexaghost.cards; -import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; -import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; import theHexaghost.HexaMod; -import com.megacrit.cardcrawl.powers.WeakPower; import com.megacrit.cardcrawl.ui.panels.EnergyPanel; import theHexaghost.actions.EmbersAction; import downfall.actions.PerformXAction; @@ -26,22 +23,15 @@ public void use(AbstractPlayer p, AbstractMonster m) { if (energyOnUse < EnergyPanel.totalCount) { energyOnUse = EnergyPanel.totalCount; } - if(upgraded){ - EmbersAction r = new EmbersAction(1, p, m, damage, damageTypeForTurn, 0, 1); - atb(new PerformXAction(r, p, energyOnUse, freeToPlayOnce)); - }else { - EmbersAction r = new EmbersAction(0, p, m, damage, damageTypeForTurn, 0, 1); - atb(new PerformXAction(r, p, energyOnUse, freeToPlayOnce)); - } + + EmbersAction r = new EmbersAction(0, p, m, damage, damageTypeForTurn, 0, 1); + atb(new PerformXAction(r, p, energyOnUse, freeToPlayOnce)); } public void upgrade() { if (!upgraded) { upgradeName(); - rawDescription = UPGRADE_DESCRIPTION; - initializeDescription(); -// upgradeDamage(3); -// upgradeBurn(2); + upgradeDamage(3); } } } \ No newline at end of file diff --git a/src/main/java/theHexaghost/cards/RecurringNightmare.java b/src/main/java/theHexaghost/cards/RecurringNightmare.java index 29a20d39e..99f49d91e 100644 --- a/src/main/java/theHexaghost/cards/RecurringNightmare.java +++ b/src/main/java/theHexaghost/cards/RecurringNightmare.java @@ -2,6 +2,7 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; import theHexaghost.HexaMod; import downfall.util.CardIgnore; import theHexaghost.actions.RecurringNightmareAction; @@ -15,6 +16,8 @@ public RecurringNightmare() { super(ID, 0, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); exhaust = true; baseMagicNumber = magicNumber = 1; + tags.add(HexaMod.GHOSTWHEELCARD); + this.tags.add(SneckoMod.BANNEDFORSNECKO); // tags.add(CardTags.HEALING); HexaMod.loadJokeCardImage(this, "RecurringNightmare.png"); } diff --git a/src/main/java/theHexaghost/cards/RetreatToShadows.java b/src/main/java/theHexaghost/cards/RetreatToShadows.java index 77673201a..73ac13b1e 100644 --- a/src/main/java/theHexaghost/cards/RetreatToShadows.java +++ b/src/main/java/theHexaghost/cards/RetreatToShadows.java @@ -3,6 +3,7 @@ import com.megacrit.cardcrawl.actions.common.LoseHPAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; import theHexaghost.HexaMod; import com.megacrit.cardcrawl.powers.IntangiblePlayerPower; import theHexaghost.actions.RetractAction; @@ -11,13 +12,15 @@ public class RetreatToShadows extends AbstractHexaCard { public final static String ID = makeID("Incorporeal"); - private static final int MAGIC = 5; - private static final int UPG_MAGIC = -2; + private static final int MAGIC = 6; + private static final int UPG_MAGIC = -3; public RetreatToShadows() { - super(ID, 0, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); + super(ID, 0, CardType.SKILL, CardRarity.RARE, CardTarget.SELF); baseMagicNumber = magicNumber = MAGIC; exhaust = true; + tags.add(HexaMod.GHOSTWHEELCARD); + this.tags.add(SneckoMod.BANNEDFORSNECKO); HexaMod.loadJokeCardImage(this, "RetreatToShadows.png"); } diff --git a/src/main/java/theHexaghost/cards/Rewind.java b/src/main/java/theHexaghost/cards/Rewind.java index 0776b5c8a..d09f3ee50 100644 --- a/src/main/java/theHexaghost/cards/Rewind.java +++ b/src/main/java/theHexaghost/cards/Rewind.java @@ -19,6 +19,8 @@ public Rewind() { super(ID, 0, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); baseMagicNumber = magicNumber = 1; this.exhaust = true; + tags.add(HexaMod.GHOSTWHEELCARD); + this.tags.add(SneckoMod.BANNEDFORSNECKO); HexaMod.loadJokeCardImage(this, "Rewind.png"); } diff --git a/src/main/java/theHexaghost/cards/Sear.java b/src/main/java/theHexaghost/cards/Sear.java index ee02ce16b..fa9cb661b 100644 --- a/src/main/java/theHexaghost/cards/Sear.java +++ b/src/main/java/theHexaghost/cards/Sear.java @@ -16,8 +16,8 @@ public class Sear extends AbstractHexaCard implements HexaPurpleTextInterface { public Sear() { super(ID, 1, CardType.ATTACK, CardRarity.BASIC, CardTarget.ENEMY); - baseDamage = damage = 6; - baseBurn = burn = 6; + baseDamage = damage = 5; + baseBurn = burn = 5; isEthereal = true; tags.add(HexaMod.AFTERLIFE); HexaMod.loadJokeCardImage(this, "Sear.png"); diff --git a/src/main/java/theHexaghost/cards/SeventhEye.java b/src/main/java/theHexaghost/cards/SeventhEye.java index 407498604..ef50cb40b 100644 --- a/src/main/java/theHexaghost/cards/SeventhEye.java +++ b/src/main/java/theHexaghost/cards/SeventhEye.java @@ -4,7 +4,9 @@ import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; import theHexaghost.HexaMod; +import theHexaghost.actions.RandomFlameAction; public class SeventhEye extends AbstractHexaCard { @@ -13,6 +15,8 @@ public class SeventhEye extends AbstractHexaCard { public SeventhEye() { super(ID, 1, AbstractCard.CardType.SKILL, CardRarity.UNCOMMON, AbstractCard.CardTarget.SELF); this.exhaust = true; + tags.add(HexaMod.GHOSTWHEELCARD); + this.tags.add(SneckoMod.BANNEDFORSNECKO); HexaMod.loadJokeCardImage(this, "SeventhEye.png"); } diff --git a/src/main/java/theHexaghost/cards/ShadowGuise.java b/src/main/java/theHexaghost/cards/ShadowGuise.java index 4f3511ed4..2e8b7d32b 100644 --- a/src/main/java/theHexaghost/cards/ShadowGuise.java +++ b/src/main/java/theHexaghost/cards/ShadowGuise.java @@ -20,9 +20,10 @@ public class ShadowGuise extends AbstractHexaCard { private AbstractCard parent; + //Shadow Guise public ShadowGuise(AbstractCard parent) { super(ID, 0, CardType.SKILL, CardRarity.SPECIAL, CardTarget.SELF, CardColor.COLORLESS); - baseBlock = 6; + baseBlock = 5; selfRetain = true; exhaust = true; // setParent(parent); diff --git a/src/main/java/theHexaghost/cards/ShieldOfDarkness.java b/src/main/java/theHexaghost/cards/ShieldOfDarkness.java index 1d6a5f4c4..73c485c10 100644 --- a/src/main/java/theHexaghost/cards/ShieldOfDarkness.java +++ b/src/main/java/theHexaghost/cards/ShieldOfDarkness.java @@ -23,7 +23,7 @@ public ShieldOfDarkness() { super(ID, 2, CardType.SKILL, CardRarity.COMMON, CardTarget.SELF); baseBlock = BLOCK; baseMagicNumber = magicNumber = 3; - this.tags.add(SneckoMod.BANNEDFORSNECKO); + //this.tags.add(SneckoMod.BANNEDFORSNECKO); HexaMod.loadJokeCardImage(this, "ShieldOfDarkness.png"); } diff --git a/src/main/java/theHexaghost/cards/SpectersWail.java b/src/main/java/theHexaghost/cards/SpectersWail.java index dc538e0c4..913885fae 100644 --- a/src/main/java/theHexaghost/cards/SpectersWail.java +++ b/src/main/java/theHexaghost/cards/SpectersWail.java @@ -1,10 +1,13 @@ package theHexaghost.cards; +import champ.powers.GladiatorFormPower; +import champ.relics.RageAmulet; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.math.MathUtils; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.animations.VFXAction; import com.megacrit.cardcrawl.actions.common.DamageAllEnemiesAction; +import com.megacrit.cardcrawl.actions.common.ReducePowerAction; import com.megacrit.cardcrawl.actions.common.RemoveSpecificPowerAction; import com.megacrit.cardcrawl.actions.utility.SFXAction; import com.megacrit.cardcrawl.cards.AbstractCard; @@ -12,7 +15,9 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.StrengthPower; import com.megacrit.cardcrawl.powers.watcher.VigorPower; +import com.megacrit.cardcrawl.relics.AbstractRelic; import com.megacrit.cardcrawl.vfx.combat.ShockWaveEffect; import downfall.downfallMod; import theHexaghost.HexaMod; @@ -60,6 +65,21 @@ public void afterlife() { }else { AbstractDungeon.actionManager.addToBottom(new DamageAllEnemiesAction(p, DamageInfo.createDamageMatrix(this.baseDamage), DamageInfo.DamageType.NORMAL, AbstractGameAction.AttackEffect.FIRE)); } + + if (AbstractDungeon.player.hasPower(GladiatorFormPower.POWER_ID)) { + GladiatorFormPower revengePower = (GladiatorFormPower) AbstractDungeon.player.getPower(GladiatorFormPower.POWER_ID); + + if (revengePower != null) { + revengePower.onSpecificTriggerBranch(); + } + } + + for (AbstractRelic r : AbstractDungeon.player.relics) { + if (r instanceof RageAmulet) { + ((RageAmulet) r).onSpecificTrigger(); + } + } + atb(new RemoveSpecificPowerAction(AbstractDungeon.player, AbstractDungeon.player, VigorPower.POWER_ID)); } diff --git a/src/main/java/theHexaghost/cards/SpectralGrace.java b/src/main/java/theHexaghost/cards/SpectralGrace.java index a42d86992..1514cfab3 100644 --- a/src/main/java/theHexaghost/cards/SpectralGrace.java +++ b/src/main/java/theHexaghost/cards/SpectralGrace.java @@ -11,7 +11,7 @@ public class SpectralGrace extends AbstractHexaCard{ public final static String ID = makeID("SpectralGrace"); - private static final int DAMAGE = 14; + private static final int DAMAGE = 13; private static final int UPG_DAMAGE = 4; private static final int MAGIC = 2; private static final int UPG_MAGIC = -1; diff --git a/src/main/java/theHexaghost/cards/SpectralSpark.java b/src/main/java/theHexaghost/cards/SpectralSpark.java index 71062b3ea..a820df0dd 100644 --- a/src/main/java/theHexaghost/cards/SpectralSpark.java +++ b/src/main/java/theHexaghost/cards/SpectralSpark.java @@ -14,7 +14,7 @@ public class SpectralSpark extends AbstractHexaCard { public final static String ID = makeID("NaughtySpirit"); - private static final int MAGIC = 6; + private static final int MAGIC = 4; public SpectralSpark() { super(ID, 0, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.ENEMY); @@ -37,13 +37,12 @@ public void update() { public void update() { isDone = true; NoDiscardField.noDiscard.set(c, true); + atb(new RetractAction()); } }); } } }); - - atb(new RetractAction()); } public void triggerOnGlowCheck() { @@ -53,7 +52,7 @@ public void triggerOnGlowCheck() { public void upgrade() { if (!upgraded) { upgradeName(); - upgradeBurn(3); + upgradeBurn(2); } } } \ No newline at end of file diff --git a/src/main/java/theHexaghost/cards/StepThrough.java b/src/main/java/theHexaghost/cards/StepThrough.java index 92ee46f33..88fd32931 100644 --- a/src/main/java/theHexaghost/cards/StepThrough.java +++ b/src/main/java/theHexaghost/cards/StepThrough.java @@ -19,7 +19,7 @@ public class StepThrough extends AbstractHexaCard { //stupid intellij stuff ATTACK, SELF_AND_ENEMY, UNCOMMON - private static final int DAMAGE = 8; + private static final int DAMAGE = 7; private static final int UPG_DAMAGE = 3; public StepThrough() { diff --git a/src/main/java/theHexaghost/cards/StrikeFromBeyond.java b/src/main/java/theHexaghost/cards/StrikeFromBeyond.java index e5660022f..2055b7db3 100644 --- a/src/main/java/theHexaghost/cards/StrikeFromBeyond.java +++ b/src/main/java/theHexaghost/cards/StrikeFromBeyond.java @@ -6,46 +6,41 @@ import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import expansioncontent.actions.DrawSpecificAction; import theHexaghost.GhostflameHelper; import theHexaghost.HexaMod; import theHexaghost.actions.DrawEtherealAction; public class StrikeFromBeyond extends AbstractHexaCard { - public final static String ID = makeID("StrikeFromBeyond"); - private static final int DAMAGE = 4; - private static final int MAGIC = 2; - private static final int UPG_DAMAGE = 3; - public StrikeFromBeyond() { super(ID, 0, CardType.ATTACK, CardRarity.COMMON, CardTarget.SELF_AND_ENEMY); - baseDamage = DAMAGE; + baseDamage = 4; this.tags.add(CardTags.STRIKE); HexaMod.loadJokeCardImage(this, "StrikeFromBeyond.png"); } public void use(AbstractPlayer p, AbstractMonster m) { dmg(m, makeInfo(), AbstractGameAction.AttackEffect.FIRE); - atb(new DrawEtherealAction(1)); + atb(new DrawSpecificAction(1, c -> c.isEthereal)); } public void triggerOnGlowCheck() { - boolean has_ethereal_in_draw_pile = false; for(AbstractCard c : AbstractDungeon.player.drawPile.group){ if(c.isEthereal){ - has_ethereal_in_draw_pile = true; - break; + this.glowColor = AbstractCard.GOLD_BORDER_GLOW_COLOR; + return; } } - this.glowColor = has_ethereal_in_draw_pile ? AbstractCard.GOLD_BORDER_GLOW_COLOR : AbstractCard.BLUE_BORDER_GLOW_COLOR; + this.glowColor = AbstractCard.BLUE_BORDER_GLOW_COLOR; } public void upgrade() { if (!upgraded) { upgradeName(); - upgradeDamage(UPG_DAMAGE); + upgradeDamage(3); } } diff --git a/src/main/java/theHexaghost/cards/SwordOfDarkness.java b/src/main/java/theHexaghost/cards/SwordOfDarkness.java index 7f99f36d8..28edfa046 100644 --- a/src/main/java/theHexaghost/cards/SwordOfDarkness.java +++ b/src/main/java/theHexaghost/cards/SwordOfDarkness.java @@ -24,7 +24,7 @@ public SwordOfDarkness() { super(ID, 2, CardType.ATTACK, CardRarity.COMMON, CardTarget.ENEMY); baseDamage = DAMAGE; baseMagicNumber = magicNumber = 3; - this.tags.add(SneckoMod.BANNEDFORSNECKO); + //this.tags.add(SneckoMod.BANNEDFORSNECKO); HexaMod.loadJokeCardImage(this, "SwordOfDarkness.png"); } diff --git a/src/main/java/theHexaghost/cards/ThermalTransfer.java b/src/main/java/theHexaghost/cards/ThermalTransfer.java index a246bce5a..20dc32cfd 100644 --- a/src/main/java/theHexaghost/cards/ThermalTransfer.java +++ b/src/main/java/theHexaghost/cards/ThermalTransfer.java @@ -14,7 +14,7 @@ public class ThermalTransfer extends AbstractHexaCard { public final static String ID = makeID("ThermalTransfer"); private static final int DAMAGE = 7; - private static final int UPG_DAMAGE = 3; + private static final int UPG_DAMAGE = 2; private static final int BLOCK = 6; private static final int UPG_BLOCK = 2; diff --git a/src/main/java/theHexaghost/cards/Toasty.java b/src/main/java/theHexaghost/cards/Toasty.java index 286a529b7..fcb1070db 100644 --- a/src/main/java/theHexaghost/cards/Toasty.java +++ b/src/main/java/theHexaghost/cards/Toasty.java @@ -7,6 +7,7 @@ import downfall.actions.OctoChoiceAction; import downfall.cards.OctoChoiceCard; import downfall.util.OctopusCard; +import sneckomod.SneckoMod; import theHexaghost.GhostflameHelper; import theHexaghost.HexaMod; import theHexaghost.actions.*; @@ -24,11 +25,13 @@ public class Toasty extends AbstractHexaCard implements OctopusCard { private static final int DAMAGE = 10; private static final int UPG_DAMAGE = 4; - + //Flare Flick public Toasty() { super(ID, 2, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); baseDamage = DAMAGE; HexaMod.loadJokeCardImage(this, "Toasty.png"); + tags.add(HexaMod.GHOSTWHEELCARD); + this.tags.add(SneckoMod.BANNEDFORSNECKO); } public ArrayList choiceList() { diff --git a/src/main/java/theHexaghost/cards/TurnItUp.java b/src/main/java/theHexaghost/cards/TurnItUp.java index 61237991a..cf2c8f0d2 100644 --- a/src/main/java/theHexaghost/cards/TurnItUp.java +++ b/src/main/java/theHexaghost/cards/TurnItUp.java @@ -24,8 +24,8 @@ public TurnItUp() { baseMagicNumber = magicNumber = 3; // this.exhaust = true; // this.retain = false; -// tags.add(HexaMod.GHOSTWHEELCARD); -// this.tags.add(SneckoMod.BANNEDFORSNECKO); + tags.add(HexaMod.GHOSTWHEELCARD); // I'm adding these back in for a later prismatic shard / snecko fix - blue + this.tags.add(SneckoMod.BANNEDFORSNECKO); // read one line up HexaMod.loadJokeCardImage(this, "TurnItUp.png"); } diff --git a/src/main/java/theHexaghost/cards/VolcanoVisage.java b/src/main/java/theHexaghost/cards/VolcanoVisage.java index d33d55cb8..7cce93625 100644 --- a/src/main/java/theHexaghost/cards/VolcanoVisage.java +++ b/src/main/java/theHexaghost/cards/VolcanoVisage.java @@ -15,6 +15,7 @@ public class VolcanoVisage extends AbstractHexaCard { public VolcanoVisage() { super(ID, 1, CardType.POWER, CardRarity.RARE, CardTarget.SELF); baseMagicNumber = magicNumber = 5; + tags.add(HexaMod.GHOSTWHEELCARD); this.tags.add(SneckoMod.BANNEDFORSNECKO); HexaMod.loadJokeCardImage(this, "VolcanoVisage.png"); } diff --git a/src/main/java/theHexaghost/cards/seals/FifthSeal.java b/src/main/java/theHexaghost/cards/seals/FifthSeal.java index 11fb0347b..0b3f47374 100644 --- a/src/main/java/theHexaghost/cards/seals/FifthSeal.java +++ b/src/main/java/theHexaghost/cards/seals/FifthSeal.java @@ -16,6 +16,8 @@ public class FifthSeal extends AbstractSealCard { // private ArrayList cardsList = new ArrayList<>(); public static final int MAGIC = 2; + + //THIS IS SIXTH SEAL! public FifthSeal() { super(ID, 2, CardType.POWER, CardRarity.SPECIAL, CardTarget.SELF); baseMagicNumber = magicNumber = MAGIC; diff --git a/src/main/java/theHexaghost/cards/seals/FourthSeal.java b/src/main/java/theHexaghost/cards/seals/FourthSeal.java index 85a6a84e5..f1315ea8c 100644 --- a/src/main/java/theHexaghost/cards/seals/FourthSeal.java +++ b/src/main/java/theHexaghost/cards/seals/FourthSeal.java @@ -1,6 +1,7 @@ package theHexaghost.cards.seals; import basemod.patches.com.megacrit.cardcrawl.screens.compendium.CardLibraryScreen.NoCompendium; +import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; import theHexaghost.HexaMod; @@ -13,6 +14,7 @@ public class FourthSeal extends AbstractSealCard { public FourthSeal() { super(ID, 2, CardType.POWER, CardRarity.SPECIAL, CardTarget.SELF); HexaMod.loadJokeCardImage(this, "FourthSeal.png"); + tags.add(AbstractCard.CardTags.HEALING); } public void realUse(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/theHexaghost/cards/seals/SecondSeal.java b/src/main/java/theHexaghost/cards/seals/SecondSeal.java index da0dcca7b..12eabaddb 100644 --- a/src/main/java/theHexaghost/cards/seals/SecondSeal.java +++ b/src/main/java/theHexaghost/cards/seals/SecondSeal.java @@ -1,6 +1,7 @@ package theHexaghost.cards.seals; import basemod.patches.com.megacrit.cardcrawl.screens.compendium.CardLibraryScreen.NoCompendium; +import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; import theHexaghost.HexaMod; @@ -18,6 +19,7 @@ public class SecondSeal extends AbstractSealCard { public SecondSeal() { super(ID, 2, CardType.POWER, CardRarity.SPECIAL, CardTarget.SELF); baseMagicNumber = magicNumber = MAGIC; + tags.add(AbstractCard.CardTags.HEALING); HexaMod.loadJokeCardImage(this, "SecondSeal.png"); } diff --git a/src/main/java/theHexaghost/cards/seals/SixthSeal.java b/src/main/java/theHexaghost/cards/seals/SixthSeal.java index 142bc4c0b..d5edae358 100644 --- a/src/main/java/theHexaghost/cards/seals/SixthSeal.java +++ b/src/main/java/theHexaghost/cards/seals/SixthSeal.java @@ -9,7 +9,8 @@ import theHexaghost.HexaMod; import theHexaghost.powers.FutureUpgradePower; -// this is actually fifth seal, FifthSeal.java is sixth seal, TODO: after the loc is finished, swap the id name for clearer info in metric +// this is actually fifth seal, FifthSeal.java is sixth seal, TO-DO: after the loc is finished, swap the id name for clearer info in metric +// removing this to-do because changing the ids of cards causes immense issues, and it's not worth bothering with @NoCompendium public class SixthSeal extends AbstractSealCard { public final static String ID = makeID("SixthSeal"); @@ -18,6 +19,7 @@ public SixthSeal() { super(ID, 2, CardType.POWER, CardRarity.SPECIAL, CardTarget.SELF); baseMagicNumber = magicNumber = 0; baseBurn = burn = 13; + tags.add(AbstractCard.CardTags.HEALING); HexaMod.loadJokeCardImage(this, "SixthSeal.png"); } @@ -53,7 +55,8 @@ public void applyPowers() { } public void realUse(AbstractPlayer p, AbstractMonster m) { - applyToSelf(new FutureUpgradePower(magicNumber)); + int upgrades = (count_cards / 13); + applyToSelf(new FutureUpgradePower(upgrades)); } public void upgrade() { diff --git a/src/main/java/theHexaghost/cards/seals/ThirdSeal.java b/src/main/java/theHexaghost/cards/seals/ThirdSeal.java index 9079786d0..59b00f1c2 100644 --- a/src/main/java/theHexaghost/cards/seals/ThirdSeal.java +++ b/src/main/java/theHexaghost/cards/seals/ThirdSeal.java @@ -1,6 +1,7 @@ package theHexaghost.cards.seals; import basemod.patches.com.megacrit.cardcrawl.screens.compendium.CardLibraryScreen.NoCompendium; +import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; import theHexaghost.HexaMod; @@ -13,6 +14,7 @@ public class ThirdSeal extends AbstractSealCard { public ThirdSeal() { super(ID, 2, CardType.POWER, CardRarity.SPECIAL, CardTarget.SELF); HexaMod.loadJokeCardImage(this, "ThirdSeal.png"); + tags.add(AbstractCard.CardTags.HEALING); } public void realUse(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/theHexaghost/events/SealChamber.java b/src/main/java/theHexaghost/events/SealChamber.java index 9182490c6..e5e6d6d1c 100644 --- a/src/main/java/theHexaghost/events/SealChamber.java +++ b/src/main/java/theHexaghost/events/SealChamber.java @@ -15,6 +15,7 @@ import com.megacrit.cardcrawl.vfx.cardManip.ShowCardAndObtainEffect; import theHexaghost.HexaMod; import theHexaghost.cards.seals.*; +import theHexaghost.relics.TheBrokenSeal; import java.util.ArrayList; import java.util.Collections; @@ -274,7 +275,6 @@ protected void buttonEffect(int buttonPressed) { } - private enum CurScreen { INTRO, END; diff --git a/src/main/java/theHexaghost/events/WanderingSpecter.java b/src/main/java/theHexaghost/events/WanderingSpecter.java index 0ef397293..3a76ce1a5 100644 --- a/src/main/java/theHexaghost/events/WanderingSpecter.java +++ b/src/main/java/theHexaghost/events/WanderingSpecter.java @@ -1,6 +1,7 @@ package theHexaghost.events; +import collector.CollectorChar; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.cards.DamageInfo; import com.megacrit.cardcrawl.core.CardCrawlGame; @@ -15,8 +16,11 @@ import com.megacrit.cardcrawl.vfx.RainingGoldEffect; import com.megacrit.cardcrawl.vfx.cardManip.ShowCardAndObtainEffect; import downfall.downfallMod; +import downfall.patches.EvilModeCharacterSelect; +import downfall.relics.BlackCandle; import downfall.relics.ExtraCursedBell; import downfall.relics.ExtraCursedKey; +import hermit.characters.hermit; import theHexaghost.HexaMod; import downfall.cards.curses.Haunted; @@ -72,8 +76,13 @@ public WanderingSpecter() { imageEventText.setDialogOption(OPTIONS[1]); shopForMore2 = true; } - if (!AbstractDungeon.player.hasRelic(BlueCandle.ID)){ - this.imageEventText.setDialogOption(OPTIONS[3]); + if ((!AbstractDungeon.player.hasRelic(BlueCandle.ID)) || (!AbstractDungeon.player.hasRelic(BlackCandle.ID))) { + if (EvilModeCharacterSelect.evilMode || (AbstractDungeon.player instanceof hermit)) { + this.imageEventText.setDialogOption(OPTIONS[3], new BlackCandle()); + } + if (!EvilModeCharacterSelect.evilMode && !(AbstractDungeon.player instanceof hermit)) { + this.imageEventText.setDialogOption(OPTIONS[3], new BlueCandle()); + } } else { this.imageEventText.setDialogOption(OPTIONS[4]); } @@ -127,22 +136,34 @@ protected void buttonEffect(int buttonPressed) { this.screen = CurScreen.TRADE; return; case 2: - if (AbstractDungeon.player.hasRelic(BlueCandle.ID)){ + if ((AbstractDungeon.player.hasRelic(BlueCandle.ID)) || (AbstractDungeon.player.hasRelic(BlackCandle.ID))){ this.imageEventText.updateBodyText(DESCRIPTIONS[7]); } else { this.imageEventText.updateBodyText(DESCRIPTIONS[6]); // AbstractDungeon.getCurrRoom().spawnRelicAndObtain((float) (Settings.WIDTH / 2), (float) (Settings.HEIGHT / 2), new BlueCandle());// 83 AbstractDungeon.player.damage(new DamageInfo(null, 5, DamageInfo.DamageType.HP_LOSS)); AbstractDungeon.getCurrRoom().rewards.clear(); - AbstractDungeon.getCurrRoom().addRelicToRewards(new BlueCandle()); + if (!EvilModeCharacterSelect.evilMode && !(AbstractDungeon.player instanceof hermit)) { + AbstractDungeon.getCurrRoom().addRelicToRewards(new BlueCandle()); + } + if (EvilModeCharacterSelect.evilMode || (AbstractDungeon.player instanceof hermit)) { + //AbstractDungeon.getCurrRoom().addRelicToRewards(new BlueCandle()); + AbstractDungeon.getCurrRoom().addRelicToRewards(new BlackCandle()); + } AbstractDungeon.getCurrRoom().phase = AbstractRoom.RoomPhase.COMPLETE; AbstractDungeon.combatRewardScreen.open(); downfallMod.removeAnyRelicFromPools(BlueCandle.ID); + downfallMod.removeAnyRelicFromPools(BlackCandle.ID); } this.imageEventText.clearAllDialogs(); this.imageEventText.setDialogOption(OPTIONS[9]); this.screen = CurScreen.END; - logMetricObtainRelicAndDamage(ID, "Chased Away", new BlueCandle(), 5); + if (!EvilModeCharacterSelect.evilMode && !(AbstractDungeon.player instanceof hermit)) { + logMetricObtainRelicAndDamage(ID, "Chased Away", new BlueCandle(), 5); + } + if (EvilModeCharacterSelect.evilMode || (AbstractDungeon.player instanceof hermit)) { + logMetricObtainRelicAndDamage(ID, "Chased Away", new BlackCandle(), 5); + } return; } return; diff --git a/src/main/java/theHexaghost/ghostflames/AbstractGhostflame.java b/src/main/java/theHexaghost/ghostflames/AbstractGhostflame.java index 2a61fd644..0759ffbb4 100644 --- a/src/main/java/theHexaghost/ghostflames/AbstractGhostflame.java +++ b/src/main/java/theHexaghost/ghostflames/AbstractGhostflame.java @@ -309,10 +309,11 @@ public void resetVariable() {} public void activate() { GhostflameHelper.activeGhostFlame = this; int trigger = getActiveFlamesTriggerCount(); - for (int i = 0; i < 3; i++) { - animAlphaBySlot[i] = 0F; - useBrightTexture[i] = trigger > i; - update(); - } + if (HexaMod.renderFlames) + for (int i = 0; i < 3; i++) { + animAlphaBySlot[i] = 0F; + useBrightTexture[i] = trigger > i; + update(); + } } } diff --git a/src/main/java/theHexaghost/ghostflames/BolsteringGhostflame.java b/src/main/java/theHexaghost/ghostflames/BolsteringGhostflame.java index 06fb6ff69..8deb9c43c 100644 --- a/src/main/java/theHexaghost/ghostflames/BolsteringGhostflame.java +++ b/src/main/java/theHexaghost/ghostflames/BolsteringGhostflame.java @@ -28,7 +28,7 @@ public class BolsteringGhostflame extends AbstractGhostflame { public BolsteringGhostflame(float x, float y) { super(x, y); - block = 5; + block = 4; //this.textColor = new Color(.75F,.75F,1F,1F); this.triggersRequired = 1; diff --git a/src/main/java/theHexaghost/ghostflames/CrushingGhostflame.java b/src/main/java/theHexaghost/ghostflames/CrushingGhostflame.java index 81a7f1845..4d8ced833 100644 --- a/src/main/java/theHexaghost/ghostflames/CrushingGhostflame.java +++ b/src/main/java/theHexaghost/ghostflames/CrushingGhostflame.java @@ -19,6 +19,7 @@ import com.megacrit.cardcrawl.vfx.combat.AnimatedSlashEffect; import com.megacrit.cardcrawl.vfx.combat.GoldenSlashEffect; import downfall.util.TextureLoader; +import gremlin.actions.PseudoDamageRandomEnemyAction; import theHexaghost.GhostflameHelper; import theHexaghost.HexaMod; import theHexaghost.powers.EnhancePower; @@ -111,7 +112,7 @@ public void dispose() {} } else { AbstractMonster m = AbstractDungeon.getRandomMonster(); if (m != null && !m.isDead && !m.isDying && !m.halfDead) { - addToTop(new DamageAction(m, new DamageInfo(AbstractDungeon.player, x, DamageInfo.DamageType.THORNS), AbstractGameAction.AttackEffect.NONE)); + AbstractDungeon.actionManager.addToTop(new PseudoDamageRandomEnemyAction(m, new DamageInfo(AbstractDungeon.player, x, DamageInfo.DamageType.THORNS), AbstractGameAction.AttackEffect.NONE)); addToTop(new VFXAction(new GoldenSlashEffect(m.hb.cX, m.hb.cY, true))); } } diff --git a/src/main/java/theHexaghost/ghostflames/InfernoGhostflame.java b/src/main/java/theHexaghost/ghostflames/InfernoGhostflame.java index b10cdd349..cb896915c 100644 --- a/src/main/java/theHexaghost/ghostflames/InfernoGhostflame.java +++ b/src/main/java/theHexaghost/ghostflames/InfernoGhostflame.java @@ -88,7 +88,7 @@ public void onCharge() { } if (amountOfIgnitedGhostflames == 6) { - if(!AbstractDungeon.player.hasRelic(IceCube.ID)){ + if (!AbstractDungeon.player.hasRelic(IceCube.ID)) { atb(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new EnhancePower(2), 2)); } } diff --git a/src/main/java/theHexaghost/patches/EndTurnAdvance.java b/src/main/java/theHexaghost/patches/EndTurnAdvance.java index 80bd6d368..9ff2e9254 100644 --- a/src/main/java/theHexaghost/patches/EndTurnAdvance.java +++ b/src/main/java/theHexaghost/patches/EndTurnAdvance.java @@ -46,14 +46,14 @@ public int[] Locate(CtBehavior ctMethodToPatch) throws CannotCompileException, P } @SpirePatch( - clz = GameActionManager.class, - method = "callEndOfTurnActions" + clz = AbstractRoom.class, + method = "endTurn" ) public static class AutoAdvance { -// @SpireInsertPatch( -// locator = Locator.class -// ) - public static void Postfix(GameActionManager __instance) { + @SpireInsertPatch( + locator = Locator.class + ) + public static void Insert(AbstractRoom __instance) { if (HexaMod.renderFlames) { if (GhostflameHelper.activeGhostFlame instanceof MayhemGhostflame) GhostflameHelper.activeGhostFlame.advanceTrigger(null); @@ -76,11 +76,11 @@ public void update() { } } -// public static class Locator extends SpireInsertLocator { -// public int[] Locate(CtBehavior ctMethodToPatch) throws CannotCompileException, PatchingException { -// Matcher finalMatcher = new Matcher.MethodCallMatcher(GameActionManager.class, "addToBottom"); -// -// return new int[] {LineFinder.findAllInOrder(ctMethodToPatch, new ArrayList<>(), finalMatcher)[1]+1}; -// } -// } + public static class Locator extends SpireInsertLocator { + public int[] Locate(CtBehavior ctMethodToPatch) throws CannotCompileException, PatchingException { + Matcher finalMatcher = new Matcher.MethodCallMatcher(GameActionManager.class, "addToBottom"); + + return new int[] {LineFinder.findAllInOrder(ctMethodToPatch, new ArrayList<>(), finalMatcher)[1]+1}; + } + } } \ No newline at end of file diff --git a/src/main/java/theHexaghost/patches/GenerateSealRewardPatch.java b/src/main/java/theHexaghost/patches/GenerateSealRewardPatch.java index 350ea9baf..26f8f162b 100644 --- a/src/main/java/theHexaghost/patches/GenerateSealRewardPatch.java +++ b/src/main/java/theHexaghost/patches/GenerateSealRewardPatch.java @@ -19,22 +19,28 @@ public class GenerateSealRewardPatch { public static class DropSeals { public static void Postfix(AbstractRoom __instance) { if( AbstractDungeon.player instanceof TheHexaghost && (!AbstractDungeon.player.hasRelic(TheBrokenSeal.ID)) ) { - int chance = 15; - if (__instance instanceof MonsterRoomElite) { - chance = 35; - } else if (__instance instanceof MonsterRoomBoss) { - chance = 55; - } - chance = chance + (int)(HexaMod.bonus_seal_drop_chance * 0.8); +// int chance = 15; +// if (__instance instanceof MonsterRoomElite) { +// chance = 35; +// } else if (__instance instanceof MonsterRoomBoss) { +// chance = 55; +// } +// +// chance = chance + (int)(HexaMod.bonus_seal_drop_chance * 0.8); +// +// if (__instance.rewards.size() >= 5) { +// chance = 0; +// } +//// System.out.println("Seal Dropchance: " + chance); +// if (AbstractDungeon.potionRng.random(0, 99) <= chance) { +// __instance.rewards.add(new SealSealReward()); +// } - if (__instance.rewards.size() >= 5) { - chance = 0; - } -// System.out.println("Seal Dropchance: " + chance); - if (AbstractDungeon.potionRng.random(0, 99) <= chance) { + if (__instance instanceof MonsterRoomElite || __instance instanceof MonsterRoomBoss) { __instance.rewards.add(new SealSealReward()); } + } } } diff --git a/src/main/java/theHexaghost/powers/FutureUpgradePower.java b/src/main/java/theHexaghost/powers/FutureUpgradePower.java index e4db24b33..de132a34d 100644 --- a/src/main/java/theHexaghost/powers/FutureUpgradePower.java +++ b/src/main/java/theHexaghost/powers/FutureUpgradePower.java @@ -55,6 +55,7 @@ public void onVictory() { ArrayList possibleCards = new ArrayList<>(); for (AbstractCard c : AbstractDungeon.player.masterDeck.group) { if (c.canUpgrade()) { + //&& !(c.color == AbstractCard.CardColor.CURSE)) { possibleCards.add(c); } } diff --git a/src/main/java/theHexaghost/powers/GiftsFromTheDeadPower.java b/src/main/java/theHexaghost/powers/GiftsFromTheDeadPower.java index 4096c52e3..6db49a4c1 100644 --- a/src/main/java/theHexaghost/powers/GiftsFromTheDeadPower.java +++ b/src/main/java/theHexaghost/powers/GiftsFromTheDeadPower.java @@ -78,7 +78,7 @@ public GiftsFromTheDeadPower(final int amount) { // } @Override - public void atStartOfTurnPostDraw() { + public void atStartOfTurn() { this.flash(); for (int i = 0; i < GiftsFromTheDeadPower.this.amount; i++) { AbstractCard q = EtherealExpedition.returnTrulyRandomEtherealCardInCombat().makeCopy(); diff --git a/src/main/java/theHexaghost/powers/RadiantPower.java b/src/main/java/theHexaghost/powers/RadiantPower.java index 3cb2559cf..3081dbc09 100644 --- a/src/main/java/theHexaghost/powers/RadiantPower.java +++ b/src/main/java/theHexaghost/powers/RadiantPower.java @@ -15,6 +15,7 @@ public class RadiantPower extends AbstractPower implements CloneablePowerInterface, OnChargeSubscriber { + //Radiant Flame. Not used! Effect moved to UnbrokenSoul / Mark of the Ether (Starter Upgrade). public static final String POWER_ID = HexaMod.makeID("RadiantPower"); private static final Texture tex84 = TextureLoader.getTexture(HexaMod.getModID() + "Resources/images/powers/Radiant84.png"); diff --git a/src/main/java/theHexaghost/relics/BolsterEngine.java b/src/main/java/theHexaghost/relics/BolsterEngine.java index c3aaf53b1..0a0abb4bc 100644 --- a/src/main/java/theHexaghost/relics/BolsterEngine.java +++ b/src/main/java/theHexaghost/relics/BolsterEngine.java @@ -25,6 +25,12 @@ public BolsterEngine() { super(ID, IMG, OUTLINE, RelicTier.COMMON, LandingSound.MAGICAL); } //Tricky's Bolster-Rod 高热之杖 + + //variables + + private static final int BLOCK = 6; + private static final int STR = 1; + @Override public void atBattleStart() { grayscale = false; @@ -38,8 +44,8 @@ public void onUseCard(AbstractCard targetCard, UseCardAction useCardAction) { stopPulse(); grayscale = true; addToBot(new RelicAboveCreatureAction(AbstractDungeon.player, this)); - addToBot(new GainBlockAction(AbstractDungeon.player, 6)); - addToBot(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new StrengthPower(AbstractDungeon.player, 1), 1)); + addToBot(new GainBlockAction(AbstractDungeon.player, BLOCK)); + addToBot(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new StrengthPower(AbstractDungeon.player, STR), STR)); } } @@ -49,6 +55,6 @@ public void onVictory() { } public String getUpdatedDescription() { - return DESCRIPTIONS[0]; + return DESCRIPTIONS[0] + BLOCK + DESCRIPTIONS[1] + STR + DESCRIPTIONS[2]; } } diff --git a/src/main/java/theHexaghost/relics/CandleOfCauterizing.java b/src/main/java/theHexaghost/relics/CandleOfCauterizing.java index d419854d1..230e78302 100644 --- a/src/main/java/theHexaghost/relics/CandleOfCauterizing.java +++ b/src/main/java/theHexaghost/relics/CandleOfCauterizing.java @@ -2,12 +2,7 @@ import basemod.abstracts.CustomRelic; import com.badlogic.gdx.graphics.Texture; -import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; -import com.megacrit.cardcrawl.cards.DamageInfo; -import com.megacrit.cardcrawl.core.AbstractCreature; -import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import theHexaghost.HexaMod; -import theHexaghost.powers.BurnPower; import downfall.util.TextureLoader; import static theHexaghost.HexaMod.makeRelicOutlinePath; @@ -18,6 +13,8 @@ public class CandleOfCauterizing extends CustomRelic { public static final String ID = HexaMod.makeID("CandleOfCauterizing"); private static final Texture IMG = TextureLoader.getTexture(makeRelicPath("CandleOfCauterizing.png")); private static final Texture OUTLINE = TextureLoader.getTexture(makeRelicOutlinePath("CandleOfCauterizing.png")); + + //variables public static final int SOULBURN_BONUS_AMOUNT = 3; public CandleOfCauterizing() { @@ -32,6 +29,6 @@ public CandleOfCauterizing() { // } public String getUpdatedDescription() { - return DESCRIPTIONS[0]; + return DESCRIPTIONS[0] + SOULBURN_BONUS_AMOUNT + DESCRIPTIONS[1]; } } diff --git a/src/main/java/theHexaghost/relics/IceCube.java b/src/main/java/theHexaghost/relics/IceCube.java index f3479b34f..1d460c55f 100644 --- a/src/main/java/theHexaghost/relics/IceCube.java +++ b/src/main/java/theHexaghost/relics/IceCube.java @@ -22,6 +22,9 @@ public IceCube() { super(ID, IMG, OUTLINE, RelicTier.BOSS, LandingSound.MAGICAL); } + //variables + public static final int INTENSITY_LOSS = 1; + public void onEquip() { ++AbstractDungeon.player.energy.energyMaster;// 37 }// 38 @@ -32,10 +35,10 @@ public void onUnequip() { @Override public void atBattleStart() { - this.addToBot(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new EnhancePower(-1), -1)); + this.addToBot(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new EnhancePower(-INTENSITY_LOSS), -INTENSITY_LOSS)); } public String getUpdatedDescription() { - return DESCRIPTIONS[0]; + return DESCRIPTIONS[0] + INTENSITY_LOSS + DESCRIPTIONS[1]; } } diff --git a/src/main/java/theHexaghost/relics/InflammatoryLetter.java b/src/main/java/theHexaghost/relics/InflammatoryLetter.java index 4686c5e9b..4b1e8d5bf 100644 --- a/src/main/java/theHexaghost/relics/InflammatoryLetter.java +++ b/src/main/java/theHexaghost/relics/InflammatoryLetter.java @@ -21,15 +21,19 @@ public InflammatoryLetter() { super(ID, IMG, OUTLINE, RelicTier.COMMON, LandingSound.FLAT); } //Jar of TOBSCo + + //variables + public static final int INTENSITY = 1; + @Override public void atBattleStart() { flash(); - addToBot(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new EnhancePower(1), 1)); + addToBot(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new EnhancePower(INTENSITY), INTENSITY)); //grayscale = true; } @Override public String getUpdatedDescription() { - return DESCRIPTIONS[0]; + return DESCRIPTIONS[0] + INTENSITY + DESCRIPTIONS[1]; } } diff --git a/src/main/java/theHexaghost/relics/JarOfFuel.java b/src/main/java/theHexaghost/relics/JarOfFuel.java index 516e35265..deb8f00a4 100644 --- a/src/main/java/theHexaghost/relics/JarOfFuel.java +++ b/src/main/java/theHexaghost/relics/JarOfFuel.java @@ -19,20 +19,22 @@ public class JarOfFuel extends CustomRelic { private static final Texture OUTLINE = TextureLoader.getTexture(makeRelicOutlinePath("AncientSpiritShield.png")); public JarOfFuel() { - super(ID, IMG, OUTLINE, RelicTier.UNCOMMON, LandingSound.MAGICAL); + super(ID, IMG, OUTLINE, RelicTier.UNCOMMON, LandingSound.HEAVY); } //Olexa's Shield - @Override - public void atBattleStart() { -// flash(); -// AbstractGhostflame q = GhostflameHelper.hexaGhostFlames.get(0); -// AbstractGhostflame bruh = GhostflameHelper.hexaGhostFlames.get(2); -// AbstractGhostflame gf = new BolsteringGhostflame(q.lx, q.ly); -// AbstractGhostflame r = new SearingGhostflame(bruh.lx, bruh.ly); -// GhostflameHelper.hexaGhostFlames.set(0, gf); -// GhostflameHelper.hexaGhostFlames.set(2, r); -// GhostflameHelper.hexaGhostFlames.get(0).activate(); - } + + // @Override + // public void atBattleStart() { + //// flash(); + //// AbstractGhostflame q = GhostflameHelper.hexaGhostFlames.get(0); + //// AbstractGhostflame bruh = GhostflameHelper.hexaGhostFlames.get(2); + //// AbstractGhostflame gf = new BolsteringGhostflame(q.lx, q.ly); + //// AbstractGhostflame r = new SearingGhostflame(bruh.lx, bruh.ly); + //// GhostflameHelper.hexaGhostFlames.set(0, gf); + //// GhostflameHelper.hexaGhostFlames.set(2, r); + //// GhostflameHelper.hexaGhostFlames.get(0).activate(); + // } + public String getUpdatedDescription() { return DESCRIPTIONS[0]; diff --git a/src/main/java/theHexaghost/relics/Libra.java b/src/main/java/theHexaghost/relics/Libra.java index c57b199d3..9065a2211 100644 --- a/src/main/java/theHexaghost/relics/Libra.java +++ b/src/main/java/theHexaghost/relics/Libra.java @@ -4,13 +4,17 @@ import com.badlogic.gdx.graphics.Texture; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.cards.CardGroup; +import com.megacrit.cardcrawl.cards.curses.AscendersBane; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.helpers.input.InputHelper; import com.megacrit.cardcrawl.relics.AbstractRelic; import com.megacrit.cardcrawl.unlock.UnlockTracker; import downfall.util.TextureLoader; +import hermit.relics.Memento; import theHexaghost.HexaMod; +import theHexaghost.cards.Defend; +import theHexaghost.cards.Strike; import java.util.ArrayList; import java.util.Iterator; @@ -32,6 +36,7 @@ public Libra() { public int number_of_cards_to_transform; private boolean no_cards_to_select = false; private boolean calledTransform = true; + private boolean hasbasics = false; @Override public void updateDescription(AbstractPlayer.PlayerClass c) { @@ -68,9 +73,9 @@ public void onEquip() { } public void update() { + //it wasn't super.update(); // Todo, verify the trigger condition is fine for controller input too - if (!this.calledTransform && (no_cards_to_select || (AbstractDungeon.gridSelectScreen.confirmButton.hb.hovered && InputHelper.justClickedLeft) ) ) { - AbstractDungeon.gridSelectScreen.confirmButton.hb.hovered = false; + if (!this.calledTransform && (no_cards_to_select)) { this.calledTransform = true; AbstractDungeon.getCurrRoom().rewardPopOutTimer = 0.25F; this.giveCards(AbstractDungeon.gridSelectScreen.selectedCards); @@ -112,9 +117,21 @@ public void giveCards(ArrayList group) { new_cards.addToBottom(c); AbstractDungeon.player.masterDeck.removeCard(card); } - AbstractDungeon.gridSelectScreen.openConfirmationGrid(new_cards, this.DESCRIPTIONS[1]); - AbstractDungeon.gridSelectScreen.selectedCards.clear(); + } + + public boolean canSpawn() { + //requires at least 1 strike or defend to spawn + hasbasics = false; + for (AbstractCard c : AbstractDungeon.player.masterDeck.group) { + if (c.hasTag(AbstractCard.CardTags.STARTER_STRIKE)) { + hasbasics = true; + } + if (c.hasTag(AbstractCard.CardTags.STARTER_DEFEND)) { + hasbasics = true; + } + } + return hasbasics; } } \ No newline at end of file diff --git a/src/main/java/theHexaghost/relics/MatchstickCase.java b/src/main/java/theHexaghost/relics/MatchstickCase.java index 8da8fd0bf..6d1bac002 100644 --- a/src/main/java/theHexaghost/relics/MatchstickCase.java +++ b/src/main/java/theHexaghost/relics/MatchstickCase.java @@ -5,6 +5,7 @@ import downfall.actions.OctoChoiceAction; import downfall.util.TextureLoader; import theHexaghost.HexaMod; +import theHexaghost.cards.MatchstickFloat; import theHexaghost.ghostflames.AbstractGhostflame; import theHexaghost.util.OnChargeSubscriber; import theHexaghost.cards.Float; @@ -33,7 +34,7 @@ public void atTurnStart() { @Override public void onCharge(AbstractGhostflame chargedFlame) { if(!triggered) { - Float fl = new Float(); + MatchstickFloat fl = new MatchstickFloat(); fl.upgrade(); addToBot(new OctoChoiceAction(null, fl)); triggered = true; diff --git a/src/main/java/theHexaghost/relics/Sixitude.java b/src/main/java/theHexaghost/relics/Sixitude.java index 3dd7aa116..7593c97d5 100644 --- a/src/main/java/theHexaghost/relics/Sixitude.java +++ b/src/main/java/theHexaghost/relics/Sixitude.java @@ -1,6 +1,8 @@ package theHexaghost.relics; import basemod.abstracts.CustomRelic; +import champ.ChampMod; +import champ.cards.Strike; import com.badlogic.gdx.graphics.Texture; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.common.DamageRandomEnemyAction; @@ -9,6 +11,9 @@ import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.cards.DamageInfo; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import expansioncontent.actions.EchoACardAction; +import expansioncontent.expansionContentMod; +import hermit.cards.Strike_Hermit; import theHexaghost.HexaMod; import downfall.util.TextureLoader; @@ -21,23 +26,30 @@ public class Sixitude extends CustomRelic { private static final Texture IMG = TextureLoader.getTexture(makeRelicPath("Sixitude.png")); private static final Texture OUTLINE = TextureLoader.getTexture(makeRelicOutlinePath("Sixitude.png")); + //variables + public static final int SIX_SHOOTER = 6; + public Sixitude() { - super(ID, IMG, OUTLINE, RelicTier.UNCOMMON, LandingSound.MAGICAL); + super(ID, IMG, OUTLINE, RelicTier.RARE, LandingSound.MAGICAL); this.counter = 0; } @Override public void onUseCard(AbstractCard targetCard, UseCardAction useCardAction) { - ++this.counter; - if (this.counter % 6 == 0) { - this.flash(); - this.counter = 0; - this.addToBot(new RelicAboveCreatureAction(AbstractDungeon.player, this)); - this.addToBot(new DamageRandomEnemyAction(new DamageInfo(null, 6, DamageInfo.DamageType.THORNS), AbstractGameAction.AttackEffect.FIRE)); + if ((targetCard.costForTurn != 0) && !(targetCard.freeToPlay())) { + ++this.counter; + if (this.counter % SIX_SHOOTER == 0) { + this.flash(); + this.counter = 0; + this.addToBot(new RelicAboveCreatureAction(AbstractDungeon.player, this)); + // this.addToBot(new DamageRandomEnemyAction(new DamageInfo(null, 6, DamageInfo.DamageType.THORNS), AbstractGameAction.AttackEffect.FIRE)); + AbstractCard c2 = new Strike_Hermit(); + addToBot(new EchoACardAction(c2, true)); + } } } public String getUpdatedDescription() { - return DESCRIPTIONS[0]; + return DESCRIPTIONS[0] + SIX_SHOOTER + DESCRIPTIONS[1]; } } diff --git a/src/main/java/theHexaghost/relics/SoulConsumer.java b/src/main/java/theHexaghost/relics/SoulConsumer.java index 974b1b221..f79491112 100644 --- a/src/main/java/theHexaghost/relics/SoulConsumer.java +++ b/src/main/java/theHexaghost/relics/SoulConsumer.java @@ -37,11 +37,20 @@ public SoulConsumer() { super(ID, IMG, OUTLINE, RelicTier.RARE, LandingSound.MAGICAL); } + //variables + public static final int EXHAUST_REQUIREMENT = 3; + + public void onEquip() { + this.counter = 0; + } + @Override public void onExhaust(AbstractCard card) { + this.img = TextureLoader.getTexture(makeRelicPath("SoulStone.png")); ++this.counter; - if (this.counter % 3 == 0) { + if (this.counter % EXHAUST_REQUIREMENT == 0) { this.counter = 0; + this.img = TextureLoader.getTexture(makeRelicPath("SoulConsumerOn.png")); this.flash(); this.addToBot(new RelicAboveCreatureAction(AbstractDungeon.player, this)); GhostflameHelper.activeGhostFlame.charged = true; // for some special logic for end turn advance @@ -54,9 +63,9 @@ public void onExhaust(AbstractCard card) { } } - public void onVictory() { - this.counter = -1; - } + // public void onVictory() { + // this.counter = 0; + // } // @Override // public void onUseCard(AbstractCard targetCard, UseCardAction useCardAction) { @@ -86,6 +95,6 @@ public void onVictory() { // } public String getUpdatedDescription() { - return DESCRIPTIONS[0]; + return DESCRIPTIONS[0] + EXHAUST_REQUIREMENT + DESCRIPTIONS[1]; } } diff --git a/src/main/java/theHexaghost/relics/SoulOfChaos.java b/src/main/java/theHexaghost/relics/SoulOfChaos.java index 42fe2dbf9..f5543ed35 100644 --- a/src/main/java/theHexaghost/relics/SoulOfChaos.java +++ b/src/main/java/theHexaghost/relics/SoulOfChaos.java @@ -2,12 +2,21 @@ import basemod.abstracts.CustomRelic; import com.badlogic.gdx.graphics.Texture; +import com.megacrit.cardcrawl.actions.common.PlayTopCardAction; +import com.megacrit.cardcrawl.actions.common.RelicAboveCreatureAction; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; import theHexaghost.GhostflameHelper; import theHexaghost.HexaMod; -import theHexaghost.ghostflames.AbstractGhostflame; -import theHexaghost.ghostflames.MayhemGhostflame; +import theHexaghost.actions.RandomFlameAction; +import theHexaghost.actions.RandomFlameActionRelicRng; +import theHexaghost.actions.RandomizeFlameAction; + +import theHexaghost.ghostflames.*; import downfall.util.TextureLoader; +import static hermit.util.Wiz.atb; +import static hermit.util.Wiz.att; import static theHexaghost.HexaMod.makeRelicOutlinePath; import static theHexaghost.HexaMod.makeRelicPath; @@ -21,12 +30,25 @@ public SoulOfChaos() { super(ID, IMG, OUTLINE, RelicTier.SHOP, LandingSound.MAGICAL); } + + @Override + public void atTurnStart() { + super.atTurnStart(); + flash(); + + att(new RandomFlameActionRelicRng()); + + atb(new RandomizeFlameAction()); + + att(new RelicAboveCreatureAction(AbstractDungeon.player, this)); + + } + + @Override - public void atBattleStart() { + public void onPlayerEndTurn() { flash(); - AbstractGhostflame q = GhostflameHelper.hexaGhostFlames.get(3); - AbstractGhostflame gf = new MayhemGhostflame(q.lx, q.ly); - GhostflameHelper.hexaGhostFlames.set(3, gf); + this.addToTop(new PlayTopCardAction(AbstractDungeon.getCurrRoom().monsters.getRandomMonster((AbstractMonster) null, true, AbstractDungeon.relicRng), false)); } public String getUpdatedDescription() { diff --git a/src/main/java/theHexaghost/relics/SpiritBrand.java b/src/main/java/theHexaghost/relics/SpiritBrand.java index 6992cd263..04268f764 100644 --- a/src/main/java/theHexaghost/relics/SpiritBrand.java +++ b/src/main/java/theHexaghost/relics/SpiritBrand.java @@ -3,7 +3,6 @@ import basemod.abstracts.CustomRelic; import com.badlogic.gdx.graphics.Texture; import com.megacrit.cardcrawl.actions.common.GainBlockAction; -import com.megacrit.cardcrawl.actions.common.GainEnergyAction; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import theHexaghost.HexaMod; import theHexaghost.ghostflames.AbstractGhostflame; @@ -25,9 +24,12 @@ public SpiritBrand() { super(ID, IMG, OUTLINE, RelicTier.STARTER, LandingSound.MAGICAL); } + //variables + private static final int BLOCK = 4; + @Override public String getUpdatedDescription() { - return DESCRIPTIONS[0]; + return DESCRIPTIONS[0] + BLOCK + DESCRIPTIONS[1]; } @Override @@ -40,7 +42,7 @@ public void atTurnStartPostDraw() { public void onCharge(AbstractGhostflame g) { if (!activated) { flash(); - addToBot(new GainBlockAction(AbstractDungeon.player, 4)); + addToBot(new GainBlockAction(AbstractDungeon.player, BLOCK)); activated = true; stopPulse(); } diff --git a/src/main/java/theHexaghost/relics/TheBrokenSeal.java b/src/main/java/theHexaghost/relics/TheBrokenSeal.java index 27c4f6f09..96e813536 100644 --- a/src/main/java/theHexaghost/relics/TheBrokenSeal.java +++ b/src/main/java/theHexaghost/relics/TheBrokenSeal.java @@ -4,10 +4,14 @@ import com.badlogic.gdx.graphics.Texture; import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; import com.megacrit.cardcrawl.actions.common.RelicAboveCreatureAction; +import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.UIStrings; import com.megacrit.cardcrawl.powers.DexterityPower; import com.megacrit.cardcrawl.powers.StrengthPower; import com.megacrit.cardcrawl.rooms.AbstractRoom; +import com.megacrit.cardcrawl.screens.GameOverStat; +import downfall.downfallMod; import theHexaghost.HexaMod; import theHexaghost.powers.EnhancePower; import downfall.util.TextureLoader; @@ -21,31 +25,39 @@ public class TheBrokenSeal extends CustomRelic { private static final Texture IMG = TextureLoader.getTexture(makeRelicPath("TheBrokenSeal.png")); private static final Texture OUTLINE = TextureLoader.getTexture(makeRelicOutlinePath("TheBrokenSeal.png")); + public static final UIStrings uiStrings = CardCrawlGame.languagePack.getUIString(downfallMod.makeID("Unfettered")); + public TheBrokenSeal() { super(ID, IMG, OUTLINE, RelicTier.SPECIAL, LandingSound.MAGICAL); } + //variables + public static final int MAX_HP = 10; + public static final int STR = 2; + public static final int DEX = 2; + public static final int INTENSITY = 2; + @Override public void onEquip() { - AbstractDungeon.player.increaseMaxHp(10, true); + AbstractDungeon.player.increaseMaxHp(MAX_HP, true); AbstractDungeon.player.heal(AbstractDungeon.player.maxHealth); - if( AbstractDungeon.getCurrRoom().phase == AbstractRoom.RoomPhase.COMBAT ){ - this.addToTop(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new StrengthPower(AbstractDungeon.player, 2), 2)); - this.addToTop(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new DexterityPower(AbstractDungeon.player, 2), 2)); - this.addToTop(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new EnhancePower(2), 2)); + if( AbstractDungeon.getCurrRoom().phase == AbstractRoom.RoomPhase.COMBAT){ + this.addToTop(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new StrengthPower(AbstractDungeon.player, STR), STR)); + this.addToTop(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new DexterityPower(AbstractDungeon.player, DEX), DEX)); + this.addToTop(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new EnhancePower(INTENSITY), INTENSITY)); } } @Override public void atBattleStart() { - this.flash();// 24 - this.addToTop(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new StrengthPower(AbstractDungeon.player, 2), 2)); - this.addToTop(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new DexterityPower(AbstractDungeon.player, 2), 2)); - this.addToTop(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new EnhancePower(2), 2)); + this.flash(); + this.addToTop(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new StrengthPower(AbstractDungeon.player, STR), STR)); + this.addToTop(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new DexterityPower(AbstractDungeon.player, DEX), DEX)); + this.addToTop(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new EnhancePower(INTENSITY), INTENSITY)); this.addToTop(new RelicAboveCreatureAction(AbstractDungeon.player, this)); } public String getUpdatedDescription() { - return DESCRIPTIONS[0]; + return DESCRIPTIONS[0] + MAX_HP + DESCRIPTIONS[1] + STR + DESCRIPTIONS[2]; } } diff --git a/src/main/java/theHexaghost/relics/UnbrokenSoul.java b/src/main/java/theHexaghost/relics/UnbrokenSoul.java index dca99b703..5903e728a 100644 --- a/src/main/java/theHexaghost/relics/UnbrokenSoul.java +++ b/src/main/java/theHexaghost/relics/UnbrokenSoul.java @@ -23,6 +23,10 @@ public class UnbrokenSoul extends CustomRelic implements OnChargeSubscriber { public boolean activated = false; // mark of the ether + + //variables + public static final int BLOCK = 4; + public UnbrokenSoul() { super(ID, IMG, OUTLINE, RelicTier.BOSS, LandingSound.MAGICAL); } @@ -63,7 +67,7 @@ public String getUpdatedDescription() { } - return DESCRIPTIONS[0] + sb + DESCRIPTIONS[1]; + return DESCRIPTIONS[0] + sb + DESCRIPTIONS[1] + BLOCK + DESCRIPTIONS[2]; } // @Override @@ -76,7 +80,7 @@ public String getUpdatedDescription() { public void onCharge(AbstractGhostflame g) { // if (!activated) { flash(); - addToBot(new GainBlockAction(AbstractDungeon.player, 4)); + addToBot(new GainBlockAction(AbstractDungeon.player, BLOCK)); // addToBot(new DrawCardAction(1)); // addToBot(new GainEnergyAction(1)); // activated = true; diff --git a/src/main/java/theHexaghost/util/SealSealReward.java b/src/main/java/theHexaghost/util/SealSealReward.java index d2f53be45..44b3455bb 100644 --- a/src/main/java/theHexaghost/util/SealSealReward.java +++ b/src/main/java/theHexaghost/util/SealSealReward.java @@ -51,7 +51,7 @@ public static AbstractSealCard newGetCcard(){ dic.put(6, new FifthSeal()); while(true) { int roll = cardRng.random(sum); - System.out.println("Rolled on seal geenration: " + roll); + System.out.println("Rolled on seal generation: " + roll); for (int i = 1; i <= 6; i++) { progress += HexaMod.seal_weight[i]; if (roll <= progress) { diff --git a/src/main/resources/IdeaProjects.lnk b/src/main/resources/IdeaProjects.lnk new file mode 100644 index 000000000..6126bf08c Binary files /dev/null and b/src/main/resources/IdeaProjects.lnk differ diff --git a/src/main/resources/awakenedResources/images/1024/bg_attack_awakened.png b/src/main/resources/awakenedResources/images/1024/bg_attack_awakened.png new file mode 100644 index 000000000..81d2dd8b6 Binary files /dev/null and b/src/main/resources/awakenedResources/images/1024/bg_attack_awakened.png differ diff --git a/src/main/resources/awakenedResources/images/1024/bg_power_awakened.png b/src/main/resources/awakenedResources/images/1024/bg_power_awakened.png new file mode 100644 index 000000000..60d16effe Binary files /dev/null and b/src/main/resources/awakenedResources/images/1024/bg_power_awakened.png differ diff --git a/src/main/resources/awakenedResources/images/1024/bg_skill_awakened.png b/src/main/resources/awakenedResources/images/1024/bg_skill_awakened.png new file mode 100644 index 000000000..29b4ba8b8 Binary files /dev/null and b/src/main/resources/awakenedResources/images/1024/bg_skill_awakened.png differ diff --git a/src/main/resources/awakenedResources/images/1024/card_awakened_orb.png b/src/main/resources/awakenedResources/images/1024/card_awakened_orb.png new file mode 100644 index 000000000..64f8cde4d Binary files /dev/null and b/src/main/resources/awakenedResources/images/1024/card_awakened_orb.png differ diff --git a/src/main/resources/awakenedResources/images/512/bg_attack_awakened.png b/src/main/resources/awakenedResources/images/512/bg_attack_awakened.png new file mode 100644 index 000000000..8639c0779 Binary files /dev/null and b/src/main/resources/awakenedResources/images/512/bg_attack_awakened.png differ diff --git a/src/main/resources/awakenedResources/images/512/bg_power_awakened.png b/src/main/resources/awakenedResources/images/512/bg_power_awakened.png new file mode 100644 index 000000000..8dd48eb2c Binary files /dev/null and b/src/main/resources/awakenedResources/images/512/bg_power_awakened.png differ diff --git a/src/main/resources/awakenedResources/images/512/bg_skill_awakened.png b/src/main/resources/awakenedResources/images/512/bg_skill_awakened.png new file mode 100644 index 000000000..905cfc6c5 Binary files /dev/null and b/src/main/resources/awakenedResources/images/512/bg_skill_awakened.png differ diff --git a/src/main/resources/awakenedResources/images/512/card_awakened_orb.png b/src/main/resources/awakenedResources/images/512/card_awakened_orb.png new file mode 100644 index 000000000..db494c14a Binary files /dev/null and b/src/main/resources/awakenedResources/images/512/card_awakened_orb.png differ diff --git a/src/main/resources/awakenedResources/images/512/card_small_orb.png b/src/main/resources/awakenedResources/images/512/card_small_orb.png new file mode 100644 index 000000000..65182a7c4 Binary files /dev/null and b/src/main/resources/awakenedResources/images/512/card_small_orb.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Altar.png b/src/main/resources/awakenedResources/images/cards/Altar.png new file mode 100644 index 000000000..950641bec Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Altar.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Altar_p.png b/src/main/resources/awakenedResources/images/cards/Altar_p.png new file mode 100644 index 000000000..b84ffc93b Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Altar_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/AphoticFount.png b/src/main/resources/awakenedResources/images/cards/AphoticFount.png new file mode 100644 index 000000000..3a9e5410f Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/AphoticFount.png differ diff --git a/src/main/resources/awakenedResources/images/cards/AphoticFount_p.png b/src/main/resources/awakenedResources/images/cards/AphoticFount_p.png new file mode 100644 index 000000000..10adb3d07 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/AphoticFount_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/AphoticShield.png b/src/main/resources/awakenedResources/images/cards/AphoticShield.png new file mode 100644 index 000000000..b8fce7144 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/AphoticShield.png differ diff --git a/src/main/resources/awakenedResources/images/cards/AphoticShield_p.png b/src/main/resources/awakenedResources/images/cards/AphoticShield_p.png new file mode 100644 index 000000000..a7f563281 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/AphoticShield_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/ArcaneNesting.png b/src/main/resources/awakenedResources/images/cards/ArcaneNesting.png new file mode 100644 index 000000000..ba9d490f5 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/ArcaneNesting.png differ diff --git a/src/main/resources/awakenedResources/images/cards/ArcaneNesting_p.png b/src/main/resources/awakenedResources/images/cards/ArcaneNesting_p.png new file mode 100644 index 000000000..237b9b8d8 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/ArcaneNesting_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/BloodRite.png b/src/main/resources/awakenedResources/images/cards/BloodRite.png new file mode 100644 index 000000000..625e6796c Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/BloodRite.png differ diff --git a/src/main/resources/awakenedResources/images/cards/BloodRite_p.png b/src/main/resources/awakenedResources/images/cards/BloodRite_p.png new file mode 100644 index 000000000..5ce57c0a1 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/BloodRite_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Darkleech.png b/src/main/resources/awakenedResources/images/cards/Darkleech.png new file mode 100644 index 000000000..5b52285b6 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Darkleech.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Darkleech_p.png b/src/main/resources/awakenedResources/images/cards/Darkleech_p.png new file mode 100644 index 000000000..f84e6b895 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Darkleech_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/DarknessFalls.png b/src/main/resources/awakenedResources/images/cards/DarknessFalls.png new file mode 100644 index 000000000..b88445704 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/DarknessFalls.png differ diff --git a/src/main/resources/awakenedResources/images/cards/DarknessFalls_p.png b/src/main/resources/awakenedResources/images/cards/DarknessFalls_p.png new file mode 100644 index 000000000..23ca59b32 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/DarknessFalls_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/DeathCoil.png b/src/main/resources/awakenedResources/images/cards/DeathCoil.png new file mode 100644 index 000000000..8c9c29f9a Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/DeathCoil.png differ diff --git a/src/main/resources/awakenedResources/images/cards/DeathCoil_p.png b/src/main/resources/awakenedResources/images/cards/DeathCoil_p.png new file mode 100644 index 000000000..668a95741 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/DeathCoil_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Defend.png b/src/main/resources/awakenedResources/images/cards/Defend.png new file mode 100644 index 000000000..a2afeec75 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Defend.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Defend_p.png b/src/main/resources/awakenedResources/images/cards/Defend_p.png new file mode 100644 index 000000000..06c9265c5 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Defend_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/EclipseEmbrace.png b/src/main/resources/awakenedResources/images/cards/EclipseEmbrace.png new file mode 100644 index 000000000..e61223c53 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/EclipseEmbrace.png differ diff --git a/src/main/resources/awakenedResources/images/cards/EclipseEmbrace_p.png b/src/main/resources/awakenedResources/images/cards/EclipseEmbrace_p.png new file mode 100644 index 000000000..58875fa9a Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/EclipseEmbrace_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Extension.png b/src/main/resources/awakenedResources/images/cards/Extension.png new file mode 100644 index 000000000..1770b8a51 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Extension.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Extension_p.png b/src/main/resources/awakenedResources/images/cards/Extension_p.png new file mode 100644 index 000000000..7378132a6 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Extension_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/FeatherWhirl.png b/src/main/resources/awakenedResources/images/cards/FeatherWhirl.png new file mode 100644 index 000000000..9a3dc83c0 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/FeatherWhirl.png differ diff --git a/src/main/resources/awakenedResources/images/cards/FeatherWhirl_p.png b/src/main/resources/awakenedResources/images/cards/FeatherWhirl_p.png new file mode 100644 index 000000000..2c6b182d8 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/FeatherWhirl_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Grimoire.png b/src/main/resources/awakenedResources/images/cards/Grimoire.png new file mode 100644 index 000000000..13103881f Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Grimoire.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Grimoire_p.png b/src/main/resources/awakenedResources/images/cards/Grimoire_p.png new file mode 100644 index 000000000..49cc2bf76 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Grimoire_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Hymn.png b/src/main/resources/awakenedResources/images/cards/Hymn.png new file mode 100644 index 000000000..daf6010ad Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Hymn.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Hymn_p.png b/src/main/resources/awakenedResources/images/cards/Hymn_p.png new file mode 100644 index 000000000..5f94cb674 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Hymn_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Initiation.png b/src/main/resources/awakenedResources/images/cards/Initiation.png new file mode 100644 index 000000000..c5954efc6 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Initiation.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Initiation_p.png b/src/main/resources/awakenedResources/images/cards/Initiation_p.png new file mode 100644 index 000000000..85bdf1794 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Initiation_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Intensify.png b/src/main/resources/awakenedResources/images/cards/Intensify.png new file mode 100644 index 000000000..f439f2e4d Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Intensify.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Intensify_p.png b/src/main/resources/awakenedResources/images/cards/Intensify_p.png new file mode 100644 index 000000000..45be79a22 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Intensify_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/KnifesEdge.png b/src/main/resources/awakenedResources/images/cards/KnifesEdge.png new file mode 100644 index 000000000..b604e1763 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/KnifesEdge.png differ diff --git a/src/main/resources/awakenedResources/images/cards/KnifesEdge_p.png b/src/main/resources/awakenedResources/images/cards/KnifesEdge_p.png new file mode 100644 index 000000000..a22de7646 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/KnifesEdge_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/MirePit.png b/src/main/resources/awakenedResources/images/cards/MirePit.png new file mode 100644 index 000000000..6c60aa34b Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/MirePit.png differ diff --git a/src/main/resources/awakenedResources/images/cards/MirePit_p.png b/src/main/resources/awakenedResources/images/cards/MirePit_p.png new file mode 100644 index 000000000..e4353dca2 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/MirePit_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/MoonlitVision.png b/src/main/resources/awakenedResources/images/cards/MoonlitVision.png new file mode 100644 index 000000000..777be684f Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/MoonlitVision.png differ diff --git a/src/main/resources/awakenedResources/images/cards/MoonlitVision_p.png b/src/main/resources/awakenedResources/images/cards/MoonlitVision_p.png new file mode 100644 index 000000000..df7d0d8f0 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/MoonlitVision_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Nihil.png b/src/main/resources/awakenedResources/images/cards/Nihil.png new file mode 100644 index 000000000..d844664be Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Nihil.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Nihil_p.png b/src/main/resources/awakenedResources/images/cards/Nihil_p.png new file mode 100644 index 000000000..21304e522 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Nihil_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Peck.png b/src/main/resources/awakenedResources/images/cards/Peck.png new file mode 100644 index 000000000..da657b0d2 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Peck.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Peck_p.png b/src/main/resources/awakenedResources/images/cards/Peck_p.png new file mode 100644 index 000000000..57a995d63 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Peck_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Primacy.png b/src/main/resources/awakenedResources/images/cards/Primacy.png new file mode 100644 index 000000000..06e560e0e Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Primacy.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Primacy_p.png b/src/main/resources/awakenedResources/images/cards/Primacy_p.png new file mode 100644 index 000000000..28ba02f45 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Primacy_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Procession.png b/src/main/resources/awakenedResources/images/cards/Procession.png new file mode 100644 index 000000000..9347a1406 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Procession.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Procession_p.png b/src/main/resources/awakenedResources/images/cards/Procession_p.png new file mode 100644 index 000000000..b02712143 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Procession_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Psalm.png b/src/main/resources/awakenedResources/images/cards/Psalm.png new file mode 100644 index 000000000..0d4d2bcf9 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Psalm.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Psalm_p.png b/src/main/resources/awakenedResources/images/cards/Psalm_p.png new file mode 100644 index 000000000..f9c6dcb23 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Psalm_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/RealityRift.png b/src/main/resources/awakenedResources/images/cards/RealityRift.png new file mode 100644 index 000000000..1630a4ef3 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/RealityRift.png differ diff --git a/src/main/resources/awakenedResources/images/cards/RealityRift_p.png b/src/main/resources/awakenedResources/images/cards/RealityRift_p.png new file mode 100644 index 000000000..4970d95b1 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/RealityRift_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/RisingChant.png b/src/main/resources/awakenedResources/images/cards/RisingChant.png new file mode 100644 index 000000000..e9924b975 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/RisingChant.png differ diff --git a/src/main/resources/awakenedResources/images/cards/RisingChant_p.png b/src/main/resources/awakenedResources/images/cards/RisingChant_p.png new file mode 100644 index 000000000..8cf3540f0 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/RisingChant_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Scour.png b/src/main/resources/awakenedResources/images/cards/Scour.png new file mode 100644 index 000000000..716b60179 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Scour.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Scour_p.png b/src/main/resources/awakenedResources/images/cards/Scour_p.png new file mode 100644 index 000000000..3cb743c72 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Scour_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/SingularityShield.png b/src/main/resources/awakenedResources/images/cards/SingularityShield.png new file mode 100644 index 000000000..27551a385 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/SingularityShield.png differ diff --git a/src/main/resources/awakenedResources/images/cards/SingularityShield_p.png b/src/main/resources/awakenedResources/images/cards/SingularityShield_p.png new file mode 100644 index 000000000..d7e335b12 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/SingularityShield_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Siphon.png b/src/main/resources/awakenedResources/images/cards/Siphon.png new file mode 100644 index 000000000..2b817b3b1 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Siphon.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Siphon_p.png b/src/main/resources/awakenedResources/images/cards/Siphon_p.png new file mode 100644 index 000000000..3b4a35eb4 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Siphon_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/SongOfSorrow.png b/src/main/resources/awakenedResources/images/cards/SongOfSorrow.png new file mode 100644 index 000000000..f54525f34 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/SongOfSorrow.png differ diff --git a/src/main/resources/awakenedResources/images/cards/SongOfSorrow_p.png b/src/main/resources/awakenedResources/images/cards/SongOfSorrow_p.png new file mode 100644 index 000000000..ba95a760a Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/SongOfSorrow_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Spellshield.png b/src/main/resources/awakenedResources/images/cards/Spellshield.png new file mode 100644 index 000000000..8769c4ce9 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Spellshield.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Spellshield_p.png b/src/main/resources/awakenedResources/images/cards/Spellshield_p.png new file mode 100644 index 000000000..804859be8 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Spellshield_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Thaumaturgy.png b/src/main/resources/awakenedResources/images/cards/Thaumaturgy.png new file mode 100644 index 000000000..eb0a685a4 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Thaumaturgy.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Thaumaturgy_p.png b/src/main/resources/awakenedResources/images/cards/Thaumaturgy_p.png new file mode 100644 index 000000000..335bec13f Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Thaumaturgy_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Thunderbolt.png b/src/main/resources/awakenedResources/images/cards/Thunderbolt.png new file mode 100644 index 000000000..09a78ddd4 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Thunderbolt.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Thunderbolt_p.png b/src/main/resources/awakenedResources/images/cards/Thunderbolt_p.png new file mode 100644 index 000000000..42ad9f5c2 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Thunderbolt_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Victuals.png b/src/main/resources/awakenedResources/images/cards/Victuals.png new file mode 100644 index 000000000..84dcbde88 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Victuals.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Victuals_p.png b/src/main/resources/awakenedResources/images/cards/Victuals_p.png new file mode 100644 index 000000000..58e7fe05a Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Victuals_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/WaveOfMiasma.png b/src/main/resources/awakenedResources/images/cards/WaveOfMiasma.png new file mode 100644 index 000000000..78623ee87 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/WaveOfMiasma.png differ diff --git a/src/main/resources/awakenedResources/images/cards/WaveOfMiasma_p.png b/src/main/resources/awakenedResources/images/cards/WaveOfMiasma_p.png new file mode 100644 index 000000000..2487599a9 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/WaveOfMiasma_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/Bloodthirst.png b/src/main/resources/awakenedResources/images/cards/joke/Bloodthirst.png new file mode 100644 index 000000000..150e949d5 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/Bloodthirst.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/Bloodthirst_p.png b/src/main/resources/awakenedResources/images/cards/joke/Bloodthirst_p.png new file mode 100644 index 000000000..64a1b5d98 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/Bloodthirst_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/BurningStudy.png b/src/main/resources/awakenedResources/images/cards/joke/BurningStudy.png new file mode 100644 index 000000000..63241c416 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/BurningStudy.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/BurningStudy_p.png b/src/main/resources/awakenedResources/images/cards/joke/BurningStudy_p.png new file mode 100644 index 000000000..088b9baae Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/BurningStudy_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/Caw.png b/src/main/resources/awakenedResources/images/cards/joke/Caw.png new file mode 100644 index 000000000..0968e6d7f Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/Caw.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/Caw_p.png b/src/main/resources/awakenedResources/images/cards/joke/Caw_p.png new file mode 100644 index 000000000..fbbeb7806 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/Caw_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/Cryostasis.png b/src/main/resources/awakenedResources/images/cards/joke/Cryostasis.png new file mode 100644 index 000000000..aeebaef9c Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/Cryostasis.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/Cryostasis_p.png b/src/main/resources/awakenedResources/images/cards/joke/Cryostasis_p.png new file mode 100644 index 000000000..10da92c84 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/Cryostasis_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/Darkleech.png b/src/main/resources/awakenedResources/images/cards/joke/Darkleech.png new file mode 100644 index 000000000..c434c335c Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/Darkleech.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/Darkleech_p.png b/src/main/resources/awakenedResources/images/cards/joke/Darkleech_p.png new file mode 100644 index 000000000..78a3f7c0d Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/Darkleech_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/Defend.png b/src/main/resources/awakenedResources/images/cards/joke/Defend.png new file mode 100644 index 000000000..b242bc715 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/Defend.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/Defend_p.png b/src/main/resources/awakenedResources/images/cards/joke/Defend_p.png new file mode 100644 index 000000000..d3a878b81 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/Defend_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/Middens.png b/src/main/resources/awakenedResources/images/cards/joke/Middens.png new file mode 100644 index 000000000..ee6eda03d Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/Middens.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/Middens_p.png b/src/main/resources/awakenedResources/images/cards/joke/Middens_p.png new file mode 100644 index 000000000..6438b2732 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/Middens_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/Strike.png b/src/main/resources/awakenedResources/images/cards/joke/Strike.png new file mode 100644 index 000000000..5810f9db4 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/Strike.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/Strike_p.png b/src/main/resources/awakenedResources/images/cards/joke/Strike_p.png new file mode 100644 index 000000000..529f10405 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/Strike_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/Thunderbolt.png b/src/main/resources/awakenedResources/images/cards/joke/Thunderbolt.png new file mode 100644 index 000000000..a8c4a4487 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/Thunderbolt.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/Thunderbolt_p.png b/src/main/resources/awakenedResources/images/cards/joke/Thunderbolt_p.png new file mode 100644 index 000000000..277aea2dd Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/Thunderbolt_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Altar.png b/src/main/resources/awakenedResources/images/cards/programmerart/Altar.png new file mode 100644 index 000000000..854a9e8de Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Altar.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Altar_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/Altar_p.png new file mode 100644 index 000000000..9d2c3d04a Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Altar_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/AphoticFount.png b/src/main/resources/awakenedResources/images/cards/programmerart/AphoticFount.png new file mode 100644 index 000000000..7336191e7 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/AphoticFount.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/AphoticFount_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/AphoticFount_p.png new file mode 100644 index 000000000..7bf95c321 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/AphoticFount_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/AphoticShield.png b/src/main/resources/awakenedResources/images/cards/programmerart/AphoticShield.png new file mode 100644 index 000000000..a59ad3f3c Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/AphoticShield.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/AphoticShield_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/AphoticShield_p.png new file mode 100644 index 000000000..b3cd75583 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/AphoticShield_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/ArcaneNesting.png b/src/main/resources/awakenedResources/images/cards/programmerart/ArcaneNesting.png new file mode 100644 index 000000000..1f948d7fe Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/ArcaneNesting.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/ArcaneNesting_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/ArcaneNesting_p.png new file mode 100644 index 000000000..a01b613b1 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/ArcaneNesting_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Archmagus.png b/src/main/resources/awakenedResources/images/cards/programmerart/Archmagus.png new file mode 100644 index 000000000..b9d34b36a Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Archmagus.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Archmagus_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/Archmagus_p.png new file mode 100644 index 000000000..04f605cf3 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Archmagus_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/AwakenedForm.png b/src/main/resources/awakenedResources/images/cards/programmerart/AwakenedForm.png new file mode 100644 index 000000000..a076b16c5 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/AwakenedForm.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/AwakenedForm_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/AwakenedForm_p.png new file mode 100644 index 000000000..c85eb29e0 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/AwakenedForm_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Baptism.png b/src/main/resources/awakenedResources/images/cards/programmerart/Baptism.png new file mode 100644 index 000000000..7e639d3b0 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Baptism.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Baptism_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/Baptism_p.png new file mode 100644 index 000000000..cc6d9de34 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Baptism_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/BirdsEye.png b/src/main/resources/awakenedResources/images/cards/programmerart/BirdsEye.png new file mode 100644 index 000000000..61117f55f Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/BirdsEye.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/BirdsEye_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/BirdsEye_p.png new file mode 100644 index 000000000..01e9e3653 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/BirdsEye_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/BloodRite.png b/src/main/resources/awakenedResources/images/cards/programmerart/BloodRite.png new file mode 100644 index 000000000..4e39311f2 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/BloodRite.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/BloodRite_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/BloodRite_p.png new file mode 100644 index 000000000..2d8f2f18f Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/BloodRite_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Brainshock.png b/src/main/resources/awakenedResources/images/cards/programmerart/Brainshock.png new file mode 100644 index 000000000..ff7637b06 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Brainshock.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Brainshock_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/Brainshock_p.png new file mode 100644 index 000000000..78096079c Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Brainshock_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Carrionmaker.png b/src/main/resources/awakenedResources/images/cards/programmerart/Carrionmaker.png new file mode 100644 index 000000000..57654284b Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Carrionmaker.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Carrionmaker_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/Carrionmaker_p.png new file mode 100644 index 000000000..6b59b16d5 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Carrionmaker_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Caw.png b/src/main/resources/awakenedResources/images/cards/programmerart/Caw.png new file mode 100644 index 000000000..b4c38b778 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Caw.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Caw_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/Caw_p.png new file mode 100644 index 000000000..4a4a41f57 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Caw_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Ceremony.png b/src/main/resources/awakenedResources/images/cards/programmerart/Ceremony.png new file mode 100644 index 000000000..4ec91b590 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Ceremony.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Ceremony_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/Ceremony_p.png new file mode 100644 index 000000000..f022bee12 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Ceremony_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/ChosenVerse.png b/src/main/resources/awakenedResources/images/cards/programmerart/ChosenVerse.png new file mode 100644 index 000000000..73faf1c48 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/ChosenVerse.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/ChosenVerse_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/ChosenVerse_p.png new file mode 100644 index 000000000..1aaf2baed Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/ChosenVerse_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/ClarionCall.png b/src/main/resources/awakenedResources/images/cards/programmerart/ClarionCall.png new file mode 100644 index 000000000..c17ab5aba Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/ClarionCall.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/ClarionCall_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/ClarionCall_p.png new file mode 100644 index 000000000..c093bb489 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/ClarionCall_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Clutch.png b/src/main/resources/awakenedResources/images/cards/programmerart/Clutch.png new file mode 100644 index 000000000..9838afe50 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Clutch.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Clutch_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/Clutch_p.png new file mode 100644 index 000000000..ad27a23d1 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Clutch_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/DarkEcho.png b/src/main/resources/awakenedResources/images/cards/programmerart/DarkEcho.png new file mode 100644 index 000000000..fa63951d8 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/DarkEcho.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/DarkEcho_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/DarkEcho_p.png new file mode 100644 index 000000000..9a3c4c00d Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/DarkEcho_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/DarknessFalls.png b/src/main/resources/awakenedResources/images/cards/programmerart/DarknessFalls.png new file mode 100644 index 000000000..8e977ec56 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/DarknessFalls.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/DarknessFalls_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/DarknessFalls_p.png new file mode 100644 index 000000000..21373b374 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/DarknessFalls_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/DeathCoil.png b/src/main/resources/awakenedResources/images/cards/programmerart/DeathCoil.png new file mode 100644 index 000000000..11d22e19f Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/DeathCoil.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/DeathCoil_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/DeathCoil_p.png new file mode 100644 index 000000000..5332fedf4 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/DeathCoil_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Deathwish.png b/src/main/resources/awakenedResources/images/cards/programmerart/Deathwish.png new file mode 100644 index 000000000..b0912571a Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Deathwish.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Deathwish_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/Deathwish_p.png new file mode 100644 index 000000000..5054033b5 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Deathwish_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Dejection.png b/src/main/resources/awakenedResources/images/cards/programmerart/Dejection.png new file mode 100644 index 000000000..f9a2781bb Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Dejection.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Dejection_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/Dejection_p.png new file mode 100644 index 000000000..b9eeea7ec Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Dejection_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/DemonGlyph.png b/src/main/resources/awakenedResources/images/cards/programmerart/DemonGlyph.png new file mode 100644 index 000000000..d058302c4 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/DemonGlyph.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/DemonGlyph_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/DemonGlyph_p.png new file mode 100644 index 000000000..b0202724a Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/DemonGlyph_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/DesperatePrayer.png b/src/main/resources/awakenedResources/images/cards/programmerart/DesperatePrayer.png new file mode 100644 index 000000000..500fc14ae Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/DesperatePrayer.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/DesperatePrayer_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/DesperatePrayer_p.png new file mode 100644 index 000000000..05ce6fb5c Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/DesperatePrayer_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/ESPSpell.png b/src/main/resources/awakenedResources/images/cards/programmerart/ESPSpell.png new file mode 100644 index 000000000..d29e028ec Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/ESPSpell.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/ESPSpell_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/ESPSpell_p.png new file mode 100644 index 000000000..e4585fefc Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/ESPSpell_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/EclipseEmbrace.png b/src/main/resources/awakenedResources/images/cards/programmerart/EclipseEmbrace.png new file mode 100644 index 000000000..9b0a190fb Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/EclipseEmbrace.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/EclipseEmbrace_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/EclipseEmbrace_p.png new file mode 100644 index 000000000..1e4e2f7c8 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/EclipseEmbrace_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Ensorcelate.png b/src/main/resources/awakenedResources/images/cards/programmerart/Ensorcelate.png new file mode 100644 index 000000000..7b4bbb2cf Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Ensorcelate.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Ensorcelate_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/Ensorcelate_p.png new file mode 100644 index 000000000..09c31d4e3 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Ensorcelate_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Envision.png b/src/main/resources/awakenedResources/images/cards/programmerart/Envision.png new file mode 100644 index 000000000..d25651f4d Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Envision.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Envision_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/Envision_p.png new file mode 100644 index 000000000..1aabdf413 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Envision_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Extension.png b/src/main/resources/awakenedResources/images/cards/programmerart/Extension.png new file mode 100644 index 000000000..9868ebe5f Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Extension.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Extension_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/Extension_p.png new file mode 100644 index 000000000..72689c504 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Extension_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/FeatherVeil.png b/src/main/resources/awakenedResources/images/cards/programmerart/FeatherVeil.png new file mode 100644 index 000000000..42e6fc99f Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/FeatherVeil.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/FeatherVeil_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/FeatherVeil_p.png new file mode 100644 index 000000000..f6f8b6cd8 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/FeatherVeil_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/FeatherWhirl.png b/src/main/resources/awakenedResources/images/cards/programmerart/FeatherWhirl.png new file mode 100644 index 000000000..df7f40b53 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/FeatherWhirl.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/FeatherWhirl_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/FeatherWhirl_p.png new file mode 100644 index 000000000..b5364bc5c Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/FeatherWhirl_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/FlareShot.png b/src/main/resources/awakenedResources/images/cards/programmerart/FlareShot.png new file mode 100644 index 000000000..7a0eb94c5 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/FlareShot.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/FlareShot_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/FlareShot_p.png new file mode 100644 index 000000000..84f8728e6 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/FlareShot_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/FourthDimension.png b/src/main/resources/awakenedResources/images/cards/programmerart/FourthDimension.png new file mode 100644 index 000000000..2ca39a6a4 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/FourthDimension.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/FourthDimension_p.png.png b/src/main/resources/awakenedResources/images/cards/programmerart/FourthDimension_p.png.png new file mode 100644 index 000000000..ec6c01e31 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/FourthDimension_p.png.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Gather.png b/src/main/resources/awakenedResources/images/cards/programmerart/Gather.png new file mode 100644 index 000000000..9e8d83664 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Gather.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Gather_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/Gather_p.png new file mode 100644 index 000000000..87662f86a Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Gather_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Gloomguard.png b/src/main/resources/awakenedResources/images/cards/programmerart/Gloomguard.png new file mode 100644 index 000000000..21994782c Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Gloomguard.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Gloomguard_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/Gloomguard_p.png new file mode 100644 index 000000000..d4cce6bc9 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Gloomguard_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Grimoire.png b/src/main/resources/awakenedResources/images/cards/programmerart/Grimoire.png new file mode 100644 index 000000000..ee7b348d4 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Grimoire.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Grimoire_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/Grimoire_p.png new file mode 100644 index 000000000..9d3b24d4f Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Grimoire_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Hatchery.png b/src/main/resources/awakenedResources/images/cards/programmerart/Hatchery.png new file mode 100644 index 000000000..27616b83d Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Hatchery.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Hatchery_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/Hatchery_p.png new file mode 100644 index 000000000..2df3f35aa Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Hatchery_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Hymn.png b/src/main/resources/awakenedResources/images/cards/programmerart/Hymn.png new file mode 100644 index 000000000..caf27825c Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Hymn.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Hymn_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/Hymn_p.png new file mode 100644 index 000000000..0c563d2e7 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Hymn_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Initiation.png b/src/main/resources/awakenedResources/images/cards/programmerart/Initiation.png new file mode 100644 index 000000000..2cd8bbf87 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Initiation.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Initiation_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/Initiation_p.png new file mode 100644 index 000000000..62ce8f1b9 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Initiation_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Intensify.png b/src/main/resources/awakenedResources/images/cards/programmerart/Intensify.png new file mode 100644 index 000000000..7ecf158d9 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Intensify.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Intensify_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/Intensify_p.png new file mode 100644 index 000000000..0445db90b Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Intensify_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/KnifesEdge.png b/src/main/resources/awakenedResources/images/cards/programmerart/KnifesEdge.png new file mode 100644 index 000000000..4c430a4e8 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/KnifesEdge.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/KnifesEdge_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/KnifesEdge_p.png new file mode 100644 index 000000000..3066a99c6 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/KnifesEdge_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/MagicStrike.png b/src/main/resources/awakenedResources/images/cards/programmerart/MagicStrike.png new file mode 100644 index 000000000..176194658 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/MagicStrike.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/MagicStrike_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/MagicStrike_p.png new file mode 100644 index 000000000..ef3a3fc7d Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/MagicStrike_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Manastorm.png b/src/main/resources/awakenedResources/images/cards/programmerart/Manastorm.png new file mode 100644 index 000000000..7990c02e5 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Manastorm.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Manastorm_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/Manastorm_p.png new file mode 100644 index 000000000..54c402ab9 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Manastorm_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/MiddenHeap.png b/src/main/resources/awakenedResources/images/cards/programmerart/MiddenHeap.png new file mode 100644 index 000000000..d024cfea6 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/MiddenHeap.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/MiddenHeap_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/MiddenHeap_p.png new file mode 100644 index 000000000..2957d0362 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/MiddenHeap_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/MirePit.png b/src/main/resources/awakenedResources/images/cards/programmerart/MirePit.png new file mode 100644 index 000000000..d8f4f0b62 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/MirePit.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/MirePit_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/MirePit_p.png new file mode 100644 index 000000000..6288165c2 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/MirePit_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/MoonlitVision.png b/src/main/resources/awakenedResources/images/cards/programmerart/MoonlitVision.png new file mode 100644 index 000000000..ede8b97df Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/MoonlitVision.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/MoonlitVision_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/MoonlitVision_p.png new file mode 100644 index 000000000..cb10c13e8 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/MoonlitVision_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Murder.png b/src/main/resources/awakenedResources/images/cards/programmerart/Murder.png new file mode 100644 index 000000000..871261afc Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Murder.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Murder_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/Murder_p.png new file mode 100644 index 000000000..c0526aa62 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Murder_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/MysticOrder.png b/src/main/resources/awakenedResources/images/cards/programmerart/MysticOrder.png new file mode 100644 index 000000000..0f3bc62e8 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/MysticOrder.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/MysticOrder_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/MysticOrder_p.png new file mode 100644 index 000000000..5c5540618 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/MysticOrder_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Nihil.png b/src/main/resources/awakenedResources/images/cards/programmerart/Nihil.png new file mode 100644 index 000000000..5261ec878 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Nihil.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Nihil_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/Nihil_p.png new file mode 100644 index 000000000..bf654f215 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Nihil_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Peck.png b/src/main/resources/awakenedResources/images/cards/programmerart/Peck.png new file mode 100644 index 000000000..7af4ec21d Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Peck.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Peck_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/Peck_p.png new file mode 100644 index 000000000..9c8450cac Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Peck_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Planeswalk.png b/src/main/resources/awakenedResources/images/cards/programmerart/Planeswalk.png new file mode 100644 index 000000000..cd4fcc907 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Planeswalk.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Planeswalk_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/Planeswalk_p.png new file mode 100644 index 000000000..7d051575c Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Planeswalk_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Pluck.png b/src/main/resources/awakenedResources/images/cards/programmerart/Pluck.png new file mode 100644 index 000000000..6a5e62300 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Pluck.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Pluck_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/Pluck_p.png new file mode 100644 index 000000000..5750f23b8 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Pluck_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/PlumeJab.png b/src/main/resources/awakenedResources/images/cards/programmerart/PlumeJab.png new file mode 100644 index 000000000..7c4c3f1ff Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/PlumeJab.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/PlumeJab_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/PlumeJab_p.png new file mode 100644 index 000000000..5c65f50ec Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/PlumeJab_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Primacy.png b/src/main/resources/awakenedResources/images/cards/programmerart/Primacy.png new file mode 100644 index 000000000..bc3195ce8 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Primacy.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Primacy_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/Primacy_p.png new file mode 100644 index 000000000..70d0c410a Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Primacy_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Procession.png b/src/main/resources/awakenedResources/images/cards/programmerart/Procession.png new file mode 100644 index 000000000..0a7bf5a7d Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Procession.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Procession_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/Procession_p.png new file mode 100644 index 000000000..28930abcd Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Procession_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/ProfaneStrike.png b/src/main/resources/awakenedResources/images/cards/programmerart/ProfaneStrike.png new file mode 100644 index 000000000..0304f5136 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/ProfaneStrike.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/ProfaneStrike_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/ProfaneStrike_p.png new file mode 100644 index 000000000..6b8ea5abe Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/ProfaneStrike_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Psalm.png b/src/main/resources/awakenedResources/images/cards/programmerart/Psalm.png new file mode 100644 index 000000000..90fdab84d Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Psalm.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Psalm_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/Psalm_p.png new file mode 100644 index 000000000..1a7271d5d Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Psalm_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/RavenStrike.png b/src/main/resources/awakenedResources/images/cards/programmerart/RavenStrike.png new file mode 100644 index 000000000..e4ca7e385 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/RavenStrike.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/RavenStrike_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/RavenStrike_p.png new file mode 100644 index 000000000..7525619b8 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/RavenStrike_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/RealityRift.png b/src/main/resources/awakenedResources/images/cards/programmerart/RealityRift.png new file mode 100644 index 000000000..a886a0820 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/RealityRift.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/RealityRift_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/RealityRift_p.png new file mode 100644 index 000000000..a646fd30e Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/RealityRift_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Rebirth.png b/src/main/resources/awakenedResources/images/cards/programmerart/Rebirth.png new file mode 100644 index 000000000..4a87fa9e1 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Rebirth.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Rebirth_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/Rebirth_p.png new file mode 100644 index 000000000..323545fcc Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Rebirth_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Recitation.png b/src/main/resources/awakenedResources/images/cards/programmerart/Recitation.png new file mode 100644 index 000000000..e49c3a85f Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Recitation.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Recitation_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/Recitation_p.png new file mode 100644 index 000000000..c07b7c12e Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Recitation_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/RisingChant.png b/src/main/resources/awakenedResources/images/cards/programmerart/RisingChant.png new file mode 100644 index 000000000..4c238d470 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/RisingChant.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/RisingChant_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/RisingChant_p.png new file mode 100644 index 000000000..ad7bd81f9 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/RisingChant_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Scour.png b/src/main/resources/awakenedResources/images/cards/programmerart/Scour.png new file mode 100644 index 000000000..190eea760 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Scour.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Scour_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/Scour_p.png new file mode 100644 index 000000000..da86cfb03 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Scour_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/SheerTerror.png b/src/main/resources/awakenedResources/images/cards/programmerart/SheerTerror.png new file mode 100644 index 000000000..ed86514c4 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/SheerTerror.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/SheerTerror_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/SheerTerror_p.png new file mode 100644 index 000000000..4ff0a39b1 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/SheerTerror_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/SingularityShield.png b/src/main/resources/awakenedResources/images/cards/programmerart/SingularityShield.png new file mode 100644 index 000000000..57c86924f Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/SingularityShield.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/SingularityShield_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/SingularityShield_p.png new file mode 100644 index 000000000..46ea9599b Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/SingularityShield_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Siphon.png b/src/main/resources/awakenedResources/images/cards/programmerart/Siphon.png new file mode 100644 index 000000000..9d352ad8a Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Siphon.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Siphon_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/Siphon_p.png new file mode 100644 index 000000000..9f06cd9a1 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Siphon_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Skyward.png b/src/main/resources/awakenedResources/images/cards/programmerart/Skyward.png new file mode 100644 index 000000000..80e1dcb1f Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Skyward.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Skyward_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/Skyward_p.png new file mode 100644 index 000000000..caf36f417 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Skyward_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/SludgeBomb.png b/src/main/resources/awakenedResources/images/cards/programmerart/SludgeBomb.png new file mode 100644 index 000000000..3d5e62268 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/SludgeBomb.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/SludgeBomb_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/SludgeBomb_p.png new file mode 100644 index 000000000..a7501e403 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/SludgeBomb_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/SongOfSorrow.png b/src/main/resources/awakenedResources/images/cards/programmerart/SongOfSorrow.png new file mode 100644 index 000000000..e376490ef Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/SongOfSorrow.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/SongOfSorrow_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/SongOfSorrow_p.png new file mode 100644 index 000000000..e2c597197 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/SongOfSorrow_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/SoulStrike.png b/src/main/resources/awakenedResources/images/cards/programmerart/SoulStrike.png new file mode 100644 index 000000000..d4100e417 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/SoulStrike.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/SoulStrike_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/SoulStrike_p.png new file mode 100644 index 000000000..f49f0d544 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/SoulStrike_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Spellbinder.png b/src/main/resources/awakenedResources/images/cards/programmerart/Spellbinder.png new file mode 100644 index 000000000..8fa436cdb Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Spellbinder.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Spellbinder_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/Spellbinder_p.png new file mode 100644 index 000000000..2d6d55c3b Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Spellbinder_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Spellshield.png b/src/main/resources/awakenedResources/images/cards/programmerart/Spellshield.png new file mode 100644 index 000000000..ec0d19777 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Spellshield.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Spellshield_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/Spellshield_p.png new file mode 100644 index 000000000..b97149584 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Spellshield_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Spew.png b/src/main/resources/awakenedResources/images/cards/programmerart/Spew.png new file mode 100644 index 000000000..70a47af6e Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Spew.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Spew_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/Spew_p.png new file mode 100644 index 000000000..37230550c Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Spew_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/SplitWide.png b/src/main/resources/awakenedResources/images/cards/programmerart/SplitWide.png new file mode 100644 index 000000000..ca9b6f243 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/SplitWide.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/SplitWide_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/SplitWide_p.png new file mode 100644 index 000000000..6ad5ca9bc Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/SplitWide_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Swoop.png b/src/main/resources/awakenedResources/images/cards/programmerart/Swoop.png new file mode 100644 index 000000000..5d1951db8 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Swoop.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Swoop_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/Swoop_p.png new file mode 100644 index 000000000..7591c1635 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Swoop_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/TakeFlight.png b/src/main/resources/awakenedResources/images/cards/programmerart/TakeFlight.png new file mode 100644 index 000000000..65a0597cf Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/TakeFlight.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/TakeFlight_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/TakeFlight_p.png new file mode 100644 index 000000000..6231202a2 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/TakeFlight_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/TalonRake.png b/src/main/resources/awakenedResources/images/cards/programmerart/TalonRake.png new file mode 100644 index 000000000..b064d79f6 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/TalonRake.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/TalonRake_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/TalonRake_p.png new file mode 100644 index 000000000..05165fc82 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/TalonRake_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Thaumaturgy.png b/src/main/resources/awakenedResources/images/cards/programmerart/Thaumaturgy.png new file mode 100644 index 000000000..d0c377307 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Thaumaturgy.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Thaumaturgy_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/Thaumaturgy_p.png new file mode 100644 index 000000000..b6009c276 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Thaumaturgy_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/TheTower.png b/src/main/resources/awakenedResources/images/cards/programmerart/TheTower.png new file mode 100644 index 000000000..23e786c20 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/TheTower.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/TheTower_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/TheTower_p.png new file mode 100644 index 000000000..616a8750a Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/TheTower_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/ToTheLimit.png b/src/main/resources/awakenedResources/images/cards/programmerart/ToTheLimit.png new file mode 100644 index 000000000..d6e1a563b Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/ToTheLimit.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/ToTheLimit_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/ToTheLimit_p.png new file mode 100644 index 000000000..7fb0b32f7 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/ToTheLimit_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/TowerOfEndings.png b/src/main/resources/awakenedResources/images/cards/programmerart/TowerOfEndings.png new file mode 100644 index 000000000..4441ff856 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/TowerOfEndings.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/TowerOfEndings_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/TowerOfEndings_p.png new file mode 100644 index 000000000..b96acbf03 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/TowerOfEndings_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Unleash.png b/src/main/resources/awakenedResources/images/cards/programmerart/Unleash.png new file mode 100644 index 000000000..605bd01cd Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Unleash.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Unleash_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/Unleash_p.png new file mode 100644 index 000000000..58f704fef Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Unleash_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Victuals.png b/src/main/resources/awakenedResources/images/cards/programmerart/Victuals.png new file mode 100644 index 000000000..bd61ab368 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Victuals.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Victuals_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/Victuals_p.png new file mode 100644 index 000000000..949191840 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Victuals_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/WaveOfMiasma.png b/src/main/resources/awakenedResources/images/cards/programmerart/WaveOfMiasma.png new file mode 100644 index 000000000..f7aecc354 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/WaveOfMiasma.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/WaveOfMiasma_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/WaveOfMiasma_p.png new file mode 100644 index 000000000..b583ee88a Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/WaveOfMiasma_p.png differ diff --git a/src/main/resources/awakenedResources/images/charSelect/charBG.png b/src/main/resources/awakenedResources/images/charSelect/charBG.png new file mode 100644 index 000000000..6877a5392 Binary files /dev/null and b/src/main/resources/awakenedResources/images/charSelect/charBG.png differ diff --git a/src/main/resources/awakenedResources/images/charSelect/charButton.png b/src/main/resources/awakenedResources/images/charSelect/charButton.png new file mode 100644 index 000000000..b62a71169 Binary files /dev/null and b/src/main/resources/awakenedResources/images/charSelect/charButton.png differ diff --git a/src/main/resources/awakenedResources/images/charSelect/leaderboard.png b/src/main/resources/awakenedResources/images/charSelect/leaderboard.png new file mode 100644 index 000000000..4299a05cc Binary files /dev/null and b/src/main/resources/awakenedResources/images/charSelect/leaderboard.png differ diff --git a/src/main/resources/awakenedResources/images/mainChar/AwakenedOne.png b/src/main/resources/awakenedResources/images/mainChar/AwakenedOne.png new file mode 100644 index 000000000..48bf827d5 Binary files /dev/null and b/src/main/resources/awakenedResources/images/mainChar/AwakenedOne.png differ diff --git a/src/main/resources/awakenedResources/images/mainChar/awakened.atlas b/src/main/resources/awakenedResources/images/mainChar/awakened.atlas new file mode 100644 index 000000000..4be26b3b6 --- /dev/null +++ b/src/main/resources/awakenedResources/images/mainChar/awakened.atlas @@ -0,0 +1,125 @@ + +AwakenedOne.png +size: 1024,256 +format: RGBA8888 +filter: Linear,Linear +repeat: none +ankle_f + rotate: false + xy: 423, 2 + size: 117, 52 + orig: 117, 52 + offset: 0, 0 + index: -1 +arm_f + rotate: true + xy: 933, 203 + size: 51, 84 + orig: 51, 84 + offset: 0, 0 + index: -1 +beak + rotate: false + xy: 542, 2 + size: 31, 52 + orig: 31, 52 + offset: 0, 0 + index: -1 +body + rotate: false + xy: 2, 47 + size: 419, 207 + orig: 419, 207 + offset: 0, 0 + index: -1 +dagger + rotate: true + xy: 105, 14 + size: 31, 39 + orig: 31, 39 + offset: 0, 0 + index: -1 +eye1 + rotate: true + xy: 546, 61 + size: 11, 18 + orig: 11, 18 + offset: 0, 0 + index: -1 +eyelid + rotate: true + xy: 682, 77 + size: 15, 24 + orig: 15, 24 + offset: 0, 0 + index: -1 +feathers + rotate: false + xy: 62, 12 + size: 41, 33 + orig: 41, 33 + offset: 0, 0 + index: -1 +forearm_f + rotate: true + xy: 2, 11 + size: 34, 58 + orig: 34, 58 + offset: 0, 0 + index: -1 +hand_b + rotate: false + xy: 896, 102 + size: 45, 75 + orig: 45, 75 + offset: 0, 0 + index: -1 +hand_f + rotate: false + xy: 933, 179 + size: 37, 22 + orig: 37, 22 + offset: 0, 0 + index: -1 +head + rotate: true + xy: 682, 94 + size: 83, 107 + orig: 83, 107 + offset: 0, 0 + index: -1 +leg_b + rotate: true + xy: 791, 101 + size: 76, 103 + orig: 76, 103 + offset: 0, 0 + index: -1 +leg_f + rotate: true + xy: 546, 74 + size: 103, 134 + orig: 103, 134 + offset: 0, 0 + index: -1 +light_1 + rotate: false + xy: 423, 56 + size: 121, 121 + orig: 121, 121 + offset: 0, 0 + index: -1 +lowBeak + rotate: true + xy: 146, 16 + size: 29, 34 + orig: 29, 34 + offset: 0, 0 + index: -1 +shadow + rotate: false + xy: 423, 179 + size: 508, 75 + orig: 508, 75 + offset: 0, 0 + index: -1 diff --git a/src/main/resources/awakenedResources/images/mainChar/awakened.json b/src/main/resources/awakenedResources/images/mainChar/awakened.json new file mode 100644 index 000000000..723cc350a --- /dev/null +++ b/src/main/resources/awakenedResources/images/mainChar/awakened.json @@ -0,0 +1 @@ +{"skeleton":{"hash":"NWAUfLtd4BLDqEWILo9YZ0ybTVI","spine":"3.4.02","width":508,"height":218.51,"images":"./images/"},"bones":[{ "name": "root","scaleX":-1 },{"name":"Hips","parent":"root","x":68.95,"y":112.04,"color":"ffe600ff"},{"name":"Spine_","parent":"Hips","length":41.93,"rotation":148.5,"x":-16.38,"y":24.3,"color":"1aff00ff"},{"name":"Spine_2","parent":"Spine_","length":45.66,"rotation":28.01,"x":41.93,"color":"1aff00ff"},{"name":"Spine_3","parent":"Spine_2","length":71.16,"rotation":14.9,"x":45.66,"color":"1aff00ff"},{"name":"Spine_4","parent":"Spine_3","length":42.58,"rotation":31.41,"x":71.16,"color":"1aff00ff"},{"name":"Arm_L_IK_hand","parent":"root","x":-89.67,"y":-20.12,"color":"ff3f00ff"},{"name":"Arm_L_IK_ankle","parent":"Arm_L_IK_hand","x":10.37,"y":10.92,"color":"ff3f00ff"},{"name":"Arm_L_","parent":"Spine_4","length":64.32,"rotation":71.69,"x":29.44,"y":46.57,"color":"ff0005ff"},{"name":"Arm_L_2","parent":"Arm_L_","length":46.69,"rotation":-46.67,"x":64.32,"color":"ff0005ff"},{"name":"Arm_L_3","parent":"Arm_L_2","length":16.05,"rotation":-20.18,"x":46.69,"color":"ff0005ff"},{"name":"Arm_R_IK_hand","parent":"root","x":-107.24,"y":1.08,"color":"ff3f00ff"},{"name":"Arm_R_IK_ankle","parent":"Arm_R_IK_hand","x":5.54,"y":4.55,"color":"ff3f00ff"},{"name":"Arm_R_","parent":"Hips","length":39.04,"rotation":-89.64,"x":-156.11,"y":-48.9,"color":"001effff"},{"name":"Arm_R_2","parent":"Arm_R_","length":23.62,"rotation":-38.64,"x":39.04,"color":"001effff"},{"name":"Arm_R_3","parent":"Arm_R_2","length":7.43,"rotation":-10.7,"x":23.62,"color":"001effff"},{"name":"Dagger","parent":"Hips","length":16.79,"rotation":-58.49,"x":-119.04,"y":-36.34,"color":"ff00e5ff"},{"name":"Head","parent":"Spine_4","length":52.52,"rotation":18.82,"x":36.4,"y":-1.68,"color":"ffeb00ff"},{"name":"Eye","parent":"Head","rotation":118.33,"x":71.58,"y":3.2,"color":"ff00c0ff"},{"name":"Leg_L_foot","parent":"root","x":103.93,"y":5.78,"color":"ff3f00ff"},{"name":"Leg_L_IK_ankle","parent":"Leg_L_foot","x":-11.11,"y":20.07,"color":"ff3f00ff"},{"name":"Leg_L_","parent":"Hips","length":102.95,"rotation":-114.07,"x":-15.98,"y":-16.38,"color":"ff0700ff"},{"name":"Leg_L_2","parent":"Leg_L_","length":85.63,"rotation":130.35,"x":102.95,"color":"ff0700ff"},{"name":"Leg_L_3","parent":"Leg_L_2","length":22.47,"rotation":-76.97,"x":85.63,"color":"ff0700ff"},{"name":"Leg_L_4","parent":"Leg_L_3","length":21.46,"rotation":-97.99,"x":22.47,"color":"ff0700ff"},{"name":"Leg_R_IK_foot","parent":"root","x":102.88,"y":15.64,"color":"ff3f00ff"},{"name":"Leg_R_IK_ankle","parent":"Leg_R_IK_foot","x":5.09,"y":16.62,"color":"ff3f00ff"},{"name":"Leg_R_","parent":"Hips","length":55.85,"rotation":-85.43,"x":-2.08,"y":-23.54,"color":"00179cff"},{"name":"Leg_R_2","parent":"Leg_R_","length":36.79,"rotation":81.22,"x":53.38,"y":0.44,"color":"00179cff"},{"name":"Leg_R_3","parent":"Leg_R_2","length":17.36,"rotation":-100.15,"x":36.17,"y":-0.65,"color":"00179cff"},{"name":"Light","parent":"Eye","x":0.43,"y":-0.58,"color":"fffb00ff"},{"name":"Shadow","parent":"root","x":32.32,"y":-3.85,"color":"000000ff"},{"name":"Shoulder_feathers","parent":"Spine_4","length":7.73,"rotation":63.76,"x":23.74,"y":32.83,"color":"ff00c0ff"},{"name":"Tail_","parent":"Hips","length":17.89,"rotation":-27.36,"x":33.15,"y":-12.26,"color":"ff00a7ff"},{"name":"Tail_2","parent":"Tail_","length":15.09,"rotation":-14.61,"x":17.89,"color":"ff00a7ff"},{"name":"Tail_3","parent":"Tail_2","length":18.25,"rotation":-18.55,"x":15.09,"color":"ff00a7ff"},{"name":"Tail_4","parent":"Tail_3","length":18.09,"rotation":0.29,"x":18.25,"color":"ff00a7ff"},{"name":"Tail_5","parent":"Tail_4","length":15.61,"rotation":4.51,"x":18.09,"color":"ff00a7ff"},{"name":"Tail_6","parent":"Tail_5","length":16.23,"rotation":0.89,"x":15.61,"color":"ff00a7ff"},{"name":"Tail_7","parent":"Tail_6","length":16.01,"rotation":7.47,"x":16.23,"color":"ff00a7ff"},{"name":"Tail_8","parent":"Tail_7","length":14.69,"rotation":4.94,"x":16.01,"color":"ff00a7ff"},{"name":"Tail_9","parent":"Tail_8","length":18.95,"rotation":11.55,"x":14.69,"color":"ff00a7ff"},{"name":"Tail_10","parent":"Tail_9","length":18.23,"rotation":15.4,"x":18.95,"color":"ff00a7ff"},{"name":"Tail_11","parent":"Tail_10","length":21.95,"rotation":6.64,"x":18.23,"color":"ff00a7ff"},{"name":"Tail_12","parent":"Tail_11","length":17.76,"rotation":8.82,"x":21.15,"y":0.25,"color":"ff00a7ff"},{"name":"beak","parent":"Head","length":34.5,"rotation":24.08,"x":81.5,"y":1.22,"color":"ff00f5ff"},{"name":"beak_lower","parent":"Head","length":14.19,"rotation":21.59,"x":83.01,"y":16.66,"color":"ff00f5ff"},{"name":"particles_mouth","parent":"Head","rotation":118.33,"x":93.32,"y":17.44,"color":"ff5400ff"}],"slots":[{"name":"shadow","bone":"Shadow","color":"ffffff80","attachment":"shadow"},{"name":"hand_b","bone":"Arm_R_","attachment":"hand_b"},{"name":"leg_b","bone":"Leg_R_","attachment":"leg_b"},{"name":"body","bone":"Hips","attachment":"body"},{"name":"dagger","bone":"Dagger","attachment":"dagger"},{"name":"ankle_f","bone":"Leg_L_2","attachment":"ankle_f"},{"name":"leg_f","bone":"Leg_L_","attachment":"leg_f"},{"name":"lowBeak","bone":"beak_lower","attachment":"lowBeak"},{"name":"beak","bone":"beak","attachment":"beak"},{"name":"head","bone":"Head","attachment":"head"},{"name":"eyelid","bone":"Eye","attachment":"eye1"},{"name":"light_1","bone":"Light","blend":"additive"},{"name":"hand_f","bone":"Arm_L_3","attachment":"hand_f"},{"name":"forearm_f","bone":"Arm_L_2","attachment":"forearm_f"},{"name":"arm_f","bone":"Arm_L_","attachment":"arm_f"},{"name":"feathers","bone":"Shoulder_feathers","attachment":"feathers"}],"ik":[{"name":"Arm_L_IK_ankle","bones":["Arm_L_","Arm_L_2"],"target":"Arm_L_IK_ankle","bendPositive":false},{"name":"Arm_L_IK_hand","bones":["Arm_L_3"],"target":"Arm_L_IK_hand"},{"name":"Arm_R_IK_ankle","bones":["Arm_R_","Arm_R_2"],"target":"Arm_R_IK_ankle","bendPositive":false},{"name":"Arm_R_IK_hand","bones":["Arm_R_3"],"target":"Arm_R_IK_hand"},{"name":"Leg_L_IK_ankle","bones":["Leg_L_","Leg_L_2"],"target":"Leg_L_IK_ankle"},{"name":"Leg_L_foot","bones":["Leg_L_3"],"target":"Leg_L_foot"},{"name":"Leg_R_IK_ankle","bones":["Leg_R_","Leg_R_2"],"target":"Leg_R_IK_ankle"},{"name":"Leg_R_IK_foot","bones":["Leg_R_3"],"target":"Leg_R_IK_foot"}],"skins":{"default":{"ankle_f":{"ankle_f":{"type":"mesh","uvs":[0.03689,0.41966,0,0.6483,0.03381,0.75684,0.17341,0.6483,0.26126,0.55006,0.34276,0.45892,0.39689,0.38769,0.45156,0.31574,0.50085,0.28477,0.5655,0.24415,0.6084,0.24228,0.64393,0.24074,0.66738,0.23972,0.69042,0.27886,0.7044,0.3026,0.72579,0.33894,0.74068,0.44974,0.66845,0.52887,0.60063,0.53947,0.54476,0.5482,0.50753,0.66674,0.46974,0.72472,0.48749,0.97597,0.52872,0.82908,0.55277,0.8162,0.55506,0.92829,0.61714,0.87582,0.69611,0.80882,0.73677,0.71347,0.77685,0.71347,0.82553,0.64003,0.86816,0.64676,0.92345,0.65549,0.98186,0.67739,0.98415,0.55628,0.93147,0.48799,0.87477,0.48155,0.82553,0.41713,0.8135,0.2754,0.76837,0.233,0.75657,0.1701,0.74661,0.11704,0.68534,0.07324,0.61134,0.05788,0.53015,0.04102,0.46725,0.1011,0.40875,0.15699,0.35895,0.19929,0.31133,0.23975,0.22942,0.29141,0.14583,0.34412,0.7802,0.43834,0.76755,0.3145,0.74054,0.2545,0.71319,0.17603,0.6602,0.15219,0.72572,0.21064,0.61085,0.14372,0.55034,0.14718,0.48412,0.18429,0.73621,0.52655,0.77875,0.52959,0.84019,0.49616,0.73081,0.59795,0.8672,0.57364,0.91919,0.57212,0.69435,0.64049,0.64573,0.59035,0.64573,0.70278,0.60589,0.63441,0.59374,0.78026,0.54918,0.69062],"triangles":[60,17,16,60,16,61,67,18,17,63,17,60,67,17,63,63,60,61,69,18,67,19,18,69,30,61,64,63,61,30,66,67,63,69,67,66,20,19,69,71,20,69,68,69,66,71,69,68,29,28,63,66,63,28,68,66,28,30,29,63,70,71,68,27,68,28,70,68,27,24,71,70,71,21,20,24,21,71,24,23,21,26,70,27,24,70,26,26,25,24,22,21,23,40,54,41,56,54,40,56,40,39,53,56,39,53,13,56,14,13,53,38,52,53,38,53,39,14,53,52,15,14,52,52,38,37,51,15,52,37,51,52,16,15,51,62,37,36,51,37,62,61,16,51,61,51,62,65,36,35,65,35,34,64,62,36,64,36,65,61,62,64,31,64,65,30,64,31,32,65,34,31,65,32,33,32,34,43,58,44,57,43,42,58,45,44,43,57,58,55,57,42,55,42,41,54,55,41,59,45,58,46,45,59,12,55,54,12,54,56,11,57,55,11,55,12,57,9,58,10,57,11,10,9,57,59,58,9,13,12,56,8,59,9,59,47,46,7,59,8,7,47,59,48,47,7,6,48,7,49,48,6,5,49,6,5,50,49,4,50,5,0,50,4,3,1,0,4,3,0,2,1,3],"vertices":[2,22,6.29,9.47999,1,23,-27.12,-75.16,0,2,22,-1.17999,-0.71,1,23,-18.87,-84.74,0,2,22,1.03,-7.24,1,23,-12.01,-84.05,0,2,22,18.29,-6.4,1,23,-8.93999,-67.05,0,2,22,29.58,-4.37,1,23,-8.35999,-55.58,0,2,22,40.07,-2.5,0.99999,23,-7.83,-44.95,0,1,22,47.18,-0.72,1,2,22,54.37,1.07,0.99968,23,-8.09,-30.2,3.1E-4,2,22,60.36,1,0.99913,23,-6.67,-24.39,8.6E-4,2,22,68.21,0.91,0.9987,23,-4.81,-16.76,0.00129,2,22,73.06,-0.39,0.99854,23,-2.44,-12.33,0.00145,1,22,77.07,-1.48,1,2,22,79.72,-2.2,0.91717,23,0.81,-6.25,0.08282,2,22,81.74,-4.91,0.41149,23,3.91,-4.89,0.5885,2,22,82.96,-6.55,0.164,23,5.78,-4.07,0.83599,3,22,84.83,-9.07,0.01919,23,8.66,-2.81,0.97983,24,4.71,-13.28,9.7E-4,2,23,14.53,-4.11,0.702,24,5.17999,-7.28,0.29799,2,23,13.99,-13.5,0.00987,24,14.55,-6.52,0.99012,1,24,22.14,-8.89,1,2,23,7.78,-26.61,0,24,28.4,-10.84,0.99999,2,23,11.02,-33.41999,0,24,34.68999,-6.68,0.99999,2,23,11.49,-38.75999,0,24,39.91,-5.48,0.99999,2,23,23.9,-43.34,0,24,42.72,7.44,0.99999,2,23,19.6,-35.39,0,24,35.45,2.08,0.99999,2,23,20.39,-32.61,0,24,32.59,2.47,0.99999,2,23,25.61,-35.23,0,24,34.45,8,0.99999,2,23,26.78,-27.56,0,24,26.7,8.1,0.99999,2,23,28.26,-17.79999,0,24,16.82,8.21,0.99999,1,24,10.59,5.32,1,2,23,28.56,-7.14,0.02264,24,6.22,7.02,0.97735,2,23,28.02,-0.3,0.35527,24,-0.46,5.53,0.64472,2,23,30.77,3.87,0.61536,24,-4.98,7.67,0.38463,2,23,34.33,9.29,0.72264,24,-10.85,10.45,0.27735,2,23,38.66999,14.69,0.7512,24,-16.79999,13.99,0.24879,2,23,33.31,18.01,0.75085,24,-19.34,8.22,0.24914,2,23,27.19,14.37,0.73546,24,-14.88,2.67,0.26453,2,23,23.65,8.75,0.72573,24,-8.83,-0.04,0.27426,2,23,17.91,5.36,0.95134,24,-4.67999,-5.26,0.04865,1,23,10.8,7.74,1,1,23,6.29,4.21999,1,2,22,90.75,-1.65,0.13773,23,2.76,4.61,0.86226,2,22,90.41,1.30999,0.29365,23,-0.2,4.94999,0.70634,2,22,84.16,5.51,0.86044,23,-5.7,-0.18,0.13955,1,22,76.07,8.7,1,2,22,67.19999,12.21,0.99941,23,-16.04999,-15.19,5.8E-4,2,22,59.26,11.27,0.99931,23,-16.92,-23.14,6.8E-4,2,22,51.88,10.39999,0.99974,23,-17.74,-30.53,2.5E-4,2,22,45.67,9.92,0.99996,23,-18.67,-36.68999,3.0E-5,1,22,39.73,9.46,1,2,22,29.78,9.57,1,23,-21.91,-52.25,0,2,22,19.62,9.68,1,23,-24.31,-62.12,0,1,23,16.28,0.2,1,1,23,9.93999,2.06,1,1,23,5.67,0.83,1,2,22,85.79,-0.52,0.5,23,0.55,0.04,0.5,1,22,80.19,2.39,1,2,22,86.7,-2.66,0.25951,23,2.83,0.43,0.74048,1,22,74.76999,4.42999,1,2,22,67.92,6.25,0.99951,23,-10.08,-15.83,4.8E-4,2,22,59.94,6.57,0.99923,23,-12.18,-23.54,7.6E-4,2,23,17.76,-6.53,0.24314,24,7.12,-3.75,0.75685,2,23,20.33,-2.26,0.41197,24,2.54,-1.8,0.58803,2,23,22.34,4.85,0.68954,24,-4.78,-0.8,0.31044,2,23,20.69,-8.89,0.02809,24,9.06,-0.52,0.9719,2,23,27.4,5.63,0.68077,24,-6.26,4.09,0.31922,2,23,30.3,10.97,0.72661,24,-11.96,6.23,0.27338,2,23,20.53,-13.7,0.00155,24,13.83,-0.01,0.99844,1,24,18.19,-4.51,1,2,23,20.57,-20.24,0,24,20.31,0.93,0.99999,1,24,23.36,-4.07,1,2,23,21.11,-27.52,0,24,27.44,2.47,0.99999,2,23,14.49,-29.78,0,24,30.6,-3.75,0.99999],"hull":51,"edges":[0,2,2,4,4,6,30,32,32,34,38,40,40,42,42,44,44,46,46,48,48,50,50,52,52,54,54,56,56,58,58,60,64,66,66,68,68,70,70,72,72,74,74,76,76,78,82,84,0,100,32,102,102,74,30,104,104,76,78,106,28,30,106,28,24,108,108,82,84,110,22,24,110,22,24,26,26,28,26,112,78,80,80,82,112,80,84,86,86,88,86,114,18,20,20,22,114,20,18,116,116,88,14,16,16,18,16,118,88,90,90,92,118,90,6,8,8,10,96,98,98,100,10,12,12,14,92,94,94,96,34,120,120,122,122,124,124,72,34,126,126,58,122,60,126,122,124,128,60,62,62,64,128,62,64,130,130,70,128,130,128,122,56,132,132,134,34,36,36,38,134,36,54,136,136,138,138,38,52,140,140,142,142,40],"width":117,"height":52}},"arm_f":{"arm_f":{"type":"mesh","uvs":[0.08559,0.08363,0.03123,0.13225,0.03609,0.22382,0.09843,0.27205,0.19656,0.34797,0.28715,0.38568,0.37665,0.46723,0.41115,0.53531,0.44089,0.59398,0.53529,0.69274,0.60025,0.7607,0.64665,0.83545,0.65892,0.90525,0.66627,0.94703,0.76254,0.96824,0.83941,0.98519,0.9429,0.95919,0.9661,0.84869,0.9394,0.80583,0.8858,0.71977,0.84504,0.6292,0.80194,0.53344,0.74911,0.4632,0.69845,0.39586,0.63984,0.31044,0.6332,0.22947,0.58255,0.1495,0.54399,0.08864,0.42183,0.04522,0.29685,0.03203,0.54938,0.58507,0.73056,0.54507,0.4684,0.45591,0.62899,0.41424,0.39291,0.36674,0.57546,0.32757,0.33664,0.30949,0.53703,0.25282,0.24193,0.23366,0.48762,0.17199,0.1637,0.17282,0.41762,0.10282,0.6737,0.74491,0.82742,0.71742,0.61742,0.66908,0.77526,0.63408,0.5035,0.51325,0.6737,0.47658,0.69703,0.82408,0.86311,0.80408,0.88781,0.86075,0.72173,0.88825],"triangles":[41,29,28,41,28,27,39,41,27,39,27,26,40,0,29,1,0,40,40,29,41,2,1,40,38,40,41,38,41,39,37,39,26,37,26,25,3,2,40,3,40,38,36,38,39,36,39,37,35,37,25,24,35,25,4,3,38,4,38,36,34,36,37,34,37,35,5,4,36,5,36,34,33,35,24,33,24,23,32,34,35,32,35,33,6,5,34,6,34,32,47,33,23,47,23,22,46,32,33,46,33,47,7,6,32,7,32,46,31,47,22,31,22,21,30,46,47,30,47,31,8,7,46,8,46,30,45,31,21,45,21,20,44,30,31,44,31,45,9,8,30,9,30,44,43,45,20,43,20,19,42,44,45,42,45,43,10,9,44,10,44,42,49,43,19,49,19,18,48,42,43,48,43,49,11,10,42,11,42,48,50,49,18,50,18,17,51,48,49,51,49,50,12,11,48,12,48,51,13,12,51,16,50,17,14,51,50,15,14,50,13,51,14,16,15,50],"vertices":[-12.82,-7.55,-10.24,-11.76,-3.13,-14.7,1.86,-13.48,9.74,-11.54,14.53,-8.64,22.65,-7.3,28.58,-8.05,33.7,-8.7,43.24,-7.73,49.81,-7.06,56.51,-7.5,62.11,-9.34,65.46,-10.43999,69.1,-6.71,72.01999,-3.72,72.19999,1.98,64.23,6.88,60.39,7.12,52.68,7.61,44.89,8.85,36.65,10.16,30.17,10.14,23.95,10.10999,16.18,10.35,9.84,12.84,2.66,13.25,-2.8,13.57,-8.68999,9.39,-12.33,4.04,35.3,-3.35,36.04,6.44,23.71,-2.65,23.89,6.25,15.3,-3.07,16.14,6.76,9.72999,-3.7,9.60999,7.56,1.94,-5.48,2.38,8.06,-4.35,-7.01,-4.37,7.2,50.14,-3.11,51.27,4.98,43.16,-3.1,43.79,5.44,28.84,-3,29.61,6.17,56.69,-4.76,58.65,3.64,63.51,2.83,62.12,-5.83],"hull":30,"edges":[2,4,8,10,10,12,20,22,30,32,32,34,46,48,48,50,54,56,16,60,60,62,62,42,12,64,64,66,66,46,10,68,68,70,70,48,8,72,72,74,74,50,4,6,6,8,6,76,76,78,50,52,52,54,78,52,4,80,80,82,82,54,2,0,80,0,56,58,82,58,58,0,20,84,84,86,86,38,16,18,18,20,18,88,88,90,38,40,40,42,90,40,12,14,14,16,14,92,92,94,42,44,44,46,94,44,22,96,96,98,34,36,36,38,98,36,34,100,100,102,22,24,24,26,102,24,26,28,28,30,102,28,100,32],"width":51,"height":84}},"beak":{"beak":{"x":20.36,"y":5.88,"rotation":94.24,"width":31,"height":52}},"body":{"body":{"type":"mesh","uvs":[0.38097,0.32826,0.39846,0.39993,0.42892,0.41048,0.44805,0.46617,0.46736,0.52241,0.5413,0.50919,0.55467,0.5068,0.57099,0.50389,0.58718,0.50128,0.61252,0.49719,0.62427,0.52628,0.63353,0.54922,0.64228,0.57089,0.65086,0.59212,0.66037,0.62867,0.66996,0.66552,0.681,0.70795,0.69045,0.74429,0.70495,0.78315,0.71956,0.82229,0.7346,0.86258,0.74666,0.89491,0.76497,0.93011,0.78325,0.96525,0.81033,0.98084,0.83352,0.99419,0.84455,0.96294,0.86103,0.96471,0.88014,0.96677,0.89766,0.96866,0.91365,0.97038,0.92979,0.96785,0.94617,0.96529,0.96182,0.96284,0.98261,0.95959,0.98813,0.93271,0.99804,0.88445,0.96827,0.90566,0.95586,0.90427,0.94571,0.90313,0.93286,0.90169,0.92178,0.90045,0.9037,0.88422,0.89153,0.8733,0.87551,0.85892,0.86192,0.84673,0.84435,0.82317,0.83252,0.8073,0.86156,0.79651,0.82381,0.76495,0.80663,0.75059,0.79271,0.73577,0.78068,0.72297,0.7649,0.70618,0.75316,0.69368,0.73614,0.65471,0.72266,0.62385,0.70734,0.58876,0.69731,0.56579,0.68763,0.53636,0.67857,0.50882,0.67077,0.48513,0.65721,0.44392,0.64429,0.41556,0.63208,0.38875,0.61617,0.35382,0.60355,0.32612,0.57034,0.2532,0.53747,0.18212,0.51503,0.13359,0.46817,0.09863,0.47111,0.04357,0.41692,0.04604,0.36018,0.04556,0.3274,0.04028,0.28501,0.01685,0.2256,0.03972,0.15391,0.05148,0.09201,0.07991,0.05124,0.17129,0.03923,0.15421,0.02106,0.19166,0.0058,0.27969,0.00288,0.37615,0.01262,0.47405,0.03729,0.55486,0.0811,0.61793,0.11389,0.58837,0.15413,0.58114,0.23036,0.53185,0.2448,0.48926,0.26986,0.48818,0.26825,0.43926,0.29528,0.37912,0.2951,0.34578,0.31909,0.30665,0.33363,0.30149,0.35345,0.32441,0.0906,0.56596,0.08466,0.44407,0.06564,0.29491,0.04068,0.25321,0.04132,0.41199,0.1437,0.41039,0.154,0.52827,0.12162,0.25665,0.08919,0.19026,0.22918,0.48339,0.21637,0.36991,0.18523,0.21651,0.13851,0.14506,0.26205,0.3503,0.23783,0.18849,0.18834,0.09603,0.29403,0.17387,0.24804,0.0638,0.35801,0.1669,0.34148,0.08552,0.39031,0.17477,0.3837,0.09463,0.41,0.37502,0.43012,0.18944,0.43007,0.09833,0.32509,0.16496,0.30301,0.0703,0.47,0.21215,0.54824,0.31557,0.51219,0.26144,0.35405,0.30396,0.3824,0.30473,0.41274,0.33014,0.43974,0.36297,0.47067,0.40323,0.50114,0.4436,0.60785,0.39084,0.76261,0.85921,0.79013,0.79152,0.70727,0.72982,0.66465,0.58426,0.6247,0.48422,0.73538,0.70526,0.68063,0.57108,0.64689,0.45906,0.80374,0.92421,0.82061,0.83735,0.85642,0.88766,0.91768,0.92301,0.97154,0.93319,0.64543,0.53614,0.66434,0.517,0.68387,0.64992,0.70523,0.63137,0.73571,0.79634,0.76209,0.74734,0.88711,0.90537,0.94448,0.92808,0.82402,0.94346,0.8378,0.8615,0.78205,0.88993,0.80783,0.81814,0.8179,0.78465,0.7217,0.76356,0.74895,0.72665,0.69544,0.68941,0.71879,0.66461,0.67458,0.61817,0.693,0.6014,0.65405,0.55771,0.67294,0.54554,0.63467,0.50919,0.6576,0.49459,0.75028,0.83039,0.77639,0.76987,0.87167,0.89647,0.90091,0.91333,0.93188,0.92569,0.9573,0.9305,0.61251,0.45726,0.60227,0.47511,0.63147,0.43211,0.61849,0.40944,0.60511,0.43909,0.59329,0.4614,0.59046,0.36888,0.55006,0.48583,0.59683,0.42003,0.5837,0.44496,0.55975,0.49419],"triangles":[43,173,44,154,173,43,42,154,43,174,154,42,41,174,42,146,174,41,154,27,173,28,27,154,174,28,154,29,28,174,146,29,174,146,30,29,40,146,41,175,40,39,175,146,40,155,175,39,155,39,38,176,38,37,155,38,176,35,37,36,147,176,37,35,147,37,34,147,35,33,176,147,33,147,34,32,155,176,32,176,33,31,146,175,31,175,155,31,155,32,31,30,146,157,46,45,45,44,145,45,145,157,173,145,44,156,143,157,145,156,157,145,173,26,145,26,156,27,26,173,24,156,26,25,24,26,160,50,49,160,49,48,47,160,48,159,136,160,159,160,47,144,159,47,144,47,46,158,135,159,157,144,46,144,158,159,143,158,144,157,143,144,22,21,158,22,158,143,23,22,143,23,143,156,24,23,156,172,51,50,136,172,50,160,136,50,136,171,172,135,171,136,159,135,136,20,171,135,21,20,135,21,135,158,162,53,52,153,162,52,153,52,51,161,162,153,172,153,51,152,161,153,152,153,172,171,152,172,18,161,152,19,18,152,19,152,171,20,19,171,164,55,54,140,164,54,53,162,140,53,140,54,137,163,140,137,140,162,17,16,137,161,137,162,17,137,161,18,17,161,151,166,56,55,164,151,55,151,56,150,151,164,163,150,164,15,150,163,163,164,140,16,15,163,16,163,137,168,59,58,141,168,58,167,168,141,138,167,141,12,167,138,13,12,138,57,166,141,57,141,58,138,141,166,165,138,166,13,138,165,166,57,56,14,13,165,165,166,151,150,165,151,14,165,150,15,14,150,180,64,63,179,180,63,181,180,179,179,63,62,177,181,179,142,179,62,177,179,142,139,177,142,178,177,139,9,178,139,9,139,169,142,62,61,170,139,142,61,170,142,170,61,60,169,139,170,149,170,60,169,170,149,10,9,169,148,169,149,10,169,148,149,60,59,168,149,59,148,149,168,11,10,148,167,148,168,11,148,167,12,11,167,126,67,66,183,126,66,183,66,65,134,183,65,64,134,65,180,134,64,185,183,134,185,134,180,183,133,126,181,185,180,183,184,133,184,183,186,186,185,181,182,186,181,182,181,177,178,182,177,185,186,183,187,184,186,182,187,186,182,7,187,178,8,182,8,178,9,8,7,182,6,184,187,6,187,7,5,184,6,106,79,110,81,80,79,106,101,81,106,81,79,105,106,109,101,106,105,82,81,101,100,101,105,82,102,83,82,101,102,100,105,103,101,100,102,100,99,102,103,99,100,84,83,102,85,84,102,104,103,107,99,103,104,104,107,89,85,102,86,99,98,102,104,98,99,88,104,89,87,98,104,88,87,104,98,86,102,86,98,87,115,76,75,113,77,76,113,76,115,110,78,77,110,77,113,110,79,78,112,113,115,114,112,115,110,113,112,109,110,112,106,110,109,112,111,109,112,95,111,94,111,95,108,105,109,111,108,109,111,94,93,103,105,108,111,92,108,93,92,111,107,108,92,103,108,107,90,107,92,91,90,92,89,107,90,124,75,74,115,75,124,117,74,73,124,74,117,117,73,119,123,124,117,116,123,117,119,116,117,114,115,124,114,124,123,96,123,116,128,96,116,114,123,96,95,114,96,112,114,95,97,96,128,119,73,72,122,72,71,119,72,122,70,122,71,118,119,122,116,119,118,121,122,70,125,121,70,69,125,70,118,122,121,68,125,69,127,125,68,118,128,116,129,128,118,121,129,118,130,129,121,125,130,121,129,97,128,0,97,129,125,131,130,127,131,125,0,129,130,127,68,67,126,127,67,127,132,131,120,0,130,120,130,131,1,0,120,126,132,127,133,132,126,2,120,131,2,131,132,1,120,2,3,2,132,3,132,133,5,133,184,4,3,133,4,133,5],"vertices":[5,1,-51.29,0.35,0.32461,2,17.26,38.66,0.48015,3,-3.62,45.72,0.17767,4,-35.86,56.86,0.0163,5,-61.7,104.31,0.00124,4,1,-43.96,-14.47,0.5941,2,3.26,47.48,0.35233,3,-11.83,60.08,0.05281,4,-40.09999,72.85,7.4E-4,4,1,-31.2,-16.66,0.76328,2,-8.76,42.67,0.21247,3,-24.7,61.49,0.01888,33,-55.13,-33.49,0.00535,4,1,-23.19,-28.18,0.89646,2,-21.61,48.32,0.04454,3,-33.4,72.51,0.0017,33,-42.71,-40.04,0.05728,3,1,-15.09,-39.82,0.86925,2,-34.59999,54.01,0.00198,33,-30.17,-46.66,0.12875,3,1,15.87,-37.09,0.46524,33,-3.92,-29.99,0.52527,34,-13.54,-34.52,0.00947,3,1,21.48,-36.59,0.34706,33,0.82,-26.97,0.62559,34,-9.7,-30.41,0.02733,3,1,28.32,-35.99,0.21387,33,6.62,-23.29,0.69626,34,-5.03,-25.39,0.08985,4,1,35.09999,-35.45,0.10455,33,12.39,-19.69,0.69019,35,-8.13,-24.3,0.00266,34,-0.35,-20.44,0.20257,4,1,45.72,-34.59999,0.0103,33,21.43,-14.06,0.3073,35,-3.64,-14.64,0.15058,34,6.97,-12.71,0.53178,5,1,50.64,-40.62,2.9E-4,33,28.57,-17.15,0.04577,35,4.01,-13.31,0.55008,34,14.66,-13.9,0.38566,36,-14.3,-13.24,0.01818,4,33,34.2,-19.58,0.00611,35,10.05,-12.27,0.71595,34,20.71999,-14.83,0.15321,36,-8.26,-12.22,0.1247,3,35,15.76,-11.28,0.6111,34,26.45,-15.71,0.03393,36,-2.54,-11.27,0.35493,3,35,21.35,-10.31,0.33525,34,32.05,-16.57,0.00161,36,3.05,-10.33,0.66313,3,35,29.9,-10.56,0.04019,36,11.59,-10.62,0.7918,37,-7.31,-10.08,0.16798,3,36,20.20999,-10.92,0.39638,37,1.25,-11.05,0.564,38,-14.52,-10.83,0.0396,3,36,30.13,-11.26,0.03351,37,11.11,-12.17,0.62382,38,-4.67999,-12.1,0.34265,3,37,19.56,-13.13,0.24202,38,3.75,-13.19,0.74235,39,-14.09,-11.45,0.01562,3,37,29.63,-12.64,0.03878,38,13.82,-12.86,0.5816,39,-4.06,-12.43,0.3796,3,38,23.97,-12.52,0.13195,39,6.03,-13.42,0.78691,40,-11.09,-12.51,0.08113,4,38,34.41999,-12.17,0.01051,39,16.44,-14.43,0.42872,40,-0.81,-14.42,0.53014,41,-18.08,-11.02,0.03061,3,39,24.78,-15.25,0.09578,40,7.42,-15.95,0.74123,41,-10.31,-14.17,0.16298,3,40,18,-16.15,0.41844,41,0.01,-16.49,0.57279,42,-22.64,-10.86,0.00875,4,38,63.53,-7.74,0,40,28.56,-16.35,0.12514,41,10.31,-18.79999,0.71106,42,-13.32,-15.83,0.16377,3,38,72.69999,-0.32,0,41,21.71,-15.75,0.50239,42,-1.52,-15.92,0.4976,3,38,80.55,6.03,0,41,31.47,-13.13,0.2457,42,8.57,-15.99,0.75429,3,41,32.11,-5.21,0.09089,42,11.3,-8.52,0.84357,43,-7.87,-7.66,0.06552,4,40,52.54,5.7,0,41,38.23,-1.99,0.01375,42,18.04999,-7.04,0.5657,43,-0.99,-6.97,0.42054,3,40,58.74,10.79,0,42,25.89,-5.31,0.14128,43,6.98,-6.16,0.85869,3,40,64.43,15.45,0,44,-7.64,-4.56,0.1102,43,14.3,-5.42,0.88979,3,40,69.61,19.70999,0,44,-0.94,-4.91,0.45082,43,20.96999,-4.75,0.54917,2,44,5.81,-4.39,0.87253,43,27.57,-3.19,0.12746,2,40,78.96,29.68,0,44,12.68,-3.86,1,2,40,83.46,34.48,0,44,19.23,-3.35,1,1,44,27.94,-2.68,1,1,44,30.26,2.87,1,1,44,34.41,12.86,1,1,44,21.94,8.47,1,2,38,94.85,58.65,0,44,16.74,8.76,1,4,38,92.21,55.31,0,40,70.14,39.05,0,44,12.48,9,0.97809,43,32.11,11.06,0.0219,5,38,88.86,51.08,0,40,65.96,35.64,0,42,43.58,13.55,6.0E-5,44,7.1,9.29,0.82243,43,26.74,10.53,0.1775,4,38,85.98,47.43,0,42,39.04,12.56,0.00652,44,2.46,9.55,0.57263,43,22.12,10.07,0.42084,4,38,78.87,43.17,0,42,30.85,13.78,0.08683,44,-5.11,12.91,0.1942,43,14.12,12.23,0.71895,5,38,74.08999,40.3,0,41,39.49,20.79999,0.0037,42,25.33,14.6,0.20443,44,-10.21,15.17,0.06315,43,8.72999,13.68,0.7287,6,38,67.79,36.53,0,40,42.25,25.96,0.00116,41,32.2,19.92,0.04268,42,18.06,15.68,0.44527,44,-16.92,18.15,0.00818,43,1.64,15.59,0.50269,5,38,62.45,33.33,0,40,36.34999,23.99,0.01636,41,26.02,19.16,0.16213,42,11.91,16.59,0.55384,43,-4.36,17.20999,0.26764,5,39,41.58,24.92,0.00361,40,27.62,22.62,0.10656,41,17.2,19.57,0.43919,42,3.51,19.33,0.38267,43,-12.38,20.9,0.06793,5,39,35.81,23.5,0.02223,40,21.75,21.7,0.25376,41,11.26,19.85,0.54105,42,-2.13,21.18,0.17365,43,-17.79,23.39,0.00928,3,40,29.22,31.56,0.20834,41,20.56,28.01,0.60464,42,8.99,26.57,0.18701,6,38,39.41999,30.02,0.004,39,26.89,26.75,0.06304,40,13.14,25.71,0.36722,41,3.63,25.5,0.48266,42,-7.99,28.65,0.08231,43,-22.74,31.49,7.4E-4,5,38,32.84,25.85,0.03334,39,19.83,23.47,0.20296,40,5.82,23.05,0.44017,41,-4.06,24.36,0.30563,42,-15.72,29.6,0.01789,5,38,26.97,22.84,0.08423,39,13.62,21.25,0.37601,40,-0.55,21.38,0.38031,41,-10.65,24,0.15576,42,-22.16,31,0.00367,5,37,37.2,20.59,0.00194,38,21.9,20.25,0.17631,39,8.25,19.34,0.48208,40,-6.05,19.93,0.26945,41,-16.33,23.69,0.0702,5,37,30.6,17.08,0.0233,38,15.26,16.84,0.39497,39,1.22,16.83,0.45614,40,-13.28,18.04,0.10683,41,-23.79,23.28,0.01874,5,37,25.69,14.47,0.0914,38,10.31,14.31,0.58385,39,-4.01,14.96,0.28735,40,-18.66,16.62999,0.03398,41,-29.34,22.97,0.00339,4,36,32.03,14.26,0.00747,37,15.01,13.12,0.49269,38,-0.38,13.13,0.48701,39,-14.77,15.18,0.01281,3,36,23.68,12.53,0.17541,37,6.55,12.05,0.69349,38,-8.85999,12.19,0.13109,3,35,32.39,10.63,0.01043,36,14.19,10.56,0.64522,37,-3.05,10.83,0.34434,3,35,26.18,9.31,0.11427,36,7.97,9.27,0.80991,37,-9.35,10.03,0.07581,3,35,18.87999,8.77,0.46996,36,0.67,8.77,0.52565,37,-16.67,10.10999,0.00437,2,35,12.05,8.27,0.82218,36,-6.15,8.3,0.17781,3,35,6.17,7.83,0.84966,34,23.44,5.46,0.12838,36,-12.03,7.89,0.02194,2,35,-4.04,7.08,0.32179,34,13.51,8,0.6782,3,33,25.49,7.05,0.16474,35,-11.81,5.26,0.03633,34,5.56,8.74,0.7989,2,33,18.39,9.63,0.57557,34,-1.94,9.43999,0.42442,3,2,-69.53,-8.31,0.00152,33,9.14999,12.99,0.95804,34,-11.74,10.35999,0.04042,3,1,41.96,0.8,0.03494,2,-62.03,-10.43,0.01116,33,1.82,15.65,0.95388,3,1,28.04,15.89,0.357,2,-42.27,-16.03,0.13851,33,-17.46999,22.66,0.50448,3,1,14.27,30.61,0.35368,2,-22.84,-21.38,0.52726,33,-36.47,29.39,0.11905,3,1,4.87,40.65,0.16772,2,-9.58,-25.04,0.80694,33,-49.43,33.99,0.02533,1,2,10.94,-20.95,1,2,2,15.84,-31.31,0.99547,3,-37.74,-15.39,0.00452,2,2,34.93,-19.02,0.87056,3,-15.11,-13.5,0.12943,2,2,55.26,-6.68,0.18479,3,8.62,-12.16,0.8152,1,3,22.39,-12.41,1,3,2,85.22,4.69999,0.00183,3,40.41999,-16.18,0.75612,4,-9.22,-14.28,0.24204,2,2,103.97,21.74,1.8E-4,4,16.1,-14.58,0.99981,3,2,128.31,39.50999,0,4,46.03,-18.14,0.99815,5,-30.9,-2.38,0.00183,2,4,72.61,-17.51,0.64391,5,-7.89,-15.7,0.35608,2,4,93.11,-2.35999,0.00524,5,17.49,-13.45,0.99475,1,5,18.78,-19.45999,1,1,5,29.63,-18.95999,1,1,5,46.71,-9.93999,1,2,4,121.37,35.18,0.00218,5,61.18,3.86,0.99781,2,4,121.39,55.85,0.01746,5,71.97,21.49,0.98253,3,3,137.27,101.27,6.0E-5,4,114.57,74.3,0.05247,5,75.76999,40.78,0.94746,3,3,118.15,113.19,0.00233,4,99.16,90.73,0.10525,5,71.19,62.84,0.89241,3,3,104.81,106.25,0.00832,4,84.49,87.46,0.16721,5,56.95,67.69,0.82444,3,3,88.07,103.73,0.026,4,67.66,89.33,0.28395,5,43.57,78.06,0.69004,3,3,56.81,91.61,0.09767,4,34.33,85.66,0.48596,5,13.22,92.3,0.41636,3,3,51.3,82.44,0.13299,4,26.65,78.22,0.52789,5,2.78,89.95,0.3391,5,1,-97.85,-32.74,1.2E-4,2,39.66,91.2,7.0E-4,3,40.83,81.58,0.16342,4,16.32,80.08,0.5434,5,-5.06,96.93,0.29233,5,1,-98.52,-22.61,6.9E-4,2,45.52,82.92,0.00294,3,42.12,71.51999,0.19146,4,14.97,70.01999,0.55238,5,-11.45,89.04,0.2525,5,1,-87.2,-10.16,0.00695,2,42.37,66.39,0.02536,3,31.57,58.4,0.3194,4,1.41,60.06,0.50707,5,-28.22,87.62,0.1412,5,1,-87.27,-3.26,0.01227,2,46.04,60.55,0.04335,3,32.06,51.52,0.37362,4,0.11,53.28,0.46484,5,-32.86,82.51,0.1059,5,1,-77.22,4.83,0.04611,2,41.7,48.39,0.15486,3,22.52,42.83,0.49953,4,-11.33,47.34,0.26061,5,-45.73,83.4,0.03886,5,1,-71.12999,5.9,0.08646,2,37.06,44.29,0.26211,3,16.51,41.39,0.4819,4,-17.52,47.5,0.15072,5,-50.93,86.76,0.01878,5,1,-62.82,1.15,0.17292,2,27.5,44,0.39337,3,7.93,45.62,0.36322,4,-24.72,53.79,0.06387,5,-53.79,95.89,0.00658,3,3,114.83,102.21,0.00208,4,93.13,80.98,0.10036,5,60.95,57.66,0.89754,3,3,118.84,77.18,7.7E-4,4,90.57,55.75,0.0899,5,45.62,37.46,0.90931,2,4,92.26,23.91,0.05143,5,30.47,9.41,0.94856,1,5,32.27,-4.02,1,2,4,107.06,45.65,0.01128,5,54.42,20.25,0.98871,3,3,94.57,68.72,0.01808,4,64.94,53.82,0.38425,5,22.74,49.17,0.59766,3,3,88.79,92.81,0.03413,4,65.55,78.58999,0.34313,5,36.16999,70,0.62272,3,3,105.74,37.50999,0.0048,4,67.69999,20.79999,0.52148,5,7.88,19.54999,0.4737,1,5,8.5,0.23,1,3,3,57.91,81.62999,0.13299,4,32.83,75.73,0.52789,5,6.76,84.61,0.3391,3,3,64.69,58.51,0.09719,4,33.43999,51.64,0.61024,5,-5.27,63.74,0.29255,3,3,79.64,27.6,0.01323,4,39.93,17.93,0.79165,5,-17.29999,31.58,0.19511,1,4,56.19,-0.43,1,5,1,-101.12,-4.19999,0.00258,2,57.36,68.58,0.0097,3,45.83,53.29,0.25198,4,13.87,51.46,0.56809,5,-22.07,73.78,0.16762,4,1,-111.27,29.29,8.5E-4,3,57.99,20.48,0.27754,4,17.18,16.61,0.70724,5,-37.4,42.31,0.01435,1,4,33.71,-6.24,1,5,1,-87.72,32.31,0.00863,2,65.01,30.44,0.02883,3,34.66999,16.03,0.64449,4,-6.49,18.31,0.30371,5,-56.72,56.11,0.01431,2,3,55.29,-5.54,0.08743,4,7.87,-7.83,0.91256,5,1,-60.91,33.75999,0.03654,2,42.91,15.2,0.37537,3,8,12.96,0.56892,4,-33.05,22.21,0.01774,5,-77.36,73.28,0.00139,1,3,15.94,-3.42,1,5,1,-47.38,32.13,0.03833,2,30.52,9.52,0.78147,3,-5.6,13.77,0.17932,4,-45.99,26.49,8.4E-4,5,-86.18,83.68,0,2,2,41.55,-3.17,0.5,3,-1.82,-2.61999,0.5,4,1,-39.13,-9.31,0.54746,2,1.83,40.56,0.399,3,-16.35,54.64,0.05277,4,-45.87,68.76,7.5E-4,1,2,14.71,3.4,1,1,2,24.58,-12.67,1,5,1,-74.71,34.16,0.00877,2,54.88,22.07,0.04444,3,21.79,13.4,0.87794,4,-19.61,19.09,0.06569,5,-67.51999,63.6,0.00313,2,3,32.22,-5.59,0.90319,4,-14.42,-1.94,0.0968,1,2,-1.98,-1.30999,1,3,1,18.79,2.98,0.3313,2,-41.12,-0.19,0.01258,33,-19.76,6.93,0.6561,3,1,3.68,14.19,0.48583,2,-22.39,-1.85,0.50537,33,-38.32,9.93999,0.00878,5,1,-62.57,5.38,0.17292,2,29.5,40.25999,0.39337,3,7.94,41.38,0.36322,4,-25.8,49.69,0.06387,5,-56.85,92.95,0.00658,5,1,-50.69,5.23,0.32461,2,19.29,34.18999,0.48015,3,-3.92,40.82,0.17767,4,-37.41,52.2,0.0163,5,-65.44999,101.15,0.00124,4,1,-37.98,-0.02,0.54746,2,5.7,32.04,0.399,3,-16.93,45.3,0.05277,4,-48.83,59.88,7.5E-4,3,1,-26.67,-6.82,0.74857,2,-7.48,31.92,0.24077,3,-28.63,51.4,0.01065,4,1,-13.71,-15.15,0.89069,2,-22.89,32.25,0.07683,3,-42.08,58.93,0.00317,33,-40.28,-24.11,0.02929,3,1,-0.94,-23.51,0.84621,2,-38.14,32.71,0.00122,33,-25.1,-25.66,0.15256,3,2,-70.56,0.04,1.1E-4,33,9.58,4.58,0.89919,34,-9.2,2.33,0.10068,3,39,23.87,-5.33,0.00184,40,7.37,-5.98,0.82839,41,-8.35999,-4.4,0.16976,4,38,35.79,15.31,0.01868,39,21.38,12.64,0.14021,40,6.43,12.13,0.64503,41,-5.65,13.54,0.19606,2,37,21.05,-5.62,0.21691,38,5.35,-5.71,0.78308,3,35,22.78,-4.48,0.18309,36,4.5,-4.5,0.81632,37,-13.89,-3.42,5.6E-4,4,1,50.82,-31.92,3.6E-4,33,24.73,-9.33,0.06167,35,-3.47,-8.87,0.29863,34,8.97,-7.3,0.63932,4,37,23.48,6.96,0.24935,38,7.98,6.84,0.70581,39,-7.29,7.86,0.0421,40,-22.54,9.84,0.00272,1,36,5.46,2.65,1,2,35,-3.44,1.78,0.5,34,12.39,2.78,0.5,3,40,29.17,-4.29,0.00844,41,13.32,-7.1,0.70585,42,-7.31,-5.35,0.28569,4,40,22.26,13.74,0.06464,41,10.17,11.95,0.63414,42,-5.29,13.85,0.28502,43,-21.76,16.48,0.01617,4,38,68.05,26.56,0,41,28.39,10.7,0.04235,42,11.94,7.81,0.59464,43,-5.34,8.49,0.36299,3,38,88.81,43.34,0,44,0.74,4.88,0.33225,43,21.13,5.19,0.66774,1,44,23.31,2.77,1,3,35,10.14999,-6.59,0.76168,34,22.61,-9.47999,0.07351,36,-8.13,-6.55,0.16479,1,35,10.59,2.24,1,2,36,20.29999,-4.25,0.5,37,1.87,-4.41,0.5,3,36,21.41,5.41,0.32597,37,3.73,5.13,0.65626,38,-11.79,5.32,0.01775,1,39,6.67,-4.8,1,4,38,21.54,10.97,0.17406,39,6.69,10.18999,0.64894,40,-8.39999,10.95,0.15238,41,-20.43,15.36,0.02461,3,38,78.44999,34.97,0,42,25.31,7.71,0.22273,43,7.92,6.84,0.77726,3,38,96.13,51.92,0,40,73.24,34.89,0,44,11.97,3.83,1,3,38,69.68,8.82,0,41,22.66,-6.16,0.31272,42,1.94,-6.93,0.68727,4,40,30.95,14.91,0.01337,41,18.91,11.35,0.2672,42,2.98,10.95,0.62657,43,-13.88,12.64,0.09284,2,40,17.67,-5.17999,0.22322,41,1.88,-5.68,0.77677,5,38,44.56,18.20999,5.8E-4,39,30.45,14.36,0.01408,40,15.62,13.07,0.24328,41,3.53,12.61,0.73074,42,-11.51,16.26,0.01129,5,38,41.32,25.65,0.00548,39,28.21,22.16,0.06928,40,14.06,21.03,0.42285,41,3.59,20.73,0.46334,42,-9.29,24.06,0.03901,2,38,14.54,-4.79,0.5,39,-2.29,-4.53,0.5,5,37,30.34,9.17,0.01491,38,14.87,8.93999,0.55712,39,-0.18,9.04,0.39584,40,-15.35,10.39999,0.02911,41,-27.35,16.20999,0.00298,1,37,11.35,-5.01,1,3,36,30.2,6.93,0.02836,37,12.61,5.96,0.7055,38,-2.89,6,0.26611,2,36,12.66,-4.37,0.79749,37,-5.75,-3.93,0.2025,2,36,13.48,4.04,0.74504,37,-4.27,4.39,0.25494,3,35,15.81,-5.65,0.56857,34,28.28,-10.39,0.01149,36,-2.46,-5.63,0.41993,2,35,17.51,2.48,0.5,36,-0.72,2.48,0.5,4,33,30.82,-12,0.00359,35,3.07,-7.78,0.71542,34,15.53,-8.35,0.27138,36,-15.21,-7.7,0.0096,2,35,5.16,2.06,0.71736,34,20.65,0.31,0.28263,2,39,15.99,-5.08,0.5,40,-0.46,-5.06,0.5,4,38,28.81,13.19,0.0855,39,14.18,11.44,0.45553,40,-0.83,11.55,0.38112,41,-12.89,14.43,0.07783,4,38,73.22,30.74,0,41,34.81,12.42,0.04235,42,18.59,7.76,0.59464,43,1.25,7.67,0.36299,3,38,83.12999,38.75,0,44,-6.28,6.88,0.33225,43,13.89,6.09,0.66774,3,38,92.69,47.88,0,44,6.69,4.33,0.77521,43,27.1,5.56,0.22478,1,44,17.34,3.33,1,4,1,45.71,-26.34,0.00299,33,17.62999,-6.72,0.31031,35,-10.84,-10.58,0.0174,34,1.44,-6.57,0.66928,4,1,41.41999,-30.03,0.02805,33,15.52,-11.98,0.59651,35,-9.74,-16.12999,0.02076,34,0.72,-12.19,0.35466,2,33,22.29,1.54,0.27262,34,3.86,2.59999,0.72737,2,33,15.3,3.21,0.5,34,-3.31,2.45,0.5,3,1,42.61,-22.58,0.01047,33,13.14,-4.81,0.70108,34,-3.38,-5.85,0.28843,4,1,37.66,-27.2,0.02805,33,10.87,-11.19,0.59651,35,-14.06,-18.01,0.02076,34,-3.96,-12.6,0.35466,3,1,36.48,-8.04,0.00586,2,-61.97,-0.02,0.00354,33,1.01,5.27,0.99058,3,1,19.54999,-32.25,0.34706,33,-2.88,-24,0.62559,34,-14.05,-28.47,0.02733,1,33,8.25,-2.9,1,3,1,33.64,-23.79,0.06406,33,5.74,-10.01,0.84755,34,-9.22999,-12.76,0.08837,3,1,23.61,-33.98,0.34706,33,1.51,-23.67,0.62559,34,-9.87,-27.04,0.02733],"hull":98,"edges":[0,2,2,4,50,52,72,74,94,96,138,140,140,142,156,158,158,160,160,162,162,164,164,166,166,168,168,170,170,172,172,174,174,176,176,178,178,180,180,182,182,184,184,186,186,188,188,190,0,194,172,196,196,198,198,200,200,202,202,164,204,172,196,204,204,198,204,200,202,204,204,164,166,204,204,168,204,170,198,206,196,208,200,210,202,212,212,158,212,210,210,206,206,208,208,176,208,214,214,216,216,218,218,220,220,156,206,216,210,218,212,220,184,214,184,222,222,224,224,226,154,156,226,154,222,188,190,228,228,230,152,154,230,152,232,234,146,148,234,148,236,238,238,146,2,240,242,244,144,146,244,144,142,144,190,192,192,194,192,246,246,248,148,150,150,152,248,150,250,140,252,134,4,6,6,8,134,136,136,138,254,136,194,256,256,232,192,256,0,258,258,236,256,258,240,260,260,242,258,260,4,262,262,250,260,262,6,264,264,254,262,264,8,266,266,252,264,266,268,130,42,270,270,272,272,100,68,70,70,72,294,70,18,278,278,284,284,124,46,286,286,288,288,94,52,290,290,90,60,292,292,82,68,294,294,74,26,276,276,282,282,116,216,222,218,224,224,228,220,226,226,230,230,248,248,234,234,238,238,244,244,140,228,246,246,232,232,236,236,242,242,250,250,254,254,252,22,296,296,298,298,120,30,300,300,302,302,112,38,304,304,306,306,104,56,308,308,86,64,310,310,78,46,48,48,50,52,312,312,286,48,312,288,314,314,290,312,314,90,92,92,94,314,92,42,44,44,46,270,316,316,286,44,316,272,318,318,288,316,318,96,98,98,100,98,320,320,318,94,320,320,100,34,36,36,38,274,322,322,304,36,322,280,324,324,306,322,324,104,106,106,108,324,106,30,32,32,34,274,326,326,300,32,326,280,328,328,302,326,328,108,110,110,112,328,110,26,28,28,30,276,330,330,300,28,330,282,332,332,302,330,332,112,114,114,116,332,114,22,24,24,26,276,334,334,296,24,334,282,336,336,298,334,336,116,118,118,120,336,118,18,20,20,22,278,338,338,296,20,338,284,340,340,298,338,340,120,122,122,124,340,122,38,40,40,42,270,342,342,304,40,342,272,344,344,306,342,344,100,102,102,104,344,102,52,54,54,56,290,346,346,308,54,346,86,88,88,90,346,88,56,58,58,60,292,348,348,308,58,348,82,84,84,86,348,84,60,62,62,64,292,350,350,310,62,350,78,80,80,82,350,80,64,66,66,68,294,352,352,310,66,352,74,76,76,78,352,76,278,354,18,356,356,354,358,284,354,358,124,126,358,126,14,16,16,18,356,16,126,128,128,130,268,360,360,358,128,360,360,362,362,364,364,14,130,132,132,134,252,366,366,268,132,366,368,266,366,368,8,10,368,10,268,370,370,372,14,374,374,368,372,374,10,12,12,14,374,12,222,190],"width":419,"height":207}},"dagger":{"dagger":{"type":"mesh","uvs":[0.00796,0.20321,0.20977,0.46505,0.14745,0.52639,0.20436,0.64121,0.35029,0.60654,0.44277,0.66049,0.51657,0.64049,0.70948,0.84449,0.68264,0.91915,0.75477,0.96715,0.95391,0.95909,1,0.83508,0.92796,0.75908,0.85751,0.77375,0.68976,0.55375,0.70989,0.49508,0.6797,0.40442,0.72667,0.32042,0.68138,0.25108,0.57906,0.28708,0.34422,0.00708,0.21841,0.03508,0.16035,0.06169,0.07583,0.10042,0.80388,0.81776,0.59085,0.60043,0.5001,0.51462,0.39706,0.37479],"triangles":[27,20,19,21,20,27,22,21,27,17,16,19,17,19,18,1,22,27,0,23,22,1,0,22,26,27,19,26,19,16,26,16,15,14,26,15,25,26,14,4,1,27,4,27,26,6,26,25,5,4,26,3,2,1,3,1,4,6,5,26,24,14,13,25,14,24,7,25,24,6,25,7,11,13,12,10,13,11,24,13,10,9,7,24,9,24,10,8,7,9],"vertices":[0.69,-7.03,12.66,-7.03,13.69,-9.93,18.43,-10.77,19.64,-6.2,22.94,-4.86,23.47,-2.5,33.37,-1.56,35.41999,-3.79,38.18999,-2.86,41.14,2.55,37.77,6.3,34.07,5.95,33.41999,3.78,23.39,3.83,21.76,5.56,18.26,6.61,16.23,9.56,13.19,9.78,12.73,6.34,-0.38,5.84,-1.48,1.95,-1.54,-0.12,-1.62,-3.14,34.00999,1.47,23.34,0.27,19.01,-0.37,12.7,-0.25],"hull":24,"edges":[0,2,2,4,4,6,6,8,8,10,10,12,12,14,14,16,16,18,18,20,20,22,22,24,24,26,26,28,28,30,30,32,32,34,34,36,36,38,38,40,40,42,0,46,20,48,48,50,8,52,52,32,50,52,2,54,54,38,52,54,42,44,44,46,54,44],"width":31,"height":39}},"eyelid":{"eye1":{"x":0.04,"y":-1.52,"width":11,"height":18},"eyelid":{"x":0.04,"y":-0.52,"width":15,"height":24}},"feathers":{"feathers":{"x":10.24,"y":3.34,"rotation":73.39,"width":41,"height":33}},"forearm_f":{"forearm_f":{"x":23.21,"y":0.64,"rotation":111.81,"width":34,"height":58}},"hand_b":{"hand_b":{"type":"mesh","uvs":[0.50085,0.00407,0.55618,0.28525,0.58245,0.41879,0.5864,0.48128,0.59062,0.54818,0.59445,0.60887,0.54158,0.66709,0.49406,0.71942,0.42408,0.79648,0.39045,0.83351,0.31499,0.85272,0.23205,0.87383,0.04245,0.91127,0.05445,0.99767,0.24165,0.97463,0.46005,0.98183,0.59685,0.99479,0.62085,0.94871,0.51045,0.88967,0.60121,0.84724,0.71736,0.79295,0.78719,0.72842,0.86847,0.65332,0.87342,0.60425,0.87761,0.56281,0.88551,0.48457,0.89264,0.41396,0.93131,0.27745,0.98571,0.08544],"triangles":[14,11,10,12,11,14,15,10,18,14,10,15,16,18,17,15,18,16,13,12,14,21,5,22,6,5,21,20,6,21,7,6,20,19,7,20,8,7,19,18,8,19,9,8,18,10,9,18,28,1,0,27,1,28,26,1,27,2,1,26,25,3,2,26,25,2,4,3,25,24,4,25,23,4,24,5,4,23,22,5,23],"vertices":[1,13,-7.96,-10.22,1,1,13,13.13,-7.86,1,1,13,23.15,-6.74,1,1,13,27.84,-6.6,1,2,13,32.86,-6.44,0.9329,14,-0.8,-8.88,0.06708,2,13,37.41,-6.29,0.4884,14,2.66,-5.93,0.51159,2,13,41.75999,-8.7,0.04926,14,7.56,-5.09,0.95073,1,14,11.97,-4.34,1,2,14,18.45,-3.23,0.99557,15,-4.46999,-4.13,0.00442,2,14,21.57,-2.69,0.76667,15,-1.51,-3.03,0.23332,2,14,24.81,-4.46999,0.11836,15,1.99,-4.17,0.88163,1,15,5.84,-5.42,1,1,15,14.13,-8.89999,1,1,15,17.96999,-3.66,1,1,15,10.47999,0.55,1,2,14,28.36,6.65,0.18116,15,3.42,7.41,0.81883,2,14,25.31,12.08,0.31022,15,-0.58,12.18,0.68976,2,14,21.93,10.79,0.34444,15,-3.66,10.28,0.65555,2,14,21.53,4.14,0.71261,15,-2.82,3.68,0.28738,1,14,16.5,5.38,1,1,14,10.07,6.96,1,2,13,46.43,2.31,0.0228,14,4.32,6.42,0.97719,2,13,40.82,6.01,0.50499,14,-2.34999,5.8,0.495,2,13,37.14,6.25,0.82322,14,-5.38,3.7,0.17677,2,13,34.04,6.46,0.96681,14,-7.94,1.92,0.03317,1,13,28.17,6.85,1,1,13,22.88,7.21,1,1,13,12.65,9.01,1,1,13,-1.73,11.55,1],"hull":29,"edges":[22,24,24,26,26,28,28,30,30,32,32,34,34,36,0,56,10,12,12,14,40,42,42,44,8,10,4,6,6,8,48,50,50,52,10,44,12,42,8,48,44,46,46,48,10,46,14,40,18,36,14,16,16,18,36,38,38,40,16,38,6,50,4,52,0,2,2,4,52,54,54,56,2,54,18,20,20,22,36,20],"width":45,"height":75}},"hand_f":{"hand_f":{"x":8.96,"y":1.37,"rotation":133.52,"width":37,"height":22}},"head":{"head":{"type":"mesh","uvs":[0.7967,0.04767,0.86982,0.16222,0.90853,0.37575,0.96158,0.53701,0.98275,0.71774,0.9555,0.80025,0.86456,0.79691,0.73398,0.79212,0.58482,0.8783,0.38566,0.97587,0.27033,0.94974,0.18651,0.98021,0.08219,0.82882,0.04655,0.63097,0.05634,0.51391,0.0214,0.43586,0.08219,0.40984,0.16488,0.27787,0.1572,0.22529,0.20262,0.22204,0.4402,0.11735,0.63934,0.02961,0.25419,0.83814,0.23453,0.64367,0.23207,0.52261,0.24559,0.41775,0.29843,0.29954,0.35496,0.21184,0.382,0.83814,0.36602,0.65225,0.37094,0.52547,0.39551,0.42823,0.44344,0.31384,0.5012,0.23281,0.57739,0.11461,0.58231,0.82479,0.58354,0.65702,0.59214,0.54072,0.60689,0.43586,0.62409,0.331,0.65973,0.24425,0.73346,0.13367,0.73961,0.6656,0.74944,0.55216,0.77033,0.45016,0.79614,0.34816,0.8244,0.27285,0.87233,0.67418,0.87725,0.5636,0.88093,0.45016],"triangles":[34,20,21,41,21,0,34,21,41,41,0,1,27,19,20,33,20,34,27,20,33,40,34,41,33,34,40,46,41,1,40,41,46,17,18,19,26,19,27,17,19,26,32,27,33,26,27,32,39,33,40,32,33,39,45,40,46,39,40,45,46,1,2,45,46,2,25,17,26,16,17,25,31,26,32,25,26,31,38,32,39,31,32,38,49,45,2,44,39,45,44,45,49,38,39,44,14,15,16,24,16,25,14,16,24,30,25,31,24,25,30,49,2,3,37,31,38,30,31,37,43,38,44,37,38,43,48,44,49,48,49,3,43,44,48,23,24,30,29,23,30,36,29,30,37,36,30,42,37,43,42,43,48,36,37,42,47,42,48,47,48,3,4,47,3,7,36,42,6,7,42,47,6,42,6,47,4,5,6,4,36,28,29,35,36,7,13,24,23,24,13,14,12,13,23,22,23,29,28,22,29,12,23,22,36,35,28,8,35,7,28,35,8,10,22,28,9,28,8,10,28,9,11,12,22,11,22,10],"vertices":[-12.5,5.74,-4.59,16.89,13.98,30.57,27.08,42.63,43.27,53.35,52.11,55.55,55.38,48.74,60.07,38.96,74.07,32.43,91.1,22.84,93.18,13.09,99.35,8.51,89.2,-6.79,71.97,-19.44,60.56,-24.67,54.59,-31.19,49.74,-28.07,34.05,-28.72,29.4,-31.96,27.31,-28.8,8.09,-16.76,-8.01,-6.67,83.31,6.24,65.76,-5.06,54.46,-11.39,44.05,-15.73,30.84,-17.87,20.35,-18.19,78.26999,15.58,61.39,4.96999,49.26,-1.1,39.13,-4.23999,26.47,-6.55,16.56,-6.44,2.43,-6.88,69.12,29.53,53.27,21.1,41.98,15.83,31.52,11.58,20.96999,7.51,11.4,5.71,-1.91,5.48,47.93,32.93999,36.86,27.9,26.43,24.25,15.81,20.95,7.6,19.19,43.52,43.07,32.91,37.82,22.08,32.33],"hull":22,"edges":[0,2,2,4,4,6,6,8,8,10,14,16,16,18,22,24,24,26,26,28,28,30,30,32,32,34,34,36,36,38,0,42,18,20,20,22,20,44,44,46,46,48,48,50,50,52,52,54,38,40,40,42,54,40,18,56,56,58,58,60,60,62,62,64,64,66,66,68,68,42,16,70,70,72,72,74,74,76,76,78,78,80,80,82,82,0,14,84,84,86,86,88,88,90,90,92,92,2,10,12,12,14,12,94,94,96,96,98,98,4,28,32],"width":83,"height":107}},"leg_b":{"leg_b":{"type":"mesh","uvs":[0.10251,0.07529,0.05723,0.36146,0.04967,0.51261,0.0429,0.64801,0.03557,0.79441,0.19395,0.91181,0.28614,0.98014,0.38987,0.96966,0.48366,0.81972,0.52574,0.81656,0.5675,0.81342,0.63998,0.82181,0.72382,0.84803,0.72098,0.88263,0.68793,0.90701,0.65987,0.92772,0.68261,0.97805,0.76219,0.97909,0.84603,0.90989,0.84461,0.85432,0.89292,0.8281,0.93556,0.88577,0.97961,0.8669,0.96966,0.77148,0.89008,0.73583,0.79629,0.76414,0.73945,0.73583,0.67124,0.74841,0.59877,0.72115,0.52487,0.72849,0.48366,0.67921,0.48508,0.57228,0.55187,0.4454,0.63998,0.4842,0.69966,0.41709,0.62008,0.2703,0.37591,0.20528,0.26449,0.17561,0.41085,0.00155,0.28438,0,0.18349,0.10221,0.28593,0.8309,0.28537,0.68207,0.29811,0.54113,0.32185,0.37598,0.42007,0.82331,0.46385,0.6795],"triangles":[16,14,17,14,13,17,17,13,18,16,15,14,18,13,19,13,12,19,21,20,22,20,23,22,12,25,19,19,25,20,25,24,20,20,24,23,11,27,12,12,26,25,12,27,26,8,45,30,27,11,28,8,29,9,29,8,30,46,30,45,9,29,10,11,10,28,10,29,28,30,46,31,7,6,41,7,45,8,6,5,41,7,41,45,5,4,41,4,42,41,45,41,46,46,41,42,4,3,42,42,43,46,42,3,43,31,46,43,3,2,43,32,31,44,31,43,44,44,43,1,43,2,1,33,32,34,44,36,32,32,35,34,32,36,35,1,37,44,44,37,36,1,40,37,1,0,40,37,39,38,37,40,39],"vertices":[1,27,-18.99,-10.57,1,1,27,10.10999,-16.34,1,1,27,25.58,-18.15,1,1,27,39.43999,-19.78,1,1,27,54.43,-21.53,1,1,27,67.44,-10.49,1,1,27,75.01,-4.07,1,2,27,74.56,3.87,0.98294,28,6.61,-20.41,0.01705,2,27,59.73,12.2,0.18223,28,12.59,-4.48,0.81776,2,27,59.66,15.41,0.04418,28,15.75,-3.92,0.95581,2,27,59.59,18.6,0.00343,28,18.9,-3.37,0.99656,1,28,24.45,-3.82,1,3,27,64.08999,30.16,2.0E-5,28,31.01,-6.05,0.3314,29,6.22,-4.13,0.66856,3,27,67.62999,29.66,1.0E-5,28,31.05,-9.62,0.05605,29,9.72,-3.45,0.94393,3,27,69.93,26.96,0,28,28.73,-12.31,0.0063,29,12.78,-5.26,0.99369,2,27,71.89,24.66,0,29,15.37,-6.8,0.99999,2,27,77.19,25.97,0,29,19.96999,-3.84,1,1,29,18.57,2.04,1,1,29,10.08,6.44,1,2,28,40.21,-6.02,0.04764,29,4.57,4.92,0.95235,2,28,43.67,-3.06,0.24748,29,1.04,7.8,0.75251,2,28,47.34,-8.74,0.21967,29,5.99,12.42,0.78032,2,28,50.54,-6.56,0.22559,29,3.28,15.18,0.7744,2,28,49.06,3.18,0.29927,29,-6.05,12.01,0.70071,2,28,42.76,6.4,0.3958,29,-8.1,5.23999,0.60419,2,28,35.86,2.96,0.68418,29,-3.51,-0.94,0.31581,1,28,31.34,5.55,1,1,28,26.27,3.88,1,1,28,20.57,6.28,1,2,27,50.62,16.07,0.00657,28,15.02,5.11,0.99342,2,27,45.31,13.35,0.24276,28,11.53,9.93999,0.75723,2,27,34.34,14.33,0.88276,28,10.82,20.93,0.11723,2,27,21.71,20.43,0.99949,28,14.93,34.34,5.0E-4,1,27,26.23,26.79,1,1,27,19.7,31.86,1,1,27,4.15,27.03,1,1,27,-3.99,9.07,1,1,27,-7.71,0.87,1,1,27,-24.7,13.38,1,1,27,-25.62,3.82,1,1,27,-15.74,-4.66,1,1,27,59.69,-2.86,1,1,27,44.4,-1.69,1,1,27,30.01,0.42,1,1,27,13.2,3.57,1,2,27,59.72,7.35,0.4012,28,7.8,-5.19999,0.59879,2,27,45.22,11.85,0.24276,28,10.03,9.8,0.75723],"hull":41,"edges":[0,2,12,14,14,16,20,22,22,24,24,26,30,32,32,34,34,36,36,38,38,40,40,42,42,44,44,46,46,48,48,50,50,52,52,54,54,56,56,58,58,60,60,62,62,64,64,66,66,68,68,70,74,76,76,78,78,80,0,80,16,60,16,18,18,20,58,18,20,56,54,22,24,52,8,82,82,84,84,86,86,88,6,8,84,6,2,4,4,6,86,4,86,62,88,2,88,64,70,72,72,74,88,72,74,80,64,70,26,36,38,24,26,28,28,30,28,34,38,50,40,48,82,12,16,90,90,82,60,90,90,14,60,92,92,84,92,82,8,10,10,12,82,10],"width":76,"height":103}},"leg_f":{"leg_f":{"type":"mesh","uvs":[0.39177,0.76814,0.56747,0.63952,0.70848,0.53629,0.83768,0.40978,1,0.25084,0.89197,0.10196,0.5745,0.01129,0.4245,0.01241,0.41721,0.08517,0.32692,0.19487,0.26576,0.18032,0.27304,0.27211,0.15603,0.45384,0.06042,0.60234,0.00799,0.63816,0.01514,0.75007,0.02088,0.83983,0.02838,0.95719,0.13323,1,0.2876,0.93592,0.35022,0.84301,0.43469,0.79599,0.19153,0.91611,0.25435,0.82,0.33637,0.73289,0.58365,0.47059,0.7982,0.18234,0.05752,0.86457,0.07974,0.76765,0.12844,0.63801,0.33666,0.32585,0.41868,0.21919,0.51226,0.09046,0.68239,0.33319,0.47767,0.583,0.23444,0.47909],"triangles":[32,7,6,8,7,32,26,6,5,31,8,32,9,8,31,26,5,4,11,10,9,30,9,31,11,9,30,26,32,6,33,32,26,31,32,33,3,26,4,33,26,3,35,12,11,25,31,33,30,31,25,30,35,11,2,33,3,25,33,2,34,30,25,35,30,34,29,13,12,29,12,35,1,34,25,1,25,2,24,35,34,29,35,24,14,28,15,29,14,13,29,28,14,23,28,29,0,24,34,0,34,1,24,23,29,16,15,28,20,24,0,20,0,21,23,24,20,27,16,28,22,27,28,23,22,28,19,23,20,22,23,19,17,16,27,18,17,27,22,18,27,18,22,19],"vertices":[82.37,9.87,59.25,19.37,40.7,26.98,19.79,32.22,-6.46,38.79,-20.14,20.5,-17.89,-14.3,-11.45,-28.35,-2.25,-25.06,14.96,-27.55,15.75,-34.09999,26.67,-28.4,53.82,-29.47,76.01,-30.34,82.58999,-33.31,95.98,-26.52,106.72,-21.08,120.77,-13.96,121.6,-1.75,107.27,9.25,93.28,10.06,83.97,15.43,108.89,-0.86,94.49,-0.2,80.37999,2.74,37.9,11.65,-6.37,16.07,108.21,-16.28,95.42,-19.49,77.51,-21.99,30.57,-19.48,14.08,-17.59,-5.59,-15.83,16.95,13.43,56.11,7.83,53.62,-20.70999],"hull":22,"edges":[8,10,10,12,12,14,14,16,16,18,18,20,20,22,26,28,34,36,36,38,38,40,40,42,0,42,36,44,44,46,46,48,52,10,34,54,54,56,56,58,60,62,62,64,64,12,50,66,66,52,4,6,6,8,0,2,2,4,48,68,68,50,58,70,70,60,22,24,24,26,28,30,30,32,32,34],"width":103,"height":134}},"light_1":{"light_1":{"x":0.16,"y":0.02,"scaleX":0.29,"scaleY":0.29,"width":121,"height":121}},"lowBeak":{"lowBeak":{"x":12.01,"y":-5.73,"rotation":98.55,"width":29,"height":34}},"shadow":{"shadow":{"x":-0.3,"y":-0.29,"width":508,"height":75}}}},"animations":{"Attack_1":{"bones":{"root":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0},{"time":0.1666,"x":17.73,"y":0,"curve":"stepped"},{"time":0.3333,"x":17.73,"y":0},{"time":0.5,"x":-53,"y":0},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Leg_R_IK_foot":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0},{"time":0.5,"x":-123.19,"y":0},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Leg_R_IK_ankle":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Hips":{"rotate":[{"time":0,"angle":0},{"time":0.1666,"angle":3.62},{"time":0.3333,"angle":-67.13},{"time":0.5,"angle":-1.33},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0},{"time":0.1666,"x":18.27,"y":-24.67},{"time":0.3333,"x":60.78,"y":-14.25},{"time":0.5,"x":-128.07,"y":-4.98},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Leg_R_":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Leg_R_2":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Leg_R_3":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Arm_R_IK_hand":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":0.5,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0},{"time":0.2333,"x":37.05,"y":35.29},{"time":0.2666,"x":56.98,"y":78.86},{"time":0.3,"x":43.91,"y":227.5},{"time":0.3333,"x":210.16,"y":374.28},{"time":0.4,"x":-72.86,"y":262.9},{"time":0.4333,"x":-175.57,"y":153.15},{"time":0.4666,"x":-187.09,"y":33.97},{"time":0.5,"x":-109.69,"y":0},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.5,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Arm_R_IK_ankle":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Arm_R_":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":0.5,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0},{"time":0.3333,"x":-17.35,"y":57.98},{"time":0.5,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.5,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Arm_R_2":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Arm_R_3":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Dagger":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0},{"time":0.3333,"angle":-19.16},{"time":0.5,"angle":0.74},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0},{"time":0.3333,"x":-30.72,"y":35.11},{"time":0.4333,"x":-9.16,"y":9.99},{"time":0.5,"x":8.89,"y":-2.91},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Shadow":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0},{"time":0.3333,"x":36.08,"y":0},{"time":0.5,"x":-111.73,"y":0},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1},{"time":0.1666,"x":0.74,"y":1.187},{"time":0.3333,"x":0.551,"y":1},{"time":0.5,"x":0.95,"y":1.076},{"time":1,"x":1,"y":1}]},"Spine_":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0},{"time":0.3333,"angle":-8.42},{"time":0.5,"angle":1.33},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Spine_2":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0},{"time":0.3333,"angle":-8.42},{"time":0.5,"angle":1.33},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Spine_3":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0},{"time":0.3333,"angle":-8.42},{"time":0.5,"angle":1.33},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Spine_4":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0},{"time":0.3333,"angle":-8.42},{"time":0.5,"angle":1.33},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Tail_":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0},{"time":0.3333,"angle":20.44},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Tail_2":{"rotate":[{"time":0,"angle":0,"curve":[0.25,0,0.75,1]},{"time":0.1666,"angle":2.07,"curve":[0.25,0,0.75,1]},{"time":0.3333,"angle":16.65,"curve":[0.25,0,0.75,1]},{"time":0.5333,"angle":22.13,"curve":[0.25,0,0.75,1]},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":0.5333,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.5333,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Tail_3":{"rotate":[{"time":0,"angle":0,"curve":[0.25,0,0.75,1]},{"time":0.1666,"angle":2.07,"curve":[0.25,0,0.75,1]},{"time":0.3333,"angle":7.25,"curve":[0.25,0,0.75,1]},{"time":0.5666,"angle":22.13,"curve":[0.25,0,0.75,1]},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":0.5666,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.5666,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Tail_4":{"rotate":[{"time":0,"angle":0,"curve":[0.25,0,0.75,1]},{"time":0.1666,"angle":2.07,"curve":[0.25,0,0.75,1]},{"time":0.3333,"angle":28.78,"curve":[0.25,0,0.75,1]},{"time":0.6,"angle":22.13,"curve":[0.25,0,0.75,1]},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":0.6,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.6,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Tail_5":{"rotate":[{"time":0,"angle":0,"curve":[0.25,0,0.75,1]},{"time":0.1666,"angle":2.07,"curve":[0.25,0,0.75,1]},{"time":0.3333,"angle":30.74,"curve":[0.25,0,0.75,1]},{"time":0.6333,"angle":22.13,"curve":[0.25,0,0.75,1]},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":0.6333,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.6333,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Tail_6":{"rotate":[{"time":0,"angle":0,"curve":[0.25,0,0.75,1]},{"time":0.1666,"angle":2.07,"curve":[0.25,0,0.75,1]},{"time":0.3333,"angle":10.15,"curve":[0.25,0,0.75,1]},{"time":0.6666,"angle":22.13,"curve":[0.25,0,0.75,1]},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":0.6666,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.6666,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Tail_7":{"rotate":[{"time":0,"angle":0,"curve":[0.25,0,0.75,1]},{"time":0.1666,"angle":2.07,"curve":[0.25,0,0.75,1]},{"time":0.3333,"angle":2.91,"curve":[0.25,0,0.75,1]},{"time":0.7,"angle":22.13,"curve":[0.25,0,0.75,1]},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":0.7,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.7,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Tail_8":{"rotate":[{"time":0,"angle":0,"curve":[0.25,0,0.75,1]},{"time":0.1666,"angle":2.07,"curve":[0.25,0,0.75,1]},{"time":0.3333,"angle":-4.91,"curve":[0.25,0,0.75,1]},{"time":0.7333,"angle":22.13,"curve":[0.25,0,0.75,1]},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":0.7333,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.7333,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Tail_9":{"rotate":[{"time":0,"angle":0,"curve":[0.25,0,0.75,1]},{"time":0.1666,"angle":-0.99,"curve":[0.25,0,0.75,1]},{"time":0.3333,"angle":-9.19,"curve":[0.25,0,0.75,1]},{"time":0.7666,"angle":22.13,"curve":[0.25,0,0.75,1]},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":0.7666,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.7666,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Tail_10":{"rotate":[{"time":0,"angle":0,"curve":[0.25,0,0.75,1]},{"time":0.1666,"angle":-15.58,"curve":[0.25,0,0.75,1]},{"time":0.3333,"angle":-8.66,"curve":[0.25,0,0.75,1]},{"time":0.8,"angle":22.13,"curve":[0.25,0,0.75,1]},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":0.8,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.8,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Tail_11":{"rotate":[{"time":0,"angle":0,"curve":[0.25,0,0.75,1]},{"time":0.1666,"angle":2.07,"curve":[0.25,0,0.75,1]},{"time":0.3333,"angle":-9.28,"curve":[0.25,0,0.75,1]},{"time":0.8333,"angle":22.13,"curve":[0.25,0,0.75,1]},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":0.8333,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.8333,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Tail_12":{"rotate":[{"time":0,"angle":0,"curve":[0.25,0,0.75,1]},{"time":0.1666,"angle":2.07,"curve":[0.25,0,0.75,1]},{"time":0.3333,"angle":7.25,"curve":[0.25,0,0.75,1]},{"time":0.8333,"angle":22.13,"curve":[0.25,0,0.75,1]},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":0.8333,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.8333,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Arm_L_IK_hand":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":0.5,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0},{"time":0.2333,"x":22.9,"y":62.59},{"time":0.2666,"x":35.75,"y":119.8},{"time":0.3,"x":15.6,"y":282.09},{"time":0.3333,"x":174.78,"y":442.51},{"time":0.4,"x":-94.09,"y":303.84},{"time":0.4333,"x":-189.72,"y":180.45},{"time":0.4666,"x":-194.17,"y":47.62},{"time":0.5,"x":-109.69,"y":0},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.5,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Arm_L_IK_ankle":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Arm_L_":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Arm_L_2":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Arm_L_3":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Leg_L_foot":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Leg_L_IK_ankle":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Leg_L_":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Leg_L_2":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Leg_L_3":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Leg_L_4":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Head":{"rotate":[{"time":0,"angle":0},{"time":0.1666,"angle":23.34},{"time":0.3333,"angle":-33.83},{"time":0.5666,"angle":37.63},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0},{"time":0.3333,"x":-16.73,"y":12.87},{"time":0.5666,"x":2.5,"y":0.53},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Eye":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Shoulder_feathers":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Light":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]}}},"Attack_2":{"slots":{"eyelid":{"attachment":[{"time":0.0333,"name":"eyelid"},{"time":0.1666,"name":"eyelid"},{"time":0.3,"name":"eye1"}]},"light_1":{"color":[{"time":0,"color":"ffffffff","curve":"stepped"},{"time":0.3,"color":"ffffffff","curve":"stepped"},{"time":0.7333,"color":"ffffffff"},{"time":0.9666,"color":"ffffff00"}],"attachment":[{"time":0.2666,"name":null},{"time":0.3,"name":"light_1"},{"time":0.9666,"name":null}]}},"bones":{"root":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":0.6666,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":0.6666,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.6666,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Leg_R_IK_foot":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":0.6666,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":0.6666,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.6666,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Leg_R_IK_ankle":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":0.6666,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":0.6666,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.6666,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Hips":{"rotate":[{"time":0,"angle":0},{"time":0.1666,"angle":5.57},{"time":0.3333,"angle":-2.05,"curve":"stepped"},{"time":0.6666,"angle":-2.05},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0},{"time":0.1666,"x":0,"y":-14.68},{"time":0.3333,"x":-24.41,"y":-8.38,"curve":"stepped"},{"time":0.6666,"x":-24.41,"y":-8.38},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.6666,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Leg_R_":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":0.6666,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":0.6666,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.6666,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Leg_R_2":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":0.6666,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":0.6666,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.6666,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Leg_R_3":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":0.6666,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":0.6666,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.6666,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Arm_R_IK_hand":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":0.6666,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":0.6666,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.6666,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Arm_R_IK_ankle":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":0.6666,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":0.6666,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.6666,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Arm_R_":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":0.6666,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":0.6666,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.6666,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Arm_R_2":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":0.6666,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":0.6666,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.6666,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Arm_R_3":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":0.6666,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":0.6666,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.6666,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Dagger":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":0.6666,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0},{"time":0.3333,"x":-3.15,"y":-5.24},{"time":0.4,"x":-5.87,"y":-4.09},{"time":0.4666,"x":-3.15,"y":-5.24},{"time":0.5333,"x":-5.87,"y":-4.09},{"time":0.6666,"x":-5.47,"y":-2.87},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.6666,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Shadow":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":0.6666,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0},{"time":0.1666,"x":18.11,"y":0},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":0.6666,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1},{"time":0.1666,"x":0.956,"y":1.067},{"time":0.3333,"x":1,"y":1},{"time":0.4,"x":0.953,"y":0.953},{"time":0.4666,"x":1,"y":1},{"time":0.5333,"x":0.953,"y":0.953},{"time":0.6666,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Spine_":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":0.6666,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":0.6666,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.6666,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Spine_2":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":0.6666,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":0.6666,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.6666,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Spine_3":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0},{"time":0.3333,"angle":-0.06,"curve":"stepped"},{"time":0.6666,"angle":-0.06},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":0.6666,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.6666,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Spine_4":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0},{"time":0.3333,"angle":-12.59,"curve":"stepped"},{"time":0.6666,"angle":-12.59},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":0.6666,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1},{"time":0.4,"x":1.037,"y":1.037},{"time":0.4666,"x":1,"y":1},{"time":0.5333,"x":1.037,"y":1.037},{"time":0.6666,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Tail_":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":0.6666,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":0.6666,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.6666,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Tail_2":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0},{"time":0.3333,"angle":2.25,"curve":"stepped"},{"time":0.6666,"angle":2.25},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":0.6666,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.6666,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Tail_3":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0},{"time":0.3333,"angle":2.25,"curve":"stepped"},{"time":0.6666,"angle":2.25},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":0.6666,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.6666,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Tail_4":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0},{"time":0.3333,"angle":2.25,"curve":"stepped"},{"time":0.6666,"angle":2.25},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":0.6666,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.6666,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Tail_5":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0},{"time":0.3333,"angle":2.25,"curve":"stepped"},{"time":0.6666,"angle":2.25},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":0.6666,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.6666,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Tail_6":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0},{"time":0.3333,"angle":2.25,"curve":"stepped"},{"time":0.6666,"angle":2.25},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":0.6666,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.6666,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Tail_7":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0},{"time":0.3333,"angle":2.25,"curve":"stepped"},{"time":0.6666,"angle":2.25},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":0.6666,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.6666,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Tail_8":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0},{"time":0.3333,"angle":2.25,"curve":"stepped"},{"time":0.6666,"angle":2.25},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":0.6666,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.6666,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Tail_9":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0},{"time":0.3333,"angle":2.25,"curve":"stepped"},{"time":0.6666,"angle":2.25},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":0.6666,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.6666,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Tail_10":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0},{"time":0.3333,"angle":2.25,"curve":"stepped"},{"time":0.6666,"angle":2.25},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":0.6666,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.6666,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Tail_11":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0},{"time":0.3333,"angle":2.25,"curve":"stepped"},{"time":0.6666,"angle":2.25},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":0.6666,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.6666,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Tail_12":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0},{"time":0.3333,"angle":2.25,"curve":"stepped"},{"time":0.6666,"angle":2.25},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":0.6666,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.6666,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Arm_L_IK_hand":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":0.6666,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":0.6666,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.6666,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Arm_L_IK_ankle":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":0.6666,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":0.6666,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.6666,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Arm_L_":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":0.6666,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":0.6666,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.6666,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Arm_L_2":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":0.6666,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":0.6666,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.6666,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Arm_L_3":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":0.6666,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":0.6666,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.6666,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Leg_L_foot":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":0.6666,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":0.6666,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.6666,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Leg_L_IK_ankle":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":0.6666,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":0.6666,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.6666,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Leg_L_":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":0.6666,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0},{"time":0.1666,"x":1.29,"y":13.29,"curve":"stepped"},{"time":0.3333,"x":1.29,"y":13.29,"curve":"stepped"},{"time":0.6666,"x":1.29,"y":13.29},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.6666,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Leg_L_2":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":0.6666,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":0.6666,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.6666,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Leg_L_3":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":0.6666,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":0.6666,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.6666,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Leg_L_4":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":0.6666,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":0.6666,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.6666,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Head":{"rotate":[{"time":0,"angle":0},{"time":0.1666,"angle":15.41},{"time":0.3333,"angle":-32.24,"curve":"stepped"},{"time":0.6666,"angle":-32.24},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0},{"time":0.3333,"x":-19.45,"y":16.78,"curve":"stepped"},{"time":0.6666,"x":-19.45,"y":16.78},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1},{"time":0.4,"x":1.055,"y":1.055},{"time":0.4666,"x":1,"y":1},{"time":0.5333,"x":1.055,"y":1.055},{"time":0.6666,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Eye":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":0.6666,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":0.6666,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.6666,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Shoulder_feathers":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0,"curve":"stepped"},{"time":0.6666,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0,"curve":"stepped"},{"time":0.6666,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1,"curve":"stepped"},{"time":0.6666,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"Light":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.2666,"angle":0},{"time":0.8333,"angle":-172.29},{"time":0.9666,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.1666,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0},{"time":0.4666,"x":2.03,"y":0.25},{"time":0.6666,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.1666,"x":1,"y":1,"curve":"stepped"},{"time":0.2666,"x":1,"y":1},{"time":0.4666,"x":1.294,"y":1.294},{"time":0.6666,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"beak_lower":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0,"curve":"stepped"},{"time":0.2666,"angle":0},{"time":0.3333,"angle":42.96},{"time":0.4,"angle":33.91},{"time":0.4666,"angle":54.08},{"time":0.5333,"angle":47.87},{"time":0.6,"angle":54.74},{"time":0.6666,"angle":49.85}]},"beak":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.1666,"angle":0},{"time":0.3333,"angle":-26.2,"curve":"stepped"},{"time":0.6666,"angle":-26.2},{"time":0.8333,"angle":0}]}},"deform":{"default":{"body":{"body":[{"time":0,"offset":658,"vertices":[0.19346,-2.60981,-0.48445,-2.57176,-1.75387,-1.94227],"curve":"stepped"},{"time":0.1666,"offset":658,"vertices":[0.19346,-2.60981,-0.48445,-2.57176,-1.75387,-1.94227]},{"time":0.3333,"offset":498,"vertices":[-0.33062,-5.78969,-4.18081,-4.01908,1.61546,-4.3711,-1.78938,-4.30314,-3.08148,-3.49633,0.22621,-4.25059,-1.15661,-4.09674,1.89056,-3.41824,0.68727,-3.84565,0.78894,-4.32809,1.65661,-4.28773,3.02166,-3.56718,4.74841,-0.98193,4.17821,-2.46125,5.09582,0.64526,5.03186,-1.03309,4.10383,3.39765,4.83742,2.23281,5.29924,0.55307,2.71802,4.65951,3.82121,3.80763,4.84529,2.3713,1.46096,4.32542,2.52053,3.80693,3.61389,2.79013,-0.09383,4.33088,1.01902,4.21057,2.32285,3.65655,-3.07799,3.52111,-2.07298,4.19235,-0.60977,4.63668,-3.67698,2.76077,-2.84679,3.61099,-1.52974,4.33589,4.39804,-2.97333,-5.30374,0.23797,-4.5703,2.70095,-3.72564,3.78192,-2.30651,4.78118,4.44226,-2.1229,-4.89709,-0.51032,-4.56283,1.84947,-3.9366,2.95686,-2.77221,4.06832,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2.29439,3.85198,3.20481,3.13563,4.04509,1.93409,2.22656,1.82931,2.62099,1.19787,2.8675,0.28816,2.26326,-1.33448,1.71205,-1.99351,1.86725,-3.09416,3.8071,0.08985,3.63284,-1.14321,0.09013,-1.33995,-0.25891,-1.31764,-1.13567,-0.82821,-0.26038,3.44384,0.63072,3.39569,1.69245,3.01048,0.41713,-1.11175,0.11839,-1.18145,-0.26879,-1.1567,-0.03203,-2.75309,-3.15799,2.65667,-2.37182,3.37727,-1.15558,3.96147,-2.79586,0.74649,-2.51124,1.43812,-1.91297,2.17083,-1.79136,-1.84103,-2.20326,-1.3204,-2.51121,-0.53952,-0.97662,-2.88867,4.38732,-0.55677,-4.03206,-1.817,-4.41297,0.28944,-4.19144,1.41067,-3.51223,2.68687,3.71096,2.28824,-3.56529,-2.50923,-4.08917,-1.51184,-4.35807,-0.11244,-2.77316,-3.35318,0,0,0,0,0,0,0,0,0,0,-3.78523,-4.60321,-4.83829,-3.47944]},{"time":0.4,"offset":498,"vertices":[0.05191,0.91321,0.65924,0.63375,-0.25491,0.68949,0.28217,0.67851,0.4862,0.55083,-0.03583,0.67035,0.18259,0.64569,-0.29861,0.53934,-0.10838,0.60639,-0.12439,0.68249,-0.26121,0.67609,-0.47645,0.56246,-0.74919,0.15509,-0.65877,0.38806,-0.80395,-0.10144,-0.79342,0.16284,-0.64754,-0.53576,-0.76317,-0.35183,-0.83562,-0.08721,-0.42907,-0.73464,-0.60296,-0.60005,-0.76398,-0.37394,-0.23077,-0.68213,-0.3978,-0.59994,-0.5698,-0.44005,0.01446,-0.683,-0.16099,-0.66369,-0.36614,-0.57673,0.48512,-0.55532,0.32669,-0.66091,0.09637,-0.73132,0.57962,-0.43547,0.44874,-0.56922,0.24148,-0.68396,-0.69334,0.46879,0.83586,-0.0372,0.72052,-0.42599,0.58734,-0.59624,0.36395,-0.75421,-0.70028,0.33466,0.77173,0.08077,0.71934,-0.29176,0.62061,-0.46619,0.43745,-0.64179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.3622,-0.60745,-0.50571,-0.49418,-0.63779,-0.30503,-0.35156,-0.28841,-0.4137,-0.18855,-0.45211,-0.04549,-0.35727,0.21081,-0.26993,0.31428,-0.29442,0.48786,-0.60075,-0.0138,-0.57283,0.18026,0.20943,-2.81022,-0.52031,-2.76931,-1.85125,-2.11812,0.04076,-0.54308,-0.09973,-0.53524,-0.26673,-0.47486,-0.06599,0.1752,-0.01884,0.18643,0.04253,0.18214,0.00506,0.43406,0.49782,-0.41893,0.37389,-0.53242,0.18246,-0.62487,0.44073,-0.11788,0.39583,-0.22663,0.30187,-0.3427,0.28238,0.29011,0.34732,0.2083,0.39619,0.08472,0.154,0.45551,-0.69167,0.08781,0.63544,0.2868,0.69576,-0.04577,0.66086,-0.22236,0.5541,-0.42398,-0.5851,-0.36078,0.56217,0.39557,0.64479,0.2384,0.6875,0.01728,0.43727,0.52871,0,0,0,0,0,0,0,0,0,0,0.59688,0.72556,0.76292,0.5487]},{"time":0.4666,"offset":498,"vertices":[-0.33062,-5.78969,-4.18081,-4.01908,1.61546,-4.3711,-1.78938,-4.30314,-3.08148,-3.49633,0.22621,-4.25059,-1.15661,-4.09674,1.89056,-3.41824,0.68727,-3.84565,0.78894,-4.32809,1.65661,-4.28773,3.02166,-3.56718,4.74841,-0.98193,4.17821,-2.46125,5.09582,0.64526,5.03186,-1.03309,4.10383,3.39765,4.83742,2.23281,5.29924,0.55307,2.71802,4.65951,3.82121,3.80763,4.84529,2.3713,1.46096,4.32542,2.52053,3.80693,3.61389,2.79013,-0.09383,4.33088,1.01902,4.21057,2.32285,3.65655,-3.07799,3.52111,-2.07298,4.19235,-0.60977,4.63668,-3.67698,2.76077,-2.84679,3.61099,-1.52974,4.33589,4.39804,-2.97333,-5.30374,0.23797,-4.5703,2.70095,-3.72564,3.78192,-2.30651,4.78118,4.44226,-2.1229,-4.89709,-0.51032,-4.56283,1.84947,-3.9366,2.95686,-2.77221,4.06832,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2.29439,3.85198,3.20481,3.13563,4.04509,1.93409,2.22656,1.82931,2.62099,1.19787,2.8675,0.28816,2.26326,-1.33448,1.71205,-1.99351,1.86725,-3.09416,3.8071,0.08985,3.63284,-1.14321,0.09013,-1.33995,-0.25891,-1.31764,-1.13567,-0.82821,-0.26038,3.44384,0.63072,3.39569,1.69245,3.01048,0.41713,-1.11175,0.11839,-1.18145,-0.26879,-1.1567,-0.03203,-2.75309,-3.15799,2.65667,-2.37182,3.37727,-1.15558,3.96147,-2.79586,0.74649,-2.51124,1.43812,-1.91297,2.17083,-1.79136,-1.84103,-2.20326,-1.3204,-2.51121,-0.53952,-0.97662,-2.88867,4.38732,-0.55677,-4.03206,-1.817,-4.41297,0.28944,-4.19144,1.41067,-3.51223,2.68687,3.71096,2.28824,-3.56529,-2.50923,-4.08917,-1.51184,-4.35807,-0.11244,-2.77316,-3.35318,0,0,0,0,0,0,0,0,0,0,-3.78523,-4.60321,-4.83829,-3.47944]},{"time":0.5333,"offset":498,"vertices":[0.05191,0.91321,0.65924,0.63375,-0.25491,0.68949,0.28217,0.67851,0.4862,0.55083,-0.03583,0.67035,0.18259,0.64569,-0.29861,0.53934,-0.10838,0.60639,-0.12439,0.68249,-0.26121,0.67609,-0.47645,0.56246,-0.74919,0.15509,-0.65877,0.38806,-0.80395,-0.10144,-0.79342,0.16284,-0.64754,-0.53576,-0.76317,-0.35183,-0.83562,-0.08721,-0.42907,-0.73464,-0.60296,-0.60005,-0.76398,-0.37394,-0.23077,-0.68213,-0.3978,-0.59994,-0.5698,-0.44005,0.01446,-0.683,-0.16099,-0.66369,-0.36614,-0.57673,0.48512,-0.55532,0.32669,-0.66091,0.09637,-0.73132,0.57962,-0.43547,0.44874,-0.56922,0.24148,-0.68396,-0.69334,0.46879,0.83586,-0.0372,0.72052,-0.42599,0.58734,-0.59624,0.36395,-0.75421,-0.70028,0.33466,0.77173,0.08077,0.71934,-0.29176,0.62061,-0.46619,0.43745,-0.64179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.3622,-0.60745,-0.50571,-0.49418,-0.63779,-0.30503,-0.35156,-0.28841,-0.4137,-0.18855,-0.45211,-0.04549,-0.35727,0.21081,-0.26993,0.31428,-0.29442,0.48786,-0.60075,-0.0138,-0.57283,0.18026,0.20943,-2.81022,-0.52031,-2.76931,-1.85125,-2.11812,0.04076,-0.54308,-0.09973,-0.53524,-0.26673,-0.47486,-0.06599,0.1752,-0.01884,0.18643,0.04253,0.18214,0.00506,0.43406,0.49782,-0.41893,0.37389,-0.53242,0.18246,-0.62487,0.44073,-0.11788,0.39583,-0.22663,0.30187,-0.3427,0.28238,0.29011,0.34732,0.2083,0.39619,0.08472,0.154,0.45551,-0.69167,0.08781,0.63544,0.2868,0.69576,-0.04577,0.66086,-0.22236,0.5541,-0.42398,-0.5851,-0.36078,0.56217,0.39557,0.64479,0.2384,0.6875,0.01728,0.43727,0.52871,0,0,0,0,0,0,0,0,0,0,0.59688,0.72556,0.76292,0.5487]},{"time":0.6666,"offset":658,"vertices":[0.19346,-2.60981,-0.48445,-2.57176,-1.75387,-1.94227],"curve":"stepped"},{"time":1,"offset":658,"vertices":[0.19346,-2.60981,-0.48445,-2.57176,-1.75387,-1.94227]}]},"leg_f":{"leg_f":[{"time":0,"offset":10,"vertices":[-0.20874,-0.09414],"curve":[0.25,0,0.75,1]},{"time":0.1666,"offset":8,"vertices":[5.2253,3.68521,5.7591,1.98754,8.19358,-2.72476,9.25054,-5.00725,9.31082,-5.13745,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6.63863,0.63315,0,0,0,0,0,0,0,0,0,0,8.6418,-3.6927],"curve":"stepped"},{"time":0.3333,"offset":8,"vertices":[5.2253,3.68521,5.7591,1.98754,8.19358,-2.72476,9.25054,-5.00725,9.31082,-5.13745,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6.63863,0.63315,0,0,0,0,0,0,0,0,0,0,8.6418,-3.6927],"curve":[0.25,0,0.75,1]},{"time":1,"offset":10,"vertices":[-0.20874,-0.09414]}]}}}},"Hit":{"slots":{"eyelid":{"attachment":[{"time":0.0666,"name":"eyelid"},{"time":0.3,"name":"eye1"}]}},"bones":{"root":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":[0.25,0,0.75,1]},{"time":0.1,"x":50.82,"y":0,"curve":[0.25,0,0.75,1]},{"time":0.3333,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1}]},"Leg_R_IK_foot":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1}]},"Leg_R_IK_ankle":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1}]},"Hips":{"rotate":[{"time":0,"angle":0,"curve":[0.25,0,0.75,1]},{"time":0.1,"angle":9.02,"curve":[0.25,0,0.75,1]},{"time":0.3333,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":[0.25,0,0.75,1]},{"time":0.1,"x":11.8,"y":-20.88,"curve":[0.25,0,0.75,1]},{"time":0.3333,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":[0.25,0,0.75,1]},{"time":0.1,"x":1.056,"y":0.913,"curve":[0.25,0,0.75,1]},{"time":0.3333,"x":1,"y":1}]},"Leg_R_":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1}]},"Leg_R_2":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1}]},"Leg_R_3":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1}]},"Arm_R_IK_hand":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1}]},"Arm_R_IK_ankle":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1}]},"Arm_R_":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1}]},"Arm_R_2":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1}]},"Arm_R_3":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1}]},"Dagger":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":[0.25,0,0.75,1]},{"time":0.1,"x":0.822,"y":1,"curve":[0.25,0,0.75,1]},{"time":0.3333,"x":1,"y":1}]},"Shadow":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":[0.25,0,0.75,1]},{"time":0.1,"x":0.952,"y":0.952,"curve":[0.25,0,0.75,1]},{"time":0.3333,"x":1,"y":1}]},"Spine_":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1}]},"Spine_2":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1}]},"Spine_3":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1}]},"Spine_4":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1}]},"Tail_":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1}]},"Tail_2":{"rotate":[{"time":0,"angle":0,"curve":[0.25,0,0.75,1]},{"time":0.1,"angle":3.06,"curve":[0.25,0,0.75,1]},{"time":0.3333,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1}]},"Tail_3":{"rotate":[{"time":0,"angle":0,"curve":[0.25,0,0.75,1]},{"time":0.1,"angle":3.06,"curve":[0.25,0,0.75,1]},{"time":0.3333,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1}]},"Tail_4":{"rotate":[{"time":0,"angle":0,"curve":[0.25,0,0.75,1]},{"time":0.1,"angle":3.06,"curve":[0.25,0,0.75,1]},{"time":0.3333,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1}]},"Tail_5":{"rotate":[{"time":0,"angle":0,"curve":[0.25,0,0.75,1]},{"time":0.1,"angle":3.06,"curve":[0.25,0,0.75,1]},{"time":0.3333,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1}]},"Tail_6":{"rotate":[{"time":0,"angle":0,"curve":[0.25,0,0.75,1]},{"time":0.1,"angle":3.06,"curve":[0.25,0,0.75,1]},{"time":0.3333,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1}]},"Tail_7":{"rotate":[{"time":0,"angle":0,"curve":[0.25,0,0.75,1]},{"time":0.1,"angle":3.06,"curve":[0.25,0,0.75,1]},{"time":0.3333,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1}]},"Tail_8":{"rotate":[{"time":0,"angle":0,"curve":[0.25,0,0.75,1]},{"time":0.1,"angle":3.06,"curve":[0.25,0,0.75,1]},{"time":0.3333,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1}]},"Tail_9":{"rotate":[{"time":0,"angle":0,"curve":[0.25,0,0.75,1]},{"time":0.1,"angle":3.06,"curve":[0.25,0,0.75,1]},{"time":0.3333,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1}]},"Tail_10":{"rotate":[{"time":0,"angle":0,"curve":[0.25,0,0.75,1]},{"time":0.1,"angle":3.06,"curve":[0.25,0,0.75,1]},{"time":0.3333,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1}]},"Tail_11":{"rotate":[{"time":0,"angle":0,"curve":[0.25,0,0.75,1]},{"time":0.1,"angle":3.06,"curve":[0.25,0,0.75,1]},{"time":0.3333,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1}]},"Tail_12":{"rotate":[{"time":0,"angle":0,"curve":[0.25,0,0.75,1]},{"time":0.1,"angle":3.06,"curve":[0.25,0,0.75,1]},{"time":0.3333,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1}]},"Arm_L_IK_hand":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1}]},"Arm_L_IK_ankle":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1}]},"Arm_L_":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1}]},"Arm_L_2":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1}]},"Arm_L_3":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1}]},"Leg_L_foot":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1}]},"Leg_L_IK_ankle":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1}]},"Leg_L_":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1}]},"Leg_L_2":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1}]},"Leg_L_3":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1}]},"Leg_L_4":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1}]},"Head":{"rotate":[{"time":0,"angle":0,"curve":[0.25,0,0.75,1]},{"time":0.1,"angle":52.3,"curve":[0.25,0,0.75,1]},{"time":0.3333,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1}]},"Eye":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1}]},"Shoulder_feathers":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1}]},"Light":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.3333,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.3333,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.3333,"x":1,"y":1}]}}},"Idle_1":{"slots":{"eyelid":{"attachment":[{"time":1.4,"name":"eyelid"},{"time":2.2666,"name":"eye1"}]}},"bones":{"root":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Hips":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":[0.25,0,0.75,1]},{"time":0.6,"x":0,"y":-9.87,"curve":[0.25,0,0.75,1]},{"time":1.2,"x":0,"y":0,"curve":[0.25,0,0.75,1]},{"time":1.8,"x":0,"y":-9.87,"curve":[0.25,0,0.75,1]},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Leg_R_IK_foot":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Leg_R_IK_ankle":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Leg_R_":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":[0.25,0,0.75,1]},{"time":0.6,"x":0,"y":5.16,"curve":[0.25,0,0.75,1]},{"time":1.2,"x":0,"y":0,"curve":[0.25,0,0.75,1]},{"time":1.8,"x":0,"y":5.16,"curve":[0.25,0,0.75,1]},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Leg_R_2":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Leg_R_3":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Arm_R_IK_hand":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Arm_R_IK_ankle":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Arm_R_":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Arm_R_2":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Arm_R_3":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Dagger":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":[0.25,0,0.75,1]},{"time":0.6,"x":-0.62,"y":1.67,"curve":[0.25,0,0.75,1]},{"time":1.2,"x":0,"y":0,"curve":[0.25,0,0.75,1]},{"time":1.8,"x":-0.62,"y":1.67,"curve":[0.25,0,0.75,1]},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":[0.25,0,0.75,1]},{"time":0.6,"x":1.025,"y":1.025,"curve":[0.25,0,0.75,1]},{"time":1.2,"x":1,"y":1,"curve":[0.25,0,0.75,1]},{"time":1.8,"x":1.025,"y":1.025,"curve":[0.25,0,0.75,1]},{"time":2.4,"x":1,"y":1}],"shear":[{"time":0,"x":0,"y":0,"curve":[0.25,0,0.75,1]},{"time":0.6,"x":10,"y":0,"curve":[0.25,0,0.75,1]},{"time":1.2,"x":0,"y":0,"curve":[0.25,0,0.75,1]},{"time":1.8,"x":10,"y":0,"curve":[0.25,0,0.75,1]},{"time":2.4,"x":0,"y":0}]},"Shadow":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":[0.25,0,0.75,1]},{"time":0.6,"x":1.037,"y":1.037,"curve":[0.25,0,0.75,1]},{"time":1.2,"x":1,"y":1,"curve":[0.25,0,0.75,1]},{"time":1.8,"x":1.037,"y":1.037,"curve":[0.25,0,0.75,1]},{"time":2.4,"x":1,"y":1}]},"Spine_":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Spine_2":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Spine_3":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Spine_4":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Tail_":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Tail_2":{"rotate":[{"time":0,"angle":0,"curve":[0.25,0,0.75,1]},{"time":0.6,"angle":1.11,"curve":[0.25,0,0.75,1]},{"time":1.2,"angle":0,"curve":[0.25,0,0.75,1]},{"time":1.8,"angle":1.11,"curve":[0.25,0,0.75,1]},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Tail_3":{"rotate":[{"time":0,"angle":0,"curve":[0.25,0,0.75,1]},{"time":0.6,"angle":1.11,"curve":[0.25,0,0.75,1]},{"time":1.2,"angle":0,"curve":[0.25,0,0.75,1]},{"time":1.8,"angle":1.11,"curve":[0.25,0,0.75,1]},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Tail_4":{"rotate":[{"time":0,"angle":0,"curve":[0.25,0,0.75,1]},{"time":0.6,"angle":1.11,"curve":[0.25,0,0.75,1]},{"time":1.2,"angle":0,"curve":[0.25,0,0.75,1]},{"time":1.8,"angle":1.11,"curve":[0.25,0,0.75,1]},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Tail_5":{"rotate":[{"time":0,"angle":0,"curve":[0.25,0,0.75,1]},{"time":0.6,"angle":1.11,"curve":[0.25,0,0.75,1]},{"time":1.2,"angle":0,"curve":[0.25,0,0.75,1]},{"time":1.8,"angle":1.11,"curve":[0.25,0,0.75,1]},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Tail_6":{"rotate":[{"time":0,"angle":0,"curve":[0.25,0,0.75,1]},{"time":0.6,"angle":1.11,"curve":[0.25,0,0.75,1]},{"time":1.2,"angle":0,"curve":[0.25,0,0.75,1]},{"time":1.8,"angle":1.11,"curve":[0.25,0,0.75,1]},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Tail_7":{"rotate":[{"time":0,"angle":0,"curve":[0.25,0,0.75,1]},{"time":0.6,"angle":1.11,"curve":[0.25,0,0.75,1]},{"time":1.2,"angle":0,"curve":[0.25,0,0.75,1]},{"time":1.8,"angle":1.11,"curve":[0.25,0,0.75,1]},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Tail_8":{"rotate":[{"time":0,"angle":0,"curve":[0.25,0,0.75,1]},{"time":0.6,"angle":1.11,"curve":[0.25,0,0.75,1]},{"time":1.2,"angle":0,"curve":[0.25,0,0.75,1]},{"time":1.8,"angle":1.11,"curve":[0.25,0,0.75,1]},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Tail_9":{"rotate":[{"time":0,"angle":0,"curve":[0.25,0,0.75,1]},{"time":0.6,"angle":1.11,"curve":[0.25,0,0.75,1]},{"time":1.2,"angle":0,"curve":[0.25,0,0.75,1]},{"time":1.8,"angle":1.11,"curve":[0.25,0,0.75,1]},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Tail_10":{"rotate":[{"time":0,"angle":0,"curve":[0.25,0,0.75,1]},{"time":0.6,"angle":-6.52,"curve":[0.25,0,0.75,1]},{"time":1.2,"angle":0,"curve":[0.25,0,0.75,1]},{"time":1.8,"angle":-6.52,"curve":[0.25,0,0.75,1]},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Tail_11":{"rotate":[{"time":0,"angle":0,"curve":[0.25,0,0.75,1]},{"time":0.6,"angle":1.11,"curve":[0.25,0,0.75,1]},{"time":1.2,"angle":0,"curve":[0.25,0,0.75,1]},{"time":1.8,"angle":1.11,"curve":[0.25,0,0.75,1]},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Tail_12":{"rotate":[{"time":0,"angle":0,"curve":[0.25,0,0.75,1]},{"time":0.6,"angle":1.11,"curve":[0.25,0,0.75,1]},{"time":1.2,"angle":0,"curve":[0.25,0,0.75,1]},{"time":1.8,"angle":1.11,"curve":[0.25,0,0.75,1]},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Arm_L_IK_hand":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Arm_L_IK_ankle":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Arm_L_":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Arm_L_2":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Arm_L_3":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Leg_L_foot":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Leg_L_IK_ankle":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Leg_L_":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":[0.25,0,0.75,1]},{"time":0.6,"x":0,"y":7.04,"curve":[0.25,0,0.75,1]},{"time":1.2,"x":0,"y":0,"curve":[0.25,0,0.75,1]},{"time":1.8,"x":0,"y":7.04,"curve":[0.25,0,0.75,1]},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Leg_L_2":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Leg_L_3":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Leg_L_4":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Head":{"rotate":[{"time":0,"angle":0,"curve":[0.25,0,0.75,1]},{"time":0.5333,"angle":5.08,"curve":[0.25,0,0.75,1]},{"time":1.2,"angle":0,"curve":[0.25,0,0.75,1]},{"time":1.7333,"angle":5.08,"curve":[0.25,0,0.75,1]},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Eye":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":[0.25,0,0.75,1]},{"time":0.6,"x":0.69,"y":-1.59,"curve":[0.25,0,0.75,1]},{"time":1.2,"x":0,"y":0,"curve":[0.25,0,0.75,1]},{"time":1.8,"x":0.69,"y":-1.59,"curve":[0.25,0,0.75,1]},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Shoulder_feathers":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":[0.25,0,0.625,0.5]},{"time":0.6,"x":1.075,"y":1.075,"curve":[0.375,0.5,0.75,1]},{"time":1.2,"x":1,"y":1,"curve":[0.25,0,0.75,1]},{"time":1.8,"x":1.075,"y":1.075,"curve":[0.375,0.5,0.75,1]},{"time":2.4,"x":1,"y":1}]}},"deform":{"default":{"ankle_f":{"ankle_f":[{"time":0.6,"offset":4,"vertices":[-0.5815,1.57172,-1.61065,-0.46278]}]},"arm_f":{"arm_f":[{"time":0,"offset":60,"vertices":[0.15199,0.3362],"curve":[0.25,0,0.75,1]},{"time":0.6,"offset":4,"vertices":[0.53536,0.80657,0.53536,0.80657,0.53536,0.80657,0.53536,0.80657,0.53536,0.80657,0.53536,0.80657,0.53536,0.80657,0.53536,0.80657,0.53536,0.80657,0.53536,0.80657,0.53536,0.80657,0.53536,0.80657,0,0,0,0,0,0,0.46845,0.70573,0.46845,0.70573,0.46845,0.70573,0.46845,0.70573,0.46845,0.70573,0.46845,0.70573,0.46845,0.70573,0.46845,0.70573,0.46845,0.70573,0.46845,0.70573,0.46845,0.70573,0.46845,0.70573,0,0,-0.35559,-0.42827,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448],"curve":[0.25,0,0.75,1]},{"time":1.2,"offset":60,"vertices":[0.15199,0.3362],"curve":[0.25,0,0.75,1]},{"time":1.8,"offset":4,"vertices":[0.53536,0.80657,0.53536,0.80657,0.53536,0.80657,0.53536,0.80657,0.53536,0.80657,0.53536,0.80657,0.53536,0.80657,0.53536,0.80657,0.53536,0.80657,0.53536,0.80657,0.53536,0.80657,0.53536,0.80657,0,0,0,0,0,0,0.46845,0.70573,0.46845,0.70573,0.46845,0.70573,0.46845,0.70573,0.46845,0.70573,0.46845,0.70573,0.46845,0.70573,0.46845,0.70573,0.46845,0.70573,0.46845,0.70573,0.46845,0.70573,0.46845,0.70573,0,0,-0.35559,-0.42827,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448],"curve":[0.25,0,0.75,1]},{"time":2.4,"offset":60,"vertices":[0.15199,0.3362]}]},"body":{"body":[{"time":0,"offset":684,"vertices":[-0.05041,0.82949,0.16467,0.81451,0.56505,0.60929],"curve":[0.25,0,0.75,1]},{"time":0.6,"vertices":[-1.30197,-4.27799,-1.12479,4.32795,1.04008,4.34904,2.12389,3.93524,3.86359,2.25114,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1.53919,4.29223,0.65749,4.5121,-2.13786,3.48919,-0.24821,4.08433,-2.13786,3.48919,-0.24821,4.08433,-0.24821,4.08433,-2.13786,3.48919,-0.24821,4.08433,0.81092,4.01103,-2.13786,3.48919,0.81092,4.01103,-2.13786,3.48919,0.81092,4.01103,2.78244,3.00001,0.81092,4.01103,2.78244,3.00001,0.81092,4.01103,2.78244,3.00001,2.78244,3.00001,2.78244,3.00001,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.28206,4.64135,0.92146,4.55789,3.1619,3.40925,-0.28206,4.64135,0.92146,4.55789,3.1619,3.40925,-0.28206,4.64135,0.92146,4.55789,3.1619,3.40925,-0.28206,4.64135,0.92146,4.55789,3.1619,3.40925,-0.28206,4.64135,0.92146,4.55789,3.1619,3.40925,0,-4.64999,-2.42933,3.96498,-0.28206,4.64135,0.92146,4.55789,3.1619,3.40925,0,-4.64999,-2.42933,3.96498,-0.28206,4.64135,0.92146,4.55789,3.1619,3.40925,0,-4.64999,-2.42933,3.96498,-0.28206,4.64135,0.92146,4.55789,3.1619,3.40925,0,-4.64999,-2.42933,3.96498,-0.28206,4.64135,0.92146,4.55789,3.1619,3.40925,0,-4.64999,-2.42933,3.96498,-0.28206,4.64135,0.92146,4.55789,3.1619,3.40925,0,-4.64999,-2.42933,3.96498,-0.28206,4.64135,0.92146,4.55789,3.1619,3.40925,0,-4.64999,-2.42933,3.96498,-0.28206,4.64135,0.92146,4.55789,3.1619,3.40925,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,2.05438,-3.39929,-0.01927,-3.97314,-0.01927,-3.97314,2.05438,-3.39929,-0.01927,-3.97314,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,3.77587,-2.70207,2.95422,-3.58117,0.65382,-4.59764,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,-0.01927,-3.97314,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,2.80913,-1.92802,2.21906,-2.58477,0.54577,-3.36384,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,2.05438,-3.39929,-2.68695,2.92501,3.81861,-1.09034,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,-2.68695,2.92501,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,2.05438,-3.39929,-2.68695,2.92501,3.81861,-1.09034,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,2.85954,-2.75752,2.05438,-3.39929,-2.68695,2.92501,3.81861,-1.09034,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,2.85954,-2.75752,-2.68695,2.92501,3.81861,-1.09034,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,3.81861,-1.09034,2.85954,-2.75752,0,0,0,0,0,0,0,0,3.81861,-1.09034,3.81861,-1.09034,-2.68695,2.92501,3.81861,-1.09034,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,2.85954,-2.75752,2.05438,-3.39929,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-2.68695,2.92501,3.81861,-1.09034,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,-2.68695,2.92501,3.81861,-1.09034,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,-2.68695,2.92501,3.81861,-1.09034,2.85954,-2.75752,2.05438,-3.39929],"curve":[0.25,0,0.75,1]},{"time":1.2,"offset":684,"vertices":[-0.05041,0.82949,0.16467,0.81451,0.56505,0.60929],"curve":[0.25,0,0.75,1]},{"time":1.8,"vertices":[-1.30197,-4.27799,-1.12479,4.32795,1.04008,4.34904,2.12389,3.93524,3.86359,2.25114,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1.53919,4.29223,0.65749,4.5121,-2.13786,3.48919,-0.24821,4.08433,-2.13786,3.48919,-0.24821,4.08433,-0.24821,4.08433,-2.13786,3.48919,-0.24821,4.08433,0.81092,4.01103,-2.13786,3.48919,0.81092,4.01103,-2.13786,3.48919,0.81092,4.01103,2.78244,3.00001,0.81092,4.01103,2.78244,3.00001,0.81092,4.01103,2.78244,3.00001,2.78244,3.00001,2.78244,3.00001,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.28206,4.64135,0.92146,4.55789,3.1619,3.40925,-0.28206,4.64135,0.92146,4.55789,3.1619,3.40925,-0.28206,4.64135,0.92146,4.55789,3.1619,3.40925,-0.28206,4.64135,0.92146,4.55789,3.1619,3.40925,-0.28206,4.64135,0.92146,4.55789,3.1619,3.40925,0,-4.64999,-2.42933,3.96498,-0.28206,4.64135,0.92146,4.55789,3.1619,3.40925,0,-4.64999,-2.42933,3.96498,-0.28206,4.64135,0.92146,4.55789,3.1619,3.40925,0,-4.64999,-2.42933,3.96498,-0.28206,4.64135,0.92146,4.55789,3.1619,3.40925,0,-4.64999,-2.42933,3.96498,-0.28206,4.64135,0.92146,4.55789,3.1619,3.40925,0,-4.64999,-2.42933,3.96498,-0.28206,4.64135,0.92146,4.55789,3.1619,3.40925,0,-4.64999,-2.42933,3.96498,-0.28206,4.64135,0.92146,4.55789,3.1619,3.40925,0,-4.64999,-2.42933,3.96498,-0.28206,4.64135,0.92146,4.55789,3.1619,3.40925,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,2.05438,-3.39929,-0.01927,-3.97314,-0.01927,-3.97314,2.05438,-3.39929,-0.01927,-3.97314,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,-0.01927,-3.97314,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,2.80913,-1.92802,2.21906,-2.58477,0.54577,-3.36384,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,2.05438,-3.39929,-2.68695,2.92501,3.81861,-1.09034,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,-2.68695,2.92501,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,2.05438,-3.39929,-2.68695,2.92501,3.81861,-1.09034,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,2.85954,-2.75752,2.05438,-3.39929,-2.68695,2.92501,3.81861,-1.09034,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,2.85954,-2.75752,-2.68695,2.92501,3.81861,-1.09034,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,3.81861,-1.09034,2.85954,-2.75752,0,0,0,0,0,0,0,0,3.81861,-1.09034,3.81861,-1.09034,-2.68695,2.92501,3.81861,-1.09034,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,2.85954,-2.75752,2.05438,-3.39929,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-2.68695,2.92501,3.81861,-1.09034,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,-2.68695,2.92501,3.81861,-1.09034,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,-2.68695,2.92501,3.81861,-1.09034,2.85954,-2.75752,2.05438,-3.39929],"curve":[0.25,0,0.75,1]},{"time":2.4,"offset":684,"vertices":[-0.05041,0.82949,0.16467,0.81451,0.56505,0.60929]}]},"head":{"head":[{"time":0,"curve":[0.25,0,0.75,1]},{"time":0.5333,"offset":12,"vertices":[0.48139,1.5397,0.48139,1.5397,0.48139,1.5397,0.48139,1.5397,0,0,0,0,-0.23086,1.4243,-0.23086,1.4243,-0.23086,1.4243,-0.23086,1.4243,-0.23086,1.4243,-0.23086,1.4243,-0.23086,1.4243,-0.23086,1.4243,-0.23086,1.4243,-0.23086,1.4243,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726],"curve":[0.25,0,0.75,1]},{"time":1.2,"curve":[0.25,0,0.75,1]},{"time":1.7333,"offset":12,"vertices":[0.48139,1.5397,0.48139,1.5397,0.48139,1.5397,0.48139,1.5397,0,0,0,0,-0.23086,1.4243,-0.23086,1.4243,-0.23086,1.4243,-0.23086,1.4243,-0.23086,1.4243,-0.23086,1.4243,-0.23086,1.4243,-0.23086,1.4243,-0.23086,1.4243,-0.23086,1.4243,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726],"curve":[0.25,0,0.75,1]},{"time":2.4}]},"leg_f":{"leg_f":[{"time":0,"offset":10,"vertices":[-0.87511,-0.39469],"curve":[0.25,0,0.75,1]},{"time":0.6,"vertices":[-0.4367,1.10158,-0.4367,1.10158,-0.4367,1.10158,-0.4367,1.10158,4.96781,1.9746,4.52941,0.47832,5.40452,0.87302,3.94208,-0.00424,3.94208,-0.00424,-0.61138,1.54222,-0.61138,1.54222,-0.61138,1.54222,-0.61138,1.54222,-0.61138,1.54222,-0.61138,1.54222,-0.61138,1.54222,-0.61138,1.54222,-0.61138,1.54222,-0.4367,1.10158,-0.4367,1.10158,-0.4367,1.10158,-0.4367,1.10158,-0.66496,-1.53833,-0.66496,-1.53833,-0.66496,-1.53833,-0.66496,-1.53833,4.73956,-0.66531,-0.66496,-1.53833,-0.66496,-1.53833,-0.66496,-1.53833,-0.66496,-1.53833,-0.66496,-1.53833,4.73956,-0.66531,-0.66496,-1.53833,-0.66496,-1.53833,-0.66496,-1.53833],"curve":[0.25,0,0.75,1]},{"time":1.2,"offset":10,"vertices":[-0.87511,-0.39469],"curve":[0.25,0,0.75,1]},{"time":1.8,"vertices":[-0.4367,1.10158,-0.4367,1.10158,-0.4367,1.10158,-0.4367,1.10158,4.96781,1.9746,4.52941,0.47832,5.40452,0.87302,3.94208,-0.00424,3.94208,-0.00424,-0.61138,1.54222,-0.61138,1.54222,-0.61138,1.54222,-0.61138,1.54222,-0.61138,1.54222,-0.61138,1.54222,-0.61138,1.54222,-0.61138,1.54222,-0.61138,1.54222,-0.4367,1.10158,-0.4367,1.10158,-0.4367,1.10158,-0.4367,1.10158,-0.66496,-1.53833,-0.66496,-1.53833,-0.66496,-1.53833,-0.66496,-1.53833,4.73956,-0.66531,-0.66496,-1.53833,-0.66496,-1.53833,-0.66496,-1.53833,-0.66496,-1.53833,-0.66496,-1.53833,4.73956,-0.66531,-0.66496,-1.53833,-0.66496,-1.53833,-0.66496,-1.53833],"curve":[0.25,0,0.75,1]},{"time":2.4,"offset":10,"vertices":[-0.87511,-0.39469]}]}}}},"Idle_2":{"slots":{"light_1":{"attachment":[{"time":0,"name":"light_1"},{"time":2.4,"name":"light_1"}]}},"bones":{"root":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Hips":{"rotate":[{"time":0,"angle":7.18,"curve":"stepped"},{"time":1.2,"angle":7.18,"curve":"stepped"},{"time":2.4,"angle":7.18}],"translate":[{"time":0,"x":0,"y":-23.34,"curve":[0.25,0,0.75,1]},{"time":0.6,"x":0,"y":-41.09,"curve":[0.25,0,0.75,1]},{"time":1.2,"x":0,"y":-23.34,"curve":[0.25,0,0.75,1]},{"time":1.8,"x":0,"y":-41.09,"curve":[0.25,0,0.75,1]},{"time":2.4,"x":0,"y":-23.34}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Leg_R_IK_foot":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":26,"y":0,"curve":"stepped"},{"time":1.2,"x":26,"y":0,"curve":"stepped"},{"time":2.4,"x":26,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Leg_R_IK_ankle":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Leg_R_":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":1.45,"y":11.52,"curve":[0.25,0,0.75,1]},{"time":0.6,"x":2.78,"y":27.22,"curve":[0.25,0,0.75,1]},{"time":1.2,"x":1.45,"y":11.52,"curve":[0.25,0,0.75,1]},{"time":1.8,"x":2.78,"y":27.22,"curve":[0.25,0,0.75,1]},{"time":2.4,"x":1.45,"y":11.52}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Leg_R_2":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Leg_R_3":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Arm_R_IK_hand":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":-31.79,"y":0,"curve":"stepped"},{"time":1.2,"x":-31.79,"y":0,"curve":"stepped"},{"time":2.4,"x":-31.79,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Arm_R_IK_ankle":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Arm_R_":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":-39.93,"y":47.53,"curve":"stepped"},{"time":1.2,"x":-39.93,"y":47.53,"curve":"stepped"},{"time":2.4,"x":-39.93,"y":47.53}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Arm_R_2":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Arm_R_3":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Dagger":{"rotate":[{"time":0,"angle":-18.32,"curve":"stepped"},{"time":1.2,"angle":-18.32,"curve":"stepped"},{"time":2.4,"angle":-18.32}],"translate":[{"time":0,"x":-37.54,"y":26.46,"curve":[0.25,0,0.75,1]},{"time":0.6,"x":-39,"y":27.46,"curve":[0.25,0,0.75,1]},{"time":1.2,"x":-37.54,"y":26.46,"curve":[0.25,0,0.75,1]},{"time":1.8,"x":-39,"y":27.46,"curve":[0.25,0,0.75,1]},{"time":2.4,"x":-37.54,"y":26.46}],"scale":[{"time":0,"x":1,"y":1,"curve":[0.25,0,0.75,1]},{"time":0.6,"x":1.025,"y":1.025,"curve":[0.25,0,0.75,1]},{"time":1.2,"x":1,"y":1,"curve":[0.25,0,0.75,1]},{"time":1.8,"x":1.025,"y":1.025,"curve":[0.25,0,0.75,1]},{"time":2.4,"x":1,"y":1}],"shear":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}]},"Shadow":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":[0.25,0,0.75,1]},{"time":0.6,"x":1.07,"y":1.07,"curve":[0.25,0,0.75,1]},{"time":1.2,"x":1,"y":1,"curve":[0.25,0,0.75,1]},{"time":1.8,"x":1.07,"y":1.07,"curve":[0.25,0,0.75,1]},{"time":2.4,"x":1,"y":1}]},"Spine_":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Spine_2":{"rotate":[{"time":0,"angle":-10.73,"curve":"stepped"},{"time":1.2,"angle":-10.73,"curve":"stepped"},{"time":2.4,"angle":-10.73}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Spine_3":{"rotate":[{"time":0,"angle":-17.69,"curve":"stepped"},{"time":1.2,"angle":-17.69,"curve":"stepped"},{"time":2.4,"angle":-17.69}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Spine_4":{"rotate":[{"time":0,"angle":-4.58,"curve":"stepped"},{"time":1.2,"angle":-4.58,"curve":"stepped"},{"time":2.4,"angle":-4.58}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Tail_":{"rotate":[{"time":0,"angle":14.43,"curve":[0.25,0,0.75,1]},{"time":0.8666,"angle":-4.28,"curve":[0.25,0,0.75,1]},{"time":2.4,"angle":14.43}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.8666,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.8666,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Tail_2":{"rotate":[{"time":0,"angle":16.47,"curve":[0.25,0,0.75,1]},{"time":0.9666,"angle":4.24,"curve":[0.25,0,0.75,1]},{"time":2.4,"angle":16.47}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.9666,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.9666,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Tail_3":{"rotate":[{"time":0,"angle":16.47,"curve":[0.25,0,0.75,1]},{"time":1.0666,"angle":4.24,"curve":[0.25,0,0.75,1]},{"time":2.4,"angle":16.47}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.0666,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.0666,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Tail_4":{"rotate":[{"time":0,"angle":16.47,"curve":[0.25,0,0.75,1]},{"time":1.1666,"angle":4.24,"curve":[0.25,0,0.75,1]},{"time":2.4,"angle":16.47}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.1666,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.1666,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Tail_5":{"rotate":[{"time":0,"angle":16.47,"curve":[0.25,0,0.75,1]},{"time":1.2666,"angle":4.24,"curve":[0.25,0,0.75,1]},{"time":2.4,"angle":16.47}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2666,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2666,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Tail_6":{"rotate":[{"time":0,"angle":16.47,"curve":[0.25,0,0.75,1]},{"time":1.3666,"angle":4.24,"curve":[0.25,0,0.75,1]},{"time":2.4,"angle":16.47}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.3666,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.3666,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Tail_7":{"rotate":[{"time":0,"angle":16.47,"curve":[0.25,0,0.75,1]},{"time":1.4666,"angle":4.24,"curve":[0.25,0,0.75,1]},{"time":2.4,"angle":16.47}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.4666,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.4666,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Tail_8":{"rotate":[{"time":0,"angle":16.47,"curve":[0.25,0,0.75,1]},{"time":1.5666,"angle":4.24,"curve":[0.25,0,0.75,1]},{"time":2.4,"angle":16.47}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.5666,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.5666,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Tail_9":{"rotate":[{"time":0,"angle":16.47,"curve":[0.25,0,0.75,1]},{"time":1.6666,"angle":4.24,"curve":[0.25,0,0.75,1]},{"time":2.4,"angle":16.47}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.6666,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.6666,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Tail_10":{"rotate":[{"time":0,"angle":16.47,"curve":[0.25,0,0.75,1]},{"time":1.6666,"angle":4.24,"curve":[0.25,0,0.75,1]},{"time":2.4,"angle":16.47}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.6666,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.6666,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Tail_11":{"rotate":[{"time":0,"angle":16.47,"curve":[0.25,0,0.75,1]},{"time":1.6666,"angle":4.24,"curve":[0.25,0,0.75,1]},{"time":2.4,"angle":16.47}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.6666,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.6666,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Tail_12":{"rotate":[{"time":0,"angle":16.47,"curve":[0.25,0,0.75,1]},{"time":1.6666,"angle":4.24,"curve":[0.25,0,0.75,1]},{"time":2.4,"angle":16.47}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.6666,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.6666,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Arm_L_IK_hand":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":-38.13,"y":0,"curve":"stepped"},{"time":1.2,"x":-38.13,"y":0,"curve":"stepped"},{"time":2.4,"x":-38.13,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Arm_L_IK_ankle":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Arm_L_":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Arm_L_2":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Arm_L_3":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Leg_L_foot":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":-43.7,"y":0,"curve":"stepped"},{"time":1.2,"x":-43.7,"y":0,"curve":"stepped"},{"time":2.4,"x":-43.7,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Leg_L_IK_ankle":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Leg_L_":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":1.7,"y":13.5,"curve":[0.25,0,0.75,1]},{"time":0.6,"x":2.65,"y":21.07,"curve":[0.25,0,0.75,1]},{"time":1.2,"x":1.7,"y":13.5,"curve":[0.25,0,0.75,1]},{"time":1.8,"x":2.65,"y":21.07,"curve":[0.25,0,0.75,1]},{"time":2.4,"x":1.7,"y":13.5}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Leg_L_2":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Leg_L_3":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Leg_L_4":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Head":{"rotate":[{"time":0,"angle":-9.55,"curve":[0.25,0,0.75,1]},{"time":0.6,"angle":-2.54,"curve":[0.25,0,0.75,1]},{"time":1.2,"angle":-9.55,"curve":[0.25,0,0.75,1]},{"time":1.8,"angle":-2.54,"curve":[0.25,0,0.75,1]},{"time":2.4,"angle":-9.55}],"translate":[{"time":0,"x":-4.58,"y":0.79,"curve":"stepped"},{"time":1.2,"x":-4.58,"y":0.79,"curve":"stepped"},{"time":2.4,"x":-4.58,"y":0.79}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Eye":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":[0.25,0,0.75,1]},{"time":0.6,"x":0.69,"y":-1.59,"curve":[0.25,0,0.75,1]},{"time":1.2,"x":0,"y":0,"curve":[0.25,0,0.75,1]},{"time":1.8,"x":0.69,"y":-1.59,"curve":[0.25,0,0.75,1]},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":1.2,"x":1,"y":1,"curve":"stepped"},{"time":2.4,"x":1,"y":1}]},"Shoulder_feathers":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1.2,"angle":0,"curve":"stepped"},{"time":2.4,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":1.2,"x":0,"y":0,"curve":"stepped"},{"time":2.4,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":[0.25,0,0.625,0.5]},{"time":0.6,"x":1.075,"y":1.075,"curve":[0.375,0.5,0.75,1]},{"time":1.2,"x":1,"y":1,"curve":[0.25,0,0.625,0.5]},{"time":1.8,"x":1.075,"y":1.075,"curve":[0.375,0.5,0.75,1]},{"time":2.4,"x":1,"y":1}]},"Light":{"rotate":[{"time":0,"angle":36.37},{"time":0.6,"angle":208.36},{"time":0.9,"angle":-78.36},{"time":1.2,"angle":394.37},{"time":1.8333,"angle":-152.92},{"time":2.1,"angle":-95},{"time":2.4,"angle":36.37}],"scale":[{"time":0,"x":1,"y":1,"curve":[0.25,0,0.75,1]},{"time":0.5666,"x":1.215,"y":1.215,"curve":[0.25,0,0.75,1]},{"time":1.2,"x":1,"y":1,"curve":[0.25,0,0.75,1]},{"time":1.8,"x":1.215,"y":1.215,"curve":[0.25,0,0.75,1]},{"time":2.4,"x":1,"y":1}]},"beak_lower":{"rotate":[{"time":0,"angle":0,"curve":[0.25,0,0.75,1]},{"time":0.5666,"angle":7.6,"curve":[0.25,0,0.75,1]},{"time":1.2,"angle":0,"curve":[0.25,0,0.75,1]},{"time":1.8,"angle":7.6,"curve":[0.25,0,0.75,1]},{"time":2.4,"angle":0}]}},"deform":{"default":{"ankle_f":{"ankle_f":[{"time":0.6,"offset":4,"vertices":[-0.5815,1.57172,-1.61065,-0.46278]}]},"arm_f":{"arm_f":[{"time":0,"offset":60,"vertices":[0.15199,0.3362],"curve":[0.25,0,0.75,1]},{"time":0.6,"offset":4,"vertices":[0.53536,0.80657,0.53536,0.80657,0.53536,0.80657,0.53536,0.80657,0.53536,0.80657,0.53536,0.80657,0.53536,0.80657,0.53536,0.80657,0.53536,0.80657,0.53536,0.80657,0.53536,0.80657,0.53536,0.80657,0,0,0,0,0,0,0.46845,0.70573,0.46845,0.70573,0.46845,0.70573,0.46845,0.70573,0.46845,0.70573,0.46845,0.70573,0.46845,0.70573,0.46845,0.70573,0.46845,0.70573,0.46845,0.70573,0.46845,0.70573,0.46845,0.70573,0,0,-0.35559,-0.42827,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448],"curve":[0.25,0,0.75,1]},{"time":1.2,"offset":60,"vertices":[0.15199,0.3362],"curve":[0.25,0,0.75,1]},{"time":1.8,"offset":4,"vertices":[0.53536,0.80657,0.53536,0.80657,0.53536,0.80657,0.53536,0.80657,0.53536,0.80657,0.53536,0.80657,0.53536,0.80657,0.53536,0.80657,0.53536,0.80657,0.53536,0.80657,0.53536,0.80657,0.53536,0.80657,0,0,0,0,0,0,0.46845,0.70573,0.46845,0.70573,0.46845,0.70573,0.46845,0.70573,0.46845,0.70573,0.46845,0.70573,0.46845,0.70573,0.46845,0.70573,0.46845,0.70573,0.46845,0.70573,0.46845,0.70573,0.46845,0.70573,0,0,-0.35559,-0.42827,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448,-0.50759,-0.76448],"curve":[0.25,0,0.75,1]},{"time":2.4,"offset":60,"vertices":[0.15199,0.3362]}]},"body":{"body":[{"time":0,"offset":636,"vertices":[5.08093,-2.67419,5.20492,-2.42404,3.55101,-4.51206,5.59074,0.68833,5.5506,0.95951,5.38627,-1.64891,0,0,0,0,0,0,4.00639,-0.10517,3.52786,-1.90187,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.05041,0.82949,0.16467,0.81451,0.56505,0.60929],"curve":[0.25,0,0.75,1]},{"time":0.6,"vertices":[-1.30197,-4.27799,-1.12479,4.32795,1.04008,4.34904,2.12389,3.93524,3.86359,2.25114,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1.53919,4.29223,0.65749,4.5121,-2.13786,3.48919,-0.24821,4.08433,-2.13786,3.48919,-0.24821,4.08433,-0.24821,4.08433,-2.13786,3.48919,-0.24821,4.08433,0.81092,4.01103,-2.13786,3.48919,0.81092,4.01103,-2.13786,3.48919,0.81092,4.01103,2.78244,3.00001,0.81092,4.01103,2.78244,3.00001,0.81092,4.01103,2.78244,3.00001,2.78244,3.00001,2.78244,3.00001,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.28206,4.64135,0.92146,4.55789,3.1619,3.40925,-0.28206,4.64135,0.92146,4.55789,3.1619,3.40925,-0.28206,4.64135,0.92146,4.55789,3.1619,3.40925,-0.28206,4.64135,0.92146,4.55789,3.1619,3.40925,-0.28206,4.64135,0.92146,4.55789,3.1619,3.40925,0,-4.64999,-2.42933,3.96498,-0.28206,4.64135,0.92146,4.55789,3.1619,3.40925,0,-4.64999,-2.42933,3.96498,-0.28206,4.64135,0.92146,4.55789,3.1619,3.40925,0,-4.64999,-2.42933,3.96498,-0.28206,4.64135,0.92146,4.55789,3.1619,3.40925,0,-4.64999,-2.42933,3.96498,-0.28206,4.64135,0.92146,4.55789,3.1619,3.40925,0,-4.64999,-2.42933,3.96498,-0.28206,4.64135,0.92146,4.55789,3.1619,3.40925,0,-4.64999,-2.42933,3.96498,-0.28206,4.64135,0.92146,4.55789,3.1619,3.40925,0,-4.64999,-2.42933,3.96498,-0.28206,4.64135,0.92146,4.55789,3.1619,3.40925,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,2.05438,-3.39929,-0.01927,-3.97314,-0.01927,-3.97314,2.05438,-3.39929,-0.01927,-3.97314,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,3.77587,-2.70207,2.95422,-3.58117,0.65382,-4.59764,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,-0.01927,-3.97314,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,2.80913,-1.92802,2.21906,-2.58477,0.54577,-3.36384,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,2.05438,-3.39929,-2.68695,2.92501,3.81861,-1.09034,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,-2.68695,2.92501,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,2.05438,-3.39929,-2.68695,2.92501,3.81861,-1.09034,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,2.85954,-2.75752,2.05438,-3.39929,-2.68695,2.92501,3.81861,-1.09034,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,2.85954,-2.75752,-2.68695,2.92501,3.81861,-1.09034,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,3.81861,-1.09034,2.85954,-2.75752,0,0,0,0,0,0,0,0,3.81861,-1.09034,3.81861,-1.09034,-2.68695,2.92501,3.81861,-1.09034,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,2.85954,-2.75752,2.05438,-3.39929,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-2.68695,2.92501,3.81861,-1.09034,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,-2.68695,2.92501,3.81861,-1.09034,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,-2.68695,2.92501,3.81861,-1.09034,2.85954,-2.75752,2.05438,-3.39929],"curve":[0.25,0,0.75,1]},{"time":1.2,"offset":636,"vertices":[5.08093,-2.67419,5.20492,-2.42404,3.55101,-4.51206,5.59074,0.68833,5.5506,0.95951,5.38627,-1.64891,0,0,0,0,0,0,4.00639,-0.10517,3.52786,-1.90187,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.05041,0.82949,0.16467,0.81451,0.56505,0.60929],"curve":[0.25,0,0.75,1]},{"time":1.8,"vertices":[-1.30197,-4.27799,-1.12479,4.32795,1.04008,4.34904,2.12389,3.93524,3.86359,2.25114,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1.53919,4.29223,0.65749,4.5121,-2.13786,3.48919,-0.24821,4.08433,-2.13786,3.48919,-0.24821,4.08433,-0.24821,4.08433,-2.13786,3.48919,-0.24821,4.08433,0.81092,4.01103,-2.13786,3.48919,0.81092,4.01103,-2.13786,3.48919,0.81092,4.01103,2.78244,3.00001,0.81092,4.01103,2.78244,3.00001,0.81092,4.01103,2.78244,3.00001,2.78244,3.00001,2.78244,3.00001,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.28206,4.64135,0.92146,4.55789,3.1619,3.40925,-0.28206,4.64135,0.92146,4.55789,3.1619,3.40925,-0.28206,4.64135,0.92146,4.55789,3.1619,3.40925,-0.28206,4.64135,0.92146,4.55789,3.1619,3.40925,-0.28206,4.64135,0.92146,4.55789,3.1619,3.40925,0,-4.64999,-2.42933,3.96498,-0.28206,4.64135,0.92146,4.55789,3.1619,3.40925,0,-4.64999,-2.42933,3.96498,-0.28206,4.64135,0.92146,4.55789,3.1619,3.40925,0,-4.64999,-2.42933,3.96498,-0.28206,4.64135,0.92146,4.55789,3.1619,3.40925,0,-4.64999,-2.42933,3.96498,-0.28206,4.64135,0.92146,4.55789,3.1619,3.40925,0,-4.64999,-2.42933,3.96498,-0.28206,4.64135,0.92146,4.55789,3.1619,3.40925,0,-4.64999,-2.42933,3.96498,-0.28206,4.64135,0.92146,4.55789,3.1619,3.40925,0,-4.64999,-2.42933,3.96498,-0.28206,4.64135,0.92146,4.55789,3.1619,3.40925,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,2.05438,-3.39929,-0.01927,-3.97314,-0.01927,-3.97314,2.05438,-3.39929,-0.01927,-3.97314,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,-0.01927,-3.97314,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,2.80913,-1.92802,2.21906,-2.58477,0.54577,-3.36384,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,2.05438,-3.39929,-2.68695,2.92501,3.81861,-1.09034,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,-2.68695,2.92501,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,2.05438,-3.39929,-2.68695,2.92501,3.81861,-1.09034,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,2.85954,-2.75752,2.05438,-3.39929,-2.68695,2.92501,3.81861,-1.09034,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,2.85954,-2.75752,-2.68695,2.92501,3.81861,-1.09034,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,3.81861,-1.09034,2.85954,-2.75752,0,0,0,0,0,0,0,0,3.81861,-1.09034,3.81861,-1.09034,-2.68695,2.92501,3.81861,-1.09034,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,2.85954,-2.75752,2.05438,-3.39929,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-2.68695,2.92501,3.81861,-1.09034,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,-2.68695,2.92501,3.81861,-1.09034,2.85954,-2.75752,2.05438,-3.39929,-0.01927,-3.97314,-2.68695,2.92501,3.81861,-1.09034,2.85954,-2.75752,2.05438,-3.39929],"curve":[0.25,0,0.75,1]},{"time":2.4,"offset":636,"vertices":[5.08093,-2.67419,5.20492,-2.42404,3.55101,-4.51206,5.59074,0.68833,5.5506,0.95951,5.38627,-1.64891,0,0,0,0,0,0,4.00639,-0.10517,3.52786,-1.90187,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.05041,0.82949,0.16467,0.81451,0.56505,0.60929]}]},"head":{"head":[{"time":0,"offset":54,"vertices":[-0.15592,-0.31564]},{"time":0.6,"offset":12,"vertices":[0.48139,1.5397,0.48139,1.5397,0.48139,1.5397,0.48139,1.5397,0,0,0,0,-0.23086,1.4243,-0.23086,1.4243,-0.23086,1.4243,-0.23086,1.4243,-0.23086,1.4243,-0.23086,1.4243,-0.23086,1.4243,-0.23086,1.4243,-0.23086,1.4243,-0.23086,1.4243,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726],"curve":[0.25,0,0.75,1]},{"time":1.2,"offset":54,"vertices":[-0.15592,-0.31564]},{"time":1.8,"offset":12,"vertices":[0.48139,1.5397,0.48139,1.5397,0.48139,1.5397,0.48139,1.5397,0,0,0,0,-0.23086,1.4243,-0.23086,1.4243,-0.23086,1.4243,-0.23086,1.4243,-0.23086,1.4243,-0.23086,1.4243,-0.23086,1.4243,-0.23086,1.4243,-0.23086,1.4243,-0.23086,1.4243,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726,0.25372,-1.80726],"curve":[0.25,0,0.75,1]},{"time":2.4,"offset":54,"vertices":[-0.15592,-0.31564]}]},"leg_f":{"leg_f":[{"time":0,"offset":10,"vertices":[-0.87511,-0.39469],"curve":[0.25,0,0.75,1]},{"time":0.6,"offset":6,"vertices":[9.36444,0.16975,11.73327,6.32648,6.76928,10.00458,-0.7712,10.66446,-4.35842,9.52351,-3.83512,7.19914,-4.94848,3.11003,-2.83253,3.1989,-2.70403,0.41232,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1.32538,-1.07076,6.23561,6.9762,0,0,0,0,0,0,-0.7809,-0.76636,-2.51425,3.02777,-1.5044,7.735,4.90491,1.4148,-1.78739,-0.83423,-1.70853,-0.68025],"curve":[0.25,0,0.75,1]},{"time":1.2,"offset":10,"vertices":[-0.87511,-0.39469],"curve":[0.25,0,0.75,1]},{"time":1.8,"offset":6,"vertices":[9.36444,0.16975,11.73327,6.32648,6.76928,10.00458,-0.7712,10.66446,-4.35842,9.52351,-3.83512,7.19914,-4.94848,3.11003,-2.83253,3.1989,-2.70403,0.41232,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1.32538,-1.07076,6.23561,6.9762,0,0,0,0,0,0,-0.7809,-0.76636,-2.51425,3.02777,-1.5044,7.735,4.90491,1.4148,-1.78739,-0.83423,-1.70853,-0.68025],"curve":[0.25,0,0.75,1]},{"time":2.4,"offset":10,"vertices":[-0.87511,-0.39469]}]}}}}}} \ No newline at end of file diff --git a/src/main/resources/awakenedResources/images/mainChar/bronze.png b/src/main/resources/awakenedResources/images/mainChar/bronze.png new file mode 100644 index 000000000..f794d04d5 Binary files /dev/null and b/src/main/resources/awakenedResources/images/mainChar/bronze.png differ diff --git a/src/main/resources/awakenedResources/images/mainChar/corpse.png b/src/main/resources/awakenedResources/images/mainChar/corpse.png new file mode 100644 index 000000000..f4780b243 Binary files /dev/null and b/src/main/resources/awakenedResources/images/mainChar/corpse.png differ diff --git a/src/main/resources/awakenedResources/images/mainChar/orb/layer1.png b/src/main/resources/awakenedResources/images/mainChar/orb/layer1.png new file mode 100644 index 000000000..f1d4cd8c1 Binary files /dev/null and b/src/main/resources/awakenedResources/images/mainChar/orb/layer1.png differ diff --git a/src/main/resources/awakenedResources/images/mainChar/orb/layer1d.png b/src/main/resources/awakenedResources/images/mainChar/orb/layer1d.png new file mode 100644 index 000000000..c48d7817f Binary files /dev/null and b/src/main/resources/awakenedResources/images/mainChar/orb/layer1d.png differ diff --git a/src/main/resources/awakenedResources/images/mainChar/orb/layer2.png b/src/main/resources/awakenedResources/images/mainChar/orb/layer2.png new file mode 100644 index 000000000..08dd905cb Binary files /dev/null and b/src/main/resources/awakenedResources/images/mainChar/orb/layer2.png differ diff --git a/src/main/resources/awakenedResources/images/mainChar/orb/layer2d.png b/src/main/resources/awakenedResources/images/mainChar/orb/layer2d.png new file mode 100644 index 000000000..283537b0b Binary files /dev/null and b/src/main/resources/awakenedResources/images/mainChar/orb/layer2d.png differ diff --git a/src/main/resources/awakenedResources/images/mainChar/orb/layer3.png b/src/main/resources/awakenedResources/images/mainChar/orb/layer3.png new file mode 100644 index 000000000..c77cf1d5c Binary files /dev/null and b/src/main/resources/awakenedResources/images/mainChar/orb/layer3.png differ diff --git a/src/main/resources/awakenedResources/images/mainChar/orb/layer3d.png b/src/main/resources/awakenedResources/images/mainChar/orb/layer3d.png new file mode 100644 index 000000000..2da003a41 Binary files /dev/null and b/src/main/resources/awakenedResources/images/mainChar/orb/layer3d.png differ diff --git a/src/main/resources/awakenedResources/images/mainChar/orb/layer4.png b/src/main/resources/awakenedResources/images/mainChar/orb/layer4.png new file mode 100644 index 000000000..6b9a8129e Binary files /dev/null and b/src/main/resources/awakenedResources/images/mainChar/orb/layer4.png differ diff --git a/src/main/resources/awakenedResources/images/mainChar/orb/layer4d.png b/src/main/resources/awakenedResources/images/mainChar/orb/layer4d.png new file mode 100644 index 000000000..368bca885 Binary files /dev/null and b/src/main/resources/awakenedResources/images/mainChar/orb/layer4d.png differ diff --git a/src/main/resources/awakenedResources/images/mainChar/orb/layer5.png b/src/main/resources/awakenedResources/images/mainChar/orb/layer5.png new file mode 100644 index 000000000..589d7fd59 Binary files /dev/null and b/src/main/resources/awakenedResources/images/mainChar/orb/layer5.png differ diff --git a/src/main/resources/awakenedResources/images/mainChar/orb/layer5d.png b/src/main/resources/awakenedResources/images/mainChar/orb/layer5d.png new file mode 100644 index 000000000..f41be7385 Binary files /dev/null and b/src/main/resources/awakenedResources/images/mainChar/orb/layer5d.png differ diff --git a/src/main/resources/awakenedResources/images/mainChar/orb/layer6.png b/src/main/resources/awakenedResources/images/mainChar/orb/layer6.png new file mode 100644 index 000000000..5e7c78371 Binary files /dev/null and b/src/main/resources/awakenedResources/images/mainChar/orb/layer6.png differ diff --git a/src/main/resources/awakenedResources/images/mainChar/orb/vfx.png b/src/main/resources/awakenedResources/images/mainChar/orb/vfx.png new file mode 100644 index 000000000..273ed14c7 Binary files /dev/null and b/src/main/resources/awakenedResources/images/mainChar/orb/vfx.png differ diff --git a/src/main/resources/awakenedResources/images/mainChar/shoulder.png b/src/main/resources/awakenedResources/images/mainChar/shoulder.png new file mode 100644 index 000000000..066cdf4fe Binary files /dev/null and b/src/main/resources/awakenedResources/images/mainChar/shoulder.png differ diff --git a/src/main/resources/awakenedResources/images/mainChar/shoulderB.png b/src/main/resources/awakenedResources/images/mainChar/shoulderB.png new file mode 100644 index 000000000..a5a1f0861 Binary files /dev/null and b/src/main/resources/awakenedResources/images/mainChar/shoulderB.png differ diff --git a/src/main/resources/awakenedResources/images/mainChar/shoulderG.png b/src/main/resources/awakenedResources/images/mainChar/shoulderG.png new file mode 100644 index 000000000..2c100d27e Binary files /dev/null and b/src/main/resources/awakenedResources/images/mainChar/shoulderG.png differ diff --git a/src/main/resources/awakenedResources/images/mainChar/shoulderR.png b/src/main/resources/awakenedResources/images/mainChar/shoulderR.png new file mode 100644 index 000000000..dd291f380 Binary files /dev/null and b/src/main/resources/awakenedResources/images/mainChar/shoulderR.png differ diff --git a/src/main/resources/awakenedResources/images/mainChar/static_character.scml b/src/main/resources/awakenedResources/images/mainChar/static_character.scml new file mode 100644 index 000000000..6c08cfc94 --- /dev/null +++ b/src/main/resources/awakenedResources/images/mainChar/static_character.scml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/awakenedResources/images/powers/DarknessFallsPower32.png b/src/main/resources/awakenedResources/images/powers/DarknessFallsPower32.png new file mode 100644 index 000000000..07d6a8546 Binary files /dev/null and b/src/main/resources/awakenedResources/images/powers/DarknessFallsPower32.png differ diff --git a/src/main/resources/awakenedResources/images/powers/DarknessFallsPower84.png b/src/main/resources/awakenedResources/images/powers/DarknessFallsPower84.png new file mode 100644 index 000000000..9975500ce Binary files /dev/null and b/src/main/resources/awakenedResources/images/powers/DarknessFallsPower84.png differ diff --git a/src/main/resources/awakenedResources/images/relics/AbyssBlade.png b/src/main/resources/awakenedResources/images/relics/AbyssBlade.png new file mode 100644 index 000000000..dc25accb6 Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/AbyssBlade.png differ diff --git a/src/main/resources/awakenedResources/images/relics/Barbell.png b/src/main/resources/awakenedResources/images/relics/Barbell.png new file mode 100644 index 000000000..12f38f960 Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/Barbell.png differ diff --git a/src/main/resources/awakenedResources/images/relics/Barbell_Large.png b/src/main/resources/awakenedResources/images/relics/Barbell_Large.png new file mode 100644 index 000000000..6bf4eb565 Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/Barbell_Large.png differ diff --git a/src/main/resources/awakenedResources/images/relics/CawingCask.png b/src/main/resources/awakenedResources/images/relics/CawingCask.png new file mode 100644 index 000000000..cb2ccd402 Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/CawingCask.png differ diff --git a/src/main/resources/awakenedResources/images/relics/CursedBlessing.png b/src/main/resources/awakenedResources/images/relics/CursedBlessing.png new file mode 100644 index 000000000..c9ff1b117 Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/CursedBlessing.png differ diff --git a/src/main/resources/awakenedResources/images/relics/CurvedSword.png b/src/main/resources/awakenedResources/images/relics/CurvedSword.png new file mode 100644 index 000000000..011039b36 Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/CurvedSword.png differ diff --git a/src/main/resources/awakenedResources/images/relics/DeadBird.png b/src/main/resources/awakenedResources/images/relics/DeadBird.png new file mode 100644 index 000000000..2d2f7987b Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/DeadBird.png differ diff --git a/src/main/resources/awakenedResources/images/relics/EyeOfTheOccult.png b/src/main/resources/awakenedResources/images/relics/EyeOfTheOccult.png new file mode 100644 index 000000000..bd41d4190 Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/EyeOfTheOccult.png differ diff --git a/src/main/resources/awakenedResources/images/relics/HexxBomb.png b/src/main/resources/awakenedResources/images/relics/HexxBomb.png new file mode 100644 index 000000000..6b6d26b08 Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/HexxBomb.png differ diff --git a/src/main/resources/awakenedResources/images/relics/MiniBlackHole.png b/src/main/resources/awakenedResources/images/relics/MiniBlackHole.png new file mode 100644 index 000000000..e78c9c1f5 Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/MiniBlackHole.png differ diff --git a/src/main/resources/awakenedResources/images/relics/MoonTalisman.png b/src/main/resources/awakenedResources/images/relics/MoonTalisman.png new file mode 100644 index 000000000..24df49e48 Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/MoonTalisman.png differ diff --git a/src/main/resources/awakenedResources/images/relics/RippedDoll.png b/src/main/resources/awakenedResources/images/relics/RippedDoll.png new file mode 100644 index 000000000..be22ad26a Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/RippedDoll.png differ diff --git a/src/main/resources/awakenedResources/images/relics/ShardOfNowak.png b/src/main/resources/awakenedResources/images/relics/ShardOfNowak.png new file mode 100644 index 000000000..c7ed69059 Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/ShardOfNowak.png differ diff --git a/src/main/resources/awakenedResources/images/relics/ShreddedDoll.png b/src/main/resources/awakenedResources/images/relics/ShreddedDoll.png new file mode 100644 index 000000000..cabb0964f Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/ShreddedDoll.png differ diff --git a/src/main/resources/awakenedResources/images/relics/StrengthBooster.png b/src/main/resources/awakenedResources/images/relics/StrengthBooster.png new file mode 100644 index 000000000..1de79638f Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/StrengthBooster.png differ diff --git a/src/main/resources/awakenedResources/images/relics/TomeOfPortalmancy.png b/src/main/resources/awakenedResources/images/relics/TomeOfPortalmancy.png new file mode 100644 index 000000000..a743c72e7 Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/TomeOfPortalmancy.png differ diff --git a/src/main/resources/awakenedResources/images/relics/VioletPlumage.png b/src/main/resources/awakenedResources/images/relics/VioletPlumage.png new file mode 100644 index 000000000..1d99a5960 Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/VioletPlumage.png differ diff --git a/src/main/resources/awakenedResources/images/relics/WhiteRibbon.png b/src/main/resources/awakenedResources/images/relics/WhiteRibbon.png new file mode 100644 index 000000000..5e9c57319 Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/WhiteRibbon.png differ diff --git a/src/main/resources/awakenedResources/images/relics/ZenerDeck.png b/src/main/resources/awakenedResources/images/relics/ZenerDeck.png new file mode 100644 index 000000000..2bf102e65 Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/ZenerDeck.png differ diff --git a/src/main/resources/awakenedResources/images/relics/outline/AbyssBlade.png b/src/main/resources/awakenedResources/images/relics/outline/AbyssBlade.png new file mode 100644 index 000000000..a922f9b58 Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/outline/AbyssBlade.png differ diff --git a/src/main/resources/awakenedResources/images/relics/outline/Barbell.png b/src/main/resources/awakenedResources/images/relics/outline/Barbell.png new file mode 100644 index 000000000..5c8544f5e Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/outline/Barbell.png differ diff --git a/src/main/resources/awakenedResources/images/relics/outline/CawingCask.png b/src/main/resources/awakenedResources/images/relics/outline/CawingCask.png new file mode 100644 index 000000000..adc6e4175 Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/outline/CawingCask.png differ diff --git a/src/main/resources/awakenedResources/images/relics/outline/CursedBlessing.png b/src/main/resources/awakenedResources/images/relics/outline/CursedBlessing.png new file mode 100644 index 000000000..8779aa55b Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/outline/CursedBlessing.png differ diff --git a/src/main/resources/awakenedResources/images/relics/outline/CurvedSword.png b/src/main/resources/awakenedResources/images/relics/outline/CurvedSword.png new file mode 100644 index 000000000..16ac63519 Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/outline/CurvedSword.png differ diff --git a/src/main/resources/awakenedResources/images/relics/outline/DeadBird.png b/src/main/resources/awakenedResources/images/relics/outline/DeadBird.png new file mode 100644 index 000000000..bfccf62c8 Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/outline/DeadBird.png differ diff --git a/src/main/resources/awakenedResources/images/relics/outline/EyeOfTheOccult.png b/src/main/resources/awakenedResources/images/relics/outline/EyeOfTheOccult.png new file mode 100644 index 000000000..3eb1f75cd Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/outline/EyeOfTheOccult.png differ diff --git a/src/main/resources/awakenedResources/images/relics/outline/HexxBomb.png b/src/main/resources/awakenedResources/images/relics/outline/HexxBomb.png new file mode 100644 index 000000000..991ad7fd8 Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/outline/HexxBomb.png differ diff --git a/src/main/resources/awakenedResources/images/relics/outline/MiniBlackHole.png b/src/main/resources/awakenedResources/images/relics/outline/MiniBlackHole.png new file mode 100644 index 000000000..2bce5c848 Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/outline/MiniBlackHole.png differ diff --git a/src/main/resources/awakenedResources/images/relics/outline/MoonTalisman.png b/src/main/resources/awakenedResources/images/relics/outline/MoonTalisman.png new file mode 100644 index 000000000..4e7c4b40f Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/outline/MoonTalisman.png differ diff --git a/src/main/resources/awakenedResources/images/relics/outline/RippedDoll.png b/src/main/resources/awakenedResources/images/relics/outline/RippedDoll.png new file mode 100644 index 000000000..94085aeff Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/outline/RippedDoll.png differ diff --git a/src/main/resources/awakenedResources/images/relics/outline/ShardOfNowak.png b/src/main/resources/awakenedResources/images/relics/outline/ShardOfNowak.png new file mode 100644 index 000000000..610efe409 Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/outline/ShardOfNowak.png differ diff --git a/src/main/resources/awakenedResources/images/relics/outline/ShreddedDoll.png b/src/main/resources/awakenedResources/images/relics/outline/ShreddedDoll.png new file mode 100644 index 000000000..e00a12110 Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/outline/ShreddedDoll.png differ diff --git a/src/main/resources/awakenedResources/images/relics/outline/StrengthBooster.png b/src/main/resources/awakenedResources/images/relics/outline/StrengthBooster.png new file mode 100644 index 000000000..82e1ca4e1 Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/outline/StrengthBooster.png differ diff --git a/src/main/resources/awakenedResources/images/relics/outline/TomeOfPortalmancy.png b/src/main/resources/awakenedResources/images/relics/outline/TomeOfPortalmancy.png new file mode 100644 index 000000000..dd135dd8a Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/outline/TomeOfPortalmancy.png differ diff --git a/src/main/resources/awakenedResources/images/relics/outline/VioletPlumage.png b/src/main/resources/awakenedResources/images/relics/outline/VioletPlumage.png new file mode 100644 index 000000000..ac2615dda Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/outline/VioletPlumage.png differ diff --git a/src/main/resources/awakenedResources/images/relics/outline/WhiteRibbon.png b/src/main/resources/awakenedResources/images/relics/outline/WhiteRibbon.png new file mode 100644 index 000000000..c84584233 Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/outline/WhiteRibbon.png differ diff --git a/src/main/resources/awakenedResources/images/relics/outline/ZenerDeck.png b/src/main/resources/awakenedResources/images/relics/outline/ZenerDeck.png new file mode 100644 index 000000000..fa42adf93 Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/outline/ZenerDeck.png differ diff --git a/src/main/resources/awakenedResources/images/relics/outline/awakenedCore.png b/src/main/resources/awakenedResources/images/relics/outline/awakenedCore.png new file mode 100644 index 000000000..5c8544f5e Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/outline/awakenedCore.png differ diff --git a/src/main/resources/awakenedResources/images/ui/AphoticShield.png b/src/main/resources/awakenedResources/images/ui/AphoticShield.png new file mode 100644 index 000000000..92d8bc70d Binary files /dev/null and b/src/main/resources/awakenedResources/images/ui/AphoticShield.png differ diff --git a/src/main/resources/awakenedResources/images/ui/AwesomeIcon.png b/src/main/resources/awakenedResources/images/ui/AwesomeIcon.png new file mode 100644 index 000000000..b1e922e48 Binary files /dev/null and b/src/main/resources/awakenedResources/images/ui/AwesomeIcon.png differ diff --git a/src/main/resources/awakenedResources/images/ui/BecomeAwesomeButton.png b/src/main/resources/awakenedResources/images/ui/BecomeAwesomeButton.png new file mode 100644 index 000000000..36fc32441 Binary files /dev/null and b/src/main/resources/awakenedResources/images/ui/BecomeAwesomeButton.png differ diff --git a/src/main/resources/awakenedResources/images/ui/BecomeAwesomeButton_hovered.png b/src/main/resources/awakenedResources/images/ui/BecomeAwesomeButton_hovered.png new file mode 100644 index 000000000..7f40fb3e4 Binary files /dev/null and b/src/main/resources/awakenedResources/images/ui/BecomeAwesomeButton_hovered.png differ diff --git a/src/main/resources/awakenedResources/images/ui/BurningStudy.png b/src/main/resources/awakenedResources/images/ui/BurningStudy.png new file mode 100644 index 000000000..cb62228c4 Binary files /dev/null and b/src/main/resources/awakenedResources/images/ui/BurningStudy.png differ diff --git a/src/main/resources/awakenedResources/images/ui/Cryostasis.png b/src/main/resources/awakenedResources/images/ui/Cryostasis.png new file mode 100644 index 000000000..c3da96872 Binary files /dev/null and b/src/main/resources/awakenedResources/images/ui/Cryostasis.png differ diff --git a/src/main/resources/awakenedResources/images/ui/Darkleech.png b/src/main/resources/awakenedResources/images/ui/Darkleech.png new file mode 100644 index 000000000..2b915b89d Binary files /dev/null and b/src/main/resources/awakenedResources/images/ui/Darkleech.png differ diff --git a/src/main/resources/awakenedResources/images/ui/Deathcoil.png b/src/main/resources/awakenedResources/images/ui/Deathcoil.png new file mode 100644 index 000000000..8263f3270 Binary files /dev/null and b/src/main/resources/awakenedResources/images/ui/Deathcoil.png differ diff --git a/src/main/resources/awakenedResources/images/ui/ESPSpell.png b/src/main/resources/awakenedResources/images/ui/ESPSpell.png new file mode 100644 index 000000000..550983ae5 Binary files /dev/null and b/src/main/resources/awakenedResources/images/ui/ESPSpell.png differ diff --git a/src/main/resources/awakenedResources/images/ui/Grimoire.png b/src/main/resources/awakenedResources/images/ui/Grimoire.png new file mode 100644 index 000000000..e18622ef6 Binary files /dev/null and b/src/main/resources/awakenedResources/images/ui/Grimoire.png differ diff --git a/src/main/resources/awakenedResources/images/ui/Thunderbolt.png b/src/main/resources/awakenedResources/images/ui/Thunderbolt.png new file mode 100644 index 000000000..c3565f8e4 Binary files /dev/null and b/src/main/resources/awakenedResources/images/ui/Thunderbolt.png differ diff --git a/src/main/resources/awakenedResources/images/ui/defaultSpell.png b/src/main/resources/awakenedResources/images/ui/defaultSpell.png new file mode 100644 index 000000000..8e1d83b3e Binary files /dev/null and b/src/main/resources/awakenedResources/images/ui/defaultSpell.png differ diff --git a/src/main/resources/awakenedResources/images/ui/missing.png b/src/main/resources/awakenedResources/images/ui/missing.png new file mode 100644 index 000000000..12f38f960 Binary files /dev/null and b/src/main/resources/awakenedResources/images/ui/missing.png differ diff --git a/src/main/resources/awakenedResources/images/ui/pip_complete.png b/src/main/resources/awakenedResources/images/ui/pip_complete.png new file mode 100644 index 000000000..71145dde6 Binary files /dev/null and b/src/main/resources/awakenedResources/images/ui/pip_complete.png differ diff --git a/src/main/resources/awakenedResources/images/ui/pip_filled.png b/src/main/resources/awakenedResources/images/ui/pip_filled.png new file mode 100644 index 000000000..e2b21354c Binary files /dev/null and b/src/main/resources/awakenedResources/images/ui/pip_filled.png differ diff --git a/src/main/resources/awakenedResources/images/ui/pip_unfilled.png b/src/main/resources/awakenedResources/images/ui/pip_unfilled.png new file mode 100644 index 000000000..1c5a10391 Binary files /dev/null and b/src/main/resources/awakenedResources/images/ui/pip_unfilled.png differ diff --git a/src/main/resources/awakenedResources/localization/eng/CardStrings.json b/src/main/resources/awakenedResources/localization/eng/CardStrings.json new file mode 100644 index 000000000..fcb765bff --- /dev/null +++ b/src/main/resources/awakenedResources/localization/eng/CardStrings.json @@ -0,0 +1,372 @@ +{ + "awakened:Thunderbolt": { + "NAME": "Thunderbolt", + "DESCRIPTION": "Retain. NL Deal !D! damage. NL Exhaust.", + "UPGRADE_DESCRIPTION": "Retain. NL Deal !D! damage twice. NL Exhaust." + }, + "awakened:BurningStudy": { + "NAME": "Burning Study", + "DESCRIPTION": "Retain. NL Gain !M! Strength." + }, + "awakened:Cryostasis": { + "NAME": "Cryostasis", + "DESCRIPTION": "Retain. NL Gain !B! Block. NL Apply !M! Weak. NL Exhaust." + }, + "awakened:Darkleech": { + "NAME": "Darkleech", + "DESCRIPTION": "Retain. NL Apply !M! Vulnerable. NL Exhaust." + }, + "awakened:DeathCoil": { + "NAME": "Deathcoil", + "DESCRIPTION": "Deal !D! damage. NL Apply !M! awakened:Manaburn. NL Next turn, lose [E]." + }, + "awakened:AphoticShield": { + "NAME": "Aphotic Shield", + "DESCRIPTION": "Retain. NL Gain !M! expansioncontent:Plated *Armor. NL Exhaust.", + "UPGRADE_DESCRIPTION": "Retain. NL At the end of each of your turns, gain !M! Block. NL Exhaust." + }, + "awakened:ESPSpell": { + "NAME": "ESP", + "DESCRIPTION": "Retain. NL Draw !M! card. NL Exhaust.", + "UPGRADE_DESCRIPTION": "Retain. NL Draw !M! cards. NL Exhaust." + }, + "awakened:Strike": { + "NAME": "Strike", + "DESCRIPTION": "Deal !D! damage." + }, + "awakened:Defend": { + "NAME": "Defend", + "DESCRIPTION": "Gain !B! Block." + }, + "awakened:MagicStrike": { + "NAME": "Magic Strike", + "DESCRIPTION": "Deal !D! damage. NL Add a *Void into your discard pile." + }, + "awakened:Intensify": { + "NAME": "Intensify", + "DESCRIPTION": "awakened:Conjure. NL This turn, Spells cost 0 and you cannot awakened:Conjure again.", + "UPGRADE_DESCRIPTION": "Retain. awakened:Conjure. NL This turn, Spells cost 0 and you cannot awakened:Conjure again." + }, + "awakened:DarkEcho": { + "NAME": "Dark Echo", + "DESCRIPTION": "At the end of your turn, deal !D! damage to ALL enemies, increased by Strength." + }, + "awakened:AwakenedForm": { + "NAME": "Awakened Form", + "DESCRIPTION": "Whenever you play a Power, gain !awakened:m2! Strength. NL At the end of your turn, lose !M! Strength." + }, + "awakened:Spellbinder": { + "NAME": "Spellbinder", + "DESCRIPTION": "At the start of your turn, awakened:Conjure.", + "UPGRADE_DESCRIPTION": "Innate. NL At the start of your turn, awakened:Conjure." + }, + "awakened:Ceremony": { + "NAME": "Ceremony", + "DESCRIPTION": "Ethereal. NL Gain !M! Strength.", + "UPGRADE_DESCRIPTION": "Retain. NL Gain !M! Strength." + }, + "awakened:TalonRake": { + "NAME": "Talon Rake", + "DESCRIPTION": "Deal !D! damage twice. NL awakened:Conjure." + }, + "awakened:Hymn": { + "NAME": "Hymn", + "DESCRIPTION": "Gain !B! Block. NL Gain a *Ceremony. NL Next turn, lose [E].", + "UPGRADE_DESCRIPTION": "Gain !B! Block. NL Gain a *Ceremony+. NL Next turn, lose [E]." + }, + "awakened:Psalm": { + "NAME": "Psalm", + "DESCRIPTION": "Deal !D! damage and apply !M! Weak to ALL enemies." + }, + "awakened:DemonGlyph": { + "NAME": "Demon Glyph", + "DESCRIPTION": "Gain !M! Strength and Dexterity. NL When you awakened:Awaken, gain !awakened:m2! more." + }, + "awakened:TakeFlight": { + "NAME": "Take Flight", + "DESCRIPTION": "Gain !B! Block. NL awakened:Chant: Block is not removed at the start of your next turn." + }, + "awakened:FeatherVeil": { + "NAME": "Feather Veil", + "DESCRIPTION": "Gain !B! Block. NL Lose !M! Strength." + }, + "awakened:Peck": { + "NAME": "Peck", + "DESCRIPTION": "Gain !B! Block. NL Deal !D! damage. NL Draw !M! card.", + "UPGRADE_DESCRIPTION": "Gain !B! Block. NL Deal !D! damage. NL Draw !M! cards." + }, + "awakened:Extension": { + "NAME": "Extension", + "DESCRIPTION": "Deal !D! damage. NL Whenever you play a Power, return this card from the discard pile to your hand." + }, + "awakened:Pluck": { + "NAME": "Pluck", + "DESCRIPTION": "Deal !D! damage to ALL enemies. NL awakened:Conjure." + }, + "awakened:FlareShot": { + "NAME": "Feather Flare", + "DESCRIPTION": "Deal !D! damage. NL This turn, whenever you play a non-Attack card, ALL enemies lose !M! HP." + }, + "awakened:ClarionCall": { + "NAME": "Clarion Call", + "DESCRIPTION": "Deal !D! damage. NL The next time you are awakened:Drained, gain [E]." + }, + "awakened:Recitation": { + "NAME": "Recitation", + "DESCRIPTION": "Deal !D! damage. NL awakened:Chant: Deal !D! damage again." + }, + "awakened:ChosenVerse": { + "NAME": "Chosen Verse", + "DESCRIPTION": "The next !M! times you play a non-Attack card this turn, draw a card and gain !B! Block." + }, + "awakened:SoulStrike": { + "NAME": "Soul Strike", + "DESCRIPTION": "Deal !D! damage !M! times. NL Costs 1 less [E] for each Power played this turn." + }, + "awakened:Altar": { + "NAME": "Altar", + "DESCRIPTION": "Gain !B! Block. NL Exhaust 1 card. NL awakened:Conjure." + }, + "awakened:Envision": { + "NAME": "Envision", + "DESCRIPTION": "Gain !B! Block. NL awakened:Conjure and put the Spell on top of your draw pile." + }, + "awakened:Thaumaturgy": { + "NAME": "Thaumaturgy", + "DESCRIPTION": "Gain 1 Dexterity. NL At the start of your next !M! turns, add a *Ceremony into your hand." + }, + "awakened:WaveOfMiasma": { + "NAME": "Wave of Miasma", + "DESCRIPTION": "Apply !M! Weak and !awakened:m2! awakened:Manaburn to ALL enemies. NL Exhaust." + }, + "awakened:SludgeBomb": { + "NAME": "Sludge Bomb", + "DESCRIPTION": "Can only be played if a *Void is Exhausted. NL Deal !D! damage twice. NL Erase a *Void from your Exhaust Pile.", + "EXTENDED_DESCRIPTION": [ + "I do not have an Exhausted Void." + ] + }, + "awakened:KnifesEdge": { + "NAME": "Knife's Edge", + "DESCRIPTION": "Gain !awakened:m2! Strength. NL Add !M! *Voids into your discard pile." + }, + "awakened:FourthDimension": { + "NAME": "Fourth Dimension", + "DESCRIPTION": "Choose a card in hand. NL Add !M! copies of that card to your Spellbook. NL Exhaust." + }, + "awakened:RavenStrike": { + "NAME": "Raven Strike", + "DESCRIPTION": "Deal !D! damage. NL awakened:Chant: Play the top card of your draw pile." + }, + "awakened:Unleash": { + "NAME": "Unleash", + "DESCRIPTION": "Deal !D! damage. NL Deals !M! additional damage for each other card in your hand." + }, + "awakened:DesperatePrayer": { + "NAME": "Desperate Prayer", + "DESCRIPTION": "Add a random Attack, Skill, and Power into your hand. They cost 0. NL Exhaust." + }, + "awakened:BirdsEye": { + "NAME": "Byrd's Eye", + "DESCRIPTION": "Refresh your Spells. Choose a Spell to awakened:Conjure. NL Exhaust.", + "UPGRADE_DESCRIPTION": "Refresh your Spells. Choose a Spell to awakened:Conjure." + }, + "awakened:Initiation": { + "NAME": "Initiation", + "DESCRIPTION": "Gain !B! Block. NL Gain a *Ceremony.", + "UPGRADE_DESCRIPTION": "Gain !B! Block. NL Gain a *Ceremony+." + }, + "awakened:Ensorcelate": { + "NAME": "Ensorcelate", + "DESCRIPTION": "Gain !B! Block. NL The next Power you play costs 0." + }, + "awakened:Skyward": { + "NAME": "Skyward", + "DESCRIPTION": "Gain !B! Block. NL Draw !M! card. NL Costs 1 less [E] for each Power played this combat.", + "UPGRADE_DESCRIPTION": "Gain !B! Block. NL Draw !M! cards. NL Costs 1 less [E] for each Power played this combat." + }, + "awakened:RisingChant": { + "NAME": "Rising Chorus", + "DESCRIPTION": "Whenever you play an activated awakened:Chant card, gain !M! Strength." + }, + "awakened:FeatherWhirl": { + "NAME": "Feather Whirl", + "DESCRIPTION": "Gain X copies of *Plume *Jab. NL Exhaust.", + "UPGRADE_DESCRIPTION": "Gain X+1 copies of *Plume *Jab. NL Exhaust." + }, + "awakened:Murder": { + "NAME": "Murder", + "DESCRIPTION": "Deal !D! damage to a random enemy !M! times. NL Exhaust.", + "UPGRADE_DESCRIPTION": "Deal !D! damage to a random enemy !M! times." + }, + "awakened:Nihil": { + "NAME": "Nihil", + "DESCRIPTION": "Apply !M! awakened:Manaburn. NL awakened:Chant: ALL enemies lose HP equal to their awakened:Manaburn." + }, + "awakened:MoonlitVision": { + "NAME": "Moonlit Vision", + "DESCRIPTION": "At the start of your turn, if your hand contains 8 or more cards, gain [E].", + "UPGRADE_DESCRIPTION": "Innate. NL At the start of your turn, if your hand contains 8 or more cards, gain [E]." + }, + "awakened:Rebirth": { + "NAME": "Rebirth", + "DESCRIPTION": "When you would die or at the end of combat, remove all debuffs, awakened:Awaken, and heal !M! HP instead." + }, + "awakened:Archmagus": { + "NAME": "Archmagus", + "DESCRIPTION": "The first Spell you play each turn is played twice." + }, + "awakened:Planeswalk": { + "NAME": "Planeswalk", + "DESCRIPTION": "Gain [E] [E] . NL Shuffle a *Void into your draw pile.", + "UPGRADE_DESCRIPTION": "Gain [E] [E] [E] . NL Shuffle a *Void into your draw pile." + }, + "awakened:Spew": { + "NAME": "Spew", + "DESCRIPTION": "Deal !D! damage. NL If a card was created this turn, gain [E] [E] ." + }, + "awakened:DarknessFalls": { + "NAME": "Darkness Falls", + "DESCRIPTION": "Whenever you are awakened:Drained, gain !M! Block and !awakened:m2! Strength." + }, + "awakened:Brainshock": { + "NAME": "Brainshock", + "DESCRIPTION": "Deal !D! damage. NL Deals !M! additional damage for each [E] awakened:Drained this combat." + }, + "awakened:EclipseEmbrace": { + "NAME": "Eclipse Embrace", + "DESCRIPTION": "Whenever you Exhaust a *Void, gain [E] and draw a card next turn." + }, + "awakened:Clutch": { + "NAME": "Clutch", + "DESCRIPTION": "Deal !D! damage. NL Draw !M! 0-cost card.", + "UPGRADE_DESCRIPTION": "Deal !D! damage. NL Draw !M! 0-cost cards." + }, + "awakened:Gloomguard": { + "NAME": "Gloomguard", + "DESCRIPTION": "Gain !B! Block. NL Apply !M! awakened:Manaburn." + }, + "awakened:Carrionmaker": { + "NAME": "Carrionmaker", + "DESCRIPTION": "Deal !D! damage to a random enemy. NL Repeat for each Spell played this turn.", + "EXTENDED_DESCRIPTION": [ + " NL (", + " Spell played.)", + " Spells played.)" + ] + }, + "awakened:MirePit": { + "NAME": "Mire Pit", + "DESCRIPTION": "ALL enemies lose !M! Strength this turn. NL Next turn, lose [E]. NL Exhaust." + }, + "awakened:SingularityShield": { + "NAME": "Singularity Shield", + "DESCRIPTION": "Gain !B! Block. NL Next turn, gain !B! Block and lose [E]." + }, + "awakened:RealityRift": { + "NAME": "Reality Rift", + "DESCRIPTION": "Swap a card in your draw or discard pile with a *Void. NL Exhaust.", + "EXTENDED_DESCRIPTION": [ + "Choose a card to put into your hand." + ] + }, + "awakened:Dejection": { + "NAME": "Dejection", + "DESCRIPTION": "Deal !D! damage. NL Exhaust 1 card. NL If it was a Power, draw !M! cards." + }, + "awakened:BloodRite": { + "NAME": "Blood Rite", + "DESCRIPTION": "Deal !D! damage. NL Gain a *Ceremony.", + "UPGRADE_DESCRIPTION": "Deal !D! damage. NL Gain a *Ceremony+." + }, + "awakened:SongOfSorrow": { + "NAME": "Song of Sorrow", + "DESCRIPTION": "Whenever you create a *Void, ALL enemies lose !M! HP." + }, + "awakened:MysticOrder": { + "NAME": "Mystic Order", + "DESCRIPTION": "Draw !M! cards. NL awakened:Conjure." + }, + "awakened:ProfaneStrike": { + "NAME": "Profane Strike", + "DESCRIPTION": "Deal !D! damage. NL Put a card in your hand on top of your draw pile." + }, + "awakened:Victuals": { + "NAME": "Victuals", + "DESCRIPTION": "awakened:Chant: Gain [E] [E] . NL Exhaust.", + "UPGRADE_DESCRIPTION": "awakened:Chant: Gain [E] [E] [E] . NL Exhaust." + }, + "awakened:Gather": { + "NAME": "Gather", + "DESCRIPTION": "Gain !B! Block. NL awakened:Chant: Put a card from your discard pile into your hand." + }, + "awakened:TheTower": { + "NAME": "The Tower", + "DESCRIPTION": "Deal !D! damage to ALL enemies. NL Deals !M! additional damage for each card created this combat." + }, + "awakened:ArcaneNesting": { + "NAME": "Arcane Nesting", + "DESCRIPTION": "Unplayable. NL Whenever you play a Power while this is in hand, gain !B! Block.", + "EXTENDED_DESCRIPTION": [ + "I must play Powers to gain Block from this." + ] + }, + "awakened:MiddenHeap": { + "NAME": "Midden Heap", + "DESCRIPTION": "Gain !B! Block. NL Put !M! Status or Curse card from your draw or discard pile into your hand.", + "UPGRADE_DESCRIPTION": "Gain !B! Block. NL Put !M! Status or Curse cards from your draw or discard pile into your hand.", + "EXTENDED_DESCRIPTION": [ + "Select a card to move to your hand.", + "Select cards to move to your hand." + ] + }, + "awakened:Caw": { + "NAME": "Caw", + "DESCRIPTION": "Deal !D! damage. NL awakened:Chant: Increase the damage of all *Caw cards by !M! this combat." + }, + "awakened:Scour": { + "NAME": "Scour", + "DESCRIPTION": "Deal !D! damage. NL Apply !M! awakened:Manaburn." + }, + "awakened:Manastorm": { + "NAME": "Manastorm", + "DESCRIPTION": "Deal !D! damage to ALL enemies. NL awakened:Conjure twice." + }, + "awakened:Grimoire": { + "NAME": "Grimoire", + "DESCRIPTION": "Retain. NL Deal !D! damage. NL Increases damage by !M!, then shuffles into your Spellbook." + }, + "awakened:AphoticFount": { + "NAME": "Aphotic Fount", + "DESCRIPTION": "Now and whenever you refresh your Spells, add *Aphotic *Shield to your Spellbook." + }, + "awakened:Bloodthirst": { + "NAME": "Bloodthirst", + "DESCRIPTION": "Deal !D! damage. NL If Fatal, gain a awakened:Power_Potion and Exhaust this card." + }, + "awakened:Procession": { + "NAME": "Procession", + "DESCRIPTION": "Draw !awakened:m2! cards. NL Shuffle !M! *Voids into your draw pile." + }, + "awakened:SplitWide": { + "NAME": "Split Wide", + "DESCRIPTION": "Deal !D! damage. NL Whenever you attack this enemy, gain !M! temporary Strength. NL Exhaust." + }, + "awakened:Spellshield": { + "NAME": "Spellshield", + "DESCRIPTION": "Whenever you Retain a card, gain !M! Block." + }, + "awakened:Siphon": { + "NAME": "Siphon", + "DESCRIPTION": "Deal !D! damage. NL awakened:Chant: gremlin:Steal !M! Strength this turn." + }, + "awakened:PlumeJab": { + "NAME": "Plume Jab", + "DESCRIPTION": "Deal !D! damage to a random enemy twice." + }, + "awakened:Primacy": { + "NAME": "Primacy", + "DESCRIPTION": "The first time you gain Strength each turn, draw a card.", + "UPGRADE_DESCRIPTION": "The first !M! times you gain Strength each turn, draw a card." + } +} diff --git a/src/main/resources/awakenedResources/localization/eng/CharacterStrings.json b/src/main/resources/awakenedResources/localization/eng/CharacterStrings.json new file mode 100644 index 000000000..856770cbb --- /dev/null +++ b/src/main/resources/awakenedResources/localization/eng/CharacterStrings.json @@ -0,0 +1,13 @@ +{ + "awakened:awakenedOne": { + "NAMES": [ + "The Awakened One (Beta)", + "the Awakened One (Beta)" + ], + "TEXT": [ + "The Cult's triumph. NL Dark magics bring flying fury.", + "NL You Conjure your greatest spells...", + "Navigating an unlit street, you come across several hooded figures in the midst of some dark ritual. As you approach, they turn to you in eerie unison. The tallest among them bares fanged teeth and extends a long, pale hand towards you. NL ~\"Join~ ~us~ ~ascended~ ~one,~ ~and~ ~feel~ ~the~ ~warmth~ ~of~ ~the~ ~Spire.\"~" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/eng/EventStrings.json b/src/main/resources/awakenedResources/localization/eng/EventStrings.json new file mode 100644 index 000000000..011535afc --- /dev/null +++ b/src/main/resources/awakenedResources/localization/eng/EventStrings.json @@ -0,0 +1,59 @@ +{ + "awakened:Nest": { + "NAME": "The Nest", + "DESCRIPTIONS": [ + "You have found and returned to it. NL #pThe #pNest, the site of your ascension into the #b~living~ #b~avatar~ #b~of~ #b~a~ #b~god.~ The instant you enter, you are surrounded by Cultists, @cawing@ and @cheering@ for you! NL They know well that your arrivals often come with the requirements of a #r@tithe....@", + "The fights ahead will be difficult, and this is the perfect time to find a unique piece of weaponry to add to your arsenal. NL NL #r@...No@ #r@daggers@ #r@though.@ NL NL You perform a potent ritual to summon an extremely powerful #yrelic, but performing this ritual has taken a heavy toll on you. NL NL Drained, you leave the Nest, hopeful that your new weapon will create havoc in its wake.", + "More and more of the flock line up, bringing you offerings. NL NL Most are @worthless@ @trash,@ but one brings a particularly interesting offering: a #bpowerful #belixir that could greatly benefit you in battle. NL NL Soon after, you leave the Nest and continue your journey downwards the Spire.", + "The cultists surround you even more than they normally would upon seeing their prized statue return to them as well. NL As this is cause for celebration, you are showered in gifts and Souls! NL By the time the celebrations are over and you've left the Nest, you realize that you could have used this time to instead look for a valuable weapon... NL NL It's too late now, but you move forward anyways.", + "#r@\"BIRDGOD!!@ #r@RETURNED!!\"@ NL #b~\"CAW~ #b~CAW~ #b~CAAAAAWWW!\"~ NL The statue that you decided to not destroy has come in handy today for sure.", + "", + "", + "The Cultists surround you even more than they normally would upon seeing their prized statue return to them. NL As this is cause for celebration, you are showered in gifts and Souls! NL By the time the celebrations are over and you've left the Nest, you realize that you could have used this time to instead look for a valuable weapon... NL NL It's too late now, but you move forward anyways.", + "You quickly move to the Donation Box and treasury, intending to make full use of the coin and to find a #yRelic as well. NL NL The coins, paid for in blood itself, can act as a viable substitute for #bSouls. NL NL The #yRelic, of course, will also prove helpful in the trials ahead. NL NL You clutch the #rblood-soaked coins from the Donation Box, intending to make full use of them, but then you notice that the coffers are running quite low... NL NL NL ~...~", + "Were you... #r@robbed?@ The Nest, #pstolen from? NL NL Of course not, there's ~no~ ~way~ that would happen. NL NL NL That would be foolish, to even think of such a thing. NL NL NL ~...right?~ NL NL NL You push your #y~lingering~ #y~doubts~ aside and move on and away from the Nest." + ], + "OPTIONS": [ + "[Return Statue] #rLose #rBroken #rWing #rStatue. #gGain #gmany #grewards.", + "[Locked] Requires Broken Wing Statue.", + "[Collect Offerings] #gGain #ga #gCuriosity #gPotion.", + "[Summon Weaponry] #gObtain #ga #gspecial #gRelic. #rLose #r", + " #rMax #rHP.", + "[Donation Box] #gGain #g", + " #gGold #gand #ga #gCommon #gRelic. #rBecome #rCursed #r- #rDoubt.", + "[Leave]", + "[Continue]", + "[Be Praised!] #gGain #grewards for returning the #gBroken #gWing #gStatue.", + "[Continue] - #rBecome #rCursed #r- #rDoubt." + ] + }, + "awakened:WingStatue": { + "NAME": "Wing Statue", + "DESCRIPTIONS": [ + "Among the stone and boulders, you notice an intricate large blue statue depicting Mazaleth, God of Crows. NL NL You feel a sudden, intense anger and desire to destroy it. NL NL However, you know doing so will draw the ire of your benefactor.", + "You decide that it isn't worth the danger of destroying the statue, and instead decide to take the statue with you. NL You temporarily strain under its weight, but quickly get a handle of it and move on.", + "You lash out at the statue, shattering it into pieces! NL From the rubble, you find a sharp fragment of the statue which still possesses lingering magic. NL You leave, feeling a #pdark #penergy seep into your blood.", + "You walk past and continue onward.", + "CA...Caw?! Gift for BIRD GOD?", + "CA-CAAAW!!", + "An exchange? A fair offer...", + "The cult will be pleased." + ], + "OPTIONS": [ + "[Destroy] #gGain #gSharpened #gFragment. #rBecome #rCursed #rTwice #r- #rHaemophilia.", + "[Collect] #rLose #r", + "[Leave]", + " #rHP. #gGain #gBroken #gWing #gStatue." + ] + }, + "awakened:BackToBasics": { + "NAME": "", + "DESCRIPTIONS": [ + "Nothing matters except the struggle for life. The here and now." + ], + "OPTIONS": [ + "[Desperation] #gYour #gStrikes #gand #gDefends #gbecome #gDraining.", + "[Locked] Requires a Strike or Defend." + ] + } +} \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/eng/KeywordStrings.json b/src/main/resources/awakenedResources/localization/eng/KeywordStrings.json new file mode 100644 index 000000000..f5aa6e462 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/eng/KeywordStrings.json @@ -0,0 +1,52 @@ +[ + { + "PROPER_NAME": "Power Potion", + "NAMES": [ + "Power Potion", + "Power_Potion", + "power_potion", + "powerpotion" + ], + "DESCRIPTION": "#yPotion [REMOVE_SPACE]: Choose #b1 of #b3 random #yPower cards to add to your hand, it costs #b0 this turn." + }, + { + "PROPER_NAME": "Conjure", + "NAMES": [ + "conjure", + "conjured", + "awaken" + ], + "DESCRIPTION": "Draw a card from your Spellbook. If you are #yAwakened (Played at least #b8 #yPowers this combat), drawn Spell cards are #yUpgraded [REMOVE_SPACE], drastically increasing their efficacy." + }, + { + "PROPER_NAME": "Chant", + "NAMES": [ + "chant" + ], + "DESCRIPTION": "Cards with #yChant effects become more powerful for the rest of combat if the last played card in combat was a #yPower card." + }, + { + "PROPER_NAME": "Hex", + "NAMES": [ + "hex", + "hexxed", + "hexx" + ], + "DESCRIPTION": "Creatures with #yHex take #b20% more damage from the next Attack for each stack. #yHex is removed all at once after being attacked." + }, + { + "PROPER_NAME": "Drained", + "NAMES": [ + "drain", + "drained" + ], + "DESCRIPTION": "Any effect that causes you to lose [E] , even if you had none to lose. (Does not include [E] spent playing cards.)" + }, + { + "PROPER_NAME": "Manaburn", + "NAMES": [ + "manaburn" + ], + "DESCRIPTION": "Whenever you lose [E] , even if you had none to lose, loses HP equal to its #yManaburn [REMOVE_SPACE]. (Does not include [E] spent playing cards.)" + } +] \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/eng/MonsterStrings.json b/src/main/resources/awakenedResources/localization/eng/MonsterStrings.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/src/main/resources/awakenedResources/localization/eng/MonsterStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/eng/OrbStrings.json b/src/main/resources/awakenedResources/localization/eng/OrbStrings.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/src/main/resources/awakenedResources/localization/eng/OrbStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/eng/PotionStrings.json b/src/main/resources/awakenedResources/localization/eng/PotionStrings.json new file mode 100644 index 000000000..f78b662bd --- /dev/null +++ b/src/main/resources/awakenedResources/localization/eng/PotionStrings.json @@ -0,0 +1,24 @@ +{ + "awakened:CultistsDelight": { + "NAME": "Cultist's Delight", + "DESCRIPTIONS": [ + "Whenever you play a #yPower card this combat, gain #b", + " #yStrength [REMOVE_SPACE]." + ] + }, + "awakened:SacramentalWine": { + "NAME": "Sacramental Wine", + "DESCRIPTIONS": [ + "Whenever you play a #yPower card this combat, gain #b", + " #yBlock [REMOVE_SPACE]. Add a random #yPower card to your hand." + ] + }, + "awakened:SneckoPowersPotion": { + "NAME": "Snecko Essence", + "DESCRIPTIONS": [ + "Choose #b1 of #b3 random #yOffclass #yPower cards to add to your hand, it costs #b0 this turn.", + "Choose #b1 of #b3 random #yOffclass #yPower cards and add #b", + " copies to your hand, they cost #b0 this turn." + ] + } +} diff --git a/src/main/resources/awakenedResources/localization/eng/PowerStrings.json b/src/main/resources/awakenedResources/localization/eng/PowerStrings.json new file mode 100644 index 000000000..e144ac314 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/eng/PowerStrings.json @@ -0,0 +1,206 @@ +{ + "awakened:IntensifyPower": { + "NAME": "Intensify", + "DESCRIPTIONS": [ + "This turn, all Spell cards cost #b0 [REMOVE_SPACE].", + "For the next #b", + " turns, all Spell cards cards cost #b0 [REMOVE_SPACE]." + ] + }, + "awakened:IntensifyDebuffPower": { + "NAME": "Burnout", + "DESCRIPTIONS": [ + "You cannot #yConjure for the rest of the turn.", + "You cannot #yConjure for the next #b", + " turns." + ] + }, + "awakened:RisingChantPower": { + "NAME": "Rising Chorus", + "DESCRIPTIONS": [ + "Whenever you play an activated #yChant card, gain #b", + " #yStrength [REMOVE_SPACE]." + ] + }, + "awakened:CursedStrength": { + "NAME": "Darkblessed", + "DESCRIPTIONS": [ + "Whenever you are #yDrained [REMOVE_SPACE], gain #b", + " #yStrength [REMOVE_SPACE]." + ] + }, + "awakened:ThaumaturgyPower": { + "NAME": "Thaumaturgy", + "DESCRIPTIONS": [ + "At the start of your next #b", + " turns, gain a #yCeremony [REMOVE_SPACE]." + ] + }, + "awakened:SacramentPower": { + "NAME": "Sacraments", + "DESCRIPTIONS": [ + "Whenever you play a #yPower [REMOVE_SPACE], gain #b", + " #yBlock [REMOVE_SPACE]." + ] + }, + "awakened:FlarePower": { + "NAME": "Feather Flare", + "DESCRIPTIONS": [ + "Whenever you play a #ynon-Attack card this turn, ALL enemies lose #b", + " HP." + ] + }, + "awakened:PrimacyPower": { + "NAME": "Primacy", + "DESCRIPTIONS": [ + "The first time you gain #yStrength each turn, draw a card.", + "The first #b", + " times you gain #yStrength each turn, draw a card.", + " NL This effect can be triggered #b", + " more times this turn.", + " more time this turn.", + " NL This effect cannot be triggered again this turn." + ] + }, + "awakened:SpellbinderPower": { + "NAME": "Spellbinder", + "DESCRIPTIONS": [ + "At the start of your turn, #yConjure [REMOVE_SPACE].", + "At the start of your turn, #yConjure at random #b", + " times." + ] + }, + "awakened:DarkEchoPower": { + "NAME": "Dark Echo", + "DESCRIPTIONS": [ + "At the end of your turn, deal #b", + " damage to ALL enemies #b", + " times.", + " damage to ALL enemies." + ] + }, + "awakened:MoonlitVisionPower": { + "NAME": "Moonlit Vision", + "DESCRIPTIONS": [ + "At the start of your turn, if your hand contains #b8 or more cards, gain [E].", + "At the start of your turn, if your hand contains #b8 or more cards, gain #b", + " [E]." + ] + }, + "awakened:EclipseEmbracePower": { + "NAME": "Eclipse Embrace", + "DESCRIPTIONS": [ + "Whenever you #yExhaust a #yVoid [REMOVE_SPACE], gain [E] and draw a card next turn.", + "Whenever you #yExhaust a #yVoid [REMOVE_SPACE], gain #b", + " [E] and draw #b", + " cards next turn." + ] + }, + "awakened:SongOfSorrowPower": { + "NAME": "Song of Sorrow", + "DESCRIPTIONS": [ + "Whenever you create a #yVoid [REMOVE_SPACE], ALL enemies lose #b", + " HP." + ] + }, + "awakened:ShroudOfMiasmaPower": { + "NAME": "Shroud of Miasma", + "DESCRIPTIONS": [ + "Whenever you attack an enemy with #yHex [REMOVE_SPACE], gain #b", + " #yBlock [REMOVE_SPACE]." + ] + }, + "awakened:StrengthReturnPower": { + "NAME": "Split Wide", + "DESCRIPTIONS": [ + "Whenever you attack this enemy, gain #b", + " temporary #yStrength [REMOVE_SPACE]." + ] + }, + "awakened:ManaburnPower": { + "NAME": "Manaburn", + "DESCRIPTIONS": [ + "Whenever you are #yDrained [REMOVE_SPACE], loses #b", + " HP." + ] + }, + "awakened:ArchmagusPower": { + "NAME": "Archmagus", + "DESCRIPTIONS": [ + "The first Spell you play each turn is played twice.", + "The first #b", + " Spells you play each turn are played twice." + ] + }, + "awakened:DoubleSpellPower": { + "NAME": "Spell Repeat", + "DESCRIPTIONS": [ + "The next Spell you play this turn is played twice.", + "The next #b", + " Spells you play this turn are played twice." + ] + }, + "awakened:DarknessFallsPower": { + "NAME": "Darkness Falls", + "DESCRIPTIONS": [ + "Whenever you are #yDrained [REMOVE_SPACE], gain #b", + " #yBlock [REMOVE_SPACE]." + ] + }, + "awakened:VoidRefundPower": { + "NAME": "Clarion Call", + "DESCRIPTIONS": [ + "The next time you are #yDrained [REMOVE_SPACE], gain [E] .", + "The next time you are #yDrained [REMOVE_SPACE], gain #b", + " [E] ." + ] + }, + "awakened:DemonGlyphPower": { + "NAME": "Demon Glyph", + "DESCRIPTIONS": [ + "Gain #b", + " #yStrength and #yDexterity when you #yAwaken [REMOVE_SPACE]." + ] + }, + "awakened:ReverseRitualPower": { + "NAME": "Awakened Form", + "DESCRIPTIONS": [ + "At the end of your turn, lose #b", + " #yStrength [REMOVE_SPACE]." + ] + }, + "awakened:EnsorcelatePower": { + "NAME": "Ensorcelate", + "DESCRIPTIONS": [ + "The next #yPower you play costs #b0 [REMOVE_SPACE].", + "The next #b", + " #yPowers you play cost #b0 [REMOVE_SPACE]." + ] + }, + "awakened:ChosensVersePower": { + "NAME": "Chosen Verse", + "DESCRIPTIONS": [ + "The next time you play a non-Attack card this turn, draw a card and gain #b", + " #yBlock.", + "The next #b", + " times you play a non-Attack card this turn, draw a card and gain #b", + " #yBlock." + ] + }, + "awakened:AphoticFountPower": { + "NAME": "Aphotic Fount", + "DESCRIPTIONS": [ + "Whenever you refresh your Spells, add #b", + " #yAphotic #yShield", + "+", + " to your Spellbook." + ] + }, + "awakened:SpellshieldPower": { + "NAME": "Spellshield", + "DESCRIPTIONS": [ + "Whenever you #yRetain a card, gain #b", + " #yBlock." + ] + } +} \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/eng/RelicStrings.json b/src/main/resources/awakenedResources/localization/eng/RelicStrings.json new file mode 100644 index 000000000..1705eac1b --- /dev/null +++ b/src/main/resources/awakenedResources/localization/eng/RelicStrings.json @@ -0,0 +1,145 @@ +{ + "awakened:RippedDoll": { + "NAME": "Ripped Doll", + "FLAVOR": "The last reminder of your prior self. It still holds latent magicks.", + "DESCRIPTIONS": [ + "At the start of the first #b", + " turns of combat, #yawakened:Conjure [REMOVE_SPACE]." + ] + }, + "awakened:ShreddedDoll": { + "NAME": "Shredded Doll", + "FLAVOR": "A reminder of your weakness, and yet you still can't let go.", + "DESCRIPTIONS": [ + "Replaces ", + " [REMOVE_SPACE].[] NL At the start of your turn, #yawakened:Conjure [REMOVE_SPACE]. NL The first time you refresh your Spells each combat, gain #b1 #yRitual [REMOVE_SPACE]." + ] + }, + "awakened:WhiteRibbon": { + "NAME": "White Ribbon", + "FLAVOR": "Gives power to spoken words even without proper ritual.", + "DESCRIPTIONS": [ + "Whenever you play a #yPower or a card with an active #yawakened:Chant effect, gain #b", + " #yBlock [REMOVE_SPACE]." + ] + }, + "awakened:HexxBomb": { + "NAME": "Manabomb", + "FLAVOR": "3... 2...", + "DESCRIPTIONS": [ + "Whenever an enemy dies, transfer any #yawakened:Manaburn it has to a random enemy." + ] + }, + "awakened:TomeOfPortalmancy": { + "NAME": "Tome of Portalmancy", + "FLAVOR": "A grimoire detailing the construction and maintenance of interplanar gates.", + "DESCRIPTIONS": [ + "Whenever a #yVoid is #yExhausted [REMOVE_SPACE], apply #b", + " #yawakened:Manaburn to ALL enemies." + ] + }, + "awakened:EyeOfTheOccult": { + "NAME": "Eye of the Occult", + "FLAVOR": "This gruesome carving imparts magical knowledge to its owner.", + "DESCRIPTIONS": [ + "Spells hit ALL enemies." + ] + }, + "awakened:DeadBird": { + "NAME": "Corvid Spirit", + "FLAVOR": "This spectre closely follows behind the damned and cursed.", + "DESCRIPTIONS": [ + "At the end of your turn, deal #b", + " damage to the lowest HP enemy, increased by #yStrength [REMOVE_SPACE]." + ] + }, + "awakened:AbyssBlade": { + "NAME": "Abyss Blade", + "FLAVOR": "Void Refund.", + "DESCRIPTIONS": [ + "The first time you are #yawakened:Drained each turn, gain [E] and draw a card." + ] + }, + "awakened:ShardOfNowak": { + "NAME": "Gilded Bone Shard", + "FLAVOR": "...No, not that kind of focus.", + "DESCRIPTIONS": [ + "Start each combat with #b", + " #yStrength [REMOVE_SPACE]. After losing any type of HP, lose that #yStrength for the rest of combat." + ] + }, + "awakened:VioletPlumage": { + "NAME": "Violet Plumage", + "FLAVOR": "Tinged by the unending darkness of oblivion.", + "DESCRIPTIONS": [ + "The first time you end your turn with excess [E] each combat, draw #b", + " additional cards at the start of your next turn." + ] + }, + "awakened:ZenerDeck": { + "NAME": "Zener Deck", + "FLAVOR": "“One, two, three, all eyes should be on me.”", + "DESCRIPTIONS": [ + "At the start of combat, add #yESP to your Spellbook and #yawakened:Conjure it." + ] + }, + "awakened:CawingCask": { + "NAME": "Cawing Cask", + "FLAVOR": "A ceremonially carved barrel depicting the crow god Mazaleth, its contents smell questionable...", + "DESCRIPTIONS": [ + "Whenever you use a potion, gain #b", + " #yRitual [REMOVE_SPACE]." + ] + }, + "awakened:MiniBlackHole": { + "NAME": "Alethea", + "FLAVOR": "From the Abyss.", + "DESCRIPTIONS": [ + "If you do not play any #yPowers during your turn, draw an additional card next turn." + ] + }, + "awakened:StrengthBooster": { + "NAME": "Paper Crow", + "FLAVOR": "Arbiter of doubt and curses folded one thousand times...", + "DESCRIPTIONS": [ + "Enemies take #b", + "% additional damage from #yawakened:Manaburn [REMOVE_SPACE]." + ] + }, + "awakened:CursedBlessing": { + "NAME": "Final Rites", + "FLAVOR": "I leave everything I own to my cat, Noodles. Goodbye, cruel world. XOXO Jouster", + "DESCRIPTIONS": [ + "The first time you activate #b", + " #yawakened:Chant effects in a combat, gain #b", + " #yRitual [REMOVE_SPACE]." + ] + }, + "awakened:CurvedSwordMeme": { + "NAME": "Conjure Blade", + "FLAVOR": "Go on, do it. Conjure a blade, right now. I'm watching. :^)", + "DESCRIPTIONS": [ + "At the start of combat, add #yConjure #yBlade into your hand?", + "NOTE: THE PLAYER CANNOT OBTAIN THIS RELIC OUTSIDE OF CONSOLE, IT'S A JOKE RELIC!" + ] + }, + "awakened:CurvedSword": { + "NAME": "Zetsumei", + "FLAVOR": "A blade favored by mages due to its ability to channel casted magic back into itself.", + "DESCRIPTIONS": [ + "Every time you play #b", + " Spells in a single turn, gain a #yCeremony [REMOVE_SPACE]." + ] + }, + "awakened:MoonTalisman": { + "NAME": "Crescent Talisman", + "FLAVOR": "“Please, just... don't forget me. Even after I die.”", + "DESCRIPTIONS": [ + "Upon pickup, choose a card that does #rNOT have #yawakened:Conjure [REMOVE_SPACE]. Add #yawakened:Conjure to it.", + "Choose a card for ", + "The Talisman has blessed ", + " and added #yawakened:Conjure to it.", + "The card attached to this relic has been #rremoved from your deck, the relic no longer functions." + ] + } +} diff --git a/src/main/resources/awakenedResources/localization/eng/RunModStrings.json b/src/main/resources/awakenedResources/localization/eng/RunModStrings.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/src/main/resources/awakenedResources/localization/eng/RunModStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/eng/UIStrings.json b/src/main/resources/awakenedResources/localization/eng/UIStrings.json new file mode 100644 index 000000000..7e35581d8 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/eng/UIStrings.json @@ -0,0 +1,38 @@ +{ + "awakened:SpellDescriptor": { + "TEXT": [ + "Spell" + ] + }, + "awakened:ConjureMod": { + "TEXT": [ + " NL awakened:Conjure." + ] + }, + "awakened:SpellMod": { + "TEXT": [ + "[#12FAF0]Spell. NL" + ] + }, + "awakened:DrainingMod": { + "TEXT": [ + " NL Next turn, lose [E]." + ] + }, + "awakened:highlightChant": { + "TEXT": [ + "awakened:Chant: ", + "[awakenedIcon] [#12FAF0]Chant: " + ] + }, + "awakened:Spellbook": { + "TEXT": [ + "Spellbook" + ] + }, + "awakened:FullSpellbook": { + "TEXT": [ + "My Spellbook is full!" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/bronzeResources/localization/eng/CardStrings.json b/src/main/resources/bronzeResources/localization/eng/CardStrings.json index 01ffc8089..aeea85f3b 100644 --- a/src/main/resources/bronzeResources/localization/eng/CardStrings.json +++ b/src/main/resources/bronzeResources/localization/eng/CardStrings.json @@ -38,8 +38,8 @@ }, "bronze:BitShift": { "NAME": "Bit Shift", - "DESCRIPTION": "Choose an Encoded card to return to your hand. It gains Retain. NL Exhaust.", - "UPGRADE_DESCRIPTION": "Retain. NL Choose an Encoded card to return to your hand. It gains Retain. NL Exhaust." + "DESCRIPTION": "Choose an Encoded card to return to your hand. NL It gains Retain. NL Exhaust.", + "UPGRADE_DESCRIPTION": "Retain. NL Choose an Encoded card to return to your hand. NL It gains Retain. NL Exhaust." }, "bronze:Boost": { "NAME": "Boost", @@ -61,7 +61,7 @@ }, "bronze:Break": { "NAME": "Break", - "DESCRIPTION": "Deal !D! damage. NL bronze:Compile *Error - bronze:Insert a *Burn, a *Wound, and a *Slimed.", + "DESCRIPTION": "Deal !D! damage. NL bronze:Compile *Error - Gain a *Dazed, *Slimed, *Wound, *Burn, *Void.", "EXTENDED_DESCRIPTION": [ "broken", "Smash" @@ -81,7 +81,7 @@ }, "bronze:BugBarrage": { "NAME": "Bug Barrage", - "DESCRIPTION": "Gain 1 *Wound. NL bronze:Cycle each Status, dealing !D! damage for each.", + "DESCRIPTION": "Gain !M! *Wounds. NL bronze:Cycle each Status, dealing !D! damage for each.", "UPGRADE_DESCRIPTION": "Gain !M! *Wounds. NL bronze:Cycle each Status, dealing !D! damage for each.", "EXTENDED_DESCRIPTION": [ " NL (Hits ", @@ -300,7 +300,7 @@ }, "bronze:HyperBeam": { "NAME": "HYPER BEAM", - "DESCRIPTION": "Deal !D! damage to ALL enemies. NL Put 5 *Void on top of your draw pile." + "DESCRIPTION": "Retain. NL Deal !D! damage to ALL enemies. NL Put !M! *Voids on top of your draw pile." }, "bronze:InfiniteBeams": { "NAME": "Infinite Beams", @@ -334,8 +334,7 @@ }, "bronze:ItsAFeature": { "NAME": "It's a Feature", - "DESCRIPTION": "Whenever you draw a Curse or Status card, gain 1 temporary Strength and Dexterity.", - "UPGRADE_DESCRIPTION": "Innate. NL Whenever you draw a Curse or Status card, gain 1 temporary Strength and Dexterity." + "DESCRIPTION": "Whenever you draw or Exhaust a Status card, gain !M! Block." }, "bronze:Library": { "NAME": "Library", @@ -347,8 +346,8 @@ }, "bronze:Mutator": { "NAME": "Mutator", - "DESCRIPTION": "Gain 1 Strength. NL *Transform a Status into a copy of this.", - "UPGRADE_DESCRIPTION": "Retain. NL Gain 1 Strength. NL *Transform a Status into a copy of this." + "DESCRIPTION": "Gain !M! Strength. NL *Transform a Status into a copy of this.", + "UPGRADE_DESCRIPTION": "Retain. NL Gain !M! Strength. NL *Transform a Status into a copy of this." }, "bronze:NullPointer": { "NAME": "Null Pointer", @@ -398,7 +397,7 @@ }, "bronze:Refactor": { "NAME": "Refactor", - "DESCRIPTION": "Scry !M!. NL Exhaust all cards discarded. NL Gain !B! Block for each Status card exhausted." + "DESCRIPTION": "Scry !M!. NL Exhaust all Status cards discarded. NL Gain !B! Block for each Status card exhausted." }, "bronze:Repair": { "NAME": "Repair", @@ -410,7 +409,7 @@ }, "bronze:Replicate": { "NAME": "Replicate", - "DESCRIPTION": "Deal !D! damage. \u202F When *Encoded, add a copy to your discard pile.", + "DESCRIPTION": "Deal !D! damage. \u202F NL When *Encoded, add a copy to your discard pile.", "EXTENDED_DESCRIPTION": [ "copying", "Copy" @@ -453,7 +452,7 @@ }, "bronze:Shield": { "NAME": "Sticky Shield", - "DESCRIPTION": "Gain !B! Block. NL bronze:Insert 1 *Slimed.", + "DESCRIPTION": "Retain. NL Gain !B! Block. NL bronze:Insert 1 *Slimed.", "EXTENDED_DESCRIPTION": [ "sticky", "Shield" @@ -461,7 +460,11 @@ }, "bronze:ShipIt": { "NAME": "Ship It", - "DESCRIPTION": "Deal !D! damage. NL Deals !M! additional damage for ALL of your Status cards." + "DESCRIPTION": "Deal !D! damage. NL Repeat for every Status card in your exhaust pile.", + "EXTENDED_DESCRIPTION": [ + "Deal !D! damage. NL Repeat for every Status card in your exhaust pile (", + ")." + ] }, "bronze:SpaghettiCode": { "NAME": "Spaghetti Code", @@ -513,8 +516,8 @@ }, "bronze:Virus": { "NAME": "Virus", - "DESCRIPTION": "Retain. NL Deal !D! damage. NL *Transform all cards in hand into *Minor *Beam. NL Exhaust.", - "UPGRADE_DESCRIPTION": "Retain. NL Deal !D! damage. NL *Transform all cards in hand into *Minor *Beam+. NL Exhaust." + "DESCRIPTION": "Deal !D! damage. NL Discard your hand and gain a *Minor *Beam for each card discarded. NL Exhaust.", + "UPGRADE_DESCRIPTION": "Deal !D! damage. NL Discard your hand and gain a *Minor *Beam+ for each card discarded. NL Exhaust." }, "bronze:WhirlingStrike": { "NAME": "Piercing Shot", @@ -581,7 +584,7 @@ }, "bronze:DecaBeam": { "NAME": "Proto-Shield", - "DESCRIPTION": "Gain !B! Block. NL bronze:Compile - Gain !M! Plated Armor and bronze:Insert !bauto! *Dazed.", + "DESCRIPTION": "Gain !B! Block. NL bronze:Compile - Gain !M! *Plated *Armor and bronze:Insert !bauto! *Dazed.", "EXTENDED_DESCRIPTION": [ "jagged", "Barrier" diff --git a/src/main/resources/bronzeResources/localization/eng/EventStrings.json b/src/main/resources/bronzeResources/localization/eng/EventStrings.json index e1fe57850..2da85c9be 100644 --- a/src/main/resources/bronzeResources/localization/eng/EventStrings.json +++ b/src/main/resources/bronzeResources/localization/eng/EventStrings.json @@ -35,7 +35,7 @@ "There is no strength without unity." ], "OPTIONS": [ - "[Unification] All #gStrikes and #gDefends gain #gEncode.", + "[Unification] All #gStrikes and #gDefends gain #gEncode [REMOVE_SPACE].", "[Locked] Requires a Strike or Defend." ] }, @@ -61,7 +61,7 @@ ], "OPTIONS": [ "[Craft] #gGain #gBottled #gCode. #rLose #r10 #rMax #rHP.", - "[Transmute] #rRemove a Card. Gain a random #gCard #gwith #gEncode.", + "[Transmute] #gRemove #ga #gCard. #gGain #ga #grandom #gCard #gwith #gEncode.", "[Reforge] #rRemove a #yRare Card. #gGain #g10 #gMax #gHP #gand #gHeal #gto #gfull.", "[Locked] Already used.", "[Leave]", diff --git a/src/main/resources/bronzeResources/localization/eng/KeywordStrings.json b/src/main/resources/bronzeResources/localization/eng/KeywordStrings.json index 4218f7a5c..d676b4e24 100644 --- a/src/main/resources/bronzeResources/localization/eng/KeywordStrings.json +++ b/src/main/resources/bronzeResources/localization/eng/KeywordStrings.json @@ -5,7 +5,7 @@ "encode", "encoded" ], - "DESCRIPTION": "Encode a card. NL When 3 cards are Encoded, their effects (other than Encode) are merged into a Function that costs #b1." + "DESCRIPTION": "Encode a card. NL When 3 cards are Encoded, their effects (other than Encode) are merged into a Function that costs #b1 [REMOVE_SPACE]." }, { "PROPER_NAME": "Compile", diff --git a/src/main/resources/bronzeResources/localization/eng/PotionStrings.json b/src/main/resources/bronzeResources/localization/eng/PotionStrings.json index 08c7f00c5..19792f05d 100644 --- a/src/main/resources/bronzeResources/localization/eng/PotionStrings.json +++ b/src/main/resources/bronzeResources/localization/eng/PotionStrings.json @@ -19,14 +19,14 @@ "DESCRIPTIONS": [ "Gain #b", " #yStrength and #b", - " #yDexterity. NL Add two #yBurn+ cards into your discard pile." + " #yDexterity [REMOVE_SPACE]. NL Add two #yBurn+ cards into your discard pile." ] }, "bronze:BuildAFunctionPotion": { "NAME": "Kio's Clever Concoction", "DESCRIPTIONS": [ - "Choose #b1 of #b3 random cards to #yEncode, repeat until you create a #yFunction.", - "Choose #b1 of #b3 random cards to #yEncode, repeat until you create a #yFunction and gain #b", + "Choose #b1 of #b3 random cards to #yEncode [REMOVE_SPACE], repeat until you create a #yFunction [REMOVE_SPACE].", + "Choose #b1 of #b3 random cards to #yEncode [REMOVE_SPACE], repeat until you create a #yFunction and gain #b", " copy of it.", " copies of it." ] diff --git a/src/main/resources/bronzeResources/localization/eng/PowerStrings.json b/src/main/resources/bronzeResources/localization/eng/PowerStrings.json index afb31bba8..83c0fa3dc 100644 --- a/src/main/resources/bronzeResources/localization/eng/PowerStrings.json +++ b/src/main/resources/bronzeResources/localization/eng/PowerStrings.json @@ -18,28 +18,27 @@ "bronze:Feature": { "NAME": "It's A Feature", "DESCRIPTIONS": [ - "Whenever you draw a #rCurse or #yStatus card, gain #b", - " temporary #yStrength and #b", - " temporary #yDexterity." + "Whenever you draw or #yExhaust a #yStatus card, gain #b", + " #yBlock [REMOVE_SPACE]." ] }, "bronze:InfiniteBeams": { "NAME": "Infinite Beams", "DESCRIPTIONS": [ - "At the start of your turn, Gain #b1 #yMinor #yBeam.", - "At the start of your turn, Gain #b1 #yMinor #yBeam+.", + "At the start of your turn, Gain #b1 #yMinor #yBeam [REMOVE_SPACE].", + "At the start of your turn, Gain #b1 #yMinor #yBeam+ [REMOVE_SPACE].", "At the start of your turn, gain #b", - " #yMinor #yBeams.", + " #yMinor #yBeams [REMOVE_SPACE].", "At the start of your turn, gain #b", - " #yMinor #yBeam+s." + " #yMinor #yBeam+s [REMOVE_SPACE]." ] }, "bronze:Optimize": { "NAME": "Optimized", "DESCRIPTIONS": [ - "#yUpgrade the next #yUpgradable card you #yEncode.", + "#yUpgrade the next #yUpgradable card you #yEncode [REMOVE_SPACE].", "#yUpgrade the next #b", - " #yUpgradable cards you #yEncode." + " #yUpgradable cards you #yEncode [REMOVE_SPACE]." ] }, "bronze:MaxOutput": { @@ -70,14 +69,14 @@ "bronze:LibraryMod": { "NAME": "External Library", "DESCRIPTIONS": [ - "At the start of your turn, gain a random card with #yEncode and give it #yEthereal." + "At the start of your turn, gain a random card with #yEncode and give it #yEthereal [REMOVE_SPACE]." ] }, "bronze:BronzeHeatsink": { "NAME": "Bronze Heatsink", "DESCRIPTIONS": [ - "Whenever you play a #yFunction, draw #b1 card.", - "Whenever you play a #yFunction, draw #b", + "Whenever you play a #yFunction [REMOVE_SPACE], draw #b1 card.", + "Whenever you play a #yFunction [REMOVE_SPACE], draw #b", " cards." ] }, @@ -100,7 +99,7 @@ "bronze:Verify": { "NAME": "Sentient Form", "DESCRIPTIONS": [ - "Whenever you draw a Function, increase all numbers on it by #b1.", + "Whenever you draw a Function, increase all numbers on it by #b1 [REMOVE_SPACE].", "Whenever you draw a Function, increase all numbers on it by #b", " except for cost." ] @@ -108,9 +107,9 @@ "bronze:FreeFunction": { "NAME": "Free Function", "DESCRIPTIONS": [ - "The next Function you create costs #b0.", + "The next Function you create costs #b0 [REMOVE_SPACE].", "The next #b", - " Functions you create cost #b0." + " Functions you create cost #b0 [REMOVE_SPACE]." ] }, "bronze:CleanCode": { @@ -138,9 +137,9 @@ "bronze:RemoveNextError": { "NAME": "Remove Errors", "DESCRIPTIONS": [ - "Remove the next #yCompile #yError #yEncoded.", + "Remove the next #yCompile #yError #yEncoded [REMOVE_SPACE].", "Remove the next #b", - " #yCompile #yErrors #yEncoded." + " #yCompile #yErrors #yEncoded [REMOVE_SPACE]." ] } } \ No newline at end of file diff --git a/src/main/resources/bronzeResources/localization/eng/RelicStrings.json b/src/main/resources/bronzeResources/localization/eng/RelicStrings.json index ae297897f..2a2214e9d 100644 --- a/src/main/resources/bronzeResources/localization/eng/RelicStrings.json +++ b/src/main/resources/bronzeResources/localization/eng/RelicStrings.json @@ -10,21 +10,23 @@ "NAME": "Protective Goggles", "FLAVOR": "Look closely.", "DESCRIPTIONS": [ - "If you end your turn with no #yEncoded cards, gain #b4 #yBlock." + "If you end your turn with no #yEncoded cards, gain #b", + " #yBlock [REMOVE_SPACE]." ] }, "bronze:DecasWashers": { "NAME": "Deca's Washers", "FLAVOR": "It is unclear why Deca collects these.", "DESCRIPTIONS": [ - "At the start of the first #b3 turns of each combat, draw an additional card." + "At the start of the first #b", + " turns of each combat, draw an additional card." ] }, "bronze:Timepiece": { "NAME": "Frost Primer", "FLAVOR": "22 ounces of the chemical compound Ar22, shelf life: 22 years. Best stored in a mahogany fridge.", "DESCRIPTIONS": [ - "All Functions you create gain #yRetain." + "All Functions you create gain #yRetain [REMOVE_SPACE]." ] }, "bronze:Mallet": { @@ -67,17 +69,19 @@ "FLAVOR": "Changelog: Improved user experience.", "DESCRIPTIONS": [ "Replaces ", - ".[] NL The first #b3 Functions you create each combat cost #b0 until played." + " [REMOVE_SPACE].[] NL The first #b", + " Functions you create each combat cost #b0 until played." ] }, "bronze:BottledCode": { "NAME": "Bottled Code", "FLAVOR": "Actually, I have code for that exact thing...", "DESCRIPTIONS": [ - "Upon pickup, choose a card with #yEncode. Start each combat with this card #yEncoded.", + "Upon pickup, choose a card with #yEncode [REMOVE_SPACE]. Start each combat with this card #yEncoded [REMOVE_SPACE].", "Choose a card for ", "Start each combat with #yEncoded ", - "." + " [REMOVE_SPACE].", + "The bottled card has been #rremoved from your deck, the relic no longer functions." ] }, "bronze:DonusWashers": { @@ -98,7 +102,7 @@ "NAME": "Paradox Artifact", "FLAVOR": "You've never seen a coding frenzy like this before.", "DESCRIPTIONS": [ - "At the start of each turn, add a random card with #yEncode to your hand and give it #yEthereal." + "At the start of each turn, add a random card with #yEncode to your hand and give it #yEthereal [REMOVE_SPACE]." ] } } diff --git a/src/main/resources/bronzeResources/localization/eng/UIStrings.json b/src/main/resources/bronzeResources/localization/eng/UIStrings.json index 3053b37dc..9382315fb 100644 --- a/src/main/resources/bronzeResources/localization/eng/UIStrings.json +++ b/src/main/resources/bronzeResources/localization/eng/UIStrings.json @@ -31,8 +31,8 @@ "ERR: SEQUENCE_EMPTY", " - Gain a copy of #yInfinite #yLoop with #b", " more damage.", - " to Mutate.", - " to Encode.", + "Mutate.", + "Encode.", "" ] }, diff --git a/src/main/resources/bronzeResources/localization/fra/CardStrings.json b/src/main/resources/bronzeResources/localization/fra/CardStrings.json index 5f389a79b..ae4291f74 100644 --- a/src/main/resources/bronzeResources/localization/fra/CardStrings.json +++ b/src/main/resources/bronzeResources/localization/fra/CardStrings.json @@ -347,8 +347,8 @@ }, "bronze:Mutator": { "NAME": "Mutateur", - "DESCRIPTION": "Gagnez 1 de Force. NL Transformez un Statut de votre main en une copie de ceci.", - "UPGRADE_DESCRIPTION": "Retenue. NL Gagnez 1 de Force. NL Transformez un Statut de votre main en une copie de ceci." + "DESCRIPTION": "Gagnez !M! de Force. NL Transformez un Statut de votre main en une copie de ceci.", + "UPGRADE_DESCRIPTION": "Retenue. NL Gagnez !M! de Force. NL Transformez un Statut de votre main en une copie de ceci." }, "bronze:NullPointer": { "NAME": "Pointeur zéro", diff --git a/src/main/resources/bronzeResources/localization/jpn/CardStrings.json b/src/main/resources/bronzeResources/localization/jpn/CardStrings.json index bd8f97e4e..de8a5bec7 100644 --- a/src/main/resources/bronzeResources/localization/jpn/CardStrings.json +++ b/src/main/resources/bronzeResources/localization/jpn/CardStrings.json @@ -9,8 +9,8 @@ }, "bronze:AlphaBuild": { "NAME": "アーリーアクセス", - "DESCRIPTION": " !D! ダメージを与える。 NL ランダムな *状態異常 をbronze:インサート :する。 NL bronze:コンパイル - bronze:インサート : *ベータビルド", - "UPGRADE_DESCRIPTION": "天賦 NL !D! ダメージを与える。 NL ランダムな *状態異常 をbronze:インサート :する。 NL bronze:コンパイル - bronze:インサート : *ベータビルド", + "DESCRIPTION": "!D! ダメージを与える。 NL ランダムな *状態異常 を bronze:インサート :する。 NL bronze:コンパイル - bronze:インサート : *ベータビルド", + "UPGRADE_DESCRIPTION": "天賦 NL !D! ダメージを与える。 NL ランダムな *状態異常 を bronze:インサート :する。 NL bronze:コンパイル - bronze:インサート : *ベータビルド", "EXTENDED_DESCRIPTION": [ "ラフ", "α" @@ -30,7 +30,7 @@ }, "bronze:BetaBuild": { "NAME": "ベータビルド", - "DESCRIPTION": " !B! ブロックを得る。 NL ランダムな *状態異常 をbronze:インサート :する。 NL bronze:コンパイル - bronze:インサート : *フルリリース", + "DESCRIPTION": "!B! ブロックを得る。 NL ランダムな *状態異常 を bronze:インサート :する。 NL bronze:コンパイル - bronze:インサート : *フルリリース", "EXTENDED_DESCRIPTION": [ "早期", "β" @@ -38,12 +38,12 @@ }, "bronze:BitShift": { "NAME": "ビットシフト", - "DESCRIPTION": "エンコード中 のカードを手札に戻し、 保留 を付ける。 NL 廃棄", - "UPGRADE_DESCRIPTION": "保留 NL エンコード中 のカードを手札に戻し、 保留 を付ける。 NL 廃棄" + "DESCRIPTION": "エンコード中 のカードを手札に戻し、 保留 を付与する。 NL 廃棄", + "UPGRADE_DESCRIPTION": "保留 NL エンコード中 のカードを手札に戻し、 保留 を付与する。 NL 廃棄" }, "bronze:Boost": { "NAME": "ブースト", - "DESCRIPTION": " !B! ブロックを得る。 NL bronze:コンパイル - 筋力 !M! を得る。", + "DESCRIPTION": "!B! ブロックを得る。 NL bronze:コンパイル - 筋力 !M! を得る。", "EXTENDED_DESCRIPTION": [ "燃料", "加速" @@ -51,17 +51,17 @@ }, "bronze:Branch": { "NAME": "ブランチ", - "DESCRIPTION": " !D! ダメージ または !B! ブロックを得る。 NL 選ばれなかった効果を bronze:エンコード する。 NL 廃棄", + "DESCRIPTION": "!D! ダメージ または !B! ブロックを得る。 NL 選ばれなかった効果を bronze:エンコード する。 NL 廃棄", "EXTENDED_DESCRIPTION": [ "ブランチ: アタック", - " !D! ダメージを与える。", + "!D! ダメージを与える。", "ブランチ: ブロック", - " !B! ブロックを得る。" + "!B! ブロックを得る。" ] }, "bronze:Break": { "NAME": "ブレーク", - "DESCRIPTION": " !D! ダメージを与える。 NL bronze:コンパイル *エラー NL bronze:インサート : *火傷 と *負傷 と *粘液", + "DESCRIPTION": "!D! ダメージを与える。 NL bronze:コンパイル *エラー NL 手札に *眩暈、 *粘液 、 *負傷 、 *火傷 、 *空虚 を加える。", "EXTENDED_DESCRIPTION": [ "ブロークン", "スマッシュ" @@ -69,7 +69,7 @@ }, "bronze:BronzeArmor": { "NAME": "ブロンズアーマー", - "DESCRIPTION": " !bauto! アーティファクト を得る。 NL bronze:コンパイル *エラー NL 敵全体に !M! ブロック を付与。", + "DESCRIPTION": "!bauto! アーティファクト を得る。 NL bronze:コンパイル *エラー NL 敵全体に !M! ブロック を付与。", "EXTENDED_DESCRIPTION": [ "ブロンズ", "アーマー" @@ -81,8 +81,8 @@ }, "bronze:BugBarrage": { "NAME": "バグ弾幕", - "DESCRIPTION": "*負傷 を手札に加える。 NL 手札の 状態異常 を bronze:循環 させて、1枚につき !D! ダメージを与える。", - "UPGRADE_DESCRIPTION": "!M! *負傷 を手札に加える。 NL 手札の 状態異常 を bronze:循環 させて、1枚につき !D! ダメージを与える。", + "DESCRIPTION": "!M! 枚の *負傷 を手札に加える。 NL 手札の 状態異常 を bronze:循環 させて、1枚につき !D! ダメージを与える。", + "UPGRADE_DESCRIPTION": "!M! 枚の *負傷 を手札に加える。 NL 手札の 状態異常 を bronze:循環 させて、1枚につき !D! ダメージを与える。", "EXTENDED_DESCRIPTION": [ " NL ( ", " 回)" @@ -106,7 +106,7 @@ }, "bronze:ChildClass": { "NAME": "呼出", - "DESCRIPTION": " !B! ブロックを得る。 NL bronze:コンパイル - エンコードに使用する全てのカードの合計コストと同量の [E] を得る。", + "DESCRIPTION": "!B! ブロックを得る。 NL bronze:コンパイル - エンコードに使用する全てのカードの合計コストと同量の [E] を得る。", "EXTENDED_DESCRIPTION": [ "呼出", "エナ" @@ -114,7 +114,7 @@ }, "bronze:ChosenStrike": { "NAME": "カルティストストライク", - "DESCRIPTION": " !D! ダメージを与える。 NL bronze:コンパイル - このカードのダメージが永久的に !M! 上昇。", + "DESCRIPTION": "!D! ダメージを与える。 NL bronze:コンパイル - このカードのダメージが永久的に !M! 上昇。", "EXTENDED_DESCRIPTION": [ "カルト", "カー" @@ -127,16 +127,16 @@ "bronze:CleanCode": { "NAME": "コード清書", "DESCRIPTION": "*エンコード 時 、 *コンパイルエラー を !M! 回 取り除く。", - "UPGRADE_DESCRIPTION": "天賦 NL *エンコード 時 、 *コンパイルエラー を !M! 回 取り除く。" + "UPGRADE_DESCRIPTION": "天賦 NL *エンコード 時 、 *コンパイルエラー を !M! 回 取り除く。" }, "bronze:CloningBeam": { "NAME": "競合をマージ", - "DESCRIPTION": " !D! ダメージを与える。 NL 次にカードを bronze:エンコード する時そのコピーを bronze:エンコード する。 NL 廃棄", - "UPGRADE_DESCRIPTION": " !D! ダメージを与える。 NL 次にカードを bronze:エンコード する時そのコピーを bronze:エンコード する。" + "DESCRIPTION": "!D! ダメージを与える。 NL 次にカードを bronze:エンコード する時そのコピーを bronze:エンコード する。 NL 廃棄", + "UPGRADE_DESCRIPTION": "!D! ダメージを与える。 NL 次にカードを bronze:エンコード する時そのコピーを bronze:エンコード する。" }, "bronze:Constructor": { "NAME": "コンストラクター", - "DESCRIPTION": " !B! ブロックを得る。 \u202F もし1枚目の *エンコード カードだったらそのブロックを !M! 上昇させる。", + "DESCRIPTION": "!B! ブロックを得る。 \u202F もし1枚目の *エンコード カードだったらそのブロックを !M! 上昇させる。", "EXTENDED_DESCRIPTION": [ "ビルド", "悲しい", @@ -150,7 +150,7 @@ }, "bronze:CutThrough": { "NAME": "カットスルー", - "DESCRIPTION": " !D! ダメージを与える。 NL 占術 !M! NL bronze:コンパイル - カードを !bauto! 引く。", + "DESCRIPTION": "!D! ダメージを与える。 NL 占術 !M! NL bronze:コンパイル - カードを !bauto! 引く。", "EXTENDED_DESCRIPTION": [ "スルー", "カット" @@ -158,7 +158,7 @@ }, "bronze:DarkDash": { "NAME": "ダークダッシュ", - "DESCRIPTION": " !B! ブロックを得る。 NL !D! ダメージを与える。 NL bronze:コンパイル *エラー NL bronze:インサート : *空虚", + "DESCRIPTION": "!B! ブロックを得る。 NL !D! ダメージを与える。 NL bronze:コンパイル *エラー NL bronze:インサート : *空虚", "EXTENDED_DESCRIPTION": [ "ダーク", "走" @@ -166,7 +166,7 @@ }, "bronze:Defend": { "NAME": "防御", - "DESCRIPTION": " !B! ブロックを得る。", + "DESCRIPTION": "!B! ブロックを得る。", "EXTENDED_DESCRIPTION": [ "防ぐ", "防御" @@ -182,8 +182,8 @@ }, "bronze:DelayedSlice": { "NAME": "ロボチョップ", - "DESCRIPTION": " !D! ダメージを与える。 NL 次のターン追加で !M! 枚のカードを引く。", - "UPGRADE_DESCRIPTION": " !D! ダメージを与える。 NL 次のターン追加で !M! 枚のカードを引く。", + "DESCRIPTION": "!D! ダメージを与える。 NL 次のターン追加で !M! 枚のカードを引く。", + "UPGRADE_DESCRIPTION": "!D! ダメージを与える。 NL 次のターン追加で !M! 枚のカードを引く。", "EXTENDED_DESCRIPTION": [ "ロボ", "手刀" @@ -199,7 +199,7 @@ }, "bronze:DigitalCarnage": { "NAME": "デジタル大虐殺", - "DESCRIPTION": " !D! ダメージを与える。 NL bronze:コンパイル *エラー NL ファンクションに エセリアル が付く。", + "DESCRIPTION": "!D! ダメージを与える。 NL bronze:コンパイル *エラー NL ファンクションに エセリアル が付く。", "EXTENDED_DESCRIPTION": [ "デジタル", "虐殺" @@ -207,8 +207,8 @@ }, "bronze:FindAndReplace": { "NAME": "見つけて置換", - "DESCRIPTION": "あなたの山札か捨て札からカードを選んで1枚引く。 NL 元の場所に *めまい を加える。 NL 廃棄", - "UPGRADE_DESCRIPTION": "あなたの山札か捨て札からカードを選んで1枚引く。 NL 廃棄", + "DESCRIPTION": "あなたの山札か捨て札から 1 枚のカードを選び、手札に加える。 NL 元の場所に *めまい を加える。 NL 廃棄", + "UPGRADE_DESCRIPTION": "あなたの山札か捨て札から 1 枚のカードを選び、手札に加える。 NL 廃棄", "EXTENDED_DESCRIPTION": [ "選択" ] @@ -228,7 +228,7 @@ }, "bronze:FollowUp": { "NAME": "フォロースルー", - "DESCRIPTION": " !B! ブロックを得る。 NL !D! ダメージを与える。 NL 最後にプレイしたカードが ファンクション だった場合、もう一度繰り返す。" + "DESCRIPTION": "!B! ブロックを得る。 NL !D! ダメージを与える。 NL 最後にプレイしたカードが ファンクション だった場合、もう一度繰り返す。" }, "bronze:ForceShield": { "NAME": "フォースシールド", @@ -246,7 +246,7 @@ }, "bronze:FormatEncoded": { "NAME": "フラグメント", - "DESCRIPTION": " !B! ブロックを得る。 NL !D! ダメージを与える。", + "DESCRIPTION": "!B! ブロックを得る。 NL !D! ダメージを与える。", "EXTENDED_DESCRIPTION": [ "清浄", "欠片" @@ -254,7 +254,7 @@ }, "bronze:Fortify": { "NAME": "要塞化", - "DESCRIPTION": " !D! ダメージを与える。 NL bronze:コンパイル - 敏捷性 !M! を得る。", + "DESCRIPTION": "!D! ダメージを与える。 NL bronze:コンパイル - 敏捷性 !M! を得る。", "EXTENDED_DESCRIPTION": [ "要塞", "化" @@ -262,7 +262,7 @@ }, "bronze:Frontload": { "NAME": "フロントロード", - "DESCRIPTION": " !B! ブロックを得る。 NL bronze:コンパイル - ファンクションが 保留 を得る。", + "DESCRIPTION": "!B! ブロックを得る。 NL bronze:コンパイル - ファンクションが 保留 を得る。", "EXTENDED_DESCRIPTION": [ "頑丈", "壁" @@ -309,7 +309,7 @@ }, "bronze:InfiniteLoop": { "NAME": "無限ループ", - "DESCRIPTION": " !D! ダメージを与える。 NL bronze:コンパイル - これのコピーを1枚獲得してダメージを !M! 増加させる。", + "DESCRIPTION": "!D! ダメージを与える。 NL bronze:コンパイル - これのコピーを1枚獲得してダメージを !M! 増加させる。", "UPGRADE_DESCRIPTION": "保留 NL !D! ダメージを与える。 NL bronze:コンパイル - これのコピーを1枚獲得してダメージを !M! 増加させる。", "EXTENDED_DESCRIPTION": [ "無限", @@ -334,8 +334,7 @@ }, "bronze:ItsAFeature": { "NAME": "機能の一つ", - "DESCRIPTION": "呪い または 状態異常 カードを引いた時、一時的な 筋力 と 敏捷性 を1得る。", - "UPGRADE_DESCRIPTION": "天賦 NL 呪い または 状態異常 カードを引いた時、一時的な 筋力 と 敏捷性 を1得る。" + "DESCRIPTION": "状態異常 カードを引いた時、または *廃棄 した時 !M! ブロックを得る。" }, "bronze:Library": { "NAME": "ライブラリ", @@ -347,12 +346,12 @@ }, "bronze:Mutator": { "NAME": "変異体", - "DESCRIPTION": "筋力 1 を得る。 NL 状態異常 をこのカードのコピーに変身させる。", - "UPGRADE_DESCRIPTION": "保留 NL 筋力 1 を得る。 NL 状態異常 をこのカードのコピーに変身させる。" + "DESCRIPTION": "筋力 !M! を得る。 NL 手札の *状態異常 をこのカードのコピーに *変身 させる。", + "UPGRADE_DESCRIPTION": "保留 NL 筋力 !M! を得る。 NL 手札の *状態異常 をこのカードのコピーに *変身 させる。" }, "bronze:NullPointer": { "NAME": "Null Pointer", - "DESCRIPTION": " !B! ブロックを得る。 NL !D! ダメージを与える。 NL bronze:コンパイル *エラー NL ファンクションに 使用不可 が付く。", + "DESCRIPTION": "!B! ブロックを得る。 NL !D! ダメージを与える。 NL bronze:コンパイル *エラー NL ファンクションに 使用不可 が付く。", "EXTENDED_DESCRIPTION": [ "null", "ポ" @@ -360,7 +359,7 @@ }, "bronze:OilSpill": { "NAME": "オイル漏れ", - "DESCRIPTION": " !D! ダメージと 毒 !M! を与える。 NL bronze:コンパイル *エラー NL bronze:インサート : *粘液", + "DESCRIPTION": "!D! ダメージと 毒 !M! を与える。 NL bronze:コンパイル *エラー NL bronze:インサート : *粘液", "EXTENDED_DESCRIPTION": [ "油塗れ", "漏れた" @@ -372,7 +371,7 @@ }, "bronze:Overheat": { "NAME": "熱暴走", - "DESCRIPTION": " !D! ダメージを与える。 NL 次の *コンパイルエラー を *エンコード から削除する。" + "DESCRIPTION": "!D! ダメージを与える。 NL 次の *コンパイルエラー を *エンコード から削除する。" }, "bronze:Overload": { "NAME": "コピーペースト", @@ -389,8 +388,8 @@ }, "bronze:RecursiveStrike": { "NAME": "リ・ストライク", - "DESCRIPTION": " !D! ダメージを !M! 回与える。 NL !M! 枚の *ストライク のコピーを bronze:エンコード する。", - "UPGRADE_DESCRIPTION": " !D! ダメージを !M! 回与える。 NL !M! 枚の *ストライク+ のコピーを bronze:エンコード する。", + "DESCRIPTION": "!D! ダメージを !M! 回与える。 NL !M! 枚の *ストライク のコピーを bronze:エンコード する。", + "UPGRADE_DESCRIPTION": "!D! ダメージを !M! 回与える。 NL !M! 枚の *ストライク+ のコピーを bronze:エンコード する。", "EXTENDED_DESCRIPTION": [ "回帰", "スト" @@ -398,11 +397,11 @@ }, "bronze:Refactor": { "NAME": "リファクタ", - "DESCRIPTION": "占術 !M! NL 占術で捨てたカードを全て *廃棄 する NL 状態異常カード1枚につき !B! ブロックを得る。" + "DESCRIPTION": "占術 !M! NL 占術で捨てた 状態異常 カードを全て *廃棄 する。 NL 廃棄した状態異常カード1枚につき !B! ブロックを得る。" }, "bronze:Repair": { "NAME": "リペア", - "DESCRIPTION": " !B! ブロックを得る。 NL bronze:コンパイル - HPを !M! 回復。", + "DESCRIPTION": "!B! ブロックを得る。 NL bronze:コンパイル - HPを !M! 回復。", "EXTENDED_DESCRIPTION": [ "鍛冶屋", "レンチ" @@ -410,7 +409,7 @@ }, "bronze:Replicate": { "NAME": "レプリケート", - "DESCRIPTION": " !D! ダメージを与える。 \u202F *エンコード したらこれのコピーを捨て札に加える。", + "DESCRIPTION": "!D! ダメージを与える。 \u202F NL *エンコード したらこれのコピーを捨て札に加える。", "EXTENDED_DESCRIPTION": [ "複製", "コピー" @@ -428,7 +427,7 @@ }, "bronze:Safeguard": { "NAME": "セーフガード", - "DESCRIPTION": " !B! ブロックを得る。", + "DESCRIPTION": "!B! ブロックを得る。", "EXTENDED_DESCRIPTION": [ "セーフ", "ガード" @@ -436,7 +435,7 @@ }, "bronze:Separator": { "NAME": "セパレータ", - "DESCRIPTION": " !D! ダメージを与える。 \u202F bronze:エンコード の中央に使用された時、そのダメージを !M! 上昇させる。", + "DESCRIPTION": "!D! ダメージを与える。 \u202F bronze:エンコード の中央に使用された時、そのダメージを !M! 上昇させる。", "EXTENDED_DESCRIPTION": [ "分離", "チルド" @@ -444,8 +443,8 @@ }, "bronze:Shell": { "NAME": "ブロックチェーン", - "DESCRIPTION": " !M! bronze:ブラー を得る。", - "UPGRADE_DESCRIPTION": " !M! bronze:ブラー を得る。 NL bronze:コンパイル - !M! bronze:ブラー を得る。", + "DESCRIPTION": "!M! bronze:ブラー を得る。", + "UPGRADE_DESCRIPTION": "!M! bronze:ブラー を得る。 NL bronze:コンパイル - !M! bronze:ブラー を得る。", "EXTENDED_DESCRIPTION": [ "ブロック", "チェーン" @@ -453,7 +452,7 @@ }, "bronze:Shield": { "NAME": "粘着シールド", - "DESCRIPTION": " !B! ブロックを得る。 NL bronze:インサート : *粘液", + "DESCRIPTION": "保留 NL !B! ブロックを得る。 NL bronze:インサート : *粘液", "EXTENDED_DESCRIPTION": [ "粘着質", "シールド" @@ -461,7 +460,11 @@ }, "bronze:ShipIt": { "NAME": "出荷", - "DESCRIPTION": " !D! ダメージを与える。 NL 全ての 状態異常 の数 * !M! の追加ダメージ。" + "DESCRIPTION": "!D! ダメージを与える。 NL 廃棄札にある 状態異常 カードの枚数だけ繰り返す。", + "EXTENDED_DESCRIPTION": [ + "!D! ダメージを与える。 NL 廃棄札にある 状態異常 カードの枚数だけ繰り返す。 (", + " 枚)" + ] }, "bronze:SpaghettiCode": { "NAME": "スパゲティコード", @@ -470,7 +473,7 @@ }, "bronze:Strike": { "NAME": "ストライク", - "DESCRIPTION": " !D! ダメージを与える。", + "DESCRIPTION": "!D! ダメージを与える。", "EXTENDED_DESCRIPTION": [ "シンプル", "ストライク" @@ -513,8 +516,8 @@ }, "bronze:Virus": { "NAME": "ウィルス", - "DESCRIPTION": "保留 NL !D! ダメージを与える。 NL 手札のカードを全て *マイナービーム に *変換 する。 NL 廃棄", - "UPGRADE_DESCRIPTION": "保留 NL !D! ダメージを与える。 NL 手札のカードを全て *マイナービーム+ に *変換 する。 NL 廃棄" + "DESCRIPTION": "!D! ダメージを与える。 NL 手札を全て捨て、同数の *マイナービーム を手札に加える。 NL 廃棄", + "UPGRADE_DESCRIPTION": "!D! ダメージを与える。 NL 手札を全て捨て、同数の *マイナービーム+ を手札に加える。 NL 廃棄" }, "bronze:WhirlingStrike": { "NAME": "ピアッシングショット", @@ -526,7 +529,7 @@ }, "bronze:WildBeam": { "NAME": "浄化", - "DESCRIPTION": " !D! ダメージを与える。 NL 山札のランダムな 状態異常 カードを廃棄する。", + "DESCRIPTION": "!D! ダメージを与える。 NL 山札のランダムな 状態異常 カードを廃棄する。", "EXTENDED_DESCRIPTION": [ "野生", "ビーム" @@ -534,7 +537,7 @@ }, "bronze:WildStrike": { "NAME": "ワイルドストライク", - "DESCRIPTION": " !D! ダメージを与える。 NL bronze:インサート : *負傷" + "DESCRIPTION": "!D! ダメージを与える。 NL bronze:インサート : *負傷" }, @@ -548,7 +551,7 @@ }, "bronze:BranchBlock": { "NAME": "ブランチ:ブロック", - "DESCRIPTION": " !B! ブロックを得る。", + "DESCRIPTION": "!B! ブロックを得る。", "EXTENDED_DESCRIPTION": [ "フォーク", "ブランチ" @@ -556,7 +559,7 @@ }, "bronze:BranchHit": { "NAME": "ブランチ:アタック", - "DESCRIPTION": " !D! ダメージを与える。", + "DESCRIPTION": "!D! ダメージを与える。", "EXTENDED_DESCRIPTION": [ "フォーク", "ブランチ" @@ -569,7 +572,7 @@ }, "bronze:DazingPulse": { "NAME": "眩暈する波動", - "DESCRIPTION": " !B! ブロックを得る。 NL !D! ダメージを与える。 NL bronze:コンパイル *エラー NL bronze:インサート : !M! *めまい", + "DESCRIPTION": "!B! ブロックを得る。 NL !D! ダメージを与える。 NL bronze:コンパイル *エラー NL bronze:インサート : !M! *めまい", "EXTENDED_DESCRIPTION": [ "眩暈がする", "パルス" @@ -581,7 +584,7 @@ }, "bronze:DecaBeam": { "NAME": "プロトシールド", - "DESCRIPTION": " !B! ブロックを得る。 NL bronze:コンパイル - *プレートアーマー !M! 。 bronze:インサート : !bauto! *めまい", + "DESCRIPTION": "!B! ブロックを得る。 NL bronze:コンパイル - *プレートアーマー !M! 。 bronze:インサート : !bauto! *めまい", "EXTENDED_DESCRIPTION": [ "ジャギー", "バリア" @@ -594,7 +597,7 @@ }, "bronze:DonuBeam": { "NAME": "プロトビーム", - "DESCRIPTION": " !D! ダメージを !M! 回与える。 NL bronze:コンパイル - 筋力 !M! を得る。", + "DESCRIPTION": "!D! ダメージを !M! 回与える。 NL bronze:コンパイル - 筋力 !M! を得る。", "EXTENDED_DESCRIPTION": [ "スムーズな", "ブラスト" @@ -619,7 +622,7 @@ }, "bronze:MinorBeam": { "NAME": "マイナービーム", - "DESCRIPTION": " !D! ダメージを与える。", + "DESCRIPTION": "!D! ダメージを与える。", "EXTENDED_DESCRIPTION": [ "マイナー", "傷付" @@ -627,7 +630,7 @@ }, "bronze:Spike": { "NAME": "スパイク", - "DESCRIPTION": " !D! ダメージを与える。 NL bronze:コンパイル - トゲ !M! を得る。", + "DESCRIPTION": "!D! ダメージを与える。 NL bronze:コンパイル - トゲ !M! を得る。", "EXTENDED_DESCRIPTION": [ "刺々", "刺さる" @@ -635,12 +638,12 @@ }, "bronze:Ignite": { "NAME": "発火", - "DESCRIPTION": " !M! hexamod:ソウルバーン を与える。 NL ターン終了時に手札にある場合、 2 ダメージを受ける。", - "UPGRADE_DESCRIPTION": " !M! hexamod:ソウルバーン を与える。 NL ターン終了時に手札にある場合、 4 ダメージを受ける。" + "DESCRIPTION": "!M! hexamod:ソウルバーン を与える。 NL ターン終了時に手札にある場合、 2 ダメージを受ける。", + "UPGRADE_DESCRIPTION": "!M! hexamod:ソウルバーン を与える。 NL ターン終了時に手札にある場合、 4 ダメージを受ける。" }, "bronze:IntoTheVoid": { "NAME": "虚空へ", - "DESCRIPTION": "エセリアル NL 敵はこのターン 筋力 !M! を失う。 NL ドローした時 1 [E] を失う。 NL 廃棄" + "DESCRIPTION": "エセリアル NL 敵はこのターン 筋力 !M! を失う。 NL このカードをドローした時、 [E] を失う。 NL 廃棄" }, "bronze:Lubricant": { "NAME": "潤滑油", @@ -656,6 +659,6 @@ }, "bronze:UnknownStatus": { "NAME": "幻惑", - "DESCRIPTION": " !B! ブロックを得る。" + "DESCRIPTION": "!B! ブロックを得る。" } } diff --git a/src/main/resources/bronzeResources/localization/jpn/PowerStrings.json b/src/main/resources/bronzeResources/localization/jpn/PowerStrings.json index 0a01b9eef..acadb0d16 100644 --- a/src/main/resources/bronzeResources/localization/jpn/PowerStrings.json +++ b/src/main/resources/bronzeResources/localization/jpn/PowerStrings.json @@ -18,9 +18,8 @@ "bronze:Feature": { "NAME": "機能の一つ", "DESCRIPTIONS": [ - " #r呪い または #y状態異常 をドローした時、一時的な #y筋力 #b", - " と一時的な #y敏捷性 #b", - " を得る。" + "#y状態異常 をドローまたは #y廃棄 した時、 #b", + " ブロックを得る。" ] }, "bronze:InfiniteBeams": { @@ -30,7 +29,7 @@ "ターン開始時 #yマイナービーム+ を #b1 枚手札に加える。", "ターン開始時 #yマイナービーム を #b", " 枚手札に加える。", - "ターン開始時 #yマイナービーム を #b", + "ターン開始時 #yマイナービーム+ を #b", " 枚手札に加える。" ] }, diff --git a/src/main/resources/bronzeResources/localization/kor/CardStrings.json b/src/main/resources/bronzeResources/localization/kor/CardStrings.json index 7ac6598ed..a9392884d 100644 --- a/src/main/resources/bronzeResources/localization/kor/CardStrings.json +++ b/src/main/resources/bronzeResources/localization/kor/CardStrings.json @@ -191,7 +191,7 @@ }, "bronze:Shield": { "NAME": "끈적이 방패", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL *점액투성이를 1장 bronze:투입합니다.", + "DESCRIPTION": "보존. NL 방어도를 !B! 얻습니다. NL *점액투성이를 1장 bronze:투입합니다.", "EXTENDED_DESCRIPTION": [ "끈적이", "방패" @@ -301,8 +301,8 @@ }, "bronze:Virus": { "NAME": "바이러스", - "DESCRIPTION": "보존. NL 피해를 !D! 줍니다. NL 손에 있는 모든 카드를 *소형 *광선으로 sneckomod:변화시킵니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "보존. NL 피해를 !D! 줍니다. NL 손에 있는 모든 카드를 *소형 *광선+으로 sneckomod:변화시킵니다. NL 소멸." + "DESCRIPTION": "피해를 !D! 줍니다. NL 카드를 전부 버립니다. NL 버린 카드 한 장당 *소형 *광선을 얻습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL 카드를 전부 버립니다. NL 버린 카드 한 장당 *소형 *광선+을 얻습니다. NL 소멸." }, "bronze:Backtrace": { "NAME": "역추적", @@ -344,8 +344,7 @@ }, "bronze:ItsAFeature": { "NAME": "특징", - "DESCRIPTION": "상태이상 또는 저주를 뽑을 때마다 힘 과 민첩을 1 얻습니다. 이번 턴 종료 시 이 효과로 얻은 힘 과 민첩을 잃습니다.", - "UPGRADE_DESCRIPTION": "선천성. NL 상태이상 또는 저주를 뽑을 때마다 힘 과 민첩을 1 얻습니다. 이번 턴 종료 시 이 효과로 얻은 힘 과 민첩을 잃습니다." + "DESCRIPTION": "상태이상을 뽑거나 소멸시킬 때마다 방어도를 !M! 얻습니다." }, "bronze:MinorBeam": { "NAME": "소형 광선", @@ -370,8 +369,8 @@ }, "bronze:Mutator": { "NAME": "돌연변이", - "DESCRIPTION": "힘을 1 얻습니다. NL 손에 있는 상태이상을 이 카드로 sneckomod:변화시킵니다.", - "UPGRADE_DESCRIPTION": "보존. NL 힘을 1 얻습니다. NL 손에 있는 상태이상을 이 카드로 sneckomod:변화시킵니다." + "DESCRIPTION": "힘을 !M! 얻습니다. NL 손에 있는 상태이상을 이 카드로 sneckomod:변화시킵니다.", + "UPGRADE_DESCRIPTION": "보존. NL 힘을 !M! 얻습니다. NL 손에 있는 상태이상을 이 카드로 sneckomod:변화시킵니다." }, "bronze:Allocate": { "NAME": "배정", @@ -462,11 +461,15 @@ }, "bronze:ShipIt": { "NAME": "출하", - "DESCRIPTION": "피해를 !D! 줍니다. NL bronze:소유한 상태이상 한 장당 이 카드의 피해량이 !M! 증가합니다." + "DESCRIPTION": "피해를 !D! 줍니다. NL 소멸된 카드 더미에 있는 상태이상 한 장당 반복합니다.", + "EXTENDED_DESCRIPTION": [ + "피해를 !D! 줍니다. NL 소멸된 카드 더미에 있는 상태이상 한 장당 반복합니다. (", + ")." + ] }, "bronze:Break": { "NAME": "일시 정지", - "DESCRIPTION": "피해를 !D! 줍니다. NL bronze:컴파일 *오류 - *부상, *화상, *점액투성이를 bronze:투입합니다.", + "DESCRIPTION": "피해를 !D! 줍니다. NL bronze:컴파일 *오류 - *어지러움, *부상, *화상, *점액투성이, *공허를 bronze:투입합니다.", "EXTENDED_DESCRIPTION": [ "고장난", "주먹" @@ -583,7 +586,7 @@ }, "bronze:Refactor": { "NAME": "리팩터", - "DESCRIPTION": "예지 !M!. NL *예지로 버린 카드를 모두 소멸시킵니다. NL 소멸시킨 상태이상 한 장당 방어도를 !B! 얻습니다." + "DESCRIPTION": "예지 !M!. NL *예지로 버린 상태이상을 모두 소멸시킵니다. NL 소멸시킨 상태이상 한 장당 방어도를 !B! 얻습니다." }, "bronze:Turbo": { "NAME": "터보", @@ -592,7 +595,7 @@ }, "bronze:BugBarrage": { "NAME": "버그 방벽", - "DESCRIPTION": "*부상을 1장 얻습니다. NL 손에 있는 상태이상을 모두 bronze:순환하고 bronze:순환된 카드 한 장당 피해를 !D! 줍니다.", + "DESCRIPTION": "*부상을 !M! 장 얻습니다. NL 손에 있는 상태이상을 모두 bronze:순환하고 bronze:순환된 카드 한 장당 피해를 !D! 줍니다.", "UPGRADE_DESCRIPTION": "*부상을 !M! 장 얻습니다. NL 손에 있는 상태이상을 모두 bronze:순환하고 bronze:순환된 카드 한 장당 피해를 !D! 줍니다.", "EXTENDED_DESCRIPTION": [ " NL (피해를 ", diff --git a/src/main/resources/bronzeResources/localization/kor/PowerStrings.json b/src/main/resources/bronzeResources/localization/kor/PowerStrings.json index 6ef51be2d..b7a457552 100644 --- a/src/main/resources/bronzeResources/localization/kor/PowerStrings.json +++ b/src/main/resources/bronzeResources/localization/kor/PowerStrings.json @@ -18,8 +18,7 @@ "bronze:Feature": { "NAME": "특징", "DESCRIPTIONS": [ - "#r저주 또는 #r상태이상 카드를 뽑을 때마다 일시적으로 #y힘을 #b", - " 얻고 일시적으로 #y민첩을 #b", + "#y상태이상을 뽑거나 #y소멸시킬 때마다 #y방어도를 #b", " 얻습니다." ] }, diff --git a/src/main/resources/bronzeResources/localization/ptb/CardStrings.json b/src/main/resources/bronzeResources/localization/ptb/CardStrings.json index 95bcb41e2..e311cfc39 100644 --- a/src/main/resources/bronzeResources/localization/ptb/CardStrings.json +++ b/src/main/resources/bronzeResources/localization/ptb/CardStrings.json @@ -347,8 +347,8 @@ }, "bronze:Mutator": { "NAME": "Mutador", - "DESCRIPTION": "Ganhe 1 Força. NL Transforme um Estado em uma cópia disso.", - "UPGRADE_DESCRIPTION": "Mantenha. NL Ganhe 1 Força. NL Transforme um Estado em uma cópia disso." + "DESCRIPTION": "Ganhe !M! Força. NL Transforme um Estado em uma cópia disso.", + "UPGRADE_DESCRIPTION": "Mantenha. NL Ganhe !M! Força. NL Transforme um Estado em uma cópia disso." }, "bronze:NullPointer": { "NAME": "Ponteiro Nulo", diff --git a/src/main/resources/bronzeResources/localization/rus/CardStrings.json b/src/main/resources/bronzeResources/localization/rus/CardStrings.json index 05ce58d9c..06be44637 100644 --- a/src/main/resources/bronzeResources/localization/rus/CardStrings.json +++ b/src/main/resources/bronzeResources/localization/rus/CardStrings.json @@ -347,8 +347,8 @@ }, "bronze:Mutator": { "NAME": "Мутатор", - "DESCRIPTION": "Даёт 1 Силы. NL Вы Преобразуете Статус в руке в копию этой карты.", - "UPGRADE_DESCRIPTION": "Оставляется. NL Даёт 1 Силы. NL Вы Преобразуете Статус в руке в копию этой карты." + "DESCRIPTION": "Даёт !M! Силы. NL Вы Преобразуете Статус в руке в копию этой карты.", + "UPGRADE_DESCRIPTION": "Оставляется. NL Даёт !M! Силы. NL Вы Преобразуете Статус в руке в копию этой карты." }, "bronze:NullPointer": { "NAME": "Нулевой указатель", diff --git a/src/main/resources/bronzeResources/localization/spa/CardStrings.json b/src/main/resources/bronzeResources/localization/spa/CardStrings.json new file mode 100644 index 000000000..a6d252a1f --- /dev/null +++ b/src/main/resources/bronzeResources/localization/spa/CardStrings.json @@ -0,0 +1,660 @@ +{ + "bronze:Allocate": { + "NAME": "Asignar", + "DESCRIPTION": "Gana [E] por cada Estado en tu pila de robo.", + "EXTENDED_DESCRIPTION": [ + " NL (Gana ", + " [E] .)" + ] + }, + "bronze:AlphaBuild": { + "NAME": "Acceso Anticipado", + "DESCRIPTION": "Haz !D! de daño. NL bronze:Inserta Estado aleatorio. NL bronze:Compilar - bronze:Inserta *Construcción *Beta.", + "UPGRADE_DESCRIPTION": "Innata. NL Haz !D! de daño. NL bronze:Inserta Estado aleatorio. NL bronze:Compilar - bronze:Inserta *Construcción *Beta.", + "EXTENDED_DESCRIPTION": [ + "rudimentario", + "Alfa" + ] + }, + "bronze:Assembly": { + "NAME": "Ensamblar", + "DESCRIPTION": "Adivina !M!. NL bronze:Codifica todas las cartas *Codificables descartadas (en el orden seleccionado). NL Agota." + }, + "bronze:Backtrace": { + "NAME": "Retroceso", + "DESCRIPTION": "Innata. NL Haz !D! de daño. NL bronze:Compilar *Error - La función se agota.", + "EXTENDED_DESCRIPTION": [ + "sigiloso", + "Rastro" + ] + }, + "bronze:BetaBuild": { + "NAME": "Construcción Beta", + "DESCRIPTION": "Gana !B! de Bloqueo. NL bronze:Inserta Estado aleatorio. NL bronze:Compilar - bronze:Inserta *Lanzamiento *Completo.", + "EXTENDED_DESCRIPTION": [ + "temprana", + "Beta" + ] + }, + "bronze:BitShift": { + "NAME": "Cambio de Bit", + "DESCRIPTION": "Elige una carta Codificada para devolver a tu mano. NL Gana Retiene. NL Agota.", + "UPGRADE_DESCRIPTION": "Retiene. NL Elige una carta Codificada para devolver a tu mano. NL Gana Retiene. NL Agota." + }, + "bronze:Boost": { + "NAME": "Impulso", + "DESCRIPTION": "Gana !B! de Bloqueo. NL bronze:Compilar - Gana !M! de Fuerza.", + "EXTENDED_DESCRIPTION": [ + "potenciado", + "Impulso" + ] + }, + "bronze:Branch": { + "NAME": "Rama", + "DESCRIPTION": "Haz !D! de daño o gana !B! de Bloqueo. NL La opción no elegida se bronze:Codifica. NL Agota.", + "EXTENDED_DESCRIPTION": [ + "Rama: Ataque", + "Haz !D! de daño.", + "Rama: Bloqueo", + "Gana !B! de Bloqueo." + ] + }, + "bronze:Break": { + "NAME": "Romper", + "DESCRIPTION": "Haz !D! de daño. NL bronze:Compilar *Error - Gana un *Aturdido, *Viscoso, *Herida, *Quemadura, *Vacío.", + "EXTENDED_DESCRIPTION": [ + "roto", + "Golpe" + ] + }, + "bronze:BronzeArmor": { + "NAME": "Armadura de Bronce", + "DESCRIPTION": "Gana !bauto! Artefacto. NL bronze:Compilar *Error - TODOS los enemigos ganan !M! de Bloqueo.", + "EXTENDED_DESCRIPTION": [ + "bronce", + "Armadura" + ] + }, + "bronze:BronzeOrb": { + "NAME": "Orbe de Bronce", + "DESCRIPTION": "Innata. NL Haz !D! de daño. NL bronze:Codifica una carta aleatoria con *Codificar de tu pila de robo. Agota." + }, + "bronze:BugBarrage": { + "NAME": "Barrida de Errores", + "DESCRIPTION": "Gana !M! *Heridas. NL bronze:Cicla cada Estado, infligiendo !D! de daño por cada uno.", + "UPGRADE_DESCRIPTION": "Gana !M! *Heridas. NL bronze:Cicla cada Estado, infligiendo !D! de daño por cada uno.", + "EXTENDED_DESCRIPTION": [ + " NL (Golpea ", + " veces.)" + ] + }, + "bronze:BuggyMess": { + "NAME": "Código Defectuoso", + "DESCRIPTION": "bronze:Inserta un *Desorientado. NL Gana !M! [E].", + "EXTENDED_DESCRIPTION": [ + "defectuoso", + "Desastre" + ] + }, + "bronze:BurnOut": { + "NAME": "Quemado", + "DESCRIPTION": "Haz !D! de daño a un enemigo aleatorio por TODAS tus cartas de Estado, las agota. NL Agota.", + "EXTENDED_DESCRIPTION": [ + "Haz !D! de daño a un enemigo aleatorio por TODAS tus cartas de Estado (", + "), las agota. NL Agota." + ] + }, + "bronze:ChildClass": { + "NAME": "Invocar", + "DESCRIPTION": "Gana !B! de Bloqueo. NL bronze:Compilar - Gana [E] igual al costo total de las cartas Codificadas.", + "EXTENDED_DESCRIPTION": [ + "invocada", + "Energía" + ] + }, + "bronze:ChosenStrike": { + "NAME": "Golpe del Cultista", + "DESCRIPTION": "Haz !D! de daño. NL bronze:Compilar - Aumenta permanentemente el daño de esta carta en !M!.", + "EXTENDED_DESCRIPTION": [ + "cultista", + "Caw" + ] + }, + "bronze:ClassDefault": { + "NAME": "Clase por Defecto", + "DESCRIPTION": "Las próximas !M! veces que crees una Función, bronze:Codifica una copia de esta carta en la primera ranura." + }, + "bronze:CleanCode": { + "NAME": "Código Limpio", + "DESCRIPTION": "Elimina los próximos !M! *Errores de Compilación que vayas a *Codificar.", + "UPGRADE_DESCRIPTION": "Innata. NL Elimina los próximos !M! *Errores de Compilación que vayas a *Codificar." + }, + "bronze:CloningBeam": { + "NAME": "Conflicto de Fusión", + "DESCRIPTION": "Haz !D! de daño. NL La próxima vez que bronze:Codifica una carta, bronze:Codifica una copia de ella. NL Agota.", + "UPGRADE_DESCRIPTION": "Haz !D! de daño. NL La próxima vez que bronze:Codifica una carta, bronze:Codifica una copia de ella." + }, + "bronze:Constructor": { + "NAME": "Constructor", + "DESCRIPTION": "Gana !B! de Bloqueo. Cuando esté *Codificada como la primera carta, su Bloqueo aumenta en !M!.", + "EXTENDED_DESCRIPTION": [ + "construir", + "Tristeza", + "Grandeza" + ] + }, +"bronze:CopyPaste": { + "NAME": "Copiar y Pegar", + "DESCRIPTION": "Este turno, tu próxima Función se juega dos veces.", + "UPGRADE_DESCRIPTION": "Retiene. NL Este turno, tu próxima Función se juega dos veces." + }, + "bronze:CutThrough": { + "NAME": "Corte Preciso", + "DESCRIPTION": "Haz !D! de daño. NL Adivina !M!. NL bronze:Compilar - Roba !bauto! carta.", + "EXTENDED_DESCRIPTION": [ + "cortante", + "Corte" + ] + }, + "bronze:DarkDash": { + "NAME": "Avance Sombrío", + "DESCRIPTION": "Gana !B! de Bloqueo. NL Haz !D! de daño. NL bronze:Compilar *Error - bronze:Inserta un *Vacío.", + "EXTENDED_DESCRIPTION": [ + "oscuro", + "Avance" + ] + }, + "bronze:Defend": { + "NAME": "Defensa", + "DESCRIPTION": "Gana !B! de Bloqueo.", + "EXTENDED_DESCRIPTION": [ + "básica", + "Defensa" + ] + }, + "bronze:DelayedGuard": { + "NAME": "Guardia Atrasada", + "DESCRIPTION": "En el próximo turno, gana !B! de Bloqueo.", + "EXTENDED_DESCRIPTION": [ + "atrasada", + "Guardia" + ] + }, + "bronze:DelayedSlice": { + "NAME": "Tajo Robótico", + "DESCRIPTION": "Haz !D! de daño. NL En el próximo turno, roba !M! carta adicional.", + "UPGRADE_DESCRIPTION": "Haz !D! de daño. NL En el próximo turno, roba !M! cartas adicionales.", + "EXTENDED_DESCRIPTION": [ + "atrasado", + "Corte" + ] + }, + "bronze:Deprecate": { + "NAME": "Obsoleto", + "DESCRIPTION": "Aplica !M! de Débil.", + "EXTENDED_DESCRIPTION": [ + "antiguo", + "Insulto" + ] + }, + "bronze:DigitalCarnage": { + "NAME": "Carnicería Digital", + "DESCRIPTION": "Haz !D! de daño. NL bronze:Compilar *Error - La Función es Etérea.", + "EXTENDED_DESCRIPTION": [ + "digital", + "Carnicería" + ] + }, + "bronze:FindAndReplace": { + "NAME": "Buscar y Reemplazar", + "DESCRIPTION": "Busca una carta de tu pila de robo o de descarte. NL Agrega un *Desorientado donde estaba. NL Agota.", + "UPGRADE_DESCRIPTION": "Busca una carta de tu pila de robo o de descarte. NL Agota.", + "EXTENDED_DESCRIPTION": [ + "Elige." + ] + }, + "bronze:FineTuning": { + "NAME": "Ajuste Fino", + "DESCRIPTION": "Aumenta todos los valores numéricos de las cartas Codificadas en !M!, excepto el costo. NL Agota.", + "UPGRADE_DESCRIPTION": "Retiene. NL Aumenta todos los valores numéricos de las cartas Codificadas en !M!, excepto el costo. NL Agota." + }, + "bronze:Flail": { + "NAME": "Golpe en Cadena", + "DESCRIPTION": "Haz !D! de daño a TODOS los enemigos !bauto! veces. NL Gana !M! Artefacto. NL Agota.", + "EXTENDED_DESCRIPTION": [ + "encadenado", + "Golpe" + ] + }, + "bronze:FollowUp": { + "NAME": "Continuar", + "DESCRIPTION": "Gana !B! de Bloqueo. NL Haz !D! de daño. NL Si la última carta jugada fue una Función, juega esta de nuevo." + }, + "bronze:ForceShield": { + "NAME": "Escudo de Fuerza", + "DESCRIPTION": "Cuesta 1 [E] menos por cada Función creada en este combate. NL Gana !B! de Bloqueo." + }, + "bronze:ForLoop": { + "NAME": "Bucle For", + "DESCRIPTION": "La próxima carta que bronze:Codifiques genera X copias adicionales que también se bronze:Codifican. NL Agota.", + "UPGRADE_DESCRIPTION": "La próxima carta que bronze:Codifiques genera X+1 copias adicionales que también se bronze:Codifican. NL Agota." + }, + "bronze:Format": { + "NAME": "Formatear", + "DESCRIPTION": "bronze:Codifica X copias de *Fragmento. NL Gana [E]. NL Agota.", + "UPGRADE_DESCRIPTION": "bronze:Codifica X+1 copias de *Fragmento. NL Gana [E]. NL Agota." + }, + "bronze:FormatEncoded": { + "NAME": "Fragmento", + "DESCRIPTION": "Gana !B! de Bloqueo. NL Haz !D! de daño.", + "EXTENDED_DESCRIPTION": [ + "limpio", + "Fragmento" + ] + }, + "bronze:Fortify": { + "NAME": "Fortificar", + "DESCRIPTION": "Haz !D! de daño. NL bronze:Compilar - Gana !M! de Destreza.", + "EXTENDED_DESCRIPTION": [ + "sólido", + "Fortaleza" + ] + }, + "bronze:Frontload": { + "NAME": "Precargar", + "DESCRIPTION": "Gana !B! de Bloqueo. NL bronze:Compilar - La Función gana Retiene.", + "EXTENDED_DESCRIPTION": [ + "sólido", + "Muro" + ] + }, + "bronze:FullRelease": { + "NAME": "Lanzamiento Completo", + "DESCRIPTION": "bronze:Compilar - La Función se convierte en un Poder con 'Al comienzo de tu turno...'", + "EXTENDED_DESCRIPTION": [ + "completo", + "Lanzamiento", + "1.0" + ] + }, + "bronze:GetLatest": { + "NAME": "Obtener lo Último", + "DESCRIPTION": "Gana una carta aleatoria con bronze:Codificar. Cuesta 0 hasta que se juegue. NL Agota." + }, + "bronze:Goto": { + "NAME": "Ir a", + "DESCRIPTION": "Roba !M! carta. NL bronze:Compilar - En el próximo turno, roba !M! carta.", + "UPGRADE_DESCRIPTION": "Roba !M! cartas. NL bronze:Compilar - En el próximo turno, roba !M! cartas.", + "EXTENDED_DESCRIPTION": [ + "rápido", + "Sprint" + ] + }, + "bronze:Hardcode": { + "NAME": "Código Fijo", + "DESCRIPTION": "La próxima vez que crees una Función, agrégala a tu mazo. NL Elimina las cartas usadas para crearla (incluida esta)." + }, + "bronze:HardenedForm": { + "NAME": "Orbe Endurecido", + "DESCRIPTION": "Siempre que crees o juegues una Función, gana !M! de Bloqueo y Hace !M! de daño a un enemigo aleatorio." + }, + "bronze:HyperBeam": { + "NAME": "Hiper Rayo", + "DESCRIPTION": "Haz !D! de daño a TODOS los enemigos. NL Coloca 5 *Vacío en la parte superior de tu pila de robo." + }, + "bronze:InfiniteBeams": { + "NAME": "Rayos Infinitos", + "DESCRIPTION": "Al comienzo de cada turno, gana un *Rayo *Menor.", + "UPGRADE_DESCRIPTION": "Al comienzo de cada turno, gana un *Rayo *Menor+." + }, + "bronze:InfiniteLoop": { + "NAME": "Bucle Infinito", + "DESCRIPTION": "Haz !D! de daño. NL bronze:Compilar - Gana una copia de esta carta y aumenta su daño en !M!.", + "UPGRADE_DESCRIPTION": "Retiene. NL Haz !D! de daño. NL bronze:Compilar - Gana una copia de esta carta y aumenta su daño en !M!.", + "EXTENDED_DESCRIPTION": [ + "infinito", + "Bucle" + ] + }, + "bronze:Invalidate": { + "NAME": "Invalidar", + "DESCRIPTION": "Aplica !M! de Vulnerable.", + "EXTENDED_DESCRIPTION": [ + "inválido", + "Error" + ] + }, + "bronze:Iterate": { + "NAME": "Iterar", + "DESCRIPTION": "Haz !D! de daño !M! veces.", + "EXTENDED_DESCRIPTION": [ + "analizado", + "Iterar" + ] + }, + "bronze:ItsAFeature": { + "NAME": "Es una Funcionalidad", + "DESCRIPTION": "Siempre que robes o agotes una carta de Estado, gana !M! de Bloqueo." + }, + "bronze:Library": { + "NAME": "Biblioteca", + "DESCRIPTION": "Al comienzo de tu turno, gana una carta aleatoria con bronze:Codifica. Cuesta 0 hasta que se juegue." + }, + "bronze:MaxOutput": { + "NAME": "Rendimiento Máximo", + "DESCRIPTION": "Roba !M! cartas. NL Al comienzo de cada turno, roba 1 carta adicional e bronze:Inserta 1 *Desorientado." + }, + "bronze:Mutator": { + "NAME": "Mutador", + "DESCRIPTION": "Gana !M! de Fuerza. NL *Transforma un Estado en una copia de esta carta.", + "UPGRADE_DESCRIPTION": "Retiene. NL Gana !M! de Fuerza. NL *Transforma un Estado en una copia de esta carta." + }, + "bronze:NullPointer": { + "NAME": "Puntero Nulo", + "DESCRIPTION": "Gana !B! de Bloqueo. NL Haz !D! de daño. NL bronze:Compilar *Error - La Función no se puede jugar.", + "EXTENDED_DESCRIPTION": [ + "nulo", + "Puntero" + ] + }, + "bronze:OilSpill": { + "NAME": "Derrame de Aceite", + "DESCRIPTION": "Haz !D! de daño y aplica !M! de Veneno. NL bronze:Compilar *Error - bronze:Inserta un *Viscoso.", + "EXTENDED_DESCRIPTION": [ + "aceitoso", + "Derrame" + ] + }, + "bronze:Optimize": { + "NAME": "Optimizar", + "DESCRIPTION": "Mejora las siguientes !M! cartas que bronze:Codifiques y que puedan mejorarse." + }, + "bronze:Overheat": { + "NAME": "Sobrecalentamiento", + "DESCRIPTION": "Haz !D! de daño. NL Elimina el próximo *Error de Compilación que vayas a *Codificar." + }, + "bronze:Overload": { + "NAME": "Sobrecarga", + "DESCRIPTION": "Juega una copia de cada carta Codificada. No se codifican. NL Agota.", + "UPGRADE_DESCRIPTION": "Juega una copia de cada carta Codificada. No se codifican." + }, + "bronze:Philosophize": { + "NAME": "Filosofar", + "DESCRIPTION": "Gana !bauto! de Fuerza. NL bronze:Compilar *Error - TODOS los enemigos ganan !M! de Fuerza.", + "EXTENDED_DESCRIPTION": [ + "sabio", + "Idea" + ] + }, + "bronze:RecursiveStrike": { + "NAME": "Golpe Recursivo", + "DESCRIPTION": "Haz !D! de daño !M! veces. NL bronze:Codifica !M! copias de *Golpe.", + "UPGRADE_DESCRIPTION": "Haz !D! de daño !M! veces. NL bronze:Codifica !M! copias de *Golpe+.", + "EXTENDED_DESCRIPTION": [ + "recursivo", + "Repetir" + ] + }, + "bronze:Refactor": { + "NAME": "Refactorizar", + "DESCRIPTION": "Adivina !M!. NL Agota las cartas de Estado descartadas. NL Gana !B! de Bloqueo por cada carta de Estado agotada." + }, + "bronze:Repair": { + "NAME": "Reparar", + "DESCRIPTION": "Gana !B! de Bloqueo. NL bronze:Compilar - Cura !M! de vida.", + "EXTENDED_DESCRIPTION": [ + "herramientas", + "Llave" + ] + }, + "bronze:Replicate": { + "NAME": "Replicar", + "DESCRIPTION": "Haz !D! de daño. Cuando esté *Codificada, añade una copia a tu pila de descarte.", + "EXTENDED_DESCRIPTION": [ + "copiando", + "Copia" + ] + }, + "bronze:Repulsor": { + "NAME": "Repulsor", + "DESCRIPTION": "Cuando robes la primera carta de Estado o Maldición en cada turno, agótala y roba una carta.", + "UPGRADE_DESCRIPTION": "Innata. NL Cuando robes la primera carta de Estado o Maldición en cada turno, agótala y roba una carta." + }, + "bronze:Return": { + "NAME": "Regresar", + "DESCRIPTION": "Coloca una carta de tu pila de descarte en la parte superior de tu pila de robo. NL En el próximo turno, gana [E].", + "UPGRADE_DESCRIPTION": "Coloca una carta de tu pila de descarte en la parte superior de tu pila de robo. NL En el próximo turno, gana [E] [E]." + }, + "bronze:Safeguard": { + "NAME": "Salvaguarda", + "DESCRIPTION": "Gana !B! de Bloqueo.", + "EXTENDED_DESCRIPTION": [ + "seguro", + "Guardia" + ] + }, + "bronze:Separator": { + "NAME": "Separador", + "DESCRIPTION": "Haz !D! de daño. Cuando se bronze:Codifica en el medio, su daño aumenta en !M!.", + "EXTENDED_DESCRIPTION": [ + "división", + "Hijo" + ] + }, + "bronze:Shell": { + "NAME": "Cadena de Bloques", + "DESCRIPTION": "Gana !M! bronze:Desenfoque.", + "UPGRADE_DESCRIPTION": "Gana !M! bronze:Desenfoque. NL bronze:Compilar - Gana !M! bronze:Desenfoque.", + "EXTENDED_DESCRIPTION": [ + "bloque", + "Cadena" + ] + }, + "bronze:Shield": { + "NAME": "Escudo Pegajoso", + "DESCRIPTION": "Retiene. NL Gana !B! de Bloqueo. NL bronze:Inserta 1 *Viscoso.", + "EXTENDED_DESCRIPTION": [ + "pegajoso", + "Escudo" + ] + }, + "bronze:ShipIt": { + "NAME": "Entrégalo", + "DESCRIPTION": "Haz !D! de daño. NL Repite por cada carta de Estado en tu pila de agotadas.", + "EXTENDED_DESCRIPTION": [ + "Haz !D! de daño. NL Repite por cada carta de Estado en tu pila de agotadas (", + ")." + ] + }, + "bronze:SpaghettiCode": { + "NAME": "Código Espagueti", + "DESCRIPTION": "Elige 1 de 3 cartas aleatorias para bronze:Codificar. Repite hasta crear una Función. NL Agota.", + "UPGRADE_DESCRIPTION": "Elige 1 de 3 cartas aleatorias para bronze:Codificar. Repite hasta crear una Función." + }, + "bronze:Strike": { + "NAME": "Golpe", + "DESCRIPTION": "Haz !D! de daño.", + "EXTENDED_DESCRIPTION": [ + "simple", + "Golpe" + ] + }, + "bronze:Terminator": { + "NAME": "Terminador", + "DESCRIPTION": "bronze:Compilar - Si esta es la última carta de la Función, gana 'Juega esto de nuevo'.", + "EXTENDED_DESCRIPTION": [ + "triste", + "Final" + ] + }, + "bronze:ThunderWave": { + "NAME": "Onda de Trueno", + "DESCRIPTION": "Haz !D! de daño a TODOS los enemigos. NL Gana 1 guardianmod:Buffer. NL Agota.", + "EXTENDED_DESCRIPTION": [ + " NL (Golpea ", + " veces.)" + ] + }, + "bronze:TinkerersToolbox": { + "NAME": "Caja de Herramientas", + "DESCRIPTION": "Retiene. NL Gana *Depurar, *Lote, *Descompilar o *Desplazamiento *de *Byte. NL Agota.", + "UPGRADE_DESCRIPTION": "Retiene. NL Gana *Depurar, *Lote, *Descompilar o *Desplazar *Byte." + }, + "bronze:Turbo": { + "NAME": "Turbo", + "DESCRIPTION": "Gana [E] [E]. NL Añade un *Vacío a tu pila de descarte.", + "UPGRADE_DESCRIPTION": "Gana [E] [E] [E]. NL Añade un *Vacío a tu pila de descarte." + }, + "bronze:Undervolt": { + "NAME": "Subvoltaje", + "DESCRIPTION": "TODOS los enemigos pierden !M! de Fuerza. NL Gana 2 *Quemaduras. NL Agota." + }, + "bronze:Verify": { + "NAME": "Forma Consciente", + "DESCRIPTION": "Etérea. NL Siempre que robes una Función, aumenta todos sus valores numéricos en 1, excepto el costo.", + "UPGRADE_DESCRIPTION": "Siempre que robes una Función, aumenta todos sus valores numéricos en 1, excepto el costo." + }, + "bronze:Virus": { + "NAME": "Virus", + "DESCRIPTION": "Haz !D! de daño. NL Descarta tu mano y gana un *Rayo *Menor por cada carta descartada. NL Agota.", + "UPGRADE_DESCRIPTION": "Haz !D! de daño. NL Descarta tu mano y gana un *Rayo *Menor+ por cada carta descartada. NL Agota." + }, + "bronze:WhirlingStrike": { + "NAME": "Disparo Perforante", + "DESCRIPTION": "Haz !D! de daño a TODOS los enemigos.", + "EXTENDED_DESCRIPTION": [ + "perforante", + "Disparo" + ] + }, + "bronze:WildBeam": { + "NAME": "Depurar", + "DESCRIPTION": "Haz !D! de daño. NL Agota una carta de Estado aleatoria de tu pila de robo.", + "EXTENDED_DESCRIPTION": [ + "salvaje", + "Rayo" + ] + }, + "bronze:WildStrike": { + "NAME": "Golpe Salvaje", + "DESCRIPTION": "Haz !D! de daño. NL bronze:Inserta una *Herida." + }, + "bronze:Batch": { + "NAME": "Lote", + "DESCRIPTION": "Crea inmediatamente una Función con las cartas actualmente Codificadas. NL Agota.", + "UPGRADE_DESCRIPTION": "Crea inmediatamente una Función con las cartas actualmente Codificadas." + }, + "bronze:BranchBlock": { + "NAME": "Rama: Bloqueo", + "DESCRIPTION": "Gana !B! de Bloqueo.", + "EXTENDED_DESCRIPTION": [ + "bifurcada", + "Rama" + ] + }, + "bronze:BranchHit": { + "NAME": "Rama: Ataque", + "DESCRIPTION": "Haz !D! de daño.", + "EXTENDED_DESCRIPTION": [ + "bifurcada", + "Rama" + ] + }, + "bronze:ByteShift": { + "NAME": "Desplazamiento de Byte", + "DESCRIPTION": "Devuelve todas las cartas Codificadas a tu mano. NL Ganan Retiene. NL Agota.", + "UPGRADE_DESCRIPTION": "Retiene. NL Devuelve todas las cartas Codificadas a tu mano. NL Ganan Retiene. NL Agota." + }, + "bronze:DazingPulse": { + "NAME": "Pulso Aturdidor", + "DESCRIPTION": "Gana !B! de Bloqueo. NL Haz !D! de daño. NL bronze:Compilar *Error - bronze:Inserta !M! *Desorientados.", + "EXTENDED_DESCRIPTION": [ + "aturdidor", + "Pulso" + ] + }, + "bronze:Debug": { + "NAME": "Depurar", + "DESCRIPTION": "Elimina todos los efectos de *Error de Compilación de las cartas Codificadas. NL Agota." + }, + "bronze:DecaBeam": { + "NAME": "Protoescudo", + "DESCRIPTION": "Gana !B! de Bloqueo. NL bronze:Compilar - Gana !M! Armadura de expansioncontent:Placas e bronze:Inserta !bauto! *Desorientado.", + "EXTENDED_DESCRIPTION": [ + "afilado", + "Barrera" + ] + }, + "bronze:Decompile": { + "NAME": "Descompilar", + "DESCRIPTION": "Agota todas las cartas Codificadas. Gana [E] y roba una carta por cada carta agotada. NL Agota.", + "UPGRADE_DESCRIPTION": "Retiene. NL Agota todas las cartas Codificadas. Gana [E] y roba una carta por cada carta agotada. NL Agota." + }, + "bronze:DonuBeam": { + "NAME": "Protorayo", + "DESCRIPTION": "Haz !D! de daño !M! veces. NL bronze:Compilar - Gana !M! de Fuerza.", + "EXTENDED_DESCRIPTION": [ + "suave", + "Explosión" + ] + }, + "bronze:Explode": { + "NAME": "Explosión", + "DESCRIPTION": "Aplica !M! hexamod:Quemadura de Alma a TODOS los enemigos. NL bronze:Compilar *Error - bronze:Inserta !bauto! *Quemadura.", + "EXTENDED_DESCRIPTION": [ + "inestable", + "Bomba" + ] + }, + "bronze:FunctionCard": { + "NAME": "()", + "DESCRIPTION": "", + "EXTENDED_DESCRIPTION": [ + "función()", + "Perfección()", + "()" + ] + }, + "bronze:MinorBeam": { + "NAME": "Rayo Menor", + "DESCRIPTION": "Haz !D! de daño.", + "EXTENDED_DESCRIPTION": [ + "menor", + "Arañazo" + ] + }, + "bronze:Spike": { + "NAME": "Espina", + "DESCRIPTION": "Haz !D! de daño. NL bronze:Compilar - Gana !M! de Espinas.", + "EXTENDED_DESCRIPTION": [ + "espinosa", + "Espina" + ] + }, + "bronze:Ignite": { + "NAME": "Ignición", + "DESCRIPTION": "Aplica !M! hexamod:Quemadura de Alma. NL Al final de tu turno, recibe 2 de daño.", + "UPGRADE_DESCRIPTION": "Aplica !M! hexamod:Quemadura de Alma. NL Al final de tu turno, recibe 4 de daño." + }, + "bronze:IntoTheVoid": { + "NAME": "Hacia el Vacío", + "DESCRIPTION": "Etérea. NL El enemigo pierde !M! de Fuerza este turno. NL Cuando la robes, pierde 1 de Energía. NL Agota." + }, + "bronze:Lubricant": { + "NAME": "Lubricante", + "DESCRIPTION": "Roba !M! cartas. NL Agota." + }, + "bronze:GrievousWound": { + "NAME": "Herida Grave", + "DESCRIPTION": "Aplica !M! de Vulnerable." + }, + "bronze:Daze": { + "NAME": "Aturdido", + "DESCRIPTION": "Etérea. NL Aplica !M! de Débil. NL Agota." + }, + "bronze:UnknownStatus": { + "NAME": "Confusión", + "DESCRIPTION": "Gana !B! de Bloqueo." + } +} + diff --git a/src/main/resources/bronzeResources/localization/spa/CharacterStrings.json b/src/main/resources/bronzeResources/localization/spa/CharacterStrings.json new file mode 100644 index 000000000..511ef2dc1 --- /dev/null +++ b/src/main/resources/bronzeResources/localization/spa/CharacterStrings.json @@ -0,0 +1,13 @@ +{ + "bronze:theAutomaton": { + "NAMES": [ + "El Autómata", + "el Autómata" + ], + "TEXT": [ + "El guardián mecánico de la Ciudad. NL Se adapta a cualquier situación de combate.", + "NL TODAS LAS ARMAS -> 100%", + "Mientras avanzas por una calle sin iluminar, te topas con varias figuras encapuchadas en medio de algún ritual oscuro. Al acercarte, todas giran hacia ti al unísono con inquietante precisión. La más alta de ellas muestra unos colmillos afilados y extiende una mano larga y pálida hacia ti. NL ~«Únete~ ~a~ ~nosotros,~ ~forjado~ ~de~ ~bronce,~ ~y~ ~siente~ ~el~ ~calor~ ~de~ ~la~ ~Aguja.»~" + ] + } +} diff --git a/src/main/resources/bronzeResources/localization/spa/EventStrings.json b/src/main/resources/bronzeResources/localization/spa/EventStrings.json new file mode 100644 index 000000000..1156f4f90 --- /dev/null +++ b/src/main/resources/bronzeResources/localization/spa/EventStrings.json @@ -0,0 +1,73 @@ +{ + "bronze:ShapeFactory": { + "NAME": "Fábrica de Drones", + "DESCRIPTIONS": [ + "Te topas con una de las fábricas de drones deterioradas del Exordio. Sorprendentemente, los controles aún funcionan. Si activas y desmantelas algunas de estas máquinas con forma geométrica, podrías heredar parte de su armamento.", + "Ninguno de estos drones tiene lo que necesitas." + ], + "OPTIONS": [ + "[Luchar contra Pinchador] Obtén #gEspina como recompensa de combate.", + "[Luchar contra Repulsor] Obtén #gPulso #gAturdidor como recompensa de combate.", + "[Luchar contra Explosor] Obtén #gExplosión como recompensa de combate.", + "[Marcharse]", + "[Iniciar Combate]", + "[También luchar contra Pinchador] Obtén #gEspina como recompensa de combate.", + "[También luchar contra Repulsor] Obtén #gPulso #gAturdidor como recompensa de combate.", + "[También luchar contra Explosor] Obtén #gExplosión como recompensa de combate." + ] + }, + "bronze:AncientFactory": { + "NAME": "Fábrica Ancestral", + "DESCRIPTIONS": [ + "Mientras continúas tu incansable descenso, llegas a la ~fábrica original~. Recuerdas haber estado aquí durante tu propio ensamblaje, cuando conociste al ~Autor~ por primera vez. NL Cada uno de los antiguos constructos que crearon son tan #yperfectos como tú. Hay piezas de viejos prototipos que podrían servirte, pero será necesario activarlos.", + "Incluso sin estar terminados, estos prototipos siguen siendo formidables; no vale la pena correr riesgos innecesarios." + ], + "OPTIONS": [ + "[Luchar contra Prototipo Donu] Obtén #gProtorayo.", + "[Luchar contra Prototipo Deca] Obtén #gProtoescudo.", + "[Luchar contra Ambos] Obtén #gAmbas #gCartas.", + "[Marcharse]" + ] + }, + "bronze:BackToBasics": { + "NAME": "Unificación", + "DESCRIPTIONS": [ + "No hay fuerza sin unidad." + ], + "OPTIONS": [ + "[Unificar] Todos los #gGolpes y #gDefensas obtienen #gCodificar [REMOVE_SPACE].", + "[Bloqueado] Requiere una carta Golpe o Defensa." + ] + }, + "bronze:AccursedBlacksmith": { + "NAME": "Herrero Maldito", + "DESCRIPTIONS": [ + "Decides usar la forja y... NL #y@CLANG@ #y@CLAAANG@ #y@CLANG!@ NL ...mejoras tu arsenal con nuevas actualizaciones y servomecanismos." + ], + "OPTIONS": [ + "[Modificar] #gMejora #g3 #gCartas #gAleatorias #gcon #gCodificar.", + "[Bloqueado] Requiere una carta sin mejorar con Codificar." + ] + }, + "bronze:CrystalForge": { + "NAME": "Forja Tenebrosa", + "DESCRIPTIONS": [ + "A través de pasajes secretos conocidos solo por los Constructos de la Aguja, accedes a una cámara diseñada para el mantenimiento y reparación de modelos Autómata. Las herramientas aquí disponibles sin duda te serán útiles.", + "Con las tenazas mágicas, incrustas cuidadosamente un arma directamente en tu núcleo. #y@Bzzzt!@ Codificarte a ti mismo no es tan fácil como pensabas.", + "Usando el yunque encantado, destrozas una valiosa pieza de equipo solo para forjarla en una explosión de energía pura. Esta ~se~ ~fusiona~ ~con~ ~tu~ ~forma,~ llenándote de calor y fuerza.", + "El poder de la Forja para transmutar materia se pone en marcha al arrojar una pieza de equipo no deseada. Momentos después, el material se disuelve y se comprime en una nueva mejora para tu armadura.", + "Escapas por el mismo pasaje secreto por el que entraste, dejando atrás la Forja Tenebrosa. Tu viaje continúa hacia el Amanecer que aguarda en la cima de la Aguja.", + "Elige una carta para eliminar." + ], + "OPTIONS": [ + "[Forjar] Obtén #gCódigo #gEmbotellado. #rPierde #r10 #rPuntos #rMáximos #rde #rVida.", + "[Transmutar] #gElimina #guna #gCarta. #gObtén #guna #gCarta #gAleatoria #gcon #gCodificar.", + "[Reforjar] #rElimina una #yCarta Rara. #gObtén #g10 #gPuntos #gMáximos #gde #gVida #gy #gCura #gcompleta.", + "[Bloqueado] Ya ha sido utilizada.", + "[Marcharse]", + "[Bloqueado] Requiere una carta con Codificar.", + "[Bloqueado] Requiere una Carta Rara.", + "Elige una carta para eliminar." + ] + } +} diff --git a/src/main/resources/bronzeResources/localization/spa/KeywordStrings.json b/src/main/resources/bronzeResources/localization/spa/KeywordStrings.json new file mode 100644 index 000000000..a80f16129 --- /dev/null +++ b/src/main/resources/bronzeResources/localization/spa/KeywordStrings.json @@ -0,0 +1,52 @@ +[ + { + "PROPER_NAME": "Codifica", + "NAMES": [ + "encode", + "encoded", + "codifica", + "codificada", + "codifiques", + "codifican", + "codificar", + "codificado", + "codificados", + "codificable" + ], + "DESCRIPTION": "Codifica una carta. NL Cuando se hayan Codificado 3 cartas, sus efectos (excepto Codificar) se fusionan en una Función que cuesta #b1 [REMOVE_SPACE]." + }, + { + "PROPER_NAME": "Compilar", + "NAMES": [ + "compile", + "compiled", + "compilar", + "compilada" + ], + "DESCRIPTION": "Un efecto que se activa cuando esta carta se fusiona en una Función. NL Puede ser un efecto negativo, al cual se le llama un 'Error'." + }, + { + "PROPER_NAME": "Desenfoque", + "NAMES": [ + "blur", + "desenfoque" + ], + "DESCRIPTION": "No pierdes Bloqueo al final del turno." + }, + { + "PROPER_NAME": "Inserta", + "NAMES": [ + "insert", + "inserta" + ], + "DESCRIPTION": "Baraja una carta en tu pila de robo." + }, + { + "PROPER_NAME": "Cicla", + "NAMES": [ + "cycle", + "cicla" + ], + "DESCRIPTION": "Descarta una carta y roba una nueva carta en su lugar." + } +] diff --git a/src/main/resources/bronzeResources/localization/spa/MonsterStrings.json b/src/main/resources/bronzeResources/localization/spa/MonsterStrings.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/src/main/resources/bronzeResources/localization/spa/MonsterStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/bronzeResources/localization/spa/OrbStrings.json b/src/main/resources/bronzeResources/localization/spa/OrbStrings.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/src/main/resources/bronzeResources/localization/spa/OrbStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/bronzeResources/localization/spa/PotionStrings.json b/src/main/resources/bronzeResources/localization/spa/PotionStrings.json new file mode 100644 index 000000000..d3393ecdd --- /dev/null +++ b/src/main/resources/bronzeResources/localization/spa/PotionStrings.json @@ -0,0 +1,35 @@ +{ + "bronze:FreeFunctionsPotion": { + "NAME": "Aceite de Máquina", + "DESCRIPTIONS": [ + "Aumenta todos los valores numéricos en las cartas #yCodificadas en #b", + " excepto el costo." + ] + }, + "bronze:CleanCodePotion": { + "NAME": "Elixir Alquírico", + "DESCRIPTIONS": [ + "Elimina todos los efectos de #yError de #yCompilación de la próxima #yFunción que crees; cuesta #b0 hasta que se juegue.", + "Elimina todos los efectos de #yError de #yCompilación de las próximas #b", + " #yFunciones que crees; cuestan #b0 hasta que se jueguen." + ] + }, + "bronze:BurnAndBuffPotion": { + "NAME": "Brebaje Irritante", + "DESCRIPTIONS": [ + "Gana #b", + " de #yFuerza y #b", + " de #yDestreza [REMOVE_SPACE]. NL Añade dos cartas #yQuemadura+ a tu pila de descarte." + ] + }, + "bronze:BuildAFunctionPotion": { + "NAME": "Mezcla Ingeniosa de Kio", + "DESCRIPTIONS": [ + "Elige #b1 de #b3 cartas aleatorias para #yCodificar [REMOVE_SPACE]; repite hasta crear una #yFunción [REMOVE_SPACE].", + "Elige #b1 de #b3 cartas aleatorias para #yCodificar [REMOVE_SPACE]; repite hasta crear una #yFunción y gana #b", + " copia de ella.", + " copias de ella." + ] + } +} + diff --git a/src/main/resources/bronzeResources/localization/spa/PowerStrings.json b/src/main/resources/bronzeResources/localization/spa/PowerStrings.json new file mode 100644 index 000000000..fa76c55bc --- /dev/null +++ b/src/main/resources/bronzeResources/localization/spa/PowerStrings.json @@ -0,0 +1,145 @@ +{ + "bronze:Cloning": { + "NAME": "Fusión", + "DESCRIPTIONS": [ + "La próxima vez que #yCodifiques una carta, #yCodifica una copia adicional de ella.", + "La próxima vez que #yCodifiques una carta, #yCodifica #b", + " copias adicionales de ella." + ] + }, + "bronze:Default": { + "NAME": "Clase por Defecto", + "DESCRIPTIONS": [ + "La próxima vez que crees una Función, #yCodifica una copia de la carta actual en la primera ranura.", + "Las próximas #b", + " veces que crees una Función, #yCodifica una copia de la carta actual en la primera ranura." + ] + }, + "bronze:Feature": { + "NAME": "Es una Funcionalidad", + "DESCRIPTIONS": [ + "Siempre que robes o #yAgotes una carta de #yEstado, gana #b", + " de #yBloqueo [REMOVE_SPACE]." + ] + }, + "bronze:InfiniteBeams": { + "NAME": "Rayos Infinitos", + "DESCRIPTIONS": [ + "Al comienzo de tu turno, gana #b1 #yRayo #yMenor [REMOVE_SPACE].", + "Al comienzo de tu turno, gana #b1 #yRayo #yMenor+ [REMOVE_SPACE].", + "Al comienzo de tu turno, gana #b", + " #yRayos #yMenores [REMOVE_SPACE].", + "Al comienzo de tu turno, gana #b", + " #yRayos #yMenor+s [REMOVE_SPACE]." + ] + }, + "bronze:Optimize": { + "NAME": "Optimizado", + "DESCRIPTIONS": [ + "#yMejora la siguiente carta #yMejorable que #yCodifiques [REMOVE_SPACE].", + "#yMejora las próximas #b", + " cartas #yMejorables que #yCodifiques [REMOVE_SPACE]." + ] + }, + "bronze:MaxOutput": { + "NAME": "Rendimiento Máximo", + "DESCRIPTIONS": [ + "Roba #b1 carta adicional y añade #b1 carta #yAturdido a tu pila de robo cada turno.", + "Roba #b", + " cartas adicionales y añade #b", + " cartas #yAturdido a tu pila de robo cada turno." + ] + }, + "bronze:Return": { + "NAME": "Retorno", + "DESCRIPTIONS": [ + "Al comienzo de tu próximo turno, gana [E] y roba #b1 carta.", + "Al comienzo de tus próximos #b", + " turnos, gana [E] y roba #b1 carta." + ] + }, + "bronze:Library": { + "NAME": "Biblioteca", + "DESCRIPTIONS": [ + "Al comienzo de tu turno, gana una carta aleatoria con #yCodificar. Cuesta #b0 hasta que se juegue.", + "Al comienzo de tu turno, gana #b", + " cartas aleatorias con #yCodificar. Cuestan #b0 hasta que se jueguen." + ] + }, + "bronze:LibraryMod": { + "NAME": "Biblioteca Externa", + "DESCRIPTIONS": [ + "Al comienzo de tu turno, gana una carta aleatoria con #yCodificar y dale #yEtérea [REMOVE_SPACE]." + ] + }, + "bronze:BronzeHeatsink": { + "NAME": "Disipador de Calor de Bronce", + "DESCRIPTIONS": [ + "Siempre que juegues una #yFunción [REMOVE_SPACE], roba #b1 carta.", + "Siempre que juegues una #yFunción [REMOVE_SPACE], roba #b", + " cartas." + ] + }, + "bronze:HardenedForm": { + "NAME": "Orbe Invocado", + "DESCRIPTIONS": [ + "Siempre que crees o juegues una Función, gana #b", + " de #yBloqueo e inflige #b", + " de daño a un enemigo aleatorio." + ] + }, + "bronze:Hardcode": { + "NAME": "Codificación Fija", + "DESCRIPTIONS": [ + "La próxima vez que crees una Función, irá a tu mazo en lugar de tu mano, eliminando todas las cartas usadas.", + "Las próximas #b", + " veces que crees una Función, irá a tu mazo en lugar de tu mano, eliminando todas las cartas usadas." + ] + }, + "bronze:Verify": { + "NAME": "Forma Consciente", + "DESCRIPTIONS": [ + "Siempre que robes una Función, aumenta todos sus valores numéricos en #b1 [REMOVE_SPACE].", + "Siempre que robes una Función, aumenta todos sus valores numéricos en #b", + " excepto el costo." + ] + }, + "bronze:FreeFunction": { + "NAME": "Función Gratis", + "DESCRIPTIONS": [ + "La próxima Función que crees cuesta #b0 [REMOVE_SPACE].", + "Las próximas #b", + " Funciones que crees cuestan #b0 [REMOVE_SPACE]." + ] + }, + "bronze:CleanCode": { + "NAME": "Código Limpio", + "DESCRIPTIONS": [ + "Elimina todos los efectos de #yError de #yCompilación de las cartas Codificadas. Dura por #b1 Función más.", + "Elimina todos los efectos de #yError de #yCompilación de las cartas Codificadas. Dura por #b", + " Funciones." + ] + }, + "bronze:CopyPaste": { + "NAME": "Copiar y Pegar", + "DESCRIPTIONS": [ + "Tu próxima Función se juega dos veces este turno.", + "Tus próximas #b", + " Funciones se juegan dos veces este turno." + ] + }, + "bronze:FullRelease": { + "NAME": "Lanzamiento Completo", + "DESCRIPTIONS": [ + "Al comienzo de tu turno, NL " + ] + }, + "bronze:RemoveNextError": { + "NAME": "Eliminar Errores", + "DESCRIPTIONS": [ + "Elimina el siguiente #yError de #yCompilación #yCodificado [REMOVE_SPACE].", + "Elimina los siguientes #b", + " #yErrores de #yCompilación #yCodificados [REMOVE_SPACE]." + ] + } +} diff --git a/src/main/resources/bronzeResources/localization/spa/RelicStrings.json b/src/main/resources/bronzeResources/localization/spa/RelicStrings.json new file mode 100644 index 000000000..1bd7b52e8 --- /dev/null +++ b/src/main/resources/bronzeResources/localization/spa/RelicStrings.json @@ -0,0 +1,104 @@ +{ + "bronze:BronzeCore": { + "NAME": "Núcleo de Bronce", + "FLAVOR": "Se reemplaza cada 50,000 años.", + "DESCRIPTIONS": [ + "La primera vez que crees una Función en cada combate, gana [E] ." + ] + }, + "bronze:ProtectiveGoggles": { + "NAME": "Gafas Protectores", + "FLAVOR": "Mira de cerca.", + "DESCRIPTIONS": [ + "Si terminas tu turno sin cartas #yCodificadas, gana #b4 de #yBloqueo [REMOVE_SPACE]." + ] + }, + "bronze:DecasWashers": { + "NAME": "Arandelas de Deca", + "FLAVOR": "No está claro por qué Deca las colecciona.", + "DESCRIPTIONS": [ + "Al comienzo de los primeros #b3 turnos de cada combate, roba una carta adicional." + ] + }, + "bronze:Timepiece": { + "NAME": "Cebador de Escarcha", + "FLAVOR": "22 onzas del compuesto químico Ar22, vida útil: 22 años. Mejor almacenado en un refrigerador de caoba.", + "DESCRIPTIONS": [ + "Todas las Funciones que crees obtienen #yRetiene [REMOVE_SPACE]." + ] + }, + "bronze:Mallet": { + "NAME": "Mazo", + "FLAVOR": "¡Eso es! ¡Voy por mi mazo!", + "DESCRIPTIONS": [ + "Al comienzo de cada combate, añade #b2 copias de #yAjuste #yFino+ a tu mano." + ] + }, + "bronze:SilverBullet": { + "NAME": "Bala de Plata", + "FLAVOR": "Los lobos de la Aguja se extinguieron hace tiempo.", + "DESCRIPTIONS": [ + "Al comienzo de cada combate, añade una copia de #yDisparo #yPerforante a tu mano. Cuesta #b0 ." + ] + }, + "bronze:MakeshiftBattery": { + "NAME": "Batería Improvisada", + "FLAVOR": "Es de 8.9 voltios.", + "DESCRIPTIONS": [ + "Gana [E] y añade un #yViscoso a tu pila de descarte al comienzo de tu turno." + ] + }, + "bronze:CableSpool": { + "NAME": "Carrete de Cable", + "FLAVOR": "Enredado...", + "DESCRIPTIONS": [ + "#yCodifica una copia de la primera carta #yCodificable que juegues en cada combate." + ] + }, + "bronze:ElectromagneticCoil": { + "NAME": "Bobina Electromagnética", + "FLAVOR": "Una fuente de energía ineficiente pero entretenida.", + "DESCRIPTIONS": [ + "Las Funciones ahora se componen de #b4 cartas." + ] + }, + "bronze:PlatinumCore": { + "NAME": "Núcleo de Platino", + "FLAVOR": "Registro de cambios: experiencia de usuario mejorada.", + "DESCRIPTIONS": [ + "Reemplaza ", + " [REMOVE_SPACE].[] NL Las primeras #b3 Funciones que crees en cada combate cuestan #b0 hasta que se jueguen." + ] + }, + "bronze:BottledCode": { + "NAME": "Código Embotellado", + "FLAVOR": "De hecho, tengo código justo para eso...", + "DESCRIPTIONS": [ + "Al obtenerla, elige una carta con #yCodificar [REMOVE_SPACE]. Comienza cada combate con esta carta #yCodificada [REMOVE_SPACE].", + "Elige una carta para ", + "Comienza cada combate con #yCodificada ", + " [REMOVE_SPACE]." + ] + }, + "bronze:DonusWashers": { + "NAME": "Arandelas de Donu", + "FLAVOR": "Es bastante claro por qué Donu las colecciona.", + "DESCRIPTIONS": [ + "Al comienzo del combate, gana [E] [E] y añade #b1 #yVacío a tu pila de robo." + ] + }, + "bronze:BronzeIdol": { + "NAME": "Ídolo de Bronce", + "FLAVOR": "Un antiguo antivirus convertido en arma — ¿quién lo creó y por qué?", + "DESCRIPTIONS": [ + "Ahora las cartas de #yEstado pueden jugarse para obtener efectos útiles." + ] + }, + "bronze:AnalyticalCore": { + "NAME": "Artefacto de Paradoja", + "FLAVOR": "Nunca habías visto una locura de código como esta.", + "DESCRIPTIONS": [ + "Al comienzo de cada turno, añade una carta aleatoria con #yCodificar a tu mano y dale #yEtérea [REMOVE_SPACE]." + ] + } +} diff --git a/src/main/resources/bronzeResources/localization/spa/RunModStrings.json b/src/main/resources/bronzeResources/localization/spa/RunModStrings.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/src/main/resources/bronzeResources/localization/spa/RunModStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/bronzeResources/localization/spa/UIStrings.json b/src/main/resources/bronzeResources/localization/spa/UIStrings.json new file mode 100644 index 000000000..75b0f9119 --- /dev/null +++ b/src/main/resources/bronzeResources/localization/spa/UIStrings.json @@ -0,0 +1,56 @@ +{ + "bronze:SpecificCardReward": { + "TEXT": [ + "Añade ", + " a tu mazo", + "Elige una carta." + ] + }, + "bronze:UnplayableMod": { + "TEXT": [ + "No se puede jugar. NL ", + "ERR_NULL_PTR", + "Esto se conserva únicamente para el Puntero Nulo." + ] + }, + "bronze:EncodeAndShuffleMod": { + "TEXT": [ + " NL bronze:Codifica, añade una copia de esta a tu pila de descarte." + ] + }, + "bronze:DoublePlayModifier": { + "TEXT": [ + " NL Juega esta carta de nuevo." + ] + }, + "bronze:MiscStrings": { + "TEXT": [ + "Elige una carta para devolver a tu mano. Gana Retiene.", + " - Aumenta el daño de #yGolpe #yCultista en #b", + " permanentemente.", + "ERR: SEQUENCE_EMPTY", + " - Obtén una copia de #yBucle #yInfinito con #b", + " de daño adicional.", + " para Mutar.", + " para Codificar.", + "" + ] + }, + "bronze:AutoTextHelper": { + "TEXT": [ + " NL bronze:Compilar", + "bronze:Compilar", + " NL bronze:Codificar.", + "bronze:Codificar. NL ", + "\u202F Cuando esté bronze:Codificada,", + "NOTA DE LOCALIZACIÓN: El texto anterior debe coincidir exactamente con el inicio de la línea extra de descripción de Replicar.", + "ERR - NO_DUPE_FULL_RELEASES" + ] + }, + "bronze:CompileDisplayPanel": { + "TEXT": [ + "Al ser Compilada:", + "bronze:Compilar" + ] + } +} diff --git a/src/main/resources/bronzeResources/localization/zhs/CardStrings.json b/src/main/resources/bronzeResources/localization/zhs/CardStrings.json index 16844d495..d8f86a148 100644 --- a/src/main/resources/bronzeResources/localization/zhs/CardStrings.json +++ b/src/main/resources/bronzeResources/localization/zhs/CardStrings.json @@ -301,12 +301,12 @@ }, "bronze:Virus": { "NAME": "病毒", - "DESCRIPTION": "保留 。 NL 造成 !D! 点伤害。 NL 手牌全变 *微 *光 *射 *线 。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "保留 。 NL 造成 !D! 点伤害。 NL 手牌全变 *微 *光 *射 *线 *+ 。 NL 消耗 。" + "DESCRIPTION": "造成 !D! 点伤害。 NL 丢弃所有手牌 。 NL 获得相同数量张 *微光射线 。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "造成 !D! 点伤害。 NL 丢弃所有手牌 。 NL 获得相同数量张 *微光射线+ 。 NL 消耗 。" }, "bronze:Backtrace": { "NAME": "回溯", - "DESCRIPTION": " 固有 。 NL 造成 !D! 点伤害。 NL bronze:编译 *错误 : NL bronze:方法 附带 消耗 。", + "DESCRIPTION": " 固有 。 NL \u00A0 造成 !D! 点伤害。 NL bronze:编译 *错误 : NL bronze:方法 附带 消耗 。", "EXTENDED_DESCRIPTION": [ "暗中", "追溯" @@ -331,13 +331,11 @@ }, "bronze:ClassDefault": { "NAME": "默认类", - "DESCRIPTION": "将 bronze:队列 首张牌加入下 !M! 个 *队列 。", - "UPGRADE_DESCRIPTION": " 保留 。 NL 将 bronze:队列 首张牌加入下 !M! 个 *队列 。" + "DESCRIPTION": "将 bronze:队列 首张牌加入下 !M! 个 *队列 。" }, "bronze:ItsAFeature": { "NAME": "此为特性", - "DESCRIPTION": "抽到 诅咒 或 状态牌 时: NL 获得 1 层 guardianmod:临时 力量 。 NL 获得 1 层 guardianmod:临时 敏捷 。", - "UPGRADE_DESCRIPTION": " 固有 。 NL 抽到 诅咒 或 状态牌 时: NL 获得 1 层 guardianmod:临时 力量 。 NL 获得 1 层 guardianmod:临时 敏捷 。" + "DESCRIPTION": "抽到 或 消耗 状态牌 时: NL 获得 !M! 点 格挡 。" }, "bronze:MinorBeam": { "NAME": "微光射线", @@ -362,12 +360,12 @@ }, "bronze:Mutator": { "NAME": "赋值", - "DESCRIPTION": "获得 1 点 力量 。 NL 将手中一张 状态牌 变为本牌的复制品。", - "UPGRADE_DESCRIPTION": " 保留 。 NL 获得 1 点 力量 。 NL 将手中一张 状态牌 变为本牌的复制品。" + "DESCRIPTION": "获得 !M! 点 力量 。 NL 将手中一张 状态牌 变为本牌的复制品。", + "UPGRADE_DESCRIPTION": " 保留 。 NL 获得 !M! 点 力量 。 NL 将手中一张 状态牌 变为本牌的复制品。" }, "bronze:Allocate": { "NAME": "分配", - "DESCRIPTION": "抽牌堆每有 状态牌 , NL 获得 [E] 。", + "DESCRIPTION": "抽牌堆每有一张 状态牌 , NL 获得 [E] 。", "EXTENDED_DESCRIPTION": [ " NL (获得 ", " [E] )" @@ -463,11 +461,15 @@ }, "bronze:ShipIt": { "NAME": "废能转换", - "DESCRIPTION": "造成 !D! 点伤害。 NL 每有一张 状态牌 , NL 额外造成 !M! 点。 NL (包括 消耗 堆)" + "DESCRIPTION": "造成 !D! 点伤害。 NL 消耗堆中每有一张 状态牌 , NL 重复造成一次 。", + "EXTENDED_DESCRIPTION": [ + "造成 !D! 点伤害。 NL 消耗堆中每有一张 状态牌 , NL 重复造成一次 。 (", + "次)" + ] }, "bronze:Break": { "NAME": "打断", - "DESCRIPTION": "造成 !D! 点伤害。 NL bronze:编译 *错误 : bronze:插入 *灼伤 、 *伤口 与 *黏液 。", + "DESCRIPTION": "造成 !D! 点伤害。 NL bronze:编译 *错误 : 获得 *灼伤 、 *伤口 、 *黏液 、 *晕眩 与 *虚空 。", "EXTENDED_DESCRIPTION": [ "打断", "粉碎" @@ -491,24 +493,14 @@ "DESCRIPTION": "虚无 。 NL 抽到 bronze:方法 时, NL 其各项数值加1。", "UPGRADE_DESCRIPTION": "抽到 bronze:方法 时, NL 其各项数值加1。" }, - "bronze:BronzeHeatsink": { - "NAME": "铜制散热器", - "DESCRIPTION": "打出 bronze:方法 时,抽1张牌。", - "UPGRADE_DESCRIPTION": "打出 bronze:方法 时,抽2张牌。" - }, "bronze:HardenedForm": { "NAME": "铜球召唤", "DESCRIPTION": " bronze:编译 或打出 bronze:方法 时: NL 获得 !M! 点 格挡 。 NL 随机造成 !M! 点伤害。" }, - "bronze:LegacyCode": { - "NAME": "历史代码", - "DESCRIPTION": " 保留 。 NL 将 !M! 张牌从弃牌堆加入手牌。", - "UPGRADE_DESCRIPTION": " 保留 。 NL 将 !M! 张牌从弃牌堆加入手牌。" - }, "bronze:Repulsor": { "NAME": "反冲器", "DESCRIPTION": "每回合首次抽到 NL 状态牌 或 诅咒 时,将其 消耗 并抽一张牌。", - "UPGRADE_DESCRIPTION": "每回合首次抽到 NL 状态牌 或 诅咒 时, 消耗 其并抽一张牌。" + "UPGRADE_DESCRIPTION": " 固有 。 NL 每回合首次抽到 NL 状态牌 或 诅咒 时,将其 消耗 并抽一张牌。" }, "bronze:Debug": { "NAME": "错误调试", @@ -598,7 +590,7 @@ }, "bronze:BugBarrage": { "NAME": "错误齐射", - "DESCRIPTION": "获得1张 *伤口 。 NL bronze:循环 手中 状态牌 , NL 每张造成 !D! 点伤害。", + "DESCRIPTION": "获得 !M! 张 *伤口 。 NL bronze:循环 手中 状态牌 , NL 每张造成 !D! 点伤害。", "UPGRADE_DESCRIPTION": "获得 !M! 张 *伤口 。 NL bronze:循环 手中 状态牌 , NL 每张造成 !D! 点伤害。", "EXTENDED_DESCRIPTION": [ " NL (攻击 ", @@ -657,6 +649,6 @@ }, "bronze:Undervolt": { "NAME": "低压", - "DESCRIPTION": "所有敌人失去 !M! 点 力量。 NL 获得两张 灼伤 。 NL 消耗 。" + "DESCRIPTION": "所有敌人失去 !M! 点 力量。 NL 获得两张 *灼伤 。 NL 消耗 。" } } diff --git a/src/main/resources/bronzeResources/localization/zhs/EventStrings.json b/src/main/resources/bronzeResources/localization/zhs/EventStrings.json index 63029ec87..e6273ee9d 100644 --- a/src/main/resources/bronzeResources/localization/zhs/EventStrings.json +++ b/src/main/resources/bronzeResources/localization/zhs/EventStrings.json @@ -19,11 +19,11 @@ "bronze:AncientFactory": { "NAME": "先古工厂", "DESCRIPTIONS": [ - "在你孜孜不倦地继续下去的过程中,你遇到了~原型~ 工厂。你记得当你第一次见到造物主时,被使命召唤于此地。 NL 他们的每一个古代造物都和你一样 #y完美 。 这里有一些原型机的配件,也许能增强你的机能, 但你需要激活他们。", + "在你孜孜不倦地继续下去的过程中,你遇到了~原型~ 工厂。你记得当你第一次见到~造物主~ 时,被使命召唤于此地。 NL 他们的每一个古代造物都和你一样 #y完美 。 这里有一些原型机的配件,也许能增强你的机能, 但你需要激活他们。", "即使是未完成的原型机,它们仍然是强大的,也许不必冒风险。" ], "OPTIONS": [ - "[迎战 甜圈原型机] #g获得原型射线。", + "[迎战 甜圈原型机] #g获得原型激光。", "[迎战 八体原型机] #g获得原型护盾。", "[迎战两位] #g获得两张牌。", "[离开]" @@ -52,11 +52,11 @@ "bronze:CrystalForge": { "NAME": "幽暗锻造间", "DESCRIPTIONS": [ - "穿过一个只有塔尖建造者才知道的秘密通道,你进入了一个维护和修理自动机器原型而设计的房间。这里的许多工具对你会有一定用处。", + "穿过一个只有尖塔建造者才知道的秘密通道,你进入了一个维护和修理自动机器原型而设计的房间。这里的许多工具对你会有一定用处。", "使用魔术钳,你小心地将武器直接嵌入你的核心。 @#y*错误! *@ 看来编码自己的核心没你想的那么容易。", - "使用魔法铁砧,你可以将一件珍贵的装备粉碎成碎片,将它们锻造成纯粹的能量体。能量与你的形体融合在一起,让你充满了温暖和力量。", + "使用魔法铁砧,你可以将一件珍贵的装备粉碎成碎片,将它们锻造成纯粹的能量体。能量与你的形体~融合在一起~ ,让你充满了温暖和力量。", "当你扔进一个不需要的装备时,熔炉会转化该物质。片刻之后,材料溶解并凝聚成一个新的强化装甲。", - "你从进来的那条秘密通道逃走,把冰冷的铁炉留在身后。您将在塔尖等待黎明的到来。", + "你从进来的那条秘密通道逃走,把幽暗的铁炉留在身后。您将在塔尖等待黎明的到来。", "选择一张卡移除。" ], "OPTIONS": [ @@ -70,4 +70,4 @@ "选择一张牌移除" ] } -} \ No newline at end of file +} diff --git a/src/main/resources/bronzeResources/localization/zhs/KeywordStrings.json b/src/main/resources/bronzeResources/localization/zhs/KeywordStrings.json index 8c8cb206b..5a23b3de2 100644 --- a/src/main/resources/bronzeResources/localization/zhs/KeywordStrings.json +++ b/src/main/resources/bronzeResources/localization/zhs/KeywordStrings.json @@ -8,7 +8,7 @@ "队列", "方法" ], - "DESCRIPTION": "将牌移入铜球 #y队列 。 NL #y队列 排满时,队列内牌的效果被融合, #y编译 成一张新的 #y方法 牌,其耗能为 #b1 点。" + "DESCRIPTION": "省流:三张牌合一张。 NL 将牌移入铜球 #y队列 。 NL 当 #y队列 中有 #b3 张牌时, 它们的效果被融合, #y编译 成一张新的 #y方法 牌移入手牌,其耗能为 #b1 点。" }, { "PROPER_NAME": "编译", diff --git a/src/main/resources/bronzeResources/localization/zhs/PowerStrings.json b/src/main/resources/bronzeResources/localization/zhs/PowerStrings.json index 98cea236f..bb96e2976 100644 --- a/src/main/resources/bronzeResources/localization/zhs/PowerStrings.json +++ b/src/main/resources/bronzeResources/localization/zhs/PowerStrings.json @@ -18,9 +18,8 @@ "bronze:Feature": { "NAME": "此为特性", "DESCRIPTIONS": [ - "每当你抽到 #y诅咒 或 #y状态牌 时,获得 #b", - " 点 #y临时 #y力量 与 #b", - " 点 #y临时 #y敏捷 。" + "每当你抽到 或 #y消耗 #y状态牌 时,获得 #b", + " 点 格挡 。" ] }, "bronze:InfiniteBeams": { diff --git a/src/main/resources/bronzeResources/localization/zhs/RelicStrings.json b/src/main/resources/bronzeResources/localization/zhs/RelicStrings.json index 5ced799b3..65612ade6 100644 --- a/src/main/resources/bronzeResources/localization/zhs/RelicStrings.json +++ b/src/main/resources/bronzeResources/localization/zhs/RelicStrings.json @@ -24,7 +24,7 @@ "NAME": "冷凝漆", "FLAVOR": "据说海豹的女儿由此制成。", "DESCRIPTIONS": [ - " #ybronze:编译 的 #ybronze:方法 附带 #y保留 。" + " #ybronze:编译 的 #ybronze:方法 都附带 #y保留 。" ] }, "bronze:Mallet": { diff --git a/src/main/resources/bronzeResources/localization/zht/CardStrings.json b/src/main/resources/bronzeResources/localization/zht/CardStrings.json index e350091f6..09f9ede49 100644 --- a/src/main/resources/bronzeResources/localization/zht/CardStrings.json +++ b/src/main/resources/bronzeResources/localization/zht/CardStrings.json @@ -1,15 +1,15 @@ { "bronze:DazingPulse": { - "NAME": "暈眩反沖", - "DESCRIPTION": "獲得 !B! 點 格擋 。 NL 造成 !D! 點傷害。 NL bronze:編譯 *錯誤 - bronze:插入 !M! 張 *暈眩 。", + "NAME": "暈眩反衝", + "DESCRIPTION": "獲得 !B! 點 格擋 。 NL 造成 !D! 點傷害。 NL bronze:編譯 *錯誤 : NL bronze:插入 !M! 張 *暈眩 。", "EXTENDED_DESCRIPTION": [ "暈眩", - "脈沖" + "脈衝" ] }, "bronze:Spike": { "NAME": "護體尖刺", - "DESCRIPTION": "造成 !D! 點傷害。 NL bronze:編譯 -獲得 !M! 層 荊棘 。", + "DESCRIPTION": "造成 !D! 點傷害。 NL bronze:編譯 : NL 獲得 !M! 層 荊棘 。", "EXTENDED_DESCRIPTION": [ "尖刺", "突起" @@ -17,7 +17,7 @@ }, "bronze:Explode": { "NAME": "爆炸", - "DESCRIPTION": "給予所有敵人 !M! 層 hexamod:灼魂 。 NL bronze:編譯 *錯誤 - bronze:插入 !bauto! 張 *灼傷 。", + "DESCRIPTION": "給予所有敵人 !M! 層 hexamod:灼魂 。 NL bronze:編譯 *錯誤 : NL bronze:插入 !bauto! 張 *灼傷 。", "EXTENDED_DESCRIPTION": [ "非穩", "爆炸" @@ -25,7 +25,7 @@ }, "bronze:DonuBeam": { "NAME": "原型射線", - "DESCRIPTION": "造成 !D! 點傷害 !M! 次。 NL bronze:編譯 -獲得 !M! 點 力量 。", + "DESCRIPTION": "造成 !D! 點傷害 !M! 次。 NL bronze:編譯 :獲得 !M! 點 力量 。", "EXTENDED_DESCRIPTION": [ "平滑", "爆裂" @@ -33,7 +33,7 @@ }, "bronze:DecaBeam": { "NAME": "原型護盾", - "DESCRIPTION": "獲得 !B! 點 格擋 。 NL bronze:編譯 -獲得 !M! 層 多層護甲 並 bronze:插入 !bauto! 張 *暈眩 。", + "DESCRIPTION": "獲得 !B! 點 格擋 。 NL bronze:編譯 :獲得 !M! 層 多層護甲 並 bronze:插入 !bauto! 張 *暈眩 。", "EXTENDED_DESCRIPTION": [ "鋸齒", "屏障" @@ -66,16 +66,16 @@ }, "bronze:Goto": { "NAME": "跳轉", - "DESCRIPTION": "抽 !M! 張牌。 NL bronze:編譯 -下回合抽 !M! 張牌。", - "UPGRADE_DESCRIPTION": "抽 !M! 張牌。 NL bronze:編譯 -下回合抽 !M! 張牌。", + "DESCRIPTION": "抽 !M! 張牌。 NL bronze:編譯 :下回合抽 !M! 張牌。", + "UPGRADE_DESCRIPTION": "抽 !M! 張牌。 NL bronze:編譯 :下回合抽 !M! 張牌。", "EXTENDED_DESCRIPTION": [ "奔跑", - "沖刺" + "衝刺" ] }, "bronze:Replicate": { "NAME": "副本", - "DESCRIPTION": "造成 !D! 點傷害。 \u202F NL bronze:編碼 時將本牌的復製品加入棄牌堆。", + "DESCRIPTION": "造成 !D! 點傷害。 \u202F NL bronze:編碼 時,將本牌的復製品加入至棄牌堆。", "EXTENDED_DESCRIPTION": [ "反復", "拷貝" @@ -83,11 +83,11 @@ }, "bronze:Branch": { "NAME": "分支", - "DESCRIPTION": "選擇 -造成 !D! 點傷害 或 獲得 !B! 點 格擋 。 NL bronze:編碼 另一張牌。 NL 消耗 。", + "DESCRIPTION": "選擇:造成 !D! 點傷害, NL 或獲得 !B! 點 格擋 。 NL bronze:編碼 另一選項。 NL 消耗 。", "EXTENDED_DESCRIPTION": [ - "分支: 攻擊", + "分支:攻擊", "造成 !D! 點傷害。", - "分支: 格擋", + "分支:格擋", "獲得 !B! 點 格擋 。" ] }, @@ -134,7 +134,7 @@ }, "bronze:CutThrough": { "NAME": "剪枝", - "DESCRIPTION": "造成 !D! 點傷害。 NL 預見 !M! 。 NL bronze:編譯 -抽一張牌。", + "DESCRIPTION": "造成 !D! 點傷害。 NL 預見 !M! 。 NL bronze:編譯 :抽一張牌。", "EXTENDED_DESCRIPTION": [ "斬破", "切割" @@ -150,16 +150,16 @@ ] }, "bronze:DarkDash": { - "NAME": "暗影沖刺", - "DESCRIPTION": "獲得 !B! 點 格擋。 NL 造成 !D! 點傷害。 NL bronze:編譯 *錯誤 - bronze:插入 *虛空 。", + "NAME": "暗影衝刺", + "DESCRIPTION": "獲得 !B! 點 格擋。 NL 造成 !D! 點傷害。 NL bronze:編譯 *錯誤 : bronze:插入 *虛空 。", "EXTENDED_DESCRIPTION": [ "暗影", - "沖刺" + "衝刺" ] }, "bronze:OilSpill": { "NAME": "機油溢出", - "DESCRIPTION": "造成 !D! 點傷害。 NL 給予 !M! 層 中毒 。 NL bronze:編譯 *錯誤 - bronze:插入 *黏液 。", + "DESCRIPTION": "造成 !D! 點傷害。 NL 給予 !M! 層 中毒 。 NL bronze:編譯 *錯誤 : bronze:插入 *黏液 。", "EXTENDED_DESCRIPTION": [ "機油", "溢出" @@ -175,7 +175,7 @@ }, "bronze:Frontload": { "NAME": "預載", - "DESCRIPTION": "獲得 !B! 點 格擋 。 NL bronze:編譯 - bronze:方法 附帶 保留 。", + "DESCRIPTION": "獲得 !B! 點 格擋 。 NL bronze:編譯 : bronze:方法 附帶 保留 。", "EXTENDED_DESCRIPTION": [ "堅固", "防護" @@ -198,7 +198,7 @@ ] }, "bronze:Deprecate": { - "NAME": "屏蔽", + "NAME": "汰換", "DESCRIPTION": "給予 !M! 層 虛弱 。", "EXTENDED_DESCRIPTION": [ "舊版", @@ -216,10 +216,10 @@ "bronze:Shell": { "NAME": "區塊鏈", "DESCRIPTION": "獲得 !M! 層 bronze:殘影 。", - "UPGRADE_DESCRIPTION": "獲得 !M! 層 bronze:殘影 。 NL bronze:編譯 -獲得 !M! 層 bronze:殘影 。", + "UPGRADE_DESCRIPTION": "獲得 !M! 層 bronze:殘影 。 NL bronze:編譯 :獲得 !M! 層 bronze:殘影 。", "EXTENDED_DESCRIPTION": [ "區塊", - "鏈接" + "連結" ] }, "bronze:BitShift": { @@ -228,12 +228,12 @@ "UPGRADE_DESCRIPTION": " 保留 。 NL 選擇一張 bronze:編碼 中的牌返回手牌。 NL 其獲得 保留 。 NL 消耗 。" }, "bronze:ByteShift": { - "NAME": "字節位移", + "NAME": "位元組位移", "DESCRIPTION": "將所有 bronze:編碼 中的牌返回手牌。 NL 其獲得 保留 。 NL 消耗 。", "UPGRADE_DESCRIPTION": " 保留 。 NL 將所有 bronze:編碼 中的牌返回手牌。 NL 其獲得 保留 。 NL 消耗 。" }, "bronze:Batch": { - "NAME": "批處理", + "NAME": "批次處理", "DESCRIPTION": "立即 bronze:編譯 bronze:編碼 中的牌。 NL 消耗 。", "UPGRADE_DESCRIPTION": "立即 bronze:編譯 bronze:編碼 中的牌。" }, @@ -248,14 +248,14 @@ }, "bronze:Terminator": { "NAME": "終止符", - "DESCRIPTION": " bronze:編譯 -若在 bronze:隊列 最後, bronze:方法 附帶再打出一次。", + "DESCRIPTION": " bronze:編譯 :若在最後槽位, NL bronze:方法 附帶再打出一次。", "EXTENDED_DESCRIPTION": [ "哭泣", "終結" ] }, "bronze:Overload": { - "NAME": "復製粘貼", + "NAME": "複製貼上", "DESCRIPTION": "觸發 bronze:編碼 中牌的效果。 NL 消耗 。", "UPGRADE_DESCRIPTION": "觸發 bronze:編碼 中牌的效果。" }, @@ -264,7 +264,7 @@ "DESCRIPTION": "獲得一張 bronze:編碼 牌, NL 其耗能為0。 NL 消耗 。" }, "bronze:Flail": { - "NAME": "亂鬥", + "NAME": "亂擊", "DESCRIPTION": "對所有敵人造成 !D! 點傷害 !bauto! 次。 NL 獲得 !M! 層 人工製品 。 NL 消耗 。", "EXTENDED_DESCRIPTION": [ "狂亂", @@ -273,7 +273,7 @@ }, "bronze:DigitalCarnage": { "NAME": "數碼殘殺", - "DESCRIPTION": "造成 !D! 點傷害。 NL bronze:編譯 - bronze:方法 附帶 虛無 。", + "DESCRIPTION": "造成 !D! 點傷害。 NL bronze:編譯 : bronze:方法 附帶 虛無 。", "EXTENDED_DESCRIPTION": [ "數碼", "殘殺" @@ -281,15 +281,15 @@ }, "bronze:NullPointer": { "NAME": "空指針", - "DESCRIPTION": "獲得 !B! 點 格擋 。 NL 造成 !D! 點傷害。 NL bronze:編譯 *錯誤 - bronze:方法 附帶 不能被打出 。", + "DESCRIPTION": "獲得 !B! 點 格擋 。 NL 造成 !D! 點傷害。 NL bronze:編譯 *錯誤 : bronze:方法 附帶 不能被打出 。", "EXTENDED_DESCRIPTION": [ "無效", "指針" ] }, "bronze:Fortify": { - "NAME": "加固", - "DESCRIPTION": "造成 !D! 點傷害。 NL bronze:編譯 -獲得 !M! 點 敏捷 。", + "NAME": "強化", + "DESCRIPTION": "造成 !D! 點傷害。 NL bronze:編譯 :獲得 !M! 點 敏捷 。", "EXTENDED_DESCRIPTION": [ "固化", "鞏固" @@ -301,29 +301,29 @@ }, "bronze:Virus": { "NAME": "病毒", - "DESCRIPTION": "保留 。 NL 造成 !D! 點傷害。 NL 手牌變為 *微 *光 *射 *線 。", - "UPGRADE_DESCRIPTION": "保留 。 NL 造成 !D! 點傷害。 NL 手牌變為 *微 *光 *射 *線 *+ 。" + "DESCRIPTION": "造成 !D! 點傷害。 NL 丟棄所有手牌 。 NL 獲得相同數量張 *微光射線 。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "造成 !D! 點傷害。 NL 丟棄所有手牌 。 NL 獲得相同數量張 *微光射線+ 。 NL 消耗 。" }, "bronze:Backtrace": { "NAME": "回溯", - "DESCRIPTION": " 固有 。 NL 造成 !D! 點傷害。 NL bronze:編譯 - bronze:方法 附帶 消耗 。", + "DESCRIPTION": " 固有 。 NL \u00A0 造成 !D! 點傷害。 NL bronze:編譯 *錯誤 : NL bronze:方法 附帶 消耗 。", "EXTENDED_DESCRIPTION": [ "暗中", "追溯" ] }, "bronze:CloningBeam": { - "NAME": "合並沖突", + "NAME": "合併衝突", "DESCRIPTION": "造成 !D! 點傷害。 NL 下張 bronze:編碼 牌 bronze:編碼 兩次。 NL 消耗 。", "UPGRADE_DESCRIPTION": "造成 !D! 點傷害。 NL 下張 bronze:編碼 牌 bronze:編碼 兩次。" }, "bronze:FollowUp": { "NAME": "數據追蹤", - "DESCRIPTION": "獲得 !B! 點 格擋 。 NL 造成 !D! 點傷害。 NL 若上張打出牌為 bronze:方法 ,再打出一次。" + "DESCRIPTION": "獲得 !B! 點 格擋 。 NL 造成 !D! 點傷害。 NL 若上張打出牌為 bronze:方法 ,本牌再打出一次。" }, "bronze:ChosenStrike": { "NAME": "邪教打擊", - "DESCRIPTION": "造成 !D! 點傷害。 NL bronze:編譯 -本局傷害加 !M! 。", + "DESCRIPTION": "造成 !D! 點傷害。 NL bronze:編譯 :本局傷害加 !M! 。", "EXTENDED_DESCRIPTION": [ "邪教", "哢哢" @@ -331,13 +331,11 @@ }, "bronze:ClassDefault": { "NAME": "默認類", - "DESCRIPTION": "將 bronze:隊列 首張牌加入下 !M! 個 *隊列 。", - "UPGRADE_DESCRIPTION": " 保留 。 NL 將 bronze:隊列 首張牌加入下 !M! 個 *隊列 。" + "DESCRIPTION": "將 bronze:佇列 首張牌加入下 !M! 個 *佇列 。" }, "bronze:ItsAFeature": { "NAME": "此為特性", - "DESCRIPTION": "抽到 詛咒 或 狀態牌 時,獲得 1 點 guardianmod:臨時 力量 與 敏捷 。", - "UPGRADE_DESCRIPTION": " 固有 。 NL 抽到 詛咒 或 狀態牌 時,獲得 1 點 guardianmod:臨時 力量 與 敏捷 。" + "DESCRIPTION": "抽到 或 消耗 狀態牌 時: NL 獲得 !M! 點 格擋 。" }, "bronze:MinorBeam": { "NAME": "微光射線", @@ -349,25 +347,25 @@ }, "bronze:InfiniteBeams": { "NAME": "無盡射線", - "DESCRIPTION": "回合開始時獲得 *微光射線 。", - "UPGRADE_DESCRIPTION": "回合開始時獲得 *微光射線+ 。" + "DESCRIPTION": "回合開始時, NL 獲得 *微光射線 。", + "UPGRADE_DESCRIPTION": "回合開始時, NL 獲得 *微光射線+ 。" }, "bronze:Optimize": { - "NAME": "優化", + "NAME": "最佳化", "DESCRIPTION": " 升級 下 !M! 張 bronze:編碼 的牌。" }, "bronze:MaxOutput": { "NAME": "極限功率", - "DESCRIPTION": "抽 !M! 張牌。 NL 每回合額外抽1張牌並 bronze:插入 *暈眩 。" + "DESCRIPTION": "抽 !M! 張牌。 NL 回合開始時, NL 抽一張牌並 bronze:插入 *暈眩 。" }, "bronze:Mutator": { "NAME": "賦值", - "DESCRIPTION": "獲得 1 點 力量 。 NL 將手中一張 狀態牌 變為本牌的復製品。", - "UPGRADE_DESCRIPTION": " 保留 。 NL 獲得 1 點 力量 。 NL 將手中一張 狀態牌 變為本牌的復製品。" + "DESCRIPTION": "獲得 !M! 點 力量 。 NL 將手中一張 狀態牌 變為本牌的複製品。", + "UPGRADE_DESCRIPTION": " 保留 。 NL 獲得 !M! 點 力量 。 NL 將手中一張 狀態牌 變為本牌的複製品。" }, "bronze:Allocate": { "NAME": "分配", - "DESCRIPTION": "抽牌堆每有一張 狀態牌 ,獲得 [E] 。", + "DESCRIPTION": "抽牌堆每有張 狀態牌 , NL 獲得 [E] 。", "EXTENDED_DESCRIPTION": [ " NL (獲得 ", " [E] )" @@ -375,12 +373,12 @@ }, "bronze:Decompile": { "NAME": "反編譯", - "DESCRIPTION": " 消耗 bronze:編碼 中的牌。 NL 每 消耗 一張獲得 [E] 並抽一張牌 。 NL 消耗 。", - "UPGRADE_DESCRIPTION": " 保留 。 NL 消耗 bronze:編碼 中的牌。 NL 每 消耗 一張獲得 [E] 並抽一張牌 。 NL 消耗 。" + "DESCRIPTION": " 消耗 bronze:編碼 中的牌。 NL 每 消耗一張, NL 獲得 [E] 並抽一張牌 。 NL 消耗 。", + "UPGRADE_DESCRIPTION": " 保留 。 NL 消耗 bronze:編碼 中的牌。 NL 每 消耗一張, NL 獲得 [E] 並抽一張牌 。 NL 消耗 。" }, "bronze:ChildClass": { "NAME": "調用", - "DESCRIPTION": "獲得 !B! 點 格擋 。 NL bronze:編譯 -獲得 bronze:編碼 中牌的總耗能 [E] 。", + "DESCRIPTION": "獲得 !B! 點 格擋 。 NL bronze:編譯 :獲得 bronze:編碼 中牌的總耗能 [E] 。", "EXTENDED_DESCRIPTION": [ "援引", "能量" @@ -388,7 +386,7 @@ }, "bronze:Repair": { "NAME": "維修", - "DESCRIPTION": "獲得 !B! 點 格擋 。 NL bronze:編譯 -回復 !M! 點生命。", + "DESCRIPTION": "獲得 !B! 點 格擋 。 NL bronze:編譯 :回復 !M! 點生命。", "EXTENDED_DESCRIPTION": [ "修補", "扳手" @@ -396,14 +394,14 @@ }, "bronze:Boost": { "NAME": "蓄能增壓", - "DESCRIPTION": "獲得 !B! 點 格擋 。 NL bronze:編譯 -獲得 !M! 點 力量 。", + "DESCRIPTION": "獲得 !B! 點 格擋 。 NL bronze:編譯 :獲得 !M! 點 力量 。", "EXTENDED_DESCRIPTION": [ "升壓", "強化" ] }, "bronze:Safeguard": { - "NAME": "安全衛士", + "NAME": "防火牆", "DESCRIPTION": "獲得 !B! 點 格擋 。", "EXTENDED_DESCRIPTION": [ "防護", @@ -412,20 +410,20 @@ }, "bronze:BronzeArmor": { "NAME": "銅製鎧甲", - "DESCRIPTION": "獲得 !bauto! 層 人工製品 。 NL bronze:編譯 *錯誤 -所有敵人獲得 !M! 點 格擋 。", + "DESCRIPTION": "獲得 !bauto! 層 人工製品 。 NL bronze:編譯 *錯誤 :所有敵人獲得 !M! 點 格擋 。", "EXTENDED_DESCRIPTION": [ "銅製", "鎧甲" ] }, "bronze:ForLoop": { - "NAME": "循環", + "NAME": "迴圈", "DESCRIPTION": "下張 bronze:編碼 牌再 *編碼 X次。 NL 消耗 。", "UPGRADE_DESCRIPTION": "下張 bronze:編碼 牌再 *編碼 X+1次。 NL 消耗 。" }, "bronze:Philosophize": { "NAME": "哲理化", - "DESCRIPTION": "獲得 !bauto! 點 力量 。 NL bronze:編譯 *錯誤 -所有敵人獲得 !M! 點 力量 。", + "DESCRIPTION": "獲得 !bauto! 點 力量 。 NL bronze:編譯 *錯誤 :所有敵人獲得 !M! 點 力量 。", "EXTENDED_DESCRIPTION": [ "智能", "想法" @@ -433,20 +431,20 @@ }, "bronze:Return": { "NAME": "返回", - "DESCRIPTION": "將一張棄牌堆牌放入抽牌堆頂部。 NL 下回合獲得 [E] 。", - "UPGRADE_DESCRIPTION": "將一張棄牌堆牌放入抽牌堆頂部。 NL 下回合獲得 [E] [E] 。" + "DESCRIPTION": "將一張棄牌堆的牌放入抽牌堆頂部。 NL 下回合獲得 [E] 。", + "UPGRADE_DESCRIPTION": "將一張棄牌堆的牌放入抽牌堆頂部。 NL 下回合獲得 [E] [E] 。" }, "bronze:ForceShield": { "NAME": "力場護盾", - "DESCRIPTION": "獲得 !B! 點 格擋 。 NL 本場戰鬥每 bronze:編譯 過一張 bronze:方法 ,耗能減少 [E] 。" + "DESCRIPTION": "獲得 !B! 點 格擋 。 NL 每 bronze:編譯 過一張 bronze:方法 , NL 本場戰鬥耗能減1。" }, "bronze:Format": { "NAME": "格式化", - "DESCRIPTION": " bronze:編碼 X 張 *碎片 。 NL 獲得 [E] 。 NL 消耗 。", - "UPGRADE_DESCRIPTION": " bronze:編碼 X+1 張 *碎片 。 NL 獲得 [E] 。 NL 消耗 。" + "DESCRIPTION": " bronze:編碼 X 張 *數據碎片 。 NL 獲得 [E] 。 NL 消耗 。", + "UPGRADE_DESCRIPTION": " bronze:編碼 X+1 張 *數據碎片 。 NL 獲得 [E] 。 NL 消耗 。" }, "bronze:FormatEncoded": { - "NAME": "碎片", + "NAME": "數據碎片", "DESCRIPTION": "獲得 !B! 點 格擋 。 NL 造成 !D! 點傷害。", "EXTENDED_DESCRIPTION": [ "簡潔", @@ -455,7 +453,7 @@ }, "bronze:BurnOut": { "NAME": "燃燒殆盡", - "DESCRIPTION": " 消耗 所有 狀態牌 ,每張隨機造成 !D! 點傷害。 NL 消耗 。", + "DESCRIPTION": " 消耗 所有 狀態牌 , NL 每張隨機造成 !D! 點傷害。 NL 消耗 。", "EXTENDED_DESCRIPTION": [ "消耗 所有 狀態牌 (", "張),每張隨機造成 !D! 點傷害。 NL 消耗 。" @@ -463,55 +461,49 @@ }, "bronze:ShipIt": { "NAME": "廢能轉換", - "DESCRIPTION": "造成 !D! 點傷害。 NL 每有一張 狀態牌 傷害增加 !M! 點。" + "DESCRIPTION": "造成 !D! 點傷害。 NL 消耗堆中每有一張 狀態牌 , NL 重複造成一次 。", + "EXTENDED_DESCRIPTION": [ + "造成 !D! 點傷害。 NL 消耗堆中每有一張 狀態牌 , NL 重複造成一次 。 (", + "次)" + ] }, "bronze:Break": { "NAME": "打斷", - "DESCRIPTION": "造成 !D! 點傷害。 NL bronze:編譯 *錯誤 - bronze:插入 *灼傷 、 *傷口 與 *黏液 。", + "DESCRIPTION": "造成 !D! 點傷害。 NL bronze:編譯 *錯誤 : bronze:插入 *灼傷 、 *傷口 、 *黏液 、 *暈眩 與 *虛空 。", "EXTENDED_DESCRIPTION": [ "打斷", "粉碎" ] }, "bronze:InfiniteLoop": { - "NAME": "無限循環", - "DESCRIPTION": "造成 !D! 點傷害。 NL bronze:編譯 -獲得本牌的復製品,其傷害增加 !M! 點。", - "UPGRADE_DESCRIPTION": "保留 。 NL 造成 !D! 點傷害。 NL bronze:編譯 -獲得本牌的復製品,其傷害增加 !M! 點。", + "NAME": "無限迴圈", + "DESCRIPTION": "造成 !D! 點傷害。 NL bronze:編譯 :獲得本牌的複製品,其傷害增加 !M! 點。", + "UPGRADE_DESCRIPTION": "保留 。 NL 造成 !D! 點傷害。 NL bronze:編譯 :獲得本牌的複製品,其傷害增加 !M! 點。", "EXTENDED_DESCRIPTION": [ "無限", - "循環" + "迴圈" ] }, "bronze:Library": { - "NAME": "數據庫", - "DESCRIPTION": "回合開始時獲得 bronze:編碼 牌。 NL 其耗能為0。" + "NAME": "資料庫", + "DESCRIPTION": "回合開始時, NL 獲得一張 bronze:編碼 牌。 NL 其首次耗能為0。" }, "bronze:Verify": { "NAME": "感知形態", - "DESCRIPTION": "虛無 。 NL 抽到 bronze:方法 時,提高其數值1點。", - "UPGRADE_DESCRIPTION": "抽到 bronze:方法 時,提高其數值1點。" - }, - "bronze:BronzeHeatsink": { - "NAME": "銅製散熱器", - "DESCRIPTION": "打出 bronze:方法 時,抽1張牌。", - "UPGRADE_DESCRIPTION": "打出 bronze:方法 時,抽2張牌。" + "DESCRIPTION": "虛無 。 NL 抽到 bronze:方法 時, NL 其各項數值加1。", + "UPGRADE_DESCRIPTION": "抽到 bronze:方法 時, NL 其各項數值加1。" }, "bronze:HardenedForm": { - "NAME": "圓球召喚", + "NAME": "銅球召喚", "DESCRIPTION": " bronze:編譯 或打出 bronze:方法 時: NL 獲得 !M! 點 格擋 。 NL 隨機造成 !M! 點傷害。" }, - "bronze:LegacyCode": { - "NAME": "歷史代碼", - "DESCRIPTION": " 保留 。 NL 將 !M! 張牌從棄牌堆加入手牌。", - "UPGRADE_DESCRIPTION": " 保留 。 NL 將 !M! 張牌從棄牌堆加入手牌。" - }, "bronze:Repulsor": { "NAME": "反沖器", - "DESCRIPTION": "消耗 每回合抽到的首張 狀態牌 或 詛咒 並抽一張牌。", - "UPGRADE_DESCRIPTION": "消耗 每回合抽到的首張 狀態牌 或 詛咒 並抽一張牌。" + "DESCRIPTION": "每回合首次抽到 NL 狀態牌 或 詛咒 時,將其 消耗 並抽一張牌。", + "UPGRADE_DESCRIPTION": " 固有 。 NL 每回合首次抽到 NL 狀態牌 或 詛咒 時,將其 消耗 並抽一張牌。" }, "bronze:Debug": { - "NAME": "調試", + "NAME": "錯誤調試", "DESCRIPTION": "移除 bronze:編碼 中牌的 bronze:編譯 *錯誤 。 NL 消耗 。" }, "bronze:HyperBeam": { @@ -524,7 +516,7 @@ }, "bronze:SpaghettiCode": { "NAME": "意面代碼", - "DESCRIPTION": "從3張隨機 *編碼 牌中選擇1張 bronze:編碼 直至 bronze:編譯 。 NL 消耗 。", + "DESCRIPTION": "從三張隨機 *編碼 牌中選擇一張 bronze:編碼 直至 bronze:編譯 。 NL 消耗 。", "UPGRADE_DESCRIPTION": "棄用" }, "bronze:Assembly": { @@ -533,8 +525,8 @@ }, "bronze:FineTuning": { "NAME": "性能調整", - "DESCRIPTION": "提高 bronze:編碼 中牌的數值 !M! 點。 NL 消耗 。", - "UPGRADE_DESCRIPTION": " 保留 。 NL 提高 bronze:編碼 中牌的數值 !M! 點。 NL 消耗 。" + "DESCRIPTION": "bronze:編碼 中牌的數值加 !M! 。 NL 消耗 。", + "UPGRADE_DESCRIPTION": " 保留 。 NL bronze:編碼 中牌的數值加 !M! 。 NL 消耗 。" }, "bronze:CleanCode": { "NAME": "簡明代碼", @@ -542,7 +534,7 @@ "UPGRADE_DESCRIPTION": "固有 。 NL 移除下 !M! 張 bronze:編碼 牌中的 bronze:編譯 *錯誤 。" }, "bronze:BranchBlock": { - "NAME": "分支: 格擋", + "NAME": "分支:格擋", "DESCRIPTION": "獲得 !B! 點 格擋 。", "EXTENDED_DESCRIPTION": [ "分叉", @@ -550,7 +542,7 @@ ] }, "bronze:BranchHit": { - "NAME": "分支: 攻擊", + "NAME": "分支:攻擊", "DESCRIPTION": "造成 !D! 點 傷害 。", "EXTENDED_DESCRIPTION": [ "分叉", @@ -558,13 +550,13 @@ ] }, "bronze:Ignite": { - "NAME": "點燃", - "DESCRIPTION": "給予 !M! 層 hexamod:灼魂 。 NL 回合結束時,受到 2 點傷害。", - "UPGRADE_DESCRIPTION": "給予 !M! 層 hexamod:灼魂 。 NL 回合結束時,受到 4 點傷害。" + "NAME": "魂灼", + "DESCRIPTION": "給予 !M! 層 hexamod:灼魂 。 NL 回合結束時若在手, NL 受到2點傷害。", + "UPGRADE_DESCRIPTION": "給予 !M! 層 hexamod:灼魂 。 NL 回合結束時若在手, NL 受到4點傷害。" }, "bronze:IntoTheVoid": { "NAME": "遁入虛空", - "DESCRIPTION": "虛無 。 NL 本回合敵人失去 !M! 力量 。 NL 抽到這張牌時,失去 [E] 。 NL 消耗 。" + "DESCRIPTION": "虛無 。 NL 本回合目標失去 !M! 點 力量 。 NL 抽到這張牌時,失去 [E] 。 NL 消耗 。" }, "bronze:Lubricant": { "NAME": "潤滑劑", @@ -575,7 +567,7 @@ "DESCRIPTION": "給予 !M! 層 易傷 。" }, "bronze:Daze": { - "NAME": "暈眩", + "NAME": "昏迷", "DESCRIPTION": "虛無 。 NL 給予 !M! 層 虛弱 。 NL 消耗 。" }, "bronze:UnknownStatus": { @@ -584,12 +576,12 @@ }, "bronze:TinkerersToolbox": { "NAME": "開發工具", - "DESCRIPTION": "保留 。 NL 選擇獲得一張 *調 *試 、 *批 *處 *理 、 *反 *編 *譯 或 *字 *節 *位 *移 。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "保留 。 NL 選擇獲得一張 *調 *試 、 *批 *處 *理 、 *反 *編 *譯 或 *字 *節 *位 *移 。" + "DESCRIPTION": "保留 。 NL 選擇獲得一張牌。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "保留 。 NL 選擇獲得一張牌。" }, "bronze:Refactor": { "NAME": "重構", - "DESCRIPTION": " 預見 !M! 。 NL 消耗 丟棄的牌。 NL 每 消耗 一張 狀態牌 ,獲得 !B! 點 格擋 。" + "DESCRIPTION": " 預見 !M! , NL 消耗 丟棄的牌, NL 每 消耗 一張 狀態牌 , NL 獲得 !B! 點 格擋 。" }, "bronze:Turbo": { "NAME": "內核加速", @@ -598,8 +590,8 @@ }, "bronze:BugBarrage": { "NAME": "錯誤齊射", - "DESCRIPTION": "獲得1張 *傷口 。 NL bronze:循環 手中 狀態牌 。 NL 每張造成 !D! 點傷害。", - "UPGRADE_DESCRIPTION": "獲得 !M! 張 *傷口 。 NL bronze:循環 手中 狀態牌 。 NL 每張造成 !D! 點傷害。", + "DESCRIPTION": "獲得 !M! 張 *傷口 。 NL bronze:循環 手中 狀態牌 , NL 每張造成 !D! 點傷害。", + "UPGRADE_DESCRIPTION": "獲得 !M! 張 *傷口 。 NL bronze:循環 手中 狀態牌 , NL 每張造成 !D! 點傷害。", "EXTENDED_DESCRIPTION": [ " NL (攻擊 ", " 次)" @@ -607,7 +599,7 @@ }, "bronze:BuggyMess": { "NAME": "多重錯誤", - "DESCRIPTION": " bronze:插入 暈眩 。 NL 獲得 [E] 。", + "DESCRIPTION": " bronze:插入 暈眩 。 NL 獲得 !M! [E] 。", "EXTENDED_DESCRIPTION": [ "錯誤", "混亂" @@ -615,15 +607,15 @@ }, "bronze:FindAndReplace": { "NAME": "查找替換", - "DESCRIPTION": "將一張抽或棄牌堆牌加入手牌。 NL 在其原位添加 *暈眩 。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "將一張抽或棄牌堆牌加入手牌。 NL 消耗 。", + "DESCRIPTION": "將一張抽或棄牌堆的牌加入手牌。 NL 在其原位添加 *暈眩 。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "將一張抽或棄牌堆的牌加入手牌。 NL 消耗 。", "EXTENDED_DESCRIPTION": [ "選擇一張牌加入手牌並在其原位添加暈眩" ] }, "bronze:ThunderWave": { "NAME": "雷霆", - "DESCRIPTION": "對所有敵人造成 !D! 點傷害。 NL 獲得1層 guardianmod:緩沖 。 NL 消耗 。", + "DESCRIPTION": "對所有敵人造成 !D! 點傷害。 NL 獲得1層 guardianmod:緩衝 。 NL 消耗 。", "EXTENDED_DESCRIPTION": [ " NL (攻擊 ", " 次)" @@ -631,8 +623,8 @@ }, "bronze:AlphaBuild": { "NAME": "搶先體驗", - "DESCRIPTION": "造成 !D! 點傷害。 NL bronze:插入 隨機 狀態牌 。 NL bronze:編譯 - bronze:插入 *貝塔測試 。", - "UPGRADE_DESCRIPTION": "固有 。 NL 造成 !D! 點傷害。 NL bronze:插入 隨機 狀態牌 。 NL bronze:編譯 - bronze:插入 *貝塔測試 。", + "DESCRIPTION": "造成 !D! 點傷害。 NL bronze:插入 隨機 狀態牌 。 NL bronze:編譯 : bronze:插入 *貝塔測試 。", + "UPGRADE_DESCRIPTION": "固有 。 NL 造成 !D! 點傷害。 NL bronze:插入 隨機 狀態牌 。 NL bronze:編譯 : bronze:插入 *貝塔測試 。", "EXTENDED_DESCRIPTION": [ "粗略", "初版" @@ -640,7 +632,7 @@ }, "bronze:BetaBuild": { "NAME": "貝塔測試", - "DESCRIPTION": "獲得 !B! 點 格擋 。 NL bronze:插入 隨機 狀態牌 。 NL bronze:編譯 - bronze:插入 *完全公開 。", + "DESCRIPTION": "獲得 !B! 點 格擋 。 NL bronze:插入 隨機 狀態牌 。 NL bronze:編譯 : bronze:插入 *完全公開 。", "EXTENDED_DESCRIPTION": [ "早期", "內測" @@ -648,7 +640,7 @@ }, "bronze:FullRelease": { "NAME": "完全公開", - "DESCRIPTION": " bronze:編譯 - bronze:方法 變為能力,回合開始時觸發效果。", + "DESCRIPTION": " bronze:編譯 : bronze:方法 變為能力,回合開始時觸發效果。", "EXTENDED_DESCRIPTION": [ "完全", "公開", diff --git a/src/main/resources/bronzeResources/localization/zht/EventStrings.json b/src/main/resources/bronzeResources/localization/zht/EventStrings.json index d74253f7c..f818e9cac 100644 --- a/src/main/resources/bronzeResources/localization/zht/EventStrings.json +++ b/src/main/resources/bronzeResources/localization/zht/EventStrings.json @@ -2,28 +2,28 @@ "bronze:ShapeFactory": { "NAME": "無人機工廠", "DESCRIPTIONS": [ - "你偶然發現一個塔底的荒廢無人機工廠 - 驚喜的是,控製系統居然還可以運行 。 如果你啟動並拆解這些各式各樣的機器,你就可以獲得它們的一些武器。", + "你偶然發現一個塔底的荒廢無人機工廠 - 驚喜的是,控制系統居然還可以運行 。 如果你啟動並拆解這些各式各樣的機器,你就可以獲得它們的一些武器。", "居然沒有你想要的無人機型號!。" ], "OPTIONS": [ "[迎戰 釘刺機] #g獲得護體尖刺。", - "[迎戰 反沖機] #g獲得暈眩反沖。", + "[迎戰 反沖機] #g獲得暈眩反衝。", "[迎戰 自爆機] #g獲得爆炸。", "[離開]", "[開始戰鬥]", "[同時迎戰 釘刺機] #g獲得護體尖刺 。", - "[同時迎戰 反沖機] #g獲得暈眩反沖。", + "[同時迎戰 反沖機] #g獲得暈眩反衝。", "[同時迎戰 自爆機] #g獲得爆炸。" ] }, "bronze:AncientFactory": { "NAME": "先古工廠", "DESCRIPTIONS": [ - "在你孜孜不倦地繼續下去的過程中,你遇到了~原型~ 工廠。你記得當你第一次見到造物主時,被使命召喚於此地。 NL 他們的每一個古代造物都和你一樣 #y完美 。 這裏有一些原型機的配件,也許能增強你的機能, 但你需要激活他們。", + "在你孜孜不倦地繼續下去的過程中,你遇到了~原型~ 工廠。你記得當你第一次見到~造物主~ 時,被使命召喚於此地。 NL 他們的每一個古代造物都和你一樣 #y完美 。 這裡有一些原型機的配件,也許能增強你的機能, 但你需要啟動他們。", "即使是未完成的原型機,它們仍然是強大的,也許不必冒風險。" ], "OPTIONS": [ - "[迎戰 甜圈原型機] #g獲得原型激光。", + "[迎戰 甜圈原型機] #g獲得原型射線。", "[迎戰 八體原型機] #g獲得原型護盾。", "[迎戰兩位] #g獲得兩張牌。", "[離開]" @@ -52,11 +52,11 @@ "bronze:CrystalForge": { "NAME": "幽暗鍛造間", "DESCRIPTIONS": [ - "穿過一個只有塔尖建造者才知道的秘密通道,你進入了一個維護和修理自動機器原型而設計的房間。這裏的許多工具對你會有一定用處。", - "使用魔術鉗,你小心地將武器直接嵌入你的核心。 @#y*錯誤! *@ 看來編碼自己的核心沒你想的那麽容易。", - "使用魔法鐵砧,你可以將一件珍貴的裝備粉碎成碎片,將它們鍛造成純粹的能量體。能量與你的形體融合在一起,讓你充滿了溫暖和力量。", + "穿過一個只有尖塔建造者才知道的秘密通道,你進入了一個維護和修理自動機器原型而設計的房間。這裡的許多工具對你會有一定用處。", + "使用魔術鉗,你小心地將武器直接嵌入你的核心。 @#y*錯誤! *@ 看來編碼自己的核心沒你想的那麼容易。", + "使用魔法鐵砧,你可以將一件珍貴的裝備粉碎成碎片,將它們鍛造成純粹的能量體。能量與你的形體~融合在一起~ ,讓你充滿了溫暖和力量。", "當你扔進一個不需要的裝備時,熔爐會轉化該物質。片刻之後,材料溶解並凝聚成一個新的強化裝甲。", - "你從進來的那條秘密通道逃走,把冰冷的鐵爐留在身後。您將在塔尖等待黎明的到來。", + "你從進來的那條秘密通道逃走,把幽暗的鐵爐留在身後。您將在塔尖等待黎明的到來。", "選擇一張卡移除。" ], "OPTIONS": [ diff --git a/src/main/resources/bronzeResources/localization/zht/KeywordStrings.json b/src/main/resources/bronzeResources/localization/zht/KeywordStrings.json index 275a7a14a..cac8efa82 100644 --- a/src/main/resources/bronzeResources/localization/zht/KeywordStrings.json +++ b/src/main/resources/bronzeResources/localization/zht/KeywordStrings.json @@ -5,10 +5,10 @@ "encode", "encoded", "編碼", - "隊列", + "佇列", "方法" ], - "DESCRIPTION": "將牌移入銅球 #y隊列 。 NL 當 #y隊列 中有 #b3 張牌時, 它們的效果被融合, #y編譯 成一張新的 #y方法 牌移入手牌,其耗能為 #b1 點。" + "DESCRIPTION": "將牌移入銅球 #y佇列 。 NL 當 #y佇列 中有 #b3 張牌時, 它們的效果被融合, #y編譯 成一張新的 #y方法 牌移入手牌,其耗能為 #b1 點。" }, { "PROPER_NAME": "編譯", @@ -17,7 +17,7 @@ "compile", "compiled" ], - "DESCRIPTION": "當被 #y編碼 的牌融合成 #y方法 時觸發其中所有 #y編譯 效果。 NL #y編譯錯誤 將是一些 #r負面效果 。" + "DESCRIPTION": "當被 #y編碼 的牌融合成 #y方法 時觸發其中所有 #y編譯 效果。 NL 對自身的 #r負面 #y編譯 效果被稱為 #y編譯錯誤 。" }, { "PROPER_NAME": "殘影", diff --git a/src/main/resources/bronzeResources/localization/zht/PowerStrings.json b/src/main/resources/bronzeResources/localization/zht/PowerStrings.json index 7628e6711..475b4a3e6 100644 --- a/src/main/resources/bronzeResources/localization/zht/PowerStrings.json +++ b/src/main/resources/bronzeResources/localization/zht/PowerStrings.json @@ -1,6 +1,6 @@ { "bronze:Cloning": { - "NAME": "合並", + "NAME": "合併", "DESCRIPTIONS": [ "下次 #y編碼 時,再 #y編碼 它 #b1 次。", "下次 #y編碼 時,再 #y編碼 它 #b", @@ -10,17 +10,16 @@ "bronze:Default": { "NAME": "默認類", "DESCRIPTIONS": [ - "將當前 #y隊列 首張牌加入下個 #y隊列 。", - "將當前 #y隊列 首張牌加入下 #b", - " 個 #y隊列 。" + "將當前 #y佇列 首張牌加入下個 #y佇列 。", + "將當前 #y佇列 首張牌加入下 #b", + " 個 #y佇列 。" ] }, "bronze:Feature": { "NAME": "此為特性", "DESCRIPTIONS": [ - "每當你抽到 #y詛咒 或 #y狀態牌 時,獲得 #b", - " 點 #y臨時 #y力量 與 #b", - " 點 #y臨時 #y敏捷 。" + "每當你抽到 或 #y消耗 #y狀態牌 時,獲得 #b", + " 點 格擋 。" ] }, "bronze:InfiniteBeams": { @@ -35,7 +34,7 @@ ] }, "bronze:Optimize": { - "NAME": "優化", + "NAME": "最佳化", "DESCRIPTIONS": [ "#y升級 下張 #y編碼 的牌。", "#y升級 下 #b", @@ -60,7 +59,7 @@ ] }, "bronze:Library": { - "NAME": "數據庫", + "NAME": "資料庫", "DESCRIPTIONS": [ "你的回合開始時,隨機將 #b1 張 #y編碼 牌加入手牌,其耗能為 #b0 。", "你的回合開始時,隨機將 #b", @@ -68,7 +67,7 @@ ] }, "bronze:LibraryMod": { - "NAME": "外部數據庫", + "NAME": "外部資料庫", "DESCRIPTIONS": [ "你的回合開始時,將一張帶有 #y編碼 的隨機牌加入手牌,使其獲得 #y虛無 。" ] @@ -123,7 +122,7 @@ ] }, "bronze:CopyPaste": { - "NAME": "復製粘貼", + "NAME": "複製貼上", "DESCRIPTIONS": [ "本回合下一張 #y方法 打出兩次。", "本回合下 #b", diff --git a/src/main/resources/bronzeResources/localization/zht/RelicStrings.json b/src/main/resources/bronzeResources/localization/zht/RelicStrings.json index 4e685aa62..9aa8e9746 100644 --- a/src/main/resources/bronzeResources/localization/zht/RelicStrings.json +++ b/src/main/resources/bronzeResources/localization/zht/RelicStrings.json @@ -10,7 +10,7 @@ "NAME": "護目鏡", "FLAVOR": "仔細觀察。", "DESCRIPTIONS": [ - "回合結束時若 #ybronze:隊列 為空,獲得 #b4 點 #y格擋 。" + "回合結束時若 #ybronze:佇列 為空,獲得 #b4 點 #y格擋 。" ] }, "bronze:DecasWashers": { @@ -22,21 +22,21 @@ }, "bronze:Timepiece": { "NAME": "冷凝漆", - "FLAVOR": "據說海豹的女兒由此制成。", + "FLAVOR": "據說海豹的女兒由此製成。", "DESCRIPTIONS": [ - " #ybronze:編譯 的 #ybronze:方法 附帶 #y保留 。" + " #ybronze:編譯 的 #ybronze:方法 都附帶 #y保留 。" ] }, "bronze:Mallet": { "NAME": "鐵錘", - "FLAVOR": "就是這麽炫! 舉起我的小鐵錘!", + "FLAVOR": "就是這麼炫! 舉起我的小鐵錘!", "DESCRIPTIONS": [ "戰鬥開始時,將 #b2 張 #y性能調整+ 加入手牌。" ] }, "bronze:SilverBullet": { "NAME": "銀色子彈", - "FLAVOR": "尖塔裏的狼都絕跡了。", + "FLAVOR": "尖塔裡的狼都絕跡了。", "DESCRIPTIONS": [ "戰鬥開始時,將 #b1 張 #y穿透射擊 加入手牌,其耗能為 #b0 。" ] @@ -74,10 +74,10 @@ "NAME": "瓶裝代碼", "FLAVOR": "實際上,這確實是我編碼的。。。", "DESCRIPTIONS": [ - "拾起時,選擇牌組中的 #b1 張 #ybronze:編碼 牌。 戰鬥開始時,它直接進入 #ybronze:隊列 。", + "拾起時,選擇牌組中的 #b1 張 #ybronze:編碼 牌。 戰鬥開始時,它直接進入 #ybronze:佇列 。", "選擇一張牌 ", "戰鬥開始時, ", - " 直接進入 #ybronze:隊列 。" + " 直接進入 #ybronze:佇列 。" ] }, "bronze:DonusWashers": { @@ -89,14 +89,14 @@ }, "bronze:BronzeIdol": { "NAME": "銅制神像", - "FLAVOR": "一種古老的,武器化的抗病毒程序 - 無人知曉其生成者和目的", + "FLAVOR": "一種古老的,武器化的抗病毒程式 - 無人知曉其生成者和目的", "DESCRIPTIONS": [ "#y狀態牌 可打出且附帶 #g正面效果 。" ] }, "bronze:AnalyticalCore": { - "NAME": "悖論制品", - "FLAVOR": "你從未見過如此意義不明的人工制品。", + "NAME": "悖論製品", + "FLAVOR": "你從未見過如此意義不明的人工製品。", "DESCRIPTIONS": [ "回合開始時,隨機將 #b1 張 #y虛無 #ybronze:編碼 牌加入手牌。" ] diff --git a/src/main/resources/champResources/images/betacards/StanceDanceCrown.png b/src/main/resources/champResources/images/betacards/StanceDanceCrown.png new file mode 100644 index 000000000..74798701d Binary files /dev/null and b/src/main/resources/champResources/images/betacards/StanceDanceCrown.png differ diff --git a/src/main/resources/champResources/images/betacards/StanceDanceCrown_p.png b/src/main/resources/champResources/images/betacards/StanceDanceCrown_p.png new file mode 100644 index 000000000..891269c72 Binary files /dev/null and b/src/main/resources/champResources/images/betacards/StanceDanceCrown_p.png differ diff --git a/src/main/resources/champResources/images/cards/OctoStanceBerserker.png b/src/main/resources/champResources/images/cards/OctoStanceBerserker.png index 5b4328802..29906d43d 100644 Binary files a/src/main/resources/champResources/images/cards/OctoStanceBerserker.png and b/src/main/resources/champResources/images/cards/OctoStanceBerserker.png differ diff --git a/src/main/resources/champResources/images/cards/OctoStanceBerserker_p.png b/src/main/resources/champResources/images/cards/OctoStanceBerserker_p.png index 8c39e648b..d73126312 100644 Binary files a/src/main/resources/champResources/images/cards/OctoStanceBerserker_p.png and b/src/main/resources/champResources/images/cards/OctoStanceBerserker_p.png differ diff --git a/src/main/resources/champResources/images/cards/OctoStanceDefensive.png b/src/main/resources/champResources/images/cards/OctoStanceDefensive.png index f2c6d7861..32b3e5218 100644 Binary files a/src/main/resources/champResources/images/cards/OctoStanceDefensive.png and b/src/main/resources/champResources/images/cards/OctoStanceDefensive.png differ diff --git a/src/main/resources/champResources/images/cards/OctoStanceDefensive_p.png b/src/main/resources/champResources/images/cards/OctoStanceDefensive_p.png index 042aafff6..20253c898 100644 Binary files a/src/main/resources/champResources/images/cards/OctoStanceDefensive_p.png and b/src/main/resources/champResources/images/cards/OctoStanceDefensive_p.png differ diff --git a/src/main/resources/champResources/images/cards/ShieldSigil.png b/src/main/resources/champResources/images/cards/ShieldSigil.png index 27f88ee95..555c42021 100644 Binary files a/src/main/resources/champResources/images/cards/ShieldSigil.png and b/src/main/resources/champResources/images/cards/ShieldSigil.png differ diff --git a/src/main/resources/champResources/images/cards/ShieldSigil_p.png b/src/main/resources/champResources/images/cards/ShieldSigil_p.png index 95b9ff44e..6a2964064 100644 Binary files a/src/main/resources/champResources/images/cards/ShieldSigil_p.png and b/src/main/resources/champResources/images/cards/ShieldSigil_p.png differ diff --git a/src/main/resources/champResources/images/cards/ShieldSlam.png b/src/main/resources/champResources/images/cards/ShieldSlam.png index e0be21112..689ac9c4b 100644 Binary files a/src/main/resources/champResources/images/cards/ShieldSlam.png and b/src/main/resources/champResources/images/cards/ShieldSlam.png differ diff --git a/src/main/resources/champResources/images/cards/ShieldSlam_p.png b/src/main/resources/champResources/images/cards/ShieldSlam_p.png index d7823e370..95eab5e72 100644 Binary files a/src/main/resources/champResources/images/cards/ShieldSlam_p.png and b/src/main/resources/champResources/images/cards/ShieldSlam_p.png differ diff --git a/src/main/resources/champResources/images/cards/StanceDanceCrown.png b/src/main/resources/champResources/images/cards/StanceDanceCrown.png new file mode 100644 index 000000000..74798701d Binary files /dev/null and b/src/main/resources/champResources/images/cards/StanceDanceCrown.png differ diff --git a/src/main/resources/champResources/images/cards/StanceDanceCrown_p.png b/src/main/resources/champResources/images/cards/StanceDanceCrown_p.png new file mode 100644 index 000000000..891269c72 Binary files /dev/null and b/src/main/resources/champResources/images/cards/StanceDanceCrown_p.png differ diff --git a/src/main/resources/champResources/images/relics/CrystallizedMud.png b/src/main/resources/champResources/images/relics/CrystallizedMud.png new file mode 100644 index 000000000..1f851314c Binary files /dev/null and b/src/main/resources/champResources/images/relics/CrystallizedMud.png differ diff --git a/src/main/resources/champResources/images/relics/Crystallized_Large.png b/src/main/resources/champResources/images/relics/Crystallized_Large.png new file mode 100644 index 000000000..fd08e6492 Binary files /dev/null and b/src/main/resources/champResources/images/relics/Crystallized_Large.png differ diff --git a/src/main/resources/champResources/images/relics/outline/CrystallizedMud.png b/src/main/resources/champResources/images/relics/outline/CrystallizedMud.png new file mode 100644 index 000000000..1dfdd918b Binary files /dev/null and b/src/main/resources/champResources/images/relics/outline/CrystallizedMud.png differ diff --git a/src/main/resources/champResources/images/relics/outline/FinisherBracers.png b/src/main/resources/champResources/images/relics/outline/FinisherBracers.png new file mode 100644 index 000000000..de8c25705 Binary files /dev/null and b/src/main/resources/champResources/images/relics/outline/FinisherBracers.png differ diff --git a/src/main/resources/champResources/localization/eng/CardStrings.json b/src/main/resources/champResources/localization/eng/CardStrings.json index e3b470a1c..0ec33c6c3 100644 --- a/src/main/resources/champResources/localization/eng/CardStrings.json +++ b/src/main/resources/champResources/localization/eng/CardStrings.json @@ -19,16 +19,21 @@ }, "champ:StanceDance": { "NAME": "Stance Dance", - "DESCRIPTION": "Choose a Stance to Enter. NL If you were already in that Stance, gain a champ:Combo of that Stance.", - "UPGRADE_DESCRIPTION": "Choose a Stance to Enter. NL Gain a champ:Combo of that Stance.", + "DESCRIPTION": "Choose a Stance to Enter. NL Trigger its *Skill champ:Bonus.", + "UPGRADE_DESCRIPTION": "Choose a Stance to Enter. NL Trigger its *Skill champ:Bonus twice.", "EXTENDED_DESCRIPTION": [ "Enter champ:Berserker.", "Enter champ:Defensive." ] }, + "champ:StanceDanceCrown": { + "NAME": "Inspiration", + "DESCRIPTION": "Retain. NL Enter a Stance you aren't in. NL Exhaust.", + "UPGRADE_DESCRIPTION": "Retain. NL Enter a Stance you aren't in." + }, "champ:SwordSigil": { "NAME": "Sigil of Victory", - "DESCRIPTION": "Trigger your current Stance's *Skill *Bonus !M! times. NL Exhaust." + "DESCRIPTION": "Trigger your current *Stance's *Skill champ:Bonus !M! times." }, "champ:FaceSlap": { "NAME": "Face Slap", @@ -44,7 +49,7 @@ }, "champ:ShieldSigil": { "NAME": "Chain Lash", - "DESCRIPTION": "Deal !D! damage. NL This turn, your Skill Bonus effects are increased by !M!." + "DESCRIPTION": "Deal !D! damage. NL This turn, your *Skill champ:Bonus effects are increased by !M!." }, "champ:FocusedDefense": { "NAME": "Bob and Weave", @@ -60,7 +65,7 @@ }, "champ:Backstep": { "NAME": "Backstep", - "DESCRIPTION": "Enter champ:Defensive. NL Gain !B! Block, increased by *Vigor." + "DESCRIPTION": "Gain !B! Block, increased by *Vigor." }, "champ:BerserkersShout": { "NAME": "Berserker's Shout", @@ -68,7 +73,7 @@ }, "champ:RageSigil": { "NAME": "Battle Plan", - "DESCRIPTION": "Gain !B! Block. NL Scry !M!." + "DESCRIPTION": "Enter champ:Defensive. NL Gain !B! Block. NL Scry !M!." }, "champ:GutPunch": { "NAME": "Gut Punch", @@ -85,7 +90,7 @@ }, "champ:Circumvent": { "NAME": "Circumvent", - "DESCRIPTION": "Gain !B! Block. NL Draw !M! cards. NL Discard !M! cards." + "DESCRIPTION": "Gain !B! Block. NL Draw !M! cards. NL Discard !M! cards. NL *Defensive champ:Combo: Don't discard cards." }, "champ:SkillfulDodge": { "NAME": "Skillful Dodge", @@ -94,7 +99,7 @@ "champ:TornadoPunch": { "NAME": "Tornado Punch", "DESCRIPTION": "Deal !D! damage to ALL enemies. NL *Defensive champ:Combo: Gain !B! Block for each enemy hit.", - "UPGRADE_DESCRIPTION": "Deal !D! damage to ALL enemies. NL *Defensive champ:Combo: Gain !B! Block for each enemy hit." + "UPGRADE_DESCRIPTION": "Deal !D! damage to ALL enemies. NL Defensive champ:Combo: Gain !B! Block for each enemy hit." }, "champ:EnGarde": { "NAME": "En Garde", @@ -121,9 +126,9 @@ }, "champ:ShieldThrow": { "NAME": "Shield Throw", - "DESCRIPTION": "Deal damage equal to your Block, twice. NL Gain 2 Frail. NL *Defensive champ:Combo: Don't gain Frail.", + "DESCRIPTION": "Deal damage equal to your Block, twice. NL If not in champ:Defensive, don't gain Block from cards next turn.", "EXTENDED_DESCRIPTION": [ - "Deal damage equal to your Block ( !D! ) twice. NL Gain 2 Frail. NL *Defensive champ:Combo: Lose 2 Frail." + "Deal damage equal to your Block ( !D! ) twice. NL If not in champ:Defensive, don't gain Block from cards next turn." ] }, "champ:FalseCounter": { @@ -136,8 +141,8 @@ "DESCRIPTION": "Whenever you enter a Stance, gain !M! Block." }, "champ:Lariat": { - "NAME": "Reinforced Body", - "DESCRIPTION": "Gain !B! Block X times." + "NAME": "Lariat", + "DESCRIPTION": "Gain !B! Block X times. NL Trigger your *Stance's *Skill champ:Bonus X times." }, "champ:HoldFirm": { "NAME": "Hold Firm", @@ -153,7 +158,7 @@ }, "champ:ViciousMockery": { "NAME": "Vicious Mockery", - "DESCRIPTION": "Gain !M! Vigor. NL Apply !DM! Weak.", + "DESCRIPTION": "Gain !M! Vigor. NL Apply !DM! Weak. NL Trigger your current *Stance's *Skill champ:Bonus.", "EXTENDED_DESCRIPTION": [ "Berserker champ:Combo: Gain !M! temporary Strength. NL ", "Defensive champ:Combo: Gain !M! temporary Dexterity." @@ -169,7 +174,7 @@ }, "champ:RapidStrikes": { "NAME": "Rapid Strikes", - "DESCRIPTION": "Deal !D! damage !M! times. NL A \"Strike\" card in your hand costs 0 this turn." + "DESCRIPTION": "Deal !D! damage !M! times. NL A random \"Strike\" card in your hand costs 0 this turn." }, "champ:EnchantSword": { "NAME": "Enchant Sword", @@ -184,7 +189,7 @@ }, "champ:SwordThrow": { "NAME": "Sword Throw", - "DESCRIPTION": "Deal !D! damage !M! times. NL Gain 2 Weak. NL *Berserker champ:Combo: Don't gain Weak." + "DESCRIPTION": "Deal !D! damage !M! times. NL If not in champ:Berserker, you can't play *Attacks next turn." }, "champ:MurderStrike": { "NAME": "Murder Strike", @@ -192,8 +197,7 @@ }, "champ:HeavySlash": { "NAME": "Masterful Slash", - "DESCRIPTION": "Deal !D! damage. NL Gain a random Skill. NL It costs 0.", - "UPGRADE_DESCRIPTION": "Deal !D! damage. NL Gain a random Upgraded Skill. NL It costs 0." + "DESCRIPTION": "Deal !D! damage. NL At the start of your next turn, gain Vigor equal to unblocked damage dealt." }, "champ:CheapShot": { "NAME": "Cheap Shot", @@ -201,12 +205,11 @@ }, "champ:RisingSlash": { "NAME": "Rising Strike", - "DESCRIPTION": "Deal !D! damage. NL If the last played card this combat was a champ:Finisher, deal !D! damage again." + "DESCRIPTION": "Retain. NL Deal !D! damage. NL If the last card played was a champ:Finisher, deal !D! damage again." }, "champ:Shatter": { "NAME": "Shatter", - "DESCRIPTION": "Remove the enemy's Block. NL Deal !D! damage.", - "UPGRADE_DESCRIPTION": "Remove the enemy's Block and Artifact. NL Deal !D! damage." + "DESCRIPTION": "Deal !D! damage. NL *Any *Stance champ:Combo: Apply !M! Weak and Vulnerable." }, "champ:EnragedBash": { "NAME": "Enraged Bash", @@ -216,7 +219,7 @@ ] }, "champ:VampiricStrike": { - "NAME": "Clobber", + "NAME": "Clobber Strike", "DESCRIPTION": "Deal !D! damage. NL Gain Block equal to unblocked damage dealt." }, "champ:AdrenalArmor": { @@ -233,11 +236,11 @@ }, "champ:CrownThrow": { "NAME": "Crownarang", - "DESCRIPTION": "Deal !D! damage. NL *Berserker champ:Combo: Draw !M! Attacks." + "DESCRIPTION": "Deal !D! damage. NL *Berserker champ:Combo: Draw !M! cards." }, "champ:Encircle": { "NAME": "Encircle", - "DESCRIPTION": "Deal !D! damage to ALL enemies. NL Trigger Skill Bonus for each enemy hit." + "DESCRIPTION": "Deal !D! damage to ALL enemies. NL Draw !M! card for each enemy hit." }, "champ:LastStand": { "NAME": "Last Stand", @@ -249,8 +252,8 @@ }, "champ:RecklessLeap": { "NAME": "Reckless Strike", - "DESCRIPTION": "Deal !D! damage. NL Gain 2 Strength. NL Lose 1 Dexterity. NL Exhaust.", - "UPGRADE_DESCRIPTION": "Deal !D! damage. NL Gain 2 Strength. NL Lose 1 Dexterity.", + "DESCRIPTION": "Deal !D! damage. NL Gain !M! Strength. NL Enter champ:Berserker. NL Exhaust.", + "UPGRADE_DESCRIPTION": "Deal !D! damage. NL Gain !M! Strength. NL Enter champ:Berserker.", "EXTENDED_DESCRIPTION": [ "A poor time for that move." ] @@ -270,7 +273,7 @@ }, "champ:SteelEdge": { "NAME": "Steel Edge", - "DESCRIPTION": "Deal !D! damage X times.", + "DESCRIPTION": "Deal !D! damage X times. NL Perform X times, at least once:", "EXTENDED_DESCRIPTION": [ "Berserker champ:Combo: Deal !D! damage X times. NL ", "Defensive champ:Combo: Gain !B! Block X times.", @@ -281,7 +284,7 @@ }, "champ:Improvising": { "NAME": "Improvising", - "DESCRIPTION": "At the start of the turn, if you are not in a Stance, enter a random Stance." + "DESCRIPTION": "Whenever you enter a Stance, trigger its *Skill champ:Bonus !M! times." }, "champ:CalledShot": { "NAME": "Refreshment", @@ -309,39 +312,37 @@ }, "champ:DancingMaster": { "NAME": "Dancing Master", - "DESCRIPTION": "The first time you use a *Finisher each turn, gain [E] and draw 1 card." + "DESCRIPTION": "The first time you use a champ:Finisher each turn, gain [E] and draw 1 card." }, "champ:StrikeOfGenius": { "NAME": "Strike of Genius", - "DESCRIPTION": "At the start of your turn, gain a random \"Strike\". NL It costs 0 until played and gains Exhaust.", - "UPGRADE_DESCRIPTION": "At the start of your turn, gain a random Upgraded \"Strike\". NL It costs 0 until played and gains Exhaust." + "DESCRIPTION": "At the start of your turn, gain a random \"Strike\" gremlin:Echo. NL It costs 0 until played.", + "UPGRADE_DESCRIPTION": "At the start of your turn, gain a random Upgraded \"Strike\" gremlin:Echo. NL It costs 0 until played." }, "champ:DefensiveStyle": { - "NAME": "Defensive Style", - "DESCRIPTION": "Enter champ:Defensive. NL champ:Defensive *Skill *Bonus grants !M! more champ:Counter.", - "UPGRADE_DESCRIPTION": "Innate. NL Enter champ:Defensive. NL champ:Defensive *Skill *Bonus grants !M! more champ:Counter." + "NAME": "Double Style", + "DESCRIPTION": "*Skill champ:Bonuses grant !M! more Vigor and champ:Counter." }, "champ:GladiatorStyle": { "NAME": "Good Clean Fight", - "DESCRIPTION": "Gain !M! Strength. NL Gain !M! Dexterity." + "DESCRIPTION": "*Berserker champ:Combo: NL Gain !M! Strength. NL *Defensive champ:Combo: NL Gain !M! Dexterity." }, "champ:BerserkerStyle": { - "NAME": "Berserker Style", - "DESCRIPTION": "Enter champ:Berserker. NL champ:Berserker *Skill *Bonus grants !M! more Vigor.", - "UPGRADE_DESCRIPTION": "Innate. NL Enter champ:Berserker. NL champ:Berserker *Skill *Bonus grants !M! more Vigor." + "NAME": "Hone Blade", + "DESCRIPTION": "Your \"Strike\" cards deal !M! more damage." }, "champ:Riposte": { - "NAME": "Riposte", + "NAME": "Riposte Strike", "DESCRIPTION": "Ethereal. NL Deal !D! damage. NL Exhaust." }, "champ:Endure": { "NAME": "Endure", - "DESCRIPTION": "Gain !B! Block. NL This card's *Block is increased by *Strength instead of *Dexterity.", - "UPGRADE_DESCRIPTION": "Gain !B! Block. NL This card's *Block is increased by *Strength." + "DESCRIPTION": "Enter champ:Defensive. NL Gain !B! Block, increased by Strength instead of Dexterity.", + "UPGRADE_DESCRIPTION": "Enter champ:Defensive. NL Gain !B! Block, increased by Strength." }, "champ:PreemptiveStrike": { "NAME": "Preemptive Strike", - "DESCRIPTION": "Deal damage equal to your champ:Counter to ALL enemies. NL Lose half of your champ:Counter.", + "DESCRIPTION": "Deal damage equal to your champ:Counter to ALL enemies. Lose half. NL *Defensive champ:Combo: Don't.", "EXTENDED_DESCRIPTION": [ " NL (Deals !D! damage)", "A poor time for that move." @@ -349,7 +350,7 @@ }, "champ:Parry": { "NAME": "Parry", - "DESCRIPTION": "Gain !B! Block. NL Gain !M! champ:Counter. NL If your champ:Counter is used this turn, Gain *Riposte.", + "DESCRIPTION": "Gain !B! Block. NL Gain !M! champ:Counter. NL If champ:Counter is used this turn, gain another *Riposte *Strike.", "UPGRADE_DESCRIPTION": "Ethereal. NL Deal damage equal to the amount of champ:Counter used. NL Exhaust." }, "champ:EnchantCrown": { @@ -377,8 +378,8 @@ }, "champ:TripleStrike": { "NAME": "Triple Strike", - "DESCRIPTION": "Deal !D! damage. NL Gain 2 *Strikes. They cost 0 and trigger *Skill *Bonuses. NL Exhaust.", - "UPGRADE_DESCRIPTION": "Deal !D! damage. NL Gain 2 Upgraded *Strikes. They cost 0 and trigger *Skill *Bonuses. Exhaust." + "DESCRIPTION": "Deal !D! damage. NL Gain 2 *Strike gremlin:Echoes. They cost 0 and trigger *Skill champ:Bonuses.", + "UPGRADE_DESCRIPTION": "Deal !D! damage. NL Gain 2 *Strike+ gremlin:Echoes. They cost 0 and trigger *Skill champ:Bonuses." }, "champ:WindUp": { "NAME": "Wind Up", @@ -393,4 +394,4 @@ "NAME": "Headbutt", "DESCRIPTION": "Deal !D! damage. NL Put a card from your discard pile on top of your draw pile." } -} +} \ No newline at end of file diff --git a/src/main/resources/champResources/localization/eng/CharacterStrings.json b/src/main/resources/champResources/localization/eng/CharacterStrings.json index 480ac9f5d..3ea1c58d0 100644 --- a/src/main/resources/champResources/localization/eng/CharacterStrings.json +++ b/src/main/resources/champResources/localization/eng/CharacterStrings.json @@ -7,7 +7,7 @@ "TEXT": [ "The undisputed King of the Arena. NL Has never lost a match.", "NL You ready your blade...", - "Navigating an unlit street, you come across several hooded figures in the midst of some dark ritual. As you approach, they turn to you in eerie unison. The tallest among them bares fanged teeth and extends a long, pale hand towards you. NL ~\"Join~ ~us~ ~ghastly~ ~one,~ ~and~ ~feel~ ~the~ ~warmth~ ~of~ ~the~ ~Spire.\"~", + "Navigating an unlit street, you come across several hooded figures in the midst of some dark ritual. As you approach, they turn to you in eerie unison. The tallest among them bares fanged teeth and extends a long, pale hand towards you. NL ~\"Join~ ~us~ ~Champion,~ ~and~ ~feel~ ~the~ ~warmth~ ~of~ ~the~ ~Spire.\"~", "#rBerserker Stance", "#bDefensive Stance", "#yGladiator Stance", diff --git a/src/main/resources/champResources/localization/eng/EventStrings.json b/src/main/resources/champResources/localization/eng/EventStrings.json index 342f24999..bf8cb8e7d 100644 --- a/src/main/resources/champResources/localization/eng/EventStrings.json +++ b/src/main/resources/champResources/localization/eng/EventStrings.json @@ -12,7 +12,7 @@ "champ:Colosseum": { "NAME": "The Colosseum", "DESCRIPTIONS": [ - "As you continue down the spire, you notice a group of humanoids waiting in ambush nearby a large auditorium. When approached, the Slavers are startled, but quickly explain themselves. NL NL \"CHAMPION! You grave us with your presence! Are you here to take on the new challenger?\"", + "As you continue down the spire, you notice a group of humanoids waiting in ambush nearby a large auditorium. When approached, the Slavers are startled, but quickly explain themselves. NL NL \"CHAMPION! You grace us with your presence! Are you here to take on the new challenger?\"", "A new challenger? How delightful! NL NL However, the challenge may have to wait. The audience always likes seeing the Champion slaughter the latest capture...", "You enter the massive stadium to find an overflowing audience of #bSlavers, #pCultists, and other denizens of the City. NL NL ", "@\"WHO@ @DARES@ @CHALLENGE@ @ME?!\"@ you boom into the crowd, beckoning this new 'challenger'. NL A knight approaches, clad in strikingly similar armor to your own, only drenched in black ink. The crowd cheers more than this pretender deserves. NL NL There can only be one Champion!", @@ -21,8 +21,8 @@ "Black Knight" ], "OPTIONS": [ - "[Defend Title] #rFight Black Knight. #gGain #gmany #grewards.", - "[Participate] #rFight Captive Hero. #gGain #gmany #grewards.", + "[Defend Title] #rFight #rBlack #rKnight. #gGain #gmany #grewards.", + "[Participate] #rFight #rCaptive #rHero. #gGain #gmany #grewards.", "[Leave]", "[FIGHT!]", "[Continue]" @@ -35,7 +35,7 @@ "You spend much time searching through the halls of tomes and guides, until finally finding the book you seek. NL NL Settling into the comfy chair, you take some time to brush up on forgotten stances and styles. Even a perfect fighting specimen such as yourself knows that the mind is just as important as the body, and must also be exercised." ], "OPTIONS": [ - "[Seek] Locate a #gBook on Fighting.", + "[Seek] #gLocate #ga #gBook #gon #gFighting.", "[Locked] Already have all Fighting tomes." ] }, @@ -53,7 +53,7 @@ " #rHP.", "[Leave]", "[Locked] Requires an Attack Card.", - "Choose a card to gain #y'trigger #ySkill #yBonus.'", + "Choose a card to gain 'trigger Skill Bonus.'.", "[Read] Choose an Attack to gain #y'trigger #ySkill #yBonus.'. #rCursed #r- #rPride." ] }, @@ -84,9 +84,9 @@ "Deciding your time is better spent elsewhere, you leave the Arena. You can hear a sigh of relief from the fighters as you depart - clearly, nobody was looking forward to dying at your hand today." ], "OPTIONS": [ - "[Fight Centurion & Mystic] #gGain #gCloak #gClasp", - "[Fight Gremlin Nob] #gGain #gChampion #gBelt", - "[Fight Slaver Duo] #gGain #gWrist #gBlade", + "[Fight Centurion & Mystic] #gGain #gCloak #gClasp.", + "[Fight Gremlin Nob] #gGain #gChampion #gBelt.", + "[Fight Slaver Duo] #gGain #gHorseshoe.", "[Leave]" ] }, diff --git a/src/main/resources/champResources/localization/eng/KeywordStrings.json b/src/main/resources/champResources/localization/eng/KeywordStrings.json index 4264a14a0..57f753957 100644 --- a/src/main/resources/champResources/localization/eng/KeywordStrings.json +++ b/src/main/resources/champResources/localization/eng/KeywordStrings.json @@ -1,20 +1,30 @@ [ { - "PROPER_NAME": "Technique", + "PROPER_NAME": "Skill Bonus", "NAMES": [ + "bonus", + "bonuses", "technique", "techniques", "champ:[crown_icon]", "[crown_icon]" ], - "DESCRIPTION": "If you are in a #yStance, trigger its Skill Bonus." + "DESCRIPTION": "If you are in a #yStance [REMOVE_SPACE], trigger its Skill Bonus. NL #rBerserker #ySkill #yBonus: Gain #b2 #yVigor [REMOVE_SPACE]. NL #bDefensive #ySkill #yBonus: Gain #b3 #yCounter [REMOVE_SPACE]." }, { "PROPER_NAME": "Combo", "NAMES": [ "combo" ], - "DESCRIPTION": "Extra effect when played in the listed #yStance." + "DESCRIPTION": "Extra effect when played in the listed #yStance [REMOVE_SPACE]." + }, + { + "PROPER_NAME": "Strike", + "NAMES": [ + "strike", + "strikes" + ], + "DESCRIPTION": "Any card containing \"Strike\" in their name. Not to be confused with #yStrikes, which refers exclusively to Basic Strike cards." }, { "PROPER_NAME": "Finisher", @@ -24,14 +34,14 @@ "[fist_icon]", "champ:[fist_icon]" ], - "DESCRIPTION": "Requires being in a Stance. NL After playing a Finisher, exit your Stance and trigger its Finisher bonus." + "DESCRIPTION": "Requires being in a Stance. NL After playing a Finisher, exit your Stance and trigger its Finisher bonus. NL #rBerserker #yFinisher #yBonus: Gain #b1 #yStrength [REMOVE_SPACE]. NL #bDefensive #yFinisher #yBonus: Gain #b8 #yBlock [REMOVE_SPACE]." }, { "PROPER_NAME": "Counter", "NAMES": [ "counter" ], - "DESCRIPTION": "The next time you take #yAttack damage, deal damage back." + "DESCRIPTION": "The next time you take #yAttack damage, gain a #yRiposte #yStrike that deals that much damage." }, { "PROPER_NAME": "Defensive", @@ -39,7 +49,7 @@ "defensive", "defensive." ], - "DESCRIPTION": "#yStance. NL #ySkill Bonus: Gain #b3 #yCounter. NL #yFinisher Effect: Gain #b8 #yBlock." + "DESCRIPTION": "#yStance. NL #ySkill Bonus: Gain #b3 #yCounter [REMOVE_SPACE]. NL #yFinisher Effect: Gain #b8 #yBlock [REMOVE_SPACE]." }, { "PROPER_NAME": "Berserker", @@ -47,7 +57,7 @@ "berserker", "berserker." ], - "DESCRIPTION": "#yStance. NL #ySkill Bonus: Gain #b2 #yVigor. NL #yFinisher Effect: Gain #b1 #yStrength." + "DESCRIPTION": "#yStance. NL #ySkill Bonus: Gain #b2 #yVigor [REMOVE_SPACE]. NL #yFinisher Effect: Gain #b1 #yStrength [REMOVE_SPACE]." }, { "PROPER_NAME": "Gladiator", @@ -63,7 +73,7 @@ "ultimate", "ultimate." ], - "DESCRIPTION": "#yStance. Counts as both #yDefensive and #yBerserker #yStances. NL If you leave this #yStance before it expires, immediately re-enter it." + "DESCRIPTION": "#yStance [REMOVE_SPACE]. Counts as both #bDefensive and #rBerserker #yStances [REMOVE_SPACE]. NL If you leave this #yStance before it expires, immediately re-enter it." }, { "PROPER_NAME": "Fatigue", diff --git a/src/main/resources/champResources/localization/eng/PowerStrings.json b/src/main/resources/champResources/localization/eng/PowerStrings.json index 871b871b0..8f41dfe4a 100644 --- a/src/main/resources/champResources/localization/eng/PowerStrings.json +++ b/src/main/resources/champResources/localization/eng/PowerStrings.json @@ -2,15 +2,15 @@ "champ:CounterPower": { "NAME": "Counter", "DESCRIPTIONS": [ - "The next time you receive #yAttack damage, deal #b", - " damage back." + "The next time you receive #yAttack damage, gain a #yRiposte #yStrike that deals #b", + " damage." ] }, "champ:FocusedDefPower": { "NAME": "Focused: Defensive", "DESCRIPTIONS": [ "The next time you use a #yFinisher this turn, gain #b", - " #yBlock." + " #yBlock [REMOVE_SPACE]." ] }, "champ:FocusedBerPower": { @@ -24,7 +24,7 @@ "NAME": "Shield Wall", "DESCRIPTIONS": [ "At the end of your turn, gain #b", - " #yCounter." + " #yCounter [REMOVE_SPACE]." ] }, "champ:EntangleNextTurnPower": { @@ -47,7 +47,7 @@ "NAME": "Ignoring Pain", "DESCRIPTIONS": [ "You cannot lose HP this turn.", - "You cannot lose HP this and the next #b", + "You cannot lose HP for the next #b", " turns." ] }, @@ -55,21 +55,22 @@ "NAME": "Endless Rage", "DESCRIPTIONS": [ "Whenever you lose HP on your turn, gain #b", - " temporary #yStrength." + " temporary #yStrength [REMOVE_SPACE]." ] }, "champ:ImprovisingPower": { "NAME": "Improvising", "DESCRIPTIONS": [ - "At the start of your turn, if you are not in a Stance, enter a random Stance." + "Whenever you enter a #yStance [REMOVE_SPACE], trigger its #ySkill #yBonus #b", + " times." ] }, "champ:CalledShotPower": { "NAME": "Called Shot", "DESCRIPTIONS": [ - "The next time you play a #yFinisher, do not leave your #yStance.", + "The next time you play a #yFinisher [REMOVE_SPACE], do not leave your #yStance [REMOVE_SPACE].", "The next #b", - " times you play a #yFinisher, do not leave your #yStance." + " times you play a #yFinisher [REMOVE_SPACE], do not leave your #yStance [REMOVE_SPACE]." ] }, "champ:DancingMasterPower": { @@ -86,24 +87,24 @@ "champ:StrikeOfGeniusPower": { "NAME": "Strike of Genius", "DESCRIPTIONS": [ - "At the start of your turn, gain a random \"Strike\". It costs #b0 until played and Exhausts.", + "At the start of your turn, gain a random \"Strike\" #yEcho [REMOVE_SPACE]. It costs #b0 until played.", "At the start of your turn, gain #b", - " random \"Strike\"s. They cost #b0 until played and Exhaust." + " random \"Strike\" #yEchoes [REMOVE_SPACE]. They cost #b0 until played." ] }, "champ:StrikeOfGeniusUpgradedPower": { "NAME": "Strike of Genius+", "DESCRIPTIONS": [ - "At the start of your turn, gain a random #yupgraded \"Strike\". It costs #b0 until played and Exhausts.", + "At the start of your turn, gain a random #yupgraded \"Strike\" #yEcho [REMOVE_SPACE]. It costs #b0 until played.", "At the start of your turn, gain #b", - " random #yupgraded \"Strike\"s. They cost #b0 until played and Exhaust." + " random #yupgraded \"Strike\" #yEchoes [REMOVE_SPACE]. They cost #b0 until played." ] }, "champ:DefensiveStylePower": { "NAME": "Defensive Style", "DESCRIPTIONS": [ - "#yDefensive #ySkill Bonuses grant #b", - " additional #yCounter." + "#bDefensive #ySkill #yBonuses grant #b", + " additional #yCounter [REMOVE_SPACE]." ] }, "champ:GladiatorStylePower": { @@ -116,7 +117,7 @@ "champ:BerserkerStylePower": { "NAME": "Berserker Style", "DESCRIPTIONS": [ - "#yBerserker #ySkill Bonuses grant #b", + "#rBerserker #ySkill #yBonuses grant #b", " more #yVigor." ] }, @@ -140,14 +141,14 @@ "champ:IronFortressPower": { "NAME": "Technical Jig", "DESCRIPTIONS": [ - "Whenever you enter a Stance, gain #b", + "Whenever you enter a #yStance, gain #b", " #yBlock." ] }, "champ:IronFortressVigorPower": { "NAME": "Technical Jig: Berserker", "DESCRIPTIONS": [ - "Whenever you enter a Stance, trigger Berserker Stance's #ySkill Bonus", + "Whenever you enter a Stance, trigger #rBerserker #rStance's #ySkill Bonus", " #b", " times." ] @@ -156,7 +157,7 @@ "NAME": "Last Stand", "DESCRIPTIONS": [ "At the start of turn, if HP is at or below 50%, cleanse all debuffs and gain ", - " Strength." + " #yStrength." ] }, "champ:GladiatorFormPower": { @@ -169,8 +170,8 @@ "champ:NoBlockNextTurnPower": { "NAME": "Shield Thrown", "DESCRIPTIONS": [ - "You can't gain Block next turn.", - "You can't gain Block for the next #b", + "You can't gain #yBlock next turn.", + "You can't gain #yBlock for the next #b", " turns." ] }, @@ -200,7 +201,7 @@ "champ:ParryPower": { "NAME": "Parrying", "DESCRIPTIONS": [ - "If your Counter is used this turn, gain Riposte." + "If your #yCounter is used this turn, gain an additional #yRiposte #yStrike." ] }, "champ:BoomerangPower": { @@ -219,20 +220,27 @@ "champ:DualPlaySrikePower": { "NAME": "Flurry of Strikes", "DESCRIPTIONS": [ - "Your next #yStrike is played twice this turn.", + "Your next #y\"Strike\" is played twice this turn.", "Your next ", - " #yStrikes are played twice this turn." + " #y\"Strikes\" are played twice this turn." ] }, "champ:LastStandPower": { "NAME": "Last Stand", "DESCRIPTIONS": [ - "Once you get below #b50% Hp, remove all debuffs and gain #b", + "Once you get below #b50% HP, remove all debuffs and gain #b", " Strength.", "~You've~ ~done~ ~it~ ~now...~", "@DEFEAT??@ NL @IMPOSSIBLE!!@" ] }, + "champ:HonePower": { + "NAME": "Honed Blade", + "DESCRIPTIONS": [ + "Your #y\"Strike\" cards deal #b", + " more damage." + ] + }, "champ:DoubleStyleThisTurnPower": { "NAME": "Chain Lash", "DESCRIPTIONS": [ diff --git a/src/main/resources/champResources/localization/eng/RelicStrings.json b/src/main/resources/champResources/localization/eng/RelicStrings.json index 6125de184..644db480d 100644 --- a/src/main/resources/champResources/localization/eng/RelicStrings.json +++ b/src/main/resources/champResources/localization/eng/RelicStrings.json @@ -3,93 +3,108 @@ "NAME": "Champion's Crown", "FLAVOR": "A WINNER IS YOU!", "DESCRIPTIONS": [ - "At the start of combat, enter #bDefensive or #rBerserker #yStance." + "Once per combat, you may enter a #yStance you are not in." ] }, "champ:BlackKnightHelmet": { "NAME": "Black Knight's Helm", "FLAVOR": "Only a flesh wound.", "DESCRIPTIONS": [ - "The first time you enter each #yStance each combat: NL #bDefensive: Gain #b2 #yDexterity and lose #b1 #yStrength. NL #rBerserker: Gain #b2 #yStrength and lose #b1 #yDexterity." + "The first time you enter each #yStance each combat: NL #bchamp:Defensive : Gain #b2 #yDexterity and lose #b1 #yStrength [REMOVE_SPACE]. NL #rchamp:Berserker : Gain #b2 #yStrength and lose #b1 #yDexterity [REMOVE_SPACE]." ] }, "champ:Barbells": { "NAME": "Barbell", "FLAVOR": "1000 reps? Psh. I can do 1001.", "DESCRIPTIONS": [ - "Whenever you enter a Rest Site, if you have at least #b10 Upgradable cards in your deck, #yUpgrade one at random." + "Whenever you enter a Rest Site, if you have at least #b", + " #yUpgradable cards in your deck, #yUpgrade one at random." ] }, "champ:BerserkersGuideToSlaughter": { "NAME": "Berserker's Guide", "FLAVOR": "The text is illegible.", "DESCRIPTIONS": [ - "At the start of your turn, gain #b3 #yVigor." + "At the start of your turn, gain #b", + " #yVigor [REMOVE_SPACE]." ] }, "champ:ChampionCrownUpgraded": { "NAME": "Victorious Crown", "FLAVOR": "Conglaturation!! You are the greatest winner.", "DESCRIPTIONS": [ - "Replaces #rChampion's #rCrown. NL Start each combat in #ychamp:Ultimate #yStance, which lasts for #b1 turn." + "Replaces ", + " [REMOVE_SPACE].[] NL The first time you play a #ychamp:Finisher each turn, draw #b", + " cards and enter a random #yStance [REMOVE_SPACE]." ] }, "champ:DefensiveTrainingManual": { "NAME": "Defensive Thesis", "FLAVOR": "Pro tip: Don't get hit.", "DESCRIPTIONS": [ - "Defensive Stance's #yFinisher #yBonus grants #b5 more #yBlock." + "#bchamp:Defensive #bStance's #ychamp:Finisher #yBonus grants #b", + " more #yBlock [REMOVE_SPACE]." ] }, "champ:DeflectingBracers": { "NAME": "Deflecting Bracers", "FLAVOR": "If you thought blocking was good then...", "DESCRIPTIONS": [ - "At the start of your turn, gain #ychamp:Counter equal to half the amount of expired #yBlock." + "At the start of your turn, gain #ychamp:Counter equal to half the amount of expired #yBlock [REMOVE_SPACE]." ] }, "champ:DuelingGlove": { "NAME": "Dueling Glove", "FLAVOR": "Count from ten...", "DESCRIPTIONS": [ - "After using a single-target #yAttack, if the target has no #yVulnerable, apply #b1 #yVulnerable." + "After using a single-target #yAttack [REMOVE_SPACE], if the target has no #yVulnerable [REMOVE_SPACE], apply #b1 #yVulnerable [REMOVE_SPACE]." ] }, "champ:FightingForDummies": { "NAME": "Dolphin's Style Guide", "FLAVOR": "Author: Renowned explorer and pugilist Dolphin K. Mist.", "DESCRIPTIONS": [ - "If you end your turn while in no #yStance, draw #b1 additional card next turn." + "If you end your turn while in no #yStance [REMOVE_SPACE], draw #b1 additional card next turn." ] }, "champ:GladiatorsBookOfMartialProwess": { "NAME": "Gladiators Manual", "FLAVOR": "Try everything - something will stick.", "DESCRIPTIONS": [ - "Whenever you play a #yCombo, a #yFinisher, and enter a #yStance in the same turn, gain #b1 #yStrength and #yDexterity." + "Whenever you play a #ychamp:Combo [REMOVE_SPACE], a #ychamp:Finisher [REMOVE_SPACE], and enter a #yStance in the same turn, gain #b1 #yStrength and #yDexterity [REMOVE_SPACE]." ] }, "champ:PowerArmor": { "NAME": "Power Armor", "FLAVOR": "Bought used.", "DESCRIPTIONS": [ - "Gain [E] at the start of your turn. NL Your maximum #yVigor and #ychamp:Counter is #b10." + "Gain [E] at the start of your turn. NL Your maximum #yVigor and #ychamp:Counter is #b", + " [REMOVE_SPACE]." + ] + }, + "champ:RageAmulet": { + "NAME": "Amulet of Unyielding", + "FLAVOR": "Strength once thought fleeting flows through you as if it had always been there.", + "DESCRIPTIONS": [ + "Whenever you spend #yVigor [REMOVE_SPACE], gain #b1 #yStrength for every #b", + " #yVigor spent." ] }, "champ:SignatureFinisher": { "NAME": "Signature Finisher", "FLAVOR": "And now, it's time for my ULTIMATE MOVE!", "DESCRIPTIONS": [ - "Upon pickup, choose a #yFinisher. This #yFinisher costs #b0, can be used without a #yStance, and never causes your #yStance to be exited.", + "Upon pickup, choose a #ychamp:Finisher [REMOVE_SPACE]. This #yFinisher costs #b0 [REMOVE_SPACE], can be used without a #yStance [REMOVE_SPACE], and never causes your #yStance to be exited.", "Choose a card for ", - " costs 0, can be used without a #yStance, and never causes your #yStance to be exited." + " costs #b0 [REMOVE_SPACE], can be used without a #yStance [REMOVE_SPACE], and never causes your #yStance to be exited.", + "The card attached to this relic has been #rremoved from your deck, the relic no longer functions." ] }, "champ:SpectersHand": { "NAME": "Spectre's Hand", "FLAVOR": "Some victories stay with you.", "DESCRIPTIONS": [ - "Whenever you enter a #yStance, gain a basic #yStrike or #yDefend. It costs #b0 and has #yExhaust." + "Whenever you enter a #yStance [REMOVE_SPACE], gain an #ygremlin:Echo of a basic #yStrike or #yDefend [REMOVE_SPACE]. It costs #b0 [REMOVE_SPACE]." ] }, "champ:LiftRelic": { @@ -97,14 +112,21 @@ "FLAVOR": "It's about the gigantic sword in your heart.", "DESCRIPTIONS": [ "Start each combat with #b", - " #yStrength." + " #yStrength [REMOVE_SPACE]." ] }, "champ:ChampStancesModRelic": { "NAME": "New Challenger", "FLAVOR": "Can you take the crown?", "DESCRIPTIONS": [ - "Start each combat in a random Champ #yStance." + "Start each combat in a random Champ #yStance [REMOVE_SPACE]." + ] + }, + "champ:BustedCrownGagText": { + "NAME": "Busted Crown", + "FLAVOR": "Imitation is the most sincere form of flattery... or is it? It doesn't even look that much like your crown. It's actually kind of insulting.", + "DESCRIPTIONS": [ + "Gain [E] at the start of your turn. Future card rewards have 2 less cards to choose from." ] } } \ No newline at end of file diff --git a/src/main/resources/champResources/localization/eng/UIStrings.json b/src/main/resources/champResources/localization/eng/UIStrings.json index 10310226a..ee07299d1 100644 --- a/src/main/resources/champResources/localization/eng/UIStrings.json +++ b/src/main/resources/champResources/localization/eng/UIStrings.json @@ -11,7 +11,7 @@ }, "champ:TechniqueMod": { "TEXT": [ - " NL Trigger *Stance *Skill *Bonus." + " NL Trigger *Stance *Skill champ:Bonus." ] }, "champ:OpenerMod": { diff --git a/src/main/resources/champResources/localization/jpn/CardStrings.json b/src/main/resources/champResources/localization/jpn/CardStrings.json index f4d357c4f..855c35a14 100644 --- a/src/main/resources/champResources/localization/jpn/CardStrings.json +++ b/src/main/resources/champResources/localization/jpn/CardStrings.json @@ -1,11 +1,11 @@ { "champ:Strike": { "NAME": "ストライク", - "DESCRIPTION": " !D! ダメージを与える。" + "DESCRIPTION": "!D! ダメージを与える。" }, "champ:Defend": { "NAME": "防御", - "DESCRIPTION": " !B! ブロックを得る。" + "DESCRIPTION": "!B! ブロックを得る。" }, "champ:Taunt": { "NAME": "誘い", @@ -14,13 +14,22 @@ }, "champ:Execute": { "NAME": "エクスキュート", - "DESCRIPTION": " !D! ダメージを !cool! 回与える。", - "UPGRADE_DESCRIPTION": " !D! ダメージを !cool! 回与える。" + "DESCRIPTION": "!D! ダメージを !cool! 回与える。", + "UPGRADE_DESCRIPTION": "!D! ダメージを !cool! 回与える。" }, "champ:StanceDance": { "NAME": "スタンスダンス", - "DESCRIPTION": "入るスタンスを選択。 NL 現在のスタンスを選んだ場合ランダムな champ:コンボ カードを1枚手札に加える。", - "UPGRADE_DESCRIPTION": "入るスタンスを選択。 NL ランダムな champ:コンボ カードを1枚手札に加える。", + "DESCRIPTION": "入るスタンスを選択。 NL champ:スキルボーナス を得る。", + "UPGRADE_DESCRIPTION": "入るスタンスを選択。 NL champ:スキルボーナス を2回得る。", + "EXTENDED_DESCRIPTION": [ + "champ:狂化 に入る。", + "champ:守護 に入る。" + ] + }, + "champ:StanceDanceCrown": { + "NAME": "王者の冠", + "DESCRIPTION": "入るスタンスを選択。 NL champ:スキルボーナス を得る。", + "UPGRADE_DESCRIPTION": "入るスタンスを選択。 NL champ:スキルボーナス を2回得る。", "EXTENDED_DESCRIPTION": [ "champ:狂化 に入る。", "champ:守護 に入る。" @@ -28,27 +37,27 @@ }, "champ:SwordSigil": { "NAME": "勝利の紋章", - "DESCRIPTION": "現在のスタンスの *スキルボーナス を !M! 回得る。 NL 廃棄" + "DESCRIPTION": "現在のスタンスの champ:スキルボーナス を !M! 回得る。" }, "champ:FaceSlap": { "NAME": "平手打ち", - "DESCRIPTION": " !D! ダメージを与える。 NL *狂化 champ:コンボ: 弱体 !M! を与える。" + "DESCRIPTION": "!D! ダメージを与える。 NL *狂化 champ:コンボ: 弱体 !M! を与える。" }, "champ:FlashCut": { "NAME": "フラッシュストライク", - "DESCRIPTION": " !D! ダメージを与える。 NL *守護 champ:コンボ: !M! champ:カウンター と !B! ブロックを得る。" + "DESCRIPTION": "!D! ダメージを与える。 NL *守護 champ:コンボ: !M! champ:カウンター と !B! ブロックを得る。" }, "champ:DefensiveShout": { "NAME": "守護の叫び", - "DESCRIPTION": " !M! champ:カウンター を得る。 NL champ:守護 のスタンスに入る。" + "DESCRIPTION": "!M! champ:カウンター を得る。 NL champ:守護 のスタンスに入る。" }, "champ:ShieldSigil": { "NAME": "チェインラッシュ", - "DESCRIPTION": " !D! ダメージを与える。 NL このターン スキルボーナスの効果が !M! 上昇。" + "DESCRIPTION": "!D! ダメージを与える。 NL このターン champ:スキルボーナス の効果が !M! 上昇する。" }, "champ:FocusedDefense": { "NAME": "回避行動", - "DESCRIPTION": " !B! ブロックを得る。 NL 気力 !M! を得る。 NL champ:狂化 のスタンスに入る。" + "DESCRIPTION": "!B! ブロックを得る。 NL 気力 !M! を得る。 NL champ:狂化 のスタンスに入る。" }, "champ:FocusedBerserking": { "NAME": "オールアウト", @@ -56,11 +65,11 @@ }, "champ:SetATrap": { "NAME": "トラップセット", - "DESCRIPTION": " !B! ブロックを得る。 NL *守護 champ:コンボ: 敵全体に 脱力 !M! を与える。" + "DESCRIPTION": "!B! ブロックを得る。 NL *守護 champ:コンボ: 敵全体に 脱力 !M! を与える。" }, "champ:Backstep": { "NAME": "バックステップ", - "DESCRIPTION": "champ:守護 のスタンスに入る NL !B! ブロックを得る。 NL *気力 で効果が増加する。" + "DESCRIPTION": "!B! ブロックを得る。 NL *気力 の影響を受ける。" }, "champ:BerserkersShout": { "NAME": "狂化の叫び", @@ -68,11 +77,11 @@ }, "champ:RageSigil": { "NAME": "戦闘プラン", - "DESCRIPTION": " !B! ブロックを得る。 NL 占術 !M! " + "DESCRIPTION": "champ:守護 のスタンスに入る。 NL !B! ブロックを得る。 NL 占術 !M! " }, "champ:GutPunch": { "NAME": "内臓攻撃", - "DESCRIPTION": " !D! ダメージを与える。 NL *全スタンス champ:コンボ: champ:アルティメット スタンスに入る。1ターン持続。 NL 廃棄" + "DESCRIPTION": "!D! ダメージを与える。 NL *全スタンス champ:コンボ: champ:アルティメット スタンスに入る。1ターン持続。 NL 廃棄" }, "champ:FanOfKnives": { "NAME": "扇形投擲", @@ -81,15 +90,15 @@ }, "champ:Devastate": { "NAME": "踏み荒らし", - "DESCRIPTION": " !D! ダメージを !M! 回与える。 NL フィニッシャー をプレイすると コストが [E] 下がる。" + "DESCRIPTION": "!D! ダメージを !M! 回与える。 NL フィニッシャー をプレイすると コストが [E] 下がる。" }, "champ:Circumvent": { "NAME": "迂回", - "DESCRIPTION": " !B! ブロックを得る。 NL カードを !M! 枚引く。 NL カードを !M! 枚捨てる。" + "DESCRIPTION": "!B! ブロックを得る。 NL カードを !M! 枚引く。 NL カードを !M! 枚捨てる。 NL *守護 champ:コンボ: カードを捨てない。" }, "champ:SkillfulDodge": { "NAME": "巧みな回避", - "DESCRIPTION": " !B! ブロックを得る。 NL !M! champ:カウンター を得る。 NL *守護 champ:コンボ: この戦闘中効果を !cool! 上昇させる。" + "DESCRIPTION": "!B! ブロックを得る。 NL !M! champ:カウンター を得る。 NL *守護 champ:コンボ: この戦闘中効果を !cool! 上昇させる。" }, "champ:TornadoPunch": { "NAME": "トルネードパンチ", @@ -98,7 +107,7 @@ }, "champ:EnGarde": { "NAME": "構える", - "DESCRIPTION": " !B! ブロックを得る。 NL このターンブロックが破壊されると次のターン !B! ブロックを得る。" + "DESCRIPTION": "!B! ブロックを得る。 NL このターンブロックが破壊されると次のターン !B! ブロックを得る。" }, "champ:ShieldSlam": { "NAME": "真実の瞬間", @@ -114,34 +123,34 @@ }, "champ:BringItOn": { "NAME": "攻撃してみろ!", - "DESCRIPTION": " !B! ブロックを得る。 NL !M! champ:カウンター を得る。", + "DESCRIPTION": "!B! ブロックを得る。 NL !M! champ:カウンター を得る。", "EXTENDED_DESCRIPTION": [ "スタンスに入っていない。" ] }, "champ:ShieldThrow": { "NAME": "シールドスロー", - "DESCRIPTION": "現在のブロックと同等のダメージを2回与える。 NL 脆弱化 2 を受ける。 NL *守護 champ:コンボ: 脆弱化 にならない。", + "DESCRIPTION": "現在のブロックと同等のダメージを2回与える。", "EXTENDED_DESCRIPTION": [ - "現在のブロックと同等のダメージ( !D! )を2回与える。 NL 脆弱化 2 を受ける。 NL *守護 champ:コンボ: 脆弱化 を2減らす。" + "現在のブロックと同等のダメージ( !D! )を2回与える。" ] }, "champ:FalseCounter": { "NAME": "弱ったふり", - "DESCRIPTION": " !B! ブロックを得る。 NL 次のターン [E] を得てカードを 2 枚引く。", - "UPGRADE_DESCRIPTION": " !B! ブロックを得る。 NL 次のターン [E] [E] を得てカードを 2 枚引く。" + "DESCRIPTION": "!B! ブロックを得る。 NL 次のターン [E] を得てカードを 2 枚引く。", + "UPGRADE_DESCRIPTION": "!B! ブロックを得る。 NL 次のターン [E] [E] を得てカードを 2 枚引く。" }, "champ:IronFortress": { "NAME": "テクニカルジグ", "DESCRIPTION": "スタンスに入る度 !M! ブロックを得る。" }, "champ:Lariat": { - "NAME": "強化ボディ", - "DESCRIPTION": " !B! ブロックを X 回得る。" + "NAME": "ラリアット", + "DESCRIPTION": "!B! ブロックを X 回得る。 NL champ:スキルボーナス を X 回得る。" }, "champ:HoldFirm": { "NAME": "鋼鉄の意思", - "DESCRIPTION": " !B! ブロックを得る。 NL !M! champ:カウンター を得る。 NL bronze:ブラー 1を得る。" + "DESCRIPTION": "!B! ブロックを得る。 NL !M! champ:カウンター を得る。 NL bronze:ブラー 1を得る。" }, "champ:ShieldWall": { "NAME": "鋼鉄の要塞", @@ -149,11 +158,11 @@ }, "champ:Haymaker": { "NAME": "パイルドライバー", - "DESCRIPTION": " !D! ダメージを与える。 NL 弱体 2 を与える。 NL 脱力 2 を与える。" + "DESCRIPTION": "!D! ダメージを与える。 NL 弱体 2 を与える。 NL 脱力 2 を与える。" }, "champ:ViciousMockery": { "NAME": "悪意ある嘲笑", - "DESCRIPTION": "気力 !M! を得る。 NL 脱力 !DM! を与える。", + "DESCRIPTION": "気力 !M! を得る。 NL 脱力 !DM! を与える。 NL champ:スキルボーナス を得る。", "EXTENDED_DESCRIPTION": [ "狂化 champ:コンボ: 一時的な 筋力 !M! を得る。 NL ", "守護 champ:コンボ: 一時的な 敏捷性 !M! を得る。" @@ -161,15 +170,15 @@ }, "champ:PreciseThrust": { "NAME": "正確な予想", - "DESCRIPTION": " !D! ダメージを与える。 NL *狂化 champ:コンボ: !D! ダメージ NL *守護 champ:コンボ: !B! ブロック" + "DESCRIPTION": "!D! ダメージを与える。 NL *狂化 champ:コンボ: !D! ダメージ NL *守護 champ:コンボ: !B! ブロック" }, "champ:CrookedStrike": { "NAME": "クルークストライク", - "DESCRIPTION": " !D! ダメージを与える。 NL 気力を消費しない。" + "DESCRIPTION": "!D! ダメージを与える。 NL 気力を消費しない。" }, "champ:RapidStrikes": { "NAME": "ラピッドストライク", - "DESCRIPTION": " !D! ダメージを !M! 回与える。 NL このターン手札の「ストライク」1枚のコストが0になる。" + "DESCRIPTION": "!D! ダメージを !M! 回与える。 NL このターン、手札の ランダムな 「 *ストライク 」 1枚のコストが0になる。" }, "champ:EnchantSword": { "NAME": "エンチャントソード", @@ -180,11 +189,11 @@ }, "champ:BladeFlurry": { "NAME": "マルチストライク", - "DESCRIPTION": " !D! ダメージを与える。 NL このターン次の 「ストライク」 を2回プレイする。" + "DESCRIPTION": "!D! ダメージを与える。 NL このターン次の 「ストライク」 を2回プレイする。" }, "champ:SwordThrow": { "NAME": "ソードスロー", - "DESCRIPTION": " !D! ダメージを !M! 回与える。 NL 脱力 2 を受ける。 NL *狂化 champ:コンボ: 脱力を受けない。" + "DESCRIPTION": "!D! ダメージを !M! 回与える。 NL 脱力 2 を受ける。 NL *狂化 champ:コンボ: 脱力を受けない。" }, "champ:MurderStrike": { "NAME": "マーダーストライク", @@ -192,40 +201,39 @@ }, "champ:HeavySlash": { "NAME": "達人の一撃", - "DESCRIPTION": " !D! ダメージを与える。 NL ランダムな スキル を1枚手札に加える。 NL それはコストが0になる。", - "UPGRADE_DESCRIPTION": " !D! ダメージを与える。 NL ランダムな スキル+ を1枚手札に加える。 NL それはコストが0になる。" + "DESCRIPTION": "!D! ダメージを与える。 NL 次のターン開始時、 防御されなかったダメージに等しい 気力 を得る。", + "UPGRADE_DESCRIPTION": "!D! ダメージを与える。 NL ランダムな スキル+ を1枚手札に加える。 NL それはコストが0になる。" }, "champ:CheapShot": { "NAME": "卑劣な攻撃", - "DESCRIPTION": " !D! ダメージを与える。 NL 対象がボスの場合更に2回攻撃する。それ以外なら hermit:スタン させる。 NL 廃棄" + "DESCRIPTION": "!D! ダメージを与える。 NL 対象がボスの場合更に2回攻撃する。それ以外なら hermit:スタン させる。 NL 廃棄" }, "champ:RisingSlash": { "NAME": "ライジングストライク", - "DESCRIPTION": " !D! ダメージを与える。 NL 最後にプレイされたカードが champ:フィニッシャー だった場合もう一度 !D! ダメージを与える。" + "DESCRIPTION": "!D! ダメージを与える。 NL 最後にプレイされたカードが champ:フィニッシャー だった場合もう一度 !D! ダメージを与える。" }, "champ:Shatter": { - "NAME": "シャッター", - "DESCRIPTION": "敵の ブロック を解除する。 NL !D! ダメージを与える。", - "UPGRADE_DESCRIPTION": "敵の ブロック と アーティファクト を解除する。 NL !D! ダメージを与える。" + "NAME": "シャッターストライク", + "DESCRIPTION": "!D! ダメージを与える。 NL 全スタンス champ:コンボ: 弱体 と 脱力 を !M! 与える。" }, "champ:EnragedBash": { "NAME": "怒りの一撃", - "DESCRIPTION": " !D! ダメージを与える。 NL *狂化 champ:コンボ: この戦闘中ヒット数が上昇する。", + "DESCRIPTION": "!D! ダメージを与える。 NL *狂化 champ:コンボ: この戦闘中ヒット数が上昇する。", "EXTENDED_DESCRIPTION": [ - " !D! ダメージを !M! 回与える。 NL *狂化 champ:コンボ: この戦闘中ヒット数が上昇する。" + "!D! ダメージを !M! 回与える。 NL *狂化 champ:コンボ: この戦闘中ヒット数が上昇する。" ] }, "champ:VampiricStrike": { - "NAME": "クラバー", - "DESCRIPTION": " !D! ダメージを与える。 NL 防御されなかったダメージ分のブロックを得る。" + "NAME": "クラバストライク", + "DESCRIPTION": "!D! ダメージを与える。 NL ブロックされなかったダメージに等しいブロックを得る。" }, "champ:AdrenalArmor": { "NAME": "アドレナリン分泌", - "DESCRIPTION": " !B! ブロックを得る。 NL 一時的な 筋力 !M! を得る。" + "DESCRIPTION": "!B! ブロックを得る。 NL 一時的な 筋力 !M! を得る。" }, "champ:HeartStrike": { "NAME": "奴を仕留める", - "DESCRIPTION": " !D! ダメージを与える。敵のHPが !M! % 以下ならもう一度与える。", + "DESCRIPTION": "!D! ダメージを与える。敵のHPが !M! % 以下ならもう一度与える。", "EXTENDED_DESCRIPTION": [ "今は時期ではない", "まだその敵を仕留める準備が出来てない" @@ -233,11 +241,11 @@ }, "champ:CrownThrow": { "NAME": "王冠攻撃", - "DESCRIPTION": " !D! ダメージを与える。 NL *狂化 champ:コンボ: アタックを !M! 枚引く。" + "DESCRIPTION": "!D! ダメージを与える。 NL *狂化 champ:コンボ: カードを !M! 枚引く。" }, "champ:Encircle": { "NAME": "包囲", - "DESCRIPTION": "敵全体に !D! ダメージを与える。 NL 攻撃が当たった敵の数だけ *スキルボーナス を得る。" + "DESCRIPTION": "敵全体に !D! ダメージを与える。 NL 攻撃した敵の数だけ カードを !M! 枚引く。" }, "champ:LastStand": { "NAME": "ラストスタンド", @@ -249,8 +257,8 @@ }, "champ:RecklessLeap": { "NAME": "リスキーストライク", - "DESCRIPTION": " !D! ダメージを与える。 NL 筋力 2 を得る。 NL 敏捷性 を 1 失う。 NL 廃棄", - "UPGRADE_DESCRIPTION": " !D! ダメージを与える。 NL 筋力 2 を得る。 NL 敏捷性 を 1 失う。", + "DESCRIPTION": "!D! ダメージを与える。 NL 筋力 !M! を得る。 NL champ:狂化 のスタンスに入る。 NL 廃棄", + "UPGRADE_DESCRIPTION": "!D! ダメージを与える。 NL 筋力 !M! を得る。 NL champ:狂化 のスタンスに入る。", "EXTENDED_DESCRIPTION": [ "今は動く時期じゃない" ] @@ -270,7 +278,7 @@ }, "champ:SteelEdge": { "NAME": "鋼鉄の刃", - "DESCRIPTION": " !D! ダメージを X 回与える。", + "DESCRIPTION": "!D! ダメージを X 回与える。 NL X回、最低でも1回次の効果を得る:", "EXTENDED_DESCRIPTION": [ "狂化 champ:コンボ: !D! ダメージを X 回与える。 NL ", "守護 champ:コンボ: !B! ブロックを X 回得る。", @@ -281,7 +289,7 @@ }, "champ:Improvising": { "NAME": "即興", - "DESCRIPTION": "ターン開始時スタンスに入っていなければランダムなスタンスに入る。" + "DESCRIPTION": "ターン開始時スタンスに入っていなければランダムなスタンスに入る。 NL スタンスに入る時、 champ:スキルボーナス を !M! 回得る。" }, "champ:CalledShot": { "NAME": "リフレッシュ", @@ -296,7 +304,7 @@ }, "champ:PerfectedStrike": { "NAME": "パーフェクトストライク", - "DESCRIPTION": " !D! ダメージを与える。 NL 全ての「ストライク」の数 x !M! 追加ダメージ。" + "DESCRIPTION": "!D! ダメージを与える。 NL 全ての「ストライク」の数 x !M! 追加ダメージ。" }, "champ:GladiatorForm": { "NAME": "闘士化", @@ -304,44 +312,42 @@ }, "champ:Duel": { "NAME": "挑戦者", - "DESCRIPTION": " !B! ブロックを得る。 NL !D! ダメージを与える。 NL 対象が 筋力 を持っている場合もう一度繰り返す。", - "UPGRADE_DESCRIPTION": " !B! ブロックを得る。 NL !D! ダメージを与える。 NL 対象が 筋力 を持っている場合もう一度繰り返す。" + "DESCRIPTION": "!B! ブロックを得る。 NL !D! ダメージを与える。 NL 対象が 筋力 を持っている場合もう一度繰り返す。", + "UPGRADE_DESCRIPTION": "!B! ブロックを得る。 NL !D! ダメージを与える。 NL 対象が 筋力 を持っている場合もう一度繰り返す。" }, "champ:DancingMaster": { "NAME": "ダンシングマスター", - "DESCRIPTION": "各ターン最初に *フィニッシャー を使用した時、 [E] を得てカードを1枚引く。" + "DESCRIPTION": "各ターン最初に champ:フィニッシャー を使用した時、 [E] を得てカードを1枚引く。" }, "champ:StrikeOfGenius": { "NAME": "ストライクジーニアス", - "DESCRIPTION": "ターン開始時ランダムな「ストライク」を得る。 NL そのカードはコストが0になり、 廃棄 が付く。", - "UPGRADE_DESCRIPTION": "ターン開始時ランダムな「ストライク+」を得る。 NL そのカードはコストが0になり、 廃棄 が付く。" + "DESCRIPTION": "ターン開始時ランダムな「ストライク」 の gremlin:エコー を得る。 NL そのカードはプレイするまでコストが0になる。", + "UPGRADE_DESCRIPTION": "ターン開始時ランダムな「ストライク+」 の gremlin:エコー を得る。 NL そのカードはプレイするまでコストが0になる。" }, "champ:DefensiveStyle": { - "NAME": "防御の構え", - "DESCRIPTION": "champ:守護 のスタンスに入る。 NL champ:守護 *スキルボーナス が追加で !M! champ:カウンター を得る", - "UPGRADE_DESCRIPTION": "天賦 NL champ:守護 のスタンスに入る。 NL champ:守護 *スキルボーナス が追加で !M! champ:カウンター を得る" + "NAME": "ダブルスタイル", + "DESCRIPTION": "champ:スキルボーナス が追加で !M! champ:カウンター と 気力を与える。" }, "champ:GladiatorStyle": { "NAME": "正々堂々", - "DESCRIPTION": "筋力 と 敏捷性 !M! を得る。" + "DESCRIPTION": "*狂化 champ:コンボ: 筋力 !M! を得る。 NL *守護 champ:コンボ: 敏捷性 !M! を得る。" }, "champ:BerserkerStyle": { - "NAME": "狂化の構え", - "DESCRIPTION": "champ:狂化 のスタンスに入る。 NL champ:狂化 *スキルボーナス 追加で !M! 気力を得る。", - "UPGRADE_DESCRIPTION": "天賦 NL champ:狂化 のスタンスに入る。 NL champ:狂化 *スキルボーナス 追加で !M! 気力を得る。" + "NAME": "ホーンブレード", + "DESCRIPTION": "あなたの 「ストライク」 カードは追加で !M! ダメージを与える。" }, "champ:Riposte": { - "NAME": "応酬", + "NAME": "リポストストライク", "DESCRIPTION": "エセリアル NL !D! ダメージを与える。 NL 廃棄" }, "champ:Endure": { "NAME": "耐える", - "DESCRIPTION": " !B! ブロックを得る。 NL このカードは *敏捷性 ではなく *筋力 の影響を受ける。", - "UPGRADE_DESCRIPTION": " !B! ブロックを得る。 NL このカードは *筋力 の影響も受ける。" + "DESCRIPTION": "champ:守護 のスタンスに入る。 NL !B! ブロックを得る。 NL このカードは *筋力 の影響も受ける。", + "UPGRADE_DESCRIPTION": "champ:守護 のスタンスに入る。 NL !B! ブロックを得る。 NL このカードは *筋力 の影響も受ける。" }, "champ:PreemptiveStrike": { "NAME": "プリムストライク", - "DESCRIPTION": "全ての敵に champ:カウンター に等しいダメージ。 NL champ:カウンター を半分失う。", + "DESCRIPTION": "全ての敵に champ:カウンター に等しいダメージ。 NL champ:カウンター を半分失う。 NL *守護 champ:コンボ: カウンターを失わない。", "EXTENDED_DESCRIPTION": [ " NL ( !D! ダメージ)", "今はこれを行えない" @@ -349,7 +355,7 @@ }, "champ:Parry": { "NAME": "パリイ", - "DESCRIPTION": " !B! ブロックを得る。 NL !M! champ:カウンター を得る。 NL このターン champ:カウンター を使用したら *応酬 を手札に加える。", + "DESCRIPTION": "!B! ブロックを得る。 NL !M! champ:カウンター を得る。 NL このターンに champ:カウンター を使用したら もう1枚 *リポストストライク を手札に加える。", "UPGRADE_DESCRIPTION": "エセリアル NL champ:カウンター に等しいダメージを与える。 NL 廃棄" }, "champ:EnchantCrown": { @@ -377,8 +383,8 @@ }, "champ:TripleStrike": { "NAME": "トリプルストライク", - "DESCRIPTION": " !D! ダメージを与える。 NL コストが0で *スキルボーナス が付いた *ストライク を2枚手札に加える。 NL 廃棄", - "UPGRADE_DESCRIPTION": " !D! ダメージを与える。 NL コストが0で *スキルボーナス が付いた *ストライク+ を2枚手札に加える。 NL 廃棄" + "DESCRIPTION": "!D! ダメージを与える。 NL コストが0で champ:スキルボーナス が付いた *ストライク の gremlin:エコー を2枚手札に加える。", + "UPGRADE_DESCRIPTION": "!D! ダメージを与える。 NL コストが0で champ:スキルボーナス が付いた *ストライク の gremlin:エコー を2枚手札に加える。" }, "champ:WindUp": { "NAME": "ワインドアップ", @@ -391,6 +397,6 @@ }, "champ:Headbutt": { "NAME": "ヘッドバット", - "DESCRIPTION": " !D! ダメージを与える。 NL 捨て札のカードを1枚山札の上に置く。" + "DESCRIPTION": "!D! ダメージを与える。 NL 捨て札のカードを1枚山札の上に置く。" } } diff --git a/src/main/resources/champResources/localization/jpn/CharacterStrings.json b/src/main/resources/champResources/localization/jpn/CharacterStrings.json index 0619cd739..424c99e3f 100644 --- a/src/main/resources/champResources/localization/jpn/CharacterStrings.json +++ b/src/main/resources/champResources/localization/jpn/CharacterStrings.json @@ -7,7 +7,7 @@ "TEXT": [ "言わずと知れたアリーナの王者。 NL 一度も負けた事が無い。", "NL あなたは刃を構える...", - "暗い道を歩いていると、数人のフードをかぶった人物が何か暗い儀式をしているところに出くわす。あなたが近づくと、彼らは不気味に一斉にこちらを向いた。その中で最も背の高い者は牙の生えた歯をむき出しにし、青白い長い手をあなたに向かって伸ばした。 NL 「 ~我らに加われ'アリーナの王'よ。そして塔の温もりを感じるのだ~ 」", + "暗い道を歩いていると、数人のフードをかぶった人物が何か暗い儀式をしているところに出くわす。あなたが近づくと、彼らは不気味に一斉にこちらを向いた。その中で最も背の高い者は牙の生えた歯をむき出しにし、青白い長い手をあなたに向かって伸ばした。 NL 「 ~我らに加われ'王者'よ。そして塔の温もりを感じるのだ~ 」", "#r狂化 スタンス", "#b守護 スタンス", diff --git a/src/main/resources/champResources/localization/jpn/EventStrings.json b/src/main/resources/champResources/localization/jpn/EventStrings.json index 65b7a2423..7ce75e09a 100644 --- a/src/main/resources/champResources/localization/jpn/EventStrings.json +++ b/src/main/resources/champResources/localization/jpn/EventStrings.json @@ -35,7 +35,7 @@ "長い時間をかけ、ようやく求めていた本が見つかった。 NL NL 座り心地の良い椅子に腰を掛け、忘れていた構えやスタイルに磨きをかけるのに時間をかける。自分のような完璧なファイターであっても、肉体と同じく精神も重要であり、鍛え続けなければいけないことを知っている。" ], "OPTIONS": [ - "[探す] 戦闘術の #g本 を探す。", + "[探す] #g戦闘術の本を探す。", "[Locked] 既にすべての本を持っている。" ] }, @@ -53,7 +53,7 @@ " 失う。", "[立ち去る]", "[Locked] 必要:アタックカード", - "選択したアタックに #yスキルボーナス #gを付与", + "選択したアタックに #yスキルボーナス #gを付与する。", "[読む] #g選択したアタックに #yスキルボーナス #gを付与。 #r呪い #r- #rプライド" ] }, @@ -86,7 +86,7 @@ "OPTIONS": [ "[戦闘: センチュリオンとミスティック] #g入手: #gマントの留め金。", "[戦闘: グレムリンボス] #g入手: #gチャンピオンベルト。", - "[戦闘: スレイバー二人] #g入手: #gリストブレード。", + "[戦闘: スレイバー二人] #g入手: #g蹄鉄。", "[立ち去る]" ] }, diff --git a/src/main/resources/champResources/localization/jpn/KeywordStrings.json b/src/main/resources/champResources/localization/jpn/KeywordStrings.json index 993730fd8..2c5598140 100644 --- a/src/main/resources/champResources/localization/jpn/KeywordStrings.json +++ b/src/main/resources/champResources/localization/jpn/KeywordStrings.json @@ -1,14 +1,18 @@ [ { - "PROPER_NAME": "テクニック", + "PROPER_NAME": "スキルボーナス", "NAMES": [ + "bonus", + "bonuses", "technique", "techniques", "champ:[crown_icon]", "[crown_icon]", - "テクニック" + "テクニック", + "ボーナス", + "スキルボーナス" ], - "DESCRIPTION": "#yスタンス では スキル にボーナスが付く。" + "DESCRIPTION": "各種 #yスタンス では スキル にボーナスが付く。 NL #y狂化 : #b2 #y気力 を得る。 NL #y守護 : #yカウンター #b3 を得る。" }, { "PROPER_NAME": "コンボ", @@ -19,6 +23,14 @@ ], "DESCRIPTION": "指定の #yスタンス でプレイすると追加効果が発動する。" }, + { + "PROPER_NAME": "ストライク", + "NAMES": [ + "ストライク", + "strikes" + ], + "DESCRIPTION": "カード名に 「ストライク」を含むカード。 NL 初期デッキ内の ストライク のみを指す物と混同しないよう注意。" + }, { "PROPER_NAME": "フィニッシャー", "NAMES": [ @@ -28,7 +40,7 @@ "champ:[fist_icon]", "フィニッシャー" ], - "DESCRIPTION": "スタンスに入っている必要がある。 NL フィニッシャーをプレイ後、スタンスを解除してフィニッシャーボーナスを得る。" + "DESCRIPTION": "スタンスに入っている必要がある。 NL フィニッシャーをプレイ後、スタンスを解除してフィニッシャーボーナスを得る。 NL #y狂化 : #y筋力 #b1 を得る。 NL #y守護 : #b8 #yブロック を得る。" }, { "PROPER_NAME": "カウンター", @@ -36,7 +48,7 @@ "counter", "カウンター" ], - "DESCRIPTION": "次に #y攻撃 でダメージを受けた時ダメージを返す。" + "DESCRIPTION": "次に #y攻撃 でダメージを受けた時、そのダメージ相当の #yリポストストライク を手札に加える。" }, { "PROPER_NAME": "守護", diff --git a/src/main/resources/champResources/localization/jpn/PowerStrings.json b/src/main/resources/champResources/localization/jpn/PowerStrings.json index 9caa7be51..ab4524144 100644 --- a/src/main/resources/champResources/localization/jpn/PowerStrings.json +++ b/src/main/resources/champResources/localization/jpn/PowerStrings.json @@ -3,7 +3,7 @@ "NAME": "カウンター", "DESCRIPTIONS": [ "次に #y攻撃 でダメージを受けた時 #b", - " ダメージで反撃する。" + " ダメージでを与える #yリポストストライク を手札に加える。" ] }, "champ:FocusedDefPower": { @@ -61,10 +61,8 @@ "champ:ImprovisingPower": { "NAME": "即興", "DESCRIPTIONS": [ - "毎ターン最初に #yコンボ をプレイした時、コストを0にして手札に戻す。プレイ後元に戻る。 #b", - " 残り回数:", - "毎ターン最初の #b", - " 枚の #yコンボ をプレイした時、コストを0にして手札に戻す。プレイ後元に戻る。 #b" + "ターン開始時 #yスタンス に入っていなければランダムな #yスタンス に入る。 #yスタンス に入った時、 *スキルボーナス を #b", + " 回得る。" ] }, "champ:CalledShotPower": { @@ -89,24 +87,24 @@ "champ:StrikeOfGeniusPower": { "NAME": "ストライクの才能", "DESCRIPTIONS": [ - "ターン開始時ランダムな 「ストライク」を手札に加える。それはプレイするまでコスト #b0 で 廃棄 を持つ。", - "ターン開始時ランダムな 「ストライク」を #b", + "ターン開始時ランダムな 「ストライク」 の #yエコー を手札に加える。それはプレイするまでコスト #b0 で 廃棄 を持つ。", + "ターン開始時ランダムな 「ストライク」の #yエコー を #b", " 枚手札に加える。それはプレイするまでコスト #b0 で 廃棄 を持つ。" ] }, "champ:StrikeOfGeniusUpgradedPower": { "NAME": "ストライクの才能+", "DESCRIPTIONS": [ - "ターン開始時ランダムな 「ストライク+」を手札に加える。それはプレイするまでコスト #b0 で 廃棄 を持つ。", - "ターン開始時ランダムな 「ストライク+」を #b", + "ターン開始時ランダムな 「ストライク+」の #yエコー を手札に加える。それはプレイするまでコスト #b0 で 廃棄 を持つ。", + "ターン開始時ランダムな 「ストライク+」の #yエコー を #b", " 枚手札に加える。それはプレイするまでコスト #b0 で 廃棄 を持つ。" ] }, "champ:DefensiveStylePower": { "NAME": "防御の構え", "DESCRIPTIONS": [ - "#y守護 の #yスキルボーナスに #b", - " #yカウンター が追加される。 " + "#y守護 の #yスキルボーナス が追加の #b", + " #yカウンター を得る。" ] }, "champ:GladiatorStylePower": { @@ -119,8 +117,8 @@ "champ:BerserkerStylePower": { "NAME": "狂化の構え", "DESCRIPTIONS": [ - "#y狂化 #yスキルボーナスに #b", - " #y気力 が追加される。" + "#y狂化 #yスキルボーナス が追加の #b", + " #y気力 を得る。" ] }, "champ:FalseCounterPower": { @@ -143,7 +141,7 @@ "champ:IronFortressPower": { "NAME": "テクニカルジグ", "DESCRIPTIONS": [ - "スタンスに入る度 #yスキルボーナスを ", + "#yスタンス に入る度 #yスキルボーナスを ", " #b", " 回発動する。" ] @@ -158,7 +156,7 @@ "champ:LastStandMod": { "NAME": "ラストスタンド", "DESCRIPTIONS": [ - "ターン開始時、一度だけHPが 50% 以下になっていた場合、全てのデバフを解除して 筋力 ", + "ターン開始時、一度だけHPが 50% 以下になっていた場合、全てのデバフを解除して #y筋力 ", " を得る。" ] }, @@ -203,7 +201,7 @@ "champ:ParryPower": { "NAME": "パリング", "DESCRIPTIONS": [ - "このターンカウンターが発動した場合、 応酬 を1枚手札に加える。" + "このターン #yカウンター が発動した場合、 #yリポストストライク を追加で手札に加える。" ] }, "champ:BoomerangPower": { @@ -236,6 +234,13 @@ "@敗北??@ NL @認めんぞ!!@" ] }, + "champ:HonePower": { + "NAME": "ホーンブレード", + "DESCRIPTIONS": [ + "あなたの #yストライク は追加で #b", + " ダメージを与える。" + ] + }, "champ:DoubleStyleThisTurnPower": { "NAME": "チェインラッシュ", "DESCRIPTIONS": [ diff --git a/src/main/resources/champResources/localization/jpn/RelicStrings.json b/src/main/resources/champResources/localization/jpn/RelicStrings.json index 9939151e9..4e67cc3ff 100644 --- a/src/main/resources/champResources/localization/jpn/RelicStrings.json +++ b/src/main/resources/champResources/localization/jpn/RelicStrings.json @@ -3,7 +3,7 @@ "NAME": "チャンピオンの王冠", "FLAVOR": "お前が勝者だ!", "DESCRIPTIONS": [ - "戦闘開始時 #b守護 または #r狂化 の #yスタンス に入る。" + "戦闘開始時、 #b守護 または #r狂化 の #yスタンス を選択して #yスタンス に入る。" ] }, "champ:BlackKnightHelmet": { @@ -31,14 +31,15 @@ "NAME": "皇帝の冠", "FLAVOR": "Conglaturation!! あなたは最高の勝者だ。", "DESCRIPTIONS": [ - "#rチャンピオンの王冠 を置き換える。 NL 戦闘開始時1ターンの間 #ychamp:アルティメット #yスタンス に入る。" + " ", + "#rチャンピオンの王冠 と置き換える。 NL 戦闘開始から #b3 ターンの間 #ychamp:アルティメット #yスタンス に入る。" ] }, "champ:DefensiveTrainingManual": { "NAME": "防御の神髄", "FLAVOR": "プロの一言:当たらないようにしよう。", "DESCRIPTIONS": [ - "守護のスタンスの #yフィニッシャーボーナス に追加で #b5 #yブロック 。" + "#ychamp:守護 #yスタンス の #yフィニッシャーボーナス が追加で #b3 #yブロック を得る 。" ] }, "champ:DeflectingBracers": { @@ -66,7 +67,7 @@ "NAME": "剣闘士マニュアル", "FLAVOR": "何でもやってみろ。何か引っかかるさ。", "DESCRIPTIONS": [ - "同じターンに #yコンボ と #yフィニッシャー をプレイし、更に #yスタンス に入ったら #y筋力 と #y敏捷性 を #b1 得る。" + "同じターンに #yコンボ と #yフィニッシャー と #yスタンス の3種をプレイする度に、 #y筋力 と #y敏捷性 を #b1 得る。" ] }, "champ:PowerArmor": { @@ -76,11 +77,19 @@ "ターン開始時 [E] を得る。 NL #y気力と #ychamp:カウンター の最大値が #b10 になる。" ] }, + "champ:RageAmulet": { + "NAME": "不屈のアミュレット", + "FLAVOR": "かつては儚いものと思われていた力が、まるで最初から自分の中にあったかのように、あなたの内を流れている。", + "DESCRIPTIONS": [ + " 一定の #y気力 を消費する度に #b1 #y筋力 を得る。 あと #b", + " #y気力" + ] + }, "champ:SignatureFinisher": { - "NAME": "フィニッシャーのサイン", + "NAME": "フィニッシャーサイン", "FLAVOR": "さあいよいよ俺のアルティメットムーブの出番だ!", "DESCRIPTIONS": [ - "入手時 デッキ の #yフィニッシャー を選択する。選ばれた #yフィニッシャー のコストが #b0 になり、 #yスタンス が無くても使用出来るようになり、使用時に #yスタンス を解除しなくなる。", + "入手時、 デッキ内の #yフィニッシャー を選択する。選んだ #yフィニッシャー のコストが #b0 になり、 #yスタンス が無くても使用出来るようになり、使用時に #yスタンス を解除しなくなる。", "選択されたカード: ", " コストが #b0 になり、 #yスタンス が無くても使用出来るようになり、使用時に #yスタンス を解除しなくなる" ] @@ -106,5 +115,12 @@ "DESCRIPTIONS": [ "戦闘開始時ランダムにチャンプの #yスタンス に入る。" ] + }, + "champ:BustedCrownGagText": { + "NAME": "壊れた王冠", + "FLAVOR": "模倣は最大の賛辞…それとも?しかしあなたの王冠には似ても似つかない。失礼なくらいだ。", + "DESCRIPTIONS": [ + "ターン開始時、 [E] を得る。報酬のカード選択画面で、選択出来るカードが2枚減る。" + ] } } \ No newline at end of file diff --git a/src/main/resources/champResources/localization/jpn/UIStrings.json b/src/main/resources/champResources/localization/jpn/UIStrings.json index b3235d96e..c53466b45 100644 --- a/src/main/resources/champResources/localization/jpn/UIStrings.json +++ b/src/main/resources/champResources/localization/jpn/UIStrings.json @@ -11,7 +11,7 @@ }, "champ:TechniqueMod": { "TEXT": [ - " NL *スキルボーナス" + " NL *スキル champ:ボーナス" ] }, "champ:OpenerMod": { diff --git a/src/main/resources/champResources/localization/kor/CardStrings.json b/src/main/resources/champResources/localization/kor/CardStrings.json index dc8afc42a..ee4e4cd1b 100644 --- a/src/main/resources/champResources/localization/kor/CardStrings.json +++ b/src/main/resources/champResources/localization/kor/CardStrings.json @@ -19,8 +19,17 @@ }, "champ:StanceDance": { "NAME": "춤 자세", - "DESCRIPTION": "선택한 champ:자세를 취합니다. NL 그 champ:자세를 취하고 있었다면 그 champ:자세의 champ:연계 카드를 1장 얻습니다.", - "UPGRADE_DESCRIPTION": "선택한 champ:자세를 취합니다. NL 선택한 champ:자세의 champ:연계 카드를 1장 얻습니다.", + "DESCRIPTION": "선택한 champ:자세를 취합니다. NL 선택한 champ:자세의 *스킬 카드 champ:보너스를 얻습니다.", + "UPGRADE_DESCRIPTION": "선택한 champ:자세를 취합니다. NL 선택한 champ:자세의 *스킬 카드 champ:보너스를 2번 얻습니다.", + "EXTENDED_DESCRIPTION": [ + "champ:광폭화 자세를 취합니다.", + "champ:수비 자세를 취합니다." + ] + }, + "champ:StanceDanceCrown": { + "NAME": "챔피언의 왕관", + "DESCRIPTION": "선택한 champ:자세를 취합니다. NL 선택한 champ:자세의 *스킬 카드 champ:보너스를 얻습니다.", + "UPGRADE_DESCRIPTION": "선택한 champ:자세를 취합니다. NL 선택한 champ:자세의 *스킬 카드 champ:보너스를 2번 얻습니다.", "EXTENDED_DESCRIPTION": [ "champ:광폭화 자세를 취합니다.", "champ:수비 자세를 취합니다." @@ -28,7 +37,7 @@ }, "champ:SwordSigil": { "NAME": "승리의 인장", - "DESCRIPTION": "현재 자세의 *스킬 *카드 *보너스를 !M! 번 얻습니다. NL 소멸." + "DESCRIPTION": "현재 자세의 *스킬 *카드 champ:보너스를 !M! 번 얻습니다." }, "champ:FaceSlap": { "NAME": "안면 강타", @@ -44,7 +53,7 @@ }, "champ:ShieldSigil": { "NAME": "쇠사슬 채찍", - "DESCRIPTION": "피해를 !D! 줍니다. NL 이번 턴 동안 *스킬 *카드 *보너스를 !M! 증가시킵니다." + "DESCRIPTION": "피해를 !D! 줍니다. NL 이번 턴 동안 *스킬 *카드 champ:보너스를 !M! 증가시킵니다." }, "champ:FocusedDefense": { "NAME": "상하좌우", @@ -60,7 +69,7 @@ }, "champ:Backstep": { "NAME": "뒷걸음", - "DESCRIPTION": "champ:수비 자세를 취합니다. NL 방어도를 !B! 얻습니다. 이 카드의 방어도를 활력 만큼 증가시킵니다." + "DESCRIPTION": "방어도를 !B! 얻습니다. 이 카드의 방어도를 활력 만큼 증가시킵니다." }, "champ:BerserkersShout": { "NAME": "광폭화 함성", @@ -68,7 +77,7 @@ }, "champ:RageSigil": { "NAME": "싸움 계획", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL 예지 !M! ." + "DESCRIPTION": "champ:수비 자세를 취합니다. NL 방어도를 !B! 얻습니다. NL 예지 !M! ." }, "champ:GutPunch": { "NAME": "내장 파괴", @@ -85,7 +94,7 @@ }, "champ:Circumvent": { "NAME": "우회", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL 카드를 !M! 장 뽑습니다. NL 카드를 !M! 장 버립니다." + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 카드를 !M! 장 뽑습니다. NL 카드를 !M! 장 버립니다. NL *수비 champ:연계: 카드를 버리지 않습니다." }, "champ:SkillfulDodge": { "NAME": "능숙한 회피", @@ -121,9 +130,9 @@ }, "champ:ShieldThrow": { "NAME": "방패 투척", - "DESCRIPTION": "현재 방어도 만큼 피해를 2번 줍니다. NL 손상을 2 얻습니다. NL *수비 champ:연계: 손상을 2 잃습니다.", + "DESCRIPTION": "현재 방어도 만큼 피해를 2번 줍니다.", "EXTENDED_DESCRIPTION": [ - "현재 방어도 !D! 만큼 피해를 2번 줍니다. NL 손상을 2 얻습니다. NL *수비 champ:연계: 손상을 2 잃습니다" + "현재 방어도 !D! 만큼 피해를 2번 줍니다." ] }, "champ:FalseCounter": { @@ -136,8 +145,8 @@ "DESCRIPTION": "champ:자세를 취할 때마다 방어도를 !M! 얻습니다." }, "champ:Lariat": { - "NAME": "강화된 몸체", - "DESCRIPTION": "방어도를 !B! 만큼 X번 얻습니다." + "NAME": "래리어트", + "DESCRIPTION": "방어도를 !B! 만큼 X번 얻습니다. NL 현재 자세의 *스킬 *카드 champ:보너스를 X번 얻습니다." }, "champ:HoldFirm": { "NAME": "버티기", @@ -153,7 +162,7 @@ }, "champ:ViciousMockery": { "NAME": "악랄한 조롱", - "DESCRIPTION": "활력을 !M! 얻습니다. NL 약화를 !DM! 부여합니다.", + "DESCRIPTION": "활력 을 !M! 얻습니다. NL 약화를 !DM! 부여합니다. NL 현재 자세의 *스킬 *카드 champ:보너스를 얻습니다.", "EXTENDED_DESCRIPTION": [ "광폭화 champ:연계: 힘을 !M! 얻습니다. 이번 턴이 끝날 때 힘을 !M! 잃습니다. NL ", "수비 champ:연계: 민첩을 !M! 얻습니다. 이번 턴이 끝날 때 민첩을 !M! 잃습니다." @@ -169,7 +178,7 @@ }, "champ:RapidStrikes": { "NAME": "재빠른 타격", - "DESCRIPTION": "피해를 !D! 만큼 !M! 번 줍니다. NL 이번 턴 동안 손에 있는 \"타격\" 이 포함된 카드의 비용을 0으로 낮춥니다." + "DESCRIPTION": "피해를 !D! 만큼 !M! 번 줍니다. NL 이번 턴 동안 손에 있는 \"타격\" 이 포함된 카드를 무작위로 1장 비용을 0으로 낮춥니다." }, "champ:EnchantSword": { "NAME": "검 강화", @@ -188,11 +197,11 @@ }, "champ:MurderStrike": { "NAME": "죽이는 타격", - "DESCRIPTION": "보존. NL 피해를 !D! 줍니다. NL 이번 전투 동안 *스킬 *카드 *보너스를 얻을 때마다 이 카드의 피해량을 !M! 증가시킵니다." + "DESCRIPTION": "보존. NL 피해를 !D! 줍니다. NL 이번 전투 동안 *스킬 *카드 champ:보너스를 얻을 때마다 이 카드의 피해량을 !M! 증가시킵니다." }, "champ:HeavySlash": { "NAME": "숙달된 베기", - "DESCRIPTION": "피해를 !D! 줍니다. NL 무작위 스킬 카드를 1장 얻습니다. NL 그 카드의 비용은 0이 됩니다.", + "DESCRIPTION": "피해를 !D! 줍니다. NL 다음 턴 시작 시 막히지 않은 피해만큼 활력 을 얻습니다.", "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL 무작위 강화된 스킬 카드를 1장 얻습니다. NL 그 카드의 비용은 0이 됩니다." }, "champ:CheapShot": { @@ -205,8 +214,7 @@ }, "champ:Shatter": { "NAME": "산산조각", - "DESCRIPTION": "적의 모든 방어도를 없앱니다. NL 피해를 !D! 줍니다.", - "UPGRADE_DESCRIPTION": "적의 모든 방어도 와 인공물을 없앱니다. NL 피해를 !D! 줍니다." + "DESCRIPTION": "피해를 !D! 줍니다. NL *자세 champ:연계: 약화 와 취약을 !M! 부여합니다." }, "champ:EnragedBash": { "NAME": "불타는 맹공격", @@ -216,7 +224,7 @@ ] }, "champ:VampiricStrike": { - "NAME": "구타", + "NAME": "구타 타격", "DESCRIPTION": "피해를 !D! 줍니다. NL 막히지 않은 피해만큼 방어도를 얻습니다." }, "champ:AdrenalArmor": { @@ -233,11 +241,11 @@ }, "champ:CrownThrow": { "NAME": "왕관 부메랑", - "DESCRIPTION": "피해를 !D! 줍니다. NL *광폭화 champ:연계: 공격 카드를 !M! 장 뽑습니다." + "DESCRIPTION": "피해를 !D! 줍니다. NL *광폭화 champ:연계: 카드를 !M! 장 뽑습니다." }, "champ:Encircle": { "NAME": "포위", - "DESCRIPTION": "적 전체에게 피해를 !D! 줍니다. NL 공격한 대상 하나당 취한 자세의 *스킬 *카드 *보너스를 발동시킵니다." + "DESCRIPTION": "적 전체에게 피해를 !D! 줍니다. NL 공격한 대상 하나당 카드를 !M! 장 뽑습니다." }, "champ:LastStand": { "NAME": "최후의 저항", @@ -249,8 +257,8 @@ }, "champ:RecklessLeap": { "NAME": "무모한 타격", - "DESCRIPTION": "피해를 !D! 줍니다. NL 힘을 2 얻습니다. NL 민첩을 1 잃습니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL 힘을 2 얻습니다. NL 민첩을 1 잃습니다.", + "DESCRIPTION": "피해를 !D! 줍니다. NL 힘을 !M! 얻습니다. NL champ:광폭화 자세를 취합니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL 힘을 !M! 얻습니다. NL champ:광폭화 자세를 취합니다.", "EXTENDED_DESCRIPTION": [ "그건 어리석은 짓이다." ] @@ -270,7 +278,7 @@ }, "champ:SteelEdge": { "NAME": "강철 칼날", - "DESCRIPTION": "피해를 !D! 만큼 X번 줍니다.", + "DESCRIPTION": "피해를 !D! 만큼 X번 줍니다. NL 이 효과를 1번 이상 X 번 발동합니다:", "EXTENDED_DESCRIPTION": [ "광폭화 champ:연계: 피해를 !D! 만큼 X번 줍니다. NL ", "수비 champ:연계: 방어도를 X번 !B! 얻습니다.", @@ -281,7 +289,7 @@ }, "champ:Improvising": { "NAME": "증강", - "DESCRIPTION": "턴 시작 시 자세를 취하고 있지 않다면 무작위 자세를 취합니다." + "DESCRIPTION": "턴 시작 시 자세를 취하고 있지 않다면 무작위 자세를 취합니다. NL 자세를 취하면 *스킬 *카드 champ:보너스를 !M! 번 얻습니다." }, "champ:CalledShot": { "NAME": "원기 회복", @@ -309,35 +317,33 @@ }, "champ:DancingMaster": { "NAME": "춤 전문가", - "DESCRIPTION": "매 턴 처음으로 *마무리 카드를 사용한다면 [E] 를 얻고 카드를 1장 뽑습니다." + "DESCRIPTION": "매 턴 처음으로 champ:마무리 카드를 사용한다면 [E] 를 얻고 카드를 1장 뽑습니다." }, "champ:StrikeOfGenius": { "NAME": "천재적인 타격", - "DESCRIPTION": "내 턴 시작 시 이름에 \"타격\" 이 포함된 무작위 카드를 1장 얻습니다. NL 그 카드의 비용은 사용하기 전까지 0이고 소멸합니다.", - "UPGRADE_DESCRIPTION": "내 턴 시작 시 이름에 강화된 \"타격\" 이 포함된 무작위 카드를 1장 얻습니다. NL 그 카드의 비용은 사용하기 전까지 0이고 소멸합니다." + "DESCRIPTION": "내 턴 시작 시 이름에 \"타격\" 이 포함된 무작위 gremlin:메아리를 얻습니다. NL 그 카드의 비용은 사용하기 전까지 0입니다.", + "UPGRADE_DESCRIPTION": "내 턴 시작 시 이름에 강화된 \"타격\" 이 포함된 무작위 gremlin:메아리를 얻습니다. NL 그 카드의 비용은 사용하기 전까지 0입니다." }, "champ:DefensiveStyle": { - "NAME": "수비 태세", - "DESCRIPTION": "champ:수비 자세를 취합니다. NL champ:수비 *스킬 *카드 *보너스의 champ:반격을 !M! 증가시킵니다.", - "UPGRADE_DESCRIPTION": "선천성. NL champ:수비 자세를 취합니다. NL champ:수비 *카드 *보너스의 champ:반격을 !M! 증가시킵니다." + "NAME": "이중 태세", + "DESCRIPTION": "*스킬 *카드 champ:보너스의 활력 과 champ:반격을 !M! 증가시킵니다." }, "champ:GladiatorStyle": { "NAME": "건투", - "DESCRIPTION": "힘을 !M! 얻습니다. NL 민첩을 !M! 얻습니다." + "DESCRIPTION": "*광폭화 champ:연계: 힘을 !M! 얻습니다. NL *수비 champ:연계: 민첩을 !M! 얻습니다." }, "champ:BerserkerStyle": { - "NAME": "광폭화 태세", - "DESCRIPTION": "champ:광폭화 자세를 취합니다. NL champ:광폭화 *스킬 *카드 *보너스의 활력 을 !M! 증가시킵니다.", - "UPGRADE_DESCRIPTION": "선천성. NL champ:광폭화 자세를 취합니다. NL champ:광폭화 *스킬 *카드 *보너스의 활력 을 !M! 증가시킵니다." + "NAME": "칼갈이", + "DESCRIPTION": "보유 중인 카드 중 이름에 \"타격\" 이 포함된 카드의 피해량을 !M! 증가시킵니다." }, "champ:Riposte": { - "NAME": "응수", + "NAME": "응수 타격", "DESCRIPTION": "휘발성. NL 피해를 !D! 줍니다. NL 소멸." }, "champ:Endure": { "NAME": "감내", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL 이 카드의 방어도 는 민첩 대신 힘 으로 증가합니다.", - "UPGRADE_DESCRIPTION": "방어도를 !B! 얻습니다. NL 이 카드의 방어도 는 민첩 대신 힘 으로 증가합니다." + "DESCRIPTION": "champ:수비 자세를 취합니다. NL 방어도를 !B! 얻습니다. NL 이 카드의 방어도는 힘 만큼 증가합니다.", + "UPGRADE_DESCRIPTION": "champ:수비 자세를 취합니다. NL 방어도를 !B! 얻습니다. NL 이 카드의 방어도는 힘 만큼 증가합니다." }, "champ:PreemptiveStrike": { "NAME": "우선 타격", @@ -349,7 +355,7 @@ }, "champ:Parry": { "NAME": "받아치기", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL champ:반격을 !M! 얻습니다. NL 이번 턴에 champ:반격한다면 *응수를 1장 얻습니다.", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL champ:반격을 !M! 얻습니다. NL 이번 턴에 champ:반격한다면 *응수를 1장 추가로 얻습니다.", "UPGRADE_DESCRIPTION": "휘발성. NL champ:반격한 만큼 피해를 줍니다. NL 소멸." }, "champ:EnchantCrown": { @@ -377,8 +383,8 @@ }, "champ:TripleStrike": { "NAME": "삼중 타격", - "DESCRIPTION": "피해를 !D! 줍니다. NL *타격을 2장 얻습니다. 그 카드의 비용은 0이 되고 *스킬 *카드 *보너스 효과를 얻습니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL *타격+을 2장 얻습니다. 그 카드의 비용은 0이 되고 *스킬 *카드 *보너스 효과를 얻습니다. NL 소멸." + "DESCRIPTION": "피해를 !D! 줍니다. NL *타격의 gremlin:메아리를 2장 얻습니다. 그 카드의 비용은 0이 되고 *스킬 *카드 champ:보너스 효과를 얻습니다.", + "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL *타격+의 gremlin:메아리를 2장 얻습니다. 그 카드의 비용은 0이 되고 *스킬 *카드 champ:보너스 효과를 얻습니다." }, "champ:WindUp": { "NAME": "뒤처리", diff --git a/src/main/resources/champResources/localization/kor/EventStrings.json b/src/main/resources/champResources/localization/kor/EventStrings.json index 39da01b2c..670077cf1 100644 --- a/src/main/resources/champResources/localization/kor/EventStrings.json +++ b/src/main/resources/champResources/localization/kor/EventStrings.json @@ -12,7 +12,7 @@ "champ:Colosseum": { "NAME": "콜로세움", "DESCRIPTIONS": [ - "첨탑을 따라 계속해서 내려가다 보니, 당신은 거대한 경기장 근처에서 매복하던 자들을 발견합니다. 다가가자 깜짝 놀란 노예상인이 재빨리 어찌 된 사정인지 설명합니다. NL NL \"챔피언님! 이곳에 뼈를 묻겠습니다요! 새로운 도전자를 상대하러 오신 건가요?\"", + "첨탑을 따라 계속해서 내려가다 보니, 당신은 거대한 경기장 근처에서 매복하던 자들을 발견합니다. 다가가자 깜짝 놀란 노예상인이 재빨리 어찌 된 사정인지 설명합니다. NL NL \"챔피언님! 부디 자비를 베풀어주십쇼! 혹시 새로운 도전자를 상대하러 오신 건가요?\"", "새로운 도전자? 이보다 좋은 일이 어디 있겠습니까! NL NL 하지만 도전자를 상대하려면 조금 기다려야 할 것입니다. 관객들은 늘 챔피언이 따끈따끈한 먹잇감을 학살하는 데 열광하니까요...", "당신은 수많은 #b노예상인들과, #p광신자, 그리고 도시의 다른 주민들로 가득 찬 거대한 경기장에 들어섭니다. NL NL ", "@\"누가@ @감히@ @내@ @자리를@ @노리느냐?!\"@ 붐비는 경기장 한가운데서 외치자 새로운 '도전자'가 손짓합니다. NL 다가온 기사는 당신과 아주 유사한 무장을 하고 있었습니다. 다른 점이라곤 검은색 잉크로 흠뻑 물들였다는 것뿐이었죠. 관중은 더 열렬한 환호를 보냅니다. NL NL 챔피언은 오직 하나니까요!", @@ -21,8 +21,8 @@ "검은 기사" ], "OPTIONS": [ - "[명예를 지킨다] 검은 기사와 #r싸웁니다. #g많은 #g보상을 #g얻습니다.", - "[참가한다] 사로잡힌 영웅과 #r싸웁니다. #g많은 #g보상을 #g얻습니다.", + "[명예를 지킨다] #r검은 #r기사와 #r싸웁니다. #g많은 #g보상을 #g얻습니다.", + "[참가한다] #r사로잡힌 #r영웅과 #r싸웁니다. #g많은 #g보상을 #g얻습니다.", "[떠난다]", "[싸운다!]", "[계속한다]" @@ -86,7 +86,7 @@ "OPTIONS": [ "[백부장 & 신비주의자와 싸운다] #g잠금 #g걸쇠를 #g얻습니다.", "[귀족 그렘린과 싸운다] #g챔피언 #g벨트를 #g얻습니다.", - "[노예 상인 이인조와 싸운다] #g손목검을 #g얻습니다.", + "[노예 상인 이인조와 싸운다] #g편자를 #g얻습니다.", "[떠난다]" ] }, diff --git a/src/main/resources/champResources/localization/kor/KeywordStrings.json b/src/main/resources/champResources/localization/kor/KeywordStrings.json index e4803c8e4..ebc24f0f0 100644 --- a/src/main/resources/champResources/localization/kor/KeywordStrings.json +++ b/src/main/resources/champResources/localization/kor/KeywordStrings.json @@ -1,7 +1,10 @@ [ { - "PROPER_NAME": "기술", + "PROPER_NAME": "스킬 보너스", "NAMES": [ + "보너스", + "보너스를", + "보너스의", "기술", "기술의", "기술을", @@ -10,7 +13,7 @@ "champ:[crown_icon]", "[crown_icon]" ], - "DESCRIPTION": "자세를 취하고 있을 때 스킬 카드를 사용하면 얻는 추가 효과입니다." + "DESCRIPTION": "자세를 취하고 있을 때 스킬 카드를 사용하면 얻는 추가 효과입니다. NL #r광폭화 #y스킬 #y보너스: #y활력을 #b2 얻습니다. NL #b수비 #y스킬 #y보너스: #y반격을 #b3 얻습니다." }, { "PROPER_NAME": "연계", @@ -21,6 +24,16 @@ ], "DESCRIPTION": "이번 턴 동안 해당하는 #y자세를 취하고 있으면 발동되는 추가 효과입니다." }, + { + "PROPER_NAME": "타격", + "NAMES": [ + "타격", + "타격을", + "strike", + "strikes" + ], + "DESCRIPTION": "기본 #y타격 카드를 제외한 카드 중 이름에 \"타격\" 이 포함된 카드를 의미합니다." + }, { "PROPER_NAME": "마무리", "NAMES": [ @@ -30,7 +43,7 @@ "[fist_icon]", "champ:[fist_icon]" ], - "DESCRIPTION": "자세를 취해야만 사용할 수 있습니다. NL 마무리 카드를 사용하면 #y자세에서 벗어나고 마무리 추가 효과가 적용됩니다." + "DESCRIPTION": "자세를 취해야만 사용할 수 있습니다. NL 마무리 카드를 사용하면 #y자세에서 벗어나고 마무리 추가 효과가 적용됩니다. NL #r광폭화 #y스킬 #y보너스: #y힘을 #b1 얻습니다. NL #b수비 #y스킬 #y보너스: #y방어도를 #b8 얻습니다." }, { "PROPER_NAME": "반격", @@ -43,7 +56,7 @@ "반격한다면", "counter" ], - "DESCRIPTION": "#y공격을 받을 때 공격한 대상에게 피해를 줍니다." + "DESCRIPTION": "#y공격 피해를 받는다면 피해를 주는 #y응수 #y타격을 얻습니다." }, { "PROPER_NAME": "수비", @@ -80,7 +93,7 @@ "ultimate", "ultimate." ], - "DESCRIPTION": "#y자세. #y수비와 #y광폭화 자세를 모두 취한 것으로 취급합니다. NL 이 자세에서 벗어난다면 바로 이 자세를 취합니다." + "DESCRIPTION": "#y자세. #b수비와 #r광폭화 자세를 모두 취한 것으로 취급합니다. NL 이 자세에서 벗어난다면 바로 이 자세를 취합니다." }, { "PROPER_NAME": "피로", diff --git a/src/main/resources/champResources/localization/kor/PowerStrings.json b/src/main/resources/champResources/localization/kor/PowerStrings.json index ba8f667c9..2047f2675 100644 --- a/src/main/resources/champResources/localization/kor/PowerStrings.json +++ b/src/main/resources/champResources/localization/kor/PowerStrings.json @@ -2,8 +2,8 @@ "champ:CounterPower": { "NAME": "반격", "DESCRIPTIONS": [ - "다음으로 피해를 받으면 공격한 대상에게 피해를 #b", - " 줍니다." + "다음으로 피해를 받으면 피해를 #b", + " 만큼 주는 #y응수 #y타격을 얻습니다." ] }, "champ:FocusedDefPower": { @@ -61,7 +61,8 @@ "champ:ImprovisingPower": { "NAME": "증강", "DESCRIPTIONS": [ - "내 턴 시작 시 자세를 취하고 있지 않다면 무작위 자세를 취합니다." + "내 턴 시작 시 #y자세를 취하고 있지 않다면 무작위 #y자세를 취합니다. 자세를 취할 때마다 취한 자세의 스킬 카드 보너스를 #b", + " 번 얻습니다." ] }, "champ:CalledShotPower": { @@ -86,16 +87,16 @@ "champ:StrikeOfGeniusPower": { "NAME": "천재적인 타격", "DESCRIPTIONS": [ - "턴 시작 시 이름에 \"타격\" 이 포함된 무작위 카드를 1장 얻습니다. 그 카드의 비용은 사용하기 전까지 #b0 이고 소멸합니다.", - "턴 시작 시 이름에 \"타격\" 이 포함된 무작위 카드를 #b", - " 장 얻습니다. 그 카드의 비용은 사용하기 전까지 #b0 이고 소멸합니다." + "턴 시작 시 이름에 \"타격\" 이 포함된 무작위 카드의 #y메아리를 1장 얻습니다. 그 카드의 비용은 사용하기 전까지 #b0 입니다.", + "턴 시작 시 이름에 \"타격\" 이 포함된 무작위 카드의 #y메아리를 #b", + " 장 얻습니다. 그 카드의 비용은 사용하기 전까지 #b0 입니다." ] }, "champ:StrikeOfGeniusUpgradedPower": { "NAME": "천재적인 타격+", "DESCRIPTIONS": [ - "턴 시작 시 이름에 \"타격\" 이 포함된 무작위 #y강화된 카드를 1장 얻습니다. 그 카드의 비용은 사용하기 전까지 #b0 이고 소멸합니다.", - "턴 시작 시 이름에 \"타격\" 이 포함된 무작위 #y강화된 카드를 #b", + "턴 시작 시 이름에 \"타격\" 이 포함된 무작위 카드의 #y강화된 #y메아리를 1장 얻습니다. 그 카드의 비용은 사용하기 전까지 #b0 이고 소멸합니다.", + "턴 시작 시 이름에 \"타격\" 이 포함된 무작위 카드의 #y강화된 #y메아리를 #b", " 장 얻습니다. 그 카드의 비용은 사용하기 전까지 #b0 이고 소멸합니다." ] }, @@ -200,7 +201,7 @@ "champ:ParryPower": { "NAME": "받아치기", "DESCRIPTIONS": [ - "이번 턴에 #y반격이 발동하면 #y응수를 한 장 얻습니다." + "이번 턴에 #y반격이 발동하면 #y응수 #y타격을 한 장 추가로 얻습니다." ] }, "champ:BoomerangPower": { @@ -219,9 +220,9 @@ "champ:DualPlaySrikePower": { "NAME": "타격 돌풍", "DESCRIPTIONS": [ - "이번 턴에 다음으로 사용하는 #y타격 카드를 2번 사용합니다.", + "이번 턴에 다음으로 사용하는 #y\"타격\" 카드를 2번 사용합니다.", "이번 턴에 ", - " 번까지 사용하는 #y타격 카드를 2번 사용합니다." + " 번까지 사용하는 #y\"타격\" 카드를 2번 사용합니다." ] }, "champ:LastStandPower": { @@ -233,6 +234,13 @@ "@패배??@ NL @말도@ @안돼!!@" ] }, + "champ:HonePower": { + "NAME": "칼갈이", + "DESCRIPTIONS": [ + "보유 중인 카드 중 이름에 \"타격\" 이 포함된 카드의 피해량이 #b", + " 증가합니다." + ] + }, "champ:DoubleStyleThisTurnPower": { "NAME": "쇠사슬 채찍", "DESCRIPTIONS": [ diff --git a/src/main/resources/champResources/localization/kor/RelicStrings.json b/src/main/resources/champResources/localization/kor/RelicStrings.json index d82a720a7..8884072d1 100644 --- a/src/main/resources/champResources/localization/kor/RelicStrings.json +++ b/src/main/resources/champResources/localization/kor/RelicStrings.json @@ -3,14 +3,14 @@ "NAME": "챔피언 왕관", "FLAVOR": "승자는 바로 당신입니다!", "DESCRIPTIONS": [ - "#b수비 또는 #r광폭화 자세를 취한 채로 전투를 시작합니다." + "#b수비 또는 #r광폭화 자세를 선택해 취한 채로 전투를 시작합니다." ] }, "champ:BlackKnightHelmet": { "NAME": "검은 기사의 투구", "FLAVOR": "살짝 스친 상처 뿐입니다.", "DESCRIPTIONS": [ - "매 전투 시 처음으로 수비 또는 광폭화 자세를 취할 때 자세에 따라 유물의 효과가 따로 한 번씩 적용됩니다. NL #b수비: 민첩을 #b2 얻고 힘을 #b1 잃습니다. NL #r광폭화: 힘을 #b2 얻고 민첩을 #b1 잃습니다." + "매 전투 시 처음으로 수비 또는 광폭화 자세를 취할 때 자세에 따라 유물의 효과가 따로 한 번씩 적용됩니다. NL #bchamp:수비: 민첩을 #b2 얻고 힘을 #b1 잃습니다. NL #rchamp:광폭화: 힘을 #b2 얻고 민첩을 #b1 잃습니다." ] }, "champ:Barbells": { @@ -31,14 +31,15 @@ "NAME": "승리의 왕관", "FLAVOR": "축하합니다!! 당신은 영광스러운 승자입니다.", "DESCRIPTIONS": [ - "#r챔피언 #r왕관과 교체합니다. NL #b1 턴 동안 #ychamp:궁극의 #y자세를 취한 채로 전투를 시작합니다." + "", + "과 교체합니다.[] NL #b3 턴 동안 #ychamp:궁극의 #y자세를 취한 채로 전투를 시작합니다." ] }, "champ:DefensiveTrainingManual": { "NAME": "수비 논문", "FLAVOR": "전문가의 조언: 안 맞으면 됩니다.", "DESCRIPTIONS": [ - "수비 자세의 #y마무리 #y추가 #y효과의 #y방어도가 #b5 증가합니다." + "#bchamp수비 자세의 #ychamp:마무리 #y추가 #y효과의 #y방어도가 #b3 증가합니다." ] }, "champ:DeflectingBracers": { @@ -66,7 +67,7 @@ "NAME": "검투사 안내서", "FLAVOR": "뭐라도 하다보면 - 뭔가 걸리겠죠.", "DESCRIPTIONS": [ - "한 턴에 #y연계, #y마무리, #y자세 카드를 전부 사용할 때마다 #y힘과 #y민첩 을 #b1 얻습니다." + "한 턴에 #ychamp:연계, #ychamp:마무리, #y자세 카드를 전부 사용할 때마다 #y힘과 #y민첩 을 #b1 얻습니다." ] }, "champ:PowerArmor": { @@ -76,20 +77,28 @@ "내 턴 시작 시 [E] 를 얻습니다. NL 최대 #y활력과 #ychamp:반격이 #b10 으로 감소합니다." ] }, + "champ:RageAmulet": { + "NAME": "반골의 애뮬릿", + "FLAVOR": "한때 덧없다고 생각한 힘은 언제나 당신과 함께하고 있었습니다.", + "DESCRIPTIONS": [ + "#y활력을 #b", + " 소모할 때마다 #y힘을 #b1 얻습니다." + ] + }, "champ:SignatureFinisher": { "NAME": "대표 마무리 기술", "FLAVOR": "이제 궁극기를 맛보아라!", "DESCRIPTIONS": [ - "획득 시 #y마무리 카드를 1장 선택합니다. 그 카드의 비용은 0이 됩니다. #y자세를 취하지 않아도 사용 가능하며 #y자세에서 벗어나지 않습니다.", + "획득 시 #ychamp:마무리 카드를 1장 선택합니다. 그 카드의 비용은 #b0 이 됩니다. #y자세를 취하지 않아도 사용 가능하며 #y자세에서 벗어나지 않습니다.", "카드를 선택하세요: ", - " 카드는 비용이 0이 됩니다. #y자세를 취하지 않아도 사용 가능하며 #y자세에서 벗어나지 않습니다." + " 카드는 비용이 #b0 이 됩니다. #y자세를 취하지 않아도 사용 가능하며 #y자세에서 벗어나지 않습니다." ] }, "champ:SpectersHand": { "NAME": "불안한 귀신의 손", "FLAVOR": "승리했다면 무언가가 함께하고 있을지도 모릅니다.", "DESCRIPTIONS": [ - "자세를 취할 때마다 #y타격 또는 #y수비 카드를 얻습니다. 그 카드의 비용은 #b0 이고 #y소멸합니다." + "자세를 취할 때마다 #y타격 또는 #y수비의 #ygremlin:메아리를 얻습니다. 그 카드의 비용은 #b0 입니다." ] }, "champ:LiftRelic": { @@ -106,5 +115,12 @@ "DESCRIPTIONS": [ "무작위 #y자세를 취한 채로 전투를 시작합니다." ] + }, + "champ:BustedCrownGagText": { + "NAME": "부서진 왕관", + "FLAVOR": "모방은 진심 어린 극찬의 형태라는 게... 맞는 말일까요? 투사의 왕관과 닮지도 않았습니다. 오히려 모욕에 가까운 물건입니다.", + "DESCRIPTIONS": [ + "매 턴 시작 시 [E] 를 얻습니다. 카드 보상을 받을 때 선택할 수 있는 카드가 #b2 장 줄어듭니다." + ] } } diff --git a/src/main/resources/champResources/localization/kor/UIStrings.json b/src/main/resources/champResources/localization/kor/UIStrings.json index 5873acfaa..aebaf1cf7 100644 --- a/src/main/resources/champResources/localization/kor/UIStrings.json +++ b/src/main/resources/champResources/localization/kor/UIStrings.json @@ -11,7 +11,7 @@ }, "champ:TechniqueMod": { "TEXT": [ - " NL 스킬 카드 보너스 효과를 얻습니다." + " NL *스킬 *카드 champ:보너스 효과를 얻습니다." ] }, "champ:OpenerMod": { diff --git a/src/main/resources/champResources/localization/spa/CardStrings.json b/src/main/resources/champResources/localization/spa/CardStrings.json new file mode 100644 index 000000000..ee314097a --- /dev/null +++ b/src/main/resources/champResources/localization/spa/CardStrings.json @@ -0,0 +1,389 @@ +{ + "champ:Strike": { + "NAME": "Golpe", + "DESCRIPTION": "Haz !D! de daño." + }, + "champ:Defend": { + "NAME": "Defensa", + "DESCRIPTION": "Gana !B! de Bloqueo." + }, + "champ:Taunt": { + "NAME": "Provocación", + "DESCRIPTION": "Aplica !M! de Débil y 1 de Vulnerable.", + "UPGRADE_DESCRIPTION": "Aplica 1 de Débil y 1 de Vulnerable a TODOS los enemigos." + }, + "champ:Execute": { + "NAME": "Ejecutar", + "DESCRIPTION": "Haz !D! de daño !cool! veces.", + "UPGRADE_DESCRIPTION": "Haz !D! de daño !cool! veces." + }, + "champ:StanceDance": { + "NAME": "Danza de Posturas", + "DESCRIPTION": "Elige una Postura para entrar. NL Activa su champ:Bono.", + "UPGRADE_DESCRIPTION": "Elige una Postura para entrar. NL Activa su champ:Bono dos veces.", + "EXTENDED_DESCRIPTION": [ + "Entra en champ:Berserker.", + "Entra en champ:Defensivo." + ] + }, + "champ:StanceDanceCrown": { + "NAME": "Corona del Campeón", + "DESCRIPTION": "Elige una Postura para entrar. NL Activa su champ:Bono.", + "UPGRADE_DESCRIPTION": "Elige una Postura para entrar. NL Activa su champ:Bono dos veces.", + "EXTENDED_DESCRIPTION": [ + "Entra en champ:Berserker.", + "Entra en champ:Defensivo." + ] + }, + "champ:SwordSigil": { + "NAME": "Sello de la Victoria", + "DESCRIPTION": "Activa el champ:Bono de tu Postura actual !M! veces." + }, + "champ:FaceSlap": { + "NAME": "Bofetón", + "DESCRIPTION": "Haz !D! de daño. NL champ:Combo *Berserker: Aplica !M! de Vulnerable." + }, + "champ:FlashCut": { + "NAME": "Golpe Relámpago", + "DESCRIPTION": "Haz !D! de daño. NL champ:Combo *Defensivo: Gana !M! de champ:Contraataque y !B! de Bloqueo." + }, + "champ:DefensiveShout": { + "NAME": "Grito Defensivo", + "DESCRIPTION": "Gana !M! de champ:Contraataque. NL Entra en champ:Defensivo." + }, + "champ:ShieldSigil": { + "NAME": "Látigo de Cadena", + "DESCRIPTION": "Haz !D! de daño. NL Este turno, tus efectos champ:Bono aumentan en !M!." + }, + "champ:FocusedDefense": { + "NAME": "Esquivar y Contraatacar", + "DESCRIPTION": "Gana !B! de Bloqueo. NL Gana !M! de Vigor. NL Entra en champ:Berserker." + }, + "champ:FocusedBerserking": { + "NAME": "Todo o Nada", + "DESCRIPTION": "Agota. NL Ejecuta !M! veces sin salir de tu Postura: " + }, + "champ:SetATrap": { + "NAME": "Poner una Trampa", + "DESCRIPTION": "Gana !B! de Bloqueo. NL champ:Combo *Defensivo: Aplica !M! de Débil a TODOS los enemigos." + }, + "champ:Backstep": { + "NAME": "Paso Atrás", + "DESCRIPTION": "Gana !B! de Bloqueo, aumentado por *Vigor." + }, + "champ:BerserkersShout": { + "NAME": "Grito del Berserker", + "DESCRIPTION": "Gana !M! de Vigor. NL Entra en champ:Berserker." + }, + "champ:RageSigil": { + "NAME": "Plan de Batalla", + "DESCRIPTION": "Entra en champ:Defensivo. NL Gana !B! de Bloqueo. NL Observar !M!." + }, + "champ:GutPunch": { + "NAME": "Golpe al Abdomen", + "DESCRIPTION": "Haz !D! de daño. NL champ:Combo *Cualquier *Postura: Entra en champ:Definitiva por 1 turno. NL Agota." + }, + "champ:FanOfKnives": { + "NAME": "Lluvia de Cuchillos", + "DESCRIPTION": "Haz !D! de daño a TODOS los enemigos. NL champ:Combo *Berserker: Haz daño dos veces.", + "UPGRADE_DESCRIPTION": "Haz !D! de daño a TODOS los enemigos. NL champ:Combo *Berserker: Haz daño tres veces." + }, + "champ:Devastate": { + "NAME": "Devastar", + "DESCRIPTION": "Haz !D! de daño !M! veces. NL Cuesta 1 menos [E] por cada *Final ejecutado este combate." + }, + "champ:Circumvent": { + "NAME": "Eludir", + "DESCRIPTION": "Gana !B! de Bloqueo. NL Roba !M! cartas. NL Descarta !M! cartas. NL champ:Combo *Defensivo: No descartes cartas." + }, + "champ:SkillfulDodge": { + "NAME": "Esquivar con Estilo", + "DESCRIPTION": "Gana !B! de Bloqueo. NL Gana !M! de champ:Contraataque. NL champ:Combo *Defensivo: Aumenta estos efectos en !cool! durante este combate." + }, + "champ:TornadoPunch": { + "NAME": "Puño Tornado", + "DESCRIPTION": "Haz !D! de daño a TODOS los enemigos. NL champ:Combo *Defensivo: Gana !B! de Bloqueo por cada enemigo golpeado.", + "UPGRADE_DESCRIPTION": "Haz !D! de daño a TODOS los enemigos. NL champ:Combo *Defensivo: Gana !B! de Bloqueo por cada enemigo golpeado." + }, + "champ:EnGarde": { + "NAME": "¡En Guardia!", + "DESCRIPTION": "Gana !B! de Bloqueo. NL Si tu Bloqueo se rompe este turno, gana !B! de Bloqueo en el próximo turno." + }, + "champ:ShieldSlam": { + "NAME": "Momento de la Verdad", + "DESCRIPTION": "Retiene. NL Roba !M! carta.", + "UPGRADE_DESCRIPTION": "Retiene. NL Roba !M! cartas." + }, + "champ:EnchantShield": { + "NAME": "Encantar Escudo", + "DESCRIPTION": "Elige una carta. NL Aumenta su Bloqueo en !M! durante este combate. NL Agota.", + "EXTENDED_DESCRIPTION": ["Mal momento para esa jugada."] + }, + "champ:BringItOn": { + "NAME": "¡Vamos!", + "DESCRIPTION": "Gana !B! de Bloqueo. NL Gana !M! de champ:Contraataque.", + "EXTENDED_DESCRIPTION": ["No estoy en una Postura."] + }, + "champ:ShieldThrow": { + "NAME": "Lanzamiento de Escudo", + "DESCRIPTION": "Haz daño igual a tu Bloqueo, dos veces.", + "EXTENDED_DESCRIPTION": ["Haz daño igual a tu Bloqueo ( !D! ) dos veces."] + }, + "champ:FalseCounter": { + "NAME": "Contraataque Fingido", + "DESCRIPTION": "Gana !B! de Bloqueo. NL En el próximo turno, gana [E] y roba 2 cartas.", + "UPGRADE_DESCRIPTION": "Gana !B! de Bloqueo. NL En el próximo turno, gana [E] [E] y roba 2 cartas." + }, + "champ:IronFortress": { + "NAME": "Paso Técnico", + "DESCRIPTION": "Cada vez que entres en una Postura, gana !M! de Bloqueo." + }, + "champ:Lariat": { + "NAME": "Lazo Giratorio", + "DESCRIPTION": "Gana !B! de Bloqueo X veces. NL Activa el champ:Bono de tu Postura X veces." + }, + "champ:HoldFirm": { + "NAME": "Mantente Firme", + "DESCRIPTION": "Gana !B! de Bloqueo. NL Gana !M! de champ:Contraataque. NL Gana 1 de bronze:Desenfoque." + }, + "champ:ShieldWall": { + "NAME": "Fortaleza de Hierro", + "DESCRIPTION": "Gana 2 de Destreza. NL Al final de cada turno, gana !M! de Bloqueo." + }, + "champ:Haymaker": { + "NAME": "Golpe Demoledor", + "DESCRIPTION": "Haz !D! de daño. NL Aplica 2 de Vulnerable. NL Aplica 2 de Débil." + }, + "champ:ViciousMockery": { + "NAME": "Burlas Crueles", + "DESCRIPTION": "Gana !M! de Vigor. NL Aplica !DM! de Débil. NL Activa el champ:Bono de tu Postura.", + "EXTENDED_DESCRIPTION": [ + "champ:Combo *Berserker: Gana !M! de Fuerza temporal. NL ", + "champ:Combo *Defensivo: Gana !M! de Destreza temporal." + ] + }, + "champ:PreciseThrust": { + "NAME": "Estocada Precisa", + "DESCRIPTION": "Haz !D! de daño. NL champ:Combo *Berserker: Haz !D! de daño. NL champ:Combo *Defensivo: Gana !B! de Bloqueo." + }, + "champ:CrookedStrike": { + "NAME": "Golpe Sesgado", + "DESCRIPTION": "Haz !D! de daño. NL No consume Vigor." + }, + "champ:RapidStrikes": { + "NAME": "Golpes Rápidos", + "DESCRIPTION": "Haz !D! de daño !M! veces. NL Una carta \"Golpe\" aleatoria en tu mano cuesta 0 este turno." + }, + "champ:EnchantSword": { + "NAME": "Encantar Espada", + "DESCRIPTION": "Elige una carta. NL Aumenta su daño en !M! durante este combate. Agota.", + "EXTENDED_DESCRIPTION": ["Mal momento para esa jugada."] + }, + "champ:BladeFlurry": { + "NAME": "Tormenta de Golpes", + "DESCRIPTION": "Haz !D! de daño. NL La próxima carta \"Golpe\" que juegues este turno se jugará dos veces." + }, + "champ:SwordThrow": { + "NAME": "Lanzamiento de Espada", + "DESCRIPTION": "Haz !D! de daño !M! veces. NL Gana 2 de Débil. NL champ:Combo *Berserker: No ganas Débil." + }, + "champ:MurderStrike": { + "NAME": "Golpe Asesino", + "DESCRIPTION": "Retiene. NL Haz !D! de daño. NL Cuando uses una Habilidad, esta carta hace !M! de daño adicional durante este combate." + }, + "champ:HeavySlash": { + "NAME": "Tajo Magistral", + "DESCRIPTION": "Haz !D! de daño. NL Al comienzo de tu próximo turno, gana Vigor igual al daño no bloqueado.", + "UPGRADE_DESCRIPTION": "Haz !D! de daño. NL Obtén una Habilidad aleatoria Mejorada. NL Cuesta 0." + }, + "champ:CheapShot": { + "NAME": "Golpe Bajo", + "DESCRIPTION": "Haz !D! de daño. NL Si el enemigo es un Jefe, Haz daño dos veces más. Si no, hermit:Atúrdelo. NL Agota." + }, + "champ:RisingSlash": { + "NAME": "Tajo Ascendente", + "DESCRIPTION": "Haz !D! de daño. NL Si la última carta jugada en este combate fue un champ:Final, haz !D! de daño de nuevo." + }, + "champ:Shatter": { + "NAME": "Quebrar", + "DESCRIPTION": "Haz !D! de daño. NL champ:Combo *Cualquier *Postura: Aplica !M! de Débil y Vulnerable." + }, + "champ:EnragedBash": { + "NAME": "Embate Enfurecido", + "DESCRIPTION": "Haz !D! de daño. NL champ:Combo *Berserker: Esta carta golpea una vez adicional este combate.", + "EXTENDED_DESCRIPTION": ["Haz !D! de daño !M! veces. NL champ:Combo *Berserker: Esta carta golpea una vez adicional este combate."] + }, + "champ:VampiricStrike": { + "NAME": "Golpe Vampírico", + "DESCRIPTION": "Haz !D! de daño. NL Gana Bloqueo igual al daño no bloqueado infligido." + }, + "champ:AdrenalArmor": { + "NAME": "Coraza Ígnea", + "DESCRIPTION": "Gana !B! de Bloqueo. NL Gana !M! de Fuerza temporal." + }, + "champ:HeartStrike": { + "NAME": "Golpe al Corazón", + "DESCRIPTION": "Haz !D! de daño, dos veces si el enemigo está por debajo del !M! % de vida.", + "EXTENDED_DESCRIPTION": [ + "Mal momento para esa jugada.", + "Ese enemigo aún no está listo para ser terminado." + ] + }, + "champ:CrownThrow": { + "NAME": "Lanzamiento de Corona", + "DESCRIPTION": "Haz !D! de daño. NL champ:Combo *Berserker: Roba !M! cartas." + }, + "champ:Encircle": { + "NAME": "Rodear", + "DESCRIPTION": "Haz !D! de daño a TODOS los enemigos. NL Roba !M! carta por cada enemigo golpeado." + }, + "champ:LastStand": { + "NAME": "Última Resistencia", + "DESCRIPTION": "Cuando bajes del 50% de vida, elimina todas las desventajas y gana !M! de Fuerza.", + "EXTENDED_DESCRIPTION": [ + "~Ahora~ ~sí~ ~lo~ ~has~ ~hecho...~", + "@¿DERROTADO??@ NL @¡IMPOSIBLE!@" + ] + }, + "champ:RecklessLeap": { + "NAME": "Salto Temerario", + "DESCRIPTION": "Haz !D! de daño. NL Gana !M! de Fuerza. NL Entra en champ:Berserker. NL Agota.", + "UPGRADE_DESCRIPTION": "Haz !D! de daño. NL Gana !M! de Fuerza. NL Entra en champ:Berserker.", + "EXTENDED_DESCRIPTION": ["Mal momento para esa jugada."] + }, + "champ:IgnorePain": { + "NAME": "Ignorar Dolor", + "DESCRIPTION": "Tu vida no puede reducirse hasta tu próximo turno. NL Agota.", + "UPGRADE_DESCRIPTION": "Tu vida no puede reducirse hasta tu próximo turno. NL Agota." + }, + "champ:DeathBlow": { + "NAME": "Golpe Mortal", + "DESCRIPTION": "Haz !D! de daño a TODOS los enemigos. NL Gana !M! de Vigor. NL Agota." + }, + "champ:ArenaPreparation": { + "NAME": "Preparación de Arena", + "DESCRIPTION": "Obtén !M! Habilidades aleatorias. NL Ganan Retiene. NL Agota." + }, + "champ:SteelEdge": { + "NAME": "Filo de Acero", + "DESCRIPTION": "Haz !D! de daño X veces. NL Ejecuta X veces, al menos una vez:", + "EXTENDED_DESCRIPTION": [ + "champ:Combo *Berserker: Haz !D! de daño X veces. NL ", + "champ:Combo *Defensivo: Gana !B! de Bloqueo X veces.", + "Gladiador: Roba una carta y gana [E] .", + "Gladiador: Roba 2 cartas y gana [E] .", + "champ:Combo NL " + ] + }, + "champ:Improvising": { + "NAME": "Improvisar", + "DESCRIPTION": "Entra en una Postura aleatoria al comienzo de tu turno si no estás en ninguna. NL Activa champ:Bono !M! veces al entrar en Posturas." + }, + "champ:CalledShot": { + "NAME": "Refuerzo Oportuno", + "DESCRIPTION": "champ:Combo *Berserker: Gana [E] [E] , Agota esta carta. NL champ:Combo *Defensivo: Roba !M! cartas.", + "UPGRADE_DESCRIPTION": "champ:Combo *Berserker: Gana [E] [E] [E] , Agota esta carta. NL champ:Combo *Defensivo: Roba !M! cartas.", + "EXTENDED_DESCRIPTION": [ + "champ:Combo *Berserker: Gana [E] [E] , Agota esta carta. NL ", + "champ:Combo *Berserker: Gana [E] [E] [E] , Agota esta carta. NL ", + "champ:Combo *Defensivo: Roba !M! cartas.", + "Mal momento para esa jugada." + ] + }, + "champ:PerfectedStrike": { + "NAME": "Golpe Perfeccionado", + "DESCRIPTION": "Haz !D! de daño. NL Haz !M! de daño adicional por cada carta \"Golpe\" que tengas." + }, + "champ:GladiatorForm": { + "NAME": "Forma de Gladiador", + "DESCRIPTION": "Al comienzo de cada turno, gana !M! de Vigor por cada 3 de Vigor gastado en el turno anterior. haz lo mismo con champ:Contraataque." + }, + "champ:Duel": { + "NAME": "Duelo", + "DESCRIPTION": "Gana !B! de Bloqueo. NL Haz !D! de daño. NL Si el objetivo tiene Fuerza, repite estos efectos una vez.", + "UPGRADE_DESCRIPTION": "Gana !B! de Bloqueo. NL Haz !D! de daño. NL Si el objetivo tiene Fuerza, repite estos efectos una vez." + }, + "champ:DancingMaster": { + "NAME": "Maestro de la Danza", + "DESCRIPTION": "La primera vez que uses un champ:Final en cada turno, gana [E] y roba 1 carta." + }, + "champ:StrikeOfGenius": { + "NAME": "Golpe Genial", + "DESCRIPTION": "Al comienzo de tu turno, gana un \"Golpe\" gremlin:Eco aleatorio. NL Cuesta 0 hasta que se juegue.", + "UPGRADE_DESCRIPTION": "Al comienzo de tu turno, gana un \"Golpe\" Mejorado gremlin:Eco aleatorio. NL Cuesta 0 hasta que se juegue." + }, + "champ:DefensiveStyle": { + "NAME": "Estilo Doble", + "DESCRIPTION": "Los *Bonos de *Habilidad otorgan !M! más de Vigor y champ:Contraataque." + }, + "champ:GladiatorStyle": { + "NAME": "Combate Limpio", + "DESCRIPTION": "champ:Combo *Berserker: NL Gana !M! de Fuerza. NL champ:Combo *Defensivo: NL Gana !M! de Destreza." + }, + "champ:BerserkerStyle": { + "NAME": "Afilar la Espada", + "DESCRIPTION": "Tus cartas \"Golpe\" Hacen !M! más de daño." + }, + "champ:Riposte": { + "NAME": "Estocada de Contraataque", + "DESCRIPTION": "Etérea. NL Haz !D! de daño. NL Agota." + }, + "champ:Endure": { + "NAME": "Resistir", + "DESCRIPTION": "Entra en champ:Defensivo. NL Gana !B! de Bloqueo, aumentado por *Fuerza.", + "UPGRADE_DESCRIPTION": "Entra en champ:Defensivo. NL Gana !B! de Bloqueo, aumentado por *Fuerza." + }, + "champ:PreemptiveStrike": { + "NAME": "Golpe Preventivo", + "DESCRIPTION": "Haz daño igual a tu champ:Contraataque a TODOS los enemigos. Pierdes la mitad. NL champ:Combo *Defensivo: No lo pierdes.", + "EXTENDED_DESCRIPTION": [ + " NL (Haz !D! de daño)", + "Mal momento para esa jugada." + ] + }, + "champ:Parry": { + "NAME": "Desvío", + "DESCRIPTION": "Gana !B! de Bloqueo. NL Gana !M! de champ:Contraataque. NL Si usas champ:Contraataque este turno, gana otra *Estocada de *Contraataque.", + "UPGRADE_DESCRIPTION": "Etérea. NL Haz daño igual a la cantidad de champ:Contraataque usada. NL Agota." + }, + "champ:EnchantCrown": { + "NAME": "Encantar Corona", + "DESCRIPTION": "Elige una carta. NL Cuesta 0 durante este combate. NL Agota.", + "EXTENDED_DESCRIPTION": ["Mal momento para esa jugada."] + }, + "champ:ModFinisherStrike": { + "NAME": "Golpe Final", + "DESCRIPTION": "Retiene. NL Haz !D! de daño." + }, + "champ:UltimateStance": { + "NAME": "Postura Definitiva", + "DESCRIPTION": "Durante tu próximo turno, entras en *Postura champ:Definitiva. NL Agota.", + "UPGRADE_DESCRIPTION": "Requiere champ:Combo *Defensivo o *Berserker. NL Entra en Postura Definitiva por !M! turnos.", + "EXTENDED_DESCRIPTION": ["No estoy en una Postura."] + }, + "champ:FancyFootwork": { + "NAME": "Juego de Pies", + "DESCRIPTION": "Entra en una Postura en la que no estés. NL El próximo champ:Final este turno haz !M! de daño a TODOS los enemigos." + }, + "champ:TripleStrike": { + "NAME": "Triple Golpe", + "DESCRIPTION": "Haz !D! de daño. NL Obtén 2 *Golpes gremlin:Eco. Cuestan 0 y activan *Bonos de *Habilidad.", + "UPGRADE_DESCRIPTION": "Haz !D! de daño. NL Obtén 2 *Golpes+ gremlin:Eco. Cuestan 0 y activan *Bonos de *Habilidad." + }, + "champ:WindUp": { + "NAME": "Preparación", + "DESCRIPTION": "Elige una Postura para entrar. NL Busca un champ:Final en tu pila de robo. NL Agota.", + "UPGRADE_DESCRIPTION": "Elige una Postura para entrar. NL Busca un champ:Final en tu pila de robo.", + "EXTENDED_DESCRIPTION": [ + "Entra en champ:Berserker.", + "Entra en champ:Defensivo." + ] + }, + "champ:Headbutt": { + "NAME": "Cabezazo", + "DESCRIPTION": "Haz !D! de daño. NL Coloca una carta de tu pila de descarte en la parte superior de tu pila de robo." + } +} + + + diff --git a/src/main/resources/champResources/localization/spa/CharacterStrings.json b/src/main/resources/champResources/localization/spa/CharacterStrings.json new file mode 100644 index 000000000..67c4019d5 --- /dev/null +++ b/src/main/resources/champResources/localization/spa/CharacterStrings.json @@ -0,0 +1,74 @@ +{ + "champ:theChamp": { + "NAMES": [ + "El Campeón", + "el Campeón" + ], + "TEXT": [ + "El indiscutible Rey de la Arena. NL Jamás ha perdido un combate.", + "NL Empuñas tu espada...", + "Al avanzar por una calle oscura, te encuentras con varias figuras encapuchadas realizando un oscuro ritual. Al acercarte, se giran hacia ti al unísono de forma inquietante. El más alto muestra colmillos y extiende una mano larga y pálida hacia ti. NL ~\"Únete~ ~a~ ~nosotros,~ ~Campeón,~ ~y~ ~siente~ ~el~ ~calor~ ~de~ ~la~ ~Aguja.\"~", + "#rPostura Berserker", + "#bPostura Defensivo", + "#yPostura Gladiador", + "Ninguna", + "Postura DEFINITIVA", + "Bono de Habilidad", + "Bono de Final", + "#yVigor #b", + "Gana #b1 de #yFuerza.", + "Gana #b", + "Gana #b8 de #yBloqueo.", + "Roba #b", + "En el próximo turno, roba #b1 carta y gana [E] .", + "Bono de Habilidad: Berserker", + "Bono de Habilidad: Defensivo", + "Bono de Habilidad: Gladiador", + "#yVigor #b", + "Gana #b1 de #yFuerza. Gana #b", + "Cuenta como #rBerserker y #bDefensivo para todos los efectos. Si sales de esta Postura antes de que termine, vuelves a entrar inmediatamente.", + " turnos.", + "Postura Actual", + "#rBerserker", + "#bDefensivo", + "#yGladiador", + "Ninguna", + "Pfh. Esta pelea es demasiado fácil como para molestarme.", + "[crown_icon] champ:Técnica NL ", + "[crown_icon] : Roba una carta. NL ", + "[crown_icon] : Gana ", + "[crown_icon] : ", + "[crown_icon] : Todos los Bonos. NL ", + " NL [fist_icon] champ:Final", + " NL [fist_icon] : [E] y [card_icon] en el próximo turno.", + " NL [fist_icon] : Gana ", + " NL [fist_icon] : Gana 1 de Fuerza.", + " NL [fist_icon] : Todos los Bonos.", + "El Vigor aumenta el daño del siguiente Ataque.", + "Bono de Habilidad", + "Si estás en una #yPostura, activa su Bono de Habilidad.", + "Final", + "Requiere una Postura. NL Después de jugar un Final, sales de tu #yPostura y activas su Bono de Final.", + "No tengo suficiente Bloqueo.", + "#yVigor y gana #b", + " #yVigor.", + " #yContraataque.", + " carta.", + " cartas.", + "[crown_icon] : Roba ", + " cartas. NL ", + ". NL ", + " champ:Contraataque. NL ", + " Vigor. NL ", + ".", + " #yBloqueo.", + " Bloqueo.", + " y gana #b", + " #yContraataque.", + " #yBloqueo. No salgas de la #yPostura #yDefinitiva.", + "No estoy en una Postura.", + "Cargas restantes: #b", + " Puede activarse hasta 3 veces." + ] + } +} diff --git a/src/main/resources/champResources/localization/spa/EventStrings.json b/src/main/resources/champResources/localization/spa/EventStrings.json new file mode 100644 index 000000000..1fa1f1fe0 --- /dev/null +++ b/src/main/resources/champResources/localization/spa/EventStrings.json @@ -0,0 +1,101 @@ +{ + "champ:ChampTalk": { + "NAME": "", + "DESCRIPTIONS": [ + "¿QUIERES RECUPERAR ESTE CINTURÓN?", + "¡VEN Y QUÍTAMELO!" + ], + "OPTIONS": [""] + }, + "champ:Colosseum": { + "NAME": "El Coliseo", + "DESCRIPTIONS": [ + "Mientras avanzas por la Aguja, notas un grupo de humanoides apostados cerca de un gran auditorio. Al acercarte, los Esclavistas se sorprenden, pero rápidamente explican. NL NL \"¡CAMPEÓN! ¡Nos honras con tu presencia! ¿Has venido a enfrentar al nuevo retador?\"", + "¿Un nuevo retador? ¡Qué deleite! NL NL Sin embargo, el duelo tendrá que esperar. Al público siempre le gusta ver al Campeón destrozar al último capturado...", + "Entras al enorme estadio y te encuentras con una audiencia desbordante de #bEsclavistas, #pCultistas y otros habitantes de la Ciudad. NL NL ", + "@\"¿QUIÉN@ @SE@ @ATREVE@ @A@ @RETARME?!\"@ gritas con fuerza al público, llamando al supuesto retador. NL Un caballero se acerca, con una armadura sospechosamente parecida a la tuya, pero cubierta de tinta negra. La multitud lo aclama más de lo que merece. NL NL ¡Solo puede haber un Campeón!", + "@\"¡EL@ @SIGUIENTE@ @ES@ @MÍO!\"@ ruge tu voz entre vítores atronadores. NL NL No pasa mucho tiempo antes de que los esclavistas arrastren a su más reciente presa. El retador, aún aturdido por la emboscada, se incorpora y se prepara. NL NL Esto será divertido.", + "Decides que, aunque tentador, pelear aquí sería una distracción innecesaria. Tu viaje continúa mientras dejas a los esclavistas con su emboscada.", + "Caballero Negro" + ], + "OPTIONS": [ + "[Defender el título] #rLuchar contra el #rCaballero #rNegro. #gObtén #gmuchas #grecompensas.", + "[Participar] #rLuchar contra el #rHéroe #rCautivo. #gObtén #gmuchas #grecompensas.", + "[Salir]", + "[¡LUCHAR!]", + "[Continuar]" + ] + }, + "champ:Library": { + "NAME": "La Biblioteca", + "DESCRIPTIONS": [ + "Te encuentras con el corazón del conocimiento de la Ciudad: la antigua Biblioteca. NL En su interior hay incontables rollos, manuscritos y libros. NL Puedes tomar uno para descansar un poco, o buscar algo más específico sobre técnicas de combate.", + "Pasas mucho tiempo recorriendo los pasillos repletos de tomos y guías, hasta encontrar el libro ideal. NL NL Te acomodas en una silla cómoda y repasas posturas y estilos olvidados. Incluso un espécimen de combate perfecto como tú sabe que la mente también debe entrenarse." + ], + "OPTIONS": [ + "[Investigar] #gEncuentra #gun #gLibro #gsobre #gCombate.", + "[Bloqueado] Ya tienes todos los tomos de combate." + ] + }, + "champ:TechniqueTome": { + "NAME": "Tomo de Técnica", + "DESCRIPTIONS": [ + "Al tomar un camino lateral, una fuerza invisible guía tus pasos hacia un nuevo destino. No pasa mucho antes de encontrar un pedestal con un tomo enorme, envuelto en una energía luminosa inquietante. NL NL Al acercarte, las páginas, antes en blanco, cobran vida con grabados de combinaciones de ataque, posturas marciales y puntos débiles enemigos. NL NL Parece demasiado bueno para ser verdad, pero este regalo, esta oportunidad, este conocimiento no deben desperdiciarse.", + "¡Increíble! Las enseñanzas de este tomo son asombrosas. Cada palabra y diagrama salta de la página a tu mente, dándote nuevos métodos para aniquilar a tus oponentes. NL NL Lamentablemente, tal conocimiento nunca es gratis y desgasta tu psique. Pero queda tanto por aprender...", + "Sí. Tanto más. No puedes detenerte ahora. Con apenas una vacilación, te dejas consumir por la avalancha de información, encontrando aún más ventajas de combate. NL NL Comprendiendo ya el costo, ofreces voluntariamente más de tu energía vital a cambio de sabiduría. Pero aún queda mucho por aprender...", + "Reuniendo toda tu fuerza de voluntad, resistes el deseo de leer el tomo maldito. Tal vez regreses otro día, pero por ahora, tienes trabajo que hacer.", + "Cualquiera que haya sido el precio, valió la pena por obtener este conocimiento. Requiere esfuerzo despegarte del libro, pero lo logras. NL NL Con sus enseñanzas frescas en tu mente, sales en busca de una nueva víctima para probarlas." + ], + "OPTIONS": [ + "[Leer] Elige un Ataque para ganar #y'activación del #yBono de #yHabilidad'. #rPierdes #r", + " #rPV.", + "[Salir]", + "[Bloqueado] Requiere una carta de Ataque.", + "Elige una carta para ganar #y'activación del #yBono de #yHabilidad'.", + "[Leer] Elige un Ataque para ganar #y'activación del #yBono de #yHabilidad'. #rMaldición #r- #rOrgullo." + ] + }, + "champ:Gym": { + "NAME": "Gimnasio", + "DESCRIPTIONS": [ + "Siguiendo tu camino por la Aguja, llegas al Gimnasio del Exordio: un lugar que visitas con frecuencia para mantenerte en forma. NL NL Sería una oportunidad desperdiciada no tomar un breve descanso aquí. Para mantenerte en la cima, cada ventaja cuenta.", + "Hoy te enfocas en la resistencia. Con la armadura puesta, te lanzas a correr varias vueltas por la pista central del gimnasio. NL NL Con una oleada de energía y adrenalina, abandonas el gimnasio listo para lo que venga.", + "Hoy te enfocas en el combate. Encuentras rápidamente a alguien que parezca aguantar un golpe y sin darle opción, lo arrastras al área de combate. No dura mucho antes de rendirse. NL NL Aunque el combate fue trivial, descubriste una nueva forma de iniciar la pelea. Útil para lo que se avecina.", + "Hoy te enfocas en fuerza y tono muscular. Levantas las pesas más pesadas y trabajas en ciclos intensos. Al terminar, ya puedes sentirte más fuerte que antes. NL NL Te marchas pensando que la próxima vez deberías enfocarte en piernas. No puede omitirse." + ], + "OPTIONS": [ + "[Cardio] #gGana #g", + " #gPV #gMáximos.", + "[Sparring] Elige una carta que no sea Final para ganar 'Entrar en Postura (elegida)'.", + "[Levantamiento] #gGana #g1 #gde #gFuerza #gpermanente.", + "[Salir]", + "Elige una carta que no sea Final para ganar 'Entrar en Defensivo'.", + "Elige una carta que no sea Final para ganar 'Entrar en Gladiador'.", + "Elige una carta que no sea Final para ganar 'Entrar en Berserker'.", + "[Bloqueado] Requiere una carta que no entre en una Postura." + ] + }, + "champ:MinorLeagueArena": { + "NAME": "Arena Menor", + "DESCRIPTIONS": [ + "Siguiendo por el Exordio, te topas con una atracción conocida: el antiguo sitio de los juegos brutales que ahora se celebran en el Coliseo de la Ciudad. Esta arena más pequeña y modesta ahora es campo de entrenamiento para retadores menores. NL NL Este tipo de competencia está claramente debajo de ti, pero podría ser un entretenimiento aceptable.", + "Decides que tu tiempo es mejor empleado en otro lado. Al alejarte, escuchas un suspiro de alivio de los combatientes: claramente, nadie esperaba morir a tus manos hoy." + ], + "OPTIONS": [ + "[Luchar contra Centurión y Místico] #gObtén #gBroche #gde #gCapa.", + "[Luchar contra Noble Gremlin] #gObtén #gCinturón #gdel #gCampeón.", + "[Luchar contra Dúo de Esclavistas] #gObtén #gHerradura.", + "[Salir]" + ] + }, + "champ:BackToBasics": { + "NAME": "", + "DESCRIPTIONS": [ + "La habilidad y la confianza forman una combinación invencible." + ], + "OPTIONS": [ + "[Intuición] #gAñade #y'activación del #yBono de #yHabilidad.' a todos los #gGolpes y #gDefender.", + "[Bloqueado] Requiere una carta Golpe o Defensa." + ] + } +} diff --git a/src/main/resources/champResources/localization/spa/KeywordStrings.json b/src/main/resources/champResources/localization/spa/KeywordStrings.json new file mode 100644 index 000000000..9cb52d835 --- /dev/null +++ b/src/main/resources/champResources/localization/spa/KeywordStrings.json @@ -0,0 +1,105 @@ +[ + { + "PROPER_NAME": "Bono", + "NAMES": [ + "bonus", + "bonuses", + "technique", + "techniques", + "champ:[crown_icon]", + "[crown_icon]", + "bono", + "bonos", + "técnica", + "técnicas" + ], + "DESCRIPTION": "Si estás en una #yPostura [REMOVE_SPACE], activa su Bono usando una Habilidad. NL #yBono #rBerserker: Gana #b2 de #yVigor [REMOVE_SPACE]. NL #yBono #bDefensivo: Gana #b3 de #yContraataque [REMOVE_SPACE]." + }, + { + "PROPER_NAME": "Combo", + "NAMES": [ + "combo" + ], + "DESCRIPTION": "Efecto adicional al jugarse en la #yPostura indicada [REMOVE_SPACE]." + }, + { + "PROPER_NAME": "Golpe", + "NAMES": [ + "strike", + "strikes", + "golpe", + "golpes" + ], + "DESCRIPTION": "Cualquier carta que contenga \"Golpe\" en su nombre. No debe confundirse con #yGolpes, que se refiere exclusivamente a las cartas básicas de Golpe." + }, + { + "PROPER_NAME": "Final", + "NAMES": [ + "finisher", + "finishers", + "[fist_icon]", + "champ:[fist_icon]", + "final", + "finales" + ], + "DESCRIPTION": "Requiere estar en una Postura. NL Después de jugar un Final, sales de tu Postura y activas su bono de Final. NL #rBerserker #yBono de #yFinal: Gana #b1 de #yFuerza [REMOVE_SPACE]. NL #bDefensivo #yBono de #yFinal: Gana #b8 de #yBloqueo [REMOVE_SPACE]." + }, + { + "PROPER_NAME": "Contraataque", + "NAMES": [ + "counter", + "contraataque" + ], + "DESCRIPTION": "La próxima vez que recibas daño de un #yAtaque, gana un #yGolpe de #yEstocada que inflige esa misma cantidad de daño." + }, + { + "PROPER_NAME": "Defensivo", + "NAMES": [ + "defensive", + "defensive.", + "defensivo", + "defensivo." + ], + "DESCRIPTION": "#yPostura. NL #yBono de Habilidad: Gana #b3 de #yContraataque [REMOVE_SPACE]. NL #yEfecto de Final: Gana #b8 de #yBloqueo [REMOVE_SPACE]." + }, + { + "PROPER_NAME": "Berserker", + "NAMES": [ + "berserker", + "berserker." + ], + "DESCRIPTION": "#yPostura. NL #yBono de Habilidad: Gana #b2 de #yVigor [REMOVE_SPACE]. NL #yEfecto de Final: Gana #b1 de #yFuerza [REMOVE_SPACE]." + }, + { + "PROPER_NAME": "Gladiador", + "NAMES": [ + "gladiator", + "gladiator.", + "gladiador", + "gladiador." + ], + "DESCRIPTION": "#yPostura. NL #yBono de Habilidad: Roba una carta. NL #yBono de Final: En el próximo turno, roba #b1 carta y gana [E] . Termina tu turno." + }, + { + "PROPER_NAME": "Definitiva", + "NAMES": [ + "ultimate", + "ultimate.", + "definitiva", + "definitiva." + ], + "DESCRIPTION": "#yPostura [REMOVE_SPACE]. Cuenta como ambas Posturas: #bDefensivo y #rBerserker [REMOVE_SPACE]. NL Si sales de esta #yPostura antes de que expire, vuelves a entrar inmediatamente." + }, + { + "PROPER_NAME": "Fatiga", + "NAMES": [ + "fatigue", + "fatigued", + "fatigue.", + "fatiga", + "fatigado", + "fatiga." + ], + "DESCRIPTION": "Pierdes PV. Recuperas los PV #yFatigados al final del combate. No puedes morir por #yFatiga." + } +] diff --git a/src/main/resources/champResources/localization/spa/MonsterStrings.json b/src/main/resources/champResources/localization/spa/MonsterStrings.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/src/main/resources/champResources/localization/spa/MonsterStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/champResources/localization/spa/OrbStrings.json b/src/main/resources/champResources/localization/spa/OrbStrings.json new file mode 100644 index 000000000..31010fd14 --- /dev/null +++ b/src/main/resources/champResources/localization/spa/OrbStrings.json @@ -0,0 +1,7 @@ +{} + + + + + + diff --git a/src/main/resources/champResources/localization/spa/PotionStrings.json b/src/main/resources/champResources/localization/spa/PotionStrings.json new file mode 100644 index 000000000..27cabbe4f --- /dev/null +++ b/src/main/resources/champResources/localization/spa/PotionStrings.json @@ -0,0 +1,32 @@ +{ + "champ:OpenerPotion": { + "NAME": "Poción de Estrategia", + "DESCRIPTIONS": [ + "Elige #b1 de #b2 cartas que te hagan entrar en una #yPostura para añadir a tu mano (una por cada #yPostura [REMOVE_SPACE]); cuesta #b0 este turno.", + " Gana #b", + " copia de ella.", + " copias de ella." + ] + }, + "champ:TechniquePotion": { + "NAME": "Técnica Embotellada", + "DESCRIPTIONS": [ + "Activa el #yBono tu #yPostura actual #b", + " veces." + ] + }, + "champ:UltimateStancePotion": { + "NAME": "Estimulante", + "DESCRIPTIONS": [ + "Entra en la #yPostura #yDefinitiva por #b", + " turnos." + ] + }, + "champ:CounterPotion": { + "NAME": "Brebaje de Agudeza", + "DESCRIPTIONS": [ + "Gana #b", + " de #yContraataque [REMOVE_SPACE]." + ] + } +} diff --git a/src/main/resources/champResources/localization/spa/PowerStrings.json b/src/main/resources/champResources/localization/spa/PowerStrings.json new file mode 100644 index 000000000..335430172 --- /dev/null +++ b/src/main/resources/champResources/localization/spa/PowerStrings.json @@ -0,0 +1,252 @@ +{ + "champ:CounterPower": { + "NAME": "Contraataque", + "DESCRIPTIONS": [ + "La próxima vez que recibas daño de un #yAtaque, obtén un #yEstocada #yde #yContraataque que inflige #b", + " de daño." + ] + }, + "champ:FocusedDefPower": { + "NAME": "Foco: Defensivo", + "DESCRIPTIONS": [ + "La próxima vez que uses un #yFinal este turno, gana #b", + " de #yBloqueo [REMOVE_SPACE]." + ] + }, + "champ:FocusedBerPower": { + "NAME": "Juego de Pies", + "DESCRIPTIONS": [ + "La próxima vez que uses un #yFinal este turno, TODOS los enemigos pierden #b", + " de vida." + ] + }, + "champ:ShieldWallPower": { + "NAME": "Muro de Escudos", + "DESCRIPTIONS": [ + "Al final de tu turno, gana #b", + " de #yContraataque [REMOVE_SPACE]." + ] + }, + "champ:EntangleNextTurnPower": { + "NAME": "Espada Lanzada", + "DESCRIPTIONS": [ + "No puedes jugar #yAtaques en tu próximo turno.", + "No puedes jugar #yAtaques durante los próximos #b", + " turnos." + ] + }, + "champ:DrawLessNextTurnPower": { + "NAME": "Reducción de Robo", + "DESCRIPTIONS": [ + "Roba #b", + " carta menos en tu próximo turno.", + " cartas menos en tu próximo turno." + ] + }, + "champ:PushThroughPower": { + "NAME": "Ignorar Dolor", + "DESCRIPTIONS": [ + "No puedes perder vida este turno.", + "No puedes perder vida durante los próximos #b", + " turnos." + ] + }, + "champ:WorseRupturePower": { + "NAME": "Ira Infinita", + "DESCRIPTIONS": [ + "Siempre que pierdas vida en tu turno, gana #b", + " de #yFuerza temporal [REMOVE_SPACE]." + ] + }, + "champ:ImprovisingPower": { + "NAME": "Improvisar", + "DESCRIPTIONS": [ + "Al comienzo de tu turno, si no estás en una #yPostura [REMOVE_SPACE], entra en una #yPostura aleatoria [REMOVE_SPACE]. Cada vez que entres en una #yPostura [REMOVE_SPACE], activa su #yBono #b", + " veces." + ] + }, + "champ:CalledShotPower": { + "NAME": "Refuerzo Oportuno", + "DESCRIPTIONS": [ + "La próxima vez que juegues un #yFinal [REMOVE_SPACE], no saldrás de tu #yPostura [REMOVE_SPACE].", + "Las próximas #b", + " veces que juegues un #yFinal [REMOVE_SPACE], no saldrás de tu #yPostura [REMOVE_SPACE]." + ] + }, + "champ:DancingMasterPower": { + "NAME": "Maestro de la Danza", + "DESCRIPTIONS": [ + "La primera vez que uses un #yFinal en cada turno, gana #b", + " [E] y roba #b", + " cartas. ", + "", + "Usado este turno.", + "" + ] + }, + "champ:StrikeOfGeniusPower": { + "NAME": "Golpe Genial", + "DESCRIPTIONS": [ + "Al comienzo de tu turno, obtén un \"Golpe\" #yEco aleatorio. Cuesta #b0 hasta que se juegue.", + "Al comienzo de tu turno, obtén #b", + " \"Golpes\" #yEco aleatorios. Cuestan #b0 hasta que se jueguen." + ] + }, + "champ:StrikeOfGeniusUpgradedPower": { + "NAME": "Golpe Genial+", + "DESCRIPTIONS": [ + "Al comienzo de tu turno, obtén un \"Golpe\" #yMejorado #yEco aleatorio. Cuesta #b0 hasta que se juegue.", + "Al comienzo de tu turno, obtén #b", + " \"Golpes\" #yMejorados #yEco aleatorios. Cuestan #b0 hasta que se jueguen." + ] + }, + "champ:DefensiveStylePower": { + "NAME": "Estilo Defensivo", + "DESCRIPTIONS": [ + "Los #bBonos #yDefensivo otorgan #b", + " adicional de #yContraataque [REMOVE_SPACE]." + ] + }, + "champ:GladiatorStylePower": { + "NAME": "Combate Limpio", + "DESCRIPTIONS": [ + "Si comienzas tu turno sin Postura, gana #b", + " de #yFuerza temporal y #yDestreza." + ] + }, + "champ:BerserkerStylePower": { + "NAME": "Afilar la Espada", + "DESCRIPTIONS": [ + "Los #rBonos de #rBerserker otorgan #b", + " más de #yVigor." + ] + }, + "champ:FalseCounterPower": { + "NAME": "Contraataque Fingido", + "DESCRIPTIONS": [ + "La próxima vez que se active #yContraataque, solo pierdes la mitad de tu #yContraataque.", + "Las próximas #b", + " veces que se active #yContraataque, solo pierdes la mitad de tu #yContraataque." + ] + }, + "champ:EnergizedDurationPower": { + "NAME": "Energizado", + "DESCRIPTIONS": [ + "Gana #b", + " de [E] adicionales el próximo turno.", + " de [E] adicional el próximo turno.", + " - NOTA DEL TRADUCTOR: la línea superior es para plural si es necesario distinguirla del singular." + ] + }, + "champ:IronFortressPower": { + "NAME": "Paso Técnico", + "DESCRIPTIONS": [ + "Cada vez que entres en una #yPostura, gana #b", + " de #yBloqueo." + ] + }, + "champ:IronFortressVigorPower": { + "NAME": "Jiga Técnica: Berserker", + "DESCRIPTIONS": [ + "Cada vez que entras en una postura, activa la bonificación de la #rPostura #rBerserker", + " #b", + " veces." + ] + }, + "champ:LastStandMod": { + "NAME": "Última Resistencia", + "DESCRIPTIONS": [ + "Al comienzo del turno, si tu vida está al 50% o menos, elimina todas las desventajas y gana ", + " de #yFuerza." + ] + }, + "champ:GladiatorFormPower": { + "NAME": "Forma de Gladiador", + "DESCRIPTIONS": [ + "Al comienzo de tu turno, gana #b", + " de #yVigor por cada #b3 gastado este turno, haz lo mismo con #yContraataque." + ] + }, + "champ:NoBlockNextTurnPower": { + "NAME": "Escudo Lanzado", + "DESCRIPTIONS": [ + "No puedes ganar Bloqueo en tu próximo turno.", + "No puedes ganar Bloqueo durante los próximos #b", + " turnos." + ] + }, + "champ:UltimateStancePower": { + "NAME": "Drenado Definitivo", + "DESCRIPTIONS": [ + "La Postura Definitiva expirará este turno.", + "La Postura Definitiva durará #b", + " turnos más." + ] + }, + "champ:UltimateFormNextTurnPower": { + "NAME": "Preparando lo Definitivo", + "DESCRIPTIONS": [ + "Al comienzo de tu próximo turno, entra en #yPostura #yDefinitiva.", + " NL Permanecerá por #b", + " turnos." + ] + }, + "champ:EnGardePower": { + "NAME": "¡En Guardia!", + "DESCRIPTIONS": [ + "Si tu Bloqueo se rompe este turno, gana #b", + " de Bloqueo en el próximo turno." + ] + }, + "champ:ParryPower": { + "NAME": "Desvío", + "DESCRIPTIONS": [ + "Si usas #yContraataque este turno, gana una #yEstocada #yde #yContraataque adicional." + ] + }, + "champ:BoomerangPower": { + "NAME": "Bumerán", + "DESCRIPTIONS": [ + "Al comienzo de tu próximo turno, regresa ", + " a tu mano. Cuesta #b0 y ya no regresará nuevamente." + ] + }, + "champ:ResolvePower": { + "NAME": "Fatiga", + "DESCRIPTIONS": [ + "Al final del combate, recupera los PV fatigados." + ] + }, + "champ:DualPlaySrikePower": { + "NAME": "Tormenta de Golpes", + "DESCRIPTIONS": [ + "Tu próximo #y\"Golpe\" se jugará dos veces este turno.", + "Tus próximos ", + " #y\"Golpes\" se jugarán dos veces este turno." + ] + }, + "champ:LastStandPower": { + "NAME": "Última Resistencia", + "DESCRIPTIONS": [ + "Una vez que bajes del #b50% de vida, elimina todas las desventajas y gana #b", + " de Fuerza.", + "~Ahora~ ~sí~ ~lo~ ~has~ ~hecho...~", + "@¿DERROTADO??@ NL @¡IMPOSIBLE!@" + ] + }, + "champ:HonePower": { + "NAME": "Hoja Pulida", + "DESCRIPTIONS": [ + "Tus cartas #y\"Golpe\" infligen #b", + " de daño adicional." + ] + }, + "champ:DoubleStyleThisTurnPower": { + "NAME": "Latigazo Encadenado", + "DESCRIPTIONS": [ + "Este turno, los #yBonos otorgan #b", + " de efecto adicional." + ] + } +} + diff --git a/src/main/resources/champResources/localization/spa/RelicStrings.json b/src/main/resources/champResources/localization/spa/RelicStrings.json new file mode 100644 index 000000000..fa9a6c10e --- /dev/null +++ b/src/main/resources/champResources/localization/spa/RelicStrings.json @@ -0,0 +1,126 @@ +{ + "champ:ChampionCrown": { + "NAME": "Corona del Campeón", + "FLAVOR": "¡ERES EL GANADOR!", + "DESCRIPTIONS": [ + "Al comienzo del combate, elige entrar en #yPostura #bchamp:Defensivo o #rchamp:Berserker [REMOVE_SPACE]." + ] + }, + "champ:BlackKnightHelmet": { + "NAME": "Yelmo del Caballero Negro", + "FLAVOR": "Solo un rasguño.", + "DESCRIPTIONS": [ + "La primera vez que entres en cada #yPostura en cada combate: NL #bchamp:Defensivo : Gana #b2 de #yDestreza y pierde #b1 de #yFuerza [REMOVE_SPACE]. NL #rchamp:Berserker : Gana #b2 de #yFuerza y pierde #b1 de #yDestreza [REMOVE_SPACE]." + ] + }, + "champ:Barbells": { + "NAME": "Mancuernas", + "FLAVOR": "¿1000 repeticiones? Pff. Yo puedo hacer 1001.", + "DESCRIPTIONS": [ + "Siempre que entres a una Zona de Descanso, si tienes al menos #b10 cartas mejorables en tu mazo, #yMejora una al azar." + ] + }, + "champ:BerserkersGuideToSlaughter": { + "NAME": "Guía del Berserker", + "FLAVOR": "El texto es ilegible.", + "DESCRIPTIONS": [ + "Al comienzo de tu turno, gana #b3 de #yVigor [REMOVE_SPACE]." + ] + }, + "champ:ChampionCrownUpgraded": { + "NAME": "Corona Victoriosa", + "FLAVOR": "¡Felicidaciones! Eres el mejor ganador.", + "DESCRIPTIONS": [ + "Reemplaza ", + " [REMOVE_SPACE].[] NL Comienza cada combate en la #yPostura #ychamp:Definitiva [REMOVE_SPACE], que dura #b3 turnos." + ] + }, + "champ:DefensiveTrainingManual": { + "NAME": "Tesis Defensiva", + "FLAVOR": "Consejo profesional: no te dejes golpear.", + "DESCRIPTIONS": [ + "El #bBono de #yFinal de la #yPostura #bchamp:Defensivo otorga #b3 más de #yBloqueo [REMOVE_SPACE]." + ] + }, + "champ:DeflectingBracers": { + "NAME": "Brazales Desviadores", + "FLAVOR": "Si creías que bloquear ya era bueno...", + "DESCRIPTIONS": [ + "Al comienzo de tu turno, gana #ychamp:Contraataque igual a la mitad del #yBloqueo expirado [REMOVE_SPACE]." + ] + }, + "champ:DuelingGlove": { + "NAME": "Guante de Duelo", + "FLAVOR": "Cuenta hasta diez...", + "DESCRIPTIONS": [ + "Después de usar un #yAtaque de un solo objetivo [REMOVE_SPACE], si el objetivo no tiene #yVulnerable [REMOVE_SPACE], aplícale #b1 de #yVulnerable [REMOVE_SPACE]." + ] + }, + "champ:FightingForDummies": { + "NAME": "Guía de Estilo del Delfín", + "FLAVOR": "Autor: El renombrado explorador y luchador Dolphin K. Mist.", + "DESCRIPTIONS": [ + "Si terminas tu turno sin estar en una #yPostura [REMOVE_SPACE], roba #b1 carta adicional en el siguiente turno." + ] + }, + "champ:GladiatorsBookOfMartialProwess": { + "NAME": "Manual del Gladiador", + "FLAVOR": "Prueba de todo: algo funcionará.", + "DESCRIPTIONS": [ + "Siempre que juegues un #ychamp:Combo [REMOVE_SPACE], un #ychamp:Final [REMOVE_SPACE] y entres en una #yPostura en el mismo turno, gana #b1 de #yFuerza y #yDestreza [REMOVE_SPACE]." + ] + }, + "champ:PowerArmor": { + "NAME": "Armadura Potenciada", + "FLAVOR": "Comprada de segunda mano.", + "DESCRIPTIONS": [ + "Gana [E] al comienzo de tu turno. NL Tu máximo de #yVigor y #ychamp:Contraataque es #b10 [REMOVE_SPACE]." + ] + }, + "champ:RageAmulet": { + "NAME": "Amuleto de Voluntad Inquebrantable", + "FLAVOR": "Una fuerza que antes era fugaz ahora fluye como si siempre hubiera estado en ti.", + "DESCRIPTIONS": [ + "Siempre que gastes #yVigor [REMOVE_SPACE], gana #b1 de #yFuerza por cada #b", + " de #yVigor gastado." + ] + }, + "champ:SignatureFinisher": { + "NAME": "Remate Insignia", + "FLAVOR": "¡Y ahora, es hora de mi MOVIMIENTO FINAL!", + "DESCRIPTIONS": [ + "Al obtenerla, elige un #ychamp:Final [REMOVE_SPACE]. Este #yFinal cuesta #b0 [REMOVE_SPACE], puede usarse sin una #yPostura [REMOVE_SPACE] y nunca te hará salir de tu #yPostura.", + "Elige una carta para ", + " cuesta #b0 [REMOVE_SPACE], puede usarse sin una #yPostura [REMOVE_SPACE], y nunca te hará salir de tu #yPostura." + ] + }, + "champ:SpectersHand": { + "NAME": "Mano del Espectro", + "FLAVOR": "Algunas victorias se quedan contigo.", + "DESCRIPTIONS": [ + "Siempre que entres en una #yPostura [REMOVE_SPACE], gana un #ygremlin:Eco de un #yGolpe o #yDefensa básico [REMOVE_SPACE]. Cuesta #b0 [REMOVE_SPACE]." + ] + }, + "champ:LiftRelic": { + "NAME": "Fuerza Interior", + "FLAVOR": "Se trata de la espada gigante en tu corazón.", + "DESCRIPTIONS": [ + "Comienza cada combate con #b", + " de #yFuerza [REMOVE_SPACE]." + ] + }, + "champ:ChampStancesModRelic": { + "NAME": "Nuevo Retador", + "FLAVOR": "¿Puedes tomar la corona?", + "DESCRIPTIONS": [ + "Comienza cada combate en una #yPostura aleatoria de Campeón [REMOVE_SPACE]." + ] + }, + "champ:BustedCrownGagText": { + "NAME": "Corona Falsa", + "FLAVOR": "La imitación es la forma más sincera de adulación... ¿o no? Ni siquiera se parece tanto a tu corona. En realidad, es un poco insultante.", + "DESCRIPTIONS": [ + "Gana [E] al comienzo de tu turno. Las recompensas de cartas futuras tienen 2 opciones menos para elegir." + ] + } +} diff --git a/src/main/resources/champResources/localization/spa/RunModStrings.json b/src/main/resources/champResources/localization/spa/RunModStrings.json new file mode 100644 index 000000000..9c656b7c6 --- /dev/null +++ b/src/main/resources/champResources/localization/spa/RunModStrings.json @@ -0,0 +1,6 @@ +{ + "Slimebound:AllSplit": { + "NAME": "Slime the Spire", + "DESCRIPTION": "Todos los enemigos se dividen en dos enemigos Slime." + } +} \ No newline at end of file diff --git a/src/main/resources/champResources/localization/spa/UIStrings.json b/src/main/resources/champResources/localization/spa/UIStrings.json new file mode 100644 index 000000000..e271a157c --- /dev/null +++ b/src/main/resources/champResources/localization/spa/UIStrings.json @@ -0,0 +1,44 @@ +{ + "champ:SealCommonReward": { + "TEXT": [ + "Añade una carta Común a tu mazo" + ] + }, + "champ:SealSealReward": { + "TEXT": [ + "Añade un Sello a tu mazo" + ] + }, + "champ:TechniqueMod": { + "TEXT": [ + " NL Activa el *Bono de *Habilidad de la *Postura." + ] + }, + "champ:OpenerMod": { + "TEXT": [ + " NL Entra en champ:Berserker.", + " NL Entra en champ:Defensiva.", + "Entra en champ:Gladiador NL " + ] + }, + "champ:RetainCardMod": { + "TEXT": [ + "Retiene. NL " + ] + }, + "champ:EnchantUI": { + "TEXT": [ + "cuesta 0.", + "aumenta el daño.", + "aumenta el Bloqueo." + ] + }, + "champ:highlightCombos": { + "TEXT": [ + "champ:Combo *Berserker:", + "champ:Combo [#5ebf2a]Berserker:", + "champ:Combo *Defensivo:", + "champ:Combo [#5ebf2a]Defensivo:" + ] + } +} diff --git a/src/main/resources/champResources/localization/zhs/CardStrings.json b/src/main/resources/champResources/localization/zhs/CardStrings.json index 938ef26f6..ade4130af 100644 --- a/src/main/resources/champResources/localization/zhs/CardStrings.json +++ b/src/main/resources/champResources/localization/zhs/CardStrings.json @@ -19,8 +19,17 @@ }, "champ:StanceDance": { "NAME": "姿态之舞", - "DESCRIPTION": "选择进入一种 姿态 。 NL 若已处于 该 *姿态 , NL 获得其 champ:连段 牌。", - "UPGRADE_DESCRIPTION": "选择进入一种 姿态 。 NL 获得其 champ:连段 牌。", + "DESCRIPTION": "选择进入一种 姿态 。 NL 获得其 champ:技术 奖励一次 。", + "UPGRADE_DESCRIPTION": "选择进入一种 姿态 。 NL 获得其 champ:技术 奖励两次 。", + "EXTENDED_DESCRIPTION": [ + " 进入 champ:战狂 。", + " 进入 champ:防守 。" + ] + }, + "champ:StanceDanceCrown": { + "NAME": "冠军金冠", + "DESCRIPTION": "选择进入一种 姿态 。 NL 获得其 champ:技术 奖励一次 。", + "UPGRADE_DESCRIPTION": "选择进入一种 姿态 。 NL 获得其 champ:技术 奖励两次 。", "EXTENDED_DESCRIPTION": [ " 进入 champ:战狂 。", " 进入 champ:防守 。" @@ -28,8 +37,7 @@ }, "champ:SwordSigil": { "NAME": "胜利旌旗", - "DESCRIPTION": "获得 champ:技术 奖励 !M! 次。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "获得 champ:技术 奖励 !M! 次。 NL 消耗 。" + "DESCRIPTION": "获得 champ:技术 奖励 !M! 次。 " }, "champ:FaceSlap": { "NAME": "打脸", @@ -45,7 +53,7 @@ }, "champ:ShieldSigil": { "NAME": "铁链鞭击", - "DESCRIPTION": "造成 !D! 点伤害。 NL 本回合 champ:技术 奖励额外提供 !M! 层。" + "DESCRIPTION": "造成 !D! 点伤害。 NL 本回合 champ:技术 奖励额外提供 !M! 层 。" }, "champ:FocusedDefense": { "NAME": "下潜摇摆", @@ -61,7 +69,7 @@ }, "champ:Backstep": { "NAME": "后撤", - "DESCRIPTION": "进入 champ:防守 。 NL 获得 !B! 点 格挡 。 NL 格挡 值受 活力 加成。", + "DESCRIPTION": "获得 !B! 点 格挡 。 NL 格挡 值受 活力 加成。", "EXTENDED_DESCRIPTION": [ " NL (获得 !B! 点 格挡。)" ] @@ -72,7 +80,7 @@ }, "champ:RageSigil": { "NAME": "战斗计划", - "DESCRIPTION": "获得 !B! 点 格挡 。 NL 预见 !M! 。" + "DESCRIPTION": "进入 champ:防守 。 NL 获得 !B! 点 格挡 。 NL 预见 !M! 。" }, "champ:GutPunch": { "NAME": "腹拳", @@ -85,11 +93,11 @@ }, "champ:Devastate": { "NAME": "坏灭", - "DESCRIPTION": "造成 !D! 点伤害三次。 NL 每用过一张 champ:终结技 , NL 本场战斗耗能减1。" + "DESCRIPTION": "造成 !D! 点伤害 !M! 次。 NL 每用过一张 champ:终结技 , NL 本场战斗耗能减1。" }, "champ:Circumvent": { "NAME": "规避", - "DESCRIPTION": "获得 !B! 点 格挡 。 NL 抽 !M! 张牌, NL 丢弃 !M! 张牌。" + "DESCRIPTION": "获得 !B! 点 格挡 。 NL 抽 !M! 张牌, NL 丢弃 !M! 张牌。 NL champ:防守 champ:连段 : NL 不丢弃手牌 " }, "champ:SkillfulDodge": { "NAME": "精巧闪避", @@ -125,8 +133,10 @@ }, "champ:ShieldThrow": { "NAME": "护盾猛掷", - "DESCRIPTION": "造成你当前 格挡 值点伤害两次。 NL 获得2层 脆弱 。 NL champ:防守 champ:连段 : NL 不获得 脆弱 。", - "EXTENDED_DESCRIPTION": ["造成你当前 格挡 值(!D!)点伤害两次。 NL 获得2层 脆弱 。 NL champ:防守 champ:连段 : NL 不获得 脆弱 。"] + "DESCRIPTION": "造成你当前 格挡 值点伤害两次。", + "EXTENDED_DESCRIPTION": [ + "造成你当前 格挡 值(!D!)点伤害两次。" + ] }, "champ:FalseCounter": { "NAME": "以逸待劳", @@ -138,8 +148,8 @@ "DESCRIPTION": "进入不同 姿态 时, NL 获得 !M! 点 格挡 。" }, "champ:Lariat": { - "NAME": "身强体健", - "DESCRIPTION": "获得 !B! 点 格挡 X次。" + "NAME": "套索臂", + "DESCRIPTION": "获得 !B! 点 格挡 X次。 NL 获得 champ:技术 奖励X次 。" }, "champ:HoldFirm": { "NAME": "固守", @@ -155,7 +165,7 @@ }, "champ:ViciousMockery": { "NAME": "毒舌", - "DESCRIPTION": "获得 !M! 层 活力 。 NL 给予 !DM! 层 虚弱 。", + "DESCRIPTION": "获得 !M! 层 活力 。 NL 给予 !DM! 层 虚弱 。 NL 获得 champ:技术 奖励一次 。", "EXTENDED_DESCRIPTION": [ " champ:战狂 champ:连段 :获得 !M! 点 guardianmod:临时 力量 。 NL ", " champ:防守 champ:连段 :获得 !M! 点 guardianmod:临时 敏捷 。" @@ -186,8 +196,7 @@ }, "champ:SwordThrow": { "NAME": "剑刃猛掷", - "DESCRIPTION": "造成 !D! 点伤害 !M! 次。 NL 获得2层 虚弱 。 NL champ:战狂 champ:连段 : NL 不获得 虚弱 。" - + "DESCRIPTION": "造成 !D! 点伤害 !M! 次。 NL 获得2层 虚弱 。 NL champ:战狂 champ:连段 : NL 不获得 虚弱 。" }, "champ:MurderStrike": { "NAME": "刽子打击", @@ -195,8 +204,7 @@ }, "champ:HeavySlash": { "NAME": "大师斩击", - "DESCRIPTION": " 造成 !D! 点伤害。 NL 随机获得 *技能 牌, NL 其耗能为0。", - "UPGRADE_DESCRIPTION": "造成 !D! 点伤害。 NL 随机获得 *技能 牌+, NL 其耗能为0。" + "DESCRIPTION": " 造成 !D! 点伤害。 NL 下回合获得未被 格挡 伤害 点 活力。" }, "champ:CheapShot": { "NAME": "偷袭", @@ -208,8 +216,7 @@ }, "champ:Shatter": { "NAME": "粉碎", - "DESCRIPTION": "移除目标的 格挡 。 NL 造成 !D! 点伤害。", - "UPGRADE_DESCRIPTION": "移除目标的 格挡 与 人工制品 。 NL 造成 !D! 点伤害。" + "DESCRIPTION": "造成 !D! 点伤害。 NL *任意 champ:连段 : NL 给予 !M! 层 虚弱 和 易伤 。" }, "champ:EnragedBash": { "NAME": "怒锤", @@ -219,7 +226,7 @@ ] }, "champ:VampiricStrike": { - "NAME": "重击", + "NAME": "猛烈打击", "DESCRIPTION": "造成 !D! 点伤害。 NL 获得未被 格挡 伤害 点 格挡 。" }, "champ:AdrenalArmor": { @@ -236,11 +243,11 @@ }, "champ:CrownThrow": { "NAME": "投掷金冠", - "DESCRIPTION": " 造成 !D! 点伤害。 NL champ:战狂 champ:连段 : NL 抽 !M! 张 *攻击 牌。" + "DESCRIPTION": " 造成 !D! 点伤害。 NL champ:战狂 champ:连段 : NL 抽 !M! 张牌。" }, "champ:Encircle": { "NAME": "包围", - "DESCRIPTION": "对所有敌人造成 !D! 点伤害。 NL 每有一名敌人, NL 获得一次 champ:技术 奖励。" + "DESCRIPTION": "对所有敌人造成 !D! 点伤害。 NL 每有一名敌人, NL 抽 !M! 张牌。" }, "champ:LastStand": { "NAME": "背水一战", @@ -252,16 +259,16 @@ }, "champ:RecklessLeap": { "NAME": "无谋打击", - "DESCRIPTION": "造成 !D! 点伤害。 NL 获得2点 力量 。 NL 失去1点 敏捷 。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "造成 !D! 点伤害。 NL 获得2点 力量 。 NL 失去1点 敏捷 。", + "DESCRIPTION": "造成 !D! 点伤害。 NL 获得 !M! 点 力量 。 NL 进入 champ:战狂 。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "造成 !D! 点伤害。 NL 获得 !M! 点 力量 。 NL 进入 champ:战狂 。", "EXTENDED_DESCRIPTION": [ "还不是时候。" ] }, "champ:IgnorePain": { "NAME": "无视伤痛", - "DESCRIPTION": "本回合不失去生命。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "保留 。 NL 下回合开始前你的生命将不会减少。 NL 消耗 。" + "DESCRIPTION": "本回合你不会失去生命。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "下回合开始前你的生命将不会减少。 NL 消耗 。" }, "champ:DeathBlow": { "NAME": "致命一击", @@ -271,13 +278,9 @@ "NAME": "重整战场", "DESCRIPTION": "随机获得 !M! 张 保留 *技能 牌。 NL 消耗 。" }, - "champ:EndlessRage": { - "NAME": "无穷愤火", - "DESCRIPTION": "每当你进入 姿态 时:" - }, "champ:SteelEdge": { "NAME": "剑锋", - "DESCRIPTION": "造成 !D! 点伤害X次。", + "DESCRIPTION": "造成 !D! 点伤害X次。 NL 连续触发X次 NL (至少1次)", "EXTENDED_DESCRIPTION": [ " champ:战狂 champ:连段 :造成 !D! 点伤害X次。 NL ", " champ:防守 champ:连段 :获得 !B! 点 格挡 X次。", @@ -288,7 +291,7 @@ }, "champ:Improvising": { "NAME": "触类旁通", - "DESCRIPTION": "回合开始时若未处于 姿态 ,随机进入一种。" + "DESCRIPTION": "回合开始时若未处于 姿态 ,随机进入 champ:战狂 或 champ:防守 。 NL 每次进入 姿态 时,获得其 champ:技术 奖励 !M! 次 。" }, "champ:CalledShot": { "NAME": "畅饮", @@ -320,35 +323,33 @@ }, "champ:StrikeOfGenius": { "NAME": "打击天才", - "DESCRIPTION": "回合开始时, NL 随机获得 消耗 *打击 牌。 NL 其首次耗能为0。", - "UPGRADE_DESCRIPTION": "回合开始时, NL 随机获得 消耗 *打击 牌+。 NL 其首次耗能为0。" + "DESCRIPTION": "回合开始时, NL 随机获得 *打击 牌的 gremlin:回响 。 NL 其首次耗能为0。", + "UPGRADE_DESCRIPTION": "回合开始时, NL 随机获得 *打击 牌+的 gremlin:回响 。 NL 其首次耗能为0。" }, "champ:DefensiveStyle": { - "NAME": "防守战法", - "DESCRIPTION": "进入 champ:防守 。 NL champ:防守 champ:技术 奖励额外提供 !M! 层 champ:反击 。", - "UPGRADE_DESCRIPTION": "固有 。 NL 进入 champ:防守 。 NL champ:防守 champ:技术 奖励额外提供 !M! 层 champ:反击 。" + "NAME": "双重战法", + "DESCRIPTION": "champ:技术 奖励额外提供 !M! 层 活力 与 champ:反击 。" }, "champ:GladiatorStyle": { "NAME": "利落", - "DESCRIPTION": "获得 !M! 点 力量 。 NL 获得 !M! 点 敏捷 。" + "DESCRIPTION": " champ:战狂 champ:连段 : NL 获得 !M! 点 力量 。 NL champ:防守 champ:连段 : NL 获得 !M! 点 敏捷 。" }, "champ:BerserkerStyle": { - "NAME": "狂暴战法", - "DESCRIPTION": "进入 champ:战狂 。 NL champ:战狂 champ:技术 奖励额外提供 !M! 层 活力 。", - "UPGRADE_DESCRIPTION": "固有 。 NL 进入 champ:战狂 。 NL champ:战狂 champ:技术 奖励额外提供 !M! 层 活力 。" + "NAME": "砥砺", + "DESCRIPTION": "*打击 牌额外造成 !M! 点伤害 。" }, "champ:Riposte": { - "NAME": "弹反", + "NAME": "弹反打击", "DESCRIPTION": "虚无 。 NL 造成 !D! 点伤害。 NL 消耗 。" }, "champ:Endure": { "NAME": "忍耐", - "DESCRIPTION": "获得 !B! 点 格挡 。 NL 格挡 值受 力量 加成而非 敏捷 。", - "UPGRADE_DESCRIPTION": "获得 !B! 点 格挡 。 NL 格挡 值还受 力量 加成。" + "DESCRIPTION": "进入 champ:防守 。 NL 获得 !B! 点 格挡 。 NL 格挡 值受 力量 加成而非 敏捷 。", + "UPGRADE_DESCRIPTION": "进入 champ:防守 。 NL 获得 !B! 点 格挡 。 NL 格挡 值还受 力量 加成。" }, "champ:PreemptiveStrike": { "NAME": "抢先打击", - "DESCRIPTION": "对所有敌人造成 champ:反击 层数点伤害。 NL 失去一半 champ:反击 。", + "DESCRIPTION": "对所有敌人造成 champ:反击 层数点伤害。 NL 失去一半 champ:反击 。 NL champ:防守 champ:连段 : NL 不失去 champ:反击 。", "EXTENDED_DESCRIPTION": [ " NL (造成 !D! 点伤害)", "还不是时候。" @@ -356,7 +357,7 @@ }, "champ:Parry": { "NAME": "招架", - "DESCRIPTION": "获得 !B! 点 格挡 。 NL 获得 !M! 层 champ:反击 。 NL 若本回合触发 champ:反击 , NL 获得 *弹反 。", + "DESCRIPTION": "获得 !B! 点 格挡 。 NL 获得 !M! 层 champ:反击 。 NL 若本回合触发 champ:反击 , NL 额外获得一张 *弹反打击 。", "UPGRADE_DESCRIPTION": "虚无 。 NL 造成 champ:反击 触发时层数点伤害。 NL 消耗 。" }, "champ:EnchantCrown": { @@ -384,8 +385,8 @@ }, "champ:TripleStrike": { "NAME": "三重打击", - "DESCRIPTION": "造成 !D! 点伤害。 NL 获得两张 champ:技术 *打击 , NL 其耗能为0。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "造成 !D! 点伤害。 NL 获得两张 champ:技术 *打击+ , NL 其耗能为0。 NL 消耗 。" + "DESCRIPTION": "造成 !D! 点伤害。 NL 获得两张 champ:技术 *打击 的 gremlin:回响 。 NL 其耗能为0。", + "UPGRADE_DESCRIPTION": "造成 !D! 点伤害。 NL 获得两张 champ:技术 *打击+ 的 gremlin:回响 。 NL 其耗能为0。" }, "champ:WindUp": { "NAME": "挑衅", @@ -396,20 +397,8 @@ "进入 champ:防守 。" ] }, - "champ:Balance": { - "NAME": "平衡", - "DESCRIPTION": "弃用弃用弃用弃用弃用弃用弃用弃用弃用弃用弃用弃用", - "UPGRADE_DESCRIPTION": "进入 champ:防守 或 champ:角斗 。 NL 将一张已 的所选 姿态 的 champ:连段 牌加入手牌。", - "EXTENDED_DESCRIPTION": [ - " 进入 champ:防守 。 NL 将一张 champ:防守 牌加入手牌。", - " 进入 champ:角斗 。 NL 将一张 champ:角斗 牌加入手牌。", - " 进入 champ:防守 。 NL 将一张已 的 champ:防守 牌加入手牌。", - " 进入 champ:角斗 。 NL 将一张已 的 champ:角斗 牌加入手牌。" - ] - }, "champ:Headbutt": { "NAME": "头槌", "DESCRIPTION": "造成 !D! 点伤害。 NL 将弃牌堆一张牌放入抽牌堆顶部。" } } - diff --git a/src/main/resources/champResources/localization/zhs/CharacterStrings.json b/src/main/resources/champResources/localization/zhs/CharacterStrings.json index c3b90d164..f26a2566d 100644 --- a/src/main/resources/champResources/localization/zhs/CharacterStrings.json +++ b/src/main/resources/champResources/localization/zhs/CharacterStrings.json @@ -48,7 +48,7 @@ "技术", "如果你处于 #y姿态 ,触发其 #y技术 奖励。", "终结技", - "打出 #y终结技 后,退出当前 #y姿态 并触发其 #y终结技 效果。", + "处于姿态时才能打出。打出 #y终结技 后,退出当前 #y姿态 并触发其 #y终结技 效果。", "我的格挡不够。", " #y疲劳 #b3 并获得 #b", " 层 #y活力 。", diff --git a/src/main/resources/champResources/localization/zhs/EventStrings.json b/src/main/resources/champResources/localization/zhs/EventStrings.json index 25dec2681..21a68058c 100644 --- a/src/main/resources/champResources/localization/zhs/EventStrings.json +++ b/src/main/resources/champResources/localization/zhs/EventStrings.json @@ -86,7 +86,7 @@ "OPTIONS": [ "[与百夫长和神秘术士战斗] #g获得斗篷扣", "[与地精大块头战斗] #g获得冠军腰带", - "[与奴隶二人组战斗] #g获得袖剑", + "[与奴隶二人组战斗] #g获得马蹄铁", "[离开]" ] }, diff --git a/src/main/resources/champResources/localization/zhs/KeywordStrings.json b/src/main/resources/champResources/localization/zhs/KeywordStrings.json index 55e4028d9..0f0057d25 100644 --- a/src/main/resources/champResources/localization/zhs/KeywordStrings.json +++ b/src/main/resources/champResources/localization/zhs/KeywordStrings.json @@ -2,29 +2,44 @@ { "PROPER_NAME": "技术", "NAMES": [ + "bonus", + "bonuses", "technique", - "技术", + "techniques", "champ:[crown_icon]", - "[crown_icon]" + "[crown_icon]", + "奖励", + "技术" ], "DESCRIPTION": "处于 #y姿态 时,打出 #y技能 牌就获得 该 #y姿态 的 #y技术 奖励。每次进入 #y姿态 后最多触发 #b3 次(牌面 #y技术 效果不受限制)。" }, { "PROPER_NAME": "连段", "NAMES": [ - "连段", - "combo" + "combo", + "连段" ], "DESCRIPTION": "处于特定 #y姿态 才触发效果。" }, + { + "PROPER_NAME": "打击", + "NAMES": [ + "strike", + "strikes", + "打击" + ], + "DESCRIPTION": "在卡牌名称中含有打击的牌。" + }, { "PROPER_NAME": "终结技", "NAMES": [ - "终结技", + "finisher", + "finishers", "[fist_icon]", - "champ:[fist_icon]" + "champ:[fist_icon]", + "终结技" ], - "DESCRIPTION": "打出 #y终结技 后,退出当前 #y姿态 并触发其 #y终结技 效果 。" + "DESCRIPTION": "处于姿态时才能打出。 NL 打出 #y终结技 后,退出当前 #y姿态 并触发其 #y终结技 效果 。 NL #r战狂 #y终结技 -获得 #b1 点 #y力量 。 NL #b防守 #y终结技-获得 #b8 点 #y格挡 。" }, { "PROPER_NAME": "反击", @@ -32,21 +47,23 @@ "counter", "反击" ], - "DESCRIPTION": "下次被 #y攻击 时,失去所有 #y反击 并对攻击者造成层数点伤害。" + "DESCRIPTION": "下次被 #y攻击 时,失去所有 #y反击 ,并获得一张造成等量层数点伤害的 #y弹反打击 。" }, { "PROPER_NAME": "防守", "NAMES": [ - "防守", - "defensive" + "defensive", + "defensive.", + "防守" ], "DESCRIPTION": "#y姿态 : NL #y技术 -获得 #b3 层 #y反击 。 NL #y终结技 -获得 #b8 点 #y格挡 。" }, { "PROPER_NAME": "战狂", "NAMES": [ - "战狂", - "berserker" + "berserker", + "berserker.", + "战狂" ], "DESCRIPTION": "#y姿态 : NL #y技术 -获得 #b2 层 #y活力 。 NL #y终结技 -获得 #b1 点 #y力量 。" }, @@ -64,7 +81,7 @@ "ultimate", "终极" ], - "DESCRIPTION": "#y姿态 。 NL 视为同时处于 #y战狂 和 #y防守 。持续时间内打出 #y终结技 将重新进入 #y终极 。" + "DESCRIPTION": "#y姿态 。 NL 视为同时处于 #r战狂 和 #b防守 。持续时间内打出 #y终结技 将重新进入 #y终极 。" }, { "PROPER_NAME": "疲劳", diff --git a/src/main/resources/champResources/localization/zhs/PowerStrings.json b/src/main/resources/champResources/localization/zhs/PowerStrings.json index da85ad826..9d5b687c4 100644 --- a/src/main/resources/champResources/localization/zhs/PowerStrings.json +++ b/src/main/resources/champResources/localization/zhs/PowerStrings.json @@ -2,8 +2,8 @@ "champ:CounterPower": { "NAME": "反击", "DESCRIPTIONS": [ - "下次你被 #y攻击 时,给予攻击者 #b", - " 点伤害并移除所有 #y反击 层数。" + "下次被 #y攻击 时,失去所有 #y反击,并获得一张造成 #b", + " 点伤害的 *弹反打击 。" ] }, "champ:FocusedBerPower": { @@ -32,7 +32,8 @@ "champ:ImprovisingPower": { "NAME": "触类旁通", "DESCRIPTIONS": [ - "你的回合开始时,若未处于 #y姿态 ,随机进入 #y战狂 或 #y防守 。 " + "你的回合开始时,若未处于 #y姿态 ,随机进入 #y战狂 或 #y防守 。 每当你进入 #y姿态 时,获得其 champ:技术 奖励 #b", + " 次 。" ] }, "champ:CalledShotPower": { @@ -115,6 +116,13 @@ " #b", " 次。" ] + }, + "champ:LastStandMod": { + "NAME": "最后一战", + "DESCRIPTIONS": [ + "你的回合开始时,若生命低于 #b50% ,清除所有 #r负面效果 并获得 #b", + " 点 #y力量 。" + ] }, "champ:GladiatorFormPower": { "NAME": "角斗形态", @@ -157,7 +165,8 @@ "champ:ParryPower": { "NAME": "招架", "DESCRIPTIONS": [ - "如果本回合触发 #y反击 ,将 #b1 张 #y弹反 加入手牌。" + "如果本回合触发 #y反击 ,额外获得 #b", + " 张 #y弹反打击 。" ] }, "champ:BoomerangPower": { @@ -176,9 +185,9 @@ "champ:DualPlaySrikePower": { "NAME": "乱舞打击", "DESCRIPTIONS": [ - "本回合你打出的下张 #y打击牌 将打出两次。", + "本回合你打出的下张 #y打击 牌 将打出两次。", "本回合你打出的下 #b", - " 张 #y打击牌 将打出两次。" + " 张 #y打击 牌 将打出两次。" ] }, "champ:LastStandPower": { @@ -190,11 +199,18 @@ "@失败??@ NL @不可能!!@" ] }, - "champ:LastStandMod": { - "NAME": "最后一战", + "champ:HonePower": { + "NAME": "砥砺", "DESCRIPTIONS": [ - "你的回合开始时,若生命低于 #b50% ,清除所有 #r负面效果 并获得 #b", - " 点 #y力量 。" + "*打击 牌额外造成 #b", + " 点伤害 。" + ] + }, + "champ:DoubleStyleThisTurnPower": { + "NAME": "铁链鞭击", + "DESCRIPTIONS": [ + "本回合 #y技术 奖励额外提供 #b", + " 层 。" ] }, "champ:FocusedDefPower": { diff --git a/src/main/resources/champResources/localization/zhs/RelicStrings.json b/src/main/resources/champResources/localization/zhs/RelicStrings.json index 7c9e9655a..ad07b34cc 100644 --- a/src/main/resources/champResources/localization/zhs/RelicStrings.json +++ b/src/main/resources/champResources/localization/zhs/RelicStrings.json @@ -3,14 +3,14 @@ "NAME": "冠军金冠", "FLAVOR": "你是冠军!", "DESCRIPTIONS": [ - "战斗开始时,随机进入一种 #y姿态 。" + "战斗开始时,选择进入 #r战狂 或 #b防守 。" ] }, "champ:BlackKnightHelmet": { "NAME": "黑骑头盔", "FLAVOR": "只受到一点擦伤。", "DESCRIPTIONS": [ - "每场战斗首次进入每种 #y姿态 时: NL #ychamp:防守 :获得 #b2 点 #y敏捷 并失去 #b1 点 #y力量 。 NL #ychamp:战狂 :获得 #b2 点 #y力量 并失去 #b1 点 #y敏捷 。" + "每场战斗首次进入每种 #y姿态 时: NL #bchamp:防守 :获得 #b2 点 #y敏捷 并失去 #b1 点 #y力量 。 NL #rchamp:战狂 :获得 #b2 点 #y力量 并失去 #b1 点 #y敏捷 。" ] }, "champ:Barbells": { @@ -31,14 +31,23 @@ "NAME": "终极王冠", "FLAVOR": "恭喜!!你是最大的赢家。", "DESCRIPTIONS": [ - "替换 #r冠军金冠 。 NL 战斗开始时,进入 #ychamp:终极 并持续 #b1 回合 。" + "替换 ", + " 。 NL 战斗开始时,进入 #ychamp:终极 并持续 #b3 回合 。" + ] + }, + "champ:RageAmulet": { + "NAME": "不屈护符", + "FLAVOR": "那些转瞬即逝的力量再次涌入身躯,彷佛它不曾离开过。", + "DESCRIPTIONS": [ + "你每消耗 #b", + " 层 #y活力 时,获得 #b1 点 #y力量 。" ] }, "champ:DefensiveTrainingManual": { "NAME": "防御训练手册", "FLAVOR": "专业提示:不要被打到。", "DESCRIPTIONS": [ - " #ychamp:防守 的 #ychamp:终结技 奖励额外提供 #b5 点 #y格挡 。" + " #bchamp:防守 的 #ychamp:终结技 奖励额外提供 #b3 点 #y格挡 。" ] }, "champ:DeflectingBracers": { @@ -82,7 +91,7 @@ "DESCRIPTIONS": [ "拾起时,选择 #b1 张 #ychamp:终结技 ,其耗能变为 #b0 ,能在未处于 #y姿态 时打出且不会退出 #y姿态 。", "选择一张终结技 ", - " 的耗能为 #b0 ,能在不处于姿态时打出且不会退出姿态" + " 的耗能为 #b0 ,能在不处于姿态时打出且不会退出姿态。" ] }, "champ:SpectersHand": { @@ -106,5 +115,12 @@ "DESCRIPTIONS": [ "战斗开始时,随机进入一种 #y姿态 。" ] + }, + "champ:BustedCrownGagText": { + "NAME": "破碎金冠", + "FLAVOR": "仿制是最真挚的奉承……吗?这看起来不像你的金冠,更像对你的羞辱。", + "DESCRIPTIONS": [ + "在每回合开始时获得 [E] 。在卡牌奖励画面,可供选择的牌数减少 #b2 张。" + ] } } diff --git a/src/main/resources/collectorResources/images/cards/MysteryWeaving_b_p.png b/src/main/resources/collectorResources/images/cards/MysteryWeaving_b_p.png index de5404888..e2f4bde7b 100644 Binary files a/src/main/resources/collectorResources/images/cards/MysteryWeaving_b_p.png and b/src/main/resources/collectorResources/images/cards/MysteryWeaving_b_p.png differ diff --git a/src/main/resources/collectorResources/localization/eng/CardStrings.json b/src/main/resources/collectorResources/localization/eng/CardStrings.json index 375f3f49d..9dbea4ffd 100644 --- a/src/main/resources/collectorResources/localization/eng/CardStrings.json +++ b/src/main/resources/collectorResources/localization/eng/CardStrings.json @@ -607,7 +607,7 @@ }, "collector:ShelledParasiteCard": { "NAME": "Shelled Parasite", - "DESCRIPTION": "Gain !M! Plated Armor." + "DESCRIPTION": "Gain !M! expansioncontent:Plated *Armor." }, "collector:ShieldGremlinCard": { "NAME": "Shield Gremlin", @@ -695,6 +695,6 @@ }, "collector:Sapped": { "NAME": "Sapped", - "DESCRIPTION": "collector:Pyre. NL Exhaust. NL Cannot be removed from your deck." + "DESCRIPTION": "collector:Pyre. NL When drawn, lose [E]. NL Exhaust. NL Cannot be removed from your deck." } } \ No newline at end of file diff --git a/src/main/resources/collectorResources/localization/eng/PotionStrings.json b/src/main/resources/collectorResources/localization/eng/PotionStrings.json index 915b6abbd..1250ab190 100644 --- a/src/main/resources/collectorResources/localization/eng/PotionStrings.json +++ b/src/main/resources/collectorResources/localization/eng/PotionStrings.json @@ -28,7 +28,7 @@ "collector:TempHPPotion": { "NAME": "Felwater", "DESCRIPTIONS": [ - "Gain #b8 #yTemp. #yHP [REMOVE_SPACE].", + "Gain #b8 #yTemp. #yHP.", "Gain #b", " #yTemp. #yHP [REMOVE_SPACE]." ] diff --git a/src/main/resources/collectorResources/localization/eng/PowerStrings.json b/src/main/resources/collectorResources/localization/eng/PowerStrings.json index 5a574600e..3447112c8 100644 --- a/src/main/resources/collectorResources/localization/eng/PowerStrings.json +++ b/src/main/resources/collectorResources/localization/eng/PowerStrings.json @@ -187,13 +187,13 @@ "collector:TorchHead": { "NAME": "Torch Head", "DESCRIPTIONS": [ - "Whenever you play an #yAttack [REMOVE_SPACE], if you have #yTemporary #yHP [REMOVE_SPACE], Torch Head: NL ", + "Whenever you play an #yAttack, if you have #yTemporary #yHP, Torch Head: NL ", "Applies #b", " #yDoom to a random enemy.", "Deals #b", " damage to ALL enemies.", "Grants you #b", - " #yBlock [REMOVE_SPACE].", + " #yBlock.", " #yPoison to a random enemy.", "Draws you #b", " card.", diff --git a/src/main/resources/collectorResources/localization/eng/RelicStrings.json b/src/main/resources/collectorResources/localization/eng/RelicStrings.json index 001ea6526..07575fe36 100644 --- a/src/main/resources/collectorResources/localization/eng/RelicStrings.json +++ b/src/main/resources/collectorResources/localization/eng/RelicStrings.json @@ -11,14 +11,14 @@ "FLAVOR": "The ever-changing flames reflect fortune's favor.", "DESCRIPTIONS": [ "Replaces ", - ".[] At the start of each combat, add an #yEmber into your hand and gain #b1 #ycollector:Reserve. The first time you #yExhaust an #yEmber each turn, gain #b1 #ycollector:Reserve." + "[] [REMOVE_SPACE]. At the start of each combat, add an #yEmber into your hand and gain #b1 #ycollector:Reserve [REMOVE_SPACE]. The first time you #yExhaust an #yEmber each turn, gain #b1 #ycollector:Reserve [REMOVE_SPACE]." ] }, "collector:HolidayCoal": { "NAME": "Krampian Coal", "FLAVOR": "\"Intriguing! But why only specific chimneys?\" - Ranwid", "DESCRIPTIONS": [ - "When you would draw from an empty Collected pile, you instead draw a #yLucky #yWick." + "When you would draw from an empty Collected pile, add a #yLucky #yWick to your hand." ] }, "collector:BagOfTricks": { @@ -33,15 +33,15 @@ "NAME": "Jade Ring", "FLAVOR": "Jade is the symbol of honesty.", "DESCRIPTIONS": [ - "Whenever a #ycollector:Doomed non-Minion enemy dies, gain #b", - " Souls." + "Enemies take #b", + " more damage from #ycollector:Doom [REMOVE_SPACE]." ] }, "collector:SoullitLamp": { "NAME": "Soul-lit Lamp", "FLAVOR": "A ghoulish decoration. The crackles of fire are replaced by buzzing wails.", "DESCRIPTIONS": [ - "Upon pickup, gain #b3 #yEssence. At the start of combat, add an #yEmber into your hand." + "Upon pickup, gain #b3 #yEssence [REMOVE_SPACE]. At the start of combat, add an #yEmber into your hand." ] }, "collector:ThimbleHelm": { @@ -49,21 +49,21 @@ "FLAVOR": "Worn by the Spire's miniest heroes.", "DESCRIPTIONS": [ "Start each combat with #b", - " #yTemporary_HP. While you have #yTemporary_HP, cards grant #b1 additional #yBlock." + " #yTemporary_HP [REMOVE_SPACE]. While you have #yTemporary_HP [REMOVE_SPACE], cards grant #b1 additional #yBlock [REMOVE_SPACE]." ] }, "collector:Incense": { "NAME": "Incense", "FLAVOR": "An antiquated form of mental clarification.", "DESCRIPTIONS": [ - "You cannot gain #yWeak, #yVulnerable or #yFrail while you are #yWeak, #yVulnerable or #yFrail." + "You cannot gain #yWeak [REMOVE_SPACE], #yVulnerable or #yFrail while you are #yWeak [REMOVE_SPACE], #yVulnerable or #yFrail [REMOVE_SPACE]." ] }, "collector:FuelCanister": { "NAME": "Fuel Canister", "FLAVOR": "Disgusting.", "DESCRIPTIONS": [ - "At the end of your turn, #yRetain the highest-cost card in your hand." + "At the end of your turn, #yRetain the lowest-cost card in your hand." ] }, "collector:AutoCurser": { @@ -77,7 +77,7 @@ "NAME": "The Bagpipes", "FLAVOR": "This dreaded instrument is said to have driven Kublai the Great mad.", "DESCRIPTIONS": [ - "Whenever you apply #yWeak or #yVulnerable, increase the amount applied by #b1." + "Whenever you apply new #yWeak or #yVulnerable to an enemy, increase the amount applied by #b1 [REMOVE_SPACE]." ] }, "collector:BottledCollectible": { @@ -87,21 +87,23 @@ "Upon pickup, #yUpgrade a card in your Collection. Start combats with it on top of your Collected pile.", "Start combat with ", " on top of your Collected pile.", - "Select a card to bottle for " + "Select a card to bottle for ", + "The bottled card has been #rremoved from your deck, the relic no longer functions." ] }, "collector:TheContract": { "NAME": "The Contract", "FLAVOR": "Sign in blood.", "DESCRIPTIONS": [ - "Upon pickup, gain #b10 #yEssence." + "Upon pickup, gain #b", + " #yEssence [REMOVE_SPACE]." ] }, "collector:ForbiddenFruit": { "NAME": "Forbidden Fruit", "FLAVOR": "This species of fruit looks completely unfamiliar.", "DESCRIPTIONS": [ - "Upon pickup, choose and obtain one Common, Uncommon, and Rare card from all available. Then, obtain a #yNecronomicurse.", + "Upon pickup, choose and obtain one Common, Uncommon, and Rare card from all available. Then, obtain a #ySapped [REMOVE_SPACE].", "Choose a Rare card to add to your deck.", "Choose an Uncommon card to add to your deck.", "Choose a Common card to add to your deck." @@ -111,7 +113,8 @@ "NAME": "Rough Diamond", "FLAVOR": "With the mines demolished, even this tarnished stone is valuable.", "DESCRIPTIONS": [ - "Whenever you play a Rare card that cost #b2 or more, gain [E] ." + "The first time you play a #yRare card each turn, gain [E] . Upon pickup, obtain a #yRare card reward.", + "Knowledge!" ] }, "collector:BlockedChakra": { diff --git a/src/main/resources/collectorResources/localization/jpn/CardStrings.json b/src/main/resources/collectorResources/localization/jpn/CardStrings.json index 933f8ad2d..b2da5f01c 100644 --- a/src/main/resources/collectorResources/localization/jpn/CardStrings.json +++ b/src/main/resources/collectorResources/localization/jpn/CardStrings.json @@ -44,7 +44,7 @@ }, "collector:Bonfire": { "NAME": "篝火", - "DESCRIPTION": "collector:葬火 NL !B! ブロックを得る。 NL 次のターン、 collector:リザーブ 1 を得る。" + "DESCRIPTION": "collector:葬火 NL !B! ブロックを得る。 NL 次のターン、 1 collector:リザーブ を得る。" }, "collector:BrainDrain": { "NAME": "ブレインドレイン", @@ -95,8 +95,8 @@ }, "collector:DarkwoodKindling": { "NAME": "ダークウィローの薪", - "DESCRIPTION": "使用不可 NL このカードが *廃棄 された時、次のターン collector:リザーブ !M! を得る。", - "UPGRADE_DESCRIPTION": "使用不可 NL 保留 NL このカードが *廃棄 された時、次のターン collector:リザーブ !M! を得る。", + "DESCRIPTION": "使用不可 NL このカードが *廃棄 された時、次のターン !M! collector:リザーブ を得る。", + "UPGRADE_DESCRIPTION": "使用不可 NL 保留 NL このカードが *廃棄 された時、次のターン !M! collector:リザーブ を得る。", "EXTENDED_DESCRIPTION": [ "この薪は火をつけて使う必要がある。" ] @@ -114,8 +114,8 @@ "DESCRIPTION": "ターン開始時、敵の持つ collector:破滅 が25以上ある場合、あなたの山札の一番上のカードをプレイする。" }, "collector:DragonsTrove": { - "NAME": "龍の宝庫", - "DESCRIPTION": "collector:葬火 NL 収集札からカードを 2 枚引く。 NL collector:リザーブ !M! を得る。 NL 廃棄" + "NAME": "龍の秘宝", + "DESCRIPTION": "collector:葬火 NL 収集札からカードを 2 枚引く。 NL !M! collector:リザーブ を得る。 NL 廃棄" }, "collector:Ember": { "NAME": "燃え殻", @@ -126,7 +126,7 @@ }, "collector:Empower": { "NAME": "エンパワー", - "DESCRIPTION": " !M! ターンの間、ターン開始時に 筋力 X を得る。" + "DESCRIPTION": "!M! ターンの間、ターン開始時に 筋力 X を得る。" }, "collector:Extricate": { "NAME": "魂の断絶", @@ -137,7 +137,7 @@ "DESCRIPTION": "カードを *廃棄 する度に、ランダムな敵がHPを !M! 失う。" }, "collector:FiendFire": { - "NAME": "悪霊の火", + "NAME": "グリーンバースト", "DESCRIPTION": "手札を 廃棄 する。 NL 廃棄されたカードの数だけ !D! ダメージを与える。 NL 廃棄" }, "collector:Finalize": { @@ -167,7 +167,7 @@ }, "collector:FuelTheFire": { "NAME": "焔の糧", - "DESCRIPTION": "collector:葬火 NL 次のターン、 collector:リザーブ !M! を得る。", + "DESCRIPTION": "collector:葬火 NL 次のターン、 !M! collector:リザーブ を得る。", "UPGRADE_DESCRIPTION": "collector:葬火 NL 次のターン、 collector:リザーブ !M! を得て、カードを1枚引く。" }, "collector:Goodbye": { @@ -190,7 +190,7 @@ }, "collector:GreenpyreLocus": { "NAME": "緑炎の軌跡", - "DESCRIPTION": "3 枚の コレクトカード から 1 枚を選び手札に加える。 NL 更に収集札に選択されたカードのコピーを !M! 枚加える。", + "DESCRIPTION": "3 枚の コレクトカード から 1 枚を選び手札に加え、収集札にそのコピーを !M! 枚加える。", "EXTENDED_DESCRIPTION": [ "選択したカードを手札と収集札に加える" ] @@ -201,7 +201,7 @@ }, "collector:Hoard": { "NAME": "蓄える", - "DESCRIPTION": "collector:葬火 NL カードを !M! 枚引く。 NL このターン、それらを 保留 する。" + "DESCRIPTION": "collector:葬火 NL カードを !M! 枚引く。 NL このターン、それらを保留する。" }, "collector:HoardersStrike": { "NAME": "ホーダーズストライク", @@ -222,12 +222,12 @@ }, "collector:InflictAgony": { "NAME": "与えられし苦痛", - "DESCRIPTION": "!D! ダメージを与える。 NL 敵が collector:苦悶 状態でなければ、 脱力 と 弱体 2を与える。" + "DESCRIPTION": "!D! ダメージを与える。 NL 敵が collector:苦悶 状態でなければ、 脱力 と 弱体 2 を与える。" }, "collector:Invigorate": { "NAME": "閃光", - "DESCRIPTION": "collector:葬火 NL *つまづき または *目くらまし を選び手札に加える。 NL 廃棄", - "UPGRADE_DESCRIPTION": "collector:葬火 NL *つまづき+ または *目くらまし+ を選び手札に加える。 NL 廃棄", + "DESCRIPTION": "collector:葬火 NL *つまずき または *目くらまし を選び手札に加える。 NL 廃棄", + "UPGRADE_DESCRIPTION": "collector:葬火 NL *つまずき+ または *目くらまし+ を選び手札に加える。 NL 廃棄", "EXTENDED_DESCRIPTION": [ "選択したカードを手札に加える" ] @@ -267,12 +267,12 @@ }, "collector:MiniCurse": { "NAME": "微かな呪い", - "DESCRIPTION": "collector:葬火 NL 脱力 と 弱体 1 を与える。 ", - "UPGRADE_DESCRIPTION": "collector:葬火 NL 敵全体に 脱力 と 弱体 1 を与える。 " + "DESCRIPTION": "collector:葬火 NL 脱力 と 弱体 1 を与える。", + "UPGRADE_DESCRIPTION": "collector:葬火 NL 敵全体に 脱力 と 弱体 1 を与える。" }, "collector:Misdirect": { "NAME": "ミスディレクト", - "DESCRIPTION": "!B! ブロックを得る。 NL 次のターン、 collector:リザーブ 1 を得る。" + "DESCRIPTION": "!B! ブロックを得る。 NL 次のターン、 1 collector:リザーブ を得る。" }, "collector:MysteryWeaving": { "NAME": "幽玄の織", @@ -296,8 +296,8 @@ }, "collector:Pyromancy": { "NAME": "パイロマンシー", - "DESCRIPTION": "collector:葬火 NL ターン開始時、 collector:リザーブ 1 を得る。", - "UPGRADE_DESCRIPTION": "天賦 NL collector:葬火 NL ターン開始時、 collector:リザーブ 1 を得る。" + "DESCRIPTION": "collector:葬火 NL ターン開始時、 1 collector:リザーブ を得る。", + "UPGRADE_DESCRIPTION": "天賦 NL collector:葬火 NL ターン開始時、 1 collector:リザーブ を得る。" }, "collector:RagingCall": { "NAME": "レイジングコール", @@ -352,13 +352,14 @@ }, "collector:Soulforge": { "NAME": "ソウルフォージ", - "DESCRIPTION": "収集札 からカードを 1枚引く。 NL そのカードのアップグレードされたコピーを !M! 枚手札に加える。 NL 廃棄", - "UPGRADE_DESCRIPTION": "収集札 からカードを 1枚引く。 NL そのカードのアップグレードされたコピーを !M! 枚手札に加える。 NL 廃棄" + "DESCRIPTION": "収集札 からカードを 1枚引く。 NL 引いたカードのアップグレードされたコピーを !M! 枚手札に加える。 NL 廃棄", + "UPGRADE_DESCRIPTION": "収集札 からカードを 1枚引く。 NL 引いたカードのアップグレードされたコピーを !M! 枚手札に加える。 NL 廃棄" + }, "collector:Spark": { "NAME": "スパーク", - "DESCRIPTION": "collector:リザーブ 1 を得る。 NL 廃棄", - "UPGRADE_DESCRIPTION": "collector:リザーブ 1 を得る。 NL カードを 1 枚引く。 NL 廃棄" + "DESCRIPTION": "1 collector:リザーブ を得る。 NL 廃棄", + "UPGRADE_DESCRIPTION": "1 collector:リザーブ を得る。 NL カードを 1 枚引く。 NL 廃棄" }, "collector:SpiritLeech": { "NAME": "スピリットリーチ", @@ -389,7 +390,7 @@ }, "collector:ThornWhip": { "NAME": "ソーンウィップ", - "DESCRIPTION": "敵全体に !D! ダメージと !M! hermit:傷 を与える。 NL ナイフを1枚手札に加える。" + "DESCRIPTION": "敵全体に !D! ダメージ と !M! hermit:傷 を与える。 NL *ナイフ を手札に加える。" }, "collector:Torchbearer": { "NAME": "トーチベアラー", @@ -671,7 +672,7 @@ }, "collector:VagrantCard": { "NAME": "浮浪者", - "DESCRIPTION": "collector:リザーブ !M! を得る。 NL 手札に *羞恥 を加える。" + "DESCRIPTION": "!M! collector:リザーブ を得る。 NL 手札に *羞恥 を加える。" }, "collector:WomanInBlueCard": { "NAME": "青い服の女", @@ -687,7 +688,7 @@ }, "collector:ShootingStar": { "NAME": "流星", - "DESCRIPTION": "エセリアル NL 各ターン最初に アタック を collector:葬火 した時、葬火したカードのコピーを手札に加える。 NL それはプレイするまでコストが0になる。" + "DESCRIPTION": "各ターン最初に アタック を collector:葬火 した時、葬火したカードのコピーを手札に加える。 NL それはプレイするまでコストが0になる。" }, "collector:CollectorCard": { "NAME": "ウロボロス", @@ -695,6 +696,6 @@ }, "collector:Sapped": { "NAME": "消耗", - "DESCRIPTION": "collector:葬火 NL このカードはデッキから削除出来ない。 NL 廃棄" + "DESCRIPTION": "collector:葬火 NL このカードを引いた時、 [E] を失う。 NL このカードはデッキから削除出来ない。 NL 廃棄" } } \ No newline at end of file diff --git a/src/main/resources/collectorResources/localization/jpn/RelicStrings.json b/src/main/resources/collectorResources/localization/jpn/RelicStrings.json index dcb2233a4..4e2c7a770 100644 --- a/src/main/resources/collectorResources/localization/jpn/RelicStrings.json +++ b/src/main/resources/collectorResources/localization/jpn/RelicStrings.json @@ -3,7 +3,7 @@ "NAME": "エメラルドトーチ", "FLAVOR": "欲望の火が消える事は無い", "DESCRIPTIONS": [ - "戦闘開始時、 #b1 #ycollector:リザーブ を得る。" + "戦闘開始時、 #ycollector:リザーブ #b1を得る" ] }, "collector:PrismaticTorch": { @@ -11,14 +11,14 @@ "FLAVOR": "絶え間なく変化する炎は幸運の恵みを映し出す", "DESCRIPTIONS": [ " ", - " [] と置き換える。戦闘開始時、 #y燃え殻 を手札に加え、 #b1 #ycollector:リザーブ を得る。各ターンで最初に #y燃え殻 を #y廃棄 した時、 #b1 #ycollector:リザーブ を得る。" + " [] と置き換える。戦闘開始時、 #b2 枚の #y燃え殻 を手札に加える。 各ターン毎に初めて #y燃え殻 を廃棄した時、 #ycollector:リザーブ #b1を得る" ] }, "collector:HolidayCoal": { "NAME": "クランピアンコール", "FLAVOR": "「興味深いな! でもなんで特定の煙突だけなんだ?」 - ランウィッド", "DESCRIPTIONS": [ - "空になった収集札からドローしようとした時、代わりに #y幸運の燃芯 をドローする。" + "空になった収集札からドローしようとした時、代わりに #y幸運の燃芯 を手札に加える。" ] }, "collector:BagOfTricks": { @@ -33,8 +33,8 @@ "NAME": "翡翠の指輪", "FLAVOR": "翡翠は誠実さの象徴である", "DESCRIPTIONS": [ - "#ycollector:破滅 の効果で ミニオン以外の敵を倒した時、 #b", - " ソウル を得る。" + "敵は #ycollector:破滅 の効果で追加で #b", + " ダメージを受ける。" ] }, "collector:SoullitLamp": { @@ -63,7 +63,7 @@ "NAME": "燃料容器", "FLAVOR": "気分がむかむかする", "DESCRIPTIONS": [ - "ターン終了時、手札で最もコストの高いカードを #y保留 する。" + "ターン終了時、手札で最もコストの低いカードを #y保留 する。" ] }, "collector:AutoCurser": { @@ -77,7 +77,7 @@ "NAME": "バグパイプ", "FLAVOR": "この恐ろしい楽器はクビライ王を狂わせたと言われている", "DESCRIPTIONS": [ - "あなたが #y脱力 や #y弱体 を与えた時、追加で #b1 与える。" + "あなたが #y脱力 や #y弱体 を新しく与えた時、追加で #b1 与える。" ] }, "collector:BottledCollectible": { @@ -101,7 +101,7 @@ "NAME": "フォビドゥンフルーツ", "FLAVOR": "この種の果物はまったく馴染みが無い", "DESCRIPTIONS": [ - "入手時、コモン、アンコモン、レアカードを1枚ずつ選んで入手する。 NL 更にデッキに #y死霊の呪い を加える。", + "入手時、コモン、アンコモン、レアカードを1枚ずつ選んで入手する。 NL 更にデッキに #y消耗 を加える。", "レアカードを選びデッキに加える。", "アンコモンカードを選びデッキに加える。", "コモンカードを選びデッキに加える。" @@ -111,7 +111,8 @@ "NAME": "ラフダイヤモンド", "FLAVOR": "鉱山が取り壊され、この変色した石ですら価値がある。", "DESCRIPTIONS": [ - "コスト #y2 以上のレアカードをプレイする度に [E] を得る。" + "各ターン、初めて #yレアカード をプレイした時 [E] を得る。 レリック入手時に #yレアカード 報酬を得る。", + "知識!" ] }, "collector:BlockedChakra": { diff --git a/src/main/resources/collectorResources/localization/kor/CardStrings.json b/src/main/resources/collectorResources/localization/kor/CardStrings.json index c11535b1f..114c2ac02 100644 --- a/src/main/resources/collectorResources/localization/kor/CardStrings.json +++ b/src/main/resources/collectorResources/localization/kor/CardStrings.json @@ -554,7 +554,7 @@ }, "collector:MushroomCard": { "NAME": "버섯", - "DESCRIPTION": "피해를 !D! 줍니다. NL 약화 또는 손상을 !M! 부여합니다." + "DESCRIPTION": "피해를 !D! 줍니다. NL 약화 또는 취약을 !M! 부여합니다." }, "collector:MysticCard": { "NAME": "신비주의자", @@ -607,7 +607,7 @@ }, "collector:ShelledParasiteCard": { "NAME": "갑각 기생충", - "DESCRIPTION": "*판금 *갑옷을 !M! 얻습니다." + "DESCRIPTION": "expansioncontent:판금_갑옷을 !M! 얻습니다." }, "collector:ShieldGremlinCard": { "NAME": "방패 그렘린", @@ -695,6 +695,6 @@ }, "collector:Sapped": { "NAME": "쇠락화", - "DESCRIPTION": "collector:장작. NL 소멸. NL 덱에서 제거할 수 없습니다." + "DESCRIPTION": "collector:장작. NL 이 카드를 뽑으면 [E] 를 잃습니다. NL 소멸. NL 덱에서 제거할 수 없습니다." } } diff --git a/src/main/resources/collectorResources/localization/kor/KeywordStrings.json b/src/main/resources/collectorResources/localization/kor/KeywordStrings.json index 819ed3004..b2ea97ba2 100644 --- a/src/main/resources/collectorResources/localization/kor/KeywordStrings.json +++ b/src/main/resources/collectorResources/localization/kor/KeywordStrings.json @@ -16,6 +16,7 @@ "doomed", "파멸", "파멸을", + "파멸의", "파멸이" ], "DESCRIPTION": "파멸을 보유한 적의 턴 시작 시 체력을 잃습니다. 이후 적이 #y약화와 #y취약을 모두 가지고 있지 않다면 파멸을 제거합니다." diff --git a/src/main/resources/collectorResources/localization/kor/RelicStrings.json b/src/main/resources/collectorResources/localization/kor/RelicStrings.json index 4ba785801..c07c6ad03 100644 --- a/src/main/resources/collectorResources/localization/kor/RelicStrings.json +++ b/src/main/resources/collectorResources/localization/kor/RelicStrings.json @@ -3,7 +3,7 @@ "NAME": "에메랄드 횃불", "FLAVOR": "탐욕의 불길을 결코 꺼지지 않습니다.", "DESCRIPTIONS": [ - "매 전투 시작 시 #ycollector:비축을 #b1 얻습니다." + "매 전투 시작 시 #y불씨를 얻습니다. 매 전투 시 처음으로 #y불씨를 소멸시키면 #ycollector:비축을 #b1 얻습니다." ] }, "collector:PrismaticTorch": { @@ -11,7 +11,7 @@ "FLAVOR": "행운의 은총처럼 타오르는 변화무쌍한 불꽃입니다.", "DESCRIPTIONS": [ "", - "과 교체합니다.[] 전투 시작 시 #y불씨를 얻고 #ycollector:비축을 #b1 얻습니다. 매 턴 처음으로 #y불씨를 #y소멸시킬 때마다 #ycollector:비축을 #b1 얻습니다." + "과 교체합니다.[] 전투 시작 시 #y불씨를 얻고 #ycollector:비축을 #b1 얻습니다. #y불씨를 #y소멸시킬 때마다 #ycollector:비축을 #b1 얻습니다." ] }, "collector:HolidayCoal": { @@ -33,8 +33,8 @@ "NAME": "옥 반지", "FLAVOR": "옥은 순수함의 상징입니다.", "DESCRIPTIONS": [ - "#ycollector:파멸로 하수인을 제외한 적이 죽을 때마다 영혼을 #b", - " 얻습니다." + "#ycollector:파멸의 피해량이 #b", + " 증가합니다." ] }, "collector:SoullitLamp": { @@ -63,7 +63,7 @@ "NAME": "연료통", "FLAVOR": "역겹습니다.", "DESCRIPTIONS": [ - "내 턴 종료 시 손에 있는 비용이 가장 높은 카드를 #y보존합니다." + "내 턴 종료 시 손에 있는 비용이 가장 낮은 카드를 #y보존합니다." ] }, "collector:AutoCurser": { @@ -77,7 +77,7 @@ "NAME": "백파이프", "FLAVOR": "이 공포의 악기가 쿠빌라이를 미치게 만들었다고 전해집니다.", "DESCRIPTIONS": [ - "#y약화 또는 #y취약을 부여할 때마다 부여량이 #b1 증가합니다." + "적에게 #y약화 또는 #y취약을 새롭게 부여할 때마다 부여량이 #b1 증가합니다." ] }, "collector:BottledCollectible": { @@ -101,7 +101,7 @@ "NAME": "금단의 과실", "FLAVOR": "그 어디서도 보지 못한 과일입니다.", "DESCRIPTIONS": [ - "획득 시 모든 카드 중에서 일반, 특별, 희귀 카드를 1장씩 선택합니다. NL 대신 #y네크로노미콘의 #y저주 얻습니다.", + "획득 시 모든 카드 중에서 일반, 특별, 희귀 카드를 1장씩 선택합니다. NL #y쇠락화를 얻습니다.", "덱에 추가할 희귀 카드를 선택하십시오.", "덱에 추가할 특별 카드를 선택하십시오.", "덱에 추가할 일반 카드를 선택하십시오." @@ -111,7 +111,8 @@ "NAME": "비세공 다이아몬드", "FLAVOR": "폐광에선 이렇게 더럽혀진 돌도 가치있는 법입니다.", "DESCRIPTIONS": [ - "비용이 #b2 이상인 희귀 카드를 사용할 때마다 [E] 를 얻습니다" + "매 턴 처음으로 희귀 카드를 사용하면 [E] 를 얻습니다. 획득 시 #y희귀 카드 보상을 얻습니다.", + "지식이다!" ] }, "collector:BlockedChakra": { diff --git a/src/main/resources/collectorResources/localization/spa/CardStrings.json b/src/main/resources/collectorResources/localization/spa/CardStrings.json new file mode 100644 index 000000000..97048cc80 --- /dev/null +++ b/src/main/resources/collectorResources/localization/spa/CardStrings.json @@ -0,0 +1,673 @@ +{ + "collector:ActOfAggression": { + "NAME": "Acto de Agresión", + "DESCRIPTION": "Gana !B! de Bloqueo. NL Aplica !M! de Vulnerable a TODOS los enemigos." + }, + "collector:AlwaysMore": { + "NAME": "Siempre Más", + "DESCRIPTION": "collector:Pira. NL Gana !M! de Oro." + }, + "collector:AshenStrike": { + "NAME": "Golpe de Cenizas", + "DESCRIPTION": "Haz !D! de daño. NL Gana una *Brasa." + }, + "collector:Arrogance": { + "NAME": "Arrogancia", + "DESCRIPTION": "Gana !B! de Bloqueo. NL Tu próximo Ataque este turno también aplica !M! de collector:Condena." + }, + "collector:AshesAndDust": { + "NAME": "Cenizas y Polvo", + "DESCRIPTION": "Haz !D! de daño a TODOS los enemigos X veces. NL Si X es 5 o más, golpea dos veces adicionales." + }, + "collector:BindingCall": { + "NAME": "Llamado de Atadura", + "DESCRIPTION": "Gana !M! de expansioncontent:PV_Temp. NL collector:CabezaDeAntorcha obtiene \"Aplica !clm2! de collector:Condena a un enemigo aleatorio.\"" + }, + "collector:Billow": { + "NAME": "Humo Ondulante", + "DESCRIPTION": "Gana !B! de Bloqueo. NL En el próximo turno, añade *Rugido a tu mano." + }, + "collector:Bellow": { + "NAME": "Rugido", + "DESCRIPTION": "Etérea. NL Aplica collector:Condena igual al Bloqueo no utilizado del turno anterior. NL Agota.", + "EXTENDED_DESCRIPTION": [" NL ( Aplica !M! de collector:Condena )"] + }, + "collector:BlackBindings": { + "NAME": "Ataduras Negras", + "DESCRIPTION": "Aplica !M! de Débil, aplica !clm2! de collector:Condena por cada desventaja distinto en el enemigo." + }, + "collector:Blightning": { + "NAME": "Relámpago Marchito", + "DESCRIPTION": "Aplica !M! de collector:Condena. NL Haz !D! de daño. NL Roba 1 carta de tu pila Coleccionada. NL Agota." + }, + "collector:Bonfire": { + "NAME": "Hoguera", + "DESCRIPTION": "collector:Pira. NL Gana !B! de Bloqueo. NL En el próximo turno, gana 1 de collector:Reserva." + }, + "collector:BrainDrain": { + "NAME": "Drenaje Mental", + "DESCRIPTION": "El enemigo pierde !M! PV. NL Añade su carta Coleccionada a tu mano. NL Agota.", + "UPGRADE_DESCRIPTION": "El enemigo pierde !M! PV. NL Añade su carta Coleccionada a tu mano y Mejórala. NL Agota." + }, + "collector:BramblesparKindling": { + "NAME": "Astillas de Zarza Ardiente", + "DESCRIPTION": "Injugable. NL Al *Agotarse, añade un *Golpe *Ardiente a tu mano.", + "UPGRADE_DESCRIPTION": "Injugable. NL Al *Agotarse, añade un *Golpe *Ardiente+ a tu mano.", + "EXTENDED_DESCRIPTION": ["Debo encender esta astilla para usarla."] + }, + "collector:BurningStrike": { + "NAME": "Golpe Ardiente", + "DESCRIPTION": "Haz !D! de daño. NL Roba una carta.", + "UPGRADE_DESCRIPTION": "Haz !D! de daño. NL Roba !M! cartas." + }, + "collector:CantTouchThis": { + "NAME": "Intocable", + "DESCRIPTION": "Gana !M! de Destreza. NL Cuando bloquees completamente un ataque, aplica !clm2! de collector:Condena al atacante." + }, + "collector:CoffinNail": { + "NAME": "Clavo de Ataúd", + "DESCRIPTION": "Haz !D! de daño. NL Al *Agotarse, vuelve a tu mano el próximo turno con !M! de daño adicional." + }, + "collector:Condemn": { + "NAME": "Condenar", + "DESCRIPTION": "Aplica !M! de Vulnerable. NL Aplica !clm2! de collector:Condena." + }, + "collector:CursedWail": { + "NAME": "Lamento Maldito", + "DESCRIPTION": "TODOS los enemigos pierden !M! de Fuerza este turno. NL Los enemigos collector:Afligidos pierden !clm2! de Fuerza. NL Agota." + }, + "collector:DarkApotheosis": { + "NAME": "Oscura Apoteosis", + "DESCRIPTION": "Mejora la pila Coleccionada por el resto del combate. NL Agota." + }, + "collector:DarkLordForm": { + "NAME": "Forma del Señor Oscuro", + "DESCRIPTION": "Al comienzo de tu turno, juega *¡Eres *Mío! contra un enemigo aleatorio.", + "UPGRADE_DESCRIPTION": "Al comienzo de tu turno, juega *¡Eres *Mío!+ contra un enemigo aleatorio." + }, + "collector:Darkstorm": { + "NAME": "Tormenta Oscura", + "DESCRIPTION": "Obtén un *Relámpago *Marchito. NL Baraja !M! más en tu pila de robo. NL Agota." + }, + "collector:DarkwoodKindling": { + "NAME": "Leña de Sauce Oscuro", + "DESCRIPTION": "Injugable. NL Al *Agotarse, gana !M! de collector:Reserva en el próximo turno.", + "UPGRADE_DESCRIPTION": "Injugable. NL Retiene. NL Al *Agotarse, gana !M! de collector:Reserva en el próximo turno.", + "EXTENDED_DESCRIPTION": ["Debo encender esta leña para usarla."] + }, + "collector:Defend": { + "NAME": "Defensa", + "DESCRIPTION": "Gana !B! de Bloqueo." + }, + "collector:DoubleTrouble": { + "NAME": "Problemas Dobles", + "DESCRIPTION": "Gana !B! de Bloqueo. NL La próxima carta Coleccionada que juegues este turno se juega dos veces." + }, + "collector:DoMayhem": { + "NAME": "Causar Caos", + "DESCRIPTION": "Al comienzo de tu turno, si algún enemigo tiene 25 o más de collector:Condena, juega la carta superior de tu pila de robo." + }, + "collector:DragonsTrove": { + "NAME": "Tesoro del Dragón", + "DESCRIPTION": "collector:Pira. NL Roba 2 cartas de tu pila Coleccionada. NL Gana !M! de collector:Reserva. NL Agota." + }, + "collector:Ember": { + "NAME": "Brasa", + "DESCRIPTION": "Retiene. NL Agota. NL Al *Agotarse, gana !M! de Fuerza.", + "EXTENDED_DESCRIPTION": ["Estas brasas deben encenderse, no jugarse."] + }, + "collector:Empower": { + "NAME": "Potenciar", + "DESCRIPTION": "Gana X de Fuerza al comienzo de tus próximos !M! turnos." + }, + "collector:Extricate": { + "NAME": "Arrancar el Alma", + "DESCRIPTION": "Agota todas las cartas que no sean Ataques en tu mano. NL Haz !D! de daño." + }, + "collector:FeelMyPain": { + "NAME": "Siente Mi Dolor", + "DESCRIPTION": "Siempre que *Agotes una carta, un enemigo aleatorio pierde !M! PV." + }, + "collector:FiendFire": { + "NAME": "Fuego Demoníaco", + "DESCRIPTION": "Agota tu mano. NL Haz !D! de daño por cada carta *Agotada. NL Agota." + }, + "collector:Finalize": { + "NAME": "Finalizar", + "DESCRIPTION": "Cuando el enemigo muera, cura !clm2! PV. NL Aplica !M! de collector:Condena. NL Agota." + }, + "collector:FingerOfDeath": { + "NAME": "Dedo de la Muerte", + "DESCRIPTION": "Solo se puede pagar con collector:Reserva. NL Aplica !M! de collector:Condena.", + "UPGRADE_DESCRIPTION": "Solo se puede pagar con collector:Reserva. NL Aplica !M! de collector:Condena a TODOS los enemigos." + }, + "collector:FlameLash": { + "NAME": "Latigazo de Llamas", + "DESCRIPTION": "collector:Pira. NL Haz !D! de daño, suma el daño de la carta *Agotada.", + "UPGRADE_DESCRIPTION": "collector:Pira. NL Haz !D! de daño, suma el daño de la carta *Agotada más !M! a este." + }, + "collector:FleetingEmbers": { + "NAME": "Brasas Fugaces", + "DESCRIPTION": "collector:Pira. NL Gana !B! de Bloqueo. NL Añade !M! *Brasas a tu mano." + }, + "collector:Forgery": { + "NAME": "Falsificación", + "DESCRIPTION": "Haz !D! de daño. NL Elige 1 de !M! cartas de tu pila Coleccionada para obtener una copia.", + "EXTENDED_DESCRIPTION": ["para añadirla a tu mano."] + }, + "collector:FuelTheFire": { + "NAME": "Alimenta el Fuego", + "DESCRIPTION": "collector:Pira. NL En el próximo turno, gana !M! de collector:Reserva.", + "UPGRADE_DESCRIPTION": "collector:Pira. NL En el próximo turno, gana !M! de collector:Reserva y roba una carta." + }, + "collector:Goodbye": { + "NAME": "Despedida", + "DESCRIPTION": "Duplica la collector:Condena del enemigo. NL Agota.", + "UPGRADE_DESCRIPTION": "Triplica la collector:Condena del enemigo. NL Agota." + }, + "collector:GourmandsGaze": { + "NAME": "Mirada del Glotón", + "DESCRIPTION": "Haz !D! de daño. NL Si jugaste una carta Coleccionada este turno, gana !B! de Bloqueo." + }, + "collector:GreaterHurting": { + "NAME": "Dolor Mayor", + "DESCRIPTION": "Etérea. NL Haz !D! de daño. NL Si esta carta se *Agota, obtén un *Dolor *Máximo.", + "UPGRADE_DESCRIPTION": "Etérea. NL Haz !D! de daño. NL Si esta carta se *Agota, obtén un *Dolor *Máximo+." + }, + "collector:GreatestHurting": { + "NAME": "Dolor Supremo", + "DESCRIPTION": "Etérea. NL Haz !D! de daño. NL Si esta carta se *Agota, obtén una *Brasa." + }, + "collector:GreenpyreLocus": { + "NAME": "Centro de la Pira Verde", + "DESCRIPTION": "Elige 1 de 3 cartas Coleccionadas para añadir a tu mano. Añade !M! copias a tu pila Coleccionada.", + "EXTENDED_DESCRIPTION": ["Elige una carta para añadir a tu mano."] + }, + "collector:Heatwave": { + "NAME": "Ola de Calor", + "DESCRIPTION": "Haz !D! de daño a TODOS los enemigos. NL Gana una *Brasa." + }, + "collector:Hoard": { + "NAME": "Acaparar", + "DESCRIPTION": "collector:Pira. NL Roba !M! cartas. NL Retenlas." + }, + "collector:HoardersStrike": { + "NAME": "Golpe Acaparador", + "DESCRIPTION": "Haz !D! de daño. NL Juega la carta superior de tu pila Coleccionada." + }, + "collector:Hurting": { + "NAME": "Dolor", + "DESCRIPTION": "Etérea. NL Haz !D! de daño. NL Si esta carta se *Agota, obtén un *Dolor *Mayor.", + "UPGRADE_DESCRIPTION": "Etérea. NL Haz !D! de daño. NL Si esta carta se *Agota, obtén un *Dolor *Mayor+." + }, + "collector:IllTakeThat": { + "NAME": "Eso Es Mío", + "DESCRIPTION": "Roba hasta !M! del Bloqueo del enemigo. NL Haz !D! de daño." + }, + "collector:InevitableDemise": { + "NAME": "Destino Inevitable", + "DESCRIPTION": "Haz !D! de daño. NL Previene que collector:Condena sea eliminada del objetivo una vez." + }, + "collector:InflictAgony": { + "NAME": "Infligir Agonía", + "DESCRIPTION": "Haz !D! de daño. NL Si el enemigo no está collector:Afligido, aplica 2 de Débil y Vulnerable." + }, + "collector:Invigorate": { + "NAME": "Destello", + "DESCRIPTION": "collector:Pira. NL Elige entre *Zancadilla o *Cegar para obtenerla. NL Agota.", + "UPGRADE_DESCRIPTION": "collector:Pira. NL Elige entre *Zancadilla+ o *Cegar+ para obtenerla. NL Agota.", + "EXTENDED_DESCRIPTION": ["Elige una carta para añadir a tu mano."] + }, + "collector:IronbarkKindling": { + "NAME": "Astilla de Corteza de Hierro", + "DESCRIPTION": "Injugable. NL Al *Agotarse, gana !B! de Bloqueo.", + "UPGRADE_DESCRIPTION": "Injugable. Retiene. NL Al *Agotarse, gana !B! de Bloqueo.", + "EXTENDED_DESCRIPTION": ["Debo encender esta astilla para usarla."] + }, + "collector:ItMattersNot": { + "NAME": "No Importa", + "DESCRIPTION": "Gana !B! de Bloqueo. NL Aumenta en !M! lo Débil y Vulnerable de los enemigos." + }, + "collector:JadedJabs": { + "NAME": "Golpes Apáticos", + "DESCRIPTION": "collector:Pira. NL Haz !D! de daño. NL Gana *Navajas igual al costo de la carta *Agotada !M!." + }, + "collector:Karma": { + "NAME": "Karma", + "DESCRIPTION": "Al final de tu turno, gana !M! de Bloqueo. NL Si un enemigo está collector:Afligido, gana !clm2! más.", + "UPGRADE_DESCRIPTION": "Innata. NL Al final de tu turno, gana !M! de Bloqueo. NL Si un enemigo está collector:Afligido, gana !clm2! más." + }, + "collector:LanternFlare": { + "NAME": "Destello de Linterna", + "DESCRIPTION": "collector:Pira. NL Aplica !M! de collector:Condena. NL El enemigo gana !clm2! más al final de cada uno de sus turnos." + }, + "collector:LuckyWick": { + "NAME": "Mecha Afortunada", + "DESCRIPTION": "Gana !B! de Bloqueo. NL Haz !D! de daño." + }, + "collector:MastersCall": { + "NAME": "Llamado del Amo", + "DESCRIPTION": "¡No utilizada!" + }, + "collector:MiniCurse": { + "NAME": "Mini-Maldición", + "DESCRIPTION": "collector:Pira. NL Aplica 1 de Débil y Vulnerable.", + "UPGRADE_DESCRIPTION": "collector:Pira. NL Aplica 1 de Débil y Vulnerable a TODOS los enemigos." + }, + "collector:Misdirect": { + "NAME": "Desviar", + "DESCRIPTION": "Gana !B! de Bloqueo. NL En el próximo turno, gana 1 de collector:Reserva." + }, + "collector:MysteryWeaving": { + "NAME": "Tejido Misterioso", + "DESCRIPTION": "Gana !B! de Bloqueo. NL Otorga 2 menos de Bloqueo por cada otra carta en tu mano." + }, + "collector:OakbrimKindling": { + "NAME": "Astilla de Roble Resinoso", + "DESCRIPTION": "Injugable. NL Al *Agotarse, roba !M! cartas.", + "EXTENDED_DESCRIPTION": ["Debo encender esta astilla para usarla."] + }, + "collector:Omen": { + "NAME": "Augurio", + "DESCRIPTION": "Cada vez que juegues una carta Coleccionada, gana 1 de Fuerza.", + "UPGRADE_DESCRIPTION": "Innata. NL Cada vez que juegues una carta Coleccionada, gana 1 de Fuerza." + }, + "collector:ProtectingCall": { + "NAME": "Llamado Protector", + "DESCRIPTION": "Gana !M! de expansioncontent:PV_Temp. NL collector:CabezaDeAntorcha gana \"Gana !clm2! de Bloqueo.\"" + }, + "collector:Pyromancy": { + "NAME": "Piromancia", + "DESCRIPTION": "collector:Pira. NL Al comienzo de tu turno, gana 1 de collector:Reserva.", + "UPGRADE_DESCRIPTION": "Innata. collector:Pira. NL Al comienzo de tu turno, gana 1 de collector:Reserva." + }, + "collector:RagingCall": { + "NAME": "Llamado Furioso", + "DESCRIPTION": "Gana !M! de expansioncontent:PV_Temp. NL collector:CabezaDeAntorcha gana \"Haz !clm2! de daño a TODOS los enemigos.\"" + }, + "collector:ReceiveTribute": { + "NAME": "Recibir Tributo", + "DESCRIPTION": "collector:Pira. NL Elige 1 de !M! cartas de Jefe para obtener. Gana Retiene. NL Agota.", + "EXTENDED_DESCRIPTION": ["Elige una carta para añadirla a tu mano."] + }, + "collector:Roast": { + "NAME": "Rostizar", + "DESCRIPTION": "collector:Pira. NL Haz !D! de daño." + }, + "collector:RotwoodKindling": { + "NAME": "Astilla de Madera Podrida", + "DESCRIPTION": "Injugable. NL Al *Agotarse, aplica !M! de Vulnerable y !clm2! de collector:Condena a TODOS los enemigos.", + "EXTENDED_DESCRIPTION": ["Debo encender esta astilla para usarla."] + }, + "collector:SapStrength": { + "NAME": "Marca Mortal", + "DESCRIPTION": "Haz !D! de daño. NL En el próximo turno, el enemigo pierde PV igual al doble del daño no bloqueado." + }, + "collector:ScorchingRay": { + "NAME": "Rayo Abrasador", + "DESCRIPTION": "Haz !D! de daño a un enemigo aleatorio X veces." + }, + "collector:SeedOfDoubt": { + "NAME": "Semilla de Duda", + "DESCRIPTION": "Aplica !M! de collector:Condena. NL Cuando se *Agote una carta mientras esté en tu mano, aumenta su *Condena en !clm2!." + }, + "collector:ShadowDaggers": { + "NAME": "Dagas Sombrías", + "DESCRIPTION": "Haz !D! de daño por cada carta Coleccionada jugada en este combate. NL Agota.", + "EXTENDED_DESCRIPTION": [" NL (Golpea ", " vez.)", " veces.)"] + }, + "collector:SomberShield": { + "NAME": "Escudo Sombrío", + "DESCRIPTION": "collector:Pira. NL Gana !B! de Bloqueo. NL En el próximo turno, gana una copia de la carta *Agotada." + }, + "collector:SoulSnare": { + "NAME": "Trampa de Almas", + "DESCRIPTION": "Aplica !M! de collector:Condena. NL Agota." + }, + "collector:Soulforge": { + "NAME": "Forja de Almas", + "DESCRIPTION": "Roba una carta de tu pila Coleccionada. Gana !M! copia Mejorada de ella. NL Agota.", + "UPGRADE_DESCRIPTION": "Roba una carta de tu pila Coleccionada. Gana !M! copia Mejorada de ella. NL Agota." + }, + "collector:Spark": { + "NAME": "Chispa", + "DESCRIPTION": "Gana 1 de collector:Reserva. NL Agota.", + "UPGRADE_DESCRIPTION": "Gana 1 de collector:Reserva. NL Roba 1 carta. NL Agota." + }, + "collector:SpiritLeech": { + "NAME": "Sanguijuela Espiritual", + "DESCRIPTION": "Haz !D! de daño. NL Si el enemigo está collector:Afligido, gana !B! de Bloqueo." + }, + "collector:StashAway": { + "NAME": "Guardar Para Después", + "DESCRIPTION": "Gana !B! de Bloqueo X veces. NL En el próximo turno, gana X de collector:Reserva. NL Agota." + }, + "collector:Strike": { + "NAME": "Golpe", + "DESCRIPTION": "Haz !D! de daño." + }, + "collector:SuckerPunch": { + "NAME": "Golpe Bajo", + "DESCRIPTION": "Haz !D! de daño. NL Aplica !M! de Débil." + }, + "collector:Suffering": { + "NAME": "Sufrimiento", + "DESCRIPTION": "Siempre que apliques *Débil o *Vulnerable a un enemigo, también aplica !M! de collector:Condena." + }, + "collector:SunbloomKindling": { + "NAME": "Astilla de Flor Solar", + "DESCRIPTION": "Injugable. NL Al *Agotarse, gana !M! de Fuerza y añade 2 *Brasas a tu mano.", + "EXTENDED_DESCRIPTION": ["Debo encender esta astilla para usarla."] + }, + "collector:ThornWhip": { + "NAME": "Látigo de Espinas", + "DESCRIPTION": "Haz !D! de daño y aplica !M! de hermit:Contusión a TODOS los enemigos. NL Gana una *Navaja." + }, + "collector:Torchbearer": { + "NAME": "Portador de la Llama", + "DESCRIPTION": "Gana !M! de expansioncontent:PV_Temp. NL Agota.", + "UPGRADE_DESCRIPTION": "Si tienes expansioncontent:PV_Temp, Agota. NL Gana !M! de expansioncontent:PV_Temp." + }, + "collector:WhirlingFlame": { + "NAME": "Llama Giratoria", + "DESCRIPTION": "Haz !D! de daño a TODOS los enemigos. NL Coloca una carta de tu pila de descarte en la parte superior de tu pila de robo." + }, + "collector:VoidArmor": { + "NAME": "Armadura del Vacío", + "DESCRIPTION": "TODOS ganan !B! de Bloqueo y 1 de bronze:desenfoque." + }, + "collector:Wildfire": { + "NAME": "Fuego Salvaje", + "DESCRIPTION": "Haz !D! de daño por cada desventaja distinto en el enemigo." + }, + "collector:YouAreMine": { + "NAME": "¡Eres Mío!", + "DESCRIPTION": "Aplica !M! de Débil. NL Aplica !M! de Vulnerable. Aplica !clm2! de collector:Condena." + }, + "collector:Whomp": { + "NAME": "Sopapo", + "DESCRIPTION": "Haz !D! de daño. NL Gana !M! de expansioncontent:PV_Temp. NL Agota." + }, + "collector:AcidSlimeCard": { + "NAME": "Babosa Ácida", + "DESCRIPTION": "Añade !M! carta aleatoria de coste 0 a tu mano.", + "UPGRADE_DESCRIPTION": "Añade !M! cartas aleatorias de coste 0 a tu mano." + }, + "collector:AugmenterCard": { + "NAME": "Aumentador", + "DESCRIPTION": "Pierde 3 PV. NL Gana !M! de Fuerza." + }, + "collector:BearCard": { + "NAME": "Oso", + "DESCRIPTION": "Gana !B! de Bloqueo. NL Elimina el Bloqueo del enemigo. NL Haz !D! de daño." + }, + "collector:BlueSlaverCard": { + "NAME": "Esclavista Azul", + "DESCRIPTION": "Haz !D! de daño. NL Aplica 1 de Débil. NL Duplica la Débil del enemigo." + }, + "collector:BonfireSpiritsCard": { + "NAME": "Espíritus de la Hoguera", + "DESCRIPTION": "collector:Pira. NL Cura !M! PV. NL Si la carta *Agotada era Rara, aumenta tus PV máximos en 1." + }, + "collector:BookOfStabbingCard": { + "NAME": "Libro de las Puñaladas", + "DESCRIPTION": "Siempre que inflijas daño de Ataque no bloqueado, aplica !M! de collector:Condena." + }, + "collector:BronzeOrbCard": { + "NAME": "Orbe de Bronce", + "DESCRIPTION": "Gana !B! de Bloqueo. NL Haz !D! de daño. NL La carta superior de tu pila de robo cuesta 0 hasta ser jugada." + }, + "collector:ByrdCard": { + "NAME": "Jáparo", + "DESCRIPTION": "Haz !D! de daño 5 veces." + }, + "collector:CenturionCard": { + "NAME": "Centurión", + "DESCRIPTION": "Gana !B! de Bloqueo. NL Gana !M! de Destreza." + }, + "collector:ChosenCard": { + "NAME": "Elegido", + "DESCRIPTION": "Aplica !M! de Débil. NL Si el enemigo no piensa atacar, aplica !clm2! de Vulnerable." + }, + "collector:ClericCard": { + "NAME": "Clérigo", + "DESCRIPTION": "collector:Pira. NL Gana !M! de expansioncontent:PV_Temp." + }, + "collector:CultistCard": { + "NAME": "Cultista", + "DESCRIPTION": "collector:Pira. NL Gana 1 de Fuerza al inicio de tus siguientes 3 turnos." + }, + "collector:DaggerCard": { + "NAME": "Dagger", + "DESCRIPTION": "Pierde !M! de HP. NL Haz !D! de daño." + }, + "collector:DarklingsCard": { + "NAME": "Prole Oscura", + "DESCRIPTION": "collector:Pira. NL Haz !D! de daño. expansioncontent:Exhuma una carta Coleccionada.", + "EXTENDED_DESCRIPTION": [ + "para crear 2 copias de ella." + ] + }, + "collector:DesignerInSpireCard": { + "NAME": "Diseñador Inspirado", + "DESCRIPTION": "Gana !M! expansioncontent:PV_Temp. NL collector:CabezaDeAntorcha gana \"Roba 1 carta.\"" + }, + "collector:FinalBossCard": { + "NAME": "Fin del Juego", + "DESCRIPTION": "Elimina el efecto de Invencible del enemigo y lo Aturde. NL Agota." + }, + "collector:FaceTraderCard": { + "NAME": "Vendedor de Rostros", + "DESCRIPTION": "Agrega !M! cartas aleatorias de cualquier color a tu mano. NL Se vuelven Etéreas." + }, + "collector:FatGremlinCard": { + "NAME": "Gremlin Obeso", + "DESCRIPTION": "Haz !D! de daño. NL Aplica !M! de Débil." + }, + "collector:FungiBeastCard": { + "NAME": "Bestia Hongo", + "DESCRIPTION": "Aplica !M! de Vulnerable. NL Aplica 1 de Vulnerable a TODOS los enemigos." + }, + "collector:GiantHeadCardStageOne": { + "NAME": "Tic", + "DESCRIPTION": "En el próximo turno, gana un *Tac." + }, + "collector:GiantHeadCardStageTwo": { + "NAME": "Tac", + "DESCRIPTION": "En el próximo turno, gana un *Aplastacabezas." + }, + "collector:GiantHeadCardStageThree": { + "NAME": "Aplastacabezas", + "DESCRIPTION": "Haz !D! de daño a TODOS los enemigos." + }, + "collector:GremlinLeaderCard": { + "NAME": "Gremlin Líder", + "DESCRIPTION": "Agrega !M! Gremlins Coleccionables aleatorios a tu mano." + }, + "collector:GremlinNobCard": { + "NAME": "Gremlin Nob", + "DESCRIPTION": "Cada vez que juegas una Habilidad, gana !M! de Vigor." + }, + "collector:GremlinWizardCard": { + "NAME": "Gremlin Mago", + "DESCRIPTION": "En el siguiente turno, NL gana !M! de Vigor y 1 de collector:Reserva." + }, + "collector:JawWormCard": { + "NAME": "Gusano Dentudo", + "DESCRIPTION": "Gana !B! de Bloqueo. NL Gana !M! de Fuerza." + }, + "collector:JousterCard": { + "NAME": "Justador", + "DESCRIPTION": "Haz !D! de daño. NL Si solo hay un enemigo, gana !B! de Bloqueo." + }, + "collector:LagavulinCard": { + "NAME": "Lagavulin", + "DESCRIPTION": "TODOS los enemigos pierden !M! de Fuerza." + }, + "collector:LivingWallCard": { + "NAME": "Muro Viviente", + "DESCRIPTION": "collector:Pira. NL Gana una carta aleatoria Mejorada. NL Cuesta 0 hasta ser jugada." + }, + "collector:LouseCard": { + "NAME": "Piojo", + "DESCRIPTION": "Gana 1 de bronze:desenfoque. NL La próxima vez que recibas daño de ataque sin bloqueo, gana !B! de Bloqueo." + }, + "collector:MadGremlinCard": { + "NAME": "Gremlin Guerrero", + "DESCRIPTION": "Gana !M! de Fuerza Temporal." + }, + "collector:MawCard": { + "NAME": "Las Fauces", + "DESCRIPTION": "Haz !D! de daño." + }, + "collector:MerchantCard": { + "NAME": "Comerciante", + "DESCRIPTION": "Agrega !M! cartas Incoloras aleatorias a tu mano. NL Cuestan 0 este turno." + }, + "collector:MushroomCard": { + "NAME": "Hongo", + "DESCRIPTION": "Haz !D! de daño. NL Aplica !M! de Débil o Vulnerable al azar." + }, + "collector:MysticCard": { + "NAME": "Místico", + "DESCRIPTION": "Gana !M! expansioncontent:PV_Temp." + }, + "collector:NemesisCard": { + "NAME": "Némesis", + "DESCRIPTION": "Gana 1 de Intangible." + }, + "collector:NlothCard": { + "NAME": "N'Loth", + "DESCRIPTION": "collector:Pira. NL Agrega una carta Rara aleatoria a tu mano. NL Cuesta 1 menos.", + "UPGRADE_DESCRIPTION": "collector:Pira. NL Agrega una carta Rara aleatoria a tu mano. NL Cuesta 0." + }, + "collector:OrbWalkerCard": { + "NAME": "Orbe Andante", + "DESCRIPTION": "Haz !D! de daño. NL Agrega !M! *Brazas a tu mano." + }, + "collector:PointyCard": { + "NAME": "Puntiagudo", + "DESCRIPTION": "Haz !D! de daño dos veces. NL Roba 1 carta." + }, + "collector:RanwidCard": { + "NAME": "Ranwid", + "DESCRIPTION": "Gana una recompensa adicional de Poción y Carta al final del combate." + }, + "collector:RedSlaverCard": { + "NAME": "Esclavista Rojo", + "DESCRIPTION": "El enemigo pierde !M! de Fuerza este turno." + }, + "collector:ReptomancerCard": { + "NAME": "Vibora Vidente", + "DESCRIPTION": "Gana !M! expansioncontent:PV_Temp. NL collector:CabezaDeAntorcha gana \"Aplica !clm2! de Veneno a un enemigo aleatorio.\"" + }, + "collector:RepulsorCard": { + "NAME": "Repulsor", + "DESCRIPTION": "collector:Pira. NL Roba !M! cartas." + }, + "collector:RomeoCard": { + "NAME": "Romeo", + "DESCRIPTION": "Tu próximo Ataque cuesta 0 y hace !M! de daño adicional." + }, + "collector:ScrapOozeCard": { + "NAME": "Babosa de Chatarra", + "DESCRIPTION": "collector:Pira. NL Pierde 3 de HP. NL Agrega !M! Ataques aleatorios a tu mano. NL Cuestan 0 este turno." + }, + "collector:SentryCard": { + "NAME": "Centinela", + "DESCRIPTION": "Haz !D! de daño. NL Aplica !M! de Débil. NL Repite si hay un *Centinela en tu pila de agotadas." + }, + "collector:ShelledParasiteCard": { + "NAME": "Parásito con Caparazón", + "DESCRIPTION": "Gana !M! expansioncontent:placas" + }, + "collector:ShieldGremlinCard": { + "NAME": "Gremlin Reservado", + "DESCRIPTION": "Gana !B! de Bloqueo." + }, + "collector:SnakePlantCard": { + "NAME": "Lengua de Tigre", + "DESCRIPTION": "Haz !D! de daño 3 veces." + }, + "collector:SneakyGremlinCard": { + "NAME": "Gremlin Ladrón", + "DESCRIPTION": "Haz !D! de daño. NL Roba 1 carta." + }, + "collector:SneckoCard": { + "NAME": "Serpentija", + "DESCRIPTION": "Roba !M! cartas. NL sneckomod:Confunde tu mano." + }, + "collector:SphericGuardianCard": { + "NAME": "Guardián Esférico", + "DESCRIPTION": "Gana !M! expansioncontent:desenfoque." + }, + "collector:SpikerCard": { + "NAME": "Punzante", + "DESCRIPTION": "Gana !M! de Espinas." + }, + "collector:SpikeSlimeCard": { + "NAME": "Babosa Puntiaguda", + "DESCRIPTION": "Gana !B! de Bloqueo. NL Cada vez que seas atacado este turno, hace !M! de daño de regreso." + }, + "collector:SpireGrowthCard": { + "NAME": "Crecimiento de la Aguja", + "DESCRIPTION": "El enemigo recibe !M! de daño al final de cada uno de sus turnos." + }, + "collector:SpireShieldCard": { + "NAME": "Escudo de la Aguja", + "DESCRIPTION": "Gana !M! de Destreza." + }, + "collector:SpireSpearCard": { + "NAME": "Lanza de la Aguja", + "DESCRIPTION": "Gana !M! de Fuerza." + }, + "collector:SsserpentCard": { + "NAME": "Ssserpiente", + "DESCRIPTION": "Haz !D! de daño. NL Agrega una *Duda a tu mano." + }, + "collector:TaskmasterCard": { + "NAME": "Capataz", + "DESCRIPTION": "Aplica !clm2! collector:Condena. NL Haz !D! de daño. NL Gana !M! de Fuerza." + }, + "collector:ThievesCard": { + "NAME": "Ladrones", + "DESCRIPTION": "Recibe !M! menos de daño de ataques este turno." + }, + "collector:TorchHeadCard": { + "NAME": "Cabeza De Antorcha", + "DESCRIPTION": "Agrega un Llamado de Cabeza de Antorcha aleatorio a tu mano. NL Cuesta 0 este turno." + }, + "collector:TransientCard": { + "NAME": "Transeúnte", + "DESCRIPTION": "Gana !M! de Fuerza. NL Muere en 6 turnos." + }, + "collector:VagrantCard": { + "NAME": "Vagabundo", + "DESCRIPTION": "Gana !M! de collector:Reserva. NL Agrega una *Vergüenza a tu mano." + }, + "collector:WomanInBlueCard": { + "NAME": "Mujer de Azul", + "DESCRIPTION": "Gana una Poción aleatoria. NL Pierdes TODAS tus Pociones al final del combate." + }, + "collector:WrithingMassCard": { + "NAME": "Masa Inquieta", + "DESCRIPTION": "Adivina !M!. NL Juega la carta superior de tu mazo de robo." + }, + "collector:DefaultCollectibleCard": { + "NAME": "Cáscara Sin Alma", + "DESCRIPTION": "¡Este enemigo aún no tiene Coleccionable! NL Gana !M! de Fuerza y Destreza." + }, + "collector:ShootingStar": { + "NAME": "Estrella Fugaz", + "DESCRIPTION": "La primera vez que un Ataque arda en la collector:Pira cada turno, gana una copia de este. NL Cuesta 0 hasta ser jugado." + }, + "collector:CollectorCard": { + "NAME": "Ouroboros", + "DESCRIPTION": "collector:Pira. NL Aplica !M! de Débil. NL Aplica !M! de Vulnerable. NL Gana !clm2! de expansioncontent:PV_Temp." + }, + "collector:Sapped": { + "NAME": "Agotado", + "DESCRIPTION": "collector:Pira. NL Al robarla, pierde [E]. NL Agota. NL No puede ser removida de tu mazo." + } +} + diff --git a/src/main/resources/collectorResources/localization/spa/CharacterStrings.json b/src/main/resources/collectorResources/localization/spa/CharacterStrings.json new file mode 100644 index 000000000..9538c8336 --- /dev/null +++ b/src/main/resources/collectorResources/localization/spa/CharacterStrings.json @@ -0,0 +1,13 @@ +{ + "collector:theCollector": { + "NAMES": [ + "El Coleccionista", + "el Coleccionista" + ], + "TEXT": [ + "El infame Hechicero de la Ciudad. NL Reclama tanto almas como baratijas.", + "NL Tu bastón brilla con la llama verde de la pira...", + "Al avanzar por una calle oscura, te topas con varias figuras encapuchadas en medio de un ritual oscuro. Al acercarte, se giran hacia ti al unísono con inquietante sincronía. La más alta muestra colmillos y extiende una larga mano pálida hacia ti. NL ~\"Únete~ ~a~ ~nosotros,~ ~espectral,~ ~y~ ~siente~ ~el~ ~calor~ ~de~ ~la~ ~Aguja.\"~" + ] + } +} diff --git a/src/main/resources/collectorResources/localization/spa/EventStrings.json b/src/main/resources/collectorResources/localization/spa/EventStrings.json new file mode 100644 index 000000000..0e0dcd235 --- /dev/null +++ b/src/main/resources/collectorResources/localization/spa/EventStrings.json @@ -0,0 +1,3 @@ +{ + +} \ No newline at end of file diff --git a/src/main/resources/collectorResources/localization/spa/KeywordStrings.json b/src/main/resources/collectorResources/localization/spa/KeywordStrings.json new file mode 100644 index 000000000..7a0333da8 --- /dev/null +++ b/src/main/resources/collectorResources/localization/spa/KeywordStrings.json @@ -0,0 +1,55 @@ +[ + { + "PROPER_NAME": "Afligido", + "NAMES": [ + "afligido", + "afligidos", + "afflicted" + ], + "DESCRIPTION": "Las criaturas están Afligidas cuando tienen tanto #yVulnerable como #yDébil." + }, + { + "PROPER_NAME": "Condena", + "NAMES": [ + "condena", + "condenado", + "doom", + "doomed" + ], + "DESCRIPTION": "Las criaturas Condenadas pierden PV al comienzo de su turno, la Condena se elimina #bsalvo que la criatura esté #yAfligida (tenga tanto #yDébil como #yVulnerable [REMOVE_SPACE])." + }, + { + "PROPER_NAME": "Pira", + "NAMES": [ + "pira", + "pyre" + ], + "DESCRIPTION": "Requiere Agotar una carta en la mano además de pagar su coste de energía." + }, + { + "PROPER_NAME": "Reserva", + "NAMES": [ + "reserva", + "reservas", + "reserve", + "reserves" + ], + "DESCRIPTION": "Un tipo alternativo de Energía que se almacena entre turnos." + }, + { + "PROPER_NAME": "Megatereal", + "NAMES": [ + "megatereal", + "megathereal" + ], + "DESCRIPTION": "Las cartas Megatereales se mueven a la pila de agotadas al jugarse y también al final del turno, sin importar en qué zona estén." + }, + { + "PROPER_NAME": "Cabeza de antorcha", + "NAMES": [ + "cabezadeantorcha", + "torchhead" + ], + "DESCRIPTION": "Mientras tengas #yPV #yTemporales, cada Ataque que juegues activa CabezaDeAntorcha." + } +] diff --git a/src/main/resources/collectorResources/localization/spa/MonsterStrings.json b/src/main/resources/collectorResources/localization/spa/MonsterStrings.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/src/main/resources/collectorResources/localization/spa/MonsterStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/collectorResources/localization/spa/OrbStrings.json b/src/main/resources/collectorResources/localization/spa/OrbStrings.json new file mode 100644 index 000000000..e4678fd00 --- /dev/null +++ b/src/main/resources/collectorResources/localization/spa/OrbStrings.json @@ -0,0 +1,8 @@ +{ +} + + + + + + diff --git a/src/main/resources/collectorResources/localization/spa/PotionStrings.json b/src/main/resources/collectorResources/localization/spa/PotionStrings.json new file mode 100644 index 000000000..c4dc6c80e --- /dev/null +++ b/src/main/resources/collectorResources/localization/spa/PotionStrings.json @@ -0,0 +1,37 @@ + +{ + "collector:MiniCursePotion": { + "NAME": "Extracto de Alma", + "DESCRIPTIONS": [ + "Aplica #b1 de #yDébil, #b1 de #yVulnerable y #b6 de #yCondena.", + "Aplica #b", + " de #yDébil, #b", + " de #yVulnerable y #b", + " de #yCondena [REMOVE_SPACE]." + ] + }, + "collector:ReservePotion": { + "NAME": "Poción de Reserva", + "DESCRIPTIONS": [ + "Gana #b2 de #yReserva.", + "Gana #b", + " de #yReserva [REMOVE_SPACE]." + ] + }, + "collector:DebuffDoublePotion": { + "NAME": "Aceites Embalsamadores", + "DESCRIPTIONS": [ + "Duplica las desventajas del objetivo.", + "Multiplica las desventajas del objetivo por #b", + "." + ] + }, + "collector:TempHPPotion": { + "NAME": "Agua Fétida", + "DESCRIPTIONS": [ + "Gana #b8 de #yPV #yTemporales.", + "Gana #b", + " de #yPV #yTemporales [REMOVE_SPACE]." + ] + } +} diff --git a/src/main/resources/collectorResources/localization/spa/PowerStrings.json b/src/main/resources/collectorResources/localization/spa/PowerStrings.json new file mode 100644 index 000000000..088bbf99a --- /dev/null +++ b/src/main/resources/collectorResources/localization/spa/PowerStrings.json @@ -0,0 +1,324 @@ +{ + "collector:AddCopyNextTurn": { + "NAME": "Carta Entrante", + "DESCRIPTIONS": [ + "Al comienzo de tu próximo turno, añade ", + " a tu mano." + ] + }, + "collector:BindingCall": { + "NAME": "Llamado de Atadura", + "DESCRIPTIONS": [ + "Cada vez que pierdas todos tus #yPV #yTemporales, aplica #b", + " de #yCondena a TODOS los enemigos." + ] + }, + "collector:CantTouchThis": { + "NAME": "Intocable", + "DESCRIPTIONS": [ + "Cada vez que bloquees completamente un ataque, aplica #b", + " de #yCondena al atacante." + ] + }, + "collector:Crackle": { + "NAME": "Crepitar", + "DESCRIPTIONS": [ + "Al comienzo de tu turno, gana #b1 de #yReserva.", + "Al comienzo de tu turno, gana #b", + " de #yReservas." + ] + }, + "collector:DarkLordForm": { + "NAME": "Forma del Señor Oscuro", + "DESCRIPTIONS": [ + "Al comienzo de tu turno, juega #y¡Eres #yMío! a un enemigo aleatorio.", + "Al comienzo de tu turno, juega #b", + " copias de #y¡Eres #yMío! a enemigos aleatorios." + ] + }, + "collector:DarkLordFormPlus": { + "NAME": "Forma del Señor Oscuro+", + "DESCRIPTIONS": [ + "Al comienzo de tu turno, juega #y¡Eres #yMío!+ a un enemigo aleatorio.", + "Al comienzo de tu turno, juega #b", + " copias de #y¡Eres #yMío!+ a enemigos aleatorios." + ] + }, + "collector:DoMayhem": { + "NAME": "Causar Caos", + "DESCRIPTIONS": [ + "Al comienzo de tu turno, si algún enemigo tiene #b", + " o más de #yCondena, juega la carta superior de tu pila de robo.", + " o más de #yCondena, juega las #b", + " primeras cartas de tu pila de robo." + ] + }, + "collector:Doom": { + "NAME": "Condena", + "DESCRIPTIONS": [ + "Pierde #b", + " PV al comienzo de su turno, elimina toda la #yCondena si no esta #yAfligido." + ] + }, + "collector:DoublePlayCollectibles": { + "NAME": "Coleccionables Dobles", + "DESCRIPTIONS": [ + "Las cartas Coleccionadas se juegan dos veces.", + "Las cartas Coleccionadas se juegan #b", + " veces adicionales." + ] + }, + "collector:DemisePower": { + "NAME": "Destino Inevitable", + "DESCRIPTIONS": [ + "Evita la próxima vez que se elimine #yCondena de este enemigo.", + "Evita las próximas #b", + " veces que se elimine #yCondena de este enemigo." + ] + }, + "collector:FeelMyPain": { + "NAME": "Siente Mi Dolor", + "DESCRIPTIONS": [ + "Cada vez que #yAgotes una carta, un enemigo aleatorio pierde #b", + " PV." + ] + }, + "collector:HealIfDieThisTurn": { + "NAME": "Finalizado", + "DESCRIPTIONS": [ + "Cuando ", + " muera, cura #b", + " PV." + ] + }, + "collector:Karma": { + "NAME": "Karma", + "DESCRIPTIONS": [ + "Al final de tu turno, si un enemigo está #yAfligido [REMOVE_SPACE], gana #b", + " de #yBloqueo." + ] + }, + "collector:NextAttackAppliesDoom": { + "NAME": "Ataque Condenado", + "DESCRIPTIONS": [ + "Tu próximo Ataque este turno aplica #b", + " de #yCondena." + ] + }, + "collector:AttacksApplyDoomPower": { + "NAME": "Ataques Condenados", + "DESCRIPTIONS": [ + "Los Ataques este turno aplican #b", + " de #yCondena." + ] + }, + "collector:NextCollectedTwice": { + "NAME": "Doble Colección", + "DESCRIPTIONS": [ + "Tu próxima carta Coleccionada este turno se juega dos veces.", + "Tus próximas #b", + " cartas Coleccionadas este turno se juegan dos veces." + ] + }, + "collector:NextTurnReserve": { + "NAME": "Reserva del Próximo Turno", + "DESCRIPTIONS": [ + "Al comienzo de tu próximo turno, gana #b1 de #yReserva.", + "Al comienzo de tu próximo turno, gana #b", + " de #yReservas." + ] + }, + "collector:Omen": { + "NAME": "Augurio", + "DESCRIPTIONS": [ + "Cada vez que juegues una carta #yColeccionada, gana #b", + " de #yFuerza." + ] + }, + "collector:ProtectingCall": { + "NAME": "Llamado Protector", + "DESCRIPTIONS": [ + "Al comienzo de tu turno, si tienes #yPV #yTemporales, gana #b", + " de #yBloqueo." + ] + }, + "collector:RagingCall": { + "NAME": "Llamado Furioso", + "DESCRIPTIONS": [ + "Al final de tu turno, si tienes #yPV #yTemporales, inflige #b", + " de daño a TODOS los enemigos." + ] + }, + "collector:Reserve": { + "NAME": "Reservas", + "DESCRIPTIONS": [ + "Tienes #b1 de #yReserva.", + "Tienes #b", + " de #yReservas." + ] + }, + "collector:Soulforge": { + "NAME": "Forja de Almas", + "DESCRIPTIONS": [ + "Al comienzo de tu turno, añade #b1 *Brasa a tu mano.", + "Al comienzo de tu turno, añade #b", + " *Brasas a tu mano." + ] + }, + "collector:StrengthOverTurns": { + "NAME": "Potenciar", + "DESCRIPTIONS": [ + "Al comienzo de tu próximo turno, gana #b", + " de #yFuerza.", + "Al comienzo de tus próximos #b", + " turnos, gana #b" + ] + }, + "collector:Suffering": { + "NAME": "Sufrimiento", + "DESCRIPTIONS": [ + "Cada vez que apliques #yDébil o #yVulnerable, también aplica #b", + " de #yCondena." + ] + }, + "collector:TorchHead": { + "NAME": "CabezaDeAntorcha", + "DESCRIPTIONS": [ + "Cada vez que juegues un #yAtaque, si tienes #yPV #yTemporales, CabezaDeAntorcha: NL ", + "Aplica #b", + " de #yCondena a un enemigo aleatorio.", + "Inflige #b", + " de daño a TODOS los enemigos.", + "Gana #b", + " de #yBloqueo.", + " #yVeneno a un enemigo aleatorio.", + "Roba #b", + " carta.", + " cartas." + ] + }, + "collector:IncreasedCollectionDraw": { + "NAME": "Colección Expandida", + "DESCRIPTIONS": [ + "Roba #b1 carta Coleccionada adicional cada turno.", + "Roba #b", + " cartas Coleccionadas adicionales cada turno." + ] + }, + "collector:MastersCall": { + "NAME": "Llamado del Amo", + "DESCRIPTIONS": [ + "Cada vez que juegues un Ataque, si tienes #yPV #yTemporales, inflige #b", + " de daño a un enemigo aleatorio." + ] + }, + "collector:LouseCard": { + "NAME": "Encogerse", + "DESCRIPTIONS": [ + "La próxima vez que recibas daño de ataque sin bloquear, gana #b", + " de #yBloqueo." + ] + }, + "collector:MadGremlinCard": { + "NAME": "Furioso", + "DESCRIPTIONS": [ + "Si recibes daño de ataque sin bloquear este turno, añade un #yGremlin #yGuerrero a tu mano.", + "Si recibes daño de ataque sin bloquear este turno, añade #b", + " #yGremlins #yGuerreros a tu mano." + ] + }, + "collector:GremlinWizardCard": { + "NAME": "Cargando Poder", + "DESCRIPTIONS": [ + "En el próximo turno, gana #b", + " de #yVigor." + ] + }, + "collector:ThievesCard": { + "NAME": "Escurridizo", + "DESCRIPTIONS": [ + "Recibe #b", + " menos daño de ataques este turno." + ] + }, + "collector:BookOfStabbingCard": { + "NAME": "Apuñalador", + "DESCRIPTIONS": [ + "Cada vez que inflijas daño de ataque sin bloquear, aplica #b", + " de #yCondena." + ] + }, + "collector:TransientCard": { + "NAME": "Desvaneciente", + "DESCRIPTIONS": [ + "Al final de tu turno, #rmueres.", + "En #b", + " turnos, #rmueres." + ] + }, + "collector:ReptomancerCard": { + "NAME": "Llamado Tóxico", + "DESCRIPTIONS": [ + "Al final de tu turno, si tienes #yPV #yTemporales, aplica #b", + " de #yVeneno a un enemigo aleatorio." + ] + }, + "collector:MoreBlockWithTempHP": { + "NAME": "Casco Dedal", + "DESCRIPTIONS": [ + "Mientras tengas #yPV #yTemporales, gana #b", + " más de #yBloqueo con las cartas." + ] + }, + "collector:NextTurnVigor": { + "NAME": "Vigor del Próximo Turno", + "DESCRIPTIONS": [ + "Al comienzo de tu próximo turno, gana #b", + " de #yVigor." + ] + }, + "collector:AcidSlimeCard": { + "NAME": "Duplicación Babosa", + "DESCRIPTIONS": [ + "Tu próximo #yAtaque o #yHabilidad este turno se juega dos veces.", + "Tus próximos #b", + " #yAtaques o #yHabilidades este turno se juegan dos veces." + ] + }, + "collector:GremlinNobCard": { + "NAME": "Irritado", + "DESCRIPTIONS": [ + "Cada vez que juegues una #yHabilidad, gana #b", + " de #yVigor." + ] + }, + "collector:LanternFlare": { + "NAME": "Marcado por la Llama", + "DESCRIPTIONS": [ + "Al final de su turno, gana #b", + " de #yCondena." + ] + }, + "collector:WomanInBlueCard": { + "NAME": "Mujer de Azul", + "DESCRIPTIONS": [ + "Al final del combate, pierdes todas tus pociones." + ] + }, + "collector:ShootingStar": { + "NAME": "Estrella Fugaz", + "DESCRIPTIONS": [ + "La primera vez que un #yAtaque arda en la #yPira cada turno, regresa a tu mano. Cuesta #b0 hasta jugarse.", + "Las primeras #b", + " veces que un #yAtaque arda en la #yPira cada turno, regresa a tu mano. Cuesta #b0 hasta jugarse." + ] + }, + "collector:LoseHpNextTurn": { + "NAME": "Marcado para Morir", + "DESCRIPTIONS": [ + "Al final de su turno, pierde #b", + " PV." + ] + } +} + diff --git a/src/main/resources/collectorResources/localization/spa/RelicStrings.json b/src/main/resources/collectorResources/localization/spa/RelicStrings.json new file mode 100644 index 000000000..0bc4088bf --- /dev/null +++ b/src/main/resources/collectorResources/localization/spa/RelicStrings.json @@ -0,0 +1,125 @@ +{ + "collector:EmeraldTorch": { + "NAME": "Antorcha Esmeralda", + "FLAVOR": "Los fuegos de la avaricia nunca se apagan.", + "DESCRIPTIONS": [ + "Comienza cada combate con #b1 de #ycollector:Reserva." + ] + }, + "collector:PrismaticTorch": { + "NAME": "Antorcha Prismática", + "FLAVOR": "Las llamas cambiantes reflejan el favor de la fortuna.", + "DESCRIPTIONS": [ + "Reemplaza ", + "[] [REMOVE_SPACE]. Al comienzo de cada combate, añade una #yBrasa a tu mano y gana #b1 de #ycollector:Reserva. La primera vez que #yAgotes una #yBrasa cada turno, gana #b1 de #ycollector:Reserva [REMOVE_SPACE]." + ] + }, + "collector:HolidayCoal": { + "NAME": "Carbón de Krampus", + "FLAVOR": "\"¡Intrigante! ¿Pero por qué solo ciertas chimeneas?\" - Ranwid", + "DESCRIPTIONS": [ + "Cuando vayas a robar de una pila Coleccionada vacía, añade una #yMecha #yAfortunada a tu mano." + ] + }, + "collector:BagOfTricks": { + "NAME": "Bolsa de Trucos", + "FLAVOR": "Tramposa.", + "DESCRIPTIONS": [ + "Al comienzo de cada combate, roba #b", + " cartas Coleccionadas." + ] + }, + "collector:JadeRing": { + "NAME": "Anillo de Jade", + "FLAVOR": "El jade es símbolo de honestidad.", + "DESCRIPTIONS": [ + "Los enemigos reciben #b", + " de daño adicional de #ycollector:Condena [REMOVE_SPACE]." + ] + }, + "collector:SoullitLamp": { + "NAME": "Lámpara Encendida por Almas", + "FLAVOR": "Una decoración fantasmal. El crepitar del fuego ha sido reemplazado por lamentos zumbantes.", + "DESCRIPTIONS": [ + "Al obtenerla, gana #b3 de #yEsencia [REMOVE_SPACE]. Al comienzo del combate, añade una #yBrasa a tu mano." + ] + }, + "collector:ThimbleHelm": { + "NAME": "Casco Dedal", + "FLAVOR": "Llevado por los héroes más diminutos de la Aguja.", + "DESCRIPTIONS": [ + "Comienza cada combate con #b", + " de #yPV_Temporales [REMOVE_SPACE]. Mientras tengas #yPV_Temporales [REMOVE_SPACE], las cartas otorgan #b1 de #yBloqueo adicional [REMOVE_SPACE]." + ] + }, + "collector:Incense": { + "NAME": "Incienso", + "FLAVOR": "Una forma antigua de claridad mental.", + "DESCRIPTIONS": [ + "No puedes ganar #yDébil [REMOVE_SPACE], #yVulnerable ni #yFrágil mientras ya tengas alguno de esos efectos [REMOVE_SPACE]." + ] + }, + "collector:FuelCanister": { + "NAME": "Lata de Combustible", + "FLAVOR": "Asquerosa.", + "DESCRIPTIONS": [ + "Al final de tu turno, #yRetén la carta de menor coste en tu mano." + ] + }, + "collector:AutoCurser": { + "NAME": "Talismán Hexx", + "FLAVOR": "\"Desde que lo uso, me pego en el pie dos veces más. ¡Creo que funciona!\" - Ranwid", + "DESCRIPTIONS": [ + "Al comienzo del combate, aplica #b1 de #yDébil y #yVulnerable a un enemigo aleatorio." + ] + }, + "collector:Bagpipes": { + "NAME": "La Gaita", + "FLAVOR": "Este temido instrumento volvió loco al gran Kublai.", + "DESCRIPTIONS": [ + "Siempre que apliques #yDébil o #yVulnerable nuevos a un enemigo, aumenta la cantidad aplicada en #b1 [REMOVE_SPACE]." + ] + }, + "collector:BottledCollectible": { + "NAME": "Cerebro Embotellado", + "FLAVOR": "Recolectado en el laboratorio de un hechicero.", + "DESCRIPTIONS": [ + "Al obtenerla, #yMejora una carta en tu Colección. Comienza los combates con ella en la parte superior de tu pila Coleccionada.", + "Comienza el combate con ", + " en la parte superior de tu pila Coleccionada.", + "Selecciona una carta para embotellar para " + ] + }, + "collector:TheContract": { + "NAME": "El Contrato", + "FLAVOR": "Firma con sangre.", + "DESCRIPTIONS": [ + "Al obtenerla, gana #b10 de #yEsencia [REMOVE_SPACE]." + ] + }, + "collector:ForbiddenFruit": { + "NAME": "Fruta Prohibida", + "FLAVOR": "Esta especie de fruta no se parece a nada conocido.", + "DESCRIPTIONS": [ + "Al obtenerla, elige y obtén una carta Común, Poco común y Rara de todas las disponibles. Luego, obtén una #yMaldita [REMOVE_SPACE].", + "Elige una carta Rara para añadir a tu mazo.", + "Elige una carta Poco común para añadir a tu mazo.", + "Elige una carta Común para añadir a tu mazo." + ] + }, + "collector:RoughDiamond": { + "NAME": "Diamante en Bruto", + "FLAVOR": "Con las minas demolidas, incluso esta piedra empañada vale algo.", + "DESCRIPTIONS": [ + "La primera vez que juegues una carta #yRara cada turno, gana [E] . Al obtenerla, obtén una recompensa de carta #yRara.", + "¡Conocimiento!" + ] + }, + "collector:BlockedChakra": { + "NAME": "Chakra Bloqueado", + "FLAVOR": "Un solo tirón muscular es suficiente.", + "DESCRIPTIONS": [ + "Gana [E] al comienzo de tu turno. No puedes robar de tu pila Coleccionada hasta el 4.º turno." + ] + } +} diff --git a/src/main/resources/collectorResources/localization/spa/RunModStrings.json b/src/main/resources/collectorResources/localization/spa/RunModStrings.json new file mode 100644 index 000000000..7a73a41bf --- /dev/null +++ b/src/main/resources/collectorResources/localization/spa/RunModStrings.json @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/src/main/resources/collectorResources/localization/spa/UIStrings.json b/src/main/resources/collectorResources/localization/spa/UIStrings.json new file mode 100644 index 000000000..ec998867f --- /dev/null +++ b/src/main/resources/collectorResources/localization/spa/UIStrings.json @@ -0,0 +1,110 @@ +{ + "collector:CollectionReward": { + "TEXT": [ + "Elige una carta para Coleccionar." + ] + }, + "collector:CollectibleCardTab": { + "TEXT": [ + "Coleccionable" + ] + }, + "collector:CollectionScreen": { + "TEXT": [ + "Ocultar", + "Tu Colección comienza el combate con todas las cartas aquí." + ] + }, + "collector:CollectionUITopPanel": { + "TEXT": [ + "Colección", + "Ver todas las cartas en tu Colección.", + "Estas cartas comienzan en tu pila Coleccionada en cada combate." + ] + }, + "collector:CombatCollectionPileButton": { + "TEXT": [ + "Pila Coleccionada", + "Aquí se encuentran las cartas Coleccionadas que aún no has robado este combate. Robas una carta de aquí al comienzo de cada turno.", + "¡No tengo cartas Coleccionadas!" + ] + }, + "collector:EssenceCount": { + "TEXT": [ + "Esencias", + "Gasta Esencias para añadir cartas a tu Colección. Las salas de combate otorgan #b1 #yEsencia. Los Élite dan #b2 #yEsencias, y los Jefes dan #b3. NL Tienes #b", + " Esencias." + ] + }, + "collector:CombatCollectionViewScreen": { + "TEXT": [ + "Vista de colección en combate" + ] + }, + "collector:PyreInfo": { + "TEXT": [ + "Pira", + "Para jugar esta carta, paga el coste adicional de Agotar cartas de tu mano." + ] + }, + "collector:CollectedCardMod": { + "TEXT": [ + "collector:Megatereal. NL ", + "Coleccionada" + ] + }, + "collector:CollectibleCardReward": { + "TEXT": [ + "Coleccionada: ", + "Puedes obtener esta" + ] + }, + "collector:HoardedMod": { + "TEXT": [ + "No jugable. Retiene. NL ", + "No jugable. NL ", + "Retiene. NL " + ] + }, + "collector:SecondEnergyOrb": { + "TEXT": [ + "Reservas", + "Un tipo especial de Energía que persiste entre turnos." + ] + }, + "collector:PyreCostSpendScreen": { + "TEXT": [ + "Agotar para la Pira." + ] + }, + "collector:PyreModText": { + "TEXT": [ + "¡No tengo una carta para Agotar!" + ] + }, + "collector:StashAwayCampfireOption": { + "TEXT": [ + "Liberar", + "Eliminar una carta Coleccionada. Gana ", + " Almas.", + "Requiere una carta Coleccionada.", + "Selecciona una carta Coleccionada para eliminar." + ] + }, + "collector:BonusEventOption": { + "TEXT": [ + "[Tomar]" + ] + }, + "collector:EssenceReward": { + "TEXT": [ + "Gana ", + " Esencia." + ] + }, + "collector:CharacterOption": { + "TEXT": [ + "Esencias: " + ] + } +} diff --git a/src/main/resources/collectorResources/localization/zhs/CardStrings.json b/src/main/resources/collectorResources/localization/zhs/CardStrings.json index 3e0b778dd..022f754a0 100644 --- a/src/main/resources/collectorResources/localization/zhs/CardStrings.json +++ b/src/main/resources/collectorResources/localization/zhs/CardStrings.json @@ -407,7 +407,7 @@ "DESCRIPTION": "目标每有一种负面效果, NL 造成 !D! 点伤害。" }, "collector:YouAreMine": { - "NAME": "你是我的了", + "NAME": "你是我的了!", "DESCRIPTION": "给予 !M! 层 虚弱 。 NL 给予 !M! 层 易伤 。 NL 给予 !clm2! 层 collector:魂劫 。" }, "collector:Whomp": { @@ -609,7 +609,7 @@ }, "collector:ShelledParasiteCard": { "NAME": "带壳寄生怪", - "DESCRIPTION": "获得 !M! 层 *多层护甲 。" + "DESCRIPTION": "获得 !M! 层 expansioncontent:多层护甲 。" }, "collector:ShieldGremlinCard": { "NAME": "持盾地精", @@ -693,6 +693,6 @@ }, "collector:Sapped": { "NAME": "虚脱", - "DESCRIPTION": "collector:焰葬 。 NL 消耗 。 NL 本牌无法从牌组移除。" + "DESCRIPTION": "collector:焰葬 。 NL 抽到时失去 [E] 。 NL 消耗 。 NL 本牌无法从牌组移除。" } } diff --git a/src/main/resources/collectorResources/localization/zhs/RelicStrings.json b/src/main/resources/collectorResources/localization/zhs/RelicStrings.json index 2891b1acc..0cf4648b7 100644 --- a/src/main/resources/collectorResources/localization/zhs/RelicStrings.json +++ b/src/main/resources/collectorResources/localization/zhs/RelicStrings.json @@ -11,7 +11,7 @@ "FLAVOR": "各色斑斓的火焰昭示着命运的偏袒。", "DESCRIPTIONS": [ "替换 ", - " 。战斗开始时,获得一张 #y余烬 与 #b1 #ycollector:储能 。每回合首次 #y消耗 一张 #y余烬 时,获得 #b1 #ycollector:储能 。" + " []。战斗开始时,获得一张 #y余烬 与 #b1 #ycollector:储能 。每当你 #y消耗 一张 #y余烬 时,获得 #b1 #ycollector:储能 。" ] }, "collector:HolidayCoal": { @@ -33,8 +33,8 @@ "NAME": "玉戒指", "FLAVOR": "玉象征着诚实。", "DESCRIPTIONS": [ - "每当一名 #ycollector:魂劫 中的非爪牙敌人死亡时,获得 #b", - " 灵魂。" + "#ycollector:魂劫 额外造成 #b", + " 点伤害。" ] }, "collector:SoullitLamp": { @@ -63,7 +63,7 @@ "NAME": "液罐", "FLAVOR": "真恶心。", "DESCRIPTIONS": [ - "回合结束时, #y保留 耗能最高的手牌。" + "回合结束时, #y保留 耗能最低的手牌。" ] }, "collector:AutoCurser": { @@ -77,7 +77,7 @@ "NAME": "风笛", "FLAVOR": "这种可怕的乐器据说曾惊扰到元世祖。", "DESCRIPTIONS": [ - "每当你给予 #y虚弱 或 #y易伤 时,额外给予 #b1 层。" + "每当你给予 #y虚弱 或 #y易伤 时,若目标没有该 #r负面效果,额外给予 #b1 层。" ] }, "collector:BottledCollectible": { @@ -102,7 +102,7 @@ "NAME": "禁忌之果", "FLAVOR": "这种水果看起来真陌生。", "DESCRIPTIONS": [ - "拾起时,从所有可获得的牌中各选择 #b1 张普通、 #b罕见 ,及 #y稀有 牌。 NL 获得一张 #r死灵诅咒 。", + "拾起时,从所有可获得的牌中各选择 #b1 张普通、 #b罕见 ,及 #y稀有牌。 NL 获得一张 #r虚脱 。", "选择一张稀有牌加入牌组。", "选择一张罕见牌加入牌组。", "选择一张普通牌加入牌组。" @@ -112,7 +112,8 @@ "NAME": "粗糙钻石", "FLAVOR": "矿藏耗尽后,哪怕这般暗淡的石头也变得值钱起来。", "DESCRIPTIONS": [ - "每当你打出一张 #b2 耗能及以上的 #y稀有 牌, 获得 [E] 。" + "每回合首次打出一张 #y稀有牌, 获得 [E] 。将一张稀有牌加入牌组。", + "选择一张普通牌加入牌组。" ] }, "collector:BlockedChakra": { diff --git a/src/main/resources/collectorResources/localization/zht/CardStrings.json b/src/main/resources/collectorResources/localization/zht/CardStrings.json new file mode 100644 index 000000000..9dbea4ffd --- /dev/null +++ b/src/main/resources/collectorResources/localization/zht/CardStrings.json @@ -0,0 +1,700 @@ +{ + "collector:ActOfAggression": { + "NAME": "Act of Aggression", + "DESCRIPTION": "Gain !B! Block. NL Apply !M! Vulnerable to ALL enemies." + }, + "collector:AlwaysMore": { + "NAME": "Always More", + "DESCRIPTION": "collector:Pyre. NL Gain !M! Gold." + }, + "collector:AshenStrike": { + "NAME": "Ashen Strike", + "DESCRIPTION": "Deal !D! damage. NL Gain an *Ember." + }, + "collector:Arrogance": { + "NAME": "Arrogance", + "DESCRIPTION": "Gain !B! Block. NL Your next Attack this turn also applies !M! collector:Doom." + }, + "collector:AshesAndDust": { + "NAME": "Ashes and Dust", + "DESCRIPTION": "Deal !D! damage to ALL enemies X times. NL If X is 5 or more, hits two additional times." + }, + "collector:BindingCall": { + "NAME": "Binding Call", + "DESCRIPTION": "Gain !M! expansioncontent:Temp_HP. NL collector:Torchhead gains \"Apply !clm2! collector:Doom to a random enemy.\"" + }, + "collector:Billow": { + "NAME": "Billow", + "DESCRIPTION": "Gain !B! Block. NL Next turn, add *Bellow into your hand." + }, + "collector:Bellow": { + "NAME": "Bellow", + "DESCRIPTION": "Ethereal. NL Apply collector:Doom equal to unused Block last turn. NL Exhaust.", + "EXTENDED_DESCRIPTION": [ + " NL ( Applies !M! collector:Doom )" + ] + }, + "collector:BlackBindings": { + "NAME": "Black Bindings", + "DESCRIPTION": "Apply !M! Weak, then apply !clm2! collector:Doom for each unique debuff on the enemy." + }, + "collector:Blightning": { + "NAME": "Blightning", + "DESCRIPTION": "Apply !M! collector:Doom. NL Deal !D! damage. NL Draw 1 card from your Collected pile. NL Exhaust." + }, + "collector:Bonfire": { + "NAME": "Bonfire", + "DESCRIPTION": "collector:Pyre. NL Gain !B! Block. NL Next turn, gain 1 collector:Reserve." + }, + "collector:BrainDrain": { + "NAME": "Brain Drain", + "DESCRIPTION": "Enemy loses !M! HP. NL Add their Collected card into your hand. NL Exhaust.", + "UPGRADE_DESCRIPTION": "Enemy loses !M! HP. NL Add their Collected card into your hand and Upgrade it. NL Exhaust." + }, + "collector:BramblesparKindling": { + "NAME": "Bramblespar Kindling", + "DESCRIPTION": "Unplayable. NL When *Exhausted, add a *Burning *Strike into your hand.", + "UPGRADE_DESCRIPTION": "Unplayable. NL When *Exhausted, add a *Burning *Strike+ into your hand.", + "EXTENDED_DESCRIPTION": [ + "I must light this kindling to use it." + ] + }, + "collector:BurningStrike": { + "NAME": "Burning Strike", + "DESCRIPTION": "Deal !D! damage. NL Draw a card.", + "UPGRADE_DESCRIPTION": "Deal !D! damage. NL Draw !M! cards." + }, + "collector:CantTouchThis": { + "NAME": "Can't Touch This", + "DESCRIPTION": "Gain !M! Dexterity. NL When you fully block an attack, apply !clm2! collector:Doom to the attacker." + }, + "collector:CoffinNail": { + "NAME": "Coffin Nail", + "DESCRIPTION": "Deal !D! damage. NL When *Exhausted, return it to your hand next turn with !M! more damage." + }, + "collector:Condemn": { + "NAME": "Condemn", + "DESCRIPTION": "Apply !M! Vulnerable. NL Apply !clm2! collector:Doom." + }, + "collector:CursedWail": { + "NAME": "Cursed Wail", + "DESCRIPTION": "ALL enemies lose !M! Strength this turn. NL collector:Afflicted enemies lose !clm2! Strength. NL Exhaust." + }, + "collector:DarkApotheosis": { + "NAME": "Dark Apotheosis", + "DESCRIPTION": "Upgrade the Collected pile for the rest of combat. NL Exhaust." + }, + "collector:DarkLordForm": { + "NAME": "Dark Lord Form", + "DESCRIPTION": "At the start of your turn, play *You *Are *Mine on a random enemy.", + "UPGRADE_DESCRIPTION": "At the start of your turn, play *You *Are *Mine+ on a random enemy." + }, + "collector:Darkstorm": { + "NAME": "Darkstorm", + "DESCRIPTION": "Gain a *Blightning. NL Shuffle !M! more into your draw pile. NL Exhaust." + }, + "collector:DarkwoodKindling": { + "NAME": "Darkwillow Kindling", + "DESCRIPTION": "Unplayable. NL When *Exhausted, gain !M! collector:Reserve next turn.", + "UPGRADE_DESCRIPTION": "Unplayable. NL Retain. NL When *Exhausted, gain !M! collector:Reserve next turn.", + "EXTENDED_DESCRIPTION": [ + "I must light this kindling to use it." + ] + }, + "collector:Defend": { + "NAME": "Defend", + "DESCRIPTION": "Gain !B! Block." + }, + "collector:DoubleTrouble": { + "NAME": "Double Trouble", + "DESCRIPTION": "Gain !B! Block. NL Your next Collected card this turn is played twice." + }, + "collector:DoMayhem": { + "NAME": "Do Mayhem", + "DESCRIPTION": "At the start of your turn, if any enemy has 25 or more collector:Doom, play the top card of your draw pile." + }, + "collector:DragonsTrove": { + "NAME": "Dragon's Trove", + "DESCRIPTION": "collector:Pyre. NL Draw 2 cards from your Collected pile. NL Gain !M! collector:Reserve. NL Exhaust." + }, + "collector:Ember": { + "NAME": "Ember", + "DESCRIPTION": "Retain. NL Exhaust. NL When *Exhausted, gain !M! Strength.", + "EXTENDED_DESCRIPTION": [ + "These embers must be lit, not played." + ] + }, + "collector:Empower": { + "NAME": "Empower", + "DESCRIPTION": "Gain X Strength at the start of your next !M! turns." + }, + "collector:Extricate": { + "NAME": "Sever Soul", + "DESCRIPTION": "Exhaust all non-Attack cards in your hand. NL Deal !D! damage." + }, + "collector:FeelMyPain": { + "NAME": "Feel My Pain", + "DESCRIPTION": "Whenever you *Exhaust a card, a random enemy loses !M! HP." + }, + "collector:FiendFire": { + "NAME": "Fiend Fire", + "DESCRIPTION": "Exhaust your hand. NL Deal !D! damage for each card *Exhausted. NL Exhaust." + }, + "collector:Finalize": { + "NAME": "Finalize", + "DESCRIPTION": "When the enemy dies, heal !clm2! HP. NL Apply !M! collector:Doom. NL Exhaust." + }, + "collector:FingerOfDeath": { + "NAME": "Finger of Death", + "DESCRIPTION": "Only collector:Reserves may be spent on this. NL Apply !M! collector:Doom.", + "UPGRADE_DESCRIPTION": "Only collector:Reserves may be spent on this. NL Apply !M! collector:Doom to ALL enemies." + }, + "collector:FlameLash": { + "NAME": "Flame Lash", + "DESCRIPTION": "collector:Pyre. NL Deal !D! damage, then add *Pyred card's damage to this.", + "UPGRADE_DESCRIPTION": "collector:Pyre. NL Deal !D! damage, then add *Pyred card's damage plus !M! to this." + }, + "collector:FleetingEmbers": { + "NAME": "Fleeting Embers", + "DESCRIPTION": "collector:Pyre. NL Gain !B! Block. NL Add !M! *Embers into your hand." + }, + "collector:Forgery": { + "NAME": "Forgery", + "DESCRIPTION": "Deal !D! damage. NL Choose 1 of !M! cards from your Collected pile to gain a copy of.", + "EXTENDED_DESCRIPTION": [ + "to add into your hand." + ] + }, + "collector:FuelTheFire": { + "NAME": "Fuel the Fire", + "DESCRIPTION": "collector:Pyre. NL Next turn, gain !M! collector:Reserve.", + "UPGRADE_DESCRIPTION": "collector:Pyre. NL Next turn, gain !M! collector:Reserve and draw a card." + }, + "collector:Goodbye": { + "NAME": "Goodbye", + "DESCRIPTION": "Double the enemy's collector:Doom. NL Exhaust.", + "UPGRADE_DESCRIPTION": "Triple the enemy's collector:Doom. NL Exhaust." + }, + "collector:GourmandsGaze": { + "NAME": "Gourmand's Gaze", + "DESCRIPTION": "Deal !D! damage. NL If you played a collector:Collected card this turn, gain !B! Block." + }, + "collector:GreaterHurting": { + "NAME": "Greater Hurting", + "DESCRIPTION": "Ethereal. NL Deal !D! damage. NL If this card is Exhausted, gain a *Greatest *Hurting.", + "UPGRADE_DESCRIPTION": "Ethereal. NL Deal !D! damage. NL If this card is Exhausted, gain a *Greatest *Hurting+." + }, + "collector:GreatestHurting": { + "NAME": "Greatest Hurting", + "DESCRIPTION": "Ethereal. NL Deal !D! damage. NL If this card is Exhausted, gain an *Ember." + }, + "collector:GreenpyreLocus": { + "NAME": "Greenpyre Locus", + "DESCRIPTION": "Choose 1 of 3 Collected cards to add into your hand. Add !M! copies of it into your Collected pile.", + "EXTENDED_DESCRIPTION": [ + "Choose a card to add into your hand." + ] + }, + "collector:Heatwave": { + "NAME": "Heat Wave", + "DESCRIPTION": "Deal !D! damage to ALL enemies. NL Gain an *Ember." + }, + "collector:Hoard": { + "NAME": "Hoard", + "DESCRIPTION": "collector:Pyre. NL Draw !M! cards. NL This turn, they Retain." + }, + "collector:HoardersStrike": { + "NAME": "Hoarder's Strike", + "DESCRIPTION": "Deal !D! damage. NL Play the top card of your Collected pile." + }, + "collector:Hurting": { + "NAME": "Hurting", + "DESCRIPTION": "Ethereal. NL Deal !D! damage. NL If this card is Exhausted, gain a *Greater *Hurting.", + "UPGRADE_DESCRIPTION": "Ethereal. NL Deal !D! damage. NL If this card is Exhausted, gain a *Greater *Hurting+." + }, + "collector:IllTakeThat": { + "NAME": "I'll Take That", + "DESCRIPTION": "Steal up to !M! of the enemy's Block. NL Deal !D! damage." + }, + "collector:InevitableDemise": { + "NAME": "Inevitable Demise", + "DESCRIPTION": "Deal !D! damage. NL Prevent the next time collector:Doom would be removed from the target." + }, + "collector:InflictAgony": { + "NAME": "Inflict Agony", + "DESCRIPTION": "Deal !D! damage. NL If the enemy is not collector:Afflicted, apply 2 Weak and Vulnerable." + }, + "collector:Invigorate": { + "NAME": "Flash", + "DESCRIPTION": "collector:Pyre. NL Choose *Trip or *Blind to gain. NL Exhaust.", + "UPGRADE_DESCRIPTION": "collector:Pyre. NL Choose *Trip+ or *Blind+ to gain. NL Exhaust.", + "EXTENDED_DESCRIPTION": [ + "Choose a card to add into your hand." + ] + }, + "collector:IronbarkKindling": { + "NAME": "Ironbark Kindling", + "DESCRIPTION": "Unplayable. NL When *Exhausted, gain !B! Block.", + "UPGRADE_DESCRIPTION": "Unplayable. Retain. NL When *Exhausted, gain !B! Block.", + "EXTENDED_DESCRIPTION": [ + "I must light this kindling to use it." + ] + }, + "collector:ItMattersNot": { + "NAME": "It Matters Not", + "DESCRIPTION": "Gain !B! Block. NL Increase ALL enemy Weak and Vulnerable by !M!." + }, + "collector:JadedJabs": { + "NAME": "Jaded Jabs", + "DESCRIPTION": "collector:Pyre. NL Deal !D! damage. NL Gain *Shivs equal to *Pyred card's cost + !M!." + }, + "collector:Karma": { + "NAME": "Karma", + "DESCRIPTION": "At the end of your turn, gain !M! Block. NL If an enemy is collector:Afflicted, gain !clm2! more.", + "UPGRADE_DESCRIPTION": "Innate. NL At the end of your turn, gain !M! Block. NL If an enemy is collector:Afflicted, gain !clm2! more." + }, + "collector:LanternFlare": { + "NAME": "Lantern Flare", + "DESCRIPTION": "collector:Pyre. NL Apply !M! collector:Doom. NL Enemy gains !clm2! more at the end of each of its turns." + }, + "collector:LuckyWick": { + "NAME": "Lucky Wick", + "DESCRIPTION": "Gain !B! Block. NL Deal !D! damage." + }, + "collector:MastersCall": { + "NAME": "Master's Call", + "DESCRIPTION": "Unused!" + }, + "collector:MiniCurse": { + "NAME": "Mini-Curse", + "DESCRIPTION": "collector:Pyre. NL Apply 1 Weak and Vulnerable.", + "UPGRADE_DESCRIPTION": "collector:Pyre. NL Apply 1 Weak and Vulnerable to ALL enemies." + }, + "collector:Misdirect": { + "NAME": "Misdirect", + "DESCRIPTION": "Gain !B! Block. NL Next turn, gain 1 collector:Reserve." + }, + "collector:MysteryWeaving": { + "NAME": "Mystery Weaving", + "DESCRIPTION": "Gain !B! Block. NL Grants 2 less Block for each other card in your hand." + }, + "collector:OakbrimKindling": { + "NAME": "Oakbrim Kindling", + "DESCRIPTION": "Unplayable. NL When *Exhausted, draw !M! cards.", + "EXTENDED_DESCRIPTION": [ + "I must light this kindling to use it." + ] + }, + "collector:Omen": { + "NAME": "Omen", + "DESCRIPTION": "Whenever you play a Collected card, gain 1 Strength.", + "UPGRADE_DESCRIPTION": "Innate. NL Whenever you play a Collected card, gain 1 Strength." + }, + "collector:ProtectingCall": { + "NAME": "Protecting Call", + "DESCRIPTION": "Gain !M! expansioncontent:Temp_HP. NL collector:Torchhead gains \"Gain !clm2! Block.\"" + }, + "collector:Pyromancy": { + "NAME": "Pyromancy", + "DESCRIPTION": "collector:Pyre. NL At the start of your turn, gain 1 collector:Reserve.", + "UPGRADE_DESCRIPTION": "Innate. collector:Pyre. NL At the start of your turn, gain 1 collector:Reserve." + }, + "collector:RagingCall": { + "NAME": "Raging Call", + "DESCRIPTION": "Gain !M! expansioncontent:Temp_HP. NL collector:Torchhead gains \"Deal !clm2! damage to ALL enemies.\"." + }, + "collector:ReceiveTribute": { + "NAME": "Receive Tribute", + "DESCRIPTION": "collector:Pyre. NL Choose 1 of !M! Boss cards to gain. It gains Retain. NL Exhaust.", + "EXTENDED_DESCRIPTION": [ + "Choose a card to add into your hand." + ] + }, + "collector:Roast": { + "NAME": "Roast", + "DESCRIPTION": "collector:Pyre. NL Deal !D! damage." + }, + "collector:RotwoodKindling": { + "NAME": "Rotwood Kindling", + "DESCRIPTION": "Unplayable. NL When *Exhausted, apply !M! Vulnerable and !clm2! collector:Doom to ALL enemies.", + "EXTENDED_DESCRIPTION": [ + "I must light this kindling to use it." + ] + }, + "collector:SapStrength": { + "NAME": "Deathmark", + "DESCRIPTION": "Deal !D! damage. NL Next turn, enemy loses HP equal to twice the unblocked damage dealt." + }, + "collector:ScorchingRay": { + "NAME": "Scorching Ray", + "DESCRIPTION": "Deal !D! damage to a random enemy X times." + }, + "collector:SeedOfDoubt": { + "NAME": "Seed of Doubt", + "DESCRIPTION": "Apply !M! collector:Doom. NL Whenever a card is *Exhausted when this is in hand, increase its *Doom by !clm2!." + }, + "collector:ShadowDaggers": { + "NAME": "Shadow Daggers", + "DESCRIPTION": "Deal !D! damage for each Collected card played this combat. NL Exhaust.", + "EXTENDED_DESCRIPTION": [ + " NL (Hits ", + " time.)", + " times.)" + ] + }, + "collector:SomberShield": { + "NAME": "Somber Shield", + "DESCRIPTION": "collector:Pyre. NL Gain !B! Block. NL Next turn, gain a copy of the *Exhausted card." + }, + "collector:SoulSnare": { + "NAME": "Soul Snare", + "DESCRIPTION": "Apply !M! collector:Doom. NL Exhaust." + }, + "collector:Soulforge": { + "NAME": "Soulforge", + "DESCRIPTION": "Draw a card from your Collected pile. Gain !M! Upgraded copy of it. NL Exhaust.", + "UPGRADE_DESCRIPTION": "Draw a card from your Collected pile. Gain !M! Upgraded copies of it. NL Exhaust." + }, + "collector:Spark": { + "NAME": "Spark", + "DESCRIPTION": "Gain 1 collector:Reserve. NL Exhaust.", + "UPGRADE_DESCRIPTION": "Gain 1 collector:Reserve. NL Draw 1 card. NL Exhaust." + }, + "collector:SpiritLeech": { + "NAME": "Spirit Leech", + "DESCRIPTION": "Deal !D! damage. NL If the enemy is collector:Afflicted, gain !B! Block." + }, + "collector:StashAway": { + "NAME": "Stash Away", + "DESCRIPTION": "Gain !B! Block X times. NL Next turn, gain X collector:Reserve. NL Exhaust." + }, + "collector:Strike": { + "NAME": "Strike", + "DESCRIPTION": "Deal !D! damage." + }, + "collector:SuckerPunch": { + "NAME": "Sucker Punch", + "DESCRIPTION": "Deal !D! damage. NL Apply !M! Weak." + }, + "collector:Suffering": { + "NAME": "Suffering", + "DESCRIPTION": "Whenever you apply *Weak or *Vulnerable to an enemy, also apply !M! collector:Doom to them." + }, + "collector:SunbloomKindling": { + "NAME": "Sunbloom Kindling", + "DESCRIPTION": "Unplayable. NL When *Exhausted, gain !M! Strength and add 2 *Embers into your hand.", + "EXTENDED_DESCRIPTION": [ + "I must light this kindling to use it." + ] + }, + "collector:ThornWhip": { + "NAME": "Thorn Whip", + "DESCRIPTION": "Deal !D! damage and apply !M! hermit:Bruise to ALL enemies. NL Gain a *Shiv." + }, + "collector:Torchbearer": { + "NAME": "Torchbearer", + "DESCRIPTION": "Gain !M! expansioncontent:Temp_HP. NL Exhaust.", + "UPGRADE_DESCRIPTION": "If you have any expansioncontent:Temp_HP, Exhaust. NL Gain !M! expansioncontent:Temp_HP." + }, + "collector:WhirlingFlame": { + "NAME": "Whirling Flame", + "DESCRIPTION": "Deal !D! damage to ALL enemies. NL Put a card from your discard pile on top of your draw pile." + }, + "collector:VoidArmor": { + "NAME": "Void Armor", + "DESCRIPTION": "EVERYONE gains !B! Block and 1 bronze:Blur." + }, + "collector:Wildfire": { + "NAME": "Wildfire", + "DESCRIPTION": "Deal !D! damage for each unique debuff on the enemy." + }, + "collector:YouAreMine": { + "NAME": "You Are Mine!", + "DESCRIPTION": "Apply !M! Weak. NL Apply !M! Vulnerable. Apply !clm2! collector:Doom." + }, + "collector:Whomp": { + "NAME": "Whomp", + "DESCRIPTION": "Deal !D! damage. NL Gain !M! expansioncontent:Temp_HP. NL Exhaust." + }, + "collector:AcidSlimeCard": { + "NAME": "Acid Slime", + "DESCRIPTION": "Add !M! random 0 cost card into your hand.", + "UPGRADE_DESCRIPTION": "Add !M! random 0 cost cards into your hand." + }, + "collector:AugmenterCard": { + "NAME": "Augmenter", + "DESCRIPTION": "Lose 3 HP. NL Gain !M! Strength." + }, + "collector:BearCard": { + "NAME": "Bear", + "DESCRIPTION": "Gain !B! Block. NL Remove the enemy's Block. NL Deal !D! damage." + }, + "collector:BlueSlaverCard": { + "NAME": "Blue Slaver", + "DESCRIPTION": "Deal !D! damage. NL Apply 1 Weak. NL Double the enemy's Weak." + }, + "collector:BonfireSpiritsCard": { + "NAME": "Bonfire Spirits", + "DESCRIPTION": "collector:Pyre. NL Heal !M! HP. NL If the Exhausted card was Rare, raise your Max HP by 1." + }, + "collector:BookOfStabbingCard": { + "NAME": "Book of Stabbing", + "DESCRIPTION": "Whenever you deal unblocked attack damage, apply !M! collector:Doom." + }, + "collector:BronzeOrbCard": { + "NAME": "Bronze Orb", + "DESCRIPTION": "Gain !B! Block. NL Deal !D! damage. NL The top card of your draw pile costs 0 until played." + }, + "collector:ByrdCard": { + "NAME": "Byrd", + "DESCRIPTION": "Deal !D! damage 5 times." + }, + "collector:CenturionCard": { + "NAME": "Centurion", + "DESCRIPTION": "Gain !B! Block. NL Gain !M! Dexterity." + }, + "collector:ChosenCard": { + "NAME": "Chosen", + "DESCRIPTION": "Apply !M! Weak. NL If the enemy does not intend to attack, apply !clm2! Vulnerable." + }, + "collector:ClericCard": { + "NAME": "Cleric", + "DESCRIPTION": "collector:Pyre. NL Gain !M! expansioncontent:Temp_HP." + }, + "collector:CultistCard": { + "NAME": "Cultist", + "DESCRIPTION": "collector:Pyre. NL Gain 1 Strength at the start of your next 3 turns." + }, + "collector:DaggerCard": { + "NAME": "Dagger", + "DESCRIPTION": "Lose !M! HP. NL Deal !D! damage." + }, + "collector:DarklingsCard": { + "NAME": "Darklings", + "DESCRIPTION": "collector:Pyre. NL Deal !D! damage. expansioncontent:Exhume a Collected card.", + "EXTENDED_DESCRIPTION": [ + "to create 2 copies of." + ] + }, + "collector:DesignerInSpireCard": { + "NAME": "Designer-In-Spire", + "DESCRIPTION": "Gain !M! expansioncontent:Temp_HP. NL collector:Torchhead gains \"Draw 1 card.\"" + }, + "collector:FinalBossCard": { + "NAME": "Endgame", + "DESCRIPTION": "Remove the enemy's Invincible buff and Stun them. NL Exhaust." + }, + "collector:FaceTraderCard": { + "NAME": "Face Trader", + "DESCRIPTION": "Add !M! random cards of any color into your hand. NL They become Ethereal." + }, + "collector:FatGremlinCard": { + "NAME": "Fat Gremlin", + "DESCRIPTION": "Deal !D! damage. NL Apply !M! Weak." + }, + "collector:FungiBeastCard": { + "NAME": "Fungi Beast", + "DESCRIPTION": "Apply !M! Vulnerable. NL Apply 1 Vulnerable to ALL enemies." + }, + "collector:GiantHeadCardStageOne": { + "NAME": "Tick", + "DESCRIPTION": "Next turn, gain a *Tock." + }, + "collector:GiantHeadCardStageTwo": { + "NAME": "Tock", + "DESCRIPTION": "Next turn, gain a *Headcrush." + }, + "collector:GiantHeadCardStageThree": { + "NAME": "Headcrush", + "DESCRIPTION": "Deal !D! damage to ALL enemies." + }, + "collector:GremlinLeaderCard": { + "NAME": "Gremlin Leader", + "DESCRIPTION": "Add !M! random Gremlin Collectibles into your hand." + }, + "collector:GremlinNobCard": { + "NAME": "Gremlin Nob", + "DESCRIPTION": "Whenever you play a Skill, gain !M! Vigor." + }, + "collector:GremlinWizardCard": { + "NAME": "Gremlin Wizard", + "DESCRIPTION": "Next turn, NL gain !M! Vigor and 1 collector:Reserve." + }, + "collector:JawWormCard": { + "NAME": "Jaw Worm", + "DESCRIPTION": "Gain !B! Block. NL Gain !M! Strength." + }, + "collector:JousterCard": { + "NAME": "Jouster", + "DESCRIPTION": "Deal !D! damage. NL If there's only one foe, gain !B! Block." + }, + "collector:LagavulinCard": { + "NAME": "Lagavulin", + "DESCRIPTION": "ALL enemies lose !M! Strength." + }, + "collector:LivingWallCard": { + "NAME": "Living Wall", + "DESCRIPTION": "collector:Pyre. NL Gain a random Upgraded card. NL It costs 0 until played." + }, + "collector:LouseCard": { + "NAME": "Louse", + "DESCRIPTION": "Gain 1 bronze:Blur. NL The next time you receive unblocked attack damage, gain !B! Block." + }, + "collector:MadGremlinCard": { + "NAME": "Mad Gremlin", + "DESCRIPTION": "Gain !M! Temporary Strength." + }, + "collector:MawCard": { + "NAME": "The Maw", + "DESCRIPTION": "Deal !D! damage." + }, + "collector:MerchantCard": { + "NAME": "Merchant", + "DESCRIPTION": "Add !M! random Colorless cards into your hand. NL They cost 0 this turn." + }, + "collector:MushroomCard": { + "NAME": "Mushroom", + "DESCRIPTION": "Deal !D! damage. NL Apply !M! Weak or Vulnerable at random." + }, + "collector:MysticCard": { + "NAME": "Mystic", + "DESCRIPTION": "Gain !M! expansioncontent:Temp_HP." + }, + "collector:NemesisCard": { + "NAME": "Nemesis", + "DESCRIPTION": "Gain 1 Intangible." + }, + "collector:NlothCard": { + "NAME": "N'Loth", + "DESCRIPTION": "collector:Pyre. NL Add a random Rare card into your hand. NL It costs 1 less.", + "UPGRADE_DESCRIPTION": "collector:Pyre. NL Add a random Rare card into your hand. NL It costs 0." + }, + "collector:OrbWalkerCard": { + "NAME": "Orb Walker", + "DESCRIPTION": "Deal !D! damage. NL Add !M! *Embers into your hand." + }, + "collector:PointyCard": { + "NAME": "Pointy", + "DESCRIPTION": "Deal !D! damage twice. NL Draw 1 card." + }, + "collector:RanwidCard": { + "NAME": "Ranwid", + "DESCRIPTION": "Gain an additional Potion and Card reward at the end of combat." + }, + "collector:RedSlaverCard": { + "NAME": "Red Slaver", + "DESCRIPTION": "Enemy loses !M! Strength this turn." + }, + "collector:ReptomancerCard": { + "NAME": "Reptomancer", + "DESCRIPTION": "Gain !M! expansioncontent:Temp_HP. NL collector:Torchhead gains \"Apply !clm2! Poison to a random enemy.\"" + }, + "collector:RepulsorCard": { + "NAME": "Repulsor", + "DESCRIPTION": "collector:Pyre. NL Draw !M! cards." + }, + "collector:RomeoCard": { + "NAME": "Romeo", + "DESCRIPTION": "Your next Attack costs 0 and deals !M! additional damage." + }, + "collector:ScrapOozeCard": { + "NAME": "Scrap Ooze", + "DESCRIPTION": "collector:Pyre. NL Lose 3 HP. NL Add !M! random Attacks into your hand. NL They cost 0 this turn." + }, + "collector:SentryCard": { + "NAME": "Sentry", + "DESCRIPTION": "Deal !D! damage. NL Apply !M! Weak. NL Repeat if there is a *Sentry in your exhaust pile." + }, + "collector:ShelledParasiteCard": { + "NAME": "Shelled Parasite", + "DESCRIPTION": "Gain !M! expansioncontent:Plated *Armor." + }, + "collector:ShieldGremlinCard": { + "NAME": "Shield Gremlin", + "DESCRIPTION": "Gain !B! Block." + }, + "collector:SnakePlantCard": { + "NAME": "Snake Plant", + "DESCRIPTION": "Deal !D! damage 3 times." + }, + "collector:SneakyGremlinCard": { + "NAME": "Sneaky Gremlin", + "DESCRIPTION": "Deal !D! damage. NL Draw 1 card." + }, + "collector:SneckoCard": { + "NAME": "Snecko", + "DESCRIPTION": "Draw !M! cards. NL sneckomod:Muddle your hand." + }, + "collector:SphericGuardianCard": { + "NAME": "Spheric Guardian", + "DESCRIPTION": "Gain !M! expansioncontent:Blur." + }, + "collector:SpikerCard": { + "NAME": "Spiker", + "DESCRIPTION": "Gain !M! Thorns." + }, + "collector:SpikeSlimeCard": { + "NAME": "Spike Slime", + "DESCRIPTION": "Gain !B! Block. NL Whenever you are attacked this turn, deal !M! damage back." + }, + "collector:SpireGrowthCard": { + "NAME": "Spire Growth", + "DESCRIPTION": "Enemy takes !M! damage at the end of each of its turns." + }, + "collector:SpireShieldCard": { + "NAME": "Spire Shield", + "DESCRIPTION": "Gain !M! Dexterity." + }, + "collector:SpireSpearCard": { + "NAME": "Spire Spear", + "DESCRIPTION": "Gain !M! Strength." + }, + "collector:SsserpentCard": { + "NAME": "Ssserpent", + "DESCRIPTION": "Deal !D! damage. NL Add a *Doubt into your hand." + }, + "collector:TaskmasterCard": { + "NAME": "Taskmaster", + "DESCRIPTION": "Apply !clm2! collector:Doom. NL Deal !D! damage. NL Gain !M! Strength." + }, + "collector:ThievesCard": { + "NAME": "Thieves", + "DESCRIPTION": "Take !M! less damage from attacks this turn." + }, + "collector:TorchHeadCard": { + "NAME": "Torch Head", + "DESCRIPTION": "Add a random Torchhead Call into your hand. NL It costs 0 this turn." + }, + "collector:TransientCard": { + "NAME": "Transient", + "DESCRIPTION": "Gain !M! Strength. NL Die in 6 turns." + }, + "collector:VagrantCard": { + "NAME": "Vagrant", + "DESCRIPTION": "Gain !M! collector:Reserve. NL Add a *Shame into your hand." + }, + "collector:WomanInBlueCard": { + "NAME": "Woman in Blue", + "DESCRIPTION": "Gain a random Potion. NL Lose ALL Potions at the end of combat." + }, + "collector:WrithingMassCard": { + "NAME": "Writhing Mass", + "DESCRIPTION": "Scry !M!. NL Play the top card of your draw pile." + }, + "collector:DefaultCollectibleCard": { + "NAME": "Soulless Husk", + "DESCRIPTION": "This foe doesn't have a unique Collectible yet! NL Gain !M! Strength and Dexterity." + }, + "collector:ShootingStar": { + "NAME": "Shooting Star", + "DESCRIPTION": "The first time you collector:Pyre an Attack each turn, gain a copy of it. NL It costs 0 until played." + }, + "collector:CollectorCard": { + "NAME": "Ouroboros", + "DESCRIPTION": "collector:Pyre. NL Apply !M! Weak. NL Apply !M! Vulnerable. NL Gain !clm2! Temporary_HP." + }, + "collector:Sapped": { + "NAME": "Sapped", + "DESCRIPTION": "collector:Pyre. NL When drawn, lose [E]. NL Exhaust. NL Cannot be removed from your deck." + } +} \ No newline at end of file diff --git a/src/main/resources/collectorResources/localization/zht/CharacterStrings.json b/src/main/resources/collectorResources/localization/zht/CharacterStrings.json new file mode 100644 index 000000000..8f54c460f --- /dev/null +++ b/src/main/resources/collectorResources/localization/zht/CharacterStrings.json @@ -0,0 +1,13 @@ +{ + "collector:theCollector": { + "NAMES": [ + "The Collector", + "the Collector" + ], + "TEXT": [ + "The notorious Sorceress of the City. NL Claims souls and trinkets alike.", + "NL Your staff glimmers with greenpyre...", + "Navigating an unlit street, you come across several hooded figures in the midst of some dark ritual. As you approach, they turn to you in eerie unison. The tallest among them bares fanged teeth and extends a long, pale hand towards you. NL ~\"Join~ ~us~ ~ghastly~ ~one,~ ~and~ ~feel~ ~the~ ~warmth~ ~of~ ~the~ ~Spire.\"~" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/collectorResources/localization/zht/EventStrings.json b/src/main/resources/collectorResources/localization/zht/EventStrings.json new file mode 100644 index 000000000..0e0dcd235 --- /dev/null +++ b/src/main/resources/collectorResources/localization/zht/EventStrings.json @@ -0,0 +1,3 @@ +{ + +} \ No newline at end of file diff --git a/src/main/resources/collectorResources/localization/zht/KeywordStrings.json b/src/main/resources/collectorResources/localization/zht/KeywordStrings.json new file mode 100644 index 000000000..7338dc72a --- /dev/null +++ b/src/main/resources/collectorResources/localization/zht/KeywordStrings.json @@ -0,0 +1,46 @@ +[ + { + "PROPER_NAME": "Afflicted", + "NAMES": [ + "afflicted" + ], + "DESCRIPTION": "Creatures are Afflicted when they are both #yVulnerable and #yWeak." + }, + { + "PROPER_NAME": "Doom", + "NAMES": [ + "doom", + "doomed" + ], + "DESCRIPTION": "Doomed creatures lose HP at the start of their turn, then Doom is removed #bunless the creature is #yAfflicted (has both #yWeak and #yVulnerable [REMOVE_SPACE])." + }, + { + "PROPER_NAME": "Pyre", + "NAMES": [ + "pyre" + ], + "DESCRIPTION": "Requires exhausting a card in hand in addition to paying its energy cost." + }, + { + "PROPER_NAME": "Reserve", + "NAMES": [ + "reserve", + "reserves" + ], + "DESCRIPTION": "An alternate type of Energy that is stored across turns." + }, + { + "PROPER_NAME": "Megathereal", + "NAMES": [ + "megathereal" + ], + "DESCRIPTION": "Megathereal cards move to the exhaust pile when played and at the end of your turn, no matter where they are." + }, + { + "PROPER_NAME": "Torch Head", + "NAMES": [ + "torchhead" + ], + "DESCRIPTION": "While you have #yTemporary #yHP, each Attack you play triggers Torchhead." + } +] \ No newline at end of file diff --git a/src/main/resources/collectorResources/localization/zht/MonsterStrings.json b/src/main/resources/collectorResources/localization/zht/MonsterStrings.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/src/main/resources/collectorResources/localization/zht/MonsterStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/collectorResources/localization/zht/OrbStrings.json b/src/main/resources/collectorResources/localization/zht/OrbStrings.json new file mode 100644 index 000000000..e4678fd00 --- /dev/null +++ b/src/main/resources/collectorResources/localization/zht/OrbStrings.json @@ -0,0 +1,8 @@ +{ +} + + + + + + diff --git a/src/main/resources/collectorResources/localization/zht/PotionStrings.json b/src/main/resources/collectorResources/localization/zht/PotionStrings.json new file mode 100644 index 000000000..1250ab190 --- /dev/null +++ b/src/main/resources/collectorResources/localization/zht/PotionStrings.json @@ -0,0 +1,36 @@ +{ + "collector:MiniCursePotion": { + "NAME": "Soul Extract", + "DESCRIPTIONS": [ + "Apply #b1 #yWeak, #b1 #yVulnerable, and #b6 #yDoom.", + "Apply #b", + " #yWeak, #b", + " #yVulnerable, and #b", + " #yDoom [REMOVE_SPACE]." + ] + }, + "collector:ReservePotion": { + "NAME": "Reserve Potion", + "DESCRIPTIONS": [ + "Gain #b2 #yReserve.", + "Gain #b", + " #yReserve [REMOVE_SPACE]." + ] + }, + "collector:DebuffDoublePotion": { + "NAME": "Embalming Oils", + "DESCRIPTIONS": [ + "Double the target's debuffs.", + "Multiply the target's debuffs by #b", + "." + ] + }, + "collector:TempHPPotion": { + "NAME": "Felwater", + "DESCRIPTIONS": [ + "Gain #b8 #yTemp. #yHP.", + "Gain #b", + " #yTemp. #yHP [REMOVE_SPACE]." + ] + } +} diff --git a/src/main/resources/collectorResources/localization/zht/PowerStrings.json b/src/main/resources/collectorResources/localization/zht/PowerStrings.json new file mode 100644 index 000000000..3447112c8 --- /dev/null +++ b/src/main/resources/collectorResources/localization/zht/PowerStrings.json @@ -0,0 +1,327 @@ +{ + "collector:AddCopyNextTurn": { + "NAME": "Gaining Card", + "DESCRIPTIONS": [ + "At the start of your next turn, add ", + " into your hand." + ] + }, + "collector:BindingCall": { + "NAME": "Binding Call", + "DESCRIPTIONS": [ + "Whenever you lose all your #yTemporary #yHP, apply #b", + " #yDoom to ALL enemies.", + "Translator Note: NOT USED" + ] + }, + "collector:CantTouchThis": { + "NAME": "Can't Touch This", + "DESCRIPTIONS": [ + "Whenever you fully block an attack, apply #b", + " #yDoom to the attacker." + ] + }, + "collector:Crackle": { + "NAME": "Crackle", + "DESCRIPTIONS": [ + "At the start of your turn, gain #b1 #yReserve.", + "At the start of your turn, gain #b", + " #yReserves." + ] + }, + "collector:DarkLordForm": { + "NAME": "Dark Lord Form", + "DESCRIPTIONS": [ + "At the start of your turn, play #yYou #yAre #yMine on a random enemy.", + "At the start of your turn, play #b", + " copies of #yYou #yAre #yMine on random enemies." + ] + }, + "collector:DarkLordFormPlus": { + "NAME": "Dark Lord Form+", + "DESCRIPTIONS": [ + "At the start of your turn, play #yYou #yAre #yMine+ on a random enemy.", + "At the start of your turn, play #b", + " copies of #yYou #yAre #yMine+ on random enemies." + ] + }, + "collector:DoMayhem": { + "NAME": "Do Mayhem", + "DESCRIPTIONS": [ + "At the start of your turn, if any enemy has #b", + " or more #yDoom, play the top card of your draw pile.", + " or more #yDoom, play the top #b", + " cards of your draw pile." + ] + }, + "collector:Doom": { + "NAME": "Doom", + "DESCRIPTIONS": [ + "Loses #b", + " HP at the start of its turn, removing all #yDoom unless they are #yAfflicted." + ] + }, + "collector:DoublePlayCollectibles": { + "NAME": "Multi-Play Collectibles", + "DESCRIPTIONS": [ + "Collected cards are played twice.", + "Collected cards are played #b", + " additional times." + ] + }, + "collector:DemisePower": { + "NAME": "Inevitable Demise", + "DESCRIPTIONS": [ + "Prevent the next time #yDoom would be removed from this enemy.", + "Prevent the next #b", + " times #yDoom would be removed from this enemy." + ] + }, + "collector:FeelMyPain": { + "NAME": "Feel My Pain", + "DESCRIPTIONS": [ + "Whenever you #yExhaust a card, a random enemy loses #b", + " HP." + ] + }, + "collector:HealIfDieThisTurn": { + "NAME": "Finalized", + "DESCRIPTIONS": [ + "When ", + " dies, heal #b", + " HP." + ] + }, + "collector:Karma": { + "NAME": "Karma", + "DESCRIPTIONS": [ + "At the end of your turn, if any enemy is #yAfflicted [REMOVE_SPACE], gain #b", + " #yBlock." + ] + }, + "collector:NextAttackAppliesDoom": { + "NAME": "Doomed Attack", + "DESCRIPTIONS": [ + "Your next Attack this turn applies #b", + " #yDoom." + ] + }, + "collector:AttacksApplyDoomPower": { + "NAME": "Doomed Attacks", + "DESCRIPTIONS": [ + "Attacks this turn applies #b", + " #yDoom." + ] + }, + "collector:NextCollectedTwice": { + "NAME": "Double Up", + "DESCRIPTIONS": [ + "Your next Collected card this turn is played twice.", + "Your next #b", + " Collected cards this turn are played twice." + ] + }, + "collector:NextTurnReserve": { + "NAME": "Next Turn Reserve", + "DESCRIPTIONS": [ + "At the start of your next turn, gain #b1 #yReserve.", + "At the start of your next turn, gain #b", + " #yReserves." + ] + }, + "collector:Omen": { + "NAME": "Omen", + "DESCRIPTIONS": [ + "Whenever you play a #yCollected card, gain #b", + " #yStrength." + ] + }, + "collector:ProtectingCall": { + "NAME": "Protecting Call", + "DESCRIPTIONS": [ + "At the start of your turn, if you have #yTemporary #yHP, gain #b", + " #yBlock.", + "Translator Note: NOT USED" + ] + }, + "collector:RagingCall": { + "NAME": "Raging Call", + "DESCRIPTIONS": [ + "At the end of your turn, if you have #yTemporary #yHP, deal #b", + " damage to ALL enemies.", + "Translator Note: NOT USED" + ] + }, + "collector:Reserve": { + "NAME": "Reserves", + "DESCRIPTIONS": [ + "You have #b1 #yReserve.", + "You have #b", + " #yReserves." + ] + }, + "collector:Soulforge": { + "NAME": "Soulforge", + "DESCRIPTIONS": [ + "At the start of your turn, add #b1 #yEmber into your hand.", + "At the start of your turn, add #b", + " #yEmbers into your hand." + ] + }, + "collector:StrengthOverTurns": { + "NAME": "Empower", + "DESCRIPTIONS": [ + "At the start of your next turn, gain #b", + " #yStrength.", + "At the start of your next #b", + " turns, gain #b" + ] + }, + "collector:Suffering": { + "NAME": "Suffering", + "DESCRIPTIONS": [ + "Whenever you apply #yWeak or #yVulnerable, also apply #b", + " #yDoom." + ] + }, + "collector:TorchHead": { + "NAME": "Torch Head", + "DESCRIPTIONS": [ + "Whenever you play an #yAttack, if you have #yTemporary #yHP, Torch Head: NL ", + "Applies #b", + " #yDoom to a random enemy.", + "Deals #b", + " damage to ALL enemies.", + "Grants you #b", + " #yBlock.", + " #yPoison to a random enemy.", + "Draws you #b", + " card.", + " cards." + ] + }, + "collector:IncreasedCollectionDraw": { + "NAME": "Increased Collection Draw", + "DESCRIPTIONS": [ + "Draw #b1 additional Collected card each turn.", + "Draw #b", + " additional Collected cards each turn." + ] + }, + "collector:MastersCall": { + "NAME": "Master's Call", + "DESCRIPTIONS": [ + "Whenever you play an Attack, if you have #yTemporary #yHP, deal #b", + " damage to a random enemy.", + "Translator Note: NOT USED" + ] + }, + "collector:LouseCard": { + "NAME": "Curl Up", + "DESCRIPTIONS": [ + "When you next receive unblocked attack damage, gain #b", + " #yBlock." + ] + }, + "collector:MadGremlinCard": { + "NAME": "Angry", + "DESCRIPTIONS": [ + "If you receive unblocked attack damage this turn, add a #yMad #yGremlin into your hand.", + "If you receive unblocked attack damage this turn, add #b", + " #yMad #yGremlins into your hand." + ] + }, + "collector:GremlinWizardCard": { + "NAME": "Charging Up", + "DESCRIPTIONS": [ + "Next turn, gain #b", + " #yVigor." + ] + }, + "collector:ThievesCard": { + "NAME": "Dodgy", + "DESCRIPTIONS": [ + "Take #b", + " less damage from attacks this turn." + ] + }, + "collector:BookOfStabbingCard": { + "NAME": "Stabby", + "DESCRIPTIONS": [ + "Whenever you deal unblocked attack damage, apply #b", + " #yDoom." + ] + }, + "collector:TransientCard": { + "NAME": "Fading", + "DESCRIPTIONS": [ + "At the end of your turn, #rdie.", + "In #b", + " turns, #rdie." + ] + }, + "collector:ReptomancerCard": { + "NAME": "Toxic Call", + "DESCRIPTIONS": [ + "At the end of your turn, if you have #yTemporary #yHP, apply #b", + " #yPoison to a random enemy." + ] + }, + "collector:MoreBlockWithTempHP": { + "NAME": "Thimble Helm", + "DESCRIPTIONS": [ + "While you have #yTemporary #yHP, gain #b", + " more #yBlock from cards." + ] + }, + "collector:NextTurnVigor": { + "NAME": "Vigor Next Turn", + "DESCRIPTIONS": [ + "At the start of your next turn, gain #b", + " #yVigor." + ] + }, + "collector:AcidSlimeCard": { + "NAME": "Slimy Duplication", + "DESCRIPTIONS": [ + "Your next #yAttack or #ySkill this turn is played twice.", + "Your next #b", + " #yAttacks or #ySkills this turn are played twice." + ] + }, + "collector:GremlinNobCard": { + "NAME": "Angery", + "DESCRIPTIONS": [ + "Whenever you play a #ySkill, gain #b", + " #yVigor." + ] + }, + "collector:LanternFlare": { + "NAME": "Scorched", + "DESCRIPTIONS": [ + "At the end of its turn, gains #b", + " #yDoom." + ] + }, + "collector:WomanInBlueCard": { + "NAME": "Woman in Blue", + "DESCRIPTIONS": [ + "At the end of combat, lose all your Potions." + ] + }, + "collector:ShootingStar": { + "NAME": "Shooting Star", + "DESCRIPTIONS": [ + "The first time you #yPyre an #yAttack each turn, return it to your hand. It costs #b0 until played.", + "The first #b", + " times you #yPyre an #yAttack each turn, return it to your hand. It costs #b0 until played." + ] + }, + "collector:LoseHpNextTurn": { + "NAME": "Deathmarked", + "DESCRIPTIONS": [ + "At the end of its turn, loses #b", + " HP." + ] + } +} diff --git a/src/main/resources/collectorResources/localization/zht/RelicStrings.json b/src/main/resources/collectorResources/localization/zht/RelicStrings.json new file mode 100644 index 000000000..c02a127ff --- /dev/null +++ b/src/main/resources/collectorResources/localization/zht/RelicStrings.json @@ -0,0 +1,125 @@ +{ + "collector:EmeraldTorch": { + "NAME": "Emerald Torch", + "FLAVOR": "The fires of greed never fade.", + "DESCRIPTIONS": [ + "Start each combat with #b1 #ycollector:Reserve." + ] + }, + "collector:PrismaticTorch": { + "NAME": "Prismatic Torch", + "FLAVOR": "The ever-changing flames reflect fortune's favor.", + "DESCRIPTIONS": [ + "Replaces ", + " [REMOVE_SPACE].[] At the start of each combat, add #b2 #yEmbers into your hand. The first time you #yExhaust an #yEmber each turn, gain #b1 #ycollector:Reserve [REMOVE_SPACE]." + ] + }, + "collector:HolidayCoal": { + "NAME": "Krampian Coal", + "FLAVOR": "\"Intriguing! But why only specific chimneys?\" - Ranwid", + "DESCRIPTIONS": [ + "When you would draw from an empty Collected pile, add a #yLucky #yWick to your hand." + ] + }, + "collector:BagOfTricks": { + "NAME": "Bag of Tricks", + "FLAVOR": "Tricky.", + "DESCRIPTIONS": [ + "At the start of each combat, draw #b", + " Collected cards." + ] + }, + "collector:JadeRing": { + "NAME": "Jade Ring", + "FLAVOR": "Jade is the symbol of honesty.", + "DESCRIPTIONS": [ + "Enemies take #b", + " more damage from #ycollector:Doom [REMOVE_SPACE]." + ] + }, + "collector:SoullitLamp": { + "NAME": "Soul-lit Lamp", + "FLAVOR": "A ghoulish decoration. The crackles of fire are replaced by buzzing wails.", + "DESCRIPTIONS": [ + "Upon pickup, gain #b3 #yEssence [REMOVE_SPACE]. At the start of combat, add an #yEmber into your hand." + ] + }, + "collector:ThimbleHelm": { + "NAME": "Thimble Helm", + "FLAVOR": "Worn by the Spire's miniest heroes.", + "DESCRIPTIONS": [ + "Start each combat with #b", + " #yTemporary_HP [REMOVE_SPACE]. While you have #yTemporary_HP [REMOVE_SPACE], cards grant #b1 additional #yBlock [REMOVE_SPACE]." + ] + }, + "collector:Incense": { + "NAME": "Incense", + "FLAVOR": "An antiquated form of mental clarification.", + "DESCRIPTIONS": [ + "You cannot gain #yWeak [REMOVE_SPACE], #yVulnerable or #yFrail while you are #yWeak [REMOVE_SPACE], #yVulnerable or #yFrail [REMOVE_SPACE]." + ] + }, + "collector:FuelCanister": { + "NAME": "Fuel Canister", + "FLAVOR": "Disgusting.", + "DESCRIPTIONS": [ + "At the end of your turn, #yRetain the lowest-cost card in your hand." + ] + }, + "collector:AutoCurser": { + "NAME": "Hexx Talisman", + "FLAVOR": "\"When I put this on, my rate of toe-stubbing increased drastically. I think it works!\" - Ranwid", + "DESCRIPTIONS": [ + "At the start of combat, apply #b1 #yWeak and #yVulnerable to a random enemy." + ] + }, + "collector:Bagpipes": { + "NAME": "The Bagpipes", + "FLAVOR": "This dreaded instrument is said to have driven Kublai the Great mad.", + "DESCRIPTIONS": [ + "Whenever you apply new #yWeak or #yVulnerable to an enemy, increase the amount applied by #b1 [REMOVE_SPACE]." + ] + }, + "collector:BottledCollectible": { + "NAME": "Bottled Brain", + "FLAVOR": "Collected from a wizard's laboratory.", + "DESCRIPTIONS": [ + "Upon pickup, #yUpgrade a card in your Collection. Start combats with it on top of your Collected pile.", + "Start combat with ", + " on top of your Collected pile.", + "Select a card to bottle for " + ] + }, + "collector:TheContract": { + "NAME": "The Contract", + "FLAVOR": "Sign in blood.", + "DESCRIPTIONS": [ + "Upon pickup, gain #b10 #yEssence [REMOVE_SPACE]." + ] + }, + "collector:ForbiddenFruit": { + "NAME": "Forbidden Fruit", + "FLAVOR": "This species of fruit looks completely unfamiliar.", + "DESCRIPTIONS": [ + "Upon pickup, choose and obtain one Common, Uncommon, and Rare card from all available. Then, obtain a #ySapped [REMOVE_SPACE].", + "Choose a Rare card to add to your deck.", + "Choose an Uncommon card to add to your deck.", + "Choose a Common card to add to your deck." + ] + }, + "collector:RoughDiamond": { + "NAME": "Rough Diamond", + "FLAVOR": "With the mines demolished, even this tarnished stone is valuable.", + "DESCRIPTIONS": [ + "The first time you play a #yRare card each turn, gain [E] . Upon pickup, obtain a #yRare card reward.", + "Knowledge!" + ] + }, + "collector:BlockedChakra": { + "NAME": "Blocked Chakra", + "FLAVOR": "One pulled muscle is all it takes.", + "DESCRIPTIONS": [ + "Gain [E] at the start of your turn. You don't draw from your Collected pile until your 4th turn." + ] + } +} \ No newline at end of file diff --git a/src/main/resources/collectorResources/localization/zht/RunModStrings.json b/src/main/resources/collectorResources/localization/zht/RunModStrings.json new file mode 100644 index 000000000..7a73a41bf --- /dev/null +++ b/src/main/resources/collectorResources/localization/zht/RunModStrings.json @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/src/main/resources/collectorResources/localization/zht/UIStrings.json b/src/main/resources/collectorResources/localization/zht/UIStrings.json new file mode 100644 index 000000000..9dd93dbae --- /dev/null +++ b/src/main/resources/collectorResources/localization/zht/UIStrings.json @@ -0,0 +1,110 @@ +{ + "collector:CollectionReward": { + "TEXT": [ + "Choose a card to Collect." + ] + }, + "collector:CollectibleCardTab": { + "TEXT": [ + "Collectible" + ] + }, + "collector:CollectionScreen": { + "TEXT": [ + "Hide", + "Your Collection starts combat with all cards here." + ] + }, + "collector:CollectionUITopPanel": { + "TEXT": [ + "Collection", + "View all cards in your Collection.", + "These cards start in your Collected pile each combat." + ] + }, + "collector:CombatCollectionPileButton": { + "TEXT": [ + "Collected Pile", + "This contains the Collected cards you have yet to draw this combat. You draw one card from this at the start of each turn.", + "I don't have any Collected cards!" + ] + }, + "collector:EssenceCount": { + "TEXT": [ + "Essences", + "Spend Essences on adding cards to your Collection. Combat rooms grant #b1 #yEssence. Elites give #b2 #yEssence, Bosses give #b3! NL You have #b", + " Essences." + ] + }, + "collector:CombatCollectionViewScreen": { + "TEXT": [ + "Combat collection view screen" + ] + }, + "collector:PyreInfo": { + "TEXT": [ + "Pyre", + "To play this card, pay the additional cost of Exhausting cards from your hand." + ] + }, + "collector:CollectedCardMod": { + "TEXT": [ + "collector:Megathereal. NL ", + "Collected" + ] + }, + "collector:CollectibleCardReward": { + "TEXT": [ + "Collected: ", + "You may obtain this" + ] + }, + "collector:HoardedMod": { + "TEXT": [ + "Unplayable. Retain. NL ", + "Unplayable. NL ", + "Retain. NL " + ] + }, + "collector:SecondEnergyOrb": { + "TEXT": [ + "Reserves", + "A special kind of Energy that persists across turns." + ] + }, + "collector:PyreCostSpendScreen": { + "TEXT": [ + "Exhaust for Pyre." + ] + }, + "collector:PyreModText": { + "TEXT": [ + "I don't have a card to Exhaust!" + ] + }, + "collector:StashAwayCampfireOption": { + "TEXT": [ + "Release", + "Remove a Collected Card. Gain ", + " Souls.", + "Requires a Collected card.", + "Select a Collected card to remove." + ] + }, + "collector:BonusEventOption": { + "TEXT": [ + "[Take]" + ] + }, + "collector:EssenceReward": { + "TEXT": [ + "Gain ", + " Essence." + ] + }, + "collector:CharacterOption": { + "TEXT": [ + "Essences: " + ] + } +} diff --git a/src/main/resources/downfallResources/images/cards/CurseOfBlood.png b/src/main/resources/downfallResources/images/cards/CurseOfBlood.png new file mode 100644 index 000000000..c5c2bcc53 Binary files /dev/null and b/src/main/resources/downfallResources/images/cards/CurseOfBlood.png differ diff --git a/src/main/resources/downfallResources/images/cards/CurseOfBlood_p.png b/src/main/resources/downfallResources/images/cards/CurseOfBlood_p.png new file mode 100644 index 000000000..dd57252f6 Binary files /dev/null and b/src/main/resources/downfallResources/images/cards/CurseOfBlood_p.png differ diff --git a/src/main/resources/downfallResources/images/menustuff/eng/menuSOP.png b/src/main/resources/downfallResources/images/menustuff/eng/menuSOP.png new file mode 100644 index 000000000..835bd2b7f Binary files /dev/null and b/src/main/resources/downfallResources/images/menustuff/eng/menuSOP.png differ diff --git a/src/main/resources/downfallResources/images/menustuff/zhs/menuSOP.png b/src/main/resources/downfallResources/images/menustuff/zhs/menuSOP.png new file mode 100644 index 000000000..835bd2b7f Binary files /dev/null and b/src/main/resources/downfallResources/images/menustuff/zhs/menuSOP.png differ diff --git a/src/main/resources/downfallResources/images/relics/BlackCandle.png b/src/main/resources/downfallResources/images/relics/BlackCandle.png new file mode 100644 index 000000000..88253e8f1 Binary files /dev/null and b/src/main/resources/downfallResources/images/relics/BlackCandle.png differ diff --git a/src/main/resources/downfallResources/images/relics/Burden.png b/src/main/resources/downfallResources/images/relics/Burden.png new file mode 100644 index 000000000..c91d2aaf0 Binary files /dev/null and b/src/main/resources/downfallResources/images/relics/Burden.png differ diff --git a/src/main/resources/downfallResources/images/relics/Outline/BlackCandleOutline.png b/src/main/resources/downfallResources/images/relics/Outline/BlackCandleOutline.png new file mode 100644 index 000000000..a83a58f62 Binary files /dev/null and b/src/main/resources/downfallResources/images/relics/Outline/BlackCandleOutline.png differ diff --git a/src/main/resources/downfallResources/images/relics/Outline/Burden.png b/src/main/resources/downfallResources/images/relics/Outline/Burden.png new file mode 100644 index 000000000..555fb40ba Binary files /dev/null and b/src/main/resources/downfallResources/images/relics/Outline/Burden.png differ diff --git a/src/main/resources/downfallResources/localization/eng/CardStrings.json b/src/main/resources/downfallResources/localization/eng/CardStrings.json index bc467a83f..3059bf71e 100644 --- a/src/main/resources/downfallResources/localization/eng/CardStrings.json +++ b/src/main/resources/downfallResources/localization/eng/CardStrings.json @@ -13,7 +13,7 @@ }, "downfall:Haunted": { "NAME": "Haunted", - "DESCRIPTION": "Ethereal. Unplayable. NL When drawn, add Ethereal to all cards in your hand." + "DESCRIPTION": "Unplayable. Ethereal. NL Whenever another card is *Exhausted when this is in hand, take !M! damage." }, "downfall:Malfunctioning": { "NAME": "Flawed", @@ -23,6 +23,11 @@ "NAME": "Scatterbrained", "DESCRIPTION": "At the end of your turn, if this is in your hand, add a copy of it to your discard pile. NL Exhaust." }, + "downfall:CurseOfBlood": { + "NAME": "Haemophilia", + "DESCRIPTION": "Lose [E] at the start of your next turn. NL Exhaust.", + "EXTENDED_DESCRIPTION": ["Note for LOC: Hemophilia is a name for a disorder for when your blood doesn’t clot properly. I added the a in the middle for coolness factor."] + }, "downfall:SummonMushrooms": { "NAME": "Fungus Among Us", "DESCRIPTION": "Kill all Mushrooms. Heal HP equal to their remaining HP. NL Summon two Mushrooms." diff --git a/src/main/resources/downfallResources/localization/eng/CharacterStrings.json b/src/main/resources/downfallResources/localization/eng/CharacterStrings.json index c652692a6..4e022d69a 100644 --- a/src/main/resources/downfallResources/localization/eng/CharacterStrings.json +++ b/src/main/resources/downfallResources/localization/eng/CharacterStrings.json @@ -109,7 +109,7 @@ "..and so...... shall... NL ....I......" ], "OPTIONS": [ - "~I~ ~brought...~ NL ~HIM...~ ~back...~ ~And...~ ~took...~ ~his~ ~soul...~", + "~I~ ~brought...~ NL ~HIM...~ ~back...~", "~Protect~ ~me...~ NL ~And~ ~be...~ ~rewarded...~" ] }, diff --git a/src/main/resources/downfallResources/localization/eng/EventStrings.json b/src/main/resources/downfallResources/localization/eng/EventStrings.json index 587861ed5..2d0b7c135 100644 --- a/src/main/resources/downfallResources/localization/eng/EventStrings.json +++ b/src/main/resources/downfallResources/localization/eng/EventStrings.json @@ -108,7 +108,7 @@ "OPTIONS": [ "[Donate] #rLose #r150 #rSouls. #gGain #g10 #gMax #gHP #gand #gFully #gHeal.", "[Locked] Requires 150 Souls.", - "[Donate] #rLose #r150 #rSouls. #gEach #gGremlin #gGains #g2 #gMax #gHP #gand #the #gAlive #gOnes #gFully #gHeal.", + "[Donate] #rLose #r150 #rSouls. #gGain #g2 #gMax #gHP #gand #gFully #gHeal #gGremlins.", "[Take]" ] }, @@ -214,9 +214,10 @@ "You walk around it, wondering what could have been." ], "OPTIONS": [ - "[Enter] #gUpgrade #g3 #grandom #gcards. #rBecome #rCursed #r- #rFlawed.", + "[Enter] #gUpgrade #g", "[Leave]", - "[Locked] Requires: Upgradeable Cards" + "[Locked] Requires: Upgradeable Cards", + " #grandom #gcards. #rBecome #rCursed #r- #rFlawed." ] }, "downfall:WorldOfGoop": { @@ -283,7 +284,7 @@ "You decide to leave the soul alone and continue on your way." ], "OPTIONS": [ - "[Set Trap] #rLose #ra #rStrike.", + "[Set Trap] #gRemove #ga #gStrike.", "[Harvest] #gGain #y", " #ySouls.", "[Leave]", @@ -330,7 +331,8 @@ "NAME": "Forgotten Altar", "DESCRIPTIONS": [ "You stand on the altar and channel the spiritual energy from your inner being. NL As the #bsouls spill out in an offering to the goddess, the arms of the statue reach out and emanate a soothing #p~cursed~ #p~magic.~ NL Everything goes dark. NL You wake up a short time later, your wounds and injuries from battle suddenly healed.", - "After taking a brief moment to admire the evil that resides within the statue, you depart, continuing through the City." + "After taking a brief moment to admire the evil that resides within the statue, you depart, continuing through the City.", + "You decide to leave without making an offering to the statue, but you feel some lingering #pshame that you didn't make an offering at all." ], "OPTIONS": [ "[Offer Souls] #rLose #r", @@ -338,7 +340,8 @@ " #gHP.", "[Locked] Requires ", " Souls.", - "[Leave]" + "[Leave]", + "[Leave] #rBecome #rCursed #r- #rShame." ] }, "downfall:Bandits": { @@ -432,13 +435,13 @@ "[Return Statue] #rLose #rBroken #rWing #rStatue. #gGain #gmany #grewards.", "[Locked] Requires Broken Wing Statue.", "[Accept] #gGain #gCultist #gPotion.", - "[Steal] #gObtain Ritual Dagger. #rLose #r", + "[Steal] #gObtain #gRitual #gDagger. #rLose #r", " #rHP.", "[Leave]", "[Continue]", "[Take Dagger] #gGain #gRitual #gDagger.", "[Anoint] #gUpgrade #gRitual #gDagger.", - "[Sacrifice] #rKill #rCultist with Ritual Dagger+.", + "[Sacrifice] #rKill #rCultist #rwith #rRitual #rDagger+.", "[Be Praised] #gGain #grewards for returning the #gBroken #gWing #gStatue." ] }, @@ -453,8 +456,8 @@ "You deciding that, though it is tempting, fighting here would be an unnecessary distraction. Your journey continues on, and you leave the slavers to resume their ambush." ], "OPTIONS": [ - "[Challenge] #rFight Arena Champions. #gGain #gmany #grewards.", - "[Participate] #rFight Captive Hero. #gGain #gmany #grewards.", + "[Challenge] #rFight #rArena #rChampions. #gGain #gmany #grewards.", + "[Participate] #rFight #rCaptive #rHero. #gGain #gmany #grewards.", "[Leave]", "[FIGHT!]", "[Continue]" @@ -470,10 +473,10 @@ "OPTIONS": [ "[I am an Echo] #rFight #ryourself. #gObtain #ga #gRare #gRelic.", "[I am Gorged] #gGain #g999 #gSouls. #rCursed #r- #r2 #rNormality.", - "[I am Complete] #gUpgrade #gall #gCards. #rLose #rHeart #rBlessings.", + "[I am Complete] #gUpgrade #gall #gCards. #rYou #rcan #rno #rlonger #rheal.", "[Locked] Requires all 3 Heart Blessings.", "[Leave]", - "[I am Complete] #gUpgrade #gall #gCards. #rLose #rHeart #rBlessings and #r2 #rMax #rHP." + "[I am Complete] #gUpgrade #gall #gCards. #rBecome #rBurdened." ] }, "downfall:MoaiHead": { @@ -556,7 +559,7 @@ "downfall:Joust": { "NAME": "The Joust", "DESCRIPTIONS": [ - "As you make your way through the large buildings you come across a long narrow bridge and spot knights on either side, facing one another. You approach and they scatter, glaring at one another. NL \"Monster! YOU fight it, if you're so good at killing things!\" NL \"No, YOU fight it! You know monsters better, what with that ~demonic~ ~cat!~\" NL NL They won't stop bickering. You'll have to decide...", + "As you make your way through the large buildings you come across a long narrow bridge and spot knights on either side, facing one another. You approach and they scatter, glaring at one another. NL \"Monster! YOU fight it, if you're so good at killing things!\" NL \"No, YOU fight it! You know monsters better, what with that ~demonic~ ~cat!~ \" NL NL They won't stop bickering. You'll have to decide...", "This knight was clearly stronger than the other one, and you tried your best but were ultimately thrashed. NL \"I'd like to see you best a beast like that!\" he says to the other knight as they leave, bickering.", "You ruthlessly avoid the knight's attacks and #rkill him, sucking his #gsouls out gleefully. The other knight screams and flees. What a coward...", "The cowardly knight gives you a few pesky scratches from afar with his longsword, then runs away screaming. The other knight runs after him, angry. You return to your work, annoyed.", @@ -616,10 +619,11 @@ "DESCRIPTIONS": [ "Only you should hold this power. You shatter the shrine into pieces. NL A dark wail echoes all around you, and you can feel the Shrine's #p~cursed~ #p~magic~ seep into your bones." ], "OPTIONS": [ - "[Desecrate] #gDuplicate #g2 #gcards. #rCursed #r- #rSapped.", - "[Desecrate] #gRemove #g3 #gcards. #rCursed #r- #rSapped.", - "[Desecrate] #gTransform #g3 #gcards. #rCursed #r- #rSapped.", - "[Desecrate] #gUpgrade #g2 #gcards. #rCursed #r- #rSapped." + "[Desecrate] #gDuplicate #g2 #gcards. #rCursed #r- #rAged.", + "[Desecrate] #gRemove #g2 #gcards. #rLose #r", + " #rMax #rHP.", + "[Desecrate] #gTransform #g3 #gcards. #rCursed #r- #rFlawed.", + "[Desecrate] #gUpgrade #g2 #gcards. #rCursed #r- #rPain." ] } } diff --git a/src/main/resources/downfallResources/localization/eng/PowerStrings.json b/src/main/resources/downfallResources/localization/eng/PowerStrings.json index 76e370ccd..a8dbbe2a5 100644 --- a/src/main/resources/downfallResources/localization/eng/PowerStrings.json +++ b/src/main/resources/downfallResources/localization/eng/PowerStrings.json @@ -49,8 +49,8 @@ "downfall:FearNoEvil": { "NAME": "Fear No Evil", "DESCRIPTIONS": [ - "If you play an attack card this turn, this enemy will change stance to #yCalm once it plays its #yFear #yNo #yEvil card.", - "This enemy will change stance to #yCalm once it plays its #yFear #yNo #yEvil card." + "If you play an attack card this turn, Watcher will change her stance to #yCalm once she plays her #yFear #yNo #yEvil card.", + "Watcher will change her stance to #yCalm once she plays her #yFear #yNo #yEvil card." ] }, "downfall:PoisonResist": { @@ -88,9 +88,14 @@ "downfall:WatcherSkillPower": { "NAME": "Prey on Disharmony", "DESCRIPTIONS": [ - "Whenever you play a skill, Watcher gains #b", - " temporary #yStrength.", - "Whenever you play a skill, Watcher gains #yTemporary #yStrength [REMOVE_SPACE]." + "Whenever you play an #yAttack, Watcher gains #b", + " temp. #yDexterity, #b", + " temp. #yStrength when you play a #ySkill, and #b", + " of both when you play a #yPower.", + "If you play more than #b", + " cards in a turn, Watcher removes ALL of her debuffs.", + "You have played #b", + " cards this turn." ] }, "downfall:WrathNextTurnPower": { @@ -110,7 +115,7 @@ "downfall:WatcherDivinityPower": { "NAME": "Fleeting Faith", "DESCRIPTIONS": [ - "Watcher gains #b1 #yMantra whenever you play a card. NL Watcher loses #b5 #yMantra at the start of her turn. NL Watcher does not exit #yDivinity at the end of her turn." + "Watcher gains #b1 #yMantra whenever you play a card. NL Whenever Watcher enters #yDivinity, she gains #b3 #yStrength. NL Watcher loses #b5 #yMantra at the start of her turn. NL Watcher does not exit #yDivinity at the end of her turn." ] }, "downfall:NeowFleetingFaith": { @@ -158,7 +163,7 @@ "downfall:DefectVoidPower": { "NAME": "Energy Thief", "DESCRIPTIONS": [ - "Whenever Defect generates a #yVoid, it goes to the top of your draw pile." + "Whenever Defect generates a #yVoid, it goes into YOUR discard pile." ] }, "downfall:NeowEnergyThief": { @@ -170,7 +175,7 @@ "downfall:DefectAncientConstructPower": { "NAME": "Ancient Construct", "DESCRIPTIONS": [ - "Begins the fight with 2 #yBronze #yOrb minions. NL Gains 1 #yArtifact at the end of its turn if it did not already have #yArtifact [REMOVE_SPACE]." + "Begins the fight with 2 #yBronze #yOrb minions. NL Defect's #yCore #ySurges do not #yExhaust." ] }, "downfall:NeowAncientConstruct": { @@ -182,14 +187,24 @@ "downfall:DefectCuriosity": { "NAME": "Unbiased Cognition", "DESCRIPTIONS": [ - "Whenever you play a #yPower card, Defect gains #b", - " #yFocus." + "Whenever you play a #yPower [REMOVE_SPACE], Defect gains #b", + " #yFocus [REMOVE_SPACE].", + " Changes to Defect's #yStrength also affect their #yFocus [REMOVE_SPACE]." + ] + }, + "downfall:DefectBiasCuriosity": { + "NAME": "Bias", + "DESCRIPTIONS": [ + "Defect starts combat with #b4 #yFocus and gains #b1 more whenever you play a #yPower [REMOVE_SPACE], but also loses #b1 #yFocus at the start of their turn.", + "Defect loses #b", + " #yFocus", + " at the end of their turn." ] }, "downfall:DefectCuriosityLighning": { "NAME": "Unbiased Cognition", "DESCRIPTIONS": [ - "Whenever you play a #yPower card, Defect channels #b", + "Whenever you play a #yPower [REMOVE_SPACE], Defect channels #b", " #yLightning #yOrb [REMOVE_SPACE]." ] }, @@ -239,7 +254,7 @@ "downfall:MerchantStrengthPower": { "NAME": "Soul Stealer", "DESCRIPTIONS": [ - "Merchant still has the #yStrength it earned from Soul Steal this run, and gains an equal amount of #yDexterity [REMOVE_SPACE]." + "Merchant has double the #yStrength it earned from Soul Steal this run, and gains an equal amount of #yDexterity [REMOVE_SPACE]." ] }, "downfall:NeowMantra": { @@ -341,7 +356,7 @@ "downfall:HermitWheelOfFortune": { "NAME": "Wheel of Fortune", "DESCRIPTIONS": [ - "After you play an #yAttack, Hermit #yCycles his first card. Hermit's card cost can't change." + "After you play an #yAttack, Hermit #yCycles his first card. Hermit's card cost can't change. Whenever Hermit draws #rNecronomicurse, he gains #b2 Strength." ] }, "downfall:HermitDoomsday": { @@ -375,9 +390,10 @@ "DESCRIPTIONS": [ "BUG! You should not see this", "Next turn, gain #b", - " ", - ".", - "LOCALIZATION NOTE: Please keep the space after 'Next Turn' in the NAME field." + " #y", + " [REMOVE_SPACE].", + "LOCALIZATION NOTE: Please keep the space after 'Next Turn' in the NAME field.", + "finalized text should look like this: Next turn, gain #b7 #yVigor [REMOVE_SPACE]." ] }, "downfall:NeowStayAt1Hp": { diff --git a/src/main/resources/downfallResources/localization/eng/RelicStrings.json b/src/main/resources/downfallResources/localization/eng/RelicStrings.json index 75291ec72..6f18b0747 100644 --- a/src/main/resources/downfallResources/localization/eng/RelicStrings.json +++ b/src/main/resources/downfallResources/localization/eng/RelicStrings.json @@ -416,7 +416,8 @@ "NAME": "Sharpened Fragment", "FLAVOR": "Once a broken statue - now a makeshift weapon.", "DESCRIPTIONS": [ - "At the start of each combat, gain a #yBloody #ySacrifice." + "During Elite and Boss combats, whenever you play a #yPower [REMOVE_SPACE], gain #b", + " #yStrength [REMOVE_SPACE]." ] }, "downfall:RedIOU": { @@ -442,28 +443,35 @@ "NAME": "Knowing Skull", "FLAVOR": "Put me down!", "DESCRIPTIONS": [ - "At the start of each combat, you may wish for Souls, Potions , or a Colorless card at the price of HP." + "At the start of each combat, you may wish for Souls, Potions, or a Colorless card at the price of HP." ] }, "downfall:HeartBlessingRed": { "NAME": "Ruby Heart Blessing", "FLAVOR": "The heart is strong.", "DESCRIPTIONS": [ - "Start Boss combats with #b1 #yStrength." + "Start Boss combats with #b1 #yStrength [REMOVE_SPACE]." ] }, "downfall:HeartBlessingBlue": { "NAME": "Sapphire Heart Blessing", "FLAVOR": "The heart is pleased.", "DESCRIPTIONS": [ - "Start Boss combats with #b10 #yTemporary #yHP." + "At the start of Boss combats, heal #b10 HP." ] }, "downfall:HeartBlessingGreen": { "NAME": "Emerald Heart Blessing", "FLAVOR": "The heart is everything.", "DESCRIPTIONS": [ - "Start Boss combats with #b1 #yDexterity." + "Start Boss combats with #b1 #yDexterity [REMOVE_SPACE]." + ] + }, + "downfall:BurdenOfKnowledge": { + "NAME": "Burden of Knowledge", + "FLAVOR": "The truth hurts.", + "DESCRIPTIONS": [ + "Upon pickup, #rlose #rALL #rHeart #rBlessings and #b20 Max HP. Permanently #yUpgrade #rALL cards #rEVERYWHERE [REMOVE_SPACE]. Start combats with #b2 less #yStrength and #yDexterity [REMOVE_SPACE]." ] }, "downfall:TeleportStone": { @@ -487,7 +495,16 @@ "NAME": "Hecktoplasm", "FLAVOR": "This blob of slime seems to pulse with the energy of hundreds of souls. No wonder no one wanted it.", "DESCRIPTIONS": [ - "Gain [E] at the start of your turn. You can no longer gain #ySouls. Breaking Keys costs no #ySouls." + "Gain [E] at the start of your turn. You can no longer gain #ySouls [REMOVE_SPACE]. Breaking Keys costs no #ySouls [REMOVE_SPACE].", + "Hecktoplasm" + ] + }, + "downfall:BlackCandle": { + "NAME": "Black Candle", + "FLAVOR": "The flame shines even brighter from within the darkness.", + "DESCRIPTIONS": [ + "#yUnplayable #rCurse cards can now be played and playable #rCurses cost #b0 [REMOVE_SPACE]. Whenever you play an #yUnplayable or discounted #rCurse [REMOVE_SPACE], #yExhaust it and lose #b1 HP.", + "Black Candle" ] }, "downfall:replacements": { @@ -524,17 +541,24 @@ "NAME": "Extra Cursed Key", "FLAVOR": "Locked away for good reason.", "DESCRIPTIONS": [ - "Gain [E] at the start of your turn. NL Whenever you open a non-Boss chest, obtain #b2 random #rCurses." + "Gain [E] the first time you draw a #rCurse each turn. NL Whenever you open a non-Boss chest, obtain an #rInjury [REMOVE_SPACE]." ] }, "downfall:ExtraCursedBell": { "NAME": "Extra Cursed Bell", "FLAVOR": "You think you hear it echoing, but can never confirm it.", "DESCRIPTIONS": [ - "Upon pickup, obtain #b2 of a unique #rCurse and #b3 relics.", + "Upon pickup, obtain a unique #rCurse and #b3 Common relics.", "The Bell Tolls Twice...", "Skip Rewards", "Close" ] + }, + "downfall:BustedCrownGagText": { + "NAME": "Busted Crown", + "FLAVOR": "Imitation is the most sincere form of flattery... or is it? It doesn't even look that much like your crown. It's actually very insulting.", + "DESCRIPTIONS": [ + "Gain [E] at the start of your turn. Future card rewards have 2 less cards to choose from." + ] } } \ No newline at end of file diff --git a/src/main/resources/downfallResources/localization/eng/UIStrings.json b/src/main/resources/downfallResources/localization/eng/UIStrings.json index 0075c7530..a9fed4166 100644 --- a/src/main/resources/downfallResources/localization/eng/UIStrings.json +++ b/src/main/resources/downfallResources/localization/eng/UIStrings.json @@ -64,7 +64,8 @@ "Prevent Snecko from using card pools from other mods.", "Disable music overrides (requires game restart)", "Unlock all locked alternative skin for Downfall characters", - "Use icons instead of adding to text to cards for applied properties." + "Use icons instead of adding to text to cards for applied properties.", + "The Spellbook highlights the next card Conjure will draw." ] }, "downfall:EnergyPanelTip": { @@ -113,7 +114,7 @@ }, "downfall:RareCardReward": { "TEXT": [ - "Add a Rare Card to your deck" + "Add a Rare Card to your deck." ] }, "downfall:OctoChoiceAction": { @@ -135,9 +136,43 @@ "Pick a Card." ] }, + "downfall:ColorfulUncommonCardReward": { + "TEXT": [ + "Add a ", + " Card to your deck", + "Pick a Card." + ] + }, + "downfall:ColorfulRareCardReward": { + "TEXT": [ + "Add a ", + " Card to your deck", + "Pick a Card." + ] + }, + "downfall:DiceRollPotionReward": { + "TEXT": [ + "Add an Upgraded Card ", + "to your deck.", + "Pick a Card." + ] + }, + "downfall:ColorfulPowersCardReward": { + "TEXT": [ + "Add an Upgraded Power ", + "to your deck.", + "Pick a Card." + ] + }, "downfall:RunHistoryMonsterNames": { "TEXT": [ - "Living Wall Heads" + "Living Wall Heads", + "The Ironclad", + "The Silent", + "The Defect", + "The Watcher", + "Merchant", + "The Hermit" ] }, "downfall:WhaleHunter": { @@ -146,6 +181,12 @@ "Ended the cycle." ] }, + "downfall:Unfettered": { + "TEXT": [ + "Unfettered", + "Obtained the Broken Seal." + ] + }, "downfall:SingleCardViewPopup": { "TEXT": [ "Ammo" diff --git a/src/main/resources/downfallResources/localization/jpn/CardStrings.json b/src/main/resources/downfallResources/localization/jpn/CardStrings.json index a0e3df0c1..3d9e364aa 100644 --- a/src/main/resources/downfallResources/localization/jpn/CardStrings.json +++ b/src/main/resources/downfallResources/localization/jpn/CardStrings.json @@ -13,7 +13,7 @@ }, "downfall:Haunted": { "NAME": "幽霊", - "DESCRIPTION": "使用不可 NL エセリアル NL このカードを引いた時、手札のカードは全て エセリアル を持つ。" + "DESCRIPTION": "使用不可 NL エセリアル NL このカードが手札にある時、カードを *廃棄 する度に 2 ダメージを受ける。" }, "downfall:Malfunctioning": { "NAME": "不調", diff --git a/src/main/resources/downfallResources/localization/jpn/CharacterStrings.json b/src/main/resources/downfallResources/localization/jpn/CharacterStrings.json index 2852a9734..a2558b947 100644 --- a/src/main/resources/downfallResources/localization/jpn/CharacterStrings.json +++ b/src/main/resources/downfallResources/localization/jpn/CharacterStrings.json @@ -52,7 +52,7 @@ "このキャラクターは以下のランを完了することでアンロックされる: グレムリン", " (Act 4 のクリアは関係ない)", "このキャラクターは以下のランを完了することでアンロックされる: 7人目の悪役キャラクター", - "このキャラクターは以下のランを完了することでアンロックされる: スネッコ" + "このキャラクターは以下のランを完了することでアンロックされる: コレクター" ] }, "downfall:HeartMerchant": { @@ -109,7 +109,7 @@ "..ああ...... そう... NL ....そうしよう......" ], "OPTIONS": [ - "~私が...~ NL ~彼を...~ ~連れ戻し...そして...ソウルを奪った...~", + "~私が...~ NL ~彼を...~ ~連れ戻した...~", "~私を守れ...~ NL ~そして受け取れ...褒美を...~" ] }, diff --git a/src/main/resources/downfallResources/localization/jpn/EventStrings.json b/src/main/resources/downfallResources/localization/jpn/EventStrings.json index 9945153d1..81f8f4957 100644 --- a/src/main/resources/downfallResources/localization/jpn/EventStrings.json +++ b/src/main/resources/downfallResources/localization/jpn/EventStrings.json @@ -104,7 +104,6 @@ "DESCRIPTIONS": [ "精霊は貪欲にあなたの供物を喰らう!彼らが魂を貪ると、火の大きさが @2倍@ 程になり、より明るく燃え上がった。 NL 精霊たちは興奮気味にあなたの周りを踊り ~あなたに溶け込む~ と、温もりと強さで満たした。 NL 最大HPが増加し、体力が全回復した。", "あなたは手を伸ばし、それを #p掴んだ... NL 精霊達は @悲鳴を上げ@ あなたの手のひらから出現した ~渦に巻かれながらも~ 、逃げようとしている。 NL まもなく、彼らの霊魂はあなたのコレクションの一つに過ぎなくなるのだった。" - ], "OPTIONS": [ "[供物] #r失う:150ソウル。 #g最大HP+10&完全回復 ", @@ -173,7 +172,6 @@ "「オーケイ。今の君とはサヨーナラ! 君の #rオーバーロード 友達に教えてあげよう!」 NL NL この男の腕には不安を感じていたが、確かに威圧感はあった。", "あなたは彼を殴った。 NL 「俺の @顔がぁ!!@ お前よくも―」 NL NL 彼は失神した。今後彼はあなたのような存在を侮辱する前に一考する事だろう。", "盗賊達を脇へと追いやる。しかし盗賊になど興味はない。 ~本当の狙い~ はその哀れなデザイナーだ。彼は怯え、あなたから逃げようとしている。あなたはそっと #gランタン を差し伸べる。やがて彼の魂があなたのコレクションへと加わった..." - ], "OPTIONS": [ "[調整] ", @@ -216,9 +214,10 @@ "あなたは周りを歩き、何が起こるのだろうと考えた。" ], "OPTIONS": [ - "[入る] #gランダムなカード3枚をアップグレード。 #r呪い #r- #r不調。", + "[入る] ", "[立ち去る]", - "[Locked] 必要: アップグレードされていないカード" + "[Locked] 必要: アップグレードされていないカード", + " #g枚のランダムなカードをアップグレード。 #r呪い #r- #r不調" ] }, "downfall:WorldOfGoop": { @@ -246,7 +245,6 @@ "蛇はとてもがっかりした様子であなたを見つめた。", " NL NL 大蛇は頭をもたげ、恐ろしいほどの悲鳴を上げる。その体がぐったりして穴に落ちると、生き物の生命力が容易に収穫できるようになっていた。 NL NL 畏敬の念を抱かせるが、蛇は比喩的に言っているのだろうかと思わざるを得ない。おそらく、他者への暴力を援助し、奨励することを意図しているのだろうが、自分自身はそうではないのだろう....", "あなたが手を伸ばすと、大蛇は悲鳴を上げながら @後ずさる@ 。 ~「ハスススス...簒奪者!」~ NL NL ~「あなたの欲望は底が知れません!お願いでえぇぇぇす!見逃して下さあぁぁい...」~ NL あなたは彼の言葉など気にしない。彼の魂はあなたの物なのだ。" - ], "OPTIONS": [ "[同意] [殴る] #g入手:", @@ -268,11 +266,11 @@ "教団は喜ぶだろう。" ], "OPTIONS": [ - "[破壊] #r最大HP- #r", - " 。 #g入手: #g鋭い破片", + "[破壊] #r失う #r", + " #rHP #g入手: #g鋭い破片", "[収集] #r失う #r", "[立ち去る]", - " #rHP- #g入手 #g壊れた黄金の翼" + " #rHP #g入手 #g壊れた黄金の翼" ] }, "downfall:GoldenIdol": { @@ -314,7 +312,6 @@ "塔を降り続けていると、 #p~濃密な黒煙~ があなたの周囲の地面や壁から吹き出し、3体の仮面を被った何かに形を変えて話し始めた。 NL NL ~「これも心臓の操り人形だろう!」~ NL #r@「そのようだ!あれはいつも一番弱い駒を送り込んでくる!」@ NL NL あなたは口が裂けるほどの笑みを浮かべた三体目が、こちらを見つめていることに気付いた。 NL 「他の二人は気にするな... 我らの #y~力~ に興味は無いか?」", "~「~ @供物とは!@ ~なんと魅力的なんだ!」~ NL NL 幽霊のような何かが喋ると、その口がどんどん大きく開いていく事に気付いた。あなたの身体から死者から集めた #b~ソウル~ が激しく渦巻き、その口へと引き込まれていくのを感じる。 NL 引きずり込まれないようにするのが精一杯だ。 NL NL あなたの体力が尽きる直前に渦は止まり、幽霊は何処かへと消えていった。 NL NL あなたは少しの #b虚しさ を感じながら、進み続けた。", "あなたが近づくと、 #p~幽霊達~ はゲラゲラと笑い出す。 NL NL #r@「ああ、我々の良き友よ!」@ NL 彼らの #p~煙のような姿~ が部屋いっぱいに立ち込める... NL NL 「また ~いつもの~ あれかい?」" - ], "OPTIONS": [ "[供物] #r", @@ -436,7 +433,7 @@ "[像を返す] #r壊れた黄金の翼を失う。 #g入手: #g数多の報酬", "[Locked] 要求 : 壊れた黄金の翼。", "[受け入れる] #g入手: #g狂信者のポーション。", - "[盗む] #g入手: 装飾された短剣 #r", + "[盗む] #g入手:装飾された短剣 #r", " #rHPを失う。", "[立ち去る]", "[続行]", @@ -453,6 +450,7 @@ "この奴隷商人はあなたにとって脅威ではないし、獲物を弱らせるのに役立つかもしれない。 NL NL しかし、この血のスポーツは見過ごすにはあまりにも魅力的だ。", "巨大なスタジアムに足を踏み入れると、そこでは #bスレイバー や #p狂信者 など街の住民で溢れんばかりの観客が居た。 NL NL ", "@「強い奴を連れてこい!」@ あなたは観客に向かって叫び、チャンピオンへと宣戦を布告した。 NL 二人の挑戦者が近づいてくる。彼らはアリーナのルール上、あなたが誰であろうと手加減は出来ない、と警告してきた。", + "@「次は俺の番だ!」@ あなたが叫ぶと、観客たちは怒号の様な拍手をもってそれに応える。 NL NL 奴隷商が次の獲物を見つけるのにはさして時間はかからなかった。待ち伏せられ捕らえられた何も知らない挑戦者は、グロッキーになりながらも目を覚まし獲物を構える。 NL NL これは楽しみだ・・・。", "魅力的ではあるが、ここで戦うのは時間の無駄だろう。旅を続け、奴隷商人達が待ち伏せを再開するのを見送った。" ], "OPTIONS": [ @@ -473,10 +471,10 @@ "OPTIONS": [ "[私は反響] #r自分自身との戦闘。 #g入手:レアレリック", "[私は満腹] #g入手: #g999 #gソウル #r呪い #r- #r2 #r凡庸", - "[私は完全] #g全カードをアップグレード。 #r心臓の祝福を失う。", + "[私は完全] #g全カードをアップグレード。 #r負担を背負う", "[Locked] 必要:3つの心臓の祝福。", "[立ち去る]", - "[私は完全] #g全カードをアップグレード。 #r心臓の祝福と最大HP2を失う。" + "[私は完全] #g全カードをアップグレード。 #r負担を背負う。" ] }, "downfall:MoaiHead": { @@ -619,10 +617,11 @@ "DESCRIPTIONS": [ "この力は自分だけが持つべきだ。あなたは祠を粉々に砕く。 NL 周囲に暗い慟哭が響き渡り、あなたは祠の #p~呪いの魔法~ が骨身に染み渡るのを感じた。"], "OPTIONS": [ - "[冒涜] #g2枚のカードを複製。 #r呪い #r- #r消耗", - "[冒涜] #g3枚のカードを削除。 #r呪い #r- #r消耗", - "[冒涜] #g3枚のカードを変換。 #r呪い #r- #r消耗", - "[冒涜] #g2枚のカードをアップグレード。 #r呪い #r- #r消耗" + "[冒涜] #g2枚のカードを複製。 #r呪い #r- #r加齢", + "[冒涜] #g2枚のカードを削除。 #r", + " #r最大HPを失う。", + "[冒涜] #g2枚のカードを変化。 #r呪い #r- #r不調", + "[冒涜] #g2枚のカードをアップグレード。 #r呪い #r- #r痛み" ] } } diff --git a/src/main/resources/downfallResources/localization/jpn/PowerStrings.json b/src/main/resources/downfallResources/localization/jpn/PowerStrings.json index e6de5f291..c7fe8561f 100644 --- a/src/main/resources/downfallResources/localization/jpn/PowerStrings.json +++ b/src/main/resources/downfallResources/localization/jpn/PowerStrings.json @@ -49,8 +49,8 @@ "downfall:FearNoEvil": { "NAME": "悪しきを恐れず", "DESCRIPTIONS": [ - "このターン、あなたが アタック カードをプレイした場合、この敵は #y悪しきを恐れず をプレイ後、 #y平静 の スタンス に変わる。", - "この敵は #y悪しきを恐れず をプレイ後、 #y平静 の スタンス に変わる。" + "このターン、あなたが アタック カードをプレイした場合、このウォッチャーは #y悪しきを恐れず をプレイ後、 #y平静 の スタンス に変わる。", + "ウォッチャーは #y悪しきを恐れず をプレイ後、 #y平静 の スタンス に変わる。" ] }, "downfall:PoisonResist": { @@ -81,7 +81,7 @@ "NAME": "神聖なる報復", "DESCRIPTIONS": [ "ウォッチャーは1ターンに3回まで、 #b", - " HPを失う度、このターンの間 #y筋力 を #b1 失う。 NL あなたは #yプレッシャー のダメージを #bブロック 出来る。", + " HPを失う度、 #y筋力 を #b1 失う。 NL あなたは #y点穴 のダメージを #bブロック 出来る。", "ウォッチャーはこのターン既に #y筋力 を #b3 失っている。" ] }, @@ -110,7 +110,7 @@ "downfall:WatcherDivinityPower": { "NAME": "儚き信仰", "DESCRIPTIONS": [ - "ウォッチャーはあなたがカードをプレイする度に #yマントラ #b1 を得る。 NL ウォッチャーはターン開始時に #yマントラ #b5 を失う。 NL ウォッチャーはターン終了時に #y神聖 のスタンスを終了しない。" + "ウォッチャーはあなたがカードをプレイする度に #yマントラ #b1 を得る。 NL ウォッチャーは #y神聖 スタンスに入る度に #y筋力 #b3 を得る。 NL ウォッチャーはターン開始時に #yマントラ #b4 を失う。 NL ウォッチャーはターン終了時に #y神聖 のスタンスを終了しない。" ] }, "downfall:NeowFleetingFaith": { @@ -158,7 +158,7 @@ "downfall:DefectVoidPower": { "NAME": "エナジー泥棒", "DESCRIPTIONS": [ - "ディフェクトが #y空虚 を生成するたび、それはあなたの山札の上に置かれる。" + "ディフェクトが #y空虚 を生成するたび、それはあなたの捨て札に置かれる。" ] }, "downfall:NeowEnergyThief": { @@ -170,7 +170,7 @@ "downfall:DefectAncientConstructPower": { "NAME": "古代の構築物", "DESCRIPTIONS": [ - "戦闘を 2 #yブロンズオーブ ミニオンで開始する。 NL ターン終了時に #yアーティファクト を持っていなかった場合、 #yアーティファクト #b1 を得る。" + "戦闘を 2 #yブロンズオーブ ミニオンを連れて開始する。 NL ディフェクトの #yコアサージ は #y廃棄 されない。" ] }, "downfall:NeowAncientConstruct": { @@ -186,6 +186,15 @@ " を得る。" ] }, + "downfall:DefectBiasCuriosity": { + "NAME": "訂正された認知", + "DESCRIPTIONS": [ + "ディフェクトは戦闘開始時に #y認知偏向 をプレイする。 NL あなたが #yパワー をプレイした時、このターン ディフェクトの #y偏向 は効力を失う。", + "あなたが #yパワー をプレイした時、このターン ディフェクトの #y偏向 は効力を失う。", + "このターン ディフェクトの #y偏向 は効力を失う。", + "偏向" + ] + }, "downfall:DefectCuriosityLighning": { "NAME": "認知非偏向", "DESCRIPTIONS": [ @@ -239,7 +248,7 @@ "downfall:MerchantStrengthPower": { "NAME": "ソウルスティーラー", "DESCRIPTIONS": [ - "商人は ソウルスティール で得た #y筋力 を維持しており、更に同量の #y敏捷性 も得る。" + "商人は ソウルスティール で得た #y筋力 を2倍所持しており、更に同量の #y敏捷性 も持っている。" ] }, "downfall:NeowMantra": { @@ -335,7 +344,7 @@ "NAME": "補佐役", "DESCRIPTIONS": [ "タンジェリンが死亡すると、ハーミットは #y集中 が途切れ、 #y筋力 #b", - " を失う。" + " を得る。" ] }, "downfall:HermitWheelOfFortune": { diff --git a/src/main/resources/downfallResources/localization/jpn/RelicStrings.json b/src/main/resources/downfallResources/localization/jpn/RelicStrings.json index bc4a11f77..2dee84c78 100644 --- a/src/main/resources/downfallResources/localization/jpn/RelicStrings.json +++ b/src/main/resources/downfallResources/localization/jpn/RelicStrings.json @@ -416,7 +416,7 @@ "NAME": "鋭い破片", "FLAVOR": "かつては壊れた像、今は間に合わせの武器。", "DESCRIPTIONS": [ - "各戦闘開始時、 #y血塗れの生贄 を得る。" + "エリートまたはボスとの戦闘で、あなたが #yパワー をプレイするたび、 #b1 #y筋力 を得る。" ] }, "downfall:RedIOU": { @@ -466,6 +466,13 @@ "ボス戦開始時、 #y敏捷性 #b1 を得る。" ] }, + "downfall:BurdenOfKnowledge": { + "NAME": "知識の負担", + "FLAVOR": "真実は痛みを伴う物だ。", + "DESCRIPTIONS": [ + "入手時、 #r全てのハートの祝福 と 最大HP #b10 を失う。 さらに戦闘開始時 #b1 の #y筋力 と #y敏捷性 を失う。 恒久的に全てのカードを #yアップグレード する。" + ] + }, "downfall:TeleportStone": { "NAME": "転移の石", "FLAVOR": "手ぶらでは帰れない。", @@ -487,7 +494,16 @@ "NAME": "ヘクトプラズム", "FLAVOR": "このスライムの塊は何百もの魂のエネルギーで脈打っているようだ。そりゃ誰も欲しがらない。", "DESCRIPTIONS": [ - "ターン開始時、 [E] を得る。 #yソウル を入手できなくなり、鍵の破壊に #yソウル が必要なくなる。" + "ターン開始時、 [E] を得る。 #yソウル を入手できなくなり、鍵の破壊に #yソウル が必要なくなる。", + "ヘクトプラズム" + ] + }, + "downfall:BlackCandle": { + "NAME": "ブラックキャンドル", + "FLAVOR": "暗闇の中で、炎は更に輝きを増している。", + "DESCRIPTIONS": [ + "#y使用不可 の #r呪い カードをプレイすることが出来る。 あなたが #y使用不可 の #r呪い カードをプレイする度、それを #y廃棄 し、 #b1 のHPを失う。", + "ブラックキャンドル" ] }, "downfall:replacements": { @@ -524,17 +540,24 @@ "NAME": "呪いの鍵 EX", "FLAVOR": "正当な理由でロックされてる。", "DESCRIPTIONS": [ - "ターン開始時、 [E] を得る。 NL ボス以外の宝箱を開ける度に #b2 枚の #r呪い がデッキに加わる。" + "各ターン、最初に #r呪い を引く度 [E] を得る。 NL ボス以外の宝箱を開ける度に #r負傷 をデッキに加える。" ] }, "downfall:ExtraCursedBell": { "NAME": "呼びよせる鐘 EX", "FLAVOR": "響いているような気がするがどうしても確認できない。", "DESCRIPTIONS": [ - "入手時、 #b2 枚の特殊な #r呪い と #b3 つのレリックを得る。", + "入手時、 特殊な #r呪い と #b3 つのコモンレリックを得る。", "鐘が二度鳴った...", "報酬をスキップ", "閉じる" ] + }, + "downfall:BustedCrownGagText": { + "NAME": "壊れた王冠", + "FLAVOR": "模倣は最大の賛辞…それとも?しかしあなたの王冠には似ても似つかない。失礼なくらいだ。", + "DESCRIPTIONS": [ + "ターン開始時、 [E] を得る。報酬のカード選択画面で、選択出来るカードが2枚減る。" + ] } } \ No newline at end of file diff --git a/src/main/resources/downfallResources/localization/jpn/UIStrings.json b/src/main/resources/downfallResources/localization/jpn/UIStrings.json index bf5475b64..e9062eaed 100644 --- a/src/main/resources/downfallResources/localization/jpn/UIStrings.json +++ b/src/main/resources/downfallResources/localization/jpn/UIStrings.json @@ -113,7 +113,7 @@ }, "downfall:RareCardReward": { "TEXT": [ - "レアカードをデッキに加えた。" + "レアカードをデッキに加える。" ] }, "downfall:OctoChoiceAction": { @@ -125,19 +125,53 @@ "downfall:BossCardReward": { "TEXT": [ "デッキにボスカードを追加。", - "カードを取れ" + "カードを選ぶ。" ] }, "downfall:ColorfulCardReward": { "TEXT": [ "デッキに ", " カードを追加。", - "カードを取る" + "カードを選ぶ。" + ] + }, + "downfall:ColorfulUncommonCardReward": { + "TEXT": [ + "デッキに ", + " カードを追加。", + "カードを選ぶ。" + ] + }, + "downfall:ColorfulRareCardReward": { + "TEXT": [ + "デッキに ", + " カードを追加。", + "カードを選ぶ。" + ] + }, + "downfall:DiceRollPotionReward": { + "TEXT": [ + "デッキに", + "アップグレードされたカードを追加。", + "カードを選ぶ。" + ] + }, + "downfall:ColorfulPowersCardReward": { + "TEXT": [ + "デッキに", + "アップグレードされたパワーカードを追加。", + "カードを選ぶ。" ] }, "downfall:RunHistoryMonsterNames": { "TEXT": [ - "リビングウォールヘッド" + "リビングウォールヘッド", + "アイアンクラッド", + "サイレント", + "ディフェクト", + "ウォッチャー", + "商人", + "ハーミット" ] }, "downfall:WhaleHunter": { @@ -146,6 +180,12 @@ "サイクルを終了させた。" ] }, + "downfall:Unfettered": { + "TEXT": [ + "自由だ", + "壊れた封印を入手した。" + ] + }, "downfall:SingleCardViewPopup": { "TEXT": [ "弾薬" diff --git a/src/main/resources/downfallResources/localization/kor/CardStrings.json b/src/main/resources/downfallResources/localization/kor/CardStrings.json index 5378adcda..131788057 100644 --- a/src/main/resources/downfallResources/localization/kor/CardStrings.json +++ b/src/main/resources/downfallResources/localization/kor/CardStrings.json @@ -13,7 +13,7 @@ }, "downfall:Haunted": { "NAME": "귀신들림", - "DESCRIPTION": "사용불가. NL 휘발성. NL 뽑으면 손에 있는 모든 카드에 휘발성을 부여합니다." + "DESCRIPTION": "사용불가. NL 휘발성. NL 이 카드가 손에 있다면 이 카드 이외의 카드가 소멸할 때마다 피해를 2 받습니다." }, "downfall:Malfunctioning": { "NAME": "결함", diff --git a/src/main/resources/downfallResources/localization/kor/CharacterStrings.json b/src/main/resources/downfallResources/localization/kor/CharacterStrings.json index 8a35d8903..a92c36e1c 100644 --- a/src/main/resources/downfallResources/localization/kor/CharacterStrings.json +++ b/src/main/resources/downfallResources/localization/kor/CharacterStrings.json @@ -52,7 +52,7 @@ "그렘린으로 등반에 성공한다면 이 캐릭터가 해제됩니다.", " NL (4막 승리는 포함되지 않습니다.)", "일곱 번째 악당 캐릭터로 등반에 성공한다면 이 캐릭터가 해제됩니다.", - "스네코로 등반에 성공한다면 이 캐릭터가 해제됩니다." + "수집가로 등반에 성공한다면 이 캐릭터가 해제됩니다." ] }, "downfall:HeartMerchant": { @@ -109,7 +109,7 @@ "..그리고...... NL 나.... 또한......" ], "OPTIONS": [ - "~내가~ ~다시...~ NL ~그를...~ ~데려왔지...~ ~또...~ ~영혼을~ ~거뒀지...~", + "~내가~ ~다시...~ NL ~그를...~ ~다시...~ ~데려왔지...~", "~나를~ ~지켜라...~ NL ~그러면~ ~포상을...~ ~내려주마...~" ] }, diff --git a/src/main/resources/downfallResources/localization/kor/EventStrings.json b/src/main/resources/downfallResources/localization/kor/EventStrings.json index fbed7c832..58e9ed09f 100644 --- a/src/main/resources/downfallResources/localization/kor/EventStrings.json +++ b/src/main/resources/downfallResources/localization/kor/EventStrings.json @@ -214,9 +214,10 @@ "무슨 일이 벌어질 수 있었을지 궁금해하면서 빛을 빙 돌려 돌아갑니다." ], "OPTIONS": [ - "[들어간다] #g무작위 #g카드를 #g3장 #g강화합니다. #r저주를 #r받습니다 #r- #r결함.", + "[들어간다] #g무작위 #g카드를 #g", "[떠난다]", - "[잠김] 필요: 강화 가능한 카드" + "[잠김] 필요: 강화 가능한 카드", + " #g장 #g강화합니다. #r저주를 #r받습니다 #r- #r결함." ] }, "downfall:WorldOfGoop": { @@ -248,6 +249,7 @@ "OPTIONS": [ "[승낙] [때린다] #g영혼을 #g", " #g얻습니다. #r저주를 #r받습니다 #r- #r의심.", + " #g얻습니다. #r저주를 #r받습니다 #r- #r의심.", "[거절]", "[떠난다]" ] @@ -283,7 +285,7 @@ "당신은 영혼을 그대로 내버려두고 가던 길을 갑니다." ], "OPTIONS": [ - "[함정 설치] #r타격을 #r1장 #r잃습니다.", + "[함정 설치] #r타격을 #r1장 #r제거합니다.", "[수확] #g영혼을 #g", " #g얻습니다.", "[떠난다]", @@ -438,7 +440,7 @@ "[계속한다]", "[단검을 받는다] #g의식용 #g단검을 #g받습니다.", "[세례를 받는다] #g의식용 #g단검을 #g강화합니다.", - "[희생] 의식용 단검+으로 #r광신자를 #r죽입니다.", + "[희생] #r의식용 #r단검+으로 #r광신자를 #r죽입니다.", "[찬사를 받는다] #g부서진 #g날개 #g조각상을 #g돌려주고 #g보상들을 #g받습니다." ] }, @@ -453,8 +455,8 @@ "구미가 당기긴 했지만 여기서 싸우는 불필요한 낭비라고 생각합니다. 당신은 가던 길을 가기로 했고 노예상인은 남아 다시 매복합니다." ], "OPTIONS": [ - "[도전한다] 아레나 챔피언과 #r싸웁니다. #g많은 #g보상을 #g얻습니다.", - "[참가한다] 사로잡힌 영웅과 #r싸웁니다. #g많은 #g보상을 #g얻습니다.", + "[도전한다] #r아레나 #r챔피언과 #r싸웁니다. #g많은 #g보상을 #g얻습니다.", + "[참가한다] #r사로잡힌 #r영웅과 #r싸웁니다. #g많은 #g보상을 #g얻습니다.", "[떠난다]", "[싸운다!]", "[계속한다]" @@ -470,10 +472,10 @@ "OPTIONS": [ "[나는 메아리다] #r자기 #r자신과 #r싸웁니다. #g희귀 #g유물을 #g얻습니다.", "[나는 부유하다] #g영혼을 #g999 #g얻습니다. #r저주 #r- #r규칙 #r준수 #r2장.", - "[나는 완전하다] #g모든 #g카드 #g강화. #r심장의 #r축복을 모두 #r잃습니다.", + "[나는 완전하다] #g모든 #g카드 #g강화. #r부담을 #r얻습니다.", "[잠김] 심장의 축복이 3개 필요합니다.", "[떠난다]", - "[나는 완전하다] #g모든 #g카드 #g손실. #r심장의 #r축복과 #r최대 #r체력을 #r2 #r잃습니다." + "[나는 완전하다] #g모든 #g카드 #g손실. #r부담을 #r얻습니다." ] }, "downfall:MoaiHead": { @@ -616,10 +618,11 @@ "DESCRIPTIONS": [ "오직 당신만이 이 힘을 가질 자격이 있는 법이죠. 당신은 성소를 산산조각 냈습니다. NL 어두운 통곡이 온 사방에 울려 퍼지더니 성소의 저주 마법이 뼈에 사무치는 게 느껴졌습니다." ], "OPTIONS": [ - "[훼손] #g카드를 #g2장 #g복제합니다. #r저주를 #r받습니다 #r- #r쇠락화.", - "[훼손] #g카드를 #g3장 #g제거합니다. #r저주를 #r받습니다 #r- #r쇠락화.", - "[훼손] #g카드를 #g3장 #g변화합니다. #r저주를 #r받습니다 #r- #r쇠락화.", - "[훼손] #g카드를 #g2장 #g강화합니다. #r저주를 #r받습니다 #r- #r쇠락화." + "[훼손] #g카드를 #g2장 #g복제합니다. #r저주를 #r받습니다 #r- #r노쇠.", + "[훼손] #g카드를 #g3장 #g제거합니다. #r최대 #r체력을 #r", + " #r잃습니다.", + "[훼손] #g카드를 #g3장 #g변화합니다. #r저주를 #r받습니다 #r- #r결함.", + "[훼손] #g카드를 #g2장 #g강화합니다. #r저주를 #r받습니다 #r- #r고통." ] } } \ No newline at end of file diff --git a/src/main/resources/downfallResources/localization/kor/PotionStrings.json b/src/main/resources/downfallResources/localization/kor/PotionStrings.json index 174dad95f..10f0cb40f 100644 --- a/src/main/resources/downfallResources/localization/kor/PotionStrings.json +++ b/src/main/resources/downfallResources/localization/kor/PotionStrings.json @@ -3,7 +3,7 @@ "NAME": "저주받은 샘 포션", "DESCRIPTIONS": [ "사용하면 #y약화를 #b", - " 부여하고 #y손상을 #b", + " 부여하고 #y취약을 #b", " 부여하고 #y힘을 #b", " 감소시킵니다." ] diff --git a/src/main/resources/downfallResources/localization/kor/PowerStrings.json b/src/main/resources/downfallResources/localization/kor/PowerStrings.json index e4fb4f4ba..8280f9f80 100644 --- a/src/main/resources/downfallResources/localization/kor/PowerStrings.json +++ b/src/main/resources/downfallResources/localization/kor/PowerStrings.json @@ -110,7 +110,7 @@ "downfall:WatcherDivinityPower": { "NAME": "속절없는 믿음", "DESCRIPTIONS": [ - "내 카드를 1장 사용할 때마다 와쳐가 #y만트라를 #b1 얻습니다. 와쳐의 턴 시작 시 #y만트라를 #b5 잃습니다. NL 와쳐의 턴 종료 시 #y강림에서 벗어나지 않습니다." + "내 카드를 1장 사용할 때마다 와쳐가 #y만트라를 #b1 얻습니다. NL 와쳐가 #y강림한다면 힘을 #b3 얻습니다. NL 와쳐의 턴 시작 시 #y만트라를 #b4 잃습니다. NL 와쳐의 턴 종료 시 #y강림에서 벗어나지 않습니다." ] }, "downfall:NeowFleetingFaith": { @@ -158,7 +158,7 @@ "downfall:DefectVoidPower": { "NAME": "에너지 도둑", "DESCRIPTIONS": [ - "디펙트가 #y공허를 생성할 때마다 내 뽑을 카드 더미 맨 위에 #y공허를 놓습니다." + "디펙트가 #y공허를 생성할 때마다 내 버린 카드 더미에 #y공허를 섞어 넣습니다." ] }, "downfall:NeowEnergyThief": { @@ -170,7 +170,7 @@ "downfall:DefectAncientConstructPower": { "NAME": "고대의 구성", "DESCRIPTIONS": [ - "#y청동 #y구체 하수인 2체와 싸웁니다. NL 턴 종료 시 청동 구체가 #y인공물이 없다면 #y인공물을 #b1 얻습니다." + "#y청동 #y구체 하수인 2체와 싸웁니다. NL 디펙트의 #y코어 #y서지가 #y소멸하지 않습니다." ] }, "downfall:NeowAncientConstruct": { @@ -186,8 +186,17 @@ " 얻습니다." ] }, + "downfall:DefectBiasCuriosity": { + "NAME": "수정된 인지", + "DESCRIPTIONS": [ + "전투 시작 시 디펙트가 #y인지 #y비편향을 사용합니다. NL 내 #y파워 카드를 사용할 때마다 그 턴 동안 디펙트가 #y편향의 효과를 받지 않습니다.", + "내 #y파워 카드를 사용할 때마다 그 턴 동안 디펙트가 #y편향의 효과를 받지 않습니다.", + "이번 턴 동안 디펙트가 #y편향의 효과를 받지 않게 됩니다.", + "편향" + ] + }, "downfall:DefectCuriosityLighning": { - "NAME": "Unbiased Cognition", + "NAME": "인지 비편향", "DESCRIPTIONS": [ "내 #y파워 카드를 사용할 때마다 디펙트가 #y번개 #y구체를 #b", " 영창합니다." @@ -239,7 +248,7 @@ "downfall:MerchantStrengthPower": { "NAME": "영혼 도둑", "DESCRIPTIONS": [ - "상인은 이번 도전에서 영혼 강탈로 벌은 #y힘을 유지하며 벌은 #y힘만큼 #y민첩을 얻습니다." + "상인은 이번 도전에서 영혼 강탈로 벌은 #y힘을 두 배로 늘립니다. 벌은 #y힘만큼 #y민첩을 얻습니다." ] }, "downfall:NeowMantra": { diff --git a/src/main/resources/downfallResources/localization/kor/RelicStrings.json b/src/main/resources/downfallResources/localization/kor/RelicStrings.json index f5c8b4e49..b02b9a856 100644 --- a/src/main/resources/downfallResources/localization/kor/RelicStrings.json +++ b/src/main/resources/downfallResources/localization/kor/RelicStrings.json @@ -416,7 +416,7 @@ "NAME": "날카로운 조각", "FLAVOR": "한때 부서진 조각상이었지만 지금은 간이 무기입니다.", "DESCRIPTIONS": [ - "매 전투 시작 시 #y피로 #y물든 #y희생을 1장 얻습니다." + "엘리트 또는 보스 전투 동안 #y파워 카드를 사용할 때마다 #y힘을 #b1 얻습니다." ] }, "downfall:RedIOU": { @@ -466,6 +466,13 @@ "보스 전투 시작 시 #y민첩을 #b1 얻습니다." ] }, + "downfall:BurdenOfKnowledge": { + "NAME": "지식의 부담", + "FLAVOR": "The truth hurts.", + "DESCRIPTIONS": [ + "획득 시 #r심장의 #r축복을 #r모두 #r잃고 최대 체력을 #b10 #r잃습니다. #r어떤 #r카드든 #r모두 #r영구적으로 #r강화합니다. 전투 시작 시 #y힘과 #y민첩을 #b1 잃습니다." + ] + }, "downfall:TeleportStone": { "NAME": "순간이동석", "FLAVOR": "집을 떠나기 전에 꼭 챙겨갈 물건입니다.", @@ -487,7 +494,16 @@ "NAME": "내형질", "FLAVOR": "이 점액질의 기운과 방울은 수백명의 영혼으로 넘쳐 보입니다. 아무도 원하지 않았던 게 당연했겠군요.", "DESCRIPTIONS": [ - "매 턴 시작 시 [E] 를 얻습니다. 앞으로 #y영혼을 얻을 수 없습니다. 열쇠를 부술 때 #y영혼을 소모하지 않습니다." + "매 턴 시작 시 [E] 를 얻습니다. 앞으로 #y영혼을 얻을 수 없습니다. 열쇠를 부술 때 #y영혼을 소모하지 않습니다.", + "내형질" + ] + }, + "downfall:BlackCandle": { + "NAME": "검은 양초", + "FLAVOR": "어둠 속에서도 불꽃이 환하게 밝혀줍니다.", + "DESCRIPTIONS": [ + "#y사용 #y불가인 #y저주 카드를 사용할 수 있게 됩니다. #y저주 카드를 사용하면 체력을 #b1 잃고 그 카드를 #y소멸시킵니다.", + "검은 양초" ] }, "downfall:replacements": { @@ -524,17 +540,24 @@ "NAME": "더욱 저주받은 열쇠", "FLAVOR": "좋은 의도로 잠겨 있었을 것입니다.", "DESCRIPTIONS": [ - "매 턴 시작 시 [E] 를 얻습니다. NL 보스 이외의 상자를 열 때마다 무작위 #r저주를 #b2 장 받습니다." + "매 턴 처음으로 #r저주를 뽑으면 [E] 를 얻습니다. NL 보스 이외의 상자를 열 때마다 #r상처를 얻습니다." ] }, "downfall:ExtraCursedBell": { "NAME": "더욱 저주받은 방울", "FLAVOR": "방울의 메아리가 들려도 어디 있는지 절대 확인할 수 없습니다.", "DESCRIPTIONS": [ - "획득 시 #r특별한 #r저주 #b2 장과 #b3 개의 유물을 획득합니다.", + "획득 시 #r특별한 #r저주 #b2 장과 일반 유물을 #b3 개 획득합니다.", "방울 소리가 두 번 울리고...", "보상 넘기기", "닫기" ] + }, + "downfall:BustedCrownGagText": { + "NAME": "부서진 왕관", + "FLAVOR": "모방은 진심 어린 극찬의 형태라는 게... 맞는 말일까요? 투사의 왕관과 닮지도 않았습니다. 오히려 모욕에 가까운 물건입니다.", + "DESCRIPTIONS": [ + "매 턴 시작 시 [E] 를 얻습니다. 카드 보상을 받을 때 선택할 수 있는 카드가 #b2 장 줄어듭니다." + ] } } diff --git a/src/main/resources/downfallResources/localization/kor/UIStrings.json b/src/main/resources/downfallResources/localization/kor/UIStrings.json index 0e512e4d7..fee9c18e4 100644 --- a/src/main/resources/downfallResources/localization/kor/UIStrings.json +++ b/src/main/resources/downfallResources/localization/kor/UIStrings.json @@ -135,9 +135,43 @@ "카드를 선택하십시오." ] }, + "downfall:ColorfulUncommonCardReward": { + "TEXT": [ + "덱에 ", + " 카드를 추가", + "카드를 선택하십시오." + ] + }, + "downfall:ColorfulRareCardReward": { + "TEXT": [ + "덱에 ", + " 카드를 추가", + "카드를 선택하십시오." + ] + }, + "downfall:DiceRollPotionReward": { + "TEXT": [ + "덱에 강화된 ", + " 카드를 추가", + "카드를 선택하십시오." + ] + }, + "downfall:ColorfulPowersCardReward": { + "TEXT": [ + "덱에 강화된 ", + " 파워 카드를 추가", + "카드를 선택하십시오." + ] + }, "downfall:RunHistoryMonsterNames": { "TEXT": [ - "살아있는 벽 머리들" + "살아있는 벽 머리들", + "아이언클래드", + "사일런트", + "디펙트", + "와쳐", + "상인", + "허밋" ] }, "downfall:WhaleHunter": { @@ -146,6 +180,12 @@ "순환은 끝났다." ] }, + "downfall:Unfettered": { + "TEXT": [ + "봉인 해제", + "파괴된 봉인을 얻었습니다." + ] + }, "downfall:SingleCardViewPopup": { "TEXT": [ "탄약" diff --git a/src/main/resources/downfallResources/localization/spa/CardStrings.json b/src/main/resources/downfallResources/localization/spa/CardStrings.json new file mode 100644 index 000000000..de95be24c --- /dev/null +++ b/src/main/resources/downfallResources/localization/spa/CardStrings.json @@ -0,0 +1,34 @@ +{ + "downfall:Aged": { + "NAME": "Envejecido", + "DESCRIPTION": "Injugable. Etérea. NL Al final de tu turno, añade un *Vacío a la parte superior de tu pila de robo." + }, + "downfall:Bewildered": { + "NAME": "Desconcertado", + "DESCRIPTION": "Injugable. Etérea. NL Al ser robada, sneckomod:Confunde tu mano." + }, + "downfall:Icky": { + "NAME": "Pegajoso", + "DESCRIPTION": "Gana un *Viscoso. NL Agota." + }, + "downfall:Haunted": { + "NAME": "Embrujado", + "DESCRIPTION": "Etérea. Injugable. NL Siempre que otra carta se *Agote mientras esta esté en tu mano, recibes 2 de daño." + }, + "downfall:Malfunctioning": { + "NAME": "Defectuosa", + "DESCRIPTION": "Al final de tu turno, transforma todas las cartas en tu mano en cartas de Estado aleatorias. NL Agota." + }, + "downfall:Scatterbrained": { + "NAME": "Disperso", + "DESCRIPTION": "Al final de tu turno, si esta carta está en tu mano, añade una copia de ella a tu pila de descarte. NL Agota." + }, + "downfall:SummonMushrooms": { + "NAME": "Hongos Entre Nosotros", + "DESCRIPTION": "Mata todos los Hongos. Cura PV igual a sus PV restantes. NL Invoca dos Hongos." + }, + "downfall:BossMaintenance": { + "NAME": "Mantenimiento", + "DESCRIPTION": "Los *Golpes Hacen !M! más de daño este combate. NL Gana !B! de Destreza. NL Esta carta cuesta 1 más durante este combate." + } +} diff --git a/src/main/resources/downfallResources/localization/spa/CharacterStrings.json b/src/main/resources/downfallResources/localization/spa/CharacterStrings.json new file mode 100644 index 000000000..4fb098a76 --- /dev/null +++ b/src/main/resources/downfallResources/localization/spa/CharacterStrings.json @@ -0,0 +1,240 @@ +{ + "downfall:Heart Event": { + "NAMES": [ + "El Corazón" + ], + "TEXT": [ + "~Sirve...~ NL ~a mí...~ ~ahora...~", + "~Levántate...~ NL ~Siervo...~", + "~Álzate...~", + "~Asesina~ NL ~a los intrusos...~", + "~Alcanza~ ~al~ ~intruso...~ NL ~para~ ~recibir~ ~más...~ ~bendiciones...~", + "~Al menos...~ ~enfrenta~ NL ~al~ ~primer~ ~intruso...~", + "~Yo~ ~te~ ~he~ ~traído~ ~de~ ~vuelta...~", + "~Elige...~", + "~Concedido...~", + "~Sacrificio...~ NL ~...por~ ~poder....~", + "~DEMUESTRA~ ~tu~ NL ~valor...~", + "Recompensas", + "~Continúa~ ~por~ ~mí...~", + "~Desciende...~ ~..en la locura...~", + "~Impresionante...~ ~más...~", + "¡Maldito!", + "¡Mente Dispersa!", + "¡Transformación!" + ], + "OPTIONS": [ + "[Continuar]", + "[Hablar]", + "[Saltar]", + "[Salir]", + "Elige 10 cartas para añadir a tu mazo.", + "[ #gLos #genemigos #gen #gtus #gpróximos #gtres #gcombates #ghuirán #gcon #gpánico ]", + "[ Bloqueado - No se puede elegir en la primera partida ]", + "[ #gTodos #glos #gGremlins #ganan #gPV #gMáximos +", + "#gTodos #glos #gGremlins #ganan #gPV #gMáximos +", + "[ #rTodos #rlos #rGremlins #rpierden #r", + "[ #rTodos #rlos #rGremlins #rreciben #r" + ] + }, + "downfall:Unlock": { + "TEXT": [ + "Este personaje se desbloquea al completar una partida con el Rey Babosa.", + "Este personaje se desbloquea al completar una partida con el segundo personaje Villano.", + "Este personaje se desbloquea al completar una partida con el Guardián.", + "Este personaje se desbloquea al completar una partida con el tercer personaje Villano.", + "Este personaje se desbloquea al completar una partida con el Hexafantasma.", + "Este personaje se desbloquea al completar una partida con el cuarto personaje Villano.", + "Este personaje se desbloquea al completar una partida con el Campeón.", + "Este personaje se desbloquea al completar una partida con el quinto personaje Villano.", + "Este personaje se desbloquea al completar una partida con el Autómata.", + "Este personaje se desbloquea al completar una partida con el sexto personaje Villano.", + "Este personaje se desbloquea al completar una partida con los Gremlins.", + "(Las victorias en el Acto 4 no cuentan)", + "Este personaje se desbloquea al completar una partida con el séptimo personaje Villano.", + "Este personaje se desbloquea al completar una partida con el Coleccionista." + ] + }, + "downfall:HeartMerchant": { + "NAMES": [ + "Proceder", + "~Sacrificio...~" + ], + "TEXT": [ + "~Creces...~ ~más fuerte...~", + "~Crecemos...~ ~a medida que~ ~tú~ ~creces...~", + "~Asesina...~ ~y~ ~recibirás~ ~recompensas...~", + "~Más...~ ~almas...~", + "~Aliméntanos......~ NL ~ALIMÉNTANOS......~", + "~Alimenta...~ ~la~ ~corrupción...~", + "~Las~ ~bendiciones...~ ~se~ ~ganan...~", + "~No...~ ~hay...~ ~piedad...~", + "~Cada vez...~ ~más fuerte...~", + "~Nuestro~ ~poder...~ ~es~ ~tuyo...~", + "~Mata~ ~a~ ~todos...~ ~en~ ~tu~ ~camino...~", + "~Lucha...~ ~cae...~ ~y~ ~alimenta...~", + "~Somos...~ ~legión...~", + "~Avanza...~ ~y~ ~cosecha...~", + "~Deliciosas...~ ~almas...~", + "~Cosecha...~ ~a los caídos...~" + ], + "OPTIONS": [ + "~Neow...~ ~no puede~ ~ganar...~", + "~No temas...~ ~a nada...~", + "..... NL .... NL .........", + "~Acaba...~ ~con~ ~ellos...~", + "~Buena...~ ~suerte...~", + "~No...~ ~mueras...~", + "~Estaremos...~ ~esperando...~", + "~Destruye...~ ~a~ ~todos...~" + ] + }, + "downfall:HeartProceed": { + "TEXT": [ + "~Intrusos...~ NL ~...en~ ", + "~Tú~ ~eres~ ~necesario...~ NL ~...en~ ", + "~Ellos~ ~han~ ~llegado...~ NL ", + "~Regresa...~ NL ~Protege~ ", + "~Mátalos~ ~a~ ~todos...~ NL ~...en~ " + ], + "OPTIONS": [ + "~la~ ~Ciudad...~", + "~el~ ~Más~ ~Allá...~" + ] + }, + "downfall:NeowEnding": { + "TEXT": [ + "Tú... has... matado... a todos...", + "...el ciclo... ha muerto.....", + "..y entonces...... yo... NL ....tambien......" + ], + "OPTIONS": [ + "~Yo~ ~traje...~ NL ~AÉL...~ ~de~ ~vuelta...~", + "~Protégeme...~ NL ~Y~ ~serás...~ ~recompensado...~" + ] + }, + "downfall:HeartMerchantScreen": { + "NAMES": [ + "~Saludos~ NL ~esbirro...~", + "~Trae~ ~más~ ~almas...~", + "~Necesito~ @más...@", + "~No~ ~eres~ NL @digno...@", + "~No.~", + "~Cosecha~ ~más~ NL ~para~ ~eso...~", + "~Sacrificio~ ~insuficiente...~", + "~Sí...~", + "~Más...~ @¡Más...!@", + "~Hazte~ ~más~ ~fuerte...~", + "~Estoy~ ~renovado...~", + "~Ve~ ~y~ ~cosecha...~", + "Salir", + "Selecciona una carta para eliminar de tu mazo." + ], + "TEXT": [ + "~Creces...~ ~más fuerte...~", + "~Crecemos...~ ~a medida que~ ~tú~ ~creces...~", + "~Asesina...~ ~y~ ~recibirás~ ~recompensas...~", + "~Más...~ ~almas...~", + "~Aliméntanos......~ NL ~ALIMÉNTANOS......~", + "~Alimenta...~ ~la~ ~corrupción...~", + "~Las~ ~bendiciones...~ ~se~ ~ganan...~", + "~No...~ ~hay...~ ~piedad...~", + "~Cada vez...~ ~más fuerte...~", + "~Nuestro~ ~poder...~ ~es~ ~tuyo...~", + "~Mata~ ~a~ ~todos...~ ~en~ ~tu~ ~camino...~", + "~Lucha...~ ~cae...~ ~y~ ~alimenta...~", + "~Somos...~ ~legión...~", + "~Avanza...~ ~y~ ~cosecha...~", + "~Deliciosas...~ ~almas...~", + "~Cosecha...~ ~a los caídos...~" + ] + }, + "downfall:OctoChoiceCards": { + "NAMES": [ + "Almas", + "Éxito", + "Un Estímulo", + "Guardián", + "Hexafantasma", + "Rey Babosa", + "Autómata", + "Campeón", + "Coleccionista", + "Devorador de Tiempo", + "El Despertado", + "Ancestros", + "Dividir: Bronce", + "Dividir: Llama Fantasma", + "Dividir: Cabezafuego", + "Dividir: Cultista", + "Dividir: Protector", + "Dividir: Insultante", + "Dividir: Ancestro", + "Dividir: Temporal" + ], + "TEXT": [ + "Pierde 3 PV. NL Obtén 15 Almas.", + "Pierde 3 PV. NL Añade una carta Incolora aleatoria a tu mano.", + "Pierde 7 PV. NL Obtén una Poción aleatoria.", + "Obtén cartas del *Jefe Guardián.", + "Obtén cartas del *Jefe Hexafantasma.", + "Obtén cartas del *Jefe Rey Babosa.", + "Obtén cartas del *Jefe Autómata.", + "Obtén cartas del *Jefe Campeón.", + "Obtén cartas del *Jefe Coleccionista.", + "Obtén cartas del *Jefe Devorador de Tiempo.", + "Obtén cartas del *Jefe Despertado.", + "Obtén cartas del *Jefe los Ancestros.", + "Divídete en una slimeboundmod:Baba_Bronce.", + "Divídete en una slimeboundmod:Baba_Fantasmal.", + "Divídete en una slimeboundmod:Baba_Antorcha.", + "Divídete en una slimeboundmod:Baba_Cultista.", + "Divídete en una slimeboundmod:Baba_Protectora.", + "Divídete en una slimeboundmod:Baba_Insultante.", + "Divídete en una slimeboundmod:Baba_Ancestral.", + "Divídete en una slimeboundmod:Baba_Temporal.", + "Divídete en una slimeboundmod:Baba_Bruta.", + "Divídete en una slimeboundmod:Baba_Guerrilla.", + "Divídete en una slimeboundmod:Baba_Lodosa.", + "Divídete en una slimeboundmod:Baba_Absorbente.", + "Pierde 3 PV. NL Obtén 20 Almas.", + "Pierde 3 PV. NL Añade una carta Incolora mejorada aleatoria a tu mano.", + "Pierde 5 PV. NL Obtén una Poción aleatoria." + ] + }, + "downfall:lazyStorage": { + "NAMES": [], + "TEXT": [ + "Elige un Jefe para estudiar.", + "Elige Avanzar, Retroceder o No Hacer Nada" + ] + }, + "downfall:CharBossMerchant": { + "NAMES": [ + "Mercader" + ], + "TEXT": [] + }, + "downfall:NeowBoss": { + "NAMES": [ + "Neow" + ], + "TEXT": [ + "~Alzarse...~", + "~Lucha~ ~una~ ~vez~ ~más...~", + "~El~ ~ciclo~ ~debe~ ~terminar...~" + ] + }, + "downfall:NeowBossFinal": { + "NAMES": [ + "Neow" + ], + "TEXT": [] + }, + "downfall:OldNeow": { + "NAMES": [ + "Viejo Neow" + ], + "TEXT": [] + } +} \ No newline at end of file diff --git a/src/main/resources/downfallResources/localization/spa/EventStrings.json b/src/main/resources/downfallResources/localization/spa/EventStrings.json new file mode 100644 index 000000000..f71cb773d --- /dev/null +++ b/src/main/resources/downfallResources/localization/spa/EventStrings.json @@ -0,0 +1,630 @@ +{ + "downfall:SolShrine": { + "NAME": "Santuario de Almas", + "DESCRIPTIONS": [ + "Ante ti se encuentra un elaborado santuario dedicado a un antiguo espíritu maligno.", + "Al tocar el santuario, #yalmas se derraman desde su interior, ~bañándote~ ~en~ ~poder.~", + "Cada vez que golpeas el santuario, #yalmas emergen en ráfagas, ¡una y otra vez! NL NL Mientras consumes la energía, dudas por un momento, dándote cuenta de que este santuario podría haber sido una fuente inagotable de poder. Te preguntas si tomaste la #rdecisión #rcorrecta.", + "Ignoras el santuario." + ] + }, + "downfall:GremlinMatchGame": { + "NAME": "¡Memoriza y Gana!", + "DESCRIPTIONS": [ + "\" ... ¡ #bD-doce cartas! ¡Memorízalas para quedártelas! #bC-cinco intentos... sin segundas oportunidades. NL ¿Listo? ¡Empecemos!\"", + "Terminas el juego del gremlin y miras hacia arriba. NL ¿Desapareció?", + "Un gremlin baraja frenéticamente cartas sobre una mesa. Esta criatura parece inofensiva. Al acercarte, por un momento pierde la compostura, pero reúne el valor para dirigirse a ti.", + "¡De inmediato, el gremlin grita! NL NL \"¡NOB!!!\" NL NL Un gremlin enorme emerge de las sombras, imponiéndose sobre todos. NL \"¿Seguro que no quieres jugar?\", pregunta el gremlin." + ], + "OPTIONS": [ + "[Continuar]", + "[Salir]", + "[Jugar]", + "Intentos restantes: #y", + "[Intimidar] Roba 6 cartas.", + "[Golpear] #rLuchar. #gObtén #g6 #gCartas." + ] + }, + "downfall:WomanInBlue": { + "NAME": "La Mujer de Azul", + "DESCRIPTIONS": [ + "Escondida en la oscuridad, ves una pequeña tienda. Dentro, una mujer pálida con ropas elegantes organiza una pared llena de pociones. Se sorprende al ver tu presencia amenazante. NL \"¡Aléjate de mí y de mis cosas, engendro!\" grita.", + "Sales de la tienda con cautela, sin querer provocar una pelea.", + "#r@¡WHAM!@ NL Su puño enguantado impacta contra tu rostro, casi derribándote. NL \"Fuera, antes de que decore el suelo con tus entrañas.\" Tomas su palabra y te vas, con tus órganos aún en su lugar." + ], + "OPTIONS": [ + "[Salir]", + "[Salir] #rRecibe #r", + " #rDaño.", + "[Golpear] #rLuchar. #gObtén #guna #gReliquia #gy #g3 #gPociones." + ] + }, + "downfall:GremlinWheelGame": { + "NAME": "Gremlin: Rueda del Cambio", + "DESCRIPTIONS": [ + "Te encuentras con un gremlin elegante y alegre. A pesar de tu aspecto amenazante, no parece inmutarse, aunque notas que lanza miradas nerviosas hacia detrás del escenario. NL \"¡Es hora de girar la rueda! ¿Estás listo?\"", + "\"¡Ganaste algunas #yALMAS! NL ¡YAY!!!!\"", + "\"¡Ah, un #gregalo! NL ¡Disfrútalo!\"", + "\"¡Oooh, una #gCuración gratuita para ti!\"", + "\"Parece que ganaste una #pMaldición. NL Eso no es bueno. NL ¡Ni modo! ¡Más suerte la próxima!\"", + "\"Ohh, el poder de la #r~oscuridad...~ NL ¡Elige una carta para eliminar de tu mazo!\"", + "\"¡Oh no! NL ¡Perdiste!\" NL Lo ves prepararse con una daga...", + "Atacas al gremlin loco pero es demasiado rápido. NL Te alcanza varias veces con una daga tosca. NL \"¡El precio ha sido pagado!!\" NL Y con eso, tanto el gremlin como su rueda desaparecen en una nube de humo.", + "El gremlin mira nervioso por encima del hombro, pero pronto se relaja. Le ves gesticular con la mano, pero decides ignorarlo. NL \"Ahora, ahora, amigo, ¡la rueda ha decidido tu premio de forma justa! Nadie gira dos veces.\"", + "¡De inmediato, el gremlin grita! NL NL \"¡NOB!!!\" NL NL Un gremlin enorme emerge de las sombras, eclipsándote a ti, a la mesa y a su amigo. NL \"Mi amigo aquí sugiere que aceptes lo que la rueda te ha ofrecido.\"", + "Te acomodas junto al fuego y decides ver si tienes mejor suerte esta vez con la Rueda.", + "La Rueda ha elegido un premio. NL NL Solo necesitas extender la mano y tomarlo.", + "¡Éxito! Has encontrado lo que buscabas, ¡y justo a tiempo! NL NL #r@CRACK!@ NL NL Puede que te hayas excedido un poco con ese último giro... la Rueda se ha roto.", + "Decides tentar tu suerte otro día. NL NL Por ahora, debes descansar y recuperar la compostura.", + "Él se lanza hacia ti, pero estás preparado. NL Le cortas antes de que pueda herirte con su daga. NL Reclamas tu premio, pero lamentablemente la Rueda desaparece antes de que puedas saquearla también." + ], + "OPTIONS": [ + "[Jugar]", + "[¡Premio!] ¡YAY!!!!", + "[¡Premio!] #gObtén #guna #gReliquia.", + "[¡Premio!] #gCura #gal #gcompleto.", + "[¿Premio?] #rMaldición #r- #rDecadencia.", + "[¡Premio!] #gElimina #guna #gcarta #gde #gtu #gmazo.", + "[¿Premio?] #rPierde #r", + " #rPV.", + "[Salir]", + "Selecciona una carta para eliminar.", + "[¡Otra vez!]", + "[¡OTRA VEZ!!]", + "[Golpear] #rLuchar. #gObtén #gGremlin #gWheel.", + "[Pasar] Intenta de nuevo más tarde.", + "[¡Premio!] #gATAQUE #gPREVENTIVO!", + "[Botín]" + ] + }, + "downfall:GremlinWheelGameRest": { + "NAME": "Gremlin: Rueda de Descanso", + "DESCRIPTIONS": [], + "OPTIONS": [] + }, + "downfall:LivingWall": { + "NAME": "Muro Viviente", + "OPTIONS": [ + "[Golpear] #rLuchar. #gUsa #glas #g3 #gCabezas." + ] + }, + "downfall:Augmenter": { + "NAME": "Aumentador", + "DESCRIPTIONS": [ + "Un hombre con un parche en el ojo y una sonrisa maliciosa se acerca a ti. NL \"¡Vaya, qué sujeto tan aterrador! Tal vez no te importe la ciencia, pero te prometo que puedo hacerte más fuerte que cualquier cosecha de almas. Lo vas a necesitar si vas tras uno de esos ‘héroes’.\" NL NL ~\"¿Qué~ ~dices?\"~" + ], + "OPTIONS": [ + "[Golpear] #rLuchar. #gTómalo #gtodo." + ] + }, + "downfall:BonfireSpirits": { + "NAME": "Elemental de la Hoguera", + "DESCRIPTIONS": [ + "¡Los espíritus devoran tu ofrenda con avidez! Se sacian con almas, ardiendo más intensamente mientras el fuego @se duplica@ en fuerza. NL Los espíritus bailan alrededor de ti emocionados antes de ~fundirse~ ~con~ ~tu~ ~forma,~ llenándote de calor y fuerza. NL Aumenta tu PV Máx y te #gcuras al máximo.", + "Extiendes la mano para #ptomar... NL Los espíritus @chillan,@ ~girando~ alrededor del vórtice que emerge de tu palma en intentos inútiles de huir. NL Pronto, sus espíritus no son más que un objeto en la Colección." + ], + "OPTIONS": [ + "[Donar] #rPierde #r150 #rAlmas. #gGana #g10 #gPV #gMáx #gy #gCura #gTotal.", + "[Bloqueado] Requiere 150 Almas.", + "[Donar] #rPierde #r150 #rAlmas. #gCada #gGremlin #gGana #g2 #gPV #gMáx #gy #glos #gVivos #gSe #gCuran #gPor #gCompleto.", + "[Tomar]" + ] + }, + "downfall:FaceTrader": { + "NAME": "Vendedor de Rostros", + "DESCRIPTIONS": [ + " NL NL No parece que vaya a oponer mucha resistencia, pero ha logrado sobrevivir en este lugar. Tal vez estas máscaras tengan algún poder..." + ], + "OPTIONS": [ + "[Golpear] #rLuchar. #g100%: #gTodas #glas #gRostros." + ] + }, + "downfall:CursedFountain": { + "NAME": "La Fuente Maldita", + "DESCRIPTIONS": [ + "Te topas con un #p~líquido~ #p~púrpura~ que fluye sin fin de una fuente en una pared cercana. Lo reconoces como mortal para la mayoría de las criaturas, pero bastante beneficioso para quienes están malditos.", + "El #p~líquido~ de la fuente hierve con las almas de los perdidos. Sería un desperdicio no usarlas. Canalizas las almas en tu forma, arrancándolas de la magia de la fuente #pmaldita.", + "Sintiendo que este #p~líquido~ puede ser útil, decides capturar algo en un frasco para usarlo más adelante. Las criaturas no sintonizadas con el #pagua #poscura sin duda sufrirán al ser empapadas con ella.", + "Al beber el #p~líquido,~ sientes que un #pagarre #poscuro se adentra en tu mente. Se siente lujoso y refrescante.", + "Dejando la fuente atrás, continúas tu camino." + ], + "OPTIONS": [ + "[Embotellar] #gObtén #gPoción #gde #gLíquido #gMaldito.", + "[Consumir] #gObtén #g75 #yAlmas.", + "[Beber] #gCura #gal #gcompleto.", + "[Bloqueado] Requiere una maldición.", + "[Bloqueado] Requiere 2 maldiciones.", + "[Bloqueado] Requiere 3 maldiciones.", + "[Bloqueado] Ya usado.", + "[Salir]" + ] + }, + "downfall:WeMeetAgain": { + "NAME": "¡Nos Volvemos a Encontrar!", + "DESCRIPTIONS": [ + "\"¡JEFE!\" Un sujeto alegre y desaliñado se te acerca con entusiasmo. Lo conoces bien. NL \"¡Soy yo, #yRanwid! ¡No creerías lo que le he estafado a esos héroes malditos! ¿Tienes más chatarra para que les dé?\" NL Agradeces su simpatía y consideras tus opciones. Seguro tienes algo que Ranwid pueda usar en su próximo \"trato\"...", + "\"¡Oh, esto es perfecto! ¡Es pura basura! Toma, llévate estos elixires que me dieron los últimos tontos.\" NL Ranwid rebusca entre sus bolsas, sacando tres botellas para ti, aunque por poco las deja caer en el proceso.", + "\"¡Magnífico! Esto me será útil para el próximo trato. Ah, y estuve recolectando cadáveres, como pediste.\" NL Ranwid te entrega una piedra de alma y sale corriendo, buscando otra cara a quien vender tu baratija inútil.", + "\"¡Ejemplar! Con un poco de trabajo, haré que esto parezca algo verdaderamente especial.\" NL Ranwid se marcha examinando la reliquia con detalle, seguramente ideando cómo exagerar su valor al próximo aventurero que encuentre.", + "\"¿Nada hoy, jefe? ¡Está bien!\" NL Se marcha a toda prisa." + ], + "OPTIONS": [ + "[Perder ", + "] ", + "#gObtén #g3 #gPociones.", + "#gObtén ", + " #yAlmas.", + "#gObtén #guna #gCarta #gRara #gAleatoria.", + "[Salir]", + "[Bloqueado] No tienes reliquias para entregar.", + "#gObtén #g2 #gPociones." + ] + }, + "downfall:Designer": { + "NAME": "Diseñador In-spirado", + "DESCRIPTIONS": [ + "Descubres una tienda #g~colorida~ con un cartel que dice \"IN-SPIRADO\". Un #rBandido grita desde la entrada, amenazando a quien sea que esté dentro. NL NL @\"¡Dame@ @tu@ @dinero!\"@ NL NL El Bandido no se ha dado cuenta de tu presencia, distraído por su intento de robo.", + "No te cuesta mucho lidiar con el ladrón, pero el combate no está libre de heridas. Un hombre con ropa ridícula aparece en la entrada de la tienda. NL \"¡Gracias, amable señor de la muerte!\", dice mientras te hace señas para que entres.", + "No ves razón para involucrarte. Hay asesinatos más importantes que atender.", + "\"¡Oh cielos, eres un desastre! Esto no puede ser, no no. ¿Qué es ese estilo? ¡Debes parecer @amenazante!@ Un #rseñor del mal temido y aterrador en la Aguja. Tienes que dejarme hacerte un cambio de imagen.\" NL NL No estás seguro si deberías tomarle la palabra o sentirte ofendido por su disgusto hacia tu estilo.", + "\"¡Muy bien, adiós! ¡Cuéntale a tus amigos señores del mal!\" NL NL Aunque dudabas de la habilidad de este hombre, ahora definitivamente te sientes más intimidante.", + "Le das un puñetazo. NL \"¡Mi @ROSTRO!!@ Ahora tendré que-\" NL NL Se desmaya. Quizá la próxima vez se lo piense antes de insultar a una criatura de tu estatus.", + "Apartas al ladrón — tu ~presa~ ~real~ es ese patético diseñador. Retrocede al verte acercarte, pero extiendes tu #glinterna, y pronto su espíritu te pertenece..." + ], + "OPTIONS": [ + "[Ajustes] ", + "[Limpieza] ", + "[Servicio Completo] ", + "[Ignorar] Salir.", + "[Golpear] Salir.", + "[Entrar a la tienda]", + " #gObtén #guna #gRecompensa." + ] + }, + "downfall:DeadGuy": { + "NAME": "Aventurero Caído", + "DESCRIPTIONS": [ + "¡Mientras canalizas el ritual, te toman por sorpresa!", + "Sales sin hacer ruido.", + "Te encuentras con un #raventurero #rcaído en el suelo. NL Su espíritu aún permanece en el lugar. También, ", + "la armadura y el rostro parecen estar #r@chamuscados@ #r@por@ #r@llamas.@ ", + "parece que fue #r@apuñalado@ #r@y@ #r@pisoteado@ por una bestia con cuernos. ", + "parece que fue #r@eviscerado@ #r@y@ #r@cortado@ por enormes garras. ", + "NL Un ritual de cosecha de almas podría dar frutos aquí, pero la criatura que lo mató podría volver pronto.", + "¡El ritual extrae almas del cadáver! NL ¿Continuar canalizando?", + "El hechizo no logra extraer el espíritu del hombre caído... NL ¿Continuar canalizando?", + "Tu magia hace que el cuerpo se agite y tiemble, y de sus bolsillos cae una #rreliquia! NL ¿Continuar canalizando?", + "¡El ritual ha sido completado!" + ], + "OPTIONS": [ + "[Cosecha de Almas] #gBuscar #gBotín. #r", + "[Salir]", + "[Luchar]", + "[Continuar] #gBuscar #gBotín. #r", + "%: #rregresa #rla #rcriatura." + ] + }, + "downfall:ShiningLight": { + "NAME": "Luz Resplandeciente", + "DESCRIPTIONS": [ + "Encuentras una brillante #ymasa #yde #yluz ocupando el centro de la sala. NL NL Su ~brillo~ ~cálido~ y ~patrones~ ~hipnóticos~ te revuelven el estómago, pero sabes que esa luz contiene un poder inmenso.", + "Mientras atraviesas la luz, haces una mueca cuando es absorbida en tu ser. NL Está #r@abrasadora@ #r@caliente@! No sientes dolor, y aunque estás #brevitalizado, el recuerdo de ese calor repugnante te dejará cicatrices.", + "La rodeas, preguntándote qué habría pasado." + ], + "OPTIONS": [ + "[Entrar] #gMejora #g", + "[Salir]", + "[Bloqueado] Requiere cartas que puedan mejorarse", + " #gcartas #galeatorias. #rObtén #rMaldición #r- #rDefectuosa." + ] + }, + "downfall:WorldOfGoop": { + "NAME": "Mundo de Moco", + "DESCRIPTIONS": [ + "¡Caes en un charco! NL ¡ESTÁ HECHO DE #g@MOCO@ #g@VERDE!!@ NL Sientes moco en tus oídos, en tu nariz, ¡en todas partes! NL Al salir, notas pegado a tu cuerpo un Slime #yamarrillo de aspecto único. Parece haber estado recolectando #yAlmas de aventureros desafortunados que cayeron en el charco. Qué conveniente.", + "No queriendo que este incidente quede sin recompensa, atacas al slime #yamarrillo. NL NL @!Estalla@ al instante! NL NL No creías que fuera posible, pero ahora estás aún más cubierto de moco que antes.", + "Te sacudes el slime #yamarrillo y continúas tu viaje, aunque aún parcialmente cubierto de moco. Ciertamente te añade una estética intimidante." + ], + "OPTIONS": [ + "[Cosecha Completa] #gObtén #g", + "[Drenar] #gObtén #g", + "[Extraer] #gObtén #g", + " #gAlmas. #rObtén #rMaldición #rTriple #r- #rPegajoso.", + " #gAlmas. #rObtén #rMaldición #rDoble #r- #rPegajoso.", + " #gAlmas. #rObtén #rMaldición #r- #rPegajoso.", + "[Salir]" + ] + }, + "downfall:Serpent": { + "NAME": "La Ssssserpiente", + "DESCRIPTIONS": [ + "Entras a una sala donde encuentras un enorme agujero en el suelo. A medida que te acercas, una colosal serpiente emerge. NL NL ~\"¡Ho~ ~hooo!~ ~¡Hola~ ~hola!~ ~¿Qué~ ~tenemos~ ~aquí?~ A ti, mi señor, te hago una pregunta simple. NL La vida más satisfactoria es aquella en la que puedes #r~¡golpear~ #r~todo!~ NL ¿Estás de acuerdo?\"", + "~\"Hssssssssssss...~ ~..ssSSs.....~ ~ss...~ ~sssss....\"~", + "La serpiente te mira con una expresión de extrema decepción.", + " NL NL La serpiente alza la cabeza y lanza un grito horrible. Su cuerpo cae inerte en el hoyo, y su fuerza vital queda disponible para ser cosechada. NL NL Es sobrecogedor, pero no puedes evitar preguntarte si hablaba metafóricamente. Tal vez quería animarte a hacer violencia sobre otros, pero no sobre sí misma...", + "Al extender tu mano, la serpiente @se echa hacia atrás,@ chillando de miedo. ~\"¡Hssss - el Taaaomador!\"~ NL NL ~\"Tu codicia supera la mía. Por favor, déjame...\"~ NL No le prestas atención. Su espíritu ahora es tuyo, y continúas tu camino." + ], + "OPTIONS": [ + "[Aceptar] [Golpear] #gObtén #g", + " #gAlmas. #rObtén #rMaldición #r- #rDuda.", + "[Rechazar]", + "[Salir]" + ] + }, + "downfall:WingStatue": { + "NAME": "Estatua Alada", + "DESCRIPTIONS": [ + "Entre piedras y rocas, notas una gran estatua azul en forma de ala. NL Ves #ymonedas #ybrillantes saliendo de sus grietas, pero no te interesan. Sin embargo, la estatua en sí...", + "Sabiendo que podrías encontrar cultistas del Iluminado, decides llevarte la estatua rota. Podría ayudarte a convertir a los miembros del culto a tu causa.", + "Con todas tus fuerzas, golpeas la estatua. NL Pronto @se@ @desmorona,@ dejando una astilla afilada y mortal. Tomas el fragmento y sigues adelante.", + "Pasas de largo y continúas tu camino.", + "¿CA...CAW?! ¿Un regalo para el DIOS PÁJARO?", + "¡CA-CAAAW!!", + "¿Un intercambio? Una oferta justa...", + "El culto estará complacido." + ], + "OPTIONS": [ + "[Destruir] #rPierde #r", + " #rPV. #gObtén #gFragmento #gAfilado.", + "[Recolectar] #rPierde #r", + "[Salir]", + " #rPV. #gObtén #gEstatua #gAlada #gRota." + ] + }, + "downfall:GoldenIdol": { + "NAME": "Ídolo Dorado", + "DESCRIPTIONS": [ + "Encuentras un pedestal sencillo con un #yídolo #ybrillante reposando tranquilamente en lo alto. Parece increíblemente valioso. NL NL Los aventureros seguramente serán atraídos hacia este objeto. Tal vez valga la pena montar una trampa.", + "Encuentras un pedestal sencillo con un #yídolo #ybrillante reposando tranquilamente en lo alto. Parece increíblemente valioso. NL NL El cuerpo de un aventurero yace no muy lejos, claramente aplastado por un objeto masivo. Su alma aún permanece en el área.", + "Usando el peso del ídolo como gatillo, preparas una trampa sencilla para hacer caer una enorme roca sobre quien intente reclamar el #yartefacto brillante. NL Satisfecho con tu construcción, decides seguir adelante.", + "Canalizas el espíritu del aventurero hacia tu cuerpo, absorbiendo su energía en la tuya.", + "Decides dejar el pedestal intacto. Preparar una trampa está por debajo de ti.", + "Decides dejar el alma en paz y continuar tu camino." + ], + "OPTIONS": [ + "[Montar Trampa] #gElimina #gun #gGolpe.", + "[Cosechar] #gObtén #y", + " #yAlmas.", + "[Salir]", + "[Bloqueado] Requiere un Golpe." + ] + }, + "downfall:Cleric": { + "NAME": "El Clérigo", + "DESCRIPTIONS": [ + "Un extraño humanoide azul con un casco (?) brillante se te acerca con una enorme sonrisa. NL Al darse cuenta de lo que eres, la radiante sonrisa de la criatura se convierte rápidamente en una expresión de puro terror. NL ~\"¡M-MONSTRUO!!\"~ grita la figura, dándose la vuelta para huir.", + "La criatura cae con un solo golpe, convirtiéndose en un montón de carne azul destrozada. Absorbes su #yAlma y continúas tu camino.", + "\"¡Clérigo ayuda! ¡Clérigo ayuda!\" grita mientras te acercas de forma amenazante. NL Una fría llama azul envuelve tu cuerpo y se disipa. NL Inmediatamente después, este \"Clérigo\" huye." + ], + "OPTIONS": [ + "[Golpear] #gObtén #y", + "[Intimidar] #gElimina #guna #gcarta #gde #gtu #gmazo.", + "[Salir]", + "Selecciona una carta para eliminar.", + " #yAlmas." + ] + }, + "downfall:Ghosts": { + "NAME": "Consejo de Fantasmas", + "DESCRIPTIONS": [ + "Mientras continúas descendiendo, #phumo #pnegro #pdenso comienza a salir del suelo y de las paredes a tu alrededor, formando tres figuras enmascaradas que empiezan a hablar. NL NL ~\\\"Otro~ ~títere~ ~del~ #r~Corazón,~ ~creo.\\\"~ NL #r@¡DE ACUERDO!@ #r@¡SIEMPRE@ #r@ENVÍA@ #r@A@ #r@LOS@ #r@PEONES@ #r@MÁS@ #r@DÉBILES!\"@ NL NL Notas una sonrisa exagerada mientras el tercero se dirige a ti. NL \\\"Ignora a los otros... ¿Te gustaría probar nuestro #y~poder?\\\"~", + "\\\"¡Una @ofrenda!@ Qué ~tentador...\\\"~ NL NL Mientras la figura fantasmal habla, notas que su enorme boca se abre más y más. Dentro de tu cuerpo, sientes cómo las #b~almas~ que recolectaste de los muertos son arrancadas violentamente y absorbidas en su enorme boca. NL NL Usas toda tu fuerza para mantenerte en pie y no ser absorbido tú también. Justo antes de caer, el vórtice se detiene y los fantasmas se desvanecen en el éter. NL NL Continúas tu camino sintiéndote algo #bvacío.", + "Los #pfantasmas se ríen mientras te acercas. NL NL #r@¡AH!@ #r@¡NUESTRO@ #r@BUEN@ #r@AMIGO!@ NL Sus #pformas #pgaseosas llenan la habitación... NL NL \\\"¿Vienes por lo ~de siempre~, suponemos?\\\"" + ], + "OPTIONS": [ + "[Ofrendar] #rPierde #r", + " Almas. #gObtén Aparición.", + "[Bloqueado] Requiere ", + " Almas." + ] +} +, + "downfall:CursedTome": { + "NAME": "Tomo Maldito", + "DESCRIPTIONS": [ + "En un templo abandonado, encuentras un enorme libro abierto lleno de #pescritos #pcrípticos. NL NL No necesitas interpretar los símbolos: sabes bien el poder que contienen, y el #rcosto que implican para su portador.", + "Comprendiendo el costo, decides llevarte el tomo contigo. Al acercarte al pedestal, una trance del libro te habla con #rmil #rvoces, ¡rasgando tu alma! NL NL Con el libro asegurado y tu mente más corrupta que antes, abandonas el templo sintiéndote #bagotado...~" + ] + }, + "downfall:ForgottenAltar": { + "NAME": "Altar Olvidado", + "DESCRIPTIONS": [ + "Te paras sobre el altar y canalizas la energía espiritual desde tu interior. NL Mientras las #bAlmas fluyen como ofrenda a la diosa, los brazos de la estatua se extienden y emiten una reconfortante #pmagia #pmaldita. NL Todo se vuelve oscuro. NL Despiertas un momento después, con tus heridas y lesiones completamente sanadas.", + "Después de tomarte un momento para admirar el mal que emana de la estatua, continúas tu camino por la Ciudad." + ], + "OPTIONS": [ + "[Ofrendar Almas] #rPierde #r", + " #rAlmas. #gCura #g", + " #gPV.", + "[Bloqueado] Requiere ", + " Almas.", + "[Salir]" + ] + }, + "downfall:Bandits": { + "NAME": "Bandidos Enmascarados", + "DESCRIPTIONS": [ + "Te encuentras con un grupo de bandidos con grandes #rMáscaras #rRojas. NL \"Hola, paga o... ¡Oh! Un ~monstruo.~ Tal vez necesites nuestros servicios, ¿eh?\"", + "¡Gracias, chiflado! Seguro que no te arrepentirás..." + ], + "OPTIONS": [ + "[Perder ", + "] #gContrata #ga #glos #gBandidos.", + "[Bloqueado] Requiere más Reliquias." + ] + }, + "downfall:Nloth": { + "NAME": "N'loth", + "DESCRIPTIONS": [ + "Decidiendo que esta criatura rastrera no pertenece a la Aguja, le das un golpe rápido y potente directamente en el pecho. NL NL Mientras se retuerce de dolor, sus tentáculos @te azotan@ por reflejo, ¡dejando una #rdolorosa marca! NL NL Cuando su forma sin vida cae al suelo, oyes el tintineo de amuletos y baratijas. Al revisar su cuerpo, igual que él revisaba los montones de basura, encuentras un poderoso objeto mágico." + ], + "OPTIONS": [ + "[Golpear] #gObtén #gReliquia #gAleatoria. #rObtén #rMaldición #r- #rDolor." + ] + }, + "downfall:KnowingSkull": { + "NAME": "Calavera Sabia", + "DESCRIPTIONS": [ + "Te encuentras en una antigua cámara decorada. En el centro de la sala, una gran calavera descansa sobre un pedestal ornamentado. Al acercarte, la calavera #g@estalla@ #g@en@ #g@llamas@ y se gira hacia ti. NL NL \"¿QUÉ ES LO QUE BUSCAS? ¿QUÉ ES LO QUE OFRECES?\" NL En sincronía con sus últimas palabras, la puerta tras de ti @se@ @cierra@ @de@ @golpe.@", + "\"¡Eyeyeyey manos fuera del coco—\" NL NL Ignorando las quejas de la calavera, la arrancas del pedestal, quedando momentáneamente #rquemado por sus llamas. Tal vez te sea útil más adelante...", + "\"DETÁS DE TI, MORTAL.\" NL Miras tras la calavera. Y sí, hay una puerta." + ], + "OPTIONS": [ + "[Tú.] #gObtén #gla #gCalavera. #rPierde #r", + "[Salir]", + " #rPV." + ] + }, + "downfall:Vagrant": { + "NAME": "Vagabundo Suplicante", + "DESCRIPTIONS": [ + "Matas al hombre y cosechas su alma. ~Gritos~ provienen de la multitud detrás de ti. NL \"¡Acaba de matar a Burgundy!\" dice una figura, mientras más mendigos como el que encontraste comienzan a acercarse. NL NL Escapas, pero no sin sufrir algunos #rarañazos y #rmordidas.", + "Le arrebatas la preciada #rreliquia de las manos y te alejas. NL Detrás de ti oyes: NL \"¿¡No tienes vergüenza!? ~¿¡NO~ ~TIENES~ ~VERGÜENZA!?\"~ NL No tienes #pni #puna #psola #pvergüenza. ¡Es un honor ser robado por un Señor de la Aguja!", + "No te interesan los juguetes del hombre – su ~espíritu~ es lo que será más útil. El pobre gime mientras @extiendes@ @tu@ @brazo...@" + ], + "OPTIONS": [ + "[Golpear] #gObtén #g85 #gAlmas. #rPierde #r", + " #rPV.", + "[Robar] #gObtén #guna #gReliquia. #rObtén #rMaldición #r- #rOrgullo." + ] + }, + "downfall:Beggar": { + "NAME": "Viejo Mendigo", + "DESCRIPTIONS": [ + "El mendigo se quita la capa, revelando una figura humanoide azul con un casco (?) brillante. NL Al darse cuenta de lo que eres, la sonrisa de la criatura se convierte rápidamente en una expresión de puro terror. NL ~\"¡M-MONSTRUO!!\"~ grita, dándose la vuelta para huir.", + "El viejo mendigo mira a su alrededor, aparentemente confundido. Al principio te ignora mientras busca por la zona, luego te mira. NL \"¿Has visto por aquí a un joven de piel azul? ¿Con un casco brillante raro? Suele pasar por la ciudad gastando su diezmo en comida para nosotros...\" NL Debe referirse a aquel llamado #bClérigo, al que acabaste hace poco.", + "@\"No @ @temas,@ @viejo@ @hombre.@ @Verás@ @a@ @tu@ @amigo@ @antes@ @de@ @lo@ @que@ @crees.\"@ NL NL El mendigo apenas puede defenderse y lo derribas fácilmente. NL Dejando el callejón atrás, avanzas sintiéndote excesivamente #yorugulloso del trabajo hecho hoy.", + "Este hombre ya ha sufrido bastante por tus acciones anteriores. Decides perdonarle la vida y seguir tu camino.", + "El mendigo se quita la capa y revela que es #b¡Clérigo! NL @\"¡Eres@ @un@ @alma@ @horrible!@ ¡@Clérigo@ @pagó@ @por@ @protección!\"@ grita. NL NL Dos enormes figuras emergen del callejón, cada una con armadura completa. Antes de que puedas reaccionar, desenvainan sus espadas y cargan contra ti!", + "Tras matar a los guardaespaldas del #bClérigo, lo acorralas en una esquina del callejón. Está aterrorizado y temblando.", + "La criatura cae con un solo golpe, convirtiéndose en un montón de carne azul destrozada. Absorbes su #yAlma con gusto y continúas tu camino. NL NL Al irte, notas a otros mendigos mirando desde los edificios y callejones. Te deleitas con su miedo – que esto sirva de lección para cualquiera que se atreva a desafiar a un Señor de la Aguja.", + "\"¡Clérigo ayuda! ¡Clérigo ayuda!\" repite la criatura, apenas pudiendo hablar mientras tiembla de miedo. NL Una llama azul y fría envuelve tu cuerpo y se disipa. NL NL Decides que sus poderes pueden ser útiles más adelante, y que puedes encargarte de cualquier guardaespaldas que intente contratar, así que dejas vivir a este \"Clérigo\" una vez más." + ], + "OPTIONS": [ + " #rObtén #rMaldición #r- #rOrgullo.", + "[Luchar]", + "[Amenazar] #gElimina #g2 #gcartas #gde #gtu #gmazo." + ] + }, + "downfall:Mausoleum": { + "NAME": "El Mausoleo", + "DESCRIPTIONS": [ + "Al explorar una serie de tumbas, te topas con un gran sarcófago ~incrustado~ ~de~ ~gemas~ en el centro de una sala circular. NL No logras descifrar la escritura del ataúd, pero notas una #pniebla #pnegra saliendo por los bordes. NL Conoces esa niebla – es una clara señal de #yespíritus.~", + "Absorbes la #pniebla #pfantasmal, reuniendo sus espíritus. Pero al marcharte, no puedes evitar empezar a #rsentir #run #rescalofrío..." + ], + "OPTIONS": [ + "[Banquete] #gObtén #g200 #gAlmas. #rObtén #rMaldición #r- #rEmbrujado." + ] + }, + "downfall:Nest": { + "NAME": "El Nido", + "DESCRIPTIONS": [ + "Una larga fila de #bfiguras #bencapuchadas entra a una #pcatedral #pdisimulada. NL En cuanto entras, todos se giran hacia ti. NL NL Tus oídos se llenan de jadeos, vítores y graznidos. Un cultista se te acerca con una ofrenda.", + "Al ver un arma peligrosa en el altar, atraviesas la fila de cultistas y tomas el premio. Rápidamente eres rodeado por #r¡Cultistas! NL NL #r@¡ASESINATO!@ #r@¡ASESINATO!@ #r@¡ASESINATO!@ NL #b~¡GRAZNA~ #b~GRAZNA~ #b~GRAAAAAAAK!~ NL NL Sacan sus dagas, #rcortando y #rrajando mientras tú escapas del edificio.", + "Aceptas la ofrenda del cultista y tomas el extraño elixir. NL NL Los cultistas @cantan@ y @vitorean@ por ti. NL NL #b~¡GRAZNIDO~ #b~GRAZNIDO~ #b~GRAAAAAK!~ NL NL Tú también cantas. ¿Por qué no? Son raros, pero sirven bien a uno de tus compañeros señores de la Aguja.", + "#r@¡DIOSPÁJARO!@ #r@¡HA@ #r@VUELTO!@ NL #b~¡GRAZNA~ #b~GRAZNIDO~ #b~GRAAAAAK!~ NL NL Entre la multitud de cultistas, te enfrentas al líder. Uno bien vestido te entrega una #yDaga #yRitual #yAdornada.", + "Tomas la daga, sin saber qué pasará. El líder del culto saca una mezcla #bazul #baceitosa de su túnica y te la ofrece.", + "Los cultistas rodean al líder con objetos. Pronto él también tiene su daga y poción, y te indica con gestos que lo imites.", + "Siguiendo el ritual del líder, descorchas la poción y viertes un poco sobre la hoja. El acero brilla con un #bresplandor #braro bajo la luz de la catedral. NL NL Sin palabras, dos cultistas se acercan – uno hacia ti, otro hacia él. NL NL Ahora está claro lo que quieren que hagas.", + "#r¡CLAVAS #rLA #rDAGA #ren #rel #rCORAZÓN #rDEL #rCULTISTA! NL NL #b~¡GRAZNA~ #b~GRAZNIDO~ #b~GRAAAAAK!~ NL NL El ritual se ha completado y los cultistas restantes celebran felices. Agitan palos y te despiden con vítores al salir." + ], + "OPTIONS": [ + "[Devolver Estatua] #rPierde #rEstatua #rAlada #rRota. #gObtén #gmuchas #grecompensas.", + "[Bloqueado] Requiere Estatua Alada Rota.", + "[Aceptar] #gObtén #gPoción #gde #gCultista.", + "[Robar] #gObtén #gDaga #gRitual. #rPierde #r", + " #rPV.", + "[Salir]", + "[Continuar]", + "[Tomar Daga] #gObtén #gDaga #gRitual.", + "[Ungir] #gMejora #gDaga #gRitual.", + "[Sacrificio] #rMata #ral #rCultista #rcon #rDaga #rRitual+.", + "[Ser Alabado] #gObtén recompensas por devolver la #gEstatua #gAlada #gRota." + ] + }, + "downfall:Colosseum": { + "NAME": "El Coliseo", + "DESCRIPTIONS": [ + "Mientras continúas tu descenso por la Aguja, notas un grupo de humanoides esperando en emboscada cerca de un enorme auditorio. Al acercarte, los Esclavistas se sobresaltan, pero rápidamente se explican. NL NL \"¡Esperamos a aquellos que intentarían atacar nuestra Ciudad – los mismos que tú deseas destruir! Tenemos una audiencia esperando una nueva captura. ¡Al pueblo le encanta un #rcombate a #rmuerte!\"", + "Los esclavistas no representan una amenaza para ti, y podrían ser útiles si logran ralentizar o herir a tu presa. NL NL Sin embargo, este espectáculo de sangre podría ser demasiado tentador para dejarlo pasar...", + "Entras al enorme estadio y encuentras una audiencia repleta de #bEsclavistas, #pCultistas y otros habitantes de la Ciudad. NL NL ", + "@\"¡TRÁIGANME@ @A@ @LOS@ @MEJORES!\"@ retumbas hacia la multitud, desafiando a sus campeones. NL Dos retadores se acercan, advirtiéndote que las reglas de la arena les impiden contenerse, a pesar de tu posición como señor de la Aguja. NL NL No esperarías menos.", + "@\"¡EL@ @SIGUIENTE@ @ES@ @MÍO!\"@ ruges hacia la multitud, que responde con una ovación ensordecedora. NL NL No pasa mucho tiempo antes de que los esclavistas arrastren a su última presa. El desafortunado retador despierta, ~aturdido~ por la emboscada, pero se prepara. NL NL Esto será divertido.", + "Decides que, aunque tentador, pelear aquí sería una distracción innecesaria. Tu viaje continúa, dejando a los esclavistas para que reanuden su emboscada." + ], + "OPTIONS": [ + "[Desafío] #rLucha #rcontra #rCampeones #rde #rla #rArena. #gObtén #gmuchas #grecompensas.", + "[Participar] #rLucha #rcontra #rHéroe #rCautivo. #gObtén #gmuchas #grecompensas.", + "[Salir]", + "[¡LUCHA!]", + "[Continuar]" + ] + }, + "downfall:MindBloom": { + "NAME": "Flor Mental", + "DESCRIPTIONS": [ + "Mientras caminas por la belleza del Más Allá, tus pensamientos de repente comienzan a sentirse muy... #p~reales...~ NL NL Imágenes de #raventureros #rasesinados y #balmas #bacumuladas empiezan a manifestarse en la realidad. NL La sensación se desvanece rápidamente. ¿Qué haces?", + "Sabes que has estado aquí antes. NL NL Cazando al mismo aventurero. NL NL ¿Es esto real? NL NL ¿Cuántas veces has sido asesinado?", + "Ahora todo tiene sentido. NL El propósito único, el descenso, el #pCorazón. NL NL Así fue siempre. NL Así será por siempre. NL Todo será olvidado nuevamente pronto..." + ], + "OPTIONS": [ + "[Soy un Eco] #rLucha #rcontra #rti #rmismo. #gObtén #guna #gReliquia #gRara.", + "[Estoy Saciado] #gObtén #g999 #gAlmas. #rMaldición #r- #r2 #rNormalidad.", + "[Estoy Completo] #gMejora #gtodas #gtus #gCartas. #rObtén #rCarga.", + "[Bloqueado] Requiere las 3 Bendiciones del Corazón.", + "[Salir]", + "[Estoy Completo] #gMejora #gtodas #gtus #gCartas. #rObtén #rCarga." + ] + }, +"downfall:MoaiHead": { + "NAME": "La Cabeza Moai", + "DESCRIPTIONS": [ + "Decides hacer un pequeño desvío hacia uno de los monumentos más grandes del Más Allá: una enorme cabeza de piedra que emerge de un gran segmento de muro. NL NL La boca de la cabeza está completamente abierta, revelando grandes y amenazantes dientes manchados de sangre. La superficie de la estatua está cubierta de pictogramas que parecen indicar que personas se lanzaban dentro de la boca para ser devoradas.", + "Subes a la boca de la estatua, esperando a que se active, sabiendo que deberás pagar con sangre. Poco después, los enormes molares caen desde lo alto y te aplastan por completo. NL @Oscuridad.@ NL Algún tiempo después, en la oscuridad, ves un rayo de luz y escuchas lo que ahora reconoces como el sonido de los dientes de piedra elevándose lentamente. NL NL Sales restaurado, con la magia de la estatua fluyendo a través de ti.", + "Subes a la boca de la estatua y dejas fluir desde tu cuerpo una inmensa cantidad de #benergía #bespiritual. Los ojos de la estatua brillan #b~en llamas,~ y sus enormes molares caen sobre ti. NL #b~Luz~ #bazul~ #bpor~ #btodas~ #bpartes.~ NL NL Cuando los dientes se elevan, te sientes completamente renovado y más poderoso que nunca.", + "Te vas, preguntándote qué podría haber sido." + ], + "OPTIONS": [ + "[Ofrecer Almas] #rPierde #r", + " #rAlmas. #gGana #g", + " #gPV #gMáx y #gCura #gcompleta.", + "[Bloqueado] Requiere ", + " Almas.", + " #rAlmas. #gCada #gGremlin #gObtiene #g", + "[Saltar Dentro] #gCura #gcompleta. #rCada #rGremlin #rPierde #r" + ] + }, +"downfall:SensoryStone": { + "NAME": "Piedra Sensorial", + "DESCRIPTIONS": [ + "#g~VANIDAD.~ NL NL La vida es una cosa hermosa y magnífica... incluso para una #gbaba. NL Siempre supiste que estabas destinado a grandes cosas. Los demás se conforman con monedas y trozos de chatarra, pero no tú. Esperas, como un depredador, algo especial. Algo único. Algo ~fabuloso.~ NL Días... semanas... tal vez años pasan... es difícil saberlo en la Aguja. Hasta que, al fin, lo ves. ¡Ya no serás contado entre las masas! Ellos pueden tener sus #ymonedas y #ybaratijas, pero tú tienes algo mejor... NL @¡Un@ @PEQUEÑO@ @SOMBRERO@ @DE@ @PICO!@ ¡Elegante!", + "#y~DEBILIDAD.~ NL NL La #rhoja entra en tu pecho, y el griterío de la #bmultitud llena tus oídos... lo último que sentirás es una mano cruzando tu rostro, y tus ojos se cierran. NL Despiertas en una habitación desconocida, @incapaz@ @de@ @moverte.@ Intentas hablar, pero no salen palabras, y tu visión está nublada por una #gguía #gverde. ¿Es esto un sueño? ¿Es esto la vida después de la muerte? Tratas de recordar, pero tus pensamientos son tan desconectados como tus brazos y piernas. NL Oyes una voz en tu mente - un solo comando. #g\"EL #gBALANCE #gDEBE #gSER #gIMPUESTO. #gGUARDIA #gExordium.\"", + "#p~DESESPERANZA.~ NL NL #yObserva. #yRecuerda. #yVive. Esta es la misión del Vigía. Tu tarea es investigar una Aguja de origen desconocido. Entras a una sala hexagonal y antes de que puedas reaccionar, ¡la puerta @se@ @derrumba@ @detrás@ @de@ @ti!@ NL No hay escape. El único camino para salir es tomar una tableta, claramente infundida con magia, que descansa sobre un pedestal. En el momento en que tu piel toca el artefacto, tu cuerpo ~se disuelve~ ~en~ ~nada,~ y tu #psalma es absorbida por la #ppiedra. NL Tu destino estará atado para siempre a la #ptableta, #rmaldito para vagar por la Aguja eternamente.", + "#y~DESVINCULACIÓN.~ NL NL Eres el primero. Sirves al ~Modelador.~ No naciste, con debilidad y fragilidad, sino creado. Perfecto. Y en tu imagen crearás más constructos. Los #yautómatas legado del Creador. NL Cada uno perfecto en su diseño, todos para servir a un propósito específico. Todos excepto uno. El que debe mantener el balance en la Ciudad. NL Lanzaste el #yconstructo #ydefectuoso desde la ventana más alta, arrojándolo al fondo de la Aguja, y tomaste su lugar como protector de la Ciudad. NL El balance debe ser mantenido.", + "#b~ORGULLO.~ NL NL Estás en el centro de una gran arena. Todo lo que has trabajado culmina en este combate singular. Adoptas una #bposición #bdefensiva, drenando la energía de tu enemigo, hasta que se presenta una apertura. Con tu último esfuerzo, #rclavas #rtu #respada en el pecho de tu oponente. La multitud estalla en @aplausos@ @estruendosos!@ NL No eres quien para detenerte solo con ganar, levantas tu mano abierta y golpeas a tu enemigo ~a través~ ~del~ ~rostro,~ dando un golpe final de lo más insultante. NL Ya no hay nadie en tu camino. Eres el nuevo #b@Campeón!@", + "#p~CODICIA.~ NL NL Pocos hombres pueden resistir la #btentación #bdel #bpoder. Pero el poder tiene un costo, y un gran poder tiene un precio aún mayor. NL Te sientas en tu trono sobre el Coliseo, observando a los hombres #rpelear #ra #rmuerte por tu diversión para obtener el título de #bCampeón. El precio por entrar - la #g~llama~ #g~de~ #g~su~ #g~alma~ #g~eterna~ en servicio para ti. Cada nombre grabado en una tableta, atándolos a ti en el más allá. NL La multitud aplaude mientras un luchador es derribado con un golpe final. Vas a tu cámara, pero alguien ha estado aquí. Se disparan trampas, pero no hay cuerpo... ¡y la #p@tableta@ @ha@ @desaparecido!@", + "#g~DOLOR.~ NL NL Finalmente, te encuentras en la cima más alta de la Aguja. Has pasado años trabajando incansablemente para llevar esta colosal obra de arquitectura, un monumento al Gran Ser, a la vida. Cada #gcurva redondeada a la perfección. Cada #yorilla colocada meticulosamente. NL “Está hecho, mi amor.” Cubriendo su mano sin vida con la tuya, enciendes la máquina. Un suave zumbido llena la sala, y pronto sientes tu #b~esencia~ ser absorbida por tu creación - rápidamente acompañada por otra. Vivirás junto con ella toda la eternidad en este lugar, justo como lo planeaste. NL Con un eco resonante... el #pCorazón ~late~ su primer latido.", + "#b~FURIA.~ NL NL Eres incapaz de detener el #yornamentado #ypuñal que entra en tu pecho. En tu último momento, rezas a cualquier #pdeidad que gobierne esta Aguja para que te dé la fuerza de vivir, ~sin~ ~importar~ ~el~ ~costo.~ NL Tu #pcorazón da un fuerte latido final, luego se silencia... por un momento. Tus ojos brillan con #b@fuego@ #b@azul@ mientras regresas a la vida con la fuerza de diez hombres, rompiendo tus cadenas con facilidad y rugiendo a la multitud de #bfiguras #bencapuchadas que te rodean! NL Mientras sientes tu cuerpo comenzar a transformarse en una #bforma #bmonstruosa, las figuras se inclinan ante ti.", + "#p~ARROGANCIA.~ NL NL Desprecias al #psemidios #pCorazón que controla este lugar, dictando tu destino. Es #yel momento de actuar. NL El Más Allá es la sección menos custodiada de la Aguja, y logras entrar en su #ytesorería con facilidad. Hay muchos artefactos de poder aquí, pero uno en particular te llama la atención - un #y~reloj~ #yde~ #ybolsillo.~ NL Con una confianza inquebrantable, extiendes la mano y tomas el reloj de bolsillo... @...jolerr@ @le@ @saraga@ @y@ @onam@ @al@ @sednetxe@ @,elbatnarbeuqni@ @aznafiecnoc@ @anu@ @noC@ NL Desprecias al #psemidios #pCorazón que controla este... lugar...?", + "Pensándolo mejor, quizás los recuerdos deben dejarse en el pasado." + ], + "OPTIONS": [ + "[Recordar] #gAñade #g1 #gCarta #gde #gJefe #gde #gla #gAguja #ga #gtu #gmazo.", + "[Recordar] #gAñade #g2 #gCartas #gde #gJefe #gde #gla #gAguja #ga #gtu #gmazo. #rPierde #r", + "[Recordar] #gAñade #g3 #gCartas #gde #gJefe #gde #gla #gAguja #ga #gtu #gmazo. #rPierde #r" + ] +}, +"downfall:SecretPortal": { + "NAME": "Portal Secreto", + "DESCRIPTIONS": [ + "Ante ti se encuentra una visión bienvenida - en una de las paredes vivientes del Más Allá hay una entrada de piedra encerrada con un #p~torbellino~ #p~mágico~ #p~portal.~ NL NL Este portal permite un acceso rápido al señor del Más Allá. Sin embargo, si tomas la piedra que lo alimenta, tu viaje a través de la Aguja se acelerará.", + "El portal siempre podrá repararse después. Arrancas la piedra rúnica que alimenta el portal, y rápidamente consideras a dónde ir a continuación. La piedra solo permanecerá útil por un breve momento." + ], + "OPTIONS": [ + "[Tomar Piedra] Salta a cualquier habitación que no sea Jefe." + ] +}, +"downfall:TombRedMask": { + "NAME": "Tumba del Señor Máscara Roja", + "DESCRIPTIONS": [ + "Una tumba altamente ornamentada puede verse al otro lado de un camino flotante. NL NL Al llegar a la tumba, notas una pared suave, probablemente conteniendo un compartimiento secreto. Un buen golpe debería ser suficiente para derribarla.", + "Te pones la #rmáscara. Los bandidos que acordaron ayudarte parecen tener una conexión con este Señor - tal vez se inspirarán con tu nueva adorno.", + "Aparece una abertura en la tumba y sale una pequeña máscara roja con una nota adjunta. \"¡Toma de los demás como yo tomé de ti!\"", + "Decides no perturbar la tumba y sigues tu camino.", + "Satisfecho con la máscara, sigues adelante." + ], + "OPTIONS": [ + "[Ponerse la Máscara Roja] #gMejorar #gContrato #gBandido.", + "[Bloqueado] Requiere: Máscara Roja y Contrato de Bandido.", + "[Golpear] #rPierde ", + ". #gObtén #gMáscara #gRoja.", + "[Bloqueado] Requiere un Ataque.", + "[Salir]" + ] +}, +"downfall:WindingHalls": { + "NAME": "Pasillos Serpenteantes", + "DESCRIPTIONS": [ + "Mientras avanzas lentamente por los caminos torcidos, te encuentras en los infames pasillos cambiantes del Más Allá. Un ser inferior se volvería loco tratando de navegar por ellos, pero para ti, son tan familiares como un viejo amigo. NL NL El constante #p~susurro~ #p~de~ #p~voces~ calma tu mente mientras decides qué camino tomar." + ], + "OPTIONS": [ + "[Izquierda] #gExplora #gun #gEvento.", + "[Derecha] #gBuscar #gel #gtesoro #gpara #guna #gReliquia.", + "[Recto] #gCazar #gal #gMercader." + ] +}, +"downfall:Joust": { + "NAME": "La Justa", + "DESCRIPTIONS": [ + "Mientras avanzas por los grandes edificios te encuentras con un largo y estrecho puente y ves caballeros de ambos lados, enfrentándose entre sí. Te acercas y se dispersan, mirándose furiosos. NL \"¡Monstruo! ¡TÚ luchas contra él, si eres tan bueno matando cosas!\" NL \"¡No, TÚ luchas contra él! Sabes más sobre monstruos, con ese ~gato~ ~demoníaco!~\" NL NL No dejan de discutir. Tendrás que decidir...", + "Este caballero era claramente más fuerte que el otro, y trataste lo mejor que pudiste, pero finalmente fuiste derrotado. NL \"¡Me gustaría verte vencer a una bestia como esa!\" dice al otro caballero mientras se alejan, discutiendo.", + "Evitas despiadadamente los ataques del caballero y #rcasí lo matas, absorbiendo sus #galmas con gusto. El otro caballero grita y huye. Qué cobarde...", + "El caballero cobarde te da unos rasguños molestos desde lejos con su espada larga, luego huye gritando. El otro caballero corre tras él, enfadado. Vuelves a tu tarea, molesto.", + "Te ~inclinas~ sobre el caballero, y en lugar de intentar huir, simplemente se acobarda. Lo #rasesinas fácilmente y tomas sus #galmas, pero cuando te giras para ver al otro caballero, ya ha huido." + ], + "OPTIONS": [ + "[Izquierda] #r50%: #rPierde #r", + " PV.", + " #g50%: #gGana #g200 #gAlmas.", + "[Derecha] #r25%: #rPierde #r", + " #g75%: #gGana #g100 #gAlmas." + ] +}, +"downfall:BossTester": { + "NAME": "Preparación de Jefe de Depuración", + "DESCRIPTIONS": [ + "Elige un Acto para obtener las recompensas simuladas de ese acto. Si quieres probar un encuentro del Acto 3, ejecuta este evento 3 veces: una vez para el Acto 1, luego para el Acto 2, y finalmente para el Acto 3.", + "Recompensas completas. Después de las compras, ejecuta este evento nuevamente si deseas simular las recompensas de otro acto. De lo contrario, procede a la pelea contra el jefe. No recojas sus recompensas." + ], + "OPTIONS": [ + "[Acto 1]", + "[Acto 2]", + "[Acto 3]", + "[Ir a la Tienda]" + ] +}, +"downfall:BetterEnding": { + "NAME": "Corazón espirado", + "DESCRIPTIONS": [ + "@tu-thump@ ... @tu-thump@ ... @tu-thump@ ... NL Se puede sentir un reconfortante latido en toda la habitación... NL ¿Estás en el ~final~? ¿Está cumplido tu propósito?", + "Le das #b", + " Almas de vuelta al corazón! NL El corazón se #b@retuerce@ de júbilo, latiendo para siempre.", + "A pesar de tus mejores esfuerzos, la puerta a la cámara del Corazón sigue vulnerable. Entonces, te preguntas, ~\"¿Realmente~ ~has~ ~hecho~ ~lo~ ~suficiente?\"~ NL Sientes que has dado un total de #b", + " Almas al corazón.", + " NL Un total de #b", + " Almas han sido dadas por todos los que han sido convocados por él.", + " NL El corazón late más fuerte y más fuerte mientras tu #y~conciencia~ #y~se desvanece...~", + "NL Preparas tu espada...", + "NL Preparas tus dagas...", + "NL Cargas tu núcleo a su máximo...", + "Te preguntas, ~\"¿Realmente~ ~has~ ~hecho~ ~lo~ ~suficiente?\"~", + " NL El corazón late más fuerte y más fuerte mientras tu #p~conciencia~ #p~comienza~ #p~a~ #p~desvanecerse...~", + " NL Un repentino estallido de #y@energía@ emana desde dentro de ti, #b@despertándote@ de golpe.", + " NL El corazón #gretrocede, sintiendo una amenaza que se aproxima! La pelea aún no ha terminado...", + "NL Preparas tu bastón con energía divina...", + "Sientes una #pcosa #p@malévola@ en tu propio ser..." + ], + "OPTIONS": [ + "[Continuar]", + "[Dar] #b???", + "[Dormir]", + "[Acercarse a la puerta]" + ] +}, +"downfall:EvilShrines": { + "NAME": "", + "DESCRIPTIONS": [ + "Solo tú debes poseer este poder. Rompes el santuario en pedazos. NL Un lamento oscuro resuena a tu alrededor, y puedes sentir la magia #p~maldita~ #p~del~ #p~santuario~ filtrándose en tus huesos." + ], + "OPTIONS": [ + "[Profanar] #gDuplicar #g2 #gcartas. #rMaldito #r- #rEnvejecido.", + "[Profanar] #gEliminar #g2 #gcartas. #rPierde #r", + " #rPV #rMax.", + "[Profanar] #gTransformar #g3 #gcartas. #rMaldito #r- #rDefectuoso.", + "[Profanar] #gMejorar #g2 #gcartas. #rMaldito #r- #rDolor." + ] +} + +} + + diff --git a/src/main/resources/downfallResources/localization/spa/KeywordStrings.json b/src/main/resources/downfallResources/localization/spa/KeywordStrings.json new file mode 100644 index 000000000..0637a088a --- /dev/null +++ b/src/main/resources/downfallResources/localization/spa/KeywordStrings.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/src/main/resources/downfallResources/localization/spa/MonsterStrings.json b/src/main/resources/downfallResources/localization/spa/MonsterStrings.json new file mode 100644 index 000000000..73980229b --- /dev/null +++ b/src/main/resources/downfallResources/localization/spa/MonsterStrings.json @@ -0,0 +1,80 @@ +{ + "downfall:ChangingTotem": { + "MOVES": [ + "Mirada Transformadora" + ], + "NAME": "Cabeza del Cambio", + "DIALOG": [ + "" + ] + }, + "downfall:ForgetfulTotem": { + "MOVES": [ + "Mirada Olvidadiza" + ], + "NAME": "Cabeza Olvidadiza", + "DIALOG": [ + "" + ] + }, + "downfall:GrowingTotem": { + "MOVES": [ + "Rayo de Crecimiento" + ], + "NAME": "Cabeza del Crecimiento", + "DIALOG": [ + "" + ] + }, + "downfall:FleeingMerchant": { + "MOVES": [ + "Robo de Alma" + ], + "NAME": "Mercader Fugaz", + "DIALOG": [ + "" + ] + }, + "downfall:LooterAlt": { + "MOVES": [], + "NAME": "Saqueador", + "DIALOG": [ + "~¡Oye,~ no tienes dinero!", + "@¡NOOOoooo!@", + "Vas a morir hoy, tonto." + ] + }, + "downfall:MuggerAlt": { + "MOVES": [], + "NAME": "Asaltante", + "DIALOG": [ + "Vamos a enseñarles una lección.", + "¡Enseñémosles por completo!" + ] + }, + "downfall:Fortification": { + "MOVES": [], + "NAME": "Fortificación", + "DIALOG": [] + }, + "downfall:MushroomRed": { + "MOVES": [], + "NAME": "Porcini", + "DIALOG": [] + }, + "downfall:MushroomPurple": { + "MOVES": [], + "NAME": "Actarius", + "DIALOG": [] + }, + "downfall:MushroomWhite": { + "MOVES": [], + "NAME": "Bolita de Puff", + "DIALOG": [] + }, + "downfall:DoomedDagger": { + "MOVES": [], + "NAME": "Daga Condenada", + "DIALOG": [] + } +} diff --git a/src/main/resources/downfallResources/localization/spa/OrbStrings.json b/src/main/resources/downfallResources/localization/spa/OrbStrings.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/src/main/resources/downfallResources/localization/spa/OrbStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/downfallResources/localization/spa/PotionStrings.json b/src/main/resources/downfallResources/localization/spa/PotionStrings.json new file mode 100644 index 000000000..631363655 --- /dev/null +++ b/src/main/resources/downfallResources/localization/spa/PotionStrings.json @@ -0,0 +1,11 @@ +{ + "downfall:CursedFountainPotion": { + "NAME": "Líquido de Fuente Maldita", + "DESCRIPTIONS": [ + "Aplica #b", + " #yDebilidad, #b", + " #yVulnerabilidad, y reduce la #yFuerza en #b", + "." + ] + } +} diff --git a/src/main/resources/downfallResources/localization/spa/PowerStrings.json b/src/main/resources/downfallResources/localization/spa/PowerStrings.json new file mode 100644 index 000000000..5ac44c675 --- /dev/null +++ b/src/main/resources/downfallResources/localization/spa/PowerStrings.json @@ -0,0 +1,425 @@ +{ + "downfall:FairyPotion": { + "NAME": "Poción de Hada", + "DESCRIPTIONS": [ + "Cura al #b30% de la PV máxima en vez de morir, eliminando este efecto.", + "¡Ja! ¡Poción de Hada, idiota!" + ] + }, + "downfall:SoulSteal": { + "NAME": "Robo de Almas", + "DESCRIPTIONS": [ + "Ha robado #b", + " de tus Almas." + ] + }, + "downfall:NeowInvulnerable": { + "NAME": "Dios de la Vida", + "DESCRIPTIONS": [ + "Te cura #b", + " PV cada vez que juegues una carta." + ] + }, + "downfall:TransformDrawnCardsPower": { + "NAME": "Transformar Cartas Robadas", + "DESCRIPTIONS": [ + "#yTransforma las primeras #b", + " cartas robadas este turno. (", + " restantes)" + ] + }, + "downfall:TotemInvulnerable": { + "NAME": "Murallas Vivientes", + "DESCRIPTIONS": [ + "No puede morir a menos que todas las demás Cabezas estén a #b1 PV. Muere si cualquiera de las otras Cabezas muere." + ] + }, + "downfall:ExhaustCardsPower": { + "NAME": "Olvidadizo", + "DESCRIPTIONS": [ + "Al final de tu turno, elige una carta para #yAgotar [REMOVE_SPACE]." + ] + }, + "downfall:SpotWeakness": { + "NAME": "Ver Debilidades", + "DESCRIPTIONS": [ + "Cada turno en el que juegues una carta de ataque con este poder activo, este enemigo ganará #b", + " #yFuerza. Actualmente ha ganado #b", + " #yFuerza [REMOVE_SPACE]." + ] + }, + "downfall:FearNoEvil": { + "NAME": "No Temas al Mal", + "DESCRIPTIONS": [ + "Si juegas una carta de ataque este turno, La Vigilante cambiará su postura a #yCalma cuando juegue su carta #yNo #yTemer #ya #yNada.", + "La Vigilante cambiará su postura a #yCalma cuando juegue su carta #yNo #yTemer #ya #yNada." + ] + }, + "downfall:PoisonResist": { + "NAME": "Resistencia al Veneno", + "DESCRIPTIONS": [ + "#yEl veneno se activa al final de tu turno. NL Al final de tu turno, gasta todo [E] restante para eliminar 10 #yVeneno por cada [E] gastado." + ] + }, + "downfall:NeowBuff": { + "NAME": "Vigor de Neow", + "DESCRIPTIONS": [ + "Gana #b2 #yFuerza al final de su turno." + ] + }, + "downfall:WatcherAngryPower": { + "NAME": "Rabia Descontrolada", + "DESCRIPTIONS": [ + "Al final de su turno, si La Vigilante tiene el #b50% o menos de PV, entra en #yIra. NL La #yIra de La Vigilante aumenta el daño hecho y recibido en #b50% en lugar de #b100% [REMOVE_SPACE]." + ] + }, + "downfall:NeowUnbridledRage": { + "NAME": "Rabia Descontrolada", + "DESCRIPTIONS": [ + "Al final de la ronda, si Neow tiene el #b50% o menos de PV, gana #b6 #yFuerza. NL Solo puede activarse una vez por combate." + ] + }, + "downfall:WatcherCripplePower": { + "NAME": "Retribución Divina", + "DESCRIPTIONS": [ + "Cada vez que La Vigilante pierda #b", + " PV, pierde #b1 #yFuerza [REMOVE_SPACE], hasta #b3 veces por turno. NL Puedes #yBloquear el daño de #yPuntos #yde #yPresión [REMOVE_SPACE].", + "La Vigilante ya ha perdido #b3 #yFuerza este turno." + ] + }, + "downfall:WatcherSkillPower": { + "NAME": "Cazar en Desarmonía", + "DESCRIPTIONS": [ + "Cada vez que juegues una habilidad, La Vigilante gana #b", + " #yFuerza temporal.", + "Cada vez que juegues una habilidad, La Vigilante gana #yFuerza temporal [REMOVE_SPACE]." + ] + }, + "downfall:WrathNextTurnPower": { + "NAME": "Ira para el Próximo Turno", + "DESCRIPTIONS": [ + "Al inicio de su turno, La Vigilante entrará en #yIra [REMOVE_SPACE]." + ] + }, + "downfall:NeowBlasphemersDemise": { + "NAME": "La Caída de los Blasfemos", + "DESCRIPTIONS": [ + "A menos que Neow pierda #b", + " más de PV, la próxima vez que use una ventaja, ganará #b10 de #yFuerza adicional [REMOVE_SPACE].", + "Neow está lisiada y no ganará #yFuerza adicional durante su próxima ventaja del turno ." + ] + }, + "downfall:WatcherDivinityPower": { + "NAME": "Fe Fugaz", + "DESCRIPTIONS": [ + "La Vigilante gana #b1 #yMantra cada vez que juegues una carta. NL Cada vez que La Vigilante entre en #yDivinidad, ganará #b3 #yFuerza. NL La Vigilante pierde #b4 #yMantra al inicio de su turno. NL La Vigilante no sale de #yDivinidad al final de su turno." + ] + }, + "downfall:NeowFleetingFaith": { + "NAME": "Fe Fugaz", + "DESCRIPTIONS": [ + "Cada vez que juegues una carta, Neow gana #b1 #yMantra. Neow pierde #b5 #yMantra al inicio de su turno." + ] + }, + "downfall:SilentShivTimeEaterPower": { + "NAME": "Bolsa de Cuchillos", + "DESCRIPTIONS": [ + "La primera vez que juegues una carta que cueste #b2 o más cada turno, La Silenciosa gana 2 #yNavajas [REMOVE_SPACE]." + ] + }, + "downfall:NeowBagOfKnives": { + "NAME": "Bolsa de Cuchillos", + "DESCRIPTIONS": [ + "La primera vez que juegues una carta que cueste #b2 o más cada turno, recibe #b4 de daño dos veces." + ] + }, + "downfall:SilentMirrorImagePower": { + "NAME": "Ver Doble", + "DESCRIPTIONS": [ + "Al inicio de cada turno, una imagen reflejada de La Silenciosa esconderá su ubicación real. Atacar a La Silenciosa o la imagen la elimina del combate por el turno." + ] + }, + "downfall:NeowSeeingDouble": { + "NAME": "Ver Doble", + "DESCRIPTIONS": [ + "El primer #yAtaque usado contra Neow cada turno inflige #b0 de daño." + ] + }, + "downfall:SilentPoisonPower": { + "NAME": "Advertencia: Altamente Tóxico", + "DESCRIPTIONS": [ + "#yVeneno es bloqueable y causa daño al final del turno. NL Recibe un #yAntídoto al inicio del combate." + ] + }, + "downfall:NeowHighlyToxic": { + "NAME": "Advertencia: Altamente Tóxico", + "DESCRIPTIONS": [ + "Neow aplica #b5 #yVeneno a ti por turno. El veneno es bloqueable y causa daño al final del turno. NL Mezcla 2 #yAntídotos en tu mazo al inicio del combate." + ] + }, + "downfall:DefectVoidPower": { + "NAME": "Ladrón de Energía", + "DESCRIPTIONS": [ + "Cada vez que El Defectuoso genera un #yVacío, va a tu pila de descarte." + ] + }, + "downfall:NeowEnergyThief": { + "NAME": "Ladrón de Energía", + "DESCRIPTIONS": [ + "Cuando Neow añade #rMaldiciones a tu pila de robo, también añade 1 carta de #yVacío a ella." + ] + }, + "downfall:DefectAncientConstructPower": { + "NAME": "Constructo Antiguo", + "DESCRIPTIONS": [ + "Comienza la pelea con 2 esbirros #yOrbe de #yBronce . NL Las #yAgitación #ydel #yNúcleo de El Defectuoso no se #yAgotan." + ] + }, + "downfall:NeowAncientConstruct": { + "NAME": "Constructo Antiguo", + "DESCRIPTIONS": [ + "Neow gana #b2 #yArtefacto al final de su turno si no tiene #yArtefacto [REMOVE_SPACE]." + ] + }, + "downfall:DefectCuriosity": { + "NAME": "Cognición Imparcial", + "DESCRIPTIONS": [ + "Cada vez que juegues una carta #yPoder, El Defectuoso gana #b", + " #yConcentración." + ] + }, + "downfall:DefectBiasCuriosity": { + "NAME": "Cognición Corregida", + "DESCRIPTIONS": [ + "El Defectuoso juega una #yCognición #yImparcial al inicio del combate. NL Cada vez que juegues una carta #yPoder, el #ySesgo de El Defectuoso pierde eficacia este turno.", + "Cada vez que juegues una carta #yPoder, el #ySesgo de El Defectuoso pierde eficacia este turno.", + "El #ySesgo de Defect pierde eficacia este turno.", + "Sesgo" + ] + }, + "downfall:DefectCuriosityLighning": { + "NAME": "Cognición Imparcial", + "DESCRIPTIONS": [ + "Cada vez que juegues una carta #yPoder, El Defectuoso canaliza #b", + " #yOrbe #yRelampago [REMOVE_SPACE]." + ] + }, + "downfall:NeowUnbiasedCognition": { + "NAME": "Cognición Imparcial", + "DESCRIPTIONS": [ + "Cada vez que juegues una carta #yPoder, Neow gana #b2 #yFuerza [REMOVE_SPACE]." + ] + }, + "downfall:IroncladStatusPower": { + "NAME": "Sincronizar", + "DESCRIPTIONS": [ + "Cada vez que El Blindado genere una carta #yEstado, se agrega una duplicada a tu pila de descarte." + ] + }, + "downfall:NeowSyncronize": { + "NAME": "Sincronizar", + "DESCRIPTIONS": [ + "Neow agrega una carta aleatoria de #yEstado a tu pila de descarte cada turno." + ] + }, + "downfall:IroncladMushroomPower": { + "NAME": "Frenesí Alimentario", + "DESCRIPTIONS": [ + "La #yParca de El Blindado no se #yAgota y apunta a TODOS los Hongos. NL Cuando El Blindado mata un Hongo, gana #b1 #yFuerza [REMOVE_SPACE]." + ] + }, + "downfall:NeowFeedingFrenzy": { + "NAME": "Frenesí Alimentario", + "DESCRIPTIONS": [ + "Neow se cura PV siempre que inflige daño no bloqueado." + ] + }, + "downfall:IroncladFortificationPower": { + "NAME": "Baluarte", + "DESCRIPTIONS": [ + "El Blindado comienza la pelea con un #yFortificación, que le otorgará #b", + " #yBloqueo cada turno. NL Cuando la #yFortificación haya sido destruida, El Blindado pierde #yBarrera, pero gana #b5 #yFuerza al inicio de cada turno." + ] + }, + "downfall:NeowBastion": { + "NAME": "Baluarte", + "DESCRIPTIONS": [ + "Neow tiene #yBarrera y gana #b10 #yBloqueo al inicio de cada turno." + ] + }, + "downfall:MerchantStrengthPower": { + "NAME": "Ladrón de Almas", + "DESCRIPTIONS": [ + "El Comerciante tiene el doble de #yFuerza que obtuvo de Robo de Almas en esta carrera, y gana la misma cantidad de #yDestreza [REMOVE_SPACE]." + ] + }, + "downfall:NeowMantra": { + "NAME": "Mantra", + "DESCRIPTIONS": [ + "Cuando Neow tenga #b10 #yMantra, entra en Divinidad, infligiendo triple daño en el siguiente turno." + ] + }, + "downfall:NeowSeeingDoubleProduct": { + "NAME": "???", + "DESCRIPTIONS": [ + "Tu siguiente #yAtaque usado contra Neow inflige #b0 de daño este turno." + ] + }, + "downfall:CrowbotRitualPower": { + "NAME": "Reprogramar:Ritual", + "DESCRIPTIONS": [ + "Cuando #yCrowBot tiene #b50% o menos de PV, pierde #b3 PV y gana #b", + " #yFuerza al final de su turno." + ] + }, + "downfall:DamageMultiplier": { + "NAME": "Multiplicador de Daño", + "DESCRIPTIONS": [ + "Los #yAtaques infligen #b", + " veces más daño." + ] + }, + "downfall:CompressionMold": { + "NAME": "Molde de Compresión", + "DESCRIPTIONS": [ + "La munición #yDisparada se mejora posteriormente." + ] + }, + "downfall:OnDeathEveryoneStr": { + "NAME": "Último Suspiro: Inflamar+", + "DESCRIPTIONS": [ + "Cuando este personaje muere, TODOS los personajes (incluyéndote a ti) ganan #b", + " #yFuerza [REMOVE_SPACE]." + ] + }, + "downfall:OnDeathEveryoneThorns": { + "NAME": "Último Suspiro: Caltrops+", + "DESCRIPTIONS": [ + "Cuando este personaje muere, TODOS los personajes (incluyéndote a ti) ganan #b", + " #yEspinas [REMOVE_SPACE]." + ] + }, + "downfall:OnDeathEveryoneBuffer": { + "NAME": "Último Suspiro: Buffer+", + "DESCRIPTIONS": [ + "Cuando este personaje muere, TODOS los personajes (incluyéndote a ti) ganan #b", + " #yBuffer. (Buffer: Previene la próxima vez que perderías PV)" + ] + }, + "downfall:OnDeathEveryoneVigor": { + "NAME": "Último Suspiro: Guirnalda de Llama+", + "DESCRIPTIONS": [ + "Cuando este personaje muere, TODOS los personajes (incluyéndote a ti) ganan #b", + " #yVigor. (Vigor: Aumenta el daño de un solo Ataque)" + ] + }, + "downfall:OnDeathEveryoneRuggedVuln": { + "NAME": "Último Suspiro: Gestalt", + "DESCRIPTIONS": [ + "Cuando este personaje muere, TODOS los personajes (incluyéndote a ti) ganan #b", + " #yResistente y #b", + " #yVulnerable. (Resistente: Reduce el daño no bloqueado recibido a #b2 )" + ] + }, + "downfall:MonsterVigor": { + "NAME": "Vigor", + "DESCRIPTIONS": [ + "El siguiente ataque de este personaje inflige #b", + " daño adicional." + ] + }, + "downfall:HermitConcentrateAdder": { + "NAME": "Enfoque Mortal", + "DESCRIPTIONS": [ + "Las cartas de El Hermitaño obtienen efectos adicionales de #yPreciso mientras está #yConcentrado. Después de recibir #b10 de daño, la #yConcentración se rompe por el turno." + ] + }, + "downfall:HermitConcentrationPower": { + "NAME": "Concentrado", + "DESCRIPTIONS": [ + "Las cartas de El Hermitaño obtienen efectos adicionales #yPreciso mientras está concentrado. Después de recibir #b", + " más daño, la #yConcentración de El Hermitaño se rompe por este turno.", + "La #yConcentración de El Hermitaño se rompe y los efectos #yPreciso no se activan este turno." + ] + }, + "downfall:TangerinePower": { + "NAME": "Deputado", + "DESCRIPTIONS": [ + "Cuando Mandarina muere, la #yConcentración de El Hermitaño se rompe y gana #b", + " #yFuerza." + ] + }, + "downfall:HermitWheelOfFortune": { + "NAME": "Rueda de la Fortuna", + "DESCRIPTIONS": [ + "Después de jugar un #yAtaque, El Hermitaño #yCicla su primera carta. El costo de las cartas de El Hermitaño no puede cambiar." + ] + }, + "downfall:HermitDoomsday": { + "NAME": "Día del Juicio", + "DESCRIPTIONS": [ + "El Hermitaño comienza con #b1 #yRitual [REMOVE_SPACE]. Siempre que El Hermitaño juegue #yPurgatorio [REMOVE_SPACE], invoca una #rDaga #rCondenada [REMOVE_SPACE]." + ] + }, + "downfall:NeowEclipse": { + "NAME": "Eclipse", + "DESCRIPTIONS": [ + "Neow agrega un #yPerdición #yInminente #yEtérea a tu mano cada turno." + ] + }, + "downfall:NeowWheelOfDeath": { + "NAME": "Rueda de la Muerte", + "DESCRIPTIONS": [ + "Cada #b", + " cartas que juegues, Neow gana #b", + " #yFuerza [REMOVE_SPACE]." + ] + }, + "downfall:NeowDistracting": { + "NAME": "Distracción", + "DESCRIPTIONS": [ + "La primera vez que inflijas #yDaño de Ataque a Neow en un turno, gana #b1 menos [E] el siguiente turno." + ] + }, + "downfall:NextTurnPowerPower": { + "NAME": "Next Turn", + "DESCRIPTIONS": [ + "¡ERROR! No deberías ver esto", + "El siguiente turno, gana #b", + " ", + ".", + "NOTA DE LOCALIZACIÓN: Por favor, mantén el espacio después de 'Siguiente Turno' en el campo de NOMBRE." + ] + }, + "downfall:NeowStayAt1Hp": { + "NAME": "Imposible de Matar", + "DESCRIPTIONS": [ + "El daño no puede reducir a Neow por debajo de #b1 PV. Neow sanará completamente y entrará en una nueva fase en su lugar." + ] + }, + "downfall:NeowDivinity": { + "NAME": "Divinidad", + "DESCRIPTIONS": [ + "Neow inflige triple daño este turno." + ] + }, + "downfall:NeowSpirit": { + "NAME": "Espíritu del Héroe", + "DESCRIPTIONS": [ + "Cuando Neow usa una intención de Buff, ella gana #b6 #yFuerza y... ", + " NL Gana #b1 Forma Demoníaca. #y(Blindado)", + " NL Gana #b2 Espinas. #y(Silenciosa)", + " NL Gana #b2 Búfer. #y(Defectuoso)", + " NL Gana #b5 Mantra. #y(Vigilante)", + " NL Añade un #yDescomposición a tu mazo de robo. #y(Hermitaño)" + ] + }, + "downfall:HeartsFavorPower": { + "NAME": "Favor del Corazón", + "DESCRIPTIONS": [ + "Cuando la #yInvencibilidad de Neow llegue a #b0 [REMOVE_SPACE], reduce su #yDios #yde #yVida en #b", + " [REMOVE_SPACE]." + ] + } +} + diff --git a/src/main/resources/downfallResources/localization/spa/RelicStrings.json b/src/main/resources/downfallResources/localization/spa/RelicStrings.json new file mode 100644 index 000000000..76b04e695 --- /dev/null +++ b/src/main/resources/downfallResources/localization/spa/RelicStrings.json @@ -0,0 +1,563 @@ +{ + "downfall:NeowBlessing": { + "NAME": "Bendición de Neow", + "FLAVOR": "Calma tu furia. Sé tan resistente e inquebrantable como la propia Aguja.", + "DESCRIPTIONS": [ + "El Jefe tiene más vida máxima, no tiene reliquia inicial, roba #b2 cartas menos y tiene #b1 menos de ", + " . NL Al inicio de cada combate, el Jefe obtiene un efecto de Mejora único. No puede ser #yAturdido." + ] + }, + "downfall:NeowBlessing_Player": { + "NAME": "Bendición de Neow", + "FLAVOR": "Calma tu furia. Sé tan resistente e inquebrantable como la propia Aguja.", + "DESCRIPTIONS": [ + "Al obtenerla, aumenta tu Vida Máxima en #b100. NL Aumenta tu Vida Máxima en #b100 al inicio de cada Acto. NL Pierde todos tus espacios de Pociones. NL Roba #b1 carta menos y pierde [E] al inicio de tu turno." + ] + }, + "downfall:CoffeeDripper": { + "DESCRIPTIONS": [ + " NL Al no poder Descansar, el Jefe comenzó con menos salud que la máxima." + ] + }, + "downfall:BustedCrown": { + "DESCRIPTIONS": [ + " NL Al no poder elegir cartas óptimas, el Jefe tiene menos cartas sinérgicas de lo normal." + ] + }, + "downfall:Girya": { + "DESCRIPTIONS": [ + " NL Al optar por Levantar en lugar de Descansar, el Jefe comenzó con menos salud que la máxima." + ] + }, + "downfall:Matroyshka": { + "DESCRIPTIONS": [ + " NL El Jefe obtuvo ", + " reliquias adicionales." + ] + }, + "downfall:Ectoplasm": { + "DESCRIPTIONS": [ + " NL Al no poder obtener oro, el Jefe tiene ", + " menos eliminaciones de cartas que lo usual." + ] + }, + "downfall:BlackStar": { + "DESCRIPTIONS": [ + " NL El Jefe obtuvo ", + " reliquias adicionales, pero comenzó con menos salud que la máxima." + ] + }, + "downfall:MoltenEgg": { + "DESCRIPTIONS": [ + " NL El Jefe mejoró ", + " Ataques gracias a esta reliquia." + ] + }, + "downfall:ToxicEgg": { + "DESCRIPTIONS": [ + " NL El Jefe mejoró ", + " Habilidades gracias a esta reliquia." + ] + }, + "downfall:FrozenEgg": { + "DESCRIPTIONS": [ + "El Jefe tiene muchos Poderes Mejorados." + ] + }, +"downfall:Shovel": { + "DESCRIPTIONS": [ + " NL El Jefe obtuvo ", + " reliquias adicionales, pero comienza con menos salud máxima por no haber descansado." + ] +}, +"downfall:CBRSerpentHead": { + "DESCRIPTIONS": [ + " NL El Jefe usó este oro para eliminar 2 cartas de su mazo." + ] +}, +"downfall:CursedKey": { + "DESCRIPTIONS": [ + " NL El Jefe obtuvo ", + " Maldiciones gracias a esta reliquia." + ] +}, +"downfall:DreamCatcher": { + "DESCRIPTIONS": [ + " NL El Jefe obtuvo cartas adicionales al descansar." + ] +}, +"downfall:PrayerWheel": { + "DESCRIPTIONS": [ + " NL El Jefe obtuvo ", + " cartas extra gracias a esta reliquia." + ] +}, +"downfall:PeacePipe": { + "DESCRIPTIONS": [ + " NL El Jefe eliminó ", + " cartas adicionales, pero comienza con menos salud máxima." + ] +}, +"downfall:RunicDome": { + "DESCRIPTIONS": [ + " NL El Jefe puede elegir el orden de las cartas de forma desfavorable." + ] +}, +"downfall:CentennialPuzzle": { + "DESCRIPTIONS": [ + " NL No puede activarse durante el turno del Jefe." + ] +}, +"downfall:CBRFaceOfCleric": { + "DESCRIPTIONS": [ + " La Vida Máxima se incrementó gracias a esta reliquia." + ] +}, +"downfall:Omamori": { + "DESCRIPTIONS": [ + " NL Evitó que el Jefe obtuviera una " + ] +}, +"downfall:DollysMirror": { + "DESCRIPTIONS": [ + " NL El espejo duplicó " + ] +}, +"downfall:Vampires": { + "NAME": "Evento: Vampiros", + "FLAVOR": "¡La sangre del amo... la sangre del amo! ¡LA SANGRE DEL AMO!", + "DESCRIPTIONS": [ + "Los Golpes han sido reemplazados por Mordidas. NL -", + " de Vida Máxima." + ] +}, +"downfall:BonfireSpirits": { + "NAME": "Evento: Espíritus de la Hoguera", + "FLAVOR": "Los espíritus arrojan pequeños huesos y fragmentos al fuego, que estalla brillantemente cada vez...", + "DESCRIPTIONS": [ + "El Jefe eliminó una carta de su mazo para obtener 10 de Vida Máxima." + ] +}, +"downfall:DesignerInSpire": { + "NAME": "Evento: Diseñador Inspirado", + "FLAVOR": "Esto no sirve, no no. ¿Qué clase de estilo es este? ¡Asqueroso! ¿Estás sangrando? Qué... ¡asqueroso!", + "DESCRIPTIONS": [ + "Se eliminó una carta del mazo y se mejoró otra." + ] +}, +"downfall:DivineFountain": { + "NAME": "Evento: Fuente Divina", + "FLAVOR": "Te topas con agua brillante que fluye eternamente desde una fuente en una pared cercana.", + "DESCRIPTIONS": [ + " Se eliminaron Maldiciones del mazo." + ] +}, +"downfall:Duplicator": { + "NAME": "Evento: Duplicador", + "FLAVOR": "Frente a ti hay un altar decorado para alguna entidad antigua.", + "DESCRIPTIONS": [ + "El Jefe duplicó una carta poderosa." + ] +}, +"downfall:BigFish": { + "NAME": "Evento: Gran Pescado", + "FLAVOR": "Mientras avanzas por un largo corredor, ves un plátano, una dona y una caja flotando cerca.", + "DESCRIPTIONS": [ + "Se eligió la Dona. NL +5 de Vida Máxima.", + "Se eligió la Caja. NL Se añadió una maldición de Arrepentimiento y una reliquia." + ] +}, +"downfall:LivingWall": { + "NAME": "Evento: Muro Viviente", + "FLAVOR": "Olvida lo que sabes, y te dejaré ir.", + "DESCRIPTIONS": [ + "El Jefe eliminó una ", + "El Jefe mejoró una ", + "El Jefe transformó una ", + " en una " + ] +}, +"downfall:WheelOfChange": { + "NAME": "Evento: Rueda del Cambio", + "FLAVOR": "¡Es hora de girar la rueda! ¿ESTÁS LISTO? ¡Claro que sí!", + "DESCRIPTIONS": [ + "La Rueda le dio al Jefe una ", + "El Jefe fue curado a Vida Máxima.", + "La Rueda eliminó una ", + " del mazo del Jefe.", + "La Rueda causó daño al Jefe." + ] +}, +"downfall:Falling": { + "NAME": "Evento: Caída", + "FLAVOR": "Mientras caes en picada, consideras tus opciones...", + "DESCRIPTIONS": [ + "Se eliminó un Golpe del mazo." + ] +}, +"downfall:Augmenter": { + "NAME": "Evento: Aumentador", + "FLAVOR": "Hola, forastero. ¿Interesado en avanzar la ciencia?", + "DESCRIPTIONS": [ + "El Jefe transformó 2 cartas", + "El Jefe obtuvo J.A.X.", + "El Jefe obtuvo Fuerza Mutágena." + ] +}, +"downfall:AncientWriting": { + "NAME": "Evento: Escritura Antigua", + "FLAVOR": "De repente, el mensaje se vuelve claro...", + "DESCRIPTIONS": [ + "El Jefe mejoró todos los Golpes y Defender." + ] +}, +"downfall:Bandits": { + "NAME": "Evento: Bandidos de la Máscara Roja", + "FLAVOR": "¡Atrápenlos, Oso!", + "DESCRIPTIONS": [ + "El Jefe derrotó a los Bandidos, obteniendo la Máscara Roja, pero comienza con menos salud máxima." + ] +}, +"downfall:WingStatue": { + "NAME": "Evento: Estatua Alada", + "FLAVOR": "Entre las piedras y rocas, notas una gran estatua azul intrincada con forma de ala.", + "DESCRIPTIONS": [ + " fue eliminada del mazo." + ] +}, +"downfall:Serpent": { + "NAME": "Evento: La Ssssserpiente", + "FLAVOR": "¡La vida más plena es aquella en la que puedes comprar cualquier cosa! ¿Estás de acuerdo?", + "DESCRIPTIONS": [ + "El Jefe obtuvo una maldición de Duda para conseguir oro, el cual usó para comprar una reliquia." + ] +}, +"downfall:Cleric": { + "NAME": "Evento: Clérigo", + "FLAVOR": "¡Hola amigo! ¡Soy Clérigo! ¿Interesado en mis servicios?", + "DESCRIPTIONS": [ + "El Jefe eliminó una carta de su mazo." + ] +}, +"downfall:OldBeggar": { + "NAME": "Evento: Mendigo Viejo", + "FLAVOR": "¿Una moneda, hijo?", + "DESCRIPTIONS": [ + "Se eliminó una carta del mazo." + ] +}, +"downfall:Library": { + "NAME": "Evento: Biblioteca", + "FLAVOR": "Te encuentras con un edificio ornamentado que parece abandonado.", + "DESCRIPTIONS": [ + "El Jefe obtuvo una carta adicional sinérgica." + ] +}, +"downfall:Mausoleum": { + "NAME": "Evento: Mausoleo", + "FLAVOR": "No puedes descifrar la escritura del ataúd, pero notas una niebla negra filtrándose por los costados.", + "DESCRIPTIONS": [ + "El Jefe obtuvo una maldición de Retorcimiento y una reliquia adicional." + ] +}, +"downfall:Nest": { + "NAME": "Evento: Nido", + "FLAVOR": "¡CAW CAW CAAAAAWWW!", + "DESCRIPTIONS": [ + "El Jefe obtuvo una Daga del Ritual." + ] +}, +"downfall:Colosseum": { + "NAME": "Evento: Coliseo", + "FLAVOR": "¡AHORA DAMOS INICIO AL COMBATE!", + "DESCRIPTIONS": [ + "El Jefe completó el evento del Coliseo, obteniendo dos reliquias adicionales." + ] +}, +"downfall:PleadingVagrant": { + "NAME": "Evento: Vagabundo Suplicante", + "FLAVOR": "¿Tienes algo para mí, amigo? Por favor... ¿quizá unas #yMonedas?", + "DESCRIPTIONS": [ + "El Jefe robó a los Vagabundos, obteniendo una maldición de Vergüenza y " + ] +}, +"downfall:Mushroom": { + "NAME": "Evento: Hongos", + "FLAVOR": "Entras a un pasillo lleno de hipnóticos hongos de colores.", + "DESCRIPTIONS": [ + "El Jefe se curó completamente y obtuvo una maldición de Parásito.", + "El Jefe obtuvo la reliquia Hongo Extraño, pero comienza con menos salud máxima." + ] +}, +"downfall:ShiningLight": { + "NAME": "Evento: Luz Brillante", + "FLAVOR": "Encuentras una masa brillante de luz en el centro de la habitación.", + "DESCRIPTIONS": [ + "El Jefe mejoró ", + " y ", + ", pero comienza con menos salud máxima." + ] +}, +"downfall:ScrapOoze": { + "NAME": "Evento: Baba Chatarruda", + "FLAVOR": "Frente a ti hay una criatura parecida a una baba que comió demasiada chatarra para su propio bien.", + "DESCRIPTIONS": [ + "El Jefe obtuvo una reliquia adicional." + ] +}, +"downfall:GoldenIdolEvent": { + "NAME": "Evento: Ídolo Dorado", + "FLAVOR": "En lo alto del altar descansa una estatua femenina ornamentada con los brazos extendidos. NL Te llama, exigiendo un sacrificio.", + "DESCRIPTIONS": [ + "El Jefe tomó el Ídolo Dorado, obtuvo una maldición de Lesión y usó el oro extra para comprar " + ] +}, +"downfall:FaceTrader": { + "NAME": "Evento: Vendedor de Rostros", + "FLAVOR": "Rostro. ¿Puedo tocar? ¿Quizá intercambiar?", + "DESCRIPTIONS": [ + "El Jefe obtuvo una reliquia de rostro aleatoria." + ] +}, +"downfall:OminousForge": { + "NAME": "Evento: Forja Inquietante", + "FLAVOR": "¡CLANG! ¡CLAAANG! ¡CLANG!", + "DESCRIPTIONS": [ + "El Jefe obtuvo Tenazas Deformadas y una maldición de Dolor." + ] +}, +"downfall:Purifier": { + "NAME": "Evento: Purificador", + "FLAVOR": "Frente a ti hay un santuario elaborado dedicado a un espíritu olvidado.", + "DESCRIPTIONS": [ + " fue eliminada del mazo." + ] +}, +"downfall:MatchAndKeep": { + "NAME": "Evento: Empareja y Conserva", + "FLAVOR": "¡Doce cartas! ¡Empájalas para conservarlas! Cinco intentos, sin repeticiones. ¿Estás listo? ¡Comencemos!", + "DESCRIPTIONS": [ + "El Jefe emparejó con éxito y obtuvo una carta poderosa." + ] +}, +"downfall:Transmogrifier": { + "NAME": "Evento: Transfigurador", + "FLAVOR": "Frente a ti hay un santuario elaborado dedicado a un espíritu olvidado.", + "DESCRIPTIONS": [ + "El Jefe transformó una carta inicial en una nueva carta." + ] +}, +"downfall:TombRedMask": { + "NAME": "Evento: Tumba del Señor de la Máscara Roja", + "FLAVOR": "Puede verse una tumba altamente ornamentada al otro lado de un camino flotante.", + "DESCRIPTIONS": [ + "El Jefe obtuvo la reliquia Máscara Roja." + ] +}, +"downfall:UpgradeShrine": { + "NAME": "Evento: Santuario de Mejora", + "FLAVOR": "Frente a ti hay un santuario elaborado dedicado a un espíritu olvidado.", + "DESCRIPTIONS": [ + "El Jefe #yMejoró una carta con el Santuario de Mejora." + ] +}, +"downfall:WeMeetAgain": { + "NAME": "Evento: ¡Nos Volvemos a Encontrar!", + "FLAVOR": "¡Soy yo, #yRanwid! ¿Tienes algo para mí hoy? ¿Lo de siempre? Un tipo como yo no puede sobrevivir solo, ¿sabes?", + "DESCRIPTIONS": [ + "Se intercambió oro con Ranwid a cambio de una reliquia adicional." + ] +}, +"downfall:GoldenShrine": { + "NAME": "Evento: Santuario Dorado", + "FLAVOR": "Frente a ti hay un santuario elaborado dedicado a un espíritu antiguo.", + "DESCRIPTIONS": [ + "El Jefe obtuvo una maldición de Arrepentimiento a cambio de oro, y usó este oro para comprar " + ] +}, +"downfall:GremlinSack": { + "NAME": "Saco del Gremlin", + "FLAVOR": "El Gremlin y su guardaespaldas no fueron rival para ti.", + "DESCRIPTIONS": [ + "Al obtenerlo, añade las siguientes cartas a tu mazo: NL ", + "Al obtenerlo, añade #b6 cartas a tu mazo del Juego de cada tipo.", + "#g(Inicial) ", + "#g(Común) ", + "#b(Poco Común) ", + "#y(Rara) ", + "#b(Incolora) ", + "#r(Maldición) " + ] +}, +"downfall:GremlinWheel": { + "NAME": "Rueda del Cambio", + "FLAVOR": "Nadie obtiene dos giros, dice él.", + "DESCRIPTIONS": [ + "En cada Punto de Descanso, puedes girar la rueda una vez. Elegir recoger su recompensa consume esta reliquia.", + "Esta reliquia ha sido usada." + ] +}, +"downfall:CloakOfManyFaces": { + "NAME": "Abrigo de Muchos Rostros", + "FLAVOR": "Era Steve, y Bill, e Ian, y Fred, y John...", + "DESCRIPTIONS": [ + "Al obtenerla, obtén Máscara de Cultista, Cara del Clérigo, Cara Hambrienta de N'loth, Máscara Pequeña de Gremlin, y Cabeza de Ssserpiente." + ] +}, +"downfall:BrokenWingStatue": { + "NAME": "Estatua de Ala Rota", + "FLAVOR": "Un fragmento roto de una estatua que alguna vez fue magnífica.", + "DESCRIPTIONS": [ + "Los cultistas que adoran al Despierto estarán interesados en esto...", + "Al comienzo de cada combate, si los enemigos son del grupo de Cultistas, tomarán esta reliquia de ti y escaparán del combate." + ] +}, +"downfall:ShatteredFragment": { + "NAME": "Fragmento Afilado", + "FLAVOR": "Alguna vez una estatua rota – ahora un arma improvisada.", + "DESCRIPTIONS": [ + "Durante combates contra Élites y Jefes, cada vez que juegues una carta de tipo #yPoder, gana #b1 de #yFuerza [REMOVE_SPACE]." + ] +}, +"downfall:RedIOU": { + "NAME": "Contrato de Bandidos", + "FLAVOR": "Un acuerdo del trío de Bandidos – en parte a cambio de un baratija, pero sobre todo por sus vidas.", + "DESCRIPTIONS": [ + "Al comienzo del #b3er combate contra jefes, los Bandidos de la Máscara Roja te ayudarán.", + "¡Es hora de trabajar, muchachos!", + "¡Dale Oso!", + "Un trato es un trato. NL Hemos terminado aquí.", + "Todos saluden al nuevo NL ~Señor~ ~Máscara~ ~Roja!~", + "¡Buena suerte, jefe!" + ] +}, +"downfall:RedIOUUpgrade": { + "NAME": "Contrato de Bandidos+", + "FLAVOR": "Un acuerdo del trío de Bandidos – en parte a cambio de un baratija, pero sobre todo por sus vidas.", + "DESCRIPTIONS": [ + "Al comienzo del #b3er combate contra jefes, los Bandidos de la Máscara Roja te ayudarán." + ] +}, +"downfall:KnowingSkull": { + "NAME": "Calavera Sabia", + "FLAVOR": "¡Suéltame!", + "DESCRIPTIONS": [ + "Al comienzo de cada combate, puedes desear Almas, Pociones o una carta Incolora a cambio de vida." + ] +}, +"downfall:HeartBlessingRed": { + "NAME": "Bendición de Corazón Rubí", + "FLAVOR": "El corazón es fuerte.", + "DESCRIPTIONS": [ + "Comienza combates contra jefes con #b1 de #yFuerza [REMOVE_SPACE]." + ] +}, +"downfall:HeartBlessingBlue": { + "NAME": "Bendición de Corazón Zafiro", + "FLAVOR": "El corazón está complacido.", + "DESCRIPTIONS": [ + "Comienza combates contra jefes con #b10 de #yPV #yTemporal [REMOVE_SPACE]." + ] +}, +"downfall:HeartBlessingGreen": { + "NAME": "Bendición de Corazón Esmeralda", + "FLAVOR": "El corazón lo es todo.", + "DESCRIPTIONS": [ + "Comienza combates contra jefes con #b1 de #yDestreza [REMOVE_SPACE]." + ] +}, +"downfall:BurdenOfKnowledge": { + "NAME": "Carga del Conocimiento", + "FLAVOR": "La verdad duele.", + "DESCRIPTIONS": [ + "Al obtenerla, #rpierdes #rTODAS #rlas #rBendiciones #rdel #rCorazón y #b10 de Vida Máxima. Mejora #yPERMANENTEMENTE #rtodas las cartas #ren #rtodas #rpartes [REMOVE_SPACE]. Comienza los combates con #b1 menos de #yFuerza y #yDestreza [REMOVE_SPACE]." + ] +}, +"downfall:TeleportStone": { + "NAME": "Piedra de Teletransporte", + "FLAVOR": "Nunca salgas de casa sin ella.", + "DESCRIPTIONS": [ + "Puedes saltarte cualquier cantidad de salas la próxima vez que avances, pero no puedes entrar a una Sala de Jefe.", + "", + "Esta reliquia ha sido usada." + ] +}, +"downfall:HeartsMalice": { + "NAME": "La Maldad del Corazón", + "FLAVOR": "La malicia de la corrupción otorgada por el Corazón.", + "DESCRIPTIONS": [ + "Los enemigos en tus primeros #b3 combates huirán aterrorizados.", + "Esta reliquia ha sido usada." + ] +}, +"downfall:Hecktoplasm": { + "NAME": "Hecktoplasma", + "FLAVOR": "Esta masa de baba parece pulsar con la energía de cientos de almas. Con razón nadie la quería.", + "DESCRIPTIONS": [ + "Gana [E] al inicio de tu turno. Ya no puedes obtener #yAlmas. Romper Llaves no cuesta #yAlmas.", + "Hecktoplasma" + ] +}, +"downfall:BlackCandle": { + "NAME": "Vela Negra", + "FLAVOR": "La llama brilla aún más intensamente desde dentro de la oscuridad.", + "DESCRIPTIONS": [ + "Las cartas de #rMaldición #yInjugables ahora se pueden jugar. Cada vez que juegues una carta de #rMaldición #yInjugable, se #yAgota y pierdes #b1 de HP.", + "Vela Negra" + ] +}, +"downfall:replacements": { + "NAME": "", + "FLAVOR": "", + "DESCRIPTIONS": [ + "Durante los combates contra Mercaderes, Élites y Jefes, gana [E] al inicio de tu turno.", + "Moneda Maldita", + "Pocos que aún viven conocen el verdadero precio de esta vieja moneda...", + "Carta MVB", + "En verdad, eres el MVB del Corazón: Jefe Más Valioso.", + "La corrupción del Corazón no conoce límites – ni siquiera con mascotas adorables.", + "Mensajero Corrupto", + "El Corazón reabastece cartas, reliquias y pociones. Todos los precios se reducen un #b20%.", + "Las pantallas de recompensa de combate ahora incluyen cartas Incoloras y de colores de Héroes.", + "Gana [E] al inicio de tu turno. Ya no puedes obtener #yAlmas. Romper Llaves no cuesta #yAlmas." + ] +}, +"downfall:LizardTail": { + "NAME": "Cola de Lagarto Súper", + "FLAVOR": "Una cola falsa para engañar a los enemigos durante el combate.", + "DESCRIPTIONS": [ + "Cuando vayas a morir, recuperas el #b100% de tu Vida Máxima en su lugar (funciona una vez)." + ] +}, +"downfall:TestRelic": { + "NAME": "Probador de VFX", + "FLAVOR": "Cuando se sale del índice, lo lograste.", + "DESCRIPTIONS": [ + "#pClic #pDerecho: Reproduce la siguiente carta." + ] +}, +"downfall:ExtraCursedKey": { + "NAME": "Llave Maldita Extra", + "FLAVOR": "Encerrada por una buena razón.", + "DESCRIPTIONS": [ + "Gana [E] la primera vez que robes una #rMaldición cada turno. NL Cada vez que abras un cofre que no sea de Jefe, obtén una #rHerida [REMOVE_SPACE]." + ] +}, +"downfall:ExtraCursedBell": { + "NAME": "Campana Maldita Extra", + "FLAVOR": "Crees oír su eco, pero nunca puedes confirmarlo.", + "DESCRIPTIONS": [ + "Al obtenerla, obtén una #rMaldición única y #b3 reliquias Comunes.", + "La Campana Suena Dos Veces...", + "Omitir Recompensas", + "Cerrar" + ] +}, +"downfall:BustedCrownGagText": { + "NAME": "Corona Rota", + "FLAVOR": "La imitación es la forma más sincera de adulación... ¿o no? Ni siquiera se parece tanto a tu corona. De hecho, es muy insultante.", + "DESCRIPTIONS": [ + "Gana [E] al inicio de tu turno. Las recompensas de cartas futuras tienen 2 cartas menos entre las cuales elegir." + ] +} +} diff --git a/src/main/resources/downfallResources/localization/spa/RunModStrings.json b/src/main/resources/downfallResources/localization/spa/RunModStrings.json new file mode 100644 index 000000000..f507ffdaa --- /dev/null +++ b/src/main/resources/downfallResources/localization/spa/RunModStrings.json @@ -0,0 +1,58 @@ +{ + "downfall:WorldOfGoo": { + "NAME": "Mundo de Moco", + "DESCRIPTION": "Cada vez que recibes daño sin bloquear, añade un estado de Moco a tu pila de descarte." + }, + "downfall:Hexed": { + "NAME": "Hechizado", + "DESCRIPTION": "Empiezas con un Collar de Terciopelo. Cuando robas una carta, se vuelve Etérea." + }, + "downfall:Improvised": { + "NAME": "Improvisado", + "DESCRIPTION": "Empiezas con 10 cartas Desconocidas." + }, + "downfall:Jewelcrafting": { + "NAME": "Joyería", + "DESCRIPTION": "Empiezas con dos copias de Explotar Gema y un Pico de Rapsodia." + }, + "downfall:EvilRun": { + "NAME": "Recorrido Maligno", + "DESCRIPTION": "Activa el contenido del Recorrido Maligno." + }, + "downfall:ExchangeController": { + "NAME": "Bendecido Sea", + "DESCRIPTION": "Empiezas con una Bendición de Neow." + }, + "downfall:Lament": { + "NAME": "Lamento", + "DESCRIPTION": "Empiezas con un Lamento de Neow." + }, + "downfall:ChampStances": { + "NAME": "Nuevo Retador", + "DESCRIPTION": "Empiezas cada combate en una postura aleatoria de Campeón y obtienes un Golpe Final. Todas las cartas iniciales ganan Técnica." + }, + "downfall:Enraging": { + "NAME": "Última Defensa", + "DESCRIPTION": "Todos los enemigos ganan Fuerza y limpian sus desventajas en su próximo turno al ser reducidos al 50% de HP." + }, + "downfall:Analytical": { + "NAME": "Analítico", + "DESCRIPTION": "Al inicio de cada turno, obtén una carta aleatoria con Codificar y hazla Etérea. Los Golpes y Defensas básicos Codifican." + }, + "downfall:StatusAbuse": { + "NAME": "Afligido", + "DESCRIPTION": "Empiezas con una Batería Improvisada, Lavadoras de Donu, Lavadoras de Deca, un Botiquín Médico y un Ídolo de Bronce. Todas las demás Reliquias se reemplazan con Circlets." + }, + "downfall:TooManyShivs": { + "NAME": "Demasiadas Dagas", + "DESCRIPTION": "Empiezas con un Collar de Terciopelo, Esencia del Vacío y 10 Dagas." + }, + "downfall:Wizzardry": { + "NAME": "Hechicería", + "DESCRIPTION": "Empiezas con un Sombrero de Mago, un Bastón de Mago y una copia Mejorada de Hechicería." + }, + "downfall:TransformRewards": { + "NAME": "Transformado", + "DESCRIPTION": "Todas las recompensas de cartas se convierten en \"Transformar una carta\"." + } +} diff --git a/src/main/resources/downfallResources/localization/spa/UIStrings.json b/src/main/resources/downfallResources/localization/spa/UIStrings.json new file mode 100644 index 000000000..58d58ac31 --- /dev/null +++ b/src/main/resources/downfallResources/localization/spa/UIStrings.json @@ -0,0 +1,210 @@ +{ + "downfall:EvilMenuPanel": { + "TEXT": [ + "Downfall", + "Defiende el Corazón de los intrusos aventureros que intentan Asesinar la Aguja.", + "Elige a tu Villano", + "Campaña" + ] + }, + "downfall:SoulToGoldChanges": { + "TEXT": [ + "Almas", + "Muestra cuántas Almas llevas contigo. Las Almas pueden ser ofrecidas al Corazón a cambio de recompensas.", + "Estado del Comerciante", + "HP", + "¡Muerto!", + "Fuerza", + "Almas robadas", + "Perdición" + ] + }, + "downfall:BustKeyButton": { + "TEXT": [ + "Romper Rubí", + "Romper Zafiro", + "Romper Esmeralda", + "(Acción gratuita) Gasta 50 Almas: Destruye la llave para ", + "iniciar combates contra Jefes con 1 de Fuerza.", + "iniciar combates contra Jefes con 10 de HP Temporal.", + "iniciar combates contra Jefes con 1 de Destreza.", + "¡Llave destruida!", + "Se requieren ", + " Almas.", + "(Acción gratuita) Destruye la llave para " + ] + }, + "downfall:WheelSpinButton": { + "TEXT": [ + "Girar Rueda", + "(Acción gratuita) Gira la Rueda.", + "No puedes girar de nuevo." + ] + }, + "downfall:AscensionText": { + "TEXT": [ + "19. Los jefes tienen una reliquia adicional.", + "20. El jefe del Acto 3 tiene Cola de Lagarto que cura todo el HP.", + "Obtén la Llave Rubí. Rómpela después.", + "4. Los jefes tienen una carta extra mejorada." + ] + }, + "downfall:ConfigMenuText": { + "TEXT": [ + "Permitir que las partidas estándar encuentren reliquias globales de los personajes de Downfall.", + "Permitir que las partidas estándar encuentren pociones globales de Downfall.", + "Permitir que las partidas estándar encuentren eventos globales de Downfall.", + "Permitir que las partidas estándar encuentren Cartas de Jefe de Downfall.", + "Permitir que personajes estándar jueguen en Downfall, y que los Villanos participen en partidas estándar.", + "Permitir que personajes modificados jueguen en partidas de Downfall.", + "Permitir que las partidas estándar encuentren cartas de Maldición de Downfall.", + "Las partidas de Downfall usan el diseño tradicional del Mapa: hoguera antes del jefe, no al inicio.", + "Desbloquear todas las cartas y reliquias bloqueadas para los personajes de Downfall (requiere reiniciar el juego)", + "Desactivar Asistente de Posturas del Campeón - para jugadores expertos.", + "Evitar que Snecko use barajas de otros mods.", + "Desactivar música personalizada (requiere reiniciar el juego)", + "Desbloquear todas las apariencias alternativas bloqueadas para personajes de Downfall", + "Usar íconos en lugar de texto adicional en las cartas para indicar propiedades aplicadas." + ] + }, + "downfall:EnergyPanelTip": { + "TEXT": [ + "Energía actual del enemigo. Las cartas requieren energía para jugarse." + ], + "EXTRA_TEXT": [ + "Energía" + ] + }, + "downfall:RemoveCardReward": { + "TEXT": [ + "Eliminar una carta de tu mazo", + "Elige una carta para eliminar" + ] + }, + "downfall:TransformCardReward": { + "TEXT": [ + "Transformar una carta de tu mazo", + "Elige una carta para transformar" + ] + }, + "downfall:UpgradeCardReward": { + "TEXT": [ + "Mejorar una carta de tu mazo", + "Elige una carta para mejorar" + ] + }, + "downfall:BossRelicReward": { + "TEXT": [ + "Elige 1 de 3 Reliquias de Jefe.", + "Obtén una ", + ".", + "Elige una reliquia... más o menos" + ] + }, + "downfall:EtherealMod": { + "TEXT": [ + "Etéreo. NL " + ] + }, + "downfall:JaxReward": { + "TEXT": [ + "¡Encontraste algo de JAX!" + ] + }, + "downfall:RareCardReward": { + "TEXT": [ + "Agrega una carta Rara a tu mazo." + ] + }, + "downfall:OctoChoiceAction": { + "TEXT": [ + "Elige una opción.", + "No deberías ver esto. Ups." + ] + }, + "downfall:BossCardReward": { + "TEXT": [ + "Agrega una carta de Jefe a tu mazo", + "Elige una carta." + ] + }, + "downfall:ColorfulCardReward": { + "TEXT": [ + "Agrega una carta ", + " a tu mazo", + "Elige una carta." + ] + }, + "downfall:ColorfulUncommonCardReward": { + "TEXT": [ + "Agrega una carta ", + " a tu mazo", + "Elige una carta." + ] + }, + "downfall:ColorfulRareCardReward": { + "TEXT": [ + "Agrega una carta ", + " a tu mazo", + "Elige una carta." + ] + }, + "downfall:DiceRollPotionReward": { + "TEXT": [ + "Agrega una carta mejorada ", + " a tu mazo.", + "Elige una carta." + ] + }, + "downfall:ColorfulPowersCardReward": { + "TEXT": [ + "Agrega un Poder mejorado ", + " a tu mazo.", + "Elige una carta." + ] + }, + "downfall:RunHistoryMonsterNames": { + "TEXT": [ + "Cabezas del Muro Viviente", + "El Acorazado", + "La Silenciosa", + "El Defecto", + "La Vigilante", + "Comerciante", + "El Ermitaño" + ] + }, + "downfall:WhaleHunter": { + "TEXT": [ + "Cazador de Ballenas", + "Terminó el ciclo." + ] + }, + "downfall:Unfettered": { + "TEXT": [ + "Libre de ataduras", + "Obtuvo el Sello Roto." + ] + }, + "downfall:SingleCardViewPopup": { + "TEXT": [ + "Munición" + ] + }, + "downfall:MainMenuAd": { + "TEXT": [ + "¿Quieres más?", + "Muchos más mods, incluido", + "Downfall, están disponibles para", + "la versión base de Slay the Spire en", + "Steam Workshop.", + "¡Haz clic aquí para aprender cómo!" + ] + }, + "downfall:CantEscapeGauntlet": { + "TEXT": [ + "Estoy abrumado." + ], + "Translator note": "Este texto aparece cuando intentas escapar del combate tipo gauntlet, donde hay más de un héroe vivo, así que estás abrumado por el número y no puedes escapar." + } +} diff --git a/src/main/resources/downfallResources/localization/spa/replacementStrings.json b/src/main/resources/downfallResources/localization/spa/replacementStrings.json new file mode 100644 index 000000000..6826f212e --- /dev/null +++ b/src/main/resources/downfallResources/localization/spa/replacementStrings.json @@ -0,0 +1,14 @@ +[ + { + "KEYS": [ + "Oro" + ], + "VALUE": "Almas" + }, + { + "KEYS": [ + "oro" + ], + "VALUE": "almas" + } +] diff --git a/src/main/resources/downfallResources/localization/zhs/CardStrings.json b/src/main/resources/downfallResources/localization/zhs/CardStrings.json index cd8d8d96a..eda1fa10c 100644 --- a/src/main/resources/downfallResources/localization/zhs/CardStrings.json +++ b/src/main/resources/downfallResources/localization/zhs/CardStrings.json @@ -3,22 +3,18 @@ "NAME": "岁月", "DESCRIPTION": "虚无 。 NL 不能被打出 。 NL 回合结束时, NL 将 *虚空 加入抽牌堆顶。" }, - "downfall:BossMaintenance": { - "NAME": "维护", - "DESCRIPTION": "*打击 额外造成 !M! 点伤害。 NL 获得 !B! 点 敏捷 。 NL 本场战斗耗能加1。" - }, "downfall:Bewildered": { "NAME": "困惑", "DESCRIPTION": "虚无 。 NL 不能被打出 。 NL 抽到时 , NL sneckomod:混淆 其他手牌 。" }, - "downfall:Haunted": { - "NAME": "闹鬼", - "DESCRIPTION": "虚无 。 NL 不能被打出 。 NL 抽到时, NL 将所有手牌附加 虚无 。" - }, "downfall:Icky": { "NAME": "黏液缠身", "DESCRIPTION": "获得一张 *黏液 。 NL 消耗 。" }, + "downfall:Haunted": { + "NAME": "闹鬼", + "DESCRIPTION": "虚无 。 NL 不能被打出 。 NL 消耗 牌时若本牌在手, NL 受到2点伤害。" + }, "downfall:Malfunctioning": { "NAME": "纰漏", "DESCRIPTION": "回合结束时若本牌在手, NL 将手牌全变为随机状态。 NL 消耗 。" @@ -30,5 +26,9 @@ "downfall:SummonMushrooms": { "NAME": "真菌环绕", "DESCRIPTION": "击杀所有蘑菇, NL 回复其剩余血量点生命。 NL 召唤两个蘑菇。" + }, + "downfall:BossMaintenance": { + "NAME": "维护", + "DESCRIPTION": "*打击 额外造成 !M! 点伤害。 NL 获得 !B! 点 敏捷 。 NL 本场战斗耗能加1。" } -} \ No newline at end of file +} diff --git a/src/main/resources/downfallResources/localization/zhs/CharacterStrings.json b/src/main/resources/downfallResources/localization/zhs/CharacterStrings.json index 19f210b5e..5bd1b3149 100644 --- a/src/main/resources/downfallResources/localization/zhs/CharacterStrings.json +++ b/src/main/resources/downfallResources/localization/zhs/CharacterStrings.json @@ -109,7 +109,7 @@ "……我……也…… NL ……该睡了………" ], "OPTIONS": [ - "~我~ ~把他……~ NL ~带回来……~ ~了……~ ~还~ ~……顺~ ~走了……~ ~他的灵魂~", + "~我~ ~把他……~ NL ~带回来……~ ~了……~", "~保护~ ~我……~ NL ~获~ ~得……~ ~奖励……~" ] }, diff --git a/src/main/resources/downfallResources/localization/zhs/EventStrings.json b/src/main/resources/downfallResources/localization/zhs/EventStrings.json index 8cffa0d6f..e56b51f5b 100644 --- a/src/main/resources/downfallResources/localization/zhs/EventStrings.json +++ b/src/main/resources/downfallResources/localization/zhs/EventStrings.json @@ -215,9 +215,10 @@ "你绕过光柱,虽然心中仍有些好奇如果走进去会怎么样。" ], "OPTIONS": [ - "[走进] #g随机升级 #g3 #g张牌。 #r被诅咒- #r纰漏。", + "[走进] #g升级 #g随机", "[离开]", - "[锁定] 需要: 可以升级的牌" + "[锁定] 需要: 可以升级的牌。", + " #g张牌 #r被诅咒- #r纰漏。" ] }, "downfall:WorldOfGoop": { @@ -284,7 +285,7 @@ "你决定把这个灵魂留在哪里,继续你的路程。" ], "OPTIONS": [ - "[设置陷阱] #r失去 #r一张 #r打击。", + "[设置陷阱] #g失去 #g一张 #g打击。", "[收获] #g获得 #y", " #y灵魂。", "[离开]", @@ -433,13 +434,13 @@ "[归还雕像] #r失去 #r破碎的翅膀雕像。 #g获得许多回报。", "[锁定] 需要破碎的翅膀雕像。", "[接受] #g获得 #g邪教徒药水。", - "[偷窃] #g获得 仪式匕首 。 #r失去 #r", + "[偷窃] #g获得 #g仪式匕首 。 #r失去 #r", " #r点生命。", "[离开]", "[继续]", "[收下匕首] #g获得 #g仪式匕首。", "[涂油] #g升级 #g仪式匕首。", - "[献祭] #r用 仪式匕首+ #r杀死邪教徒。", + "[献祭] #r用 #r仪式匕首+ #r杀死邪教徒。", "[赞美] #g获得众多奖励。" ] }, @@ -470,11 +471,11 @@ ], "OPTIONS": [ "[我为回响] #r与自己战斗。 #g获得一件稀有遗物。", - "[我将富有] #g获得999灵魂。 #r被诅咒-2张凡庸。", - "[我将完整] #g升级所有牌。 #r失去3件心脏的祝福。", + "[我将富有] #g获得999灵魂。 #r被诅咒-2张 #r凡庸。", + "[我将完整] #g升级所有牌。 #r背负沉重的负担。", "[锁定] 需要全部3件心脏的祝福。", "[离开]", - "[我将完整] #g升级所有牌。 #r失去3件心脏的祝福且所有地精失去2点最大生命。" + "[我将完整] #g升级所有牌。 #r背负沉重的负担。" ] }, "downfall:MoaiHead": { @@ -607,7 +608,7 @@ ], "OPTIONS": [ "[继续]", - "[攻击] #b???", + "[献上] #b???", "[睡眠]", "[走向门前]" ] @@ -618,10 +619,11 @@ "只有你才有这种力量。你把神龛打碎了。 NL 黑暗的哀号在你周围回荡,感觉神龛 #p~诅咒的魔法~ 正在渗入你的每一块骨头。" ], "OPTIONS": [ - "[亵渎] #g复制2张牌。 #r被诅咒-虚脱。", - "[亵渎] #g移除3张牌。 #r被诅咒-虚脱。", - "[亵渎] #g变化3张牌。 #r被诅咒-虚脱。", - "[亵渎] #g升级2张牌。 #r被诅咒-虚脱。" + "[亵渎] #g复制2张牌。 #r被诅咒- #r岁月。", + "[亵渎] #g移除2张牌。 #r失去 #r", + " #r点最大生命。", + "[亵渎] #g变化3张牌。 #r被诅咒- #r纰漏。", + "[亵渎] #g升级2张牌。 #r被诅咒- #r疼痛。" ] } } diff --git a/src/main/resources/downfallResources/localization/zhs/PowerStrings.json b/src/main/resources/downfallResources/localization/zhs/PowerStrings.json index 536845b14..ab4d2528f 100644 --- a/src/main/resources/downfallResources/localization/zhs/PowerStrings.json +++ b/src/main/resources/downfallResources/localization/zhs/PowerStrings.json @@ -40,6 +40,19 @@ "你的回合结束时,选择 #y消耗 #b1 张手牌。" ] }, + "downfall:SpotWeakness": { + "NAME": "观察弱点", + "DESCRIPTIONS": [ + "每当你每打出一张攻击牌,这名敌人将获得 #b"," 点 #y力量 。目前将获得 #b", " 点 #y力量 。" + ] + }, + "downfall:FearNoEvil": { + "NAME": "不惧妖邪", + "DESCRIPTIONS": [ + "若本回合你打出一张攻击牌, #y观者 在打出不惧妖邪后将会进入 #y平静 。", + "本回合 #y观者 在打出不惧妖邪后将会进入 #y平静 。" + ] + }, "downfall:PoisonResist": { "NAME": "抗毒", "DESCRIPTIONS": [ @@ -72,6 +85,20 @@ "本回合 #y观者 已经失去了 #b3 点 #y力量 。" ] }, + "downfall:WatcherSkillPower": { + "NAME": "失谐掠夺者", + "DESCRIPTIONS": [ + "每当你打出技能牌时,观者将获得 #b", + " 点 #y临时 #y力量 。", + "每当你打出技能牌时,观者将获得 #y临时 #y力量 。" + ] + }, + "downfall:WrathNextTurnPower": { + "NAME": "怒火中烧", + "DESCRIPTIONS": [ + "#y观者 的回合开始时,她将进入 #y愤怒 。" + ] + }, "downfall:NeowBlasphemersDemise": { "NAME": "渎神者", "DESCRIPTIONS": [ @@ -83,7 +110,7 @@ "downfall:WatcherDivinityPower": { "NAME": "消逝的信仰", "DESCRIPTIONS": [ - "每当你打出 #b1 张牌时, #y观者 获得 #b1 层 #p真言 ,你的回合开始时其失去 #b5 层 。 NL 她将不会自动退出 #y神格 。" + "每当你打出 #b1 张牌时, #y观者 获得 #b1 层 #p真言 ,你的回合开始时其失去 #b4 层 。 NL 当 #y观者 进入 #y神格 时,她将获得 #b3 点 #y力量 ,而且不会自动退出 #y神格 。" ] }, "downfall:NeowFleetingFaith": { @@ -131,7 +158,7 @@ "downfall:DefectVoidPower": { "NAME": "能量窃取", "DESCRIPTIONS": [ - "每当 #y故障机器人 生成 #y虚空 时,反而将其加入你的抽牌堆顶部。" + "每当 #y故障机器人 生成 #y虚空 时,反而将其加入你的弃牌堆。" ] }, "downfall:NeowEnergyThief": { @@ -143,7 +170,7 @@ "downfall:DefectAncientConstructPower": { "NAME": "先古造物", "DESCRIPTIONS": [ - "战斗开始时, #y故障机器人 将召唤 #b2 个 #y铜制圆球 。 NL 敌方回合结束时,若其无 #y人工制品 ,获得 #b1 层。" + "战斗开始时, #y故障机器人 将召唤 #b2 个 #y铜制圆球 。 NL #y故障机器人 的 #y核心电涌 不会消耗。" ] }, "downfall:NeowAncientConstruct": { @@ -153,14 +180,30 @@ ] }, "downfall:DefectCuriosity": { - "NAME": "偏差认知", + "NAME": "無偏认知", "DESCRIPTIONS": [ "每当你打出 #b1 张 #y能力牌 时, #y故障机器人 获得 #b", " 点 #y集中 。" ] }, + "downfall:DefectBiasCuriosity": { + "NAME": "正确认知", + "DESCRIPTIONS": [ + "战斗开始时, #y故障机器人 将打出一张 #y无偏认知。 NL 每当你打出 #b1 张 #y能力牌 时, #y故障机器人 的 #y偏差 在本回合失效。", + "每当你打出 #b1 张 #y能力牌 时, #y故障机器人 的 #y偏差 在本回合失效。", + "#y故障机器人 的 #y偏差 在本回合失效", + "偏差" + ] + }, + "downfall:DefectCuriosityLighning": { + "NAME": "無偏认知", + "DESCRIPTIONS": [ + "每当你打出 #b1 张 #y能力牌 时, #y故障机器人 #y生成 #b", + " 个 #y闪电 充能球。" + ] + }, "downfall:NeowUnbiasedCognition": { - "NAME": "偏差认知", + "NAME": "無偏认知", "DESCRIPTIONS": [ "每当你打出一张 #y能力牌 , #y涅奥 获得 #b2 点 #y力量 。" ] @@ -205,7 +248,7 @@ "downfall:MerchantStrengthPower": { "NAME": "灵魂窃取", "DESCRIPTIONS": [ - " #y商人 仍留有本局灵魂窃取获得的 #y力量 。同时还获得了等量的 #y敏捷 。" + " #y商人 加倍了本局灵魂窃取获得的 #y力量 。同时还获得了等量的 #y敏捷 。" ] }, "downfall:NeowMantra": { @@ -214,6 +257,12 @@ "每当 #y涅奥 拥有 #b10 层 #y真言 时,它进入 #p神格 。" ] }, + "downfall:NeowSeeingDoubleProduct": { + "NAME": "???", + "DESCRIPTIONS": [ + "本回合你的下一张攻击牌对 #y涅奥 造成 #b0 点伤害。" + ] + }, "downfall:CrowbotRitualPower": { "NAME": "重编程:邪教", "DESCRIPTIONS": [ @@ -221,12 +270,6 @@ " 点 #y力量 。" ] }, - "downfall:NeowSeeingDoubleProduct": { - "NAME": "???", - "DESCRIPTIONS": [ - "本回合你的下一张攻击牌对 #y涅奥 造成 #b0 点伤害。" - ] - }, "downfall:DamageMultiplier": { "NAME": "伤害增幅", "DESCRIPTIONS": [ @@ -317,16 +360,6 @@ "#y亡命之徒 以 #b1 层 #y仪式 的状态开始战斗。每当其打出 #y炼狱 时,召唤一只 #r末日匕首 。" ] }, - "downfall:NextTurnPowerPower": { - "NAME": "Next Turn ", - "DESCRIPTIONS": [ - "BUG! You should not see this", - "Next turn, gain #b", - " ", - ".", - "LOCALIZATION NOTE: Please keep the space after 'Next Turn' in the NAME field." - ] - }, "downfall:NeowEclipse": { "NAME": "月蚀", "DESCRIPTIONS": [ @@ -347,6 +380,16 @@ "对 #y涅奥 造成攻击伤害后,下回合少获得 [E] 。" ] }, + "downfall:NextTurnPowerPower": { + "NAME": "Next Turn ", + "DESCRIPTIONS": [ + "BUG! You should not see this", + "Next turn, gain #b", + " ", + ".", + "LOCALIZATION NOTE: Please keep the space after 'Next Turn' in the NAME field." + ] + }, "downfall:NeowStayAt1Hp": { "NAME": "涅槃", "DESCRIPTIONS": [ @@ -370,13 +413,6 @@ " NL 将 #b1 张 #r腐朽 加入你的抽牌堆。" ] }, - "downfall:FearNoEvil": { - "NAME": "不惧妖邪", - "DESCRIPTIONS": [ - "若本回合你打出一张攻击牌, #y观者 在打出不惧妖邪后将会进入 #y平静 。", - "本回合 #y观者 在打出不惧妖邪后将会进入 #y平静 。" - ] - }, "downfall:HeartsFavorPower": { "NAME": "心脏的助力", "DESCRIPTIONS": [ diff --git a/src/main/resources/downfallResources/localization/zhs/RelicStrings.json b/src/main/resources/downfallResources/localization/zhs/RelicStrings.json index cd33c766f..caa049d46 100644 --- a/src/main/resources/downfallResources/localization/zhs/RelicStrings.json +++ b/src/main/resources/downfallResources/localization/zhs/RelicStrings.json @@ -416,7 +416,7 @@ "NAME": "尖锐碎片", "FLAVOR": "曾经破碎的雕像 - 如今打造成了武器。", "DESCRIPTIONS": [ - "战斗开始时,将一张 #y染血牺牲 加入手牌。" + "在Boss战与精英战中,每当你打出 #b1 张 #y能力牌 时,获得 #b1 点 #y力量 。." ] }, "downfall:RedIOU": { @@ -466,6 +466,13 @@ "首领战斗开始时,获得 #b1 点 #y敏捷 。" ] }, + "downfall:BurdenOfKnowledge": { + "NAME": "智慧的重担", + "FLAVOR": "真相是伤人的。", + "DESCRIPTIONS": [ + "拾起时, #r失去所有腐化之心的祝福 及 #b10 点最大生命。升级所有牌(包含藏品牌)。战斗开始时失去 #b1 点 #y力量 和 #y敏捷 。" + ] + }, "downfall:TeleportStone": { "NAME": "传送石", "FLAVOR": "出门必备。", @@ -483,13 +490,21 @@ "这个遗物的效果已经耗尽。" ] }, - "downfall:Hecktoplasm": { + "downfall:Hecktoplasm": { "NAME": "幽魂外质", "FLAVOR": "这团黏液似乎伴随着数百簇灵魂的能量潮动,难怪没人想要。", "DESCRIPTIONS": [ "回合开始时获得 [E] 。你不再能获得 #y灵魂 ,但打碎钥匙碎片将不消耗 #y灵魂 。" ] }, + "downfall:BlackCandle": { + "NAME": "黑蜡烛", + "FLAVOR": "火焰在黑暗中闪烁得更加耀眼。", + "DESCRIPTIONS": [ + "#y不能被打出 的 #r诅咒牌 现在可以被打出。打出 #y不能被打出 的 #r诅咒牌 会让你失去 #b1 点生命并将其 #y消耗 。", + "黑蜡烛" + ] + }, "downfall:replacements": { "NAME": "", "FLAVOR": "", @@ -520,22 +535,28 @@ "#pRight #pClick: Play the next card." ] }, + "downfall:ExtraCursedKey": { + "NAME": "恶咒钥匙", + "FLAVOR": "还是别探究它锁上了什么。", + "DESCRIPTIONS": [ + "每回合首次抽到 #r诅咒牌 时获得 [E] 。 打开非首领宝箱时,获得 #b1 张 #r受伤 。" + ] + }, "downfall:ExtraCursedBell": { - "NAME": "召唤铃铛", - "FLAVOR": "这个黑铁铃铛在你找到它时作响了3次,但现在它已经不再响了。", + "NAME": "厉鬼铃铛", + "FLAVOR": "你感觉听到了铃铛的回响,但你无从确认。", "DESCRIPTIONS": [ - "拾起时,获得 #b2 张独特的 #r诅咒 与 #b3 件 #y遗物 。", + "拾起时,获得一个独特的 #r诅咒 和 #b3 件 #y普通遗物 。", "铃铛再次鸣响……", "跳过奖励", "关闭" ] }, - "downfall:ExtraCursedKey": { - "NAME": "恶咒钥匙", - "FLAVOR": "你能感到这把钥匙上散发出邪恶的能量。力量总是需要付出代价的。", + "downfall:BustedCrownGagText": { + "NAME": "破碎金冠", + "FLAVOR": "仿制是最真挚的奉承……吗?这看起来不像你的金冠,更像对你的羞辱。", "DESCRIPTIONS": [ - "回合开始时获得 [E] 。 NL 打开非首领宝箱时,随机获得 #b2 张 #r诅咒 。", - "" + "在每回合开始时获得 [E] 。在卡牌奖励画面,可供选择的牌数减少 #b2 张。" ] } } diff --git a/src/main/resources/downfallResources/localization/zhs/UIStrings.json b/src/main/resources/downfallResources/localization/zhs/UIStrings.json index 7b434346a..4b71657b3 100644 --- a/src/main/resources/downfallResources/localization/zhs/UIStrings.json +++ b/src/main/resources/downfallResources/localization/zhs/UIStrings.json @@ -68,13 +68,13 @@ ] }, "downfall:EnergyPanelTip": { - "TEXT": [ + "TEXT": [ "敌人当前的能量。打出卡牌需要能量。" - ], - "EXTRA_TEXT": [ + ], + "EXTRA_TEXT": [ "能量" - ] -}, + ] + }, "downfall:RemoveCardReward": { "TEXT": [ "移除牌组中的一张牌。", @@ -119,26 +119,59 @@ "downfall:OctoChoiceAction": { "TEXT": [ "许个愿", - "你不应该看见这个的", - "选择一种史莱姆。" - ] -}, + "你不应该看见这个的" + ] + }, "downfall:BossCardReward": { "TEXT": [ "将一张首领牌加入牌组", "选择一张牌" ] }, - "downfall:ColorfulCardReward": { + "downfall:ColorfulCardReward": { "TEXT": [ "将一张 ", " 牌加入牌组", "选择一张牌" ] }, + "downfall:ColorfulUncommonCardReward": { + "TEXT": [ + "将一张 ", + " 牌加入牌组", + "选择一张牌" + ] + }, + "downfall:ColorfulRareCardReward": { + "TEXT": [ + "将一张 ", + " 牌加入牌组", + "选择一张牌" + ] + }, + "downfall:DiceRollPotionReward": { + "TEXT": [ + "将一张升级过的牌 ", + " 加入牌组", + "选择一张牌" + ] + }, + "downfall:ColorfulPowersCardReward": { + "TEXT": [ + "将一张升级过的能力牌 ", + " 加入牌组", + "选择一张牌" + ] + }, "downfall:RunHistoryMonsterNames": { "TEXT": [ - "活墙壁" + "活墙壁", + "铁甲战士", + "静默猎手", + "故障机器人", + "观者", + "商人", + "亡命之徒" ] }, "downfall:WhaleHunter": { @@ -147,6 +180,12 @@ "终结轮回。" ] }, + "downfall:Unfettered": { + "TEXT": [ + "挣脱束缚", + "获得挣破的封印。" + ] + }, "downfall:SingleCardViewPopup": { "TEXT": [ "弹药" diff --git a/src/main/resources/downfallResources/localization/zht/RelicStrings.json b/src/main/resources/downfallResources/localization/zht/RelicStrings.json index c6abb8f0c..6c6f46560 100644 --- a/src/main/resources/downfallResources/localization/zht/RelicStrings.json +++ b/src/main/resources/downfallResources/localization/zht/RelicStrings.json @@ -519,6 +519,13 @@ "#pRight #pClick: Play the next card." ] }, + "downfall:BurdenOfKnowledge": { + "NAME": "智慧的重担", + "FLAVOR": "真相是伤人的。", + "DESCRIPTIONS": [ + "拾起时, #r失去所有腐化之心的祝福 及 #b10 点最大生命。升级所有牌(包含藏品牌)。战斗开始时失去 #b1 点 #y力量 和 #y敏捷 。" + ] + }, "downfall:ExtraCursedBell": { "NAME": "召喚鈴鐺", "FLAVOR": "這個黑鐵鈴鐺在你找到它時作響了3次,但現在它已經不再響了。", diff --git a/src/main/resources/expansioncontentResources/images/betacards/BeatOfDeath.png b/src/main/resources/expansioncontentResources/images/betacards/BeatOfDeath.png new file mode 100644 index 000000000..1b948ee3d Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/BeatOfDeath.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/BeatOfDeath_p.png b/src/main/resources/expansioncontentResources/images/betacards/BeatOfDeath_p.png new file mode 100644 index 000000000..188c35876 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/BeatOfDeath_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/BloodBarrage.png b/src/main/resources/expansioncontentResources/images/betacards/BloodBarrage.png new file mode 100644 index 000000000..b4c811d7e Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/BloodBarrage.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/BloodBarrage_p.png b/src/main/resources/expansioncontentResources/images/betacards/BloodBarrage_p.png new file mode 100644 index 000000000..49666f219 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/BloodBarrage_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/BronzeArmor.png b/src/main/resources/expansioncontentResources/images/betacards/BronzeArmor.png new file mode 100644 index 000000000..a48e1f851 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/BronzeArmor.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/BronzeArmor_p.png b/src/main/resources/expansioncontentResources/images/betacards/BronzeArmor_p.png new file mode 100644 index 000000000..d58ca5b91 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/BronzeArmor_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/ChargeUp.png b/src/main/resources/expansioncontentResources/images/betacards/ChargeUp.png new file mode 100644 index 000000000..3feefc822 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/ChargeUp.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/ChargeUp_p.png b/src/main/resources/expansioncontentResources/images/betacards/ChargeUp_p.png new file mode 100644 index 000000000..007ab1726 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/ChargeUp_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/DashGenerateEvil.png b/src/main/resources/expansioncontentResources/images/betacards/DashGenerateEvil.png index 8ffa9c7d0..25157080a 100644 Binary files a/src/main/resources/expansioncontentResources/images/betacards/DashGenerateEvil.png and b/src/main/resources/expansioncontentResources/images/betacards/DashGenerateEvil.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/DashGenerateEvil_p.png b/src/main/resources/expansioncontentResources/images/betacards/DashGenerateEvil_p.png index 819edb4de..4da4adab4 100644 Binary files a/src/main/resources/expansioncontentResources/images/betacards/DashGenerateEvil_p.png and b/src/main/resources/expansioncontentResources/images/betacards/DashGenerateEvil_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/DoubleAct.png b/src/main/resources/expansioncontentResources/images/betacards/DoubleAct.png new file mode 100644 index 000000000..ea6abb301 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/DoubleAct.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/DoubleAct_p.png b/src/main/resources/expansioncontentResources/images/betacards/DoubleAct_p.png new file mode 100644 index 000000000..4ca02a390 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/DoubleAct_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/EtherStep.png b/src/main/resources/expansioncontentResources/images/betacards/EtherStep.png new file mode 100644 index 000000000..6efa62da3 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/EtherStep.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/EtherStep_p.png b/src/main/resources/expansioncontentResources/images/betacards/EtherStep_p.png new file mode 100644 index 000000000..e6088db0b Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/EtherStep_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/ExploitVulnerability.png b/src/main/resources/expansioncontentResources/images/betacards/ExploitVulnerability.png new file mode 100644 index 000000000..9176f514c Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/ExploitVulnerability.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/ExploitVulnerability_p.png b/src/main/resources/expansioncontentResources/images/betacards/ExploitVulnerability_p.png new file mode 100644 index 000000000..1dc53431b Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/ExploitVulnerability_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/Flail.png b/src/main/resources/expansioncontentResources/images/betacards/Flail.png new file mode 100644 index 000000000..a310b6cf1 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/Flail.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/Flail_p.png b/src/main/resources/expansioncontentResources/images/betacards/Flail_p.png new file mode 100644 index 000000000..c80076105 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/Flail_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/GhostShield.png b/src/main/resources/expansioncontentResources/images/betacards/GhostShield.png new file mode 100644 index 000000000..4449aec91 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/GhostShield.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/GhostShield_p.png b/src/main/resources/expansioncontentResources/images/betacards/GhostShield_p.png new file mode 100644 index 000000000..3561813b0 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/GhostShield_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/GoopSpray.png b/src/main/resources/expansioncontentResources/images/betacards/GoopSpray.png new file mode 100644 index 000000000..68a85d67a Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/GoopSpray.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/GoopSpray_p.png b/src/main/resources/expansioncontentResources/images/betacards/GoopSpray_p.png new file mode 100644 index 000000000..64b135216 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/GoopSpray_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/Hexaburn.png b/src/main/resources/expansioncontentResources/images/betacards/Hexaburn.png index 5e8f5e784..8408205c5 100644 Binary files a/src/main/resources/expansioncontentResources/images/betacards/Hexaburn.png and b/src/main/resources/expansioncontentResources/images/betacards/Hexaburn.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/Hexaburn_p.png b/src/main/resources/expansioncontentResources/images/betacards/Hexaburn_p.png index d341c09d6..0107ca1b6 100644 Binary files a/src/main/resources/expansioncontentResources/images/betacards/Hexaburn_p.png and b/src/main/resources/expansioncontentResources/images/betacards/Hexaburn_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/LivingWall.png b/src/main/resources/expansioncontentResources/images/betacards/LivingWall.png new file mode 100644 index 000000000..a1e31bfb9 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/LivingWall.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/LivingWall_p.png b/src/main/resources/expansioncontentResources/images/betacards/LivingWall_p.png new file mode 100644 index 000000000..b1487e64b Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/LivingWall_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/MajorBeam.png b/src/main/resources/expansioncontentResources/images/betacards/MajorBeam.png new file mode 100644 index 000000000..fd29e0a1e Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/MajorBeam.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/MajorBeam_p.png b/src/main/resources/expansioncontentResources/images/betacards/MajorBeam_p.png new file mode 100644 index 000000000..12ed55ace Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/MajorBeam_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/ManipulateTime.png b/src/main/resources/expansioncontentResources/images/betacards/ManipulateTime.png new file mode 100644 index 000000000..0ab0d9b8e Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/ManipulateTime.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/ManipulateTime_p.png b/src/main/resources/expansioncontentResources/images/betacards/ManipulateTime_p.png new file mode 100644 index 000000000..1a05cc618 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/ManipulateTime_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/Pandemonium.png b/src/main/resources/expansioncontentResources/images/betacards/Pandemonium.png new file mode 100644 index 000000000..ed1a13274 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/Pandemonium.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/Pandemonium_p.png b/src/main/resources/expansioncontentResources/images/betacards/Pandemonium_p.png new file mode 100644 index 000000000..487b1e1f0 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/Pandemonium_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/PeekPages.png b/src/main/resources/expansioncontentResources/images/betacards/PeekPages.png new file mode 100644 index 000000000..a701bf323 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/PeekPages.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/PeekPages_p.png b/src/main/resources/expansioncontentResources/images/betacards/PeekPages_p.png new file mode 100644 index 000000000..c25daa1de Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/PeekPages_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/Reverie.png b/src/main/resources/expansioncontentResources/images/betacards/Reverie.png new file mode 100644 index 000000000..852c04016 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/Reverie.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/Reverie_p.png b/src/main/resources/expansioncontentResources/images/betacards/Reverie_p.png new file mode 100644 index 000000000..873cb57b9 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/Reverie_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/SuperBloodthirst.png b/src/main/resources/expansioncontentResources/images/betacards/SuperBloodthirst.png new file mode 100644 index 000000000..150e949d5 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/SuperBloodthirst.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/SuperBloodthirst_p.png b/src/main/resources/expansioncontentResources/images/betacards/SuperBloodthirst_p.png new file mode 100644 index 000000000..64a1b5d98 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/SuperBloodthirst_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/SuperBodyCrash.png b/src/main/resources/expansioncontentResources/images/betacards/SuperBodyCrash.png new file mode 100644 index 000000000..427558d44 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/SuperBodyCrash.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/SuperBodyCrash_p.png b/src/main/resources/expansioncontentResources/images/betacards/SuperBodyCrash_p.png new file mode 100644 index 000000000..fc7c305a1 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/SuperBodyCrash_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/SuperClobber.png b/src/main/resources/expansioncontentResources/images/betacards/SuperClobber.png new file mode 100644 index 000000000..b23ecc38a Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/SuperClobber.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/SuperClobber_p.png b/src/main/resources/expansioncontentResources/images/betacards/SuperClobber_p.png new file mode 100644 index 000000000..3791772e6 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/SuperClobber_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/SuperEtherStep.png b/src/main/resources/expansioncontentResources/images/betacards/SuperEtherStep.png new file mode 100644 index 000000000..c5d339bbd Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/SuperEtherStep.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/SuperEtherStep_p.png b/src/main/resources/expansioncontentResources/images/betacards/SuperEtherStep_p.png new file mode 100644 index 000000000..de5074ae3 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/SuperEtherStep_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/SuperGhostShield.png b/src/main/resources/expansioncontentResources/images/betacards/SuperGhostShield.png new file mode 100644 index 000000000..0ce21e812 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/SuperGhostShield.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/SuperGhostShield_p.png b/src/main/resources/expansioncontentResources/images/betacards/SuperGhostShield_p.png new file mode 100644 index 000000000..b1121d3c4 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/SuperGhostShield_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/SuperGoopSpray.png b/src/main/resources/expansioncontentResources/images/betacards/SuperGoopSpray.png new file mode 100644 index 000000000..3d736c4ee Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/SuperGoopSpray.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/SuperGoopSpray_p.png b/src/main/resources/expansioncontentResources/images/betacards/SuperGoopSpray_p.png new file mode 100644 index 000000000..946a0d3a7 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/SuperGoopSpray_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/SuperHexaguard.png b/src/main/resources/expansioncontentResources/images/betacards/SuperHexaguard.png new file mode 100644 index 000000000..8b600f353 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/SuperHexaguard.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/SuperHexaguard_p.png b/src/main/resources/expansioncontentResources/images/betacards/SuperHexaguard_p.png new file mode 100644 index 000000000..024a10eca Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/SuperHexaguard_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/SuperPrepareCrush.png b/src/main/resources/expansioncontentResources/images/betacards/SuperPrepareCrush.png new file mode 100644 index 000000000..cc091fe9b Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/SuperPrepareCrush.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/SuperPrepareCrush_p.png b/src/main/resources/expansioncontentResources/images/betacards/SuperPrepareCrush_p.png new file mode 100644 index 000000000..0c894776b Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/SuperPrepareCrush_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/SuperSomberShield.png b/src/main/resources/expansioncontentResources/images/betacards/SuperSomberShield.png new file mode 100644 index 000000000..cda55d789 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/SuperSomberShield.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/SuperSomberShield_p.png b/src/main/resources/expansioncontentResources/images/betacards/SuperSomberShield_p.png new file mode 100644 index 000000000..92cf57628 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/SuperSomberShield_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/SuperTaunt.png b/src/main/resources/expansioncontentResources/images/betacards/SuperTaunt.png new file mode 100644 index 000000000..8d8670931 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/SuperTaunt.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/SuperTaunt_p.png b/src/main/resources/expansioncontentResources/images/betacards/SuperTaunt_p.png new file mode 100644 index 000000000..aee079e77 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/SuperTaunt_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/SuperWhirlingFlame.png b/src/main/resources/expansioncontentResources/images/betacards/SuperWhirlingFlame.png new file mode 100644 index 000000000..f1f98b811 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/SuperWhirlingFlame.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/SuperWhirlingFlame_p.png b/src/main/resources/expansioncontentResources/images/betacards/SuperWhirlingFlame_p.png new file mode 100644 index 000000000..ad4284ea8 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/SuperWhirlingFlame_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/TakeFlight.png b/src/main/resources/expansioncontentResources/images/betacards/TakeFlight.png new file mode 100644 index 000000000..4c5e6bbed Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/TakeFlight.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/TakeFlight_p.png b/src/main/resources/expansioncontentResources/images/betacards/TakeFlight_p.png new file mode 100644 index 000000000..3fafa76c5 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/TakeFlight_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/Torchfire.png b/src/main/resources/expansioncontentResources/images/betacards/Torchfire.png new file mode 100644 index 000000000..3e83a88a7 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/Torchfire.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/Torchfire_p.png b/src/main/resources/expansioncontentResources/images/betacards/Torchfire_p.png new file mode 100644 index 000000000..92699ba1d Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/Torchfire_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/ViciousMockery.png b/src/main/resources/expansioncontentResources/images/betacards/ViciousMockery.png new file mode 100644 index 000000000..a826093fe Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/ViciousMockery.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/ViciousMockery_p.png b/src/main/resources/expansioncontentResources/images/betacards/ViciousMockery_p.png new file mode 100644 index 000000000..6a2c64c5b Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/ViciousMockery_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/Virus.png b/src/main/resources/expansioncontentResources/images/betacards/Virus.png new file mode 100644 index 000000000..1367179eb Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/Virus.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/Virus_p.png b/src/main/resources/expansioncontentResources/images/betacards/Virus_p.png new file mode 100644 index 000000000..826bf43ec Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/Virus_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/slimewave.png b/src/main/resources/expansioncontentResources/images/betacards/slimewave.png new file mode 100644 index 000000000..1abe94ff1 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/slimewave.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/slimewave_p.png b/src/main/resources/expansioncontentResources/images/betacards/slimewave_p.png new file mode 100644 index 000000000..9e8370476 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/betacards/slimewave_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/BeatOfDeath.png b/src/main/resources/expansioncontentResources/images/cards/BeatOfDeath.png new file mode 100644 index 000000000..2136acb9d Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/cards/BeatOfDeath.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/BeatOfDeath_p.png b/src/main/resources/expansioncontentResources/images/cards/BeatOfDeath_p.png new file mode 100644 index 000000000..ee8505401 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/cards/BeatOfDeath_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/BloodBarrage.png b/src/main/resources/expansioncontentResources/images/cards/BloodBarrage.png new file mode 100644 index 000000000..b4c811d7e Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/cards/BloodBarrage.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/BloodBarrage_p.png b/src/main/resources/expansioncontentResources/images/cards/BloodBarrage_p.png new file mode 100644 index 000000000..49666f219 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/cards/BloodBarrage_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/ChargeUp.png b/src/main/resources/expansioncontentResources/images/cards/ChargeUp.png index 8d6581552..3feefc822 100644 Binary files a/src/main/resources/expansioncontentResources/images/cards/ChargeUp.png and b/src/main/resources/expansioncontentResources/images/cards/ChargeUp.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/ChargeUp_p.png b/src/main/resources/expansioncontentResources/images/cards/ChargeUp_p.png index 16716b198..007ab1726 100644 Binary files a/src/main/resources/expansioncontentResources/images/cards/ChargeUp_p.png and b/src/main/resources/expansioncontentResources/images/cards/ChargeUp_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/DashGenerateEvil.png b/src/main/resources/expansioncontentResources/images/cards/DashGenerateEvil.png index 4edac61af..66bf0caee 100644 Binary files a/src/main/resources/expansioncontentResources/images/cards/DashGenerateEvil.png and b/src/main/resources/expansioncontentResources/images/cards/DashGenerateEvil.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/DashGenerateEvil_p.png b/src/main/resources/expansioncontentResources/images/cards/DashGenerateEvil_p.png index d7efe3857..1d0cd5600 100644 Binary files a/src/main/resources/expansioncontentResources/images/cards/DashGenerateEvil_p.png and b/src/main/resources/expansioncontentResources/images/cards/DashGenerateEvil_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/DoubleAct.png b/src/main/resources/expansioncontentResources/images/cards/DoubleAct.png new file mode 100644 index 000000000..136489729 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/cards/DoubleAct.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/DoubleAct_p.png b/src/main/resources/expansioncontentResources/images/cards/DoubleAct_p.png new file mode 100644 index 000000000..cac4c3762 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/cards/DoubleAct_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/ExploitVulnerability.png b/src/main/resources/expansioncontentResources/images/cards/ExploitVulnerability.png new file mode 100644 index 000000000..785875032 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/cards/ExploitVulnerability.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/ExploitVulnerability_p.png b/src/main/resources/expansioncontentResources/images/cards/ExploitVulnerability_p.png new file mode 100644 index 000000000..4e318f0bb Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/cards/ExploitVulnerability_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/Flail.png b/src/main/resources/expansioncontentResources/images/cards/Flail.png index f4786c751..daec55ee2 100644 Binary files a/src/main/resources/expansioncontentResources/images/cards/Flail.png and b/src/main/resources/expansioncontentResources/images/cards/Flail.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/Flail_p.png b/src/main/resources/expansioncontentResources/images/cards/Flail_p.png index 2b4cd6d96..2b4702c67 100644 Binary files a/src/main/resources/expansioncontentResources/images/cards/Flail_p.png and b/src/main/resources/expansioncontentResources/images/cards/Flail_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/GoopSpray.png b/src/main/resources/expansioncontentResources/images/cards/GoopSpray.png deleted file mode 100644 index 959fafcd1..000000000 Binary files a/src/main/resources/expansioncontentResources/images/cards/GoopSpray.png and /dev/null differ diff --git a/src/main/resources/expansioncontentResources/images/cards/GoopSpray_p.png b/src/main/resources/expansioncontentResources/images/cards/GoopSpray_p.png deleted file mode 100644 index 9e9f15283..000000000 Binary files a/src/main/resources/expansioncontentResources/images/cards/GoopSpray_p.png and /dev/null differ diff --git a/src/main/resources/expansioncontentResources/images/cards/Hexaburn.png b/src/main/resources/expansioncontentResources/images/cards/Hexaburn.png index 03f61bfc6..cf15d1bf5 100644 Binary files a/src/main/resources/expansioncontentResources/images/cards/Hexaburn.png and b/src/main/resources/expansioncontentResources/images/cards/Hexaburn.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/Hexaburn_p.png b/src/main/resources/expansioncontentResources/images/cards/Hexaburn_p.png index a3eebed12..24d89b377 100644 Binary files a/src/main/resources/expansioncontentResources/images/cards/Hexaburn_p.png and b/src/main/resources/expansioncontentResources/images/cards/Hexaburn_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/MajorBeam.png b/src/main/resources/expansioncontentResources/images/cards/MajorBeam.png new file mode 100644 index 000000000..1eb8a837a Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/cards/MajorBeam.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/MajorBeam_p.png b/src/main/resources/expansioncontentResources/images/cards/MajorBeam_p.png new file mode 100644 index 000000000..bdfae51d7 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/cards/MajorBeam_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/ManipulateTime.png b/src/main/resources/expansioncontentResources/images/cards/ManipulateTime.png index 5da3ab087..c9db7e4c9 100644 Binary files a/src/main/resources/expansioncontentResources/images/cards/ManipulateTime.png and b/src/main/resources/expansioncontentResources/images/cards/ManipulateTime.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/ManipulateTime_p.png b/src/main/resources/expansioncontentResources/images/cards/ManipulateTime_p.png index 5b3d4b9f9..711d8994e 100644 Binary files a/src/main/resources/expansioncontentResources/images/cards/ManipulateTime_p.png and b/src/main/resources/expansioncontentResources/images/cards/ManipulateTime_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/Pandemonium.png b/src/main/resources/expansioncontentResources/images/cards/Pandemonium.png new file mode 100644 index 000000000..41cdd6fa0 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/cards/Pandemonium.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/Pandemonium_p.png b/src/main/resources/expansioncontentResources/images/cards/Pandemonium_p.png new file mode 100644 index 000000000..5a8001beb Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/cards/Pandemonium_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/PeekPages.png b/src/main/resources/expansioncontentResources/images/cards/PeekPages.png new file mode 100644 index 000000000..ea9e9b56b Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/cards/PeekPages.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/PeekPages_p.png b/src/main/resources/expansioncontentResources/images/cards/PeekPages_p.png new file mode 100644 index 000000000..bbdbe13e4 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/cards/PeekPages_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/Reverie.png b/src/main/resources/expansioncontentResources/images/cards/Reverie.png new file mode 100644 index 000000000..bb8ad72d0 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/cards/Reverie.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/Reverie_p.png b/src/main/resources/expansioncontentResources/images/cards/Reverie_p.png new file mode 100644 index 000000000..e0a2a9241 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/cards/Reverie_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/SuperBloodthirst.png b/src/main/resources/expansioncontentResources/images/cards/SuperBloodthirst.png new file mode 100644 index 000000000..b13432ac3 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/cards/SuperBloodthirst.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/SuperBloodthirst_p.png b/src/main/resources/expansioncontentResources/images/cards/SuperBloodthirst_p.png new file mode 100644 index 000000000..4ebeddbec Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/cards/SuperBloodthirst_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/SuperBodyCrash.png b/src/main/resources/expansioncontentResources/images/cards/SuperBodyCrash.png new file mode 100644 index 000000000..bd3964181 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/cards/SuperBodyCrash.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/SuperBodyCrash_p.png b/src/main/resources/expansioncontentResources/images/cards/SuperBodyCrash_p.png new file mode 100644 index 000000000..092e6907e Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/cards/SuperBodyCrash_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/SuperClobber.png b/src/main/resources/expansioncontentResources/images/cards/SuperClobber.png new file mode 100644 index 000000000..ba3d907ca Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/cards/SuperClobber.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/SuperClobber_p.png b/src/main/resources/expansioncontentResources/images/cards/SuperClobber_p.png new file mode 100644 index 000000000..7d475ca72 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/cards/SuperClobber_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/SuperEtherStep.png b/src/main/resources/expansioncontentResources/images/cards/SuperEtherStep.png new file mode 100644 index 000000000..c5d339bbd Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/cards/SuperEtherStep.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/SuperEtherStep_p.png b/src/main/resources/expansioncontentResources/images/cards/SuperEtherStep_p.png new file mode 100644 index 000000000..de5074ae3 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/cards/SuperEtherStep_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/SuperGhostShield.png b/src/main/resources/expansioncontentResources/images/cards/SuperGhostShield.png new file mode 100644 index 000000000..0ce21e812 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/cards/SuperGhostShield.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/SuperGhostShield_p.png b/src/main/resources/expansioncontentResources/images/cards/SuperGhostShield_p.png new file mode 100644 index 000000000..b1121d3c4 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/cards/SuperGhostShield_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/SuperGoopSpray.png b/src/main/resources/expansioncontentResources/images/cards/SuperGoopSpray.png new file mode 100644 index 000000000..3d736c4ee Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/cards/SuperGoopSpray.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/SuperGoopSpray_p.png b/src/main/resources/expansioncontentResources/images/cards/SuperGoopSpray_p.png new file mode 100644 index 000000000..946a0d3a7 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/cards/SuperGoopSpray_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/SuperHexaguard.png b/src/main/resources/expansioncontentResources/images/cards/SuperHexaguard.png index 8a8870f8f..8b600f353 100644 Binary files a/src/main/resources/expansioncontentResources/images/cards/SuperHexaguard.png and b/src/main/resources/expansioncontentResources/images/cards/SuperHexaguard.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/SuperHexaguard_p.png b/src/main/resources/expansioncontentResources/images/cards/SuperHexaguard_p.png index 60017478d..024a10eca 100644 Binary files a/src/main/resources/expansioncontentResources/images/cards/SuperHexaguard_p.png and b/src/main/resources/expansioncontentResources/images/cards/SuperHexaguard_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/SuperLivingWall.png b/src/main/resources/expansioncontentResources/images/cards/SuperLivingWall.png new file mode 100644 index 000000000..1abe94ff1 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/cards/SuperLivingWall.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/SuperLivingWall_p.png b/src/main/resources/expansioncontentResources/images/cards/SuperLivingWall_p.png new file mode 100644 index 000000000..9e8370476 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/cards/SuperLivingWall_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/PrepareCrush.png b/src/main/resources/expansioncontentResources/images/cards/SuperPrepareCrush.png similarity index 100% rename from src/main/resources/expansioncontentResources/images/cards/PrepareCrush.png rename to src/main/resources/expansioncontentResources/images/cards/SuperPrepareCrush.png diff --git a/src/main/resources/expansioncontentResources/images/cards/PrepareCrush_p.png b/src/main/resources/expansioncontentResources/images/cards/SuperPrepareCrush_p.png similarity index 100% rename from src/main/resources/expansioncontentResources/images/cards/PrepareCrush_p.png rename to src/main/resources/expansioncontentResources/images/cards/SuperPrepareCrush_p.png diff --git a/src/main/resources/expansioncontentResources/images/cards/SuperSomberShield.png b/src/main/resources/expansioncontentResources/images/cards/SuperSomberShield.png new file mode 100644 index 000000000..248c14df5 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/cards/SuperSomberShield.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/SuperSomberShield_p.png b/src/main/resources/expansioncontentResources/images/cards/SuperSomberShield_p.png new file mode 100644 index 000000000..b025ef0ee Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/cards/SuperSomberShield_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/SuperTaunt.png b/src/main/resources/expansioncontentResources/images/cards/SuperTaunt.png new file mode 100644 index 000000000..8d8670931 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/cards/SuperTaunt.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/SuperTaunt_p.png b/src/main/resources/expansioncontentResources/images/cards/SuperTaunt_p.png new file mode 100644 index 000000000..aee079e77 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/cards/SuperTaunt_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/SuperViciousMockery.png b/src/main/resources/expansioncontentResources/images/cards/SuperViciousMockery.png new file mode 100644 index 000000000..8f3cffa49 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/cards/SuperViciousMockery.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/SuperViciousMockery_p.png b/src/main/resources/expansioncontentResources/images/cards/SuperViciousMockery_p.png new file mode 100644 index 000000000..6abf21dd0 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/cards/SuperViciousMockery_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/SuperWhirlingFlame.png b/src/main/resources/expansioncontentResources/images/cards/SuperWhirlingFlame.png new file mode 100644 index 000000000..459784a38 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/cards/SuperWhirlingFlame.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/SuperWhirlingFlame_p.png b/src/main/resources/expansioncontentResources/images/cards/SuperWhirlingFlame_p.png new file mode 100644 index 000000000..7f4879fc9 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/cards/SuperWhirlingFlame_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/TakeFlight.png b/src/main/resources/expansioncontentResources/images/cards/TakeFlight.png new file mode 100644 index 000000000..e1b09df2e Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/cards/TakeFlight.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/TakeFlight_p.png b/src/main/resources/expansioncontentResources/images/cards/TakeFlight_p.png new file mode 100644 index 000000000..2ac775eb2 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/cards/TakeFlight_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/Torchfire.png b/src/main/resources/expansioncontentResources/images/cards/Torchfire.png index 1cccbe030..3e83a88a7 100644 Binary files a/src/main/resources/expansioncontentResources/images/cards/Torchfire.png and b/src/main/resources/expansioncontentResources/images/cards/Torchfire.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/Torchfire_p.png b/src/main/resources/expansioncontentResources/images/cards/Torchfire_p.png index 51d7cc1f5..92699ba1d 100644 Binary files a/src/main/resources/expansioncontentResources/images/cards/Torchfire_p.png and b/src/main/resources/expansioncontentResources/images/cards/Torchfire_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/Virus.png b/src/main/resources/expansioncontentResources/images/cards/Virus.png new file mode 100644 index 000000000..6ee15371c Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/cards/Virus.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/Virus_p.png b/src/main/resources/expansioncontentResources/images/cards/Virus_p.png new file mode 100644 index 000000000..58aa1f34c Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/cards/Virus_p.png differ diff --git a/src/main/resources/expansioncontentResources/localization/eng/CardStrings.json b/src/main/resources/expansioncontentResources/localization/eng/CardStrings.json index e963f9f40..b8df7740f 100644 --- a/src/main/resources/expansioncontentResources/localization/eng/CardStrings.json +++ b/src/main/resources/expansioncontentResources/localization/eng/CardStrings.json @@ -1,40 +1,39 @@ { "expansioncontent:GuardianWhirl": { "NAME": "Guardian Whirl", - "DESCRIPTION": "Requires 10 Block. NL Deal !D! damage to ALL enemies 4 times. NL Exhaust.", + "DESCRIPTION": "Deal !D! damage to ALL enemies !M! times. NL If you have at least !DM! Block, hits !M! more times.", "EXTENDED_DESCRIPTION": [ "More Block required." ] }, "expansioncontent:Hexaburn": { "NAME": "Hexaburn", - "DESCRIPTION": "In !M! turns, deal !D! damage to a random enemy 6 times. NL Scales with Strength." + "DESCRIPTION": "Deal !D! damage to a random enemy !M! times. NL Exhaust.", + "UPGRADE_DESCRIPTION": "Deal !D! damage to a random enemy !M! times." }, "expansioncontent:InvincibleStrength": { "NAME": "Invincible", - "DESCRIPTION": "Gain 10 expansioncontent:Invincible. NL If you already had expansioncontent:Invincible, it lasts another turn instead." + "DESCRIPTION": "Gain !M! expansioncontent:Invincible. NL If you already had expansioncontent:Invincible, it lasts another turn instead." }, "expansioncontent:HyperBeam": { "NAME": "Automa-Beam", - "DESCRIPTION": "Deal !D! damage to ALL enemies. NL Next turn, lose [E]. NL Exhaust." + "DESCRIPTION": "Deal !D! damage to ALL enemies. NL Place a *Void on top of your draw pile. NL Exhaust." }, "expansioncontent:LastStand": { - "NAME": "Last Stand", - "DESCRIPTION": "Remove all Debuffs. NL Gain 1 Strength. NL If you are below half HP, Gain 2 Strength.", - "UPGRADE_DESCRIPTION": "Remove all Debuffs. NL Gain 1 Strength. NL If you are below half HP, Heal !M! and gain 2 Strength." + "NAME": "Final Stand", + "DESCRIPTION": "Remove all Debuffs. NL Gain !M! Strength." }, "expansioncontent:YouAreMine": { - "NAME": "YOU ARE MINE!", - "DESCRIPTION": "Remove Block from, and apply !M! Weak and Vulnerable to ALL enemies. NL Exhaust." + "NAME": "YOU ARE MINE!!!", + "DESCRIPTION": "Apply !M! Weak, !M! Vulnerable, and !DM! expansioncontent:Doom to ALL enemies. NL Exhaust." }, "expansioncontent:AwakenDeath": { - "NAME": "Awaken", - "DESCRIPTION": "When you would die, or at the end of combat, heal !M! HP instead and lose this buff." + "NAME": "Curiosity", + "DESCRIPTION": "Whenever you play a Power, gain !M! Strength." }, "expansioncontent:Chronoboost": { "NAME": "Chrono-Boost", - "DESCRIPTION": "Gain 2 Strength for every 12th card you play.", - "UPGRADE_DESCRIPTION": "Gain 2 Strength. NL Gain 2 Strength for every 12th card you play." + "DESCRIPTION": "Gain !M! Strength for every 12th card you play." }, "expansioncontent:PolyBeam": { "NAME": "Donu Blast", @@ -46,7 +45,7 @@ }, "expansioncontent:ShapePower": { "NAME": "Shaper's Blessing", - "DESCRIPTION": "Choose - Gain !M! Strength or !DM! Plated Armor.", + "DESCRIPTION": "Gain !M! Strength and !DM! expansioncontent:Plated *Armor.", "EXTENDED_DESCRIPTION": [ "Donu's Power", "Gain !M! Strength.", @@ -54,11 +53,19 @@ "Gain !M! Plated Armor." ] }, - "expansioncontent:PrepareCrush": { + "expansioncontent:SuperPrepareCrush": { "NAME": "Prepare Crush", - "DESCRIPTION": "Gain !B! Block. NL Next turn, gain [E] [E] [E] and *SLIME *CRUSH. NL Exhaust.", - "UPGRADE_DESCRIPTION": "Gain !B! Block. NL Next turn, gain [E] [E] [E] and *SLIME *CRUSH+. NL Exhaust." + "DESCRIPTION": "Next turn, gain *SLIME *CRUSH, [E] [E] [E] and !M! Strength. NL Exhaust.", + "UPGRADE_DESCRIPTION": "Next turn, gain *SLIME *CRUSH+, [E] [E] [E] [E] and !M! Strength. NL Exhaust.", + "EXTENDED_DESCRIPTION": [ + "~Slime...~ NL #r~CRUSH!!!~" + ] + }, + "expansioncontent:SuperLivingWall": { + "NAME": "Gelatinous Wall", + "DESCRIPTION": "Gain !B! Block. NL Apply !M! expansioncontent:Goop to attackers this turn." }, + "expansioncontent:StudyTheSpire": { "NAME": "Study the Spire", "DESCRIPTION": "Gain a random *Boss card at the start of your next !M! turns. They cost 0.", @@ -74,8 +81,7 @@ }, "expansioncontent:DashGenerateEvil": { "NAME": "The Evil Within", - "DESCRIPTION": "Deal !D! damage. NL Gain a random *Boss card. It costs 0 until played. NL Exhaust.", - "UPGRADE_DESCRIPTION": "Deal !D! damage. NL Gain a random Upgraded *Boss card. It costs 0 until played. NL Exhaust." + "DESCRIPTION": "Whenever you apply !DM! debuffs, deal !M! damage to ALL enemies." }, "expansioncontent:KnowingSkullWish": { "NAME": "Knowing Skull", @@ -85,11 +91,127 @@ "NAME": "Antidote", "DESCRIPTION": "Retain. NL Lose !M! Poison." }, + "expansioncontent:SuperGhostShield": { + "NAME": "Specter Shield", + "DESCRIPTION": "Ethereal. [#e087a4]Afterlife.[] NL [#e087a4]Gain[] [#e087a4]!B![] [#e087a4]Block.[] NL [#e087a4]Gain[] [#e087a4]!M![] [#e087a4]Blur.[]", + "EXTENDED_DESCRIPTION": [ + "Gain !B! Block." + ] + }, + "expansioncontent:SuperGoopSpray": { + "NAME": "Goop Launch", + "DESCRIPTION": "Apply !M! expansioncontent:Goop and !DM! Weak.", + "UPGRADE_DESCRIPTION": "Apply !M! expansioncontent:Goop and !DM! Weak to ALL enemies." + }, + "expansioncontent:ChargeUp": { + "NAME": "Cleansing Plate", + "DESCRIPTION": "Reduce each of your debuffs by !M!. NL Exhaust.", + "UPGRADE_DESCRIPTION": "Reduce each of your debuffs by !M!." + }, + "expansioncontent:SuperTaunt": { + "NAME": "Taunt", + "DESCRIPTION": "Apply !M! Weak and Vulnerable.", + "UPGRADE_DESCRIPTION": "Apply !M! Weak and Vulnerable to ALL enemies." + }, + "expansioncontent:Torchfire": { + "NAME": "Wildfire", + "DESCRIPTION": "Deal !D! damage. NL Repeat for each unique debuff on the enemy." + }, + + "expansioncontent:TakeFlight": { + "NAME": "Revitalize", + "DESCRIPTION": "Heal !M! HP. NL awakened:Chant: Heal !DM! HP." + }, + "expansioncontent:BeatOfDeath": { + "NAME": "Beat Of Death", + "DESCRIPTION": "Whenever you play a card, deal !M! damage to ALL enemies." + }, + "expansioncontent:SuperViciousMockery": { + "NAME": "Mockery", + "DESCRIPTION": "Gain !M! Vigor. NL Apply !DM! Weak." + }, + "expansioncontent:SuperClobber": { + "NAME": "Walloping Strike", + "DESCRIPTION": "Deal !D! damage. NL Gain Block equal to unblocked damage dealt." + }, + + "expansioncontent:SuperSomberShield": { + "NAME": "Greenpyre Shield", + "DESCRIPTION": "expansioncontent:Pyre. NL Gain !B! Block. NL Next turn, gain a copy of the *Exhausted card." + }, + + "expansioncontent:SuperWhirlingFlame": { + "NAME": "Whirling Blaze", + "DESCRIPTION": "Deal !D! damage to ALL enemies. NL Put a card from your discard pile on top of your draw pile." + }, + "expansioncontent:Flail": { + "NAME": "Flailing Strikes", + "DESCRIPTION": "Deal !D! damage to ALL enemies !DM! times. NL Gain !M! Artifact. NL Exhaust.", + "EXTENDED_DESCRIPTION": [ + "flailing", + "Flail" + ] + }, + "expansioncontent:SuperBloodthirst": { + "NAME": "Bloodlust", + "DESCRIPTION": "Deal !D! damage. NL If Fatal, obtain a random potion and Exhaust this card." + }, + "expansioncontent:SuperBodyCrash": { + "NAME": "Body Smash", + "DESCRIPTION": "Gain !B! Block. NL Deal damage equal to your Block.", + "UPGRADE_DESCRIPTION": " NL (Deals !D! damage.)" + }, + "expansioncontent:SuperEtherStep": { + "NAME": "Specter Step", + "DESCRIPTION": "Deal !D! damage. NL Exhaust 1 card. NL Draw !M! card.", + "UPGRADE_DESCRIPTION": "Deal !D! damage. NL Exhaust 1 card. NL Draw !M! cards." + }, + + "expansioncontent:Virus": { + "NAME": "404 Virus", + "DESCRIPTION": "Exhaust up to !M! cards, shuffle a *Major *Beam into the draw pile for each card exhausted. NL Exhaust." + }, + + "expansioncontent:MajorBeam": { + "NAME": "Major Beam", + "DESCRIPTION": "Deal !D! damage. NL Draw !M! card.", + "UPGRADE_DESCRIPTION": "Deal !D! damage. NL Draw !M! cards." + }, + + "expansioncontent:ManipulateTime": { + "NAME": "Afterthought", + "DESCRIPTION": "Put a card from your discard pile to the bottom of your draw pile. It costs 0 until played.", + "UPGRADE_DESCRIPTION": "Put a card from your discard pile to the bottom of your draw pile. It costs 0 this combat." + }, + "expansioncontent:Pandemonium": { + "NAME": "Pandemonium", + "DESCRIPTION": "At the start of your turn, play a random card in your discard pile." + }, + "expansioncontent:Reverie": { + "NAME": "Reverie", + "DESCRIPTION": "At the start of your turn, put one of the top !M! cards of your discard pile into your hand." + }, + "expansioncontent:ExploitVulnerability": { + "NAME": "Donu Beam", + "DESCRIPTION": "Remove all Block from the enemy, then gain that much Block. NL Deal !D! damage twice." + }, + "expansioncontent:PeekPages": { + "NAME": "Peek Pages", + "DESCRIPTION": "Place !M! *Insights on top of your draw pile. NL Exhaust." + }, + "expansioncontent:BloodBarrage": { + "NAME": "Blood Barrage", + "DESCRIPTION": "Deal !D! damage !M! times. NL Exhaust." + }, + "expansioncontent:DoubleAct": { + "NAME": "Double Act", + "DESCRIPTION": "At the start of your next turn, draw cards and gain [E] an additional time. NL Exhaust." + }, "expansioncontent:BloodySacrifice": { "NAME": "Bloody Sacrifice", - "DESCRIPTION": "Ethereal. NL Lose HP equal to !M! % of your max HP. NL Gain 1 Ritual. Exhaust.", + "DESCRIPTION": "Ethereal. NL Lose !M! % of your Max HP. NL Gain 1 Ritual. Exhaust.", "EXTENDED_DESCRIPTION":[ - " NL (Lose {amount} HP. )" + " NL (Lose {amount} Max HP. )" ] } } diff --git a/src/main/resources/expansioncontentResources/localization/eng/KeywordStrings.json b/src/main/resources/expansioncontentResources/localization/eng/KeywordStrings.json index b43fdef48..6ddafbf94 100644 --- a/src/main/resources/expansioncontentResources/localization/eng/KeywordStrings.json +++ b/src/main/resources/expansioncontentResources/localization/eng/KeywordStrings.json @@ -7,6 +7,34 @@ ], "DESCRIPTION": "#yBlock is not removed at the start of your turn." }, + { + "PROPER_NAME": "Vibrancy", + "NAMES": [ + "vibrancy" + ], + "DESCRIPTION": "NOT USED DO NOT TL" + }, + { + "PROPER_NAME": "Opulence", + "NAMES": [ + "opulence" + ], + "DESCRIPTION": "NOT USED DO NOT TL" + }, + { + "PROPER_NAME": "Regen", + "NAMES": [ + "regen" + ], + "DESCRIPTION": "At the end of your turn, heal HP equal to your #yRegen then reduce #yRegen by #b1 [REMOVE_SPACE]." + }, + { + "PROPER_NAME": "Plated Armor", + "NAMES": [ + "plated" + ], + "DESCRIPTION": "At the end of your turn, gain Block equal to your #yPlated #yArmor [REMOVE_SPACE]. Taking unblocked attack damage reduces #yPlated #yArmor by #b1 [REMOVE_SPACE]." + }, { "PROPER_NAME": "Boss", "NAMES": [ @@ -20,7 +48,7 @@ "NAMES": [ "echo" ], - "DESCRIPTION": "Add a copy of a card to you hand, it is #yEthereal and #yExhausts. NL Echoes cannot be Echoed." + "DESCRIPTION": "Add a copy of a card to you hand, it is #yEthereal and #yExhausts [REMOVE_SPACE]. NL Echoes cannot be Echoed." }, { "PROPER_NAME": "Exhume", @@ -44,6 +72,13 @@ ], "DESCRIPTION": "Put a card from your exhaust pile into your discard pile." }, + { + "PROPER_NAME": "Goop", + "NAMES": [ + "goop" + ], + "DESCRIPTION": "The next attack deals #b1 more damage per #yGoop [REMOVE_SPACE], removing all #yGoop and triggering any #yConsume effects." + }, { "PROPER_NAME": "Shackled", "NAMES": [ @@ -60,6 +95,47 @@ ], "DESCRIPTION": "Until end of combat, prevents damage to HP." }, + { + "PROPER_NAME": "Pyre", + "NAMES": [ + "pyre" + ], + "DESCRIPTION": "Requires exhausting a card in hand in addition to paying its energy cost." + }, + { + "PROPER_NAME": "Doom", + "NAMES": [ + "doom", + "doomed" + ], + "DESCRIPTION": "Doomed creatures lose HP at the start of their turn, then Doom is removed #bunless the creature is #yAfflicted (has both #yWeak and #yVulnerable [REMOVE_SPACE])." + }, + + { + "NAMES": [ + "goop", + "gooped" + ], + "PROPER_NAME": "Goop", + "DESCRIPTION": "The next attack deals #b1 more damage per #yGoop [REMOVE_SPACE], removing all #yGoop and triggering any #yConsume effects." + }, + + { + "NAMES": [ + "constricted" + ], + "PROPER_NAME": "Constricted", + "DESCRIPTION": "Creatures with Constricted take damage at the end of their turn." + }, + + { + "PROPER_NAME": "Chant", + "NAMES": [ + "chant", + "Chant", + "Chants" + ], + "DESCRIPTION": "Chant effects on a card activate during play if you played a Power while it was in hand."}, { "PROPER_NAME": "Transform", "ID": "transform", diff --git a/src/main/resources/expansioncontentResources/localization/eng/PowerStrings.json b/src/main/resources/expansioncontentResources/localization/eng/PowerStrings.json index 977d87c14..3f5293c0f 100644 --- a/src/main/resources/expansioncontentResources/localization/eng/PowerStrings.json +++ b/src/main/resources/expansioncontentResources/localization/eng/PowerStrings.json @@ -29,7 +29,7 @@ "DESCRIPTIONS": [ "After playing #b", " more cards, gain #b", - " #yStrength." + " #yStrength [REMOVE_SPACE]." ] }, "expansioncontent:ChronoBoostPlusPower": { @@ -37,7 +37,7 @@ "DESCRIPTIONS": [ "After playing #b", " more cards, gain #b", - " #yStrength." + " #yStrength [REMOVE_SPACE]." ] }, "expansioncontent:DeEnergizedPower": { @@ -93,6 +93,39 @@ " damage to a random enemy #b6 times." ] }, + "expansioncontent:BeatOfDeathP": { + "NAME": "Beat of Death", + "DESCRIPTIONS": [ + "Whenever you play a card, deal #b", + " damage to ALL enemies." + ] + }, + "expansioncontent:PandemoniumPower":{ + "NAME": "Pandemonium", + "DESCRIPTIONS": [ + "At the start of your turn, play a random card from your discard pile.", + "At the start of your turn, play #b", + " random cards from your discard pile." + ] + }, + "expansioncontent:EvilWithinPower":{ + "NAME": "The Evil Within", + "DESCRIPTIONS": [ + "Deal #b", + " damage to ALL enemies after applying #b", + " more debuffs.", + " more debuff." + ] + }, + "expansioncontent:ReveriePower":{ + "NAME": "Reverie", + "DESCRIPTIONS": [ + "At the start of your turn, look at the top card of your discard pile and add it to your hand.", + "At the start of your turn, look at the top #b", + " cards of your discard pile and choose one to add to your hand.", + "Choose a card to add to your hand." + ] +}, "expansioncontent:VexVinciblePower": { "NAME": "Invincible", "DESCRIPTIONS": [ diff --git a/src/main/resources/expansioncontentResources/localization/eng/RelicStrings.json b/src/main/resources/expansioncontentResources/localization/eng/RelicStrings.json index 79e9fb511..4a4d63075 100644 --- a/src/main/resources/expansioncontentResources/localization/eng/RelicStrings.json +++ b/src/main/resources/expansioncontentResources/localization/eng/RelicStrings.json @@ -3,7 +3,7 @@ "NAME": "Tiny Bowler Hat", "FLAVOR": "Whosoever controls the hat, controls the Spire.", "DESCRIPTIONS": [ - "At the start of combat, add a #yStudy #ythe #ySpire card to your hand. It costs #b0." + "At the start of combat, add a #yStudy #ythe #ySpire card to your hand. It costs #b0 [REMOVE_SPACE]." ] } } diff --git a/src/main/resources/expansioncontentResources/localization/jpn/CardStrings.json b/src/main/resources/expansioncontentResources/localization/jpn/CardStrings.json index 38b13d76c..661e6a158 100644 --- a/src/main/resources/expansioncontentResources/localization/jpn/CardStrings.json +++ b/src/main/resources/expansioncontentResources/localization/jpn/CardStrings.json @@ -1,43 +1,42 @@ { "expansioncontent:GuardianWhirl": { "NAME": "旋風刃", - "DESCRIPTION": "必要 10 ブロック NL 敵全体に !D! ダメージを 4 回与える。 NL 廃棄", + "DESCRIPTION": "敵全体に !D! ダメージを !M! 回与える。 NL 自分が !DM! ブロック以上持っていた場合、更に !M! 回ダメージを与える。 NL 廃棄", "EXTENDED_DESCRIPTION": [ "もっとブロックが必要だ" ] }, "expansioncontent:Hexaburn": { "NAME": "ヘクサバーン", - "DESCRIPTION": " !M! ターン後、ランダムな敵に 6 回 !D! ダメージを与える。 NL 筋力 で強化される。" + "DESCRIPTION": "!M! 回 ランダムな敵に !D! ダメージを与える。 NL 廃棄", + "UPGRADE_DESCRIPTION": "!M! 回 ランダムな敵に !D! ダメージを与える。" }, - "expansioncontent:Invincible筋力": { + "expansioncontent:InvincibleStrength": { "NAME": "インビンシブル", - "DESCRIPTION": "expansioncontent:無敵 10 を得る。 NL 既に expansioncontent:無敵 を持っていた場合、発動回数を 1 増やす" + "DESCRIPTION": "expansioncontent:無敵 !M! を得る。 NL 既に expansioncontent:無敵 を持っていた場合、発動回数を 1 増やす" }, "expansioncontent:HyperBeam": { "NAME": "オートマ-ビーム", - "DESCRIPTION": "敵全体に !D! ダメージ。 NL 次のターン開始時、 [E] を失う。 NL 廃棄" + "DESCRIPTION": "敵全体に !D! ダメージを与える。 NL 山札の上に *空虚 が置かれる。 NL 廃棄" }, "expansioncontent:LastStand": { "NAME": "ラストスタンド", - "DESCRIPTION": "全てのデバフを解除。 NL 筋力 1 を得る NL もし HP が半分以下なら 筋力 2 を得る。", - "UPGRADE_DESCRIPTION": "全てのデバフを解除。 NL 筋力 1 を得る NL もし HP が半分以下なら HPを !M! 回復し、 筋力 2 を得る。" + "DESCRIPTION": "全てのデバフを解除する。 NL 筋力 !M! を得る。" }, "expansioncontent:YouAreMine": { "NAME": "お前はわたしの物だ!!", - "DESCRIPTION": "敵全体の ブロック をすべて除去し、 脱力 と 弱体 !M! を与える。 NL 廃棄" + "DESCRIPTION": "敵全体に 脱力 と 弱体 !M! を与え、更に expansioncontent:破滅 !DM! を与える。 NL 廃棄" }, "expansioncontent:AwakenDeath": { - "NAME": "目覚め", - "DESCRIPTION": "この戦闘中あなたが死亡した時または戦闘終了時、HPを !M! 回復しこのバフを失う。" + "NAME": "キュリオシティ", + "DESCRIPTION": "パワー をプレイする度、 筋力 !M! を得る。" }, "expansioncontent:Chronoboost": { "NAME": "クロノ-ブースト", - "DESCRIPTION": "カードを12枚プレイする毎に 筋力 2 を得る。", - "UPGRADE_DESCRIPTION": "筋力 2 を得る。 NL カードを12枚プレイする毎に 筋力 2 を得る。" + "DESCRIPTION": "カードを12枚プレイする毎に 筋力 !M! を得る。" }, "expansioncontent:PolyBeam": { - "NAME": "ドヌーブースト", + "NAME": "ドヌーブラスト", "DESCRIPTION": "筋力 !M! を得る。" }, "expansioncontent:DecaShield": { @@ -46,7 +45,7 @@ }, "expansioncontent:ShapePower": { "NAME": "シェイプ達の祝福", - "DESCRIPTION": "選択 NL 筋力 !M! NL または NL プレートアーマー !DM! ", + "DESCRIPTION": "筋力 !M! と プレートアーマー !DM! を得る。", "EXTENDED_DESCRIPTION": [ "ドヌーパワー", "筋力 !M! を得る。", @@ -54,15 +53,22 @@ "プレートアーマー !M! を得る。" ] }, - "expansioncontent:PrepareCrush": { + "expansioncontent:SuperPrepareCrush": { "NAME": "クラッシュ準備", - "DESCRIPTION": " !B! ブロックを得る。 NL 次のターン [E] [E] [E] を得て *スライムクラッシュ を手札に加える。 NL 廃棄", - "UPGRADE_DESCRIPTION": " !B! ブロックを得る。 NL 次のターン [E] [E] [E] を得て *スライムクラッシュ を手札に加える。 NL 廃棄" + "DESCRIPTION": "次のターン開始時、筋力 !M! と [E] [E] [E] を得て 更に *スライムクラッシュ を手札に加える。 NL 廃棄", + "UPGRADE_DESCRIPTION": "次のターン開始時、筋力 !M! と [E] [E] [E] [E] を得て *スライムクラッシュ+ を手札に加える。 NL 廃棄", + "EXTENDED_DESCRIPTION": [ + "~スライム...~ NL #r~クラッシュ!!!~" + ] + }, + "expansioncontent:SuperLivingWall": { + "NAME": "リビングウォール", + "DESCRIPTION": "!B! ブロックを得る。 NL このターン、攻撃してきた相手に !M! expansioncontent:汚泥 を与える。" }, "expansioncontent:StudyTheSpire": { "NAME": "スパイアの研究", - "DESCRIPTION": "あと !M! ターン開始時、ランダムな *ボス カードを手札に加える。 NL プレイするまでそのコストは 0", - "UPGRADE_DESCRIPTION": "あと !M! ターン開始時、 アップグレード されたランダムな *ボス カードを手札に加える。 NL プレイするまでそのコストは 0" + "DESCRIPTION": "!M! ターンの間、ターン開始時にランダムな *ボス カードを手札に加える。 NL プレイするまでそのコストは 0", + "UPGRADE_DESCRIPTION": "M! ターンの間、 ターン開始時、 アップグレード されたランダムな *ボス カードを手札に加える。 NL プレイするまでそのコストは 0" }, "expansioncontent:QuickStudy": { "NAME": "手っ取り早い研究", @@ -74,8 +80,7 @@ }, "expansioncontent:DashGenerateEvil": { "NAME": "悪意の中で", - "DESCRIPTION": " !D! ダメージを与える。 NL ランダムな *ボス カードを手札に加える。 NL プレイするまでそのコストは 0 NL 廃棄", - "UPGRADE_DESCRIPTION": " !D! ダメージを与える。 NL アップグレード された ランダムな *ボス カードを手札に加える。 NL プレイするまでそのコストは 0 NL 廃棄" + "DESCRIPTION": "敵にデバフを !DM! 回適用する度に、すべての敵に !M! ダメージを与える。" }, "expansioncontent:KnowingSkullWish": { "NAME": "しゃれこうべ", @@ -85,8 +90,124 @@ "NAME": "アンチドーテ", "DESCRIPTION": "保留 NL 毒 を !M! 軽減する。" }, + "expansioncontent:SuperGhostShield": { + "NAME": "ゴーストシールド", + "DESCRIPTION": "エセリアル NL [#e087a4]死後[] NL !B! [#e087a4]ブロックを得る。[] NL 1 [#e087a4]ブラー[] [#e087a4]を得る。[]", + "EXTENDED_DESCRIPTION": [ + "!B! ブロックを得る。" + ] + }, + "expansioncontent:SuperGoopSpray": { + "NAME": "ヘドロ噴射", + "DESCRIPTION": " expansioncontent:汚泥 !M! と 脱力 !DM! を与える。", + "UPGRADE_DESCRIPTION": "敵全体に expansioncontent:汚泥 !M! と 脱力 !DM! を与える。" + }, + "expansioncontent:ChargeUp": { + "NAME": "弾力性プレート", + "DESCRIPTION": "自分のデバフの数値を !M! 減少させる。 NL 廃棄 ", + "UPGRADE_DESCRIPTION": "自分のデバフの数値を !M! 減少させる。" + }, + "expansioncontent:SuperTaunt": { + "NAME": "誘い", + "DESCRIPTION": "脱力 !M! と 弱体 !M! を与える。", + "UPGRADE_DESCRIPTION": "敵全体に 脱力 !M! と 弱体 !M! を与える。" + }, + "expansioncontent:Torchfire": { + "NAME": "ワイルドファイア", + "DESCRIPTION": "!D! ダメージを与える。 NL 敵の持つデバフの種類の数だけ繰り返す。" + }, + + "expansioncontent:TakeFlight": { + "NAME": "活性化", + "DESCRIPTION": "expansioncontent:再生 !M! を得る。 NL expansioncontent:詠唱 : *再生 !DM! を得る。" + }, + "expansioncontent:BeatOfDeath": { + "NAME": "死の鼓動", + "DESCRIPTION": "カードをプレイする度、 敵全体に !M! ダメージを与える。" + }, + "expansioncontent:SuperViciousMockery": { + "NAME": "悪意ある嘲笑", + "DESCRIPTION": "気力 !M! を得る。 NL 脱力 !DM! を与える。" + }, + "expansioncontent:SuperClobber": { + "NAME": "クラバストライク", + "DESCRIPTION": "!D! ダメージを与える。 NL ブロックされなかったダメージに等しいブロックを得る。" + }, + + "expansioncontent:SuperSomberShield": { + "NAME": "暗澹たる盾", + "DESCRIPTION": "expansioncontent:葬火 NL !B! ブロックを得る。 NL 次のターン、このカードによって *廃棄 したカードのコピーを得る。" + }, + + "expansioncontent:SuperWhirlingFlame": { + "NAME": "渦巻く焔", + "DESCRIPTION": "敵全体に !D! ダメージを与える。 NL 捨て札からカードを1枚、山札の上に置く。" + }, + "expansioncontent:Flail": { + "NAME": "フレイル", + "DESCRIPTION": "敵全体に !D! ダメージを !DM! 回与える。 NL !M! アーティファクト を得る。 NL 廃棄 ", + "EXTENDED_DESCRIPTION": [ + "flailing", + "Flail" + ] + }, + "expansioncontent:SuperBloodthirst": { + "NAME": "血への渇望", + "DESCRIPTION": "!D! ダメージを与える。 NL *致命 時、ランダムなポーションを獲得し、このカードを *廃棄 する。" + }, + "expansioncontent:SuperBodyCrash": { + "NAME": "ボディクラッシュ", + "DESCRIPTION": "!B! ブロックを得る。 NL ブロックと同じ値のダメージを与える", + "UPGRADE_DESCRIPTION": " NL ( !D! ダメージ。)" + }, + "expansioncontent:SuperEtherStep": { + "NAME": "エーテルステップ", + "DESCRIPTION": " 手札を1枚廃棄する。 NL カードを !M! 枚引く。 NL !D! ダメージを与える。", + "UPGRADE_DESCRIPTION": " 手札を1枚廃棄する。 NL カードを !M! 枚引く。 NL !D! ダメージを与える。" + }, + + "expansioncontent:Virus": { + "NAME": "ウイルス", + "DESCRIPTION": "手札を最大 !M! 枚 廃棄 し、廃棄した数だけ山札に *メジャービーム を加える。 NL 廃棄 " + }, + + "expansioncontent:MajorBeam": { + "NAME": "メジャービーム", + "DESCRIPTION": "!D! ダメージを与える。 NL カードを !M! 枚引く。", + "UPGRADE_DESCRIPTION": "!D! ダメージを与える。 NL カードを !M! 枚引く。" + }, + + "expansioncontent:ManipulateTime": { + "NAME": "再考", + "DESCRIPTION": "捨て札からカードを1枚山札の底に置く。プレイされるまでそのコストは0になる。", + "UPGRADE_DESCRIPTION": "捨て札からカードを1枚山札の底に置く。戦闘終了までそのコストは0になる。" + }, + "expansioncontent:Pandemonium": { + "NAME": "パンデモニウム", + "DESCRIPTION": "ターン開始時、捨て札にあるカードをランダムに1枚プレイする。" + }, + "expansioncontent:Reverie": { + "NAME": "夢想", + "DESCRIPTION": "ターン開始時、捨て札の上から !M! 枚のカードを開き、1枚を手札に加える。" + }, + "expansioncontent:ExploitVulnerability": { + "NAME": "ドヌービーム", + "DESCRIPTION": "敵の持つブロックを全て盗む。 NL 2回 !D! ダメージを与える。" + }, + "expansioncontent:PeekPages": { + "NAME": "ページを覗く", + "DESCRIPTION": "山札に !M! 枚の *洞察 を加える。 NL 廃棄 " + }, + "expansioncontent:BloodBarrage": { + "NAME": "ブラッド・バラージュ", + "DESCRIPTION": "!D! ダメージを !M! 回与える。 NL 廃棄 " + }, + "expansioncontent:DoubleAct": { + "NAME": "二回行動", + "DESCRIPTION": "次のターン開始時、カードを2倍引き [E] を2倍得る。 NL 廃棄 " + }, "expansioncontent:BloodySacrifice": { - "NAME": "血塗れの生贄", + "NAME": "血の犠牲", "DESCRIPTION": "エセリアル NL 最大HPの !M! % の体力を失う。 NL 儀式 1 を得る。 NL 廃棄", "EXTENDED_DESCRIPTION":[ " NL ( {amount} HP を消費)" diff --git a/src/main/resources/expansioncontentResources/localization/jpn/KeywordStrings.json b/src/main/resources/expansioncontentResources/localization/jpn/KeywordStrings.json index d80009564..206f09019 100644 --- a/src/main/resources/expansioncontentResources/localization/jpn/KeywordStrings.json +++ b/src/main/resources/expansioncontentResources/localization/jpn/KeywordStrings.json @@ -1,4 +1,44 @@ -[{ +[ + { + "PROPER_NAME": "ブラー", + "ID": "blur", + "NAMES": [ + "blur", + "ブラー" + ], + "DESCRIPTION": "あなたのターン開始時に #yブロック が解除されない。" + }, + { + "PROPER_NAME": "Vibrancy", + "NAMES": [ + "vibrancy" + ], + "DESCRIPTION": "NOT USED DO NOT TL" + }, + { + "PROPER_NAME": "Opulence", + "NAMES": [ + "opulence" + ], + "DESCRIPTION": "NOT USED DO NOT TL" + }, + { + "PROPER_NAME": "再生", + "NAMES": [ + "regen", + "再生" + ], + "DESCRIPTION": "ターン終了時、 #y再生 の値と同じ分だけHPを回復しその後 #y再生 のカウントを #b1 減少させる。" + }, + { + "PROPER_NAME": "プレートアーマー", + "NAMES": [ + "plated", + "プレート" + ], + "DESCRIPTION": "ターン終了時、 #yプレートアーマー の値と同じ ブロックを得る。攻撃によってHPを失うたび、 #yプレートアーマー が #b1 減少。" + }, + { "PROPER_NAME": "ボス", "NAMES": [ "boss", @@ -47,11 +87,57 @@ ], "DESCRIPTION": "戦闘終了まで、HPへのダメージを肩代わりする。" }, + { + "PROPER_NAME": "葬火", + "NAMES": [ + "pyre", + "葬火" + ], + "DESCRIPTION": "コストの支払いに加え、手札を一枚廃棄する必要がある。" + }, + { + "PROPER_NAME": "破滅", + "NAMES": [ + "doom", + "doomed", + "破滅" + ], + "DESCRIPTION": "#y破滅 状態の敵はターン開始時にHPを失い、その後 #y破滅 状態が解除される。ただしその敵が #y苦悶 状態である時は除く。( #y脱力 と #y弱体 を同時に受けている状態)" + }, + + { + "NAMES": [ + "goop", + "gooped", + "汚泥" + ], + "PROPER_NAME": "汚泥", + "DESCRIPTION": "次の攻撃時 #y汚泥 分ダメージを増加させる。全ての #y汚泥 を除去し、 #y泥食い の効果を発動する。" + }, + + { + "NAMES": [ + "constricted", + "締め付け" + ], + "PROPER_NAME": "締め付け", + "DESCRIPTION": "締め付け状態のモンスターはターン終了時、ダメージを受ける。" + }, + + { + "PROPER_NAME": "詠唱", + "NAMES": [ + "chant", + "Chant", + "Chants", + "詠唱" + ], + "DESCRIPTION": "#y詠唱 の効果はそのカードが手札にある間に #yパワー をプレイした時に発動する。"}, { - "PROPER_NAME": "変身", - "NAMES": [ - "変身" - ], - "DESCRIPTION": "カードを #y廃棄 し、別のカードと入れ替える。" + "PROPER_NAME": "変身", + "NAMES": [ + "変身" + ], + "DESCRIPTION": "カードを #y廃棄 し、別のカードと入れ替える。" } ] \ No newline at end of file diff --git a/src/main/resources/expansioncontentResources/localization/jpn/PowerStrings.json b/src/main/resources/expansioncontentResources/localization/jpn/PowerStrings.json index fdd8c04e5..6730a6625 100644 --- a/src/main/resources/expansioncontentResources/localization/jpn/PowerStrings.json +++ b/src/main/resources/expansioncontentResources/localization/jpn/PowerStrings.json @@ -64,10 +64,10 @@ ] }, "expansioncontent:AddCopyPower": { - "NAME": "Delayed Card", + "NAME": "遅延カード", "DESCRIPTIONS": [ - "Add ", - " into your hand at the start of your next turn." + " ", + " を次の自分のターンの開始時に手札に加える。" ] }, "expansioncontent:AddSameInstancePower": { @@ -93,6 +93,39 @@ " ダメージをランダムな敵に #b6 回与える。" ] }, + "expansioncontent:BeatOfDeathP": { + "NAME": "死の鼓動", + "DESCRIPTIONS": [ + "あなたがカードをプレイする度敵全体に #b", + " ダメージを与える。" + ] + }, + "expansioncontent:PandemoniumPower":{ + "NAME": "パンデモニウム", + "DESCRIPTIONS": [ + "ターン開始時、ランダムに捨て札のカードを1枚プレイする。", + "ターン開始時、ランダムに捨て札のカードを #b", + " 枚プレイする。" + ] + }, + "expansioncontent:EvilWithinPower":{ + "NAME": "悪意の中で", + "DESCRIPTIONS": [ + "条件を満たした時、敵全体に #b", + " ダメージを与える。更に #b", + " 回デバフを与える。", + " 回デバフを与える。" + ] + }, + "expansioncontent:ReveriePower":{ + "NAME": "夢想", + "DESCRIPTIONS": [ + "ターン開始時、捨て札の一番上のカードを確認しそれを手札に加える。", + "ターン開始時、捨て札のカードを上から #b", + " 枚を確認し、選んで1枚を手札に加える。", + " 枚を確認し、選んで1枚を手札に加える。" + ] +}, "expansioncontent:VexVinciblePower": { "NAME": "無敵", "DESCRIPTIONS": [ diff --git a/src/main/resources/expansioncontentResources/localization/kor/CardStrings.json b/src/main/resources/expansioncontentResources/localization/kor/CardStrings.json index f7764a2fa..28ff1dc11 100644 --- a/src/main/resources/expansioncontentResources/localization/kor/CardStrings.json +++ b/src/main/resources/expansioncontentResources/localization/kor/CardStrings.json @@ -1,40 +1,39 @@ { "expansioncontent:GuardianWhirl": { "NAME": "회오리 바람", - "DESCRIPTION": "방어도가 10 이상 필요합니다. NL 적 전체에게 피해를 !D! 만큼 4번 줍니다. NL 소멸.", + "DESCRIPTION": "적 전체에게 피해를 !D! 만큼 4번 줍니다. NL 방어도가 !DM! 이상이면 피해를 !M! 번 추가로 줍니다.", "EXTENDED_DESCRIPTION": [ "방어도가 더 필요하다." ] }, "expansioncontent:Hexaburn": { "NAME": "지옥염", - "DESCRIPTION": " !M! 턴 후 무작위 적들에게 피해를 !D! 만큼 6번 줍니다. NL 힘 만큼 피해량이 증가합니다." + "DESCRIPTION": "무작위 적에게 피해를 !D! 만큼 !M! 번 줍니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "무작위 적에게 피해를 !D! 만큼 !M! 번 줍니다." }, "expansioncontent:InvincibleStrength": { "NAME": "천하무적", - "DESCRIPTION": "expansioncontent:천하무적을 10 얻습니다. NL expansioncontent:천하무적을 이미 보유하고 있다면 보유한 천하무적이 끝나면 바로 적용됩니다." + "DESCRIPTION": "expansioncontent:천하무적을 !M! 얻습니다. NL expansioncontent:천하무적을 이미 보유하고 있다면 보유한 천하무적이 끝나면 바로 적용됩니다." }, "expansioncontent:HyperBeam": { "NAME": "자동 광선", - "DESCRIPTION": "적 전체에게 피해를 !D! 줍니다. NL 다음 내 턴 시작 시 [E] 를 잃습니다. NL 소멸." + "DESCRIPTION": "적 전체에게 피해를 !D! 줍니다. NL *공허를 뽑을 카드 더미 맨 위에 놓습니다. NL 소멸." }, "expansioncontent:LastStand": { "NAME": "최후의 저항", - "DESCRIPTION": "모든 해로운 효과를 제거합니다. NL 힘을 1 얻습니다. NL 체력이 절반 이하라면 힘을 2 얻습니다.", - "UPGRADE_DESCRIPTION": "모든 해로운 효과를 제거합니다. NL 힘을 1 얻습니다. NL 체력이 절반 이하라면 체력을 !M! 회복하고 힘을 2 얻습니다." + "DESCRIPTION": "모든 해로운 효과를 제거합니다. NL 힘을 !M! 얻습니다." }, "expansioncontent:YouAreMine": { "NAME": "넌 나의 것이다!", - "DESCRIPTION": "적 전체의 방어도를 없앱니다. NL 적 전체에게 약화 와 취약을 !M! 부여합니다. NL 소멸." + "DESCRIPTION": "적 전체에게 약화를 !M!, 취약을 !M!, expansioncontent:파멸을 !DM! 부여합니다. NL 소멸." }, "expansioncontent:AwakenDeath": { - "NAME": "각성", - "DESCRIPTION": "죽거나 전투 종료 시 체력을 !M! 회복하고 이 효과를 제거합니다." + "NAME": "호기심", + "DESCRIPTION": "파워 카드를 사용할 때마다 힘을 !M! 얻습니다." }, "expansioncontent:Chronoboost": { "NAME": "시간-가속", - "DESCRIPTION": "카드를 12번 사용할 때마다 힘을 2 얻습니다.", - "UPGRADE_DESCRIPTION": "힘을 2 얻습니다. NL 카드를 12번 사용할 때마다 힘을 2 얻습니다." + "DESCRIPTION": "카드를 12번 사용할 때마다 힘을 !M! 얻습니다." }, "expansioncontent:PolyBeam": { "NAME": "도누의 폭발", @@ -42,11 +41,11 @@ }, "expansioncontent:DecaShield": { "NAME": "데카의 방패", - "DESCRIPTION": "*판금 *갑옷을 !M! 얻습니다." + "DESCRIPTION": "expansioncontent:판금_갑옷을 !DM! 얻습니다. NL 힘을 !M! 얻습니다." }, "expansioncontent:ShapePower": { "NAME": "모양기의 축복", - "DESCRIPTION": "선택 - 힘을 !M! 얻습니다. 또는 *판금 *갑옷을 !DM! 얻습니다.", + "DESCRIPTION": "힘을 !M! 얻습니다. 또는 expansioncontent:판금_갑옷을 !DM! 얻습니다.", "EXTENDED_DESCRIPTION": [ "도누의 힘", "힘을 !M! 얻습니다.", @@ -54,10 +53,17 @@ "*판금 *갑옷을 !M! 얻습니다." ] }, - "expansioncontent:PrepareCrush": { + "expansioncontent:SuperPrepareCrush": { "NAME": "으깨기 준비", "DESCRIPTION": "방어도를 !B! 얻습니다. NL 다음 턴에 [E] [E] [E] 을 얻고 *슬라임 *으깬다를 얻습니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "방어도를 !B! 얻습니다. NL 다음 턴에 [E] [E] [E] 을 얻고 *슬라임 *으깬다 *+를 얻습니다. NL 소멸." + "UPGRADE_DESCRIPTION": "방어도를 !B! 얻습니다. NL 다음 턴에 [E] [E] [E] 을 얻고 *슬라임 *으깬다 *+를 얻습니다. 힘을 !M! 얻습니다. NL 소멸.", + "EXTENDED_DESCRIPTION": [ + "~슬라임...~ NL #r~으깬다!!!~" + ] + }, + "expansioncontent:SuperLivingWall": { + "NAME": "살아있는 벽", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 이번 턴에 공격한 대상에게 expansioncontent:점액을 !M! 부여합니다." }, "expansioncontent:StudyTheSpire": { "NAME": "첨탑 학습", @@ -74,8 +80,7 @@ }, "expansioncontent:DashGenerateEvil": { "NAME": "내면의 악", - "DESCRIPTION": "피해를 !D! 줍니다. NL 무작위 *보스 카드를 1장 얻습니다. 사용하기 전까지 그 카드의 비용은 0이 됩니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL 무작위 강화된 *보스 카드를 1장 얻습니다. 사용하기 전까지 그 카드의 비용은 0이 됩니다. NL 소멸." + "DESCRIPTION": "해로운 효과를 !DM! 부여할 때마다 적 전체에게 피해를 !D! 줍니다." }, "expansioncontent:KnowingSkullWish": { "NAME": "뭐든지 아는 해골", @@ -85,6 +90,122 @@ "NAME": "해독제", "DESCRIPTION": "보존. NL 중독을 !M! 잃습니다." }, + "expansioncontent:SuperGhostShield": { + "NAME": "유령 보호막", + "DESCRIPTION": "휘발성. [#e087a4]사후세계.[] NL [#e087a4]방어도를[] [#e087a4]!B![] [#e087a4]얻습니다.[] NL [#e087a4]흐릿함을[] [#e087a4]!M![] [#e087a4]얻습니다.[]", + "EXTENDED_DESCRIPTION": [ + "방어도를 !B! 얻습니다." + ] + }, + "expansioncontent:SuperGoopSpray": { + "NAME": "점액 분사", + "DESCRIPTION": "expansioncontent:점액을 !M! 부여하고 약화를 !DM! 부여합니다.", + "UPGRADE_DESCRIPTION": "적 전체에게 expansioncontent:점액을 !M! 부여하고 약화를 !DM! 부여합니다." + }, + "expansioncontent:ChargeUp": { + "NAME": "탄성 갑옷", + "DESCRIPTION": "보유한 해로운 효과를 각각 !M! 만큼 감소시킵니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "보유한 해로운 효과를 각각 !M! 만큼 감소시킵니다." + }, + "expansioncontent:SuperTaunt": { + "NAME": "도발", + "DESCRIPTION": "약화 와 취약을 !M! 부여합니다.", + "UPGRADE_DESCRIPTION": "적 전체에게 약화 와 취약을 !M! 부여합니다." + }, + "expansioncontent:Torchfire": { + "NAME": "들불", + "DESCRIPTION": "피해를 !D! 줍니다. NL 적이 보유한 해로운 효과 종류 하나당 반복합니다." + }, + + "expansioncontent:TakeFlight": { + "NAME": "재활성화", + "DESCRIPTION": "시전하지 않으면 expansioncontent:재생을 !M! 얻습니다. NL expansioncontent:시전하면 *재생을 !DM! 얻습니다." + }, + "expansioncontent:BeatOfDeath": { + "NAME": "죽음의 비트", + "DESCRIPTION": "카드를 사용할 때마다 적 전체에게 피해를 !M! 줍니다." + }, + "expansioncontent:SuperViciousMockery": { + "NAME": "악랄한 조롱", + "DESCRIPTION": "활력 을 !M! 얻습니다. NL 약화를 !DM! 부여합니다." + }, + "expansioncontent:SuperClobber": { + "NAME": "구타 타격", + "DESCRIPTION": "피해를 !D! 줍니다. NL 막히지 않은 피해만큼 방어도를 얻습니다." + }, + + "expansioncontent:SuperSomberShield": { + "NAME": "거무스름한 방패", + "DESCRIPTION": "collector:장작. NL 방어도를 !B! 얻습니다. NL 다음 턴에 이 카드로 소멸시킨 카드를 복사해 얻습니다." + }, + + "expansioncontent:SuperWhirlingFlame": { + "NAME": "회오리 불", + "DESCRIPTION": "적 전체에게 피해를 !D! 줍니다. NL 버린 카드 더미 카드를 1장 뽑을 카드 더미 맨 위에 놓습니다." + }, + "expansioncontent:Flail": { + "NAME": "손상", + "DESCRIPTION": "적 전체에게 피해를 !D! 만큼 !DM! 번 줍니다. NL 인공물을 !M! 얻습니다. NL 소멸.", + "EXTENDED_DESCRIPTION": [ + "손상된", + "손상" + ] + }, + "expansioncontent:SuperBloodthirst": { + "NAME": "피의 갈망", + "DESCRIPTION": "피해를 !D! 줍니다. NL 이 공격으로 적이 죽으면 무작위 포션을 얻고 이 카드를 소멸시킵니다." + }, + "expansioncontent:SuperBodyCrash": { + "NAME": "몸체 충돌", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 현재 방어도만큼 피해를 줍니다.", + "UPGRADE_DESCRIPTION": " NL (피해를 !D! 줍니다.)" + }, + "expansioncontent:SuperEtherStep": { + "NAME": "에테르 걸음", + "DESCRIPTION": "카드를 1장 소멸시킵니다. NL 카드를 !M! 장 뽑습니다. NL 피해를 !D! 줍니다.", + "UPGRADE_DESCRIPTION": "카드를 1장 소멸시킵니다. NL 카드를 !M! 장 뽑습니다. NL 피해를 !D! 줍니다." + }, + + "expansioncontent:Virus": { + "NAME": "바이러스", + "DESCRIPTION": "카드를 !M! 장까지 소멸시킵니다. 소멸시킨 카드당 *주력 *광선을 뽑을 카드 더미에 섞어 넣습니다. NL 소멸." + }, + + "expansioncontent:MajorBeam": { + "NAME": "주력 광선", + "DESCRIPTION": "피해를 !D! 줍니다. NL 카드를 !M! 장 뽑습니다.", + "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL 카드를 !M! 장 뽑습니다." + }, + + "expansioncontent:ManipulateTime": { + "NAME": "토막 생각", + "DESCRIPTION": "버린 카드 더미에서 카드를 1 장 선택해 뽑을 카드 더미 맨 위에 놓습니다. 사용하기 전까지 그 카드의 비용은 0이 됩니다.", + "UPGRADE_DESCRIPTION": "버린 카드 더미에서 카드를 1 장 선택해 뽑을 카드 더미 맨 위에 놓습니다. 이번 전투에서 그 카드의 비용은 0이 됩니다." + }, + "expansioncontent:Pandemonium": { + "NAME": "대혼란", + "DESCRIPTION": "내 턴 시작 시 버린 카드 더미에서 무작위 카드를 1장 사용합니다." + }, + "expansioncontent:Reverie": { + "NAME": "공상", + "DESCRIPTION": "내 턴 시작 시 버린 카드 더미 맨 위의 카드를 !M! 장 봅니다. 그 카드를 선택해 가져옵니다." + }, + "expansioncontent:ExploitVulnerability": { + "NAME": "도누 광선", + "DESCRIPTION": "적의 모든 방어도를 없앱니다. NL 피해를 !D! 만큼 2번 줍니다." + }, + "expansioncontent:PeekPages": { + "NAME": "염탐", + "DESCRIPTION": "뽑을 카드 더미에 통찰을 !M! 장 섞어 넣습니다. NL 소멸." + }, + "expansioncontent:BloodBarrage": { + "NAME": "피의 장벽", + "DESCRIPTION": "피해를 !D! 만큼 !M! 줍니다. NL 소멸." + }, + "expansioncontent:DoubleAct": { + "NAME": "합 맞추기", + "DESCRIPTION": "내 다음 턴 시작 시 카드를 뽑고 [E] 얻습니다. NL 소멸." + }, "expansioncontent:BloodySacrifice": { "NAME": "피로 물든 희생", "DESCRIPTION": "휘발성. NL 최대 체력의 !M! % 만큼 체력을 잃습니다. 의식을 1 얻습니다. NL 소멸.", diff --git a/src/main/resources/expansioncontentResources/localization/kor/KeywordStrings.json b/src/main/resources/expansioncontentResources/localization/kor/KeywordStrings.json index 3fc2e1e12..7894f98d0 100644 --- a/src/main/resources/expansioncontentResources/localization/kor/KeywordStrings.json +++ b/src/main/resources/expansioncontentResources/localization/kor/KeywordStrings.json @@ -64,5 +64,86 @@ "임시_체력만큼" ], "DESCRIPTION": "전투가 끝날 때까지 체력을 잃는 것을 막아줍니다." - } + }, + { + "PROPER_NAME": "Vibrancy", + "NAMES": [ + "vibrancy" + ], + "DESCRIPTION": "NOT USED DO NOT TL" + }, + { + "PROPER_NAME": "Opulence", + "NAMES": [ + "opulence" + ], + "DESCRIPTION": "NOT USED DO NOT TL" + }, + { + "PROPER_NAME": "재생", + "NAMES": [ + "재생", + "재생을", + "regen" + ], + "DESCRIPTION": "내 턴 종료 시 #y재생만큼 체력을 회복하고 재생을 #b1 감소시킵니다." + }, + { + "PROPER_NAME": "판금 갑옷", + "NAMES": [ + "판금", + "판금_갑옷", + "판금_갑옷을", + "판금_갑옷과", + "plated" + ], + "DESCRIPTION": "내 턴 종료 시 #y판금 #y갑옷만큼 방어도를 얻습니다. 막히지 않은 공격 피해를 받으면 #y판금 #y갑옷이 #b1 감소합니다." + }, + { + "PROPER_NAME": "장작", + "NAMES": [ + "pyre", + "장작", + "장작으로" + ], + "DESCRIPTION": "사용 시 에너지 소모 이외에 추가로 카드를 #b1 장 #y소멸시켜야하는 카드입니다." + }, + { + "PROPER_NAME": "파멸", + "NAMES": [ + "doom", + "doomed", + "파멸", + "파멸을", + "파멸의", + "파멸이" + ], + "DESCRIPTION": "파멸을 보유한 적의 턴 시작 시 체력을 잃습니다. 이후 적이 #y약화와 #y취약을 모두 가지고 있지 않다면 파멸을 제거합니다." + }, + + { + "NAMES": [ + "점액", + "점액을", + "점액의", + "점액만큼", + "goop", + "gooped" + ], + "PROPER_NAME": "점액", + "DESCRIPTION": "#y점액을 보유한 적 공격 시 모든 #y점액을 제거하고 #y점액당 피해량이 #b1 증가합니다. NL 모든 #y소비 효과를 발동시킵니다." + }, + + { + "PROPER_NAME": "시전", + "NAMES": [ + "chant", + "Chant", + "Chants", + "시전", + "시전하면", + "시전합니다", + "시전을" + ], + "DESCRIPTION": "손에 있는 동안 파워 카드를 사용하면 활성화되는 효과입니다."} ] diff --git a/src/main/resources/expansioncontentResources/localization/kor/PotionStrings.json b/src/main/resources/expansioncontentResources/localization/kor/PotionStrings.json index 442cdd244..7444f846c 100644 --- a/src/main/resources/expansioncontentResources/localization/kor/PotionStrings.json +++ b/src/main/resources/expansioncontentResources/localization/kor/PotionStrings.json @@ -2,9 +2,9 @@ "expansioncontent:BossPotion": { "NAME": "보스 포션", "DESCRIPTIONS": [ - "무작위 보스 카드 3가지 중 1장을 선택해 얻습니다. 이번 턴 동안 그 카드의 비용이 0이 됩니다.", + "무작위 보스 카드 3가지 중 1장을 선택해 얻습니다. 이번 턴에 그 카드의 비용이 0이 됩니다.", "무작위 보스 카드 3가지 중 1장을 선택해 선택한 카드를 #b", - " 장 얻습니다. 이번 턴 동안 그 카드의 비용이 0이 됩니다." + " 장 얻습니다. 이번 턴에 그 카드의 비용이 0이 됩니다." ] } } diff --git a/src/main/resources/expansioncontentResources/localization/kor/PowerStrings.json b/src/main/resources/expansioncontentResources/localization/kor/PowerStrings.json index b0b36f9ee..5a38a8f5b 100644 --- a/src/main/resources/expansioncontentResources/localization/kor/PowerStrings.json +++ b/src/main/resources/expansioncontentResources/localization/kor/PowerStrings.json @@ -93,6 +93,39 @@ " 만큼 #b6 번 줍니다." ] }, + "expansioncontent:BeatOfDeathP": { + "NAME": "죽음의 비트", + "DESCRIPTIONS": [ + "카드를 사용할 때마다 적 전체에게 피해를 #b", + " 줍니다." + ] + }, + "expansioncontent:PandemoniumPower":{ + "NAME": "대혼란", + "DESCRIPTIONS": [ + "내 턴 시작 시 버린 카드 더미에서 무작위 카드를 #b1 장 사용합니다.", + "내 턴 시작 시 버린 카드 더미에서 무작위 카드를 #b", + " 장 사용합니다." + ] + }, + "expansioncontent:EvilWithinPower":{ + "NAME": "내면의 악", + "DESCRIPTIONS": [ + "적 전체에게 피해를 #b", + " 주기까지 부여해야 할 해로운 효과가 #b", + " 남았습니다.", + " 남았습니다." + ] + }, + "expansioncontent:ReveriePower":{ + "NAME": "공상", + "DESCRIPTIONS": [ + "내 턴 시작 시 버린 카드 더미 위에서 카드를 봅니다. 그 카드를 가져옵니다.", + "내 턴 시작 시 버린 카드 더미 위에서 카드를 #b", + " 장 봅니다. 그 카드 중 1장 선택해 가져옵니다.", + "가져올 카드를 선택하십시오." + ] +}, "expansioncontent:VexVinciblePower": { "NAME": "천하무적", "DESCRIPTIONS": [ diff --git a/src/main/resources/expansioncontentResources/localization/spa/CardStrings.json b/src/main/resources/expansioncontentResources/localization/spa/CardStrings.json new file mode 100644 index 000000000..01c27257c --- /dev/null +++ b/src/main/resources/expansioncontentResources/localization/spa/CardStrings.json @@ -0,0 +1,210 @@ +{ + "expansioncontent:GuardianWhirl": { + "NAME": "Giro Guardián", + "DESCRIPTION": "Haz !D! de daño a TODOS los enemigos !M! veces. NL Si tienes al menos !DM! de Bloqueo, golpea !M! veces más.", + "EXTENDED_DESCRIPTION": [ + "Se requiere más Bloqueo." + ] + }, + "expansioncontent:Hexaburn": { + "NAME": "Hexaquema", + "DESCRIPTION": "Haz !D! de daño a un enemigo aleatorio !M! veces. NL Agota.", + "UPGRADE_DESCRIPTION": "Haz !D! de daño a un enemigo aleatorio !M! veces." + }, + "expansioncontent:InvincibleStrength": { + "NAME": "Invencible", + "DESCRIPTION": "Obtén !M! expansioncontent:Invencible. NL Si ya tenías expansioncontent:Invencible, dura un turno adicional." + }, + "expansioncontent:HyperBeam": { + "NAME": "Automa-Rayo", + "DESCRIPTION": "Haz !D! de daño a TODOS los enemigos. NL Coloca un *Vacío en la parte superior de tu pila de robo. NL Agota." + }, + "expansioncontent:LastStand": { + "NAME": "Última Resistencia", + "DESCRIPTION": "Elimina todas las desventajas. NL Obtén !M! de Fuerza." + }, + "expansioncontent:YouAreMine": { + "NAME": "¡ERES MÍO!", + "DESCRIPTION": "Aplica !M! de Débil, !M! de Vulnerable y !DM! de expansioncontent:Condena a TODOS los enemigos. NL Agota." + }, + "expansioncontent:AwakenDeath": { + "NAME": "Curiosidad", + "DESCRIPTION": "Cada vez que juegas un Poder, obtén !M! de Fuerza." + }, + "expansioncontent:Chronoboost": { + "NAME": "Crono-Impulso", + "DESCRIPTION": "Obtén !M! de Fuerza por cada 12 cartas que juegues." + }, + "expansioncontent:PolyBeam": { + "NAME": "Ráfaga Donu", + "DESCRIPTION": "Obtén !M! de Fuerza." + }, + "expansioncontent:DecaShield": { + "NAME": "Escudo Deca", + "DESCRIPTION": "Obtén !B! de Armadura de Placas." + }, + "expansioncontent:ShapePower": { + "NAME": "Bendición del Modelador", + "DESCRIPTION": "Obtén !M! de Fuerza y !DM! de *Armadura *de expansioncontent:placas.", + "EXTENDED_DESCRIPTION": [ + "Poder de Donu", + "Obtén !M! de Fuerza.", + "Escudo de Deca", + "Obtén !M! de Armadura de Placas." + ] + }, + "expansioncontent:SuperPrepareCrush": { + "NAME": "Preparar: Aplastamiento", + "DESCRIPTION": "En el siguiente turno, obtén *¡TRITURABABA!, [E] [E] [E] y !M! de Fuerza. NL Agota.", + "UPGRADE_DESCRIPTION": "En el siguiente turno, *¡TRITURABABA!+, [E] [E] [E] [E] y !M! de Fuerza. NL Agota.", + "EXTENDED_DESCRIPTION": [ + "~Baba...~ NL #r~¡APLASTAR!~" + ] + }, + "expansioncontent:SuperLivingWall": { + "NAME": "Muro Viviente", + "DESCRIPTION": "Obtén !B! de Bloqueo. NL Aplica !M! de expansioncontent:Baba a los atacantes este turno." + }, + "expansioncontent:StudyTheSpire": { + "NAME": "Estudiar la Aguja", + "DESCRIPTION": "Obtén una carta *Jefe aleatoria al inicio de tus siguientes !M! turnos. Cuesta 0.", + "UPGRADE_DESCRIPTION": "Obtén una carta *Jefe mejorada aleatoria al inicio de tus siguientes !M! turnos. Cuesta 0." + }, + "expansioncontent:QuickStudy": { + "NAME": "Estudio Rápido", + "DESCRIPTION": "Elige 1 de 3 cartas *Jefe para obtener. NL Cuesta 0 hasta que se juegue. NL Agota.", + "UPGRADE_DESCRIPTION": "Elige 1 de 3 cartas *Jefe mejoradas para obtener. NL Cuesta 0 hasta que se juegue. NL Agota.", + "EXTENDED_DESCRIPTION": [ + "Elige una carta de Jefe." + ] + }, + "expansioncontent:DashGenerateEvil": { + "NAME": "El Mal Interno", + "DESCRIPTION": "Cada vez que aplicas !DM! desventajas, haz !M! de daño a TODOS los enemigos." + }, + "expansioncontent:KnowingSkullWish": { + "NAME": "Calavera Sabia", + "DESCRIPTION": "Etérea. NL Gasta PV para *Desear *Almas, *Pociones o una carta *Incolora. NL Agota." + }, + "expansioncontent:Antidote": { + "NAME": "Antídoto", + "DESCRIPTION": "Retén. NL Pierde !M! de Veneno." + }, + "expansioncontent:SuperGhostShield": { + "NAME": "Escudo Fantasma", + "DESCRIPTION": "Etérea. [#e087a4]Ultratumba.[] NL [#e087a4]Obtén[] [#e087a4]!B![] [#e087a4]de[] [#e087a4]Bloqueo.[] NL [#e087a4]Obtén[] [#e087a4]!M![] [#e087a4]de[] [#e087a4]Desenfoque.[]", + "EXTENDED_DESCRIPTION": [ + "Obtén !B! de Bloqueo." + ] + }, + "expansioncontent:SuperGoopSpray": { + "NAME": "Rociada de Baba", + "DESCRIPTION": "Aplica !M! de expansioncontent:Baba y !DM! de Débil.", + "UPGRADE_DESCRIPTION": "Aplica !M! de expansioncontent:Baba y !DM! de Débil a TODOS los enemigos." + }, + "expansioncontent:ChargeUp": { + "NAME": "Placa Resistente", + "DESCRIPTION": "Reduce cada una de tus desventajas en !M!. NL Agota.", + "UPGRADE_DESCRIPTION": "Reduce cada una de tus desventajas en !M!." + }, + "expansioncontent:SuperTaunt": { + "NAME": "Provocación", + "DESCRIPTION": "Aplica !M! de Débil y de Vulnerable.", + "UPGRADE_DESCRIPTION": "Aplica !M! de Débil y de Vulnerable a TODOS los enemigos." + }, + "expansioncontent:Torchfire": { + "NAME": "Fuego Salvaje", + "DESCRIPTION": "Haz !D! de daño. NL Repítelo por cada desventaja única en el enemigo." + }, + "expansioncontent:TakeFlight": { + "NAME": "Revitalizar", + "DESCRIPTION": "Obtén !M! de expansioncontent:Regeneración. NL expansioncontent:Cantico Obtén !DM! *Regeneración en su lugar." + }, + "expansioncontent:BeatOfDeath": { + "NAME": "Latido de la Muerte", + "DESCRIPTION": "Cada vez que juegas una carta, haz !M! de daño a TODOS los enemigos." + }, + "expansioncontent:SuperViciousMockery": { + "NAME": "Mofa Cruel", + "DESCRIPTION": "Obtén !M! de Vigor. NL Aplica !DM! de Débil." + }, + "expansioncontent:SuperClobber": { + "NAME": "Golpe Demoledor", + "DESCRIPTION": "Haz !D! de daño. NL Obtén Bloqueo igual al daño sin bloquear infligido." + }, + "expansioncontent:SuperSomberShield": { + "NAME": "Escudo Melancólico", + "DESCRIPTION": "expansioncontent:Pira. NL Obtén !B! de Bloqueo. NL En el siguiente turno, obtén una copia de la carta *Agotada." + }, + "expansioncontent:SuperWhirlingFlame": { + "NAME": "Llama Giratoria", + "DESCRIPTION": "Haz !D! de daño a TODOS los enemigos. NL Coloca una carta de tu pila de descarte en la parte superior de tu pila de robo." + }, + "expansioncontent:Flail": { + "NAME": "Azote", + "DESCRIPTION": "Haz !D! de daño a TODOS los enemigos !DM! veces. NL Obtén !M! de Artefacto. NL Agota.", + "EXTENDED_DESCRIPTION": [ + "azotando", + "Azote" + ] + }, + "expansioncontent:SuperBloodthirst": { + "NAME": "Sed de Sangre", + "DESCRIPTION": "Haz !D! de daño. NL Si es Fatal, obtén una poción aleatoria y Agota esta carta." + }, + "expansioncontent:SuperBodyCrash": { + "NAME": "Impacto Corporal", + "DESCRIPTION": "Obtén !B! de Bloqueo. NL Haz daño igual a tu Bloqueo.", + "UPGRADE_DESCRIPTION": " NL (Haz !D! de daño.)" + }, + "expansioncontent:SuperEtherStep": { + "NAME": "Paso Etéreo", + "DESCRIPTION": "Agota 1 carta. NL Roba !M! carta. NL Haz !D! de daño.", + "UPGRADE_DESCRIPTION": "Agota 1 carta. NL Roba !M! cartas. NL Haz !D! de daño." + }, + "expansioncontent:Virus": { + "NAME": "Virus", + "DESCRIPTION": "Agota hasta !M! cartas, baraja un *Rayo *Mayor en tu pila de robo por cada carta agotada. NL Agota." + }, + "expansioncontent:MajorBeam": { + "NAME": "Rayo Mayor", + "DESCRIPTION": "Haz !D! de daño. NL Roba !M! carta.", + "UPGRADE_DESCRIPTION": "Haz !D! de daño. NL Roba !M! cartas." + }, + "expansioncontent:ManipulateTime": { + "NAME": "Reflexión Tardía", + "DESCRIPTION": "Coloca una carta de tu pila de descarte al fondo de tu pila de robo. Cuesta 0 hasta ser jugada.", + "UPGRADE_DESCRIPTION": "Coloca una carta de tu pila de descarte al fondo de tu pila de robo. Cuesta 0 durante este combate." + }, + "expansioncontent:Pandemonium": { + "NAME": "Pandemonio", + "DESCRIPTION": "Al inicio de tu turno, juega una carta aleatoria de tu pila de descarte." + }, + "expansioncontent:Reverie": { + "NAME": "Ensueño", + "DESCRIPTION": "Al inicio de tu turno, coloca una de las primeras !M! cartas de tu pila de descarte en tu mano." + }, + "expansioncontent:ExploitVulnerability": { + "NAME": "Rayo Donu", + "DESCRIPTION": "Elimina todo el Bloqueo del enemigo, luego obtén esa cantidad de Bloqueo. NL Haz !D! de daño dos veces." + }, + "expansioncontent:PeekPages": { + "NAME": "Hojear Páginas", + "DESCRIPTION": "Baraja !M! *Revelación en tu pila de robo. NL Agota." + }, + "expansioncontent:BloodBarrage": { + "NAME": "Barrido Sangriento", + "DESCRIPTION": "Haz !D! de daño !M! veces. NL Agota." + }, + "expansioncontent:DoubleAct": { + "NAME": "Doble Acto", + "DESCRIPTION": "Al inicio de tu próximo turno, roba cartas y gana [E] una vez adicional. NL Agota." + }, + "expansioncontent:BloodySacrifice": { + "NAME": "Sacrificio Sangriento", + "DESCRIPTION": "Etérea. NL Pierde !M! % de tu Vida Máxima. NL Obtén 1 Ritual. Agota.", + "EXTENDED_DESCRIPTION": [ + " NL (Pierde {amount} de Vida Máxima.)" + ] + } +} diff --git a/src/main/resources/expansioncontentResources/localization/spa/CharacterStrings.json b/src/main/resources/expansioncontentResources/localization/spa/CharacterStrings.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/src/main/resources/expansioncontentResources/localization/spa/CharacterStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/expansioncontentResources/localization/spa/DailyModStrings.json b/src/main/resources/expansioncontentResources/localization/spa/DailyModStrings.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/src/main/resources/expansioncontentResources/localization/spa/DailyModStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/expansioncontentResources/localization/spa/EventStrings.json b/src/main/resources/expansioncontentResources/localization/spa/EventStrings.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/src/main/resources/expansioncontentResources/localization/spa/EventStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/expansioncontentResources/localization/spa/KeywordStrings.json b/src/main/resources/expansioncontentResources/localization/spa/KeywordStrings.json new file mode 100644 index 000000000..775ccc91e --- /dev/null +++ b/src/main/resources/expansioncontentResources/localization/spa/KeywordStrings.json @@ -0,0 +1,111 @@ +[ + { + "PROPER_NAME": "Desenfoque", + "ID": "blur", + "NAMES": ["blur","desenfoque"], + "DESCRIPTION": "#yBloqueo no se elimina al inicio de tu turno." + }, + { + "PROPER_NAME": "Vibrancy", + "NAMES": ["vibrancy"], + "DESCRIPTION": "NOT USED DO NOT TL" + }, + { + "PROPER_NAME": "Opulence", + "NAMES": ["opulence"], + "DESCRIPTION": "NOT USED DO NOT TL" + }, + { + "PROPER_NAME": "Regeneración", + "NAMES": ["regen", "regeneración"], + "DESCRIPTION": "Al final de tu turno, recupera PV igual a tu #yRegeneración y reduce #yRegeneración en #b1 [REMOVE_SPACE]." + }, + { + "PROPER_NAME": "Armadura de placas", + "NAMES": ["plated","placas"], + "DESCRIPTION": "Al final de tu turno, gana Bloqueo igual a tu #yArmadura #yde #yplacas [REMOVE_SPACE]. Recibir daño sin bloqueo reduce la #yArmadura #yde #yplacas en #b1 [REMOVE_SPACE]." + }, + { + "PROPER_NAME": "Jefe", + "NAMES": ["boss", "jefe"], + "DESCRIPTION": "Solo puedes jugar #b1 carta de #yJefe por turno." + }, + { + "PROPER_NAME": "Eco", + "ID": "eco", + "NAMES": ["echo","eco"], + "DESCRIPTION": "Agrega una copia de una carta a tu mano; es #yEtérea y se #yExilia [REMOVE_SPACE]. NL Los ecos no pueden ser copiados por otros ecos." + }, + { + "PROPER_NAME": "Exhuma", + "ID": "exhume", + "NAMES": ["exhume","exhuma"], + "DESCRIPTION": "Coloca una carta de tu pila de exilio en tu mano." + }, + { + "PROPER_NAME": "Invencible", + "NAMES": ["invincible","invencible"], + "DESCRIPTION": "No puedes perder más de una cantidad específica de PV en un solo turno. NL Al final de cualquier ronda en la que Invencible haya evitado pérdida de PV, se elimina." + }, + { + "PROPER_NAME": "Reclama", + "NAMES": ["reclaim","reclama"], + "DESCRIPTION": "Coloca una carta de tu pila de exilio en tu pila de descarte." + }, + { + "NAMES": ["goop", "gooped", "baba", "babado","babeado"], + "PROPER_NAME": "Baba", + "DESCRIPTION": "El próximo ataque inflige #b1 de daño adicional por cada acumulación de #yBaba [REMOVE_SPACE], eliminando todas las acumulaciones y activando cualquier efecto de #yConsumir." + }, + { + "PROPER_NAME": "Encadenado", + "NAMES": ["shackled","encadenado"], + "DESCRIPTION": "Las criaturas Encadenadas pierden #yFuerza durante un turno." + }, + { + "PROPER_NAME": "PV temporales", + "ID": "pv_temp", + "NAMES": ["temp hp", + "temp_hp","pv temp","pv_temp"], + "DESCRIPTION": "Hasta el final del combate, previene el daño a tus PV." + }, + { + "PROPER_NAME": "Pira", + "NAMES": ["pyre","pira"], + "DESCRIPTION": "Requiere exiliar una carta en tu mano además de pagar su coste de energía." + }, + { + "PROPER_NAME": "Condena", + "NAMES": [ + "doom", + "doomed", + "condena", + "condenado" + ], + "DESCRIPTION": "Las criaturas Condenadas pierden PV al inicio de su turno; luego, Condena se elimina #bsalvo que la criatura esté #yAfligida (tenga tanto #yDébil como #yVulnerable [REMOVE_SPACE])." + }, + { + "NAMES": ["goop", "gooped", "baba", "babado"], + "PROPER_NAME": "Baba", + "DESCRIPTION": "El próximo ataque inflige #b1 de daño adicional por cada acumulación de #yBaba [REMOVE_SPACE], eliminando todas las acumulaciones y activando cualquier efecto de #yConsumir." + }, + { + "PROPER_NAME": "Restringido", + "NAMES": ["constricted","restringido"], + "DESCRIPTION": "Las criaturas con Restringido reciben daño al final de su turno." + }, + { + "PROPER_NAME": "Cántico", + "NAMES": ["chant", + "Chant", + "Chants","cantar","cantico","cantar","canticos"], + "DESCRIPTION": "Los efectos de Cántico en una carta se activan durante el juego si jugaste un Poder mientras estaba en tu mano." + }, + { + "PROPER_NAME": "Transformar", + "ID": "transform", + "NAMES": ["transform","transformar"], + "DESCRIPTION": "#yAgota una carta y reemplázala con otra diferente." + } +] + diff --git a/src/main/resources/expansioncontentResources/localization/spa/MonsterStrings.json b/src/main/resources/expansioncontentResources/localization/spa/MonsterStrings.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/src/main/resources/expansioncontentResources/localization/spa/MonsterStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/expansioncontentResources/localization/spa/OrbStrings.json b/src/main/resources/expansioncontentResources/localization/spa/OrbStrings.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/src/main/resources/expansioncontentResources/localization/spa/OrbStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/expansioncontentResources/localization/spa/PotionStrings.json b/src/main/resources/expansioncontentResources/localization/spa/PotionStrings.json new file mode 100644 index 000000000..7e68743c5 --- /dev/null +++ b/src/main/resources/expansioncontentResources/localization/spa/PotionStrings.json @@ -0,0 +1,10 @@ +{ + "expansioncontent:BossPotion": { + "NAME": "Poción de Jefe", + "DESCRIPTIONS": [ + "Elige #b1 de #b3 cartas de #yJefe aleatorias para agregar a tu mano. Cuesta #b0 este turno.", + "Elige #b1 de #b3 cartas de #yJefe aleatorias y agrega #b", + " copias a tu mano. Cuestan #b0 este turno." + ] + } +} diff --git a/src/main/resources/expansioncontentResources/localization/spa/PowerStrings.json b/src/main/resources/expansioncontentResources/localization/spa/PowerStrings.json new file mode 100644 index 000000000..dd42cda4f --- /dev/null +++ b/src/main/resources/expansioncontentResources/localization/spa/PowerStrings.json @@ -0,0 +1,140 @@ +{ + "expansioncontent:StudyTheSpirePower": { + "NAME": "Estudiar la Aguja", + "DESCRIPTIONS": [ + "Obtén una carta de #yJefe aleatoria al inicio del siguiente turno. NL Cuesta #b0 hasta que se juegue.", + "Obtén una carta de #yJefe aleatoria al inicio de los próximos #b", + " turnos. NL Cuestan #b0 hasta que se jueguen.", + "Obtén una carta de #yJefe #yMejorada aleatoria al inicio del siguiente turno. NL Cuesta #b0 hasta que se juegue.", + "Obtén una carta de #yJefe #yMejorada aleatoria al inicio de los próximos #b", + " turnos. NL Cuestan #b0 hasta que se jueguen." + ] + }, + "expansioncontent:AwakenedOnePower": { + "NAME": "Ritual Oscuro", + "DESCRIPTIONS": [ + "Obtiene #b", + " de #yFuerza si este enemigo no ataca en su turno." + ] + }, + "expansioncontent:AwakenDeathPower": { + "NAME": "Despertar", + "DESCRIPTIONS": [ + "Cuando fueras a morir, cura #b", + " PV y elimina este efecto." + ] + }, + "expansioncontent:ChronoBoostPower": { + "NAME": "Impulso Crono", + "DESCRIPTIONS": [ + "Después de jugar #b", + " cartas más, obtén #b", + " de #yFuerza [REMOVE_SPACE]." + ] + }, + "expansioncontent:ChronoBoostPlusPower": { + "NAME": "Impulso Crono+", + "DESCRIPTIONS": [ + "Después de jugar #b", + " cartas más, obtén #b", + " de #yFuerza [REMOVE_SPACE]." + ] + }, + "expansioncontent:DeEnergizedPower": { + "NAME": "Desenergizado", + "DESCRIPTIONS": [ + "Al inicio de tu próximo turno, pierde #b", + " [E] ." + ] + }, + "expansioncontent:PolyBeamAgainPower": { + "NAME": "Potencia", + "DESCRIPTIONS": [ + "#yRáfaga #yDonu se jugará al inicio de tu próximo turno.", + "#yRáfaga #yDonu se jugará al inicio de los próximos #b", + " turnos." + ] + }, + "expansioncontent:PolyBeamAgainPowerUpgraded": { + "NAME": "Potencia", + "DESCRIPTIONS": [ + "#yRáfaga #yDonu+ se jugará al inicio de tu próximo turno.", + "#yRáfaga #yDonu+ se jugará al inicio de los próximos #b", + " turnos." + ] + }, + "expansioncontent:AddCopyPower": { + "NAME": "Carta Retrasada", + "DESCRIPTIONS": [ + "Agrega ", + " a tu mano al inicio del próximo turno." + ] + }, + "expansioncontent:AddSameInstancePower": { + "NAME": "Carta Retrasada", + "DESCRIPTIONS": [ + "Agrega ", + " a tu mano al inicio del próximo turno." + ] + }, + "expansioncontent:NextTurnExhumePower": { + "NAME": "Exhumar Retrasado", + "DESCRIPTIONS": [ + "Exhuma ", + " al inicio del próximo turno." + ] + }, + "expansioncontent:PretendHexWheelPower": { + "NAME": "Hexaquemadura", + "DESCRIPTIONS": [ + "En #b", + " turnos, inflige #b", + "Al final de tu turno, inflige #b", + " de daño a un enemigo aleatorio #b6 veces." + ] + }, + "expansioncontent:BeatOfDeathP": { + "NAME": "Latido de la Muerte", + "DESCRIPTIONS": [ + "Cada vez que juegues una carta, inflige #b", + " de daño a TODOS los enemigos." + ] + }, + "expansioncontent:PandemoniumPower": { + "NAME": "Pandemonio", + "DESCRIPTIONS": [ + "Al inicio de tu turno, juega una carta aleatoria de tu pila de descarte.", + "Al inicio de tu turno, juega #b", + " cartas aleatorias de tu pila de descarte." + ] + }, + "expansioncontent:EvilWithinPower": { + "NAME": "El Mal Interior", + "DESCRIPTIONS": [ + "Inflige #b", + " de daño a TODOS los enemigos tras aplicar #b", + " desventajas más.", + " desventaja más." + ] + }, + "expansioncontent:ReveriePower": { + "NAME": "Ensueño", + "DESCRIPTIONS": [ + "Al inicio de tu turno, mira la carta superior de tu pila de descarte y agrégala a tu mano.", + "Al inicio de tu turno, mira las primeras #b", + " cartas de tu pila de descarte y elige una para agregar a tu mano.", + "Elige una carta para agregar a tu mano." + ] + }, + "expansioncontent:VexVinciblePower": { + "NAME": "Invencible", + "DESCRIPTIONS": [ + "Limita todo el daño y pérdida de PV a #b", + " por turno. Se elimina tras activarse.", + "Limita todo el daño y pérdida de PV a #b", + " por turno. Se elimina tras #b", + " activaciones." + ] + } +} + diff --git a/src/main/resources/expansioncontentResources/localization/spa/RelicStrings.json b/src/main/resources/expansioncontentResources/localization/spa/RelicStrings.json new file mode 100644 index 000000000..f3ae00b1b --- /dev/null +++ b/src/main/resources/expansioncontentResources/localization/spa/RelicStrings.json @@ -0,0 +1,9 @@ +{ + "expansioncontent:StudyCardRelic": { + "NAME": "Pequeño Sombrero Hongo", + "FLAVOR": "Quien controle el sombrero, controla la Aguja.", + "DESCRIPTIONS": [ + "Al inicio del combate, agrega una carta #yEstudiar #yla #yAguja a tu mano. Cuesta #b0 [REMOVE_SPACE]." + ] + } +} diff --git a/src/main/resources/expansioncontentResources/localization/spa/RunModStrings.json b/src/main/resources/expansioncontentResources/localization/spa/RunModStrings.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/src/main/resources/expansioncontentResources/localization/spa/RunModStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/expansioncontentResources/localization/spa/UIStrings.json b/src/main/resources/expansioncontentResources/localization/spa/UIStrings.json new file mode 100644 index 000000000..ac9a99d62 --- /dev/null +++ b/src/main/resources/expansioncontentResources/localization/spa/UIStrings.json @@ -0,0 +1,58 @@ +{ + "downfall:PropertiesMod": { + "TEXT": [ + "Propiedades aplicadas.", + "Propiedades adicionales: ", + "Propiedades adicionales para este turno: ", + " NL También para este turno: ", + ", ", + ".", + "#y", + "Eco", + "Injugable", + "Etérea", + "Retiene", + "Agota", + " ", + "NL ", + "Eco: " + ] + }, + "downfall:EtherealMod": { + "TEXT": [ + "Etérea. NL " + ] + }, + "downfall:ExhaustMod": { + "TEXT": [ + " NL Agota." + ] + }, + "downfall:InnateMod": { + "TEXT": [ + "Innata. NL " + ] + }, + "downfall:RetainCardMod": { + "TEXT": [ + "Retiene. NL " + ] + }, + "downfall:UnplayableMod": { + "TEXT": [ + "Injugable. NL ", + "Esta carta no puede jugarse.", + "Esta carta no puede jugarse este turno." + ] + }, + "expansioncontent:CannotUseBossCardMessage": { + "TEXT": [ + "¡Ya jugué una carta de Jefe este turno!" + ] + }, + "expansioncontent:BossCardTagName": { + "TEXT": [ + "Jefe" + ] + } +} diff --git a/src/main/resources/expansioncontentResources/localization/zhs/CardStrings.json b/src/main/resources/expansioncontentResources/localization/zhs/CardStrings.json index c49c935b6..44191e1e5 100644 --- a/src/main/resources/expansioncontentResources/localization/zhs/CardStrings.json +++ b/src/main/resources/expansioncontentResources/localization/zhs/CardStrings.json @@ -1,95 +1,217 @@ { "expansioncontent:GuardianWhirl": { "NAME": "守护者旋风", - "DESCRIPTION": "有10点 格挡 才能打出。 NL 对所有敌人造成 !D! 点伤害四次。 NL 消耗 。", + "DESCRIPTION": "对所有敌人造成 !D! 点伤害 !M! 次。 NL 若你有至少 !DM! 点 格挡 ,多造成 !M! 次伤害。", "EXTENDED_DESCRIPTION": [ - "我的格挡不够。" + "需要更多格挡。" ] }, "expansioncontent:Hexaburn": { "NAME": "幽灵地狱", - "DESCRIPTION": "!M! 回合后,随机对敌人造成 !D! 点伤害六次。" + "DESCRIPTION": "随机造成 !D! 点伤害 !M! 次。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "随机造成 !D! 点伤害 !M! 次。" }, "expansioncontent:InvincibleStrength": { "NAME": "坚不可摧", - "DESCRIPTION": "获得1层 expansioncontent:坚不可摧 。" + "DESCRIPTION": "获得 !M! 层 expansioncontent:坚不可摧 。 NL 若你已有本牌效果,打出本牌 expansioncontent:坚不可摧 再多持续1回合" }, "expansioncontent:HyperBeam": { "NAME": "超能射线", - "DESCRIPTION": "对所有敌人造成 !D! 点伤害。 NL 下回合失去 [E] 。 NL 消耗 。" + "DESCRIPTION": "对所有敌人造成 !D! 点伤害。 NL 将 1 张 *虚空 放入你的抽牌堆顶部。 NL 消耗 。" }, "expansioncontent:LastStand": { "NAME": "背水一战", - "DESCRIPTION": "失去所有负面效果。 NL 获得1点 力量 。 NL 若半血以下: NL 获得2点 力量 。", - "UPGRADE_DESCRIPTION": "失去所有负面效果。 NL 获得1点 力量 。 NL 若半血以下: NL 回复 !M! 点生命。 NL 获得2点 力量 。" + "DESCRIPTION": "移除所有负面效果。 NL 获得 !M! 层 力量 。" }, "expansioncontent:YouAreMine": { "NAME": "你是我的了!", - "DESCRIPTION": "移除所有敌人的 格挡 。 NL 给予所有敌人 !M! 层 虚弱 与 易伤 。 NL 消耗 。" + "DESCRIPTION": "给予所有敌人 !M! 层 虚弱 与 易伤 。 NL 给予所有敌人 !DM! 层 expansioncontent:魂劫 。 NL 消耗 。" }, "expansioncontent:AwakenDeath": { - "NAME": "觉醒", - "DESCRIPTION": "下次将死或战胜时, NL 回复 !M! 点生命。" + "NAME": "好奇", + "DESCRIPTION": "当你打出1张能力牌,获得 !M! 层 力量 。" }, "expansioncontent:Chronoboost": { "NAME": "时空加速", - "DESCRIPTION": "每打出12张牌, NL 获得2点 力量 。", - "UPGRADE_DESCRIPTION": "获得2点 力量 。 NL 每打出12张牌, NL 获得2点 力量 。" + "DESCRIPTION": "每打出12张牌,获得 !M! 层 力量 。" }, "expansioncontent:PolyBeam": { - "NAME": "甜圈爆破", - "DESCRIPTION": "获得 !M! 点 力量 。" + "NAME": "环能爆", + "DESCRIPTION": "获得 !M! 层 力量 。" }, "expansioncontent:DecaShield": { - "NAME": "八体护盾", + "NAME": "八面盾", "DESCRIPTION": "获得 !B! 层 *多层护甲 。" }, "expansioncontent:ShapePower": { "NAME": "先古塑形", - "DESCRIPTION": "选择获得 !M! 点 力量 , NL 或 !DM! 层 *多层护甲 。", + "DESCRIPTION": "获得 !M! 层 力量 和 !DM! 层 expansioncontent:多层护甲 。", "EXTENDED_DESCRIPTION": [ - "甜圈之力", - "获得 !M! 点 力量 。", - "八体护盾", + "甜圈能量", + "获得 !M! 层 力量", + "八体守护", "获得 !M! 层 *多层护甲 。" ] }, - "expansioncontent:PrepareCrush": { + "expansioncontent:SuperPrepareCrush": { "NAME": "准备:猛击", - "DESCRIPTION": "获得 !B! 点 格挡 。 NL 下回合获得 [E] [E] [E] , NL 与一张 *史莱姆猛击 。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "获得 !B! 点 格挡 。 NL 下回合获得 [E] [E] [E] , NL 与一张 *史莱姆猛击+ 。 NL 消耗 。" + "DESCRIPTION": "下回合开始时,将1张 *史莱姆猛击 加入手牌,并获得 [E] [E] [E] 和 !M! 层 力量 。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "下回合开始时,将1张 *史莱姆猛击+ 加入手牌,并获得 [E] [E] [E] [E] 和 !M! 层 力量 。 NL 消耗 。", + "EXTENDED_DESCRIPTION": [ + "~史莱姆……~ NL #r~撞击!!!~" + ] + }, + "expansioncontent:SuperLivingWall": { + "NAME": "黏液墙", + "DESCRIPTION": "获得 !B! 点 格挡 。 NL 本回合每受到一次攻击,都给予攻击者 !M! 层 expansioncontent:黏液 。" }, + "expansioncontent:StudyTheSpire": { "NAME": "研究尖塔", - "DESCRIPTION": "接下来 !M! 回合开始时, NL 随机获得1张 *首领 牌。 NL 其首次耗能为0。", - "UPGRADE_DESCRIPTION": "接下来 !M! 回合开始时, NL 随机获得1张 *首领 牌+。 NL 其首次耗能为0。" + "DESCRIPTION": "接下来 !M! 个回合开始时,获得 1 张随机 *首领 牌。 NL 其第 1 次打出为0耗能。", + "UPGRADE_DESCRIPTION": "接下来 !M! 个回合开始时,获得 1 张随机已 升级 的 *首领 牌。 NL 其第 1 次打出为0耗能。" }, "expansioncontent:QuickStudy": { "NAME": "快速学习", - "DESCRIPTION": "从三张随机 *首领 牌中选择获得一张。 NL 其首次耗能为0。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "从三张随机 *首领 牌+中选择获得一张。 NL 其首次耗能为0。 NL 消耗 。", + "DESCRIPTION": "从随机 3 张 *首领 牌选择 1 张获得之。 NL 该牌下 1次 打出为0耗能。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "从随机 3 张已 升级 *首领 牌选择 1 张获得之。 NL 该牌下 1次 打出为0耗能。 NL 消耗 。", "EXTENDED_DESCRIPTION": [ - "选择一张首领牌。" + "选择 1 张 首领 牌。" ] }, "expansioncontent:DashGenerateEvil": { "NAME": "恶灵附身", - "DESCRIPTION": "造成 !D! 点伤害。 NL 随机获得1张 *首领 牌。 NL 其首次耗能为0。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "造成 !D! 点伤害。 NL 随机获得1张 *首领 牌+。 NL 其首次耗能为0。 NL 消耗 。" + "DESCRIPTION": "每当你给予 !DM! 次负面效果,对所有敌人造成 !M! 点伤害。" }, "expansioncontent:KnowingSkullWish": { "NAME": "全知头骨", - "DESCRIPTION": "虚无 。 NL 支付生命以许愿灵魂、药水,或一张随机无色牌。 NL 消耗 。" + "DESCRIPTION": "虚无 。 NL 消耗生命 *许愿 以获得 *灵魂 , *药水 ,或 1 张 *无色 牌。 NL 消耗 。" }, "expansioncontent:Antidote": { "NAME": "解毒剂", - "DESCRIPTION": "保留 。 NL 失去 !M! 层 中毒 。" + "DESCRIPTION": "保留 。 NL 失去 !M! 层 *中毒 。" + }, + "expansioncontent:SuperGhostShield": { + "NAME": "幽灵护盾", + "DESCRIPTION": "虚无 。 [#e087a4]阴世 。[] NL [#e087a4]获得[] [#e087a4]!B![] [#e087a4]点格挡。[] NL [#e087a4]获得[] [#e087a4]!M![] [#e087a4]层残影 。[]", + "EXTENDED_DESCRIPTION": [ + "获得 !B! 点 格挡" + ] + }, + "expansioncontent:SuperGoopSpray": { + "NAME": "黏液喷射", + "DESCRIPTION": "给予 !M! 层 expansioncontent:黏液 与 !DM! 层 虚弱 。", + "UPGRADE_DESCRIPTION": "给予所有敌人 !M! 层 expansioncontent:黏液 与 !DM! 层 虚弱 。" + }, + "expansioncontent:ChargeUp": { + "NAME": "坚韧装甲", + "DESCRIPTION": "减少所有负面效果 !M! 层。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "减少所有负面效果 !M! 层。" + }, + "expansioncontent:SuperTaunt": { + "NAME": "嘲讽", + "DESCRIPTION": "给予 !M! 层 虚弱 与 易伤 。", + "UPGRADE_DESCRIPTION": "给予所有敌人 !M! 层 虚弱 与 易伤 。" + }, + "expansioncontent:Torchfire": { + "NAME": "燎原之焰", + "DESCRIPTION": "造成 !D! 点伤害。 NL 目标每有 1 种负面效果重复 1 次。" + }, + + "expansioncontent:TakeFlight": { + "NAME": "复苏", + "DESCRIPTION": "获得 !M! 层 expansioncontent:再生 。 NL expansioncontent:吟唱 :转而获得 !DM! 层 *再生 。" + }, + "expansioncontent:BeatOfDeath": { + "NAME": "死亡律动", + "DESCRIPTION": "每当你打出 1 张牌,对所有敌人造成 !M! 点伤害。" + }, + "expansioncontent:SuperViciousMockery": { + "NAME": "毒舌", + "DESCRIPTION": "获得 !M! 层 活力 。 NL 给予 !DM! 层 虚弱 。" + }, + "expansioncontent:SuperClobber": { + "NAME": "猛烈打击", + "DESCRIPTION": "造成 !D! 点伤害。 NL 获得未被 格挡 伤害点 格挡 。" + }, + + "expansioncontent:SuperSomberShield": { + "NAME": "阴沉护盾", + "DESCRIPTION": "expansioncontent:焰葬 。 NL 获得 !B! 点 格挡 。 NL 下回合, NL 获得所葬牌的复制品。" + }, + + "expansioncontent:SuperWhirlingFlame": { + "NAME": "回环之火", + "DESCRIPTION": "对所有敌人造成 !D! 点伤害。 NL 将 1 张牌从弃牌堆放入抽牌堆顶部。" + }, + "expansioncontent:Flail": { + "NAME": "乱击", + "DESCRIPTION": "对所有敌人造成 !D! 点伤害 !DM! 次。 NL 获得 !M! 层 人工制品 。 NL 消耗 。", + "EXTENDED_DESCRIPTION": [ + "狂乱", + "链枷" + ] + }, + "expansioncontent:SuperBloodthirst": { + "NAME": "嗜血", + "DESCRIPTION": "造成 !D! 点伤害。 NL 斩杀 时,获得 1 瓶随机药水并 消耗 。" + }, + "expansioncontent:SuperBodyCrash": { + "NAME": "全身猛撞", + "DESCRIPTION": "获得 !B! 点 格挡 。 NL 造成等同于你 格挡 值的伤害。", + "UPGRADE_DESCRIPTION": " NL (造成 !D! 点伤害。))" + }, + "expansioncontent:SuperEtherStep": { + "NAME": "太虚之跃", + "DESCRIPTION": "造成 !D! 点伤害。 NL 消耗 1 张牌。 NL 抽 !M! 张牌。", + "UPGRADE_DESCRIPTION": "造成 !D! 点伤害。 NL 消耗 1 张牌。 NL 抽 !M! 张牌。" + }, + + "expansioncontent:Virus": { + "NAME": "病毒", + "DESCRIPTION": "消耗 至多 !M! 张牌。 NL 将相同数量张 *微光射线 放入抽牌堆。 NL 消耗 。" + }, + + "expansioncontent:MajorBeam": { + "NAME": "微光射线", + "DESCRIPTION": "造成 !D! 点伤害。 NL 抽 !M! 张牌。", + "UPGRADE_DESCRIPTION": "造成 !D! 点伤害。 NL 抽 !M! 张牌。" + }, + + "expansioncontent:ManipulateTime": { + "NAME": "深思熟虑", + "DESCRIPTION": "将 1 张牌从你的弃牌堆放入抽牌堆底部。 NL 该牌下 1 次打出时耗能为 0 。", + "UPGRADE_DESCRIPTION": "将 1 张牌从你的弃牌堆放入抽牌堆底部。 NL 该牌在本场战斗中耗能为 0 。" + }, + "expansioncontent:Pandemonium": { + "NAME": "狂舞", + "DESCRIPTION": "回合开始时,打出弃牌堆中随机 1 张牌。" + }, + "expansioncontent:Reverie": { + "NAME": "幻象", + "DESCRIPTION": "回合开始时,从弃牌堆顶部 !M! 张牌选择 1 张加入手牌。" + }, + "expansioncontent:ExploitVulnerability": { + "NAME": "甜圈光束", + "DESCRIPTION": "造成 !D! 点伤害 2 次。 NL 在造成伤害之前移除敌人所有 格挡 并获得等同于被移除 格挡 的 格挡。" + }, + "expansioncontent:PeekPages": { + "NAME": "洞察篇章", + "DESCRIPTION": "将 !M! 张 *洞见 加入抽牌堆。 NL 消耗 。" + }, + "expansioncontent:BloodBarrage": { + "NAME": "血潮猛袭", + "DESCRIPTION": "造成 !D! 点伤害 !M! 次。 NL 消耗 。" + }, + "expansioncontent:DoubleAct": { + "NAME": "重奏", + "DESCRIPTION": "下回合开始时,再得到 1 个回合的抽牌和 [E] 。 NL 消耗 。" }, "expansioncontent:BloodySacrifice": { - "NAME": "染血牺牲", - "DESCRIPTION": "虚无 。 NL 失去 !M! % 最大生命点生命。 NL 获得1层 仪式 。 NL 消耗 。", + "NAME": "血祭", + "DESCRIPTION": "虚无 。 NL 失去最大生命值的 !M! % 。 NL 获得 1 层 *仪式 。 消耗 。", "EXTENDED_DESCRIPTION":[ - " NL (失去 {amount} 点)" + " NL (失去 {amount} 最大生命值。)" ] } } diff --git a/src/main/resources/expansioncontentResources/localization/zhs/KeywordStrings.json b/src/main/resources/expansioncontentResources/localization/zhs/KeywordStrings.json index a358bef45..c0a3ed29a 100644 --- a/src/main/resources/expansioncontentResources/localization/zhs/KeywordStrings.json +++ b/src/main/resources/expansioncontentResources/localization/zhs/KeywordStrings.json @@ -1,4 +1,42 @@ [ + { + "PROPER_NAME": "残影", + "ID": "blur", + "NAMES": [ + "残影", + "blur" + ], + "DESCRIPTION": "#y格挡 在回合结束时不被移除。" + }, + + + + + + + + + + + + + + + { + "PROPER_NAME": "再生", + "NAMES": [ + "再生" + ], + "DESCRIPTION": "回合开始时,回复相应生命,失去 1 层 #y再生 。" + }, + { + "PROPER_NAME": "多层护甲", + "NAMES": [ + "多层护甲", + "plated" + ], + "DESCRIPTION": "回合结束时,获得相应 #y格挡 。每受到未被格挡的伤害,失去 1 层 #y多层护甲 。" + }, { "PROPER_NAME": "首领", "NAMES": [ @@ -7,25 +45,41 @@ "DESCRIPTION": "每回合只能打出 #b1 张 #y首领 牌。" }, { - "PROPER_NAME": "坚不可摧", + "PROPER_NAME": "回响", + "ID": "回响", "NAMES": [ - "坚不可摧" + "回响" ], - "DESCRIPTION": "任意 #b1 回合内你最多失去 #b10 点生命。承伤达到上限后移除本效果。叠加时,额外生效 #b1 回合。" + "DESCRIPTION": "将 1 张牌的复制加入手牌,它有 #y虚无 和 #y消耗 。 NL #y回响 牌不能被 #y回响 。" }, { "PROPER_NAME": "发掘", + "ID": "发掘", "NAMES": [ "发掘" ], "DESCRIPTION": "将 #b1 张 #y消耗 堆的牌移回手牌。" }, + { + "PROPER_NAME": "坚不可摧", + "NAMES": [ + "坚不可摧" + ], + "DESCRIPTION": "任意 #b1 回合内你最多失去 #b10 点生命。承伤达到上限后移除本效果。叠加时,额外生效 #b1 回合。" + }, { "PROPER_NAME": "取回", "NAMES": [ "取回" ], "DESCRIPTION": "将 #b1 张 #y消耗 堆的牌移入弃牌堆。" + }, + { + "PROPER_NAME": "黏液", + "NAMES": [ + "黏液" + ], + "DESCRIPTION": "下 1 次攻击移除所有 #y黏液 ,造成相应额外伤害并触发 #y吞食粘液 效果。" }, { "PROPER_NAME": "镣铐", @@ -35,19 +89,53 @@ "DESCRIPTION": "带有 #y镣铐 的单位本回合失去 #y力量 。" }, { - "PROPER_NAME": "取", + "PROPER_NAME": "临时生命", + "ID": "临时生命", "NAMES": [ - "取" + "临时生命" + ], - "DESCRIPTION": "抽牌,但若抽牌堆无可抽之牌,不触发弃牌堆洗入抽牌堆效果。" + "DESCRIPTION": "视为生命值,但战斗结束后,失去所有临时生命。" }, { - "PROPER_NAME": "临时生命", + "PROPER_NAME": "焰葬", "NAMES": [ - "temp hp", - "temp_hp", - "临时生命" + "焰葬" ], - "DESCRIPTION": "视为生命值,但战斗结束后,失去所有临时生命。" - } + "DESCRIPTION": "除支付耗能外,还需要 消耗 1 张手牌。" + }, + { + "PROPER_NAME": "魂劫", + "NAMES": [ + "魂劫" + + ], + "DESCRIPTION": "拥有 #y魂劫 的敌人在其回合开始时失去相应生命,若其没有 #y折磨 (同时有 #y虚弱 与 #y易伤 。),则移除所有 #y魂劫 。" + }, + + + + + + + + + + + { + "PROPER_NAME": "吟唱", + "NAMES": [ + "吟唱" + + + ], + "DESCRIPTION": "当 #y吟唱 牌在手牌中,打出1张能力牌再打出 #y吟唱 牌触发 #y吟唱 效果。"}, + { + "PROPER_NAME": "转化", + "ID": "转化", + "NAMES": [ + "转化" + ], + "DESCRIPTION": "#消耗 1 张牌,用 1 张不同的牌替代之。" +} ] diff --git a/src/main/resources/expansioncontentResources/localization/zhs/PowerStrings.json b/src/main/resources/expansioncontentResources/localization/zhs/PowerStrings.json index cbb681b7a..62ee36060 100644 --- a/src/main/resources/expansioncontentResources/localization/zhs/PowerStrings.json +++ b/src/main/resources/expansioncontentResources/localization/zhs/PowerStrings.json @@ -92,6 +92,39 @@ "本回合结束时,随机对敌人造成 #b", " 点伤害 #b6 次。" ] + }, + "expansioncontent:BeatOfDeathP": { + "NAME": "死亡律动", + "DESCRIPTIONS": [ + "每当你打出 1 张牌,对所有敌人造成 #b", + " 点伤害。" + ] + }, + "expansioncontent:PandemoniumPower":{ + "NAME": "乱舞", + "DESCRIPTIONS": [ + "回合开始时,从弃牌堆随机选择 1 张牌打出。", + "回合开始时,从弃牌堆随机选择 #b", + " 张牌打出。" + ] + }, + "expansioncontent:EvilWithinPower":{ + "NAME": "恶灵附身", + "DESCRIPTIONS": [ + "对所有敌人造成 #b", + " 点伤害,在给予 #b", + " 次负面效果后。", + " 次负面效果后。" + ] + }, + "expansioncontent:ReveriePower":{ + "NAME": "幻象", + "DESCRIPTIONS": [ + "回合开始时,看弃牌堆顶部 1 张牌并将其加入手牌。", + "回合开始时,看弃牌堆顶部 #b", + " 张牌并选择 1 张加入手牌。", + "选择 1 张牌加入手牌" + ] }, "expansioncontent:VexVinciblePower": { "NAME": "坚不可摧", diff --git a/src/main/resources/expansioncontentResources/localization/zht/CardStrings.json b/src/main/resources/expansioncontentResources/localization/zht/CardStrings.json index 4a43f71b5..63dc13c33 100644 --- a/src/main/resources/expansioncontentResources/localization/zht/CardStrings.json +++ b/src/main/resources/expansioncontentResources/localization/zht/CardStrings.json @@ -1,88 +1,217 @@ { "expansioncontent:GuardianWhirl": { "NAME": "守護者旋風", - "DESCRIPTION": "有10點 格擋 才能打出。 NL 對所有敵人造成 !D! 點傷害四次。 NL 消耗 。", + "DESCRIPTION": "對所有敵人造成 !D! 點傷害 !M! 次。 NL 若你有至少 !DM! 點 格擋 ,多造成 !M! 次傷害。", "EXTENDED_DESCRIPTION": [ - "我的格擋不夠。" + "需要更多格擋。" ] }, "expansioncontent:Hexaburn": { "NAME": "幽靈地獄", - "DESCRIPTION": "!M! 回合後,隨機對敵人造成 !D! 點傷害六次。" + "DESCRIPTION": "隨機造成 !D! 點傷害 !M! 次。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "隨機造成 !D! 點傷害 !M! 次。" }, "expansioncontent:InvincibleStrength": { "NAME": "堅不可摧", - "DESCRIPTION": "獲得1層 expansioncontent:堅不可摧 。" + "DESCRIPTION": "獲得 !M! 層 expansioncontent:堅不可摧 。 NL 若你已有本牌效果,打出本牌 expansioncontent:堅不可摧 再多持續1回合" }, "expansioncontent:HyperBeam": { "NAME": "超能射線", - "DESCRIPTION": "對所有敵人造成 !D! 點傷害。 NL 下回合失去 [E] 。 NL 消耗 。" + "DESCRIPTION": "對所有敵人造成 !D! 點傷害。 NL 將 1 張 *虛空 放入你的抽牌堆頂部。 NL 消耗 。" }, "expansioncontent:LastStand": { "NAME": "背水一戰", - "DESCRIPTION": "失去所有負面效果。 NL 獲得1點 力量 。 NL 若半血以下: NL 獲得2點 力量 。", - "UPGRADE_DESCRIPTION": "失去所有負面效果。 NL 獲得1點 力量 。 NL 若半血以下: NL 回復 !M! 點生命。 NL 獲得2點 力量 。" + "DESCRIPTION": "移除所有負面效果。 NL 獲得 !M! 層 力量 。" }, "expansioncontent:YouAreMine": { "NAME": "你是我的了!", - "DESCRIPTION": "移除所有敵人的 格擋 。 NL 給予所有敵人 !M! 層 虛弱 與 易傷 。 NL 消耗 。" + "DESCRIPTION": "給予所有敵人 !M! 層 虛弱 與 易傷 。 NL 給與所有敵人 !DM! 層 expansioncontent:魂劫 。 NL 消耗 。" }, "expansioncontent:AwakenDeath": { - "NAME": "覺醒", - "DESCRIPTION": "下次將死或戰勝時, NL 回復 !M! 點生命。" + "NAME": "好奇", + "DESCRIPTION": "當你打出1張能力牌,獲得 !M! 層 力量 。" }, "expansioncontent:Chronoboost": { "NAME": "時空加速", - "DESCRIPTION": "每打出12張牌, NL 獲得2點 力量 。", - "UPGRADE_DESCRIPTION": "獲得2點 力量 。 NL 每打出12張牌, NL 獲得2點 力量 。" + "DESCRIPTION": "每打出12張牌,獲得 !M! 層 力量 。" }, "expansioncontent:PolyBeam": { - "NAME": "甜圈爆破", - "DESCRIPTION": "獲得 !M! 點 力量 。" + "NAME": "環能爆", + "DESCRIPTION": "獲得 !M! 層 力量 。" }, "expansioncontent:DecaShield": { - "NAME": "八體護盾", + "NAME": "八面盾", "DESCRIPTION": "獲得 !B! 層 *多層護甲 。" }, "expansioncontent:ShapePower": { "NAME": "先古塑形", - "DESCRIPTION": "獲得 !M! 點 力量 , NL 或獲得 !DM! 層 *多層護甲 。", + "DESCRIPTION": "獲得 !M! 層 力量 和 !DM! 層 expansioncontent:多層護甲 。", "EXTENDED_DESCRIPTION": [ - "甜圈之力", - "獲得 !M! 點 力量 。", - "八體護盾", + "甜圈能量", + "獲得 !M! 層 力量", + "八體守護", "獲得 !M! 層 *多層護甲 。" ] }, - "expansioncontent:PrepareCrush": { + "expansioncontent:SuperPrepareCrush": { "NAME": "準備:猛擊", - "DESCRIPTION": "獲得 !B! 點 格擋 。 NL 下回合獲得 [E] [E] [E] 與一張 *史萊姆猛擊 。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "獲得 !B! 點 格擋 。 NL 下回合獲得 [E] [E] [E] 與一張 *史萊姆猛擊+ 。 NL 消耗 。" + "DESCRIPTION": "下回合開始時,將1張 *史萊姆猛擊 加入手牌,並獲得 [E] [E] [E] 和 !M! 層 力量 。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "下回合開始時,將1張 *史萊姆猛擊+ 加入手牌,並獲得 [E] [E] [E] [E] 和 !M! 層 力量 。 NL 消耗 。", + "EXTENDED_DESCRIPTION": [ + "~史萊姆……~ NL #r~撞擊!!!~" + ] + }, + "expansioncontent:SuperLivingWall": { + "NAME": "黏液墻", + "DESCRIPTION": "獲得 !B! 點 格擋 。 NL 本回合每受到一次攻擊,都給予攻擊者 !M! 層 expansioncontent:黏液 。" }, + "expansioncontent:StudyTheSpire": { "NAME": "研究尖塔", - "DESCRIPTION": "接下來 !M! 回合開始時, NL 隨機獲得1張 *首領 牌。 NL 其首次耗能為0。", - "UPGRADE_DESCRIPTION": "接下來 !M! 回合開始時, NL 隨機獲得1張 *首領 牌+。 NL 其首次耗能為0。" + "DESCRIPTION": "接下來 !M! 個回合開始時,獲得 1 張隨機 *首領 牌。 NL 其第1次打出為0耗能。", + "UPGRADE_DESCRIPTION": "接下來 !M! 個回合開始時,獲得 1 張隨機已 升級 的 *首領 牌。 NL 其第1次打出為0耗能。" }, "expansioncontent:QuickStudy": { "NAME": "快速學習", - "DESCRIPTION": "從三張隨機 *首領 牌中選擇獲得一張。 NL 其首次耗能為0。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "從三張隨機 *首領 牌+中選擇獲得一張。 NL 其首次耗能為0。 NL 消耗 。", + "DESCRIPTION": "從 3 張 *首領 牌選擇 1 張獲得之。 NL 該牌下 1次 打出為0耗能。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "從 3 張已 升級 的 *首領 牌選擇 1 張獲得之。 NL 該牌下 1次 打出為0耗能。 NL 消耗 。", "EXTENDED_DESCRIPTION": [ - "選擇一張首領牌。" + "選擇 1 張 首領 牌。" ] }, "expansioncontent:DashGenerateEvil": { "NAME": "惡靈附身", - "DESCRIPTION": "造成 !D! 點傷害。 NL 隨機獲得1張 *首領 牌。 NL 其首次耗能為0。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "造成 !D! 點傷害。 NL 隨機獲得1張 *首領 牌+。 NL 其首次耗能為0。 NL 消耗 。" + "DESCRIPTION": "每當你給予 !DM! 次負面效果,對所有敵人造成 !M! 點傷害。" }, "expansioncontent:KnowingSkullWish": { "NAME": "全知頭骨", - "DESCRIPTION": "虛無 。 NL 支付生命以許願靈魂,成功或來點喝的。 NL 消耗 。" + "DESCRIPTION": "虛無 。 NL 消耗生命 *許願 以獲得 *靈魂 , *藥水 ,或 1 張 *無色 牌。 NL 消耗 。" }, "expansioncontent:Antidote": { "NAME": "解毒劑", - "DESCRIPTION": "失去所有 中毒 。" + "DESCRIPTION": "保留 。 NL 失去 !M! 層 *中毒 。" + }, + "expansioncontent:SuperGhostShield": { + "NAME": "幽靈護盾", + "DESCRIPTION": "虛無 。 [#e087a4]陰世 。[] NL [#e087a4]獲得[] [#e087a4]!B![] [#e087a4]點格擋。[] NL [#e087a4]獲得[] [#e087a4]!M![] [#e087a4]層殘影 。[]", + "EXTENDED_DESCRIPTION": [ + "獲得 !B! 點 格擋" + ] + }, + "expansioncontent:SuperGoopSpray": { + "NAME": "黏液噴射", + "DESCRIPTION": "給予 !M! 層 expansioncontent:黏液 與 !DM! 層 虛弱 。", + "UPGRADE_DESCRIPTION": "給予所有敵人 !M! 層 expansioncontent:黏液 與 !DM! 層 虛弱 。" + }, + "expansioncontent:ChargeUp": { + "NAME": "堅韌裝甲", + "DESCRIPTION": "減少所有負面效果 !M! 層。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "減少所有負面效果 !M! 層。" + }, + "expansioncontent:SuperTaunt": { + "NAME": "嘲諷", + "DESCRIPTION": "給予 !M! 層 虛弱 與 易傷 。", + "UPGRADE_DESCRIPTION": "給予所有敵人 !M! 層 虛弱 與 易傷 。" + }, + "expansioncontent:Torchfire": { + "NAME": "燎原之焰", + "DESCRIPTION": "造成 !D! 點傷害。 NL 目標每有 1 種負面效果重復 1 次。" + }, + + "expansioncontent:TakeFlight": { + "NAME": "復蘇", + "DESCRIPTION": "獲得 !M! 層 expansioncontent:再生 。 NL expansioncontent:吟唱 :轉而獲得 !DM! 層 *再生 。" + }, + "expansioncontent:BeatOfDeath": { + "NAME": "死亡律動", + "DESCRIPTION": "每當你打出 1 張牌,對所有敵人造成 !M! 點傷害。" + }, + "expansioncontent:SuperViciousMockery": { + "NAME": "毒舌", + "DESCRIPTION": "獲得 !M! 層 活力 。 NL 給予 !DM! 層 虛弱 。" + }, + "expansioncontent:SuperClobber": { + "NAME": "猛烈打擊", + "DESCRIPTION": "造成 !D! 點傷害。 NL 獲得未被 格擋 傷害點 格擋 。" + }, + + "expansioncontent:SuperSomberShield": { + "NAME": "陰沈護盾", + "DESCRIPTION": "expansioncontent:焰葬 。 NL 獲得 !B! 點 格擋 。 NL 下回合, NL 獲得所葬牌的復製品。" + }, + + "expansioncontent:SuperWhirlingFlame": { + "NAME": "回環之火", + "DESCRIPTION": "對所有敵人造成 !D! 點傷害。 NL 將 1 張牌從棄牌堆放入抽牌堆頂部。" + }, + "expansioncontent:Flail": { + "NAME": "亂擊", + "DESCRIPTION": "對所有敵人造成 !D! 點傷害 !DM! 次。 NL 獲得 !M! 層 人工製品 。 NL 消耗 。", + "EXTENDED_DESCRIPTION": [ + "狂亂", + "鏈枷" + ] + }, + "expansioncontent:SuperBloodthirst": { + "NAME": "嗜血", + "DESCRIPTION": "造成 !D! 點傷害。 NL 斬殺 時,獲得 1 瓶隨機藥水並 消耗 。" + }, + "expansioncontent:SuperBodyCrash": { + "NAME": "全身猛撞", + "DESCRIPTION": "獲得 !B! 點 格擋 。 NL 造成等同於你 格擋 值的傷害。", + "UPGRADE_DESCRIPTION": " NL (造成 !D! 點傷害。))" + }, + "expansioncontent:SuperEtherStep": { + "NAME": "太虛之躍", + "DESCRIPTION": "造成 !D! 點傷害。 NL 消耗 1 張牌。 NL 抽 !M! 張牌。", + "UPGRADE_DESCRIPTION": "造成 !D! 點傷害。 NL 消耗 1 張牌。 NL 抽 !M! 張牌。" + }, + + "expansioncontent:Virus": { + "NAME": "病毒", + "DESCRIPTION": "消耗 至多 !M! 張牌。 NL 將相同數量張 *微光射線 放入抽牌堆。 NL 消耗 。" + }, + + "expansioncontent:MajorBeam": { + "NAME": "微光射線", + "DESCRIPTION": "造成 !D! 點傷害。 NL 抽 !M! 張牌。", + "UPGRADE_DESCRIPTION": "造成 !D! 點傷害。 NL 抽 !M! 張牌。" + }, + + "expansioncontent:ManipulateTime": { + "NAME": "深思熟慮", + "DESCRIPTION": "將 1 張牌從你的棄牌堆放入抽牌堆底部。 NL 該牌下 1 次打出時耗能為 0 。", + "UPGRADE_DESCRIPTION": "將 1 張牌從你的棄牌堆放入抽牌堆底部。 NL 該牌在本場戰鬥中耗能為 0 。" + }, + "expansioncontent:Pandemonium": { + "NAME": "狂舞", + "DESCRIPTION": "回合開始時,打出棄牌堆中隨機 1 張牌。" + }, + "expansioncontent:Reverie": { + "NAME": "幻象", + "DESCRIPTION": "回合開始時,從棄牌堆頂部 !M! 張牌選擇 1 張加入手牌。" + }, + "expansioncontent:ExploitVulnerability": { + "NAME": "甜圈光束", + "DESCRIPTION": "造成 !D! 點傷害 2 次。 NL 在造成傷害之前移除敵人所有 格擋 並獲得等同於被移除 格擋 的 格擋。" + }, + "expansioncontent:PeekPages": { + "NAME": "洞察篇章", + "DESCRIPTION": "將 !M! 張 *洞見 加入抽牌堆。 NL 消耗 。" + }, + "expansioncontent:BloodBarrage": { + "NAME": "血潮猛襲", + "DESCRIPTION": "造成 !D! 點傷害 !M! 次。 NL 消耗 。" + }, + "expansioncontent:DoubleAct": { + "NAME": "重奏", + "DESCRIPTION": "下回合開始時,再得到 1 個回合的抽牌和 [E] 。 NL 消耗 。" + }, + "expansioncontent:BloodySacrifice": { + "NAME": "血祭", + "DESCRIPTION": "虛無 。 NL 失去最大生命值的 !M! % 。 NL 獲得 1 層 *儀式 。 消耗 。", + "EXTENDED_DESCRIPTION":[ + " NL (失去 {amount} 最大生命值。)" + ] } } diff --git a/src/main/resources/expansioncontentResources/localization/zht/KeywordStrings.json b/src/main/resources/expansioncontentResources/localization/zht/KeywordStrings.json index 3f580feb8..c0a3ed29a 100644 --- a/src/main/resources/expansioncontentResources/localization/zht/KeywordStrings.json +++ b/src/main/resources/expansioncontentResources/localization/zht/KeywordStrings.json @@ -1,37 +1,141 @@ [ { - "PROPER_NAME": "首領", + "PROPER_NAME": "残影", + "ID": "blur", "NAMES": [ - "首領" + "残影", + "blur" ], - "DESCRIPTION": "每回合只能打出 #b1 張 #y首領 牌。" + "DESCRIPTION": "#y格挡 在回合结束时不被移除。" }, + + + + + + + + + + + + + + { - "PROPER_NAME": "堅不可摧", + "PROPER_NAME": "再生", "NAMES": [ - "堅不可摧" + "再生" ], - "DESCRIPTION": "任意 #b1 回合內你最多失去 #b10 點生命。承傷達到上限後移除本效果。疊加時,額外生效 #b1 回合。" + "DESCRIPTION": "回合开始时,回复相应生命,失去 1 层 #y再生 。" }, { - "PROPER_NAME": "發掘", + "PROPER_NAME": "多层护甲", "NAMES": [ - "發掘" + "多层护甲", + "plated" ], - "DESCRIPTION": "將 #b1 張 #y消耗 堆的牌移回手牌。" + "DESCRIPTION": "回合结束时,获得相应 #y格挡 。每受到未被格挡的伤害,失去 1 层 #y多层护甲 。" + }, + { + "PROPER_NAME": "首领", + "NAMES": [ + "首领" + ], + "DESCRIPTION": "每回合只能打出 #b1 张 #y首领 牌。" + }, + { + "PROPER_NAME": "回响", + "ID": "回响", + "NAMES": [ + "回响" + ], + "DESCRIPTION": "将 1 张牌的复制加入手牌,它有 #y虚无 和 #y消耗 。 NL #y回响 牌不能被 #y回响 。" + }, + { + "PROPER_NAME": "发掘", + "ID": "发掘", + "NAMES": [ + "发掘" + ], + "DESCRIPTION": "将 #b1 张 #y消耗 堆的牌移回手牌。" + }, + { + "PROPER_NAME": "坚不可摧", + "NAMES": [ + "坚不可摧" + ], + "DESCRIPTION": "任意 #b1 回合内你最多失去 #b10 点生命。承伤达到上限后移除本效果。叠加时,额外生效 #b1 回合。" }, { "PROPER_NAME": "取回", "NAMES": [ "取回" ], - "DESCRIPTION": "將 #b1 張 #y消耗 堆的牌移入棄牌堆。" + "DESCRIPTION": "将 #b1 张 #y消耗 堆的牌移入弃牌堆。" + }, + { + "PROPER_NAME": "黏液", + "NAMES": [ + "黏液" + ], + "DESCRIPTION": "下 1 次攻击移除所有 #y黏液 ,造成相应额外伤害并触发 #y吞食粘液 效果。" }, { - "PROPER_NAME": "鐐銬", + "PROPER_NAME": "镣铐", + "NAMES": [ + "镣铐" + ], + "DESCRIPTION": "带有 #y镣铐 的单位本回合失去 #y力量 。" + }, + { + "PROPER_NAME": "临时生命", + "ID": "临时生命", + "NAMES": [ + "临时生命" + + ], + "DESCRIPTION": "视为生命值,但战斗结束后,失去所有临时生命。" + }, + { + "PROPER_NAME": "焰葬", + "NAMES": [ + "焰葬" + ], + "DESCRIPTION": "除支付耗能外,还需要 消耗 1 张手牌。" + }, + { + "PROPER_NAME": "魂劫", + "NAMES": [ + "魂劫" + + ], + "DESCRIPTION": "拥有 #y魂劫 的敌人在其回合开始时失去相应生命,若其没有 #y折磨 (同时有 #y虚弱 与 #y易伤 。),则移除所有 #y魂劫 。" + }, + + + + + + + + + + + { + "PROPER_NAME": "吟唱", "NAMES": [ - "鐐銬" + "吟唱" + + ], - "DESCRIPTION": "帶有 #y鐐銬 的單位本回合失去 #y力量 。" - } + "DESCRIPTION": "当 #y吟唱 牌在手牌中,打出1张能力牌再打出 #y吟唱 牌触发 #y吟唱 效果。"}, + { + "PROPER_NAME": "转化", + "ID": "转化", + "NAMES": [ + "转化" + ], + "DESCRIPTION": "#消耗 1 张牌,用 1 张不同的牌替代之。" +} ] diff --git a/src/main/resources/expansioncontentResources/localization/zht/PowerStrings.json b/src/main/resources/expansioncontentResources/localization/zht/PowerStrings.json index 2e27866f3..a0ba40691 100644 --- a/src/main/resources/expansioncontentResources/localization/zht/PowerStrings.json +++ b/src/main/resources/expansioncontentResources/localization/zht/PowerStrings.json @@ -27,8 +27,8 @@ "expansioncontent:ChronoBoostPower": { "NAME": "時間加速", "DESCRIPTIONS": [ - "每當你打出 #b", - " 張牌時,獲得 #b", + "再打出 #b", + " 張牌後,獲得 #b", " 點 #y力量 。" ] }, @@ -92,6 +92,39 @@ "本回合結束時,隨機對敵人造成 #b", " 點傷害 #b6 次。" ] + }, + "expansioncontent:BeatOfDeathP": { + "NAME": "死亡律動", + "DESCRIPTIONS": [ + "每當你打出 1 張牌,對所有敵人造成 #b", + " 點傷害。" + ] + }, + "expansioncontent:PandemoniumPower":{ + "NAME": "亂舞", + "DESCRIPTIONS": [ + "回合開始時,從棄牌堆隨機選擇 1 張牌打出。", + "回合開始時,從棄牌堆隨機選擇 #b", + " 張牌打出。" + ] + }, + "expansioncontent:EvilWithinPower":{ + "NAME": "惡靈附身", + "DESCRIPTIONS": [ + "對所有敵人造成 #b", + " 點傷害,在給予 #b", + " 次負面效果後。", + " 次負面效果後。" + ] + }, + "expansioncontent:ReveriePower":{ + "NAME": "幻象", + "DESCRIPTIONS": [ + "回合開始時,看棄牌堆頂部 1 張牌並將其加入手牌。", + "回合開始時,看棄牌堆頂部 #b", + " 張牌並選擇 1 張加入手牌。", + "選擇 1 張牌加入手牌" + ] }, "expansioncontent:VexVinciblePower": { "NAME": "堅不可摧", diff --git a/src/main/resources/gremlinResources/localization/eng/CardStrings.json b/src/main/resources/gremlinResources/localization/eng/CardStrings.json index 923ff8bd4..784c09fc7 100644 --- a/src/main/resources/gremlinResources/localization/eng/CardStrings.json +++ b/src/main/resources/gremlinResources/localization/eng/CardStrings.json @@ -6,7 +6,7 @@ "Gremlin:ArmsTheft": { "NAME": "Arms Theft", - "DESCRIPTION": "gremlin:Steal !M! Strength. NL Exhaust." + "DESCRIPTION": "Apply !M! Weak. NL gremlin:Steal !M! Strength. NL Exhaust." }, "Gremlin:Astound": { @@ -43,7 +43,7 @@ "Gremlin:BurlyBlow": { "NAME": "Burly Blow", - "DESCRIPTION": "Deal !D! damage. Repeat for each stack of Weak." + "DESCRIPTION": "Deal !D! damage. NL Repeat for each stack of Weak." }, "Gremlin:CatScratch": { @@ -64,8 +64,7 @@ "Gremlin:CounterStrike": { "NAME": "Counter Strike", - "DESCRIPTION": "Deal !D! damage. If the enemy intends to attack, gain !M! Wards.", - "UPGRADE_DESCRIPTION": "Deal !D! damage. If the enemy intends to attack, gain !M! Upgraded Wards." + "DESCRIPTION": "Deal !D! damage. NL If the enemy intends to attack, trigger your current Gremlin's Bonus !M! times." }, "Gremlin:CowerChoice": { @@ -103,12 +102,12 @@ "Gremlin:EdibleArmor": { "NAME": "Edible Armor", - "DESCRIPTION": "Convert your Block into expansioncontent:Temp_HP." + "DESCRIPTION": "Convert your Block into expansioncontent:Temp_HP. NL Exhaust." }, "Gremlin:Encore": { "NAME": "Encore", - "DESCRIPTION": "Gain 3 gremlin:Wiz. NL Whenever you consume gremlin:Wiz, deal !M! damage to ALL enemies." + "DESCRIPTION": "Gain 3 gremlin:Wiz. NL gremlin:Wiz deals !M! more damage." }, "Gremlin:Enthusiasm": { @@ -123,7 +122,7 @@ "Gremlin:Exacerbate": { "NAME": "Exacerbate", - "DESCRIPTION": "Deal !D! damage. gremlin:Cripple the enemy. NL Exhaust." + "DESCRIPTION": "Deal !D! damage. NL Whenever you apply Weak to this enemy, they lose !M! HP. NL Exhaust." }, "Gremlin:FairyDust": { @@ -192,7 +191,8 @@ "Gremlin:GremlinArms": { "NAME": "Gremlin Arms", - "DESCRIPTION": "Gain a random assortment of !M! Shivs and *Wards." + "DESCRIPTION": "Trigger your current Gremlin's Bonus, then gremlin:Swap to a living Gremlin of your choice.", + "UPGRADE_DESCRIPTION": "Trigger your current Gremlin's Bonus twice, then gremlin:Swap to a living Gremlin of your choice." }, "Gremlin:GremlinMeal": { @@ -216,7 +216,7 @@ "Gremlin:GremlinToss": { "NAME": "Gremlin Toss", - "DESCRIPTION": "Deal damage equal to your current Block and *Temp *HP.", + "DESCRIPTION": "Gain !M! expansioncontent:Temp_HP. NL Deal damage equal to your current Block and *Temp *HP.", "UPGRADE_DESCRIPTION": "Gain !M! expansioncontent:Temp_HP. NL Deal damage equal to your current Block and *Temp *HP.", "EXTENDED_DESCRIPTION": [" NL (Deals !D! damage.)"] }, @@ -254,7 +254,7 @@ "Gremlin:Kablamo": { "NAME": "Kablamo!", - "DESCRIPTION": "Deal !D! damage to ALL enemies. NL This attack does not consume gremlin:Wiz." + "DESCRIPTION": "Deal !D! damage to ALL enemies twice. NL This attack does not consume gremlin:Wiz." }, "Gremlin:LeaderChoice": { @@ -308,7 +308,7 @@ "Gremlin:Pickpocket": { "NAME": "Pickpocket", - "DESCRIPTION": "gremlin:Steal all Artifact. NL Deal !D! damage. NL Exhaust." + "DESCRIPTION": "Deal !D! damage. NL Gain !M! Gold. NL Exhaust." }, "Gremlin:PinNeedle": { @@ -340,7 +340,7 @@ "Gremlin:Pretaliation": { "NAME": "Pretaliation", - "DESCRIPTION": "Deal !D! damage if the enemy intends to attack. NL Deal !blamage! damage otherwise." + "DESCRIPTION": "Deal !D! damage twice. NL Enemy attacks you for !M! damage." }, "Gremlin:ProperTools": { @@ -382,8 +382,8 @@ "Gremlin:SecondVolley": { "NAME": "Second Volley", - "DESCRIPTION": "Deal !D! damage. Gain a Shiv for each card played this turn.", - "UPGRADE_DESCRIPTION": "Deal !D! damage. Gain an Upgraded Shiv for each card played this turn.", + "DESCRIPTION": "Deal !D! damage. NL Gain a Shiv for each card played this turn, or until your hand is full.", + "UPGRADE_DESCRIPTION": "Deal !D! damage. NL Gain an Upgraded Shiv for each card played this turn, or until your hand is full.", "EXTENDED_DESCRIPTION": [ " NL (", " card played.)", @@ -421,7 +421,7 @@ "Gremlin:ShowStopper": { "NAME": "Show Stopper", - "DESCRIPTION": "Can only be played if you have exactly 7 gremlin:Wiz. NL Deal !D! damage to ALL enemies 5 times.", + "DESCRIPTION": "Can only be played if you have exactly 7 gremlin:Wiz. NL Deal !D! damage to ALL enemies !M! times.", "EXTENDED_DESCRIPTION": ["Not enough suspense.", "The timing is ruined."] }, @@ -452,7 +452,8 @@ "Gremlin:Tadah": { "NAME": "Tadah!", - "DESCRIPTION": "expansioncontent:Echo a random Skill. NL It costs 0 until played. NL gremlin:Swap to gremlin:Gremlin_Wizard." + "DESCRIPTION": "Gain a *Ward. NL gremlin:Swap to gremlin:Gremlin_Wizard.", + "UPGRADE_DESCRIPTION": "Gain an Upgraded *Ward. NL gremlin:Swap to gremlin:Gremlin_Wizard." }, "Gremlin:TagTeam": { diff --git a/src/main/resources/gremlinResources/localization/eng/KeywordStrings.json b/src/main/resources/gremlinResources/localization/eng/KeywordStrings.json index a412a245e..ad4343d00 100644 --- a/src/main/resources/gremlinResources/localization/eng/KeywordStrings.json +++ b/src/main/resources/gremlinResources/localization/eng/KeywordStrings.json @@ -11,7 +11,7 @@ "cripple" ], "PROPER_NAME": "Cripple", - "DESCRIPTION": "Crippled enemies can no longer lose #yWeak. At the end of their turn, they lose HP equal to their #yWeak." + "DESCRIPTION": "Crippled enemies can no longer lose #yWeak [REMOVE_SPACE]. At the end of their turn, they lose HP equal to their #yWeak [REMOVE_SPACE]." }, { "NAMES": [ @@ -19,7 +19,7 @@ "echoes" ], "PROPER_NAME": "Echo", - "DESCRIPTION": "Echoes are copies of cards with #yEthereal and #yExhaust." + "DESCRIPTION": "Echoes are copies of cards with #yEthereal and #yExhaust [REMOVE_SPACE]. Echoes cannot be Echoed." }, { "NAMES": [ @@ -33,7 +33,7 @@ "gremlin wizard", "gremlin_wizard" ], "PROPER_NAME": "Gremlin Wizard", - "DESCRIPTION": "After you play a skill, gain #b1 #yWiz." + "DESCRIPTION": "After you play a skill, gain #b1 #yWiz [REMOVE_SPACE]." }, { "NAMES": [ @@ -47,14 +47,14 @@ "shield gremlin", "shield_gremlin" ], "PROPER_NAME": "Shield Gremlin", - "DESCRIPTION": "After you play a skill, gain #b2 #yBlock." + "DESCRIPTION": "After you play a skill, gain #b2 #yBlock [REMOVE_SPACE]." }, { "NAMES": [ "sneaky gremlin", "sneaky_gremlin" ], "PROPER_NAME": "Sneaky Gremlin", - "DESCRIPTION": "After you play an attack, deal #b3 damage to a random enemy." + "DESCRIPTION": "0 cost Attacks deal #b2 additional damage. After you play an Attack, deal #b2 damage to a random enemy." }, { "NAMES": [ @@ -68,7 +68,7 @@ "wiz" ], "PROPER_NAME": "Wiz", - "DESCRIPTION": "When you have at least three stacks of Wiz, Attacks will consume all stacks to deal #b10 additional damage." + "DESCRIPTION": "When you have at least three stacks of Wiz, Attacks will consume all stacks to deal #b7 additional damage." }, { "NAMES": [ diff --git a/src/main/resources/gremlinResources/localization/eng/OrbStrings.json b/src/main/resources/gremlinResources/localization/eng/OrbStrings.json index 7bd589842..90029c94c 100644 --- a/src/main/resources/gremlinResources/localization/eng/OrbStrings.json +++ b/src/main/resources/gremlinResources/localization/eng/OrbStrings.json @@ -11,7 +11,7 @@ "NAME": "Gremlin Wizard", "DESCRIPTION": [ "After you play a skill, gain #b", - " #yWiz." + " #yWiz [REMOVE_SPACE]." ] }, @@ -27,14 +27,15 @@ "NAME": "Shield Gremlin", "DESCRIPTION": [ "After you play a skill, gain #b", - " #yBlock." + " #yBlock [REMOVE_SPACE]." ] }, "Gremlin:SneakyGremlin": { "NAME": "Sneaky Gremlin", "DESCRIPTION": [ - "After you play an attack, deal #b", + "0 cost Attacks deal #b", + " extra damage. Whenever you play an Attack, deal #b", " damage to a random enemy." ] } diff --git a/src/main/resources/gremlinResources/localization/eng/PotionStrings.json b/src/main/resources/gremlinResources/localization/eng/PotionStrings.json index cc74bfa85..b1885eb84 100644 --- a/src/main/resources/gremlinResources/localization/eng/PotionStrings.json +++ b/src/main/resources/gremlinResources/localization/eng/PotionStrings.json @@ -23,7 +23,7 @@ "NAME": "Pizazz Potion", "DESCRIPTIONS": [ "Gain #b", - " #yVigor." + " #yVigor [REMOVE_SPACE]." ] } } \ No newline at end of file diff --git a/src/main/resources/gremlinResources/localization/eng/PowerStrings.json b/src/main/resources/gremlinResources/localization/eng/PowerStrings.json index 3c157de5b..597eba294 100644 --- a/src/main/resources/gremlinResources/localization/eng/PowerStrings.json +++ b/src/main/resources/gremlinResources/localization/eng/PowerStrings.json @@ -23,7 +23,7 @@ "Gremlin:BubbleBarrier": { "NAME": "Bubble Barrier", "DESCRIPTIONS": [ - "Whenever you play a card this turn, gain #b", " #yBlock." + "Whenever you play a card this turn, gain #b", " #yBlock [REMOVE_SPACE]." ] }, "Gremlin:CongaLine": { @@ -36,13 +36,14 @@ "Gremlin:Crippled": { "NAME": "Crippled", "DESCRIPTIONS": [ - "#yWeak does not wear off. At the end of its turn, it loses HP equal to its #bWeak." + "Whenever this enemy gains #yWeak [REMOVE_SPACE], they lose #b", + " HP." ] }, "Gremlin:Encore": { "NAME": "Encore", "DESCRIPTIONS": [ - "Whenever you consume #yWiz, deal #b", " damage to ALL enemies." + "#yWiz deals #b", " additional damage." ] }, "Gremlin:Enthusiasm": { @@ -64,7 +65,7 @@ "NAME": "Strength Down", "DESCRIPTIONS": [ "At the end of this turn, lose #b", - " #yStrength." + " #yStrength [REMOVE_SPACE]." ] }, "Gremlin:Furious": { @@ -76,29 +77,29 @@ "Gremlin:GremlinNob": { "NAME": "Gremlin Nob", "DESCRIPTIONS": [ - "At the start of each turn, gain #b3 Gremlin Nob cards. You can no longer #ySwap. When you would lose all #yTemporary #yHP, prevent further damage and revert back." + "At the start of each turn, gain #b3 Gremlin Nob cards. You can no longer #ySwap [REMOVE_SPACE]. When you would lose all #yTemporary #yHP [REMOVE_SPACE], prevent further damage and revert back." ] }, "Gremlin:GremlinWizard": { "NAME": "Gremlin Wizard", "DESCRIPTIONS": [ "Whenever you play a Skill, gain #b", - " #yWiz." + " #yWiz [REMOVE_SPACE]." ] }, "Gremlin:Heckle": { "NAME": "Heckle", "DESCRIPTIONS": [ "Whenever you apply a debuff to an enemy, gain #b", - " #yTemporary #yHP." + " #yTemporary #yHP [REMOVE_SPACE]." ] }, "Gremlin:InfiniteBlocks": { "NAME": "Infinite Blocks", "DESCRIPTIONS": [ "At the start of your turn, gain #b", - " #yWard.", - " #yWards." + " #yWard [REMOVE_SPACE].", + " #yWards [REMOVE_SPACE]." ] }, "Gremlin:MadGremlin": { @@ -114,30 +115,30 @@ "Play #b", " more attack to gain #b", " more attacks to gain #b", - " #yArtifact." + " #yArtifact [REMOVE_SPACE]." ] }, "Gremlin:MakingMagic": { "NAME": "Making Magic", "DESCRIPTIONS": [ "At the start of your next turn, gain #b", - " copy of #yBang.", - " copies of #yBang." + " copy of #yBang [REMOVE_SPACE].", + " copies of #yBang [REMOVE_SPACE]." ] }, "Gremlin:MakingMoreMagic": { "NAME": "Making Magic+", "DESCRIPTIONS": [ "At the start of your next turn, gain #b", - " #yUpgraded copy of #yBang.", - " #yUpgraded copies of #yBang." + " #yUpgraded copy of #yBang [REMOVE_SPACE].", + " #yUpgraded copies of #yBang [REMOVE_SPACE]." ] }, "Gremlin:Polish": { "NAME": "Polish", "DESCRIPTIONS": [ "#yWards grant #b", - " additional #yBlock." + " additional #yBlock [REMOVE_SPACE]." ] }, "Gremlin:Scatter": { @@ -152,21 +153,22 @@ "NAME": "Shadow Shiv", "DESCRIPTIONS": [ "Whenever you play an Attack that doesn't #yExhaust, gain #b", - " #yShiv.", - " #yShivs." + " #yShiv [REMOVE_SPACE].", + " #yShivs [REMOVE_SPACE]." ] }, "Gremlin:ShieldGremlin": { "NAME": "Shield Gremlin", "DESCRIPTIONS": [ "Whenever you play a Skill, gain #b", - " #yBlock." + " #yBlock [REMOVE_SPACE]." ] }, "Gremlin:SneakyGremlin": { "NAME": "Sneaky Gremlin", "DESCRIPTIONS": [ - "Whenever you play an attack, deal #b", + "0 cost Attacks have their damage increased by #b", + " [REMOVE_SPACE]. Whenever you play an Attack, deal #b", " damage to a random enemy." ] }, @@ -180,7 +182,7 @@ "Gremlin:Unforgiving": { "NAME": "Unforgiving", "DESCRIPTIONS": [ - "You cannot lose #yStrength." + "You cannot lose #yStrength [REMOVE_SPACE]." ] }, "Gremlin:Wiz": { @@ -194,7 +196,7 @@ "NAME": "Wizardry", "DESCRIPTIONS": [ "At the start of your turn, gain #b", - " #yWiz." + " #yWiz [REMOVE_SPACE]." ] } } \ No newline at end of file diff --git a/src/main/resources/gremlinResources/localization/eng/RelicStrings.json b/src/main/resources/gremlinResources/localization/eng/RelicStrings.json index 8f4a86619..077e45c8f 100644 --- a/src/main/resources/gremlinResources/localization/eng/RelicStrings.json +++ b/src/main/resources/gremlinResources/localization/eng/RelicStrings.json @@ -3,14 +3,14 @@ "NAME": "Impeccable Pecs", "FLAVOR": "Glorious.", "DESCRIPTIONS": [ - "Whenever you gain #yStrength, gain an equal amount of #yTemporary_HP. NL Start each combat with #b1 #yStrength." + "Whenever you gain #yStrength [REMOVE_SPACE], gain an equal amount of #yTemporary_HP [REMOVE_SPACE]. NL Start each combat with #b1 #yStrength [REMOVE_SPACE]." ] }, "Gremlin:FragmentationGrenade": { "NAME": "Fragmentation Grenade", "FLAVOR": "Nobody dares to ask where the Gremlin got it from.", "DESCRIPTIONS": [ - "Damage dealt to random enemies is increased by #b", "." + "Damage dealt to random enemies is increased by #b", " [REMOVE_SPACE]." ] }, "Gremlin:GremlinBomb": { @@ -65,14 +65,14 @@ "NAME": "Magic Mallet", "FLAVOR": "Stubs toes twice as hard.", "DESCRIPTIONS": [ - "Whenever you apply #yWeak, gain #b1 #yWiz, up to #b3 times per turn." + "Whenever you apply #yWeak, gain #b1 #yWiz [REMOVE_SPACE], up to #b3 times per turn." ] }, "Gremlin:PricklyShields": { "NAME": "Prickly Shields", "FLAVOR": "Gremlins use whatever scraps they can find as weapons or armor. Some serve as both.", "DESCRIPTIONS": [ - "Whenever you gain #yBlock, deal #b", " damage to a random enemy." + "Whenever you gain #yBlock [REMOVE_SPACE], deal #b", " damage to a random enemy." ] }, "Gremlin:ShortStature": { @@ -87,8 +87,8 @@ "NAME": "Stolen Merchandise", "FLAVOR": "\"Blasted, thieving Gremlins!\".", "DESCRIPTIONS": [ - "Whenever you #ySwap, gain an #yEcho of a random Colorless card. NL At the start of combat, the Merchant gains #b", - " Strength.", + "Whenever you #ySwap [REMOVE_SPACE], gain an #yEcho of a random Colorless card. NL At the start of combat, the Merchant gains #b", + " #yStrength [REMOVE_SPACE].", "You no good, blasted, thieves!", "You cowardly, wretched vermin!", "Greedy grasping gremlins!" @@ -98,21 +98,21 @@ "NAME": "Supply Scroll", "FLAVOR": "A surprisingly detailed inventory of the mob's various bits and bobbles.", "DESCRIPTIONS": [ - "At the start of your 3rd turn, gain [E] and draw #b2 cards." + "At the start of your 3rd turn, gain [E] [E] and draw #b2 cards." ] }, "Gremlin:TagTeamwork": { "NAME": "Tag Teamwork", "FLAVOR": "Teamwork makes the dream work.", "DESCRIPTIONS": [ - "Whenever you draw #yTag #yTeam, draw another card. NL Upon pickup, add two copies of #yTag #yTeam to your deck." + "Whenever you draw #yTag #yTeam [REMOVE_SPACE], draw another card. NL Upon pickup, add two copies of #yTag #yTeam to your deck." ] }, "Gremlin:WizardHat": { "NAME": "Wizard Hat", "FLAVOR": "The accompanying robes have long since been stolen.", "DESCRIPTIONS": [ - "Whenever you consume #yWiz, remove a debuff at random." + "Whenever you consume #yWiz [REMOVE_SPACE], remove a debuff at random." ] }, "Gremlin:WizardStaff": { @@ -124,7 +124,7 @@ }, "Gremlin:WoundPoker": { "NAME": "Wound Poker", - "FLAVOR": "Does it hurt when I do this?.", + "FLAVOR": "Does it hurt when I do this?", "DESCRIPTIONS": [ "At the end of each turn, deal #b", " damage to each #yWeakened enemy." ] diff --git a/src/main/resources/gremlinResources/localization/jpn/CardStrings.json b/src/main/resources/gremlinResources/localization/jpn/CardStrings.json index 1a1cba798..6b25761e9 100644 --- a/src/main/resources/gremlinResources/localization/jpn/CardStrings.json +++ b/src/main/resources/gremlinResources/localization/jpn/CardStrings.json @@ -1,24 +1,24 @@ { "Gremlin:AggressiveDefense": { "NAME": "守るが勝ち", - "DESCRIPTION": " !D! ダメージを与える。 NL このターン ブロック を得る度 この敵のHPを !M! 減らす。" + "DESCRIPTION": "!D! ダメージを与える。 NL このターン ブロック を得る度 この敵のHPを !M! 減らす。" }, "Gremlin:ArmsTheft": { "NAME": "武器泥棒", - "DESCRIPTION": "gremlin:スティール !M! 筋力。 NL 廃棄" + "DESCRIPTION": "脱力 !M! を与える。 NL gremlin:スティール !M! 筋力。 NL 廃棄" }, "Gremlin:Astound": { "NAME": "びっくり", - "DESCRIPTION": " !B! ブロックを得る。 NL gremlin:魔力 が 3 以上あれば !M! *ガード を手札に加える。", - "UPGRADE_DESCRIPTION": " !B! ブロックを得る。 NL gremlin:魔力 が 3 以上あれば !M! *ガード+ を手札に加える。" + "DESCRIPTION": "!B! ブロックを得る。 NL gremlin:魔力 が 3 以上あれば !M! 枚の *ガード を手札に加える。", + "UPGRADE_DESCRIPTION": "!B! ブロックを得る。 NL gremlin:魔力 が 3 以上あれば !M! 枚の *ガード+ を手札に加える。" }, "Gremlin:Bang": { "NAME": "バン!", - "DESCRIPTION": " !D! ダメージを !M! 回与え、捨て札に *Whiz を加える。 NL 廃棄", - "UPGRADE_DESCRIPTION": " !D! ダメージを !M! 回与え、捨て札に *Whiz+ を加える。 NL 廃棄" + "DESCRIPTION": "!D! ダメージを !M! 回与え、捨て札に *Whiz を加える。 NL 廃棄", + "UPGRADE_DESCRIPTION": "!D! ダメージを !M! 回与え、捨て札に *Whiz+ を加える。 NL 廃棄" }, "Gremlin:Bellow": { @@ -43,12 +43,12 @@ "Gremlin:BurlyBlow": { "NAME": "逞しい一撃", - "DESCRIPTION": " !D! ダメージを与える。 敵の 脱力 分繰り返す。" + "DESCRIPTION": "!D! ダメージを与える。 敵の 脱力 分繰り返す。" }, "Gremlin:CatScratch": { "NAME": "猫ひっかき", - "DESCRIPTION": " !D! ダメージを !M! 回与える。" + "DESCRIPTION": "!D! ダメージを !M! 回与える。" }, "Gremlin:Changeo": { @@ -64,8 +64,7 @@ "Gremlin:CounterStrike": { "NAME": "カウンターストライク", - "DESCRIPTION": " !D! ダメージを与える。敵が攻撃を予定している場合、 !M! *ガード を手札に加える。", - "UPGRADE_DESCRIPTION": " !D! ダメージを与える。敵が攻撃を予定している場合、 !M! *ガード+ を手札に加える。" + "DESCRIPTION": "!D! ダメージを与える。 NL 敵が攻撃を予定している場合、現在のグレムリンボーナスを !M! 回行う。" }, "Gremlin:CowerChoice": { @@ -87,12 +86,12 @@ "Gremlin:Dazzle": { "NAME": "目くらまし", - "DESCRIPTION": " !D! ダメージを与える。 NL gremlin:魔力 が 3 以上あれば gremlin:スティール 2 筋力。 NL 廃棄" + "DESCRIPTION": "!D! ダメージを与える。 NL gremlin:魔力 が 3 以上あれば gremlin:スティール 2 筋力。 NL 廃棄" }, "Gremlin:Defend": { "NAME": "防御", - "DESCRIPTION": " !B! ブロックを得る。" + "DESCRIPTION": "!B! ブロックを得る。" }, "Gremlin:Duplicate": { @@ -103,12 +102,12 @@ "Gremlin:EdibleArmor": { "NAME": "食用アーマー", - "DESCRIPTION": "ブロックを expansioncontent:一時的な体力 に変換する。" + "DESCRIPTION": "ブロックを expansioncontent:一時的な体力 に変換する。 NL 廃棄" }, "Gremlin:Encore": { "NAME": "アンコール", - "DESCRIPTION": "3 gremlin:魔力 を得る。 NL gremlin:魔力 を消費した時、敵全体に !M! ダメージ。" + "DESCRIPTION": "3 gremlin:魔力 を得る。 NL gremlin:魔力 が追加で !M! ダメージを与える。" }, "Gremlin:Enthusiasm": { @@ -123,18 +122,18 @@ "Gremlin:Exacerbate": { "NAME": "悪化させる", - "DESCRIPTION": " !D! ダメージを与えて gremlin:廃人 にする。 NL 廃棄" + "DESCRIPTION": "!D! ダメージを与える。 NL 対象に 脱力 を与える度、HPを !M! 減少させる。 NL 廃棄" }, "Gremlin:FairyDust": { "NAME": "妖精の粉", - "DESCRIPTION": " !M! *ガード とカードを !M! 枚引く。 NL 廃棄" + "DESCRIPTION": "!M! *ガード とカードを !M! 枚引く。 NL 廃棄" }, "Gremlin:SleeveOfAces": { "NAME": "とっておき", - "DESCRIPTION": " !D! ダメージを与える。 NL gremlin:魔力 の数だけ ナイフ を手札に加える。", - "UPGRADE_DESCRIPTION": " !D! ダメージを与える。 NL gremlin:魔力 の数だけ ナイフ+ を手札に加える。" + "DESCRIPTION": "!D! ダメージを与える。 NL gremlin:魔力 の数だけ ナイフ を手札に加える。", + "UPGRADE_DESCRIPTION": "!D! ダメージを与える。 NL gremlin:魔力 の数だけ ナイフ+ を手札に加える。" }, "Gremlin:FatGremlin": { @@ -155,7 +154,7 @@ "Gremlin:FlipOut": { "NAME": "反転", - "DESCRIPTION": " !D! ダメージを与える。 NL このターンあなたがブロックを得る代わりに敵全体に同じダメージを与える。" + "DESCRIPTION": "!D! ダメージを与える。 NL このターンあなたがブロックを得る代わりに敵全体に同じダメージを与える。" }, "Gremlin:Flurry": { @@ -170,7 +169,7 @@ "Gremlin:FollowThrough": { "NAME": "リーダーの為に!", - "DESCRIPTION": " !D! ダメージを与える。 NL 一時的な 筋力 !M! を得る。" + "DESCRIPTION": "!D! ダメージを与える。 NL 一時的な 筋力 !M! を得る。" }, "Gremlin:Fury": { @@ -180,19 +179,20 @@ "Gremlin:Glimmer": { "NAME": "きらきら", - "DESCRIPTION": " !D! ダメージを与える。 NL 2 *ガード を手札に加える。", - "UPGRADE_DESCRIPTION": " !D! ダメージを与える。 NL 2 *ガード+ を手札に加える。" + "DESCRIPTION": "!D! ダメージを与える。 NL 2 枚の *ガード を手札に加える。", + "UPGRADE_DESCRIPTION": "!D! ダメージを与える。 NL 2 枚の *ガード+ を手札に加える。" }, "Gremlin:GlitterGuard": { "NAME": "煌めくガード", - "DESCRIPTION": " !M! *ガード を手札に加える。 NL gremlin:交代 : gremlin:シールドグレムリン", - "UPGRADE_DESCRIPTION": " !M! *ガード+ を手札に加える。 NL gremlin:交代 : gremlin:シールドグレムリン" + "DESCRIPTION": "!M! 枚の *ガード を手札に加える。 NL gremlin:交代 : gremlin:シールドグレムリン", + "UPGRADE_DESCRIPTION": "!M! 枚の *ガード+ を手札に加える。 NL gremlin:交代 : gremlin:シールドグレムリン" }, "Gremlin:GremlinArms": { "NAME": "グレムリンアームズ", - "DESCRIPTION": "合計 !M! 枚の ナイフ または *ガード を手札に加える。" + "DESCRIPTION": "現在のグレムリンボーナスを発動し、その後生きているグレムリンを選んで gremlin:交代 する。", + "UPGRADE_DESCRIPTION": "現在のグレムリンボーナスを2回発動し、その後生きているグレムリンを選んで gremlin:交代 する。" }, "Gremlin:GremlinMeal": { @@ -202,7 +202,7 @@ "Gremlin:GremlinDance": { "NAME": "グレムリンダンス", - "DESCRIPTION": " !D! ダメージを与える。 NL 最前列のグレムリン毎にボーナスを得る。", + "DESCRIPTION": "!D! ダメージを与える。 NL 最前列のグレムリン毎にボーナスを得る。", "EXTENDED_DESCRIPTION": ["!D! ダメージ", " を敵全体に与える。", " NL このターン 対象が 筋力 !M! を失う。", " NL !B! ブロックを得る。", " NL カードを !M! 枚引く。", " NL !M! gremlin:魔力 を得る。", " NL 筋力 !M! を得る。"] @@ -210,15 +210,15 @@ "Gremlin:GremlinOffensive": { "NAME": "攻めの姿勢", - "DESCRIPTION": " !D! ダメージを与える。 NL *攻めの姿勢 を手札に加える。 NL 廃棄", - "UPGRADE_DESCRIPTION": " !D! ダメージを与える。 NL *攻めの姿勢+ を手札に加える。 NL 廃棄" + "DESCRIPTION": "!D! ダメージを与える。 NL *攻めの姿勢 を手札に加える。 NL 廃棄", + "UPGRADE_DESCRIPTION": "!D! ダメージを与える。 NL *攻めの姿勢+ を手札に加える。 NL 廃棄" }, "Gremlin:GremlinToss": { "NAME": "グレムリン・トス", - "DESCRIPTION": "現在の ブロック と expansioncontent:一時的な体力 を合計したダメージを与える。", + "DESCRIPTION": "expansioncontent:一時的な体力 を !M! 得る。 NL 現在の ブロック と expansioncontent:一時的な体力 を合計したダメージを与える。", "UPGRADE_DESCRIPTION": "expansioncontent:一時的な体力 を !M! 得る。 NL 現在の ブロック と expansioncontent:一時的な体力 を合計したダメージを与える。", - "EXTENDED_DESCRIPTION": [" NL ( !D! ダメージ)"] + "EXTENDED_DESCRIPTION": [" NL ( !D! ダメージを与える。)"] }, "Gremlin:GremlinWizard": { @@ -239,22 +239,22 @@ "Gremlin:IrksomeBlow": { "NAME": "痛恨の一撃", - "DESCRIPTION": " !D! ダメージを与える。 NL このカードは 筋力 の影響を !M! 倍受ける。" + "DESCRIPTION": "!D! ダメージを与える。 NL このカードは 筋力 の影響を !M! 倍受ける。" }, "Gremlin:Irritability": { "NAME": "イライラ", - "DESCRIPTION": " !B! ブロックを得る。 NL 一時的な トゲ !M! を得る。 NL gremlin:交代 : gremlin:マッドグレムリン" + "DESCRIPTION": "!B! ブロックを得る。 NL 一時的な トゲ !M! を得る。 NL gremlin:交代 : gremlin:マッドグレムリン" }, "Gremlin:Jeer": { "NAME": "からかう", - "DESCRIPTION": " !D! ダメージを与える。敵がデバフにかかっている場合、 !M! の expansioncontent:一時的な体力 を得る。" + "DESCRIPTION": "!D! ダメージを与える。敵がデバフにかかっている場合、 !M! の expansioncontent:一時的な体力 を得る。" }, "Gremlin:Kablamo": { "NAME": "カブラモ!", - "DESCRIPTION": "敵全体に !D! ダメージを与える。 NL この攻撃では gremlin:魔力 を消費しない。" + "DESCRIPTION": "敵全体に !D! ダメージを2回与える。 NL この攻撃では gremlin:魔力 を消費しない。" }, "Gremlin:LeaderChoice": { @@ -270,7 +270,7 @@ "Gremlin:MakeshiftArmor": { "NAME": "その場しのぎアーマー", "DESCRIPTION": "7 回 アタック をプレイする毎に 1 アーティファクト を得る。", - "UPGRADE_DESCRIPTION": " !M! アーティファクト を得る。 NL 7 回 アタック をプレイする毎に 1 アーティファクト を得る。" + "UPGRADE_DESCRIPTION": "!M! アーティファクト を得る。 NL 7 回 アタック をプレイする毎に 1 アーティファクト を得る。" }, "Gremlin:Mockery": { @@ -303,23 +303,23 @@ "Gremlin:Patsy": { "NAME": "カモ", - "DESCRIPTION": " !B! ブロックを得る。 NL gremlin:交代 :次のグレムリン。" + "DESCRIPTION": "!B! ブロックを得る。 NL gremlin:交代 :次のグレムリン。" }, "Gremlin:Pickpocket": { "NAME": "ピックポケット", - "DESCRIPTION": "gremlin:スティール 全 アーティファクト NL !D! ダメージを与える。 NL 廃棄" + "DESCRIPTION": "!D! ダメージを与える。 NL このターン、対象は 筋力 !M! を2回失う。 NL !blamage! ゴールドを得る。 NL 廃棄" }, "Gremlin:PinNeedle": { "NAME": "画鋲", - "DESCRIPTION": " !D! ダメージを与える。 NL *ピン刺し を !M! 枚 bronze:インサート する。 NL 廃棄", - "UPGRADE_DESCRIPTION": " !D! ダメージを与える。 NL *ピン刺し+ を !M! 枚 bronze:インサート する。 NL 廃棄" + "DESCRIPTION": "!D! ダメージを与える。 NL *ピン刺し を !M! 枚 bronze:インサート する。 NL 廃棄", + "UPGRADE_DESCRIPTION": "!D! ダメージを与える。 NL *ピン刺し+ を !M! 枚 bronze:インサート する。 NL 廃棄" }, "Gremlin:Pinprick": { "NAME": "ピン刺し", - "DESCRIPTION": " !D! ダメージを与える。 NL カードを1枚引く。 NL 廃棄", + "DESCRIPTION": "!D! ダメージを与える。 NL カードを1枚引く。 NL 廃棄", "UPGRADE_DESCRIPTION": "このカードを引いた時、これの gremlin:エコー を得る。 NL !D! ダメージを与える。 NL カードを1枚引く。 NL 廃棄" }, @@ -330,17 +330,17 @@ "Gremlin:PourSalt": { "NAME": "塩を塗る", - "DESCRIPTION": " !D! ダメージを与える。敵が 脱力 状態なら 1 取り除き、ナイフを !M! 枚手札に加える。" + "DESCRIPTION": "!D! ダメージを与える。敵が 脱力 状態なら 1 取り除き、ナイフを !M! 枚手札に加える。" }, "Gremlin:Presto": { "NAME": "お呪い!", - "DESCRIPTION": " !D! ダメージを与える。 !M! gremlin:魔力 を得る。" + "DESCRIPTION": "!D! ダメージを与える。 !M! gremlin:魔力 を得る。" }, "Gremlin:Pretaliation": { "NAME": "事前報復", - "DESCRIPTION": "敵が攻撃を予定している場合 !D! ダメージを与える。 NL それ以外の場合 !blamage! ダメージを与える。" + "DESCRIPTION": "!D! ダメージを 2回 与える。 NL 敵があなたに !M! ダメージを与える。" }, "Gremlin:ProperTools": { @@ -351,7 +351,7 @@ "Gremlin:RageBreak": { "NAME": "レイジブレイク", "DESCRIPTION": " 筋力 を2倍にする。 NL 廃棄", - "UPGRADE_DESCRIPTION": " !B! ブロックを得る。 NL 筋力 を2倍にする。 NL 廃棄" + "UPGRADE_DESCRIPTION": "!B! ブロックを得る。 NL 筋力 を2倍にする。 NL 廃棄" }, "Gremlin:Raid": { @@ -382,8 +382,8 @@ "Gremlin:SecondVolley": { "NAME": "第二弾", - "DESCRIPTION": " !D! ダメージを与える。 NL このターンにプレイしたカード1枚につき ナイフ を手札に加える。", - "UPGRADE_DESCRIPTION": " !D! ダメージを与える。 NL このターンにプレイしたカード1枚につき ナイフ+ を手札に加える。", + "DESCRIPTION": "!D! ダメージを与える。 NL このターンにプレイしたカード1枚につき ナイフ を最大で手札が一杯になるまで加える。", + "UPGRADE_DESCRIPTION": "!D! ダメージを与える。 NL このターンにプレイしたカード1枚につき ナイフ+ を最大で手札が一杯になるまで加える。", "EXTENDED_DESCRIPTION": [ " NL (", " 枚プレイした)", @@ -421,7 +421,7 @@ "Gremlin:ShowStopper": { "NAME": "ショーは終わりだ", - "DESCRIPTION": " gremlin:魔力 が 7 丁度の時のみ使用可能。 NL 敵全体に !D! ダメージを 5 回与える。", + "DESCRIPTION": " gremlin:魔力 が 7 丁度の時のみ使用可能。 NL 敵全体に !D! ダメージを !M! 回与える。", "EXTENDED_DESCRIPTION": ["緊張感が足りない。", "このタイミングじゃ台無しだ。"] }, @@ -442,7 +442,7 @@ "Gremlin:Stupend": { "NAME": "驚け", - "DESCRIPTION": " !B! ブロックを得る。 NL !D! ダメージを与える。 NL ブロックは gremlin:魔力 の影響を受ける。" + "DESCRIPTION": "!B! ブロックを得る。 NL !D! ダメージを与える。 NL ブロックは gremlin:魔力 の影響を受ける。" }, "Gremlin:SupplyScrollCard": { @@ -452,7 +452,8 @@ "Gremlin:Tadah": { "NAME": "じゃじゃーん!", - "DESCRIPTION": "ランダムなスキルの gremlin:エコー を手札に加える。それはプレイするまでコストが0。 NL gremlin:交代 : gremlin:グレムリンウィザード" + "DESCRIPTION": "*ガード を手札に加える。 NL gremlin:交代 : gremlin:グレムリンウィザード", + "UPGRADE_DESCRIPTION": "*ガード+ を手札に加える。 NL gremlin:交代 : gremlin:グレムリンウィザード" }, "Gremlin:TagTeam": { @@ -473,13 +474,13 @@ "Gremlin:TwistTheKnife": { "NAME": "ナイフで抉る", - "DESCRIPTION": " !D! ダメージを与える。 NL 1 ナイフ を手札に加える。", - "UPGRADE_DESCRIPTION": " !D! ダメージを与える。 NL 1 ナイフ+ を手札に加える。" + "DESCRIPTION": "!D! ダメージを与える。 NL ナイフ を手札に加える。", + "UPGRADE_DESCRIPTION": "!D! ダメージを与える。 NL ナイフ+ を手札に加える。" }, "Gremlin:ToeStub": { "NAME": "つま先に攻撃", - "DESCRIPTION": " !D! ダメージを与える。対象が 脱力 状態なら 弱体 !M! を与える。" + "DESCRIPTION": "!D! ダメージを与える。対象が 脱力 状態なら 弱体 !M! を与える。" }, "Gremlin:Unforgiving": { @@ -489,13 +490,13 @@ "Gremlin:Ward": { "NAME": "ガード", - "DESCRIPTION": " !B! ブロックを得る。 NL 廃棄" + "DESCRIPTION": "!B! ブロックを得る。 NL 廃棄" }, "Gremlin:Whiz": { "NAME": "Whiz", - "DESCRIPTION": " !M! gremlin:魔力 を得る。 次のターン *バン! を手札に加える。 NL 廃棄", - "UPGRADE_DESCRIPTION": " !M! gremlin:魔力 を得る。 次のターン *バン!+ を手札に加える。 NL 廃棄" + "DESCRIPTION": "!M! gremlin:魔力 を得る。 次のターン *バン! を手札に加える。 NL 廃棄", + "UPGRADE_DESCRIPTION": "!M! gremlin:魔力 を得る。 次のターン *バン!+ を手札に加える。 NL 廃棄" }, "Gremlin:Wizardry": { diff --git a/src/main/resources/gremlinResources/localization/jpn/KeywordStrings.json b/src/main/resources/gremlinResources/localization/jpn/KeywordStrings.json index 45fa04503..7b22efc91 100644 --- a/src/main/resources/gremlinResources/localization/jpn/KeywordStrings.json +++ b/src/main/resources/gremlinResources/localization/jpn/KeywordStrings.json @@ -62,7 +62,7 @@ "スニーキーグレムリン" ], "PROPER_NAME": "スニーキーグレムリン", - "DESCRIPTION": "アタックをプレイ後、ランダムな敵に #b3 ダメージを与える。" + "DESCRIPTION": "0コストのアタックが追加で #b2 のダメージを与える。 アタックをプレイ後、ランダムな敵に #b2 ダメージを与える。" }, { "NAMES": [ diff --git a/src/main/resources/gremlinResources/localization/jpn/OrbStrings.json b/src/main/resources/gremlinResources/localization/jpn/OrbStrings.json index befdcc38b..749ebd0de 100644 --- a/src/main/resources/gremlinResources/localization/jpn/OrbStrings.json +++ b/src/main/resources/gremlinResources/localization/jpn/OrbStrings.json @@ -2,7 +2,7 @@ "Gremlin:FatGremlin": { "NAME": "太っちょグレムリン", "DESCRIPTION": [ - "アタックをプレイ後、対象にしたモンスターに #y脱力 #b", + "アタックをプレイ後、ターゲットしたモンスター全てに #y脱力 #b", " を与える。" ] }, @@ -34,7 +34,8 @@ "Gremlin:SneakyGremlin": { "NAME": "スニーキーグレムリン", "DESCRIPTION": [ - "アタックをプレイ後、ランダムな敵に #b", + "0 コストのアタックが 追加で #b", + " ダメージを与える。また、アタックをプレイした時、ランダムな敵に #b", " ダメージを与える。" ] } diff --git a/src/main/resources/gremlinResources/localization/jpn/PowerStrings.json b/src/main/resources/gremlinResources/localization/jpn/PowerStrings.json index d7356e755..78d5fdb48 100644 --- a/src/main/resources/gremlinResources/localization/jpn/PowerStrings.json +++ b/src/main/resources/gremlinResources/localization/jpn/PowerStrings.json @@ -36,13 +36,14 @@ "Gremlin:Crippled": { "NAME": "廃人", "DESCRIPTIONS": [ - "#y脱力 が解除されなくなり、自分のターン終了時に #y脱力 分の HP を失う。" + " #y脱力 を受ける度 HPを #b", + " 失う。" ] }, "Gremlin:Encore": { "NAME": "アンコール", "DESCRIPTIONS": [ - " #y魔力 を消費する度に、敵全体に #b", " ダメージを与える。" + " #y魔力 が追加で #b", " ダメージを与える。" ] }, "Gremlin:Enthusiasm": { @@ -166,7 +167,8 @@ "Gremlin:SneakyGremlin": { "NAME": "スニーキーグレムリン", "DESCRIPTIONS": [ - "アタックをプレイする度に、ランダムな敵に #b", + "0コストのアタックが追加で #b", + " ダメージを与える。アタックをプレイする度に、ランダムな敵に #b", " ダメージを与える。" ] }, diff --git a/src/main/resources/gremlinResources/localization/jpn/RelicStrings.json b/src/main/resources/gremlinResources/localization/jpn/RelicStrings.json index 3f42b7df5..0fde28786 100644 --- a/src/main/resources/gremlinResources/localization/jpn/RelicStrings.json +++ b/src/main/resources/gremlinResources/localization/jpn/RelicStrings.json @@ -98,7 +98,7 @@ "NAME": "サプライスクロール", "FLAVOR": "暴徒の持つアイテムを驚くほど詳細に分類化しています。", "DESCRIPTIONS": [ - "3ターン目の開始時に、 [E] を得てカードを #b2 枚引く。" + "3ターン目の開始時に、 [E] [E] を得てカードを #b2 枚引く。" ] }, "Gremlin:TagTeamwork": { diff --git a/src/main/resources/gremlinResources/localization/kor/CardStrings.json b/src/main/resources/gremlinResources/localization/kor/CardStrings.json index 335d15de6..88f8cf41d 100644 --- a/src/main/resources/gremlinResources/localization/kor/CardStrings.json +++ b/src/main/resources/gremlinResources/localization/kor/CardStrings.json @@ -6,7 +6,7 @@ "Gremlin:ArmsTheft": { "NAME": "소매 치기", - "DESCRIPTION": "적의 힘을 !M! gremlin:강탈합니다. NL 소멸." + "DESCRIPTION": "약화를 !M! 부여합니다. NL 적의 힘을 !M! gremlin:강탈합니다. NL 소멸." }, "Gremlin:Astound": { @@ -43,7 +43,7 @@ "Gremlin:BurlyBlow": { "NAME": "굵직한 강타", - "DESCRIPTION": "피해를 !D! 줍니다. 적이 보유한 약화 하나당 피해를 !D! 줍니다." + "DESCRIPTION": "피해를 !D! 줍니다. NL 적이 보유한 약화 하나당 피해를 !D! 줍니다." }, "Gremlin:CatScratch": { @@ -64,8 +64,7 @@ "Gremlin:CounterStrike": { "NAME": "반사 타격", - "DESCRIPTION": "피해를 !D! 줍니다. 적이 공격할 의도가 있다면 *수호를 !M! 장 얻습니다.", - "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. 적이 공격할 의도가 있다면 *수호+를 !M! 장 얻습니다." + "DESCRIPTION": "피해를 !D! 줍니다. NL 적이 공격할 의도가 있다면 선두에 있는 그렘린의 고유 효과를 !M! 번 발동시킵니다." }, "Gremlin:CowerChoice": { @@ -103,12 +102,12 @@ "Gremlin:EdibleArmor": { "NAME": "식용 갑옷", - "DESCRIPTION": "방어도를 변환해서 expansioncontent:임시 *체력을 얻습니다." + "DESCRIPTION": "방어도를 변환해서 expansioncontent:임시 *체력을 얻습니다. NL 소멸." }, "Gremlin:Encore": { "NAME": "앙코르", - "DESCRIPTION": "gremlin:마법을 3 얻습니다. NL gremlin:마법을 소모할 때마다 적 전체에게 피해를 !M! 줍니다." + "DESCRIPTION": "gremlin:마법을 3 얻습니다. NL gremlin:마법을 소모할 때 피해량을 !M! 증가시킵니다." }, "Gremlin:Enthusiasm": { @@ -123,7 +122,7 @@ "Gremlin:Exacerbate": { "NAME": "악화", - "DESCRIPTION": "피해를 !D! 줍니다. gremlin:무력화를 부여합니다. NL 소멸." + "DESCRIPTION": "피해를 !D! 줍니다. NL 공격한 대상에게 약화를 부여할 때마다 대상은 체력을 !M! 잃습니다. NL 소멸." }, "Gremlin:FairyDust": { @@ -192,7 +191,8 @@ "Gremlin:GremlinArms": { "NAME": "그렘린 무기", - "DESCRIPTION": "무작위 단도 또는 *수호를 !M! 장 얻습니다." + "DESCRIPTION": "선두에 있는 그렘린의 효과를 발동시킵니다. 살아있는 그렘린 중 선택해 gremlin:교체합니다.", + "UPGRADE_DESCRIPTION": "선두에 있는 그렘린의 효과를 2번 발동시킵니다. 살아있는 그렘린 중 선택해 gremlin:교체합니다." }, "Gremlin:GremlinMeal": { @@ -216,7 +216,7 @@ "Gremlin:GremlinToss": { "NAME": "그렘린 던지기", - "DESCRIPTION": "현재 방어도 와 gremlin:임시_체력만큼 피해를 줍니다.", + "DESCRIPTION": "expansioncontent:임시 *체력을 !M! 얻습니다. NL 현재 방어도 와 gremlin:임시_체력만큼 피해를 줍니다.", "UPGRADE_DESCRIPTION": "expansioncontent:임시 *체력을 !M! 얻습니다. NL 현재 방어도와 gremlin:임시_체력만큼 피해를 줍니다.", "EXTENDED_DESCRIPTION": [" NL (피해를 !D! 줍니다.)"] }, @@ -254,7 +254,7 @@ "Gremlin:Kablamo": { "NAME": "멋져!", - "DESCRIPTION": "적 전체에게 피해를 !D! 줍니다. NL 이 공격은 gremlin:마법을 소모하지 않습니다." + "DESCRIPTION": "적 전체에게 피해를 !D! 만큼 2번 줍니다. NL 이 공격은 gremlin:마법을 소모하지 않습니다." }, "Gremlin:LeaderChoice": { @@ -308,7 +308,7 @@ "Gremlin:Pickpocket": { "NAME": "슬쩍하기", - "DESCRIPTION": "모든 인공물을 gremlin:강탈합니다. NL 피해를 !D! 줍니다. NL 소멸." + "DESCRIPTION": "피해를 !D! 줍니다. NL 대상의 힘을 이번 턴 동안 !M! 만큼 2번 감소시킵니다. NL 골드를 !blamage! 얻습니다. NL 소멸." }, "Gremlin:PinNeedle": { @@ -340,7 +340,7 @@ "Gremlin:Pretaliation": { "NAME": "선제 공격", - "DESCRIPTION": "적이 공격할 의도가 있다면 피해를 !D! 줍니다. NL 적이 공격할 의도가 없다면 피해를 !blamage! 줍니다." + "DESCRIPTION": "피해를 !D! 만큼 2번 줍니다. NL 적이 공격할 의도가 있다면 피해를 !D! 줍니다." }, "Gremlin:ProperTools": { @@ -382,8 +382,8 @@ "Gremlin:SecondVolley": { "NAME": "다음 일제 사격", - "DESCRIPTION": "피해를 !D! 줍니다. 이번 턴에 사용한 카드 한 장당 단도를 얻습니다.", - "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. 이번 턴에 사용한 카드 한 장당 강화된 단도를 얻습니다.", + "DESCRIPTION": "피해를 !D! 줍니다. NL 이번 턴에 사용한 카드 한 장당 단도를 손이 가득찰 때까지 얻습니다.", + "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL 이번 턴에 사용한 카드 한 장당 강화된 단도를 가득찰 때까지 얻습니다.", "EXTENDED_DESCRIPTION": [ " NL (카드를 ", " 장 사용했습니다.)", @@ -421,7 +421,7 @@ "Gremlin:ShowStopper": { "NAME": "명연기", - "DESCRIPTION": "gremlin:마법을 7 보유하고 있을 때만 사용가능합니다. NL 적 전체에게 피해를 !D! 만큼 5번 줍니다.", + "DESCRIPTION": "gremlin:마법을 7 보유하고 있을 때만 사용가능합니다. NL 적 전체에게 피해를 !D! 만큼 !M! 번 줍니다.", "EXTENDED_DESCRIPTION": ["긴장감이 부족해.", "타이밍을 놓쳤어."] }, @@ -452,7 +452,8 @@ "Gremlin:Tadah": { "NAME": "이제 간다!", - "DESCRIPTION": "무작위 스킬 카드의 gremlin:메아리를 1장 얻습니다. 사용하기 전까지 그 카드의 비용이 0이 됩니다. NL gremlin:마법사_그렘린으로 gremlin:교체합니다." + "DESCRIPTION": "*수호를 얻습니다. NL gremlin:마법사_그렘린으로 gremlin:교체합니다.", + "UPGRADE_DESCRIPTION": "강화된 *수호를 얻습니다. NL gremlin:마법사_그렘린으로 gremlin:교체합니다." }, "Gremlin:TagTeam": { diff --git a/src/main/resources/gremlinResources/localization/kor/KeywordStrings.json b/src/main/resources/gremlinResources/localization/kor/KeywordStrings.json index 0a7d7eab5..3b77f0f42 100644 --- a/src/main/resources/gremlinResources/localization/kor/KeywordStrings.json +++ b/src/main/resources/gremlinResources/localization/kor/KeywordStrings.json @@ -80,7 +80,7 @@ "sneaky_gremlin" ], "PROPER_NAME": "교활한 그렘린", - "DESCRIPTION": "#y공격 카드를 사용할 때마다 무작위 적에게 피해를 #b3 줍니다." + "DESCRIPTION": "비용이 0인 공격 카드 사용 시 추가로 피해를 #b2 줍니다. #y공격 카드를 사용할 때마다 무작위 적에게 피해를 #b2 줍니다." }, { "NAMES": [ @@ -102,7 +102,7 @@ "wiz" ], "PROPER_NAME": "마법", - "DESCRIPTION": "#y마법이 #b3 이상 쌓이면 #y공격 카드를 쓸 때 모든 #y마법을 소모해서 피해량을 #b10 증가시킵니다." + "DESCRIPTION": "#y마법이 #b3 이상 쌓이면 #y공격 카드를 쓸 때 모든 #y마법을 소모해서 피해량을 #b7 증가시킵니다." }, { "NAMES": [ diff --git a/src/main/resources/gremlinResources/localization/kor/OrbStrings.json b/src/main/resources/gremlinResources/localization/kor/OrbStrings.json index 753f304b1..16979eb41 100644 --- a/src/main/resources/gremlinResources/localization/kor/OrbStrings.json +++ b/src/main/resources/gremlinResources/localization/kor/OrbStrings.json @@ -34,7 +34,8 @@ "Gremlin:SneakyGremlin": { "NAME": "교활한 그렘린", "DESCRIPTION": [ - "공격카드를 사용할 때마다 무작위 적에게 피해를 #b", + "비용이 0인 공격 카드 사용 시 추가로 피해를 #b", + " 줍니다. 공격카드를 사용할 때마다 무작위 적에게 피해를 #b", " 줍니다." ] } diff --git a/src/main/resources/gremlinResources/localization/kor/PowerStrings.json b/src/main/resources/gremlinResources/localization/kor/PowerStrings.json index aa04d2ce5..ccafb518f 100644 --- a/src/main/resources/gremlinResources/localization/kor/PowerStrings.json +++ b/src/main/resources/gremlinResources/localization/kor/PowerStrings.json @@ -36,13 +36,13 @@ "Gremlin:Crippled": { "NAME": "무력화", "DESCRIPTIONS": [ - "턴 종료 시 #y약화를 잃지 않습니다. 적 턴 종료 시 #b약화만큼 체력을 잃습니다." + "이 적에게 약화를 부여할 때마다 이 적은 체력을 #b 잃습니다." ] }, "Gremlin:Encore": { "NAME": "앙코르", "DESCRIPTIONS": [ - "#y마법을 소모할 때마다 적 전체에게 피해를 #b", " 줍니다." + "#y마법의 피해량이 #b", " 증가합니다." ] }, "Gremlin:Enthusiasm": { @@ -166,7 +166,8 @@ "Gremlin:SneakyGremlin": { "NAME": "교활한 그렘린", "DESCRIPTIONS": [ - "공격 카드를 사용할 때마다 무작위 적에게 피해를 #b", + "비용이 0인 공격 카드 사용 시 추가로 피해를 #b", + " 줍니다. 공격 카드를 사용할 때마다 무작위 적에게 피해를 #b", " 줍니다." ] }, diff --git a/src/main/resources/gremlinResources/localization/kor/RelicStrings.json b/src/main/resources/gremlinResources/localization/kor/RelicStrings.json index 791873f16..84b296d47 100644 --- a/src/main/resources/gremlinResources/localization/kor/RelicStrings.json +++ b/src/main/resources/gremlinResources/localization/kor/RelicStrings.json @@ -98,7 +98,7 @@ "NAME": "보급형 두루마리", "FLAVOR": "놀랍도록 상세하게 적힌 그렘린들의 잡동사니 목록입니다.", "DESCRIPTIONS": [ - "3번째 턴 시작 시 [E] 를 얻고 카드를 #b2 장 뽑습니다." + "3번째 턴 시작 시 [E] [E] 를 얻고 카드를 #b2 장 뽑습니다." ] }, "Gremlin:TagTeamwork": { diff --git a/src/main/resources/gremlinResources/localization/spa/CardStrings.json b/src/main/resources/gremlinResources/localization/spa/CardStrings.json new file mode 100644 index 000000000..fc3c141d0 --- /dev/null +++ b/src/main/resources/gremlinResources/localization/spa/CardStrings.json @@ -0,0 +1,428 @@ +{ + "Gremlin:AggressiveDefense": { + "NAME": "Defensa Agresiva", + "DESCRIPTION": "Haz !D! de daño. NL Cada vez que ganes Bloqueo este turno, el enemigo pierde !M! de PV." + }, + "Gremlin:ArmsTheft": { + "NAME": "Robo de Armas", + "DESCRIPTION": "Aplica !M! Débil. NL gremlin:Roba !M! de Fuerza. NL Agota." + }, + "Gremlin:Astound": { + "NAME": "Asombro", + "DESCRIPTION": "Gana !B! de Bloqueo. NL Si tienes 3 o más gremlin:Magia, gana !M! *Protecciones.", + "UPGRADE_DESCRIPTION": "Gana !B! de Bloqueo. NL Si tienes 3 o más gremlin:Magia, gana !M! *Protecciones Mejoradas." + }, + "Gremlin:Bang": { + "NAME": "¡Bang!", + "DESCRIPTION": "Haz !D! de daño !M! veces. Añade una *Magia a tu pila de descarte. NL Agota.", + "UPGRADE_DESCRIPTION": "Haz !D! de daño !M! veces. Añade una *Mahia+ a tu pila de descarte. NL Agota." + }, + "Gremlin:Bellow": { + "NAME": "Bramido", + "DESCRIPTION": "Etérea. NL Gana !M! de Fuerza por cada enemigo que no tenga intención de Atacar. NL Agota." + }, + "Gremlin:BrokenShin": { + "NAME": "Espinilla Rota", + "DESCRIPTION": "Aplica gremlin:Agonía por cada !M! acumulación de Débil que tenga el objetivo. NL Agota." + }, + "Gremlin:BubbleBarrier": { + "NAME": "Barrera de Burbujas", + "DESCRIPTION": "Cada vez que juegues una carta este turno, gana !M! de Bloqueo." + }, + "Gremlin:BulkUp": { + "NAME": "Engrosarse", + "DESCRIPTION": "Gana !M! de PV temporales. NL gremlin:Cambia a gremlin:Gremlin_Obeso." + }, + "Gremlin:BurlyBlow": { + "NAME": "Golpe Fornido", + "DESCRIPTION": "Haz !D! de daño. NL Repite por cada acumulación de Débil." + }, + "Gremlin:CatScratch": { + "NAME": "Arañazo Gatuno", + "DESCRIPTION": "Haz !D! de daño !M! veces." + }, + "Gremlin:Changeo": { + "NAME": "¡Cambio!", + "DESCRIPTION": "Gana !B! de Bloqueo y !M! gremlin:Magia." + }, + "Gremlin:CongaLine": { + "NAME": "Conga", + "DESCRIPTION": "Al inicio de tu turno, gana [E] y gremlin:Cambia al siguiente Gremlin.", + "UPGRADE_DESCRIPTION": "Innata. NL Al inicio de tu turno, gana [E] y gremlin:Cambia al siguiente Gremlin." + }, + "Gremlin:CounterStrike": { + "NAME": "Contraataque", + "DESCRIPTION": "Haz !D! de daño. NL Si el enemigo tiene intención de atacar, activa el Bono de tu Gremlin actual !M! veces." + }, + "Gremlin:CowerChoice": { + "NAME": "Acobardarse", + "DESCRIPTION": "Pierdes todo tu oro.", + "EXTENDED_DESCRIPTION": ["LOS GREMLINS COBARDES NO SON TONTOS."] + }, + "Gremlin:CowerChoiceB": { + "NAME": "Acobardarse", + "DESCRIPTION": "Pierdes permanentemente al Gremlin más al fondo.", + "EXTENDED_DESCRIPTION": ["Bien. Ahora el resto, ¡fuera!", "¡Sí! ¡Lárguense!"] + }, + "Gremlin:DaggerDance": { + "NAME": "Danza de Dagas", + "DESCRIPTION": "Haz !D! de daño a TODOS los enemigos !M! veces." + }, + "Gremlin:Dazzle": { + "NAME": "Deslumbrar", + "DESCRIPTION": "Haz !D! de daño. NL Si tienes 3 o más gremlin:Magia, gremlin:Roba 2 de Fuerza. NL Agota." + }, + "Gremlin:Defend": { + "NAME": "Defensa", + "DESCRIPTION": "Gana !B! de Bloqueo." + }, + "Gremlin:Duplicate": { + "NAME": "Duplicar", + "DESCRIPTION": "Elige un Ataque. NL Crea !M! expansioncontent:Eco. NL Estas *Copias cuestan 1 menos. NL Agota.", + "UPGRADE_DESCRIPTION": "Elige un Ataque. Crea !M! expansioncontent:Eco. NL Estas *Copias cuestan 1 menos." + }, + "Gremlin:EdibleArmor": { + "NAME": "Armadura Comestible", + "DESCRIPTION": "Convierte tu Bloqueo en PV temporales. NL Agota." + }, + "Gremlin:Encore": { + "NAME": "Otra Más", + "DESCRIPTION": "Gana 3 gremlin:Magia. NL gremlin:Magia hace !M! más de daño." + }, + "Gremlin:Enthusiasm": { + "NAME": "Entusiasmo", + "DESCRIPTION": "Cada vez que gremlin:Cambies, roba una carta." + }, + "Gremlin:Erupt": { + "NAME": "Erupción", + "DESCRIPTION": "Gana !M! de Fuerza temporal. NL Agota." + }, + "Gremlin:Exacerbate": { + "NAME": "Exacerbar", + "DESCRIPTION": "Haz !D! de daño. NL Cada vez que apliques Débil a este enemigo, pierde !M! de PV. NL Agota." + }, + "Gremlin:FairyDust": { + "NAME": "Polvo de Hada", + "DESCRIPTION": "Gana !M! *Protecciones y roba !M! cartas. NL Agota." + }, + "Gremlin:SleeveOfAces": { + "NAME": "Manga de Ases", + "DESCRIPTION": "Haz !D! de daño. NL Gana 1 Navaja por cada acumulación de gremlin:Magia que tengas.", + "UPGRADE_DESCRIPTION": "Haz !D! de daño. NL Gana 1 Navaja Mejorada por cada acumulación de gremlin:Magia que tengas." + }, + "Gremlin:FatGremlin": { + "NAME": "Gremlin Obeso", + "DESCRIPTION": "gremlin:Cambia a gremlin:Gremlin_Obeso." + }, + "Gremlin:FeelTheAudience": { + "NAME": "Siente a la Audiencia", + "DESCRIPTION": "Haz !D! de daño a TODOS los enemigos. NL Gana !M! gremlin:Magia por cada uno que tenga intención de atacar." + }, + "Gremlin:FightChoice": { + "NAME": "Pelear", + "DESCRIPTION": "Inicia el combate. NL El enemigo gana !M! de Fuerza.", + "EXTENDED_DESCRIPTION": ["¡LOS GREMS MUEREN AHORA!", "¡Alguien está pidiendo una paliza!"] + }, + "Gremlin:FlipOut": { + "NAME": "Descontrol", + "DESCRIPTION": "Haz !D! de daño. NL Cuando ganes Bloqueo este turno, en su lugar haz esa cantidad de daño a TODOS los enemigos." + }, + "Gremlin:Flurry": { + "NAME": "Ráfaga", + "DESCRIPTION": "Haz !D! de daño por cada carta jugada este turno. NL Agota.", + "EXTENDED_DESCRIPTION": [ + " NL (", + " carta jugada.)", + " cartas jugadas.)" + ] + }, + "Gremlin:FollowThrough": { + "NAME": "¡Por el Líder!", + "DESCRIPTION": "Haz !D! de daño. NL Gana !M! de Fuerza temporal." + }, + "Gremlin:Fury": { + "NAME": "Furia", + "DESCRIPTION": "Cuesta 1 [E] menos por cada 2 de Fuerza que tengas. NL Haz !D! de daño 3 veces." + }, + "Gremlin:Glimmer": { + "NAME": "Destello", + "DESCRIPTION": "Haz !D! de daño. NL Gana 2 *Protecciones.", + "UPGRADE_DESCRIPTION": "Haz !D! de daño. NL Gana 2 *Protecciones Mejoradas." + }, + "Gremlin:GlitterGuard": { + "NAME": "Guardián Brillante", + "DESCRIPTION": "Gana !M! *Protecciones. NL gremlin:Cambia a gremlin:Gremlin_Reservado.", + "UPGRADE_DESCRIPTION": "Gana !M! *Protecciones Mejoradas. NL gremlin:Cambia a gremlin:Gremlin_Reservado." + }, + "Gremlin:GremlinArms": { + "NAME": "Brazos Gremlin", + "DESCRIPTION": "Activa el Bono de tu Gremlin actual, gremlin:Cambia a un Gremlin vivo de tu elección.", + "UPGRADE_DESCRIPTION": "Activa el Bono de tu Gremlin actual dos veces, gremlin:Cambia a un Gremlin vivo de tu elección." + }, + "Gremlin:GremlinMeal": { + "NAME": "Flexión", + "DESCRIPTION": "Gana !M! de Fuerza temporal." + }, + "Gremlin:GremlinDance": { + "NAME": "Danza Gremlin", + "DESCRIPTION": "Haz !D! de daño. NL Tiene un efecto adicional dependiendo de qué Gremlin eres.", + "EXTENDED_DESCRIPTION": [ + "Haz !D! de daño", + " a TODOS los enemigos.", + ". NL El enemigo pierde !M! de Fuerza este turno.", + ". NL Gana !B! de Bloqueo.", + ". NL Roba !M! cartas.", + ". NL Gana !M! gremlin:Magia.", + ". NL Gana !M! de Fuerza." + ] + }, + "Gremlin:GremlinOffensive": { + "NAME": "Ofensiva Gremlin", + "DESCRIPTION": "Haz !D! de daño. NL Gana un *Ofensiva *Gremlin. NL Agota.", + "UPGRADE_DESCRIPTION": "Haz !D! de daño. NL Gana un *Ofensiva *Gremlin Mejorado. NL Agota." + }, + "Gremlin:GremlinToss": { + "NAME": "Lanzamiento Gremlin", + "DESCRIPTION": "Gana !M! PV temporales. NL Haz daño igual a tu Bloqueo actual más *PV *temporales.", + "UPGRADE_DESCRIPTION": "Gana !M! PV temporales. NL Haz daño igual a tu Bloqueo actual más *PV *temporales.", + "EXTENDED_DESCRIPTION": [" NL (Haz !D! de daño.)"] + }, + "Gremlin:GremlinWizard": { + "NAME": "Gremlin Mago", + "DESCRIPTION": "gremlin:Cambia a gremlin:Gremlin_Mago." + }, + "Gremlin:Heckle": { + "NAME": "Burla", + "DESCRIPTION": "Cada vez que apliques una desventaja a un enemigo, gana !M! PV temporales." + }, + "Gremlin:InfiniteBlocks": { + "NAME": "Bloqueos Infinitos", + "DESCRIPTION": "Al inicio de tu turno, gana una *Protección.", + "UPGRADE_DESCRIPTION": "Innata. NL Al inicio de tu turno, gana una *Protección." + }, + "Gremlin:IrksomeBlow": { + "NAME": "Golpe Molesto", + "DESCRIPTION": "Haz !D! de daño. NL La Fuerza afecta esta carta !M! veces." + }, + "Gremlin:Irritability": { + "NAME": "Irritabilidad", + "DESCRIPTION": "Gana !B! de Bloqueo. NL Gana !M! Espinas temporales. NL gremlin:Cambia a gremlin:Gremlin_Guerrero." + }, + "Gremlin:Jeer": { + "NAME": "Burlarse", + "DESCRIPTION": "Haz !D! de daño. Si el enemigo tiene una desventaja, gana !M! PV temporales." + }, + "Gremlin:Kablamo": { + "NAME": "¡Kaboom!", + "DESCRIPTION": "Haz !D! de daño a TODOS los enemigos dos veces. NL Este ataque no consume gremlin:Magia." + }, + "Gremlin:LeaderChoice": { + "NAME": "Tomar una decisión", + "DESCRIPTION": "¿Rendirás a tu amigo?" + }, + "Gremlin:MadGremlin": { + "NAME": "Gremlin Guerrero", + "DESCRIPTION": "gremlin:Cambia a gremlin:Gremlin_Guerrero." + }, + "Gremlin:MakeshiftArmor": { + "NAME": "Armadura Improvisada", + "DESCRIPTION": "Cada vez que juegues 7 ataques, gana 1 Artefacto.", + "UPGRADE_DESCRIPTION": "Gana !M! Artefacto. NL Cada vez que juegues 7 ataques, gana 1 Artefacto." + }, + "Gremlin:Mockery": { + "NAME": "Mofa", + "DESCRIPTION": "Aplica !M! Débil. NL Si el enemigo tiene 3 o más Débil, gana !B! de Bloqueo." + }, + "Gremlin:Necromancy": { + "NAME": "Nigromancia", + "DESCRIPTION": "Requiere 3 gremlin:Magia. NL Consume toda tu gremlin:Magia para resucitar a un Gremlin aleatorio con !M! PV. NL Agota.", + "EXTENDED_DESCRIPTION": ["No hay suficiente poder.", "Nadie ha muerto todavía.", "No hay espacio suficiente."] +}, + "Gremlin:Nob": { + "NAME": "NOB", + "DESCRIPTION": "Gana !M! PV temporales. NL Te conviertes en *Gremlin gremlin:Nob hasta que se acaben los *PV *temporales." + }, + "Gremlin:NobChoice": { + "NAME": "Tomar una decisión", + "DESCRIPTION": "¿Los Gremlins débiles entregan oro?" + }, + "Gremlin:PartyStick": { + "NAME": "Palo de Fiesta", + "DESCRIPTION": "Etérea. Injugable. NL Cada vez que gremlin:Cambies, gana [E]", + "UPGRADE_DESCRIPTION": "Injugable. NL Cada vez que gremlin:Cambies, gana [E]", + "EXTENDED_DESCRIPTION": ["Nadie tiene permitido jugar con el Palo de Fiesta."] + }, + "Gremlin:Patsy": { + "NAME": "Chivo Expiatorio", + "DESCRIPTION": "Gana !B! de Bloqueo. NL gremlin:Cambia al siguiente Gremlin." + }, + "Gremlin:Pickpocket": { + "NAME": "Carterista", + "DESCRIPTION": "Haz !D! de daño. NL El objetivo pierde !M! de Fuerza este turno, dos veces. NL Gana !blamage! de oro. NL Agota." + }, + "Gremlin:PinNeedle": { + "NAME": "Aguja de Alfiler", + "DESCRIPTION": "Haz !D! de daño. NL bronze:Inserta !M! *Pinchazos. NL Agota.", + "UPGRADE_DESCRIPTION": "Haz !D! de daño. NL bronze:Inserta !M! *Pinchazos Mejorados. NL Agota." + }, + "Gremlin:Pinprick": { + "NAME": "Pinchazo", + "DESCRIPTION": "Haz !D! de daño. NL Roba una carta. NL Agota.", + "UPGRADE_DESCRIPTION": "Al robarla, crea un expansioncontent:Eco. NL Haz !D! de daño. NL Roba una carta. NL Agota." + }, + "Gremlin:Polish": { + "NAME": "Pulir", + "DESCRIPTION": "Las Navajas Hacen !M! de daño adicional. NL Las *Protecciones otorgan !M! de Bloqueo adicional." + }, + "Gremlin:PourSalt": { + "NAME": "Echar Sal", + "DESCRIPTION": "Haz !D! de daño. Si el enemigo está Débil, elimina una acumulación para ganar !M! Navajas." + }, + "Gremlin:Presto": { + "NAME": "¡Presto!", + "DESCRIPTION": "Haz !D! de daño. Gana !M! gremlin:Magia." + }, + "Gremlin:Pretaliation": { + "NAME": "Pre-talión", + "DESCRIPTION": "Haz !D! de daño dos veces. NL El enemigo te ataca por !M! de daño." + }, + "Gremlin:ProperTools": { + "NAME": "Herramientas Apropiadas", + "DESCRIPTION": "Haz !D! de daño. Si el enemigo planea atacar, gana !M! *Protecciones. De lo contrario, gana !M! Navajas." + }, + "Gremlin:RageBreak": { + "NAME": "Explosión de Ira", + "DESCRIPTION": "Duplica tu Fuerza. NL Agota.", + "UPGRADE_DESCRIPTION": "Gana !B! de Bloqueo. NL Duplica tu Fuerza. NL Agota." + }, + "Gremlin:Raid": { + "NAME": "Redada", + "DESCRIPTION": "Roba una carta por cada Gremlin vivo. NL Descarta !M! cartas.", + "UPGRADE_DESCRIPTION": "Roba una carta por cada Gremlin vivo. NL Descarta !M! cartas." + }, + "Gremlin:Revel": { + "NAME": "Festín", + "DESCRIPTION": "Gana [E] por cada Gremlin vivo." + }, + "Gremlin:Rhythm": { + "NAME": "Ritmo", + "DESCRIPTION": "gremlin:Cambia al siguiente Gremlin. NL Trae una carta Básica de tu pila de robo. Cuesta 0 este turno." + }, + "Gremlin:Rush": { + "NAME": "Embate", + "DESCRIPTION": "Etérea. NL Haz !D! de daño. NL Agota." + }, + "Gremlin:Scatter": { + "NAME": "¡Dispersarse!", + "DESCRIPTION": "La próxima vez que fueras a perder PV, en su lugar gremlin:Cambia a un Gremlin aleatorio. NL Agota." + }, + "Gremlin:SecondVolley": { + "NAME": "Segunda Ráfaga", + "DESCRIPTION": "Haz !D! de daño. NL Gana una Navaja por cada carta jugada este turno o hasta llenar tu mano.", + "UPGRADE_DESCRIPTION": "Haz !D! de daño. NL Gana una Navaja+ por cada carta jugada este turno o hasta llenar tu mano.", + "EXTENDED_DESCRIPTION": [ + " NL (", + " carta jugada.)", + " cartas jugadas.)" + ] + }, + "Gremlin:ShadowShiv": { + "NAME": "Navaja Sombría", + "DESCRIPTION": "Cada vez que juegues un Ataque que no se agote, gana una Navaja." + }, + "Gremlin:ShankStone": { + "NAME": "Piedra de Apuñalar", + "DESCRIPTION": "Injugable. NL Cada vez que robes esta carta, gana !M! Navaja.", + "EXTENDED_DESCRIPTION": ["No puedo jugar esta carta."] + }, + "Gremlin:SharpenBlades": { + "NAME": "Afilar Hojas", + "DESCRIPTION": "Reduce el coste de todos los Ataques en tu mano a 0 este turno.", + "UPGRADE_DESCRIPTION": "Roba una carta. NL Reduce el coste de todos los Ataques en tu mano a 0 este turno." + }, + "Gremlin:ShieldGremlin": { + "NAME": "Gremlin Reservado", + "DESCRIPTION": "gremlin:Cambia a gremlin:Gremlin_Reservado." + }, + "Gremlin:ShowOfHands": { + "NAME": "Manos Arriba", + "DESCRIPTION": "Gana !M! de Bloqueo por cada carta en tu mano.", + "UPGRADE_DESCRIPTION": "Roba una carta. NL Gana !M! de Bloqueo por cada carta en tu mano." + }, + "Gremlin:ShowStopper": { + "NAME": "El Gran Final", + "DESCRIPTION": "Solo se puede jugar si tienes exactamente 7 gremlin:Magia. NL Haz !D! de daño a TODOS los enemigos !M! veces.", + "EXTENDED_DESCRIPTION": ["No hay suficiente suspenso.", "El momento se ha arruinado."] + }, + "Gremlin:SkullBash": { + "NAME": "Golpe de Cráneo", + "DESCRIPTION": "Etérea. NL Haz !D! de daño. NL Aplica !M! Vulnerable. NL Agota." + }, + "Gremlin:SneakyGremlin": { + "NAME": "Gremlin Ladrón", + "DESCRIPTION": "gremlin:Cambia a gremlin:Gremlin_Ladrón." + }, + "Gremlin:Strike": { + "NAME": "Golpe", + "DESCRIPTION": "Haz !D! de daño." + }, + "Gremlin:Stupend": { + "NAME": "Brutote", + "DESCRIPTION": "Gana !B! de Bloqueo. NL Haz !D! de daño. NL El Bloqueo se ve afectado por gremlin:Magia." + }, + "Gremlin:SupplyScrollCard": { + "NAME": "Pergamino de Suministros", + "DESCRIPTION": "Gana una selección aleatoria de !M! Navaja y *Protecciones. NL Agota." + }, + "Gremlin:Tadah": { + "NAME": "¡Tachán!", + "DESCRIPTION": "Gana una *Protección. NL gremlin:Cambia a gremlin:Gremlin_Mago.", + "UPGRADE_DESCRIPTION": "Gana una *Protección Mejorada. NL gremlin:Cambia a gremlin:Gremlin_Mago." + }, + "Gremlin:TagTeam": { + "NAME": "Relevo", + "DESCRIPTION": "gremlin:Cambia a un Gremlin vivo de tu elección.", + "UPGRADE_DESCRIPTION": "Retiene. NL gremlin:Cambia a un Gremlin vivo de tu elección." + }, + "Gremlin:TargetWeakness": { + "NAME": "Atacar Heridas", + "DESCRIPTION": "Haz !M! de daño adicional a enemigos Débiles." + }, + "Gremlin:Tricksy": { + "NAME": "Astuto", + "DESCRIPTION": "Roba !M! cartas, descarta todas las que no sean Ataques. NL gremlin:Cambia a gremlin:Gremlin_Ladrón." + }, + "Gremlin:TwistTheKnife": { + "NAME": "Girar la Daga", + "DESCRIPTION": "Haz !D! de daño. NL Gana 1 Navaja.", + "UPGRADE_DESCRIPTION": "Haz !D! de daño. NL Gana 1 Navaja+." + }, + "Gremlin:ToeStub": { + "NAME": "Tropezón", + "DESCRIPTION": "Haz !D! de daño. Si el enemigo está Débil, aplica !M! Vulnerable." + }, + "Gremlin:Unforgiving": { + "NAME": "Implacable", + "DESCRIPTION": "No puedes perder Fuerza." + }, + "Gremlin:Ward": { + "NAME": "Protección", + "DESCRIPTION": "Gana !B! de Bloqueo. NL Agota." + }, + "Gremlin:Whiz": { + "NAME": "Magia", + "DESCRIPTION": "Gana !M! gremlin:Magia. En el próximo turno, gana un *Bang. NL Agota.", + "UPGRADE_DESCRIPTION": "Gana !M! gremlin:Magia. En el próximo turno, gana un *Bang Mejorado. NL Agota." + }, + "Gremlin:Wizardry": { + "NAME": "Hechicería", + "DESCRIPTION": "Al inicio de tu turno, gana !M! gremlin:Magia.", + "UPGRADE_DESCRIPTION": "Innata. NL Al inicio de tu turno, gana !M! gremlin:Magia." + }, + "Gremlin:Placeholder": { + "NAME": "", + "DESCRIPTION": "", + "UPGRADE_DESCRIPTION": "", + "EXTENDED_DESCRIPTION": [""] + } +} diff --git a/src/main/resources/gremlinResources/localization/spa/CharacterStrings.json b/src/main/resources/gremlinResources/localization/spa/CharacterStrings.json new file mode 100644 index 000000000..5ef837675 --- /dev/null +++ b/src/main/resources/gremlinResources/localization/spa/CharacterStrings.json @@ -0,0 +1,15 @@ +{ + "Gremlin": { + "NAMES": [ + "Los Gremlins" + ], + "TEXT": [ + "Una turba caótica de habitantes de la Aguja unidos NL en busca de comida y tesoros.", + "NL ¡Qué festín! Afilas tus cuchillos." + ], + "KEYWORDS": [ + "Una turba caótica de habitantes de la Aguja unidos NL en busca de comida y tesoros.", + "NL ¡Qué festín! Afilas tus cuchillos." + ] + } +} diff --git a/src/main/resources/gremlinResources/localization/spa/EventStrings.json b/src/main/resources/gremlinResources/localization/spa/EventStrings.json new file mode 100644 index 000000000..31ce29f66 --- /dev/null +++ b/src/main/resources/gremlinResources/localization/spa/EventStrings.json @@ -0,0 +1,110 @@ +{ + "Gremlin:CursedTome": { + "OPTIONS": [ + "[Tomar] #gObtén #gel #gLibro. #rTodos #rlos #rGremlins #rpierden #r" + ] + }, + "Gremlin:BackToBasics": { + "NAME": "", + "DESCRIPTIONS": [ + "Una mente flexible no se ve agobiada por la duda." + ], + "OPTIONS": [ + "[Capricho] #gReemplaza todos los #gGolpes y #gDefensas por #gShivs y #gBarreras.", + "[Bloqueado] Requiere un Golpe o Defensa." + ] + }, + "Gremlin:KnowingSkull": { + "OPTIONS": [ + "[¿Información?] #gRevela #gal #gJefe. #rTodos #rlos #rGremlins #rpierden #r", + "[¿Suerte?] #gObtén #guna #gCarta #gIncolora. #rTodos #rlos #rGremlins #rpierden #r", + "[¿Un Respiro?] #gObtén #guna #gPoción. #rTodos #rlos #rGremlins #rpierden #r", + " #gOro. #rTodos #rlos #rGremlins #rpierden #r", + "[¿Cómo salgo de aquí?] #rTodos #rlos #rGremlins #rpierden #r" + ] + }, + "Gremlin:MatchingGame": { + "DESCRIPTIONS": [ + "\" #b¡Doce cartas! ¡Empárcalas para quedártelas! #bCinco intentos...\" NL NL \" #b¡Diez intentos!\" interrumpes. NL NL El gremlin frunce el ceño. \" #b¡Cinco intentos!\" NL NL \" #bOcho.\" NL NL \" #bSeis,\" escupe. \"Y espero que te #pMaldecido.\" NL NL Tú esperas que él también lo sea.", + "Terminas el juego del gremlin y miras hacia arriba. NL Se escapó antes de que pudieras conseguir más #y~cosas~ #y~gratis!~", + "Un gremlin baraja frenéticamente unas cartas sobre la mesa. Parece estar ofreciendo #y~cosas~ #y~gratis.~ Y tú quieres #y~cosas~ #y~gratis.~" + ] + }, + "Gremlin:Nest": { + "OPTIONS": [ + "[Esperar en la fila] #gObtén Daga Ritual. #rTodos #rlos #rGremlins #rpierden #r" + ] + }, + "Gremlin:ScrapOoze": { + "OPTIONS": [ + "[Meter la mano] #rTodos #rlos #rGremlins #rpierden #r", + "[Más profundo] #rTodos #rlos #rGremlins #rpierden #r" + ] + }, + "Gremlin:ScrapOozeReplacement": { + "NAME": "Baba Chatarra", + "DESCRIPTIONS": [ + "Al entrar en la habitación, escuchas un ~gorgoteo~ y el @rechinar@ de metales. ¡Es una #yBaba #yChatarra! Estas graciosas babas siempre encuentran #ycosas #yútiles. Mejor aún, son tan lentas y débiles que no pueden detenerte. Sabes cómo evitar su ácido puntiagudo, pero requiere #rconcentración.", + "Con cuidado, con cuidado. Evitas las partes filosas y cortantes. Ojalá no fuera tan #r@aburrido.@ NL Pero si sigues intentándolo, sabes que encontrarás una #yreliquia brillante...", + "#g¡Éxito! NL Tras hurgar entre metales y ácido ardiente, por fin tomas una #yreliquia y la arrancas. NL Sales de la baba aferrado a tu nuevo juguete.", + "Esto es demasiado #raburrido. ¿Qué estabas haciendo, siquiera?", + "Decides dejar el área. NL La baba no presta atención, satisfecha con su comida." + ], + "OPTIONS": [ + "[Buscar con cuidado] #r", + "%: #rObtén #rMaldición #r- #rDisperso. #g", + "%: #gEncuentra #guna #gReliquia.", + "[Irse]", + "[Ser cuidadoso] #r" + ] + }, + "Gremlin:SensoryStone": { + "OPTIONS": [ + "[Recordar] #gAgrega #g2 #gCartas #gIncoloras #ga #gtu #gmazo. #rTodos #rlos #rGremlins #rpierden #r", + "[Recordar] #gAgrega #g3 #gCartas #gIncoloras #ga #gtu #gmazo. #rTodos #rlos #rGremlins #rpierden #r" + ] + }, + "Gremlin:Trenchcoat": { + "NAME": "Mercader Sospechoso", + "DESCRIPTIONS": [ + "Te topas con una figura extraña que claramente parecen ser cinco gremlins en una gabardina. NL \"Hola, viajero,\" dice una voz chillona. NL \"Soy el #yamable #yMercader, definitivamente no cinco gremlins disfrazados. ¿Te interesan mis ~finos~ ~productos~ que ciertamente no fueron robados?\"", + "No puedes resistirte a una ganga, ni siquiera de un tipo tan sospechoso. NL Haces tu compra, pero en cuanto terminas, el vendedor huye. NL NL A lo lejos, casi puedes escuchar un grito de frustración: #r\"¡Malditos #rgremlins #rladrones!\"", + "No tienes intención de enriquecer al despreciable mercader. Guardas tu dinero. El Mercader huye al notar que no comprarás." + ], + "OPTIONS": [ + "[Comprar] #rPierde #r", + " #rOro", + ". #gObtén #g1 #gCarta #gIncolora #galeatoria.", + ". #gObtén #g2 #gCartas #gIncoloras #galeatorias.", + ". #gObtén #g3 #gCartas #gIncoloras #galeatorias.", + "[Irse]", + "[Bloqueado] Requiere al menos ", + " de Oro.", + "[Rechazar]" + ] + }, + "Gremlin:Vampires": { + "DESCRIPTIONS": [ + "Caminando por una calle oscura, te encuentras con varias figuras encapuchadas realizando un ritual. Al acercarte, se giran al unísono. El más alto muestra colmillos y extiende una mano pálida. NL ~\"Únete~ ~a~ ~nosotros,~ ~codicioso~ ~Gremlin,~ ~y~ ~siente~ ~el~ ~calor~ ~de~ ~la~ ~Aguja.\"~" + ] + }, + "Gremlin:WheelGame": { + "DESCRIPTIONS": [ + "Se lanza sobre ti, pero estás preparado. NL Lo cortas antes de que te apuñale. NL Te quedas con tu premio, pero lamentablemente la Rueda desaparece antes de poder saquearla." + ], + "OPTIONS": [ + "[¡Premio!] #g¡ATAQUE #gPREVENTIVO!", + "[Saqueo]" + ] + }, + "Gremlin:WingStatue": { + "OPTIONS": [ + "[Rezar] #gElimina #guna #gcarta #gde #gtu #gmazo. #rTodos #rlos #rGremlins #rpierden #r" + ] + }, + "Gremlin:WorldOfGoop": { + "OPTIONS": [ + " #gOro. #rTodos #rlos #rGremlins #rpierden #r" + ] + } +} diff --git a/src/main/resources/gremlinResources/localization/spa/KeywordStrings.json b/src/main/resources/gremlinResources/localization/spa/KeywordStrings.json new file mode 100644 index 000000000..f8ff743e5 --- /dev/null +++ b/src/main/resources/gremlinResources/localization/spa/KeywordStrings.json @@ -0,0 +1,64 @@ +[ + { + "NAMES": ["agony","agonía"], + "PROPER_NAME": "Agonía", + "DESCRIPTION": "Las criaturas en Agonía infligen #b80% menos daño con Ataques." + }, + { + "NAMES": ["lisiado", "cripple"], + "PROPER_NAME": "Lisiado", + "DESCRIPTION": "Los enemigos Lisiados ya no pueden perder #yDébil [REMOVE_SPACE]. Al final de su turno, pierden PV igual a su #yDébil [REMOVE_SPACE]." + }, + { + "NAMES": ["echo","echo", + "echoes", "eco"], + "PROPER_NAME": "Eco", + "DESCRIPTION": "Los Ecos son copias de cartas con #yEtérea y que se #yAgotan [REMOVE_SPACE]." + }, + { + "NAMES": ["fat gremlin","fat_gremlin","gremlin obeso","gremlin_obeso"], + "PROPER_NAME": "Gremlin Obeso", + "DESCRIPTION": "Después de jugar un Ataque, aplica #b1 de #yDébil a todos los objetivos." + }, + { + "NAMES": ["gremlin wizard","gremlin_wizard","gremlin mago", "gremlin_mago"], + "PROPER_NAME": "Gremlin Mago", + "DESCRIPTION": "Después de jugar una Habilidad, gana #b1 de #yMagia [REMOVE_SPACE]." + }, + { + "NAMES": ["mad gremlin","mad_gremlin","gremlin guerrero", "gremlin_guerrero"], + "PROPER_NAME": "Gremlin Guerrero", + "DESCRIPTION": "Gana #b2 de #yFuerza #yTemporal cuando recibes un ataque." + }, + { + "NAMES": ["shield gremlin","shield_gremlin","gremlin reservado","gremlin_reservado"], + "PROPER_NAME": "Gremlin Reservado", + "DESCRIPTION": "Después de jugar una Habilidad, gana #b2 de #yBloqueo [REMOVE_SPACE]." + }, + { + "NAMES": ["sneaky gremlin","sneaky_gremlin","gremlin ladrón","gremlin_ladrón"], + "PROPER_NAME": "Gremlin Ladrón", + "DESCRIPTION": "Los Ataques de coste 0 infligen #b2 de daño adicional. Después de jugar un Ataque, inflige #b2 de daño a un enemigo aleatorio." + }, + { + "NAMES": ["swap","cambia", "cambies"], + "PROPER_NAME": "Cambia", + "DESCRIPTION": "Cambia de lugar con otro personaje. No hace nada si no hay un objetivo válido." + }, + { + "NAMES": ["wiz","magia"], + "PROPER_NAME": "Magia", + "DESCRIPTION": "Cuando tengas al menos tres acumulaciones de Magia, los Ataques consumirán todas las acumulaciones para infligir #b7 de daño adicional." + }, + { + "NAMES": ["steal","roba"], + "PROPER_NAME": "Roba", + "DESCRIPTION": "El objetivo pierde la cantidad indicada de un recurso. Tú ganas la misma cantidad perdida." + }, + { + "NAMES": ["nob"], + "PROPER_NAME": "Gremlin Idiota(Nob)", + "DESCRIPTION": "Al comienzo de tu turno, añade #b1 #yGrito, #yTajo #yCraneal y #yArremetida a tu mano." + } +] + diff --git a/src/main/resources/gremlinResources/localization/spa/MonsterStrings.json b/src/main/resources/gremlinResources/localization/spa/MonsterStrings.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/src/main/resources/gremlinResources/localization/spa/MonsterStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/gremlinResources/localization/spa/OrbStrings.json b/src/main/resources/gremlinResources/localization/spa/OrbStrings.json new file mode 100644 index 000000000..a72e62dad --- /dev/null +++ b/src/main/resources/gremlinResources/localization/spa/OrbStrings.json @@ -0,0 +1,42 @@ +{ + "Gremlin:FatGremlin": { + "NAME": "Gremlin Obeso", + "DESCRIPTION": [ + "Después de jugar un Ataque, aplica #b", + " de #yDébil a todos los objetivos." + ] + }, + + "Gremlin:GremlinWizard": { + "NAME": "Gremlin Mago", + "DESCRIPTION": [ + "Después de jugar una Habilidad, gana #b", + " de #yMagia [REMOVE_SPACE]." + ] + }, + + "Gremlin:MadGremlin": { + "NAME": "Gremlin Guerrero", + "DESCRIPTION": [ + "Gana #b", + " de #yFuerza #yTemporal al ser atacado." + ] + }, + + "Gremlin:ShieldGremlin": { + "NAME": "Gremlin Reservado", + "DESCRIPTION": [ + "Después de jugar una Habilidad, gana #b", + " de #yBloqueo [REMOVE_SPACE]." + ] + }, + + "Gremlin:SneakyGremlin": { + "NAME": "Gremlin Ladrón", + "DESCRIPTION": [ + "Los Ataques de coste 0 infligen #b", + " de daño adicional. Siempre que juegues un Ataque, inflige #b", + " de daño a un enemigo aleatorio." + ] + } +} diff --git a/src/main/resources/gremlinResources/localization/spa/PotionStrings.json b/src/main/resources/gremlinResources/localization/spa/PotionStrings.json new file mode 100644 index 000000000..108f2950c --- /dev/null +++ b/src/main/resources/gremlinResources/localization/spa/PotionStrings.json @@ -0,0 +1,29 @@ +{ + "gremlin:GremlinPotion": { + "NAME": "Eau de Grem", + "DESCRIPTIONS": [ + "Usa todas las #b5 Habilidades de Gremlin #b", + " veces." + ] + }, + "gremlin:NecromancyPotion": { + "NAME": "Gremlin en un Frasco", + "DESCRIPTIONS": [ + "Resucita a un Gremlin aleatorio con el #b", + "% de tus PV máximos." + ] + }, + "gremlin:SwapPotion": { + "NAME": "Duplicado Embotellado", + "DESCRIPTIONS": [ + "#yCambia a un Gremlin aleatorio." + ] + }, + "gremlin:WizPotion": { + "NAME": "Poción de Pizazz", + "DESCRIPTIONS": [ + "Gana #b", + " de #yVigor [REMOVE_SPACE]." + ] + } +} diff --git a/src/main/resources/gremlinResources/localization/spa/PowerStrings.json b/src/main/resources/gremlinResources/localization/spa/PowerStrings.json new file mode 100644 index 000000000..7157c24eb --- /dev/null +++ b/src/main/resources/gremlinResources/localization/spa/PowerStrings.json @@ -0,0 +1,201 @@ +{ + "Gremlin:Agony": { + "NAME": "Dolor Agonizante", + "DESCRIPTIONS": [ + "Los #yAtaques infligen un #b", + "% menos de daño por #b", + " turno.", + " turnos." + ] + }, + "Gremlin:Bang": { + "NAME": "Bang", + "DESCRIPTIONS": [ + "El siguiente Ataque que juegues consume todas las acumulaciones de #yMagia y causa #b", " de daño adicional." + ] + }, + "Gremlin:Bashed": { + "NAME": "Apaleado", + "DESCRIPTIONS": [ + "Cada vez que ganes #yBloqueo este turno, pierde #b", " PV." + ] + }, + "Gremlin:BubbleBarrier": { + "NAME": "Barrera Burbuja", + "DESCRIPTIONS": [ + "Cada vez que juegues una carta este turno, gana #b", " de #yBloqueo [REMOVE_SPACE]." + ] + }, + "Gremlin:CongaLine": { + "NAME": "Línea Conga", + "DESCRIPTIONS": [ + "Al comienzo de tu turno, gana ", + " y haz un #yCambio al siguiente Gremlin." + ] + }, + "Gremlin:Crippled": { + "NAME": "Lisiado", + "DESCRIPTIONS": [ + "Cada vez que este enemigo gane #yDébil [REMOVE_SPACE], pierde #b", + " PV." + ] + }, + "Gremlin:Encore": { + "NAME": "Repetición", + "DESCRIPTIONS": [ + "#yMagia inflige #b", " de daño adicional." + ] + }, + "Gremlin:Enthusiasm": { + "NAME": "Entusiasmo", + "DESCRIPTIONS": [ + "Cada vez que hagas un #yCambio, roba #b", + " carta.", + " cartas." + ] + }, + "Gremlin:FatGremlin": { + "NAME": "Gremlin Obeso", + "DESCRIPTIONS": [ + "Cada vez que juegas un Ataque, aplica #b", + " de #yDébil a todos los objetivos." + ] + }, + "Gremlin:Flex": { + "NAME": "Fuerza Disipada", + "DESCRIPTIONS": [ + "Al final de este turno, pierde #b", + " de #yFuerza [REMOVE_SPACE]." + ] + }, + "Gremlin:Furious": { + "NAME": "Furioso", + "DESCRIPTIONS": [ + "Cada vez que fueras a ganar #yBloqueo este turno, en su lugar inflige ese daño a TODOS los enemigos." + ] + }, + "Gremlin:GremlinNob": { + "NAME": "Gremlin Nob", + "DESCRIPTIONS": [ + "Al inicio de cada turno, gana #b3 cartas de Gremlin Nob. Ya no puedes hacer #yCambio [REMOVE_SPACE]. Cuando pierdas todos tus #yPV temporales [REMOVE_SPACE], prevén el daño restante y vuelve atrás." + ] + }, + "Gremlin:GremlinWizard": { + "NAME": "Gremlin Mago", + "DESCRIPTIONS": [ + "Cada vez que juegas una Habilidad, gana #b", + " de #yMagia [REMOVE_SPACE]." + ] + }, + "Gremlin:Heckle": { + "NAME": "Burlón", + "DESCRIPTIONS": [ + "Cada vez que apliques una desventaja a un enemigo, gana #b", + " de #yPV temporales [REMOVE_SPACE]." + ] + }, + "Gremlin:InfiniteBlocks": { + "NAME": "Bloqueo Infinito", + "DESCRIPTIONS": [ + "Al inicio de tu turno, gana #b", + " de #yProtección [REMOVE_SPACE].", + " de #yProtección [REMOVE_SPACE]." + ] + }, + "Gremlin:MadGremlin": { + "NAME": "Gremlin Guerrero", + "DESCRIPTIONS": [ + "Gana #b", + " de #yFuerza temporal al ser atacado." + ] + }, + "Gremlin:MakeshiftArmor": { + "NAME": "Armadura Improvisada", + "DESCRIPTIONS": [ + "Juega #b", + " Ataques más para ganar #b", + " Ataques más para ganar #b", + " de #yArtefacto [REMOVE_SPACE]." + ] + }, + "Gremlin:MakingMagic": { + "NAME": "Crear Magia", + "DESCRIPTIONS": [ + "Al comienzo de tu siguiente turno, gana #b", + " copia de #yBang [REMOVE_SPACE].", + " copias de #yBang [REMOVE_SPACE]." + ] + }, + "Gremlin:MakingMoreMagic": { + "NAME": "Crear Magia+", + "DESCRIPTIONS": [ + "Al comienzo de tu siguiente turno, gana #b", + " copia #yMejorada de #yBang [REMOVE_SPACE].", + " copias #yMejoradas de #yBang [REMOVE_SPACE]." + ] + }, + "Gremlin:Polish": { + "NAME": "Pulido", + "DESCRIPTIONS": [ + "#yGuardias otorgan #b", + " de #yBloqueo adicional [REMOVE_SPACE]." + ] + }, + "Gremlin:Scatter": { + "NAME": "Dispersión", + "DESCRIPTIONS": [ + "La próxima vez que fueras a perder PV, en su lugar haz un #yCambio a un Gremlin aleatorio.", + " veces que fueras a perder PV, en su lugar haz un #yCambio a un Gremlin aleatorio." + ] + }, + "Gremlin:ShadowShiv": { + "NAME": "Daga Sombría", + "DESCRIPTIONS": [ + "Cada vez que juegas un Ataque que no se #yAgota, gana #b", + " #yShiv [REMOVE_SPACE].", + " #yShivs [REMOVE_SPACE]." + ] + }, + "Gremlin:ShieldGremlin": { + "NAME": "Gremlin Reservado", + "DESCRIPTIONS": [ + "Cada vez que juegas una Habilidad, gana #b", + " de #yBloqueo [REMOVE_SPACE]." + ] + }, + "Gremlin:SneakyGremlin": { + "NAME": "Gremlin Ladrón", + "DESCRIPTIONS": [ + "Los Ataques que cuestan 0 infligen #b", + " más de daño. Cada vez que juegas un Ataque, inflige #b", + " de daño a un enemigo aleatorio." + ] + }, + "Gremlin:TargetWeakness": { + "NAME": "Atacar las Heridas", + "DESCRIPTIONS": [ + "Inflige #b", + " de daño adicional a enemigos #yDébiles." + ] + }, + "Gremlin:Unforgiving": { + "NAME": "Implacable", + "DESCRIPTIONS": [ + "No puedes perder #yFuerza [REMOVE_SPACE]." + ] + }, + "Gremlin:Wiz": { + "NAME": "Magia", + "DESCRIPTIONS": [ + "Cargando. NL Faltan #b", " acumulación.", " acumulaciones.", + "Listo para disparar." + ] + }, + "Gremlin:Wizardry": { + "NAME": "Magia Interior", + "DESCRIPTIONS": [ + "Al inicio de tu turno, gana #b", + " de #yMagia [REMOVE_SPACE]." + ] + } +} diff --git a/src/main/resources/gremlinResources/localization/spa/RelicStrings.json b/src/main/resources/gremlinResources/localization/spa/RelicStrings.json new file mode 100644 index 000000000..ebc72dac2 --- /dev/null +++ b/src/main/resources/gremlinResources/localization/spa/RelicStrings.json @@ -0,0 +1,143 @@ +{ + "Gremlin:ImpeccablePecs": { + "NAME": "Pectorales Impecables", + "FLAVOR": "Gloriosos.", + "DESCRIPTIONS": [ + "Cada vez que ganes #yFuerza, obtienes la misma cantidad de #yPV temporales. NL Comienzas cada combate con #b1 de #yFuerza." + ] + }, + "Gremlin:FragmentationGrenade": { + "NAME": "Granada de Fragmentación", + "FLAVOR": "Nadie se atreve a preguntar de dónde la sacó el Gremlin.", + "DESCRIPTIONS": [ + "El daño infligido a enemigos aleatorios aumenta en #b", " [REMOVE_SPACE]." + ] + }, + "Gremlin:GremlinBomb": { + "NAME": "Bomba Gremlin", + "FLAVOR": "Los Gremlins tienen un don para encontrar cosas peligrosas. A veces, hasta sobreviven.", + "DESCRIPTIONS": [ + "Cada vez que un Gremlin muere, inflige #b", " de daño a TODOS los enemigos." + ] + }, + "Gremlin:GremlinGravestone": { + "NAME": "Lápida Gremlin", + "FLAVOR": "¿A dónde van los Gremlins cuando mueren? No muy lejos, por desgracia.", + "DESCRIPTIONS": [ + "Los Gremlins muertos pueden resucitarse en Fogatas como Acción Gratuita." + ] + }, + "Gremlin:GremlinKnob": { + "NAME": "Bastón del Líder de la Banda", + "FLAVOR": "Entre las bandas de Gremlins, quien tenga el mejor cuerno manda... hasta que otro se lo robe.", + "DESCRIPTIONS": [ + "Al inicio de cada combate, gana [E] , roba #b1 carta y haz un #yCambio al siguiente Gremlin." + ] + }, + "Gremlin:GremlinKnobUpgrade": { + "NAME": "Corona del Líder de la Banda", + "FLAVOR": "Cuanto más vistoso el símbolo de autoridad, más fácil es que lo roben.", + "DESCRIPTIONS": [ + "Reemplaza ", + ". NL La primera vez que barajes tu mazo cada turno, gana [E] , roba #b1 carta y haz un #yCambio al siguiente Gremlin." + ] + }, + "Gremlin:GremlinMask": { + "NAME": "Máscara Gremlin", + "FLAVOR": "Un símbolo de estatus entre las bandas de Gremlins.", + "DESCRIPTIONS": [ + "Comienza cada combate con #b1 de #yFuerza #ytemporal." + ] + }, + "Gremlin:LeaderVoucher": { + "NAME": "Vale del Líder Gremlin", + "FLAVOR": "TE DEBO 1 Gremlin.", + "DESCRIPTIONS": [ + "Gana [E] al inicio de tu turno. NL Al obtenerla, #rpierdes #rpermanentemente #run #rGremlin.", + " NL #r( #rGremlin #rObeso #r)", + " NL #r( #rGremlin #rMago #r)", + " NL #r( #rGremlin #rGuerrero #r)", + " NL #r( #rGremlin #rReservado #r)", + " NL #r( #rGremlin #rLadrón #r)" + ] + }, + "Gremlin:MagicalMallet": { + "NAME": "Mazazo Mágico", + "FLAVOR": "Duele el doble en los dedos.", + "DESCRIPTIONS": [ + "Cada vez que apliques #yDébil, gana #b1 de #yMagia [REMOVE_SPACE], hasta #b3 veces por turno." + ] + }, + "Gremlin:PricklyShields": { + "NAME": "Escudos Puntiagudos", + "FLAVOR": "Los Gremlins usan cualquier chatarra como arma o armadura. Algunas sirven como ambas.", + "DESCRIPTIONS": [ + "Cada vez que ganes #yBloqueo [REMOVE_SPACE], inflige #b", " de daño a un enemigo aleatorio." + ] + }, + "Gremlin:ShortStature": { + "NAME": "Estatua Bajita", + "FLAVOR": "Sorprendentemente, funciona muy bien.", + "DESCRIPTIONS": [ + "La primera vez que un Gremlin fuera a morir en cada combate, en su lugar se cura al #b75% de sus PV máximos.", + "Ya fue usada en este combate." + ] + }, + "Gremlin:StolenMerchandise": { + "NAME": "Mercancía Robada", + "FLAVOR": "\"¡Malditos Gremlins ladrones!\".", + "DESCRIPTIONS": [ + "Cada vez que haces un #yCambio [REMOVE_SPACE], gana un #yEco de una carta Incolora aleatoria. NL Al inicio del combate, el Comerciante gana #b", + " de #yFuerza [REMOVE_SPACE].", + "¡Malditos, sucios ladrones!", + "¡Cobardes, asquerosos bichos!", + "¡Gremlins codiciosos y aprovechados!" + ] + }, + "Gremlin:SupplyScroll": { + "NAME": "Pergamino de Suministros", + "FLAVOR": "Un inventario sorprendentemente detallado de los cachivaches de la banda.", + "DESCRIPTIONS": [ + "Al comienzo de tu 3er turno, gana [E] [E] y roba #b2 cartas." + ] + }, + "Gremlin:TagTeamwork": { + "NAME": "Trabajo en Equipo", + "FLAVOR": "El trabajo en equipo convierte los sueños en realidad.", + "DESCRIPTIONS": [ + "Cada vez que robes #yRelevo [REMOVE_SPACE], roba otra carta. NL Al obtenerla, añade dos copias de #yRelevo a tu mazo." + ] + }, + "Gremlin:WizardHat": { + "NAME": "Sombrero de Mago", + "FLAVOR": "Las túnicas que lo acompañaban hace mucho que fueron robadas.", + "DESCRIPTIONS": [ + "Cada vez que consumas #yMagia [REMOVE_SPACE], elimina una desventaja aleatoria." + ] + }, + "Gremlin:WizardStaff": { + "NAME": "Báculo del Mago", + "FLAVOR": "Orgullo y alegría de todo Gremlin Mago, aunque suele ser robado por bandas rivales.", + "DESCRIPTIONS": [ + "#yMagia inflige #b7 de daño adicional." + ] + }, + "Gremlin:WoundPoker": { + "NAME": "Punzaheridas", + "FLAVOR": "¿Duele si hago esto?", + "DESCRIPTIONS": [ + "Al final de cada turno, inflige #b", " de daño a cada enemigo #yDébil." + ] + }, + "Gremlin:PatchFixes": { + "NAME": "Ajustes de Parche", + "FLAVOR": "Para una banda más robusta.", + "DESCRIPTIONS": [ + "Al obtenerla, aumenta los PV máximos de todos tus Gremlins en #b", + "Cuando agregues cartas a tu mazo, puedes aumentar los PV máximos de todos tus Gremlins en #b1 en su lugar.", + " #yOro. NL Aumenta los PV máximos de todos tus Gremlins en #b", + "Al final de cada quinto combate, aumenta los PV máximos de todos tus Gremlins en #b1.", + "+1 PV máximo" + ] + } +} diff --git a/src/main/resources/gremlinResources/localization/spa/RunModStrings.json b/src/main/resources/gremlinResources/localization/spa/RunModStrings.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/src/main/resources/gremlinResources/localization/spa/RunModStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/gremlinResources/localization/spa/UIStrings.json b/src/main/resources/gremlinResources/localization/spa/UIStrings.json new file mode 100644 index 000000000..da955119b --- /dev/null +++ b/src/main/resources/gremlinResources/localization/spa/UIStrings.json @@ -0,0 +1,74 @@ +{ + "Gremlin:NobFight": { + "TEXT": [ + "¡GREMS DÉBILES DAN ALMAS!", + "Tú, Enfadado. Ahora eres mío.", + "Tú, Gordo. Ahora eres mío.", + "Tú, Femenino. Ahora eres mía.", + "Tú, Nervioso. Ahora eres mío.", + "Tú. Tonto. Ahora eres mío.", + "Tú. Ahora eres mío.", + "Necesito elegir." + ] + }, + "Gremlin:GremFight": { + "TEXT": [ + "¡Aplástenles la cabeza!", + "¡Mátenlos bien muertos!", + "¡Tómenles sus cosas!" + ] + }, + "Gremlin:ResurrectOption": { + "TEXT": [ + "Resucitar", + "(Acción gratuita) Invoca a un Gremlin aleatorio desde la tumba.", + "Se requiere un Gremlin muerto.", + "El sitio de descanso ya fue profanado.", + "¡ME LEVANTO!", + "¡ME LEVANTO, DE NUEVO!", + "¡VOLVÍ POR MÁS SAQUEO!" + ] + }, + "Gremlin:RestOption": { + "TEXT": [ + "Descansar", + "Cura a todos los Gremlins un 100% de tus PV máximos (", + " PV de ", + "Cura a todos los Gremlins un 30% de tus PV máximos (", + "Si hay algún Gremlin muerto, uno será resucitado al azar." + ] + }, + "Gremlin:Swap": { + "TEXT": [ + "¡SIN CAMBIO!", + "¡NOB ES EL JEFE AHORA!", + "¡NOB MANDA PARA SIEMPRE!" + ] + }, + "Gremlin:ArtMode": { + "TEXT": [ + "Modo Artístico Gremlin", + "Los Gremlins invaden los marcos de las cartas. Solo afecta lo visual. Podría facilitar encontrar sinergias." + ] + }, + "Gremlin:BonusGold": { + "TEXT": [ + " Oro (Bonus)" + ] + }, + "Gremlin:MakeEchoAction": { + "TEXT": [ + "Eco: " + ] + }, + "Gremlin:EventReplacementStrings": { + "TEXT": [ + "#rPierde #r", + " #rPV", + "#rTodos #rlos #rGremlins #rpierden #r", + "#gGana #g", + " #gPV", + "#gTodos #glos #gGremlins #gganan #g" + ] + } +} diff --git a/src/main/resources/gremlinResources/localization/zhs/CardStrings.json b/src/main/resources/gremlinResources/localization/zhs/CardStrings.json index eacd90796..23e139f09 100644 --- a/src/main/resources/gremlinResources/localization/zhs/CardStrings.json +++ b/src/main/resources/gremlinResources/localization/zhs/CardStrings.json @@ -5,7 +5,7 @@ }, "Gremlin:ArmsTheft": { "NAME": "力量窃取", - "DESCRIPTION": "窃取 !M! 点 力量 。 NL 消耗 。" + "DESCRIPTION": "给予 !M! 层 虚弱 。 NL gremlin:窃取 !M! 点 力量 。 NL 消耗 。" }, "Gremlin:Astound": { "NAME": "惊愕", @@ -52,12 +52,11 @@ }, "Gremlin:CounterStrike": { "NAME": "破招打击", - "DESCRIPTION": "造成 !D! 点伤害。 NL 若目标意图攻击, NL 获得 !M! 张 *守卫 。", - "UPGRADE_DESCRIPTION": "造成 !D! 点伤害。 NL 若目标意图攻击, NL 获得 !M! 张 *守卫+ 。" + "DESCRIPTION": "造成 !D! 点伤害。 NL 若目标意图攻击, NL 触发 gremlin:领队 地精额外效果 !M! 次。" }, "Gremlin:CowerChoice": { "NAME": "上贡", - "DESCRIPTION": "失去所有金币。", + "DESCRIPTION": "失去所有灵魂。", "EXTENDED_DESCRIPTION": [ "弱小的地精们并不愚蠢。" ] @@ -89,11 +88,11 @@ }, "Gremlin:EdibleArmor": { "NAME": "食用护甲", - "DESCRIPTION": "将你的 格挡 转换为等量 临时生命 。" + "DESCRIPTION": "将你的 格挡 转换为等量 expansioncontent:临时生命 。 NL 消耗 。" }, "Gremlin:Encore": { "NAME": "喝彩", - "DESCRIPTION": "获得 3 层 gremlin:法力 。 NL 使用 gremlin:法力 时,对所有敌人造成 !M! 点伤害。" + "DESCRIPTION": "获得 3 层 gremlin:法力 。 NL gremlin:法力 造成的额外伤害增加 !M! 点。" }, "Gremlin:Enthusiasm": { "NAME": "狂热", @@ -105,7 +104,7 @@ }, "Gremlin:Exacerbate": { "NAME": "恶化", - "DESCRIPTION": "造成 !D! 点伤害。 NL gremlin:致残 目标。 NL 消耗 。" + "DESCRIPTION": "造成 !D! 点伤害。 NL 当你给予目标 虚弱 时,目标失去 !M! 点生命。 NL 消耗 。" }, "Gremlin:FairyDust": { "NAME": "仙尘", @@ -165,7 +164,9 @@ }, "Gremlin:GremlinArms": { "NAME": "地精武器", - "DESCRIPTION": "随机获得一张 *小刀 或 *守卫 !M! 次。" + "DESCRIPTION": "触发 gremlin:领队 地精额外效果。 NL 选择 gremlin:切换 地精。", + "UPGRADE_DESCRIPTION": "触发 gremlin:领队 地精额外效果 2 次。 NL 选择 gremlin:切换 地精。" + }, "Gremlin:GremlinMeal": { "NAME": "活动肌肉", @@ -191,12 +192,11 @@ }, "Gremlin:GremlinToss": { "NAME": "地精投掷", - "DESCRIPTION": "造成你当前 格挡 值加上 临时生命 值点伤害。", - "UPGRADE_DESCRIPTION": "获得 !M! 层 临时生命 。 NL 造成你当前 格挡 值加上 临时生命 值点伤害。", - "EXTENDED_DESCRIPTION": [ - " NL (造成 !D! 点伤害。)" - ] + "DESCRIPTION": "获得 !M! 点 expansioncontent:临时生命 。 NL 造成你当前 格挡 值加上 临时生命 值点伤害。", + "UPGRADE_DESCRIPTION": "获得 !M! 点 expansioncontent:临时生命 。 NL 造成你当前 格挡 值加上 临时生命 值点伤害。", + "EXTENDED_DESCRIPTION": [" NL (造成 !D! 点伤害。)"] }, + "Gremlin:GremlinWizard": { "NAME": "地精法师", "DESCRIPTION": " gremlin:切换 至 gremlin:地精法师 。" @@ -224,7 +224,7 @@ }, "Gremlin:Kablamo": { "NAME": "轰天响", - "DESCRIPTION": "对所有敌人造成 !D! 点伤害。 NL 本牌不移除 gremlin:法力 。" + "DESCRIPTION": "对所有敌人造成 !D! 点伤害 2 次。 NL 本牌不移除 gremlin:法力 。" }, "Gremlin:LeaderChoice": { "NAME": "取舍", @@ -258,7 +258,7 @@ }, "Gremlin:NobChoice": { "NAME": "做选择", - "DESCRIPTION": "弱小的地精交出金币?" + "DESCRIPTION": "弱小的地精交出灵魂?" }, "Gremlin:PartyStick": { "NAME": "荧光棒", @@ -274,7 +274,7 @@ }, "Gremlin:Pickpocket": { "NAME": "扒手", - "DESCRIPTION": "窃取所有 人工制品 。 NL 造成 !D! 点伤害。 NL 消耗 。" + "DESCRIPTION": "造成 !D! 点伤害。 NL 目标失去 !M! 点 力量 2 次。 NL 获得 !blamage! 灵魂。 NL 消耗 。" }, "Gremlin:PinNeedle": { "NAME": "缝衣针", @@ -300,7 +300,7 @@ }, "Gremlin:Pretaliation": { "NAME": "预审", - "DESCRIPTION": "若目标意图攻击, NL 造成 !D! 点伤害。 NL 否则造成 !blamage! 点伤害。" + "DESCRIPTION": "造成 !D! 点伤害 2 次。 NL 受到目标攻击伤害 !M! 点。" }, "Gremlin:ProperTools": { "NAME": "恰当工具", @@ -334,12 +334,12 @@ }, "Gremlin:SecondVolley": { "NAME": "余波", - "DESCRIPTION": "造成 !D! 点伤害。 NL 本回合每用过一张牌,获得一张 *小刀 。", - "UPGRADE_DESCRIPTION": "造成 !D! 点伤害。 NL 本回合每用过一张牌,获得一张 *小刀+ 。", + "DESCRIPTION": "造成 !D! 点伤害。 NL 本回合每用过1张牌,获得1张 *小刀 。 NL 溢出手牌的 *小刀 消耗 。", + "UPGRADE_DESCRIPTION": "造成 !D! 点伤害。 NL 本回合每用过1张牌,获得1张 *小刀+ 。 NL 溢出手牌的 *小刀+ 消耗 。", "EXTENDED_DESCRIPTION": [ - " NL (", - " 张牌。)", - " 张牌。)" + " NL (本回合打出过", + " 张牌。)", + " 张牌。)" ] }, "Gremlin:ShadowShiv": { @@ -369,12 +369,10 @@ }, "Gremlin:ShowStopper": { "NAME": "炫耀", - "DESCRIPTION": "恰有7层 gremlin:法力 才能打出。 NL 对所有敌人造成 !D! 点伤害五次。", - "EXTENDED_DESCRIPTION": [ - "时机未到。", - "时机已过。" - ] + "DESCRIPTION": "恰有 7 层 gremlin:法力 才能打出。 NL 对所有敌人造成 !D! 点伤害 !M! 次。", + "EXTENDED_DESCRIPTION": ["时机未到。","时机已过。"] }, + "Gremlin:SkullBash": { "NAME": "颅骨重击", "DESCRIPTION": " 虚无 。 NL 造成 !D! 点伤害。 NL 给予 !M! 层 易伤 。 NL 消耗 。" @@ -397,7 +395,8 @@ }, "Gremlin:Tadah": { "NAME": "嗒哒", - "DESCRIPTION": "随机 gremlin:回响 一张技能牌 , NL 其首次耗能为0。 NL gremlin:切换 至 gremlin:地精法师 。" + "DESCRIPTION": "获得 1 张 *守卫 。 NL gremlin:切换 至 gremlin:地精法师 。", + "UPGRADE_DESCRIPTION": "获得 1 张 *守卫+ NL gremlin:切换 至 gremlin:地精法师 。" }, "Gremlin:TagTeam": { "NAME": "配合", diff --git a/src/main/resources/gremlinResources/localization/zhs/KeywordStrings.json b/src/main/resources/gremlinResources/localization/zhs/KeywordStrings.json index f51d8e7c8..d7bb2762d 100644 --- a/src/main/resources/gremlinResources/localization/zhs/KeywordStrings.json +++ b/src/main/resources/gremlinResources/localization/zhs/KeywordStrings.json @@ -16,6 +16,7 @@ { "NAMES": [ "回响" + ], "PROPER_NAME": "回响", "DESCRIPTION": "获得一张带有 #y消耗 与 #y虚无 的复制品, #y回响 牌自身无法再被 #y回响 。" @@ -69,7 +70,14 @@ "法力" ], "PROPER_NAME": "法力", - "DESCRIPTION": "当你至少有 #b3 层 #y法力 时, 攻击会使用所有 #y法力 并额外造成 #b10 点伤害。" + "DESCRIPTION": "当你至少有 #b3 层 #y法力 时, 攻击会使用所有 #y法力 并额外造成 #b7 点伤害。" + }, + { + "NAMES": [ + "窃取" + ], + "PROPER_NAME": "窃取", + "DESCRIPTION": "目标失去相应层数效果。你获得相应层数效果。" }, { "NAMES": [ diff --git a/src/main/resources/gremlinResources/localization/zhs/OrbStrings.json b/src/main/resources/gremlinResources/localization/zhs/OrbStrings.json index cc7f1f4c5..992c5befb 100644 --- a/src/main/resources/gremlinResources/localization/zhs/OrbStrings.json +++ b/src/main/resources/gremlinResources/localization/zhs/OrbStrings.json @@ -30,7 +30,8 @@ "Gremlin:SneakyGremlin": { "NAME": "卑鄙地精", "DESCRIPTION": [ - "每当你打出攻击牌时, 对随机一名敌人造成 #b", + "0 耗能攻击造成 #b", + " 点 额外伤害。每当你打出攻击牌时, 对随机一名敌人造成 #b", " 点伤害。" ] } diff --git a/src/main/resources/gremlinResources/localization/zhs/PowerStrings.json b/src/main/resources/gremlinResources/localization/zhs/PowerStrings.json index 3988195c8..6caf64b99 100644 --- a/src/main/resources/gremlinResources/localization/zhs/PowerStrings.json +++ b/src/main/resources/gremlinResources/localization/zhs/PowerStrings.json @@ -39,14 +39,15 @@ "Gremlin:Crippled": { "NAME": "致残", "DESCRIPTIONS": [ - "该单位的 #y虚弱 层数不随回合结束降低。敌方回合结束时,其失去 #y虚弱 层数点生命。" + "获得 #y虚弱 时,失去", + " 点生命" ] }, "Gremlin:Encore": { "NAME": "喝彩", "DESCRIPTIONS": [ - "每当你使用 #y法力 时,对所有敌人造成 #b", - " 点伤害。" + "#y法力 造成的额外伤害提高 #b", + " 点。" ] }, "Gremlin:Enthusiasm": { @@ -170,6 +171,7 @@ "Gremlin:SneakyGremlin": { "NAME": "卑鄙地精", "DESCRIPTIONS": [ + "0 耗能牌额外造成伤害 #b", "每当你打出 #y攻击牌 时,随机对一名敌人造成 #b", " 点伤害。" ] diff --git a/src/main/resources/gremlinResources/localization/zhs/RelicStrings.json b/src/main/resources/gremlinResources/localization/zhs/RelicStrings.json index 7cb92e23c..5333237ae 100644 --- a/src/main/resources/gremlinResources/localization/zhs/RelicStrings.json +++ b/src/main/resources/gremlinResources/localization/zhs/RelicStrings.json @@ -101,7 +101,7 @@ "NAME": "支援卷轴", "FLAVOR": "一份十分详尽的关于地精暴徒武器装甲素材的物品清单。", "DESCRIPTIONS": [ - "第 #b3 回合开始时,获得 [E] 并抽 #b2 张牌。" + "第 #b3 回合开始时,获得 [E] [E] 并抽 #b2 张牌。" ] }, "Gremlin:TagTeamwork": { diff --git a/src/main/resources/gremlinResources/localization/zht/CardStrings.json b/src/main/resources/gremlinResources/localization/zht/CardStrings.json index c48268065..ded543aea 100644 --- a/src/main/resources/gremlinResources/localization/zht/CardStrings.json +++ b/src/main/resources/gremlinResources/localization/zht/CardStrings.json @@ -5,12 +5,12 @@ }, "Gremlin:ArmsTheft": { "NAME": "力量竊取", - "DESCRIPTION": "竊取 !M! 點 力量 。 NL 消耗 。" + "DESCRIPTION": "給予 !M! 層 虛弱 。 NL gremlin:竊取 !M! 點 力量 。 NL 消耗 。" }, "Gremlin:Astound": { "NAME": "驚愕", - "DESCRIPTION": "獲得 !B! 格擋 。 NL 若至少有 3 層 gremlin:法力 , NL 獲得 !M! 張 *守衛 。", - "UPGRADE_DESCRIPTION": "獲得 !B! 格擋 。 NL 若至少有 3 層 gremlin:法力 , NL 獲得 !M! 張 *守衛+ 。" + "DESCRIPTION": "獲得 !B! 點 格擋 。 NL 若至少有 3 層 gremlin:法力 , NL 獲得 !M! 張 *守衛 。", + "UPGRADE_DESCRIPTION": "獲得 !B! 點 格擋 。 NL 若至少有 3 層 gremlin:法力 , NL 獲得 !M! 張 *守衛+ 。" }, "Gremlin:Bang": { "NAME": "砰", @@ -52,12 +52,11 @@ }, "Gremlin:CounterStrike": { "NAME": "破招打擊", - "DESCRIPTION": "造成 !D! 點傷害。 NL 若目標意圖攻擊, NL 獲得 !M! 張 *守衛 。", - "UPGRADE_DESCRIPTION": "造成 !D! 點傷害。 NL 若目標意圖攻擊, NL 獲得 !M! 張 *守衛+ 。" + "DESCRIPTION": "造成 !D! 點傷害。 NL 若目標意圖攻擊, NL 觸發 gremlin:領隊 地精額外效果 !M! 次。" }, "Gremlin:CowerChoice": { "NAME": "上貢", - "DESCRIPTION": "失去所有金幣。", + "DESCRIPTION": "失去所有靈魂。", "EXTENDED_DESCRIPTION": [ "弱小的地精們並不愚蠢。" ] @@ -84,16 +83,16 @@ }, "Gremlin:Duplicate": { "NAME": "復刻", - "DESCRIPTION": "獲得手中一張攻擊牌的 !M! 張 gremlin:回響 。 NL 其耗能減1。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "獲得手中一張攻擊牌的 !M! 張 gremlin:回響 。 NL 其耗能減1。" + "DESCRIPTION": "選擇手中一張攻擊牌, NL 將其 gremlin:回響 !M! 次, NL 且所獲牌耗能減1。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "選擇手中一張攻擊牌, NL 將其 gremlin:回響 !M! 次, NL 且所獲牌耗能減1。" }, "Gremlin:EdibleArmor": { "NAME": "食用護甲", - "DESCRIPTION": "將你的 格擋 轉換為等量 臨時生命 。" + "DESCRIPTION": "將你的 格擋 轉換為等量 expansioncontent:臨時生命 。 NL 消耗 。" }, "Gremlin:Encore": { "NAME": "喝彩", - "DESCRIPTION": "獲得 3 層 gremlin:法力 。 NL 使用 gremlin:法力 時,對所有敵人造成 !M! 點傷害。" + "DESCRIPTION": "獲得 3 層 gremlin:法力 。 NL gremlin:法力 造成的額外傷害增加 !M! 點。" }, "Gremlin:Enthusiasm": { "NAME": "狂熱", @@ -105,7 +104,7 @@ }, "Gremlin:Exacerbate": { "NAME": "惡化", - "DESCRIPTION": "造成 !D! 點傷害。 NL gremlin:致殘 目標。 NL 消耗 。" + "DESCRIPTION": "造成 !D! 點傷害。 NL 當你給予目標 虛弱 時,目標失去 !M! 點生命。 NL 消耗 。" }, "Gremlin:FairyDust": { "NAME": "仙塵", @@ -134,7 +133,7 @@ }, "Gremlin:FlipOut": { "NAME": "發瘋", - "DESCRIPTION": "造成 !D! 點傷害。 NL 本回合每獲得 格擋 , NL 變為造成等量群體傷害。" + "DESCRIPTION": "造成 !D! 點傷害。 NL 本回合每獲得 格擋 , NL 改為造成等量群體傷害。" }, "Gremlin:Flurry": { "NAME": "亂舞", @@ -165,7 +164,9 @@ }, "Gremlin:GremlinArms": { "NAME": "地精武器", - "DESCRIPTION": "隨機獲得一張 *小刀 或 *守衛 !M! 次。" + "DESCRIPTION": "觸發 gremlin:領隊 地精額外效果。 NL 選擇 gremlin:切換 地精。", + "UPGRADE_DESCRIPTION": "觸發 gremlin:領隊 地精額外效果2次。 NL 選擇 gremlin:切換 地精。" + }, "Gremlin:GremlinMeal": { "NAME": "活動肌肉", @@ -173,7 +174,7 @@ }, "Gremlin:GremlinDance": { "NAME": "地精之舞", - "DESCRIPTION": "造成 !D! 點傷害。 NL gremlin:領隊 的地精造成額外效果。", + "DESCRIPTION": "造成 !D! 點傷害。 NL gremlin:領隊 地精造成額外效果。", "EXTENDED_DESCRIPTION": [ "造成 !D! 點傷害", " (全體攻擊)。", @@ -191,12 +192,11 @@ }, "Gremlin:GremlinToss": { "NAME": "地精投擲", - "DESCRIPTION": "造成你當前 格擋 值加上 臨時生命 值點傷害。", - "UPGRADE_DESCRIPTION": "獲得 !M! 層 臨時生命 。 NL 造成你當前 格擋 值加上 臨時生命 值點傷害。", - "EXTENDED_DESCRIPTION": [ - " NL (造成 !D! 點傷害。)" - ] + "DESCRIPTION": "獲得 !M! 點 expansioncontent:臨時生命 。 NL 造成你當前 格擋 值加上 臨時生命 值點傷害。", + "UPGRADE_DESCRIPTION": "獲得 !M! 點 expansioncontent:臨時生命 。 NL 造成你當前 格擋 值加上 臨時生命 值點傷害。", + "EXTENDED_DESCRIPTION": [" NL (造成 !D! 點傷害。)"] }, + "Gremlin:GremlinWizard": { "NAME": "地精法師", "DESCRIPTION": " gremlin:切換 至 gremlin:地精法師 。" @@ -224,7 +224,7 @@ }, "Gremlin:Kablamo": { "NAME": "轟天響", - "DESCRIPTION": "對所有敵人造成 !D! 點傷害。 NL 本牌不移除 gremlin:法力 。" + "DESCRIPTION": "對所有敵人造成 !D! 點傷害 2 次。 NL 本牌不移除 gremlin:法力 。" }, "Gremlin:LeaderChoice": { "NAME": "取舍", @@ -236,8 +236,8 @@ }, "Gremlin:MakeshiftArmor": { "NAME": "臨時裝甲", - "DESCRIPTION": "每打出7張攻擊牌, NL 獲得 1 層 人工制品 。", - "UPGRADE_DESCRIPTION": "獲得 !M! 層 人工制品 。 NL 每打出7張攻擊牌, NL 獲得 1 層 人工制品 。" + "DESCRIPTION": "每打出7張攻擊牌, NL 獲得 1 層 人工製品 。", + "UPGRADE_DESCRIPTION": "獲得 !M! 層 人工製品 。 NL 每打出7張攻擊牌, NL 獲得 1 層 人工製品 。" }, "Gremlin:Mockery": { "NAME": "蔑視", @@ -254,11 +254,11 @@ }, "Gremlin:Nob": { "NAME": "大塊頭", - "DESCRIPTION": "獲得 !M! 層 臨時生命 。 NL 臨時生命 耗盡之前, NL gremlin:大塊頭 強制 gremlin:領隊 。" + "DESCRIPTION": "獲得 !M! 層 臨時生命 。 NL 臨時生命 耗盡之前, NL gremlin:大塊頭 強製 gremlin:領隊 。" }, "Gremlin:NobChoice": { "NAME": "做選擇", - "DESCRIPTION": "弱小的地精交出金幣?" + "DESCRIPTION": "弱小的地精交出靈魂?" }, "Gremlin:PartyStick": { "NAME": "熒光棒", @@ -274,17 +274,17 @@ }, "Gremlin:Pickpocket": { "NAME": "扒手", - "DESCRIPTION": "竊取所有 人工制品 。 NL 造成 !D! 點傷害。 NL 消耗 。" + "DESCRIPTION": "造成 !D! 點傷害。 NL 目標失去 !M! 點 力量 2 次。 NL 獲得 !blamage! 靈魂。 NL 消耗 。" }, "Gremlin:PinNeedle": { "NAME": "縫衣針", "DESCRIPTION": "造成 !D! 點傷害。 NL 抽牌堆加入 !M! 張 *針刺 。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "造成 !D! 點傷害。 NL 抽牌堆加入 !M! 張 *針刺+ 。 NL 消耗 。" + "UPGRADE_DESCRIPTION": "造成 !D! 點傷害。 NL 抽牌堆加入 !M! 張 *針刺 +。 NL 消耗 。" }, "Gremlin:Pinprick": { "NAME": "針刺", "DESCRIPTION": "造成 !D! 點傷害。 NL 抽一張牌。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "抽到時獲得本牌 gremlin:回響 。 NL 造成 !D! 點傷害。 NL 抽一張牌。 NL 消耗 。" + "UPGRADE_DESCRIPTION": "抽到時, NL gremlin:回響 本牌 。 NL 造成 !D! 點傷害。 NL 抽一張牌。 NL 消耗 。" }, "Gremlin:Polish": { "NAME": "磨亮", @@ -300,7 +300,7 @@ }, "Gremlin:Pretaliation": { "NAME": "預審", - "DESCRIPTION": "若目標意圖攻擊, NL 造成 !D! 點傷害。 NL 否則造成 !blamage! 點傷害。" + "DESCRIPTION": "造成 !D! 點傷害 2 次。 NL 受到目標攻擊傷害 !M! 點。" }, "Gremlin:ProperTools": { "NAME": "恰當工具", @@ -322,7 +322,7 @@ }, "Gremlin:Rhythm": { "NAME": "節奏", - "DESCRIPTION": "gremlin:切換 至下只地精。 NL 從抽牌堆 檢索 一張基礎牌,本回合其耗能為0。" + "DESCRIPTION": "gremlin:切換 至下只地精。 NL 檢索 抽牌堆一張基礎牌,本回合其單次耗能為0。" }, "Gremlin:Rush": { "NAME": "沖鋒", @@ -334,12 +334,12 @@ }, "Gremlin:SecondVolley": { "NAME": "余波", - "DESCRIPTION": "造成 !D! 點傷害。 NL 本回合每用過一張牌,獲得一張 *小刀 。", - "UPGRADE_DESCRIPTION": "造成 !D! 點傷害。 NL 本回合每用過一張牌,獲得一張 *小刀+ 。", + "DESCRIPTION": "造成 !D! 點傷害。 NL 本回合每用過1張牌,獲得1張 *小刀 。 NL 溢出手牌的 *小刀 消耗 。", + "UPGRADE_DESCRIPTION": "造成 !D! 點傷害。 NL 本回合每用過1張牌,獲得1張 *小刀+ 。 NL 溢出手牌的 *小刀+ 消耗 。", "EXTENDED_DESCRIPTION": [ - " NL (", - " 張牌。)", - " 張牌。)" + " NL (本回合打出過", + " 張牌。)", + " 張牌。)" ] }, "Gremlin:ShadowShiv": { @@ -355,8 +355,8 @@ }, "Gremlin:SharpenBlades": { "NAME": "銳化刀片", - "DESCRIPTION": "手中 *攻擊 牌本回合下次耗能變為0。", - "UPGRADE_DESCRIPTION": "抽一張牌。 NL 手中 *攻擊 牌本回合下次耗能變為0。" + "DESCRIPTION": "手中 *攻擊 牌本回合單次耗能變為0。", + "UPGRADE_DESCRIPTION": "抽一張牌。 NL 手中 *攻擊 牌本回合單次耗能變為0。" }, "Gremlin:ShieldGremlin": { "NAME": "持盾地精", @@ -369,12 +369,10 @@ }, "Gremlin:ShowStopper": { "NAME": "炫耀", - "DESCRIPTION": "恰有7層 gremlin:法力 才能打出。 NL 對所有敵人造成 !D! 點傷害五次。", - "EXTENDED_DESCRIPTION": [ - "時機未到。", - "時機已過。" - ] + "DESCRIPTION": "恰有 7 層 gremlin:法力 才能打出。 NL 對所有敵人造成 !D! 點傷害 !M! 次。", + "EXTENDED_DESCRIPTION": ["時機未到。","時機已過。"] }, + "Gremlin:SkullBash": { "NAME": "顱骨重擊", "DESCRIPTION": " 虛無 。 NL 造成 !D! 點傷害。 NL 給予 !M! 層 易傷 。 NL 消耗 。" @@ -397,8 +395,8 @@ }, "Gremlin:Tadah": { "NAME": "嗒噠", - "DESCRIPTION": "隨機獲得一張技能牌的 gremlin:回響 。 NL gremlin:切換 至 gremlin:地精法師 。", - "UPGRADE_DESCRIPTION": "隨機獲得一張技能牌的 gremlin:回響 ,其能耗減1。 NL gremlin:切換 至 gremlin:地精法師 。" + "DESCRIPTION": "獲得 1 張 *守衛 。 NL gremlin:切換 至 gremlin:地精法師 。", + "UPGRADE_DESCRIPTION": "獲得 1 張 *守衛+ NL gremlin:切換 至 gremlin:地精法師 。" }, "Gremlin:TagTeam": { "NAME": "配合", @@ -407,7 +405,7 @@ }, "Gremlin:TargetWeakness": { "NAME": "瞄準傷口", - "DESCRIPTION": "攻擊已被 虛弱 的目標時, NL 額外造成 !M! 點傷害。" + "DESCRIPTION": "攻擊被 虛弱 的目標時, NL 額外造成 !M! 點傷害。" }, "Gremlin:Tricksy": { "NAME": "狡猾", diff --git a/src/main/resources/gremlinResources/localization/zht/KeywordStrings.json b/src/main/resources/gremlinResources/localization/zht/KeywordStrings.json index e44c6cfaa..b926345f1 100644 --- a/src/main/resources/gremlinResources/localization/zht/KeywordStrings.json +++ b/src/main/resources/gremlinResources/localization/zht/KeywordStrings.json @@ -68,7 +68,7 @@ "法力" ], "PROPER_NAME": "法力", - "DESCRIPTION": "當你至少有 #b3 層 #y法力 時, 攻擊會使用所有 #y法力 並額外造成 #b10 點傷害。" + "DESCRIPTION": "當你至少有 #b3 層 #y法力 時, 攻擊會使用所有 #y法力 並額外造成 #b7 點傷害。" }, { "NAMES": [ diff --git a/src/main/resources/gremlinResources/localization/zht/OrbStrings.json b/src/main/resources/gremlinResources/localization/zht/OrbStrings.json index 72475f02b..38f0d427b 100644 --- a/src/main/resources/gremlinResources/localization/zht/OrbStrings.json +++ b/src/main/resources/gremlinResources/localization/zht/OrbStrings.json @@ -30,7 +30,8 @@ "Gremlin:SneakyGremlin": { "NAME": "卑鄙地精", "DESCRIPTION": [ - "每當你打出攻擊牌時, 對隨機一名敵人造成 #b", + "0 耗能攻擊造成 #b", + " 點 額外傷害。每當你打出攻擊牌時, 對隨機一名敵人造成 #b", " 點傷害。" ] } diff --git a/src/main/resources/gremlinResources/localization/zht/PowerStrings.json b/src/main/resources/gremlinResources/localization/zht/PowerStrings.json index af420d67e..e968e062b 100644 --- a/src/main/resources/gremlinResources/localization/zht/PowerStrings.json +++ b/src/main/resources/gremlinResources/localization/zht/PowerStrings.json @@ -39,14 +39,15 @@ "Gremlin:Crippled": { "NAME": "致殘", "DESCRIPTIONS": [ - "其 #y虛弱 不會消失。敵方回合結束時,其失去 #y虛弱 層數點生命。" + "獲得 #y虛弱 時,失去", + " 點生命" ] }, "Gremlin:Encore": { "NAME": "喝彩", "DESCRIPTIONS": [ - "每當你使用 #y法力 時,對所有敵人造成 #b", - " 點傷害。" + "#y法力 造成 #b", + " 點額外傷害。" ] }, "Gremlin:Enthusiasm": { @@ -170,6 +171,7 @@ "Gremlin:SneakyGremlin": { "NAME": "卑鄙地精", "DESCRIPTIONS": [ + "0 耗能牌額外造成傷害 #b", "每當你打出 #y攻擊牌 時,隨機對一名敵人造成 #b", " 點傷害。" ] diff --git a/src/main/resources/gremlinResources/localization/zht/RelicStrings.json b/src/main/resources/gremlinResources/localization/zht/RelicStrings.json index c533837b2..81408bb6b 100644 --- a/src/main/resources/gremlinResources/localization/zht/RelicStrings.json +++ b/src/main/resources/gremlinResources/localization/zht/RelicStrings.json @@ -101,7 +101,7 @@ "NAME": "支援卷軸", "FLAVOR": "一份十分詳盡的關於地精暴徒武器裝甲素材的物品清單。", "DESCRIPTIONS": [ - "第 #b3 回合開始時,獲得 [E] 並抽 #b2 張牌。" + "第 #b3 回合開始時,獲得 [E] [E] 並抽 #b2 張牌。" ] }, "Gremlin:TagTeamwork": { diff --git a/src/main/resources/guardianResources/GuardianImages/cards/BodySlam.png b/src/main/resources/guardianResources/GuardianImages/cards/BodySlam.png deleted file mode 100644 index c845b09e2..000000000 Binary files a/src/main/resources/guardianResources/GuardianImages/cards/BodySlam.png and /dev/null differ diff --git a/src/main/resources/guardianResources/GuardianImages/cards/BodySlam_p.png b/src/main/resources/guardianResources/GuardianImages/cards/BodySlam_p.png deleted file mode 100644 index 0a2f66d64..000000000 Binary files a/src/main/resources/guardianResources/GuardianImages/cards/BodySlam_p.png and /dev/null differ diff --git a/src/main/resources/guardianResources/GuardianImages/cards/FloatingOrbs.png b/src/main/resources/guardianResources/GuardianImages/cards/FloatingOrbs.png deleted file mode 100644 index 0940dc6f3..000000000 Binary files a/src/main/resources/guardianResources/GuardianImages/cards/FloatingOrbs.png and /dev/null differ diff --git a/src/main/resources/guardianResources/GuardianImages/cards/FloatingOrbs_p.png b/src/main/resources/guardianResources/GuardianImages/cards/FloatingOrbs_p.png deleted file mode 100644 index d04d1b5d2..000000000 Binary files a/src/main/resources/guardianResources/GuardianImages/cards/FloatingOrbs_p.png and /dev/null differ diff --git a/src/main/resources/guardianResources/GuardianImages/cards/accelerate.png b/src/main/resources/guardianResources/GuardianImages/cards/accelerate.png index 7caab2310..692bb2477 100644 Binary files a/src/main/resources/guardianResources/GuardianImages/cards/accelerate.png and b/src/main/resources/guardianResources/GuardianImages/cards/accelerate.png differ diff --git a/src/main/resources/guardianResources/GuardianImages/cards/accelerate_p.png b/src/main/resources/guardianResources/GuardianImages/cards/accelerate_p.png index 80176a7e6..38fb13b10 100644 Binary files a/src/main/resources/guardianResources/GuardianImages/cards/accelerate_p.png and b/src/main/resources/guardianResources/GuardianImages/cards/accelerate_p.png differ diff --git a/src/main/resources/guardianResources/GuardianImages/cards/bodySlam.png b/src/main/resources/guardianResources/GuardianImages/cards/bodySlam.png new file mode 100644 index 000000000..bd3964181 Binary files /dev/null and b/src/main/resources/guardianResources/GuardianImages/cards/bodySlam.png differ diff --git a/src/main/resources/guardianResources/GuardianImages/cards/bodySlam_p.png b/src/main/resources/guardianResources/GuardianImages/cards/bodySlam_p.png new file mode 100644 index 000000000..092e6907e Binary files /dev/null and b/src/main/resources/guardianResources/GuardianImages/cards/bodySlam_p.png differ diff --git a/src/main/resources/guardianResources/GuardianImages/cards/floatingOrbs.png b/src/main/resources/guardianResources/GuardianImages/cards/floatingOrbs.png new file mode 100644 index 000000000..f7ee20de2 Binary files /dev/null and b/src/main/resources/guardianResources/GuardianImages/cards/floatingOrbs.png differ diff --git a/src/main/resources/guardianResources/GuardianImages/cards/floatingOrbs_p.png b/src/main/resources/guardianResources/GuardianImages/cards/floatingOrbs_p.png new file mode 100644 index 000000000..d8ede87b5 Binary files /dev/null and b/src/main/resources/guardianResources/GuardianImages/cards/floatingOrbs_p.png differ diff --git a/src/main/resources/guardianResources/GuardianImages/cards/Orbwalk.png b/src/main/resources/guardianResources/GuardianImages/cards/orbwalk.png similarity index 100% rename from src/main/resources/guardianResources/GuardianImages/cards/Orbwalk.png rename to src/main/resources/guardianResources/GuardianImages/cards/orbwalk.png diff --git a/src/main/resources/guardianResources/GuardianImages/cards/Orbwalk_p.png b/src/main/resources/guardianResources/GuardianImages/cards/orbwalk_p.png similarity index 100% rename from src/main/resources/guardianResources/GuardianImages/cards/Orbwalk_p.png rename to src/main/resources/guardianResources/GuardianImages/cards/orbwalk_p.png diff --git a/src/main/resources/guardianResources/GuardianImages/relics/obsidianscales.png b/src/main/resources/guardianResources/GuardianImages/relics/obsidianscales.png new file mode 100644 index 000000000..841eae826 Binary files /dev/null and b/src/main/resources/guardianResources/GuardianImages/relics/obsidianscales.png differ diff --git a/src/main/resources/guardianResources/GuardianImages/relics/obsidianscalesOutline.png b/src/main/resources/guardianResources/GuardianImages/relics/obsidianscalesOutline.png new file mode 100644 index 000000000..4d6d5bad8 Binary files /dev/null and b/src/main/resources/guardianResources/GuardianImages/relics/obsidianscalesOutline.png differ diff --git a/src/main/resources/guardianResources/localization/eng/CardStrings.json b/src/main/resources/guardianResources/localization/eng/CardStrings.json index 3ffba37a0..13679e20e 100644 --- a/src/main/resources/guardianResources/localization/eng/CardStrings.json +++ b/src/main/resources/guardianResources/localization/eng/CardStrings.json @@ -19,8 +19,8 @@ }, "Guardian:Gem_Lightblue": { "NAME": "Tourmaline", - "DESCRIPTION": "guardianmod:Gem. NL Gain 2 Thorns.", - "UPGRADE_DESCRIPTION": "Gain 2 Thorns." + "DESCRIPTION": "guardianmod:Gem. NL Gain 4 temporary Thorns.", + "UPGRADE_DESCRIPTION": "Gain 4 temp. Thorns." }, "Guardian:Gem_White": { "NAME": "Opal", @@ -43,8 +43,8 @@ }, "Guardian:DonusPower": { "NAME": "Overload", - "DESCRIPTION": "Draw !M! Cards. NL Next turn, draw 2 less cards.", - "UPGRADE_DESCRIPTION": "Draw !M! Cards. NL Next turn, draw 2 less cards. NL Reduce each of your debuffs by 1." + "DESCRIPTION": "Draw !M! cards. NL Reduce each of your debuffs by 1.", + "UPGRADE_DESCRIPTION": "Draw !M! cards. NL Reduce each of your debuffs by 1." }, "Guardian:DecasProtection": { "NAME": "Ancient Power", @@ -65,7 +65,7 @@ }, "Guardian:GuardianWhirl": { "NAME": "Guardian Whirl", - "DESCRIPTION": "Requires 20 or more Block. NL Deal !D! damage to ALL enemies !M! times.", + "DESCRIPTION": "Deal !D! damage to ALL enemies 2 times. NL If you have 16 or more Block, deal damage !M! more times.", "EXTENDED_DESCRIPTION": [ "More Block required." ] @@ -118,7 +118,8 @@ }, "Guardian:SphericShield": { "NAME": "Spheric Shield", - "DESCRIPTION": "Gain !B! Block. NL Enter guardianmod:Defensive *Mode. NL Exhaust." + "DESCRIPTION": "Ethereal. NL Gain a guardianmod:Polishing_Oil. NL Exhaust.", + "UPGRADE_DESCRIPTION": "Gain a guardianmod:Polishing_Oil. NL Exhaust." }, "Guardian:Harden": { "NAME": "Harden", @@ -139,8 +140,8 @@ }, "Guardian:CompilePackage": { "NAME": "Compile Package", - "DESCRIPTION": "Choose one of three guardianmod:Packages to gain. NL Exhaust.", - "UPGRADE_DESCRIPTION": "Choose one of three Upgraded guardianmod:Packages to gain. NL Exhaust.", + "DESCRIPTION": "Choose a *Package to place into guardianmod:Stasis. NL Exhaust.", + "UPGRADE_DESCRIPTION": "Choose an Upgraded *Package to place into guardianmod:Stasis. NL Exhaust.", "EXTENDED_DESCRIPTION": [ "Choose a Package." ] @@ -157,8 +158,8 @@ }, "Guardian:PackageSphere": { "NAME": "Package: Spheric", - "DESCRIPTION": "Gain a *Spheric *Shield, *Floating *Orbs, and *Armored *Protocol. NL Exhaust.", - "UPGRADE_DESCRIPTION": "Gain a *Spheric *Shield+, *Floating *Orbs+, and *Armored *Protocol+. NL Exhaust." + "DESCRIPTION": "Gain a *Spheric *Shield, *Floating *Orbs, and *Harden. NL Exhaust.", + "UPGRADE_DESCRIPTION": "Gain a *Spheric *Shield+, *Floating *Orbs+, and *Harden+. NL Exhaust." }, "Guardian:PackageSentry": { "NAME": "Package: Sentry", @@ -181,8 +182,8 @@ "UPGRADE_DESCRIPTION": "Gain a *Reroute+, *Preprogram+, and *Time *Capacitor+. NL Exhaust." }, "Guardian:Planning": { - "NAME": "Planning", - "DESCRIPTION": "Place the top !M! cards of your draw pile into guardianmod:Stasis." + "NAME": "Storage Shield", + "DESCRIPTION": "Gain !B! Block. NL Reduce your debuffs by !M!." }, "Guardian:Recover": { "NAME": "Recover", @@ -190,8 +191,8 @@ }, "Guardian:Emergency": { "NAME": "Emergency", - "DESCRIPTION": "guardianmod:Accelerate until a card in guardianmod:Stasis leaves it. NL Exhaust.", - "UPGRADE_DESCRIPTION": "guardianmod:Accelerate until a card in guardianmod:Stasis leaves it." + "DESCRIPTION": "guardianmod:Accelerate ALL cards in guardianmod:Stasis. NL Exhaust.", + "UPGRADE_DESCRIPTION": "guardianmod:Accelerate ALL cards in guardianmod:Stasis twice. NL Exhaust." }, "Guardian:Clone": { "NAME": "Clone", @@ -204,11 +205,15 @@ }, "Guardian:GemFinder": { "NAME": "Gem Finder", - "DESCRIPTION": "At the end of combat, obtain a random guardianmod:Gem." + "DESCRIPTION": "Ethereal. NL At the end of combat, you may add a random guardianmod:Gem to your deck." }, "Guardian:StasisField": { "NAME": "Stasis Field", - "DESCRIPTION": "Gain !B! Block. NL Place this into *Stasis NL When this leaves *Stasis, gain !B! Block." + "DESCRIPTION": "Gain !B! Block. NL Place this card into *Stasis." + }, + "Guardian:Metallicize": { + "NAME": "Harden", + "DESCRIPTION": "Gain !M! expansioncontent:Plated *Armor." }, "Guardian:StasisStrike": { "NAME": "Stasis Strike", @@ -222,7 +227,7 @@ "Guardian:Suspension": { "NAME": "Suspension", "DESCRIPTION": "Gain !B! Block. NL Place a card in your hand into guardianmod:Stasis.", - "UPGRADE_DESCRIPTION": "Draw a card. NL Place a card in your hand into guardianmod:Stasis." + "UPGRADE_DESCRIPTION": "Gain !B! Block. NL Place a card in your hand into guardianmod:Stasis." }, "Guardian:FastForward": { "NAME": "Speed Boost", @@ -235,8 +240,8 @@ }, "Guardian:ConstructionForm": { "NAME": "Construction Form", - "DESCRIPTION": "Ethereal. NL Gain !M! guardianmod:Buffer. NL At the start of each turn, if you have guardianmod:Buffer, gain 1 Strength.", - "UPGRADE_DESCRIPTION": "Gain !M! guardianmod:Buffer. NL At the start of each turn, if you have guardianmod:Buffer, gain 1 Strength." + "DESCRIPTION": "Ethereal. NL Gain !M! guardianmod:Buffer. NL At the start of each turn, if you have 1+ guardianmod:Buffer, gain 1 Strength.", + "UPGRADE_DESCRIPTION": "Gain !M! guardianmod:Buffer. NL At the start of each turn, if you have 1+ guardianmod:Buffer, gain 1 Strength." }, "Guardian:RollAttack": { "NAME": "Roll Attack", @@ -244,8 +249,8 @@ }, "Guardian:GemFire": { "NAME": "Gem Cannon", - "DESCRIPTION": "Exhaust ALL guardianmod:Gems in your hand. Deal !D! damage to a random enemy for each.", - "UPGRADE_DESCRIPTION": " NL (Hits !M! time(s).)" + "DESCRIPTION": "Deal !D! damage. NL Activate ALL of your guardianmod:Gems. NL Exhaust.", + "UPGRADE_DESCRIPTION": " NL (You have !M! Gem(s).)" }, "Guardian:ChargeCore": { "NAME": "Charge Core", @@ -257,11 +262,12 @@ }, "Guardian:PiercingHide": { "NAME": "Piercing Hide", - "DESCRIPTION": "Gain !B! Block and !M! temporary Thorns. NL guardianmod:Brace 3." + "DESCRIPTION": "Gain !B! Block and !M! temporary Thorns. NL guardianmod:Brace 3.", + "UPGRADE_DESCRIPTION": "Gain !B! Block and !M! temporary Thorns. NL guardianmod:Brace 4." }, "Guardian:ShieldSpikes": { "NAME": "Shield Spikes", - "DESCRIPTION": "Gain !B! Block. NL Gain !M! Thorns if in *Defensive *Mode. Otherwise, guardianmod:Brace 8." + "DESCRIPTION": "Gain !B! Block. NL Gain !M! Thorns if in *Defensive *Mode. guardianmod:Brace 8." }, "Guardian:PrismaticBeam": { "NAME": "Prismatic Spray", @@ -282,12 +288,11 @@ }, "Guardian:ExploitGems": { "NAME": "Exploit Gems", - "DESCRIPTION": "Draw a card.", - "UPGRADE_DESCRIPTION": "Gain [E]. NL Draw a card." + "DESCRIPTION": "Draw a card." }, "Guardian:RefractedBeam": { "NAME": "Refracted Beam", - "DESCRIPTION": "Deal !D! damage !M! times. NL Can be upgraded any number of times." + "DESCRIPTION": "Deal !D! damage !M! times. NL Can be upgraded any number of times. NL For each Upgrade +1:" }, "Guardian:MultiBeam": { "NAME": "Multi-Beam", @@ -303,15 +308,17 @@ }, "Guardian:EvasiveProtocol": { "NAME": "Evasive Protocol", - "DESCRIPTION": "Whenever you enter *Defensive *Mode, gain !M! Dexterity." + "DESCRIPTION": "Whenever you enter *Defensive *Mode, reduce each of your debuffs by !M!. NL guardianmod:Brace !GuardianSecondM!.", + "UPGRADE_DESCRIPTION": "Whenever you enter *Defensive *Mode, reduce each of your debuffs by !M!. NL guardianmod:Brace !GuardianSecondM!." }, "Guardian:SpikerProtocol": { "NAME": "Spiker Protocol", - "DESCRIPTION": "Whenever you enter *Defensive *Mode, gain !M! Thorns." + "DESCRIPTION": "Whenever you enter *Defensive *Mode, gain !M! Thorns. NL guardianmod:Brace !GuardianSecondM!.", + "UPGRADE_DESCRIPTION": "Whenever you enter *Defensive *Mode, gain !M! Thorns. NL guardianmod:Brace !GuardianSecondM!." }, "Guardian:ArmoredProtocol": { - "NAME": "Armored Protocol", - "DESCRIPTION": "Whenever you enter *Defensive *Mode, gain !M! *Metallicize." + "NAME": "Armored Protocol (Deprecated card do not TL!)", + "DESCRIPTION": "Gain !M! Block at the end of each turn while in *Defensive *Mode. NL At the start of your turn, guardianmod:Brace 3." }, "Guardian:TimeSifter": { "NAME": "Time Sifter", @@ -320,8 +327,8 @@ }, "Guardian:AncientConstruct": { "NAME": "Ancient Construct", - "DESCRIPTION": "At the start of your turn, if you have no Artifact, gain !M! Artifact.", - "UPGRADE_DESCRIPTION": "Gain 2 Artifact. NL At the start of your turn, if you have no Artifact, gain !M! Artifact." + "DESCRIPTION": "Gain 1 Artifact. NL At the start of your turn, if you have no Artifact, gain !M! Artifact.", + "UPGRADE_DESCRIPTION": "Gain 1 Artifact. NL At the start of your turn, if you have no Artifact, gain !M! Artifact." }, "Guardian:CrystalBeam": { "NAME": "Crystal Ray", @@ -366,17 +373,17 @@ "DESCRIPTION": "Gain !B! Block. NL Exhaust." }, "Guardian:Repulse": { - "NAME": "Repulsive Protocol", - "DESCRIPTION": "Whenever you enter *Defensive *Mode, Exhaust a card in your hand.", + "NAME": "Repulsor", + "DESCRIPTION": "When you draw the first Status or Curse card each turn, Exhaust it and draw a card.", "UPGRADE_DESCRIPTION": "When you draw the first Status or Curse card each turn, Exhaust it and draw a card." }, "Guardian:BronzeOrb": { "NAME": "Orb Support", - "DESCRIPTION": "Innate. NL Deal !D! damage. Put a random card from your draw pile into guardianmod:Stasis. Exhaust." + "DESCRIPTION": "Deal !D! damage. NL guardianmod:Brace for unblocked damage dealt. NL Exhaust." }, "Guardian:RevengeProtocol": { - "NAME": "Alert Protocol", - "DESCRIPTION": "At the start of your turn, guardianmod:Brace !GuardianSecondM!." + "NAME": "Revenge Protocol", + "DESCRIPTION": "Whenever you enter *Defensive *Mode, gain !M! Strength. NL At the start of your turn, guardianmod:Brace !GuardianSecondM!." }, "Guardian:GatlingBeam": { "NAME": "Laser Turret", diff --git a/src/main/resources/guardianResources/localization/eng/CharacterStrings.json b/src/main/resources/guardianResources/localization/eng/CharacterStrings.json index 177e76016..ea1643501 100644 --- a/src/main/resources/guardianResources/localization/eng/CharacterStrings.json +++ b/src/main/resources/guardianResources/localization/eng/CharacterStrings.json @@ -9,7 +9,7 @@ "[ guardianmod:Socket ]", "Navigating an unlit street, you come across several hooded figures in the midst of some dark ritual. As you approach, they turn to you in eerie unison. The tallest among them bares fanged teeth and extends a long, pale hand towards you. NL ~\"Join~ ~us~ ~ancient~ ~protector,~ ~and~ ~feel~ ~the~ ~warmth~ ~of~ ~the~ ~Spire.\"~", "Defensive Mode", - "You temporarily have #b3 #yThorns [REMOVE_SPACE], and your #yBlock does not expire.", + "You have #b3 #yThorns and your Block does not expire.", "~ERROR:~ #rStasis in progress." ], "KEYWORDS": [ diff --git a/src/main/resources/guardianResources/localization/eng/EventStrings.json b/src/main/resources/guardianResources/localization/eng/EventStrings.json index 0fcb81cf6..375fff36a 100644 --- a/src/main/resources/guardianResources/localization/eng/EventStrings.json +++ b/src/main/resources/guardianResources/localization/eng/EventStrings.json @@ -7,15 +7,15 @@ "Though the prospect of treasure is appealing, you opt to save your armor for more important ventures.", "Having successfully won over the old mine, you leave with a sense of accomplishment. And some sore bronze appendages.", "You snatch up the mining pick from the Gremlin camp, which seems to be in poor condition. You could use it here to gain some gems, or stash it away to use later in your climb.", - "Using the mining pick, you hammer away at the wall and carve out a gem. The pick takes some wear and tear in the process, but better to damage it than your claws." + "Using the mining pick, you hammer away at the wall and carve out multiple gems. The pick is destroyed in the process, but better to damage it than your claws." ], "OPTIONS": [ "[Dig with Claws] #gGain #grandom #gGem. #rLose #r", " #rHP.", "[Leave]", "[Rob] #rFight #rGremlins. #gGain #gPick #gof #gRhapsody.", - "[Mine with Pick] #gGain #grandom #gGem. #rLose #rPick #rcharge.", - "[Locked] Pick #rBroken." + "[Mine with Pick] #gGain #g3 #grandom #gGems. #rLose #rPick #rof #rRhapsody.", + "[Locked] Pick Broken." ] }, "Guardian:StasisEgg": { @@ -27,10 +27,11 @@ "You decide that something this powerful is probably here for good reason. Though your instinct says that you should do something with such a powerful object, you reason that whoever left this here did so with purpose. You close the lid, and move on." ], "OPTIONS": [ - "[Use] #gGain #gQuantum #gChamber. #rBecome #rCursed #r- #rAged", + "[Use] #gGain #gQuantum #gChamber. #rBecome #rCursed #r- #rAged.", "[Smash] #gGain #g", - " #gMax #gHP. #rBecome #rCursed #r- #rPain", - "[Leave]" + " #gMax #gHP. #rBecome #rCursed #r- #rPain.", + "[Leave]", + "[Locked] Requires an unbottled card." ] }, "Guardian:AccursedBlacksmith": { diff --git a/src/main/resources/guardianResources/localization/eng/KeywordStrings.json b/src/main/resources/guardianResources/localization/eng/KeywordStrings.json index 4f1d81842..932a5f195 100644 --- a/src/main/resources/guardianResources/localization/eng/KeywordStrings.json +++ b/src/main/resources/guardianResources/localization/eng/KeywordStrings.json @@ -30,14 +30,14 @@ "defensive_mode", "defensive" ], - "DESCRIPTION": "#yStance. NL Gain #b20 #yBlock when you enter Defensive Mode. While in it, you have #b3 #yThorns and your #yBlock does not expire." + "DESCRIPTION": "#yStance. NL While in Defensive Mode you have #b3 #yThorns and your #yBlock does not expire." }, { "NAMES": [ "accelerate" ], "PROPER_NAME": "Accelerate", - "DESCRIPTION": "Reduce the turn counter of the right-most card in #yStasis by #b1." + "DESCRIPTION": "Reduce the turn counter of the right-most card in #yStasis by #b1 [REMOVE_SPACE]." }, { "NAMES": [ @@ -45,7 +45,7 @@ "packages" ], "PROPER_NAME": "Package", - "DESCRIPTION": "0-cost #yExhausting #ySkill that generates three cards inspired by a chosen Construct of the Spire." + "DESCRIPTION": "#ySkill that generates three cards inspired by a chosen Construct of the Spire." }, { "NAMES": [ @@ -54,6 +54,16 @@ "PROPER_NAME": "Volatile", "DESCRIPTION": "When this card leaves #yStasis, it #yExhausts [REMOVE_SPACE]." }, + { + "NAMES": [ + "Polishing Oil", + "Polishing_Oil", + "polishing_oil", + "polishingoil" + ], + "PROPER_NAME": "Polishing Oil", + "DESCRIPTION": "#yPotion [REMOVE_SPACE]: Gain #b16 #yBlock [REMOVE_SPACE]. Enter #yDefensive #yMode [REMOVE_SPACE]." + }, { "NAMES": [ "tick" @@ -72,7 +82,7 @@ "NAMES": [ "brace" ], - "PROPER_NAME": "Brace", - "DESCRIPTION": "Reduce the HP loss required to enter #yDefensive #yMode by some amount." + "PROPER_NAME": "Brace X", + "DESCRIPTION": "Reduce the HP loss required to trigger #yMode #yShift by X." } ] diff --git a/src/main/resources/guardianResources/localization/eng/PotionStrings.json b/src/main/resources/guardianResources/localization/eng/PotionStrings.json index ce51b1e94..bb40e2b64 100644 --- a/src/main/resources/guardianResources/localization/eng/PotionStrings.json +++ b/src/main/resources/guardianResources/localization/eng/PotionStrings.json @@ -1,6 +1,6 @@ { "Guardian:AcceleratePotion": { - "NAME": "Temporal Potion", + "NAME": "Emergency Potion", "DESCRIPTIONS": [ "#yAccelerate all cards in #yStasis #b", " times." @@ -10,7 +10,7 @@ "NAME": "Polishing Oil", "DESCRIPTIONS": [ "Gain #b", - " #yBlock. Enter #yDefensive #yMode [REMOVE_SPACE]." + " #yBlock [REMOVE_SPACE]. Enter #yDefensive #yMode [REMOVE_SPACE]." ] }, "Guardian:BlockOnCardUsePotion": { diff --git a/src/main/resources/guardianResources/localization/eng/PowerStrings.json b/src/main/resources/guardianResources/localization/eng/PowerStrings.json index 614863150..0f88773db 100644 --- a/src/main/resources/guardianResources/localization/eng/PowerStrings.json +++ b/src/main/resources/guardianResources/localization/eng/PowerStrings.json @@ -31,17 +31,17 @@ "Guardian:ClonePower": { "NAME": "Reroute", "DESCRIPTIONS": [ - "Place the next card you play this turn into #yStasis [REMOVE_SPACE].", + "Place the next card you play this turn into #yStasis.", "Place the next #b", - " cards you play this turn into #yStasis [REMOVE_SPACE]." + " cards you play this turn into #yStasis." ] }, "Guardian:GemFinderPower": { "NAME": "Gem Finder", "DESCRIPTIONS": [ - "At the end of combat, obtain a random #yGem [REMOVE_SPACE].", - "At the end of combat, obtain #b", - " random #yGems [REMOVE_SPACE]." + "At the end of combat, you may add a random #yGem to your deck.", + "At the end of combat, you may add #b", + " random #yGems to add to your deck." ] }, "Guardian:FuturePlansPower": { @@ -49,7 +49,7 @@ "DESCRIPTIONS": [ "At the end of your turn, you may place #b", " card into #yStasis [REMOVE_SPACE].", - " cards into #yStasis [REMOVE_SPACE]." + " cards into #yStasis [REMOVE_SPACE]." ] }, "Guardian:DefenseModePower": { @@ -63,8 +63,9 @@ "Guardian:ConstructModePower": { "NAME": "Construction Mode", "DESCRIPTIONS": [ - "At the start of each turn, if you have #yBuffer [REMOVE_SPACE], gain #b", - " #yStrength [REMOVE_SPACE]." + "At the start of each turn, if you have at least #b", + " #yBuffer, gain #b", + " #yStrength." ] }, "Guardian:MultiBoostPower": { @@ -113,8 +114,8 @@ "Guardian:AutomayhemPower": { "NAME": "Time Sifter", "DESCRIPTIONS": [ - "At the start of your turn, #yAccelerate [REMOVE_SPACE].", - "At the start of your turn, #yAccelerate #b", + "At the start of your turn, #yAccelerate.", + "At the start of your turn, #yAccelerate ", " times." ] }, @@ -130,29 +131,22 @@ "NAME": "Mode Shift", "DESCRIPTIONS": [ "When you lose #b", - " more HP, enter #yDefensive #yMode for #b2 turns." + " HP, gain #b16 #yBlock, enter #yDefensive #yMode until next turn, and increase the amount required to trigger this effect again by #b10, up to a maximum of #b50 [REMOVE_SPACE]." ] }, "Guardian:ExhaustStatusesPower": { - "NAME": "Repulsive Protocol", - "DESCRIPTIONS": [ - "Whenever you enter #yDefensive #yMode [REMOVE_SPACE], you can choose to #yExhaust a card in your hand.", - "Whenever you enter #yDefensive #yMode [REMOVE_SPACE], you can choose to #yExhaust #b", - " cards in your hand." - ] - }, "Guardian:RepulsiveProtocolPower": { - "NAME": "Repulsive Protocol", - "DESCRIPTIONS": [ - "Whenever you enter #yDefensive #yMode [REMOVE_SPACE], you can choose to #yExhaust a card in your hand.", - "Whenever you enter #yDefensive #yMode [REMOVE_SPACE], you can choose to #yExhaust #b", - " cards in your hand." - ] -}, + "NAME": "Repulse", + "DESCRIPTIONS": [ + "When you draw the first #yStatus or #yCurse card each turn, #yExhaust it and draw a card.", + "When you draw the first #b", + " #yStatus or #yCurse cards each turn, #yExhaust them and draw a card." + ] + }, "Guardian:RevengePower": { "NAME": "Revenge", "DESCRIPTIONS": [ - "At the start of your turn, #yBrace #b", - " ." + "Whenever you enter #yDefensive #yMode [REMOVE_SPACE], gain #b", + " #yStrength [REMOVE_SPACE]." ] }, "Guardian:StasisEnginePower": { @@ -184,37 +178,37 @@ "Guardian:EvasiveProtocolPower": { "NAME": "Evasive Protocol", "DESCRIPTIONS": [ - "Whenever you enter #yDefensive #yMode [REMOVE_SPACE], gain #b", - " #yDexterity [REMOVE_SPACE]." + "Reduce your debuffs by #b", + " when you enter #yDefensive #yMode [REMOVE_SPACE]." ] }, "Guardian:SpikerProtocolPower": { "NAME": "Spiker Protocol", "DESCRIPTIONS": [ - "Whenever you enter #yDefensive #yMode [REMOVE_SPACE], gain #b", - " #yThorns [REMOVE_SPACE]." + "Gain #b", + " #yThorns when you enter #yDefensive #yMode [REMOVE_SPACE]." ] }, "Guardian:ArmoredProtocolPower": { "NAME": "Armored Protocol", "DESCRIPTIONS": [ - "Whenever you enter #yDefensive #yMode [REMOVE_SPACE], gain #b", - " #yMetallicize [REMOVE_SPACE]." + "Gain #b", + " #yBlock when you end your turn while in #yDefensive #yMode [REMOVE_SPACE]." ] }, "Guardian:DontLeaveDefensiveModePower": { "NAME": "Defensive Mode", "DESCRIPTIONS": [ - "You will exit #yDefensive #yMode at the start of next turn.", + "You will exit #yDefensive #yMode at the end of this combat round.", "#yDefensive #yMode will be active for #b", - " more turns." + " more rounds." ] }, "Guardian:BracePerTurnPower": { "NAME": "Bracing", "DESCRIPTIONS": [ "At the start of your turn, #yBrace #b", - " ." + " [REMOVE_SPACE]." ] } } diff --git a/src/main/resources/guardianResources/localization/eng/RelicStrings.json b/src/main/resources/guardianResources/localization/eng/RelicStrings.json index 0f74306fa..6e297d6be 100644 --- a/src/main/resources/guardianResources/localization/eng/RelicStrings.json +++ b/src/main/resources/guardianResources/localization/eng/RelicStrings.json @@ -3,21 +3,31 @@ "NAME": "Bronze Gear", "FLAVOR": "Protection where you need it most.", "DESCRIPTIONS": [ - "At the start of each combat, gain #yGear #yUp. NL Guardian starts the run with a random common #yGem." + "At the start of each combat, gain #yGear #yUp [REMOVE_SPACE]. NL Guardian starts the run with a random common #yGem [REMOVE_SPACE]." ] }, "Guardian:ModeShifterPlus": { "NAME": "Guardian Gear", "FLAVOR": "Replace every 3,000 floors.", "DESCRIPTIONS": [ - "Replaces #rBronze #rGear. NL Begin each combat in #yguardianmod:Defensive_Mode, which persists for #b3 turns." + "Replaces ", + " [REMOVE_SPACE].[] NL At the start of combat, gain #yGear #yUp [REMOVE_SPACE]. NL Whenever you enter #yDefensive #yMode [REMOVE_SPACE], gain [E] and draw #b2 cards." + ] + }, + "Guardian:ObsidianScales": { + "NAME": "Obsidian Scales", + "FLAVOR": "Stain the sky black with your blood. Retaliate against all who struck out at you.", + "DESCRIPTIONS": [ + "At the start of combat, gain #b", + " #yThorns [REMOVE_SPACE]. Whenever you are debuffed or gain a debuff, gain #b", + " #yThorns [REMOVE_SPACE]." ] }, "Guardian:DefensiveModeMoreBlock": { "NAME": "Baalor's Lordly Plate", "FLAVOR": "One can never have enough armor.", "DESCRIPTIONS": [ - "Whenever you #yguardianmod:Brace, #yBrace 1 more." + "Whenever you #yguardianmod:Brace [REMOVE_SPACE], #yBrace 1 more." ] }, "Guardian:guardianmod:GemCopier": { @@ -31,21 +41,21 @@ "NAME": "Arumba's Pocket Sentry", "FLAVOR": "Sentry Mode active. Target acquired. No hard feelings.", "DESCRIPTIONS": [ - "Every 3 turns, apply #b1 #yWeak to ALL enemies." + "Every #b3 turns, apply #b1 #yWeak to ALL enemies." ] }, "Guardian:SackOfGems": { "NAME": "Sack of Gems", "FLAVOR": "Ooh... shiny!", "DESCRIPTIONS": [ - "Upon pickup, add #b5 random #yguardianmod:Gems to your deck." + "Upon pickup, you may choose up to #b5 random #yguardianmod:Gems to add to your deck." ] }, "Guardian:StasisCodex": { "NAME": "Pilot's Codex", "FLAVOR": "Designs and diagrams of the Spire's earliest manually-driven prototypes, by Master Pilot David.", "DESCRIPTIONS": [ - "If you end your turn with no cards in #yguardianmod:Stasis, choose #b1 of #b3 cards to place into #yguardianmod:Stasis." + "At the end of your first 3 turns, if your #yguardianmod:Stasis slots aren't full, choose #b1 of #b3 cards to place into #yguardianmod:Stasis [REMOVE_SPACE]." ] }, "Guardian:StasisSlotIncreaseRelic": { @@ -66,17 +76,17 @@ "NAME": "Cryo Chamber", "FLAVOR": "Things always seem better coming out than they did going in.", "DESCRIPTIONS": [ - "At the start of each combat, gain #b1 Stasis slot. Whenever a card enters #yguardianmod:Stasis, #yUpgrade it." + "At the start of each combat, gain #b1 Stasis slot. Whenever a card enters #yguardianmod:Stasis [REMOVE_SPACE], #yUpgrade it." ] }, "Guardian:BottledStasis": { "NAME": "Bottled Black Hole", "FLAVOR": "Somewhere, something incredible is waiting to be known.", "DESCRIPTIONS": [ - "Upon pickup, choose a card. Start each combat with this card in #yguardianmod:Stasis.", + "Upon pickup, choose a card. Start each combat with this card in #yguardianmod:Stasis [REMOVE_SPACE].", "Choose a card for ", "Start each combat with ", - " in #yguardianmod:Stasis.", + " in #yguardianmod:Stasis [REMOVE_SPACE].", "The bottled card has been #rremoved from your deck, the relic no longer functions." ] }, @@ -87,7 +97,8 @@ "Upon pickup, choose a card. Start each combat with this card removed from your deck. At the start of your #b4th turn, return it and #b2 copies of it to your hand.", "Choose a card for ", "Start each combat with ", - " removed from your deck. At the start of your #b4th turn, return it and #b2 copies of it to your hand." + " removed from your deck. At the start of your #b4th turn, return it and #b2 copies of it to your hand.", + "The card attached to this relic has been #rremoved from your deck, the relic no longer functions." ] }, "Guardian:TickHelperRelic": { @@ -101,7 +112,7 @@ "NAME": "Pick of Rhapsody", "FLAVOR": "With as many gemstones that litter the Spire, it is hard to imagine anyone so unlucky to have needed this Pick to aid them.", "DESCRIPTIONS": [ - "You can now #gMine for a single #yguardianmod:Gem at Rest Sites." + "Whenever you defeat an Elite encounter, add a random #yguardianmod:Gem to the rewards." ] }, "Guardian:GemstoneGun": { @@ -116,10 +127,10 @@ "NAME": "Bottled Anomaly", "FLAVOR": "Swirling and swirling and finally breaking.", "DESCRIPTIONS": [ - "Upon pickup, choose a card. At the start of each combat, remove it from your draw pile. At the start of turn #b3, add it into your hand. It costs #b0.", + "Upon pickup, choose a card. At the start of each combat, remove it from your draw pile. At the start of turn #b3 [REMOVE_SPACE], add it into your hand. It costs #b0 for the turn.", "Choose a card for ", "Start each combat with ", - " removed from your draw pile. At the start of turn #b3, add it into your hand. NL It costs #b0.", + " removed from your draw pile. At the start of turn #b3, add it into your hand. NL It costs #b0 for the turn.", "The bottled card has been #rremoved from your deck, the relic no longer functions." ] } diff --git a/src/main/resources/guardianResources/localization/eng/UIStrings.json b/src/main/resources/guardianResources/localization/eng/UIStrings.json index 8ab1d403e..298fd0f1c 100644 --- a/src/main/resources/guardianResources/localization/eng/UIStrings.json +++ b/src/main/resources/guardianResources/localization/eng/UIStrings.json @@ -22,9 +22,9 @@ }, "Guardian:FindGemsOption": { "TEXT": [ - "Mine", - "(Free Action) Gain a random Gem.", - "Mine exploited here." + "Mine.", + "Gain 2 random Gems.", + "Pick broken." ] }, "Guardian:BraceMod": { diff --git a/src/main/resources/guardianResources/localization/fra/CardStrings.json b/src/main/resources/guardianResources/localization/fra/CardStrings.json index b02ef4298..c2cca04de 100644 --- a/src/main/resources/guardianResources/localization/fra/CardStrings.json +++ b/src/main/resources/guardianResources/localization/fra/CardStrings.json @@ -295,7 +295,7 @@ }, "Guardian:BaubleBeam": { "NAME": "Éclat de gemmes", - "DESCRIPTION": "Infligez !D! dégâts. NL Réalisez !M! fois ceci:" + "DESCRIPTION": "Infligez !D! dégâts. NL NL Réalisez !M! fois ceci:" }, "Guardian:PrimingBeam": { "NAME": "Tir d'amorce", diff --git a/src/main/resources/guardianResources/localization/jpn/CardStrings.json b/src/main/resources/guardianResources/localization/jpn/CardStrings.json index 778f769db..d17778546 100644 --- a/src/main/resources/guardianResources/localization/jpn/CardStrings.json +++ b/src/main/resources/guardianResources/localization/jpn/CardStrings.json @@ -1,11 +1,11 @@ { "Guardian:Strike_Guardian": { "NAME": "ストライク", - "DESCRIPTION": " !D! ダメージを与える。" + "DESCRIPTION": "!D! ダメージを与える。" }, "Guardian:Defend_Guardian": { "NAME": "防御", - "DESCRIPTION": " !B! ブロックを得る。" + "DESCRIPTION": "!B! ブロックを得る。" }, "Guardian:Gem_Red": { "NAME": "ルビー", @@ -43,8 +43,8 @@ }, "Guardian:DonusPower": { "NAME": "オーバーロード", - "DESCRIPTION": "カードを !M! 枚引く。 NL 次のターン、ドロー枚数が 2 減る。", - "UPGRADE_DESCRIPTION": "カードを !M! 枚引く。 NL 次のターン、ドロー枚数が 2 減る。 NL 自分のデバフの数値を 1 減らす。" + "DESCRIPTION": "カードを !M! 枚引く。 NL 自分のデバフの数値を 1 減らす。", + "UPGRADE_DESCRIPTION": "カードを !M! 枚引く。 NL 自分のデバフの数値を 1 減らす。" }, "Guardian:DecasProtection": { "NAME": "エンシェントパワー", @@ -52,7 +52,7 @@ }, "Guardian:FierceBash": { "NAME": "フィアスバッシュ", - "DESCRIPTION": " !D! ダメージを与える。 NL guardianmod:停滞 スロットに配置する。 NL guardianmod:チック - このカードのダメージを !M! 増加させる。" + "DESCRIPTION": "!D! ダメージを与える。 NL guardianmod:停滞 スロットに配置する。 NL guardianmod:チック - このカードのダメージを !M! 増加させる。" }, "Guardian:PolyBeam": { "NAME": "ポリービーム", @@ -60,12 +60,12 @@ }, "Guardian:TwinSlam": { "NAME": "ツインスラム", - "DESCRIPTION": " !D! ダメージを与える。 NL *セカンドスラム を手札に加える。", - "UPGRADE_DESCRIPTION": " !D! ダメージを与える。 NL *セカンドスラム+ を手札に加える。" + "DESCRIPTION": "!D! ダメージを与える。 NL *セカンドスラム を手札に加える。", + "UPGRADE_DESCRIPTION": "!D! ダメージを与える。 NL *セカンドスラム+ を手札に加える。" }, "Guardian:GuardianWhirl": { "NAME": "旋風刃", - "DESCRIPTION": "必要: 20 ブロック NL 敵全体に !D! ダメージを !M! 回与える。", + "DESCRIPTION": "敵全体に !D! ダメージを 2 回与える。 NL あなたのブロックが16以上なら、更に !M! 回ダメージを与える。", "EXTENDED_DESCRIPTION": [ "もっと ブロック が必要だ。" ] @@ -99,12 +99,12 @@ }, "Guardian:OrbSlam": { "NAME": "オーブスラム", - "DESCRIPTION": " !D! ダメージを !GuardianMulti! 回与える。 NL 廃棄" + "DESCRIPTION": "!D! ダメージを !GuardianMulti! 回与える。 NL 廃棄" }, "Guardian:Incinerate": { "NAME": "焼却", - "DESCRIPTION": " !D! ダメージを与える。 NL guardianmod:アクセラレート", - "UPGRADE_DESCRIPTION": " !D! ダメージを与える。 NL guardianmod:アクセラレート を2回行う" + "DESCRIPTION": "!D! ダメージを与える。 NL guardianmod:アクセラレート", + "UPGRADE_DESCRIPTION": "!D! ダメージを与える。 NL guardianmod:アクセラレート を2回行う" }, "Guardian:Orbwalk": { "NAME": "オーブウォーク", @@ -113,12 +113,12 @@ }, "Guardian:WalkerClaw": { "NAME": "ウォーカークロー", - "DESCRIPTION": " !D! ダメージを !M! 回与える。", - "UPGRADE_DESCRIPTION": " !D! ダメージを !M! 回与える。" + "DESCRIPTION": "!D! ダメージを !M! 回与える。", + "UPGRADE_DESCRIPTION": "!D! ダメージを !M! 回与える。" }, "Guardian:SphericShield": { "NAME": "球状シールド", - "DESCRIPTION": " !B! ブロックを得る。 NL guardianmod:ディフェンシブモード を発動。 NL 廃棄" + "DESCRIPTION": "!B! ブロックを得る。 NL guardianmod:ディフェンシブモード を発動。 NL 廃棄" }, "Guardian:Harden": { "NAME": "硬化", @@ -129,8 +129,8 @@ }, "Guardian:SentryBeam": { "NAME": "セントリーブラスト", - "DESCRIPTION": " !D! ダメージを与える。 NL *セントリーウェーブ を guardianmod:停滞 スロットに加える。 NL 廃棄", - "UPGRADE_DESCRIPTION": " !D! ダメージを与える。 NL *セントリーウェーブ+ を guardianmod:停滞 スロットに加える。 NL 廃棄" + "DESCRIPTION": "!D! ダメージを与える。 NL *セントリーウェーブ を guardianmod:停滞 スロットに加える。 NL 廃棄", + "UPGRADE_DESCRIPTION": "!D! ダメージを与える。 NL *セントリーウェーブ+ を guardianmod:停滞 スロットに加える。 NL 廃棄" }, "Guardian:SentryWave": { "NAME": "セントリーウェーブ", @@ -139,8 +139,8 @@ }, "Guardian:CompilePackage": { "NAME": "コンパイルパッケージ", - "DESCRIPTION": "3枚の guardianmod:パッケージ から 1 枚を得る。 NL 廃棄", - "UPGRADE_DESCRIPTION": "3枚の 強化済み guardianmod:パッケージ から 1 枚を得る。 NL 廃棄", + "DESCRIPTION": "guardianmod:パッケージ を選択し、それらを guardianmod:停滞 スロットに置く。 NL 廃棄", + "UPGRADE_DESCRIPTION": "強化済み guardianmod:パッケージ を選択し、それらを guardianmod:停滞 スロットに置く。 NL 廃棄", "EXTENDED_DESCRIPTION": [ "パッケージを選択" ] @@ -157,8 +157,8 @@ }, "Guardian:PackageSphere": { "NAME": "Pack: スフィア", - "DESCRIPTION": " *球状シールド NL *金属化 NL *漂うオーブ NL 廃棄", - "UPGRADE_DESCRIPTION": "強化済み NL *球状シールド NL *金属化 NL *漂うオーブ NL 廃棄" + "DESCRIPTION": " *球状シールド NL *硬化 NL *漂うオーブ NL 廃棄", + "UPGRADE_DESCRIPTION": "強化済み NL *球状シールド NL *硬化 NL *漂うオーブ NL 廃棄" }, "Guardian:PackageSentry": { "NAME": "Pack: セントリー", @@ -186,12 +186,12 @@ }, "Guardian:Recover": { "NAME": "リカバー", - "DESCRIPTION": " !B! ブロックを得る。 NL guardianmod:制動 !M! NL 捨て札のカードを1枚 guardianmod:停滞 させる。" + "DESCRIPTION": "!B! ブロックを得る。 NL guardianmod:制動 !M! NL 捨て札のカードを1枚 guardianmod:停滞 させる。" }, "Guardian:Emergency": { "NAME": "エマージェンシー", - "DESCRIPTION": "guardianmod:アクセラレート を guardianmod:停滞 が終わるまで繰り返す。 NL 廃棄", - "UPGRADE_DESCRIPTION": "guardianmod:アクセラレート を guardianmod:停滞 が終わるまで繰り返す。" + "DESCRIPTION": "guardianmod:アクセラレート を全ての guardianmod:停滞 スロットに対して行う。 NL 廃棄", + "UPGRADE_DESCRIPTION": "guardianmod:アクセラレート を全ての guardianmod:停滞 スロットに対して2回行う。 NL 廃棄" }, "Guardian:Clone": { "NAME": "クローン", @@ -204,15 +204,19 @@ }, "Guardian:GemFinder": { "NAME": "ジェム探査", - "DESCRIPTION": "戦闘終了後、コモン guardianmod:ジェム をデッキに加える。" + "DESCRIPTION": "エセリアル NL 戦闘終了後、ランダムな guardianmod:ジェム をデッキに加える。" }, "Guardian:StasisField": { "NAME": "停滞フィールド", - "DESCRIPTION": " !B! ブロックを得る。 NL このカードを *停滞 させる。 NL このカードが *停滞 から離れた時、 !B! ブロックを得る。" + "DESCRIPTION": "!B! ブロックを得る。 NL このカードを *停滞 させる。" + }, + "Guardian:Metallicize": { + "NAME": "硬化", + "DESCRIPTION": "*プレートアーマー !M! を得る。" }, "Guardian:StasisStrike": { "NAME": "ステイシスストライク", - "DESCRIPTION": " !D! ダメージを与える。 NL 停滞 スロットを1得る。" + "DESCRIPTION": "!D! ダメージを与える。 NL 停滞 スロットを1得る。" }, "Guardian:FuturePlans": { "NAME": "未来のプラン", @@ -222,7 +226,7 @@ "Guardian:Suspension": { "NAME": "サスペンション", "DESCRIPTION": "!B! ブロックを得る。 NL 手札のカードを1枚 guardianmod:停滞 させる。", - "UPGRADE_DESCRIPTION": "カードを 1 枚引く。 NL 手札のカードを1枚 guardianmod:停滞 させる。" + "UPGRADE_DESCRIPTION": "!B! ブロックを得る。 NL 手札のカードを1枚 guardianmod:停滞 させる。" }, "Guardian:FastForward": { "NAME": "スピードブースト", @@ -235,59 +239,59 @@ }, "Guardian:ConstructionForm": { "NAME": "構造化", - "DESCRIPTION": "エセリアル NL guardianmod:バッファー !M! を得る。 NL ターン開始時、 guardianmod:バッファー を維持していた場合 筋力 1 を得る。", - "UPGRADE_DESCRIPTION": "guardianmod:バッファー !M! を得る。 NL ターン開始時、 guardianmod:バッファー を維持していた場合 筋力 1 を得る。" + "DESCRIPTION": "エセリアル NL guardianmod:バッファー !M! を得る。 NL ターン開始時、 guardianmod:バッファー が 1以上なら 筋力 1 を得る。", + "UPGRADE_DESCRIPTION": "guardianmod:バッファー !M! を得る。 NL ターン開始時、 guardianmod:バッファー が 1以上なら 筋力 1 を得る。" }, "Guardian:RollAttack": { "NAME": "ロールアタック", - "DESCRIPTION": " !D! ダメージを与える。 NL *ディフェンシブモード の時は敵全体に拡大する。 NL それ以外の場合 guardianmod:制動 8 を行う。" + "DESCRIPTION": "!D! ダメージを与える。 NL *ディフェンシブモード の時は敵全体に拡大する。 NL それ以外の場合 guardianmod:制動 8 を行う。" }, "Guardian:GemFire": { "NAME": "ジェムキャノン", - "DESCRIPTION": "ソケットにある物を含め全ての *ジェム を *廃棄 する。 NL 廃棄した *ジェム の数だけランダムな敵に !D! ダメージ。", - "UPGRADE_DESCRIPTION": " NL ( !M! 回)" + "DESCRIPTION": "!D! ダメージを与える。 NL デッキ内のソケットに装着された全ての guardianmod:ジェム の効果を発動する。 NL 廃棄", + "UPGRADE_DESCRIPTION": " NL (全 !M! 枚)" }, "Guardian:ChargeCore": { "NAME": "チャージコア", - "DESCRIPTION": " !D! ダメージを与える。 NL guardianmod:停滞 させる。 NL guardianmod:チック - カードを 1 枚引く。 NL guardianmod:揮発性" + "DESCRIPTION": "!D! ダメージを与える。 NL guardianmod:停滞 させる。 NL guardianmod:チック - カードを 1 枚引く。 NL guardianmod:揮発性" }, "Guardian:Reroute": { "NAME": "経路変更", - "DESCRIPTION": " !D! ダメージを与える。 NL 次にカードをプレイした時そのカードを guardianmod:停滞 させる" + "DESCRIPTION": "!D! ダメージを与える。 NL 次にカードをプレイした時そのカードを guardianmod:停滞 させる" }, "Guardian:PiercingHide": { "NAME": "ピアッシングハイド", - "DESCRIPTION": " !B! ブロックと一時的な トゲ !M! を得る。 NL guardianmod:制動 3" + "DESCRIPTION": "!B! ブロックと一時的な トゲ !M! を得る。 NL guardianmod:制動 3", + "UPGRADE_DESCRIPTION": "!B! ブロックと一時的な トゲ !M! を得る。 NL guardianmod:制動 4" }, "Guardian:ShieldSpikes": { "NAME": "シールドスパイク", - "DESCRIPTION": " !B! ブロックを得る。 NL *ディフェンシブモード の場合、 トゲ !M! を得る。 NL それ以外の場合 guardianmod:制動 8 を行う。" + "DESCRIPTION": "!B! ブロックを得る。 NL *ディフェンシブモード の場合、 トゲ !M! を得る。 NL guardianmod:制動 8" }, "Guardian:PrismaticBeam": { "NAME": "プリズムスプレー", - "DESCRIPTION": " !D! ダメージを装着されている guardianmod:ジェム の数だけ与える。" + "DESCRIPTION": "!D! ダメージを装着されている guardianmod:ジェム の数だけ与える。" }, "Guardian:PrismaticBarrier": { "NAME": "プリズムバリア", - "DESCRIPTION": " !B! ブロックを装着されている guardianmod:ジェム の数だけ得る。" + "DESCRIPTION": "!B! ブロックを装着されている guardianmod:ジェム の数だけ得る。" }, "Guardian:TemporalStrike": { "NAME": "テンポラリストライク", - "DESCRIPTION": " !D! ダメージを与える。 NL guardianmod:停滞 させているカードがある場合 [E] を得る。", - "UPGRADE_DESCRIPTION": " !D! ダメージを与える。 NL guardianmod:停滞 させているカードがある場合 [E] を得る。" + "DESCRIPTION": "!D! ダメージを与える。 NL guardianmod:停滞 させているカードがある場合 [E] を得る。", + "UPGRADE_DESCRIPTION": "!D! ダメージを与える。 NL guardianmod:停滞 させているカードがある場合 [E] を得る。" }, "Guardian:TemporalShield": { "NAME": "テンポラリシールド", - "DESCRIPTION": " !B! ブロックを得る。 NL guardianmod:アクセラレート" + "DESCRIPTION": "!B! ブロックを得る。 NL guardianmod:アクセラレート" }, "Guardian:ExploitGems": { "NAME": "ジェム発掘", - "DESCRIPTION": "カードを 1 枚引く。", - "UPGRADE_DESCRIPTION": " [E] を得る。 NL カードを 1 枚引く。" + "DESCRIPTION": "カードを 1 枚引く。" }, "Guardian:RefractedBeam": { "NAME": "リフレクトビーム", - "DESCRIPTION": " !D! ダメージを !M! 回与える。 NL 何度でもアップグレード出来る。" + "DESCRIPTION": "!D! ダメージを !M! 回与える。 NL 何度でもアップグレード出来る。 NL アップグレードする度ジェムの発動回数が増加する。" }, "Guardian:MultiBeam": { "NAME": "マルチ-ビーム", @@ -295,19 +299,21 @@ }, "Guardian:BaubleBeam": { "NAME": "バブルビーム", - "DESCRIPTION": " !D! ダメージを与える。 NL *ジェム の効果を !M! 回 実行する。" + "DESCRIPTION": "!D! ダメージを与える。 NL *ジェム の効果を !M! 回 実行する。" }, "Guardian:PrimingBeam": { "NAME": "プライミングショット", - "DESCRIPTION": " !D! ダメージを与える。 NL guardianmod:制動 !M!" + "DESCRIPTION": "!D! ダメージを与える。 NL guardianmod:制動 !M!" }, "Guardian:EvasiveProtocol": { "NAME": "回避プロトコル", - "DESCRIPTION": " *ディフェンシブモード 中 敏捷性 !M! を得る。 NL ターン開始時 guardianmod:制動 3" + "DESCRIPTION": " *ディフェンシブモード に入った時、自分のデバフを !M! 減少させる。 NL guardianmod:制動 !GuardianSecondM!", + "UPGRADE_DESCRIPTION": "*ディフェンシブモード に入った時、自分のデバフを !M! 減少させる。 NL guardianmod:制動 !GuardianSecondM!" }, "Guardian:SpikerProtocol": { "NAME": "反撃プロトコル", - "DESCRIPTION": " *ディフェンシブモード 中 トゲ !M! を得る。 NL ターン開始時 guardianmod:制動 3" + "DESCRIPTION": " *ディフェンシブモード に入った時、 トゲ !M! を得る。 NL guardianmod:制動 !GuardianSecondM!", + "UPGRADE_DESCRIPTION": " *ディフェンシブモード に入った時、 トゲ !M! を得る。 NL guardianmod:制動 !GuardianSecondM!" }, "Guardian:ArmoredProtocol": { "NAME": "防御プロトコル", @@ -320,12 +326,12 @@ }, "Guardian:AncientConstruct": { "NAME": "古代の構築物", - "DESCRIPTION": "ターン開始時、 アーティファクト を所持していなければ !M! アーティファクト を得る。", - "UPGRADE_DESCRIPTION": " 2 アーティファクト を得る。 NL ターン開始時、 アーティファクト を所持していなければ !M! アーティファクト を得る。" + "DESCRIPTION": "1 アーティファクト を得る。 NL ターン開始時、 アーティファクト を所持していなければ !M! アーティファクト を得る。", + "UPGRADE_DESCRIPTION": " 1 アーティファクト を得る。 NL ターン開始時、 アーティファクト を所持していなければ !M! アーティファクト を得る。" }, "Guardian:CrystalBeam": { "NAME": "クリスタルレイ", - "DESCRIPTION": " !D! ダメージを与える。 NL デッキ内の guardianmod:ジェム 1枚につき、 !M! のダメージが追加される。" + "DESCRIPTION": "!D! ダメージを与える。 NL デッキ内の guardianmod:ジェム 1枚につき、 !M! のダメージが追加される。" }, "Guardian:Gem_Synthetic": { "NAME": "オニキス", @@ -359,11 +365,11 @@ }, "Guardian:CrystalShiv": { "NAME": "クリスタルナイフ", - "DESCRIPTION": " !D! ダメージを与える。 NL 廃棄" + "DESCRIPTION": "!D! ダメージを与える。 NL 廃棄" }, "Guardian:CrystalWard": { "NAME": "水晶の護り", - "DESCRIPTION": " !B! ブロックを得る。 NL 廃棄" + "DESCRIPTION": "!B! ブロックを得る。 NL 廃棄" }, "Guardian:Repulse": { "NAME": "リパルサー", @@ -372,15 +378,15 @@ }, "Guardian:BronzeOrb": { "NAME": "オーブサポート", - "DESCRIPTION": "天賦 NL !D! ダメージを与える。 山札からランダムなカードを1枚 guardianmod:停滞 させる。 NL 廃棄" + "DESCRIPTION": "!D! ダメージを与える。 NL ブロックされなかったダメージに等しい guardianmod:制動 を行う。 NL 廃棄" }, "Guardian:RevengeProtocol": { "NAME": "復讐プロトコル", - "DESCRIPTION": "*ディフェンシブモード 中 筋力 !M! を得る。 NL ターン開始時 guardianmod:制動 !GuardianSecondM!" + "DESCRIPTION": "*ディフェンシブモード に入った時 筋力 !M! を得る。 NL ターン開始時 guardianmod:制動 !GuardianSecondM!" }, "Guardian:GatlingBeam": { "NAME": "レーザータレット", - "DESCRIPTION": " !D! ダメージを与える。 NL !M! ターンの間 guardianmod:停滞 する。 NL guardianmod:チック - ランダムな敵に !D! ダメージを与える。" + "DESCRIPTION": "!D! ダメージを与える。 NL !M! ターンの間 guardianmod:停滞 する。 NL guardianmod:チック - ランダムな敵に !D! ダメージを与える。" }, "Guardian:ShieldCharger": { "NAME": "シールドチャージャー", @@ -393,11 +399,11 @@ }, "Guardian:HammerDown": { "NAME": "ハンマーダウン", - "DESCRIPTION": " !D! ダメージを与える。 NL 筋力 と 敏捷性 を2倍にする。 NL 廃棄" + "DESCRIPTION": "!D! ダメージを与える。 NL 筋力 と 敏捷性 を2倍にする。 NL 廃棄" }, "Guardian:OmegaCannon": { "NAME": "オメガキャノン", - "DESCRIPTION": " !D! ダメージを与える。 NL 筋力 1 毎にこのカードのコストが [E] 減少する。" + "DESCRIPTION": "!D! ダメージを与える。 NL 筋力 1 毎にこのカードのコストが [E] 減少する。" }, "Guardian:ModeShift": { "NAME": "モードシフト", @@ -434,7 +440,7 @@ }, "Guardian:BodySlam": { "NAME": "ボディクラッシュ", - "DESCRIPTION": " !B! ブロックを得る。 NL ブロックと同じ値のダメージを与える。", + "DESCRIPTION": "!B! ブロックを得る。 NL ブロックと同じ値のダメージを与える。", "UPGRADE_DESCRIPTION": " NL ( !D! ダメージ)" }, "Guardian:SecondStrike": { @@ -447,7 +453,7 @@ }, "Guardian:StrikeForStrike": { "NAME": "ストライク合戦", - "DESCRIPTION": " !D! ダメージを与える。 NL 敵から !M! ダメージを受ける。" + "DESCRIPTION": "!D! ダメージを与える。 NL 敵から !M! ダメージを受ける。" }, "Guardian:GearUp": { "NAME": "ギアアップ", diff --git a/src/main/resources/guardianResources/localization/jpn/CharacterStrings.json b/src/main/resources/guardianResources/localization/jpn/CharacterStrings.json index b45f45077..1ee38d3d6 100644 --- a/src/main/resources/guardianResources/localization/jpn/CharacterStrings.json +++ b/src/main/resources/guardianResources/localization/jpn/CharacterStrings.json @@ -9,8 +9,8 @@ "[ guardianmod:ソケット ]", "暗い道を歩いていると、数人のフードをかぶった人物が何か暗い儀式をしているところに出くわす。あなたが近づくと、彼らは不気味に一斉にこちらを向いた。その中で最も背の高い者は牙の生えた歯をむき出しにし、青白い長い手をあなたに向かって伸ばした。 NL 「 ~我らに加われ古き守り人よ。そして塔の温もりを感じるのだ~ 」", "ディフェンシブモード", - " #b3 #yトゲ を得て、毎ターン #b10 #yブロックが付与される。 NL ターン終了時ブロックが廃棄されることはない。", - "~ERROR:~ #r停滞 が進行中です" + " #b3 #yトゲ を得る。 NL ターン終了時ブロックが廃棄されることはない。", + "~ERROR:~ #r停滞 を実行中。" ], "KEYWORDS": [ ] diff --git a/src/main/resources/guardianResources/localization/jpn/KeywordStrings.json b/src/main/resources/guardianResources/localization/jpn/KeywordStrings.json index b65205dbd..2f6417e10 100644 --- a/src/main/resources/guardianResources/localization/jpn/KeywordStrings.json +++ b/src/main/resources/guardianResources/localization/jpn/KeywordStrings.json @@ -33,7 +33,7 @@ "defensive_mode", "ディフェンシブモード" ], - "DESCRIPTION": "#yスタンス NL ディフェンシブモード中は #b3 #yトゲ を持ち、ターン開始時に #b10 #yブロック を得る。更にターン終了時ブロックを維持する。" + "DESCRIPTION": "#yスタンス NL ディフェンシブモード に入った時、 #b16 #yブロック を得る。 モード中は #b3 #yトゲ を持ち、更にターン終了時ブロックを維持する。" }, { "NAMES": [ diff --git a/src/main/resources/guardianResources/localization/jpn/PotionStrings.json b/src/main/resources/guardianResources/localization/jpn/PotionStrings.json index ccfb9a7f1..aee8e22f2 100644 --- a/src/main/resources/guardianResources/localization/jpn/PotionStrings.json +++ b/src/main/resources/guardianResources/localization/jpn/PotionStrings.json @@ -1,6 +1,6 @@ { "Guardian:AcceleratePotion": { - "NAME": "テンポラルポーション", + "NAME": "緊急ポーション", "DESCRIPTIONS": [ " #y停滞 中のカード全てに #yアクセラレート を #b", " 回行う。" diff --git a/src/main/resources/guardianResources/localization/jpn/PowerStrings.json b/src/main/resources/guardianResources/localization/jpn/PowerStrings.json index 0a9b26b69..1c2783f4a 100644 --- a/src/main/resources/guardianResources/localization/jpn/PowerStrings.json +++ b/src/main/resources/guardianResources/localization/jpn/PowerStrings.json @@ -39,9 +39,9 @@ "Guardian:GemFinderPower": { "NAME": "ジェム探査", "DESCRIPTIONS": [ - "戦闘終了時、 コモン #yジェム を1枚選択しデッキに加える。", + "戦闘終了時、 ランダムな #yジェム を1枚選択しデッキに加える。", "戦闘終了時、 #b", - " 枚の コモン #yジェム を選択しデッキに加える。" + " 枚の ランダムな #yジェム を選択しデッキに加える。" ] }, "Guardian:FuturePlansPower": { @@ -63,7 +63,8 @@ "Guardian:ConstructModePower": { "NAME": "コンストラクションモード", "DESCRIPTIONS": [ - "ターン開始時、あなたが バッファー を持っていれば 筋力 #b", + "ターン開始時、あなたが 最低 #b", + " の #yバッファー を持っていれば #y筋力 #b", " を得る。" ] }, @@ -130,7 +131,7 @@ "NAME": "モードシフト", "DESCRIPTIONS": [ "HPが #b", - " 減少した場合、 #b10 #yブロックを得て 次のターンまで #yディフェンシブモード に入る。 NL 次にこの効果を発動するために必要なHP量が #b10 増加する。最大 #b50 まで。" + " 減少した場合、 #b16 #yブロックを得て 次のターンまで #yディフェンシブモード に入る。 NL 次にこの効果を発動するために必要なHP量が #b10 増加する。最大 #b50 まで。" ] }, "Guardian:ExhaustStatusesPower": { @@ -144,7 +145,7 @@ "Guardian:RevengePower": { "NAME": "リベンジ", "DESCRIPTIONS": [ - "#yディフェンシブモード の間、 #y筋力 #b", + "#yディフェンシブモード に入った時、 #y筋力 #b", " を得る。" ] }, @@ -177,14 +178,14 @@ "Guardian:EvasiveProtocolPower": { "NAME": "回避プロトコル", "DESCRIPTIONS": [ - "#yディフェンシブモード の間 #y敏捷性 #b", - " を得る。" + "#yディフェンシブモード に入った時、 #yデバフ を #b", + " 減少させる。" ] }, "Guardian:SpikerProtocolPower": { "NAME": "反撃プロトコル", "DESCRIPTIONS": [ - "#yディフェンシブモード の間 #yトゲ #b", + "#yディフェンシブモード に入った時、 #yトゲ #b", " を得る。" ] }, diff --git a/src/main/resources/guardianResources/localization/jpn/RelicStrings.json b/src/main/resources/guardianResources/localization/jpn/RelicStrings.json index 9c58d5175..160c7becd 100644 --- a/src/main/resources/guardianResources/localization/jpn/RelicStrings.json +++ b/src/main/resources/guardianResources/localization/jpn/RelicStrings.json @@ -3,14 +3,22 @@ "NAME": "ブロンズギア", "FLAVOR": "最も重要な部分を保護する。", "DESCRIPTIONS": [ - "戦闘開始時、 #yギアアップ を得る。 NL ガーディアンはランダムなコモン #yジェム を持った状態でランを開始する。" + "戦闘開始時、 #yギアアップ を手札に加える。 NL ガーディアンはランダムなコモン #yジェム を持った状態でランを開始する。" ] }, "Guardian:ModeShifterPlus": { "NAME": "ガーディアンギア", "FLAVOR": "3,000フロア毎に交換してください", "DESCRIPTIONS": [ - "#rブロンズギア と置き換える。 NL 戦闘が #yguardianmod:ディフェンシブモード で開始される。それは #b3 ターンの間継続する。" + "", + "#rブロンズギア と置き換える。 NL 戦闘開始時、 #yギアアップ を手札に加える。 NL #yディフェンシブモード になる度、 [E] を得てカードを #b2 枚引く。" + ] + }, + "Guardian:ObsidianScales": { + "NAME": "オブシディアンスケイル", + "FLAVOR": "お前の血で空を黒く染めろ。お前に害成す全てに報復せよ。", + "DESCRIPTIONS": [ + "戦闘開始時、 #yトゲ #b3 を得る。 デバフを受けた時、 #yトゲ #b1 を得る。" ] }, "Guardian:DefensiveModeMoreBlock": { @@ -38,14 +46,14 @@ "NAME": "ジェム入り袋", "FLAVOR": "おおぉ...眩しい!", "DESCRIPTIONS": [ - "入手時、ランダムな #yguardianmod:ジェム #b5 枚をデッキに追加する。" + "入手時、ランダムな #yguardianmod:ジェム #b5 枚を選択してデッキに追加する。" ] }, "Guardian:StasisCodex": { - "NAME": "パイロットのコーデックス", + "NAME": "パイロットコーデックス", "FLAVOR": "尖塔の初期手動駆動プロトタイプの設計図とダイアグラム。 by - マスター パイロット デビッド", "DESCRIPTIONS": [ - "ターン終了時、 #yguardianmod:停滞 されているカードが無かった場合、 #b3 枚のカードから #b1 枚を選択し、 #yguardianmod:停滞 スロットに置く。" + "戦闘開始から3ターンの間、ターン終了時に #yguardianmod:停滞 スロットが空いていた場合、 #b3 枚のカードから #b1 枚を選択し、 #yguardianmod:停滞 スロットに置く。" ] }, "Guardian:StasisSlotIncreaseRelic": { @@ -101,7 +109,7 @@ "NAME": "ピッケル・オブ・ラプソディ", "FLAVOR": "尖塔に多くの宝石が散在する中で、このピッケルを必要とするほど不運な人が居るとは想像し難い。", "DESCRIPTIONS": [ - "休憩所で #b2 枚の #yguardianmod:ジェム を #g掘削 出来るようになる。 (最大 #b3 回)" + "休憩所で #b2 枚の #yguardianmod:ジェム を #g掘削 出来るようになる。入手するかどうかは選択出来る。 (最大 #b3 回)" ] }, "Guardian:GemstoneGun": { @@ -116,10 +124,10 @@ "NAME": "瓶詰めの異変", "FLAVOR": "渦を巻いて、渦を巻いて、最後には壊れる。", "DESCRIPTIONS": [ - "入手時、デッキからカードを1枚選択する。戦闘開始時、山札からそれを取り除く。 #b3ターン目 開始時、コストを0にしたそのカードを手札に加える。", + "入手時、デッキからカードを1枚選択する。戦闘開始時、山札からそれを取り除く。 #b3ターン目 開始時、そのカードを手札に加える。カードはそのターンの間コストが #b0 になる。", "選択されたカード: ", - "戦闘開始時 ", - " 山札からそれを取り除く。 #b3ターン目 開始時、コストを0にしたそのカードを手札に加える。", + "戦闘開始時山札から ", + " を取り除く。 #b3ターン目 開始時、そのカードを手札に加える。カードはそのターンの間コストが #b0 になる。", "瓶に入ったカードがデッキから #r取り除かれ レリックは機能を失った。" ] } diff --git a/src/main/resources/guardianResources/localization/jpn/UIStrings.json b/src/main/resources/guardianResources/localization/jpn/UIStrings.json index 1b6c9f3e3..625fe50f8 100644 --- a/src/main/resources/guardianResources/localization/jpn/UIStrings.json +++ b/src/main/resources/guardianResources/localization/jpn/UIStrings.json @@ -12,7 +12,7 @@ "TEXT": [ "カードを1枚選び、 停滞 状態にする。", "ジェムを1枚選択。", - "デッキにコモン ジェム を1枚加える。", + "デッキに ジェム を1枚加える。", "停滞スロット に置く。", "~ERROR:~ コンストラクションモードでは #rアタック を使用できません。", "~ERROR:~ #r停滞 を実行中です。", diff --git a/src/main/resources/guardianResources/localization/kor/CardStrings.json b/src/main/resources/guardianResources/localization/kor/CardStrings.json index 947cea20d..104e073c8 100644 --- a/src/main/resources/guardianResources/localization/kor/CardStrings.json +++ b/src/main/resources/guardianResources/localization/kor/CardStrings.json @@ -1,456 +1,462 @@ -{ - "Guardian:Strike_Guardian": { - "NAME": "타격", - "DESCRIPTION": "피해를 !D! 줍니다." - }, - "Guardian:Defend_Guardian": { - "NAME": "수비", - "DESCRIPTION": "방어도를 !B! 얻습니다." - }, - "Guardian:Gem_Red": { - "NAME": "루비", - "DESCRIPTION": "guardianmod:보석. NL 힘을 2 얻습니다. 이번 턴이 끝날 때 힘을 2 잃습니다.", - "UPGRADE_DESCRIPTION": "힘을 2 얻습니다. 이번 턴이 끝날 때 힘을 2 잃습니다." - }, - "Guardian:Gem_Green": { - "NAME": "에메랄드", - "DESCRIPTION": "guardianmod:보석. NL 민첩을 2 얻습니다. 이번 턴이 끝날 때 민첩을 2 잃습니다.", - "UPGRADE_DESCRIPTION": "민첩을 2 얻습니다. 이번 턴이 끝날 때 민첩을 2 잃습니다." - }, - "Guardian:Gem_Lightblue": { - "NAME": "토르말린", - "DESCRIPTION": "guardianmod:보석. NL 가시를 4 얻습니다. 이번 턴이 끝날 때 가시를 4 잃습니다.", - "UPGRADE_DESCRIPTION": "가시를 4 얻습니다. 이번 턴이 끝날 때 가시를 4 잃습니다." - }, - "Guardian:Gem_White": { - "NAME": "석영", - "DESCRIPTION": "guardianmod:보석. NL 카드를 1장 뽑습니다.", - "UPGRADE_DESCRIPTION": "카드를 1장 뽑습니다." - }, - "Guardian:Gem_Orange": { - "NAME": "황수정", - "DESCRIPTION": "guardianmod:보석. NL [E] 를 얻습니다.", - "UPGRADE_DESCRIPTION": " [E] 를 얻습니다." - }, - "Guardian:Gem_Cyan": { - "NAME": "아쿠아 마린", - "DESCRIPTION": "guardianmod:보석. NL *크리스탈 *수호를 1장 얻습니다.", - "UPGRADE_DESCRIPTION": "*크리스탈 *수호를 1장 얻습니다." - }, - "Guardian:ChargeUp": { - "NAME": "충전 중", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL 다음 턴 동안 힘을 !M! 얻습니다." - }, - "Guardian:DonusPower": { - "NAME": "과적", - "DESCRIPTION": "카드를 !M! 장 뽑습니다. NL 다음 턴에 카드를 2장 덜 뽑습니다.", - "UPGRADE_DESCRIPTION": "카드를 !M! 장 뽑습니다. NL 다음 턴에 카드를 2장 덜 뽑습니다. NL 보유한 모든 해로운 효과를 1 감소시킵니다." - }, - "Guardian:DecasProtection": { - "NAME": "고대의 파워", - "DESCRIPTION": "힘 과 민첩을 !M! 얻습니다. NL 이번 턴이 끝날 때 힘 과 민첩을 !M! 잃습니다." - }, - "Guardian:FierceBash": { - "NAME": "매서운 강타", - "DESCRIPTION": "피해를 !D! 줍니다. NL guardianmod:정지장에 넣습니다. NL guardianmod:째깍할 때 이 카드의 피해량이 !M! 증가합니다." - }, - "Guardian:PolyBeam": { - "NAME": "다연발 광선", - "DESCRIPTION": "무작위 적들에게 피해를 !D! 만큼 !M! 번 줍니다." - }, - "Guardian:TwinSlam": { - "NAME": "두 번 강타", - "DESCRIPTION": "피해를 !D! 줍니다. NL *두 *번째 *강타를 얻습니다.", - "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL *두 *번째 *강타+를 얻습니다." - }, - "Guardian:GuardianWhirl": { - "NAME": "회오리 바람", - "DESCRIPTION": "방어도 가 20 이상 필요합니다. NL 적 전체에게 피해를 !D! 만큼 !M! 번 줍니다.", - "EXTENDED_DESCRIPTION": [ - "방어도 더 필요." - ] - }, - "Guardian:VentSteam": { - "NAME": "증기 분출", - "DESCRIPTION": "적 전체에게 취약을 !M! 부여합니다.", - "UPGRADE_DESCRIPTION": "적 전체에게 취약을 !M! 부여합니다." - }, - "Guardian:CurlUp": { - "NAME": "웅크리기", - "DESCRIPTION": "무작위 카드 1장을 guardianmod:정지장에 넣습니다. NL guardianmod:대비를 !M! 합니다.", - "UPGRADE_DESCRIPTION": "카드 1장을 guardianmod:정지장에 넣습니다. NL guardianmod:대비를 !M! 합니다." - }, - "Guardian:TimeBomb": { - "NAME": "시한폭탄", - "DESCRIPTION": "적 전체에게 피해를 !D! 줍니다. NL *정지장에 있는 모든 카드를 guardianmod:가속합니다. NL 소멸." - }, - "Guardian:HyperBeam_Guardian": { - "NAME": "파멸 광선", - "DESCRIPTION": "적 전체에게 피해를 !D! 줍니다. NL 힘의 효과가 !M! 배로 적용됩니다. NL hermit:기절합니다." - }, - "Guardian:BronzeArmor": { - "NAME": "탄력적인 갑옷", - "DESCRIPTION": "보유한 모든 해로운 효과를 !M! 감소시킵니다. NL guardianmod:대비를 8 합니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "보유한 모든 해로운 효과를 !M! 감소시킵니다. NL guardianmod:대비를 8 합니다." - }, - "Guardian:FloatingOrbs": { - "NAME": "부유 구체", - "DESCRIPTION": "비용이 0인 카드를 사용할 때마다 무작위 적에게 피해를 !M! 줍니다." - }, - "Guardian:OrbSlam": { - "NAME": "구체 강타", - "DESCRIPTION": "피해를 !D! 만큼 !GuardianMulti! 번 줍니다. NL 소멸." - }, - "Guardian:Incinerate": { - "NAME": "소각", - "DESCRIPTION": "피해를 !D! 줍니다. NL guardianmod:가속합니다.", - "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL 두 번 guardianmod:가속합니다." - }, - "Guardian:Orbwalk": { - "NAME": "구체 순찰기", - "DESCRIPTION": "힘을 !M! 얻습니다. NL guardianmod:째깍할 때 힘을 1 얻습니다. NL guardianmod:불안정.", - "UPGRADE_DESCRIPTION": "힘을 !M! 얻습니다. NL guardianmod:째깍할 때 힘을 1 얻습니다." - }, - "Guardian:WalkerClaw": { - "NAME": "순찰기 할퀴기", - "DESCRIPTION": "피해를 !D! 만큼 !M! 번 줍니다.", - "UPGRADE_DESCRIPTION": "피해를 !D! 만큼 !M! 번 줍니다." - }, - "Guardian:SphericShield": { - "NAME": "구체 방어", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL guardianmod:수비_모드로 전환합니다. NL 소멸." - }, - "Guardian:Harden": { - "NAME": "경화", - "DESCRIPTION": "방어도 가 20 이상 필요합니다. NL guardianmod:대비를 !GuardianSecondM! 하고 가시를 !M! 얻습니다.", - "EXTENDED_DESCRIPTION": [ - "방어도가 더 필요하다." - ] - }, - "Guardian:SentryBeam": { - "NAME": "보초기 폭발", - "DESCRIPTION": "피해를 !D! 줍니다. NL *보초기 *파동을 1장 guardianmod:정지장에 넣습니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL *보초기 *파동+을 1장 guardianmod:정지장에 넣습니다. NL 소멸." - }, - "Guardian:SentryWave": { - "NAME": "보초기 파동", - "DESCRIPTION": "약화를 !M! 부여합니다. NL *보초기 *폭발을 1장 guardianmod:정지장에 넣습니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "약화를 !M! 부여합니다. NL guardianmod:대비를 2 합니다. NL *보초기 *폭발+을 1장 guardianmod:정지장에 넣습니다. NL 소멸." - }, - "Guardian:CompilePackage": { - "NAME": "컴파일 패키지", - "DESCRIPTION": "3종류 중 1가지 guardianmod:패키지를 얻습니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "3종류 중 1가지 강화된 guardianmod:패키지를 얻습니다. NL 소멸.", - "EXTENDED_DESCRIPTION": [ - "패키지를 선택하십시오." - ] - }, - "Guardian:PackageShapes": { - "NAME": "패키지: 모양", - "DESCRIPTION": "*시한폭탄, *가시 *돋친 *규약, *격퇴를 얻습니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "*시한폭탄+, *가시 *돋친 *규약+, *격퇴+를 얻습니다. NL 소멸." - }, - "Guardian:PackageDonuDeca": { - "NAME": "패키지: 고대", - "DESCRIPTION": "*과적, *고대의 *파워, *고대의 *구조를 얻습니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "*과적+, *고대의 *파워+, *고대의 *구조+를 얻습니다. NL 소멸." - }, - "Guardian:PackageSphere": { - "NAME": "패키지: 구체", - "DESCRIPTION": "*구체 *방어, *금속화, *부유 *구체를 얻습니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "*구체 *방어+, *금속화+, *부유 *구체+를 얻습니다. NL 소멸." - }, - "Guardian:PackageSentry": { - "NAME": "패키지: 보초기", - "DESCRIPTION": "*보초기 *폭발 1장, *보초기 *파동 2장을 얻습니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "*보초기 *폭발+ 1장, *보초기 *파동+ 2장을 얻습니다. NL 소멸." - }, - "Guardian:PackageWalker": { - "NAME": "패키지: 구체 보조기", - "DESCRIPTION": "*구체 *순찰기, *순찰기 *할퀴기, *소각을 얻습니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "*구체 *순찰기+, *순찰기 *할퀴기+, *소각+을 얻습니다. NL 소멸." - }, - "Guardian:PackageAutomaton": { - "NAME": "패키지: 청동", - "DESCRIPTION": "*파멸 *광선, *구체 *보조기, *탄력적인 *갑옷을 얻습니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "*파멸 *광선+, *구체 *보조기+, *탄력적인 *갑옷+을 얻습니다. NL 소멸." - }, - "Guardian:PackageDefect": { - "NAME": "패키지: 디펙트", - "DESCRIPTION": "*재편성, *사전 *구성, *시간 *축전기를 얻습니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "*재편성+, *사전 *구성+, *시간 *축전기+를 얻습니다. NL 소멸." - }, - "Guardian:Planning": { - "NAME": "계획", - "DESCRIPTION": "뽑을 카드 더미 위에서 !M! 장을 guardianmod:정지장에 넣습니다." - }, - "Guardian:Recover": { - "NAME": "복구", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL guardianmod:대비를 !M! 합니다. NL 버린 카드 더미에서 카드를 1장 guardianmod:정지장에 넣습니다." - }, - "Guardian:Emergency": { - "NAME": "긴급 상황", - "DESCRIPTION": "guardianmod:정지장에 있는 카드 1장이 벗어날 때까지 guardianmod:가속합니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "guardianmod:정지장에 있는 카드 1장이 벗어날 때까지 guardianmod:가속합니다." - }, - "Guardian:Clone": { - "NAME": "복제", - "DESCRIPTION": "카드를 선택합니다. NL 그 카드를 복사해 guardianmod:정지장에 넣습니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "카드를 선택합니다. NL 그 카드를 복사해 guardianmod:정지장에 넣습니다. NL guardianmod:가속합니다. NL 소멸." - }, - "Guardian:Preprogram": { - "NAME": "사전 구성", - "DESCRIPTION": "뽑을 카드 더미 위에서 !M! 장을 확인합니다. 그 카드 중 1장을 선택해 guardianmod:정지장에 넣습니다." - }, - "Guardian:GemFinder": { - "NAME": "보석 채취", - "DESCRIPTION": "전투 종료 시 *일반 guardianmod:보석 카드 보상을 추가로 얻습니다." - }, - "Guardian:StasisField": { - "NAME": "정지장 방어막", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL guardianmod:정지장에 넣습니다. NL 이 카드가 guardianmod:정지장에서 벗어날 때 방어도를 !B! 얻습니다." - }, - "Guardian:StasisStrike": { - "NAME": "정지장 타격", - "DESCRIPTION": "피해를 !D! 줍니다. NL guardianmod:정지장 슬롯을 1 얻습니다." - }, - "Guardian:FuturePlans": { - "NAME": "미래 계획", - "DESCRIPTION": "턴 종료 시 카드를 !M! 장 guardianmod:정지장에 넣습니다.", - "UPGRADE_DESCRIPTION": "선천성. NL 턴 종료 시 카드를 !M! 장 guardianmod:정지장에 넣습니다." - }, - "Guardian:Suspension": { - "NAME": "완충장치", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL 카드를 1장 guardianmod:정지장에 넣습니다.", - "UPGRADE_DESCRIPTION": "카드를 1장 뽑습니다. NL 카드를 1장 guardianmod:정지장에 넣습니다." - }, - "Guardian:FastForward": { - "NAME": "속력 가속", - "DESCRIPTION": "guardianmod:가속을 !M! 번 합니다.", - "UPGRADE_DESCRIPTION": "보존. NL guardianmod:가속을 !M! 번 합니다." - }, - "Guardian:TimeCapacitor": { - "NAME": "시간 축전기", - "DESCRIPTION": "정지장 슬롯을 !M! 개 얻습니다." - }, - "Guardian:ConstructionForm": { - "NAME": "구조물의 형상", - "DESCRIPTION": "휘발성. NL guardianmod:버퍼를 !M! 얻습니다. NL 내 턴 시작 시 guardianmod:버퍼가 있다면 힘을 1 얻습니다.", - "UPGRADE_DESCRIPTION": "guardianmod:버퍼를 !M! 얻습니다. NL 내 턴 시작 시 guardianmod:버퍼가 있다면 힘을 1 얻습니다." - }, - "Guardian:RollAttack": { - "NAME": "구르기 공격", - "DESCRIPTION": "피해를 !D! 줍니다. NL guardianmod:수비_모드라면 적 전체에게 피해를 줍니다. 아니라면 guardianmod:대비를 8 합니다." - }, - "Guardian:GemFire": { - "NAME": "보석 대포", - "DESCRIPTION": "bronze:소유하거나 장착된 guardianmod:보석을 모두 소멸시킵니다. 소멸된 guardianmod:보석 하나당 무작위 적에게 피해를 !D! 줍니다. NL 소멸.", - "UPGRADE_DESCRIPTION": " NL ( !M! 번 피해를 입힙니다.)" - }, - "Guardian:ChargeCore": { - "NAME": "코어 충전", - "DESCRIPTION": "피해를 !D! 주고 guardianmod:정지장에 넣습니다. NL guardianmod:째깍할 때 카드를 1장 뽑습니다. NL guardianmod:불안정." - }, - "Guardian:Reroute": { - "NAME": "재편성", - "DESCRIPTION": "피해를 !D! 줍니다. NL 이번 턴 동안 다음으로 사용하는 카드를 guardianmod:정지장에 넣습니다." - }, - "Guardian:PiercingHide": { - "NAME": "가시 외골격", - "DESCRIPTION": "방어도를 !B! 얻고 가시를 !M! 얻습니다. 이번 턴이 끝날 때 가시를 !M! 잃습니다. NL guardianmod:대비를 3 합니다." - }, - "Guardian:ShieldSpikes": { - "NAME": "가시 방패", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL guardianmod:수비_모드라면 가시를 !M! 얻습니다. 아니라면 guardianmod:대비를 8 합니다." - }, - "Guardian:PrismaticBeam": { - "NAME": "프리즘 광선", - "DESCRIPTION": "이 카드에 장착된 guardianmod:보석 하나당 피해를 !D! 줍니다." - }, - "Guardian:PrismaticBarrier": { - "NAME": "프리즘 장벽", - "DESCRIPTION": "이 카드에 장착된 guardianmod:보석 하나당 방어도를 !B! 얻습니다." - }, - "Guardian:TemporalStrike": { - "NAME": "시간차 타격", - "DESCRIPTION": "피해를 !D! 줍니다. NL guardianmod:정지장에 카드가 있다면 [E] 를 얻습니다.", - "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL guardianmod:정지장에 카드가 있다면 [E] 를 얻습니다." - }, - "Guardian:TemporalShield": { - "NAME": "시간차 방패", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL guardianmod:가속합니다." - }, - "Guardian:ExploitGems": { - "NAME": "보석 활용", - "DESCRIPTION": "카드를 1장 뽑습니다.", - "UPGRADE_DESCRIPTION": " [E] 를 얻습니다. NL 카드를 1장 뽑습니다." - }, - "Guardian:RefractedBeam": { - "NAME": "굴절 광선", - "DESCRIPTION": "피해를 !D! 만큼 !M! 번 줍니다. NL 강화 횟수에 제한이 없습니다." - }, - "Guardian:MultiBeam": { - "NAME": "다중 광선", - "DESCRIPTION": "적 전체에게 피해를 !D! 만큼 X번 줍니다. NL guardianmod:째깍할 때 이 카드의 피해량이 !M! 만큼 증가합니다." - }, - "Guardian:BaubleBeam": { - "NAME": "큐빅 폭발", - "DESCRIPTION": "피해를 !D! 줍니다. NL 장착된 guardianmod:보석 효과를 !M! 번 발동시킵니다." - }, - "Guardian:PrimingBeam": { - "NAME": "기폭제", - "DESCRIPTION": "피해를 !D! 줍니다. NL guardianmod:대비를 !M! 합니다." - }, - "Guardian:EvasiveProtocol": { - "NAME": "회피 규약", - "DESCRIPTION": "guardianmod:수비_모드 동안 민첩을 !M! 증가시킵니다. NL 내 턴 시작 시 guardianmod:대비를 3 합니다." - }, - "Guardian:SpikerProtocol": { - "NAME": "가시 돋친 규약", - "DESCRIPTION": "guardianmod:수비_모드 동안 가시를 !M! 얻습니다. NL 내 턴 시작 시 guardianmod:대비를 3 합니다." - }, - "Guardian:ArmoredProtocol": { - "NAME": "무장 규약", - "DESCRIPTION": "guardianmod:수비_모드 동안 턴 종료 시 방어도를 !M! 얻습니다. NL 내 턴 시작 시 guardianmod:대비를 3 합니다." - }, - "Guardian:TimeSifter": { - "NAME": "시간 선별기", - "DESCRIPTION": "내 턴 시작 시 guardianmod:가속합니다.", - "UPGRADE_DESCRIPTION": "선천성. NL 내 턴 시작 시 guardianmod:가속합니다." - }, - "Guardian:AncientConstruct": { - "NAME": "고대의 구조", - "DESCRIPTION": "내 턴 시작 시 인공물이 없다면 인공물을 !M! 얻습니다.", - "UPGRADE_DESCRIPTION": "인공물을 2 얻습니다. NL 내 턴 시작 시 인공물이 없다면 인공물을 !M! 얻습니다." - }, - "Guardian:CrystalBeam": { - "NAME": "크리스탈 광선", - "DESCRIPTION": "피해를 !D! 줍니다. 덱에 guardianmod:보석 하나당 피해량이 !M! 증가합니다." - }, - "Guardian:Gem_Synthetic": { - "NAME": "오닉스", - "DESCRIPTION": "guardianmod:보석. NL 보유한 모든 해로운 효과를 1 감소시킵니다.", - "UPGRADE_DESCRIPTION": "보유한 모든 해로운 효과를 1 감소시킵니다." - }, - "Guardian:Gem_Yellow": { - "NAME": "호박", - "DESCRIPTION": "guardianmod:보석. NL guardianmod:가속합니다.", - "UPGRADE_DESCRIPTION": "guardianmod:가속합니다." - }, - "Guardian:Gem_Purple": { - "NAME": "자수정", - "DESCRIPTION": "guardianmod:보석. NL 적 전체의 힘을 이번 턴 동안 2 감소시킵니다.", - "UPGRADE_DESCRIPTION": "적 전체의 힘을 이번 턴 동안 2 감소시킵니다." - }, - "Guardian:Gem_Crimson": { - "NAME": "가넷", - "DESCRIPTION": "guardianmod:보석. NL 적 전체에게 취약을 1 부여합니다.", - "UPGRADE_DESCRIPTION": "적 전체에게 취약을 1 부여합니다." - }, - "Guardian:Gem_Blue": { - "NAME": "사파이어", - "DESCRIPTION": "guardianmod:보석. NL guardianmod:대비를 4 합니다.", - "UPGRADE_DESCRIPTION": "guardianmod:대비를 4 합니다." - }, - "Guardian:Gem_Fragmented": { - "NAME": "보석 파편", - "DESCRIPTION": "guardianmod:보석. NL *크리스탈 *단도를 얻습니다.", - "UPGRADE_DESCRIPTION": "*크리스탈 *단도를 얻습니다." - }, - "Guardian:CrystalShiv": { - "NAME": "크리스탈 단도", - "DESCRIPTION": "피해를 !D! 줍니다. NL 소멸." - }, - "Guardian:CrystalWard": { - "NAME": "크리스탈 수호", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL 소멸." - }, - "Guardian:Repulse": { - "NAME": "격퇴", - "DESCRIPTION": "매 턴 처음으로 상태이상 또는 저주를 뽑으면 소멸시키고 카드를 1장 뽑습니다.", - "UPGRADE_DESCRIPTION": "매 턴 처음으로 상태이상 또는 저주를 뽑으면 소멸시키고 카드를 1장 뽑습니다." - }, - "Guardian:BronzeOrb": { - "NAME": "구체 보조기", - "DESCRIPTION": "선천성. NL 피해를 !D! 줍니다. 뽑을 카드 더미에서 무작위 카드를 1장 guardianmod:정지장에 넣습니다. NL 소멸." - }, - "Guardian:RevengeProtocol": { - "NAME": "복수 규약", - "DESCRIPTION": "guardianmod:수비_모드 동안 힘을 !M! 증가시킵니다. NL 내 턴 시작 시 guardianmod:대비를 !GuardianSecondM! 합니다." - }, - "Guardian:GatlingBeam": { - "NAME": "광선 포탑", - "DESCRIPTION": "피해를 !D! 줍니다. NL guardianmod:정지장에 넣습니다. NL guardianmod:정지장에 !M! 턴 동안 대기합니다. NL guardianmod:째깍할 때 무작위 적에게 피해를 !D! 줍니다." - }, - "Guardian:ShieldCharger": { - "NAME": "보호막 충전기", - "DESCRIPTION": "guardianmod:정지장에 넣습니다. NL guardianmod:째깍할 때 guardianmod:대비를 !M! 하고 방어도를 !B! 얻습니다. NL guardianmod:불안정." - }, - "Guardian:StasisEngine": { - "NAME": "정지장 엔진", - "DESCRIPTION": "한 턴에 비용이 0인 카드를 3번 사용하면 [E] 를 얻고 카드를 1장 뽑습니다.", - "UPGRADE_DESCRIPTION": "선천성. NL 한 턴에 비용이 0인 카드를 3번 사용하면 [E] 를 얻고 카드를 1장 뽑습니다." - }, - "Guardian:HammerDown": { - "NAME": "전속력 내려치기", - "DESCRIPTION": "피해를 !D! 줍니다. NL 힘 과 민첩을 2배로 늘립니다. NL 소멸." - }, - "Guardian:OmegaCannon": { - "NAME": "오메가 대포", - "DESCRIPTION": "피해를 !D! 줍니다. NL 내 힘 하나당 이 카드의 비용이 [E] 감소합니다." - }, - "Guardian:ModeShift": { - "NAME": "모드 전환", - "DESCRIPTION": "힘 과 민첩 의 수치를 서로 바꿉니다. NL 카드를 1장 뽑습니다.", - "UPGRADE_DESCRIPTION": "보존. NL 힘 과 민첩 의 수치를 서로 바꿉니다. NL 카드를 1장 뽑습니다." - }, - "Guardian:PackageConstruct": { - "NAME": "패키지: 구조", - "DESCRIPTION": "*전속력 *내려치기, *오메가 *대포, *모드 *전환을 얻습니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "*전속력 *내려치기+, *오메가 *대포+, *모드 *전환+을 얻습니다. NL 소멸." - }, - "Guardian:PackageMass": { - "NAME": "패키지: 더미", - "DESCRIPTION": "*가시 *더미, *폭탄 *더미, *단체 *강타를 얻습니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "*가시 *더미+, *폭탄 *더미+, *단체 *강타+를 얻습니다. NL 소멸." - }, - "Guardian:MassOfThorns": { - "NAME": "가시 더미", - "DESCRIPTION": "가시를 !M! 얻습니다. 이번 턴이 끝날 때 가시를 !M! 잃습니다. NL 인공물을 보유한다면 이 카드를 소멸시킵니다." - }, - "Guardian:MassTimeBomb": { - "NAME": "폭탄 더미", - "DESCRIPTION": "빈 guardianmod:정지장 슬롯마다 *시한 *폭탄을 넣습니다. NL 시한 폭탄이 2장 이상 생성된다면 이 카드를 소멸시킵니다.", - "UPGRADE_DESCRIPTION": "빈 guardianmod:정지장 슬롯마다 *시한 *폭탄+을 넣습니다. NL 시한 폭탄이 2장 이상 생성된다면 이 카드를 소멸시킵니다." - }, - "Guardian:MassSlam": { - "NAME": "단체 강타", - "DESCRIPTION": "피해를 !D! 만큼 !M! 번 줍니다. NL 힘이 3 이상이면 이 카드를 소멸시킵니다." - }, - "Guardian:GemstoneGunCard": { - "NAME": "원석 총", - "DESCRIPTION": "보존.", - "UPGRADE_DESCRIPTION": " NL 소멸." - }, - "Guardian:BodySlam": { - "NAME": "몸체 충돌", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL 현재 방어도만큼 피해를 줍니다.", - "UPGRADE_DESCRIPTION": " NL (피해를 !D! 줍니다.)" - }, - "Guardian:SecondStrike": { - "NAME": "두 번째 강타", - "DESCRIPTION": "휘발성. NL 피해를 !D! 줍니다. NL 소멸." - }, - "Guardian:SecondStrikePreviewCard": { - "NAME": "두 번째 강타", - "DESCRIPTION": "휘발성. NL 피해를 !D! 줍니다. NL *두 *번 *강타의 guardianmod:소켓에 장착된 *보석이 이 카드의 guardianmod:소켓에 장착됩니다. NL 피해를 !D! 줍니다. NL 소멸." - }, - "Guardian:StrikeForStrike": { - "NAME": "연쇄 타격", - "DESCRIPTION": "피해를 !D! 줍니다. NL 적이 피해를 !M! 줍니다." - }, - "Guardian:GearUp": { - "NAME": "정비", - "DESCRIPTION": "보존. NL guardianmod:대비를 !M! 합니다. NL 소멸." - } +{ + "Guardian:Strike_Guardian": { + "NAME": "타격", + "DESCRIPTION": "피해를 !D! 줍니다." + }, + "Guardian:Defend_Guardian": { + "NAME": "수비", + "DESCRIPTION": "방어도를 !B! 얻습니다." + }, + "Guardian:Gem_Red": { + "NAME": "루비", + "DESCRIPTION": "guardianmod:보석. NL 힘을 2 얻습니다. 이번 턴이 끝날 때 힘을 2 잃습니다.", + "UPGRADE_DESCRIPTION": "힘을 2 얻습니다. 이번 턴이 끝날 때 힘을 2 잃습니다." + }, + "Guardian:Gem_Green": { + "NAME": "에메랄드", + "DESCRIPTION": "guardianmod:보석. NL 민첩을 2 얻습니다. 이번 턴이 끝날 때 민첩을 2 잃습니다.", + "UPGRADE_DESCRIPTION": "민첩을 2 얻습니다. 이번 턴이 끝날 때 민첩을 2 잃습니다." + }, + "Guardian:Gem_Lightblue": { + "NAME": "토르말린", + "DESCRIPTION": "guardianmod:보석. NL 가시를 4 얻습니다. 이번 턴이 끝날 때 가시를 4 잃습니다.", + "UPGRADE_DESCRIPTION": "가시를 4 얻습니다. 이번 턴이 끝날 때 가시를 4 잃습니다." + }, + "Guardian:Gem_White": { + "NAME": "석영", + "DESCRIPTION": "guardianmod:보석. NL 카드를 1장 뽑습니다.", + "UPGRADE_DESCRIPTION": "카드를 1장 뽑습니다." + }, + "Guardian:Gem_Orange": { + "NAME": "황수정", + "DESCRIPTION": "guardianmod:보석. NL [E] 를 얻습니다.", + "UPGRADE_DESCRIPTION": " [E] 를 얻습니다." + }, + "Guardian:Gem_Cyan": { + "NAME": "아쿠아 마린", + "DESCRIPTION": "guardianmod:보석. NL *크리스탈 *수호를 1장 얻습니다.", + "UPGRADE_DESCRIPTION": "*크리스탈 *수호를 1장 얻습니다." + }, + "Guardian:ChargeUp": { + "NAME": "충전 중", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 다음 턴 동안 힘을 !M! 얻습니다." + }, + "Guardian:DonusPower": { + "NAME": "과적", + "DESCRIPTION": "카드를 !M! 장 뽑습니다. NL 보유한 모든 해로운 효과를 1 감소시킵니다.", + "UPGRADE_DESCRIPTION": "카드를 !M! 장 뽑습니다. NL 보유한 모든 해로운 효과를 1 감소시킵니다." + }, + "Guardian:DecasProtection": { + "NAME": "고대의 파워", + "DESCRIPTION": "힘 과 민첩을 !M! 얻습니다. NL 이번 턴이 끝날 때 힘 과 민첩을 !M! 잃습니다." + }, + "Guardian:FierceBash": { + "NAME": "매서운 강타", + "DESCRIPTION": "피해를 !D! 줍니다. NL guardianmod:정지장에 넣습니다. NL guardianmod:째깍할 때 이 카드의 피해량이 !M! 증가합니다." + }, + "Guardian:PolyBeam": { + "NAME": "다연발 광선", + "DESCRIPTION": "무작위 적들에게 피해를 !D! 만큼 !M! 번 줍니다." + }, + "Guardian:TwinSlam": { + "NAME": "두 번 강타", + "DESCRIPTION": "피해를 !D! 줍니다. NL *두 *번째 *강타를 얻습니다.", + "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL *두 *번째 *강타+를 얻습니다." + }, + "Guardian:GuardianWhirl": { + "NAME": "회오리 바람", + "DESCRIPTION": "적 전체에게 피해를 !D! 만큼 2번 줍니다. NL 방어도가 16 이상이면 피해를 !M! 번 추가로 줍니다.", + "EXTENDED_DESCRIPTION": [ + "방어도 더 필요." + ] + }, + "Guardian:VentSteam": { + "NAME": "증기 분출", + "DESCRIPTION": "적 전체에게 취약을 !M! 부여합니다.", + "UPGRADE_DESCRIPTION": "적 전체에게 취약을 !M! 부여합니다." + }, + "Guardian:CurlUp": { + "NAME": "웅크리기", + "DESCRIPTION": "무작위 카드 1장을 guardianmod:정지장에 넣습니다. NL guardianmod:대비를 !M! 합니다.", + "UPGRADE_DESCRIPTION": "카드 1장을 guardianmod:정지장에 넣습니다. NL guardianmod:대비를 !M! 합니다." + }, + "Guardian:TimeBomb": { + "NAME": "시한폭탄", + "DESCRIPTION": "적 전체에게 피해를 !D! 줍니다. NL *정지장에 있는 모든 카드를 guardianmod:가속합니다. NL 소멸." + }, + "Guardian:HyperBeam_Guardian": { + "NAME": "파멸 광선", + "DESCRIPTION": "적 전체에게 피해를 !D! 줍니다. NL 힘의 효과가 !M! 배로 적용됩니다. NL hermit:기절합니다." + }, + "Guardian:BronzeArmor": { + "NAME": "탄력적인 갑옷", + "DESCRIPTION": "보유한 모든 해로운 효과를 !M! 감소시킵니다. NL guardianmod:대비를 8 합니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "보유한 모든 해로운 효과를 !M! 감소시킵니다. NL guardianmod:대비를 8 합니다." + }, + "Guardian:FloatingOrbs": { + "NAME": "부유 구체", + "DESCRIPTION": "비용이 0인 카드를 사용할 때마다 무작위 적에게 피해를 !M! 줍니다." + }, + "Guardian:OrbSlam": { + "NAME": "구체 강타", + "DESCRIPTION": "피해를 !D! 만큼 !GuardianMulti! 번 줍니다. NL 소멸." + }, + "Guardian:Incinerate": { + "NAME": "소각", + "DESCRIPTION": "피해를 !D! 줍니다. NL guardianmod:가속합니다.", + "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL 두 번 guardianmod:가속합니다." + }, + "Guardian:Orbwalk": { + "NAME": "구체 순찰기", + "DESCRIPTION": "힘을 !M! 얻습니다. NL guardianmod:째깍할 때 힘을 1 얻습니다. NL guardianmod:불안정.", + "UPGRADE_DESCRIPTION": "힘을 !M! 얻습니다. NL guardianmod:째깍할 때 힘을 1 얻습니다." + }, + "Guardian:WalkerClaw": { + "NAME": "순찰기 할퀴기", + "DESCRIPTION": "피해를 !D! 만큼 !M! 번 줍니다.", + "UPGRADE_DESCRIPTION": "피해를 !D! 만큼 !M! 번 줍니다." + }, + "Guardian:SphericShield": { + "NAME": "구체 방어", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL guardianmod:수비_모드로 전환합니다. NL 소멸." + }, + "Guardian:Harden": { + "NAME": "경화", + "DESCRIPTION": "방어도 가 20 이상 필요합니다. NL guardianmod:대비를 !GuardianSecondM! 하고 가시를 !M! 얻습니다.", + "EXTENDED_DESCRIPTION": [ + "방어도가 더 필요하다." + ] + }, + "Guardian:SentryBeam": { + "NAME": "보초기 폭발", + "DESCRIPTION": "피해를 !D! 줍니다. NL *보초기 *파동을 1장 guardianmod:정지장에 넣습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL *보초기 *파동+을 1장 guardianmod:정지장에 넣습니다. NL 소멸." + }, + "Guardian:SentryWave": { + "NAME": "보초기 파동", + "DESCRIPTION": "약화를 !M! 부여합니다. NL *보초기 *폭발을 1장 guardianmod:정지장에 넣습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "약화를 !M! 부여합니다. NL guardianmod:대비를 2 합니다. NL *보초기 *폭발+을 1장 guardianmod:정지장에 넣습니다. NL 소멸." + }, + "Guardian:CompilePackage": { + "NAME": "컴파일 패키지", + "DESCRIPTION": "guardianmod:패키지를 선택해 guardianmod:정지장에 넣습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "강화된 guardianmod:패키지를 선택해 guardianmod:정지장에 넣습니다. NL 소멸.", + "EXTENDED_DESCRIPTION": [ + "패키지를 선택하십시오." + ] + }, + "Guardian:PackageShapes": { + "NAME": "패키지: 모양", + "DESCRIPTION": "*시한폭탄, *가시 *돋친 *규약, *격퇴를 얻습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "*시한폭탄+, *가시 *돋친 *규약+, *격퇴+를 얻습니다. NL 소멸." + }, + "Guardian:PackageDonuDeca": { + "NAME": "패키지: 고대", + "DESCRIPTION": "*과적, *고대의 *파워, *고대의 *구조를 얻습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "*과적+, *고대의 *파워+, *고대의 *구조+를 얻습니다. NL 소멸." + }, + "Guardian:PackageSphere": { + "NAME": "패키지: 구체", + "DESCRIPTION": "*구체 *방어, *경화, *부유 *구체를 얻습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "*구체 *방어+, *경화+, *부유 *구체+를 얻습니다. NL 소멸." + }, + "Guardian:PackageSentry": { + "NAME": "패키지: 보초기", + "DESCRIPTION": "*보초기 *폭발 1장, *보초기 *파동 2장을 얻습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "*보초기 *폭발+ 1장, *보초기 *파동+ 2장을 얻습니다. NL 소멸." + }, + "Guardian:PackageWalker": { + "NAME": "패키지: 구체 보조기", + "DESCRIPTION": "*구체 *순찰기, *순찰기 *할퀴기, *소각을 얻습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "*구체 *순찰기+, *순찰기 *할퀴기+, *소각+을 얻습니다. NL 소멸." + }, + "Guardian:PackageAutomaton": { + "NAME": "패키지: 청동", + "DESCRIPTION": "*파멸 *광선, *구체 *보조기, *탄력적인 *갑옷을 얻습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "*파멸 *광선+, *구체 *보조기+, *탄력적인 *갑옷+을 얻습니다. NL 소멸." + }, + "Guardian:PackageDefect": { + "NAME": "패키지: 디펙트", + "DESCRIPTION": "*재편성, *사전 *구성, *시간 *축전기를 얻습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "*재편성+, *사전 *구성+, *시간 *축전기+를 얻습니다. NL 소멸." + }, + "Guardian:Planning": { + "NAME": "계획", + "DESCRIPTION": "뽑을 카드 더미 위에서 !M! 장을 guardianmod:정지장에 넣습니다." + }, + "Guardian:Recover": { + "NAME": "복구", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL guardianmod:대비를 !M! 합니다. NL 버린 카드 더미에서 카드를 1장 guardianmod:정지장에 넣습니다." + }, + "Guardian:Emergency": { + "NAME": "긴급 상황", + "DESCRIPTION": "guardianmod:정지장에 있는 모든 카드를 guardianmod:가속합니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "guardianmod:정지장에 있는 모든 카드를 2번 guardianmod:가속합니다. NL 소멸." + }, + "Guardian:Clone": { + "NAME": "복제", + "DESCRIPTION": "카드를 선택합니다. NL 그 카드를 복사해 guardianmod:정지장에 넣습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "카드를 선택합니다. NL 그 카드를 복사해 guardianmod:정지장에 넣습니다. NL guardianmod:가속합니다. NL 소멸." + }, + "Guardian:Preprogram": { + "NAME": "사전 구성", + "DESCRIPTION": "뽑을 카드 더미 위에서 !M! 장을 확인합니다. 그 카드 중 1장을 선택해 guardianmod:정지장에 넣습니다." + }, + "Guardian:GemFinder": { + "NAME": "보석 채취", + "DESCRIPTION": "휘발성. NL 전투 종료 시 덱에 무작위 guardianmod:보석을 얻습니다." + }, + "Guardian:StasisField": { + "NAME": "정지장 방어막", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 이 카드를 guardianmod:정지장에 넣습니다." + }, + "Guardian:Metallicize": { + "NAME": "경화", + "DESCRIPTION": "expansioncontent:판금_갑옷을 !M! 얻습니다." + }, + "Guardian:StasisStrike": { + "NAME": "정지장 타격", + "DESCRIPTION": "피해를 !D! 줍니다. NL guardianmod:정지장 슬롯을 1 얻습니다." + }, + "Guardian:FuturePlans": { + "NAME": "미래 계획", + "DESCRIPTION": "턴 종료 시 카드를 !M! 장 guardianmod:정지장에 넣습니다.", + "UPGRADE_DESCRIPTION": "선천성. NL 턴 종료 시 카드를 !M! 장 guardianmod:정지장에 넣습니다." + }, + "Guardian:Suspension": { + "NAME": "완충장치", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 카드를 1장 guardianmod:정지장에 넣습니다.", + "UPGRADE_DESCRIPTION": "방어도를 !B! 얻습니다. NL 카드를 1장 guardianmod:정지장에 넣습니다." + }, + "Guardian:FastForward": { + "NAME": "속력 가속", + "DESCRIPTION": "guardianmod:가속을 !M! 번 합니다.", + "UPGRADE_DESCRIPTION": "보존. NL guardianmod:가속을 !M! 번 합니다." + }, + "Guardian:TimeCapacitor": { + "NAME": "시간 축전기", + "DESCRIPTION": "정지장 슬롯을 !M! 개 얻습니다." + }, + "Guardian:ConstructionForm": { + "NAME": "구조물의 형상", + "DESCRIPTION": "휘발성. NL guardianmod:버퍼를 !M! 얻습니다. NL 내 턴 시작 시 guardianmod:버퍼가 있다면 힘을 1 얻습니다.", + "UPGRADE_DESCRIPTION": "guardianmod:버퍼를 !M! 얻습니다. NL 내 턴 시작 시 guardianmod:버퍼가 있다면 힘을 1 얻습니다." + }, + "Guardian:RollAttack": { + "NAME": "구르기 공격", + "DESCRIPTION": "피해를 !D! 줍니다. NL guardianmod:수비_모드라면 적 전체에게 피해를 줍니다. 아니라면 guardianmod:대비를 8 합니다." + }, + "Guardian:GemFire": { + "NAME": "보석 대포", + "DESCRIPTION": "피해를 !D! 줍니다. NL bronze:소유하거나 장착된 guardianmod:보석의 효과를 모두 발동합니다. NL 소멸.", + "UPGRADE_DESCRIPTION": " NL ( *보석이 !M! 장 있습니다.)" + }, + "Guardian:ChargeCore": { + "NAME": "코어 충전", + "DESCRIPTION": "피해를 !D! 주고 guardianmod:정지장에 넣습니다. NL guardianmod:째깍할 때 카드를 1장 뽑습니다. NL guardianmod:불안정." + }, + "Guardian:Reroute": { + "NAME": "재편성", + "DESCRIPTION": "피해를 !D! 줍니다. NL 이번 턴 동안 다음으로 사용하는 카드를 guardianmod:정지장에 넣습니다." + }, + "Guardian:PiercingHide": { + "NAME": "가시 외골격", + "DESCRIPTION": "방어도를 !B! 얻고 가시를 !M! 얻습니다. 이번 턴이 끝날 때 가시를 !M! 잃습니다. NL guardianmod:대비를 3 합니다.", + "UPGRADE_DESCRIPTION": "방어도를 !B! 얻고 가시를 !M! 얻습니다. 이번 턴이 끝날 때 가시를 !M! 잃습니다. NL guardianmod:대비를 4 합니다." + }, + "Guardian:ShieldSpikes": { + "NAME": "가시 방패", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL guardianmod:대비를 8 합니다. NL guardianmod:수비_모드라면 가시를 !M! 얻습니다." + }, + "Guardian:PrismaticBeam": { + "NAME": "프리즘 광선", + "DESCRIPTION": "이 카드에 장착된 guardianmod:보석 하나당 피해를 !D! 줍니다." + }, + "Guardian:PrismaticBarrier": { + "NAME": "프리즘 장벽", + "DESCRIPTION": "이 카드에 장착된 guardianmod:보석 하나당 방어도를 !B! 얻습니다." + }, + "Guardian:TemporalStrike": { + "NAME": "시간차 타격", + "DESCRIPTION": "피해를 !D! 줍니다. NL guardianmod:정지장에 카드가 있다면 [E] 를 얻습니다.", + "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL guardianmod:정지장에 카드가 있다면 [E] 를 얻습니다." + }, + "Guardian:TemporalShield": { + "NAME": "시간차 방패", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL guardianmod:가속합니다." + }, + "Guardian:ExploitGems": { + "NAME": "보석 활용", + "DESCRIPTION": "카드를 1장 뽑습니다." + }, + "Guardian:RefractedBeam": { + "NAME": "굴절 광선", + "DESCRIPTION": "피해를 !D! 만큼 !M! 번 줍니다. NL 강화 횟수에 제한이 없습니다." + }, + "Guardian:MultiBeam": { + "NAME": "다중 광선", + "DESCRIPTION": "적 전체에게 피해를 !D! 만큼 X번 줍니다. NL guardianmod:째깍할 때 이 카드의 피해량이 !M! 만큼 증가합니다." + }, + "Guardian:BaubleBeam": { + "NAME": "큐빅 폭발", + "DESCRIPTION": "피해를 !D! 줍니다. NL 장착된 guardianmod:보석 효과를 !M! 번 발동시킵니다." + }, + "Guardian:PrimingBeam": { + "NAME": "기폭제", + "DESCRIPTION": "피해를 !D! 줍니다. NL guardianmod:대비를 !M! 합니다." + }, + "Guardian:EvasiveProtocol": { + "NAME": "회피 규약", + "DESCRIPTION": "guardianmod:수비_모드로 전환할 때마다 모든 해로운 효과를 !M! 감소시킵니다. NL 내 턴 시작 시 guardianmod:대비를 !GuardianSecondM! 합니다.", + "UPGRADE_DESCRIPTION": "guardianmod:수비_모드로 전환할 때마다 모든 해로운 효과를 !M! 감소시킵니다. NL 내 턴 시작 시 guardianmod:대비를 !GuardianSecondM! 합니다." + }, + "Guardian:SpikerProtocol": { + "NAME": "가시 돋친 규약", + "DESCRIPTION": "guardianmod:수비_모드로 전환할 때마다 가시를 !M! 얻습니다. NL guardianmod:대비를 !GuardianSecondM! 합니다.", + "UPGRADE_DESCRIPTION": "guardianmod:수비_모드로 전환할 때마다 가시를 !M! 얻습니다. NL guardianmod:대비를 !GuardianSecondM! 합니다." + }, + "Guardian:ArmoredProtocol": { + "NAME": "무장 규약", + "DESCRIPTION": "guardianmod:수비_모드 동안 턴 종료 시 방어도를 !M! 얻습니다. NL 내 턴 시작 시 guardianmod:대비를 3 합니다." + }, + "Guardian:TimeSifter": { + "NAME": "시간 선별기", + "DESCRIPTION": "내 턴 시작 시 guardianmod:가속합니다.", + "UPGRADE_DESCRIPTION": "선천성. NL 내 턴 시작 시 guardianmod:가속합니다." + }, + "Guardian:AncientConstruct": { + "NAME": "고대의 구조", + "DESCRIPTION": "인공물을 1 얻습니다. NL 내 턴 시작 시 인공물이 없다면 인공물을 !M! 얻습니다.", + "UPGRADE_DESCRIPTION": "인공물을 2 얻습니다. NL 내 턴 시작 시 인공물이 없다면 인공물을 !M! 얻습니다." + }, + "Guardian:CrystalBeam": { + "NAME": "크리스탈 광선", + "DESCRIPTION": "피해를 !D! 줍니다. 덱에 guardianmod:보석 하나당 피해량이 !M! 증가합니다." + }, + "Guardian:Gem_Synthetic": { + "NAME": "오닉스", + "DESCRIPTION": "guardianmod:보석. NL 보유한 모든 해로운 효과를 1 감소시킵니다.", + "UPGRADE_DESCRIPTION": "보유한 모든 해로운 효과를 1 감소시킵니다." + }, + "Guardian:Gem_Yellow": { + "NAME": "호박", + "DESCRIPTION": "guardianmod:보석. NL guardianmod:가속합니다.", + "UPGRADE_DESCRIPTION": "guardianmod:가속합니다." + }, + "Guardian:Gem_Purple": { + "NAME": "자수정", + "DESCRIPTION": "guardianmod:보석. NL 적 전체의 힘을 이번 턴 동안 2 감소시킵니다.", + "UPGRADE_DESCRIPTION": "적 전체의 힘을 이번 턴 동안 2 감소시킵니다." + }, + "Guardian:Gem_Crimson": { + "NAME": "가넷", + "DESCRIPTION": "guardianmod:보석. NL 적 전체에게 취약을 1 부여합니다.", + "UPGRADE_DESCRIPTION": "적 전체에게 취약을 1 부여합니다." + }, + "Guardian:Gem_Blue": { + "NAME": "사파이어", + "DESCRIPTION": "guardianmod:보석. NL guardianmod:대비를 4 합니다.", + "UPGRADE_DESCRIPTION": "guardianmod:대비를 4 합니다." + }, + "Guardian:Gem_Fragmented": { + "NAME": "보석 파편", + "DESCRIPTION": "guardianmod:보석. NL *크리스탈 *단도를 얻습니다.", + "UPGRADE_DESCRIPTION": "*크리스탈 *단도를 얻습니다." + }, + "Guardian:CrystalShiv": { + "NAME": "크리스탈 단도", + "DESCRIPTION": "피해를 !D! 줍니다. NL 소멸." + }, + "Guardian:CrystalWard": { + "NAME": "크리스탈 수호", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 소멸." + }, + "Guardian:Repulse": { + "NAME": "격퇴", + "DESCRIPTION": "매 턴 처음으로 상태이상 또는 저주를 뽑으면 소멸시키고 카드를 1장 뽑습니다.", + "UPGRADE_DESCRIPTION": "매 턴 처음으로 상태이상 또는 저주를 뽑으면 소멸시키고 카드를 1장 뽑습니다." + }, + "Guardian:BronzeOrb": { + "NAME": "구체 보조기", + "DESCRIPTION": "피해를 !D! 줍니다. NL 막히지 않은 피해를 받은만큼 guardianmod:대비합니다. NL 소멸." + }, + "Guardian:RevengeProtocol": { + "NAME": "복수 규약", + "DESCRIPTION": "guardianmod:수비_모드로 전환할 때마다 힘을 !M! 얻습니다. NL 내 턴 시작 시 guardianmod:대비를 !GuardianSecondM! 합니다." + }, + "Guardian:GatlingBeam": { + "NAME": "광선 포탑", + "DESCRIPTION": "피해를 !D! 줍니다. NL guardianmod:정지장에 넣습니다. NL guardianmod:정지장에 !M! 턴 동안 대기합니다. NL guardianmod:째깍할 때 무작위 적에게 피해를 !D! 줍니다." + }, + "Guardian:ShieldCharger": { + "NAME": "보호막 충전기", + "DESCRIPTION": "guardianmod:정지장에 넣습니다. NL guardianmod:째깍할 때 guardianmod:대비를 !M! 하고 방어도를 !B! 얻습니다. NL guardianmod:불안정." + }, + "Guardian:StasisEngine": { + "NAME": "정지장 엔진", + "DESCRIPTION": "한 턴에 비용이 0인 카드를 3번 사용하면 [E] 를 얻고 카드를 1장 뽑습니다.", + "UPGRADE_DESCRIPTION": "선천성. NL 한 턴에 비용이 0인 카드를 3번 사용하면 [E] 를 얻고 카드를 1장 뽑습니다." + }, + "Guardian:HammerDown": { + "NAME": "전속력 내려치기", + "DESCRIPTION": "피해를 !D! 줍니다. NL 힘 과 민첩을 2배로 늘립니다. NL 소멸." + }, + "Guardian:OmegaCannon": { + "NAME": "오메가 대포", + "DESCRIPTION": "피해를 !D! 줍니다. NL 내 힘 하나당 이 카드의 비용이 [E] 감소합니다." + }, + "Guardian:ModeShift": { + "NAME": "모드 전환", + "DESCRIPTION": "힘 과 민첩 의 수치를 서로 바꿉니다. NL 카드를 1장 뽑습니다.", + "UPGRADE_DESCRIPTION": "보존. NL 힘 과 민첩 의 수치를 서로 바꿉니다. NL 카드를 1장 뽑습니다." + }, + "Guardian:PackageConstruct": { + "NAME": "패키지: 구조", + "DESCRIPTION": "*전속력 *내려치기, *오메가 *대포, *모드 *전환을 얻습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "*전속력 *내려치기+, *오메가 *대포+, *모드 *전환+을 얻습니다. NL 소멸." + }, + "Guardian:PackageMass": { + "NAME": "패키지: 더미", + "DESCRIPTION": "*가시 *더미, *폭탄 *더미, *단체 *강타를 얻습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "*가시 *더미+, *폭탄 *더미+, *단체 *강타+를 얻습니다. NL 소멸." + }, + "Guardian:MassOfThorns": { + "NAME": "가시 더미", + "DESCRIPTION": "가시를 !M! 얻습니다. 이번 턴이 끝날 때 가시를 !M! 잃습니다. NL 인공물을 보유한다면 이 카드를 소멸시킵니다." + }, + "Guardian:MassTimeBomb": { + "NAME": "폭탄 더미", + "DESCRIPTION": "빈 guardianmod:정지장 슬롯마다 *시한 *폭탄을 넣습니다. NL 시한 폭탄이 2장 이상 생성된다면 이 카드를 소멸시킵니다.", + "UPGRADE_DESCRIPTION": "빈 guardianmod:정지장 슬롯마다 *시한 *폭탄+을 넣습니다. NL 시한 폭탄이 2장 이상 생성된다면 이 카드를 소멸시킵니다." + }, + "Guardian:MassSlam": { + "NAME": "단체 강타", + "DESCRIPTION": "피해를 !D! 만큼 !M! 번 줍니다. NL 힘이 3 이상이면 이 카드를 소멸시킵니다." + }, + "Guardian:GemstoneGunCard": { + "NAME": "원석 총", + "DESCRIPTION": "보존.", + "UPGRADE_DESCRIPTION": " NL 소멸." + }, + "Guardian:BodySlam": { + "NAME": "몸체 충돌", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 현재 방어도만큼 피해를 줍니다.", + "UPGRADE_DESCRIPTION": " NL (피해를 !D! 줍니다.)" + }, + "Guardian:SecondStrike": { + "NAME": "두 번째 강타", + "DESCRIPTION": "휘발성. NL 피해를 !D! 줍니다. NL 소멸." + }, + "Guardian:SecondStrikePreviewCard": { + "NAME": "두 번째 강타", + "DESCRIPTION": "휘발성. NL 피해를 !D! 줍니다. NL *두 *번 *강타의 guardianmod:소켓에 장착된 *보석이 이 카드의 guardianmod:소켓에 장착됩니다. NL 피해를 !D! 줍니다. NL 소멸." + }, + "Guardian:StrikeForStrike": { + "NAME": "연쇄 타격", + "DESCRIPTION": "피해를 !D! 줍니다. NL 적이 피해를 !M! 줍니다." + }, + "Guardian:GearUp": { + "NAME": "정비", + "DESCRIPTION": "보존. NL guardianmod:대비를 !M! 합니다. NL 소멸." + } } \ No newline at end of file diff --git a/src/main/resources/guardianResources/localization/kor/CharacterStrings.json b/src/main/resources/guardianResources/localization/kor/CharacterStrings.json index c98c8d74c..e5349bcc3 100644 --- a/src/main/resources/guardianResources/localization/kor/CharacterStrings.json +++ b/src/main/resources/guardianResources/localization/kor/CharacterStrings.json @@ -1,18 +1,18 @@ -{ - "Guardian": { - "NAMES": [ - "수호자" - ], - "TEXT": [ - "첨탑의 인공생명체로 첨탑을 지키기 위해 프로그래밍 되어있습니다. NL 명령에 따라 피해를 입지 않도록 방어할 수 있습니다.", - "주 명령 - #r~심장을~ #r~파괴하라.~", - "[ guardianmod:소켓 ]", - "조명이 없는 거리에서, 어둠의 의식을 치르고 있는 대여섯 명의 후드를 눌러싼 자들이 보입니다. 당신이 다가가자, 그들은 섬뜩한 미소를 지으며 돌아섰습니다. 그들 중 가장 키 큰 이는 송곳니가 길게 삐져나와 있었습니다. 그가 당신에게 창백한 손을 내밉니다. NL ~\"우리와~ ~함께~ ~하자~ ~고대의~ ~수호자여~ ~첨탑의~ ~따스함을~ ~느낄~ ~수~ ~있다네.\"~", - "수비 모드", - "턴이 시작될 때마다 #y가시를 #b3 얻고 #y방어도를 #b10 얻고 방어도를 잃지 않습니다.", - "~에러:~ #r정지장 진행 중." - ], - "KEYWORDS": [ - ] - } +{ + "Guardian": { + "NAMES": [ + "수호자" + ], + "TEXT": [ + "첨탑의 인공생명체로 첨탑을 지키기 위해 프로그래밍 되어있습니다. NL 명령에 따라 피해를 입지 않도록 방어할 수 있습니다.", + "주 명령 - #r~심장을~ #r~파괴하라.~", + "[ guardianmod:소켓 ]", + "조명이 없는 거리에서, 어둠의 의식을 치르고 있는 대여섯 명의 후드를 눌러싼 자들이 보입니다. 당신이 다가가자, 그들은 섬뜩한 미소를 지으며 돌아섰습니다. 그들 중 가장 키 큰 이는 송곳니가 길게 삐져나와 있었습니다. 그가 당신에게 창백한 손을 내밉니다. NL ~\"우리와~ ~함께~ ~하자~ ~고대의~ ~수호자여~ ~첨탑의~ ~따스함을~ ~느낄~ ~수~ ~있다네.\"~", + "수비 모드", + "턴이 시작될 때마다 #y가시를 #b3 얻고 방어도를 잃지 않습니다.", + "~에러:~ #r정지장 진행 중." + ], + "KEYWORDS": [ + ] + } } \ No newline at end of file diff --git a/src/main/resources/guardianResources/localization/kor/EventStrings.json b/src/main/resources/guardianResources/localization/kor/EventStrings.json index 0e0f9af7e..f2d680d0e 100644 --- a/src/main/resources/guardianResources/localization/kor/EventStrings.json +++ b/src/main/resources/guardianResources/localization/kor/EventStrings.json @@ -1,127 +1,127 @@ -{ - "Guardian:GemMine": { - "NAME": "보석 광산", - "DESCRIPTIONS": [ - "당신은 오래된 광산 갱도 안으로 들어갑니다. 바위 틈새에서 반짝이는 원석들이 제법 보입니다. #g에메랄드, #r루비, #y토파즈, 등 여러 가지가 있군요. 근처에 그렘린 광부들의 채굴용 도구가 유용할지도 모르지만, 눈대중으로 보기에 원석이 겉으로 드러나 있으니 마음먹으면 손으로 파낼 수 있을지도 모릅니다.", - "당신은 보석이 잠들어있는 바위벽을 파서 그들의 잠을 깨웁니다. 고통이 약간 따르긴 하지만 이 보석들은 그럴만한 가치가 있습니다.", - "보물 탐사가 매력적이긴 하지만 앞으로 더 중요한 일을 위해 당신은 방어구를 아껴 두기로 합니다.", - "당신은 오래된 광산을 성공적으로 점령하고 성취감을 느끼며 떠납니다. 하지만 청동 관절들이 좀 삐걱거리긴 하네요.", - "당신은 그렘린의 기지에서 상태가 나쁜 채굴용 곡괭이를 강탈합니다. 이걸로 이곳에서 보석들을 캐내거나 나중에 틈이 나면 캐게 아껴 둘 수 있겠군요.", - "당신은 채굴용 곡괭이로 바위에서 보석을 캐내고 세공합니다. 이 과정에서 곡괭이의 희생이 있긴 했지만 손톱이 닳는 것보단 나으니까요." - ], - "OPTIONS": [ - "[손톱으로 판다] #g무작위 #g보석을 #g얻습니다. #r체력을 #r", - " #r잃습니다.", - "[떠난다]", - "[턴다] #r그렘린들과 #r싸웁니다. #g곡괭이의 #g광시곡을 #g얻습니다.", - "[곡괭이로 채굴] #g무작위 #g보석을 #g얻습니다. #r곡괭이 #r사용횟수를 #r잃습니다.", - "[잠김] 곡괭이가 #r부서졌습니다." - ] - }, - "Guardian:StasisEgg": { - "NAME": "양자 알", - "DESCRIPTIONS": [ - "당신의 발에 걸려 이상한 룬 문자가 새겨진 상자를 열고 맙니다. 안을 유심히 들여다보니 은은하게 윙윙거리는 이상한 알 모양을 한 장치를 발견합니다. 이게 무엇인지, 어디 쓰이는 것인지는 모르지만 뿜어져 나오는 에너지로 강력한 무언가라고 확신합니다.", - "당신은 이것을 사용하기로 합니다. 알을 손에 넣고 길을 나서려는데 룬이 빛을 발하며 이상하게도 시간이 점점 더 ~점점~ ~더~ ~천천~ ~히~ ~.~ ~.~ ~.~", - "당신은 이 힘을 다른 모험가가 남용하지 못하도록 파괴하기로 합니다. NL #r폭발하기 #r직전 알에서 따스한 빛이 활력을 주었지만 파편들은 #r고통스럽게 당신의 몸을 베어버립니다.", - "당신은 이게 여기 있는 이유가 있을 것이라고 생각합니다. 본능은 이 강력한 힘으로 무언가 해야 한다고 말하고 있지만 이것 또한 남겨둔 자의 의도일지도 모릅니다. 당신은 뚜껑을 닫고 발걸음을 옮깁니다." - ], - "OPTIONS": [ - "[사용] #g양자 #g알을 #g얻습니다. #r저주를 #r받습니다 #r- #r노쇠.", - "[강타] #g최대 #g체력을 #g", - " #g얻습니다. #r저주를 #r받습니다 #r- #r고통.", - "[떠난다]" - ] - }, - "Guardian:AccursedBlacksmith": { - "NAME": "", - "DESCRIPTIONS": [ - "당신만의 방식으로 무기를 재련하여... NL #y@깡@ #y@까앙@ #y@깡!@ NL ...새로운 보석을 장착할 공간을 만들어냈습니다." - ], - "OPTIONS": [ - "[연마] #g소켓 #g카드에 #g소켓을 #g하나 #g추가합니다.", - "소켓을 추가할 카드를 고르십시오.", - "[잠김] 소켓을 추가할 카드가 필요합니다." - ] - }, - "Guardian:GuardianTalk": { - "NAME": "", - "DESCRIPTIONS": [ - "교체 - 모델 해체.", - "이상현상 감지.", - "수호자 모델 결함.", - "알파 규약 무시.", - "수호자: 부대 복귀.", - "전체 규약 오류 감지.", - "수호자 즉각 강제 종료.", - "새 규약: 파괴.", - "중단. NL 태초 귀환." - ], - "OPTIONS": [ - "" - ] - }, - "Guardian:CrystalForge": { - "NAME": "으스스한 대장간", - "DESCRIPTIONS": [ - "첨탑의 관리자들에게만 알려진 비밀 통로를 통해 자동인형 모델 유지보수를 위한 방으로 들어갑니다. 수호자가 사용하라고 만든 도구들은 아니지만 유용하게 쓸 수 있을 것입니다.", - "힘이 깃든 모루로 필요 없어진 부품들을 떼어냅니다. 이걸로 어리석었던 선택을 바로 잡고 귀중한 보석을 되찾을 수 있겠네요.", - "장착할 공간을 다시 만들기 위해 마법 집게로 조심스럽게 소켓을 열어 안에 있는 보석을 제거합니다. 하지만 안에 있던 보석은 완전히 못 쓰게 되어버렸네요.", - "필요 없는 장비를 던져넣자마자 대장간의 변성 기능이 작동했습니다. 잠시 후 재료가 용해되어 아름다운 보석으로 압축되었습니다.", - "당신은 으스스한 대장간을 뒤로한 채 들어왔던 비밀 통로로 나갑니다. 계속해서 첨탑을 몰락시키기 위한 여정을 떠납니다.", - "해체할 카드를 고르십시오.", - "분해할 카드를 고르십시오.", - "변성할 카드를 고르십시오.", - "보석을 고르십시오.", - "보석을 장착할 카드를 고르십시오.", - "험난한 여정에 찾아온 잠깐의 휴식 시간 동안 당신은 보석을 장착합니다. 그러자 곧바로 힘이 차오르는 게 느껴졌습니다." - ], - "OPTIONS": [ - "[해체] #r보석이 #r장착된 #r카드를 #r제거합니다. #g그 #g카드에 #g장착된 #g보석을 #g얻습니다.", - "[잠김] 보석이 장착된 카드가 필요합니다.", - "[분해] 카드를 한 장 선택하고 그 카드에 장착된 모든 보석을 #g파괴합니다.", - "[변성] #r카드를 #r한 #r장 #r제거합니다. #g무작위 #g보석을 #g한 #g장 #g얻습니다.", - "[잠김] 이미 사용했습니다.", - "[떠난다]", - "[세공] #g소켓에 #g보석을 #g장착합니다.", - "[잠김] 보석이나 소켓이 필요합니다." - ] - }, - "Guardian:Purifier": { - "NAME": "", - "DESCRIPTIONS": [ - "당신은 성소에 묻혀있는 보물을 발굴하기 위해 재빠르게 후려갈깁니다. 잔해 속에서 마치 당신의 무기에 세공되기만을 기다리고 있었다는 듯한 보석을 두 개 찾아냅니다. NL NL 당신은 성소의 잔해를 남겨둔 채로 여정을 다시 떠납니다." - ], - "OPTIONS": [ - "[강타] #g무작위 #g보석을 #g2장 #g얻습니다." - ] - }, - "Guardian:Transmorgrifier": { - "NAME": "", - "DESCRIPTIONS": [ - "" - ], - "OPTIONS": [ - "" - ] - }, - "Guardian:UpgradeShrine": { - "NAME": "", - "DESCRIPTIONS": [ - "" - ], - "OPTIONS": [ - "" - ] - }, - "Guardian:BackToBasics": { - "NAME": "", - "DESCRIPTIONS": [ - "못이라면 두들김을 인내하라, 망치라면 두들겨라." - ], - "OPTIONS": [ - "[인내] #g모든 #g타격과 #g수비에 #g대비 #g효과를 #g2 #g추가합니다.", - "[잠김] 타격이나 수비가 필요합니다." - ] - } +{ + "Guardian:GemMine": { + "NAME": "보석 광산", + "DESCRIPTIONS": [ + "당신은 오래된 광산 갱도 안으로 들어갑니다. 바위 틈새에서 반짝이는 원석들이 제법 보입니다. #g에메랄드, #r루비, #y토파즈, 등 여러 가지가 있군요. 근처에 그렘린 광부들의 채굴용 도구가 유용할지도 모르지만, 눈대중으로 보기에 원석이 겉으로 드러나 있으니 마음먹으면 손으로 파낼 수 있을지도 모릅니다.", + "당신은 보석이 잠들어있는 바위벽을 파서 그들의 잠을 깨웁니다. 고통이 약간 따르긴 하지만 이 보석들은 그럴만한 가치가 있습니다.", + "보물 탐사가 매력적이긴 하지만 앞으로 더 중요한 일을 위해 당신은 방어구를 아껴 두기로 합니다.", + "당신은 오래된 광산을 성공적으로 점령하고 성취감을 느끼며 떠납니다. 하지만 청동 관절들이 좀 삐걱거리긴 하네요.", + "당신은 그렘린의 기지에서 상태가 나쁜 채굴용 곡괭이를 강탈합니다. 이걸로 이곳에서 보석들을 캐내거나 나중에 틈이 나면 캐게 아껴 둘 수 있겠군요.", + "당신은 채굴용 곡괭이로 바위에서 보석을 캐내고 세공합니다. 이 과정에서 곡괭이의 희생이 있긴 했지만 손톱이 닳는 것보단 나으니까요." + ], + "OPTIONS": [ + "[손톱으로 판다] #g무작위 #g보석을 #g얻습니다. #r체력을 #r", + " #r잃습니다.", + "[떠난다]", + "[턴다] #r그렘린들과 #r싸웁니다. #g곡괭이의 #g광시곡을 #g얻습니다.", + "[곡괭이로 채굴] #g무작위 #g보석을 #g얻습니다. #r곡괭이 #r사용횟수를 #r잃습니다.", + "[잠김] 곡괭이가 #r부서졌습니다." + ] + }, + "Guardian:StasisEgg": { + "NAME": "양자 알", + "DESCRIPTIONS": [ + "당신의 발에 걸려 이상한 룬 문자가 새겨진 상자를 열고 맙니다. 안을 유심히 들여다보니 은은하게 윙윙거리는 이상한 알 모양을 한 장치를 발견합니다. 이게 무엇인지, 어디 쓰이는 것인지는 모르지만 뿜어져 나오는 에너지로 강력한 무언가라고 확신합니다.", + "당신은 이것을 사용하기로 합니다. 알을 손에 넣고 길을 나서려는데 룬이 빛을 발하며 이상하게도 시간이 점점 더 ~점점~ ~더~ ~천천~ ~히~ ~.~ ~.~ ~.~", + "당신은 이 힘을 다른 모험가가 남용하지 못하도록 파괴하기로 합니다. NL #r폭발하기 #r직전 알에서 따스한 빛이 활력을 주었지만 파편들은 #r고통스럽게 당신의 몸을 베어버립니다.", + "당신은 이게 여기 있는 이유가 있을 것이라고 생각합니다. 본능은 이 강력한 힘으로 무언가 해야 한다고 말하고 있지만 이것 또한 남겨둔 자의 의도일지도 모릅니다. 당신은 뚜껑을 닫고 발걸음을 옮깁니다." + ], + "OPTIONS": [ + "[사용] #g양자 #g알을 #g얻습니다. #r저주를 #r받습니다 #r- #r노쇠.", + "[강타] #g최대 #g체력을 #g", + " #g얻습니다. #r저주를 #r받습니다 #r- #r고통.", + "[떠난다]" + ] + }, + "Guardian:AccursedBlacksmith": { + "NAME": "", + "DESCRIPTIONS": [ + "당신만의 방식으로 무기를 재련하여... NL #y@깡@ #y@까앙@ #y@깡!@ NL ...새로운 보석을 장착할 공간을 만들어냈습니다." + ], + "OPTIONS": [ + "[연마] #g소켓 #g카드에 #g소켓을 #g하나 #g추가합니다.", + "소켓을 추가할 카드를 고르십시오.", + "[잠김] 소켓을 추가할 카드가 필요합니다." + ] + }, + "Guardian:GuardianTalk": { + "NAME": "", + "DESCRIPTIONS": [ + "교체 - 모델 해체.", + "이상현상 감지.", + "수호자 모델 결함.", + "알파 규약 무시.", + "수호자: 부대 복귀.", + "전체 규약 오류 감지.", + "수호자 즉각 강제 종료.", + "새 규약: 파괴.", + "중단. NL 태초 귀환." + ], + "OPTIONS": [ + "" + ] + }, + "Guardian:CrystalForge": { + "NAME": "으스스한 대장간", + "DESCRIPTIONS": [ + "첨탑의 관리자들에게만 알려진 비밀 통로를 통해 자동인형 모델 유지보수를 위한 방으로 들어갑니다. 수호자가 사용하라고 만든 도구들은 아니지만 유용하게 쓸 수 있을 것입니다.", + "힘이 깃든 모루로 필요 없어진 부품들을 떼어냅니다. 이걸로 어리석었던 선택을 바로 잡고 귀중한 보석을 되찾을 수 있겠네요.", + "장착할 공간을 다시 만들기 위해 마법 집게로 조심스럽게 소켓을 열어 안에 있는 보석을 제거합니다. 하지만 안에 있던 보석은 완전히 못 쓰게 되어버렸네요.", + "필요 없는 장비를 던져넣자마자 대장간의 변성 기능이 작동했습니다. 잠시 후 재료가 용해되어 아름다운 보석으로 압축되었습니다.", + "당신은 으스스한 대장간을 뒤로한 채 들어왔던 비밀 통로로 나갑니다. 계속해서 첨탑을 몰락시키기 위한 여정을 떠납니다.", + "해체할 카드를 고르십시오.", + "분해할 카드를 고르십시오.", + "변성할 카드를 고르십시오.", + "보석을 고르십시오.", + "보석을 장착할 카드를 고르십시오.", + "험난한 여정에 찾아온 잠깐의 휴식 시간 동안 당신은 보석을 장착합니다. 그러자 곧바로 힘이 차오르는 게 느껴졌습니다." + ], + "OPTIONS": [ + "[해체] #r보석이 #r장착된 #r카드를 #r제거합니다. #g그 #g카드에 #g장착된 #g보석을 #g얻습니다.", + "[잠김] 보석이 장착된 카드가 필요합니다.", + "[분해] 카드를 한 장 선택하고 그 카드에 장착된 모든 보석을 #g파괴합니다.", + "[변성] #r카드를 #r한 #r장 #r제거합니다. #g무작위 #g보석을 #g한 #g장 #g얻습니다.", + "[잠김] 이미 사용했습니다.", + "[떠난다]", + "[세공] #g소켓에 #g보석을 #g장착합니다.", + "[잠김] 보석이나 소켓이 필요합니다." + ] + }, + "Guardian:Purifier": { + "NAME": "", + "DESCRIPTIONS": [ + "당신은 성소에 묻혀있는 보물을 발굴하기 위해 재빠르게 후려갈깁니다. 잔해 속에서 마치 당신의 무기에 세공되기만을 기다리고 있었다는 듯한 보석을 두 개 찾아냅니다. NL NL 당신은 성소의 잔해를 남겨둔 채로 여정을 다시 떠납니다." + ], + "OPTIONS": [ + "[강타] #g무작위 #g보석을 #g2장 #g얻습니다." + ] + }, + "Guardian:Transmorgrifier": { + "NAME": "", + "DESCRIPTIONS": [ + "" + ], + "OPTIONS": [ + "" + ] + }, + "Guardian:UpgradeShrine": { + "NAME": "", + "DESCRIPTIONS": [ + "" + ], + "OPTIONS": [ + "" + ] + }, + "Guardian:BackToBasics": { + "NAME": "", + "DESCRIPTIONS": [ + "못이라면 두들김을 인내하라, 망치라면 두들겨라." + ], + "OPTIONS": [ + "[인내] #g모든 #g타격과 #g수비에 #g대비 #g효과를 #g2 #g추가합니다.", + "[잠김] 타격이나 수비가 필요합니다." + ] + } } \ No newline at end of file diff --git a/src/main/resources/guardianResources/localization/kor/KeywordStrings.json b/src/main/resources/guardianResources/localization/kor/KeywordStrings.json index 436e7d854..378a2495b 100644 --- a/src/main/resources/guardianResources/localization/kor/KeywordStrings.json +++ b/src/main/resources/guardianResources/localization/kor/KeywordStrings.json @@ -1,118 +1,119 @@ -[ - { - "NAMES": [ - "소켓", - "소켓에", - "socket", - "sockets", - "socketed" - ], - "PROPER_NAME": "소켓", - "DESCRIPTION": "보석을 소켓에 장착할 수 있습니다. 장착한 카드 사용 시 장착된 보석 효과도 동시에 사용됩니다." - }, - { - "NAMES": [ - "stasis", - "정지장에서", - "정지장에", - "정지장" - ], - "PROPER_NAME": "정지장", - "DESCRIPTION": "#y정지장에 들어간 카드는 #b비용 #b+ #b1 만큼 대기합니다. NL 내 턴 시작 시 대기 횟수가 #b1 줄어듭니다. NL 대기 횟수가 #b0 이 되면 사용하기 전까지 비용이 #b0 인 카드를 가져옵니다." - }, - { - "NAMES": [ - "보석", - "보석과", - "보석당", - "보석을", - "보석이", - "gem", - "gems" - ], - "PROPER_NAME": "보석", - "DESCRIPTION": "휴식 장소에서 카드의 #y소켓에 장착할 수 있습니다. #y강화할 수 없습니다." - }, - { - "PROPER_NAME": "수비 모드", - "NAMES": [ - "수비 모드", - "수비_모드", - "수비_모드로", - "수비_모드라면", - "defensive mode", - "defensive_mode" - ], - "DESCRIPTION": "#y경지. NL 수비 모드 동안 내 턴이 시작되면 #y가시를 #b3 얻고 #b10 #y방어도를 얻고 #y방어도를 잃지 않습니다." - }, - { - "NAMES": [ - "가속", - "가속을", - "가속합니다", - "accelerate" - ], - "PROPER_NAME": "가속", - "DESCRIPTION": "#y정지장 가장 오른쪽 카드의 대기 횟수를 #b1 줄입니다." - }, - { - "NAMES": [ - "패키지", - "패키지를", - "패키지로", - "package", - "packages" - ], - "PROPER_NAME": "패키지", - "DESCRIPTION": "첨탑의 구조에서 영감을 얻은 #y소멸되는 비용이 0인 #y스킬 카드 3장입니다." - }, - { - "NAMES": [ - "불안정", - "volatile" - ], - "PROPER_NAME": "불안정", - "DESCRIPTION": "이 카드가 #y정지장에서 벗어나면 이 카드를 가져오는 대신 #y소멸시킵니다." - }, - { - "NAMES": [ - "째깍", - "째깍할", - "tick" - ], - "PROPER_NAME": "째깍", - "DESCRIPTION": "#y정지장 안에서 대기 횟수가 줄어들 때마다 카드가 사용됩니다." - }, - { - "NAMES": [ - "버퍼", - "버퍼가", - "버퍼를", - "buffer" - ], - "PROPER_NAME": "버퍼", - "DESCRIPTION": "다음 번에 체력을 잃는 것을 막아줍니다." - }, - { - "NAMES": [ - "대비", - "대비를", - "대비할", - "brace" - ], - "PROPER_NAME": "대비", - "DESCRIPTION": "모드 전환에 필요한 체력 손실을 수치만큼 줄입니다. 필요한 체력 손실이 0이 된다면 바로 모드를 전환합니다." - }, - { - "NAMES": [ - "퇴화", - "퇴화된", - "퇴화한", - "퇴화합니다", - "퇴화됩니다", - "downgrade" - ], - "PROPER_NAME": "퇴화", - "DESCRIPTION": "카드의 강화를 제거합니다." - } -] +[ + { + "NAMES": [ + "소켓", + "소켓에", + "socket", + "sockets", + "socketed" + ], + "PROPER_NAME": "소켓", + "DESCRIPTION": "보석을 소켓에 장착할 수 있습니다. 장착한 카드 사용 시 장착된 보석 효과도 동시에 사용됩니다." + }, + { + "NAMES": [ + "stasis", + "정지장에서", + "정지장에", + "정지장" + ], + "PROPER_NAME": "정지장", + "DESCRIPTION": "#y정지장에 들어간 카드는 #b비용 #b+ #b1 만큼 대기합니다. NL 내 턴 시작 시 대기 횟수가 #b1 줄어듭니다. NL 대기 횟수가 #b0 이 되면 사용하기 전까지 비용이 #b0 인 카드를 가져옵니다." + }, + { + "NAMES": [ + "보석", + "보석과", + "보석당", + "보석을", + "보석이", + "보석의", + "gem", + "gems" + ], + "PROPER_NAME": "보석", + "DESCRIPTION": "휴식 장소에서 카드의 #y소켓에 장착할 수 있는 카드입니다. #y강화할 수 없습니다." + }, + { + "PROPER_NAME": "수비 모드", + "NAMES": [ + "수비 모드", + "수비_모드", + "수비_모드로", + "수비_모드라면", + "defensive mode", + "defensive_mode" + ], + "DESCRIPTION": "#y경지. NL 수비 모드로 전환 시 방어도를 #b16 얻습니다. 수비 모드 동안 #y가시를 #b3 얻고 #y방어도를 #b16 얻고 #y방어도를 잃지 않습니다." + }, + { + "NAMES": [ + "가속", + "가속을", + "가속합니다", + "accelerate" + ], + "PROPER_NAME": "가속", + "DESCRIPTION": "#y정지장 가장 오른쪽 카드의 대기 횟수를 #b1 줄입니다." + }, + { + "NAMES": [ + "패키지", + "패키지를", + "패키지로", + "package", + "packages" + ], + "PROPER_NAME": "패키지", + "DESCRIPTION": "첨탑의 구조에서 영감을 얻은 #y소멸되는 비용이 0인 #y스킬 카드 3장입니다." + }, + { + "NAMES": [ + "불안정", + "volatile" + ], + "PROPER_NAME": "불안정", + "DESCRIPTION": "이 카드가 #y정지장에서 벗어나면 이 카드를 가져오는 대신 #y소멸시킵니다." + }, + { + "NAMES": [ + "째깍", + "째깍할", + "tick" + ], + "PROPER_NAME": "째깍", + "DESCRIPTION": "#y정지장 안에서 대기 횟수가 줄어들 때마다 카드가 사용됩니다." + }, + { + "NAMES": [ + "버퍼", + "버퍼가", + "버퍼를", + "buffer" + ], + "PROPER_NAME": "버퍼", + "DESCRIPTION": "다음 번에 체력을 잃는 것을 막아줍니다." + }, + { + "NAMES": [ + "대비", + "대비를", + "대비할", + "brace" + ], + "PROPER_NAME": "대비", + "DESCRIPTION": "모드 전환에 필요한 체력 손실을 수치만큼 줄입니다. 필요한 체력 손실이 0이 된다면 바로 모드를 전환합니다." + }, + { + "NAMES": [ + "퇴화", + "퇴화된", + "퇴화한", + "퇴화합니다", + "퇴화됩니다", + "downgrade" + ], + "PROPER_NAME": "퇴화", + "DESCRIPTION": "카드의 강화를 제거합니다." + } +] diff --git a/src/main/resources/guardianResources/localization/kor/OrbStrings.json b/src/main/resources/guardianResources/localization/kor/OrbStrings.json index 59fa753e9..c7bea4148 100644 --- a/src/main/resources/guardianResources/localization/kor/OrbStrings.json +++ b/src/main/resources/guardianResources/localization/kor/OrbStrings.json @@ -1,25 +1,25 @@ -{ - "Guardian:EmptyStasisSlot": { - "NAME": "정지장 슬롯", - "DESCRIPTION": [ - "이 슬롯에 #y정지장의 효과로 카드를 넣을 수 있습니다." - ] - }, - "Guardian:StasisOrb": { - "NAME": "정지장: ", - "DESCRIPTION": [ - " 카드를 다음 턴 시작 시 비용을 0으로 가져옵니다.", - " 카드를 비용이 0인 카드로 가져오기까지 #b", - " 턴 남았습니다.", - " 카드는 다음 턴 시작 시 #y소멸됩니다.", - " 카드는 #b", - " 턴 뒤에 #y소멸됩니다." - ] - } -} - - - - - - +{ + "Guardian:EmptyStasisSlot": { + "NAME": "정지장 슬롯", + "DESCRIPTION": [ + "이 슬롯에 #y정지장의 효과로 카드를 넣을 수 있습니다." + ] + }, + "Guardian:StasisOrb": { + "NAME": "정지장: ", + "DESCRIPTION": [ + " 카드를 다음 턴 시작 시 비용을 0으로 가져옵니다.", + " 카드를 비용이 0인 카드로 가져오기까지 #b", + " 턴 남았습니다.", + " 카드는 다음 턴 시작 시 #y소멸됩니다.", + " 카드는 #b", + " 턴 뒤에 #y소멸됩니다." + ] + } +} + + + + + + diff --git a/src/main/resources/guardianResources/localization/kor/PotionStrings.json b/src/main/resources/guardianResources/localization/kor/PotionStrings.json index 27b2032f9..d863864b1 100644 --- a/src/main/resources/guardianResources/localization/kor/PotionStrings.json +++ b/src/main/resources/guardianResources/localization/kor/PotionStrings.json @@ -1,31 +1,31 @@ -{ - "Guardian:AcceleratePotion": { - "NAME": "시간차 포션", - "DESCRIPTIONS": [ - "#y정지장에 있는 모든 카드를 #b", - " 번 #y가속합니다." - ] - }, - "Guardian:DefensiveModePotion": { - "NAME": "연마유", - "DESCRIPTIONS": [ - "#y방어도를 #b", - " 얻습니다. #y수비 #y모드로 전환합니다." - ] - }, - "Guardian:BlockOnCardUsePotion": { - "NAME": "무구 팅크제", - "DESCRIPTIONS": [ - "이번 턴에 카드를 사용할 때마다 #y방어도를 #b", - " 얻습니다." - ] - }, - "Guardian:StasisDiscoveryPotion": { - "NAME": "양자 엘릭서", - "DESCRIPTIONS": [ - "#y정지장 슬롯을 #b", - " 개 얻습니다. NL 카드 #b3 장 중 #b1 장을 #b", - " 번 골라 #y정지장에 넣습니다." - ] - } -} +{ + "Guardian:AcceleratePotion": { + "NAME": "긴급 포션", + "DESCRIPTIONS": [ + "#y정지장에 있는 모든 카드를 #b", + " 번 #y가속합니다." + ] + }, + "Guardian:DefensiveModePotion": { + "NAME": "연마유", + "DESCRIPTIONS": [ + "#y방어도를 #b", + " 얻습니다. #y수비 #y모드로 전환합니다." + ] + }, + "Guardian:BlockOnCardUsePotion": { + "NAME": "무구 팅크제", + "DESCRIPTIONS": [ + "이번 턴에 카드를 사용할 때마다 #y방어도를 #b", + " 얻습니다." + ] + }, + "Guardian:StasisDiscoveryPotion": { + "NAME": "양자 엘릭서", + "DESCRIPTIONS": [ + "#y정지장 슬롯을 #b", + " 개 얻습니다. NL 카드 #b3 장 중 #b1 장을 #b", + " 번 골라 #y정지장에 넣습니다." + ] + } +} diff --git a/src/main/resources/guardianResources/localization/kor/PowerStrings.json b/src/main/resources/guardianResources/localization/kor/PowerStrings.json index 9776a9179..44c6ac23b 100644 --- a/src/main/resources/guardianResources/localization/kor/PowerStrings.json +++ b/src/main/resources/guardianResources/localization/kor/PowerStrings.json @@ -1,213 +1,214 @@ -{ - "Guardian:NextTurnGainTemporaryStrengthPower": { - "NAME": "충전 중", - "DESCRIPTIONS": [ - "다음 턴 동안 #y힘을 #b", - " 얻습니다." - ] - }, - "Guardian:StunnedPower": { - "NAME": "기절", - "DESCRIPTIONS": [ - "내 다음 턴을 강제로 넘깁니다.", - "내 다음 턴을 강제로 #b", - " 턴 넘깁니다." - ] - }, - "Guardian:FloatingOrbsPower": { - "NAME": "부유 구체", - "DESCRIPTIONS": [ - "비용이 0인 카드를 사용할 때마다 무작위 적에게 피해를 #b", - " 줍니다." - ] - }, - "Guardian:OrbwalkPower": { - "NAME": "구체 순찰기", - "DESCRIPTIONS": [ - "내 턴 시작 시 #y힘을 #b", - " 얻습니다." - ] - }, - "Guardian:ClonePower": { - "NAME": "재설계", - "DESCRIPTIONS": [ - "이번 턴에 다음으로 사용하는 카드를 #y정지장에 넣습니다.", - "이번 턴에 다음으로 사용하는 카드를 #b", - " 장 #y정지장에 넣습니다." - ] - }, - "Guardian:GemFinderPower": { - "NAME": "보석 채취", - "DESCRIPTIONS": [ - "전투 종료 시 #y일반 #y보석 카드 보상을 얻습니다.", - "전투 종료 시 #y일반 #y보석 카드 보상을 #b", - " 개 얻습니다." - ] - }, - "Guardian:FuturePlansPower": { - "NAME": "미래 계획", - "DESCRIPTIONS": [ - "내 턴 종료 시 카드를 #b", - " 장 #y정지장에 넣습니다.", - " 장 #y정지장에 넣습니다." - ] - }, - "Guardian:DefenseModePower": { - "NAME": "수비 모드", - "DESCRIPTIONS": [ - "#y수비 #y모드는 #b", - " 턴까지 활성화 됩니다. #y수비 #y모드일 때 #y가시를 #b", - " 얻고 받는 피해량을 #b25% 감소시킵니다. 또 카드를 사용할 때마다 #y방어도를 #b2 얻습니다." - ] - }, - "Guardian:ConstructModePower": { - "NAME": "재구성 모드", - "DESCRIPTIONS": [ - "내 턴 시작 시 버퍼가 있다면 #y힘을 #b", - " 얻습니다." - ] - }, - "Guardian:MultiBoostPower": { - "NAME": "다중 가속", - "DESCRIPTIONS": [ - "여러 번 #y공격하는 카드를 사용했을 때 #b1 번 더 피해를 줍니다.", - "여러 번 #y공격하는 카드를 사용했을 때 #b", - " 번 더 피해를 줍니다." - ] - }, - "Guardian:TargetedPower": { - "NAME": "겨냥됨", - "DESCRIPTIONS": [ - "이 적이 피해를 받을 때마다 이번 턴에 #y힘을 #b", - " 얻습니다." - ] - }, - "Guardian:LoseThornsPower": { - "NAME": "가시 제거", - "DESCRIPTIONS": [ - "내 턴 시작 시 #y가시를 #b", - " 잃습니다." - ] - }, - "Guardian:BeamBuffPower": { - "NAME": "준비", - "DESCRIPTIONS": [ - "광선 카드의 피해량이 #b", - " 증가합니다." - ] - }, - "Guardian:DefensiveModeBuffsPower": { - "NAME": "수비 모드+", - "DESCRIPTIONS": [ - "일반 #y수비 #y모드에 추가로 다음과 같은 효과를 얻습니다: NL #b", - " #y가시.", - " #y민첩.", - " #y방어도를 매 턴 종료 시 획득.", - "매 턴 처음으로 #y상태이상 또는 #y저주 카드를 뽑으면 #y소멸시킵니다.", - "매 턴 #y상태이상 또는 #y저주 카드를 최대 #b", - " 장까지 뽑으면 #y소멸시킵니다.", - "#y방어 #y모드가 끝날 때 활성화됐던 턴당 #y힘을 #b", - " 얻습니다." - ] - }, - "Guardian:AutomayhemPower": { - "NAME": "시간 선별기", - "DESCRIPTIONS": [ - "내 턴 시작 시 #y가속합니다.", - "내 턴 시작 시 #y가속을 #b", - " 번 합니다." - ] - }, - "Guardian:ConstructPower": { - "NAME": "고대의 구조", - "DESCRIPTIONS": [ - "내 턴 시작 시 #y인공물이 없다면 #y인공물을 #b", - " ", - "얻습니다." - ] - }, - "Guardian:ModeShiftPower": { - "NAME": "모드 전환", - "DESCRIPTIONS": [ - "체력을 #b", - " 잃었을 때 #y방어도를 #b10 얻고 다음 턴까지 #y수비 #y모드로 전환합니다. 모드 전환 시 전환에 필요한 체력 소모가 #b10, 최대 #b50 까지 증가합니다." - ] - }, - "Guardian:ExhaustStatusesPower": { - "NAME": "격퇴", - "DESCRIPTIONS": [ - "매 턴 처음으로 #y상태이상 또는 #y저주 카드를 뽑으면 #y소멸시키고 카드를 1장 뽑습니다.", - "매 턴 처음으로 #y상태이상 또는 #y저주 카드를 뽑으면 카드를 최대 #b", - " 장까지 #y소멸시키고 카드를 1장 뽑습니다." - ] - }, - "Guardian:RevengePower": { - "NAME": "복수", - "DESCRIPTIONS": [ - "#y수비 #y모드 동안 #y힘이 #b", - " 증가합니다." - ] - }, - "Guardian:StasisEnginePower": { - "NAME": "정지장 엔진", - "DESCRIPTIONS": [ - " [E] 를 #b", - " 얻고 카드를 #b", - " 장 뽑습니다.", - " 장 뽑습니다.", - " 이 효과는 한 턴에 비용이 0인 카드를 3번 사용 할때마다 발동됩니다." - ] - }, - "Guardian:EnergizedGuardianPower": { - "NAME": "원기 왕성", - "DESCRIPTIONS": [ - "다음 턴에 [E] 를 추가로 #b", - " 얻습니다.", - " 얻습니다.", - " - TRANSLATOR NOTE: - The above line is for plural if needed to distinguish from singular." - ] - }, - "Guardian:BlockOnCardUsePower": { - "NAME": "무구 팅크제", - "DESCRIPTIONS": [ - "이번 턴에 카드를 사용할 때마다 #y방어도를 #b", - " 얻습니다." - ] - }, - "Guardian:EvasiveProtocolPower": { - "NAME": "회피 규약", - "DESCRIPTIONS": [ - "#y수비 #y모드 동안 #y민첩을 #b", - " 얻습니다." - ] - }, - "Guardian:SpikerProtocolPower": { - "NAME": "가시 돋친 규약", - "DESCRIPTIONS": [ - "#y수비 #y모드 동안 #y가시를 #b", - " 얻습니다." - ] - }, - "Guardian:ArmoredProtocolPower": { - "NAME": "무장 규약", - "DESCRIPTIONS": [ - "#y수비 #y모드 동안 내 턴 종료 시 #y방어도를 #b", - " 얻습니다." - ] - }, - "Guardian:DontLeaveDefensiveModePower": { - "NAME": "수비 모드", - "DESCRIPTIONS": [ - "이번 턴 종료 시 #y수비 #y모드에서 벗어납니다.", - "#y수비 #y모드는 #b", - " 턴 동안 활성화됩니다." - ] - }, - "Guardian:BracePerTurnPower": { - "NAME": "대비 중", - "DESCRIPTIONS": [ - "내 턴 시작 시 #y대비를 #b", - " 만큼 합니다." - ] - } +{ + "Guardian:NextTurnGainTemporaryStrengthPower": { + "NAME": "충전 중", + "DESCRIPTIONS": [ + "다음 턴 동안 #y힘을 #b", + " 얻습니다." + ] + }, + "Guardian:StunnedPower": { + "NAME": "기절", + "DESCRIPTIONS": [ + "내 다음 턴을 강제로 넘깁니다.", + "내 다음 턴을 강제로 #b", + " 턴 넘깁니다." + ] + }, + "Guardian:FloatingOrbsPower": { + "NAME": "부유 구체", + "DESCRIPTIONS": [ + "비용이 0인 카드를 사용할 때마다 무작위 적에게 피해를 #b", + " 줍니다." + ] + }, + "Guardian:OrbwalkPower": { + "NAME": "구체 순찰기", + "DESCRIPTIONS": [ + "내 턴 시작 시 #y힘을 #b", + " 얻습니다." + ] + }, + "Guardian:ClonePower": { + "NAME": "재설계", + "DESCRIPTIONS": [ + "이번 턴에 다음으로 사용하는 카드를 #y정지장에 넣습니다.", + "이번 턴에 다음으로 사용하는 카드를 #b", + " 장 #y정지장에 넣습니다." + ] + }, + "Guardian:GemFinderPower": { + "NAME": "보석 채취", + "DESCRIPTIONS": [ + "전투 종료 시 덱에 무작위 #y보석을 얻습니다.", + "전투 종료 시 덱에 무작위 #y보석을 #b", + " 장 얻습니다." + ] + }, + "Guardian:FuturePlansPower": { + "NAME": "미래 계획", + "DESCRIPTIONS": [ + "내 턴 종료 시 카드를 #b", + " 장 #y정지장에 넣습니다.", + " 장 #y정지장에 넣습니다." + ] + }, + "Guardian:DefenseModePower": { + "NAME": "수비 모드", + "DESCRIPTIONS": [ + "#y수비 #y모드는 #b", + " 턴까지 활성화 됩니다. #y수비 #y모드일 때 #y가시를 #b", + " 얻고 받는 피해량을 #b25% 감소시킵니다. 또 카드를 사용할 때마다 #y방어도를 #b2 얻습니다." + ] + }, + "Guardian:ConstructModePower": { + "NAME": "재구성 모드", + "DESCRIPTIONS": [ + "내 턴 시작 시 #y버퍼가 #b", + " 이상 있다면 #y힘을 #b", + " 얻습니다." + ] + }, + "Guardian:MultiBoostPower": { + "NAME": "다중 가속", + "DESCRIPTIONS": [ + "여러 번 #y공격하는 카드를 사용했을 때 #b1 번 더 피해를 줍니다.", + "여러 번 #y공격하는 카드를 사용했을 때 #b", + " 번 더 피해를 줍니다." + ] + }, + "Guardian:TargetedPower": { + "NAME": "겨냥됨", + "DESCRIPTIONS": [ + "이 적이 피해를 받을 때마다 이번 턴에 #y힘을 #b", + " 얻습니다." + ] + }, + "Guardian:LoseThornsPower": { + "NAME": "가시 제거", + "DESCRIPTIONS": [ + "내 턴 시작 시 #y가시를 #b", + " 잃습니다." + ] + }, + "Guardian:BeamBuffPower": { + "NAME": "준비", + "DESCRIPTIONS": [ + "광선 카드의 피해량이 #b", + " 증가합니다." + ] + }, + "Guardian:DefensiveModeBuffsPower": { + "NAME": "수비 모드+", + "DESCRIPTIONS": [ + "일반 #y수비 #y모드에 추가로 다음과 같은 효과를 얻습니다: NL #b", + " #y가시.", + " #y민첩.", + " #y방어도를 매 턴 종료 시 획득.", + "매 턴 처음으로 #y상태이상 또는 #y저주 카드를 뽑으면 #y소멸시킵니다.", + "매 턴 #y상태이상 또는 #y저주 카드를 최대 #b", + " 장까지 뽑으면 #y소멸시킵니다.", + "#y방어 #y모드가 끝날 때 활성화됐던 턴당 #y힘을 #b", + " 얻습니다." + ] + }, + "Guardian:AutomayhemPower": { + "NAME": "시간 선별기", + "DESCRIPTIONS": [ + "내 턴 시작 시 #y가속합니다.", + "내 턴 시작 시 #y가속을 #b", + " 번 합니다." + ] + }, + "Guardian:ConstructPower": { + "NAME": "고대의 구조", + "DESCRIPTIONS": [ + "내 턴 시작 시 #y인공물이 없다면 #y인공물을 #b", + " ", + "얻습니다." + ] + }, + "Guardian:ModeShiftPower": { + "NAME": "모드 전환", + "DESCRIPTIONS": [ + "체력을 #b", + " 잃었을 때 #y방어도를 #b16 얻고 다음 턴까지 #y수비 #y모드로 전환합니다. 모드 전환 시 전환에 필요한 체력 소모가 #b10, 최대 #b50 까지 증가합니다." + ] + }, + "Guardian:ExhaustStatusesPower": { + "NAME": "격퇴", + "DESCRIPTIONS": [ + "매 턴 처음으로 #y상태이상 또는 #y저주 카드를 뽑으면 #y소멸시키고 카드를 1장 뽑습니다.", + "매 턴 처음으로 #y상태이상 또는 #y저주 카드를 뽑으면 카드를 최대 #b", + " 장까지 #y소멸시키고 카드를 1장 뽑습니다." + ] + }, + "Guardian:RevengePower": { + "NAME": "복수", + "DESCRIPTIONS": [ + "#y수비 #y모드로 전환할 때마다 #y힘을 #b", + " 얻습니다." + ] + }, + "Guardian:StasisEnginePower": { + "NAME": "정지장 엔진", + "DESCRIPTIONS": [ + " [E] 를 #b", + " 얻고 카드를 #b", + " 장 뽑습니다.", + " 장 뽑습니다.", + " 이 효과는 한 턴에 비용이 0인 카드를 3번 사용 할때마다 발동됩니다." + ] + }, + "Guardian:EnergizedGuardianPower": { + "NAME": "원기 왕성", + "DESCRIPTIONS": [ + "다음 턴에 [E] 를 추가로 #b", + " 얻습니다.", + " 얻습니다.", + " - TRANSLATOR NOTE: - The above line is for plural if needed to distinguish from singular." + ] + }, + "Guardian:BlockOnCardUsePower": { + "NAME": "무구 팅크제", + "DESCRIPTIONS": [ + "이번 턴에 카드를 사용할 때마다 #y방어도를 #b", + " 얻습니다." + ] + }, + "Guardian:EvasiveProtocolPower": { + "NAME": "회피 규약", + "DESCRIPTIONS": [ + "#y수비 #y모드로 전환할 때마다 모든 해로운 효과를 #b", + " 감소시킵니다." + ] + }, + "Guardian:SpikerProtocolPower": { + "NAME": "가시 돋친 규약", + "DESCRIPTIONS": [ + "#y수비 #y모드로 전환할 때마다 #y가시를 #b", + " 얻습니다." + ] + }, + "Guardian:ArmoredProtocolPower": { + "NAME": "무장 규약", + "DESCRIPTIONS": [ + "#y수비 #y모드 동안 내 턴 종료 시 #y방어도를 #b", + " 얻습니다." + ] + }, + "Guardian:DontLeaveDefensiveModePower": { + "NAME": "수비 모드", + "DESCRIPTIONS": [ + "이번 턴 종료 시 #y수비 #y모드에서 벗어납니다.", + "#y수비 #y모드는 #b", + " 턴 동안 활성화됩니다." + ] + }, + "Guardian:BracePerTurnPower": { + "NAME": "대비 중", + "DESCRIPTIONS": [ + "내 턴 시작 시 #y대비를 #b", + " 만큼 합니다." + ] + } } \ No newline at end of file diff --git a/src/main/resources/guardianResources/localization/kor/RelicStrings.json b/src/main/resources/guardianResources/localization/kor/RelicStrings.json index ecd119f42..d5e759731 100644 --- a/src/main/resources/guardianResources/localization/kor/RelicStrings.json +++ b/src/main/resources/guardianResources/localization/kor/RelicStrings.json @@ -1,126 +1,134 @@ -{ - "Guardian:ModeShifter": { - "NAME": "청동 톱니바퀴", - "FLAVOR": "수호가 가장 중요합니다.", - "DESCRIPTIONS": [ - "매 전투 시작 시 #y정비를 얻습니다. NL 도전 시작 시 무작위 일반 #y보석을 하나 얻습니다." - ] - }, - "Guardian:ModeShifterPlus": { - "NAME": "수호자 톱니바퀴", - "FLAVOR": "3,000 층마다 교체해주세요.", - "DESCRIPTIONS": [ - "#r청동 #r톱니바퀴와 교체합니다. NL 매 전투 시작 시 #yguardianmod:수비_모드로 전환하며 #b3 턴 지속됩니다." - ] - }, - "Guardian:DefensiveModeMoreBlock": { - "NAME": "뱔로르의 위풍당당한 갑옷", - "FLAVOR": "갑옷 하나만으로는 절대 충분하지 않죠.", - "DESCRIPTIONS": [ - "#yguardianmod:대비할 때마다 추가로 #y대비를 #b1 만큼 합니다." - ] - }, - "Guardian:guardianmod:GemCopier": { - "NAME": "보석 텀블러", - "FLAVOR": "가장 깨끗한 사람만 쓸 수 있습니다.", - "DESCRIPTIONS": [ - "#yguardianmod:보석 카드를 사용할 때 복사한 그 카드를 사용합니다." - ] - }, - "Guardian:PocketSentry": { - "NAME": "아룸바의 휴대용 보초기", - "FLAVOR": "보초 모드 활성화. 목표 지정. 유감 없음.", - "DESCRIPTIONS": [ - "3 턴마다 적 전체에게 #y약화를 #b1 부여합니다." - ] - }, - "Guardian:SackOfGems": { - "NAME": "보석 자루", - "FLAVOR": "우와... 눈부시네요!", - "DESCRIPTIONS": [ - "획득 시 덱에 무작위 #yguardianmod:보석 카드를 #b5 장 추가합니다." - ] - }, - "Guardian:StasisCodex": { - "NAME": "조종사의 고문서", - "FLAVOR": "숙련된 조종사 데이비드가 작성한 첨탑의 초기 구동 설계 및 도해.", - "DESCRIPTIONS": [ - "내 턴 종료 시 #yguardianmod:정지장에 카드가 없다면 카드 #b3 장 중 #b1 장을 선택해 #y정지장에 넣습니다." - ] - }, - "Guardian:StasisSlotIncreaseRelic": { - "NAME": "작은 파출소", - "FLAVOR": "안은 더 넓답니다...", - "DESCRIPTIONS": [ - "매 전투를 #b2 개의 정지장 슬롯을 더 가진 채로 시작합니다." - ] - }, - "Guardian:StasisSlotReductionRelic": { - "NAME": "헤메는 로봇", - "FLAVOR": "이 무인 정찰기들은 아주 훌륭한 회수품을 찾아내지만 계속 찾으려면 처리 용량이 필요합니다.", - "DESCRIPTIONS": [ - "획득 시 정지장 슬롯을 #b1 개 잃습니다. NL 내 턴 시작 시 [E] 를 얻습니다." - ] - }, - "Guardian:StasisUpgradeRelic": { - "NAME": "극저온 용기", - "FLAVOR": "내 것을 내보내면 남의 것이 더 커보이는 법입니다.", - "DESCRIPTIONS": [ - "정지장 슬롯을 #b1 개 얻습니다. 카드가 #yguardianmod:정지장에 들어갈 때마다 그 카드를 #y강화합니다." - ] - }, - "Guardian:BottledStasis": { - "NAME": "병 속의 블랙홀", - "FLAVOR": "어디선가, 무언가 엄청난 일이 알려지길 기다리고 있습니다.", - "DESCRIPTIONS": [ - "획득 시 카드를 한 장 선택합니다. 매 전투 시작 시 그 카드를 #yguardianmod:정지장에 넣습니다.", - "카드를 선택하세요: ", - "매 전투 시작 시 ", - " 카드를 #yguardianmod:정지장에 넣습니다.", - "병에 담긴 카드가 덱에서 제거되어 유물의 효과가 발동하지 않습니다." - ] - }, - "Guardian:StasisEgg": { - "NAME": "양자 알", - "FLAVOR": "닭은 달걀을 부화해서 얻는 것이지 깨서 얻는 것이 아닙니다.", - "DESCRIPTIONS": [ - "획득 시 카드를 한 장 선택합니다. 매 전투 시작 시 덱에서 그 카드를 제거합니다. #b4 턴 후, 턴 시작 시 제거한 카드와 복사한 카드 #b2 장을 얻습니다.", - "카드를 선택하세요: ", - "매 전투 시 선택한 ", - " 카드를 덱에서 제거합니다. #b4 턴 후, 턴 시작 시 제거한 카드와 복사한 카드 #b2 장을 얻습니다." - ] - }, - "Guardian:TickHelperRelic": { - "NAME": "냉각용 유체", - "FLAVOR": "위험. 먹지 마시오.", - "DESCRIPTIONS": [ - "추가로 #yguardianmod:정지장 슬롯을 #b2 개 가진 채로 전투를 시작합니다. NL 카드의 #y정지장 대기 횟수를 #b2 증가시킵니다." - ] - }, - "Guardian:PickAxe": { - "NAME": "광시곡의 곡괭이", - "FLAVOR": "첨탑 여기저기에 원석들은 많이 널려있어서 불행히도 곡괭이가 필요했던 사람은 상상이 잘 가지 않습니다.", - "DESCRIPTIONS": [ - "휴식 장소에서 최대 #b3 번 #g채굴할 수 있습니다. #g채굴 시 #yguardianmod:보석을 #b2 장 얻습니다." - ] - }, - "Guardian:GemstoneGun": { - "NAME": "원석 총", - "FLAVOR": "탕! 탕! 탕! 와, 3번 맞췄다!", - "DESCRIPTIONS": [ - "획득 시 #yguardianmod:보석을 #b3 장 선택합니다. 매 전투 시작 시 보존, 소멸, 선택해 장착한 보석 효과를 보유한 #y원석 #y총 카드를 얻습니다.", - "원석 총에 장전할 보석을 선택하십시오." - ] - }, - "Guardian:BottledAnomaly": { - "NAME": "병 속의 이상 현상", - "FLAVOR": "소용돌이치고 또 소용돌이치다, 마침내 사그라듭니다.", - "DESCRIPTIONS": [ - "획득 시 카드를 한 장 선택합니다. 매 전투 시작 시 뽑을 카드 더미에서 그 카드를 제거합니다. #b3 턴 후, 턴 시작 시 제거한 카드를 얻고 그 카드의 비용이 #b0 이 됩니다.", - "카드를 선택하세요: ", - "매 전투 시작 시 선택한 ", - " 카드를 뽑을 카드 더미에서 제거합니다. #b3 턴 후, 턴 시작 시 제거한 카드를 얻습니다. NL 그 카드의 비용은 #b0 입니다.", - "병에 담긴 카드가 덱에서 제거되어 유물의 효과가 발동하지 않습니다." - ] - } -} +{ + "Guardian:ModeShifter": { + "NAME": "청동 톱니바퀴", + "FLAVOR": "수호가 가장 중요합니다.", + "DESCRIPTIONS": [ + "매 전투 시작 시 #y정비를 얻습니다. NL 도전 시작 시 무작위 일반 #y보석을 하나 얻습니다." + ] + }, + "Guardian:ModeShifterPlus": { + "NAME": "수호자 톱니바퀴", + "FLAVOR": "3,000 층마다 교체해주세요.", + "DESCRIPTIONS": [ + "#r청동 #r톱니바퀴와 교체합니다. NL 매 전투 시작 시 #yguardianmod:수비_모드로 전환하며 #b3 턴 지속됩니다.", + "와 교체합니다.[] NL 매 전투 시작 시 #y정비를 얻습니다. NL #y수비 #y모드로 전환할 때마다 [E] 를 얻고 카드를 #b2 장 뽑습니다." + ] + }, + "Guardian:ObsidianScales": { + "NAME": "흑요석 비늘", + "FLAVOR": "당신의 피로 하늘을 검게 물들여야 합니다. 공격당했다면 가리지 않고 반격하세요.", + "DESCRIPTIONS": [ + "매 전투 시작 시 #y가시를 #b3 얻습니다. 해로운 효과를 보유하거나 얻을 때마다 #y가시를 #b1 얻습니다." + ] + }, + "Guardian:DefensiveModeMoreBlock": { + "NAME": "뱔로르의 위풍당당한 갑옷", + "FLAVOR": "갑옷 하나만으로는 절대 충분하지 않죠.", + "DESCRIPTIONS": [ + "#yguardianmod:대비할 때마다 추가로 #y대비를 #b1 만큼 합니다." + ] + }, + "Guardian:guardianmod:GemCopier": { + "NAME": "보석 텀블러", + "FLAVOR": "가장 깨끗한 사람만 쓸 수 있습니다.", + "DESCRIPTIONS": [ + "#yguardianmod:보석 카드를 사용할 때 복사한 그 카드를 사용합니다." + ] + }, + "Guardian:PocketSentry": { + "NAME": "아룸바의 휴대용 보초기", + "FLAVOR": "보초 모드 활성화. 목표 지정. 유감 없음.", + "DESCRIPTIONS": [ + "3 턴마다 적 전체에게 #y약화를 #b1 부여합니다." + ] + }, + "Guardian:SackOfGems": { + "NAME": "보석 자루", + "FLAVOR": "우와... 눈부시네요!", + "DESCRIPTIONS": [ + "획득 시 덱에 무작위 #yguardianmod:보석을 #b5 장 선택해 얻습니다." + ] + }, + "Guardian:StasisCodex": { + "NAME": "조종사의 고문서", + "FLAVOR": "숙련된 조종사 데이비드가 작성한 첨탑의 초기 구동 설계 및 도해.", + "DESCRIPTIONS": [ + "3턴 동안 내 턴 종료 시 #yguardianmod:정지장 슬롯에 카드가 1장이라도 없다면 #b3 장 중 #b1 장을 선택해 #y정지장에 넣습니다." + ] + }, + "Guardian:StasisSlotIncreaseRelic": { + "NAME": "작은 파출소", + "FLAVOR": "안은 더 넓답니다...", + "DESCRIPTIONS": [ + "매 전투를 #b2 개의 정지장 슬롯을 더 가진 채로 시작합니다." + ] + }, + "Guardian:StasisSlotReductionRelic": { + "NAME": "헤메는 로봇", + "FLAVOR": "이 무인 정찰기들은 아주 훌륭한 회수품을 찾아내지만 계속 찾으려면 처리 용량이 필요합니다.", + "DESCRIPTIONS": [ + "획득 시 정지장 슬롯을 #b1 개 잃습니다. NL 내 턴 시작 시 [E] 를 얻습니다." + ] + }, + "Guardian:StasisUpgradeRelic": { + "NAME": "극저온 용기", + "FLAVOR": "내 것을 내보내면 남의 것이 더 커보이는 법입니다.", + "DESCRIPTIONS": [ + "정지장 슬롯을 #b1 개 얻습니다. 카드가 #yguardianmod:정지장에 들어갈 때마다 그 카드를 #y강화합니다." + ] + }, + "Guardian:BottledStasis": { + "NAME": "병 속의 블랙홀", + "FLAVOR": "어디선가, 무언가 엄청난 일이 알려지길 기다리고 있습니다.", + "DESCRIPTIONS": [ + "획득 시 카드를 한 장 선택합니다. 매 전투 시작 시 그 카드를 #yguardianmod:정지장에 넣습니다.", + "카드를 선택하세요: ", + "매 전투 시작 시 ", + " 카드를 #yguardianmod:정지장에 넣습니다.", + "병에 담긴 카드가 덱에서 제거되어 유물의 효과가 발동하지 않습니다." + ] + }, + "Guardian:StasisEgg": { + "NAME": "양자 알", + "FLAVOR": "닭은 달걀을 부화해서 얻는 것이지 깨서 얻는 것이 아닙니다.", + "DESCRIPTIONS": [ + "획득 시 카드를 한 장 선택합니다. 매 전투 시작 시 덱에서 그 카드를 제거합니다. #b4 턴 후, 턴 시작 시 제거한 카드와 복사한 카드 #b2 장을 얻습니다.", + "카드를 선택하세요: ", + "매 전투 시 선택한 ", + " 카드를 덱에서 제거합니다. #b4 턴 후, 턴 시작 시 제거한 카드와 복사한 카드 #b2 장을 얻습니다." + ] + }, + "Guardian:TickHelperRelic": { + "NAME": "냉각용 유체", + "FLAVOR": "위험. 먹지 마시오.", + "DESCRIPTIONS": [ + "추가로 #yguardianmod:정지장 슬롯을 #b2 개 가진 채로 전투를 시작합니다. NL 카드의 #y정지장 대기 횟수를 #b2 증가시킵니다." + ] + }, + "Guardian:PickAxe": { + "NAME": "광시곡의 곡괭이", + "FLAVOR": "첨탑 여기저기에 원석들은 많이 널려있어서 불행히도 곡괭이가 필요했던 사람은 상상이 잘 가지 않습니다.", + "DESCRIPTIONS": [ + "휴식 장소에서 최대 #b3 번 #g채굴할 수 있습니다. #g채굴 시 덱에 #yguardianmod:보석을 #b2 장 얻습니다." + ] + }, + "Guardian:GemstoneGun": { + "NAME": "원석 총", + "FLAVOR": "탕! 탕! 탕! 와, 3번 맞췄다!", + "DESCRIPTIONS": [ + "획득 시 #yguardianmod:보석을 #b3 장 선택합니다. 매 전투 시작 시 보존, 소멸, 선택해 장착한 보석 효과를 보유한 #y원석 #y총 카드를 얻습니다.", + "원석 총에 장전할 보석을 선택하십시오." + ] + }, + "Guardian:BottledAnomaly": { + "NAME": "병 속의 이상 현상", + "FLAVOR": "소용돌이치고 또 소용돌이치다, 마침내 사그라듭니다.", + "DESCRIPTIONS": [ + "획득 시 카드를 한 장 선택합니다. 매 전투 시작 시 뽑을 카드 더미에서 그 카드를 제거합니다. #b3 턴 후, 턴 시작 시 제거한 카드를 얻습니다. 카드를 얻은 턴에 그 카드의 비용이 #b0 이 됩니다.", + "카드를 선택하세요: ", + "매 전투 시작 시 선택한 ", + " 카드를 뽑을 카드 더미에서 제거합니다. #b3 턴 후, 턴 시작 시 제거한 카드를 얻습니다. NL 카드를 얻은 턴에 그 카드의 비용은 #b0 입니다.", + "병에 담긴 카드가 덱에서 제거되어 유물의 효과가 발동하지 않습니다." + ] + } +} diff --git a/src/main/resources/guardianResources/localization/kor/UIStrings.json b/src/main/resources/guardianResources/localization/kor/UIStrings.json index 29a950848..7049b188d 100644 --- a/src/main/resources/guardianResources/localization/kor/UIStrings.json +++ b/src/main/resources/guardianResources/localization/kor/UIStrings.json @@ -1,41 +1,41 @@ -{ - "Guardian:EnhanceBonfireOptions": { - "TEXT": [ - "세공", - "(자유 행동) 보석을 빈 소켓에 장착합니다.", - "보석이나 장착할 빈 소켓이 필요합니다.", - "보석을 선택하십시오.", - "얻을 보석 카드를 선택하십시오." - ] - }, - "Guardian:UIOptions": { - "TEXT": [ - "정지장에 넣을 카드를 고르십시오.", - "보석을 채취하십시오", - "덱에 일반 보석을 추가", - "정지장에 넣을 카드를 고르십시오.", - "~에러:~ 구조물 모드 중 #r공격 불가.", - "~에러:~ #r정지장 진행 중.", - "덱에 보석을 추가", - "" - ] - }, - "Guardian:FindGemsOption": { - "TEXT": [ - "채굴", - "무작위 보석을 2장 얻습니다.", - "곡괭이가 부서졌습니다." - ] - }, - "Guardian:BraceMod": { - "TEXT": [ - " NL guardianmod:대비를 2 만큼 합니다." - ] - }, - "Guardian:gemDescriptor": { - "TEXT": [ - "보석", - "guardianmod:보석. NL " - ] - } -} +{ + "Guardian:EnhanceBonfireOptions": { + "TEXT": [ + "세공", + "(자유 행동) 보석을 빈 소켓에 장착합니다.", + "보석이나 장착할 빈 소켓이 필요합니다.", + "보석을 선택하십시오.", + "얻을 보석 카드를 선택하십시오." + ] + }, + "Guardian:UIOptions": { + "TEXT": [ + "정지장에 넣을 카드를 고르십시오.", + "보석을 채취하십시오", + "덱에 보석을 추가", + "정지장에 넣을 카드를 고르십시오.", + "~에러:~ 구조물 모드 중 #r공격 불가.", + "~에러:~ #r정지장 진행 중.", + "덱에 보석을 추가", + "" + ] + }, + "Guardian:FindGemsOption": { + "TEXT": [ + "채굴", + "무작위 보석을 2장 얻습니다.", + "곡괭이가 부서졌습니다." + ] + }, + "Guardian:BraceMod": { + "TEXT": [ + " NL guardianmod:대비를 2 만큼 합니다." + ] + }, + "Guardian:gemDescriptor": { + "TEXT": [ + "보석", + "guardianmod:보석. NL " + ] + } +} diff --git a/src/main/resources/guardianResources/localization/rus/CardStrings.json b/src/main/resources/guardianResources/localization/rus/CardStrings.json index 13db22f2e..8a13e1013 100644 --- a/src/main/resources/guardianResources/localization/rus/CardStrings.json +++ b/src/main/resources/guardianResources/localization/rus/CardStrings.json @@ -1,456 +1,456 @@ -{ - "Guardian:Strike_Guardian": { - "NAME": "Удар", - "DESCRIPTION": "Наносит !D! урона." - }, - "Guardian:Defend_Guardian": { - "NAME": "Оборона", - "DESCRIPTION": "Даёт !B! Защиты." - }, - "Guardian:Gem_Red": { - "NAME": "Рубин", - "DESCRIPTION": "guardianmod:Самоцвет. NL Даёт 2 временной Силы.", - "UPGRADE_DESCRIPTION": "Даёт 2 временной Силы." - }, - "Guardian:Gem_Green": { - "NAME": "Изумруд", - "DESCRIPTION": "guardianmod:Самоцвет. NL Даёт 2 временной Ловкости.", - "UPGRADE_DESCRIPTION": "Даёт 2 временной Ловкости." - }, - "Guardian:Gem_Lightblue": { - "NAME": "Турмалин", - "DESCRIPTION": "guardianmod:Самоцвет. NL Даёт 4 временных Шипов.", - "UPGRADE_DESCRIPTION": "Даёт 4 временных Шипов." - }, - "Guardian:Gem_White": { - "NAME": "Кварц", - "DESCRIPTION": "guardianmod:Самоцвет. NL Вы берёте карту.", - "UPGRADE_DESCRIPTION": "Вы берёте карту." - }, - "Guardian:Gem_Orange": { - "NAME": "Цитрин", - "DESCRIPTION": "guardianmod:Самоцвет. NL Даёт [E].", - "UPGRADE_DESCRIPTION": "Даёт [E]." - }, - "Guardian:Gem_Cyan": { - "NAME": "Аквамарин", - "DESCRIPTION": "guardianmod:Самоцвет. NL Добавляет в руку *Кристаллическую *защиту.", - "UPGRADE_DESCRIPTION": "Добавляет в руку *Кристаллическую *защиту." - }, - "Guardian:ChargeUp": { - "NAME": "Зарядить", - "DESCRIPTION": "Даёт !B! Защиты. NL Даёт !M! временной Силы в начале след. хода." - }, - "Guardian:DonusPower": { - "NAME": "Перегрузка", - "DESCRIPTION": "Вы берёте !M! карты. NL Вы возьмёте на 2 карты меньше в след. ходу.", - "UPGRADE_DESCRIPTION": "Вы берёте !M! карты. NL Вы возьмёте на 2 карты меньше в след. ходу. NL Уменьшает каждый из ваших отриц. эффектов на 1." - }, - "Guardian:DecasProtection": { - "NAME": "Древняя сила", - "DESCRIPTION": "Даёт !M! временной Силы и Ловкости." - }, - "Guardian:FierceBash": { - "NAME": "Яростный удар", - "DESCRIPTION": "Наносит !D! урона. NL Помещается в guardianmod:Стазис. NL guardianmod:Тик - Увеличивает свой урон на !M! в этом бою." - }, - "Guardian:PolyBeam": { - "NAME": "Рассеивающий луч", - "DESCRIPTION": "{@@}Наносит !D! урона случ. врагу !M! раз{!M!|&4=а.|&5=.}" - }, - "Guardian:TwinSlam": { - "NAME": "Первый бросок", - "DESCRIPTION": "Наносит !D! урона. NL Добавляет в руку *Второй *бросок.", - "UPGRADE_DESCRIPTION": "Наносит !D! урона. NL Добавляет в руку *Второй *бросок+." - }, - "Guardian:GuardianWhirl": { - "NAME": "Вихрь", - "DESCRIPTION": "{@@}Требует не менее 20 Защиты. NL Наносит !D! урона ВСЕМ врагам !M! раз{!M!|&4=а|&5=}.", - "EXTENDED_DESCRIPTION": [ - "Требуется больше Защиты." - ] - }, - "Guardian:VentSteam": { - "NAME": "Дымовая завеса", - "DESCRIPTION": "Накладывает !M! Уязвимости на ВСЕХ врагов.", - "UPGRADE_DESCRIPTION": "Накладывает !M! Уязвимости на ВСЕХ врагов." - }, - "Guardian:CurlUp": { - "NAME": "Свернуться", - "DESCRIPTION": "Помещает случ. карту из руки в guardianmod:Стазис. NL guardianmod:Подготовка !M!.", - "UPGRADE_DESCRIPTION": "Помещает карту из руки в guardianmod:Стазис. NL guardianmod:Подготовка !M!." - }, - "Guardian:TimeBomb": { - "NAME": "Часовая бомба", - "DESCRIPTION": "Наносит !D! урона ВСЕМ врагам. NL guardianmod:Разгоняет ВСЕ карты в guardianmod:Стазисе. NL Сжигается." - }, - "Guardian:HyperBeam_Guardian": { - "NAME": "Гига-луч", - "DESCRIPTION": "Наносит !D! урона ВСЕМ врагам. Сила влияет на эту карту !M! раза. NL Вы пропускаете след. ход." - }, - "Guardian:BronzeArmor": { - "NAME": "Эластичная пластина", - "DESCRIPTION": "Уменьшает каждый из ваших отриц. эффектов на !M!. NL guardianmod:Подготовка 8. NL Сжигается.", - "UPGRADE_DESCRIPTION": "Уменьшает каждый из ваших отриц. эффектов на !M!. NL guardianmod:Подготовка 8." - }, - "Guardian:FloatingOrbs": { - "NAME": "Парящие сферы", - "DESCRIPTION": "Наносит !M! урона случ. врагу, когда вы разыгрываете карту стоимостью 0." - }, - "Guardian:OrbSlam": { - "NAME": "Залп сфер", - "DESCRIPTION": "Наносит !D! урона !GuardianMulti! раза. NL Сжигается." - }, - "Guardian:Incinerate": { - "NAME": "Поджечь", - "DESCRIPTION": "Наносит !D! урона. NL guardianmod:Разгон.", - "UPGRADE_DESCRIPTION": "Наносит !D! урона. NL guardianmod:Разгоняет дважды." - }, - "Guardian:Orbwalk": { - "NAME": "Круговорот", - "DESCRIPTION": "Даёт !M! Силы. NL guardianmod:Тик - Даёт 1 Силы. NL guardianmod:Нестабильная.", - "UPGRADE_DESCRIPTION": "Даёт !M! Силы. NL guardianmod:Тик - Даёт 1 Силы." - }, - "Guardian:WalkerClaw": { - "NAME": "Исполосовать", - "DESCRIPTION": "Наносит !D! урона !M! раза.", - "UPGRADE_DESCRIPTION": "Наносит !D! урона !M! раза." - }, - "Guardian:SphericShield": { - "NAME": "Сферический щит", - "DESCRIPTION": "Даёт !B! Защиты. NL Перейти в guardianmod:Оборонительный_режим. NL Сжигается." - }, - "Guardian:Harden": { - "NAME": "Укрепить", - "DESCRIPTION": "Требует не менее 20 Защиты. NL guardianmod:Подготовка !GuardianSecondM!. NL Даёт !M! Шипов.", - "EXTENDED_DESCRIPTION": [ - "Требуется больше Защиты." - ] - }, - "Guardian:SentryBeam": { - "NAME": "Взрыв Часового", - "DESCRIPTION": "Наносит !D! урона. NL Помещает *Волну *Часового в guardianmod:Стазис. NL Сжигается.", - "UPGRADE_DESCRIPTION": "Наносит !D! урона. NL Помещает *Волну *Часового+ в guardianmod:Стазис. NL Сжигается." - }, - "Guardian:SentryWave": { - "NAME": "Волна Часового", - "DESCRIPTION": "Накладывает !M! Слабости. NL Помещает *Взрыв *Часового в guardianmod:Стазис. NL Сжигается.", - "UPGRADE_DESCRIPTION": "Накладывает !M! Слабости. NL guardianmod:Подготовка 2. NL Помещает *Взрыв *Часового+ в guardianmod:Стазис. NL Сжигается." - }, - "Guardian:CompilePackage": { - "NAME": "Скомпилировать", - "DESCRIPTION": "Выберите и получите 1 из 3 guardianmod:Паков. NL Сжигается.", - "UPGRADE_DESCRIPTION": "Выберите и получите 1 из 3 Улучшенных guardianmod:Паков. NL Сжигается.", - "EXTENDED_DESCRIPTION": [ - "Выберите Пак." - ] - }, - "Guardian:PackageShapes": { - "NAME": "Пак: Формы", - "DESCRIPTION": "Добавляет в руку *Часовую *бомбу, *Протокол *нападения и *Репульсор. NL Сжигается.", - "UPGRADE_DESCRIPTION": "Добавляет в руку *Часовую *бомбу+, *Протокол *нападения+ и *Репульсор+. NL Сжигается." - }, - "Guardian:PackageDonuDeca": { - "NAME": "Пак: Древность", - "DESCRIPTION": "Добавляет в руку *Перегрузку, *Древнюю *силу и *Древний *конструкт. NL Сжигается.", - "UPGRADE_DESCRIPTION": "Добавляет в руку *Перегрузку+, *Древнюю *силу+ и *Древний *конструкт+. NL Сжигается." - }, - "Guardian:PackageSphere": { - "NAME": "Пак: Сферичность", - "DESCRIPTION": "Добавляет в руку *Сферический *щит, *Парящие *сферы и *Металлизация. NL Сжигается.", - "UPGRADE_DESCRIPTION": "Добавляет в руку *Сферический *щит+, *Парящие *сферы+ и *Металлизация+. NL Сжигается." - }, - "Guardian:PackageSentry": { - "NAME": "Пак: Часовой", - "DESCRIPTION": "Добавляет в руку *Взрыв *Часового и две *Волны *Часового. NL Сжигается.", - "UPGRADE_DESCRIPTION": "Добавляет в руку *Взрыв *Часового+ и две *Волны *Часового+. NL Сжигается." - }, - "Guardian:PackageWalker": { - "NAME": "Пак: Круговорот", - "DESCRIPTION": "Добавляет в руку *Круговорот, *Исполосовать и *Поджечь. NL Сжигается.", - "UPGRADE_DESCRIPTION": "Добавляет в руку *Круговорот+, *Исполосовать+ и *Поджечь+. NL Сжигается." - }, - "Guardian:PackageAutomaton": { - "NAME": "Пак: Бронза", - "DESCRIPTION": "Добавляет в руку *Гига-луч, *Сферу *поддержки и *Эластичную *пластину. NL Сжигается.", - "UPGRADE_DESCRIPTION": "Добавляет в руку *Гига-луч+, *Сферу *поддержки+ и *Эластичную *пластину+. NL Сжигается." - }, - "Guardian:PackageDefect": { - "NAME": "Пак: Дефект", - "DESCRIPTION": "Добавляет в руку *Перенаправить, *Предпрограмму и *Конденсатор *времени. NL Сжигается.", - "UPGRADE_DESCRIPTION": "Добавляет в руку *Перенаправить+, *Предпрограмму+ и *Конденсатор *времени+. NL Сжигается." - }, - "Guardian:Planning": { - "NAME": "Подготовиться", - "DESCRIPTION": "Помещает !M! карты с верха стопки добора в guardianmod:Стазис." - }, - "Guardian:Recover": { - "NAME": "Восстановить", - "DESCRIPTION": "Даёт !B! Защиты. NL guardianmod:Подготовка !M!. NL Помещает карту из стопки сброса в guardianmod:Стазис." - }, - "Guardian:Emergency": { - "NAME": "Форс-мажор", - "DESCRIPTION": "Даёт guardianmod:Разгон, пока карта не выйдет из guardianmod:Стазиса. NL Сжигается.", - "UPGRADE_DESCRIPTION": "Даёт guardianmod:Разгон, пока карта не выйдет из guardianmod:Стазиса." - }, - "Guardian:Clone": { - "NAME": "Клонировать", - "DESCRIPTION": "Выберите карту в руке. NL Помещает копию этой карты в guardianmod:Стазис. NL Сжигается.", - "UPGRADE_DESCRIPTION": "Выберите карту в руке. NL Помещает копию этой карты в guardianmod:Стазис. NL guardianmod:Разгон. NL Сжигается." - }, - "Guardian:Preprogram": { - "NAME": "Предпрограмма", - "DESCRIPTION": "{@@}Показывает !M! карт{!M!|&4=ы|&7=} с верха стопки добора. Выберите одну из них и поместите в guardianmod:Стазис." - }, - "Guardian:GemFinder": { - "NAME": "Искатель cамоцветов", - "DESCRIPTION": "Вы сможете выбрать и добавить случ. Обычный guardianmod:Самоцвет в колоду, в конце боя." - }, - "Guardian:StasisField": { - "NAME": "Стазисное поле", - "DESCRIPTION": "Даёт !B! Защиты. NL Помещается в guardianmod:Стазис. NL Даёт !B! Защиты при выходе из guardianmod:Стазиса." - }, - "Guardian:StasisStrike": { - "NAME": "Стазисный удар", - "DESCRIPTION": "Наносит !D! урона. NL Даёт 1 слот для Стазиса." - }, - "Guardian:FuturePlans": { - "NAME": "Планы на будущее", - "DESCRIPTION": "Вы можете поместить !M! карту из руки в guardianmod:Стазис в конце каждого вашего хода.", - "UPGRADE_DESCRIPTION": "Начальная. NL Вы можете поместить !M! карту из руки в guardianmod:Стазис в конце каждого вашего хода." - }, - "Guardian:Suspension": { - "NAME": "Приостановить", - "DESCRIPTION": "Даёт !B! Защиты. NL Помещает карту из руки в guardianmod:Стазис.", - "UPGRADE_DESCRIPTION": "Вы берёте карту. NL Помещает карту из руки в guardianmod:Стазис." - }, - "Guardian:FastForward": { - "NAME": "Разогнаться", - "DESCRIPTION": "Даёт guardianmod:Разгон !M! раза.", - "UPGRADE_DESCRIPTION": "Оставляется. NL Даёт guardianmod:Разгон !M! раза." - }, - "Guardian:TimeCapacitor": { - "NAME": "Конденсатор времени", - "DESCRIPTION": "Даёт !M! слот для Стазиса." - }, - "Guardian:ConstructionForm": { - "NAME": "Облик конструкта", - "DESCRIPTION": "Эфирная. NL Даёт !M! Буфера. NL Даёт 1 Силы в начале каждого вашего хода, если у вас есть Буфер.", - "UPGRADE_DESCRIPTION": "Даёт !M! Буфера. NL Даёт 1 Силы в начале каждого вашего хода, если у вас есть Буфер." - }, - "Guardian:RollAttack": { - "NAME": "Круговая атака", - "DESCRIPTION": "Наносит !D! урона. NL Действует на ВСЕХ врагов, если в guardianmod:Оборонительном_режиме. Если нет: guardianmod:Подготовка 8." - }, - "Guardian:GemFire": { - "NAME": "Самоцветная пушка", - "DESCRIPTION": "{@@}Вы сжигаете ВСЕ guardianmod:Самоцветы, включая guardianmod:Инкрустированные. Наносит !D! урона за каждый из них. Сжигается.", - "UPGRADE_DESCRIPTION": " NL (Наносит урон !M! раз{!M!|@=|&2,&3,&4=а|&12,&13,&14=}.)" - }, - "Guardian:ChargeCore": { - "NAME": "Зарядка ядра", - "DESCRIPTION": "Наносит !D! урона. NL Помещается в guardianmod:Стазис. NL guardianmod:Тик - Вы берёте карту. NL guardianmod:Нестабильная." - }, - "Guardian:Reroute": { - "NAME": "Перенаправить", - "DESCRIPTION": "Наносит !D! урона. NL Помещает след. разыгранную в этом ходу карту в guardianmod:Стазис." - }, - "Guardian:PiercingHide": { - "NAME": "Пластина с шипами", - "DESCRIPTION": "Даёт !B! Защиты и !M! временных Шипов. NL guardianmod:Подготовка 3." - }, - "Guardian:ShieldSpikes": { - "NAME": "Уйти в оборону", - "DESCRIPTION": "Даёт !B! Защиты. NL Даёт !M! временных Шипов, если в guardianmod:Оборонительном_режиме. Если нет: guardianmod:Подготовка 8." - }, - "Guardian:PrismaticBeam": { - "NAME": "Призматический всплеск", - "DESCRIPTION": "Наносит !D! урона за каждый guardianmod:Самоцвет в этой карте." - }, - "Guardian:PrismaticBarrier": { - "NAME": "Призматический барьер", - "DESCRIPTION": "Даёт !B! Защиты за каждый guardianmod:Самоцвет в этой карте." - }, - "Guardian:TemporalStrike": { - "NAME": "Темпоральный удар", - "DESCRIPTION": "Наносит !D! урона. NL Даёт [E] , если у вас есть карты в guardianmod:Стазисе.", - "UPGRADE_DESCRIPTION": "Наносит !D! урона. NL Даёт [E] , если у вас есть карты в guardianmod:Стазисе." - }, - "Guardian:TemporalShield": { - "NAME": "Темпоральный щит", - "DESCRIPTION": "Даёт !B! Защиты. NL guardianmod:Разгон." - }, - "Guardian:ExploitGems": { - "NAME": "Разрядить самоцветы", - "DESCRIPTION": "Вы берёте карту.", - "UPGRADE_DESCRIPTION": "Даёт [E]. NL Вы берёте карту." - }, - "Guardian:RefractedBeam": { - "NAME": "Преломляющий луч", - "DESCRIPTION": "{@@}Наносит !D! урона !M! раз{!M!|@=|&2,&3,&4=а|&12,&13,&14=}. NL Может быть улучшена любое кол-во раз." - }, - "Guardian:MultiBeam": { - "NAME": "Мульти-луч", - "DESCRIPTION": "Наносит !D! урона ВСЕМ врагам X раз. NL guardianmod:Тик - Повышает свой урон на !M!." - }, - "Guardian:BaubleBeam": { - "NAME": "Сияющий взрыв", - "DESCRIPTION": "Наносит !D! урона. NL Повторяет !M! раза:" - }, - "Guardian:PrimingBeam": { - "NAME": "Предупредительный выстрел", - "DESCRIPTION": "Наносит !D! урона. NL guardianmod:Подготовка !M!." - }, - "Guardian:EvasiveProtocol": { - "NAME": "Протокол неуловимости", - "DESCRIPTION": "Даёт !M! Ловкости, пока в guardianmod:Оборонительном_режиме. NL guardianmod:Подготовка 3 в начале каждого вашего хода." - }, - "Guardian:SpikerProtocol": { - "NAME": "Протокол самозащиты", - "DESCRIPTION": "Даёт !M! Шипов, пока в guardianmod:Оборонительном_режиме. NL guardianmod:Подготовка 3 в начале каждого вашего хода." - }, - "Guardian:ArmoredProtocol": { - "NAME": "Протокол непробиваемости", - "DESCRIPTION": "Даёт !M! Защиты в конце вашего хода, пока в guardianmod:Оборонительном_режиме. NL guardianmod:Подготовка 3 в начале каждого вашего хода." - }, - "Guardian:TimeSifter": { - "NAME": "Просеиватель времени", - "DESCRIPTION": "Даёт guardianmod:Разгон в начале каждого вашего хода.", - "UPGRADE_DESCRIPTION": "Начальная. NL Даёт guardianmod:Разгон в начале каждого вашего хода." - }, - "Guardian:AncientConstruct": { - "NAME": "Древний конструкт", - "DESCRIPTION": "Если у вас нет Артефакта, даёт !M! Артефакт в начале каждого вашего хода.", - "UPGRADE_DESCRIPTION": "Даёт 2 Артефакт. NL Если у вас нет Артефакта, даёт !M! Артефакт в начале каждого вашего хода." - }, - "Guardian:CrystalBeam": { - "NAME": "Кристаллический луч", - "DESCRIPTION": "Наносит !D! урона. NL Наносит !M! доп. урона за каждый guardianmod:Самоцвет в колоде." - }, - "Guardian:Gem_Synthetic": { - "NAME": "Оникс", - "DESCRIPTION": "guardianmod:Самоцвет. NL Уменьшает каждый из ваших отриц. эффектов на 1.", - "UPGRADE_DESCRIPTION": "Уменьшает каждый из ваших отриц. эффектов на 1." - }, - "Guardian:Gem_Yellow": { - "NAME": "Янтарь", - "DESCRIPTION": "guardianmod:Самоцвет. NL guardianmod:Разгон.", - "UPGRADE_DESCRIPTION": "guardianmod:Разгон." - }, - "Guardian:Gem_Purple": { - "NAME": "Аметист", - "DESCRIPTION": "guardianmod:Самоцвет. NL ВСЕ враги теряют 2 Силы в этом ходу.", - "UPGRADE_DESCRIPTION": "ВСЕ враги теряют 2 Силы в этом ходу." - }, - "Guardian:Gem_Crimson": { - "NAME": "Гранат", - "DESCRIPTION": "guardianmod:Самоцвет. NL Накладывает 1 Уязвимости на ВСЕХ врагов.", - "UPGRADE_DESCRIPTION": "Накладывает 1 Уязвимости на ВСЕХ врагов." - }, - "Guardian:Gem_Blue": { - "NAME": "Сапфир", - "DESCRIPTION": "guardianmod:Самоцвет. NL guardianmod:Подготовка 4.", - "UPGRADE_DESCRIPTION": "guardianmod:Подготовка 4." - }, - "Guardian:Gem_Fragmented": { - "NAME": "Разбитый самоцвет", - "DESCRIPTION": "guardianmod:Самоцвет. NL Добавляет в руку *Кристаллическую *заточку.", - "UPGRADE_DESCRIPTION": "Добавляет в руку *Кристаллическую *заточку." - }, - "Guardian:CrystalShiv": { - "NAME": "Кристаллическая заточка", - "DESCRIPTION": "Наносит !D! урона. NL Сжигается." - }, - "Guardian:CrystalWard": { - "NAME": "Кристаллическая защита", - "DESCRIPTION": "Даёт !B! Защиты. NL Сжигается." - }, - "Guardian:Repulse": { - "NAME": "Репульсор", - "DESCRIPTION": "Когда вы впервые за ход берёте карту Статуса или Проклятия, она Сжигается и вы берёте карту.", - "UPGRADE_DESCRIPTION": "Когда вы впервые за ход берёте карту Статуса или Проклятия, она Сжигается и вы берёте карту." - }, - "Guardian:BronzeOrb": { - "NAME": "Сфера поддержки", - "DESCRIPTION": "Начальная. NL Наносит !D! урона. Помещает случ. карту из стопки добора в guardianmod:Стазис. NL Сжигается." - }, - "Guardian:RevengeProtocol": { - "NAME": "Протокол мести", - "DESCRIPTION": "Даёт !M! Силы, пока в guardianmod:Оборонительном_режиме. NL guardianmod:Подготовка !GuardianSecondM! в начале каждого вашего хода." - }, - "Guardian:GatlingBeam": { - "NAME": "Лазерная турель", - "DESCRIPTION": "{@@}Наносит !D! урона. NL Помещается в guardianmod:Стазис на !M! ход{!M!|&4=а|&5=ов}. NL guardianmod:Тик - Наносит !D! урона случ. врагу." - }, - "Guardian:ShieldCharger": { - "NAME": "Зарядить щиты", - "DESCRIPTION": "Помещается в guardianmod:Стазис. NL guardianmod:Тик - guardianmod:Подготовка !M! и даёт !B! Защиты. NL guardianmod:Нестабильная." - }, - "Guardian:StasisEngine": { - "NAME": "Стазисный движок", - "DESCRIPTION": "Вы получаете [E] и берёте карту, когда разыгрываете *3-ью карту стоимостью 0 за ход.", - "UPGRADE_DESCRIPTION": "Начальная. NL Вы получаете [E] и берёте карту, когда разыгрываете *3-ью карту стоимостью 0 за ход." - }, - "Guardian:HammerDown": { - "NAME": "Сокрушающий удар", - "DESCRIPTION": "Наносит !D! урона. NL Удваивает вашу текущую Силу и Ловкость. NL Сжигается." - }, - "Guardian:OmegaCannon": { - "NAME": "Омега-пушка", - "DESCRIPTION": "Наносит !D! урона. NL Стоит на 1 [E] меньше за каждые 1 Силы." - }, - "Guardian:ModeShift": { - "NAME": "Сменить режим", - "DESCRIPTION": "Меняет местами значения вашей Силы и Ловкости. NL Вы берёте карту.", - "UPGRADE_DESCRIPTION": "Оставляется. NL Меняет местами значения вашей Силы и Ловкости. NL Вы берёте карту." - }, - "Guardian:PackageConstruct": { - "NAME": "Пак: Конструкт", - "DESCRIPTION": "Добавляет в руку *Сокрушающий *удар, *Омега-пушку и *Сменить *режим. NL Сжигается.", - "UPGRADE_DESCRIPTION": "Добавляет в руку *Сокрушающий *удар+, *Омега-пушку+ и *Сменить *режим+. NL Сжигается." - }, - "Guardian:PackageMass": { - "NAME": "Пак: Масса", - "DESCRIPTION": "Добавляет в руку *Массу *шипов, *Массу *бомб и *Град *ударов. NL Сжигается.", - "UPGRADE_DESCRIPTION": "Добавляет в руку *Массу *шипов+, *Массу *бомб+ и *Град *ударов+. NL Сжигается." - }, - "Guardian:MassOfШипа": { - "NAME": "Масса шипов", - "DESCRIPTION": "Даёт !M! временных Шипов. NL Сжигается, если у вас есть Артефакт." - }, - "Guardian:MassTimeBomb": { - "NAME": "Масса бомб", - "DESCRIPTION": "Помещает *Часовую *бомбу в каждый пустой слот для guardianmod:Стазиса. NL Сжигается, если было помещено 2 или более бомб.", - "UPGRADE_DESCRIPTION": "Помещает *Часовую *бомбу+ в каждый пустой слот для guardianmod:Стазиса. NL Сжигается, если было помещено 2 или более бомб." - }, - "Guardian:MassSlam": { - "NAME": "Град ударов", - "DESCRIPTION": "Наносит !D! урона !M! раза. NL Сжигается, если у вас 3 или более Силы." - }, - "Guardian:GemstoneGunCard": { - "NAME": "Самоцветная пушка", - "DESCRIPTION": "Оставляется.", - "UPGRADE_DESCRIPTION": " NL Сжигается." - }, - "Guardian:BodySlam": { - "NAME": "Бросок", - "DESCRIPTION": "Даёт !B! Защиты. NL Наносит урон, равный кол-ву вашей Защиты.", - "UPGRADE_DESCRIPTION": " NL (Наносит !D! урона.)" - }, - "Guardian:SecondStrike": { - "NAME": "Второй бросок", - "DESCRIPTION": "Эфирная. NL Наносит !D! урона. NL Сжигается." - }, - "Guardian:SecondStrikePreviewCard": { - "NAME": "Второй бросок", - "DESCRIPTION": "Эфирная. NL Наносит !D! урона. NL Копирует guardianmod:Самоцветы *Первого *броска. NL Сжигается." - }, - "Guardian:StrikeForStrike": { - "NAME": "Удар за удар", - "DESCRIPTION": "Наносит !D! урона. NL Заставляет врага атаковать вас на !M! урона." - }, - "Guardian:GearUp": { - "NAME": "Ускориться", - "DESCRIPTION": "Оставляется. NL guardianmod:Подготовка !M!. NL Сжигается." - } +{ + "Guardian:Strike_Guardian": { + "NAME": "Удар", + "DESCRIPTION": "Наносит !D! урона." + }, + "Guardian:Defend_Guardian": { + "NAME": "Оборона", + "DESCRIPTION": "Даёт !B! Защиты." + }, + "Guardian:Gem_Red": { + "NAME": "Рубин", + "DESCRIPTION": "guardianmod:Самоцвет. NL Даёт 2 временной Силы.", + "UPGRADE_DESCRIPTION": "Даёт 2 временной Силы." + }, + "Guardian:Gem_Green": { + "NAME": "Изумруд", + "DESCRIPTION": "guardianmod:Самоцвет. NL Даёт 2 временной Ловкости.", + "UPGRADE_DESCRIPTION": "Даёт 2 временной Ловкости." + }, + "Guardian:Gem_Lightblue": { + "NAME": "Турмалин", + "DESCRIPTION": "guardianmod:Самоцвет. NL Даёт 4 временных Шипов.", + "UPGRADE_DESCRIPTION": "Даёт 4 временных Шипов." + }, + "Guardian:Gem_White": { + "NAME": "Кварц", + "DESCRIPTION": "guardianmod:Самоцвет. NL Вы берёте карту.", + "UPGRADE_DESCRIPTION": "Вы берёте карту." + }, + "Guardian:Gem_Orange": { + "NAME": "Цитрин", + "DESCRIPTION": "guardianmod:Самоцвет. NL Даёт [E].", + "UPGRADE_DESCRIPTION": "Даёт [E]." + }, + "Guardian:Gem_Cyan": { + "NAME": "Аквамарин", + "DESCRIPTION": "guardianmod:Самоцвет. NL Добавляет в руку *Кристаллическую *защиту.", + "UPGRADE_DESCRIPTION": "Добавляет в руку *Кристаллическую *защиту." + }, + "Guardian:ChargeUp": { + "NAME": "Зарядить", + "DESCRIPTION": "Даёт !B! Защиты. NL Даёт !M! временной Силы в начале след. хода." + }, + "Guardian:DonusPower": { + "NAME": "Перегрузка", + "DESCRIPTION": "Вы берёте !M! карты. NL Вы возьмёте на 2 карты меньше в след. ходу.", + "UPGRADE_DESCRIPTION": "Вы берёте !M! карты. NL Вы возьмёте на 2 карты меньше в след. ходу. NL Уменьшает каждый из ваших отриц. эффектов на 1." + }, + "Guardian:DecasProtection": { + "NAME": "Древняя сила", + "DESCRIPTION": "Даёт !M! временной Силы и Ловкости." + }, + "Guardian:FierceBash": { + "NAME": "Яростный удар", + "DESCRIPTION": "Наносит !D! урона. NL Помещается в guardianmod:Стазис. NL guardianmod:Тик - Увеличивает свой урон на !M! в этом бою." + }, + "Guardian:PolyBeam": { + "NAME": "Рассеивающий луч", + "DESCRIPTION": "{@@}Наносит !D! урона случ. врагу !M! раз{!M!|&4=а.|&5=.}" + }, + "Guardian:TwinSlam": { + "NAME": "Первый бросок", + "DESCRIPTION": "Наносит !D! урона. NL Добавляет в руку *Второй *бросок.", + "UPGRADE_DESCRIPTION": "Наносит !D! урона. NL Добавляет в руку *Второй *бросок+." + }, + "Guardian:GuardianWhirl": { + "NAME": "Вихрь", + "DESCRIPTION": "{@@}Требует не менее 20 Защиты. NL Наносит !D! урона ВСЕМ врагам !M! раз{!M!|&4=а|&5=}.", + "EXTENDED_DESCRIPTION": [ + "Требуется больше Защиты." + ] + }, + "Guardian:VentSteam": { + "NAME": "Дымовая завеса", + "DESCRIPTION": "Накладывает !M! Уязвимости на ВСЕХ врагов.", + "UPGRADE_DESCRIPTION": "Накладывает !M! Уязвимости на ВСЕХ врагов." + }, + "Guardian:CurlUp": { + "NAME": "Свернуться", + "DESCRIPTION": "Помещает случ. карту из руки в guardianmod:Стазис. NL guardianmod:Подготовка !M!.", + "UPGRADE_DESCRIPTION": "Помещает карту из руки в guardianmod:Стазис. NL guardianmod:Подготовка !M!." + }, + "Guardian:TimeBomb": { + "NAME": "Часовая бомба", + "DESCRIPTION": "Наносит !D! урона ВСЕМ врагам. NL guardianmod:Разгоняет ВСЕ карты в guardianmod:Стазисе. NL Сжигается." + }, + "Guardian:HyperBeam_Guardian": { + "NAME": "Гига-луч", + "DESCRIPTION": "Наносит !D! урона ВСЕМ врагам. Сила влияет на эту карту !M! раза. NL Вы пропускаете след. ход." + }, + "Guardian:BronzeArmor": { + "NAME": "Эластичная пластина", + "DESCRIPTION": "Уменьшает каждый из ваших отриц. эффектов на !M!. NL guardianmod:Подготовка 8. NL Сжигается.", + "UPGRADE_DESCRIPTION": "Уменьшает каждый из ваших отриц. эффектов на !M!. NL guardianmod:Подготовка 8." + }, + "Guardian:FloatingOrbs": { + "NAME": "Парящие сферы", + "DESCRIPTION": "Наносит !M! урона случ. врагу, когда вы разыгрываете карту стоимостью 0." + }, + "Guardian:OrbSlam": { + "NAME": "Залп сфер", + "DESCRIPTION": "Наносит !D! урона !GuardianMulti! раза. NL Сжигается." + }, + "Guardian:Incinerate": { + "NAME": "Поджечь", + "DESCRIPTION": "Наносит !D! урона. NL guardianmod:Разгон.", + "UPGRADE_DESCRIPTION": "Наносит !D! урона. NL guardianmod:Разгоняет дважды." + }, + "Guardian:Orbwalk": { + "NAME": "Круговорот", + "DESCRIPTION": "Даёт !M! Силы. NL guardianmod:Тик - Даёт 1 Силы. NL guardianmod:Нестабильная.", + "UPGRADE_DESCRIPTION": "Даёт !M! Силы. NL guardianmod:Тик - Даёт 1 Силы." + }, + "Guardian:WalkerClaw": { + "NAME": "Исполосовать", + "DESCRIPTION": "Наносит !D! урона !M! раза.", + "UPGRADE_DESCRIPTION": "Наносит !D! урона !M! раза." + }, + "Guardian:SphericShield": { + "NAME": "Сферический щит", + "DESCRIPTION": "Даёт !B! Защиты. NL Перейти в guardianmod:Оборонительный_режим. NL Сжигается." + }, + "Guardian:Harden": { + "NAME": "Укрепить", + "DESCRIPTION": "Требует не менее 20 Защиты. NL guardianmod:Подготовка !GuardianSecondM!. NL Даёт !M! Шипов.", + "EXTENDED_DESCRIPTION": [ + "Требуется больше Защиты." + ] + }, + "Guardian:SentryBeam": { + "NAME": "Взрыв Часового", + "DESCRIPTION": "Наносит !D! урона. NL Помещает *Волну *Часового в guardianmod:Стазис. NL Сжигается.", + "UPGRADE_DESCRIPTION": "Наносит !D! урона. NL Помещает *Волну *Часового+ в guardianmod:Стазис. NL Сжигается." + }, + "Guardian:SentryWave": { + "NAME": "Волна Часового", + "DESCRIPTION": "Накладывает !M! Слабости. NL Помещает *Взрыв *Часового в guardianmod:Стазис. NL Сжигается.", + "UPGRADE_DESCRIPTION": "Накладывает !M! Слабости. NL guardianmod:Подготовка 2. NL Помещает *Взрыв *Часового+ в guardianmod:Стазис. NL Сжигается." + }, + "Guardian:CompilePackage": { + "NAME": "Скомпилировать", + "DESCRIPTION": "Выберите и получите 1 из 3 guardianmod:Паков. NL Сжигается.", + "UPGRADE_DESCRIPTION": "Выберите и получите 1 из 3 Улучшенных guardianmod:Паков. NL Сжигается.", + "EXTENDED_DESCRIPTION": [ + "Выберите Пак." + ] + }, + "Guardian:PackageShapes": { + "NAME": "Пак: Формы", + "DESCRIPTION": "Добавляет в руку *Часовую *бомбу, *Протокол *нападения и *Репульсор. NL Сжигается.", + "UPGRADE_DESCRIPTION": "Добавляет в руку *Часовую *бомбу+, *Протокол *нападения+ и *Репульсор+. NL Сжигается." + }, + "Guardian:PackageDonuDeca": { + "NAME": "Пак: Древность", + "DESCRIPTION": "Добавляет в руку *Перегрузку, *Древнюю *силу и *Древний *конструкт. NL Сжигается.", + "UPGRADE_DESCRIPTION": "Добавляет в руку *Перегрузку+, *Древнюю *силу+ и *Древний *конструкт+. NL Сжигается." + }, + "Guardian:PackageSphere": { + "NAME": "Пак: Сферичность", + "DESCRIPTION": "Добавляет в руку *Сферический *щит, *Парящие *сферы и *Металлизация. NL Сжигается.", + "UPGRADE_DESCRIPTION": "Добавляет в руку *Сферический *щит+, *Парящие *сферы+ и *Металлизация+. NL Сжигается." + }, + "Guardian:PackageSentry": { + "NAME": "Пак: Часовой", + "DESCRIPTION": "Добавляет в руку *Взрыв *Часового и две *Волны *Часового. NL Сжигается.", + "UPGRADE_DESCRIPTION": "Добавляет в руку *Взрыв *Часового+ и две *Волны *Часового+. NL Сжигается." + }, + "Guardian:PackageWalker": { + "NAME": "Пак: Круговорот", + "DESCRIPTION": "Добавляет в руку *Круговорот, *Исполосовать и *Поджечь. NL Сжигается.", + "UPGRADE_DESCRIPTION": "Добавляет в руку *Круговорот+, *Исполосовать+ и *Поджечь+. NL Сжигается." + }, + "Guardian:PackageAutomaton": { + "NAME": "Пак: Бронза", + "DESCRIPTION": "Добавляет в руку *Гига-луч, *Сферу *поддержки и *Эластичную *пластину. NL Сжигается.", + "UPGRADE_DESCRIPTION": "Добавляет в руку *Гига-луч+, *Сферу *поддержки+ и *Эластичную *пластину+. NL Сжигается." + }, + "Guardian:PackageDefect": { + "NAME": "Пак: Дефект", + "DESCRIPTION": "Добавляет в руку *Перенаправить, *Предпрограмму и *Конденсатор *времени. NL Сжигается.", + "UPGRADE_DESCRIPTION": "Добавляет в руку *Перенаправить+, *Предпрограмму+ и *Конденсатор *времени+. NL Сжигается." + }, + "Guardian:Planning": { + "NAME": "Подготовиться", + "DESCRIPTION": "Помещает !M! карты с верха стопки добора в guardianmod:Стазис." + }, + "Guardian:Recover": { + "NAME": "Восстановить", + "DESCRIPTION": "Даёт !B! Защиты. NL guardianmod:Подготовка !M!. NL Помещает карту из стопки сброса в guardianmod:Стазис." + }, + "Guardian:Emergency": { + "NAME": "Форс-мажор", + "DESCRIPTION": "Даёт guardianmod:Разгон, пока карта не выйдет из guardianmod:Стазиса. NL Сжигается.", + "UPGRADE_DESCRIPTION": "Даёт guardianmod:Разгон, пока карта не выйдет из guardianmod:Стазиса." + }, + "Guardian:Clone": { + "NAME": "Клонировать", + "DESCRIPTION": "Выберите карту в руке. NL Помещает копию этой карты в guardianmod:Стазис. NL Сжигается.", + "UPGRADE_DESCRIPTION": "Выберите карту в руке. NL Помещает копию этой карты в guardianmod:Стазис. NL guardianmod:Разгон. NL Сжигается." + }, + "Guardian:Preprogram": { + "NAME": "Предпрограмма", + "DESCRIPTION": "{@@}Показывает !M! карт{!M!|&4=ы|&7=} с верха стопки добора. Выберите одну из них и поместите в guardianmod:Стазис." + }, + "Guardian:GemFinder": { + "NAME": "Искатель cамоцветов", + "DESCRIPTION": "Вы сможете выбрать и добавить случ. Обычный guardianmod:Самоцвет в колоду, в конце боя." + }, + "Guardian:StasisField": { + "NAME": "Стазисное поле", + "DESCRIPTION": "Даёт !B! Защиты. NL Помещается в guardianmod:Стазис. NL Даёт !B! Защиты при выходе из guardianmod:Стазиса." + }, + "Guardian:StasisStrike": { + "NAME": "Стазисный удар", + "DESCRIPTION": "Наносит !D! урона. NL Даёт 1 слот для Стазиса." + }, + "Guardian:FuturePlans": { + "NAME": "Планы на будущее", + "DESCRIPTION": "Вы можете поместить !M! карту из руки в guardianmod:Стазис в конце каждого вашего хода.", + "UPGRADE_DESCRIPTION": "Начальная. NL Вы можете поместить !M! карту из руки в guardianmod:Стазис в конце каждого вашего хода." + }, + "Guardian:Suspension": { + "NAME": "Приостановить", + "DESCRIPTION": "Даёт !B! Защиты. NL Помещает карту из руки в guardianmod:Стазис.", + "UPGRADE_DESCRIPTION": "Вы берёте карту. NL Помещает карту из руки в guardianmod:Стазис." + }, + "Guardian:FastForward": { + "NAME": "Разогнаться", + "DESCRIPTION": "Даёт guardianmod:Разгон !M! раза.", + "UPGRADE_DESCRIPTION": "Оставляется. NL Даёт guardianmod:Разгон !M! раза." + }, + "Guardian:TimeCapacitor": { + "NAME": "Конденсатор времени", + "DESCRIPTION": "Даёт !M! слот для Стазиса." + }, + "Guardian:ConstructionForm": { + "NAME": "Облик конструкта", + "DESCRIPTION": "Эфирная. NL Даёт !M! Буфера. NL Даёт 1 Силы в начале каждого вашего хода, если у вас есть Буфер.", + "UPGRADE_DESCRIPTION": "Даёт !M! Буфера. NL Даёт 1 Силы в начале каждого вашего хода, если у вас есть Буфер." + }, + "Guardian:RollAttack": { + "NAME": "Круговая атака", + "DESCRIPTION": "Наносит !D! урона. NL Действует на ВСЕХ врагов, если в guardianmod:Оборонительном_режиме. Если нет: guardianmod:Подготовка 8." + }, + "Guardian:GemFire": { + "NAME": "Самоцветная пушка", + "DESCRIPTION": "{@@}Вы сжигаете ВСЕ guardianmod:Самоцветы, включая guardianmod:Инкрустированные. Наносит !D! урона за каждый из них. Сжигается.", + "UPGRADE_DESCRIPTION": " NL (Наносит урон !M! раз{!M!|@=|&2,&3,&4=а|&12,&13,&14=}.)" + }, + "Guardian:ChargeCore": { + "NAME": "Зарядка ядра", + "DESCRIPTION": "Наносит !D! урона. NL Помещается в guardianmod:Стазис. NL guardianmod:Тик - Вы берёте карту. NL guardianmod:Нестабильная." + }, + "Guardian:Reroute": { + "NAME": "Перенаправить", + "DESCRIPTION": "Наносит !D! урона. NL Помещает след. разыгранную в этом ходу карту в guardianmod:Стазис." + }, + "Guardian:PiercingHide": { + "NAME": "Пластина с шипами", + "DESCRIPTION": "Даёт !B! Защиты и !M! временных Шипов. NL guardianmod:Подготовка 3." + }, + "Guardian:ShieldSpikes": { + "NAME": "Уйти в оборону", + "DESCRIPTION": "Даёт !B! Защиты. NL Даёт !M! временных Шипов, если в guardianmod:Оборонительном_режиме. Если нет: guardianmod:Подготовка 8." + }, + "Guardian:PrismaticBeam": { + "NAME": "Призматический всплеск", + "DESCRIPTION": "Наносит !D! урона за каждый guardianmod:Самоцвет в этой карте." + }, + "Guardian:PrismaticBarrier": { + "NAME": "Призматический барьер", + "DESCRIPTION": "Даёт !B! Защиты за каждый guardianmod:Самоцвет в этой карте." + }, + "Guardian:TemporalStrike": { + "NAME": "Темпоральный удар", + "DESCRIPTION": "Наносит !D! урона. NL Даёт [E] , если у вас есть карты в guardianmod:Стазисе.", + "UPGRADE_DESCRIPTION": "Наносит !D! урона. NL Даёт [E] , если у вас есть карты в guardianmod:Стазисе." + }, + "Guardian:TemporalShield": { + "NAME": "Темпоральный щит", + "DESCRIPTION": "Даёт !B! Защиты. NL guardianmod:Разгон." + }, + "Guardian:ExploitGems": { + "NAME": "Разрядить самоцветы", + "DESCRIPTION": "Вы берёте карту.", + "UPGRADE_DESCRIPTION": "Даёт [E]. NL Вы берёте карту." + }, + "Guardian:RefractedBeam": { + "NAME": "Преломляющий луч", + "DESCRIPTION": "{@@}Наносит !D! урона !M! раз{!M!|@=|&2,&3,&4=а|&12,&13,&14=}. NL Может быть улучшена любое кол-во раз." + }, + "Guardian:MultiBeam": { + "NAME": "Мульти-луч", + "DESCRIPTION": "Наносит !D! урона ВСЕМ врагам X раз. NL guardianmod:Тик - Повышает свой урон на !M!." + }, + "Guardian:BaubleBeam": { + "NAME": "Сияющий взрыв", + "DESCRIPTION": "Наносит !D! урона. NL Повторяет !M! раза:" + }, + "Guardian:PrimingBeam": { + "NAME": "Предупредительный выстрел", + "DESCRIPTION": "Наносит !D! урона. NL guardianmod:Подготовка !M!." + }, + "Guardian:EvasiveProtocol": { + "NAME": "Протокол неуловимости", + "DESCRIPTION": "Даёт !M! Ловкости, пока в guardianmod:Оборонительном_режиме. NL guardianmod:Подготовка 3 в начале каждого вашего хода." + }, + "Guardian:SpikerProtocol": { + "NAME": "Протокол самозащиты", + "DESCRIPTION": "Даёт !M! Шипов, пока в guardianmod:Оборонительном_режиме. NL guardianmod:Подготовка 3 в начале каждого вашего хода." + }, + "Guardian:ArmoredProtocol": { + "NAME": "Протокол непробиваемости", + "DESCRIPTION": "Даёт !M! Защиты в конце вашего хода, пока в guardianmod:Оборонительном_режиме. NL guardianmod:Подготовка 3 в начале каждого вашего хода." + }, + "Guardian:TimeSifter": { + "NAME": "Просеиватель времени", + "DESCRIPTION": "Даёт guardianmod:Разгон в начале каждого вашего хода.", + "UPGRADE_DESCRIPTION": "Начальная. NL Даёт guardianmod:Разгон в начале каждого вашего хода." + }, + "Guardian:AncientConstruct": { + "NAME": "Древний конструкт", + "DESCRIPTION": "Если у вас нет Артефакта, даёт !M! Артефакт в начале каждого вашего хода.", + "UPGRADE_DESCRIPTION": "Даёт 2 Артефакт. NL Если у вас нет Артефакта, даёт !M! Артефакт в начале каждого вашего хода." + }, + "Guardian:CrystalBeam": { + "NAME": "Кристаллический луч", + "DESCRIPTION": "Наносит !D! урона. NL Наносит !M! доп. урона за каждый guardianmod:Самоцвет в колоде." + }, + "Guardian:Gem_Synthetic": { + "NAME": "Оникс", + "DESCRIPTION": "guardianmod:Самоцвет. NL Уменьшает каждый из ваших отриц. эффектов на 1.", + "UPGRADE_DESCRIPTION": "Уменьшает каждый из ваших отриц. эффектов на 1." + }, + "Guardian:Gem_Yellow": { + "NAME": "Янтарь", + "DESCRIPTION": "guardianmod:Самоцвет. NL guardianmod:Разгон.", + "UPGRADE_DESCRIPTION": "guardianmod:Разгон." + }, + "Guardian:Gem_Purple": { + "NAME": "Аметист", + "DESCRIPTION": "guardianmod:Самоцвет. NL ВСЕ враги теряют 2 Силы в этом ходу.", + "UPGRADE_DESCRIPTION": "ВСЕ враги теряют 2 Силы в этом ходу." + }, + "Guardian:Gem_Crimson": { + "NAME": "Гранат", + "DESCRIPTION": "guardianmod:Самоцвет. NL Накладывает 1 Уязвимости на ВСЕХ врагов.", + "UPGRADE_DESCRIPTION": "Накладывает 1 Уязвимости на ВСЕХ врагов." + }, + "Guardian:Gem_Blue": { + "NAME": "Сапфир", + "DESCRIPTION": "guardianmod:Самоцвет. NL guardianmod:Подготовка 4.", + "UPGRADE_DESCRIPTION": "guardianmod:Подготовка 4." + }, + "Guardian:Gem_Fragmented": { + "NAME": "Разбитый самоцвет", + "DESCRIPTION": "guardianmod:Самоцвет. NL Добавляет в руку *Кристаллическую *заточку.", + "UPGRADE_DESCRIPTION": "Добавляет в руку *Кристаллическую *заточку." + }, + "Guardian:CrystalShiv": { + "NAME": "Кристаллическая заточка", + "DESCRIPTION": "Наносит !D! урона. NL Сжигается." + }, + "Guardian:CrystalWard": { + "NAME": "Кристаллическая защита", + "DESCRIPTION": "Даёт !B! Защиты. NL Сжигается." + }, + "Guardian:Repulse": { + "NAME": "Репульсор", + "DESCRIPTION": "Когда вы впервые за ход берёте карту Статуса или Проклятия, она Сжигается и вы берёте карту.", + "UPGRADE_DESCRIPTION": "Когда вы впервые за ход берёте карту Статуса или Проклятия, она Сжигается и вы берёте карту." + }, + "Guardian:BronzeOrb": { + "NAME": "Сфера поддержки", + "DESCRIPTION": "Начальная. NL Наносит !D! урона. Помещает случ. карту из стопки добора в guardianmod:Стазис. NL Сжигается." + }, + "Guardian:RevengeProtocol": { + "NAME": "Протокол мести", + "DESCRIPTION": "Даёт !M! Силы, пока в guardianmod:Оборонительном_режиме. NL guardianmod:Подготовка !GuardianSecondM! в начале каждого вашего хода." + }, + "Guardian:GatlingBeam": { + "NAME": "Лазерная турель", + "DESCRIPTION": "{@@}Наносит !D! урона. NL Помещается в guardianmod:Стазис на !M! ход{!M!|&4=а|&5=ов}. NL guardianmod:Тик - Наносит !D! урона случ. врагу." + }, + "Guardian:ShieldCharger": { + "NAME": "Зарядить щиты", + "DESCRIPTION": "Помещается в guardianmod:Стазис. NL guardianmod:Тик - guardianmod:Подготовка !M! и даёт !B! Защиты. NL guardianmod:Нестабильная." + }, + "Guardian:StasisEngine": { + "NAME": "Стазисный движок", + "DESCRIPTION": "Вы получаете [E] и берёте карту, когда разыгрываете *3-ью карту стоимостью 0 за ход.", + "UPGRADE_DESCRIPTION": "Начальная. NL Вы получаете [E] и берёте карту, когда разыгрываете *3-ью карту стоимостью 0 за ход." + }, + "Guardian:HammerDown": { + "NAME": "Сокрушающий удар", + "DESCRIPTION": "Наносит !D! урона. NL Удваивает вашу текущую Силу и Ловкость. NL Сжигается." + }, + "Guardian:OmegaCannon": { + "NAME": "Омега-пушка", + "DESCRIPTION": "Наносит !D! урона. NL Стоит на 1 [E] меньше за каждые 1 Силы." + }, + "Guardian:ModeShift": { + "NAME": "Сменить режим", + "DESCRIPTION": "Меняет местами значения вашей Силы и Ловкости. NL Вы берёте карту.", + "UPGRADE_DESCRIPTION": "Оставляется. NL Меняет местами значения вашей Силы и Ловкости. NL Вы берёте карту." + }, + "Guardian:PackageConstruct": { + "NAME": "Пак: Конструкт", + "DESCRIPTION": "Добавляет в руку *Сокрушающий *удар, *Омега-пушку и *Сменить *режим. NL Сжигается.", + "UPGRADE_DESCRIPTION": "Добавляет в руку *Сокрушающий *удар+, *Омега-пушку+ и *Сменить *режим+. NL Сжигается." + }, + "Guardian:PackageMass": { + "NAME": "Пак: Масса", + "DESCRIPTION": "Добавляет в руку *Массу *шипов, *Массу *бомб и *Град *ударов. NL Сжигается.", + "UPGRADE_DESCRIPTION": "Добавляет в руку *Массу *шипов+, *Массу *бомб+ и *Град *ударов+. NL Сжигается." + }, + "Guardian:MassOfШипа": { + "NAME": "Масса шипов", + "DESCRIPTION": "Даёт !M! временных Шипов. NL Сжигается, если у вас есть Артефакт." + }, + "Guardian:MassTimeBomb": { + "NAME": "Масса бомб", + "DESCRIPTION": "Помещает *Часовую *бомбу в каждый пустой слот для guardianmod:Стазиса. NL Сжигается, если было помещено 2 или более бомб.", + "UPGRADE_DESCRIPTION": "Помещает *Часовую *бомбу+ в каждый пустой слот для guardianmod:Стазиса. NL Сжигается, если было помещено 2 или более бомб." + }, + "Guardian:MassSlam": { + "NAME": "Град ударов", + "DESCRIPTION": "Наносит !D! урона !M! раза. NL Сжигается, если у вас 3 или более Силы." + }, + "Guardian:GemstoneGunCard": { + "NAME": "Самоцветная пушка", + "DESCRIPTION": "Оставляется.", + "UPGRADE_DESCRIPTION": " NL Сжигается." + }, + "Guardian:BodySlam": { + "NAME": "Бросок", + "DESCRIPTION": "Даёт !B! Защиты. NL Наносит урон, равный кол-ву вашей Защиты.", + "UPGRADE_DESCRIPTION": " NL (Наносит !D! урона.)" + }, + "Guardian:SecondStrike": { + "NAME": "Второй бросок", + "DESCRIPTION": "Эфирная. NL Наносит !D! урона. NL Сжигается." + }, + "Guardian:SecondStrikePreviewCard": { + "NAME": "Второй бросок", + "DESCRIPTION": "Эфирная. NL Наносит !D! урона. NL Копирует guardianmod:Самоцветы *Первого *броска. NL Сжигается." + }, + "Guardian:StrikeForStrike": { + "NAME": "Удар за удар", + "DESCRIPTION": "Наносит !D! урона. NL Заставляет врага атаковать вас на !M! урона." + }, + "Guardian:GearUp": { + "NAME": "Ускориться", + "DESCRIPTION": "Оставляется. NL guardianmod:Подготовка !M!. NL Сжигается." + } } \ No newline at end of file diff --git a/src/main/resources/guardianResources/localization/rus/CharacterStrings.json b/src/main/resources/guardianResources/localization/rus/CharacterStrings.json index a1843ad3f..844b33609 100644 --- a/src/main/resources/guardianResources/localization/rus/CharacterStrings.json +++ b/src/main/resources/guardianResources/localization/rus/CharacterStrings.json @@ -1,18 +1,18 @@ -{ - "Guardian": { - "NAMES": [ - "Страж" - ], - "TEXT": [ - "Конструкт Шпиля, запрограмированный на его защиту. NL Протокол защиты активируется при получении урона.", - "ГЛАВНАЯ ДИРЕКТИВА - #r~УНИЧТОЖИТЬ~ #r~СЕРДЦЕ.~", - "[ guardianmod:Гнездо ]", - "Пробираясь по тёмной улице, вы застаёте несколько таинственных фигур в процессе какого-то тёмного ритуала. Вы подходите ближе, и все они одновременно поворачиваются к вам. Самый высокий из них оголяет клыки и протягивает к вам длинную бледную руку. NL ~«Стань~ ~одним~ ~из~ ~нас,~ ~Древний~ ~конструкт,~ ~и~ ~ощути~ ~тепло~ ~Шпиля».~", - "Оборонительный режим", - "Даёт #b3 #yШипов и #b10 #yЗащиты в начале своего хода, Защита не исчезнет на след. ход.", - "~ОШИБКА:~ #rСтазис в процессе." - ], - "KEYWORDS": [ - ] - } +{ + "Guardian": { + "NAMES": [ + "Страж" + ], + "TEXT": [ + "Конструкт Шпиля, запрограмированный на его защиту. NL Протокол защиты активируется при получении урона.", + "ГЛАВНАЯ ДИРЕКТИВА - #r~УНИЧТОЖИТЬ~ #r~СЕРДЦЕ.~", + "[ guardianmod:Гнездо ]", + "Пробираясь по тёмной улице, вы застаёте несколько таинственных фигур в процессе какого-то тёмного ритуала. Вы подходите ближе, и все они одновременно поворачиваются к вам. Самый высокий из них оголяет клыки и протягивает к вам длинную бледную руку. NL ~«Стань~ ~одним~ ~из~ ~нас,~ ~Древний~ ~конструкт,~ ~и~ ~ощути~ ~тепло~ ~Шпиля».~", + "Оборонительный режим", + "Даёт #b3 #yШипов и #b10 #yЗащиты в начале своего хода, Защита не исчезнет на след. ход.", + "~ОШИБКА:~ #rСтазис в процессе." + ], + "KEYWORDS": [ + ] + } } \ No newline at end of file diff --git a/src/main/resources/guardianResources/localization/rus/EventStrings.json b/src/main/resources/guardianResources/localization/rus/EventStrings.json index 12c0c4f91..47ab6b0d2 100644 --- a/src/main/resources/guardianResources/localization/rus/EventStrings.json +++ b/src/main/resources/guardianResources/localization/rus/EventStrings.json @@ -1,127 +1,127 @@ -{ - "Guardian:GemMine": { - "NAME": "Шахта самоцветов", - "DESCRIPTIONS": [ - "Вы попадаете в старую шахту. В каменных расщелинах виднеется множество блестящих самоцветов: #gизумруды, #rрубины, #yтопазы и несколько других. Кучка гремлинов-шахтёров поблизости имеет при себе шахтёрские инструменты, которые могут быть полезны, но самоцветы так близко, что вы бы могли попытаться выкопать их руками, при некоторой решимости.", - "Покопавшись в скалистой стене, вам удаётся изъять из неё самоцвет. Немного больно, но эти камни стоят некоторых ранений.", - "Хоть и привлекательно получить сокровища, вы предпочитаете сохранить броню для более важных дел.", - "Успешно отвоевав старую шахту, вы уходите с чувством выполненного долга и парой воспалённых бронзовых конечностей.", - "Вы хватаете кирку из лагеря Гремлинов, которая похоже в плохом состоянии. Можно использовать её, чтобы добыть немного самоцветов или припасти на будущее.", - "Используя кирку, вы вонзаете её в стену и добываете самоцвет. Кирка износилась в процессе, но это всяко лучше, чем повредить свои когти." - ], - "OPTIONS": [ - "[Копать когтями] #gПолучить #gслуч. #gСамоцвет. #rПотерять #r", - " #rОЗ.", - "[Уйти]", - "[Ограбить] #rСразиться #rс #rГремлинами. #gПолучить #gКирку #gРапсодии.", - "[Добыть киркой] #gПолучить #gслуч. #gСамоцвет. #rПотратить #r1 #rзаряд #rКирки #rРапсодии.", - "[Закрыто] Кирка #rсломана." - ] - }, - "Guardian:StasisEgg": { - "NAME": "Квантовая камера", - "DESCRIPTIONS": [ - "Вы спотыкаетесь и тем самым открываете коробку, крышка которой покрыта странными рунами. Внутри вы замечаете тихо-жужжащее устройство в форме яйца. Вы не знаете, что это такое или для чего оно используется, но исходящая от него энергия заставляет думать, что оно может быть сильным.", - "Вы решаете, что нечто подобной силы должно быть использовано. Положив яйцо в карман, вы продолжаете свой путь, однако руны начинают светиться, и вы чувствуете как само время постепенно ускользает из рук, делая вас всё ~медленее~ ~и~ ~медленее~ ~.~ ~.~ ~.~", - "Вы решаете, что нечто подобной силы не должно достаться случайному прохожему и уничтожаете его. Тёплый свет от яйца бодрит вас, прежде чем оно #rяростно #rвзрывается, пронзая ваше тело #rболезненными осколками.", - "Вы решаете, что нечто подобной силы возможно лежит здесь не просто так. Хоть ваши инстинкты говорили, что с ним следует что-нибудь сделать, вы думаете, что у хозяина этого устройства были причины оставить его здесь. Вы закрываете крышку и продолжаете путь." - ], - "OPTIONS": [ - "[Использовать] #gПолучить #gКвантовую #gкамеру. #rПолучить #rПроклятие #r- #rСтарость", - "[Разбить] #gПолучить #g", - " #gМакс. #gОЗ. #rПолучить #rПроклятие #r- #rБоль", - "[Уйти]" - ] - }, - "Guardian:AccursedBlacksmith": { - "NAME": "", - "DESCRIPTIONS": [ - "Вы решаете воспользоваться кузницей и... NL #y@ДЗЫНЬ@ #y@ДЗЫ-Ы-ЫНЬ@ #y@ДЗЫНЬ!@ NL ...добавляете места под самоцветы в своём арсенале." - ], - "OPTIONS": [ - "[Мастерить] #gДобавить #gдоп. #gгнездо #gк #gлюбой #gкарте #gс #gгнездом.", - "Выберите карту, которой хотите добавить гнездо.", - "[Закрыто] Требуется карта с гнездом." - ] - }, - "Guardian:GuardianTalk": { - "NAME": "", - "DESCRIPTIONS": [ - "ЗАМЕНА - ВЕЗВРАЩАЮСЬ К СБОРКЕ.", - "АНОМАЛИЯ ОБНАРУЖЕНА.", - "МОДЕЛЬ СТРАЖА ДЕФЕКТНА.", - "ПЕРЕЗАПИСЬ АЛЬФА-ПРОТОКОЛА.", - "СТРАЖ: ВОЗВРАЩАЮСЬ НА ПОСТ.", - "ОБНАРУЖЕН СБОЙ ПРОТОКОЛА.", - "СТРАЖ: УНИЧТОЖИТЬ НЕМЕДЛЕННО.", - "НОВЫЙ ПРОТОКОЛ - УНИЧТОЖИТЬ.", - "ПРЕКРАТИТЬ И ВЕРНУТЬСЯ В ПРЕДДВЕРИЕ." - ], - "OPTIONS": [ - "" - ] - }, - "Guardian:CrystalForge": { - "NAME": "Мрачная кузница", - "DESCRIPTIONS": [ - "По секретным проходам, которые знают только конструкты, вы заходите в комнату, предназначенную для починки и обслуживания Автоматонов. Лежащие здесь инструменты могут быть полезны, хоть они и не задумывались для Стражей.", - "Вы разбиваете на зачарованной наковальне ненужный предмет снаряжения на кусочки. Всё для того, чтобы вернуть самоцветы, которые вы по глупости туда вставили.", - "С помощью волшебных клещей, вы осторожно вырываете самоцветы из гнёзд, освобождая место под более хорошие камни. Правда то, что было там до этого, пришло в негодное для использования состояние.", - "Вы бросаете ненужную часть снаряжения в кузню и она тут же включает способность преобразования материи. Через некоторое время, вещь, которую вы кинули, расщепилась и сжалась в прекрасный самоцвет.", - "Вы покидаете мрачную кузницу по тому же пути, по какому пришли. Приключение к рассвету на вершине Шпиля продолжается.", - "Выберите карту, которую хотите удалить.", - "Выберите карту, из которой хотите вырвать самоцветы.", - "Выберите карту, которую хотите преобразовать в самоцвет.", - "Выберите самоцвет.", - "Выберите карту для инкрустирования Самоцвета.", - "Воспользовавшись этим перерывом в восхождении, вы помещаете самоцвет в своё снаряжение, мгновенно ощущая прирост силы." - ], - "OPTIONS": [ - "[Разобрать] #rУбрать карту с гнездом. Получить #gСамоцветы из неё.", - "[Закрыто] Требуется карта с гнездом и инкрустированным Самоцветом.", - "[Вырвать] #rУничтожить все #gСамоцветы в карте с гнездом.", - "[Преобразовать] #rУбрать карту. Получить случайный #gСамоцвет.", - "[Закрыто] Уже использовано.", - "[Уйти]", - "[Усилить] Добавить #gСамоцвет в #gГнездо.", - "[Закрыто] Требуется Самоцвет и свободное Гнездо." - ] - }, - "Guardian:Purifier": { - "NAME": "", - "DESCRIPTIONS": [ - "Быстрым сокрушительным ударом вы разбиваете святилище на кусочки, чтобы найти сокровища внутри. Среди обломков лежат два нетронутых и пригодных для использования самоцвета, терпеливо ожидающих занять место в вашем оружии. NL NL Вы покидаете остатки святилища и продолжаете восхождение." - ], - "OPTIONS": [ - "[Вдарить] #gПолучить #g2 #gслучайных #gСамоцвета." - ] - }, - "Guardian:Transmorgrifier": { - "NAME": "", - "DESCRIPTIONS": [ - "" - ], - "OPTIONS": [ - "" - ] - }, - "Guardian:UpgradeShrine": { - "NAME": "", - "DESCRIPTIONS": [ - "" - ], - "OPTIONS": [ - "" - ] - }, - "Guardian:BackToBasics": { - "NAME": "", - "DESCRIPTIONS": [ - "Терпи удары, если ты гвоздь. Наноси удары, если ты молот." - ], - "OPTIONS": [ - "[Стойкость] #gДобавить #gПодготовка: #g2 ко всем картам #gУдар и #gОборона.", - "[Закрыто] Требуется Удар или Оборона." - ] - } +{ + "Guardian:GemMine": { + "NAME": "Шахта самоцветов", + "DESCRIPTIONS": [ + "Вы попадаете в старую шахту. В каменных расщелинах виднеется множество блестящих самоцветов: #gизумруды, #rрубины, #yтопазы и несколько других. Кучка гремлинов-шахтёров поблизости имеет при себе шахтёрские инструменты, которые могут быть полезны, но самоцветы так близко, что вы бы могли попытаться выкопать их руками, при некоторой решимости.", + "Покопавшись в скалистой стене, вам удаётся изъять из неё самоцвет. Немного больно, но эти камни стоят некоторых ранений.", + "Хоть и привлекательно получить сокровища, вы предпочитаете сохранить броню для более важных дел.", + "Успешно отвоевав старую шахту, вы уходите с чувством выполненного долга и парой воспалённых бронзовых конечностей.", + "Вы хватаете кирку из лагеря Гремлинов, которая похоже в плохом состоянии. Можно использовать её, чтобы добыть немного самоцветов или припасти на будущее.", + "Используя кирку, вы вонзаете её в стену и добываете самоцвет. Кирка износилась в процессе, но это всяко лучше, чем повредить свои когти." + ], + "OPTIONS": [ + "[Копать когтями] #gПолучить #gслуч. #gСамоцвет. #rПотерять #r", + " #rОЗ.", + "[Уйти]", + "[Ограбить] #rСразиться #rс #rГремлинами. #gПолучить #gКирку #gРапсодии.", + "[Добыть киркой] #gПолучить #gслуч. #gСамоцвет. #rПотратить #r1 #rзаряд #rКирки #rРапсодии.", + "[Закрыто] Кирка #rсломана." + ] + }, + "Guardian:StasisEgg": { + "NAME": "Квантовая камера", + "DESCRIPTIONS": [ + "Вы спотыкаетесь и тем самым открываете коробку, крышка которой покрыта странными рунами. Внутри вы замечаете тихо-жужжащее устройство в форме яйца. Вы не знаете, что это такое или для чего оно используется, но исходящая от него энергия заставляет думать, что оно может быть сильным.", + "Вы решаете, что нечто подобной силы должно быть использовано. Положив яйцо в карман, вы продолжаете свой путь, однако руны начинают светиться, и вы чувствуете как само время постепенно ускользает из рук, делая вас всё ~медленее~ ~и~ ~медленее~ ~.~ ~.~ ~.~", + "Вы решаете, что нечто подобной силы не должно достаться случайному прохожему и уничтожаете его. Тёплый свет от яйца бодрит вас, прежде чем оно #rяростно #rвзрывается, пронзая ваше тело #rболезненными осколками.", + "Вы решаете, что нечто подобной силы возможно лежит здесь не просто так. Хоть ваши инстинкты говорили, что с ним следует что-нибудь сделать, вы думаете, что у хозяина этого устройства были причины оставить его здесь. Вы закрываете крышку и продолжаете путь." + ], + "OPTIONS": [ + "[Использовать] #gПолучить #gКвантовую #gкамеру. #rПолучить #rПроклятие #r- #rСтарость", + "[Разбить] #gПолучить #g", + " #gМакс. #gОЗ. #rПолучить #rПроклятие #r- #rБоль", + "[Уйти]" + ] + }, + "Guardian:AccursedBlacksmith": { + "NAME": "", + "DESCRIPTIONS": [ + "Вы решаете воспользоваться кузницей и... NL #y@ДЗЫНЬ@ #y@ДЗЫ-Ы-ЫНЬ@ #y@ДЗЫНЬ!@ NL ...добавляете места под самоцветы в своём арсенале." + ], + "OPTIONS": [ + "[Мастерить] #gДобавить #gдоп. #gгнездо #gк #gлюбой #gкарте #gс #gгнездом.", + "Выберите карту, которой хотите добавить гнездо.", + "[Закрыто] Требуется карта с гнездом." + ] + }, + "Guardian:GuardianTalk": { + "NAME": "", + "DESCRIPTIONS": [ + "ЗАМЕНА - ВЕЗВРАЩАЮСЬ К СБОРКЕ.", + "АНОМАЛИЯ ОБНАРУЖЕНА.", + "МОДЕЛЬ СТРАЖА ДЕФЕКТНА.", + "ПЕРЕЗАПИСЬ АЛЬФА-ПРОТОКОЛА.", + "СТРАЖ: ВОЗВРАЩАЮСЬ НА ПОСТ.", + "ОБНАРУЖЕН СБОЙ ПРОТОКОЛА.", + "СТРАЖ: УНИЧТОЖИТЬ НЕМЕДЛЕННО.", + "НОВЫЙ ПРОТОКОЛ - УНИЧТОЖИТЬ.", + "ПРЕКРАТИТЬ И ВЕРНУТЬСЯ В ПРЕДДВЕРИЕ." + ], + "OPTIONS": [ + "" + ] + }, + "Guardian:CrystalForge": { + "NAME": "Мрачная кузница", + "DESCRIPTIONS": [ + "По секретным проходам, которые знают только конструкты, вы заходите в комнату, предназначенную для починки и обслуживания Автоматонов. Лежащие здесь инструменты могут быть полезны, хоть они и не задумывались для Стражей.", + "Вы разбиваете на зачарованной наковальне ненужный предмет снаряжения на кусочки. Всё для того, чтобы вернуть самоцветы, которые вы по глупости туда вставили.", + "С помощью волшебных клещей, вы осторожно вырываете самоцветы из гнёзд, освобождая место под более хорошие камни. Правда то, что было там до этого, пришло в негодное для использования состояние.", + "Вы бросаете ненужную часть снаряжения в кузню и она тут же включает способность преобразования материи. Через некоторое время, вещь, которую вы кинули, расщепилась и сжалась в прекрасный самоцвет.", + "Вы покидаете мрачную кузницу по тому же пути, по какому пришли. Приключение к рассвету на вершине Шпиля продолжается.", + "Выберите карту, которую хотите удалить.", + "Выберите карту, из которой хотите вырвать самоцветы.", + "Выберите карту, которую хотите преобразовать в самоцвет.", + "Выберите самоцвет.", + "Выберите карту для инкрустирования Самоцвета.", + "Воспользовавшись этим перерывом в восхождении, вы помещаете самоцвет в своё снаряжение, мгновенно ощущая прирост силы." + ], + "OPTIONS": [ + "[Разобрать] #rУбрать карту с гнездом. Получить #gСамоцветы из неё.", + "[Закрыто] Требуется карта с гнездом и инкрустированным Самоцветом.", + "[Вырвать] #rУничтожить все #gСамоцветы в карте с гнездом.", + "[Преобразовать] #rУбрать карту. Получить случайный #gСамоцвет.", + "[Закрыто] Уже использовано.", + "[Уйти]", + "[Усилить] Добавить #gСамоцвет в #gГнездо.", + "[Закрыто] Требуется Самоцвет и свободное Гнездо." + ] + }, + "Guardian:Purifier": { + "NAME": "", + "DESCRIPTIONS": [ + "Быстрым сокрушительным ударом вы разбиваете святилище на кусочки, чтобы найти сокровища внутри. Среди обломков лежат два нетронутых и пригодных для использования самоцвета, терпеливо ожидающих занять место в вашем оружии. NL NL Вы покидаете остатки святилища и продолжаете восхождение." + ], + "OPTIONS": [ + "[Вдарить] #gПолучить #g2 #gслучайных #gСамоцвета." + ] + }, + "Guardian:Transmorgrifier": { + "NAME": "", + "DESCRIPTIONS": [ + "" + ], + "OPTIONS": [ + "" + ] + }, + "Guardian:UpgradeShrine": { + "NAME": "", + "DESCRIPTIONS": [ + "" + ], + "OPTIONS": [ + "" + ] + }, + "Guardian:BackToBasics": { + "NAME": "", + "DESCRIPTIONS": [ + "Терпи удары, если ты гвоздь. Наноси удары, если ты молот." + ], + "OPTIONS": [ + "[Стойкость] #gДобавить #gПодготовка: #g2 ко всем картам #gУдар и #gОборона.", + "[Закрыто] Требуется Удар или Оборона." + ] + } } \ No newline at end of file diff --git a/src/main/resources/guardianResources/localization/rus/KeywordStrings.json b/src/main/resources/guardianResources/localization/rus/KeywordStrings.json index 9cb7bd905..0695837f1 100644 --- a/src/main/resources/guardianResources/localization/rus/KeywordStrings.json +++ b/src/main/resources/guardianResources/localization/rus/KeywordStrings.json @@ -1,101 +1,101 @@ -[ - { - "NAMES": [ - "socket", - "socketed", - "гнездо", - "sockets", - "гнезда", - "инкрустированный", - "инкрустированные", - "инкрустировать" - ], - "PROPER_NAME": "Гнездо", - "DESCRIPTION": "Вы можете поместить #yСамоцвет в это Гнездо, находясь в Лагере." - }, - { - "NAMES": [ - "stasis", - "стазис", - "стазисе", - "стазиса" - ], - "PROPER_NAME": "Стазис", - "DESCRIPTION": "Карта, находящаяся в Стазисе, остаётся в нем на #bN+1 ходов, где N - стоимость карты. NL При выходе из Стазиса, карта возвращается в руку со стоимостью #b0, пока не разыграна." - }, - { - "NAMES": [ - "gem", - "самоцвет", - "самоцветы", - "gems" - ], - "PROPER_NAME": "Самоцвет", - "DESCRIPTION": "Самоцветы могут быть помещены в #yГнезда карт, находясь в Лагере. Не могут быть #yУлучшены." - }, - { - "NAMES": [ - "defensive mode", - "defensive_mode", - "оборонительный режим", - "оборонительный_режим", - "оборонительном_режиме" - ], - "PROPER_NAME": "Оборонительный режим", - "DESCRIPTION": "#yСтойка. NL Находясь в Оборонительном режиме, получает #b3 #yШипов и #b10 #yЗащиты в начале своего хода. Защита не исчезнет на след. ход." - }, - { - "NAMES": [ - "accelerate", - "разгон", - "разгоняет" - ], - "PROPER_NAME": "Разгон", - "DESCRIPTION": "Уменьшает кол-во ходов до выхода из #yСтазиса для самой правой карты на #b1." - }, - { - "NAMES": [ - "package", - "пак", - "packages", - "паков" - ], - "PROPER_NAME": "Пак", - "DESCRIPTION": "#yСжигаемый #yНавык стоимостью #b0, который добавляет #b3 карты из набора выбранного Босса Шпиля." - }, - { - "NAMES": [ - "volatile", - "нестабильная" - ], - "PROPER_NAME": "Нестабильная", - "DESCRIPTION": "Эта карта #yСжигается при выходе из #yСтазиса." - }, - { - "NAMES": [ - "tick", - "тик" - ], - "PROPER_NAME": "Тик", - "DESCRIPTION": "Эффект срабатывает, когда кол-во ходов до выхода из #yСтазиса этой карты уменьшается." - }, - { - "NAMES": [ - "buffer", - "буффер", - "буффера" - ], - "PROPER_NAME": "Буффер", - "DESCRIPTION": "Предотвращает след. потерю ОЗ." - }, - { - "NAMES": [ - "brace", - "подготовка", - "подготовке", - "подготовки" - ], - "PROPER_NAME": "Подготовка: Х", - "DESCRIPTION": "Уменьшает кол-во ОЗ, которое Страж должен потерять, для #yСмены #yРежима на X." - } -] +[ + { + "NAMES": [ + "socket", + "socketed", + "гнездо", + "sockets", + "гнезда", + "инкрустированный", + "инкрустированные", + "инкрустировать" + ], + "PROPER_NAME": "Гнездо", + "DESCRIPTION": "Вы можете поместить #yСамоцвет в это Гнездо, находясь в Лагере." + }, + { + "NAMES": [ + "stasis", + "стазис", + "стазисе", + "стазиса" + ], + "PROPER_NAME": "Стазис", + "DESCRIPTION": "Карта, находящаяся в Стазисе, остаётся в нем на #bN+1 ходов, где N - стоимость карты. NL При выходе из Стазиса, карта возвращается в руку со стоимостью #b0, пока не разыграна." + }, + { + "NAMES": [ + "gem", + "самоцвет", + "самоцветы", + "gems" + ], + "PROPER_NAME": "Самоцвет", + "DESCRIPTION": "Самоцветы могут быть помещены в #yГнезда карт, находясь в Лагере. Не могут быть #yУлучшены." + }, + { + "NAMES": [ + "defensive mode", + "defensive_mode", + "оборонительный режим", + "оборонительный_режим", + "оборонительном_режиме" + ], + "PROPER_NAME": "Оборонительный режим", + "DESCRIPTION": "#yСтойка. NL Находясь в Оборонительном режиме, получает #b3 #yШипов и #b10 #yЗащиты в начале своего хода. Защита не исчезнет на след. ход." + }, + { + "NAMES": [ + "accelerate", + "разгон", + "разгоняет" + ], + "PROPER_NAME": "Разгон", + "DESCRIPTION": "Уменьшает кол-во ходов до выхода из #yСтазиса для самой правой карты на #b1." + }, + { + "NAMES": [ + "package", + "пак", + "packages", + "паков" + ], + "PROPER_NAME": "Пак", + "DESCRIPTION": "#yСжигаемый #yНавык стоимостью #b0, который добавляет #b3 карты из набора выбранного Босса Шпиля." + }, + { + "NAMES": [ + "volatile", + "нестабильная" + ], + "PROPER_NAME": "Нестабильная", + "DESCRIPTION": "Эта карта #yСжигается при выходе из #yСтазиса." + }, + { + "NAMES": [ + "tick", + "тик" + ], + "PROPER_NAME": "Тик", + "DESCRIPTION": "Эффект срабатывает, когда кол-во ходов до выхода из #yСтазиса этой карты уменьшается." + }, + { + "NAMES": [ + "buffer", + "буффер", + "буффера" + ], + "PROPER_NAME": "Буффер", + "DESCRIPTION": "Предотвращает след. потерю ОЗ." + }, + { + "NAMES": [ + "brace", + "подготовка", + "подготовке", + "подготовки" + ], + "PROPER_NAME": "Подготовка: Х", + "DESCRIPTION": "Уменьшает кол-во ОЗ, которое Страж должен потерять, для #yСмены #yРежима на X." + } +] diff --git a/src/main/resources/guardianResources/localization/rus/OrbStrings.json b/src/main/resources/guardianResources/localization/rus/OrbStrings.json index 161aa1f42..0eac849e4 100644 --- a/src/main/resources/guardianResources/localization/rus/OrbStrings.json +++ b/src/main/resources/guardianResources/localization/rus/OrbStrings.json @@ -1,25 +1,25 @@ -{ - "Guardian:EmptyStasisSlot": { - "NAME": "Слот для Стазиса", - "DESCRIPTION": [ - "Карты могут быть помещены в этот слот для #yСтазиса, при выходе из него они стоят #b0, пока не разыграны." - ] - }, - "Guardian:StasisOrb": { - "NAME": "Стазис: ", - "DESCRIPTION": [ - " вернётся в руку со стоимостью #b0, в начале вашего след. хода.", - " вернётся в руку со стоимостью #b0, через #b", - " хода(-ов).", - " #yСжигается в начале вашего след. хода.", - " #yСжигается через #b", - " хода(-ов)." - ] - } -} - - - - - - +{ + "Guardian:EmptyStasisSlot": { + "NAME": "Слот для Стазиса", + "DESCRIPTION": [ + "Карты могут быть помещены в этот слот для #yСтазиса, при выходе из него они стоят #b0, пока не разыграны." + ] + }, + "Guardian:StasisOrb": { + "NAME": "Стазис: ", + "DESCRIPTION": [ + " вернётся в руку со стоимостью #b0, в начале вашего след. хода.", + " вернётся в руку со стоимостью #b0, через #b", + " хода(-ов).", + " #yСжигается в начале вашего след. хода.", + " #yСжигается через #b", + " хода(-ов)." + ] + } +} + + + + + + diff --git a/src/main/resources/guardianResources/localization/rus/PotionStrings.json b/src/main/resources/guardianResources/localization/rus/PotionStrings.json index 2cf7097ad..fc192e563 100644 --- a/src/main/resources/guardianResources/localization/rus/PotionStrings.json +++ b/src/main/resources/guardianResources/localization/rus/PotionStrings.json @@ -1,31 +1,31 @@ -{ - "Guardian:AcceleratePotion": { - "NAME": "Темпоральное зелье", - "DESCRIPTIONS": [ - "Даёт #yРазгон всем картам, находящимся в Стазисе, #b", - " раза." - ] - }, - "Guardian:DefensiveModePotion": { - "NAME": "Полировочное масло", - "DESCRIPTIONS": [ - "Даёт #b", - "#yЗащиты. Перейти в #yОборонительный #yРежим" - ] - }, - "Guardian:BlockOnCardUsePotion": { - "NAME": "Настойка оружейника", - "DESCRIPTIONS": [ - "Даёт #b", - " #yЗащиты, когда вы разыгрываете карту в этом ходу." - ] - }, - "Guardian:StasisDiscoveryPotion": { - "NAME": "Квантовый эликсир", - "DESCRIPTIONS": [ - "Добавляет слоты для #yСтазиса, пока у вас их меньше, чем #b", - ". NL Повторяет #b", - " раз(а): выберите #b1 из #b3 карт для помещения в #yСтазис." - ] - } -} +{ + "Guardian:AcceleratePotion": { + "NAME": "Темпоральное зелье", + "DESCRIPTIONS": [ + "Даёт #yРазгон всем картам, находящимся в Стазисе, #b", + " раза." + ] + }, + "Guardian:DefensiveModePotion": { + "NAME": "Полировочное масло", + "DESCRIPTIONS": [ + "Даёт #b", + "#yЗащиты. Перейти в #yОборонительный #yРежим" + ] + }, + "Guardian:BlockOnCardUsePotion": { + "NAME": "Настойка оружейника", + "DESCRIPTIONS": [ + "Даёт #b", + " #yЗащиты, когда вы разыгрываете карту в этом ходу." + ] + }, + "Guardian:StasisDiscoveryPotion": { + "NAME": "Квантовый эликсир", + "DESCRIPTIONS": [ + "Добавляет слоты для #yСтазиса, пока у вас их меньше, чем #b", + ". NL Повторяет #b", + " раз(а): выберите #b1 из #b3 карт для помещения в #yСтазис." + ] + } +} diff --git a/src/main/resources/guardianResources/localization/rus/PowerStrings.json b/src/main/resources/guardianResources/localization/rus/PowerStrings.json index 3487fc8e5..53897963d 100644 --- a/src/main/resources/guardianResources/localization/rus/PowerStrings.json +++ b/src/main/resources/guardianResources/localization/rus/PowerStrings.json @@ -1,213 +1,213 @@ -{ - "Guardian:NextTurnGainTemporaryStrengthPower": { - "NAME": "Зарядка", - "DESCRIPTIONS": [ - "Вы получите #b", - " временной #yСилы в след. ходу." - ] - }, - "Guardian:StunnedPower": { - "NAME": "Оглушен", - "DESCRIPTIONS": [ - "Пропускает свой след. ход.", - "Пропускает #b", - " своих след. хода(-ов)." - ] - }, - "Guardian:FloatingOrbsPower": { - "NAME": "Парящие сферы", - "DESCRIPTIONS": [ - "Наносит #b", - " урона случайному врагу, когда вы разыгрываете карту стоимостью #b0." - ] - }, - "Guardian:OrbwalkPower": { - "NAME": "Круговорот", - "DESCRIPTIONS": [ - "Даёт #b", - " #yСилы в начале каждого хода." - ] - }, - "Guardian:ClonePower": { - "NAME": "Перенаправление", - "DESCRIPTIONS": [ - "Помещает след. карту, разыгранную в этом ходу, в #yСтазис.", - "Помещает след. #b", - " карты, разыгранные в этом ходу, в #yСтазис." - ] - }, - "Guardian:GemFinderPower": { - "NAME": "Искатель самоцветов", - "DESCRIPTIONS": [ - "Вы можете выбрать и добавить Обычный #yСамоцвет в колоду, в конце боя.", - "Вы можете выбрать и добавить #b", - " Обычных #yСамоцвета(-ов) в колоду, в конце боя." - ] - }, - "Guardian:FuturePlansPower": { - "NAME": "Планы на будущее", - "DESCRIPTIONS": [ - "Вы можете поместить #b", - " карту в #yСтазис, в начале вашего хода.", - " карт(ы) в #yСтазис, в начале вашего хода." - ] - }, - "Guardian:DefenseModePower": { - "NAME": "Оборонительный режим", - "DESCRIPTIONS": [ - "#yОборонительный #yрежим будет активен ещё #b", - " ход(-а,-ов). #yОборонительный #yрежим даёт #b", - " #yШипов, уменьшает наносимый урон на #b25% и даёт #b2 #yЗащиты, когда вы разыгрываете карту." - ] - }, - "Guardian:ConstructModePower": { - "NAME": "Строительная форма", - "DESCRIPTIONS": [ - "Даёт #b", - " #yСилы в начале вашего хода, если у вас есть Буфер." - ] - }, - "Guardian:MultiBoostPower": { - "NAME": "Мульти-буст", - "DESCRIPTIONS": [ - "#yАтаки, наносящие урон несколько раз - дополнительно наносят урон ещё 1 раз.", - "#yАтаки, наносящие урон несколько раз - дополнительно наносят урон ещё #b", - " раз(а)." - ] - }, - "Guardian:TargetedPower": { - "NAME": "Под прицелом", - "DESCRIPTIONS": [ - "Вы получаете #b", - " временной #yСилы, когда этот враг получает урон." - ] - }, - "Guardian:LoseThornsPower": { - "NAME": "Убрать шипы", - "DESCRIPTIONS": [ - "Отнимает #b", - " #yШипов в начале вашего след. хода." - ] - }, - "Guardian:BeamBuffPower": { - "NAME": "Полный заряд", - "DESCRIPTIONS": [ - "Карты, содержащие слово «Луч», наносят на #b", - " урона больше." - ] - }, - "Guardian:DefensiveModeBuffsPower": { - "NAME": "Оборонительный режим+", - "DESCRIPTIONS": [ - "В дополнение к обычным эффектам, #yОборонительный #yрежим также даёт: NL #b", - " #yШипов.", - " #yЛовкости.", - " #yЗащиты в конце каждого хода.", - "#yСжигает первый взятый #yСтатус или #yПроклятие в каждом ходу.", - "#yСжигает первые #b", - " взятых #yСтатуса(-ов) или #yПроклятия(-й) в каждом ходу.", - "Даёт #b", - " #yСилы за каждый ход в #yОборонительном #yрежиме, при выходе из него." - ] - }, - "Guardian:AutomayhemPower": { - "NAME": "Просеиватель времени", - "DESCRIPTIONS": [ - "Даёт #yРазгон в начале вашего хода.", - "Даёт #yРазгон #b", - " раз(а) в начале вашего хода." - ] - }, - "Guardian:ConstructPower": { - "NAME": "Древний конструкт", - "DESCRIPTIONS": [ - "Даёт #b", - " #yАртефакт(а)", - " в начале вашего хода, если у вас нет #yАртефакта." - ] - }, - "Guardian:ModeShiftPower": { - "NAME": "Смена режима", - "DESCRIPTIONS": [ - "При потере #b", - " ОЗ, вы получите #b10 #yЗащиты, перейдете в #yОборонительный #yрежим до вашего след. хода, и увеличите количество ОЗ до след. активации на 10 (не более 50)." - ] - }, - "Guardian:ExhaustStatusesPower": { - "NAME": "Репульсор", - "DESCRIPTIONS": [ - "Первый разыгранный #yСтатус или #yПроклятие в вашем ходу, #yСжигается и вы берёте карту.", - "Первые #b", - " разыгранных #yСтатуса(-ов) или #yПроклятия(-й) в вашем ходу, #yСжигаются и вы берёте карту." - ] - }, - "Guardian:RevengePower": { - "NAME": "Месть", - "DESCRIPTIONS": [ - "Даёт #b", - " временной #yСилы, пока вы в #yОборонительном #yрежиме." - ] - }, - "Guardian:StasisEnginePower": { - "NAME": "Стазисный движок", - "DESCRIPTIONS": [ - "Даёт #b", - " [E] и вы берёте #b", - " карту", - " карт(ы)", - ", когда вы разыгрываете 3ью карту стоимостью 0 в одном ходу." - ] - }, - "Guardian:EnergizedGuardianPower": { - "NAME": "Энергичность", - "DESCRIPTIONS": [ - "Даёт #b", - " [E] в след. ходу.", - " [E] в след. ходу.", - " -." - ] - }, - "Guardian:BlockOnCardUsePower": { - "NAME": "Настойка оружейника", - "DESCRIPTIONS": [ - "Даёт #b", - " #yЗащиты, когда вы разыгрываете карты в этом ходу." - ] - }, - "Guardian:EvasiveProtocolPower": { - "NAME": "Неуловимость", - "DESCRIPTIONS": [ - "Даёт #b", - " временной #yЛовкости, пока вы в #yОборонительном #yрежиме." - ] - }, - "Guardian:SpikerProtocolPower": { - "NAME": "Самозащита", - "DESCRIPTIONS": [ - "Даёт #b", - " временных #yШипов, пока вы в #yОборонительном #yрежиме." - ] - }, - "Guardian:ArmoredProtocolPower": { - "NAME": "Непробиваемость", - "DESCRIPTIONS": [ - "Даёт #b", - " #yЗащиты в конце вашего хода, пока в #yОборонительном #yрежиме." - ] - }, - "Guardian:DontLeaveDefensiveModePower": { - "NAME": "Оборонительный режим", - "DESCRIPTIONS": [ - "Вы выйдете из #yОборонительного #yрежима в конце этого хода.", - "#yОборонительный #yрежим будет активен ещё #b", - " хода(-ов)." - ] - }, - "Guardian:BracePerTurnPower": { - "NAME": "Подготовка", - "DESCRIPTIONS": [ - "#yПодготовка: #b", - " в начале вашего хода." - ] - } -} +{ + "Guardian:NextTurnGainTemporaryStrengthPower": { + "NAME": "Зарядка", + "DESCRIPTIONS": [ + "Вы получите #b", + " временной #yСилы в след. ходу." + ] + }, + "Guardian:StunnedPower": { + "NAME": "Оглушен", + "DESCRIPTIONS": [ + "Пропускает свой след. ход.", + "Пропускает #b", + " своих след. хода(-ов)." + ] + }, + "Guardian:FloatingOrbsPower": { + "NAME": "Парящие сферы", + "DESCRIPTIONS": [ + "Наносит #b", + " урона случайному врагу, когда вы разыгрываете карту стоимостью #b0." + ] + }, + "Guardian:OrbwalkPower": { + "NAME": "Круговорот", + "DESCRIPTIONS": [ + "Даёт #b", + " #yСилы в начале каждого хода." + ] + }, + "Guardian:ClonePower": { + "NAME": "Перенаправление", + "DESCRIPTIONS": [ + "Помещает след. карту, разыгранную в этом ходу, в #yСтазис.", + "Помещает след. #b", + " карты, разыгранные в этом ходу, в #yСтазис." + ] + }, + "Guardian:GemFinderPower": { + "NAME": "Искатель самоцветов", + "DESCRIPTIONS": [ + "Вы можете выбрать и добавить Обычный #yСамоцвет в колоду, в конце боя.", + "Вы можете выбрать и добавить #b", + " Обычных #yСамоцвета(-ов) в колоду, в конце боя." + ] + }, + "Guardian:FuturePlansPower": { + "NAME": "Планы на будущее", + "DESCRIPTIONS": [ + "Вы можете поместить #b", + " карту в #yСтазис, в начале вашего хода.", + " карт(ы) в #yСтазис, в начале вашего хода." + ] + }, + "Guardian:DefenseModePower": { + "NAME": "Оборонительный режим", + "DESCRIPTIONS": [ + "#yОборонительный #yрежим будет активен ещё #b", + " ход(-а,-ов). #yОборонительный #yрежим даёт #b", + " #yШипов, уменьшает наносимый урон на #b25% и даёт #b2 #yЗащиты, когда вы разыгрываете карту." + ] + }, + "Guardian:ConstructModePower": { + "NAME": "Строительная форма", + "DESCRIPTIONS": [ + "Даёт #b", + " #yСилы в начале вашего хода, если у вас есть Буфер." + ] + }, + "Guardian:MultiBoostPower": { + "NAME": "Мульти-буст", + "DESCRIPTIONS": [ + "#yАтаки, наносящие урон несколько раз - дополнительно наносят урон ещё 1 раз.", + "#yАтаки, наносящие урон несколько раз - дополнительно наносят урон ещё #b", + " раз(а)." + ] + }, + "Guardian:TargetedPower": { + "NAME": "Под прицелом", + "DESCRIPTIONS": [ + "Вы получаете #b", + " временной #yСилы, когда этот враг получает урон." + ] + }, + "Guardian:LoseThornsPower": { + "NAME": "Убрать шипы", + "DESCRIPTIONS": [ + "Отнимает #b", + " #yШипов в начале вашего след. хода." + ] + }, + "Guardian:BeamBuffPower": { + "NAME": "Полный заряд", + "DESCRIPTIONS": [ + "Карты, содержащие слово «Луч», наносят на #b", + " урона больше." + ] + }, + "Guardian:DefensiveModeBuffsPower": { + "NAME": "Оборонительный режим+", + "DESCRIPTIONS": [ + "В дополнение к обычным эффектам, #yОборонительный #yрежим также даёт: NL #b", + " #yШипов.", + " #yЛовкости.", + " #yЗащиты в конце каждого хода.", + "#yСжигает первый взятый #yСтатус или #yПроклятие в каждом ходу.", + "#yСжигает первые #b", + " взятых #yСтатуса(-ов) или #yПроклятия(-й) в каждом ходу.", + "Даёт #b", + " #yСилы за каждый ход в #yОборонительном #yрежиме, при выходе из него." + ] + }, + "Guardian:AutomayhemPower": { + "NAME": "Просеиватель времени", + "DESCRIPTIONS": [ + "Даёт #yРазгон в начале вашего хода.", + "Даёт #yРазгон #b", + " раз(а) в начале вашего хода." + ] + }, + "Guardian:ConstructPower": { + "NAME": "Древний конструкт", + "DESCRIPTIONS": [ + "Даёт #b", + " #yАртефакт(а)", + " в начале вашего хода, если у вас нет #yАртефакта." + ] + }, + "Guardian:ModeShiftPower": { + "NAME": "Смена режима", + "DESCRIPTIONS": [ + "При потере #b", + " ОЗ, вы получите #b10 #yЗащиты, перейдете в #yОборонительный #yрежим до вашего след. хода, и увеличите количество ОЗ до след. активации на 10 (не более 50)." + ] + }, + "Guardian:ExhaustStatusesPower": { + "NAME": "Репульсор", + "DESCRIPTIONS": [ + "Первый разыгранный #yСтатус или #yПроклятие в вашем ходу, #yСжигается и вы берёте карту.", + "Первые #b", + " разыгранных #yСтатуса(-ов) или #yПроклятия(-й) в вашем ходу, #yСжигаются и вы берёте карту." + ] + }, + "Guardian:RevengePower": { + "NAME": "Месть", + "DESCRIPTIONS": [ + "Даёт #b", + " временной #yСилы, пока вы в #yОборонительном #yрежиме." + ] + }, + "Guardian:StasisEnginePower": { + "NAME": "Стазисный движок", + "DESCRIPTIONS": [ + "Даёт #b", + " [E] и вы берёте #b", + " карту", + " карт(ы)", + ", когда вы разыгрываете 3ью карту стоимостью 0 в одном ходу." + ] + }, + "Guardian:EnergizedGuardianPower": { + "NAME": "Энергичность", + "DESCRIPTIONS": [ + "Даёт #b", + " [E] в след. ходу.", + " [E] в след. ходу.", + " -." + ] + }, + "Guardian:BlockOnCardUsePower": { + "NAME": "Настойка оружейника", + "DESCRIPTIONS": [ + "Даёт #b", + " #yЗащиты, когда вы разыгрываете карты в этом ходу." + ] + }, + "Guardian:EvasiveProtocolPower": { + "NAME": "Неуловимость", + "DESCRIPTIONS": [ + "Даёт #b", + " временной #yЛовкости, пока вы в #yОборонительном #yрежиме." + ] + }, + "Guardian:SpikerProtocolPower": { + "NAME": "Самозащита", + "DESCRIPTIONS": [ + "Даёт #b", + " временных #yШипов, пока вы в #yОборонительном #yрежиме." + ] + }, + "Guardian:ArmoredProtocolPower": { + "NAME": "Непробиваемость", + "DESCRIPTIONS": [ + "Даёт #b", + " #yЗащиты в конце вашего хода, пока в #yОборонительном #yрежиме." + ] + }, + "Guardian:DontLeaveDefensiveModePower": { + "NAME": "Оборонительный режим", + "DESCRIPTIONS": [ + "Вы выйдете из #yОборонительного #yрежима в конце этого хода.", + "#yОборонительный #yрежим будет активен ещё #b", + " хода(-ов)." + ] + }, + "Guardian:BracePerTurnPower": { + "NAME": "Подготовка", + "DESCRIPTIONS": [ + "#yПодготовка: #b", + " в начале вашего хода." + ] + } +} diff --git a/src/main/resources/guardianResources/localization/rus/RelicStrings.json b/src/main/resources/guardianResources/localization/rus/RelicStrings.json index 4ce77fbbc..8938392fc 100644 --- a/src/main/resources/guardianResources/localization/rus/RelicStrings.json +++ b/src/main/resources/guardianResources/localization/rus/RelicStrings.json @@ -1,126 +1,126 @@ -{ - "Guardian:ModeShifter": { - "NAME": "Бронзовая броня", - "FLAVOR": "Защита там, где она нужна больше всего.", - "DESCRIPTIONS": [ - "Добавляет в руку #yУскориться в начале боя. NL Страж начинает вылазку со случ. обычным #yСамоцветом." - ] - }, - "Guardian:ModeShifterPlus": { - "NAME": "Броня Стража", - "FLAVOR": "Менять каждые 3.000 этажей.", - "DESCRIPTIONS": [ - "Заменяет #g«Бронзовую #gброню». NL Вы начинаете каждый бой в #yОборонительном #yрежиме и остаётесь в нём на #b3 хода." - ] - }, - "Guardian:DefensiveModeMoreBlock": { - "NAME": "Латный доспех Баалора", - "FLAVOR": "Защиты много не бывает.", - "DESCRIPTIONS": [ - "При #yПодготовке, дополнительно даёт 1 #yПодготовки." - ] - }, - "Guardian:guardianmod:GemCopier": { - "NAME": "Сосуд с самоцветами", - "FLAVOR": "Подойдут только самые безупречные.", - "DESCRIPTIONS": [ - "Когда вы разыгрываете #yСамоцвет, вы также разыгрываете его копию." - ] - }, - "Guardian:PocketSentry": { - "NAME": "Карманная защита Арумбы", - "FLAVOR": "Режим Часового. Цель найдена. Ничего личного.", - "DESCRIPTIONS": [ - "Накладывает #b1 #yСлабости на ВСЕХ врагов в начале каждого #b3 хода." - ] - }, - "Guardian:SackOfGems": { - "NAME": "Мешочек с самоцветами", - "FLAVOR": "Ууу... светится!", - "DESCRIPTIONS": [ - "При получении, вы получите #b5 случ. #yСамоцветов в вашу колоду." - ] - }, - "Guardian:StasisCodex": { - "NAME": "Кодекс штурмана", - "FLAVOR": "Дизайн и схемы самых ранних прототипов Шпиля, сделанные мастером-пилотом Дэвидом.", - "DESCRIPTIONS": [ - "Если в конце вашего хода у вас нет карт, находящихся в #yСтазисе, выберите #b1 из #b3 карт для помещения в #yСтазис." - ] - }, - "Guardian:StasisSlotIncreaseRelic": { - "NAME": "Крошечная полицейская будка", - "FLAVOR": "Внутри она больше, чем снаружи...", - "DESCRIPTIONS": [ - "Вы начинаете каждый бой с #b2 доп. слотами для #yСтазиса." - ] - }, - "Guardian:StasisSlotReductionRelic": { - "NAME": "Вандерботы", - "FLAVOR": "Эти дроны находят самые замечательные ресурсы, но требуют вычислительной мощности для поддержания.", - "DESCRIPTIONS": [ - "При получении, вы теряете #b1 слот для #yСтазиса. NL Даёт [E] в начале вашего хода." - ] - }, - "Guardian:StasisUpgradeRelic": { - "NAME": "Криокамера", - "FLAVOR": "Странные вещи всегда прибретают ясный смысл в самом конце.", - "DESCRIPTIONS": [ - "Добавляет #b1 слот для #yСтазиса. #yУлучшает карту при помещении её в #yСтазис." - ] - }, - "Guardian:BottledStasis": { - "NAME": "Закупоренная чёрная дыра", - "FLAVOR": "Где-то, что-то невероятное лежит и ждёт, пока не найдут.", - "DESCRIPTIONS": [ - "При получении, выберите карту. Она помещается в #yСтазис в начале каждого боя.", - "Выберите карту ", - "для помещения ее в #yСтазис ", - " в начале каждого боя.", - "Выбранная карта #rубрана из колоды и будет помещаться в #yСтазис в начале каждого боя." - ] - }, - "Guardian:StasisEgg": { - "NAME": "Квантовая камера", - "FLAVOR": "Вы получаете цыплёнка, высиживая яйцо, а не разбивая его.", - "DESCRIPTIONS": [ - "При получении, выберите карту. Она убирается из вашей колоды в начале каждого боя, и возвращается в начале вашего #b4 хода, вместе с #b2 копиями, в руку.", - "Выберите карту, ", - "которая будет удалена из колоды ", - " в начале каждого боя. Возвращается в начале вашего #b4 хода, вместе с #b2 копиями, в руку." - ] - }, - "Guardian:TickHelperRelic": { - "NAME": "Охлаждающая жидкость", - "FLAVOR": "Опасно. Не употреблять.", - "DESCRIPTIONS": [ - "Вы начинаете каждый бой с #b2 доп. слотами для #yСтазиса. NL Увеличивает кол-во ходов до выхода карты из #yСтазиса на #b2." - ] - }, - "Guardian:PickAxe": { - "NAME": "Кирка Рапсодии", - "FLAVOR": "С таким количеством самоцветов, которые усеяли Шпиль, трудно представить кого-то настолько неудачливого, кто нуждался бы в этой кирке.", - "DESCRIPTIONS": [ - "Теперь вы можете #gДобывать по #b2 #yСамоцвета, находясь в Лагере (не более #b3 раз)." - ] - }, - "Guardian:GemstoneGun": { - "NAME": "Самоцветная пушка", - "FLAVOR": "Бам! Бам! Бам! Эй, я подобрал три!", - "DESCRIPTIONS": [ - "При получении, выберите #b3 #yСамоцвета. Добавляет карту, которая #yОставлется, #yСжигается и инкрустирована каждым из выбранных #yСамоцветов, в начале каждого боя.", - "Выберите Самоцветы для зарядки Самоцветной пушки." - ] - }, - "Guardian:BottledAnomaly": { - "NAME": "Закупоренная аномалия", - "FLAVOR": "Крутится, крутится и наконец, ломается.", - "DESCRIPTIONS": [ - "При получении, выберите карту. Убирает её из стопки добора в начале каждого боя. В начале вашего #b3 хода, она возвращается в руку со стоимостью #b0.", - "Выберите карту, ", - "которая будет удалена из стопки добора ", - " в начале каждого боя. В начале вашего #b3 хода, она возвращается в руку со стоимостью #b0.", - "Выбранная карта #rубрана из колоды и будет возвращаться в начале #b3 хода со стоимостью #b0." - ] - } -} +{ + "Guardian:ModeShifter": { + "NAME": "Бронзовая броня", + "FLAVOR": "Защита там, где она нужна больше всего.", + "DESCRIPTIONS": [ + "Добавляет в руку #yУскориться в начале боя. NL Страж начинает вылазку со случ. обычным #yСамоцветом." + ] + }, + "Guardian:ModeShifterPlus": { + "NAME": "Броня Стража", + "FLAVOR": "Менять каждые 3.000 этажей.", + "DESCRIPTIONS": [ + "Заменяет #g«Бронзовую #gброню». NL Вы начинаете каждый бой в #yОборонительном #yрежиме и остаётесь в нём на #b3 хода." + ] + }, + "Guardian:DefensiveModeMoreBlock": { + "NAME": "Латный доспех Баалора", + "FLAVOR": "Защиты много не бывает.", + "DESCRIPTIONS": [ + "При #yПодготовке, дополнительно даёт 1 #yПодготовки." + ] + }, + "Guardian:guardianmod:GemCopier": { + "NAME": "Сосуд с самоцветами", + "FLAVOR": "Подойдут только самые безупречные.", + "DESCRIPTIONS": [ + "Когда вы разыгрываете #yСамоцвет, вы также разыгрываете его копию." + ] + }, + "Guardian:PocketSentry": { + "NAME": "Карманная защита Арумбы", + "FLAVOR": "Режим Часового. Цель найдена. Ничего личного.", + "DESCRIPTIONS": [ + "Накладывает #b1 #yСлабости на ВСЕХ врагов в начале каждого #b3 хода." + ] + }, + "Guardian:SackOfGems": { + "NAME": "Мешочек с самоцветами", + "FLAVOR": "Ууу... светится!", + "DESCRIPTIONS": [ + "При получении, вы получите #b5 случ. #yСамоцветов в вашу колоду." + ] + }, + "Guardian:StasisCodex": { + "NAME": "Кодекс штурмана", + "FLAVOR": "Дизайн и схемы самых ранних прототипов Шпиля, сделанные мастером-пилотом Дэвидом.", + "DESCRIPTIONS": [ + "Если в конце вашего хода у вас нет карт, находящихся в #yСтазисе, выберите #b1 из #b3 карт для помещения в #yСтазис." + ] + }, + "Guardian:StasisSlotIncreaseRelic": { + "NAME": "Крошечная полицейская будка", + "FLAVOR": "Внутри она больше, чем снаружи...", + "DESCRIPTIONS": [ + "Вы начинаете каждый бой с #b2 доп. слотами для #yСтазиса." + ] + }, + "Guardian:StasisSlotReductionRelic": { + "NAME": "Вандерботы", + "FLAVOR": "Эти дроны находят самые замечательные ресурсы, но требуют вычислительной мощности для поддержания.", + "DESCRIPTIONS": [ + "При получении, вы теряете #b1 слот для #yСтазиса. NL Даёт [E] в начале вашего хода." + ] + }, + "Guardian:StasisUpgradeRelic": { + "NAME": "Криокамера", + "FLAVOR": "Странные вещи всегда прибретают ясный смысл в самом конце.", + "DESCRIPTIONS": [ + "Добавляет #b1 слот для #yСтазиса. #yУлучшает карту при помещении её в #yСтазис." + ] + }, + "Guardian:BottledStasis": { + "NAME": "Закупоренная чёрная дыра", + "FLAVOR": "Где-то, что-то невероятное лежит и ждёт, пока не найдут.", + "DESCRIPTIONS": [ + "При получении, выберите карту. Она помещается в #yСтазис в начале каждого боя.", + "Выберите карту ", + "для помещения ее в #yСтазис ", + " в начале каждого боя.", + "Выбранная карта #rубрана из колоды и будет помещаться в #yСтазис в начале каждого боя." + ] + }, + "Guardian:StasisEgg": { + "NAME": "Квантовая камера", + "FLAVOR": "Вы получаете цыплёнка, высиживая яйцо, а не разбивая его.", + "DESCRIPTIONS": [ + "При получении, выберите карту. Она убирается из вашей колоды в начале каждого боя, и возвращается в начале вашего #b4 хода, вместе с #b2 копиями, в руку.", + "Выберите карту, ", + "которая будет удалена из колоды ", + " в начале каждого боя. Возвращается в начале вашего #b4 хода, вместе с #b2 копиями, в руку." + ] + }, + "Guardian:TickHelperRelic": { + "NAME": "Охлаждающая жидкость", + "FLAVOR": "Опасно. Не употреблять.", + "DESCRIPTIONS": [ + "Вы начинаете каждый бой с #b2 доп. слотами для #yСтазиса. NL Увеличивает кол-во ходов до выхода карты из #yСтазиса на #b2." + ] + }, + "Guardian:PickAxe": { + "NAME": "Кирка Рапсодии", + "FLAVOR": "С таким количеством самоцветов, которые усеяли Шпиль, трудно представить кого-то настолько неудачливого, кто нуждался бы в этой кирке.", + "DESCRIPTIONS": [ + "Теперь вы можете #gДобывать по #b2 #yСамоцвета, находясь в Лагере (не более #b3 раз)." + ] + }, + "Guardian:GemstoneGun": { + "NAME": "Самоцветная пушка", + "FLAVOR": "Бам! Бам! Бам! Эй, я подобрал три!", + "DESCRIPTIONS": [ + "При получении, выберите #b3 #yСамоцвета. Добавляет карту, которая #yОставлется, #yСжигается и инкрустирована каждым из выбранных #yСамоцветов, в начале каждого боя.", + "Выберите Самоцветы для зарядки Самоцветной пушки." + ] + }, + "Guardian:BottledAnomaly": { + "NAME": "Закупоренная аномалия", + "FLAVOR": "Крутится, крутится и наконец, ломается.", + "DESCRIPTIONS": [ + "При получении, выберите карту. Убирает её из стопки добора в начале каждого боя. В начале вашего #b3 хода, она возвращается в руку со стоимостью #b0.", + "Выберите карту, ", + "которая будет удалена из стопки добора ", + " в начале каждого боя. В начале вашего #b3 хода, она возвращается в руку со стоимостью #b0.", + "Выбранная карта #rубрана из колоды и будет возвращаться в начале #b3 хода со стоимостью #b0." + ] + } +} diff --git a/src/main/resources/guardianResources/localization/rus/UIStrings.json b/src/main/resources/guardianResources/localization/rus/UIStrings.json index c7bee7c1f..218c1d1ef 100644 --- a/src/main/resources/guardianResources/localization/rus/UIStrings.json +++ b/src/main/resources/guardianResources/localization/rus/UIStrings.json @@ -1,41 +1,41 @@ -{ - "Guardian:EnhanceBonfireOptions": { - "TEXT": [ - "Инкрустировать", - "(Не тратит действие) Инкрустируйте Самоцвет в свободное Гнездо.", - "Требует Самоцвет и свободное Гнездо.", - "Выберите Самоцвет.", - "Выберите карту для инкрустации Самоцвета." - ] - }, - "Guardian:UIOptions": { - "TEXT": [ - "Выберите карту для помещения в Стазис.", - "Взять Самоцвет.", - "Добавить Обычный Самоцвет в колоду", - "поместить в Стазис.", - "~ОШИБКА:~ Нельзя #rАтаковать в режиме Конструкта.", - "~ОШИБКА:~ #rСтазис в процессе.", - "Добавить Самоцвет в вашу колоду", - " (Выбранные карты будут помещены в Стазис в обратном порядке)" - ] - }, - "Guardian:FindGemsOption": { - "TEXT": [ - "Добывать", - "Получите 2 случайных Самоцвета.", - "Кирка сломана." - ] - }, - "Guardian:BraceMod": { - "TEXT": [ - " NL guardianmod:Подготовка 2." - ] - }, - "Guardian:gemDescriptor": { - "TEXT": [ - "Самоцвет", - "guardianmod:Самоцвет. NL " - ] - } -} +{ + "Guardian:EnhanceBonfireOptions": { + "TEXT": [ + "Инкрустировать", + "(Не тратит действие) Инкрустируйте Самоцвет в свободное Гнездо.", + "Требует Самоцвет и свободное Гнездо.", + "Выберите Самоцвет.", + "Выберите карту для инкрустации Самоцвета." + ] + }, + "Guardian:UIOptions": { + "TEXT": [ + "Выберите карту для помещения в Стазис.", + "Взять Самоцвет.", + "Добавить Обычный Самоцвет в колоду", + "поместить в Стазис.", + "~ОШИБКА:~ Нельзя #rАтаковать в режиме Конструкта.", + "~ОШИБКА:~ #rСтазис в процессе.", + "Добавить Самоцвет в вашу колоду", + " (Выбранные карты будут помещены в Стазис в обратном порядке)" + ] + }, + "Guardian:FindGemsOption": { + "TEXT": [ + "Добывать", + "Получите 2 случайных Самоцвета.", + "Кирка сломана." + ] + }, + "Guardian:BraceMod": { + "TEXT": [ + " NL guardianmod:Подготовка 2." + ] + }, + "Guardian:gemDescriptor": { + "TEXT": [ + "Самоцвет", + "guardianmod:Самоцвет. NL " + ] + } +} diff --git a/src/main/resources/guardianResources/localization/spa/CardStrings.json b/src/main/resources/guardianResources/localization/spa/CardStrings.json new file mode 100644 index 000000000..98f3f31a6 --- /dev/null +++ b/src/main/resources/guardianResources/localization/spa/CardStrings.json @@ -0,0 +1,466 @@ +{ + "Guardian:Strike_Guardian": { + "NAME": "Golpe", + "DESCRIPTION": "Haz !D! de daño." + }, + "Guardian:Defend_Guardian": { + "NAME": "Defensa", + "DESCRIPTION": "Gana !B! de Bloqueo." + }, + "Guardian:Gem_Red": { + "NAME": "Rubí", + "DESCRIPTION": "guardianmod:Gema. NL Gana 2 de Fuerza temporal.", + "UPGRADE_DESCRIPTION": "Gana 2 de Fuerza temporal." + }, + "Guardian:Gem_Green": { + "NAME": "Esmeralda", + "DESCRIPTION": "guardianmod:Gema. NL Gana 2 de Destreza temporal.", + "UPGRADE_DESCRIPTION": "Gana 2 de Destreza temporal." + }, + "Guardian:Gem_Lightblue": { + "NAME": "Turmalina", + "DESCRIPTION": "guardianmod:Gema. NL Gana 4 de Espinas temporales.", + "UPGRADE_DESCRIPTION": "Gana 4 de Espinas temporales." + }, + "Guardian:Gem_White": { + "NAME": "Ópalo", + "DESCRIPTION": "guardianmod:Gema. NL Roba una carta.", + "UPGRADE_DESCRIPTION": "Roba una carta." + }, + "Guardian:Gem_Orange": { + "NAME": "Citrino", + "DESCRIPTION": "guardianmod:Gema. NL Gana [E].", + "UPGRADE_DESCRIPTION": "Gana [E]." + }, + "Guardian:Gem_Cyan": { + "NAME": "Aguamarina", + "DESCRIPTION": "guardianmod:Gema. NL Gana un *Escudo *Cristalino.", + "UPGRADE_DESCRIPTION": "Gana un *Escudo *Cristalino." + }, + "Guardian:ChargeUp": { + "NAME": "Cargar Núcleo", + "DESCRIPTION": "Gana !B! de Bloqueo. NL En el siguiente turno, gana !M! de Fuerza temporal." + }, + "Guardian:DonusPower": { + "NAME": "Sobrecarga", + "DESCRIPTION": "Roba !M! cartas. NL Reduce cada uno de tus desventajas en 1.", + "UPGRADE_DESCRIPTION": "Roba !M! cartas. NL Reduce cada uno de tus desventajas en 1." + }, + "Guardian:DecasProtection": { + "NAME": "Poder Ancestral", + "DESCRIPTION": "Gana !M! de Fuerza y Destreza temporal." + }, + "Guardian:FierceBash": { + "NAME": "Golpe Férreo", + "DESCRIPTION": "Haz !D! de daño. NL Coloca esta carta en guardianmod:Estasis. NL guardianmod:Tic - Aumenta el daño de esta carta en !M!." + }, + "Guardian:PolyBeam": { + "NAME": "Rayo Poli", + "DESCRIPTION": "Haz !D! de daño a un enemigo aleatorio !M! veces." + }, + "Guardian:TwinSlam": { + "NAME": "Golpe Gemelo", + "DESCRIPTION": "Haz !D! de daño. NL Gana un *Segundo *Impacto.", + "UPGRADE_DESCRIPTION": "Haz !D! de daño. NL Gana un *Segundo *Impacto+." + }, + "Guardian:GuardianWhirl": { + "NAME": "Torbellino Guardián", + "DESCRIPTION": "Haz !D! de daño a TODOS los enemigos 2 veces. NL Si tienes 16 o más de Bloqueo, haz daño !M! veces adicionales.", + "EXTENDED_DESCRIPTION": [ + "Se requiere más Bloqueo." + ] + }, + "Guardian:VentSteam": { + "NAME": "Liberar Vapor", + "DESCRIPTION": "Aplica !M! de Vulnerable a TODOS los enemigos.", + "UPGRADE_DESCRIPTION": "Aplica !M! de Vulnerable a TODOS los enemigos." + }, + "Guardian:CurlUp": { + "NAME": "Replegarse", + "DESCRIPTION": "Coloca una carta aleatoria de tu mano en guardianmod:Estasis. NL guardianmod:Ensamblar !M!.", + "UPGRADE_DESCRIPTION": "Coloca una carta de tu mano en guardianmod:Estasis. NL guardianmod:Ensamblar !M!." + }, + "Guardian:TimeBomb": { + "NAME": "Bomba Temporal", + "DESCRIPTION": "Haz !D! de daño a TODOS los enemigos. NL guardianmod:Acelera TODAS las cartas en *Estasis. NL Agota." + }, + "Guardian:HyperBeam_Guardian": { + "NAME": "Rayo Giga", + "DESCRIPTION": "Haz !D! de daño a TODOS los enemigos. NL La Fuerza afecta esta carta !M! veces. NL Pierdes tu siguiente turno." + }, +"Guardian:BronzeArmor": { + "NAME": "Placa Reforzada", + "DESCRIPTION": "Reduce cada uno de tus desventajas en !M!. NL guardianmod:Ensamblar 8. NL Agota.", + "UPGRADE_DESCRIPTION": "Reduce cada uno de tus desventajas en !M!. NL guardianmod:Ensamblar 8." +}, +"Guardian:FloatingOrbs": { + "NAME": "Orbes Flotantes", + "DESCRIPTION": "Cada vez que juegas una carta de coste 0, haz !M! de daño a un enemigo aleatorio." +}, +"Guardian:OrbSlam": { + "NAME": "Golpe Orbital", + "DESCRIPTION": "Haz !D! de daño !GuardianMulti! veces. NL Agota." +}, +"Guardian:Incinerate": { + "NAME": "Incinerar", + "DESCRIPTION": "Haz !D! de daño. NL guardianmod:Acelerar.", + "UPGRADE_DESCRIPTION": "Haz !D! de daño. NL guardianmod:Acelerar dos veces." +}, +"Guardian:Orbwalk": { + "NAME": "Marcha Orbital", + "DESCRIPTION": "Gana !M! de Fuerza. NL guardianmod:Tic - Gana 1 de Fuerza. NL guardianmod:Volátil.", + "UPGRADE_DESCRIPTION": "Gana !M! de Fuerza. NL guardianmod:Tic - Gana 1 de Fuerza." +}, +"Guardian:WalkerClaw": { + "NAME": "Garra Andante", + "DESCRIPTION": "Haz !D! de daño !M! veces.", + "UPGRADE_DESCRIPTION": "Haz !D! de daño !M! veces." +}, +"Guardian:SphericShield": { + "NAME": "Escudo Esférico", + "DESCRIPTION": "Gana !B! de Bloqueo. NL Entra en *Modo *Defensivo. NL Agota." +}, +"Guardian:Harden": { + "NAME": "Endurecer", + "DESCRIPTION": "Requiere al menos 20 de Bloqueo. NL guardianmod:Ensamblar !GuardianSecondM! y gana !M! de Espinas.", + "EXTENDED_DESCRIPTION": [ + "Se requiere más Bloqueo." + ] +}, +"Guardian:SentryBeam": { + "NAME": "Rayo Centinela", + "DESCRIPTION": "Haz !D! de daño. NL Coloca una *Ola *Centinela en guardianmod:Estasis. NL Agota.", + "UPGRADE_DESCRIPTION": "Haz !D! de daño. NL Coloca una *Ola *Centinela+ en guardianmod:Estasis. NL Agota." +}, +"Guardian:SentryWave": { + "NAME": "Ola Centinela", + "DESCRIPTION": "Aplica !M! de Débil. NL Coloca una *Explosión *Centinela en guardianmod:Estasis. NL Agota.", + "UPGRADE_DESCRIPTION": "Aplica !M! de Débil. NL guardianmod:Ensamblar 2. NL Coloca una *Explosión *Centinela+ en guardianmod:Estasis. NL Agota." +}, +"Guardian:CompilePackage": { + "NAME": "Compilar Paquete", + "DESCRIPTION": "Elige un guardianmod:Paquete para colocar en guardianmod:Estasis. NL Agota.", + "UPGRADE_DESCRIPTION": "Elige un guardianmod:Paquete Mejorado para colocar en guardianmod:Estasis. NL Agota.", + "EXTENDED_DESCRIPTION": [ + "Elige un Paquete." + ] +}, +"Guardian:PackageShapes": { + "NAME": "Paquete: Formas", + "DESCRIPTION": "Obtén una *Bomba *Temporal, *Protocolo *Espinas y *Repulsor. NL Agota.", + "UPGRADE_DESCRIPTION": "Obtén una *Bomba *Temporal+, *Protocolo *Espinas+ y *Repulsor+. NL Agota." +}, +"Guardian:PackageDonuDeca": { + "NAME": "Paquete: Ancestros", + "DESCRIPTION": "Obtén una *Sobrecarga, *Poder *Ancestral y *Construcción *Ancestral. NL Agota.", + "UPGRADE_DESCRIPTION": "Obtén una *Sobrecarga+, *Poder *Ancestral+ y *Construcción *Ancestral+. NL Agota." +}, +"Guardian:PackageSphere": { + "NAME": "Paquete: Esférico", + "DESCRIPTION": "Obtén un *Escudo *Esférico, *Orbes *Flotantes y *Endurecer. NL Agota.", + "UPGRADE_DESCRIPTION": "Obtén un *Escudo *Esférico+, *Orbes *Flotantes+ y *Endurecer+. NL Agota." +}, +"Guardian:PackageSentry": { + "NAME": "Paquete: Centinela", + "DESCRIPTION": "Obtén una *Explosión *Centinela y dos *Olas *Centinelas. NL Agota.", + "UPGRADE_DESCRIPTION": "Obtén una *Explosión *Centinela+ y dos *Olas *Centinelas+. NL Agota." +}, +"Guardian:PackageWalker": { + "NAME": "Paquete: Caminante", + "DESCRIPTION": "Obtén una *Marcha *Orbital, *Garra *Andante y *Incinerar. NL Agota.", + "UPGRADE_DESCRIPTION": "Obtén una *Marcha *Orbital+, *Garra *Andante+ y *Incinerar+. NL Agota." +}, +"Guardian:PackageAutomaton": { + "NAME": "Paquete: Bronce", + "DESCRIPTION": "Obtén un *Giga *Rayo, *Soporte *Orbital y *Placa *Reforzada. NL Agota.", + "UPGRADE_DESCRIPTION": "Obtén un *Giga *Rayo+, *Soporte *Orbital+ y *Placa *Reforzada+. NL Agota." +}, +"Guardian:PackageDefect": { + "NAME": "Paquete: Defecto", + "DESCRIPTION": "Obtén un *Redirigir, *Preprogramar y *Capacitor *Temporal. NL Agota.", + "UPGRADE_DESCRIPTION": "Obtén un *Redirigir+, *Preprogramar+ y *Capacitor *Temporal+. NL Agota." +}, +"Guardian:Planning": { + "NAME": "Planificación", + "DESCRIPTION": "Coloca las primeras !M! cartas de tu pila de robo en guardianmod:Estasis." +}, +"Guardian:Recover": { + "NAME": "Recuperación", + "DESCRIPTION": "Gana !B! de Bloqueo. NL guardianmod:Ensamblar !M!. NL Coloca una carta de tu pila de descarte en guardianmod:Estasis." +}, +"Guardian:Emergency": { + "NAME": "Emergencia", + "DESCRIPTION": "guardianmod:Acelera TODAS las cartas en guardianmod:Estasis. NL Agota.", + "UPGRADE_DESCRIPTION": "guardianmod:Acelera TODAS las cartas en guardianmod:Estasis dos veces. NL Agota." +}, +"Guardian:Clone": { + "NAME": "Clonar", + "DESCRIPTION": "Elige una carta. NL Coloca una copia de esa carta en guardianmod:Estasis. NL Agota.", + "UPGRADE_DESCRIPTION": "Elige una carta. NL Coloca una copia de esa carta en guardianmod:Estasis. NL guardianmod:Acelerar. NL Agota." +}, +"Guardian:Preprogram": { + "NAME": "Preprogramar", + "DESCRIPTION": "Mira las primeras !M! cartas de tu pila de robo. Elige una y colócala en guardianmod:Estasis." +}, +"Guardian:GemFinder": { + "NAME": "Detector de Gemas", + "DESCRIPTION": "Etérea. NL Al final del combate, puedes añadir una guardianmod:Gema aleatoria a tu mazo." +}, +"Guardian:StasisField": { + "NAME": "Campo de Estasis", + "DESCRIPTION": "Gana !B! de Bloqueo. NL Coloca esta carta en *Estasis." +}, +"Guardian:Metallicize": { + "NAME": "Endurecer", + "DESCRIPTION": "Gana !M! de expansioncontent:placas." +}, +"Guardian:StasisStrike": { + "NAME": "Golpe de estasis", + "DESCRIPTION": "Haz !D! de daño. NL Gana 1 Espacio de Estasis." +}, +"Guardian:FuturePlans": { + "NAME": "Planes Futuros", + "DESCRIPTION": "Al final de tu turno, coloca hasta !M! carta de tu mano en guardianmod:Estasis.", + "UPGRADE_DESCRIPTION": "Innata. NL Al final de tu turno, coloca hasta !M! carta de tu mano en guardianmod:Estasis." +}, +"Guardian:Suspension": { + "NAME": "Suspensión", + "DESCRIPTION": "Gana !B! de Bloqueo. NL Coloca una carta de tu mano en guardianmod:Estasis.", + "UPGRADE_DESCRIPTION": "Gana !B! de Bloqueo. NL Coloca una carta de tu mano en guardianmod:Estasis." +}, +"Guardian:FastForward": { + "NAME": "Impulso Rápido", + "DESCRIPTION": "guardianmod:Acelera !M! veces.", + "UPGRADE_DESCRIPTION": "Retiene. NL guardianmod:Acelera !M! veces." +}, +"Guardian:TimeCapacitor": { + "NAME": "Capacitador Temporal", + "DESCRIPTION": "Gana !M! Espacio de Estasis." +}, +"Guardian:ConstructionForm": { + "NAME": "Modo de Construcción", + "DESCRIPTION": "Etérea. NL Gana !M! guardianmod:Búfer. NL Al comienzo de cada turno, si tienes 1 o más guardianmod:Búfer, gana 1 de Fuerza.", + "UPGRADE_DESCRIPTION": "Gana !M! guardianmod:Búfer. NL Al comienzo de cada turno, si tienes 1 o más guardianmod:Búfer, gana 1 de Fuerza." +}, +"Guardian:RollAttack": { + "NAME": "Ataque Giratorio", + "DESCRIPTION": "Haz !D! de daño. NL Si estás en *Modo *Defensivo, afecta a TODOS los enemigos. De lo contrario, guardianmod:Ensambla 8." +}, +"Guardian:GemFire": { + "NAME": "Cañón de Gemas", + "DESCRIPTION": "Haz !D! de daño. NL Activa TODAS tus guardianmod:Gemas. NL Agota.", + "UPGRADE_DESCRIPTION": " NL (Tienes !M! Gema(s).)" +}, +"Guardian:ChargeCore": { + "NAME": "Núcleo de Carga", + "DESCRIPTION": "Haz !D! de daño. NL Coloca esta carta en guardianmod:Estasis. NL guardianmod:Tic - Roba una carta. NL guardianmod:Volátil." +}, +"Guardian:Reroute": { + "NAME": "Redireccionar", + "DESCRIPTION": "Haz !D! de daño. NL La siguiente carta que juegues este turno será colocada en guardianmod:Estasis." +}, +"Guardian:PiercingHide": { + "NAME": "Blindaje Perforante", + "DESCRIPTION": "Gana !B! de Bloqueo y !M! de Espinas temporales. NL guardianmod:Ensamblar 3.", + "UPGRADE_DESCRIPTION": "Gana !B! de Bloqueo y !M! de Espinas temporales. NL guardianmod:Ensamblar 4." +}, +"Guardian:ShieldSpikes": { + "NAME": "Púas de Escudo", + "DESCRIPTION": "Gana !B! de Bloqueo. NL Gana !M! de Espinas si estás en *Modo *Defensivo. guardianmod:Ensamblar 8." +}, +"Guardian:PrismaticBeam": { + "NAME": "Rayo Prismático", + "DESCRIPTION": "Haz !D! de daño por cada guardianmod:Gema en esta carta." +}, +"Guardian:PrismaticBarrier": { + "NAME": "Barrera Prismática", + "DESCRIPTION": "Gana !B! de Bloqueo por cada guardianmod:Gema en esta carta." +}, +"Guardian:TemporalStrike": { + "NAME": "Golpe Temporal", + "DESCRIPTION": "Haz !D! de daño. NL Gana [E] si tienes una carta en guardianmod:Estasis.", + "UPGRADE_DESCRIPTION": "Haz !D! de daño. NL Gana [E] si tienes una carta en guardianmod:Estasis." +}, +"Guardian:TemporalShield": { + "NAME": "Escudo Temporal", + "DESCRIPTION": "Gana !B! de Bloqueo. NL guardianmod:Acelerar." +}, +"Guardian:ExploitGems": { + "NAME": "Explotar Gemas", + "DESCRIPTION": "Roba una carta." +}, +"Guardian:RefractedBeam": { + "NAME": "Rayo Refractado", + "DESCRIPTION": "Haz !D! de daño !M! veces. NL Puede mejorarse múltiples veces. NL Por cada mejora +1:" +}, +"Guardian:MultiBeam": { + "NAME": "Multirrayo", + "DESCRIPTION": "Haz !D! de daño a TODOS los enemigos X veces. NL guardianmod:Tic - Aumenta el daño de esta carta en !M!." +}, +"Guardian:BaubleBeam": { + "NAME": "Estallido de Esferas", + "DESCRIPTION": "Haz !D! de daño. NL Realiza !M! veces:" +}, +"Guardian:PrimingBeam": { + "NAME": "Disparo de Cebado", + "DESCRIPTION": "Haz !D! de daño. NL guardianmod:Ensamblar !M!." +}, +"Guardian:EvasiveProtocol": { + "NAME": "Protocolo Evasivo", + "DESCRIPTION": "Cada vez que entres en *Modo *Defensivo, reduce cada uno de tus desventajas en !M!. NL guardianmod:Ensamblar !GuardianSecondM!.", + "UPGRADE_DESCRIPTION": "Cada vez que entres en *Modo *Defensivo, reduce cada uno de tus desventajas en !M!. NL guardianmod:Ensamblar !GuardianSecondM!." +}, +"Guardian:SpikerProtocol": { + "NAME": "Protocolo de Espinas", + "DESCRIPTION": "Cada vez que entres en *Modo *Defensivo, gana !M! de Espinas. NL guardianmod:Ensamblar !GuardianSecondM!.", + "UPGRADE_DESCRIPTION": "Cada vez que entres en *Modo *Defensivo, gana !M! de Espinas. NL guardianmod:Ensamblar !GuardianSecondM!." +}, +"Guardian:ArmoredProtocol": { + "NAME": "Protocolo Blindado", + "DESCRIPTION": "Gana !M! de Bloqueo al final de cada turno mientras estés en *Modo *Defensivo. NL Al comienzo de tu turno, guardianmod:Ensamblar 3." +}, +"Guardian:TimeSifter": { + "NAME": "Tamizador Temporal", + "DESCRIPTION": "Al comienzo de tu turno, guardianmod:Acelera.", + "UPGRADE_DESCRIPTION": "Innata. NL Al comienzo de tu turno, guardianmod:Acelera." +}, +"Guardian:AncientConstruct": { + "NAME": "Constructo Ancestral", + "DESCRIPTION": "Gana 1 Artefacto. NL Al comienzo de tu turno, si no tienes Artefacto, gana !M! de Artefacto.", + "UPGRADE_DESCRIPTION": "Gana 1 Artefacto. NL Al comienzo de tu turno, si no tienes Artefacto, gana !M! de Artefacto." +}, +"Guardian:CrystalBeam": { + "NAME": "Rayo de Cristal", + "DESCRIPTION": "Haz !D! de daño. NL Hace !M! de daño adicional por cada guardianmod:Gema en tu mazo." +}, +"Guardian:Gem_Synthetic": { + "NAME": "Ónix", + "DESCRIPTION": "guardianmod:Gema. NL Reduce cada uno de tus desventajas en 1.", + "UPGRADE_DESCRIPTION": "Reduce cada uno de tus desventajas en 1." +}, +"Guardian:Gem_Yellow": { + "NAME": "Ámbar", + "DESCRIPTION": "guardianmod:Gema. NL guardianmod:Acelera.", + "UPGRADE_DESCRIPTION": "guardianmod:Acelera." +}, +"Guardian:Gem_Purple": { + "NAME": "Amatista", + "DESCRIPTION": "guardianmod:Gema. NL TODOS los enemigos pierden 2 de Fuerza este turno.", + "UPGRADE_DESCRIPTION": "TODOS los enemigos pierden 2 de Fuerza este turno." +}, +"Guardian:Gem_Crimson": { + "NAME": "Granate", + "DESCRIPTION": "guardianmod:Gema. NL Aplica 1 de Vulnerable a TODOS los enemigos.", + "UPGRADE_DESCRIPTION": "Aplica 1 de Vulnerable a TODOS los enemigos." +}, +"Guardian:Gem_Blue": { + "NAME": "Zafiro", + "DESCRIPTION": "guardianmod:Gema. NL guardianmod:Ensamblar 4.", + "UPGRADE_DESCRIPTION": "guardianmod:Ensamblar 4." +}, +"Guardian:Gem_Fragmented": { + "NAME": "Gema Fragmentada", + "DESCRIPTION": "guardianmod:Gema. NL Gana una *Daga *Cristalina.", + "UPGRADE_DESCRIPTION": "Gana una *Daga *Cristalina." +}, +"Guardian:CrystalShiv": { + "NAME": "Daga Cristalina", + "DESCRIPTION": "Haz !D! de daño. NL Agota." +}, +"Guardian:CrystalWard": { + "NAME": "Escudo Cristalino", + "DESCRIPTION": "Gana !B! de Bloqueo. NL Agota." +}, +"Guardian:Repulse": { + "NAME": "Repulsor", + "DESCRIPTION": "Cuando robes la primera carta de Estado o Maldición cada turno, Agótala y roba una carta.", + "UPGRADE_DESCRIPTION": "Cuando robes la primera carta de Estado o Maldición cada turno, Agótala y roba una carta." +}, +"Guardian:BronzeOrb": { + "NAME": "Soporte de Orbe", + "DESCRIPTION": "Haz !D! de daño. NL guardianmod:Ensambla igual al daño no bloqueado infligido. NL Agota." +}, +"Guardian:RevengeProtocol": { + "NAME": "Protocolo de Venganza", + "DESCRIPTION": "Cada vez que entres en *Modo *Defensivo, gana !M! de Fuerza. NL Al comienzo de tu turno, guardianmod:Ensamblar !GuardianSecondM!." +}, +"Guardian:GatlingBeam": { + "NAME": "Torreta Láser", + "DESCRIPTION": "Haz !D! de daño. NL Coloca esta carta en guardianmod:Estasis. NL guardianmod:Estasis dura !M! turnos. NL guardianmod:Tic - Haz !D! de daño a un enemigo aleatorio." +}, +"Guardian:ShieldCharger": { + "NAME": "Cargador de Escudo", + "DESCRIPTION": "Coloca esta carta en guardianmod:Estasis. NL guardianmod:Tic - guardianmod:Ensambla !M! y gana !B! de Bloqueo. NL guardianmod:Volátil." +}, +"Guardian:StasisEngine": { + "NAME": "Motor de Estasis", + "DESCRIPTION": "Cuando juegues la tercera carta de coste 0 en un turno, gana [E] y roba una carta.", + "UPGRADE_DESCRIPTION": "Innata. NL Cuando juegues la tercera carta de coste 0 en un turno, gana [E] y roba una carta." +}, +"Guardian:HammerDown": { + "NAME": "Martillo Descendente", + "DESCRIPTION": "Haz !D! de daño. NL Duplica tu Fuerza y tu Destreza. NL Agota." +}, +"Guardian:OmegaCannon": { + "NAME": "Cañón Omega", + "DESCRIPTION": "Haz !D! de daño. NL Cuesta 1 menos [E] por cada punto de Fuerza que tengas." +}, +"Guardian:ModeShift": { + "NAME": "Cambio de Modo", + "DESCRIPTION": "Intercambia tu Fuerza y Destreza. NL Roba una carta.", + "UPGRADE_DESCRIPTION": "Retiene. NL Intercambia tu Fuerza y Destreza. NL Roba una carta." +}, +"Guardian:PackageConstruct": { + "NAME": "Paquete: Constructo", + "DESCRIPTION": "Obtén un Martillo Descendente, un Cañón Omega y un Cambio de Modo. NL Agota.", + "UPGRADE_DESCRIPTION": "Obtén un Martillo Descendente+, un Cañón Omega+ y un Cambio de Modo+. NL Agota." +}, +"Guardian:PackageMass": { + "NAME": "Paquete: Masa", + "DESCRIPTION": "Obtén una Masa de Pinchos, una Masa de Bombas y un Impacto Grupal. NL Agota.", + "UPGRADE_DESCRIPTION": "Obtén una Masa de Pinchos+, una Masa de Bombas+ y un Impacto Grupal+. NL Agota." +}, +"Guardian:MassOfThorns": { + "NAME": "Masa de Pinchos", + "DESCRIPTION": "Gana !M! de Espinas temporales. NL Agota si tienes Artefacto." +}, +"Guardian:MassTimeBomb": { + "NAME": "Masa de Bombas", + "DESCRIPTION": "Coloca una Bomba Temporal en cada ranura vacía de guardianmod:Estasis. NL Agota si crea 2 o más Bombas Temporales.", + "UPGRADE_DESCRIPTION": "Coloca una Bomba Temporal Mejorada en cada ranura vacía de guardianmod:Estasis. NL Agota si crea 2 o más Bombas Temporales." +}, +"Guardian:MassSlam": { + "NAME": "Impacto Grupal", + "DESCRIPTION": "Haz !D! de daño !M! veces. NL Agota si tienes 3 o más de Fuerza." +}, +"Guardian:GemstoneGunCard": { + "NAME": "Cañón de Gemas", + "DESCRIPTION": "Retiene.", + "UPGRADE_DESCRIPTION": " NL Agota." +}, +"Guardian:BodySlam": { + "NAME": "Embate Corporal", + "DESCRIPTION": "Gana !B! de Bloqueo. NL Haz daño igual a tu Bloqueo.", + "UPGRADE_DESCRIPTION": " NL (Haz !D! de daño.)" +}, +"Guardian:SecondStrike": { + "NAME": "Segundo Impacto", + "DESCRIPTION": "Etérea. NL Haz !D! de daño. NL Agota." +}, +"Guardian:SecondStrikePreviewCard": { + "NAME": "Segundo Impacto", + "DESCRIPTION": "Etérea. NL Haz !D! de daño. NL Copia las *Gemas de *Golpe Gemelo. NL Agota." +}, +"Guardian:StrikeForStrike": { + "NAME": "Golpe por Golpe", + "DESCRIPTION": "Haz !D! de daño. NL El enemigo te ataca con !M! de daño." +}, +"Guardian:GearUp": { + "NAME": "Optimizar", + "DESCRIPTION": "Retiene. NL guardianmod:Ensambla !M!. NL Agota." +} +} + + + + diff --git a/src/main/resources/guardianResources/localization/spa/CharacterStrings.json b/src/main/resources/guardianResources/localization/spa/CharacterStrings.json new file mode 100644 index 000000000..01f5710e1 --- /dev/null +++ b/src/main/resources/guardianResources/localization/spa/CharacterStrings.json @@ -0,0 +1,18 @@ +{ + "Guardian": { + "NAMES": [ + "El Guardián" + ], + "TEXT": [ + "Un constructo de la Aguja, programado para defenderla. NL Capaz de protegerse del daño a voluntad.", + "DIRECTIVA PRINCIPAL - #r~DESTRUIR~ #r~AL~ #r~CORAZÓN.~", + "[ guardianmod:Ranura ]", + "Al avanzar por una calle sin iluminar, te topas con varias figuras encapuchadas en medio de un ritual oscuro. Al acercarte, se giran hacia ti al unísono, de forma inquietante. La más alta muestra colmillos afilados y extiende una mano pálida y alargada. NL ~\"Únete~ ~a~ ~nosotros,~ ~antiguo~ ~protector,~ ~y~ ~siente~ ~el~ ~calor~ ~de~ ~la~ ~Aguja.\"~", + "Modo Defensivo", + "Tienes #b3 de #yEspinas y tu #yBloqueo no expira.", + "~ERROR:~ #rEstasis en progreso." + ], + "KEYWORDS": [ + ] + } +} diff --git a/src/main/resources/guardianResources/localization/spa/EventStrings.json b/src/main/resources/guardianResources/localization/spa/EventStrings.json new file mode 100644 index 000000000..638452704 --- /dev/null +++ b/src/main/resources/guardianResources/localization/spa/EventStrings.json @@ -0,0 +1,127 @@ +{ + "Guardian:GemMine": { + "NAME": "Mina de Gemas", + "DESCRIPTIONS": [ + "Te adentras en un antiguo pozo minero. En las grietas de la roca puedes ver varias gemas relucientes: #gEsmeraldas, #rrubíes, #ytopacios y otras más. Un grupo de Gremlins mineros cercanos tiene herramientas que podrían ayudarte, pero las gemas están tan cerca de la superficie que, con algo de determinación, podrías extraerlas a mano.", + "Cavando en la pared rocosa, logras arrancar una gema de su lugar. Duele un poco, pero vale la pena.", + "Aunque la idea del tesoro es tentadora, prefieres conservar tu armadura para retos más importantes.", + "Habiendo conquistado la vieja mina, te marchas con una sensación de logro... y algunos apéndices de bronce adoloridos.", + "Arrebatas el pico minero del campamento Gremlin, que parece estar en malas condiciones. Puedes usarlo aquí para obtener gemas, o guardarlo para más adelante en tu ascenso.", + "Usando el pico, golpeas la pared y tallas una gema. El pico se deteriora un poco en el proceso, pero es mejor eso que dañar tus garras." + ], + "OPTIONS": [ + "[Cavar con Garras] #gObtén #guna #gGema #galeatoria. #rPierde #r", + " #rPV.", + "[Retirarse]", + "[Robar] #rEnfrenta #ra #rGremlins. #gObtén #gel #gPico #gde #gRapsodia.", + "[Minar con Pico] #gObtén #guna #gGema #galeatoria. #rPierde #runa #rcarga #rdel #rPico.", + "[Bloqueado] Pico #rRoto." + ] + }, + "Guardian:StasisEgg": { + "NAME": "Cámara Cuántica", + "DESCRIPTIONS": [ + "Tropiezas con una caja cubierta de símbolos rúnicos extraños. Dentro encuentras un dispositivo con forma de huevo que emite un zumbido suave. No sabes qué es, pero la energía que desprende indica que debe ser poderoso.", + "Decides que algo tan poderoso está destinado a usarse. Lo guardas, pero a medida que las runas se iluminan, sientes que el tiempo comienza a ralentizarse... cada vez más... más... más...", + "Decides que algo así no debe caer en manos equivocadas y decides destruirlo. NL Una luz cálida te invade antes de que el huevo #rexplote #rviolentamente, sus fragmentos #rte #rlastiman.", + "Decides que algo tan poderoso debe estar ahí por una razón. Aunque tu instinto te dice que deberías usarlo, decides dejarlo y seguir tu camino." + ], + "OPTIONS": [ + "[Usar] #gObtén #gCámara #gCuántica. #rGanas #rla #rMaldición #r- #rEnvejecido.", + "[Romper] #gGana #g", + " #gde #gPV #gMáximos. #rGanas #rla #rMaldición #r- #rDolor.", + "[Dejarlo]" + ] + }, + "Guardian:AccursedBlacksmith": { + "NAME": "Herrero Maldito", + "DESCRIPTIONS": [ + "Decides usar la forja y... NL #y@¡CLANG!@ #y@¡CLAAANG!@ #y@¡CLANG!@ NL ...haces espacio en tu arsenal para nuevas gemas." + ], + "OPTIONS": [ + "[Modificar] #gAñade #guna #granura #ga #guna #gcarta #gcon #granuras.", + "Añade una ranura a una carta.", + "[Bloqueado] Requiere una carta con ranuras." + ] + }, + "Guardian:GuardianTalk": { + "NAME": "Protocolo Interrumpido", + "DESCRIPTIONS": [ + "REEMPLAZAR - REGRESAR A ENSAMBLE.", + "ANOMALÍA DETECTADA.", + "MODELO GUARDIAN DEFECTUOSO.", + "OVERRIDE PROTOCOLO ALFA.", + "GUARDIAN: REGRESA A TU PUESTO.", + "FALLO TOTAL DE PROTOCOLO DETECTADO.", + "TERMINAR GUARDIAN INMEDIATAMENTE.", + "NUEVO PROTOCOLO: DESTRUIR.", + "CESE Y REGRESO A EXORDIUM." + ], + "OPTIONS": [ + "" + ] + }, + "Guardian:CrystalForge": { + "NAME": "Forja Funesta", + "DESCRIPTIONS": [ + "A través de pasadizos secretos conocidos solo por los Constructos de la Aguja, entras en una cámara diseñada para dar mantenimiento a modelos Autómata. Las herramientas aquí serán útiles, incluso si no fueron diseñadas para Guardianes.", + "Usando el yunque encantado, destruyes una pieza innecesaria de tu equipo para recuperar las valiosas gemas que colocaste ahí anteriormente.", + "Con las tenazas mágicas, abres cuidadosamente una ranura y extraes las gemas, haciéndolas inservibles pero liberando espacio.", + "La capacidad de transmutar materia de la forja se activa al instante cuando arrojas un objeto innecesario. Un momento después, la materia se condensa en una hermosa gema.", + "Escapas por el mismo pasadizo por el que entraste, dejando la Forja Funesta atrás. Tu viaje continúa hacia el Amanecer en la cima de la Aguja.", + "Selecciona una carta para Desmantelar.", + "Selecciona una carta para Extraer.", + "Selecciona una carta para Transmutar.", + "Selecciona una Gema.", + "Selecciona una carta para recibir la Gema.", + "Aprovechando la pausa en tu ascenso, insertas una gema en tu equipo y sientes tu poder crecer." + ], + "OPTIONS": [ + "[Desmantelar] #rElimina una carta con ranuras. Obtén sus #gGemas.", + "[Bloqueado] Requiere una carta con una gema insertada.", + "[Extraer] #rDestruye todas las #gGemas en una carta con ranuras.", + "[Transmutar] #rElimina una carta. Obtén una #gGema aleatoria.", + "[Bloqueado] Ya ha sido usada.", + "[Salir]", + "[Mejorar] Añade una #gGema a una #granura.", + "[Bloqueado] Requiere una gema y una ranura libre." + ] + }, + "Guardian:Purifier": { + "NAME": "Purificador", + "DESCRIPTIONS": [ + "Con un golpe certero, destruyes el Santuario para descubrir los tesoros en su interior. Entre los escombros encuentras dos gemas relucientes esperando ser colocadas en tu arsenal. NL NL Dejas atrás los restos del santuario y continúas el ascenso." + ], + "OPTIONS": [ + "[Romper] #gObtén #g2 #gGemas #galeatorias [REMOVE_SPACE]." + ] + }, + "Guardian:Transmorgrifier": { + "NAME": "Transmutador", + "DESCRIPTIONS": [ + "Esta sección aún no contiene descripción." + ], + "OPTIONS": [ + "[Pendiente]" + ] + }, + "Guardian:UpgradeShrine": { + "NAME": "Santuario de Mejora", + "DESCRIPTIONS": [ + "Esta sección aún no contiene descripción." + ], + "OPTIONS": [ + "[Pendiente]" + ] + }, + "Guardian:BackToBasics": { + "NAME": "Volver a lo Básico", + "DESCRIPTIONS": [ + "Si eres el clavo, resiste los golpes; si eres el martillo, golpea." + ], + "OPTIONS": [ + "[Resistir] #gAñade #gEnsamblar #g2 a todos tus #gGolpes y #gDefensas.", + "[Bloqueado] Requiere un Golpe o Defensa." + ] + } +} diff --git a/src/main/resources/guardianResources/localization/spa/KeywordStrings.json b/src/main/resources/guardianResources/localization/spa/KeywordStrings.json new file mode 100644 index 000000000..e15b0717b --- /dev/null +++ b/src/main/resources/guardianResources/localization/spa/KeywordStrings.json @@ -0,0 +1,97 @@ +[ + { + "NAMES": [ + "socket", + "sockets", + "socketed", + "ranura", + "ranuras", + "insertado" + ], + "PROPER_NAME": "Ranura", + "DESCRIPTION": "Las #yGemas pueden insertarse en esta ranura en las zonas de descanso." + }, + { + "NAMES": [ + "stasis", + "estasis" + ], + "PROPER_NAME": "Estasis", + "DESCRIPTION": "Una carta en estasis permanece ahí una cantidad de turnos igual a su coste + #b1 [REMOVE_SPACE]. NL Al salir, regresa a tu mano y cuesta #b0 hasta ser jugada." + }, + { + "NAMES": [ + "gem", + "gems", + "gema", + "gemas" + ], + "PROPER_NAME": "Gema", + "DESCRIPTION": "Las gemas se pueden colocar en #yRanuras de cartas en las zonas de descanso. No se pueden #yMejorar [REMOVE_SPACE]." + }, + { + "NAMES": [ + "defensive mode", + "defensive_mode", + "defensive", + "modo defensivo", + "modo_defensivo", + "defensivo" + ], + "PROPER_NAME": "Modo Defensivo", + "DESCRIPTION": "#yPostura. NL Gana #b16 de #yBloqueo al entrar en Modo Defensivo. Mientras permanezcas en esta postura, tienes #b3 de #yEspinas y tu #yBloqueo no expira." + }, + { + "NAMES": [ + "accelerate", + "acelerar", + "acelera" + ], + "PROPER_NAME": "Acelerar", + "DESCRIPTION": "Reduce en #b1 [REMOVE_SPACE] el contador de turnos de la carta más a la derecha en #yEstasis." + }, + { + "NAMES": [ + "package", + "packages", + "paquete", + "paquetes" + ], + "PROPER_NAME": "Paquete", + "DESCRIPTION": "Habilidad de coste 0 que se #yAgota y genera tres cartas inspiradas en un Constructo de la Aguja." + }, + { + "NAMES": [ + "volatile", + "volátil" + ], + "PROPER_NAME": "Volátil", + "DESCRIPTION": "Cuando esta carta sale de la #yEstasis, se #yAgota [REMOVE_SPACE]." + }, + { + "NAMES": [ + "tics", + "tick", + "tic" + ], + "PROPER_NAME": "Tic", + "DESCRIPTION": "Se activa cuando esta carta se encuentra en #yEstasis y el contador de turnos se reduce..." + }, + { + "NAMES": [ + "buffer", + "búfer" + ], + "PROPER_NAME": "Búfer", + "DESCRIPTION": "Previene la siguiente vez que perderías PV." + }, + { + "NAMES": [ + "brace", + "ensamblar", + "ensambla" + ], + "PROPER_NAME": "Ensamblar X", + "DESCRIPTION": "Reduce el daño necesario para activar #yCambio #yde #yModo en X." + } +] diff --git a/src/main/resources/guardianResources/localization/spa/MonsterStrings.json b/src/main/resources/guardianResources/localization/spa/MonsterStrings.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/src/main/resources/guardianResources/localization/spa/MonsterStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/guardianResources/localization/spa/OrbStrings.json b/src/main/resources/guardianResources/localization/spa/OrbStrings.json new file mode 100644 index 000000000..c11534209 --- /dev/null +++ b/src/main/resources/guardianResources/localization/spa/OrbStrings.json @@ -0,0 +1,25 @@ +{ + "Guardian:EmptyStasisSlot": { + "NAME": "Ranura de Estasis", + "DESCRIPTION": [ + "Las cartas pueden colocarse en esta ranura mediante #yEstasis [REMOVE_SPACE]." + ] + }, + "Guardian:StasisOrb": { + "NAME": "Estasis: ", + "DESCRIPTION": [ + " regresará a tu mano a coste 0 al inicio de tu próximo turno.", + " regresará a tu mano a coste 0 en #b", + " turnos.", + " se #yAgotará al inicio de tu próximo turno.", + " se #yAgotará en #b", + " turnos." + ] + } +} + + + + + + diff --git a/src/main/resources/guardianResources/localization/spa/PotionStrings.json b/src/main/resources/guardianResources/localization/spa/PotionStrings.json new file mode 100644 index 000000000..b0b8a1014 --- /dev/null +++ b/src/main/resources/guardianResources/localization/spa/PotionStrings.json @@ -0,0 +1,31 @@ +{ + "Guardian:AcceleratePotion": { + "NAME": "Poción de Emergencia", + "DESCRIPTIONS": [ + "#yAcelera todas las cartas en #yEstasis #b", + " veces." + ] + }, + "Guardian:DefensiveModePotion": { + "NAME": "Aceite Abrillantador", + "DESCRIPTIONS": [ + "Gana #b", + " de #yBloqueo. Entra en #yModo #yDefensivo [REMOVE_SPACE]." + ] + }, + "Guardian:BlockOnCardUsePotion": { + "NAME": "Tintura del Blindador", + "DESCRIPTIONS": [ + "Gana #b", + " de #yBloqueo cada vez que juegues una carta este turno." + ] + }, + "Guardian:StasisDiscoveryPotion": { + "NAME": "Elixir Cuántico", + "DESCRIPTIONS": [ + "Obtén espacios de Estasis hasta tener #b", + ". NL Repite #b", + " veces: elige #b1 de #b3 cartas para colocar en #yEstasis [REMOVE_SPACE]." + ] + } +} diff --git a/src/main/resources/guardianResources/localization/spa/PowerStrings.json b/src/main/resources/guardianResources/localization/spa/PowerStrings.json new file mode 100644 index 000000000..0a46497d6 --- /dev/null +++ b/src/main/resources/guardianResources/localization/spa/PowerStrings.json @@ -0,0 +1,214 @@ +{ + "Guardian:NextTurnGainTemporaryStrengthPower": { + "NAME": "Cargar Potencia", + "DESCRIPTIONS": [ + "Obtén #b", + " de Fuerza temporal en tu próximo turno." + ] + }, + "Guardian:StunnedPower": { + "NAME": "Aturdido", + "DESCRIPTIONS": [ + "Pierde tu próximo turno.", + "Pierde tus próximos #b", + " turnos." + ] + }, + "Guardian:FloatingOrbsPower": { + "NAME": "Orbes Flotantes", + "DESCRIPTIONS": [ + "Cada vez que juegas una carta de coste #y0, inflige #b", + " de daño a un enemigo aleatorio." + ] + }, + "Guardian:OrbwalkPower": { + "NAME": "Marcha Orbital", + "DESCRIPTIONS": [ + "Obtén #b", + " de Fuerza al inicio de cada turno." + ] + }, + "Guardian:ClonePower": { + "NAME": "Redirigir", + "DESCRIPTIONS": [ + "La siguiente carta que juegues este turno entra en #yEstasis.", + "Las próximas #b", + " cartas que juegues este turno entran en #yEstasis." + ] + }, + "Guardian:GemFinderPower": { + "NAME": "Buscador de Gemas", + "DESCRIPTIONS": [ + "Al final del combate, puedes añadir una #yGema aleatoria a tu mazo.", + "Al final del combate, puedes añadir #b", + " #yGemas aleatorias a tu mazo." + ] + }, + "Guardian:FuturePlansPower": { + "NAME": "Planes Futuros", + "DESCRIPTIONS": [ + "Al final de tu turno, puedes colocar #b", + " carta en #yEstasis [REMOVE_SPACE].", + " cartas en #yEstasis [REMOVE_SPACE]." + ] + }, + "Guardian:DefenseModePower": { + "NAME": "Modo Defensivo", + "DESCRIPTIONS": [ + "#yModo #yDefensivo permanecerá activo por #b", + " turnos. Otorga #b", + " de #yEspinas, reduce el daño infligido en un #b25%, y otorga #b2 de #yBloqueo al jugar una carta." + ] + }, + "Guardian:ConstructModePower": { + "NAME": "Modo Construcción", + "DESCRIPTIONS": [ + "Al inicio de cada turno, si tienes al menos #b", + " de #yBúfer, obtén #b", + " de #yFuerza." + ] + }, + "Guardian:MultiBoostPower": { + "NAME": "Multiplicador", + "DESCRIPTIONS": [ + "Los ataques que infligen daño múltiple lo hacen una vez adicional.", + "Los ataques que infligen daño múltiple lo hacen #b", + " veces adicionales." + ] + }, + "Guardian:TargetedPower": { + "NAME": "Fijado", + "DESCRIPTIONS": [ + "Cada vez que este enemigo reciba daño, obtén #b", + " de #yFuerza por este turno." + ] + }, + "Guardian:LoseThornsPower": { + "NAME": "Espinas Perdidas", + "DESCRIPTIONS": [ + "Pierde #b", + " de #yEspinas al inicio de tu próximo turno." + ] + }, + "Guardian:BeamBuffPower": { + "NAME": "Preparado", + "DESCRIPTIONS": [ + "Las cartas tipo Rayo infligen #b", + " de daño adicional." + ] + }, + "Guardian:DefensiveModeBuffsPower": { + "NAME": "Modo Defensivo+", + "DESCRIPTIONS": [ + "Además de sus efectos normales, #yModo #yDefensivo aplicará: NL #b", + " de #yEspinas.", + " de #yDestreza.", + " de #yBloqueo al final de cada turno.", + "#yAgota la primera carta de #yEstado o #yMaldición robada cada turno.", + "#yAgota las primeras #b", + " cartas de #yEstado o #yMaldición robadas cada turno.", + "Obtén #b", + " de #yFuerza por cada turno que estuvo activo #yModo #yDefensivo." + ] + }, + "Guardian:AutomayhemPower": { + "NAME": "Tamiz Temporal", + "DESCRIPTIONS": [ + "Al inicio de tu turno, #yAcelera.", + "Al inicio de tu turno, #yAcelera ", + " veces." + ] + }, + "Guardian:ConstructPower": { + "NAME": "Constructo Ancestral", + "DESCRIPTIONS": [ + "Obtén #b", + " de #yArtefacto", + " al inicio de tu turno si no tienes ningún #yArtefacto [REMOVE_SPACE]." + ] + }, + "Guardian:ModeShiftPower": { + "NAME": "Cambio de Modo", + "DESCRIPTIONS": [ + "Cuando pierdas #b", + " PV, obtén #b16 de #yBloqueo, entra en #yModo #yDefensivo hasta el próximo turno, y aumenta el umbral requerido para activar este efecto en #b10 (máximo #b50 [REMOVE_SPACE])." + ] + }, + "Guardian:ExhaustStatusesPower": { + "NAME": "Repulsor", + "DESCRIPTIONS": [ + "Cuando robes la primera carta de #yEstado o #yMaldición en un turno, #yAgótala y roba una carta.", + "Cuando robes las primeras #b", + " cartas de #yEstado o #yMaldición en un turno, #yAgótalas y roba una carta." + ] + }, + "Guardian:RevengePower": { + "NAME": "Protocolo de Venganza", + "DESCRIPTIONS": [ + "Cada vez que entres en #yModo #yDefensivo obtén #b", + " de #yFuerza [REMOVE_SPACE]." + ] + }, + "Guardian:StasisEnginePower": { + "NAME": "Motor de Estasis", + "DESCRIPTIONS": [ + "Obtén #b", + " [E] y roba #b", + " carta", + " cartas", + " al jugar la tercera carta de coste 0 en un solo turno." + ] + }, + "Guardian:EnergizedGuardianPower": { + "NAME": "Energizado", + "DESCRIPTIONS": [ + "Obtén #b", + " [E] adicional en el siguiente turno.", + " [E] adicionales en el siguiente turno.", + "- NOTA DEL TRADUCTOR: Esta línea es para distinguir singular/plural si es necesario." + ] + }, + "Guardian:BlockOnCardUsePower": { + "NAME": "Aceite de Blindaje", + "DESCRIPTIONS": [ + "Obtén #b", + " de #yBloqueo cada vez que juegas una carta este turno." + ] + }, + "Guardian:EvasiveProtocolPower": { + "NAME": "Protocolo Evasivo", + "DESCRIPTIONS": [ + "Reduce tus desventajas en #b", + " al entrar en #yModo #yDefensivo [REMOVE_SPACE]." + ] + }, + "Guardian:SpikerProtocolPower": { + "NAME": "Protocolo de Espinas", + "DESCRIPTIONS": [ + "Obtén #b", + " de #yEspinas al entrar en #yModo #yDefensivo [REMOVE_SPACE]." + ] + }, + "Guardian:ArmoredProtocolPower": { + "NAME": "Protocolo Reforzado", + "DESCRIPTIONS": [ + "Obtén #b", + " de #yBloqueo al finalizar tu turno mientras estás en #yModo #yDefensivo [REMOVE_SPACE]." + ] + }, + "Guardian:DontLeaveDefensiveModePower": { + "NAME": "Modo Defensivo", + "DESCRIPTIONS": [ + "Saldrás de #yModo #yDefensivo al final de este turno.", + "#yModo #yDefensivo permanecerá activo por #b", + " rondas más." + ] + }, + "Guardian:BracePerTurnPower": { + "NAME": "Ensambles por Turno", + "DESCRIPTIONS": [ + "Al inicio de tu turno, #yEnsamblar #b", + " [REMOVE_SPACE]." + ] + } +} diff --git a/src/main/resources/guardianResources/localization/spa/RelicStrings.json b/src/main/resources/guardianResources/localization/spa/RelicStrings.json new file mode 100644 index 000000000..e5163f3b6 --- /dev/null +++ b/src/main/resources/guardianResources/localization/spa/RelicStrings.json @@ -0,0 +1,135 @@ +{ + "Guardian:ModeShifter": { + "NAME": "Engranaje de Bronce", + "FLAVOR": "Protección donde más la necesitas.", + "DESCRIPTIONS": [ + "Al inicio de cada combate, obtén #yOptimizar [REMOVE_SPACE]. NL El Guardian comienza la partida con una #yGema común aleatoria [REMOVE_SPACE]." + ] + }, + "Guardian:ModeShifterPlus": { + "NAME": "Engranaje del Guardián", + "FLAVOR": "Reemplazar cada 3,000 pisos.", + "DESCRIPTIONS": [ + "Reemplaza ", + " [REMOVE_SPACE].[] NL Al inicio del combate, obtén #yOptimizar [REMOVE_SPACE]. NL Cada vez que entres en #yModo #yDefensivo, obtén [E] y roba #b2 cartas." + ] + }, + "Guardian:ObsidianScales": { + "NAME": "Escamas de Obsidiana", + "FLAVOR": "Mancha el cielo con tu sangre. Represalia contra todos los que te han atacado.", + "DESCRIPTIONS": [ + "Al inicio del combate, obtén #b3 de #yEspinas [REMOVE_SPACE]. Cada vez que recibas una desventaja o se te aplique uno, obtén #b1 de #yEspinas [REMOVE_SPACE]." + ] + }, + "Guardian:DefensiveModeMoreBlock": { + "NAME": "Coraza Noble de Baalor", + "FLAVOR": "Nunca hay suficiente armadura.", + "DESCRIPTIONS": [ + "Cada vez que #yEnsambles, #yEnsambla 1 adicional." + ] + }, + "Guardian:guardianmod:GemCopier": { + "NAME": "Tambor de Gemas", + "FLAVOR": "Solo lo más puro es suficiente.", + "DESCRIPTIONS": [ + "Cuando juegues una carta #yGema, juega una copia de ella." + ] + }, + "Guardian:PocketSentry": { + "NAME": "Centinela de Bolsillo de Arumba", + "FLAVOR": "Modo Centinela activado. Objetivo adquirido. Nada personal.", + "DESCRIPTIONS": [ + "Cada 3 turnos, aplica #b1 de #yDébil a TODOS los enemigos." + ] + }, + "Guardian:SackOfGems": { + "NAME": "Saco de Gemas", + "FLAVOR": "¡Ooh... brillante!", + "DESCRIPTIONS": [ + "Al obtenerla, puedes elegir hasta #b5 #yGemas aleatorias para añadir a tu mazo." + ] + }, + "Guardian:StasisCodex": { + "NAME": "Códice del Piloto", + "FLAVOR": "Diseños y esquemas de los primeros prototipos manuales de la Aguja, por el Maestro Piloto David.", + "DESCRIPTIONS": [ + "Al final de tus primeros 3 turnos, si tus ranuras de #yEstasis no están llenas, elige #b1 de #b3 cartas para colocar en #yEstasis [REMOVE_SPACE]." + ] + }, + "Guardian:StasisSlotIncreaseRelic": { + "NAME": "Pequeña Caja Policial", + "FLAVOR": "Es más grande por dentro...", + "DESCRIPTIONS": [ + "Comienza cada combate con #b2 ranuras de Estasis adicionales." + ] + }, + "Guardian:StasisSlotReductionRelic": { + "NAME": "Drones Exploradores", + "FLAVOR": "Estos drones encuentran el mejor chatarreo, pero requieren potencia para mantenerse.", + "DESCRIPTIONS": [ + "Al inicio de cada combate, pierdes #b1 ranura de Estasis. NL Al inicio de tu turno, obtén [E]." + ] + }, + "Guardian:StasisUpgradeRelic": { + "NAME": "Cámara Criogénica", + "FLAVOR": "Todo parece mejor al salir que al entrar.", + "DESCRIPTIONS": [ + "Al inicio de cada combate, gana #b1 ranura de Estasis. Cada vez que una carta entre en #yEstasis [REMOVE_SPACE], #yMejórela." + ] + }, + "Guardian:BottledStasis": { + "NAME": "Agujero Negro Embotellado", + "FLAVOR": "En algún lugar, algo increíble espera ser descubierto.", + "DESCRIPTIONS": [ + "Al obtenerla, elige una carta. Comienza cada combate con esta carta en #yEstasis [REMOVE_SPACE].", + "Elige una carta para ", + "Comienza cada combate con ", + " en #yEstasis [REMOVE_SPACE].", + "La carta embotellada ha sido #reliminada de tu mazo, el efecto de la reliquia ya no funciona." + ] + }, + "Guardian:StasisEgg": { + "NAME": "Cámara Cuántica", + "FLAVOR": "Obtienes el pollo incubando el huevo, no rompiéndolo.", + "DESCRIPTIONS": [ + "Al obtenerla, elige una carta. Comienza cada combate con esta carta removida de tu mazo. Al inicio de tu turno #b4, vuelve a tu mano con #b2 copias.", + "Elige una carta para ", + "Comienza cada combate con ", + " removida de tu mazo. Al inicio del turno #b4, vuelve a tu mano con #b2 copias." + ] + }, + "Guardian:TickHelperRelic": { + "NAME": "Fluido Refrigerante", + "FLAVOR": "Peligroso. No ingerir.", + "DESCRIPTIONS": [ + "Comienza cada combate con #b2 ranuras de Estasis adicionales. NL Cuando una carta entre en #yEstasis, incrementa su contador de turnos en #b2." + ] + }, + "Guardian:PickAxe": { + "NAME": "Pico de Rapsodia", + "FLAVOR": "Con tantas gemas que hay por toda la Aguja, es difícil imaginar a alguien tan desafortunado como para necesitar este pico.", + "DESCRIPTIONS": [ + "Ahora puedes #gExcavar para obtener #b2 #yGemas en las zonas de descanso. Puedes elegir añadirlas a tu mazo (hasta #b3 veces)." + ] + }, + "Guardian:GemstoneGun": { + "NAME": "Cañón de Gemas", + "FLAVOR": "¡Bang! ¡Bang! ¡Bang! ¡Eh, hice combinación de tres!", + "DESCRIPTIONS": [ + "Al obtenerla, elige #b3 #yGemas. Al inicio de cada combate, obtén una carta con #yRetiene, #yAgota, y esas #yGemas incrustadas.", + "Elige una Gema para cargar el Cañón de Gemas." + ] + }, + "Guardian:BottledAnomaly": { + "NAME": "Anomalía Embotellada", + "FLAVOR": "Girando y girando... y finalmente quebrándose.", + "DESCRIPTIONS": [ + "Al obtenerla, elige una carta. Al inicio de cada combate, remuévela de tu pila de robo. Al inicio del turno #b3 [REMOVE_SPACE], añádela a tu mano. Cuesta #b0 ese turno.", + "Elige una carta para ", + "Comienza cada combate con ", + " removida de tu mazo. Al inicio del turno #b3, añádela a tu mano. NL Cuesta #b0 ese turno.", + "La carta embotellada ha sido #reliminada de tu mazo, el efecto de la reliquia ya no funciona." + ] + } +} + diff --git a/src/main/resources/guardianResources/localization/spa/RunModStrings.json b/src/main/resources/guardianResources/localization/spa/RunModStrings.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/src/main/resources/guardianResources/localization/spa/RunModStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/guardianResources/localization/spa/UIStrings.json b/src/main/resources/guardianResources/localization/spa/UIStrings.json new file mode 100644 index 000000000..5a0df13bf --- /dev/null +++ b/src/main/resources/guardianResources/localization/spa/UIStrings.json @@ -0,0 +1,41 @@ +{ + "Guardian:EnhanceBonfireOptions": { + "TEXT": [ + "Mejorar", + "(Acción gratuita) Inserta una Gema en una Ranura libre.", + "Requiere una Gema y una Ranura libre.", + "Selecciona una Gema.", + "Selecciona una carta para recibir la Gema." + ] + }, + "Guardian:UIOptions": { + "TEXT": [ + "Elige una carta para colocar en Estasis.", + "Selecciona una Gema.", + "Agrega una Gema a tu mazo", + "colocar en Estasis.", + "~ERROR:~ No puedes #rAtacar en Modo de Construcción.", + "~ERROR:~ #rEstasis en curso.", + "Agrega una Gema a tu mazo", + "" + ] + }, + "Guardian:FindGemsOption": { + "TEXT": [ + "Minar.", + "Obtén 2 Gemas aleatorias.", + "Recogida rota." + ] + }, + "Guardian:BraceMod": { + "TEXT": [ + " NL guardianmod:Ensamblar 2." + ] + }, + "Guardian:gemDescriptor": { + "TEXT": [ + "Gema", + "guardianmod:Gema. NL " + ] + } +} diff --git a/src/main/resources/guardianResources/localization/zhs/CardStrings.json b/src/main/resources/guardianResources/localization/zhs/CardStrings.json index 9bf60405c..aaf02abdc 100644 --- a/src/main/resources/guardianResources/localization/zhs/CardStrings.json +++ b/src/main/resources/guardianResources/localization/zhs/CardStrings.json @@ -1,458 +1,462 @@ -{ - "Guardian:Strike_Guardian": { - "NAME": "打击", - "DESCRIPTION": "造成 !D! 点伤害。" - }, - "Guardian:Defend_Guardian": { - "NAME": "防御", - "DESCRIPTION": "获得 !B! 点 格挡 。" - }, - "Guardian:Gem_Red": { - "NAME": "红宝石", - "DESCRIPTION": " guardianmod:宝石 。 NL 获得2层 guardianmod:临时 力量 。", - "UPGRADE_DESCRIPTION": "获得2层 guardianmod:临时 力量 。" - }, - "Guardian:Gem_Green": { - "NAME": "翡翠", - "DESCRIPTION": " guardianmod:宝石 。 NL 获得2层 guardianmod:临时 敏捷 。", - "UPGRADE_DESCRIPTION": "获得2层 guardianmod:临时 敏捷 。" - }, - "Guardian:Gem_Lightblue": { - "NAME": "碧玺", - "DESCRIPTION": " guardianmod:宝石 。 NL 获得2层 荆棘 。", - "UPGRADE_DESCRIPTION": "获得2层 荆棘 。" - }, - "Guardian:Gem_White": { - "NAME": "石英", - "DESCRIPTION": " guardianmod:宝石 。 NL 抽一张牌。", - "UPGRADE_DESCRIPTION": "抽一张牌。" - }, - "Guardian:Gem_Orange": { - "NAME": "茶晶", - "DESCRIPTION": " guardianmod:宝石 。 NL 获得 [E] 。", - "UPGRADE_DESCRIPTION": "获得 [E] 。" - }, - "Guardian:Gem_Cyan": { - "NAME": "蓝晶", - "DESCRIPTION": " guardianmod:宝石 。 NL 获得 *水晶护卫 。", - "UPGRADE_DESCRIPTION": "获得 *水晶护卫 。" - }, - "Guardian:ChargeUp": { - "NAME": "充能", - "DESCRIPTION": "获得 !B! 点 格挡 。 NL 下回合, NL 获得 !M! 层 guardianmod:临时 力量 。" - }, - "Guardian:DonusPower": { - "NAME": "过载", - "DESCRIPTION": "抽四张牌。 NL 下回合少抽2张牌。", - "UPGRADE_DESCRIPTION": "抽四张牌。 NL 下回合少抽2张牌。 NL 失去所有负面效果1层。" - }, - "Guardian:DecasProtection": { - "NAME": "先古之力", - "DESCRIPTION": "获得 !M! 层 guardianmod:临时 力量 。 NL 获得 !M! 层 guardianmod:临时 敏捷 。" - }, - "Guardian:FierceBash": { - "NAME": "猛烈痛击", - "DESCRIPTION": "造成 !D! 点伤害。 NL 将本牌 guardianmod:凝滞 。 NL guardianmod:滴答 : NL 本场战斗伤害加 !M! 。" - }, - "Guardian:PolyBeam": { - "NAME": "激光射线", - "DESCRIPTION": "随机造成 !D! 点伤害 !M! 次。" - }, - "Guardian:TwinSlam": { - "NAME": "双斩", - "DESCRIPTION": "造成 !D! 点伤害。 NL 获得 *再斩 。", - "UPGRADE_DESCRIPTION": "造成 !D! 点伤害。 NL 获得 *再斩+ 。" - }, - "Guardian:GuardianWhirl": { - "NAME": "守护者旋风", - "DESCRIPTION": "有20点 格挡 才能打出。 NL 对所有敌人造成 !D! 点伤害 !M! 次。", - "EXTENDED_DESCRIPTION": - [ - "需要更多格挡。" - ] - }, - "Guardian:VentSteam": { - "NAME": "蒸汽释放", - "DESCRIPTION": "给予 !M! 层群体 易伤 。" - }, - "Guardian:CurlUp": { - "NAME": "蜷身", - "DESCRIPTION": "随机 guardianmod:凝滞 一张手牌。 NL guardianmod:提防 !M! 。", - "UPGRADE_DESCRIPTION": "guardianmod:凝滞 一张手牌。 NL guardianmod:提防 !M! 。" - }, - "Guardian:TimeBomb": { - "NAME": "时间炸弹", - "DESCRIPTION": "对所有敌人造成 !D! 点伤害。 NL guardianmod:加速 所有 guardianmod:凝滞 中的牌。 NL 消耗 。" - }, - "Guardian:HyperBeam_Guardian": { - "NAME": "究极射线", - "DESCRIPTION": "对所有敌人造成 !D! 点伤害。 NL 力量 本次发挥 !M! 倍效果。 NL 跳过你的下回合。" - }, - "Guardian:BronzeArmor": { - "NAME": "弹性鳞甲", - "DESCRIPTION": "失去所有负面效果 !M! 层。 NL guardianmod:提防 8。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "失去所有负面效果 !M! 层。 NL guardianmod:提防 8。" - }, - "Guardian:FloatingOrbs": { - "NAME": "浮游圆球", - "DESCRIPTION": "打出0耗能牌时, NL 随机造成 !M! 点伤害。" - }, - "Guardian:OrbSlam": { - "NAME": "圆球撞击", - "DESCRIPTION": "造成 !D! 点伤害 !GuardianMulti! 次。 NL 消耗 。" - }, - "Guardian:Incinerate": { - "NAME": "焚烧", - "DESCRIPTION": "造成 !D! 点伤害。 NL guardianmod:加速 1次。", - "UPGRADE_DESCRIPTION": "造成 !D! 点伤害。 NL guardianmod:加速 2次。" - }, - "Guardian:Orbwalk": { - "NAME": "行者圆球", - "DESCRIPTION": "获得 !M! 点 力量 。 NL guardianmod:滴答 :获得 1 点 力量 。 NL guardianmod:消散 。", - "UPGRADE_DESCRIPTION": "获得 !M! 点 力量 。 NL guardianmod:滴答 :获得 1 点 力量 。" - }, - "Guardian:WalkerClaw": { - "NAME": "行者爪击", - "DESCRIPTION": "造成 !D! 点伤害 !M! 次。" - }, - "Guardian:Harden": { - "NAME": "硬化", - "DESCRIPTION": "有20点 格挡 才能打出。 NL guardianmod:提防 !GuardianSecondM! 。 NL 获得 !M! 层 荆棘 。", - "EXTENDED_DESCRIPTION": [ - "需要更多格挡。" - ] - }, - "Guardian:SentryBeam": { - "NAME": "哨卫射线", - "DESCRIPTION": "造成 !D! 点伤害。 NL guardianmod:凝滞 一张 *哨卫震荡 。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "造成 !D! 点伤害。 NL guardianmod:凝滞 一张 *哨卫震荡+ 。 NL 消耗 。" - }, - "Guardian:SentryWave": { - "NAME": "哨卫震荡", - "DESCRIPTION": "给予 !M! 层 虚弱 。 NL guardianmod:凝滞 一张 *哨卫射线 。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "给予 !M! 层 虚弱 。 NL guardianmod:提防 2。 NL guardianmod:凝滞 一张 *哨卫射线+ 。 NL 消耗 。" - }, - "Guardian:CompilePackage": { - "NAME": "完整组件", - "DESCRIPTION": "消耗 。 NL 从三张 guardianmod:组件 牌中选择获得一张。", - "UPGRADE_DESCRIPTION": "消耗 。 NL 从三张 guardianmod:组件 牌+中选择获得一张。", - "EXTENDED_DESCRIPTION": [ - "选择一张组件。" - ] - }, - "Guardian:PackageShapes": { - "NAME": "组件: 机械", - "DESCRIPTION": "获得 *时 *间 *炸 *弹 、 *荆 *棘 *协 *议 与 *反 *冲 *协 *议 各1张。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "获得 *时 *间 *炸 *弹 *+ 、 *荆 *棘 *协 *议 *+ 与 *反 *冲 *协 *议 *+ 各1张。 NL 消耗 。" - }, - "Guardian:PackageDonuDeca": { - "NAME": "组件: 先古", - "DESCRIPTION": "获得 *过 *载 、 *先 *古 *之 *力 与 *先 *古 *造 *物 各1张。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "获得 *过 *载 *+ 、 *先 *古 *之 *力 *+ 与 *先 *古 *造 *物 *+ 各1张。 NL 消耗 。" - }, - "Guardian:PackageSphere": { - "NAME": "组件: 圆球", - "DESCRIPTION": "获得 *球 *形 *护 *盾 、 *装 *甲 *协 *议 与 *浮 *动 *圆 *球 各1张。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "获得 *球 *形 *护 *盾 *+ 、 *装 *甲 *协 *议 *+ 与 *浮 *动 *圆 *球 *+ 各1张。 NL 消耗 。" - }, - "Guardian:PackageSentry": { - "NAME": "组件: 哨卫", - "DESCRIPTION": "获得1张 *哨 *卫 *射 *线 与2张 *哨 *卫 *震 *荡 。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "获得1张 *哨 *卫 *射 *线 *+ 与2张 *哨 *卫 *震 *荡 *+ 。 NL 消耗 。" - }, - "Guardian:PackageWalker": { - "NAME": "组件: 行者", - "DESCRIPTION": "获得 *行 *者 *圆 *球 、 *行 *者 *爪 *击 与 *焚 *烧 各1张。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "获得 *行 *者 *圆 *球 *+ 、 *行 *者 *爪 *击 *+ 与 *焚 *烧 *+ 各1张。 NL 消耗 。" - }, - "Guardian:PackageAutomaton": { - "NAME": "组件: 铜械", - "DESCRIPTION": "获得 *究 *极 *射 *线 、 *铜 *制 *圆 *球 与 *弹 *性 *护 *甲 各1张。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "获得 *究 *极 *射 *线 *+ 、 *铜 *制 *圆 *球 *+ 与 *弹 *性 *护 *甲 *+ 各1张。 NL 消耗 。" - }, - "Guardian:PackageDefect": { - "NAME": "组件: 故障", - "DESCRIPTION": "获得 *重 *分 *配 , *预 *编 *程 与 *时 *间 *容 *器 各1张。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "获得 *重 *分 *配 *+ , *预 *编 *程 *+ 与 *时 *间 *容 *器 *+ 各1张。 NL 消耗 。" - }, - "Guardian:Planning": { - "NAME": "规划", - "DESCRIPTION": "guardianmod:凝滞 抽牌堆顶部 !M! 张牌。" - }, - "Guardian:Recover": { - "NAME": "恢复", - "DESCRIPTION": "获得 !B! 点 格挡 。 NL guardianmod:提防 !M! 。 NL guardianmod:凝滞 弃牌堆一张牌。" - }, - "Guardian:Emergency": { - "NAME": "应急", - "DESCRIPTION": " guardianmod:加速 至有牌 guardianmod:凝滞 结束。 NL 消耗 。", - "UPGRADE_DESCRIPTION": " guardianmod:加速 至有牌 guardianmod:凝滞 结束。" - }, - "Guardian:Clone": { - "NAME": "克隆", - "DESCRIPTION": "guardianmod:凝滞 一张手牌的复制品。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "guardianmod:凝滞 一张手牌的复制品。 NL guardianmod:加速 。 NL 消耗 。" - }, - "Guardian:Preprogram": { - "NAME": "预编程", - "DESCRIPTION": "查看抽牌堆顶部 !M! 张牌, NL 可 guardianmod:凝滞 其中一张。" - }, - "Guardian:GemFinder": { - "NAME": "宝石发现", - "DESCRIPTION": "战斗胜利后, NL 额外获得一枚 guardianmod:宝石 。" - }, - "Guardian:StasisField": { - "NAME": "凝滞屏障", - "DESCRIPTION": "获得 !B! 点 格挡 。 NL 将本牌 guardianmod:凝滞 。 NL guardianmod:凝滞 结束时, NL 获得 !B! 点 格挡 。" - }, - "Guardian:StasisStrike": { - "NAME": "凝滞打击", - "DESCRIPTION": "造成 !D! 点伤害。 NL 获得一个 guardianmod:凝滞 栏位。" - }, - "Guardian:FuturePlans": { - "NAME": "未来计划", - "DESCRIPTION": "回合结束时, NL 可 guardianmod:凝滞 一张手牌。", - "UPGRADE_DESCRIPTION": " 固有 。 NL 回合结束时, NL 可 guardianmod:凝滞 一张手牌。" - }, - "Guardian:Suspension": { - "NAME": "挂起", - "DESCRIPTION": "获得 !B! 点 格挡 。 NL guardianmod:凝滞 一张手牌。", - "UPGRADE_DESCRIPTION": "抽一张牌。 NL guardianmod:凝滞 一张手牌。" - }, - "Guardian:FastForward": { - "NAME": "时掣", - "DESCRIPTION": " guardianmod:加速 !M! 次。", - "UPGRADE_DESCRIPTION": "保留 。 NL guardianmod:加速 !M! 次。" - }, - "Guardian:TimeCapacitor": { - "NAME": "时间容器", - "DESCRIPTION": "获得 !M! 个 guardianmod:凝滞 栏位。" - }, - "Guardian:ConstructionForm": { - "NAME": "造物形态", - "DESCRIPTION": "虚无 。 NL 获得 !M! 层 guardianmod:缓冲 。 NL 回合开始时若有 guardianmod:缓冲 ,获得1点 力量 。", - "UPGRADE_DESCRIPTION": "获得 !M! 层 guardianmod:缓冲 。 NL 回合开始时若有 guardianmod:缓冲 ,获得1点 力量 。" - }, - "Guardian:RollAttack": { - "NAME": "翻滚攻击", - "DESCRIPTION": "造成 !D! 点伤害。 NL 若处于 guardianmod:防御模式 , NL 造成群体伤害, NL 否则 guardianmod:提防 8 。" - }, - "Guardian:GemFire": { - "NAME": "宝石加农炮", - "DESCRIPTION": " 消耗 手中所有 guardianmod:宝石 , NL 每颗随机造成 !D! 点伤害。", - "UPGRADE_DESCRIPTION": " NL (造成 !M! 次)" - }, - "Guardian:ChargeCore": { - "NAME": "充能核心", - "DESCRIPTION": "造成 !D! 点伤害。 NL 将本牌 guardianmod:凝滞 。 NL guardianmod:滴答 :抽一张牌。 guardianmod:消散 。" - }, - "Guardian:Reroute": { - "NAME": "重分配", - "DESCRIPTION": "造成 !D! 点伤害。 NL guardianmod:凝滞 打出的下一张非 消耗 攻击或技能牌。" - }, - "Guardian:PiercingHide": { - "NAME": "隐秘荆棘", - "DESCRIPTION": "获得 !B! 点 格挡 。 NL 获得 !M! 层 guardianmod:临时 荆棘 。 NL guardianmod:提防 3 。" -}, - "Guardian:ShieldSpikes": { - "NAME": "荆棘装甲", - "DESCRIPTION": "获得 !B! 点 格挡 。 NL 若处于 guardianmod:防御模式 , NL 获得 !M! 层 荆棘 , NL 否则 guardianmod:提防 8。" - }, - "Guardian:PrismaticBeam": { - "NAME": "缤纷碎块", - "DESCRIPTION": "本牌每 guardianmod:镶嵌 一颗 guardianmod:宝石 ,造成 !D! 点伤害。" - }, - "Guardian:PrismaticBarrier": { - "NAME": "缤纷眩盾", - "DESCRIPTION": "本牌每 guardianmod:镶嵌 一颗 guardianmod:宝石 ,获得 !B! 点 格挡 。" - }, - "Guardian:TemporalStrike": { - "NAME": "时流打击", - "DESCRIPTION": "造成 !D! 点伤害。 NL 若有牌被 guardianmod:凝滞 , NL 获得 [E] 。", - "UPGRADE_DESCRIPTION": "造成 !D! 点伤害。 NL 若有牌被 guardianmod:凝滞 , NL 获得 [E] 。" - }, - "Guardian:TemporalShield": { - "NAME": "时流屏障", - "DESCRIPTION": "获得 !B! 点 格挡 。 NL guardianmod:加速 。" - }, - "Guardian:ExploitGems": { - "NAME": "宝石利用", - "DESCRIPTION": "抽一张牌。" - }, - "Guardian:RefractedBeam": { - "NAME": "折射射线", - "DESCRIPTION": "造成 !D! 点伤害 !M! 次。 NL 能被多次 升级 。" - }, - "Guardian:MultiBeam": { - "NAME": "多重射线", - "DESCRIPTION": "对所有敌人造成 !D! 点伤害 X 次。 NL guardianmod:滴答 : NL 本场战斗伤害加 !M! 。" - }, - "Guardian:BaubleBeam": { - "NAME": "鳞片爆破", - "DESCRIPTION": "造成 !D! 点伤害。 NL 重复 !M! 次:" - }, - "Guardian:PrimingBeam": { - "NAME": "起爆", - "DESCRIPTION": "造成 !D! 点伤害。 NL guardianmod:提防 !M! 。" - }, - "Guardian:EvasiveProtocol": { - "NAME": "闪避协议", - "DESCRIPTION": "进入 guardianmod:防御模式 时, NL 获得 !M! 点 敏捷 。" - }, - "Guardian:SpikerProtocol": { - "NAME": "荆棘协议", - "DESCRIPTION": "进入 guardianmod:防御模式 时, NL 获得 !M! 层 荆棘 。" - }, - "Guardian:ArmoredProtocol": { - "NAME": "装甲协议", - "DESCRIPTION": "进入 guardianmod:防御模式 时, NL 获得 !M! 层 *金属化 。" - }, - "Guardian:TimeSifter": { - "NAME": "时间沙漏", - "DESCRIPTION": "回合开始时 guardianmod:加速 。", - "UPGRADE_DESCRIPTION": "固有 。 NL 回合开始时 guardianmod:加速 。" - }, - "Guardian:AncientConstruct": { - "NAME": "先古造物", - "DESCRIPTION": "回合开始时若无 人工制品 ,获得 !M! 层。", - "UPGRADE_DESCRIPTION": "获得2层 人工制品 。 NL 回合开始时若无 人工制品 ,获得 !M! 层。" - }, - "Guardian:CrystalBeam": { - "NAME": "水晶射线", - "DESCRIPTION": "造成 !D! 点伤害。 NL 牌组每有一枚 guardianmod:宝石 , NL 额外造成 !M! 点。" - }, - "Guardian:Gem_Synthetic": { - "NAME": "玛瑙", - "DESCRIPTION": "guardianmod:宝石 。 NL 失去所有负面效果1层。", - "UPGRADE_DESCRIPTION": "失去所有负面效果1层。" - }, - "Guardian:Gem_Yellow": { - "NAME": "琥珀", - "DESCRIPTION": " guardianmod:宝石 。 NL guardianmod:加速 。", - "UPGRADE_DESCRIPTION": " guardianmod:加速 。" - }, - "Guardian:Gem_Purple": { - "NAME": "紫晶", - "DESCRIPTION": " guardianmod:宝石 。 NL 本回合所有敌人失去 2 点 力量 。", - "UPGRADE_DESCRIPTION": "本回合所有敌人失去 2 点 力量 。" - }, - "Guardian:Gem_Crimson": { - "NAME": "石榴石", - "DESCRIPTION": " guardianmod:宝石 。 NL 给予所有敌人 1 层 易伤 。", - "UPGRADE_DESCRIPTION": "给予所有敌人 1 层 易伤 。" - }, - "Guardian:Gem_Blue": { - "NAME": "蓝宝石", - "DESCRIPTION": " guardianmod:宝石 。 NL guardianmod:提防 4。", - "UPGRADE_DESCRIPTION": "guardianmod:提防 4。" - }, - "Guardian:Gem_Fragmented": { - "NAME": "宝石碎片", - "DESCRIPTION": " guardianmod:宝石 。 NL 获得 *水晶小刀 。", - "UPGRADE_DESCRIPTION": "获得 *水晶小刀 。" - }, - "Guardian:CrystalShiv": { - "NAME": "水晶小刀", - "DESCRIPTION": "造成 !D! 点伤害。 NL 消耗 。" - }, - "Guardian:CrystalWard": { - "NAME": "水晶护卫", - "DESCRIPTION": "获得 !B! 点 格挡 。 NL 消耗 。" - }, - "Guardian:Repulse": { - "NAME": "反冲协议", - "DESCRIPTION": "进入 guardianmod:防御模式 时, NL 可 消耗 一张手牌。", - "UPGRADE_DESCRIPTION": "消耗 每回合抽到的首张 状态牌 或 诅咒 并抽一张牌。" - }, - "Guardian:BronzeOrb": { - "NAME": "铜球支援", - "DESCRIPTION": " 固有 。 NL 随机 guardianmod:凝滞 抽牌堆一张牌。 NL 造成 !D! 点伤害。 NL 消耗 。" - }, - "Guardian:SphericShield": { - "NAME": "球形护盾", - "DESCRIPTION": "获得 !B! 点 格挡 。 NL 进入 guardianmod:防御模式 。 NL 消耗 。" - }, - "Guardian:RevengeProtocol": { - "NAME": "预警协议", - "DESCRIPTION": "回合开始时, NL guardianmod:提防 !GuardianSecondM! 。" - }, - "Guardian:GatlingBeam": { - "NAME": "炮塔射线", - "DESCRIPTION": "造成 !D! 点伤害。 NL 将本牌 guardianmod:凝滞 。 NL 本牌 guardianmod:凝滞 时持续 !M! 回合。 NL guardianmod:滴答 : NL 随机造成 !D! 点伤害。" - }, - "Guardian:ShieldCharger": { - "NAME": "护盾充能", - "DESCRIPTION": "将本牌 guardianmod:凝滞 。 NL guardianmod:滴答 : NL guardianmod:提防 !M! 。 NL 获得 !B! 点 格挡 。 NL guardianmod:消散 。" - }, - "Guardian:StasisEngine": { - "NAME": "凝滞引擎", - "DESCRIPTION": "每回合打出第三张0耗能牌时,获得 [E] 并抽一张牌。", - "UPGRADE_DESCRIPTION": "固有 。 NL 每回合打出第三张0耗能牌时,获得 [E] 并抽一张牌。" - }, - "Guardian:GemstoneGunCard": { - "NAME": "宝石枪", - "DESCRIPTION": "保留 。", - "UPGRADE_DESCRIPTION": " NL 消耗 。" - }, - "Guardian:BodySlam": { - "NAME": "全身猛撞", - "DESCRIPTION": "获得 !B! 点 格挡 , NL 造成当前 格挡 值点伤害 。", - "UPGRADE_DESCRIPTION": " NL (造成 !D! 点伤害)" - }, - "Guardian:SecondStrike": { - "NAME": "再斩", - "DESCRIPTION": "虚无 。 NL 造成 !D! 点伤害。 NL 消耗 。" - }, - "Guardian:SecondStrikePreviewCard": { - "NAME": "再斩", - "DESCRIPTION": "虚无 。 NL 造成 !D! 点伤害。 NL 触发 *双斩 中的 *宝石 效果。 NL 消耗 。" - }, - "Guardian:StrikeForStrike": { - "NAME": "应击打击", - "DESCRIPTION": "造成 !D! 点伤害, NL 目标以 !M! 点伤害攻击你。" - }, - "Guardian:GearUp": { - "NAME": "预防", - "DESCRIPTION": "保留 。 NL guardianmod:提防 !M! 。 NL 消耗 。" - }, - "Guardian:Metallicize": { - "NAME": "金属化", - "DESCRIPTION": "回合结束时, NL 获得 !M! 点 格挡 。" - }, - "Guardian:PackageConstruct": { - "NAME": " !!!!!!!!!!!! 以下为疑似弃用文本,为了保险起见防止游戏崩溃,暂未删除。 !!!!!!!!!!!! ", - "DESCRIPTION": " !!!!!!!!!!!! 以下为疑似弃用文本,为了保险起见防止游戏崩溃,暂未删除。 !!!!!!!!!!!! ", - "UPGRADE_DESCRIPTION": " !!!!!!!!!!!! 以下为疑似弃用文本,为了保险起见防止游戏崩溃,暂未删除。 !!!!!!!!!!!! " - }, - "Guardian:PackageMass": { - "NAME": "组件: 团块", - "DESCRIPTION": "弃用", - "UPGRADE_DESCRIPTION": "弃用" - }, - "Guardian:HammerDown": { - "NAME": "坠落重锤", - "DESCRIPTION": "弃用" - }, - "Guardian:OmegaCannon": { - "NAME": "终极加农炮", - "DESCRIPTION": "弃用" - }, - "Guardian:ModeShift": { - "NAME": "模式切换", - "DESCRIPTION": "弃用", - "UPGRADE_DESCRIPTION": "弃用" - }, - "Guardian:MassOfThorns": { - "NAME": "团状荆棘", - "DESCRIPTION": "弃用" - }, - "Guardian:MassTimeBomb": { - "NAME": "团状炸弹", - "DESCRIPTION": "弃用", - "UPGRADE_DESCRIPTION": "弃用" - }, - "Guardian:MassSlam": { - "NAME": "合体撞击", - "DESCRIPTION": "弃用" - } -} +{ + "Guardian:Strike_Guardian": { + "NAME": "打击", + "DESCRIPTION": "造成 !D! 点伤害。" + }, + "Guardian:Defend_Guardian": { + "NAME": "防御", + "DESCRIPTION": "获得 !B! 点 格挡 。" + }, + "Guardian:Gem_Red": { + "NAME": "红宝石", + "DESCRIPTION": " guardianmod:宝石 。 NL 获得2层 guardianmod:临时 力量 。", + "UPGRADE_DESCRIPTION": "获得2层 guardianmod:临时 力量 。" + }, + "Guardian:Gem_Green": { + "NAME": "翡翠", + "DESCRIPTION": " guardianmod:宝石 。 NL 获得2层 guardianmod:临时 敏捷 。", + "UPGRADE_DESCRIPTION": "获得2层 guardianmod:临时 敏捷 。" + }, + "Guardian:Gem_Lightblue": { + "NAME": "碧玺", + "DESCRIPTION": " guardianmod:宝石 。 NL 获得4层 guardianmod:临时 荆棘 。", + "UPGRADE_DESCRIPTION": "获得4层 guardianmod:临时 荆棘 。" + }, + "Guardian:Gem_White": { + "NAME": "石英", + "DESCRIPTION": " guardianmod:宝石 。 NL 抽1张牌。", + "UPGRADE_DESCRIPTION": "抽1张牌。" + }, + "Guardian:Gem_Orange": { + "NAME": "茶晶", + "DESCRIPTION": " guardianmod:宝石 。 NL 获得 [E] 。", + "UPGRADE_DESCRIPTION": "获得 [E] 。" + }, + "Guardian:Gem_Cyan": { + "NAME": "蓝晶", + "DESCRIPTION": " guardianmod:宝石 。 NL 获得 *水晶护卫 。", + "UPGRADE_DESCRIPTION": "获得 *水晶护卫 。" + }, + "Guardian:ChargeUp": { + "NAME": "充能", + "DESCRIPTION": "获得 !B! 点 格挡 。 NL 下回合, NL 获得 !M! 层 guardianmod:临时 力量 。" + }, + "Guardian:DonusPower": { + "NAME": "过载", + "DESCRIPTION": "抽!M!张牌。 NL 失去所有负面效果1层。", + "UPGRADE_DESCRIPTION": "抽!M!张牌。 NL 失去所有负面效果1层。" + }, + "Guardian:DecasProtection": { + "NAME": "先古之力", + "DESCRIPTION": "获得 !M! 层 guardianmod:临时 力量 。 NL 获得 !M! 层 guardianmod:临时 敏捷 。" + }, + "Guardian:FierceBash": { + "NAME": "猛烈痛击", + "DESCRIPTION": "造成 !D! 点伤害。 NL 将本牌 guardianmod:凝滞 。 NL guardianmod:滴答 : NL 本场战斗伤害加 !M! 。" + }, + "Guardian:PolyBeam": { + "NAME": "激光射线", + "DESCRIPTION": "随机造成 !D! 点伤害 !M! 次。" + }, + "Guardian:TwinSlam": { + "NAME": "双斩", + "DESCRIPTION": "造成 !D! 点伤害。 NL 获得 *再斩 。", + "UPGRADE_DESCRIPTION": "造成 !D! 点伤害。 NL 获得 *再斩+ 。" + }, + "Guardian:GuardianWhirl": { + "NAME": "守护者旋风", + "DESCRIPTION": "对所有敌人造成 !D! 点伤害2次。 NL 若你有超过15点 格挡 ,多造成 !M! 次伤害。", + "EXTENDED_DESCRIPTION": + [ + "需要更多格挡。" + ] + }, + "Guardian:VentSteam": { + "NAME": "蒸汽释放", + "DESCRIPTION": "给予所有敌人 !M! 层 易伤 。" + }, + "Guardian:CurlUp": { + "NAME": "蜷身", + "DESCRIPTION": "随机 guardianmod:凝滞 1张手牌。 NL guardianmod:提防 !M! 。", + "UPGRADE_DESCRIPTION": "guardianmod:凝滞 1张手牌。 NL guardianmod:提防 !M! 。" + }, + "Guardian:TimeBomb": { + "NAME": "时间炸弹", + "DESCRIPTION": "对所有敌人造成 !D! 点伤害。 NL guardianmod:加速 所有 guardianmod:凝滞 中的牌。 NL 消耗 。" + }, + "Guardian:HyperBeam_Guardian": { + "NAME": "究极射线", + "DESCRIPTION": "对所有敌人造成 !D! 点伤害。 NL 力量 本次发挥 !M! 倍效果。 NL 跳过你的下回合。" + }, + "Guardian:BronzeArmor": { + "NAME": "弹性鳞甲", + "DESCRIPTION": "失去所有负面效果 !M! 层。 NL guardianmod:提防 8。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "失去所有负面效果 !M! 层。 NL guardianmod:提防 8。" + }, + "Guardian:FloatingOrbs": { + "NAME": "浮游圆球", + "DESCRIPTION": "打出0耗能牌时, NL 随机造成 !M! 点伤害。" + }, + "Guardian:OrbSlam": { + "NAME": "圆球撞击", + "DESCRIPTION": "造成 !D! 点伤害 !GuardianMulti! 次。 NL 消耗 。" + }, + "Guardian:Incinerate": { + "NAME": "焚烧", + "DESCRIPTION": "造成 !D! 点伤害。 NL guardianmod:加速 。", + "UPGRADE_DESCRIPTION": "造成 !D! 点伤害。 NL guardianmod:加速 2 次。" + }, + "Guardian:Orbwalk": { + "NAME": "行者圆球", + "DESCRIPTION": "获得 !M! 层 力量 。 NL guardianmod:滴答 :获得 1 层 力量 。 NL guardianmod:消散 。", + "UPGRADE_DESCRIPTION": "获得 !M! 层 力量 。 NL guardianmod:滴答 :获得 1 层 力量 。" + }, + "Guardian:WalkerClaw": { + "NAME": "行者爪击", + "DESCRIPTION": "造成 !D! 点伤害 !M! 次。" + }, + "Guardian:Harden": { + "NAME": "硬化", + "DESCRIPTION": "有20点 格挡 才能打出。 NL guardianmod:提防 !GuardianSecondM! 。 NL 获得 !M! 层 荆棘 。", + "EXTENDED_DESCRIPTION": [ + "需要更多格挡。" + ] + }, + "Guardian:SentryBeam": { + "NAME": "哨卫射线", + "DESCRIPTION": "造成 !D! 点伤害。 NL guardianmod:凝滞 1张 *哨卫震荡 。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "造成 !D! 点伤害。 NL guardianmod:凝滞 1张 *哨卫震荡+ 。 NL 消耗 。" + }, + "Guardian:SentryWave": { + "NAME": "哨卫震荡", + "DESCRIPTION": "给予 !M! 层 虚弱 。 NL guardianmod:凝滞 1张 *哨卫射线 。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "给予 !M! 层 虚弱 。 NL guardianmod:提防 2。 NL guardianmod:凝滞 1张 *哨卫射线+ 。 NL 消耗 。" + }, + "Guardian:CompilePackage": { + "NAME": "完整组件", + "DESCRIPTION": "选择1套 guardianmod:组件 牌并 guardianmod:凝滞 之。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "选择1套已升级的 guardianmod:组件 牌并 guardianmod:凝滞 之。 NL 消耗 。", + "EXTENDED_DESCRIPTION": [ + "选择1张组件。" + ] + }, + "Guardian:PackageShapes": { + "NAME": "组件: 机械", + "DESCRIPTION": "获得 *时间炸弹 、 *荆棘协议 与 *反冲协议 各1张。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "获得 *时间炸弹+ 、 *荆棘协议+ 与 *反冲协议+ 各1张。 NL 消耗 。" + }, + "Guardian:PackageDonuDeca": { + "NAME": "组件: 先古", + "DESCRIPTION": "获得 *过载 、 *先古之力 与 *先古造物 各1张。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "获得 *过载+ 、 *先古之力+ 与 *先古造物+ 各1张。 NL 消耗 。" + }, + "Guardian:PackageSphere": { + "NAME": "组件: 圆球", + "DESCRIPTION": "获得 *球形护盾 、 *固化 与 *浮动圆球 各1张。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "获得 *球形护盾+ 、 *固化+ 与 *浮动圆球+ 各1张。 NL 消耗 。" + }, + "Guardian:PackageSentry": { + "NAME": "组件: 哨卫", + "DESCRIPTION": "获得1张 *哨卫射线 与2张 *哨卫震荡 。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "获得1张 *哨卫射线+ 与2张 *哨卫震荡+ 。 NL 消耗 。" + }, + "Guardian:PackageWalker": { + "NAME": "组件: 行者", + "DESCRIPTION": "获得 *行者圆球 、 *行者爪击 与 *焚烧 各1张。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "获得 *行者圆球+ 、 *行者爪击+ 与 *焚烧+ 各1张。 NL 消耗 。" + }, + "Guardian:PackageAutomaton": { + "NAME": "组件: 铜械", + "DESCRIPTION": "获得 *究极射线 、 *铜制圆球 与 *弹性护甲 各1张。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "获得 *究极射线+ 、 *铜制圆球+ 与 *弹性护甲+ 各1张。 NL 消耗 。" + }, + "Guardian:PackageDefect": { + "NAME": "组件: 故障", + "DESCRIPTION": "获得 *重分配 , *预编程 与 *时间容器 各1张。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "获得 *重分配+ , *预编程+ 与 *时间容器+ 各1张。 NL 消耗 。" + }, + "Guardian:Planning": { + "NAME": "规划", + "DESCRIPTION": "guardianmod:凝滞 抽牌堆顶部 !M! 张牌。" + }, + "Guardian:Recover": { + "NAME": "恢复", + "DESCRIPTION": "获得 !B! 点 格挡 。 NL guardianmod:提防 !M! 。 NL guardianmod:凝滞 弃牌堆1张牌。" + }, + "Guardian:Emergency": { + "NAME": "应急", + "DESCRIPTION": "guardianmod:加速 所有 guardianmod:凝滞 中的牌。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "guardianmod:加速 所有 guardianmod:凝滞 中的牌2次。 NL 消耗 。" + }, + "Guardian:Clone": { + "NAME": "克隆", + "DESCRIPTION": "guardianmod:凝滞 1张手牌的复制品。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "guardianmod:凝滞 1张手牌的复制品。 NL guardianmod:加速 。 NL 消耗 。" + }, + "Guardian:Preprogram": { + "NAME": "预编程", + "DESCRIPTION": "查看抽牌堆顶部 !M! 张牌, NL 可 guardianmod:凝滞 其中1张。" + }, + "Guardian:GemFinder": { + "NAME": "宝石发现", + "DESCRIPTION": "虚无 。 NL 战斗结束后, NL 你可以将1 张随机 guardianmod:宝石 加入牌组。" + }, + "Guardian:StasisField": { + "NAME": "凝滞屏障", + "DESCRIPTION": "获得 !B! 点 格挡 。 NL 将本牌 guardianmod:凝滞 。 " + }, + "Guardian:StasisStrike": { + "NAME": "凝滞打击", + "DESCRIPTION": "造成 !D! 点伤害。 NL 获得1个 guardianmod:凝滞 栏位。" + }, + "Guardian:FuturePlans": { + "NAME": "未来计划", + "DESCRIPTION": "回合结束时, NL 可 guardianmod:凝滞 1张手牌。", + "UPGRADE_DESCRIPTION": " 固有 。 NL 回合结束时, NL 可 guardianmod:凝滞 1张手牌。" + }, + "Guardian:Suspension": { + "NAME": "挂起", + "DESCRIPTION": "获得 !B! 点 格挡 。 NL guardianmod:凝滞 1张手牌。", + "UPGRADE_DESCRIPTION": "获得 !B! 点 格挡 。 NL guardianmod:凝滞 1张手牌。" + }, + "Guardian:FastForward": { + "NAME": "时掣", + "DESCRIPTION": " guardianmod:加速 !M! 次。", + "UPGRADE_DESCRIPTION": "保留 。 NL guardianmod:加速 !M! 次。" + }, + "Guardian:TimeCapacitor": { + "NAME": "时间容器", + "DESCRIPTION": "获得 !M! 个 guardianmod:凝滞 栏位。" + }, + "Guardian:ConstructionForm": { + "NAME": "造物形态", + "DESCRIPTION": "虚无 。 NL 获得 !M! 层 guardianmod:缓冲 。 NL 回合开始时若有X层 guardianmod:缓冲 ,获得X层 力量 。 NL X为你的 造物形态 层数。", + "UPGRADE_DESCRIPTION": "获得 !M! 层 guardianmod:缓冲 。 NL 回合开始时若有X层 guardianmod:缓冲 ,获得X层 力量 。 NL X为你的 造物形态 层数。" + }, + "Guardian:RollAttack": { + "NAME": "翻滚攻击", + "DESCRIPTION": "造成 !D! 点伤害。 NL 若处于 guardianmod:防御模式 , NL 造成群体伤害, NL 否则 guardianmod:提防 8 。" + }, + "Guardian:GemFire": { + "NAME": "宝石加农炮", + "DESCRIPTION": "造成 !D! 点伤害。 NL 触发所有 guardianmod:宝石 效果。 NL 消耗 。", + "UPGRADE_DESCRIPTION": " NL (造成 !M! 次)" + }, + "Guardian:ChargeCore": { + "NAME": "充能核心", + "DESCRIPTION": "造成 !D! 点伤害。 NL 将本牌 guardianmod:凝滞 。 NL guardianmod:滴答 :抽1张牌。 guardianmod:消散 。" + }, + "Guardian:Reroute": { + "NAME": "重分配", + "DESCRIPTION": "造成 !D! 点伤害。 NL guardianmod:凝滞 打出的下1张非 消耗 攻击或技能牌。" + }, + "Guardian:PiercingHide": { + "NAME": "隐秘荆棘", + "DESCRIPTION": "获得 !B! 点 格挡 。 NL 获得 !M! 层 guardianmod:临时 荆棘 。 NL guardianmod:提防 3 。", + "UPGRADE_DESCRIPTION": "获得 !B! 点 格挡 。 NL 获得 !M! 层 guardianmod:临时 荆棘 。 NL guardianmod:提防 4。" + }, + "Guardian:ShieldSpikes": { + "NAME": "荆棘装甲", + "DESCRIPTION": "获得 !B! 点 格挡 。 NL guardianmod:提防 8。 NL 若处于 guardianmod:防御模式 , NL 获得 !M! 层 荆棘 。 NL guardianmod:提防 8。" + }, + "Guardian:PrismaticBeam": { + "NAME": "缤纷碎块", + "DESCRIPTION": "本牌每 guardianmod:镶嵌 1 颗 guardianmod:宝石 ,造成 !D! 点伤害 1 次。" + }, + "Guardian:PrismaticBarrier": { + "NAME": "缤纷眩盾", + "DESCRIPTION": "本牌每 guardianmod:镶嵌 1 颗 guardianmod:宝石 ,获得 !B! 点 格挡 。" + }, + "Guardian:TemporalStrike": { + "NAME": "时流打击", + "DESCRIPTION": "造成 !D! 点伤害。 NL 若有牌被 guardianmod:凝滞 , NL 获得 [E] 。", + "UPGRADE_DESCRIPTION": "造成 !D! 点伤害。 NL 若有牌被 guardianmod:凝滞 , NL 获得 [E] 。" + }, + "Guardian:TemporalShield": { + "NAME": "时流屏障", + "DESCRIPTION": "获得 !B! 点 格挡 。 NL guardianmod:加速 。" + }, + "Guardian:ExploitGems": { + "NAME": "宝石利用", + "DESCRIPTION": "抽一张牌。" + }, + "Guardian:RefractedBeam": { + "NAME": "折射射线", + "DESCRIPTION": "造成 !D! 点伤害 !M! 次。 NL 能被多次升级。 NL 每次升级+1:" + }, + "Guardian:MultiBeam": { + "NAME": "多重射线", + "DESCRIPTION": "对所有敌人造成 !D! 点伤害 X 次。 NL guardianmod:滴答 : NL 本场战斗伤害加 !M! 。" + }, + "Guardian:BaubleBeam": { + "NAME": "鳞片爆破", + "DESCRIPTION": "造成 !D! 点伤害。 NL 本牌触发 guardianmod:宝石 效果 !M! 次:" + }, + "Guardian:PrimingBeam": { + "NAME": "起爆", + "DESCRIPTION": "造成 !D! 点伤害。 NL guardianmod:提防 !M! 。" + }, + "Guardian:EvasiveProtocol": { + "NAME": "闪避协议", + "DESCRIPTION": "当你进入 guardianmod:防御模式 时, NL 失去所有负面效果 !M! 层。 NL guardianmod:提防 !GuardianSecondM!。", + "UPGRADE_DESCRIPTION": "当你进入 guardianmod:防御模式 时, NL 失去所有负面效果 !M! 层。 NL guardianmod:提防 !GuardianSecondM!。" + }, + "Guardian:SpikerProtocol": { + "NAME": "荆棘协议", + "DESCRIPTION": "当你进入 guardianmod:防御模式 时, NL 获得 !M! 层 荆棘 。 NL guardianmod:提防 6。", + "UPGRADE_DESCRIPTION": "当你进入 guardianmod:防御模式 时, NL 获得 !M! 层 荆棘 。 NL guardianmod:提防 9。" + }, + "Guardian:ArmoredProtocol": { + "NAME": "装甲协议", + "DESCRIPTION": "处于 guardianmod:防御模式 时, NL 拥有 !M! 层 *金属化 。 NL 回合开始时 guardianmod:提防 3。" + }, + "Guardian:TimeSifter": { + "NAME": "时间沙漏", + "DESCRIPTION": "回合开始时 guardianmod:加速 。", + "UPGRADE_DESCRIPTION": "固有 。 NL 回合开始时 guardianmod:加速 。" + }, + "Guardian:AncientConstruct": { + "NAME": "先古造物", + "DESCRIPTION": "获得1层 人工制品 。 NL 回合开始时若无 人工制品 ,获得 !M! 层。", + "UPGRADE_DESCRIPTION": "获得1层 人工制品 。 NL 回合开始时若无 人工制品 ,获得 !M! 层。" + }, + "Guardian:CrystalBeam": { + "NAME": "水晶射线", + "DESCRIPTION": "造成 !D! 点伤害。 NL 牌组每有1枚 guardianmod:宝石 , NL 额外造成 !M! 点。" + }, + "Guardian:Gem_Synthetic": { + "NAME": "玛瑙", + "DESCRIPTION": "guardianmod:宝石 。 NL 失去所有负面效果1层。", + "UPGRADE_DESCRIPTION": "失去所有负面效果1层。" + }, + "Guardian:Gem_Yellow": { + "NAME": "琥珀", + "DESCRIPTION": " guardianmod:宝石 。 NL guardianmod:加速 。", + "UPGRADE_DESCRIPTION": " guardianmod:加速 。" + }, + "Guardian:Gem_Purple": { + "NAME": "紫晶", + "DESCRIPTION": " guardianmod:宝石 。 NL 本回合所有敌人失去 2 层 力量 。", + "UPGRADE_DESCRIPTION": "本回合所有敌人失去 2 层 力量 。" + }, + "Guardian:Gem_Crimson": { + "NAME": "石榴石", + "DESCRIPTION": " guardianmod:宝石 。 NL 给予所有敌人 1 层 易伤 。", + "UPGRADE_DESCRIPTION": "给予所有敌人 1 层 易伤 。" + }, + "Guardian:Gem_Blue": { + "NAME": "蓝宝石", + "DESCRIPTION": " guardianmod:宝石 。 NL guardianmod:提防 4。", + "UPGRADE_DESCRIPTION": "guardianmod:提防 4。" + }, + "Guardian:Gem_Fragmented": { + "NAME": "宝石碎片", + "DESCRIPTION": " guardianmod:宝石 。 NL 获得 *水晶小刀 。", + "UPGRADE_DESCRIPTION": "获得 *水晶小刀 。" + }, + "Guardian:CrystalShiv": { + "NAME": "水晶小刀", + "DESCRIPTION": "造成 !D! 点伤害。 NL 消耗 。" + }, + "Guardian:CrystalWard": { + "NAME": "水晶护卫", + "DESCRIPTION": "获得 !B! 点 格挡 。 NL 消耗 。" + }, + "Guardian:Repulse": { + "NAME": "反冲协议", + "DESCRIPTION": "每回合第1次抽到 NL 状态 或 诅咒 牌时,将其 消耗 并抽1张牌。", + "UPGRADE_DESCRIPTION": "每回合第1次抽到 NL 状态 或 诅咒 牌时,将其 消耗 并抽1张牌。" + }, + "Guardian:BronzeOrb": { + "NAME": "铜球支援", + "DESCRIPTION": "造成 !D! 点伤害。 NL guardianmod:提防 等同于造成的未被格挡的伤害。 NL 消耗 。" + }, + "Guardian:SphericShield": { + "NAME": "球形护盾", + "DESCRIPTION": "获得 !B! 点 格挡 。 NL 进入 guardianmod:防御模式 。 NL 消耗 。" + }, + "Guardian:RevengeProtocol": { + "NAME": "复仇协议", + "DESCRIPTION": "当你进入 guardianmod:防御模式 时, NL 获得 !M! 层 力量 。 NL 回合开始时 guardianmod:提防 !GuardianSecondM! 。" + }, + "Guardian:GatlingBeam": { + "NAME": "炮塔射线", + "DESCRIPTION": "造成 !D! 点伤害。 NL 将本牌 guardianmod:凝滞 。 NL 本牌 guardianmod:凝滞 时持续 !M! 回合。 NL guardianmod:滴答 : NL 随机造成 !D! 点伤害。" + }, + "Guardian:ShieldCharger": { + "NAME": "护盾充能", + "DESCRIPTION": "将本牌 guardianmod:凝滞 。 NL guardianmod:滴答 : NL guardianmod:提防 !M! 。 NL 获得 !B! 点 格挡 。 NL guardianmod:消散 。" + }, + "Guardian:StasisEngine": { + "NAME": "凝滞引擎", + "DESCRIPTION": "每回合打出第 3 张0耗能牌时,获得 [E] 并抽1张牌。", + "UPGRADE_DESCRIPTION": "固有 。 NL 每回合打出第 3 张0耗能牌时,获得 [E] 并抽1张牌。" + }, + "Guardian:GemstoneGunCard": { + "NAME": "宝石枪", + "DESCRIPTION": "保留 。", + "UPGRADE_DESCRIPTION": " NL 消耗 。" + }, + "Guardian:BodySlam": { + "NAME": "全身猛撞", + "DESCRIPTION": "获得 !B! 点 格挡 , NL 造成当前 格挡 值点伤害 。", + "UPGRADE_DESCRIPTION": " NL (造成 !D! 点伤害)" + }, + "Guardian:SecondStrike": { + "NAME": "再斩", + "DESCRIPTION": "虚无 。 NL 造成 !D! 点伤害。 NL 消耗 。" + }, + "Guardian:SecondStrikePreviewCard": { + "NAME": "再斩", + "DESCRIPTION": "虚无 。 NL 造成 !D! 点伤害。 NL 触发 *双斩 中的 *宝石 效果。 NL 消耗 。" + }, + "Guardian:StrikeForStrike": { + "NAME": "应击打击", + "DESCRIPTION": "造成 !D! 点伤害, NL 目标以 !M! 点伤害攻击你。" + }, + "Guardian:GearUp": { + "NAME": "预防", + "DESCRIPTION": "保留 。 NL guardianmod:提防 !M! 。 NL 消耗 。" + }, + "Guardian:Metallicize": { + "NAME": "固化", + "DESCRIPTION": "获得 !M! 层 expansioncontent:多层护甲 。" + }, + "Guardian:PackageConstruct": { + "NAME": " !!!!!!!!!!!! 以下为疑似弃用文本,为了保险起见防止游戏崩溃,暂未删除。 !!!!!!!!!!!! ", + "DESCRIPTION": " !!!!!!!!!!!! 以下为疑似弃用文本,为了保险起见防止游戏崩溃,暂未删除。 !!!!!!!!!!!! ", + "DESCRIPTION": " !!!!!!!!!!!! 以下为疑似弃用文本,为了保险起见防止游戏崩溃,暂未删除。 !!!!!!!!!!!! ", + "UPGRADE_DESCRIPTION": " !!!!!!!!!!!! 以下为疑似弃用文本,为了保险起见防止游戏崩溃,暂未删除。 !!!!!!!!!!!! " + }, + "Guardian:PackageMass": { + "NAME": "组件: 团块", + "DESCRIPTION": "弃用", + "UPGRADE_DESCRIPTION": "弃用" + }, + "Guardian:HammerDown": { + "NAME": "坠落重锤", + "DESCRIPTION": "弃用" + }, + "Guardian:OmegaCannon": { + "NAME": "终极加农炮", + "DESCRIPTION": "弃用" + }, + "Guardian:ModeShift": { + "NAME": "模式切换", + "DESCRIPTION": "弃用", + "UPGRADE_DESCRIPTION": "弃用" + }, + "Guardian:MassOfThorns": { + "NAME": "团状荆棘", + "DESCRIPTION": "弃用" + }, + "Guardian:MassTimeBomb": { + "NAME": "团状炸弹", + "DESCRIPTION": "弃用", + "UPGRADE_DESCRIPTION": "弃用" + }, + "Guardian:MassSlam": { + "NAME": "合体撞击", + "DESCRIPTION": "弃用" + } +} diff --git a/src/main/resources/guardianResources/localization/zhs/CharacterStrings.json b/src/main/resources/guardianResources/localization/zhs/CharacterStrings.json index 43c85bbdb..4fb555ed0 100644 --- a/src/main/resources/guardianResources/localization/zhs/CharacterStrings.json +++ b/src/main/resources/guardianResources/localization/zhs/CharacterStrings.json @@ -9,7 +9,7 @@ "[ 孔位 ]", "在一条昏暗的街上,你遇见几个戴着兜帽的人在进行某种黑暗的仪式。当你靠近时,他们全都同时转身面对你,让你觉得十分诡异。 其中个子最高的一个微微一笑,露出了长长的尖牙,向你伸出了一只苍白而瘦长的手: NL ~“加入我们,高塔守护者。一起来感受高塔的温暖吧。”~", "防御模式", - "你暂时拥有 #b3 层 #y荆棘 ,且回合结束时 #y格挡 不会消失。", + "拥有 #b3 层 #y荆棘 。回合结束时 #y格挡 不会消失。", "~错误:~ #r凝滞 正在进程中。" ], "KEYWORDS": [ diff --git a/src/main/resources/guardianResources/localization/zhs/KeywordStrings.json b/src/main/resources/guardianResources/localization/zhs/KeywordStrings.json index 231432820..a6aa36664 100644 --- a/src/main/resources/guardianResources/localization/zhs/KeywordStrings.json +++ b/src/main/resources/guardianResources/localization/zhs/KeywordStrings.json @@ -1,86 +1,80 @@ -[ - { - "NAMES": [ - "镶嵌" - ], - "PROPER_NAME": "镶嵌", - "DESCRIPTION": " #y宝石 能够被 #y镶嵌 进有 #y孔位 的牌上,使其效果附加于牌。" - }, - { - "NAMES": [ - "stasis", - "凝滞" - ], - "PROPER_NAME": "凝滞", - "DESCRIPTION": "将牌挂起并从其耗能+ #b1 开始倒计时,每回合减 #b1 。 NL 归零时,将其返回手牌且单次耗能为 #b0 。" - }, - { - "NAMES": [ - "宝石", - "gem", - "gems" - ], - "PROPER_NAME": "宝石", - "DESCRIPTION": " #y宝石 能在 #y休息处 被 #y镶嵌 至有 #y孔位 的牌上,且无法被 #y升级 。" - }, - { - "PROPER_NAME": "防御模式", - "NAMES": [ - "defensive mode", - "defensive_mode", - "防御模式" - ], - "DESCRIPTION": "#y姿态 。 NL 进入 #y防御模式 时,获得 #b20 点 #y格挡 。NL 处于 #y防御模式 时:拥有 #b3 层 #y荆棘 ,且回合结束时 #y格挡 不会消失。" - }, - { - "NAMES": [ - "accelerate", - "加速" - ], - "PROPER_NAME": "加速", - "DESCRIPTION": "最右端被 #y凝滞 牌的倒计点数减 #b1 。" - }, - { - "NAMES": [ - "组件" - ], - "PROPER_NAME": "组件", - "DESCRIPTION": "一系列 #b0 耗能 消耗 技能牌,可将 #b3 张同体系牌加入手牌。" - }, - { - "NAMES": [ - "临时" - ], - "PROPER_NAME": "临时", - "DESCRIPTION": "只持续 #b1 回合,即同时获得等量层,回合结束时剥夺增益的 #r负面效果 。" - }, - { - "NAMES": [ - "消散", - "挥发" - ], - "PROPER_NAME": "消散", - "DESCRIPTION": "本牌结束 #y凝滞 时,被 #y消耗 而非返回手牌。" - }, - { - "NAMES": [ - "滴答" - ], - "PROPER_NAME": "滴答", - "DESCRIPTION": "被 #y凝滞 的牌倒计点数减少时,触发该效果。" - }, - { - "NAMES": [ - "缓冲" - ], - "PROPER_NAME": "缓冲", - "DESCRIPTION": "阻止你下次失去生命。" - }, - { - "NAMES": [ - "提防" - ], - "PROPER_NAME": "提防", - "DESCRIPTION": "降低进入 #y防御模式 所需生命损失。" - } -] +[ + { + "NAMES": [ + "镶嵌" + ], + "PROPER_NAME": "镶嵌", + "DESCRIPTION": " #y宝石 能够被 #y镶嵌 进有 #y孔位 的牌上,使其效果附加于牌。" + }, + { + "NAMES": [ + "凝滞" + ], + "PROPER_NAME": "凝滞", + "DESCRIPTION": "省流:过几回合免费打出。 NL 一张牌被 #y凝滞 时其获得一个计数器。倒计点数等于其耗能加 #b1 点,每回合开始时减少 #b1 点。 NL 归零时,将其返回手牌且单次耗能为 #b0 。" + }, + { + "NAMES": [ + "宝石" + ], + "PROPER_NAME": "宝石", + "DESCRIPTION": " #y宝石 能在 #y休息处 被 #y镶嵌 至有 #y孔位 的牌上。不能被 #y升级 。" + }, + { + "PROPER_NAME": "防御模式", + "NAMES": [ + "防御模式" + ], + "DESCRIPTION": "#y姿态 。 NL 当你进入 #y防御模式 ,获得 #b16 点 #y格挡 。 NL 处于 #y防御模式 时:拥有 #b3 层 #y荆棘,在回合结束时 #y格挡 不会消失。" + }, + { + "NAMES": [ + "加速" + ], + "PROPER_NAME": "加速", + "DESCRIPTION": "降低最右端被 #y凝滞 牌的倒计点数 #b1 点。若归零, 将其返回手牌且单次耗能为 #b0 。" + }, + { + "NAMES": [ + "组件" + ], + "PROPER_NAME": "组件", + "DESCRIPTION": "一系列 #b0 耗能 消耗 技能牌,可将 #b3 张同体系牌加入手牌。" + }, + { + "NAMES": [ + "临时" + ], + "PROPER_NAME": "临时", + "DESCRIPTION": "只持续 #b1 回合,即同时获得等量层,回合结束时剥夺增益的 #r负面效果 。" + }, + { + "NAMES": [ + "消散", + "挥发" + ], + "PROPER_NAME": "消散", + "DESCRIPTION": "本牌结束 #y凝滞 时,被 #y消耗 而非返回手牌。" + }, + { + "NAMES": [ + "滴答" + ], + "PROPER_NAME": "滴答", + "DESCRIPTION": "被 #y凝滞 牌倒计点数减少时,触发该效果。" + }, + { + "NAMES": [ + "缓冲" + ], + "PROPER_NAME": "缓冲", + "DESCRIPTION": "阻止你下次失去生命。" + }, + { + "NAMES": [ + "提防" + ], + "PROPER_NAME": "提防", + "DESCRIPTION": "降低进入 #y防御模式 所需生命损失,需求变为 #b0 时直接进入。" + } +] diff --git a/src/main/resources/guardianResources/localization/zhs/PowerStrings.json b/src/main/resources/guardianResources/localization/zhs/PowerStrings.json index ddfc848e2..371b4dbd9 100644 --- a/src/main/resources/guardianResources/localization/zhs/PowerStrings.json +++ b/src/main/resources/guardianResources/localization/zhs/PowerStrings.json @@ -1,213 +1,214 @@ -{ - "Guardian:NextTurnGainTemporaryStrengthPower": { - "NAME": "充能", - "DESCRIPTIONS": [ - "你的下回合开始时,获得 #b", - " 层 #y临时 #y力量 。" - ] - }, - "Guardian:StunnedPower": { - "NAME": "眩晕", - "DESCRIPTIONS": [ - "跳过你的下回合。", - "跳过你下 #b", - " 个回合。" - ] - }, - "Guardian:FloatingOrbsPower": { - "NAME": "浮动圆球", - "DESCRIPTIONS": [ - "每当你打出一张 #b0 耗能牌,随机对一名敌人造成 #b", - " 点伤害。" - ] - }, - "Guardian:OrbwalkPower": { - "NAME": "圆球回转", - "DESCRIPTIONS": [ - "每回合开始时获得 ", - " 点力量。" - ] - }, - "Guardian:ClonePower": { - "NAME": "重分配", - "DESCRIPTIONS": [ - "将本回合打出的下张打出后会进入弃牌堆的牌 #y凝滞 。", - "将本回合打出的下 #b", - " 张牌打出后会进入弃牌堆的牌 #y凝滞 。" - ] - }, - "Guardian:GemFinderPower": { - "NAME": "开采宝石", - "DESCRIPTIONS": [ - "战斗结束后,可额外将一颗 #y宝石 加入牌组。", - "战斗结束后,可额外将 #b", - " 颗 #y宝石 加入牌组。" - ] - }, - "Guardian:FuturePlansPower": { - "NAME": "未来计划", - "DESCRIPTIONS": [ - "你的回合结束时,可选择 #b", - " 张牌 #y凝滞 。", - " 张牌 #y凝滞 。" - ] - }, - "Guardian:DefenseModePower": { - "NAME": "防御模式", - "DESCRIPTIONS": [ - " 防御模式会维持 #b", - " 个回合。 NL 期间你拥有 ", - " 层荆棘但降低 25% 的伤害。每打出一张牌获得 2 点格挡。" - ] - }, - "Guardian:ConstructModePower": { - "NAME": "造物形态", - "DESCRIPTIONS": [ - "你的回合开始时,若你有 #y缓冲 ,获得 #b", - " 点 #y力量 。" - ] - }, - "Guardian:MultiBoostPower": { - "NAME": "多重促进", - "DESCRIPTIONS": [ - "多次造成伤害的攻击会造成额外进行 1 次。", - "多次造成伤害的攻击会造成额外进行 ", - " 次。" - ] - }, - "Guardian:TargetedPower": { - "NAME": "标记", - "DESCRIPTIONS": [ - "每当这个敌人受伤时, 本回合获得 ", - " 层临时力量。" - ] - }, - "Guardian:LoseThornsPower": { - "NAME": "蜕刺", - "DESCRIPTIONS": [ - "下回合开始时,失去 #b", - " 层荆棘。" - ] - }, - "Guardian:BeamBuffPower": { - "NAME": "装填", - "DESCRIPTIONS": [ - " #y射线 牌额外造成 ", - " 点伤害。" - ] - }, - "Guardian:DefensiveModeBuffsPower": { - "NAME": "防御模式+", - "DESCRIPTIONS": [ - "在防御模式的基础上, 防御模式+将获得: NL ", - " 层荆棘。", - " 点敏捷。", - " 点格挡于回合结束时。", - "消耗在每回合抽到的第 #b1 张状态或诅咒牌", - "消耗在每回合抽到的第 #b", - " 张状态或诅咒牌 ", - "当 防御模式 结束时 ", - " 点 临时 力量 。" - ] - }, - "Guardian:AutomayhemPower": { - "NAME": "时间沙漏", - "DESCRIPTIONS": [ - "回合开始时, #y加速 #b1 次。", - "回合开始时, #y加速 #b", - " 次。" - ] - }, - "Guardian:ConstructPower": { - "NAME": "先古造物", - "DESCRIPTIONS": [ - "若回合开始时你没有 #y人工制品 ,获得 #b", - " 层", - "。" - ] - }, - "Guardian:ModeShiftPower": { - "NAME": "模式转换", - "DESCRIPTIONS": [ - "再失去 #b", - " 点生命后,进入 #y防御模式 。" - ] - }, - "Guardian:ExhaustStatusesPower": { - "NAME": "反冲协议", - "DESCRIPTIONS": [ - "消耗每回合抽到的第 #b1 张 状态牌 或 诅咒 并抽 #b1 张牌。", - "消耗每回合抽到的前 #b", - " 张 状态牌 或 诅咒 并抽等量的牌。" - ] - }, - "Guardian:RevengePower": { - "NAME": "复仇协议", - "DESCRIPTIONS": [ - "你的回合开始时,提防 #b", - " 。" - ] - }, - "Guardian:StasisEnginePower": { - "NAME": "凝滞引擎", - "DESCRIPTIONS": [ - "每回合打出第 #b3 张 #b0 耗能牌时,获得 #b", - " [E] 并抽 #b", - " 张牌", - " 张牌", - "。" - ] - }, - "Guardian:EnergizedGuardianPower": { - "NAME": "能量提升", - "DESCRIPTIONS": [ - "下回合额外获得 #b", - " 点 [E] 。", - " 点 [E] 。", - " - 翻译注意: - 如需区分单复数,则上面的是复数。" - ] - }, - "Guardian:BlockOnCardUsePower": { - "NAME": "抛光油", - "DESCRIPTIONS": [ - "本回合每当你打出 #b1 张牌,获得 #b", - " 点 #y格挡 。" - ] - }, - "Guardian:EvasiveProtocolPower": { - "NAME": "闪避协议", - "DESCRIPTIONS": [ - "处于 #y防御模式 时,临时拥有 #b", - " 层 #y敏捷 。" - ] - }, - "Guardian:SpikerProtocolPower": { - "NAME": "荆棘协议", - "DESCRIPTIONS": [ - "处于 #y防御模式 时,临时拥有 #b", - " 层 #y荆棘 。" - ] - }, - "Guardian:ArmoredProtocolPower": { - "NAME": "装甲协议", - "DESCRIPTIONS": [ - "处于 #y防御模式 时,临时拥有 #b", - " 层 #y金属化 。" - ] - }, - "Guardian:DontLeaveDefensiveModePower": { - "NAME": "处于防御模式", - "DESCRIPTIONS": [ - "你将在下回合开始时退出 #y防御模式 。", - "你将在 #b", - " 个回合后退出 #y防御模式 。" - ] - }, - "Guardian:BracePerTurnPower": { - "NAME": "防备", - "DESCRIPTIONS": [ - "你的回合开始时,提防 #b", - " 。" - ] - } -} +{ + "Guardian:NextTurnGainTemporaryStrengthPower": { + "NAME": "充能", + "DESCRIPTIONS": [ + "你的下回合开始时,获得 #b", + " 层 #y临时 #y力量 。" + ] + }, + "Guardian:StunnedPower": { + "NAME": "眩晕", + "DESCRIPTIONS": [ + "跳过你的下回合。", + "跳过你下 #b", + " 个回合。" + ] + }, + "Guardian:FloatingOrbsPower": { + "NAME": "浮动圆球", + "DESCRIPTIONS": [ + "每当你打出一张 #b0 耗能牌,随机对一名敌人造成 #b", + " 点伤害。" + ] + }, + "Guardian:OrbwalkPower": { + "NAME": "圆球回转", + "DESCRIPTIONS": [ + "每回合开始时获得 ", + " 点力量。" + ] + }, + "Guardian:ClonePower": { + "NAME": "重分配", + "DESCRIPTIONS": [ + "将本回合打出的下张打出后会进入弃牌堆的牌 #y凝滞 。", + "将本回合打出的下 #b", + " 张牌打出后会进入弃牌堆的牌 #y凝滞 。" + ] + }, + "Guardian:GemFinderPower": { + "NAME": "开采宝石", + "DESCRIPTIONS": [ + "战斗结束后,你可以将1颗普通 #y宝石 加入牌组。", + "战斗结束后,你可以将 #b", + " 颗普通 #y宝石 加入牌组。" + ] + }, + "Guardian:FuturePlansPower": { + "NAME": "未来计划", + "DESCRIPTIONS": [ + "你的回合结束时,可选择 #b", + " 张牌 #y凝滞 。", + " 张牌 #y凝滞 。" + ] + }, + "Guardian:DefenseModePower": { + "NAME": "防御模式", + "DESCRIPTIONS": [ + " 防御模式会维持 #b", + " 个回合。 NL 期间你拥有 ", + " 层荆棘但降低 25% 的伤害。每打出一张牌获得 2 点格挡。" + ] + }, + "Guardian:ConstructModePower": { + "NAME": "造物形态", + "DESCRIPTIONS": [ + "回合开始时,若你有至少 #b", + " 层 #y缓冲, 获得 #b", + " 点 #y力量 。" + ] + }, + "Guardian:MultiBoostPower": { + "NAME": "多重促进", + "DESCRIPTIONS": [ + "多次造成伤害的攻击会造成额外进行 1 次。", + "多次造成伤害的攻击会造成额外进行 ", + " 次。" + ] + }, + "Guardian:TargetedPower": { + "NAME": "标记", + "DESCRIPTIONS": [ + "每当这个敌人受伤时, 本回合获得 ", + " 层临时力量。" + ] + }, + "Guardian:LoseThornsPower": { + "NAME": "蜕刺", + "DESCRIPTIONS": [ + "下回合开始时,失去 #b", + " 层荆棘。" + ] + }, + "Guardian:BeamBuffPower": { + "NAME": "装填", + "DESCRIPTIONS": [ + " #y射线 牌额外造成 ", + " 点伤害。" + ] + }, + "Guardian:DefensiveModeBuffsPower": { + "NAME": "防御模式+", + "DESCRIPTIONS": [ + "在防御模式的基础上, 防御模式+将获得: NL ", + " 层荆棘。", + " 点敏捷。", + " 点格挡于回合结束时。", + "消耗在每回合抽到的第 #b1 张状态或诅咒牌", + "消耗在每回合抽到的第 #b", + " 张状态或诅咒牌 ", + "当 防御模式 结束时 ", + " 点 临时 力量 。" + ] + }, + "Guardian:AutomayhemPower": { + "NAME": "时间沙漏", + "DESCRIPTIONS": [ + "回合开始时, #y加速 #b1 次。", + "回合开始时, #y加速 #b", + " 次。" + ] + }, + "Guardian:ConstructPower": { + "NAME": "先古造物", + "DESCRIPTIONS": [ + "若回合开始时你没有 #y人工制品 ,获得 #b", + " 层", + "。" + ] + }, + "Guardian:ModeShiftPower": { + "NAME": "模式转换", + "DESCRIPTIONS": [ + "再失去 #b", + " 点生命后,进入 #y防御模式 并获得 #b10 点 #y格挡 。 若已处于 #y防御模式 ,不获得 #y格挡 但额外获得 #b1 回合持续时间。 NL 每次进入 #y防御模式 时,下次进入所需的生命损失增加 #b10 点。(上限 #b50 点)" + ] + }, + "Guardian:ExhaustStatusesPower": { + "NAME": "反冲协议", + "DESCRIPTIONS": [ + "消耗每回合抽到的第 #b1 张 状态牌 或 诅咒 并抽 #b1 张牌。", + "消耗每回合抽到的前 #b", + " 张 状态牌 或 诅咒 并抽等量的牌。" + ] + }, + "Guardian:RevengePower": { + "NAME": "复仇协议", + "DESCRIPTIONS": [ + "当你进入 #y防御模式 时,获得 #b", + " 点 #y力量 。" + ] + }, + "Guardian:StasisEnginePower": { + "NAME": "凝滞引擎", + "DESCRIPTIONS": [ + "每回合打出第 #b3 张 #b0 耗能牌时,获得 #b", + " [E] 并抽 #b", + " 张牌", + " 张牌", + "。" + ] + }, + "Guardian:EnergizedGuardianPower": { + "NAME": "能量提升", + "DESCRIPTIONS": [ + "下回合额外获得 #b", + " 点 [E] 。", + " 点 [E] 。", + " - 翻译注意: - 如需区分单复数,则上面的是复数。" + ] + }, + "Guardian:BlockOnCardUsePower": { + "NAME": "抛光油", + "DESCRIPTIONS": [ + "本回合每当你打出 #b1 张牌,获得 #b", + " 点 #y格挡 。" + ] + }, + "Guardian:EvasiveProtocolPower": { + "NAME": "闪避协议", + "DESCRIPTIONS": [ + "当你进入 #y防御模式 时,降低所有负面效果 #b", + " 层。" + ] + }, + "Guardian:SpikerProtocolPower": { + "NAME": "荆棘协议", + "DESCRIPTIONS": [ + "当你进入 #y防御模式 时,获得 #b", + " 层 #y荆棘 。" + ] + }, + "Guardian:ArmoredProtocolPower": { + "NAME": "装甲协议", + "DESCRIPTIONS": [ + "处于 #y防御模式 时,临时拥有 #b", + " 层 #y金属化 。" + ] + }, + "Guardian:DontLeaveDefensiveModePower": { + "NAME": "处于防御模式", + "DESCRIPTIONS": [ + "你将在本回合结束时退出 #y防御模式 。", + "你将在 #b", + " 个回合后退出 #y防御模式 。" + ] + }, + "Guardian:BracePerTurnPower": { + "NAME": "防备", + "DESCRIPTIONS": [ + "你的回合开始时,提防 #b", + " 。" + ] + } +} diff --git a/src/main/resources/guardianResources/localization/zhs/RelicStrings.json b/src/main/resources/guardianResources/localization/zhs/RelicStrings.json index 46ceaae4d..8237beb2a 100644 --- a/src/main/resources/guardianResources/localization/zhs/RelicStrings.json +++ b/src/main/resources/guardianResources/localization/zhs/RelicStrings.json @@ -1,126 +1,134 @@ -{ - "Guardian:ModeShifter": { - "NAME": "铜制齿轮", - "FLAVOR": "在你最需要的时候保护你。", - "DESCRIPTIONS": [ - "战斗开始时,获得一张 #y预防 。 NL 游戏开始时,将 #b1 颗普通 #yguardianmod:宝石 加入牌组。 " - ] - }, - "Guardian:ModeShifterPlus": { - "NAME": "守护者齿轮", - "FLAVOR": "每3000层更换一次", - "DESCRIPTIONS": [ - "替换 #r铜制齿轮 。 NL 战斗开始时,进入 #yguardianmod:防御模式 并持续 #b3 回合。" - ] - }, - "Guardian:DefensiveModeMoreBlock": { - "NAME": "铜制装甲板", - "FLAVOR": "装甲再多也不为过。", - "DESCRIPTIONS": [ - " #yguardianmod:提防 时额外 #y提防 #b1 。" - ] - }, - "Guardian:GemCopier": { - "NAME": "宝石不倒翁", - "FLAVOR": "只有最原始的人才会把玩。", - "DESCRIPTIONS": [ - "每当你打出 #b1 张 #yguardianmod:宝石 时,再打出 #b1 次。" - ] - }, - "Guardian:PocketSentry": { - "NAME": "便携哨兵", - "FLAVOR": "哨兵模式启动。获取目标成功。无慈悲。", - "DESCRIPTIONS": [ - "每 #b3 个回合,给予所有敌人 #b1 层 #y虚弱 。" - ] - }, - "Guardian:SackOfGems": { - "NAME": "宝石袋", - "FLAVOR": "噢……闪闪发光!", - "DESCRIPTIONS": [ - "拾起时,向牌组中加入 #b5 张随机 #yguardianmod:宝石 。" - ] - }, - "Guardian:StasisCodex": { - "NAME": "机械宝典", - "FLAVOR": "尖塔最早原型的设计和图表。", - "DESCRIPTIONS": [ - "回合结束时若无被 #y凝滞 的牌,从 #b3 张随机牌中选择 #b1 张牌 #yguardianmod:凝滞 。" - ] - }, - "Guardian:StasisSlotIncreaseRelic": { - "NAME": "警务亭", - "FLAVOR": "在里面的更大。。。", - "DESCRIPTIONS": [ - "战斗开始时,获得 #b2 个 #yguardianmod:凝滞 栏位。" - ] - }, - "Guardian:StasisSlotReductionRelic": { - "NAME": "悬浮机", - "FLAVOR": "这些自动机搜寻最棒的遗宝,但需要占用处理能力来维持运转。", - "DESCRIPTIONS": [ - "回合开始时获得 [E] 。 NL 战斗开始时,失去 #b1 个 #yguardianmod:凝滞 栏位。" - ] - }, - "Guardian:StasisUpgradeRelic": { - "NAME": "低温瓶", - "FLAVOR": "出来的东西总是比进去的好。", - "DESCRIPTIONS": [ - "战斗开始时,获得 #b1 个 #yguardianmod:凝滞 栏位。 #yguardianmod:凝滞 一张牌时,将其 #y升级 。" - ] - }, - "Guardian:BottledStasis": { - "NAME": "瓶装黑洞", - "FLAVOR": "在某个地方,一些不可思议的事情等待着人们去发现。", - "DESCRIPTIONS": [ - "拾起时,选择牌组中 #b1 张牌。 NL 战斗开始时,将其 #yguardianmod:凝滞 。", - "选择一张牌 ", - "战斗开始时,将牌组中一张 ", - " #y凝滞 。", - "瓶装的牌已被 #r移出 牌组,遗物已失效。" - ] - }, - "Guardian:StasisEgg": { - "NAME": "量子容器", - "FLAVOR": "你通过孵化鸡蛋而不是砸碎鸡蛋来获得鸡。", - "DESCRIPTIONS": [ - "拾起时,选择牌组 #b1 张牌。 NL 战斗开始时,将其移出牌组。第 #b4 回合开始时,将其 #b2 张复制品加入手牌。", - "选择一张牌 ", - "战斗开始时,将 ", - " 移出牌组。 第 #b4 回合开始时,将其 #b2 张复制品加入手牌。" - ] - }, - "Guardian:TickHelperRelic": { - "NAME": "冷却液", - "FLAVOR": "有公害,不要随便丢弃", - "DESCRIPTIONS": [ - "战斗开始时,获得 #b2 个 #yguardianmod:凝滞 栏位。牌被 #yguardianmod:凝滞 的回合计数器增加 #b2 点。" - ] - }, - "Guardian:PickAxe": { - "NAME": "星光采矿镐", - "FLAVOR": "有那么多宝石散落在尖塔中,很难想象有这么不幸的人需要这把镐来帮助他们。", - "DESCRIPTIONS": [ - "可在休息处挖掘一颗 #yguardianmod:宝石 。" - ] - }, - "Guardian:GemstoneGun": { - "NAME": "宝石枪", - "FLAVOR": "砰!砰!砰!嘿,我打中了三个!", - "DESCRIPTIONS": [ - "拾起时,可从 #b3 张随机 #yguardianmod:宝石 牌中选择 #b1 张,重复三次。 NL 战斗开始时,获得 #b1 张 #y镶嵌 有它们的 #b0 耗能 #y保留 #y消耗 牌。", - "选择宝石装入宝石枪" - ] - }, - "Guardian:BottledAnomaly": { - "NAME": "瓶装异常", - "FLAVOR": "旋转,旋转,最后破碎。", - "DESCRIPTIONS": [ - "拾起时,选择牌组 #b1 张牌。 NL 战斗开始时,将其移出牌组。第 #b3 回合开始时,再将其加入手牌并且本场战斗耗能变为 #b0 。", - "选择一张牌 ", - "战斗开始时,将 ", - " 移出牌组。第 #b3 回合开始时,再将其加入手牌并且本场战斗耗能变为 #b0 。", - "瓶装的牌已被 #r移出 牌组,遗物已失效。" - ] - } -} +{ + "Guardian:ModeShifter": { + "NAME": "铜制齿轮", + "FLAVOR": "在你最需要的时候保护你。", + "DESCRIPTIONS": [ + "战斗开始时,获得1张 #y预防 。 NL 游戏开始时,将 #b1 张普通 #yguardianmod:宝石 牌加入牌组。 " + ] + }, + "Guardian:ModeShifterPlus": { + "NAME": "守护者齿轮", + "FLAVOR": "每过3000层替换1次", + "DESCRIPTIONS": [ + "替换 ", + " 。 NL 战斗开始时,获得1张 #y预防 。 NL 每当你进入 #y防御模式 ,获得 [E] 并抽 #b2 张牌。" + ] + }, + "Guardian:ObsidianScales": { + "NAME": "黑曜鳞", + "FLAVOR": "用鲜血将天空染成漆黑,向所有出手者展开反击。", + "DESCRIPTIONS": [ + "战斗开始时,获得 #b3 点 #y荆棘 。每当你获得负面效果,获得 #b1 层 #y荆棘 。" + ] + }, + "Guardian:DefensiveModeMoreBlock": { + "NAME": "铜制装甲板", + "FLAVOR": "装甲再多也不为过。", + "DESCRIPTIONS": [ + " #yguardianmod:提防 时额外 #y提防 #b1 。" + ] + }, + "Guardian:GemCopier": { + "NAME": "宝石不倒翁", + "FLAVOR": "只有最原始的人才会把玩。", + "DESCRIPTIONS": [ + "每当你打出 #b1 张 #yguardianmod:宝石 时,再打出 #b1 次。" + ] + }, + "Guardian:PocketSentry": { + "NAME": "便携哨兵", + "FLAVOR": "哨兵模式启动。获取目标成功。无慈悲。", + "DESCRIPTIONS": [ + "每 #b3 个回合,给予所有敌人 #b1 层 #y虚弱 。" + ] + }, + "Guardian:SackOfGems": { + "NAME": "宝石袋", + "FLAVOR": "噢……闪闪发光!", + "DESCRIPTIONS": [ + "拾起时,你可以将至多 #b5 张随机 #yguardianmod:宝石 牌加入牌组。" + ] + }, + "Guardian:StasisCodex": { + "NAME": "机械宝典", + "FLAVOR": "尖塔最早原型的设计和图表。", + "DESCRIPTIONS": [ + "前3个回合结束时,若 #y凝滞 栏位未满,从 #b3 张随机牌中选择 #b1 张牌 #yguardianmod:凝滞 。" + ] + }, + "Guardian:StasisSlotIncreaseRelic": { + "NAME": "警务亭", + "FLAVOR": "在里面的更大。。。", + "DESCRIPTIONS": [ + "战斗开始时,获得 #b2 个 #yguardianmod:凝滞 栏位。" + ] + }, + "Guardian:StasisSlotReductionRelic": { + "NAME": "悬浮机", + "FLAVOR": "这些自动机搜寻最棒的遗宝,但需要占用处理能力来维持运转。", + "DESCRIPTIONS": [ + "回合开始时获得 [E] 。 NL 战斗开始时,失去 #b1 个 #yguardianmod:凝滞 栏位。" + ] + }, + "Guardian:StasisUpgradeRelic": { + "NAME": "低温瓶", + "FLAVOR": "出来的东西总是比进去的好。", + "DESCRIPTIONS": [ + "战斗开始时,获得 #b1 个 #yguardianmod:凝滞 栏位。 #yguardianmod:凝滞 一张牌时,将其 #y升级 。" + ] + }, + "Guardian:BottledStasis": { + "NAME": "瓶装黑洞", + "FLAVOR": "在某个地方,一些不可思议的事情等待着人们去发现。", + "DESCRIPTIONS": [ + "拾起时,选择牌组中 #b1 张牌。 NL 战斗开始时,将其 #yguardianmod:凝滞 。", + "选择一张牌 ", + "战斗开始时,将牌组中一张 ", + " #y凝滞 。", + "瓶装的牌已被 #r移出 牌组,遗物已失效。" + ] + }, + "Guardian:StasisEgg": { + "NAME": "量子容器", + "FLAVOR": "你通过孵化鸡蛋而不是砸碎鸡蛋来获得鸡。", + "DESCRIPTIONS": [ + "拾起时,选择牌组 #b1 张牌。 NL 战斗开始时,将其移出牌组。第 #b4 回合开始时,将其 #b2 张复制品加入手牌。", + "选择一张牌 ", + "战斗开始时,将 ", + " 移出牌组。 第 #b4 回合开始时,将其 #b2 张复制品加入手牌。" + ] + }, + "Guardian:TickHelperRelic": { + "NAME": "冷却液", + "FLAVOR": "有公害,不要随便丢弃", + "DESCRIPTIONS": [ + "战斗开始时,获得 #b2 个 #yguardianmod:凝滞 栏位。牌被 #yguardianmod:凝滞 的回合计数器增加 #b2 点。" + ] + }, + "Guardian:PickAxe": { + "NAME": "星光采矿镐", + "FLAVOR": "有那么多宝石散落在尖塔中,很难想象有这么不幸的人需要这把镐来帮助他们。", + "DESCRIPTIONS": [ + "你能在休息处 #y挖掘 #b2 颗 #yguardianmod:宝石 ,你可以选择将它们加入牌组中。(至多使用 #b3 次)" + ] + }, + "Guardian:GemstoneGun": { + "NAME": "宝石枪", + "FLAVOR": "砰!砰!砰!嘿,我打中了三个!", + "DESCRIPTIONS": [ + "拾起时,可从 #b3 张随机 #yguardianmod:宝石 牌中选择 #b1 张,重复三次。 NL 战斗开始时,获得 #b1 张 #y镶嵌 有它们的 #b0 耗能 #y保留 #y消耗 牌。", + "选择宝石装入宝石枪" + ] + }, + "Guardian:BottledAnomaly": { + "NAME": "瓶装异常", + "FLAVOR": "旋转,旋转,最后破碎。", + "DESCRIPTIONS": [ + "拾起时,选择牌组 #b1 张牌。 NL 战斗开始时,将其移出牌组。第 #b3 回合开始时,再将其加入手牌并且本场战斗第1次打出的耗能变为 #b0 。", + "选择一张牌 ", + "战斗开始时,将 ", + " 移出牌组。第 #b3 回合开始时,再将其加入手牌并且本场战斗耗能变为 #b0 。", + "瓶装的牌已被 #r移出 牌组,遗物已失效。" + ] + } +} diff --git a/src/main/resources/guardianResources/localization/zhs/UIStrings.json b/src/main/resources/guardianResources/localization/zhs/UIStrings.json index cb29cea29..dd045636c 100644 --- a/src/main/resources/guardianResources/localization/zhs/UIStrings.json +++ b/src/main/resources/guardianResources/localization/zhs/UIStrings.json @@ -10,14 +10,14 @@ }, "Guardian:UIOptions": { "TEXT": [ - "选择一张牌凝滞。", + "选择一张牌凝滞 。", "拾起一颗宝石。", - "将一颗宝石加入牌组", + "将1颗宝石加入牌组", "进行凝滞。", "~错误:~ 不能在建设形态时 #r攻击 。", "~错误:~ 在 #r凝滞 进程中。", - "将一颗宝石加入你的牌组中。", - "(队列后的牌先被凝滞)" + "将1颗宝石加入牌组。", + "" ] }, "Guardian:FindGemsOption": { diff --git a/src/main/resources/guardianResources/localization/zht/CardStrings.json b/src/main/resources/guardianResources/localization/zht/CardStrings.json index f2fd59e0b..3f95cac3b 100644 --- a/src/main/resources/guardianResources/localization/zht/CardStrings.json +++ b/src/main/resources/guardianResources/localization/zht/CardStrings.json @@ -24,8 +24,8 @@ }, "Guardian:Gem_White": { "NAME": "石英", - "DESCRIPTION": " guardianmod:寶石 。 NL 抽一張牌。", - "UPGRADE_DESCRIPTION": "抽一張牌。" + "DESCRIPTION": " guardianmod:寶石 。 NL 抽1張牌。", + "UPGRADE_DESCRIPTION": "抽1張牌。" }, "Guardian:Gem_Orange": { "NAME": "茶晶", @@ -43,8 +43,8 @@ }, "Guardian:DonusPower": { "NAME": "過載", - "DESCRIPTION": "抽四張牌。 NL 下回合少抽2張牌。", - "UPGRADE_DESCRIPTION": "抽四張牌。 NL 下回合少抽2張牌。 NL 失去所有負面效果1層。" + "DESCRIPTION": "抽!M!張牌。 NL 失去所有負面效果1層。", + "UPGRADE_DESCRIPTION": "抽!M!張牌。 NL 失去所有負面效果1層。" }, "Guardian:DecasProtection": { "NAME": "先古之力", @@ -65,24 +65,24 @@ }, "Guardian:GuardianWhirl": { "NAME": "守護者旋風", - "DESCRIPTION": "有20點 格擋 才能打出。 NL 對所有敵人造成 !D! 點傷害 !M! 次。", + "DESCRIPTION": "對所有敵人造成 !D! 點傷害2次。 NL 若你有超過15點 格擋 ,多造成 !M! 次傷害。", "EXTENDED_DESCRIPTION": [ "需要更多格擋。" ] }, "Guardian:VentSteam": { - "NAME": "蒸汽噴射", - "DESCRIPTION": "給予 !M! 層 易傷 。" + "NAME": "蒸汽釋放", + "DESCRIPTION": "給予所有敵人 !M! 層 易傷 。" }, "Guardian:CurlUp": { "NAME": "蜷身", - "DESCRIPTION": "隨機 guardianmod:凝滯 一張手牌。 NL guardianmod:提防 !M! 。", - "UPGRADE_DESCRIPTION": "guardianmod:凝滯 一張手牌。 NL guardianmod:提防 !M! 。" + "DESCRIPTION": "隨機 guardianmod:凝滯 1張手牌。 NL guardianmod:提防 !M! 。", + "UPGRADE_DESCRIPTION": "guardianmod:凝滯 1張手牌。 NL guardianmod:提防 !M! 。" }, "Guardian:TimeBomb": { "NAME": "時間炸彈", - "DESCRIPTION": "對所有敵人造成 !D! 點傷害。 NL guardianmod:加速 所有 guardianmod:凝滯 中的牌。" + "DESCRIPTION": "對所有敵人造成 !D! 點傷害。 NL guardianmod:加速 所有 guardianmod:凝滯 中的牌。 NL 消耗 。" }, "Guardian:HyperBeam_Guardian": { "NAME": "究極射線", @@ -103,13 +103,13 @@ }, "Guardian:Incinerate": { "NAME": "焚燒", - "DESCRIPTION": "造成 !D! 點傷害。 NL guardianmod:加速 1次。", - "UPGRADE_DESCRIPTION": "造成 !D! 點傷害。 NL guardianmod:加速 2次。" + "DESCRIPTION": "造成 !D! 點傷害。 NL guardianmod:加速 。", + "UPGRADE_DESCRIPTION": "造成 !D! 點傷害。 NL guardianmod:加速 2 次。。" }, "Guardian:Orbwalk": { "NAME": "行者圓球", - "DESCRIPTION": "獲得 !M! 點 力量 。 NL guardianmod:滴答 :獲得 1 點 力量 。 NL guardianmod:消散 。", - "UPGRADE_DESCRIPTION": "獲得 !M! 點 力量 。 NL guardianmod:滴答 :獲得 1 點 力量 。" + "DESCRIPTION": "獲得 !M! 層 力量 。 NL guardianmod:滴答 :獲得 1 層 力量 。 NL guardianmod:消散 。", + "UPGRADE_DESCRIPTION": "獲得 !M! 層 力量 。 NL guardianmod:滴答 :獲得 1 層 力量 。" }, "Guardian:WalkerClaw": { "NAME": "行者爪擊", @@ -124,56 +124,56 @@ }, "Guardian:SentryBeam": { "NAME": "哨衛射線", - "DESCRIPTION": "造成 !D! 點傷害。 NL guardianmod:凝滯 一張 *哨衛震蕩 。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "造成 !D! 點傷害。 NL guardianmod:凝滯 一張 *哨衛震蕩+ 。 NL 消耗 。" + "DESCRIPTION": "造成 !D! 點傷害。 NL guardianmod:凝滯 1張 *哨衛震蕩 。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "造成 !D! 點傷害。 NL guardianmod:凝滯 1張 *哨衛震蕩+ 。 NL 消耗 。" }, "Guardian:SentryWave": { "NAME": "哨衛震蕩", - "DESCRIPTION": "給予 !M! 層 虛弱 。 NL guardianmod:凝滯 一張 *哨衛射線 。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "給予 !M! 層 虛弱 。 NL guardianmod:提防 2。 NL guardianmod:凝滯 一張 *哨衛射線+ 。 NL 消耗 。" + "DESCRIPTION": "給予 !M! 層 虛弱 。 NL guardianmod:凝滯 1張 *哨衛射線 。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "給予 !M! 層 虛弱 。 NL guardianmod:提防 2。 NL guardianmod:凝滯 1張 *哨衛射線+ 。 NL 消耗 。" }, "Guardian:CompilePackage": { "NAME": "完整組件", - "DESCRIPTION": "消耗 。 NL 從三張 guardianmod:組件 牌中選擇獲得一張。", - "UPGRADE_DESCRIPTION": "消耗 。 NL 從三張 guardianmod:組件 牌+中選擇獲得一張。", + "DESCRIPTION": "選擇1套 guardianmod:組件 牌並 guardianmod:凝滯 之。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "選擇1套已升級的 guardianmod:組件 牌並 guardianmod:凝滯 之。 NL 消耗 。", "EXTENDED_DESCRIPTION": [ - "選擇一張組件。" + "選擇1張組件。" ] }, "Guardian:PackageShapes": { "NAME": "組件: 機械", - "DESCRIPTION": "獲得 *時 *間 *炸 *彈 、 *荊 *棘 *協 *議 與 *反 *沖 *協 *議 各1張。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "獲得 *時 *間 *炸 *彈 *+ 、 *荊 *棘 *協 *議 *+ 與 *反 *沖 *協 *議 *+ 各1張。 NL 消耗 。" + "DESCRIPTION": "獲得 *時間炸彈 、 *荊棘協議 與 *反沖協議 各1張。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "獲得 *時間炸彈+ 、 *荊棘協議+ 與 *反沖協議+ 各1張。 NL 消耗 。" }, "Guardian:PackageDonuDeca": { "NAME": "組件: 先古", - "DESCRIPTION": "獲得 *過 *載 、 *先 *古 *之 *力 與 *先 *古 *造 *物 各1張。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "獲得 *過 *載 *+ 、 *先 *古 *之 *力 *+ 與 *先 *古 *造 *物 *+ 各1張。 NL 消耗 。" + "DESCRIPTION": "獲得 *過載 、 *先古之力 與 *先古造物 各1張。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "獲得 *過載+ 、 *先古之力+ 與 *先古造物+ 各1張。 NL 消耗 。" }, "Guardian:PackageSphere": { "NAME": "組件: 圓球", - "DESCRIPTION": "獲得 *球 *形 *護 *盾 、 *金 *屬 *化 與 *浮 *動 *圓 *球 各1張。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "獲得 *球 *形 *護 *盾 *+ 、 *金 *屬 *化 *+ 與 *浮 *動 *圓 *球 *+ 各1張。 NL 消耗 。" + "DESCRIPTION": "獲得 *球形護盾 、 *固化 與 *浮動圓球 各1張。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "獲得 *球形護盾+ 、 *固化+ 與 *浮動圓球+ 各1張。 NL 消耗 。" }, "Guardian:PackageSentry": { "NAME": "組件: 哨衛", - "DESCRIPTION": "獲得1張 *哨 *衛 *射 *線 與2張 *哨 *衛 *震 *蕩 。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "獲得1張 *哨 *衛 *射 *線 *+ 與2張 *哨 *衛 *震 *蕩 *+ 。 NL 消耗 。" + "DESCRIPTION": "獲得1張 *哨衛射線 與2張 *哨衛震蕩 。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "獲得1張 *哨衛射線+ 與2張 *哨衛震蕩+ 。 NL 消耗 。" }, "Guardian:PackageWalker": { "NAME": "組件: 行者", - "DESCRIPTION": "獲得 *行 *者 *圓 *球 、 *行 *者 *爪 *擊 與 *焚 *燒 各1張。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "獲得 *行 *者 *圓 *球 *+ 、 *行 *者 *爪 *擊 *+ 與 *焚 *燒 *+ 各1張。 NL 消耗 。" + "DESCRIPTION": "獲得 *行者圓球 、 *行者爪擊 與 *焚燒 各1張。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "獲得 *行者圓球+ 、 *行者爪擊+ 與 *焚燒+ 各1張。 NL 消耗 。" }, "Guardian:PackageAutomaton": { - "NAME": "組件: 銅制", - "DESCRIPTION": "獲得 *究 *極 *射 *線 、 *銅 *制 *圓 *球 與 *彈 *性 *護 *甲 各1張。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "獲得 *究 *極 *射 *線 *+ 、 *銅 *制 *圓 *球 *+ 與 *彈 *性 *護 *甲 *+ 各1張。 NL 消耗 。" + "NAME": "組件: 銅械", + "DESCRIPTION": "獲得 *究極射線 、 *銅製圓球 與 *彈性護甲 各1張。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "獲得 *究極射線+ 、 *銅製圓球+ 與 *彈性護甲+ 各1張。 NL 消耗 。" }, "Guardian:PackageDefect": { "NAME": "組件: 故障", - "DESCRIPTION": "獲得 *重 *連 , *預 *編 *程 與 *時 *間 *電 *容 *器 各1張。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "獲得 *重 *連 *+ , *預 *編 *程 *+ 與 *時 *間 *電 *容 *器 *+ 各1張。 NL 消耗 。" + "DESCRIPTION": "獲得 *重分配 , *預編程 與 *時間容器 各1張。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "獲得 *重分配+ , *預編程+ 與 *時間容器+ 各1張。 NL 消耗 。" }, "Guardian:Planning": { "NAME": "規劃", @@ -181,43 +181,43 @@ }, "Guardian:Recover": { "NAME": "恢復", - "DESCRIPTION": "獲得 !B! 點 格擋 。 NL guardianmod:提防 !M! 。 NL guardianmod:凝滯 棄牌堆一張牌。" + "DESCRIPTION": "獲得 !B! 點 格擋 。 NL guardianmod:提防 !M! 。 NL guardianmod:凝滯 棄牌堆1張牌。" }, "Guardian:Emergency": { "NAME": "應急", - "DESCRIPTION": " guardianmod:加速 至有牌 guardianmod:凝滯 結束。 NL 消耗 。", - "UPGRADE_DESCRIPTION": " guardianmod:加速 至有牌 guardianmod:凝滯 結束。" + "DESCRIPTION": "guardianmod:加速 所有 guardianmod:凝滯 中的牌。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "guardianmod:加速 所有 guardianmod:凝滯 中的牌2次。 NL 消耗 。" }, "Guardian:Clone": { "NAME": "克隆", - "DESCRIPTION": "guardianmod:凝滯 一張手牌的復制品。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "guardianmod:凝滯 一張手牌的復制品。 NL guardianmod:加速 。 NL 消耗 。" + "DESCRIPTION": "guardianmod:凝滯 1張手牌的復製品。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "guardianmod:凝滯 1張手牌的復製品。 NL guardianmod:加速 。 NL 消耗 。" }, "Guardian:Preprogram": { "NAME": "預編程", - "DESCRIPTION": "查看抽牌堆頂部 !M! 張牌, NL 可 guardianmod:凝滯 其中一張。" + "DESCRIPTION": "查看抽牌堆頂部 !M! 張牌, NL 可 guardianmod:凝滯 其中1張。" }, "Guardian:GemFinder": { "NAME": "寶石發現", - "DESCRIPTION": "戰鬥勝利後, NL 額外獲得普通 guardianmod:寶石 獎勵。" + "DESCRIPTION": "虛無 。 NL 戰鬥結束後, NL 你可以將1 張隨機 guardianmod:寶石 加入牌組。" }, "Guardian:StasisField": { "NAME": "凝滯屏障", - "DESCRIPTION": "獲得 !B! 點 格擋 。 NL 將本牌 guardianmod:凝滯 。 NL guardianmod:凝滯 結束時, NL 獲得 !B! 點 格擋 。" + "DESCRIPTION": "獲得 !B! 點 格擋 。 NL 將本牌 guardianmod:凝滯 。 " }, "Guardian:StasisStrike": { "NAME": "凝滯打擊", - "DESCRIPTION": "造成 !D! 點傷害。 NL 獲得一個 guardianmod:凝滯 欄位。" + "DESCRIPTION": "造成 !D! 點傷害。 NL 獲得1個 guardianmod:凝滯 欄位。" }, "Guardian:FuturePlans": { "NAME": "未來計劃", - "DESCRIPTION": "回合結束時, NL 可 guardianmod:凝滯 一張手牌。", - "UPGRADE_DESCRIPTION": " 固有 。 NL 回合結束時, NL 可 guardianmod:凝滯 一張手牌。" + "DESCRIPTION": "回合結束時, NL 可 guardianmod:凝滯 1張手牌。", + "UPGRADE_DESCRIPTION": " 固有 。 NL 回合結束時, NL 可 guardianmod:凝滯 1張手牌。" }, "Guardian:Suspension": { "NAME": "掛起", - "DESCRIPTION": "guardianmod:凝滯 一張手牌。", - "UPGRADE_DESCRIPTION": "抽一張牌。 NL guardianmod:凝滯 一張手牌。" + "DESCRIPTION": "獲得 !B! 點 格擋 。 NL guardianmod:凝滯 1張手牌。", + "UPGRADE_DESCRIPTION": "獲得 !B! 點 格擋 。 NL guardianmod:凝滯 1張手牌。" }, "Guardian:FastForward": { "NAME": "時掣", @@ -230,41 +230,42 @@ }, "Guardian:ConstructionForm": { "NAME": "造物形態", - "DESCRIPTION": "虛無 。 NL 獲得 !M! 層 guardianmod:緩沖 。 NL 回合開始時若有 guardianmod:緩沖 ,獲得1點 力量 。", - "UPGRADE_DESCRIPTION": "獲得 !M! 層 guardianmod:緩沖 。 NL 回合開始時若有 guardianmod:緩沖 ,獲得1點 力量 。" + "DESCRIPTION": "虛無 。 NL 獲得 !M! 層 guardianmod:緩沖 。 NL 回合開始時若有X層 guardianmod:緩沖 ,獲得X層 力量 。 NL X為你的 造物形態 層數。", + "UPGRADE_DESCRIPTION": "獲得 !M! 層 guardianmod:緩沖 。 NL 回合開始時若有X層 guardianmod:緩沖 ,獲得X層 力量 。 NL X為你的 造物形態 層數。" }, "Guardian:RollAttack": { - "NAME": "蜷身攻擊", - "DESCRIPTION": "造成 !D! 點傷害。 NL 若處於 guardianmod:防禦模式 , NL 變為群體攻擊。 NL 否則 guardianmod:提防 8 。" + "NAME": "翻滾攻擊", + "DESCRIPTION": "造成 !D! 點傷害。 NL 若處於 guardianmod:防禦模式 , NL 造成群體傷害, NL 否則 guardianmod:提防 8 。" }, "Guardian:GemFire": { "NAME": "寶石加農炮", - "DESCRIPTION": " 消耗 所有 guardianmod:寶石 ,每顆隨機造成 !D! 點傷害。 NL 消耗 。", - "UPGRADE_DESCRIPTION": " NL (造成 !M! 次)" + "DESCRIPTION": "造成 !D! 點傷害。 NL 觸發所有 guardianmod:寶石 效果。 NL 消耗 。", + "UPGRADE_DESCRIPTION": " NL (造成 !M! 次)" }, "Guardian:ChargeCore": { "NAME": "充能核心", - "DESCRIPTION": "造成 !D! 點傷害。 NL 將本牌 guardianmod:凝滯 。 NL guardianmod:滴答 :抽一張牌。 guardianmod:消散 。" + "DESCRIPTION": "造成 !D! 點傷害。 NL 將本牌 guardianmod:凝滯 。 NL guardianmod:滴答 :抽1張牌。 guardianmod:消散 。" }, "Guardian:Reroute": { - "NAME": "重連", - "DESCRIPTION": "造成 !D! 點傷害。 NL guardianmod:凝滯 打出的下一張非 消耗 攻擊或技能牌。" + "NAME": "重分配", + "DESCRIPTION": "造成 !D! 點傷害。 NL guardianmod:凝滯 打出的下1張非 消耗 攻擊或技能牌。" }, "Guardian:PiercingHide": { "NAME": "隱秘荊棘", - "DESCRIPTION": "獲得 !B! 點 格擋 。 NL 獲得 !M! 層 guardianmod:臨時 荊棘 。 NL guardianmod:提防 3 。" -}, + "DESCRIPTION": "獲得 !B! 點 格擋 。 NL 獲得 !M! 層 guardianmod:臨時 荊棘 。 NL guardianmod:提防 3 。", + "UPGRADE_DESCRIPTION": "獲得 !B! 點 格擋 。 NL 獲得 !M! 層 guardianmod:臨時 荊棘 。 NL guardianmod:提防 4。" + }, "Guardian:ShieldSpikes": { "NAME": "荊棘裝甲", - "DESCRIPTION": "獲得 !B! 點 格擋 。 NL 若處於 guardianmod:防禦模式 , NL 獲得 !M! 層 荊棘 , NL 否則 guardianmod:提防 8。" + "DESCRIPTION": "獲得 !B! 點 格擋 。 NL guardianmod:提防 8。 NL 若處於 guardianmod:防禦模式 , NL 獲得 !M! 層 荊棘 。 NL guardianmod:提防 8。" }, "Guardian:PrismaticBeam": { "NAME": "繽紛碎塊", - "DESCRIPTION": "本牌每 guardianmod:鑲嵌 一顆 guardianmod:寶石 ,造成 !D! 點傷害。" + "DESCRIPTION": "本牌每 guardianmod:鑲嵌 1 顆 guardianmod:寶石 ,造成 !D! 點傷害 1 次。" }, "Guardian:PrismaticBarrier": { "NAME": "繽紛眩盾", - "DESCRIPTION": "本牌每 guardianmod:鑲嵌 一顆 guardianmod:寶石 ,獲得 !B! 點 格擋 。" + "DESCRIPTION": "本牌每 guardianmod:鑲嵌 1 顆 guardianmod:寶石 ,獲得 !B! 點 格擋 。" }, "Guardian:TemporalStrike": { "NAME": "時流打擊", @@ -281,7 +282,7 @@ }, "Guardian:RefractedBeam": { "NAME": "折射射線", - "DESCRIPTION": "造成 !D! 點傷害 !M! 次。 NL 能被多次 升級 。" + "DESCRIPTION": "造成 !D! 點傷害 !M! 次。 NL 能被多次升級。 NL 每次升級多造成1次傷害。" }, "Guardian:MultiBeam": { "NAME": "多重射線", @@ -289,7 +290,7 @@ }, "Guardian:BaubleBeam": { "NAME": "鱗片爆破", - "DESCRIPTION": "造成 !D! 點傷害。 NL 重復 !M! 次:" + "DESCRIPTION": "造成 !D! 點傷害。 NL 本牌觸發 guardianmod:寶石 效果 !M! 次:" }, "Guardian:PrimingBeam": { "NAME": "起爆", @@ -297,11 +298,13 @@ }, "Guardian:EvasiveProtocol": { "NAME": "閃避協議", - "DESCRIPTION": "處於 guardianmod:防禦模式 時, NL 擁有 !M! 層 敏捷 。 NL 回合開始時 guardianmod:提防 3。" + "DESCRIPTION": "當你進入 guardianmod:防禦模式 時, NL 失去所有負面效果 !M! 層。 NL guardianmod:提防 !GuardianSecondM!。", + "UPGRADE_DESCRIPTION": "當你進入 guardianmod:防禦模式 時, NL 失去所有負面效果 !M! 層。 NL guardianmod:提防 !GuardianSecondM!。" }, "Guardian:SpikerProtocol": { "NAME": "荊棘協議", - "DESCRIPTION": "處於 guardianmod:防禦模式 時, NL 擁有 !M! 層 荊棘 。 NL 回合開始時 guardianmod:提防 3。" + "DESCRIPTION": "當你進入 guardianmod:防禦模式 時, NL 獲得 !M! 層 荊棘 。 NL guardianmod:提防 !GuardianSecondM!。", + "UPGRADE_DESCRIPTION": "當你進入 guardianmod:防禦模式 時, NL 獲得 !M! 層 荊棘 。 NL guardianmod:提防 !GuardianSecondM!。" }, "Guardian:ArmoredProtocol": { "NAME": "裝甲協議", @@ -314,12 +317,12 @@ }, "Guardian:AncientConstruct": { "NAME": "先古造物", - "DESCRIPTION": "回合開始時若無 人工制品 ,獲得 !M! 層。", - "UPGRADE_DESCRIPTION": "獲得2層 人工制品 。 NL 回合開始時若無 人工制品 ,獲得 !M! 層。" + "DESCRIPTION": "獲得1層 人工製品 。 NL 回合開始時若無 人工製品 ,獲得 !M! 層。", + "UPGRADE_DESCRIPTION": "獲得1層 人工製品 。 NL 回合開始時若無 人工製品 ,獲得 !M! 層。" }, "Guardian:CrystalBeam": { "NAME": "水晶射線", - "DESCRIPTION": "造成 !D! 點傷害。 NL 每有 guardianmod:鑲嵌 的 guardianmod:寶石 , NL 傷害增加 !M! 點。" + "DESCRIPTION": "造成 !D! 點傷害。 NL 牌組每有1枚 guardianmod:寶石 , NL 額外造成 !M! 點。" }, "Guardian:Gem_Synthetic": { "NAME": "瑪瑙", @@ -333,8 +336,8 @@ }, "Guardian:Gem_Purple": { "NAME": "紫晶", - "DESCRIPTION": " guardianmod:寶石 。 NL 本回合所有敵人失去 2 點 力量 。", - "UPGRADE_DESCRIPTION": "本回合所有敵人失去 2 點 力量 。" + "DESCRIPTION": " guardianmod:寶石 。 NL 本回合所有敵人失去 2 層 力量 。", + "UPGRADE_DESCRIPTION": "本回合所有敵人失去 2 層 力量 。" }, "Guardian:Gem_Crimson": { "NAME": "石榴石", @@ -361,12 +364,12 @@ }, "Guardian:Repulse": { "NAME": "反沖協議", - "DESCRIPTION": "每回合首次抽到 NL 狀態牌 或 詛咒 時, 消耗 其並抽一張牌。", - "UPGRADE_DESCRIPTION": "消耗 每回合抽到的首張 狀態牌 或 詛咒 並抽一張牌。" + "DESCRIPTION": "每回合第1次抽到 NL 狀態 或 詛咒 牌時,將其 消耗 並抽1張牌。", + "UPGRADE_DESCRIPTION": "每回合第1次抽到 NL 狀態 或 詛咒 牌時,將其 消耗 並抽1張牌。" }, "Guardian:BronzeOrb": { "NAME": "銅球支援", - "DESCRIPTION": " 固有 。 NL 隨機 guardianmod:凝滯 抽牌堆一張牌。 NL 造成 !D! 點傷害。 NL 消耗 。" + "DESCRIPTION": "造成 !D! 點傷害。 NL guardianmod:提防 等同於造成的未被格擋的傷害。 NL 消耗 。" }, "Guardian:SphericShield": { "NAME": "球形護盾", @@ -374,7 +377,7 @@ }, "Guardian:RevengeProtocol": { "NAME": "復仇協議", - "DESCRIPTION": "處於 guardianmod:防禦模式 時, NL 擁有 !M! 層 力量 。 NL 回合開始時 guardianmod:提防 !GuardianSecondM! 。" + "DESCRIPTION": "當你進入 guardianmod:防禦模式 時, NL 獲得 !M! 層 力量 。 NL 回合開始時 guardianmod:提防 !GuardianSecondM! 。" }, "Guardian:GatlingBeam": { "NAME": "炮塔射線", @@ -386,8 +389,8 @@ }, "Guardian:StasisEngine": { "NAME": "凝滯引擎", - "DESCRIPTION": "每回合打出第三張0耗能牌時,獲得 [E] 並抽一張牌。", - "UPGRADE_DESCRIPTION": "固有 。 NL 每回合打出第三張0耗能牌時,獲得 [E] 並抽一張牌。" + "DESCRIPTION": "每回合打出第 3 張0耗能牌時,獲得 [E] 並抽1張牌。", + "UPGRADE_DESCRIPTION": "固有 。 NL 每回合打出第 3 張0耗能牌時,獲得 [E] 並抽1張牌。" }, "Guardian:GemstoneGunCard": { "NAME": "寶石槍", @@ -395,7 +398,7 @@ "UPGRADE_DESCRIPTION": " NL 消耗 。" }, "Guardian:BodySlam": { - "NAME": "全身猛擊", + "NAME": "全身猛撞", "DESCRIPTION": "獲得 !B! 點 格擋 , NL 造成當前 格擋 值點傷害 。", "UPGRADE_DESCRIPTION": " NL (造成 !D! 點傷害)" }, @@ -408,7 +411,7 @@ "DESCRIPTION": "虛無 。 NL 造成 !D! 點傷害。 NL 觸發 *雙斬 中的 *寶石 效果。 NL 消耗 。" }, "Guardian:StrikeForStrike": { - "NAME": "以擊應擊", + "NAME": "應擊打擊", "DESCRIPTION": "造成 !D! 點傷害, NL 目標以 !M! 點傷害攻擊你。" }, "Guardian:GearUp": { @@ -416,14 +419,20 @@ "DESCRIPTION": "保留 。 NL guardianmod:提防 !M! 。 NL 消耗 。" }, "Guardian:Metallicize": { - "NAME": "金屬化", - "DESCRIPTION": "回合結束時, NL 獲得 !M! 點 格擋 。" + "NAME": "固化", + "DESCRIPTION": "獲得 !M! 層 expansioncontent:多層護甲 。" }, "Guardian:PackageConstruct": { "NAME": " !!!!!!!!!!!! 以下為疑似棄用文本,為了保險起見防止遊戲崩潰,暫未刪除。 !!!!!!!!!!!! ", "DESCRIPTION": " !!!!!!!!!!!! 以下為疑似棄用文本,為了保險起見防止遊戲崩潰,暫未刪除。 !!!!!!!!!!!! ", + "DESCRIPTION": " !!!!!!!!!!!! 以下為疑似棄用文本,為了保險起見防止遊戲崩潰,暫未刪除。 !!!!!!!!!!!! ", "UPGRADE_DESCRIPTION": " !!!!!!!!!!!! 以下為疑似棄用文本,為了保險起見防止遊戲崩潰,暫未刪除。 !!!!!!!!!!!! " }, + "Guardian:PackageMass": { + "NAME": "組件: 團塊", + "DESCRIPTION": "棄用", + "UPGRADE_DESCRIPTION": "棄用" + }, "Guardian:HammerDown": { "NAME": "墜落重錘", "DESCRIPTION": "棄用" diff --git a/src/main/resources/guardianResources/localization/zht/CharacterStrings.json b/src/main/resources/guardianResources/localization/zht/CharacterStrings.json index 668d26890..b8479e87c 100644 --- a/src/main/resources/guardianResources/localization/zht/CharacterStrings.json +++ b/src/main/resources/guardianResources/localization/zht/CharacterStrings.json @@ -9,7 +9,7 @@ "[ 孔位 ]", "在一條昏暗的街上,你遇見幾個戴著兜帽的人在進行某種黑暗的儀式。當你靠近時,他們全都同時轉身面對你,讓你覺得十分詭異。 其中個子最高的一個微微一笑,露出了長長的尖牙,向你伸出了一隻蒼白而瘦長的手: NL ~「加入我們,高塔守護者。一起來感受高塔的溫暖吧。」~", "防禦模式", - "擁有 #b3 層 #y荊棘 ,每回合開始時獲得 #b10 點 #y格擋 。回合結束時 #y格擋 不會消失。", + "擁有 #b3 層 #y荊棘 。回合結束時 #y格擋 不會消失。", "~錯誤:~ #r凝滯 正在進程中。" ], "KEYWORDS": [ diff --git a/src/main/resources/guardianResources/localization/zht/KeywordStrings.json b/src/main/resources/guardianResources/localization/zht/KeywordStrings.json index f1018ebf7..ae3219d9f 100644 --- a/src/main/resources/guardianResources/localization/zht/KeywordStrings.json +++ b/src/main/resources/guardianResources/localization/zht/KeywordStrings.json @@ -8,17 +8,14 @@ }, { "NAMES": [ - "stasis", "凝滯" ], "PROPER_NAME": "凝滯", - "DESCRIPTION": "一張牌被 #y凝滯 時其獲得一個計數器。倒計點數等於其耗能加 #b1 點,每回合開始時減少 #b1 點。 NL 歸零時,將其返回手牌且下次耗能為 #b0 。" + "DESCRIPTION": "省流:過幾回合免費打出。 NL 一張牌被 #y凝滯 時其獲得一個計數器。倒計點數等於其耗能加 #b1 點,每回合開始時減少 #b1 點。 NL 歸零時,將其返回手牌且單次耗能為 #b0 。" }, { "NAMES": [ - "寶石", - "gem", - "gems" + "寶石" ], "PROPER_NAME": "寶石", "DESCRIPTION": " #y寶石 能在 #y休息處 被 #y鑲嵌 至有 #y孔位 的牌上。不能被 #y升級 。" @@ -26,19 +23,16 @@ { "PROPER_NAME": "防禦模式", "NAMES": [ - "defensive mode", - "defensive_mode", "防禦模式" ], - "DESCRIPTION": "#y姿態 。 NL #y防禦模式 持續 #b2 回合。 NL 處於 #y防禦模式 時:擁有 #b3 層 #y荊棘 ,每回合開始時獲得 #b10 點 #y格擋 且在回合結束時 #y格擋 不會消失。" + "DESCRIPTION": "#y姿態 。 NL 當你進入 #y防禦模式 ,獲得 #b16 點 #y格擋 。 NL 處於 #y防禦模式 時:擁有 #b3 層 #y荊棘,在回合結束時 #y格擋 不會消失。" }, { "NAMES": [ - "accelerate", "加速" ], "PROPER_NAME": "加速", - "DESCRIPTION": "降低最右端被 #y凝滯 牌的倒計點數 #b1 點。若歸零, 將其返回手牌且下次耗能為 #b0 。" + "DESCRIPTION": "降低最右端被 #y凝滯 牌的倒計點數 #b1 點。若歸零, 將其返回手牌且單次耗能為 #b0 。" }, { "NAMES": [ diff --git a/src/main/resources/guardianResources/localization/zht/PowerStrings.json b/src/main/resources/guardianResources/localization/zht/PowerStrings.json index 21601be0b..bb63a5c2c 100644 --- a/src/main/resources/guardianResources/localization/zht/PowerStrings.json +++ b/src/main/resources/guardianResources/localization/zht/PowerStrings.json @@ -29,18 +29,18 @@ ] }, "Guardian:ClonePower": { - "NAME": "重連", + "NAME": "重分配", "DESCRIPTIONS": [ - "將本回合打出的下張牌 #y凝滯 。", + "將本回合打出的下張打出後會進入棄牌堆的牌 #y凝滯 。", "將本回合打出的下 #b", - " 張牌 #y凝滯 。" + " 張牌打出後會進入棄牌堆的牌 #y凝滯 。" ] }, "Guardian:GemFinderPower": { "NAME": "開采寶石", "DESCRIPTIONS": [ - "戰鬥結束後,選擇一顆普通 #y寶石 加入牌組。", - "戰鬥結束後,選擇 #b", + "戰鬥結束後,你可以將1顆普通 #y寶石 加入牌組。", + "戰鬥結束後,你可以將 #b", " 顆普通 #y寶石 加入牌組。" ] }, @@ -63,7 +63,8 @@ "Guardian:ConstructModePower": { "NAME": "造物形態", "DESCRIPTIONS": [ - "回合開始時,若你有 #y緩沖 ,獲得 #b", + "回合開始時,若你有至少 #b", + " 層 #y緩沖, 獲得 #b", " 點 #y力量 。" ] }, @@ -113,7 +114,7 @@ "Guardian:AutomayhemPower": { "NAME": "時間沙漏", "DESCRIPTIONS": [ - "回合開始時, #y加速 。", + "回合開始時, #y加速 #b1 次。", "回合開始時, #y加速 #b", " 次。" ] @@ -121,7 +122,7 @@ "Guardian:ConstructPower": { "NAME": "先古造物", "DESCRIPTIONS": [ - "若回合開始時你沒有 #y人工制品 ,獲得 #b", + "若回合開始時你沒有 #y人工製品 ,獲得 #b", " 層", "。" ] @@ -144,8 +145,8 @@ "Guardian:RevengePower": { "NAME": "復仇協議", "DESCRIPTIONS": [ - "處於 #y防禦模式 時,臨時擁有 #b", - " 層 #y力量 。" + "當你進入 #y防禦模式 時,獲得 #b", + " 點 #y力量 。" ] }, "Guardian:StasisEnginePower": { @@ -177,14 +178,14 @@ "Guardian:EvasiveProtocolPower": { "NAME": "閃避協議", "DESCRIPTIONS": [ - "處於 #y防禦模式 時,臨時擁有 #b", - " 層 #y敏捷 。" + "當你進入 #y防禦模式 時,降低所有負面效果 #b", + " 層。" ] }, "Guardian:SpikerProtocolPower": { "NAME": "荊棘協議", "DESCRIPTIONS": [ - "處於 #y防禦模式 時,臨時擁有 #b", + "當你進入 #y防禦模式 時,獲得 #b", " 層 #y荊棘 。" ] }, diff --git a/src/main/resources/guardianResources/localization/zht/RelicStrings.json b/src/main/resources/guardianResources/localization/zht/RelicStrings.json index f195438e6..daf20abeb 100644 --- a/src/main/resources/guardianResources/localization/zht/RelicStrings.json +++ b/src/main/resources/guardianResources/localization/zht/RelicStrings.json @@ -1,20 +1,28 @@ { "Guardian:ModeShifter": { - "NAME": "銅制齒輪", + "NAME": "銅製齒輪", "FLAVOR": "在你最需要的時候保護你。", "DESCRIPTIONS": [ - "戰鬥開始時,獲得一張 #y預防 。 NL 遊戲開始時將 #b1 張普通 #yguardianmod:寶石 牌加入牌組。 " + "戰鬥開始時,獲得1張 #y預防 。 NL 遊戲開始時,將 #b1 張普通 #yguardianmod:寶石 牌加入牌組。 " ] }, "Guardian:ModeShifterPlus": { "NAME": "守護者齒輪", - "FLAVOR": "每3000層更換一次", + "FLAVOR": "每過3000層替換1次", "DESCRIPTIONS": [ - "替換 #r銅制齒輪 。 NL 戰鬥開始時,進入 #yguardianmod:防禦模式 並持續 #b3 回合。" + "替換 ", + " 。 NL 戰鬥開始時,獲得1張 #y預防 。 NL 每當你進入 #y防禦模式 ,獲得 [E] 並抽 #b2 張牌。" + ] + }, + "Guardian:ObsidianScales": { + "NAME": "黑曜鱗", + "FLAVOR": "用鮮血將天空染成漆黑,向所有出手者展開反擊。", + "DESCRIPTIONS": [ + "戰鬥開始時,獲得 #b3 點 #y荊棘 。每當你獲得負面效果,獲得 #b1 層 #y荊棘 。" ] }, "Guardian:DefensiveModeMoreBlock": { - "NAME": "銅制裝甲板", + "NAME": "銅製裝甲板", "FLAVOR": "裝甲再多也不為過。", "DESCRIPTIONS": [ " #yguardianmod:提防 時額外 #y提防 #b1 。" @@ -31,21 +39,21 @@ "NAME": "便攜哨兵", "FLAVOR": "哨兵模式啟動。獲取目標成功。無慈悲。", "DESCRIPTIONS": [ - "每 #3 個回合,給予所有敵人 #b1 層 #y虛弱 。" + "每 #b3 個回合,給予所有敵人 #b1 層 #y虛弱 。" ] }, "Guardian:SackOfGems": { "NAME": "寶石袋", "FLAVOR": "噢……閃閃發光!", "DESCRIPTIONS": [ - "拾起時,向牌組中加入5張隨機 #yguardianmod:寶石 。" + "拾起時,你可以將至多 #b5 張隨機 #yguardianmod:寶石 牌加入牌組。" ] }, "Guardian:StasisCodex": { "NAME": "機械寶典", "FLAVOR": "尖塔最早原型的設計和圖表。", "DESCRIPTIONS": [ - "回合結束時若無被 #y凝滯 的牌,從 #b3 張隨機牌中選擇 #b1 張牌 #yguardianmod:凝滯 。" + "前3個回合結束時,若 #y凝滯 欄位未滿,從 #b3 張隨機牌中選擇 #b1 張牌 #yguardianmod:凝滯 。" ] }, "Guardian:StasisSlotIncreaseRelic": { @@ -66,7 +74,7 @@ "NAME": "低溫瓶", "FLAVOR": "出來的東西總是比進去的好。", "DESCRIPTIONS": [ - "戰鬥開始時,獲得 #b1 個 #yguardianmod:凝滯 欄位。當牌被 #yguardianmod:凝滯 時, #y升級 這張牌。" + "戰鬥開始時,獲得 #b1 個 #yguardianmod:凝滯 欄位。 #yguardianmod:凝滯 一張牌時,將其 #y升級 。" ] }, "Guardian:BottledStasis": { @@ -84,10 +92,10 @@ "NAME": "量子容器", "FLAVOR": "你通過孵化雞蛋而不是砸碎雞蛋來獲得雞。", "DESCRIPTIONS": [ - "拾起時,選擇 #b1 張牌。 NL 戰鬥開始時,將其移出牌組。第 #b4 回合開始時,將其 #b2 張復制品加入手牌。", + "拾起時,選擇牌組 #b1 張牌。 NL 戰鬥開始時,將其移出牌組。第 #b4 回合開始時,將其 #b2 張復製品加入手牌。", "選擇一張牌 ", "戰鬥開始時,將 ", - " 移出牌組。 第 #b4 回合開始時,將其 #b2 張復制品加入手牌。" + " 移出牌組。 第 #b4 回合開始時,將其 #b2 張復製品加入手牌。" ] }, "Guardian:TickHelperRelic": { @@ -101,14 +109,14 @@ "NAME": "星光采礦鎬", "FLAVOR": "有那麽多寶石散落在尖塔中,很難想象有這麽不幸的人需要這把鎬來幫助他們。", "DESCRIPTIONS": [ - "你能在 #b3 個休息處各 #y挖掘 #b2 顆 #yguardianmod:寶石 #b1 次。" + "你能在休息處 #y挖掘 #b2 顆 #yguardianmod:寶石 ,你可以選擇將它們加入牌組中。(至多使用 #b3 次)" ] }, "Guardian:GemstoneGun": { "NAME": "寶石槍", "FLAVOR": "砰!砰!砰!嘿,我打中了三個!", "DESCRIPTIONS": [ - "拾起時,選擇 #b3 張 #yguardianmod:寶石 牌。 NL 戰鬥開始時,獲得 #b1 張 #y鑲嵌 有它們的 #b0 耗能 #y保留 #y消耗 牌。", + "拾起時,可從 #b3 張隨機 #yguardianmod:寶石 牌中選擇 #b1 張,重復三次。 NL 戰鬥開始時,獲得 #b1 張 #y鑲嵌 有它們的 #b0 耗能 #y保留 #y消耗 牌。", "選擇寶石裝入寶石槍" ] }, @@ -116,7 +124,7 @@ "NAME": "瓶裝異常", "FLAVOR": "旋轉,旋轉,最後破碎。", "DESCRIPTIONS": [ - "拾起時,選擇 #b1 張牌。 NL 戰鬥開始時,將其移出牌組。第 #b3 回合開始時,再將其加入手牌並且本場戰鬥耗能變為 #b0 。", + "拾起時,選擇牌組 #b1 張牌。 NL 戰鬥開始時,將其移出牌組。第 #b3 回合開始時,再將其加入手牌並且本場戰鬥第1次打出的耗能變為 #b0 。", "選擇一張牌 ", "戰鬥開始時,將 ", " 移出牌組。第 #b3 回合開始時,再將其加入手牌並且本場戰鬥耗能變為 #b0 。", diff --git a/src/main/resources/guardianResources/localization/zht/UIStrings.json b/src/main/resources/guardianResources/localization/zht/UIStrings.json index 4a00c39f8..44ebcac60 100644 --- a/src/main/resources/guardianResources/localization/zht/UIStrings.json +++ b/src/main/resources/guardianResources/localization/zht/UIStrings.json @@ -10,14 +10,14 @@ }, "Guardian:UIOptions": { "TEXT": [ - "選擇一張牌凝滯。", + "選擇一張牌凝滯 。", "拾起一顆寶石。", - "將一顆普通寶石加入牌組。", + "將1顆寶石加入牌組", "進行凝滯。", "~錯誤:~ 不能在建設形態時 #r攻擊 。", "~錯誤:~ 在 #r凝滯 進程中。", - "將一顆寶石加入你的牌組中。", - "(隊列後的牌先被凝滯)" + "將1顆寶石加入牌組。", + "" ] }, "Guardian:FindGemsOption": { @@ -35,7 +35,7 @@ "Guardian:gemDescriptor": { "TEXT": [ "寶石", - "guardianmod:寶石. NL " + "guardianmod:寶石 。 NL " ] } } diff --git a/src/main/resources/hermitResources/images/tip/AutomatonTip1.png b/src/main/resources/hermitResources/images/tip/AutomatonTip1.png new file mode 100644 index 000000000..51fd447fc Binary files /dev/null and b/src/main/resources/hermitResources/images/tip/AutomatonTip1.png differ diff --git a/src/main/resources/hermitResources/images/tip/AutomatonTip2.png b/src/main/resources/hermitResources/images/tip/AutomatonTip2.png new file mode 100644 index 000000000..9251cd449 Binary files /dev/null and b/src/main/resources/hermitResources/images/tip/AutomatonTip2.png differ diff --git a/src/main/resources/hermitResources/images/tip/ChampTip1.png b/src/main/resources/hermitResources/images/tip/ChampTip1.png new file mode 100644 index 000000000..916aca832 Binary files /dev/null and b/src/main/resources/hermitResources/images/tip/ChampTip1.png differ diff --git a/src/main/resources/hermitResources/images/tip/ChampTip2.png b/src/main/resources/hermitResources/images/tip/ChampTip2.png new file mode 100644 index 000000000..6e58c1d56 Binary files /dev/null and b/src/main/resources/hermitResources/images/tip/ChampTip2.png differ diff --git a/src/main/resources/hermitResources/images/tip/GremlinsTip1.png b/src/main/resources/hermitResources/images/tip/GremlinsTip1.png new file mode 100644 index 000000000..764b7a94e Binary files /dev/null and b/src/main/resources/hermitResources/images/tip/GremlinsTip1.png differ diff --git a/src/main/resources/hermitResources/images/tip/GremlinsTip2.png b/src/main/resources/hermitResources/images/tip/GremlinsTip2.png new file mode 100644 index 000000000..d5ba94fa9 Binary files /dev/null and b/src/main/resources/hermitResources/images/tip/GremlinsTip2.png differ diff --git a/src/main/resources/hermitResources/images/tip/SlimeBossTip1.png b/src/main/resources/hermitResources/images/tip/SlimeBossTip1.png new file mode 100644 index 000000000..81b77d248 Binary files /dev/null and b/src/main/resources/hermitResources/images/tip/SlimeBossTip1.png differ diff --git a/src/main/resources/hermitResources/images/tip/SlimeBossTip2.png b/src/main/resources/hermitResources/images/tip/SlimeBossTip2.png new file mode 100644 index 000000000..d9e781862 Binary files /dev/null and b/src/main/resources/hermitResources/images/tip/SlimeBossTip2.png differ diff --git a/src/main/resources/hermitResources/images/tip/SneckoTip1.png b/src/main/resources/hermitResources/images/tip/SneckoTip1.png new file mode 100644 index 000000000..fe80f1321 Binary files /dev/null and b/src/main/resources/hermitResources/images/tip/SneckoTip1.png differ diff --git a/src/main/resources/hermitResources/images/tip/SneckoTip2.png b/src/main/resources/hermitResources/images/tip/SneckoTip2.png new file mode 100644 index 000000000..d207e9bb0 Binary files /dev/null and b/src/main/resources/hermitResources/images/tip/SneckoTip2.png differ diff --git a/src/main/resources/hermitResources/images/tip/awakened_t1.png b/src/main/resources/hermitResources/images/tip/awakened_t1.png new file mode 100644 index 000000000..43302986c Binary files /dev/null and b/src/main/resources/hermitResources/images/tip/awakened_t1.png differ diff --git a/src/main/resources/hermitResources/images/tip/awakened_t2.png b/src/main/resources/hermitResources/images/tip/awakened_t2.png new file mode 100644 index 000000000..2eccf183a Binary files /dev/null and b/src/main/resources/hermitResources/images/tip/awakened_t2.png differ diff --git a/src/main/resources/hermitResources/localization/eng/CardStrings.json b/src/main/resources/hermitResources/localization/eng/CardStrings.json index 8fdc3dd52..fe4c5f4f0 100644 --- a/src/main/resources/hermitResources/localization/eng/CardStrings.json +++ b/src/main/resources/hermitResources/localization/eng/CardStrings.json @@ -99,7 +99,7 @@ }, "hermit:Dive": { "NAME": "Dive", - "DESCRIPTION": "Gain !B! Block. NL hermit:Dead_On\: NL Gain !M! *Plated *Armor." + "DESCRIPTION": "Gain !B! Block. NL hermit:Dead_On\: NL Gain !M! expansioncontent:Plated *Armor." }, "hermit:FlashPowder": { "NAME": "Flash Powder", @@ -134,7 +134,7 @@ }, "hermit:Scavenge": { "NAME": "Scavenge", - "DESCRIPTION": "Gain !M! *Plated *Armor. NL hermit:Dead_On: NL Gain !hermit:SecondMagic! Gold. NL Exhaust." + "DESCRIPTION": "Gain !M! expansioncontent:Plated *Armor. NL hermit:Dead_On: NL Gain !hermit:SecondMagic! Gold. NL Exhaust." }, "hermit:ImpendingDoom": { "NAME": "Impending Doom", diff --git a/src/main/resources/hermitResources/localization/eng/KeywordStrings.json b/src/main/resources/hermitResources/localization/eng/KeywordStrings.json index f390cb76b..b644b759b 100644 --- a/src/main/resources/hermitResources/localization/eng/KeywordStrings.json +++ b/src/main/resources/hermitResources/localization/eng/KeywordStrings.json @@ -34,7 +34,7 @@ "NAMES": [ "rugged" ], - "DESCRIPTION": "Reduces next instance of attack damage taken to #b2." + "DESCRIPTION": "Reduces next instance of attack damage taken to #b2 [REMOVE_SPACE]." }, { "PROPER_NAME": "Bounty", diff --git a/src/main/resources/hermitResources/localization/eng/PotionStrings.json b/src/main/resources/hermitResources/localization/eng/PotionStrings.json index ed4b0d9d0..c653eedff 100644 --- a/src/main/resources/hermitResources/localization/eng/PotionStrings.json +++ b/src/main/resources/hermitResources/localization/eng/PotionStrings.json @@ -1,11 +1,11 @@ { "hermit:Tonic": { "NAME": "Tonic", - "DESCRIPTIONS": ["Gain #b", " #yRugged."] + "DESCRIPTIONS": ["Gain #b", " #yRugged [REMOVE_SPACE]."] }, "hermit:BlackBile": { "NAME": "Black Bile", - "DESCRIPTIONS": ["Apply #b", " #yBruise."] + "DESCRIPTIONS": ["Apply #b", " #yBruise [REMOVE_SPACE]."] }, "hermit:Eclipse": { "NAME": "Liquid Void", diff --git a/src/main/resources/hermitResources/localization/eng/PowerStrings.json b/src/main/resources/hermitResources/localization/eng/PowerStrings.json index 25f15cce1..34259ef60 100644 --- a/src/main/resources/hermitResources/localization/eng/PowerStrings.json +++ b/src/main/resources/hermitResources/localization/eng/PowerStrings.json @@ -13,11 +13,11 @@ }, "hermit:ShadowCloakPower": { "NAME": "Shadow Cloak", - "DESCRIPTIONS": ["Whenever you draw or #yExhaust a curse, gain #b", " Block."] + "DESCRIPTIONS": ["Whenever you draw or #yExhaust a #rCurse, gain #b", " Block."] }, "hermit:TakeAimPower": { "NAME": "Take Aim", - "DESCRIPTIONS": ["At the start of your turn, #yConcentrate."] + "DESCRIPTIONS": ["At the start of your turn, #yConcentrate [REMOVE_SPACE]."] }, "hermit:AdaptPower": { "NAME": "Adapt", @@ -45,7 +45,7 @@ }, "hermit:Rugged": { "NAME": "Rugged", - "DESCRIPTIONS": ["The next", " times you would take unblocked attack damage, reduce it to #b2.", " time you would take unblocked attack damage, reduce it to #b2."] + "DESCRIPTIONS": ["The next", " times you would take unblocked attack damage, reduce it to #b2 [REMOVE_SPACE].", " time you would take unblocked attack damage, reduce it to #b2 [REMOVE_SPACE]."] }, "hermit:EternalPower": { "NAME": "Power Eternal", @@ -61,11 +61,11 @@ }, "hermit:Drained": { "NAME": "Drained", - "DESCRIPTIONS": ["Gain #b", " less energy next turn."] + "DESCRIPTIONS": ["Gain #b", " less [E] next turn."] }, "hermit:DeterminationPower": { "NAME": "Determination", - "DESCRIPTIONS": ["Whenever a debuff is applied to you, gain #b", " #yStrength."] + "DESCRIPTIONS": ["Whenever a debuff is applied to you, gain #b", " #yStrength [REMOVE_SPACE]."] }, "hermit:RyeStalkPower": { "NAME": "Rye Stalk", diff --git a/src/main/resources/hermitResources/localization/eng/RelicStrings.json b/src/main/resources/hermitResources/localization/eng/RelicStrings.json index edcc2ec77..d8bce644e 100644 --- a/src/main/resources/hermitResources/localization/eng/RelicStrings.json +++ b/src/main/resources/hermitResources/localization/eng/RelicStrings.json @@ -17,36 +17,39 @@ "NAME": "Shotglass", "FLAVOR": "Any liquid placed inside changes into something else.", "DESCRIPTIONS": [ - "First #b2 times you use a potion each combat, gain a random potion. You can only use #b2 potions each combat.", - "You cannot use any more potions this combat." + "First #b", + "You cannot use any more potions this combat.", + " times you use a potion each combat, gain a random potion. You can only use #b", + " potions each combat." ] }, "hermit:Horseshoe": { "NAME": "Horseshoe", "FLAVOR": "Lucky charm. Somebody is gonna be missing this.", "DESCRIPTIONS": [ - "Whenever you gain #yWeak, #yFrail or #yVulnerable, gain #b1 less." + "Whenever you gain #yWeak [REMOVE_SPACE], #yFrail or #yVulnerable [REMOVE_SPACE], gain #b1 less." ] }, "hermit:Spyglass": { "NAME": "Spyglass", "FLAVOR": "Property of Kestin Highfin.", "DESCRIPTIONS": [ - "If you end your turn #yhermit:Concentrated, gain an additional [E] next turn ." + "If you end your turn #yhermit:Concentrated [REMOVE_SPACE], gain an additional [E] next turn ." ] }, "hermit:RedScarf": { "NAME": "Red Scarf", "FLAVOR": "It's warm and fuzzy.", "DESCRIPTIONS": [ - "Whenever you apply a new debuff to an enemy, gain #b3 #yBlock." + "Whenever you apply a new debuff to an enemy, gain #b", + " #yBlock [REMOVE_SPACE]." ] }, "hermit:DentedPlate": { "NAME": "Dented Plate", "FLAVOR": "Several bullets are still lodged inside.", "DESCRIPTIONS": [ - "While your HP is at or below #b50%, gain [E] and draw #b1 card at the start of your turn." + "While your HP is at or below #b50% [REMOVE_SPACE], gain [E] and draw #b1 card at the start of your turn." ] }, "hermit:PetGhost": { @@ -60,43 +63,51 @@ "NAME": "Charred Glove", "FLAVOR": "Parts of the glove still glow with otherworldly cinders.", "DESCRIPTIONS": [ - "Whenever you draw a #rCurse, your next attack deals #b3 more damage." + "Whenever you draw a #rCurse [REMOVE_SPACE], your next attack deals #b", + " more damage." ] }, "hermit:ClaspedLocket": { "NAME": "Clasped Locket", "FLAVOR": "It won't open anymore.", "DESCRIPTIONS": [ - "Replaces #yOld #yLocket. First time you draw a curse each turn, #yExhaust it and draw #b2 cards. Upon pickup, obtain #b2 #rInjuries.", - "Never again..." + "Replaces #yOld #yLocket [REMOVE_SPACE]. First time you draw a #rCurse each turn, #yExhaust it and draw #b", + "Never again...", + " cards. Upon pickup, obtain #b", + " #rInjuries [REMOVE_SPACE]." ] }, "hermit:StraightRazor": { "NAME": "Straight Razor", "FLAVOR": "For a cleaner shave...", "DESCRIPTIONS": [ - "Whenever you remove or #yTransform a card from your deck, heal #b15 HP." + "Whenever you remove or #yTransform a card from your deck, heal #b", + " HP." ] }, "hermit:BrassTacks": { "NAME": "Brass Tacks", "FLAVOR": "The luster on these tacks never seems to fade.", "DESCRIPTIONS": [ - "At the end of your turn, gain #b2 Block." + "At the end of your turn, gain #b", + " #yBlock [REMOVE_SPACE]." ] }, "hermit:BlackPowder": { "NAME": "Black Powder", "FLAVOR": "Handle with care.", "DESCRIPTIONS": [ - "Whenever you trigger a #yhermit:Dead_On effect, deal #b2 damage to ALL enemies." + "Whenever you trigger a #yhermit:Dead_On effect, deal #b", + " damage to ALL enemies." ] }, "hermit:BloodyTooth": { "NAME": "Broken Tooth", "FLAVOR": "Appears too large to have come from a human jaw...", "DESCRIPTIONS": [ - "Whenever you defeat an Elite encounter, heal #b7 HP and gain #b35 gold." + "Whenever you defeat an Elite encounter, heal #b", + " HP and gain #b", + " Gold." ] } } diff --git a/src/main/resources/hermitResources/localization/eng/TutorialStrings.json b/src/main/resources/hermitResources/localization/eng/TutorialStrings.json index 6fc023827..e6e56ba7b 100644 --- a/src/main/resources/hermitResources/localization/eng/TutorialStrings.json +++ b/src/main/resources/hermitResources/localization/eng/TutorialStrings.json @@ -51,6 +51,71 @@ ")" ] }, + "HermitMod:ChampTutorials": { + "TEXT": [ + "The Champ can switch between the two Gladiatorial Stances, Berserker Stance and Defensive Stance. Playing Skills while in these Stances will activate their Skill Bonuses, up to three times.", + "He can also use powerful Finisher cards while in these stances at the cost of exiting them." + ], + "LABEL": [ + "Next", + "Got it", + "The Champ", + "(Page: ", + ")" + ] + }, + "HermitMod:AutomatonTutorials": { + "TEXT": [ + "The Automaton can use Encode cards to add up to three cards to a Sequence and combine them into a singular Function Card.", + "Some cards have special Compile Effects which activate when they are combined into a Function, which can be either positive or negative (referred to as a Compile Error)." + ], + "LABEL": [ + "Next", + "Got it", + "The Automaton", + "(Page: ", + ")" + ] + }, + "HermitMod:SneckoTutorials": { + "TEXT": [ + "The Snecko can Muddle cards to temporarily change their cost to a number between 0 and 3. Muddle will always change the cost of a card and will never reroll the cost to the same number.", + "They can also find Gift cards that grant them cards from other characters when they take them." + ], + "LABEL": [ + "Next", + "Got it", + "The Snecko", + "(Page: ", + ")" + ] + }, + "HermitMod:GremlinsTutorials": { + "TEXT": [ + "The Gremlins are five characters at once and all have their own unique effects and HP.", + "You can Swap between them using certain cards." + ], + "LABEL": [ + "Next", + "Got it", + "The Gremlins", + "(Page: ", + ")" + ] + }, + "HermitMod:SlimeBossTutorials": { + "TEXT": [ + "The Slime Boss can apply Goop to enemies to increase the damage they take the next time they are attacked, removing all Goop and triggering any Consume effects.", + "He can also Split into Slime minions that attack at the start of his turn and whenever he Commands." + ], + "LABEL": [ + "Next", + "Got it", + "The Slime Boss", + "(Page: ", + ")" + ] + }, "HermitMod:CollectorTutorials": { "TEXT": [ "Collector takes Essences from foes. You can spend Essences to add their spirits into your Collection.", @@ -63,5 +128,18 @@ "(Page: ", ")" ] + }, + "HermitMod:AwakenedOneTutorials": { + "TEXT": [ + "The Awakened One has a powerful selection of Spell cards found inside of their Spellbook.", + "Whenever you play a card with Conjure, you draw one card from it. Emptying the Spellbook refreshes all Spells." + ], + "LABEL": [ + "Next", + "Got it", + "The Awakened One", + "(Page: ", + ")" + ] } } \ No newline at end of file diff --git a/src/main/resources/hermitResources/localization/jpn/CardStrings.json b/src/main/resources/hermitResources/localization/jpn/CardStrings.json index e09a31a84..9559196ed 100644 --- a/src/main/resources/hermitResources/localization/jpn/CardStrings.json +++ b/src/main/resources/hermitResources/localization/jpn/CardStrings.json @@ -1,31 +1,31 @@ { "hermit:Strike_Hermit": { "NAME": "ストライク", - "DESCRIPTION": " !D! ダメージを与える。" + "DESCRIPTION": "!D! ダメージを与える。" }, "hermit:Defend_Hermit": { "NAME": "防御", - "DESCRIPTION": " !B! ブロックを得る。" + "DESCRIPTION": "!B! ブロックを得る。" }, "hermit:Snapshot": { "NAME": "速射", - "DESCRIPTION": " !D! ダメージを与える。 NL hermit:デッド-オン : 防御されなかったダメージ分の ブロック を得る。" + "DESCRIPTION": "!D! ダメージを与える。 NL hermit:デッド-オン : 防御されなかったダメージ分の ブロック を得る。" }, "hermit:Desperado": { "NAME": "デスペラード", - "DESCRIPTION": " !D! ダメージを与える。 NL このカードのダメージを2倍にし、コストを1増やす。" + "DESCRIPTION": "!D! ダメージを与える。 NL このカードのダメージを2倍にし、コストを1増やす。" }, "hermit:Headshot": { "NAME": "ヘッドショット", - "DESCRIPTION": " !D! ダメージを与える。 NL hermit:デッド-オン : 2倍のダメージを与える。" + "DESCRIPTION": "!D! ダメージを与える。 NL hermit:デッド-オン : 2倍のダメージを与える。" }, "hermit:Quickdraw": { "NAME": "クイックドロー", - "DESCRIPTION": " !D! ダメージを与える。 NL カードを !M! 枚引く。 NL 次のターン、ドロー枚数が1減る。" + "DESCRIPTION": "!D! ダメージを与える。 NL カードを !M! 枚引く。 NL 次のターン、ドロー枚数が1減る。" }, "hermit:WideOpen": { "NAME": "風穴を開ける", - "DESCRIPTION": " !D! ダメージを与える。 NL 弱体 !M! を与える。" + "DESCRIPTION": "!D! ダメージを与える。 NL 弱体 !M! を与える。" }, "hermit:Covet": { "NAME": "コベット", @@ -34,8 +34,8 @@ }, "hermit:HighCaliber": { "NAME": "ハイ-キャリバー", - "DESCRIPTION": " !D! ダメージを与える。 NL *ストライク+2 を手札に加える。 NL 廃棄", - "UPGRADE_DESCRIPTION": " !D! ダメージを与える。 NL *ストライク+3 を手札に加える。 NL 廃棄" + "DESCRIPTION": "!D! ダメージを与える。 NL *ストライク+2 を手札に加える。 NL 廃棄", + "UPGRADE_DESCRIPTION": "!D! ダメージを与える。 NL *ストライク+3 を手札に加える。 NL 廃棄" }, "hermit:BodyArmor": { "NAME": "ボディアーマー", @@ -48,12 +48,12 @@ }, "hermit:CalledShot": { "NAME": "コールドショット", - "DESCRIPTION": " !D! ダメージを与える。 NL このターン最後にプレイしたカードが *デッド-オン を発動した場合カードを1枚引く。", + "DESCRIPTION": "!D! ダメージを与える。 NL このターン最後にプレイしたカードが *デッド-オン を発動した場合カードを1枚引く。", "UPGRADE_DESCRIPTION": "保留 NL !D! ダメージを与える。 NL このターン最後にプレイしたカードが *デッド-オン を発動した場合カードを1枚引く。" }, "hermit:Dissolve": { "NAME": "ディゾルブ", - "DESCRIPTION": " !B! ブロックを得る。 NL 2ターンの間余ったブロックが解除されない。 NL 廃棄" + "DESCRIPTION": "!B! ブロックを得る。 NL 2ターンの間余ったブロックが解除されない。 NL 廃棄" }, "hermit:BlackWind": { "NAME": "ブラックウィンド", @@ -79,7 +79,7 @@ }, "hermit:Roughhouse": { "NAME": "乱闘", - "DESCRIPTION": " !D! ダメージを与える。 hermit:デッド-オン : NL !B! ブロックを得る。" + "DESCRIPTION": "!D! ダメージを与える。 hermit:デッド-オン : NL !B! ブロックを得る。" }, "hermit:Malice": { "NAME": "悪意", @@ -87,11 +87,11 @@ }, "hermit:Deadeye": { "NAME": "デッド-アイ", - "DESCRIPTION": " !D! ダメージを与える。 NL hermit:デッド-オン : NL 筋力 !M! を得る。" + "DESCRIPTION": "!D! ダメージを与える。 NL hermit:デッド-オン : NL 筋力 !M! を得る。" }, "hermit:GhostlyPresence": { "NAME": "幽霊の様な存在", - "DESCRIPTION": " !B! ブロックを得る。 NL hermit:デッド-オン : NL 敵全体に 脱力 !M! を与える。" + "DESCRIPTION": "!B! ブロックを得る。 NL hermit:デッド-オン : NL 敵全体に 脱力 !M! を与える。" }, "hermit:Adapt": { "NAME": "アダプト", @@ -99,20 +99,20 @@ }, "hermit:Dive": { "NAME": "ダイブ", - "DESCRIPTION": " !B! ブロックを得る。 NL hermit:デッド-オン : NL *プレートアーマー !M! を得る。" + "DESCRIPTION": "!B! ブロックを得る。 NL hermit:デッド-オン : NL *プレートアーマー !M! を得る。" }, "hermit:FlashPowder": { "NAME": "フラッシュパウダー", - "DESCRIPTION": " !B! ブロックを得る。 NL 敵全体が 筋力 !M! を失う。 NL 廃棄" + "DESCRIPTION": "!B! ブロックを得る。 NL 敵全体が 筋力 !M! を失う。 NL 廃棄" }, "hermit:Roulette": { "NAME": "ルーレット", - "DESCRIPTION": " !D! ダメージを与える。 NL 手札を捨て同じ数のカードを引く。" + "DESCRIPTION": "!D! ダメージを与える。 NL 手札を捨て同じ数のカードを引く。" }, "hermit:Midnight": { "NAME": "ミッドナイト", - "DESCRIPTION": " !B! ブロックを得る。 NL 手札に *迫りくる破滅 を加える。", - "UPGRADE_DESCRIPTION": " !B! ブロックを得る。 NL 手札に *迫りくる破滅 を加える。" + "DESCRIPTION": "!B! ブロックを得る。 NL 手札に *迫りくる破滅 を加える。", + "UPGRADE_DESCRIPTION": "!B! ブロックを得る。 NL 手札に *迫りくる破滅 を加える。" }, "hermit:Glare": { "NAME": "グレア", @@ -126,7 +126,7 @@ }, "hermit:Misfire": { "NAME": "ミスファイア", - "DESCRIPTION": " !D! ダメージを与える。 NL *不器用 を山札に加える。" + "DESCRIPTION": "!D! ダメージを与える。 NL *不器用 を山札に加える。" }, "hermit:SprayPray": { "NAME": "乱射", @@ -146,7 +146,7 @@ }, "hermit:Shortfuse": { "NAME": "ショートヒューズ", - "DESCRIPTION": " !D! ダメージを与える。 NL このターンにプレイされた *ストライク と *防御 1回につきコストが [E] 減少する。" + "DESCRIPTION": "!D! ダメージを与える。 NL このターンにプレイされた *ストライク と *防御 1回につきコストが [E] 減少する。" }, "hermit:Grudge": { "NAME": "グラッジ", @@ -158,15 +158,15 @@ }, "hermit:Manifest": { "NAME": "マニフェスト", - "DESCRIPTION": " !B! ブロックを得る。 NL *腐敗 を手札に加える。" + "DESCRIPTION": "!B! ブロックを得る。 NL *腐敗 を手札に加える。" }, "hermit:Feint": { "NAME": "フェイント", - "DESCRIPTION": " !B! ブロックを得る。 NL 敵全体に !M! hermit:傷 を与える。" + "DESCRIPTION": "!B! ブロックを得る。 NL 敵全体に !M! hermit:傷 を与える。" }, "hermit:LowProfile": { "NAME": "気配を消す", - "DESCRIPTION": " !B! ブロックを得る。 NL 受けているデバフの数 x !M! ブロックを追加で得る。" + "DESCRIPTION": "!B! ブロックを得る。 NL 受けているデバフの数 x !M! ブロックを追加で得る。" }, "hermit:Horror": { "NAME": "ホラー", @@ -182,8 +182,8 @@ }, "hermit:Vantage": { "NAME": "バンテージ", - "DESCRIPTION": " !B! ブロックを得る。 NL hermit:デッド-オン : NL カードを !M! 枚引き、アップグレードする。", - "UPGRADE_DESCRIPTION": " !B! ブロックを得る。 NL hermit:デッド-オン : NL カードを !M! 枚引き、アップグレードする。" + "DESCRIPTION": "!B! ブロックを得る。 NL hermit:デッド-オン : NL カードを !M! 枚引き、アップグレードする。", + "UPGRADE_DESCRIPTION": "!B! ブロックを得る。 NL hermit:デッド-オン : NL カードを !M! 枚引き、アップグレードする。" }, "hermit:Brawl": { "NAME": "大喧嘩", @@ -230,11 +230,11 @@ }, "hermit:Enervate": { "NAME": "エネルベート", - "DESCRIPTION": " !D! ダメージを与える。 NL hermit:デッド-オン : NL [E] を得て カードを 1 枚引く。" + "DESCRIPTION": "!D! ダメージを与える。 NL hermit:デッド-オン : NL [E] を得て カードを 1 枚引く。" }, "hermit:Ricochet": { "NAME": "跳弾", - "DESCRIPTION": " !D! ダメージを与える。 このターンに発動した hermit:デッド-オン の数だけ繰り返す。", + "DESCRIPTION": "!D! ダメージを与える。 このターンに発動した hermit:デッド-オン の数だけ繰り返す。", "EXTENDED_DESCRIPTION": [" NL ( !M! ", "回)","回)"] }, "hermit:TrackingShot": { @@ -277,11 +277,11 @@ }, "hermit:Coalescence": { "NAME": "融合", - "DESCRIPTION": " !B! ブロックを得る。 NL このターン !M! 枚のカードを 保留 する。" + "DESCRIPTION": "!B! ブロックを得る。 NL このターン !M! 枚のカードを 保留 する。" }, "hermit:PistolWhip": { "NAME": "銃で殴る", - "DESCRIPTION": " !D! ダメージを与える。 NL !M! hermit:傷 を与える。" + "DESCRIPTION": "!D! ダメージを与える。 NL !M! hermit:傷 を与える。" }, "hermit:DeadMansHand": { "NAME": "死人の手札", @@ -289,24 +289,23 @@ }, "hermit:DeadOrAlive": { "NAME": "Dead Or Alive", - "DESCRIPTION": " !D! ダメージを X 回与える。 NL 致命 時、 hermit:バウンティ を得る。 NL 廃棄" + "DESCRIPTION": "!D! ダメージを X 回与える。 NL 致命 時、 hermit:バウンティ を得る。 NL 廃棄" }, "hermit:GoldenBullet": { "NAME": "黄金の銃弾", - "DESCRIPTION": " !D! ダメージを与える。 NL 致命 時、このカードのコストを永続的に1下げる。 NL 廃棄" + "DESCRIPTION": "!D! ダメージを与える。 NL 致命 時、このカードのコストを永続的に1下げる。 NL 廃棄" }, "hermit:HoleUp": { "NAME": "隠れる", - "DESCRIPTION": " !B! ブロックを得る。 NL 脱力 !M! を受ける。" + "DESCRIPTION": "!B! ブロックを得る。 NL 脱力 !M! を受ける。" }, "hermit:ItchyTrigger": { "NAME": "軽い引き金", - "DESCRIPTION": " !D! ダメージを与える。 NL hermit:デッド-オン : 手札のランダムなカードのコストを !M! 軽減する。" + "DESCRIPTION": "!D! ダメージを与える。 NL hermit:デッド-オン : 手札のランダムなカードのコストを !M! 軽減する。" }, "hermit:EyeOfTheStorm": { "NAME": "Eye Of The Storm", - "DESCRIPTION": "hermit:集中 NL エナジーを最大にする。 NL 廃棄", - "UPGRADE_DESCRIPTION": "カードを 1 枚引く。 NL hermit:デッド-オン : NL エナジーを最大にする。 NL 廃棄" + "DESCRIPTION": "hermit:集中 NL エナジーを最大にする。 NL 廃棄" }, "hermit:FinalCanter": { "NAME": "最後の仕上げ", diff --git a/src/main/resources/hermitResources/localization/jpn/TutorialStrings.json b/src/main/resources/hermitResources/localization/jpn/TutorialStrings.json index 4f34869ce..7c82fbc3c 100644 --- a/src/main/resources/hermitResources/localization/jpn/TutorialStrings.json +++ b/src/main/resources/hermitResources/localization/jpn/TutorialStrings.json @@ -51,6 +51,71 @@ ")" ] }, + "HermitMod:ChampTutorials": { + "TEXT": [ + "チャンプは強化スタンス、守護スタンスの二種類のスタンスを切り替えて戦う事が出来る。これらのスタンス中にスキルをプレイすると、最大3回までスキルボーナスを得ることが出来る。", + "また、スタンス中には強力なフィニッシャーカードをプレイすることが出来るが、代わりにスタンスが解除される。" + ], + "LABEL": [ + "次", + "了解", + "チャンプ", + "(Page: ", + ")" + ] + }, + "HermitMod:AutomatonTutorials": { + "TEXT": [ + "オートマトンは 「エンコード」を持つカードを利用して最大3枚までのカードをシークエンスに追加、それらを1枚の「ファンクション」カードに組み合わせることが出来る。", + "また、一部のカードには「コンパイル」効果を持ち、その効果はファンクションカードに変換される時に発動する。(この効果は有用な物もあれば、不利な効果をもたらす「コンパイルエラー」なる物もある。)" + ], + "LABEL": [ + "次", + "了解", + "オートマトン", + "(Page: ", + ")" + ] + }, + "HermitMod:SneckoTutorials": { + "TEXT": [ + "スネッコはカードを「泥まみれ」にして、そのカードコストをランダムに0から3の間で変化させる事が出来る。泥は常にカードのコストを変化させるため、同じコストになる事は無い。", + "また、スネッコは「ギフト」カードを見つけることが出来、これを取得すると他のキャラクターのカードを利用することが出来る。" + ], + "LABEL": [ + "次", + "了解", + "スネッコ", + "(Page: ", + ")" + ] + }, + "HermitMod:GremlinsTutorials": { + "TEXT": [ + "グレムリン達は同時に5人が存在し、それぞれが独自の効果とHPを持っている。", + "特定のカードをプレイする事で先頭のグレムリンと交代して戦うことが出来る。" + ], + "LABEL": [ + "次", + "了解", + "グレムリン", + "(Page: ", + ")" + ] + }, + "HermitMod:SlimeBossTutorials": { + "TEXT": [ + "スライムボスは敵に「汚泥」を付与し、次に行うアタックの効果を増加させる。攻撃時に汚泥はすべて取り除かれるが、カードが持つ「泥食い」の効果が発動する。", + "また、スライムミニオンに分裂する事が可能で、ミニオンはターン開始時や「命令」を持つカードをプレイした時に攻撃を行う。" + ], + "LABEL": [ + "次", + "了解", + "スライムボス", + "(Page: ", + ")" + ] + }, "HermitMod:CollectorTutorials": { "TEXT": [ "コレクターは敵からエッセンスを奪う事が出来る。あなたはエッセンスを消費することでその霊魂をコレクションに加えることが出来る。", diff --git a/src/main/resources/hermitResources/localization/kor/CardStrings.json b/src/main/resources/hermitResources/localization/kor/CardStrings.json index 353fef40c..1dc99609a 100644 --- a/src/main/resources/hermitResources/localization/kor/CardStrings.json +++ b/src/main/resources/hermitResources/localization/kor/CardStrings.json @@ -75,7 +75,7 @@ }, "hermit:Gambit": { "NAME": "책략", - "DESCRIPTION": "버린 카드 더미에서 무작위 공격 카드를 !M! 장 가져옵니다. NL 이번 턴 동안 그 카드의 비용을 1 낮춥니다. NL 소멸." + "DESCRIPTION": "버린 카드 더미에서 무작위 공격 카드를 !M! 장 가져옵니다. NL 이번 턴에 그 카드의 비용을 1 낮춥니다. NL 소멸." }, "hermit:Roughhouse": { "NAME": "난장판", @@ -99,7 +99,7 @@ }, "hermit:Dive": { "NAME": "급하강", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL hermit:정조준\: NL *판금 *갑옷을 !M! 얻습니다." + "DESCRIPTION": "방어도를 !B! 얻습니다. NL hermit:정조준\: NL expansioncontent:판금_갑옷을 !M! 얻습니다." }, "hermit:FlashPowder": { "NAME": "섬광탄", @@ -134,7 +134,7 @@ }, "hermit:Scavenge": { "NAME": "청소부", - "DESCRIPTION": "*판금 *갑옷을 !M! 얻습니다. NL hermit:정조준: NL 골드를 !hermit:SecondMagic! 얻습니다. NL 소멸." + "DESCRIPTION": "expansioncontent:판금_갑옷을 !M! 얻습니다. NL hermit:정조준: NL 골드를 !hermit:SecondMagic! 얻습니다. NL 소멸." }, "hermit:ImpendingDoom": { "NAME": "임박한 종말", @@ -305,7 +305,7 @@ }, "hermit:EyeOfTheStorm": { "NAME": "태풍의 눈", - "DESCRIPTION": "최대 [E] 보다 모자란 만큼 [E] 를 얻습니다. NL 소멸." + "DESCRIPTION": "hermit:집중합니다. NL 최대 [E] 보다 모자란 만큼 [E] 를 얻습니다. NL 소멸." }, "hermit:FinalCanter": { "NAME": "최후의 위선", diff --git a/src/main/resources/hermitResources/localization/kor/RelicStrings.json b/src/main/resources/hermitResources/localization/kor/RelicStrings.json index d38bb5eb1..7df88e0ac 100644 --- a/src/main/resources/hermitResources/localization/kor/RelicStrings.json +++ b/src/main/resources/hermitResources/localization/kor/RelicStrings.json @@ -67,7 +67,7 @@ "NAME": "굳게 닫힌 목걸이", "FLAVOR": "더 이상 열리지 않습니다.", "DESCRIPTIONS": [ - "#y오래된 #y목걸이와 교체합니다. 매 턴 처음으로 저주를 뽑을 때마다 그 카드를 #y소멸시키고 카드를 2장 뽑습니다. 획득 시, #y상처를 #b2 장 얻습니다.", + "#y오래된 #y목걸이와 교체합니다. 매 턴 처음으로 #r저주를 뽑을 때마다 그 카드를 #y소멸시키고 카드를 2장 뽑습니다. 획득 시, #y상처를 #b2 장 얻습니다.", "두 번 다시는..." ] }, @@ -82,7 +82,7 @@ "NAME": "놋쇠 압정", "FLAVOR": "이 압정들의 광채는 결코 사라지지 않을 것 같습니다.", "DESCRIPTIONS": [ - "내 턴 종료 시 방어도를 #b2 얻습니다." + "내 턴 종료 시 #y방어도를 #b2 얻습니다." ] }, "hermit:BlackPowder": { diff --git a/src/main/resources/hermitResources/localization/kor/TutorialStrings.json b/src/main/resources/hermitResources/localization/kor/TutorialStrings.json index 0156b817d..f3072345c 100644 --- a/src/main/resources/hermitResources/localization/kor/TutorialStrings.json +++ b/src/main/resources/hermitResources/localization/kor/TutorialStrings.json @@ -51,6 +51,71 @@ ")" ] }, + "HermitMod:ChampTutorials": { + "TEXT": [ + "투사는 2가지 검투사 자세인 광폭화 자세와 수비 자세를 취할 수 있습니다. 자세를 취하는 동안 스킬 카드를 사용하면 해당하는 스킬 보너스가 3번까지 발동합니다.", + "자세를 취하는 동안에는 자세를 벗어나는 대가로 강력한 마무리 카드를 사용할 수 있습니다." + ], + "LABEL": [ + "다음", + "알겠습니다", + "투사", + "(페이지: ", + ")" + ] + }, + "HermitMod:AutomatonTutorials": { + "TEXT": [ + "청동 자동인형은 부호화 카드를 3장까지 사용해 함수 카드 1장으로 병합할 수 있습니다.", + "일부 카드가 보유하는 컴파일은 함수 카드로 병합될 때 긍정적이거나 부정적인 고유 효과가 발동하는 것을 의미합니다. 부정적인 효과는 컴파일 에러라고 표시됩니다." + ], + "LABEL": [ + "다음", + "알겠습니다", + "청동 자동인형", + "(페이지: ", + ")" + ] + }, + "HermitMod:SneckoTutorials": { + "TEXT": [ + "스네코는 카드를 뒤엉키게 해 카드의 비용을 0에서 3까지 일시적으로 변경할 수 있습니다. 뒤엉킨 카드의 비용은 항상 변경되며 그 턴에 다시 뒤엉키게 하면 같은 비용이 되지 않게끔합니다.", + "카드 획득 시 다른 캐릭터의 기프트 카드를 얻을 수 있습니다." + ], + "LABEL": [ + "다음", + "알겠습니다", + "스네코", + "(페이지: ", + ")" + ] + }, + "HermitMod:GremlinsTutorials": { + "TEXT": [ + "그렘린 군단은 5명 모두 전투에 참여하게 됩니다. 각기 고유 체력과 고유 효과를 보유하고 있습니다.", + "특정 카드를 사용해 그렘린을 변경할 수 있습니다." + ], + "LABEL": [ + "다음", + "알겠습니다", + "그렘린 군단", + "(페이지: ", + ")" + ] + }, + "HermitMod:SlimeBossTutorials": { + "TEXT": [ + "대왕 슬라임은 피해량을 증가시키는 점액을 부여해 다음번 해당 적 공격 시 점액을 모두 제거하고 적이 받는 피해를 증가시킬 수 있습니다. 점액이 제거될 때 소비 효과가 발동하게 됩니다.", + "슬라임 하수인으로 분열해서 대왕 슬라임의 턴 시작 시 공격하거나 명령해서 공격할 수도 있습니다." + ], + "LABEL": [ + "다음", + "알겠습니다", + "대왕 슬라임", + "(페이지: ", + ")" + ] + }, "HermitMod:CollectorTutorials": { "TEXT": [ "수집가는 적한테 정수를 얻습니다. 정수를 소모해서 그들의 영혼을 수집품에 추가할 수 있습니다.", diff --git a/src/main/resources/hermitResources/localization/rus/CardStrings.json b/src/main/resources/hermitResources/localization/rus/CardStrings.json index 5ded77721..cbfaf135e 100644 --- a/src/main/resources/hermitResources/localization/rus/CardStrings.json +++ b/src/main/resources/hermitResources/localization/rus/CardStrings.json @@ -35,7 +35,7 @@ }, "hermit:Coalescence": { "NAME": "Слияние", - "DESCRIPTION": "Даёт !M! Защиты. NL Оставьте до !M! карт в конце этого хода." + "DESCRIPTION": "Даёт !B! Защиты. NL Оставьте до !M! карт в конце этого хода." }, "hermit:Combo": { "NAME": "Комбо", diff --git a/src/main/resources/hermitResources/localization/spa/CardStrings.json b/src/main/resources/hermitResources/localization/spa/CardStrings.json new file mode 100644 index 000000000..8be72b44d --- /dev/null +++ b/src/main/resources/hermitResources/localization/spa/CardStrings.json @@ -0,0 +1,332 @@ +{ + "hermit:Strike_Hermit": { + "NAME": "Golpe", + "DESCRIPTION": "Haz !D! de daño." + }, + "hermit:Defend_Hermit": { + "NAME": "Defensa", + "DESCRIPTION": "Gana !B! de Bloqueo." + }, + "hermit:Snapshot": { + "NAME": "Instantánea", + "DESCRIPTION": "Haz !D! de daño. hermit:Preciso: Gana Bloqueo igual al daño sin bloquear infligido." + }, + "hermit:Desperado": { + "NAME": "Desesperado", + "DESCRIPTION": "Haz !D! de daño. NL Duplica el daño de esta carta en este combate. Cuesta 1 más." + }, + "hermit:Headshot": { + "NAME": "Tiro en la Cabeza", + "DESCRIPTION": "Haz !D! de daño. NL hermit:Preciso: Haz el doble de daño." + }, + "hermit:Quickdraw": { + "NAME": "Desenfunde Rápido", + "DESCRIPTION": "Haz !D! de daño. NL Roba !M! cartas. NL El próximo turno robas 1 carta menos." + }, + "hermit:WideOpen": { + "NAME": "A Quemarropa", + "DESCRIPTION": "Haz !D! de daño. NL Aplica !M! de Vulnerable." + }, + "hermit:Covet": { + "NAME": "Codicia", + "DESCRIPTION": "Descarta 1 carta. NL Roba !M! carta. NL Las *Maldiciones descartadas se Agotan.", + "UPGRADE_DESCRIPTION": "Descarta 1 carta. NL Roba !M! cartas. NL Las *Maldiciones descartadas se Agotan." + }, + "hermit:HighCaliber": { + "NAME": "Alto Calibre", + "DESCRIPTION": "Haz !D! de daño. NL Añade un *Golpe+2 a tu mano. NL Agota.", + "UPGRADE_DESCRIPTION": "Haz !D! de daño. NL Añade un *Golpe+3 a tu mano. NL Agota." + }, + "hermit:BodyArmor": { + "NAME": "Armadura Corporal", + "DESCRIPTION": "Descarta una carta. NL Gana !B! de Bloqueo. NL Si no era un Ataque, gana !B! de Bloqueo adicional." + }, + "hermit:Snipe": { + "NAME": "Disparo Certero", + "DESCRIPTION": "Tu siguiente efecto hermit:Preciso este turno se activa dos veces. NL Agota.", + "UPGRADE_DESCRIPTION": "hermit:Concentración. NL Tu siguiente efecto hermit:Preciso este turno se activa dos veces. NL Agota." + }, + "hermit:CalledShot": { + "NAME": "Disparo Calculado", + "DESCRIPTION": "Haz !D! de daño. NL Si la última carta jugada este turno activó *Preciso, roba una carta.", + "UPGRADE_DESCRIPTION": "Retiene. NL Haz !D! de daño. NL Si la última carta jugada este turno activó *Preciso, roba una carta." + }, + "hermit:Dissolve": { + "NAME": "Disolver", + "DESCRIPTION": "Gana !B! de Bloqueo. NL El Bloqueo no se pierde al inicio de tus próximos 2 turnos. NL Agota." + }, + "hermit:BlackWind": { + "NAME": "Viento Negro", + "DESCRIPTION": "Etérea. NL Haz daño igual a tu vida faltante. NL Agota.", + "UPGRADE_DESCRIPTION": " NL (Haz !D! de daño.)" + }, + "hermit:Purgatory": { + "NAME": "Purgatorio", + "DESCRIPTION": "Etérea. NL Haz !D! de daño a TODOS los enemigos." + }, + "hermit:ShadowCloak": { + "NAME": "Capa Sombría", + "DESCRIPTION": "Cada vez que robes o agotes una carta de Maldición, gana !M! de Bloqueo." + }, + "hermit:FatalDesire": { + "NAME": "Deseo Fatal", + "DESCRIPTION": "Al inicio de tu turno, roba 2 cartas y añade una *Lesión a tu mano.", + "UPGRADE_DESCRIPTION": "Innata. NL Al inicio de tu turno, roba 2 cartas y añade una *Lesión a tu mano." + }, + "hermit:Gambit": { + "NAME": "Apuesta Arriesgada", + "DESCRIPTION": "Pon !M! Ataques aleatorios de tu pila de descarte en tu mano. Cuestan 1 menos este turno. NL Agota." + }, + "hermit:Roughhouse": { + "NAME": "Trifulca", + "DESCRIPTION": "Haz !D! de daño. hermit:Preciso: NL Gana !B! de Bloqueo." + }, + "hermit:Malice": { + "NAME": "Malicia", + "DESCRIPTION": "Agota una carta. NL Haz !D! de daño. NL Si agotas una Maldición, hace !D! de daño a TODOS los enemigos en su lugar." + }, + "hermit:Deadeye": { + "NAME": "Ojo de Muerto", + "DESCRIPTION": "Haz !D! de daño. NL hermit:Preciso: NL Gana !M! de Fuerza." + }, + "hermit:GhostlyPresence": { + "NAME": "Presencia Fantasmal", + "DESCRIPTION": "Gana !B! de Bloqueo. NL hermit:Preciso: NL Aplica !M! de Débil a TODOS los enemigos." + }, + "hermit:Adapt": { + "NAME": "Adaptarse", + "DESCRIPTION": "Al inicio de tu turno, puedes Agotar una carta para ganar 8 de Bloqueo." + }, + "hermit:Dive": { + "NAME": "Zambullida", + "DESCRIPTION": "Gana !B! de Bloqueo. NL hermit:Preciso: NL Gana !M! de *Armadura *de expansioncontent:Placas." + }, + "hermit:FlashPowder": { + "NAME": "Polvo Cegador", + "DESCRIPTION": "Gana !B! de Bloqueo. NL TODOS los enemigos pierden !M! de Fuerza. NL Agota." + }, + "hermit:Roulette": { + "NAME": "Ruleta", + "DESCRIPTION": "Haz !D! de daño. NL Descarta tu mano. NL Roba la misma cantidad de cartas." + }, + "hermit:Midnight": { + "NAME": "Medianoche", + "DESCRIPTION": "Gana !B! de Bloqueo. NL Añade una *Perdición *Inminente a tu mano.", + "UPGRADE_DESCRIPTION": "Gana !B! de Bloqueo. NL Añade una *Perdición *Inminente a tu mano." + }, + "hermit:Glare": { + "NAME": "Mirada Penetrante", + "DESCRIPTION": "Aplica !M! de Débil y Vulnerable.", + "UPGRADE_DESCRIPTION": "Retiene. NL Aplica !M! de Débil y Vulnerable." + }, + "hermit:TakeCover": { + "NAME": "Cubrirse", + "DESCRIPTION": "Añade una *Defensa de coste 0 a tu mano y Mejórala X veces. NL Agota.", + "UPGRADE_DESCRIPTION": "Añade una *Defensa+ de coste 0 a tu mano y Mejórala X veces. NL Agota." + }, + "hermit:Misfire": { + "NAME": "Disparo Fallido", + "DESCRIPTION": "Haz !D! de daño. NL Baraja una *Patoso en tu mazo de robo." + }, + "hermit:SprayPray": { + "NAME": "Disparos a Ciegas", + "DESCRIPTION": "Haz !D! de daño a un enemigo aleatorio 3 veces. NL Baraja una *Duda en tu mazo de robo." + }, + "hermit:Scavenge": { + "NAME": "Rebuscar", + "DESCRIPTION": "Gana !M! de *Armadura *de expansioncontent:Placas. NL hermit:Preciso: NL Gana !hermit:SecondMagic! de Oro. NL Agota." + }, + "hermit:ImpendingDoom": { + "NAME": "Perdición Inminente", + "DESCRIPTION": "Injugable. NL Si está hermit:Preciso al final de tu turno, hace 13 de daño a TODOS." + }, + "hermit:MementoCard": { + "NAME": "Recuerdo", + "DESCRIPTION": "Retiene. NL Aplica !M! Vulnerable a TODOS." + }, + "hermit:Shortfuse": { + "NAME": "Mecha Corta", + "DESCRIPTION": "Haz !D! de daño. NL Cuesta 1 [E] menos por cada *Golpe o *Defensa jugada este turno." + }, + "hermit:Grudge": { + "NAME": "Envidia", + "DESCRIPTION": "Haz !D! de daño a TODOS los enemigos. NL Hace !M! más por cada Maldición que tengas." + }, + "hermit:Spite": { + "NAME": "Despecho", + "DESCRIPTION": "Agota todas las cartas Injugables en tu mano. NL Gana !B! de Bloqueo. NL Roba !M! cartas." + }, + "hermit:Manifest": { + "NAME": "Manifestar", + "DESCRIPTION": "Gana !B! de Bloqueo. NL Añade una *Descomposición a tu mano." + }, + "hermit:Feint": { + "NAME": "Finta", + "DESCRIPTION": "Gana !B! de Bloqueo. NL Aplica !M! de hermit:Contusión a TODOS los enemigos." + }, + "hermit:LowProfile": { + "NAME": "Perfil Bajo", + "DESCRIPTION": "Gana !B! de Bloqueo. NL Obtiene !M! de Bloqueo adicional por cada Desventaja que tengas." + }, + "hermit:Horror": { + "NAME": "Horror", + "DESCRIPTION": "Aplica !M! de hermit:Contusión a TODOS los enemigos. NL La contusión no se elimina este turno." + }, + "hermit:NoHoldsBarred": { + "NAME": "Sin Piedad", + "DESCRIPTION": "Haz !D! de daño y aplica !M! de hermit:Contusión a TODOS los enemigos. NL Gana 1 [E] menos el próximo turno." + }, + "hermit:Cheat": { + "NAME": "Trampa", + "DESCRIPTION": "Juega una de las primeras !M! cartas de tu mazo de robo. NL hermit:Preciso: También activa su efecto de hermit:Preciso." + }, + "hermit:Vantage": { + "NAME": "Ventaja", + "DESCRIPTION": "Gana !B! de Bloqueo. NL hermit:Preciso: Roba y Mejora una carta.", + "UPGRADE_DESCRIPTION": "Gana !B! de Bloqueo. NL hermit:Preciso: Roba y Mejora !M! cartas." + }, + "hermit:Brawl": { + "NAME": "Pelea de Taberna", + "DESCRIPTION": "Al inicio de tu turno, aplica !M! de hermit:Contusión a TODOS los enemigos." + }, + "hermit:Combo": { + "NAME": "Combo", + "DESCRIPTION": "Devuelve a tu mano la primera carta hermit:Preciso activada cada turno.", + "UPGRADE_DESCRIPTION": "Devuelve a tu mano las primeras !M! cartas hermit:Preciso activadas cada turno." + }, + "hermit:BigShot": { + "NAME": "Bala Humeante", + "DESCRIPTION": "Cada vez que actives un efecto hermit:Preciso, tu siguiente ataque hace !M! más daño." + }, + "hermit:OverwhelmingPower": { + "NAME": "Poder Abrumador", + "DESCRIPTION": "Gana [E] [E] [E]. NL Roba !hermit:SecondMagic! cartas. NL Si terminas tu turno con 0 Energía, pierde !M! PV." + }, + "hermit:Maintenance": { + "NAME": "Mantenimiento", + "DESCRIPTION": "*Golpes Hacen !M! más daño este combate. NL Gana !hermit:SecondMagic! de Destreza. NL Este cuesta 1 más este combate." + }, + "hermit:EternalForm": { + "NAME": "Forma Eterna", + "DESCRIPTION": "Etérea. NL Las primeras 4 cartas jugables robadas al inicio de cada turno cuestan 1 menos ese turno.", + "UPGRADE_DESCRIPTION": "Las primeras 4 cartas jugables robadas al inicio de cada turno cuestan 1 menos ese turno." + }, + "hermit:FullyLoaded": { + "NAME": "Totalmente Cargado", + "DESCRIPTION": "Agrega todos los *Golpes y *Defensas de tu mazo de robo a tu mano. NL Agota.", + "UPGRADE_DESCRIPTION": "Retiene. NL Agrega todos los *Golpes y *Defensas de tu mazo de robo a tu mano. NL Agota." + }, + "hermit:Gestalt": { + "NAME": "Gestalt", + "DESCRIPTION": "Gana 2 hermit:Resistente. NL Gana !M! de Vulnerable. NL Agota." + }, + "hermit:RoundhouseKick": { + "NAME": "Patada Circular", + "DESCRIPTION": "Haz !D! de daño a TODOS los enemigos. NL hermit:Aturde a los que no planean atacar. NL Agota." + }, + "hermit:CursedWeapon": { + "NAME": "Arma Maldita", + "DESCRIPTION": "Pierde !M! PV. NL Haz !D! de daño. NL *Arma *Maldita Hace !hermit:SecondMagic! más de daño de forma permanente. Agota." + }, + "hermit:Enervate": { + "NAME": "Desgaste", + "DESCRIPTION": "Haz !D! de daño. NL hermit:Preciso: NL Gana [E] y roba una carta." + }, + "hermit:Ricochet": { + "NAME": "Ricochet", + "DESCRIPTION": "Haz !D! de daño. Repite contra un enemigo aleatorio por cada efecto hermit:Preciso activado este turno.", + "EXTENDED_DESCRIPTION": [ + " NL (Repite !M! ", + "vez.)", + "veces.)" + ] + }, + "hermit:TrackingShot": { + "NAME": "Disparo de Rastreo", + "DESCRIPTION": "hermit:Concentración. NL Haz !D! de daño dos veces." + }, + "hermit:LoneWolf": { + "NAME": "Lobo Solitario", + "DESCRIPTION": "Elige una carta. NL Cuesta 0 este turno. NL Descarta el resto de tu mano." + }, + "hermit:HighNoon": { + "NAME": "Mediodía", + "DESCRIPTION": "Cada vez que juegues un *Golpe o *Defensa, roba una carta." + }, + "hermit:Reprieve": { + "NAME": "Reprieve", + "DESCRIPTION": "Etérea. NL Cura !M! PV. NL Agota." + }, + "hermit:TakeAim": { + "NAME": "Apuntar", + "DESCRIPTION": "Al inicio de tu turno, hermit:Concentración.", + "UPGRADE_DESCRIPTION": "hermit:Concentración. NL Al inicio de tu turno, hermit:Concentración." + }, + "hermit:Magnum": { + "NAME": "Magnum", + "DESCRIPTION": "Descarta 6 cartas. NL Por cada carta, haz !D! de daño." + }, + "hermit:Determination": { + "NAME": "Determinación", + "DESCRIPTION": "Cada vez que recibas una Desventaja, gana 1 de Fuerza.", + "UPGRADE_DESCRIPTION": "Innata. NL Cada vez que recibas una Desventaja, gana 1 de Fuerza." + }, + "hermit:Showdown": { + "NAME": "Duelo", + "DESCRIPTION": "Haz !D! de daño. NL Juega todos los *Golpes de tu mano." + }, + "hermit:LuckOfTheDraw": { + "NAME": "Suerte del Sorteo", + "DESCRIPTION": "Roba cartas hasta que su coste total sea al menos !M!." + }, + "hermit:Coalescence": { + "NAME": "Coalescencia", + "DESCRIPTION": "Gana !B! Bloqueo. NL Retiene hasta !M! cartas este turno." + }, + "hermit:PistolWhip": { + "NAME": "Culatazo", + "DESCRIPTION": "Haz !D! de daño. NL Aplica !M! hermit:Contusión." + }, + "hermit:DeadMansHand": { + "NAME": "Mano del Muerto", + "DESCRIPTION": "Descarta tu mano. Agrega las !M! cartas más raras de tu mazo de robo a tu mano." + }, + "hermit:DeadOrAlive": { + "NAME": "Vivo o Muerto", + "DESCRIPTION": "Haz !D! de daño X veces. NL Si es Fatal, obtén una hermit:Recompensa. NL Agota." + }, + "hermit:GoldenBullet": { + "NAME": "Bala Dorada", + "DESCRIPTION": "Haz !D! de daño. NL Si es Fatal, reduce permanentemente el coste de esta carta en 1. NL Agota." + }, + "hermit:HoleUp": { + "NAME": "Esconderse", + "DESCRIPTION": "Gana !B! Bloqueo. NL Gana !M! de Débil." + }, + "hermit:ItchyTrigger": { + "NAME": "Gatillo Fácil", + "DESCRIPTION": "Haz !D! de daño. NL hermit:Preciso: Reduce el coste de una carta aleatoria en tu mano en !M! este turno." + }, + "hermit:EyeOfTheStorm": { + "NAME": "Ojo de la Tormenta", + "DESCRIPTION": "hermit:Concentración. NL Gana Energía hasta el máximo. NL Agota." + }, + "hermit:FinalCanter": { + "NAME": "Galope Final", + "DESCRIPTION": "Retiene. NL Haz !D! de daño por cada Maldición en tu mano. NL Agota.", + "UPGRADE_DESCRIPTION": " NL (Tienes !M! Maldición.)", + "EXTENDED_DESCRIPTION": [" NL (Tienes !M! Maldiciones.)"] + }, + "hermit:HeroicBravado": { + "NAME": "Bravura Heroica", + "DESCRIPTION": "Etérea. NL Gana 1 hermit:Resistente. NL Aumenta el coste de esta carta en !M! este combate." + }, + "hermit:FromBeyond": { + "NAME": "Desde el Más Allá", + "DESCRIPTION": "Por cada carta en tu pila de agotadas, un enemigo aleatorio pierde !M! de vida." + }, + "hermit:Virtue": { + "NAME": "Virtud", + "DESCRIPTION": "Retiene. NL Reduce cada uno de tus Desventajas en !M!." + } +} \ No newline at end of file diff --git a/src/main/resources/hermitResources/localization/spa/CharacterStrings.json b/src/main/resources/hermitResources/localization/spa/CharacterStrings.json new file mode 100644 index 000000000..6dc05bad7 --- /dev/null +++ b/src/main/resources/hermitResources/localization/spa/CharacterStrings.json @@ -0,0 +1,15 @@ +{ + "hermit:hermit": { + "NAMES": [ + "El Ermitaño", + "el Ermitaño" + ], + "TEXT": [ + "Pistolero no muerto solitario de un lugar lejano. NL Perseguido por el espectro ineludible del pasado.", + "NL Alcanzas tu funda...", + "Navegando por una calle sin iluminar, te encuentras con varias figuras encapuchadas en medio de algún oscuro ritual. Al acercarte, se vuelven hacia ti en una aterradora sincronía. El más alto entre ellos muestra sus colmillos y extiende una mano larga y pálida hacia ti. NL ~«Únete~ ~a~ ~nosotros,~ ~vacío,~ ~y~ ~siente~ ~el~ ~calor~ ~del~ ~Spire.»~", + "#y~DESESPERACIÓN.~ NL NL El último adversario se hunde en el suelo, agarrando una herida humeante. Sus cuerpos apenas tienen tiempo de enfriarse antes de que comiences a saquear los restos. NL NL #bTelas. #rPlacas. #yOro. NL NL Las nubes se arremolinan alto por encima, un mal presagio. Has permanecido demasiado tiempo en un lugar. Pronto vendrán por ti. NL NL Nuevamente tienes que huir, #rpero #ra #rdónde?", + "Siguiente" + ] + } +} diff --git a/src/main/resources/hermitResources/localization/spa/DailyModStrings.json b/src/main/resources/hermitResources/localization/spa/DailyModStrings.json new file mode 100644 index 000000000..0db3279e4 --- /dev/null +++ b/src/main/resources/hermitResources/localization/spa/DailyModStrings.json @@ -0,0 +1,3 @@ +{ + +} diff --git a/src/main/resources/hermitResources/localization/spa/EventStrings.json b/src/main/resources/hermitResources/localization/spa/EventStrings.json new file mode 100644 index 000000000..0db3279e4 --- /dev/null +++ b/src/main/resources/hermitResources/localization/spa/EventStrings.json @@ -0,0 +1,3 @@ +{ + +} diff --git a/src/main/resources/hermitResources/localization/spa/KeywordStrings.json b/src/main/resources/hermitResources/localization/spa/KeywordStrings.json new file mode 100644 index 000000000..a58f90fb5 --- /dev/null +++ b/src/main/resources/hermitResources/localization/spa/KeywordStrings.json @@ -0,0 +1,65 @@ +[ + { + "PROPER_NAME": "Preciso", + "NAMES": [ + "Dead On", + "Dead_On", + "dead_on", + "deadon", + "preciso", + "Precisa" + ], + "DESCRIPTION": "Las cartas con Preciso tienen un efecto adicional si están en el centro de tu mano." + }, + { + "PROPER_NAME": "Concentración", + "NAMES": [ + "Concentrate", + "concentrate", + "concentrated", + "Concentrated", + "concentración", + "concentrado" + ], + "DESCRIPTION": "La siguiente carta con #yPreciso que juegues mientras estés en #yConcentración activará su efecto sin importar la posición. Se pierde al final del turno." + }, + { + "PROPER_NAME": "Contusión", + "NAMES": [ + "bruise", + "bruised", + "contusión", + ], + "DESCRIPTION": "Los objetivos con Contusión reciben más daño de ataques. Se pierde al final del turno." + }, + { + "PROPER_NAME": "Resistente", + "NAMES": [ + "rugged", + "resistente", + ], + "DESCRIPTION": "Reduce la siguiente instancia de daño de ataque recibido a #b2 [REMOVE_SPACE]." + }, + { + "PROPER_NAME": "Recompensa", + "NAMES": [ + "bounty", + "recompensa", + ], + "DESCRIPTION": "Enemigo normal: #b15 de oro. Elite: #b40 de oro. Jefe: #b100 de oro." + }, + { + "PROPER_NAME": "Aturdir", + "NAMES": [ + "stun", + "Stun", + "stunned", + "Stunned", + "aturdir", + "aturdido", + "aturde", + "atúrdelo" + ], + "DESCRIPTION": "Los enemigos aturdidos pierden su turno." + } +] diff --git a/src/main/resources/hermitResources/localization/spa/MonsterStrings.json b/src/main/resources/hermitResources/localization/spa/MonsterStrings.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/src/main/resources/hermitResources/localization/spa/MonsterStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/hermitResources/localization/spa/OrbStrings.json b/src/main/resources/hermitResources/localization/spa/OrbStrings.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/src/main/resources/hermitResources/localization/spa/OrbStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/hermitResources/localization/spa/PotionStrings.json b/src/main/resources/hermitResources/localization/spa/PotionStrings.json new file mode 100644 index 000000000..e25bb6998 --- /dev/null +++ b/src/main/resources/hermitResources/localization/spa/PotionStrings.json @@ -0,0 +1,24 @@ +{ + "hermit:Tonic": { + "NAME": "Tónico", + "DESCRIPTIONS": [ + "Obtén #b", + " #yResistente [REMOVE_SPACE]." + ] + }, + "hermit:BlackBile": { + "NAME": "Bilis Negra", + "DESCRIPTIONS": [ + "Aplica #b", + " #yContusión [REMOVE_SPACE]." + ] + }, + "hermit:Eclipse": { + "NAME": "Vacío Líquido", + "DESCRIPTIONS": [ + "Pon #b", + " carta de tu pila de #yAgotadas en tu mano. Cuesta #b0 este turno.", + " cartas de tu pila de #yAgotadas en tu mano. Cuestan #b0 este turno." + ] + } +} diff --git a/src/main/resources/hermitResources/localization/spa/PowerStrings.json b/src/main/resources/hermitResources/localization/spa/PowerStrings.json new file mode 100644 index 000000000..59ff97899 --- /dev/null +++ b/src/main/resources/hermitResources/localization/spa/PowerStrings.json @@ -0,0 +1,94 @@ +{ + "hermit:Concentration": { + "NAME": "Concentración", + "DESCRIPTIONS": ["La siguiente carta con #yPreciso que juegues este turno activará su efecto sin importar su posición."] + }, + "hermit:HighNoonPower": { + "NAME": "Mediodía", + "DESCRIPTIONS": ["Cada vez que juegues una carta #yGolpe o #yDefender, roba #b", " carta.", " cartas."] + }, + "hermit:FatalDesirePower": { + "NAME": "Deseo Fatal", + "DESCRIPTIONS": ["Al inicio de tu turno, roba #b", " cartas y añade #b", " #yLesión a tu mano.", " #yLesiónes a tu mano."] + }, + "hermit:ShadowCloakPower": { + "NAME": "Manto Sombrío", + "DESCRIPTIONS": ["Cada vez que robes o #yAgotes una maldición, gana #b", " Bloqueo."] + }, + "hermit:TakeAimPower": { + "NAME": "Apuntar", + "DESCRIPTIONS": ["Al inicio de tu turno, #yConcéntrate [REMOVE_SPACE]."] + }, + "hermit:AdaptPower": { + "NAME": "Adaptarse", + "DESCRIPTIONS": ["Al inicio de tu turno, #yAgota hasta #b", " carta para ganar #b8 de Bloqueo.", " cartas. Gana #b8 de Bloqueo por cada una."] + }, + "hermit:Bruise": { + "NAME": "Contusión", + "DESCRIPTIONS": ["Este turno, el objetivo recibe #b", " más daño de ataques."] + }, + "hermit:HorrorPower": { + "NAME": "Horror", + "DESCRIPTIONS": ["Contusión no se eliminará durante #b", " turno.", " turnos."] + }, + "hermit:ComboPower": { + "NAME": "Combo", + "DESCRIPTIONS": ["La primera carta con #yPreciso activada este turno será devuelta a tu mano.", " Las primeras #b", " cartas con #yPreciso activadas este turno serán devueltas a tu mano."] + }, + "hermit:BigShotPower": { + "NAME": "Cañón Humeante", + "DESCRIPTIONS": ["Cada vez que actives un efecto #yPreciso, tu siguiente ataque inflige #b", " de daño adicional."] + }, + "hermit:BrawlPower": { + "NAME": "Pelea", + "DESCRIPTIONS": ["Al inicio de tu turno, aplica #b", " Contusión a TODOS los enemigos."] + }, + "hermit:Rugged": { + "NAME": "Resistente", + "DESCRIPTIONS": ["Las siguientes", " veces que recibirías daño de ataque sin bloquear, se reduce a #b2 [REMOVE_SPACE].", " vez que recibirías daño de ataque sin bloquear, se reduce a #b2 [REMOVE_SPACE]."] + }, + "hermit:EternalPower": { + "NAME": "Poder Eterno", + "DESCRIPTIONS": ["Las primeras #b4 cartas jugables que robes al inicio de cada turno cuestan #b", " menos ese turno."] + }, + "hermit:OverwhelmingPowerPower": { + "NAME": "Poder Abrumador", + "DESCRIPTIONS": ["Pierdes #b", " de vida si terminas tu turno con #b0 Energía."] + }, + "hermit:Bounty": { + "NAME": "Recompensa", + "DESCRIPTIONS": ["Recompensa actual: #b"] + }, + "hermit:Drained": { + "NAME": "Drenado", + "DESCRIPTIONS": ["Ganas #b", " menos energía el próximo turno."] + }, + "hermit:DeterminationPower": { + "NAME": "Determinación", + "DESCRIPTIONS": ["Cada vez que recibas un perjuicio, gana #b", " de Fuerza."] + }, + "hermit:RyeStalkPower": { + "NAME": "Tallo de Centeno", + "DESCRIPTIONS": ["Al final de este turno, #yRetiene cualquier cantidad de cartas."] + }, + "hermit:PetGhostPower": { + "NAME": "Fantasma Compañero", + "DESCRIPTIONS": ["No puedes morir. Mueres al final de", " tu siguiente turno.", " este turno."] + }, + "hermit:SnipePower": { + "NAME": "Disparo Certero", + "DESCRIPTIONS": ["El siguiente efecto de #yPreciso se activa dos veces este turno.", " Los siguientes #b", " efectos de #yPreciso se activan dos veces este turno."] + }, + "hermit:CoalescencePower": { + "NAME": "Coalescencia", + "DESCRIPTIONS": ["Al final de tu turno, #yRetiene hasta #b", " carta.", " cartas."] + }, + "hermit:ReprievePower": { + "NAME": "Reprieve", + "DESCRIPTIONS": ["Toma #b", " turno adicional después de este.", " turnos adicionales después de este."] + }, + "hermit:MaintenanceStrikePower": { + "NAME": "Mantenimiento", + "DESCRIPTIONS": ["Tus cartas #yGolpe infligen #b", " de daño adicional."] + } +} diff --git a/src/main/resources/hermitResources/localization/spa/RelicStrings.json b/src/main/resources/hermitResources/localization/spa/RelicStrings.json new file mode 100644 index 000000000..fa6b3c47a --- /dev/null +++ b/src/main/resources/hermitResources/localization/spa/RelicStrings.json @@ -0,0 +1,103 @@ +{ + "hermit:Momento": { + "NAME": "Medallón Viejo", + "FLAVOR": "Tiene una fotografía descolorida dentro.", + "DESCRIPTIONS": [ + "Al comienzo de cada combate, añade un #yRecuerdo a tu mano." + ] + }, + "hermit:RyeStalk": { + "NAME": "Tallo de Centeno", + "FLAVOR": "Sigue en perfecto estado, a pesar de haber sido masticado por tanto tiempo.", + "DESCRIPTIONS": [ + "Cada vez que pierdas vida durante el turno del enemigo, roba #b1 carta." + ] + }, + "hermit:BartenderGlass": { + "NAME": "Vaso de Chupito", + "FLAVOR": "Cualquier líquido dentro se transforma en otra cosa.", + "DESCRIPTIONS": [ + "Las primeras #b2 veces que uses una poción en cada combate, obtén una poción aleatoria. Solo puedes usar #b2 pociones por combate.", + "No puedes usar más pociones en este combate." + ] + }, + "hermit:Horseshoe": { + "NAME": "Herradura", + "FLAVOR": "Amuleto de la suerte. Alguien va a echarla de menos.", + "DESCRIPTIONS": [ + "Cada vez que ganes #yDébil, #yFrágil o #yVulnerable, recibes #b1 menos de ese efecto." + ] + }, + "hermit:Spyglass": { + "NAME": "Catalejo", + "FLAVOR": "Propiedad de Kestin Highfin.", + "DESCRIPTIONS": [ + "Si terminas tu turno #yhermit:Concentrado, gana [E] adicional el próximo turno." + ] + }, + "hermit:RedScarf": { + "NAME": "Bufanda Roja", + "FLAVOR": "Es cálida y suave.", + "DESCRIPTIONS": [ + "Cada vez que apliques una nueva Desventaja a un enemigo, gana #b3 #yBloqueo." + ] + }, + "hermit:DentedPlate": { + "NAME": "Placa Abollada", + "FLAVOR": "Todavía hay varias balas incrustadas en ella.", + "DESCRIPTIONS": [ + "Mientras tengas #b50% o menos de vida, gana [E] y roba #b1 carta al inicio de tu turno." + ] + }, + "hermit:PetGhost": { + "NAME": "Fantasma Compañero", + "FLAVOR": "Pobrecillo.", + "DESCRIPTIONS": [ + "Evita tu primera muerte por pérdida de PV en cada combate." + ] + }, + "hermit:CharredGlove": { + "NAME": "Guante Chamuscado", + "FLAVOR": "Algunas partes aún brillan con cenizas sobrenaturales.", + "DESCRIPTIONS": [ + "Cada vez que robes una carta #rMaldición, tu siguiente ataque inflige #b3 de daño adicional." + ] + }, + "hermit:ClaspedLocket": { + "NAME": "Medallón Cerrado", + "FLAVOR": "Ya no se puede abrir.", + "DESCRIPTIONS": [ + "Reemplaza el #yMedallón #yViejo. La primera vez que robes una carta #rMaldición cada turno, #yAgótala y roba #b2 cartas. Al obtener esta reliquia, consigue #b2 #rInjurias.", + "Nunca más..." + ] + }, + "hermit:StraightRazor": { + "NAME": "Navaja Recta", + "FLAVOR": "Para un afeitado más apurado...", + "DESCRIPTIONS": [ + "Cada vez que elimines o #yTransformes una carta de tu mazo, cura #b15 de vida." + ] + }, + "hermit:BrassTacks": { + "NAME": "Clavos de Latón", + "FLAVOR": "El brillo de estos clavos nunca parece desvanecerse.", + "DESCRIPTIONS": [ + "Al final de tu turno, gana #b2 #yBloqueo." + ] + }, + "hermit:BlackPowder": { + "NAME": "Pólvora Negra", + "FLAVOR": "Manéjala con cuidado.", + "DESCRIPTIONS": [ + "Cada vez que actives un efecto de #yhermit:Preciso, inflige #b2 de daño a TODOS los enemigos." + ] + }, + "hermit:BloodyTooth": { + "NAME": "Diente Roto", + "FLAVOR": "Parece demasiado grande para ser de una mandíbula humana...", + "DESCRIPTIONS": [ + "Cada vez que derrotes a un enemigo de Élite, cura #b7 de vida y gana #b35 de oro." + ] + } +} + diff --git a/src/main/resources/hermitResources/localization/spa/RunModStrings.json b/src/main/resources/hermitResources/localization/spa/RunModStrings.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/src/main/resources/hermitResources/localization/spa/RunModStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/hermitResources/localization/spa/TutorialStrings.json b/src/main/resources/hermitResources/localization/spa/TutorialStrings.json new file mode 100644 index 000000000..331384d96 --- /dev/null +++ b/src/main/resources/hermitResources/localization/spa/TutorialStrings.json @@ -0,0 +1,132 @@ +{ + "HermitMod:HermitTutorials": { + "TEXT": [ + "El Ermitaño puede usar cartas con #yPreciso. NL NL Las cartas con #yPreciso activan su efecto especial cuando están posicionadas en el centro de tu mano.", + "Si tienes una cantidad par de cartas, #yambas cartas del centro cuentan, incluso si son las únicas en tu mano." + ], + "LABEL": [ + "Siguiente", + "Entendido", + "Preciso", + "(Página: ", + ")" + ] + }, + "HermitMod:GuardianTutorials": { + "TEXT": [ + "El Guardián puede Reforzarse al obtener cierta cantidad de Reforzar.", + "También puede insertar Gemas en cartas para mejorar sus efectos." + ], + "LABEL": [ + "Siguiente", + "Entendido", + "El Guardián", + "(Página: ", + ")" + ] + }, + "HermitMod:HexaghostTutorials": { + "TEXT": [ + "Hexafantasma canaliza poder al Cargar sus Llamas.", + "Realiza una acción específica mientras cada una esté Activa para Cargarla." + ], + "LABEL": [ + "Siguiente", + "Entendido", + "El Hexafantasma", + "(Página: ", + ")" + ] + }, + "HermitMod:CharbossTutorials": { + "TEXT": [ + "Los Héroes enemigos tienen habilidades poderosas que pueden obligarte a cambiar tu estrategia.", + "Asegúrate de revisar los beneficios de un héroe antes de enfrentarlo." + ], + "LABEL": [ + "Siguiente", + "Entendido", + "Asesinos del Spire", + "(Página: ", + ")" + ] + }, + "HermitMod:ChampTutorials": { + "TEXT": [ + "El Campeón puede alternar entre dos Posturas Gladiatorias: Postura de Berserker y Postura Defensivo. Al jugar Habilidades mientras estás en estas posturas, se activan sus Bonos de Habilidad, hasta tres veces.", + "También puede usar cartas de Remate poderosas mientras esté en estas posturas, a costa de salir de ellas." + ], + "LABEL": [ + "Siguiente", + "Entendido", + "El Campeón", + "(Página: ", + ")" + ] + }, + "HermitMod:AutomatonTutorials": { + "TEXT": [ + "El Autómata puede usar cartas de Codificar para añadir hasta tres cartas a una Secuencia y combinarlas en una sola carta de Función.", + "Algunas cartas tienen Efectos de Compilar especiales que se activan al combinarse en una Función. Estos pueden ser positivos o negativos (llamados Errores de Compilación)." + ], + "LABEL": [ + "Siguiente", + "Entendido", + "El Autómata", + "(Página: ", + ")" + ] + }, + "HermitMod:SneckoTutorials": { + "TEXT": [ + "La Serpentija puede Confundir cartas para cambiar temporalmente su coste a un número entre 0 y 3. Confusión siempre cambia el coste de la carta y nunca lo deja igual.", + "También puede encontrar cartas de Regalo que le otorgan cartas de otros personajes al tomarlas." + ], + "LABEL": [ + "Siguiente", + "Entendido", + "La Serpentija", + "(Página: ", + ")" + ] + }, + "HermitMod:GremlinsTutorials": { + "TEXT": [ + "Los Gremlins son cinco personajes a la vez y cada uno tiene efectos y puntos de vida únicos.", + "Puedes intercambiarlos usando ciertas cartas." + ], + "LABEL": [ + "Siguiente", + "Entendido", + "Los Gremlins", + "(Página: ", + ")" + ] + }, + "HermitMod:SlimeBossTutorials": { + "TEXT": [ + "El Rey Babosa puede aplicar Baba a los enemigos para aumentar el daño que reciben en el siguiente ataque, eliminando toda la Baba y activando cualquier efecto de Consumir.", + "También puede Dividirse en Babas que atacan al inicio de su turno y cuando da una Orden." + ], + "LABEL": [ + "Siguiente", + "Entendido", + "El Rey Babosa", + "(Página: ", + ")" + ] + }, + "HermitMod:CollectorTutorials": { + "TEXT": [ + "El Coleccionista toma Esencias de los enemigos. Puedes gastar Esencias para agregar sus espíritus a tu Colección.", + "La Colección es un mazo separado. Robas una carta de ella cada turno." + ], + "LABEL": [ + "Siguiente", + "Entendido", + "El Coleccionista", + "(Página: ", + ")" + ] + } +} diff --git a/src/main/resources/hermitResources/localization/spa/UIStrings.json b/src/main/resources/hermitResources/localization/spa/UIStrings.json new file mode 100644 index 000000000..38a4f7a97 --- /dev/null +++ b/src/main/resources/hermitResources/localization/spa/UIStrings.json @@ -0,0 +1,17 @@ +{ + "hermit:bountygold": { + "TEXT": [ + " Oro (Recompensa)" + ] + }, + "hermit:LoneWolfAction": { + "TEXT": [ + "guardar." + ] + }, + "hermit:SpecialFriend": { + "TEXT": [ + "Mandarina" + ] + } +} diff --git a/src/main/resources/hermitResources/localization/zhs/CardStrings.json b/src/main/resources/hermitResources/localization/zhs/CardStrings.json index 7d6b43a5e..b4949a1ca 100644 --- a/src/main/resources/hermitResources/localization/zhs/CardStrings.json +++ b/src/main/resources/hermitResources/localization/zhs/CardStrings.json @@ -99,7 +99,7 @@ }, "hermit:Dive": { "NAME": "深潜", - "DESCRIPTION": "获得 !B! 点 格挡 。 NL hermit:精准 : NL 获得 !M! 层 *多层护甲 。" + "DESCRIPTION": "获得 !B! 点 格挡 。 NL hermit:精准 : NL 获得 !M! 层 expansioncontent:多层护甲 。" }, "hermit:FlashPowder": { "NAME": "闪光粉末", @@ -133,7 +133,7 @@ }, "hermit:Scavenge": { "NAME": "战利品", - "DESCRIPTION": "获得 !M! 层 *多层护甲 。 NL hermit:精准 :获得 !hermit:SecondMagic! 金币。 NL 消耗 。" + "DESCRIPTION": "获得 !M! 层 expansioncontent:多层护甲 。 NL hermit:精准 :获得 !hermit:SecondMagic! 金币。 NL 消耗 。" }, "hermit:ImpendingDoom": { "NAME": "末日将临", diff --git a/src/main/resources/hermitResources/localization/zhs/TutorialStrings.json b/src/main/resources/hermitResources/localization/zhs/TutorialStrings.json index 0ff72dc64..d366a35f4 100644 --- a/src/main/resources/hermitResources/localization/zhs/TutorialStrings.json +++ b/src/main/resources/hermitResources/localization/zhs/TutorialStrings.json @@ -25,6 +25,19 @@ ")" ] }, + "HermitMod:HexaghostTutorials": { + "TEXT": [ + "#y六火亡魂 可通过 #y点燃 鬼火来发挥能力。", + "执行特定操作后将 #y点燃 当前鬼火。" + ], + "LABEL": [ + "下一条", + "我准备好了", + "六火亡魂", + "(页数:", + ")" + ] + }, "HermitMod:CharbossTutorials": { "TEXT": [ "敌方拥有强大的能力,可能会对你的战斗策略产生影响。", @@ -38,15 +51,67 @@ ")" ] }, - "HermitMod:HexaghostTutorials": { + "HermitMod:ChampTutorials": { "TEXT": [ - "#y六火亡魂 可通过 #y点燃 鬼火来发挥能力。", - "执行特定操作后将 #y点燃 当前鬼火。" + "#y第一勇士 可以在两种角斗士 #y姿态( #y战狂 和 #y防卫 )之间切换。在这些姿态下打出技能牌获得 #y技术奖励 ,最多可获得3次。", + "他还可以在 #y姿态 中使用威力强大的 #y终结技 卡牌,但代价是退出 #y姿态 。" ], "LABEL": [ "下一条", "我准备好了", - "六火亡魂", + "第一勇士", + "(页数:", + ")" + ] + }, + "HermitMod:AutomatonTutorials": { + "TEXT": [ + "#y铜制机械人偶 可以使3张 #y编码 牌添加到序列中组合为1张 #y方法 牌。", + "有些牌有特殊的 #y编译 效果,当它们组合为1 个 #y方法 时就会触发,这种效果可以是正面的,也可以是负面的(称做编译错误)。" + ], + "LABEL": [ + "下一条", + "我准备好了", + "铜制机械人偶", + "(页数:", + ")" + ] + }, + "HermitMod:SneckoTutorials": { + "TEXT": [ + "#y异蛇 可以 #y混淆 牌来临时把某张牌的耗能变为随机0~3,但不会与 #y混淆 前相同。", + "它还可以拿到 #y赠礼 牌,通过 #y赠礼 牌获得其他角色的牌。" + ], + "LABEL": [ + "下一条", + "我准备好了", + "异蛇", + "(页数:", + ")" + ] + }, + "HermitMod:GremlinsTutorials": { + "TEXT": [ + "#y地精小队 有5名成员,它们有各自的独特效果和相互独立的生命。", + "你可以使用特定卡牌效果在它们之间切换。" + ], + "LABEL": [ + "下一条", + "我准备好了", + "异蛇", + "(页数:", + ")" + ] + }, + "HermitMod:SlimeBossTutorials": { + "TEXT": [ + "#y史莱姆老大 可以给予敌人 #y黏液 来增加敌人所受伤害,同时攻击清除 #y黏液 触发特定 #y消耗 效果。", + "它也可以 #y分裂 出小史莱姆,它们在回合开始时和被 #y命令 时会执行相应指令。" + ], + "LABEL": [ + "下一条", + "我准备好了", + "史莱姆老大", "(页数:", ")" ] diff --git a/src/main/resources/hermitResources/localization/zht/CardStrings.json b/src/main/resources/hermitResources/localization/zht/CardStrings.json index 2f4bd6c28..980d0325c 100644 --- a/src/main/resources/hermitResources/localization/zht/CardStrings.json +++ b/src/main/resources/hermitResources/localization/zht/CardStrings.json @@ -99,7 +99,7 @@ }, "hermit:Dive": { "NAME": "深潛", - "DESCRIPTION": "獲得 !B! 點 格擋 。 NL hermit:精準 : NL 獲得 !M! 層 *多層護甲 。" + "DESCRIPTION": "獲得 !B! 點 格擋 。 NL hermit:精準 : NL 獲得 !M! 層 *expansioncontent:多層護甲 。" }, "hermit:FlashPowder": { "NAME": "閃光粉末", @@ -133,7 +133,7 @@ }, "hermit:Scavenge": { "NAME": "戰利品", - "DESCRIPTION": "獲得 !M! 層 *多層護甲 。 NL hermit:精準 :獲得 !hermit:SecondMagic! 金幣。 NL 消耗 。" + "DESCRIPTION": "獲得 !M! 層 *expansioncontent:多層護甲 。 NL hermit:精準 :獲得 !hermit:SecondMagic! 金幣。 NL 消耗 。" }, "hermit:ImpendingDoom": { "NAME": "末日將臨", diff --git a/src/main/resources/hermitResources/localization/zht/TutorialStrings.json b/src/main/resources/hermitResources/localization/zht/TutorialStrings.json index 01c829608..f53352fcc 100644 --- a/src/main/resources/hermitResources/localization/zht/TutorialStrings.json +++ b/src/main/resources/hermitResources/localization/zht/TutorialStrings.json @@ -25,6 +25,19 @@ ")" ] }, + "HermitMod:HexaghostTutorials": { + "TEXT": [ + "#y六火亡魂 可通過 #y點燃 鬼火來發揮能力。", + "執行特定操作後將 #y點燃 激活中的鬼火。" + ], + "LABEL": [ + "下一條", + "我準備好了", + "六火亡魂", + "(頁數:", + ")" + ] + }, "HermitMod:CharbossTutorials": { "TEXT": [ "敵方擁有強大的能力,可能會對你的戰鬥策略產生影響。", @@ -38,15 +51,80 @@ ")" ] }, - "HermitMod:HexaghostTutorials": { + "HermitMod:ChampTutorials": { "TEXT": [ - "#y六火亡魂 可通過 #y點燃 鬼火來發揮能力。", - "執行特定操作後將 #y點燃 激活中的鬼火。" + "#y第一勇士 可以在兩種角鬥士 #y姿態( #y戰狂 和 #y防衛 )之間切換。在這些姿態下打出技能牌獲得 #y技術獎勵 ,最多可獲得3次。", + "他還可以在 #y姿態 中使用威力強大的 #y終結技 卡牌,但代價是退出 #y姿態 。" ], "LABEL": [ "下一條", "我準備好了", - "六火亡魂", + "第一勇士", + "(頁數:", + ")" + ] + }, + "HermitMod:AutomatonTutorials": { + "TEXT": [ + "#y銅製機械人偶 可以使3張 #y編碼 牌添加到序列中組合為1張 #y方法 牌。", + "有些牌有特殊的 #y編譯 效果,當它們組合為1 個 #y方法 時就會觸發,這種效果可以是正面的,也可以是負面的(稱做編譯錯誤)。" + ], + "LABEL": [ + "下一條", + "我準備好了", + "銅製機械人偶", + "(頁數:", + ")" + ] + }, + "HermitMod:SneckoTutorials": { + "TEXT": [ + "#y異蛇 可以 #y混淆 牌來臨時把某張牌的耗能變為隨機0~3,但不會與 #y混淆 前相同。", + "它還可以拿到 #y贈禮 牌,通過 #y贈禮 牌獲得其他角色的牌。" + ], + "LABEL": [ + "下一條", + "我準備好了", + "異蛇", + "(頁數:", + ")" + ] + }, + "HermitMod:GremlinsTutorials": { + "TEXT": [ + "#y地精小隊 有5名成員,它們有各自的獨特效果和相互獨立的生命。", + "你可以使用特定卡牌效果在它們之間切換。" + ], + "LABEL": [ + "下一條", + "我準備好了", + "異蛇", + "(頁數:", + ")" + ] + }, + "HermitMod:SlimeBossTutorials": { + "TEXT": [ + "#y史萊姆老大 可以給予敵人 #y黏液 來增加敵人所受傷害,同時攻擊清除 #y黏液 觸發特定 #y消耗 效果。", + "它也可以 #y分裂 出小史萊姆,它們在回合開始時和被 #y命令 時會執行相應指令。" + ], + "LABEL": [ + "下一條", + "我準備好了", + "史萊姆老大", + "(頁數:", + ")" + ] + }, + "HermitMod:CollectorTutorials": { + "TEXT": [ + "收藏家有一副額外牌組,即收藏堆。你每回合從中抽1張牌。", + "戰鬥勝利時會獲得魂粹,可用來將怪物的藏品牌加入收藏堆。" + ], + "LABEL": [ + "下一條", + "我準備好了!", + "收藏家", "(頁數:", ")" ] diff --git a/src/main/resources/hexamodResources/images/betacards/GhostflameBarrier.png b/src/main/resources/hexamodResources/images/betacards/GhostflameBarrier.png index 4498618bc..26b521c76 100644 Binary files a/src/main/resources/hexamodResources/images/betacards/GhostflameBarrier.png and b/src/main/resources/hexamodResources/images/betacards/GhostflameBarrier.png differ diff --git a/src/main/resources/hexamodResources/images/betacards/GhostflameBarrier_p.png b/src/main/resources/hexamodResources/images/betacards/GhostflameBarrier_p.png index 0f1341037..54ff86408 100644 Binary files a/src/main/resources/hexamodResources/images/betacards/GhostflameBarrier_p.png and b/src/main/resources/hexamodResources/images/betacards/GhostflameBarrier_p.png differ diff --git a/src/main/resources/hexamodResources/images/betacards/MatchstickFloat.png b/src/main/resources/hexamodResources/images/betacards/MatchstickFloat.png new file mode 100644 index 000000000..1ca628dee Binary files /dev/null and b/src/main/resources/hexamodResources/images/betacards/MatchstickFloat.png differ diff --git a/src/main/resources/hexamodResources/images/betacards/MatchstickFloat_p.png b/src/main/resources/hexamodResources/images/betacards/MatchstickFloat_p.png new file mode 100644 index 000000000..d7757dd04 Binary files /dev/null and b/src/main/resources/hexamodResources/images/betacards/MatchstickFloat_p.png differ diff --git a/src/main/resources/hexamodResources/images/betacards/Toasty.png b/src/main/resources/hexamodResources/images/betacards/Toasty.png index eb75ef727..7de35ec50 100644 Binary files a/src/main/resources/hexamodResources/images/betacards/Toasty.png and b/src/main/resources/hexamodResources/images/betacards/Toasty.png differ diff --git a/src/main/resources/hexamodResources/images/betacards/Toasty_p.png b/src/main/resources/hexamodResources/images/betacards/Toasty_p.png index 0f4a767ff..8559df590 100644 Binary files a/src/main/resources/hexamodResources/images/betacards/Toasty_p.png and b/src/main/resources/hexamodResources/images/betacards/Toasty_p.png differ diff --git a/src/main/resources/hexamodResources/images/cards/HexaLevel.png b/src/main/resources/hexamodResources/images/cards/HexaLevel.png new file mode 100644 index 000000000..1cd422250 Binary files /dev/null and b/src/main/resources/hexamodResources/images/cards/HexaLevel.png differ diff --git a/src/main/resources/hexamodResources/images/cards/HexaLevel_p.png b/src/main/resources/hexamodResources/images/cards/HexaLevel_p.png new file mode 100644 index 000000000..a11e349fe Binary files /dev/null and b/src/main/resources/hexamodResources/images/cards/HexaLevel_p.png differ diff --git a/src/main/resources/hexamodResources/images/cards/InfernalForm.png b/src/main/resources/hexamodResources/images/cards/InfernalForm.png deleted file mode 100644 index d4b8690f5..000000000 Binary files a/src/main/resources/hexamodResources/images/cards/InfernalForm.png and /dev/null differ diff --git a/src/main/resources/hexamodResources/images/cards/InfernalForm_p.png b/src/main/resources/hexamodResources/images/cards/InfernalForm_p.png deleted file mode 100644 index a8839e923..000000000 Binary files a/src/main/resources/hexamodResources/images/cards/InfernalForm_p.png and /dev/null differ diff --git a/src/main/resources/hexamodResources/images/cards/MatchstickFloat.png b/src/main/resources/hexamodResources/images/cards/MatchstickFloat.png new file mode 100644 index 000000000..1ca628dee Binary files /dev/null and b/src/main/resources/hexamodResources/images/cards/MatchstickFloat.png differ diff --git a/src/main/resources/hexamodResources/images/cards/MatchstickFloat_p.png b/src/main/resources/hexamodResources/images/cards/MatchstickFloat_p.png new file mode 100644 index 000000000..d7757dd04 Binary files /dev/null and b/src/main/resources/hexamodResources/images/cards/MatchstickFloat_p.png differ diff --git a/src/main/resources/hexamodResources/images/relics/SpiritBrand.png b/src/main/resources/hexamodResources/images/relics/SpiritBrand.png index 0ae528c62..2c9c1366b 100644 Binary files a/src/main/resources/hexamodResources/images/relics/SpiritBrand.png and b/src/main/resources/hexamodResources/images/relics/SpiritBrand.png differ diff --git a/src/main/resources/hexamodResources/images/relics/outline/SpiritBrand.png b/src/main/resources/hexamodResources/images/relics/outline/SpiritBrand.png index 20c80967f..023a9a924 100644 Binary files a/src/main/resources/hexamodResources/images/relics/outline/SpiritBrand.png and b/src/main/resources/hexamodResources/images/relics/outline/SpiritBrand.png differ diff --git a/src/main/resources/hexamodResources/localization/eng/CardStrings.json b/src/main/resources/hexamodResources/localization/eng/CardStrings.json index 19a5d9803..2c45d835c 100644 --- a/src/main/resources/hexamodResources/localization/eng/CardStrings.json +++ b/src/main/resources/hexamodResources/localization/eng/CardStrings.json @@ -108,6 +108,12 @@ "UPGRADE_DESCRIPTION": "Draw a card. NL You may choose to NL hexamod:Retract or hexamod:Advance.", "EXTENDED_DESCRIPTION": ["hexamod:Advance.","hexamod:Retract.", "Do nothing."] }, + "hexamod:MatchstickFloat": { + "NAME": "Sneaky Teakwood Match", + "DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "UPGRADE_DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "EXTENDED_DESCRIPTION": ["hexamod:Advance.","hexamod:Retract.", "Do nothing."] + }, "hexamod:Floatwork": { "NAME": "Floatwork", "DESCRIPTION": "Ethereal. [#e087a4]Afterlife.[] NL Gain 1 Dexterity. NL ", @@ -160,7 +166,7 @@ }, "hexamod:GhostShield": { "NAME": "Ghost Shield", - "DESCRIPTION": "Ethereal. [#e087a4]Afterlife.[] NL Gain 1 Blur. NL ", + "DESCRIPTION": "Ethereal. [#e087a4]Afterlife.[] NL Gain 1 expansioncontent:Blur. NL ", "EXTENDED_DESCRIPTION": [ "Gain !B! Block." ] @@ -244,8 +250,7 @@ }, "hexamod:PhantomCloak": { "NAME": "Phantom Cloak", - "DESCRIPTION": "Ethereal. NL Gain !M! Dexterity and lose 1 Strength.", - "TRANSLATOR_NOTE:": "Not used in game Not used in game Not used in game Not used in game Not used in game Not used in game " + "DESCRIPTION": "Ethereal. NL Gain !M! Dexterity and lose 1 Strength." }, "hexamod:PhantomFireball": { "NAME": "Phantom Fireball", @@ -254,10 +259,10 @@ }, "hexamod:PowerFromBeyond": { "NAME": "Power from Beyond", - "DESCRIPTION": "Ethereal. [#e087a4]Afterlife.[] NL Gain [E] next turn. NL ", - "UPGRADE_DESCRIPTION": "Ethereal. [#e087a4]Afterlife.[] NL Gain [E] [E] next turn. NL ", + "DESCRIPTION": "Ethereal. [#e087a4]Afterlife.[] NL [#e087a4]Next[] [#e087a4]turn,[] [#e087a4]draw[] !M! [#e087a4]cards[] and gain [E] . NL ", + "UPGRADE_DESCRIPTION": "Ethereal. [#e087a4]Afterlife.[] NL [#e087a4]Next[] [#e087a4]turn,[] [#e087a4]draw[] !M! [#e087a4]cards[] and gain [E] [E] . NL ", "EXTENDED_DESCRIPTION": [ - "Draw !M! cards next turn." + "" ] }, "hexamod:Premonition": { @@ -270,7 +275,7 @@ }, "hexamod:RadiantFlame": { "NAME": "Radiant Reverb", - "DESCRIPTION": "Deal !D! damage. NL Remove the target's hexamod:Soulburn to gain !M! hexamod:Intensity." + "DESCRIPTION": "Deal !D! damage. NL Remove the target's *Soulburn to gain !M! hexamod:Intensity." }, "hexamod:RainOfEmbers": { "NAME": "Rain of Embers", @@ -315,7 +320,7 @@ }, "hexamod:ShieldOfDarkness": { "NAME": "Shield of Night", - "DESCRIPTION": "Gain !B! Block. NL Scry !M!. NL Exhaust discarded Ethereal cards." + "DESCRIPTION": "Gain !B! Block. NL Scry !M!. NL Exhaust discarded *Ethereal cards." }, "hexamod:Kindle": { "NAME": "Kindle", @@ -332,11 +337,11 @@ }, "hexamod:BrightRitual": { "NAME": "Bright Ritual", - "DESCRIPTION": "Reset the ghostflame wheel. NL Gain [E] and draw 1 card for each Ghostflame hexamod:Extinguished this way. NL Exhaust." + "DESCRIPTION": "Reset the Wheel. NL Gain [E] and draw 1 for each Ghostflame hexamod:Extinguished. NL Exhaust." }, "hexamod:NaughtySpirit": { "NAME": "Naughty Spirit", - "DESCRIPTION": "Apply !burny! hexamod:Soulburn. NL If the current Ghostflame is hexamod:Ignited, return this card to your hand. hexamod:Retract." + "DESCRIPTION": "Apply !burny! hexamod:Soulburn. NL If the current Ghostflame is hexamod:Ignited, return this card to your hand and hexamod:Retract." }, "hexamod:StepThrough": { "NAME": "Step Through", @@ -358,7 +363,7 @@ }, "hexamod:SwordOfDarkness": { "NAME": "Sword of Night", - "DESCRIPTION": "Deal !D! damage. NL Scry !M!. NL Exhaust discarded Ethereal cards." + "DESCRIPTION": "Deal !D! damage. NL Scry !M!. NL Exhaust discarded *Ethereal cards." }, "hexamod:ThermalTransfer": { "NAME": "Thermal Transfer", @@ -366,7 +371,7 @@ }, "hexamod:TimeOfNeed": { "NAME": "Time of Need", - "DESCRIPTION": "Retain. NL Gain a random Power card. It costs 1 less until played. NL Exhaust." + "DESCRIPTION": "Retain. NL Gain a random Power card. It costs 1 less. NL Exhaust." }, "hexamod:TimeWarp": { "NAME": "Time Warp", @@ -375,18 +380,18 @@ "hexamod:FlareFlick": { "NAME": "Flare Flick", "DESCRIPTION": "Deal !D! damage. NL hexamod:Ignite the current Ghostflame and hexamod:Advance.", - "UPGRADE_DESCRIPTION": "Deal !D! damage. NL hexamod:Ignite the current Ghostflame. NL Choose to hexamod:Retract or hexamod:Advance.", + "UPGRADE_DESCRIPTION": "Deal !D! damage. NL hexamod:Ignite the current Ghostflame. NL You may choose to hexamod:Retract or hexamod:Advance.", "EXTENDED_DESCRIPTION": ["hexamod:Advance.","hexamod:Retract.", "Do nothing."] }, "hexamod:TurnItUp": { "NAME": "Turn It Up", - "DESCRIPTION": "Gain !M! temp. hexamod:Intensity. NL Gain !M! temp. Strength. NL Gain !M! temp. Dexterity.", - "UPGRADE_DESCRIPTION": "Retain. NL Gain !M! temp. hexamod:Intensity. NL Gain !M! temp. Strength. NL Gain !M! temp. Dexterity." + "DESCRIPTION": "Gain !M! temporary hexamod:Intensity, Strength, and Dexterity.", + "UPGRADE_DESCRIPTION": "Retain. NL Gain !M! temporary hexamod:Intensity, Strength, and Dexterity." }, "hexamod:UnleashSpirits": { "NAME": "Unleash Spirits", "DESCRIPTION": "Deal !D! damage to a random enemy. NL Repeat for each card *Exhausted last turn.", - "UPGRADE_DESCRIPTION": " NL (Hits !M! times.)" + "UPGRADE_DESCRIPTION": " NL (Hits !M! time(s).)" }, "hexamod:UnlimitedPower": { "NAME": "Unlimited Power", @@ -442,16 +447,13 @@ }, "hexamod:EtherStep": { "NAME": "Ether Step", - "DESCRIPTION": "Ethereal. [#e087a4]Afterlife.[] NL Exhaust 1 card. NL Draw !M! card. NL ", - "UPGRADE_DESCRIPTION": "Ethereal. [#e087a4]Afterlife.[] NL Exhaust 1 card. NL Draw !M! cards. NL ", - "EXTENDED_DESCRIPTION": [ - "Deal !D! damage." - ] + "DESCRIPTION": "Ethereal. [#e087a4]Afterlife.[] NL [#e087a4]Deal[] !D! [#e087a4]damage.[] NL Exhaust 1 card. NL Draw !M! card.", + "UPGRADE_DESCRIPTION": "Ethereal. [#e087a4]Afterlife.[] NL [#e087a4]Deal[] !D! [#e087a4]damage.[] NL Exhaust 1 card. NL Draw !M! cards." }, "hexamod:OpposingAction": { "NAME": "Opposing Action", - "DESCRIPTION": "hexamod:Retract. NL Gain [E].", - "UPGRADE_DESCRIPTION": "hexamod:Retract. NL Gain [E] [E]." + "DESCRIPTION": "hexamod:Retract. NL Gain [E] [E]. NL Exhaust.", + "UPGRADE_DESCRIPTION": "hexamod:Retract. NL Gain [E] [E] [E]. NL Exhaust." }, "hexamod:SeventhEye": { "NAME": "Seventh Eye", @@ -460,7 +462,7 @@ }, "hexamod:FlameDevourer": { "NAME": "Devour Flame", - "DESCRIPTION": "hexamod:Retract. NL If you hexamod:Retracted onto an hexamod:Ignited Ghostflame, gain !B! Block." + "DESCRIPTION": "If the previous Ghostflame is *Ignited, hexamod:Retract and gain !B! Block." }, "hexamod:SpectralGrace": { "NAME": "Spectral Grace", diff --git a/src/main/resources/hexamodResources/localization/eng/EventStrings.json b/src/main/resources/hexamodResources/localization/eng/EventStrings.json index ed43a63c7..ee21ce716 100644 --- a/src/main/resources/hexamodResources/localization/eng/EventStrings.json +++ b/src/main/resources/hexamodResources/localization/eng/EventStrings.json @@ -8,14 +8,14 @@ "You take the strange #ygolden box, and feel a #pdarkness flow through you as you open it. Inside, you find a useful weapon!", "You take the pulsating, steadily @BEATING@ box, and feel it @FLOW@ into your arm. A foul #pnausea pulses through you, but you feel stronger for it...", "As soon as you clasp the artifact from the figure, #pdarkness envelops the room. The specter speaks to you once more, his words appearing in your head without you ever hearing them. NL NL #p'A #pwise #pchoice. #pWhat #pdo #pyou #psay #pto #panother #pdeal, #pfriend? #pTake #pas #pmany #pas #pyou #plike...'", - "You know the deals this #papparition offers come with too high a price. You need to deal with it, and how fortuitous! Near the wall! A #bBlue #bCandle! NL NL You snatch the candle from the wall, #rsingeing #ryourself a bit, and toss it towards the specter, which dissipates into an #beerie #bhue. NL NL It won't be offering any deals any more.", - "You know the deals this #papparition offers come with too high a price. You need to deal with it, and how fortuitous! You brought along a #bBlue #bCandle! NL NL You toss the candle towards the specter, which dissipates into an #beerie #bhue. NL NL It won't be offering any deals any more." + "You know the deals this #papparition offers come with too high a price. You need to deal with it, and how fortuitous! Near the wall! A #bCurse-Dispelling #bCandle! NL NL You snatch the candle from the wall, #rsingeing #ryourself a bit, and toss it towards the specter, which dissipates into an #beerie #bhue. NL NL It won't be offering any deals any more.", + "You know the deals this #papparition offers come with too high a price. You need to deal with it, and how fortuitous! You brought along a #bCurse-Dispelling #bCandle! NL NL You toss the candle towards the specter, which dissipates into an #beerie #bhue. NL NL It won't be offering any deals any more." ], "OPTIONS": [ "[Left Box] #gObtain #ga #gDu-Vu #gDoll #gor #gDarkstone #gPeriapt. #rCursed #rTwice #r- #rHaunted.", "[Shop for More]", "[Right Box] #gObtain #ga #gCursed #gKey #gor #gCalling #gBell. #rIt #ris #rextra #rCursed.", - "[Chase Away] #gObtain #gBlue #gCandle. #rLose #r5 #rHP.", + "[Chase Away] #gObtain #ga #bCurse-Dispelling #bCandle. #rLose #r5 #rHP.", "[Chase Away] Leave.", "[Trade for Power] #gGain a #grandom #yRare #gcard. #rBecome #rCursed #r- #rRandom.", "[Trade for Life] #gGain #g5 #gMax #gHP. #rBecome #rCursed #r- #rRandom.", diff --git a/src/main/resources/hexamodResources/localization/eng/KeywordStrings.json b/src/main/resources/hexamodResources/localization/eng/KeywordStrings.json index f71aeefd1..65304bf09 100644 --- a/src/main/resources/hexamodResources/localization/eng/KeywordStrings.json +++ b/src/main/resources/hexamodResources/localization/eng/KeywordStrings.json @@ -29,7 +29,7 @@ "NAMES": [ "intensity" ], - "DESCRIPTION": "Intensity increases the amount of damage, #ySoulburn, and #yBlock [REMOVE_SPACE] applied by Ghostflames when #yIgnited [REMOVE_SPACE]." + "DESCRIPTION": "Intensity increases the damage, #ySoulburn [REMOVE_SPACE], and #yBlock [REMOVE_SPACE] applied by Ghostflames when #yIgnited [REMOVE_SPACE]." }, { "ID": "soulburn", @@ -46,7 +46,7 @@ "extinguish", "extinguished" ], - "DESCRIPTION": "Allows Ghostflame to become #yIgnited again, resetting its Ignition requirements." + "DESCRIPTION": "Allows a Ghostflame to become #yIgnited again, resetting its Ignition requirements." }, { "PROPER_NAME": "Ignite", @@ -62,7 +62,7 @@ "NAMES": [ "seal" ], - "DESCRIPTION": "The more you play a Seal card, the more likely you are to find others. If all #b6 Seals have been played during a combat, obtain #pThe #pBroken #pSeal and remove the #b6 Seals from your deck." + "DESCRIPTION": "Seal cards drop from Elite and Boss combats. The more you play a Seal card, the more likely you are to find different kinds. If all #b6 Seals have been played during a combat, obtain #pThe #pBroken #pSeal and remove the #b6 Seals from your deck." }, { "ID": "afterlife", @@ -88,12 +88,20 @@ "DESCRIPTION": "#yGhostflame. #yIgnites when a #yPower is played when you are on it. #yIgnition [REMOVE_SPACE]: When #yIgnited [REMOVE_SPACE], gain #b4 #yBlock and #b1 #yStrength [REMOVE_SPACE].", "TRANSLATOR_NOTE": "Not used Not used Not used Not used Not used Not used Not used Not used Not used Not used Not used Not used Not used Not used Not used Not used Not used Not used " }, + { + "ID": "plated", + "PROPER_NAME": "Plated Armor", + "NAMES": [ + "plated" + ], + "DESCRIPTION": "At the end of your turn, gain Block equal to your #yPlated #yArmor. Taking unblocked attack damage reduces #yPlated #yArmor by #b1." + }, { "PROPER_NAME": "Searing", "NAMES": [ "searing" ], - "DESCRIPTION": "#yGhostflame. #yIgnites when #b2 #yAttacks are played when you are on it. #yIgnition [REMOVE_SPACE]: When #yIgnited [REMOVE_SPACE], apply #b6 #ySoulburn to a random enemy, modified twicce by #yIntensity [REMOVE_SPACE].", + "DESCRIPTION": "#yGhostflame. #yIgnites when #b2 #yAttacks are played when you are on it. #yIgnition [REMOVE_SPACE]: When #yIgnited [REMOVE_SPACE], apply #b6 #ySoulburn to a random enemy, modified twice by #yIntensity [REMOVE_SPACE].", "TRANSLATOR_NOTE": "Not used Not used Not used Not used Not used Not used Not used Not used Not used Not used Not used Not used Not used Not used Not used Not used Not used Not used " } ] diff --git a/src/main/resources/hexamodResources/localization/eng/PotionStrings.json b/src/main/resources/hexamodResources/localization/eng/PotionStrings.json index 444e39efa..9ac66e288 100644 --- a/src/main/resources/hexamodResources/localization/eng/PotionStrings.json +++ b/src/main/resources/hexamodResources/localization/eng/PotionStrings.json @@ -16,8 +16,8 @@ "hexamod:EctoCoolerPotion": { "NAME": "Ecto-Cooler", "DESCRIPTIONS": [ - "Choose #b1 of #b3 random #yEthereal cards from any class to gain. It costs #b0 this turn.", - "Choose #b1 of #b3 random #yEthereal cards from any class and gain #b", + "Choose #b1 of #b3 random #yEthereal cards. It costs #b0 this turn.", + "Choose #b1 of #b3 random #yEthereal cards and gain #b", " copies. They cost #b0 this turn." ] }, diff --git a/src/main/resources/hexamodResources/localization/eng/PowerStrings.json b/src/main/resources/hexamodResources/localization/eng/PowerStrings.json index 656326925..e2ac011af 100644 --- a/src/main/resources/hexamodResources/localization/eng/PowerStrings.json +++ b/src/main/resources/hexamodResources/localization/eng/PowerStrings.json @@ -170,7 +170,7 @@ "NAME": "Radiant Flame", "DESCRIPTIONS": [ "Whenever you #yIgnite a Ghostflame, gain #b", - " #yBlock." + " #yBlock [REMOVE_SPACE]." ] }, "hexamod:SealPostCombatPower": { @@ -212,7 +212,7 @@ "hexamod:SoulburnOnExhaustPower": { "NAME": "Soulburn Infestation", "DESCRIPTIONS": [ - "Whenver you #yExhaust a card this turn, apply #b", + "Whenever you #yExhaust a card this turn, apply #b", " #ySoulburn to this enemy." ] }, diff --git a/src/main/resources/hexamodResources/localization/eng/RelicStrings.json b/src/main/resources/hexamodResources/localization/eng/RelicStrings.json index d662067b2..925390c45 100644 --- a/src/main/resources/hexamodResources/localization/eng/RelicStrings.json +++ b/src/main/resources/hexamodResources/localization/eng/RelicStrings.json @@ -3,14 +3,17 @@ "NAME": "Spirit Brand", "FLAVOR": "A bound protector.", "DESCRIPTIONS": [ - "The first time you #yIgnite a Ghostflame each turn, gain #b4 #yBlock [REMOVE_SPACE]." + "The first time you #yIgnite a Ghostflame each turn, gain #b", + " #yBlock [REMOVE_SPACE]." ] }, "hexamod:TheBrokenSeal": { "NAME": "The Broken Seal", "FLAVOR": "Unlimited, unrestrained, unquenchable power.", "DESCRIPTIONS": [ - "Upon pickup, raise your Max HP by #b10, then heal all of your HP. Start each combat with #b2 #yStrength [REMOVE_SPACE], #b2 #yDexterity [REMOVE_SPACE], and #b2 #yhexamod:Intensity [REMOVE_SPACE]. You can not receive #pThe #pBroken #pSeal and other seals again." + "Upon pickup, raise your Max HP by #b", + " [REMOVE_SPACE], then heal all of your HP. Start each combat with #b", + " #yStrength [REMOVE_SPACE], #yDexterity [REMOVE_SPACE], and #yhexamod:Intensity [REMOVE_SPACE]. You can not receive #pThe #pBroken #pSeal and other seals again." ] }, "hexamod:UnbrokenSoul": { @@ -18,28 +21,31 @@ "FLAVOR": "Let's see if we can do... better.", "DESCRIPTIONS": [ "Replaces ", - ".[] NL Whenever you #yIgnite a Ghostflame , gain #b4 #yBlock [REMOVE_SPACE]." + " [REMOVE_SPACE].[] NL Whenever you #yIgnite a Ghostflame, gain #b", + " #yBlock [REMOVE_SPACE]." ] }, "hexamod:IceCube": { "NAME": "Xanatos' Icy Charm", "FLAVOR": "I feel... cold.", "DESCRIPTIONS": [ - "Gain [E] at the start of your turn. Start each combat with #b1 less #yhexamod:Intensity [REMOVE_SPACE], and receive no #yhexamod:Intensity from the #yInferno #yGhostflame [REMOVE_SPACE]." + "Gain [E] at the start of your turn. Start each combat with #b", + " less #yhexamod:Intensity [REMOVE_SPACE], and receive no #yhexamod:Intensity from the #yInferno #yGhostflame [REMOVE_SPACE]." ] }, "hexamod:SoulStone": { "NAME": "Soul Stone", "FLAVOR": "A soul would liven this thing up!", "DESCRIPTIONS": [ - "Whenever you #yExhaust #b3 cards, #yhexamod:Ignite the current Ghostflame." + "Whenever you #yExhaust #b", + " cards, #yhexamod:Ignite the current Ghostflame." ] }, "hexamod:RecyclingMachine": { "NAME": "Recycler", "FLAVOR": "One day, it shall be recycled too.", "DESCRIPTIONS": [ - "The first time an non-Status and non-Curse #yEthereal card is #yExhausted each combat, add a copy to your hand that costs #b0 until played." + "The first time a #ynon-Status, #rnon-Curse #yEthereal card is #yExhausted each combat, add a copy to your hand that costs #b0 until played." ] }, "hexamod:MatchstickCase": { @@ -53,42 +59,47 @@ "NAME": "Jar of TOBSCo", "FLAVOR": "A little extra heat makes everything better.", "DESCRIPTIONS": [ - "Start each combat with #b1 #yhexamod:Intensity [REMOVE_SPACE]." + "Start each combat with #b", + " #yhexamod:Intensity [REMOVE_SPACE]." ] }, "hexamod:SoulOfChaos": { "NAME": "Soul of Chaos", "FLAVOR": "Mayhem, made manifest.", "DESCRIPTIONS": [ - "The second #ySearing #yGhostflame becomes a #yMayhem #yGhostflame [REMOVE_SPACE]. NL #yMayhem #yGhostflame activates when you end your turn on it. NL #yIgnition [REMOVE_SPACE]: #yScry #bn and then play the top card of your draw pile, #bn is modified by #yIntensity [REMOVE_SPACE]." + "At the start of your turn, move to a random Ghostflame and randomize it. At the end of your turn, play the top card of your draw pile." ] }, "hexamod:JarOfFuel": { "NAME": "Olexa's Shield", "FLAVOR": "Protection on-demand.", "DESCRIPTIONS": [ - "#yPower cards are counted towards the progression of #ySearing and #yCrushing #yGhostflames [REMOVE_SPACE]." + "#yPowers are counted towards the progression of #ySearing and #yCrushing #yGhostflames [REMOVE_SPACE]." ] }, "hexamod:BolsterEngine": { "NAME": "Tricky's Bolster-Rod", "FLAVOR": "Backed by the study of a thousand books. Knowledge is power!", "DESCRIPTIONS": [ - "The first time you play a #yPower card each combat, gain #b6 #yBlock and #b1 #yStrength [REMOVE_SPACE]." + "The first time you play a #yPower each combat, gain #b", + " #yBlock and #b", + " #yStrength [REMOVE_SPACE]." ] }, "hexamod:CandleOfCauterizing": { "NAME": "Red Candle", "FLAVOR": "Fire BURNS...", "DESCRIPTIONS": [ - "Whenever you apply #yhexamod:Soulburn [REMOVE_SPACE], apply #b3 additional #yhexamod:Soulburn [REMOVE_SPACE]." + "Whenever you apply #yhexamod:Soulburn [REMOVE_SPACE], apply #b", + " additional #yhexamod:Soulburn [REMOVE_SPACE]." ] }, "hexamod:Sixitude": { "NAME": "Six-Point Brand", "FLAVOR": "Fire, fire, fire, fire, fire, FIRE!", "DESCRIPTIONS": [ - "Whenever you play #b6 cards, deal #b6 damage to a random enemy." + "Whenever you play #b", + " non-0 cost cards, gain an #ygremlin:Echo of a basic #yStrike [REMOVE_SPACE]. It costs #b0 [REMOVE_SPACE]." ] }, "hexamod:Libra": { diff --git a/src/main/resources/hexamodResources/localization/fra/CardStrings.json b/src/main/resources/hexamodResources/localization/fra/CardStrings.json index 5f23e3199..972b7a6e4 100644 --- a/src/main/resources/hexamodResources/localization/fra/CardStrings.json +++ b/src/main/resources/hexamodResources/localization/fra/CardStrings.json @@ -202,7 +202,7 @@ }, "hexamod:Hexaguard": { "NAME": "Hexagarde", - "DESCRIPTION": "Éthérée. [#e087a4]Après-vie.[] NL Piochez 1 carte. NL ", + "DESCRIPTION": "Éthérée. [#e087a4]Après-vie.[] NL Piochez 2 carte. NL ", "EXTENDED_DESCRIPTION": [ "Gagnez !B! d'Armure." ] diff --git a/src/main/resources/hexamodResources/localization/jpn/CardStrings.json b/src/main/resources/hexamodResources/localization/jpn/CardStrings.json index bd0dc991d..619ac838e 100644 --- a/src/main/resources/hexamodResources/localization/jpn/CardStrings.json +++ b/src/main/resources/hexamodResources/localization/jpn/CardStrings.json @@ -1,7 +1,7 @@ { "hexamod:AdvancingGuard": { "NAME": "前進防御", - "DESCRIPTION": " !B! ブロックを得る。 NL hexamod:前進" + "DESCRIPTION": "!B! ブロックを得る。 NL hexamod:前進" }, "hexamod:FleetingFlash": { "NAME": "瞬間の閃光", @@ -20,7 +20,7 @@ }, "hexamod:BacktrackSmack": { "NAME": "バックトラック", - "DESCRIPTION": " !D! ダメージを2回与える。 NL hexamod:後退" + "DESCRIPTION": "!D! ダメージを2回与える。 NL hexamod:後退" }, "hexamod:BurningQuestion": { "NAME": "火急的問題", @@ -38,7 +38,7 @@ }, "hexamod:BurningTouch": { "NAME": "バーニングタッチ", - "DESCRIPTION": " !burny! hexamod:ソウルバーン を与える。 NL 対象が hexamod:ソウルバーン 状態なら更にもう1回与える。" + "DESCRIPTION": "!burny! hexamod:ソウルバーン を与える。 NL 対象が hexamod:ソウルバーン 状態なら更にもう1回与える。" }, "hexamod:CatchUp": { "NAME": "挽回", @@ -47,19 +47,19 @@ }, "hexamod:ChargedBarrage": { "NAME": "弾幕発射", - "DESCRIPTION": " !burny! hexamod:ソウルバーン を与える。 NL *発火 状態のゴーストフレイムの数だけ繰り返す。" + "DESCRIPTION": "!burny! hexamod:ソウルバーン を与える。 NL *発火 状態のゴーストフレイムの数だけ繰り返す。" }, "hexamod:CouncilsJustice": { "NAME": "議会の正義", - "DESCRIPTION": " !D! ダメージを与える。廃棄された *幻姿 の分、ダメージが !M! 増加する。 NL 廃棄" + "DESCRIPTION": "!D! ダメージを与える。廃棄された *幻姿 の分、ダメージが !M! 増加する。 NL 廃棄" }, "hexamod:Defend": { "NAME": "防御", - "DESCRIPTION": " !B! ブロックを得る。" + "DESCRIPTION": "!B! ブロックを得る。" }, "hexamod:Divider": { "NAME": "分離", - "DESCRIPTION": " !D! ダメージを与える。 NL *発火 状態のゴーストフレイムの数だけ繰り返す。" + "DESCRIPTION": "!D! ダメージを与える。 NL *発火 状態のゴーストフレイムの数だけ繰り返す。" }, "hexamod:DynamicBlow": { "NAME": "ダイナミックブロー", @@ -72,7 +72,7 @@ }, "hexamod:EtherealExpedition": { "NAME": "不気味な探索行", - "DESCRIPTION": "エセリアル NL [#e087a4]死後[] NL !M! [#e087a4]枚のランダムな死後カードを山札に、[] 1 [#e087a4]枚を手札に加える。[]" + "DESCRIPTION": "エセリアル NL [#e087a4]死後[] NL !M! [#e087a4]枚のランダムな死後カードを山札に、[] 1 枚を手札に加える。" }, "hexamod:ExtraCrispy": { "NAME": "カリッカリ", @@ -108,21 +108,27 @@ "UPGRADE_DESCRIPTION": "カードを 1 枚引く。 NL hexamod:後退 または hexamod:前進 を選択し行う。", "EXTENDED_DESCRIPTION": ["hexamod:前進","hexamod:後退", "留まる"] }, + "hexamod:MatchstickFloat": { + "NAME": "Sneaky Teakwood Match", + "DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "UPGRADE_DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "EXTENDED_DESCRIPTION": ["hexamod:Advance.","hexamod:Retract.", "Do nothing."] + }, "hexamod:Floatwork": { "NAME": "浮遊移動", "DESCRIPTION": "エセリアル NL [#e087a4]死後[] NL *敏捷性 1 を得る。 NL ", "EXTENDED_DESCRIPTION": [ - "*プレートアーマー !M! を得る。" + "プレートアーマー !M! を得る。" ] }, "hexamod:ForkedFlame": { "NAME": "二又の火", - "DESCRIPTION": " !D! ダメージを与える。 NL 前後の炎を hexamod:点火 する。 ", - "UPGRADE_DESCRIPTION": " !D! ダメージを与える。 NL 前後の炎を hexamod:点火 する。" + "DESCRIPTION": "!D! ダメージを与える。 NL 前後の炎を hexamod:点火 する。 ", + "UPGRADE_DESCRIPTION": "!D! ダメージを与える。 NL 前後の炎を hexamod:点火 する。" }, "hexamod:WhisperFromBeyond": { "NAME": "彼方の囁き", - "DESCRIPTION": " !D! ダメージを与える。 NL このターンにカードが廃棄される度、対象に !burny! hexamod:ソウルバーン を与える。" + "DESCRIPTION": "!D! ダメージを与える。 NL このターンにカードが廃棄される度、対象に !burny! hexamod:ソウルバーン を与える。" }, "hexamod:InstantInferno": { "NAME": "即席インフェルノ", @@ -138,8 +144,8 @@ }, "hexamod:IntoShadow": { "NAME": "潜影", - "DESCRIPTION": "エセリアル NL あなたが hexamod:後退 を行う度、あなたは次のカードを自由にプレイし、廃棄する。", - "UPGRADE_DESCRIPTION": "あなたが hexamod:後退 を行う度、あなたは次のカードを自由にプレイし、廃棄する。", + "DESCRIPTION": "エセリアル NL hexamod:後退 を行う度、次のカードはコストが0になりプレイ後に廃棄される。", + "UPGRADE_DESCRIPTION": "hexamod:後退 を行う度、次のカードはコストが0になりプレイ後に廃棄される。", "EXTENDED_DESCRIPTION": [ "プレイして廃棄する" ], @@ -151,8 +157,8 @@ }, "hexamod:DevilsDance": { "NAME": "デビルズダンス", - "DESCRIPTION": " *後退 を行う度、 カードを1枚引く。 NL hexamod:後退", - "UPGRADE_DESCRIPTION": "天賦 NL *後退 を行う度、 [E] を得てカードを1枚引く。 NL hexamod:後退" + "DESCRIPTION": " *後退 を行う度、 カードを1枚引く。", + "UPGRADE_DESCRIPTION": "天賦 NL *後退 を行う度、 [E] を得てカードを1枚引く。" }, "hexamod:HereAndNow": { "NAME": "今ここで", @@ -162,7 +168,7 @@ "NAME": "ゴーストシールド", "DESCRIPTION": "エセリアル NL [#e087a4]死後[] NL 1 ブラー を得る。 NL ", "EXTENDED_DESCRIPTION": [ - " !B! ブロックを得る" + "!B! ブロックを得る" ] }, "hexamod:GiftsFromBeyond": { @@ -182,19 +188,19 @@ }, "hexamod:HauntingEcho": { "NAME": "呪いの反響", - "DESCRIPTION": " !D! ダメージを与える。 NL 現在の ゴーストフレイムが *発火 状態ならそれを hexamod:点火 しなおす。" + "DESCRIPTION": "!D! ダメージを与える。 NL 現在の ゴーストフレイムが *発火 状態ならそれを hexamod:点火 しなおす。" }, "hexamod:HeatCrush": { "NAME": "ヒートクラッシュ", - "DESCRIPTION": " !D! ダメージを与える。 NL 敵の *ソウルバーン でダメージが上昇する。" + "DESCRIPTION": "!D! ダメージを与える。 NL 敵の *ソウルバーン でダメージが上昇する。" }, "hexamod:HeatMetal": { "NAME": "ヒートメタル", - "DESCRIPTION": " !D! ダメージを与える。 NL !burny! hexamod:ソウルバーン と、弱体 !M! を与える。" + "DESCRIPTION": "!D! ダメージを与える。 NL !burny! hexamod:ソウルバーン と、弱体 !M! を与える。" }, "hexamod:HeatShield": { "NAME": "ヒートシールド", - "DESCRIPTION": "対象の *ソウルバーン の合計に等しいブロックを得る。 NL その後 *ソウルバーン を解除する。", + "DESCRIPTION": "対象の *ソウルバーン の合計に等しいブロックを得る。 NL その後 *ソウルバーン の猶予を1ターン増加する。 NL 廃棄", "UPGRADE_DESCRIPTION": "対象の *ソウルバーン の合計に等しいブロックを得る。 NL その後 *ソウルバーン の猶予を1ターン増加する。", "EXTENDED_DESCRIPTION": [ " NL (現在値: !B! ブロック。)" @@ -210,15 +216,15 @@ "hexamod:InfernalForm": { "NAME": "地獄化", "DESCRIPTION": "ターン開始時、 hexamod:火力 !M! を得る。", - "UPGRADE_DESCRIPTION": "hexamod:火力 !M! を得る。 NL ターン開始時、 !M! hexamod:火力 !M! を得る。" + "UPGRADE_DESCRIPTION": "hexamod:火力 !M! を得る。 NL ターン開始時、 hexamod:火力 !M! を得る。" }, "hexamod:Incineration": { "NAME": "焼却", - "DESCRIPTION": " !D! ダメージと !burny! hexamod:ソウルバーン を !M! 回与える。" + "DESCRIPTION": "!D! ダメージと !burny! hexamod:ソウルバーン を !M! 回与える。" }, "hexamod:StokeTheFire": { "NAME": "撹拌される炎", - "DESCRIPTION": " !B! ブロックを得る。 NL *発火 状態の ゴーストフレイム の数だけ、手札のカードをランダムにアップグレードする。" + "DESCRIPTION": "!B! ブロックを得る。 NL *発火 状態の ゴーストフレイム の数だけ、手札のカードをランダムにアップグレードする。" }, "hexamod:NecessarySacrifice": { "NAME": "価値ある犠牲", @@ -249,8 +255,8 @@ }, "hexamod:PhantomFireball": { "NAME": "幻影の火球", - "DESCRIPTION": " !D! ダメージを与える。 NL 敵が *ソウルバーン 状態なら、それを炸裂させる。", - "UPGRADE_DESCRIPTION": " !D! ダメージを与える。 NL 敵が *ソウルバーン 状態なら、それを1だけ残して炸裂させる。" + "DESCRIPTION": "!D! ダメージを与える。 NL 敵が *ソウルバーン 状態なら、それを炸裂させる。", + "UPGRADE_DESCRIPTION": "!D! ダメージを与える。 NL 敵が *ソウルバーン 状態なら、それを1だけ残して炸裂させる。" }, "hexamod:PowerFromBeyond": { "NAME": "彼方からの力", @@ -324,7 +330,7 @@ }, "hexamod:LivingBomb": { "NAME": "リビングボム", - "DESCRIPTION": " !burny! hexamod:ソウルバーン を与える。この敵に炸裂した時、敵全体にダメージを与える。" + "DESCRIPTION": "!burny! hexamod:ソウルバーン を与える。この敵に炸裂した時、敵全体にダメージを与える。" }, "hexamod:SpectersWail": { "NAME": "幽霊の泣き声", @@ -332,7 +338,8 @@ }, "hexamod:BrightRitual": { "NAME": "輝きの儀式", - "DESCRIPTION": "[E] を得てカードを1枚引く。これを *発火 しているゴーストフレイムの数だけ繰り返し、それらを hexamod:滅却 する。 NL 廃棄" + "DESCRIPTION": "一番目のゴーストフレイムに移動する。 NL [E] を得てカードを1枚引く。これを *発火 している数だけ繰り返し、それらを hexamod:滅却 する。 NL 廃棄" + }, "hexamod:NaughtySpirit": { "NAME": "イタズラな魂", @@ -340,15 +347,15 @@ }, "hexamod:StepThrough": { "NAME": "ステップスルー", - "DESCRIPTION": " !D! ダメージを与える。 NL カードを1枚引くのを *発火 状態の ゴーストフレイム の数だけ繰り返す。" + "DESCRIPTION": "!D! ダメージを与える。 NL カードを1枚引くのを *発火 状態の ゴーストフレイム の数だけ繰り返す。" }, "hexamod:Strike": { "NAME": "ストライク", - "DESCRIPTION": " !D! ダメージを与える。" + "DESCRIPTION": "!D! ダメージを与える。" }, "hexamod:StrikeFromBeyond": { "NAME": "ビヨンドストライク", - "DESCRIPTION": " !D! ダメージを与える。 NL 山札から エセリアル カードを1枚手札に加える。", + "DESCRIPTION": "!D! ダメージを与える。 NL 山札から エセリアル カードを1枚手札に加える。", "EXTENDED_DESCRIPTION": ["エセリアル","エセリアル NL "] }, "hexamod:SuperheatedStrike": { @@ -362,7 +369,7 @@ }, "hexamod:ThermalTransfer": { "NAME": "熱転送", - "DESCRIPTION": " !D! ダメージを与える。 NL 対象が *ソウルバーン 状態なら、 !B! ブロックを得る。" + "DESCRIPTION": "!D! ダメージを与える。 NL 対象が *ソウルバーン 状態なら、 !B! ブロックを得る。" }, "hexamod:TimeOfNeed": { "NAME": "必要な時", @@ -370,12 +377,12 @@ }, "hexamod:TimeWarp": { "NAME": "タイムワープ", - "DESCRIPTION": " !D! ダメージを与える。 NL *前進 または *後退 した時、このカードを捨て札から手札に戻す。" + "DESCRIPTION": "!D! ダメージを与える。 NL *前進 または *後退 した時、このカードを捨て札から手札に戻す。" }, "hexamod:FlareFlick": { "NAME": "弾ける火", - "DESCRIPTION": " !D! ダメージを与える。 NL 現在のゴーストフレイムを hexamod:点火 し、 hexamod:前進 を行う。", - "UPGRADE_DESCRIPTION": " !D! ダメージを与える。 NL 現在のゴーストフレイムを hexamod:点火 し、 hexamod:前進 か hexamod:後退 を選んで行う。", + "DESCRIPTION": "!D! ダメージを与える。 NL 現在のゴーストフレイムを hexamod:点火 し、 hexamod:前進 を行う。", + "UPGRADE_DESCRIPTION": "!D! ダメージを与える。 NL 現在のゴーストフレイムを hexamod:点火 し、 hexamod:前進 か hexamod:後退 を選んで行う。", "EXTENDED_DESCRIPTION": ["hexamod:前進","hexamod:後退", "何もしない"] }, "hexamod:TurnItUp": { @@ -385,7 +392,7 @@ }, "hexamod:UnleashSpirits": { "NAME": "解き放たれる霊", - "DESCRIPTION": "ランダムな敵に !D! ダメージを与える。 NL これを *廃棄 された *エセリアル の数だけ繰り返す。 NL 廃棄", + "DESCRIPTION": "ランダムな敵に !D! ダメージを与える。 NL これを 前のターンに *廃棄 された *エセリアル の数だけ繰り返す。", "UPGRADE_DESCRIPTION": " NL ( !M! 回)" }, "hexamod:UnlimitedPower": { @@ -438,7 +445,7 @@ }, "hexamod:LingeringShades": { "NAME": "残影", - "DESCRIPTION": "hexamod:後退 NL !burny! hexamod:ソウルバーン を与える。 NL 捨て札にあるエセリアルカード全てを山札に戻す。" + "DESCRIPTION": "hexamod:後退 NL !burny! hexamod:ソウルバーン を与える。 NL 捨て札にあるエセリアルカードを全て手札に戻す。" }, "hexamod:EtherStep": { "NAME": "エーテルステップ", @@ -450,17 +457,17 @@ }, "hexamod:OpposingAction": { "NAME": "反抗", - "DESCRIPTION": "hexamod:後退 NL [E] を得る。", - "UPGRADE_DESCRIPTION": "hexamod:後退 NL [E] [E] を得る。" + "DESCRIPTION": "hexamod:後退 NL [E] [E] を得る。 NL 廃棄", + "UPGRADE_DESCRIPTION": "hexamod:後退 NL [E] [E] [E] を得る。 NL 廃棄" }, "hexamod:SeventhEye": { - "NAME": "七ツの眼", - "DESCRIPTION": "山札からカードを1枚取り出す。 NL ランダムなゴーストフレイムに移動する。 NL 廃棄", - "UPGRADE_DESCRIPTION": "山札からカードを1枚取り出す。 NL ランダムなゴーストフレイムに移動する。 NL 廃棄" + "NAME": "七つの眼", + "DESCRIPTION": "山札から 1 枚のカードを選び、手札に加える。 NL ランダムなゴーストフレイムに移動する。 NL 廃棄", + "UPGRADE_DESCRIPTION": "山札から 1 枚のカードを選び、手札に加える。 NL ランダムなゴーストフレイムに移動する。 NL 廃棄" }, "hexamod:FlameDevourer": { "NAME": "炎を貪るもの", - "DESCRIPTION": "hexamod:後退 NL hexamod:点火 されたゴーストフレイムの上に hexamod:後退 した場合、 !B! ブロックを得る。" + "DESCRIPTION": "直前のゴーストフレイムが hexamod:点火 されていた場合、 hexamod:後退 し、 !B! ブロックを得る。" }, "hexamod:SpectralGrace": { "NAME": "魂の恩寵", @@ -541,9 +548,9 @@ ] }, "hexamod:HexaLevel": { - "NAME": "Infernal Form", - "DESCRIPTION": "At the start of your turn, gain !M! hexamod:Intensity.", - "UPGRADE_DESCRIPTION": "Gain !M! hexamod:Intensity. NL At the start of your turn, gain !M! hexamod:Intensity." + "NAME": "地獄化", + "DESCRIPTION": "ターン開始時、 hexamod:火力 !M! を得る。", + "UPGRADE_DESCRIPTION": "hexamod:火力 !M! を得る。 NL ターン開始時、 hexamod:火力 !M! を得る。" }, "hexamod:SkipABeat": { "NAME": "Kindle", diff --git a/src/main/resources/hexamodResources/localization/jpn/EventStrings.json b/src/main/resources/hexamodResources/localization/jpn/EventStrings.json index 3aec225e1..8a9add957 100644 --- a/src/main/resources/hexamodResources/localization/jpn/EventStrings.json +++ b/src/main/resources/hexamodResources/localization/jpn/EventStrings.json @@ -8,14 +8,14 @@ "あなたは奇妙な #y黄金 の箱を受け取り、それを開いた。 #p闇 が流れるのを感じる。中に入っていたのは便利な装備だった!", "あなたは脈打つ @鼓動@ を感じる箱を手に取った。鼓動があなたの腕に @流れ込む@ のを感じた。 #p吐き気を催した が、その分強くなった気がする...", "あなたが霊の持つ遺物を握りしめた途端、部屋は #p闇 に覆われた。幽霊はもう一度あなたに話しかけるが、その言葉は耳を通り越し直接あなたの脳内に聞こえてきた。 NL NL ' #p賢明な選択だ。別の取引はどうだ、友よ?好きなだけ選んでくれ... '", - "この #p霊が 要求する取引には高すぎる代償が必要であることをあなたは知っている。何とか対処しなければ。そして、なんという幸運。壁に! #bブルーキャンドル が! NL NL あなたは壁からキャンドルをひったくり、 #r自分の身体を傷つけながらも それを霊へと投げつけると、霊は #b不気味な色合い になって消えていく。 NL NL この霊は最早どんな取引も行うことはないだろう。", - "この #p霊が 要求する取引には高すぎる代償が必要であることをあなたは知っている。何とか対処しなければ。しかし幸運なことにあなたの手には #bブルーキャンドル がある。それを霊へと投げつけると、霊は #b不気味な色合い になって消えていく。 NL NL この霊は最早どんな取引も行うことはないだろう。" + "この #p霊が 要求する取引には高すぎる代償が必要であることをあなたは知っている。何とか対処しなければ。そして、なんという幸運。壁に! #bブラックキャンドル が! NL NL あなたは壁からキャンドルをひったくり、 #r自分の身体を傷つけながらも それを霊へと投げつけると、霊は #b不気味な色合い になって消えていく。 NL NL この霊は最早どんな取引も行うことはないだろう。", + "この #p霊が 要求する取引には高すぎる代償が必要であることをあなたは知っている。何とか対処しなければ。しかし幸運なことにあなたの手には #bbブラックキャンドル がある。それを霊へと投げつけると、霊は #b不気味な色合い になって消えていく。 NL NL この霊は最早どんな取引も行うことはないだろう。" ], "OPTIONS": [ "[左の箱] #g入手:ドゥーヴー人形 #gまたは #gダークストーンの護符。 #r呪い #r2 #r- #r幽霊。", "[別の物]", "[右の箱] #g入手: #g呪いの鍵 #gまたは #g呼びよせる鐘。 #r更なる呪い。", - "[追跡] #g入手: #gブルーキャンドル。 #r失う: #r5 #rHP。", + "[追跡] #g入手: #g解呪のロウソク。 #r失う: #r5 #rHP。", "[追跡] 立ち去る", "[取引:パワー] #g入手:ランダムな #yレア #gカード。 #rランダムな呪い", "[取引:ライフ] #g入手: #g最大HP+5。 #rランダムな呪い", @@ -34,18 +34,18 @@ ], "OPTIONS": [ "[捧げる] #r失う: ", - " HP。 #g入手:第一の封印。", + " #rHP。 #g入手:第一の封印。", " #yソウル。 #g入手: #g第二の封印。", " #g入手: #g第三の封印。", " #g入手: #g第四の封印。", - "[Locked] 必要:更なるゴールド", + "[Locked] 必要:更なるソウル", "[Locked] 必要:コモンカード", "[Locked] 必要:ポーション", "[立ち去る]", "[Locked] 供物の作成", - ". #g入手: #g第五の封印。", + " #g入手: #g第五の封印。", "[Locked] 必要:アップグレードカード", - ". #g入手: #g第六の封印。", + " #r最大HP #g入手: #g第六の封印。", "[Locked] 必要:最大HP2" ] }, diff --git a/src/main/resources/hexamodResources/localization/jpn/KeywordStrings.json b/src/main/resources/hexamodResources/localization/jpn/KeywordStrings.json index acbac9e39..b99f28dc8 100644 --- a/src/main/resources/hexamodResources/localization/jpn/KeywordStrings.json +++ b/src/main/resources/hexamodResources/localization/jpn/KeywordStrings.json @@ -15,7 +15,7 @@ "advancing", "前進" ], - "DESCRIPTION": "次の ゴーストフレイム に移動する。 ゴーストフレイム の上に移動すると #y消火 される。" + "DESCRIPTION": "次の ゴーストフレイム に移動する。 #y点火 状態の ゴーストフレイム の上に移動した場合 #y滅却 される。" }, { "PROPER_NAME": "後退", @@ -25,7 +25,7 @@ "retracting", "後退" ], - "DESCRIPTION": "前の ゴーストフレイム に移動する。 ゴーストフレイム の上に移動すると #y消火 される。" + "DESCRIPTION": "前の ゴーストフレイム に移動する。 #y点火 状態の ゴーストフレイム の上に移動した場合 #y滅却 される。" }, { "PROPER_NAME": "火力", @@ -89,7 +89,7 @@ "crushing", "クラッシング" ], - "DESCRIPTION": "#yゴーストフレイム 。 #y活性 時にスキルを #b2 回プレイされると、 #y発火 する。 #y発火: ランダムな敵1体に #b3 ダメージを2回与える。", + "DESCRIPTION": "#yゴーストフレイム 。 #y活性 時にスキルを #b2 回プレイされると、 #y発火 する。 #y発火: ランダムな敵1体に #b6 ダメージを与える。", "TRANSLATOR_NOTE": "Not used Not used Not used Not used Not used Not used Not used Not used Not used Not used Not used Not used Not used Not used Not used Not used Not used Not used " }, @@ -99,9 +99,17 @@ "bolstering", "ボルスタリング" ], - "DESCRIPTION": "#yゴーストフレイム 。 #y活性 時にパワーがプレイされると、 #y発火 する。 #y発火: #b4 #yブロック と #y筋力 #b1 を得る。", + "DESCRIPTION": "#yゴーストフレイム 。 #y活性 時にパワーがプレイされると、 #y発火 する。 #y発火: #b5 #yブロック と #y筋力 #b1 を得る。", "TRANSLATOR_NOTE": "Not used Not used Not used Not used Not used Not used Not used Not used Not used Not used Not used Not used Not used Not used Not used Not used Not used Not used " - + }, + { + "ID": "plated", + "PROPER_NAME": "プレートアーマー", + "NAMES": [ + "plated", + "プレート" + ], + "DESCRIPTION": "ターン終了時、自分の #yプレートアーマー と同じ量のブロックを得る。防御しきれなかったダメージを受けると、 #yプレートアーマー が #b1 減少する。" }, { "PROPER_NAME": "シーリング", diff --git a/src/main/resources/hexamodResources/localization/jpn/OrbStrings.json b/src/main/resources/hexamodResources/localization/jpn/OrbStrings.json index c015a9a00..005b3750f 100644 --- a/src/main/resources/hexamodResources/localization/jpn/OrbStrings.json +++ b/src/main/resources/hexamodResources/localization/jpn/OrbStrings.json @@ -8,7 +8,7 @@ " 回 プレイする。", "#y点火 条件:炎の上で #yアタックを #b2 回プレイする。", " NL NL #yイグニッション : ランダムな敵に #b", - " #yソウルバーン を与える。", + " #yソウルバーン を与える。", " NL NL ターン終了時、これが #y発火 していたら次のゴーストフレイムへと #y前進 する。" ] }, @@ -19,9 +19,9 @@ "#y点火 条件: #yスキル を #b" , " 回 プレイする。", " 回 プレイする。", - "#y点火 条件:炎の上で #yスキル を #b2 回プレイする。", + "#y点火 条件:炎の上で #yスキル を #b2 回プレイする。", " NL NL #yイグニッション : ランダムな敵に #b", - " ダメージを #b2 回与える。", + " ダメージを 与える。", " NL NL ターン終了時、これが #y発火 していたら次のゴーストフレイムへと #y前進 する。" ] }, @@ -30,7 +30,7 @@ "DESCRIPTION": [ "#y発火 #y中 NL ", "#y点火 条件: #yパワー をプレイする。 ", - "#y点火 条件:炎の上で #yパワー をプレイする。 ", + "#y点火 条件:炎の上で #yパワー をプレイする。 ", " NL NL #yイグニッション : #b", " #yブロック と #y筋力 #b1 を得る。", " NL NL ターン終了時、これが #y発火 していたら次のゴーストフレイムへと #y前進 する。" @@ -45,9 +45,9 @@ "#y点火 条件: [E] を消費する。", "error 開発に報告してください: ", "#y点火 条件:炎の上で [E] [E] [E] 消費すると #y点火 する。 任意のターン終了時に #y滅却 する。", - " NL NL #yイグニッション : ランダムな敵に発火しているゴーストフレイム毎に #b", - " ダメージ。その後 #y滅却 する。", - " NL NL ターン終了時、これが #y発火 していたら次のゴーストフレイムへと #y前進 する。もしすべてのゴーストフレイムが #y発火 していた場合 [REMOVE_SPACE], #y火力 #b2 を得る。 [REMOVE_SPACE].", + " NL NL #yイグニッション : 発火しているゴーストフレイム #b1 つ毎にランダムな敵に #b", + " ダメージを与え、その後 #y滅却 する。", + " NL NL ターン終了時、これが #y発火 していたら次のゴーストフレイムへと #y前進 する。もしすべてのゴーストフレイムが #y発火 していた場合 #y火力 #b2 を得る。", " NL NL ターン終了時、これが #y発火 していたら次のゴーストフレイムへと #y前進 する。" ] }, @@ -57,15 +57,9 @@ "#y発火 #y中 NL ", "#y点火 条件: ターン終了。", "#y点火 条件: ターン終了。", - " NL NL #yイグニッション : #y占術 を行い", - " 山札の一番上のカードをプレイする。", + " NL NL #yイグニッション : #y占術 #b", + " を行い山札の一番上のカードをプレイする。 占術は #y火力 によって修正される。 ", " NL NL ターン終了時、これが #y発火 していたら次のゴーストフレイムへと #y前進 する。" ] } -} - - - - - - +} \ No newline at end of file diff --git a/src/main/resources/hexamodResources/localization/jpn/PowerStrings.json b/src/main/resources/hexamodResources/localization/jpn/PowerStrings.json index 8c2312921..60e199022 100644 --- a/src/main/resources/hexamodResources/localization/jpn/PowerStrings.json +++ b/src/main/resources/hexamodResources/localization/jpn/PowerStrings.json @@ -67,9 +67,9 @@ "hexamod:EnhancePower": { "NAME": "火力", "DESCRIPTIONS": [ - " #yソウルバーン で与えるダメージと、ゴーストフレイムから付与される #yブロック が増加: #b", + " #yソウルバーン で与えるダメージと、ゴーストフレイムの #yダメージ や #yブロック の増加量: #b", " ", - "#yソウルバーン で与えるダメージと、ゴーストフレイムから付与される #yブロック が減少: #b", + "#yソウルバーン で与えるダメージと、ゴーストフレイムの #yダメージ や #yブロック の減少量: #b", "#yシーリングゴーストフレイム の効果が2倍になる。" ] }, diff --git a/src/main/resources/hexamodResources/localization/jpn/RelicStrings.json b/src/main/resources/hexamodResources/localization/jpn/RelicStrings.json index 9b59acc17..d9017c454 100644 --- a/src/main/resources/hexamodResources/localization/jpn/RelicStrings.json +++ b/src/main/resources/hexamodResources/localization/jpn/RelicStrings.json @@ -17,15 +17,15 @@ "NAME": "エーテルのマーク", "FLAVOR": "もっといい物が出来るか試してみよう...。", "DESCRIPTIONS": [ - "スピリットブランド", - " [] NL と置き換える。 NL #y点火 した時 #b4 #yブロック を得る。" + "", + " スピリットブランド と置き換える。 NL #y点火 した時 #b4 #yブロック を得る。" ] }, "hexamod:IceCube": { "NAME": "ザナトスの凍てつく護符", "FLAVOR": "なんだか...寒い。", "DESCRIPTIONS": [ - "ターン開始時 [E] を得る。 戦闘開始時 #b1 #yhexamod:火力 を失い、 #yhexamod:インフェルノゴーストフレイム から #yhexamod:火力 を得られなくなる。" + "ターン開始時 [E] を得る。 戦闘開始時 #b1 #yhexamod:火力 を失い、 #yインフェルノゴーストフレイム から #y火力 を得られなくなる。" ] }, "hexamod:SoulStone": { @@ -88,14 +88,14 @@ "NAME": "Six-Point Brand", "FLAVOR": "炎、炎、炎、炎、炎、焔!", "DESCRIPTIONS": [ - "カードを #b6 枚プレイする度に ランダムな敵に #b6 ダメージを与える。" + "カードを #b6 枚プレイする度に #yストライク の #ygremlin:エコー を手札に加える。そのコストは #b0 になる。" ] }, "hexamod:Libra": { "NAME": "ライブラ", - "FLAVOR": "全ての物事のバランス", + "FLAVOR": "全てのバランス", "DESCRIPTIONS": [ - "デッキ内のストライクと防御を好きなだけ選び、反対のタイプのランダムなカードに #y変換 する。", + "デッキ内のストライクと防御を好きなだけ選び、反対のタイプのランダムなカードに #y変化 させる。", "審判の天秤が傾く", "好きなカードを好きな枚数選び、反対のタイプに 変換 する。" ] diff --git a/src/main/resources/hexamodResources/localization/kor/CardStrings.json b/src/main/resources/hexamodResources/localization/kor/CardStrings.json index c76601da5..42282b110 100644 --- a/src/main/resources/hexamodResources/localization/kor/CardStrings.json +++ b/src/main/resources/hexamodResources/localization/kor/CardStrings.json @@ -108,6 +108,12 @@ "UPGRADE_DESCRIPTION": "카드를 1장 뽑습니다. NL hexamod:수축 또는 hexamod:팽창하거나 현재 상태를 유지합니다.", "EXTENDED_DESCRIPTION": ["hexamod:팽창.", "hexamod:수축.", "유지."] }, + "hexamod:MatchstickFloat": { + "NAME": "신출귀몰 티크재 발견", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "EXTENDED_DESCRIPTION": ["hexamod:팽창.", "hexamod:수축.", "유지."] + }, "hexamod:Floatwork": { "NAME": "떠돌기", "DESCRIPTION": "휘발성. [#e087a4]사후세계.[] NL 민첩을 1 얻습니다. NL ", @@ -218,7 +224,7 @@ }, "hexamod:StokeTheFire": { "NAME": "불 지피기", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL 이번 전투 동안 hexamod:점화된 유령불꽃 하나당 카드를 무작위로 1장 강화합니다." + "DESCRIPTION": "방어도를 !B! 얻습니다. NL hexamod:점화된 유령불꽃 하나당 카드를 무작위로 1장 강화합니다." }, "hexamod:NecessarySacrifice": { "NAME": "대가 지불", @@ -332,11 +338,11 @@ }, "hexamod:BrightRitual": { "NAME": "눈부신 의식", - "DESCRIPTION": "hexamod:점화된 유령불꽃 하나당 [E] 를 얻고 카드를 1장 뽑습니다. hexamod:점화된 유령불꽃을 모두 hexamod:소화시킵니다. NL 소멸." + "DESCRIPTION": "hexamod:점화된 유령불꽃 하나당 [E] 를 얻고 카드를 1장 뽑습니다. hexamod:점화된 유령불꽃을 모두 hexamod:소화시키고 첫 유령 불꽃 위치로 돌아갑니다. NL 소멸." }, "hexamod:NaughtySpirit": { "NAME": "악랄한 영", - "DESCRIPTION": "hexamod:수축합니다. NL hexamod:영혼화상을 !burny! 부여합니다. NL 현재 유령불꽃이 hexamod:점화된다면 이 카드를 가져옵니다." + "DESCRIPTION": "hexamod:수축합니다. NL hexamod:영혼화상을 !burny! 부여합니다. NL 현재 유령불꽃이 hexamod:점화된다면 이 카드를 가져오고 hexamod:수축합니다." }, "hexamod:StepThrough": { "NAME": "단계 밟기", @@ -450,8 +456,8 @@ }, "hexamod:OpposingAction": { "NAME": "반발", - "DESCRIPTION": "hexamod:수축합니다. NL [E] 를 얻습니다.", - "UPGRADE_DESCRIPTION": "hexamod:수축합니다. NL [E] [E] 를 얻습니다." + "DESCRIPTION": "hexamod:수축합니다. NL [E] [E] 를 얻습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "hexamod:수축합니다. NL [E] [E] [E] 를 얻습니다. NL 소멸." }, "hexamod:SeventhEye": { "NAME": "일곱 번째 눈", @@ -460,7 +466,7 @@ }, "hexamod:FlameDevourer": { "NAME": "집어삼키는 불꽃", - "DESCRIPTION": "hexamod:수축합니다. hexamod:점화된 유령불꽃으로 *수축됐다면 방어도를 !B! 얻습니다." + "DESCRIPTION": "이전 유령불꽃이 hexamod:점화되어 있다면 hexamod:수축하고 방어도를 !B! 얻습니다." }, "hexamod:SpectralGrace": { "NAME": "영적인 영감", diff --git a/src/main/resources/hexamodResources/localization/kor/KeywordStrings.json b/src/main/resources/hexamodResources/localization/kor/KeywordStrings.json index 89304b90f..c992e68b6 100644 --- a/src/main/resources/hexamodResources/localization/kor/KeywordStrings.json +++ b/src/main/resources/hexamodResources/localization/kor/KeywordStrings.json @@ -28,6 +28,7 @@ "수축", "수축할", "수축하면", + "수축하고", "수축합니다", "retract", "retracted", @@ -148,5 +149,16 @@ "대혼란" ], "DESCRIPTION": "#y유령불꽃의 한 종류입니다. NL 내 턴 종료 시 점화됩니다. #y점화 시 #y예지, 뽑을 카드 더미 맨 위에 있는 카드를 사용합니다." + }, + { + "ID": "plated", + "PROPER_NAME": "판금 갑옷", + "NAMES": [ + "판금_갑옷", + "판금_갑옷을", + "판금_갑옷과", + "plated" + ], + "DESCRIPTION": "내 턴 종료 시 #y판금 #y갑옷만큼 방어도를 얻습니다. 막히지 않은 공격 피해를 받으면 #y판금 #y갑옷이 #b1 감소합니다." } ] diff --git a/src/main/resources/hexamodResources/localization/kor/OrbStrings.json b/src/main/resources/hexamodResources/localization/kor/OrbStrings.json index 0a7a99ed9..34209f73c 100644 --- a/src/main/resources/hexamodResources/localization/kor/OrbStrings.json +++ b/src/main/resources/hexamodResources/localization/kor/OrbStrings.json @@ -47,7 +47,6 @@ "#y활성화된 동안 [E] [E] [E] 를 소모하면 이 유령불꽃이 #y점화됩니다. 턴 종료 시 #y소화됩니다.", " NL NL #y점화 효과: 무작위 적들에게 #y점화된 유령불꽃마다 피해를 #b", " 만큼 주고 #y점화된 유령불꽃을 모두 #y소화시킵니다. 모든 유령불꽃이 #y점화돼 있었다면 #y극열을 #b2 얻습니다.", - " NL NL 내 턴 종료 시 이 유령불꽃이 #y점화됐다면 다음 유령불꽃으로 #y팽창합니다.", " NL NL 내 턴 종료 시 이 유령불꽃이 #y점화됐다면 다음 유령불꽃으로 #y팽창합니다." ] }, @@ -58,7 +57,8 @@ "내 턴 종료 시 #y점화됩니다.", "내 턴 종료 시 #y점화됩니다.", " NL NL #y점화 효과: #y예지 #b", - ". 뽑을 카드 더미 맨 위에 있는 카드를 사용합니다. NL NL 내 턴 종료 시 이 유령불꽃이 #y점화됐다면 다음 유령불꽃으로 #y팽창합니다." + ". 뽑을 카드 더미 맨 위에 있는 카드를 사용합니다( #y극열만큼 조정됩니다).", + " NL NL 내 턴 종료 시 이 유령불꽃이 #y점화됐다면 다음 유령불꽃으로 #y팽창합니다." ] } } \ No newline at end of file diff --git a/src/main/resources/hexamodResources/localization/spa/CardStrings.json b/src/main/resources/hexamodResources/localization/spa/CardStrings.json new file mode 100644 index 000000000..32522ecc3 --- /dev/null +++ b/src/main/resources/hexamodResources/localization/spa/CardStrings.json @@ -0,0 +1,531 @@ +{ + "hexamod:AdvancingGuard": { + "NAME": "Guardia Avanzada", + "DESCRIPTION": "Gana !B! de Bloqueo. NL hexamod:Avanzar." + }, + "hexamod:FleetingFlash": { + "NAME": "Destello Fugaz", + "DESCRIPTION": "hexamod:Incendia la llama fantasmal actual, despues la hexamod:Extingue." + }, + "hexamod:ApocalypseNow": { + "NAME": "Apocalipsis Ya", + "DESCRIPTION": "Etérea. NL Gana [E] [E]. NL Cambia a la Llama Fantasmal *Infernal. NL Agota.", + "UPGRADE_DESCRIPTION": "Etérea. NL Gana [E] [E] [E]. NL Cambia a la Llama Fantasmal *Infernal. NL Agota." + }, + "hexamod:Doomsday": { + "NAME": "Juicio Final", + "DESCRIPTION": "La próxima vez que todas las !M! llamas fantasmales estén *Incendiadas, juega un turno adicional.", + "UPGRADE_DESCRIPTION": "La próxima vez que al menos !M! llamas fantasmales estén *Incendiadas, juega un turno adicional." + }, + "hexamod:BacktrackSmack": { + "NAME": "Golpe Retrospectivo", + "DESCRIPTION": "Haz !D! de daño dos veces. NL hexamod:Retroceder." + }, + "hexamod:BurningQuestion": { + "NAME": "Pregunta Ardiente", + "DESCRIPTION": "Etérea. [#e087a4]Ultratumba.[] NL Gana !M! de Fuerza. NL ", + "EXTENDED_DESCRIPTION": [ + "Gana 1 de Destreza." + ] + }, + "hexamod:BurningTouch": { + "NAME": "Toque Abrasador", + "DESCRIPTION": "Aplica !burny! hexamod:QuemarAlma, dos veces si el enemigo ya tiene hexamod:QuemarAlma." + }, + "hexamod:CatchUp": { + "NAME": "Alcanzar el Fuego", + "DESCRIPTION": "hexamod:Incendia la llama fantasmal anterior !M! veces. NL Agota.", + "UPGRADE_DESCRIPTION": "hexamod:Incendia la llama fantasmal anterior !M! veces." + }, + "hexamod:ChargedBarrage": { + "NAME": "Descarga Abrasadora", + "DESCRIPTION": "Aplica !burny! hexamod:QuemarAlma. NL Repite por cada llama fantasmal *Incendiada." + }, + "hexamod:CouncilsJustice": { + "NAME": "Justicia del Consejo", + "DESCRIPTION": "Haz !D! de daño, aumentado en !M! por cada *Aparición *Agotada. NL Agota." + }, + "hexamod:Defend": { + "NAME": "Defensa", + "DESCRIPTION": "Gana !B! de Bloqueo." + }, + "hexamod:Divider": { + "NAME": "Divisor", + "DESCRIPTION": "Haz !D! de daño. NL Repite por cada llama fantasmal *Incendiada." + }, + "hexamod:DynamicBlow": { + "NAME": "Golpe Dinámico", + "DESCRIPTION": "Etérea. NL Si la llama fantasmal actual está hexamod:Incendiada, aplica !burny! hexamod:QuemarAlma. Si no, hace !D! de daño." + }, + "hexamod:EmpoweredFlame": { + "NAME": "Llama Potenciada", + "DESCRIPTION": "Gana !M! de hexamod:Intensidad." + }, + "hexamod:EtherealExpedition": { + "NAME": "Expedición Fantasmal", + "DESCRIPTION": "Etérea. [#e087a4]Ultratumba.[] NL [#e087a4]Agrega[] !M! [#e087a4]cartas[] [#e087a4]aleatorias[] [#e087a4]de[] [#e087a4]Ultratumba[] [#e087a4]a[] [#e087a4]tu[] [#e087a4]mazo[] y otra a tu mano." + }, + "hexamod:ExtraCrispy": { + "NAME": "Bien Tostado", + "DESCRIPTION": "Cuando hexamod:QuemarAlma detone en un enemigo, aplica !M! de hexamod:QuemarAlma después de la detonación." + }, + "hexamod:FastForward": { + "NAME": "Avance Rápido", + "DESCRIPTION": "Roba !M! cartas. NL hexamod:Avanzar.", + "UPGRADE_DESCRIPTION": "hexamod:Incendia la llama fantasmal actual. NL hexamod:Avanzar." + }, + "hexamod:Firestarter": { + "NAME": "Iniciador de Fuego", + "DESCRIPTION": "Haz !D! de daño y aplica !burny! hexamod:QuemarAlma a TODOS los enemigos." + }, + "hexamod:FlamesFromBeyond": { + "NAME": "Llamas del Más Allá", + "DESCRIPTION": "Etérea. [#e087a4]Ultratumba.[] NL [#e087a4]Aplica[] !burny! [#e087a4]QuemarAlma[] [#e087a4]a[] [#e087a4]TODOS[] [#e087a4]los[] [#e087a4]enemigos[], dos veces." + }, + "hexamod:BadOmen": { + "NAME": "Mal Presagio", + "DESCRIPTION": "Elige un tipo de llama fantasmal para reemplazar la actual. NL Agota.", + "UPGRADE_DESCRIPTION": "Retiene. NL Elige un tipo de llama fantasmal para reemplazar la actual. NL Agota.", + "EXTENDED_DESCRIPTION": [ + "Reemplaza con una Llama Fantasmal hexamod:Fortalecedora.", + "Reemplaza con una Llama Fantasmal hexamod:Aplastante.", + "Reemplaza con una Llama Fantasmal hexamod:Abrasadora.", + "No reemplazar." + ] + }, + "hexamod:Float": { + "NAME": "Flotar", + "DESCRIPTION": "Roba una carta. NL hexamod:Avanzar.", + "UPGRADE_DESCRIPTION": "Roba una carta. NL Puedes elegir hexamod:Retroceder o hexamod:Avanzar.", + "EXTENDED_DESCRIPTION": ["hexamod:Avanzar.","hexamod:Retroceder.", "No hacer nada."] + }, + "hexamod:MatchstickFloat": { + "NAME": "Cerillo Furtivo", + "DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si la estás viendo, probablemente haya un error. NL Por favor, repórtalo a un desarrollador del mod.", + "UPGRADE_DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si la estás viendo, probablemente haya un error. NL Por favor, repórtalo a un desarrollador del mod.", + "EXTENDED_DESCRIPTION": ["hexamod:Avanzar.","hexamod:Retroceder.", "No hacer nada."] + }, + "hexamod:Floatwork": { + "NAME": "Trabajo Etéreo", + "DESCRIPTION": "Etérea. [#e087a4]Ultratumba.[] NL Gana 1 de Destreza. NL ", + "EXTENDED_DESCRIPTION": ["Gana !M! de Armadura de Placas."] + }, + "hexamod:ForkedFlame": { + "NAME": "Llama Bifurcada", + "DESCRIPTION": "Haz !D! de daño. NL hexamod:Incendia la llama fantasmal anterior y la siguiente.", + "UPGRADE_DESCRIPTION": "Haz !D! de daño. NL hexamod:Incendia la llama fantasmal anterior, la actual y la siguiente." + }, + "hexamod:WhisperFromBeyond": { + "NAME": "Susurro del Más Allá", + "DESCRIPTION": "Haz !D! de daño. NL Cuando una carta se Agote este turno, aplica !burny! hexamod:QuemarAlma al enemigo." + }, + "hexamod:InstantInferno": { + "NAME": "Infierno Instantáneo", + "DESCRIPTION": "Retiene. NL Aplica !burny! hexamod:QuemarAlma. NL Cambia e hexamod:Incendia la llama fantasmal *Infernal. NL Agota.", + "UPGRADE_DESCRIPTION": "Retiene. NL Aplica !burny! hexamod:QuemarAlma. NL hexamod:Incendia la llama fantasmal *Infernal. NL Agota." + }, + "hexamod:GhostLash": { + "NAME": "Latigazo Fantasma", + "DESCRIPTION": "Etérea. [#e087a4]Ultratumba.[] NL [#e087a4]Haz[] !D! [#e087a4]de[] [#e087a4]daño.[] NL Hace !M! daño adicional por cada otra carta Etérea en la mano.", + "EXTENDED_DESCRIPTION": [ + "" + ] + }, + "hexamod:IntoShadow": { + "NAME": "En la Sombra", + "DESCRIPTION": "Etérea. NL Siempre que hexamod:Retrocedas, tu próxima carta cuesta 0 y se Agota.", + "UPGRADE_DESCRIPTION": "Siempre que hexamod:Retrocedas, tu próxima carta cuesta 0 y se Agota.", + "EXTENDED_DESCRIPTION": ["juega y se Agota."] + }, + "hexamod:DevilsDance": { + "NAME": "Danza del Diablo", + "DESCRIPTION": "Siempre que hexamod:Retrocedas, roba una carta.", + "UPGRADE_DESCRIPTION": "Innato. NL La primera vez que *Retrocedas cada turno, gana [E] y roba 1 carta. NL hexamod:Retroceder." + }, + "hexamod:HereAndNow": { + "NAME": "Aquí y Ahora", + "DESCRIPTION": "Al inicio de tu turno, gana [E]. NL Al final de tu turno, hexamod:Extingue la llama fantasmal actual." + }, + "hexamod:GhostShield": { + "NAME": "Escudo Fantasmal", + "DESCRIPTION": "Etérea. [#e087a4]Ultratumba.[] NL Gana 1 de expansioncontent:Desenfoque. NL ", + "EXTENDED_DESCRIPTION": ["Gana !B! de Bloqueo."] + }, + "hexamod:GiftsFromBeyond": { + "NAME": "Regalos del Más Allá", + "DESCRIPTION": "Al inicio de tu turno, añade !M! cartas aleatorias hexamod:Ultratumba a tu mano.", + "EXTENDED_DESCRIPTION": ["Estos espíritus son demasiado poderosos para invocarlos directamente."] + }, + "hexamod:HauntedHand": { + "NAME": "Mano Embrujada", + "DESCRIPTION": "Etérea. [#e087a4]Ultratumba.[] NL Roba !M! carta. NL ", + "UPGRADE_DESCRIPTION": "Etérea. [#e087a4]Ultratumba.[] NL Roba !M! cartas. NL ", + "EXTENDED_DESCRIPTION": ["Roba cartas hasta que robes una que no sea Etérea."] + }, + "hexamod:HauntingEcho": { + "NAME": "Eco Embrujado", + "DESCRIPTION": "Haz !D! de daño. NL Si la llama fantasmal actual está *Incendiada, hexamod:Incendiala de nuevo." + }, + "hexamod:HeatCrush": { + "NAME": "Aplastamiento Ardiente", + "DESCRIPTION": "Haz !D! de daño. NL El daño aumenta según el hexamod:QuemarAlma del enemigo." + }, + "hexamod:HeatMetal": { + "NAME": "Metal Ardiente", + "DESCRIPTION": "Haz !D! de daño. NL Aplica !burny! hexamod:QuemarAlma. NL Aplica !M! de Vulnerable." + }, + "hexamod:HeatShield": { + "NAME": "Escudo de Calor", + "DESCRIPTION": "Gana Bloqueo igual al hexamod:QuemarAlma en el enemigo, retrasa su hexamod:QuemarAlma 1 turno. NL Agota.", + "UPGRADE_DESCRIPTION": "Gana Bloqueo igual al hexamod:QuemarAlma en el enemigo, retrasa su hexamod:QuemarAlma 1 turno.", + "EXTENDED_DESCRIPTION": [" NL (Gana !B! de Bloqueo.)"] + }, + "hexamod:Hexaguard": { + "NAME": "Hexaguardia", + "DESCRIPTION": "Etérea. [#e087a4]Ultratumba.[] NL Roba !M! cartas. NL ", + "EXTENDED_DESCRIPTION": ["Gana !B! de Bloqueo."] + }, + "hexamod:InfernalForm": { + "NAME": "Forma Infernal", + "DESCRIPTION": "Al inicio de tu turno, gana !M! de hexamod:Intensidad.", + "UPGRADE_DESCRIPTION": "Gana !M! de hexamod:Intensidad. NL Al inicio de tu turno, gana !M! de hexamod:Intensidad." + }, + "hexamod:Incineration": { + "NAME": "Incineración", + "DESCRIPTION": "Haz !D! de daño y aplica !burny! hexamod:QuemarAlma !M! veces." + }, + "hexamod:StokeTheFire": { + "NAME": "Avivar la Llama", + "DESCRIPTION": "Gana !B! de Bloqueo. NL Por cada llama fantasmal *Incendiada, mejora una carta aleatoria en tu mano." + }, + "hexamod:NecessarySacrifice": { + "NAME": "Sacrificio Digno", + "DESCRIPTION": "Agota 2 cartas. NL Si son de tipo Ataque o Habilidad, transfórmalas al tipo opuesto.", + "UPGRADE_DESCRIPTION": "Agota 2 cartas. NL Si son de tipo Ataque o Habilidad, transfórmalas al tipo opuesto y Mejóralas.", + "EXTENDED_DESCRIPTION": ["Agotar para Sacrificio Digno."] + }, + "hexamod:NightmareGuise": { + "NAME": "Apariencia de Pesadilla", + "DESCRIPTION": "Etérea. [#e087a4]Ultratumba.[] NL Gana !B! de Bloqueo. NL [#e087a4]Obtén[] [#e087a4]una[] [#e087a4]Forma[] [#e087a4]Sombría.[]", + "UPGRADE_DESCRIPTION": "Etérea. [#e087a4]Ultratumba.[] NL Gana !B! de Bloqueo. NL [#e087a4]Obtén[] [#e087a4]una[] [#e087a4]Forma[] [#e087a4]Sombría+.[]" + }, + "hexamod:NightmareStrike": { + "NAME": "Golpe de Pesadilla", + "DESCRIPTION": "Etérea. [#e087a4]Ultratumba.[] NL Haz !D! de daño. NL [#e087a4]Obtén[] [#e087a4]un[] [#e087a4]Golpe[] [#e087a4]Sombrío.[]", + "UPGRADE_DESCRIPTION": "Etérea. [#e087a4]Ultratumba.[] NL Haz !D! de daño. NL [#e087a4]Obtén[] [#e087a4]un[] [#e087a4]Golpe[] [#e087a4]Sombrío+.[]" + }, + "hexamod:Poltergeist": { + "NAME": "Poltergeist", + "DESCRIPTION": "Siempre que juegues una carta Etérea, un enemigo aleatorio pierde !M! PV." + }, + "hexamod:PhantomCloak": { + "NAME": "Capa Fantasmal", + "DESCRIPTION": "Etérea. NL Gana !M! de Destreza y pierde 1 de Fuerza." + }, + "hexamod:PhantomFireball": { + "NAME": "Bola de Fuego Fantasmal", + "DESCRIPTION": "Haz !D! de daño. NL Si el enemigo tiene hexamod:QuemarAlma, detónalo.", + "UPGRADE_DESCRIPTION": "Haz !D! de daño. NL Si el enemigo tiene hexamod:QuemarAlma, detona todos menos 1." + }, + "hexamod:PowerFromBeyond": { + "NAME": "Poder del Más Allá", + "DESCRIPTION": "Etérea. [#e087a4]Ultratumba.[] NL Gana [E] el siguiente turno. NL ", + "UPGRADE_DESCRIPTION": "Etérea. [#e087a4]Ultratumba.[] NL Gana [E] [E] el siguiente turno. NL ", + "EXTENDED_DESCRIPTION": ["Roba !M! cartas el próximo turno."] + }, + "hexamod:Premonition": { + "NAME": "Premonición", + "DESCRIPTION": "Elige un tipo de carta, juega una carta aleatoria de ese tipo de tu mazo. NL Agota.", + "UPGRADE_DESCRIPTION": "Elige un tipo de carta, juega una carta aleatoria de ese tipo de tu mazo.", + "EXTENDED_DESCRIPTION": ["para jugar y Agotar."] + }, + "hexamod:RadiantFlame": { + "NAME": "Llama Radiante", + "DESCRIPTION": "Haz !D! de daño. NL Elimina el hexamod:QuemarAlma del objetivo para ganar !M! de hexamod:Intensidad." + }, + "hexamod:RainOfEmbers": { + "NAME": "Lluvia de Ascuas", + "DESCRIPTION": "Haz !D! de daño y aplica !M! de Débil X veces.", + "UPGRADE_DESCRIPTION": "Haz !D! de daño y aplica !M! de Débil X+1 veces." + }, + "hexamod:NightmareVision": { + "NAME": "Visión de Pesadilla", + "DESCRIPTION": "hexamod:Retroceder. NL expansioncontent:Exhuma una carta *Etérea. NL Agota.", + "UPGRADE_DESCRIPTION": "hexamod:Retroceder. NL expansioncontent:Exhuma !M! cartas *Etéreas. NL Agota.", + "EXTENDED_DESCRIPTION": [ + "Elige una carta Etérea para devolver a tu mano.", + "Elige ", + " cartas Etéreas para devolver a tu mano." + ] + }, + "hexamod:Incorporeal": { + "NAME": "Incorpóreo", + "DESCRIPTION": "hexamod:Retroceder. NL Pierde !M! PV. NL Gana 1 Intangible. NL Agota." + }, + "hexamod:Rewind": { + "NAME": "Rebobinar", + "DESCRIPTION": "hexamod:Retroceder. NL Recupera una carta de tu pila de descarte. NL Agota.", + "UPGRADE_DESCRIPTION": "hexamod:Retroceder. NL Recupera !M! cartas de tu pila de descarte. NL Agota." + }, + "hexamod:Sear": { + "NAME": "Quemar", + "DESCRIPTION": "Etérea. [#e087a4]Ultratumba. NL Haz !D! de daño. NL [#e087a4]Aplica[] !burny! [#e087a4]QuemarAlma.[]" + }, + "hexamod:SearingWound": { + "NAME": "Herida Abrasadora", + "DESCRIPTION": "Todos los enemigos pierden PV igual a su *QuemarAlma. NL Agota.", + "UPGRADE_DESCRIPTION": "Todos los enemigos pierden PV igual a su *QuemarAlma." + }, + "hexamod:ShadowGuise": { + "NAME": "Forma Sombría", + "DESCRIPTION": "Retiene. NL Gana !B! de Bloqueo. NL Agota." + }, + "hexamod:ShadowStrike": { + "NAME": "Golpe Sombrío", + "DESCRIPTION": "Retiene. NL Haz !D! de daño. NL Agota." + }, + + "hexamod:ShieldOfDarkness": { + "NAME": "Escudo de la Noche", + "DESCRIPTION": "Gana !B! de Bloqueo. NL Adivina !M!. NL Agota las cartas Etéreas descartadas." + }, + "hexamod:Kindle": { + "NAME": "Avivar", + "DESCRIPTION": "Si la llama fantasmal actual no está *Incendiada, hexamod:Incendiala.", + "UPGRADE_DESCRIPTION": "hexamod:Incendia la llama fantasmal actual." + }, + "hexamod:LivingBomb": { + "NAME": "Bomba Viva", + "DESCRIPTION": "Aplica !burny! hexamod:QuemarAlma. Al detonar, afecta a TODOS los enemigos." + }, + "hexamod:SpectersWail": { + "NAME": "Lamento del Espectro", + "DESCRIPTION": "Etérea. [#e087a4]Ultratumba.[] NL [#e087a4]Haz[] !D! [#e087a4]de[] [#e087a4]daño[] [#e087a4]a[] [#e087a4]TODOS[] [#e087a4]los[] [#e087a4]enemigos[] dos veces." + }, + "hexamod:BrightRitual": { + "NAME": "Ritual Radiante", + "DESCRIPTION": "Reinicia la Rueda. NL Gana [E] y roba 1 por cada llama fantasmal hexamod:Extinguida. NL Agota." + }, + "hexamod:NaughtySpirit": { + "NAME": "Espíritu Travieso", + "DESCRIPTION": "Aplica !burny! hexamod:QuemarAlma. NL Si la llama fantasmal actual está hexamod:Incendiada, regresa esta carta a tu mano y hexamod:Retrocede." + }, + "hexamod:StepThrough": { + "NAME": "Atravesar", + "DESCRIPTION": "Haz !D! de daño. NL Roba 1 carta por cada llama fantasmal *Incendiada." + }, + "hexamod:Strike": { + "NAME": "Golpe", + "DESCRIPTION": "Haz !D! de daño." + }, + "hexamod:StrikeFromBeyond": { + "NAME": "Golpe del Más Allá", + "DESCRIPTION": "Haz !D! de daño. NL Roba una carta Etérea de tu mazo.", + "EXTENDED_DESCRIPTION": ["Etérea", "Etérea. NL "] + }, + "hexamod:SuperheatedStrike": { + "NAME": "Golpe Abrasador", + "DESCRIPTION": "Etérea. NL Haz !D! de daño. NL Aplica !burny! hexamod:QuemarAlma. NL Si esta carta se *Agota, recibe !M! de daño." + }, + "hexamod:SwordOfDarkness": { + "NAME": "Espada de la Noche", + "DESCRIPTION": "Haz !D! de daño. NL Adivina !M!. NL Agota las cartas Etéreas descartadas." + }, + "hexamod:ThermalTransfer": { + "NAME": "Transferencia Térmica", + "DESCRIPTION": "Haz !D! de daño. NL Si el enemigo tiene *QuemarAlma, gana !B! de Bloqueo." + }, + "hexamod:TimeOfNeed": { + "NAME": "Hora Crítica", + "DESCRIPTION": "Retiene. NL Gana una carta de Poder aleatoria. Cuesta 1 menos hasta ser jugada. NL Agota." + }, + "hexamod:TimeWarp": { + "NAME": "Distorsión Temporal", + "DESCRIPTION": "Haz !D! de daño. NL Siempre que *Avances o *Retrocedas, regresa esta carta desde la pila de descarte." + }, + "hexamod:FlareFlick": { + "NAME": "Chispa Flamígera", + "DESCRIPTION": "Haz !D! de daño. NL hexamod:Incendia la llama actual y hexamod:avanza.", + "UPGRADE_DESCRIPTION": "Haz !D! de daño. NL hexamod:Incendia la llama actual. NL Elige entre hexamod:Retroceder o hexamod:Avanzar.", + "EXTENDED_DESCRIPTION": ["hexamod:Avanzar.", "hexamod:Retroceder.", "No hacer nada."] + }, + "hexamod:TurnItUp": { + "NAME": "Sube la Intensidad", + "DESCRIPTION": "Gana !M! de hexamod:Intensidad temporal. NL Gana !M! de Fuerza temporal. NL Gana !M! de Destreza temporal.", + "UPGRADE_DESCRIPTION": "Retiene. NL Gana !M! de hexamod:Intensidad temporal. NL Gana !M! de Fuerza temporal. NL Gana !M! de Destreza temporal." + }, + "hexamod:UnleashSpirits": { + "NAME": "Liberar Espíritus", + "DESCRIPTION": "Haz !D! de daño a un enemigo aleatorio. NL Repite por cada carta *Agotada en el turno anterior.", + "UPGRADE_DESCRIPTION": " NL (Golpea !M! vez/veces.)" + }, + "hexamod:UnlimitedPower": { + "NAME": "Poder Ilimitado", + "DESCRIPTION": "hexamod:Incendia todas las llamas fantasmales en orden. NL Agota." + }, + "hexamod:VolcanoVisage": { + "NAME": "Rostro Volcánico", + "DESCRIPTION": "Cada vez que *Incendies una llama fantasmal, aplica !M! hexamod:QuemarAlma a TODOS los enemigos." + }, + "hexamod:WildfireWeapon": { + "NAME": "Arma Incendiaria", + "DESCRIPTION": "Cuando un Ataque hace daño no bloqueado, aplica !M! hexamod:QuemarAlma." + }, + "hexamod:FirstSeal": { + "NAME": "Primer Sello", + "DESCRIPTION": "Etérea. hexamod:Sellar. NL Al final del combate, cura !M! PV.", + "UPGRADE_DESCRIPTION": "hexamod:Sellar. NL Al final del combate, cura !M! PV." + }, + "hexamod:SecondSeal": { + "NAME": "Segundo Sello", + "DESCRIPTION": "Etérea. hexamod:Sellar. NL Al final del combate, gana !M! de Oro adicional.", + "UPGRADE_DESCRIPTION": "hexamod:Sellar. NL Al final del combate, gana !M! de Oro adicional." + }, + "hexamod:ThirdSeal": { + "NAME": "Tercer Sello", + "DESCRIPTION": "Etérea. hexamod:Sellar. NL Al final del combate, gana una recompensa de carta adicional.", + "UPGRADE_DESCRIPTION": "hexamod:Sellar. NL Al final del combate, gana una recompensa de carta adicional." + }, + "hexamod:FourthSeal": { + "NAME": "Cuarto Sello", + "DESCRIPTION": "Etérea. hexamod:Sellar. NL Al final del combate, gana una Poción adicional.", + "UPGRADE_DESCRIPTION": "hexamod:Sellar. NL Al final del combate, gana una Poción adicional." + }, + "hexamod:FifthSeal": { + "NAME": "Quinto Sello", + "DESCRIPTION": "Etérea. hexamod:Sellar. NL Al final del combate, aumenta tu PV Máximo en !M! .", + "UPGRADE_DESCRIPTION": "hexamod:Sellar. NL Al final del combate, aumenta tu PV Máximo en !M! ." + }, + "hexamod:SixthSeal": { + "NAME": "Sexto Sello", + "DESCRIPTION": "Etérea. hexamod:Sellar. NL Al final del combate, mejora una carta aleatoria por cada 13 sin mejorar en el mazo.", + "UPGRADE_DESCRIPTION": "hexamod:Sellar. NL Al final del combate, mejora una carta aleatoria por cada 13 sin mejorar en el mazo.", + "EXTENDED_DESCRIPTION": [ + "( Mejora ", + " carta. ) NL ", + " cartas. ) NL " + ] + }, + "hexamod:LingeringShades": { + "NAME": "Sombras Persistentes", + "DESCRIPTION": "hexamod:Retroceder. NL Aplica !burny! hexamod:QuemarAlma. Devuelve todas las cartas Etéreas de tu pila de descarte a tu mano." + }, + "hexamod:EtherStep": { + "NAME": "Paso Etéreo", + "DESCRIPTION": "Etérea. [#e087a4]Ultratumba.[] NL Agota 1 carta. NL Roba !M! carta(s). NL ", + "UPGRADE_DESCRIPTION": "Etérea. [#e087a4]Ultratumba.[] NL Agota 1 carta. NL Roba !M! carta(s). NL ", + "EXTENDED_DESCRIPTION": [ + "Haz !D! de daño." + ] + }, + "hexamod:OpposingAction": { + "NAME": "Acción Opuesta", + "DESCRIPTION": "hexamod:Retroceder. NL Gana [E] [E]. NL Agota.", + "UPGRADE_DESCRIPTION": "hexamod:Retroceder. NL Gana [E] [E] [E]. NL Agota." + }, + "hexamod:SeventhEye": { + "NAME": "Séptimo Ojo", + "DESCRIPTION": "Busca una carta de tu mazo. NL Cambia a una llama fantasmal aleatoria. NL Agota.", + "UPGRADE_DESCRIPTION": "Busca una carta de tu mazo. NL Cambia a una llama fantasmal aleatoria. NL Agota." + }, + "hexamod:FlameDevourer": { + "NAME": "Devorallamas", + "DESCRIPTION": "Si la llama anterior está *Incendiada, hexamod:Retrocede y gana !B! de Bloqueo." + }, + "hexamod:SpectralGrace": { + "NAME": "Gracia Espectral", + "DESCRIPTION": "Descarta !M! cartas. NL Haz !D! de daño.", + "UPGRADE_DESCRIPTION": "Descarta !M! cartas. NL Haz !D! de daño." + }, + "hexamod:SoulSteal": { + "NAME": "Living Bomb", + "DESCRIPTION": "Apply !burny! hexamod:Soulburn. When it detonates, it affects ALL enemies." + }, + "hexamod:ApocalypticArmor": { + "NAME": "Doomsday", + "DESCRIPTION": "The next time all !M! Ghostflames are *Ignited, take an extra turn.", + "UPGRADE_DESCRIPTION": "The next time at least !M! Ghostflames are *Ignited, take an extra turn." + }, + "hexamod:RetreatToShadows": { + "NAME": "Incorporeal", + "DESCRIPTION": "hexamod:Retract. NL Lose !M! HP. NL Gain 1 Intangible. NL Exhaust." + }, + "hexamod:SpectralSpark": { + "NAME": "Naughty Spirit", + "DESCRIPTION": "Apply !burny! hexamod:Soulburn. NL If the current Ghostflame is hexamod:Ignited, return this card to your hand. hexamod:Retract." + }, + "hexamod:Toasty": { + "NAME": "Flare Flick", + "DESCRIPTION": "Deal !D! damage. NL hexamod:Ignite the current Ghostflame and hexamod:Advance.", + "UPGRADE_DESCRIPTION": "Deal !D! damage. NL hexamod:Ignite the current Ghostflame. NL Choose to hexamod:Retract or hexamod:Advance." + }, + "hexamod:ParanormalForm": { + "NAME": "Poltergeist", + "DESCRIPTION": "Whenever you play an Ethereal card, a random enemy loses !M! HP." + }, + "hexamod:RecurringNightmare": { + "NAME": "Nightmare Vision", + "DESCRIPTION": "Hexamod:Retract. NL expansioncontent:Exhume an *Ethereal card. NL Exhaust.", + "UPGRADE_DESCRIPTION": "Hexamod:Retract. NL expansioncontent:Exhume !M! *Ethereal cards. NL Exhaust.", + "EXTENDED_DESCRIPTION": [ + "Choose an Ethereal card to return to your hand.", + "Choose ", + " Ethereal cards to return to your hand." + ] + }, + "hexamod:Haunt": { + "NAME": "Haunted Hand", + "DESCRIPTION": "Ethereal. [#e087a4]Afterlife.[] NL Draw !M! card. NL ", + "UPGRADE_DESCRIPTION": "Ethereal. [#e087a4]Afterlife.[] NL Draw !M! cards. NL ", + "EXTENDED_DESCRIPTION": [ + "Draw cards until you draw a non-Ethereal card." + ] + }, + "hexamod:InspiringFlames": { + "NAME": "Stoke the Fire", + "DESCRIPTION": "Gain !B! Block. NL For each *Ignited Ghostflame, Upgrade a random card in your hand." + }, + "hexamod:SpectralAdrenaline": { + "NAME": "Bright Ritual", + "DESCRIPTION": "Gain [E] and draw 1 card for each *Ignited Ghostflame, then hexamod:Extinguish them. NL Exhaust." + }, + "hexamod:GhostOfSpirePresent": { + "NAME": "Here and Now", + "DESCRIPTION": "At the start of your turn, gain [E] . NL At the end of your turn, hexamod:Extinguish the current Ghostflame." + }, + "hexamod:GhostOfSpirePast": { + "NAME": "Devil's Dance", + "DESCRIPTION": "Whenever you hexamod:Retract, draw a card.", + "UPGRADE_DESCRIPTION": "Innate. NL The first time you *Retract each turn, gain [E] and draw 1 card. NL hexamod:Retract." + }, + "hexamod:GhostOfSpireFuture": { + "NAME": "Into Shadow", + "DESCRIPTION": "Ethereal. NL Whenever you hexamod:Retract, choose a card in your hand to play and Exhaust.", + "UPGRADE_DESCRIPTION": "Whenever you hexamod:Retract, choose a card in your hand to play and Exhaust.", + "EXTENDED_DESCRIPTION": [ + "play and Exhaust." + ] + }, + "hexamod:HexaLevel": { + "NAME": "Forma Infernal", + "DESCRIPTION": "Al comienzo de tu turno, gana !M! de hexamod:Intensidad.", + "UPGRADE_DESCRIPTION": "Gana !M! de hexamod:Intensidad. NL Al comienzo de tu turno, gana !M! de hexamod:Intensidad." + }, + "hexamod:SkipABeat": { + "NAME": "Kindle", + "DESCRIPTION": "If the current Ghostflame is not *Ignited, hexamod:Ignite it.", + "UPGRADE_DESCRIPTION": "hexamod:Ignite the current Ghostflame." + }, + "hexamod:FlameSwitch": { + "NAME": "Bad Omen", + "DESCRIPTION": "Choose a Ghostflame type to change the current one into. NL Exhaust.", + "UPGRADE_DESCRIPTION": "Retain. NL Choose a Ghostflame type to change the current one into. NL Exhaust.", + "EXTENDED_DESCRIPTION": [ + "Replace the current Ghostflame with a hexamod:Bolstering Ghostflame", + "Replace the current Ghostflame with a hexamod:Crushing Ghostflame", + "Replace the current Ghostflame with a hexamod:Searing Ghostflame", + "Don't replace." + ] + } +} + diff --git a/src/main/resources/hexamodResources/localization/spa/CharacterStrings.json b/src/main/resources/hexamodResources/localization/spa/CharacterStrings.json new file mode 100644 index 000000000..74cf6fe62 --- /dev/null +++ b/src/main/resources/hexamodResources/localization/spa/CharacterStrings.json @@ -0,0 +1,13 @@ +{ + "hexamod:theHexaghost": { + "NAMES": [ + "El Hexafantasma", + "el Hexafantasma" + ], + "TEXT": [ + "Un espíritu maldito de la Aguja. NL Condenado eternamente a protegerla.", + "NL Acumulas el ardiente odio de los muertos...", + "Al recorrer una calle sin iluminar, te topas con varias figuras encapuchadas en medio de un oscuro ritual. Al acercarte, se giran hacia ti al unísono con inquietante precisión. La más alta de ellas muestra colmillos afilados y extiende una larga mano pálida hacia ti. NL ~\"Únete~ ~a~ ~nosotros,~ ~alma~ ~fantasmal,~ ~y~ ~siente~ ~el~ ~abrazo~ ~ardiente~ ~de~ ~la~ ~Aguja.\"~" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/hexamodResources/localization/spa/EventStrings.json b/src/main/resources/hexamodResources/localization/spa/EventStrings.json new file mode 100644 index 000000000..a6eb74a6b --- /dev/null +++ b/src/main/resources/hexamodResources/localization/spa/EventStrings.json @@ -0,0 +1,94 @@ +{ + "hexamod:WanderingSpecter": { + "NAME": "Espectro Errante", + "DESCRIPTIONS": [ + "Esta zona de la Aguja parece un #pcementerio. Caminas con cuidado hasta que una extraña y tenue ~aparición~ se interpone. Extiende ambas manos, aparentemente ofreciendo algún tipo de #rtrato. NL NL Puedes notar que sostiene una preciosa #bReliquia en cada palma, pero no logras distinguir cuál es cuál... sin embargo, está claro que el #rprecio será alto.", + "Agradeces al espectro por el trato. El #bfantasma te lanza una última mirada fatigada antes de continuar su ~interminable~ ~travesía.~ Tú también sigues adelante.", + "Tomas la caja blanca iridiscente, ¡y se @rompe@ en tus manos! Mientras recoges las almas en las que se fragmenta, una #pfragmento #pnegro emerge y se ~incrusta~ en tu cuerpo.", + "Tomas la extraña caja #ydorada y sientes una #poscuridad fluir dentro de ti al abrirla. ¡Dentro encuentras un arma útil!", + "Tomas la caja palpitante y constante que @LATe@ con fuerza, y sientes cómo se @FUNDE@ con tu brazo. Una nauseabunda #psensación te invade, pero también te sientes más fuerte...", + "Tan pronto como tomas el artefacto de la figura, la #poscuridad envuelve la sala. El espectro te habla una vez más, sus palabras resuenan en tu mente sin haber sido pronunciadas. NL NL #p'Una #pdecisión #psabia. #p¿Qué #pme #pdices #psi #pte #poffrezco #potro #ptrato, #pamigo? #pToma #ptodos #plos #pque #pquieras...'", + "Sabes que los tratos de esta #paparición tienen un precio demasiado alto. Debes hacer algo, y ¡qué suerte! ¡Junto a la pared hay una #bVela #bAntimaldiciones! NL NL La tomas rápidamente, te #rquemas #rligeramente, y la arrojas al espectro, que se disipa en un #bresplandor #bspectral. NL NL Ya no ofrecerá más tratos.", + "Sabes que los tratos de esta #paparición tienen un precio demasiado alto. Por suerte, llevas contigo una #bVela #bAntimaldiciones. NL NL La arrojas al espectro, que se desvanece en un #bresplandor #bespectral. NL NL Ya no ofrecerá más tratos." + ], + "OPTIONS": [ + "[Caja Izquierda] #gObtén #gMuñeco #gde #gDu-Vu o #gAmuleto #gPiedraoscura. #rDos #rMaldición - #rEmbrujado.", + "[Buscar Más]", + "[Caja Derecha] #gObtén #gLlave #gMaldita o #gCampana #gde #gInvocación. #rMaldición #rExtra.", + "[Ahuyentar] #gObtén una #bVela #bNegra. #rPierde #r5 #rPV.", + "[Ahuyentar] Marcharte.", + "[Intercambiar por Poder] #gObtén una carta #yRara #galeatoria. #rTe vuelves #rMaldito - #rAleatorio.", + "[Intercambiar por Vida] #gObtén #g5 #gPV #gMáximos. #rTe vuelves #rMaldito - #rAleatorio.", + "[Intercambiar por Almas] #gObtén #g100 #gAlmas. #rTe vuelves #rMaldito - #rAleatorio.", + "[Bloqueado] Intercambio Completado.", + "[Marcharte]" + ] + }, + "hexamod:SealChamber": { + "NAME": "Cámara de Sellos", + "DESCRIPTIONS": [ + "Una estructura imponente se alza frente a ti. La mayoría evitaría acercarse, pero tú conoces su propósito... y sabes que puede ser de gran utilidad. NL Entras en la cámara y te preparas para hacer un #rsacrificio...", + "Entregando un fragmento de tu propia alma, obtienes el sello: un paso más hacia tu poder definitivo.", + "Tras reflexionar, decides no realizar el sacrificio. Necesitarás todas tus fuerzas para completar tu travesía.", + "Este Sello será de gran utilidad en las batallas venideras." + ], + "OPTIONS": [ + "[Ofrecer] #rPierde ", + " PV. #gObtén el #gPrimer #gSello.", + " #yAlmas. #gObtén el #gSegundo #gSello.", + ". #gObtén el #gTercer #gSello.", + ". #gObtén el #gCuarto #gSello.", + "[Bloqueado] Requiere más Oro.", + "[Bloqueado] Requiere una Carta Común.", + "[Bloqueado] Requiere una Poción.", + "[Marcharte]", + "[Bloqueado] Ya ofreciste algo.", + ". #gObtén el #gQuinto #gSello.", + "[Bloqueado] Requiere una Carta Mejorada.", + " PV Máx. #gObtén el #gSexto #gSello.", + "[Bloqueado] Requiere 2 PV Máx." + ] + }, + "hexamod:HexaFalling": { + "NAME": "Caída Fantasmal", + "DESCRIPTIONS": [ + "Tú, libre de las débiles leyes de la gravedad, ~flotas~ sobre el abismo sin sufrir daño.", + " NL O simplemente flotas a voluntad." + ], + "OPTIONS": [ + "[Flotar] #gNo pierdes #gnada...", + "[Marcharte]" + ] + }, + "hexamod:CouncilOfGhosts": { + "NAME": "Consejo de Fantasmas", + "DESCRIPTIONS": [ + "Mientras continúas tu descenso, #phumo #pnegro #pdenso comienza a brotar del suelo y las paredes a tu alrededor, tomando forma en tres figuras enmascaradas que comienzan a hablar. NL NL ~\"Este~ ~está~ ~#rcondenado...\"~ NL \"Entendemos tu carga, #pcondenado... ¿Te gustaría conocer nuestros #y~secretos~?\"", + "#y\"¡Excelente!\" NL Mientras la figura fantasmal habla, notas cómo su enorme boca se abre más y más. #p~Denso~ #p~humo~ #p~negro~ se vierte y envuelve la sala. No puedes ver ni respirar...", + "Aún envuelto en #phumo #pnegro, tu cuerpo se debilita, pero tu espíritu #parde con más fuerza. NL Comprendes cómo lo corpóreo y lo incorpóreo están conectados de formas que nunca habrías imaginado.", + "Dentro de la oscuridad, ves con ojos desprovistos de duda. Los espíritus te han mostrado cómo dominar tu forma y cruzar entre este mundo y el otro con facilidad.", + "\"Buena suerte, #pcondenado...\" NL ~\"Nos~ ~quedaremos~ ~a~ ~ayudar~ ~a~ ~otros...\"~ NL #r@\"¡JA@ #r¡JA@ #r¡JA@ #r¡JAJAJA!\"@ NL NL No estás del todo seguro de por qué el último se rió mientras el Consejo se desvanecía, pero estás agradecido de haber obtenido su conocimiento.", + "\"Qué decepción...\" NL ~\"Nunca~ ~escaparás~ ~de~ ~este~ ~lugar...\"~ NL #r@\"¡JA@ #r¡JA@ #r¡JA@ #r¡JAJAJA!\"@ NL NL Las figuras desaparecen, dejando solo la risa inquietante resonando en tus oídos." + ], + "OPTIONS": [ + "[Aceptar] #rPierde #r", + " #rPV #rMáx. Desbloquea opciones de Estudio y Aprendizaje.", + "[Estudiar] #rPierde #rtodos #rtus #rGolpes. #gObtén #g3 #gJusticias del #gConsejo.", + "[Aprender] #rPierde #rtodas #rtus #rDefensas. #gObtén ", + "[Completado]", + "[Marcharte]", + "[Bloqueado] Aún no puedes marcharte.", + " #gAparición." + ] + }, + "hexamod:BackToBasics": { + "NAME": "Volver a lo Básico", + "DESCRIPTIONS": [ + "El espíritu es la espada... y la experiencia, la piedra de afilar." + ], + "OPTIONS": [ + "[Nostalgia] #gAgrega #gEtérea a todos tus #gGolpes y #gDefensas.", + "[Bloqueado] Requiere un Golpe o Defensa." + ] + } +} diff --git a/src/main/resources/hexamodResources/localization/spa/KeywordStrings.json b/src/main/resources/hexamodResources/localization/spa/KeywordStrings.json new file mode 100644 index 000000000..e2795a58f --- /dev/null +++ b/src/main/resources/hexamodResources/localization/spa/KeywordStrings.json @@ -0,0 +1,140 @@ +[ + { + "PROPER_NAME": "Activo", + "NAMES": [ + "active", + "activo" + ], + "DESCRIPTION": "La llama fantasmal #yActiva puede ser #yIncendiada si se cumplen sus requisitos de Incendio." + }, + { + "PROPER_NAME": "Avanzar", + "NAMES": [ + "advance", + "advanced", + "advancing", + "avanzar", + "avanzado", + "avanzando", + "avanza", + "avanzarás", + "avanzas" + ], + "DESCRIPTION": "Avanza hacia la siguiente llama fantasmal. Al hacerlo, esta se #yApaga." + }, + { + "PROPER_NAME": "Retroceder", + "NAMES": [ + "retract", + "retracted", + "retracting", + "retroceder", + "retrocedido", + "retrocediendo", + "retrocede", + "retrocedas" + ], + "DESCRIPTION": "Retrocede a la llama fantasmal anterior. Al hacerlo, esta se #yApaga." + }, + { + "PROPER_NAME": "Intensidad", + "NAMES": [ + "intensity", + "intensidad" + ], + "DESCRIPTION": "La Intensidad incrementa el daño, el #yQuemarAlma y el #yBloqueo aplicados por las llamas fantasmales al ser #yIncendiada." + }, + { + "ID": "soulburn", + "PROPER_NAME": "QuemarAlma", + "NAMES": [ + "soulburn", + "soulburned", + "quemaralma", + "quemadoalma" + ], + "DESCRIPTION": "Después de #b3 turnos, un enemigo con QuemarAlma pierde PV y se elimina el efecto." + }, + { + "PROPER_NAME": "Extinguir", + "NAMES": [ + "extinguish", + "extinguished", + "extinguir", + "extinguido", + "extingue", + "extinguida" + ], + "DESCRIPTION": "Permite que una llama fantasmal pueda ser #yIncendiada nuevamente, reiniciando sus requisitos de ignición." + }, + { + "PROPER_NAME": "Incendiar", + "NAMES": [ + "ignite", + "ignited", + "force-ignite", + "incendiar", + "incendia", + "incendiada", + "incendiadas", + "incendiarse", + "forzar-incendio", + "incendio", + "incendiala", + "incendies", + ], + "DESCRIPTION": "Activa el efecto de ignición descrito en una llama fantasmal." + }, + { + "PROPER_NAME": "Sellar", + "NAMES": [ + "seal", + "sellar", + "sello" + ], + "DESCRIPTION": "Cuanto más juegas cartas de Sello, más probable es encontrar otras. Si se han jugado los #b6 Sellos durante un combate, obtén el #pSello #pRoto y elimina los #b6 Sellos del mazo." + }, + { + "ID": "afterlife", + "PROPER_NAME": "Ultratumba", + "NAMES": [ + "afterlife", + "ultratumba" + ], + "DESCRIPTION": "Este efecto púrpura también se activa cuando esta carta se #yAgota." + }, + { + "PROPER_NAME": "Aplastante", + "NAMES": [ + "crushing", + "aplastante" + ], + "DESCRIPTION": "#yLlama #yFantasmal. Se #yincendia al jugar #b2 #yHabilidades mientras estás sobre ella. #yIncendiar: Al #yIncendiarse, inflige #b6 de daño a un enemigo aleatorio." + }, + { + "PROPER_NAME": "Fortalecedora", + "NAMES": [ + "bolstering", + "fortalecedora" + ], + "DESCRIPTION": "#yLlama #yFantasmal. Se #yIncendia al jugar un #yPoder mientras estás sobre ella. #yIncendio: Al #yIncendiarse, obtén #b4 de #yBloqueo y #b1 de #yFuerza." + }, + { + "ID": "plated", + "PROPER_NAME": "Armadura de Placas", + "NAMES": [ + "plated", + "placada", + "placas" + ], + "DESCRIPTION": "Al final de tu turno, obtén Bloqueo igual a tu cantidad de #yArmadura de #yPlacas. Recibir daño de un ataque sin bloquear reduce tu Armadura en #b1." + }, + { + "PROPER_NAME": "Abrasadora", + "NAMES": [ + "searing", + "abrasadora" + ], + "DESCRIPTION": "#yLlama #yFantasmal. #ySe enciende al jugar #b2 #yAtaques mientras estás sobre ella. #yIncendio: Al #yIncendiarse, aplica #b6 de #yQuemarAlma a un enemigo aleatorio, modificado dos veces por la #yIntensidad." + } +] diff --git a/src/main/resources/hexamodResources/localization/spa/MonsterStrings.json b/src/main/resources/hexamodResources/localization/spa/MonsterStrings.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/src/main/resources/hexamodResources/localization/spa/MonsterStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/hexamodResources/localization/spa/OrbStrings.json b/src/main/resources/hexamodResources/localization/spa/OrbStrings.json new file mode 100644 index 000000000..8ed59779c --- /dev/null +++ b/src/main/resources/hexamodResources/localization/spa/OrbStrings.json @@ -0,0 +1,64 @@ +{ + "hexamod:SearingGhostflame": { + "NAME": "Llama Fantasmal Abrasadora", + "DESCRIPTION": [ + "#yIncendiada [REMOVE_SPACE]. ", + "Se #yincendia cuando #b", + " #yAtaque es jugado.", + " #yAtaques son jugados.", + "Se #yincendia al jugar #b2 #yAtaques mientras estás sobre ella.", + " NL NL #yIncendiada [REMOVE_SPACE]: Aplica #b", + " #yQuemarAlma a un enemigo aleatorio.", + " NL NL Al final de tu turno, si está #yIncendiada [REMOVE_SPACE], #yAvanza a la siguiente llama fantasmal." + ] + }, + "hexamod:CrushingGhostflame": { + "NAME": "Llama Fantasmal Aplastante", + "DESCRIPTION": [ + "#yIncendiada [REMOVE_SPACE]. ", + "Se #yincendia al jugar #b", + " #yHabilidad.", + " #yHabilidades.", + "Se #yincendia al jugar #b2 #yHabilidades mientras estás sobre ella.", + " NL NL #yIncendiada [REMOVE_SPACE]: Inflige #b", + " de daño a un enemigo aleatorio.", + " NL NL Al final de tu turno, si está #yIncendiada [REMOVE_SPACE], #yAvanza a la siguiente llama fantasmal." + ] + }, + "hexamod:BolsteringGhostflame": { + "NAME": "Llama Fantasmal Fortalecedora", + "DESCRIPTION": [ + "#yIncendiada [REMOVE_SPACE]. ", + "Se #yincendia al jugar un #yPoder.", + "Se #yincendia al jugar un #yPoder mientras estás sobre ella.", + " NL NL #yIncendiada [REMOVE_SPACE]: Obtén #b", + " de #yBloqueo y #b1 de #yFuerza.", + " NL NL Al final de tu turno, si está #yIncendiada [REMOVE_SPACE], #yAvanza a la siguiente llama fantasmal." + ] + }, + "hexamod:InfernoGhostflame": { + "NAME": "Llama Fantasmal Infernal", + "DESCRIPTION": [ + "#yIncendiada [REMOVE_SPACE]. Se #yextingue al final de cualquier turno.", + "Se #yincendia al gastar [E] [E] [E] .", + "Se #yincendia al gastar [E] [E] .", + "Se #yincendia al gastar [E] .", + "Error. Por favor informa al desarrollador del mod: ", + "Se #yincendia al gastar [E] [E] [E] mientras estás sobre ella. Se #yextingue al final de cualquier turno.", + " NL NL #yIncendiada: Inflige #b", + " de daño a un enemigo aleatorio por cada llama fantasmal #yIncendiada [REMOVE_SPACE], despues #yextingue las demás. Si todas las llamas están #yIncendiadas [REMOVE_SPACE], obtén #b2 de #yIntensidad [REMOVE_SPACE].", + " NL NL Al final de tu turno, si está #yIncendiada [REMOVE_SPACE], #yAvanza a la siguiente llama fantasmal." + ] + }, + "hexamod:MayhemGhostflame": { + "NAME": "Llama Fantasmal del Caos", + "DESCRIPTION": [ + "#yIncendiada [REMOVE_SPACE]. ", + "Se #yincendia al terminar tu turno.", + "Se #yincendia al terminar tu turno mientras estás sobre ella.", + " NL NL #yIncendiada [REMOVE_SPACE]: #yAdivina #b", + " y juega la primera carta de tu pila de robo, modificada por la #yIntensidad [REMOVE_SPACE]. ", + " NL NL Al final de tu turno, si está #yIncendiada [REMOVE_SPACE], #yAvanza a la siguiente llama fantasmal." + ] + } +} diff --git a/src/main/resources/hexamodResources/localization/spa/PotionStrings.json b/src/main/resources/hexamodResources/localization/spa/PotionStrings.json new file mode 100644 index 000000000..061656551 --- /dev/null +++ b/src/main/resources/hexamodResources/localization/spa/PotionStrings.json @@ -0,0 +1,32 @@ +{ + "hexamod:SoulburnPotion": { + "NAME": "Molotov", + "DESCRIPTIONS": [ + "Aplica #b", + " de #yQuemarAlma [REMOVE_SPACE]." + ] + }, + "hexamod:DoubleChargePotion": { + "NAME": "Fluido Combustivo", + "DESCRIPTIONS": [ + "#yIncendia la llama fantasmal actual #b", + " veces." + ] + }, + "hexamod:EctoCoolerPotion": { + "NAME": "Ecto-Refrigerante", + "DESCRIPTIONS": [ + "Elige #b1 de #b3 cartas #yEtéreas aleatorias de cualquier clase. Cuesta #b0 este turno.", + "Elige #b1 de #b3 cartas #yEtéreas aleatorias de cualquier clase y obtén #b", + " copias. Cuestan #b0 este turno." + ] + }, + "hexamod:InfernoChargePotion": { + "NAME": "Poción de Infierno", + "DESCRIPTIONS": [ + "Los efectos de tus llamas fantasmales afectan a TODOS los enemigos en este combate.", + "Los efectos de tus llamas fantasmales afectan a TODOS los enemigos #b", + " veces en este combate." + ] + } +} diff --git a/src/main/resources/hexamodResources/localization/spa/PowerStrings.json b/src/main/resources/hexamodResources/localization/spa/PowerStrings.json new file mode 100644 index 000000000..b1a4cf5dc --- /dev/null +++ b/src/main/resources/hexamodResources/localization/spa/PowerStrings.json @@ -0,0 +1,241 @@ +{ + "hexamod:AgainPower": { + "NAME": "¡Otra vez!", + "DESCRIPTIONS": [ + "No #yAvanzas al final del siguiente turno.", + "No #yAvanzas al final de los próximos #b", + " turnos." + ] + }, + "hexamod:ApocalypticArmorPower": { + "NAME": "Juicio Final", + "DESCRIPTIONS": [ + "La próxima vez que #yIncendies #b", + " llamas fantasmales, obtén un turno adicional.", + "La próxima vez que #yIncendies al menos #b" + ] + }, + "hexamod:ApplyBurnAtTurnStartOncePower": { + "NAME": "Llama Retrasada", + "DESCRIPTIONS": [ + "Al inicio de tu próximo turno, aplica #b", + " de #yQuemarAlma a TODOS los enemigos." + ] + }, + "hexamod:BurnPerTurnPower": { + "NAME": "Metal Fundido", + "DESCRIPTIONS": [ + "Aplica #b", + " #yQuemarAlma después de que se detone #yQuemarAlma sobre este enemigo." + ] + }, + "hexamod:BurnPower": { + "NAME": "QuemarAlma", + "DESCRIPTIONS": [ + "En #b", + " turnos, pierde #b", + " turno, pierde #b", + " PV, luego se elimina el efecto de #yQuemarAlma." + ] + }, + "hexamod:BurnvenomPower": { + "NAME": "Arma Ígnea", + "DESCRIPTIONS": [ + "Cada vez que infliges daño de ataque sin bloquear, aplica #b", + " #yQuemarAlma [REMOVE_SPACE]." + ] + }, + "hexamod:CommonPostCombatPower": { + "NAME": "Recompensa Sellada: Carta", + "DESCRIPTIONS": [ + "Al final del combate, obtén #b", + " cartas comunes adicionales.", + " carta común adicional." + ] + }, + "hexamod:CrispyPower_new": { + "NAME": "Bien Tostado", + "DESCRIPTIONS": [ + "Cuando se detone #yQuemarAlma sobre un enemigo, aplica #b", + " de #yQuemarAlma adicional tras la detonación." + ] + }, + "hexamod:EnhancePower": { + "NAME": "Intensidad", + "DESCRIPTIONS": [ + "Aumenta el daño, #yQuemarAlma [REMOVE_SPACE], y el #yBloqueo aplicados por las llamas fantasmales al #yIncendiarse en #b", + " [REMOVE_SPACE].", + "Reduce el daño, #yQuemarAlma [REMOVE_SPACE], y el #yBloqueo aplicados por las llamas fantasmales al #yIncendiarse en #b", + "Tiene doble efecto con #yLlamas #yFantasmas #yAbrasadora." + ] + }, + "hexamod:EtherealRefundPower": { + "NAME": "Reembolso Etéreo", + "DESCRIPTIONS": [ + "Cuando juegues una carta #yEtérea este turno, gana ", + " ." + ] + }, + "hexamod:FuturePower": { + "NAME": "Hacia las Sombras", + "DESCRIPTIONS": [ + "Cada vez que #yRetrocede [REMOVE_SPACE], tu próxima carta #b", + " será gratuita y se #yAgota [REMOVE_SPACE].", + " cartas serán gratuitas y se #yAgotan [REMOVE_SPACE]." + ] + }, + "hexamod:FutureUpgradePower": { + "NAME": "Recompensa Sellada: Mejora", + "DESCRIPTIONS": [ + "Al final del combate, #yMejora #b", + " carta aleatoria en tu mazo.", + " cartas aleatorias en tu mazo." + ] + }, + "hexamod:StopFromAdvancingPower": { + "NAME": "Aquí y Ahora", + "DESCRIPTIONS": [ + "Al final de tu turno, #yExtingue la llama fantasmal actual." + ] + }, + "hexamod:GhostFlameBarrierPower": { + "NAME": "Barrera Fantasmal", + "DESCRIPTIONS": [ + "Cuando recibas un ataque este turno, aplica #b", + " de #yQuemarAlma al atacante." + ] + }, + "hexamod:GiftsFromBeyondPower": { + "NAME": "Cartas Regaladas", + "DESCRIPTIONS": [ + "Al inicio de tu turno, agrega #b", + " carta #yUltratumba aleatoria a tu mano.", + " cartas #yUltratumba aleatorias a tu mano." + ] + }, + "hexamod:GoldPostCombatPower": { + "NAME": "Recompensa Sellada: Oro", + "DESCRIPTIONS": [ + "La recompensa en oro de este combate se incrementa en #b", + " ." + ] + }, + "hexamod:HexalevelPower": { + "NAME": "Forma Infernal", + "DESCRIPTIONS": [ + "Al inicio de tu turno, gana #b", + " de #yIntensidad [REMOVE_SPACE]." + ] + }, + "hexamod:LoseEnhanceInTurnsPower": { + "NAME": "Calor Acumulado", + "DESCRIPTIONS": [ + "Al final de tu turno, pierde #b", + "En #b", + " turnos, pierde #b", + " de #yIntensidad [REMOVE_SPACE]." + ] + }, + "hexamod:ParanormalFormPower": { + "NAME": "Poltergeist", + "DESCRIPTIONS": [ + "Cada vez que juegues una carta #yEtérea, un enemigo aleatorio pierde #b", + " PV." + ] + }, + "hexamod:PastPower": { + "NAME": "Danza del Diablo", + "DESCRIPTIONS": [ + "Cada vez que #yRetrocedas, roba #b", + " carta.", + " cartas." + ] + }, + "hexamod:PotionPostCombatPower": { + "NAME": "Recompensa Sellada: Poción", + "DESCRIPTIONS": [ + "Al final del combate, obtén #b", + " pociones adicionales.", + " poción adicional." + ] + }, + "hexamod:RadiantPower": { + "NAME": "Llama Radiante", + "DESCRIPTIONS": [ + "Cada vez que #yIncendies una llama fantasmal, gana #b", + " de #yBloqueo [REMOVE_SPACE]." + ] + }, + "hexamod:SealPostCombatPower": { + "NAME": "Recompensa Sellada: Sello", + "DESCRIPTIONS": [ + "Al final del combate, obtén #b", + " cartas #ySello adicionales.", + " carta #ySello adicional." + ] + }, + "hexamod:TimeStopPower": { + "NAME": "Llegada del Destino", + "DESCRIPTIONS": [ + "Al final de tu turno, comienza inmediatamente otro turno.", + "Al final de tu turno, comienza inmediatamente otros #b", + " turnos." + ] + }, + "hexamod:VolcanoVisagePower": { + "NAME": "Visaje Volcánico", + "DESCRIPTIONS": [ + "Cada vez que #yIncendies una llama fantasmal, aplica #b", + " de #yQuemarAlma a todos los enemigos." + ] + }, + "hexamod:LivingBombPower": { + "NAME": "Bomba Viviente", + "DESCRIPTIONS": [ + "La próxima vez que se detone el #yQuemarAlma de esta criatura, afectará a TODOS los enemigos." + ] + }, + "hexamod:GainEnergyAtStartOfTurnPower": { + "NAME": "Energía Adicional", + "DESCRIPTIONS": [ + "Al inicio de tu turno, gana " + ] + }, + "hexamod:SoulburnOnExhaustPower": { + "NAME": "Infestación Ígnea", + "DESCRIPTIONS": [ + "Cada vez que #yAgotes una carta este turno, aplica #b", + " de #yQuemarAlma a este enemigo." + ] + }, + "hexamod:LoseIntensityPower": { + "NAME": "Pérdida de Intensidad", + "DESCRIPTIONS": [ + "Al final de este turno, pierde #b", + " de #yIntensidad [REMOVE_SPACE]." + ] + }, + "hexamod:MaxHPPostCombatPower": { + "NAME": "Recompensa Sellada: PV Máx.", + "DESCRIPTIONS": [ + "Al final del combate, gana #b", + " de PV Máx." + ] + }, + "hexamod:InfernoPotionPower": { + "NAME": "Quemadura Hexa", + "DESCRIPTIONS": [ + "Los efectos de tus llamas fantasmales afectan a TODOS los enemigos en este combate.", + "Los efectos de tus llamas fantasmales afectan a TODOS los enemigos #b", + " veces en este combate." + ] + }, + "hexamod:PlayCardAndExhaustPower": { + "NAME": "Cambio Sombrío", + "DESCRIPTIONS": [ + "Tu próxima carta es gratuita y luego se #yAgota [REMOVE_SPACE].", + "Tus próximas #b", + " cartas son gratuitas y luego se #yAgotan [REMOVE_SPACE]." + ] + } +} diff --git a/src/main/resources/hexamodResources/localization/spa/RelicStrings.json b/src/main/resources/hexamodResources/localization/spa/RelicStrings.json new file mode 100644 index 000000000..20bbf10b4 --- /dev/null +++ b/src/main/resources/hexamodResources/localization/spa/RelicStrings.json @@ -0,0 +1,104 @@ +{ + "hexamod:SpiritBrand": { + "NAME": "Marca Espiritual", + "FLAVOR": "Un protector encadenado.", + "DESCRIPTIONS": [ + "La primera vez que #yIncendies una llama fantasmal cada turno, gana #b4 de #yBloqueo [REMOVE_SPACE]." + ] + }, + "hexamod:TheBrokenSeal": { + "NAME": "El Sello Roto", + "FLAVOR": "Poder ilimitado, desenfrenado e insaciable.", + "DESCRIPTIONS": [ + "Al obtenerlo, aumenta tu PV Máx. en #b10 [REMOVE_SPACE], luego cura todo tu PV. Comienza cada combate con #b2 de #yFuerza [REMOVE_SPACE], #b2 de #yDestreza [REMOVE_SPACE] y #b2 de #yIntensidad [REMOVE_SPACE]. No puedes volver a recibir #pEl #pSello #pRoto ni otros sellos." + ] + }, + "hexamod:UnbrokenSoul": { + "NAME": "Marca del Éter", + "FLAVOR": "Veamos si podemos hacerlo... mejor.", + "DESCRIPTIONS": [ + "Reemplaza ", + " [REMOVE_SPACE].[] NL Cada vez que #yIncendies una llama fantasmal, gana #b4 de #yBloqueo [REMOVE_SPACE]." + ] + }, + "hexamod:IceCube": { + "NAME": "Amuleto Helado de Xanatos", + "FLAVOR": "Siento... frío.", + "DESCRIPTIONS": [ + "Gana [E] al inicio de tu turno. Comienza cada combate con #b1 menos de #yIntensidad [REMOVE_SPACE], y no recibes #yIntensidad de la #yLlama #yFantasmal #yInfernal [REMOVE_SPACE]." + ] + }, + "hexamod:SoulStone": { + "NAME": "Piedra de Almas", + "FLAVOR": "¡Un alma animaría esto!", + "DESCRIPTIONS": [ + "Cada vez que #yAgotes #b3 cartas, #yIncendia la llama fantasmal actual." + ] + }, + "hexamod:RecyclingMachine": { + "NAME": "Recicladora", + "FLAVOR": "Algún día, también será reciclada.", + "DESCRIPTIONS": [ + "La primera vez que se #yAgote una carta #yEtérea que no sea Estado ni Maldición en cada combate, añade una copia a tu mano que cuesta #b0 hasta ser jugada." + ] + }, + "hexamod:MatchstickCase": { + "NAME": "Cerillo Astuto de Teakwood", + "FLAVOR": "¡Enciende sobre cualquier superficie!", + "DESCRIPTIONS": [ + "La primera vez que #yIncendies cada turno, puedes elegir entre #yAvanzar o #yRetroceder [REMOVE_SPACE]." + ] + }, + "hexamod:InflammatoryLetter": { + "NAME": "Frasco de TOBSCo", + "FLAVOR": "Un poco más de calor lo mejora todo.", + "DESCRIPTIONS": [ + "Comienza cada combate con #b1 de #yIntensidad [REMOVE_SPACE]." + ] + }, + "hexamod:SoulOfChaos": { + "NAME": "Alma del Caos", + "FLAVOR": "Caos manifestado.", + "DESCRIPTIONS": [ + "La segunda #yLlama #yFantasmal #yAbrasadora se convierte en una #yLlama #yFantasmal #ydel #yCaos [REMOVE_SPACE]. NL La #yLlama #ydel #yCaos se activa al terminar tu turno sobre ella. NL #yIgnición [REMOVE_SPACE]: #yAdivina #bn y luego juega la primera carta de tu pila de robo, #bn es modificado por la #yIntensidad [REMOVE_SPACE]." + ] + }, + "hexamod:JarOfFuel": { + "NAME": "Escudo de Olexa", + "FLAVOR": "Protección a la carta.", + "DESCRIPTIONS": [ + "Las cartas de #yPoder cuentan para el progreso de la #yLlama #yFantasmal #yAbrasadora y #yAplastante [REMOVE_SPACE]." + ] + }, + "hexamod:BolsterEngine": { + "NAME": "Vara de Fortalecimiento de Tricky", + "FLAVOR": "Respaldada por el estudio de mil libros. ¡El conocimiento es poder!", + "DESCRIPTIONS": [ + "La primera vez que juegas una carta de #yPoder en cada combate, gana #b6 de #yBloqueo y #b1 de #yFuerza [REMOVE_SPACE]." + ] + }, + "hexamod:CandleOfCauterizing": { + "NAME": "Vela Roja", + "FLAVOR": "El fuego QUEMA...", + "DESCRIPTIONS": [ + "Cada vez que apliques #yQuemarAlma [REMOVE_SPACE], aplica #b3 #yQuemarAlma adicionales [REMOVE_SPACE]." + ] + }, + "hexamod:Sixitude": { + "NAME": "Marca de Seis Puntas", + "FLAVOR": "¡Fuego, fuego, fuego, fuego, fuego, FUEGO!", + "DESCRIPTIONS": [ + "Cada vez que juegues #b6 cartas, obtén un #ygremlin:Eco de un #yGolpe básico [REMOVE_SPACE]. Cuesta #b0 [REMOVE_SPACE]." + ] + }, + "hexamod:Libra": { + "NAME": "Libra", + "FLAVOR": "Equilibrio en todas las cosas.", + "DESCRIPTIONS": [ + "Elige cualquier número de tus Golpes y Defensas para #yTransformar en el tipo opuesto.", + "La balanza de la justicia se inclina.", + "Elige cualquier número de cartas para Transformarlas en el tipo opuesto." + ] + } +} + diff --git a/src/main/resources/hexamodResources/localization/spa/RunModStrings.json b/src/main/resources/hexamodResources/localization/spa/RunModStrings.json new file mode 100644 index 000000000..f6539efb5 --- /dev/null +++ b/src/main/resources/hexamodResources/localization/spa/RunModStrings.json @@ -0,0 +1,6 @@ +{ + "Slimebound:AllSplit": { + "NAME": "Slimear la Aguja", + "DESCRIPTION": "Todos los enemigos se Dividen en dos enemigos tipo Slime." + } +} diff --git a/src/main/resources/hexamodResources/localization/spa/UIStrings.json b/src/main/resources/hexamodResources/localization/spa/UIStrings.json new file mode 100644 index 000000000..5575384d5 --- /dev/null +++ b/src/main/resources/hexamodResources/localization/spa/UIStrings.json @@ -0,0 +1,19 @@ +{ + "hexamod:SealCommonReward": { + "TEXT": [ + "Agrega una carta Común a tu mazo" + ] + }, + "hexamod:SealSealReward": { + "TEXT": [ + "Agrega un Sello a tu mazo", + "Elige una carta." + ] + }, + "hexamod:SealDescriptor": { + "TEXT": [ + "Sello", + "hexamod:Sello. NL " + ] + } +} diff --git a/src/main/resources/hexamodResources/localization/zhs/CardStrings.json b/src/main/resources/hexamodResources/localization/zhs/CardStrings.json index a54fa3fdb..2cd88f567 100644 --- a/src/main/resources/hexamodResources/localization/zhs/CardStrings.json +++ b/src/main/resources/hexamodResources/localization/zhs/CardStrings.json @@ -106,8 +106,7 @@ }, "hexamod:BrightRitual": { "NAME": "鲜焰仪式", - "DESCRIPTION": "切换至首枚鬼火。 NL hexamod:熄灭 hexamod:点燃 的鬼火, NL 每熄灭一枚, NL 获得 [E] 并抽一张牌 。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "切换至首枚鬼火。 NL hexamod:熄灭 hexamod:点燃 的鬼火, NL 每熄灭一枚, NL 获得 [E] 并抽一张牌 。 NL 消耗 。" + "DESCRIPTION": "切换至首枚鬼火。 NL hexamod:熄灭 hexamod:点燃 的鬼火, NL 每 hexamod:熄灭 1枚, NL 获得 [E] 并抽1张牌 。 NL 消耗 。" }, "hexamod:StepThrough": { "NAME": "焰影迷步", @@ -137,7 +136,7 @@ }, "hexamod:GhostShield": { "NAME": "幽灵护盾", - "DESCRIPTION": "虚无 。 [#e087a4]阴世。[] NL 获得 !M! 层 bronze:残影 。 NL ", + "DESCRIPTION": "虚无 。 [#e087a4]阴世。[] NL 获得 !M! 层 expansioncontent:残影 。 NL ", "EXTENDED_DESCRIPTION": [ "获得 !B! 点格挡。" ] @@ -291,7 +290,7 @@ }, "hexamod:NaughtySpirit": { "NAME": "淘气精灵", - "DESCRIPTION": "给予 !burny! 层 hexamod:灼魂 。 NL 若当前鬼火已 hexamod:点燃 , NL 本牌从弃牌堆返回手牌。 NL hexamod:回退 。 " + "DESCRIPTION": "给予 !burny! 层 hexamod:灼魂 。 NL 若当前鬼火已 hexamod:点燃 , NL 本牌从弃牌堆返回手牌并 hexamod:回退 。 " }, "hexamod:InstantInferno": { "NAME": "此即地狱", @@ -399,7 +398,7 @@ "NAME": "飘忽不定", "DESCRIPTION": "虚无 。 [#e087a4]阴世。[] NL 获得 1 点 敏捷 。 NL ", "EXTENDED_DESCRIPTION": [ - "获得 !M! 层多层护甲。" + "获得 !M! 多层护甲 。" ] }, "hexamod:Premonition": { @@ -445,8 +444,8 @@ }, "hexamod:OpposingAction": { "NAME": "反骨", - "DESCRIPTION": "hexamod:回退 。 NL 获得 [E] 。", - "UPGRADE_DESCRIPTION": "hexamod:回退 。 NL 获得 [E] [E] 。" + "DESCRIPTION": "hexamod:回退 。 NL 获得 [E] [E] 。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "hexamod:回退 。 NL 获得 [E] [E] [E] 。 NL 消耗 。" }, "hexamod:SeventhEye": { "NAME": "第七感", @@ -455,7 +454,7 @@ }, "hexamod:FlameDevourer": { "NAME": "噬火", - "DESCRIPTION": "hexamod:回退 , NL 若 *回退 至 hexamod:点燃 的鬼火, NL 获得 !B! 点 格挡 。" + "DESCRIPTION": "若上枚鬼火已 *点燃 , hexamod:回退 , NL 并获得 !B! 点 格挡 。" }, "hexamod:SpectralGrace": { "NAME": "幽雅", @@ -536,9 +535,9 @@ ] }, "hexamod:HexaLevel": { - "NAME": "Infernal Form", - "DESCRIPTION": "At the start of your turn, gain !M! hexamod:Intensity.", - "UPGRADE_DESCRIPTION": "Gain !M! hexamod:Intensity. NL At the start of your turn, gain !M! hexamod:Intensity." + "NAME": "地狱形态", + "DESCRIPTION": "回合开始时, NL 获得 !M! 点 hexamod:热烈 .", + "UPGRADE_DESCRIPTION": "获得 !M! 点 hexamod:热烈 。 NL 回合开始时, NL 获得 !M! 点 hexamod:热烈 。" }, "hexamod:SkipABeat": { "NAME": "Kindle", @@ -555,5 +554,11 @@ "Replace the current Ghostflame with a hexamod:Searing Ghostflame", "Don't replace." ] + }, + "hexamod:MatchstickFloat": { + "NAME": "Sneaky Teakwood Match", + "DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "UPGRADE_DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "EXTENDED_DESCRIPTION": ["hexamod:Advance.","hexamod:Retract.", "Do nothing."] } } diff --git a/src/main/resources/hexamodResources/localization/zhs/EventStrings.json b/src/main/resources/hexamodResources/localization/zhs/EventStrings.json index 036df96c4..3e05f8a68 100644 --- a/src/main/resources/hexamodResources/localization/zhs/EventStrings.json +++ b/src/main/resources/hexamodResources/localization/zhs/EventStrings.json @@ -8,14 +8,14 @@ "你接过一个 #y金光闪闪 的盒子,打开时感觉有一股 #p黑暗的力量 从身边传过。向其中定睛一看,是一件趁手的武器!", "你接过一个 @跃动@ 着的盒子,感觉它似乎要 @流入@ 你的手臂一般。一股 #p邪恶 的气息在身体中涌动,但是你感觉自己变强了……", "从对方手中上夺下遗物后, #p黑暗的力量 笼罩了整个房间。幽灵再一次对你说话,不流经你的双耳,而是直接渗透进你的脑海里。 NL NL #p“一个明智的选择。再来笔交易怎么样,我的朋友?这里的东西随便拿走……”", - "你发现这个 #p幽灵 卖的东西有点太贵了。得想办法解决它。巧合地是,墙上有个 #b蓝蜡烛 ! NL NL 你从墙上抢走蜡烛,对着 #r烧了自己 一会,接着把它丢向了那个鬼魂, #y幽灵 立刻化为了一团 #b诡异的烟雾 。 NL NL 它再也不能跟你交易了。", - "你发现这个 #p幽灵 卖的东西有点太贵了,得想办法解决它。很巧,你身上带着 #b蓝蜡烛 !你掏出蜡烛并把它丢向了那个鬼魂, #y幽灵 立刻化为了一团 #b诡异的烟雾 。 NL NL 它再也不能跟你交易了。" + "你发现这个 #p幽灵 卖的东西太贵了。得想办法解决它。巧合地是,墙上有个 #b黑蜡烛 ! NL NL 你从墙上抢走蜡烛,不小心 #r烧了一下自己 ,然后你把它丢向了那个鬼魂, #y幽灵 立刻化为了一团 #b诡异的烟雾 。 NL NL 它再也不能跟你交易了。", + "你发现这个 #p幽灵 卖的东西太贵了,得想办法解决它。很巧,你身上带着 #b黑蜡烛 !你掏出蜡烛并把它丢向了那个鬼魂, #y幽灵 立刻化为了一团 #b诡异的烟雾 。 NL NL 它再也不能跟你交易了。" ], "OPTIONS": [ "[左手] #g获得毒巫娃娃或黑石护符。 #r被诅咒2次-闹鬼。", "[再买点]", - "[右手] #g获得诅咒钥匙或召唤铃铛。 #r其负面效果翻倍。", - "[赶跑] #g获得蓝蜡烛。 #r失去5点生命。", + "[右手] #g获得恶咒钥匙或厉鬼铃铛。 ", + "[赶跑] #g获得黑蜡烛。 #r失去5点生命。", "[赶跑] 离开。", "[换取力量] #g获得一张随机稀有牌。 #r被诅咒-随机。", "[换取生命] #g获得5点最大生命。 #r被诅咒-随机。", @@ -35,9 +35,9 @@ "OPTIONS": [ "[献上] #r失去 ", " 点生命。 #g获得第一封印。", - " 金币。 #g获得第二封印。", + " 灵魂。 #g获得第二封印。", "。 #g获得第三封印。", - " 。 #g获得第四封印。", + "。 #g获得第四封印。", "[锁定] 需要更多金币。", "[锁定] 需要一张普通牌。", "[锁定] 需要一瓶药水。", @@ -45,7 +45,7 @@ "[锁定] 已经献祭。", "。 #g获得第五封印。", "[锁定] 需要一张已升级的牌。", - " 点最大生命。 #g获得第六封印。", + " 点最大生命。 #g获得第六封印。", "[锁定] 需要2点最大生命。" ] }, diff --git a/src/main/resources/hexamodResources/localization/zhs/RelicStrings.json b/src/main/resources/hexamodResources/localization/zhs/RelicStrings.json index af2528c1c..37dd2adb0 100644 --- a/src/main/resources/hexamodResources/localization/zhs/RelicStrings.json +++ b/src/main/resources/hexamodResources/localization/zhs/RelicStrings.json @@ -88,7 +88,7 @@ "NAME": "六点烙印", "FLAVOR": "点火,点火,点火,点火,点火,点 火!", "DESCRIPTIONS": [ - "每打出 #b6 张牌,随机造成 #b6 点伤害。" + "每打出 #b6 张牌,获得 1 张耗能为0的基础 #y打击 的 #ygremlin:回响 。" ] }, "hexamod:Libra": { diff --git a/src/main/resources/hexamodResources/localization/zht/CardStrings.json b/src/main/resources/hexamodResources/localization/zht/CardStrings.json index 166493405..07aa2dc24 100644 --- a/src/main/resources/hexamodResources/localization/zht/CardStrings.json +++ b/src/main/resources/hexamodResources/localization/zht/CardStrings.json @@ -9,12 +9,12 @@ }, "hexamod:Sear": { "NAME": "灼燒", - "DESCRIPTION": "虛無 。 hexamod:陰世 。 NL 給予 !burny! 層 hexamod:灼魂 。" + "DESCRIPTION": "虛無 。 [#e087a4]陰世。[] NL 造成 !D! 點傷害。 NL [#e087a4]給予[] !burny! [#e087a4]層灼魂。[]" }, "hexamod:Float": { "NAME": "浮動", "DESCRIPTION": "抽一張牌。 NL hexamod:步進 。", - "UPGRADE_DESCRIPTION": "抽一張牌。 NL 可選擇 hexamod:步進 、 hexamod:回退 或不動。", + "UPGRADE_DESCRIPTION": "抽一張牌。 NL 選擇 hexamod:步進 、 hexamod:回退 或不動。", "EXTENDED_DESCRIPTION": [" hexamod:步進 。"," hexamod:回退 。","不動。"] }, "hexamod:AdvancingGuard": { @@ -64,46 +64,49 @@ }, "hexamod:DevilsDance": { "NAME": "魔鬼之舞", - "DESCRIPTION": "每回合首次 hexamod:回退 時, NL 獲得 [E] 並抽一張牌。 NL hexamod:回退 。", + "DESCRIPTION": "hexamod:回退 時, NL 抽一張牌。", "UPGRADE_DESCRIPTION": "固有 。 NL 每回合首次 hexamod:回退 時, NL 獲得 [E] 並抽一張牌。 NL hexamod:回退 。" }, "hexamod:IntoShadow": { - "NAME": "疾進", - "DESCRIPTION": " hexamod:步進 時, NL 獲得 !M! 層 guardianmod:臨時 力量 。", - "UPGRADE_DESCRIPTION": "固有 。 NL hexamod:步進 時, NL 獲得 !M! 層 guardianmod:臨時 力量 。" + "NAME": "遁入暗影", + "DESCRIPTION": "虛無 。 NL hexamod:回退 後, NL 免費打出並 消耗 一張牌。", + "UPGRADE_DESCRIPTION": "hexamod:回退 後, NL 免費打出並 消耗 一張牌。", + "EXTENDED_DESCRIPTION": [ + "打出並消耗。" + ] }, "hexamod:HereAndNow": { "NAME": "此刻", - "DESCRIPTION": "回合開始時獲得 [E] ,結束時不再自動 hexamod:步進 。" + "DESCRIPTION": "回合開始時, NL 額外獲得 [E] 。 NL 回合結束時, NL hexamod:熄滅 當前鬼火。" }, "hexamod:HauntingEcho": { "NAME": "回聲縈繞", - "DESCRIPTION": "造成 !D! 點傷害。 NL 若當前鬼火已 hexamod:點燃 , NL 再 hexamod:點燃 它。", + "DESCRIPTION": "造成 !D! 點傷害。 NL 若當前鬼火已 hexamod:點燃 , NL 再將其 hexamod:點燃 。", "EXTENDED_DESCRIPTION": ["虛無","虛無。 NL "] }, "hexamod:NecessarySacrifice": { "NAME": "犧牲", - "DESCRIPTION": "消耗 一張手牌。 NL 若為 *攻擊 或 *技能 牌, NL 將其變為相反類型的牌。", - "UPGRADE_DESCRIPTION": "消耗 一張手牌。 NL 若為 *攻擊 或 *技能 牌, NL 將其變為相反類型的牌。 NL 其耗能減1。", + "DESCRIPTION": "選擇 消耗 兩張手牌, NL 若為 *攻擊 或 *技能 牌, NL 將其類型反轉。", + "UPGRADE_DESCRIPTION": "選擇 消耗 兩張手牌, NL 若為 *攻擊 或 *技能 牌, NL 將其類型反轉並 升級 。", "EXTENDED_DESCRIPTION": [ "消耗作為必要的犧牲。" ] }, "hexamod:TimeOfNeed": { "NAME": "久逢甘露", - "DESCRIPTION": "保留 。 NL 隨機獲得一張 *能力 牌。 NL 其耗能為0。 NL 消耗 。" + "DESCRIPTION": "保留 。 NL 隨機獲得一張 *能力 牌, NL 其耗能減1。 NL 消耗 。" }, "hexamod:SwordOfDarkness": { "NAME": "黑夜之劍", - "DESCRIPTION": "造成 !D! 點傷害。 NL 若當前鬼火未 hexamod:點燃 , NL 獲得 [E] 。" + "DESCRIPTION": "造成 !D! 點傷害。 NL 預見 !M! , NL 消耗 丟棄的 虛無 牌。" }, "hexamod:ShieldOfDarkness": { "NAME": "黑夜之盾", - "DESCRIPTION": "獲得 !B! 點 格擋 。 NL 若當前鬼火未 hexamod:點燃 , NL 獲得 [E] 。" + "DESCRIPTION": "獲得 !B! 點 格擋 。 NL 預見 !M! , NL 消耗 丟棄的 虛無 牌。" }, "hexamod:BrightRitual": { "NAME": "鮮焰儀式", - "DESCRIPTION": "hexamod:熄滅 hexamod:點燃 的鬼火。 NL 每熄滅一枚, NL 獲得 [E] 並抽一張牌 。 NL 消耗 。" + "DESCRIPTION": "切換至首枚鬼火。 NL hexamod:熄滅 hexamod:點燃 的鬼火, NL 每 hexamod:熄滅 1枚, NL 獲得 [E] 並抽1張牌 。 NL 消耗 。" }, "hexamod:StepThrough": { "NAME": "焰影迷步", @@ -115,28 +118,41 @@ }, "hexamod:SpectersWail": { "NAME": "亡靈哀號", - "DESCRIPTION": "虛無 。 hexamod:陰世 。 NL 對所有敵人造成 !D! 點傷害。" + "DESCRIPTION": "虛無 。 [#e087a4]陰世。[] NL [#e087a4]造成[] !D! [#e087a4]點群體傷害[] 兩次。" }, "hexamod:Hexaguard": { "NAME": "六邊防護", - "DESCRIPTION": "虛無 。 hexamod:陰世 。 NL 獲得 !B! 點 格擋 。 NL 抽一張牌。" + "DESCRIPTION": "虛無 。 [#e087a4]陰世。[] NL 抽 !M! 張牌。 NL ", + "EXTENDED_DESCRIPTION": [ + "獲得 !B! 點 格擋 。" + ] }, "hexamod:GhostLash": { - "NAME": "幽靈鞭擊", - "DESCRIPTION": "虛無 。 hexamod:陰世 。 NL 造成 !D! 點傷害。 NL 消耗 時獲得 !M! 層 活力 。" + "NAME": "幽靈甩擊", + "DESCRIPTION": "虛無 。 [#e087a4]陰世。[] NL [#e087a4]造成[] !D! [#e087a4]點傷害,[] NL 手中每有其他 虛無 牌, NL 額外造成 !M! 點。", + "EXTENDED_DESCRIPTION": [ + "" + ] }, "hexamod:GhostShield": { "NAME": "幽靈護盾", - "DESCRIPTION": "虛無 。 hexamod:陰世 。 NL 獲得 !B! 點 格擋 。 NL 消耗 時獲得 !M! 層 bronze:殘影 。" + "DESCRIPTION": "虛無 。 [#e087a4]陰世。[] NL 獲得 !M! 層 expansioncontent:殘影 。 NL ", + "EXTENDED_DESCRIPTION": [ + "獲得 !B! 點格擋。" + ] }, "hexamod:HauntedHand": { "NAME": "鬼手", - "DESCRIPTION": "虛無 。 hexamod:陰世 。 NL 抽 !M! 張牌。 NL 將手牌附加 虛無 。" + "DESCRIPTION": "虛無 。 [#e087a4]陰世。[] NL 抽 !M! 張牌。 NL ", + "UPGRADE_DESCRIPTION": "虛無 。 [#e087a4]陰世。[] NL 抽 !M! 張牌。 NL ", + "EXTENDED_DESCRIPTION": [ + "抽牌直至抽到非虛無牌。" + ] }, "hexamod:NightmareVision": { "NAME": "夢魘幻象", - "DESCRIPTION": "expansioncontent:發掘 !M! 張 虛無 牌。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "expansioncontent:發掘 !M! 張 虛無 牌。 NL 消耗 。", + "DESCRIPTION": "hexamod:回退 。 NL expansioncontent:發掘 !M! 張 虛無 牌。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "hexamod:回退 。 NL expansioncontent:發掘 !M! 張 虛無 牌。 NL 消耗 。", "EXTENDED_DESCRIPTION": [ "發掘一張虛無牌", "發掘", @@ -145,14 +161,18 @@ }, "hexamod:GiftsFromBeyond": { "NAME": "深處之禮", - "DESCRIPTION": "回合開始時, NL 隨機 expansioncontent:取回 一張 hexamod:陰世 牌。", + "DESCRIPTION": "回合開始時, NL 隨機獲得一張 hexamod:陰世 牌。", + "UPGRADE_DESCRIPTION": "回合開始時, NL 隨機獲得一張 hexamod:陰世 牌。", "EXTENDED_DESCRIPTION": [ "這些靈魂太強大了,無法直接召喚。" ] }, "hexamod:EtherealExpedition": { "NAME": "詭異探險", - "DESCRIPTION": "虛無 。 NL 隨機獲得一張 虛無 牌, NL 本回合其耗能為0。 NL 消耗 。" + "DESCRIPTION": "虛無 。 [#e087a4]陰世。[] NL 隨機獲得一張 hexamod:陰世 牌。 NL ", + "EXTENDED_DESCRIPTION": [ + "隨機洗入抽牌堆一 張 陰 世 牌 。" + ] }, "hexamod:PhantomCloak": { "NAME": "幽靈披風", @@ -160,39 +180,43 @@ }, "hexamod:Poltergeist": { "NAME": "鬼哭神嚎", - "DESCRIPTION": "打出 hexamod:陰世 牌時, NL 隨機造成 !M! 點傷害。" + "DESCRIPTION": "打出 虛無 牌時, NL 隨機敵人失去 !M! 點生命。", + "UPGRADE_DESCRIPTION": "打出 虛無 牌時, NL 隨機敵人失去 !M! 點生命。" }, "hexamod:UnleashSpirits": { "NAME": "釋魂", - "DESCRIPTION": "隨機造成 !D! 點傷害。 NL 消耗 堆每有 虛無 牌, NL 再造成一次。 NL 消耗 。", - "UPGRADE_DESCRIPTION": " NL (造成 !M! 次)" + "DESCRIPTION": "隨機造成 !D! 點傷害。 NL 上回合每 消耗 一張牌, NL 再造成一次。", + "UPGRADE_DESCRIPTION": " NL (共造成 !M! 次)" }, "hexamod:NightmareStrike": { "NAME": "夢魘打擊", - "DESCRIPTION": "虛無 。 NL 造成 !D! 點傷害。 NL 消耗 時獲得 *暗影打擊 。", - "UPGRADE_DESCRIPTION": "虛無 。 NL 造成 !D! 點傷害。 NL 消耗 時獲得 *暗影打擊 +。" + "DESCRIPTION": "虛無 。 [#e087a4]陰世。[] NL 造成 !D! 點傷害。 NL [#e087a4]獲得一張暗影打擊。[]", + "UPGRADE_DESCRIPTION": "虛無 。 [#e087a4]陰世。[] NL 造成 !D! 點傷害。 NL [#e087a4]獲得一張暗影打擊+。[]" }, "hexamod:NightmareGuise": { "NAME": "夢魘偽裝", - "DESCRIPTION": "虛無 。 NL 獲得 !B! 點 格擋 。 NL 消耗 時獲得 *暗影偽裝 。", - "UPGRADE_DESCRIPTION": "虛無 。 NL 獲得 !B! 點 格擋 。 NL 消耗 時獲得 *暗影偽裝 +。" + "DESCRIPTION": "虛無 。 [#e087a4]陰世。[] NL 獲得 !B! 點 格擋 。 NL [#e087a4]獲得一張暗影偽裝。[]", + "UPGRADE_DESCRIPTION": "虛無 。 [#e087a4]陰世。[] NL 獲得 !B! 點 格擋 。 NL [#e087a4]獲得一張暗影偽裝+。[]" }, "hexamod:ShadowStrike": { "NAME": "暗影打擊", - "DESCRIPTION": "虛無 。 NL 造成 !D! 點傷害兩次。 NL expansioncontent:取回 *夢魘打擊 。 NL 消耗 。" + "DESCRIPTION": "保留 。 NL 造成 !D! 點傷害。 NL 消耗 。" }, "hexamod:ShadowGuise": { "NAME": "暗影偽裝", - "DESCRIPTION": "虛無 。 NL 獲得 !B! 點 格擋 兩次 。 NL expansioncontent:取回 *夢魘偽裝 。 NL 消耗 。" + "DESCRIPTION": "保留 。 NL 獲得 !B! 點 格擋 。 NL 消耗 。" }, "hexamod:PowerFromBeyond": { "NAME": "深處之力", - "DESCRIPTION": "虛無 。 hexamod:陰世 。 NL 下回合, NL 獲得 [E] 並抽 !M! 張牌。", - "UPGRADE_DESCRIPTION": "虛無 。 hexamod:陰世 。 NL 下回合, NL 獲得 [E] 並抽 !M! 張牌。" + "DESCRIPTION": "虛無 。 [#e087a4]陰世。[] NL 下回合額外獲得 [E] 。 NL ", + "UPGRADE_DESCRIPTION": "虛無 。 [#e087a4]陰世。[] NL 下回合額外獲得 [E] [E] 。 NL ", + "EXTENDED_DESCRIPTION": [ + "下回合額外抽 !M! 張牌。" + ] }, "hexamod:BurningTouch": { "NAME": "灼燒之觸", - "DESCRIPTION": "給予 !burny! 層 hexamod:灼魂 。 NL 若目標已有 hexamod:灼魂 , NL 再給予一次。" + "DESCRIPTION": "給予 !burny! 層 hexamod:灼魂 。 NL 若目標已被 hexamod:灼魂 , NL 再給予一次。" }, "hexamod:Incineration": { "NAME": "焚化", @@ -209,36 +233,38 @@ }, "hexamod:ExtraCrispy": { "NAME": "脆烤", - "DESCRIPTION": "卡牌與鬼火額外給予 !M! 層 hexamod:灼魂 。", - "UPGRADE_DESCRIPTION": "固有 。 NL 卡牌與鬼火額外給予 !M! 層 hexamod:灼魂 。" + "DESCRIPTION": "引爆 hexamod:灼魂 後, NL 再次給予 !M! 層。" }, - "hexamod:GhostflameBarrier": { - "NAME": "亡魂屏障", - "DESCRIPTION": "獲得 !B! 點 格擋 。 NL 本回合被攻擊時, NL 給予對方 !burny! 層 hexamod:灼魂 。" + "hexamod:WhisperFromBeyond": { + "NAME": "深處之語", + "DESCRIPTION": "造成 !D! 點傷害。 NL 本回合每 消耗 一張牌, NL 給予目標 !burny! 層 hexamod:灼魂 。" }, "hexamod:FlareFlick": { - "NAME": "烘焙!", - "DESCRIPTION": "造成 !D! 點傷害。 NL 給予未被 格擋 傷害層 hexamod:灼魂 。" + "NAME": "擦燃", + "DESCRIPTION": "造成 !D! 點傷害。 NL hexamod:點燃 當前鬼火 並 hexamod:步進 。", + "UPGRADE_DESCRIPTION": "造成 !D! 點傷害。 NL hexamod:點燃 當前鬼火。 NL 選擇 hexamod:步進 、 hexamod:回退 或不動。", + "EXTENDED_DESCRIPTION": [" hexamod:步進 。"," hexamod:回退 。","不動。"] }, "hexamod:ThermalTransfer": { "NAME": "熱傳遞", - "DESCRIPTION": "造成 !D! 點傷害。 NL 若目標有 hexamod:灼魂 , NL 獲得 !B! 點 格擋 。" + "DESCRIPTION": "造成 !D! 點傷害。 NL 若目標被 hexamod:灼魂 , NL 獲得 !B! 點 格擋 。" }, "hexamod:HeatCrush": { - "NAME": "高熱碾壓", - "DESCRIPTION": "造成 !D! 點傷害。 NL 傷害受目標 hexamod:灼魂 加成。" + "NAME": "高熱撞擊", + "DESCRIPTION": "造成 !D! 點傷害, NL 傷害受目標 hexamod:灼魂 加成。" }, "hexamod:HeatShield": { "NAME": "高熱護盾", - "DESCRIPTION": "移除所有 hexamod:灼魂 , NL 獲得等量 格擋 。", + "DESCRIPTION": "獲得目標 hexamod:灼魂 點 格擋 , NL 延慢其 *灼魂 引爆一回合。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "獲得目標 hexamod:灼魂 點 格擋 , NL 延慢其 *灼魂 引爆一回合。", "EXTENDED_DESCRIPTION": [ - " NL (當前: !B! 點 格擋 。)" + " NL (獲得 !B! 點)" ] }, "hexamod:TurnItUp": { "NAME": "高熱激發", - "DESCRIPTION": "臨時獲得6層 hexamod:熱烈 。 NL 持續X+1回合。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "臨時獲得6層 hexamod:熱烈 。 NL 持續X+1回合。 NL 獲得 [E] 。 NL 消耗 。" + "DESCRIPTION": "獲得 !M! 層 guardianmod:臨時 hexamod:熱烈 。 NL 獲得 !M! 層 guardianmod:臨時 力量 。 NL 獲得 !M! 層 guardianmod:臨時 敏捷 。", + "UPGRADE_DESCRIPTION": "保留 。 NL 獲得 !M! 層 guardianmod:臨時 hexamod:熱烈 。 NL 獲得 !M! 層 guardianmod:臨時 力量 。 NL 獲得 !M! 層 guardianmod:臨時 敏捷 。" }, "hexamod:HeatMetal": { "NAME": "高熱金屬", @@ -246,37 +272,38 @@ }, "hexamod:RainOfEmbers": { "NAME": "焰燼雨", - "DESCRIPTION": "重復X次: NL 造成 !D! 點傷害。 NL 給予 !burny! 層 hexamod:灼魂 。", - "UPGRADE_DESCRIPTION": "重復X次: NL 造成 !D! 點傷害。 NL 給予 !burny! 層 hexamod:灼魂 。 NL 給予1層 虛弱 。" + "DESCRIPTION": "重復X次: NL 造成 !D! 點傷害。 NL 給予 !M! 層 虛弱 。", + "UPGRADE_DESCRIPTION": "重復X+1次: NL 造成 !D! 點傷害。 NL 給予 !M! 層 虛弱 。" }, "hexamod:VolcanoVisage": { "NAME": "火山面貌", - "DESCRIPTION": "hexamod:點燃 一枚鬼火時,給予 NL 所有敵人 !M! 層 hexamod:灼魂 。" + "DESCRIPTION": "hexamod:點燃 一枚鬼火時, NL 給予 !M! 層群體 hexamod:灼魂 。" }, "hexamod:FlamesFromBeyond": { "NAME": "深處之焰", - "DESCRIPTION": "虛無 。 hexamod:陰世 。 NL 給予所有敵人 !burny! 層 hexamod:灼魂 。" + "DESCRIPTION": "虛無 。 [#e087a4]陰世。[] NL [#e087a4]給予[] !burny! [#e087a4]層群體灼魂[] 兩次 。" }, "hexamod:PhantomFireball": { "NAME": "幻影火球", - "DESCRIPTION": "造成 !D! 點傷害。 NL 引爆目標的 hexamod:灼魂 。" + "DESCRIPTION": "造成 !D! 點傷害。 NL 引爆目標的 hexamod:灼魂 。", + "UPGRADE_DESCRIPTION": "造成 !D! 點傷害。 NL 引爆目標的 hexamod:灼魂 , NL 但留下1層。" }, "hexamod:NaughtySpirit": { - "NAME": "幽靈火花", - "DESCRIPTION": "若當前鬼火已 hexamod:點燃 , NL hexamod:熄滅 並獲得 !M! 點 hexamod:熱烈 。" + "NAME": "淘氣精靈", + "DESCRIPTION": "給予 !burny! 層 hexamod:灼魂 。 NL 若當前鬼火已 hexamod:點燃 , NL 本牌從棄牌堆返回手牌並 hexamod:回退 。 " }, "hexamod:InstantInferno": { "NAME": "此即地獄", - "DESCRIPTION": "保留 。 NL hexamod:點燃 hexamod:獄焱 鬼火 。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "保留 。 NL hexamod:點燃 當前與 hexamod:獄焱 鬼火 。 NL 消耗 。" + "DESCRIPTION": "保留 。 NL 給予 !burny! 層 hexamod:灼魂 。 NL 切換至並 hexamod:點燃 hexamod:獄焱 鬼火 。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "保留 。 NL 給予 !burny! 層 hexamod:灼魂 。 NL hexamod:點燃 hexamod:獄焱 鬼火 。 NL 消耗 。" }, "hexamod:ChargedBarrage": { "NAME": "蓄能焰幕", "DESCRIPTION": "給予 !burny! 層 hexamod:灼魂 。 NL 每有一枚 hexamod:點燃 的鬼火,再給予一次。" }, "hexamod:RadiantFlame": { - "NAME": "火焰輻射", - "DESCRIPTION": "hexamod:點燃 一枚鬼火時, NL 獲得 !M! 點 格擋 。" + "NAME": "輻能回導", + "DESCRIPTION": "造成 !D! 點傷害, NL 若目標被 hexamod:灼魂 , NL 移除以獲得 !M! 點 hexamod:熱烈 。" }, "hexamod:ApocalypseNow": { "NAME": "啟示錄", @@ -284,8 +311,8 @@ "UPGRADE_DESCRIPTION": "虛無 。 NL 獲得 [E] [E] [E] 。 NL hexamod:激活 獄焱鬼火。 NL 消耗 。" }, "hexamod:FleetingFlash": { - "NAME": "復燃", - "DESCRIPTION": "hexamod:點燃 當前鬼火, NL 然後 hexamod:熄滅 它。" + "NAME": "死灰復燃", + "DESCRIPTION": "hexamod:點燃 當前鬼火, NL 再將其 hexamod:熄滅 。" }, "hexamod:Incorporeal": { "NAME": "無形", @@ -308,8 +335,8 @@ }, "hexamod:ThirdSeal": { "NAME": "第三封印", - "DESCRIPTION": "虛無 hexamod:封印 。 NL 戰鬥結束時, NL 額外獲得一次卡牌獎勵。", - "UPGRADE_DESCRIPTION": "hexamod:封印 。 NL 戰鬥結束時, NL 額外獲得一次卡牌獎勵。" + "DESCRIPTION": "虛無 hexamod:封印 。 NL 戰鬥結束時, NL 額外獲得普通卡牌獎勵。", + "UPGRADE_DESCRIPTION": "hexamod:封印 。 NL 戰鬥結束時, NL 額外獲得普通卡牌獎勵。" }, "hexamod:FourthSeal": { "NAME": "第四封印", @@ -318,21 +345,30 @@ }, "hexamod:FifthSeal": { "NAME": "第六封印", - "DESCRIPTION": "虛無 hexamod:封印 。 NL 戰鬥結束時, NL 額外獲得一次 *封印 獎勵。", + "DESCRIPTION": "虛無 hexamod:封印 。 NL 戰鬥結束時, NL 獲得2點最大生命。", "UPGRADE_DESCRIPTION": "hexamod:封印 。 NL 戰鬥結束時, NL 額外獲得一次 *封印 獎勵。" }, "hexamod:SixthSeal": { "NAME": "第五封印", - "DESCRIPTION": "虛無 hexamod:封印 。 NL 戰鬥結束時, NL 隨機 升級 牌組中一張牌。", - "UPGRADE_DESCRIPTION": "hexamod:封印 。 NL 戰鬥結束時, NL 隨機 升級 牌組中一張牌。" + "DESCRIPTION": "虛無 hexamod:封印 。 NL 戰鬥結束時, NL 牌組每有 !burny! 張 未升級牌, NL 隨機 升級 一張。", + "UPGRADE_DESCRIPTION": "虛無 hexamod:封印 。 NL 戰鬥結束時, NL 牌組每有 !burny! 張 未升級牌, NL 隨機 升級 一張。", + "EXTENDED_DESCRIPTION": [ + " NL ( 升級 ", + " 張)", + " 張)" + ] + }, + "hexamod:LingeringShades": { + "NAME": "陰魂不散", + "DESCRIPTION": "hexamod:回退 。 NL 給予 !burny! 層 hexamod:灼魂 。 NL 返手棄牌堆所有 虛無 牌。" }, "hexamod:LivingBomb": { "NAME": "活體炸彈", - "DESCRIPTION": "給予 !burny! 層 hexamod:灼魂 。 NL 它引爆時對所有敵人造成傷害。" + "DESCRIPTION": "給予 !burny! 層 hexamod:灼魂 。 NL 其引爆時造成群體傷害。" }, "hexamod:CouncilsJustice": { "NAME": "議會裁決", - "DESCRIPTION": "造成 !D! 點傷害。 NL 每張 消耗 的 *靈體 提高傷害 !M! 點。 NL 消耗 。" + "DESCRIPTION": "造成 !D! 點傷害。 NL 每有一張 消耗 的 *靈體 , NL 額外造成 !M! 點。 NL 消耗 。" }, "hexamod:ForkedFlame": { "NAME": "歧岔火焰", @@ -341,27 +377,34 @@ }, "hexamod:BadOmen": { "NAME": "惡兆", - "DESCRIPTION": "給予 !burny! 層 hexamod:灼魂 , NL 其引爆所需回合加 !M! 。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "保留 。 NL 將當前鬼火替換為 hexamod:灼熱 、 hexamod:碾壓 或 hexamod:高熱 鬼火。 NL 消耗 。", + "DESCRIPTION": "選擇替換當前鬼火。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "保留 。 NL 選擇替換當前鬼火。 NL 消耗 。", "EXTENDED_DESCRIPTION": [ "將當前鬼火替換為 hexamod:高熱 鬼火。", "將當前鬼火替換為 hexamod:碾壓 鬼火。", - "將當前鬼火替換為 hexamod:灼熱 鬼火。" + "將當前鬼火替換為 hexamod:灼熱 鬼火。", + "不替換。" ] }, "hexamod:BurningQuestion": { - "NAME": "迫在眉睫", - "DESCRIPTION": "虛無 。 NL 獲得 !M! 點 力量 。 NL 消耗 時獲得2 點 敏捷 。" + "NAME": "當務之急", + "DESCRIPTION": "虛無 。 [#e087a4]陰世。[] NL 獲得 !M! 點 力量 。 NL ", + "UPGRADE_DESCRIPTION": "虛無 。 [#e087a4]陰世。[] NL 獲得 !M! 點 力量 。 NL ", + "EXTENDED_DESCRIPTION": [ + "獲得1點敏捷。" + ] }, - "hexamod:Floatwork": { "NAME": "飄忽不定", - "DESCRIPTION": "虛無 。 hexamod:陰世 。 NL 獲得 1 點 敏捷 。", - "UPGRADE_DESCRIPTION": "棄用" + "DESCRIPTION": "虛無 。 [#e087a4]陰世。[] NL 獲得 1 點 敏捷 。 NL ", + "EXTENDED_DESCRIPTION": [ + "獲得 !M! 層多層護甲。" + ] }, "hexamod:Premonition": { "NAME": "預兆", - "DESCRIPTION": "選擇一張手牌, NL 打出並 消耗 它。 NL 消耗 。", + "DESCRIPTION": "選擇一類牌,隨機打出抽牌堆一張該類牌。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "選擇一類牌,隨機打出抽牌堆一張該類牌。", "EXTENDED_DESCRIPTION": [ "選擇打出並消耗" ] @@ -372,7 +415,7 @@ }, "hexamod:StrikeFromBeyond": { "NAME": "深處打擊", - "DESCRIPTION": "造成 !D! 點傷害兩次。 NL 隨機 expansioncontent:取回 一張 hexamod:陰世 牌。", + "DESCRIPTION": "造成 !D! 點傷害。 NL 從抽牌堆抽一張 虛無 牌。", "EXTENDED_DESCRIPTION": [" 虛無 "," 虛無 。 NL "] }, "hexamod:WildfireWeapon": { @@ -390,5 +433,135 @@ "hexamod:Ghostwalk": { "NAME": "鬼步", "DESCRIPTION": "虛無 。 NL hexamod:回退 。 NL 本回合打出一張 虛無 牌時,獲得 [E] 。" + }, + "hexamod:EtherStep": { + "NAME": "太虛之躍", + "DESCRIPTION": "虛無 。 [#e087a4]陰世。[] NL 選擇 消耗 一張手牌。 NL 抽 !M! 張牌。 NL ", + "UPGRADE_DESCRIPTION": "虛無 。 [#e087a4]陰世。[] NL 選擇 消耗 一張手牌。 NL 抽 !M! 張牌。 NL ", + "EXTENDED_DESCRIPTION": [ + "造成 !D! 點傷害。" + ] + }, + "hexamod:OpposingAction": { + "NAME": "反骨", + "DESCRIPTION": "hexamod:回退 。 NL 獲得 [E] [E] 。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "hexamod:回退 。 NL 獲得 [E] [E] [E] 。 NL 消耗 。" + }, + "hexamod:SeventhEye": { + "NAME": "第七感", + "DESCRIPTION": "檢索 抽牌堆一張牌。 NL 隨機切換至一枚鬼火。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "檢索 抽牌堆一張牌。 NL 隨機切換至一枚鬼火。 NL 消耗 。" + }, + "hexamod:FlameDevourer": { + "NAME": "噬火", + "DESCRIPTION": "若當前鬼火已 *點燃 , hexamod:回退 , NL 並獲得 !B! 點 格擋 。" + }, + "hexamod:SpectralGrace": { + "NAME": "幽雅", + "DESCRIPTION": "丟棄兩張牌。 NL 造成 !D! 點傷害。", + "UPGRADE_DESCRIPTION": "丟棄兩張牌。 NL 造成 !D! 點傷害。" + }, + "Translator note Translator note Translator note Translator note Translator note Translator note Translator note Translator note ": { + "text": "text below here are used as an attempt to fix an issue that you cant open the game, you dont need to do anything about them.", + "text2": "I've already copied to all available languages, and if you are doing a new localization, just copy too." + }, + "hexamod:SoulSteal": { + "NAME": "Living Bomb", + "DESCRIPTION": "Apply !burny! hexamod:Soulburn. When it detonates, it affects ALL enemies." + }, + "hexamod:ApocalypticArmor": { + "NAME": "Doomsday", + "DESCRIPTION": "The next time all !M! Ghostflames are *Ignited, take an extra turn.", + "UPGRADE_DESCRIPTION": "The next time at least !M! Ghostflames are *Ignited, take an extra turn." + }, + "hexamod:RetreatToShadows": { + "NAME": "Incorporeal", + "DESCRIPTION": "hexamod:Retract. NL Lose !M! HP. NL Gain 1 Intangible. NL Exhaust." + }, + "hexamod:SpectralSpark": { + "NAME": "Naughty Spirit", + "DESCRIPTION": "Apply !burny! hexamod:Soulburn. NL If the current Ghostflame is hexamod:Ignited, return this card to your hand. hexamod:Retract." + }, + "hexamod:Toasty": { + "NAME": "Flare Flick", + "DESCRIPTION": "Deal !D! damage. NL hexamod:Ignite the current Ghostflame and hexamod:Advance.", + "UPGRADE_DESCRIPTION": "Deal !D! damage. NL hexamod:Ignite the current Ghostflame. NL Choose to hexamod:Retract or hexamod:Advance." + }, + "hexamod:ParanormalForm": { + "NAME": "Poltergeist", + "DESCRIPTION": "Whenever you play an Ethereal card, a random enemy loses !M! HP." + }, + "hexamod:RecurringNightmare": { + "NAME": "Nightmare Vision", + "DESCRIPTION": "Hexamod:Retract. NL expansioncontent:Exhume an *Ethereal card. NL Exhaust.", + "UPGRADE_DESCRIPTION": "Hexamod:Retract. NL expansioncontent:Exhume !M! *Ethereal cards. NL Exhaust.", + "EXTENDED_DESCRIPTION": [ + "Choose an Ethereal card to return to your hand.", + "Choose ", + " Ethereal cards to return to your hand." + ] + }, + "hexamod:Haunt": { + "NAME": "Haunted Hand", + "DESCRIPTION": "Ethereal. [#e087a4]Afterlife.[] NL Draw !M! card. NL ", + "UPGRADE_DESCRIPTION": "Ethereal. [#e087a4]Afterlife.[] NL Draw !M! cards. NL ", + "EXTENDED_DESCRIPTION": [ + "Draw cards until you draw a non-Ethereal card." + ] + }, + "hexamod:InspiringFlames": { + "NAME": "Stoke the Fire", + "DESCRIPTION": "Gain !B! Block. NL For each *Ignited Ghostflame, Upgrade a random card in your hand." + }, + "hexamod:SpectralAdrenaline": { + "NAME": "Bright Ritual", + "DESCRIPTION": "Gain [E] and draw 1 card for each *Ignited Ghostflame, then hexamod:Extinguish them. NL Exhaust." + }, + "hexamod:GhostOfSpirePresent": { + "NAME": "Here and Now", + "DESCRIPTION": "At the start of your turn, gain [E] . NL At the end of your turn, hexamod:Extinguish the current Ghostflame." + }, + "hexamod:GhostOfSpirePast": { + "NAME": "Devil's Dance", + "DESCRIPTION": "Whenever you hexamod:Retract, draw a card.", + "UPGRADE_DESCRIPTION": "Innate. NL The first time you *Retract each turn, gain [E] and draw 1 card. NL hexamod:Retract." + }, + "hexamod:GhostOfSpireFuture": { + "NAME": "Into Shadow", + "DESCRIPTION": "Ethereal. NL Whenever you hexamod:Retract, choose a card in your hand to play and Exhaust.", + "UPGRADE_DESCRIPTION": "Whenever you hexamod:Retract, choose a card in your hand to play and Exhaust.", + "EXTENDED_DESCRIPTION": [ + "play and Exhaust." + ] + }, + "hexamod:HexaLevel": { + "NAME": "Infernal Form", + "DESCRIPTION": "At the start of your turn, gain !M! hexamod:Intensity.", + "UPGRADE_DESCRIPTION": "Gain !M! hexamod:Intensity. NL At the start of your turn, gain !M! hexamod:Intensity." + }, + "hexamod:SkipABeat": { + "NAME": "Kindle", + "DESCRIPTION": "If the current Ghostflame is not *Ignited, hexamod:Ignite it.", + "UPGRADE_DESCRIPTION": "hexamod:Ignite the current Ghostflame." + }, + "hexamod:FlameSwitch": { + "NAME": "Bad Omen", + "DESCRIPTION": "Choose a Ghostflame type to change the current one into. NL Exhaust.", + "UPGRADE_DESCRIPTION": "Retain. NL Choose a Ghostflame type to change the current one into. NL Exhaust.", + "EXTENDED_DESCRIPTION": [ + "Replace the current Ghostflame with a hexamod:Bolstering Ghostflame", + "Replace the current Ghostflame with a hexamod:Crushing Ghostflame", + "Replace the current Ghostflame with a hexamod:Searing Ghostflame", + "Don't replace." + ] + }, + "hexamod:MatchstickFloat": { + "NAME": "Sneaky Teakwood Match", + "DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "UPGRADE_DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "EXTENDED_DESCRIPTION": ["hexamod:Advance.","hexamod:Retract.", "Do nothing."] } } + + + diff --git a/src/main/resources/hexamodResources/localization/zht/EventStrings.json b/src/main/resources/hexamodResources/localization/zht/EventStrings.json index 8a1247caf..d8b08ce1b 100644 --- a/src/main/resources/hexamodResources/localization/zht/EventStrings.json +++ b/src/main/resources/hexamodResources/localization/zht/EventStrings.json @@ -8,20 +8,19 @@ "你接過一個 #y金光閃閃 的盒子,打開時感覺有一股 #p黑暗的力量 從身邊傳過。向其中定睛一看,是一件趁手的武器!", "你接過一個 @躍動@ 著的盒子,感覺似乎要 @流入@ 你的手臂一般。一股 #p邪惡 的氣息在身體中湧動,但是你覺得你變強了……", "從神像上扣下遺物時, #p黑暗的力量 充滿了整個房間。幽靈再一次對你說話,一種你從未聽過的話語出現在你的腦海裡。 NL NL #p「一個明智的選擇。再來筆交易怎麼樣,我的朋友?這裡的東西隨便拿走……」", - "你發現這個 #p幽靈 賣的東西有點貴了。你得解決他。太巧了!在牆上!有個 #b藍蠟燭! NL NL 你從牆上搶走蠟燭並 #r開始詠唱 ,接著把它丟向了那個鬼魂, #y幽靈 立刻化為了一團 #b詭異的煙霧 。 NL NL 它再也不能跟你做交易了。", - "你發現這個 #p幽靈 賣的東西有點貴了。你得解決他。太巧了!在牆上!有 #b藍蠟燭!你身上帶著 #b藍蠟燭! 你掏出蠟燭並 #r開始詠唱 ,接著把它丟向了那個鬼魂, #y幽靈 立刻化為了一團 #b詭異的煙霧 。 NL NL 它再也不能跟你做交易了。" - ], + "你發現這個 #p幽靈 賣的東西太貴了。得想辦法解決它。巧合地是,墻上有個 #b黑蠟燭 ! NL NL 你從墻上搶走蠟燭,不小心 #r燒了一下自己 ,然後你把它丟向了那個鬼魂, #y幽靈 立刻化為了一團 #b詭異的煙霧 。 NL NL 它再也不能跟你交易了。", + "你發現這個 #p幽靈 賣的東西太貴了,得想辦法解決它。很巧,你身上帶著 #b黑蠟燭 !你掏出蠟燭並把它丟向了那個鬼魂, #y幽靈 立刻化為了一團 #b詭異的煙霧 。 NL NL 它再也不能跟你交易了。" ], "OPTIONS": [ - "[左手] #g獲得巫毒娃娃或黑石護符。 #r被詛咒2次-鬧鬼。", - "[再買點]", - "[右手] #g獲得詛咒鑰匙或召喚鈴鐺。 #r被詛咒2次-隨機。", - "[趕跑] #g獲得藍蠟燭。 #r失去5點生命。", + "[左手] #g獲得毒巫娃娃或黑石護符。 #r被詛咒2次-鬧鬼。", + "[再買點]", + "[右手] #g獲得惡咒鑰匙或厲鬼鈴鐺。 ", + "[趕跑] #g獲得黑蠟燭。 #r失去5點生命。", "[趕跑] 離開。", - "[換取力量] #g獲得一張隨機稀有牌。 #r被詛咒-隨機。", - "[換取生命] #g獲得5點最大生命。 #r被詛咒-隨機。", + "[換取力量] #g獲得一張隨機稀有牌。 #r被詛咒-隨機。", + "[換取生命] #g獲得5點最大生命。 #r被詛咒-隨機。", "[換取靈魂] #g獲得100靈魂。 #r被詛咒-隨機。", "[鎖定] 交易完成。", - "[離開]" + "[離開]" ] }, "hexamod:SealChamber": { diff --git a/src/main/resources/hexamodResources/localization/zht/RelicStrings.json b/src/main/resources/hexamodResources/localization/zht/RelicStrings.json index bae8651c0..8d1ea6b3b 100644 --- a/src/main/resources/hexamodResources/localization/zht/RelicStrings.json +++ b/src/main/resources/hexamodResources/localization/zht/RelicStrings.json @@ -88,7 +88,7 @@ "NAME": "六點烙印", "FLAVOR": "點火,點火,點火,點火,點火,點 火!", "DESCRIPTIONS": [ - "每當你打出 #b6 張牌,隨機造成 #b6 點傷害。" + "每當你打出 #b6 張牌,獲得 1 張耗能為0的基礎 #y打擊 的 #ygremlin:回響 。" ] } } diff --git a/src/main/resources/reskinContent/localization/eng/UIStrings.json b/src/main/resources/reskinContent/localization/eng/UIStrings.json index 3e5b1ee38..82e36b4b2 100644 --- a/src/main/resources/reskinContent/localization/eng/UIStrings.json +++ b/src/main/resources/reskinContent/localization/eng/UIStrings.json @@ -24,7 +24,9 @@ "Hexaghost Alternative Art Unlocked!", "Snecko Alternative Art Unlocked!", "Champ Alternative Art Unlocked!", - "Automaton Alternative Art Unlocked!" + "Automaton Alternative Art Unlocked!", + "Gremlins Alternative Art Unlocked!", + "Collector Alternative Art Unlocked!" ] }, @@ -80,6 +82,14 @@ "It's laundry day." ] }, + "reskinContent:ReSkinGremlin": { + "TEXT": [ + "Cats" + ], + "EXTRA_TEXT": [ + "Ummmm.... Meow?" + ] + }, "reskinContent:ReSkinBronze": { "TEXT": [ "Automaton", diff --git a/src/main/resources/reskinContent/localization/jpn/UIStrings.json b/src/main/resources/reskinContent/localization/jpn/UIStrings.json index 7247ed1b3..dd2398258 100644 --- a/src/main/resources/reskinContent/localization/jpn/UIStrings.json +++ b/src/main/resources/reskinContent/localization/jpn/UIStrings.json @@ -24,7 +24,9 @@ "ヘクサゴーストの代替アートをアンロック!", "スネッコの代替アートをアンロック!", "チャンプの代替アートをアンロック!", - "オートマトンの代替アートをアンロック!" + "オートマトンの代替アートをアンロック!", + "グレムリン の代替アートをアンロック!", + "コレクター の代替アートをアンロック!" ] }, @@ -80,6 +82,14 @@ "今日は洗濯日和だ。" ] }, + "reskinContent:ReSkinGremlin": { + "TEXT": [ + "ねこ" + ], + "EXTRA_TEXT": [ + "うーん.... にゃ?" + ] + }, "reskinContent:ReSkinBronze": { "TEXT": [ "オートマトン", @@ -90,7 +100,6 @@ "", "そうだ! 爪先からつま先までこれこそ「オートマトン」だ! NL これほど「オートマトン」らしい物は他に見た事が無い!", "[BOOT] Initializing... Core Systems Online - 異常ナシ NL [OBJECTIVE] BALANCE will be ENFORCED" - ] } } \ No newline at end of file diff --git a/src/main/resources/reskinContent/localization/kor/UIStrings.json b/src/main/resources/reskinContent/localization/kor/UIStrings.json index 5f3619eff..6f468c4b6 100644 --- a/src/main/resources/reskinContent/localization/kor/UIStrings.json +++ b/src/main/resources/reskinContent/localization/kor/UIStrings.json @@ -24,7 +24,10 @@ "육각령의 또 다른 아트가 해금되었습니다!", "스네코의 또 다른 아트가 해금되었습니다!", "투사의 또 다른 아트가 해금되었습니다!", - "청동 자동인형의 또 다른 아트가 해금되었습니다!" + "청동 자동인형의 또 다른 아트가 해금되었습니다!", + "청동 자동인형의 또 다른 아트가 해금되었습니다!", + "그렘린 군단의 또 다른 아트가 해금되었습니다!", + "수집가의 또 다른 아트가 해금되었습니다!" ] }, @@ -80,6 +83,14 @@ "빨래하는 날입니다." ] }, + "reskinContent:ReSkinGremlin": { + "TEXT": [ + "고양이" + ], + "EXTRA_TEXT": [ + "니야아아.... 옹?" + ] + }, "reskinContent:ReSkinBronze": { "TEXT": [ "자동인형", diff --git a/src/main/resources/reskinContent/localization/spa/UIStrings.json b/src/main/resources/reskinContent/localization/spa/UIStrings.json new file mode 100644 index 000000000..84e4da61a --- /dev/null +++ b/src/main/resources/reskinContent/localization/spa/UIStrings.json @@ -0,0 +1,104 @@ +{ + "reskinContent:ReSkin": { + "TEXT": [ + "Aspecto", + "Original" + ] + }, + "reskinContent:PortraitAnimation": { + "TEXT": [ + "Tipo de retrato" + ] + }, + "reskinContent:PortraitAnimationType": { + "TEXT": [ + "Estático", + "Animado", + "Efecto completo" + ] + }, + "reskinContent:BetaArtUnlockEffect": { + "TEXT": [ + "¡Arte alternativo de El Guardian desbloqueado!", + "¡Arte alternativo de El Rey Babosa desbloqueado!", + "¡Arte alternativo de El Hexafantasma desbloqueado!", + "¡Arte alternativo de Serpentija desbloqueado!", + "¡Arte alternativo de El Campeón desbloqueado!", + "¡Arte alternativo de El Autómata desbloqueado!", + "¡Arte alternativo de Los Gremlins desbloqueado!", + "¡Arte alternativo de El Coleccionista desbloqueado!" + ] + }, + "reskinContent:ReSkinGuardian": { + "TEXT": [ + "Guardian Chan", + "Boceto inicial" + ], + "EXTRA_TEXT": [ + "Un constructo de la Aguja, programado para defenderla. NL Capaz de protegerse del daño al recibir una orden.", + "Uno de los primeros bocetos del Guardian. NL Funcionaba mejor sobre el papel." + ] + }, + "reskinContent:ReSkinSlime": { + "TEXT": [ + "Baifu", + "¿Rey babosa?" + ], + "EXTRA_TEXT": [ + "Esta curiosa babosa tiene un gusto especial por las reliquias sabrosas.. NL Aunque no lo parezca, ¡sirve al Corazón por pura coincidencia!.", + "¿Este es... el Rey Babosa? Parece sospechosamente amigable. NL Bueno, su sombrero es el más grande de toda la Aguja, así que debe estar al mando..." + ] + }, + "reskinContent:ReSkinHexaghost": { + "TEXT": [ + "Hexafan", + "Fantasmágono", + "Fantámpara" + ], + "EXTRA_TEXT": [ + "Un espíritu maldito de la Aguja. NL Condenado a un destino eterno como protector.", + "En su tiempo libre persigue círculos amarillos. NL Tiene un terror paralizante a las píldoras de poder.", + "Antiguo compañero del Hexafantasma. NL Decidió dejar de aniquilar aventureros por un empleo estable vendiendo deseos." + ] + }, + "reskinContent:ReSkinSnecko": { + "TEXT": [ + "SSSSerpentija", + "Serpentor" + ], + "EXTRA_TEXT": [ + "Usa sus ojos para inducir desorientación cognitiva, ocultando su verdadera forma. NL Estudios revelan que las criaturas confundidas ven un mundo completamente distinto.", + "Buscando una fuerza superior, esta ambiciosa Serpentija siguió los pasos de su héroe. NL Adoptando múltiples V perfectas y un brazo musculoso, se hace llamar \"Sneckdor\"." + ] + }, + "reskinContent:ReSkinChamp": { + "TEXT": [ + "Cam-p-on", + "Campeón del Lavado" + ], + "EXTRA_TEXT": [ + "Su espada parece imposible de blandir, NL pero en realidad es la única lo bastante fuerte como para levantarla.", + "Es día de lavandería." + ] + }, + "reskinContent:ReSkinGremlin": { + "TEXT": [ + "Gatos" + ], + "EXTRA_TEXT": [ + "Ehm... Meow?" + ] + }, + "reskinContent:ReSkinBronze": { + "TEXT": [ + "Autómata", + "\"Autómata\"", + "Perfecto" + ], + "EXTRA_TEXT": [ + "", + "¡Sí! De pies a cabeza, eso es un Autómata. NL ¡Nunca he visto algo que se parezca más a un Autómata!", + "[ARRANQUE] Inicializando... Sistemas centrales en línea - Sin fallos detectados NL [OBJETIVO] El EQUILIBRIO será IMPUESTO" + ] + } +} diff --git a/src/main/resources/slimeboundResources/SlimeboundImages/cards/morpheverything.png b/src/main/resources/slimeboundResources/SlimeboundImages/cards/morpheverything.png index b962bb97a..abdbda8a3 100644 Binary files a/src/main/resources/slimeboundResources/SlimeboundImages/cards/morpheverything.png and b/src/main/resources/slimeboundResources/SlimeboundImages/cards/morpheverything.png differ diff --git a/src/main/resources/slimeboundResources/SlimeboundImages/cards/morpheverything_p.png b/src/main/resources/slimeboundResources/SlimeboundImages/cards/morpheverything_p.png index c1623ac7a..80886c547 100644 Binary files a/src/main/resources/slimeboundResources/SlimeboundImages/cards/morpheverything_p.png and b/src/main/resources/slimeboundResources/SlimeboundImages/cards/morpheverything_p.png differ diff --git a/src/main/resources/slimeboundResources/localization/eng/CardStrings.json b/src/main/resources/slimeboundResources/localization/eng/CardStrings.json index 4666140f7..ca265a83c 100644 --- a/src/main/resources/slimeboundResources/localization/eng/CardStrings.json +++ b/src/main/resources/slimeboundResources/localization/eng/CardStrings.json @@ -68,7 +68,7 @@ }, "Slimebound:FirmFortitude": { "NAME": "Liquidate", - "DESCRIPTION": "Unplayable if you have negative Strength. NL Lose 2 Strength. NL Gain !M! slimeboundmod:Potency." + "DESCRIPTION": "Lose 2 Strength. NL Gain !M! slimeboundmod:Potency." }, "Slimebound:FlameTackle": { "NAME": "Flame Tackle", @@ -76,7 +76,7 @@ }, "Slimebound:FormOfPuddle": { "NAME": "Shape of Puddle", - "DESCRIPTION": "Gain 1 Intangible. NL Exhaust." + "DESCRIPTION": "Ethereal. NL Gain 1 Intangible. NL Exhaust." }, "Slimebound:ForwardTackle": { "NAME": "Forward Tackle", @@ -178,18 +178,18 @@ }, "Slimebound:OneTwoCombo": { "NAME": "One-Two Combo", - "DESCRIPTION": "Deal !D! damage. NL When you slimeboundmod:Split, return this from the discard pile to your hand.", - "UPGRADE_DESCRIPTION": "Deal !D! damage. NL slimeboundmod:Command. NL When you slimeboundmod:Split, return this from the discard pile to your hand." + "DESCRIPTION": "Deal !D! damage. NL slimeboundmod:Command. NL When you slimeboundmod:Split, return this from the discard pile to your hand.", + "UPGRADE_DESCRIPTION": "Deal !D! damage. NL slimeboundmod:Command twice. NL When you slimeboundmod:Split, return this from the discard pile to your hand." }, "Slimebound:OozeBath": { "NAME": "Ooze Bath", - "DESCRIPTION": "Apply !M! slimeboundmod:Goop to target enemy at the start of each of its turns. NL Exhaust.", + "DESCRIPTION": "Apply !slime! slimeboundmod:Goop to target enemy at the start of each of its turns. NL Exhaust.", "UPGRADE_DESCRIPTION": "Triple the enemy's slimeboundmod:Goop. NL Exhaust." }, "Slimebound:Overexert": { "NAME": "Overexert", - "DESCRIPTION": "Gain 4 slimeboundmod:Potency. NL !M! turns from now, slimeboundmod:Absorb all Slimes.", - "UPGRADE_DESCRIPTION": "Gain 4 slimeboundmod:Potency. NL slimeboundmod:Command twice. NL !M! turns from now, slimeboundmod:Absorb all Slimes." + "DESCRIPTION": "Gain 5 slimeboundmod:Potency. NL !M! turns from now, slimeboundmod:Absorb all Slimes.", + "UPGRADE_DESCRIPTION": "Gain 5 slimeboundmod:Potency. NL slimeboundmod:Command twice. NL !M! turns from now, slimeboundmod:Absorb all Slimes." }, "Slimebound:Prepare": { "NAME": "Prepare", @@ -206,8 +206,8 @@ }, "Slimebound:PressTheAttack": { "NAME": "Press the Attack", - "DESCRIPTION": "Deal !D! damage. slimeboundmod:Consume - slimeboundmod:Command.", - "UPGRADE_DESCRIPTION": "Deal !D! damage. slimeboundmod:Consume - slimeboundmod:Command twice." + "DESCRIPTION": "Deal !D! damage. slimeboundmod:Command.", + "UPGRADE_DESCRIPTION": "Deal !D! damage. slimeboundmod:Command twice." }, "Slimebound:ProtectTheBoss": { "NAME": "Protect the Boss", @@ -279,8 +279,8 @@ }, "Slimebound:SlimeBarrage": { "NAME": "Pile On!", - "DESCRIPTION": "Deal !D! damage. slimeboundmod:Command ALL slimes.", - "UPGRADE_DESCRIPTION": "Deal !D! damage. slimeboundmod:Command ALL slimes twice." + "DESCRIPTION": "Deal !D! damage. slimeboundmod:Command ALL Slimes.", + "UPGRADE_DESCRIPTION": "Deal !D! damage. slimeboundmod:Command ALL Slimes twice." }, "Slimebound:SlimeBrawl": { "NAME": "Slime Brawl", @@ -313,17 +313,17 @@ }, "Slimebound:Split": { "NAME": "Split", - "DESCRIPTION": "slimeboundmod:Split into a random Slime." + "DESCRIPTION": "slimeboundmod:Split into a slimeboundmod:Guerilla_Slime. NL slimeboundmod:Command." }, "Slimebound:SplitAcid": { "NAME": "Split: Guerilla", - "DESCRIPTION": "slimeboundmod:Split into a slimeboundmod:Guerilla_Slime. NL slimeboundmod:Command !M! times. NL Exhaust.", - "UPGRADE_DESCRIPTION": "slimeboundmod:Split into a slimeboundmod:Guerilla_Slime. NL slimeboundmod:Command three times. NL Exhaust." + "DESCRIPTION": "slimeboundmod:Split into a slimeboundmod:Guerilla_Slime. NL slimeboundmod:Command !M! times.", + "UPGRADE_DESCRIPTION": "slimeboundmod:Split into a slimeboundmod:Guerilla_Slime. NL slimeboundmod:Command three times." }, "Slimebound:SplitBruiser": { "NAME": "Split: Bruiser", - "DESCRIPTION": "slimeboundmod:Split into a slimeboundmod:Bruiser_Slime. NL slimeboundmod:Command !M! times. NL Exhaust.", - "UPGRADE_DESCRIPTION": "slimeboundmod:Split into a slimeboundmod:Bruiser_Slime. NL slimeboundmod:Command three times. NL Exhaust." + "DESCRIPTION": "slimeboundmod:Split into a slimeboundmod:Bruiser_Slime. NL slimeboundmod:Command !M! times.", + "UPGRADE_DESCRIPTION": "slimeboundmod:Split into a slimeboundmod:Bruiser_Slime. NL slimeboundmod:Command three times." }, "Slimebound:SplitGreed": { "NAME": "Revive Greed", @@ -331,13 +331,13 @@ }, "Slimebound:SplitLeeching": { "NAME": "Split: Leeching", - "DESCRIPTION": "slimeboundmod:Split into a slimeboundmod:Leeching_Slime. NL slimeboundmod:Command !M! times. NL Exhaust.", - "UPGRADE_DESCRIPTION": "slimeboundmod:Split into a slimeboundmod:Leeching_Slime. NL slimeboundmod:Command three times. NL Exhaust." + "DESCRIPTION": "slimeboundmod:Split into a slimeboundmod:Leeching_Slime. NL slimeboundmod:Command !M! times.", + "UPGRADE_DESCRIPTION": "slimeboundmod:Split into a slimeboundmod:Leeching_Slime. NL slimeboundmod:Command three times." }, "Slimebound:SplitMire": { "NAME": "Split: Mire", - "DESCRIPTION": "slimeboundmod:Split into a slimeboundmod:Mire_Slime. NL slimeboundmod:Command !M! times. NL Exhaust.", - "UPGRADE_DESCRIPTION": "slimeboundmod:Split into a slimeboundmod:Mire_Slime. NL slimeboundmod:Command three times. NL Exhaust." + "DESCRIPTION": "slimeboundmod:Split into a slimeboundmod:Mire_Slime. NL slimeboundmod:Command !M! times.", + "UPGRADE_DESCRIPTION": "slimeboundmod:Split into a slimeboundmod:Mire_Slime. NL slimeboundmod:Command three times." }, "Slimebound:SplitScrap": { "NAME": "Revive Scrap", diff --git a/src/main/resources/slimeboundResources/localization/eng/EventStrings.json b/src/main/resources/slimeboundResources/localization/eng/EventStrings.json index ace431f39..df5d26a7e 100644 --- a/src/main/resources/slimeboundResources/localization/eng/EventStrings.json +++ b/src/main/resources/slimeboundResources/localization/eng/EventStrings.json @@ -16,7 +16,7 @@ "DESCRIPTIONS": [ "You fall into a puddle. NL @IT'S@ @MADE@ @OF@ #g@SLIME@ #g@GOOP!!@ NL Calmly, you bathe yourself as you bond with the goop, enjoying a moment of reprieve. NL NL Climbing out, you notice in the pool the #ysouls of a few unfortunate adventurers, slowly being consumed by a gluttonous creature.", "You exit the invigorating slime bath, absorbing the #ysouls, leaving the creature with a sad look upon its amorphous face.", - "You succeed in negotiating a deal with the creature to provide it with more tasty souls if it will aid you in your quest. NL You and your newfound #gfriend exit the slime bath together." + "You succeed in negotiating a deal with the creature to provide it with more tasty #ysouls if it will aid you in your quest. NL You and your newfound #gfriend exit the slime bath together." ], "OPTIONS": [ "[Gather Souls] #gGain #g75 #gSouls.", @@ -49,7 +49,7 @@ ], "OPTIONS": [ "[Recruit] #rLose ", - ". Gain #gScrap #gOoze. #rLocked if you Reach Inside.", + ". Gain #gScrap #gOoze [REMOVE_SPACE]. #rLocked if you Reach Inside.", "[Recruit] Locked (Angered the Scrap Ooze)", "[Leave]", "[Recruit] Locked (Requires a Common or Uncommon Relic)" @@ -67,7 +67,7 @@ "You can't figure out how the Slime minions are a threat to anyone - it appears the only tactic they use is to violently throw their bodies at enemies. Well, if it works for them..." ], "OPTIONS": [ - "[Read] #gRemove #gall Strikes. #gReceive #g3 #gUpgraded Tackles.", + "[Read] #gRemove #gall #gStrikes. #gReceive #g3 #gUpgraded #gTackles.", "[Take] #gObtain #gConsult #gPlaybook. #rTrigger #ra #rtrap.", "[Leave]", "[Dive] #rBecome #rCursed #r- #rIcky.", diff --git a/src/main/resources/slimeboundResources/localization/eng/KeywordStrings.json b/src/main/resources/slimeboundResources/localization/eng/KeywordStrings.json index e80be86c3..b8c9d6ce5 100644 --- a/src/main/resources/slimeboundResources/localization/eng/KeywordStrings.json +++ b/src/main/resources/slimeboundResources/localization/eng/KeywordStrings.json @@ -6,7 +6,7 @@ "absorbed" ], "PROPER_NAME": "Absorb", - "DESCRIPTION": "Manually recombine with your leading Slime, granting you 1 #yStrength." + "DESCRIPTION": "Manually recombine with your leading Slime, granting you #b1 #yStrength [REMOVE_SPACE]." }, { "NAMES": [ @@ -14,7 +14,7 @@ "splitting" ], "PROPER_NAME": "Split", - "DESCRIPTION": "Spawn a Slime minion, who attacks at the start of each turn. NL If you have no empty slots, your oldest Slime is automatically #yAbsorbed to make room, granting you 1 #yStrength." + "DESCRIPTION": "Spawn a Slime minion, who attacks at the start of each turn. NL If you have no empty slots, your oldest Slime is automatically #yAbsorbed to make room, granting you #b1 #yStrength [REMOVE_SPACE]." }, { "NAMES": [ @@ -22,14 +22,14 @@ "gooped" ], "PROPER_NAME": "Goop", - "DESCRIPTION": "The next attack deals #b1 more damage per #yGoop, removing all #yGoop and triggering any #yConsume effects." + "DESCRIPTION": "The next attack deals #b1 more damage per #yGoop [REMOVE_SPACE], removing all #yGoop and triggering any #yConsume effects." }, { "NAMES": [ "potency" ], "PROPER_NAME": "Potency", - "DESCRIPTION": "Increases the damage of ALL of your Spawned Slimes. Secondary effects increase by 1 for every 2 Potency." + "DESCRIPTION": "Increases the damage of ALL of your Spawned Slimes. Secondary effects increase by #b1 for every #b2 Potency (rounding up)." }, { "NAMES": [ @@ -56,7 +56,7 @@ "bruiser" ], "PROPER_NAME": "Bruiser Slime", - "DESCRIPTION": "Attacks for #b5 each turn." + "DESCRIPTION": "Attacks for #b3 twice each turn." }, { "NAMES": [ @@ -120,7 +120,7 @@ "ghostflame_slime" ], "PROPER_NAME": "Ghostflame Slime", - "DESCRIPTION": "Attacks for #b3 and applies #b5 #ySoulburn each turn." + "DESCRIPTION": "Attacks for #b3 and applies #b6 #ySoulburn each turn." }, { "NAMES": [ @@ -190,7 +190,7 @@ "consume" ], "PROPER_NAME": "Consume", - "DESCRIPTION": "Bonus effect which activates when an #yAttack is used on an enemy who has #yGoop." + "DESCRIPTION": "Bonus effect which activates when an #yAttack is used on an enemy who has #yGoop [REMOVE_SPACE]." }, { "NAMES": [ diff --git a/src/main/resources/slimeboundResources/localization/eng/OrbStrings.json b/src/main/resources/slimeboundResources/localization/eng/OrbStrings.json index 997ff5d6c..499240ffb 100644 --- a/src/main/resources/slimeboundResources/localization/eng/OrbStrings.json +++ b/src/main/resources/slimeboundResources/localization/eng/OrbStrings.json @@ -2,7 +2,7 @@ "Slimebound:EmptySlimeSlot": { "NAME": "Slime Slot", "DESCRIPTION": [ - "Slime minions can be placed in these slots through #ySplitting." + "Slime minions can be placed in these slots through #ySplitting [REMOVE_SPACE]." ] }, "Slimebound:BronzeSlime": { @@ -17,35 +17,35 @@ "NAME": "Bruiser Slime", "DESCRIPTION": [ "Deals #b", - " damage at the start of your turn." + " damage twice at the start of your turn." ] }, "Slimebound:ScrapOozeSlime": { "NAME": "Scrap Ooze", "DESCRIPTION": [ "Deals #b", - " damage at the start of your turn. NL Can be revived if #yAbsorbed." + " damage at the start of your turn. NL Can be revived if #yAbsorbed [REMOVE_SPACE]." ] }, "Slimebound:GreedOozeSlime": { "NAME": "Greed Ooze", "DESCRIPTION": [ "Deals #b", - " damage at the start of your turn. NL Can be revived if #yAbsorbed." + " damage at the start of your turn. NL Can be revived if #yAbsorbed [REMOVE_SPACE]." ] }, "Slimebound:TorchHeadSlime": { "NAME": "Torch Head Slime", "DESCRIPTION": [ "Deals #b", - " damage at the start of your turn. Gains damage from your #yStrength." + " damage at the start of your turn. Gains damage from your #yStrength [REMOVE_SPACE]." ] }, "Slimebound:CultistSlime": { "NAME": "Cultist Slime", "DESCRIPTION": [ "Deals #b", - " damage at the start of your turn. After attacking, increases its damage by #b1." + " damage at the start of your turn. After attacking, increases its damage by #b1 [REMOVE_SPACE]." ] }, "Slimebound:ShieldSlime": { @@ -53,7 +53,7 @@ "DESCRIPTION": [ "Deals #b", " damage at the start of your turn and grants you #b", - " #yBlock." + " #yBlock [REMOVE_SPACE]." ] }, "Slimebound:PoisonSlime": { @@ -100,7 +100,7 @@ "DESCRIPTION": [ "Deals #b", " damage at the start of your turn and grants you #b", - " Temporary #yThorns." + " Temporary #yThorns [REMOVE_SPACE]." ] }, "Slimebound:DrawingSlime": { @@ -108,7 +108,7 @@ "DESCRIPTION": [ "Deals #b", " damage at the start of your turn and causes you to draw #b", - " card." + " card. Draw does not scale with Potency." ] }, "Slimebound:DarklingSlime": { diff --git a/src/main/resources/slimeboundResources/localization/eng/PotionStrings.json b/src/main/resources/slimeboundResources/localization/eng/PotionStrings.json index 9fa4e8e4b..239162ccd 100644 --- a/src/main/resources/slimeboundResources/localization/eng/PotionStrings.json +++ b/src/main/resources/slimeboundResources/localization/eng/PotionStrings.json @@ -3,7 +3,7 @@ "NAME": "Jar of Slime", "DESCRIPTIONS": [ "Apply #b", - " #yGoop." + " #yGoop [REMOVE_SPACE]." ] }, "Slimebound:SlimyTonguePotion": { diff --git a/src/main/resources/slimeboundResources/localization/eng/PowerStrings.json b/src/main/resources/slimeboundResources/localization/eng/PowerStrings.json index fd987c0d7..aa843efa4 100644 --- a/src/main/resources/slimeboundResources/localization/eng/PowerStrings.json +++ b/src/main/resources/slimeboundResources/localization/eng/PowerStrings.json @@ -11,7 +11,7 @@ "NAME": "Goop", "DESCRIPTIONS": [ "The next #yAttack against this enemy deals #b", - " more damage, consuming all #yGoop." + " more damage, consuming all #yGoop [REMOVE_SPACE]." ] }, "Slimebound:PreventTackleDamagePower": { @@ -45,14 +45,14 @@ "NAME": "Upgrade: Acid", "DESCRIPTIONS": [ "#yPoisoning Slimes apply #b", - " more #yPoison." + " more #yPoison [REMOVE_SPACE]." ] }, "Slimebound:BuffSlimingSlimesPower": { "NAME": "Upgrade: Mire", "DESCRIPTIONS": [ "#ySliming Slimes apply #b", - " more #yGoop." + " more #yGoop [REMOVE_SPACE]." ] }, "Slimebound:BuffShieldSlimesPower": { @@ -120,14 +120,14 @@ "NAME": "Reformation", "DESCRIPTIONS": [ "Whenever you Absorb a Slime, gain #b", - " Strength." + " #yStrength [REMOVE_SPACE]." ] }, "Slimebound:SelfFormingGooPowerPlus": { "NAME": "Reformation+", "DESCRIPTIONS": [ "Whenever you Absorb a Slime, gain #b", - " Dexterity." + " #yDexterity [REMOVE_SPACE]." ] }, "Slimebound:LoseSlimesPower": { @@ -161,9 +161,9 @@ "Slimebound:PreventSlimeDecayPower": { "NAME": "Doused in Slime", "DESCRIPTIONS": [ - "The next time an #yAttack is used on this enemy, #yGoop benefits will apply without consuming #yGoop.", + "The next time an #yAttack is used on this enemy, #yGoop benefits will apply without consuming #yGoop [REMOVE_SPACE].", "The next #b", - " times an #yAttack is used on this enemy, #yGoop benefits will apply without consuming #yGoop." + " times an #yAttack is used on this enemy, #yGoop benefits will apply without consuming #yGoop [REMOVE_SPACE]." ] }, "Slimebound:DuplicatedFormPower": { @@ -212,7 +212,7 @@ "NAME": "Acidic Goop", "DESCRIPTIONS": [ "Apply #b", - " #yPoison when you #yAttack an enemy who has #yGoop." + " #yPoison when you #yAttack an enemy who has #yGoop [REMOVE_SPACE]." ] }, "Slimebound:SlimeRitualPower": { @@ -241,7 +241,7 @@ "NAME": "Acid Tongue", "DESCRIPTIONS": [ "Apply #b", - " #yPoison whenever you apply #yGoop." + " #yPoison whenever you apply #yGoop [REMOVE_SPACE]." ] }, "Slimebound:AcidTonguePowerUpgraded": { @@ -484,8 +484,8 @@ "Slimebound:BuffSecondarySlimeEffectsPower": { "NAME": "Minion Master", "DESCRIPTIONS": [ - "Whenever you play a card with Command, Command again.", - "Whenever you play a card with Command, Command #b", + "Whenever you play a card with #yCommand, #yCommand again.", + "Whenever you play a card with #yCommand, Command #b", " additional times." ] }, @@ -515,7 +515,7 @@ "NAME": "Ooze Bath", "DESCRIPTIONS": [ "Adds ", - " Goop at the start of this enemy's turn." + " #yGoop at the start of this enemy's turn." ] } } diff --git a/src/main/resources/slimeboundResources/localization/eng/RelicStrings.json b/src/main/resources/slimeboundResources/localization/eng/RelicStrings.json index 4eec9004d..0cca2208a 100644 --- a/src/main/resources/slimeboundResources/localization/eng/RelicStrings.json +++ b/src/main/resources/slimeboundResources/localization/eng/RelicStrings.json @@ -3,7 +3,9 @@ "NAME": "Heart of Goo", "FLAVOR": "I feel so funky.", "DESCRIPTIONS": [ - "Whenever you #yslimeboundmod:Consume, heal #b2 HP, up to #b8 each combat." + "Whenever you #yslimeboundmod:Consume [REMOVE_SPACE], heal #b", + " HP, up to #b", + " each combat." ] }, "Slimebound:AbsorbEndCombatUpgraded": { @@ -11,22 +13,24 @@ "FLAVOR": "The Secret of the Ooze.", "DESCRIPTIONS": [ "Replaces ", - ".[] NL Whenever you #yslimeboundmod:Consume, heal #b3 HP, up to #b15 each combat." + " [REMOVE_SPACE].[] NL Whenever you #yslimeboundmod:Consume [REMOVE_SPACE], heal #b", + " HP, up to #b", + " each combat." ] }, "Slimebound:SlimedTailRelic": { "NAME": "Slimed Tail", "FLAVOR": "A fake tail to trick enemies during combat, completely covered in slime.", "DESCRIPTIONS": [ - "Whenever you #ySplit, gain #b", - " #yBlock." + "Whenever you #ySplit [REMOVE_SPACE], gain #b", + " #yBlock [REMOVE_SPACE]." ] }, "Slimebound:PotencyRelic": { "NAME": "Stone of Nomakk", "FLAVOR": "When presented to one of your Goop Gang, it seems to make the blob dance.", "DESCRIPTIONS": [ - "At the start of combat, gain #b2 #yslimeboundmod:Potency." + "At the start of combat, gain #b1 #yslimeboundmod:Potency [REMOVE_SPACE]." ] }, "Slimebound:DailySplitRelic": { @@ -40,7 +44,7 @@ "NAME": "Scrap Ooze", "FLAVOR": "", "DESCRIPTIONS": [ - "At the start of combat, spawn #yScrap #yOoze (can be revived if #yAbsorbed). NL At Rest Sites, you can donate a card to the #yScrap #yOoze, modifying its damage: NL #b+1 damage for #gUncommons NL #b+2 damage for #yRares NL #b-1 damage for Commons NL #b-2 damage for #rCurses", + "At the start of combat, spawn #yScrap #yOoze (can be revived if #yAbsorbed [REMOVE_SPACE]). NL At Rest Sites, you can donate a card to the #yScrap #yOoze, modifying its damage: NL #b+1 damage for #gUncommons NL #b+2 damage for #yRares NL #b-1 damage for Commons NL #b-2 damage for #rCurses", "Remove a card from your deck and modify Scrap Ooze's damage.", "Nothing to give to the Scrap Ooze.", "Scrap" @@ -50,29 +54,29 @@ "NAME": "Greed Ooze", "FLAVOR": "A friend found in the Spire who devours souls.", "DESCRIPTIONS": [ - "At the start of combat, spawn #yGreed #yOoze (can be revived if #yAbsorbed). NL At Rest Sites, #yGreed #yOoze will take #b50 of your souls, increasing its damage by #b1." + "At the start of combat, spawn #yGreed #yOoze (can be revived if #yAbsorbed [REMOVE_SPACE]). NL At Rest Sites, #yGreed #yOoze will take #b50 of your souls, increasing its damage by #b1." ] }, "Slimebound:PreparedRelic": { "NAME": "Slime Soup", "FLAVOR": "Tastes awful, but incredibly healthy.", "DESCRIPTIONS": [ - "When you enter a Rest Site, begin the next combat with a #yPrepare card that costs #b0." + "When you enter a Rest Site, begin the next combat with a #yPrepare card that costs #b0 [REMOVE_SPACE]." ] }, "Slimebound:AggressiveSlimeRelic": { "NAME": "Goop Dweller", "FLAVOR": "He followed me home. Can I keep it?", "DESCRIPTIONS": [ - "At the start of combat, #yslimeboundmod:Split into a #yslimeboundmod:Bruiser #ySlime." + "At the start of combat, #yslimeboundmod:Split into a #yslimeboundmod:Bruiser #ySlime [REMOVE_SPACE]." ] }, "Slimebound:SlimedSkullRelic": { "NAME": "Slimy Skull", "FLAVOR": "A Snecko skull in absolutely awful condition. Unclean and slimy, dirt and grime stick to it like glue.", "DESCRIPTIONS": [ - "Whenever you apply #yslimeboundmod:Goop, apply an additional #b", - " #yslimeboundmod:Goop." + "Whenever you apply #yslimeboundmod:Goop [REMOVE_SPACE], apply an additional #b", + " #yslimeboundmod:Goop [REMOVE_SPACE]." ] }, "Slimebound:MaxSlimesRelic": { @@ -86,7 +90,8 @@ "NAME": "Protective Gear", "FLAVOR": "The best defense is a good offense.", "DESCRIPTIONS": [ - "Reduce the damage you take from #yslimeboundmod:Tackles by #b3." + "Reduce the damage you take from #yslimeboundmod:Tackles by #b", + " [REMOVE_SPACE]." ] }, "Slimebound:TarBlob": { @@ -100,7 +105,8 @@ "NAME": "Gelatinous Cube", "FLAVOR": "Hey, it stuck to your body.", "DESCRIPTIONS": [ - "Whenever you draw a #yStatus card, draw #b1 card." + "Whenever you draw a #yStatus or #rCurse [REMOVE_SPACE], gain #b", + " #yBlock [REMOVE_SPACE]." ] } } diff --git a/src/main/resources/slimeboundResources/localization/jpn/CardStrings.json b/src/main/resources/slimeboundResources/localization/jpn/CardStrings.json index a9ad05995..9d7fedbf9 100644 --- a/src/main/resources/slimeboundResources/localization/jpn/CardStrings.json +++ b/src/main/resources/slimeboundResources/localization/jpn/CardStrings.json @@ -13,12 +13,12 @@ }, "Slimebound:Chomp": { "NAME": "むしゃり", - "DESCRIPTION": " !D! ダメージを与える。 NL 手札のランダムな slimeboundmod:タックル のコストがこのターン 0 になる。", - "UPGRADE_DESCRIPTION": " !D! ダメージを与える。 NL 手札のランダムな slimeboundmod:タックル のコストがこの戦闘中 0 になる。" + "DESCRIPTION": "!D! ダメージを与える。 NL 手札のランダムな slimeboundmod:タックル のコストがこのターン 0 になる。", + "UPGRADE_DESCRIPTION": "!D! ダメージを与える。 NL 手札のランダムな slimeboundmod:タックル のコストがこの戦闘中 0 になる。" }, "Slimebound:ComboTackle": { "NAME": "スピアタックル", - "DESCRIPTION": " !D! ダメージを与える。 NL 自分に !SlimeboundSelfharm! ダメージ。 NL カードを !M! 枚引く。" + "DESCRIPTION": "!D! ダメージを与える。 NL 自分に !SlimeboundSelfharm! ダメージを与える。 NL カードを !M! 枚引く。" }, "Slimebound:CorrosiveSpit": { "NAME": "腐食性の唾", @@ -31,11 +31,11 @@ }, "Slimebound:Defend_Slimebound": { "NAME": "防御", - "DESCRIPTION": " !B! ブロックを得る。" + "DESCRIPTION": "!B! ブロックを得る。" }, "Slimebound:DisruptingSlam": { "NAME": "因果応報", - "DESCRIPTION": "敵全体に !D! ダメージ。 NL ランダムな *舐める カードを !M! 枚 expansioncontent:発掘 する。" + "DESCRIPTION": "敵全体に !D! ダメージを与える。 NL ランダムな *舐める カードを !M! 枚 expansioncontent:発掘 する。" }, "Slimebound:Dissolve": { "NAME": "手頃なおやつ", @@ -60,28 +60,28 @@ }, "Slimebound:Equalize": { "NAME": "イコライズ", - "DESCRIPTION": " !D! ダメージを与える。 NL HPを !M! 回復する。 NL slimeboundmod:泥食い - 2回プレイされる。 NL 廃棄" + "DESCRIPTION": "!D! ダメージを与える。 NL HPを !M! 回復する。 NL slimeboundmod:泥食い - 2回プレイされる。 NL 廃棄" }, "Slimebound:FinishingTackle": { "NAME": "開幕タックル", - "DESCRIPTION": " !D! ダメージを与える。 NL 自分に !SlimeboundSelfharm! ダメージ。 NL slimeboundmod:泥食い - 弱体 !M! を与える。" + "DESCRIPTION": "!D! ダメージを与える。 NL 自分に !SlimeboundSelfharm! ダメージを与える。 NL slimeboundmod:泥食い - 弱体 !M! を与える。" }, "Slimebound:FirmFortitude": { "NAME": "液状化", - "DESCRIPTION": "筋力 が マイナス以下の場合 使用不可 NL 筋力 2 を失う。 NL slimeboundmod:効力 !M! を得る。" + "DESCRIPTION": "筋力 2 を失う。 NL slimeboundmod:効力 !M! を得る。" }, "Slimebound:FlameTackle": { "NAME": "フレイムタックル", - "DESCRIPTION": " !D! ダメージを与える。 NL 自分に !SlimeboundSelfharm! ダメージ。 NL この戦闘中 slimeboundmod:タックル のダメージが !M! 増加。" + "DESCRIPTION": "!D! ダメージを与える。 NL 自分に !SlimeboundSelfharm! ダメージを与える。 NL この戦闘中 slimeboundmod:タックル のダメージが !M! 増加。" }, "Slimebound:FormOfPuddle": { "NAME": "形を変える", - "DESCRIPTION": " 無形 1 を得る。 NL 廃棄" + "DESCRIPTION": "エセリアル NL 無形 1 を得る。 NL 廃棄" }, "Slimebound:ForwardTackle": { "NAME": "前進タックル", - "DESCRIPTION": " !D! ダメージを与える。 NL 自分に !SlimeboundSelfharm! ダメージ。 NL 2回 slimeboundmod:命令 する。", - "UPGRADE_DESCRIPTION": " !D! ダメージを与える。 NL 自分に !SlimeboundSelfharm! ダメージ。 NL 3回 slimeboundmod:命令 する。" + "DESCRIPTION": "!D! ダメージを与える。 NL 自分に !SlimeboundSelfharm! ダメージを与える。 NL 2回 slimeboundmod:命令 する。", + "UPGRADE_DESCRIPTION": "!D! ダメージを与える。 NL 自分に !SlimeboundSelfharm! ダメージを与える。 NL 3回 slimeboundmod:命令 する。" }, "Slimebound:Gluttony": { "NAME": "暴食", @@ -94,8 +94,8 @@ }, "Slimebound:GoopTackle": { "NAME": "コンボタックル", - "DESCRIPTION": " !D! ダメージを与える。 NL 自分に !SlimeboundSelfharm! ダメージ。 NL ランダムな slimeboundmod:タックル を手札に加える。このターンコストは0", - "UPGRADE_DESCRIPTION": " !D! ダメージを与える。 NL 自分に !SlimeboundSelfharm! ダメージ。 NL ランダムなアップグレード済み slimeboundmod:タックル を手札に加える。このターンコストは0" + "DESCRIPTION": "!D! ダメージを与える。 NL 自分に !SlimeboundSelfharm! ダメージを与える。 NL ランダムな slimeboundmod:タックル を手札に加える。このターンコストは0", + "UPGRADE_DESCRIPTION": "!D! ダメージを与える。 NL 自分に !SlimeboundSelfharm! ダメージを与える。 NL ランダムなアップグレード済み slimeboundmod:タックル を手札に加える。このターンコストは0" }, "Slimebound:Grow": { "NAME": "成長", @@ -103,7 +103,7 @@ }, "Slimebound:GrowthPunch": { "NAME": "成長するパンチ", - "DESCRIPTION": " !B! ブロックを得る。 NL !D! ダメージを与える。 NL slimeboundmod:泥食い - この戦闘中このカードの効果が !M! 上昇。" + "DESCRIPTION": "!B! ブロックを得る。 NL !D! ダメージを与える。 NL slimeboundmod:泥食い - この戦闘中このカードの効果が !M! 上昇。" }, "Slimebound:HauntingLick": { "NAME": "舐められるトラウマ", @@ -112,13 +112,13 @@ }, "Slimebound:HungryTackle": { "NAME": "ハングリータックル", - "DESCRIPTION": " !D! ダメージを与える。 NL 自分に !SlimeboundSelfharm! ダメージ。 NL ランダムな *舐める カードを expansioncontent:発掘 する。", - "UPGRADE_DESCRIPTION": " !D! ダメージを与える。 NL 自分に !SlimeboundSelfharm! ダメージ。 NL ランダムな *舐める カードを 2 枚 expansioncontent:発掘 する。" + "DESCRIPTION": "!D! ダメージを与える。 NL 自分に !SlimeboundSelfharm! ダメージを与える。 NL ランダムな *舐める カードを expansioncontent:発掘 する。", + "UPGRADE_DESCRIPTION": "!D! ダメージを与える。 NL 自分に !SlimeboundSelfharm! ダメージを与える。 NL ランダムな *舐める カードを 2 枚 expansioncontent:発掘 する。" }, "Slimebound:ItLooksTasty": { "NAME": "美味しそう...", - "DESCRIPTION": " !D! ダメージを与える。 NL slimeboundmod:泥食い - *舐める を手札に加える。", - "UPGRADE_DESCRIPTION": " !D! ダメージを与える。 NL slimeboundmod:泥食い - *舐める+ を手札に加える。" + "DESCRIPTION": "!D! ダメージを与える。 NL slimeboundmod:泥食い - *舐める を手札に加える。", + "UPGRADE_DESCRIPTION": "!D! ダメージを与える。 NL slimeboundmod:泥食い - *舐める+ を手札に加える。" }, "Slimebound:LeadByExample": { "NAME": "お手本を見せる", @@ -127,8 +127,8 @@ }, "Slimebound:LeechEnergy": { "NAME": "リーチエナジー", - "DESCRIPTION": " !D! ダメージを与える。 slimeboundmod:泥食い - [E] を得て カードを !M! 枚引く。", - "UPGRADE_DESCRIPTION": " !D! ダメージを与える。 slimeboundmod:泥食い - [E] を得て カードを !M! 枚引く。" + "DESCRIPTION": "!D! ダメージを与える。 slimeboundmod:泥食い - [E] を得て カードを !M! 枚引く。", + "UPGRADE_DESCRIPTION": "!D! ダメージを与える。 slimeboundmod:泥食い - [E] を得て カードを !M! 枚引く。" }, "Slimebound:LeechLife": { "NAME": "リーチライフ", @@ -136,7 +136,7 @@ }, "Slimebound:LeechingTouch": { "NAME": "リーチングストライク", - "DESCRIPTION": " !D! ダメージを与える。 NL slimeboundmod:泥食い - 敵に付与されている slimeboundmod:汚泥 に等しい ブロック を得る。" + "DESCRIPTION": "!D! ダメージを与える。 NL slimeboundmod:泥食い - 敵に付与されている slimeboundmod:汚泥 に等しい ブロック を得る。" }, "Slimebound:LevelUp": { "NAME": "レベルアップ!", @@ -150,11 +150,11 @@ }, "Slimebound:LivingWall": { "NAME": "リビングウォール", - "DESCRIPTION": " !B! ブロックを得る。 NL このターン攻撃してきた相手に slimeboundmod:汚泥 !slime! を与える。" + "DESCRIPTION": "!B! ブロックを得る。 NL このターン攻撃してきた相手に slimeboundmod:汚泥 !slime! を与える。" }, "Slimebound:MassFeed": { "NAME": "大量供給", - "DESCRIPTION": "敵全体に !D! ダメージ。 致命 時、最大HP + !M! NL 廃棄" + "DESCRIPTION": "敵全体に !D! ダメージを与える。 致命 時、最大HP + !M! NL 廃棄" }, "Slimebound:MassRepurpose": { "NAME": "大量に使いまわす", @@ -162,7 +162,7 @@ "UPGRADE_DESCRIPTION": "全ての スライム を slimeboundmod:吸収 し、同量のランダムな slimeboundmod:上級スライム を産み出し、 slimeboundmod:命令 する。 NL 廃棄" }, "Slimebound:MegaLick": { - "NAME": "巨大なベロベロ", + "NAME": "巨大な舌で舐める", "DESCRIPTION": "敵全体に 脱力 !M! と slimeboundmod:汚泥 !slime! を与える。 NL 廃棄", "UPGRADE_DESCRIPTION": "敵全体に 脱力 !M! と slimeboundmod:汚泥 !slime! を与える。 NL カードを 1 枚引く。 NL 廃棄" }, @@ -173,27 +173,27 @@ }, "Slimebound:Nibble": { "NAME": "齧って舐める", - "DESCRIPTION": " !D! ダメージを与える。 NL *舐める を手札に加える。 NL 廃棄", - "UPGRADE_DESCRIPTION": " !D! ダメージを与える。 NL *舐める を手札に加える。 NL カードを 1 枚引く。 NL 廃棄" + "DESCRIPTION": "!D! ダメージを与える。 NL *舐める を手札に加える。 NL 廃棄", + "UPGRADE_DESCRIPTION": "!D! ダメージを与える。 NL *舐める を手札に加える。 NL カードを 1 枚引く。 NL 廃棄" }, "Slimebound:OneTwoCombo": { "NAME": "ワン、ツー、コンボ", - "DESCRIPTION": " !D! ダメージを与える。 NL slimeboundmod:分裂 した時、これを捨て札から手札に戻す。", - "UPGRADE_DESCRIPTION": " !D! ダメージを与える。 NL slimeboundmod:命令 NL slimeboundmod:分裂 した時、これを捨て札から手札に戻す。" + "DESCRIPTION": "!D! ダメージを与える。 NL slimeboundmod:命令 NL slimeboundmod:分裂 した時、これを捨て札から手札に戻す。", + "UPGRADE_DESCRIPTION": "!D! ダメージを与える。 NL slimeboundmod:命令 2回 NL slimeboundmod:分裂 した時、これを捨て札から手札に戻す。" }, "Slimebound:OozeBath": { "NAME": "ヘドロ風呂", - "DESCRIPTION": "対象の各ターン開始時に slimeboundmod:汚泥 !M! を与える。 NL 廃棄", + "DESCRIPTION": "対象の各ターン開始時に slimeboundmod:汚泥 !slime! を与える。 NL 廃棄", "UPGRADE_DESCRIPTION": "3体の敵に slimeboundmod:汚泥 を与える。 NL 廃棄" }, "Slimebound:Overexert": { "NAME": "過剰行使", - "DESCRIPTION": " slimeboundmod:効力 4 を得る。 NL !M! ターン後、全てのスライムを slimeboundmod:吸収 する。", - "UPGRADE_DESCRIPTION": " slimeboundmod:効力 4 を得る。 NL slimeboundmod:命令 を2回行う。 NL !M! ターン後、全てのスライムを slimeboundmod:吸収 する。" + "DESCRIPTION": " slimeboundmod:効力 5 を得る。 NL !M! ターン後、全てのスライムを slimeboundmod:吸収 する。", + "UPGRADE_DESCRIPTION": " slimeboundmod:効力 5 を得る。 NL slimeboundmod:命令 を2回行う。 NL !M! ターン後、全てのスライムを slimeboundmod:吸収 する。" }, "Slimebound:Prepare": { "NAME": "準備行動", - "DESCRIPTION": " !B! ブロックを得る。 NL 次のターン [E] を得て カードを !M! 枚引く。 NL 廃棄", + "DESCRIPTION": "!B! ブロックを得る。 NL 次のターン [E] を得て カードを !M! 枚引く。 NL 廃棄", "UPGRADE_DESCRIPTION": "次のターン [E] を得て カードを !M! 枚引く。 NL このターン !M! 枚のカードを 保留 する。 NL 廃棄" }, "Slimebound:PrepareCrush": { @@ -206,8 +206,8 @@ }, "Slimebound:PressTheAttack": { "NAME": "押し潰せ", - "DESCRIPTION": " !D! ダメージを与える。 slimeboundmod:泥食い - slimeboundmod:命令 する。", - "UPGRADE_DESCRIPTION": " !D! ダメージを与える。 slimeboundmod:泥食い - 2回 slimeboundmod:命令 する。" + "DESCRIPTION": "!D! ダメージを与える。 NL slimeboundmod:命令", + "UPGRADE_DESCRIPTION": "!D! ダメージを与える。 NL 2回 slimeboundmod:命令 する。" }, "Slimebound:ProtectTheBoss": { "NAME": "主人を守れ", @@ -221,12 +221,12 @@ }, "Slimebound:RallyTheTroops": { "NAME": "スライム軍", - "DESCRIPTION": " !D! ダメージを与える。 NL 次の !M! 枚のカードはこのターン slimeboundmod:命令 を得る。" + "DESCRIPTION": "!D! ダメージを与える。 NL 次の !M! 枚のカードはこのターン slimeboundmod:命令 を得る。" }, "Slimebound:Recollect": { "NAME": "忘れられない味", - "DESCRIPTION": " !B! ブロックを得る。 NL ランダムな *舐める を expansioncontent:発掘 する。", - "UPGRADE_DESCRIPTION": " !B! ブロックを得る。 NL ランダムな *舐める を2枚 expansioncontent:発掘 する。", + "DESCRIPTION": "!B! ブロックを得る。 NL ランダムな *舐める を expansioncontent:発掘 する。", + "UPGRADE_DESCRIPTION": "!B! ブロックを得る。 NL ランダムな *舐める を2枚 expansioncontent:発掘 する。", "EXTENDED_DESCRIPTION": [ "廃棄... されてない..." ] @@ -257,10 +257,10 @@ }, "Slimebound:RollThrough": { "NAME": "ロールスルー", - "DESCRIPTION": "敵全体に !D! ダメージ。あなたは次の !M! 回分、 slimeboundmod:タックル による反動を受けない。" + "DESCRIPTION": "敵全体に !D! ダメージを与える。 NL あなたは次の !M! 回分、 slimeboundmod:タックル による反動を受けない。" }, "Slimebound:SamplingLick": { - "NAME": "味見", + "NAME": "味見で舐める", "DESCRIPTION": "slimeboundmod:汚泥 !slime! を与える。 NL !B! ブロックを得る。 NL 廃棄", "UPGRADE_DESCRIPTION": "slimeboundmod:汚泥 !slime! を与える。 NL !B! ブロックを得る。 NL カードを 1 枚引く。 NL 廃棄" }, @@ -271,16 +271,16 @@ }, "Slimebound:SelfFormingGoo": { "NAME": "再統合", - "DESCRIPTION": " !B! ブロックを得る。 捨て札からカードを1枚山札の上に置く。" + "DESCRIPTION": "!B! ブロックを得る。 捨て札からカードを1枚山札の上に置く。" }, "Slimebound:ServeAndProtect": { "NAME": "奉仕 & プロテクト", - "DESCRIPTION": " !B! ブロックと 1 bronze:ブラー を スライム の数だけ 得る。 NL 全てのスライムを slimeboundmod:吸収 する。 NL 廃棄" + "DESCRIPTION": "!B! ブロックと 1 bronze:ブラー を スライム の数だけ 得る。 NL 全てのスライムを slimeboundmod:吸収 する。 NL 廃棄" }, "Slimebound:SlimeBarrage": { "NAME": "パイル・オン!", - "DESCRIPTION": " !D! ダメージを与える。全てのスライムに slimeboundmod:命令 する", - "UPGRADE_DESCRIPTION": " !D! ダメージを与える。 全てのスライムに 2 回 slimeboundmod:命令 する" + "DESCRIPTION": "!D! ダメージを与える。 NL 全てのスライムに slimeboundmod:命令 する", + "UPGRADE_DESCRIPTION": "!D! ダメージを与える。 NL 全てのスライムに 2 回 slimeboundmod:命令 する" }, "Slimebound:SlimeBrawl": { "NAME": "スライム大騒動", @@ -289,15 +289,15 @@ "Slimebound:SlimeCrush": { "NAME": "スライムクラッシュ!!!", "DESCRIPTION": "エセリアル NL !D! ダメージを与える。 NL 廃棄", - "UPGRADE_DESCRIPTION": "エセリアル NL 敵全体に !D! ダメージ。 廃棄" + "UPGRADE_DESCRIPTION": "エセリアル NL 敵全体に !D! ダメージを与える。 廃棄" }, "Slimebound:SlimeSlap": { "NAME": "スライムビンタ", - "DESCRIPTION": " !D! ダメージを与える。 NL slimeboundmod:汚泥 を消費しない。" + "DESCRIPTION": "!D! ダメージを与える。 NL slimeboundmod:汚泥 を消費しない。" }, "Slimebound:SlimeSpikes": { "NAME": "スライムスパイク", - "DESCRIPTION": " !B! ブロック と 一時的な トゲ !M! を得る。" + "DESCRIPTION": "!B! ブロック と 一時的な トゲ !M! を得る。" }, "Slimebound:SlimeTap": { "NAME": "スライムタップ", @@ -313,17 +313,17 @@ }, "Slimebound:Split": { "NAME": "分裂", - "DESCRIPTION": "ランダムな スライム に slimeboundmod:分裂 する。" + "DESCRIPTION": "slimeboundmod:ゲリラスライム に slimeboundmod:分裂 する。 NL slimeboundmod:命令" }, "Slimebound:SplitAcid": { "NAME": "分裂:ゲリラ", - "DESCRIPTION": "slimeboundmod:ゲリラスライム に slimeboundmod:分裂 する。 NL !M! 回 slimeboundmod:命令 する。 NL 廃棄", - "UPGRADE_DESCRIPTION": "slimeboundmod:ゲリラスライム に slimeboundmod:分裂 する。 NL 3 回 slimeboundmod:命令 する。 NL 廃棄" + "DESCRIPTION": "slimeboundmod:ゲリラスライム に slimeboundmod:分裂 する。 NL !M! 回 slimeboundmod:命令 する。", + "UPGRADE_DESCRIPTION": "slimeboundmod:ゲリラスライム に slimeboundmod:分裂 する。 NL 3 回 slimeboundmod:命令 する。" }, "Slimebound:SplitBruiser": { "NAME": "分裂:ブルーザー", - "DESCRIPTION": "slimeboundmod:ブルーザースライム に slimeboundmod:分裂 する。 NL !M! 回 slimeboundmod:命令 する。 NL 廃棄", - "UPGRADE_DESCRIPTION": "slimeboundmod:ブルーザースライム に slimeboundmod:分裂 する。 NL 3 回 slimeboundmod:命令 する。 NL 廃棄" + "DESCRIPTION": "slimeboundmod:ブルーザースライム に slimeboundmod:分裂 する。 NL !M! 回 slimeboundmod:命令 する。", + "UPGRADE_DESCRIPTION": "slimeboundmod:ブルーザースライム に slimeboundmod:分裂 する。 NL 3 回 slimeboundmod:命令 する。" }, "Slimebound:SplitGreed": { "NAME": "復活:グリード", @@ -331,13 +331,13 @@ }, "Slimebound:SplitLeeching": { "NAME": "分裂:リーチング", - "DESCRIPTION": "slimeboundmod:リーチングスライム に slimeboundmod:分裂 する。 NL !M! 回 slimeboundmod:命令 する。 NL 廃棄", - "UPGRADE_DESCRIPTION": "slimeboundmod:リーチングスライム に slimeboundmod:分裂 する。 NL 3 回 slimeboundmod:命令 する。 NL 廃棄" + "DESCRIPTION": "slimeboundmod:リーチングスライム に slimeboundmod:分裂 する。 NL !M! 回 slimeboundmod:命令 する。", + "UPGRADE_DESCRIPTION": "slimeboundmod:リーチングスライム に slimeboundmod:分裂 する。 NL 3 回 slimeboundmod:命令 する。" }, "Slimebound:SplitMire": { "NAME": "分裂:マイア", - "DESCRIPTION": "slimeboundmod:マイアスライム に slimeboundmod:分裂 する。 NL !M! 回 slimeboundmod:命令 する。 NL 廃棄", - "UPGRADE_DESCRIPTION": "slimeboundmod:マイアスライム に slimeboundmod:分裂 する。 NL 3 回 slimeboundmod:命令 する。 NL 廃棄" + "DESCRIPTION": "slimeboundmod:マイアスライム に slimeboundmod:分裂 する。 NL !M! 回 slimeboundmod:命令 する。", + "UPGRADE_DESCRIPTION": "slimeboundmod:マイアスライム に slimeboundmod:分裂 する。 NL 3 回 slimeboundmod:命令 する。" }, "Slimebound:SplitScrap": { "NAME": "復活:スクラップ", @@ -350,16 +350,16 @@ }, "Slimebound:Strike_Slimebound": { "NAME": "ストライク", - "DESCRIPTION": " !D! ダメージを与える。" + "DESCRIPTION": "!D! ダメージを与える。" }, "Slimebound:Tackle": { "NAME": "タックル", - "DESCRIPTION": " !D! ダメージを与える。 NL 自分に !SlimeboundSelfharm! ダメージ。" + "DESCRIPTION": "!D! ダメージを与える。 NL 自分に !SlimeboundSelfharm! ダメージ を与える。" }, "Slimebound:TagTeam": { "NAME": "ベトベト分離", - "DESCRIPTION": " !D! ダメージを与える。 NL ランダムな スライム に slimeboundmod:分裂 する。 NL !M! 回 slimeboundmod:命令 する。", - "UPGRADE_DESCRIPTION": " !D! ダメージを与える。 NL ランダムな slimeboundmod:上級スライム に slimeboundmod:分裂 する。 NL !M! 回 slimeboundmod:命令 する。" + "DESCRIPTION": "!D! ダメージを与える。 NL ランダムなスライムに slimeboundmod:分裂 する。 NL !M! 回 slimeboundmod:命令 する。", + "UPGRADE_DESCRIPTION": "!D! ダメージを与える。 NL ランダムな slimeboundmod:上級スライム に slimeboundmod:分裂 する。 NL !M! 回 slimeboundmod:命令 する。" }, "Slimebound:Teamwork": { "NAME": "チームワーク", @@ -368,12 +368,12 @@ }, "Slimebound:TongueLash": { "NAME": "乱れ舌さばき", - "DESCRIPTION": " !D! ダメージを与える。 NL 廃棄山にある「舐める」カードの枚数x !M! のダメージが追加される。" + "DESCRIPTION": "!D! ダメージを与える。 NL 廃棄山にある「舐める」カードの枚数x !M! のダメージが追加される。" }, "Slimebound:ViciousTackle": { "NAME": "凶悪なタックル", - "DESCRIPTION": " !D! ダメージを与える。 NL 自分に !SlimeboundSelfharm! ダメージ。 NL slimeboundmod:汚泥 の影響を2倍受ける。", - "UPGRADE_DESCRIPTION": " !D! ダメージを与える。 NL 自分に !SlimeboundSelfharm! ダメージ。 NL slimeboundmod:汚泥 の影響を2倍受け、HPを slimeboundmod:汚泥 分回復する。" + "DESCRIPTION": "!D! ダメージを与える。 NL 自分に !SlimeboundSelfharm! ダメージを与える。 NL slimeboundmod:汚泥 の影響を2倍受ける。", + "UPGRADE_DESCRIPTION": "!D! ダメージを与える。 NL 自分に !SlimeboundSelfharm! ダメージを与える。 NL slimeboundmod:汚泥 の影響を2倍受け、HPを slimeboundmod:汚泥 分回復する。" }, "Slimebound:WasteNot": { "NAME": "無駄のない動き", diff --git a/src/main/resources/slimeboundResources/localization/jpn/EventStrings.json b/src/main/resources/slimeboundResources/localization/jpn/EventStrings.json index b89bf093e..2a62e79d3 100644 --- a/src/main/resources/slimeboundResources/localization/jpn/EventStrings.json +++ b/src/main/resources/slimeboundResources/localization/jpn/EventStrings.json @@ -16,7 +16,7 @@ "DESCRIPTIONS": [ "あなたは汚水の水たまりに落ちた。 NL それは #g@スライム@ の #g@堆積物@ で出来ていた! NL あなたは落ち着いて水浴びを楽しむと、堆積物と一体化しひと時の休息を楽しむことが出来た。 NL NL 水たまりの中には、不幸な冒険者たちの魂が食欲旺盛な生き物にゆっくりと消化されているのが見える。", "あなたは #yソウル を吸収し、爽快なスライム風呂を出る。...先住民の生物は悲しそうな顔を浮かべていた。", - "手伝ってくれるならもっと美味しい魂が食べれるぞ。 NL 交渉は成功したようだ。 NL あなたは新しい #g友達 と一緒にスライム風呂から出るのだった。" + "手伝ってくれるならもっと美味しい #y魂 が食べれるぞ。 NL 交渉は成功したようだ。 NL あなたは新しい #g友達 と一緒にスライム風呂から出るのだった。" ], "OPTIONS": [ "[魂を集める] #g入手: #g75ソウル。", diff --git a/src/main/resources/slimeboundResources/localization/jpn/KeywordStrings.json b/src/main/resources/slimeboundResources/localization/jpn/KeywordStrings.json index c83d894a2..96a70d4ad 100644 --- a/src/main/resources/slimeboundResources/localization/jpn/KeywordStrings.json +++ b/src/main/resources/slimeboundResources/localization/jpn/KeywordStrings.json @@ -7,7 +7,7 @@ "吸収" ], "PROPER_NAME": "吸収", - "DESCRIPTION": "先頭の スライム を自発的に組み替えた時 #y筋力 1 を得る。" + "DESCRIPTION": "先頭の スライム を自発的に組み替えた時 #y筋力 #b1 を得る。" }, { "NAMES": [ @@ -17,7 +17,7 @@ "産み出す" ], "PROPER_NAME": "分裂", - "DESCRIPTION": "ターン開始時に攻撃する #yスライムミニオン を1体産み出す。 NL 空きスロットが無い場合、一番古いスライムは自動的に #y吸収 され、 #y筋力 1 に変わる。" + "DESCRIPTION": "ターン開始時に攻撃する #yスライムミニオン を1体産み出す。 NL 空きスロットが無い場合、一番古いスライムは自動的に #y吸収 され、 #y筋力 #b1 に変わる。" }, { "NAMES": [ @@ -34,7 +34,7 @@ "効力" ], "PROPER_NAME": "効力", - "DESCRIPTION": "#yスライムミニオン の全てのダメージを増加させる。副効果は効力2毎に1増加する。" + "DESCRIPTION": "#yスライムミニオン の全てのダメージを増加させる。副効果は効力 #b2 毎に #b1 増加する。" }, { "NAMES": [ @@ -63,7 +63,7 @@ "ブルーザースライム" ], "PROPER_NAME": "ブルーザースライム", - "DESCRIPTION": "ターン開始時 #b5 ダメージを与える" + "DESCRIPTION": "ターン開始時 #b3 ダメージを2回与える" }, { "NAMES": [ @@ -131,7 +131,7 @@ "ゴーストフレイムスライム" ], "PROPER_NAME": "ゴーストフレイムスライム", - "DESCRIPTION": "ターン開始時 #b3 ダメージと #b5 #yソウルバーン を与える。" + "DESCRIPTION": "ターン開始時 #b3 ダメージと #b6 #yソウルバーン を与える。" }, { "NAMES": [ diff --git a/src/main/resources/slimeboundResources/localization/jpn/OrbStrings.json b/src/main/resources/slimeboundResources/localization/jpn/OrbStrings.json index a8f1b2854..71ea4d16a 100644 --- a/src/main/resources/slimeboundResources/localization/jpn/OrbStrings.json +++ b/src/main/resources/slimeboundResources/localization/jpn/OrbStrings.json @@ -17,21 +17,21 @@ "NAME": "ブルーザースライム", "DESCRIPTION": [ "ターン開始時 #b", - " ダメージを与える。" + " ダメージを2回与える。" ] }, "Slimebound:ScrapOozeSlime": { "NAME": "スクラップウーズ", "DESCRIPTION": [ "ターン開始時 #b", - " ダメージを与える。 NL 吸収されると復活することがある。" + " ダメージを与える。 NL 吸収しても復活させることが出来る。" ] }, "Slimebound:GreedOozeSlime": { "NAME": "グリードウーズ", "DESCRIPTION": [ "ターン開始時 #b", - " ダメージを与える。 NL 吸収されると復活することがある。" + " ダメージを与える。 NL 吸収しても復活させることが出来る。" ] }, "Slimebound:TorchHeadSlime": { @@ -108,7 +108,7 @@ "DESCRIPTION": [ "ターン開始時 #b", " ダメージを与え、カードを #b", - " 枚ドローする。" + " 枚ドローする。 この効果は #y効力 で増加しない。" ] }, "Slimebound:DarklingSlime": { diff --git a/src/main/resources/slimeboundResources/localization/jpn/RelicStrings.json b/src/main/resources/slimeboundResources/localization/jpn/RelicStrings.json index f4413fbd4..3f1ffd98b 100644 --- a/src/main/resources/slimeboundResources/localization/jpn/RelicStrings.json +++ b/src/main/resources/slimeboundResources/localization/jpn/RelicStrings.json @@ -26,7 +26,7 @@ "NAME": "ストーンオブノマック", "FLAVOR": "ヘドロギャングの一人に見せるとたちまち踊りだす。", "DESCRIPTIONS": [ - "戦闘開始時、 #yslimeboundmod:効力 #b2 を得る。" + "戦闘開始時、 #yslimeboundmod:効力 #b1 を得る。" ] }, "Slimebound:DailySplitRelic": { @@ -100,7 +100,7 @@ "NAME": "ゼラチナスキューブ", "FLAVOR": "やあ、身体にくっついてしまったよ", "DESCRIPTIONS": [ - " #y状態異常 カードを引いた時 カードを #b1 枚引く。" + "各ターンで #b2 枚 まで、 #y状態異常 または #r呪い カードを引いた時 カードを #b1 枚引く。 また、 #y空虚 カードを引いた時は [E] を得る。" ] } } diff --git a/src/main/resources/slimeboundResources/localization/kor/CardStrings.json b/src/main/resources/slimeboundResources/localization/kor/CardStrings.json index 051561daa..fe722e346 100644 --- a/src/main/resources/slimeboundResources/localization/kor/CardStrings.json +++ b/src/main/resources/slimeboundResources/localization/kor/CardStrings.json @@ -1,386 +1,386 @@ { - "Slimebound:Strike_Slimebound": { - "NAME": "타격", - "DESCRIPTION": "피해를 !D! 줍니다." - }, - "Slimebound:Defend_Slimebound": { - "NAME": "수비", - "DESCRIPTION": "방어도를 !B! 얻습니다." - }, - "Slimebound:LevelUp": { - "NAME": "레벨 업", - "DESCRIPTION": "slimeboundmod:잠재력을 !M! 얻습니다.", - "UPGRADE_DESCRIPTION": "slimeboundmod:잠재력을 !M! 얻고 슬라임 슬롯을 하나 얻습니다." - }, - "Slimebound:ProtectTheBoss": { - "NAME": "두목을 지켜라", - "DESCRIPTION": "다음 번에 적의 공격으로 체력을 잃는 것을 막아줍니다. NL 대신 최근에 생성된 슬라임을 slimeboundmod:흡수합니다.", - "UPGRADE_DESCRIPTION": "다음 번에 적의 공격으로 체력을 잃는 것을 2번 막아줍니다. NL 대신 최근에 생성된 슬라임을 slimeboundmod:흡수합니다." - }, - "Slimebound:SamplingLick": { - "NAME": "맛보며 핥기", - "DESCRIPTION": "slimeboundmod:점액을 !slime! 부여합니다. NL 방어도를 !B! 얻습니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "slimeboundmod:점액을 !slime! 부여합니다. NL 방어도를 !B! 얻습니다. NL 카드를 1장 뽑습니다. NL 소멸." - }, - "Slimebound:Replication": { - "NAME": "자기복제", - "DESCRIPTION": "카드를 선택합니다. NL 그 카드를 복사해 뽑을 더미 맨 위에 놓습니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "카드를 선택합니다. NL 그 카드를 한 장 복사해 얻습니다. NL 소멸.", - "EXTENDED_DESCRIPTION": [ - " 복사할 카드를 선택하십시오.", - " 복사해 뽑을 더미 맨 위에 놓을 카드를 선택하십시오." - ] - }, - "Slimebound:Overexert": { - "NAME": "과로", - "DESCRIPTION": "slimeboundmod:잠재력을 4 얻습니다. NL !M! 턴 후 모든 슬라임을 slimeboundmod:흡수합니다.", - "UPGRADE_DESCRIPTION": "slimeboundmod:잠재력을 4 얻습니다. NL 2번 slimeboundmod:명령합니다. NL !M! 턴 후 모든 슬라임을 slimeboundmod:흡수합니다." - }, - "Slimebound:Split": { - "NAME": "분열", - "DESCRIPTION": "무작위 슬라임으로 slimeboundmod:분열합니다." - }, - "Slimebound:LeadByExample": { - "NAME": "시범을 보여주지", - "DESCRIPTION": "매 턴 처음으로 카드를 사용한 대상에게 slimeboundmod:명령합니다.", - "UPGRADE_DESCRIPTION": "매 턴 !M! 번까지 카드를 사용한 대상에게 slimeboundmod:명령합니다." - }, - "Slimebound:SlimeTap": { - "NAME": "슬라임 회수", - "DESCRIPTION": "슬라임을 1번 slimeboundmod:흡수한 후, [E] 를 얻고 카드를 !M! 장 뽑습니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "슬라임을 1번 slimeboundmod:흡수한 후, [E] [E] 를 얻고 카드를 !M! 장 뽑습니다. NL 소멸.", - "EXTENDED_DESCRIPTION": [ - "부하들이... 필요해..." - ] - }, - "Slimebound:Teamwork": { - "NAME": "협동 정신", - "DESCRIPTION": "X번 slimeboundmod:명령합니다. NL 방어도를 !B! 만큼 X번 얻습니다.", - "UPGRADE_DESCRIPTION": "X+1번 slimeboundmod:명령합니다. NL 방어도를 !B! 만큼 X+1번 얻습니다." - }, - "Slimebound:SlimeBarrage": { - "NAME": "모두 공격!", - "DESCRIPTION": "피해를 !D! 줍니다. 모든 슬라임에게 slimeboundmod:명령합니다.", - "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. 모든 슬라임에게 2번 slimeboundmod:명령합니다." - }, - "Slimebound:SlimeBrawl": { - "NAME": "슬라임 난투", - "DESCRIPTION": "슬라임 수만큼 뽑을 더미 맨 위 카드부터 사용합니다. NL 소멸." - }, - "Slimebound:SpikyOuterGoop": { - "NAME": "끈적이 갑옷", - "DESCRIPTION": "slimeboundmod:소비하면 방어도를 !M! 얻습니다." - }, - "Slimebound:SelfFormingGoo": { - "NAME": "재형성", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL 버린 카드 더미의 카드 하나를 뽑을 카드 더미 맨 위에 둡니다." - }, - "Slimebound:OozeBath": { - "NAME": "점액 목욕", - "DESCRIPTION": "적 턴 시작 시 slimeboundmod:점액을 !M! 부여합니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "적의 slimeboundmod:점액을 3배로 늘립니다. NL 소멸." - }, - "Slimebound:SlimeSpikes": { - "NAME": "슬라임 가시", - "DESCRIPTION": "방어도를 !B! 얻고 가시를 !M! 얻습니다. 적 턴이 끝날 때 가시를 !M! 잃습니다." - }, - "Slimebound:LeechingTouch": { - "NAME": "흡수의 타격", - "DESCRIPTION": "피해를 !D! 줍니다. NL slimeboundmod:소비하면 적의 slimeboundmod:점액만큼 방어도를 얻습니다." - }, - "Slimebound:Dissolve": { - "NAME": "가벼운 식사", - "DESCRIPTION": "카드를 !M! 장 뽑습니다. NL 카드를 1장 소멸시킵니다. 소멸시킨 카드의 비용만큼 *핥기 카드를 얻습니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "카드를 !M! 장 뽑습니다. NL 카드를 1장 소멸시킵니다. 소멸시킨 카드의 비용만큼 *핥기 카드를 얻습니다. NL 소멸." - }, - "Slimebound:DuplicatedForm": { - "NAME": "복제의 형상", - "DESCRIPTION": "매 턴 처음으로 적에게 사용한 카드가 2번 사용됩니다.", - "UPGRADE_DESCRIPTION": "내 턴 시작 시 [E] 를 얻습니다. NL 매 턴 처음으로 적에게 사용한 카드가 2번 사용됩니다.", - "EXTENDED_DESCRIPTION": [ - "체력이... 필요해..." - ] - }, - "Slimebound:Recollect": { - "NAME": "회상", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL 무작위 *핥기 카드를 1장 expansioncontent:발굴합니다.", - "UPGRADE_DESCRIPTION": "방어도를 !B! 얻습니다. NL 무작위 *핥기 카드를 2장 expansioncontent:발굴합니다.", - "EXTENDED_DESCRIPTION": [ - "소멸된 게.. 없어.." - ] - }, - "Slimebound:FormOfPuddle": { - "NAME": "웅덩이의 형태", - "DESCRIPTION": "불가침을 1 얻습니다. NL 소멸." - }, - "Slimebound:GrowthPunch": { - "NAME": "거세지는 주먹질", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL 피해를 !D! 줍니다. NL 이번 전투 동안 slimeboundmod:소비하면 방어도와 피해량이 !M! 증가합니다." - }, - "Slimebound:CheckThePlaybook": { - "NAME": "전술교본 참조", - "DESCRIPTION": "무작위 slimeboundmod:태클 카드를 3장 얻습니다. 이번 전투 동안 그 카드의 비용이 1 감소합니다. NL 소멸." - }, - "Slimebound:Recycling": { - "NAME": "재수거", - "DESCRIPTION": "내 턴 시작 시 무작위 *핥기 카드를 1장 expansioncontent:발굴합니다.", - "UPGRADE_DESCRIPTION": "선천성. NL 내 턴 시작 시 무작위 *핥기 카드를 1장 expansioncontent:발굴합니다." - }, - "Slimebound:Repurpose": { - "NAME": "재설계", - "DESCRIPTION": "1번 slimeboundmod:흡수한 후, 무작위 slimeboundmod:전문가로 slimeboundmod:분열합니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "1번 slimeboundmod:흡수 후, 무작위 slimeboundmod:전문가로 slimeboundmod:분열합니다. NL slimeboundmod:명령합니다. NL 소멸." - }, - "Slimebound:RollThrough": { - "NAME": "구르기", - "DESCRIPTION": "적 전체에게 피해를 !D! 줍니다. NL 다음 !M! 번까지 slimeboundmod:태클 카드의 반동 피해를 받지 않습니다." - }, - "Slimebound:MassRepurpose": { - "NAME": "대량 재설계", - "DESCRIPTION": "모든 슬라임을 slimeboundmod:흡수합니다. slimeboundmod:흡수한 슬라임 하나당 무작위 slimeboundmod:전문가로 slimeboundmod:분열합니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "모든 슬라임을 slimeboundmod:흡수합니다. slimeboundmod:흡수한 슬라임 하나당 무작위 slimeboundmod:전문가로 slimeboundmod:분열하고 모든 슬라임에게 slimeboundmod:명령합니다. NL 소멸." - }, - "Slimebound:Lick": { - "NAME": "핥기", - "DESCRIPTION": "slimeboundmod:점액을 !slime! 부여합니다. NL 소멸 - slimeboundmod:매장.", - "UPGRADE_DESCRIPTION": "약화를 !M! 부여하고 slimeboundmod:점액을 !slime! 부여합니다. NL 카드를 1장 뽑습니다. NL 소멸 - slimeboundmod:매장." - }, - "Slimebound:HauntingLick": { - "NAME": "홀리는 핥기", - "DESCRIPTION": "취약을 !M! 부여하고 slimeboundmod:점액을 !slime! 부여합니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "취약을 !M! 부여하고 slimeboundmod:점액을 !slime! 부여합니다. NL 카드를 1장 뽑습니다. NL 소멸." - }, - "Slimebound:MegaLick": { - "NAME": "마구 핥기", - "DESCRIPTION": "적 전체에게 약화를 !M! 부여하고 slimeboundmod:점액을 !slime! 부여합니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "적 전체에게 약화를 !M! 부여하고 slimeboundmod:점액을 !slime! 부여합니다. NL 카드를 1장 뽑습니다. NL 소멸." - }, - "Slimebound:RejuvenatingLick": { - "NAME": "두 번 핥기", - "DESCRIPTION": "slimeboundmod:점액을 !slime! 만큼 2번 부여합니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "slimeboundmod:점액을 !slime! 만큼 2번 부여합니다. NL 카드를 1장 뽑습니다. NL 소멸." - }, - "Slimebound:Gluttony": { - "NAME": "폭식", - "DESCRIPTION": "매 턴 처음으로 slimeboundmod:소비하면 *핥기를 1장 얻습니다.", - "UPGRADE_DESCRIPTION": "선천성. NL 매 턴 처음으로 slimeboundmod:소비하면 *핥기를 1장 얻습니다." - }, - "Slimebound:PressTheAttack": { - "NAME": "계속 공격해", - "DESCRIPTION": "피해를 !D! 줍니다. slimeboundmod:소비하면 slimeboundmod:명령합니다.", - "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. slimeboundmod:소비하면 2번 slimeboundmod:명령합니다." - }, - "Slimebound:TongueLash": { - "NAME": "혓바닥 채찍", - "DESCRIPTION": "피해를 !D! 줍니다. NL 소멸된 카드 중에 이름에 \"핥기\" 가 붙은 카드 하나당 피해량이 !M! 증가합니다." - }, - "Slimebound:ItLooksTasty": { - "NAME": "맜있겠군", - "DESCRIPTION": "피해를 !D! 줍니다. slimeboundmod:소비하면 *핥기를 1장 얻습니다.", - "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. slimeboundmod:소비하면 *핥기+를 1장 얻습니다." - }, - "Slimebound:AcidTongue": { - "NAME": "점액 흩뿌리기", - "DESCRIPTION": "slimeboundmod:점액을 부여할 때마다 추가로 점액을 !M! 부여합니다." - }, - "Slimebound:FirmFortitude": { - "NAME": "청산", - "DESCRIPTION": "힘 이 음수면 사용할 수 없습니다. NL 힘을 2 잃습니다. NL slimeboundmod:잠재력을 !M! 얻습니다." - }, - "Slimebound:WasteNot": { - "NAME": "남기면 안돼", - "DESCRIPTION": "모든 *핥기 카드를 expansioncontent:발굴합니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "모든 *핥기 카드를 expansioncontent:발굴합니다.", - "EXTENDED_DESCRIPTION": [ - "소멸된 게... 없어..." - ] - }, - "Slimebound:Prepare": { - "NAME": "준비 동작", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL 다음 턴에 [E] 를 얻고 카드를 !M! 장 뽑습니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "다음 턴에 [E] 를 얻고 카드를 !M! 장 뽑습니다. NL 카드를 !M! 장 보존 합니다. 소멸" - }, - "Slimebound:Grow": { - "NAME": "성장", - "DESCRIPTION": "슬라임 슬롯을 1개 잃고 힘을 !M! 얻고 민첩을 !M! 얻습니다." - }, - "Slimebound:HungryTackle": { - "NAME": "굶주린 태클", - "DESCRIPTION": "피해를 !D! 주고 반동 피해를 !SlimeboundSelfharm! 받습니다. NL 무작위 *핥기 카드를 1장 expansioncontent:발굴합니다.", - "UPGRADE_DESCRIPTION": "피해를 !D! 주고 반동 피해를 !SlimeboundSelfharm! 받습니다. NL 무작위 *핥기 카드를 2장 expansioncontent:발굴합니다." - }, - "Slimebound:FinishingTackle": { - "NAME": "시작을 알리는 태클", - "DESCRIPTION": "피해를 !D! 주고 반동 피해를 !SlimeboundSelfharm! 받습니다. slimeboundmod:소비하면 취약을 !M! 부여합니다." - }, - "Slimebound:LivingWall": { - "NAME": "살아있는 벽", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL 이번 턴에 공격을 받을 때마다 공격한 대상에게 slimeboundmod:점액을 !slime! 부여합니다." - }, - "Slimebound:ComboTackle": { - "NAME": "허를 찌르는 태클", - "DESCRIPTION": "피해를 !D! 주고 반동 피해를 !SlimeboundSelfharm! 받습니다. NL 카드를 !M! 장 뽑습니다." - }, - "Slimebound:Tackle": { - "NAME": "태클", - "DESCRIPTION": "피해를 !D! 주고 반동 피해를 !SlimeboundSelfharm! 받습니다." - }, - "Slimebound:GoopTackle": { - "NAME": "연속 태클", - "DESCRIPTION": "피해를 !D! 주고 반동 피해를 !SlimeboundSelfharm! 받습니다. NL 이번 턴에 비용이 0인 무작위 slimeboundmod:태클 카드를 1장 얻습니다.", - "UPGRADE_DESCRIPTION": "피해를 !D! 주고 반동 피해를 !SlimeboundSelfharm! 받습니다. NL NL 이번 턴에 비용이 0인 무작위 강화된 slimeboundmod:태클 카드를 1장 얻습니다." - }, - "Slimebound:CorrosiveSpit": { - "NAME": "부식성 침", - "DESCRIPTION": "slimeboundmod:점액을 !slime! 부여합니다." - }, - "Slimebound:Chomp": { - "NAME": "우걱우걱", - "DESCRIPTION": "피해를 !D! 줍니다. NL 이번 턴 동안 무작위 slimeboundmod:태클 카드의 비용을 0으로 낮춥니다.", - "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL 이번 전투 동안 무작위 slimeboundmod:태클 카드의 비용을 0으로 낮춥니다." - }, - "Slimebound:DouseInSlime": { - "NAME": "점액 적시기", - "DESCRIPTION": "slimeboundmod:점액을 !slime! 부여합니다. NL 이 효과로 점액이 부여된 적은 다음번 공격 시 slimeboundmod:점액을 소모하지 않습니다." - }, - "Slimebound:FlameTackle": { - "NAME": "불꽃 태클", - "DESCRIPTION": "피해를 !D! 주고 반동 피해를 !SlimeboundSelfharm! 받습니다. NL 이번 전투 동안 slimeboundmod:태클 카드의 피해량이 !M! 증가합니다." - }, - "Slimebound:RainOfGoop": { - "NAME": "끈적이 비", - "DESCRIPTION": "무작위 적들에게 slimeboundmod:점액을 !slime! 만큼 !M! 번 부여합니다.", - "UPGRADE_DESCRIPTION": "무작위 적들에게 slimeboundmod:점액을 !slime! 만큼 !M! 번 부여합니다." - }, - "Slimebound:GoopSpray": { - "NAME": "끈적이 스프레이", - "DESCRIPTION": "적 전체에게 slimeboundmod:점액을 !slime! 부여하고 약화를 !M! 부여합니다." - }, - "Slimebound:MassFeed": { - "NAME": "대량 섭취", - "DESCRIPTION": "적 전체에게 피해를 !D! 줍니다. NL 치명타라면 최대 체력이 !M! 증가합니다. NL 소멸." - }, - "Slimebound:ViciousTackle": { - "NAME": "난폭한 태클", - "DESCRIPTION": "적에게 피해를 !D! 주고 반동 피해를 !SlimeboundSelfharm! 받습니다. NL slimeboundmod:점액의 효과가 2배로 적용됩니다.", - "UPGRADE_DESCRIPTION": "적에게 피해를 !D! 주고 반동 피해를 !SlimeboundSelfharm! 받습니다. NL slimeboundmod:점액의 효과가 2배로 적용되고 slimeboundmod:점액만큼 회복합니다." - }, - "Slimebound:LeechEnergy": { - "NAME": "에너지 흡수", - "DESCRIPTION": "피해를 !D! 줍니다. slimeboundmod:소비하면 [E] 을 얻고 카드를 !M! 장 뽑습니다.", - "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. slimeboundmod:소비하면 [E] 을 얻고 카드를 !M! 장 뽑습니다." - }, - "Slimebound:LeechLife": { - "NAME": "거머리 같은 생명력", - "DESCRIPTION": "휘발성. NL 피해를 !D! 줍니다. NL 막히지 않은 피해만큼 체력을 회복합니다. NL 소멸." - }, - "Slimebound:Equalize": { - "NAME": "균일화", - "DESCRIPTION": "피해를 !D! 줍니다. NL 체력을 !M! 회복합니다. NL slimeboundmod:소비하면 2번 사용합니다. NL 소멸." - }, - "Slimebound:DisruptingSlam": { - "NAME": "간식 발견", - "DESCRIPTION": "적 전체에게 피해를 !D! 줍니다. NL 무작위 *핥기 카드를 !M! 장 expansioncontent:발굴합니다." - }, - "Slimebound:PrepareCrush": { - "NAME": "준비: 으깨기", - "DESCRIPTION": "다음 턴에 [E] [E] [E] 과 힘을 !M! 얻고 *슬라임 *으깬다를 얻습니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "다음 턴에 [E] [E] [E] 과 힘을 !M! 얻고 *슬라임 *으깬다+를 얻습니다. NL 소멸.", - "EXTENDED_DESCRIPTION": [ - "~슬라임...~ NL #r~으깬다!!!~" - ] - }, - "Slimebound:SlimeCrush": { - "NAME": "슬라임 으깬다!!!", - "DESCRIPTION": "휘발성. NL 피해를 !D! 줍니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "휘발성. NL 적 전체에게 !D! 피해를 줍니다. NL 소멸." - }, - "Slimebound:DivideAndConquer": { - "NAME": "분할 & 정복", - "DESCRIPTION": "슬라임 하나당 무작위 적들에게 피해를 !D! 줍니다. NL 모든 슬라임을 slimeboundmod:흡수합니다. NL 소멸." - }, - "Slimebound:ServeAndProtect": { - "NAME": "넣기 & 보호", - "DESCRIPTION": "슬라임 하나당 방어도를 !B! 얻고 bronze:흐릿함을 1 얻습니다. NL 모든 슬라임을 slimeboundmod:흡수합니다. NL 소멸." - }, - "Slimebound:SplitBruiser": { - "NAME": "분열: 싸움꾼", - "DESCRIPTION": "slimeboundmod:싸움꾼_슬라임으로 slimeboundmod:분열합니다. NL !M! 번 slimeboundmod:명령합니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "slimeboundmod:싸움꾼_슬라임으로 slimeboundmod:분열합니다. NL 3번 slimeboundmod:명령합니다. NL 소멸." - }, - "Slimebound:SplitLeeching": { - "NAME": "분열: 거머리", - "DESCRIPTION": "slimeboundmod:거머리_슬라임으로 slimeboundmod:분열합니다. NL !M! 번 slimeboundmod:명령합니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "slimeboundmod:거머리_슬라임으로 slimeboundmod:분열합니다. NL 3번 slimeboundmod:명령합니다. NL 소멸." - }, - "Slimebound:SplitAcid": { - "NAME": "분열: 특공대", - "DESCRIPTION": "slimeboundmod:특공대_슬라임으로 slimeboundmod:분열합니다. NL !M! 번 slimeboundmod:명령합니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "slimeboundmod:특공대_슬라임으로 slimeboundmod:분열합니다. NL 3번 slimeboundmod:명령합니다. NL 소멸." - }, - "Slimebound:SplitMire": { - "NAME": "분열: 진흙탕", - "DESCRIPTION": "slimeboundmod:진흙탕_슬라임으로 slimeboundmod:분열합니다. NL !M! 번 slimeboundmod:명령합니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "slimeboundmod:진흙탕_슬라임으로 slimeboundmod:분열합니다. NL 3번 slimeboundmod:명령합니다. NL 소멸." - }, - "Slimebound:SplitSpecialist": { - "NAME": "분열: 전문가", - "DESCRIPTION": "slimeboundmod:전문가 3종류 중 1가지를 선택해 slimeboundmod:분열합니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "slimeboundmod:전문가 3종류 중 1가지를 선택해 slimeboundmod:분열하고 slimeboundmod:명령합니다. NL 소멸." - }, - "Slimebound:MinionMaster": { - "NAME": "졸개 대장", - "DESCRIPTION": "slimeboundmod:명령하면 한 번 더 slimeboundmod:명령합니다.", - "UPGRADE_DESCRIPTION": "선천성. NL slimeboundmod:명령하면 한 번 더 slimeboundmod:명령합니다." - }, - "Slimebound:BestDefense": { - "NAME": "무모함", - "DESCRIPTION": "slimeboundmod:태클의 피해량이 !M! 증가하지만 반동 피해량도 1 증가합니다." - }, - "Slimebound:Darklings": { - "NAME": "어두미 이인조", - "DESCRIPTION": "slimeboundmod:어두미_슬라임으로 !M! 번 slimeboundmod:분열합니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "어두미 삼총사" - }, - "Slimebound:SlimeSlap": { - "NAME": "슬라임 찰싹!", - "DESCRIPTION": "피해를 !D! 줍니다. NL 이 카드는 slimeboundmod:점액을 소모하지 않습니다." - }, - "Slimebound:OneTwoCombo": { - "NAME": "하나둘 얍", - "DESCRIPTION": "피해를 !D! 줍니다. NL slimeboundmod:분열하면 버려진 카드 더미에서 이 카드를 가져옵니다.", - "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL slimeboundmod:명령합니다. NL slimeboundmod:분열하면 버려진 카드 더미에서 이 카드를 가져옵니다." - }, - "Slimebound:ForwardTackle": { - "NAME": "전방 태클", - "DESCRIPTION": "피해를 !D! 주고 반동 피해를 !SlimeboundSelfharm! 받습니다. NL 2번 slimeboundmod:명령합니다.", - "UPGRADE_DESCRIPTION": "피해를 !D! 주고 반동 피해를 !SlimeboundSelfharm! 받습니다. NL 3번 slimeboundmod:명령합니다." - }, - "Slimebound:TagTeam": { - "NAME": "질척거리는 공격", - "DESCRIPTION": "피해를 !D! 줍니다. NL 무작위 슬라임으로 slimeboundmod:분열합니다. NL !M! 번 slimeboundmod:명령합니다.", - "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL 무작위 slimeboundmod:전문가로 slimeboundmod:분열합니다. NL !M! 번 slimeboundmod:명령합니다." - }, - "Slimebound:RallyTheTroops": { - "NAME": "부하들 집결", - "DESCRIPTION": "피해를 !D! 줍니다. NL 이번 턴에 카드를 사용 할 때마다 !M! 번 까지 slimeboundmod:명령합니다." - }, - "Slimebound:Nibble": { - "NAME": "맛보기 핥기", - "DESCRIPTION": "피해를 !D! 줍니다. NL *핥기를 1장 얻습니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL *핥기를 1장 얻습니다. NL 카드를 1장 뽑습니다. NL 소멸." - }, - "Slimebound:Schlurp": { - "NAME": "핥짝", - "DESCRIPTION": "slimeboundmod:점액을 !slime! 부여합니다. NL *핥기를 !M! 장 얻습니다.", - "UPGRADE_DESCRIPTION": "slimeboundmod:점액을 !slime! 부여합니다. NL *핥기를 !M! 장 얻습니다." - }, - "Slimebound:SplitGreed": { - "NAME": "되살아나는 욕심쟁이", - "DESCRIPTION": "보존. NL 욕심쟁이 수액을 소환합니다. NL 소멸." - }, - "Slimebound:SplitScrap": { - "NAME": "되살아나는 날붙이", - "DESCRIPTION": "보존. NL 날붙이 수액을 소환합니다. NL 소멸." - } -} + "Slimebound:AcidTongue": { + "NAME": "점액 흩뿌리기", + "DESCRIPTION": "slimeboundmod:점액을 부여할 때마다 추가로 점액을 !M! 부여합니다." + }, + "Slimebound:BestDefense": { + "NAME": "무모함", + "DESCRIPTION": "slimeboundmod:태클의 피해량이 !M! 증가하지만 반동 피해량도 1 증가합니다." + }, + "Slimebound:CheckThePlaybook": { + "NAME": "전술교본 참조", + "DESCRIPTION": "무작위 slimeboundmod:태클 카드를 3장 얻습니다. 이번 전투 동안 그 카드의 비용이 1 감소합니다. NL 소멸." + }, + "Slimebound:Chomp": { + "NAME": "우걱우걱", + "DESCRIPTION": "피해를 !D! 줍니다. NL 이번 턴 동안 무작위 slimeboundmod:태클 카드의 비용을 0으로 낮춥니다.", + "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL 이번 전투 동안 무작위 slimeboundmod:태클 카드의 비용을 0으로 낮춥니다." + }, + "Slimebound:ComboTackle": { + "NAME": "허를 찌르는 태클", + "DESCRIPTION": "피해를 !D! 주고 반동 피해를 !SlimeboundSelfharm! 받습니다. NL 카드를 !M! 장 뽑습니다." + }, + "Slimebound:CorrosiveSpit": { + "NAME": "부식성 침", + "DESCRIPTION": "slimeboundmod:점액을 !slime! 부여합니다." + }, + "Slimebound:Darklings": { + "NAME": "어두미 이인조", + "DESCRIPTION": "slimeboundmod:어두미_슬라임으로 !M! 번 slimeboundmod:분열합니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "어두미 삼총사" + }, + "Slimebound:Defend_Slimebound": { + "NAME": "수비", + "DESCRIPTION": "방어도를 !B! 얻습니다." + }, + "Slimebound:DisruptingSlam": { + "NAME": "간식 발견", + "DESCRIPTION": "적 전체에게 피해를 !D! 줍니다. NL 무작위 *핥기 카드를 !M! 장 expansioncontent:발굴합니다." + }, + "Slimebound:Dissolve": { + "NAME": "가벼운 식사", + "DESCRIPTION": "카드를 !M! 장 뽑습니다. NL 카드를 1장 소멸시킵니다. 소멸시킨 카드의 비용만큼 *핥기 카드를 얻습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "카드를 !M! 장 뽑습니다. NL 카드를 1장 소멸시킵니다. 소멸시킨 카드의 비용만큼 *핥기 카드를 얻습니다. NL 소멸." + }, + "Slimebound:DivideAndConquer": { + "NAME": "분할 & 정복", + "DESCRIPTION": "슬라임 하나당 무작위 적들에게 피해를 !D! 줍니다. NL 모든 슬라임을 slimeboundmod:흡수합니다. NL 소멸." + }, + "Slimebound:DouseInSlime": { + "NAME": "점액 적시기", + "DESCRIPTION": "slimeboundmod:점액을 !slime! 부여합니다. NL 이 효과로 점액이 부여된 적은 다음번 공격 시 slimeboundmod:점액을 소모하지 않습니다." + }, + "Slimebound:DuplicatedForm": { + "NAME": "복제의 형상", + "DESCRIPTION": "매 턴 처음으로 적에게 사용한 카드가 2번 사용됩니다.", + "UPGRADE_DESCRIPTION": "내 턴 시작 시 [E] 를 얻습니다. NL 매 턴 처음으로 적에게 사용한 카드가 2번 사용됩니다.", + "EXTENDED_DESCRIPTION": [ + "체력이... 필요해..." + ] + }, + "Slimebound:Equalize": { + "NAME": "균일화", + "DESCRIPTION": "피해를 !D! 줍니다. NL 체력을 !M! 회복합니다. NL slimeboundmod:소비하면 2번 사용합니다. NL 소멸." + }, + "Slimebound:FinishingTackle": { + "NAME": "시작을 알리는 태클", + "DESCRIPTION": "피해를 !D! 주고 반동 피해를 !SlimeboundSelfharm! 받습니다. slimeboundmod:소비하면 취약을 !M! 부여합니다." + }, + "Slimebound:FirmFortitude": { + "NAME": "청산", + "DESCRIPTION": "힘을 2 잃습니다. NL slimeboundmod:잠재력을 !M! 얻습니다." + }, + "Slimebound:FlameTackle": { + "NAME": "불꽃 태클", + "DESCRIPTION": "피해를 !D! 주고 반동 피해를 !SlimeboundSelfharm! 받습니다. NL 이번 전투 동안 slimeboundmod:태클 카드의 피해량이 !M! 증가합니다." + }, + "Slimebound:FormOfPuddle": { + "NAME": "웅덩이의 형태", + "DESCRIPTION": "휘발성. NL 불가침을 1 얻습니다. NL 소멸." + }, + "Slimebound:ForwardTackle": { + "NAME": "전방 태클", + "DESCRIPTION": "피해를 !D! 주고 반동 피해를 !SlimeboundSelfharm! 받습니다. NL 2번 slimeboundmod:명령합니다.", + "UPGRADE_DESCRIPTION": "피해를 !D! 주고 반동 피해를 !SlimeboundSelfharm! 받습니다. NL 3번 slimeboundmod:명령합니다." + }, + "Slimebound:Gluttony": { + "NAME": "폭식", + "DESCRIPTION": "매 턴 처음으로 slimeboundmod:소비하면 *핥기를 1장 얻습니다.", + "UPGRADE_DESCRIPTION": "선천성. NL 매 턴 처음으로 slimeboundmod:소비하면 *핥기를 1장 얻습니다." + }, + "Slimebound:GoopSpray": { + "NAME": "끈적이 스프레이", + "DESCRIPTION": "적 전체에게 slimeboundmod:점액을 !slime! 부여하고 약화를 !M! 부여합니다." + }, + "Slimebound:GoopTackle": { + "NAME": "연속 태클", + "DESCRIPTION": "피해를 !D! 주고 반동 피해를 !SlimeboundSelfharm! 받습니다. NL 이번 턴에 비용이 0인 무작위 slimeboundmod:태클 카드를 1장 얻습니다.", + "UPGRADE_DESCRIPTION": "피해를 !D! 주고 반동 피해를 !SlimeboundSelfharm! 받습니다. NL NL 이번 턴에 비용이 0인 무작위 강화된 slimeboundmod:태클 카드를 1장 얻습니다." + }, + "Slimebound:Grow": { + "NAME": "성장", + "DESCRIPTION": "슬라임 슬롯을 1개 잃고 힘을 !M! 얻고 민첩을 !M! 얻습니다." + }, + "Slimebound:GrowthPunch": { + "NAME": "거세지는 주먹질", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 피해를 !D! 줍니다. NL 이번 전투 동안 slimeboundmod:소비하면 방어도와 피해량이 !M! 증가합니다." + }, + "Slimebound:HauntingLick": { + "NAME": "홀리는 핥기", + "DESCRIPTION": "취약을 !M! 부여하고 slimeboundmod:점액을 !slime! 부여합니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "취약을 !M! 부여하고 slimeboundmod:점액을 !slime! 부여합니다. NL 카드를 1장 뽑습니다. NL 소멸." + }, + "Slimebound:HungryTackle": { + "NAME": "굶주린 태클", + "DESCRIPTION": "피해를 !D! 주고 반동 피해를 !SlimeboundSelfharm! 받습니다. NL 무작위 *핥기 카드를 1장 expansioncontent:발굴합니다.", + "UPGRADE_DESCRIPTION": "피해를 !D! 주고 반동 피해를 !SlimeboundSelfharm! 받습니다. NL 무작위 *핥기 카드를 2장 expansioncontent:발굴합니다." + }, + "Slimebound:ItLooksTasty": { + "NAME": "맜있겠군", + "DESCRIPTION": "피해를 !D! 줍니다. slimeboundmod:소비하면 *핥기를 1장 얻습니다.", + "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. slimeboundmod:소비하면 *핥기+를 1장 얻습니다." + }, + "Slimebound:LeadByExample": { + "NAME": "시범을 보여주지", + "DESCRIPTION": "매 턴 처음으로 카드를 사용한 대상에게 slimeboundmod:명령합니다.", + "UPGRADE_DESCRIPTION": "매 턴 !M! 번까지 카드를 사용한 대상에게 slimeboundmod:명령합니다." + }, + "Slimebound:LeechEnergy": { + "NAME": "에너지 흡수", + "DESCRIPTION": "피해를 !D! 줍니다. slimeboundmod:소비하면 [E] 을 얻고 카드를 !M! 장 뽑습니다.", + "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. slimeboundmod:소비하면 [E] 을 얻고 카드를 !M! 장 뽑습니다." + }, + "Slimebound:LeechLife": { + "NAME": "거머리 같은 생명력", + "DESCRIPTION": "휘발성. NL 피해를 !D! 줍니다. NL 막히지 않은 피해만큼 체력을 회복합니다. NL 소멸." + }, + "Slimebound:LeechingTouch": { + "NAME": "흡수의 타격", + "DESCRIPTION": "피해를 !D! 줍니다. NL slimeboundmod:소비하면 적의 slimeboundmod:점액만큼 방어도를 얻습니다." + }, + "Slimebound:LevelUp": { + "NAME": "레벨 업", + "DESCRIPTION": "slimeboundmod:잠재력을 !M! 얻습니다.", + "UPGRADE_DESCRIPTION": "slimeboundmod:잠재력을 !M! 얻고 슬라임 슬롯을 하나 얻습니다." + }, + "Slimebound:Lick": { + "NAME": "핥기", + "DESCRIPTION": "slimeboundmod:점액을 !slime! 부여합니다. NL 소멸 - slimeboundmod:매장.", + "UPGRADE_DESCRIPTION": "약화를 !M! 부여하고 slimeboundmod:점액을 !slime! 부여합니다. NL 카드를 1장 뽑습니다. NL 소멸 - slimeboundmod:매장." + }, + "Slimebound:LivingWall": { + "NAME": "살아있는 벽", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 이번 턴에 공격을 받을 때마다 공격한 대상에게 slimeboundmod:점액을 !slime! 부여합니다." + }, + "Slimebound:MassFeed": { + "NAME": "대량 섭취", + "DESCRIPTION": "적 전체에게 피해를 !D! 줍니다. NL 치명타라면 최대 체력이 !M! 증가합니다. NL 소멸." + }, + "Slimebound:MassRepurpose": { + "NAME": "대량 재설계", + "DESCRIPTION": "모든 슬라임을 slimeboundmod:흡수합니다. slimeboundmod:흡수한 슬라임 하나당 무작위 slimeboundmod:전문가로 slimeboundmod:분열합니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "모든 슬라임을 slimeboundmod:흡수합니다. slimeboundmod:흡수한 슬라임 하나당 무작위 slimeboundmod:전문가로 slimeboundmod:분열하고 모든 슬라임에게 slimeboundmod:명령합니다. NL 소멸." + }, + "Slimebound:MegaLick": { + "NAME": "마구 핥기", + "DESCRIPTION": "적 전체에게 약화를 !M! 부여하고 slimeboundmod:점액을 !slime! 부여합니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "적 전체에게 약화를 !M! 부여하고 slimeboundmod:점액을 !slime! 부여합니다. NL 카드를 1장 뽑습니다. NL 소멸." + }, + "Slimebound:MinionMaster": { + "NAME": "졸개 대장", + "DESCRIPTION": "slimeboundmod:명령하면 한 번 더 slimeboundmod:명령합니다.", + "UPGRADE_DESCRIPTION": "선천성. NL slimeboundmod:명령하면 한 번 더 slimeboundmod:명령합니다." + }, + "Slimebound:Nibble": { + "NAME": "맛보기 핥기", + "DESCRIPTION": "피해를 !D! 줍니다. NL *핥기를 1장 얻습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL *핥기를 1장 얻습니다. NL 카드를 1장 뽑습니다. NL 소멸." + }, + "Slimebound:OneTwoCombo": { + "NAME": "하나둘 얍", + "DESCRIPTION": "피해를 !D! 줍니다. NL slimeboundmod:명령합니다. NL slimeboundmod:분열하면 버려진 카드 더미에서 이 카드를 가져옵니다.", + "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL 2번 slimeboundmod:명령합니다. NL slimeboundmod:분열하면 버려진 카드 더미에서 이 카드를 가져옵니다." + }, + "Slimebound:OozeBath": { + "NAME": "점액 목욕", + "DESCRIPTION": "적 턴 시작 시 slimeboundmod:점액을 !slime! 부여합니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "적의 slimeboundmod:점액을 3배로 늘립니다. NL 소멸." + }, + "Slimebound:Overexert": { + "NAME": "과로", + "DESCRIPTION": "slimeboundmod:잠재력을 5 얻습니다. NL !M! 턴 후 모든 슬라임을 slimeboundmod:흡수합니다.", + "UPGRADE_DESCRIPTION": "slimeboundmod:잠재력을 5 얻습니다. NL 2번 slimeboundmod:명령합니다. NL !M! 턴 후 모든 슬라임을 slimeboundmod:흡수합니다." + }, + "Slimebound:Prepare": { + "NAME": "준비 동작", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 다음 턴에 [E] 를 얻고 카드를 !M! 장 뽑습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "다음 턴에 [E] 를 얻고 카드를 !M! 장 뽑습니다. NL 카드를 !M! 장 보존 합니다. 소멸" + }, + "Slimebound:PrepareCrush": { + "NAME": "준비: 으깨기", + "DESCRIPTION": "다음 턴에 [E] [E] [E] 과 힘을 !M! 얻고 *슬라임 *으깬다를 얻습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "다음 턴에 [E] [E] [E] 과 힘을 !M! 얻고 *슬라임 *으깬다+를 얻습니다. NL 소멸.", + "EXTENDED_DESCRIPTION": [ + "~슬라임...~ NL #r~으깬다!!!~" + ] + }, + "Slimebound:PressTheAttack": { + "NAME": "계속 공격해", + "DESCRIPTION": "피해를 !D! 줍니다. slimeboundmod:명령합니다.", + "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. 2번 slimeboundmod:명령합니다." + }, + "Slimebound:ProtectTheBoss": { + "NAME": "두목을 지켜라", + "DESCRIPTION": "다음 번에 적의 공격으로 체력을 잃는 것을 막아줍니다. NL 대신 최근에 생성된 슬라임을 slimeboundmod:흡수합니다.", + "UPGRADE_DESCRIPTION": "다음 번에 적의 공격으로 체력을 잃는 것을 2번 막아줍니다. NL 대신 최근에 생성된 슬라임을 slimeboundmod:흡수합니다." + }, + "Slimebound:RainOfGoop": { + "NAME": "끈적이 비", + "DESCRIPTION": "무작위 적들에게 slimeboundmod:점액을 !slime! 만큼 !M! 번 부여합니다.", + "UPGRADE_DESCRIPTION": "무작위 적들에게 slimeboundmod:점액을 !slime! 만큼 !M! 번 부여합니다." + }, + "Slimebound:RallyTheTroops": { + "NAME": "부하들 집결", + "DESCRIPTION": "피해를 !D! 줍니다. NL 이번 턴에 카드를 사용 할 때마다 !M! 번 까지 slimeboundmod:명령합니다." + }, + "Slimebound:Recollect": { + "NAME": "회상", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 무작위 *핥기 카드를 1장 expansioncontent:발굴합니다.", + "UPGRADE_DESCRIPTION": "방어도를 !B! 얻습니다. NL 무작위 *핥기 카드를 2장 expansioncontent:발굴합니다.", + "EXTENDED_DESCRIPTION": [ + "소멸된 게.. 없어.." + ] + }, + "Slimebound:Recycling": { + "NAME": "재수거", + "DESCRIPTION": "내 턴 시작 시 무작위 *핥기 카드를 1장 expansioncontent:발굴합니다.", + "UPGRADE_DESCRIPTION": "선천성. NL 내 턴 시작 시 무작위 *핥기 카드를 1장 expansioncontent:발굴합니다." + }, + "Slimebound:RejuvenatingLick": { + "NAME": "두 번 핥기", + "DESCRIPTION": "slimeboundmod:점액을 !slime! 만큼 2번 부여합니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "slimeboundmod:점액을 !slime! 만큼 2번 부여합니다. NL 카드를 1장 뽑습니다. NL 소멸." + }, + "Slimebound:Replication": { + "NAME": "자기복제", + "DESCRIPTION": "카드를 선택합니다. NL 그 카드를 복사해 뽑을 더미 맨 위에 놓습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "카드를 선택합니다. NL 그 카드를 한 장 복사해 얻습니다. NL 소멸.", + "EXTENDED_DESCRIPTION": [ + " 복사할 카드를 선택하십시오.", + " 복사해 뽑을 더미 맨 위에 놓을 카드를 선택하십시오." + ] + }, + "Slimebound:Repurpose": { + "NAME": "재설계", + "DESCRIPTION": "1번 slimeboundmod:흡수한 후, 무작위 slimeboundmod:전문가로 slimeboundmod:분열합니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "1번 slimeboundmod:흡수 후, 무작위 slimeboundmod:전문가로 slimeboundmod:분열합니다. NL slimeboundmod:명령합니다. NL 소멸." + }, + "Slimebound:RollThrough": { + "NAME": "구르기", + "DESCRIPTION": "적 전체에게 피해를 !D! 줍니다. NL 다음 !M! 번까지 slimeboundmod:태클 카드의 반동 피해를 받지 않습니다." + }, + "Slimebound:SamplingLick": { + "NAME": "맛보며 핥기", + "DESCRIPTION": "slimeboundmod:점액을 !slime! 부여합니다. NL 방어도를 !B! 얻습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "slimeboundmod:점액을 !slime! 부여합니다. NL 방어도를 !B! 얻습니다. NL 카드를 1장 뽑습니다. NL 소멸." + }, + "Slimebound:Schlurp": { + "NAME": "핥짝", + "DESCRIPTION": "slimeboundmod:점액을 !slime! 부여합니다. NL *핥기를 !M! 장 얻습니다.", + "UPGRADE_DESCRIPTION": "slimeboundmod:점액을 !slime! 부여합니다. NL *핥기를 !M! 장 얻습니다." + }, + "Slimebound:SelfFormingGoo": { + "NAME": "재형성", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 버린 카드 더미의 카드 하나를 뽑을 카드 더미 맨 위에 둡니다." + }, + "Slimebound:ServeAndProtect": { + "NAME": "넣기 & 보호", + "DESCRIPTION": "슬라임 하나당 방어도를 !B! 얻고 bronze:흐릿함을 1 얻습니다. NL 모든 슬라임을 slimeboundmod:흡수합니다. NL 소멸." + }, + "Slimebound:SlimeBarrage": { + "NAME": "모두 공격!", + "DESCRIPTION": "피해를 !D! 줍니다. 모든 슬라임에게 slimeboundmod:명령합니다.", + "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. 모든 슬라임에게 2번 slimeboundmod:명령합니다." + }, + "Slimebound:SlimeBrawl": { + "NAME": "슬라임 난투", + "DESCRIPTION": "슬라임 수만큼 뽑을 더미 맨 위 카드부터 사용합니다. NL 소멸." + }, + "Slimebound:SlimeCrush": { + "NAME": "슬라임 으깬다!!!", + "DESCRIPTION": "휘발성. NL 피해를 !D! 줍니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "휘발성. NL 적 전체에게 !D! 피해를 줍니다. NL 소멸." + }, + "Slimebound:SlimeSlap": { + "NAME": "슬라임 찰싹!", + "DESCRIPTION": "피해를 !D! 줍니다. NL 이 카드는 slimeboundmod:점액을 소모하지 않습니다." + }, + "Slimebound:SlimeSpikes": { + "NAME": "슬라임 가시", + "DESCRIPTION": "방어도를 !B! 얻고 가시를 !M! 얻습니다. 적 턴이 끝날 때 가시를 !M! 잃습니다." + }, + "Slimebound:SlimeTap": { + "NAME": "슬라임 회수", + "DESCRIPTION": "슬라임을 1번 slimeboundmod:흡수한 후, [E] 를 얻고 카드를 !M! 장 뽑습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "슬라임을 1번 slimeboundmod:흡수한 후, [E] [E] 를 얻고 카드를 !M! 장 뽑습니다. NL 소멸.", + "EXTENDED_DESCRIPTION": [ + "부하들이... 필요해..." + ] + }, + "Slimebound:SpikyOuterGoop": { + "NAME": "끈적이 갑옷", + "DESCRIPTION": "slimeboundmod:소비하면 방어도를 !M! 얻습니다." + }, + "Slimebound:Split": { + "NAME": "분열", + "DESCRIPTION": "slimeboundmod:특공대_슬라임으로 slimeboundmod:분열합니다. NL slimeboundmod:명령합니다." + }, + "Slimebound:SplitAcid": { + "NAME": "분열: 특공대", + "DESCRIPTION": "slimeboundmod:특공대_슬라임으로 slimeboundmod:분열합니다. NL !M! 번 slimeboundmod:명령합니다. ", + "UPGRADE_DESCRIPTION": "slimeboundmod:특공대_슬라임으로 slimeboundmod:분열합니다. NL 3번 slimeboundmod:명령합니다." + }, + "Slimebound:SplitBruiser": { + "NAME": "분열: 싸움꾼", + "DESCRIPTION": "slimeboundmod:싸움꾼_슬라임으로 slimeboundmod:분열합니다. NL !M! 번 slimeboundmod:명령합니다. ", + "UPGRADE_DESCRIPTION": "slimeboundmod:싸움꾼_슬라임으로 slimeboundmod:분열합니다. NL 3번 slimeboundmod:명령합니다." + }, + "Slimebound:SplitGreed": { + "NAME": "되살아나는 욕심쟁이", + "DESCRIPTION": "보존. NL 욕심쟁이 수액을 소환합니다. NL 소멸." + }, + "Slimebound:SplitLeeching": { + "NAME": "분열: 거머리", + "DESCRIPTION": "slimeboundmod:거머리_슬라임으로 slimeboundmod:분열합니다. NL !M! 번 slimeboundmod:명령합니다. ", + "UPGRADE_DESCRIPTION": "slimeboundmod:거머리_슬라임으로 slimeboundmod:분열합니다. NL 3번 slimeboundmod:명령합니다." + }, + "Slimebound:SplitMire": { + "NAME": "분열: 진흙탕", + "DESCRIPTION": "slimeboundmod:진흙탕_슬라임으로 slimeboundmod:분열합니다. NL !M! 번 slimeboundmod:명령합니다. ", + "UPGRADE_DESCRIPTION": "slimeboundmod:진흙탕_슬라임으로 slimeboundmod:분열합니다. NL 3번 slimeboundmod:명령합니다." + }, + "Slimebound:SplitScrap": { + "NAME": "되살아나는 날붙이", + "DESCRIPTION": "보존. NL 날붙이 수액을 소환합니다. NL 소멸." + }, + "Slimebound:SplitSpecialist": { + "NAME": "분열: 전문가", + "DESCRIPTION": "slimeboundmod:전문가 3종류 중 1가지를 선택해 slimeboundmod:분열합니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "slimeboundmod:전문가 3종류 중 1가지를 선택해 slimeboundmod:분열하고 slimeboundmod:명령합니다. NL 소멸." + }, + "Slimebound:Strike_Slimebound": { + "NAME": "타격", + "DESCRIPTION": "피해를 !D! 줍니다." + }, + "Slimebound:Tackle": { + "NAME": "태클", + "DESCRIPTION": "피해를 !D! 주고 반동 피해를 !SlimeboundSelfharm! 받습니다." + }, + "Slimebound:TagTeam": { + "NAME": "질척거리는 공격", + "DESCRIPTION": "피해를 !D! 줍니다. NL 무작위 슬라임으로 slimeboundmod:분열합니다. NL !M! 번 slimeboundmod:명령합니다.", + "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL 무작위 slimeboundmod:전문가로 slimeboundmod:분열합니다. NL !M! 번 slimeboundmod:명령합니다." + }, + "Slimebound:Teamwork": { + "NAME": "협동 정신", + "DESCRIPTION": "X번 slimeboundmod:명령합니다. NL 방어도를 !B! 만큼 X번 얻습니다.", + "UPGRADE_DESCRIPTION": "X+1번 slimeboundmod:명령합니다. NL 방어도를 !B! 만큼 X+1번 얻습니다." + }, + "Slimebound:TongueLash": { + "NAME": "혓바닥 채찍", + "DESCRIPTION": "피해를 !D! 줍니다. NL 소멸된 카드 중에 이름에 \"핥기\" 가 붙은 카드 하나당 피해량이 !M! 증가합니다." + }, + "Slimebound:ViciousTackle": { + "NAME": "난폭한 태클", + "DESCRIPTION": "적에게 피해를 !D! 주고 반동 피해를 !SlimeboundSelfharm! 받습니다. NL slimeboundmod:점액의 효과가 2배로 적용됩니다.", + "UPGRADE_DESCRIPTION": "적에게 피해를 !D! 주고 반동 피해를 !SlimeboundSelfharm! 받습니다. NL slimeboundmod:점액의 효과가 2배로 적용되고 slimeboundmod:점액만큼 회복합니다." + }, + "Slimebound:WasteNot": { + "NAME": "남기면 안돼", + "DESCRIPTION": "모든 *핥기 카드를 expansioncontent:발굴합니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "모든 *핥기 카드를 expansioncontent:발굴합니다.", + "EXTENDED_DESCRIPTION": [ + "소멸된 게... 없어..." + ] + } +} \ No newline at end of file diff --git a/src/main/resources/slimeboundResources/localization/kor/EventStrings.json b/src/main/resources/slimeboundResources/localization/kor/EventStrings.json index c1572a559..8690865b2 100644 --- a/src/main/resources/slimeboundResources/localization/kor/EventStrings.json +++ b/src/main/resources/slimeboundResources/localization/kor/EventStrings.json @@ -49,7 +49,7 @@ ], "OPTIONS": [ "[협상한다] ", - " #r을 #r잃습니다. #g날붙이 #g수액을 #g얻습니다. #rLocked if you Reach Inside.", + " #r을 #r잃습니다. #g날붙이 #g수액을 #g얻습니다. #r팔을 #r뻗어 #r뒤져본다 #r선택 #r시 #r잠금.", "[협상한다] 잠금 (화난 날붙이 수액)", "[떠난다]", "[협상한다] 잠금 (일반 혹은 고급 유물이 필요)" diff --git a/src/main/resources/slimeboundResources/localization/kor/KeywordStrings.json b/src/main/resources/slimeboundResources/localization/kor/KeywordStrings.json index 91080186a..b6563a129 100644 --- a/src/main/resources/slimeboundResources/localization/kor/KeywordStrings.json +++ b/src/main/resources/slimeboundResources/localization/kor/KeywordStrings.json @@ -11,7 +11,7 @@ "absorbed" ], "PROPER_NAME": "흡수", - "DESCRIPTION": "가장 최근에 생성한 #y슬라임을 흡수하고 #y힘을 1 얻습니다." + "DESCRIPTION": "가장 최근에 생성한 #y슬라임을 흡수하고 #y힘을 #b1 얻습니다." }, { "NAMES": [ @@ -23,7 +23,7 @@ "splitting" ], "PROPER_NAME": "분열", - "DESCRIPTION": "#y슬라임 부하를 생성합니다. 생성된 슬라임은 내 턴 시작 시 행동합니다. NL NL 빈 슬롯이 없다면 가장 오래된 슬라임이 #y흡수되며 #y힘을 1 얻습니다." + "DESCRIPTION": "#y슬라임 부하를 생성합니다. 생성된 슬라임은 내 턴 시작 시 행동합니다. NL NL 빈 슬롯이 없다면 가장 오래된 슬라임이 #y흡수되며 #y힘을 #b1 얻습니다." }, { "NAMES": [ @@ -35,7 +35,7 @@ "gooped" ], "PROPER_NAME": "점액", - "DESCRIPTION": "#y점액을 보유한 적 공격 시 모든 #y점액을 제거하고 #y점액당 피해량이 #b1 증가합니다. NL 모든 #y소비 효과를 발동시킵니다." + "DESCRIPTION": "#y점액을 보유한 적 공격 시 모든 #y점액을 제거하고 #y점액만큼 피해량을 증가시키고 모든 #y소비 효과를 발동시킵니다." }, { "NAMES": [ @@ -44,7 +44,7 @@ "잠재력" ], "PROPER_NAME": "잠재력", - "DESCRIPTION": "생성한 모든 슬라임의 피해량을 증가시킵니다. 잠재력 2당 각 슬라임의 고유 효과를 1 증가시킵니다." + "DESCRIPTION": "생성한 모든 슬라임의 피해량을 증가시킵니다. 잠재력 #b2 당 각 슬라임의 고유 효과를 #b1 증가시킵니다 (올림 계산)." }, { "NAMES": [ @@ -81,7 +81,7 @@ "bruiser" ], "PROPER_NAME": "싸움꾼 슬라임", - "DESCRIPTION": "내 턴 시작 시 피해를 #b5 주는 슬라임입니다." + "DESCRIPTION": "내 턴 시작 시 피해를 #b3 만큼 2번 주는 슬라임입니다." }, { "NAMES": [ diff --git a/src/main/resources/slimeboundResources/localization/kor/OrbStrings.json b/src/main/resources/slimeboundResources/localization/kor/OrbStrings.json index d52d5dffc..6a15ec4cc 100644 --- a/src/main/resources/slimeboundResources/localization/kor/OrbStrings.json +++ b/src/main/resources/slimeboundResources/localization/kor/OrbStrings.json @@ -17,7 +17,7 @@ "NAME": "싸움꾼 슬라임", "DESCRIPTION": [ "내 턴 시작 시 피해를 #b", - " 줍니다." + " 만큼 2번 줍니다." ] }, "Slimebound:ScrapOozeSlime": { @@ -108,7 +108,7 @@ "DESCRIPTION": [ "내 턴 시작 시 피해를 #b", " 주고 카드를 #b", - " 장 뽑아줍니다." + " 장 뽑아줍니다. 카드를 뽑아주는 효과는 잠재력으로 증가하지 않습니다." ] }, "Slimebound:DarklingSlime": { diff --git a/src/main/resources/slimeboundResources/localization/kor/PowerStrings.json b/src/main/resources/slimeboundResources/localization/kor/PowerStrings.json index fff302904..63830393e 100644 --- a/src/main/resources/slimeboundResources/localization/kor/PowerStrings.json +++ b/src/main/resources/slimeboundResources/localization/kor/PowerStrings.json @@ -119,14 +119,14 @@ "Slimebound:SelfFormingGooPower": { "NAME": "재형성", "DESCRIPTIONS": [ - "슬라임을 #y흡수할 때마다 힘을 #b", + "슬라임을 #y흡수할 때마다 #y힘을 #b", " 얻습니다." ] }, "Slimebound:SelfFormingGooPowerPlus": { "NAME": "재형성+", "DESCRIPTIONS": [ - "슬라임을 #y흡수할 때마다 민첩을 #b", + "슬라임을 #y흡수할 때마다 #y민첩을 #b", " 얻습니다." ] }, diff --git a/src/main/resources/slimeboundResources/localization/kor/RelicStrings.json b/src/main/resources/slimeboundResources/localization/kor/RelicStrings.json index b73a1f380..f0ba08007 100644 --- a/src/main/resources/slimeboundResources/localization/kor/RelicStrings.json +++ b/src/main/resources/slimeboundResources/localization/kor/RelicStrings.json @@ -26,7 +26,7 @@ "NAME": "노막의 돌", "FLAVOR": "당신의 점액질 군단에게 선물하면 슬라임들이 춤추듯 움직입니다.", "DESCRIPTIONS": [ - "전투 시작 시 #yslimeboundmod:잠재력을 #b2 얻습니다." + "전투 시작 시 #yslimeboundmod:잠재력을 #b1 얻습니다." ] }, "Slimebound:DailySplitRelic": { @@ -100,7 +100,7 @@ "NAME": "젤라틴 큐브", "FLAVOR": "이봐요, 당신 몸에 딱 달라붙었다구요.", "DESCRIPTIONS": [ - "#y상태이상을 뽑을 때마다 카드를 #b1 장 뽑습니다." + "2턴 동안 매 턴 #y상태이상 또는 #r저주를 뽑을 때마다 카드를 #b1 장 뽑습니다. #y공허를 뽑았다면 [E] 를 얻습니다." ] } } diff --git a/src/main/resources/slimeboundResources/localization/spa/CardStrings.json b/src/main/resources/slimeboundResources/localization/spa/CardStrings.json new file mode 100644 index 000000000..718db6323 --- /dev/null +++ b/src/main/resources/slimeboundResources/localization/spa/CardStrings.json @@ -0,0 +1,388 @@ +{ + "Slimebound:AcidTongue": { + "NAME": "Baba Expansiva", + "DESCRIPTION": "Los efectos que aplican slimeboundmod:Baba aplican !M! más." + }, + "Slimebound:BestDefense": { + "NAME": "Temeridad", + "DESCRIPTION": "Tus cartas de \"Embestida\" Hacen !M! más de daño a los enemigos, y 1 más de daño a ti." + }, + "Slimebound:CheckThePlaybook": { + "NAME": "Consultar Estrategia", + "DESCRIPTION": "Obtén 3 cartas aleatorias de \"Embestida\". Cuestan 1 menos este combate. NL Agota." + }, + "Slimebound:Chomp": { + "NAME": "Mordisco", + "DESCRIPTION": "Haz !D! de daño. NL Reduce el coste de una \"Embestida\" aleatoria de tu mano a 0 este turno.", + "UPGRADE_DESCRIPTION": "Haz !D! de daño. NL Reduce el coste de una \"Embestida\" aleatoria de tu mano a 0 este combate." + }, + "Slimebound:ComboTackle": { + "NAME": "Embestida con Impulso", + "DESCRIPTION": "Haz !D! de daño. NL Recibes !SlimeboundSelfharm! de daño. NL Roba !M! cartas." + }, + "Slimebound:CorrosiveSpit": { + "NAME": "Escupitajo Corrosivo", + "DESCRIPTION": "Aplica !slime! slimeboundmod:Baba." + }, + "Slimebound:Darklings": { + "NAME": "Dúo Oscuro", + "DESCRIPTION": "slimeboundmod:Divídete en slimeboundmod:baba_obscura !M! veces. NL Agota.", + "UPGRADE_DESCRIPTION": "Trío Obscuro" + }, + "Slimebound:Defend_Slimebound": { + "NAME": "Defender", + "DESCRIPTION": "Obtén !B! de Bloqueo." + }, + "Slimebound:DisruptingSlam": { + "NAME": "Merecido", + "DESCRIPTION": "Haz !D! de daño a TODOS los enemigos. NL expansioncontent:Exhuma !M! cartas de \"Lamida\" aleatorias." + }, + "Slimebound:Dissolve": { + "NAME": "Bocado Rápido", + "DESCRIPTION": "Roba !M! carta. NL Agota una carta. Obtén *Lamidas igual a su coste. NL Agota.", + "UPGRADE_DESCRIPTION": "Roba !M! cartas. NL Agota una carta. Obtén *Lamidas igual a su coste. NL Agota." + }, + "Slimebound:DivideAndConquer": { + "NAME": "Dividir y Vencer", + "DESCRIPTION": "Haz !D! de daño a un enemigo aleatorio por cada Baba. NL slimeboundmod:Absorbelas. NL Agota." + }, + "Slimebound:DouseInSlime": { + "NAME": "Empapar en Baba", + "DESCRIPTION": "Aplica !slime! slimeboundmod:Baba. NL El siguiente Ataque usado contra este enemigo no elimina slimeboundmod:Baba." + }, + "Slimebound:DuplicatedForm": { + "NAME": "Forma Duplicada", + "DESCRIPTION": "La primera carta que apunte a enemigos que juegues en cada turno se juega dos veces.", + "UPGRADE_DESCRIPTION": "Gana [E] por turno. NL La primera carta que apunte a enemigos que juegues en cada turno se juega dos veces.", + "EXTENDED_DESCRIPTION": [ + "Necesito... salud..." + ] + }, + "Slimebound:Equalize": { + "NAME": "Igualar", + "DESCRIPTION": "Haz !D! de daño. NL Cura !M! PV. NL slimeboundmod:Consume - Juega esta carta dos veces. NL Agota." + }, + "Slimebound:FinishingTackle": { + "NAME": "Embestida Inicial", + "DESCRIPTION": "Haz !D! de daño. NL Recibes !SlimeboundSelfharm! de daño. slimeboundmod:Consume - Aplica !M! Vulnerable." + }, + "Slimebound:FirmFortitude": { + "NAME": "Liquidar", + "DESCRIPTION": "Pierde 2 de Fuerza. NL Gana !M! de slimeboundmod:Potencia." + }, + "Slimebound:FlameTackle": { + "NAME": "Embestida Ígnea", + "DESCRIPTION": "Haz !D! de daño. NL Recibes !SlimeboundSelfharm! de daño. NL Tus cartas \"Embestida\" Hacen !M! más de daño este combate." + }, + "Slimebound:FormOfPuddle": { + "NAME": "Forma de Charco", + "DESCRIPTION": "Etérea. NL Obtén 1 de Intangible. NL Agota." + }, + "Slimebound:ForwardTackle": { + "NAME": "Embestida Avanzada", + "DESCRIPTION": "Haz !D! de daño. NL Recibes !SlimeboundSelfharm! de daño. NL slimeboundmod:Ordenar dos veces.", + "UPGRADE_DESCRIPTION": "Haz !D! de daño. NL Recibes !SlimeboundSelfharm! de daño. NL slimeboundmod:Ordenar tres veces." + }, + "Slimebound:Gluttony": { + "NAME": "Glotonería", + "DESCRIPTION": "La primera vez que slimeboundmod:Consume cada turno, obtén una *Lamida.", + "UPGRADE_DESCRIPTION": "Innata. NL La primera vez que slimeboundmod:Consume cada turno, obtén una *Lamida." + }, + "Slimebound:GoopSpray": { + "NAME": "Rociada de Baba", + "DESCRIPTION": "Aplica !slime! slimeboundmod:Baba y !M! de Débil a TODOS los enemigos." + }, + "Slimebound:GoopTackle": { + "NAME": "Embestida Encadenada", + "DESCRIPTION": "Haz !D! de daño. NL Recibes !SlimeboundSelfharm! de daño. NL Gana una carta de \"Embestida\" aleatoria. Cuesta 0 este turno.", + "UPGRADE_DESCRIPTION": "Haz !D! de daño. NL Recibes !SlimeboundSelfharm! de daño. NL Gana una carta mejorada de \"Embestida\" aleatoria. Cuesta 0 este turno." + }, + "Slimebound:Grow": { + "NAME": "Crecer", + "DESCRIPTION": "Pierde 1 espacio de Baba a cambio de !M! de Fuerza y !M! de Destreza." + }, + "Slimebound:GrowthPunch": { + "NAME": "Puño Creciente", + "DESCRIPTION": "Obtén !B! de Bloqueo. NL Haz !D! de daño. NL slimeboundmod:Consume - Aumenta los efectos de esta carta en !M! durante este combate." + }, + "Slimebound:HauntingLick": { + "NAME": "Lamida Fantasmal", + "DESCRIPTION": "Aplica !M! de Vulnerable y !slime! slimeboundmod:Baba. NL Agota.", + "UPGRADE_DESCRIPTION": "Aplica !M! de Vulnerable y !slime! slimeboundmod:Baba. NL Roba una carta. NL Agota." + }, + "Slimebound:HungryTackle": { + "NAME": "Embestida Hambrienta", + "DESCRIPTION": "Haz !D! de daño. NL Recibes !SlimeboundSelfharm! de daño. NL expansioncontent:Exhuma una carta de \"Lamida\" aleatoria.", + "UPGRADE_DESCRIPTION": "Haz !D! de daño. NL Recibes !SlimeboundSelfharm! de daño. NL expansioncontent:Exhuma 2 cartas de \"Lamida\" aleatorias." + }, + "Slimebound:ItLooksTasty": { + "NAME": "Se Ve Delicioso", + "DESCRIPTION": "Haz !D! de daño. slimeboundmod:Consume - Obtén una *Lamida.", + "UPGRADE_DESCRIPTION": "Haz !D! de daño. slimeboundmod:Consume - Obtén una *Lamida+." + }, + "Slimebound:LeadByExample": { + "NAME": "Dar el Ejemplo", + "DESCRIPTION": "La primera carta que juegues cada turno que apunte a enemigos también slimeboundmod:Ordena.", + "UPGRADE_DESCRIPTION": "Las primeras !M! cartas que juegues cada turno que apunten a enemigos también slimeboundmod:Ordenan." + }, + "Slimebound:LeechEnergy": { + "NAME": "Drenar Energía", + "DESCRIPTION": "Haz !D! de daño. slimeboundmod:Consume - Gana [E] y roba !M! carta.", + "UPGRADE_DESCRIPTION": "Haz !D! de daño. slimeboundmod:Consume - Gana [E] y roba !M! cartas." + }, + "Slimebound:LeechLife": { + "NAME": "Drenar Vida", + "DESCRIPTION": "Etérea. NL Haz !D! de daño. Cura PV igual al daño no bloqueado. NL Agota." + }, + "Slimebound:LeechingTouch": { + "NAME": "Golpe Drenante", + "DESCRIPTION": "Haz !D! de daño. NL slimeboundmod:Consume - Gana Bloqueo igual a la slimeboundmod:Baba del enemigo." + }, + "Slimebound:LevelUp": { + "NAME": "Subir de Nivel", + "DESCRIPTION": "Obtén !M! de slimeboundmod:Potencia.", + "UPGRADE_DESCRIPTION": "Obtén !M! de slimeboundmod:Potencia y 1 espacio de Baba adicional." + }, + "Slimebound:Lick": { + "NAME": "Lamida", + "DESCRIPTION": "Aplica !slime! slimeboundmod:Baba. NL Agota - slimeboundmod:Enterrada.", + "UPGRADE_DESCRIPTION": "Aplica !M! de Débil y !slime! slimeboundmod:Baba. NL Roba una carta. NL Agota - slimeboundmod:Enterrada." + }, + "Slimebound:LivingWall": { + "NAME": "Muro Vivo", + "DESCRIPTION": "Obtén !B! de Bloqueo. NL Aplica !slime! slimeboundmod:Baba a los atacantes este turno." + }, + "Slimebound:MassFeed": { + "NAME": "Alimentación Masiva", + "DESCRIPTION": "Haz !D! de daño a TODOS los enemigos. NL Si es Fatal, aumenta tu PV máximo en !M!. NL Agota." + }, + "Slimebound:MassRepurpose": { + "NAME": "Reutilización Masiva", + "DESCRIPTION": "slimeboundmod:Absorbe TODAS las Babas. Divídete en un slimeboundmod:Especialista aleatorio por cada una. NL Agota.", + "UPGRADE_DESCRIPTION": "slimeboundmod:Absorbe TODAS las Babas. Divídete en un slimeboundmod:Especialista aleatorio por cada una. slimeboundmod:Ordenalas. NL Agota." + }, + "Slimebound:MegaLick": { + "NAME": "Mega-Lamida", + "DESCRIPTION": "Aplica !M! de Débil y !slime! slimeboundmod:Baba a TODOS los enemigos. NL Agota.", + "UPGRADE_DESCRIPTION": "Aplica !M! de Débil y !slime! slimeboundmod:Baba a TODOS los enemigos. NL Roba una carta. NL Agota." + }, + "Slimebound:MinionMaster": { + "NAME": "Amo de los Esbirros", + "DESCRIPTION": "Cada vez que juegues una carta con slimeboundmod:Ordenar, slimeboundmod:Ordena de nuevo.", + "UPGRADE_DESCRIPTION": "Innata. NL Cada vez que juegues una carta con slimeboundmod:Ordenar, slimeboundmod:Ordena de nuevo." + }, + "Slimebound:Nibble": { + "NAME": "Mordisquito y Lamida", + "DESCRIPTION": "Haz !D! de daño. NL Obtén una *Lamida. NL Agota.", + "UPGRADE_DESCRIPTION": "Haz !D! de daño. NL Obtén una *Lamida. NL Roba una carta. NL Agota." + }, + "Slimebound:OneTwoCombo": { + "NAME": "Combo Uno-Dos", + "DESCRIPTION": "Haz !D! de daño. NL slimeboundmod:Ordena. NL Cuando slimeboundmod:Divide, esta carta vuelve de la pila de descartes a tu mano.", + "UPGRADE_DESCRIPTION": "Haz !D! de daño. NL slimeboundmod:Ordena dos veces. NL Cuando slimeboundmod:Divide, esta carta vuelve de la pila de descartes a tu mano." + }, + "Slimebound:OozeBath": { + "NAME": "Baño de Baba", + "DESCRIPTION": "Aplica !slime! slimeboundmod:Baba al enemigo objetivo al inicio de cada uno de sus turnos. NL Agota.", + "UPGRADE_DESCRIPTION": "Triplica la slimeboundmod:Baba del enemigo. NL Agota." + }, + "Slimebound:Overexert": { + "NAME": "Sobreesfuerzo", + "DESCRIPTION": "Obtén 5 de slimeboundmod:Potencia. NL En !M! turnos, slimeboundmod:Absorbe todas las Babas.", + "UPGRADE_DESCRIPTION": "Obtén 5 de slimeboundmod:Potencia. NL slimeboundmod:Ordena dos veces. NL En !M! turnos, slimeboundmod:Absorbe todas las Babas." + }, + "Slimebound:Prepare": { + "NAME": "Prepararse", + "DESCRIPTION": "Obtén !B! de Bloqueo. NL En el siguiente turno, gana [E] y roba !M! cartas. NL Agota.", + "UPGRADE_DESCRIPTION": "En el siguiente turno, gana [E] y roba !M! cartas. NL Conserva hasta !M! cartas este turno. Agota." + }, + "Slimebound:PrepareCrush": { + "NAME": "Preparar: Aplastamiento", + "DESCRIPTION": "En el siguiente turno, obtén *¡TRITURABABA!, [E] [E] [E] y !M! de Fuerza. NL Agota.", + "UPGRADE_DESCRIPTION": "En el siguiente turno, obtén *¡TRITURABABA!+, [E] [E] [E] [E] y !M! de Fuerza. NL Agota.", + "EXTENDED_DESCRIPTION": [ + "~Baba...~ NL #r~¡APLASTAR!~" + ] + }, + "Slimebound:PressTheAttack": { + "NAME": "Presionar el Ataque", + "DESCRIPTION": "Haz !D! de daño. slimeboundmod:Ordena.", + "UPGRADE_DESCRIPTION": "Haz !D! de daño. slimeboundmod:Ordena dos veces." + }, + + "Slimebound:ProtectTheBoss": { + "NAME": "Proteger al Jefe", + "DESCRIPTION": "Evita la próxima vez que recibirías daño de un ataque enemigo, slimeboundmod:Absorbiendo a tu Baba líder en su lugar.", + "UPGRADE_DESCRIPTION": "Evita las próximas 2 veces que recibirías daño de un ataque enemigo, slimeboundmod:Absorbiendo a tu Baba líder en su lugar." + }, + "Slimebound:RainOfGoop": { + "NAME": "Lluvia de Baba", + "DESCRIPTION": "Aplica !slime! slimeboundmod:Baba a un enemigo aleatorio !M! veces.", + "UPGRADE_DESCRIPTION": "Aplica !slime! slimeboundmod:Baba a un enemigo aleatorio !M! veces." + }, + "Slimebound:RallyTheTroops": { + "NAME": "Reunir al Escuadrón", + "DESCRIPTION": "Haz !D! de daño. NL Las siguientes !M! cartas que juegues este turno activarán slimeboundmod:Ordenar." + }, + "Slimebound:Recollect": { + "NAME": "Recuperar", + "DESCRIPTION": "Obtén !B! de Bloqueo. NL expansioncontent:Exhuma una carta \"Lamida\" aleatoria.", + "UPGRADE_DESCRIPTION": "Obtén !B! de Bloqueo. NL expansioncontent:Exhuma 2 cartas \"Lamida\" aleatorias.", + "EXTENDED_DESCRIPTION": [ + "No... agotada..." + ] + }, + "Slimebound:Recycling": { + "NAME": "Reciclaje", + "DESCRIPTION": "Al inicio de tu turno, expansioncontent:Exhuma una carta \"Lamida\" aleatoria.", + "UPGRADE_DESCRIPTION": "Innata. NL Al inicio de tu turno, expansioncontent:Exhuma una carta \"Lamida\" aleatoria." + }, + "Slimebound:RejuvenatingLick": { + "NAME": "Lamida Revitalizante", + "DESCRIPTION": "Aplica !slime! slimeboundmod:Baba 2 veces. NL Agota.", + "UPGRADE_DESCRIPTION": "Aplica !slime! slimeboundmod:Baba 2 veces. NL Roba una carta. NL Agota." + }, + "Slimebound:Replication": { + "NAME": "Replicación", + "DESCRIPTION": "Elige una carta. NL Pon una copia encima de tu pila de robo. NL Agota.", + "UPGRADE_DESCRIPTION": "Elige una carta. NL Obtén una copia de ella. NL Agota.", + "EXTENDED_DESCRIPTION": [ + " para agregar una copia a tu mano.", + " para poner una copia encima de tu pila de robo." + ] + }, + "Slimebound:Repurpose": { + "NAME": "Reutilizar", + "DESCRIPTION": "slimeboundmod:Absorber - Divídete en un slimeboundmod:Especialista aleatorio. NL Agota.", + "UPGRADE_DESCRIPTION": "slimeboundmod:Absorber - Divídete en un slimeboundmod:Especialista aleatorio. NL slimeboundmod:Ordena. NL Agota." + }, + "Slimebound:RollThrough": { + "NAME": "Rodar a Través", + "DESCRIPTION": "Haz !D! de daño a TODOS los enemigos. NL No recibes daño de las próximas !M! cartas \"Embestida\"." + }, + "Slimebound:SamplingLick": { + "NAME": "Lamida de Prueba", + "DESCRIPTION": "Aplica !slime! slimeboundmod:Baba. NL Obtén !B! de Bloqueo. NL Agota.", + "UPGRADE_DESCRIPTION": "Aplica !slime! slimeboundmod:Baba. NL Obtén !B! de Bloqueo. NL Roba una carta. NL Agota." + }, + "Slimebound:Schlurp": { + "NAME": "Schlurp", + "DESCRIPTION": "Aplica !slime! slimeboundmod:Baba. NL Obtén !M! *Lamida.", + "UPGRADE_DESCRIPTION": "Aplica !slime! slimeboundmod:Baba. NL Obtén !M! *Lamidas." + }, + "Slimebound:SelfFormingGoo": { + "NAME": "Baba Reformante", + "DESCRIPTION": "Obtén !B! de Bloqueo. NL Coloca una carta de tu pila de descarte encima de tu pila de robo." + }, + "Slimebound:ServeAndProtect": { + "NAME": "Servir y Proteger", + "DESCRIPTION": "Obtén !B! de Bloqueo y 1 de bronze:Desenfoque por cada Baba. NL slimeboundmod:Absorbelas todas. NL Agota." + }, + "Slimebound:SlimeBarrage": { + "NAME": "¡Ataque Baboso!", + "DESCRIPTION": "Haz !D! de daño. slimeboundmod:Ordena a TODAS las Babas.", + "UPGRADE_DESCRIPTION": "Haz !D! de daño. slimeboundmod:Ordena a TODAS las Babas dos veces." + }, + "Slimebound:SlimeBrawl": { + "NAME": "Pelea Babosa", + "DESCRIPTION": "Juega la primera carta de tu pila de robo. Repite por cada una de tus Babas invocadas. NL Agota." + }, + "Slimebound:SlimeCrush": { + "NAME": "¡TRITURABABA!", + "DESCRIPTION": "Etérea. NL Haz !D! de daño. NL Agota.", + "UPGRADE_DESCRIPTION": "Etérea. NL Haz !D! de daño a TODOS los enemigos. NL Agota." + }, + "Slimebound:SlimeSlap": { + "NAME": "Bofetada Babosa", + "DESCRIPTION": "Haz !D! de daño. NL No elimina slimeboundmod:Baba." + }, + "Slimebound:SlimeSpikes": { + "NAME": "Púas de Baba", + "DESCRIPTION": "Obtén !B! de Bloqueo y !M! de Espinas temporales." + }, + "Slimebound:SlimeTap": { + "NAME": "Toque Baboso", + "DESCRIPTION": "slimeboundmod:Absorber - Obtén [E] y roba !M! cartas. NL Agota.", + "UPGRADE_DESCRIPTION": "slimeboundmod:Absorber - Obtén [E] [E] y roba !M! cartas. NL Agota.", + "EXTENDED_DESCRIPTION": [ + "Necesito... babas..." + ] + }, + "Slimebound:SpikyOuterGoop": { + "NAME": "Armadura de Baba", + "DESCRIPTION": "Obtén !M! de Bloqueo cada vez que slimeboundmod:Consume." + }, + "Slimebound:Split": { + "NAME": "Dividir", + "DESCRIPTION": "slimeboundmod:Divídete en una slimeboundmod:Baba_Guerrilla. NL slimeboundmod:Ordena." + }, + "Slimebound:SplitAcid": { + "NAME": "Dividir: Guerrilla", + "DESCRIPTION": "slimeboundmod:Divídete en un slimeboundmod:Baba_Guerrilla. NL slimeboundmod:Ordena !M! veces.", + "UPGRADE_DESCRIPTION": "slimeboundmod:Divídete en un slimeboundmod:Baba_Guerrilla. NL slimeboundmod:Ordena tres veces." + }, + "Slimebound:SplitBruiser": { + "NAME": "Dividir: Bruto", + "DESCRIPTION": "slimeboundmod:Divídete en un slimeboundmod:Baba_Bruta. NL slimeboundmod:Ordena !M! veces.", + "UPGRADE_DESCRIPTION": "slimeboundmod:Divídete en un slimeboundmod:Baba_Bruta. NL slimeboundmod:Ordena tres veces." + }, + "Slimebound:SplitGreed": { + "NAME": "Revivir: Codicia", + "DESCRIPTION": "Conservar. NL Invoca una Baba Codiciosa. NL Agota." + }, + "Slimebound:SplitLeeching": { + "NAME": "Dividir: Absorbente", + "DESCRIPTION": "slimeboundmod:Divídete en un slimeboundmod:Baba_Absorbente. NL slimeboundmod:Ordena !M! veces.", + "UPGRADE_DESCRIPTION": "slimeboundmod:Divídete en un slimeboundmod:Baba_Absorbente. NL slimeboundmod:Ordena tres veces." + }, + "Slimebound:SplitMire": { + "NAME": "Dividir: Lodosa", + "DESCRIPTION": "slimeboundmod:Divídete en un slimeboundmod:Baba_Lodosa. NL slimeboundmod:Ordena !M! veces.", + "UPGRADE_DESCRIPTION": "slimeboundmod:Divídete en un slimeboundmod:Baba_Lodosa. NL slimeboundmod:Ordena tres veces." + }, + "Slimebound:SplitScrap": { + "NAME": "Revivir Chatarra", + "DESCRIPTION": "Conservar. NL Invoca una Baba de Chatarra. NL Agota." + }, + "Slimebound:SplitSpecialist": { + "NAME": "Dividir: Especialista", + "DESCRIPTION": "Elige 1 de 3 slimeboundmod:Especialistas para slimeboundmod:Dividirte. NL Agota.", + "UPGRADE_DESCRIPTION": "Elige 1 de 3 slimeboundmod:Especialistas para slimeboundmod:Dividirte. NL slimeboundmod:Ordena. NL Agota." + }, + "Slimebound:Strike_Slimebound": { + "NAME": "Golpe", + "DESCRIPTION": "Haz !D! de daño." + }, + "Slimebound:Tackle": { + "NAME": "Embestida", + "DESCRIPTION": "Haz !D! de daño. NL Recibes !SlimeboundSelfharm! de daño." + }, + "Slimebound:TagTeam": { + "NAME": "Golpe Glop", + "DESCRIPTION": "Haz !D! de daño. NL slimeboundmod:Divídete en una Baba aleatoria. NL slimeboundmod:Ordena !M! veces.", + "UPGRADE_DESCRIPTION": "Haz !D! de daño. NL slimeboundmod:Divídete en una slimeboundmod:Especialista aleatoria. NL slimeboundmod:Ordena !M! veces." + }, + "Slimebound:Teamwork": { + "NAME": "Trabajo en Equipo", + "DESCRIPTION": "slimeboundmod:Ordena X veces. NL Obtén !B! de Bloqueo X veces.", + "UPGRADE_DESCRIPTION": "slimeboundmod:Ordena X+1 veces. NL Obtén !B! de Bloqueo X+1 veces." + }, + "Slimebound:TongueLash": { + "NAME": "Latigazo de Lengua", + "DESCRIPTION": "Haz !D! de daño. Hace !M! de daño adicional por cada carta \"Lamer\" agotada." + }, + "Slimebound:ViciousTackle": { + "NAME": "Embestida Viciosa", + "DESCRIPTION": "Haz !D! de daño. NL Recibes !SlimeboundSelfharm! de daño. Hace el doble del bono de daño de slimeboundmod:Baba.", + "UPGRADE_DESCRIPTION": "Haz !D! de daño. NL Recibes !SlimeboundSelfharm! de daño. Hace el doble del bono de daño Y curación de slimeboundmod:Baba." + }, + "Slimebound:WasteNot": { + "NAME": "Nada se Desperdicia", + "DESCRIPTION": "expansioncontent:Exhuma todas las cartas \"Lamer\". NL Agota.", + "UPGRADE_DESCRIPTION": "expansioncontent:Exhuma todas las cartas \"Lamer\".", + "EXTENDED_DESCRIPTION": [ + "No... están agotadas..." + ] + } + +} diff --git a/src/main/resources/slimeboundResources/localization/spa/CharacterStrings.json b/src/main/resources/slimeboundResources/localization/spa/CharacterStrings.json new file mode 100644 index 000000000..14cf08382 --- /dev/null +++ b/src/main/resources/slimeboundResources/localization/spa/CharacterStrings.json @@ -0,0 +1,16 @@ +{ + "Slimebound": { + "NAMES": [ + "El Rey Babosa" + ], + "TEXT": [ + "El general más viscoso del Corazón. NL Puede luchar como uno solo... o como muchos.", + "Debo... absorber... el Corazón...", + "Al avanzar por una calle sin iluminar, te topas con varias figuras encapuchadas realizando un oscuro ritual. Al acercarte, se giran hacia ti al unísono, de manera inquietante. El más alto de ellos muestra unos colmillos afilados y extiende una larga mano pálida hacia ti. NL ~\"Únete~ ~a~ ~nosotros,~ ~señor~ ~viscoso,~ ~y~ ~siente~ ~el~ ~calor~ ~de~ ~la~ ~Aguja.\"~" + ], + "KEYWORDS": [ + "El general más viscoso del Corazón.", + "Debo... absorber... el Corazón..." + ] + } +} diff --git a/src/main/resources/slimeboundResources/localization/spa/EventStrings.json b/src/main/resources/slimeboundResources/localization/spa/EventStrings.json new file mode 100644 index 000000000..6fe936105 --- /dev/null +++ b/src/main/resources/slimeboundResources/localization/spa/EventStrings.json @@ -0,0 +1,105 @@ +{ + "Slimebound:Hunted": { + "NAME": "El Jefe se Acerca", + "DESCRIPTIONS": [ + "Una voz retumba en la Aguja... NL NL #r~¡PLASTA APLASTANTE!~ NL NL La enorme baba rápidamente te alcanza, bloqueando tu camino. Parece que ha crecido desde el Exordio, consumiendo y fortaleciéndose mientras seguía tu rastro.", + "¿Puede ser realmente tan fácil?", + "Despachas al Jefe Baba con facilidad, reclamando sus posesiones como recompensa. Después de todo, ¡es un sombrero muy elegante!" + ], + "OPTIONS": [ + "[Enfrentar] #rLucha contra el #rJefe #rBaba. Recompensa: #gSombrerito #gElegante.", + "[Huir aterrorizado] #rMaldición #r- #rVergüenza." + ] + }, + "Slimebound:WorldofGoop": { + "NAME": "Mundo de Baba", + "DESCRIPTIONS": [ + "Caes en un charco. NL @¡ESTÁ@ @HECHO@ @DE@ #g@BABA@ #g@GOOP!@ NL Tranquilamente, te bañas mientras te conectas con la baba, disfrutando de un momento de respiro. NL NL Al salir, notas en el charco las #yalmas de algunos desafortunados aventureros, siendo lentamente consumidas por una criatura glotona.", + "Sales del vigorizante baño de baba, absorbiendo las #yalmas, dejando a la criatura con una triste expresión en su forma amorfa.", + "Logras negociar con la criatura para darle más sabrosas #yalmas si te ayuda en tu viaje. NL Tú y tu nuevo #gamigo salen del baño de baba juntos." + ], + "OPTIONS": [ + "[Reunir almas] #gGana #g75 #gAlmas.", + "[Reclutar] #rPierde #r75 #rAlmas. #gObtén #yBaba #yCodiciosa.", + "[Marcharse]", + "[Bloqueado] Requiere 75 Almas." + ] + }, + "Slimebound:SlimeTalk": { + "NAME": "Conversaciones Babosas", + "DESCRIPTIONS": [ + "~¡No~ ~me~ ~absorbas!~", + "~¿Te~ ~llevas~ ~nuestras~ ~almas?~", + "~Se~ ~alimentará~ ~de~ ~nosotros...~", + "~¡El~ ~Jefe!~", + "Ese sombrero... NL #r~¡Debo~ #r~tenerlo!~", + "~¿Por~ ~qué~", + "~no~ ~nos~", + "~deja~ ~jugar?~", + "~Nos~ ~consumirá...~", + "~Es~ ~tan~ ~fuerte...~", + "~Es~ ~como~ ~nosotros...~", + "~¡QUÉ~ #r~SOMBRERO!~" + ] + }, + "Slimebound:ScrapOoze": { + "NAME": "Baba de Chatarra", + "DESCRIPTIONS": [ + "Cualquier baba es un aliado en tu causa. Con ofrendas de nueva chatarra y tesoros, la Baba de Chatarra se une a tu misión." + ], + "OPTIONS": [ + "[Reclutar] #rPierde ", + ". Obtén #gBaba #gde #gChatarra [REMOVE_SPACE]. #rBloqueado si has hurgado.", + "[Reclutar] Bloqueado (Has enfadado a la Baba de Chatarra)", + "[Marcharse]", + "[Reclutar] Bloqueado (Requiere una Reliquia Común o Poco Común)" + ] + }, + "Slimebound:ArtOfSlimeWar": { + "NAME": "El Arte de la Guerra Babosa", + "DESCRIPTIONS": [ + "Te topas con un pedestal asqueroso con un #glibro #gbrillante en la cima. Parece contener las técnicas de combate avanzadas del #gJefe #gBaba y sus secuaces.", + "Al acercarte al libro, oyes varias trampas activarse. No podrás esquivarlas todas.", + "Robas el libro y evitas las trampas, pero caes en un horrible charco de baba.", + "Al tomar el libro, se activa una trampa de pinchos en el suelo. Escapas por poco, pero sufres un corte profundo.", + "Apenas el libro deja el pedestal, sientes cómo drena tu esencia vital. Más vale que valga la pena.", + "Decides dejar el libro en su sitio y continuar tu camino.", + "No logras entender cómo los secuaces Babas son una amenaza: su única táctica parece ser lanzarse violentamente contra sus enemigos. Bueno, si les funciona..." + ], + "OPTIONS": [ + "[Leer] #gElimina #gtodos #glos #gGolpes. #gObtén #g3 #gEmbestidas #gMejoradas.", + "[Tomar] #gObtén #gConsultar #gManual. #rActiva #runa #rtrampa.", + "[Marcharse]", + "[Zambullirse] #rObtén #rMaldición #r- #rPegajosa.", + "[Ser Paciente] #rRecibe #r", + " #rde #rdaño.", + "[Tomar y Correr] #rPierde #r", + " #rde #rPV #rMáximos." + ] + }, + "Slimebound:Darklings": { + "NAME": "Babillas Oscuras", + "DESCRIPTIONS": [ + "Tres babas de aspecto extraño se interponen en tu camino. Parecen hostiles, pero al acercarte, notan que tienes una consistencia similar y te observan con curiosidad.", + "Mientras ~te~ ~preparas~ ~para~ ~pelear,~ ¡las babas negras también lo hacen!", + "Tras una breve conversación, estas babas deciden unirse a ti — vigilaban contra intrusos, pero pueden dejar su puesto por un rato para ayudarte." + ], + "OPTIONS": [ + "[Reclutar] #gObtén #gBabillas #gOscuras. #rPierde ", + "[Luchar]", + "[Marcharse]", + ".", + "[Bloqueado] Requiere una carta Rara." + ] + }, + "Slimebound:BackToBasics": { + "NAME": "", + "DESCRIPTIONS": [ + "Cuando una oveja toma la delantera, todas las demás la siguen." + ], + "OPTIONS": [ + "[Inspiración] #gAgrega #gOrdenar a todos los #gGolpes y #gDefensas.", + "[Bloqueado] Requiere un Golpe o Defensa." + ] + } +} diff --git a/src/main/resources/slimeboundResources/localization/spa/KeywordStrings.json b/src/main/resources/slimeboundResources/localization/spa/KeywordStrings.json new file mode 100644 index 000000000..551018257 --- /dev/null +++ b/src/main/resources/slimeboundResources/localization/spa/KeywordStrings.json @@ -0,0 +1,127 @@ +[ + { + "NAMES": ["absorb", "absorbing", "absorbed", "absorber", "absorbiendo", "absorbido", "absorbe","absorbelas"], + "PROPER_NAME": "Absorber", + "DESCRIPTION": "Recombínate manualmente con tu Baba principal, obteniendo #b1 de #yFuerza [REMOVE_SPACE]." + }, + { + "NAMES": ["split", "splitting", "dividir","dividirte","dividiendo", "divídete", "divide","divididas"], + "PROPER_NAME": "Dividir", + "DESCRIPTION": "Invoca un esbirro de Baba, que ataca al inicio de cada turno. NL Si no tienes espacios vacíos, tu Baba más antigua será automáticamente #yAbsorbida para dejar espacio, otorgándote #b1 de #yFuerza [REMOVE_SPACE]." + }, + { + "NAMES": ["goop", "gooped", "baba", "babado","babas"], + "PROPER_NAME": "Baba", + "DESCRIPTION": "El próximo ataque inflige #b1 de daño adicional por cada acumulación de #yBaba [REMOVE_SPACE], eliminando todas las acumulaciones y activando cualquier efecto de #yConsumir." + }, + { + "NAMES": ["potency", "potencia"], + "PROPER_NAME": "Potencia", + "DESCRIPTION": "Aumenta el daño de TODAS tus Babas invocadas. Los efectos secundarios aumentan en #b1 por cada #b2 de Potencia (redondeado hacia arriba)." + }, + { + "NAMES": ["command", "commands", "ordenar", "ordena","ordenan","ordenalas"], + "PROPER_NAME": "Ordenar", + "DESCRIPTION": "Tu Baba principal ataca." + }, + { + "NAMES": ["torchhead slime", "torchhead_slime", "baba antorcha", "baba_antorcha","antorcha"], + "PROPER_NAME": "Baba Antorcha", + "DESCRIPTION": "Ataca con #b6 de daño cada turno. Aumenta su daño con tu #yFuerza." + }, + { + "NAMES": ["bruiser slime", "bruiser_slime", "bruiser slimes", "bruiser_slimes", "bruiser", "baba bruta", "baba_bruta","bruta"], + "PROPER_NAME": "Baba Bruta", + "DESCRIPTION": "Ataca con #b3 de daño dos veces cada turno." + }, + { + "NAMES": ["cultist slime", "cultist_slime", "baba cultista", "baba_cultista"], + "PROPER_NAME": "Baba Cultista", + "DESCRIPTION": "Ataca con #b6 de daño cada turno y luego aumenta su daño en #b1." + }, + { + "NAMES": ["leeching slime", "leeching_slime", "leeching slimes", "leeching_slimes", "leeching", "baba absorbente", "baba_absorbente","absorbente"], + "PROPER_NAME": "Baba Absorbente", + "DESCRIPTION": "Ataca con #b1 de daño y te otorga #b3 de #yBloqueo cada turno." + }, + { + "NAMES": ["guerilla slime", "guerilla_slime", "guerilla slimes", "guerilla_slimes", "guerilla", "baba guerrilla","baba_guerrilla"], + "PROPER_NAME": "Baba Guerrilla", + "DESCRIPTION": "Ataca con #b3 de daño a TODOS los enemigos cada turno." + }, + { + "NAMES": ["mire slime", "mire_slime", "mire slimes", "mire_slimes", "mire", "baba_lodosa", "baba lodosa","lodosa"], + "PROPER_NAME": "Baba Lodosa", + "DESCRIPTION": "Ataca con #b2 de daño y aplica #b2 de #yBaba cada turno." + }, + { + "NAMES": ["bronze slime", "bronze_slime", "baba bronce", "baba_bronce"], + "PROPER_NAME": "Baba de Bronce", + "DESCRIPTION": "Ataca con #b10 de daño a TODOS los enemigos cada turno, pero se salta cada otro turno." + }, + { + "NAMES": ["lick", "lamida"], + "PROPER_NAME": "Lamida", + "DESCRIPTION": "Cartas de coste 0 que aplican #yBaba con una variedad de efectos secundarios." + }, + { + "NAMES": ["ghostflame slime", "ghostflame_slime", "baba fantasmal", "baba_fantasmal"], + "PROPER_NAME": "Baba Fantasmal", + "DESCRIPTION": "Ataca con #b3 de daño y aplica #b6 de #yQuemarAlma cada turno." + }, + { + "NAMES": ["slow", "lento"], + "PROPER_NAME": "Lento", + "DESCRIPTION": "Recibe #b10% más de daño por cada carta jugada durante el turno." + }, + { + "NAMES": ["tackle", "tackles", "embestida", "embestidas"], + "PROPER_NAME": "Embestida", + "DESCRIPTION": "#yAtaques de alto daño que también infligen una pequeña cantidad de daño a ti mismo." + }, + { + "NAMES": ["spire boss", "spire_boss", "jefe aguja", "jefe aguja"], + "PROPER_NAME": "Jefe de la Aguja", + "DESCRIPTION": "Cartas poderosas de coste 0, inspiradas en los jefes de la Aguja." + }, + { + "NAMES": ["protector slime", "protector_slime", "baba protectora", "baba_protectora"], + "PROPER_NAME": "Baba Protectora", + "DESCRIPTION": "Ataca con #b4 de daño y te otorga #b4 de #yEspinas temporales cada turno." + }, + { + "NAMES": ["insulting slime", "insulting_slime", "baba insultante", "baba_insultante"], + "PROPER_NAME": "Baba Insultante", + "DESCRIPTION": "Ataca con #b4 de daño y aplica #b1 de #yVulnerable cada turno." + }, + { + "NAMES": ["darkling slime", "darkling_slime", "baba obscura", "baba_obscura","obscura"], + "PROPER_NAME": "Baba Obscura", + "DESCRIPTION": "Ataca con #b3 de daño cada turno. Cuando es Ordenada, otras Babas Obscuras también atacan." + }, + { + "NAMES": ["ancient slime", "ancient_slime", "baba ancestral", "baba_ancestral"], + "PROPER_NAME": "Baba Ancestral", + "DESCRIPTION": "Ataca con #b3 de daño y hace que robes #b1 carta cada turno." + }, + { + "NAMES": ["time slime", "time_slime","baba temporal","baba_temporal"], + "PROPER_NAME": "Baba Temporal", + "DESCRIPTION": "Ataca con #b4 de daño y aplica #b1 de #yDébil cada turno." + }, + { + "NAMES": ["consume", "consumir"], + "PROPER_NAME": "Consumir", + "DESCRIPTION": "Efecto adicional que se activa cuando se usa un #yAtaque sobre un enemigo con #yBaba [REMOVE_SPACE]." + }, + { + "NAMES": ["specialist", "especialista","especialistas"], + "PROPER_NAME": "Especialista", + "DESCRIPTION": "Una baba única con un efecto más poderoso que las babas normales." + }, + { + "NAMES": ["buried", "enterrada"], + "PROPER_NAME": "Enterrada", + "DESCRIPTION": "Las cartas enterradas siempre serán las últimas elegidas para efectos aleatorios de #yExhumar." + } +] diff --git a/src/main/resources/slimeboundResources/localization/spa/MonsterStrings.json b/src/main/resources/slimeboundResources/localization/spa/MonsterStrings.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/src/main/resources/slimeboundResources/localization/spa/MonsterStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/slimeboundResources/localization/spa/OrbStrings.json b/src/main/resources/slimeboundResources/localization/spa/OrbStrings.json new file mode 100644 index 000000000..be60cad04 --- /dev/null +++ b/src/main/resources/slimeboundResources/localization/spa/OrbStrings.json @@ -0,0 +1,121 @@ +{ + "Slimebound:EmptySlimeSlot": { + "NAME": "Ranura de Baba", + "DESCRIPTION": [ + "Los secuaces baba pueden colocarse en estas ranuras mediante #yDivisión. [REMOVE_SPACE]" + ] + }, + "Slimebound:BronzeSlime": { + "NAME": "Baba de Bronce", + "DESCRIPTION": [ + "Inflige #b", + " de daño a TODOS los enemigos al inicio de tu turno y salta su siguiente ataque.", + "" + ] + }, + "Slimebound:AttackSlime": { + "NAME": "Baba Bruta", + "DESCRIPTION": [ + "Inflige #b", + " de daño dos veces al inicio de tu turno." + ] + }, + "Slimebound:ScrapOozeSlime": { + "NAME": "Baba de Chatarra", + "DESCRIPTION": [ + "Inflige #b", + " de daño al inicio de tu turno. NL Puede revivir si es #yAbsorbida. [REMOVE_SPACE]" + ] + }, + "Slimebound:GreedOozeSlime": { + "NAME": "Baba Codiciosa", + "DESCRIPTION": [ + "Inflige #b", + " de daño al inicio de tu turno. NL Puede revivir si es #yAbsorbida. [REMOVE_SPACE]" + ] + }, + "Slimebound:TorchHeadSlime": { + "NAME": "Baba Antorcha", + "DESCRIPTION": [ + "Inflige #b", + " de daño al inicio de tu turno. Aumenta su daño con tu #yFuerza. [REMOVE_SPACE]" + ] + }, + "Slimebound:CultistSlime": { + "NAME": "Baba Cultista", + "DESCRIPTION": [ + "Inflige #b", + " de daño al inicio de tu turno. Luego del ataque, incrementa su daño en #b1. [REMOVE_SPACE]" + ] + }, + "Slimebound:ShieldSlime": { + "NAME": "Baba Absorbente", + "DESCRIPTION": [ + "Inflige #b", + " de daño al inicio de tu turno y te otorga #b", + " de #yBloqueo [REMOVE_SPACE]." + ] + }, + "Slimebound:PoisonSlime": { + "NAME": "Baba Guerrillera", + "DESCRIPTION": [ + "Inflige #b", + " de daño a TODOS los enemigos al inicio de tu turno." + ] + }, + "Slimebound:SlimingSlime": { + "NAME": "Baba Lodosa", + "DESCRIPTION": [ + "Inflige #b", + " de daño y aplica #b", + " de #yBaba al inicio de tu turno." + ] + }, + "Slimebound:HexSlime": { + "NAME": "Baba de Llama Fantasmal", + "DESCRIPTION": [ + "Inflige #b", + " de daño y aplica #b", + " de #yQuemarAlma al inicio de tu turno." + ] + }, + "Slimebound:ChampSlime": { + "NAME": "Baba Insultante", + "DESCRIPTION": [ + "Inflige #b", + " de daño y aplica #b", + " de #yVulnerable al inicio de tu turno." + ] + }, + "Slimebound:SlowingSlime": { + "NAME": "Baba Temporal", + "DESCRIPTION": [ + "Inflige #b", + " de daño y aplica #b", + " de #yDébil al inicio de tu turno." + ] + }, + "Slimebound:ProtectorSlime": { + "NAME": "Baba Protectora", + "DESCRIPTION": [ + "Inflige #b", + " de daño al inicio de tu turno y te otorga #b", + " de #yEspinas Temporales [REMOVE_SPACE]." + ] + }, + "Slimebound:DrawingSlime": { + "NAME": "Baba Ancestral", + "DESCRIPTION": [ + "Inflige #b", + " de daño al inicio de tu turno y te hace robar #b", + " carta. El robo no escala con Potencia." + ] + }, + "Slimebound:DarklingSlime": { + "NAME": "Baba Obscura", + "DESCRIPTION": [ + "Inflige #b", + " de daño al inicio de tu turno. Cuando haces un Comando, todas las Obscuras atacan (sin importar la posición)." + ] + } +} diff --git a/src/main/resources/slimeboundResources/localization/spa/PotionStrings.json b/src/main/resources/slimeboundResources/localization/spa/PotionStrings.json new file mode 100644 index 000000000..19689c594 --- /dev/null +++ b/src/main/resources/slimeboundResources/localization/spa/PotionStrings.json @@ -0,0 +1,30 @@ +{ + "Slimebound:SlimedPotion": { + "NAME": "Frasco de Baba", + "DESCRIPTIONS": [ + "Aplica #b", + " de #yBaba [REMOVE_SPACE]." + ] + }, + "Slimebound:SlimyTonguePotion": { + "NAME": "Elixir Baboso", + "DESCRIPTIONS": [ + "Cada vez que un efecto aplique #yBaba en este combate, aplica #b", + " adicional." + ] + }, + "Slimebound:SpawnSlimePotion": { + "NAME": "Ejército Embotellado", + "DESCRIPTIONS": [ + "#yDivídete en #b", + " Babas aleatorias (Normales o #yEspecialistas [REMOVE_SPACE])." + ] + }, + "Slimebound:ThreeZeroPotion": { + "NAME": "Brebaje con Ooze", + "DESCRIPTIONS": [ + "Agrega #b", + " cartas aleatorias de coste 0 a tu mano." + ] + } +} diff --git a/src/main/resources/slimeboundResources/localization/spa/PowerStrings.json b/src/main/resources/slimeboundResources/localization/spa/PowerStrings.json new file mode 100644 index 000000000..6d2e6c7a2 --- /dev/null +++ b/src/main/resources/slimeboundResources/localization/spa/PowerStrings.json @@ -0,0 +1,522 @@ +{ + "Slimebound:PotencyPower": { + "NAME": "Potencia", + "DESCRIPTIONS": [ + "Incrementa el daño de tus Babas generadas en #b", + ". Incrementa los efectos secundarios en #b", + "." + ] + }, + "Slimebound:SlimedPower": { + "NAME": "Babeado", + "DESCRIPTIONS": [ + "El siguiente #yAtaque contra este enemigo inflige #b", + " de daño adicional, consumiendo toda la #yBaba [REMOVE_SPACE]." + ] + }, + "Slimebound:PreventTackleDamagePower": { + "NAME": "Protegido", + "DESCRIPTIONS": [ + "No recibes daño de los siguientes #b", + " #yEmbestidas que juegues." + ] + }, + "Slimebound:SplitDailyTriggerPower": { + "NAME": "División de Baba", + "DESCRIPTIONS": [ + "Cuando sus PV estén al #b50% o menos, se dividirá en #b2 enemigos Baba con los PV actuales de ", + "." + ] + }, + "Slimebound:SplitDailyPower": { + "NAME": "Dividiéndose", + "DESCRIPTIONS": [ + "Este enemigo se dividirá este turno." + ] + }, + "Slimebound:BuffAttackSlimesPower": { + "NAME": "Mejora: Bruta", + "DESCRIPTIONS": [ + "La Baba #yBruta inflige #b", + " de daño adicional." + ] + }, + "Slimebound:BuffPoisonSlimesPower": { + "NAME": "Mejora: Ácida", + "DESCRIPTIONS": [ + "La Baba #yVenenosa aplica #b", + " más de #yVeneno [REMOVE_SPACE]." + ] + }, + "Slimebound:BuffSlimingSlimesPower": { + "NAME": "Mejora: Lodosa", + "DESCRIPTIONS": [ + "La Baba #yLodosa aplican #b", + " más de #yBaba [REMOVE_SPACE]." + ] + }, + "Slimebound:BuffShieldSlimesPower": { + "NAME": "Mejora: Absorbente", + "DESCRIPTIONS": [ + "La Baba #yAbsorbente inflige #b", + " de daño adicional." + ] + }, + "Slimebound:HexSlimePerTurnPower": { + "NAME": "Maleficio", + "DESCRIPTIONS": [ + "Invoca una #yBaba Fantasmal al inicio de tu siguiente turno.", + "Invoca una #yBaba Fantasmal al inicio de tus siguientes #b", + " turnos." + ] + }, + "Slimebound:ProtectTheBoss": { + "NAME": "Proteger al Jefe", + "DESCRIPTIONS": [ + "Evita que recibas daño la próxima vez que un enemigo te ataque, #yAbsorbiendo a tu Baba líder en su lugar.", + "Evita que recibas daño las próximas #b", + " veces que un enemigo te ataque, #yAbsorbiendo a tu Baba líder en su lugar." + ] + }, + "Slimebound:SplitForLessPower": { + "NAME": "Baba Eficiente", + "DESCRIPTIONS": [ + "#yDividir cuesta #b", + " PV menos. Agrega #b", + " carta(s) #yDivididas aleatorias a tu mano cada turno." + ] + }, + "Slimebound:ComboAttackPower": { + "NAME": "Dar el Ejemplo", + "DESCRIPTIONS": [ + "La primera carta que apunte a enemigos que juegues cada turno, hace que tu Baba líder también ataque.", + "Las primeras #b", + " cartas que apunten a enemigos cada turno hacen que tu Baba líder también ataque.", + " NL Este efecto puede activarse #b", + " veces más este turno.", + " vez más este turno.", + " NL Este efecto no puede volver a activarse este turno." + ] + }, + "Slimebound:RetainCardsOneTurnPower": { + "NAME": "Cartas Preparadas", + "DESCRIPTIONS": [ + "Retiene #b", + " carta este turno.", + " cartas este turno." + ] + }, + "Slimebound:EnergizedSlimeboundPower": { + "NAME": "Energizado", + "DESCRIPTIONS": [ + "Obtén #b", + " [E] adicional en el próximo turno.", + " [E] adicionales en el próximo turno." + ] + }, + "Slimebound:SelfFormingGooPower": { + "NAME": "Reformación", + "DESCRIPTIONS": [ + "Cada vez que Absorbas una Baba, gana #b", + " de #yFuerza [REMOVE_SPACE]." + ] + }, + "Slimebound:SelfFormingGooPowerPlus": { + "NAME": "Reformación+", + "DESCRIPTIONS": [ + "Cada vez que Absorbas una Baba, gana #b", + " de #yDestreza [REMOVE_SPACE]." + ] + }, + "Slimebound:LoseSlimesPower": { + "NAME": "Exceso de esfuerzo", + "DESCRIPTIONS": [ + "En el próximo turno, #yAbsorbe todas tus Babas generadas.", + " En #b", + " turnos, #yAbsorbe todas tus Babas generadas." + ] + }, + "Slimebound:TackleModifyDamagePower": { + "NAME": "Golpeado", + "DESCRIPTIONS": [ + "Recibe #b", + " más daño de cartas que contengan \"Embestida\"." + ] + }, + "Slimebound:LoseThornsPower": { + "NAME": "Espinas Retraídas", + "DESCRIPTIONS": [ + "Pierde #b", + " de #yEspinas al inicio de tu siguiente turno." + ] + }, + "Slimebound:SlimedThornsPower": { + "NAME": "Muro Viviente", + "DESCRIPTIONS": [ + "Aplica #b", + " de #yBaba a los atacantes este turno." + ] + }, + "Slimebound:PreventSlimeDecayPower": { + "NAME": "Empapado en Baba", + "DESCRIPTIONS": [ + "La siguiente vez que se use un #yAtaque contra este enemigo, los beneficios de #yBaba se aplican sin consumirla.", + "Las siguientes #b", + " veces que se use un #yAtaque contra este enemigo, los beneficios de #yBaba se aplican sin consumirla." + ] + }, + "Slimebound:DuplicatedFormPower": { + "NAME": "Forma Duplicada", + "DESCRIPTIONS": [ + "La primera carta que juegues cada turno que apunte a enemigos se juega dos veces.", + "Las primeras #b", + " cartas que juegues cada turno que apunten a enemigos se juegan dos veces." + ] + }, + "Slimebound:DuplicatedFormNoHealPower": { + "NAME": "Dividir", + "DESCRIPTIONS": [ + "La vida máxima se reduce temporalmente en #b", + "." + ] + }, + "Slimebound:DuplicatedFormEnergyPower": { + "NAME": "Trabajo en Equipo", + "DESCRIPTIONS": [ + "Obtén #b", + " [E] cada turno." + ] + }, + "Slimebound:GluttonyPower": { + "NAME": "Glotonería", + "DESCRIPTIONS": [ + "La primera vez que #yConsume cada turno, agrega una carta #yLamer a tu mano.", + "Las primeras ", + " veces que #yConsume cada turno, agrega una carta #yLamer a tu mano.", + " NL Este efecto puede activarse #b", + " veces más este turno.", + " vez más este turno.", + " NL Este efecto no puede volver a activarse este turno." + ] + }, + "Slimebound:GluttonyPowerUpgraded": { + "NAME": "Glotonería+", + "DESCRIPTIONS": [ + "Agrega #b", + " carta #yLamer #yMejorada aleatoria a tu mano cada turno.", + " cartas #yLamer #yMejorada aleatoria a tu mano cada turno." + ] + }, + "Slimebound:PoisonThornsPower": { + "NAME": "Baba Ácida", + "DESCRIPTIONS": [ + "Aplica #b", + " de #yVeneno cuando ataques a un enemigo que tenga #yBaba [REMOVE_SPACE]." + ] + }, + "Slimebound:SlimeRitualPower": { + "NAME": "Ritual", + "DESCRIPTIONS": [ + "Obtén #b", + " de #yFuerza al inicio de cada turno." + ] + }, + "Slimebound:RecyclingPower": { + "NAME": "Reciclaje", + "DESCRIPTIONS": [ + "Al inicio de tu turno, recupera #b", + " carta de #yLamer aleatoria de tu pila de #yAgotadas a tu mano.", + " cartas de #yLamer aleatorias de tu pila de #yAgotadas a tu mano." + ] + }, + "Slimebound:RecyclingPowerUpgraded": { + "NAME": "Reciclaje+", + "DESCRIPTIONS": [ + "Sana #b", + " PV y roba una carta cuando #yAgotes una carta de coste 0." + ] + }, + "Slimebound:AcidTonguePower": { + "NAME": "Lengua Ácida", + "DESCRIPTIONS": [ + "Aplica #b", + " de #yVeneno cada vez que apliques #yBaba [REMOVE_SPACE]." + ] + }, + "Slimebound:AcidTonguePowerUpgraded": { + "NAME": "Lengua Babosa", + "DESCRIPTIONS": [ + "Los efectos que apliquen #yBaba aplican #b", + " más." + ] + }, + "Slimebound:SelfDamageSlimedPower": { + "NAME": "Baba Residual", + "DESCRIPTIONS": [ + "Aplica #b", + " de #yBaba a un enemigo aleatorio cada vez que pierdas PV." + ] + }, + "Slimebound:TackleBuffPower": { + "NAME": "Embestida Ofensiva", + "DESCRIPTIONS": [ + "Las cartas que contienen \"Embestida\" infligen #b", + " más de daño a los enemigos." + ] + }, + "Slimebound:PolyBeamAgainPower": { + "NAME": "Rayo Alterno", + "DESCRIPTIONS": [ + "#yRayo #yPoli se jugará al inicio de tu siguiente turno.", + "#yRayo #yPoli se jugará al inicio de tus siguientes #b", + " turnos." + ] + }, + "Slimebound:PolyBeamAgainPowerUpgraded": { + "NAME": "Rayo Alterno+", + "DESCRIPTIONS": [ + "#yRayo #yPoli+ se jugará al inicio de tu siguiente turno.", + "#yRayo #yPoli+ se jugará al inicio de tus siguientes #b", + " turnos." + ] + }, + "Slimebound:FirmFortitudePower": { + "NAME": "Siente Nuestro Dolor", + "DESCRIPTIONS": [ + "La próxima vez que recibirías daño o perderías PV en tu turno, un enemigo recibirá esa cantidad de daño en su lugar.", + "Las próximas #b", + " veces que recibirías daño o perderías PV en tu turno, un enemigo recibirá esa cantidad de daño en su lugar.", + " NL Este efecto puede activarse #b", + " veces más este turno.", + " vez más este turno.", + " NL Este efecto no puede volver a activarse este turno." + ] + }, + "Slimebound:NextTurnGainStrengthPower": { + "NAME": "Cargando Energía", + "DESCRIPTIONS": [ + "Obtén #b", + " de #yFuerza en tu siguiente turno." + ] + }, + "Slimebound:NextTurnGainSlimeCrush": { + "NAME": "Preparándose para APLASTAR", + "DESCRIPTIONS": [ + "Obtén un #g¡TRITURABABA! en tu siguiente turno.", + "Obtén un #g¡TRITURABABA!+ en tu siguiente turno.", + "Obtén #b", + " copias de #g¡TRITURABABA! en tu siguiente turno.", + " copias de #g¡TRITURABABA!+ en tu siguiente turno." + ] + }, + "Slimebound:StunnedPower": { + "NAME": "Completamente Exhausto", + "DESCRIPTIONS": [ + "Pierde tu siguiente turno.", + "Pierde tus siguientes #b", + " turnos." + ] + }, + "Slimebound:NextTurnGainHyperBeam": { + "NAME": "Preparándose para el Rayo", + "DESCRIPTIONS": [ + "Obtén un #yHiper #yRayo en tu siguiente turno.", + "Obtén #b", + " copias de #yHiper #yRayo en tu siguiente turno." + ] + }, + "Slimebound:NextTurnGainDivider": { + "NAME": "Preparándose para Dividir", + "DESCRIPTIONS": [ + "Obtén una carta de #yDividir en tu siguiente turno.", + "Obtén #b", + " copias de #yDividir en tu siguiente turno." + ] + }, + "Slimebound:StudyAutomatonPower": { + "NAME": "Estudiar Autómata", + "DESCRIPTIONS": [ + "Obtén una carta aleatoria de Autómata al inicio del siguiente turno.", + "Obtén una carta aleatoria de Autómata al inicio de tus siguientes ", + " turnos." + ] + }, + "Slimebound:StudyAutomatonPowerUpgraded": { + "NAME": "Estudiar Autómata+", + "DESCRIPTIONS": [ + "Obtén una carta de Autómata Mejorada al inicio del siguiente turno.", + "Obtén una carta de Autómata Mejorada al inicio de tus siguientes ", + " turnos." + ] + }, + "Slimebound:StudyAwakenedPower": { + "NAME": "Estudiar al Despertado", + "DESCRIPTIONS": [ + "Obtén una carta aleatoria del Despertado al comienzo del siguiente turno.", + "Obtén una carta aleatoria del Despertado al comienzo de tus siguientes ", + " turnos." + ] + }, + "Slimebound:StudyAwakenedPowerUpgraded": { + "NAME": "Estudiar al Despertado+", + "DESCRIPTIONS": [ + "Obtén una carta mejorada aleatoria del Despertado al comienzo del siguiente turno.", + "Obtén una carta mejorada aleatoria del Despertado al comienzo de tus siguientes ", + " turnos." + ] + }, + "Slimebound:AwakenedOnePower": { + "NAME": "Ritual Oscuro", + "DESCRIPTIONS": [ + "Gana ", + " de Fuerza si este enemigo no ataca en su turno." + ] + }, + "Slimebound:StudyChampPower": { + "NAME": "Estudiar al Campeón", + "DESCRIPTIONS": [ + "Obtén una carta aleatoria del Campeón al comienzo del siguiente turno.", + "Obtén una carta aleatoria del Campeón al comienzo de tus siguientes ", + " turnos." + ] + }, + "Slimebound:StudyChampPowerUpgraded": { + "NAME": "Estudiar al Campeón+", + "DESCRIPTIONS": [ + "Obtén una carta mejorada aleatoria del Campeón al comienzo del siguiente turno.", + "Obtén una carta mejorada aleatoria del Campeón al comienzo de tus siguientes ", + " turnos." + ] + }, + "Slimebound:StudyCollectorPower": { + "NAME": "Estudiar al Coleccionista", + "DESCRIPTIONS": [ + "Obtén una carta aleatoria del Coleccionista al comienzo del siguiente turno.", + "Obtén una carta aleatoria del Coleccionista al comienzo de tus siguientes ", + " turnos." + ] + }, + "Slimebound:StudyCollectorPowerUpgraded": { + "NAME": "Estudiar al Coleccionista+", + "DESCRIPTIONS": [ + "Obtén una carta mejorada aleatoria del Coleccionista al comienzo del siguiente turno.", + "Obtén una carta mejorada aleatoria del Coleccionista al comienzo de tus siguientes ", + " turnos." + ] + }, + "Slimebound:StudyGuardianPower": { + "NAME": "Estudiar al Guardián", + "DESCRIPTIONS": [ + "Obtén una carta aleatoria del Guardián al comienzo del siguiente turno.", + "Obtén una carta aleatoria del Guardián al comienzo de tus siguientes ", + " turnos." + ] + }, + "Slimebound:StudyGuardianPowerUpgraded": { + "NAME": "Estudiar al Guardián+", + "DESCRIPTIONS": [ + "Obtén una carta mejorada aleatoria del Guardián al comienzo del siguiente turno.", + "Obtén una carta mejorada aleatoria del Guardián al comienzo de tus siguientes ", + " turnos." + ] + }, + "Slimebound:StudyHexaghostPower": { + "NAME": "Estudiar al Hexafantasma", + "DESCRIPTIONS": [ + "Obtén una carta aleatoria del Hexafantasma al comienzo del siguiente turno.", + "Obtén una carta aleatoria del Hexafantasma al comienzo de tus siguientes ", + " turnos." + ] + }, + "Slimebound:StudyHexaghostPowerUpgraded": { + "NAME": "Estudiar al Hexafantasma+", + "DESCRIPTIONS": [ + "Obtén una carta mejorada aleatoria del Hexafantasma al comienzo del siguiente turno.", + "Obtén una carta mejorada aleatoria del Hexafantasma al comienzo de tus siguientes ", + " turnos." + ] + }, + "Slimebound:StudyShapesPower": { + "NAME": "Estudiar a Donu y Deca", + "DESCRIPTIONS": [ + "Obtén una carta aleatoria de Donu y Deca al comienzo del siguiente turno.", + "Obtén una carta aleatoria de Donu y Deca al comienzo de tus siguientes ", + " turnos." + ] + }, + "Slimebound:StudyShapesPowerUpgraded": { + "NAME": "Estudiar a Donu y Deca+", + "DESCRIPTIONS": [ + "Obtén una carta mejorada aleatoria de Donu y Deca al comienzo del siguiente turno.", + "Obtén una carta mejorada aleatoria de Donu y Deca al comienzo de tus siguientes ", + " turnos." + ] + }, + "Slimebound:StudyTimeEaterPower": { + "NAME": "Estudiar al Devorador de Tiempo", + "DESCRIPTIONS": [ + "Obtén una carta aleatoria del Devorador de Tiempo al comienzo del siguiente turno.", + "Obtén una carta aleatoria del Devorador de Tiempo al comienzo de tus siguientes ", + " turnos." + ] + }, + "Slimebound:StudyTimeEaterPowerUpgraded": { + "NAME": "Estudiar al Devorador de Tiempo+", + "DESCRIPTIONS": [ + "Obtén una carta mejorada aleatoria del Devorador de Tiempo al comienzo del siguiente turno.", + "Obtén una carta mejorada aleatoria del Devorador de Tiempo al comienzo de tus siguientes ", + " turnos." + ] + }, + "Slimebound:GreedRespawnPower": { + "NAME": "Reaparición de Codiciosa", + "DESCRIPTIONS": [ + "#yBaba #yCodiciosa reaparecerá al final de tu turno." + ] + }, + "Slimebound:ScrapRespawnPower": { + "NAME": "Reaparición de Chatarra", + "DESCRIPTIONS": [ + "#yBaba #yde #yChatarra reaparecerá al final de tu turno." + ] + }, + "Slimebound:BuffSecondarySlimeEffectsPower": { + "NAME": "Maestro de Esbirros", + "DESCRIPTIONS": [ + "Cada vez que juegas una carta con #yOrdenar, #yOrdena nuevamente.", + "Cada vez que juegas una carta con #yOrdenar, Ordena #b", + " veces adicionales." + ] + }, + "Slimebound:TackleSelfDamagePreventPower": { + "NAME": "Temerario", + "DESCRIPTIONS": [ + "Las cartas que contienen \"Embestida\" te infligen #b", + " más de daño." + ] + }, + "Slimebound:GoopArmorPower": { + "NAME": "Armadura de Baba", + "DESCRIPTIONS": [ + "Cada vez que #yAtacas a un enemigo que tenga #yBaba, obtienes #b", + " de #yBloqueo." + ] + }, + "Slimebound:CommandOnPlayPower": { + "NAME": "Alzamiento", + "DESCRIPTIONS": [ + "La próxima vez que juegues una carta este turno, #yOrdena.", + "Las próximas ", + " veces que juegues una carta este turno, #yOrdena." + ] + }, + "Slimebound:GoopPerTurnPower": { + "NAME": "Baño de Baba", + "DESCRIPTIONS": [ + "Agrega ", + " de #yBaba al inicio del turno de este enemigo." + ] + } +} + + diff --git a/src/main/resources/slimeboundResources/localization/spa/RelicStrings.json b/src/main/resources/slimeboundResources/localization/spa/RelicStrings.json new file mode 100644 index 000000000..ea3fdb17c --- /dev/null +++ b/src/main/resources/slimeboundResources/localization/spa/RelicStrings.json @@ -0,0 +1,106 @@ +{ + "Slimebound:AbsorbEndCombat": { + "NAME": "Corazón de Baba", + "FLAVOR": "Me siento... viscoso.", + "DESCRIPTIONS": [ + "Cada vez que #yslimeboundmod:Consume [REMOVE_SPACE], sana #b2 PV, hasta un máximo de #b8 por combate." + ] + }, + "Slimebound:AbsorbEndCombatUpgraded": { + "NAME": "Corazón Negro de Baba", + "FLAVOR": "El secreto del moco.", + "DESCRIPTIONS": [ + "Reemplaza ", + " [REMOVE_SPACE].[] NL Cada vez que #yslimeboundmod:Consume [REMOVE_SPACE], sana #b3 PV, hasta un máximo de #b15 por combate." + ] + }, + "Slimebound:SlimedTailRelic": { + "NAME": "Cola Viscosa", + "FLAVOR": "Una cola falsa para engañar a los enemigos, completamente cubierta de baba.", + "DESCRIPTIONS": [ + "Cada vez que #yDivide [REMOVE_SPACE], obtén #b", + " de #yBloqueo [REMOVE_SPACE]." + ] + }, + "Slimebound:PotencyRelic": { + "NAME": "Piedra de Nomakk", + "FLAVOR": "Cuando se presenta a un miembro de tu Pandilla Baba, parece que empieza a bailar.", + "DESCRIPTIONS": [ + "Al inicio del combate, gana #b1 de #yslimeboundmod:Potencia [REMOVE_SPACE]." + ] + }, + "Slimebound:DailySplitRelic": { + "NAME": "Babear la Aguja", + "FLAVOR": "SIEMPRE se divide. ¿Por qué es una reliquia? ¡Porque no sé cómo añadir el mod personalizado a la lista de mods activos!", + "DESCRIPTIONS": [ + "#bModificador #bPersonalizado #bde #bPartida NL Todos los enemigos se transforman en dos babas al tener #b50% de PV." + ] + }, + "Slimebound:ScrapOozeRelic": { + "NAME": "Baba de Chatarra", + "FLAVOR": "", + "DESCRIPTIONS": [ + "Al inicio del combate, invoca a #yBaba #yde #yChatarra (puede revivir si es #yAbsorbida [REMOVE_SPACE]). NL En los puntos de descanso, puedes donar una carta a la #yBaba #yde #yChatarra, modificando su daño: NL #b+1 daño por #gPoco Comunes NL #b+2 daño por #yRaras NL #b-1 daño por Comunes NL #b-2 daño por #rMaldiciones", + "Elimina una carta de tu mazo y modifica el daño de la Baba de Chatarra.", + "Nada que ofrecerle a la Baba de Chatarra.", + "Chatarra" + ] + }, + "Slimebound:GreedOozeRelic": { + "NAME": "Baba Codiciosa", + "FLAVOR": "Un amigo encontrado en la Aguja que devora almas.", + "DESCRIPTIONS": [ + "Al inicio del combate, invoca a #yBaba #yCodiciosa (puede revivir si es #yAbsorbida [REMOVE_SPACE]). NL En los puntos de descanso, la #yBaba #yCodiciosa tomará #b50 de tus almas y aumentará su daño en #b1." + ] + }, + "Slimebound:PreparedRelic": { + "NAME": "Sopa de Baba", + "FLAVOR": "Sabe horrible, pero es increíblemente saludable.", + "DESCRIPTIONS": [ + "Al entrar a un Punto de Descanso, comienza el siguiente combate con una carta de #yPrepararse que cuesta #b0 [REMOVE_SPACE]." + ] + }, + "Slimebound:AggressiveSlimeRelic": { + "NAME": "Habitante del Moco", + "FLAVOR": "Me siguió a casa. ¿Puedo quedármelo?", + "DESCRIPTIONS": [ + "Al inicio del combate, #yslimeboundmod:Divídete en una #yslimeboundmod:Baba #yBruta [REMOVE_SPACE]." + ] + }, + "Slimebound:SlimedSkullRelic": { + "NAME": "Cráneo Baboso", + "FLAVOR": "Un cráneo Snecko en pésimas condiciones. Sucio y viscoso, la mugre se le pega como pegamento.", + "DESCRIPTIONS": [ + "Cada vez que aplicas #yslimeboundmod:Baba, aplica #b", + " adicional de #yslimeboundmod:Baba [REMOVE_SPACE]." + ] + }, + "Slimebound:MaxSlimesRelic": { + "NAME": "Estandarte de Jeremías", + "FLAVOR": "Tú y un ejército de baba.", + "DESCRIPTIONS": [ + "Al inicio del combate, gana #b1 espacio adicional de Baba y #yslimeboundmod:Divídete en una Baba aleatoria." + ] + }, + "Slimebound:SelfDamagePreventRelic": { + "NAME": "Equipo Protector", + "FLAVOR": "La mejor defensa es una buena ofensiva.", + "DESCRIPTIONS": [ + "Reduce el daño que recibes por #yslimeboundmod:Embestidas en #b3 [REMOVE_SPACE]." + ] + }, + "Slimebound:TarBlob": { + "NAME": "Baba de Alquitrán", + "FLAVOR": "El tipo de baba... no tan buena.", + "DESCRIPTIONS": [ + "Obtén [E] al inicio de tu turno. Al inicio del combate, pierdes #b1 espacio de Baba." + ] + }, + "Slimebound:StickyStick": { + "NAME": "Cubo Gelatinoso", + "FLAVOR": "Hey, se te pegó al cuerpo.", + "DESCRIPTIONS": [ + "Las primeras #b2 veces que robes una carta de #yEstado o una #rMaldición cada turno, roba #b1 carta. Si era un #yVacío [REMOVE_SPACE], obtén [E] [REMOVE_SPACE]." + ] + } +} diff --git a/src/main/resources/slimeboundResources/localization/spa/RunModStrings.json b/src/main/resources/slimeboundResources/localization/spa/RunModStrings.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/src/main/resources/slimeboundResources/localization/spa/RunModStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/slimeboundResources/localization/spa/UIStrings.json b/src/main/resources/slimeboundResources/localization/spa/UIStrings.json new file mode 100644 index 000000000..1ae328775 --- /dev/null +++ b/src/main/resources/slimeboundResources/localization/spa/UIStrings.json @@ -0,0 +1,27 @@ +{ + "slimeboundConfigMenuText": { + "TEXT": [ + "Permitir que otros personajes encuentren algunas reliquias de Rey Babosa.", + "Permitir que otros personajes encuentren algunas pociones de Rey Babosa.", + "Permitir que otros personajes encuentren algunos eventos de Rey Babosa.", + "Desbloquear todo (No recomendado)" + ] + }, + "slimeboundmod:CommandMod": { + "TEXT": [ + " NL slimeboundmod:Ordenar." + ] + }, + "slimeboundmod:lickDescriptor": { + "TEXT": [ + "Lamer", + "slimeboundmod:Lamer. NL " + ] + }, + "slimeboundmod:tackleDescriptor": { + "TEXT": [ + "Embestida", + "slimeboundmod:Embestida. NL " + ] + } +} diff --git a/src/main/resources/slimeboundResources/localization/zhs/CardStrings.json b/src/main/resources/slimeboundResources/localization/zhs/CardStrings.json index acc33b555..ac412465b 100644 --- a/src/main/resources/slimeboundResources/localization/zhs/CardStrings.json +++ b/src/main/resources/slimeboundResources/localization/zhs/CardStrings.json @@ -33,12 +33,12 @@ }, "Slimebound:Overexert": { "NAME": "超负荷", - "DESCRIPTION": "获得 4 点 slimeboundmod:潜力 。 NL 两回合后, NL slimeboundmod:吸收 所有史莱姆。", - "UPGRADE_DESCRIPTION": "获得 4 点 slimeboundmod:潜力 。 NL slimeboundmod:命令 两次。 NL 两回合后, NL slimeboundmod:吸收 所有史莱姆。" + "DESCRIPTION": "获得 5 点 slimeboundmod:潜力 。 NL !M! 回合后, NL slimeboundmod:吸收 所有史莱姆。", + "UPGRADE_DESCRIPTION": "获得 5 点 slimeboundmod:潜力 。 NL slimeboundmod:命令 2次。 NL !M! 两回合后, NL slimeboundmod:吸收 所有史莱姆。" }, "Slimebound:Split": { "NAME": "分裂", - "DESCRIPTION": "随机 slimeboundmod:分裂 一只史莱姆。" + "DESCRIPTION": "slimeboundmod:分裂 slimeboundmod:游击史莱姆 。 NL slimeboundmod:命令 。" }, "Slimebound:LeadByExample": { "NAME": "身先士卒", @@ -77,8 +77,8 @@ }, "Slimebound:OozeBath": { "NAME": "黏液浴", - "DESCRIPTION": "敌方回合开始时, NL 给予目标 !M! 层 slimeboundmod:黏液 。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "将一名敌人的 slimeboundmod:黏液 变为三倍。 NL 消耗 。" + "DESCRIPTION": "目标敌人回合开始时, NL 获得 !slime! 层 slimeboundmod:黏液 。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "将敌人的 slimeboundmod:黏液 变为三倍。 NL 消耗 。" }, "Slimebound:SlimeSpikes": { "NAME": "黏性尖刺", @@ -110,8 +110,8 @@ ] }, "Slimebound:FormOfPuddle": { - "NAME": "化为泥淖", - "DESCRIPTION": "获得1层 无实体 。 NL 消耗 。" + "NAME": "黏池之影", + "DESCRIPTION": "虚无 。 NL 获得1层 无实体 。 NL 消耗 。" }, "Slimebound:GrowthPunch": { "NAME": "成长拳", @@ -167,8 +167,8 @@ }, "Slimebound:PressTheAttack": { "NAME": "强攻", - "DESCRIPTION": "造成 !D! 点伤害。 slimeboundmod:吞食黏液 : slimeboundmod:命令 1次。", - "UPGRADE_DESCRIPTION": "造成 !D! 点伤害。 slimeboundmod:吞食黏液 : slimeboundmod:命令 2次。" + "DESCRIPTION": "造成 !D! 点伤害。 NL slimeboundmod:命令 1次。", + "UPGRADE_DESCRIPTION": "造成 !D! 点伤害。 NL slimeboundmod:命令 2次。" }, "Slimebound:TongueLash": { "NAME": "舌鞭", @@ -184,8 +184,8 @@ "DESCRIPTION": "给予 slimeboundmod:黏液 时, NL 额外给予 !M! 层 。" }, "Slimebound:FirmFortitude": { - "NAME": "软化", - "DESCRIPTION": "力量 小于0时 不能被打出 。 NL 失去 2 点 力量 。 NL 获得 !M! 点 slimeboundmod:潜力 。" + "NAME": "清算", + "DESCRIPTION": "失去 2 点 力量 。 NL 获得 !M! 点 slimeboundmod:潜力 。" }, "Slimebound:WasteNot": { "NAME": "别浪费", @@ -305,23 +305,23 @@ }, "Slimebound:SplitBruiser": { "NAME": "分裂:好斗", - "DESCRIPTION": "slimeboundmod:分裂 slimeboundmod:好斗史莱姆 。 NL slimeboundmod:命令 !M! 次。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "slimeboundmod:分裂 slimeboundmod:好斗史莱姆 。 NL slimeboundmod:命令 !M! 次。 NL 消耗 。" + "DESCRIPTION": "slimeboundmod:分裂 slimeboundmod:好斗史莱姆 。 NL slimeboundmod:命令 !M! 次。", + "UPGRADE_DESCRIPTION": "slimeboundmod:分裂 slimeboundmod:好斗史莱姆 。 NL slimeboundmod:命令 3次。" }, "Slimebound:SplitLeeching": { "NAME": "分裂:水蛭", - "DESCRIPTION": "slimeboundmod:分裂 slimeboundmod:水蛭史莱姆 。 NL slimeboundmod:命令 !M! 次。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "slimeboundmod:分裂 slimeboundmod:水蛭史莱姆 。 NL slimeboundmod:命令 !M! 次。 NL 消耗 。" + "DESCRIPTION": "slimeboundmod:分裂 slimeboundmod:水蛭史莱姆 。 NL slimeboundmod:命令 !M! 次。", + "UPGRADE_DESCRIPTION": "slimeboundmod:分裂 slimeboundmod:水蛭史莱姆 。 NL slimeboundmod:命令 3次。" }, "Slimebound:SplitAcid": { "NAME": "分裂:游击", - "DESCRIPTION": "slimeboundmod:分裂 slimeboundmod:游击史莱姆 。 NL slimeboundmod:命令 !M! 次。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "slimeboundmod:分裂 slimeboundmod:游击史莱姆 。 NL slimeboundmod:命令 !M! 次。 NL 消耗 。" + "DESCRIPTION": "slimeboundmod:分裂 slimeboundmod:游击史莱姆 。 NL slimeboundmod:命令 !M! 次。", + "UPGRADE_DESCRIPTION": "slimeboundmod:分裂 slimeboundmod:游击史莱姆 。 NL slimeboundmod:命令 3次。" }, "Slimebound:SplitMire": { "NAME": "分裂:污泥", - "DESCRIPTION": "slimeboundmod:分裂 slimeboundmod:污泥史莱姆 。 NL slimeboundmod:命令 !M! 次。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "slimeboundmod:分裂 slimeboundmod:污泥史莱姆 。 NL slimeboundmod:命令 !M! 次。 NL 消耗 。" + "DESCRIPTION": "slimeboundmod:分裂 slimeboundmod:污泥史莱姆 。 NL slimeboundmod:命令 !M! 次。", + "UPGRADE_DESCRIPTION": "slimeboundmod:分裂 slimeboundmod:污泥史莱姆 。 NL slimeboundmod:命令 3 次。" }, "Slimebound:SplitSpecialist": { "NAME": "分裂:专家", @@ -348,8 +348,8 @@ }, "Slimebound:OneTwoCombo": { "NAME": "一二连击", - "DESCRIPTION": "造成 !D! 点伤害。 NL slimeboundmod:分裂 时, NL 本牌从弃牌堆返回手牌。", - "UPGRADE_DESCRIPTION": "造成 !D! 点伤害。 NL slimeboundmod:命令 。 NL slimeboundmod:分裂 时, NL 本牌从弃牌堆返回手牌。" + "DESCRIPTION": "造成 !D! 点伤害。 NL slimeboundmod:命令 。 NL slimeboundmod:分裂 时, NL 本牌从弃牌堆返回手牌。", + "UPGRADE_DESCRIPTION": "造成 !D! 点伤害。 NL slimeboundmod:命令 2次。 NL slimeboundmod:分裂 时, NL 本牌从弃牌堆返回手牌。" }, "Slimebound:ForwardTackle": { "NAME": "进军冲撞", @@ -366,7 +366,7 @@ "DESCRIPTION": "造成 !D! 点伤害。 NL 本回合接下来的 !M! 张牌将 slimeboundmod:命令 。" }, "Slimebound:Nibble": { - "NAME": "轻咬舔抵", + "NAME": "轻咬舔舐", "DESCRIPTION": "造成 !D! 点伤害。 NL 获得 *掠舔 。 NL 消耗 。", "UPGRADE_DESCRIPTION": "造成 !D! 点伤害。 NL 获得 *掠舔 。 NL 抽一张牌。 NL 消耗 。" }, diff --git a/src/main/resources/slimeboundResources/localization/zhs/KeywordStrings.json b/src/main/resources/slimeboundResources/localization/zhs/KeywordStrings.json index cc216ccec..67199f9a4 100644 --- a/src/main/resources/slimeboundResources/localization/zhs/KeywordStrings.json +++ b/src/main/resources/slimeboundResources/localization/zhs/KeywordStrings.json @@ -1,15 +1,19 @@ [ { "NAMES": [ - "吸收" + "吸收", + "absorb", + "absorbing", + "absorbed" ], "PROPERNAME": "吸收", "DESCRIPTION": "融合最前面的的 #y史莱姆 并获得 #b1 点 #y力量 。" }, { "NAMES": [ + "分裂", "split", - "分裂" + "splitting" ], "PROPERNAME": "分裂", "DESCRIPTION": "在最前面生成每回合开始时攻击的 #y史莱姆 爪牙。如果栏位不足,融合最后面的 #y史莱姆 再 #y分裂 并获得 #b1 点 #y力量 。" @@ -17,20 +21,24 @@ { "NAMES": [ "黏液", - "goop" + "goop", + "gooped" ], "PROPERNAME": "黏液", "DESCRIPTION": "每层 #y黏液 为下次攻击提供 #b1 点额外伤害,移除所有 #y黏液 并触发 #y吞食黏液 的效果。" }, { "NAMES": [ - "潜力" + "潜力", + "potency" ], "PROPERNAME": "潜力", "DESCRIPTION": "强化 #y分裂 的 #y史莱姆 的攻击伤害与附加效果。附加效果只有 #b50% 强化效率。" }, { "NAMES": [ - "命令" + "命令", + "command", + "commands" ], "PROPER_NAME": "命令", "DESCRIPTION": "最前面的 #y史莱姆 将会攻击。" @@ -54,7 +62,7 @@ "bruiser" ], "PROPERNAME": "好斗史莱姆", - "DESCRIPTION": "攻击时随机造成 #b5 点伤害。" + "DESCRIPTION": "攻击时随机造成 #b3 点伤害两次。" }, { "NAMES": [ @@ -130,7 +138,8 @@ }, { "NAMES": [ - "缓慢" + "缓慢", + "slow" ], "PROPERNAME": "缓慢", "DESCRIPTION": "一回合内每打出一张牌额外受到 10% 的伤害。" @@ -146,7 +155,9 @@ }, { "NAMES": [ - "尖塔首领" + "尖塔首领", + "spire boss", + "spire_boss" ], "PROPERNAME": "尖塔首领", "DESCRIPTION": "强力的0费牌,受尖塔中的首领启发而学会的新东西。" @@ -198,7 +209,8 @@ }, { "NAMES": [ - "吞食黏液" + "吞食黏液", + "consume" ], "PROPER_NAME": "吞食黏液", "DESCRIPTION": "当 #y攻击 带有 #y黏液 的敌人时可触发的额外效果。" @@ -214,16 +226,10 @@ }, { "NAMES": [ - "深埋" + "深埋", + "buried" ], "PROPER_NAME": "深埋", "DESCRIPTION": "被 #y发掘 的优先级最低。" - }, - { - "NAMES": [ - "重铸 以下为弃用文本" - ], - "PROPERNAME": "重铸", - "DESCRIPTION": "在本场战斗中,将卡牌替换为本职业的一张随机卡牌,其耗能减少 1 点。" } ] diff --git a/src/main/resources/slimeboundResources/localization/zhs/OrbStrings.json b/src/main/resources/slimeboundResources/localization/zhs/OrbStrings.json index e0442ed59..ca9bf305f 100644 --- a/src/main/resources/slimeboundResources/localization/zhs/OrbStrings.json +++ b/src/main/resources/slimeboundResources/localization/zhs/OrbStrings.json @@ -16,7 +16,7 @@ "NAME": "好斗史莱姆", "DESCRIPTION": [ "回合开始时造成 #b", - " 点伤害" + " 点伤害2次" ] }, "Slimebound:ScrapOozeSlime": { @@ -107,7 +107,7 @@ "DESCRIPTION": [ "造成 #b", " 点伤害并使你抽 #b", - " 张牌。" + " 张牌。抽牌量不受潜能影响" ] }, "Slimebound:DarklingSlime": { diff --git a/src/main/resources/slimeboundResources/localization/zhs/RelicStrings.json b/src/main/resources/slimeboundResources/localization/zhs/RelicStrings.json index 45d51e96c..df1eff76b 100644 --- a/src/main/resources/slimeboundResources/localization/zhs/RelicStrings.json +++ b/src/main/resources/slimeboundResources/localization/zhs/RelicStrings.json @@ -26,7 +26,7 @@ "NAME": "黏黏石", "FLAVOR": "据说它能根据你的情绪获得力量", "DESCRIPTIONS": [ - "战斗开始时,获得 #b2 点 #yslimeboundmod:潜力 。" + "战斗开始时,获得 #b1 点 #yslimeboundmod:潜力 。" ] }, "Slimebound:DailySplitRelic": { @@ -100,7 +100,7 @@ "NAME": "粘胶立方体", "FLAVOR": "嘿,它粘到你身上了。", "DESCRIPTIONS": [ - "抽到 #y状态 牌时再抽 #b1 张牌。" + "每回合前 #b2 次抽到 #y状态 或 #y诅咒 牌时再抽 #b1 张牌。若是 #y虚空 触发抽牌,再获得 [E] 。" ] } } diff --git a/src/main/resources/slimeboundResources/localization/zht/CardStrings.json b/src/main/resources/slimeboundResources/localization/zht/CardStrings.json index 1360d7544..d2d0eeb48 100644 --- a/src/main/resources/slimeboundResources/localization/zht/CardStrings.json +++ b/src/main/resources/slimeboundResources/localization/zht/CardStrings.json @@ -24,21 +24,21 @@ }, "Slimebound:Replication": { "NAME": "復製", - "DESCRIPTION": "選擇一張手牌。 NL 將其復製至抽牌堆頂部。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "選擇一張手牌。 NL 獲得其復製品。 NL 消耗 。", + "DESCRIPTION": "選擇一張手牌, NL 將其復製至抽牌堆頂部。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "選擇一張手牌, NL 獲得其復製品。 NL 消耗 。", "EXTENDED_DESCRIPTION": [ - "選擇一張牌復製到手牌。", - "選擇一張牌復製到抽牌堆頂部。" + "選擇復製手中一張牌。", + "選擇復製手中一張牌至抽牌堆頂部。" ] }, "Slimebound:Overexert": { "NAME": "超負荷", - "DESCRIPTION": "獲得 4 點 slimeboundmod:潛力 。 NL 兩回合後, NL slimeboundmod:吸收 所有史萊姆。", - "UPGRADE_DESCRIPTION": "獲得 4 點 slimeboundmod:潛力 。 NL slimeboundmod:命令 兩次。 NL 兩回合後, NL slimeboundmod:吸收 所有史萊姆。" + "DESCRIPTION": "獲得 5 點 slimeboundmod:潛力 。 NL !M! 回合後, NL slimeboundmod:吸收 所有史萊姆。", + "UPGRADE_DESCRIPTION": "獲得 5 點 slimeboundmod:潛力 。 NL slimeboundmod:命令 2次。 NL !M! 兩回合後, NL slimeboundmod:吸收 所有史萊姆。" }, "Slimebound:Split": { "NAME": "分裂", - "DESCRIPTION": "隨機 slimeboundmod:分裂 一只史萊姆。" + "DESCRIPTION": "slimeboundmod:分裂 一只 slimeboundmod:遊擊史萊姆。 NL slimeboundmod:命令 。" }, "Slimebound:LeadByExample": { "NAME": "身先士卒", @@ -60,8 +60,8 @@ }, "Slimebound:SlimeBarrage": { "NAME": "蜂擁齊上", - "DESCRIPTION": "造成 !D! 點傷害。 NL slimeboundmod:命令 所有史萊姆。", - "UPGRADE_DESCRIPTION": "造成 !D! 點傷害。 NL slimeboundmod:命令 所有史萊姆兩次。" + "DESCRIPTION": "造成 !D! 點傷害。 NL slimeboundmod:命令 所有史萊姆1次。", + "UPGRADE_DESCRIPTION": "造成 !D! 點傷害。 NL slimeboundmod:命令 所有史萊姆2次。" }, "Slimebound:SlimeBrawl": { "NAME": "史萊姆亂戰", @@ -77,7 +77,7 @@ }, "Slimebound:OozeBath": { "NAME": "黏液浴", - "DESCRIPTION": "敵方回合開始時, NL 給予目標 !M! 層 slimeboundmod:黏液 。 NL 消耗 。", + "DESCRIPTION": "敵方回合開始時, NL 給予目標 !slime! 層 slimeboundmod:黏液 。 NL 消耗 。", "UPGRADE_DESCRIPTION": "將一名敵人的 slimeboundmod:黏液 變為三倍。 NL 消耗 。" }, "Slimebound:SlimeSpikes": { @@ -90,12 +90,12 @@ }, "Slimebound:Dissolve": { "NAME": "黏質快餐", - "DESCRIPTION": "抽 !M! 張牌。 NL 消耗一張手牌, NL 獲得其耗能張 *掠舔 。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "抽 !M! 張牌。 NL 消耗一張手牌, NL 獲得其耗能張 *掠舔 。 NL 消耗 。" + "DESCRIPTION": "抽 !M! 張牌。 NL 消耗 一張手牌, NL 獲得其耗能張 *掠舔 。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "抽 !M! 張牌。 NL 消耗 一張手牌, NL 獲得其耗能張 *掠舔 。 NL 消耗 。" }, "Slimebound:DuplicatedForm": { "NAME": "增殖形態", - "DESCRIPTION": "每回合首張指向牌打出兩次。", + "DESCRIPTION": "每回合首張指向牌打出兩次。", "UPGRADE_DESCRIPTION": "每回合獲得 [E] 且首張指向牌打出兩次。", "EXTENDED_DESCRIPTION": [ "需要…… 生命……" @@ -110,8 +110,8 @@ ] }, "Slimebound:FormOfPuddle": { - "NAME": "化為泥淖", - "DESCRIPTION": "獲得1層 無實體 。 NL 消耗 。" + "NAME": "黏池之影", + "DESCRIPTION": "虛無 。 NL 獲得1層 無實體 。 NL 消耗 。" }, "Slimebound:GrowthPunch": { "NAME": "成長拳", @@ -119,7 +119,7 @@ }, "Slimebound:CheckThePlaybook": { "NAME": "查找策略", - "DESCRIPTION": "隨機獲得3張 slimeboundmod:衝撞 牌, NL 本場戰鬥其耗能減1。 NL 消耗 。" + "DESCRIPTION": "隨機獲得3張 slimeboundmod:沖撞 牌, NL 本場戰鬥其耗能減1。 NL 消耗 。" }, "Slimebound:Recycling": { "NAME": "循環再生", @@ -133,7 +133,7 @@ }, "Slimebound:RollThrough": { "NAME": "翻滾碾壓", - "DESCRIPTION": "對所有敵人造成 !D! 點傷害。 NL 接下來 !M! 張 slimeboundmod:衝撞 牌不會使你受到傷害。" + "DESCRIPTION": "對所有敵人造成 !D! 點傷害。 NL 接下來 !M! 張 slimeboundmod:沖撞 牌不會使你受到傷害。" }, "Slimebound:MassRepurpose": { "NAME": "回爐重造", @@ -147,8 +147,8 @@ }, "Slimebound:HauntingLick": { "NAME": "惡臭之舔", - "DESCRIPTION": "給予 !M! 層 易傷 與 !slime! 層 slimeboundmod:黏液 。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "給予 !M! 層 易傷 與 !slime! 層 slimeboundmod:黏液 。 NL 抽一張牌。 NL 消耗 。" + "DESCRIPTION": "給予 !M! 層 易傷 。 NL 給予 !slime! 層 slimeboundmod:黏液 。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "給予 !M! 層 易傷 。 NL 給予 !slime! 層 slimeboundmod:黏液 。 NL 抽一張牌。 NL 消耗 。" }, "Slimebound:MegaLick": { "NAME": "大舔特舔", @@ -167,12 +167,12 @@ }, "Slimebound:PressTheAttack": { "NAME": "強攻", - "DESCRIPTION": "造成 !D! 點傷害。 slimeboundmod:吞食黏液 : slimeboundmod:命令 。", - "UPGRADE_DESCRIPTION": "造成 !D! 點傷害。 slimeboundmod:吞食黏液 : slimeboundmod:命令 兩次。" + "DESCRIPTION": "造成 !D! 點傷害。 NL slimeboundmod:命令 1次。", + "UPGRADE_DESCRIPTION": "造成 !D! 點傷害。 NL slimeboundmod:命令 2次。" }, "Slimebound:TongueLash": { "NAME": "舌鞭", - "DESCRIPTION": "造成 !D! 點傷害。 NL 每有一張 消耗 的 slimeboundmod:舔舔 , NL 本場戰鬥傷害加 !M! 。" + "DESCRIPTION": "造成 !D! 點傷害。 NL 每有一張 消耗 的 slimeboundmod:舔舔 , NL 額外造成 !M! 點。" }, "Slimebound:ItLooksTasty": { "NAME": "垂涎欲滴", @@ -184,8 +184,8 @@ "DESCRIPTION": "給予 slimeboundmod:黏液 時, NL 額外給予 !M! 層 。" }, "Slimebound:FirmFortitude": { - "NAME": "軟化", - "DESCRIPTION": "力量 小於0時 不能被打出 。 NL 失去 2 點 力量 。 NL 獲得 !M! 點 slimeboundmod:潛力 。" + "NAME": "清算", + "DESCRIPTION": "失去 2 點 力量 。 NL 獲得 !M! 點 slimeboundmod:潛力 。" }, "Slimebound:WasteNot": { "NAME": "別浪費", @@ -205,12 +205,12 @@ "DESCRIPTION": "失去1個史萊姆欄位。 NL 獲得 !M! 點 力量 。 NL 獲得 !M! 點 敏捷 。" }, "Slimebound:HungryTackle": { - "NAME": "饑餓衝撞", + "NAME": "饑餓沖撞", "DESCRIPTION": "造成 !D! 點傷害。 NL 受到 !SlimeboundSelfharm! 點傷害。 NL 隨機 expansioncontent:發掘 1張 slimeboundmod:舔舔 。", "UPGRADE_DESCRIPTION": "造成 !D! 點傷害。 NL 受到 !SlimeboundSelfharm! 點傷害。 NL 隨機 expansioncontent:發掘 2張 slimeboundmod:舔舔 。" }, "Slimebound:FinishingTackle": { - "NAME": "開幕衝撞", + "NAME": "開幕沖撞", "DESCRIPTION": "造成 !D! 點傷害。 NL 受到 !SlimeboundSelfharm! 點傷害。 NL slimeboundmod:吞食黏液 : NL 給予 !M! 層 易傷 。" }, "Slimebound:LivingWall": { @@ -218,17 +218,17 @@ "DESCRIPTION": "獲得 !B! 格擋 。 NL 本回合被攻擊時, NL 給予對方 !slime! 層 slimeboundmod:黏液 。" }, "Slimebound:ComboTackle": { - "NAME": "長矛衝撞", + "NAME": "長矛沖撞", "DESCRIPTION": "造成 !D! 點傷害。 NL 受到 !SlimeboundSelfharm! 點傷害。 NL 抽 !M! 張牌。" }, "Slimebound:Tackle": { - "NAME": "衝撞", + "NAME": "沖撞", "DESCRIPTION": "造成 !D! 點傷害。 NL 受到 !SlimeboundSelfharm! 點傷害。" }, "Slimebound:GoopTackle": { - "NAME": "連續衝撞", - "DESCRIPTION": "造成 !D! 點傷害。 NL 受到 !SlimeboundSelfharm! 點傷害。 NL 隨機獲得1張 slimeboundmod:衝撞 牌, NL 本回合其耗能為0。", - "UPGRADE_DESCRIPTION": "造成 !D! 點傷害。 NL 受到 !SlimeboundSelfharm! 點傷害。 NL 隨機獲得1張 slimeboundmod:衝撞 牌+, NL 本回合其耗能為0。" + "NAME": "連續沖撞", + "DESCRIPTION": "造成 !D! 點傷害。 NL 受到 !SlimeboundSelfharm! 點傷害。 NL 隨機獲得1張 slimeboundmod:沖撞 牌, NL 本回合其耗能為0。", + "UPGRADE_DESCRIPTION": "造成 !D! 點傷害。 NL 受到 !SlimeboundSelfharm! 點傷害。 NL 隨機獲得1張 slimeboundmod:沖撞 牌+, NL 本回合其耗能為0。" }, "Slimebound:CorrosiveSpit": { "NAME": "腐蝕噴吐", @@ -236,16 +236,16 @@ }, "Slimebound:Chomp": { "NAME": "啃噬", - "DESCRIPTION": "造成 !D! 點傷害。 NL 隨機將手中一張 slimeboundmod:衝撞 牌的耗能本回合變為0。", - "UPGRADE_DESCRIPTION": "造成 !D! 點傷害。 NL 隨機將手中一張 slimeboundmod:衝撞 牌的耗能變為0。" + "DESCRIPTION": "造成 !D! 點傷害。 NL 隨機將手中一張 slimeboundmod:沖撞 牌的耗能本回合變為0。", + "UPGRADE_DESCRIPTION": "造成 !D! 點傷害。 NL 隨機將手中一張 slimeboundmod:沖撞 牌的耗能變為0。" }, "Slimebound:DouseInSlime": { "NAME": "浸入黏液", "DESCRIPTION": "給予 !slime! 層 slimeboundmod:黏液 。 NL 下次對該目標的攻擊不會移除 slimeboundmod:黏液 。" }, "Slimebound:FlameTackle": { - "NAME": "烈焰衝撞", - "DESCRIPTION": "造成 !D! 點傷害。 NL 受到 !SlimeboundSelfharm! 點傷害。 NL 本場戰鬥 slimeboundmod:衝撞 牌的傷害增加 !M! 點。" + "NAME": "烈焰沖撞", + "DESCRIPTION": "造成 !D! 點傷害。 NL 受到 !SlimeboundSelfharm! 點傷害。 NL 本場戰鬥 slimeboundmod:沖撞 牌的傷害增加 !M! 點。" }, "Slimebound:RainOfGoop": { "NAME": "黏液雨", @@ -261,7 +261,7 @@ "DESCRIPTION": "對所有敵人造成 !D! 點傷害。 NL 斬殺 時, NL 獲得 !M! 點最大生命。 NL 消耗 。" }, "Slimebound:ViciousTackle": { - "NAME": "狂暴衝撞", + "NAME": "狂暴沖撞", "DESCRIPTION": "造成 !D! 點傷害。 NL 受到 !SlimeboundSelfharm! 點傷害。 NL 本次 slimeboundmod:黏液 提供的額外傷害翻倍。", "UPGRADE_DESCRIPTION": "造成 !D! 點傷害。 NL 受到 !SlimeboundSelfharm! 點傷害。 NL 本次 slimeboundmod:黏液 提供的額外傷害與回復翻倍。" }, @@ -305,23 +305,23 @@ }, "Slimebound:SplitBruiser": { "NAME": "分裂:好鬥", - "DESCRIPTION": "slimeboundmod:分裂 slimeboundmod:好鬥史萊姆 。 NL slimeboundmod:命令 !M! 次。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "slimeboundmod:分裂 slimeboundmod:好鬥史萊姆 。 NL slimeboundmod:命令 !M! 次。 NL 消耗 。" + "DESCRIPTION": "slimeboundmod:分裂 slimeboundmod:好鬥史萊姆 。 NL slimeboundmod:命令 !M! 次。", + "UPGRADE_DESCRIPTION": "slimeboundmod:分裂 slimeboundmod:好鬥史萊姆 。 NL slimeboundmod:命令 3次。" }, "Slimebound:SplitLeeching": { "NAME": "分裂:水蛭", - "DESCRIPTION": "slimeboundmod:分裂 slimeboundmod:水蛭史萊姆 。 NL slimeboundmod:命令 !M! 次。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "slimeboundmod:分裂 slimeboundmod:水蛭史萊姆 。 NL slimeboundmod:命令 !M! 次。 NL 消耗 。" + "DESCRIPTION": "slimeboundmod:分裂 slimeboundmod:水蛭史萊姆 。 NL slimeboundmod:命令 !M! 次。", + "UPGRADE_DESCRIPTION": "slimeboundmod:分裂 slimeboundmod:水蛭史萊姆 。 NL slimeboundmod:命令 3次。" }, "Slimebound:SplitAcid": { "NAME": "分裂:遊擊", - "DESCRIPTION": "slimeboundmod:分裂 slimeboundmod:遊擊史萊姆 。 NL slimeboundmod:命令 !M! 次。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "slimeboundmod:分裂 slimeboundmod:遊擊史萊姆 。 NL slimeboundmod:命令 !M! 次。 NL 消耗 。" + "DESCRIPTION": "slimeboundmod:分裂 slimeboundmod:遊擊史萊姆 。 NL slimeboundmod:命令 !M! 次。", + "UPGRADE_DESCRIPTION": "slimeboundmod:分裂 slimeboundmod:遊擊史萊姆 。 NL slimeboundmod:命令 3次。" }, "Slimebound:SplitMire": { "NAME": "分裂:汙泥", - "DESCRIPTION": "slimeboundmod:分裂 slimeboundmod:汙泥史萊姆 。 NL slimeboundmod:命令 !M! 次。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "slimeboundmod:分裂 slimeboundmod:汙泥史萊姆 。 NL slimeboundmod:命令 !M! 次。 NL 消耗 。" + "DESCRIPTION": "slimeboundmod:分裂 slimeboundmod:汙泥史萊姆 。 NL slimeboundmod:命令 !M! 次。", + "UPGRADE_DESCRIPTION": "slimeboundmod:分裂 slimeboundmod:汙泥史萊姆 。 NL slimeboundmod:命令 3 次。" }, "Slimebound:SplitSpecialist": { "NAME": "分裂:專家", @@ -335,7 +335,7 @@ }, "Slimebound:BestDefense": { "NAME": "魯莽", - "DESCRIPTION": "slimeboundmod:衝撞 牌: NL 額外造成 !M! 點傷害。 NL 使你額外受到1點傷害。" + "DESCRIPTION": "slimeboundmod:沖撞 牌: NL 額外造成 !M! 點傷害。 NL 使你額外受到1點傷害。" }, "Slimebound:Darklings": { "NAME": "黝黑二人組", @@ -348,13 +348,13 @@ }, "Slimebound:OneTwoCombo": { "NAME": "一二連擊", - "DESCRIPTION": "造成 !D! 點傷害。 NL slimeboundmod:分裂 時, NL 本牌從棄牌堆返回手牌。", - "UPGRADE_DESCRIPTION": "造成 !D! 點傷害。 NL slimeboundmod:命令 。 NL slimeboundmod:分裂 時, NL 本牌從棄牌堆返回手牌。" + "DESCRIPTION": "造成 !D! 點傷害。 NL slimeboundmod:命令 。 NL slimeboundmod:分裂 時, NL 本牌從棄牌堆返回手牌。", + "UPGRADE_DESCRIPTION": "造成 !D! 點傷害。 NL slimeboundmod:命令 2次。 NL slimeboundmod:分裂 時, NL 本牌從棄牌堆返回手牌。" }, "Slimebound:ForwardTackle": { - "NAME": "進軍衝撞", - "DESCRIPTION": "造成 !D! 點傷害。 NL 受到 !SlimeboundSelfharm! 點傷害。 NL slimeboundmod:命令 兩次。", - "UPGRADE_DESCRIPTION": "造成 !D! 點傷害。 NL 受到 !SlimeboundSelfharm! 點傷害。 NL slimeboundmod:命令 三次。" + "NAME": "進軍沖撞", + "DESCRIPTION": "造成 !D! 點傷害。 NL 受到 !SlimeboundSelfharm! 點傷害。 NL slimeboundmod:命令 2次。", + "UPGRADE_DESCRIPTION": "造成 !D! 點傷害。 NL 受到 !SlimeboundSelfharm! 點傷害。 NL slimeboundmod:命令 3次。" }, "Slimebound:TagTeam": { "NAME": "搭檔", diff --git a/src/main/resources/slimeboundResources/localization/zht/KeywordStrings.json b/src/main/resources/slimeboundResources/localization/zht/KeywordStrings.json index 2d227911d..34e32675b 100644 --- a/src/main/resources/slimeboundResources/localization/zht/KeywordStrings.json +++ b/src/main/resources/slimeboundResources/localization/zht/KeywordStrings.json @@ -1,14 +1,19 @@ [ { "NAMES": [ - "吸收" + "吸收", + "absorb", + "absorbing", + "absorbed" ], "PROPERNAME": "吸收", "DESCRIPTION": "融合最前面的的 #y史萊姆 並獲得 #b1 點 #y力量 。" }, { "NAMES": [ - "分裂" + "分裂", + "split", + "splitting" ], "PROPERNAME": "分裂", "DESCRIPTION": "在最前面生成每回合開始時攻擊的 #y史萊姆 爪牙。如果欄位不足,融合最後面的 #y史萊姆 再 #y分裂 並獲得 #b1 點 #y力量 。" @@ -16,20 +21,24 @@ { "NAMES": [ "黏液", - "goop" + "goop", + "gooped" ], "PROPERNAME": "黏液", - "DESCRIPTION": "每層 #y黏液 為下次攻擊提供 #b1 點額外傷害,移除所有 #y黏液 並觸發 #y消耗黏液 的效果。" + "DESCRIPTION": "每層 #y黏液 為下次攻擊提供 #b1 點額外傷害,移除所有 #y黏液 並觸發 #y吞食黏液 的效果。" }, { "NAMES": [ - "潛力" + "潛力", + "potency" ], "PROPERNAME": "潛力", - "DESCRIPTION": "強化 #y分裂 的 #y史萊姆 的攻擊傷害和附加效果。附加效果只有 #b50% 強化效率。" + "DESCRIPTION": "強化 #y分裂 的 #y史萊姆 的攻擊傷害與附加效果。附加效果只有 #b50% 強化效率。" }, { "NAMES": [ - "命令" + "命令", + "command", + "commands" ], "PROPER_NAME": "命令", "DESCRIPTION": "最前面的 #y史萊姆 將會攻擊。" @@ -53,7 +62,7 @@ "bruiser" ], "PROPERNAME": "好鬥史萊姆", - "DESCRIPTION": "攻擊時隨機造成 #b5 點傷害。" + "DESCRIPTION": "攻擊時隨機造成 #b3 點傷害兩次。" }, { "NAMES": [ @@ -129,24 +138,26 @@ }, { "NAMES": [ - "緩慢" + "緩慢", + "slow" ], "PROPERNAME": "緩慢", "DESCRIPTION": "一回合內每打出一張牌額外受到 10% 的傷害。" }, { "NAMES": [ - "衝撞", + "沖撞", "tackle", - "tackles", - "沖撞" + "tackles" ], - "PROPERNAME": "衝撞", + "PROPERNAME": "沖撞", "DESCRIPTION": "一類高傷害 #y攻擊 牌,會對自己造成少量傷害。" }, { "NAMES": [ - "尖塔首領" + "尖塔首領", + "spire boss", + "spire_boss" ], "PROPERNAME": "尖塔首領", "DESCRIPTION": "強力的0費牌,受尖塔中的首領啟發而學會的新東西。" @@ -198,7 +209,8 @@ }, { "NAMES": [ - "吞食黏液" + "吞食黏液", + "consume" ], "PROPER_NAME": "吞食黏液", "DESCRIPTION": "當 #y攻擊 帶有 #y黏液 的敵人時可觸發的額外效果。" @@ -214,16 +226,10 @@ }, { "NAMES": [ - "深埋" + "深埋", + "buried" ], "PROPER_NAME": "深埋", "DESCRIPTION": "被 #y發掘 的優先級最低。" - }, - { - "NAMES": [ - "重鑄 以下為棄用文本" - ], - "PROPERNAME": "重鑄", - "DESCRIPTION": "在本場戰鬥中,將卡牌替換為本職業的一張隨機卡牌,其耗能減少 1 點。" } ] diff --git a/src/main/resources/slimeboundResources/localization/zht/OrbStrings.json b/src/main/resources/slimeboundResources/localization/zht/OrbStrings.json index f34fbfa7b..23765f17e 100644 --- a/src/main/resources/slimeboundResources/localization/zht/OrbStrings.json +++ b/src/main/resources/slimeboundResources/localization/zht/OrbStrings.json @@ -16,7 +16,7 @@ "NAME": "好鬥史萊姆", "DESCRIPTION": [ "回合開始時造成 #b", - " 點傷害" + " 點傷害2次" ] }, "Slimebound:ScrapOozeSlime": { @@ -107,7 +107,7 @@ "DESCRIPTION": [ "造成 #b", " 點傷害並使你抽 #b", - " 張牌。" + " 張牌。抽牌量不受潛能影響" ] }, "Slimebound:DarklingSlime": { diff --git a/src/main/resources/slimeboundResources/localization/zht/RelicStrings.json b/src/main/resources/slimeboundResources/localization/zht/RelicStrings.json index b789fe4d9..944042269 100644 --- a/src/main/resources/slimeboundResources/localization/zht/RelicStrings.json +++ b/src/main/resources/slimeboundResources/localization/zht/RelicStrings.json @@ -19,7 +19,7 @@ "FLAVOR": "一條完全由黏液包裹的斷尾,戰鬥時可以迷惑敵人。", "DESCRIPTIONS": [ "#yslimeboundmod:分裂 時,獲得 #b", - " 点 #y格擋 。" + " 點 #y格擋 。" ] }, "Slimebound:PotencyRelic": { @@ -40,7 +40,7 @@ "NAME": "破爛黏液", "FLAVOR": "", "DESCRIPTIONS": [ - "戰鬥開始時, #yslimeboundmod:分裂 一隻可重生的 #y破爛史萊姆 。在休息處,你可以向其棄予一張牌來改變它的傷害。 NL #r詛咒牌 : #r-2 點。 NL 普通牌 : #r-1 點。 NL #b罕見牌 : #g+1 點。 NL #y稀有牌 : #g+2 點。", + "戰鬥開始時, #yslimeboundmod:分裂 一只可重生的 #y破爛史萊姆 。在休息處,你可以向其棄予一張牌來改變它的傷害。 NL #r詛咒牌 : #r-2 點。 NL 普通牌 : #r-1 點。 NL #b罕見牌 : #g+1 點。 NL #y稀有牌 : #g+2 點。", "棄予破爛史萊姆一張牌,改變它的傷害。", "沒有可以棄予破爛史萊姆的牌了。", "廢棄" @@ -50,7 +50,7 @@ "NAME": "貪婪黏液", "FLAVOR": "尖塔裏找到的囤金子的朋友。", "DESCRIPTIONS": [ - "戰鬥開始時, #y分裂 一隻可重生的 #y貪婪史萊姆 。 NL 在休息處, #y貪婪史萊姆 會吞食 #b50 金幣並提高它造成的傷害 #g1 點。" + "戰鬥開始時, #y分裂 一只可重生的 #y貪婪史萊姆 。 NL 在休息處, #y貪婪史萊姆 會吞食 #b50 金幣並提高它造成的傷害 #g1 點。" ] }, "Slimebound:PreparedRelic": { @@ -64,7 +64,7 @@ "NAME": "黏液居者", "FLAVOR": "是它跟著我回家的。我能收養它嗎?", "DESCRIPTIONS": [ - "戰鬥開始時, #yslimeboundmod:分裂 一隻 #yslimeboundmod:好鬥史萊姆 。" + "戰鬥開始時, #yslimeboundmod:分裂 一只 #yslimeboundmod:好鬥史萊姆 。" ] }, "Slimebound:SlimedSkullRelic": { @@ -79,14 +79,14 @@ "NAME": "陸軍旗", "FLAVOR": "你和你的黏黏軍團。", "DESCRIPTIONS": [ - "戰鬥開始時,獲得 #b1 個史萊姆欄位並隨機 #yslimeboundmod:分裂 #b1 隻 #y史萊姆 。" + "戰鬥開始時,獲得 #b1 個史萊姆欄位並隨機 #yslimeboundmod:分裂 #b1 只 #y史萊姆 。" ] }, "Slimebound:SelfDamagePreventRelic": { "NAME": "碰撞護具", "FLAVOR": "進攻是最好的防守!", "DESCRIPTIONS": [ - " #yslimeboundmod:衝撞 牌造成的自我傷害減少 #b3 點。" + " #yslimeboundmod:沖撞 牌造成的自我傷害減少 #b3 點。" ] }, "Slimebound:TarBlob": { @@ -100,7 +100,7 @@ "NAME": "粘膠立方體", "FLAVOR": "嘿,它粘到你身上了。", "DESCRIPTIONS": [ - "抽到 #y狀態 牌時再抽 #b1 張牌。" + "每回合前 #b2 次抽到 #y狀態 或 #y詛咒 牌時再抽 #b1 張牌。若是 #y虛空 觸發抽牌,再獲得 [E] 。" ] } } diff --git a/src/main/resources/sneckomodResources/audio/bus.ogg b/src/main/resources/sneckomodResources/audio/bus.ogg new file mode 100644 index 000000000..f35354cfb Binary files /dev/null and b/src/main/resources/sneckomodResources/audio/bus.ogg differ diff --git a/src/main/resources/sneckomodResources/audio/shotgun.ogg b/src/main/resources/sneckomodResources/audio/shotgun.ogg new file mode 100644 index 000000000..9173e1fbc Binary files /dev/null and b/src/main/resources/sneckomodResources/audio/shotgun.ogg differ diff --git a/src/main/resources/sneckomodResources/images/betacards/AceOfWands.png b/src/main/resources/sneckomodResources/images/betacards/AceOfWands.png new file mode 100644 index 000000000..fbba2daa3 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/AceOfWands.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/AceOfWands_p.png b/src/main/resources/sneckomodResources/images/betacards/AceOfWands_p.png new file mode 100644 index 000000000..2df93c640 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/AceOfWands_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/Amass.png b/src/main/resources/sneckomodResources/images/betacards/Amass.png new file mode 100644 index 000000000..7e74973a6 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/Amass.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/Amass_p.png b/src/main/resources/sneckomodResources/images/betacards/Amass_p.png new file mode 100644 index 000000000..503f6dca7 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/Amass_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/Behold.png b/src/main/resources/sneckomodResources/images/betacards/Behold.png new file mode 100644 index 000000000..1c4a84e7c Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/Behold.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/Behold_p.png b/src/main/resources/sneckomodResources/images/betacards/Behold_p.png new file mode 100644 index 000000000..349e10faa Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/Behold_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/Belittle.png b/src/main/resources/sneckomodResources/images/betacards/Belittle.png new file mode 100644 index 000000000..cfe4eaa6a Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/Belittle.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/Belittle_p.png b/src/main/resources/sneckomodResources/images/betacards/Belittle_p.png new file mode 100644 index 000000000..0afbac759 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/Belittle_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/BeyondArmor.png b/src/main/resources/sneckomodResources/images/betacards/BeyondArmor.png new file mode 100644 index 000000000..afcda02b5 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/BeyondArmor.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/BeyondArmor_p.png b/src/main/resources/sneckomodResources/images/betacards/BeyondArmor_p.png new file mode 100644 index 000000000..9ba23eaa9 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/BeyondArmor_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/BlunderGuard.png b/src/main/resources/sneckomodResources/images/betacards/BlunderGuard.png new file mode 100644 index 000000000..d8fb95fb7 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/BlunderGuard.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/BlunderGuard_p.png b/src/main/resources/sneckomodResources/images/betacards/BlunderGuard_p.png new file mode 100644 index 000000000..cf41b3884 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/BlunderGuard_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/Blunderbus.png b/src/main/resources/sneckomodResources/images/betacards/Blunderbus.png new file mode 100644 index 000000000..80e5964f5 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/Blunderbus.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/Blunderbus_p.png b/src/main/resources/sneckomodResources/images/betacards/Blunderbus_p.png new file mode 100644 index 000000000..07a4502d5 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/Blunderbus_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/CobraCoil.png b/src/main/resources/sneckomodResources/images/betacards/CobraCoil.png new file mode 100644 index 000000000..754a63371 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/CobraCoil.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/CobraCoil_p.png b/src/main/resources/sneckomodResources/images/betacards/CobraCoil_p.png new file mode 100644 index 000000000..c0c15021f Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/CobraCoil_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/ComboString.png b/src/main/resources/sneckomodResources/images/betacards/ComboString.png new file mode 100644 index 000000000..8f4678410 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/ComboString.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/ComboString_p.png b/src/main/resources/sneckomodResources/images/betacards/ComboString_p.png new file mode 100644 index 000000000..1e664a1f4 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/ComboString_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/Cower.png b/src/main/resources/sneckomodResources/images/betacards/Cower.png new file mode 100644 index 000000000..39f4bc31f Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/Cower.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/Cower_p.png b/src/main/resources/sneckomodResources/images/betacards/Cower_p.png new file mode 100644 index 000000000..1a040f02b Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/Cower_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/CrystalBoomerang.png b/src/main/resources/sneckomodResources/images/betacards/CrystalBoomerang.png new file mode 100644 index 000000000..845e29b0c Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/CrystalBoomerang.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/CrystalBoomerang_p.png b/src/main/resources/sneckomodResources/images/betacards/CrystalBoomerang_p.png new file mode 100644 index 000000000..848334fec Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/CrystalBoomerang_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/Deception.png b/src/main/resources/sneckomodResources/images/betacards/Deception.png new file mode 100644 index 000000000..cf16b672d Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/Deception.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/Deception_p.png b/src/main/resources/sneckomodResources/images/betacards/Deception_p.png new file mode 100644 index 000000000..0754807ec Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/Deception_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/DiceBoulder.png b/src/main/resources/sneckomodResources/images/betacards/DiceBoulder.png index 10c9af790..91a61ac96 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/DiceBoulder.png and b/src/main/resources/sneckomodResources/images/betacards/DiceBoulder.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/DiceBoulder_p.png b/src/main/resources/sneckomodResources/images/betacards/DiceBoulder_p.png index 3c9db2ed2..f81f1e361 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/DiceBoulder_p.png and b/src/main/resources/sneckomodResources/images/betacards/DiceBoulder_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/DragonsHoard.png b/src/main/resources/sneckomodResources/images/betacards/DragonsHoard.png new file mode 100644 index 000000000..658346c9d Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/DragonsHoard.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/DragonsHoard_p.png b/src/main/resources/sneckomodResources/images/betacards/DragonsHoard_p.png new file mode 100644 index 000000000..c46053e48 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/DragonsHoard_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/FlashInThePan.png b/src/main/resources/sneckomodResources/images/betacards/FlashInThePan.png new file mode 100644 index 000000000..45f027de5 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/FlashInThePan.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/FlashInThePan_p.png b/src/main/resources/sneckomodResources/images/betacards/FlashInThePan_p.png new file mode 100644 index 000000000..c3d13c42e Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/FlashInThePan_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/Flop.png b/src/main/resources/sneckomodResources/images/betacards/Flop.png new file mode 100644 index 000000000..e651aec3d Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/Flop.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/Flop_p.png b/src/main/resources/sneckomodResources/images/betacards/Flop_p.png new file mode 100644 index 000000000..c248c3389 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/Flop_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/FourOfAKind.png b/src/main/resources/sneckomodResources/images/betacards/FourOfAKind.png new file mode 100644 index 000000000..625c8408f Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/FourOfAKind.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/FourOfAKind_p.png b/src/main/resources/sneckomodResources/images/betacards/FourOfAKind_p.png new file mode 100644 index 000000000..99e5afdc7 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/FourOfAKind_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/GildedShield.png b/src/main/resources/sneckomodResources/images/betacards/GildedShield.png new file mode 100644 index 000000000..07226ece9 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/GildedShield.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/GildedShield_p.png b/src/main/resources/sneckomodResources/images/betacards/GildedShield_p.png new file mode 100644 index 000000000..9df102ae2 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/GildedShield_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/GlitteringGambit.png b/src/main/resources/sneckomodResources/images/betacards/GlitteringGambit.png index 6ba8e3b15..aad02e4a7 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/GlitteringGambit.png and b/src/main/resources/sneckomodResources/images/betacards/GlitteringGambit.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/GlitteringGambit_p.png b/src/main/resources/sneckomodResources/images/betacards/GlitteringGambit_p.png index b1af0afe1..f869938b8 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/GlitteringGambit_p.png and b/src/main/resources/sneckomodResources/images/betacards/GlitteringGambit_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/ImmovableObject.png b/src/main/resources/sneckomodResources/images/betacards/ImmovableObject.png new file mode 100644 index 000000000..1b1bf4a6a Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/ImmovableObject.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/ImmovableObject_p.png b/src/main/resources/sneckomodResources/images/betacards/ImmovableObject_p.png new file mode 100644 index 000000000..c0ff035fd Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/ImmovableObject_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/InertBlade.png b/src/main/resources/sneckomodResources/images/betacards/InertBlade.png new file mode 100644 index 000000000..4c3137eb4 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/InertBlade.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/InertBlade_p.png b/src/main/resources/sneckomodResources/images/betacards/InertBlade_p.png new file mode 100644 index 000000000..6d2dfc834 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/InertBlade_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/Jackpot.png b/src/main/resources/sneckomodResources/images/betacards/Jackpot.png new file mode 100644 index 000000000..0ae550dfd Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/Jackpot.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/Jackpot_p.png b/src/main/resources/sneckomodResources/images/betacards/Jackpot_p.png new file mode 100644 index 000000000..6ccf97e2b Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/Jackpot_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/Lacerate.png b/src/main/resources/sneckomodResources/images/betacards/Lacerate.png new file mode 100644 index 000000000..8fe2865d3 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/Lacerate.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/Lacerate_p.png b/src/main/resources/sneckomodResources/images/betacards/Lacerate_p.png new file mode 100644 index 000000000..9d8ea29d9 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/Lacerate_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/LastStrike.png b/src/main/resources/sneckomodResources/images/betacards/LastStrike.png new file mode 100644 index 000000000..635e2fda2 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/LastStrike.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/LastStrike_p.png b/src/main/resources/sneckomodResources/images/betacards/LastStrike_p.png new file mode 100644 index 000000000..8a4dbe055 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/LastStrike_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/LatchOn.png b/src/main/resources/sneckomodResources/images/betacards/LatchOn.png new file mode 100644 index 000000000..34037f772 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/LatchOn.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/LatchOn_p.png b/src/main/resources/sneckomodResources/images/betacards/LatchOn_p.png new file mode 100644 index 000000000..130698d51 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/LatchOn_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/LilGuardian.png b/src/main/resources/sneckomodResources/images/betacards/LilGuardian.png new file mode 100644 index 000000000..ab4c378a1 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/LilGuardian.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/LilGuardian_p.png b/src/main/resources/sneckomodResources/images/betacards/LilGuardian_p.png new file mode 100644 index 000000000..a3f7468f8 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/LilGuardian_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/LuckyBreak.png b/src/main/resources/sneckomodResources/images/betacards/LuckyBreak.png new file mode 100644 index 000000000..cda8d12db Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/LuckyBreak.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/LuckyBreak_p.png b/src/main/resources/sneckomodResources/images/betacards/LuckyBreak_p.png new file mode 100644 index 000000000..f8679ffbf Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/LuckyBreak_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/MakeshiftBlade.png b/src/main/resources/sneckomodResources/images/betacards/MakeshiftBlade.png new file mode 100644 index 000000000..2085db04a Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/MakeshiftBlade.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/MakeshiftBlade_p.png b/src/main/resources/sneckomodResources/images/betacards/MakeshiftBlade_p.png new file mode 100644 index 000000000..bc89b244e Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/MakeshiftBlade_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/MarkedCard.png b/src/main/resources/sneckomodResources/images/betacards/MarkedCard.png new file mode 100644 index 000000000..b732689e7 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/MarkedCard.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/MarkedCard_p.png b/src/main/resources/sneckomodResources/images/betacards/MarkedCard_p.png new file mode 100644 index 000000000..8ea4d17b6 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/MarkedCard_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/Medusa.png b/src/main/resources/sneckomodResources/images/betacards/Medusa.png new file mode 100644 index 000000000..2eddec644 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/Medusa.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/Medusa_p.png b/src/main/resources/sneckomodResources/images/betacards/Medusa_p.png new file mode 100644 index 000000000..4727bbb49 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/Medusa_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/Memorize_p.png b/src/main/resources/sneckomodResources/images/betacards/Mesermize_p.png similarity index 100% rename from src/main/resources/sneckomodResources/images/cards/Memorize_p.png rename to src/main/resources/sneckomodResources/images/betacards/Mesermize_p.png diff --git a/src/main/resources/sneckomodResources/images/betacards/Mesmerize.png b/src/main/resources/sneckomodResources/images/betacards/Mesmerize.png new file mode 100644 index 000000000..27042f6f3 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/Mesmerize.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/Mesmerize_p.png b/src/main/resources/sneckomodResources/images/betacards/Mesmerize_p.png new file mode 100644 index 000000000..a7a9d6276 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/Mesmerize_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/MintCondition.png b/src/main/resources/sneckomodResources/images/betacards/MintCondition.png new file mode 100644 index 000000000..2bc975880 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/MintCondition.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/MintCondition_p.png b/src/main/resources/sneckomodResources/images/betacards/MintCondition_p.png new file mode 100644 index 000000000..2542825bb Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/MintCondition_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/OtherworldlySlash.png b/src/main/resources/sneckomodResources/images/betacards/OtherworldlySlash.png new file mode 100644 index 000000000..eaae3bc63 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/OtherworldlySlash.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/OtherworldlySlash_p.png b/src/main/resources/sneckomodResources/images/betacards/OtherworldlySlash_p.png new file mode 100644 index 000000000..95acc3f1b Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/OtherworldlySlash_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/OverwhelmingPresence.png b/src/main/resources/sneckomodResources/images/betacards/OverwhelmingPresence.png new file mode 100644 index 000000000..5f7f35120 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/OverwhelmingPresence.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/OverwhelmingPresence_p.png b/src/main/resources/sneckomodResources/images/betacards/OverwhelmingPresence_p.png new file mode 100644 index 000000000..c2f40381b Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/OverwhelmingPresence_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/PerpetualSerpent.png b/src/main/resources/sneckomodResources/images/betacards/PerpetualSerpent.png new file mode 100644 index 000000000..d62c37ca3 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/PerpetualSerpent.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/PerpetualSerpent_p.png b/src/main/resources/sneckomodResources/images/betacards/PerpetualSerpent_p.png new file mode 100644 index 000000000..a2ddec657 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/PerpetualSerpent_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/PoisonParadise.png b/src/main/resources/sneckomodResources/images/betacards/PoisonParadise.png new file mode 100644 index 000000000..a7eec29c5 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/PoisonParadise.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/PoisonParadise_p.png b/src/main/resources/sneckomodResources/images/betacards/PoisonParadise_p.png new file mode 100644 index 000000000..15e0beba5 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/PoisonParadise_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/PowerShot.png b/src/main/resources/sneckomodResources/images/betacards/PowerShot.png new file mode 100644 index 000000000..676cfad88 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/PowerShot.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/PowerShot_p.png b/src/main/resources/sneckomodResources/images/betacards/PowerShot_p.png new file mode 100644 index 000000000..4643d746c Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/PowerShot_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/RiskySword.png b/src/main/resources/sneckomodResources/images/betacards/RiskySword.png new file mode 100644 index 000000000..be4ed5f12 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/RiskySword.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/RiskySword_p.png b/src/main/resources/sneckomodResources/images/betacards/RiskySword_p.png new file mode 100644 index 000000000..459e069c0 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/RiskySword_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/RiskySworrd.png b/src/main/resources/sneckomodResources/images/betacards/RiskySworrd.png new file mode 100644 index 000000000..be4ed5f12 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/RiskySworrd.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/RoundaboutSwing.png b/src/main/resources/sneckomodResources/images/betacards/RoundaboutSwing.png new file mode 100644 index 000000000..824ce6a23 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/RoundaboutSwing.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/RoundaboutSwing_p.png b/src/main/resources/sneckomodResources/images/betacards/RoundaboutSwing_p.png new file mode 100644 index 000000000..91d725062 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/RoundaboutSwing_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/SaveForLater.png b/src/main/resources/sneckomodResources/images/betacards/SaveForLater.png new file mode 100644 index 000000000..ea6fe6839 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/SaveForLater.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/SaveForLater_p.png b/src/main/resources/sneckomodResources/images/betacards/SaveForLater_p.png new file mode 100644 index 000000000..58ea88b84 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/SaveForLater_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/SerpentBottle.png b/src/main/resources/sneckomodResources/images/betacards/SerpentBottle.png new file mode 100644 index 000000000..b112dc160 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/SerpentBottle.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/SerpentBottle_p.png b/src/main/resources/sneckomodResources/images/betacards/SerpentBottle_p.png new file mode 100644 index 000000000..e733ec721 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/SerpentBottle_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/SerpentineSleuth.png b/src/main/resources/sneckomodResources/images/betacards/SerpentineSleuth.png new file mode 100644 index 000000000..54c0504f7 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/SerpentineSleuth.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/SerpentineSleuth_p.png b/src/main/resources/sneckomodResources/images/betacards/SerpentineSleuth_p.png new file mode 100644 index 000000000..c779b81e4 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/SerpentineSleuth_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/SerpentsNest.png b/src/main/resources/sneckomodResources/images/betacards/SerpentsNest.png new file mode 100644 index 000000000..c0e9f799b Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/SerpentsNest.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/SerpentsNest_p.png b/src/main/resources/sneckomodResources/images/betacards/SerpentsNest_p.png new file mode 100644 index 000000000..b000f3d5d Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/SerpentsNest_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/Serpentscale.png b/src/main/resources/sneckomodResources/images/betacards/Serpentscale.png new file mode 100644 index 000000000..dfc50ccd5 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/Serpentscale.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/Serpentscale_p.png b/src/main/resources/sneckomodResources/images/betacards/Serpentscale_p.png new file mode 100644 index 000000000..ba9d07839 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/Serpentscale_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/SlitherStrike.png b/src/main/resources/sneckomodResources/images/betacards/SlitherThrough.png similarity index 100% rename from src/main/resources/sneckomodResources/images/betacards/SlitherStrike.png rename to src/main/resources/sneckomodResources/images/betacards/SlitherThrough.png diff --git a/src/main/resources/sneckomodResources/images/betacards/SlitherStrike_p.png b/src/main/resources/sneckomodResources/images/betacards/SlitherThrough_p.png similarity index 100% rename from src/main/resources/sneckomodResources/images/betacards/SlitherStrike_p.png rename to src/main/resources/sneckomodResources/images/betacards/SlitherThrough_p.png diff --git a/src/main/resources/sneckomodResources/images/betacards/SnakeEyes.png b/src/main/resources/sneckomodResources/images/betacards/SnakeEyes.png new file mode 100644 index 000000000..cf4502c2a Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/SnakeEyes.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/SnakeEyes_p.png b/src/main/resources/sneckomodResources/images/betacards/SnakeEyes_p.png new file mode 100644 index 000000000..8e0cc898b Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/SnakeEyes_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/ThrowingCards.png b/src/main/resources/sneckomodResources/images/betacards/ThrowingCards.png new file mode 100644 index 000000000..b38f5f7d7 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/ThrowingCards.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/ThrowingCards_p.png b/src/main/resources/sneckomodResources/images/betacards/ThrowingCards_p.png new file mode 100644 index 000000000..c02307678 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/ThrowingCards_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/ToothAndClaw.png b/src/main/resources/sneckomodResources/images/betacards/ToothAndClaw.png new file mode 100644 index 000000000..624d8c69d Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/ToothAndClaw.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/ToothAndClaw_p.png b/src/main/resources/sneckomodResources/images/betacards/ToothAndClaw_p.png new file mode 100644 index 000000000..34755efc4 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/ToothAndClaw_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/ToxicPersonality.png b/src/main/resources/sneckomodResources/images/betacards/ToxicPersonality.png new file mode 100644 index 000000000..fbba2daa3 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/ToxicPersonality.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/ToxicPersonality_p.png b/src/main/resources/sneckomodResources/images/betacards/ToxicPersonality_p.png new file mode 100644 index 000000000..2df93c640 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/ToxicPersonality_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/TrashCan.png b/src/main/resources/sneckomodResources/images/betacards/TrashCan.png new file mode 100644 index 000000000..25fd6d776 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/TrashCan.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/TrashCan_p.png b/src/main/resources/sneckomodResources/images/betacards/TrashCan_p.png new file mode 100644 index 000000000..1f4720a9e Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/TrashCan_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/Tsunami.png b/src/main/resources/sneckomodResources/images/betacards/Tsunami.png new file mode 100644 index 000000000..a8e0539c8 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/Tsunami.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/Tsunami_p.png b/src/main/resources/sneckomodResources/images/betacards/Tsunami_p.png new file mode 100644 index 000000000..552dab03c Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/Tsunami_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/TyphoonFang.png b/src/main/resources/sneckomodResources/images/betacards/TyphoonFang.png new file mode 100644 index 000000000..1d445f98d Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/TyphoonFang.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/TyphoonFang_p.png b/src/main/resources/sneckomodResources/images/betacards/TyphoonFang_p.png new file mode 100644 index 000000000..c6f913d88 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/TyphoonFang_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/ViperEssence.png b/src/main/resources/sneckomodResources/images/betacards/ViperEssence.png new file mode 100644 index 000000000..bb099288d Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/ViperEssence.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/ViperEssence_p.png b/src/main/resources/sneckomodResources/images/betacards/ViperEssence_p.png new file mode 100644 index 000000000..9b032bc52 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/ViperEssence_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/Whack.png b/src/main/resources/sneckomodResources/images/betacards/Whack.png new file mode 100644 index 000000000..ee77efe93 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/Whack.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/Whack_p.png b/src/main/resources/sneckomodResources/images/betacards/Whack_p.png new file mode 100644 index 000000000..de62260ca Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/Whack_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/WideAngle.png b/src/main/resources/sneckomodResources/images/betacards/WideAngle.png new file mode 100644 index 000000000..8be1f0575 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/WideAngle.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/WideAngle_p.png b/src/main/resources/sneckomodResources/images/betacards/WideAngle_p.png new file mode 100644 index 000000000..ddf5a6943 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/WideAngle_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/Yearn.png b/src/main/resources/sneckomodResources/images/betacards/Yearn.png new file mode 100644 index 000000000..1b1bf4a6a Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/Yearn.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/Yearn_p.png b/src/main/resources/sneckomodResources/images/betacards/Yearn_p.png new file mode 100644 index 000000000..c0ff035fd Binary files /dev/null and b/src/main/resources/sneckomodResources/images/betacards/Yearn_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/Unknown.png b/src/main/resources/sneckomodResources/images/betacards/unknown/Unknown.png similarity index 100% rename from src/main/resources/sneckomodResources/images/betacards/Unknown.png rename to src/main/resources/sneckomodResources/images/betacards/unknown/Unknown.png diff --git a/src/main/resources/sneckomodResources/images/betacards/Unknown0Cost.png b/src/main/resources/sneckomodResources/images/betacards/unknown/Unknown0Cost.png similarity index 100% rename from src/main/resources/sneckomodResources/images/betacards/Unknown0Cost.png rename to src/main/resources/sneckomodResources/images/betacards/unknown/Unknown0Cost.png diff --git a/src/main/resources/sneckomodResources/images/betacards/Unknown0Cost_p.png b/src/main/resources/sneckomodResources/images/betacards/unknown/Unknown0Cost_p.png similarity index 100% rename from src/main/resources/sneckomodResources/images/betacards/Unknown0Cost_p.png rename to src/main/resources/sneckomodResources/images/betacards/unknown/Unknown0Cost_p.png diff --git a/src/main/resources/sneckomodResources/images/betacards/Unknown1Cost.png b/src/main/resources/sneckomodResources/images/betacards/unknown/Unknown1Cost.png similarity index 100% rename from src/main/resources/sneckomodResources/images/betacards/Unknown1Cost.png rename to src/main/resources/sneckomodResources/images/betacards/unknown/Unknown1Cost.png diff --git a/src/main/resources/sneckomodResources/images/betacards/Unknown1Cost_p.png b/src/main/resources/sneckomodResources/images/betacards/unknown/Unknown1Cost_p.png similarity index 100% rename from src/main/resources/sneckomodResources/images/betacards/Unknown1Cost_p.png rename to src/main/resources/sneckomodResources/images/betacards/unknown/Unknown1Cost_p.png diff --git a/src/main/resources/sneckomodResources/images/betacards/Unknown2Cost.png b/src/main/resources/sneckomodResources/images/betacards/unknown/Unknown2Cost.png similarity index 100% rename from src/main/resources/sneckomodResources/images/betacards/Unknown2Cost.png rename to src/main/resources/sneckomodResources/images/betacards/unknown/Unknown2Cost.png diff --git a/src/main/resources/sneckomodResources/images/betacards/Unknown2Cost_p.png b/src/main/resources/sneckomodResources/images/betacards/unknown/Unknown2Cost_p.png similarity index 100% rename from src/main/resources/sneckomodResources/images/betacards/Unknown2Cost_p.png rename to src/main/resources/sneckomodResources/images/betacards/unknown/Unknown2Cost_p.png diff --git a/src/main/resources/sneckomodResources/images/betacards/Unknown3Cost.png b/src/main/resources/sneckomodResources/images/betacards/unknown/Unknown3Cost.png similarity index 100% rename from src/main/resources/sneckomodResources/images/betacards/Unknown3Cost.png rename to src/main/resources/sneckomodResources/images/betacards/unknown/Unknown3Cost.png diff --git a/src/main/resources/sneckomodResources/images/betacards/Unknown3Cost_p.png b/src/main/resources/sneckomodResources/images/betacards/unknown/Unknown3Cost_p.png similarity index 100% rename from src/main/resources/sneckomodResources/images/betacards/Unknown3Cost_p.png rename to src/main/resources/sneckomodResources/images/betacards/unknown/Unknown3Cost_p.png diff --git a/src/main/resources/sneckomodResources/images/betacards/UnknownBlock.png b/src/main/resources/sneckomodResources/images/betacards/unknown/UnknownBlock.png similarity index 100% rename from src/main/resources/sneckomodResources/images/betacards/UnknownBlock.png rename to src/main/resources/sneckomodResources/images/betacards/unknown/UnknownBlock.png diff --git a/src/main/resources/sneckomodResources/images/betacards/UnknownBlock_p.png b/src/main/resources/sneckomodResources/images/betacards/unknown/UnknownBlock_p.png similarity index 100% rename from src/main/resources/sneckomodResources/images/betacards/UnknownBlock_p.png rename to src/main/resources/sneckomodResources/images/betacards/unknown/UnknownBlock_p.png diff --git a/src/main/resources/sneckomodResources/images/betacards/UnknownBoss.png b/src/main/resources/sneckomodResources/images/betacards/unknown/UnknownBoss.png similarity index 100% rename from src/main/resources/sneckomodResources/images/betacards/UnknownBoss.png rename to src/main/resources/sneckomodResources/images/betacards/unknown/UnknownBoss.png diff --git a/src/main/resources/sneckomodResources/images/betacards/UnknownBoss_p.png b/src/main/resources/sneckomodResources/images/betacards/unknown/UnknownBoss_p.png similarity index 100% rename from src/main/resources/sneckomodResources/images/betacards/UnknownBoss_p.png rename to src/main/resources/sneckomodResources/images/betacards/unknown/UnknownBoss_p.png diff --git a/src/main/resources/sneckomodResources/images/betacards/UnknownClass.png b/src/main/resources/sneckomodResources/images/betacards/unknown/UnknownClass.png similarity index 100% rename from src/main/resources/sneckomodResources/images/betacards/UnknownClass.png rename to src/main/resources/sneckomodResources/images/betacards/unknown/UnknownClass.png diff --git a/src/main/resources/sneckomodResources/images/betacards/UnknownClass_p.png b/src/main/resources/sneckomodResources/images/betacards/unknown/UnknownClass_p.png similarity index 100% rename from src/main/resources/sneckomodResources/images/betacards/UnknownClass_p.png rename to src/main/resources/sneckomodResources/images/betacards/unknown/UnknownClass_p.png diff --git a/src/main/resources/sneckomodResources/images/betacards/UnknownColorless.png b/src/main/resources/sneckomodResources/images/betacards/unknown/UnknownColorless.png similarity index 100% rename from src/main/resources/sneckomodResources/images/betacards/UnknownColorless.png rename to src/main/resources/sneckomodResources/images/betacards/unknown/UnknownColorless.png diff --git a/src/main/resources/sneckomodResources/images/betacards/UnknownColorless_p.png b/src/main/resources/sneckomodResources/images/betacards/unknown/UnknownColorless_p.png similarity index 100% rename from src/main/resources/sneckomodResources/images/betacards/UnknownColorless_p.png rename to src/main/resources/sneckomodResources/images/betacards/unknown/UnknownColorless_p.png diff --git a/src/main/resources/sneckomodResources/images/betacards/UnknownCommonAttack.png b/src/main/resources/sneckomodResources/images/betacards/unknown/UnknownCommonAttack.png similarity index 100% rename from src/main/resources/sneckomodResources/images/betacards/UnknownCommonAttack.png rename to src/main/resources/sneckomodResources/images/betacards/unknown/UnknownCommonAttack.png diff --git a/src/main/resources/sneckomodResources/images/betacards/UnknownCommonAttack_p.png b/src/main/resources/sneckomodResources/images/betacards/unknown/UnknownCommonAttack_p.png similarity index 100% rename from src/main/resources/sneckomodResources/images/betacards/UnknownCommonAttack_p.png rename to src/main/resources/sneckomodResources/images/betacards/unknown/UnknownCommonAttack_p.png diff --git a/src/main/resources/sneckomodResources/images/betacards/UnknownCommonSkill.png b/src/main/resources/sneckomodResources/images/betacards/unknown/UnknownCommonSkill.png similarity index 100% rename from src/main/resources/sneckomodResources/images/betacards/UnknownCommonSkill.png rename to src/main/resources/sneckomodResources/images/betacards/unknown/UnknownCommonSkill.png diff --git a/src/main/resources/sneckomodResources/images/betacards/UnknownCommonSkill_p.png b/src/main/resources/sneckomodResources/images/betacards/unknown/UnknownCommonSkill_p.png similarity index 100% rename from src/main/resources/sneckomodResources/images/betacards/UnknownCommonSkill_p.png rename to src/main/resources/sneckomodResources/images/betacards/unknown/UnknownCommonSkill_p.png diff --git a/src/main/resources/sneckomodResources/images/betacards/UnknownDexterity.png b/src/main/resources/sneckomodResources/images/betacards/unknown/UnknownDexterity.png similarity index 100% rename from src/main/resources/sneckomodResources/images/betacards/UnknownDexterity.png rename to src/main/resources/sneckomodResources/images/betacards/unknown/UnknownDexterity.png diff --git a/src/main/resources/sneckomodResources/images/betacards/UnknownDexterity_p.png b/src/main/resources/sneckomodResources/images/betacards/unknown/UnknownDexterity_p.png similarity index 100% rename from src/main/resources/sneckomodResources/images/betacards/UnknownDexterity_p.png rename to src/main/resources/sneckomodResources/images/betacards/unknown/UnknownDexterity_p.png diff --git a/src/main/resources/sneckomodResources/images/betacards/UnknownDraw.png b/src/main/resources/sneckomodResources/images/betacards/unknown/UnknownDraw.png similarity index 100% rename from src/main/resources/sneckomodResources/images/betacards/UnknownDraw.png rename to src/main/resources/sneckomodResources/images/betacards/unknown/UnknownDraw.png diff --git a/src/main/resources/sneckomodResources/images/betacards/UnknownDraw_p.png b/src/main/resources/sneckomodResources/images/betacards/unknown/UnknownDraw_p.png similarity index 100% rename from src/main/resources/sneckomodResources/images/betacards/UnknownDraw_p.png rename to src/main/resources/sneckomodResources/images/betacards/unknown/UnknownDraw_p.png diff --git a/src/main/resources/sneckomodResources/images/betacards/UnknownExhaust.png b/src/main/resources/sneckomodResources/images/betacards/unknown/UnknownExhaust.png similarity index 100% rename from src/main/resources/sneckomodResources/images/betacards/UnknownExhaust.png rename to src/main/resources/sneckomodResources/images/betacards/unknown/UnknownExhaust.png diff --git a/src/main/resources/sneckomodResources/images/betacards/UnknownExhaust_p.png b/src/main/resources/sneckomodResources/images/betacards/unknown/UnknownExhaust_p.png similarity index 100% rename from src/main/resources/sneckomodResources/images/betacards/UnknownExhaust_p.png rename to src/main/resources/sneckomodResources/images/betacards/unknown/UnknownExhaust_p.png diff --git a/src/main/resources/sneckomodResources/images/betacards/UnknownRareAttack.png b/src/main/resources/sneckomodResources/images/betacards/unknown/UnknownRareAttack.png similarity index 100% rename from src/main/resources/sneckomodResources/images/betacards/UnknownRareAttack.png rename to src/main/resources/sneckomodResources/images/betacards/unknown/UnknownRareAttack.png diff --git a/src/main/resources/sneckomodResources/images/betacards/UnknownRareAttack_p.png b/src/main/resources/sneckomodResources/images/betacards/unknown/UnknownRareAttack_p.png similarity index 100% rename from src/main/resources/sneckomodResources/images/betacards/UnknownRareAttack_p.png rename to src/main/resources/sneckomodResources/images/betacards/unknown/UnknownRareAttack_p.png diff --git a/src/main/resources/sneckomodResources/images/betacards/UnknownRarePower.png b/src/main/resources/sneckomodResources/images/betacards/unknown/UnknownRarePower.png similarity index 100% rename from src/main/resources/sneckomodResources/images/betacards/UnknownRarePower.png rename to src/main/resources/sneckomodResources/images/betacards/unknown/UnknownRarePower.png diff --git a/src/main/resources/sneckomodResources/images/betacards/UnknownRarePower_p.png b/src/main/resources/sneckomodResources/images/betacards/unknown/UnknownRarePower_p.png similarity index 100% rename from src/main/resources/sneckomodResources/images/betacards/UnknownRarePower_p.png rename to src/main/resources/sneckomodResources/images/betacards/unknown/UnknownRarePower_p.png diff --git a/src/main/resources/sneckomodResources/images/betacards/UnknownRareSkill.png b/src/main/resources/sneckomodResources/images/betacards/unknown/UnknownRareSkill.png similarity index 100% rename from src/main/resources/sneckomodResources/images/betacards/UnknownRareSkill.png rename to src/main/resources/sneckomodResources/images/betacards/unknown/UnknownRareSkill.png diff --git a/src/main/resources/sneckomodResources/images/betacards/UnknownRareSkill_p.png b/src/main/resources/sneckomodResources/images/betacards/unknown/UnknownRareSkill_p.png similarity index 100% rename from src/main/resources/sneckomodResources/images/betacards/UnknownRareSkill_p.png rename to src/main/resources/sneckomodResources/images/betacards/unknown/UnknownRareSkill_p.png diff --git a/src/main/resources/sneckomodResources/images/betacards/UnknownStrength.png b/src/main/resources/sneckomodResources/images/betacards/unknown/UnknownStrength.png similarity index 100% rename from src/main/resources/sneckomodResources/images/betacards/UnknownStrength.png rename to src/main/resources/sneckomodResources/images/betacards/unknown/UnknownStrength.png diff --git a/src/main/resources/sneckomodResources/images/betacards/UnknownStrength_p.png b/src/main/resources/sneckomodResources/images/betacards/unknown/UnknownStrength_p.png similarity index 100% rename from src/main/resources/sneckomodResources/images/betacards/UnknownStrength_p.png rename to src/main/resources/sneckomodResources/images/betacards/unknown/UnknownStrength_p.png diff --git a/src/main/resources/sneckomodResources/images/betacards/UnknownStrike.png b/src/main/resources/sneckomodResources/images/betacards/unknown/UnknownStrike.png similarity index 100% rename from src/main/resources/sneckomodResources/images/betacards/UnknownStrike.png rename to src/main/resources/sneckomodResources/images/betacards/unknown/UnknownStrike.png diff --git a/src/main/resources/sneckomodResources/images/betacards/UnknownStrike_p.png b/src/main/resources/sneckomodResources/images/betacards/unknown/UnknownStrike_p.png similarity index 100% rename from src/main/resources/sneckomodResources/images/betacards/UnknownStrike_p.png rename to src/main/resources/sneckomodResources/images/betacards/unknown/UnknownStrike_p.png diff --git a/src/main/resources/sneckomodResources/images/betacards/UnknownUncommonAttack.png b/src/main/resources/sneckomodResources/images/betacards/unknown/UnknownUncommonAttack.png similarity index 100% rename from src/main/resources/sneckomodResources/images/betacards/UnknownUncommonAttack.png rename to src/main/resources/sneckomodResources/images/betacards/unknown/UnknownUncommonAttack.png diff --git a/src/main/resources/sneckomodResources/images/betacards/UnknownUncommonAttack_p.png b/src/main/resources/sneckomodResources/images/betacards/unknown/UnknownUncommonAttack_p.png similarity index 100% rename from src/main/resources/sneckomodResources/images/betacards/UnknownUncommonAttack_p.png rename to src/main/resources/sneckomodResources/images/betacards/unknown/UnknownUncommonAttack_p.png diff --git a/src/main/resources/sneckomodResources/images/betacards/UnknownUncommonPower.png b/src/main/resources/sneckomodResources/images/betacards/unknown/UnknownUncommonPower.png similarity index 100% rename from src/main/resources/sneckomodResources/images/betacards/UnknownUncommonPower.png rename to src/main/resources/sneckomodResources/images/betacards/unknown/UnknownUncommonPower.png diff --git a/src/main/resources/sneckomodResources/images/betacards/UnknownUncommonPower_p.png b/src/main/resources/sneckomodResources/images/betacards/unknown/UnknownUncommonPower_p.png similarity index 100% rename from src/main/resources/sneckomodResources/images/betacards/UnknownUncommonPower_p.png rename to src/main/resources/sneckomodResources/images/betacards/unknown/UnknownUncommonPower_p.png diff --git a/src/main/resources/sneckomodResources/images/betacards/UnknownUncommonSkill.png b/src/main/resources/sneckomodResources/images/betacards/unknown/UnknownUncommonSkill.png similarity index 100% rename from src/main/resources/sneckomodResources/images/betacards/UnknownUncommonSkill.png rename to src/main/resources/sneckomodResources/images/betacards/unknown/UnknownUncommonSkill.png diff --git a/src/main/resources/sneckomodResources/images/betacards/UnknownUncommonSkill_p.png b/src/main/resources/sneckomodResources/images/betacards/unknown/UnknownUncommonSkill_p.png similarity index 100% rename from src/main/resources/sneckomodResources/images/betacards/UnknownUncommonSkill_p.png rename to src/main/resources/sneckomodResources/images/betacards/unknown/UnknownUncommonSkill_p.png diff --git a/src/main/resources/sneckomodResources/images/betacards/UnknownVulnerable.png b/src/main/resources/sneckomodResources/images/betacards/unknown/UnknownVulnerable.png similarity index 100% rename from src/main/resources/sneckomodResources/images/betacards/UnknownVulnerable.png rename to src/main/resources/sneckomodResources/images/betacards/unknown/UnknownVulnerable.png diff --git a/src/main/resources/sneckomodResources/images/betacards/UnknownVulnerable_p.png b/src/main/resources/sneckomodResources/images/betacards/unknown/UnknownVulnerable_p.png similarity index 100% rename from src/main/resources/sneckomodResources/images/betacards/UnknownVulnerable_p.png rename to src/main/resources/sneckomodResources/images/betacards/unknown/UnknownVulnerable_p.png diff --git a/src/main/resources/sneckomodResources/images/betacards/UnknownWeak.png b/src/main/resources/sneckomodResources/images/betacards/unknown/UnknownWeak.png similarity index 100% rename from src/main/resources/sneckomodResources/images/betacards/UnknownWeak.png rename to src/main/resources/sneckomodResources/images/betacards/unknown/UnknownWeak.png diff --git a/src/main/resources/sneckomodResources/images/betacards/UnknownWeak_p.png b/src/main/resources/sneckomodResources/images/betacards/unknown/UnknownWeak_p.png similarity index 100% rename from src/main/resources/sneckomodResources/images/betacards/UnknownWeak_p.png rename to src/main/resources/sneckomodResources/images/betacards/unknown/UnknownWeak_p.png diff --git a/src/main/resources/sneckomodResources/images/betacards/UnknownX.png b/src/main/resources/sneckomodResources/images/betacards/unknown/UnknownX.png similarity index 100% rename from src/main/resources/sneckomodResources/images/betacards/UnknownX.png rename to src/main/resources/sneckomodResources/images/betacards/unknown/UnknownX.png diff --git a/src/main/resources/sneckomodResources/images/betacards/UnknownX_p.png b/src/main/resources/sneckomodResources/images/betacards/unknown/UnknownX_p.png similarity index 100% rename from src/main/resources/sneckomodResources/images/betacards/UnknownX_p.png rename to src/main/resources/sneckomodResources/images/betacards/unknown/UnknownX_p.png diff --git a/src/main/resources/sneckomodResources/images/betacards/Unknown_p.png b/src/main/resources/sneckomodResources/images/betacards/unknown/Unknown_p.png similarity index 100% rename from src/main/resources/sneckomodResources/images/betacards/Unknown_p.png rename to src/main/resources/sneckomodResources/images/betacards/unknown/Unknown_p.png diff --git a/src/main/resources/sneckomodResources/images/cards/AceOfWands.png b/src/main/resources/sneckomodResources/images/cards/AceOfWands.png new file mode 100644 index 000000000..9279a1b63 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/AceOfWands.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/AceOfWands_p.png b/src/main/resources/sneckomodResources/images/cards/AceOfWands_p.png new file mode 100644 index 000000000..7a9a21bc7 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/AceOfWands_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/Amass.png b/src/main/resources/sneckomodResources/images/cards/Amass.png new file mode 100644 index 000000000..b4f441799 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/Amass.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/Amass_p.png b/src/main/resources/sneckomodResources/images/cards/Amass_p.png new file mode 100644 index 000000000..f5261671f Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/Amass_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/Behold.png b/src/main/resources/sneckomodResources/images/cards/Behold.png new file mode 100644 index 000000000..478486b27 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/Behold.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/Behold_p.png b/src/main/resources/sneckomodResources/images/cards/Behold_p.png new file mode 100644 index 000000000..3d4f6f032 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/Behold_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/Belittle.png b/src/main/resources/sneckomodResources/images/cards/Belittle.png new file mode 100644 index 000000000..04e74818e Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/Belittle.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/Belittle_p.png b/src/main/resources/sneckomodResources/images/cards/Belittle_p.png new file mode 100644 index 000000000..8ff502016 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/Belittle_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/BeyondArmor.png b/src/main/resources/sneckomodResources/images/cards/BeyondArmor.png new file mode 100644 index 000000000..c73dff63e Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/BeyondArmor.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/BeyondArmor_p.png b/src/main/resources/sneckomodResources/images/cards/BeyondArmor_p.png new file mode 100644 index 000000000..820e3be28 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/BeyondArmor_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/BlunderGuard.png b/src/main/resources/sneckomodResources/images/cards/BlunderGuard.png new file mode 100644 index 000000000..0fc1e57de Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/BlunderGuard.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/BlunderGuard_p.png b/src/main/resources/sneckomodResources/images/cards/BlunderGuard_p.png new file mode 100644 index 000000000..29c782787 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/BlunderGuard_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/Blunderbus.png b/src/main/resources/sneckomodResources/images/cards/Blunderbus.png new file mode 100644 index 000000000..dfe69a2d3 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/Blunderbus.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/Blunderbus_p.png b/src/main/resources/sneckomodResources/images/cards/Blunderbus_p.png new file mode 100644 index 000000000..7709ae139 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/Blunderbus_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/CobraCoil.png b/src/main/resources/sneckomodResources/images/cards/CobraCoil.png new file mode 100644 index 000000000..a68615069 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/CobraCoil.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/CobraCoil_p.png b/src/main/resources/sneckomodResources/images/cards/CobraCoil_p.png new file mode 100644 index 000000000..1d4b4b39a Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/CobraCoil_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/ComboString.png b/src/main/resources/sneckomodResources/images/cards/ComboString.png new file mode 100644 index 000000000..9236e1451 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/ComboString.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/ComboString_p.png b/src/main/resources/sneckomodResources/images/cards/ComboString_p.png new file mode 100644 index 000000000..10869d31c Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/ComboString_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/Cower.png b/src/main/resources/sneckomodResources/images/cards/Cower.png new file mode 100644 index 000000000..598bfee4f Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/Cower.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/Cower_p.png b/src/main/resources/sneckomodResources/images/cards/Cower_p.png new file mode 100644 index 000000000..813e24b36 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/Cower_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/CrystalBoomerang.png b/src/main/resources/sneckomodResources/images/cards/CrystalBoomerang.png new file mode 100644 index 000000000..a88e7600e Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/CrystalBoomerang.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/CrystalBoomerang_p.png b/src/main/resources/sneckomodResources/images/cards/CrystalBoomerang_p.png new file mode 100644 index 000000000..705e7837a Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/CrystalBoomerang_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/Deception.png b/src/main/resources/sneckomodResources/images/cards/Deception.png new file mode 100644 index 000000000..3fbdc1e55 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/Deception.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/Deception_p.png b/src/main/resources/sneckomodResources/images/cards/Deception_p.png new file mode 100644 index 000000000..04d5b690f Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/Deception_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/DefensiveFlair.png b/src/main/resources/sneckomodResources/images/cards/DefensiveFlair.png index 9e312c72f..911373c24 100644 Binary files a/src/main/resources/sneckomodResources/images/cards/DefensiveFlair.png and b/src/main/resources/sneckomodResources/images/cards/DefensiveFlair.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/DefensiveFlair_p.png b/src/main/resources/sneckomodResources/images/cards/DefensiveFlair_p.png index 81d8d3c1a..a2a51a165 100644 Binary files a/src/main/resources/sneckomodResources/images/cards/DefensiveFlair_p.png and b/src/main/resources/sneckomodResources/images/cards/DefensiveFlair_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/DiceBoulder.png b/src/main/resources/sneckomodResources/images/cards/DiceBoulder.png index 5873d7848..91a61ac96 100644 Binary files a/src/main/resources/sneckomodResources/images/cards/DiceBoulder.png and b/src/main/resources/sneckomodResources/images/cards/DiceBoulder.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/DiceBoulder_p.png b/src/main/resources/sneckomodResources/images/cards/DiceBoulder_p.png index fae9dc3e3..f81f1e361 100644 Binary files a/src/main/resources/sneckomodResources/images/cards/DiceBoulder_p.png and b/src/main/resources/sneckomodResources/images/cards/DiceBoulder_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/DragonsHoard.png b/src/main/resources/sneckomodResources/images/cards/DragonsHoard.png new file mode 100644 index 000000000..9d33dd010 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/DragonsHoard.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/DragonsHoard_p.png b/src/main/resources/sneckomodResources/images/cards/DragonsHoard_p.png new file mode 100644 index 000000000..d65af79c2 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/DragonsHoard_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/FlashInThePan.png b/src/main/resources/sneckomodResources/images/cards/FlashInThePan.png new file mode 100644 index 000000000..ed7a26926 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/FlashInThePan.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/FlashInThePan_p.png b/src/main/resources/sneckomodResources/images/cards/FlashInThePan_p.png new file mode 100644 index 000000000..33174f9ea Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/FlashInThePan_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/GildedShield.png b/src/main/resources/sneckomodResources/images/cards/GildedShield.png new file mode 100644 index 000000000..b05eaa5b2 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/GildedShield.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/GildedShield_p.png b/src/main/resources/sneckomodResources/images/cards/GildedShield_p.png new file mode 100644 index 000000000..ce60ea069 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/GildedShield_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/GlitteringGambit.png b/src/main/resources/sneckomodResources/images/cards/GlitteringGambit.png index 021fdadcb..565c4a751 100644 Binary files a/src/main/resources/sneckomodResources/images/cards/GlitteringGambit.png and b/src/main/resources/sneckomodResources/images/cards/GlitteringGambit.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/GlitteringGambit_p.png b/src/main/resources/sneckomodResources/images/cards/GlitteringGambit_p.png index 7d74251cb..9a5ee9f0a 100644 Binary files a/src/main/resources/sneckomodResources/images/cards/GlitteringGambit_p.png and b/src/main/resources/sneckomodResources/images/cards/GlitteringGambit_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/ImmovableObject.png b/src/main/resources/sneckomodResources/images/cards/ImmovableObject.png new file mode 100644 index 000000000..6fa8f1156 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/ImmovableObject.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/ImmovableObject_p.png b/src/main/resources/sneckomodResources/images/cards/ImmovableObject_p.png new file mode 100644 index 000000000..9b9a83fd0 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/ImmovableObject_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/InertBlade.png b/src/main/resources/sneckomodResources/images/cards/InertBlade.png new file mode 100644 index 000000000..cbc4d9496 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/InertBlade.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/InertBlade_p.png b/src/main/resources/sneckomodResources/images/cards/InertBlade_p.png new file mode 100644 index 000000000..d0cf24379 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/InertBlade_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/IronFang.png b/src/main/resources/sneckomodResources/images/cards/IronFang.png index 362acb663..0c7db1955 100644 Binary files a/src/main/resources/sneckomodResources/images/cards/IronFang.png and b/src/main/resources/sneckomodResources/images/cards/IronFang.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/IronFang_p.png b/src/main/resources/sneckomodResources/images/cards/IronFang_p.png index 798a38531..8a43158d0 100644 Binary files a/src/main/resources/sneckomodResources/images/cards/IronFang_p.png and b/src/main/resources/sneckomodResources/images/cards/IronFang_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/Jackpot.png b/src/main/resources/sneckomodResources/images/cards/Jackpot.png new file mode 100644 index 000000000..021fdadcb Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/Jackpot.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/Jackpot_p.png b/src/main/resources/sneckomodResources/images/cards/Jackpot_p.png new file mode 100644 index 000000000..c7afcc771 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/Jackpot_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/Lacerate.png b/src/main/resources/sneckomodResources/images/cards/Lacerate.png new file mode 100644 index 000000000..0589c6f54 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/Lacerate.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/Lacerate_p.png b/src/main/resources/sneckomodResources/images/cards/Lacerate_p.png new file mode 100644 index 000000000..d82bce2a4 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/Lacerate_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/LaserEyes_p.png b/src/main/resources/sneckomodResources/images/cards/LaserEyes_p.png new file mode 100644 index 000000000..ed2a08f04 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/LaserEyes_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/LastStrike.png b/src/main/resources/sneckomodResources/images/cards/LastStrike.png new file mode 100644 index 000000000..9319c51fb Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/LastStrike.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/LastStrike_p.png b/src/main/resources/sneckomodResources/images/cards/LastStrike_p.png new file mode 100644 index 000000000..3fae254e8 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/LastStrike_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/LatchOn.png b/src/main/resources/sneckomodResources/images/cards/LatchOn.png new file mode 100644 index 000000000..3db1c64dc Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/LatchOn.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/LatchOn_p.png b/src/main/resources/sneckomodResources/images/cards/LatchOn_p.png new file mode 100644 index 000000000..4bed1d0e7 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/LatchOn_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/LilGuardian.png b/src/main/resources/sneckomodResources/images/cards/LilGuardian.png new file mode 100644 index 000000000..6fa8f1156 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/LilGuardian.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/LilGuardian_p.png b/src/main/resources/sneckomodResources/images/cards/LilGuardian_p.png new file mode 100644 index 000000000..9b9a83fd0 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/LilGuardian_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/LuckyBreak.png b/src/main/resources/sneckomodResources/images/cards/LuckyBreak.png new file mode 100644 index 000000000..8f127dd92 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/LuckyBreak.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/LuckyBreak_p.png b/src/main/resources/sneckomodResources/images/cards/LuckyBreak_p.png new file mode 100644 index 000000000..3d1ea06b5 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/LuckyBreak_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/MakeshiftBlade.png b/src/main/resources/sneckomodResources/images/cards/MakeshiftBlade.png new file mode 100644 index 000000000..2f5795b17 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/MakeshiftBlade.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/MakeshiftBlade_p.png b/src/main/resources/sneckomodResources/images/cards/MakeshiftBlade_p.png new file mode 100644 index 000000000..6c399b620 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/MakeshiftBlade_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/MarkedCard.png b/src/main/resources/sneckomodResources/images/cards/MarkedCard.png new file mode 100644 index 000000000..f75996252 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/MarkedCard.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/MarkedCard_p.png b/src/main/resources/sneckomodResources/images/cards/MarkedCard_p.png new file mode 100644 index 000000000..db6a6058d Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/MarkedCard_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/MasterEye.png b/src/main/resources/sneckomodResources/images/cards/MasterEye.png index 62446e94c..2e9c21c0e 100644 Binary files a/src/main/resources/sneckomodResources/images/cards/MasterEye.png and b/src/main/resources/sneckomodResources/images/cards/MasterEye.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/MasterEye_p.png b/src/main/resources/sneckomodResources/images/cards/MasterEye_p.png index 8d66491dc..1e69cb503 100644 Binary files a/src/main/resources/sneckomodResources/images/cards/MasterEye_p.png and b/src/main/resources/sneckomodResources/images/cards/MasterEye_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/Medusa.png b/src/main/resources/sneckomodResources/images/cards/Medusa.png new file mode 100644 index 000000000..3d0214f90 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/Medusa.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/Medusa_p.png b/src/main/resources/sneckomodResources/images/cards/Medusa_p.png new file mode 100644 index 000000000..f75d96d09 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/Medusa_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/Memorize.png b/src/main/resources/sneckomodResources/images/cards/Mesmerize.png similarity index 100% rename from src/main/resources/sneckomodResources/images/cards/Memorize.png rename to src/main/resources/sneckomodResources/images/cards/Mesmerize.png diff --git a/src/main/resources/sneckomodResources/images/cards/Mesmerize_p.png b/src/main/resources/sneckomodResources/images/cards/Mesmerize_p.png new file mode 100644 index 000000000..1be273efd Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/Mesmerize_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/MintCondition.png b/src/main/resources/sneckomodResources/images/cards/MintCondition.png new file mode 100644 index 000000000..9e312c72f Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/MintCondition.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/MintCondition_p.png b/src/main/resources/sneckomodResources/images/cards/MintCondition_p.png new file mode 100644 index 000000000..81d8d3c1a Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/MintCondition_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/MixItUp.png b/src/main/resources/sneckomodResources/images/cards/OtherworldlySlash.png similarity index 100% rename from src/main/resources/sneckomodResources/images/cards/MixItUp.png rename to src/main/resources/sneckomodResources/images/cards/OtherworldlySlash.png diff --git a/src/main/resources/sneckomodResources/images/cards/MixItUp_p.png b/src/main/resources/sneckomodResources/images/cards/OtherworldlySlash_p.png similarity index 100% rename from src/main/resources/sneckomodResources/images/cards/MixItUp_p.png rename to src/main/resources/sneckomodResources/images/cards/OtherworldlySlash_p.png diff --git a/src/main/resources/sneckomodResources/images/cards/OverwhelmingPresence.png b/src/main/resources/sneckomodResources/images/cards/OverwhelmingPresence.png new file mode 100644 index 000000000..5f7f35120 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/OverwhelmingPresence.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/OverwhelmingPresence_p.png b/src/main/resources/sneckomodResources/images/cards/OverwhelmingPresence_p.png new file mode 100644 index 000000000..c2f40381b Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/OverwhelmingPresence_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/PerpetualSerpent.png b/src/main/resources/sneckomodResources/images/cards/PerpetualSerpent.png new file mode 100644 index 000000000..38626a200 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/PerpetualSerpent.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/PerpetualSerpent_p.png b/src/main/resources/sneckomodResources/images/cards/PerpetualSerpent_p.png new file mode 100644 index 000000000..71d4f15ec Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/PerpetualSerpent_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/PoisonParadise.png b/src/main/resources/sneckomodResources/images/cards/PoisonParadise.png new file mode 100644 index 000000000..78f054f30 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/PoisonParadise.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/PoisonParadise_p.png b/src/main/resources/sneckomodResources/images/cards/PoisonParadise_p.png new file mode 100644 index 000000000..340fa451e Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/PoisonParadise_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/PowerShot.png b/src/main/resources/sneckomodResources/images/cards/PowerShot.png new file mode 100644 index 000000000..676cfad88 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/PowerShot.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/PowerShot_p.png b/src/main/resources/sneckomodResources/images/cards/PowerShot_p.png new file mode 100644 index 000000000..4643d746c Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/PowerShot_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/RiskySword.png b/src/main/resources/sneckomodResources/images/cards/RiskySword.png new file mode 100644 index 000000000..be4ed5f12 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/RiskySword.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/RiskySword_p.png b/src/main/resources/sneckomodResources/images/cards/RiskySword_p.png new file mode 100644 index 000000000..459e069c0 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/RiskySword_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/Rotation.png b/src/main/resources/sneckomodResources/images/cards/Rotation.png deleted file mode 100644 index 38967660b..000000000 Binary files a/src/main/resources/sneckomodResources/images/cards/Rotation.png and /dev/null differ diff --git a/src/main/resources/sneckomodResources/images/cards/Rotation_p.png b/src/main/resources/sneckomodResources/images/cards/Rotation_p.png deleted file mode 100644 index a0a7bfce6..000000000 Binary files a/src/main/resources/sneckomodResources/images/cards/Rotation_p.png and /dev/null differ diff --git a/src/main/resources/sneckomodResources/images/cards/RoundaboutSwing.png b/src/main/resources/sneckomodResources/images/cards/RoundaboutSwing.png new file mode 100644 index 000000000..c63a2529e Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/RoundaboutSwing.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/RoundaboutSwing_p.png b/src/main/resources/sneckomodResources/images/cards/RoundaboutSwing_p.png new file mode 100644 index 000000000..2a547fe99 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/RoundaboutSwing_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/SaveForLater.png b/src/main/resources/sneckomodResources/images/cards/SaveForLater.png new file mode 100644 index 000000000..42229f27c Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/SaveForLater.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/SaveForLater_p.png b/src/main/resources/sneckomodResources/images/cards/SaveForLater_p.png new file mode 100644 index 000000000..12e1345d5 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/SaveForLater_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/SerpentBottle.png b/src/main/resources/sneckomodResources/images/cards/SerpentBottle.png new file mode 100644 index 000000000..b112dc160 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/SerpentBottle.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/SerpentBottle_p.png b/src/main/resources/sneckomodResources/images/cards/SerpentBottle_p.png new file mode 100644 index 000000000..e733ec721 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/SerpentBottle_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/SerpentMind.png b/src/main/resources/sneckomodResources/images/cards/SerpentMind.png index 4296e4b31..1f8774eae 100644 Binary files a/src/main/resources/sneckomodResources/images/cards/SerpentMind.png and b/src/main/resources/sneckomodResources/images/cards/SerpentMind.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/SerpentMind_p.png b/src/main/resources/sneckomodResources/images/cards/SerpentMind_p.png index 0861ba907..274314a39 100644 Binary files a/src/main/resources/sneckomodResources/images/cards/SerpentMind_p.png and b/src/main/resources/sneckomodResources/images/cards/SerpentMind_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/SerpentineSleuth.png b/src/main/resources/sneckomodResources/images/cards/SerpentineSleuth.png new file mode 100644 index 000000000..62446e94c Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/SerpentineSleuth.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/SerpentineSleuth_p.png b/src/main/resources/sneckomodResources/images/cards/SerpentineSleuth_p.png new file mode 100644 index 000000000..8d66491dc Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/SerpentineSleuth_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/SerpentsNest.png b/src/main/resources/sneckomodResources/images/cards/SerpentsNest.png new file mode 100644 index 000000000..c0e9f799b Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/SerpentsNest.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/SerpentsNest_p.png b/src/main/resources/sneckomodResources/images/cards/SerpentsNest_p.png new file mode 100644 index 000000000..b000f3d5d Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/SerpentsNest_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/Serpentscale.png b/src/main/resources/sneckomodResources/images/cards/Serpentscale.png new file mode 100644 index 000000000..bd20974fc Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/Serpentscale.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/Serpentscale_p.png b/src/main/resources/sneckomodResources/images/cards/Serpentscale_p.png new file mode 100644 index 000000000..6de2df510 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/Serpentscale_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/SlitherStrike.png b/src/main/resources/sneckomodResources/images/cards/SlitherThrough.png similarity index 100% rename from src/main/resources/sneckomodResources/images/cards/SlitherStrike.png rename to src/main/resources/sneckomodResources/images/cards/SlitherThrough.png diff --git a/src/main/resources/sneckomodResources/images/cards/SlitherStrike_p.png b/src/main/resources/sneckomodResources/images/cards/SlitherThrough_p.png similarity index 100% rename from src/main/resources/sneckomodResources/images/cards/SlitherStrike_p.png rename to src/main/resources/sneckomodResources/images/cards/SlitherThrough_p.png diff --git a/src/main/resources/sneckomodResources/images/cards/SnakeEyes.png b/src/main/resources/sneckomodResources/images/cards/SnakeEyes.png new file mode 100644 index 000000000..2e9c21c0e Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/SnakeEyes.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/SnakeEyes_p.png b/src/main/resources/sneckomodResources/images/cards/SnakeEyes_p.png new file mode 100644 index 000000000..1e69cb503 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/SnakeEyes_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/SoulCleanse.png b/src/main/resources/sneckomodResources/images/cards/ThrowingCards.png similarity index 100% rename from src/main/resources/sneckomodResources/images/cards/SoulCleanse.png rename to src/main/resources/sneckomodResources/images/cards/ThrowingCards.png diff --git a/src/main/resources/sneckomodResources/images/cards/SoulCleanse_p.png b/src/main/resources/sneckomodResources/images/cards/ThrowingCards_p.png similarity index 100% rename from src/main/resources/sneckomodResources/images/cards/SoulCleanse_p.png rename to src/main/resources/sneckomodResources/images/cards/ThrowingCards_p.png diff --git a/src/main/resources/sneckomodResources/images/cards/ToothAndClaw.png b/src/main/resources/sneckomodResources/images/cards/ToothAndClaw.png new file mode 100644 index 000000000..624d8c69d Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/ToothAndClaw.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/ToothAndClaw_p.png b/src/main/resources/sneckomodResources/images/cards/ToothAndClaw_p.png new file mode 100644 index 000000000..34755efc4 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/ToothAndClaw_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/Transmogrify.png b/src/main/resources/sneckomodResources/images/cards/Transmogrify.png deleted file mode 100644 index 1bf76fc4e..000000000 Binary files a/src/main/resources/sneckomodResources/images/cards/Transmogrify.png and /dev/null differ diff --git a/src/main/resources/sneckomodResources/images/cards/Transmogrify_p.png b/src/main/resources/sneckomodResources/images/cards/Transmogrify_p.png deleted file mode 100644 index ac35b9157..000000000 Binary files a/src/main/resources/sneckomodResources/images/cards/Transmogrify_p.png and /dev/null differ diff --git a/src/main/resources/sneckomodResources/images/cards/TrashCan.png b/src/main/resources/sneckomodResources/images/cards/TrashCan.png new file mode 100644 index 000000000..9e01de986 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/TrashCan.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/TrashCan_p.png b/src/main/resources/sneckomodResources/images/cards/TrashCan_p.png new file mode 100644 index 000000000..ee3e22880 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/TrashCan_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/Tsunami.png b/src/main/resources/sneckomodResources/images/cards/Tsunami.png new file mode 100644 index 000000000..b983abc17 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/Tsunami.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/Tsunami_p.png b/src/main/resources/sneckomodResources/images/cards/Tsunami_p.png new file mode 100644 index 000000000..2504868b8 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/Tsunami_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/TyphoonFang.png b/src/main/resources/sneckomodResources/images/cards/TyphoonFang.png new file mode 100644 index 000000000..0d36a05c7 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/TyphoonFang.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/TyphoonFang_p.png b/src/main/resources/sneckomodResources/images/cards/TyphoonFang_p.png new file mode 100644 index 000000000..cf7240aa2 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/TyphoonFang_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/ViperEssence.png b/src/main/resources/sneckomodResources/images/cards/ViperEssence.png new file mode 100644 index 000000000..bb099288d Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/ViperEssence.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/ViperEssence_p.png b/src/main/resources/sneckomodResources/images/cards/ViperEssence_p.png new file mode 100644 index 000000000..9b032bc52 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/ViperEssence_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/Whack.png b/src/main/resources/sneckomodResources/images/cards/Whack.png new file mode 100644 index 000000000..111c48d2f Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/Whack.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/Whack_p.png b/src/main/resources/sneckomodResources/images/cards/Whack_p.png new file mode 100644 index 000000000..6b8cadc77 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/Whack_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/WideAngle.png b/src/main/resources/sneckomodResources/images/cards/WideAngle.png new file mode 100644 index 000000000..f7ca7e4c6 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/WideAngle.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/WideAngle_p.png b/src/main/resources/sneckomodResources/images/cards/WideAngle_p.png new file mode 100644 index 000000000..53f6d7438 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/WideAngle_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/Yearn.png b/src/main/resources/sneckomodResources/images/cards/Yearn.png new file mode 100644 index 000000000..6fa8f1156 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/Yearn.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/Yearn_p.png b/src/main/resources/sneckomodResources/images/cards/Yearn_p.png new file mode 100644 index 000000000..9b9a83fd0 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/cards/Yearn_p.png differ diff --git a/src/main/resources/sneckomodResources/images/ending/SneckoFull.png b/src/main/resources/sneckomodResources/images/ending/SneckoFull.png new file mode 100644 index 000000000..b7b6dc5d9 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/ending/SneckoFull.png differ diff --git a/src/main/resources/sneckomodResources/images/ending/snecko1.png b/src/main/resources/sneckomodResources/images/ending/snecko1.png new file mode 100644 index 000000000..f9c8994fc Binary files /dev/null and b/src/main/resources/sneckomodResources/images/ending/snecko1.png differ diff --git a/src/main/resources/sneckomodResources/images/ending/snecko2.png b/src/main/resources/sneckomodResources/images/ending/snecko2.png new file mode 100644 index 000000000..e16bb72ab Binary files /dev/null and b/src/main/resources/sneckomodResources/images/ending/snecko2.png differ diff --git a/src/main/resources/sneckomodResources/images/ending/snecko3.png b/src/main/resources/sneckomodResources/images/ending/snecko3.png new file mode 100644 index 000000000..de6e37c96 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/ending/snecko3.png differ diff --git a/src/main/resources/sneckomodResources/images/powers/ApplyBurnAtStartOfTurn32.png b/src/main/resources/sneckomodResources/images/powers/ApplyBurnAtStartOfTurn32.png new file mode 100644 index 000000000..c912adc95 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/powers/ApplyBurnAtStartOfTurn32.png differ diff --git a/src/main/resources/sneckomodResources/images/powers/ApplyBurnAtStartOfTurn84.png b/src/main/resources/sneckomodResources/images/powers/ApplyBurnAtStartOfTurn84.png new file mode 100644 index 000000000..14a265ca6 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/powers/ApplyBurnAtStartOfTurn84.png differ diff --git a/src/main/resources/sneckomodResources/images/powers/BurnPerTurn32.png b/src/main/resources/sneckomodResources/images/powers/BurnPerTurn32.png new file mode 100644 index 000000000..07d6a8546 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/powers/BurnPerTurn32.png differ diff --git a/src/main/resources/sneckomodResources/images/powers/BurnPerTurn84.png b/src/main/resources/sneckomodResources/images/powers/BurnPerTurn84.png new file mode 100644 index 000000000..9975500ce Binary files /dev/null and b/src/main/resources/sneckomodResources/images/powers/BurnPerTurn84.png differ diff --git a/src/main/resources/sneckomodResources/images/powers/BurnVenom32.png b/src/main/resources/sneckomodResources/images/powers/BurnVenom32.png new file mode 100644 index 000000000..26ef04c34 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/powers/BurnVenom32.png differ diff --git a/src/main/resources/sneckomodResources/images/powers/BurnVenom84.png b/src/main/resources/sneckomodResources/images/powers/BurnVenom84.png new file mode 100644 index 000000000..f621d0779 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/powers/BurnVenom84.png differ diff --git a/src/main/resources/sneckomodResources/images/powers/Demise32.png b/src/main/resources/sneckomodResources/images/powers/Demise32.png new file mode 100644 index 000000000..41f8047fe Binary files /dev/null and b/src/main/resources/sneckomodResources/images/powers/Demise32.png differ diff --git a/src/main/resources/sneckomodResources/images/powers/Demise84.png b/src/main/resources/sneckomodResources/images/powers/Demise84.png new file mode 100644 index 000000000..462788427 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/powers/Demise84.png differ diff --git a/src/main/resources/sneckomodResources/images/powers/DemisePlus32.png b/src/main/resources/sneckomodResources/images/powers/DemisePlus32.png new file mode 100644 index 000000000..f21a46f20 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/powers/DemisePlus32.png differ diff --git a/src/main/resources/sneckomodResources/images/powers/DemisePlus84.png b/src/main/resources/sneckomodResources/images/powers/DemisePlus84.png new file mode 100644 index 000000000..096b2a6e2 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/powers/DemisePlus84.png differ diff --git a/src/main/resources/sneckomodResources/images/powers/EtherealRefund32.png b/src/main/resources/sneckomodResources/images/powers/EtherealRefund32.png new file mode 100644 index 000000000..0411b7405 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/powers/EtherealRefund32.png differ diff --git a/src/main/resources/sneckomodResources/images/powers/EtherealRefund84.png b/src/main/resources/sneckomodResources/images/powers/EtherealRefund84.png new file mode 100644 index 000000000..da664f3dd Binary files /dev/null and b/src/main/resources/sneckomodResources/images/powers/EtherealRefund84.png differ diff --git a/src/main/resources/sneckomodResources/images/powers/GladiatorStyle32.png b/src/main/resources/sneckomodResources/images/powers/GladiatorStyle32.png new file mode 100644 index 000000000..f97d14d09 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/powers/GladiatorStyle32.png differ diff --git a/src/main/resources/sneckomodResources/images/powers/GladiatorStyle84.png b/src/main/resources/sneckomodResources/images/powers/GladiatorStyle84.png new file mode 100644 index 000000000..550260018 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/powers/GladiatorStyle84.png differ diff --git a/src/main/resources/sneckomodResources/images/powers/MoreBlockWithTempHP32.png b/src/main/resources/sneckomodResources/images/powers/MoreBlockWithTempHP32.png new file mode 100644 index 000000000..0cb652c3e Binary files /dev/null and b/src/main/resources/sneckomodResources/images/powers/MoreBlockWithTempHP32.png differ diff --git a/src/main/resources/sneckomodResources/images/powers/MoreBlockWithTempHP84.png b/src/main/resources/sneckomodResources/images/powers/MoreBlockWithTempHP84.png new file mode 100644 index 000000000..1cdd21a80 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/powers/MoreBlockWithTempHP84.png differ diff --git a/src/main/resources/sneckomodResources/images/powers/PoisonResist32.png b/src/main/resources/sneckomodResources/images/powers/PoisonResist32.png new file mode 100644 index 000000000..bce6ef093 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/powers/PoisonResist32.png differ diff --git a/src/main/resources/sneckomodResources/images/powers/PoisonResist84.png b/src/main/resources/sneckomodResources/images/powers/PoisonResist84.png new file mode 100644 index 000000000..9ae7c504e Binary files /dev/null and b/src/main/resources/sneckomodResources/images/powers/PoisonResist84.png differ diff --git a/src/main/resources/sneckomodResources/images/powers/guns_blazing.png b/src/main/resources/sneckomodResources/images/powers/guns_blazing.png new file mode 100644 index 000000000..da85d63ae Binary files /dev/null and b/src/main/resources/sneckomodResources/images/powers/guns_blazing.png differ diff --git a/src/main/resources/sneckomodResources/images/powers/guns_blazing2.png b/src/main/resources/sneckomodResources/images/powers/guns_blazing2.png new file mode 100644 index 000000000..a01ddd7f9 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/powers/guns_blazing2.png differ diff --git a/src/main/resources/sneckomodResources/images/powers/guns_blazing2_p.png b/src/main/resources/sneckomodResources/images/powers/guns_blazing2_p.png new file mode 100644 index 000000000..dffaf12e1 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/powers/guns_blazing2_p.png differ diff --git a/src/main/resources/sneckomodResources/images/powers/guns_blazing_p.png b/src/main/resources/sneckomodResources/images/powers/guns_blazing_p.png new file mode 100644 index 000000000..7097dbab9 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/powers/guns_blazing_p.png differ diff --git a/src/main/resources/sneckomodResources/images/vfx/bus.png b/src/main/resources/sneckomodResources/images/vfx/bus.png new file mode 100644 index 000000000..88d523347 Binary files /dev/null and b/src/main/resources/sneckomodResources/images/vfx/bus.png differ diff --git a/src/main/resources/sneckomodResources/images/vfx/shotgunpellet.png b/src/main/resources/sneckomodResources/images/vfx/shotgunpellet.png new file mode 100644 index 000000000..1e1a86e8a Binary files /dev/null and b/src/main/resources/sneckomodResources/images/vfx/shotgunpellet.png differ diff --git a/src/main/resources/sneckomodResources/localization/eng/CardStrings.json b/src/main/resources/sneckomodResources/localization/eng/CardStrings.json index a74b67f96..13ea00933 100644 --- a/src/main/resources/sneckomodResources/localization/eng/CardStrings.json +++ b/src/main/resources/sneckomodResources/localization/eng/CardStrings.json @@ -1,17 +1,33 @@ { + "sneckomod:Blunderbus": { + "NAME": "Blunderbus", + "DESCRIPTION": "Deal !D! damage to ALL enemies. NL Repeat for every 3+ cost card in hand." + }, + "sneckomod:Tsunami": { + "NAME": "Tsunami", + "DESCRIPTION": "sneckomod:Overflow effects also grant !M! Block." + }, "sneckomod:CheapStock": { "NAME": "Cheap Stock", - "DESCRIPTION": "At the start of your turn, reduce the cost of the highest cost sneckomod:Offclass card in your hand by 1.", - "UPGRADE_DESCRIPTION": "Innate. NL At the start of your turn, reduce the cost of the highest cost sneckomod:Offclass card in your hand by 1." + "DESCRIPTION": "At the start of your turn, sneckomod:Muddle the highest cost card in your hand.", + "UPGRADE_DESCRIPTION": "At the start of your turn, sneckomod:Muddle the !M! highest cost cards in your hand." }, "sneckomod:Cheat": { "NAME": "Pure Luck", - "DESCRIPTION": "sneckomod:Snekproof. NL Gain sneckomod:Lucky until the end of turn. NL Exhaust.", - "UPGRADE_DESCRIPTION": "sneckomod:Snekproof. NL Gain sneckomod:Lucky until the end of turn." + "DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "UPGRADE_DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] }, "sneckomod:DangerNoodle": { "NAME": "Danger Noodle", - "DESCRIPTION": "Deal !D! damage. NL Repeat this for each sneckomod:Offclass card in your hand, then Exhaust those cards." + "DESCRIPTION": "Deal !D! damage. NL sneckomod:Muddle a card. NL sneckomod:Gift: 3+ cost.", + "DESCRIPTION_BATTLE": "Deal !D! damage. NL sneckomod:Muddle a card." + }, + "sneckomod:Deception": { + "NAME": "Deception", + "DESCRIPTION": "Gain !B! Block. NL Add a *Shockwave to your hand. NL Exhaust." }, "sneckomod:Defend": { "NAME": "Defend", @@ -19,316 +35,582 @@ }, "sneckomod:DefensiveFlair": { "NAME": "Defensive Flair", - "DESCRIPTION": "Gain !B! Block, increased by !M! for each sneckomod:Offclass card in your hand." + "DESCRIPTION": "Gain !B! Block, increased by !M! for each sneckomod:Offclass card in your hand. NL sneckomod:Gift: Uncommon.", + "DESCRIPTION_BATTLE": "Gain !B! Block, increased by !M! for each sneckomod:Offclass card in your hand." }, "sneckomod:DiceBlock": { "NAME": "Dice Block", - "DESCRIPTION": "Gain !M! - !B! Block." + "DESCRIPTION": "Gain !B! Block. NL sneckomod:Overflow: Gain !B! Block again." }, "sneckomod:DiceBoulder": { "NAME": "Dice Boulder", - "DESCRIPTION": "Deal !M! - !D! damage. NL Can be Upgraded any number of times." + "DESCRIPTION": "Gain !B! Block. NL Increase this card's Block by !M! and cost by !qqq! this combat." }, "sneckomod:DiceCrush": { "NAME": "Dice Crush", - "DESCRIPTION": "Deal !M! - !D! damage." + "DESCRIPTION": "Deal !D! damage. NL sneckomod:Overflow: Draw 2 cards." + }, + "sneckomod:DragonsHoard": { + "NAME": "Dragon's Hoard", + "DESCRIPTION": "Ethereal. NL Gain !M! Strength. NL Gain !M! Dexterity.", + "UPGRADE_DESCRIPTION": "Gain !M! Strength. NL Gain !M! Dexterity." + }, + "sneckomod:FourOfAKind": { + "NAME": "Four Of A Kind", + "DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "UPGRADE_DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] }, "sneckomod:GlitteringGambit": { "NAME": "Glittering Gambit", - "DESCRIPTION": "sneckomod:Snekproof. NL Gain !M! - 30 *Gold. NL Exhaust." + "DESCRIPTION": "Unplayable. NL Cannot be removed from your deck. NL sneckomod:Gift: Upgraded Rare and !M! Gold.", + "UPGRADE_DESCRIPTION": "Unplayable. Ethereal. NL Cannot be removed from your deck. NL sneckomod:Gift: Upgraded Rare and !M! Gold.", + "DESCRIPTION_BATTLE": "Unplayable.", + "UPGRADE_DESCRIPTION_BATTLE": "Unplayable. NL Ethereal." + }, + "sneckomod:ImmovableObject": { + "NAME": "Immovable Object", + "DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] }, "sneckomod:IronFang": { "NAME": "Iron Fang", - "DESCRIPTION": "Gain !M! - !B! Block. NL Deal !qqq! - !D! damage." + "DESCRIPTION": "Deal !D! damage and apply !M! Weak to ALL enemies." }, "sneckomod:ImprovisedAttack": { "NAME": "Improvised Attack", - "DESCRIPTION": "Deal !D! damage. NL Gain a random sneckomod:Offclass Attack and sneckomod:Muddle it." + "DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] }, "sneckomod:ImprovisedGuard": { "NAME": "Improvised Guard", - "DESCRIPTION": "Gain !B! Block. NL Gain a random sneckomod:Offclass Skill and sneckomod:Muddle it." + "DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] + }, + "sneckomod:LuckyBreak": { + "NAME": "Lucky Break", + "DESCRIPTION": "Gain !B! Block. NL Draw !M! card for each 2+ cost card in hand." }, "sneckomod:Nope": { "NAME": "Nope", - "DESCRIPTION": "sneckomod:Snekproof. NL Exhaust a card. Gain a random card of the same class.", - "UPGRADE_DESCRIPTION": "sneckomod:Snekproof. NL Exhaust a card. Gain a random card of the same class. NL It costs 1 less.", + "DESCRIPTION": "Gain !B! Block. NL Exhaust a card. If it had a color, gain a random card of the same class.", + "UPGRADE_DESCRIPTION": "Gain !B! Block. NL Exhaust a card. If it had a color, gain a random card of the same class.", "EXTENDED_DESCRIPTION": [ "Exhaust for Nope." ] }, - "sneckomod:MasterEye": { - "NAME": "Master Eye", - "DESCRIPTION": "Become Confused. NL Draw !M! additional card each turn.", - "UPGRADE_DESCRIPTION": "Become Confused. NL Draw !M! additional cards each turn." + "sneckomod:SnakeEyes": { + "NAME": "Snake Eyes", + "DESCRIPTION": "This turn, your next sneckomod:Offclass card is played twice. NL sneckomod:Gift: Rare Skill.", + "UPGRADE_DESCRIPTION": "This turn, your next 2 sneckomod:Offclass cards are played twice. NL sneckomod:Gift: Rare Skill.", + "DESCRIPTION_BATTLE": "This turn, your next sneckomod:Offclass card is played twice.", + "UPGRADE_DESCRIPTION_BATTLE": "This turn, your next 2 sneckomod:Offclass cards are played twice." }, "sneckomod:Memorize": { "NAME": "Memorize", - "DESCRIPTION": "sneckomod:Snekproof. Fleeting. NL Choose a card which started *Unidentified. sneckomod:Identify it.", - "UPGRADE_DESCRIPTION": "sneckomod:Snekproof. Fleeting. Retain. NL Choose a card which started *Unidentified. sneckomod:Identify it.", + "DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "UPGRADE_DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", "EXTENDED_DESCRIPTION": [ - " to Identify." + " to Identify.", + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." ] }, + "sneckomod:MintCondition": { + "NAME": "Mint Condition", + "DESCRIPTION": "sneckomod:Overflow: Gain !M! Strength." + }, "sneckomod:MixItUp": { "NAME": "Mix It Up!", - "DESCRIPTION": "*Transform your Potions. NL Deal !D! damage !M! times. NL Exhaust." + "DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] }, "sneckomod:MorePower": { "NAME": "More Power!", - "DESCRIPTION": "Obtain an additional Upgraded *Unidentified card reward at the end of combat." + "DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] }, "sneckomod:Mudshield": { "NAME": "Mud Shield", - "DESCRIPTION": "Whenever you *Muddle a card, gain !M! Block.", - "UPGRADE_DESCRIPTION": "Innate. NL Whenever you *Muddle a card, gain !M! Block." + "DESCRIPTION": "Whenever you sneckomod:Muddle a card, gain !M! Block." + }, + "sneckomod:OverwhelmingPresence": { + "NAME": "Overwhelming", + "DESCRIPTION": "Ethereal. NL The first time you play an sneckomod:Offclass card each turn, draw a card.", + "UPGRADE_DESCRIPTION": "The first time you play an sneckomod:Offclass card each turn, draw a card." + }, + "sneckomod:RiskySword": { + "NAME": "Risky Sword", + "DESCRIPTION": "Deal !D! Damage. NL When sneckomod:Muddled, increase this card's damage by !M! for this combat." + }, + "sneckomod:PoisonParadise": { + "NAME": "Fountain", + "DESCRIPTION": "sneckomod:Overflow effects also apply !M! sneckomod:Venom to a random enemy." }, "sneckomod:PureSnecko": { "NAME": "Shift", - "DESCRIPTION": "sneckomod:Snekproof. NL *Transform all sneckomod:Offclass cards in your hand.", - "UPGRADE_DESCRIPTION": "sneckomod:Snekproof. NL *Transform all sneckomod:Offclass cards in your hand. NL They cost 1 less." + "DESCRIPTION": "Draw !M! cards and sneckomod:Muddle them." }, "sneckomod:QuickBite": { "NAME": "Snake Rake", - "DESCRIPTION": "Deal !D! damage. NL Draw !M! - 2 cards. NL sneckomod:Muddle the highest-cost card in your hand." + "DESCRIPTION": "Deal !D! damage. NL Draw !M! card and sneckomod:Muddle it.", + "UPGRADE_DESCRIPTION": "Deal !D! damage. NL Draw !M! cards and sneckomod:Muddle them." }, "sneckomod:QuickMove": { "NAME": "Quick Move", - "DESCRIPTION": "Gain !B! Block. NL sneckomod:Muddle the highest-cost card in your hand.", - "UPGRADE_DESCRIPTION": "Gain !B! Block. NL sneckomod:Muddle the !M! highest-cost cards in your hand." + "DESCRIPTION": "Gain !B! Block. NL sneckomod:Overflow: Apply !M! Vulnerable to ALL enemies." }, "sneckomod:RainOfDice": { "NAME": "Rain of Dice", - "DESCRIPTION": "Deal !qqq! - !D! damage to a random enemy. NL sneckomod:Muddle this, then return this to your hand." + "DESCRIPTION": "Deal !D! damage. NL sneckomod:Muddle a card, then add *Rain *of *Dice to your hand. NL Exhaust.", + "UPGRADE_DESCRIPTION": "Deal !D! damage. NL sneckomod:Muddle a card, then add *Rain *of *Dice+ to your hand. NL Exhaust." }, "sneckomod:Restock": { "NAME": "Restock", - "DESCRIPTION": "sneckomod:Snekproof. NL Discard your hand. NL Draw 5-10 cards. NL Exhaust." + "DESCRIPTION": "Discard your hand. NL Draw !M! cards, then sneckomod:Muddle your hand. NL Exhaust." }, "sneckomod:Rotation": { "NAME": "Rotation", - "DESCRIPTION": "sneckomod:Snekproof. NL Discard all sneckomod:Offclass cards. NL Draw that many cards.", - "UPGRADE_DESCRIPTION": "sneckomod:Snekproof. NL Discard all sneckomod:Offclass cards. NL Draw that many cards plus !M!." + "DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "UPGRADE_DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] + }, + "sneckomod:SerpentBottle": { + "NAME": "Discount Sale", + "DESCRIPTION": "Draw !qqq! cards. NL sneckomod:Muddle a card. NL Exhaust.", + "UPGRADE_DESCRIPTION": "Draw !qqq! cards. NL sneckomod:Muddle !M! cards. NL Exhaust." }, "sneckomod:SerpentIdol": { "NAME": "Serpent Idol", - "DESCRIPTION": "sneckomod:Snekproof. NL Choose 1 of 3 random sneckomod:Offclass cards to gain. It costs 0 this turn. NL Exhaust." + "DESCRIPTION": "Choose 1 of !M! random sneckomod:Offclass cards to gain. It costs 0 this turn. NL Exhaust." }, "sneckomod:SerpentMind": { "NAME": "Exotic Form", - "DESCRIPTION": "sneckomod:Snekproof. NL Whenever you play an sneckomod:Offclass card, draw 1 card.", - "UPGRADE_DESCRIPTION": "Whenever you play an sneckomod:Offclass card, draw 1 card." + "DESCRIPTION": "Ethereal. At the end of your turn, gain !M! Strength for each unique color played. NL sneckomod:Gift: Rare.", + "UPGRADE_DESCRIPTION": "At the end of your turn, gain !M! Strength for each unique color played. NL sneckomod:Gift: Rare.", + "DESCRIPTION_BATTLE": "At the end of your turn, gain !M! Strength for each unique color played." }, - "sneckomod:SlitherStrike": { - "NAME": "Slither Strike", - "DESCRIPTION": "Deal !D! damage. NL Reduce the cost of sneckomod:Offclass cards in your hand by 1 this turn." + "sneckomod:SlitherThrough": { + "NAME": "Slither Through", + "DESCRIPTION": "Deal !D! damage. NL Reduce the cost of sneckomod:Offclass cards in your hand by !M! this turn. NL sneckomod:Gift: Uncommon.", + "DESCRIPTION_BATTLE": "Deal !D! damage. NL Reduce the cost of sneckomod:Offclass cards in your hand by !M! this turn." }, "sneckomod:SnakeSap": { "NAME": "Snake Sap", - "DESCRIPTION": "sneckomod:Snekproof. NL Deal !qqq! - !D! damage. NL Gain 1 - !M! [E] . NL Exhaust." - }, - "sneckomod:SnekBeam": { - "NAME": "Snek Beam", - "DESCRIPTION": "Deal damage to ALL enemies equal to the number of Unidentified cards in your deck. NL Exhaust.", - "UPGRADE_DESCRIPTION": "Deal damage to ALL enemies equal to the number of Unidentified cards in your deck.", + "DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", "EXTENDED_DESCRIPTION": [ - " NL (Deals !D! damage.) NL Exhaust.", - " NL (Deals !D! damage.)" + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." ] }, + "sneckomod:SnekBeam": { + "NAME": "Laser Eyes", + "DESCRIPTION": "Deal !D! damage. NL Gain [E]." + }, "sneckomod:SnekBite": { "NAME": "Snek Bite", - "DESCRIPTION": "Deal !D! damage. NL sneckomod:Muddle the highest-cost card in your hand.", - "UPGRADE_DESCRIPTION": "Deal !D! damage. NL sneckomod:Muddle the !M! highest-cost cards in your hand." + "DESCRIPTION": "Deal !D! damage. NL sneckomod:Muddle a card.", + "UPGRADE_DESCRIPTION": "Deal !D! damage. NL sneckomod:Muddle !M! cards." }, "sneckomod:SoulCleanse": { "NAME": "Soul Cleanse", - "DESCRIPTION": "sneckomod:Snekproof. NL sneckomod:Muddle your hand. Cards sneckomod:Muddled this way cannot cost 3. NL Exhaust.", - "UPGRADE_DESCRIPTION": "sneckomod:Snekproof. NL sneckomod:Muddle your hand. Cards sneckomod:Muddled this way cannot cost 3." + "DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "UPGRADE_DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] }, "sneckomod:SoulDraw": { "NAME": "Soul Draw", - "DESCRIPTION": "sneckomod:Snekproof. NL Gain !M! random sneckomod:Offclass cards. NL Exhaust.", - "UPGRADE_DESCRIPTION": "sneckomod:Snekproof. NL Draw 1 - !M! cards." + "DESCRIPTION": "Gain !M! random sneckomod:Offclass cards. NL They gain Retain. NL Exhaust." }, "sneckomod:SoulExchange": { "NAME": "Soul Exchange", - "DESCRIPTION": "sneckomod:Snekproof. NL Draw 1 card, NL Choose a card, then *Transform your hand to that card's class.", - "UPGRADE_DESCRIPTION": "sneckomod:Snekproof. NL Draw !M! cards, NL Choose a card, then *Transform your hand to that card's class.", - "EXTENDED_DESCRIPTION": [ - "Exhaust for Soul Exchange." - ] + "DESCRIPTION": "Retain. NL sneckomod:Muddle your hand. NL Exhaust." }, "sneckomod:SoulRoll": { "NAME": "Soul Roll", - "DESCRIPTION": "sneckomod:Snekproof. NL sneckomod:Muddle your hand.", - "UPGRADE_DESCRIPTION": "sneckomod:Snekproof. NL sneckomod:Muddle your hand. NL Draw 1 card." + "DESCRIPTION": "Retain. NL Gain !B! Block. NL sneckomod:Muddle a card. NL Exhaust." }, "sneckomod:Strike": { "NAME": "Strike", "DESCRIPTION": "Deal !D! damage." }, + "sneckomod:ToothAndClaw": { + "NAME": "Tooth And Claw", + "DESCRIPTION": "Deal !D! damage. NL Gain a Shiv for each unique color in your hand. NL sneckomod:Gift: Uncommon.", + "UPGRADE_DESCRIPTION": "Deal !D! damage. NL Gain an Upgraded Shiv for each unique color in your hand. NL sneckomod:Gift: Uncommon.", + "DESCRIPTION_BATTLE": "Deal !D! damage. NL Gain a Shiv for each unique color in your hand.", + "UPGRADE_DESCRIPTION_BATTLE": "Deal !D! damage. NL Gain an Upgraded Shiv for each unique color in your hand." + }, + "sneckomod:TyphoonFang": { + "NAME": "Typhoon Fang", + "DESCRIPTION": "Deal !D! damage. NL sneckomod:Overflow: This turn, whenever you sneckomod:Overflow, play a copy of this card." + }, + "sneckomod:Yearn": { + "NAME": "Yearn", + "DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] + }, "sneckomod:TailWhip": { "NAME": "Tail Whip", - "DESCRIPTION": "Deal !D! damage. NL Apply !M! - 2 Weak. NL Apply !M! - 2 Vulnerable." + "DESCRIPTION": "Deal !D! damage. NL sneckomod:Overflow: Apply !M! Weak and Vulnerable." }, "sneckomod:Transmogrify": { "NAME": "Transmogrify", - "DESCRIPTION": "Choose 1 of 2 Relics to lose. NL Obtain a random Relic of the same rarity. NL Exhaust.", + "DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", "EXTENDED_DESCRIPTION": [ "I have no Relicsss to ssswap.", "Choose a Relic to lose.", "Lose ", " and obtain another ", - " Relic." + " Relic.", + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] + }, + "sneckomod:ToxicPersonality": { + "NAME": "Toxic Personality", + "DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." ] }, "sneckomod:TrashToTreasure": { "NAME": "Trash to Treasure", - "DESCRIPTION": "sneckomod:Snekproof. NL Exhaust a card. NL Gain [E] equal to its cost. NL Exhaust.", - "UPGRADE_DESCRIPTION": "sneckomod:Snekproof. NL Exhaust a card. NL Gain [E] equal to its cost." + "DESCRIPTION": "Gain !B! Block. NL Exhaust a card. NL Gain [E] equal to its cost. NL Exhaust.", + "UPGRADE_DESCRIPTION": "Gain !B! Block. NL Exhaust a card. NL Gain [E] equal to its cost." }, "sneckomod:UnendingSupply": { "NAME": "Unending Supply", - "DESCRIPTION": "At the start of each turn, gain a random sneckomod:Offclass card." - }, + "DESCRIPTION": "At the start of each turn, gain an gremlin:Echo of a random sneckomod:Offclass card.", + "UPGRADE_DESCRIPTION": "Innate. NL At the start of each turn, gain an gremlin:Echo of a random sneckomod:Offclass card." +}, "sneckomod:Unknown": { "NAME": "??? Basic", - "DESCRIPTION": "*Unidentified Basic Card.", - "UPGRADE_DESCRIPTION": "Upgraded *Unidentified Basic Card." + "DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "UPGRADE_DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev." }, "sneckomod:Unknown0Cost": { "NAME": "??? 0-Cost", - "DESCRIPTION": "*Unidentified 0 Cost Card.", - "UPGRADE_DESCRIPTION": "Upgraded *Unidentified 0 Cost Card." + "DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "UPGRADE_DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev." }, "sneckomod:Unknown1Cost": { "NAME": "??? 1-Cost", - "DESCRIPTION": "*Unidentified 1 Cost Card.", - "UPGRADE_DESCRIPTION": "Upgraded *Unidentified 1 Cost Card." + "DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "UPGRADE_DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev." }, "sneckomod:Unknown2Cost": { "NAME": "??? 2-Cost", - "DESCRIPTION": "*Unidentified 2 Cost Card.", - "UPGRADE_DESCRIPTION": "Upgraded *Unidentified 2 Cost Card." + "DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "UPGRADE_DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev." }, "sneckomod:Unknown3Cost": { "NAME": "??? 3-Cost", - "DESCRIPTION": "*Unidentified 3 Cost Card.", - "UPGRADE_DESCRIPTION": "Upgraded *Unidentified 3 Cost Card." + "DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "UPGRADE_DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev." }, "sneckomod:UnknownBlock": { "NAME": "??? Block", - "DESCRIPTION": "*Unidentified Block Card.", - "UPGRADE_DESCRIPTION": "Upgraded *Unidentified Block Card." + "DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "UPGRADE_DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev." }, "sneckomod:UnknownBoss": { "NAME": "??? Boss", - "DESCRIPTION": "*Unidentified Colorless Boss card.", - "UPGRADE_DESCRIPTION": "Upgraded *Unidentified Colorless Boss card." + "DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "UPGRADE_DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev." }, "sneckomod:UnknownClass": { "NAME": "??? Class", - "DESCRIPTION": "*Unidentified YouShouldNeverSeeThis-ReportToDev Card.", - "UPGRADE_DESCRIPTION": "Upgraded *Unidentified YouShouldNeverSeeThis-ReportToDev Card." + "DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "UPGRADE_DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev." }, "sneckomod:UnknownColorless": { "NAME": "??? Colorless", - "DESCRIPTION": "*Unidentified Colorless Card.", - "UPGRADE_DESCRIPTION": "Upgraded *Unidentified Colorless Card." + "DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "UPGRADE_DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev." }, "sneckomod:UnknownCommonAttack": { "NAME": "??? C Attack", - "DESCRIPTION": "*Unidentified Common Attack Card.", - "UPGRADE_DESCRIPTION": "Upgraded *Unidentified Common Attack Card." + "DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "UPGRADE_DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev." }, "sneckomod:UnknownCommonSkill": { "NAME": "??? C Skill", - "DESCRIPTION": "*Unidentified Common Skill Card.", - "UPGRADE_DESCRIPTION": "Upgraded *Unidentified Common Skill Card." + "DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "UPGRADE_DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev." }, "sneckomod:UnknownDexterity": { "NAME": "??? Dexterity", - "DESCRIPTION": "*Unidentified Dexterity Card.", - "UPGRADE_DESCRIPTION": "Upgraded *Unidentified Dexterity Card." + "DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "UPGRADE_DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev." }, "sneckomod:UnknownDraw": { "NAME": "??? Draw", - "DESCRIPTION": "*Unidentified Draw Card.", - "UPGRADE_DESCRIPTION": "Upgraded *Unidentified Draw Card." + "DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "UPGRADE_DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev." }, "sneckomod:UnknownEthereal": { "NAME": "??? Ethereal", - "DESCRIPTION": "*Unidentified Ethereal Card.", - "UPGRADE_DESCRIPTION": "Upgraded *Unidentified Ethereal Card." + "DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "UPGRADE_DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev." }, "sneckomod:UnknownExhaust": { "NAME": "??? Exhaust", - "DESCRIPTION": "*Unidentified Exhaust Card.", - "UPGRADE_DESCRIPTION": "Upgraded *Unidentified Exhaust Card." + "DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "UPGRADE_DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev." }, "sneckomod:UnknownRareAttack": { "NAME": "??? R Attack", - "DESCRIPTION": "*Unidentified Rare Attack Card.", - "UPGRADE_DESCRIPTION": "Upgraded *Unidentified Rare Attack Card." + "DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "UPGRADE_DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev." }, "sneckomod:UnknownRarePower": { "NAME": "??? R Power", - "DESCRIPTION": "*Unidentified Rare Power Card.", - "UPGRADE_DESCRIPTION": "Upgraded *Unidentified Rare Power Card." + "DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "UPGRADE_DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev." }, "sneckomod:UnknownRareSkill": { "NAME": "??? R Skill", - "DESCRIPTION": "*Unidentified Rare Skill Card.", - "UPGRADE_DESCRIPTION": "Upgraded *Unidentified Rare Skill Card." + "DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "UPGRADE_DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev." }, "sneckomod:UnknownStrength": { "NAME": "??? Strength", - "DESCRIPTION": "*Unidentified Strength Card.", - "UPGRADE_DESCRIPTION": "Upgraded *Unidentified Strength Card." + "DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "UPGRADE_DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev." }, "sneckomod:UnknownStrike": { "NAME": "??? Strike", - "DESCRIPTION": "*Unidentified Strike Card.", - "UPGRADE_DESCRIPTION": "Upgraded *Unidentified Strike Card." + "DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "UPGRADE_DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev." }, "sneckomod:UnknownUncommonAttack": { "NAME": "??? U Attack", - "DESCRIPTION": "*Unidentified Uncommon Attack Card.", - "UPGRADE_DESCRIPTION": "Upgraded *Unidentified Uncommon Attack Card." + "DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "UPGRADE_DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev." }, "sneckomod:UnknownUncommonPower": { "NAME": "??? U Power", - "DESCRIPTION": "*Unidentified Uncommon Power Card.", - "UPGRADE_DESCRIPTION": "Upgraded *Unidentified Uncommon Power Card." + "DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "UPGRADE_DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev." }, "sneckomod:UnknownUncommonSkill": { "NAME": "??? U Skill", - "DESCRIPTION": "*Unidentified Uncommon Skill Card.", - "UPGRADE_DESCRIPTION": "Upgraded *Unidentified Uncommon Skill Card." + "DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "UPGRADE_DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev." }, "sneckomod:UnknownVulnerable": { "NAME": "??? Vulnerable", - "DESCRIPTION": "*Unidentified Vulnerable Card.", - "UPGRADE_DESCRIPTION": "Upgraded *Unidentified Vulnerable Card." + "DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "UPGRADE_DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev." }, "sneckomod:UnknownWeak": { "NAME": "??? Weak", - "DESCRIPTION": "*Unidentified Weak Card.", - "UPGRADE_DESCRIPTION": "Upgraded *Unidentified Weak Card." + "DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "UPGRADE_DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev." }, "sneckomod:UnknownX": { "NAME": "??? X-Cost", - "DESCRIPTION": "*Unidentified X Cost Card.", - "UPGRADE_DESCRIPTION": "Upgraded *Unidentified X Cost Card." + "DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "UPGRADE_DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev." }, "sneckomod:UnlimitedRolls": { "NAME": "Unlimited Rolls", - "DESCRIPTION": "At the start of your turn, gain a *Soul *Roll with Exhaust.", - "UPGRADE_DESCRIPTION": "Innate. NL At the start of your turn, gain a *Soul *Roll with Exhaust." + "DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "UPGRADE_DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] + }, + "sneckomod:Behold": { + "NAME": "Behold!", + "DESCRIPTION": "Deal !D! damage. NL sneckomod:Overflow: Gain !M! Shivs.", + "UPGRADE_DESCRIPTION": "Deal !D! damage. NL sneckomod:Overflow: Gain !M! Shivs." + }, + "sneckomod:SaveForLater": { + "NAME": "Save For Later", + "DESCRIPTION": "Deal !D! damage. NL Retain !M! card at the end of your turn.", + "UPGRADE_DESCRIPTION": "Deal !D! damage. NL Retain !M! cards at the end of your turn." + }, + "sneckomod:PowerShot": { + "NAME": "Power Shot", + "DESCRIPTION": "Deal !D! damage. Whenever you play a Power, return this from the discard pile to your hand." + }, + "sneckomod:LilGuardian": { + "NAME": "Lil' Guardian", + "DESCRIPTION": "Gain !B! Block. Whenever you play a card that costs 2 or more, play this from your hand." + }, + "sneckomod:CrystalBoomerang": { + "NAME": "Crystal Boomerang", + "DESCRIPTION": "Put a card from the discard pile into your hand. NL If it's sneckomod:Offclass, gain !B! Block." + }, + "sneckomod:ViperEssence": { + "NAME": "Viper Essence", + "DESCRIPTION": "Ethereal. NL sneckomod:Offclass. NL Gain !M! Strength." + }, + "sneckomod:Amass": { + "NAME": "Amass", + "DESCRIPTION": "Gain !B! Block. NL Gains additional Block equal to the total [E] cost of your hand.", + "UPGRADE_DESCRIPTION": "Gain !B! Block. NL Gains additional Block equal to twice the total [E] cost of your hand." + }, + "sneckomod:Medusa": { + "NAME": "Medusa", + "DESCRIPTION": "Deal !D! damage. NL Apply !M! sneckomod:Venom. NL sneckomod:Gift: Common Debuff.", + "DESCRIPTION_BATTLE": "Deal !D! damage. NL Apply !M! sneckomod:Venom." + }, + "sneckomod:Cower": { + "NAME": "Cower", + "DESCRIPTION": "Gain !B! Block. NL Add a *Hole *Up to your hand. NL Exhaust.", + "UPGRADE_DESCRIPTION": "Gain !B! Block. NL Add a *Hole *Up+ to your hand. NL Exhaust." }, "sneckomod:WideSting": { "NAME": "Wide Sting", - "DESCRIPTION": "Deal !M! - !D! damage to ALL enemies. NL Upgrade all sneckomod:Offclass cards in your hand." + "DESCRIPTION": "Deal !D! damage to ALL enemies. NL Upgrade all sneckomod:Offclass cards in your hand. NL sneckomod:Gift: Common.", + "DESCRIPTION_BATTLE": "Deal !D! damage to ALL enemies. NL Upgrade all sneckomod:Offclass cards in your hand." + }, + "sneckomod:GildedShield": { + "NAME": "Gilded Shield", + "DESCRIPTION": "Gain !B! Block. NL sneckomod:Muddle this, then return it to your hand." + }, + "sneckomod:Mesmerize": { + "NAME": "Mesmerize", + "DESCRIPTION": "ALL enemies lose !M! Strength. NL sneckomod:Muddle a card. NL Exhaust." + }, + "sneckomod:Serpentscale": { + "NAME": "Serpentscale", + "DESCRIPTION": "Deal !D! damage. NL Gain 1 expansioncontent:Plated *Armor. NL sneckomod:Overflow: Gain !M! *Plated *Armor instead." + }, + "sneckomod:OtherworldlySlash": { + "NAME": "Otherworldly Slash", + "DESCRIPTION": "Deal !D! damage. NL If you played an sneckomod:Offclass card this turn, deal !D! damage again. NL sneckomod:Gift: Common.", + "DESCRIPTION_BATTLE": "Deal !D! damage. NL If you played an sneckomod:Offclass card this turn, deal !D! damage again.." + }, + "sneckomod:BeyondArmor": { + "NAME": "Beyond Armor", + "DESCRIPTION": "Gain !B! Block. NL Put !M! random sneckomod:Offclass cards from your draw pile into your hand. NL sneckomod:Gift: Common.", + "DESCRIPTION_BATTLE": "Gain !B! Block. NL Put !M! random sneckomod:Offclass cards from your draw pile into your hand." + }, + "sneckomod:BlunderGuard": { + "NAME": "Blunder Guard", + "DESCRIPTION": "Whenever you play a card that costs 3+, gain !qqq! Block and !M! Strength.", + "UPGRADE_DESCRIPTION": "Whenever you play a card that costs 3+, gain !qqq! Block and !M! Strength." + }, + "sneckomod:WideAngle": { + "NAME": "Wide Angle", + "DESCRIPTION": "Retain. NL Deal !D! damage to ALL enemies." + }, + "sneckomod:SerpentsNest": { + "NAME": "Serpent's Nest", + "DESCRIPTION": "Whenever you play a Power, deal !M! damage to ALL enemies. NL sneckomod:Gift: Uncommon Power.", + "DESCRIPTION_BATTLE": "Whenever you play a Power, deal !M! damage to ALL enemies." + }, + "sneckomod:Whack": { + "NAME": "Whack!", + "DESCRIPTION": "Deal !D! damage. NL Add a *Wallop to your hand. NL Exhaust.", + "UPGRADE_DESCRIPTION": "Deal !D! damage. NL Add a *Wallop+ to your hand. NL Exhaust." + }, + "sneckomod:CobraCoil": { + "NAME": "Cobra Coil", + "DESCRIPTION": "Deal !D! damage. NL Enemy takes !M! damage at the end of each of its turns. NL sneckomod:Gift: Rare Attack." + }, + "sneckomod:Belittle": { + "NAME": "Belittle", + "DESCRIPTION": "Enemy loses !M! HP for each unique debuff they have. NL sneckomod:Gift: Uncommon Debuff.", + "DESCRIPTION_BATTLE": "Enemy loses !M! HP for each unique debuff they have." + }, + "sneckomod:Jackpot": { + "NAME": "Jackpot", + "DESCRIPTION": "Retain. NL Gain [E] [E]. NL Exhaust.", + "UPGRADE_DESCRIPTION": "Retain. NL Gain [E] [E] [E]. NL Exhaust." + }, + "sneckomod:MakeshiftBlade": { + "NAME": "Makeshift Blade", + "DESCRIPTION": "Deal !D! damage. If the target has at least !M! debuffs, draw !qqq! cards. NL sneckomod:Gift: Debuff.", + "DESCRIPTION_BATTLE": "Deal !D! damage. If the target has at least !M! debuffs, draw !qqq! cards." + }, + "sneckomod:LatchOn": { + "NAME": "Latch On", + "DESCRIPTION": "Deal !D! damage to ALL enemies. NL Add a *Viper *Essence to your hand." + }, + "sneckomod:ComboString": { + "NAME": "Combo String", + "DESCRIPTION": "Deal !D! damage for each sneckomod:Offclass card played this turn. NL sneckomod:Gift: Uncommon.", + "EXTENDED_DESCRIPTION": [ + " NL (hits ", + " x times.)" + ], + "DESCRIPTION_BATTLE": "Deal !D! damage for each sneckomod:Offclass card played this turn." + }, + "sneckomod:ThrowingCards": { + "NAME": "Throwing Cards", + "DESCRIPTION": "Add X copies of *FTL to your hand. NL Gain [E]. NL Exhaust.", + "UPGRADE_DESCRIPTION": "Add X copies of *FTL+ to your hand. NL Gain [E]. NL Exhaust." + }, + "sneckomod:RoundaboutSwing": { + "NAME": "Roundabout Swing", + "DESCRIPTION": "Deal !D! damage. NL Put a card in hand on top of your draw pile. NL Draw !M! additional cards next turn." + }, + "sneckomod:MarkedCard": { + "NAME": "Marked Card", + "DESCRIPTION": "Retain. NL sneckomod:Muddle a card. NL It will always be cheaper. NL Exhaust.", + "UPGRADE_DESCRIPTION": "Retain. NL sneckomod:Muddle a card. NL It will always be cheaper. NL Exhaust." + }, + "sneckomod:InertBlade": { + "NAME": "Inert Blade", + "DESCRIPTION": "Deal !D! damage. NL If this costs... NL 1+: Draw !M! cards. NL 2+: Gain !M! Strength. NL 3+: Gain [E].", + "UPGRADE_DESCRIPTION": "Deal !D! damage. NL If this costs... NL 1+: Draw !M! cards. NL 2+: Gain !M! Strength. NL 3+: Gain [E] [E]." + }, + "sneckomod:PerpetualSerpent": { + "NAME": "Perpetual Serpent", + "DESCRIPTION": "Deal !D! damage. NL sneckomod:Overflow: Gain [E] [E]." + }, + "sneckomod:LastStrike": { + "NAME": "Final Strike", + "DESCRIPTION": "Deal !D! damage. NL Repeat for each unique Strike played this combat. NL sneckomod:Gift: Strike.", + "UPGRADE_DESCRIPTION": "Deal !D! damage. NL Repeat for each unique Strike played this combat. NL sneckomod:Gift: Strike.", + "DESCRIPTION_BATTLE": "Deal !D! damage. NL Repeat for each unique Strike played this combat.", + "UPGRADE_DESCRIPTION_BATTLE": "Deal !D! damage. NL Repeat for each unique Strike played this combat.", + "EXTENDED_DESCRIPTION": [ + " NL (hits ", + " x extra times.)" + ] + }, + "sneckomod:AceOfWands": { + "NAME": "Queen of Pentacles", + "DESCRIPTION": "Ethereal. NL Whenever you apply a debuff to an enemy, gain !M! Block. NL sneckomod:Gift: Debuff.", + "UPGRADE_DESCRIPTION": "Whenever you apply a debuff to an enemy, gain !M! Block. NL sneckomod:Gift: Debuff." + }, + "sneckomod:FlashInThePan": { + "NAME": "Flash in the Pan", + "DESCRIPTION": "Gain !B! Block. NL Discard your hand. NL Draw that many cards next turn." + }, + "sneckomod:TrashCan": { + "NAME": "Trash Can", + "DESCRIPTION": "At the end of your turn, you may Exhaust a card." + }, + "sneckomod:Lacerate": { + "NAME": "Lacerate", + "DESCRIPTION": "Apply !M! sneckomod:Venom to ALL enemies. NL Gain a *Crippling *Cloud. NL Exhaust.", + "UPGRADE_DESCRIPTION": "Apply !M! sneckomod:Venom to ALL enemies. NL Gain a *Crippling *Cloud+. NL Exhaust." + }, + "sneckomod:SerpentineSleuth": { + "NAME": "Serpentine Sleuth", + "DESCRIPTION": "Ethereal. NL Whenever you play a Power, gain [E]. NL sneckomod:Gift: Rare Power.", + "DESCRIPTION_BATTLE": "Ethereal. NL Whenever you play a Power, gain [E]." } -} +} \ No newline at end of file diff --git a/src/main/resources/sneckomodResources/localization/eng/EventStrings.json b/src/main/resources/sneckomodResources/localization/eng/EventStrings.json index 978e89bea..ba166ae74 100644 --- a/src/main/resources/sneckomodResources/localization/eng/EventStrings.json +++ b/src/main/resources/sneckomodResources/localization/eng/EventStrings.json @@ -2,17 +2,17 @@ "sneckomod:D8": { "NAME": "Mystical Octahedron", "DESCRIPTIONS": [ - "Approach the mystical octahedron.", + "Through the mist, you arrive at a tranquil space. In the center of the ruins, a #gmysterious #goctahedron silently floats. It slowly rotates, its surface #b~glowing~ #b~faintly,~ as if some kind of #y~primordial~ #y~artifact.~ NL As you reach out, about to touch its surface, the octahedron #b~suddenly~ #b~lights~ #b~up,~ and intricate runes flash by in a stream of light. You feel a #r@slight@ #r@tremor@ rising from the ground, the surrounding air grows #pheavier, and the entire space seems to hold its breath, awaiting your next move. You decide...", "Relic go boom.", "Got relic.", "Decided to leave." ], "OPTIONS": [ "[Shatter] #rLose #r", - " #r HP. #gGain #g5 #gUnidentified #gCards", + " #r HP. #gChoose #b1 of #b3 Rare #yOffclass Cards to Obtain.", "[Take] #gGain #gMystical #gOctahedron. #rCursed #r- #rPain.", "[Leave]", - "[Locked] Requires a card that uses a randomly chosen number." + "[Locked] Requires an Overflow card." ] }, "sneckomod:BackToBasics": { @@ -21,7 +21,7 @@ "Creativity triumphs over planning every time." ], "OPTIONS": [ - "[Improvisation] #gReplace all #gStrikes and #gDefends with random #gUnidentified cards.", + "[Improvisation] #gReplace all #gStrikes and #gDefends with #rOffclass ones.", "[Locked] Requires a Strike or Defend." ] }, @@ -33,7 +33,7 @@ "The serpent stares at you with a look of extreme disappointment, but ultimately smiles and wishes you well on your journey." ], "OPTIONS": [ - "[Agree] #gGain #ga #grandom #gRelic. #rBecome #rCursed #r- #rBewildered.", + "[Agree] #gGain #ga #gSnecko #gRelic. #rBecome #rCursed #r- #rBewildered.", "[Disagree]", "[Leave]" ] @@ -46,7 +46,7 @@ "The serpent stares at you with a look of extreme disappointment, but ultimately smiles and wishes you well on your journey." ], "OPTIONS": [ - "[Rescue] #gGain #gYoung #gSnecko. #rBecome #rCursed #r- #rBewildered.", + "[Rescue] #gGain #gYoung #gSnecko. #rFight #ran #rAngry #rCenturion.", "[Leave]" ] } diff --git a/src/main/resources/sneckomodResources/localization/eng/KeywordStrings.json b/src/main/resources/sneckomodResources/localization/eng/KeywordStrings.json index 3a006acc0..74323505a 100644 --- a/src/main/resources/sneckomodResources/localization/eng/KeywordStrings.json +++ b/src/main/resources/sneckomodResources/localization/eng/KeywordStrings.json @@ -4,13 +4,29 @@ "NAMES": [ "snekproof" ], - "DESCRIPTION": "Snekproof cards aren't affected by #yConfusion and cannot be #yMuddled." + "DESCRIPTION": "Snekproof cards aren't affected by #yConfusion and cannot be #yMuddled. NOTE FOR LOC: NOT USED DO NOT TRANSLATE." + }, + { + "PROPER_NAME": "Suit", + "NAMES": [ + "suit", + "suits" +], + "DESCRIPTION": "Suits refer to card's color. Token cards do not count as Suits. NOTE FOR LOC: NOT USED DO NOT TRANSLATE." + }, + { + "PROPER_NAME": "Overflow", + "NAMES": [ + "Overflow", "overflow" + ], + "DESCRIPTION": "Overflow effects activate if you have more than #b5 cards in hand." }, { "PROPER_NAME": "Muddle", "NAMES": [ "muddle", - "muddled" + "muddled", + "muddles" ], "DESCRIPTION": "Muddling a card changes its cost this turn to between #b0 and #b3 at random." }, @@ -21,18 +37,32 @@ ], "DESCRIPTION": "An Offclass card is any obtainable card from a class other than your own (including Colorless cards, Curses, and Statuses)." }, + { + "PROPER_NAME": "Gift", + "NAMES": [ + "gift" + ], + "DESCRIPTION": "When you obtain this card, get a card reward with the following card type." + }, { "PROPER_NAME": "Identify", "NAMES": [ "identify" ], - "DESCRIPTION": "Replace an #yUnidentified card with its current random card permanently." + "DESCRIPTION": "Replace an #yUnidentified card with its current random card permanently. NOTE FOR LOC: NOT USED DO NOT TRANSLATE." + }, + { + "PROPER_NAME": "Venom", + "NAMES": [ + "venom" + ], + "DESCRIPTION": "Creatures with #yVenom lose HP you apply a debuff that isn't #yVenom to them." }, { "PROPER_NAME": "Lucky", "NAMES": [ "lucky" ], - "DESCRIPTION": "Cards that choose a random number as part of their card text choose the maximum possible number. (Does not affect Muddle)" + "DESCRIPTION": "Overflow effects always activate this turn regardless of hand size." } ] \ No newline at end of file diff --git a/src/main/resources/sneckomodResources/localization/eng/PotionStrings.json b/src/main/resources/sneckomodResources/localization/eng/PotionStrings.json index 9230ac496..d955411c9 100644 --- a/src/main/resources/sneckomodResources/localization/eng/PotionStrings.json +++ b/src/main/resources/sneckomodResources/localization/eng/PotionStrings.json @@ -1,32 +1,32 @@ { "sneckomod:DiceRollPotion": { - "NAME": "Potentially Potent Potion", + "NAME": "Card in a Bottle", "DESCRIPTIONS": [ - "Deal #b", - "-", - " damage." + "Use in combat to add #b", + " card reward with #b3 #yUpgraded Uncommon #yOffclass cards to the room's rewards.", + " card rewards with #b3 #yUpgraded Uncommon #yOffclass cards to the room's rewards." ] }, "sneckomod:CheatPotion": { "NAME": "Liquid Luck", "DESCRIPTIONS": [ - "Gain #yLucky for 1 turn.", - "Gain #yLucky for #b", - " turns." + "Overflow effects always activate this turn regardless of hand size.", + "Overflow effects always activate for #b", + " turns regardless of hand size." ] }, "sneckomod:MuddlingPotion": { "NAME": "Spiked Energy Drink", "DESCRIPTIONS": [ "#yMuddle the #b", - " highest-cost cards in your hand. Cards #yMuddled this way cannot cost 3." + " highest-cost cards in your hand. Cards #yMuddled this way can't cost #b3 [REMOVE_SPACE]." ] }, "sneckomod:OffclassReductionPotion": { "NAME": "Exotic Beverage", "DESCRIPTIONS": [ "Reduce the cost of #yOffclass cards in your hand by #b", - "." + " [REMOVE_SPACE]." ] } } diff --git a/src/main/resources/sneckomodResources/localization/eng/PowerStrings.json b/src/main/resources/sneckomodResources/localization/eng/PowerStrings.json index 085bcfb91..6149973d1 100644 --- a/src/main/resources/sneckomodResources/localization/eng/PowerStrings.json +++ b/src/main/resources/sneckomodResources/localization/eng/PowerStrings.json @@ -1,18 +1,26 @@ { + "sneckomod:BlunderGuardPower": { + "NAME": "Tsunami", + "DESCRIPTIONS": [ + "#yOverflow effects also grant #b", + " #yBlock [REMOVE_SPACE].", + " #yBlock [REMOVE_SPACE]." + ] + }, "sneckomod:CheapStockPower": { "NAME": "Cheap Stock", "DESCRIPTIONS": [ - "At the start of your turn, reduce the cost of the highest cost #yOffclass card in your hand by #b1.", - "At the start of your turn, reduce the cost of the highest cost #yOffclass card in your hand by #b1 #b", + "At the start of your turn, #yMuddle the highest cost card in your hand.", + "At the start of your turn, #yMuddle the highest cost card in your hand #b", " times." ] }, "sneckomod:CheatPower": { "NAME": "Cheating", "DESCRIPTIONS": [ - "This turn, cards that choose a random number for their effect choose the maximum possible number.", + "This turn, cards that have an #yOverflow effect always activate it when played.", "For the next #b", - " turns, cards that choose a random number for their effect choose the maximum possible number." + " turns, cards that have an #yOverflow effect always activate it when played." ] }, "sneckomod:MuddleDrawnCardsPower": { @@ -28,22 +36,47 @@ "NAME": "Mudshield", "DESCRIPTIONS": [ "Whenever you #yMuddle a card, gain #b", - " #yBlock." + " #yBlock [REMOVE_SPACE]." ] }, - "sneckomod:SerpentMindPower": { - "NAME": "Serpent Mind", + "sneckomod:OverwhelmingPresencePower": { + "NAME": "Overwhelming Presence", "DESCRIPTIONS": [ - "Whenever you play an #yOffclass card, draw #b", - " card.", + "The first time you play an #yOffclass card each turn, draw #b1 card.", + "The first time you play an #yOffclass card each turn, draw #b ", " cards." ] }, + "sneckomod:SerpentsNestPower": { + "NAME": "Serpent's Nest", + "DESCRIPTIONS": [ + "Whenever you play a #yPower, deal #b1 damage to ALL enemies.", + "Whenever you play a #yPower, deal #b", + " damage to ALL enemies." + ] + }, + "sneckomod:SerpentMindPower": { + "NAME": "Exotic Form", + "DESCRIPTIONS": [ + "At the end of your turn, gain #b", + " #yStrength for each unique color played this turn.", + " #yStrength for each unique color played this turn." + ] + }, + "sneckomod:SnakeEyesPower": { + "NAME": "Snake Eyes", + "DESCRIPTIONS": [ + "Your next #yOffclass #yCard is played twice this turn.", + "Your next #b", + " #yOffclass #yCards are played twice this turn." + ] + }, "sneckomod:UnendingSupplyPower": { "NAME": "Unending Supply", "DESCRIPTIONS": [ "At the start of your turn, add #b", - " random #yOffclass cards into your hand." + "At the start of your turn, add an #yEcho of a random #yOffclass card into your hand.", + " #yEchoes of random #yOffclass cards into your hand." ] }, "sneckomod:UnknownUpgradedPostCombatPower": { @@ -51,20 +84,110 @@ "DESCRIPTIONS": [ "At the end of combat, obtain #b", " additional #yUpgraded #yUnidentified cards.", - " additional #yUpgraded #yUnidentified card." + " additional #yUpgraded #yUnidentified card.", + "NOTE FOR LOC: NOT USED DO NOT TRANSLATE." + ] }, "sneckomod:UnlimitedRollsPower": { "NAME": "Unlimited Rolls", "DESCRIPTIONS": [ - "At the start of your turn, gain a #ySoul #yRoll+ with #yExhaust." + "At the start of your turn, gain a #ySoul #yRoll+ with #yExhaust [REMOVE_SPACE]." ] }, "sneckomod:Transmogrifying": { "NAME": "Transmogrifying", "DESCRIPTIONS": [ " is being transformed into another ", - " relic." + " relic.", + "NOTE FOR LOC: NOT USED DO NOT TRANSLATE." + ] + }, + "sneckomod:ToxicPersonalityPower": { + "NAME": "Toxic Personality", + "DESCRIPTIONS": [ + "Whenever you apply a debuff to an enemy, apply #b", + " #yVenom [REMOVE_SPACE].", + "NOTE FOR LOC: NOT USED DO NOT TRANSLATE." + ] + }, + "sneckomod:TyphoonPower": { + "NAME": "Typhoon", + "DESCRIPTIONS": [ + "This turn, whenever you #bOverflow [REMOVE_SPACE], play a copy of #yTyphoon #yFang [REMOVE_SPACE].", + "This turn, whenever you #bOverflow [REMOVE_SPACE], play #b", + " copies of #yTyphoon #yFang [REMOVE_SPACE]." ] - } -} \ No newline at end of file + }, + "sneckomod:TyphoonPlusPower": { + "NAME": "Typhoon+", + "DESCRIPTIONS": [ + "This turn, whenever you #bOverflow [REMOVE_SPACE], play a copy of #yTyphoon #yFang+ [REMOVE_SPACE].", + "This turn, whenever you #bOverflow [REMOVE_SPACE], play #b", + " copies of #yTyphoon #yFang+ [REMOVE_SPACE]." + ] + }, + "sneckomod:SerpentineSleuthPower": { + "NAME": "Serpentine Sleuth", + "DESCRIPTIONS": [ + "Whenever you play a #yPower [REMOVE_SPACE], gain #b", + " [E] .", + " [E] ." + ] + }, + "sneckomod:BigGunsStrengthPower": { + "NAME": "Big Guns", + "DESCRIPTIONS": [ + "Whenever you play a card that costs 3+, gain #b", + " #yStrength [REMOVE_SPACE].", + " #yStrength [REMOVE_SPACE]." + ] + }, + "sneckomod:BigGunsBlockPower": { + "NAME": "Blunder Guard", + "DESCRIPTIONS": [ + "Whenever you play a card that costs 3+, gain #b", + " #yBlock [REMOVE_SPACE].", + " #yBlock [REMOVE_SPACE]." + ] + }, + "sneckomod:AceOfWandsPower": { + "NAME": "Queen of Pentacles", + "DESCRIPTIONS": [ + "Whenever you apply a debuff to an enemy, gain #b", + " #yBlock [REMOVE_SPACE].", + " #yBlock [REMOVE_SPACE]." + ] + }, + "sneckomod:LacerateDebuff": { + "NAME": "Lacerate", + "DESCRIPTIONS": [ + "Whenever you apply a debuff to this enemy this turn, apply #b", + " #yVenom to them.", + " #yVenom to them." + ] + }, + "sneckomod:FountainPower": { + "NAME": "Fountain", + "DESCRIPTIONS": [ + "#yOverflow effects also apply #b", + " #yVenom to a random enemy.", + " #yVenom to a random enemy." + ] + }, + "sneckomod:TrashCanPower": { + "NAME": "Trash Can", + "DESCRIPTIONS": ["At the end of your turn, you may #yExhaust a card.", + "At the end of your turn, you may #yExhaust up to #b", + " cards." + ] + }, + + "sneckomod:VenomDebuff": { + "NAME": "Venom", + "DESCRIPTIONS": [ + "Whenever this creature gains a #ynon-Venom debuff, they lose #b", + " HP." + ] + } + } diff --git a/src/main/resources/sneckomodResources/localization/eng/RelicStrings.json b/src/main/resources/sneckomodResources/localization/eng/RelicStrings.json index 6fae55acb..aa659f537 100644 --- a/src/main/resources/sneckomodResources/localization/eng/RelicStrings.json +++ b/src/main/resources/sneckomodResources/localization/eng/RelicStrings.json @@ -3,28 +3,29 @@ "NAME": "Snecko Soul", "FLAVOR": "0...3...2...2...1", "DESCRIPTIONS": [ - "The first time you play an #ysneckomod:Offclass card in a combat, gain [E] and draw a card." + "At the start of each combat, add #ySoul #yRoll to your hand." ] }, "sneckomod:SuperSneckoSoul": { "NAME": "Super Snecko Soul", "FLAVOR": "3120231321230320", "DESCRIPTIONS": [ - "Replaces [#407B93]Snecko Soul[]. NL The first time you play an #ysneckomod:Offclass each turn, gain [E] ." + "Replaces [#407B93]Snecko [#407B93]Soul[]. NL At the start of each combat and every other turn, gain a #ySoul #yRoll [REMOVE_SPACE]. NL On other turns, draws an additional card at the start of your turn and #ysneckomod:Muddles it." ] }, "sneckomod:CleanMud": { "NAME": "Snake-Charmer's Flute", "FLAVOR": "Sssssss...", "DESCRIPTIONS": [ - "#ysneckomod:Muddled cards can't cost #b3." + "#ysneckomod:Muddled cards can't cost #b3 [REMOVE_SPACE]." ] }, "sneckomod:ConfusingCodex": { "NAME": "Ring of the Snek", "FLAVOR": "Illegible, unreadable, due by Thursday.", "DESCRIPTIONS": [ - "At the start of combat, apply #b0-2 #yWeak and #yVulnerable to ALL enemies." + "Whenever you activate #b", + " #ysneckomod:Overflow effects, apply #b1 #yWeak and #yVulnerable to a random enemy." ] }, "sneckomod:CrystallizedMud": { @@ -38,83 +39,83 @@ "NAME": "Loaded Die", "FLAVOR": "Cheese-stuffed.", "DESCRIPTIONS": [ - "Cards that choose random numbers have +1 minimum." + "Whenever a card is #ysneckomod:Muddled [REMOVE_SPACE], gain #b", + " #yBlock [REMOVE_SPACE]." ] }, "sneckomod:RareBoosterPack": { "NAME": "Rare Booster Box", "FLAVOR": "Mint condition.", "DESCRIPTIONS": [ - "Upon pickup, obtain a #yUnidentified #yRare card of each card type." + "Upon pickup, obtain an #ysneckomod:Offclass #yRare card." ] }, "sneckomod:SleevedAce": { "NAME": "Sleeved Ace", "FLAVOR": "We're all aces.", "DESCRIPTIONS": [ - "At the start of each combat, gain a #yPure #yLuck with #yRetain." + "At the start of each combat, gain a #yMarked #yCard [REMOVE_SPACE]." ] }, "sneckomod:UnknownEgg": { "NAME": "Unidentified Egg", "FLAVOR": "What will hatch? Pay $1000 to see.", "DESCRIPTIONS": [ - "#yIdentifying becomes a free action. NL #yUnidentified cards in card rewards are #yUpgraded." + "Whenever you add an #ysneckomod:Offclass card to your deck, #yUpgrade it. Upon pickup, #yUpgrade #b2 random #ysneckomod:Offclass cards." ] }, "sneckomod:SuperSneckoEye": { "NAME": "Super Snecko Eye", "FLAVOR": "0121012", "DESCRIPTIONS": [ - "Replaces #ySnecko #yEye. At the start of your turn, draw #b2 additional cards. Start each combat #yConfused. The first time you draw a card that costs #b3 each combat, reduce its cost to #b0." + "Replaces #ySnecko #yEye. At the start of your turn, draw #b4 additional cards. Start each combat #yConfused." ] }, "sneckomod:SneckoTalon": { "NAME": "Idol of Retromation", "FLAVOR": "Often called the Idol of Reto for short.", "DESCRIPTIONS": [ - "At the start of your turn, reduce the cost of the most expensive card in your hand by #b1 for this turn." + "At the start of your turn, reduce the cost of a random card in your hand by #b1 until played." ] }, "sneckomod:BlankCard": { "NAME": "Blank Card", "FLAVOR": "Card Mimic.", "DESCRIPTIONS": [ - "At the start of each combat, add an #ygremlin:Echo of a random card from your deck to your hand. It costs #b0 ." + "At the start of each combat, add an #ygremlin:Echo of a random #rnon-Curse [REMOVE_SPACE], #ynon-Status card from your deck to your hand. It costs #b0 [REMOVE_SPACE]." ] }, "sneckomod:D8": { "NAME": "Mystical Octahedron", "FLAVOR": "It appears weighted toward one side.", "DESCRIPTIONS": [ - "Upon pickup, choose a card that selects a random number for its effects. This card always selects its maximum possible number.", + "Upon pickup, choose a card that has an #ysneckomod:Overflow effect. Whenever you play it, gain #b4 #yBlock and activate its #yOverflow effect, even if you don't have more than #b5 cards in hand.", "Choose a card for ", "Whenever ", - " is played, it chooses its maximum possible number for its effect." + " is played, gain #b4 #yBlock and activate its #ysneckomod:Overflow effect, even if you don't have more than #b5 cards in hand.", + "The card attached to this relic has been #rremoved from your deck, the relic no longer functions." ] }, "sneckomod:BabySnecko": { "NAME": "Young Snecko", "FLAVOR": "Bewilderingly adorable.", "DESCRIPTIONS": [ - "Deals #b5 damage to a random enemy at the start of your turn." + "Deals #b9 damage to a random enemy and #ysneckomod:Muddles #b2 random (at least #b1 cost) cards in your hand at the start of your turn." ] }, "sneckomod:SneckoCommon": { "NAME": "Seal of Approval", "FLAVOR": "I'm The Ironclad and this is my favorite Relic in the Spire. -Merchant Advertising Pamphlet", "DESCRIPTIONS": [ - "Upon pickup, choose #b1 of #b3 #yUnidentified #yCharacter cards to add to your deck. All future #yUnidentified #yCharacter cards found will be of this character.", - "All Unidentified Character cards found will be ", - " cards." + "Upon pickup, choose #b1 of #b5 Uncommon #ysneckomod:Offclass #yPowers to obtain." ] }, "sneckomod:SneckoBoss": { "NAME": "Lucky Horseshoe", "FLAVOR": "Make your own luck.", "DESCRIPTIONS": [ - "Upon pickup, choose #b1 of #b3 #yUnidentified #yCharacter cards. Add #b5 copies of it to your deck. All combats drop an additional card reward of the chosen character's cards.", - "Upon pickup, obtain #b5 #yUnidentified ", + "Upon pickup, choose #b1 of #b3 #yCharacters [REMOVE_SPACE]. Choose #b3 #yUpgraded Uncommon cards and #b2 Rare cards to add to your deck. All combats drop an additional card reward of the chosen character's cards.", + "Upon pickup, obtain #b3 Upgraded Uncommon and #b2 Rare ", " cards. All combats drop an additional ", " card reward." ] diff --git a/src/main/resources/sneckomodResources/localization/eng/UIStrings.json b/src/main/resources/sneckomodResources/localization/eng/UIStrings.json index 7279e6f86..4e8213a4e 100644 --- a/src/main/resources/sneckomodResources/localization/eng/UIStrings.json +++ b/src/main/resources/sneckomodResources/localization/eng/UIStrings.json @@ -44,7 +44,7 @@ "sneckomod:ChallengeMode": { "TEXT": [ "Challenge Mode - Pure Snecko", - "Unidentified cards can be from any class. Recommended for experienced Snecko players." + "Gifts can be from any class. Recommended for experienced Snecko players." ] }, "sneckomod:LockInBonfireOptions": { @@ -56,11 +56,29 @@ "[Free Action] Lock an Unidentified into a permanent card." ] }, + "sneckomod:CommonAttackReward": { + "TEXT": [ + "Add an Offclass card to your deck", + "Pick a Card." + ] + }, + "sneckomod:DiceRollPotionReward": { + "TEXT": [ + "Add an Upgraded Card to your deck.", + "Pick a Card." + ] + }, + "sneckomod:ColorfulPowersCardReward": { + "TEXT": [ + "Add an Upgraded Power to your deck.", + "Pick a Card." + ] + }, "sneckomod:AtGameStart": { "TEXT": [ "", " Cards", - "Unidentified cards can become ", + "Gifts will include ", " cards this run.", "Choose." ] diff --git a/src/main/resources/sneckomodResources/localization/jpn/CardStrings.json b/src/main/resources/sneckomodResources/localization/jpn/CardStrings.json index bf6b2d101..4521bb3f8 100644 --- a/src/main/resources/sneckomodResources/localization/jpn/CardStrings.json +++ b/src/main/resources/sneckomodResources/localization/jpn/CardStrings.json @@ -1,196 +1,302 @@ { + "sneckomod:Blunderbus": { + "NAME": "ブランダーバス", + "DESCRIPTION": "敵全体に !D! ダメージを与える。 NL 手札の3コスト以上のカード1枚につきもう一度ダメージを与える。" + }, + "sneckomod:Tsunami": { + "NAME": "ツナミ", + "DESCRIPTION": "sneckomod:オーバーフロー が発動した時、 !M! ブロック を得る。" + }, "sneckomod:CheapStock": { "NAME": "チープストック", - "DESCRIPTION": "ターン開始時、手札の中で最もコストの高い sneckomod:オフクラス のコストがこの戦闘中 1 減少する。", - "UPGRADE_DESCRIPTION": "天賦 NL ターン開始時、手札の中で最もコストの高い sneckomod:オフクラス のコストがこの戦闘中 1 減少する。" + "DESCRIPTION": "ターン開始時、手札の最もコストの高いカードを sneckomod:泥まみれ にする。", + "UPGRADE_DESCRIPTION": "ターン開始時、手札の最もコストの高いカードを !M! 枚 sneckomod:泥まみれ にする。" }, "sneckomod:Cheat": { - "NAME": "ピュアラック", - "DESCRIPTION": "sneckomod:蛇避け NL ターン終了時まで sneckomod:ラッキー を得る。 NL 廃棄", - "UPGRADE_DESCRIPTION": "sneckomod:蛇避け NL ターン終了時まで sneckomod:ラッキー を得る。" + "NAME": "純粋な運", + "DESCRIPTION": "sneckomod:蛇避け NL ターン終了まで sneckomod:幸運 状態になる。 NL 廃棄 ", + "UPGRADE_DESCRIPTION": "sneckomod:蛇避け NL ターン終了まで sneckomod:幸運 状態になる。", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: NOT USED DO NOT TRANSLATE " + ] }, "sneckomod:DangerNoodle": { "NAME": "デンジャーヌードル", - "DESCRIPTION": " !D! ダメージを与える。 NL 手札の sneckomod:オフクラス の数だけこれを繰り返し、それらを 廃棄 する。" + "DESCRIPTION": "!D! ダメージを与える。 NL 手札を1枚 sneckomod:泥まみれ にする。 NL sneckomod:ギフト : 3+ コスト", + "DESCRIPTION_BATTLE": "!D! ダメージを与える。 NL 手札を1枚 sneckomod:泥まみれ にする。" + }, + "sneckomod:Deception": { + "NAME": "誤魔化し", + "DESCRIPTION": "!B! ブロックを得る。 NL 手札に *ショックウェーブ を加える。 NL 廃棄 " }, "sneckomod:Defend": { "NAME": "防御", - "DESCRIPTION": " !B! ブロック を得る。" + "DESCRIPTION": "!B! ブロックを得る。" }, "sneckomod:DefensiveFlair": { - "NAME": "防御の工夫", - "DESCRIPTION": " !B! ブロック を得る。追加で !M! ブロックを手札の sneckomod:オフクラス の数だけ得る。" + "NAME": "防衛センス", + "DESCRIPTION": "!B! ブロックを得る。 NL 追加で手札の sneckomod:オフクラス カード1枚につき !M! ブロックを得る。 NL sneckomod:ギフト : アンコモン", + "DESCRIPTION_BATTLE": "!B! ブロックを得る。 NL 追加で手札の sneckomod:オフクラス カード1枚につき !M! ブロックを得る。" }, "sneckomod:DiceBlock": { "NAME": "ブロックダイス", - "DESCRIPTION": " !M! - !B! ブロックを得る。" + "DESCRIPTION": "!B! ブロックを得る。 NL sneckomod:オーバーフロー : !B! ブロックをもう一度得る。" }, "sneckomod:DiceBoulder": { "NAME": "落石ダイス", - "DESCRIPTION": " !M! - !D! ダメージを与える。 NL 何度でもアップグレード出来る。" + "DESCRIPTION": "!B! ブロックを得る。 NL この戦闘中、このカードの効果が !M! 増加し、コストが !qqq! 増加する。" }, "sneckomod:DiceCrush": { "NAME": "クラッシュダイス", - "DESCRIPTION": " !M! - !D! ダメージを与える。" + "DESCRIPTION": "!D! ダメージを与える。 NL sneckomod:オーバーフロー : カードを 2 枚引く。" + }, + "sneckomod:DragonsHoard": { + "NAME": "ドラゴンの財宝", + "DESCRIPTION": "エセリアル NL 筋力 と 敏捷性 !M! を得る。", + "UPGRADE_DESCRIPTION": "筋力 と 敏捷性 !M! を得る。" + }, + "sneckomod:FourOfAKind": { + "NAME": "Four Of A Kind", + "DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "UPGRADE_DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] }, "sneckomod:GlitteringGambit": { "NAME": "キラキラのまなざし", - "DESCRIPTION": "sneckomod:蛇避け NL !M! ~ 30 *ゴールド を得る。 NL 廃棄" + "DESCRIPTION": "使用不可 NL デッキから削除することが出来ない。 NL sneckomod:ギフト : アップグレードレア + !M! ゴールド", + "UPGRADE_DESCRIPTION": "使用不可 NL エセリアル NL デッキから削除することが出来ない。 NL sneckomod:ギフト : アップグレードレア + !M! ゴールド", + "DESCRIPTION_BATTLE": "使用不可", + "UPGRADE_DESCRIPTION_BATTLE": "使用不可 NL エセリアル" + }, + "sneckomod:ImmovableObject": { + "NAME": "Immovable Object", + "DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] }, "sneckomod:IronFang": { "NAME": "アイアンファング", - "DESCRIPTION": " !M! - !B! ブロックを得る。 NL !qqq! - !D! ダメージを与える。" + "DESCRIPTION": "敵全体に !D! ダメージと 脱力 !M! を与える。" }, "sneckomod:ImprovisedAttack": { - "NAME": "即興アタック", - "DESCRIPTION": " !D! ダメージを与える。 NL ランダムで sneckomod:泥まみれ の sneckomod:オフクラス アタックを得る。" + "NAME": "Improvised Attack", + "DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] }, "sneckomod:ImprovisedGuard": { - "NAME": "即興ガード", - "DESCRIPTION": " !B! ブロックを得る。 NL ランダムで sneckomod:泥まみれ の sneckomod:オフクラス スキルを得る。" + "NAME": "Improvised Guard", + "DESCRIPTION": "This card shouldn't be encountered in a run. NL If you're reading this, you've probably encountered a bug. NL Please report this to a mod dev.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] + }, + "sneckomod:LuckyBreak": { + "NAME": "幸運のチャンス", + "DESCRIPTION": "!B! ブロックを得る。 NL 手札のコスト2以上のカード1枚につき カードを !M! 枚引く。" }, "sneckomod:Nope": { "NAME": "これじゃない", - "DESCRIPTION": "sneckomod:蛇避け NL カードを1枚 廃棄 して、ランダムな同じクラスのカードを得る。", - "UPGRADE_DESCRIPTION": "sneckomod:蛇避け NL カードを1枚 廃棄 して、ランダムな同じクラスのカードを得る。 NL それのコストを1減らす。", + "DESCRIPTION": "!B! ブロックを得る。 NL カードを1枚廃棄する。無色以外の場合、そのカードと同じ色のカードを手札に加える。", + "UPGRADE_DESCRIPTION": "!B! ブロックを得る。 NL カードを1枚廃棄する。無色以外の場合、そのカードと同じ色のカードを手札に加える。", "EXTENDED_DESCRIPTION": [ - " NL 廃棄" + "これじゃないので廃棄する。" ] }, - "sneckomod:MasterEye": { - "NAME": "マスターアイ", - "DESCRIPTION": "混乱 する。 NL 毎ターン追加で !M! 枚のカードを引く。", - "UPGRADE_DESCRIPTION": "混乱 する。 NL 毎ターン追加で !M! 枚のカードを引く。" + "sneckomod:SnakeEyes": { + "NAME": "スネークアイ", + "DESCRIPTION": "このターン、次の sneckomod:オフクラス カードは2回プレイされる。 NL sneckomod:ギフト : レアスキル", + "UPGRADE_DESCRIPTION": "このターン、次の2枚の sneckomod:オフクラス カードは2回プレイされる。 NL sneckomod:ギフト : レアスキル", + "DESCRIPTION_BATTLE": "このターン、次の sneckomod:オフクラス カードは2回プレイされる。", + "UPGRADE_DESCRIPTION_BATTLE": "このターン、次の2枚の sneckomod:オフクラス カードは2回プレイされる。" }, "sneckomod:Memorize": { - "NAME": "メモライズ", - "DESCRIPTION": "sneckomod:蛇避け NL sneckomod:抹消 NL 手札から *未識別 カードを1枚選び、それを sneckomod:識別 する。", - "UPGRADE_DESCRIPTION": "sneckomod:蛇避け NL sneckomod:抹消 NL 保留 NL 手札から *未識別 カードを1枚選び、それを sneckomod:識別 する。", + "NAME": "Memorize", + "DESCRIPTION": "sneckomod:蛇避け Fleeting NL Choose a card which started *Unidentified sneckomod:Identify it", + "UPGRADE_DESCRIPTION": "sneckomod:蛇避け Fleeting 保留 NL Choose a card which started *Unidentified sneckomod:Identify it", "EXTENDED_DESCRIPTION": [ - " を識別する。" + " to Identify", + "NOTE FOR LOC: NOT USED DO NOT TRANSLATE " ] }, + "sneckomod:MintCondition": { + "NAME": "良好品質", + "DESCRIPTION": "sneckomod:オーバーフロー : 筋力 !M! を得る。" + }, "sneckomod:MixItUp": { - "NAME": "ミックス開始!", - "DESCRIPTION": "手持ちのポーションを sneckomod:変身 させる。 NL !D! ダメージを !M! 回与える。 NL 廃棄" + "NAME": "Mix It Up!", + "DESCRIPTION": "*Transform your Potions NL !D! ダメージを与える。 !M! times NL 廃棄 ", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: NOT USED DO NOT TRANSLATE " + ] }, "sneckomod:MorePower": { - "NAME": "もっと力を!", - "DESCRIPTION": "戦闘終了後、アップグレード済みの *未識別 カードを報酬に追加する。" + "NAME": "More Power!", + "DESCRIPTION": "Obtain an additional Upgraded *Unidentified card reward at the end of combat", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: NOT USED DO NOT TRANSLATE " + ] }, "sneckomod:Mudshield": { "NAME": "マッドシールド", - "DESCRIPTION": "カード を *泥まみれ にする度に、 !M! ブロックを得る。", - "UPGRADE_DESCRIPTION": "天賦 NL カード を *泥まみれ にする度に、 !M! ブロックを得る。" + "DESCRIPTION": "手札を1枚 sneckomod:泥まみれ にする毎に !M! ブロックを得る。" + }, + "sneckomod:OverwhelmingPresence": { + "NAME": "圧倒", + "DESCRIPTION": "各ターン、初めてシャッフルした時に [E] を得て カードを !M! 枚引く。" + }, + "sneckomod:RiskySword": { + "NAME": "リスキーソード", + "DESCRIPTION": "!D! ダメージを与える。 NL sneckomod:泥まみれ になると、この戦闘中ダメージが !M! 増加する。" + }, + "sneckomod:PoisonParadise": { + "NAME": "泉", + "DESCRIPTION": "sneckomod:オーバーフロー が発動する度、ランダムな敵に sneckomod:猛毒 !M! を与える。" }, "sneckomod:PureSnecko": { "NAME": "シフト", - "DESCRIPTION": "sneckomod:蛇避け NL 手札にある全ての sneckomod:オフクラス カードを sneckomod:変身 させる。", - "UPGRADE_DESCRIPTION": "sneckomod:蛇避け NL 手札にある全ての sneckomod:オフクラス カードを sneckomod:変身 させる。 NL それらのコストを 1 減らす。" + "DESCRIPTION": "カードを !M! 枚引き、それらを sneckomod:泥まみれ にする。" }, "sneckomod:QuickBite": { "NAME": "スネークレーキ", - "DESCRIPTION": " !D! ダメージを与える。 NL !M! - 2 枚のカードを引く。 NL 手札の最もコストが高いカードを sneckomod:泥まみれ にする。" + "DESCRIPTION": " !D! ダメージを与える。 NL !M! 枚カードを引き、それらのカードを sneckomod:泥まみれ にする。", + "UPGRADE_DESCRIPTION": " !D! ダメージを与える。 NL !M! 枚カードを引き、それらのカードを sneckomod:泥まみれ にする。" }, "sneckomod:QuickMove": { "NAME": "素早い動き", - "DESCRIPTION": " !B! ブロックを得る。 NL 手札の最もコストが高いカードを sneckomod:泥まみれ にする。", - "UPGRADE_DESCRIPTION": " !B! ブロックを得る。 NL 手札の最もコストが高いカードを !M! 枚 sneckomod:泥まみれ にする。 " + "DESCRIPTION": "!B! ブロックを得る。 NL sneckomod:オーバーフロー : 敵全体に 弱体 !M! を与える。" }, "sneckomod:RainOfDice": { "NAME": "ダイスの雨", - "DESCRIPTION": "ランダムな敵に !qqq! - !D! ダメージを与える。 NL sneckomod:泥まみれ にしたこのカードを手札に戻す。" + "DESCRIPTION": "!D! ダメージを与える。 NL 手札を1枚 sneckomod:泥まみれ にし、 その後 *ダイスの雨 を手札に加える。 NL 廃棄 ", + "UPGRADE_DESCRIPTION": "!D! ダメージを与える。 NL 手札を1枚 sneckomod:泥まみれ にし、 その後 *ダイスの雨+ を手札に加える。 NL 廃棄 " }, "sneckomod:Restock": { - "NAME": "再ストック", - "DESCRIPTION": "sneckomod:蛇避け NL 手札を捨てる。 NL 5-10 枚のカードを引く。 NL 廃棄" + "NAME": "リストック", + "DESCRIPTION": "手札を捨てる。 NL カードを !M! 枚引き、それらを sneckomod:泥まみれ にする。 NL 廃棄 " }, "sneckomod:Rotation": { - "NAME": "ローテーション", - "DESCRIPTION": "sneckomod:蛇避け NL 全ての sneckomod:オフクラス カード を捨てる。 NL 同量のカードを引く。", - "UPGRADE_DESCRIPTION": "sneckomod:蛇避け NL 全ての sneckomod:オフクラス カード を捨てる。 NL 同量のカード + !M! 枚引く。" + "NAME": "Rotation", + "DESCRIPTION": "sneckomod:蛇避け NL Discard all sneckomod:オフクラス cards NL Draw that many cards NL 廃棄 ", + "UPGRADE_DESCRIPTION": "sneckomod:蛇避け NL Discard all sneckomod:オフクラス cards NL Draw that many cards plus !M! NL 廃棄 ", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: NOT USED DO NOT TRANSLATE " + ] + }, + "sneckomod:SerpentBottle": { + "NAME": "大安売り", + "DESCRIPTION": "カードを !qqq! 枚引く。 NL 手札を1枚 sneckomod:泥まみれ にする。 NL 廃棄 ", + "UPGRADE_DESCRIPTION": "カードを !qqq! 枚引く。 NL 手札を !M! 枚 sneckomod:泥まみれ にする。 NL 廃棄 " }, "sneckomod:SerpentIdol": { - "NAME": "蛇の像", - "DESCRIPTION": "sneckomod:蛇避け NL ランダムな sneckomod:オフクラス 3枚の中から1枚手札に加える。このターンそのコストは 0 NL 廃棄" + "NAME": "蛇の彫像", + "DESCRIPTION": "ランダムな !M! 枚の中から1枚の sneckomod:オフクラス カードを手札に加える。このターン、そのコストは0になる。 NL 廃棄 " }, "sneckomod:SerpentMind": { "NAME": "異邦化", - "DESCRIPTION": "sneckomod:蛇避け NL sneckomod:オフクラス カードをプレイする度に カードを 1 枚引く。", - "UPGRADE_DESCRIPTION": " sneckomod:オフクラス カードをプレイする度に カードを 1 枚引く。" + "DESCRIPTION": "エセリアル NL ターン中にプレイされたカードカラー毎に、ターン終了時 筋力 !M! を得る。 NL sneckomod:ギフト : レア", + "UPGRADE_DESCRIPTION": "ターン中にプレイされたカードカラー毎に、ターン終了時 筋力 !M! を得る。 NL sneckomod:ギフト : レア", + "DESCRIPTION_BATTLE": "ターン中にプレイされたカードカラー毎に、ターン終了時 筋力 !M! を得る。" }, - "sneckomod:SlitherStrike": { - "NAME": "ずるずるストライク", - "DESCRIPTION": " !D! ダメージを与える。 NL ターン中、 sneckomod:オフクラス カードのコストを減らす。" + "sneckomod:SlitherThrough": { + "NAME": "するするー", + "DESCRIPTION": "!D! ダメージを与える。 NL このターン、手札にある sneckomod:オフクラス カードのコストを !M! 減少させる。 NL sneckomod:ギフト : アンコモン", + "DESCRIPTION_BATTLE": "!D! ダメージを与える。 NL このターン、手札にある sneckomod:オフクラス カードのコストを !M! 減少させる。" }, "sneckomod:SnakeSap": { - "NAME": "スネークビンタ", - "DESCRIPTION": "sneckomod:蛇避け NL !qqq! - !D! ダメージを与える。 NL 1 - !M! の [E] を得る。 NL 廃棄" - }, - "sneckomod:SnekBeam": { - "NAME": "スネッコビーム", - "DESCRIPTION": "デッキ内の未識別カードの数だけ敵全体にダメージを与える。 NL 廃棄", - "UPGRADE_DESCRIPTION": "デッキ内の未識別カードの数だけ敵全体にダメージを与える。", + "NAME": "Snake Sap", + "DESCRIPTION": "sneckomod:蛇避け NL !qqq! - !D! ダメージを与える。 NL - 1 を得る。 !M! [E] NL 廃棄 ", "EXTENDED_DESCRIPTION": [ - " NL ( !D! ダメージ) NL 廃棄", - " NL ( !D! ダメージ)" + "NOTE FOR LOC: NOT USED DO NOT TRANSLATE " ] }, + "sneckomod:SnekBeam": { + "NAME": "レーザーアイズ", + "DESCRIPTION": "!D! ダメージを与える。 NL [E] を得る。" + }, "sneckomod:SnekBite": { - "NAME": "スネッコバイト", - "DESCRIPTION": " !D! ダメージを与える。 NL 手札の最もコストが高いカードを sneckomod:泥まみれ にする。", - "UPGRADE_DESCRIPTION": " !D! ダメージを与える。 NL 手札の最もコストが高いカードを !M! 枚 sneckomod:泥まみれ にする。 " + "NAME": "スネークバイト", + "DESCRIPTION": "!D! ダメージを与える。 NL 手札を1枚 sneckomod:泥まみれ にする。", + "UPGRADE_DESCRIPTION": "!D! ダメージを与える。 NL 手札を !M! 枚 sneckomod:泥まみれ にする。" }, "sneckomod:SoulCleanse": { - "NAME": "ソウルクリーン", - "DESCRIPTION": "sneckomod:蛇避け NL 手札のカードを sneckomod:泥まみれ にする。 sneckomod:泥まみれ にしたカードはコスト 3 にはならない。 NL 廃棄", - "UPGRADE_DESCRIPTION": "sneckomod:蛇避け NL 手札のカードを sneckomod:泥まみれ にする。 sneckomod:泥まみれ にしたカードはコスト 3 にはならない。" + "NAME": "Soul Cleanse", + "DESCRIPTION": "sneckomod:蛇避け NL sneckomod:泥まみれ your hand Cards sneckomod:Muddled this way cannot cost 3 NL 廃棄 ", + "UPGRADE_DESCRIPTION": "sneckomod:蛇避け NL sneckomod:泥まみれ your hand Cards sneckomod:Muddled this way cannot cost 3", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: NOT USED DO NOT TRANSLATE " + ] }, "sneckomod:SoulDraw": { "NAME": "ソウルドロー", - "DESCRIPTION": "sneckomod:蛇避け NL ランダムで !M! 枚の sneckomod:オフクラス カードを得る。 NL 廃棄", - "UPGRADE_DESCRIPTION": "sneckomod:蛇避け NL 1 - !M! 枚のカードを引く。" + "DESCRIPTION": "ランダムに sneckomod:オフクラス カードを !M! 枚得る。 NL それらに 保留 が付く。 NL 廃棄 " }, "sneckomod:SoulExchange": { - "NAME": "ソウル・エクスチェンジ", - "DESCRIPTION": "sneckomod:蛇避け NL カードを 1 枚引く。 NL カードを 1 枚選び、 手札をそのクラスのカードに sneckomod:変身 させる。", - "UPGRADE_DESCRIPTION": "sneckomod:蛇避け NL カードを !M! 枚引く。 NL カードを 1 枚選び、 手札をそのクラスのカードに sneckomod:変身 させる。", - "EXTENDED_DESCRIPTION": [ - "エクスチェンジの為に廃棄する。" - ] + "NAME": "ソウルエクスチェンジ", + "DESCRIPTION": "保留 NL 手札を sneckomod:泥まみれ にする。 NL 廃棄 " }, "sneckomod:SoulRoll": { "NAME": "ソウルロール", - "DESCRIPTION": "sneckomod:蛇避け NL 手札を sneckomod:泥まみれ にする。", - "UPGRADE_DESCRIPTION": "sneckomod:蛇避け NL 手札を sneckomod:泥まみれ にする。 NL カードを 1 枚引く。" + "DESCRIPTION": "保留 NL !B! ブロックを得る。 NL 手札を1枚 sneckomod:泥まみれ にする。 NL 廃棄 " }, "sneckomod:Strike": { "NAME": "ストライク", - "DESCRIPTION": " !D! ダメージを与える。" + "DESCRIPTION": "!D! ダメージを与える。" + }, + "sneckomod:ToothAndClaw": { + "NAME": "爪と牙", + "DESCRIPTION": "!D! ダメージを与える。 NL 手札のカラー1種毎に *ナイフ を手札に加える。 NL sneckomod:ギフト : アンコモン", + "UPGRADE_DESCRIPTION": "!D! ダメージを与える。 NL 手札のカラー1種毎に *ナイフ+ を手札に加える。 NL sneckomod:ギフト : アンコモン", + "DESCRIPTION_BATTLE": "!D! ダメージを与える。 NL 手札のカラー1種毎に *ナイフ を手札に加える。", + "UPGRADE_DESCRIPTION_BATTLE": "!D! ダメージを与える。 NL 手札のカラー1種毎に *ナイフ+ を手札に加える。" + }, + "sneckomod:TyphoonFang": { + "NAME": "暴風牙", + "DESCRIPTION": "!D! ダメージを与える。 NL sneckomod:オーバーフロー : このターン、 sneckomod:オーバーフロー が発動する度にこのカードのコピーをプレイする。" + }, + "sneckomod:Yearn": { + "NAME": "Yearn", + "DESCRIPTION": "カードを !M! 枚引く。 NL Give them 保留 NL 廃棄 ", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: NOT USED DO NOT TRANSLATE " + ] }, "sneckomod:TailWhip": { "NAME": "テイルウィップ", - "DESCRIPTION": " !D! ダメージを与える。 NL 脱力 !M! - 2 と NL 弱体 !M! - 2 を与える。" + "DESCRIPTION": "!D! ダメージを与える。 NL sneckomod:オーバーフロー : 脱力 と 弱体 !M! を与える。" }, "sneckomod:Transmogrify": { - "NAME": "変貌", - "DESCRIPTION": "手持ちのレリック2種から1つを選び、それを永久的に失う。 NL 同じレアリティのランダムなレリックを得る。 NL 廃棄", + "NAME": "Transmogrify", + "DESCRIPTION": "Choose 1 of 2 Relics to lose NL Obtain a random Relic of the same rarity NL 廃棄 ", "EXTENDED_DESCRIPTION": [ - "交換すすする レリックが無い。", - "選択したレリックは失われる", - " ", - " を捨てて 別の ", - " レリックを得る。 " + "I have no Relicsss to ssswap", + "Choose a Relic to lose", + "Lose ", + " and obtain another ", + " Relic", + "NOTE FOR LOC: NOT USED DO NOT TRANSLATE " + ] + }, + "sneckomod:ToxicPersonality": { + "NAME": "Toxic Personality", + "DESCRIPTION": "Whenever you apply a debuff to an enemy, also sneckomod:猛毒 !M! を与える。 NL sneckomod:ギフト : アンコモン+ Debuff", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: NOT USED DO NOT TRANSLATE " ] }, "sneckomod:TrashToTreasure": { "NAME": "ガラクタを宝物に", - "DESCRIPTION": "sneckomod:蛇避け NL カードを1枚廃棄する。 NL コストに等しい [E] を得る。 NL 廃棄", - "UPGRADE_DESCRIPTION": "sneckomod:蛇避け NL カードを1枚廃棄する。 NL コストに等しい [E] を得る。" + "DESCRIPTION": "!B! ブロックを得る。 NL カードを1枚廃棄し、そのカードコストに等しい [E] を得る。 NL 廃棄 ", + "UPGRADE_DESCRIPTION": "!B! ブロックを得る。 NL カードを1枚廃棄し、そのカードコストに等しい [E] を得る。" }, "sneckomod:UnendingSupply": { - "NAME": "無限サプライ", - "DESCRIPTION": "ターン開始時、ランダムな sneckomod:オフクラス カードを得る。" + "NAME": "無尽蔵の供給", + "DESCRIPTION": "各ターン開始時、ランダムな sneckomod:オフクラス カード の gremlin:エコー を手札に加える。", + "UPGRADE_DESCRIPTION": "天賦 NL 各ターン開始時、ランダムな sneckomod:オフクラス カードの gremlin:エコー を手札に加える。" }, "sneckomod:Unknown": { "NAME": "??? 基本", @@ -263,7 +369,7 @@ "UPGRADE_DESCRIPTION": "アップグレード済み NL *未識別 NL エセリアル カード" }, "sneckomod:UnknownExhaust": { - "NAME": "??? 廃棄", + "NAME": "??? 廃棄 ", "DESCRIPTION": "*未識別 NL 廃棄 カード", "UPGRADE_DESCRIPTION": "アップグレード済み NL *未識別 NL 廃棄 カード" }, @@ -325,10 +431,188 @@ "sneckomod:UnlimitedRolls": { "NAME": "無限ロール", "DESCRIPTION": "ターン開始時、 *廃棄 の付いた *ソウルロール を手札に加える。", - "UPGRADE_DESCRIPTION": "天賦 NL ターン開始時、 *廃棄 の付いた *ソウルロール を手札に加える。" + "UPGRADE_DESCRIPTION": "天賦 NL ターン開始時、 *廃棄 の付いた *ソウルロール を手札に加える。", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: NOT USED DO NOT TRANSLATE " + ] + }, + "sneckomod:Behold": { + "NAME": "見よ!", + "DESCRIPTION": "!D! ダメージを与える。 NL sneckomod:オーバーフロー : ナイフを !M! 枚手札に加える。", + "UPGRADE_DESCRIPTION": "!D! ダメージを与える。 NL sneckomod:オーバーフロー : ナイフを !M! 枚手札に加える。" + }, + "sneckomod:SaveForLater": { + "NAME": "また後で", + "DESCRIPTION": "!D! ダメージを与える。 NL このターン、 !M! 枚のカードを 保留 出来る。", + "UPGRADE_DESCRIPTION": "!D! ダメージを与える。 NL このターン、 !M! 枚のカードを 保留 出来る。" + }, + "sneckomod:PowerShot": { + "NAME": "パワーショット", + "DESCRIPTION": "!D! ダメージを与える。 NL パワーをプレイする度、このカードを捨て札から手札に戻す。" + }, + "sneckomod:LilGuardian": { + "NAME": "小さな用心棒", + "DESCRIPTION": "!B! ブロックを得る。 NL このカードが手札にある時、2コスト以上のカードをプレイした場合このカードをプレイする。" + }, + "sneckomod:CrystalBoomerang": { + "NAME": "水晶ブーメラン", + "DESCRIPTION": "捨て札からカードを1枚手札に加える。 NL それが sneckomod:オフクラス なら !B! ブロックを得る。" + }, + "sneckomod:ViperEssence": { + "NAME": "毒蛇エキス", + "DESCRIPTION": "エセリアル NL sneckomod:オフクラス NL 筋力 !M! を得る。" + }, + "sneckomod:Amass": { + "NAME": "蓄積", + "DESCRIPTION": "!B! ブロックを得る。 NL 追加で手札の [E] コスト合計に等しいブロックを得る。", + "UPGRADE_DESCRIPTION": "!B! ブロックを得る。 NL 追加で手札の [E] コスト合計の2倍に等しいブロックを得る。" + }, + "sneckomod:Medusa": { + "NAME": "メデューサ", + "DESCRIPTION": "!D! ダメージを与える。 NL sneckomod:猛毒 !M! を与える。 NL sneckomod:ギフト : コモンデバフ", + "DESCRIPTION_BATTLE": "!D! ダメージを与える。 NL sneckomod:猛毒 !M! を与える。" + }, + "sneckomod:Cower": { + "NAME": "縮み上がる", + "DESCRIPTION": "!B! ブロックを得る。 NL 手札に *隠れる を加える。 NL 廃棄 ", + "UPGRADE_DESCRIPTION": "!B! ブロックを得る。 NL 手札に *隠れる+ を加える。 NL 廃棄 " }, "sneckomod:WideSting": { "NAME": "ワイドスティング", - "DESCRIPTION": "敵全体に !M! - !D! ダメージ。 NL 手札の sneckomod:オフクラス カードを全てアップグレードする。" + "DESCRIPTION": "敵全体に !D! ダメージを与える。 NL 手札の全 sneckomod:オフクラス カードをアップグレードする。 NL sneckomod:ギフト :コモン", + "DESCRIPTION_BATTLE": "敵全体に !D! ダメージを与える。 NL 手札の全 sneckomod:オフクラス カードをアップグレードする。" + }, + "sneckomod:GildedShield": { + "NAME": "金ぴかの盾", + "DESCRIPTION": "!B! ブロックを得る。 NL このカードを sneckomod:泥まみれ にして手札に戻す。" + }, + "sneckomod:Mesmerize": { + "NAME": "魅惑", + "DESCRIPTION": "敵全体が筋力 !M! を失う。 NL 手札を1枚 sneckomod:泥まみれ にする。 NL 廃棄 " + }, + "sneckomod:Serpentscale": { + "NAME": "蛇の鱗", + "DESCRIPTION": "!D! ダメージを与える。 NL *プレートアーマー 1 を得る。 NL sneckomod:オーバーフロー : 代わりに *プレートアーマー !M! を得る。" + }, + "sneckomod:OtherworldlySlash": { + "NAME": "異次元スラッシュ", + "DESCRIPTION": "!D! ダメージを与える。 NL このターン sneckomod:オフクラス カードをプレイしていた時、もう一度 !D! ダメージを与える。 NL sneckomod:ギフト : コモン", + "DESCRIPTION_BATTLE": "!D! ダメージを与える。 NL このターン sneckomod:オフクラス カードをプレイしていた時、もう一度 !D! ダメージを与える。" + }, + "sneckomod:BeyondArmor": { + "NAME": "ビヨンドアーマー", + "DESCRIPTION": "!B! ブロックを得る。 NL 山札からランダムな sneckomod:オフクラス カードを !M! 枚手札に加える。 NL sneckomod:ギフト : コモン", + "DESCRIPTION_BATTLE": "!B! ブロックを得る。 NL 山札からランダムな sneckomod:オフクラス カードを !M! 枚手札に加える。" + }, + "sneckomod:BlunderGuard": { + "NAME": "失敗保険", + "DESCRIPTION": "コスト3以上のカードをプレイする度、 !qqq! ブロックと 筋力 !M! を得る。", + "UPGRADE_DESCRIPTION": "コスト3以上のカードをプレイする度、 !qqq! ブロックと 筋力 !M! を得る。" + }, + "sneckomod:WideAngle": { + "NAME": "ワイドアングル", + "DESCRIPTION": "保留 NL 敵全体に !D! ダメージを与える。" + }, + "sneckomod:SerpentsNest": { + "NAME": "蛇の巣窟", + "DESCRIPTION": "パワーをプレイする度、敵全体に !M! ダメージを与える。 NL sneckomod:ギフト : アンコモン パワー", + "DESCRIPTION_BATTLE": "パワーをプレイする度、敵全体に !M! ダメージを与える。" + }, + "sneckomod:Whack": { + "NAME": "ぺちんっ!", + "DESCRIPTION": " !D! ダメージを与える。 NL 手札に *ぶん殴り を加える。 NL 廃棄 ", + "UPGRADE_DESCRIPTION": " !D! ダメージを与える。 NL 手札に *ぶん殴り+ を加える。 NL 廃棄 " + }, + "sneckomod:CobraCoil": { + "NAME": "コブラコイル", + "DESCRIPTION": "!D! ダメージを与える。 NL *締め付け !M! を与える。 NL sneckomod:ギフト : レアアタック" + }, + "sneckomod:Belittle": { + "NAME": "軽視", + "DESCRIPTION": "対象が持つデバフ1種につき、HPを !M! 失わせる。 NL sneckomod:ギフト : アンコモン デバフ", + "DESCRIPTION_BATTLE": "対象が持つデバフ1種につき、HPを !M! 失わせる。" + }, + "sneckomod:Jackpot": { + "NAME": "ジャックポット", + "DESCRIPTION": "保留 NL [E] [E] を得る。 NL 廃棄 ", + "UPGRADE_DESCRIPTION": "保留 NL [E] [E] [E] を得る。 NL 廃棄 " + }, + "sneckomod:MakeshiftBlade": { + "NAME": "即席ブレード", + "DESCRIPTION": "!D! ダメージを与える。 対象がデバフを !qqq! 種以上受けていた場合、 カードを 3 枚引く。 NL sneckomod:ギフト : デバフ", + "DESCRIPTION_BATTLE": "!D! ダメージを与える。 対象がデバフを !qqq! 種以上受けていた場合、 カードを 3 枚引く。" + }, + "sneckomod:LatchOn": { + "NAME": "しっかり掴む", + "DESCRIPTION": "敵全体に !D! ダメージを与える。 NL 手札に *毒蛇エキス を加える。" + }, + "sneckomod:ComboString": { + "NAME": "コンボストリング", + "DESCRIPTION": "このターンにプレイされた sneckomod:オフクラス カード1枚につき !D! ダメージを与える。 NL sneckomod:ギフト : アンコモン", + "EXTENDED_DESCRIPTION": [ + " NL ( ", + " x 回)" + ], + "DESCRIPTION_BATTLE": "このターンにプレイされた sneckomod:オフクラス カード1枚につき !D! ダメージを与える。" + }, + "sneckomod:ThrowingCards": { + "NAME": "カードスロー", + "DESCRIPTION": "手札に X枚の *FTL を加える。 NL [E] を得る。 NL 廃棄 ", + "UPGRADE_DESCRIPTION": "手札に X枚の *FTL+ を加える。 NL [E] を得る。 NL 廃棄 " + }, + "sneckomod:RoundaboutSwing": { + "NAME": "回転スイング", + "DESCRIPTION": "!D! ダメージを与える。 NL 手札を1枚山札の一番上に置く。 NL 次のターン、 カードを !M! 枚引く。" + }, + "sneckomod:MarkedCard": { + "NAME": "目印付きカード", + "DESCRIPTION": "保留 NL 手札を1枚 sneckomod:泥まみれ にする。 NL それは常にコストが下がる。 NL 廃棄 ", + "UPGRADE_DESCRIPTION": "保留 NL 手札を !M! 枚 sneckomod:泥まみれ にする。 NL それらは常にコストが下がる。 NL 廃棄 " + }, + "sneckomod:InertBlade": { + "NAME": "不活性ブレード", + "DESCRIPTION": "!D! ダメージを与える。 NL このカードのコストが NL 1+: カードを !M! 枚引く。 NL 2+: 筋力 !M! を得る。 NL 3+: [E] を得る。", + "UPGRADE_DESCRIPTION": "!D! ダメージを与える。 NL このカードのコストが NL 1+: カードを !M! 枚引く。 NL 2+: 筋力 !M! を得る。 NL 3+: [E] [E] を得る。" + }, + "sneckomod:PerpetualSerpent": { + "NAME": "不滅の蛇", + "DESCRIPTION": "!D! ダメージを与える。 NL sneckomod:オーバーフロー : [E] [E] を得る。" + }, + "sneckomod:LastStrike": { + "NAME": "ファイナルストライク", + "DESCRIPTION": "!D! ダメージを与える。 NL この戦闘でプレイしたストライク1種毎に繰り返す。 NL sneckomod:ギフト : ストライク", + "UPGRADE_DESCRIPTION": "!D! ダメージを与える。 NL この戦闘でプレイしたストライク1種毎に繰り返す。 NL sneckomod:ギフト : ストライク", + "DESCRIPTION_BATTLE": "!D! ダメージを与える。 NL この戦闘でプレイしたストライク1種毎に繰り返す。", + "UPGRADE_DESCRIPTION_BATTLE": "!D! ダメージを与える。 NL この戦闘でプレイしたストライク1種毎に繰り返す。", + "EXTENDED_DESCRIPTION": [ + " NL ( ", + " 回追加)" + ] + }, + "sneckomod:AceOfWands": { + "NAME": "五芒星の女王", + "DESCRIPTION": "エセリアル NL 敵にデバフをかける度、 !M! ブロックを得る。 NL sneckomod:ギフト : デバフ", + "UPGRADE_DESCRIPTION": "敵にデバフをかける度、 !M! ブロックを得る。 NL sneckomod:ギフト : デバフ" + }, + "sneckomod:FlashInThePan": { + "NAME": "閃光の中で", + "DESCRIPTION": "!B! ブロックを得る。 NL 手札を捨てる。 NL 次のターン、同じ枚数のカードを引く。" + }, + "sneckomod:TrashCan": { + "NAME": "ゴミ箱", + "DESCRIPTION": "ターン開始時、 手札を1枚 廃棄 出来る。", + "UPGRADE_DESCRIPTION": "天賦 NL 手札を1枚 廃棄 出来る。" + }, + "sneckomod:Lacerate": { + "NAME": "切り傷", + "DESCRIPTION": "!D! ダメージを与える。 このターン、敵がデバフを受ける度に sneckomod:猛毒 !M! を受ける。 sneckomod:ギフト : *劇毒", + "DESCRIPTION_BATTLE": "!D! ダメージを与える。 Wこのターン、敵がデバフを受ける度に sneckomod:猛毒 !M! を受ける。" + }, + "sneckomod:SerpentineSleuth": { + "NAME": "蛇探偵", + "DESCRIPTION": "エセリアル NL パワーをプレイする度、 [E] を得る。 NL sneckomod:ギフト : レアパワー", + "UPGRADE_DESCRIPTION": "エセリアル NL パワーをプレイする度、 [E] [E] を得る。 NL sneckomod:ギフト : レアパワー", + "DESCRIPTION_BATTLE": "エセリアル NL パワーをプレイする度、 [E] を得る。", + "UPGRADE_DESCRIPTION_BATTLE": "エセリアル NL パワーをプレイする度、 [E] [E] を得る。" } -} +} \ No newline at end of file diff --git a/src/main/resources/sneckomodResources/localization/jpn/EventStrings.json b/src/main/resources/sneckomodResources/localization/jpn/EventStrings.json index bb09f1d4e..c51b01fa7 100644 --- a/src/main/resources/sneckomodResources/localization/jpn/EventStrings.json +++ b/src/main/resources/sneckomodResources/localization/jpn/EventStrings.json @@ -2,17 +2,17 @@ "sneckomod:D8": { "NAME": "神秘的な八面体", "DESCRIPTIONS": [ - "神秘的な八面体に接近した。", + "霧を超え、あなたは静かな空間に辿り着く。遺跡の中心には #g神秘的な八面体 が静かに浮かんでいた。それはゆっくりと回転し、その表面は #b~微かに輝いている~ 。 まるで、何か、 #y~原初の遺物のようだ~ NL あなたが近付きその表面に触れようとした瞬間、その八面体は #b~明るく光り~ 複雑なルーン模様が光の流れの中で明滅する。 NL あなたは地面から #r@僅かな振動@ を感じ、更に周囲の空気が #p重くなる のを感じた。 空間全体が息を飲み、あなたの行動を待っているようだ。 NL あなたは決断する…。", "レリックは爆発した。", "レリックを入手した。", "触らぬ神に祟りなし。" ], "OPTIONS": [ "[粉砕する] #r失う: #r", - " #r HP #g入手: #g5 #g未識別カード", + " #rHP #g入手: #g3枚から1枚を選びレアカードを入手。", "[取る] #g入手: #g神秘的な八面体。 #r呪い #r- #r痛み。", "[立ち去る]", - "[Locked] 必要:効果に乱数を使用するカード" + "[Locked] 必要:オーバーフローカード" ] }, "sneckomod:BackToBasics": { @@ -21,7 +21,7 @@ "創造性は常に計画性に勝る" ], "OPTIONS": [ - "[即興] #g全てのストライクと防御をランダムな未識別カードに置き換える。", + "[即興] #g全てのストライクと防御をオフクラスに変更する。", "[Locke] 必要: ストライクまたは防御。" ] }, @@ -33,7 +33,7 @@ "蛇はとてもがっかりした様子であなたを見つめた。が、最後には笑顔になりあなたの旅の無事を祈ってくれたようだ。" ], "OPTIONS": [ - "[同意する] #gランダムな #gレリックを得る。 #r呪い #r- #r困惑。", + "[同意する] #gスネッコレリックを得る。 #r呪い #r- #r困惑。", "[同意しない]", "[Leave]" ] @@ -42,11 +42,11 @@ "NAME": "不審な家", "DESCRIPTIONS": [ "あなたがシティを進んでいると、近くの民家から人間とは思えない甲高い鳴き声が聞こえてきた。どうやら、街の住民が檻に閉じ込められた小さな蛇のような生物を黙らせようとしているようだ。 NL NL 「 ~おい!~ 俺の家で何してる! @出て行け!@ 」 NL NL 檻の中の生物は驚き、檻の隅へと身を隠した。明らかにここが不満そうな様子だ。", - "「なんだこれが欲しいのか? @好きにしな!@ こんなもん俺には必要ねえ」 NL NL ~溜息~ イライラした様子で男が檻のカギを開けて中に手を入れる。その瞬間、中の大蛇が驚くべき速度で近付くと渾身の力で男の指をかみ砕いた! NL NL まずい!男が蛇に反撃をする前に、とっさにあなたは男を #r殴って 気絶させた。その生物はあなたが手を差し出すと嬉しそうに這い上がってくる。あなたは彼女を #y'クレメンタイン' と名付け、一緒に塔を進むことにした。", + "「なんだこれが欲しいのか? @好きにしろ!@ こんなもん俺には必要ねえ」 NL NL ~溜息~ イライラした様子で男が檻のカギを開けて中に手を入れる。その瞬間、中の大蛇が驚くべき速度で近付くと渾身の力で男の指をかみ砕いた! NL NL まずい!男が蛇に反撃をする前に、あなたは咄嗟に男を #r殴って 気絶させた。その生物はあなたが手を差し出すと嬉しそうに這い上がってくる。あなたは彼女を #y'クレメンタイン' と名付け、一緒に塔を進むことにした。", "蛇はとてもがっかりした様子であなたを見つめた。が、最後には笑顔になりあなたの旅の無事を祈ってくれたようだ。" ], "OPTIONS": [ - "[助ける] #g入手: #gヤングスネッコ。 #r呪い #r- #r困惑。", + "[助ける] #g入手: #gヤングスネッコ。 #r戦闘-怒ったセンチュリオン", "[立ち去る]" ] } diff --git a/src/main/resources/sneckomodResources/localization/jpn/KeywordStrings.json b/src/main/resources/sneckomodResources/localization/jpn/KeywordStrings.json index d4536d7d9..68792246c 100644 --- a/src/main/resources/sneckomodResources/localization/jpn/KeywordStrings.json +++ b/src/main/resources/sneckomodResources/localization/jpn/KeywordStrings.json @@ -7,11 +7,27 @@ ], "DESCRIPTION": "蛇避けを持つカードは #y混乱 や #y泥まみれ の影響を受けない。" }, + { + "PROPER_NAME": "Suit", + "NAMES": [ + "suit", + "suits" +], + "DESCRIPTION": "Suits refer to card's color. Token cards do not count as Suits. NOTE FOR LOC: NOT USED DO NOT TRANSLATE." + }, + { + "PROPER_NAME": "オーバーフロー", + "NAMES": [ + "Overflow", "overflow", "オーバーフロー" + ], + "DESCRIPTION": "手札が #b6 枚以上の場合に発動する効果。" + }, { "PROPER_NAME": "泥まみれ", "NAMES": [ "muddle", "muddled", + "muddles", "泥まみれ" ], "DESCRIPTION": "このターンの間、カードを泥まみれにしてコストをランダムで #b0 ~ #b3 に変化させる。" @@ -22,7 +38,15 @@ "offclass", "オフクラス" ], - "DESCRIPTION": "オフクラス カードは自分以外のキャラクターのカード。 (無色、呪い、状態異常カードを含む)" + "DESCRIPTION": "オフクラス カードは自分以外のキャラクターのカードを指す。 (無色、呪い、状態異常カードを含む)" + }, + { + "PROPER_NAME": "ギフト", + "NAMES": [ + "gift", + "ギフト" + ], + "DESCRIPTION": "このカードを取得したとき、次のカードタイプのカード報酬を得る。" }, { "PROPER_NAME": "識別", @@ -30,7 +54,15 @@ "identify", "識別" ], - "DESCRIPTION": " #y未識別 のカードを、永久にランダムな現在のカードと交換する。" + "DESCRIPTION": " #y未識別 のランダムなカードを現在のカードに確定する。" + }, + { + "PROPER_NAME": "猛毒", + "NAMES": [ + "venom", + "猛毒" + ], + "DESCRIPTION": "#y猛毒 を持つ敵は #y猛毒 以外のデバフを受けた時、HPを失う。" }, { "PROPER_NAME": "抹消", @@ -52,6 +84,6 @@ "lucky", "ラッキー" ], - "DESCRIPTION": "ランダムに値が決まるカードは可能な限り最大の値が使われるようになる。( 泥まみれ には影響しない。)" + "DESCRIPTION": "このターン、手札の枚数に関係なくオーバーフロー効果が発動する。" } ] \ No newline at end of file diff --git a/src/main/resources/sneckomodResources/localization/jpn/PotionStrings.json b/src/main/resources/sneckomodResources/localization/jpn/PotionStrings.json index 9276cb8d7..103ad265c 100644 --- a/src/main/resources/sneckomodResources/localization/jpn/PotionStrings.json +++ b/src/main/resources/sneckomodResources/localization/jpn/PotionStrings.json @@ -1,18 +1,18 @@ { "sneckomod:DiceRollPotion": { - "NAME": "可能性ポーション", + "NAME": "瓶詰のカード", "DESCRIPTIONS": [ - " #b", - "-", - " ダメージを与える。" + "戦闘中に使用すると、戦闘終了時の報酬に #b", + " 回、 #b3 枚の #yアップグレード された アンコモン #yオフクラス カードを追加する。", + " 回、 #b3 枚の #yアップグレード された アンコモン #yオフクラス カードを追加する。" ] }, "sneckomod:CheatPotion": { "NAME": "液状の運", "DESCRIPTIONS": [ - "#yラッキー を 1 ターン得る。", - "#yラッキー を #b", - " ターン得る。" + "このターン、手札枚数に関係なく 常に #yオーバーフロー の効果が発動する。", + "#b", + " ターンの間、手札枚数に関係なく 常に #yオーバーフロー の効果が発動する。" ] }, "sneckomod:MuddlingPotion": { diff --git a/src/main/resources/sneckomodResources/localization/jpn/PowerStrings.json b/src/main/resources/sneckomodResources/localization/jpn/PowerStrings.json index 9f34b8fe7..64cd2ff38 100644 --- a/src/main/resources/sneckomodResources/localization/jpn/PowerStrings.json +++ b/src/main/resources/sneckomodResources/localization/jpn/PowerStrings.json @@ -1,70 +1,195 @@ { + "sneckomod:BlunderGuardPower": { + "NAME": "ツナミ", + "DESCRIPTIONS": [ + "#yオーバーフロー が発動した時、 #b", + " #yブロック を得る。", + " #yブロック を得る。" + ] + }, "sneckomod:CheapStockPower": { - "NAME": "チープスタック", + "NAME": "チープストック", "DESCRIPTIONS": [ - "ターン開始時、手札の中で最もコストの高い #yオフクラス のカードのコストを #b1 減らす。", - "ターン開始時、手札の中で最もコストの高い #yオフクラス のカードのコストを #b1 減らす。 #b", - " 回繰り返す。" + "ターン開始時、手札の最もコストの高いカードを #y泥まみれ にする。", + "ターン開始時、手札の最もコストの高いカードを #b", + " 枚 #y泥まみれ にする。" ] }, "sneckomod:CheatPower": { "NAME": "ずるっこ", "DESCRIPTIONS": [ - "このターン、ランダムに値が決まるカードは可能な限り最大の値を使う。", + "このターン、常に #yオーバーフロー の効果が発動する。", "あと #b", - " ターンの間、ランダムに値が決まるカードは可能な限り最大の値を使う。" + " ターンの間、常に #yオーバーフロー の効果が発動する。" ] }, "sneckomod:MuddleDrawnCardsPower": { - "NAME": "泥まみれなカード", + "NAME": "泥まみれのカード", "DESCRIPTIONS": [ - "次にあなたが引くカードは #y泥まみれ にされる。", - "次にあなたが引く #b", - " 枚のカードは #y泥まみれ にされる。 (残り ", - " 枚。)" + "次に #y泥まみれ にした時、カードを1枚引く。", + "このターン、 #b", + " 回の間 #y泥まみれ にした時、カードを1枚引く。 (残り", + " )" ] }, "sneckomod:MudshieldPower": { "NAME": "マッドシールド", "DESCRIPTIONS": [ - "カードを #y泥まみれ にする度 #b", + "カードを1枚 #y泥まみれ にする度 #b", " #yブロック を得る。" ] }, - "sneckomod:SerpentMindPower": { - "NAME": "蛇心", + "sneckomod:OverwhelmingPresencePower": { + "NAME": "圧倒的な存在感", "DESCRIPTIONS": [ - "#yオフクラス カードをプレイする度にカードを #b", - " 枚引く。", + "各ターン、初めてシャッフルした時に [E] を得て カードを #b1 枚引く。", + "各ターン、初めてシャッフルした時に [E] を ", + " 得て カードを #b", " 枚引く。" ] }, + "sneckomod:SerpentsNestPower": { + "NAME": "蛇の巣窟", + "DESCRIPTIONS": [ + "#yパワー カードをプレイした時、敵全体に #b1 ダメージを与える。", + "#yパワー カードをプレイした時、敵全体に #b", + " ダメージを与える。" + ] + }, + "sneckomod:SerpentMindPower": { + "NAME": "異邦化", + "DESCRIPTIONS": [ + "ターン終了時にこのターンに使用されたカード1色毎に #b", + " #y筋力 を得る。", + " #y筋力 を得る。" + ] + }, + "sneckomod:SnakeEyesPower": { + "NAME": "スネークアイズ", + "DESCRIPTIONS": [ + "このターン、次にプレイする #yオフクラス カードは2回プレイされる。", + "あと #b", + " ターンの間、次にプレイする #yオフクラス カードは2回プレイされる。" + ] + }, "sneckomod:UnendingSupplyPower": { - "NAME": "無限サプライ", + "NAME": "無尽蔵の供給", "DESCRIPTIONS": [ - "ターン開始時、 #b", - " 枚のランダムな #yオフクラス カードを手札に加える。" + "ターン開始時、手札に #b", + "ターン開始時、手札にランダムな #yオフクラス カードの #yエコー を加える。", + " 枚のランダムな #yオフクラス カードの #yエコー を加える。" ] }, "sneckomod:UnknownUpgradedPostCombatPower": { - "NAME": "戦闘後:アップグレード済み未識別", + "NAME": "Post-Combat Upgraded Unidentified", "DESCRIPTIONS": [ - "戦闘終了後 #b", - " 枚の #yアップグレード済み #y未識別 カードを得る。", - " 枚の #yアップグレード済み #y未識別 カードを得る。" + "At the end of combat, obtain #b", + " additional #yUpgraded #yUnidentified cards.", + " additional #yUpgraded #yUnidentified card.", + "NOTE FOR LOC: NOT USED DO NOT TRANSLATE." + ] }, "sneckomod:UnlimitedRollsPower": { "NAME": "無限ロール", "DESCRIPTIONS": [ - "ターン開始時、 #yエセリアル と #y廃棄 のついた #yソウルロール+ を手札に加える。" + "ターン開始時、 #y廃棄 付の #yソウルロール+ を手札に加える。" ] - }, + }, "sneckomod:Transmogrifying": { - "NAME": "変貌", + "NAME": "Transmogrifying", + "DESCRIPTIONS": [ + " is being transformed into another ", + " relic.", + "NOTE FOR LOC: NOT USED DO NOT TRANSLATE." + ] + }, + "sneckomod:ToxicPersonalityPower": { + "NAME": "Toxic Personality", + "DESCRIPTIONS": [ + "Whenever you apply a debuff to an enemy, apply #b", + " #y猛毒.", + "NOTE FOR LOC: NOT USED DO NOT TRANSLATE." + ] + }, + "sneckomod:TyphoonPower": { + "NAME": "暴風", + "DESCRIPTIONS": [ + "このターン、 #bオーバーフロー がプレイされる度、 #y暴風牙 のコピーをプレイする。", + "このターン、 #bオーバーフロー がプレイされる度、 #y暴風牙 のコピーを #b", + " 枚プレイする。" + ] + }, + "sneckomod:TyphoonPlusPower": { + "NAME": "暴風+", + "DESCRIPTIONS": [ + "このターン、 #bオーバーフロー がプレイされる度、 #y暴風牙+ のコピーをプレイする。", + "このターン、 #bオーバーフロー がプレイされる度、 #y暴風牙+ のコピーを #b", + " 枚プレイする。" + ] + }, + "sneckomod:SerpentineSleuthPower": { + "NAME": "蛇探偵", + "DESCRIPTIONS": [ + "#yパワー カードをプレイする度、 #b", + " [E] を得る。", + " [E] を得る。" + ] + }, + "sneckomod:BigGunsStrengthPower": { + "NAME": "ビッグガン", + "DESCRIPTIONS": [ + "コスト #b3 以上 のカードをプレイする度、 #y筋力 #b", + " を得る。", + " を得る。" + ] + }, + "sneckomod:BigGunsBlockPower": { + "NAME": "失敗保険", + "DESCRIPTIONS": [ + "コスト #b3 以上 のカードをプレイする度、 #b", + " #yブロック を得る。", + " #yブロック を得る。" + ] + }, + "sneckomod:AceOfWandsPower": { + "NAME": "五芒星の女王", + "DESCRIPTIONS": [ + "敵にデバフを与える度、 #b", + " #yブロック を得る。", + " #yブロック を得る。" + ] + }, + "sneckomod:LacerateDebuff": { + "NAME": "切り傷", "DESCRIPTIONS": [ - " は別の ", - " レリックに変貌しつつある。" + "このターン、敵にデバフを与える度それらに #b", + " #y猛毒 を与える。", + " #y猛毒 を与える。" ] - } -} \ No newline at end of file + }, + "sneckomod:FountainPower": { + "NAME": "噴水", + "DESCRIPTIONS": [ + "#yオーバーフロー が発動する度、ランダムな敵に #b", + " #y猛毒 を与える。", + " #y猛毒 を与える。" + ] + }, + "sneckomod:TrashCanPower": { + "NAME": "ゴミ箱", + "DESCRIPTIONS": [ + "ターン開始時、手札を1枚 #y廃棄 出来る。", + "ターン開始時、手札を最大 #b", + " 枚 #y廃棄 出来る。" + ] + }, + + "sneckomod:VenomDebuff": { + "NAME": "猛毒", + "DESCRIPTIONS": [ + "この対象が #y猛毒以外 のデバフを受ける度、HPを #b", + " 失う。" + ] + } + } diff --git a/src/main/resources/sneckomodResources/localization/jpn/RelicStrings.json b/src/main/resources/sneckomodResources/localization/jpn/RelicStrings.json index 1b4297e86..d74cab9b2 100644 --- a/src/main/resources/sneckomodResources/localization/jpn/RelicStrings.json +++ b/src/main/resources/sneckomodResources/localization/jpn/RelicStrings.json @@ -3,14 +3,14 @@ "NAME": "スネッコソウル", "FLAVOR": "0...3...2...2...1", "DESCRIPTIONS": [ - "戦闘中、初めて #ysneckomod:オフクラス カードをプレイした時、 [E] を得てカードを1枚引く。" + "各戦闘開始時、手札に #yソウルロール を加える。" ] }, "sneckomod:SuperSneckoSoul": { "NAME": "スネッコソウルSP", "FLAVOR": "3120231321230320", "DESCRIPTIONS": [ - " [#407B93]スネッコソウル[] と置き換える。 NL ターン毎に 初めて #ysneckomod:オフクラス カードをプレイした時、 [E] を得る。" + " [#407B93]スネッコソウル[] と置き換える。 NL 戦闘開始時と、1ターン置きに #yソウルロール を手札に加える。 NL それ以外のターンは追加で1枚のカードを引き、 #y泥まみれ にする。" ] }, "sneckomod:CleanMud": { @@ -24,7 +24,7 @@ "NAME": "蛇の指輪", "FLAVOR": "読めない、読みづらい。木曜日〆切。", "DESCRIPTIONS": [ - "戦闘開始時、敵全体に #y脱力 と #y弱体 #b0-2 を与える。" + "#ysneckomod:オーバーフロー の効果を #b3 回発動する度、ランダムな敵に #y弱体 #b1と #y脱力 #b1 を与える。" ] }, "sneckomod:CrystallizedMud": { @@ -38,84 +38,82 @@ "NAME": "いかさまダイス", "FLAVOR": "チーズがたっぷり詰まってる。", "DESCRIPTIONS": [ - "ランダムで数値が決まるカードの最低値を + 1 する。" + "カードを #ysneckomod:泥まみれ にする度、 #b1 #yブロック を得る。" ] }, "sneckomod:RareBoosterPack": { "NAME": "レアブースターボックス", "FLAVOR": "とてもミントなコンディション。", "DESCRIPTIONS": [ - "入手時、各タイプの #yレア #y未識別 カードを1枚ずつ得る。" + "入手時、 #ysneckomod:オフクラス の #yレア カードをデッキに加える。" ] }, "sneckomod:SleevedAce": { "NAME": "とっておきのエース", "FLAVOR": "俺たちはみんなエースだ。", "DESCRIPTIONS": [ - "戦闘開始時、 #y保留 付きの #yピュアラック カードを手札に加える。 " + "各戦闘開始時、 #y目印付きカード を手札に加える。 " ] }, "sneckomod:UnknownEgg": { "NAME": "正体不明の卵", "FLAVOR": "何が生まれるのかって? $1000 払って確認してみてね。", "DESCRIPTIONS": [ - "休憩所での #y識別 が 行動を消費しなくなる。 NL #y未識別 カードが全て #yアップグレード された状態で手に入る。" + "デッキに #ysneckomod:オフクラス カードを追加する度に、それらを #yアップグレード する。レリック入手時、ランダムな #ysneckomod:オフクラス カードを2枚 #yアップグレード する。" ] }, "sneckomod:SuperSneckoEye": { "NAME": "スネッコアイSP", "FLAVOR": "0121012", "DESCRIPTIONS": [ - " #yスネッコアイ と置き換える。ターン開始時、2枚カードを追加で引く。戦闘開始時に 混乱 。 戦闘中初めてコスト #b3 のカードを引いた時、そのコストを #b0 にする。" + " #yスネッコアイ と置き換える。ターン開始時、カードを #b4 枚追加で引く。戦闘開始時に 混乱 する。 " ] }, "sneckomod:SneckoTalon": { "NAME": "アイドル・オブ・レトロメーション", "FLAVOR": "略してレトのアイドルと呼ばれることが多いらしい。", "DESCRIPTIONS": [ - "ターン開始時にこのターンの間、手札の中で最もコストの高いカードのコストを #b1 下げる。" + "ターン開始時、手札にある #b1 以上のコストを持つランダムなカード のコストをこのターン中 #b1 減少する。" ] }, "sneckomod:BlankCard": { "NAME": "白紙のカード", "FLAVOR": "偽装カード", "DESCRIPTIONS": [ - "戦闘開始時、デッキからランダムなカード1枚の #ygremlin:エコー をあなたの手札に加える。そのコストは #b0 になる。" + "戦闘開始時、デッキからランダムな #r呪い や #y状態異常 以外のカード1枚の #ygremlin:エコー をコスト #b0 にしてあなたの手札に加える。" ] }, "sneckomod:D8": { "NAME": "神秘的な八面体", "FLAVOR": "片方に偏っているように見える。", "DESCRIPTIONS": [ - "入手時、デッキからランダムに数値が変わるカードを1枚選択する。そのカードは常に最大値が出る。", - "選択するカードは ", + "入手時、 #ysneckomod:オーバーフロー の効果を持つカードを選択する。そのカードをプレイする度、 #b4 #yブロック を得て、 #ysneckomod:オーバーフロー の効果を発動する。", + "選択したカードは ", "いつでも ", - " プレイされた時、常に最大の数値が出る。" + " がプレイされた時、 #b4 #yブロック を得て、常に #ysneckomod:オーバーフロー の効果を発動する。" ] }, "sneckomod:BabySnecko": { "NAME": "ヤングスネッコ", "FLAVOR": "ビミョーに可愛い", "DESCRIPTIONS": [ - "ターン開始時、ランダムな敵に #b5 ダメージを与える。" + "ターン開始時、ランダムな敵に #b9 ダメージを与え、コスト0以外のランダムな手札2枚を #ysneckomod:泥まみれ にする。" ] }, "sneckomod:SneckoCommon": { "NAME": "認証シール", "FLAVOR": "俺の名はアイアンクラッド。これはスパイアで一番好きなレリックさ。 -商人の広告パンフレットより", "DESCRIPTIONS": [ - "入手時、 #b3 枚の #y未識別 #yキャラクター カード から 1枚選び、デッキに加える。 今後入手する #y未識別 カードは全てこの #yキャラクター の物になる。", - "発見されるすべての未識別キャラクターカードは ", - " カードになる。" + "入手時、 #b5 枚の アンコモン #ysneckomod:オフクラス #b1 種 の #yパワー カード の中から #b1 枚を選びデッキに加える。" ] }, "sneckomod:SneckoBoss": { "NAME": "幸運の蹄鉄", "FLAVOR": "自分の運を自分で切り開く。", "DESCRIPTIONS": [ - "入手時、 #b3 枚の #y未識別 #yキャラクター カード から 1枚選び、 それを #b5 枚 デッキに加える。今後すべての戦闘で選ばれたキャラクターのカードを追加で報酬に加える。", - "入手時に得られた #b5 #y未識別 ", - " カード。 今後すべての戦闘で追加報酬に ", + "入手時、 #b3 体の #yキャラクター から 1体を選択する。 選択した #yキャラクター の #yアップグレード された #b3 枚のアンコモンカードと、 #b2 枚のレアカードを選択し、デッキに加える。今後すべての戦闘で選択したキャラクターのカードを追加で報酬に加える。", + "入手時、アップグレードされた #b3 枚のアンコモンと #b2 枚のレアカードを選択し、デッキに加える。", + " を選択した。 今後すべての戦闘で追加報酬に ", " カードが加わる。" ] } diff --git a/src/main/resources/sneckomodResources/localization/jpn/UIStrings.json b/src/main/resources/sneckomodResources/localization/jpn/UIStrings.json index 4231405b3..d48e53119 100644 --- a/src/main/resources/sneckomodResources/localization/jpn/UIStrings.json +++ b/src/main/resources/sneckomodResources/localization/jpn/UIStrings.json @@ -44,7 +44,7 @@ "sneckomod:ChallengeMode": { "TEXT": [ "チャレンジモード-ピュアスネッコ", - "未識別はどんなクラスのカードにでもなる。スネッコ経験者にオススメです。" + "ギフトはどんなクラスのカードからでも出る。スネッコ上級者にオススメです。" ] }, "sneckomod:LockInBonfireOptions": { @@ -55,12 +55,30 @@ "未識別のカードを選択し、未識別状態を解除してデッキに加える。", "[行動消費なし] 未識別のカードを識別する。" ] + }, + "sneckomod:CommonAttackReward": { + "TEXT": [ + "デッキにオフクラスカードを追加する。。", + "カードを選択。" + ] + }, + "sneckomod:DiceRollPotionReward": { + "TEXT": [ + "デッキにアップグレードされたカードを追加する。", + "カードを選択。" + ] + }, + "sneckomod:ColorfulPowersCardReward": { + "TEXT": [ + "デッキにアップグレードされたパワーカードを追加する。", + "カードを選択。" + ] }, "sneckomod:AtGameStart": { "TEXT": [ "", " カード", - "このランで未識別のカードは ", + "ギフトに含まれるのは ", " のカード。", "選択。" ] diff --git a/src/main/resources/sneckomodResources/localization/kor/CardStrings.json b/src/main/resources/sneckomodResources/localization/kor/CardStrings.json index b03a509df..6db0abb74 100644 --- a/src/main/resources/sneckomodResources/localization/kor/CardStrings.json +++ b/src/main/resources/sneckomodResources/localization/kor/CardStrings.json @@ -1,17 +1,33 @@ { + "sneckomod:Blunderbus": { + "NAME": "어쩌다 한 탕", + "DESCRIPTION": "적 전체에게 피해를 !D! 줍니다. NL 손에 비용이 3 이상인 카드 하나당 반복합니다." + }, + "sneckomod:Tsunami": { + "NAME": "해일", + "DESCRIPTION": "sneckomod:과중 효과가 발동할 때 방어도를 !M! 얻습니다." + }, "sneckomod:CheapStock": { "NAME": "값싼 재고품", - "DESCRIPTION": "내 턴 시작 시 비용이 가장 높은 sneckomod:다른_직업 카드의 비용을 1 낮춥니다.", - "UPGRADE_DESCRIPTION": "선천성. NL 내 턴 시작 시 비용이 가장 높은 sneckomod:다른_직업 카드의 비용을 1 낮춥니다." + "DESCRIPTION": "내 턴 시작 시 손에 있는 카드 중 비용이 가장 높은 카드를 sneckomod:뒤엉키게 합니다.", + "UPGRADE_DESCRIPTION": "내 턴 시작 시 손에 있는 카드 중 비용이 가장 높은 카드를 !M! 장 sneckomod:뒤엉키게 합니다." }, "sneckomod:Cheat": { "NAME": "천운", - "DESCRIPTION": "sneckomod:스네코항체. NL 이번 턴 동안 무작위 수치 범위가 있는 카드를 사용하면 최대 수치로 사용됩니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "sneckomod:스네코항체. NL 이번 턴 동안 무작위 수치 범위가 있는 카드를 사용하면 최대 수치로 사용됩니다." + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] }, "sneckomod:DangerNoodle": { "NAME": "위험한 머리", - "DESCRIPTION": "피해를 !D! 줍니다. NL 손에 있는 sneckomod:다른_직업 카드 한 장당 피해를 !D! 주고 sneckomod:다른_직업 카드를 모두 소멸시킵니다." + "DESCRIPTION": "피해를 !D! 줍니다. NL 카드를 sneckomod:뒤엉키게 합니다. NL sneckomod:선물: 비용 3+ 카드.", + "DESCRIPTION_BATTLE": "피해를 !D! 줍니다. NL 카드를 sneckomod:뒤엉키게 합니다." + }, + "sneckomod:Deception": { + "NAME": "기만", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL *충격파를 얻습니다. NL 소멸." }, "sneckomod:Defend": { "NAME": "수비", @@ -19,316 +35,584 @@ }, "sneckomod:DefensiveFlair": { "NAME": "수비적인 솜씨", - "DESCRIPTION": "방어도를 !B! 얻습니다. 손에 있는 sneckomod:다른_직업 카드당 방어도를 !M! 증가시킵니다." + "DESCRIPTION": "방어도를 얻습니다. NL sneckomod:다른_직업 카드 한 장당 방어도가 !M! 합니다. NL sneckomod:선물: 특별 카드.", + "DESCRIPTION_BATTLE": "sneckomod:다른_직업 카드 한 장당 방어도가 !M! 합니다." }, "sneckomod:DiceBlock": { "NAME": "주사위 막기", - "DESCRIPTION": "방어도를 !M! - !B! 얻습니다." + "DESCRIPTION": "방어도를 !B! 얻습니다. NL sneckomod:과중 시 방어도를 !B! 추가로 얻습니다." }, "sneckomod:DiceBoulder": { "NAME": "주사위 바위", - "DESCRIPTION": "피해를 !M! - !D! 줍니다. NL 강화 횟수에 제한이 없습니다." + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 이번 전투에서 방어도가 !M! 증가하고 비용이 !qqq! 증가합니다." }, "sneckomod:DiceCrush": { "NAME": "주사위 으깨기", - "DESCRIPTION": "피해를 !M! - !D! 줍니다." + "DESCRIPTION": "피해를 !D! 줍니다. NL sneckomod:과중 시 카드를 2장 뽑습니다." + }, + "sneckomod:DragonsHoard": { + "NAME": "용의 보물", + "DESCRIPTION": "휘발성. NL 힘을 !M! 얻습니다. NL 민첩을 !M! 얻습니다.", + "UPGRADE_DESCRIPTION": "힘을 !M! 얻습니다. NL 민첩을 !M! 얻습니다." + }, + "sneckomod:FourOfAKind": { + "NAME": "Four Of A Kind", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] }, "sneckomod:GlitteringGambit": { "NAME": "반짝이는 도박수", - "DESCRIPTION": "sneckomod:스네코항체. NL *영혼을 !M! 에서 30까지 얻을 수 있습니다. NL 소멸." + "DESCRIPTION": "사용불가. NL 덱에서 제거할 수 없습니다. NL sneckomod:선물: 강화된 레어 카드와 골드 !M! .", + "UPGRADE_DESCRIPTION": "사용불가. 휘발성. NL 덱에서 제거할 수 없습니다. NL sneckomod:선물: 강화된 레어 카드와 골드 !M! .", + "DESCRIPTION_BATTLE": "사용불가.", + "UPGRADE_DESCRIPTION_BATTLE": "사용불가. NL 휘발성." + }, + "sneckomod:ImmovableObject": { + "NAME": "Immovable Object", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] }, "sneckomod:IronFang": { "NAME": "강철 송곳니", - "DESCRIPTION": "피해를 !qqq! - !D! 줍니다. NL 방어도를 !M! - !B! 얻습니다." + "DESCRIPTION": "적 전체에게 피해를 !D! 주고 약화를 !M! 부여합니다." }, "sneckomod:ImprovisedAttack": { "NAME": "변덕스러운 공격", - "DESCRIPTION": "피해를 !D! 줍니다. NL 무작위 sneckomod:다른_직업 공격 카드를 얻고 그 카드를 sneckomod:뒤엉키게 합니다." + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] }, "sneckomod:ImprovisedGuard": { "NAME": "변덕스러운 보호", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL 무작위 sneckomod:다른_직업 스킬 카드를 얻고 그 카드를 sneckomod:뒤엉키게 합니다." + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] + }, + "sneckomod:LuckyBreak": { + "NAME": "횡재", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 손에 있는 비용이 2 이상인 카드 한 장당 카드를 !M! 장 뽑습니다." }, "sneckomod:Nope": { "NAME": "안돼", - "DESCRIPTION": "sneckomod:스네코항체. NL 카드를 1장 소멸시킵니다. NL 그 카드와 같은 직업의 카드를 얻습니다.", - "UPGRADE_DESCRIPTION": "sneckomod:스네코항체. NL 카드를 1장 소멸시킵니다. NL 그 카드와 같은 직업의 비용이 1 낮아진 무작위 카드를 얻습니다.", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 카드를 소멸시킵니다. 소멸시킨 카드가 무색 카드가 아니라면 무작위 같은 직업 카드를 얻습니다.", + "UPGRADE_DESCRIPTION": "방어도를 !B! 얻습니다. NL 카드를 소멸시킵니다. 소멸시킨 카드가 무색 카드가 아니라면 무작위 같은 직업 카드를 얻습니다.", "EXTENDED_DESCRIPTION": [ - " 안돼로 소멸시킬 카드를 고르십시오." + "안돼로 소멸시킬 카드를 선택하십시오." ] }, - "sneckomod:MasterEye": { - "NAME": "달인의 눈", - "DESCRIPTION": "혼란 상태에 빠집니다. NL 매 턴 카드를 !M! 장 추가로 뽑습니다.", - "UPGRADE_DESCRIPTION": "혼란 상태에 빠집니다. NL 매 턴 카드를 !M! 장 추가로 뽑습니다." + "sneckomod:SnakeEyes": { + "NAME": "뱀의 눈", + "DESCRIPTION": "이번 턴에 다음으로 사용하는 sneckomod:다른_직업 카드 1장이 2번 사용됩니다. NL sneckomod:선물: 희귀 스킬 카드.", + "UPGRADE_DESCRIPTION": "이번 턴에 다음으로 사용하는 sneckomod:다른_직업 카드 2장이 2번 사용됩니다. NL sneckomod:선물: 희귀 스킬 카드.", + "DESCRIPTION_BATTLE": "이번 턴에 다음으로 사용하는 sneckomod:다른_직업 카드 1장이 2번 사용됩니다.", + "UPGRADE_DESCRIPTION_BATTLE": "이번 턴에 다음으로 사용하는 sneckomod:다른_직업 카드 2장이 2번 사용됩니다." }, "sneckomod:Memorize": { - "NAME": "기억", - "DESCRIPTION": "sneckomod:스네코항체. NL *Unknown 카드를 1장 선택합니다. 이 카드를 덱에서 영구적으로 제거합니다. NL sneckomod:영구각인.", - "UPGRADE_DESCRIPTION": "sneckomod:스네코항체. 보존. NL *Unknown 카드를 1장 선택합니다. 이 카드를 덱에서 영구적으로 제거합니다. NL sneckomod:영구각인. ", + "NAME": "Memorize", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", "EXTENDED_DESCRIPTION": [ - " 식별할 카드를 고르십시오." + " to Identify.", + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." ] }, + "sneckomod:MintCondition": { + "NAME": "양호한 상태", + "DESCRIPTION": "sneckomod:과중 시 힘을 !M! 얻습니다." + }, "sneckomod:MixItUp": { "NAME": "섞어섞어!", - "DESCRIPTION": "보유한 포션을 *변화시킵니다. NL 피해를 !D! 만큼 !M! 줍니다. NL 소멸." + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] }, "sneckomod:MorePower": { "NAME": "더 많은 힘!", - "DESCRIPTION": "전투 종료 시 강화된 *Unknown 카드 보상을 추가로 얻습니다." + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] }, "sneckomod:Mudshield": { "NAME": "진흙 방패", - "DESCRIPTION": "카드가 sneckomod:뒤엉킬 때마다 방어도를 !M! 얻습니다.", - "UPGRADE_DESCRIPTION": "선천성. NL 카드가 sneckomod:뒤엉킬 때마다 방어도를 !M! 얻습니다." + "DESCRIPTION": "sneckomod:뒤엉키게 할 때마다 방어도를 !M! 얻습니다." + }, + "sneckomod:OverwhelmingPresence": { + "NAME": "위압", + "DESCRIPTION": "매 턴 처음으로 덱이 섞이면 [E] 를 얻고 카드를 !M! 장 뽑습니다." + }, + "sneckomod:RiskySword": { + "NAME": "위험한 검", + "DESCRIPTION": "피해를 !D! 줍니다. NL sneckomod:뒤엉키게 했다면 이번 전투 동안 이 카드의 피해량이 !M! 증가합니다." + }, + "sneckomod:PoisonParadise": { + "NAME": "분수", + "DESCRIPTION": "sneckomod:과중 효과가 발동하면 무작위 적에게 sneckomod:뱀독을 !M! 부여합니다." }, "sneckomod:PureSnecko": { - "NAME": "변화무쌍", - "DESCRIPTION": "sneckomod:스네코항체. NL 손에 있는 모든 sneckomod:다른_직업 카드를 sneckomod:변화시킵니다.", - "UPGRADE_DESCRIPTION": "sneckomod:스네코항체. NL 손에 있는 모든 sneckomod:다른_직업 카드를 sneckomod:변화시킵니다. 변화된 카드의 비용을 1 낮춥니다." + "NAME": "갈아타기", + "DESCRIPTION": "카드를 !M! 뽑습니다. NL 그 카드를 sneckomod:뒤엉키게 합니다." }, "sneckomod:QuickBite": { "NAME": "뱀 갈퀴", - "DESCRIPTION": "피해를 !D! 줍니다. NL 카드를 !M! - 2 장 뽑습니다. NL 비용이 가장 높은 카드가 sneckomod:뒤엉킵니다." + "DESCRIPTION": "피해를 !D! 줍니다. NL 카드를 !M! 뽑습니다. NL 그 카드를 sneckomod:뒤엉키게 합니다.", + "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL 카드를 !M! 뽑습니다. NL 그 카드를 sneckomod:뒤엉키게 합니다." }, "sneckomod:QuickMove": { "NAME": "날랜 움직임", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL 비용이 가장 높은 카드가 1장 sneckomod:뒤엉킵니다.", - "UPGRADE_DESCRIPTION": "방어도를 !B! 얻습니다. NL 비용이 가장 높은 카드가 !M! 장 sneckomod:뒤엉킵니다." + "DESCRIPTION": "방어도를 !B! 얻습니다. NL sneckomod:과중 시 적 전체에게 취약을 !M! 부여합니다." }, "sneckomod:RainOfDice": { "NAME": "주사위 비", - "DESCRIPTION": "무작위 적에게 피해를 !qqq! - !D! 줍니다. NL 이 카드를 sneckomod:뒤엉키게 하고 가져옵니다." + "DESCRIPTION": "피해를 !D! 줍니다. NL sneckomod:뒤엉키게 했다면 *주사위 *비를 얻습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL sneckomod:뒤엉키게 했다면 *주사위 *비+를 얻습니다. NL 소멸." }, "sneckomod:Restock": { "NAME": "재보급", - "DESCRIPTION": "sneckomod:스네코항체. NL 카드를 모두 버립니다. NL 카드를 5-10 장 뽑습니다. NL 소멸." + "DESCRIPTION": "카드를 전부 버립니다. NL 카드를 !M! 장 뽑고 손에 있는 카드를 sneckomod:뒤엉키게 합니다. NL 소멸." }, "sneckomod:Rotation": { "NAME": "순환", - "DESCRIPTION": "sneckomod:스네코항체. NL 모든 sneckomod:다른_직업 카드를 버립니다. NL 카드를 버린 카드 개수만큼 뽑습니다.", - "UPGRADE_DESCRIPTION": "sneckomod:스네코항체. NL 모든 sneckomod:다른_직업 카드를 버립니다. NL 카드를 버린 카드 개수 + !M! 만큼 뽑습니다." + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] + }, + "sneckomod:SerpentBottle": { + "NAME": "할인 행사", + "DESCRIPTION": "카드를 !qqq! 장 뽑습니다. NL 카드를 sneckomod:뒤엉키게 합니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "카드를 !qqq! 장 뽑습니다. NL 카드를 !M! 장 sneckomod:뒤엉키게 합니다. NL 소멸." }, "sneckomod:SerpentIdol": { "NAME": "구렁이 우상", - "DESCRIPTION": "sneckomod:스네코항체. NL sneckomod:다른_직업 카드를 3장 중 1장을 선택해 얻습니다. NL 이번 턴 동안 비용이 0이 됩니다. NL 소멸." + "DESCRIPTION": "무작위 sneckomod:다른_직업 카드 !M! 장 중 하나를 선택해 얻습니다. 이번 턴에 그 카드의 비용은 0이 됩니다. NL 소멸." }, "sneckomod:SerpentMind": { "NAME": "외세의 형상", - "DESCRIPTION": "sneckomod:스네코항체. NL sneckomod:다른_직업 카드를 사용할 때마다 카드를 1장 뽑습니다.", - "UPGRADE_DESCRIPTION": "sneckomod:다른_직업 카드를 사용할 때마다 카드를 1장 뽑습니다." + "DESCRIPTION": "휘발성. NL 내 턴 종료 시 이번 턴에 사용한 무색, 직업 카드 종류 하나당 힘을 !M! 얻습니다. NL sneckomod:선물: 희귀 카드.", + "UPGRADE_DESCRIPTION": "내 턴 종료 시 이번 턴에 사용한 무색, 직업 카드 종류 하나당 힘을 !M! 얻습니다. NL sneckomod:선물: 희귀 카드.", + "DESCRIPTION_BATTLE": "내 턴 종료 시 이번 턴에 사용한 무색, 직업 카드 종류 하나당 힘을 !M! 얻습니다." }, - "sneckomod:SlitherStrike": { - "NAME": "미끄럼 타격", - "DESCRIPTION": "피해를 !D! 줍니다. NL 이번 턴에 손에 있는 모든 sneckomod:다른_직업 카드의 비용을 1 낮춥니다." + "sneckomod:SlitherThrough": { + "NAME": "유연한 통과", + "DESCRIPTION": "피해를 !D! 줍니다. NL 이번 턴에 sneckomod:다른_직업 카드의 비용을 !M! 장의 비용을 낯춥니다. NL sneckomod:선물: 특별 카드.", + "DESCRIPTION_BATTLE": "피해를 !D! 줍니다. NL 이번 턴에 sneckomod:다른_직업 카드의 비용을 !M! 장의 비용을 낯춥니다." }, "sneckomod:SnakeSap": { "NAME": "뱀 수액", - "DESCRIPTION": "sneckomod:스네코항체. NL 피해를 !qqq! - !D! 줍니다. NL [E] 를 1 - !M! 얻습니다. NL 소멸." - }, - "sneckomod:SnekBeam": { - "NAME": "스네코 광선", - "DESCRIPTION": "적 전체에게 덱에 있는 *Unknown 카드만큼 피해를 줍니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "적 전체에게 덱에 있는 *Unknown 카드만큼 피해를 줍니다.", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", "EXTENDED_DESCRIPTION": [ - " NL (피해를 !D! 줍니다.) NL 소멸.", - " NL (피해를 !D! 줍니다.)" + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." ] }, + "sneckomod:SnekBeam": { + "NAME": "눈빛 광선", + "DESCRIPTION": "피해를 !D! 줍니다. NL [E] 를 얻습니다." + }, "sneckomod:SnekBite": { "NAME": "스네코 물기", - "DESCRIPTION": "피해를 !D! 줍니다. NL 비용이 가장 높은 카드가 1장 sneckomod:뒤엉킵니다.", - "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL 비용이 가장 높은 카드가 !M! 장 sneckomod:뒤엉킵니다." + "DESCRIPTION": "피해를 !D! 줍니다. NL 카드를 sneckomod:뒤엉키게 합니다.", + "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL 카드를 !M! 장 sneckomod:뒤엉키게 합니다." }, "sneckomod:SoulCleanse": { "NAME": "영혼의 정화", - "DESCRIPTION": "sneckomod:스네코항체. NL 카드가 sneckomod:뒤엉킵니다. 이 카드의 효과로 sneckomod:뒤엉킨 카드의 비용은 3이 되지 않습니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "sneckomod:스네코항체. NL 카드가 sneckomod:뒤엉킵니다. 이 카드의 효과로 sneckomod:뒤엉킨 카드의 비용은 3이 되지 않습니다." + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] }, "sneckomod:SoulDraw": { "NAME": "영혼의 뽑기", - "DESCRIPTION": "sneckomod:스네코항체. NL 무작위 sneckomod:다른_직업 카드를 !M! 장 얻습니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "sneckomod:스네코항체. NL 카드를 1 - !M! 장 뽑습니다." + "DESCRIPTION": "무작위 sneckomod:다른_직업 카드를 !M! 장 얻습니다. NL 그 카드를 보존합니다. NL 소멸." }, "sneckomod:SoulExchange": { "NAME": "영혼의 교환", - "DESCRIPTION": "sneckomod:스네코항체. NL 카드를 1장 뽑고 카드를 선택합니다. 손에 있는 카드를 그 카드와 같은 직업 카드로 sneckomod:변화시킵니다.", - "UPGRADE_DESCRIPTION": "sneckomod:스네코항체. NL 카드를 !M! 장 뽑고 카드를 선택합니다. 손에 있는 카드를 그 카드와 같은 직업 카드로 sneckomod:변화시킵니다.", - "EXTENDED_DESCRIPTION": [ - "영혼 교환으로 소멸시킬 카드를 고르십시오." - ] + "DESCRIPTION": "보존. NL 카드를 전부 sneckomod:뒤엉키게 합니다. NL 소멸." }, "sneckomod:SoulRoll": { "NAME": "영혼의 도박", - "DESCRIPTION": "sneckomod:스네코항체. NL 카드가 sneckomod:뒤엉킵니다.", - "UPGRADE_DESCRIPTION": "sneckomod:스네코항체. NL 카드가 sneckomod:뒤엉킵니다. NL 카드를 1장 뽑습니다." + "DESCRIPTION": "보존. NL 방어도를 !B! 얻습니다. NL 카드를 sneckomod:뒤엉키게 합니다. NL 소멸." }, "sneckomod:Strike": { "NAME": "타격", "DESCRIPTION": "피해를 !D! 줍니다." }, + "sneckomod:ToothAndClaw": { + "NAME": "사력", + "DESCRIPTION": "피해를 !D! 줍니다. NL 이번 턴에 손에 있는 무색, 직업 카드 종류 하나당 단도 를 얻습니다. NL sneckomod:선물: 특별 카드.", + "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL 이번 턴에 손에 있는 무색, 직업 카드 종류 하나당 강화된 단도 를 얻습니다. NL sneckomod:선물: 특별 카드.", + "DESCRIPTION_BATTLE": "피해를 !D! 줍니다. NL 이번 턴에 손에 있는 무색, 직업 카드 종류 하나당 단도 를 얻습니다.", + "UPGRADE_DESCRIPTION_BATTLE": "피해를 !D! 줍니다. NL 이번 턴에 손에 있는 무색, 직업 카드 종류 하나당 강화된 단도 를 얻습니다." + }, + "sneckomod:TyphoonFang": { + "NAME": "태풍의 송곳니", + "DESCRIPTION": "피해를 !D! 줍니다. NL sneckomod:과중 시 이번 턴에 *과중 효과를 발동시킬 때마다 이 카드를 복사해 사용합니다." + }, + "sneckomod:Yearn": { + "NAME": "선망", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] + }, "sneckomod:TailWhip": { "NAME": "꼬리 채찍", - "DESCRIPTION": "피해를 !D! 줍니다. NL 약화를 !M! - 2 부여합니다. NL 취약을 !M! - 2 부여합니다." + "DESCRIPTION": "피해를 !D! 줍니다. NL sneckomod:과중 시 약화 와 취약을 !M! 부여합니다." }, "sneckomod:Transmogrify": { "NAME": "탈바꿈", - "DESCRIPTION": "유물 2개 중 하나를 선택해 잃습니다. NL 같은 등급의 무작위 유물을 얻습니다. NL 소멸.", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", "EXTENDED_DESCRIPTION": [ "바꿀 유물이이이 업섯서서.", "잃을 유물을 고르십시오.", " ", " 유물을 잃고 ", - " 유물을 얻습니다." + " 유물을 얻습니다.", + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] + }, + "sneckomod:ToxicPersonality": { + "NAME": "Toxic Personality", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." ] }, "sneckomod:TrashToTreasure": { "NAME": "쓰레기 재활용", - "DESCRIPTION": "sneckomod:스네코항체. NL 카드를 1장 소멸시킵니다. NL 그 카드의 비용만큼 [E] 를 얻습니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "sneckomod:스네코항체. NL 카드를 1장 소멸시킵니다. NL 그 카드의 비용만큼 [E] 를 얻습니다." + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 카드를 소멸시킵니다. NL 이 카드와 동일한 [E] 를 얻습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "방어도를 !B! 얻습니다. NL 카드를 소멸시킵니다. NL 이 카드와 동일한 [E] 를 얻습니다." }, "sneckomod:UnendingSupply": { "NAME": "영원한 공급", - "DESCRIPTION": "매 턴 시작 시 무작위 sneckomod:다른_직업 카드를 1장 얻습니다." - }, + "DESCRIPTION": "내 턴 시작 시 무작위 sneckomod:다른_직업 카드의 gremlin:메아리를 얻습니다.", + "UPGRADE_DESCRIPTION": "선천성. NL 내 턴 시작 시 무작위 sneckomod:다른_직업 카드의 gremlin:메아리를 얻습니다." +}, "sneckomod:Unknown": { - "NAME": "??? 시작", - "DESCRIPTION": "*Unknown gremlin:시작 카드.", - "UPGRADE_DESCRIPTION": "강화된 *Unknown gremlin:시작 카드." + "NAME": "??? Basic", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." }, "sneckomod:Unknown0Cost": { - "NAME": "??? 0 비용", - "DESCRIPTION": "*Unknown 0 비용 카드.", - "UPGRADE_DESCRIPTION": "강화된 *Unknown 0 비용 카드." + "NAME": "??? 0-Cost", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." }, "sneckomod:Unknown1Cost": { - "NAME": "??? 1 비용", - "DESCRIPTION": "*Unknown 1 비용 카드.", - "UPGRADE_DESCRIPTION": "강화된 *Unknown 1 비용 카드." + "NAME": "??? 1-Cost", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." }, "sneckomod:Unknown2Cost": { - "NAME": "??? 2 비용", - "DESCRIPTION": "*Unknown 2 비용 카드.", - "UPGRADE_DESCRIPTION": "강화된 *Unknown 2 비용 카드." + "NAME": "??? 2-Cost", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." }, "sneckomod:Unknown3Cost": { - "NAME": "??? 3 비용", - "DESCRIPTION": "*Unknown 3 비용 카드.", - "UPGRADE_DESCRIPTION": "강화된 *Unknown 3 비용 카드." + "NAME": "??? 3-Cost", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." }, "sneckomod:UnknownBlock": { - "NAME": "??? 방어도", - "DESCRIPTION": "*Unknown 방어도 카드.", - "UPGRADE_DESCRIPTION": "강화된 *Unknown 방어도 카드." + "NAME": "??? Block", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." }, "sneckomod:UnknownBoss": { - "NAME": "??? 보스", - "DESCRIPTION": "*Unknown 무색 보스 카드.", - "UPGRADE_DESCRIPTION": "강화된 *Unknown 무색 보스 카드." + "NAME": "??? Boss", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." }, "sneckomod:UnknownClass": { - "NAME": "???", - "DESCRIPTION": "*Unknown 이걸절대볼수없으니이걸보면-개발자에게문의하시오 카드.", - "UPGRADE_DESCRIPTION": "강화된 *Unknown 이걸절대볼수없으니이걸보면-개발자에게문의하시오 카드." + "NAME": "??? Class", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." }, "sneckomod:UnknownColorless": { - "NAME": "??? 무색", - "DESCRIPTION": "*Unknown 무색 카드.", - "UPGRADE_DESCRIPTION": "강화된 *Unknown 무색 카드." + "NAME": "??? Colorless", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." }, "sneckomod:UnknownCommonAttack": { - "NAME": "??? 일반 공격", - "DESCRIPTION": "*Unknown 일반 공격 카드.", - "UPGRADE_DESCRIPTION": "강화된 *Unknown 일반 공격 카드." + "NAME": "??? C Attack", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." }, "sneckomod:UnknownCommonSkill": { - "NAME": "??? 일반 스킬", - "DESCRIPTION": "*Unknown 일반 스킬 카드.", - "UPGRADE_DESCRIPTION": "강화된 *Unknown 일반 스킬 카드." + "NAME": "??? C Skill", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." }, "sneckomod:UnknownDexterity": { - "NAME": "??? 민첩", - "DESCRIPTION": "*Unknown 민첩 카드.", - "UPGRADE_DESCRIPTION": "강화된 *Unknown 민첩 카드." + "NAME": "??? Dexterity", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." }, "sneckomod:UnknownDraw": { - "NAME": "??? 뽑기", - "DESCRIPTION": "*Unknown 뽑기 카드.", - "UPGRADE_DESCRIPTION": "강화된 *Unknown 뽑기 카드." + "NAME": "??? Draw", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." }, "sneckomod:UnknownEthereal": { - "NAME": "??? 휘발성", - "DESCRIPTION": "*Unknown 휘발성 카드.", - "UPGRADE_DESCRIPTION": "강화된 *Unknown 휘발성 카드." + "NAME": "??? Ethereal", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." }, "sneckomod:UnknownExhaust": { - "NAME": "??? 소멸", - "DESCRIPTION": "*Unknown 소멸 카드.", - "UPGRADE_DESCRIPTION": "강화된 *Unknown 소멸 카드." + "NAME": "??? Exhaust", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." }, "sneckomod:UnknownRareAttack": { - "NAME": "??? 희귀 공격", - "DESCRIPTION": "*Unknown 희귀 공격 카드.", - "UPGRADE_DESCRIPTION": "강화된 *Unknown 희귀 공격 카드." + "NAME": "??? R Attack", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." }, "sneckomod:UnknownRarePower": { - "NAME": "??? 희귀 파워", - "DESCRIPTION": "*Unknown 희귀 파워 카드.", - "UPGRADE_DESCRIPTION": "강화된 *Unknown 희귀 파워 카드." + "NAME": "??? R Power", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." }, "sneckomod:UnknownRareSkill": { - "NAME": "??? 희귀 스킬", - "DESCRIPTION": "*Unknown 희귀 스킬 카드.", - "UPGRADE_DESCRIPTION": "강화된 *Unknown 희귀 스킬 카드." + "NAME": "??? R Skill", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." }, "sneckomod:UnknownStrength": { - "NAME": "??? 힘", - "DESCRIPTION": "*Unknown 힘 카드.", - "UPGRADE_DESCRIPTION": "강화된 *Unknown 힘 카드." + "NAME": "??? Strength", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." }, "sneckomod:UnknownStrike": { - "NAME": "??? 타격", - "DESCRIPTION": "*Unknown 타격 카드.", - "UPGRADE_DESCRIPTION": "강화된 *Unknown 타격 카드." + "NAME": "??? Strike", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." }, "sneckomod:UnknownUncommonAttack": { - "NAME": "??? 특별 공격", - "DESCRIPTION": "*Unknown 특별 공격 카드.", - "UPGRADE_DESCRIPTION": "강화된 *Unknown 특별 공격 카드." + "NAME": "??? U Attack", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." }, "sneckomod:UnknownUncommonPower": { - "NAME": "??? 특별 파워", - "DESCRIPTION": "*Unknown 특별 파워 카드.", - "UPGRADE_DESCRIPTION": "강화된 *Unknown 특별 파워 카드." + "NAME": "??? U Power", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." }, "sneckomod:UnknownUncommonSkill": { - "NAME": "??? 특별 스킬", - "DESCRIPTION": "*Unknown 특별 스킬 카드.", - "UPGRADE_DESCRIPTION": "강화된 *Unknown 특별 스킬 카드." + "NAME": "??? U Skill", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." }, "sneckomod:UnknownVulnerable": { - "NAME": "??? 취약", - "DESCRIPTION": "*Unknown 취약 카드.", - "UPGRADE_DESCRIPTION": "강화된 *Unknown 취약 카드." + "NAME": "??? Vulnerable", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." }, "sneckomod:UnknownWeak": { - "NAME": "??? 약화", - "DESCRIPTION": "*Unknown 약화 카드.", - "UPGRADE_DESCRIPTION": "강화된 *Unknown 약화 카드." + "NAME": "??? Weak", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." }, "sneckomod:UnknownX": { - "NAME": "??? X 비용", - "DESCRIPTION": "*Unknown X 비용 카드.", - "UPGRADE_DESCRIPTION": "강화된 *Unknown X 비용 카드." + "NAME": "??? X-Cost", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." }, "sneckomod:UnlimitedRolls": { "NAME": "무제한 도박", - "DESCRIPTION": "내 턴 시작 시 *영혼의 *도박을 1장 얻습니다. 그 카드에는 소멸 효과가 추가됩니다.", - "UPGRADE_DESCRIPTION": "선천성. NL 내 턴 시작 시 *영혼의 *도박을 1장 얻습니다. 그 카드에는 소멸 효과가 추가됩니다." + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] + }, + "sneckomod:Behold": { + "NAME": "보라!", + "DESCRIPTION": "피해를 !D! 줍니다. NL sneckomod:과중 시 단도 를 !M! 장 얻습니다.", + "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL sneckomod:과중 시 단도 를 !M! 장 얻습니다." + }, + "sneckomod:SaveForLater": { + "NAME": "만반의 대비", + "DESCRIPTION": "피해를 !D! 줍니다. NL 내 턴 종료 시 카드를 !M! 장 보존합니다.", + "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL 내 턴 종료 시 카드를 !M! 장 보존합니다." + }, + "sneckomod:PowerShot": { + "NAME": "파워 샷", + "DESCRIPTION": "피해를 !D! 줍니다. 파워 카드를 사용할 때마다 이 카드를 가져옵니다." + }, + "sneckomod:LilGuardian": { + "NAME": "작은 수호자", + "DESCRIPTION": "방어도를 !B! 얻습니다. 비용이 2 이상인 카드를 사용할 때마다 이 카드를 사용합니다." + }, + "sneckomod:CrystalBoomerang": { + "NAME": "크리스탈 부메랑", + "DESCRIPTION": "버린 카드 더미에서 카드를 가져옵니다. NL 가져온 카드가 sneckomod:다른_직업 카드라면 방어도를 !B! 얻습니다." + }, + "sneckomod:ViperEssence": { + "NAME": "독사의 정수", + "DESCRIPTION": "휘발성. NL sneckomod:다른_직업. NL 힘을 !M! 얻습니다." + }, + "sneckomod:Amass": { + "NAME": "축적", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 손에 있는 카드 비용을 모두 더한만큼 방어도를 추가로 얻습니다.", + "UPGRADE_DESCRIPTION": "방어도를 !B! 얻습니다. NL 손에 있는 카드 비용을 모두 더한만큼 방어도를 2번 추가로 얻습니다." + }, + "sneckomod:Medusa": { + "NAME": "메두사", + "DESCRIPTION": "피해를 !D! 줍니다. NL sneckomod:뱀독을 !M! 부여합니다. NL sneckomod:선물: 일반 해로운 효과 카드.", + "DESCRIPTION_BATTLE": "피해를 !D! 줍니다. NL sneckomod:뱀독을 !M! 부여합니다." + }, + "sneckomod:Cower": { + "NAME": "숙이기", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL *매복을 얻습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "방어도를 !B! 얻습니다. NL *매복+을 얻습니다. NL 소멸." }, "sneckomod:WideSting": { "NAME": "광역 찌르기", - "DESCRIPTION": "적 전체에게 피해를 !M! - !D! 줍니다. NL 손에 있는 모든 sneckomod:다른_직업 카드를 강화합니다." + "DESCRIPTION": "적 전체에게 피해를 !D! 줍니다. NL sneckomod:다른_직업 카드를 전부 강화합니다. NL sneckomod:선물: 일반 카드.", + "DESCRIPTION_BATTLE": "적 전체에게 피해를 !D! 줍니다. NL sneckomod:다른_직업 카드를 전부 강화합니다." + }, + "sneckomod:GildedShield": { + "NAME": "도금 방패", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 이 카드를 sneckomod:뒤엉키게 했다면 이 카드를 가져옵니다." + }, + "sneckomod:Mesmerize": { + "NAME": "최면", + "DESCRIPTION": "적 전체의 힘을 !M! 감소시킵니다. NL 카드를 sneckomod:뒤엉키게 합니다. NL 소멸." + }, + "sneckomod:Serpentscale": { + "NAME": "뱀비늘", + "DESCRIPTION": "피해를 !D! 줍니다. NL sneckomod:과중하지 않았다면 expansioncontent:판금 *갑옷을 1 얻습니다. NL sneckomod:과중 시 *판금 *갑옷을 !M! 얻습니다." + }, + "sneckomod:OtherworldlySlash": { + "NAME": "초인적인 베기", + "DESCRIPTION": "피해를 !D! 줍니다. NL 이번 턴에 sneckomod:다른_직업 카드를 사용했다면 피해를 !D! 추가로 줍니다. NL sneckomod:선물: 일반 카드.", + "DESCRIPTION_BATTLE": "피해를 !D! 줍니다. NL 이번 턴에 sneckomod:다른_직업 카드를 사용했다면 피해를 !D! 추가로 줍니다." + }, + "sneckomod:BeyondArmor": { + "NAME": "저편의 갑옷", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 뽑을 카드 더미에서 무작위 sneckomod:다른_직업 카드를 !M! 장 가져옵니다. NL sneckomod:선물: 일반 카드.", + "DESCRIPTION_BATTLE": "방어도를 !B! 얻습니다. NL 뽑을 카드 더미에서 무작위 sneckomod:다른_직업 카드를 !M! 장 가져옵니다." + }, + "sneckomod:BlunderGuard": { + "NAME": "어쩌다 수호", + "DESCRIPTION": "비용이 3 이상인 카드를 사용할 때마다 힘을 !M! 얻고 방어도를 !qqq! 얻습니다.", + "UPGRADE_DESCRIPTION": "비용이 3 이상인 카드를 사용할 때마다 힘을 !M! 얻고 방어도를 !qqq! 얻습니다." + }, + "sneckomod:WideAngle": { + "NAME": "광각", + "DESCRIPTION": "보존. NL 적 전체에게 피해를 !D! 줍니다." + }, + "sneckomod:SerpentsNest": { + "NAME": "뱀 둥지", + "DESCRIPTION": "파워 카드를 사용할 때마다 적 전체에게 피해를 !M! 줍니다. NL sneckomod:선물: 특별 파워 카드.", + "DESCRIPTION_BATTLE": "파워 카드를 사용할 때마다 적 전체에게 피해를 !M! 줍니다." + }, + "sneckomod:Whack": { + "NAME": "후려치기!", + "DESCRIPTION": "피해를 !D! 줍니다. NL *맹공을 얻습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL *맹공+를 얻습니다. NL 소멸." + }, + "sneckomod:CobraCoil": { + "NAME": "코브라 코일", + "DESCRIPTION": "피해를 !D! 줍니다. NL *포박을 !M! 부여합니다. NL sneckomod:선물: 희귀 공격 카드." + }, + "sneckomod:Belittle": { + "NAME": "폄하", + "DESCRIPTION": "대상이 된 적은 보유한 해로운 효과의 종류 하나당 체력을 !M! 잃습니다. NL sneckomod:선물: 특별 해로운 효과 카드.", + "DESCRIPTION_BATTLE": "대상이 된 적은 보유한 해로운 효과의 종류 하나당 체력을 !M! 잃습니다." + }, + "sneckomod:Jackpot": { + "NAME": "잭팟", + "DESCRIPTION": "보존. NL [E] [E] 를 얻습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "보존. NL [E] [E] [E] 를 얻습니다. NL 소멸." + }, + "sneckomod:MakeshiftBlade": { + "NAME": "임시변통 검", + "DESCRIPTION": "피해를 !D! 줍니다. 대상이 해로운 효과를 !M! 이상 보유하고 있다면 카드를 !qqq! 장 뽑습니다. NL sneckomod:선물: 해로운 효과 카드.", + "DESCRIPTION_BATTLE": "피해를 !D! 줍니다. 대상이 해로운 효과를 !M! 이상 보유하고 있다면 카드를 !qqq! 장 뽑습니다." + }, + "sneckomod:LatchOn": { + "NAME": "감기기", + "DESCRIPTION": "적 전체에게 피해를 !D! 줍니다. NL *독사의 *정수를 얻습니다." + }, + "sneckomod:ComboString": { + "NAME": "연줄", + "DESCRIPTION": "이번 턴에 사용한 sneckomod:다른_직업 카드 한 장당 피해를 !D! 줍니다. NL sneckomod:선물: 특별 카드.", + "EXTENDED_DESCRIPTION": [ + " NL (피해를 ", + " x 번 줍니다.)" + ], + "DESCRIPTION_BATTLE": "이번 턴에 사용한 sneckomod:다른_직업 카드 한 장당 피해를 !D! 줍니다." + }, + "sneckomod:ThrowingCards": { + "NAME": "카드 던지기", + "DESCRIPTION": "*FTL을 X장 얻습니다. NL [E] 를 얻습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "*FTL+을 X장 얻습니다. NL [E] 를 얻습니다. NL 소멸." + }, + "sneckomod:RoundaboutSwing": { + "NAME": "양립", + "DESCRIPTION": "피해를 !D! 줍니다. NL 뽑을 카드 더미 맨 위에 있는 카드를 가져옵니다. NL 다음 턴에 카드를 !M! 장 더 뽑습니다." + }, + "sneckomod:MarkedCard": { + "NAME": "표시해 둔 카드", + "DESCRIPTION": "보존. NL 카드를 sneckomod:뒤엉키게 합니다. NL 이 카드로 *뒤엉킨 카드는 항상 가장 낮은 비용으로 변경됩니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "보존. NL 카드를 !M! 장 sneckomod:뒤엉키게 합니다. NL 이 카드로 *뒤엉킨 카드는 항상 가장 낮은 비용으로 변경됩니다. NL 소멸." + }, + "sneckomod:InertBlade": { + "NAME": "접이식 칼", + "DESCRIPTION": "피해를 !D! 줍니다. NL 이 카드의 비용이 높을수록 아래 효과가 추가됩니다. NL 비용 1: 카드를 !M! 장 뽑습니다. NL 비용 2: 힘을 !M! 얻습니다. NL 비용 3: [E] 를 얻습니다.", + "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL 이 카드의 비용이 높을수록 아래 효과가 추가됩니다. NL 비용 1: 카드를 !M! 장 뽑습니다. NL 비용 2: 힘을 !M! 얻습니다. NL 비용 3: [E] [E] 를 얻습니다." + }, + "sneckomod:PerpetualSerpent": { + "NAME": "영원의 뱀", + "DESCRIPTION": "피해를 !D! 줍니다. NL sneckomod:과중 시 [E] [E] 를 얻습니다." + }, + "sneckomod:LastStrike": { + "NAME": "최후의 타격", + "DESCRIPTION": "피해를 !D! 줍니다. NL 이번 전투에서 사용한 직업의 타격 종류 한 장당 피해를 추가로 줍니다. NL sneckomod:선물: 타격.", + "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL 이번 전투에서 사용한 직업의 타격 종류 한 장당 피해를 추가로 줍니다. NL sneckomod:선물: 타격.", + "DESCRIPTION_BATTLE": "피해를 !D! 줍니다. NL 이번 전투에서 사용한 직업의 타격 종류 한 장당 피해를 추가로 줍니다.", + "UPGRADE_DESCRIPTION_BATTLE": "피해를 !D! 줍니다. NL 이번 전투에서 사용한 직업의 타격 종류 한 장당 피해를 추가로 줍니다.", + "EXTENDED_DESCRIPTION": [ + " NL (피해를 ", + " 번 줍니다.)" + ] + }, + "sneckomod:AceOfWands": { + "NAME": "펜타클의 여왕", + "DESCRIPTION": "휘발성. NL 적에게 해로운 효과를 부여할 때마다 방어도를 !M! 얻습니다. NL sneckomod:선물: 해로운 효과 카드.", + "UPGRADE_DESCRIPTION": "적에게 해로운 효과를 부여할 때마다 방어도를 !M! 얻습니다. NL sneckomod:선물: 해로운 효과 카드." + }, + "sneckomod:FlashInThePan": { + "NAME": "용두사미", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 카드를 전부 버립니다. NL 다음 턴에 이 카드로 버린 카드만큼 카드를 뽑습니다." + }, + "sneckomod:TrashCan": { + "NAME": "쓰레기통", + "DESCRIPTION": "내 턴 시작 시 카드를 소멸시킵니다.", + "UPGRADE_DESCRIPTION": "선천성. NL 내 턴 시작 시 카드를 소멸시킵니다." + }, + "sneckomod:Lacerate": { + "NAME": "갈기갈기", + "DESCRIPTION": "피해를 !D! 줍니다. 이번 턴에 대상이 된 적에게 해로운 효과를 부여할 때마다 sneckomod:뱀독을 !M! 부여합니다. sneckomod:선물: *신경독.", + "DESCRIPTION_BATTLE": "피해를 !D! 줍니다. 이번 턴에 대상이 된 적에게 해로운 효과를 부여할 때마다 sneckomod:뱀독을 !M! 부여합니다." + }, + "sneckomod:SerpentineSleuth": { + "NAME": "뱀 탐정", + "DESCRIPTION": "휘발성. NL 파워 카드를 사용할 때마다 [E] 를 얻습니다. NL sneckomod:선물: 희귀 파워 카드.", + "UPGRADE_DESCRIPTION": "휘발성. NL 파워 카드를 사용할 때마다 [E] [E] 를 얻습니다. NL sneckomod:선물: 희귀 파워 카드.", + "DESCRIPTION_BATTLE": "휘발성. NL 파워 카드를 사용할 때마다 [E] 를 얻습니다.", + "UPGRADE_DESCRIPTION_BATTLE": "휘발성. NL 파워 카드를 사용할 때마다 [E] [E] 를 얻습니다." } } diff --git a/src/main/resources/sneckomodResources/localization/kor/EventStrings.json b/src/main/resources/sneckomodResources/localization/kor/EventStrings.json index f34f96e60..0f1a06d66 100644 --- a/src/main/resources/sneckomodResources/localization/kor/EventStrings.json +++ b/src/main/resources/sneckomodResources/localization/kor/EventStrings.json @@ -9,10 +9,10 @@ ], "OPTIONS": [ "[부순다] #r체력을 #r", - " #r잃습니다. #gUnknown #g카드를 #g5장 #g얻습니다.", + " #r잃습니다. #g다른 #g직업 #g카드 #g3장 #g중 #g하나를 #g선택해 #g얻습니다.", "[가진다] #g신비한 #g8면체를 #g얻습니다. #r저주를 #r받습니다 #r- #r고통.", "[떠난다]", - "[잠김] 무작위 수치 범위가 있는 카드가 필요합니다." + "[잠김] 무작위 과중 카드가 필요합니다." ] }, "sneckomod:BackToBasics": { @@ -21,7 +21,7 @@ "창의성은 항상 계획을 능가합니다." ], "OPTIONS": [ - "[즉흥] #g모든 #g타격과 #g수비를 #g무작위 #gUnknown #g카드로 #g교체합니다.", + "[즉흥] #g모든 #g타격과 #g수비를 #g무작위 #g다른 #g직업 #g카드로 #g교체합니다.", "[잠김] 타격과 수비가 필요합니다." ] }, @@ -33,7 +33,7 @@ "뱀은 매우 실망한 표정으로 당신을 노려봤지만 이내 미소를 지으며 당신의 여행이 잘되길 빕니다." ], "OPTIONS": [ - "[동의한다] #g무작위 #g유물을 #g얻습니다. #r저주를 #r받습니다 #r- #r당혹.", + "[동의한다] #g스네코 #g유물을 #g얻습니다. #r저주를 #r받습니다 #r- #r당혹.", "[동의하지 않는다]", "[떠난다]" ] @@ -46,7 +46,7 @@ "뱀은 매우 실망한 표정으로 당신을 노려봤지만 이내 미소를 지으며 당신의 여행이 잘되길 빕니다." ], "OPTIONS": [ - "[구한다] #g어린 #g스네코를 #g얻습니다. #r저주를 #r받습니다 #r- #r당혹.", + "[구한다] #g어린 #g스네코를 #g얻습니다. #r성난 #r백부장과 #r싸웁니다.", "[떠난다]" ] } diff --git a/src/main/resources/sneckomodResources/localization/kor/KeywordStrings.json b/src/main/resources/sneckomodResources/localization/kor/KeywordStrings.json index 7130796c6..57f69e18a 100644 --- a/src/main/resources/sneckomodResources/localization/kor/KeywordStrings.json +++ b/src/main/resources/sneckomodResources/localization/kor/KeywordStrings.json @@ -10,14 +10,15 @@ { "PROPER_NAME": "뒤엉킴", "NAMES": [ + "muddle", + "muddled", + "muddles", "뒤엉킴", "뒤엉킨", "뒤엉킬", "뒤엉키게", "뒤엉키고", - "뒤엉킵니다", - "muddle", - "muddled" + "뒤엉킵니다" ], "DESCRIPTION": "카드 비용이 뒤엉켜서 이번 턴 동안 #b0 에서 #b3 까지 무작위로 변경됩니다." }, @@ -51,7 +52,7 @@ "lucky", "행운" ], - "DESCRIPTION": "무작위 수치 범위가 있는 카드를 사용하면 최대 수치로 사용됩니다. 뒤엉킴에는 적용되지 않습니다." + "DESCRIPTION": "손에 있는 카드 장수와 관계없이 과중 효과를 발동시킵니다." }, { "PROPER_NAME": "변화", @@ -60,5 +61,40 @@ "변화시킵니다" ], "DESCRIPTION": "무작위로 정해진 카드로 교체됩니다." + }, + { + "PROPER_NAME": "Suit", + "NAMES": [ + "suit", + "suits" +], + "DESCRIPTION": "Suits refer to card's color. Token cards do not count as Suits. NOTE FOR LOC: NOT USED DO NOT TRANSLATE." + }, + { + "PROPER_NAME": "과중", + "NAMES": [ + "과중", + "과중하지", + "Overflow", + "overflow" + ], + "DESCRIPTION": "손에 있는 카드가 5장 초과한다면 발동하는 효과입니다." + }, + { + "PROPER_NAME": "선물", + "NAMES": [ + "선물", + "gift" + ], + "DESCRIPTION": "설명에 적힌 카드 보상을 추가해 줍니다." + }, + { + "PROPER_NAME": "뱀독", + "NAMES": [ + "뱀독", + "뱀독을", + "venom" + ], + "DESCRIPTION": "적에게 해로운 효과를 부여할 때마다 체력을 잃게 만듭니다." } -] \ No newline at end of file +] diff --git a/src/main/resources/sneckomodResources/localization/kor/PotionStrings.json b/src/main/resources/sneckomodResources/localization/kor/PotionStrings.json index 0aedcf7d2..ce15f1735 100644 --- a/src/main/resources/sneckomodResources/localization/kor/PotionStrings.json +++ b/src/main/resources/sneckomodResources/localization/kor/PotionStrings.json @@ -1,31 +1,31 @@ { "sneckomod:DiceRollPotion": { - "NAME": "잠재력 넘치는 잠재력 포션", + "NAME": "병 속의 카드", "DESCRIPTIONS": [ - "피해를 #b", - " #b- #b", - " 줍니다." + "전투에서 사용 시 #y강화된 #y다른 #y직업 카드 #b3 중 한 장을 얻는 카드 보상을 #b", + " 개 추가로 얻을 수 있습니다.", + " 개 추가로 얻을 수 있습니다." ] }, "sneckomod:CheatPotion": { "NAME": "액체화된 운", "DESCRIPTIONS": [ - "이번 턴 동안 무작위 수치 범위가 있는 카드를 사용하면 최대 수치로 사용됩니다.", + "이번 턴에 손에 있는 카드와 관계없이 #y과중 효과가 발동됩니다.", "#b", - " 턴 동안 무작위 수치 범위가 있는 카드를 사용하면 최대 수치로 사용됩니다." + " 턴 동안 손에 있는 카드와 관계없이 #y과중 효과가 발동됩니다." ] }, "sneckomod:MuddlingPotion": { "NAME": "가시 돋친 에너지 음료", "DESCRIPTIONS": [ - "손에 있는 비용이 가장 높은 카드가 #b", - " 장 #y뒤엉킵니다. 이 효과로 #y뒤엉킨 카드의 비용은 3이 되지 않습니다." + "비용이 가장 높은 카드가 #b", + " 장 #y뒤엉킵니다. 이 효과로 #y뒤엉킨 카드의 비용은 #b3이 되지 않습니다." ] }, "sneckomod:OffclassReductionPotion": { "NAME": "외세의 음료", "DESCRIPTIONS": [ - "손에 있는 #y다른 #y직업 카드의 비용을 #b", + "#y다른 #y직업 카드의 비용을 #b", " 낮춥니다." ] } diff --git a/src/main/resources/sneckomodResources/localization/kor/PowerStrings.json b/src/main/resources/sneckomodResources/localization/kor/PowerStrings.json index fecf578e7..bbf31c13c 100644 --- a/src/main/resources/sneckomodResources/localization/kor/PowerStrings.json +++ b/src/main/resources/sneckomodResources/localization/kor/PowerStrings.json @@ -1,22 +1,30 @@ { + "sneckomod:BlunderGuardPower": { + "NAME": "해일", + "DESCRIPTIONS": [ + "#y과중 효과가 발동할 때 #y방어도를 #b", + " 얻습니다.", + " 얻습니다." + ] + }, "sneckomod:CheapStockPower": { "NAME": "값싼 재고품", "DESCRIPTIONS": [ - "내 턴 시작 시 비용이 가장 높은 #y다른 #y직업 카드의 비용을 #b1 낮춥니다.", - "내 턴 시작 시 비용이 가장 높은 #y다른 #y직업 카드 #b", - " 장의 비용을 #b1 낮춥니다." + "내 턴 시작 시 손에 있는 카드 중 비용이 가장 높은 카드를 #y뒤엉키게 합니다.", + "내 턴 시작 시 손에 있는 카드 중 비용이 가장 높은 카드를 #b", + " 장 #y뒤엉키게 합니다." ] }, "sneckomod:CheatPower": { - "NAME": "치트", + "NAME": "천운", "DESCRIPTIONS": [ - "이번 턴 동안 무작위 수치 범위가 있는 카드를 사용하면 최대 수치로 사용됩니다.", + "이번 턴에 손에 있는 카드 장수와 관계없이 #y과중 효과가 발동합니다.", "다음 #b", - " 턴 동안 무작위 수치 범위가 있는 카드를 사용하면 최대 수치로 사용됩니다." + " 턴 동안 손에 있는 카드 장수와 관계없이 #y과중 효과가 발동합니다." ] }, "sneckomod:MuddleDrawnCardsPower": { - "NAME": "뽑은 카드 뒤엉킴", + "NAME": "뽑는 카드 뒤엉킴", "DESCRIPTIONS": [ "다음으로 뽑은 카드가 #y뒤엉킵니다.", "이번 턴 동안 다음 #b", @@ -27,44 +35,160 @@ "sneckomod:MudshieldPower": { "NAME": "진흙 방패", "DESCRIPTIONS": [ - "카드가 #y뒤엉킬 때마다 다음 턴에 #y방어도를 #b", + "카드를 #y뒤엉키게 할 때마다 #y방어도를 #b", " 얻습니다." ] }, + "sneckomod:OverwhelmingPresencePower": { + "NAME": "위압", + "DESCRIPTIONS": [ + "매 턴 처음으로 덱이 섞이면 [E] 를 얻고 카드를 #b1 장 뽑습니다.", + "매 턴 처음으로 덱이 섞이면 ", + " [E] 를 얻고 카드를 #b", + " 장 뽑습니다." + ] + }, + "sneckomod:SerpentsNestPower": { + "NAME": "뱀 둥지", + "DESCRIPTIONS": [ + "#y파워 카드를 사용할 때마다 적 전체에게 피해를 #b1 줍니다.", + "#y파워 카드를 사용할 때마다 적 전체에게 피해를 #b", + " 줍니다." + ] + }, "sneckomod:SerpentMindPower": { "NAME": "외세의 형상", "DESCRIPTIONS": [ - "#y다른 #y직업 카드를 사용할 때마다 카드를 #b", - " 장 뽑습니다.", - " 장 뽑습니다." + "내 턴 종료 시 이번 턴에 사용한 무색, 직업 카드 종류 하나당 #y힘을 #b", + " 얻습니다.", + " 얻습니다." + ] + }, + "sneckomod:SnakeEyesPower": { + "NAME": "뱀의 눈", + "DESCRIPTIONS": [ + "이번 턴에 다음으로 사용하는 #y다른 #y직업 카드 #b1 장이 2번 사용됩니다.", + "이번 턴에 다음으로 사용하는 #y다른 #y직업 카드 #b", + " 장이 2번 사용됩니다." ] }, "sneckomod:UnendingSupplyPower": { "NAME": "영원한 공급", "DESCRIPTIONS": [ - "내 턴 시작 시 무작위 #y다른 #y직업 카드를 #b", + "내 턴 시작 시 무작위 #y다른 #y직업 카드의 #y메아리를 #b", + "내 턴 시작 시 무작위 #y다른 #y직업 카드의 #y메아리를 얻습니다.", " 장 얻습니다." ] }, "sneckomod:UnknownUpgradedPostCombatPower": { - "NAME": "강화된 미확인 카드 보상 추가", + "NAME": "Post-Combat Upgraded Unidentified", "DESCRIPTIONS": [ - "전투 종료 시 #y강화된 #yUnknown 카드 보상을 추가로 #b", - " 개 얻습니다.", - " 개 얻습니다." + "At the end of combat, obtain #b", + " additional #yUpgraded #yUnidentified cards.", + " additional #yUpgraded #yUnidentified card.", + "NOTE FOR LOC: NOT USED DO NOT TRANSLATE." + ] }, "sneckomod:UnlimitedRollsPower": { "NAME": "무제한 도박", "DESCRIPTIONS": [ - "내 턴 시작 시 #y영혼의 #y도박을 #b1 장 얻습니다. 그 카드에 #y소멸 효과가 추가됩니다." + "내 턴 시작 시 #y소멸하는 #y영혼의 #y도박+를 얻습니다." ] }, "sneckomod:Transmogrifying": { "NAME": "유물 변환", "DESCRIPTIONS": [ " 유물이 ", - " 유물으로 변환됐습니다." + " 유물으로 변환됐습니다.", + "NOTE FOR LOC: NOT USED DO NOT TRANSLATE." + ] + }, + "sneckomod:ToxicPersonalityPower": { + "NAME": "Toxic Personality", + "DESCRIPTIONS": [ + "Whenever you apply a debuff to an enemy, apply #b", + " #yVenom.", + "NOTE FOR LOC: NOT USED DO NOT TRANSLATE." + ] + }, + "sneckomod:TyphoonPower": { + "NAME": "태풍", + "DESCRIPTIONS": [ + "이번 턴에 #y과중 효과를 발동시킬 때마다 #y태풍의 #y송곳니를 복사해 사용합니다.", + "이번 턴에 #y과중 효과를 발동시킬 때마다 #y태풍의 #y송곳니를 #b", + " 번 복사해 사용합니다." ] - } -} + }, + "sneckomod:TyphoonPlusPower": { + "NAME": "태풍+", + "DESCRIPTIONS": [ + "이번 턴에 #y과중 효과를 발동시킬 때마다 #y태풍의 #y송곳니+를 복사해 사용합니다.", + "이번 턴에 #y과중 효과를 발동시킬 때마다 #y태풍의 #y송곳니+를 #b", + " 번 복사해 사용합니다." + ] + }, + "sneckomod:SerpentineSleuthPower": { + "NAME": "뱀 탐정", + "DESCRIPTIONS": [ + "#y파워 카드를 사용할 때마다 #b", + " [E] 를 얻습니다.", + " [E] 를 얻습니다." + ] + }, + "sneckomod:BigGunsStrengthPower": { + "NAME": "신의 한 수", + "DESCRIPTIONS": [ + "비용이 3 이상인 카드를 사용할 때마다 #y힘을 #b", + " 얻습니다.", + " 얻습니다." + ] + }, + "sneckomod:BigGunsBlockPower": { + "NAME": "어쩌다 수호", + "DESCRIPTIONS": [ + "비용이 3 이상인 카드를 사용할 때마다 #y방어도를 #b", + " 얻습니다.", + " 얻습니다." + ] + }, + "sneckomod:AceOfWandsPower": { + "NAME": "펜타클의 여왕", + "DESCRIPTIONS": [ + "적에게 해로운 효과를 부여할 때마다 #y방어도를 #b", + " 얻습니다.", + " 얻습니다." + ] + }, + "sneckomod:LacerateDebuff": { + "NAME": "갈기갈기", + "DESCRIPTIONS": [ + "이번 턴에 이 적에게 해로운 효과를 부여할 때마다 #y뱀독을 #b", + " 부여합니다.", + " 부여합니다." + ] + }, + "sneckomod:FountainPower": { + "NAME": "분수", + "DESCRIPTIONS": [ + "과중 효과가 발동하면 무작위 적에게 #y뱀독을 #b", + " 부여합니다.", + " 부여합니다." + ] + }, + "sneckomod:TrashCanPower": { + "NAME": "쓰레기통", + "DESCRIPTIONS": ["내 턴 시작 시 카드를 #y소멸시킵니다.", + "내 턴 시작 시 카드를 #b", + " 장까지 소멸시킵니다." + ] + }, + + "sneckomod:VenomDebuff": { + "NAME": "뱀독", + "DESCRIPTIONS": [ + "대상에게 #y뱀독을 제외한 해로운 효과를 부여할 때마다 대상이 체력을 #b", + " 잃습니다." + ] + } + } diff --git a/src/main/resources/sneckomodResources/localization/kor/RelicStrings.json b/src/main/resources/sneckomodResources/localization/kor/RelicStrings.json index 38d2a16ef..6250c6ac8 100644 --- a/src/main/resources/sneckomodResources/localization/kor/RelicStrings.json +++ b/src/main/resources/sneckomodResources/localization/kor/RelicStrings.json @@ -3,14 +3,14 @@ "NAME": "스네코의 영혼", "FLAVOR": "0...3...2...2...1", "DESCRIPTIONS": [ - "전투에서 처음으로 #ysneckomod:다른_직업 카드를 사용하면 [E] 를 얻고 카드를 1장 뽑습니다." + "매 전투 시작 시 #y영혼의 #y도박을 얻습니다." ] }, "sneckomod:SuperSneckoSoul": { "NAME": "강력한 스네코의 영혼", "FLAVOR": "3120231321230320", "DESCRIPTIONS": [ - "[#407B93]스네코의 영혼[] 과 교체합니다. NL 매 턴 처음으로 #ysneckomod:다른_직업 카드를 사용하면 [E] 를 얻습니다." + "[#407B93]스네코의 [#407B93]영혼과[] 교체합니다. NL 매 턴 #y영혼의 #y도박을 얻습니다. NL 처음 턴이 지나고 매 턴 카드를 1장 더 뽑고 그 카드를 #ysneckomod:뒤엉키게 합니다." ] }, "sneckomod:CleanMud": { @@ -24,7 +24,7 @@ "NAME": "스네코 반지", "FLAVOR": "목요일까지 해독하고 판독해야 하는데 어렵습니다.", "DESCRIPTIONS": [ - "적 전체에게 #y약화와 #y취약을 #b0-2 부여한 채로 전투를 시작합니다." + "#ysneckomod:초과 효과가 발동한 카드를 3장 사용할 때마다 무작위 적에게 #y약화와 #y취약을 #b1 부여합니다." ] }, "sneckomod:CrystallizedMud": { @@ -38,84 +38,82 @@ "NAME": "사기꾼 주사위", "FLAVOR": "속임수로 가득 차 있습니다.", "DESCRIPTIONS": [ - "무작위 수치 범위가 있는 카드의 최소 수치를 #b1 증가시킵니다." + "카드를 #ysneckomod:뒤엉키게 할 때마다 #y방어도를 #b1 얻습니다." ] }, "sneckomod:RareBoosterPack": { "NAME": "희귀 카드 상자", "FLAVOR": "새것이나 다름없습니다.", "DESCRIPTIONS": [ - "획득 시 #yUnknown 공격, 스킬, 파워 #y희귀 카드를 얻습니다." + "획득 시 희귀 #ysneckomod:다른_직업 카드를 얻습니다." ] }, "sneckomod:SleevedAce": { "NAME": "소매 속 에이스", "FLAVOR": "우리는 모두 에이스입니다.", "DESCRIPTIONS": [ - "매 전투 시작 시 #y천운을 얻습니다. 그 카드에는 #y보존 효과가 추가됩니다." + "매 전투 시작 시 #y표시해 #y둔 #y카드를 얻습니다." ] }, "sneckomod:UnknownEgg": { "NAME": "Unknown 알", "FLAVOR": "무엇이 태어날까요? 1000 골드를 내고 확인하세요.", "DESCRIPTIONS": [ - "#y식별이 자유행동이 됩니다. NL #yUnknown 카드를 얻을 때마다 그 카드를 #y강화합니다." + "덱에 #ysneckomod:다른_직업 카드를 추가할 때마다 그 카드를 #y강화합니다. NL 획득 시 무작위 #ysneckomod:다른_직업 카드를 2장 #y강화합니다." ] }, "sneckomod:SuperSneckoEye": { "NAME": "초강력 스네코의 눈", "FLAVOR": "0121012", "DESCRIPTIONS": [ - "#y스네코의 #y눈과 교체합니다. 내 턴 시작 시 추가로 카드를 #b2 장 뽑습니다. 모든 전투를 #y혼란 상태로 시작합니다. 매 전투에서 처음으로 비용이 #b3 인 카드를 뽑으면 그 카드의 비용을 #b0 으로 낮춥니다." + "#y스네코의 #y눈과 교체합니다. 내 턴 시작 시 카드를 #b4 장 더 뽑습니다. 모든 전투를 #y혼란 상태로 시작합니다." ] }, "sneckomod:SneckoTalon": { "NAME": "레트로메이션의 우상", "FLAVOR": "줄여서 레토의 우상이라고 불립니다.", "DESCRIPTIONS": [ - "내 턴 시작 시 이번 턴에만 손에 있는 비용이 가장 높은 카드의 비용을 #b1 낮춥니다." + "내 턴 시작 시 이번 턴에만 손에 있는 비용이 #b1 이상인 카드의 비용을 #b1 낮춥니다." ] }, "sneckomod:BlankCard": { "NAME": "비어있는 카드", "FLAVOR": "흉내쟁이 카드입니다.", "DESCRIPTIONS": [ - "매 전투 시작 시 덱에서 무작위로 선택된 카드의 #ygremlin:메아리를 얻습니다. 그 카드의 비용은 #b0 이 됩니다." + "매 전투 시작 시 덱에서 무작위로 선택된 카드의 #ygremlin:메아리를 얻습니다. 선택될 때 #y저주와 #y상태이상은 선택되지 않습니다. 그 카드의 비용은 #b0 이 됩니다." ] }, "sneckomod:D8": { "NAME": "신비한 8면체", "FLAVOR": "한쪽으로 무게가 몰려있는 것 같습니다.", "DESCRIPTIONS": [ - "획득 시 덱에 무작위 수치 범위가 있는 카드를 1장 고릅니다. 그 카드는 항상 최대 수치로 사용됩니다.", + "획득 시 #ysneckomod:과중 카드를 선택합니다. 그 카드를 사용하면 #y방어도를 #b4 추가로 얻고 손에 있는 카드 장수와 관계없이 #y과중 효과가 발동합니다.", "카드를 선택하세요: ", "", - " 카드를 사용할 때마다 항상 최대 수치로 사용됩니다." + " 카드를 사용하면 손에 있는 카드 장수와 관계없이 항상 #y과중 효과가 발동합니다." ] }, "sneckomod:BabySnecko": { "NAME": "어린 스네코", "FLAVOR": "혼란스러울 정도로 사랑스럽습니다.", "DESCRIPTIONS": [ - "내 턴 시작 시 무작위 적에게 피해를 #b5 줍니다." + "내 턴 시작 시 무작위 적에게 피해를 #b9 주고 무작위 카드를 2장 #ysneckomod:뒤엉키게 합니다. 비용이 #b0, #bX 인 카드, #y사용불가 카드는 이 효과로 #y뒤엉키지 않습니다." ] }, "sneckomod:SneckoCommon": { "NAME": "승인 봉인", "FLAVOR": "아이언클래드다. 이건 첨탑에서 내가 가장 좋아하는 유물이지. -상인의 광고 팸플릿", "DESCRIPTIONS": [ - "획득 시 #yUnknown #y캐릭터 카드를 #b3 장 중 #b1 장 선택해 덱에 추가합니다. 앞으로 #yUnknown #y캐릭터 카드는 선택한 캐릭터의 카드로만 나옵니다.", - "앞으로 Unknown 캐릭터 카드는 ", - "의 카드로만 나옵니다." + "획득 시 특별 #ysneckomod:다른_직업 파워 카드 #b5 장 중 #b1 장을 선택해 얻습니다." ] }, "sneckomod:SneckoBoss": { "NAME": "행운의 편자", "FLAVOR": "행운은 스스로 쟁취하는 것입니다.", "DESCRIPTIONS": [ - "획득 시 #yUnknown #y캐릭터 카드를 #b3 장 중 #b1 장 고릅니다. 그 카드를 5장 복사해 덱에 추가합니다. 모든 전투에서 고른 캐릭터 카드 보상을 추가로 얻을 수 있습니다.", - "획득 시 #yUnknown ", - " 카드를 #b5 장 얻습니다. 모든 전투에서 ", + "획득 시 #y캐릭터 카드 #b3 종류 중 #b1 가지 고릅니다. 고른 #y캐릭터 카드의 #y강화된 특별 카드를 #b3 장, 희귀 카드를 #b2 장 선택해 덱에 추가합니다. 모든 전투에서 고른 캐릭터 카드 보상을 추가로 얻을 수 있습니다.", + "획득 시 ", + "의 #y강화된 특별 카드를 #b3 장, 희귀 카드를 #b2 장 얻습니다. 모든 전투에서 ", " 카드 보상을 추가로 얻을 수 있습니다." ] } diff --git a/src/main/resources/sneckomodResources/localization/kor/UIStrings.json b/src/main/resources/sneckomodResources/localization/kor/UIStrings.json index 9591456eb..0060a16b7 100644 --- a/src/main/resources/sneckomodResources/localization/kor/UIStrings.json +++ b/src/main/resources/sneckomodResources/localization/kor/UIStrings.json @@ -44,7 +44,7 @@ "sneckomod:ChallengeMode": { "TEXT": [ "도전 모드 - 태초의 스네코", - "Unknown 카드가 모든 직업을 포함한 카드가 됩니다. 스네코 전문가라면 추천합니다." + "모든 직업 카드에 선물을 얻을 수 있습니다. 스네코 전문가라면 추천합니다." ] }, "sneckomod:LockInBonfireOptions": { @@ -56,12 +56,30 @@ "[자유 행동] Unknown 카드를 영구적인 카드로 고정합니다." ] }, + "sneckomod:CommonAttackReward": { + "TEXT": [ + "덱에 다른 직업 카드를 추가", + "카드를 선택하십시오." + ] + }, + "sneckomod:DiceRollPotionReward": { + "TEXT": [ + "덱에 강화된 카드를 추가", + "카드를 선택하십시오." + ] + }, + "sneckomod:ColorfulPowersCardReward": { + "TEXT": [ + "덱에 강화된 파워 카드를 추가.", + "카드를 선택하십시오." + ] + }, "sneckomod:AtGameStart": { "TEXT": [ "", " 카드", - "이번 도전에서 Unknown 카드는 ", - "의 카드로 등장하게 됩니다.", + "이번 도전에서 ", + "의 카드에 선물이 추가됩니다.", "선택하십시오." ] } diff --git a/src/main/resources/sneckomodResources/localization/rus/CardStrings.json b/src/main/resources/sneckomodResources/localization/rus/CardStrings.json index df8afd085..ee65e8a50 100644 --- a/src/main/resources/sneckomodResources/localization/rus/CardStrings.json +++ b/src/main/resources/sneckomodResources/localization/rus/CardStrings.json @@ -1,17 +1,33 @@ { + "sneckomod:Blunderbus": { + "NAME": "Мушкетон", + "DESCRIPTION": "Наносит !D! урона ВСЕМ врагам. NL Наносит урон ещё раз за каждую карту в руке стоимостью 3 и более." + }, + "sneckomod:Tsunami": { + "NAME": "Цунами", + "DESCRIPTION": "Даёт !M! Защиты, когда активируется sneckomod:Перебор." + }, "sneckomod:CheapStock": { "NAME": "Дешёвые акции", - "DESCRIPTION": "Снижает стоимость самой дорогой sneckomod:Внеклассовой карты в руке на 1 в начале каждого вашего хода.", - "UPGRADE_DESCRIPTION": "Начальная. NL Снижает стоимость самой дорогой sneckomod:Внеклассовой карты в руке на 1 в начале каждого вашего хода." + "DESCRIPTION": "sneckomod:Спутывает самую дорогую карту в руке в начале каждого вашего хода.", + "UPGRADE_DESCRIPTION": "{@@}sneckomod:Спутывает !M! сам{!M!|@=ых|&11,&12,&13,&14=ых|&1=ую|&2,&3,&4=ые} дорог{!M!|@=их|&11,&12,&13,&14=их|&1=ую|&2,&3,&4=ие} карт{!M!|@=|&11,&12,&13,&14=|&1=у|&2,&3,&4=ы} в руке в начале каждого вашего хода." }, "sneckomod:Cheat": { "NAME": "Чистая удача", - "DESCRIPTION": "sneckomod:Анти-змекко. NL Даёт sneckomod:Везение до конца хода. NL Сжигается.", - "UPGRADE_DESCRIPTION": "sneckomod:Анти-змекко. NL Даёт sneckomod:Везение до конца хода." + "DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода.", + "UPGRADE_DESCRIPTION": "Эта карта не была должна встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] }, "sneckomod:DangerNoodle": { "NAME": "Опасная змейка", - "DESCRIPTION": "Наносит !D! урона. NL Повторяет за каждую sneckomod:Внеклассовую карту в руке и Сжигает их." + "DESCRIPTION": "Наносит !D! урона. NL sneckomod:Спутывает карту в руке. NL sneckomod:Дарит карту стоимостью 3 и более.", + "DESCRIPTION_BATTLE": "Наносит !D! урона. NL sneckomod:Спутывает карту в руке." + }, + "sneckomod:Deception": { + "NAME": "Обман", + "DESCRIPTION": "Даёт !B! Защиты. NL Добавляет в руку *Силовую *волну. NL Сжигается." }, "sneckomod:Defend": { "NAME": "Оборона", @@ -19,316 +35,583 @@ }, "sneckomod:DefensiveFlair": { "NAME": "Защитное чутьё", - "DESCRIPTION": "Даёт !B! Защиты и доп. !M! Защиты за каждую sneckomod:Внеклассовую карту в руке." + "DESCRIPTION": "Даёт !B! Защиты и доп. !M! Защиты за каждую sneckomod:Внеклассовую карту в руке. NL sneckomod:Дарит необычную карту.", + "DESCRIPTION_BATTLE": "Даёт !B! Защиты и доп. !M! Защиты за каждую sneckomod:Внеклассовую карту в руке." }, "sneckomod:DiceBlock": { - "NAME": "Блок костями", - "DESCRIPTION": "Даёт !M! - !B! Защиты." + "NAME": "Блок щитом", + "DESCRIPTION": "Даёт !B! Защиты. NL sneckomod:Перебор - Даёт !B! Защиты ещё раз." }, "sneckomod:DiceBoulder": { "NAME": "Кость-валун", - "DESCRIPTION": "Наносит !M! - !D! урона. NL Может быть улучшена любое кол-во раз." + "DESCRIPTION": "Даёт !B! Защиты. NL Повышает свою Защиту на !M! и стоимость на !qqq! в этом бою." }, "sneckomod:DiceCrush": { - "NAME": "Раздавить костью", - "DESCRIPTION": "Наносит !M! - !D! урона." + "NAME": "Раздавить костями", + "DESCRIPTION": "Наносит !D! урона. NL sneckomod:Перебор - вы берёте 2 карты." + }, + "sneckomod:DragonsHoard": { + "NAME": "Сокровище дракона", + "DESCRIPTION": "Эфирная. NL Даёт !M! Силы. NL Даёт !M! Ловкости.", + "UPGRADE_DESCRIPTION": "Даёт !M! Силы. NL Даёт !M! Ловкости." + }, + "sneckomod:FourOfAKind": { + "NAME": "Four Of A Kind", + "DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода.", + "UPGRADE_DESCRIPTION": "Эта карта не была должна встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] }, "sneckomod:GlitteringGambit": { "NAME": "Блестящий гамбит", - "DESCRIPTION": "sneckomod:Анти-змекко. NL Даёт !M! - 30 *золота. NL Сжигается." + "DESCRIPTION": "Неиграбельная. NL Не может быть удалена из колоды. sneckomod:Дарит улучшенную редкую карту и !M! золота.", + "UPGRADE_DESCRIPTION": "Неиграбельная. Эфирная. NL Не может быть удалена из колоды. sneckomod:Дарит улучшенную редкую карту и !M! золота.", + "DESCRIPTION_BATTLE": "Неиграбельная.", + "UPGRADE_DESCRIPTION_BATTLE": "Неиграбельная. NL Эфирная." + }, + "sneckomod:ImmovableObject": { + "NAME": "Immovable Object", + "DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] }, "sneckomod:IronFang": { "NAME": "Железный клык", - "DESCRIPTION": "Даёт !M! - !B! Защиты. NL Наносит !qqq! - !D! урона." + "DESCRIPTION": "Наносит !D! урона и накладывает !M! Слабости на ВСЕХ врагов." }, "sneckomod:ImprovisedAttack": { "NAME": "Импровизированная атака", - "DESCRIPTION": "Наносит !D! урона. NL Добавляет в руку случ. sneckomod:Внеклассовую Атаку и sneckomod:Спутывает её." + "DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] }, "sneckomod:ImprovisedGuard": { "NAME": "Импровизированная оборона", - "DESCRIPTION": "Даёт !B! Защиты. NL Добавляет в руку случ. sneckomod:Внеклассовый Навык и sneckomod:Спутывает его." + "DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] + }, + "sneckomod:LuckyBreak": { + "NAME": "Счастливый случай", + "DESCRIPTION": "Даёт !B! Защиты. NL Вы берёте карту за каждую карту в руке стоимостью 2 и более." }, "sneckomod:Nope": { "NAME": "Не-а", - "DESCRIPTION": "sneckomod:Анти-змекко. NL Сжигает карту и добавляет в руку случ. карту того же класса.", - "UPGRADE_DESCRIPTION": "sneckomod:Анти-змекко. NL Сжигает карту и добавляет в руку случ. карту того же класса. NL Она стоит на 1 меньше.", + "DESCRIPTION": "Даёт !B! Защиты. NL Сжигает карту в руке и добавляет в руку случ. карту того же цвета.", + "UPGRADE_DESCRIPTION": "Даёт !B! Защиты. NL Сжигает карту в руке и добавляет в руку случ. карту того же цвета.", "EXTENDED_DESCRIPTION": [ - ", чтобы сжечь и добавить в руку случ. карту того же класса." + ", которую хотите сжечь для Не-а." ] }, - "sneckomod:MasterEye": { + "sneckomod:SnakeEyes": { "NAME": "Мастер-глаз", - "DESCRIPTION": "Даёт Замешательство. NL Вы берёте !M! доп. карту в начале каждого вашего хода.", - "UPGRADE_DESCRIPTION": "Даёт Замешательство. NL Вы берёте !M! доп. карты в начале каждого вашего хода." + "DESCRIPTION": "В этом ходу, след. 1 sneckomod:Внеклассовая карта разыгрывается дважды. NL sneckomod:Дарит редкий навык.", + "UPGRADE_DESCRIPTION": "В этом ходу, след. 2 sneckomod:Внеклассовые карты разыгрываются дважды. NL sneckomod:Дарит редкий навык.", + "DESCRIPTION_BATTLE": "В этом ходу, след. sneckomod:Внеклассовая карта разыгрывается дважды.", + "UPGRADE_DESCRIPTION_BATTLE": "В этом ходу, след. 2 sneckomod:Внеклассовые карты разыгрываются дважды." }, "sneckomod:Memorize": { "NAME": "Заучить", - "DESCRIPTION": "sneckomod:Анти-змекко. Мимолётная. NL Выберите *Неопределённую карту в руке, которая есть у вас в колоде, и sneckomod:Опознайте её.", - "UPGRADE_DESCRIPTION": "sneckomod:Анти-змекко. Мимолётная. Оставляется. NL Выберите *Неопределённую карту в руке, которая есть у вас в колоде, и sneckomod:Опознайте её.", + "DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода.", + "UPGRADE_DESCRIPTION": "Эта карта не была должна встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода.", "EXTENDED_DESCRIPTION": [ - ", чтобы Опознать её." + ", чтобы Опознать её.", + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." ] }, + "sneckomod:MintCondition": { + "NAME": "Отличный сохран", + "DESCRIPTION": "sneckomod:Перебор - даёт !M! Силы." + }, "sneckomod:MixItUp": { "NAME": "Вперемешку!", - "DESCRIPTION": "*Преобразует ваши зелья. NL Наносит !D! урона !M! раза. NL Сжигается." + "DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] }, "sneckomod:MorePower": { "NAME": "Больше силы!", - "DESCRIPTION": "Вы получите Улучшенную *Неопределённую карту в награду, в конце боя." + "DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] }, "sneckomod:Mudshield": { "NAME": "Щитоспут", - "DESCRIPTION": "Даёт !M! Защиты, когда вы sneckomod:Спутываете карту.", - "UPGRADE_DESCRIPTION": "Начальная. NL Даёт !M! Защиты, когда вы sneckomod:Спутываете карту." + "DESCRIPTION": "Даёт !M! Защиты, когда вы sneckomod:Спутываете карту." + }, + "sneckomod:OverwhelmingPresence": { + "NAME": "Подавляющий", + "DESCRIPTION": "Вы получаете [E] и берёте карту при первой перетасовке колоды в ходу." + }, + "sneckomod:RiskySword": { + "NAME": "Рискованный Меч", + "DESCRIPTION": "Наносит !D! урона. NL Урон, наносимый этой картой, повышается на !M! в этом бою, когда sneckomod:Спутывается." + }, + "sneckomod:PoisonParadise": { + "NAME": "Фонтан", + "DESCRIPTION": "Накладывает !M! sneckomod:Токсина на случ. врага, когда активируется sneckomod:Перебор." }, "sneckomod:PureSnecko": { "NAME": "Заменить", - "DESCRIPTION": "sneckomod:Анти-змекко. NL Преобразует все sneckomod:Внеклассовые карты в руке.", - "UPGRADE_DESCRIPTION": "sneckomod:Анти-змекко. NL Преобразует все sneckomod:Внеклассовые карты в руке. NL Они стоят на 1 меньше." + "DESCRIPTION": "{@@}Вы берёте !M! карт{!M!|@=|&11,&12,&13,&14=|&1=у|&2,&3,&4=ы} и sneckomod:Спутываете их." }, "sneckomod:QuickBite": { - "NAME": "Змеиное царапание", - "DESCRIPTION": "Наносит !D! урона. NL Вы берёте !M! - 2 карты. NL sneckomod:Спутывает самую дорогую карту в руке." + "NAME": "Змеиные царапки", + "DESCRIPTION": "Наносит !D! урона. NL sneckomod:Спутывает самую дорогую карту в руке." }, "sneckomod:QuickMove": { "NAME": "Резкое движение", - "DESCRIPTION": "Даёт !B! Защиты. NL sneckomod:Спутывает самую дорогую карту в руке.", - "UPGRADE_DESCRIPTION": "Даёт !B! Защиты. NL sneckomod:Спутывает !M! самых дорогих карты в руке." + "DESCRIPTION": "Даёт !B! Защиты. NL sneckomod:Перебор - накладывает !M! Уязвимости на ВСЕХ врагов." }, "sneckomod:RainOfDice": { "NAME": "Дождь из костей", - "DESCRIPTION": "Наносит !qqq! - !D! урона случ. врагу. NL sneckomod:Спутывает себя и возвращается в руку." + "DESCRIPTION": "Наносит !D! урона. NL sneckomod:Спутывает карту в руке. NL Добавляет в руку *Дождь *из *костей. NL Сжигается.", + "UPGRADE_DESCRIPTION": "Наносит !D! урона. NL sneckomod:Спутывает карту в руке. NL Добавляет в руку *Дождь *из *костей+. NL Сжигается." }, "sneckomod:Restock": { "NAME": "Пополнить", - "DESCRIPTION": "sneckomod:Анти-змекко. NL Вы сбрасываете все карты в руке, затем берёте 5 - 10 карт. NL Сжигается." + "DESCRIPTION": "{@@}Вы сбрасываете все карты. NL Вы берёте !M! карт{!M!|@=|&11,&12,&13,&14=|&1=у|&2,&3,&4=ы} и sneckomod:Спутываете их. NL Сжигается." }, "sneckomod:Rotation": { "NAME": "Вращение", - "DESCRIPTION": "sneckomod:Анти-змекко. NL Вы сбрасываете все sneckomod:Внеклассовые карты в руке и берёте столько же.", - "UPGRADE_DESCRIPTION": "sneckomod:Анти-змекко. NL Вы сбрасываете все sneckomod:Внеклассовые карты в руке и берёте на !M! карту больше." + "DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода.", + "UPGRADE_DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] + }, + "sneckomod:SerpentBottle": { + "NAME": "Распродажа", + "DESCRIPTION": "{@@}Вы берёте !qqq! карт{!qqq!|@=|&11,&12,&13,&14=|&1=у|&2,&3,&4=ы}. NL sneckomod:Спутывает карту в руке. NL Сжигается.", + "UPGRADE_DESCRIPTION": "{@@}Вы берёте !qqq! карт{!qqq!|@=|&11,&12,&13,&14=|&1=у|&2,&3,&4=ы}. NL sneckomod:Спутывает !M! карт{!M!|@=|&11,&12,&13,&14=|&1=у|&2,&3,&4=ы} в руке. NL Сжигается." }, "sneckomod:SerpentIdol": { "NAME": "Змеиный идол", - "DESCRIPTION": "sneckomod:Анти-змекко. NL Выберите 1 из 3 случ. sneckomod:Внеклассовых карт и добавьте её в руку. Она стоит 0 в этом ходу. NL Сжигается." + "DESCRIPTION": "Выберите 1 из !M! случ. sneckomod:Внеклассовых карт и добавьте её в руку. Она стоит 0 в этом ходу. NL Сжигается." }, "sneckomod:SerpentMind": { "NAME": "Экзотический облик", - "DESCRIPTION": "sneckomod:Анти-змекко. NL Вы берёте 1 карту, когда разыгрываете sneckomod:Внеклассовую карту.", - "UPGRADE_DESCRIPTION": "Вы берёте 1 карту, когда разыгрываете sneckomod:Внеклассовую карту." + "DESCRIPTION": "Эфирная. Даёт !M! Силы за каждую разыгранную карту уникального цвета в конце каждого вашего хода. NL sneckomod:Дарит редкую карту.", + "UPGRADE_DESCRIPTION": "Даёт !M! Силы за каждую разыгранную карту уникального цвета в конце каждого вашего хода. NL sneckomod:Дарит редкую карту.", + "DESCRIPTION_BATTLE": "Даёт !M! Силы за каждую разыгранную карту уникального цвета в конце каждого вашего хода." }, - "sneckomod:SlitherStrike": { + "sneckomod:SlitherThrough": { "NAME": "Скользящий удар", - "DESCRIPTION": "Наносит !D! урона. NL Снижает стоимость всех sneckomod:Внеклассовых карт в руке на 1 до конца хода." + "DESCRIPTION": "Наносит !D! урона. NL Снижает стоимость всех sneckomod:Внеклассовых карт в руке на !M! до конца хода. NL sneckomod:Дарит необычную карту.", + "DESCRIPTION_BATTLE": "Наносит !D! урона. NL Снижает стоимость всех sneckomod:Внеклассовых карт в руке на !M! до конца хода." }, "sneckomod:SnakeSap": { "NAME": "Змеиное иссушение", - "DESCRIPTION": "sneckomod:Анти-змекко. NL Наносит !qqq! - !D! урона. NL Даёт 1 - !M! [E] . NL Сжигается." + "DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] }, "sneckomod:SnekBeam": { "NAME": "Змекко-луч", - "DESCRIPTION": "Наносит урон ВСЕМ врагам, равный кол-ву *Неопределённых карт в колоде. NL Сжигается.", - "UPGRADE_DESCRIPTION": "Наносит урон ВСЕМ врагам, равный кол-ву *Неопределённых карт в колоде.", - "EXTENDED_DESCRIPTION": [ - " NL (Наносит !D! урона.) NL Сжигается.", - " NL (Наносит !D! урона.)" - ] + "DESCRIPTION": "Наносит !D! урона. NL Даёт [E] ." }, "sneckomod:SnekBite": { "NAME": "Укус змекко", - "DESCRIPTION": "Наносит !D! урона. NL sneckomod:Спутывает самую дорогую карту в руке.", - "UPGRADE_DESCRIPTION": "Наносит !D! урона. NL sneckomod:Спутывает самую дорогую карту в руке." + "DESCRIPTION": "Наносит !D! урона. NL sneckomod:Спутывает карту в руке.", + "UPGRADE_DESCRIPTION": "{@@}Наносит !D! урона. NL sneckomod:Спутывает !M! карт{!M!|@=|&11,&12,&13,&14=|&1=у|&2,&3,&4=ы} в руке." }, "sneckomod:SoulCleanse": { "NAME": "Очищение души", - "DESCRIPTION": "sneckomod:Анти-змекко. NL sneckomod:Спутывает все карты в руке. Они будут стоить не больше 2. NL Сжигается.", - "UPGRADE_DESCRIPTION": "sneckomod:Анти-змекко. NL sneckomod:Спутывает все карты в руке. Они будут стоить не больше 2." + "DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода.", + "UPGRADE_DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] }, "sneckomod:SoulDraw": { "NAME": "Добор души", - "DESCRIPTION": "sneckomod:Анти-змекко. NL Добавляет в руку !M! случ. sneckomod:Внеклассовые карты. NL Сжигается.", - "UPGRADE_DESCRIPTION": "sneckomod:Анти-змекко. NL Вы берёте 1 - !M! карты." + "DESCRIPTION": "{@@}Добавляет в руку !M! случ. sneckomod:Внеклассов{!M!|@=ых|&11,&12,&13,&14=ых|&1=ую|&2,&3,&4=ые} карт{!M!|@=|&11,&12,&13,&14=|&1=у|&2,&3,&4=ы}, они champ:Оставляются. NL Сжигается." }, "sneckomod:SoulExchange": { "NAME": "Обмен души", - "DESCRIPTION": "sneckomod:Анти-змекко. NL Вы берёте карту. NL Выберите карту и Преобразуйте все карты в руке, в её класс.", - "UPGRADE_DESCRIPTION": "sneckomod:Анти-змекко. NL Вы берёте !M! карты. NL Выберите карту и Преобразуйте все карты в руке, в её класс.", - "EXTENDED_DESCRIPTION": [ - ", чтобы сжечь для Обмена души." - ] + "DESCRIPTION": "Оставляется. NL sneckomod:Спутывает все карты в руке. NL Сжигается." }, "sneckomod:SoulRoll": { "NAME": "Переброс души", - "DESCRIPTION": "sneckomod:Анти-змекко. NL sneckomod:Спутывает все карты в руке.", - "UPGRADE_DESCRIPTION": "sneckomod:Анти-змекко. NL sneckomod:Спутывает все карты в руке. NL Вы берёте 1 карту." + "DESCRIPTION": "Оставляется. NL Даёт !B! Защиты. NL sneckomod:Спутывает карту в руке. NL Сжигается." }, "sneckomod:Strike": { "NAME": "Удар", "DESCRIPTION": "Наносит !D! урона." }, + "sneckomod:ToothAndClaw": { + "NAME": "Зуб и коготь", + "DESCRIPTION": "Наносит !D! урона. NL Добавляет в руку Заточку за каждую карту уникального цвета в руке. NL sneckomod:Дарит необычную карту.", + "UPGRADE_DESCRIPTION": "Наносит !D! урона. NL Добавляет в руку *Заточку+ за каждую карту уникального цвета в руке. NL sneckomod:Дарит необычную карту.", + "DESCRIPTION_BATTLE": "Наносит !D! урона. NL Добавляет в руку Заточку за каждую карту уникального цвета в руке.", + "UPGRADE_DESCRIPTION_BATTLE": "Наносит !D! урона. NL Добавляет в руку *Заточку+ за каждую карту уникального цвета в руке." + }, + "sneckomod:TyphoonFang": { + "NAME": "Клык тайфуна", + "DESCRIPTION": "Наносит !D! урона. NL sneckomod:Перебор - Разыгрывает свою копию, когда срабатывает sneckomod:Перебор, до конца хода." + }, + "sneckomod:Yearn": { + "NAME": "Yearn", + "DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] + }, "sneckomod:TailWhip": { "NAME": "Хлестнуть хвостом", - "DESCRIPTION": "Наносит !D! урона. NL Накладывает !M! - 2 Слабости. Накладывает !M! - 2 Уязвимости." + "DESCRIPTION": "Наносит !D! урона. NL sneckomod:Перебор - накладывает !M! Слабости и Уязвимости." }, "sneckomod:Transmogrify": { "NAME": "Превращение", - "DESCRIPTION": "Выберите и удалите 1 из 2 Реликвий. NL Даёт случ. Реликвию той же редкости. NL Сжигается.", + "DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода.", "EXTENDED_DESCRIPTION": [ "У меня нет реликвий на сссмену.", "Выберите Реликвию, которую хотите удалить.", "Удалите «", "» и получите другую ", - " реликвию." + " реликвию.", + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] + }, + "sneckomod:ToxicPersonality": { + "NAME": "Toxic Personality", + "DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." ] }, "sneckomod:TrashToTreasure": { - "NAME": "Из мусора в сокровище", - "DESCRIPTION": "sneckomod:Анти-змекко. NL Вы сжигаете карту. NL Даёт [E] , равную её стоимости. NL Сжигается.", - "UPGRADE_DESCRIPTION": "sneckomod:Анти-змекко. NL Вы сжигаете карту. NL Даёт [E] , равную её стоимости." + "NAME": "Из хлама в золото", + "DESCRIPTION": "Даёт !B! Защиты. NL Сжигает выбранную карту. NL Даёт [E] , равную её цене. NL Сжигается.", + "UPGRADE_DESCRIPTION": "Даёт !B! Защиты. NL Сжигает выбранную карту. NL Даёт [E] , равную её цене." }, "sneckomod:UnendingSupply": { - "NAME": "Нескончаемые запасы", - "DESCRIPTION": "Добавляет в руку sneckomod:Внеклассовую карту, в начале каждого вашего хода." + "NAME": "Огромные запасы", + "DESCRIPTION": "Добавляет в руку gremlin:Эхо случ. sneckomod:Внеклассовой карты в начале каждого вашего хода.", + "UPGRADE_DESCRIPTION": "Начальная. NL Добавляет в руку gremlin:Эхо случ. sneckomod:Внеклассовой карты в начале каждого вашего хода." }, "sneckomod:Unknown": { "NAME": "??? Стартовая", - "DESCRIPTION": "*Неопределённая Стартовая карта.", - "UPGRADE_DESCRIPTION": "Улучшенная *Неопределённая Стартовая карта." + "DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода.", + "UPGRADE_DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода." }, "sneckomod:Unknown0Cost": { "NAME": "??? стоимостью 0", - "DESCRIPTION": "*Неопределённая карта со стоимостью 0.", - "UPGRADE_DESCRIPTION": "Улучшенная *Неопределённая карта со стоимостью 0." + "DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода.", + "UPGRADE_DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода." }, "sneckomod:Unknown1Cost": { "NAME": "??? стоимостью 1", - "DESCRIPTION": "*Неопределённая карта со стоимостью 1.", - "UPGRADE_DESCRIPTION": "Улучшенная *Неопределённая карта со стоимостью 1." + "DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода.", + "UPGRADE_DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода." }, "sneckomod:Unknown2Cost": { "NAME": "??? стоимостью 2", - "DESCRIPTION": "*Неопределённая карта со стоимостью 2.", - "UPGRADE_DESCRIPTION": "Улучшенная *Неопределённая карта со стоимостью 2." + "DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода.", + "UPGRADE_DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода." }, "sneckomod:Unknown3Cost": { "NAME": "??? стоимостью 3", - "DESCRIPTION": "*Неопределённая карта со стоимостью 3.", - "UPGRADE_DESCRIPTION": "Улучшенная *Неопределённая карта со стоимостью 3." + "DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода.", + "UPGRADE_DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода." }, "sneckomod:UnknownBlock": { "NAME": "??? Защита", - "DESCRIPTION": "*Неопределённая карта Защиты.", - "UPGRADE_DESCRIPTION": "Улучшенная *Неопределённая карта Защиты." + "DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода.", + "UPGRADE_DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода." }, "sneckomod:UnknownBoss": { "NAME": "??? Босса", - "DESCRIPTION": "*Неопределённая Бесцветная карта Босса.", - "UPGRADE_DESCRIPTION": "Улучшенная *Неопределённая карта Босса." + "DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода.", + "UPGRADE_DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода." }, "sneckomod:UnknownClass": { "NAME": "??? Класса", - "DESCRIPTION": "*Неопределённая ВыНикогдаНеДолжныБылиЭтоУвидеть-СообщитеРазработчику карта.", - "UPGRADE_DESCRIPTION": "Улучшенная *Неопределённая ВыНикогдаНеДолжныБылиЭтоУвидеть-СообщитеРазработчику карта." + "DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода.", + "UPGRADE_DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода." }, "sneckomod:UnknownColorless": { "NAME": "??? Бесцветная", - "DESCRIPTION": "*Неопределённая Бесцветная карта.", - "UPGRADE_DESCRIPTION": "Улучшенная *Неопределённая Бесцветная карта." + "DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода.", + "UPGRADE_DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода." }, "sneckomod:UnknownCommonAttack": { "NAME": "??? -О- Атака", - "DESCRIPTION": "*Неопределённая Обычная Атака.", - "UPGRADE_DESCRIPTION": "Улучшенная *Неопределённая Обычная Атака." + "DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода.", + "UPGRADE_DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода." }, "sneckomod:UnknownCommonSkill": { "NAME": "??? -О- Навык", - "DESCRIPTION": "*Неопределённый Обычный Навык.", - "UPGRADE_DESCRIPTION": "Улучшенный *Неопределённый Обычный Навык." + "DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода.", + "UPGRADE_DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода." }, "sneckomod:UnknownDexterity": { "NAME": "??? Ловкость", - "DESCRIPTION": "*Неопределённая карта Ловкости.", - "UPGRADE_DESCRIPTION": "Улучшенная *Неопределённая карта Ловкости." + "DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода.", + "UPGRADE_DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода." }, "sneckomod:UnknownDraw": { "NAME": "??? Добор", - "DESCRIPTION": "*Неопределённая карта добора.", - "UPGRADE_DESCRIPTION": "Улучшенная *Неопределённая карта добора." + "DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода.", + "UPGRADE_DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода." }, "sneckomod:UnknownEthereal": { "NAME": "??? Эфирная", - "DESCRIPTION": "*Неопределённая Эфирная карта.", - "UPGRADE_DESCRIPTION": "Улучшенная *Неопределённая Эфирная карта." + "DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода.", + "UPGRADE_DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода." }, "sneckomod:UnknownExhaust": { "NAME": "??? Сжигается", - "DESCRIPTION": "*Неопределённая Сжигаемая карта.", - "UPGRADE_DESCRIPTION": "Улучшенная *Неопределённая Сжигаемая карта." + "DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода.", + "UPGRADE_DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода." }, "sneckomod:UnknownRareAttack": { "NAME": "??? -Р- Атака", - "DESCRIPTION": "*Неопределённая Редкая Атака.", - "UPGRADE_DESCRIPTION": "Улучшенная *Неопределённая Редкая Атака." + "DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода.", + "UPGRADE_DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода." }, "sneckomod:UnknownRarePower": { "NAME": "??? -Р- Талант", - "DESCRIPTION": "*Неопределённый Редкий Талант.", - "UPGRADE_DESCRIPTION": "Улучшенный *Неопределённый Редкий Талант." + "DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода.", + "UPGRADE_DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода." }, "sneckomod:UnknownRareSkill": { "NAME": "??? -Р- Навык", - "DESCRIPTION": "*Неопределённый Редкий Навык.", - "UPGRADE_DESCRIPTION": "Улучшенный *Неопределённый Редкий Навык." + "DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода.", + "UPGRADE_DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода." }, "sneckomod:UnknownStrength": { "NAME": "??? Сила", - "DESCRIPTION": "*Неопределённая карта Силы.", - "UPGRADE_DESCRIPTION": "Улучшенная *Неопределённая карта Силы." + "DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода.", + "UPGRADE_DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода." }, "sneckomod:UnknownStrike": { "NAME": "??? Удар", - "DESCRIPTION": "*Неопределённый удар.", - "UPGRADE_DESCRIPTION": "Улучшенный *Неопределённый удар." + "DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода.", + "UPGRADE_DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода." }, "sneckomod:UnknownUncommonAttack": { "NAME": "??? -Н- Атака", - "DESCRIPTION": "*Неопределённая Необычная Атака.", - "UPGRADE_DESCRIPTION": "Улучшенная *Неопределённая Необычная Атака." + "DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода.", + "UPGRADE_DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода." }, "sneckomod:UnknownUncommonPower": { "NAME": "??? -Н- Талант", - "DESCRIPTION": "*Неопределённый Необычный Талант.", - "UPGRADE_DESCRIPTION": "Улучшенный *Неопределённый Необычный Талант." + "DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода.", + "UPGRADE_DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода." }, "sneckomod:UnknownUncommonSkill": { "NAME": "??? -Н- Навык", - "DESCRIPTION": "*Неопределённый Необычный Навык.", - "UPGRADE_DESCRIPTION": "Улучшенный *Неопределённый Необычный Навык." + "DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода.", + "UPGRADE_DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода." }, "sneckomod:UnknownVulnerable": { "NAME": "??? Уязвимость", - "DESCRIPTION": "*Неопределённая карта Уязвимости.", - "UPGRADE_DESCRIPTION": "Улучшенная *Неопределённая карта Уязвимости." + "DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода.", + "UPGRADE_DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода." }, "sneckomod:UnknownWeak": { "NAME": "??? Слабость", - "DESCRIPTION": "*Неопределённая карта Слабости.", - "UPGRADE_DESCRIPTION": "Улучшенная *Неопределённая карта Слабости." + "DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода.", + "UPGRADE_DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода." }, "sneckomod:UnknownX": { "NAME": "??? стоимостью X", - "DESCRIPTION": "*Неопределённая карта со стоимостью X.", - "UPGRADE_DESCRIPTION": "Улучшенная *Неопределённая карта со стоимостью X." + "DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода.", + "UPGRADE_DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода." }, "sneckomod:UnlimitedRolls": { "NAME": "Бесконечные броски", - "DESCRIPTION": "Добавляет в руку *Переброс *души со сжигаемостью, в начале каждого вашего хода.", //unfinished - "UPGRADE_DESCRIPTION": "Начальная. NL Добавляет в руку *Переброс *души со сжигаемостью, в начале каждого вашего хода." //unfinished + "DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода.", + "UPGRADE_DESCRIPTION": "Эта карта не должна была встретиться вам в вылазке. NL Если вы видите это, вы, скорее всего, наткнулись на баг. NL Пожалуйста, напишите об этом разработчикам мода.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] + }, + "sneckomod:Behold": { + "NAME": "Смотри!", + "DESCRIPTION": "{@@}Наносит !D! урона. NL sneckomod:Перебор - добавляет в руку !M! Заточ{!M!|@=ек|&11,&12,&13,&14=ек|&1=ку|&2,&3,&4=ки}.", + "UPGRADE_DESCRIPTION": "{@@}Наносит !D! урона. NL sneckomod:Перебор - добавляет в руку !M! Заточ{!M!|@=ек|&11,&12,&13,&14=ек|&1=ку|&2,&3,&4=ки}." + }, + "sneckomod:SaveForLater": { + "NAME": "Сохранить на потом", + "DESCRIPTION": "{@@}Наносит !D! урона. NL Вы оставляете до !M! карт{!M!|@=|&11=|&1=ы} в конце вашего хода.", + "UPGRADE_DESCRIPTION": "{@@}Наносит !D! урона. NL Вы оставляете до !M! карт{!M!|@=|&11=|&1=ы} в конце вашего хода." + }, + "sneckomod:PowerShot": { + "NAME": "Мощный выстрел", + "DESCRIPTION": "Наносит !D! урона. NL Возвращается в руку из стопки сброса, когды вы разыгрываете талант." + }, + "sneckomod:LilGuardian": { + "NAME": "Маленький страж", + "DESCRIPTION": "Даёт !B! Защиты. NL Разыгрывается, при разыгрывании карты стоимостью 2 и более." + }, + "sneckomod:CrystalBoomerang": { + "NAME": "Кристальный бумеранг", + "DESCRIPTION": "Вы кладёте выбранную карту из стопки сброса в руку. NL Даёт !B! Защиты, если она sneckomod:Внеклассовая." + }, + "sneckomod:ViperEssence": { + "NAME": "Змеиная сущность", + "DESCRIPTION": "Эфирная. NL sneckomod:Внеклассовая. NL Даёт !M! Силы." + }, + "sneckomod:Amass": { + "NAME": "Собрать", + "DESCRIPTION": "Даёт !B! Защиты. NL Даёт доп. Защиту, равную сумме стоимостей карт в руке.", + "UPGRADE_DESCRIPTION": "Даёт !B! Защиты. NL Даёт доп. Защиту, равную удвоенной сумме стоимостей стоимостей карт в руке." + }, + "sneckomod:Medusa": { + "NAME": "Медуза", + "DESCRIPTION": "Наносит !D! урона. NL Накладывает !M! sneckomod:Токсина. NL sneckomod:Дарит обычную карту с отриц. эффектом.", + "DESCRIPTION_BATTLE": "Наносит !D! урона. NL Накладывает !M! sneckomod:Токсина." + }, + "sneckomod:Cower": { + "NAME": "Укрыться", + "DESCRIPTION": "Даёт !B! Защиты. NL Добавляет в руку *Отсидеться. NL Сжигается.", + "UPGRADE_DESCRIPTION": "Даёт !B! Защиты. NL Добавляет в руку *Отсидеться+. NL Сжигается." }, "sneckomod:WideSting": { "NAME": "Широкий укус", - "DESCRIPTION": "Наносит !M! - !D! урона ВСЕМ врагам. NL Улучшает все sneckomod:Внеклассовые карты в руке." + "DESCRIPTION": "Наносит !D! урона ВСЕМ врагам. NL Улучшает все sneckomod:Внеклассовые карты в руке. NL sneckomod:Дарит обычную карту.", + "DESCRIPTION_BATTLE": "Наносит !D! урона ВСЕМ врагам. NL Улучшает все sneckomod:Внеклассовые карты в руке." + }, + "sneckomod:GildedShield": { + "NAME": "Позолоченный щит", + "DESCRIPTION": "Даёт !B! Защиты. NL sneckomod:Спутывает эту карту, затем возвращает в руку." + }, + "sneckomod:Mesmerize": { + "NAME": "Очаровать", + "DESCRIPTION": "ВСЕ враги теряют !M! Силы. NL sneckomod:Спутывает карту в руке. NL Сжигается." + }, + "sneckomod:Serpentscale": { + "NAME": "Змеиная чешуя", + "DESCRIPTION": "Наносит !D! урона. NL Даёт 1 *Панциря. NL sneckomod:Перебор - вместо этого, даёт !M! *Панциря." + }, + "sneckomod:OtherworldlySlash": { + "NAME": "Потусторонний разрез", + "DESCRIPTION": "Наносит !D! урона. NL Наносит !D! урона ещё раз, если вы разыгрывали sneckomod:Внеклассовую карту в этом ходу. NL sneckomod:Дарит обычную карту.", + "DESCRIPTION_BATTLE": "Наносит !D! урона. NL Наносит !D! урона ещё раз, если вы разыгрывали sneckomod:Внеклассовую карту в этом ходу." + }, + "sneckomod:BeyondArmor": { + "NAME": "Больше чем броня", + "DESCRIPTION": "{@@}Даёт !B! Защиты. NL Вы кладёте в руку !M! случ. sneckomod:Внеклассов{!M!|@=ых|&11,&12,&13,&14=ых|&1=ую|&2,&3,&4=ые} карт{!M!|@=|&11,&12,&13,&14=|&1=у|&2,&3,&4=ы} из стопки добора. NL sneckomod:Дарит обычную карту.", + "DESCRIPTION_BATTLE": "{@@}Даёт !B! Защиты. NL Вы кладёте в руку !M! случ. sneckomod:Внеклассов{!M!|@=ых|&11,&12,&13,&14=ых|&1=ую|&2,&3,&4=ые} карт{!M!|@=|&11,&12,&13,&14=|&1=у|&2,&3,&4=ы} из стопки добора." + }, + "sneckomod:BlunderGuard": { + "NAME": "Косая гвардия", + "DESCRIPTION": "Даёт !qqq! Защиты и !M! Силы, когда вы разыгрываете карту стоимостью 3 и более.", + "UPGRADE_DESCRIPTION": "Даёт !qqq! Защиты и !M! Силы, когда вы разыгрываете карту стоимостью 3 и более." + }, + "sneckomod:WideAngle": { + "NAME": "Широкий угол", + "DESCRIPTION": "Оставляется. NL Наносит !D! урона ВСЕМ врагам." + }, + "sneckomod:SerpentsNest": { + "NAME": "Змеиное гнездо", + "DESCRIPTION": "Наносит !M! урона ВСЕМ врагам, когда вы разыгрываете талант. NL sneckomod:Дарит необычный талант.", + "DESCRIPTION_BATTLE": "Наносит !M! урона ВСЕМ врагам, когда вы разыгрываете талант." + }, + "sneckomod:Whack": { + "NAME": "Бах!", + "DESCRIPTION": "Наносит !D! урона. NL Добавляет в руку *Врезать. NL Сжигается.", + "UPGRADE_DESCRIPTION": "Наносит !D! урона. NL Добавляет в руку *Врезать+. NL Сжигается." + }, + "sneckomod:CobraCoil": { + "NAME": "Спираль кобры", + "DESCRIPTION": "Наносит !D! урона. NL Накладывает !M! expansioncontent:Сдавленности. NL sneckomod:Дарит редкую атаку." + }, + "sneckomod:Belittle": { + "NAME": "Унижение", + "DESCRIPTION": "Враг теряет !M! ОЗ за каждый вид отриц. эффекта. NL sneckomod:Дарит необычную карту с отриц. эффектом.", + "DESCRIPTION_BATTLE": "Враг теряет !M! ОЗ за каждый вид отриц. эффекта." + }, + "sneckomod:Jackpot": { + "NAME": "Джэкпот", + "DESCRIPTION": "Оставляется. NL Даёт [E] [E] . NL Сжигается.", + "UPGRADE_DESCRIPTION": "Оставляется. NL Даёт [E] [E] [E] . NL Сжигается." + }, + "sneckomod:MakeshiftBlade": { + "NAME": "Самодельное лезвие", + "DESCRIPTION": "{@@}Наносит !D! урона. Вы берёте !qqq! карт{!qqq!|@=|&11,&12,&13,&14=|&1=у|&2,&3,&4=ы}, если враг имеет не менее !M! отриц. эффект{!M!|@=ов|&11,&12,&13,&14=ов|&1=|&2,&3,&4=а}. NL sneckomod:Дарит карту с отриц. эффектом.", + "DESCRIPTION_BATTLE": "{@@}Наносит !D! урона. Вы берёте !qqq! карт{!qqq!|@=|&11,&12,&13,&14=|&1=у|&2,&3,&4=ы}, если враг имеет не менее !M! отриц. эффект{!M!|@=ов|&11,&12,&13,&14=ов|&1=|&2,&3,&4=а}." + }, + "sneckomod:LatchOn": { + "NAME": "Запереть", + "DESCRIPTION": "Наносит !D! урона ВСЕМ врагам. NL Добавляет в руку *Змеиную *сущность." + }, + "sneckomod:ComboString": { + "NAME": "Плетёная нить", + "DESCRIPTION": "Наносит !D! урона за каждую sneckomod:Внеклассовую карту, разыгранную в этом ходу. NL sneckomod:Дарит необычную карту.", + "EXTENDED_DESCRIPTION": [ + " NL (наносит урон ", + " x раз(а).)" + ], + "DESCRIPTION_BATTLE": "Наносит !D! урона за каждую sneckomod:Внеклассовую карту, разыгранную в этом ходу." + }, + "sneckomod:ThrowingCards": { + "NAME": "Бросить карты", + "DESCRIPTION": "Добавляет в руку X *Быстрее *света. NL Даёт [E] . NL Сжигается.", + "UPGRADE_DESCRIPTION": "Добавляет в руку X *Быстрее *света+. NL Даёт [E] . NL Сжигается." + }, + "sneckomod:RoundaboutSwing": { + "NAME": "Круговые качели", + "DESCRIPTION": "{@@}Наносит !D! урона. NL Вы кладёте карту из руки на верх стопки добора. NL В след. ходу вы возьмёте на !M! карт{!M!|@=|&11,&12,&13,&14=|&1=у|&2,&3,&4=ы} больше" + }, + "sneckomod:MarkedCard": { + "NAME": "Помеченная карта", + "DESCRIPTION": "Оставляется. NL sneckomod:Спутывает карту в руке. NL Она станет дешевле. NL Сжигается.", + "UPGRADE_DESCRIPTION": "{@@}Оставляется. NL sneckomod:Спутывает !M! карт{!M!|@=|&11,&12,&13,&14=|&1=у|&2,&3,&4=ы} в руке. NL Они станут дешевле. NL Сжигается." + }, + "sneckomod:InertBlade": { + "NAME": "Инертное лезвие", + "DESCRIPTION": "{@@}Наносит !D! урона. NL Если стоимость: NL 1+: Вы берёте !M! карт{!M!|@=|&11,&12,&13,&14=|&1=у|&2,&3,&4=ы}. NL 2+: Даёт !M! Силы. NL 3+: Даёт [E] .", + "UPGRADE_DESCRIPTION": "{@@}Наносит !D! урона. NL Если стоимость: NL 1+: Вы берёте !M! карт{!M!|@=|&11,&12,&13,&14=|&1=у|&2,&3,&4=ы}. NL 2+: Даёт !M! Силы. NL 3+: Даёт [E] [E] ." + }, + "sneckomod:PerpetualSerpent": { + "NAME": "Вечный змей", + "DESCRIPTION": "Наносит !D! урона. NL sneckomod:Перебор - Даёт [E] [E] ." + }, + "sneckomod:LastStrike": { + "NAME": "Последний удар", + "DESCRIPTION": "Наносит !D! урона. NL Наносит урон ещё раз за каждый уникальный Удар, разыграный в этом ходу. NL sneckomod:Дарит Удар.", + "UPGRADE_DESCRIPTION": "Наносит !D! урона. NL Наносит урон ещё раз за каждый уникальный Удар, разыграный в этом ходу. NL sneckomod:Дарит Удар.", + "DESCRIPTION_BATTLE": "Наносит !D! урона. NL Наносит урон ещё раз за каждый уникальный Удар, разыграный в этом ходу.", + "UPGRADE_DESCRIPTION_BATTLE": "Наносит !D! урона. NL Наносит урон ещё раз за каждый уникальный Удар, разыграный в этом ходу.", + "EXTENDED_DESCRIPTION": [ + " NL (наносит урон ", + " x доп. раз(а).)" + ] + }, + "sneckomod:AceOfWands": { + "NAME": "Королева Пентаклей", + "DESCRIPTION": "Эфирная. NL Даёт !M! Защиты, когда вы накладываете на врага отриц. эффект. NL sneckomod:Дарит карту с отриц. эффектом.", + "UPGRADE_DESCRIPTION": "Даёт !M! Защиты, когда вы накладываете на врага отриц. эффект. NL sneckomod:Дарит карту с отриц. эффектом." + }, + "sneckomod:FlashInThePan": { + "NAME": "Осечка", + "DESCRIPTION": "Даёт !B! Защиты. NL Вы сбрасываете все карты в руке, NL затем берёте столько же на след. ход." + }, + "sneckomod:TrashCan": { + "NAME": "Мусорка", + "DESCRIPTION": "Сжигает до 1 карты в начале каждого вашего хода.", + "UPGRADE_DESCRIPTION": "Начальная. NL Сжигает до 1 карты в начале каждого вашего хода." + }, + "sneckomod:Lacerate": { + "NAME": "Замучить", + "DESCRIPTION": "Наносит !D! урона. Накладывает !M! sneckomod:Токсина на выбранного врага, когда он получает отриц. эффект. sneckomod:Дарит *Облако *слабости.", + "DESCRIPTION_BATTLE": "Наносит !D! урона. Накладывает !M! sneckomod:Токсина на выбранного врага, когда он получает отриц. эффект." + }, + "sneckomod:SerpentineSleuth": { + "NAME": "Змеиный сыщик", + "DESCRIPTION": "Эфирная. NL Даёт [E] , когда вы разыгрываете талант. NL sneckomod:Дарит редкий талант.", + "UPGRADE_DESCRIPTION": "Эфирная. NL Даёт [E] [E] , когда вы разыгрываете талант. NL sneckomod:Дарит редкий талант.", + "DESCRIPTION_BATTLE": "Эфирная. NL Даёт [E] , когда вы разыгрываете талант.", + "UPGRADE_DESCRIPTION_BATTLE": "Эфирная. NL Даёт [E] [E] , когда вы разыгрываете талант." } -} +} \ No newline at end of file diff --git a/src/main/resources/sneckomodResources/localization/rus/EventStrings.json b/src/main/resources/sneckomodResources/localization/rus/EventStrings.json index a5ffbd1c7..b218e151a 100644 --- a/src/main/resources/sneckomodResources/localization/rus/EventStrings.json +++ b/src/main/resources/sneckomodResources/localization/rus/EventStrings.json @@ -9,10 +9,10 @@ ], "OPTIONS": [ "[Разбить] #rПотерять #r", - " #r ОЗ. #gПолучить #g5 #gНеопределённых #gкарт", + " #rОЗ. #gВыбрать #gи #gполучить #b1 #gиз #b3 #gРедких #gВнеклассовых #gкарт.", "[Забрать] #gПолучить #gЗагадочный #gоктаэдр. #rПолучить #rПроклятие #r- #rБоль.", "[Уйти]", - "[Закрыто] Требуется карта, которая выбирает случайное число." + "[Закрыто] Требуется карта с Перебором." ] }, "sneckomod:BackToBasics": { @@ -21,7 +21,7 @@ "Креативность постоянно побеждает планирование." ], "OPTIONS": [ - "[Импровизация] #gЗаменяет все #gУдары и #gОбороны на #gНеопределённые карты.", + "[Импровизация] #gЗаменяет все #gУдары и #gОбороны на #gВнеклассовые карты.", "[Закрыто] Требуется Удар или Оборона." ] }, @@ -46,8 +46,8 @@ "Змей бросил на вас крайне разочарованный взгляд, но всё-таки улыбнулся и пожелал хорошего путешествия." ], "OPTIONS": [ - "[Спасти] #gПолучить #gМолодого #gзмекко. #rПолучить #rПроклятие #r- #rОзадаченность.", + "[Спасти] #gПолучить #gМолодого #gзмекко. #rСразиться #rсо #rзлым #rЦентурионом.", "[Уйти]" ] } -} +} \ No newline at end of file diff --git a/src/main/resources/sneckomodResources/localization/rus/KeywordStrings.json b/src/main/resources/sneckomodResources/localization/rus/KeywordStrings.json index 0ac4d24a9..ece7cccf5 100644 --- a/src/main/resources/sneckomodResources/localization/rus/KeywordStrings.json +++ b/src/main/resources/sneckomodResources/localization/rus/KeywordStrings.json @@ -2,57 +2,112 @@ { "PROPER_NAME": "Анти-змекко", "NAMES": [ + "snekproof", "анти-змекко" ], - "DESCRIPTION": "На карты #yАнти-змекко не влияет #yЗамешательство и #yСпутывание." + "DESCRIPTION": "На карты #yАнти-змекко не влияет #yЗамешательство и #yСпутывание.", + "TRANSLATOR_NOTE": "DEPRECATED" + }, + { + "PROPER_NAME": "Рубашка", + "NAMES": [ + "suit", + "suits", + "рубашка", + "рубашке", + "рубашки", + "рубашек" + ], + "DESCRIPTION": "Рубашка говорит про цвет карты. Карты-жетоны не учитываются.", + "TRANSLATOR_NOTE": "DEPRECATED" + }, + { + "PROPER_NAME": "Перебор", + "NAMES": [ + "Overflow", + "overflow", + "перебор", + "перебором", + "перебора" + ], + "DESCRIPTION": "Вторичный эффект, активируется если у вас #b6 и более карт в руке." }, { "PROPER_NAME": "Спутывание", "NAMES": [ - "muddle", - "muddled", + "muddle", + "muddled", "спутывание", "спутывает", "спутанная", "спутанные", "спутанную", "спутаны", + "спутана", + "спутан", "спутываете", "спутает", - "спутыванию" + "спутать", + "спутыванию", + "спутывания", + "спутывается" ], "DESCRIPTION": "Меняет стоимость карты до конца хода на случайную, от #b0 до #b3." }, { "PROPER_NAME": "Внеклассовые карты", "NAMES": [ - "внеклассовые карты", - "внеклассовые", - "внеклассовой", - "внеклассовых", + "offclass", + "внеклассовые", + "внеклассовой", + "внеклассовых", "внеклассовая", "внеклассовую", "внеклассовый" ], - "DESCRIPTION": "Любые получаемые карты, отличные от вашего класса (включая #yБесцветные, #yПроклятия и #yСтатусы)." + "DESCRIPTION": "Любые получаемые карты других персонажей (включая #yБесцветные, #yПроклятия и #yСтатусы)." + }, + { + "PROPER_NAME": "Дарение", + "NAMES": [ + "gift", + "подарок", + "подарка", + "подарки", + "подарков", + "дарит" + ], + "DESCRIPTION": "Выберите и добавьте в колоду #b1 из #b3 карт указанного типа, при добавлении этой карты в колоду." }, { "PROPER_NAME": "Опознание", "NAMES": [ + "identify", "опознание", "опознаёт", "опознаёте", "опознайте" ], - "DESCRIPTION": "Навсегда фиксирует #yНеопределённые карты на те, которыми они являются на данный момент." + "DESCRIPTION": "Навсегда фиксирует #yНеопределённые карты на те, которыми они являются на данный момент.", + "TRANSLATOR_NOTE": "DEPRECATED" + }, + { + "PROPER_NAME": "Токсин", + "NAMES": [ + "venom", + "токсин", + "токсина", + "токсином" + ], + "DESCRIPTION": "Поражённые #yТоксином существа теряют ОЗ при получении других отриц. эффектов." }, { "PROPER_NAME": "Везение", "NAMES": [ - "lucky", + "lucky", "везение", "везения" ], - "DESCRIPTION": "Карты, которые выбирают случ. число, выбирают максимальное значение (не влияет на #yСпутывание)." + "DESCRIPTION": "Эффект #yПеребора срабатывает независимо от количества карт в руке на протяжении хода." } ] \ No newline at end of file diff --git a/src/main/resources/sneckomodResources/localization/rus/PotionStrings.json b/src/main/resources/sneckomodResources/localization/rus/PotionStrings.json index e83757ca5..580641cf3 100644 --- a/src/main/resources/sneckomodResources/localization/rus/PotionStrings.json +++ b/src/main/resources/sneckomodResources/localization/rus/PotionStrings.json @@ -1,32 +1,32 @@ { "sneckomod:DiceRollPotion": { - "NAME": "Потенциально-полезное зелье", + "NAME": "Карта в бутылке", "DESCRIPTIONS": [ - "Наносит #b", - " - #b", - " урона." + "Используйте в бою чтобы добавить #b", + " награду с #b3 #yУлучшенными Необычными #yВнеклассовыми картами в награду комнаты.", + " награды с #b3 #yУлучшенными Необычными #yВнеклассовыми картами в награду комнаты." ] }, "sneckomod:CheatPotion": { "NAME": "Жидкая удача", "DESCRIPTIONS": [ - "Даёт #yВезение на 1 ход.", - "Даёт #yВезение на #b", - " хода." + "Эффект #yПеребора всегда активируется в этом ходу, независимо от количества карт в руке.", + "Эффект #yПеребора всегда активируется след. #b", + " хода, независимо от количества карт в руке." ] }, "sneckomod:MuddlingPotion": { - "NAME": "Шипучий энергетик", + "NAME": "ШИПучий энергетик", "DESCRIPTIONS": [ "#yСпутывает #b", - " карты с наибольшей стоимостью в руке. Их стоимость не превысит #b2." + " карты с наибольшей стоимостью в руке. Их стоимость не превысит #b2 [REMOVE_SPACE]." ] }, "sneckomod:OffclassReductionPotion": { "NAME": "Экзотический напиток", "DESCRIPTIONS": [ "Снижает стоимость всех #yВнеклассовых карт в руке на #b", - "." + " [REMOVE_SPACE]." ] } } diff --git a/src/main/resources/sneckomodResources/localization/rus/PowerStrings.json b/src/main/resources/sneckomodResources/localization/rus/PowerStrings.json index 1847a120a..8b627ed0a 100644 --- a/src/main/resources/sneckomodResources/localization/rus/PowerStrings.json +++ b/src/main/resources/sneckomodResources/localization/rus/PowerStrings.json @@ -1,18 +1,26 @@ { + "sneckomod:BlunderGuardPower": { + "NAME": "Цунами", + "DESCRIPTIONS": [ + "Эффекты #yПереполнения также дают #b", + " #yЗащиту [REMOVE_SPACE].", + " #yЗащиты [REMOVE_SPACE]." + ] + }, "sneckomod:CheapStockPower": { "NAME": "Дешёвые акции", "DESCRIPTIONS": [ - "Снижает стоимость самой дорогой #yНеопределённой карты в руке на #b1 в начале вашего хода.", - "Снижает стоимость самой дорогой #yНеопределённой карты в руке на #b1 в начале вашего хода #b", - " раз(а)." + "#yСпутывает самую дорогую карту в руке в начале вашего хода.", + "#yСпутывает самую дорогую карту в руке #b", + " раз(а) в начале вашего хода." ] }, "sneckomod:CheatPower": { "NAME": "Везение", "DESCRIPTIONS": [ - "Карты, которые выбирают случ. число, будут выбирать максимальное значение в этом ходу.", - "Карты, которые выбирают случ. число, будут выбирать максимальное значение след. #b", - " хода(-ов)." + "В этом ходу, при разыгрывании карт с эффектом #yПереполнения, будет срабатывать их эффект #yПереполнения.", + "След. #b", + " хода, при разыгрывании карт с эффектом #yПереполнения, будет срабатывать их эффект #yПереполнения." ] }, "sneckomod:MuddleDrawnCardsPower": { @@ -20,7 +28,7 @@ "DESCRIPTIONS": [ "#yСпутывает след. карту, которую вы берёте.", "#yСпутывает след. #b", - " карт(ы), которые вы берёте. ( Осталось #b", + " карты, которые вы берёте в этом ходу. ( Осталось #b", " )" ] }, @@ -28,43 +36,158 @@ "NAME": "Щитоспут", "DESCRIPTIONS": [ "Даёт #b", - " #yЗащиты, когда вы #yСпутываете карту." + " #yЗащиты, когда вы #yСпутываете карту [REMOVE_SPACE]." + ] + }, + "sneckomod:OverwhelmingPresencePower": { + "NAME": "Подавляющее присутствие", + "DESCRIPTIONS": [ + "Даёт [E] за первое перетасовывание колоды в ходу, и вы берёте карту.", + "Даёт ", + " [E] за первое перетасовывание колоды в ходу, и вы берёте #b", + " карты." + ] + }, + "sneckomod:SerpentsNestPower": { + "NAME": "Змеиное гнездо", + "DESCRIPTIONS": [ + "При разыгрывании #yТаланта, наносит #b1 урон ВСЕМ врагам.", + "При разыгрывании #yТаланта, наносит #b", + " урона ВСЕМ врагам." ] }, "sneckomod:SerpentMindPower": { "NAME": "Экзотический облик", "DESCRIPTIONS": [ - "Вы берёте #b", - " карту, когда разыгрываете #yВнеклассовую карту.", - " карты, когда разыгрываете #yВнеклассовую карту." + "В конце хода, даёт #b", + " #yСилы за каждый уникальный разыгранный набор карт персонажа в этом ходу.", + " #yСилы за каждый уникальный разыгранный набор карт персонажа в этом ходу." + ] + }, + "sneckomod:SnakeEyesPower": { + "NAME": "Хуже некуда", + "DESCRIPTIONS": [ + "В этом ходу, след. #yВнеклассовая карта разыгрывается дважды.", + "В этом ходу, след. #b", + " #yВнеклассовые карты разыгрываются дважды." ] }, "sneckomod:UnendingSupplyPower": { - "NAME": "Нескончаемые запасы", + "NAME": "Огромные запасы", "DESCRIPTIONS": [ "Добавляет в руку #b", - " случ. #yВнеклассовую(-ые) карту(-ы), в начале вашего хода." + "Добавляет в руку #yЭхо случ. #yВнеклассовой карты в начале вашего хода.", + " #yЭхо случ. #yВнеклассовых карт в начале вашего хода." ] }, "sneckomod:UnknownUpgradedPostCombatPower": { "NAME": "Больше силы!", "DESCRIPTIONS": [ "Вы получите #b", - " доп. #yУлучшенные #yНеопределённую карты в конце боя.", - " доп. #yУлучшенную #yНеопределённую карту в конце боя." + " доп. #yУлучшенные #yНеопределённые карты в конце боя.", + " доп. #yУлучшенную #yНеопределённую карту в конце боя.", + "NOTE FOR LOC: NOT USED DO NOT TRANSLATE." ] }, "sneckomod:UnlimitedRollsPower": { "NAME": "Бесконечные броски", "DESCRIPTIONS": [ - "Добавляет в руку #yПереброс #yдуши+ со сжигаемостью, в начале каждого вашего хода." //unfinished + "Добавляет в руку #yПереброс #yдуши+, который #yСжигается, в начале вашего хода [REMOVE_SPACE]." ] }, "sneckomod:Transmogrifying": { "NAME": "Превращение", "DESCRIPTIONS": [ " преобразована в реликвию «", - "»." + "».", + "NOTE FOR LOC: NOT USED DO NOT TRANSLATE." + ] + }, + "sneckomod:ToxicPersonalityPower": { + "NAME": "Токсичная личность", + "DESCRIPTIONS": [ + "При накладывании отриц. эффекта на врага, также накладывает #b", + " #yЯда [REMOVE_SPACE].", + "NOTE FOR LOC: NOT USED DO NOT TRANSLATE." + ] + }, + "sneckomod:TyphoonPower": { + "NAME": "Тайфун", + "DESCRIPTIONS": [ + "В этом ходу, при #bПереполнении [REMOVE_SPACE], вы разыгрываете копию #yТайфуниего #yКлыка [REMOVE_SPACE].", + "В этом ходу, при #bПереполнении [REMOVE_SPACE], вы разыгрываете #b", + " копии #yТайфуниего #yКлыка [REMOVE_SPACE]." + ] + }, + "sneckomod:TyphoonPlusPower": { + "NAME": "Тайфун+", + "DESCRIPTIONS": [ + "В этом ходу, при #bПереполнении [REMOVE_SPACE], вы разыгрываете копию #yТайфуниего #yКлыка+ [REMOVE_SPACE].", + "В этом ходу, при #bПереполнении [REMOVE_SPACE], вы разыгрываете #b", + " копии #yТайфуниего #yКлыка+ [REMOVE_SPACE]." + ] + }, + "sneckomod:SerpentineSleuthPower": { + "NAME": "Змеиный сыщик", + "DESCRIPTIONS": [ + "При разыгрывании #yТаланта, даёт #b", + " [E] .", + " [E] ." + ] + }, + "sneckomod:BigGunsStrengthPower": { + "NAME": "Большие пушки", + "DESCRIPTIONS": [ + "При разыгрывании карты стоимостью 3+, даёт #b", + " #yСилы [REMOVE_SPACE].", + " #yСилы [REMOVE_SPACE]." + ] + }, + "sneckomod:BigGunsBlockPower": { + "NAME": "Косая гвардия", + "DESCRIPTIONS": [ + "При разыгрывании карты стоимостью 3+, даёт #b", + " #yЗащиту [REMOVE_SPACE].", + " #yЗащиты [REMOVE_SPACE]." + ] + }, + "sneckomod:AceOfWandsPower": { + "NAME": "Королева Пентаклей", + "DESCRIPTIONS": [ + "При наложении отриц. эффекта на врага, даёт #b", + " #yЗащиту [REMOVE_SPACE].", + " #yЗащиты [REMOVE_SPACE]." + ] + }, + "sneckomod:LacerateDebuff": { + "NAME": "Замучить", + "DESCRIPTIONS": [ + "При наложении отриц. эффекта на этого врага в этом ходу, накладывает #b", + " #yЯд на него.", + " #yЯда на него." + ] + }, + "sneckomod:FountainPower": { + "NAME": "Фонтан", + "DESCRIPTIONS": [ + "Эффект #yПереполнения также накладывает #b", + " #yЯд на случ. врага.", + " #yЯда на случ. врага." + ] + }, + "sneckomod:TrashCanPower": { + "NAME": "Мусорка", + "DESCRIPTIONS": [ + "Вы можете #yСжечь карту в начале хода.", + "Вы можете #yСжечь до #b", + " карт в начале хода." + ] + }, + "sneckomod:VenomDebuff": { + "NAME": "Токсин", + "DESCRIPTIONS": [ + "При накладывании отриц. эффекта, кроме #yТоксина, отнимает #b", + " ОЗ." ] } } \ No newline at end of file diff --git a/src/main/resources/sneckomodResources/localization/rus/RelicStrings.json b/src/main/resources/sneckomodResources/localization/rus/RelicStrings.json index 8104af355..5309d8226 100644 --- a/src/main/resources/sneckomodResources/localization/rus/RelicStrings.json +++ b/src/main/resources/sneckomodResources/localization/rus/RelicStrings.json @@ -3,28 +3,28 @@ "NAME": "Душа змекко", "FLAVOR": "0...3...2...2...1", "DESCRIPTIONS": [ - "Вы берёте карту и получаете [E] , когда впервые разыгрываете #ysneckomod:Внеклассовую карту в бою." + "Добавляет в руку #yПереброс #yдуши в начале боя." ] }, "sneckomod:SuperSneckoSoul": { "NAME": "Превосходная душа змекко", "FLAVOR": "3120231321230320", "DESCRIPTIONS": [ - "Заменяет [#407B93]«Душу [#407B93]змекко»[]. NL Даёт [E] , когда вы впервые разыгрываете #yВнеклассовую карту в ходу." + "Заменяет [#407B93]«Душу [#407B93]змекко»[]. NL Добавляет в руку #yПереброс #yдуши [REMOVE_SPACE] в начале вашего хода. Вы берёте ещё одну карту и #ysneckomod:Спутываете её в начале вашего хода." ] }, "sneckomod:CleanMud": { "NAME": "Флейта заклинателя змей", "FLAVOR": "Ссссссс...", "DESCRIPTIONS": [ - "#ysneckomod:Спутывание не может изменить стоимость карты на #b3." + "#ysneckomod:Спутывание не может изменить стоимость карты на #b3 [REMOVE_SPACE]." ] }, "sneckomod:ConfusingCodex": { "NAME": "Кольцо змекко", "FLAVOR": "Неразборчиво, нечитаемо, должно быть готово к четвергу.", "DESCRIPTIONS": [ - "Накладывает #b0 #b- #b2 #yСлабости и #yУязвимости на ВСЕХ врагов в начале боя." + "Накладывает #b1 #yСлабости и #yУязвимости на случ. врага, когда вы разыгрываете #b3 карты с #ysneckomod:Перебором." ] }, "sneckomod:CrystallizedMud": { @@ -38,83 +38,81 @@ "NAME": "Утяжелённая кость", "FLAVOR": "Наполнена «сыром».", "DESCRIPTIONS": [ - "Добавляет картам, которые выбирают случ. число, #b+1 к минимальному значению." + "Даёт #b1 #yЗащиты, когда вы #ysneckomod:Спутываете карту [REMOVE_SPACE]." ] }, "sneckomod:RareBoosterPack": { "NAME": "Редкий бустер-ящик", "FLAVOR": "В отличном состоянии.", "DESCRIPTIONS": [ - "При получении, даёт #yНеопределённую #yРедкую карту каждого типа." + "При получении, даёт #ysneckomod:Внеклассовую #yРедкую карту." ] }, "sneckomod:SleevedAce": { "NAME": "Туз в рукаве", - "FLAVOR": "Все мы в коем-то роде тузы.", + "FLAVOR": "Все мы в некотором роде тузы.", "DESCRIPTIONS": [ - "Добавляет #yЧистую #yудачу в начале боя. Она #yОставляется." + "Добавляет в руку #yПомеченную #yкарту в начале боя [REMOVE_SPACE]." ] }, "sneckomod:UnknownEgg": { "NAME": "Неопределённое яйцо", "FLAVOR": "Что из него вылупится? Залатите $1000 и узнайте.", "DESCRIPTIONS": [ - "Вы можете #yОпознавать карты в Лагере без траты действия. NL #yУлучшает добавляемые в колоду #yНеопределённые карты." + "Улучшает добавляемые в колоду #ysneckomod:Внеклассовые карты. При получении, #yУлучшает #b2 случ. #ysneckomod:Внеклассовых карты." ] }, "sneckomod:SuperSneckoEye": { "NAME": "Превосходный глаз змекко", "FLAVOR": "0121012", "DESCRIPTIONS": [ - "Заменяет #y«Глаз #yзмекко». Вы берёте на #b2 карты больше в начале хода. Накладывает на вас #yЗамешательство в начале боя. Снижает стоимость первой вытянутой в бою карты стоимостью #b3 до #b0." + "Заменяет #y«Глаз #yзмекко». Вы берёте на #b4 карты больше в начале хода. Накладывает на вас #yЗамешательство в начале боя." ] }, "sneckomod:SneckoTalon": { "NAME": "Идол Ретромэйшена", "FLAVOR": "Для краткости чаще называют «Идол Рето».", "DESCRIPTIONS": [ - "В начале вашего хода снижает стоимость самой дорогой карты в руке на #b1 до конца хода." + "Снижает стоимость случайной карты в руке на #b1 в начале вашего хода." ] }, "sneckomod:BlankCard": { "NAME": "Пустая карта", "FLAVOR": "МимиКарта.", "DESCRIPTIONS": [ - "В начале каждого боя, добавляет в руку #yЭхо случ. карты в колоде, она стоит #b0." + "Добавляет в руку #ygremlin:Эхо случ. карты в колоде [REMOVE_SPACE], если это не #rПроклятие или #yСтатус [REMOVE_SPACE], в начале каждого боя [REMOVE_SPACE]. Она стоит #b0 [REMOVE_SPACE]." ] }, "sneckomod:D8": { "NAME": "Загадочный октаэдр", - "FLAVOR": "Похоже, у него утяжелена одна из сторон.", + "FLAVOR": "Похоже, у него одна сторона тяжелее других.", "DESCRIPTIONS": [ - "При получении, выберите карту, которая выбирает случайное число. Она всегда будет выбирать максимально значение.", + "При получении, выберите карту с #ysneckomod:Перебором. Она даёт #b4 #yЗащиты и всегда активирует свой #yПеребор.", "Выберите карту на которую подействует ", "", - " при разыгрывании, будет выбирать максимальное значение." + " даёт #b4 #yЗащиты и всегда активирует свой эффект #yПереполнения." ] }, "sneckomod:BabySnecko": { "NAME": "Молодой змекко", "FLAVOR": "Ошеломляюще милый.", "DESCRIPTIONS": [ - "Наносит #b5 урона случ. врагу в начале вашего хода." + "Наносит #b9 урона случ. врагу и #ysneckomod:Спутывает #b2 случ. карты в руке (стоимостью не #b0 [REMOVE_SPACE]) в начале вашего хода." ] }, "sneckomod:SneckoCommon": { "NAME": "Печать одобрения", "FLAVOR": "«Я - Латоносец и это - моя самая любимая реликвия в Шпиле.» - Рекламная брошюра торговца.", "DESCRIPTIONS": [ - "При получении, выберите #b1 из #b3 #yНеопределённых карт персонажа и добавьте её в колоду. Все последующие #yНеопределённые карты будут только из набора выбранного персонажа.", - "Все последующие #yНеопределённые карты будут только из набора персонажа «", - "»." + "При получении, выберите #b1 из #b5 #yНеобычных #ysneckomod:Внеклассовых #yТаланта и добавьте в колоду." ] }, "sneckomod:SneckoBoss": { "NAME": "Счастливая подкова", "FLAVOR": "Сами постройте свою удачу.", "DESCRIPTIONS": [ - "При получении, выберите #b1 из #b3 #yНеопределённых карт персонажа. Добавляет #b5 её копий в колоду. Добавляет в награды после боя доп. карту выбранного персонажа.", - "При получении, даёт #b5 #yНеопределённых карт персонажа «", + "При получении, выберите #b1 из #b3 #yПерсонажей [REMOVE_SPACE]. Выберите добавьте в колоду #b3 #yУлучшенных Необычных и #b2 Редких карты этого персонажа. Добавляет в награду после боя доп. карту выбранного персонажа.", + "При получении, даёт #b3 #yУлучшеных Необычных и #b2 Редких карты персонажа «", "». Добавляет в награды после боя доп. карту персонажа «", "»." ] diff --git a/src/main/resources/sneckomodResources/localization/rus/UIStrings.json b/src/main/resources/sneckomodResources/localization/rus/UIStrings.json index c370da5ce..bc79f64a5 100644 --- a/src/main/resources/sneckomodResources/localization/rus/UIStrings.json +++ b/src/main/resources/sneckomodResources/localization/rus/UIStrings.json @@ -12,13 +12,13 @@ "sneckomod:UnknownNames": { "TEXT": [ "Unidentified", - "Неопределённость", - "Неопределённая", - "Неопределённой", - "Неопределённую", - "Неопределённые", - "Неопределённых", - "Неопределённый" + "Неопределённость", + "Неопределённая", + "Неопределённой", + "Неопределённую", + "Неопределённые", + "Неопределённых", + "Неопределённый" ] }, "sneckomod:UnknownClass": { @@ -63,6 +63,24 @@ "(Не тратит действие) Навсегда зафиксируйте Неопределённую карту в колоде." ] }, + "sneckomod:CommonAttackReward": { + "TEXT": [ + "Добавить Внеклассовую карту в колоду.", + "Выберите карту." + ] + }, + "sneckomod:DiceRollPotionReward": { + "TEXT": [ + "Добавить Улучшенную карту в колоду.", + "Выберите карту." + ] + }, + "sneckomod:ColorfulPowersCardReward": { + "TEXT": [ + "Добавить Улучшенный Талант в колоду.", + "Выберите карту." + ] + }, "sneckomod:AtGameStart": { "TEXT": [ "Набор «", diff --git a/src/main/resources/sneckomodResources/localization/spa/CardStrings.json b/src/main/resources/sneckomodResources/localization/spa/CardStrings.json new file mode 100644 index 000000000..d55ec8281 --- /dev/null +++ b/src/main/resources/sneckomodResources/localization/spa/CardStrings.json @@ -0,0 +1,576 @@ +{ + "sneckomod:Blunderbus": { + "NAME": "Blunderbus", + "DESCRIPTION": "Haz !D! de daño a TODOS los enemigos. NL Repite por cada carta de coste 3+ en tu mano." + }, + "sneckomod:Tsunami": { + "NAME": "Tsunami", + "DESCRIPTION": "Los efectos de sneckomod:Exceso también otorgan !M! de Bloqueo." + }, + "sneckomod:CheapStock": { + "NAME": "Reservas Baratas", + "DESCRIPTION": "Al inicio de tu turno, sneckomod:Confunde la carta de mayor coste en tu mano.", + "UPGRADE_DESCRIPTION": "Al inicio de tu turno, sneckomod:Confusión a las !M! cartas de mayor coste en tu mano." + }, + "sneckomod:Cheat": { + "NAME": "Suerte Pura", + "DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod.", + "UPGRADE_DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod." + }, + "sneckomod:DangerNoodle": { + "NAME": "Serpiente Peligrosa", + "DESCRIPTION": "Haz !D! de daño. NL sneckomod:Confunde a una carta. NL sneckomod:Regalo: coste 3+.", + "DESCRIPTION_BATTLE": "Haz !D! de daño. NL sneckomod:Confunde a una carta." + }, + "sneckomod:Deception": { + "NAME": "Engaño", + "DESCRIPTION": "Obtén !B! de Bloqueo. NL Añade una *Onda *de *Choque a tu mano. NL Agota." + }, + "sneckomod:Defend": { + "NAME": "Defender", + "DESCRIPTION": "Obtén !B! de Bloqueo." + }, + "sneckomod:DefensiveFlair": { + "NAME": "Estilo Defensivo", + "DESCRIPTION": "Obtén !B! de Bloqueo, aumentado en !M! por cada carta sneckomod:Ajena en tu mano. NL sneckomod:Regalo: Poco común.", + "DESCRIPTION_BATTLE": "Obtén !B! de Bloqueo, aumentado en !M! por cada carta sneckomod:Ajena en tu mano." + }, + "sneckomod:DiceBlock": { + "NAME": "Bloqueo de Dados", + "DESCRIPTION": "Obtén !B! de Bloqueo. NL sneckomod:Exceso: obtén !B! de Bloqueo adicional." + }, + "sneckomod:DiceBoulder": { + "NAME": "Roca de Dados", + "DESCRIPTION": "Obtén !B! de Bloqueo. NL Esta carta gana !M! de Bloqueo y su coste aumenta en !qqq! durante este combate." + }, + "sneckomod:DiceCrush": { + "NAME": "Aplastamiento de Dados", + "DESCRIPTION": "Haz !D! de daño. NL sneckomod:Exceso: roba 2 cartas." + }, + "sneckomod:DragonsHoard": { + "NAME": "Tesoro del Dragón", + "DESCRIPTION": "Etérea. NL Gana !M! de Fuerza. NL Gana !M! de Destreza.", + "UPGRADE_DESCRIPTION": "Gana !M! de Fuerza. NL Gana !M! de Destreza." + }, + "sneckomod:FourOfAKind": { + "NAME": "Cuatro Iguales", + "DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod.", + "UPGRADE_DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod." + }, + "sneckomod:GlitteringGambit": { + "NAME": "Apuesta Brillante", + "DESCRIPTION": "Injugable. NL No se puede eliminar del mazo. NL sneckomod:Regalo: Rara Mejorada y !M! de oro.", + "UPGRADE_DESCRIPTION": "Injugable. Etérea. NL No se puede eliminar del mazo. NL sneckomod:Regalo: Rara Mejorada y !M! de oro.", + "DESCRIPTION_BATTLE": "Injugable.", + "UPGRADE_DESCRIPTION_BATTLE": "Injugable. NL Etérea." + }, + "sneckomod:ImmovableObject": { + "NAME": "Objeto Inamovible", + "DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod." + }, + "sneckomod:IronFang": { + "NAME": "Colmillo de Hierro", + "DESCRIPTION": "Haz !D! de daño y aplica !M! de Débil a TODOS los enemigos." + }, + "sneckomod:ImprovisedAttack": { + "NAME": "Ataque Improvisado", + "DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod." + }, + "sneckomod:ImprovisedGuard": { + "NAME": "Guardia Improvisada", + "DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod." + }, + "sneckomod:LuckyBreak": { + "NAME": "Golpe de Suerte", + "DESCRIPTION": "Obtén !B! de Bloqueo. NL Roba !M! carta por cada carta de coste 2+ en tu mano." + }, + "sneckomod:Nope": { + "NAME": "Nel", + "DESCRIPTION": "Obtén !B! de Bloqueo. NL Agota una carta. Si tiene color, obtén una carta aleatoria de la misma clase.", + "UPGRADE_DESCRIPTION": "Obtén !B! de Bloqueo. NL Agota una carta. Si tiene color, obtén una carta aleatoria de la misma clase.", + "EXTENDED_DESCRIPTION": [ + "Agota para Nel." + ] + }, + "sneckomod:SnakeEyes": { + "NAME": "Ojos de Serpiente", + "DESCRIPTION": "Este turno, tu siguiente carta sneckomod:Ajena se juega dos veces. NL sneckomod:Regalo: Habilidad Rara.", + "UPGRADE_DESCRIPTION": "Este turno, tus siguientes 2 cartas sneckomod:Ajenas se juegan dos veces. NL sneckomod:Regalo: Habilidad Rara.", + "DESCRIPTION_BATTLE": "Este turno, tu siguiente carta sneckomod:Ajena se juega dos veces.", + "UPGRADE_DESCRIPTION_BATTLE": "Este turno, tus siguientes 2 cartas sneckomod:Ajenas se juegan dos veces." + }, + "sneckomod:Memorize": { + "NAME": "Memorizar", + "DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod.", + "UPGRADE_DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod." + }, + "sneckomod:MintCondition": { + "NAME": "Como Nueva", + "DESCRIPTION": "sneckomod:Exceso: Obtén !M! de Fuerza." + }, + "sneckomod:MixItUp": { + "NAME": "Revuélvelo", + "DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod." + }, + "sneckomod:MorePower": { + "NAME": "¡Más Poder!", + "DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod." + }, + "sneckomod:Mudshield": { + "NAME": "Escudo de Lodo", + "DESCRIPTION": "Cada vez que se sneckomod:Confunde una carta, obtén !M! de Bloqueo." + }, + "sneckomod:OverwhelmingPresence": { + "NAME": "Presencia Abrumadora", + "DESCRIPTION": "La primera vez que barajes tu mazo cada turno, obtén [E] y roba !M! carta." + }, + "sneckomod:RiskySword": { + "NAME": "Espada Arriesgada", + "DESCRIPTION": "Haz !D! de daño. NL Cuando está sneckomod:Confundida, aumenta el daño de esta carta en !M! durante este combate." + }, + "sneckomod:PoisonParadise": { + "NAME": "Paraíso Tóxico", + "DESCRIPTION": "Los efectos de sneckomod:Exceso también aplican !M! de sneckomod:Tóxico a un enemigo aleatorio." + }, + "sneckomod:PureSnecko": { + "NAME": "Cambio de Forma", + "DESCRIPTION": "Roba !M! cartas y sneckomod:Confundelas." + }, + "sneckomod:QuickBite": { + "NAME": "Mordisco Rápido", + "DESCRIPTION": "Haz !D! de daño. NL sneckomod:Confunde la carta de mayor coste en tu mano." + }, + "sneckomod:QuickMove": { + "NAME": "Movimiento Rápido", + "DESCRIPTION": "Obtén !B! de Bloqueo. NL sneckomod:Exceso: Aplica !M! de Vulnerable a TODOS los enemigos." + }, + "sneckomod:RainOfDice": { + "NAME": "Lluvia de Dados", + "DESCRIPTION": "Haz !D! de daño. NL sneckomod:Confunde una carta, luego añade una *Lluvia *de *Dados a tu mano. NL Agota.", + "UPGRADE_DESCRIPTION": "Haz !D! de daño. NL sneckomod:Confunde una carta, luego añade una *Lluvia *de *Dados+ a tu mano. NL Agota." + }, + "sneckomod:Restock": { + "NAME": "Reabastecer", + "DESCRIPTION": "Descarta tu mano. NL Roba !M! cartas, sneckomod:Confunde tu mano. NL Agota." + }, + "sneckomod:Rotation": { + "NAME": "Rotación", + "DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod.", + "UPGRADE_DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod." + }, + "sneckomod:SerpentBottle": { + "NAME": "Venta con Descuento", + "DESCRIPTION": "Roba !qqq! cartas. NL sneckomod:Confunde una carta. NL Agota.", + "UPGRADE_DESCRIPTION": "Roba !qqq! cartas. NL sneckomod:Confunde !M! cartas. NL Agota." + }, + "sneckomod:SerpentIdol": { + "NAME": "Ídolo Serpiente", + "DESCRIPTION": "Elige 1 de !M! cartas sneckomod:Ajenas aleatorias para obtener. Cuesta 0 este turno. NL Agota." + }, + "sneckomod:SerpentMind": { + "NAME": "Forma Exótica", + "DESCRIPTION": "Etérea. NL Al final de tu turno, gana !M! de Fuerza por cada color único jugado. NL sneckomod:Regalo: Rara.", + "UPGRADE_DESCRIPTION": "Al final de tu turno, gana !M! de Fuerza por cada color único jugado. NL sneckomod:Regalo: Rara.", + "DESCRIPTION_BATTLE": "Al final de tu turno, gana !M! de Fuerza por cada color único jugado." + }, + "sneckomod:SlitherThrough": { + "NAME": "Deslizamiento", + "DESCRIPTION": "Haz !D! de daño. NL Reduce el coste de las cartas sneckomod:Ajenas en tu mano en !M! este turno. NL sneckomod:Regalo: Poco común.", + "DESCRIPTION_BATTLE": "Haz !D! de daño. NL Reduce el coste de las cartas sneckomod:Ajenas en tu mano en !M! este turno." + }, + "sneckomod:SnakeSap": { + "NAME": "Savia de Serpiente", + "DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod." + }, + "sneckomod:SnekBeam": { + "NAME": "Rayo Láser Ocular", + "DESCRIPTION": "Haz !D! de daño. NL Gana [E]." + }, + "sneckomod:SnekBite": { + "NAME": "Mordida Serpiente", + "DESCRIPTION": "Haz !D! de daño. NL sneckomod:Confunde una carta.", + "UPGRADE_DESCRIPTION": "Haz !D! de daño. NL sneckomod:Confunde !M! cartas." + }, + "sneckomod:SoulCleanse": { + "NAME": "Purificación de Alma", + "DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod.", + "UPGRADE_DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod." + }, + "sneckomod:SoulDraw": { + "NAME": "Robo Espiritual", + "DESCRIPTION": "Obtén !M! cartas sneckomod:Ajenas aleatorias. NL Ganan Retiene. NL Agota." + }, + "sneckomod:SoulExchange": { + "NAME": "Intercambio Espiritual", + "DESCRIPTION": "Retiene. NL sneckomod:Confunde tu mano. NL Agota." + }, + "sneckomod:SoulRoll": { + "NAME": "Giro Espiritual", + "DESCRIPTION": "Retiene. NL Obtén !B! de Bloqueo. NL sneckomod:Confunde una carta. NL Agota." + }, + "sneckomod:Strike": { + "NAME": "Golpe", + "DESCRIPTION": "Haz !D! de daño." + }, + "sneckomod:ToothAndClaw": { + "NAME": "Dientes y Garras", + "DESCRIPTION": "Haz !D! de daño. NL Gana una Navaja por cada color único en tu mano. NL sneckomod:Regalo: Poco común.", + "UPGRADE_DESCRIPTION": "Haz !D! de daño. NL Gana una Navaja Mejorada por cada color único en tu mano. NL sneckomod:Regalo: Poco común.", + "DESCRIPTION_BATTLE": "Haz !D! de daño. NL Gana una Navaja por cada color único en tu mano.", + "UPGRADE_DESCRIPTION_BATTLE": "Haz !D! de daño. NL Gana una Navaja Mejorada por cada color único en tu mano." + }, + "sneckomod:TyphoonFang": { + "NAME": "Colmillo de Tifón", + "DESCRIPTION": "Haz !D! de daño. NL sneckomod:Exceso: Este turno, cada vez que tengas Exceso, juega una copia de esta carta." + }, + "sneckomod:Yearn": { + "NAME": "Anhelo", + "DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod." + }, + "sneckomod:TailWhip": { + "NAME": "Latigazo de Cola", + "DESCRIPTION": "Haz !D! de daño. NL sneckomod:Exceso: Aplica !M! de Débil y Vulnerable." + }, + "sneckomod:Transmogrify": { + "NAME": "Transmogrificar", + "DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod.", + "EXTENDED_DESCRIPTION": [ + "No tengo Reliquias que intercambiar.", + "Elige una Reliquia para perder.", + "Pierde ", + " y obtiene otra ", + " Reliquia." + ] + }, + "sneckomod:ToxicPersonality": { + "NAME": "Personalidad Tóxica", + "DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod." + }, + "sneckomod:TrashToTreasure": { + "NAME": "De Basura a Tesoro", + "DESCRIPTION": "Obtén !B! de Bloqueo. NL Agota una carta. NL Gana [E] igual a su coste. NL Agota.", + "UPGRADE_DESCRIPTION": "Obtén !B! de Bloqueo. NL Agota una carta. NL Gana [E] igual a su coste." + }, + "sneckomod:UnendingSupply": { + "NAME": "Suministro Infinito", + "DESCRIPTION": "Al comienzo de cada turno, obtén un gremlin:Eco de una carta sneckomod:Ajena aleatoria.", + "UPGRADE_DESCRIPTION": "Innata. NL Al comienzo de cada turno, obtén un gremlin:Eco de una carta sneckomod:Ajena aleatoria." + }, + "sneckomod:Unknown": { + "NAME": "??? Básica", + "DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod.", + "UPGRADE_DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod." + }, + "sneckomod:Unknown0Cost": { + "NAME": "??? 0 Coste", + "DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod.", + "UPGRADE_DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod." + }, + "sneckomod:Unknown1Cost": { + "NAME": "??? 1 Coste", + "DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod.", + "UPGRADE_DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod." + }, + "sneckomod:Unknown2Cost": { + "NAME": "??? 2 Coste", + "DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod.", + "UPGRADE_DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod." + }, + "sneckomod:Unknown3Cost": { + "NAME": "??? 3 Coste", + "DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod.", + "UPGRADE_DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod." + }, + "sneckomod:UnknownBlock": { + "NAME": "??? Bloqueo", + "DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod.", + "UPGRADE_DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod." + }, + "sneckomod:UnknownBoss": { + "NAME": "??? Jefe", + "DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod.", + "UPGRADE_DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod." + }, + "sneckomod:UnknownClass": { + "NAME": "??? Clase", + "DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod.", + "UPGRADE_DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod." + }, + "sneckomod:UnknownColorless": { + "NAME": "??? Incolora", + "DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod.", + "UPGRADE_DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod." + }, + "sneckomod:UnknownCommonAttack": { + "NAME": "??? Ataque C", + "DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod.", + "UPGRADE_DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod." + }, + "sneckomod:UnknownCommonSkill": { + "NAME": "??? Habilidad C", + "DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod.", + "UPGRADE_DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod." + }, + "sneckomod:UnknownDexterity": { + "NAME": "??? Destreza", + "DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod.", + "UPGRADE_DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod." + }, + "sneckomod:UnknownDraw": { + "NAME": "??? Robo", + "DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod.", + "UPGRADE_DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod." + }, + "sneckomod:UnknownEthereal": { + "NAME": "??? Etérea", + "DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod.", + "UPGRADE_DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod." + }, + "sneckomod:UnknownExhaust": { + "NAME": "??? Agotamiento", + "DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod.", + "UPGRADE_DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod." + }, + "sneckomod:UnknownRareAttack": { + "NAME": "??? Ataque R", + "DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod.", + "UPGRADE_DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod." + }, + "sneckomod:UnknownRarePower": { + "NAME": "??? Poder R", + "DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod.", + "UPGRADE_DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod." + }, + "sneckomod:UnknownRareSkill": { + "NAME": "??? Habilidad R", + "DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod.", + "UPGRADE_DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod." + }, + "sneckomod:UnknownStrength": { + "NAME": "??? Fuerza", + "DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod.", + "UPGRADE_DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod." + }, + "sneckomod:UnknownStrike": { + "NAME": "??? Golpe", + "DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod.", + "UPGRADE_DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod." + }, + "sneckomod:UnknownUncommonAttack": { + "NAME": "??? Ataque U", + "DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod.", + "UPGRADE_DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod." + }, + "sneckomod:UnknownUncommonPower": { + "NAME": "??? Poder U", + "DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod.", + "UPGRADE_DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod." + }, + "sneckomod:UnknownUncommonSkill": { + "NAME": "??? Habilidad U", + "DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod.", + "UPGRADE_DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod." + }, + "sneckomod:UnknownVulnerable": { + "NAME": "??? Vulnerable", + "DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod.", + "UPGRADE_DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod." + }, + "sneckomod:UnknownWeak": { + "NAME": "??? Débil", + "DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod.", + "UPGRADE_DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod." + }, + "sneckomod:UnknownX": { + "NAME": "??? Coste X", + "DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod.", + "UPGRADE_DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod." + }, + "sneckomod:UnlimitedRolls": { + "NAME": "Tiradas Ilimitadas", + "DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod.", + "UPGRADE_DESCRIPTION": "Esta carta no debería aparecer en una partida. NL Si estás leyendo esto, probablemente encontraste un error. NL Por favor, repórtalo a los desarrolladores del mod.", + "EXTENDED_DESCRIPTION": [ + "NOTA PARA LOCALIZACIÓN: Puedes copiar esto tal cual para todas estas cartas eliminadas." + ] + }, + "sneckomod:Behold": { + "NAME": "¡Contempla!", + "DESCRIPTION": "Haz !D! de daño. NL sneckomod:Exceso: Gana !M! Navajas.", + "UPGRADE_DESCRIPTION": "Haz !D! de daño. NL sneckomod:Exceso: Gana !M! Navajas." + }, + "sneckomod:SaveForLater": { + "NAME": "Guardar para Después", + "DESCRIPTION": "Haz !D! de daño. NL Retiene !M! carta al final de tu turno.", + "UPGRADE_DESCRIPTION": "Haz !D! de daño. NL Retiene !M! cartas al final de tu turno." + }, + "sneckomod:PowerShot": { + "NAME": "Disparo Potente", + "DESCRIPTION": "Haz !D! de daño. Cada vez que juegues un Poder, mueve esta carta de tu pila de descarte a tu mano." + }, + "sneckomod:LilGuardian": { + "NAME": "Mini Guardián", + "DESCRIPTION": "Gana !B! Bloqueo. Cada vez que juegues una carta que cueste 2 o más, juega esta carta desde tu mano." + }, + "sneckomod:CrystalBoomerang": { + "NAME": "Bumerán de Cristal", + "DESCRIPTION": "Pon una carta de la pila de descarte en tu mano. NL Si es sneckomod:Ajena, gana !B! Bloqueo." + }, + "sneckomod:ViperEssence": { + "NAME": "Esencia de Víbora", + "DESCRIPTION": "Etérea. NL sneckomod:Ajena. NL Gana !M! de Fuerza." + }, + "sneckomod:Amass": { + "NAME": "Acumular", + "DESCRIPTION": "Gana !B! Bloqueo. NL Obtiene Bloqueo adicional igual al coste total en [E] de tu mano.", + "UPGRADE_DESCRIPTION": "Gana !B! Bloqueo. NL Obtiene Bloqueo adicional igual al doble del coste total en [E] de tu mano." + }, + "sneckomod:Medusa": { + "NAME": "Medusa", + "DESCRIPTION": "Haz !D! de daño. NL Aplica !M! sneckomod:Tóxico. NL sneckomod:Regalo: Desventaja Común.", + "DESCRIPTION_BATTLE": "Haz !D! de daño. NL Aplica !M! sneckomod:Tóxico." + }, + "sneckomod:Cower": { + "NAME": "Encogerse", + "DESCRIPTION": "Gana !B! Bloqueo. NL Añade un *Esconderse a tu mano. NL Agota.", + "UPGRADE_DESCRIPTION": "Gana !B! Bloqueo. NL Añade un *Esconderse+ a tu mano. NL Agota." + }, + "sneckomod:WideSting": { + "NAME": "Picadura Amplia", + "DESCRIPTION": "Haz !D! de daño a TODOS los enemigos. NL Mejora todas las cartas sneckomod:Ajenas en tu mano. NL sneckomod:Regalo: Común.", + "DESCRIPTION_BATTLE": "Haz !D! de daño a TODOS los enemigos. NL Mejora todas las cartas sneckomod:Ajenas en tu mano." + }, + "sneckomod:GildedShield": { + "NAME": "Escudo Dorado", + "DESCRIPTION": "Gana !B! Bloqueo. NL sneckomod:Confunde esta carta y luego devuélvela a tu mano." + }, + "sneckomod:Mesmerize": { + "NAME": "Hipnotizar", + "DESCRIPTION": "TODOS los enemigos pierden !M! de Fuerza. NL sneckomod:Confunde una carta. NL Agota." + }, + "sneckomod:Serpentscale": { + "NAME": "Escama de Serpiente", + "DESCRIPTION": "Haz !D! de daño. NL Gana 1 expansioncontent:Placas. NL sneckomod:Exceso: Gana !M! *Armadura *de *Placas en su lugar." + }, + "sneckomod:OtherworldlySlash": { + "NAME": "Tajo de Otro Mundo", + "DESCRIPTION": "Haz !D! de daño. NL Si jugaste una carta sneckomod:Ajena este turno, hace !D! de daño nuevamente. NL sneckomod:Regalo: Común.", + "DESCRIPTION_BATTLE": "Haz !D! de daño. NL Si jugaste una carta sneckomod:Ajena este turno, hace !D! de daño nuevamente." + }, + "sneckomod:BeyondArmor": { + "NAME": "Armadura del Más Allá", + "DESCRIPTION": "Gana !B! Bloqueo. NL Mueve !M! cartas sneckomod:Ajenas aleatorias de tu mazo en tu mano. NL sneckomod:Regalo: Común.", + "DESCRIPTION_BATTLE": "Gana !B! Bloqueo. NL Mueve !M! cartas sneckomod:Ajenas aleatorias de tu mazo en tu mano." + }, + "sneckomod:BlunderGuard": { + "NAME": "Guardia Torpe", + "DESCRIPTION": "Cada vez que juegues una carta que cueste 3+, gana !qqq! Bloqueo y !M! de Fuerza.", + "UPGRADE_DESCRIPTION": "Cada vez que juegues una carta que cueste 3+, gana !qqq! Bloqueo y !M! de Fuerza." + }, + "sneckomod:WideAngle": { + "NAME": "Gran Ángulo", + "DESCRIPTION": "Retiene. NL Haz !D! de daño a TODOS los enemigos." + }, + "sneckomod:SerpentsNest": { + "NAME": "Nido de Serpientes", + "DESCRIPTION": "Cada vez que juegues un Poder, hace !M! de daño a TODOS los enemigos. NL sneckomod:Regalo: Poder Poco Común.", + "DESCRIPTION_BATTLE": "Cada vez que juegues un Poder, hace !M! de daño a TODOS los enemigos." + }, + "sneckomod:Whack": { + "NAME": "¡Guamazo!", + "DESCRIPTION": "Haz !D! de daño. NL Añade un *Zasca a tu mano. NL Agota.", + "UPGRADE_DESCRIPTION": "Haz !D! de daño. NL Añade un *Zasca+ a tu mano. NL Agota." + }, + "sneckomod:CobraCoil": { + "NAME": "Espiral de Cobra", + "DESCRIPTION": "Haz !D! de daño. NL Aplica !M! expansioncontent:Restringido. NL sneckomod:Regalo: Ataque Raro." + }, + "sneckomod:Belittle": { + "NAME": "Menospreciar", + "DESCRIPTION": "El enemigo pierde !M! de PV por cada desventaja único que tenga. NL sneckomod:Regalo: Desventaja Poco Común.", + "DESCRIPTION_BATTLE": "El enemigo pierde !M! de PV por cada desventaja único que tenga." + }, + "sneckomod:Jackpot": { + "NAME": "Gran Premio", + "DESCRIPTION": "Retiene. NL Gana [E] [E]. NL Agota.", + "UPGRADE_DESCRIPTION": "Retiene. NL Gana [E] [E] [E]. NL Agota." + }, + "sneckomod:MakeshiftBlade": { + "NAME": "Hoja Improvisada", + "DESCRIPTION": "Haz !D! de daño. Si el objetivo tiene al menos !M! desventajas, roba !qqq! cartas. NL sneckomod:Regalo: Desventaja.", + "DESCRIPTION_BATTLE": "Haz !D! de daño. Si el objetivo tiene al menos !M! desventajas, roba !qqq! cartas." + }, + "sneckomod:LatchOn": { + "NAME": "Aferrarse", + "DESCRIPTION": "Haz !D! de daño a TODOS los enemigos. NL Añade un *Esencia *de *Víbora a tu mano." + }, + "sneckomod:ComboString": { + "NAME": "Cadena de Combos", + "DESCRIPTION": "Haz !D! de daño por cada carta sneckomod:Ajena jugada este turno. NL sneckomod:Regalo: Poco Común.", + "EXTENDED_DESCRIPTION": [ + " NL (golpea ", + " x veces.)" + ], + "DESCRIPTION_BATTLE": "Haz !D! de daño por cada carta sneckomod:Ajena jugada este turno." + }, + "sneckomod:ThrowingCards": { + "NAME": "Cartas Arrojadizas", + "DESCRIPTION": "Añade X copias de *Velocidad *de *la *luz a tu mano. NL Gana [E]. NL Agota.", + "UPGRADE_DESCRIPTION": "Añade X copias de *Velocidad *de *la *luz+ a tu mano. NL Gana [E]. NL Agota." + }, + "sneckomod:RoundaboutSwing": { + "NAME": "Golpe Redondo", + "DESCRIPTION": "Haz !D! de daño. NL Coloca una carta de tu mano en la cima del mazo. NL Roba !M! cartas adicionales en tu siguiente turno." + }, + "sneckomod:MarkedCard": { + "NAME": "Carta Marcada", + "DESCRIPTION": "Retiene. NL sneckomod:Confunde una carta. NL Será más barata. NL Agota.", + "UPGRADE_DESCRIPTION": "Retiene. NL sneckomod:Confunde !M! cartas. NL Siempre serán más baratas. NL Agota." + }, + "sneckomod:InertBlade": { + "NAME": "Hoja Inerte", + "DESCRIPTION": "Haz !D! de daño. NL Si esta carta cuesta... NL 1+: Roba !M! cartas. NL 2+: Gana !M! de Fuerza. NL 3+: Gana [E].", + "UPGRADE_DESCRIPTION": "Haz !D! de daño. NL Si esta carta cuesta... NL 1+: Roba !M! cartas. NL 2+: Gana !M! de Fuerza. NL 3+: Gana [E] [E]." + }, + "sneckomod:PerpetualSerpent": { + "NAME": "Serpiente Perpetua", + "DESCRIPTION": "Haz !D! de daño. NL sneckomod:Exceso: Gana [E] [E]." + }, + "sneckomod:LastStrike": { + "NAME": "Golpe Final", + "DESCRIPTION": "Haz !D! de daño. NL Repite por cada *Golpe único jugado en este combate. NL sneckomod:Regalo: Golpe.", + "UPGRADE_DESCRIPTION": "Haz !D! de daño. NL Repite por cada *Golpe único jugado en este combate. NL sneckomod:Regalo: Golpe.", + "DESCRIPTION_BATTLE": "Haz !D! de daño. NL Repite por cada *Golpe único jugado en este combate.", + "UPGRADE_DESCRIPTION_BATTLE": "Haz !D! de daño. NL Repite por cada *Golpe único jugado en este combate.", + "EXTENDED_DESCRIPTION": [ + " NL (golpea ", + " veces extra.)" + ] + }, + "sneckomod:AceOfWands": { + "NAME": "Reina de Pentáculos", + "DESCRIPTION": "Etérea. NL Cuando apliques una desventaja a un enemigo, gana !M! de Bloqueo. NL sneckomod:Regalo: Desventaja.", + "UPGRADE_DESCRIPTION": "Cuando apliques una desventaja a un enemigo, gana !M! de Bloqueo. NL sneckomod:Regalo: Desventaja." + }, + "sneckomod:FlashInThePan": { + "NAME": "Chispa Fugaz", + "DESCRIPTION": "Gana !B! Bloqueo. NL Descarta tu mano. NL Roba esa misma cantidad de cartas en tu siguiente turno." + }, + "sneckomod:TrashCan": { + "NAME": "Bote de Basura", + "DESCRIPTION": "Al inicio de tu turno, puedes Agotar una carta.", + "UPGRADE_DESCRIPTION": "Innato. NL Al inicio de tu turno, puedes Agotar una carta." + }, + "sneckomod:Lacerate": { + "NAME": "Lacerar", + "DESCRIPTION": "Haz !D! de daño. Cuando este enemigo reciba una desventaja este turno, gana !M! sneckomod:Tóxico. sneckomod:Regalo: *Veneno *Paralizador.", + "DESCRIPTION_BATTLE": "Haz !D! de daño. Cuando este enemigo reciba una desventaja este turno, gana !M! sneckomod:Tóxico." + }, + "sneckomod:SerpentineSleuth": { + "NAME": "Sabueso Serpentino", + "DESCRIPTION": "Etérea. NL Cuando juegues un Poder, gana [E]. NL sneckomod:Regalo: Poder Raro.", + "UPGRADE_DESCRIPTION": "Etérea. NL Cuando juegues un Poder, gana [E] [E]. NL sneckomod:Regalo: Poder Raro.", + "DESCRIPTION_BATTLE": "Etérea. NL Cuando juegues un Poder, gana [E].", + "UPGRADE_DESCRIPTION_BATTLE": "Etérea. NL Cuando juegues un Poder, gana [E] [E]." +} +} \ No newline at end of file diff --git a/src/main/resources/sneckomodResources/localization/spa/CharacterStrings.json b/src/main/resources/sneckomodResources/localization/spa/CharacterStrings.json new file mode 100644 index 000000000..7bc18fe56 --- /dev/null +++ b/src/main/resources/sneckomodResources/localization/spa/CharacterStrings.json @@ -0,0 +1,13 @@ +{ + "sneckomod:theSnecko": { + "NAMES": [ + "Serpentija", + "serpentija" + ], + "TEXT": [ + "Una criatura serpentina, originaria de la Ciudad. NL Conocida por una mirada que confunde a sus depredadores.", + "NL Sssssssss....", + "Al caminar por una calle oscura, te topas con varias figuras encapuchadas en medio de un ritual oscuro. Al acercarte, se giran hacia ti al unísono con una inquietante sincronía. La más alta de ellas muestra unos colmillos afilados y extiende una mano pálida y alargada hacia ti. NL ~\"Únete~ ~a~ ~nosotros,~ ~amigo~ ~serpiente,~ ~y~ ~siente~ ~el~ ~calor~ ~de~ ~la~ ~Aguja.\"~" + ] + } +} diff --git a/src/main/resources/sneckomodResources/localization/spa/EventStrings.json b/src/main/resources/sneckomodResources/localization/spa/EventStrings.json new file mode 100644 index 000000000..a160483c2 --- /dev/null +++ b/src/main/resources/sneckomodResources/localization/spa/EventStrings.json @@ -0,0 +1,53 @@ +{ + "sneckomod:D8": { + "NAME": "Octaedro Místico", + "DESCRIPTIONS": [ + "A través de la niebla, llegas a un espacio tranquilo. En el centro de las ruinas, un #goctaedro #gmisterioso flota en silencio. Gira lentamente, con su superficie #b~brillando~ #b~débilmente,~ como si fuera algún tipo de #y~artefacto~ #y~primordial.~ NL Mientras extiendes la mano para tocarlo, el octaedro #b~de pronto~ #b~se~ #b~ilumina,~ y unos intrincados símbolos recorren su superficie en una corriente de luz. Sientes un #r@leve@ #r@temblor@ emergiendo del suelo, el aire se vuelve más #pdenso, y todo parece contener el aliento, esperando tu decisión. Decides...", + "La reliquia explotó.", + "Obtuviste la reliquia.", + "Decidiste marcharte." + ], + "OPTIONS": [ + "[Romper] #rPierdes #r", + " #rPV. #gElige #b1 de #b3 Cartas #yAjena Raras para obtener.", + "[Tomar] #gObtén el #gOctaedro #gMístico. #rMaldito #r- #rDolor.", + "[Marcharte]", + "[Bloqueado] Requiere una carta con Exceso." + ] + }, + "sneckomod:BackToBasics": { + "NAME": "", + "DESCRIPTIONS": [ + "La creatividad triunfa sobre la planificación siempre." + ], + "OPTIONS": [ + "[Improvisar] #gReemplaza todos los #gGolpes y #gDefensas por versiones #rAjenas.", + "[Bloqueado] Requiere un Golpe o Defensa." + ] + }, + "sneckomod:Serpent": { + "NAME": "La Ssssserpiente", + "DESCRIPTIONS": [ + "Entras a una sala y encuentras un gran agujero en el suelo. Al acercarte, una enorme criatura escamosa, no muy distinta a ti, emerge del interior. NL NL ~\"¡Hooooo!~ ¡Hola, amig@ serpiente!~ Déjame preguntarte algo... NL NL Escuchas que la serpiente dice palabras, pero no entiendes nada. Tu mente se confunde por completo. NL NL \"¿Estás de acuerdo?\"", + "~\"¡Excelente!\"~ NL NL Aún sin tener idea de qué fue la pregunta, parece que alegraste el día de la serpiente. Te entrega una baratija para ayudarte en tu misión y se desliza de vuelta al agujero.", + "La serpiente te observa con gran decepción... pero finalmente sonríe y te desea suerte en tu travesía." + ], + "OPTIONS": [ + "[Aceptar] #gObtén una #gReliquia #gde #gSerpentija. #rMaldito #r- #rConfusión.", + "[Rechazar]", + "[Marcharte]" + ] + }, + "sneckomod:SuspiciousHouse": { + "NAME": "Casa Sospechosa", + "DESCRIPTIONS": [ + "Mientras atraviesas la ciudad, un chillido agudo e inhumano atrae tu atención hacia una casa cercana. Dentro, encuentras a un habitante de la Ciudad intentando silenciar a una criatura serpentina atrapada en una jaula. NL NL ~\"¡¿TÚ QUÉ HACES AQUÍ?! @¡FUERA@ @DE@ @MI@ @CASA!\"@ NL NL La criatura salta al fondo de la jaula, visiblemente asustada.", + "\"¿La quieres? @¡Está@ @bien!@ No vale la pena el problema.\" NL NL Con un ~suspiro~ frustrado, el sujeto abre la jaula. La criatura le muerde el dedo en un instante. Antes de que reaccione, le das un buen #rgolpe y lo dejas inconsciente. La criatura se sube felizmente a tu mano. A partir de ahora, te acompaña en la travesía. La llamarás... #y'Clementina'.", + "La serpiente te observa con una mezcla de decepción y resignación... pero finalmente te desea suerte." + ], + "OPTIONS": [ + "[Rescatar] #gObtén a la #gSerpentija #gJoven. #rPelea contra un #rCenturión #rEnojado.", + "[Marcharte]" + ] + } +} diff --git a/src/main/resources/sneckomodResources/localization/spa/KeywordStrings.json b/src/main/resources/sneckomodResources/localization/spa/KeywordStrings.json new file mode 100644 index 000000000..5023b7a2f --- /dev/null +++ b/src/main/resources/sneckomodResources/localization/spa/KeywordStrings.json @@ -0,0 +1,81 @@ +[ + { + "PROPER_NAME": "Snekproof", + "NAMES": [ + "snekproof" + ], + "DESCRIPTION": "Las cartas Snekproof no se ven afectadas por #yConfusión y no pueden ser #yMezcladas. NOTA: No se utiliza. NO TRADUCIR." + }, + { + "PROPER_NAME": "Suit", + "NAMES": [ + "suit", + "suits" + ], + "DESCRIPTION": "Los Palos se refieren al color de la carta. Las cartas de tipo token no cuentan como Palos. NOTA: No se utiliza. NO TRADUCIR." + }, + { + "PROPER_NAME": "Exceso", + "NAMES": [ + "overflow", + "exceso" + ], + "DESCRIPTION": "Los efectos de Exceso se activan si tienes más de #b5 cartas en la mano." + }, + { + "PROPER_NAME": "Confusión", + "NAMES": [ + "muddle", + "muddled", + "muddles", + "confusión", + "confundida", + "confundidas", + "confunde", + "confundelas" + ], + "DESCRIPTION": "Confundir una carta cambia su coste este turno a un valor aleatorio entre #b0 y #b3." + }, + { + "PROPER_NAME": "Ajena", + "NAMES": [ + "offclass", + "ajena", + "ajenos", + "ajeno", + "ajenas" + ], + "DESCRIPTION": "Una carta Ajena es cualquier carta obtenible de otra clase distinta a la tuya (incluyendo cartas Incoloras, Maldiciones y Estados)." + }, + { + "PROPER_NAME": "Regalo", + "NAMES": [ + "gift", + "regalo" + ], + "DESCRIPTION": "Cuando obtienes esta carta, recibes una recompensa con una carta del tipo especificado." + }, + { + "PROPER_NAME": "Identify", + "NAMES": [ + "identify" + ], + "DESCRIPTION": "Reemplaza una carta #yNo Identificada con su carta actual aleatoria de forma permanente. NOTA: No se utiliza. NO TRADUCIR." + }, + { + "PROPER_NAME": "Tóxico", + "NAMES": [ + "venom", + "tóxico" + ], + "DESCRIPTION": "Las criaturas con #yTóxico pierden PV siempre que reciben una desventaja que no sea #yTóxico." + }, + { + "PROPER_NAME": "Suertudo", + "NAMES": [ + "lucky", + "suertudo" + ], + "DESCRIPTION": "Los efectos de Exceso se activan este turno sin importar la cantidad de cartas en mano." + } +] diff --git a/src/main/resources/sneckomodResources/localization/spa/MonsterStrings.json b/src/main/resources/sneckomodResources/localization/spa/MonsterStrings.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/src/main/resources/sneckomodResources/localization/spa/MonsterStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/sneckomodResources/localization/spa/OrbStrings.json b/src/main/resources/sneckomodResources/localization/spa/OrbStrings.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/src/main/resources/sneckomodResources/localization/spa/OrbStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/sneckomodResources/localization/spa/PotionStrings.json b/src/main/resources/sneckomodResources/localization/spa/PotionStrings.json new file mode 100644 index 000000000..a72e4ca86 --- /dev/null +++ b/src/main/resources/sneckomodResources/localization/spa/PotionStrings.json @@ -0,0 +1,32 @@ +{ + "sneckomod:DiceRollPotion": { + "NAME": "Carta Embotellada", + "DESCRIPTIONS": [ + "Úsala en combate para añadir #b", + " recompensa de carta con #b3 cartas #yAjenas #yPoco #yComunes #yMejoradas a las recompensas de la sala.", + " recompensas de carta con #b3 cartas #yAjenas #yPoco #yComunes #yMejoradas a las recompensas de la sala." + ] + }, + "sneckomod:CheatPotion": { + "NAME": "Suerte Líquida", + "DESCRIPTIONS": [ + "Los efectos de #yExceso se activan este turno sin importar el tamaño de tu mano.", + "Los efectos de #yExceso se activan durante #b", + " turnos sin importar el tamaño de tu mano." + ] + }, + "sneckomod:MuddlingPotion": { + "NAME": "Bebida Energética Picante", + "DESCRIPTIONS": [ + "#yConfunde las #b", + " cartas de mayor coste en tu mano. Estas cartas #yConfundidas no podrán costar #b3 [REMOVE_SPACE]." + ] + }, + "sneckomod:OffclassReductionPotion": { + "NAME": "Bebida Exótica", + "DESCRIPTIONS": [ + "Reduce el coste de las cartas #yAjenas en tu mano en #b", + " [REMOVE_SPACE]." + ] + } +} diff --git a/src/main/resources/sneckomodResources/localization/spa/PowerStrings.json b/src/main/resources/sneckomodResources/localization/spa/PowerStrings.json new file mode 100644 index 000000000..d05263251 --- /dev/null +++ b/src/main/resources/sneckomodResources/localization/spa/PowerStrings.json @@ -0,0 +1,194 @@ +{ + "sneckomod:BlunderGuardPower": { + "NAME": "Tsunami", + "DESCRIPTIONS": [ + "Los efectos de #yExceso también otorgan #b", + " de #yBloqueo [REMOVE_SPACE].", + " de #yBloqueo [REMOVE_SPACE]." + ] + }, + "sneckomod:CheapStockPower": { + "NAME": "Acciones Baratas", + "DESCRIPTIONS": [ + "Al comienzo de tu turno, #yConfunde la carta de mayor costo en tu mano.", + "Al comienzo de tu turno, #yConfunde la carta de mayor costo en tu mano #b", + " veces." + ] + }, + "sneckomod:CheatPower": { + "NAME": "Trampa", + "DESCRIPTIONS": [ + "Este turno, las cartas con efecto de #yExceso siempre lo activan al jugarse.", + "Durante los próximos #b", + " turnos, las cartas con efecto de #yExceso siempre lo activan al jugarse." + ] + }, + "sneckomod:MuddleDrawnCardsPower": { + "NAME": "Confundir Robadas", + "DESCRIPTIONS": [ + "#yConfunde la próxima carta que robes.", + "#yConfunde las primeras #b", + " cartas robadas este turno. (quedan ", + ")" + ] + }, + "sneckomod:MudshieldPower": { + "NAME": "Escudo de Lodo", + "DESCRIPTIONS": [ + "Cada vez que #yConfundas una carta, obtén #b", + " de #yBloqueo [REMOVE_SPACE]." + ] + }, + "sneckomod:OverwhelmingPresencePower": { + "NAME": "Presencia Abrumadora", + "DESCRIPTIONS": [ + "La primera vez que barajes tu mazo en cada turno, gana [E] y roba #b1 carta.", + "La primera vez que barajes tu mazo en cada turno, gana ", + " [E] y roba #b", + " cartas." + ] + }, + "sneckomod:SerpentsNestPower": { + "NAME": "Nido de Serpientes", + "DESCRIPTIONS": [ + "Cada vez que juegues una carta de #yPoder, inflige 1 de daño a TODOS los enemigos.", + "Cada vez que juegues una carta de #yPoder, inflige #b", + " de daño a TODOS los enemigos." + ] + }, + "sneckomod:SerpentMindPower": { + "NAME": "Forma Exótica", + "DESCRIPTIONS": [ + "Al final de tu turno, gana #b", + " de #yFuerza por cada color único jugado este turno.", + " de #yFuerza por cada color único jugado este turno." + ] + }, + "sneckomod:SnakeEyesPower": { + "NAME": "Ojos de Serpiente", + "DESCRIPTIONS": [ + "Tu próxima carta #yAjena se juega dos veces este turno.", + "Tus próximas #b", + " cartas #yAjenas se juegan dos veces este turno." + ] + }, + "sneckomod:UnendingSupplyPower": { + "NAME": "Suministro Infinito", + "DESCRIPTIONS": [ + "Al comienzo de tu turno, añade #b", + "Al comienzo de tu turno, añade un #yEco de una carta #yAjena aleatoria a tu mano.", + " #yEcos de cartas #yAjenas aleatorias a tu mano." + ] + }, + "sneckomod:UnknownUpgradedPostCombatPower": { + "NAME": "Post-Combat Upgraded Unidentified", + "DESCRIPTIONS": [ + "At the end of combat, obtain #b", + " additional #yUpgraded #yUnidentified cards.", + " additional #yUpgraded #yUnidentified card.", + "NOTE FOR LOC: NOT USED DO NOT TRANSLATE." + + ] + }, + "sneckomod:UnlimitedRollsPower": { + "NAME": "Tiradas Ilimitadas", + "DESCRIPTIONS": [ + "Al comienzo de tu turno, obtén un #yGiro #yEspiritual+ con #yAgotar [REMOVE_SPACE]." + ] + }, + "sneckomod:Transmogrifying": { + "NAME": "Transmogrifying", + "DESCRIPTIONS": [ + " is being transformed into another ", + " relic.", + "NOTE FOR LOC: NOT USED DO NOT TRANSLATE." + ] + }, + "sneckomod:ToxicPersonalityPower": { + "NAME": "Toxic Personality", + "DESCRIPTIONS": [ + "Whenever you apply a debuff to an enemy, apply #b", + " #yVenom [REMOVE_SPACE].", + "NOTE FOR LOC: NOT USED DO NOT TRANSLATE." + ] + }, + "sneckomod:TyphoonPower": { + "NAME": "Tifón", + "DESCRIPTIONS": [ + "Este turno, cada vez que actives #yExceso [REMOVE_SPACE], juega una copia de #yColmillo #yTifón [REMOVE_SPACE].", + "Este turno, cada vez que actives #yExceso [REMOVE_SPACE], juega #b", + " copias de #yColmillo #yTifón [REMOVE_SPACE]." + ] + }, + "sneckomod:TyphoonPlusPower": { + "NAME": "Tifón+", + "DESCRIPTIONS": [ + "Este turno, cada vez que actives #yExceso [REMOVE_SPACE], juega una copia de #yColmillo #yTifón+ [REMOVE_SPACE].", + "Este turno, cada vez que actives #yExceso [REMOVE_SPACE], juega #b", + " copias de #yColmillo #yTifón+ [REMOVE_SPACE]." + ] + }, + "sneckomod:SerpentineSleuthPower": { + "NAME": "Sabuesa Serpentina", + "DESCRIPTIONS": [ + "Cada vez que juegues una carta de #yPoder, gana #b", + " [E] .", + " [E] ." + ] + }, + "sneckomod:BigGunsStrengthPower": { + "NAME": "Armas Pesadas", + "DESCRIPTIONS": [ + "Cada vez que juegues una carta que cueste 3 o más, gana #b", + " de #yFuerza [REMOVE_SPACE].", + " de #yFuerza [REMOVE_SPACE]." + ] + }, + "sneckomod:BigGunsBlockPower": { + "NAME": "Guardia Torpe", + "DESCRIPTIONS": [ + "Cada vez que juegues una carta que cueste 3 o más, gana #b", + " de #yBloqueo [REMOVE_SPACE].", + " de #yBloqueo [REMOVE_SPACE]." + ] + }, + "sneckomod:AceOfWandsPower": { + "NAME": "Reina de Pentáculos", + "DESCRIPTIONS": [ + "Cada vez que apliques una Desventaja a un enemigo, gana #b", + " de #yBloqueo [REMOVE_SPACE].", + " de #yBloqueo [REMOVE_SPACE]." + ] + }, + "sneckomod:LacerateDebuff": { + "NAME": "Lacerar", + "DESCRIPTIONS": [ + "Cada vez que apliques una Desventaja a este enemigo este turno, aplícale #b", + " de #yTóxico.", + " de #yTóxico." + ] + }, + "sneckomod:FountainPower": { + "NAME": "Fuente", + "DESCRIPTIONS": [ + "Los efectos de #yExceso también aplican #b", + " de #yTóxico a un enemigo aleatorio.", + " de #yTóxico a un enemigo aleatorio." + ] + }, + "sneckomod:TrashCanPower": { + "NAME": "Bote de Basura", + "DESCRIPTIONS": [ + "Al comienzo de tu turno, puedes #yAgotar una carta.", + "Al comienzo de tu turno, puedes #yAgotar hasta #b", + " cartas." + ] + }, + "sneckomod:VenomDebuff": { + "NAME": "Tóxico", + "DESCRIPTIONS": [ + "Cada vez que esta criatura reciba una Desventaja que no sea #yTóxico, pierde #b", + " de PV." + ] + } +} diff --git a/src/main/resources/sneckomodResources/localization/spa/RelicStrings.json b/src/main/resources/sneckomodResources/localization/spa/RelicStrings.json new file mode 100644 index 000000000..23904c7e0 --- /dev/null +++ b/src/main/resources/sneckomodResources/localization/spa/RelicStrings.json @@ -0,0 +1,120 @@ +{ + "sneckomod:SneckoSoul": { + "NAME": "Alma de Serpentija", + "FLAVOR": "0...3...2...2...1", + "DESCRIPTIONS": [ + "Al comienzo de cada combate, añade un #yGiro #yEspiritual a tu mano." + ] + }, + "sneckomod:SuperSneckoSoul": { + "NAME": "Alma de Serpentija Súper", + "FLAVOR": "3120231321230320", + "DESCRIPTIONS": [ + "Reemplaza [#407B93]Alma [#407B93]de [#407B93]Serpentija[]. NL Al comienzo de cada combate y cada dos turnos, obtienes un #yGiro #yEspiritual [REMOVE_SPACE]. NL En los otros turnos, roba una carta adicional al comienzo de tu turno y la #ysneckomod:Confunde." + ] + }, + "sneckomod:CleanMud": { + "NAME": "Flauta del Encantador", + "FLAVOR": "Sssssss...", + "DESCRIPTIONS": [ + "Las cartas #ysneckomod:Confundidas no pueden costar #b3 [REMOVE_SPACE]." + ] + }, + "sneckomod:ConfusingCodex": { + "NAME": "Anillo de la Serpentija", + "FLAVOR": "Ilegible, inentendible, entrega el jueves.", + "DESCRIPTIONS": [ + "Cada vez que actives #b3 efectos de #ysneckomod:Exceso, aplica #b1 #yDébil y #yVulnerable a un enemigo aleatorio." + ] + }, + "sneckomod:CrystallizedMud": { + "NAME": "Colgante Hipnótico", + "FLAVOR": "Barro deslumbrante.", + "DESCRIPTIONS": [ + "Obtén [E] al comienzo de tu turno. Las cartas #ysneckomod:Confundidas no pueden costar #b0." + ] + }, + "sneckomod:LoadedDie": { + "NAME": "Dado Cargado", + "FLAVOR": "Relleno de queso.", + "DESCRIPTIONS": [ + "Cada vez que una carta sea #ysneckomod:Confundida, obtén #b1 de #yBloqueo [REMOVE_SPACE]." + ] + }, + "sneckomod:RareBoosterPack": { + "NAME": "Caja de Refuerzo Rara", + "FLAVOR": "En estado impecable.", + "DESCRIPTIONS": [ + "Al obtener esta reliquia, recibe una carta #ysneckomod:Ajena #yRara." + ] + }, + "sneckomod:SleevedAce": { + "NAME": "As Bajo la Manga", + "FLAVOR": "Todos somos ases.", + "DESCRIPTIONS": [ + "Al comienzo de cada combate, obtén una #yCarta #yMarcada [REMOVE_SPACE]." + ] + }, + "sneckomod:UnknownEgg": { + "NAME": "Huevo No Identificado", + "FLAVOR": "¿Qué saldrá? Paga $1000 para averiguarlo.", + "DESCRIPTIONS": [ + "Cada vez que añadas una carta #ysneckomod:Ajena a tu mazo, #yMejórala. Al obtener esta reliquia, #yMejora #b2 cartas #ysneckomod:Ajenas aleatorias." + ] + }, + "sneckomod:SuperSneckoEye": { + "NAME": "Ojo de Serpentija Súper", + "FLAVOR": "0121012", + "DESCRIPTIONS": [ + "Reemplaza al #yOjo #yde #ySerpentija. Al comienzo de tu turno, roba #b4 cartas adicionales. Comienza cada combate con #yConfusión." + ] + }, + "sneckomod:SneckoTalon": { + "NAME": "Ídolo de Retromation", + "FLAVOR": "También llamado Ídolo de Reto.", + "DESCRIPTIONS": [ + "Al comienzo de tu turno, reduce en #b1 el costo de una carta aleatoria en tu mano que cueste al menos #b1 durante este turno." + ] + }, + "sneckomod:BlankCard": { + "NAME": "Carta en Blanco", + "FLAVOR": "Mímica de cartas.", + "DESCRIPTIONS": [ + "Al comienzo de cada combate, añade un #ygremlin:Eco de una carta aleatoria que #rno sea #rMaldición [REMOVE_SPACE], ni #yEstado de tu mazo a tu mano. Cuesta #b0 [REMOVE_SPACE]." + ] + }, + "sneckomod:D8": { + "NAME": "Octaedro Místico", + "FLAVOR": "Parece estar cargado hacia un lado.", + "DESCRIPTIONS": [ + "Al obtener esta reliquia, elige una carta con efecto de #ysneckomod:Exceso. Cada vez que la juegues, obtén #b4 de #yBloqueo y activa su efecto de #yExceso incluso si no tienes más de #b5 cartas en la mano.", + "Elige una carta para ", + "Cada vez que se juegue ", + ", obtén #b4 de #yBloqueo y activa su efecto de #ysneckomod:Exceso incluso si no tienes más de #b5 cartas en la mano." + ] + }, + "sneckomod:BabySnecko": { + "NAME": "Serpentija Joven", + "FLAVOR": "Desconcertantemente adorable.", + "DESCRIPTIONS": [ + "Inflige #b9 de daño a un enemigo aleatorio y #ysneckomod:Confunde #b2 cartas aleatorias en tu mano (que no cuesten #b0, ni sean de costo #bX [REMOVE_SPACE], ni #yInjugables [REMOVE_SPACE]) al comienzo de tu turno." + ] + }, + "sneckomod:SneckoCommon": { + "NAME": "Sello de Aprobación", + "FLAVOR": "Soy El Hierro y esta es mi reliquia favorita de la Aguja. -Folleto del Comerciante", + "DESCRIPTIONS": [ + "Al obtener esta reliquia, elige #b1 de #b5 Poderes #ysneckomod:Ajenos #yPoco #ycomunes para obtenerla." + ] + }, + "sneckomod:SneckoBoss": { + "NAME": "Herradura Suertuda", + "FLAVOR": "Crea tu propia suerte.", + "DESCRIPTIONS": [ + "Al obtener esta reliquia, elige #b1 de #b3 #yPersonajes [REMOVE_SPACE]. Elige #b3 cartas Poco Comunes Mejoradas y #b2 Raras para añadir a tu mazo. Todos los combates otorgarán una recompensa adicional de cartas del personaje elegido.", + "Al obtenerla, obtén #b3 Poco Comunes Mejoradas y #b2 Raras de ", + ". Todos los combates otorgarán una recompensa adicional de cartas de ", + "." + ] + } +} diff --git a/src/main/resources/sneckomodResources/localization/spa/RunModStrings.json b/src/main/resources/sneckomodResources/localization/spa/RunModStrings.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/src/main/resources/sneckomodResources/localization/spa/RunModStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/sneckomodResources/localization/spa/UIStrings.json b/src/main/resources/sneckomodResources/localization/spa/UIStrings.json new file mode 100644 index 000000000..77b317b75 --- /dev/null +++ b/src/main/resources/sneckomodResources/localization/spa/UIStrings.json @@ -0,0 +1,86 @@ +{ + "sneckomod:Unknown": { + "TEXT": [ + "No Identificada", + " Mejorada ", + "Al comienzo del combate, las cartas No Identificadas se transforman en otras cartas aleatorias de las clases elegidas que cumplen ciertos criterios.", + " NL Clases elegidas:", + "Al comienzo del combate, las cartas No Identificadas se transforman en otras cartas aleatorias de CUALQUIER otra clase que cumpla ciertos criterios.", + "Al comienzo del combate, las cartas No Identificadas se transforman en otras cartas aleatorias de otras clases que cumplan ciertos criterios." + ] + }, + "sneckomod:UnknownNames": { + "TEXT": [ + "No Identificada" + ] + }, + "sneckomod:UnknownClass": { + "TEXT": [ + "???", + "*No Identificada ", + " Carta.", + "Personaje", + "La ", + "Esto no debería verse. Reporta a Vex.", + "Mejorada " + ] + }, + "sneckomod:UpgradedUnknownReward": { + "TEXT": [ + "Agrega una carta No Identificada+ a tu mazo.", + "Elige una carta." + ] + }, + "sneckomod:FreeRetainMod": { + "TEXT": [ + "Conservar. NL " + ] + }, + "sneckomod:ExhaustMod": { + "TEXT": [ + " NL Agotar." + ] + }, + "sneckomod:ChallengeMode": { + "TEXT": [ + "Modo Desafío - Serpentija Pura", + "Los Regalos pueden ser de cualquier clase. Recomendado para jugadores experimentados de Serpentija." + ] + }, + "sneckomod:LockInBonfireOptions": { + "TEXT": [ + "Identificar", + "Fijar una carta No Identificada como una carta permanente.", + "Requiere una carta No Identificada.", + "Selecciona una carta para agregar a tu mazo, eliminando su estado de No Identificada.", + "[Acción gratuita] Fijar una carta No Identificada como permanente." + ] + }, + "sneckomod:CommonAttackReward": { + "TEXT": [ + "Agrega una carta Ajena a tu mazo.", + "Elige una carta." + ] + }, + "sneckomod:DiceRollPotionReward": { + "TEXT": [ + "Agrega una carta Mejorada a tu mazo.", + "Elige una carta." + ] + }, + "sneckomod:ColorfulPowersCardReward": { + "TEXT": [ + "Agrega un Poder Mejorado a tu mazo.", + "Elige una carta." + ] + }, + "sneckomod:AtGameStart": { + "TEXT": [ + "Cartas de ", + "", + "Los Regalos incluirán cartas de ", + " en esta partida.", + "Elige." + ] + } +} diff --git a/src/main/resources/sneckomodResources/localization/zhs/CardStrings.json b/src/main/resources/sneckomodResources/localization/zhs/CardStrings.json index 6476e141d..4cc3edea0 100644 --- a/src/main/resources/sneckomodResources/localization/zhs/CardStrings.json +++ b/src/main/resources/sneckomodResources/localization/zhs/CardStrings.json @@ -1,338 +1,618 @@ { - "sneckomod:Strike": { - "NAME": "打击", - "DESCRIPTION": "造成 !D! 点伤害。" + "sneckomod:Blunderbus": { + "NAME": "火枪乱射", + "DESCRIPTION": "对所有敌人造成 !D! 点伤害。 NL 手牌中每有 1 张 3+ 耗能牌重复 1 次。" }, - "sneckomod:Defend": { - "NAME": "防御", - "DESCRIPTION": "获得 !B! 点 格挡 。" + "sneckomod:Tsunami": { + "NAME": "巨浪", + "DESCRIPTION": "sneckomod:溢出 触发 时 NL 获得 !M! 点 格挡 。" }, - "sneckomod:SnekBite": { - "NAME": "异蛇噬咬", - "DESCRIPTION": "造成 !D! 点伤害。 NL sneckomod:混淆 手中耗能最高的 !M! 张牌。", - "UPGRADE_DESCRIPTION": "造成 !D! 点伤害。 NL sneckomod:混淆 手中耗能最高的 !M! 张牌。" + "sneckomod:CheapStock": { + "NAME": "廉价存货", + "DESCRIPTION": "回合开始时 NL sneckomod:混淆 手牌中最高耗能的 1 张牌。", + "UPGRADE_DESCRIPTION": "回合开始时 NL sneckomod:混淆 手牌中最高耗能的 !M! 张牌。" }, - "sneckomod:TailWhip": { - "NAME": "扫尾", - "DESCRIPTION": "造成 !D! 点伤害。 NL 给予 !M! ~ 2层 虚弱 。 NL 给予 !M! ~ 2层 易伤 。" + "sneckomod:Cheat": { + "NAME": "纯粹的幸运?", + "DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。", + "UPGRADE_DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。", + "EXTENDED_DESCRIPTION": [ + "本地化须知:废弃的牌只需要复制以上的话即可。" + ] }, - "sneckomod:UnknownCommonAttack": { - "NAME": "???", - "DESCRIPTION": " *未知 普通攻击牌。", - "UPGRADE_DESCRIPTION": "已 升级 的 *未知 普通攻击牌。" + "sneckomod:DangerNoodle": { + "NAME": "贪吃蛇", + "DESCRIPTION": "造成 !D! 点伤害。 NL sneckomod:混淆 1 张牌 NL sneckomod:赠礼 :3+耗能牌。", + "DESCRIPTION_BATTLE": "造成 !D! 点伤害。 NL sneckomod:混淆 1 张牌。" }, - "sneckomod:UnknownCommonSkill": { - "NAME": "???", - "DESCRIPTION": " *未知 普通技能牌。", - "UPGRADE_DESCRIPTION": "已 升级 的 *未知 普通技能牌。" + "sneckomod:Deception": { + "NAME": "欺诈", + "DESCRIPTION": "获得 !B! 点 格挡 。 NL 获得 1 张 *震荡波 。 NL 消耗 。" }, - "sneckomod:UnknownUncommonAttack": { - "NAME": "???", - "DESCRIPTION": " *未知 罕见攻击牌。", - "UPGRADE_DESCRIPTION": "已 升级 的 *未知 罕见攻击牌。" + "sneckomod:Defend": { + "NAME": "防御", + "DESCRIPTION": "获得 !B! 点 格挡 。" }, - "sneckomod:UnknownUncommonSkill": { - "NAME": "???", - "DESCRIPTION": " *未知 罕见技能牌。", - "UPGRADE_DESCRIPTION": "已 升级 的 *未知 罕见技能牌。" + "sneckomod:DefensiveFlair": { + "NAME": "防御才华", + "DESCRIPTION": "获得 !B! 点 格挡 。 NL 手牌每有 1 张 sneckomod:异色 牌 增加获得格挡 !M! 点。 NL sneckomod:赠礼 :罕见牌。", + "DESCRIPTION_BATTLE": "获得 !B! 点 格挡 。 NL 手牌中每有 1 张 sneckomod:异色 牌增加获得格挡 !M! 点。" }, - "sneckomod:UnknownUncommonPower": { - "NAME": "???", - "DESCRIPTION": " *未知 罕见能力牌。", - "UPGRADE_DESCRIPTION": "已 升级 的 *未知 罕见能力牌。" + "sneckomod:DiceBlock": { + "NAME": "骰子格挡", + "DESCRIPTION": "获得 !B! 点 格挡 。 NL sneckomod:溢出 :再获得 !B! 点 格挡 。" }, - "sneckomod:UnknownRareAttack": { - "NAME": "???", - "DESCRIPTION": " *未知 稀有攻击牌。", - "UPGRADE_DESCRIPTION": "已 升级 的 *未知 稀有攻击牌。" + "sneckomod:DiceBoulder": { + "NAME": "巨型骰子", + "DESCRIPTION": "获得 !B! 点 格挡 。 NL 在本场战斗中,增加耗能 !qqq! 点,增加获得 格挡 !M! 点。" }, - "sneckomod:UnknownRareSkill": { - "NAME": "???", - "DESCRIPTION": " *未知 稀有技能牌。", - "UPGRADE_DESCRIPTION": "已 升级 的 *未知 稀有技能牌。" + "sneckomod:DiceCrush": { + "NAME": "骰子撞击", + "DESCRIPTION": "造成 !D! 点伤害。 NL sneckomod:溢出 :抽 2 张牌。" }, - "sneckomod:UnknownRarePower": { - "NAME": "???", - "DESCRIPTION": " *未知 稀有能力牌。", - "UPGRADE_DESCRIPTION": "已 升级 的 *未知 稀有能力牌。" + "sneckomod:DragonsHoard": { + "NAME": "龙之秘藏", + "DESCRIPTION": "虚无 。 NL 获得 !M! 点 力量 。 NL 获得 !M! 点 敏捷 。", + "UPGRADE_DESCRIPTION": "获得 !M! 点 力量 。 NL 获得 !M! 点 敏捷 。" }, - "sneckomod:SoulDraw": { - "NAME": "灵魂抽牌", - "DESCRIPTION": "sneckomod:蛇证 。 NL 随机获得 !M! 张 sneckomod:异色 牌。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "弃用" + "sneckomod:FourOfAKind": { + "NAME": "Four Of A Kind", + "DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。", + "UPGRADE_DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。", + "EXTENDED_DESCRIPTION": [ + "本地化须知:废弃的牌只需要复制以上的话即可。" + ] }, - "sneckomod:SoulRoll": { - "NAME": "灵魂随机", - "DESCRIPTION": "sneckomod:蛇证 。 NL sneckomod:混淆 所有手牌。", - "UPGRADE_DESCRIPTION": "sneckomod:蛇证 。 NL sneckomod:混淆 所有手牌。 NL 抽一张牌。" + "sneckomod:GlitteringGambit": { + "NAME": "豪赌", + "DESCRIPTION": "不能被打出 。 NL 不能被移除。 NL sneckomod:赠礼 :已升级的稀有牌和 !M! 灵魂。", + "UPGRADE_DESCRIPTION": "不能被打出 。 NL 虚无 。 NL 不能被移除。 NL sneckomod:赠礼 :已升级的稀有牌和 !M! 灵魂。", + "DESCRIPTION_BATTLE": "不能被打出 。", + "UPGRADE_DESCRIPTION_BATTLE": "不能被打出 。 NL 虚无 。" + }, + "sneckomod:ImmovableObject": { + "NAME": "Immovable Object", + "DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。", + "EXTENDED_DESCRIPTION": [ + "本地化须知:废弃的牌只需要复制以上的话即可。" + ] }, - "sneckomod:SnekBeam": { - "NAME": "蛇形射线", - "DESCRIPTION": "对所有敌人造成牌组中 *未知 牌数量点伤害。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "对所有敌人造成牌组中 *未知 牌数量点伤害。", + "sneckomod:IronFang": { + "NAME": "钢牙", + "DESCRIPTION": "对所有敌人造成 !D! 点伤害。 NL 给予所有敌人 !M! 层 虚弱 。" + }, + "sneckomod:ImprovisedAttack": { + "NAME": "Improvised Attack", + "DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。", "EXTENDED_DESCRIPTION": [ - " NL (造成 !D! 点伤害。) NL 消耗 。", - " NL (造成 !D! 点伤害。)" + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards。" ] }, - "sneckomod:UnknownStrike": { - "NAME": "???", - "DESCRIPTION": " *未知 打击牌。", - "UPGRADE_DESCRIPTION": "已 升级 的 *未知 打击牌。" + "sneckomod:ImprovisedGuard": { + "NAME": "Improvised Guard", + "DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards。" + ] + }, + "sneckomod:LuckyBreak": { + "NAME": "好运降临", + "DESCRIPTION": "获得 !B! 点 格挡 。 NL 手牌中每有 1 张 2+耗能牌,抽 !M! 张牌。" }, "sneckomod:Nope": { "NAME": "不行", - "DESCRIPTION": "sneckomod:蛇证 。 NL 消耗 一张手牌。 NL 获得同角色牌。", - "UPGRADE_DESCRIPTION": "sneckomod:蛇证 。 NL 消耗 一张手牌。 NL 获得同角色牌, NL 其耗能减1。", + "DESCRIPTION": "获得 !B! 点 格挡 。 NL 消耗 1 张牌。 NL 获得 1 张被 消耗 牌的同色牌。 NL 状态与诅咒不会触发。", + "UPGRADE_DESCRIPTION": "获得 !B! 点 格挡 。 NL 消耗 1 张牌。 NL 获得 1 张被 消耗 牌的同色牌。 NL 状态与诅咒不会触发。", "EXTENDED_DESCRIPTION": [ - " 选择一张牌替换。" + "消耗 。" ] }, - "sneckomod:UnknownClass": { - "NAME": "???", - "DESCRIPTION": "未知bug-报告开发组。" + "sneckomod:SnakeEyes": { + "NAME": "邪眼毒眸", + "DESCRIPTION": "在本回合,下 1 张打出的 sneckomod:异色 牌将被打出 2 次。 NL sneckomod:赠礼 :稀有技能牌。", + "UPGRADE_DESCRIPTION": "在本回合,下 2 张打出的 sneckomod:异色 牌将被打出 2 次。 NL sneckomod:赠礼 :稀有技能牌。", + "DESCRIPTION_BATTLE": "在本回合,下 1 张打出的 sneckomod:异色 牌将被打出 2 次。", + "UPGRADE_DESCRIPTION_BATTLE": "在本回合,下 2 张打出的 sneckomod:异色 牌将被打出 2 次。" }, - "sneckomod:UnknownInnate": { - "NAME": "???", - "DESCRIPTION": " *未知 固有 牌。", - "UPGRADE_DESCRIPTION": "已 升级 的 *未知 固有 牌。" + "sneckomod:Memorize": { + "NAME": "Memorize", + "DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。", + "UPGRADE_DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。", + "EXTENDED_DESCRIPTION": [ + " to Identify。", + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards。" + ] }, - "sneckomod:Unknown": { - "NAME": "???", - "DESCRIPTION": " *未知 基础牌。", - "UPGRADE_DESCRIPTION": "已 升级 的 *未知 基础牌。" + "sneckomod:MintCondition": { + "NAME": "绝佳", + "DESCRIPTION": "sneckomod:溢出 :获得 !M! 点 力量 。" }, - "sneckomod:Unknown0Cost": { - "NAME": "???", - "DESCRIPTION": " *未知 0耗能牌。", - "UPGRADE_DESCRIPTION": "已 升级 的 *未知 0耗能牌。" + "sneckomod:MixItUp": { + "NAME": "Mix It Up!", + "DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。", + "EXTENDED_DESCRIPTION": [ + "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。" + ] }, - "sneckomod:Unknown1Cost": { - "NAME": "???", - "DESCRIPTION": " *未知 1耗能牌。", - "UPGRADE_DESCRIPTION": "已 升级 的 *未知 1耗能牌。" + "sneckomod:MorePower": { + "NAME": "More Power!", + "DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards。" + ] }, - "sneckomod:Unknown2Cost": { - "NAME": "???", - "DESCRIPTION": " *未知 2耗能牌。", - "UPGRADE_DESCRIPTION": "已 升级 的 *未知 2耗能牌。" + "sneckomod:Mudshield": { + "NAME": "泥浆屏障", + "DESCRIPTION": "sneckomod:混淆 1 张牌时 NL 获得 !M! 点 格挡 。" }, - "sneckomod:Unknown3Cost": { - "NAME": "???", - "DESCRIPTION": " *未知 3耗能牌。", - "UPGRADE_DESCRIPTION": "已 升级 的 *未知 3耗能牌。" + "sneckomod:OverwhelmingPresence": { + "NAME": "威压", + "DESCRIPTION": "回合的第 1 次洗牌时 NL 获得 [E] 并抽 !M! 张牌。" }, - "sneckomod:UnknownX": { - "NAME": "???", - "DESCRIPTION": " *未知 X耗能牌。", - "UPGRADE_DESCRIPTION": "已 升级 的 *未知 X耗能牌。" + "sneckomod:RiskySword": { + "NAME": "险刃", + "DESCRIPTION": "造成 !D! 点伤害。 NL 当本牌被 sneckomod:混淆 时,在本场战斗中提高本牌的伤害 !M! 点。" }, - "sneckomod:UnknownEthereal": { - "NAME": "???", - "DESCRIPTION": " *未知 虚无 牌。", - "UPGRADE_DESCRIPTION": "已 升级 的 *未知 虚无 牌。" + "sneckomod:PoisonParadise": { + "NAME": "毒泉", + "DESCRIPTION": "sneckomod:溢出 触发时 NL 给予随机敌人 !M! 点 sneckomod:剧毒 。" }, - "sneckomod:UnknownBlock": { - "NAME": "???", - "DESCRIPTION": " *未知 格挡 牌。", - "UPGRADE_DESCRIPTION": "已 升级 的 *未知 格挡 牌。" + "sneckomod:PureSnecko": { + "NAME": "变幻", + "DESCRIPTION": "抽 !M! 张牌。 NL sneckomod:混淆 之。" }, - "sneckomod:UnknownExhaust": { - "NAME": "???", - "DESCRIPTION": " *未知 消耗 牌。", - "UPGRADE_DESCRIPTION": "已 升级 的 *未知 消耗 牌。" + "sneckomod:QuickBite": { + "NAME": "蛇耙", + "DESCRIPTION": "造成 !D! 点伤害。 NL 抽 !M! 张牌。 NL sneckomod:混淆 之。", + "UPGRADE_DESCRIPTION": "造成 !D! 伤害。 NL 抽 !M! 张牌。 NL sneckomod:混淆 之。" }, - "sneckomod:SoulCleanse": { - "NAME": "灵魂净化", - "DESCRIPTION": "sneckomod:蛇证 。 NL sneckomod:混淆 所有手牌。 NL 本次 sneckomod:混淆 耗能不为3。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "sneckomod:蛇证 。 NL sneckomod:混淆 所有手牌。 NL 本次 sneckomod:混淆 耗能不为3。" + "sneckomod:QuickMove": { + "NAME": "迅捷步伐", + "DESCRIPTION": "获得 !B! 点 格挡 。 NL sneckomod:溢出 :给予所有敌人 !M! 层 易伤 。" }, - "sneckomod:SoulExchange": { - "NAME": "灵魂交换", - "DESCRIPTION": "sneckomod:蛇证 。 NL 抽1张牌并 消耗 一张。 NL 变化所有手牌至 消耗 牌的同角色牌。", - "UPGRADE_DESCRIPTION": "sneckomod:蛇证 。 NL 抽 !M! 张牌并 消耗 一张。 NL 变化所有手牌至 消耗 牌的同角色牌。", + "sneckomod:RainOfDice": { + "NAME": "骰子雨", + "DESCRIPTION": "造成 !D! 点伤害。 NL sneckomod:混淆 1 张牌。 NL 获得 1 张 *骰子雨 。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "造成 !D! 伤害。 NL sneckomod:混淆 1 张牌。 NL 获得 1 张 *骰子雨+ 。 NL 消耗 。" + }, + "sneckomod:Restock": { + "NAME": "换牌", + "DESCRIPTION": "丢弃所有手牌。 NL 抽 !M! 张牌。 NL sneckomod:混淆 所有手牌。 NL 消耗 。" + }, + "sneckomod:Rotation": { + "NAME": "Rotation", + "DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。", + "UPGRADE_DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。", "EXTENDED_DESCRIPTION": [ - "消耗以交换灵魂。" + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards。" ] }, - "sneckomod:CheapStock": { - "NAME": "廉价股票", - "DESCRIPTION": "回合开始时,耗能最高的 sneckomod:异色 手牌耗能减1。", - "UPGRADE_DESCRIPTION": "固有 。 NL 回合开始时,耗能最高的 sneckomod:异色 手牌耗能减1。" + "sneckomod:SerpentBottle": { + "NAME": "折扣甩卖", + "DESCRIPTION": "抽 !qqq! 张牌。 NL sneckomod:混淆 1 张牌。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "抽 !qqq! 张牌。 NL sneckomod:混淆 !M! 张牌。 NL 消耗 。" }, - "sneckomod:UnlimitedRolls": { - "NAME": "无限随机", - "DESCRIPTION": "回合开始时, NL 获得一张 *灵 *魂 *随 *机 , NL 其附带 消耗 。", - "UPGRADE_DESCRIPTION": " 固有 。 NL 回合开始时, NL 获得一张 *灵 *魂 *随 *机 , NL 其附带 消耗 。" + "sneckomod:SerpentIdol": { + "NAME": "蛇像", + "DESCRIPTION": "从随机 !M! 张 异色 牌中选择 1 张获得。 NL 该牌本回合第 1 次打出为 0耗能 。 NL 消耗 。" }, - "sneckomod:MasterEye": { - "NAME": "主宰之眼", - "DESCRIPTION": "获得 混乱 。 NL 回合开始时, NL 额外抽 !M! 张牌。", - "UPGRADE_DESCRIPTION": "获得 混乱 。 NL 回合开始时, NL 额外抽 !M! 张牌。" + "sneckomod:SerpentMind": { + "NAME": "异色形态", + "DESCRIPTION": "虚无 。 NL 回合结束时 NL 在本回合每打出 1 色牌,获得 !M! 层 力量 。 NL sneckomod:赠礼 :稀有牌。", + "UPGRADE_DESCRIPTION": "回合结束时 NL 在本回合每打出 1 色牌,获得 !M! 层 力量 。 NL sneckomod:赠礼 :稀有牌。", + "DESCRIPTION_BATTLE": "回合结束时 NL 在本回合每打出 1 色牌,获得 !M! 层 力量 。" }, - "sneckomod:ImprovisedAttack": { - "NAME": "即兴攻击", - "DESCRIPTION": "造成 !D! 点伤害。 NL 随机获得一张 sneckomod:异色 攻击牌并 sneckomod:混淆 它。" + "sneckomod:SlitherThrough": { + "NAME": "游蛇穿行", + "DESCRIPTION": "造成 !D! 点伤害。 NL 降低手牌中 sneckomod:异色 牌本回合下 1 次打出的耗能 !M! 点。 NL sneckomod:赠礼 :罕见牌。", + "DESCRIPTION_BATTLE": "造成 !D! 点伤害。 NL 降低手牌中 sneckomod:异色 牌本回合下 1 次打出的耗能 !M! 点。" }, - "sneckomod:ImprovisedGuard": { - "NAME": "即兴防御", - "DESCRIPTION": "获得 !B! 点 格挡 。 NL 随机获得一张 sneckomod:异色 技能牌并 sneckomod:混淆 它。" + "sneckomod:SnakeSap": { + "NAME": "Snake Sap", + "DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards。" + ] }, - "sneckomod:QuickMove": { - "NAME": "快动作", - "DESCRIPTION": "获得 !B! 点 格挡 。 NL sneckomod:混淆 手中耗能最高的牌。", - "UPGRADE_DESCRIPTION": "获得 !B! 点 格挡 。 NL sneckomod:混淆 手中耗能最高的 !M! 张牌。" + "sneckomod:SnekBeam": { + "NAME": "激光眼", + "DESCRIPTION": "造成 !D! 点伤害。 NL 获得 [E] 。" }, - "sneckomod:QuickBite": { - "NAME": "蛇耙", - "DESCRIPTION": "造成 !D! 点伤害。 NL 抽 !M! ~ 2 张牌。 NL sneckomod:混淆 手中耗能最高的牌。" + "sneckomod:SnekBite": { + "NAME": "蛇咬", + "DESCRIPTION": "造成 !D! 点伤害。 NL sneckomod:混淆 1 张牌。", + "UPGRADE_DESCRIPTION": "造成 !D! 点伤害。 NL sneckomod:混淆 !M! 张牌。" }, - "sneckomod:Rotation": { - "NAME": "轮换", - "DESCRIPTION": "sneckomod:蛇证 。 NL 丢弃所有 sneckomod:异色 牌。 NL 抽等量张牌。", - "UPGRADE_DESCRIPTION": "sneckomod:蛇证 。 NL 丢弃所有 sneckomod:异色 牌。 NL 抽等量加 !M! 张牌。" + "sneckomod:SoulCleanse": { + "NAME": "Soul Cleanse", + "DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。", + "UPGRADE_DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards。" + ] }, - "sneckomod:SerpentMind": { - "NAME": "异色形态", - "DESCRIPTION": "sneckomod:蛇证 。 NL 打出 sneckomod:异色 牌时抽一张牌。", - "UPGRADE_DESCRIPTION": "打出 sneckomod:异色 牌时抽一张牌。" + "sneckomod:SoulDraw": { + "NAME": "灵魂抽取", + "DESCRIPTION": "获得随机 !M! 张异色牌。 NL 这 2 张牌获得 保留 。 NL 消耗 。" }, - "sneckomod:SlitherStrike": { - "NAME": "滑动打击", - "DESCRIPTION": "造成 !D! 点伤害。 NL 所有 sneckomod:异色 手牌本回合耗能减1。" + "sneckomod:SoulExchange": { + "NAME": "灵魂交换", + "DESCRIPTION": "保留 。 NL sneckomod:混淆 所有手牌。 NL 消耗 。" }, - "sneckomod:PureSnecko": { - "NAME": "易质", - "DESCRIPTION": "sneckomod:蛇证 。 NL 变化所有 sneckomod:异色 手牌。", - "UPGRADE_DESCRIPTION": "sneckomod:蛇证 。 NL 变化所有 sneckomod:异色 手牌, NL 其耗能减1。" + "sneckomod:SoulRoll": { + "NAME": "灵魂骰掷", + "DESCRIPTION": "保留 。 NL 获得 !B! 点 格挡 。 NL sneckomod:混淆 1 张牌。 NL 消耗 。" }, - "sneckomod:Cheat": { - "NAME": "作弊", - "DESCRIPTION": "sneckomod:蛇证 。 NL 本回合拥有 sneckomod:幸运 。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "sneckomod:蛇证 。 NL 本回合拥有 sneckomod:幸运 。" + "sneckomod:Strike": { + "NAME": "打击", + "DESCRIPTION": "造成 !D! 点伤害。" }, - "sneckomod:Restock": { - "NAME": "补充", - "DESCRIPTION": "sneckomod:蛇证 。 NL 丢弃所有手牌。 NL 抽 5~10 张牌。 NL 消耗 。" + "sneckomod:ToothAndClaw": { + "NAME": "尖牙利爪", + "DESCRIPTION": "造成 !D! 点伤害。 NL 手牌中每有 1 色牌获得 1 张 *小刀 。 NL sneckomod:赠礼 :罕见牌。", + "UPGRADE_DESCRIPTION": "造成 !D! 点伤害。 NL 手牌中每有 1 色牌获得 1 张 *小刀+ 。 NL sneckomod:赠礼 :罕见牌。", + "DESCRIPTION_BATTLE": "造成 !D! 点伤害。 NL 手牌中每有 1 色牌 获得 1 张 *小刀 。", + "UPGRADE_DESCRIPTION_BATTLE": "造成 !D! 点伤害。 NL 手牌中每有 1 色牌 获得 1 张 *小刀+ 。" }, - "sneckomod:GlitteringGambit": { - "NAME": "闪光伎俩", - "DESCRIPTION": "sneckomod:蛇证 。 NL 获得 !M! ~ 30 *金币 。 NL 消耗 。" + "sneckomod:TyphoonFang": { + "NAME": "台风之牙", + "DESCRIPTION": "造成 !D! 点伤害。 NL sneckomod:溢出 :在本回合,每当你触发 sneckomod:溢出 ,打出这张牌的复制。" }, - "sneckomod:Transmogrify": { - "NAME": "惊变", - "DESCRIPTION": "从两件遗物中选择失去一件。 NL 获得另一件相同稀有度的遗物。 NL 消耗 。", + "sneckomod:Yearn": { + "NAME": "Yearn", + "DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。", "EXTENDED_DESCRIPTION": [ - "我没有遗物能够惊变", - "选择失去一件遗物", - "失去 ", - " 并获得另一件 ", - " 遗物。" + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards。" ] }, - "sneckomod:DefensiveFlair": { - "NAME": "防御才华", - "DESCRIPTION": "获得 !B! 点 格挡 。 NL 每有一张 sneckomod:异色 手牌, 格挡 增加 !M! 点。" - }, - "sneckomod:DangerNoodle": { - "NAME": "贪吃蛇", - "DESCRIPTION": "造成 !D! 点伤害。 NL 消耗 所有 sneckomod:异色 手牌, NL 每 消耗 一张再造成一次。" + "sneckomod:TailWhip": { + "NAME": "扫尾", + "DESCRIPTION": "造成 !D! 点伤害。 NL sneckomod:溢出 :给予 !M! 层 虚弱 和 易伤 。" }, - "sneckomod:SerpentIdol": { - "NAME": "蛇神像", - "DESCRIPTION": "sneckomod:蛇证 。 NL 从三张随机 sneckomod:异色 牌中选择获得一张。 NL 本回合其耗能为0。 NL 消耗 。" + "sneckomod:Transmogrify": { + "NAME": "Transmogrify", + "DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。", + "EXTENDED_DESCRIPTION": [ + "I have no Relicsss to ssswap。", + "Choose a Relic to lose。", + "Lose ", + " and obtain another ", + " Relic。", + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards。" + ] + }, + "sneckomod:ToxicPersonality": { + "NAME": "Toxic Personality", + "DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards。" + ] }, "sneckomod:TrashToTreasure": { "NAME": "变废为宝", - "DESCRIPTION": "sneckomod:蛇证 。 NL 消耗 一张手牌, NL 获得其耗能量 [E] 。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "sneckomod:蛇证 。 NL 消耗 一张手牌, NL 获得其耗能量 [E] 。" + "DESCRIPTION": "获得 !B! 点 格挡 。 NL 消耗 1 张牌。 NL 获得与其耗能相等 [E] 。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "获得 !B! 点 格挡 。 NL 消耗 1 张牌。 NL 获得与其耗能相等 [E] 。" }, - "sneckomod:DiceBlock": { - "NAME": "骰子格挡", - "DESCRIPTION": "获得 !M! ~ !B! 点 格挡 。" + "sneckomod:UnendingSupply": { + "NAME": "无尽供给", + "DESCRIPTION": "回合开始时 NL 获得随机 1 张 sneckomod:异色 牌的 gremlin:回响 。", + "UPGRADE_DESCRIPTION": "固有。 NL 回合开始时 NL 获得随机 1 张 sneckomod:异色 牌的 gremlin:回响 。" +}, + "sneckomod:Unknown": { + "NAME": "??? Basic", + "DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。", + "UPGRADE_DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。" }, - "sneckomod:MixItUp": { - "NAME": "混合起来!", - "DESCRIPTION": "变化所有药水。 NL 造成 !D! 点伤害 !M! 次。 NL 消耗 。" + "sneckomod:Unknown0Cost": { + "NAME": "??? 0-Cost", + "DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。", + "UPGRADE_DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。" }, - "sneckomod:MorePower": { - "NAME": "更多力量!", - "DESCRIPTION": "战斗结束时, NL 获得 *未知 卡牌+奖励。" + "sneckomod:Unknown1Cost": { + "NAME": "??? 1-Cost", + "DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。", + "UPGRADE_DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。" }, - "sneckomod:UnknownStrength": { - "NAME": "???", - "DESCRIPTION": " *未知 力量 牌。", - "UPGRADE_DESCRIPTION": "已 升级 的 *未知 力量 牌。" + "sneckomod:Unknown2Cost": { + "NAME": "??? 2-Cost", + "DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。", + "UPGRADE_DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。" }, - "sneckomod:UnknownDraw": { - "NAME": "???", - "DESCRIPTION": " *未知 抽牌牌。", - "UPGRADE_DESCRIPTION": "已 升级 的 *未知 抽牌牌。" + "sneckomod:Unknown3Cost": { + "NAME": "??? 3-Cost", + "DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。", + "UPGRADE_DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。" + }, + "sneckomod:UnknownBlock": { + "NAME": "??? Block", + "DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。", + "UPGRADE_DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。" + }, + "sneckomod:UnknownBoss": { + "NAME": "??? Boss", + "DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。", + "UPGRADE_DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。" + }, + "sneckomod:UnknownClass": { + "NAME": "??? Class", + "DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。", + "UPGRADE_DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。" + }, + "sneckomod:UnknownColorless": { + "NAME": "??? Colorless", + "DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。", + "UPGRADE_DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。" + }, + "sneckomod:UnknownCommonAttack": { + "NAME": "??? C Attack", + "DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。", + "UPGRADE_DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。" + }, + "sneckomod:UnknownCommonSkill": { + "NAME": "??? C Skill", + "DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。", + "UPGRADE_DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。" }, "sneckomod:UnknownDexterity": { - "NAME": "???", - "DESCRIPTION": " *未知 敏捷 牌。", - "UPGRADE_DESCRIPTION": "已 升级 的 *未知 敏捷 牌。" + "NAME": "??? Dexterity", + "DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。", + "UPGRADE_DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。" }, - "sneckomod:UnknownWeak": { - "NAME": "???", - "DESCRIPTION": " *未知 虚弱 牌。", - "UPGRADE_DESCRIPTION": "已 升级 的 *未知 虚弱 牌。" + "sneckomod:UnknownDraw": { + "NAME": "??? Draw", + "DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。", + "UPGRADE_DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。" + }, + "sneckomod:Unknown虚无": { + "NAME": "??? 虚无", + "DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。", + "UPGRADE_DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。" + }, + "sneckomod:Unknown消耗 ": { + "NAME": "??? 消耗 ", + "DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。", + "UPGRADE_DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。" + }, + "sneckomod:UnknownRareAttack": { + "NAME": "??? R Attack", + "DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。", + "UPGRADE_DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。" + }, + "sneckomod:UnknownRarePower": { + "NAME": "??? R Power", + "DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。", + "UPGRADE_DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。" + }, + "sneckomod:UnknownRareSkill": { + "NAME": "??? R Skill", + "DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。", + "UPGRADE_DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。" + }, + "sneckomod:UnknownStrength": { + "NAME": "??? Strength", + "DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。", + "UPGRADE_DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。" + }, + "sneckomod:UnknownStrike": { + "NAME": "??? Strike", + "DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。", + "UPGRADE_DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。" + }, + "sneckomod:UnknownUncommonAttack": { + "NAME": "??? U Attack", + "DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。", + "UPGRADE_DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。" + }, + "sneckomod:UnknownUncommonPower": { + "NAME": "??? U Power", + "DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。", + "UPGRADE_DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。" + }, + "sneckomod:UnknownUncommonSkill": { + "NAME": "??? U Skill", + "DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。", + "UPGRADE_DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。" }, "sneckomod:UnknownVulnerable": { - "NAME": "???", - "DESCRIPTION": " *未知 易伤 牌。", - "UPGRADE_DESCRIPTION": "已 升级 的 *未知 易伤 牌。" + "NAME": "??? Vulnerable", + "DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。", + "UPGRADE_DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。" }, - "sneckomod:UnknownColorless": { - "NAME": "???", - "DESCRIPTION": " *未知 无色牌。", - "UPGRADE_DESCRIPTION": "已 升级 的 *未知 无色牌。" + "sneckomod:UnknownWeak": { + "NAME": "??? Weak", + "DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。", + "UPGRADE_DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。" }, - "sneckomod:RainOfDice": { - "NAME": "骰子雨", - "DESCRIPTION": "随机造成 !qqq! ~ !D! 点伤害。 NL sneckomod:混淆 本牌并返回手牌。" + "sneckomod:UnknownX": { + "NAME": "??? X-Cost", + "DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。", + "UPGRADE_DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。" }, - "sneckomod:DiceCrush": { - "NAME": "骰子撞击", - "DESCRIPTION": "造成 !M! ~ !D! 点伤害。" + "sneckomod:UnlimitedRolls": { + "NAME": "Unlimited Rolls", + "DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。", + "UPGRADE_DESCRIPTION": "这张卡不该出现在游戏中。 NL 如果你读到这里,说明你可能遇到了bug。 NL 请报告给开发者。", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards。" + ] }, - "sneckomod:SnakeSap": { - "NAME": "蛇液", - "DESCRIPTION": "sneckomod:蛇证 。 NL 造成 !qqq! ~ !D! 点伤害。 NL 获得 0 ~ !M! [E] 。 NL 消耗 。" + "sneckomod:Behold": { + "NAME": "见证吧!", + "DESCRIPTION": "造成 !D! 点伤害。 NL sneckomod:溢出 :获得 !M! 张 *小刀 。", + "UPGRADE_DESCRIPTION": "造成 !D! 点伤害。 NL sneckomod:溢出 :获得 !M! 张 *小刀 。" }, - "sneckomod:DiceBoulder": { - "NAME": "巨型骰子", - "DESCRIPTION": "造成 !M! ~ !D! 点伤害。 NL 能被多次 升级 。" + "sneckomod:SaveForLater": { + "NAME": "保留待用", + "DESCRIPTION": "造成 !D! 点伤害。 NL 回合结束时,保留 !M! 张牌。", + "UPGRADE_DESCRIPTION": "造成 !D! 点伤害。 NL 回合结束时,保留 !M! 张牌。" }, - "sneckomod:IronFang": { - "NAME": "铁齿", - "DESCRIPTION": "获得 !M! ~ !B! 点 格挡 。 NL 造成 !qqq! ~ !D! 点伤害。" + "sneckomod:PowerShot": { + "NAME": "能力射击", + "DESCRIPTION": "造成 !D! 点伤害。 NL 当你打出 1 张能力牌,本牌从弃牌堆回到手牌。" }, - "sneckomod:Mudshield": { - "NAME": "混乱护盾", - "DESCRIPTION": "sneckomod:混淆 一张牌时, NL 获得 !M! 点 格挡 。", - "UPGRADE_DESCRIPTION": "固有 。 NL sneckomod:混淆 一张牌时, NL 获得 !M! 点 格挡 。" + "sneckomod:LilGuardian": { + "NAME": "小小守护者", + "DESCRIPTION": "获得 !B! 点 格挡 。 NL 打出 1 张2+耗能的牌时,从你的手牌中打出本牌。" }, - "sneckomod:WideSting": { - "NAME": "宽刺", - "DESCRIPTION": "对所有敌人造成 !M! ~ !D! 点伤害。 NL 升级 手中所有 sneckomod:异色 牌。" + "sneckomod:CrystalBoomerang": { + "NAME": "水晶回旋镖", + "DESCRIPTION": "从弃牌堆选择 1 张牌放入你的手牌。 NL 若其 sneckomod:异色 ,获得 !B! 点 格挡 。" }, - "sneckomod:UnendingSupply": { - "NAME": "延绵不绝", - "DESCRIPTION": "回合开始时, NL 随机获得一张 sneckomod:异色 牌。" + "sneckomod:ViperEssence": { + "NAME": "蛇之精髓", + "DESCRIPTION": "虚无 。 NL 获得 !M! 点 力量 。" }, - "sneckomod:Memorize": { - "NAME": "熟记", - "DESCRIPTION": "sneckomod:蛇证 。 sneckomod:即逝 。 NL 选择一张 *未知 手牌, NL 将其 *明晰 成目前的牌。", - "UPGRADE_DESCRIPTION": "保留 。 NL sneckomod:蛇证 。 sneckomod:即逝 。 NL 选择一张 *未知 手牌, NL 将其 *明晰 成目前的牌。", + "sneckomod:Amass": { + "NAME": "积聚", + "DESCRIPTION": "获得 !B! 点 格挡。 NL 获得等同于手牌耗能之和 格挡 。", + "UPGRADE_DESCRIPTION": "获得 !B! 点 格挡。 NL 获得等同于手牌耗能之和 格挡 。" + }, + "sneckomod:Medusa": { + "NAME": "美杜莎", + "DESCRIPTION": "造成 !D! 伤害。 NL 给予 !M! 点 sneckomod:剧毒 。 NL sneckomod:赠礼 :普通负面效果牌。", + "DESCRIPTION_BATTLE": "造成 !D! 伤害。 NL 给予 !M! 点 sneckomod:剧毒 。" + }, + "sneckomod:Cower": { + "NAME": "蜷缩", + "DESCRIPTION": "获得 !B! 点 格挡 。 NL 获得 1 张 *'洞'起来 。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "获得 !B! 点 格挡 。 NL 获得 1 张 *'洞'起来+ 。 NL 消耗 。" + }, + "sneckomod:WideSting": { + "NAME": "宽刺", + "DESCRIPTION": "对所有敌人造成 !D! 点伤害。 NL 在本场战斗中 升级 手牌中所有 sneckomod:异色 牌。 NL sneckomod:赠礼 :普通牌。", + "DESCRIPTION_BATTLE": "对所有敌人造成 !D! 点伤害。 NL 在本场战斗中 升级 手牌中所有 sneckomod:异色 牌。" + }, + "sneckomod:GildedShield": { + "NAME": "镀金盾牌", + "DESCRIPTION": "获得 !B! 点 格挡 。 NL sneckomod:混淆 本牌,回到手牌。" + }, + "sneckomod:Mesmerize": { + "NAME": "催眠", + "DESCRIPTION": "所有敌人失去 !M! 点 力量 。 NL sneckomod:混淆 1 张牌。 NL 消耗 。" + }, + "sneckomod:Serpentscale": { + "NAME": "蛇鳞", + "DESCRIPTION": "造成 !D! 点伤害。 NL 获得 1 点 expansioncontent:多层护甲 。 NL sneckomod:溢出 : 转而获得 !M! 点 expansioncontent:多层护甲 。" + }, + "sneckomod:OtherworldlySlash": { + "NAME": "异界斩击", + "DESCRIPTION": "造成 !D! 点伤害。 NL 若本回合打出过 sneckomod:异色 牌,再造成 !D! 点伤害。 NL sneckomod:赠礼 :普通牌。", + "DESCRIPTION_BATTLE": "造成 !D! 点伤害。 NL 若本回合打出过 sneckomod:异色 牌,再造成 !D! 点伤害。" + }, + "sneckomod:BeyondArmor": { + "NAME": "超越护甲", + "DESCRIPTION": "获得 !B! 点 格挡。 NL 将抽牌堆随机 !M! 张 sneckomod:异色 牌放入手牌。 NL sneckomod:赠礼 : 普通牌。", + "DESCRIPTION_BATTLE": "获得 !B! 点 格挡。 NL 将抽牌堆随机 !M! 张 sneckomod:异色 牌放入手牌。" + }, + "sneckomod:BlunderGuard": { + "NAME": "枪火掩护", + "DESCRIPTION": "打出 3+耗能 牌时 NL 获得 !qqq! 点 格挡 和 !M! 点 力量 。", + "UPGRADE_DESCRIPTION": "打出 3+耗能 牌时 NL 获得 !qqq! 点 格挡 和 !M! 点 力量 。" + }, + "sneckomod:WideAngle": { + "NAME": "横扫", + "DESCRIPTION": "保留 。 NL 对所有敌人造成 !D! 点伤害。" + }, + "sneckomod:SerpentsNest": { + "NAME": "蛇巢", + "DESCRIPTION": "打出 1 张能力牌时 NL 对所有敌人造成 !M! 点伤害。 NL sneckomod:赠礼 :罕见能力牌。", + "DESCRIPTION_BATTLE": "打出 1 张能力牌时 NL 对所有敌人造成 !M! 点伤害。" + }, + "sneckomod:Whack": { + "NAME": "晨钟暮鼓", + "DESCRIPTION": "造成 !D! 点伤害。 NL 获得 1 张 *当头棒喝 。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "造成 !D! 点伤害。 NL 获得 1 张 *当头棒喝+ 。 NL 消耗 。" + }, + "sneckomod:CobraCoil": { + "NAME": "眼镜蛇盘蜷", + "DESCRIPTION": "造成 !D! 点伤害。 NL 给予 !M! 点 *缠绕 。 NL sneckomod:赠礼 :稀有攻击牌。" + }, + "sneckomod:Belittle": { + "NAME": "看扁", + "DESCRIPTION": "敌人每有 1 种负面效果,失去 !M! 点生命。 NL sneckomod:赠礼 :罕见负面效果牌。", + "DESCRIPTION_BATTLE": "敌人每有 1 种负面效果,失去 !M! 点生命。" + }, + "sneckomod:Jackpot": { + "NAME": "头奖", + "DESCRIPTION": "保留 。 NL 获得 [E] [E] 。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "保留 。 NL 获得 [E] [E] [E] 。 NL 消耗 。" + }, + "sneckomod:MakeshiftBlade": { + "NAME": "权宜之刃", + "DESCRIPTION": "造成 !D! 点伤害。 NL 若敌人有至少 !M! 种负面效果,抽 !qqq! 张牌。 NL sneckomod:赠礼 :负面效果牌。", + "DESCRIPTION_BATTLE": "造成 !D! 点伤害。 NL 若敌人有至少 !M! 种负面效果,抽 !qqq! 张牌。" + }, + "sneckomod:LatchOn": { + "NAME": "紧咬不放", + "DESCRIPTION": "对所有敌人造成 !D! 点伤害。 NL 获得 1 张 *蛇之精髓 。" + }, + "sneckomod:ComboString": { + "NAME": "异色连击", + "DESCRIPTION": "造成 !D! 点伤害 Y 次。 NL Y 为本回合打出的 sneckomod:异色 牌数。 NL sneckomod:赠礼 :罕见牌。", + "EXTENDED_DESCRIPTION": [ + " NL (本回合打出过 ", + " 张 异色 牌。)" + ], + "DESCRIPTION_BATTLE": "造成 !D! 点伤害 Y 次。 Y 为本回合打出的 sneckomod:异色 牌数。" + }, + "sneckomod:ThrowingCards": { + "NAME": "投掷卡牌", + "DESCRIPTION": "获得 X 张 *超越光速 。 NL 获得 [E] 。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "获得 X 张 *超越光速+ 。 NL 获得 [E] 。 NL 消耗 。" + }, + "sneckomod:RoundaboutSwing": { + "NAME": "回旋挥击", + "DESCRIPTION": "造成 !D! 点伤害。 NL 将 1 张手牌放入抽牌堆顶部。 NL 下回合额外抽 !M! 张牌。" + }, + "sneckomod:MarkedCard": { + "NAME": "记号牌", + "DESCRIPTION": "保留 。 NL sneckomod:混淆 1 张牌。 NL 不增加其耗能。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "保留 。 NL sneckomod:混淆 !M! 张牌。 NL 不增加其耗能。 NL 消耗 。" + }, + "sneckomod:InertBlade": { + "NAME": "钝藏刀刃", + "DESCRIPTION": "造成 !D! 点伤害。 NL 若其耗能为: NL 1+:抽 !M! 张牌。 NL 2+:获得 !M! 点 力量 。 NL 3+:获得 [E] 。", + "UPGRADE_DESCRIPTION": "造成 !D! 点伤害。 NL 若其耗能为: NL 1+:抽 !M! 张牌。 NL 2+:获得 !M! 点 力量 。 NL 3+:获得 [E] [E] 。" + }, + "sneckomod:PerpetualSerpent": { + "NAME": "永恒之蛇", + "DESCRIPTION": "造成 !D! 点伤害。 NL sneckomod:溢出 :获得 [E] [E] 。" + }, + "sneckomod:LastStrike": { + "NAME": "最终打击", + "DESCRIPTION": "造成 !D! 点伤害。 NL 本场战斗中每打出 1 种 打击 牌,多造成 1 次伤害。 NL sneckomod:赠礼 :打击 牌。", + "UPGRADE_DESCRIPTION": "造成 !D! 点伤害。 NL 本场战斗中每打出 1 种 打击 牌,多造成 1 次伤害。 NL sneckomod:赠礼 :打击 牌。", + "DESCRIPTION_BATTLE": "造成 !D! 点伤害。 NL 本场战斗中每打出 1 种 打击 牌,多造成 1 次伤害。", + "UPGRADE_DESCRIPTION_BATTLE": "造成 !D! 点伤害。 NL 本场战斗中每打出 1 种 打击 牌,多造成 1 次伤害。", "EXTENDED_DESCRIPTION": [ - "明晰一张牌。" + " NL (本场战斗中打出过 ", + " 种 打击 牌。)" ] }, - "sneckomod:UnknownBoss": { - "NAME": "???", - "DESCRIPTION": " *未知 *首领 牌。", - "UPGRADE_DESCRIPTION": "已 升级 的 *未知 *首领 牌。" + "sneckomod:AceOfWands": { + "NAME": "五角星皇后", + "DESCRIPTION": "虚无 。 NL 给予敌人 1 种负面效果时 NL 获得 !M! 点 格挡 。 NL sneckomod:赠礼 :负面效果牌。", + "UPGRADE_DESCRIPTION": "给予敌人 1 种负面效果时 NL 获得 !M! 点 格挡 。 NL sneckomod:赠礼 :负面效果牌。" + }, + "sneckomod:FlashInThePan": { + "NAME": "昙花一现", + "DESCRIPTION": "获得 !B! 点 格挡 。 NL 丢弃所有手牌。 NL 下回合开始时,抽等量牌。" + }, + "sneckomod:TrashCan": { + "NAME": "垃圾桶", + "DESCRIPTION": "回合开始时,你可以 消耗 1 张牌。", + "UPGRADE_DESCRIPTION": "固有 。 NL 回合开始时,你可以 消耗 1 张牌。" + }, + "sneckomod:Lacerate": { + "NAME": "割裂", + "DESCRIPTION": "造成 !D! 点伤害。 NL 本回合给予目标敌人负面效果时,额外给予 !M! 点 sneckomod:剧毒 。 NL sneckomod:赠礼 : *致残毒云 。", + "DESCRIPTION_BATTLE": "造成 !D! 点伤害。 NL 本回合给予目标敌人负面效果时,额外给予 !M! 点 sneckomod:剧毒 。" + }, + "sneckomod:SerpentineSleuth": { + "NAME": "蛇侦探", + "DESCRIPTION": "虚无 。 NL 打出 1 张能力牌时 NL 获得 [E] 。 NL sneckomod:赠礼 :稀有能力牌。", + "UPGRADE_DESCRIPTION": "虚无 。 NL 打出 1 张能力牌时 NL 获得 [E] [E] 。 NL sneckomod:赠礼 :稀有能力牌。", + "DESCRIPTION_BATTLE": "虚无 。 NL 打出 1 张能力牌时 NL 获得 [E] 。", + "UPGRADE_DESCRIPTION_BATTLE": "虚无 。 NL 打出 1 张能力牌时 NL 获得 [E] [E] 。" } } diff --git a/src/main/resources/sneckomodResources/localization/zhs/CharacterStrings.json b/src/main/resources/sneckomodResources/localization/zhs/CharacterStrings.json index b9f726b1d..fbf2bd900 100644 --- a/src/main/resources/sneckomodResources/localization/zhs/CharacterStrings.json +++ b/src/main/resources/sneckomodResources/localization/zhs/CharacterStrings.json @@ -7,7 +7,7 @@ "TEXT": [ "生于城市之间的蜿蜒生物。 NL 以迷惑捕食者的凝视而闻名。", "NL 嘶嘶嘶嘶嘶嘶嘶嘶嘶……", - "在一条昏暗的街上,你遇见几个戴着兜帽的人在进行某种黑暗的仪式。当你靠近时,他们全都同时转身面对你,让你觉得十分诡异。 其中个子最高的一个微微一笑,露出了长长的尖牙,向你伸出了一只苍白而瘦长的手: NL ~“加入我们,异蛇朋友啊。一起来感受高塔的温暖吧。”~" + "在一条昏暗的街上,你遇见几个戴着兜帽的人在进行某种黑暗的仪式。当你靠近时,他们全都同时转身面对你,让你觉得十分诡异。其中个子最高的一个微微一笑,露出了长长的尖牙,向你伸出了一只苍白而瘦长的手: NL ~“加入我们,尖牙生物。一起来感受高塔的温暖吧。”~" ] } } \ No newline at end of file diff --git a/src/main/resources/sneckomodResources/localization/zhs/EventStrings.json b/src/main/resources/sneckomodResources/localization/zhs/EventStrings.json index 5bf8fdeed..d20a9d6ea 100644 --- a/src/main/resources/sneckomodResources/localization/zhs/EventStrings.json +++ b/src/main/resources/sneckomodResources/localization/zhs/EventStrings.json @@ -2,26 +2,26 @@ "sneckomod:D8": { "NAME": "神秘八面体", "DESCRIPTIONS": [ - "接近神秘八面体。", + "穿过薄雾,你来到了一片寂静的空间。在废墟的中央,静静地悬浮着一个 #g神秘八面体 。它缓缓旋转,表面不断 #b~泛起微光~ ,像是某种 #y~先古造物~ 。 NL 当你伸出手,即将触及它的表面时,八面体 #b~骤然亮起~ ,一道复杂的符文流光闪烁而过。你感到一股 #r@轻微的震颤@ 自地面升起,周围的空气变得 #p沉重 ,整个空间都屏息等待你的行动。你决定……", "遗物爆了。", "获得遗物。", "决定离开。" ], "OPTIONS": [ "[打碎] #r失去 #r", - " #r生命。 #g获得5张未知牌。", - "[取走] #g获得 #g神秘八面体 。 #r被诅咒- #r疼痛。", + " #r生命。 #g从 #b3 #g张稀有 #y异色 #g牌选择 #b1 #g张获得之。", + "[拿取] #g获得 #g神秘八面体 。 #r被诅咒 #r- #r疼痛 。", "[离开]", - "[锁定] 需要使用随机数的牌。" + "[锁定] 需要1张 溢出 牌。" ] }, "sneckomod:BackToBasics": { "NAME": "", "DESCRIPTIONS": [ - "灵感总是比汗水更有用。" + "灵感胜过汗水。" ], "OPTIONS": [ - "[即兴发挥] 将所有 #g打击 与 #g防御 #g替换 为随机 #g未知 牌。", + "[创作] 将所有 #g打击 和 #g防御 #g替换 为另 1 个随机职业的。", "[锁定] 需要打击或防御。" ] }, @@ -33,21 +33,21 @@ "蛇非常失望地看着你,最后还是笑着祝你一路顺风。" ], "OPTIONS": [ - "[同意] #g获得一个随机遗物。 #r被诅咒- #r困惑。", + "[同意] #g获得一个随机异蛇遗物。 #r被诅咒- #r困惑 。", "[反对]", "[离开]" ] }, "sneckomod:SuspiciousHouse": { - "NAME": "可疑的房子", + "NAME": "养蛇人", "DESCRIPTIONS": [ "在城市中穿行时,你听到附近一座房子里传来刺耳的怪异尖叫。一番调查之后,你发现是一个城市住民正试图让笼中的一只蛇形生物安静下来。 NL NL “ ~喂!~ 你在我家干什么?! @滚吧!@ ” NL NL 被关着的小家伙吓了一跳,立即缩回笼子的角落里。显然它过得并不好。", - "“你想要这畜生? @说好了!@ 它可不值得我费劲去养。”NL NL 捕蛇人懊恼地 ~叹了口气,~ 打开笼锁伸手进去。小蛇以迅雷不及掩耳之势张开小颚死死咬住他的手指。 NL NL 在他挣脱这小家伙之前,你迅速插手,突然 #r一拳过去 将他击倒。你招呼小蛇,它欢快地缠到你手上,你们俩一同在尖塔中继续旅行。", - "蛇非常失望地看着你,最后还是笑着祝你一路顺风。" + "“你想要这畜生? @行吧!@ 它可不值得我费劲去养。”NL NL 捕蛇人懊恼地 ~叹了口气,~ 打开笼锁伸手进去。小蛇以迅雷不及掩耳之势张开小颚死死咬住他的手指。 NL NL 在他挣脱这小家伙之前,你迅速插手,突然 #r一拳过去 将他击倒。你招呼小蛇,它欢快地缠到你手上,你们俩一同在尖塔中继续旅行,你决定给它起个名字,叫做…… #y“克莱门汀”。", + "蛇非常失望地看着你,最后还是微笑着祝你一路顺风。" ], "OPTIONS": [ - "[营救] #g获得年轻异蛇。 #r被诅咒 #r- #r困惑。", + "[营救] #g获得幼年异蛇。 #r与愤怒的百夫长战斗。", "[离开]" ] } -} \ No newline at end of file +} diff --git a/src/main/resources/sneckomodResources/localization/zhs/KeywordStrings.json b/src/main/resources/sneckomodResources/localization/zhs/KeywordStrings.json index e23244113..e7671ec1e 100644 --- a/src/main/resources/sneckomodResources/localization/zhs/KeywordStrings.json +++ b/src/main/resources/sneckomodResources/localization/zhs/KeywordStrings.json @@ -1,48 +1,75 @@ [ { - "PROPER_NAME": "蛇证", + "PROPER_NAME": "Snekproof", "NAMES": [ - "蛇证" + "snekproof" ], - "DESCRIPTION": "不受 #y混乱 和 #y混淆 影响。" + "DESCRIPTION": "Snekproof cards aren't affected by #yConfusion and cannot be #yMuddled. NOTE FOR LOC: 不用翻译。" + }, + { + "PROPER_NAME": "Suit", + "NAMES": [ + "suit", + "suits" +], + "DESCRIPTION": "Suits refer to card's color. Token cards do not count as Suits. NOTE FOR LOC: 不用翻译。" + }, + { + "PROPER_NAME": "溢出", + "NAMES": [ + "Overflow", + "overflow", + "溢出" + ], + "DESCRIPTION": "手牌超过 #b5 张时,溢出牌被打出触发溢出效果。" }, { "PROPER_NAME": "混淆", "NAMES": [ - "混淆", "muddle", - "muddled" + "muddled", + "muddles", + "混淆" ], - "DESCRIPTION": "将一张牌的耗能本回合变为 #b0 ~ #b3 点。" + "DESCRIPTION": "将1张牌本回合第1次打出的耗能随机变为 #b0 ~ #b3 点。混淆后牌的耗能一定会改变。" }, { - "PROPER_NAME": "异色牌", + "PROPER_NAME": "异色", "NAMES": [ - "异色", - "offclass" + "offclass", + "异色" ], - "DESCRIPTION": "异蛇牌池以外的所有可获得牌。(包括 #y诅咒 和 #y状态牌 等)" + "DESCRIPTION": "异蛇牌以外的所有可获得牌。(包括 #y诅咒 和 #y状态 牌)" }, { - "PROPER_NAME": "明晰", + "PROPER_NAME": "赠礼", "NAMES": [ - "明晰" + "gift", + "赠礼" ], - "DESCRIPTION": "Replace an Unknown card with its current random card permanently." + "DESCRIPTION": "当你获得这张牌,可获得以下 异色 牌奖励(甚至金币)。" }, { - "PROPER_NAME": "幸运", + "PROPER_NAME": "Identify", "NAMES": [ - "lucky", - "幸运" + "identify" + ], + "DESCRIPTION": "Replace an #yUnidentified card with its current random card permanently. NOTE FOR LOC: 不用翻译" + }, + { + "PROPER_NAME": "剧毒", + "NAMES": [ + "venom", + "剧毒" ], - "DESCRIPTION": "牌面与药水效果的随机值取最大值。" + "DESCRIPTION": "拥有 #y剧毒 的敌人获得非 #y剧毒 的负面效果时,失去对应生命。" }, { - "PROPER_NAME": "即逝", + "PROPER_NAME": "幸运", "NAMES": [ - "即逝" + "lucky", + "幸运" ], - "DESCRIPTION": "打出后从牌组中移除。" + "DESCRIPTION": "溢出效果一定触发,与手牌大小无关。" } ] diff --git a/src/main/resources/sneckomodResources/localization/zhs/PotionStrings.json b/src/main/resources/sneckomodResources/localization/zhs/PotionStrings.json index 9622af4d0..2e4ffc0fd 100644 --- a/src/main/resources/sneckomodResources/localization/zhs/PotionStrings.json +++ b/src/main/resources/sneckomodResources/localization/zhs/PotionStrings.json @@ -1,32 +1,32 @@ { "sneckomod:DiceRollPotion": { - "NAME": "可能很强药剂", + "NAME": "瓶装卡牌", "DESCRIPTIONS": [ - "造成 #b", - " - #b", - " 点伤害。" + "在战斗中使用,增加 #b", + " 个卡牌奖励,可在 #b3 张 已 #y升级 罕见 #y异色 牌中选择1张获得。", + " 个卡牌奖励,可在 #b3 张 已 #y升级 罕见 #y异色 牌中选择1张获得。" ] }, "sneckomod:CheatPotion": { - "NAME": "流动幸运", + "NAME": "液态幸运", "DESCRIPTIONS": [ - "本回合内,获得 #y幸运 。", - " #b", - " 回合内,获得 #y幸运 。" + "本回合 #y溢出 效果一定触发,与手牌数无关。", + "#y溢出 效果一定触发,持续 #b", + " 个回合,与手牌数无关。" ] }, "sneckomod:MuddlingPotion": { "NAME": "尖峰苏打", "DESCRIPTIONS": [ - " #y混淆 手牌中耗能最高的 #b", + "#y混淆 手牌中耗能最高的 #b", " 张牌。 #y混淆 后耗能不为 #b3 点。" ] }, "sneckomod:OffclassReductionPotion": { "NAME": "奇异饮料", "DESCRIPTIONS": [ - "将手牌中所有 #y异色 牌的耗能降低 #b", - " 点。" + "降低手牌中 #y异色 牌的耗能 #b", + " 点" ] } } diff --git a/src/main/resources/sneckomodResources/localization/zhs/PowerStrings.json b/src/main/resources/sneckomodResources/localization/zhs/PowerStrings.json index 3a8f4712f..119c12333 100644 --- a/src/main/resources/sneckomodResources/localization/zhs/PowerStrings.json +++ b/src/main/resources/sneckomodResources/localization/zhs/PowerStrings.json @@ -1,70 +1,194 @@ { + "sneckomod:BlunderGuardPower": { + "NAME": "巨浪", + "DESCRIPTIONS": [ + "#y溢出 效果额外获得 #b", + " 点 #y格挡 。", + " 点 #y格挡 。" + ] + }, "sneckomod:CheapStockPower": { - "NAME": "廉价股票", + "NAME": "廉价存货", "DESCRIPTIONS": [ - "你的回合开始时,将手中耗能最高的 #y异色 牌耗能降低 #b1 点。", - "你的回合开始时,将手中耗能最高的 #y异色 牌耗能降低 #b1 点。重复 #b", - " 次。" + "回合开始时, #y混淆 手牌中耗能最高的1张牌。", + "回合开始时, #y混淆 手牌中耗能最高的1张牌 #b", + " 次。" ] }, "sneckomod:CheatPower": { "NAME": "幸运", "DESCRIPTIONS": [ - "本回合内,卡牌上的随机数值取上限值。", - " #b", - " 回合内,卡牌上的随机数值取上限值。" + "在本回合, #y溢出 效果一定触发,与手牌数无关。", + "在接下来 #b", + " 个回合, #y溢出 效果一定触发,与手牌数无关。" ] }, "sneckomod:MuddleDrawnCardsPower": { "NAME": "混淆抽牌", "DESCRIPTIONS": [ - "#y混淆 本回合抽到的下一张牌。", - "#y混淆 本回合抽到的下 #b", - " 张牌。(还剩 #b", - " 张)" + "#y混淆 下 1 张抽到的牌。", + "#y混淆 下 #b", + " 张抽到的牌。(剩", + " )" ] }, "sneckomod:MudshieldPower": { - "NAME": "混乱护盾", + "NAME": "泥浆屏障", "DESCRIPTIONS": [ - "每当你 #y混淆 一张牌时,获得 #b", + "当你 #y混淆 1 张牌,获得 #b", " 点 #y格挡 。" ] }, + "sneckomod:OverwhelmingPresencePower": { + "NAME": "威压", + "DESCRIPTIONS": [ + "每回合你第 1 次洗牌,获得 [E] 并抽 #b1 张牌。", + "每回合你第 1 次洗牌,获得 ", + " 点 [E] 并抽 #b", + " 张牌。" + ] + }, + "sneckomod:SerpentsNestPower": { + "NAME": "蛇巢", + "DESCRIPTIONS": [ + "每当你打出 1 张 #y能力 牌,对所有敌人造成 1 点伤害。", + "每当你打出 1 张 #y能力 牌,对所有敌人造成 #b", + " 伤害。" + ] + }, "sneckomod:SerpentMindPower": { "NAME": "异色形态", "DESCRIPTIONS": [ - "每当你打出一张 #y异色 牌时,抽 #b", - " 张牌。", - " 张牌。" + "你在本回合每打出1种颜色的牌,在回合结束时获得 #b", + " 层 #y力量 。", + " 层 #y力量 。" + ] + }, + "sneckomod:SnakeEyesPower": { + "NAME": "邪眼毒眸", + "DESCRIPTIONS": [ + "在本回合,下1张打出的 #y异色 牌被打出 2 次。", + "在本回合,下 #b", + " 张打出的 #y异色 牌被打出 2 次。" ] }, "sneckomod:UnendingSupplyPower": { - "NAME": "延绵不绝", + "NAME": "无尽供给", "DESCRIPTIONS": [ - "你的回合开始时,随机将 #b", - " 张 #y异色 牌加入你的手牌。" + "回合开始时,将 #b", + "回合开始时,将1张随机 #y异色 牌的 #y回响 加入手牌。", + " 张随机 #y异色 牌的 #y回响 加入手牌。" ] }, "sneckomod:UnknownUpgradedPostCombatPower": { - "NAME": "渴望力量", + "NAME": "Post-Combat Upgraded Unidentified", "DESCRIPTIONS": [ - "战斗结束时,额外获得 #b", - " 张已 #y升级 的 #y未知 牌。", - " 张已 #y升级 的 #y未知 牌。" + "At the end of combat, obtain #b", + " additional #yUpgraded #yUnidentified cards.", + " additional #yUpgraded #yUnidentified card.", + "NOTE FOR LOC: 不需要翻译。" + ] }, "sneckomod:UnlimitedRollsPower": { - "NAME": "无限随机", + "NAME": "无尽投掷", "DESCRIPTIONS": [ - "你的回合开始时,将一张带有 #y消耗 的 #y灵魂随机 加入你的手牌。" + "回合开始时,获得 #y灵魂骰掷 。" ] }, "sneckomod:Transmogrifying": { - "NAME": "惊变", + "NAME": "Transmogrifying", + "DESCRIPTIONS": [ + " is being transformed into another ", + " relic.", + "NOTE FOR LOC: 不需要翻译。" + ] + }, + "sneckomod:ToxicPersonalityPower": { + "NAME": "Toxic Personality", "DESCRIPTIONS": [ - " 将要变为另一件", - " 遗物。" + "Whenever you apply a debuff to an enemy, apply #b", + " #yVenom .", + "NOTE FOR LOC: 不需要翻译。" ] - } -} + }, + "sneckomod:TyphoonPower": { + "NAME": "台风之牙", + "DESCRIPTIONS": [ + "本回合每当 #y溢出 触发,打出 1 张 #y台风之牙 的复制。", + "本回合每当 #y溢出 触发,打出 #b", + " 张 #y台风之牙 的复制。" + ] + }, + "sneckomod:TyphoonPlusPower": { + "NAME": "台风之牙+", + "DESCRIPTIONS": [ + "本回合每当 #y溢出 触发,打出 1 张 #y台风之牙+ 的复制。", + "本回合每当 #y溢出 触发,打出 #b", + " 张 #y台风之牙+ 的复制。" + ] + }, + "sneckomod:SerpentineSleuthPower": { + "NAME": "蛇侦探", + "DESCRIPTIONS": [ + "每当你打出1张 #y能力 牌,获得 #b", + " 点 [E] 。", + " 点 [E] 。" + ] + }, + "sneckomod:BigGunsStrengthPower": { + "NAME": "枪火", + "DESCRIPTIONS": [ + "每当你打出 1 张耗能3+的牌,获得 #b", + " 层 #y力量。", + " 层 #y力量。" + ] + }, + "sneckomod:BigGunsBlockPower": { + "NAME": "掩护", + "DESCRIPTIONS": [ + "每当你打出一张费用3+的牌,获得 #b", + " 点 #y格挡 。", + " 点 #y格挡 。" + ] + }, + "sneckomod:AceOfWandsPower": { + "NAME": "五角星皇后", + "DESCRIPTIONS": [ + "当你给予敌人 1 种负面效果,获得 #b", + " 点 #y格挡 。", + " 点 #y格挡 。" + ] + }, + "sneckomod:LacerateDebuff": { + "NAME": "割裂", + "DESCRIPTIONS": [ + "在本回合,当你给予这个敌人 1 种负面效果,额外给予其 #b", + " 层 #y剧毒 。", + " 层 #y剧毒 。" + ] + }, + "sneckomod:FountainPower": { + "NAME": "毒泉", + "DESCRIPTIONS": [ + "#y溢出 效果额外给予随机敌人 #b", + " 层 #y剧毒 。", + " 层 #y剧毒 。" + ] + }, + "sneckomod:TrashCanPower": { + "NAME": "垃圾桶", + "DESCRIPTIONS": ["回合开始时,你可以 #y消耗 1张牌。", + "回合开始时,你可以至多 #y消耗 #b", + " 张牌。" + ] + }, + + "sneckomod:VenomDebuff": { + "NAME": "剧毒", + "DESCRIPTIONS": [ + "获得非 #y剧毒 负面效果时,失去 #b", + " 点生命。" + ] + } + } diff --git a/src/main/resources/sneckomodResources/localization/zhs/RelicStrings.json b/src/main/resources/sneckomodResources/localization/zhs/RelicStrings.json index 1ab47dfe4..a1178a789 100644 --- a/src/main/resources/sneckomodResources/localization/zhs/RelicStrings.json +++ b/src/main/resources/sneckomodResources/localization/zhs/RelicStrings.json @@ -3,14 +3,14 @@ "NAME": "异蛇之魂", "FLAVOR": "0……3……2……2……1", "DESCRIPTIONS": [ - "每场战斗首次打出 #y异色 牌时,获得 [E] 并抽 #b1 张牌。" + "战斗开始时,获得 1 张 #y灵魂骰掷 。" ] }, "sneckomod:SuperSneckoSoul": { "NAME": "超级蛇魂", "FLAVOR": "3120231321230320", "DESCRIPTIONS": [ - "替换 [#407B93]异蛇之魂[] 。 NL 每回合首次打出 #y异色 牌时,获得 [E] 。" + "替换 [#407B93]异蛇之魂[] 。 NL 奇数回合开始时,获得 1 张 #y灵魂骰掷 ;偶数回合开始时,多抽1张牌并 #ysneckomod:混淆 之。" ] }, "sneckomod:CleanMud": { @@ -24,98 +24,96 @@ "NAME": "异蛇戒指", "FLAVOR": "无法辨认,难以阅读,周四到期。", "DESCRIPTIONS": [ - "战斗开始时,给予所有敌人 #b0-2 层 #y虚弱 与 #y易伤 。" + "触发 #b3 次 #ysneckomod:溢出 时,给予随机敌人 #b1 层 #y虚弱 与 #y易伤 。" ] }, "sneckomod:CrystallizedMud": { "NAME": "催眠吊坠", "FLAVOR": "晃眼的土块。", "DESCRIPTIONS": [ - "回合开始时获得 [E] 。 #ysneckomod:混淆 数值不为 #b0 。" + "回合开始时获得 [E] 。 #ysneckomod:混淆 后耗能不为 #b0 。" ] }, "sneckomod:LoadedDie": { "NAME": "注料骰子", "FLAVOR": "灌了奶酪。", "DESCRIPTIONS": [ - "卡牌随机值下限提高 #b1 点。" + "当1张牌被 #ysneckomod:混淆 时,获得 #b1 点 #y格挡 。" ] }, "sneckomod:RareBoosterPack": { "NAME": "稀有增强箱", "FLAVOR": "新品。", "DESCRIPTIONS": [ - "拾起时,获得不同类型的 #y未知稀有牌 各 #b1 张。" + "拾起时,获得1张 #y稀有 #ysneckomod:异色 牌。" ] }, "sneckomod:SleevedAce": { - "NAME": "袖中妄牌", + "NAME": "袖中王牌", "FLAVOR": "我也出A。", "DESCRIPTIONS": [ - "战斗开始时,将 #b1 张 #y作弊 加入手牌并 #y保留 。" + "战斗开始时,获得1张 #y记号牌 。" ] }, "sneckomod:UnknownEgg": { "NAME": "未知之蛋", "FLAVOR": "想知道孵出什么? 交 $1000 再说。", "DESCRIPTIONS": [ - " #y明晰 变为自由行动。 NL 卡牌奖励中的 #y未知 牌将被 #y升级 。" + "每当你获得 #y异色 牌时,将其 #y升级 。 NL 拾起时,随机 #y升级 #b2 张 #ysneckomod:异色 牌。 " ] }, "sneckomod:SuperSneckoEye": { "NAME": "超级蛇眼", "FLAVOR": "0121012", "DESCRIPTIONS": [ - "替换 #r异蛇之眼 。 NL 回合开始时,额外抽 #b2 张牌。 NL 战斗开始时,获得 #y混乱 。 NL 每场战斗首次抽到耗能为 #b3 的牌时,将其耗能变为 #b0 。" + "替换 #y异蛇之眼 。 NL 回合开始时,额外抽 #b4 张牌。 NL 战斗开始时,获得 #y混乱 。" ] }, "sneckomod:SneckoTalon": { "NAME": "陈家挂坠", "FLAVOR": "见证了异蛇之眼与符文金字塔的辉煌。", "DESCRIPTIONS": [ - "回合开始时,耗能最高的手牌本回合首次耗能减 #b1 。" + "回合开始时,耗能不为0的随机手牌本回合首次耗能减 #b1 。" ] }, "sneckomod:BlankCard": { "NAME": "空牌", - "FLAVOR": "拟牌妖。", + "FLAVOR": "卡牌模仿者。", "DESCRIPTIONS": [ - "战斗开始时,随机将牌组中 #b1 张牌的 #ygremlin:回响 加入手牌,其耗能为 #b0 。" + "战斗开始时,随机将牌组中 #b1 张 #r非诅咒 #y非状态 牌的 #ygremlin:回响 加入手牌,其耗能为 #b0 。" ] }, "sneckomod:D8": { "NAME": "神秘八面体", "FLAVOR": "它似乎灌铅的。", "DESCRIPTIONS": [ - "拾起时,选择牌组中 #b1 张数值为随机值的牌。其总是触发最大值。", - "选择一张牌 ", - " 每当 ", - " 被打出时,随机值为其最大值。" + "拾起时,选择牌组中 #b1 张 #ysneckomod:溢出 牌。每当你打出它,获得 #b4 点 #y格挡 并触发其 #y溢出 效果,即使你的手牌数不够。", + "选择1张牌 ", + " 当 ", + " 被打出时,获得 #b4 点 #y格挡 并触发其 #ysneckomod:溢出 效果,与手牌数无关。" ] }, "sneckomod:BabySnecko": { - "NAME": "年轻异蛇", + "NAME": "幼年异蛇", "FLAVOR": "令人困惑的可爱。", "DESCRIPTIONS": [ - "回合开始时,随机造成 #b5 点伤害。" + "回合开始时,对随机敌人造成 #b9 点伤害并 #ysneckomod:混淆 随机 #b2 张非 #b0 手牌。" ] }, "sneckomod:SneckoCommon": { "NAME": "徽章", - "FLAVOR": "我系战系锅,介系我最喜欢滴遗物-商店小广告", + "FLAVOR": "我系战系锅,介系我最喜欢滴遗物。——商店小广告", "DESCRIPTIONS": [ - "拾起时,从 #b3 张 #y未知角色牌 中选择 #b1 张加入牌组。不再出现其他角色的 #y未知角色牌 。", - "接下来的 #y未知角色牌 都将是 #y未知 #y", - "牌 。" + "拾起时,从 #b5 张罕见 #ysneckomod:异色 能力牌中选择 #b1 张加入牌组。" ] }, "sneckomod:SneckoBoss": { "NAME": "幸运马蹄", "FLAVOR": "一路顺风。", "DESCRIPTIONS": [ - "拾起时,从 #b3 张 #y未知 角色牌中选择 #b1 张。将其 #b5 张复制品加入牌组。所有战斗卡牌奖励都将有这名角色的牌。", - "拾起时,获得 #b5 张 #y未知 ", - " 牌。所有战斗卡牌奖励都将有 ", + "拾起时,从 #b3 个 #y角色 选择 #b1 个。获得 #b3 组已 #y升级 罕见牌奖励和 #b2 组稀有牌奖励(来自所选角色)。所有战斗都会额外掉落所选角色的卡牌奖励。", + "拾起时,获得来自 ", + " 的 #b3 组 已 #y升级 罕见牌奖励和 #b2 组稀有牌奖励。所有战斗卡牌奖励都将额外掉落 ", " 牌。" ] } diff --git a/src/main/resources/sneckomodResources/localization/zhs/UIStrings.json b/src/main/resources/sneckomodResources/localization/zhs/UIStrings.json index 5a5d8959b..e61764de1 100644 --- a/src/main/resources/sneckomodResources/localization/zhs/UIStrings.json +++ b/src/main/resources/sneckomodResources/localization/zhs/UIStrings.json @@ -1,36 +1,36 @@ { "sneckomod:Unknown": { "TEXT": [ - "未知", - "已 升级 的", - "每场战斗 #y未知 牌都将随机呈现为其牌池内的一张牌,持续整场战斗。 NL (一些角色专属性较强的牌,即机制相对独立、单牌效果较弱的牌,已被刻意从 #y未知 牌池剔除)", - " NL 本局未知牌角色池:", - "每场战斗 #y未知 牌都将随机呈现为其牌池内的一张牌,持续整场战斗。 NL (一些角色专属性较强的牌,即机制相对独立、单牌效果较弱的牌,已被刻意从 #y未知 牌池剔除)", - "每场战斗 #y未知 牌都将随机呈现为其牌池内的一张牌,持续整场战斗。 NL (一些角色专属性较强的牌,即机制相对独立、单牌效果较弱的牌,已被刻意从 #y未知 牌池剔除)" + "Unidentified", + " Upgraded ", + "At the start of combat, Unidentified cards transform into other random cards from the chosen classes that satisfy certain constraints.", + " NL Chosen classes:", + "At the start of combat, Unidentified cards transform into other random cards from ANY other class that satisfy certain constraints.", + "At the start of combat, Unidentified cards transform into other random cards from other classes that satisfy certain constraints." ] }, "sneckomod:UnknownNames": { "TEXT": [ - "未知" + "Unidentified" ] }, "sneckomod:UnknownClass": { "TEXT": [ - "???", - " *未知 ", - " 牌。", - "角色", - " ", - "你应该看不到这个的。请报告给Vex", - "已 升级 的 " + "???", + "*Unidentified ", + " Card.", + "Character", + "The ", + "You should never see this. Report to Vex", + "Upgraded " ] }, "sneckomod:UpgradedUnknownReward": { - "TEXT": [ - "将一张已升级的未知牌加入牌组", - "选择一张牌" - ] -}, + "TEXT": [ + "Add an Unidentified+ card to your deck", + "Pick a Card." + ] + }, "sneckomod:FreeRetainMod": { "TEXT": [ "保留 。 NL " @@ -41,30 +41,46 @@ " NL 消耗 。" ] }, - "sneckomod:ChallengeMode": { "TEXT": [ - "挑战模式 - 混乱无序", - "未知牌池扩大到所有角色。适合异蛇高玩享用。" + "挑战模式—异蛇·包罗万象", + "礼物将来自所有角色,推荐异蛇高玩尝试。" ] }, "sneckomod:LockInBonfireOptions": { "TEXT": [ - "明晰", - "将未知牌变为特定的牌,可选牌为上场战斗呈现的牌", - "需要一张未知牌", - "选择一张牌加入你的牌组并移除未知", - "[自由行动] 选择一张牌加入你的牌组并移除未知" + "Identify", + "Lock an Unidentified into a permanent card.", + "Requires an Unidentified card.", + "Select a card to add to your deck, removing its Unidentified.", + "[Free Action] Lock an Unidentified into a permanent card." + ] + }, + "sneckomod:CommonAttackReward": { + "TEXT": [ + "将1张异色牌加入你的卡组中。", + "选择1张牌。" + ] + }, + "sneckomod:DiceRollPotionReward": { + "TEXT": [ + "将1张已升级的牌加入你的卡组中。", + "选择1张牌。" + ] + }, + "sneckomod:ColorfulPowersCardReward": { + "TEXT": [ + "将1张已升级的能力牌加入你的卡组中。", + "选择1张牌。" ] }, "sneckomod:AtGameStart": { "TEXT": [ "", "牌", - "本局游戏 *未知 牌将会变为 ", - " 牌。", - "选择本局游戏未知牌" + "礼物 将包括", + " 牌", + "选择本局游戏礼物牌" ] } } - diff --git a/src/main/resources/sneckomodResources/localization/zht/CardStrings.json b/src/main/resources/sneckomodResources/localization/zht/CardStrings.json index 68e0cb703..6e14654e7 100644 --- a/src/main/resources/sneckomodResources/localization/zht/CardStrings.json +++ b/src/main/resources/sneckomodResources/localization/zht/CardStrings.json @@ -1,338 +1,618 @@ { - "sneckomod:Strike": { - "NAME": "打擊", - "DESCRIPTION": "造成 !D! 點傷害。" + "sneckomod:Blunderbus": { + "NAME": "火槍亂射", + "DESCRIPTION": "對所有敵人造成 !D! 點傷害。 NL 手牌中每有 1 張3+耗能牌重復 1 次。" }, - "sneckomod:Defend": { - "NAME": "防禦", - "DESCRIPTION": "獲得 !B! 點 格擋 。" + "sneckomod:Tsunami": { + "NAME": "巨浪", + "DESCRIPTION": "sneckomod:溢出 觸發額外獲得 !M! 點 格擋 。" }, - "sneckomod:SnekBite": { - "NAME": "異蛇噬咬", - "DESCRIPTION": "造成 !D! 點傷害。 NL sneckomod:混淆 手中耗能最高的 !M! 張牌。", - "UPGRADE_DESCRIPTION": "造成 !D! 點傷害。 NL sneckomod:混淆 手中耗能最高的 !M! 張牌。" + "sneckomod:CheapStock": { + "NAME": "廉價存貨", + "DESCRIPTION": "回合開始時, sneckomod:混淆 手牌中最高耗能的 1 張牌。", + "UPGRADE_DESCRIPTION": "回合開始時, sneckomod:混淆 手牌中最高耗能的 !M! 張牌。" }, - "sneckomod:TailWhip": { - "NAME": "掃尾", - "DESCRIPTION": "造成 !D! 點傷害。 NL 給予 !M! ~ 2層 虛弱 。 NL 給予 !M! ~ 2層 易傷 。" + "sneckomod:Cheat": { + "NAME": "純粹的幸運?", + "DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。", + "UPGRADE_DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。", + "EXTENDED_DESCRIPTION": [ + "本地化須知:廢棄的牌只需要復製以上的話即可。" + ] }, - "sneckomod:UnknownCommonAttack": { - "NAME": "???", - "DESCRIPTION": " *未知 普通攻擊牌。", - "UPGRADE_DESCRIPTION": "已 升級 的 *未知 普通攻擊牌。" + "sneckomod:DangerNoodle": { + "NAME": "貪吃蛇", + "DESCRIPTION": "造成 !D! 點傷害。 NL sneckomod:混淆 1 張牌 NL sneckomod:贈禮 :3+耗能牌。", + "DESCRIPTION_BATTLE": "造成 !D! 點傷害。 NL sneckomod:混淆 1 張牌。" }, - "sneckomod:UnknownCommonSkill": { - "NAME": "???", - "DESCRIPTION": " *未知 普通技能牌。", - "UPGRADE_DESCRIPTION": "已 升級 的 *未知 普通技能牌。" + "sneckomod:Deception": { + "NAME": "欺詐", + "DESCRIPTION": "獲得 !B! 點 格擋 。 NL 獲得 1 張 *震蕩波 。 NL 消耗 。" }, - "sneckomod:UnknownUncommonAttack": { - "NAME": "???", - "DESCRIPTION": " *未知 罕見攻擊牌。", - "UPGRADE_DESCRIPTION": "已 升級 的 *未知 罕見攻擊牌。" + "sneckomod:Defend": { + "NAME": "防禦", + "DESCRIPTION": "獲得 !B! 點 格擋 。" }, - "sneckomod:UnknownUncommonSkill": { - "NAME": "???", - "DESCRIPTION": " *未知 罕見技能牌。", - "UPGRADE_DESCRIPTION": "已 升級 的 *未知 罕見技能牌。" + "sneckomod:DefensiveFlair": { + "NAME": "防禦才華", + "DESCRIPTION": "獲得 !B! 點 格擋 。 NL 手牌每有 1 張 sneckomod:異色 牌增加獲得格擋 !M! 點。 NL sneckomod:贈禮 :罕見牌。", + "DESCRIPTION_BATTLE": "獲得 !B! 點 格擋 。 NL 手牌中每有 1 張 sneckomod:異色 牌增加獲得格擋 !M! 點。" }, - "sneckomod:UnknownUncommonPower": { - "NAME": "???", - "DESCRIPTION": " *未知 罕見能力牌。", - "UPGRADE_DESCRIPTION": "已 升級 的 *未知 罕見能力牌。" + "sneckomod:DiceBlock": { + "NAME": "骰子格擋", + "DESCRIPTION": "獲得 !B! 點 格擋 。 NL sneckomod:溢出 :再獲得 !B! 點 格擋 。" }, - "sneckomod:UnknownRareAttack": { - "NAME": "???", - "DESCRIPTION": " *未知 稀有攻擊牌。", - "UPGRADE_DESCRIPTION": "已 升級 的 *未知 稀有攻擊牌。" + "sneckomod:DiceBoulder": { + "NAME": "巨型骰子", + "DESCRIPTION": "獲得 !B! 點 格擋 。 NL 該牌在本場戰鬥中增加獲得 格擋 !M! 點,增加耗能 !qqq! 點。" }, - "sneckomod:UnknownRareSkill": { - "NAME": "???", - "DESCRIPTION": " *未知 稀有技能牌。", - "UPGRADE_DESCRIPTION": "已 升級 的 *未知 稀有技能牌。" + "sneckomod:DiceCrush": { + "NAME": "骰子撞擊", + "DESCRIPTION": "造成 !D! 點傷害。 NL sneckomod:溢出 :抽 2 張牌。" }, - "sneckomod:UnknownRarePower": { - "NAME": "???", - "DESCRIPTION": " *未知 稀有能力牌。", - "UPGRADE_DESCRIPTION": "已 升級 的 *未知 稀有能力牌。" + "sneckomod:DragonsHoard": { + "NAME": "龍之秘藏", + "DESCRIPTION": "虛無 。 NL 獲得 !M! 層 力量 。 NL 獲得 !M! 層 敏捷 。", + "UPGRADE_DESCRIPTION": "獲得 !M! 層 力量 。 NL 獲得 !M! 層 敏捷 。" }, - "sneckomod:SoulDraw": { - "NAME": "靈魂抽牌", - "DESCRIPTION": "sneckomod:蛇證 。 NL 隨機獲得 !M! 張 sneckomod:異色 牌。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "棄用" + "sneckomod:FourOfAKind": { + "NAME": "Four Of A Kind", + "DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。", + "UPGRADE_DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。", + "EXTENDED_DESCRIPTION": [ + "本地化須知:廢棄的牌只需要復製以上的話即可。" + ] }, - "sneckomod:SoulRoll": { - "NAME": "靈魂隨機", - "DESCRIPTION": "sneckomod:蛇證 。 NL sneckomod:混淆 所有手牌。", - "UPGRADE_DESCRIPTION": "sneckomod:蛇證 。 NL sneckomod:混淆 所有手牌。 NL 抽一張牌。" + "sneckomod:GlitteringGambit": { + "NAME": "豪賭", + "DESCRIPTION": "不能被打出 。 NL 不能被移除。 NL sneckomod:贈禮 :已升級的稀有牌和 !M! 靈魂。", + "UPGRADE_DESCRIPTION": "不能被打出 。 NL 虛無 。 NL 不能被移除。 NL sneckomod:贈禮 :已升級的稀有牌和 !M! 靈魂。", + "DESCRIPTION_BATTLE": "不能被打出 。", + "UPGRADE_DESCRIPTION_BATTLE": "不能被打出 。 NL 虛無 。" + }, + "sneckomod:ImmovableObject": { + "NAME": "Immovable Object", + "DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。", + "EXTENDED_DESCRIPTION": [ + "本地化須知:廢棄的牌只需要復製以上的話即可。" + ] }, - "sneckomod:SnekBeam": { - "NAME": "蛇形射線", - "DESCRIPTION": "對所有敵人造成牌組中 *未知 牌數量點傷害。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "對所有敵人造成牌組中 *未知 牌數量點傷害。", + "sneckomod:IronFang": { + "NAME": "鋼牙", + "DESCRIPTION": "對所有敵人造成 !D! 點傷害。 NL 給予所有敵人 !M! 層 虛弱 。" + }, + "sneckomod:ImprovisedAttack": { + "NAME": "Improvised Attack", + "DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。", "EXTENDED_DESCRIPTION": [ - " NL (造成 !D! 點傷害。) NL 消耗 。", - " NL (造成 !D! 點傷害。)" + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards。" ] }, - "sneckomod:UnknownStrike": { - "NAME": "???", - "DESCRIPTION": " *未知 打擊牌。", - "UPGRADE_DESCRIPTION": "已 升級 的 *未知 打擊牌。" + "sneckomod:ImprovisedGuard": { + "NAME": "Improvised Guard", + "DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards。" + ] + }, + "sneckomod:LuckyBreak": { + "NAME": "好運降臨", + "DESCRIPTION": "獲得 !B! 點 格擋 。 NL 手牌中每有1張2+耗能牌,抽 !M! 張牌。" }, "sneckomod:Nope": { "NAME": "不行", - "DESCRIPTION": "sneckomod:蛇證 。 NL 消耗 一張手牌。 NL 獲得同角色牌。", - "UPGRADE_DESCRIPTION": "sneckomod:蛇證 。 NL 消耗 一張手牌。 NL 獲得同角色牌, NL 其耗能減1。", + "DESCRIPTION": "獲得 !B! 點 格擋 。 NL 消耗 1 張牌。 NL 若它是某職業牌,獲得 1 張隨機該職業牌。", + "UPGRADE_DESCRIPTION": "獲得 !B! 點 格擋 。 NL 消耗 1 張牌。 NL 若它是某職業牌,獲得 1 張隨機該職業牌。", "EXTENDED_DESCRIPTION": [ - " 選擇一張牌替換。" + "消耗 。" ] }, - "sneckomod:UnknownClass": { - "NAME": "???", - "DESCRIPTION": "未知bug-報告開發組。" + "sneckomod:SnakeEyes": { + "NAME": "邪眼毒眸", + "DESCRIPTION": "本回合下 1 張打出的 sneckomod:異色 牌將被打出2次。 NL sneckomod:贈禮 :稀有技能牌。", + "UPGRADE_DESCRIPTION": "本回合下 2 張打出的 sneckomod:異色 牌將被打出2次。 NL sneckomod:贈禮 :稀有技能牌。", + "DESCRIPTION_BATTLE": "本回合下 1 張打出的 sneckomod:異色 牌將被打出2次。", + "UPGRADE_DESCRIPTION_BATTLE": "本回合下 2 張打出的 sneckomod:異色 牌將被打出2次。" }, - "sneckomod:UnknownInnate": { - "NAME": "???", - "DESCRIPTION": " *未知 固有 牌。", - "UPGRADE_DESCRIPTION": "已 升級 的 *未知 固有 牌。" + "sneckomod:Memorize": { + "NAME": "Memorize", + "DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。", + "UPGRADE_DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。", + "EXTENDED_DESCRIPTION": [ + " to Identify。", + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards。" + ] }, - "sneckomod:Unknown": { - "NAME": "???", - "DESCRIPTION": " *未知 基礎牌。", - "UPGRADE_DESCRIPTION": "已 升級 的 *未知 基礎牌。" + "sneckomod:MintCondition": { + "NAME": "絕佳", + "DESCRIPTION": "sneckomod:溢出 :獲得 !M! 層 力量 。" }, - "sneckomod:Unknown0Cost": { - "NAME": "???", - "DESCRIPTION": " *未知 0耗能牌。", - "UPGRADE_DESCRIPTION": "已 升級 的 *未知 0耗能牌。" + "sneckomod:MixItUp": { + "NAME": "Mix It Up!", + "DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。", + "EXTENDED_DESCRIPTION": [ + "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。" + ] }, - "sneckomod:Unknown1Cost": { - "NAME": "???", - "DESCRIPTION": " *未知 1耗能牌。", - "UPGRADE_DESCRIPTION": "已 升級 的 *未知 1耗能牌。" + "sneckomod:MorePower": { + "NAME": "More Power!", + "DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards。" + ] }, - "sneckomod:Unknown2Cost": { - "NAME": "???", - "DESCRIPTION": " *未知 2耗能牌。", - "UPGRADE_DESCRIPTION": "已 升級 的 *未知 2耗能牌。" + "sneckomod:Mudshield": { + "NAME": "泥漿屏障", + "DESCRIPTION": "每當你 sneckomod:混淆 1 張牌,獲得 !M! 點 格擋 。" }, - "sneckomod:Unknown3Cost": { - "NAME": "???", - "DESCRIPTION": " *未知 3耗能牌。", - "UPGRADE_DESCRIPTION": "已 升級 的 *未知 3耗能牌。" + "sneckomod:OverwhelmingPresence": { + "NAME": "威壓", + "DESCRIPTION": "回合的第 1 次洗牌時,獲得 [E] 並抽 !M! 張牌。" }, - "sneckomod:UnknownX": { - "NAME": "???", - "DESCRIPTION": " *未知 X耗能牌。", - "UPGRADE_DESCRIPTION": "已 升級 的 *未知 X耗能牌。" + "sneckomod:RiskySword": { + "NAME": "險刃", + "DESCRIPTION": "造成 !D! 點傷害。 NL 當本牌被 sneckomod:混淆 時,提高本牌在本場戰鬥中的傷害 !M! 點。" }, - "sneckomod:UnknownEthereal": { - "NAME": "???", - "DESCRIPTION": " *未知 虛無 牌。", - "UPGRADE_DESCRIPTION": "已 升級 的 *未知 虛無 牌。" + "sneckomod:PoisonParadise": { + "NAME": "毒泉", + "DESCRIPTION": "sneckomod:溢出 效果額外給予隨機敵人 !M! 層 sneckomod:劇毒 。" }, - "sneckomod:UnknownBlock": { - "NAME": "???", - "DESCRIPTION": " *未知 格擋 牌。", - "UPGRADE_DESCRIPTION": "已 升級 的 *未知 格擋 牌。" + "sneckomod:PureSnecko": { + "NAME": "變幻", + "DESCRIPTION": "抽 !M! 張牌。 NL sneckomod:混淆 這幾張牌。" }, - "sneckomod:UnknownExhaust": { - "NAME": "???", - "DESCRIPTION": " *未知 消耗 牌。", - "UPGRADE_DESCRIPTION": "已 升級 的 *未知 消耗 牌。" + "sneckomod:QuickBite": { + "NAME": "蛇耙", + "DESCRIPTION": "造成 !D! 點傷害。 NL 抽 !M! 張牌。 NL sneckomod:混淆 這幾張牌。", + "UPGRADE_DESCRIPTION": "造成 !D! 點傷害。 NL 抽 !M! 張牌。 NL sneckomod:混淆 這幾張牌。" }, - "sneckomod:SoulCleanse": { - "NAME": "靈魂凈化", - "DESCRIPTION": "sneckomod:蛇證 。 NL sneckomod:混淆 所有手牌。 NL 本次 sneckomod:混淆 耗能不為3。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "sneckomod:蛇證 。 NL sneckomod:混淆 所有手牌。 NL 本次 sneckomod:混淆 耗能不為3。" + "sneckomod:QuickMove": { + "NAME": "迅捷步伐", + "DESCRIPTION": "獲得 !B! 點 格擋 。 NL sneckomod:溢出 :給予所有敵人 !M! 層 易傷 。" }, - "sneckomod:SoulExchange": { - "NAME": "靈魂交換", - "DESCRIPTION": "sneckomod:蛇證 。 NL 抽1張牌並 消耗 一張。 NL 變化所有手牌至 消耗 牌的同角色牌。", - "UPGRADE_DESCRIPTION": "sneckomod:蛇證 。 NL 抽 !M! 張牌並 消耗 一張。 NL 變化所有手牌至 消耗 牌的同角色牌。", + "sneckomod:RainOfDice": { + "NAME": "骰子雨", + "DESCRIPTION": "造成 !D! 點傷害。 NL sneckomod:混淆 1 張牌。 NL 獲得 1 張 *骰子雨 。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "造成 !D! 傷害。 NL sneckomod:混淆 1 張牌。 NL 獲得 1 張 *骰子雨+ 。 NL 消耗 。" + }, + "sneckomod:Restock": { + "NAME": "換牌", + "DESCRIPTION": "丟棄所有手牌。 NL 抽 !M! 張牌。 NL sneckomod:混淆 全部手牌。 NL 消耗 。" + }, + "sneckomod:Rotation": { + "NAME": "Rotation", + "DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。", + "UPGRADE_DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。", "EXTENDED_DESCRIPTION": [ - "來消耗以交換靈魂。" + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards。" ] }, - "sneckomod:CheapStock": { - "NAME": "廉價股票", - "DESCRIPTION": "回合開始時,耗能最高的 sneckomod:異色 手牌耗能減1。", - "UPGRADE_DESCRIPTION": "固有 。 NL 回合開始時,耗能最高的 sneckomod:異色 手牌耗能減1。" + "sneckomod:SerpentBottle": { + "NAME": "折扣甩賣", + "DESCRIPTION": "抽 !qqq! 張牌。 NL sneckomod:混淆 1 張牌。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "抽 !qqq! 張牌。 NL sneckomod:混淆 !M! 張牌。 NL 消耗 。" }, - "sneckomod:UnlimitedRolls": { - "NAME": "無限隨機", - "DESCRIPTION": "回合開始時獲得 *靈 *魂 *隨 *機 的 gremlin:回響 。", - "UPGRADE_DESCRIPTION": " 固有 。 NL 回合開始時獲得 *靈 *魂 *隨 *機 的 gremlin:回響 。" + "sneckomod:SerpentIdol": { + "NAME": "蛇像", + "DESCRIPTION": "從 !M! 張隨機 sneckomod:異色 牌中選擇 1 張獲得。 NL 本回合第 1 次打出為0耗能。 NL 消耗 。" }, - "sneckomod:MasterEye": { - "NAME": "主宰之眼", - "DESCRIPTION": "獲得 混亂 。 NL 回合開始時抽 !M! 張牌。", - "UPGRADE_DESCRIPTION": "獲得 混亂 。 NL 回合開始時抽 !M! 張牌。" + "sneckomod:SerpentMind": { + "NAME": "異色形態", + "DESCRIPTION": "虛無 。 NL 回合結束時,你在本回合每打出 1 種職業的牌,獲得 !M! 層 力量 。 NL sneckomod:贈禮 :稀有牌。", + "UPGRADE_DESCRIPTION": "回合結束時,你在本回合每打出 1 種職業的牌,獲得 !M! 層 力量 。 NL sneckomod:贈禮 :稀有牌。", + "DESCRIPTION_BATTLE": "回合結束時,你再本回合每打出 1 種職業的牌,獲得 !M! 層 力量 。" }, - "sneckomod:ImprovisedAttack": { - "NAME": "即興攻擊", - "DESCRIPTION": "造成 !D! 點傷害。 NL 隨機獲得一張 sneckomod:異色 攻擊牌並 sneckomod:混淆 它。" + "sneckomod:SlitherThrough": { + "NAME": "遊蛇穿行", + "DESCRIPTION": "造成 !D! 點傷害。 NL 降低手牌中 sneckomod:異色 牌本回合下 1 次打出的耗能 !M! 點 1 次。 NL sneckomod:贈禮 :罕見牌。", + "DESCRIPTION_BATTLE": "造成 !D! 點傷害。 NL 降低手牌中 sneckomod:異色 牌本回合下 1 次打出的耗能 !M! 點 1 次。" }, - "sneckomod:ImprovisedGuard": { - "NAME": "即興防禦", - "DESCRIPTION": "獲得 !B! 點 格擋 。 NL 隨機獲得一張 sneckomod:異色 技能牌並 sneckomod:混淆 它。" + "sneckomod:SnakeSap": { + "NAME": "Snake Sap", + "DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards。" + ] }, - "sneckomod:QuickMove": { - "NAME": "快速移動", - "DESCRIPTION": "獲得 !B! 點 格擋 。 NL sneckomod:混淆 手中耗能最高的牌。", - "UPGRADE_DESCRIPTION": "獲得 !B! 點 格擋 。 NL sneckomod:混淆 手中耗能最高的 !M! 張牌。" + "sneckomod:SnekBeam": { + "NAME": "激光眼", + "DESCRIPTION": "造成 !D! 點傷害。 NL 獲得 [E] 。" }, - "sneckomod:QuickBite": { - "NAME": "蛇耙", - "DESCRIPTION": "造成 !D! 點傷害。 NL 抽 !M! ~ 2 張牌。 NL sneckomod:混淆 手中耗能最高的牌。" + "sneckomod:SnekBite": { + "NAME": "蛇咬", + "DESCRIPTION": "造成 !D! 點傷害。 NL sneckomod:混淆 1 張牌。", + "UPGRADE_DESCRIPTION": "造成 !D! 點傷害。 NL sneckomod:混淆 !M! 張牌。" }, - "sneckomod:Rotation": { - "NAME": "輪換", - "DESCRIPTION": "sneckomod:蛇證 。 NL 丟棄所有 sneckomod:異色 牌。 NL 抽等量張牌。", - "UPGRADE_DESCRIPTION": "sneckomod:蛇證 。 NL 丟棄所有 sneckomod:異色 牌。 NL 抽等量加 !M! 張牌。" + "sneckomod:SoulCleanse": { + "NAME": "Soul Cleanse", + "DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。", + "UPGRADE_DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards。" + ] }, - "sneckomod:SerpentMind": { - "NAME": "異色形態", - "DESCRIPTION": "sneckomod:蛇證 。 NL 打出 sneckomod:異色 牌時抽一張牌。", - "UPGRADE_DESCRIPTION": "打出 sneckomod:異色 牌時抽一張牌。" + "sneckomod:SoulDraw": { + "NAME": "靈魂抽取", + "DESCRIPTION": "獲得 !M! 張隨機 sneckomod:異色 牌。 NL 這 2 張牌獲得 保留 。 NL 消耗 。" }, - "sneckomod:SlitherStrike": { - "NAME": "滑動打擊", - "DESCRIPTION": "造成 !D! 點傷害。 NL 所有 sneckomod:異色 手牌本回合耗能減1。" + "sneckomod:SoulExchange": { + "NAME": "靈魂交換", + "DESCRIPTION": "保留 。 NL sneckomod:混淆 所有手牌。 NL 消耗 。" }, - "sneckomod:PureSnecko": { - "NAME": "易質", - "DESCRIPTION": "sneckomod:蛇證 。 NL 變化所有 sneckomod:異色 手牌。", - "UPGRADE_DESCRIPTION": "sneckomod:蛇證 。 NL 變化所有 sneckomod:異色 手牌, NL 其耗能減1。" + "sneckomod:SoulRoll": { + "NAME": "靈魂骰擲", + "DESCRIPTION": "保留 。 NL 獲得 !B! 點 格擋 。 NL sneckomod:混淆 1 張牌。 NL 消耗 。" }, - "sneckomod:Cheat": { - "NAME": "作弊", - "DESCRIPTION": "sneckomod:蛇證 。 NL 本回合擁有 sneckomod:幸運 。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "sneckomod:蛇證 。 NL 本回合擁有 sneckomod:幸運 。" + "sneckomod:Strike": { + "NAME": "打擊", + "DESCRIPTION": "造成 !D! 點傷害。" }, - "sneckomod:Restock": { - "NAME": "補充", - "DESCRIPTION": "sneckomod:蛇證 。 NL 丟棄所有手牌。 NL 抽 5~10 張牌。 NL 消耗 。" + "sneckomod:ToothAndClaw": { + "NAME": "尖牙利爪", + "DESCRIPTION": "造成 !D! 點傷害。 NL 手牌中每有 1 種職業牌 獲得 1 張 *小刀 。 NL sneckomod:贈禮 :罕見牌。", + "UPGRADE_DESCRIPTION": "造成 !D! 點傷害。 NL 手牌中每有 1 種職業牌 獲得 1 張 *小刀+ 。 NL sneckomod:贈禮 :罕見牌。", + "DESCRIPTION_BATTLE": "造成 !D! 點傷害。 NL 手牌中每有 1 種職業牌 獲得 1 張 *小刀 。", + "UPGRADE_DESCRIPTION_BATTLE": "造成 !D! 點傷害。 NL 手牌中每有 1 種職業牌 獲得 1 張 *小刀+ 。" }, - "sneckomod:GlitteringGambit": { - "NAME": "閃光伎倆", - "DESCRIPTION": "sneckomod:蛇證 。 NL 獲得 !M! ~ 30 *金幣 。 NL 消耗 。" + "sneckomod:TyphoonFang": { + "NAME": "臺風之牙", + "DESCRIPTION": "造成 !D! 點傷害。 NL sneckomod:溢出 :在本回合,每當你觸發 sneckomod:溢出 ,打出這張牌的復製。" }, - "sneckomod:Transmogrify": { - "NAME": "驚變", - "DESCRIPTION": "從兩件遺物中選擇失去一件。 NL 獲得另一件相同稀有度的遺物。 NL 消耗 。", + "sneckomod:Yearn": { + "NAME": "Yearn", + "DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。", "EXTENDED_DESCRIPTION": [ - "我沒有遺物能夠驚變", - "選擇失去一件遺物", - "失去 ", - " 並獲得另一件 ", - " 遺物。" + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards。" ] }, - "sneckomod:DefensiveFlair": { - "NAME": "防禦才華", - "DESCRIPTION": "獲得 !B! 點 格擋 。 NL 每有一張 sneckomod:異色 手牌, 格擋 增加 !M! 點。" - }, - "sneckomod:DangerNoodle": { - "NAME": "貪吃蛇", - "DESCRIPTION": "造成 !D! 點傷害。 NL 消耗 所有 sneckomod:異色 手牌, NL 每消耗一張再造成一次。" + "sneckomod:TailWhip": { + "NAME": "掃尾", + "DESCRIPTION": "造成 !D! 點傷害。 NL sneckomod:溢出 :給予 !M! 層 虛弱 和 易傷 。" }, - "sneckomod:SerpentIdol": { - "NAME": "蛇神像", - "DESCRIPTION": "sneckomod:蛇證 。 NL 從3張隨機 sneckomod:異色 牌中選擇獲得1張。 NL 其耗能本回合為0。 NL 消耗 。" + "sneckomod:Transmogrify": { + "NAME": "Transmogrify", + "DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。", + "EXTENDED_DESCRIPTION": [ + "I have no Relicsss to ssswap。", + "Choose a Relic to lose。", + "Lose ", + " and obtain another ", + " Relic。", + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards。" + ] + }, + "sneckomod:ToxicPersonality": { + "NAME": "Toxic Personality", + "DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards。" + ] }, "sneckomod:TrashToTreasure": { "NAME": "變廢為寶", - "DESCRIPTION": "sneckomod:蛇證 。 NL 消耗 一張手牌, NL 獲得其耗能量 [E] 。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "sneckomod:蛇證 。 NL 消耗 一張手牌, NL 獲得其耗能量 [E] 。" + "DESCRIPTION": "獲得 !B! 點 格擋 。 NL 消耗 1張牌。 NL 獲得與其耗能相等的 [E] 。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "獲得 !B! 點 格擋 。 NL 消耗 1張牌。 NL 獲得與其耗能相等的 [E] 。" }, - "sneckomod:DiceBlock": { - "NAME": "骰子格擋", - "DESCRIPTION": "獲得 !M! ~ !B! 點 格擋 。" + "sneckomod:UnendingSupply": { + "NAME": "無盡供給", + "DESCRIPTION": "回合開始時,獲得隨機 1 張 sneckomod:異色 牌的 gremlin:回響 。", + "UPGRADE_DESCRIPTION": "固有。 NL 回合開始時,獲得隨機 1 張 sneckomod:異色 牌的 gremlin:回響 。" +}, + "sneckomod:Unknown": { + "NAME": "??? Basic", + "DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。", + "UPGRADE_DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。" }, - "sneckomod:MixItUp": { - "NAME": "混合起來!", - "DESCRIPTION": "變化所有藥水。 NL 造成 !D! 點傷害 !M! 次。 NL 消耗 。" + "sneckomod:Unknown0Cost": { + "NAME": "??? 0-Cost", + "DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。", + "UPGRADE_DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。" }, - "sneckomod:MorePower": { - "NAME": "更多力量!", - "DESCRIPTION": "戰鬥結束時,額外獲得一次已 升級的 *未知 卡牌獎勵。" + "sneckomod:Unknown1Cost": { + "NAME": "??? 1-Cost", + "DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。", + "UPGRADE_DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。" }, - "sneckomod:UnknownStrength": { - "NAME": "???", - "DESCRIPTION": " *未知 力量 牌。", - "UPGRADE_DESCRIPTION": "已 升級 的 *未知 力量 牌。" + "sneckomod:Unknown2Cost": { + "NAME": "??? 2-Cost", + "DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。", + "UPGRADE_DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。" }, - "sneckomod:UnknownDraw": { - "NAME": "???", - "DESCRIPTION": " *未知 抽牌牌。", - "UPGRADE_DESCRIPTION": "已 升級 的 *未知 抽牌牌。" + "sneckomod:Unknown3Cost": { + "NAME": "??? 3-Cost", + "DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。", + "UPGRADE_DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。" + }, + "sneckomod:UnknownBlock": { + "NAME": "??? Block", + "DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。", + "UPGRADE_DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。" + }, + "sneckomod:UnknownBoss": { + "NAME": "??? Boss", + "DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。", + "UPGRADE_DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。" + }, + "sneckomod:UnknownClass": { + "NAME": "??? Class", + "DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。", + "UPGRADE_DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。" + }, + "sneckomod:UnknownColorless": { + "NAME": "??? Colorless", + "DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。", + "UPGRADE_DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。" + }, + "sneckomod:UnknownCommonAttack": { + "NAME": "??? C Attack", + "DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。", + "UPGRADE_DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。" + }, + "sneckomod:UnknownCommonSkill": { + "NAME": "??? C Skill", + "DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。", + "UPGRADE_DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。" }, "sneckomod:UnknownDexterity": { - "NAME": "???", - "DESCRIPTION": " *未知 敏捷 牌。", - "UPGRADE_DESCRIPTION": "已 升級 的 *未知 敏捷 牌。" + "NAME": "??? Dexterity", + "DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。", + "UPGRADE_DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。" }, - "sneckomod:UnknownWeak": { - "NAME": "???", - "DESCRIPTION": " *未知 虛弱 牌。", - "UPGRADE_DESCRIPTION": "已 升級 的 *未知 虛弱 牌。" + "sneckomod:UnknownDraw": { + "NAME": "??? Draw", + "DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。", + "UPGRADE_DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。" + }, + "sneckomod:Unknown虛無": { + "NAME": "??? 虛無", + "DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。", + "UPGRADE_DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。" + }, + "sneckomod:Unknown消耗 ": { + "NAME": "??? 消耗 ", + "DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。", + "UPGRADE_DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。" + }, + "sneckomod:UnknownRareAttack": { + "NAME": "??? R Attack", + "DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。", + "UPGRADE_DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。" + }, + "sneckomod:UnknownRarePower": { + "NAME": "??? R Power", + "DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。", + "UPGRADE_DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。" + }, + "sneckomod:UnknownRareSkill": { + "NAME": "??? R Skill", + "DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。", + "UPGRADE_DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。" + }, + "sneckomod:UnknownStrength": { + "NAME": "??? Strength", + "DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。", + "UPGRADE_DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。" + }, + "sneckomod:UnknownStrike": { + "NAME": "??? Strike", + "DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。", + "UPGRADE_DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。" + }, + "sneckomod:UnknownUncommonAttack": { + "NAME": "??? U Attack", + "DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。", + "UPGRADE_DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。" + }, + "sneckomod:UnknownUncommonPower": { + "NAME": "??? U Power", + "DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。", + "UPGRADE_DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。" + }, + "sneckomod:UnknownUncommonSkill": { + "NAME": "??? U Skill", + "DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。", + "UPGRADE_DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。" }, "sneckomod:UnknownVulnerable": { - "NAME": "???", - "DESCRIPTION": " *未知 易傷 牌。", - "UPGRADE_DESCRIPTION": "已 升級 的 *未知 易傷 牌。" + "NAME": "??? Vulnerable", + "DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。", + "UPGRADE_DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。" }, - "sneckomod:UnknownColorless": { - "NAME": "???", - "DESCRIPTION": " *未知 無色牌。", - "UPGRADE_DESCRIPTION": "已 升級 的 *未知 無色牌。" + "sneckomod:UnknownWeak": { + "NAME": "??? Weak", + "DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。", + "UPGRADE_DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。" }, - "sneckomod:RainOfDice": { - "NAME": "骰子雨", - "DESCRIPTION": "隨機造成 !qqq! ~ !D! 點傷害。 NL sneckomod:混淆 本牌並返回手牌。" + "sneckomod:UnknownX": { + "NAME": "??? X-Cost", + "DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。", + "UPGRADE_DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。" }, - "sneckomod:DiceCrush": { - "NAME": "骰子撞擊", - "DESCRIPTION": "造成 !M! ~ !D! 點傷害。" + "sneckomod:UnlimitedRolls": { + "NAME": "Unlimited Rolls", + "DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。", + "UPGRADE_DESCRIPTION": "這張卡不該出現在遊戲中。 NL 如果你讀到這裏,說明你可能遇到了bug。 NL 請報告給開發者。", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards。" + ] }, - "sneckomod:SnakeSap": { - "NAME": "蛇液", - "DESCRIPTION": "sneckomod:蛇證 。 NL 造成 !qqq! ~ !D! 點傷害。 NL 獲得 0 ~ !M! [E] 。 NL 消耗 。" + "sneckomod:Behold": { + "NAME": "見證吧!", + "DESCRIPTION": "造成 !D! 點傷害。 NL sneckomod:溢出 :獲得 !M! 張 *小刀 。", + "UPGRADE_DESCRIPTION": "造成 !D! 點傷害。 NL sneckomod:溢出 :獲得 !M! 張 *小刀 。" }, - "sneckomod:DiceBoulder": { - "NAME": "巨型骰子", - "DESCRIPTION": "造成 !M! ~ !D! 點傷害。 NL 能被多次 升級 。" + "sneckomod:SaveForLater": { + "NAME": "保留待用", + "DESCRIPTION": "造成 !D! 點傷害。 NL 回合結束時 保留 !M! 張牌。", + "UPGRADE_DESCRIPTION": "造成 !D! 點傷害。 NL 回合結束時 保留 !M! 張牌。" }, - "sneckomod:IronFang": { - "NAME": "鐵齒", - "DESCRIPTION": "造成 !qqq! ~ !D! 點傷害。 NL 獲得 !M! ~ !B! 點 格擋 。" + "sneckomod:PowerShot": { + "NAME": "能力射擊", + "DESCRIPTION": "造成 !D! 點傷害。 NL 當你打出 1 張能力牌,該牌從棄牌堆回到手牌。" }, - "sneckomod:Mudshield": { - "NAME": "混亂護盾", - "DESCRIPTION": "sneckomod:混淆 一張牌時, NL 獲得 !M! 點 格擋 。", - "UPGRADE_DESCRIPTION": "固有 。 NL sneckomod:混淆 一張牌時, NL 獲得 !M! 點 格擋 。" + "sneckomod:LilGuardian": { + "NAME": "小小守護者", + "DESCRIPTION": "獲得 !B! 點 格擋 。 NL 當你打出 1 張2+耗能的牌時,從你的手牌中打出該牌。" }, - "sneckomod:WideSting": { - "NAME": "寬刺", - "DESCRIPTION": "對所有敵人造成 !M! ~ !D! 點傷害。 NL 升級 手中所有 sneckomod:異色 牌。" + "sneckomod:CrystalBoomerang": { + "NAME": "水晶回旋鏢", + "DESCRIPTION": "從棄牌堆選擇 1 張牌放入你的手牌。 NL 如果它是 sneckomod:異色 牌,獲得 !B! 點 格擋 。" }, - "sneckomod:UnendingSupply": { - "NAME": "延綿不絕", - "DESCRIPTION": "回合開始時,隨機獲得一張 sneckomod:異色 牌。" + "sneckomod:ViperEssence": { + "NAME": "蛇之精髓", + "DESCRIPTION": "虛無 。 NL 獲得 !M! 層 力量 。" }, - "sneckomod:Memorize": { - "NAME": "熟記", - "DESCRIPTION": "sneckomod:蛇證 。 sneckomod:即逝 。 NL 選擇一張 *未知 手牌, NL 將其 *明晰 成目前的牌。", - "UPGRADE_DESCRIPTION": "保留 。 NL sneckomod:蛇證 。 sneckomod:即逝 。 NL 選擇一張 *未知 手牌, NL 將其 *明晰 成目前的牌。", + "sneckomod:Amass": { + "NAME": "積聚", + "DESCRIPTION": "獲得 !B! 點 格擋。 NL 獲得等同於手牌耗能之和的 格擋 。", + "UPGRADE_DESCRIPTION": "獲得 !B! 點 格擋。 NL 獲得等同於手牌耗能之和的 格擋 。" + }, + "sneckomod:Medusa": { + "NAME": "美杜莎", + "DESCRIPTION": "造成 !D! 傷害。 NL 給予 !M! 層 sneckomod:劇毒 。 NL sneckomod:贈禮 :普通負面效果牌。", + "DESCRIPTION_BATTLE": "造成 !D! 傷害。 NL 給予 !M! 層 sneckomod:劇毒 。" + }, + "sneckomod:Cower": { + "NAME": "蜷縮", + "DESCRIPTION": "獲得 !B! 點 格擋 。 NL 獲得 1 張 *'洞'起來 。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "獲得 !B! 點 格擋 。 NL 獲得 1 張 *'洞'起來+ 。 NL 消耗 。" + }, + "sneckomod:WideSting": { + "NAME": "寬刺", + "DESCRIPTION": "對所有敵人造成 !D! 點傷害。 NL 在本場戰鬥中 升級 手牌中所有 sneckomod:異色 牌。 NL sneckomod:贈禮 :普通牌。", + "DESCRIPTION_BATTLE": "對所有敵人造成 !D! 點傷害。 NL 在本場戰鬥中 升級 手牌中所有 sneckomod:異色 牌。" + }, + "sneckomod:GildedShield": { + "NAME": "鍍金盾牌", + "DESCRIPTION": "獲得 !B! 點 格擋 。 NL sneckomod:混淆 該牌,然後回到手牌。" + }, + "sneckomod:Mesmerize": { + "NAME": "催眠", + "DESCRIPTION": "所有敵人失去 !M! 層 力量 。 NL sneckomod:混淆 1 張牌。 NL 消耗 。" + }, + "sneckomod:Serpentscale": { + "NAME": "蛇鱗", + "DESCRIPTION": "造成 !D! 點傷害。 NL 獲得 1 層 expansioncontent:多層護甲 。 NL sneckomod:溢出 : 轉而獲得 !M! 層 expansioncontent:多層護甲 。" + }, + "sneckomod:OtherworldlySlash": { + "NAME": "異界斬擊", + "DESCRIPTION": "造成 !D! 點傷害。 NL 若本回合打出過 sneckomod:異色 牌,再造成 !D! 點傷害。 NL sneckomod:贈禮 :普通牌。", + "DESCRIPTION_BATTLE": "造成 !D! 點傷害。 NL 若本回合打出過 sneckomod:異色 牌,再造成 !D! 點傷害。" + }, + "sneckomod:BeyondArmor": { + "NAME": "超越護甲", + "DESCRIPTION": "獲得 !B! 點 格擋。 NL 將抽牌堆隨機 !M! 張 sneckomod:異色 牌放入手牌。 NL sneckomod:贈禮 : 普通牌。", + "DESCRIPTION_BATTLE": "獲得 !B! 點 格擋。 NL 將抽牌堆隨機 !M! 張 sneckomod:異色 牌放入手牌。" + }, + "sneckomod:BlunderGuard": { + "NAME": "槍火掩護", + "DESCRIPTION": "當你打出3+耗能牌時,獲得 !qqq! 點 格擋 和 !M! 層 力量 。", + "UPGRADE_DESCRIPTION": "當你打出3+耗能牌時,獲得 !qqq! 點 格擋 和 !M! 層 力量 。" + }, + "sneckomod:WideAngle": { + "NAME": "橫掃", + "DESCRIPTION": "保留 。 NL 對所有敵人造成 !D! 點傷害。" + }, + "sneckomod:SerpentsNest": { + "NAME": "蛇巢", + "DESCRIPTION": "每當你打出 1 張能力牌,對所有敵人造成 !M! 點傷害。 NL sneckomod:贈禮 :罕見能力牌。", + "DESCRIPTION_BATTLE": "每當你打出 1 張能力牌,對所有敵人造成 !M! 點傷害。" + }, + "sneckomod:Whack": { + "NAME": "晨鐘暮鼓", + "DESCRIPTION": "造成 !D! 點傷害。 NL 獲得 1 張 *當頭棒喝 。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "造成 !D! 點傷害。 NL 獲得 1 張 *當頭棒喝+ 。 NL 消耗 。" + }, + "sneckomod:CobraCoil": { + "NAME": "眼鏡蛇盤蜷", + "DESCRIPTION": "造成 !D! 點傷害。 NL 給予 !M! 層 *纏繞 。 NL sneckomod:贈禮 :稀有攻擊牌。" + }, + "sneckomod:Belittle": { + "NAME": "看扁", + "DESCRIPTION": "敵人每有 1 種負面效果,失去 !M! 點生命。 NL sneckomod:贈禮 :罕見負面效果牌。", + "DESCRIPTION_BATTLE": "敵人每有 1 種負面效果,失去 !M! 點生命。" + }, + "sneckomod:Jackpot": { + "NAME": "頭獎", + "DESCRIPTION": "保留 。 NL 獲得 [E] [E] 。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "保留 。 NL 獲得 [E] [E] [E] 。 NL 消耗 。" + }, + "sneckomod:MakeshiftBlade": { + "NAME": "權宜之刃 ", + "DESCRIPTION": "造成 !D! 點傷害。 NL 若目標敵人有至少 !M! 種負面效果,抽 !qqq! 張牌。 NL sneckomod:贈禮 :負面效果牌。", + "DESCRIPTION_BATTLE": "造成 !D! 點傷害。 NL 若目標敵人有至少 !M! 種負面效果,抽 !qqq! 張牌。" + }, + "sneckomod:LatchOn": { + "NAME": "緊咬不放", + "DESCRIPTION": "對所有敵人造成 !D! 點傷害。 NL 獲得 1 張 *蛇之精髓 。" + }, + "sneckomod:ComboString": { + "NAME": "異色連擊", + "DESCRIPTION": "造成 !D! 點傷害 X 次。 NL X 為你本回合打出的 sneckomod:異色 牌數。 NL sneckomod:贈禮 :罕見牌。", + "EXTENDED_DESCRIPTION": [ + " NL (本回合打出過 ", + " 張 異色 牌。)" + ], + "DESCRIPTION_BATTLE": "造成 !D! 點傷害 X 次。 X 為你本回合打出的 sneckomod:異色 牌數。" + }, + "sneckomod:ThrowingCards": { + "NAME": "投擲卡牌", + "DESCRIPTION": "獲得 X 張 *超越光速 。 NL 獲得 [E] 。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "獲得 X 張 *超越光速+ 。 NL 獲得 [E] 。 NL 消耗 。" + }, + "sneckomod:RoundaboutSwing": { + "NAME": "回旋揮擊", + "DESCRIPTION": "造成 !D! 點傷害。 NL 將 1 張手牌放到抽牌堆頂部。 NL 下回合額外抽 !M! 張牌。" + }, + "sneckomod:MarkedCard": { + "NAME": "記號牌", + "DESCRIPTION": "保留 。 NL sneckomod:混淆 1 張牌。 NL 不增加其耗能。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "保留 。 NL sneckomod:混淆 !M! 張牌。 NL 不增加其耗能。 NL 消耗 。" + }, + "sneckomod:InertBlade": { + "NAME": "鈍藏刀刃", + "DESCRIPTION": "造成 !D! 點傷害。 NL 若其耗能為: NL 1+:抽 !M! 張牌。 NL 2+:獲得 !M! 層 力量 。 NL 3+:獲得 [E] 。", + "UPGRADE_DESCRIPTION": "造成 !D! 點傷害。 NL 若其耗能為: NL 1+:抽 !M! 張牌。 NL 2+:獲得 !M! 層 力量 。 NL 3+:獲得 [E] [E] 。" + }, + "sneckomod:PerpetualSerpent": { + "NAME": "永恒之蛇", + "DESCRIPTION": "造成 !D! 點傷害。 NL sneckomod:溢出 :獲得 [E] [E] 。" + }, + "sneckomod:LastStrike": { + "NAME": "最終打擊", + "DESCRIPTION": "造成 !D! 點傷害。 NL 本場戰鬥中每打出 1 種 打擊 牌,多造成 1 次傷害。 NL sneckomod:贈禮 :打擊 牌。", + "UPGRADE_DESCRIPTION": "造成 !D! 點傷害。 NL 本場戰鬥中每打出 1 種 打擊 牌,多造成 1 次傷害。 NL sneckomod:贈禮 :打擊 牌。", + "DESCRIPTION_BATTLE": "造成 !D! 點傷害。 NL 本場戰鬥中每打出 1 種 打擊 牌,多造成 1 次傷害。", + "UPGRADE_DESCRIPTION_BATTLE": "造成 !D! 點傷害。 NL 本場戰鬥中每打出 1 種 打擊 牌,多造成 1 次傷害。", "EXTENDED_DESCRIPTION": [ - "明晰一張牌。" + " NL (本場戰鬥中打出過 ", + " 種 打擊 牌。)" ] }, - "sneckomod:UnknownBoss": { - "NAME": "???", - "DESCRIPTION": " *未知 *首領 牌。", - "UPGRADE_DESCRIPTION": "已 升級 的 *未知 *首領 牌。" + "sneckomod:AceOfWands": { + "NAME": "五角星皇後", + "DESCRIPTION": "虛無 。 NL 每當你給予敵人 1 種負面效果時,獲得 !M! 點 格擋 。 NL sneckomod:贈禮 :負面效果牌。", + "UPGRADE_DESCRIPTION": "每當你給予敵人 1 種負面效果時,獲得 !M! 點 格擋 。 NL sneckomod:贈禮 :負面效果牌。" + }, + "sneckomod:FlashInThePan": { + "NAME": "曇花一現", + "DESCRIPTION": "獲得 !B! 點 格擋 。 NL 丟棄所有手牌。 NL 下回合開始時,抽等量的牌。" + }, + "sneckomod:TrashCan": { + "NAME": "垃圾桶", + "DESCRIPTION": "回合開始時,你可以 消耗 1 張牌。", + "UPGRADE_DESCRIPTION": "固有 。 NL 回合開始時,你可以 消耗 1 張牌。" + }, + "sneckomod:Lacerate": { + "NAME": "割裂", + "DESCRIPTION": "造成 !D! 點傷害。 NL 本回合當你給予目標敵人負面效果時,額外給予 !M! 層 sneckomod:劇毒 。 NL sneckomod:贈禮 : *致殘毒雲 。", + "DESCRIPTION_BATTLE": "造成 !D! 點傷害。 NL 本回合當你給予目標敵人負面效果時,額外給予 !M! sneckomod:劇毒 。" + }, + "sneckomod:SerpentineSleuth": { + "NAME": "蛇偵探", + "DESCRIPTION": "虛無 。 NL 每當你打出 1 張能力牌,獲得 [E] 。 NL sneckomod:贈禮 :稀有能力牌。", + "UPGRADE_DESCRIPTION": "虛無 。 NL 每當你打出 1 張能力牌,獲得 [E] [E] 。 NL sneckomod:贈禮 :稀有能力牌。", + "DESCRIPTION_BATTLE": "虛無 。 NL 每當你打出 1 張能力牌,獲得 [E] 。", + "UPGRADE_DESCRIPTION_BATTLE": "虛無 。 NL 每當你打出 1 張能力牌,獲得 [E] [E] 。" } } diff --git a/src/main/resources/sneckomodResources/localization/zht/CharacterStrings.json b/src/main/resources/sneckomodResources/localization/zht/CharacterStrings.json index 1ed0b58c2..c741daa85 100644 --- a/src/main/resources/sneckomodResources/localization/zht/CharacterStrings.json +++ b/src/main/resources/sneckomodResources/localization/zht/CharacterStrings.json @@ -7,7 +7,7 @@ "TEXT": [ "生於城市之間的蜿蜒生物。 NL 以迷惑捕食者的凝視而聞名。", "NL 嘶嘶嘶嘶嘶嘶嘶嘶嘶……", - "在一條昏暗的街上,你遇見幾個戴著兜帽的人在進行某種黑暗的儀式。當你靠近時,他們全都同時轉身面對你,讓你覺得十分詭異。 其中個子最高的一個微微一笑,露出了長長的尖牙,向你伸出了一隻蒼白而瘦長的手: NL ~「加入我們,異蛇朋友啊。一起來感受高塔的溫暖吧。」~" + "在一條昏暗的街上,你遇見幾個戴著兜帽的人在進行某種黑暗的儀式。當你靠近時,他們全都同時轉身面對你,讓你覺得十分詭異。其中個子最高的一個微微一笑,露出了長長的尖牙,向你伸出了一只蒼白而瘦長的手: NL ~「加入我們,尖牙生物。一起來感受高塔的溫暖吧。」~" ] } } \ No newline at end of file diff --git a/src/main/resources/sneckomodResources/localization/zht/EventStrings.json b/src/main/resources/sneckomodResources/localization/zht/EventStrings.json index 96fe81c90..30942a9c2 100644 --- a/src/main/resources/sneckomodResources/localization/zht/EventStrings.json +++ b/src/main/resources/sneckomodResources/localization/zht/EventStrings.json @@ -2,52 +2,52 @@ "sneckomod:D8": { "NAME": "神秘八面體", "DESCRIPTIONS": [ - "接近神秘八面體。", + "穿過薄霧,你來到了一片寂靜的空間。在廢墟的中央,靜靜地懸浮著一個 #g神秘八面體 。它緩緩旋轉,表面不斷 #b~泛起微光~ ,像是某種 #y~先古造物~ 。 NL 當你伸出手,即將觸及它的表面時,八面體 #b~驟然亮起~ ,一道復雜的符文流光閃爍而過。你感到一股 #r@輕微的震顫@ 自地面升起,周圍的空氣變得 #p沈重 ,整個空間都屏息等待你的行動。你決定……", "遺物爆了。", "獲得遺物。", "決定離開。" ], "OPTIONS": [ "[打碎] #r失去 #r", - " #r生命。 #g獲得5張未知牌。", - "[取走] #g獲得 #g神秘八面體 。 #r被詛咒- #r疼痛。", + " #r生命。 #g從 #b3 #g張稀有 #y異色 #g牌選擇 #b1 #g張獲得之。", + "[拿取] #g獲得 #g神秘八面體 。 #r被詛咒 #r- #r疼痛 。", "[離開]", - "[鎖定] 需要使用隨機數的牌。" + "[鎖定] 需要1張 溢出 牌。" ] }, "sneckomod:BackToBasics": { "NAME": "", "DESCRIPTIONS": [ - "靈感總是比汗水更有用。" + "靈感勝過汗水。" ], "OPTIONS": [ - "[即興發揮] 將所有 #g打擊 與 #g防禦 #g替換 為隨機 #g未知 牌。", + "[創作] 將所有 #g打擊 和 #g防禦 #g替換 为另 1 个随机职业的。", "[鎖定] 需要打擊或防禦。" ] }, "sneckomod:Serpent": { "NAME": "蛇~", "DESCRIPTIONS": [ - "你走進一間房間,看見地上有一個大洞。當你靠近洞時,一條和你不太一樣的巨大蛇形生物從裡面鑽了出來。 NL NL 「~嚯嚯嚯!你好,你好啊!我的蛇朋友!~ 讓我問你一個問題... 」 NL NL 你聽著蛇吐出的詞句,陷入完全迷茫之中,那些話語根本無法理解。 NL NL 「你同意嗎?」", - "~「很好!」~ NL NL 你仍不知道當時所聽問題的內容,但是你的回應似乎很合那蛇的意。 NL 這個生物送給你一個能幫你實現目標的寶物,之後爬回了洞里。", + "你走進一間房間,看見地上有一個大洞。當你靠近洞時,一條和你不太一樣的巨大蛇形生物從裏面鉆了出來。 NL NL 「~謔謔謔!你好,你好啊!我的蛇朋友!~ 讓我問你一個問題... 」 NL NL 你聽著蛇吐出的詞句,陷入完全迷茫之中,那些話語根本無法理解。 NL NL 「你同意嗎?」", + "~「很好!」~ NL NL 你仍不知道當時所聽問題的內容,但是你的回應似乎很合那蛇的意。 NL 這個生物送給你一個能幫你實現目標的寶物,之後爬回了洞裏。", "蛇非常失望地看著你,最後還是笑著祝你一路順風。" ], "OPTIONS": [ - "[同意] #g獲得一個隨機遺物。 #r被詛咒- #r困惑。", + "[同意] #g獲得一個隨機異蛇遺物。 #r被詛咒- #r困惑 。", "[反對]", "[離開]" ] }, "sneckomod:SuspiciousHouse": { - "NAME": "可疑的房子", + "NAME": "養蛇人", "DESCRIPTIONS": [ - "在城市中穿行時,你聽到附近一座房子里傳來刺耳的怪異尖叫。一番調查之後,你發現是一個城市住民正試圖讓籠中的一隻蛇形生物安靜下來。 NL NL 「 ~餵!~ 你在我家幹什麼?! @滾吧!@ 」 NL NL 被關著的小傢伙嚇了一跳,立即縮回籠子的角落里。顯然它過得並不好。", - "「你想要這畜生? @說好了!@ 它可不值得我費勁去養。」NL NL 捕蛇人懊惱地 ~嘆了口氣,~ 打開籠鎖伸手進去。小蛇以迅雷不及掩耳之勢張開小顎死死咬住他的手指。 NL NL 在他掙脫這小傢伙之前,你迅速插手,突然 #r一拳過去 將他擊倒。你招呼小蛇,它歡快地纏到你手上,你們倆一同在尖塔中繼續旅行。", - "蛇非常失望地看著你,最後還是笑著祝你一路順風。" + "在城市中穿行時,你聽到附近一座房子裏傳來刺耳的怪異尖叫。一番調查之後,你發現是一個城市住民正試圖讓籠中的一只蛇形生物安靜下來。 NL NL 「 ~餵!~ 你在我家幹什麽?! @滾吧!@ 」 NL NL 被關著的小家夥嚇了一跳,立即縮回籠子的角落裏。顯然它過得並不好。", + "「你想要這畜生? @行吧!@ 它可不值得我費勁去養。」NL NL 捕蛇人懊惱地 ~嘆了口氣,~ 打開籠鎖伸手進去。小蛇以迅雷不及掩耳之勢張開小顎死死咬住他的手指。 NL NL 在他掙脫這小家夥之前,你迅速插手,突然 #r一拳過去 將他擊倒。你招呼小蛇,它歡快地纏到你手上,你們倆一同在尖塔中繼續旅行,你決定給它起個名字,叫做…… #y「克萊門汀」。", + "蛇非常失望地看著你,最後還是微笑著祝你一路順風。" ], "OPTIONS": [ - "[營救] #g獲得年輕異蛇 。 #r被詛咒 #r- #r困惑。", + "[營救] #g獲得幼年異蛇。 #r與憤怒的百夫長戰鬥。", "[離開]" ] } -} \ No newline at end of file +} diff --git a/src/main/resources/sneckomodResources/localization/zht/KeywordStrings.json b/src/main/resources/sneckomodResources/localization/zht/KeywordStrings.json index d98ffb859..db91dd830 100644 --- a/src/main/resources/sneckomodResources/localization/zht/KeywordStrings.json +++ b/src/main/resources/sneckomodResources/localization/zht/KeywordStrings.json @@ -1,48 +1,75 @@ [ { - "PROPER_NAME": "蛇證", + "PROPER_NAME": "Snekproof", "NAMES": [ - "蛇證" + "snekproof" ], - "DESCRIPTION": "不受 #y混亂 和 #y混淆 影響。" + "DESCRIPTION": "Snekproof cards aren't affected by #yConfusion and cannot be #yMuddled. NOTE FOR LOC: 不用翻譯。" + }, + { + "PROPER_NAME": "Suit", + "NAMES": [ + "suit", + "suits" +], + "DESCRIPTION": "Suits refer to card's color. Token cards do not count as Suits. NOTE FOR LOC: 不用翻譯。" + }, + { + "PROPER_NAME": "溢出", + "NAMES": [ + "Overflow", + "overflow", + "溢出" + ], + "DESCRIPTION": "手牌超過 #b5 張時,溢出牌被打出觸發溢出效果。" }, { "PROPER_NAME": "混淆", "NAMES": [ - "混淆", "muddle", - "muddled" + "muddled", + "muddles", + "混淆" ], - "DESCRIPTION": "將一張牌的耗能本回合變為 #b0 ~ #b3 點。" + "DESCRIPTION": "將1張牌本回合第1次打出的耗能隨機變為 #b0 ~ #b3 點。混淆後牌的耗能一定會改變。" }, { - "PROPER_NAME": "異色牌", + "PROPER_NAME": "異色", "NAMES": [ - "異色", - "offclass" + "offclass", + "異色" ], - "DESCRIPTION": "異蛇牌池以外的所有可獲得牌。(包括 #y詛咒 和 #y狀態牌 等)" + "DESCRIPTION": "異蛇牌以外的所有可獲得牌。(包括 #y詛咒 和 #y狀態 牌)" }, { - "PROPER_NAME": "明晰", + "PROPER_NAME": "贈禮", "NAMES": [ - "明晰" + "gift", + "贈禮" ], - "DESCRIPTION": "Replace an Unknown card with its current random card permanently." + "DESCRIPTION": "當你獲得這張牌,可獲得以下 異色 牌獎勵(甚至金幣)。" }, { - "PROPER_NAME": "幸運", + "PROPER_NAME": "Identify", "NAMES": [ - "lucky", - "幸運" + "identify" + ], + "DESCRIPTION": "Replace an #yUnidentified card with its current random card permanently. NOTE FOR LOC: 不用翻譯" + }, + { + "PROPER_NAME": "劇毒", + "NAMES": [ + "venom", + "劇毒" ], - "DESCRIPTION": "牌面與藥水效果的隨機值取最大值。" + "DESCRIPTION": "擁有 #y劇毒 的敵人獲得非 #y劇毒 的負面效果時,失去對應生命。" }, { - "PROPER_NAME": "即逝", + "PROPER_NAME": "幸運", "NAMES": [ - "即逝" + "lucky", + "幸運" ], - "DESCRIPTION": "打出後從牌組中移除。" + "DESCRIPTION": "溢出效果一定觸發,與手牌大小無關。" } ] diff --git a/src/main/resources/sneckomodResources/localization/zht/PotionStrings.json b/src/main/resources/sneckomodResources/localization/zht/PotionStrings.json index 4a2da02a8..09903971d 100644 --- a/src/main/resources/sneckomodResources/localization/zht/PotionStrings.json +++ b/src/main/resources/sneckomodResources/localization/zht/PotionStrings.json @@ -1,32 +1,32 @@ { "sneckomod:DiceRollPotion": { - "NAME": "可能很強藥劑", + "NAME": "瓶裝卡牌", "DESCRIPTIONS": [ - "造成 #b", - " - #b", - " 點傷害。" + "在戰鬥中使用,增加 #b", + " 個卡牌獎勵,可在 #b3 張 已 #y升級 罕見 #y異色 牌中選擇1張獲得。", + " 個卡牌獎勵,可在 #b3 張 已 #y升級 罕見 #y異色 牌中選擇1張獲得。" ] }, "sneckomod:CheatPotion": { - "NAME": "流動幸運", + "NAME": "液態幸運", "DESCRIPTIONS": [ - "本回合內,獲得 #y幸運 。", - " #b", - " 回合內,獲得 #y幸運 。" + "本回合 #y溢出 效果一定觸發,與手牌數無關。", + "#y溢出 效果一定觸發,持續 #b", + " 個回合,與手牌數無關。" ] }, "sneckomod:MuddlingPotion": { "NAME": "尖峰蘇打", "DESCRIPTIONS": [ - " #y混淆 手牌中耗能最高的 #b", + "#y混淆 手牌中耗能最高的 #b", " 張牌。 #y混淆 後耗能不為 #b3 點。" ] }, "sneckomod:OffclassReductionPotion": { "NAME": "奇異飲料", "DESCRIPTIONS": [ - "將手牌中所有 #y異色 牌的耗能降低 #b", - " 點。" + "降低手牌中 #y異色 牌的耗能 #b", + " 點" ] } } diff --git a/src/main/resources/sneckomodResources/localization/zht/PowerStrings.json b/src/main/resources/sneckomodResources/localization/zht/PowerStrings.json index 35e7cf9ae..90a985a61 100644 --- a/src/main/resources/sneckomodResources/localization/zht/PowerStrings.json +++ b/src/main/resources/sneckomodResources/localization/zht/PowerStrings.json @@ -1,70 +1,194 @@ { + "sneckomod:BlunderGuardPower": { + "NAME": "巨浪", + "DESCRIPTIONS": [ + "#y溢出 效果額外獲得 #b", + " 點 #y格擋 。", + " 點 #y格擋 。" + ] + }, "sneckomod:CheapStockPower": { - "NAME": "廉價股票", + "NAME": "廉價存貨", "DESCRIPTIONS": [ - "你的回合開始時,將手中耗能最高的 #y異色 牌耗能降低 #b1 點。", - "你的回合開始時,將手中耗能最高的 #y異色 牌耗能降低 #b1 點。重復 #b", - " 次。" + "回合開始時,#y混淆 手牌中耗能最高的1張牌。", + "回合開始時,#y混淆 手牌中耗能最高的1張牌 #b", + " 次。" ] }, "sneckomod:CheatPower": { "NAME": "幸運", "DESCRIPTIONS": [ - "本回合內,卡牌上的隨機數值取上限值。", - " #b", - " 回合內,卡牌上的隨機數值取上限值。" + "在本回合, #y溢出 效果一定觸發,與手牌數無關。", + "在接下來 #b", + " 個回合, #y溢出 效果一定觸發,與手牌數無關。" ] }, "sneckomod:MuddleDrawnCardsPower": { "NAME": "混淆抽牌", "DESCRIPTIONS": [ - "#y混淆 本回合抽到的下一張牌。", - "#y混淆 本回合抽到的下 #b", - " 張牌。(還剩 #b", - " 張)" + "#y混淆 下1張抽到的牌。", + "#y混淆 下 #b", + " 張抽到的牌。(剩", + " )" ] }, "sneckomod:MudshieldPower": { - "NAME": "混亂護盾", + "NAME": "泥漿屏障", "DESCRIPTIONS": [ - "每當你 #y混淆 一張牌時,獲得 #b", + "當你 #y混淆 1張牌,獲得 #b", " 點 #y格擋 。" ] }, + "sneckomod:OverwhelmingPresencePower": { + "NAME": "威壓", + "DESCRIPTIONS": [ + "每回合你第一次洗牌,獲得 [E] 並抽 #b1 張牌。", + "每回合你第一次洗牌,獲得 ", + " 點 [E] 並抽 #b", + " 張牌。" + ] + }, + "sneckomod:SerpentsNestPower": { + "NAME": "蛇巢", + "DESCRIPTIONS": [ + "每當你打出1張 #y能力 牌,對所有敵人造成 1 點傷害。", + "每當你打出1張 #y能力 牌,對所有敵人造成 #b", + " 傷害。" + ] + }, "sneckomod:SerpentMindPower": { "NAME": "異色形態", "DESCRIPTIONS": [ - "每當你打出一張 #y異色 牌時,抽 #b", - " 張牌。", - " 張牌。" + "你在本回合每打出1種顏色的牌,在回合結束時獲得 #b", + " 點 #y力量 。", + " 點 #y力量 。" + ] + }, + "sneckomod:SnakeEyesPower": { + "NAME": "邪眼毒眸", + "DESCRIPTIONS": [ + "在本回合,下1張打出的 #y異色 牌被打出2次。", + "在本回合,下 #b", + " 張打出的 #y異色 牌被打出2次。" ] }, "sneckomod:UnendingSupplyPower": { - "NAME": "延綿不絕", + "NAME": "無盡供給", "DESCRIPTIONS": [ - "你的回合開始時,隨機將 #b", - " 張 #y異色 牌加入你的手牌。" + "回合開始時,將 #b", + "回合開始時,將1張隨機 #y異色 牌的 #y回響 加入手牌。", + " 張隨機 #y異色 牌的 #y回響 加入手牌。" ] }, "sneckomod:UnknownUpgradedPostCombatPower": { - "NAME": "渴望力量", + "NAME": "Post-Combat Upgraded Unidentified", "DESCRIPTIONS": [ - "戰鬥結束時,額外獲得 #b", - " 張已 #y升級 的 #y未知 牌。", - " 張已 #y升級 的 #y未知 牌。" + "At the end of combat, obtain #b", + " additional #yUpgraded #yUnidentified cards.", + " additional #yUpgraded #yUnidentified card.", + "NOTE FOR LOC: 不需要翻譯。" + ] }, "sneckomod:UnlimitedRollsPower": { - "NAME": "無限隨機", + "NAME": "無盡投擲", "DESCRIPTIONS": [ - "你的回合開始時,將一張帶有 #y消耗 和 #y虛無 的 #y靈魂隨機 加入你的手牌。" + "回合開始時,獲得 #y靈魂骰擲+ 。" ] }, "sneckomod:Transmogrifying": { - "NAME": "驚變", + "NAME": "Transmogrifying", + "DESCRIPTIONS": [ + " is being transformed into another ", + " relic.", + "NOTE FOR LOC: 不需要翻譯。" + ] + }, + "sneckomod:ToxicPersonalityPower": { + "NAME": "Toxic Personality", + "DESCRIPTIONS": [ + "Whenever you apply a debuff to an enemy, apply #b", + " #yVenom .", + "NOTE FOR LOC: 不需要翻譯。" + ] + }, + "sneckomod:TyphoonPower": { + "NAME": "臺風之牙", "DESCRIPTIONS": [ - " 將要變為另一件", - " 遺物。" + "本回合每當 #b溢出 觸發,打出1張 #y臺風之牙 的復製。", + "本回合每當 #b溢出 觸發,打出 #b", + " 張 #y臺風之牙 的復製。" ] - } -} + }, + "sneckomod:TyphoonPlusPower": { + "NAME": "臺風之牙+", + "DESCRIPTIONS": [ + "本回合每當 #b溢出 觸發,打出1張 #y臺風之牙+ 的復製。", + "本回合每當 #b溢出 觸發,打出 #b", + " 張 #y臺風之牙+ 的復製。" + ] + }, + "sneckomod:SerpentineSleuthPower": { + "NAME": "蛇偵探", + "DESCRIPTIONS": [ + "每當你打出1張 #y能力 牌,獲得 #b", + " 點 [E] 。", + " 點 [E] 。" + ] + }, + "sneckomod:BigGunsStrengthPower": { + "NAME": "槍火", + "DESCRIPTIONS": [ + "每當你打出一張費用3+的牌,獲得 #b", + " 點 #y力量。", + " 點 #y力量。" + ] + }, + "sneckomod:BigGunsBlockPower": { + "NAME": "掩護", + "DESCRIPTIONS": [ + "每當你打出一張費用3+的牌,獲得 #b", + " 點 #y格擋 。", + " 點 #y格擋 。" + ] + }, + "sneckomod:AceOfWandsPower": { + "NAME": "五角星皇後", + "DESCRIPTIONS": [ + "當你給予敵人1種負面效果,獲得 #b", + " 點 #y格擋 。", + " 點 #y格擋 。" + ] + }, + "sneckomod:LacerateDebuff": { + "NAME": "割裂", + "DESCRIPTIONS": [ + "在本回合,當你給予這個敵人1種負面效果,額外給予其 #b", + " 層 #y劇毒 。", + " 層 #y劇毒 。" + ] + }, + "sneckomod:FountainPower": { + "NAME": "毒泉", + "DESCRIPTIONS": [ + "#y溢出 效果額外給予隨機敵人 #b", + " 層 #y劇毒 。", + " 層 #y劇毒 。" + ] + }, + "sneckomod:TrashCanPower": { + "NAME": "垃圾桶", + "DESCRIPTIONS": ["回合開始時,你可以 #y消耗 1張牌。", + "回合開始時,你可以至多 #y消耗 #b", + " 張牌。" + ] + }, + + "sneckomod:VenomDebuff": { + "NAME": "劇毒", + "DESCRIPTIONS": [ + "獲得 #y非劇毒 負面效果時,失去 #b", + " 生命。" + ] + } + } diff --git a/src/main/resources/sneckomodResources/localization/zht/RelicStrings.json b/src/main/resources/sneckomodResources/localization/zht/RelicStrings.json index 6ab9e84cb..367aadc62 100644 --- a/src/main/resources/sneckomodResources/localization/zht/RelicStrings.json +++ b/src/main/resources/sneckomodResources/localization/zht/RelicStrings.json @@ -3,14 +3,14 @@ "NAME": "異蛇之魂", "FLAVOR": "0……3……2……2……1", "DESCRIPTIONS": [ - "每場戰鬥首次打出 #y異色 牌時,獲得 [E] 並抽 #b1 張牌。" + "戰鬥開始時,獲得 1 張 #y靈魂骰擲 。" ] }, "sneckomod:SuperSneckoSoul": { "NAME": "超級蛇魂", "FLAVOR": "3120231321230320", "DESCRIPTIONS": [ - "替換 [#407B93]異蛇之魂[] 。 NL 每回合首次打出 #y異色 牌時,獲得 [E] 。" + "替換 [#407B93]異蛇之魂[] 。 NL 奇數回合開始時,獲得 1 張 #y靈魂骰擲 ;偶數回合開始時,多抽1張牌並 #ysneckomod:混淆 之。" ] }, "sneckomod:CleanMud": { @@ -24,98 +24,96 @@ "NAME": "異蛇戒指", "FLAVOR": "無法辨認,難以閱讀,周四到期。", "DESCRIPTIONS": [ - "戰鬥開始時,給予所有敵人 #b0-2 層 #y虛弱 與 #y易傷 。" + "觸發 #b3 次 #ysneckomod:溢出時,給予隨機敵人 #b1 層 #y虛弱 與 #y易傷 。" ] }, "sneckomod:CrystallizedMud": { "NAME": "催眠吊墜", "FLAVOR": "晃眼的土塊。", "DESCRIPTIONS": [ - "回合開始時獲得 [E] 。 #ysneckomod:混淆 數值不為 #b0 。" + "回合開始時獲得 [E] 。 #ysneckomod:混淆 後耗能不為 #b0 。" ] }, "sneckomod:LoadedDie": { "NAME": "註料骰子", "FLAVOR": "灌了奶酪。", "DESCRIPTIONS": [ - "卡牌隨機值下限提高 #b1 點。" + "當1張牌被 #ysneckomod:混淆 時,獲得 #b1 點 #y格擋 。" ] }, "sneckomod:RareBoosterPack": { "NAME": "稀有增強箱", "FLAVOR": "新品。", "DESCRIPTIONS": [ - "拾起時,獲得不同類型的 #y未知稀有牌 各 #b1 張。" + "拾起時,獲得1張 #y稀有 #ysneckomod:異色 牌。" ] }, "sneckomod:SleevedAce": { - "NAME": "袖中妄牌", + "NAME": "袖中王牌", "FLAVOR": "我也出A。", "DESCRIPTIONS": [ - "戰鬥開始時,將 #b1 張 #y作弊 加入手牌並 #y保留 。" + "戰鬥開始時,獲得1張 #y記號牌 。" ] }, "sneckomod:UnknownEgg": { "NAME": "未知之蛋", "FLAVOR": "想知道孵出什麽? 交 $1000 再說。", "DESCRIPTIONS": [ - " #y明晰 變為自由行動。 NL 卡牌獎勵中的 #y未知 牌將被 #y升級 。" + "每當你獲得 #y異色 牌時,將其 #y升級 。 NL 拾起時,隨機 #y升級 #b2 張 #ysneckomod:異色 牌。 " ] }, "sneckomod:SuperSneckoEye": { "NAME": "超級蛇眼", "FLAVOR": "0121012", "DESCRIPTIONS": [ - "替換 #r異蛇之眼 。 NL 回合開始時,額外抽 #b2 張牌。 NL 每場戰鬥開始時,獲得 #y混亂 。 NL 每場戰鬥首次抽到耗能為 #b3 的牌時,將其耗能變為 #b0 。" + "替換 #y異蛇之眼 。 NL 回合開始時,額外抽 #b4 張牌。 NL 戰鬥開始時,獲得 #y混亂 。" ] }, "sneckomod:SneckoTalon": { "NAME": "陳家掛墜", "FLAVOR": "見證了異蛇之眼與符文金字塔的輝煌。", "DESCRIPTIONS": [ - "回合開始時,將手牌中耗能最高的牌的本回合耗能降低 #b1 點。" + "回合開始時,耗能不為0的隨機手牌本回合首次耗能減 #b1 。" ] }, "sneckomod:BlankCard": { "NAME": "空牌", - "FLAVOR": "擬牌妖。", + "FLAVOR": "卡牌模仿者。", "DESCRIPTIONS": [ - "每場戰鬥開始時,隨機打出牌組中的 #b1 張牌的復製。" + "戰鬥開始時,隨機將牌組中 #b1 張 #r非詛咒 #y非狀態 牌的 #ygremlin:回響 加入手牌,其耗能為 #b0 。" ] }, "sneckomod:D8": { "NAME": "神秘八面體", "FLAVOR": "它似乎灌鉛的。", "DESCRIPTIONS": [ - "拾起時,選擇牌組中 #b1 張數值為隨機值的牌。其總是觸發最大值。", - "選擇一張牌 ", - " 每當 ", - " 被打出時,隨機值為其最大值。" + "拾起時,選擇牌組中 #b1 張 #ysneckomod:溢出 牌。每當你打出它,獲得 #b4 點 #y格擋 並觸發其 #y溢出 效果,即使你的手牌數不夠。", + "選擇1張牌 ", + " 當 ", + " 被打出時,獲得 #b4 點 #y格擋 並觸發其 #ysneckomod:溢出 效果,與手牌數無關。" ] }, "sneckomod:BabySnecko": { - "NAME": "年輕異蛇", + "NAME": "幼年異蛇", "FLAVOR": "令人困惑的可愛。", "DESCRIPTIONS": [ - "回合開始時,隨機造成 #b5 點傷害。" + "回合開始時,對隨機敵人造成 #b9 點傷害並 #ysneckomod:混淆 隨機 #b2 張非 #b0 手牌。" ] }, "sneckomod:SneckoCommon": { "NAME": "徽章", - "FLAVOR": "我系戰系鍋,介系我最喜歡滴遺物-商店小廣告", + "FLAVOR": "我系戰系鍋,介系我最喜歡滴遺物。——商店小廣告", "DESCRIPTIONS": [ - "拾起時,從 #b3 張 #y未知角色牌 中選擇 #b1 張加入牌組。不再出現其他角色的 #y未知角色牌 。", - "接下來的 #y未知角色牌 都將是 #y未知 #y", - "牌 。" + "拾起時,從 #b5 張罕見 #ysneckomod:異色 能力牌中選擇 #b1 張加入牌組。" ] }, "sneckomod:SneckoBoss": { "NAME": "幸運馬蹄", "FLAVOR": "一路順風。", "DESCRIPTIONS": [ - "拾起時,從 #b3 張 #y未知 角色牌中選擇 #b1 張。將其 #b5 張復製品加入牌組。所有戰鬥卡牌獎勵都將有這名角色的牌。", - "拾起時,獲得 #b5 張 #y未知 ", - " 牌。所有戰鬥卡牌獎勵都將有 ", + "拾起時,從 #b3 個 #y角色 選擇 #b1 個。獲得 #b3 組已 #y升級 罕見牌獎勵和 #b2 組稀有牌獎勵(來自所選角色)。所有戰鬥都會額外掉落所選角色的卡牌獎勵。", + "拾起時,獲得來自 ", + " 的 #b3 組 已 #y升級 罕見牌獎勵和 #b2 組稀有牌獎勵。所有戰鬥卡牌獎勵都將額外掉落 ", " 牌。" ] } diff --git a/src/main/resources/sneckomodResources/localization/zht/UIStrings.json b/src/main/resources/sneckomodResources/localization/zht/UIStrings.json index 4341d0969..6781d286a 100644 --- a/src/main/resources/sneckomodResources/localization/zht/UIStrings.json +++ b/src/main/resources/sneckomodResources/localization/zht/UIStrings.json @@ -1,36 +1,36 @@ { "sneckomod:Unknown": { "TEXT": [ - "未知", - "已 升級 的", - "戰鬥開始時未知牌將根據情況變化成其他隨機牌。", - " NL 選擇角色:", - "戰鬥開始時未知牌將根據情況變化成任何其他角色的牌(基礎打擊防禦除外)。", - "戰鬥開始時未知牌將根據情況變化成其他角色的牌(基礎打擊防禦除外)。" + "Unidentified", + " Upgraded ", + "At the start of combat, Unidentified cards transform into other random cards from the chosen classes that satisfy certain constraints.", + " NL Chosen classes:", + "At the start of combat, Unidentified cards transform into other random cards from ANY other class that satisfy certain constraints.", + "At the start of combat, Unidentified cards transform into other random cards from other classes that satisfy certain constraints." ] }, "sneckomod:UnknownNames": { "TEXT": [ - "未知" + "Unidentified" ] }, "sneckomod:UnknownClass": { "TEXT": [ - "???", - " *未知 ", - " 牌。", - "角色", - " ", - "你應該看不到這個的。請報告給Vex", - "已 升級 的 " + "???", + "*Unidentified ", + " Card.", + "Character", + "The ", + "You should never see this. Report to Vex", + "Upgraded " ] }, "sneckomod:UpgradedUnknownReward": { - "TEXT": [ - "將一張已升級的未知牌加入牌組", - "選擇一張牌" - ] -}, + "TEXT": [ + "Add an Unidentified+ card to your deck", + "Pick a Card." + ] + }, "sneckomod:FreeRetainMod": { "TEXT": [ "保留 。 NL " @@ -41,29 +41,46 @@ " NL 消耗 。" ] }, - "sneckomod:ChallengeMode": { "TEXT": [ - "挑戰模式 - 混亂無序", - "未知牌池擴大到所有角色。適合異蛇高玩享用。" + "挑戰模式—異蛇·包羅萬象", + "禮物將來自所有角色,推薦異蛇高玩嘗試。" ] }, "sneckomod:LockInBonfireOptions": { "TEXT": [ - "明晰", - "將未知牌變為特定的牌,可選牌為上場戰鬥呈現的牌", - "需要一張未知牌", - "選擇一張牌加入你的牌組並移除未知", - "[自由行動] 選擇一張牌加入你的牌組並移除未知" + "Identify", + "Lock an Unidentified into a permanent card.", + "Requires an Unidentified card.", + "Select a card to add to your deck, removing its Unidentified.", + "[Free Action] Lock an Unidentified into a permanent card." + ] + }, + "sneckomod:CommonAttackReward": { + "TEXT": [ + "將1張異色牌加入你的卡組中。", + "選擇1張牌。" + ] + }, + "sneckomod:DiceRollPotionReward": { + "TEXT": [ + "將1張已升級的牌加入你的卡組中。", + "選擇1張牌。" + ] + }, + "sneckomod:ColorfulPowersCardReward": { + "TEXT": [ + "將1張已升級的能力牌加入你的卡組中。", + "選擇1張牌。" ] }, "sneckomod:AtGameStart": { "TEXT": [ "", "牌", - "本局遊戲 *未知 牌將會變為 ", - " 牌。", - "選擇本局遊戲未知牌" + "禮物 將包括", + " 牌", + "選擇本局遊戲禮物牌" ] } }