diff --git a/README.md b/README.md index accd83c75f..8b13789179 100644 --- a/README.md +++ b/README.md @@ -1 +1 @@ -1/28/2024 - This is a temporary message to let everyone know the Discord account and server is back under our control. + diff --git a/pom.example b/pom.example deleted file mode 100644 index 8da2d3c0d5..0000000000 --- a/pom.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 202317fdef..b76d45aee5 100644 --- a/src/main/java/automaton/AutomatonMod.java +++ b/src/main/java/automaton/AutomatonMod.java @@ -262,17 +262,7 @@ public void receiveEditCards() { public void addPotions() { - BaseMod.addPotion(BuildAFunctionPotion.class, Color.FIREBRICK, Color.GRAY, Color.TAN, BuildAFunctionPotion.POTION_ID, AutomatonChar.Enums.THE_AUTOMATON); - BaseMod.addPotion(CleanCodePotion.class, Color.CORAL, Color.PURPLE, Color.MAROON, CleanCodePotion.POTION_ID, AutomatonChar.Enums.THE_AUTOMATON); - BaseMod.addPotion(FreeFunctionsPotion.class, Color.BLACK, Color.PURPLE, Color.GRAY, FreeFunctionsPotion.POTION_ID, AutomatonChar.Enums.THE_AUTOMATON); -// BanSharedContentPatch.registerRunLockedPotion(AutomatonChar.Enums.THE_AUTOMATON, BurnAndBuffPotion.POTION_ID); - - if (Loader.isModLoaded("widepotions")) { - WidePotionsMod.whitelistSimplePotion(BuildAFunctionPotion.POTION_ID); - WidePotionsMod.whitelistSimplePotion(BurnAndBuffPotion.POTION_ID); - WidePotionsMod.whitelistSimplePotion(CleanCodePotion.POTION_ID); - WidePotionsMod.whitelistSimplePotion(FreeFunctionsPotion.POTION_ID); - } + //handled in downfallMod } public void receivePostInitialize() { diff --git a/src/main/java/automaton/FunctionHelper.java b/src/main/java/automaton/FunctionHelper.java index 1e404d189c..fec513da5a 100644 --- a/src/main/java/automaton/FunctionHelper.java +++ b/src/main/java/automaton/FunctionHelper.java @@ -48,24 +48,24 @@ public static int max() { public static final float SEQUENCED_CARD_SIZE = 0.225f; public static final float FUNC_CARD_SIZE = 0.45f; - public static final float BG_X = 150f * Settings.scale; - public static final float BG_Y = 700f * Settings.scale; - public static final float HEIGHT_SEQUENCE = 800f * Settings.yScale; - public static final float HEIGHT_SPOT = 700f * Settings.yScale; - public static final float HEIGHT_FUNCTION = 820f * Settings.yScale; + public static final float BG_X = 650f * Settings.scale; + public static final float BG_Y = 600f * Settings.scale; + public static final float HEIGHT_SEQUENCE = 700f * Settings.yScale; + public static final float HEIGHT_SPOT = 600f * Settings.yScale; + public static final float HEIGHT_FUNCTION = 720f * Settings.yScale; public static final Vector2[] cardPositions = { - new Vector2(218f * Settings.xScale, HEIGHT_SEQUENCE), - new Vector2(293f * Settings.xScale, HEIGHT_SEQUENCE), - new Vector2(368f * Settings.xScale, HEIGHT_SEQUENCE), - new Vector2(443f * Settings.xScale, HEIGHT_SEQUENCE) + new Vector2(718f * Settings.xScale, HEIGHT_SEQUENCE), + new Vector2(793f * Settings.xScale, HEIGHT_SEQUENCE), + new Vector2(868f * Settings.xScale, HEIGHT_SEQUENCE), + new Vector2(943f * Settings.xScale, HEIGHT_SEQUENCE) }; public static final Vector2[] floaterStartPositions = { - new Vector2(177F * Settings.xScale, HEIGHT_SPOT), - new Vector2(252f * Settings.xScale, HEIGHT_SPOT), - new Vector2(327f * Settings.xScale, HEIGHT_SPOT), - new Vector2(402f * Settings.xScale, HEIGHT_SPOT) + new Vector2(677F * Settings.xScale, HEIGHT_SPOT), + new Vector2(752f * Settings.xScale, HEIGHT_SPOT), + new Vector2(827f * Settings.xScale, HEIGHT_SPOT), + new Vector2(902f * Settings.xScale, HEIGHT_SPOT) }; public static BobEffect[] bobEffects = { @@ -76,8 +76,8 @@ public static int max() { }; public static final Vector2[] funcPositions = { - new Vector2(480f * Settings.xScale, HEIGHT_FUNCTION), - new Vector2(560f * Settings.xScale, HEIGHT_FUNCTION) + new Vector2(980f * Settings.xScale, HEIGHT_FUNCTION), + new Vector2(1060f * Settings.xScale, HEIGHT_FUNCTION) }; private static final Texture bg = TextureLoader.getTexture("bronzeResources/images/ui/sequenceframe.png"); diff --git a/src/main/java/automaton/actions/ChosenAction.java b/src/main/java/automaton/actions/ChosenAction.java index 3a62f6b564..001c41822d 100644 --- a/src/main/java/automaton/actions/ChosenAction.java +++ b/src/main/java/automaton/actions/ChosenAction.java @@ -1,8 +1,3 @@ -// -// Source code recreated from a .class file by IntelliJ IDEA -// (powered by Fernflower decompiler) -// - package automaton.actions; import com.megacrit.cardcrawl.actions.AbstractGameAction; diff --git a/src/main/java/automaton/actions/ScryBlockStatusAction.java b/src/main/java/automaton/actions/ScryBlockStatusAction.java index dc19568d2e..84c6a0c182 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; diff --git a/src/main/java/automaton/actions/ScryEncodeCardsAction.java b/src/main/java/automaton/actions/ScryEncodeCardsAction.java index 30b46992a5..db9ba9d329 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 6215551ba0..78dc187716 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 29cb4eadf8..492cf4149a 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 02ed919e77..6a59c6b001 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 1dda150f45..378fc34e02 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 626975e76b..22881a2bca 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/Assembly.java b/src/main/java/automaton/cards/Assembly.java index 326e1d2158..e691b44cdd 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 0a7e550e94..487075d666 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/BitShift.java b/src/main/java/automaton/cards/BitShift.java index 0c864b6f66..0fddf0018c 100644 --- a/src/main/java/automaton/cards/BitShift.java +++ b/src/main/java/automaton/cards/BitShift.java @@ -10,13 +10,12 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; import expansioncontent.cardmods.PropertiesMod; -import expansioncontent.cardmods.RetainCardMod; import sneckomod.SneckoMod; -import static automaton.AutomatonMod.makeBetaCardPath; - import java.util.ArrayList; +import static automaton.AutomatonMod.makeBetaCardPath; + public class BitShift extends AbstractBronzeCard { public final static String ID = makeID("BitShift"); diff --git a/src/main/java/automaton/cards/Branch.java b/src/main/java/automaton/cards/Branch.java index 1564153923..3b2a89ab1a 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"); @@ -29,7 +37,7 @@ public class Branch extends AbstractBronzeCard implements OctopusCard { private static final int BLOCK = 6; public Branch() { - super(ID, 1, CardType.ATTACK, CardRarity.COMMON, CardTarget.SELF_AND_ENEMY); + super(ID, 1, CardType.ATTACK, CardRarity.COMMON, CardTarget.ENEMY); baseDamage = DAMAGE; baseBlock = BLOCK; exhaust = true; @@ -60,6 +68,24 @@ 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(); + } + } + + if (AbstractDungeon.player.hasPower(VigorPower.POWER_ID)) { + 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 d9d31cb07e..fcba81dfe3 100644 --- a/src/main/java/automaton/cards/Break.java +++ b/src/main/java/automaton/cards/Break.java @@ -10,15 +10,13 @@ import static automaton.AutomatonMod.makeBetaCardPath; -import static sneckomod.SneckoMod.getRandomStatus; - public class Break extends AbstractBronzeCard { public final static String ID = makeID("Break"); //stupid intellij stuff attack, enemy, rare - private static final int DAMAGE = 10; + private static final int DAMAGE = 15; private static final int UPG_DAMAGE = 5; public Break() { diff --git a/src/main/java/automaton/cards/BuggyMess.java b/src/main/java/automaton/cards/BuggyMess.java index 18614b83cc..db22518805 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 981d2bee20..58e251680d 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 c62d3747c1..f2acc1fc74 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/CleanCode.java b/src/main/java/automaton/cards/CleanCode.java index de496a0b57..3eabccdbca 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 { diff --git a/src/main/java/automaton/cards/Debug.java b/src/main/java/automaton/cards/Debug.java index 4f74d0bc65..0b0ca3cb66 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 bcf8fcadbf..bed2ac5b25 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 ecebac9191..0718c3ce66 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 63d94e543e..cfad9c8637 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 e9228f9c24..cecc2c42af 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/DonuBeam.java b/src/main/java/automaton/cards/DonuBeam.java index bf61175368..8642147567 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 685eb5439c..1db23eb627 100644 --- a/src/main/java/automaton/cards/Explode.java +++ b/src/main/java/automaton/cards/Explode.java @@ -2,15 +2,12 @@ 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; diff --git a/src/main/java/automaton/cards/FindAndReplace.java b/src/main/java/automaton/cards/FindAndReplace.java index 7272ce4867..3803ad1da6 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/Flail.java b/src/main/java/automaton/cards/Flail.java index 9aae3ea5b7..5f76f738cf 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/FunctionCard.java b/src/main/java/automaton/cards/FunctionCard.java index 6b765b48cd..bbb06a1c0a 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/HyperBeam.java b/src/main/java/automaton/cards/HyperBeam.java index 92d2143f9d..f364b5f577 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; @@ -21,13 +20,13 @@ public class HyperBeam extends AbstractBronzeCard { //stupid intellij stuff attack, all_enemy, rare private static final int DAMAGE = 25; - private static final int UPG_DAMAGE = 9; + private static final int UPG_DAMAGE = 10; 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(); diff --git a/src/main/java/automaton/cards/Invalidate.java b/src/main/java/automaton/cards/Invalidate.java index d668bdeab2..07ad0673c4 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/NullPointer.java b/src/main/java/automaton/cards/NullPointer.java index 521497b772..9f200e56dc 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/Overload.java b/src/main/java/automaton/cards/Overload.java index 2109937f69..2199950f49 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 1f13dab036..146e03c80e 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 faaa42bb34..20971689e1 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 4782f7cb67..897b2a72bd 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 38ef802d28..204881458e 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; diff --git a/src/main/java/automaton/cards/TinkerersToolbox.java b/src/main/java/automaton/cards/TinkerersToolbox.java index 26c97cf374..4a54aaf998 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; @@ -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")); } @@ -48,25 +52,5 @@ public void upp() { } - @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/events/CrystalForgeAutomaton.java b/src/main/java/automaton/events/CrystalForgeAutomaton.java index 18fd6110cd..37c20d91ac 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/GoSomewhereElsePatch.java b/src/main/java/automaton/patches/GoSomewhereElsePatch.java index 2e70a8733d..13b5213c1b 100644 --- a/src/main/java/automaton/patches/GoSomewhereElsePatch.java +++ b/src/main/java/automaton/patches/GoSomewhereElsePatch.java @@ -2,6 +2,8 @@ import automaton.FunctionHelper; import automaton.cardmods.EncodeMod; +import awakenedOne.cards.StormRuler; +import awakenedOne.ui.OrbitingSpells; import basemod.helpers.CardModifierManager; import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; import com.megacrit.cardcrawl.actions.AbstractGameAction; @@ -14,7 +16,6 @@ import javassist.expr.MethodCall; import static automaton.FunctionHelper.cardPositions; -import static automaton.FunctionHelper.doStuff; @SpirePatch( clz = UseCardAction.class, @@ -53,6 +54,18 @@ public void update() { }); return false; } +// else if (card.cardID.equals(StormRuler.ID)) { +// AbstractDungeon.player.limbo.addToTop(card); +// AbstractDungeon.actionManager.addToTop(new AbstractGameAction() { +// @Override +// public void update() { +// isDone = true; +// AbstractDungeon.player.limbo.removeCard(card); +// OrbitingSpells.addSpellCard(card); +// } +// }); +// return false; +// } return true; } } \ No newline at end of file diff --git a/src/main/java/automaton/patches/StatusReplacePatch.java b/src/main/java/automaton/patches/StatusReplacePatch.java index af76067bb9..8c4b88bb32 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=0; - newStatus.costForTurn=0; - 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/potions/BuildAFunctionPotion.java b/src/main/java/automaton/potions/BuildAFunctionPotion.java index 546ab723de..935f22c565 100644 --- a/src/main/java/automaton/potions/BuildAFunctionPotion.java +++ b/src/main/java/automaton/potions/BuildAFunctionPotion.java @@ -10,6 +10,7 @@ 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.GameDictionary; import com.megacrit.cardcrawl.helpers.PowerTip; @@ -49,7 +50,9 @@ public void initializeData() { } this.tips.clear(); this.tips.add(new PowerTip(this.name, this.description)); - this.tips.add(new PowerTip(TipHelper.capitalize(BaseMod.getKeywordProper("bronze:encode")), GameDictionary.keywords.get("bronze:encode"))); + if (Settings.language == Settings.GameLanguage.ENG) { + this.tips.add(new PowerTip(TipHelper.capitalize(BaseMod.getKeywordProper("bronze:encode")), GameDictionary.keywords.get("bronze:encode"))); + } } public void use(AbstractCreature target) { diff --git a/src/main/java/automaton/potions/BurnAndBuffPotion.java b/src/main/java/automaton/potions/BurnAndBuffPotion.java index 373a5bfc1e..a76b208215 100644 --- a/src/main/java/automaton/potions/BurnAndBuffPotion.java +++ b/src/main/java/automaton/potions/BurnAndBuffPotion.java @@ -9,6 +9,7 @@ import com.megacrit.cardcrawl.cards.status.Burn; 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.GameDictionary; import com.megacrit.cardcrawl.helpers.PowerTip; @@ -35,9 +36,11 @@ public void initializeData() { this.description = potionStrings.DESCRIPTIONS[0] + potency + potionStrings.DESCRIPTIONS[1] + potency + potionStrings.DESCRIPTIONS[2]; this.tips.clear(); this.tips.add(new PowerTip(this.name, this.description)); - this.tips.add(new PowerTip(TipHelper.capitalize(GameDictionary.STRENGTH.NAMES[0]), GameDictionary.keywords.get(GameDictionary.STRENGTH.NAMES[0]))); - this.tips.add(new PowerTip(TipHelper.capitalize(GameDictionary.DEXTERITY.NAMES[0]), GameDictionary.keywords.get(GameDictionary.DEXTERITY.NAMES[0]))); - this.tips.add(new PowerTip(TipHelper.capitalize(GameDictionary.BURN.NAMES[0]), GameDictionary.keywords.get(GameDictionary.BURN.NAMES[0]))); + if (Settings.language == Settings.GameLanguage.ENG) { + this.tips.add(new PowerTip(TipHelper.capitalize(GameDictionary.STRENGTH.NAMES[0]), GameDictionary.keywords.get(GameDictionary.STRENGTH.NAMES[0]))); + this.tips.add(new PowerTip(TipHelper.capitalize(GameDictionary.DEXTERITY.NAMES[0]), GameDictionary.keywords.get(GameDictionary.DEXTERITY.NAMES[0]))); + this.tips.add(new PowerTip(TipHelper.capitalize(GameDictionary.BURN.NAMES[0]), GameDictionary.keywords.get(GameDictionary.BURN.NAMES[0]))); + } } public void use(AbstractCreature target) { diff --git a/src/main/java/automaton/powers/MaxOutputPower.java b/src/main/java/automaton/powers/MaxOutputPower.java index e81ad50381..04e46965cb 100644 --- a/src/main/java/automaton/powers/MaxOutputPower.java +++ b/src/main/java/automaton/powers/MaxOutputPower.java @@ -1,5 +1,6 @@ package automaton.powers; +import com.megacrit.cardcrawl.actions.common.DrawCardAction; import com.megacrit.cardcrawl.actions.common.MakeTempCardInDrawPileAction; import com.megacrit.cardcrawl.cards.status.Dazed; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; @@ -12,12 +13,12 @@ public class MaxOutputPower extends AbstractAutomatonPower { public MaxOutputPower(int amount) { super(NAME, TYPE, TURN_BASED, AbstractDungeon.player, null, amount); - AbstractDungeon.player.gameHandSize += amount; } @Override public void atStartOfTurn() { flash(); + this.addToBot(new DrawCardAction(amount)); addToBot(new MakeTempCardInDrawPileAction(new Dazed(), amount, true, true)); } diff --git a/src/main/java/automaton/relics/AnalyticalCore.java b/src/main/java/automaton/relics/AnalyticalCore.java index dd6c23abd7..b854e7fcdf 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 51ece75fd1..e88e900d85 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"; @@ -29,6 +31,17 @@ public BottledCode() { 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 public Predicate isOnCard() { @@ -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 ed5a0f827e..47cd6b34d9 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/DecasWashers.java b/src/main/java/automaton/relics/DecasWashers.java index 8035e86ca7..40f0c7af5b 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 c51e8354bd..a71fbb2995 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 ec5ed4e54e..5cd5008009 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 1e980d4220..f351a248a1 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 f7fa327258..379eac90fc 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 8e27a0d6ab..79403ee876 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 0000000000..b4561ccb7f --- /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"; + private final boolean form1 = true; + private final ArrayList wParticles = new ArrayList(); + private final ArrayList wParticles2 = new ArrayList(); + public float renderscale = 1.2F; + public boolean animateParticles = false; + private float fireTimer = 0.0F; + private boolean revived = false; + private Bone eye; + private Bone back; + + + public AwakenedOneChar(String name, PlayerClass setClass) { + super(name, setClass, orbTextures, "awakenedResources/images/mainChar/orb/vfx.png", null, (String) null); + initializeClass(null, + CharacterSelectScreenPatches.characters[6].skins[CharacterSelectScreenPatches.characters[6].reskinCount].SHOULDER1, + CharacterSelectScreenPatches.characters[6].skins[CharacterSelectScreenPatches.characters[6].reskinCount].SHOULDER2, + CharacterSelectScreenPatches.characters[6].skins[CharacterSelectScreenPatches.characters[6].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("awakened:CHANT"); + } else { + CardCrawlGame.sound.play("awakened:CHANT"); + } + CardCrawlGame.screenShake.shake(ScreenShake.ShakeIntensity.LOW, ScreenShake.ShakeDur.SHORT, false); + } + + @Override + public String getCustomModeCharacterButtonSoundKey() { + if (MathUtils.randomBoolean()) { + return "awakened:CHANT"; + } else { + return "awakened:CHANT"; + } + } + + @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 0000000000..ff9851feee --- /dev/null +++ b/src/main/java/awakenedOne/AwakenedOneMod.java @@ -0,0 +1,427 @@ +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.cards.tokens.spells.AbstractSpellCard; +import awakenedOne.events.AbyssEvent; +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.PhaseSkip; +import awakenedOne.potions.SacramentalWine; +import awakenedOne.potions.SneckoPowersPotion; +import awakenedOne.relics.*; +import awakenedOne.ui.AwakenedIcon; +import awakenedOne.ui.OrbitingSpells; +import awakenedOne.util.CardFilter; +import awakenedOne.util.TexLoader; +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.rooms.AbstractRoom; +import downfall.downfallMod; +import downfall.events.TheNest_Evil; +import downfall.events.WingStatue_Evil; +import downfall.util.CardIgnore; +import javassist.CtClass; +import javassist.Modifier; +import javassist.NotFoundException; +import org.clapper.util.classutil.*; +import slimebound.SlimeboundMod; + +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; +import static awakenedOne.ui.OrbitingSpells.spellCardsInscribe; +import static awakenedOne.util.Wiz.awaken; + +@SuppressWarnings({"ConstantConditions", "unused", "WeakerAccess"}) +@SpireInitializer +public class AwakenedOneMod implements + EditCardsSubscriber, + EditRelicsSubscriber, + EditCharactersSubscriber, + PostInitializeSubscriber, + OnStartBattleSubscriber, + OnPlayerTurnStartSubscriber, + AddAudioSubscriber, + OnCardUseSubscriber, + 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; + public static int powersThisCombat = 0; + public static int spellsThisTurn = 0; + + public static boolean CultistTalked = false; + public static boolean ChosenTalked = false; + public static boolean CultistPerish = 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 = TexLoader.getTexture(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) + //.playerClass(AwakenedOneChar.Enums.AWAKENED_ONE) + //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// + .spawnCondition(() -> AbstractDungeon.player instanceof AwakenedOneChar) + //.playerClass(AwakenedOneChar.Enums.AWAKENED_ONE) + //Existing Event to Override// + .overrideEvent(BackToBasics.ID) + //Event Type// + .eventType(EventUtils.EventType.FULL_REPLACE) + .create()); + + + BaseMod.addEvent(new AddEventParams.Builder(AbyssEvent.ID, AbyssEvent.class) //Event ID// + //Event Spawn Condition// + //.playerClass(AwakenedOneChar.Enums.AWAKENED_ONE) + .spawnCondition(() -> AbstractDungeon.player instanceof AwakenedOneChar) + //Event Type// + .eventType(EventUtils.EventType.SHRINE) + .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); //common shared + BaseMod.addRelic(new ShardOfNowak(), RelicType.SHARED); //uncommon shared + BaseMod.addRelic(new MiniBlackHole(), RelicType.SHARED);//shop shared + BaseMod.addRelic(new DeadBird(), RelicType.SHARED);//rare shared + } + + public void addPotions() { + //potions handled in downfallMod + } + + + // 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) { + CultistTalked = false; + CultistPerish = false; + ChosenTalked = false; + + awakenedthiscombat = false; + powersThisCombat = 0; + spellsThisTurn = 0; + ConjureAction.conjuresThisCombat = 0; + OnLoseEnergyPowerPatch.EnergyLostThisCombat = 0; + OnCreateCardSubscriber.CardsCreatedThisCombat = 0; + OnCreateCardSubscriber.CardsCreatedThisTurn = 0; + ConjureAction.refreshedthisturn = false; + spellCards.clear(); + spellCardsInscribe.clear(); + OrbitingSpells.atBattleStart(); + } + + public void onVictory() { + ConjureAction.conjuresThisCombat = 0; + OnLoseEnergyPowerPatch.EnergyLostThisCombat = 0; + OnCreateCardSubscriber.CardsCreatedThisCombat = 0; + OnCreateCardSubscriber.CardsCreatedThisTurn = 0; + awakenedthiscombat = false; + spellCards.clear(); + spellCardsInscribe.clear(); + OrbitingSpells.empty(); + } + + @Override + public void receiveOnPlayerTurnStart() { + OnCreateCardSubscriber.VoidCreatedThisTurn = false; + OnCreateCardSubscriber.CardsCreatedThisTurn = 0; + spellsThisTurn = 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, + + StormRuler.ID, + Inscribe.ID, + AphoticFount.ID, + + AwakenedOneChar.Enums.AWAKENED_ONE + ); + } + + + @Override + public void receiveAddAudio() { + BaseMod.addAudio(makeID("THUNDERSPELL"), "awakenedResources/audio/thunderboltv3.ogg"); + BaseMod.addAudio(makeID("ICESPELL"), "awakenedResources/audio/cryostasis.ogg"); + BaseMod.addAudio(makeID("DARKSPELL"), "awakenedResources/audio/darkleech.ogg"); + BaseMod.addAudio(makeID("FIRESPELL"), "awakenedResources/audio/burning_study.ogg"); + BaseMod.addAudio(makeID("CHANT"), "awakenedResources/audio/chant_activatev2.ogg"); + BaseMod.addAudio(makeID("SOULSTRIKE"), "awakenedResources/audio/awakenedoneattack.ogg"); + } + + @Override + public void receiveCardUsed(AbstractCard abstractCard) { + if (abstractCard.type == AbstractCard.CardType.POWER) { + powersThisCombat++; + awaken(); + } + if (abstractCard instanceof AbstractSpellCard && !abstractCard.purgeOnUse) { + SlimeboundMod.logger.info("incrementing Spells this turn from " + spellsThisTurn + " to " + (spellsThisTurn + 1) + ". card: " + abstractCard.name); + spellsThisTurn++; + } + } +} \ 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 0000000000..d94781420a --- /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 0000000000..58e16ecb29 --- /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 0000000000..4f51f4b846 --- /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 0000000000..847f9202fb --- /dev/null +++ b/src/main/java/awakenedOne/actions/ConjureAction.java @@ -0,0 +1,193 @@ +package awakenedOne.actions; + +import awakenedOne.cards.tokens.spells.ESPSpell; +import awakenedOne.powers.IntensifyDebuffPower; +import awakenedOne.relics.ZenerDeck; +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 com.megacrit.cardcrawl.helpers.CardLibrary; + +import java.util.ArrayList; + +import static awakenedOne.AwakenedOneMod.UP_NEXT; +import static awakenedOne.ui.AwakenButton.awaken; +import static awakenedOne.ui.OrbitingSpells.*; +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; + private final boolean choose; + private final boolean ontop; + private final boolean bstudy; + AbstractCard pick; + private int permaAdd; + private int extraCreate; + + public ConjureAction(boolean choose) { + this.choose = choose; + ontop = false; + bstudy = false; + pick = null; + permaAdd = 0; + extraCreate = 0; + } + + public ConjureAction(boolean choose, int permaAddCount, int creationCount) { + this.choose = choose; + ontop = false; + bstudy = false; + pick = null; + permaAdd = permaAddCount; + extraCreate = creationCount; + } + + 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) && permaAdd == 0) { + 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; +// } + if (permaAdd == 0) + 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).makeStatEquivalentCopy(); + } + + 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)); + } else { + addToTop(new RemoveSpellCardActionSpecial(tar)); + } + } else { + if (permaAdd == 0) { + 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; +// } + } + ArrayList possCards = new ArrayList<>(); + ArrayList availableCards = new ArrayList<>(); + ArrayList actualChoices = new ArrayList<>(); + if (permaAdd == 0) { + possCards.addAll(spellCards); + while (!possCards.isEmpty()) { + availableCards.add(possCards.remove(AbstractDungeon.cardRandomRng.random(possCards.size() - 1))); + } + } else { + for (int i = 0; i < 4; i++) { + availableCards.add(CardLibrary.getCard(spells.get(i))); + } + if (AbstractDungeon.player.hasRelic(ZenerDeck.ID)) { + availableCards.add(CardLibrary.getCard(ESPSpell.ID)); + } + } + availableCards.forEach(q -> actualChoices.add(q.makeStatEquivalentCopy())); + addToTop(new SelectCardsCenteredAction(actualChoices, "", (cards) -> { + AbstractCard q = cards.get(0); + if (isAwakened()) { + q.upgrade(); + } + if (permaAdd == 0) { + addToTop(new MakeTempCardInHandAction(q)); + addToTop(new RemoveSpellCardAction(q)); + } else { + for (int i = 0; i < permaAdd; i++) { + spellCards.add(q.makeStatEquivalentCopy()); + spellCardsInscribe.add(q.makeStatEquivalentCopy()); + } + } + })); + } + if (permaAdd == 0) { + 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 0000000000..3deb2a9b8d --- /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 { + private final boolean freeToPlayOnce; + private final AbstractPlayer p; + private final int energyOnUse; + public int[] multiDamage; + + 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 0000000000..821248e9ab --- /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 0000000000..03c2fc3b3b --- /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/EncyclopediaAction.java b/src/main/java/awakenedOne/actions/EncyclopediaAction.java new file mode 100644 index 0000000000..b39ca4ef80 --- /dev/null +++ b/src/main/java/awakenedOne/actions/EncyclopediaAction.java @@ -0,0 +1,98 @@ +package awakenedOne.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.CardGroup; +import com.megacrit.cardcrawl.cards.CardGroup.CardGroupType; +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.UIStrings; +import hermit.util.Wiz; + +import java.util.ArrayList; + +public class EncyclopediaAction extends AbstractGameAction { + public static final String[] TEXT; + private static final UIStrings uiStrings; + + static { + uiStrings = CardCrawlGame.languagePack.getUIString("ExhaustAction"); + TEXT = uiStrings.TEXT; + } + + private final AbstractPlayer p; + private final String text; + private final int amount; + + public EncyclopediaAction(int amount, String text) { + this.p = AbstractDungeon.player; + this.setValues(this.p, AbstractDungeon.player, amount); + this.actionType = ActionType.CARD_MANIPULATION; + this.duration = Settings.ACTION_DUR_MED; + this.text = text; + this.amount = amount; + } + + public void update() { + AbstractCard card; + if (this.duration == Settings.ACTION_DUR_MED) { + CardGroup tmp = new CardGroup(CardGroupType.UNSPECIFIED); + + + for (AbstractCard c : generateCardChoices() + ) { + tmp.addToBottom(c); + } + + tmp.sortAlphabetically(true); + tmp.sortByRarityPlusStatusCardType(false); + + if (tmp.size() == 0) { + this.isDone = true; + } else if (tmp.size() <= 2) { + for (AbstractCard abstractCard : tmp.group) { + Wiz.atb(new MakeTempCardInHandAction(abstractCard, 1)); + } + this.isDone = true; + } else { + AbstractDungeon.gridSelectScreen.open(tmp, 2, text, false); + this.tickDuration(); + } + } else { + if (AbstractDungeon.gridSelectScreen.selectedCards.size() != 0) { + for (AbstractCard abstractCard : AbstractDungeon.gridSelectScreen.selectedCards) { + Wiz.atb(new MakeTempCardInHandAction(abstractCard, 1)); + } + AbstractDungeon.gridSelectScreen.selectedCards.clear(); + } + this.tickDuration(); + } + } + + private ArrayList generateCardChoices() { + ArrayList derp = new ArrayList<>(); + + while (derp.size() != amount) { + boolean dupe = false; + AbstractCard tmp = null; + tmp = AbstractDungeon.returnTrulyRandomCardInCombat().makeCopy(); + + for (AbstractCard c : derp) { + if (c.cardID.equals(tmp.cardID)) { + dupe = true; + break; + } + } + + if (!dupe) { + tmp.modifyCostForCombat(-2); + derp.add(tmp); + } + } + + return derp; + } +} diff --git a/src/main/java/awakenedOne/actions/FollowUpPowersAction.java b/src/main/java/awakenedOne/actions/FollowUpPowersAction.java new file mode 100644 index 0000000000..0f2cc9469a --- /dev/null +++ b/src/main/java/awakenedOne/actions/FollowUpPowersAction.java @@ -0,0 +1,28 @@ +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.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 0000000000..11935b037b --- /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 0000000000..fb132f0d45 --- /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/GetDimensionCardsAction.java b/src/main/java/awakenedOne/actions/GetDimensionCardsAction.java new file mode 100644 index 0000000000..e0ea22e8ae --- /dev/null +++ b/src/main/java/awakenedOne/actions/GetDimensionCardsAction.java @@ -0,0 +1,124 @@ +package awakenedOne.actions; + +import awakenedOne.cards.altDimension.*; +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 java.util.ArrayList; +import java.util.Collections; + +public class GetDimensionCardsAction extends AbstractGameAction { + private int cardCount = 0; + private int cardsToSelect = 0; + private boolean retrieveCard = false; + + private final ArrayList cards = new ArrayList<>(); + private final ArrayList numbers = new ArrayList<>(); + + public GetDimensionCardsAction(int count, int grabCount) { + this.actionType = ActionType.CARD_MANIPULATION; + this.duration = Settings.ACTION_DUR_FAST; + cardCount = count; + cardsToSelect = grabCount; + } + + public void update() { + if (this.duration == Settings.ACTION_DUR_FAST) { + + if (cards.size() == 0) { + for (int i = 0; i <= 8; i++) { + numbers.add(i); + } + Collections.shuffle(numbers, AbstractDungeon.cardRandomRng.random); + + for (int i = 0; i < cardCount; ++i) { + AbstractCard card = null; + switch (numbers.get(0)) { + case 0: { + card = new Crusher(); + break; + } + case 1: { + card = new Daggerstorm(); + break; + } + case 2: { + card = new ManaShield(); + break; + } + case 3: { + card = new Minniegun(); + break; + } + case 4: { + card = new Mantis(); + break; + } + case 5: { + card = new Scheme(); + break; + } + case 6: { + card = new SignInBlood(); + break; + } + case 7: { + card = new SpreadingSpores(); + break; + } + case 8: { + card = new TheEncyclopedia(); + break; + } + } + + cards.add(card); + numbers.remove(0); + } + } + + AbstractDungeon.cardRewardScreen.customCombatOpen(cards, CardRewardScreen.TEXT[1], false); + this.tickDuration(); + } else { + if (!this.retrieveCard) { + if (AbstractDungeon.cardRewardScreen.discoveryCard != null) { + AbstractCard disCard = AbstractDungeon.cardRewardScreen.discoveryCard.makeStatEquivalentCopy(); + + 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)); + } + + cardsToSelect--; + cards.remove(AbstractDungeon.cardRewardScreen.discoveryCard); + AbstractDungeon.cardRewardScreen.discoveryCard = null; + } + + this.retrieveCard = true; + if (cardsToSelect > 0) { + if (cards.size() > 0) { + this.duration = Settings.ACTION_DUR_FAST; + this.isDone = false; + this.retrieveCard = false; + } else { + this.isDone = true; + this.tickDuration(); + } + } else { + this.isDone = true; + this.tickDuration(); + } + + } + } + } + +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/actions/GrimoireAction.java b/src/main/java/awakenedOne/actions/GrimoireAction.java new file mode 100644 index 0000000000..8c79668ee4 --- /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 0000000000..39c470b0f7 --- /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 0000000000..9cc4971f66 --- /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 0000000000..68c3a4312a --- /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/MoonlitVisionAction.java b/src/main/java/awakenedOne/actions/MoonlitVisionAction.java new file mode 100644 index 0000000000..bfee8777ef --- /dev/null +++ b/src/main/java/awakenedOne/actions/MoonlitVisionAction.java @@ -0,0 +1,28 @@ +package awakenedOne.actions; + +import awakenedOne.powers.MoonlitVisionPower; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.GainEnergyAction; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; + +import static awakenedOne.util.Wiz.atb; + + +public class MoonlitVisionAction extends AbstractGameAction { + public int amount; + + + public MoonlitVisionAction(int amount) { + this.amount = amount; + this.duration = this.startDuration = Settings.ACTION_DUR_XFAST; + } + + public void update() { + isDone = true; + if (AbstractDungeon.player.hand.size() >= 8) { + AbstractDungeon.player.getPower(MoonlitVisionPower.POWER_ID).flash(); + atb(new GainEnergyAction(this.amount)); + } + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/actions/NihilAction.java b/src/main/java/awakenedOne/actions/NihilAction.java new file mode 100644 index 0000000000..e20e2c5ed9 --- /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 final AbstractCreature target; + private int count = 0; + private float timer = 0.0F; + + 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 0000000000..a832f35521 --- /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/ProcessionAction.java b/src/main/java/awakenedOne/actions/ProcessionAction.java new file mode 100644 index 0000000000..3bc23b7f18 --- /dev/null +++ b/src/main/java/awakenedOne/actions/ProcessionAction.java @@ -0,0 +1,81 @@ +package awakenedOne.actions; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.utility.NewQueueCardAction; +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.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.relics.ChemicalX; +import com.megacrit.cardcrawl.ui.panels.EnergyPanel; + +import java.util.Iterator; + +import static awakenedOne.util.Wiz.shuffleIn; + +public class ProcessionAction extends AbstractGameAction { + + public static final String[] TEXT; + + static { + TEXT = CardCrawlGame.languagePack.getUIString("WishAction").TEXT; + } + + private final AbstractPlayer player; + private int playAmt; + + public ProcessionAction() { + this.actionType = ActionType.CARD_MANIPULATION; + this.duration = this.startDuration = Settings.ACTION_DUR_FAST; + this.player = AbstractDungeon.player; + } + + public void update() { + if (this.duration == this.startDuration) { + if (this.player.drawPile.isEmpty()) { + this.isDone = true; + } else { + CardGroup temp = new CardGroup(CardGroup.CardGroupType.UNSPECIFIED); + Iterator var6 = this.player.drawPile.group.iterator(); + + while (var6.hasNext()) { + AbstractCard c = (AbstractCard) var6.next(); + temp.addToTop(c); + } + + temp.sortAlphabetically(true); + temp.sortByRarityPlusStatusCardType(false); + AbstractDungeon.gridSelectScreen.open(temp, 1, TEXT[0], false); + this.tickDuration(); + } + } else { + if (!AbstractDungeon.gridSelectScreen.selectedCards.isEmpty()) { + Iterator var1 = AbstractDungeon.gridSelectScreen.selectedCards.iterator(); + + while (var1.hasNext()) { + AbstractCard c = (AbstractCard) var1.next(); + AbstractDungeon.player.drawPile.group.remove(c); + AbstractDungeon.getCurrRoom().souls.remove(c); + this.addToTop(new NewQueueCardAction(c, true, false, true)); + if ((!c.freeToPlay() && !c.freeToPlayOnce && c.costForTurn > 0)) { + shuffleIn(new VoidCard(), c.costForTurn); + } + if (c.cost == -1) { + shuffleIn(new VoidCard(), EnergyPanel.totalCount); +// if (AbstractDungeon.player.hasRelic(ChemicalX.ID)) { +// shuffleIn(new VoidCard(), 2); +// } + } + } + + AbstractDungeon.gridSelectScreen.selectedCards.clear(); + AbstractDungeon.player.hand.refreshHandLayout(); + } + + this.tickDuration(); + } + } +} diff --git a/src/main/java/awakenedOne/actions/RefreshSpellsAction.java b/src/main/java/awakenedOne/actions/RefreshSpellsAction.java new file mode 100644 index 0000000000..47dbdf05bf --- /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 0000000000..1fcbb4fef2 --- /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 0000000000..e685b27305 --- /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 0000000000..3285850894 --- /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 0000000000..b942c98248 --- /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 0000000000..0f0b5b3e20 --- /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 final int count; + private boolean retrieveCard = false; + + 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 0000000000..aa6574ad44 --- /dev/null +++ b/src/main/java/awakenedOne/actions/SetUpNextSpellAction.java @@ -0,0 +1,30 @@ +package awakenedOne.actions; + +import awakenedOne.ui.OrbitingSpells; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.cards.AbstractCard; + +import static awakenedOne.AwakenedOneMod.UP_NEXT; +import static awakenedOne.ui.OrbitingSpells.spellCards; + +public class SetUpNextSpellAction extends AbstractGameAction { + public SetUpNextSpellAction() { + } + + @Override + public void update() { + isDone = true; + + boolean setup = true; + + for (AbstractCard c : spellCards) { + if (c.hasTag(UP_NEXT)) { + setup = false; + } + } + + if (setup) { + OrbitingSpells.setupnext(); + } + } +} diff --git a/src/main/java/awakenedOne/actions/SpellApotheosisAction.java b/src/main/java/awakenedOne/actions/SpellApotheosisAction.java new file mode 100644 index 0000000000..80e1d0ed84 --- /dev/null +++ b/src/main/java/awakenedOne/actions/SpellApotheosisAction.java @@ -0,0 +1,53 @@ +package awakenedOne.actions; + +import awakenedOne.cards.Caw; +import awakenedOne.cards.tokens.spells.AbstractSpellCard; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +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 com.megacrit.cardcrawl.orbs.AbstractOrb; +import guardian.orbs.StasisOrb; + +import java.util.Iterator; + + +public class SpellApotheosisAction extends AbstractGameAction { + public SpellApotheosisAction() { + this.duration = Settings.ACTION_DUR_MED; + } + + public void update() { + AbstractPlayer p = AbstractDungeon.player; + this.upgradeAllCardsInGroup(p.hand); + this.upgradeAllCardsInGroup(p.drawPile); + this.upgradeAllCardsInGroup(p.discardPile); + this.upgradeAllCardsInGroup(p.exhaustPile); + + for (AbstractOrb o : AbstractDungeon.player.orbs) { + if (o instanceof StasisOrb) { + if (((StasisOrb) o).stasisCard instanceof AbstractSpellCard) { + ((StasisOrb) o).stasisCard.upgrade(); + } + } + } + + this.isDone = true; + } + + private void upgradeAllCardsInGroup(CardGroup cardGroup) { + for (AbstractCard c : cardGroup.group) { + if (c.canUpgrade() && c instanceof AbstractSpellCard) { + if (cardGroup.type == CardGroup.CardGroupType.HAND) { + c.superFlash(); + } + + c.upgrade(); + c.applyPowers(); + } + } + + } +} diff --git a/src/main/java/awakenedOne/actions/nukePowerAction.java b/src/main/java/awakenedOne/actions/nukePowerAction.java new file mode 100644 index 0000000000..3e7fa61637 --- /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 0000000000..868c53e8f9 --- /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 0000000000..8c3b84b050 --- /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 0000000000..f5fa1591fe --- /dev/null +++ b/src/main/java/awakenedOne/cards/AbstractAwakenedCard.java @@ -0,0 +1,309 @@ +package awakenedOne.cards; + +import awakenedOne.AwakenedOneChar; +import awakenedOne.AwakenedOneMod; +import awakenedOne.AwakenedTextHelper; +import awakenedOne.powers.AbstractTwoAmountAwakenedPower; +import awakenedOne.powers.RisingChantPower; +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.actions.SoundAction; +import hermit.util.TextureLoader; + +import static awakenedOne.AwakenedOneMod.ACTIVECHANT; +import static awakenedOne.AwakenedOneMod.makeID; +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 String frameString; + + 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 CardRarity rarity, final CardType type, 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); + this.addToBot(new SoundAction(makeID("CHANT"))); + 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 int checkChantEffectBonus() { + if (AbstractDungeon.player.hasPower(RisingChantPower.POWER_ID)) { + if (((AbstractTwoAmountAwakenedPower) AbstractDungeon.player.getPower(RisingChantPower.POWER_ID)).amount2 > 0) { + AbstractDungeon.player.getPower(RisingChantPower.POWER_ID).onSpecificTrigger(); + return 2; + } + } + return 1; + } + + + protected String getTypeName() { + switch (type) { + case ATTACK: + return "attack"; + case POWER: + return "power"; + default: + return "skill"; + } + } +} diff --git a/src/main/java/awakenedOne/cards/Altar.java b/src/main/java/awakenedOne/cards/Altar.java new file mode 100644 index 0000000000..c7238310de --- /dev/null +++ b/src/main/java/awakenedOne/cards/Altar.java @@ -0,0 +1,50 @@ +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); + /* + if (c instanceof AbstractSpellCard) { + atb(new GainEnergyAction(1)); + } + + */ + } + 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 0000000000..fc0365b745 --- /dev/null +++ b/src/main/java/awakenedOne/cards/AphoticFount.java @@ -0,0 +1,37 @@ +package awakenedOne.cards; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.actions.ConjureAction; +import awakenedOne.powers.AphoticFountPower; +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; +import static awakenedOne.util.Wiz.atb; + +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); + baseMagicNumber = magicNumber = 1; + this.tags.add(AwakenedOneMod.DELVE); + loadJokeCardImage(this, makeBetaCardPath(AphoticFount.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + // Wiz.makeInHand(new Cryostasis()); + atb(new ConjureAction(false)); + applyToSelf(new AphoticFountPower(magicNumber)); + } + + @Override + public void upp() { + upgradeMagicNumber(1); + //upgradeBaseCost(1); + } +} \ 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 0000000000..566efe2049 --- /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 0000000000..fd07f4926b --- /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 0000000000..024865587e --- /dev/null +++ b/src/main/java/awakenedOne/cards/AwakenedForm.java @@ -0,0 +1,35 @@ +package awakenedOne.cards; + +import basemod.helpers.BaseModCardTags; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.CuriosityPower; +import com.megacrit.cardcrawl.powers.RitualPower; + +import static awakenedOne.AwakenedOneMod.*; +import static awakenedOne.util.Wiz.applyToSelfTop; +import static awakenedOne.util.Wiz.awaken; + +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 = 1; + baseSecondMagic = secondMagic = 1; + tags.add(BaseModCardTags.FORM); + loadJokeCardImage(this, makeBetaCardPath(AwakenedForm.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + if (upgraded) awaken(true); + applyToSelfTop(new CuriosityPower(p, magicNumber)); + applyToSelfTop(new RitualPower(p, secondMagic, true)); + } + + @Override + public void upp() { + upgradeSecondMagic(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 0000000000..7d987cdfa9 --- /dev/null +++ b/src/main/java/awakenedOne/cards/BirdsEye.java @@ -0,0 +1,40 @@ +package awakenedOne.cards; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.actions.ConjureAction; +import awakenedOne.ui.AwakenButton; +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")); + this.tags.add(AwakenedOneMod.DELVE); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + if (upgraded) { + atb(new AbstractGameAction() { + @Override + public void update() { + isDone = true; + OrbitingSpells.refreshSpells(); + AwakenButton.awaken(5); + } + }); + } + atb(new ConjureAction(true)); + } + + public void upp() { + } +} \ 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 0000000000..c39e8772b7 --- /dev/null +++ b/src/main/java/awakenedOne/cards/BloodRite.java @@ -0,0 +1,39 @@ +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, 1, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); + baseDamage = 8; + 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(); + + Wiz.atb(new MakeTempCardInHandAction(c, 1)); + } + + @Override + public void upp() { + //cardsToPreview.upgrade(); + upgradeDamage(3); + } +} \ 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 0000000000..0595e85d15 --- /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 0000000000..230e89adfc --- /dev/null +++ b/src/main/java/awakenedOne/cards/Brainshock.java @@ -0,0 +1,61 @@ +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.core.CardCrawlGame; +import com.megacrit.cardcrawl.helpers.GameDictionary; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.vfx.combat.LightningEffect; + +import static awakenedOne.AwakenedOneMod.*; +import static awakenedOne.util.Wiz.atb; +import static awakenedOne.util.Wiz.vfx; + +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.COMMON, CardTarget.ENEMY); + baseDamage = 12; + // baseSecondMagic = secondMagic = 1; + loadJokeCardImage(this, makeBetaCardPath(Brainshock.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + 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); + + 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(4); + } +} \ 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 0000000000..53a5a96a88 --- /dev/null +++ b/src/main/java/awakenedOne/cards/Carrionmaker.java @@ -0,0 +1,66 @@ +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 hermit.actions.SoundAction; + +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 SoundAction(makeID("SOULSTRIKE"))); + 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 0000000000..75e4900b98 --- /dev/null +++ b/src/main/java/awakenedOne/cards/Caw.java @@ -0,0 +1,60 @@ +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() { + int times = checkChantEffectBonus(); + for (int i = 0; i < times; i++) { + 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 0000000000..295f0ce6c7 --- /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 0000000000..db013db8fc --- /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 0000000000..62c275f914 --- /dev/null +++ b/src/main/java/awakenedOne/cards/Clutch.java @@ -0,0 +1,39 @@ +package awakenedOne.cards; + +import awakenedOne.AwakenedOneMod; +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 = 8; + //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(3); + } +} \ 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 0000000000..f8fd21fa02 --- /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); + baseMagicNumber = magicNumber = 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 0000000000..593cad9857 --- /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 = 4; + 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() { + this.isInnate = true; + } +} \ 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 0000000000..0186d1dc14 --- /dev/null +++ b/src/main/java/awakenedOne/cards/DeathCoil.java @@ -0,0 +1,35 @@ +package awakenedOne.cards; + +import awakenedOne.powers.ManaburnPower; +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.SKILL, CardRarity.UNCOMMON, CardTarget.ENEMY); + baseMagicNumber = magicNumber = 8; + 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)); + } + 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(3); + } +} \ 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 0000000000..64c2a60634 --- /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 0000000000..40c6cf07a0 --- /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 0000000000..00617669e0 --- /dev/null +++ b/src/main/java/awakenedOne/cards/Dejection.java @@ -0,0 +1,55 @@ +package awakenedOne.cards; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.cards.tokens.Ceremony; +import awakenedOne.cards.tokens.spells.AbstractSpellCard; +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.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.cardsToPreview = new Ceremony(); + //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 instanceof AbstractSpellCard) { + AbstractCard ce = new Ceremony(); + awakenedOne.util.Wiz.atb(new MakeTempCardInHandAction(ce, 1)); + //atb(new GainEnergyAction(1)); + } + + } + list.clear(); + }, null, uiStrings.TEXT[0], false, false, false)); + } + + + @Override + public void upp() { + //cardsToPreview.upgrade(); + 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 0000000000..b7b9f5f685 --- /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, 1, 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 0000000000..a98f533d61 --- /dev/null +++ b/src/main/java/awakenedOne/cards/DesperatePrayer.java @@ -0,0 +1,35 @@ +package awakenedOne.cards; + +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.*; + +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, 1, CardType.SKILL, CardRarity.RARE, CardTarget.SELF); + loadJokeCardImage(this, makeBetaCardPath(DesperatePrayer.class.getSimpleName() + ".png")); + exhaust = true; + baseMagicNumber = magicNumber = 3; + AbstractCard c = new Ceremony(); + //c.upgrade(); + this.cardsToPreview = c; + } + + public void use(AbstractPlayer p, AbstractMonster m) { + AbstractCard c = new Ceremony(); + //c.upgrade(); + Wiz.atb(new MakeTempCardInHandAction(c, magicNumber)); + } + + public void upp() { + upgradeMagicNumber(1); + } +} \ 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 0000000000..f22c2c9c92 --- /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, 2, 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(1); + } +} \ 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 0000000000..27df7697e3 --- /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 = 10; + //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 0000000000..59dd1d4a25 --- /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/Eventide.java b/src/main/java/awakenedOne/cards/Eventide.java new file mode 100644 index 0000000000..25b05b96ce --- /dev/null +++ b/src/main/java/awakenedOne/cards/Eventide.java @@ -0,0 +1,42 @@ +package awakenedOne.cards; + +import awakenedOne.util.Wiz; +import com.megacrit.cardcrawl.actions.common.MakeTempCardInDrawPileAction; +import com.megacrit.cardcrawl.actions.defect.NewRipAndTearAction; +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 hermit.actions.SoundAction; + +import static awakenedOne.AwakenedOneMod.*; + +public class Eventide extends AbstractAwakenedCard { + public final static String ID = makeID(Eventide.class.getSimpleName()); + + // intellij stuff attack, enemy, common, 8, 3, , , 3, 1 + public Eventide() { + super(ID, 1, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ALL_ENEMY); + baseDamage = 8; + loadJokeCardImage(this, makeBetaCardPath(Eventide.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + for (int i = 0; i < 2; ++i) { + this.addToBot(new SoundAction(makeID("SOULSTRIKE"))); + this.addToBot(new NewRipAndTearAction(this)); + } + Wiz.atb(new MakeTempCardInDrawPileAction(new VoidCard(), 1, false, true, false)); + + } + + @Override + public void initializeDescription() { + super.initializeDescription(); + this.keywords.add(GameDictionary.VOID.NAMES[0].toLowerCase()); + } + + public void upp() { + upgradeDamage(2); + } +} \ 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 0000000000..ae46ede5ff --- /dev/null +++ b/src/main/java/awakenedOne/cards/Extension.java @@ -0,0 +1,46 @@ +package awakenedOne.cards; + +import basemod.BaseMod; +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 hermit.actions.SoundAction; + +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, 1, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); + baseDamage = 11; + loadJokeCardImage(this, makeBetaCardPath(Extension.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + this.addToBot(new SoundAction(makeID("SOULSTRIKE"))); + 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; + if (AbstractDungeon.player.hand.size() < BaseMod.MAX_HAND_SIZE) { + AbstractDungeon.player.discardPile.moveToHand(Extension.this); + } + } + }); + } + } + + public void upp() { + upgradeDamage(3); + } +} \ 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 0000000000..82f110015a --- /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 = 10; + 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(3); + } +} \ 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 0000000000..2895d96321 --- /dev/null +++ b/src/main/java/awakenedOne/cards/FeatherWhirl.java @@ -0,0 +1,34 @@ +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); + 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 0000000000..d8e8a71b24 --- /dev/null +++ b/src/main/java/awakenedOne/cards/FlareShot.java @@ -0,0 +1,60 @@ +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.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.DrawCardNextTurnPower; + +import static awakenedOne.AwakenedOneMod.loadJokeCardImage; +import static awakenedOne.AwakenedOneMod.makeBetaCardPath; + +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, 0, CardType.ATTACK, CardRarity.COMMON, CardTarget.ENEMY); + baseDamage = 4; + this.baseMagicNumber = 1; + this.tags.add(AwakenedOneMod.CHANT); + 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)); + + + if (isTrig_chant()) { + chant(); + } + } + + + @Override + public void chant() { + + int times = checkChantEffectBonus(); + + for (int i = 0; i < times; i++) { + this.addToBot(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new DrawCardNextTurnPower(AbstractDungeon.player, magicNumber), 1)); + + } + + checkOnChant(); + } + + public void triggerOnGlowCheck() { + this.glowColor = isChantActiveGlow(this) ? GOLD_BORDER_GLOW_COLOR : BLUE_BORDER_GLOW_COLOR; + } + + + @Override + public void upp() { + upgradeDamage(3); + } +} \ 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 0000000000..3ec75bae21 --- /dev/null +++ b/src/main/java/awakenedOne/cards/FourthDimension.java @@ -0,0 +1,45 @@ +package awakenedOne.cards; + +import awakenedOne.cards.altDimension.RealityRift; +import com.evacipated.cardcrawl.mod.stslib.actions.common.SelectCardsInHandAction; +import com.megacrit.cardcrawl.actions.common.ExhaustSpecificCardAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.green.Nightmare; +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.ThoughtBubble; + +import static awakenedOne.AwakenedOneMod.*; +import static awakenedOne.util.Wiz.*; + +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 is going to need healing tag + this.tags.add(CardTags.HEALING); + loadJokeCardImage(this, makeBetaCardPath(FourthDimension.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + atb(new SelectCardsInHandAction(cardStrings.EXTENDED_DESCRIPTION[0], (cards) -> { + for (AbstractCard c : cards) { + shuffleIn(c.makeStatEquivalentCopy(), magicNumber); + //applyToSelfTop(new FourthDimensionPower(magicNumber, c.makeStatEquivalentCopy())); + att(new ExhaustSpecificCardAction(c, AbstractDungeon.player.hand)); + } + })); + + } + + public void upp() { + upgradeBaseCost(0); + //upgradeMagicNumber(1); + } +} \ 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 0000000000..8c40b79e64 --- /dev/null +++ b/src/main/java/awakenedOne/cards/Gather.java @@ -0,0 +1,48 @@ +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 = 3; + magicNumber = baseMagicNumber = 2; + this.tags.add(AwakenedOneMod.CHANT); + loadJokeCardImage(this, makeBetaCardPath(Gather.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + blck(); + if (isTrig_chant()) { + chant(); + } + } + + + @Override + public void chant() { + + int times = checkChantEffectBonus(); + atb(new BetterDiscardPileToHandAction(times)); + 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 0000000000..b6cec112ec --- /dev/null +++ b/src/main/java/awakenedOne/cards/Gloomguard.java @@ -0,0 +1,56 @@ +package awakenedOne.cards; + +import automaton.cards.goodstatus.IntoTheVoid; +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.helpers.GameDictionary; +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.COMMON, CardTarget.SELF); + baseBlock = 8; + loadJokeCardImage(this, makeBetaCardPath(Gloomguard.class.getSimpleName() + ".png")); + } + + public static boolean checkVoid() { + boolean hasVoid = false; + for (AbstractCard c : AbstractDungeon.player.hand.group) { + if (c instanceof VoidCard || c instanceof IntoTheVoid) { + hasVoid = true; + break; + } + } + return hasVoid; + } + + public void use(AbstractPlayer p, AbstractMonster m) { + blck(); + } + + @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 initializeDescription() { + super.initializeDescription(); + this.keywords.add(GameDictionary.VOID.NAMES[0].toLowerCase()); + } + + public void upp() { + upgradeBlock(3); + } +} \ 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 0000000000..3b59f531b9 --- /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 0000000000..80aadccc91 --- /dev/null +++ b/src/main/java/awakenedOne/cards/Hymn.java @@ -0,0 +1,49 @@ +package awakenedOne.cards; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.cards.tokens.Ceremony; +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.actions.common.MakeTempCardInHandAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.vfx.combat.MiracleEffect; +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 = 3; + this.cardsToPreview = new Ceremony(); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + blck(); + 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)); + } + 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(3); + //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 0000000000..0ba9416ae9 --- /dev/null +++ b/src/main/java/awakenedOne/cards/Initiation.java @@ -0,0 +1,38 @@ +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(); + loadJokeCardImage(this, makeBetaCardPath(Initiation.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + blck(); + AbstractCard c = new Ceremony(); + + 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/Inscribe.java b/src/main/java/awakenedOne/cards/Inscribe.java new file mode 100644 index 0000000000..588c8b4b1b --- /dev/null +++ b/src/main/java/awakenedOne/cards/Inscribe.java @@ -0,0 +1,28 @@ +package awakenedOne.cards; + +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 Inscribe extends AbstractAwakenedCard { + public final static String ID = makeID(Inscribe.class.getSimpleName()); + // intellij stuff power, self, uncommon, , , , , 3, 1 + + public Inscribe() { + super(ID, 0, CardType.POWER, CardRarity.UNCOMMON, CardTarget.SELF); + baseMagicNumber = magicNumber = 2; + loadJokeCardImage(this, makeBetaCardPath(Inscribe.class.getSimpleName() + ".png")); + tags.add(DELVE); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + if (upgraded) atb(new ConjureAction(false)); + atb(new ConjureAction(true, magicNumber, 0)); + } + + public void upp() { + } +} \ 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 0000000000..94675c8adc --- /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 0000000000..e54278adb6 --- /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/Manastorm.java b/src/main/java/awakenedOne/cards/Manastorm.java new file mode 100644 index 0000000000..6770285d77 --- /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 0000000000..5f75717c88 --- /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 0000000000..41098976d0 --- /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 0000000000..bdae72a8fb --- /dev/null +++ b/src/main/java/awakenedOne/cards/MoonlitVision.java @@ -0,0 +1,28 @@ +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, 2, 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() { + upgradeBaseCost(1); + } +} \ 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 0000000000..a879e6ca7a --- /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.selfRetain = true; + //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 0000000000..44ca46b5a7 --- /dev/null +++ b/src/main/java/awakenedOne/cards/MysticOrder.java @@ -0,0 +1,39 @@ +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); + // this.exhaust = true; + 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() { + //this.exhaust = false; + 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 0000000000..ff38a005da --- /dev/null +++ b/src/main/java/awakenedOne/cards/Nihil.java @@ -0,0 +1,119 @@ +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)); + } + chant(); + } + } + + @Override + public void chant() { + + int times = checkChantEffectBonus(); + for (int i = 0; i < times; i++) { + this.addToBot(new TriggerMarksAction(this)); + } + 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 final AbstractCreature target; + private int count = 0; + private float timer = 0.0F; + + 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 0000000000..e254dee1ef --- /dev/null +++ b/src/main/java/awakenedOne/cards/Peck.java @@ -0,0 +1,38 @@ +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 = 5; + 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() { + upgradeBlock(1); + //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 0000000000..e3b611f0fa --- /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 0000000000..04f991fb7c --- /dev/null +++ b/src/main/java/awakenedOne/cards/Pluck.java @@ -0,0 +1,38 @@ +package awakenedOne.cards; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.cards.tokens.PlumeJab; +import awakenedOne.util.Wiz; +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; + +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 = 2; + isMultiDamage = true; + cardsToPreview = new PlumeJab(); + 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)); + Wiz.makeInHand(new PlumeJab(), 1); + //applyToSelf(new ConjureNextPower(1)); + //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 0000000000..61d2425f6d --- /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 0000000000..15573565d3 --- /dev/null +++ b/src/main/java/awakenedOne/cards/Procession.java @@ -0,0 +1,35 @@ +package awakenedOne.cards; + +import awakenedOne.actions.ProcessionAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.helpers.GameDictionary; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import static awakenedOne.AwakenedOneMod.*; + +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, 1, CardType.SKILL, CardRarity.RARE, CardTarget.SELF); + this.exhaust = true; + loadJokeCardImage(this, makeBetaCardPath(Procession.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + this.addToBot(new ProcessionAction()); + } + + @Override + public void initializeDescription() { + super.initializeDescription(); + this.keywords.add(GameDictionary.VOID.NAMES[0].toLowerCase()); + } + + public void upp() { + //this.exhaust = false; + upgradeBaseCost(0); + //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 0000000000..1a08dde015 --- /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, 1, CardType.ATTACK, CardRarity.COMMON, CardTarget.ENEMY); + baseDamage = 10; + 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 0000000000..6398b7a513 --- /dev/null +++ b/src/main/java/awakenedOne/cards/Psalm.java @@ -0,0 +1,50 @@ +package awakenedOne.cards; + +import awakenedOne.AwakenedOneMod; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +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 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; + isMultiDamage = true; + this.baseMagicNumber = 1; + this.magicNumber = this.baseMagicNumber; + + } + + public void use(AbstractPlayer p, AbstractMonster m) { + this.addToBot(new DamageAllEnemiesAction(p, multiDamage, DamageInfo.DamageType.NORMAL, AbstractGameAction.AttackEffect.FIRE)); + + 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.POISON)); + } + + } + + @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 0000000000..929a98b6fd --- /dev/null +++ b/src/main/java/awakenedOne/cards/RavenStrike.java @@ -0,0 +1,80 @@ +package awakenedOne.cards; + +import awakenedOne.AwakenedOneMod; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.PlayTopCardAction; +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 java.util.Iterator; + +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() { + + int times = checkChantEffectBonus(); + for (int i = 0; i < times; i++) { + addToBot(new AbstractGameAction() { + @Override + public void update() { + isDone = true; + if (!checksoftlock()) { + att(new PlayTopCardAction(AbstractDungeon.getRandomMonster(), false)); + } + } + }); + } + checkOnChant(); + } + + public static boolean checksoftlock(){ + if (!AbstractDungeon.player.drawPile.isEmpty() || AbstractDungeon.actionManager.cardsPlayedThisTurn.size() < 50) { + return false; + } + Iterator var1 = AbstractDungeon.player.discardPile.group.iterator(); + AbstractCard c; + while (var1.hasNext()) { + c = (AbstractCard) var1.next(); + if (!(c instanceof RavenStrike)) { + return false; + } + } + return true; + } + + public void triggerOnGlowCheck() { + this.glowColor = isChantActiveGlow(this) ? GOLD_BORDER_GLOW_COLOR : BLUE_BORDER_GLOW_COLOR; + } + + + @Override + public void upp() { + upgradeDamage(5); + } +} \ 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 0000000000..742b363ec5 --- /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 0000000000..41519300a8 --- /dev/null +++ b/src/main/java/awakenedOne/cards/Recitation.java @@ -0,0 +1,60 @@ +package awakenedOne.cards; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.powers.RisingChantPower; +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.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.vfx.combat.MiracleEffect; + +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.SLASH_DIAGONAL); + if (isTrig_chant()) { + 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)); + } + + int times = checkChantEffectBonus(); + for (int i = 0; i < times; i++) { + dmg(m, AbstractGameAction.AttackEffect.SLASH_DIAGONAL); + } + } + + } + + 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 0000000000..1c39298e98 --- /dev/null +++ b/src/main/java/awakenedOne/cards/RisingChant.java @@ -0,0 +1,27 @@ +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, 2, CardType.POWER, CardRarity.UNCOMMON, CardTarget.SELF); + loadJokeCardImage(this, makeBetaCardPath(RisingChant.class.getSimpleName() + ".png")); + isEthereal = true; + } + + public void use(AbstractPlayer p, AbstractMonster m) { + applyToSelf(new RisingChantPower(1)); + } + + public void upp() { + this.isEthereal = false; + } +} \ 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 0000000000..20b8132670 --- /dev/null +++ b/src/main/java/awakenedOne/cards/Scour.java @@ -0,0 +1,31 @@ +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 + + public Scour() { + super(ID, 1, CardType.ATTACK, CardRarity.COMMON, CardTarget.ENEMY); + baseDamage = 7; + baseMagicNumber = magicNumber = 3; + 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(2); + upgradeMagicNumber(1); + } +} \ 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 0000000000..6f59ed2116 --- /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.UNCOMMON, CardTarget.SELF); + 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 0000000000..68ffd5f442 --- /dev/null +++ b/src/main/java/awakenedOne/cards/Siphon.java @@ -0,0 +1,60 @@ +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 = 9; + 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()) { + + + int times = checkChantEffectBonus(); + for (int i = 0; i < times; i++) { + 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 0000000000..9d3cb9925f --- /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, 7, CardType.SKILL, CardRarity.RARE, CardTarget.SELF); + baseBlock = 18; + 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(6); + // 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 0000000000..aeb341d3b6 --- /dev/null +++ b/src/main/java/awakenedOne/cards/SludgeBomb.java @@ -0,0 +1,57 @@ +package awakenedOne.cards; + +import automaton.cards.goodstatus.IntoTheVoid; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.DamageAllEnemiesAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.DamageInfo; +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.*; + +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.ALL_ENEMY); + baseDamage = 18; + isMultiDamage = true; + loadJokeCardImage(this, makeBetaCardPath(SludgeBomb.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + this.addToBot(new DamageAllEnemiesAction(p, multiDamage, DamageInfo.DamageType.NORMAL, AbstractGameAction.AttackEffect.FIRE)); + AbstractCard toRemove = null; + for (AbstractCard c : AbstractDungeon.player.exhaustPile.group) { + if (c instanceof VoidCard || c instanceof IntoTheVoid) { + 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 -> ((card instanceof VoidCard) || (card instanceof IntoTheVoid)))) { + cantUseMessage = cardStrings.EXTENDED_DESCRIPTION[0]; + return false; + } + return super.canUse(p, m); + } + + @Override + public void initializeDescription() { + super.initializeDescription(); + this.keywords.add(GameDictionary.VOID.NAMES[0].toLowerCase()); + } + + public void upp() { + upgradeDamage(4); + } +} diff --git a/src/main/java/awakenedOne/cards/SongOfSorrow.java b/src/main/java/awakenedOne/cards/SongOfSorrow.java new file mode 100644 index 0000000000..c09fbfab1c --- /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 0000000000..1f6f7de4c8 --- /dev/null +++ b/src/main/java/awakenedOne/cards/SoulStrike.java @@ -0,0 +1,81 @@ +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 hermit.actions.SoundAction; + +import java.util.Iterator; + +import static awakenedOne.AwakenedOneMod.*; + +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 = 4; + 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++) { + this.addToBot(new SoundAction(makeID("SOULSTRIKE"))); + dmg(m, AbstractGameAction.AttackEffect.FIRE); + } + } + + 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 0000000000..4ea3e4ebcc --- /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 0000000000..ee07b4608f --- /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 0000000000..7064225bbc --- /dev/null +++ b/src/main/java/awakenedOne/cards/Spew.java @@ -0,0 +1,58 @@ +package awakenedOne.cards; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.patches.OnLoseEnergyPowerPatch; +import awakenedOne.powers.OnLoseEnergyPower; +import awakenedOne.relics.OnLoseEnergyRelic; +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.AbstractPower; +import com.megacrit.cardcrawl.relics.AbstractRelic; + +import static awakenedOne.AwakenedOneMod.loadJokeCardImage; +import static awakenedOne.AwakenedOneMod.makeBetaCardPath; + +public class Spew extends AbstractAwakenedCard { + public final static String ID = AwakenedOneMod.makeID(Spew.class.getSimpleName()); + private static final int COST = 1; + + public Spew() { + super(ID, COST, CardType.ATTACK, CardRarity.COMMON, CardTarget.ENEMY); + baseDamage = 6; + loadJokeCardImage(this, makeBetaCardPath(Spew.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + dmg(m, AbstractGameAction.AttackEffect.POISON); + if (this.costForTurn > 0 && !this.freeToPlay() && !this.freeToPlayOnce) { + OnLoseEnergyPowerPatch.EnergyLostThisCombat = OnLoseEnergyPowerPatch.EnergyLostThisCombat + this.costForTurn; + for (AbstractPower playerPower : AbstractDungeon.player.powers) { + if (playerPower instanceof OnLoseEnergyPower) { + ((OnLoseEnergyPower) playerPower).LoseEnergyAction(this.costForTurn); + } + } + for (AbstractRelic relic : AbstractDungeon.player.relics) { + if (relic instanceof OnLoseEnergyRelic) { + ((OnLoseEnergyRelic) relic).LoseEnergyAction(this.costForTurn); + } + } + for (AbstractMonster m2 : AbstractDungeon.getMonsters().monsters) { + if (!m2.isDead && !m2.isDying) { + for (AbstractPower power : m2.powers) { + if (power instanceof OnLoseEnergyPower) { + ((OnLoseEnergyPower) power).LoseEnergyAction(this.costForTurn); + } + } + } + } + } + } + + + @Override + public void upp() { + upgradeDamage(3); + } +} \ 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 0000000000..9f15c1e9ec --- /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 = 5; + 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/StormRuler.java b/src/main/java/awakenedOne/cards/StormRuler.java new file mode 100644 index 0000000000..ffa1c2c117 --- /dev/null +++ b/src/main/java/awakenedOne/cards/StormRuler.java @@ -0,0 +1,35 @@ +package awakenedOne.cards; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.actions.ConjureAction; +import awakenedOne.powers.GrimoirePower; +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.atb; + +public class StormRuler extends AbstractAwakenedCard { + public final static String ID = makeID(StormRuler.class.getSimpleName()); + // intellij stuff attack, enemy, uncommon, 9, 1, , , 3, 1 + + public StormRuler() { + super(ID, 1, CardType.POWER, CardRarity.UNCOMMON, CardTarget.SELF); + this.tags.add(AwakenedOneMod.DELVE); + baseMagicNumber = magicNumber = 6; + loadJokeCardImage(this, makeBetaCardPath(StormRuler.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + // Wiz.makeInHand(new Thunderbolt()); + atb(new ConjureAction(false)); + applyToSelf(new GrimoirePower(magicNumber)); + + } + + public void upp() { + //upgradeDamage(2); + upgradeMagicNumber(3); + } +} \ 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 0000000000..66b5770806 --- /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 0000000000..c472df0bde --- /dev/null +++ b/src/main/java/awakenedOne/cards/TakeFlight.java @@ -0,0 +1,50 @@ +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() { + + int times = checkChantEffectBonus(); + for (int i = 0; i < times; i++) { + 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(3); + } +} \ 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 0000000000..a216363643 --- /dev/null +++ b/src/main/java/awakenedOne/cards/TalonRake.java @@ -0,0 +1,40 @@ +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.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))); + dmg(m, AbstractGameAction.AttackEffect.FIRE); + this.addToBot(new VFXAction(new RipAndTearEffect(m.hb.cX, m.hb.cY, Color.CYAN.cpy(), Color.WHITE))); + dmg(m, AbstractGameAction.AttackEffect.FIRE); + } + atb(new ConjureAction(false)); + } + + + public void upp() { + upgradeDamage(3); + } +} \ 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 0000000000..10c1405379 --- /dev/null +++ b/src/main/java/awakenedOne/cards/Thaumaturgy.java @@ -0,0 +1,34 @@ +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; + +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; + baseSecondMagic = secondMagic = 1; + cardsToPreview = new Ceremony(); + loadJokeCardImage(this, makeBetaCardPath(Thaumaturgy.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + applyToSelf(new DexterityPower(p, secondMagic)); + applyToSelf(new ThaumaturgyPower(magicNumber)); + } + + public void upp() { + upgradeSecondMagic(1); + //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 0000000000..ffed7881c0 --- /dev/null +++ b/src/main/java/awakenedOne/cards/TheTower.java @@ -0,0 +1,72 @@ +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 = 2; + this.baseMagicNumber = 2; + this.magicNumber = this.baseMagicNumber; + this.isMultiDamage = true; + 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() { + upgradeDamage(1); + 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 0000000000..fa4c91e7df --- /dev/null +++ b/src/main/java/awakenedOne/cards/Unleash.java @@ -0,0 +1,45 @@ +package awakenedOne.cards; + +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 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 += magicNumber * (AbstractDungeon.player.hand.size() - 1); + super.calculateCardDamage(mo); + this.baseDamage = realBaseDamage; + this.isDamageModified = this.damage != this.baseDamage; + } + + public void applyPowers() { + int realBaseDamage = this.baseDamage; + this.baseDamage += magicNumber * (AbstractDungeon.player.hand.size() - 1); + super.applyPowers(); + this.baseDamage = realBaseDamage; + this.isDamageModified = this.damage != this.baseDamage; + } + + public void upp() { + upgradeMagicNumber(1); + // upgradeDamage(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 0000000000..f7f4a5b2a8 --- /dev/null +++ b/src/main/java/awakenedOne/cards/Victuals.java @@ -0,0 +1,45 @@ +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() { + int times = checkChantEffectBonus(); + for (int i = 0; i < times; i++) { + 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 0000000000..887715e5fd --- /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 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); + baseSecondMagic = secondMagic = 4; + baseBlock = 12; + this.exhaust = true; + loadJokeCardImage(this, makeBetaCardPath(WaveOfMiasma.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + blck(); + Wiz.forAllMonstersLiving(q -> { + Wiz.applyToEnemy(q, new ManaburnPower(q, secondMagic)); + }); + } + + public void upp() { + //upgradeMagicNumber(2); + upgradeBlock(3); + upgradeSecondMagic(2); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/altDimension/Crusher.java b/src/main/java/awakenedOne/cards/altDimension/Crusher.java new file mode 100644 index 0000000000..795c80b983 --- /dev/null +++ b/src/main/java/awakenedOne/cards/altDimension/Crusher.java @@ -0,0 +1,66 @@ +package awakenedOne.cards.altDimension; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.cards.AbstractAwakenedCard; +import awakenedOne.util.onGenerateCardMidcombatInterface; +import basemod.patches.com.megacrit.cardcrawl.dungeons.AbstractDungeon.NoPools; +import basemod.patches.com.megacrit.cardcrawl.screens.compendium.CardLibraryScreen.NoCompendium; +import com.badlogic.gdx.graphics.Color; +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.monsters.AbstractMonster; +import com.megacrit.cardcrawl.vfx.combat.WeightyImpactEffect; +import hermit.util.Wiz; +import sneckomod.SneckoMod; + +@NoCompendium +@NoPools +public class Crusher extends AbstractAwakenedCard implements onGenerateCardMidcombatInterface { + public final static String ID = AwakenedOneMod.makeID(Crusher.class.getSimpleName()); + + private static final int COST = 5; + public boolean enabled = false; + + public Crusher() { + super(ID, COST, CardRarity.SPECIAL, CardType.ATTACK, CardTarget.ENEMY); + baseDamage = 25; + selfRetain = true; + frameString = "grift"; + tags.add(CardTags.HEALING); + this.setBackgroundTexture("awakenedResources/images/512/dimension/" + frameString + "/" + getTypeName() + ".png", "awakenedResources/images/1024/dimension/" + frameString + "/" + getTypeName() + ".png"); + + this.tags.add(SneckoMod.BANNEDFORSNECKO); + } + + @Override + public void onCreateCard(AbstractCard card) { + if (enabled) { + if (card != this && Wiz.p().hand.group.contains(this)) { + if (Wiz.getLogicalCardCost(this) > 0) { + modifyCostForCombat(-1); + this.flash(Color.GREEN.cpy()); + } + } + } + } + + + public void use(AbstractPlayer p, AbstractMonster m) { + this.addToBot(new VFXAction(new WeightyImpactEffect(m.hb.cX, m.hb.cY), 0.4F)); + dmg(m, AbstractGameAction.AttackEffect.BLUNT_HEAVY); + Wiz.atb(new AbstractGameAction() { + @Override + public void update() { + Crusher.this.modifyCostForCombat(COST - Crusher.this.cost); + Crusher.this.isCostModified = false; + isDone = true; + } + }); + } + + public void upp() { + upgradeDamage(5); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/altDimension/Daggerstorm.java b/src/main/java/awakenedOne/cards/altDimension/Daggerstorm.java new file mode 100644 index 0000000000..6083cf035f --- /dev/null +++ b/src/main/java/awakenedOne/cards/altDimension/Daggerstorm.java @@ -0,0 +1,39 @@ +package awakenedOne.cards.altDimension; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.cards.AbstractAwakenedCard; +import awakenedOne.powers.DaggerstormPower; +import basemod.patches.com.megacrit.cardcrawl.dungeons.AbstractDungeon.NoPools; +import basemod.patches.com.megacrit.cardcrawl.screens.compendium.CardLibraryScreen.NoCompendium; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import sneckomod.SneckoMod; + +import static awakenedOne.util.Wiz.applyToSelf; + + +@NoCompendium +@NoPools +public class Daggerstorm extends AbstractAwakenedCard { + public final static String ID = AwakenedOneMod.makeID(Daggerstorm.class.getSimpleName()); + + public Daggerstorm() { + super(ID, 2, CardRarity.SPECIAL, CardType.POWER, CardTarget.SELF); + baseMagicNumber = magicNumber = 4; + tags.add(CardTags.HEALING); + + frameString = "roguebook"; + this.setBackgroundTexture("awakenedResources/images/512/dimension/" + frameString + "/" + getTypeName() + ".png", "awakenedResources/images/1024/dimension/" + frameString + "/" + getTypeName() + ".png"); + + this.tags.add(SneckoMod.BANNEDFORSNECKO); + } + + + public void use(AbstractPlayer p, AbstractMonster m) { + applyToSelf(new DaggerstormPower(magicNumber)); + } + + public void upp() { + upgradeMagicNumber(2); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/altDimension/ManaShield.java b/src/main/java/awakenedOne/cards/altDimension/ManaShield.java new file mode 100644 index 0000000000..07d79bfdb8 --- /dev/null +++ b/src/main/java/awakenedOne/cards/altDimension/ManaShield.java @@ -0,0 +1,60 @@ +package awakenedOne.cards.altDimension; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.actions.ConjureAction; +import awakenedOne.cards.AbstractAwakenedCard; +import awakenedOne.cards.tokens.spells.AbstractSpellCard; +import basemod.patches.com.megacrit.cardcrawl.dungeons.AbstractDungeon.NoPools; +import basemod.patches.com.megacrit.cardcrawl.screens.compendium.CardLibraryScreen.NoCompendium; +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 sneckomod.SneckoMod; + +import java.util.ArrayList; +import java.util.Collections; + +import static awakenedOne.util.Wiz.atb; + +@NoCompendium +@NoPools +public class ManaShield extends AbstractAwakenedCard { + public final static String ID = AwakenedOneMod.makeID(ManaShield.class.getSimpleName()); + + public ManaShield() { + super(ID, 2, CardRarity.SPECIAL, CardType.SKILL, CardTarget.SELF); + baseBlock = 14; + tags.add(CardTags.HEALING); + + frameString = "gordian"; + this.setBackgroundTexture("awakenedResources/images/512/dimension/" + frameString + "/" + getTypeName() + ".png", "awakenedResources/images/1024/dimension/" + frameString + "/" + getTypeName() + ".png"); + + this.tags.add(SneckoMod.BANNEDFORSNECKO); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + blck(); + atb(new ConjureAction(false)); + addToBot(new AbstractGameAction() { + @Override + public void update() { + isDone = true; + ArrayList handcopy = new ArrayList<>(); + handcopy.addAll(AbstractDungeon.player.hand.group); + Collections.shuffle(handcopy); + for (AbstractCard c : handcopy) { + if (c instanceof AbstractSpellCard) { + c.modifyCostForCombat(-1); + return; + } + } + } + }); + } + + public void upp() { + upgradeBlock(4); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/altDimension/Mantis.java b/src/main/java/awakenedOne/cards/altDimension/Mantis.java new file mode 100644 index 0000000000..1ea3c7a51a --- /dev/null +++ b/src/main/java/awakenedOne/cards/altDimension/Mantis.java @@ -0,0 +1,41 @@ +package awakenedOne.cards.altDimension; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.cards.AbstractAwakenedCard; +import awakenedOne.cards.tokens.PlumeJab; +import awakenedOne.util.Wiz; +import basemod.patches.com.megacrit.cardcrawl.dungeons.AbstractDungeon.NoPools; +import basemod.patches.com.megacrit.cardcrawl.screens.compendium.CardLibraryScreen.NoCompendium; +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 sneckomod.SneckoMod; + +@NoCompendium +@NoPools +public class Mantis extends AbstractAwakenedCard { + public final static String ID = AwakenedOneMod.makeID(Mantis.class.getSimpleName()); + + public Mantis() { + super(ID, 1, CardRarity.SPECIAL, CardType.SKILL, CardTarget.SELF); + baseMagicNumber = magicNumber = 2; + frameString = "inscryp"; + tags.add(CardTags.HEALING); + this.setBackgroundTexture("awakenedResources/images/512/dimension/" + frameString + "/" + getTypeName() + ".png", "awakenedResources/images/1024/dimension/" + frameString + "/" + getTypeName() + ".png"); + cardsToPreview = new PlumeJab(); + this.tags.add(SneckoMod.BANNEDFORSNECKO); + } + + + public void use(AbstractPlayer p, AbstractMonster m) { + + this.addToBot(new ApplyPowerAction(p, p, new StrengthPower(p, this.magicNumber), this.magicNumber)); + Wiz.makeInHand(new PlumeJab(), 1); + + } + + public void upp() { + upgradeMagicNumber(1); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/altDimension/Minniegun.java b/src/main/java/awakenedOne/cards/altDimension/Minniegun.java new file mode 100644 index 0000000000..62547cf98b --- /dev/null +++ b/src/main/java/awakenedOne/cards/altDimension/Minniegun.java @@ -0,0 +1,45 @@ +package awakenedOne.cards.altDimension; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.cards.AbstractAwakenedCard; +import basemod.patches.com.megacrit.cardcrawl.dungeons.AbstractDungeon.NoPools; +import basemod.patches.com.megacrit.cardcrawl.screens.compendium.CardLibraryScreen.NoCompendium; +import com.megacrit.cardcrawl.actions.common.MakeTempCardInDrawPileAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.status.VoidCard; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import hermit.patches.EnumPatch; +import hermit.util.Wiz; +import sneckomod.SneckoMod; + +@NoCompendium +@NoPools +public class Minniegun extends AbstractAwakenedCard { + public final static String ID = AwakenedOneMod.makeID(Minniegun.class.getSimpleName()); + // intellij stuff attack, enemy, basic, 6, 3, , , , + + public Minniegun() { + super(ID, 2, CardRarity.SPECIAL, AbstractCard.CardType.ATTACK, CardTarget.ENEMY); + baseDamage = 2; + baseMagicNumber = magicNumber = 5; + tags.add(CardTags.HEALING); + + frameString = "eden"; + this.setBackgroundTexture("awakenedResources/images/512/dimension/" + frameString + "/" + getTypeName() + ".png", "awakenedResources/images/1024/dimension/" + frameString + "/" + getTypeName() + ".png"); + + this.tags.add(SneckoMod.BANNEDFORSNECKO); + } + + + public void use(AbstractPlayer p, AbstractMonster m) { + for (int i = 0; i < magicNumber; i++) { + dmg(m, EnumPatch.HERMIT_GUN3); + } + Wiz.atb(new MakeTempCardInDrawPileAction(new VoidCard(), 1, true, true)); + } + + public void upp() { + upgradeMagicNumber(1); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/altDimension/RealityRift.java b/src/main/java/awakenedOne/cards/altDimension/RealityRift.java new file mode 100644 index 0000000000..0b0283d9e5 --- /dev/null +++ b/src/main/java/awakenedOne/cards/altDimension/RealityRift.java @@ -0,0 +1,63 @@ +package awakenedOne.cards.altDimension; + +import awakenedOne.actions.GetDimensionCardsAction; +import awakenedOne.cards.AbstractAwakenedCard; +import basemod.patches.com.megacrit.cardcrawl.dungeons.AbstractDungeon.NoPools; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.MakeTempCardInDiscardAction; +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.helpers.GameDictionary; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import hermit.util.Wiz; +import sneckomod.SneckoMod; + +import static awakenedOne.AwakenedOneMod.*; + +@NoPools +public class RealityRift extends AbstractAwakenedCard { + public final static String ID = makeID(RealityRift.class.getSimpleName()); + // intellij stuff skill, self, basic, , , 5, 3, , + + public RealityRift() { + super(ID, 0, CardType.SKILL, CardRarity.SPECIAL, CardTarget.SELF, CardColor.COLORLESS); + loadJokeCardImage(this, makeBetaCardPath(RealityRift.class.getSimpleName() + ".png")); + exhaust = true; + baseMagicNumber = magicNumber = 3; + baseSecondMagic = secondMagic = 1; + this.tags.add(SneckoMod.BANNEDFORSNECKO); + tags.add(CardTags.HEALING); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + + Wiz.atb(new GetDimensionCardsAction(magicNumber, secondMagic)); + addToBot(new MakeTempCardInDiscardAction(new VoidCard(), 2)); + addToBot(new AbstractGameAction() { + @Override + public void update() { + isDone = true; + + for (AbstractCard c : AbstractDungeon.player.hand.group) { + if (c instanceof Crusher) { + ((Crusher) c).enabled = true; + return; + } + } + } + }); + } + + @Override + public void initializeDescription() { + super.initializeDescription(); + this.keywords.add(GameDictionary.VOID.NAMES[0].toLowerCase()); + } + + public void upp() { + upgradeMagicNumber(2); + // upgradeSecondMagic(1); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/altDimension/Scheme.java b/src/main/java/awakenedOne/cards/altDimension/Scheme.java new file mode 100644 index 0000000000..8f9aec74ec --- /dev/null +++ b/src/main/java/awakenedOne/cards/altDimension/Scheme.java @@ -0,0 +1,42 @@ +package awakenedOne.cards.altDimension; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.cards.AbstractAwakenedCard; +import awakenedOne.powers.SchemePower; +import basemod.patches.com.megacrit.cardcrawl.dungeons.AbstractDungeon.NoPools; +import basemod.patches.com.megacrit.cardcrawl.screens.compendium.CardLibraryScreen.NoCompendium; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import hermit.util.Wiz; +import sneckomod.SneckoMod; + +@NoCompendium +@NoPools +public class Scheme extends AbstractAwakenedCard { + public final static String ID = AwakenedOneMod.makeID(Scheme.class.getSimpleName()); + + public Scheme() { + + super(ID, 1, CardRarity.SPECIAL, CardType.SKILL, CardTarget.SELF); + baseMagicNumber = magicNumber = 1; + tags.add(CardTags.HEALING); + + + frameString = "vault"; + this.setBackgroundTexture("awakenedResources/images/512/dimension/" + frameString + "/" + getTypeName() + ".png", "awakenedResources/images/1024/dimension/" + frameString + "/" + getTypeName() + ".png"); + + this.tags.add(SneckoMod.BANNEDFORSNECKO); + + } + + + public void use(AbstractPlayer p, AbstractMonster m) { + Wiz.applyToSelf(new SchemePower(magicNumber)); + + } + + public void upp() { + upgradeMagicNumber(1); + + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/altDimension/SignInBlood.java b/src/main/java/awakenedOne/cards/altDimension/SignInBlood.java new file mode 100644 index 0000000000..d6ebf37c27 --- /dev/null +++ b/src/main/java/awakenedOne/cards/altDimension/SignInBlood.java @@ -0,0 +1,48 @@ +package awakenedOne.cards.altDimension; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.cards.AbstractAwakenedCard; +import basemod.patches.com.megacrit.cardcrawl.dungeons.AbstractDungeon.NoPools; +import basemod.patches.com.megacrit.cardcrawl.screens.compendium.CardLibraryScreen.NoCompendium; +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.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.StrengthPower; +import hermit.util.Wiz; +import sneckomod.SneckoMod; + +@NoCompendium +@NoPools +public class SignInBlood extends AbstractAwakenedCard { + public final static String ID = AwakenedOneMod.makeID(SignInBlood.class.getSimpleName()); + + public SignInBlood() { + super(ID, 0, CardRarity.SPECIAL, CardType.SKILL, CardTarget.SELF); + baseSecondMagic = secondMagic = 2; + baseMagicNumber = magicNumber = 3; + tags.add(CardTags.HEALING); + + exhaust = true; + frameString = "towertactics"; + this.setBackgroundTexture("awakenedResources/images/512/dimension/" + frameString + "/" + getTypeName() + ".png", "awakenedResources/images/1024/dimension/" + frameString + "/" + getTypeName() + ".png"); + + this.tags.add(SneckoMod.BANNEDFORSNECKO); + } + + + public void use(AbstractPlayer p, AbstractMonster m) { + this.addToTop(new DamageAction(AbstractDungeon.player, new DamageInfo(AbstractDungeon.player, secondMagic, DamageInfo.DamageType.THORNS), AbstractGameAction.AttackEffect.FIRE)); + Wiz.atb(new DrawCardAction(this.magicNumber)); + this.addToBot(new ApplyPowerAction(p, p, new StrengthPower(p, secondMagic), secondMagic)); + //this.addToBot(new ApplyPowerAction(p, p, new LoseStrengthPower(p, this.magicNumber), this.magicNumber)); + } + + public void upp() { + upgradeMagicNumber(1); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/altDimension/SpreadingSpores.java b/src/main/java/awakenedOne/cards/altDimension/SpreadingSpores.java new file mode 100644 index 0000000000..7f41ec97ee --- /dev/null +++ b/src/main/java/awakenedOne/cards/altDimension/SpreadingSpores.java @@ -0,0 +1,39 @@ +package awakenedOne.cards.altDimension; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.cards.AbstractAwakenedCard; +import basemod.patches.com.megacrit.cardcrawl.dungeons.AbstractDungeon.NoPools; +import basemod.patches.com.megacrit.cardcrawl.screens.compendium.CardLibraryScreen.NoCompendium; +import com.megacrit.cardcrawl.actions.common.MakeTempCardInDrawPileAction; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.ThornsPower; +import hermit.util.Wiz; +import sneckomod.SneckoMod; + +@NoCompendium +@NoPools +public class SpreadingSpores extends AbstractAwakenedCard { + public final static String ID = AwakenedOneMod.makeID(SpreadingSpores.class.getSimpleName()); + + public SpreadingSpores() { + super(ID, 0, CardRarity.SPECIAL, CardType.POWER, CardTarget.SELF); + baseMagicNumber = magicNumber = 2; + tags.add(CardTags.HEALING); + isEthereal = true; + + frameString = "train"; + this.setBackgroundTexture("awakenedResources/images/512/dimension/" + frameString + "/" + getTypeName() + ".png", "awakenedResources/images/1024/dimension/" + frameString + "/" + getTypeName() + ".png"); + + this.tags.add(SneckoMod.BANNEDFORSNECKO); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + Wiz.applyToSelf(new ThornsPower(p, magicNumber)); + Wiz.atb(new MakeTempCardInDrawPileAction(this.makeStatEquivalentCopy(), 1, true, true)); + } + + public void upp() { + upgradeMagicNumber(2); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/cards/altDimension/TheEncyclopedia.java b/src/main/java/awakenedOne/cards/altDimension/TheEncyclopedia.java new file mode 100644 index 0000000000..18032783b5 --- /dev/null +++ b/src/main/java/awakenedOne/cards/altDimension/TheEncyclopedia.java @@ -0,0 +1,40 @@ +package awakenedOne.cards.altDimension; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.actions.EncyclopediaAction; +import awakenedOne.cards.AbstractAwakenedCard; +import basemod.patches.com.megacrit.cardcrawl.dungeons.AbstractDungeon.NoPools; +import basemod.patches.com.megacrit.cardcrawl.screens.compendium.CardLibraryScreen.NoCompendium; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import hermit.util.Wiz; +import sneckomod.SneckoMod; + +@NoCompendium +@NoPools +public class TheEncyclopedia extends AbstractAwakenedCard { + public final static String ID = AwakenedOneMod.makeID(TheEncyclopedia.class.getSimpleName()); + + public TheEncyclopedia() { + super(ID, 2, CardRarity.SPECIAL, CardType.SKILL, CardTarget.SELF); + exhaust = true; + baseMagicNumber = magicNumber = 4; + tags.add(CardTags.HEALING); + + frameString = "obelisk"; + this.setBackgroundTexture("awakenedResources/images/512/dimension/" + frameString + "/" + getTypeName() + ".png", "awakenedResources/images/1024/dimension/" + frameString + "/" + getTypeName() + ".png"); + + this.tags.add(SneckoMod.BANNEDFORSNECKO); + } + + + public void use(AbstractPlayer p, AbstractMonster m) { + Wiz.atb(new EncyclopediaAction(magicNumber, cardStrings.EXTENDED_DESCRIPTION[0])); + } + + public void upp() { + upgradeMagicNumber(2); + + } + +} \ 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 0000000000..4af72ed78a --- /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 0000000000..34de38c528 --- /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 0000000000..0c4da3e475 --- /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 0000000000..ecfa4b7c18 --- /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 0000000000..1186548752 --- /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 0000000000..745b5c0b66 --- /dev/null +++ b/src/main/java/awakenedOne/cards/tokens/PlumeJab.java @@ -0,0 +1,33 @@ +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; + exhaust = true; + selfRetain = true; + 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 0000000000..84b14f87e0 --- /dev/null +++ b/src/main/java/awakenedOne/cards/tokens/spells/AbstractSpellCard.java @@ -0,0 +1,84 @@ +package awakenedOne.cards.tokens.spells; + +import awakenedOne.cards.AbstractAwakenedCard; +import awakenedOne.powers.MoonlitVisionPower; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +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; +// } +// } + + public void triggerOnGlowCheck() { + if (AbstractDungeon.player.hasPower(MoonlitVisionPower.POWER_ID)) { + + if (((MoonlitVisionPower) AbstractDungeon.player.getPower(MoonlitVisionPower.POWER_ID)).amount2 > 0) { + this.glowColor = GOLD_BORDER_GLOW_COLOR; + return; + } + } + this.glowColor = BLUE_BORDER_GLOW_COLOR; + } + + @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 0000000000..6e13069718 --- /dev/null +++ b/src/main/java/awakenedOne/cards/tokens/spells/AphoticShield.java @@ -0,0 +1,38 @@ +package awakenedOne.cards.tokens.spells; + +import basemod.patches.com.megacrit.cardcrawl.screens.compendium.CardLibraryScreen.NoCompendium; +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.*; + +@NoCompendium + +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 0000000000..fde5ea0034 --- /dev/null +++ b/src/main/java/awakenedOne/cards/tokens/spells/BurningStudy.java @@ -0,0 +1,39 @@ +package awakenedOne.cards.tokens.spells; + +import awakenedOne.effects.InflameNoSound; +import awakenedOne.util.Wiz; +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.powers.WeakPower; +import hermit.actions.SoundAction; + +import static awakenedOne.AwakenedOneMod.*; +import static awakenedOne.util.Wiz.applyToEnemy; +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.SKILL, CardTarget.ALL_ENEMY); + baseMagicNumber = magicNumber = 1; + baseSecondMagic = secondMagic = 1; + 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) { + this.addToTop(new SoundAction(makeID("FIRESPELL"))); + this.addToBot(new VFXAction(p, new InflameNoSound(p), 1.0F)); + applyToSelf(new StrengthPower(p, magicNumber)); + Wiz.forAllMonstersLiving(q -> applyToEnemy(q, new WeakPower(q, secondMagic, false))); + } + + public void upp() { + upgradeMagicNumber(1); + upgradeSecondMagic(1); + } +} \ 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 0000000000..5ee3bce425 --- /dev/null +++ b/src/main/java/awakenedOne/cards/tokens/spells/Cryostasis.java @@ -0,0 +1,35 @@ +package awakenedOne.cards.tokens.spells; + +import awakenedOne.powers.AphoticFountPower; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.vfx.combat.FrostOrbActivateEffect; +import hermit.actions.SoundAction; + +import static awakenedOne.AwakenedOneMod.*; + +public class Cryostasis extends AbstractSpellCard { + public final static String ID = makeID(Cryostasis.class.getSimpleName()); + + public Cryostasis() { + super(ID, 1, CardType.SKILL, CardTarget.SELF); + baseBlock = 10; + this.setBackgroundTexture("awakenedResources/images/512/bg_skill_awakened.png", "awakenedResources/images/1024/bg_skill_awakened.png"); + loadJokeCardImage(this, makeBetaCardPath(Cryostasis.class.getSimpleName() + ".png")); + } + + public void use(AbstractPlayer p, AbstractMonster m) { + this.addToTop(new SoundAction(makeID("ICESPELL"))); + AbstractDungeon.effectsQueue.add(new FrostOrbActivateEffect(p.hb.cX, p.hb.cY)); + blck(); + + if (AbstractDungeon.player.hasPower(AphoticFountPower.POWER_ID)) { + AbstractDungeon.player.getPower(AphoticFountPower.POWER_ID).onSpecificTrigger(); + } + } + + public void upp() { + upgradeBlock(3); + } +} \ 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 0000000000..21d0fdf8f5 --- /dev/null +++ b/src/main/java/awakenedOne/cards/tokens/spells/Darkleech.java @@ -0,0 +1,63 @@ +package awakenedOne.cards.tokens.spells; + +import awakenedOne.powers.ManaburnPower; +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 hermit.actions.SoundAction; + +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 = 1; + baseSecondMagic = secondMagic = 4; + 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) { + this.addToTop(new SoundAction(makeID("DARKSPELL"))); + 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)); + this.addToBot(new ApplyPowerAction(m, p, new ManaburnPower(m, this.secondMagic), this.secondMagic)); + } 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)); + this.addToBot(new ApplyPowerAction(mo, p, new ManaburnPower(mo, this.secondMagic), this.secondMagic)); + } + } + + } + + public void upp() { + upgradeSecondMagic(2); + upgradeMagicNumber(1); + } +} \ 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 0000000000..e5a666c631 --- /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 0000000000..2e4e7cd5fe --- /dev/null +++ b/src/main/java/awakenedOne/cards/tokens/spells/Thunderbolt.java @@ -0,0 +1,67 @@ +package awakenedOne.cards.tokens.spells; + +import awakenedOne.powers.GrimoirePower; +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 hermit.actions.SoundAction; + +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")); + if (CardCrawlGame.isInARun()) { + if (AbstractDungeon.player.hasRelic(EyeOfTheOccult.ID)) { + isMultiDamage = true; + } + } + } + + @Override + public void applyPowers() { + super.applyPowers(); + if (AbstractDungeon.player.hasRelic(EyeOfTheOccult.ID)) { + target = CardTarget.ALL_ENEMY; + } + } + + public void use(AbstractPlayer p, AbstractMonster m) { + this.addToTop(new SoundAction(makeID("THUNDERSPELL"))); + if (!AbstractDungeon.player.hasRelic(EyeOfTheOccult.ID)) { + vfx(new LightningEffect(m.hb.cX, m.hb.cY)); + dmg(m, AbstractGameAction.AttackEffect.NONE); + } else { + this.addToBot(new VFXAction(new ReaperEffect())); + this.addToBot(new DamageAllEnemiesAction(p, this.multiDamage, this.damageTypeForTurn, AbstractGameAction.AttackEffect.NONE)); + } + + } + + public float calculateModifiedCardDamage(AbstractPlayer player, AbstractMonster mo, float tmp) { + int bonus = 0; + if (player.hasPower(GrimoirePower.POWER_ID)) { + bonus = player.getPower(GrimoirePower.POWER_ID).amount; + } + return tmp + bonus; + } + + + public void upp() { + upgradeDamage(6); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/effects/InflameNoSound.java b/src/main/java/awakenedOne/effects/InflameNoSound.java new file mode 100644 index 0000000000..b1b657cde7 --- /dev/null +++ b/src/main/java/awakenedOne/effects/InflameNoSound.java @@ -0,0 +1,43 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package awakenedOne.effects; + +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.vfx.AbstractGameEffect; +import com.megacrit.cardcrawl.vfx.ExhaustEmberEffect; +import com.megacrit.cardcrawl.vfx.combat.FlameParticleEffect; + +public class InflameNoSound extends AbstractGameEffect { + float x; + float y; + + public InflameNoSound(AbstractCreature creature) { + this.x = creature.hb.cX; + this.y = creature.hb.cY; + } + + public void update() { + + int i; + for (i = 0; i < 75; ++i) { + AbstractDungeon.effectsQueue.add(new FlameParticleEffect(this.x, this.y)); + } + + for (i = 0; i < 20; ++i) { + AbstractDungeon.effectsQueue.add(new ExhaustEmberEffect(this.x, this.y)); + } + + this.isDone = true; + } + + public void render(SpriteBatch sb) { + } + + public void dispose() { + } +} diff --git a/src/main/java/awakenedOne/effects/IroncladVictoryFlameEffectBlue.java b/src/main/java/awakenedOne/effects/IroncladVictoryFlameEffectBlue.java new file mode 100644 index 0000000000..b64f96aee3 --- /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 final float vX; + private final float vY; + private final boolean flipX = MathUtils.randomBoolean(); + private final TextureAtlas.AtlasRegion img; + private float x; + private float y; + + 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 0000000000..e37572d81b --- /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 final TextureAtlas.AtlasRegion img; + private float x; + private float y; + private float tScale; + + 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/AbyssEvent.java b/src/main/java/awakenedOne/events/AbyssEvent.java new file mode 100644 index 0000000000..092e69a953 --- /dev/null +++ b/src/main/java/awakenedOne/events/AbyssEvent.java @@ -0,0 +1,78 @@ +package awakenedOne.events; + +import awakenedOne.cards.altDimension.RealityRift; +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.localization.EventStrings; +import com.megacrit.cardcrawl.vfx.cardManip.ShowCardAndObtainEffect; +import downfall.cards.curses.Aged; + +import java.util.ArrayList; + +public class AbyssEvent extends AbstractImageEvent { + public static final String ID = "awakened:AbyssEvent"; + 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 screenNum = 0; + private final boolean pickCard = false; + private final int hpCost = 5; + private final int hpSpent = 0; + private final ArrayList cardsTeched = new ArrayList<>(); + private int prideGained; + + public AbyssEvent() { + super(NAME, DESCRIPTIONS[0], "champResources/images/events/book.png"); + + + this.imageEventText.setDialogOption(OPTIONS[0], new RealityRift()); + this.imageEventText.setDialogOption(OPTIONS[1]); + + } + + + protected void buttonEffect(int buttonPressed) { + switch (this.screenNum) { + case 0: + switch (buttonPressed) { + case 0: + this.screenNum = 1; + this.imageEventText.updateBodyText(DESCRIPTIONS[1]); + AbstractCard card = new RealityRift(); + AbstractDungeon.effectList.add(new ShowCardAndObtainEffect(card, (float) (Settings.WIDTH * .33), (float) (Settings.HEIGHT / 2))); + card = new Aged(); + AbstractDungeon.effectList.add(new ShowCardAndObtainEffect(card, (float) (Settings.WIDTH * .66), (float) (Settings.HEIGHT / 2))); + + this.imageEventText.updateDialogOption(0, OPTIONS[2]); + + this.imageEventText.clearRemainingOptions(); + return; + case 1: + this.screenNum = 1; + this.imageEventText.updateBodyText(DESCRIPTIONS[2]); + + this.imageEventText.updateDialogOption(0, OPTIONS[2]); + + this.imageEventText.clearRemainingOptions(); + return; + } + case 1: + + this.openMap(); + } + + } + +} diff --git a/src/main/java/awakenedOne/events/BackToBasicsAwakened.java b/src/main/java/awakenedOne/events/BackToBasicsAwakened.java new file mode 100644 index 0000000000..613e82e7d5 --- /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 final List cardsUpgraded; + private final ArrayList cardsToRemove; + private BackToBasicsAwakened.CUR_SCREEN screen; + + 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 0000000000..3933a2da5e --- /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); + AbstractDungeon.combatRewardScreen.open(); + this.imageEventText.updateBodyText(DESCRIPTIONS[4]); + this.imageEventText.clearAllDialogs(); + this.imageEventText.updateDialogOption(0, OPTIONS[7]); + 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 0000000000..bdfabd1e6c --- /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:WingStatueAwakened"; + 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 = 7; + } else { + this.damage = 5; + } + + this.imageEventText.setDialogOption(OPTIONS[0], new ShatteredFragment()); + this.imageEventText.setDialogOption(OPTIONS[1] + this.damage + OPTIONS[3], new BrokenWingStatue()); + this.imageEventText.setDialogOption(OPTIONS[2]); + } + + protected void buttonEffect(int buttonPressed) { + switch (this.screen) { + case INTRO: + switch (buttonPressed) { + case 0: + AbstractCard curse = new CurseOfBlood(); + AbstractDungeon.effectList.add(new ShowCardAndObtainEffect(curse.makeCopy(), Settings.WIDTH * .35F, (float) (Settings.HEIGHT / 2))); + AbstractDungeon.effectList.add(new ShowCardAndObtainEffect(curse.makeCopy(), Settings.WIDTH * .65F, (float) (Settings.HEIGHT / 2))); + + this.imageEventText.updateBodyText(DESCRIPTIONS[2]); + this.imageEventText.clearAllDialogs(); + this.imageEventText.setDialogOption(OPTIONS[2]); + AbstractDungeon.getCurrRoom().spawnRelicAndObtain((float) Settings.WIDTH / 2.0F, (float) Settings.HEIGHT / 2.0F, new ShatteredFragment()); + this.screen = CurScreen.RESULT; + logMetricObtainCardAndRelic(ID, "Destroyed Statue", curse.makeCopy(), new ShatteredFragment()); + return; + case 1: + this.imageEventText.updateBodyText(DESCRIPTIONS[1]); + this.imageEventText.clearAllDialogs(); + this.imageEventText.setDialogOption(OPTIONS[2]); + 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[2]); + 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/CultTalk/ChosenTalk.java b/src/main/java/awakenedOne/patches/CultTalk/ChosenTalk.java new file mode 100644 index 0000000000..9b96608a3b --- /dev/null +++ b/src/main/java/awakenedOne/patches/CultTalk/ChosenTalk.java @@ -0,0 +1,40 @@ +package awakenedOne.patches.CultTalk; + +import awakenedOne.AwakenedOneChar; +import awakenedOne.AwakenedOneMod; +import com.badlogic.gdx.math.MathUtils; +import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; +import com.megacrit.cardcrawl.actions.animations.ShoutAction; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.EventStrings; +import com.megacrit.cardcrawl.monsters.city.Chosen; + + +@SpirePatch(clz = Chosen.class, method = "takeTurn") +public class ChosenTalk { + public static final String[] DESCRIPTIONS; + private static final EventStrings eventStrings; + + static { + eventStrings = CardCrawlGame.languagePack.getEventString("awakened:CultTalk"); + DESCRIPTIONS = eventStrings.DESCRIPTIONS; + } + + public static void Prefix(Chosen sb) { + if (AbstractDungeon.player instanceof AwakenedOneChar && !AwakenedOneMod.ChosenTalked) { + //random DOESN'T MATTER if it's not affecting battle, i.e visual effects + //if anything, if this DID affect rng it would be the most horrifying meta knowledge ever + int temp = MathUtils.random(1, 9); + if (temp < 4) { + AbstractDungeon.actionManager.addToBottom(new ShoutAction(sb, DESCRIPTIONS[6], 1.0F, 2.0F)); + } else if (temp < 6) { + AbstractDungeon.actionManager.addToBottom(new ShoutAction(sb, DESCRIPTIONS[7], 1.0F, 2.0F)); + } else if (temp > 6) { + AbstractDungeon.actionManager.addToBottom(new ShoutAction(sb, DESCRIPTIONS[8], 1.0F, 2.0F)); + + } + AwakenedOneMod.ChosenTalked = true; + } + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/patches/CultTalk/CultistPerish.java b/src/main/java/awakenedOne/patches/CultTalk/CultistPerish.java new file mode 100644 index 0000000000..5a1b7d6668 --- /dev/null +++ b/src/main/java/awakenedOne/patches/CultTalk/CultistPerish.java @@ -0,0 +1,40 @@ +package awakenedOne.patches.CultTalk; + +import awakenedOne.AwakenedOneChar; +import awakenedOne.AwakenedOneMod; +import com.badlogic.gdx.math.MathUtils; +import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; +import com.megacrit.cardcrawl.actions.animations.ShoutAction; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.EventStrings; +import com.megacrit.cardcrawl.monsters.exordium.Cultist; + + +@SpirePatch(clz = Cultist.class, method = "die") +public class CultistPerish { + public static final String[] DESCRIPTIONS; + private static final EventStrings eventStrings; + + static { + eventStrings = CardCrawlGame.languagePack.getEventString("awakened:CultTalk"); + DESCRIPTIONS = eventStrings.DESCRIPTIONS; + } + + public static void Prefix(Cultist sb) { + if (AbstractDungeon.player instanceof AwakenedOneChar && !AwakenedOneMod.CultistPerish) { + //random DOESN'T MATTER if it's not affecting battle, i.e visual effects + //if anything, if this DID affect rng it would be the most horrifying meta knowledge ever + int temp = MathUtils.random(1, 9); + if (temp < 4) { + AbstractDungeon.actionManager.addToBottom(new ShoutAction(sb, DESCRIPTIONS[3], 1.0F, 2.0F)); + } else if (temp < 6) { + AbstractDungeon.actionManager.addToBottom(new ShoutAction(sb, DESCRIPTIONS[4], 1.0F, 2.0F)); + } else if (temp > 6) { + AbstractDungeon.actionManager.addToBottom(new ShoutAction(sb, DESCRIPTIONS[5], 1.0F, 2.0F)); + + } + AwakenedOneMod.CultistPerish = true; + } + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/patches/CultTalk/CultistTalk.java b/src/main/java/awakenedOne/patches/CultTalk/CultistTalk.java new file mode 100644 index 0000000000..f4596dc62d --- /dev/null +++ b/src/main/java/awakenedOne/patches/CultTalk/CultistTalk.java @@ -0,0 +1,40 @@ +package awakenedOne.patches.CultTalk; + +import awakenedOne.AwakenedOneChar; +import awakenedOne.AwakenedOneMod; +import com.badlogic.gdx.math.MathUtils; +import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; +import com.megacrit.cardcrawl.actions.animations.ShoutAction; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.EventStrings; +import com.megacrit.cardcrawl.monsters.exordium.Cultist; + + +@SpirePatch(clz = Cultist.class, method = "takeTurn") +public class CultistTalk { + public static final String[] DESCRIPTIONS; + private static final EventStrings eventStrings; + + static { + eventStrings = CardCrawlGame.languagePack.getEventString("awakened:CultTalk"); + DESCRIPTIONS = eventStrings.DESCRIPTIONS; + } + + public static void Prefix(Cultist sb) { + if (AbstractDungeon.player instanceof AwakenedOneChar && !AwakenedOneMod.CultistTalked) { + //random DOESN'T MATTER if it's not affecting battle, i.e visual effects + //if anything, if this DID affect rng it would be the most horrifying meta knowledge ever + int temp = MathUtils.random(1, 9); + if (temp < 4) { + AbstractDungeon.actionManager.addToBottom(new ShoutAction(sb, DESCRIPTIONS[0], 1.0F, 2.0F)); + } else if (temp < 6) { + AbstractDungeon.actionManager.addToBottom(new ShoutAction(sb, DESCRIPTIONS[1], 1.0F, 2.0F)); + } else if (temp > 6) { + AbstractDungeon.actionManager.addToBottom(new ShoutAction(sb, DESCRIPTIONS[2], 1.0F, 2.0F)); + + } + AwakenedOneMod.CultistTalked = true; + } + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/patches/FixDownfallBottlesPatch.java b/src/main/java/awakenedOne/patches/FixDownfallBottlesPatch.java new file mode 100644 index 0000000000..1066369611 --- /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 0000000000..d132db90d1 --- /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 0000000000..012e02fc1f --- /dev/null +++ b/src/main/java/awakenedOne/patches/MoreBottleUpgrades.java @@ -0,0 +1,98 @@ +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 != null && a.card.uuid != null) { + 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 != null && b.card.uuid != null) { + 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 != null && crelic.card.uuid != null) { + 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 != null && e.card.uuid != null) { + 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 != null && f.card.uuid != null) { + 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 != null && g.card.uuid != null) { + 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 != null && h.card.uuid != null) { + 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 != null && i.card.uuid != null) { + if (i.card.uuid == c.uuid) { + ((StasisEgg) __instance.getRelic(StasisEgg.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 0000000000..c80a42c541 --- /dev/null +++ b/src/main/java/awakenedOne/patches/OnCreateCardSubscriber.java @@ -0,0 +1,82 @@ +package awakenedOne.patches; + +import automaton.cards.goodstatus.IntoTheVoid; +import awakenedOne.AwakenedTextHelper; +import awakenedOne.cards.AbstractAwakenedCard; +import awakenedOne.powers.SongOfSorrowPower; +import awakenedOne.relics.TomeOfPortalmancy; +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 com.megacrit.cardcrawl.relics.AbstractRelic; + +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)); + // } + for (AbstractRelic r : AbstractDungeon.player.relics) { + if (r instanceof TomeOfPortalmancy) { + ((TomeOfPortalmancy) r).onSpecificTrigger(); + } + } + 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 0000000000..e7adcf796d --- /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 0000000000..88b279fc59 --- /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 0000000000..97b288ed9f --- /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/TempCardPatches.java b/src/main/java/awakenedOne/patches/TempCardPatches.java new file mode 100644 index 0000000000..67e4c4453c --- /dev/null +++ b/src/main/java/awakenedOne/patches/TempCardPatches.java @@ -0,0 +1,35 @@ +package awakenedOne.patches; + + +import awakenedOne.util.JediUtil; +import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; +import com.evacipated.cardcrawl.modthespire.lib.SpirePatch2; +import com.evacipated.cardcrawl.modthespire.lib.SpirePostfixPatch; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.vfx.AbstractGameEffect; +import com.megacrit.cardcrawl.vfx.cardManip.ShowCardAndAddToDiscardEffect; +import com.megacrit.cardcrawl.vfx.cardManip.ShowCardAndAddToDrawPileEffect; +import com.megacrit.cardcrawl.vfx.cardManip.ShowCardAndAddToHandEffect; + +//Due to different constructors for these effects adding a different card instance to the relevant pile, they need to be seaparated like this +public class TempCardPatches { + @SpirePatch2(clz = ShowCardAndAddToDiscardEffect.class, method = SpirePatch.CONSTRUCTOR, paramtypez = {AbstractCard.class, float.class, float.class}) + @SpirePatch2(clz = ShowCardAndAddToDrawPileEffect.class, method = SpirePatch.CONSTRUCTOR, paramtypez = {AbstractCard.class, boolean.class, boolean.class}) + public static class CatchSourceCard { + @SpirePostfixPatch + public static void patch(AbstractGameEffect __instance, AbstractCard srcCard) { + JediUtil.onGenerateCardMidcombat(srcCard); + } + } + + @SpirePatch2(clz = ShowCardAndAddToDiscardEffect.class, method = SpirePatch.CONSTRUCTOR, paramtypez = {AbstractCard.class}) + @SpirePatch2(clz = ShowCardAndAddToDrawPileEffect.class, method = SpirePatch.CONSTRUCTOR, paramtypez = {AbstractCard.class, float.class, float.class, boolean.class, boolean.class, boolean.class}) + @SpirePatch2(clz = ShowCardAndAddToHandEffect.class, method = SpirePatch.CONSTRUCTOR, paramtypez = {AbstractCard.class, float.class, float.class}) + @SpirePatch2(clz = ShowCardAndAddToHandEffect.class, method = SpirePatch.CONSTRUCTOR, paramtypez = {AbstractCard.class}) + public static class CatchCopyCard { + @SpirePostfixPatch + public static void patch(AbstractGameEffect __instance, AbstractCard ___card) { + JediUtil.onGenerateCardMidcombat(___card); + } + } +} diff --git a/src/main/java/awakenedOne/patches/VioletPlumagePatch.java b/src/main/java/awakenedOne/patches/VioletPlumagePatch.java new file mode 100644 index 0000000000..a25b5f2227 --- /dev/null +++ b/src/main/java/awakenedOne/patches/VioletPlumagePatch.java @@ -0,0 +1,57 @@ +package awakenedOne.patches; +// + +import awakenedOne.cards.Gloomguard; +import awakenedOne.cards.tokens.spells.AbstractSpellCard; +import awakenedOne.powers.EnsorcelatePower; +import awakenedOne.powers.IntensifyPower; +import awakenedOne.util.Wiz; +import champ.ChampMod; +import champ.patches.SignatureMovePatch; +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.hasTag(ChampMod.FINISHER)) { + return (SignatureMovePatch.inSignatureMove.get(__instance)); + } + + if (isIndeedWithoutADoubtInCombat() && __instance instanceof Gloomguard) { + return Wiz.checkVoid(); + } + + 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 0000000000..0d1e12ce81 --- /dev/null +++ b/src/main/java/awakenedOne/potions/CultistsDelight.java @@ -0,0 +1,70 @@ +package awakenedOne.potions; + +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.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.GameDictionary; +import com.megacrit.cardcrawl.helpers.PowerTip; +import com.megacrit.cardcrawl.helpers.TipHelper; +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; + } + + 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)); + if (Settings.language == Settings.GameLanguage.ENG) { + this.tips.add(new PowerTip(TipHelper.capitalize(GameDictionary.STRENGTH.NAMES[0]), GameDictionary.keywords.get(GameDictionary.STRENGTH.NAMES[0]))); + } + } + + 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))); + AbstractCard c = AbstractDungeon.returnTrulyRandomCardInCombat(AbstractCard.CardType.POWER).makeCopy(); + c.setCostForTurn(0); + this.addToBot(new MakeTempCardInHandAction(c, true)); + } + + public CustomPotion makeCopy() { + return new CultistsDelight(); + } + + public int getPotency(int ascensionLevel) { + return 1; + } +} diff --git a/src/main/java/awakenedOne/potions/PhaseSkip.java b/src/main/java/awakenedOne/potions/PhaseSkip.java new file mode 100644 index 0000000000..b805bd82f6 --- /dev/null +++ b/src/main/java/awakenedOne/potions/PhaseSkip.java @@ -0,0 +1,58 @@ +package awakenedOne.potions; + +import awakenedOne.AwakenedOneMod; +import basemod.abstracts.CustomPotion; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.actions.unique.ApotheosisAction; +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.GameDictionary; +import com.megacrit.cardcrawl.helpers.PowerTip; +import com.megacrit.cardcrawl.helpers.TipHelper; +import com.megacrit.cardcrawl.localization.PotionStrings; +import com.megacrit.cardcrawl.vfx.combat.IntenseZoomEffect; + +import static awakenedOne.util.Wiz.awaken; + +public class PhaseSkip extends CustomPotion { + public static final String POTION_ID = "awakened:PhaseSkip"; + 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 PhaseSkip() { + super(NAME, POTION_ID, PotionRarity.RARE, PotionSize.HEART, PotionColor.ELIXIR); + this.isThrown = false; + this.targetRequired = false; + this.labOutlineColor = AwakenedOneMod.potionLabColor; + } + + public void initializeData() { + this.potency = getPotency(); + this.description = potionStrings.DESCRIPTIONS[0]; + this.tips.clear(); + this.tips.add(new PowerTip(this.name, this.description)); + this.tips.add(new PowerTip(TipHelper.capitalize(GameDictionary.UPGRADE.NAMES[0]), GameDictionary.keywords.get(GameDictionary.UPGRADE.NAMES[0]))); + + } + + public void use(AbstractCreature target) { + if (!AwakenedOneMod.awakenedthiscombat) { + AbstractDungeon.actionManager.addToTop(new VFXAction(AbstractDungeon.player, new IntenseZoomEffect(AbstractDungeon.player.hb.cX, AbstractDungeon.player.hb.cY, true), 0.05F, true)); + AbstractDungeon.actionManager.addToTop(new SFXAction("VO_AWAKENEDONE_1")); + awaken(true); + //OrbitingSpells.upgradeall(); + } + this.addToBot(new ApotheosisAction()); + } + + public CustomPotion makeCopy() { + return new PhaseSkip(); + } + + public int getPotency(int ascensionLevel) { + return 2; + } +} diff --git a/src/main/java/awakenedOne/potions/SacramentalWine.java b/src/main/java/awakenedOne/potions/SacramentalWine.java new file mode 100644 index 0000000000..7a43c792b3 --- /dev/null +++ b/src/main/java/awakenedOne/potions/SacramentalWine.java @@ -0,0 +1,61 @@ +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.GameDictionary; +import com.megacrit.cardcrawl.helpers.PowerTip; +import com.megacrit.cardcrawl.helpers.TipHelper; +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)); + this.tips.add(new PowerTip(TipHelper.capitalize(GameDictionary.BLOCK.NAMES[0]), GameDictionary.keywords.get(GameDictionary.BLOCK.NAMES[0]))); + + } + + 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 0000000000..806d766ca9 --- /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 0000000000..74bf9cd152 --- /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 0000000000..392d82c96a --- /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 0000000000..4646c954ae --- /dev/null +++ b/src/main/java/awakenedOne/powers/AphoticFountPower.java @@ -0,0 +1,25 @@ +package awakenedOne.powers; + +import awakenedOne.util.Wiz; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.powers.PlatedArmorPower; + +public class AphoticFountPower extends AbstractAwakenedPower { + // intellij stuff buff + public static final String NAME = AphoticFountPower.class.getSimpleName(); + public static final String POWER_ID = makeID(NAME); + + public AphoticFountPower(int amount) { + super(NAME, PowerType.BUFF, false, AbstractDungeon.player, null, amount); + updateDescription(); + } + + @Override + public void onSpecificTrigger() { + Wiz.applyToSelf(new PlatedArmorPower(AbstractDungeon.player, amount)); + } + + public void updateDescription() { + description = (DESCRIPTIONS[0] + amount + DESCRIPTIONS[1]); + } +} \ 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 0000000000..372fee0647 --- /dev/null +++ b/src/main/java/awakenedOne/powers/ArchmagusPower.java @@ -0,0 +1,87 @@ +package awakenedOne.powers; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.cards.tokens.spells.AbstractSpellCard; +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; +import slimebound.SlimeboundMod; + +public class ArchmagusPower extends AbstractTwoAmountAwakenedPower { + // intellij stuff buff + public static final String NAME = ArchmagusPower.class.getSimpleName(); + public static final String POWER_ID = makeID(NAME); + + + private int cardsDoubledThisTurn = 0; + + public ArchmagusPower(int amount) { + super(NAME, PowerType.BUFF, false, AbstractDungeon.player, null, amount); + amount2 = 1 - AwakenedOneMod.spellsThisTurn; + if (amount2 < 0) amount2 = 0; + updateDescription(); + } + + @Override + public void stackPower(int stackAmount) { + super.stackPower(stackAmount); + amount2 += stackAmount; + updateDescription(); + } + + @Override + public void atEndOfTurn(boolean isPlayer) { + amount2 = amount; + cardsDoubledThisTurn = 0; + updateDescription(); + } + + public void onUseCard(AbstractCard card, UseCardAction action) { + SlimeboundMod.logger.info(AwakenedOneMod.spellsThisTurn); + SlimeboundMod.logger.info(this.cardsDoubledThisTurn); + SlimeboundMod.logger.info(this.amount2); + + SlimeboundMod.logger.info("stacks remaining this turn: " + this.amount2 + ", spells this turn: AwakenedOneMod.spellsThisTurn" + AwakenedOneMod.spellsThisTurn + ", cards doubled this turn: " + cardsDoubledThisTurn + ". Final resulting check is " + (AwakenedOneMod.spellsThisTurn - this.cardsDoubledThisTurn <= this.amount2)); + if (!card.purgeOnUse && this.amount2 > 0 && (card instanceof AbstractSpellCard) && AwakenedOneMod.spellsThisTurn - this.cardsDoubledThisTurn <= this.amount2) { + 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; + --this.amount2; + cardsDoubledThisTurn++; + AbstractDungeon.actionManager.addCardQueueItem(new CardQueueItem(tmp, m, card.energyOnUse, true, true), true); + + updateDescription(); + } + + } + + + public void updateDescription() { + if (amount == 1) { + description = DESCRIPTIONS[0] + DESCRIPTIONS[3] + " [REMOVE_SPACE]" + amount2 + DESCRIPTIONS[4]; + } else { + description = DESCRIPTIONS[1] + this.amount + DESCRIPTIONS[2] + DESCRIPTIONS[3] + " [REMOVE_SPACE]" + amount2 + DESCRIPTIONS[4]; + } + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/powers/BrainshockPower.java b/src/main/java/awakenedOne/powers/BrainshockPower.java new file mode 100644 index 0000000000..374240f783 --- /dev/null +++ b/src/main/java/awakenedOne/powers/BrainshockPower.java @@ -0,0 +1,41 @@ +package awakenedOne.powers; + +import awakenedOne.cards.tokens.spells.AbstractSpellCard; +import com.megacrit.cardcrawl.actions.common.DrawCardAction; +import com.megacrit.cardcrawl.actions.common.GainEnergyAction; +import com.megacrit.cardcrawl.actions.common.RemoveSpecificPowerAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; + +import static awakenedOne.util.Wiz.atb; + +public class BrainshockPower extends AbstractAwakenedPower { + // intellij stuff buff + public static final String NAME = BrainshockPower.class.getSimpleName(); + public static final String POWER_ID = makeID(NAME); + + public BrainshockPower(int amount) { + super(NAME, PowerType.BUFF, false, AbstractDungeon.player, null, amount); + } + + @Override + public void onAfterCardPlayed(AbstractCard card) { + if (card instanceof AbstractSpellCard) { + this.flash(); + + atb(new DrawCardAction(AbstractDungeon.player, amount)); + atb(new GainEnergyAction(amount)); + addToTop(new RemoveSpecificPowerAction(owner, owner, this)); + } + } + + @Override + public void atEndOfTurn(boolean isPlayer) { + addToTop(new RemoveSpecificPowerAction(owner, owner, this)); + } + + public void updateDescription() { + this.description = DESCRIPTIONS[0] + this.amount + DESCRIPTIONS[1] + this.amount + DESCRIPTIONS[1]; + } + +} \ 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 0000000000..b3db8c79f8 --- /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/ConjureNextPower.java b/src/main/java/awakenedOne/powers/ConjureNextPower.java new file mode 100644 index 0000000000..9b0732c044 --- /dev/null +++ b/src/main/java/awakenedOne/powers/ConjureNextPower.java @@ -0,0 +1,33 @@ +package awakenedOne.powers; + +import awakenedOne.cards.tokens.PlumeJab; +import awakenedOne.util.Wiz; +import com.megacrit.cardcrawl.actions.common.RemoveSpecificPowerAction; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; + +public class ConjureNextPower extends AbstractAwakenedPower implements OnLoseEnergyPower { + // intellij stuff buff + public static final String NAME = ConjureNextPower.class.getSimpleName(); + public static final String POWER_ID = makeID(NAME); + + public ConjureNextPower(int amount) { + super(NAME, PowerType.BUFF, false, AbstractDungeon.player, null, amount); + updateDescription(); + } + + @Override + public void LoseEnergyAction(int gained) { + this.flash(); + Wiz.makeInHand(new PlumeJab(), this.amount); + this.addToTop(new RemoveSpecificPowerAction(this.owner, this.owner, ID)); + } + + 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/CursedStrength.java b/src/main/java/awakenedOne/powers/CursedStrength.java new file mode 100644 index 0000000000..45dc56920d --- /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/DaggerstormPower.java b/src/main/java/awakenedOne/powers/DaggerstormPower.java new file mode 100644 index 0000000000..f42eb25c6d --- /dev/null +++ b/src/main/java/awakenedOne/powers/DaggerstormPower.java @@ -0,0 +1,37 @@ +package awakenedOne.powers; + +import awakenedOne.util.onGenerateCardMidcombatInterface; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +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.vfx.combat.ThrowDaggerEffect; +import gremlin.actions.PseudoDamageRandomEnemyAction; + +public class DaggerstormPower extends AbstractAwakenedPower implements onGenerateCardMidcombatInterface { + public static final String NAME = DaggerstormPower.class.getSimpleName(); + public static final String POWER_ID = makeID(NAME); + + public DaggerstormPower(int amount) { + super(NAME, PowerType.BUFF, false, AbstractDungeon.player, null, amount); + + } + + + @Override + public void onCreateCard(AbstractCard card) { + + AbstractMonster m = AbstractDungeon.getMonsters().getRandomMonster(true); + if (m != null) { + this.addToBot(new VFXAction(new ThrowDaggerEffect(m.hb.cX, m.hb.cY))); + AbstractDungeon.actionManager.addToBottom(new PseudoDamageRandomEnemyAction(m, new DamageInfo(AbstractDungeon.player, amount, DamageInfo.DamageType.THORNS), AbstractGameAction.AttackEffect.BLUNT_LIGHT)); + } + } + + @Override + public void updateDescription() { + description = DESCRIPTIONS[0] + amount + DESCRIPTIONS[1]; + } +} diff --git a/src/main/java/awakenedOne/powers/DarkEchoPower.java b/src/main/java/awakenedOne/powers/DarkEchoPower.java new file mode 100644 index 0000000000..652a8a0963 --- /dev/null +++ b/src/main/java/awakenedOne/powers/DarkEchoPower.java @@ -0,0 +1,83 @@ +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.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/Echo84.png"); + private static final Texture tex32 = TextureLoader.getTexture(expansionContentMod.getModID() + "Resources/images/powers/Echo32.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) { + if (amount2 > 0 && amount > 0) { + 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] + Math.max(0, amount2) + DESCRIPTIONS[1] + amount + DESCRIPTIONS[2]; + } + if (this.amount == 1) { + this.description = DESCRIPTIONS[0] + Math.max(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 0000000000..98f8cebc3b --- /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 0000000000..5353a42ef6 --- /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/EclipseEmbracePower.java b/src/main/java/awakenedOne/powers/EclipseEmbracePower.java new file mode 100644 index 0000000000..02f48b0a3e --- /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 0000000000..a4fab7c28d --- /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 0000000000..7082fec0a8 --- /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/FourthDimensionPower.java b/src/main/java/awakenedOne/powers/FourthDimensionPower.java new file mode 100644 index 0000000000..11fe9a6919 --- /dev/null +++ b/src/main/java/awakenedOne/powers/FourthDimensionPower.java @@ -0,0 +1,52 @@ +package awakenedOne.powers; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.ReducePowerAction; +import com.megacrit.cardcrawl.actions.utility.NewQueueCardAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.helpers.FontHelper; + +import static awakenedOne.util.Wiz.atb; +import static awakenedOne.util.Wiz.att; + +public class FourthDimensionPower extends AbstractAwakenedPower { + // intellij stuff buff + public static final String NAME = FourthDimensionPower.class.getSimpleName(); + public static final String POWER_ID = makeID(NAME); + + private final AbstractCard card; + + public FourthDimensionPower(int amount, AbstractCard held) { + super(NAME, PowerType.BUFF, false, AbstractDungeon.player, null, amount); + card = held; + canGoNegative = false; + updateDescription(); + } + + @Override + public void atStartOfTurnPostDraw() { + flash(); + addToBot(new AbstractGameAction() { + @Override + public void update() { + isDone = true; + AbstractCard q = card.makeStatEquivalentCopy(); + + q.freeToPlayOnce = true; + q.exhaust = true; + + att(new NewQueueCardAction(q, true, true, true)); + } + }); + atb(new ReducePowerAction(owner, owner, this, 1)); + } + + @Override + public void updateDescription() { + if (card != null) + description = DESCRIPTIONS[0] + amount + (amount == 1 ? DESCRIPTIONS[1] : DESCRIPTIONS[2]) + DESCRIPTIONS[3] + FontHelper.colorString(card.name, "y") + DESCRIPTIONS[4]; + else + description = ""; + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/powers/GrimoirePower.java b/src/main/java/awakenedOne/powers/GrimoirePower.java new file mode 100644 index 0000000000..60d5f3d4fd --- /dev/null +++ b/src/main/java/awakenedOne/powers/GrimoirePower.java @@ -0,0 +1,19 @@ +package awakenedOne.powers; + +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; + +public class GrimoirePower extends AbstractAwakenedPower { + + public static final String NAME = GrimoirePower.class.getSimpleName(); + public static final String POWER_ID = makeID(NAME); + + public GrimoirePower(int amount) { + super(NAME, PowerType.BUFF, false, AbstractDungeon.player, null, amount); + } + + public void updateDescription() { + this.description = DESCRIPTIONS[0] + amount + DESCRIPTIONS[1]; + + } + +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/powers/IntensifyDebuffPower.java b/src/main/java/awakenedOne/powers/IntensifyDebuffPower.java new file mode 100644 index 0000000000..c553ba3f26 --- /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 0000000000..b016922841 --- /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 0000000000..36efb3ee0f --- /dev/null +++ b/src/main/java/awakenedOne/powers/ManaburnPower.java @@ -0,0 +1,89 @@ +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) / 4), DamageInfo.DamageType.HP_LOSS), EnumPatch.HERMIT_GHOSTFIRE)); + + for (AbstractRelic r : AbstractDungeon.player.relics) { + if (r instanceof StrengthBooster) { + ((StrengthBooster) r).onSpecificTrigger((amount * gained) / 4); + + } + } + } + } + + @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) / 4), DamageInfo.DamageType.HP_LOSS), EnumPatch.HERMIT_GHOSTFIRE)); + + for (AbstractRelic r : AbstractDungeon.player.relics) { + if (r instanceof StrengthBooster) { + ((StrengthBooster) r).onSpecificTrigger((amount) / 4); + + } + } + } + + } + } + + @Override + public void updateDescription() { + boolean hascrow = AbstractDungeon.player.hasRelic(StrengthBooster.ID); + + if (!hascrow) { + description = DESCRIPTIONS[0] + amount + DESCRIPTIONS[1]; + } + + if (hascrow) { + int newamount = ((amount) + (amount / 4)); + description = DESCRIPTIONS[0] + (newamount) + 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 0000000000..c8c69514b7 --- /dev/null +++ b/src/main/java/awakenedOne/powers/MoonlitVisionPower.java @@ -0,0 +1,59 @@ +package awakenedOne.powers; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.cards.tokens.spells.AbstractSpellCard; +import com.megacrit.cardcrawl.actions.common.GainEnergyAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; + +import static awakenedOne.util.Wiz.atb; + +public class MoonlitVisionPower extends AbstractTwoAmountAwakenedPower { + // intellij stuff buff + public static final String NAME = MoonlitVisionPower.class.getSimpleName(); + public static final String POWER_ID = makeID(NAME); + + private int activationsThisTurn; + + public MoonlitVisionPower() { + super(NAME, PowerType.BUFF, false, AbstractDungeon.player, null, 1); + amount2 = 1 - AwakenedOneMod.spellsThisTurn; + if (amount2 < 0) amount2 = 0; + updateDescription(); + } + + @Override + public void onAfterCardPlayed(AbstractCard usedCard) { + if (usedCard instanceof AbstractSpellCard) { + if (amount2 > 0) { + atb(new GainEnergyAction(1)); + amount2--; + activationsThisTurn++; + flash(); + updateDescription(); + } + } + } + + @Override + public void stackPower(int stackAmount) { + super.stackPower(stackAmount); + amount2 += stackAmount; + updateDescription(); + } + + @Override + public void atEndOfTurn(boolean isPlayer) { + amount2 = amount; + activationsThisTurn = 0; + updateDescription(); + } + + public void updateDescription() { + if (amount == 1) { + description = DESCRIPTIONS[0] + DESCRIPTIONS[3] + Math.min(amount2, AwakenedOneMod.spellsThisTurn - activationsThisTurn) + DESCRIPTIONS[4]; + } else { + description = DESCRIPTIONS[1] + this.amount + DESCRIPTIONS[2] + DESCRIPTIONS[3] + Math.min(amount2, AwakenedOneMod.spellsThisTurn - activationsThisTurn) + DESCRIPTIONS[4]; + } + } +} \ 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 0000000000..69f84f77d2 --- /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 0000000000..c799fea3c1 --- /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 0000000000..0a11d95901 --- /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 0000000000..3bd23bb363 --- /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 >= this.amount) { + 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 0000000000..c2c050a7eb --- /dev/null +++ b/src/main/java/awakenedOne/powers/ReverseRitualPower.java @@ -0,0 +1,31 @@ +package awakenedOne.powers; + +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.powers.RitualPower; + +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.BUFF, false, AbstractDungeon.player, null, amount); + updateDescription(); + this.canGoNegative = false; + priority = -99; + } + + + public void updateDescription() { + this.description = DESCRIPTIONS[0] + this.amount + DESCRIPTIONS[1]; + } + + @Override + public void atStartOfTurn() { + this.flash(); + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new RitualPower(this.owner, this.amount, true), 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 0000000000..2225ef5874 --- /dev/null +++ b/src/main/java/awakenedOne/powers/RisingChantPower.java @@ -0,0 +1,43 @@ +package awakenedOne.powers; + +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; + +public class RisingChantPower extends AbstractTwoAmountAwakenedPower { + // 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); + amount2 = amount; + updateDescription(); + } + + @Override + public void stackPower(int stackAmount) { + super.stackPower(stackAmount); + amount2 += stackAmount; + updateDescription(); + } + + @Override + public void atStartOfTurn() { + super.atStartOfTurn(); + amount2 = amount; + updateDescription(); + } + + public void updateDescription() { + + //The first +N+ Chant effects activated this turn are triggered twice. (+Y+ Effects remaining this turn.) + this.description = DESCRIPTIONS[0] + this.amount + DESCRIPTIONS[1] + this.amount2 + DESCRIPTIONS[2]; + } + + @Override + public void onSpecificTrigger() { + super.onSpecificTrigger(); + flash(); + amount2--; + updateDescription(); + } +} \ 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 0000000000..e3d87b00c9 --- /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/SchemePower.java b/src/main/java/awakenedOne/powers/SchemePower.java new file mode 100644 index 0000000000..6a4b273f59 --- /dev/null +++ b/src/main/java/awakenedOne/powers/SchemePower.java @@ -0,0 +1,64 @@ +package awakenedOne.powers; + +import com.megacrit.cardcrawl.actions.common.ReducePowerAction; +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; +import hermit.util.Wiz; + +public class SchemePower extends AbstractAwakenedPower { + // intellij stuff buff + public static final String NAME = SchemePower.class.getSimpleName(); + public static final String POWER_ID = makeID(NAME); + + public SchemePower(int amount) { + super(NAME, PowerType.BUFF, false, AbstractDungeon.player, null, amount); + } + + public void onUseCard(AbstractCard card, UseCardAction action) { + if (!card.purgeOnUse && this.amount > 0 && (Wiz.getLogicalCardCost(card) == 0 || Wiz.getLogicalCardCost(card) == 1)) { + + 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); + + addToTop(new ReducePowerAction(owner, owner, this, 1)); + + } + + } + + @Override + public void atEndOfTurn(boolean isPlayer) { + addToBot(new RemoveSpecificPowerAction(AbstractDungeon.player, AbstractDungeon.player, this)); + } + + @Override + public void updateDescription() { + if (amount == 1) { + description = DESCRIPTIONS[2]; + } else { + description = DESCRIPTIONS[0] + amount + DESCRIPTIONS[1]; + } + } +} diff --git a/src/main/java/awakenedOne/powers/SheerTerrorPower.java b/src/main/java/awakenedOne/powers/SheerTerrorPower.java new file mode 100644 index 0000000000..bc78807af0 --- /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 0000000000..f5de5b8607 --- /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 0000000000..eaa4bfc1c1 --- /dev/null +++ b/src/main/java/awakenedOne/powers/SongOfSorrowPower.java @@ -0,0 +1,28 @@ +package awakenedOne.powers; + +import awakenedOne.actions.AllEnemyLoseHPAction; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +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 0000000000..2535ea78bd --- /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 0000000000..05f655147c --- /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 0000000000..fe755e59fd --- /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 0000000000..4e30d72607 --- /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 0000000000..6f8fe73b8b --- /dev/null +++ b/src/main/java/awakenedOne/powers/VoidRefundPower.java @@ -0,0 +1,60 @@ +package awakenedOne.powers; + +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.GainEnergyAction; +import com.megacrit.cardcrawl.actions.common.RemoveSpecificPowerAction; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.powers.EnergizedBluePower; +import com.megacrit.cardcrawl.vfx.combat.MiracleEffect; + +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 (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)); + } + + 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 0000000000..fbd199643b --- /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/AwakenedUrn.java b/src/main/java/awakenedOne/relics/AwakenedUrn.java new file mode 100644 index 0000000000..215a487484 --- /dev/null +++ b/src/main/java/awakenedOne/relics/AwakenedUrn.java @@ -0,0 +1,53 @@ +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.HealAction; +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 AwakenedUrn extends CustomRelic { + + public static final String ID = AwakenedOneMod.makeID("AwakenedUrn"); + private static final Texture IMG = TexLoader.getTexture(makeRelicPath("AwakenedUrn.png")); + private static final Texture OUTLINE = TexLoader.getTexture(makeRelicOutlinePath("AwakenedUrn.png")); + + public AwakenedUrn() { + super(ID, IMG, OUTLINE, RelicTier.RARE, LandingSound.SOLID); + this.counter = 4; + + } + + + @Override + public void atBattleStart() { + this.counter = 4; + } + + @Override + public void onVictory() { + this.counter = 4; + } + + public String getUpdatedDescription() { + return this.DESCRIPTIONS[0] + 3 + this.DESCRIPTIONS[1]; + } + + public void onUseCard(AbstractCard card, UseCardAction action) { + if (card.type == AbstractCard.CardType.POWER && this.counter > 0) { + this.flash(); + this.addToTop(new HealAction(AbstractDungeon.player, AbstractDungeon.player, 3)); + this.addToTop(new RelicAboveCreatureAction(AbstractDungeon.player, this)); + this.counter--; + } + + } + +} \ 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 0000000000..cdc289fa91 --- /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 0000000000..cc5d05482b --- /dev/null +++ b/src/main/java/awakenedOne/relics/CursedBlessing.java @@ -0,0 +1,79 @@ +package awakenedOne.relics; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.util.TexLoader; +import awakenedOne.util.Wiz; +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.cards.AbstractCard; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.RitualPower; + +import static awakenedOne.AwakenedOneMod.makeRelicOutlinePath; +import static awakenedOne.AwakenedOneMod.makeRelicPath; + +public class CursedBlessing extends CustomRelic { + + public static final String ID = AwakenedOneMod.makeID("CursedBlessing"); + private static final Texture IMG = TexLoader.getTexture(makeRelicPath("CursedBlessing.png")); + private static final Texture OUTLINE = TexLoader.getTexture(makeRelicOutlinePath("CursedBlessing.png")); + + + //required triggers + private static final int AMOUNT1 = 3; + //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]; + } + + @Override + public void onPlayCard(AbstractCard card, AbstractMonster m) { + if (Wiz.isChantActive()) { + if (this.counter != -1) { + this.counter++; + if (this.counter == AMOUNT1) { + this.counter = -1; + flash(); + this.flash(); + this.addToBot(new RelicAboveCreatureAction(AbstractDungeon.player, this)); + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new RitualPower(AbstractDungeon.player, AMOUNT2, true), AMOUNT2)); + } + } + } + } + +} \ 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 0000000000..f7992cd9d4 --- /dev/null +++ b/src/main/java/awakenedOne/relics/CurvedSword.java @@ -0,0 +1,62 @@ +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")); + private static final Texture OUTLINE = TexLoader.getTexture(makeRelicOutlinePath("CurvedSword.png")); + + private static final int REQUIREMENT = 4; + + public CurvedSword() { + super(ID, IMG, OUTLINE, RelicTier.UNCOMMON, LandingSound.CLINK); + tips.add(new CardPowerTip(new Ceremony())); + } + + public void atBattleStart() { + this.counter = 0; + } + + public void onUseCard(AbstractCard card, UseCardAction action) { + if (card instanceof AbstractSpellCard) { + ++this.counter; + if (this.counter % REQUIREMENT == 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] + REQUIREMENT + 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 0000000000..170c0334a7 --- /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")); + 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 0000000000..0c189111ab --- /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")); + 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 0000000000..b2ef351a0a --- /dev/null +++ b/src/main/java/awakenedOne/relics/EyeOfTheOccult.java @@ -0,0 +1,44 @@ +package awakenedOne.relics; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.cards.tokens.spells.Darkleech; +import awakenedOne.cards.tokens.spells.Thunderbolt; +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")); + 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 Thunderbolt || card instanceof Darkleech))) { + //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 0000000000..6718c41bef --- /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 0000000000..631a00f4d5 --- /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")); + 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 0000000000..8a03261f4d --- /dev/null +++ b/src/main/java/awakenedOne/relics/MoonTalisman.java @@ -0,0 +1,214 @@ +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(); + 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/NerfedMummifiedHand.java b/src/main/java/awakenedOne/relics/NerfedMummifiedHand.java new file mode 100644 index 0000000000..bc5213724e --- /dev/null +++ b/src/main/java/awakenedOne/relics/NerfedMummifiedHand.java @@ -0,0 +1,84 @@ +package awakenedOne.relics; + +import awakenedOne.AwakenedOneMod; +import awakenedOne.cards.tokens.Ceremony; +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.actions.utility.UseCardAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.CardQueueItem; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.relics.AbstractRelic; + +import java.util.ArrayList; +import java.util.Iterator; + +import static awakenedOne.AwakenedOneMod.makeRelicOutlinePath; +import static awakenedOne.AwakenedOneMod.makeRelicPath; + +public class NerfedMummifiedHand extends CustomRelic { + + public static final String ID = AwakenedOneMod.makeID("NerfedMummifiedHand"); + private static final Texture IMG = TexLoader.getTexture(makeRelicPath("NerfedMummifiedHand.png")); + private static final Texture OUTLINE = TexLoader.getTexture(makeRelicOutlinePath("NerfedMummifiedHand.png")); + + + public NerfedMummifiedHand() { + super(ID, IMG, OUTLINE, RelicTier.UNCOMMON, LandingSound.FLAT); + } + + public String getUpdatedDescription() { + return this.DESCRIPTIONS[0]; + } + + public void onUseCard(AbstractCard card, UseCardAction action) { + if (card.type == AbstractCard.CardType.POWER && (card.cardID != Ceremony.ID)) { + this.flash(); + this.addToTop(new RelicAboveCreatureAction(AbstractDungeon.player, this)); + ArrayList groupCopy = new ArrayList(); + Iterator var4 = AbstractDungeon.player.hand.group.iterator(); + + while (true) { + while (var4.hasNext()) { + AbstractCard c = (AbstractCard) var4.next(); + if (c.cost > 0 && c.costForTurn > 0 && !c.freeToPlayOnce) { + groupCopy.add(c); + } + } + + var4 = AbstractDungeon.actionManager.cardQueue.iterator(); + + while (var4.hasNext()) { + CardQueueItem i = (CardQueueItem) var4.next(); + if (i.card != null) { + groupCopy.remove(i.card); + } + } + + AbstractCard c = null; + if (groupCopy.isEmpty()) { + } else { + Iterator var9 = groupCopy.iterator(); + + while (var9.hasNext()) { + AbstractCard cc = (AbstractCard) var9.next(); + } + + c = groupCopy.get(AbstractDungeon.cardRandomRng.random(0, groupCopy.size() - 1)); + } + + if (c != null) { + c.setCostForTurn(0); + } + break; + } + } + + } + + public AbstractRelic makeCopy() { + return new NerfedMummifiedHand(); + } +} \ No newline at end of file diff --git a/src/main/java/awakenedOne/relics/OnAwakenRelic.java b/src/main/java/awakenedOne/relics/OnAwakenRelic.java new file mode 100644 index 0000000000..fc4fa61e29 --- /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 0000000000..648dfb0101 --- /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 0000000000..bfa283debd --- /dev/null +++ b/src/main/java/awakenedOne/relics/RippedDoll.java @@ -0,0 +1,58 @@ +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")); + private static final Texture OUTLINE = TexLoader.getTexture(makeRelicOutlinePath("RippedDoll.png")); + + //Ripped Doll + + //How many turns does this relic work for? + private static final int TURNS = 2; + + 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 < TURNS && this.counter != -1) { + this.counter++; + flash(); + atb(new ConjureAction(false, false)); + if (this.counter == TURNS) { + this.counter = -1; + } + } + } + + @Override + public String getUpdatedDescription() { + return DESCRIPTIONS[0] + TURNS + 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 0000000000..73739eb0b1 --- /dev/null +++ b/src/main/java/awakenedOne/relics/ShardOfNowak.java @@ -0,0 +1,105 @@ +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")); + 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 (damageAmount > 0) { + 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 0000000000..27482c087f --- /dev/null +++ b/src/main/java/awakenedOne/relics/ShreddedDoll.java @@ -0,0 +1,98 @@ +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")); + private static final Texture OUTLINE = TexLoader.getTexture(makeRelicOutlinePath("ShreddedDoll.png")); + private boolean activatedthiscombat = false; + + //Shredded Doll + + public ShreddedDoll() { + super(ID, IMG, OUTLINE, RelicTier.BOSS, LandingSound.MAGICAL); + } + + + @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 0000000000..4740924e22 --- /dev/null +++ b/src/main/java/awakenedOne/relics/StrengthBooster.java @@ -0,0 +1,46 @@ +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 = 25; + + private static final Texture IMG = TexLoader.getTexture(makeRelicPath("StrengthBooster.png")); + 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 0000000000..99b629677f --- /dev/null +++ b/src/main/java/awakenedOne/relics/TomeOfPortalmancy.java @@ -0,0 +1,57 @@ +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.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")); + private static final Texture OUTLINE = TexLoader.getTexture(makeRelicOutlinePath("TomeOfPortalmancy.png")); + + private static final int AMOUNT = 2; + + public TomeOfPortalmancy() { + super(ID, IMG, OUTLINE, RelicTier.COMMON, LandingSound.MAGICAL); + } + + //tome of portalmancy + + public void onSpecificTrigger() { + 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 0000000000..5f3567d4ca --- /dev/null +++ b/src/main/java/awakenedOne/relics/VioletPlumage.java @@ -0,0 +1,75 @@ +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")); + 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; + this.stopPulse(); + } + + @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 0000000000..a2b014b6f5 --- /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 awakenedOne.util.Wiz; +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.*; + +public class WhiteRibbon extends CustomRelic { + + public static final String ID = AwakenedOneMod.makeID("WhiteRibbon"); + private static final int AMOUNT = 4; + 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.hasTag(CHANT)) { + 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 0000000000..d5e2d62c4b --- /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")); + 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 0000000000..32ef72ab49 --- /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 0000000000..936a00940e --- /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 0000000000..d1f89144d5 --- /dev/null +++ b/src/main/java/awakenedOne/ui/OrbitingSpells.java @@ -0,0 +1,372 @@ +package awakenedOne.ui; + +import awakenedOne.AwakenedOneChar; +import awakenedOne.actions.ConjureAction; +import awakenedOne.actions.SetUpNextSpellAction; +import awakenedOne.actions.SpellApotheosisAction; +import awakenedOne.cards.Caw; +import awakenedOne.cards.tokens.spells.*; +import awakenedOne.relics.ZenerDeck; +import awakenedOne.util.TexLoader; +import awakenedOne.util.Wiz; +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.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.helpers.TipHelper; +import com.megacrit.cardcrawl.helpers.input.InputHelper; +import com.megacrit.cardcrawl.localization.UIStrings; +import com.megacrit.cardcrawl.powers.watcher.MasterRealityPower; +import com.megacrit.cardcrawl.vfx.ThoughtBubble; + +import java.util.ArrayList; +import java.util.HashMap; + +import static awakenedOne.AwakenedOneMod.*; +import static awakenedOne.ui.AwakenButton.awaken; +import static awakenedOne.util.Wiz.*; +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; + public static final float PANEL_BG_X = POSITION_X - (66F * Settings.scale); + public static final float PANEL_BG_Y = Settings.HEIGHT - POSITION_Y - 370F * Settings.scale;//POSITION_Y;//Settings.HEIGHT - (POSITION_Y);// (-110F * Settings.scale)); + public static final ArrayList spells = new ArrayList<>(); + private static final UIStrings uiStrings = CardCrawlGame.languagePack.getUIString(makeID("Spellbook")); + private static final HashMap cardIcons = new HashMap<>(); + private static final HashMap cardColors = new HashMap<>(); + private static final Hitbox barBox = new Hitbox(POSITION_X - 75F * Settings.scale, Settings.HEIGHT - POSITION_Y - 350 * Settings.scale, 55 * Settings.scale, 55 * Settings.scale * 7); + private static final Texture unfilledPip = TexLoader.getTexture("awakenedResources/images/ui/pip_unfilled.png"); + private static final Texture pipFillAnim1 = TexLoader.getTexture("awakenedResources/images/ui/pip_unfilled.png"); + private static final Texture pipFillAnim2 = TexLoader.getTexture("awakenedResources/images/ui/pip_unfilled_3.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 Texture panelBG = TexLoader.getTexture("awakenedResources/images/ui/panelBg.png"); + private static final Color defaultNextColor = Color.GREEN.cpy(); + public static ArrayList spellCards = new ArrayList<>(); + public static ArrayList spellCardsInscribe = new ArrayList<>(); + public static ArrayList boxes = new ArrayList<>(); + private static int hoveredCard = -1; + + private static final HashMap barSlotAnimTimers = new HashMap<>(); + + static { + for (int i = 0; i < 10; i++) { + boxes.add(new Hitbox(POSITION_X - (5F * Settings.scale), 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()); + + for (int i = 0; i < POWERS_TO_AWAKEN; i++) { + barSlotAnimTimers.put(i, 0F); + } + } + + static { + spells.add(Thunderbolt.ID); + spells.add(BurningStudy.ID); + spells.add(Darkleech.ID); + spells.add(Cryostasis.ID); + } + + private static Texture getIconForCard(String cardID) { + return cardIcons.getOrDefault(cardID, TexLoader.getTexture("awakenedResources/images/ui/defaultSpell.png")); + } + + private static Color getColorForCard(String cardID) { + return cardColors.getOrDefault(cardID, defaultNextColor); + } + + public static void refreshSpells() { + for (int i = 0; i < spells.size(); i++) { + String curID = spells.get(i); + spellCards.removeIf(card -> card.cardID.equals(curID)); + } + if (AbstractDungeon.player.hasRelic(ZenerDeck.ID)) { + spellCards.removeIf(card -> card.cardID.equals(ESPSpell.ID)); + } + + for (int i = 0; i < spells.size(); i++) { + addSpellCard(CardLibrary.getCard(spells.get(i)).makeCopy()); + } + + if (AbstractDungeon.player.hasRelic(ZenerDeck.ID)) { + addSpellCard(CardLibrary.getCard(ESPSpell.ID).makeCopy()); + } + + if (!spellCardsInscribe.isEmpty()) { + for (int i = 0; i < spellCardsInscribe.size(); i++) { + addSpellCard(CardLibrary.getCard(spellCardsInscribe.get(i).cardID).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() < 30) { + 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(); + barSlotAnimTimers.clear(); + for (int i = 0; i < POWERS_TO_AWAKEN; i++) { + barSlotAnimTimers.put(i, 0F); + } + } + + public static void update() { + hoveredCard = -1; + for (int i = 0; i < boxes.size(); i++) { + ArrayList uniqueCards = new ArrayList<>(); + for (AbstractCard c : spellCards) { + if (!uniqueCards.contains(c.cardID)) { + uniqueCards.add(c.cardID); + } + } + boxes.get(i).update(); + if (boxes.get(i).hovered) { + if (i < uniqueCards.size()) { + hoveredCard = i; + } + } + } + barBox.update(); + for (int i = 0; i < cappedPowersThisCombat(); i++) { + barSlotAnimTimers.put(i, barSlotAnimTimers.get(i) + Gdx.graphics.getDeltaTime()); + } + } + + private static int cappedPowersThisCombat() { + int powers = powersThisCombat; + if (powers > POWERS_TO_AWAKEN - 1) { + powers = POWERS_TO_AWAKEN - 1; + } + return powers; + } + + private static Texture getPipForSlot(int index) { + if (Wiz.isAwakened()) return pipComplete; + if (cappedPowersThisCombat() >= index) { + if (powersThisCombat >= index) { + if (barSlotAnimTimers.get(index) <= 0.1F) return pipFillAnim1; + if (barSlotAnimTimers.get(index) <= 0.2F) return pipFillAnim2; + } + return filledPip; + } + return unfilledPip; + } + + public static void postPlayerRender(SpriteBatch sb) { + sb.setColor(Color.WHITE.cpy()); + drawTextureScaled(sb, panelBG, PANEL_BG_X, PANEL_BG_Y); + FontHelper.renderFontLeftTopAligned(sb, FontHelper.tipHeaderFont, uiStrings.TEXT[0], POSITION_X, Settings.HEIGHT - POSITION_Y + (50 * Settings.scale), Settings.GOLD_COLOR); + int xr = 0; + + String idNext = ""; + HashMap spellsFound = new HashMap<>(); + ArrayList orderedSpells = new ArrayList<>(); + for (AbstractCard s : spellCards) { + if (spellsFound.containsKey(s.cardID)) { + spellsFound.put(s.cardID, spellsFound.get(s.cardID) + 1); + } else { + orderedSpells.add(s); + spellsFound.put(s.cardID, 1); + } + if (s.hasTag(UP_NEXT)) idNext = s.cardID; + } + for (String id : spellsFound.keySet()) { + drawTextureScaled(sb, getIconForCard(id), boxes.get(xr).x, boxes.get(xr).y); + + Color textColor = Color.WHITE.cpy(); + if (id.equals(idNext) && DeterministicConjure) { + textColor = getColorForCard(id); + } + String toShow = CardLibrary.getCard(id).name; + if (Wiz.isAwakened()) toShow = toShow + "+"; + if (spellsFound.get(id) > 1) { + toShow = toShow + " x" + spellsFound.get(id); + } + FontHelper.renderFontLeft(sb, FontHelper.tipHeaderFont, toShow, boxes.get(xr).x + 40F, boxes.get(xr).y + 25F, textColor); + xr++; + } + + for (Hitbox h : boxes) { + h.render(sb); + } + + for (int i = 0; i < Wiz.POWERS_TO_AWAKEN; i++) { + drawTextureScaled(sb, (getPipForSlot(i)), + barBox.x, + barBox.y + (55 * Settings.yScale) * i); + } + barBox.render(sb); + + + if (hoveredCard != -1) { + AbstractCard tar = orderedSpells.get(hoveredCard); + tar.target_x = tar.current_x = (barBox.x + (500 * Settings.scale)); + tar.target_y = tar.current_y = Settings.HEIGHT - ((POSITION_Y + 100 * Settings.scale)); + spellCards.get(hoveredCard).render(sb); + } + if (barBox != null) { + if (barBox.hovered) { + // showAll = true; + if ((float) InputHelper.mX < 1400.0F * Settings.scale) { + if ((AbstractDungeon.player.chosenClass == AwakenedOneChar.Enums.AWAKENED_ONE)) { + TipHelper.renderGenericTip( + (float) InputHelper.mX + 60.0F * Settings.scale, (float) InputHelper.mY - 50.0F * Settings.scale, + uiStrings.TEXT[1], + uiStrings.TEXT[2]); + } + + if ((AbstractDungeon.player.chosenClass != AwakenedOneChar.Enums.AWAKENED_ONE)) { + TipHelper.renderGenericTip( + (float) InputHelper.mX + 60.0F * Settings.scale, (float) InputHelper.mY - 50.0F * Settings.scale, + uiStrings.TEXT[1], + uiStrings.TEXT[3]); + } + + + } else { + if ((AbstractDungeon.player.chosenClass == AwakenedOneChar.Enums.AWAKENED_ONE)) { + TipHelper.renderGenericTip( + (float) InputHelper.mX + 60.0F * Settings.scale, (float) InputHelper.mY - 50.0F * Settings.scale, + uiStrings.TEXT[1], + uiStrings.TEXT[2]); + } + + if ((AbstractDungeon.player.chosenClass != AwakenedOneChar.Enums.AWAKENED_ONE)) { + TipHelper.renderGenericTip( + (float) InputHelper.mX + 60.0F * Settings.scale, (float) InputHelper.mY - 50.0F * Settings.scale, + uiStrings.TEXT[1], + uiStrings.TEXT[3]); + } + } + } + } + } + + 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 0000000000..10e8ccb145 --- /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/JediUtil.java b/src/main/java/awakenedOne/util/JediUtil.java new file mode 100644 index 0000000000..15f5e5203a --- /dev/null +++ b/src/main/java/awakenedOne/util/JediUtil.java @@ -0,0 +1,25 @@ +package awakenedOne.util; + +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; + +import java.util.ArrayList; + +public class JediUtil { + public static ArrayList cardsCreatedThisTurn = new ArrayList<>(); + public static ArrayList cardsCreatedThisCombat = new ArrayList<>(); + + public static void onGenerateCardMidcombat(AbstractCard c) { + AbstractDungeon.player.relics.stream().filter(r -> r instanceof onGenerateCardMidcombatInterface).forEach(r -> ((onGenerateCardMidcombatInterface) r).onCreateCard(c)); + AbstractDungeon.player.powers.stream().filter(r -> r instanceof onGenerateCardMidcombatInterface).forEach(r -> ((onGenerateCardMidcombatInterface) r).onCreateCard(c)); + AbstractDungeon.player.hand.group.stream().filter(card -> card instanceof onGenerateCardMidcombatInterface).forEach(card -> ((onGenerateCardMidcombatInterface) card).onCreateCard(c)); + AbstractDungeon.player.discardPile.group.stream().filter(card -> card instanceof onGenerateCardMidcombatInterface).forEach(card -> ((onGenerateCardMidcombatInterface) card).onCreateCard(c)); + AbstractDungeon.player.drawPile.group.stream().filter(card -> card instanceof onGenerateCardMidcombatInterface).forEach(card -> ((onGenerateCardMidcombatInterface) card).onCreateCard(c)); + AbstractDungeon.getMonsters().monsters.stream().filter(mon -> !mon.isDeadOrEscaped()).forEach(m -> m.powers.stream().filter(pow -> pow instanceof onGenerateCardMidcombatInterface).forEach(pow -> ((onGenerateCardMidcombatInterface) pow).onCreateCard(c))); + if (c instanceof onGenerateCardMidcombatInterface) { + ((onGenerateCardMidcombatInterface) c).onCreateThisCard(); + } + JediUtil.cardsCreatedThisCombat.add(c); + JediUtil.cardsCreatedThisTurn.add(c); + } +} diff --git a/src/main/java/awakenedOne/util/OnConjureSubscriber.java b/src/main/java/awakenedOne/util/OnConjureSubscriber.java new file mode 100644 index 0000000000..4643edfc21 --- /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 0000000000..ef62eb9784 --- /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 0000000000..7586afcd12 --- /dev/null +++ b/src/main/java/awakenedOne/util/Wiz.java @@ -0,0 +1,263 @@ +package awakenedOne.util; + +import automaton.cards.goodstatus.IntoTheVoid; +import awakenedOne.AwakenedOneChar; +import awakenedOne.actions.SpellApotheosisAction; +import awakenedOne.cards.DemonGlyph; +import awakenedOne.powers.DemonGlyphPower; +import awakenedOne.ui.AwakenButton; +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.cards.status.VoidCard; +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.*; + +public class Wiz { + public static int POWERS_TO_AWAKEN = 7; + + //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 checkVoid() { + boolean hasVoid = false; + for (AbstractCard c : AbstractDungeon.player.hand.group) { + if (c instanceof VoidCard || c instanceof IntoTheVoid) { + hasVoid = true; + break; + } + } + return hasVoid; + } + + public static boolean isAwakened() { + return awakenedthiscombat; + + } + + public static void awaken() { + awaken(false); + } + + public static void awaken(boolean instant) { + if (!awakenedthiscombat) { + if (powersThisCombat >= POWERS_TO_AWAKEN || instant) { + if (AbstractDungeon.player.hasPower(DemonGlyphPower.POWER_ID)) { + AwakenButton.awaken(10); + att(new RemoveSpecificPowerAction(AbstractDungeon.player, AbstractDungeon.player, DemonGlyphPower.POWER_ID)); + } + awakenedthiscombat = true; + + if ((AbstractDungeon.player.chosenClass == AwakenedOneChar.Enums.AWAKENED_ONE)) { + //Wiz.applyToSelf(new CuriosityPower(AbstractDungeon.player, 1)); + //No effect at this time, if a new one is added later, place it here + } + atb(new SpellApotheosisAction()); + OrbitingSpells.upgradeall(); + } + } + } + + + public static boolean isChantActive() { + if (AbstractDungeon.actionManager.cardsPlayedThisCombat.size() > 1) { + if ((AbstractDungeon.actionManager.cardsPlayedThisCombat.get(AbstractDungeon.actionManager.cardsPlayedThisCombat.size() - 1).hasTag(CHANT))) { + 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/awakenedOne/util/onGenerateCardMidcombatInterface.java b/src/main/java/awakenedOne/util/onGenerateCardMidcombatInterface.java new file mode 100644 index 0000000000..1fa393f123 --- /dev/null +++ b/src/main/java/awakenedOne/util/onGenerateCardMidcombatInterface.java @@ -0,0 +1,11 @@ +package awakenedOne.util; + +import com.megacrit.cardcrawl.cards.AbstractCard; + +public interface onGenerateCardMidcombatInterface { + default void onCreateCard(AbstractCard card) { + } + + default void onCreateThisCard() { + } +} diff --git a/src/main/java/champ/ChampChar.java b/src/main/java/champ/ChampChar.java index 5a01b98292..7f8f253102 100644 --- a/src/main/java/champ/ChampChar.java +++ b/src/main/java/champ/ChampChar.java @@ -1,6 +1,5 @@ package champ; -import automaton.vfx.CompileVictoryEffect; import basemod.abstracts.CustomPlayer; import champ.cards.*; import champ.relics.ChampionCrown; @@ -23,13 +22,9 @@ 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 com.megacrit.cardcrawl.vfx.combat.GiantFireEffect; -import com.megacrit.cardcrawl.vfx.scene.DefectVictoryNumberEffect; import downfall.util.TextureLoader; -import hermit.vfx.GreenFireEffect; import reskinContent.patches.CharacterSelectScreenPatches; import java.util.ArrayList; @@ -61,14 +56,14 @@ public class ChampChar extends CustomPlayer { public float renderscale2 = 2.5F; public float stanceSwitchAnimTimer = 0.0F; - private ArrayList stanceSwitchQueue = new ArrayList<>(); + private final ArrayList stanceSwitchQueue = new ArrayList<>(); - private String atlasURL = "champResources/images/char/mainChar/champ.atlas"; - private String jsonURL = "champResources/images/char/mainChar/champ.json"; + private final String atlasURL = "champResources/images/char/mainChar/champ.atlas"; + private final String jsonURL = "champResources/images/char/mainChar/champ.json"; - private String atlasURL2 = "reskinContent/img/ChampMod/Chan-P/animation/TheChampPlayer.atlas"; - private String jsonURL2 = "reskinContent/img/ChampMod/Chan-P/animation/TheChampPlayer.json"; + private final String atlasURL2 = "reskinContent/img/ChampMod/Chan-P/animation/TheChampPlayer.atlas"; + private final String jsonURL2 = "reskinContent/img/ChampMod/Chan-P/animation/TheChampPlayer.json"; /* private String atlasURL2 = "reskinContent/img/HexaghostMod/animation/Hexaghost_self_downfall.atlas"; @@ -76,7 +71,7 @@ public class ChampChar extends CustomPlayer { */ public ChampChar(String name, PlayerClass setClass) { - super(name, setClass, orbTextures, "champResources/images/char/mainChar/orb/vfx.png", (String) null, (String) null); + super(name, setClass, orbTextures, "champResources/images/char/mainChar/orb/vfx.png", null, (String) null); initializeClass(null, CharacterSelectScreenPatches.characters[4].skins[CharacterSelectScreenPatches.characters[4].reskinCount].SHOULDER1, @@ -187,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); @@ -201,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 diff --git a/src/main/java/champ/ChampMod.java b/src/main/java/champ/ChampMod.java index dcf171eee3..29a629820a 100644 --- a/src/main/java/champ/ChampMod.java +++ b/src/main/java/champ/ChampMod.java @@ -49,6 +49,7 @@ import com.megacrit.cardcrawl.rooms.AbstractRoom; import com.megacrit.cardcrawl.stances.NeutralStance; import downfall.downfallMod; +import downfall.patches.BanSharedContentPatch; import downfall.util.CardIgnore; import downfall.util.TextureLoader; import guardian.relics.ObsidianScales; @@ -297,18 +298,6 @@ public void atb(AbstractGameAction q) { public void addPotions() { - BaseMod.addPotion(OpenerPotion.class, Color.TEAL, Color.GREEN, Color.FOREST, OpenerPotion.POTION_ID, ChampChar.Enums.THE_CHAMP); - BaseMod.addPotion(TechPotion.class, Color.BLUE, Color.PURPLE, Color.MAROON, TechPotion.POTION_ID, ChampChar.Enums.THE_CHAMP); - BaseMod.addPotion(UltimateStancePotion.class, Color.PURPLE, Color.PURPLE, Color.MAROON, UltimateStancePotion.POTION_ID, ChampChar.Enums.THE_CHAMP); - -// BanSharedContentPatch.registerRunLockedPotion(ChampChar.Enums.THE_CHAMP, CounterstrikePotion.POTION_ID); - - if (Loader.isModLoaded("widepotions")) { - WidePotionsMod.whitelistSimplePotion(CounterstrikePotion.POTION_ID); - WidePotionsMod.whitelistSimplePotion(OpenerPotion.POTION_ID); - WidePotionsMod.whitelistSimplePotion(TechPotion.POTION_ID); - WidePotionsMod.whitelistSimplePotion(UltimateStancePotion.POTION_ID); - } } @Override @@ -401,7 +390,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// @@ -566,6 +555,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 @@ -574,10 +568,8 @@ public void update() { int x = begone; 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) { - PowerArmor PowerArmorInstance = new PowerArmor(); - PowerArmorInstance.flash(); - addToTop(new RelicAboveCreatureAction(AbstractDungeon.player, PowerArmorInstance)); 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 1e1d398f35..d709893765 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 e1eb750eff..e9c2883418 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 a987381ce7..75029c6cbc 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; @@ -32,8 +27,8 @@ public class TipHelperChamp1 { private static boolean isCard; private static float drawX; private static float drawY; - private static ArrayList KEYWORDS; - private static ArrayList POWER_TIPS; + private static final ArrayList KEYWORDS; + private static final ArrayList POWER_TIPS; private static String HEADER; private static String BODY; private static AbstractCard card; @@ -44,7 +39,7 @@ public class TipHelperChamp1 { private static final float BOX_EDGE_H; private static final float BOX_BODY_H; private static final float BOX_W; - private static GlyphLayout gl; + private static final GlyphLayout gl; private static float textHeight; private static final float TEXT_OFFSET_X; private static final float HEADER_OFFSET_Y; @@ -97,10 +92,7 @@ public static void renderGenericTip(float x, float y, String header, String body private static void renderPowerTips(float x, float y, SpriteBatch sb, ArrayList powerTips) { float originalY = y; - boolean offsetLeft = false; - if (x > (float) Settings.WIDTH / 2.0F) { - offsetLeft = true; - } + boolean offsetLeft = x > (float) Settings.WIDTH / 2.0F; float offset = 0.0F; @@ -139,7 +131,7 @@ private static float getPowerTipHeight(PowerTip powerTip) { } public static float calculateAdditionalOffset(ArrayList powerTips, float hBcY) { - return powerTips.isEmpty() ? 0.0F : (1.0F - hBcY / (float) Settings.HEIGHT) * getTallestOffset(powerTips) - (getPowerTipHeight((PowerTip) powerTips.get(0)) + BOX_EDGE_H * 3.15F) / 2.0F; + return powerTips.isEmpty() ? 0.0F : (1.0F - hBcY / (float) Settings.HEIGHT) * getTallestOffset(powerTips) - (getPowerTipHeight(powerTips.get(0)) + BOX_EDGE_H * 3.15F) / 2.0F; } public static float calculateToAvoidOffscreen(ArrayList powerTips, float hBcY) { @@ -174,7 +166,7 @@ private static void renderKeywords(float x, float y, SpriteBatch sb, ArrayList KEYWORDS; - private static ArrayList POWER_TIPS; + private static final ArrayList KEYWORDS; + private static final ArrayList POWER_TIPS; private static String HEADER; private static String BODY; private static AbstractCard card; @@ -51,7 +46,7 @@ public class TipHelperChamp2 { private static final float BOX_EDGE_H; private static final float BOX_BODY_H; private static final float BOX_W; - private static GlyphLayout gl; + private static final GlyphLayout gl; private static float textHeight; private static final float TEXT_OFFSET_X; private static final float HEADER_OFFSET_Y; @@ -156,10 +151,7 @@ public static void renderGenericTip(float x, float y, String header, String body private static void renderPowerTips(float x, float y, SpriteBatch sb, ArrayList powerTips) { float originalY = y; - boolean offsetLeft = false; - if (x > (float) Settings.WIDTH / 2.0F) { - offsetLeft = true; - } + boolean offsetLeft = x > (float) Settings.WIDTH / 2.0F; float offset = 0.0F; @@ -198,7 +190,7 @@ private static float getPowerTipHeight(PowerTip powerTip) { } public static float calculateAdditionalOffset(ArrayList powerTips, float hBcY) { - return powerTips.isEmpty() ? 0.0F : (1.0F - hBcY / (float) Settings.HEIGHT) * getTallestOffset(powerTips) - (getPowerTipHeight((PowerTip) powerTips.get(0)) + BOX_EDGE_H * 3.15F) / 2.0F; + return powerTips.isEmpty() ? 0.0F : (1.0F - hBcY / (float) Settings.HEIGHT) * getTallestOffset(powerTips) - (getPowerTipHeight(powerTips.get(0)) + BOX_EDGE_H * 3.15F) / 2.0F; } public static float calculateToAvoidOffscreen(ArrayList powerTips, float hBcY) { @@ -233,7 +225,7 @@ private static void renderKeywords(float x, float y, SpriteBatch sb, ArrayList KEYWORDS; - private static ArrayList POWER_TIPS; + private static final ArrayList KEYWORDS; + private static final ArrayList POWER_TIPS; private static String HEADER; private static String BODY; private static AbstractCard card; @@ -50,7 +45,7 @@ public class TipHelperChamp3 { private static final float BOX_EDGE_H; private static final float BOX_BODY_H; private static final float BOX_W; - private static GlyphLayout gl; + private static final GlyphLayout gl; private static float textHeight; private static final float TEXT_OFFSET_X; private static final float HEADER_OFFSET_Y; @@ -138,10 +133,7 @@ public static void renderGenericTip(float x, float y, String header, String body private static void renderPowerTips(float x, float y, SpriteBatch sb, ArrayList powerTips) { float originalY = y; - boolean offsetLeft = false; - if (x > (float) Settings.WIDTH / 2.0F) { - offsetLeft = true; - } + boolean offsetLeft = x > (float) Settings.WIDTH / 2.0F; float offset = 0.0F; @@ -180,7 +172,7 @@ private static float getPowerTipHeight(PowerTip powerTip) { } public static float calculateAdditionalOffset(ArrayList powerTips, float hBcY) { - return powerTips.isEmpty() ? 0.0F : (1.0F - hBcY / (float) Settings.HEIGHT) * getTallestOffset(powerTips) - (getPowerTipHeight((PowerTip) powerTips.get(0)) + BOX_EDGE_H * 3.15F) / 2.0F; + return powerTips.isEmpty() ? 0.0F : (1.0F - hBcY / (float) Settings.HEIGHT) * getTallestOffset(powerTips) - (getPowerTipHeight(powerTips.get(0)) + BOX_EDGE_H * 3.15F) / 2.0F; } public static float calculateToAvoidOffscreen(ArrayList powerTips, float hBcY) { @@ -215,7 +207,7 @@ private static void renderKeywords(float x, float y, SpriteBatch sb, ArrayList 0 && !this.purgeOnUse) { + if (m.hasPower(StrengthPower.POWER_ID) && m.getPower(StrengthPower.POWER_ID).amount > 0) { blck(); if (m != null) { atb(new VFXAction(new ClashEffect(m.hb.cX, m.hb.cY), 0.1F)); diff --git a/src/main/java/champ/cards/EnGarde.java b/src/main/java/champ/cards/EnGarde.java index efa5267171..29523b4f47 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 c170ccadb2..f8b6233f1d 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 668bc626da..8761e47b15 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 f89fa39ec0..ca3b2e8693 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"); @@ -28,7 +25,7 @@ public EnchantSword() { public void use(AbstractPlayer p, AbstractMonster m) { - atb(new SelectCardsInHandAction(1, CardCrawlGame.languagePack.getUIString("champ:EnchantUI").TEXT[1], c -> c.makeCopy().baseDamage > 0, (cards) -> { + atb(new SelectCardsInHandAction(1, CardCrawlGame.languagePack.getUIString("champ:EnchantUI").TEXT[1], c -> c.makeCopy().baseDamage >= 0 || c instanceof Riposte, (cards) -> { cards.get(0).baseDamage += magicNumber; })); @@ -39,7 +36,7 @@ public void use(AbstractPlayer p, AbstractMonster m) { public boolean canUse(AbstractPlayer p, AbstractMonster m) { boolean canUse = false; for (AbstractCard c : p.hand.group) { - if (c.baseDamage >= 0) { + if (c.baseDamage >= 0 || c instanceof Riposte) { canUse = true; break; } diff --git a/src/main/java/champ/cards/Encircle.java b/src/main/java/champ/cards/Encircle.java index b04daa29c8..479894ac96 100644 --- a/src/main/java/champ/cards/Encircle.java +++ b/src/main/java/champ/cards/Encircle.java @@ -1,11 +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; @@ -17,7 +17,7 @@ public class Encircle extends AbstractChampCard { //stupid intellij stuff attack, all_enemy, uncommon - private static final int DAMAGE = 5; + private static final int DAMAGE = 4; public Encircle() { super(ID, 1, CardType.ATTACK, CardRarity.COMMON, CardTarget.ALL_ENEMY); @@ -37,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()) { - atb(new DrawCardAction(magicNumber)); + 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 8e60b4af94..3089ed5b16 100644 --- a/src/main/java/champ/cards/Endure.java +++ b/src/main/java/champ/cards/Endure.java @@ -17,7 +17,7 @@ public Endure() { tags.add(ChampMod.OPENER); this.tags.add(ChampMod.OPENERDEFENSIVE); - baseBlock = block = 7; + baseBlock = block = 6; postInit(); loadJokeCardImage(this, "Endure.png"); @@ -34,12 +34,17 @@ public void applyPowersToBlock() { if (AbstractDungeon.player.hasPower(StrengthPower.POWER_ID)) { baseBlock += AbstractDungeon.player.getPower(StrengthPower.POWER_ID).amount; } + if (!upgraded && AbstractDungeon.player.hasPower(DexterityPower.POWER_ID)) { + baseBlock -= AbstractDungeon.player.getPower(DexterityPower.POWER_ID).amount; + } super.applyPowersToBlock(); baseBlock = realBaseBlock; isBlockModified = block != baseBlock; } public void upp() { - upgradeBlock(3); + upgradeBlock(2); + rawDescription = UPGRADE_DESCRIPTION; + initializeDescription(); } } \ No newline at end of file diff --git a/src/main/java/champ/cards/FaceSlap.java b/src/main/java/champ/cards/FaceSlap.java index c3aabc5d54..a3833fc85c 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 57d85733fd..47d20c52d6 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; @@ -26,7 +18,7 @@ public FalseCounter() { super(ID, 2, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); baseMagicNumber = magicNumber = 1; tags.add(ChampMod.FINISHER); - baseBlock = block = 12; + baseBlock = block = 8; loadJokeCardImage(this, "FalseCounter.png"); } @@ -41,6 +33,7 @@ public void use(AbstractPlayer p, AbstractMonster m) { } public void upp() { + upgradeBlock(2); upgradeMagicNumber(1); initializeDescription(); } diff --git a/src/main/java/champ/cards/FlashCut.java b/src/main/java/champ/cards/FlashCut.java index 2363490709..8d2f9f9670 100644 --- a/src/main/java/champ/cards/FlashCut.java +++ b/src/main/java/champ/cards/FlashCut.java @@ -20,7 +20,7 @@ public class FlashCut extends AbstractChampCard { private static final int BLOCK = 5; private static final int UPG_BLOCK = 2; - private static final int MAGIC = 5; + private static final int MAGIC = 4; 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 4260f14e59..68f2993170 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 1cbdcbc3de..c47d44ce3b 100644 --- a/src/main/java/champ/cards/GladiatorStyle.java +++ b/src/main/java/champ/cards/GladiatorStyle.java @@ -1,7 +1,6 @@ package champ.cards; import champ.ChampMod; -import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.DexterityPower; diff --git a/src/main/java/champ/cards/Haymaker.java b/src/main/java/champ/cards/Haymaker.java index e06762d358..350962e5f5 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 181f8d1cf4..6e601a65a2 100644 --- a/src/main/java/champ/cards/HeavySlash.java +++ b/src/main/java/champ/cards/HeavySlash.java @@ -2,20 +2,10 @@ import champ.actions.VigorWallopAction; 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.core.AbstractCreature; -import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.AbstractMonster; -import com.megacrit.cardcrawl.powers.watcher.VigorPower; -import com.megacrit.cardcrawl.unlock.UnlockTracker; -import com.megacrit.cardcrawl.vfx.combat.FlameBarrierEffect; -import downfall.powers.NextTurnPowerPower; -import guardian.actions.BraceWallopAction; -import hermit.util.Wiz; import static champ.ChampMod.loadJokeCardImage; @@ -30,7 +20,7 @@ public HeavySlash() { } public void use(AbstractPlayer p, AbstractMonster m) { - AbstractDungeon.actionManager.addToBottom((AbstractGameAction)new VigorWallopAction((AbstractCreature)m, (AbstractCreature)p, this.damage, this.damageTypeForTurn, AbstractGameAction.AttackEffect.SLASH_HEAVY)); + AbstractDungeon.actionManager.addToBottom(new VigorWallopAction(m, p, this.damage, this.damageTypeForTurn, AbstractGameAction.AttackEffect.SLASH_HEAVY)); } public void upp() { diff --git a/src/main/java/champ/cards/IgnorePain.java b/src/main/java/champ/cards/IgnorePain.java index 1f4c865e6c..3201c310d1 100644 --- a/src/main/java/champ/cards/IgnorePain.java +++ b/src/main/java/champ/cards/IgnorePain.java @@ -2,12 +2,8 @@ import champ.ChampMod; import champ.powers.PushThroughPower; -import champ.powers.ResolvePower; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; -import sneckomod.SneckoMod; - -import static champ.ChampMod.fatigue; import static champ.ChampMod.loadJokeCardImage; @@ -18,7 +14,7 @@ public class IgnorePain extends AbstractChampCard { //stupid intellij stuff skill, self, rare public IgnorePain() { - super(ID, 2, CardType.SKILL, CardRarity.RARE, CardTarget.SELF); + super(ID, 3, CardType.SKILL, CardRarity.RARE, CardTarget.SELF); exhaust = true; tags.add(ChampMod.FINISHER); // tags.add(ChampMod.TECHNIQUE); @@ -37,6 +33,6 @@ public void use(AbstractPlayer p, AbstractMonster m) { } public void upp() { - upgradeBaseCost(1); + upgradeBaseCost(2); } } \ No newline at end of file diff --git a/src/main/java/champ/cards/Improvising.java b/src/main/java/champ/cards/Improvising.java index 6e81bd4995..29e823153f 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; @@ -11,7 +10,7 @@ public class Improvising extends AbstractChampCard { public final static String ID = makeID("Improvising"); public Improvising() { - super(ID, 2, CardType.POWER, CardRarity.RARE, CardTarget.SELF); + super(ID, 1, CardType.POWER, CardRarity.RARE, CardTarget.SELF); postInit(); baseMagicNumber = magicNumber = 2; loadJokeCardImage(this, "Improvising.png"); @@ -22,6 +21,6 @@ public void use(AbstractPlayer p, AbstractMonster m) { } public void upp() { - upgradeBaseCost(1); + 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 09fc441a78..097b38bdb6 100644 --- a/src/main/java/champ/cards/Lariat.java +++ b/src/main/java/champ/cards/Lariat.java @@ -1,18 +1,12 @@ package champ.cards; -import automaton.actions.AddToFuncAction; import automaton.actions.EasyXCostAction; -import automaton.cards.FormatEncoded; -import collector.powers.NextTurnReservePower; -import com.megacrit.cardcrawl.cards.AbstractCard; 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; -import downfall.downfallMod; import static champ.ChampMod.loadJokeCardImage; -import static collector.util.Wiz.applyToSelf; -import static collector.util.Wiz.atb; public class Lariat extends AbstractChampCard { public final static String ID = makeID("Lariat"); @@ -39,6 +33,12 @@ public void use(AbstractPlayer p, AbstractMonster m) { } + @Override + public void initializeDescription() { + super.initializeDescription(); + this.keywords.add(GameDictionary.STANCE.NAMES[0].toLowerCase()); + } + public void upp() { upgradeBlock(2); } diff --git a/src/main/java/champ/cards/LastStand.java b/src/main/java/champ/cards/LastStand.java index 4843c543df..79df8c4190 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,7 +60,7 @@ public String getLimitBreak() { } public void upp() { - upgradeMagicNumber(3); - //upgradeBaseCost(0); + //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 3452db76f4..bd7541e511 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; diff --git a/src/main/java/champ/cards/PreciseThrust.java b/src/main/java/champ/cards/PreciseThrust.java index 98e67e41b9..c801d6ac88 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 b6bc7b719f..f08d75b95b 100644 --- a/src/main/java/champ/cards/PreemptiveStrike.java +++ b/src/main/java/champ/cards/PreemptiveStrike.java @@ -2,14 +2,11 @@ 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 com.megacrit.cardcrawl.powers.FrailPower; import sneckomod.SneckoMod; import static champ.ChampMod.loadJokeCardImage; diff --git a/src/main/java/champ/cards/RageSigil.java b/src/main/java/champ/cards/RageSigil.java index 597a1b6c0c..94a29a91e2 100644 --- a/src/main/java/champ/cards/RageSigil.java +++ b/src/main/java/champ/cards/RageSigil.java @@ -14,7 +14,7 @@ public class RageSigil extends AbstractChampCard { public RageSigil() { super(ID, 0, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); baseBlock = 2; - baseMagicNumber = magicNumber = 3; + baseMagicNumber = magicNumber = 2; tags.add(ChampMod.OPENER); this.tags.add(ChampMod.OPENERDEFENSIVE); postInit(); diff --git a/src/main/java/champ/cards/RecklessLeap.java b/src/main/java/champ/cards/RecklessLeap.java index 565eb40a9c..95e2c39e1d 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; diff --git a/src/main/java/champ/cards/RisingSlash.java b/src/main/java/champ/cards/RisingSlash.java index 8fc5612746..c5677807de 100644 --- a/src/main/java/champ/cards/RisingSlash.java +++ b/src/main/java/champ/cards/RisingSlash.java @@ -12,11 +12,11 @@ public class RisingSlash extends AbstractChampCard { public final static String ID = makeID("RisingSlash"); - //Todo: rework to be more consistent. public RisingSlash() { super(ID, 1, CardType.ATTACK, CardRarity.COMMON, CardTarget.ENEMY); - baseDamage = 8; + baseDamage = 5; tags.add(CardTags.STRIKE); + this.selfRetain = true; loadJokeCardImage(this, "RisingSlash.png"); } @@ -35,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 459118ac8f..0acdea027f 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; @@ -22,8 +12,8 @@ public class SetATrap extends AbstractChampCard { public SetATrap() { super(ID, 1, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.ALL); - baseBlock = block = 6; - baseMagicNumber = magicNumber = 2; + baseBlock = block = 8; + baseMagicNumber = magicNumber = 1; tags.add(ChampMod.COMBO); tags.add(ChampMod.COMBODEFENSIVE); postInit(); diff --git a/src/main/java/champ/cards/Shatter.java b/src/main/java/champ/cards/Shatter.java index e3f2868af9..447e8fca50 100644 --- a/src/main/java/champ/cards/Shatter.java +++ b/src/main/java/champ/cards/Shatter.java @@ -1,20 +1,15 @@ package champ.cards; import champ.ChampMod; -import champ.powers.UltimateFormPower; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; -import com.megacrit.cardcrawl.actions.common.RemoveAllBlockAction; -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.ArtifactPower; import com.megacrit.cardcrawl.powers.VulnerablePower; import com.megacrit.cardcrawl.powers.WeakPower; import com.megacrit.cardcrawl.stances.NeutralStance; import hermit.cards.AbstractDynamicCard; -import sneckomod.SneckoMod; import static champ.ChampMod.loadJokeCardImage; @@ -26,7 +21,7 @@ public class Shatter extends AbstractChampCard { public Shatter() { super(ID, 2, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); - baseDamage = 10; + baseDamage = 14; baseMagicNumber = magicNumber = 1; postInit(); //tags.add(CardTags.STRIKE); @@ -54,9 +49,9 @@ public void triggerOnGlowCheck() { // it glows now. } - public void upgrade() { - upgradeName(); - upgradeDamage(3); + public void upp() { + upgradeDamage(2); 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 7a7156a966..7e1908d948 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 2cd2e10003..e8cf1d9d66 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; @@ -22,7 +20,8 @@ public ShieldThrow() { super(ID, 2, CardType.ATTACK, CardRarity.RARE, CardTarget.ENEMY); // baseBlock = block = 0; baseMagicNumber = magicNumber = 2; - // tags.add(ChampMod.FINISHER); + tags.add(ChampMod.COMBODEFENSIVE); + tags.add(ChampMod.COMBO); postInit(); loadJokeCardImage(this, "ShieldThrow.png"); } @@ -36,11 +35,16 @@ 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(); } + @Override + public void triggerOnGlowCheck() { + glowColor = dcombo() ? GOLD_BORDER_GLOW_COLOR : Color.RED.cpy(); + } + public void applyPowers() { this.baseDamage = AbstractDungeon.player.currentBlock; super.applyPowers(); diff --git a/src/main/java/champ/cards/StanceDance.java b/src/main/java/champ/cards/StanceDance.java index 481d51272d..02bad98b8f 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; diff --git a/src/main/java/champ/cards/StanceDanceCrown.java b/src/main/java/champ/cards/StanceDanceCrown.java index c0e191c2dd..6be5e1fc3f 100644 --- a/src/main/java/champ/cards/StanceDanceCrown.java +++ b/src/main/java/champ/cards/StanceDanceCrown.java @@ -2,26 +2,13 @@ import basemod.patches.com.megacrit.cardcrawl.screens.compendium.CardLibraryScreen.NoCompendium; 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; - -import java.util.ArrayList; import static champ.ChampMod.loadJokeCardImage; @NoCompendium -public class StanceDanceCrown extends AbstractChampCard implements OctopusCard { +public class StanceDanceCrown extends AbstractChampCard { public final static String ID = makeID("StanceDanceCrown"); @@ -30,44 +17,19 @@ public class StanceDanceCrown extends AbstractChampCard implements OctopusCard { 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) { - atb(new OctoChoiceAction(m, this)); - postInit(); - } - - public ArrayList choiceList() { - ArrayList cardList = new ArrayList<>(); - cardList.add(new OctoChoiceCard("octo:OctoBerserk", this.name, ChampMod.makeCardPath("OctoStanceBerserker.png"), this.EXTENDED_DESCRIPTION[0])); - cardList.add(new OctoChoiceCard("octo:OctoDefense", this.name, ChampMod.makeCardPath("OctoStanceDefensive.png"), this.EXTENDED_DESCRIPTION[1])); - return cardList; - } - - public void doChoiceStuff(AbstractMonster m, OctoChoiceCard card) { - switch (card.cardID) { - case "octo:OctoBerserk": - ChampMod.berserkOpen(); - BerserkerStance bs = new BerserkerStance(); - // bs.techique(); - // if (upgraded) bs.techique(); - break; - case "octo:OctoDefense": - ChampMod.defenseOpen(); - DefensiveStance ds = new DefensiveStance(); - // ds.techique(); - // if (upgraded) ds.techique(); - break; - } - - // AbstractDungeon.player.useJumpAnimation(); - // atb(new VFXAction(new StanceDanceEffect(AbstractDungeon.player, false, true, false), 0.7F)); - + 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/StrikeOfGenius.java b/src/main/java/champ/cards/StrikeOfGenius.java index 58c9e93c65..94d1144bd4 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 ca36f62233..b0fa798cde 100644 --- a/src/main/java/champ/cards/SwordSigil.java +++ b/src/main/java/champ/cards/SwordSigil.java @@ -1,9 +1,8 @@ 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 downfall.downfallMod; import static champ.ChampMod.loadJokeCardImage; @@ -24,6 +23,12 @@ 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(1); // upgradeCool(2); diff --git a/src/main/java/champ/cards/SwordThrow.java b/src/main/java/champ/cards/SwordThrow.java index 6b910e3324..a7deeb25a5 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 cd940cea15..d10c986cac 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 6417f65b39..2821dfe10a 100644 --- a/src/main/java/champ/cards/TripleStrike.java +++ b/src/main/java/champ/cards/TripleStrike.java @@ -10,7 +10,6 @@ import expansioncontent.cardmods.EtherealMod; import expansioncontent.cardmods.ExhaustMod; import expansioncontent.cardmods.PropertiesMod; -import expansioncontent.expansionContentMod; import static champ.ChampMod.loadJokeCardImage; @@ -31,8 +30,6 @@ public TripleStrike() { 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()); diff --git a/src/main/java/champ/cards/UltimateStance.java b/src/main/java/champ/cards/UltimateStance.java index a6fd2c2795..89d92fa3ef 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 b63c8b3b29..dff624de73 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; diff --git a/src/main/java/champ/cards/ViciousMockery.java b/src/main/java/champ/cards/ViciousMockery.java index 66b1d74200..7c08586fd6 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 = 3; baseDownfallMagic = downfallMagic = 1; postInit(); loadJokeCardImage(this, "ViciousMockery.png"); @@ -45,6 +41,12 @@ 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); upgradeDownfall(1); diff --git a/src/main/java/champ/cards/WindUp.java b/src/main/java/champ/cards/WindUp.java index b6d7cd811a..10bf054583 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 6e96528df8..ee5cd4c773 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 { @@ -58,8 +44,8 @@ public class BackToBasicsChamp extends AbstractImageEvent { } private BackToBasicsChamp.CUR_SCREEN screen; - private List cardsUpgraded; - private ArrayList cardsToRemove; + private final List cardsUpgraded; + private final ArrayList cardsToRemove; public BackToBasicsChamp() { super(NAME, DIALOG_1, "images/events/backToBasics.jpg"); @@ -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 25a5406e5d..16e5a51335 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/Gym.java b/src/main/java/champ/events/Gym.java index 52f7b02f84..ccd57b8ee6 100644 --- a/src/main/java/champ/events/Gym.java +++ b/src/main/java/champ/events/Gym.java @@ -33,7 +33,7 @@ public class Gym extends AbstractImageEvent { } private CurScreen screen; - private int maxHP = 10; + private final int maxHP = 10; private boolean pickCard = false; private StanceChosen stance; diff --git a/src/main/java/champ/events/Library_Champ.java b/src/main/java/champ/events/Library_Champ.java index 96e34f0d6f..81335a39f7 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; @@ -42,7 +40,7 @@ public class Library_Champ extends AbstractImageEvent { private boolean pickCard = false; private static final float HP_HEAL_PERCENT = 0.33F; private static final float A_2_HP_HEAL_PERCENT = 0.2F; - private int healAmt; + private final int healAmt; public Library_Champ() { super(NAME, DIALOG_1, "images/events/library.jpg"); @@ -70,7 +68,7 @@ public Library_Champ() { public void update() { super.update(); if (this.pickCard && !AbstractDungeon.isScreenUp && !AbstractDungeon.gridSelectScreen.selectedCards.isEmpty()) { - AbstractCard c = ((AbstractCard)AbstractDungeon.gridSelectScreen.selectedCards.get(0)).makeCopy(); + AbstractCard c = AbstractDungeon.gridSelectScreen.selectedCards.get(0).makeCopy(); logMetricObtainCard(ID, "Read", c); AbstractDungeon.effectList.add(new ShowCardAndObtainEffect(c, (float)Settings.WIDTH / 2.0F, (float)Settings.HEIGHT / 2.0F)); AbstractDungeon.gridSelectScreen.selectedCards.clear(); @@ -165,7 +163,7 @@ private String getBook() { list.add(DESCRIPTIONS[2]); list.add(DESCRIPTIONS[3]); list.add(DESCRIPTIONS[4]); - return (String)list.get(MathUtils.random(2)); + return list.get(MathUtils.random(2)); } private AbstractRelic getRandomFace() { diff --git a/src/main/java/champ/events/MinorLeagueArena.java b/src/main/java/champ/events/MinorLeagueArena.java index 6ac6e9994d..1b8fdf1381 100644 --- a/src/main/java/champ/events/MinorLeagueArena.java +++ b/src/main/java/champ/events/MinorLeagueArena.java @@ -1,21 +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 hermit.relics.Horseshoe; -import hermit.relics.StraightRazor; -import slimebound.SlimeboundMod; public class MinorLeagueArena extends AbstractImageEvent { public static final String ID = "champ:MinorLeagueArena"; diff --git a/src/main/java/champ/events/TechniqueTome.java b/src/main/java/champ/events/TechniqueTome.java index e529f1d68a..b6085c8037 100644 --- a/src/main/java/champ/events/TechniqueTome.java +++ b/src/main/java/champ/events/TechniqueTome.java @@ -38,7 +38,7 @@ public class TechniqueTome extends AbstractImageEvent { private boolean pickCard = false; private int hpCost = 5; private int hpSpent = 0; - private ArrayList cardsTeched = new ArrayList<>(); + private final ArrayList cardsTeched = new ArrayList<>(); private int prideGained; public TechniqueTome() { @@ -77,11 +77,17 @@ public void update() { } this.hpCost = this.hpCost * 2; if (this.hpCost > 20) { - - this.imageEventText.updateDialogOption(0, OPTIONS[5], new PrideStandard()); + if (getNonTechniqueCards().size() == 0) { + this.imageEventText.updateDialogOption(0, OPTIONS[5], true); + } else { + this.imageEventText.updateDialogOption(0, OPTIONS[5], new PrideStandard()); + } } else { - - this.imageEventText.updateDialogOption(0, OPTIONS[0] + this.hpCost + OPTIONS[1]); + if (getNonTechniqueCards().size() == 0) { + this.imageEventText.updateDialogOption(0, OPTIONS[0] + this.hpCost + OPTIONS[1], true); + } else { + this.imageEventText.updateDialogOption(0, OPTIONS[0] + this.hpCost + OPTIONS[1]); + } } } diff --git a/src/main/java/champ/monsters/BlackKnight.java b/src/main/java/champ/monsters/BlackKnight.java index d70798abbd..6fabd53010 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 { @@ -57,17 +44,17 @@ public class BlackKnight extends AbstractMonster public static final int SLAP_DMG = 12; public static final int A_2_SLASH_DMG = 18; public static final int A_2_SLAP_DMG = 14; - private int slashDmg; - private int executeDmg; - private int slapDmg; - private int blockAmt; + private final int slashDmg; + private final int executeDmg; + private final int slapDmg; + private final int blockAmt; private static final int DEBUFF_AMT = 2; private static final int EXEC_COUNT = 2; private static final int FORGE_AMT = 5; private static final int BLOCK_AMT = 15; private static final int A_9_FORGE_AMT = 6; - private static final int A_9_BLOCK_AMT = 18; private static final int A_19_FORGE_AMT = 7; private static final int A_19_BLOCK_AMT = 20; private static final int STR_AMT = 2; private static final int A_4_STR_AMT = 3; private static final int A_19_STR_AMT = 4; private int strAmt; private int forgeAmt; private int numTurns = 0; - private int forgeTimes = 0; private int forgeThreshold = 2; + private static final int A_9_BLOCK_AMT = 18; private static final int A_19_FORGE_AMT = 7; private static final int A_19_BLOCK_AMT = 20; private static final int STR_AMT = 2; private static final int A_4_STR_AMT = 3; private static final int A_19_STR_AMT = 4; private final int strAmt; private final int forgeAmt; private int numTurns = 0; + private int forgeTimes = 0; private final int forgeThreshold = 2; private boolean thresholdReached = false; private boolean firstTurn = true; public BlackKnight() { @@ -164,7 +151,7 @@ public void takeTurn() AbstractDungeon.actionManager.addToBottom(new DamageAction(AbstractDungeon.player, - (DamageInfo)this.damage.get(0), AbstractGameAction.AttackEffect.NONE)); + this.damage.get(0), AbstractGameAction.AttackEffect.NONE)); break; case 2: AbstractDungeon.actionManager.addToBottom(new com.megacrit.cardcrawl.actions.common.GainBlockAction(this, this, this.blockAmt)); @@ -184,7 +171,7 @@ public void takeTurn() AbstractDungeon.actionManager.addToBottom(new DamageAction(AbstractDungeon.player, - (DamageInfo)this.damage.get(1), AbstractGameAction.AttackEffect.NONE)); + this.damage.get(1), AbstractGameAction.AttackEffect.NONE)); AbstractDungeon.actionManager.addToBottom(new VFXAction(new GoldenSlashEffect(AbstractDungeon.player.hb.cX + 60.0F * Settings.scale, AbstractDungeon.player.hb.cY, true), vfxSpeed)); @@ -194,13 +181,13 @@ public void takeTurn() AbstractDungeon.actionManager.addToBottom(new DamageAction(AbstractDungeon.player, - (DamageInfo)this.damage.get(1), AbstractGameAction.AttackEffect.NONE)); + this.damage.get(1), AbstractGameAction.AttackEffect.NONE)); break; case 4: AbstractDungeon.actionManager.addToBottom(new SFXAction("MONSTER_CHAMP_SLAP")); AbstractDungeon.actionManager.addToBottom(new AnimateFastAttackAction(this)); AbstractDungeon.actionManager.addToBottom(new DamageAction(AbstractDungeon.player, - (DamageInfo)this.damage.get(2), AbstractGameAction.AttackEffect.BLUNT_LIGHT)); + this.damage.get(2), AbstractGameAction.AttackEffect.BLUNT_LIGHT)); AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(AbstractDungeon.player, this, new com.megacrit.cardcrawl.powers.FrailPower(AbstractDungeon.player, 2, true), 2)); @@ -273,7 +260,7 @@ protected void getMove(int num) } if ((!lastMove((byte)3)) && (!lastMoveBefore((byte)3)) && (this.thresholdReached)) { - setMove(EXECUTE_NAME, (byte)3, AbstractMonster.Intent.ATTACK, ((DamageInfo)this.damage.get(1)).base, 2, true); + setMove(EXECUTE_NAME, (byte)3, AbstractMonster.Intent.ATTACK, this.damage.get(1).base, 2, true); return; } @@ -307,14 +294,14 @@ else if ((!lastMove((byte)2)) && (this.forgeTimes < this.forgeThreshold) && (num if ((!lastMove((byte)4)) && (num <= 55)) { - setMove(SLAP_NAME, (byte)4, AbstractMonster.Intent.ATTACK_DEBUFF, ((DamageInfo)this.damage.get(2)).base); + setMove(SLAP_NAME, (byte)4, AbstractMonster.Intent.ATTACK_DEBUFF, this.damage.get(2).base); return; } if (!lastMove((byte)1)) { - setMove((byte)1, AbstractMonster.Intent.ATTACK, ((DamageInfo)this.damage.get(0)).base); + setMove((byte)1, AbstractMonster.Intent.ATTACK, this.damage.get(0).base); } else { - setMove(SLAP_NAME, (byte)4, AbstractMonster.Intent.ATTACK_DEBUFF, ((DamageInfo)this.damage.get(2)).base); + setMove(SLAP_NAME, (byte)4, AbstractMonster.Intent.ATTACK_DEBUFF, this.damage.get(2).base); } } diff --git a/src/main/java/champ/patches/NukeVigorPatch.java b/src/main/java/champ/patches/NukeVigorPatch.java new file mode 100644 index 0000000000..afac045f94 --- /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 f2d9654ae4..a45c42e726 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 68fc20c108..66d8f49f08 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 a7fbd5011d..54845b52d5 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 0000000000..cd5f4f85bb --- /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 d9648cb414..a32f9bf198 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 ed3db18230..c01ea90524 100644 --- a/src/main/java/champ/potions/CounterstrikePotion.java +++ b/src/main/java/champ/potions/CounterstrikePotion.java @@ -1,13 +1,12 @@ 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; 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.PowerTip; @@ -32,7 +31,9 @@ public void initializeData() { description = DESCRIPTIONS[0] + potency + DESCRIPTIONS[1]; this.tips.clear(); this.tips.add(new PowerTip(this.name, this.description)); - this.tips.add(new PowerTip(TipHelper.capitalize(BaseMod.getKeywordProper("champ:counter")), GameDictionary.keywords.get("champ:counter"))); + if (Settings.language == Settings.GameLanguage.ENG) { + this.tips.add(new PowerTip(TipHelper.capitalize(BaseMod.getKeywordProper("champ:counter")), GameDictionary.keywords.get("champ:counter"))); + } } public void use(AbstractCreature target) { diff --git a/src/main/java/champ/potions/OpenerPotion.java b/src/main/java/champ/potions/OpenerPotion.java index f73122ba48..0fb64c9ded 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 23368d0bf5..a03e5f859a 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 24b24d1a89..260e285a34 100644 --- a/src/main/java/champ/potions/UltimateStancePotion.java +++ b/src/main/java/champ/potions/UltimateStancePotion.java @@ -1,16 +1,15 @@ 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; 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.PowerTip; @@ -36,7 +35,9 @@ public void initializeData() { this.description = potionStrings.DESCRIPTIONS[0] + this.potency + potionStrings.DESCRIPTIONS[1]; this.tips.clear(); this.tips.add(new PowerTip(this.name, this.description)); - this.tips.add(new PowerTip(TipHelper.capitalize(BaseMod.getKeywordProper("champ:ultimate")), GameDictionary.keywords.get("champ:ultimate"))); + if (Settings.language == Settings.GameLanguage.ENG) { + this.tips.add(new PowerTip(TipHelper.capitalize(BaseMod.getKeywordProper("champ:ultimate")), GameDictionary.keywords.get("champ:ultimate"))); + } } public void use(AbstractCreature target) { diff --git a/src/main/java/champ/powers/BerserkerStylePower.java b/src/main/java/champ/powers/BerserkerStylePower.java index 9613095c71..ef63562101 100644 --- a/src/main/java/champ/powers/BerserkerStylePower.java +++ b/src/main/java/champ/powers/BerserkerStylePower.java @@ -26,7 +26,7 @@ public BerserkerStylePower(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); diff --git a/src/main/java/champ/powers/CalledShotPower.java b/src/main/java/champ/powers/CalledShotPower.java index ae1c38b6c0..fc7c45611b 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 e03cfa1013..40b7cfc4a7 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); @@ -83,9 +81,7 @@ public int onAttacked(DamageInfo info, int damageAmount) { public void stackPower(int stackAmount) { if (AbstractDungeon.player.hasRelic(PowerArmor.ID)) if (amount + stackAmount > PowerArmor.CAP_RESOLVE_ETC) { - PowerArmor PowerArmorInstance = new PowerArmor(); - PowerArmorInstance.flash(); - addToTop(new RelicAboveCreatureAction(AbstractDungeon.player, PowerArmorInstance)); + ((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 6af8043fce..f6e6641ebe 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 { @@ -29,7 +28,7 @@ public DancingMasterPower(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); diff --git a/src/main/java/champ/powers/DefensiveStylePower.java b/src/main/java/champ/powers/DefensiveStylePower.java index cfb7aa8c84..5d94da6586 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 { @@ -30,7 +26,7 @@ public DefensiveStylePower(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); diff --git a/src/main/java/champ/powers/DrawLessNextTurnPower.java b/src/main/java/champ/powers/DrawLessNextTurnPower.java index 3502d51939..11609a4183 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 6dd70ed4cb..a04e20a9ba 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 e174cb7107..77fc5f7295 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 e275e24c3f..85c38a5e7e 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 79c15fc2c3..e214bd7f24 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 05a66fd609..27420fafe1 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 530b1812a0..7bcfdcc6e0 100644 --- a/src/main/java/champ/powers/FocusedBerPower.java +++ b/src/main/java/champ/powers/FocusedBerPower.java @@ -2,20 +2,17 @@ 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; diff --git a/src/main/java/champ/powers/FocusedDefPower.java b/src/main/java/champ/powers/FocusedDefPower.java index e688d9dbc9..e89fcc7055 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 dadc7b05cc..9f6610f101 100644 --- a/src/main/java/champ/powers/GladiatorFormPower.java +++ b/src/main/java/champ/powers/GladiatorFormPower.java @@ -1,5 +1,6 @@ package champ.powers; +import automaton.cards.Branch; import basemod.interfaces.CloneablePowerInterface; import champ.ChampMod; import champ.cards.CrookedStrike; @@ -47,11 +48,18 @@ public GladiatorFormPower(final int amount) { @Override public void onUseCard(AbstractCard card, UseCardAction action) { - if (!(card instanceof CrookedStrike)) { + 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 740b626921..343d4cdf03 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 index eafbe47cdc..9ec5473f51 100644 --- a/src/main/java/champ/powers/HonePower.java +++ b/src/main/java/champ/powers/HonePower.java @@ -12,10 +12,6 @@ import com.megacrit.cardcrawl.localization.PowerStrings; import com.megacrit.cardcrawl.powers.AbstractPower; import downfall.util.TextureLoader; -import hermit.HermitMod; -import hermit.powers.MaintenanceStrikePower; - -import static hermit.HermitMod.makePowerPath; public class HonePower extends AbstractPower implements CloneablePowerInterface { public AbstractCreature source; diff --git a/src/main/java/champ/powers/ImprovisingPower.java b/src/main/java/champ/powers/ImprovisingPower.java index c7dfcda3af..324ea96b30 100644 --- a/src/main/java/champ/powers/ImprovisingPower.java +++ b/src/main/java/champ/powers/ImprovisingPower.java @@ -3,11 +3,8 @@ import basemod.interfaces.CloneablePowerInterface; import champ.ChampMod; import champ.stances.AbstractChampStance; -import champ.stances.BerserkerStance; -import champ.stances.DefensiveStance; 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; @@ -29,7 +26,7 @@ public ImprovisingPower(final int amount) { this.amount = amount; this.owner = AbstractDungeon.player; 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); @@ -47,16 +44,16 @@ public void onChangeStance(AbstractStance oldStance, AbstractStance newStance) { } } - @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 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() { diff --git a/src/main/java/champ/powers/IronFortressPower.java b/src/main/java/champ/powers/IronFortressPower.java index 9a53aaeb73..ddc7ba0894 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; @@ -31,7 +28,7 @@ public IronFortressPower(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); diff --git a/src/main/java/champ/powers/LastStandModPower.java b/src/main/java/champ/powers/LastStandModPower.java index b5a69c47f0..2ca6a54d51 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; @@ -73,7 +72,7 @@ public void update(int slot) { super.update(slot); if (this.owner.currentHealth < this.owner.maxHealth / 2){ if (this.timer <= 0F){ - ArrayList effect2 = (ArrayList) ReflectionHacks.getPrivate(this, AbstractPower.class, "effect"); + ArrayList effect2 = ReflectionHacks.getPrivate(this, AbstractPower.class, "effect"); effect2.add(new GainPowerEffect(this)); this.timer = 1F; } else { diff --git a/src/main/java/champ/powers/LastStandPower.java b/src/main/java/champ/powers/LastStandPower.java index 0177c92c6c..ad84b9a3cc 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; @@ -40,7 +38,7 @@ public LastStandPower(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); diff --git a/src/main/java/champ/powers/NoBlockNextTurnPower.java b/src/main/java/champ/powers/NoBlockNextTurnPower.java index 47d38e4ad4..1d821b0f66 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 004f24aa70..35d8b35c58 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 1d2c1d8846..62cf358d36 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 { @@ -39,7 +34,7 @@ public ResolvePower(final int amount) { this.updateDescription(); } - private int strengthGrantedByResolve = 0; + private final int strengthGrantedByResolve = 0; /* @Override diff --git a/src/main/java/champ/powers/ShieldWallPower.java b/src/main/java/champ/powers/ShieldWallPower.java index 44d100b6e7..5fc0d86384 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 83a53dd67b..62f93a3094 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; @@ -14,7 +12,6 @@ import com.megacrit.cardcrawl.powers.AbstractPower; import com.megacrit.cardcrawl.unlock.UnlockTracker; import expansioncontent.actions.EchoACardAction; -import expansioncontent.cardmods.PropertiesMod; import sneckomod.cards.unknowns.AbstractUnknownCard; import downfall.util.TextureLoader; @@ -36,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); diff --git a/src/main/java/champ/powers/StrikeOfGeniusUpgradedPower.java b/src/main/java/champ/powers/StrikeOfGeniusUpgradedPower.java index defaaa54bc..4a178e54fd 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; @@ -15,7 +13,6 @@ import com.megacrit.cardcrawl.unlock.UnlockTracker; import downfall.util.TextureLoader; import expansioncontent.actions.EchoACardAction; -import expansioncontent.cardmods.PropertiesMod; import java.util.ArrayList; @@ -35,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); diff --git a/src/main/java/champ/powers/UltimateFormNextTurnPower.java b/src/main/java/champ/powers/UltimateFormNextTurnPower.java index 4f68879db3..d0c9579de9 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 ee4b95d177..2febb849b8 100644 --- a/src/main/java/champ/powers/UltimateFormPower.java +++ b/src/main/java/champ/powers/UltimateFormPower.java @@ -2,13 +2,10 @@ import basemod.interfaces.CloneablePowerInterface; import champ.ChampMod; -import champ.stances.BerserkerStance; -import champ.stances.DefensiveStance; import champ.stances.UltimateStance; 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; @@ -55,13 +52,6 @@ public void atEndOfRound() { if (amount == 1) { flash(); AbstractDungeon.actionManager.addToBottom(new ChangeStanceAction(NeutralStance.STANCE_ID)); - if (AbstractDungeon.player.hasPower(ImprovisingPower.POWER_ID)) { - if (AbstractDungeon.cardRandomRng.randomBoolean()) { - addToBot(new ChangeStanceAction(new BerserkerStance())); - } else { - addToBot(new ChangeStanceAction(new DefensiveStance())); - } - } } } diff --git a/src/main/java/champ/relics/Barbells.java b/src/main/java/champ/relics/Barbells.java index 6414f7246e..a0548ef01a 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; @@ -58,6 +99,6 @@ public boolean canSpawn() { @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 13425f499e..544d5015c6 100644 --- a/src/main/java/champ/relics/BerserkersGuideToSlaughter.java +++ b/src/main/java/champ/relics/BerserkersGuideToSlaughter.java @@ -2,11 +2,8 @@ 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.*; @@ -17,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.COMMON, 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(); - vigor(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 efb5f738c0..c6964a038c 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 84ff7f8e04..41aaf11684 100644 --- a/src/main/java/champ/relics/ChampionCrown.java +++ b/src/main/java/champ/relics/ChampionCrown.java @@ -2,26 +2,11 @@ import basemod.abstracts.CustomRelic; import champ.ChampMod; -import champ.actions.OpenerReduceCostAction; -import champ.cards.StanceDance; import champ.cards.StanceDanceCrown; -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 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.actions.OctoChoiceAction; import downfall.util.TextureLoader; import com.badlogic.gdx.graphics.Texture; -import theHexaghost.cards.MatchstickFloat; import static champ.ChampMod.makeRelicOutlinePath; import static champ.ChampMod.makeRelicPath; @@ -33,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); } /* @@ -46,13 +31,28 @@ public void onChangeStance(AbstractStance prevStance, AbstractStance newStance) } */ + @Override public void atBattleStart() { - super.atBattleStart(); - StanceDanceCrown stance = new StanceDanceCrown(); - addToBot(new OctoChoiceAction(null, stance)); + 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 ee352c9f6c..d31aa6d08d 100644 --- a/src/main/java/champ/relics/ChampionCrownUpgraded.java +++ b/src/main/java/champ/relics/ChampionCrownUpgraded.java @@ -1,26 +1,21 @@ package champ.relics; -import automaton.AutomatonMod; -import automaton.relics.BronzeCore; 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")); @@ -28,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 onVictory() { + this.counter = 0; } @Override - public void atBattleStart() { - addToBot(new ChangeStanceAction(UltimateStance.STANCE_ID)); - addToBot(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new UltimateFormPower(3), 3)); + 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)) { @@ -71,7 +109,7 @@ public String getUpdatedDescription() { sb.append("[#").append(ChampMod.placeholderColor.toString()).append("]"); } - return DESCRIPTIONS[0] + sb + DESCRIPTIONS[1]; + 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 bdf84b65ee..d431efe169 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.UNCOMMON, 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 5c6dd300bf..adfee313c4 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 12896c8b64..25c9487451 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 9ffbd779e9..296724e95d 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; @@ -24,11 +21,34 @@ public class FightingForDummies extends CustomRelic { public FightingForDummies() { 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) { + 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 08a08488ef..17e8cb257b 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 f2c1cee623..62e2f6e947 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 af9536d2ab..2c5f102e19 100644 --- a/src/main/java/champ/relics/PowerArmor.java +++ b/src/main/java/champ/relics/PowerArmor.java @@ -1,29 +1,58 @@ 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; + } + + return var1.amount != 0; + } + + return true; } public void onEquip() { + REMOVED = 0; ++AbstractDungeon.player.energy.energyMaster; } @@ -31,9 +60,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 index 7cc3ff5982..f31f7934b7 100644 --- a/src/main/java/champ/relics/RageAmulet.java +++ b/src/main/java/champ/relics/RageAmulet.java @@ -1,21 +1,16 @@ package champ.relics; +import automaton.cards.Branch; import basemod.abstracts.CustomRelic; import champ.ChampMod; import champ.cards.CrookedStrike; -import champ.powers.CounterPower; -import collector.CollectorCollection; -import collector.actions.DrawCardFromCollectionAction; -import collector.relics.HolidayCoal; import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; -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.powers.AbstractPower; import com.megacrit.cardcrawl.powers.StrengthPower; import com.megacrit.cardcrawl.powers.watcher.VigorPower; -import downfall.powers.NextTurnPowerPower; import downfall.util.TextureLoader; import com.badlogic.gdx.graphics.Texture; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; @@ -23,15 +18,12 @@ import static champ.ChampMod.makeRelicOutlinePath; import static champ.ChampMod.makeRelicPath; -import static collector.util.Wiz.atb; -import static collector.util.Wiz.att; 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")); - private boolean triggeredThisTurn = false; int remainingVigor = 0; private static final int VIGREQ = 8; public RageAmulet() { @@ -51,12 +43,16 @@ public void onVictory() { @Override public void onUseCard(AbstractCard card, UseCardAction action) { - if (!(card instanceof CrookedStrike)) { + 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; diff --git a/src/main/java/champ/relics/SignatureFinisher.java b/src/main/java/champ/relics/SignatureFinisher.java index 355ca1dc77..63a3f77920 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 = true; + 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,38 @@ 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; + } + } + + @Override public void onEquip() { cardSelected = false; @@ -89,9 +139,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 +154,66 @@ 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(); 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 e0a5e40fd0..49ed9ffaaa 100644 --- a/src/main/java/champ/relics/SpectersHand.java +++ b/src/main/java/champ/relics/SpectersHand.java @@ -1,13 +1,10 @@ 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; diff --git a/src/main/java/champ/stances/AbstractChampStance.java b/src/main/java/champ/stances/AbstractChampStance.java index 1104561c50..7c2bfb3f0f 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 { @@ -53,15 +34,15 @@ public abstract class AbstractChampStance extends AbstractStance { public Color textColor = new Color(1F, 1F, 1F, 1F); - public float animAlphaBySlot[] = new float[3]; - private boolean useBrightTexture[] = new boolean[3]; + public float[] animAlphaBySlot = new float[3]; + private final boolean[] useBrightTexture = new boolean[3]; public static final float whiteOverlayTimer = .4F; - private Texture whiteOverlay = TextureLoader.getTexture(HexaMod.makeUIPath("whiteOverlay.png")); + private final Texture whiteOverlay = TextureLoader.getTexture(HexaMod.makeUIPath("whiteOverlay.png")); - private static long sfxId = -1L; + private static final long sfxId = -1L; public String STANCE_ID = "guardianmod:AbstractMode"; public static Texture bruh = TextureLoader.getTexture(ChampMod.makeUIPath("crushing.png")); @@ -175,11 +156,12 @@ public void fisher() { public Texture getHelperTexture() { return bruh; - }; + } + public Texture getHelperTextureBright() { return bruhB; - }; + } public void update() { hitbox2.update(); diff --git a/src/main/java/champ/stances/BerserkerStance.java b/src/main/java/champ/stances/BerserkerStance.java index 48b4fd6601..1b1f0fb4e3 100644 --- a/src/main/java/champ/stances/BerserkerStance.java +++ b/src/main/java/champ/stances/BerserkerStance.java @@ -8,24 +8,19 @@ 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 { public static final String STANCE_ID = "champ:BerserkerStance"; - private static long sfxId = -1L; + private static final long sfxId = -1L; public BerserkerStance() { this.ID = STANCE_ID;// 21 @@ -111,7 +106,7 @@ public void updateAnimation() { this.particleTimer2 -= Gdx.graphics.getDeltaTime(); if (this.particleTimer2 < 0.0F) { this.particleTimer2 = MathUtils.random(0.45F, 0.55F); - AbstractDungeon.effectsQueue.add(new StanceAuraEffect(this.STANCE_ID)); + AbstractDungeon.effectsQueue.add(new StanceAuraEffect(STANCE_ID)); } } } diff --git a/src/main/java/champ/stances/DefensiveStance.java b/src/main/java/champ/stances/DefensiveStance.java index 85cb707345..b368694cce 100644 --- a/src/main/java/champ/stances/DefensiveStance.java +++ b/src/main/java/champ/stances/DefensiveStance.java @@ -19,7 +19,7 @@ public class DefensiveStance extends AbstractChampStance { public static final String STANCE_ID = "champ:DefensiveStance"; - private static long sfxId = -1L; + private static final long sfxId = -1L; public DefensiveStance() { this.ID = STANCE_ID; @@ -79,9 +79,9 @@ public static int amount() { } public static int finisherAmount() { - int x = 8; + int x = 6; if (AbstractDungeon.player.hasRelic(DefensiveTrainingManual.ID)) { - x += 3; + x += DefensiveTrainingManual.OOMPH; } return x; } @@ -114,7 +114,7 @@ public void updateAnimation() { this.particleTimer2 -= Gdx.graphics.getDeltaTime(); if (this.particleTimer2 < 0.0F) { this.particleTimer2 = MathUtils.random(0.45F, 0.55F); - AbstractDungeon.effectsQueue.add(new StanceAuraEffect(this.STANCE_ID)); + AbstractDungeon.effectsQueue.add(new StanceAuraEffect(STANCE_ID)); } } } diff --git a/src/main/java/champ/stances/UltimateStance.java b/src/main/java/champ/stances/UltimateStance.java index ef07da10aa..1a8287c9ae 100644 --- a/src/main/java/champ/stances/UltimateStance.java +++ b/src/main/java/champ/stances/UltimateStance.java @@ -7,7 +7,7 @@ public class UltimateStance extends AbstractChampStance { public static final String STANCE_ID = "champ:UltimateStance"; - private static long sfxId = -1L; + private static final long sfxId = -1L; public UltimateStance() { this.ID = STANCE_ID; diff --git a/src/main/java/champ/util/OpenerModBerserker.java b/src/main/java/champ/util/OpenerModBerserker.java index c669d57ad4..48c827225b 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 520184982d..c338305e9a 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 3d7e6a76e4..d500ea38d6 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 bab5f5e8be..cc590dd80c 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; @@ -13,7 +8,7 @@ import com.megacrit.cardcrawl.vfx.AbstractGameEffect; public class DaggerSprayAnyColorEffect extends AbstractGameEffect { - private boolean flipX; + private final boolean flipX; public DaggerSprayAnyColorEffect(boolean shouldFlip, Color clr) { this.color = clr.cpy(); diff --git a/src/main/java/champ/vfx/DaggerThrowAnyColorEffect.java b/src/main/java/champ/vfx/DaggerThrowAnyColorEffect.java index 305ba35e69..6eb012e270 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; @@ -17,11 +12,11 @@ import com.megacrit.cardcrawl.vfx.AbstractGameEffect; public class DaggerThrowAnyColorEffect extends AbstractGameEffect { - private float x; - private float y; - private float destY; + private final float x; + private final float y; + private final float destY; private static final float DUR = 0.4F; - private AtlasRegion img; + private final AtlasRegion img; private boolean playedSound = false; private boolean forcedAngle = false; diff --git a/src/main/java/champ/vfx/ExecuteEffect.java b/src/main/java/champ/vfx/ExecuteEffect.java index 9d0aefa37d..1f286a68af 100644 --- a/src/main/java/champ/vfx/ExecuteEffect.java +++ b/src/main/java/champ/vfx/ExecuteEffect.java @@ -1,19 +1,13 @@ 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; - private float timerFlip = 0F; - private AbstractCreature owner; - private boolean useJump; + private final float timer = 0.1F; + private final float timerFlip = 0F; + private final AbstractCreature owner; + private final boolean useJump; public ExecuteEffect(AbstractCreature c, boolean jump) { this.duration = .65F; diff --git a/src/main/java/champ/vfx/FlyingDaggerAnyColorEffect.java b/src/main/java/champ/vfx/FlyingDaggerAnyColorEffect.java index 82f3aa62a1..0515a65d6a 100644 --- a/src/main/java/champ/vfx/FlyingDaggerAnyColorEffect.java +++ b/src/main/java/champ/vfx/FlyingDaggerAnyColorEffect.java @@ -1,23 +1,20 @@ 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 { private float x; private float y; - private float destY; - private float scaleMultiplier; + private final float destY; + private final float scaleMultiplier; private static final float DUR = 0.5F; - private TextureAtlas.AtlasRegion img; + private final TextureAtlas.AtlasRegion img; private boolean playedSound = false; public FlyingDaggerAnyColorEffect(float x, float y, float fAngle, boolean shouldFlip, Color clr) { diff --git a/src/main/java/champ/vfx/SelfSpikesEffect.java b/src/main/java/champ/vfx/SelfSpikesEffect.java index 904c478466..f29d3a81a7 100644 --- a/src/main/java/champ/vfx/SelfSpikesEffect.java +++ b/src/main/java/champ/vfx/SelfSpikesEffect.java @@ -1,21 +1,15 @@ -// -// 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; public class SelfSpikesEffect extends AbstractGameEffect { - private boolean mute; - private float scale; - private int spikeCount; + private final boolean mute; + private final float scale; + private final int spikeCount; public SelfSpikesEffect(Color clr, int count, boolean noAudio, float size) { mute = noAudio; diff --git a/src/main/java/champ/vfx/StanceDanceEffect.java b/src/main/java/champ/vfx/StanceDanceEffect.java index f11cdf9fda..8f3763a946 100644 --- a/src/main/java/champ/vfx/StanceDanceEffect.java +++ b/src/main/java/champ/vfx/StanceDanceEffect.java @@ -1,21 +1,17 @@ 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; - private AbstractCreature owner; - private boolean useJump; - private boolean usePetals; - private boolean useSpotlight; + private final AbstractCreature owner; + private final boolean useJump; + private final boolean usePetals; + private final boolean useSpotlight; private boolean doubleSpins; public StanceDanceEffect(AbstractCreature c, boolean jump, boolean petals, boolean spotlight, boolean doubleSpins) { 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 0000000000..ee6984b70b --- /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/actions/unique/EnemyPoisonDamageAction.java b/src/main/java/charbosses/actions/unique/EnemyPoisonDamageAction.java index f1197e83dd..a1335a4d6f 100644 --- a/src/main/java/charbosses/actions/unique/EnemyPoisonDamageAction.java +++ b/src/main/java/charbosses/actions/unique/EnemyPoisonDamageAction.java @@ -20,6 +20,7 @@ import com.megacrit.cardcrawl.rooms.AbstractRoom.RoomPhase; import com.megacrit.cardcrawl.unlock.UnlockTracker; import com.megacrit.cardcrawl.vfx.combat.FlashAtkImgEffect; +import downfall.downfallMod; public class EnemyPoisonDamageAction extends AbstractGameAction { private static final float DURATION = 0.33F; @@ -49,11 +50,14 @@ public void update() { AbstractPower p = this.target.getPower("Poison"); if (p != null) { - --p.amount; - if (p.amount == 0) { - this.target.powers.remove(p); - } else { - p.updateDescription(); + if (downfallMod.useLegacyBosses) { + --p.amount; + + if (p.amount == 0) { + this.target.powers.remove(p); + } else { + p.updateDescription(); + } } } diff --git a/src/main/java/charbosses/bosses/AbstractBossDeckArchetype.java b/src/main/java/charbosses/bosses/AbstractBossDeckArchetype.java index b4761543ec..020c9df8b8 100644 --- a/src/main/java/charbosses/bosses/AbstractBossDeckArchetype.java +++ b/src/main/java/charbosses/bosses/AbstractBossDeckArchetype.java @@ -8,6 +8,7 @@ import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.localization.MonsterStrings; import downfall.downfallMod; +import expansioncontent.expansionContentMod; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -22,6 +23,7 @@ public abstract class AbstractBossDeckArchetype { public String bossMechanicDesc; public int maxHPModifier; + public int maxHPModifierAsc = 0; public int actNum; /* @@ -86,7 +88,7 @@ public abstract class AbstractBossDeckArchetype { */ public void addedPreBattle() { - initializeBossPanel(); + if (downfallMod.useLegacyBosses) initializeBossPanel(); } public abstract void initializeBonusRelic(); diff --git a/src/main/java/charbosses/bosses/AbstractCharBoss.java b/src/main/java/charbosses/bosses/AbstractCharBoss.java index 99bc18ed1a..3ea4a54c92 100644 --- a/src/main/java/charbosses/bosses/AbstractCharBoss.java +++ b/src/main/java/charbosses/bosses/AbstractCharBoss.java @@ -52,6 +52,7 @@ import com.megacrit.cardcrawl.orbs.AbstractOrb; import com.megacrit.cardcrawl.powers.*; import com.megacrit.cardcrawl.relics.AbstractRelic; +import com.megacrit.cardcrawl.relics.OddMushroom; import com.megacrit.cardcrawl.relics.RunicDome; import com.megacrit.cardcrawl.relics.SlaversCollar; import com.megacrit.cardcrawl.rooms.AbstractRoom; @@ -65,6 +66,7 @@ import com.megacrit.cardcrawl.vfx.combat.HbBlockBrokenEffect; import com.megacrit.cardcrawl.vfx.combat.StrikeEffect; import downfall.downfallMod; +import expansioncontent.expansionContentMod; import slimebound.SlimeboundMod; import java.util.ArrayList; @@ -146,7 +148,11 @@ public AbstractCharBoss(String name, String id, int maxHealth, float hb_x, float public void init() { AbstractCharBoss.boss = this; this.setHp(this.maxHealth); - this.energy.energyMaster = 2; + if (!downfallMod.useLegacyBosses){ + this.energy.energyMaster = 3; + } else { + this.energy.energyMaster = 2; + } this.generateAll(); super.init(); this.preBattlePrep(); @@ -219,7 +225,11 @@ public void generateAll() { */ maxHealth += chosenArchetype.maxHPModifier; if (AbstractDungeon.ascensionLevel >= 9) { - maxHealth = Math.round(maxHealth * 1.2F); + if (downfallMod.useLegacyBosses) { + maxHealth = Math.round(maxHealth * 1.2F); + } else { + maxHealth += chosenArchetype.maxHPModifierAsc; + } } currentHealth = maxHealth; updateHealthBar(); @@ -306,18 +316,21 @@ public void update() { public void applyEndOfTurnTriggers() { if (hasPower(StunMonsterPower.POWER_ID)) chosenArchetype.turn--; - this.energy.recharge(); + this.energy.recharge(); + + + for (final AbstractPower p : AbstractCharBoss.boss.powers) { + p.onEnergyRecharge(); + } - for (final AbstractPower p : AbstractCharBoss.boss.powers) { - p.onEnergyRecharge(); - } for (final AbstractCard c : this.hand.group) { c.triggerOnEndOfTurnForPlayingCard(); } this.stance.onEndOfTurn(); - addToBot(new EnemyDiscardAtEndOfTurnAction()); + if (downfallMod.useLegacyBosses) { + addToBot(new EnemyDiscardAtEndOfTurnAction()); /* for (final AbstractCard c : this.drawPile.group) { c.resetAttributes(); @@ -326,8 +339,9 @@ public void applyEndOfTurnTriggers() { c.resetAttributes(); } */ - for (final AbstractCard c : this.hand.group) { - c.resetAttributes(); + for (final AbstractCard c : this.hand.group) { + c.resetAttributes(); + } } addToBot(new DelayedActionAction(new CharbossTurnstartDrawAction())); } @@ -350,6 +364,9 @@ public void startTurn() { } public ArrayList getThisTurnCards() { + if (chosenArchetype == null) { + return new ArrayList<>(); + } return chosenArchetype.getThisTurnCards(); } @@ -363,36 +380,40 @@ public int compare(AbstractBossCard a, AbstractBossCard b) { public void endTurnStartTurn() { - if (!AbstractDungeon.getCurrRoom().isBattleOver) { + if (!AbstractDungeon.getCurrRoom().isBattleOver && currentHealth > 0) { //addToBot(new EnemyDrawCardAction(this, this.gameHandSize, true)); addToBot(new AbstractGameAction() { @Override public void update() { isDone = true; - for (AbstractCard q : getThisTurnCards()) { - AbstractCharBoss.boss.hand.addToTop(q); - if (q instanceof AbstractBossCard) ((AbstractBossCard) q).bossDarken(); - q.current_y = Settings.HEIGHT / 2F; - q.current_x = Settings.WIDTH; - } + if (AbstractCharBoss.boss != null) + if (AbstractCharBoss.boss.hand != null) { + for (AbstractCard q : getThisTurnCards()) { + AbstractCharBoss.boss.hand.addToTop(q); + if (q instanceof AbstractBossCard) ((AbstractBossCard) q).bossDarken(); + q.current_y = Settings.HEIGHT / 2F; + q.current_x = Settings.WIDTH; + } - ArrayList handAsBoss = new ArrayList<>(); - for (AbstractCard c : AbstractCharBoss.boss.hand.group) { - handAsBoss.add((AbstractBossCard) c); - } + ArrayList handAsBoss = new ArrayList<>(); + for (AbstractCard c : AbstractCharBoss.boss.hand.group) { + handAsBoss.add((AbstractBossCard) c); + } - Collections.sort(handAsBoss, new sortByNewPrio()); + Collections.sort(handAsBoss, new sortByNewPrio()); - ArrayList newHand = new ArrayList<>(); - for (AbstractCard c : handAsBoss) { - newHand.add(c); - c.applyPowers(); - } + ArrayList newHand = new ArrayList<>(); + for (AbstractCard c : handAsBoss) { + newHand.add(c); + c.applyPowers(); + c.triggerWhenDrawn(); + } - AbstractCharBoss.boss.hand.group = newHand; + AbstractCharBoss.boss.hand.group = newHand; - AbstractCharBoss.boss.hand.refreshHandLayout(); - applyPowers(); + AbstractCharBoss.boss.hand.refreshHandLayout(); + applyPowers(); + } } }); addToBot(new WaitAction(0.2f)); @@ -405,25 +426,30 @@ public void update() { public void update() { isDone = true; int budget = energyPanel.getCurrentEnergy(); - for (AbstractCard c : AbstractCharBoss.boss.hand.group) { - if (c.costForTurn <= budget && c.costForTurn != -2 && c instanceof AbstractBossCard) { - ((AbstractBossCard) c).createIntent(); - ((AbstractBossCard) c).bossLighten(); - budget -= c.costForTurn; - budget += ((AbstractBossCard) c).energyGeneratedIfPlayed; - if (budget < 0) budget = 0; - } else if (c.costForTurn == -2 && c.type == AbstractCard.CardType.CURSE && c.color == AbstractCard.CardColor.CURSE) { - ((AbstractBossCard) c).bossLighten(); + if (AbstractCharBoss.boss != null) { + if (AbstractCharBoss.boss.hand != null) { + for (AbstractCard c : AbstractCharBoss.boss.hand.group) { + if (c.costForTurn <= budget && c.costForTurn != -2 && c instanceof AbstractBossCard) { + ((AbstractBossCard) c).createIntent(); + ((AbstractBossCard) c).bossLighten(); + budget -= c.costForTurn; + budget += ((AbstractBossCard) c).energyGeneratedIfPlayed; + if (budget < 0) budget = 0; + } else if (c.costForTurn == -2 && c.type == AbstractCard.CardType.CURSE && c.color == AbstractCard.CardColor.CURSE) { + ((AbstractBossCard) c).bossLighten(); + } + } + + for (AbstractCard c : AbstractCharBoss.boss.hand.group) { + AbstractBossCard cB = (AbstractBossCard) c; + cB.refreshIntentHbLocation(); + } } } - for (AbstractCard c : AbstractCharBoss.boss.hand.group) { - AbstractBossCard cB = (AbstractBossCard) c; - cB.refreshIntentHbLocation(); - } - //TODO Add a way for create a hidden attack intent for the Boss if it intends to play an Attack. } }); + } this.cardsPlayedThisTurn = 0; @@ -466,10 +492,25 @@ public void preApplyIntentCalculations() { for (int j = i + 1; j < hand.size(); j++) { AbstractBossCard c2 = (AbstractBossCard) hand.group.get(j); c2.manualCustomVulnModifier = true; + if (AbstractDungeon.player.hasRelic(OddMushroom.ID)){ + c2.manualCustomDamageModifierMult = 1.25F; + } else { + c2.manualCustomDamageModifierMult = 1.5F; + } + } } } + //Self Weak Check - knows to check if any Artifact will be left + if (c.selfWeakIfPlayed > 0) { + for (int j = i + 1; j < hand.size(); j++) { + AbstractBossCard c2 = (AbstractBossCard) hand.group.get(j); + c2.manualCustomSelfWeakModifier = true; + } + + } + //Shuriken Checks for Act 1 Silent if (hasShuriken) { SlimeboundMod.logger.info("has shuriken"); @@ -673,17 +714,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(); } @@ -1185,7 +1240,7 @@ public void damage(final DamageInfo info) { @Override public void die() { if (this.currentHealth <= 0) { - BossMechanicDisplayPanel.resetBossPanel(); + if (downfallMod.useLegacyBosses) BossMechanicDisplayPanel.resetBossPanel(); useFastShakeAnimation(5.0F); CardCrawlGame.screenShake.rumble(4.0F); onBossVictoryLogic(); @@ -1372,7 +1427,7 @@ public void applyStartOfTurnCards() { for (final AbstractCard c : this.hand.group) { if (c != null) { c.atTurnStart(); - c.triggerWhenDrawn(); + // c.triggerWhenDrawn(); } } /* @@ -1604,9 +1659,11 @@ public void render(final SpriteBatch sb) { if (!this.isDead) { this.renderHand(sb); this.stance.render(sb); - for (AbstractRelic r : this.relics) { - r.render(sb); - } + + for (AbstractRelic r : this.relics) { + r.render(sb); + } + if (!this.orbs.isEmpty()) { for (AbstractOrb o : this.orbs) { diff --git a/src/main/java/charbosses/bosses/Defect/CharBossDefect.java b/src/main/java/charbosses/bosses/Defect/CharBossDefect.java index 77b5c9dce2..428e83dd07 100644 --- a/src/main/java/charbosses/bosses/Defect/CharBossDefect.java +++ b/src/main/java/charbosses/bosses/Defect/CharBossDefect.java @@ -6,10 +6,19 @@ import charbosses.bosses.Defect.NewAge.ArchetypeAct2ClawNewAge; import charbosses.bosses.Defect.NewAge.ArchetypeAct3InserterNewAge; import charbosses.bosses.Defect.NewAge.ArchetypeAct3OrbsNewAge; +import charbosses.bosses.Defect.Simpler.ArchetypeAct1VoidsSimple; +import charbosses.bosses.Defect.Simpler.ArchetypeAct2ClawSimple; +import charbosses.bosses.Defect.Simpler.ArchetypeAct3OrbsSimple; +import charbosses.cards.AbstractBossCard; +import charbosses.cards.blue.EnBeamCell; import charbosses.core.EnemyEnergyManager; import charbosses.monsters.BronzeOrbWhoReallyLikesDefectForSomeReason; +import charbosses.monsters.VoidCore; import com.esotericsoftware.spine.AnimationState; +import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.common.InstantKillAction; +import com.megacrit.cardcrawl.actions.utility.TextAboveCreatureAction; +import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.cards.DamageInfo; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.core.CardCrawlGame; @@ -18,9 +27,13 @@ import com.megacrit.cardcrawl.powers.MinionPower; import com.megacrit.cardcrawl.ui.panels.energyorb.EnergyOrbBlue; import com.megacrit.cardcrawl.core.Settings; +import downfall.actions.SpeechBubbleAction; import downfall.downfallMod; import downfall.monsters.NeowBoss; import downfall.util.LocalizeHelper; +import expansioncontent.expansionContentMod; + +import static awakenedOne.util.Wiz.atb; public class CharBossDefect extends AbstractCharBoss { public static final String ID = downfallMod.makeID("Defect"); @@ -29,7 +42,7 @@ public class CharBossDefect extends AbstractCharBoss { public int clawsPlayed = 0; public CharBossDefect() { - super(NAME, ID, 75, 0.0F, -5.0F, 240.0F, 244.0F, null, 0.0f, -20.0f, AbstractPlayer.PlayerClass.DEFECT); + super(NAME, ID, 75, 0.0F, -5.0F, 240.0F, 244.0F, null, 0.0f, 20.0f, AbstractPlayer.PlayerClass.DEFECT); this.energyOrb = new EnergyOrbBlue(); this.energy = new EnemyEnergyManager(3); this.loadAnimation("images/characters/defect/idle/skeleton.atlas", "images/characters/defect/idle/skeleton.json", 1.0F); @@ -47,16 +60,45 @@ public CharBossDefect() { type = EnemyType.BOSS; } + @Override + public void applyEndOfTurnTriggers() { + super.applyEndOfTurnTriggers(); + if (chosenArchetype instanceof ArchetypeAct1VoidsSimple){ + ((ArchetypeAct1VoidsSimple)chosenArchetype).minionDestroyedThisTurn = false; + } + } @Override public void generateDeck() { AbstractBossDeckArchetype archetype; if (downfallMod.overrideBossDifficulty) { + archetype = new ArchetypeAct1TurboNewAge(); + + if (!downfallMod.useLegacyBosses) { + archetype = new ArchetypeAct1VoidsSimple(); + } + this.currentHealth -= 100; downfallMod.overrideBossDifficulty = false; } else + if (!downfallMod.useLegacyBosses){ + switch (AbstractDungeon.actNum) { + case 1: + archetype = new ArchetypeAct1VoidsSimple(); + break; + case 2: + archetype = new ArchetypeAct2ClawSimple(); + break; + case 3: + archetype = new ArchetypeAct3OrbsSimple(); + break; + default: + archetype = new ArchetypeAct1VoidsSimple(); + break; + } + } else { switch (AbstractDungeon.actNum) { case 1: archetype = new ArchetypeAct1TurboNewAge(); @@ -67,29 +109,11 @@ public void generateDeck() { case 3: archetype = new ArchetypeAct3OrbsNewAge(); break; - case 4: { - //SlimeboundMod.logger.info("Defect spawned at Archetype " + NeowBoss.Rezzes); - switch (NeowBoss.Rezzes) { - - case 0: - archetype = new ArchetypeAct1TurboNewAge(); - break; - case 1: - archetype = new ArchetypeAct2ClawNewAge(); - break; - case 2: - archetype = new ArchetypeAct3OrbsNewAge(); - break; - default: - archetype = new ArchetypeAct3OrbsNewAge(); - break; - } - break; - } default: archetype = new ArchetypeAct1TurboNewAge(); break; } + } archetype.initialize(); chosenArchetype = archetype; @@ -112,13 +136,13 @@ public void damage(DamageInfo info) { public void die() { super.die(); - if (hasPower(MinionPower.POWER_ID)) { + for (AbstractMonster m : AbstractDungeon.getCurrRoom().monsters.monsters) { - if (m instanceof BronzeOrbWhoReallyLikesDefectForSomeReason) { + if (m instanceof VoidCore) { AbstractDungeon.actionManager.addToBottom(new InstantKillAction(m)); } } - } + } } \ No newline at end of file diff --git a/src/main/java/charbosses/bosses/Defect/NewAge/ArchetypeAct2ClawNewAge.java b/src/main/java/charbosses/bosses/Defect/NewAge/ArchetypeAct2ClawNewAge.java index eb929066b6..3fb5f622e9 100644 --- a/src/main/java/charbosses/bosses/Defect/NewAge/ArchetypeAct2ClawNewAge.java +++ b/src/main/java/charbosses/bosses/Defect/NewAge/ArchetypeAct2ClawNewAge.java @@ -116,13 +116,12 @@ public ArrayList getThisTurnCards() { case 3: 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 EnClumsy(), true);//removed turn++; break; case 4: addToList(cardsList, new EnCoreSurge(), false);//10 - addToList(cardsList, new EnHyperbeam(), true);//11 + addToList(cardsList, new EnHyperbeam(), false);//11 addToList(cardsList, new EnClumsy(), false); addToList(cardsList, new EnDefendBlue(), false);//12 turn = 0; @@ -141,7 +140,7 @@ public ArrayList getThisTurnCards() { break; case 1: addToList(cardsList, new EnCoreSurge(), false);//5 - addToList(cardsList, new EnHyperbeam(), true);//6 + addToList(cardsList, new EnHyperbeam(), false);//6 addToList(cardsList, new EnChargeBattery(), false);//7 addToList(cardsList, new EnRebound(), false);//8 turn++; diff --git a/src/main/java/charbosses/bosses/Defect/NewAge/ArchetypeAct3OrbsNewAge.java b/src/main/java/charbosses/bosses/Defect/NewAge/ArchetypeAct3OrbsNewAge.java index f944bfbd9d..0b18a41f2b 100644 --- a/src/main/java/charbosses/bosses/Defect/NewAge/ArchetypeAct3OrbsNewAge.java +++ b/src/main/java/charbosses/bosses/Defect/NewAge/ArchetypeAct3OrbsNewAge.java @@ -7,17 +7,22 @@ import charbosses.cards.blue.*; import charbosses.cards.colorless.EnBlind; import charbosses.cards.colorless.EnGoodInstincts; -import charbosses.cards.curses.EnInjury; -import charbosses.cards.curses.EnShame; +import charbosses.cards.curses.*; +import charbosses.cards.purple.EnLikeWater; import charbosses.orbs.AbstractEnemyOrb; 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.actions.common.MakeTempCardInDiscardAction; import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.red.Disarm; +import com.megacrit.cardcrawl.cards.status.VoidCard; 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; @@ -31,20 +36,17 @@ public class ArchetypeAct3OrbsNewAge extends ArchetypeBaseDefect { public ArchetypeAct3OrbsNewAge() { super("DF_ARCHETYPE_ORBS", "Orbs"); - maxHPModifier += 350; + maxHPModifier += 280; actNum = 3; - bossMechanicName = DefectBiasCuriosityPower.NAME; - bossMechanicDesc = DefectBiasCuriosityPower.DESCRIPTIONS[0]; + bossMechanicName = DefectCuriosityPower.NAME; + bossMechanicDesc = DefectCuriosityPower.DESCRIPTIONS[0] + 1 + DefectCuriosityPower.DESCRIPTIONS[1] + DefectCuriosityPower.DESCRIPTIONS[2]; } @Override public void addedPreBattle() { super.addedPreBattle(); AbstractCreature p = AbstractCharBoss.boss; - AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, new FocusPower(p,4))); - AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, new DefectBiasCuriosityPower(p))); - if(AbstractDungeon.ascensionLevel >= 19) - AbstractDungeon.actionManager.addToBottom(new HealAction(p, p, 2)); + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, new DefectCuriosityPower(p))); } public void initialize() { @@ -54,6 +56,7 @@ public void initialize() { addRelic(new CBR_Lantern()); addRelic(new CBR_IceCream()); addRelic(new CBR_FusionHammer()); + addRelic(new CBR_Enchiridon()); } @@ -94,7 +97,11 @@ public ArrayList getThisTurnCards() { switch (turn) { case 0: // 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()); addToList(cardsList, new EnRainbow()); @@ -102,6 +109,7 @@ public ArrayList getThisTurnCards() { turn++; break; case 1: + increasePretendFocus(-1); //Turn 2 // Lightning Frost Dark 5e addToList(cardsList, new EnDualcast()); @@ -125,6 +133,7 @@ public ArrayList getThisTurnCards() { turn++; break; case 2: + increasePretendFocus(-1); //Turn 3 // No Orbs 4e addToList(cardsList, new EnConsume()); @@ -134,10 +143,11 @@ public ArrayList getThisTurnCards() { addToList(cardsList, new EnColdSnap(),extraUpgrades); //Lightning Frost 0e - addToList(cardsList, new EnInjury()); + addToList(cardsList, new EnClumsy()); turn++; break; case 3: + increasePretendFocus(-1); //Turn 4 //Lightning Frost 3e addToList(cardsList, new EnDoubleEnergy(),false); @@ -154,14 +164,16 @@ public ArrayList getThisTurnCards() { } else { switch (turn) { case 0: + increasePretendFocus(-1); //Lightning Frost Lightning Plasma 5e - addToList(cardsList, new EnBuffer(true), false);//AI + 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 EnBarrage(4)); + addToList(cardsList, new EnStrikeBlue()); addToList(cardsList, new EnColdSnap(),extraUpgrades); cB.orbsAsEn().get(1).evokeOverride = true; cB.orbsAsEn().get(1).evokeMult = 1; @@ -172,6 +184,7 @@ public ArrayList getThisTurnCards() { turn++; break; case 1: + increasePretendFocus(-1); //Lightning Plasma Lightning Frost 5e addToList(cardsList, new EnElectrodynamics(), false);//AI cB.orbsAsEn().get(0).evokeOverride = true; @@ -181,18 +194,19 @@ public ArrayList getThisTurnCards() { cB.orbsAsEn().get(2).evokeOverride = true; cB.orbsAsEn().get(2).evokeMult = 1; //Frost Lightning Lightning Lightning 5e - addToList(cardsList, new EnInjury()); 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 EnInjury()); addToList(cardsList, new EnForceField()); //Lightning Lightning Lightning Plasma 3e turn++; break; case 2: + increasePretendFocus(-1); //Lightning Lightning Lightning Plasma addToList(cardsList, new EnDefragment(), false);//AI increasePretendFocus(1); @@ -216,10 +230,15 @@ public ArrayList getThisTurnCards() { turn ++; break; case 3: + increasePretendFocus(-1); //Plasma Lightning Frost - addToList(cardsList, new EnCapacitor(), false);//AI + if (cB.maxOrbs == 4) { + addToList(cardsList, new EnCapacitor(), false);//AI + } else { + addToList(cardsList, new EnBuffer(), false); + } //Plasma Lightning Frost Lightning - addToList(cardsList, new EnMulticast(cB.energyPanel.getCurrentEnergy()-1),false,2*(cB.energyPanel.getCurrentEnergy()-1)); + addToList(cardsList, new EnMulticastPlasma(cB.energyPanel.getCurrentEnergy()-1),false); //Evokes Plasma cB.orbsAsEn().get(0).evokeOverride = true; cB.orbsAsEn().get(0).evokeMult = 4; @@ -230,8 +249,8 @@ public ArrayList getThisTurnCards() { //Lightning Frost Lightning Plasma addToList(cardsList, new EnHologram(), true); - addToList(cardsList, new EnConsume()); - increasePretendFocus(2); + addToList(cardsList, new EnForceField()); + //increasePretendFocus(2); //Lightning Frost Lightning Plasma. Perfect loop! :D turn = 0; looped = true; diff --git a/src/main/java/charbosses/bosses/Defect/Simpler/ArchetypeAct1VoidsSimple.java b/src/main/java/charbosses/bosses/Defect/Simpler/ArchetypeAct1VoidsSimple.java new file mode 100644 index 0000000000..1bdaea7a02 --- /dev/null +++ b/src/main/java/charbosses/bosses/Defect/Simpler/ArchetypeAct1VoidsSimple.java @@ -0,0 +1,122 @@ +package charbosses.bosses.Defect.Simpler; + +import basemod.ReflectionHacks; +import charbosses.bosses.AbstractCharBoss; +import charbosses.bosses.Defect.ArchetypeBaseDefect; +import charbosses.cards.AbstractBossCard; +import charbosses.cards.blue.*; +import charbosses.cards.colorless.EnPowerUp; +import charbosses.cards.colorless.potioncards.PowerPotionCard; +import charbosses.cards.curses.EnDecay; +import charbosses.cards.curses.EnInjury; +import charbosses.cards.curses.EnVoid; +import charbosses.monsters.LouseTangerine; +import charbosses.monsters.VoidCore; +import charbosses.powers.bossmechanicpowers.DefectAttackVoidPower; +import charbosses.powers.bossmechanicpowers.DefectVoidPower; +import charbosses.relics.*; +import com.esotericsoftware.spine.AnimationState; +import com.esotericsoftware.spine.AnimationStateData; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.SpawnMonsterAction; +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 java.lang.reflect.Method; +import java.util.ArrayList; + +public class ArchetypeAct1VoidsSimple extends ArchetypeBaseDefect { + + int darkOrbsChanneled = 0; + + boolean doubleLooped = false; + public boolean minionDestroyedThisTurn = false; + + public ArchetypeAct1VoidsSimple() { + super("DF_ARCHETYPE_STREAMLINE", "Streamline"); + maxHPModifier += 75; + maxHPModifierAsc = 10; + actNum = 1; + } + + + public void initialize() { + addRelic(new CBR_Vajra()); + if (AbstractDungeon.ascensionLevel >= 19){ + addRelic(new CBR_SymbioticVirus()); + } + } + + @Override + public void addedPreBattle() { + + AbstractCreature m = AbstractCharBoss.boss; + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(m, m, new DefectAttackVoidPower(m))); + AbstractMonster voidCore = new VoidCore(-400F, 200F); + AbstractDungeon.actionManager.addToBottom(new SpawnMonsterAction(voidCore,true)); + voidCore.usePreBattleAction(); + + try { + Method loadAnimationMethod = AbstractCreature.class.getDeclaredMethod("loadAnimation", new Class[] { String.class, String.class, float.class }); + loadAnimationMethod.setAccessible(true); + loadAnimationMethod.invoke(AbstractCharBoss.boss, new Object[] { "expansioncontentResources/images/bosses/defect/1/Defect_thief.atlas", "expansioncontentResources/images/bosses/defect/1/Defect_thief.json", 1.0f }); + AnimationState.TrackEntry e = AbstractCharBoss.boss.state.setAnimation(0, "Idle", true); + ((AnimationStateData) ReflectionHacks.getPrivate(AbstractCharBoss.boss, AbstractCreature.class, "stateData")).setMix("Hit", "Idle", 0.1f); + e.setTimeScale(0.9f); + } catch (Exception e) { + e.printStackTrace(); + } + + } + + @Override + public ArrayList getThisTurnCards() { + ArrayList cardsList = new ArrayList<>(); + boolean extraUpgrades = AbstractDungeon.ascensionLevel >= 4; + // boolean beamCells = AbstractDungeon.ascensionLevel >= 4; + switch (turn) { + case 0: + if (!looped && extraUpgrades) { + addToList(cardsList, new PowerPotionCard(), false); + AbstractCard bf = new EnBuffer(); + bf.modifyCostForCombat(-99); + addToList(cardsList, bf, false); + } + if (!looped){ + addToList(cardsList, new EnConsume(), false); + addToList(cardsList, new EnDarkness(), true); + } else { + addToList(cardsList, new EnDarkness(), true); + addToList(cardsList, new EnStrikeBlue()); + } + turn++; + break; + case 1: + addToList(cardsList, new EnRipAndTear(), false); + addToList(cardsList, new EnChargeBattery(), true); + turn++; + break; + case 2: + addToList(cardsList, new EnDoomAndGloom(), false); + addToList(cardsList, new EnBuffer(), false); + turn++; + break; + case 3: + addToList(cardsList, new EnDualcast(), false); + addToList(cardsList, new EnLoop(), false); + turn = 0; + looped = true; + break; + } + + + + return cardsList; + } + + + + +} \ No newline at end of file diff --git a/src/main/java/charbosses/bosses/Defect/Simpler/ArchetypeAct2ClawSimple.java b/src/main/java/charbosses/bosses/Defect/Simpler/ArchetypeAct2ClawSimple.java new file mode 100644 index 0000000000..d3e0ddad51 --- /dev/null +++ b/src/main/java/charbosses/bosses/Defect/Simpler/ArchetypeAct2ClawSimple.java @@ -0,0 +1,113 @@ +package charbosses.bosses.Defect.Simpler; + +import basemod.ReflectionHacks; +import charbosses.bosses.AbstractCharBoss; +import charbosses.bosses.Defect.ArchetypeBaseDefect; +import charbosses.bosses.Defect.CharBossDefect; +import charbosses.cards.blue.*; +import charbosses.cards.colorless.EnPanacea; +import charbosses.monsters.BronzeOrbWhoReallyLikesDefectForSomeReason; +import com.esotericsoftware.spine.AnimationState; +import com.esotericsoftware.spine.AnimationStateData; +import com.megacrit.cardcrawl.actions.common.SpawnMonsterAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; + +import java.lang.reflect.Method; +import java.util.ArrayList; + +import static charbosses.bosses.Defect.NewAge.ArchetypeAct3OrbsNewAge.increasePretendFocus; + +public class ArchetypeAct2ClawSimple extends ArchetypeBaseDefect { + + private CharBossDefect cB; + + int frostOrbsChanneled = 0; + + public ArchetypeAct2ClawSimple() { + super("DF_ARCHETYPE_CLAW", "Claw"); + + maxHPModifier += 195; + maxHPModifierAsc = 20; + actNum = 2; + } + + @Override + public void addedPreBattle() { + super.addedPreBattle(); + AbstractDungeon.actionManager.addToBottom(new SpawnMonsterAction(new BronzeOrbWhoReallyLikesDefectForSomeReason(-450, 250, 0), true)); + AbstractDungeon.actionManager.addToBottom(new SpawnMonsterAction(new BronzeOrbWhoReallyLikesDefectForSomeReason(-600, 0, 1), true)); + + } + + public void initialize() { + + // animation + try { + Method loadAnimationMethod = AbstractCreature.class.getDeclaredMethod("loadAnimation", new Class[] { String.class, String.class, float.class }); + loadAnimationMethod.setAccessible(true); + loadAnimationMethod.invoke(AbstractCharBoss.boss, new Object[] { "expansioncontentResources/images/bosses/defect/2/clockworkDefect.atlas", "expansioncontentResources/images/bosses/defect/2/clockworkDefect.json", 1.0f }); + AnimationState.TrackEntry e = AbstractCharBoss.boss.state.setAnimation(0, "Idle", true); + ((AnimationStateData)ReflectionHacks.getPrivate(AbstractCharBoss.boss, AbstractCreature.class, "stateData")).setMix("Hit", "Idle", 0.1f); + e.setTimeScale(0.9f); + } catch (Exception e) { + e.printStackTrace(); + } + } + + + @Override + public ArrayList getThisTurnCards() { + if (cB == null){ + cB = (CharBossDefect) AbstractCharBoss.boss; + } + ArrayList cardsList = new ArrayList<>(); + boolean extraUpgrades = AbstractDungeon.ascensionLevel >= 4; + + switch (turn) { + case 0: + if (looped){ + addToList(cardsList, new EnClaw(cB.clawsPlayed * 2), false);//8th + addToList(cardsList, new EnClaw((cB.clawsPlayed * 2+2)), false);//8th + } else { + addToList(cardsList, new EnChill(), true); + addToList(cardsList, new EnChill(), true); + addToList(cardsList, new EnChill(), true); + addToList(cardsList, new EnClaw(cB.clawsPlayed * 2), false); //1 + } + turn++; + break; + case 1: + addToList(cardsList, new EnDefragment(), extraUpgrades); + addToList(cardsList, new EnPanacea(), true); + increasePretendFocus(2); + turn++; + break; + case 2: + //Turn 3 + addToList(cardsList, new EnReprogram(), true);//6 + turn++; + break; + case 3: + addToList(cardsList, new EnClaw(cB.clawsPlayed * 2), false); + addToList(cardsList, new EnClaw((cB.clawsPlayed * 2+2)), false); + turn++; + break; + case 4: + addToList(cardsList, new EnCoreSurge(), false); + addToList(cardsList, new EnGeneticAlgorithm(14), true); + turn++; + break; + case 5: + addToList(cardsList, new EnHyperbeam(), extraUpgrades); + turn = 0; + looped = true; + break; + } + + + return cardsList; + } + +} \ No newline at end of file diff --git a/src/main/java/charbosses/bosses/Defect/Simpler/ArchetypeAct3OrbsSimple.java b/src/main/java/charbosses/bosses/Defect/Simpler/ArchetypeAct3OrbsSimple.java new file mode 100644 index 0000000000..6bfe222982 --- /dev/null +++ b/src/main/java/charbosses/bosses/Defect/Simpler/ArchetypeAct3OrbsSimple.java @@ -0,0 +1,142 @@ +package charbosses.bosses.Defect.Simpler; + +import charbosses.bosses.AbstractCharBoss; +import charbosses.bosses.Defect.ArchetypeBaseDefect; +import charbosses.bosses.Defect.CharBossDefect; +import charbosses.cards.blue.*; +import charbosses.cards.hermit.EnDefendHermit; +import charbosses.cards.hermit.EnStrikeHermit; +import charbosses.orbs.AbstractEnemyOrb; +import charbosses.powers.bossmechanicpowers.DefectCuriosityPower; +import charbosses.relics.CBR_Anchor; +import charbosses.relics.CBR_Calipers; +import charbosses.relics.CBR_RunicCapacitor; +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.orbs.AbstractOrb; +import expansioncontent.expansionContentMod; + +import java.util.ArrayList; +import java.util.Collections; + +public class ArchetypeAct3OrbsSimple extends ArchetypeBaseDefect { + + private CharBossDefect cB; + public ArrayList turn23order = new ArrayList<>(); + + public ArchetypeAct3OrbsSimple() { + super("DF_ARCHETYPE_ORBS", "Orbs"); + + maxHPModifier += 295; + maxHPModifierAsc = 30; + actNum = 3; + } + + @Override + public void addedPreBattle() { + super.addedPreBattle(); + + AbstractCreature m = AbstractCharBoss.boss; + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(m, m, new DefectCuriosityPower(m))); + + } + + + public static void increasePretendFocus(int amount) { + AbstractEnemyOrb.masterPretendFocus += amount; + for (AbstractOrb o : AbstractCharBoss.boss.orbs) { + if (o instanceof AbstractEnemyOrb) { + ((AbstractEnemyOrb) o).pretendFocus += amount; + o.applyFocus(); + //((AbstractEnemyOrb) o).applyLockOn(); + } + } + } + + public static void resetPretendFocus() { + for (AbstractOrb o : AbstractCharBoss.boss.orbs) { + if (o instanceof AbstractEnemyOrb) { + ((AbstractEnemyOrb) o).pretendFocus = 0; + AbstractEnemyOrb.masterPretendFocus = 0; + o.applyFocus(); + //((AbstractEnemyOrb) o).applyLockOn(); + } + } + } + + //When you play a Power, Defect gains 1 Focus. Starts with Biased Cognition. + // + +public void shuffleTurns(){ + + turn23order.clear(); + turn23order.add(new EnColdSnap()); + turn23order.add(new EnColdSnap()); + turn23order.add(new EnBallLightning()); + turn23order.add(new EnBallLightning()); + Collections.shuffle(turn23order, AbstractDungeon.cardRandomRng.random); +} + + + + public void initialize() { + + //Gold plated cables + if (AbstractDungeon.ascensionLevel >= 19){ + addRelic(new CBR_RunicCapacitor()); + } + } + + @Override + public ArrayList getThisTurnCards() { + if (cB == null){ + cB = (CharBossDefect) AbstractCharBoss.boss; + } + ArrayList cardsList = new ArrayList<>(); + boolean extraUpgrades = AbstractDungeon.ascensionLevel >= 4; + + + switch (turn) { + case 0: + shuffleTurns(); + if (extraUpgrades) //Fire Potion + addToList(cardsList, new EnBiasedCognition()); + addToList(cardsList, new EnTemptation()); + turn++; + break; + case 1: + increasePretendFocus(-1); + addToList(cardsList, turn23order.get(0), false); + addToList(cardsList, turn23order.get(1), false); + turn++; + break; + case 2: + increasePretendFocus(-1); + addToList(cardsList, new EnDefragment(), true); + increasePretendFocus(2); + addToList(cardsList, new EnDualcast()); + cB.orbsAsEn().get(0).evokeOverride = true; + cB.orbsAsEn().get(0).evokeMult = 2; + turn++; + break; + case 3: + increasePretendFocus(-1); + addToList(cardsList, turn23order.get(2), false); + addToList(cardsList, turn23order.get(3), false); + turn++; + break; + case 4: + increasePretendFocus(-1); + addToList(cardsList, new EnThunderStrike(), false); + //Go for the Eyes + turn++; + break; + } + + + return cardsList; + } + +} \ 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 a0e03a9d6e..f404f5f6a4 100644 --- a/src/main/java/charbosses/bosses/Hermit/CharBossHermit.java +++ b/src/main/java/charbosses/bosses/Hermit/CharBossHermit.java @@ -5,8 +5,12 @@ import charbosses.bosses.Hermit.NewAge.ArchetypeAct1SharpshooterNewAge; import charbosses.bosses.Hermit.NewAge.ArchetypeAct2WheelOfFateNewAge; import charbosses.bosses.Hermit.NewAge.ArchetypeAct3DoomsdayNewAge; +import charbosses.bosses.Hermit.Simpler.ArchetypeAct1SharpshooterSimple; +import charbosses.bosses.Hermit.Simpler.ArchetypeAct2WheelOfFateSimple; +import charbosses.bosses.Hermit.Simpler.ArchetypeAct3BasicsSimple; import charbosses.core.EnemyEnergyManager; import charbosses.powers.bossmechanicpowers.HermitConcentrationPower; +import charbosses.powers.bossmechanicpowers.HermitWheelOfFortune; import charbosses.ui.EnergyOrbHermit; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.g2d.SpriteBatch; @@ -21,6 +25,7 @@ import com.megacrit.cardcrawl.helpers.FontHelper; import downfall.downfallMod; import downfall.util.LocalizeHelper; +import expansioncontent.expansionContentMod; import hermit.characters.hermit; import hermit.effects.HermitEyeParticle; @@ -38,8 +43,9 @@ public class CharBossHermit extends AbstractCharBoss { public Slot eye; private float fireTimer = 0.0F; + private boolean noRender = false; public CharBossHermit() { - super(NAME, ID, 72, 0.0F, -5.0F, 240.0F, 270.0F, null, 0.0f, -20.0f, hermit.Enums.HERMIT); + super(NAME, ID, 72, 0.0F, -5.0F, 240.0F, 270.0F, null, 0.0f, 20.0f, hermit.Enums.HERMIT); this.energyOrb = new EnergyOrbHermit(); this.energy = new EnemyEnergyManager(3); loadAnimation( @@ -63,22 +69,44 @@ public void generateDeck() { AbstractBossDeckArchetype archetype; if (downfallMod.overrideBossDifficulty) { archetype = new ArchetypeAct1SharpshooterNewAge(); + + if (!downfallMod.useLegacyBosses) { + archetype = new ArchetypeAct1SharpshooterSimple(); + } + downfallMod.overrideBossDifficulty = false; this.currentHealth -= 100; } else - switch (AbstractDungeon.actNum) { - case 1: - archetype = new ArchetypeAct1SharpshooterNewAge(); - break; - case 2: - archetype = new ArchetypeAct2WheelOfFateNewAge(); - break; - case 3: - archetype = new ArchetypeAct3DoomsdayNewAge(); - break; - default: - archetype = new ArchetypeAct1SharpshooterNewAge(); - break; + if (!downfallMod.useLegacyBosses){ + switch (AbstractDungeon.actNum) { + case 1: + archetype = new ArchetypeAct1SharpshooterSimple(); + break; + case 2: + archetype = new ArchetypeAct2WheelOfFateSimple(); + break; + case 3: + archetype = new ArchetypeAct3BasicsSimple(); + break; + default: + archetype = new ArchetypeAct1SharpshooterSimple(); + break; + } + } else { + switch (AbstractDungeon.actNum) { + case 1: + archetype = new ArchetypeAct1SharpshooterNewAge(); + break; + case 2: + archetype = new ArchetypeAct2WheelOfFateNewAge(); + break; + case 3: + archetype = new ArchetypeAct3DoomsdayNewAge(); + break; + default: + archetype = new ArchetypeAct1SharpshooterNewAge(); + break; + } } archetype.initialize(); @@ -141,25 +169,44 @@ public void die() { @Override public void render(SpriteBatch sb) { super.render(sb); - if (chosenArchetype instanceof ArchetypeAct2WheelOfFateNewAge) { - if (previewCard == null && !((ArchetypeAct2WheelOfFateNewAge) chosenArchetype).mockDeck.isEmpty()) { - AbstractCard q = ((ArchetypeAct2WheelOfFateNewAge) chosenArchetype).mockDeck.get(0); - previewCard = q.makeStatEquivalentCopy(); + if (chosenArchetype != null) { + if (chosenArchetype.turn < 1 && chosenArchetype instanceof ArchetypeAct2WheelOfFateSimple) { + noRender = true; + } else { + noRender = false; } - if (previewCard != null && !isDead && !isDying) { - int cardsinrow = Math.min(3 - HAND_ROW_LENGTH * (int) Math.floor((float) 3 / (float) HAND_ROW_LENGTH), HAND_ROW_LENGTH); - float widthspacing = AbstractCard.IMG_WIDTH_S + 100.0f * Settings.scale; - int tar = 4; - previewCard.target_x = previewCard.current_x = Settings.WIDTH * .9F - ((cardsinrow + 0.5f) * (widthspacing * HAND_SCALE)) + (widthspacing * HAND_SCALE) * (tar % HAND_ROW_LENGTH); - previewCard.target_y = previewCard.current_y = Settings.HEIGHT * HAND_HEIGHT_OFFSET + (AbstractCard.IMG_HEIGHT_S * HAND_SCALE) * ((float) Math.floor(((float) tar) / (float) HAND_ROW_LENGTH) + (tar > HAND_ROW_LENGTH ? 0.0f : 1.0f)); - previewCard.drawScale = previewCard.targetDrawScale = previewCard.hb.hovered ? HOVER_SCALE : HAND_SCALE; - previewCard.render(sb); - FontHelper.cardDescFont_N.getData().setScale(1.0f); - FontHelper.renderFontCentered(sb, FontHelper.cardDescFont_N, hermit.characterStrings.TEXT[4], previewCard.current_x, previewCard.current_y - ((previewCard.hb.hovered ? 175 : 100) * Settings.scale)); + if (hasPower(HermitWheelOfFortune.POWER_ID)) { + if (chosenArchetype instanceof ArchetypeAct2WheelOfFateNewAge) { + if (previewCard == null && !((ArchetypeAct2WheelOfFateNewAge) chosenArchetype).mockDeck.isEmpty()) { + AbstractCard q = ((ArchetypeAct2WheelOfFateNewAge) chosenArchetype).mockDeck.get(0); + previewCard = q.makeStatEquivalentCopy(); + } + } + + if (chosenArchetype instanceof ArchetypeAct2WheelOfFateSimple) { + if (previewCard == null && !((ArchetypeAct2WheelOfFateSimple) chosenArchetype).mockDeck.isEmpty()) { + AbstractCard q = ((ArchetypeAct2WheelOfFateSimple) chosenArchetype).mockDeck.get(0); + previewCard = q.makeStatEquivalentCopy(); + } + } + + if (previewCard != null && !isDead && !isDying && !noRender) { + int cardsinrow = Math.min(3 - HAND_ROW_LENGTH * (int) Math.floor((float) 3 / (float) HAND_ROW_LENGTH), HAND_ROW_LENGTH); + float widthspacing = AbstractCard.IMG_WIDTH_S + 100.0f * Settings.scale; + int tar = 4; + previewCard.target_x = previewCard.current_x = Settings.WIDTH * .9F - ((cardsinrow + 0.5f) * (widthspacing * HAND_SCALE)) + (widthspacing * HAND_SCALE) * (tar % HAND_ROW_LENGTH); + previewCard.target_y = previewCard.current_y = Settings.HEIGHT * HAND_HEIGHT_OFFSET + (AbstractCard.IMG_HEIGHT_S * HAND_SCALE) * ((float) Math.floor(((float) tar) / (float) HAND_ROW_LENGTH) + (tar > HAND_ROW_LENGTH ? 0.0f : 1.0f)); + previewCard.drawScale = previewCard.targetDrawScale = previewCard.hb.hovered ? HOVER_SCALE : HAND_SCALE; + previewCard.render(sb); + FontHelper.cardDescFont_N.getData().setScale(1.0f); + FontHelper.renderFontCentered(sb, FontHelper.cardDescFont_N, hermit.characterStrings.TEXT[4], previewCard.current_x, previewCard.current_y - ((previewCard.hb.hovered ? 175 : 100) * Settings.scale)); + } } } } + + @Override public void update() { super.update(); diff --git a/src/main/java/charbosses/bosses/Hermit/NewAge/ArchetypeAct1SharpshooterNewAge.java b/src/main/java/charbosses/bosses/Hermit/NewAge/ArchetypeAct1SharpshooterNewAge.java index a7b9eb0898..ffde9b5999 100644 --- a/src/main/java/charbosses/bosses/Hermit/NewAge/ArchetypeAct1SharpshooterNewAge.java +++ b/src/main/java/charbosses/bosses/Hermit/NewAge/ArchetypeAct1SharpshooterNewAge.java @@ -116,7 +116,7 @@ public ArrayList getThisTurnCards() { switch (turn) { case 0: if (AbstractCharBoss.boss.hasRelic(CBR_Abacus.ID)) { - AbstractCharBoss.boss.getRelic(CBR_Abacus.ID).onShuffle(); + AbstractCharBoss.boss.getRelic(CBR_Abacus.ID).onTrigger(); } addToList(cardsList, new EnHeadshot()); addToList(cardsList, new EnDefendHermit()); diff --git a/src/main/java/charbosses/bosses/Hermit/NewAge/ArchetypeAct2WheelOfFateNewAge.java b/src/main/java/charbosses/bosses/Hermit/NewAge/ArchetypeAct2WheelOfFateNewAge.java index b2bafda8e6..aefbc4b00b 100644 --- a/src/main/java/charbosses/bosses/Hermit/NewAge/ArchetypeAct2WheelOfFateNewAge.java +++ b/src/main/java/charbosses/bosses/Hermit/NewAge/ArchetypeAct2WheelOfFateNewAge.java @@ -18,6 +18,7 @@ import com.megacrit.cardcrawl.core.AbstractCreature; import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.powers.StrengthPower; import java.util.ArrayList; import java.util.Iterator; @@ -45,9 +46,10 @@ 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() { boolean extraUpgrades = AbstractDungeon.ascensionLevel >= 4; @@ -115,9 +117,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 +154,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 c7db0aa834..542c594da2 100644 --- a/src/main/java/charbosses/bosses/Hermit/NewAge/ArchetypeAct3DoomsdayNewAge.java +++ b/src/main/java/charbosses/bosses/Hermit/NewAge/ArchetypeAct3DoomsdayNewAge.java @@ -50,7 +50,7 @@ public void addedPreBattle() { AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, new HermitDoomsday(p), 1)); //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)); + 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)); int roll = MathUtils.random(2); if (roll == 0) { AbstractDungeon.actionManager.addToBottom(new SFXAction("VO_CULTIST_1A")); @@ -63,7 +63,11 @@ public void addedPreBattle() { 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)); - +// if (!(AbstractDungeon.ascensionLevel >= 19)) { +// AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, new RitualPower(p, 2, false), 1)); +// } else { +// AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, new RitualPower(p, 1, false), 1)); +// } } public void initialize() { @@ -85,12 +89,7 @@ public ArrayList getThisTurnCards() { if (!looped) { switch (turn) { case 0: - if (AbstractDungeon.ascensionLevel >= 19) { - addToList(cardsList, new EnShadowCloak(), extraUpgrades); - } - if (!(AbstractDungeon.ascensionLevel >= 19)) { - addToList(cardsList, new EnShadowCloak()); - } + addToList(cardsList, new EnShadowCloak()); addToList(cardsList, new EnGrudge(15)); addToList(cardsList, new EnGlare()); turn++; @@ -139,6 +138,6 @@ public ArrayList getThisTurnCards() { @Override public void initializeBonusRelic() { - addRelic(new CBR_FrozenEgg()); + addRelic(new CBR_Girya(2)); } } \ No newline at end of file diff --git a/src/main/java/charbosses/bosses/Hermit/Simpler/ArchetypeAct1SharpshooterSimple.java b/src/main/java/charbosses/bosses/Hermit/Simpler/ArchetypeAct1SharpshooterSimple.java new file mode 100644 index 0000000000..45059a1966 --- /dev/null +++ b/src/main/java/charbosses/bosses/Hermit/Simpler/ArchetypeAct1SharpshooterSimple.java @@ -0,0 +1,115 @@ +package charbosses.bosses.Hermit.Simpler; + +import basemod.ReflectionHacks; +import charbosses.bosses.AbstractCharBoss; +import charbosses.bosses.Hermit.CharBossHermit; +import charbosses.bosses.Ironclad.ArchetypeBaseIronclad; +import charbosses.cards.hermit.*; +import charbosses.cards.purple.EnDefendPurple; +import charbosses.monsters.LouseTangerine; +import charbosses.powers.bossmechanicpowers.HermitConcentrationPower; +import charbosses.relics.CBR_BrassTacks; +import charbosses.relics.CBR_FossilizedHelix; +import charbosses.relics.CBR_SymbioticVirus; +import com.esotericsoftware.spine.AnimationState; +import com.esotericsoftware.spine.AnimationStateData; +import com.esotericsoftware.spine.Skeleton; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.SpawnMonsterAction; +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.UIStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +import java.lang.reflect.Method; +import java.util.ArrayList; + +public class ArchetypeAct1SharpshooterSimple extends ArchetypeBaseIronclad { + public static final int damageThreshold = 10; + + private static final UIStrings uiStrings = CardCrawlGame.languagePack.getUIString("hermit:SpecialFriend"); + + public ArchetypeAct1SharpshooterSimple() { + super("HERMIT_SHARPSHOOTER_ARCHETYPE", "Dead On"); + + maxHPModifier += 88; + maxHPModifierAsc = 10; + actNum = 1; + } + + @Override + public void addedPreBattle() { + super.addedPreBattle(); + + AbstractCreature p = AbstractCharBoss.boss; + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, new HermitConcentrationPower(p), damageThreshold)); + + AbstractMonster tangerine = new LouseTangerine(-400F, 0); + AbstractDungeon.actionManager.addToBottom(new SpawnMonsterAction(tangerine,true)); + tangerine.usePreBattleAction(); + + try { + Method loadAnimationMethod = AbstractCreature.class.getDeclaredMethod("loadAnimation", new Class[] { String.class, String.class, float.class }); + loadAnimationMethod.setAccessible(true); + loadAnimationMethod.invoke(AbstractCharBoss.boss, new Object[] { "expansioncontentResources/images/bosses/hermit/1/Hermit_Sharp.atlas", "expansioncontentResources/images/bosses/hermit/1/Hermit_Sharp.json", 1.0f }); + + AnimationState.TrackEntry e = AbstractCharBoss.boss.state.setAnimation(0, "Idle", true); + ((AnimationStateData)ReflectionHacks.getPrivate(AbstractCharBoss.boss, AbstractCreature.class, "stateData")).setMix("Hit", "Idle", 0.1f); + e.setTimeScale(0.9f); + ((CharBossHermit) AbstractCharBoss.boss).eye = ((Skeleton)ReflectionHacks.getPrivate(AbstractCharBoss.boss, AbstractCreature.class, "skeleton")).findSlot("Eye1"); + } catch (Exception e) { + e.printStackTrace(); + } + } + + + + public void initialize() { + addRelic(new CBR_BrassTacks()); + if (AbstractDungeon.ascensionLevel >= 19){ + //Horseshow + } + } + + @Override + public ArrayList getThisTurnCards() { + ArrayList cardsList = new ArrayList<>(); + boolean extraUpgrades = AbstractDungeon.ascensionLevel >= 4; + + switch (turn) { + case 0: + if (!looped && extraUpgrades) //Strength Potion + addToList(cardsList, new EnDeadeye(), false); + addToList(cardsList, new EnDefendHermit()); + turn++; + break; + case 1: + addToList(cardsList, new EnMemento()); + addToList(cardsList, new EnSnapshot(), true); + turn++; + break; + case 2: + addToList(cardsList, new EnDive(), false); + addToList(cardsList, new EnDefendHermit()); + turn++; + break; + case 3: + addToList(cardsList, new EnHeadshot(), false); + addToList(cardsList, new EnRicochet()); + turn++; + break; + case 4: + addToList(cardsList, new EnSmokingBarrel()); + addToList(cardsList, new EnGhostlyPresence(), true); + turn = 1; + looped = true; + break; + } + + + return cardsList; + } + +} diff --git a/src/main/java/charbosses/bosses/Hermit/Simpler/ArchetypeAct2WheelOfFateSimple.java b/src/main/java/charbosses/bosses/Hermit/Simpler/ArchetypeAct2WheelOfFateSimple.java new file mode 100644 index 0000000000..a230dc17c1 --- /dev/null +++ b/src/main/java/charbosses/bosses/Hermit/Simpler/ArchetypeAct2WheelOfFateSimple.java @@ -0,0 +1,174 @@ +package charbosses.bosses.Hermit.Simpler; + +import charbosses.bosses.AbstractCharBoss; +import charbosses.bosses.Hermit.CharBossHermit; +import charbosses.bosses.Ironclad.ArchetypeBaseIronclad; +import charbosses.cards.AbstractBossCard; +import charbosses.cards.colorless.EnSwiftStrike; +import charbosses.cards.curses.EnDoubt; +import charbosses.cards.curses.EnNecronomicurse; +import charbosses.cards.hermit.*; +import charbosses.powers.bossmechanicpowers.HermitWheelOfFortune; +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 java.util.ArrayList; +import java.util.Iterator; +import java.util.UUID; + +import static charbosses.cards.EnemyCardGroup.HAND_HEIGHT_OFFSET; +import static charbosses.cards.EnemyCardGroup.HAND_ROW_LENGTH; + +public class ArchetypeAct2WheelOfFateSimple extends ArchetypeBaseIronclad { + public ArrayList mockDeck = new ArrayList<>(); + + + public ArchetypeAct2WheelOfFateSimple() { + super("HERMIT_WHEEL_ARCHETYPE", "Wheel of Fortune"); + + maxHPModifier += 198; + maxHPModifierAsc = 20; + actNum = 2; + } + + @Override + public void addedPreBattle() { + reshuffle(); + + } + + public AbstractBossCard getCardFromDeck(UUID cardUuid) { + Iterator var = mockDeck.iterator(); + AbstractBossCard c; + while (var.hasNext()) { + c = var.next(); + if (c.uuid == cardUuid) { + return c; + } + } + return null; + } + + private void reshuffle() { + boolean extraUpgrades = AbstractDungeon.ascensionLevel >= 4; + + addCardToDeck(new EnDefendHermit(), false); + addCardToDeck(new EnStrikeHermit(), true); + addCardToDeck(new EnDoubt(), false); + + addCardToDeck(new EnGlare(), false); + addCardToDeck(new EnDesperado(), true); + addCardToDeck(new EnPurgatory(), false); + + addCardToDeck(new EnWideOpen(), false); + addCardToDeck(new EnDefendHermit(), extraUpgrades); + addCardToDeck(new EnStrikeHermit(), false); + + addCardToDeck(new EnHoleUp(), false); + addCardToDeck(new EnDefendHermit(), false); + addCardToDeck(new EnLowProfile(), false); + + addCardToDeck(new EnStrikeHermit(), false); + addCardToDeck(new EnReprieve(), false); + addCardToDeck(new EnDissolve(), false); + + addCardToDeck(new EnMemento(), false); + addCardToDeck(new EnGoldenBullet(), false); + } + + private void addCardToDeck(AbstractBossCard card, boolean upgrade) { + if (upgrade) card.upgrade(); + mockDeck.add(card); + } + + + @Override + public ArrayList getThisTurnCards() { + + ArrayList cardsList = new ArrayList<>(); + if (turn == 0){ + cardsList.add(new EnRevolver()); + cardsList.add(new EnDetermination()); + turn++; + } + else { + for (int i = 0; i < 3; i++) { + AbstractCard target = getNextCard(); + cardsList.add(target); + } + if (AbstractCharBoss.boss instanceof CharBossHermit) { + CharBossHermit.previewCard = mockDeck.get(0).makeStatEquivalentCopy(); + } + } + + return cardsList; + } + + + public void reInitializeHand() { + if (AbstractCharBoss.boss.isDeadOrEscaped()) { + return; + } + if (AbstractCharBoss.boss.hand == null || AbstractCharBoss.boss.hand.size() == 0) { + return; + } + + AbstractCard bot = AbstractCharBoss.boss.hand.getBottomCard(); + AbstractCharBoss.boss.hand.removeCard(bot); +// if (bot instanceof EnShowdown) { +// ((AbstractHermitBossCard) bot).onSpecificTrigger(); +// } + AbstractCard next = getNextCard(); + AbstractCharBoss.boss.hand.addToTop(next); + + AbstractCharBoss.boss.hand.refreshHandLayout(); + AbstractDungeon.actionManager.addToTop(new AbstractGameAction() { + @Override + public void update() { + isDone = true; + if (AbstractCharBoss.boss != null && !AbstractCharBoss.boss.isDead && !AbstractCharBoss.boss.isDying) { + if (AbstractCharBoss.boss.hand != null) { + AbstractCharBoss.boss.hand.group.stream().forEach(q -> ((AbstractBossCard) q).bossDarken()); + int budget = AbstractCharBoss.boss.energyPanel.getCurrentEnergy(); + for (AbstractCard c : AbstractCharBoss.boss.hand.group) { + if (c.costForTurn <= budget && c.costForTurn != -2 && c instanceof AbstractBossCard) { + ((AbstractBossCard) c).createIntent(); + ((AbstractBossCard) c).bossLighten(); + budget -= c.costForTurn; + budget += ((AbstractBossCard) c).energyGeneratedIfPlayed; + if (budget < 0) budget = 0; + } else if (c.costForTurn == -2 && c.type == AbstractCard.CardType.CURSE && c.color == AbstractCard.CardColor.CURSE) { + ((AbstractBossCard) c).bossLighten(); + } + } + for (AbstractCard c : AbstractCharBoss.boss.hand.group) { + AbstractBossCard cB = (AbstractBossCard) c; + cB.refreshIntentHbLocation(); + c.applyPowers(); + } + AbstractCharBoss.boss.hand.refreshHandLayout(); + } + } + } + }); + if (AbstractCharBoss.boss instanceof CharBossHermit) { + CharBossHermit.previewCard = mockDeck.get(0).makeStatEquivalentCopy(); + } + } + + + protected AbstractCard getNextCard() { + AbstractBossCard q = mockDeck.remove(0); + AbstractCard x = q.makeSameInstanceOf(); + mockDeck.add(mockDeck.size(), q); + int cardsinrow = Math.min(AbstractCharBoss.boss.hand.group.size() - HAND_ROW_LENGTH * (int) Math.floor((float) AbstractCharBoss.boss.hand.group.size() / (float) HAND_ROW_LENGTH), HAND_ROW_LENGTH); + float widthspacing = AbstractCard.IMG_WIDTH_S + 100.0f * Settings.scale; + x.current_x = Settings.WIDTH * .9F - ((cardsinrow + 0.5f) * (widthspacing * AbstractBossCard.HAND_SCALE)) + (widthspacing * AbstractBossCard.HAND_SCALE) * (AbstractCharBoss.boss.hand.group.size() % HAND_ROW_LENGTH); + x.current_y = Settings.HEIGHT * HAND_HEIGHT_OFFSET + (AbstractCard.IMG_HEIGHT_S * AbstractBossCard.HAND_SCALE) * ((float) Math.floor(((float) AbstractCharBoss.boss.hand.group.size()) / (float) HAND_ROW_LENGTH) + (AbstractCharBoss.boss.hand.group.size() > HAND_ROW_LENGTH ? 0.0f : 1.0f)); + return x; + } + + +} \ No newline at end of file diff --git a/src/main/java/charbosses/bosses/Hermit/Simpler/ArchetypeAct3BasicsSimple.java b/src/main/java/charbosses/bosses/Hermit/Simpler/ArchetypeAct3BasicsSimple.java new file mode 100644 index 0000000000..21c299d7ff --- /dev/null +++ b/src/main/java/charbosses/bosses/Hermit/Simpler/ArchetypeAct3BasicsSimple.java @@ -0,0 +1,65 @@ +package charbosses.bosses.Hermit.Simpler; + +import charbosses.bosses.Ironclad.ArchetypeBaseIronclad; +import charbosses.cards.hermit.*; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import downfall.monsters.DoomedDagger; + +import java.util.ArrayList; +import java.util.Collections; + +public class ArchetypeAct3BasicsSimple extends ArchetypeBaseIronclad { + public ArrayList turn23order = new ArrayList<>(); + public ArchetypeAct3BasicsSimple() { + super("HERMIT_DOOMSDAY_ARCHETYPE", "Doomsday"); + + maxHPModifier += 368; + maxHPModifierAsc = 30; + actNum = 3; + } + + public static AbstractMonster getDoomedSnake(){ // called by EnPurgatory too + return new DoomedDagger(-400, 200); + } + + @Override + public ArrayList getThisTurnCards() { + ArrayList cardsList = new ArrayList<>(); + boolean extraUpgrades = AbstractDungeon.ascensionLevel >= 4; + + + switch (turn) { + case 0: + addToList(cardsList, new EnArsenal()); + addToList(cardsList, new EnMaintenance()); + turn23order.clear(); + turn23order.add(new EnStrikeHermit()); + turn23order.add(new EnStrikeHermit()); + turn23order.add(new EnStrikeHermit()); + turn23order.add(new EnDefendHermit()); + turn23order.add(new EnDefendHermit()); + turn23order.add(new EnDefendHermit()); + Collections.shuffle(turn23order, AbstractDungeon.cardRandomRng.random); + turn++; + break; + case 1: + addToList(cardsList, turn23order.get(0), false); + addToList(cardsList, turn23order.get(1), true); + addToList(cardsList, turn23order.get(2), extraUpgrades); + turn++; + break; + case 2: + addToList(cardsList, turn23order.get(3), extraUpgrades); + addToList(cardsList, turn23order.get(4), extraUpgrades); + addToList(cardsList, turn23order.get(5), true); + turn=0; + looped = true; + break; + + } + return cardsList; + } + +} \ 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 f1023735b9..9eae2795fe 100644 --- a/src/main/java/charbosses/bosses/Ironclad/CharBossIronclad.java +++ b/src/main/java/charbosses/bosses/Ironclad/CharBossIronclad.java @@ -8,6 +8,9 @@ import charbosses.bosses.Ironclad.NewAge.ArchetypeAct1StatusesNewAge; import charbosses.bosses.Ironclad.NewAge.ArchetypeAct2MushroomsNewAge; import charbosses.bosses.Ironclad.NewAge.ArchetypeAct3BlockNewAge; +import charbosses.bosses.Ironclad.Simpler.ArchetypeAct1StatusesSimple; +import charbosses.bosses.Ironclad.Simpler.ArchetypeAct2MushroomsSimple; +import charbosses.bosses.Ironclad.Simpler.ArchetypeAct3BlockSimple; import charbosses.cards.AbstractBossCard; import charbosses.cards.red.EnBodySlam; import charbosses.core.EnemyEnergyManager; @@ -36,6 +39,7 @@ import downfall.downfallMod; import downfall.monsters.NeowBoss; import downfall.util.LocalizeHelper; +import expansioncontent.expansionContentMod; import guardian.powers.ConstructPower; import hermit.util.TextureLoader; import slimebound.SlimeboundMod; @@ -48,7 +52,7 @@ public class CharBossIronclad extends AbstractCharBoss { private Texture bgImg = TextureLoader.getTexture("downfallResources/images/bgShrooms.png"); public CharBossIronclad() { - super(NAME, ID, 80, -4.0f, -16.0f, 220.0f, 290.0f, null, 0.0f, -20.0f, PlayerClass.IRONCLAD); + super(NAME, ID, 80, -4.0f, -16.0f, 220.0f, 290.0f, null, 0.0f, 20.0f, PlayerClass.IRONCLAD); this.energyOrb = new EnergyOrbRed(); this.energy = new EnemyEnergyManager(3); this.loadAnimation("images/characters/ironclad/idle/skeleton.atlas", "images/characters/ironclad/idle/skeleton.json", 1.0f); @@ -66,9 +70,30 @@ public void generateDeck() { AbstractBossDeckArchetype archetype; if (downfallMod.overrideBossDifficulty) { archetype = new ArchetypeAct1StatusesNewAge(); + + if (!downfallMod.useLegacyBosses) { + archetype = new ArchetypeAct1StatusesSimple(); + } + downfallMod.overrideBossDifficulty = false; this.currentHealth -= 100; } else + if (!downfallMod.useLegacyBosses) { + switch (AbstractDungeon.actNum) { + case 1: + archetype = new ArchetypeAct1StatusesSimple(); + break; + case 2: + archetype = new ArchetypeAct2MushroomsSimple(); + break; + case 3: + archetype = new ArchetypeAct3BlockSimple(); + break; + default: + archetype = new ArchetypeAct1StatusesSimple(); + break; + } + } else { switch (AbstractDungeon.actNum) { case 1: archetype = new ArchetypeAct1StatusesNewAge(); @@ -79,29 +104,12 @@ public void generateDeck() { case 3: archetype = new ArchetypeAct3BlockNewAge(); break; - case 4: { - - //SlimeboundMod.logger.info("Ironclad spawned at Archetype " + NeowBoss.Rezzes); - switch (NeowBoss.Rezzes) { - case 0: - archetype = new ArchetypeAct1StatusesNewAge(); - break; - case 1: - archetype = new ArchetypeAct2MushroomsNewAge(); - break; - case 2: - archetype = new ArchetypeAct3BlockNewAge(); - break; - default: - archetype = new ArchetypeAct1StatusesNewAge(); - break; - } - break; - } default: archetype = new ArchetypeAct1StatusesNewAge(); break; } + } + archetype.initialize(); chosenArchetype = archetype; diff --git a/src/main/java/charbosses/bosses/Ironclad/NewAge/ArchetypeAct1StatusesNewAge.java b/src/main/java/charbosses/bosses/Ironclad/NewAge/ArchetypeAct1StatusesNewAge.java index 3747b2168b..6405e47e68 100644 --- a/src/main/java/charbosses/bosses/Ironclad/NewAge/ArchetypeAct1StatusesNewAge.java +++ b/src/main/java/charbosses/bosses/Ironclad/NewAge/ArchetypeAct1StatusesNewAge.java @@ -91,7 +91,7 @@ public ArrayList getThisTurnCards() { case 3: addToList(cardsList, new EnSeeingRed()); addToList(cardsList, new EnImmolate()); - addToList(cardsList, new EnIcky()); + addToList(cardsList, new EnClumsy()); turn++; break; case 4: diff --git a/src/main/java/charbosses/bosses/Ironclad/NewAge/ArchetypeAct2MushroomsNewAge.java b/src/main/java/charbosses/bosses/Ironclad/NewAge/ArchetypeAct2MushroomsNewAge.java index bf3b69bea0..8a1467539f 100644 --- a/src/main/java/charbosses/bosses/Ironclad/NewAge/ArchetypeAct2MushroomsNewAge.java +++ b/src/main/java/charbosses/bosses/Ironclad/NewAge/ArchetypeAct2MushroomsNewAge.java @@ -39,7 +39,7 @@ public ArchetypeAct2MushroomsNewAge() { public void addedPreBattle() { super.addedPreBattle(); AbstractCreature p = AbstractCharBoss.boss; - AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, new IroncladMushroomPower(p))); + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, new IroncladMushroomPower(p, 1))); } diff --git a/src/main/java/charbosses/bosses/Ironclad/Simpler/ArchetypeAct1StatusesSimple.java b/src/main/java/charbosses/bosses/Ironclad/Simpler/ArchetypeAct1StatusesSimple.java new file mode 100644 index 0000000000..6421e90cc7 --- /dev/null +++ b/src/main/java/charbosses/bosses/Ironclad/Simpler/ArchetypeAct1StatusesSimple.java @@ -0,0 +1,91 @@ +package charbosses.bosses.Ironclad.Simpler; + +import charbosses.bosses.AbstractBossDeckArchetype; +import charbosses.bosses.AbstractCharBoss; +import charbosses.bosses.Ironclad.ArchetypeBaseIronclad; +import charbosses.cards.red.*; +import charbosses.powers.bossmechanicpowers.DefectAttackVoidPower; +import charbosses.powers.bossmechanicpowers.IroncladStatusPower; +import charbosses.powers.cardpowers.EnemyBerserkPower; +import charbosses.relics.CBR_ChampionsBelt; +import charbosses.relics.CBR_Ginger; +import charbosses.relics.CBR_MarkOfPain; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +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.blue.Barrage; +import com.megacrit.cardcrawl.cards.status.Slimed; +import com.megacrit.cardcrawl.cards.status.Wound; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import hermit.util.Wiz; + +import java.util.ArrayList; + +public class ArchetypeAct1StatusesSimple extends ArchetypeBaseIronclad { + + + public ArchetypeAct1StatusesSimple() { + super("IC_STATUS_ARCHETYPE", "Status"); + + maxHPModifier += 90; + maxHPModifierAsc = 10; + + } + + + @Override + public void addedPreBattle() { + super.addedPreBattle(); + + AbstractCreature m = AbstractCharBoss.boss; + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(m, m, new IroncladStatusPower(m))); + + addRelic(new CBR_Ginger()); + if (AbstractDungeon.ascensionLevel >= 19){ + addRelic(new CBR_MarkOfPain()); + } + } + + @Override + public ArrayList getThisTurnCards() { + ArrayList cardsList = new ArrayList<>(); + boolean extraUpgrades = AbstractDungeon.ascensionLevel >= 4; + + switch (turn) { + case 0: + addToList(cardsList, new EnRecklessCharge()); + addToList(cardsList, new EnRecklessCharge()); + turn++; + break; + case 1: + addToList(cardsList, new EnMetallicize(), false); + addToList(cardsList, new EnSpotWeakness(), extraUpgrades); + turn++; + break; + case 2: + addToList(cardsList, new EnPowerThrough(true), false); + int x = 1; + if (AbstractCharBoss.boss.hasPower(EnemyBerserkPower.POWER_ID)){ + x = x + AbstractCharBoss.boss.getPower(EnemyBerserkPower.POWER_ID).amount; + } + addToList(cardsList, new EnWhirlwind(x), false); + turn++; + break; + case 3: + addToList(cardsList, new EnBerserk(), false); + addToList(cardsList, new EnImmolate(), false); + turn++; + break; + case 4: + addToList(cardsList, new EnIntimidate(), true); + if (looped) addToList(cardsList, new EnBarricade(), false); + if (!looped) addToList(cardsList, new EnDemonForm(), false); + turn=0; + looped = true; + break; + } + return cardsList; + } +} \ No newline at end of file diff --git a/src/main/java/charbosses/bosses/Ironclad/Simpler/ArchetypeAct2MushroomsSimple.java b/src/main/java/charbosses/bosses/Ironclad/Simpler/ArchetypeAct2MushroomsSimple.java new file mode 100644 index 0000000000..a0b415815d --- /dev/null +++ b/src/main/java/charbosses/bosses/Ironclad/Simpler/ArchetypeAct2MushroomsSimple.java @@ -0,0 +1,71 @@ +package charbosses.bosses.Ironclad.Simpler; + +import charbosses.bosses.AbstractCharBoss; +import charbosses.bosses.Ironclad.ArchetypeBaseIronclad; +import charbosses.cards.colorless.EnJAX; +import charbosses.cards.red.*; +import charbosses.powers.bossmechanicpowers.IroncladMushroomPower; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; + +import java.util.ArrayList; + +public class ArchetypeAct2MushroomsSimple extends ArchetypeBaseIronclad { + + private boolean usedPot; + public ArchetypeAct2MushroomsSimple() { + super("IC_MUSHROOM_ARCHETYPE", "Mushroom"); + + maxHPModifier += 190; + maxHPModifierAsc = 20; + actNum = 2; + bossMechanicName = IroncladMushroomPower.NAME; + bossMechanicDesc = IroncladMushroomPower.DESC[0]; + } + + @Override + public void addedPreBattle() { + super.addedPreBattle(); + AbstractCreature p = AbstractCharBoss.boss; + } + + @Override + public ArrayList getThisTurnCards() { + ArrayList cardsList = new ArrayList<>(); + boolean extraUpgrades = AbstractDungeon.ascensionLevel >= 4; + + if (AbstractDungeon.ascensionLevel >= 4 && !usedPot){ + //Blood Potion + } + + switch (turn) { + case 0: + addToList(cardsList, new EnSummonMushrooms()); + addToList(cardsList, new EnFeedingFrenzy()); + turn++; + break; + case 1: + addToList(cardsList, new EnRupture()); + addToList(cardsList, new EnHemokinesis(), true); + turn++; + break; + case 2: + addToList(cardsList, new EnReaper(), extraUpgrades); + turn++; + break; + case 3: + addToList(cardsList, new EnFlameBarrier(), extraUpgrades); + addToList(cardsList, new EnJAX(), extraUpgrades); + turn++; + break; + case 4: + addToList(cardsList, new EnShockwave()); + turn = 0; + break; + } + + return cardsList; + } + +} diff --git a/src/main/java/charbosses/bosses/Ironclad/Simpler/ArchetypeAct3BlockSimple.java b/src/main/java/charbosses/bosses/Ironclad/Simpler/ArchetypeAct3BlockSimple.java new file mode 100644 index 0000000000..2f4db781ad --- /dev/null +++ b/src/main/java/charbosses/bosses/Ironclad/Simpler/ArchetypeAct3BlockSimple.java @@ -0,0 +1,122 @@ +package charbosses.bosses.Ironclad.Simpler; + +import charbosses.bosses.AbstractCharBoss; +import charbosses.bosses.Ironclad.ArchetypeBaseIronclad; +import charbosses.cards.red.*; +import charbosses.monsters.Fortification; +import charbosses.powers.bossmechanicpowers.IroncladFortificationPower; +import charbosses.relics.*; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.SpawnMonsterAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.powers.BarricadePower; + +import java.util.ArrayList; +import java.util.Collections; + +public class ArchetypeAct3BlockSimple extends ArchetypeBaseIronclad { + public static final int FORTIFICATION_AMOUNT = 10; + private boolean lastTurnWasBodySlam; + private int trueTurn=0; + private ArrayList turnOrder; + + public ArchetypeAct3BlockSimple() { + super("IC_BLOCK_ARCHETYPE", "Block"); + + maxHPModifier += 300; + maxHPModifierAsc = 30; + actNum = 3; + bossMechanicName = IroncladFortificationPower.NAME; + bossMechanicDesc = IroncladFortificationPower.DESC[0] + FORTIFICATION_AMOUNT + IroncladFortificationPower.DESC[1]; + turnOrder = new ArrayList<>(); + } + + @Override + public void addedPreBattle() { + super.addedPreBattle(); + AbstractCreature p = AbstractCharBoss.boss; + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, new BarricadePower(p))); + AbstractDungeon.actionManager.addToBottom(new SpawnMonsterAction(new Fortification(), true)); + resetMidTurnOrder(); + } + + public void resetMidTurnOrder(){ + ArrayList newTurnOrder = new ArrayList<>(); + newTurnOrder.add(1); + newTurnOrder.add(2); + newTurnOrder.add(3); + Collections.shuffle(newTurnOrder, AbstractDungeon.monsterRng.random); + turnOrder.addAll(newTurnOrder); + advanceTurn(); + } + + public void advanceTurn(){ + turn = turnOrder.get(trueTurn); + trueTurn++; + if (trueTurn == 4){ + trueTurn = 0; + looped = true; + } + } + + + + public void initialize() { + + addRelic(new CBR_Calipers()); + if (AbstractDungeon.ascensionLevel >= 19){ + addRelic(new CBR_Anchor()); + } + } + + + + @Override + public ArrayList getThisTurnCards() { + ArrayList cardsList = new ArrayList<>(); + boolean extraUpgrades = AbstractDungeon.ascensionLevel >= 4; + + + if (AbstractCharBoss.boss.currentBlock >= 10 && !lastTurnWasBodySlam){ + lastTurnWasBodySlam = true; + addToList(cardsList, new EnIronWave()); + addToList(cardsList, new EnBodySlam()); + + return cardsList; + } + + switch (turn) { + case 0: + if (extraUpgrades && !looped) //Metallicize Potion + addToList(cardsList, new EnImpervious(), false); + addToList(cardsList, new EnIntimidate()); + advanceTurn(); + lastTurnWasBodySlam = false; + break; + case 1: + if (extraUpgrades && !looped) //Metallicize Potion + addToList(cardsList, new EnMetallicize(), false); + addToList(cardsList, new EnRampage()); + advanceTurn(); + lastTurnWasBodySlam = false; + break; + case 2: + if (extraUpgrades && !looped) //Metallicize Potion + addToList(cardsList, new EnGhostlyArmor()); + addToList(cardsList, new EnFlameBarrier()); + advanceTurn(); + lastTurnWasBodySlam = false; + break; + } + + + return cardsList; + } + + @Override + public void initializeBonusRelic() { + addRelic(new CBR_SelfFormingClay()); + } +} \ No newline at end of file diff --git a/src/main/java/charbosses/bosses/Merchant/ArchetypeAct3MerchantBoss.java b/src/main/java/charbosses/bosses/Merchant/ArchetypeAct3MerchantBoss.java index 41e2057b65..add5c92f63 100644 --- a/src/main/java/charbosses/bosses/Merchant/ArchetypeAct3MerchantBoss.java +++ b/src/main/java/charbosses/bosses/Merchant/ArchetypeAct3MerchantBoss.java @@ -2,6 +2,7 @@ import charbosses.bosses.AbstractCharBoss; import charbosses.cards.colorless.*; +import charbosses.cards.curses.EnClumsy; import charbosses.powers.bossmechanicpowers.MerchantStrengthPower; import charbosses.relics.*; import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; @@ -15,6 +16,7 @@ public class ArchetypeAct3MerchantBoss extends ArchetypeBaseMerchant { public ArchetypeAct3MerchantBoss() { super("ME_ARCHETYPE_MERCHANT", "Merchant"); + } public void initialize() { @@ -41,9 +43,7 @@ public void initialize() { addRelic(new CBR_TungstenRod()); addRelic(new CBR_IceCream()); - //addRelic(new CBR_FusionHammer()); - - + addRelic(new CBR_Torii()); } diff --git a/src/main/java/charbosses/bosses/Merchant/CharBossMerchant.java b/src/main/java/charbosses/bosses/Merchant/CharBossMerchant.java index 02cd4a490a..1634ba3000 100644 --- a/src/main/java/charbosses/bosses/Merchant/CharBossMerchant.java +++ b/src/main/java/charbosses/bosses/Merchant/CharBossMerchant.java @@ -57,7 +57,7 @@ public class CharBossMerchant extends AbstractCharBoss { 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); + super(NAME, ID, 333, 0f, -40f, 200.0f, 190.0f, null, 0.0f, 0.0f, PlayerClass.IRONCLAD); // if (downfallMod.tempAscensionHack) { // downfallMod.tempAscensionHack = false; @@ -97,11 +97,10 @@ public void usePreBattleAction() { AbstractDungeon.actionManager.addToBottom(new VFXAction(new BorderFlashEffect(Color.CYAN, true), 2F)); 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)); - } + + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this, this, new StrengthPower(this, FleeingMerchant.CURRENT_STRENGTH*2), FleeingMerchant.CURRENT_STRENGTH*2)); + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this, this, new DexterityPower(this, FleeingMerchant.CURRENT_STRENGTH*2), FleeingMerchant.CURRENT_STRENGTH*2)); + } super.usePreBattleAction(); this.tint.color = new Color(.5F, .5F, 1F, 0F); diff --git a/src/main/java/charbosses/bosses/Silent/CharBossSilent.java b/src/main/java/charbosses/bosses/Silent/CharBossSilent.java index c649a772a4..37062abaae 100644 --- a/src/main/java/charbosses/bosses/Silent/CharBossSilent.java +++ b/src/main/java/charbosses/bosses/Silent/CharBossSilent.java @@ -1,11 +1,15 @@ package charbosses.bosses.Silent; +import automaton.FunctionHelper; import basemod.interfaces.CloneablePowerInterface; import charbosses.bosses.AbstractBossDeckArchetype; import charbosses.bosses.AbstractCharBoss; import charbosses.bosses.Silent.NewAge.ArchetypeAct1PoisonNewAge; import charbosses.bosses.Silent.NewAge.ArchetypeAct2MirrorImageNewAge; import charbosses.bosses.Silent.NewAge.ArchetypeAct3ShivsNewAge; +import charbosses.bosses.Silent.Simpler.ArchetypeAct1PoisonSimple; +import charbosses.bosses.Silent.Simpler.ArchetypeAct2MirrorImageSimple; +import charbosses.bosses.Silent.Simpler.ArchetypeAct3ShivsSimple; import charbosses.core.EnemyEnergyManager; import charbosses.monsters.MirrorImageSilent; import charbosses.powers.bossmechanicpowers.FakeOrRealPower; @@ -17,6 +21,8 @@ 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.SetMoveAction; +import com.megacrit.cardcrawl.actions.utility.TextAboveCreatureAction; import com.megacrit.cardcrawl.actions.utility.WaitAction; import com.megacrit.cardcrawl.cards.DamageInfo; import com.megacrit.cardcrawl.characters.AbstractPlayer.PlayerClass; @@ -28,15 +34,24 @@ import com.megacrit.cardcrawl.powers.MinionPower; import com.megacrit.cardcrawl.ui.panels.energyorb.EnergyOrbGreen; import com.megacrit.cardcrawl.vfx.combat.SmokeBombEffect; +import downfall.actions.SpeechBubbleAction; import downfall.downfallMod; import downfall.monsters.NeowBoss; import downfall.util.LocalizeHelper; +import expansioncontent.expansionContentMod; +import slimebound.SlimeboundMod; + +import static awakenedOne.util.Wiz.atb; public class CharBossSilent extends AbstractCharBoss { public static final String ID = downfallMod.makeID("Silent"); public static final String NAME = LocalizeHelper.DonwfallRunHistoryMonsterNames.TEXT[2]; + //public static final String POISONSPEECH = LocalizeHelper.downfallCharacterSpeech.TEXT[0]; public static boolean posStorage = false; + public static boolean resetThisTurn = false; + + public boolean cantDie = false; public float origDX; public float origdY; @@ -44,7 +59,7 @@ public class CharBossSilent extends AbstractCharBoss { public float orighY; public CharBossSilent() { - super(NAME, ID, 70, -4.0f, -16.0f, 240.0f, 290.0f, null, 100.0f, -20.0f, PlayerClass.THE_SILENT); + super(NAME, ID, 70, -4.0f, -16.0f, 240.0f, 290.0f, null, 100.0f, 20.0f, PlayerClass.THE_SILENT); this.energyOrb = new EnergyOrbGreen(); this.energy = new EnemyEnergyManager(3); this.loadAnimation("images/characters/theSilent/idle/skeleton.atlas", "images/characters/theSilent/idle/skeleton.json", 1.0f); @@ -65,10 +80,33 @@ public CharBossSilent() { public void generateDeck() { AbstractBossDeckArchetype archetype; if (downfallMod.overrideBossDifficulty) { + archetype = new ArchetypeAct1PoisonNewAge(); + + if (!downfallMod.useLegacyBosses) { + archetype = new ArchetypeAct1PoisonSimple(); + } + downfallMod.overrideBossDifficulty = false; this.currentHealth -= 100; } else + + if (!downfallMod.useLegacyBosses) { + switch (AbstractDungeon.actNum) { + case 1: + archetype = new ArchetypeAct1PoisonSimple(); + break; + case 2: + archetype = new ArchetypeAct2MirrorImageSimple(); + break; + case 3: + archetype = new ArchetypeAct3ShivsSimple(); + break; + default: + archetype = new ArchetypeAct1PoisonSimple(); + break; + } + } else { switch (AbstractDungeon.actNum) { case 1: archetype = new ArchetypeAct1PoisonNewAge(); @@ -79,29 +117,11 @@ public void generateDeck() { case 3: archetype = new ArchetypeAct3ShivsNewAge(); break; - case 4: - //SlimeboundMod.logger.info("Silent spawned at Archetype " + NeowBoss.Rezzes); - { - switch (NeowBoss.Rezzes) { - case 0: - archetype = new ArchetypeAct1PoisonNewAge(); - break; - case 1: - archetype = new ArchetypeAct2MirrorImageNewAge(); - break; - case 2: - archetype = new ArchetypeAct3ShivsNewAge(); - break; - default: - archetype = new ArchetypeAct2MirrorImageNewAge(); - break; - } - break; - } default: archetype = new ArchetypeAct1PoisonNewAge(); break; } + } archetype.initialize(); currentHealth = maxHealth; @@ -170,6 +190,7 @@ public void damage(DamageInfo info) { @Override public void die() { + if (cantDie) return; super.die(); switch (MathUtils.random(1)) { @@ -264,4 +285,15 @@ public void update() { } + @Override + public void startTurn() { + super.startTurn(); + resetThisTurn = false; + } + + @Override + public void endTurnStartTurn() { + super.endTurnStartTurn(); + resetThisTurn = false; + } } diff --git a/src/main/java/charbosses/bosses/Silent/NewAge/ArchetypeAct1PoisonNewAge.java b/src/main/java/charbosses/bosses/Silent/NewAge/ArchetypeAct1PoisonNewAge.java index e3f502f561..8a167f96d8 100644 --- a/src/main/java/charbosses/bosses/Silent/NewAge/ArchetypeAct1PoisonNewAge.java +++ b/src/main/java/charbosses/bosses/Silent/NewAge/ArchetypeAct1PoisonNewAge.java @@ -140,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/Silent/Simpler/ArchetypeAct1PoisonSimple.java b/src/main/java/charbosses/bosses/Silent/Simpler/ArchetypeAct1PoisonSimple.java new file mode 100644 index 0000000000..55018b21f4 --- /dev/null +++ b/src/main/java/charbosses/bosses/Silent/Simpler/ArchetypeAct1PoisonSimple.java @@ -0,0 +1,142 @@ +package charbosses.bosses.Silent.Simpler; + +import charbosses.bosses.AbstractCharBoss; +import charbosses.bosses.Silent.ArchetypeBaseSilent; +import charbosses.cards.AbstractBossCard; +import charbosses.cards.green.*; +import charbosses.cards.other.Antidote; +import charbosses.cards.other.AntidoteAsPower; +import charbosses.cards.other.AntidoteAsPowerExpensive; +import charbosses.powers.bossmechanicpowers.SilentPoisonPower; +import charbosses.powers.general.EnemyPoisonPower; +import charbosses.relics.CBR_HornCleat; +import charbosses.relics.CBR_MarkOfPain; +import charbosses.relics.CBR_SneckoSkull; +import charbosses.relics.CBR_TwistedFunnel; +import com.esotericsoftware.spine.AnimationState; +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.utility.TextAboveCreatureAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import downfall.actions.SpeechBubbleAction; +import slimebound.SlimeboundMod; + +import java.lang.reflect.Method; +import java.util.ArrayList; + +import static awakenedOne.util.Wiz.atb; +//import static charbosses.bosses.Silent.CharBossSilent.POISONSPEECH; + +public class ArchetypeAct1PoisonSimple extends ArchetypeBaseSilent { + + private int glassKnives; + public ArchetypeAct1PoisonSimple() { + super("SI_POISON_ARCHETYPE", "Poison"); + + + maxHPModifier += 100; + maxHPModifierAsc = 10; + actNum = 1; + } + + + + @Override + public void addedPreBattle() { + super.addedPreBattle(); + + AbstractDungeon.actionManager.addToBottom(new MakeTempCardInHandAction(new AntidoteAsPower(), 1)); + + } + + public void initialize() { + + addRelic(new CBR_SneckoSkull()); + if (AbstractDungeon.ascensionLevel >= 19){ + addRelic(new CBR_HornCleat()); + } + + // animation + try { + Method loadAnimationMethod = AbstractCreature.class.getDeclaredMethod("loadAnimation", String.class, String.class, float.class); + loadAnimationMethod.setAccessible(true); + loadAnimationMethod.invoke(AbstractCharBoss.boss, "expansioncontentResources/images/bosses/silent/1/Poison_Silent.atlas", "expansioncontentResources/images/bosses/silent/1/Poison_Silent.json", 1.0f); + AnimationState.TrackEntry e = AbstractCharBoss.boss.state.setAnimation(0, "Idle", true); + e.setTimeScale(0.9f); + } catch (Exception e) { + e.printStackTrace(); + } + } + + + + @Override + public ArrayList getThisTurnCards() { + ArrayList cardsList = new ArrayList<>(); + boolean extraUpgrades = AbstractDungeon.ascensionLevel >= 4; + //boolean WhetstoneUpgrades = AbstractDungeon.ascensionLevel >= 19; + + if (!AbstractDungeon.player.hasPower(EnemyPoisonPower.POWER_ID)){ + + if (turn != 0) { + SlimeboundMod.logger.info("Successful poison reset"); + //AbstractDungeon.actionManager.addToBottom(new TextAboveCreatureAction(AbstractCharBoss.boss, TextAboveCreatureAction.TextType.INTERRUPTED)); + //AbstractDungeon.actionManager.addToBottom(new SpeechBubbleAction(POISONSPEECH, AbstractCharBoss.boss, 2F)); + turn = 0; + } + + } + switch (turn) { + case 0: //Turn 1 + if (looped){ + addToList(cardsList, new EnBouncingFlask(), extraUpgrades); + addToList(cardsList, new EnPoisonedStab(), false); + } else { + if (extraUpgrades) //Poison Potion + addToList(cardsList, new EnNewToxins()); + addToList(cardsList, new EnBouncingFlask(), extraUpgrades); + } + + turn++; + break; + + case 1: //Turn 2 + + addToList(cardsList, new EnDodgeAndRoll()); + addToList(cardsList, new EnDodgeAndRoll()); + turn++; + break; + + case 2: //Turn 3 + + addToList(cardsList, new EnCripplingCloud(),false); + addToList(cardsList, new EnGlassKnife(glassKnives)); + turn++; + break; + + case 3: //Turn 4 + + glassKnives++; //this is here because it confirms glass knife actually got played, not reset + addToList(cardsList, new EnBane(), false); + addToList(cardsList, new EnBane(), false); + + turn++; + break; + + case 4: //Turn 5 + addToList(cardsList, new EnDeadlyPoison(), false); + addToList(cardsList, new EnNoxiousFumes(), false); + turn++; + + turn = 3; + break; + + + } + return cardsList; + } + +} \ No newline at end of file diff --git a/src/main/java/charbosses/bosses/Silent/Simpler/ArchetypeAct2MirrorImageSimple.java b/src/main/java/charbosses/bosses/Silent/Simpler/ArchetypeAct2MirrorImageSimple.java new file mode 100644 index 0000000000..a6d393f708 --- /dev/null +++ b/src/main/java/charbosses/bosses/Silent/Simpler/ArchetypeAct2MirrorImageSimple.java @@ -0,0 +1,71 @@ +package charbosses.bosses.Silent.Simpler; + +import charbosses.bosses.Silent.ArchetypeBaseSilent; +import charbosses.cards.colorless.EnJAX; +import charbosses.cards.green.*; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; + +import java.util.ArrayList; + +public class ArchetypeAct2MirrorImageSimple extends ArchetypeBaseSilent { + + public ArchetypeAct2MirrorImageSimple() { + super("SI_MIRROR_ARCHETYPE", "Mirror"); + + maxHPModifier += 240; + maxHPModifierAsc = 20; + actNum = 2; + } + + + @Override + public ArrayList getThisTurnCards() { + ArrayList cardsList = new ArrayList<>(); + boolean extraUpgrades = AbstractDungeon.ascensionLevel >= 4; + + switch (turn) { + case 0: + if (extraUpgrades) //Ghost in the Jar + addToList(cardsList, new EnHallunication()); + addToList(cardsList, new EnBackstab(), extraUpgrades); + turn++; + break; + case 1: + addToList(cardsList, new EnJAX(), true); + addToList(cardsList, new EnDaggerSpray()); + turn++; + break; + case 2: + //Turn 3 + addToList(cardsList, new EnBlur(), extraUpgrades); + addToList(cardsList, new EnBlur()); + turn++; + break; + case 3: + //Turn 4 + addToList(cardsList, new EnDash(), extraUpgrades); + addToList(cardsList, new EnNeutralize(), extraUpgrades); + turn++; + break; + case 4: + //Turn 4 + addToList(cardsList, new EnRiddleWithHoles()); + + turn++; + break; + case 5: + //Turn 4 + addToList(cardsList, new EnAfterImage()); + addToList(cardsList, new EnAfterImage()); + turn = 1; + break; + + + } + + return cardsList; + } + + +} \ No newline at end of file diff --git a/src/main/java/charbosses/bosses/Silent/Simpler/ArchetypeAct3ShivsSimple.java b/src/main/java/charbosses/bosses/Silent/Simpler/ArchetypeAct3ShivsSimple.java new file mode 100644 index 0000000000..768c824b6b --- /dev/null +++ b/src/main/java/charbosses/bosses/Silent/Simpler/ArchetypeAct3ShivsSimple.java @@ -0,0 +1,134 @@ +package charbosses.bosses.Silent.Simpler; + +import charbosses.bosses.AbstractCharBoss; +import charbosses.bosses.Silent.ArchetypeBaseSilent; +import charbosses.cards.curses.EnCurseOfTheBell; +import charbosses.cards.green.*; +import charbosses.powers.bossmechanicpowers.SilentDelayedWraithPower; +import charbosses.powers.bossmechanicpowers.SilentShivTimeEaterPower; +import charbosses.relics.*; +import com.esotericsoftware.spine.AnimationState; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.green.Blur; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; + +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Collections; + +public class ArchetypeAct3ShivsSimple extends ArchetypeBaseSilent { + + private ArrayList turnOrder; + public ArchetypeAct3ShivsSimple() { + super("SI_SHIV_ARCHETYPE", "Shivs"); + + maxHPModifier += 350; + maxHPModifierAsc = 30; + actNum = 3; + turnOrder = new ArrayList<>(); + } + + @Override + public void addedPreBattle() { + super.addedPreBattle(); + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(AbstractCharBoss.boss, AbstractCharBoss.boss, new SilentShivTimeEaterPower(AbstractCharBoss.boss))); + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(AbstractCharBoss.boss, AbstractCharBoss.boss, new SilentDelayedWraithPower(AbstractCharBoss.boss))); + + resetMidTurnOrder(); + } + + + + public void initialize() { + + addRelic(new CBR_CallingBell()); + addRelic(new CBR_OrnamentalFan()); + addRelic(new CBR_OddlySmoothStone()); + addRelic(new CBR_BagOfMarbles()); + if (AbstractDungeon.ascensionLevel >= 19){ + addRelic(new CBR_Shuriken()); + } + } + + + public void resetMidTurnOrder(){ + ArrayList newTurnOrder = new ArrayList<>(); + newTurnOrder.add(1); + newTurnOrder.add(2); + newTurnOrder.add(3); + if (!turnOrder.isEmpty()) { + newTurnOrder.remove(turnOrder.get(0)); + } + Collections.shuffle(newTurnOrder, AbstractDungeon.monsterRng.random); + turnOrder.addAll(newTurnOrder); + } + + public void advanceTurn(){ + switch (turn) { + case 0: + case 1: + case 2: + case 3: + if (turnOrder.size() == 1){ + turn = 4; + resetMidTurnOrder(); + } else { + turn = turnOrder.get(0); + turnOrder.remove(0); + } + break; + case 4: + //Turn 5 + turn=0; + looped = true; + break; + + } + } + + + @Override + public ArrayList getThisTurnCards() { + ArrayList cardsList = new ArrayList<>(); + boolean extraUpgrades = AbstractDungeon.ascensionLevel >= 4; + switch (turn) { + case 0: + if (extraUpgrades) //Duplication Potion + addToList(cardsList, new Blur(), true); + addToList(cardsList, new EnCloakAndDagger(), false); + advanceTurn(); + break; + case 1: + addToList(cardsList, new EnPiercingWail()); + addToList(cardsList, new EnPiercingWail()); + + advanceTurn(); + break; + case 2: + addToList(cardsList, new EnBladeDance(),false); + addToList(cardsList, new EnCurseOfTheBell()); + + advanceTurn(); + break; + case 3: + addToList(cardsList, new EnAccuracy(), extraUpgrades); + addToList(cardsList, new EnNeutralize(), false); + + advanceTurn(); + break; + case 4: + //Turn 5 + addToList(cardsList, new EnMalaise(), false); + addToList(cardsList, new EnDeflect(), false); + + advanceTurn(); + break; + + } + + return cardsList; + } + +} diff --git a/src/main/java/charbosses/bosses/Watcher/CharBossWatcher.java b/src/main/java/charbosses/bosses/Watcher/CharBossWatcher.java index a54bedf969..e538eec27f 100644 --- a/src/main/java/charbosses/bosses/Watcher/CharBossWatcher.java +++ b/src/main/java/charbosses/bosses/Watcher/CharBossWatcher.java @@ -2,10 +2,10 @@ 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.bosses.Watcher.Simpler.ArchetypeAct2StanceDanceSimple; +import charbosses.bosses.Watcher.Simpler.ArchetypeAct1OmegaSimple; +import charbosses.bosses.Watcher.Simpler.ArchetypeAct3DivinitySimple; import charbosses.core.EnemyEnergyManager; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.Color; @@ -19,8 +19,8 @@ import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.ui.panels.energyorb.EnergyOrbPurple; +import downfall.actions.SpeechBubbleAction; import downfall.downfallMod; -import downfall.monsters.NeowBoss; import downfall.util.LocalizeHelper; public class CharBossWatcher extends AbstractCharBoss { @@ -33,9 +33,11 @@ public class CharBossWatcher extends AbstractCharBoss { public AnimationState eyeState; protected AnimationStateData eyeStateData; + //public static final String HALFHEALTHSPEECH = LocalizeHelper.downfallCharacterSpeech.TEXT[1]; + public CharBossWatcher() { - super(NAME, ID, 72, 0.0F, -5.0F, 240.0F, 270.0F, null, 0.0f, -20.0f, PlayerClass.WATCHER); + super(NAME, ID, 72, 0.0F, -5.0F, 240.0F, 270.0F, null, 0.0f, 20.0f, PlayerClass.WATCHER); this.energyOrb = new EnergyOrbPurple(); this.energy = new EnemyEnergyManager(3); this.loadAnimation("images/characters/watcher/idle/skeleton.atlas", "images/characters/watcher/idle/skeleton.json", 1.0f); @@ -98,10 +100,34 @@ public void render(SpriteBatch sb) { public void generateDeck() { AbstractBossDeckArchetype archetype; if (downfallMod.overrideBossDifficulty) { + archetype = new ArchetypeAct1RetainNewAge(); + + if (!downfallMod.useLegacyBosses) { + archetype = new ArchetypeAct1OmegaSimple(); + } + downfallMod.overrideBossDifficulty = false; this.currentHealth -= 100; } else + + + if (!downfallMod.useLegacyBosses) { + switch (AbstractDungeon.actNum) { + case 1: + archetype = new ArchetypeAct1OmegaSimple(); + break; + case 2: + archetype = new ArchetypeAct2StanceDanceSimple(); + break; + case 3: + archetype = new ArchetypeAct3DivinitySimple(); + break; + default: + archetype = new ArchetypeAct1OmegaSimple(); + break; + } + } else { switch (AbstractDungeon.actNum) { case 1: archetype = new ArchetypeAct1RetainNewAge(); @@ -112,27 +138,11 @@ public void generateDeck() { case 3: archetype = new ArchetypeAct3DivinityNewAge(); break; - case 4: { - switch (NeowBoss.Rezzes) { - case 0: - archetype = new ArchetypeAct1RetainNewAge(); - break; - case 1: - archetype = new ArchetypeAct2CalmNewAge(); - break; - case 2: - archetype = new ArchetypeAct3DivinityNewAge(); - break; - default: - archetype = new ArchetypeAct1RetainNewAge(); - break; - } - break; - } default: archetype = new ArchetypeAct1RetainNewAge(); break; } + } archetype.initialize(); chosenArchetype = archetype; @@ -186,5 +196,11 @@ public void die() { } +// public void playCrusaderSpeech(){ +// +// AbstractDungeon.actionManager.addToBottom(new SpeechBubbleAction(HALFHEALTHSPEECH, this, 2F)); +// +// } + } diff --git a/src/main/java/charbosses/bosses/Watcher/NewAge/ArchetypeAct3DivinityNewAge.java b/src/main/java/charbosses/bosses/Watcher/NewAge/ArchetypeAct3DivinityNewAge.java index 46e3a36184..d014fb96e6 100644 --- a/src/main/java/charbosses/bosses/Watcher/NewAge/ArchetypeAct3DivinityNewAge.java +++ b/src/main/java/charbosses/bosses/Watcher/NewAge/ArchetypeAct3DivinityNewAge.java @@ -2,9 +2,11 @@ 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.EnPanacea; import charbosses.cards.colorless.EnSwiftStrike; import charbosses.cards.curses.EnInjury; import charbosses.cards.curses.EnNormality; @@ -18,7 +20,7 @@ import java.util.ArrayList; -public class ArchetypeAct3DivinityNewAge extends ArchetypeBaseDefect { +public class ArchetypeAct3DivinityNewAge extends ArchetypeBaseWatcher { private AbstractBossCard theVeryImportantSandsOfTime = null; private AbstractBossCard theVeryImportantPerseverence = null; @@ -26,7 +28,7 @@ public class ArchetypeAct3DivinityNewAge extends ArchetypeBaseDefect { public ArchetypeAct3DivinityNewAge() { super("WA_ARCHETYPE_DIVINITY", "Divinity"); - maxHPModifier += 348; + maxHPModifier += 300; actNum = 3; bossMechanicName = WatcherDivinityPower.NAME; bossMechanicDesc = WatcherDivinityPower.DESC[0]; @@ -41,11 +43,10 @@ public void addedPreBattle() { } public void initialize() { - addRelic(new CBR_NeowsBlessing()); addRelic(new CBR_ThreadAndNeedle()); - addRelic(new CBR_DuvuDoll(2)); addRelic(new CBR_Torii()); + addRelic(new CBR_Vajra()); addRelic(new CBR_VelvetChoker()); } @@ -67,24 +68,24 @@ public ArrayList getThisTurnCards() { //turn 2 //25~ damage addToList(cardsList, new EnWaveOfTheHand()); - 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 EnBrilliance(), true); // 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 //off turn + addToList(cardsList, new EnDevotion()); addToList(cardsList, new EnSwiftStrike()); - addToList(cardsList, new EnConjurBlade(), false); - addToList(cardsList, new EnSanctity()); //Not played + addToList(cardsList, new EnConjurBlade(), true); 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()); + addToList(cardsList, new EnEmptyFist(), extraUpgrades); + addToList(cardsList, new EnSanctity()); //Not played turn++; break; case 4: @@ -92,7 +93,7 @@ public ArrayList getThisTurnCards() { //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()); + addToList(cardsList, new EnNormality()); turn = 0; looped = true; break; @@ -108,7 +109,7 @@ public ArrayList getThisTurnCards() { addToList(cardsList, c); c = new EnEmptyFist(); //Exit Divinity c.freeToPlayOnce = true; - addToList(cardsList, c, true); + addToList(cardsList, c, extraUpgrades); turn++; break; case 1: @@ -140,6 +141,6 @@ public ArrayList getThisTurnCards() { @Override public void initializeBonusRelic() { - addRelic(new CBR_Damaru()); + addRelic(new CBR_Girya(1)); } } \ 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 0000000000..e056b7db25 --- /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/bosses/Watcher/Simpler/ArchetypeAct1OmegaSimple.java b/src/main/java/charbosses/bosses/Watcher/Simpler/ArchetypeAct1OmegaSimple.java new file mode 100644 index 0000000000..f20cc77a9e --- /dev/null +++ b/src/main/java/charbosses/bosses/Watcher/Simpler/ArchetypeAct1OmegaSimple.java @@ -0,0 +1,125 @@ +package charbosses.bosses.Watcher.Simpler; + +import charbosses.bosses.AbstractCharBoss; +import charbosses.bosses.Watcher.ArchetypeBaseWatcher; +import charbosses.cards.colorless.EnPanacea; +import charbosses.cards.purple.*; +import charbosses.powers.bossmechanicpowers.CultistRevivePower; +import charbosses.relics.*; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.SpawnMonsterAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.monsters.exordium.Cultist; + +import java.util.ArrayList; + +public class ArchetypeAct1OmegaSimple extends ArchetypeBaseWatcher { + + public ArchetypeAct1OmegaSimple() { + super("WA_ARCHETYPE_CALM", "Calm"); + maxHPModifier += 138; + maxHPModifierAsc = 10; + actNum = 1; + } + + @Override + public void addedPreBattle() { + super.addedPreBattle(); + + AbstractMonster cawcaw = new Cultist(-400F, 0); + AbstractDungeon.actionManager.addToBottom(new SpawnMonsterAction(cawcaw, true)); + //AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(cawcaw, cawcaw, new CultistRevivePower(cawcaw, 1), 1, true, AbstractGameAction.AttackEffect.NONE)); + + } + + public void initialize() { + + addRelic(new CBR_OddMushroom()); + if (AbstractDungeon.ascensionLevel >= 19){ + addRelic(new CBR_MercuryHourglass()); + } + } + + @Override + public ArrayList getThisTurnCards() { + AbstractCharBoss b = AbstractCharBoss.boss; + ArrayList cardsList = new ArrayList<>(); + boolean extraUpgrades = AbstractDungeon.ascensionLevel >= 4; + switch (turn) { + case 0: + if (extraUpgrades) //Essence of Steel Potion + addToList(cardsList, new EnAlpha()); + addToList(cardsList, new EnEndIsNigh()); + turn++; + break; + case 1: + addToList(cardsList, new EnWaveOfTheHand()); + addToList(cardsList, new EnDefendPurple()); + turn++; + break; + case 2: + addToList(cardsList, new EnWishPlated(), extraUpgrades); + addToList(cardsList, new EnPanacea(), false); + + turn++; + break; + case 3: + addToList(cardsList, new EnFalseWorship()); + addToList(cardsList, new EnStrikePurple(), false); + turn++; + break; + case 4: + addToList(cardsList, new EnTruePeace()); + addToList(cardsList, new EnTruePeace()); + turn++; + break; + case 5: + addToList(cardsList, new EnBeta()); + addToList(cardsList, new EnDefendPurple(), false); + turn++; + break; + case 6: + addToList(cardsList, new EnWaveOfTheHand()); + addToList(cardsList, new EnDefendPurple()); + turn++; + break; + case 7: + addToList(cardsList, new EnWishPlated(), extraUpgrades); + addToList(cardsList, new EnPanacea(), false); + turn++; + break; + case 8: + addToList(cardsList, new EnFalseWorship()); + addToList(cardsList, new EnStrikePurple(), false); + turn++; + break; + case 9: + addToList(cardsList, new EnTruePeace()); + addToList(cardsList, new EnTruePeace()); + turn++; + break; + case 10: + addToList(cardsList, new EnOmega()); + addToList(cardsList, new EnTruePeace()); + turn++; + break; + case 11: + addToList(cardsList, new EnTruePeace()); + addToList(cardsList, new EnTruePeace()); + turn++; + break; + case 12: + addToList(cardsList, new EnJudgment()); + addToList(cardsList, new EnTruePeace()); + break; + } + + + return cardsList; + } + + +} diff --git a/src/main/java/charbosses/bosses/Watcher/Simpler/ArchetypeAct2StanceDanceSimple.java b/src/main/java/charbosses/bosses/Watcher/Simpler/ArchetypeAct2StanceDanceSimple.java new file mode 100644 index 0000000000..fa8a07534f --- /dev/null +++ b/src/main/java/charbosses/bosses/Watcher/Simpler/ArchetypeAct2StanceDanceSimple.java @@ -0,0 +1,73 @@ +package charbosses.bosses.Watcher.Simpler; + +import charbosses.bosses.Watcher.ArchetypeBaseWatcher; +import charbosses.cards.purple.*; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; + +import java.util.ArrayList; + +public class ArchetypeAct2StanceDanceSimple extends ArchetypeBaseWatcher { + + + public ArchetypeAct2StanceDanceSimple() { + super("WA_ARCHETYPE_RETAIN", "Retain"); + + maxHPModifier += 198; + maxHPModifierAsc = 20; + actNum = 2; + } + + @Override + public ArrayList getThisTurnCards() { + ArrayList cardsList = new ArrayList<>(); + boolean extraUpgrades = AbstractDungeon.ascensionLevel >= 4; + switch (turn) { + case 0: + //Turn 1 + if (!looped) addToList(cardsList, new EnEyeForAnEye()); + if (!looped) addToList(cardsList, new EnSteady()); + addToList(cardsList, new EnLikeWater()); + turn++; + break; + case 1: + //Turn 2 + if (!looped) { + addToList(cardsList, new EnReachHeaven()); + } else { + addToList(cardsList, new EnThroughViolence()); + } + addToList(cardsList, new EnHalt()); + //addToList(cardsList, new EnHalt()); + turn++; + break; + case 2: + //Turn 3 + // addToList(cardsList, new EnPanacea()); + addToList(cardsList, new EnMentalFortress()); + addToList(cardsList, new EnWallop()); + turn++; + break; + case 3: + turn++; + break; + case 4: + addToList(cardsList, new EnSashWhip()); + addToList(cardsList, new EnCrushJoints()); + turn++; + break; + case 5: + if (looped){ + addToList(cardsList, new EnExpunger()); + } else { + addToList(cardsList, new EnConjurBlade()); + } + turn = 0; + looped = true; + break; + } + + + return cardsList; + } +} \ No newline at end of file diff --git a/src/main/java/charbosses/bosses/Watcher/Simpler/ArchetypeAct3DivinitySimple.java b/src/main/java/charbosses/bosses/Watcher/Simpler/ArchetypeAct3DivinitySimple.java new file mode 100644 index 0000000000..56940ef774 --- /dev/null +++ b/src/main/java/charbosses/bosses/Watcher/Simpler/ArchetypeAct3DivinitySimple.java @@ -0,0 +1,125 @@ +package charbosses.bosses.Watcher.Simpler; + +import basemod.ReflectionHacks; +import charbosses.bosses.AbstractCharBoss; +import charbosses.bosses.Watcher.ArchetypeBaseWatcher; +import charbosses.bosses.Watcher.CharBossWatcher; +import charbosses.cards.AbstractBossCard; +import charbosses.cards.colorless.EnApparition; +import charbosses.cards.colorless.EnBlind; +import charbosses.cards.purple.*; +import charbosses.monsters.VoidCore; +import charbosses.powers.bossmechanicpowers.DefectAttackVoidPower; +import charbosses.powers.bossmechanicpowers.WatcherDivinityNoRemovePower; +import charbosses.powers.bossmechanicpowers.WatcherDivinityPower; +import charbosses.relics.CBR_MercuryHourglass; +import charbosses.relics.CBR_OddMushroom; +import charbosses.relics.CBR_PenNib; +import charbosses.relics.CBR_TungstenRod; +import charbosses.stances.EnDivinityStance; +import com.esotericsoftware.spine.AnimationState; +import com.esotericsoftware.spine.AnimationStateData; +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.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.IntangiblePower; +import com.megacrit.cardcrawl.vfx.combat.DevotionEffect; +import hermit.util.Wiz; + +import java.lang.reflect.Method; +import java.util.ArrayList; + +public class ArchetypeAct3DivinitySimple extends ArchetypeBaseWatcher { + + public boolean halfHealthTrigger = false; + public boolean hasHalfHealthTriggered = false; + + public ArchetypeAct3DivinitySimple() { + super("WA_ARCHETYPE_DIVINITY", "Divinity"); + + maxHPModifier += 348; + maxHPModifierAsc = 30; + actNum = 3; + + } + + + + public void initialize() { + + addRelic(new CBR_TungstenRod()); + if (AbstractDungeon.ascensionLevel >= 19){ + addRelic(new CBR_PenNib()); + } + } + + @Override + public void addedPreBattle() { + + AbstractCreature m = AbstractCharBoss.boss; + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(m, m, new WatcherDivinityPower(m))); + + } + + @Override + public ArrayList getThisTurnCards() { + ArrayList cardsList = new ArrayList<>(); + boolean extraUpgrades = AbstractDungeon.ascensionLevel >= 4; + if (halfHealthTrigger && AbstractCharBoss.boss.stance.ID != EnDivinityStance.STANCE_ID){ + //Lose all Mantra. Restore 10 HP and gain 1 Strength per Mantra lost. + addToList(cardsList, new EnCrusade(), extraUpgrades); + addToList(cardsList, new EnApparition(), false); + //((CharBossWatcher)AbstractCharBoss.boss).playCrusaderSpeech(); + turn++; + if (turn >= 4){ + turn = 0; + looped = true; + } + } else { + switch (turn) { + case 0: + //turn 1 + if (extraUpgrades) //Blessing of the Forge Potion + addToList(cardsList, new EnWish(), extraUpgrades); + addToList(cardsList, new EnProstrate()); + turn++; + break; + case 1: + //turn 2 + addToList(cardsList, new EnBrilliance(), false); + addToList(cardsList, new EnFleetingFaith(), false); + turn++; + break; + case 2: + addToList(cardsList, new EnWallop(), true); + addToList(cardsList, new EnBlind(), extraUpgrades); + turn++; + break; + case 3: + //new Regen card + addToList(cardsList, new EnFleetingFaith(), false); + turn++; + break; + case 4: + //turn 4 + addToList(cardsList, new EnProtect(), true); + AbstractBossCard c = new EnBrilliance(); + //c.manualCustomDamageModifier = 2; + addToList(cardsList, c, true); + turn = 0; + looped = true; + break; + + + } + } + + return cardsList; + } + + +} \ 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 01fb76135f..236441859e 100644 --- a/src/main/java/charbosses/cards/AbstractBossCard.java +++ b/src/main/java/charbosses/cards/AbstractBossCard.java @@ -5,6 +5,7 @@ import charbosses.bosses.AbstractCharBoss; import charbosses.bosses.Watcher.CharBossWatcher; import charbosses.cards.colorless.EnHandOfGreedHermitNecro; +import charbosses.cards.hermit.EnMemento; import charbosses.cards.hermit.EnShortFuse; import charbosses.cards.hermit.EnShortFuseNecro; import charbosses.cards.purple.AbstractStanceChangeCard; @@ -49,6 +50,7 @@ import com.megacrit.cardcrawl.vfx.combat.BuffParticleEffect; import com.megacrit.cardcrawl.vfx.combat.StunStarEffect; import com.megacrit.cardcrawl.vfx.combat.UnknownParticleEffect; +import downfall.downfallMod; import hermit.characters.hermit; import hermit.util.TextureLoader; @@ -60,8 +62,8 @@ public abstract class AbstractBossCard extends AbstractCard { - public static final float HAND_SCALE = 0.35f; - public static final float HOVER_SCALE = 0.8f; + public static float HAND_SCALE = 0.65f; + public static float HOVER_SCALE = 0.85f; public static boolean recursionCheck = false; public AbstractCharBoss owner; public boolean hov2 = false; @@ -81,6 +83,7 @@ public abstract class AbstractBossCard extends AbstractCard { public int damageMultIfPlayed = 1; public int focusGeneratedIfPlayed = 0; public int vulnGeneratedIfPlayed = 0; + public int selfWeakIfPlayed = 0; public int artifactConsumedIfPlayed = 0; public boolean vulnCalculated = false; public int blockGeneratedIfPlayed = 0; @@ -93,9 +96,10 @@ public abstract class AbstractBossCard extends AbstractCard { public int manualCustomDamageModifier = 0; public float manualCustomDamageModifierMult = 1.0f; public boolean manualCustomVulnModifier = false; + public boolean manualCustomSelfWeakModifier = 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); @@ -125,6 +129,7 @@ public AbstractBossCard(String id, String name, String img, int cost, String raw this.owner = AbstractCharBoss.boss; this.limit = 99; + setScale(); } public AbstractBossCard(String id, String name, String img, int cost, String rawDescription, CardType type, @@ -134,6 +139,8 @@ public AbstractBossCard(String id, String name, String img, int cost, String raw this.limit = 99; this.intent = intent; + setScale(); + } public AbstractBossCard(String id, String name, String img, int cost, String rawDescription, CardType type, @@ -143,8 +150,9 @@ public AbstractBossCard(String id, String name, String img, int cost, String raw this.limit = 99; this.intent = intent; + setScale(); if (isCustomCard) { - if (color == hermit.Enums.COLOR_YELLOW) { + if (color == hermit.Enums.COLOR_YELLOW || this instanceof EnMemento) { this.portrait = new TextureAtlas.AtlasRegion(new Texture(img), 0, 0, 250, 190); this.portraitImg = new Texture(img); } else { @@ -163,6 +171,18 @@ public AbstractBossCard(AbstractCard baseCard) { if (this.type == CardType.CURSE || this.type == CardType.STATUS) { this.forceDraw = true; } + setScale(); + } + + public void setScale(){ + if (downfallMod.useLegacyBosses) { + HAND_SCALE = 0.35F; + HOVER_SCALE = 0.8F; + } else { + HAND_SCALE = 0.45F; + HOVER_SCALE = 0.7F; + intentOffsetY = -100F * Settings.scale; + } } public static int statusValue() { @@ -321,15 +341,17 @@ public void calculateCardDamage(AbstractMonster mo) { this.owner = (AbstractCharBoss) mo; } if (mo != null) { - this.damage = MathUtils.floor(calculateDamage(mo, player, this.baseDamage)); - this.intentDmg = MathUtils.floor(manualCustomDamageModifierMult * calculateDamage(mo, player, this.baseDamage + customIntentModifiedDamage() + manualCustomDamageModifier)); - if (this instanceof EnCarveReality) { - if (((EnCarveReality)this).willUseSmite) { - EnSmite enSmite = new EnSmite(); - enSmite.calculateCardDamage(this.owner); - this.intentDmg += enSmite.intentDmg; + this.damage = MathUtils.floor(calculateDamage(mo, player, this.baseDamage)); + this.intentDmg = MathUtils.floor(manualCustomDamageModifierMult * calculateDamage(mo, player, this.baseDamage + customIntentModifiedDamage() + manualCustomDamageModifier)); + if (this instanceof EnCarveReality) { + if (((EnCarveReality) this).willUseSmite) { + EnSmite enSmite = new EnSmite(); + enSmite.calculateCardDamage(this.owner); + this.intentDmg += enSmite.intentDmg; + } } - } + + } this.initializeDescription(); } diff --git a/src/main/java/charbosses/cards/EnemyCardGroup.java b/src/main/java/charbosses/cards/EnemyCardGroup.java index 493a12ef6d..9c62705302 100644 --- a/src/main/java/charbosses/cards/EnemyCardGroup.java +++ b/src/main/java/charbosses/cards/EnemyCardGroup.java @@ -9,33 +9,47 @@ import com.megacrit.cardcrawl.powers.AbstractPower; import com.megacrit.cardcrawl.relics.AbstractRelic; import com.megacrit.cardcrawl.vfx.cardManip.ExhaustCardEffect; +import downfall.downfallMod; import java.util.ArrayList; public class EnemyCardGroup extends CardGroup { public static final int HAND_ROW_LENGTH = 10; - public static final float HAND_HEIGHT_OFFSET = 0.56F; + public static float HAND_HEIGHT_OFFSET = 0.56F; public AbstractCharBoss owner; public static AbstractBossCard hov2holder = null; public EnemyCardGroup(CardGroupType type) { super(type); this.owner = AbstractCharBoss.boss; + if (downfallMod.useLegacyBosses) { + HAND_HEIGHT_OFFSET = 0.61F; + } } public EnemyCardGroup(CardGroupType type, AbstractCharBoss owner) { super(type); this.owner = owner; + if (downfallMod.useLegacyBosses) { + HAND_HEIGHT_OFFSET = 0.61F; + } } public EnemyCardGroup(CardGroup group, CardGroupType type) { super(group, type); this.owner = AbstractCharBoss.boss; + if (downfallMod.useLegacyBosses) { + HAND_HEIGHT_OFFSET = 0.61F; + } } public EnemyCardGroup(CardGroup group, CardGroupType type, AbstractCharBoss owner) { super(group, type); this.owner = owner; + + if (downfallMod.useLegacyBosses) { + HAND_HEIGHT_OFFSET = 0.61F; + } } public void moveToDiscardPile(final AbstractCard c) { @@ -179,8 +193,14 @@ public void refreshHandLayout() { c.targetDrawScale = AbstractBossCard.HAND_SCALE; } int cardsinrow = Math.min(this.group.size() - HAND_ROW_LENGTH * (int) Math.floor((float) i / (float) HAND_ROW_LENGTH), HAND_ROW_LENGTH); - float widthspacing = AbstractCard.IMG_WIDTH_S + 100.0f * Settings.scale; - c.target_x = Settings.WIDTH * .9F - ((cardsinrow + 0.5f) * (widthspacing * AbstractBossCard.HAND_SCALE)) + (widthspacing * AbstractBossCard.HAND_SCALE) * (i % HAND_ROW_LENGTH); + float widthspacing = 0; + if (downfallMod.useLegacyBosses) { + widthspacing= AbstractCard.IMG_WIDTH_S + 100.0f * Settings.scale; + c.target_x = Settings.WIDTH * .9F - ((cardsinrow + 0.5f) * (widthspacing * AbstractBossCard.HAND_SCALE)) + (widthspacing * AbstractBossCard.HAND_SCALE) * (i % HAND_ROW_LENGTH); + } else { + widthspacing=AbstractCard.IMG_WIDTH_S + 115.0f * Settings.scale; + c.target_x = Settings.WIDTH * (.85F + (cardsinrow -2) * .05F) - ((cardsinrow + 0.5f) * (widthspacing * AbstractBossCard.HAND_SCALE)) + (widthspacing * AbstractBossCard.HAND_SCALE) * (i % HAND_ROW_LENGTH); + } c.target_y = Settings.HEIGHT * HAND_HEIGHT_OFFSET + (AbstractCard.IMG_HEIGHT_S * AbstractBossCard.HAND_SCALE) * ((float) Math.floor(((float) i) / (float) HAND_ROW_LENGTH) + (this.group.size() > HAND_ROW_LENGTH ? 0.0f : 1.0f)); if (((AbstractBossCard) c).hov2 && c.hb.hovered) { if (hoveredcard == null || EnemyCardGroup.hov2holder == c) { diff --git a/src/main/java/charbosses/cards/blue/EnBeamCell.java b/src/main/java/charbosses/cards/blue/EnBeamCell.java index 4392ae83d8..1337d892d1 100644 --- a/src/main/java/charbosses/cards/blue/EnBeamCell.java +++ b/src/main/java/charbosses/cards/blue/EnBeamCell.java @@ -1,7 +1,9 @@ package charbosses.cards.blue; import charbosses.cards.AbstractBossCard; +import charbosses.monsters.VoidCore; 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.cards.AbstractCard; @@ -9,9 +11,11 @@ import com.megacrit.cardcrawl.cards.blue.BeamCell; 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.VulnerablePower; +import com.megacrit.cardcrawl.vfx.combat.SmallLaserEffect; public class EnBeamCell extends AbstractBossCard { public static final String ID = "downfall_Charboss:BeamCell"; @@ -27,9 +31,20 @@ public EnBeamCell() { this.magicNumber = this.baseMagicNumber; this.baseDamage = 3; artifactConsumedIfPlayed = 1; + vulnGeneratedIfPlayed = magicNumber + 1; } public void use(AbstractPlayer p, AbstractMonster m) { + AbstractMonster foundCore = null; + for (AbstractMonster m2: AbstractDungeon.getMonsters().monsters){ + if (m2 instanceof VoidCore){ + foundCore= m2; + break; + } + } + if (foundCore != null){ + AbstractDungeon.actionManager.addToBottom(new VFXAction(new SmallLaserEffect(AbstractDungeon.player.hb.cX, AbstractDungeon.player.hb.cY, foundCore.hb.cX, foundCore.hb.cY), 0.3F)); + } this.addToBot(new DamageAction(p, new DamageInfo(m, this.damage, DamageInfo.DamageType.NORMAL), AbstractGameAction.AttackEffect.NONE));// 44 this.addToBot(new ApplyPowerAction(p, m, new VulnerablePower(p, this.magicNumber + 1, true), this.magicNumber + 1, true, AbstractGameAction.AttackEffect.NONE));// 38 } diff --git a/src/main/java/charbosses/cards/blue/EnBiasedCognition.java b/src/main/java/charbosses/cards/blue/EnBiasedCognition.java index 944b47b4e5..c1c48d15c4 100644 --- a/src/main/java/charbosses/cards/blue/EnBiasedCognition.java +++ b/src/main/java/charbosses/cards/blue/EnBiasedCognition.java @@ -4,18 +4,15 @@ 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.actions.common.MakeTempCardInDiscardAction; 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.cards.red.Disarm; 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; @@ -40,6 +37,7 @@ public void update() { }); this.addToBot(new ApplyPowerAction(m, m, new FocusPower(m, this.magicNumber), this.magicNumber)); this.addToBot(new ApplyPowerAction(m, m, new BiasPower(m, 1), 1)); + //atb(new MakeTempCardInDiscardAction(new Disarm(), 1)); } public void upgrade() { @@ -47,7 +45,6 @@ public void upgrade() { this.upgradeName(); this.upgradeMagicNumber(1); } - } @Override diff --git a/src/main/java/charbosses/cards/blue/EnCuriousRobot.java b/src/main/java/charbosses/cards/blue/EnCuriousRobot.java new file mode 100644 index 0000000000..14ea35faf5 --- /dev/null +++ b/src/main/java/charbosses/cards/blue/EnCuriousRobot.java @@ -0,0 +1,61 @@ +package charbosses.cards.blue; + +import basemod.ReflectionHacks; +import charbosses.cards.AbstractBossCard; +import charbosses.powers.bossmechanicpowers.DefectAttackVoidPower; +import charbosses.powers.bossmechanicpowers.DefectCuriosityPower; +import charbosses.powers.bossmechanicpowers.IroncladStatusPower; +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.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 downfall.util.TextureLoader; +import expansioncontent.expansionContentMod; + +public class EnCuriousRobot extends AbstractBossCard { + public static final String ID = "downfall:CuriousRobot"; + private static final CardStrings cardStrings; + + static { + cardStrings = CardCrawlGame.languagePack.getCardStrings(ID); + } + + public EnCuriousRobot() { + super(ID, cardStrings.NAME, expansionContentMod.makeCardPath("SummonMushrooms.png"), 1, cardStrings.DESCRIPTION, CardType.POWER, CardColor.BLUE, CardRarity.RARE, CardTarget.SELF, AbstractMonster.Intent.BUFF); + portrait = TextureLoader.getTextureAsAtlasRegion(expansionContentMod.makeCardPath("SummonMushrooms.png")); + portraitImg = TextureLoader.getTexture(expansionContentMod.makeCardPath("SummonMushrooms.png")); + this.loadJokeCardImage(); + } + + @Override + public void use(final AbstractPlayer p, final AbstractMonster m) { + } + + @Override + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + } + } + + @Override + public AbstractCard makeCopy() { + return new EnCuriousRobot(); + } + + public void loadJokeCardImage() { + Texture cardTexture; + cardTexture = hermit.util.TextureLoader.getTexture(this.assetUrl.replace("cards","betacards")); + 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(this, AbstractCard.class, "jokePortrait", cardImg); + } + +} diff --git a/src/main/java/charbosses/cards/blue/EnDoomAndGloom.java b/src/main/java/charbosses/cards/blue/EnDoomAndGloom.java index 25678321f9..15f57aed8a 100644 --- a/src/main/java/charbosses/cards/blue/EnDoomAndGloom.java +++ b/src/main/java/charbosses/cards/blue/EnDoomAndGloom.java @@ -35,8 +35,8 @@ public EnDoomAndGloom() { 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 DamageAction(p, new DamageInfo(m, this.damage, this.damageTypeForTurn), AbstractGameAction.AttackEffect.NONE)); + //this.addToBot(new VFXAction(p, new CleaveEffect(), 0.1F)); + this.addToBot(new DamageAction(p, new DamageInfo(m, this.damage, this.damageTypeForTurn), AbstractGameAction.AttackEffect.FIRE)); this.addToBot(new EnemyChannelAction(new EnemyDark())); } diff --git a/src/main/java/charbosses/cards/blue/EnLoop.java b/src/main/java/charbosses/cards/blue/EnLoop.java new file mode 100644 index 0000000000..7e055d58b2 --- /dev/null +++ b/src/main/java/charbosses/cards/blue/EnLoop.java @@ -0,0 +1,52 @@ +package charbosses.cards.blue; + +import charbosses.cards.AbstractBossCard; +import charbosses.powers.cardpowers.EnemyLoopPower; +import charbosses.powers.general.EnemyDrawPower; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.blue.Loop; +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 EnLoop extends AbstractBossCard { + public static final String ID = "downfall_Charboss:Loop"; + private static final CardStrings cardStrings; + + public EnLoop() { + super(ID, cardStrings.NAME, "blue/power/loop", 1, cardStrings.DESCRIPTION, CardType.POWER, CardColor.BLUE, CardRarity.UNCOMMON, CardTarget.SELF, AbstractMonster.Intent.BUFF); + this.baseMagicNumber = 1; + this.magicNumber = 1; + } + + public void use(AbstractPlayer p, AbstractMonster m) { + this.addToBot(new ApplyPowerAction(m, m, new EnemyLoopPower(m, this.magicNumber), this.magicNumber)); + } + + @Override + public int getPriority(ArrayList hand) { + return 50; + } + + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + this.upgradeMagicNumber(1); + this.rawDescription = cardStrings.UPGRADE_DESCRIPTION; + this.initializeDescription(); + } + + } + + public AbstractCard makeCopy() { + return new EnLoop(); + } + + static { + cardStrings = CardCrawlGame.languagePack.getCardStrings(Loop.ID); + } +} 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 0000000000..44bf22aebc --- /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/EnMurderbot.java b/src/main/java/charbosses/cards/blue/EnMurderbot.java new file mode 100644 index 0000000000..8e28d981cc --- /dev/null +++ b/src/main/java/charbosses/cards/blue/EnMurderbot.java @@ -0,0 +1,61 @@ +package charbosses.cards.blue; + +import basemod.ReflectionHacks; +import charbosses.cards.AbstractBossCard; +import charbosses.powers.bossmechanicpowers.DefectAttackVoidPower; +import charbosses.powers.bossmechanicpowers.IroncladStatusPower; +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.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 downfall.util.TextureLoader; +import expansioncontent.expansionContentMod; + +public class EnMurderbot extends AbstractBossCard { + public static final String ID = "downfall:Murderbot"; + private static final CardStrings cardStrings; + + static { + cardStrings = CardCrawlGame.languagePack.getCardStrings(ID); + } + + public EnMurderbot() { + super(ID, cardStrings.NAME, expansionContentMod.makeCardPath("SummonMushrooms.png"), 1, cardStrings.DESCRIPTION, CardType.POWER, CardColor.BLUE, CardRarity.RARE, CardTarget.SELF, AbstractMonster.Intent.BUFF); + portrait = TextureLoader.getTextureAsAtlasRegion(expansionContentMod.makeCardPath("SummonMushrooms.png")); + portraitImg = TextureLoader.getTexture(expansionContentMod.makeCardPath("SummonMushrooms.png")); + this.loadJokeCardImage(); + } + + @Override + public void use(final AbstractPlayer p, final AbstractMonster m) { + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(m, m, new DefectAttackVoidPower(m))); + } + + @Override + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + } + } + + @Override + public AbstractCard makeCopy() { + return new EnMurderbot(); + } + + public void loadJokeCardImage() { + Texture cardTexture; + cardTexture = hermit.util.TextureLoader.getTexture(this.assetUrl.replace("cards","betacards")); + 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(this, AbstractCard.class, "jokePortrait", cardImg); + } + +} diff --git a/src/main/java/charbosses/cards/blue/EnTemptation.java b/src/main/java/charbosses/cards/blue/EnTemptation.java new file mode 100644 index 0000000000..de6de7c805 --- /dev/null +++ b/src/main/java/charbosses/cards/blue/EnTemptation.java @@ -0,0 +1,67 @@ +package charbosses.cards.blue; + +import basemod.ReflectionHacks; +import charbosses.cards.AbstractBossCard; +import charbosses.powers.bossmechanicpowers.IroncladStatusPower; +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.MakeTempCardInDrawPileAction; +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 downfall.util.TextureLoader; +import expansioncontent.expansionContentMod; + +public class EnTemptation extends AbstractBossCard { + public static final String ID = "downfall:Temptation"; + private static final CardStrings cardStrings; + + static { + cardStrings = CardCrawlGame.languagePack.getCardStrings(ID); + } + + public EnTemptation() { + super(ID, cardStrings.NAME, expansionContentMod.makeCardPath("SummonMushrooms.png"), 1, cardStrings.DESCRIPTION, CardType.SKILL, CardColor.BLUE, CardRarity.RARE, CardTarget.SELF, AbstractMonster.Intent.BUFF); + portrait = TextureLoader.getTextureAsAtlasRegion(expansionContentMod.makeCardPath("SummonMushrooms.png")); + portraitImg = TextureLoader.getTexture(expansionContentMod.makeCardPath("SummonMushrooms.png")); + this.loadJokeCardImage(); + baseMagicNumber = magicNumber = 5; + } + + @Override + public void use(final AbstractPlayer p, final AbstractMonster m) { + + for(int i = 0; i < this.magicNumber; ++i) { + AbstractCard card = AbstractDungeon.returnTrulyRandomCardInCombat(CardType.POWER).makeCopy(); + this.addToBot(new MakeTempCardInDrawPileAction(card, 1, true, true)); + } + } + + @Override + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + upgradeMagicNumber(1); + } + } + + @Override + public AbstractCard makeCopy() { + return new EnTemptation(); + } + + public void loadJokeCardImage() { + Texture cardTexture; + cardTexture = hermit.util.TextureLoader.getTexture(this.assetUrl.replace("cards","betacards")); + 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(this, AbstractCard.class, "jokePortrait", cardImg); + } + +} 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 0000000000..dfa5b4cda6 --- /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/EnPowerUp.java b/src/main/java/charbosses/cards/colorless/EnPowerUp.java new file mode 100644 index 0000000000..a54b68d3bd --- /dev/null +++ b/src/main/java/charbosses/cards/colorless/EnPowerUp.java @@ -0,0 +1,46 @@ +package charbosses.cards.colorless; + +import charbosses.actions.unique.EnemyApotheosisAction; +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 EnPowerUp extends AbstractBossCard { + public static final String ID = "downfall_Charboss:Apotheosis"; + private static final CardStrings cardStrings; + + public EnPowerUp() { + super(ID, cardStrings.NAME, "colorless/skill/apotheosis", 0, cardStrings.DESCRIPTION, CardType.SKILL, CardColor.COLORLESS, CardRarity.RARE, CardTarget.NONE, AbstractMonster.Intent.BUFF); + this.exhaust = true; + } + + public void use(AbstractPlayer p, AbstractMonster m) { + this.addToBot(new EnemyApotheosisAction()); + } + + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + this.upgradeBaseCost(1); + } + + } + + @Override + public int getPriority(ArrayList hand) { + return 100; + } + + public AbstractCard makeCopy() { + return new EnPowerUp(); + } + + static { + cardStrings = CardCrawlGame.languagePack.getCardStrings("Apotheosis"); + } +} diff --git a/src/main/java/charbosses/cards/colorless/EnSadisticNature.java b/src/main/java/charbosses/cards/colorless/EnSadisticNature.java index 8e1a51d94d..ebb04be39f 100644 --- a/src/main/java/charbosses/cards/colorless/EnSadisticNature.java +++ b/src/main/java/charbosses/cards/colorless/EnSadisticNature.java @@ -1,6 +1,7 @@ package charbosses.cards.colorless; import charbosses.cards.AbstractBossCard; +import charbosses.powers.cardpowers.EnemySadisticPower; import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.cards.colorless.SadisticNature; @@ -27,7 +28,8 @@ public EnSadisticNature() { } public void use(AbstractPlayer p, AbstractMonster m) { - this.addToBot(new ApplyPowerAction(m, m, new SadisticPower(m, this.magicNumber), this.magicNumber)); + //basically identical except it checks for ginger and turnip + this.addToBot(new ApplyPowerAction(m, m, new EnemySadisticPower(m, this.magicNumber), this.magicNumber)); } public void upgrade() { diff --git a/src/main/java/charbosses/cards/colorless/potioncards/AncientPotionCard.java b/src/main/java/charbosses/cards/colorless/potioncards/AncientPotionCard.java new file mode 100644 index 0000000000..b876ff888c --- /dev/null +++ b/src/main/java/charbosses/cards/colorless/potioncards/AncientPotionCard.java @@ -0,0 +1,64 @@ +package charbosses.cards.colorless.potioncards; + +import charbosses.cards.AbstractBossCard; +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.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.CardStrings; +import com.megacrit.cardcrawl.localization.PotionStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.ArtifactPower; +import downfall.util.TextureLoader; +import downfall.vfx.PotionThrowEffect; +import expansioncontent.expansionContentMod; + +import java.util.Locale; + +public class AncientPotionCard extends AbstractBossCard { + public static final String ID = "downfall:AncientPotionCard"; + private static final PotionStrings cardStrings; + + static { + cardStrings = CardCrawlGame.languagePack.getPotionString("Ancient Potion"); + } + public AncientPotionCard() { + super(ID, cardStrings.NAME, expansionContentMod.makeCardPath("SummonMushrooms.png"), 0, "", CardType.SKILL, CardColor.COLORLESS, CardRarity.COMMON, CardTarget.SELF, AbstractMonster.Intent.BUFF); + portrait = TextureLoader.getTextureAsAtlasRegion(expansionContentMod.makeCardPath("SummonMushrooms.png")); + portraitImg = TextureLoader.getTexture(expansionContentMod.makeCardPath("SummonMushrooms.png")); + rawDescription = getCorrectedText(); + initializeDescription(); + initializeDescriptionCN(); + } + + public String getCorrectedText(){ + String temp = cardStrings.DESCRIPTIONS[0] + 1 + cardStrings.DESCRIPTIONS[1]; + temp = temp.replace("#b", ""); + temp = temp.replace("#y", ""); + return temp; + } + + + @Override + public void use(final AbstractPlayer p, final AbstractMonster m) { + addToBot(new VFXAction(new PotionThrowEffect("downfallResources/images/vfx/AncientPotion.png", m.hb.cX, m.hb.cY, m.hb.cX, m.hb.cY, 2F, 0.6F, false, true), 0.6F)); + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(m, m, new ArtifactPower(m, 1), 1)); + + } + + @Override + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + } + } + + @Override + public AbstractCard makeCopy() { + return new AncientPotionCard(); + } + + +} diff --git a/src/main/java/charbosses/cards/colorless/potioncards/BlessingOfForgePotion.java b/src/main/java/charbosses/cards/colorless/potioncards/BlessingOfForgePotion.java new file mode 100644 index 0000000000..5436273a6f --- /dev/null +++ b/src/main/java/charbosses/cards/colorless/potioncards/BlessingOfForgePotion.java @@ -0,0 +1,60 @@ +package charbosses.cards.colorless.potioncards; + +import charbosses.cards.AbstractBossCard; +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.localization.CardStrings; +import com.megacrit.cardcrawl.localization.PotionStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import downfall.util.TextureLoader; +import downfall.vfx.PotionThrowEffect; +import expansioncontent.expansionContentMod; + +public class BlessingOfForgePotion extends AbstractBossCard { + public static final String ID = "downfall:BlessingOfForgePotion"; + private static final PotionStrings cardStrings; + + static { + cardStrings = CardCrawlGame.languagePack.getPotionString("BlessingOfTheForge"); + } + + public BlessingOfForgePotion() { + super(ID, cardStrings.NAME, expansionContentMod.makeCardPath("SummonMushrooms.png"), 0, "", CardType.SKILL, CardColor.COLORLESS, CardRarity.COMMON, CardTarget.SELF, AbstractMonster.Intent.BUFF); + portrait = TextureLoader.getTextureAsAtlasRegion(expansionContentMod.makeCardPath("SummonMushrooms.png")); + portraitImg = TextureLoader.getTexture(expansionContentMod.makeCardPath("SummonMushrooms.png")); + rawDescription = getCorrectedText(); + initializeDescription(); + initializeDescriptionCN(); + } + + + public String getCorrectedText(){ + String temp = cardStrings.DESCRIPTIONS[0]; + temp = temp.replace("#b", ""); + temp = temp.replace("#y", ""); + return temp; + } + + + @Override + public void use(final AbstractPlayer p, final AbstractMonster m) { + addToBot(new VFXAction(new PotionThrowEffect("downfallResources/images/vfx/BlessingOfForge.png", m.hb.cX, m.hb.cY, m.hb.cX, m.hb.cY, 2F, 0.6F, false, true), 0.6F)); + //Fake, card is added in the archetype by hand + } + + @Override + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + } + } + + @Override + public AbstractCard makeCopy() { + return new BlessingOfForgePotion(); + } + + +} diff --git a/src/main/java/charbosses/cards/colorless/potioncards/BloodPotionCard.java b/src/main/java/charbosses/cards/colorless/potioncards/BloodPotionCard.java new file mode 100644 index 0000000000..cd344af1b8 --- /dev/null +++ b/src/main/java/charbosses/cards/colorless/potioncards/BloodPotionCard.java @@ -0,0 +1,64 @@ +package charbosses.cards.colorless.potioncards; + +import charbosses.cards.AbstractBossCard; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.HealAction; +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.localization.PotionStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.StrengthPower; +import downfall.util.TextureLoader; +import downfall.vfx.PotionThrowEffect; +import expansioncontent.expansionContentMod; + +public class BloodPotionCard extends AbstractBossCard { + public static final String ID = "downfall:BloodPotionCard"; + private static final PotionStrings cardStrings; + + static { + cardStrings = CardCrawlGame.languagePack.getPotionString("BloodPotion"); + } + public BloodPotionCard() { + super(ID, cardStrings.NAME, expansionContentMod.makeCardPath("SummonMushrooms.png"), 0, "", CardType.SKILL, CardColor.COLORLESS, CardRarity.COMMON, CardTarget.SELF, AbstractMonster.Intent.BUFF); + portrait = TextureLoader.getTextureAsAtlasRegion(expansionContentMod.makeCardPath("SummonMushrooms.png")); + portraitImg = TextureLoader.getTexture(expansionContentMod.makeCardPath("SummonMushrooms.png")); + rawDescription = getCorrectedText(); + initializeDescription(); + initializeDescriptionCN(); + } + + + public String getCorrectedText(){ + String temp = cardStrings.DESCRIPTIONS[0] + 20 + cardStrings.DESCRIPTIONS[1]; + temp = temp.replace("#b", ""); + temp = temp.replace("#y", ""); + return temp; + } + + + @Override + public void use(final AbstractPlayer p, final AbstractMonster m) { + addToBot(new VFXAction(new PotionThrowEffect("downfallResources/images/vfx/Blood.png", this.hb.cX, this.hb.cY, this.hb.cX, this.hb.cY, 2F, 0.6F, false, true), 0.6F)); + this.addToBot(new HealAction(m, m, (int)((float)m.maxHealth * 0.2F))); + + } + + @Override + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + } + } + + @Override + public AbstractCard makeCopy() { + return new BloodPotionCard(); + } + + +} diff --git a/src/main/java/charbosses/cards/colorless/potioncards/DuplicationPotionCard.java b/src/main/java/charbosses/cards/colorless/potioncards/DuplicationPotionCard.java new file mode 100644 index 0000000000..cefd7caac4 --- /dev/null +++ b/src/main/java/charbosses/cards/colorless/potioncards/DuplicationPotionCard.java @@ -0,0 +1,60 @@ +package charbosses.cards.colorless.potioncards; + +import charbosses.cards.AbstractBossCard; +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.localization.CardStrings; +import com.megacrit.cardcrawl.localization.PotionStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import downfall.util.TextureLoader; +import downfall.vfx.PotionThrowEffect; +import expansioncontent.expansionContentMod; + +public class DuplicationPotionCard extends AbstractBossCard { + public static final String ID = "downfall:DuplicationPotionCard"; + private static final PotionStrings cardStrings; + + static { + cardStrings = CardCrawlGame.languagePack.getPotionString("DuplicationPotion"); + } + + public DuplicationPotionCard() { + super(ID, cardStrings.NAME, expansionContentMod.makeCardPath("SummonMushrooms.png"), 0, "", CardType.SKILL, CardColor.COLORLESS, CardRarity.COMMON, CardTarget.SELF, AbstractMonster.Intent.BUFF); + portrait = TextureLoader.getTextureAsAtlasRegion(expansionContentMod.makeCardPath("SummonMushrooms.png")); + portraitImg = TextureLoader.getTexture(expansionContentMod.makeCardPath("SummonMushrooms.png")); + rawDescription = getCorrectedText(); + initializeDescription(); + initializeDescriptionCN(); + } + + + public String getCorrectedText(){ + String temp = cardStrings.DESCRIPTIONS[0]; + temp = temp.replace("#b", ""); + temp = temp.replace("#y", ""); + return temp; + } + + + @Override + public void use(final AbstractPlayer p, final AbstractMonster m) { + addToBot(new VFXAction(new PotionThrowEffect("downfallResources/images/vfx/DuplicationPotion.png", m.hb.cX, m.hb.cY, m.hb.cX, m.hb.cY, 2F, 0.6F, false, true), 0.6F)); + //Fake, card is added in the archetype by hand + } + + @Override + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + } + } + + @Override + public AbstractCard makeCopy() { + return new DuplicationPotionCard(); + } + + +} diff --git a/src/main/java/charbosses/cards/colorless/potioncards/EssenceOfSteelPotionCard.java b/src/main/java/charbosses/cards/colorless/potioncards/EssenceOfSteelPotionCard.java new file mode 100644 index 0000000000..fe8dee71af --- /dev/null +++ b/src/main/java/charbosses/cards/colorless/potioncards/EssenceOfSteelPotionCard.java @@ -0,0 +1,63 @@ +package charbosses.cards.colorless.potioncards; + +import charbosses.cards.AbstractBossCard; +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.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.CardStrings; +import com.megacrit.cardcrawl.localization.PotionStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.PlatedArmorPower; +import downfall.util.TextureLoader; +import downfall.vfx.PotionThrowEffect; +import expansioncontent.expansionContentMod; + +public class EssenceOfSteelPotionCard extends AbstractBossCard { + public static final String ID = "downfall:EssenceOfSteelPotionCard"; + private static final PotionStrings cardStrings; + + static { + cardStrings = CardCrawlGame.languagePack.getPotionString("EssenceOfSteel"); + } + public EssenceOfSteelPotionCard() { + super(ID, cardStrings.NAME, expansionContentMod.makeCardPath("SummonMushrooms.png"), 0, "", CardType.SKILL, CardColor.COLORLESS, CardRarity.COMMON, CardTarget.SELF, AbstractMonster.Intent.BUFF); + portrait = TextureLoader.getTextureAsAtlasRegion(expansionContentMod.makeCardPath("SummonMushrooms.png")); + portraitImg = TextureLoader.getTexture(expansionContentMod.makeCardPath("SummonMushrooms.png")); + rawDescription = getCorrectedText(); + initializeDescription(); + initializeDescriptionCN(); + } + + + public String getCorrectedText(){ + String temp = cardStrings.DESCRIPTIONS[0] + 4 + cardStrings.DESCRIPTIONS[1]; + temp = temp.replace("#b", ""); + temp = temp.replace("#y", ""); + return temp; + } + + + @Override + public void use(final AbstractPlayer p, final AbstractMonster m) { + addToBot(new VFXAction(new PotionThrowEffect("downfallResources/images/vfx/EssenceOfSteel.png", this.hb.cX, this.hb.cY, this.hb.cX, this.hb.cY, 2F, 0.6F, false, true), 0.6F)); + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(m, m, new PlatedArmorPower(m, 4), 4)); + + } + + @Override + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + } + } + + @Override + public AbstractCard makeCopy() { + return new EssenceOfSteelPotionCard(); + } + + +} diff --git a/src/main/java/charbosses/cards/colorless/potioncards/FirePotionCard.java b/src/main/java/charbosses/cards/colorless/potioncards/FirePotionCard.java new file mode 100644 index 0000000000..83e9c5fb49 --- /dev/null +++ b/src/main/java/charbosses/cards/colorless/potioncards/FirePotionCard.java @@ -0,0 +1,69 @@ +package charbosses.cards.colorless.potioncards; + +import charbosses.cards.AbstractBossCard; +import charbosses.powers.general.EnemyPoisonPower; +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.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; +import com.megacrit.cardcrawl.localization.CardStrings; +import com.megacrit.cardcrawl.localization.PotionStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import downfall.util.TextureLoader; +import downfall.vfx.PotionThrowEffect; +import expansioncontent.expansionContentMod; + +public class FirePotionCard extends AbstractBossCard { + public static final String ID = "downfall:FirePotionCard"; + private static final PotionStrings cardStrings; + + static { + cardStrings = CardCrawlGame.languagePack.getPotionString("Fire Potion"); + } + + public FirePotionCard() { + super(ID, cardStrings.NAME, expansionContentMod.makeCardPath("SummonMushrooms.png"), 0, "", CardType.SKILL, CardColor.COLORLESS, CardRarity.COMMON, CardTarget.SELF, AbstractMonster.Intent.BUFF); + portrait = TextureLoader.getTextureAsAtlasRegion(expansionContentMod.makeCardPath("SummonMushrooms.png")); + portraitImg = TextureLoader.getTexture(expansionContentMod.makeCardPath("SummonMushrooms.png")); + rawDescription = getCorrectedText(); + initializeDescription(); + initializeDescriptionCN(); + baseDamage = damage = 20; + } + + + public String getCorrectedText(){ + String temp = cardStrings.DESCRIPTIONS[0] + 20 + cardStrings.DESCRIPTIONS[1]; + temp = temp.replace("#b", ""); + temp = temp.replace("#y", ""); + return temp; + } + + + @Override + public void use(final AbstractPlayer p, final AbstractMonster m) { + addToBot(new VFXAction(new PotionThrowEffect("downfallResources/images/vfx/FirePotion.png", m.hb.cX, m.hb.cY, AbstractDungeon.player.hb.cX, AbstractDungeon.player.hb.cY, 2F, 0.6F, false, false), 0.6F)); + + this.addToBot(new DamageAction(p, new DamageInfo(m, this.damage, DamageInfo.DamageType.THORNS), AbstractGameAction.AttackEffect.FIRE)); + + } + + @Override + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + } + } + + @Override + public AbstractCard makeCopy() { + return new FirePotionCard(); + } + + +} diff --git a/src/main/java/charbosses/cards/colorless/potioncards/GhostInTheJarPotionCard.java b/src/main/java/charbosses/cards/colorless/potioncards/GhostInTheJarPotionCard.java new file mode 100644 index 0000000000..8869ec8473 --- /dev/null +++ b/src/main/java/charbosses/cards/colorless/potioncards/GhostInTheJarPotionCard.java @@ -0,0 +1,65 @@ +package charbosses.cards.colorless.potioncards; + +import charbosses.cards.AbstractBossCard; +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.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.CardStrings; +import com.megacrit.cardcrawl.localization.PotionStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.IntangiblePlayerPower; +import com.megacrit.cardcrawl.powers.IntangiblePower; +import com.megacrit.cardcrawl.powers.StrengthPower; +import downfall.util.TextureLoader; +import downfall.vfx.PotionThrowEffect; +import expansioncontent.expansionContentMod; + +public class GhostInTheJarPotionCard extends AbstractBossCard { + public static final String ID = "downfall:GhostInTheJarPotionCard"; + private static final PotionStrings cardStrings; + + static { + cardStrings = CardCrawlGame.languagePack.getPotionString("GhostInAJar"); + } + public GhostInTheJarPotionCard() { + super(ID, cardStrings.NAME, expansionContentMod.makeCardPath("SummonMushrooms.png"), 0, "", CardType.SKILL, CardColor.COLORLESS, CardRarity.COMMON, CardTarget.SELF, AbstractMonster.Intent.BUFF); + portrait = TextureLoader.getTextureAsAtlasRegion(expansionContentMod.makeCardPath("SummonMushrooms.png")); + portraitImg = TextureLoader.getTexture(expansionContentMod.makeCardPath("SummonMushrooms.png")); + rawDescription = getCorrectedText(); + initializeDescription(); + initializeDescriptionCN(); + } + + + public String getCorrectedText(){ + String temp = cardStrings.DESCRIPTIONS[0] + 1 + cardStrings.DESCRIPTIONS[1]; + temp = temp.replace("#b", ""); + temp = temp.replace("#y", ""); + return temp; + } + + + @Override + public void use(final AbstractPlayer p, final AbstractMonster m) { + addToBot(new VFXAction(new PotionThrowEffect("downfallResources/images/vfx/GhostInAJar.png", m.hb.cX, m.hb.cY, m.hb.cX, m.hb.cY, 2F, 0.6F, false, true), 0.6F)); + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(m, m, new IntangiblePlayerPower(m, 1), 1)); + + } + + @Override + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + } + } + + @Override + public AbstractCard makeCopy() { + return new GhostInTheJarPotionCard(); + } + + +} diff --git a/src/main/java/charbosses/cards/colorless/potioncards/HeartOfIronPotionCard.java b/src/main/java/charbosses/cards/colorless/potioncards/HeartOfIronPotionCard.java new file mode 100644 index 0000000000..25a46c705f --- /dev/null +++ b/src/main/java/charbosses/cards/colorless/potioncards/HeartOfIronPotionCard.java @@ -0,0 +1,64 @@ +package charbosses.cards.colorless.potioncards; + +import charbosses.cards.AbstractBossCard; +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.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.CardStrings; +import com.megacrit.cardcrawl.localization.PotionStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.MetallicizePower; +import com.megacrit.cardcrawl.powers.ThornsPower; +import downfall.util.TextureLoader; +import downfall.vfx.PotionThrowEffect; +import expansioncontent.expansionContentMod; + +public class HeartOfIronPotionCard extends AbstractBossCard { + public static final String ID = "downfall:HeartOfIronPotionCard"; + private static final PotionStrings cardStrings; + + static { + cardStrings = CardCrawlGame.languagePack.getPotionString("HeartOfIron"); + } + public HeartOfIronPotionCard() { + super(ID, cardStrings.NAME, expansionContentMod.makeCardPath("SummonMushrooms.png"), 0, "", CardType.SKILL, CardColor.COLORLESS, CardRarity.COMMON, CardTarget.SELF, AbstractMonster.Intent.BUFF); + portrait = TextureLoader.getTextureAsAtlasRegion(expansionContentMod.makeCardPath("SummonMushrooms.png")); + portraitImg = TextureLoader.getTexture(expansionContentMod.makeCardPath("SummonMushrooms.png")); + rawDescription = getCorrectedText(); + initializeDescription(); + initializeDescriptionCN(); + } + + + public String getCorrectedText(){ + String temp = cardStrings.DESCRIPTIONS[0] + 6 + cardStrings.DESCRIPTIONS[1]; + temp = temp.replace("#b", ""); + temp = temp.replace("#y", ""); + return temp; + } + + + @Override + public void use(final AbstractPlayer p, final AbstractMonster m) { + addToBot(new VFXAction(new PotionThrowEffect("downfallResources/images/vfx/HeartOfIron.png", m.hb.cX, m.hb.cY, m.hb.cX, m.hb.cY, 2F, 0.6F, false, true), 0.6F)); + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(m, m, new MetallicizePower(m, 4), 4)); + + } + + @Override + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + } + } + + @Override + public AbstractCard makeCopy() { + return new HeartOfIronPotionCard(); + } + + +} diff --git a/src/main/java/charbosses/cards/colorless/potioncards/LiquidBronzePotionCard.java b/src/main/java/charbosses/cards/colorless/potioncards/LiquidBronzePotionCard.java new file mode 100644 index 0000000000..51572cbfe6 --- /dev/null +++ b/src/main/java/charbosses/cards/colorless/potioncards/LiquidBronzePotionCard.java @@ -0,0 +1,64 @@ +package charbosses.cards.colorless.potioncards; + +import charbosses.cards.AbstractBossCard; +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.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.CardStrings; +import com.megacrit.cardcrawl.localization.PotionStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.IntangiblePlayerPower; +import com.megacrit.cardcrawl.powers.ThornsPower; +import downfall.util.TextureLoader; +import downfall.vfx.PotionThrowEffect; +import expansioncontent.expansionContentMod; + +public class LiquidBronzePotionCard extends AbstractBossCard { + public static final String ID = "downfall:LiquidBronzePotionCard"; + private static final PotionStrings cardStrings; + + static { + cardStrings = CardCrawlGame.languagePack.getPotionString("LiquidBronze"); + } + public LiquidBronzePotionCard() { + super(ID, cardStrings.NAME, expansionContentMod.makeCardPath("SummonMushrooms.png"), 0, "", CardType.SKILL, CardColor.COLORLESS, CardRarity.COMMON, CardTarget.SELF, AbstractMonster.Intent.BUFF); + portrait = TextureLoader.getTextureAsAtlasRegion(expansionContentMod.makeCardPath("SummonMushrooms.png")); + portraitImg = TextureLoader.getTexture(expansionContentMod.makeCardPath("SummonMushrooms.png")); + rawDescription = getCorrectedText(); + initializeDescription(); + initializeDescriptionCN(); + } + + + public String getCorrectedText(){ + String temp = cardStrings.DESCRIPTIONS[0] + 3 + cardStrings.DESCRIPTIONS[1]; + temp = temp.replace("#b", ""); + temp = temp.replace("#y", ""); + return temp; + } + + + @Override + public void use(final AbstractPlayer p, final AbstractMonster m) { + addToBot(new VFXAction(new PotionThrowEffect("downfallResources/images/vfx/LiquidBronze.png", m.hb.cX, m.hb.cY, m.hb.cX, m.hb.cY, 2F, 0.6F, false, true), 0.6F)); + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(m, m, new ThornsPower(m, 3), 3)); + + } + + @Override + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + } + } + + @Override + public AbstractCard makeCopy() { + return new LiquidBronzePotionCard(); + } + + +} diff --git a/src/main/java/charbosses/cards/colorless/potioncards/PoisonPotionCard.java b/src/main/java/charbosses/cards/colorless/potioncards/PoisonPotionCard.java new file mode 100644 index 0000000000..60811b8c76 --- /dev/null +++ b/src/main/java/charbosses/cards/colorless/potioncards/PoisonPotionCard.java @@ -0,0 +1,67 @@ +package charbosses.cards.colorless.potioncards; + +import charbosses.cards.AbstractBossCard; +import charbosses.powers.general.EnemyPoisonPower; +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.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.CardStrings; +import com.megacrit.cardcrawl.localization.PotionStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.ArtifactPower; +import com.megacrit.cardcrawl.powers.PoisonPower; +import com.megacrit.cardcrawl.powers.VulnerablePower; +import downfall.util.TextureLoader; +import downfall.vfx.PotionThrowEffect; +import expansioncontent.expansionContentMod; + +public class PoisonPotionCard extends AbstractBossCard { + public static final String ID = "downfall:PoisonPotionCard"; + private static final PotionStrings cardStrings; + + static { + cardStrings = CardCrawlGame.languagePack.getPotionString("Poison Potion"); + } + + public PoisonPotionCard() { + super(ID, cardStrings.NAME, expansionContentMod.makeCardPath("SummonMushrooms.png"), 0, "", CardType.SKILL, CardColor.COLORLESS, CardRarity.COMMON, CardTarget.SELF, AbstractMonster.Intent.BUFF); + portrait = TextureLoader.getTextureAsAtlasRegion(expansionContentMod.makeCardPath("SummonMushrooms.png")); + portraitImg = TextureLoader.getTexture(expansionContentMod.makeCardPath("SummonMushrooms.png")); + rawDescription = getCorrectedText(); + initializeDescription(); + initializeDescriptionCN(); + } + + + public String getCorrectedText(){ + String temp = cardStrings.DESCRIPTIONS[0] + 6 + cardStrings.DESCRIPTIONS[1]; + temp = temp.replace("#b", ""); + temp = temp.replace("#y", ""); + return temp; + } + + + @Override + public void use(final AbstractPlayer p, final AbstractMonster m) { + addToBot(new VFXAction(new PotionThrowEffect("downfallResources/images/vfx/PoisonPotion.png", m.hb.cX, m.hb.cY, p.hb.cX, p.hb.cY, 2F, 0.6F, false, false), 0.6F)); + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, m, new EnemyPoisonPower(AbstractDungeon.player, m, 6), 6)); + + } + + @Override + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + } + } + + @Override + public AbstractCard makeCopy() { + return new PoisonPotionCard(); + } + + +} diff --git a/src/main/java/charbosses/cards/colorless/potioncards/PowerPotionCard.java b/src/main/java/charbosses/cards/colorless/potioncards/PowerPotionCard.java new file mode 100644 index 0000000000..2fb25a1c25 --- /dev/null +++ b/src/main/java/charbosses/cards/colorless/potioncards/PowerPotionCard.java @@ -0,0 +1,82 @@ +package charbosses.cards.colorless.potioncards; + +import basemod.ReflectionHacks; +import charbosses.bosses.AbstractCharBoss; +import charbosses.cards.AbstractBossCard; +import charbosses.monsters.MushroomPurple; +import charbosses.monsters.MushroomRed; +import charbosses.monsters.MushroomWhite; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.TextureAtlas; +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.HealAction; +import com.megacrit.cardcrawl.actions.common.SpawnMonsterAction; +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.localization.PotionStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.StrengthPower; +import com.megacrit.cardcrawl.vfx.combat.BiteEffect; +import downfall.util.TextureLoader; +import downfall.vfx.PotionThrowEffect; +import expansioncontent.expansionContentMod; + +import java.util.ArrayList; +import java.util.Collections; + +public class PowerPotionCard extends AbstractBossCard { + public static final String ID = "downfall:PowerPotionCard"; + private static final PotionStrings cardStrings; + + static { + cardStrings = CardCrawlGame.languagePack.getPotionString("PowerPotion"); + } + + public PowerPotionCard() { + super(ID, cardStrings.NAME, expansionContentMod.makeCardPath("SummonMushrooms.png"), 0, "", CardType.SKILL, CardColor.COLORLESS, CardRarity.COMMON, CardTarget.SELF, AbstractMonster.Intent.BUFF); + portrait = TextureLoader.getTextureAsAtlasRegion(expansionContentMod.makeCardPath("SummonMushrooms.png")); + portraitImg = TextureLoader.getTexture(expansionContentMod.makeCardPath("SummonMushrooms.png")); + rawDescription = getCorrectedText(); + initializeDescription(); + initializeDescriptionCN(); + } + + + public String getCorrectedText(){ + String temp = cardStrings.DESCRIPTIONS[0]; + temp = temp.replace("#b", ""); + temp = temp.replace("#y", ""); + return temp; + } + + + @Override + public void use(final AbstractPlayer p, final AbstractMonster m) { + addToBot(new VFXAction(new PotionThrowEffect("downfallResources/images/vfx/PowerPotion.png", m.hb.cX, m.hb.cY, m.hb.cX, m.hb.cY, 2F, 0.6F, false, true), 0.6F)); + //Fake, card is added in the archetype by hand + } + + @Override + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + } + } + + @Override + public AbstractCard makeCopy() { + return new PowerPotionCard(); + } + + +} diff --git a/src/main/java/charbosses/cards/colorless/potioncards/StrengthPotionCard.java b/src/main/java/charbosses/cards/colorless/potioncards/StrengthPotionCard.java new file mode 100644 index 0000000000..53a263aead --- /dev/null +++ b/src/main/java/charbosses/cards/colorless/potioncards/StrengthPotionCard.java @@ -0,0 +1,65 @@ +package charbosses.cards.colorless.potioncards; + +import charbosses.cards.AbstractBossCard; +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.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.CardStrings; +import com.megacrit.cardcrawl.localization.PotionStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.PlatedArmorPower; +import com.megacrit.cardcrawl.powers.StrengthPower; +import downfall.util.TextureLoader; +import downfall.vfx.PotionThrowEffect; +import expansioncontent.expansionContentMod; + +public class StrengthPotionCard extends AbstractBossCard { + public static final String ID = "downfall:StrengthPotionCard"; + private static final PotionStrings cardStrings; + + static { + cardStrings = CardCrawlGame.languagePack.getPotionString("Strength Potion"); + } + + public StrengthPotionCard() { + super(ID, cardStrings.NAME, expansionContentMod.makeCardPath("SummonMushrooms.png"), 0, "", CardType.SKILL, CardColor.COLORLESS, CardRarity.COMMON, CardTarget.SELF, AbstractMonster.Intent.BUFF); + portrait = TextureLoader.getTextureAsAtlasRegion(expansionContentMod.makeCardPath("SummonMushrooms.png")); + portraitImg = TextureLoader.getTexture(expansionContentMod.makeCardPath("SummonMushrooms.png")); + rawDescription = getCorrectedText(); + initializeDescription(); + initializeDescriptionCN(); + } + + + public String getCorrectedText(){ + String temp = cardStrings.DESCRIPTIONS[0] + 2 + cardStrings.DESCRIPTIONS[1]; + temp = temp.replace("#b", ""); + temp = temp.replace("#y", ""); + return temp; + } + + + @Override + public void use(final AbstractPlayer p, final AbstractMonster m) { + addToBot(new VFXAction(new PotionThrowEffect("downfallResources/images/vfx/Strength.png", this.hb.cX, this.hb.cY, this.hb.cX, this.hb.cY, 2F, 0.6F, false, true), 0.6F)); + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(m, m, new StrengthPower(m, 2), 2)); + + } + + @Override + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + } + } + + @Override + public AbstractCard makeCopy() { + return new StrengthPotionCard(); + } + + +} diff --git a/src/main/java/charbosses/cards/curses/EnVoid.java b/src/main/java/charbosses/cards/curses/EnVoid.java new file mode 100644 index 0000000000..01d5c7d3f8 --- /dev/null +++ b/src/main/java/charbosses/cards/curses/EnVoid.java @@ -0,0 +1,40 @@ +package charbosses.cards.curses; + +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; + +public class EnVoid extends AbstractBossCard { + public static final String ID = "downfall_Charboss:Void"; + private static final CardStrings cardStrings; + + static { + cardStrings = CardCrawlGame.languagePack.getCardStrings("Void"); + } + + public EnVoid() { + super(ID, EnVoid.cardStrings.NAME, "curse/void", -2, EnVoid.cardStrings.DESCRIPTION, CardType.CURSE, CardColor.CURSE, CardRarity.CURSE, CardTarget.NONE, AbstractMonster.Intent.NONE); + } + + @Override + public void use(final AbstractPlayer p, final AbstractMonster m) { + } + + @Override + public void triggerWhenDrawn() { + AbstractCharBoss.boss.loseEnergy(1); + } + + @Override + public void upgrade() { + } + + @Override + public AbstractCard makeCopy() { + return new EnVoid(); + } +} diff --git a/src/main/java/charbosses/cards/green/EnBagOfKnives.java b/src/main/java/charbosses/cards/green/EnBagOfKnives.java new file mode 100644 index 0000000000..3483bd1786 --- /dev/null +++ b/src/main/java/charbosses/cards/green/EnBagOfKnives.java @@ -0,0 +1,61 @@ +package charbosses.cards.green; + +import basemod.ReflectionHacks; +import charbosses.cards.AbstractBossCard; +import charbosses.powers.bossmechanicpowers.IroncladStatusPower; +import charbosses.powers.bossmechanicpowers.SilentShivTimeEaterPower; +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.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 downfall.util.TextureLoader; +import expansioncontent.expansionContentMod; + +public class EnBagOfKnives extends AbstractBossCard { + public static final String ID = "downfall:BagOfKnives"; + private static final CardStrings cardStrings; + + static { + cardStrings = CardCrawlGame.languagePack.getCardStrings(ID); + } + + public EnBagOfKnives() { + super(ID, cardStrings.NAME, expansionContentMod.makeCardPath("SummonMushrooms.png"), 1, cardStrings.DESCRIPTION, CardType.POWER, CardColor.GREEN, CardRarity.RARE, CardTarget.SELF, AbstractMonster.Intent.BUFF); + portrait = TextureLoader.getTextureAsAtlasRegion(expansionContentMod.makeCardPath("SummonMushrooms.png")); + portraitImg = TextureLoader.getTexture(expansionContentMod.makeCardPath("SummonMushrooms.png")); + this.loadJokeCardImage(); + } + + @Override + public void use(final AbstractPlayer p, final AbstractMonster m) { + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(m, m, new SilentShivTimeEaterPower(m))); + } + + @Override + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + } + } + + @Override + public AbstractCard makeCopy() { + return new EnBagOfKnives(); + } + + public void loadJokeCardImage() { + Texture cardTexture; + cardTexture = hermit.util.TextureLoader.getTexture(this.assetUrl.replace("cards","betacards")); + 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(this, AbstractCard.class, "jokePortrait", cardImg); + } + +} diff --git a/src/main/java/charbosses/cards/green/EnGiveAntidote.java b/src/main/java/charbosses/cards/green/EnGiveAntidote.java new file mode 100644 index 0000000000..60c8ea96ac --- /dev/null +++ b/src/main/java/charbosses/cards/green/EnGiveAntidote.java @@ -0,0 +1,62 @@ +package charbosses.cards.green; + +import basemod.ReflectionHacks; +import charbosses.cards.AbstractBossCard; +import charbosses.cards.other.Antidote; +import charbosses.powers.bossmechanicpowers.IroncladStatusPower; +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.MakeTempCardInHandAction; +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 downfall.util.TextureLoader; +import expansioncontent.expansionContentMod; + +public class EnGiveAntidote extends AbstractBossCard { + public static final String ID = "downfall:GiveAntidote"; + private static final CardStrings cardStrings; + + static { + cardStrings = CardCrawlGame.languagePack.getCardStrings(ID); + } + + public EnGiveAntidote() { + super(ID, cardStrings.NAME, expansionContentMod.makeCardPath("SummonMushrooms.png"), 1, cardStrings.DESCRIPTION, CardType.SKILL, CardColor.CURSE, CardRarity.CURSE, CardTarget.SELF, AbstractMonster.Intent.MAGIC); + portrait = TextureLoader.getTextureAsAtlasRegion(expansionContentMod.makeCardPath("SummonMushrooms.png")); + portraitImg = TextureLoader.getTexture(expansionContentMod.makeCardPath("SummonMushrooms.png")); + this.loadJokeCardImage(); + } + + @Override + public void use(final AbstractPlayer p, final AbstractMonster m) { + AbstractDungeon.actionManager.addToBottom(new MakeTempCardInHandAction(new Antidote())); + } + + @Override + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + } + } + + @Override + public AbstractCard makeCopy() { + return new EnGiveAntidote(); + } + + public void loadJokeCardImage() { + Texture cardTexture; + cardTexture = hermit.util.TextureLoader.getTexture(this.assetUrl.replace("cards","betacards")); + 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(this, AbstractCard.class, "jokePortrait", cardImg); + } + +} diff --git a/src/main/java/charbosses/cards/green/EnGlassKnife.java b/src/main/java/charbosses/cards/green/EnGlassKnife.java index 2cd11e1172..b7e51ce870 100644 --- a/src/main/java/charbosses/cards/green/EnGlassKnife.java +++ b/src/main/java/charbosses/cards/green/EnGlassKnife.java @@ -16,14 +16,16 @@ public class EnGlassKnife extends AbstractBossCard { public static final String ID = "downfall_Charboss:Glass Knife"; private static final CardStrings cardStrings; + private int storedTimesPlayed; static { cardStrings = CardCrawlGame.languagePack.getCardStrings("Glass Knife"); } - public EnGlassKnife() { + public EnGlassKnife(int timesPlayed) { super(ID, EnGlassKnife.cardStrings.NAME, "green/attack/glass_knife", 1, EnGlassKnife.cardStrings.DESCRIPTION, CardType.ATTACK, CardColor.GREEN, CardRarity.RARE, CardTarget.ENEMY, AbstractMonster.Intent.ATTACK); - this.baseDamage = 8; + this.baseDamage = 8 - timesPlayed*2; + storedTimesPlayed = timesPlayed; baseMagicNumber = magicNumber = 2; this.intentMultiAmt = 2; isMultiDamage = true; @@ -34,7 +36,7 @@ public EnGlassKnife() { public void use(final AbstractPlayer p, final AbstractMonster m) { this.addToBot(new DamageAction(p, new DamageInfo(m, this.damage, this.damageTypeForTurn), AbstractGameAction.AttackEffect.SLASH_DIAGONAL)); this.addToBot(new DamageAction(p, new DamageInfo(m, this.damage, this.damageTypeForTurn), AbstractGameAction.AttackEffect.SLASH_HEAVY)); - this.addToBot(new EnemyModifyDamageAction(this.uuid, -2)); + //this.addToBot(new EnemyModifyDamageAction(this.uuid, -2)); } @Override @@ -52,6 +54,6 @@ public void upgrade() { @Override public AbstractCard makeCopy() { - return new EnGlassKnife(); + return new EnGlassKnife(storedTimesPlayed); } } diff --git a/src/main/java/charbosses/cards/green/EnHallunication.java b/src/main/java/charbosses/cards/green/EnHallunication.java new file mode 100644 index 0000000000..da1237840c --- /dev/null +++ b/src/main/java/charbosses/cards/green/EnHallunication.java @@ -0,0 +1,61 @@ +package charbosses.cards.green; + +import basemod.ReflectionHacks; +import charbosses.cards.AbstractBossCard; +import charbosses.powers.bossmechanicpowers.IroncladStatusPower; +import charbosses.powers.bossmechanicpowers.SilentMirrorImagePower; +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.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 downfall.util.TextureLoader; +import expansioncontent.expansionContentMod; + +public class EnHallunication extends AbstractBossCard { + public static final String ID = "downfall:Hallunication"; + private static final CardStrings cardStrings; + + static { + cardStrings = CardCrawlGame.languagePack.getCardStrings(ID); + } + + public EnHallunication() { + super(ID, cardStrings.NAME, expansionContentMod.makeCardPath("SummonMushrooms.png"), 1, cardStrings.DESCRIPTION, CardType.POWER, CardColor.GREEN, CardRarity.RARE, CardTarget.SELF, AbstractMonster.Intent.BUFF); + portrait = TextureLoader.getTextureAsAtlasRegion(expansionContentMod.makeCardPath("SummonMushrooms.png")); + portraitImg = TextureLoader.getTexture(expansionContentMod.makeCardPath("SummonMushrooms.png")); + this.loadJokeCardImage(); + } + + @Override + public void use(final AbstractPlayer p, final AbstractMonster m) { + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(m, m, new SilentMirrorImagePower(m))); + } + + @Override + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + } + } + + @Override + public AbstractCard makeCopy() { + return new EnHallunication(); + } + + public void loadJokeCardImage() { + Texture cardTexture; + cardTexture = hermit.util.TextureLoader.getTexture(this.assetUrl.replace("cards","betacards")); + 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(this, AbstractCard.class, "jokePortrait", cardImg); + } + +} diff --git a/src/main/java/charbosses/cards/green/EnMalaise.java b/src/main/java/charbosses/cards/green/EnMalaise.java index e1db26326a..8eec092574 100644 --- a/src/main/java/charbosses/cards/green/EnMalaise.java +++ b/src/main/java/charbosses/cards/green/EnMalaise.java @@ -20,7 +20,7 @@ import java.util.ArrayList; public class EnMalaise extends AbstractBossCard { - public static final String ID = "downfall_Charboss:Bane"; + public static final String ID = "downfall_Charboss:Malaise"; private static final CardStrings cardStrings; static { @@ -28,13 +28,13 @@ public class EnMalaise extends AbstractBossCard { } public EnMalaise() { - super(ID, EnMalaise.cardStrings.NAME, "green/skill/malaise", -1, EnMalaise.cardStrings.DESCRIPTION, CardType.SKILL, CardColor.GREEN, CardRarity.RARE, CardTarget.ENEMY, AbstractMonster.Intent.STRONG_DEBUFF); + super(ID, EnMalaise.cardStrings.NAME, "green/skill/malaise", 3, EnMalaise.cardStrings.DESCRIPTION, CardType.SKILL, CardColor.GREEN, CardRarity.RARE, CardTarget.ENEMY, AbstractMonster.Intent.STRONG_DEBUFF); this.exhaust = true; } @Override public void use(final AbstractPlayer p, final AbstractMonster m) { - this.addToBot(new EnemyMalaiseAction((AbstractCharBoss)m, this.upgraded, this.freeToPlayOnce, EnemyEnergyPanel.totalCount));// 31 + this.addToBot(new EnemyMalaiseAction((AbstractCharBoss)m, this.upgraded, false, 3));// 31 } @Override diff --git a/src/main/java/charbosses/cards/green/EnNewToxins.java b/src/main/java/charbosses/cards/green/EnNewToxins.java new file mode 100644 index 0000000000..7d659a79e8 --- /dev/null +++ b/src/main/java/charbosses/cards/green/EnNewToxins.java @@ -0,0 +1,61 @@ +package charbosses.cards.green; + +import basemod.ReflectionHacks; +import charbosses.cards.AbstractBossCard; +import charbosses.powers.bossmechanicpowers.IroncladStatusPower; +import charbosses.powers.bossmechanicpowers.SilentPoisonPower; +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.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 downfall.util.TextureLoader; +import expansioncontent.expansionContentMod; + +public class EnNewToxins extends AbstractBossCard { + public static final String ID = "downfall:NewToxins"; + private static final CardStrings cardStrings; + + static { + cardStrings = CardCrawlGame.languagePack.getCardStrings(ID); + } + + public EnNewToxins() { + super(ID, cardStrings.NAME, expansionContentMod.makeCardPath("SummonMushrooms.png"), 1, cardStrings.DESCRIPTION, CardType.POWER, CardColor.GREEN, CardRarity.RARE, CardTarget.SELF, AbstractMonster.Intent.BUFF); + portrait = TextureLoader.getTextureAsAtlasRegion(expansionContentMod.makeCardPath("SummonMushrooms.png")); + portraitImg = TextureLoader.getTexture(expansionContentMod.makeCardPath("SummonMushrooms.png")); + this.loadJokeCardImage(); + } + + @Override + public void use(final AbstractPlayer p, final AbstractMonster m) { + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(m, m, new SilentPoisonPower(m))); + } + + @Override + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + } + } + + @Override + public AbstractCard makeCopy() { + return new EnNewToxins(); + } + + public void loadJokeCardImage() { + Texture cardTexture; + cardTexture = hermit.util.TextureLoader.getTexture(this.assetUrl.replace("cards","betacards")); + 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(this, AbstractCard.class, "jokePortrait", cardImg); + } + +} diff --git a/src/main/java/charbosses/cards/green/EnTerror.java b/src/main/java/charbosses/cards/green/EnTerror.java new file mode 100644 index 0000000000..3ce0b65f7c --- /dev/null +++ b/src/main/java/charbosses/cards/green/EnTerror.java @@ -0,0 +1,47 @@ +package charbosses.cards.green; + +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.green.Slice; +import com.megacrit.cardcrawl.cards.green.Terror; +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.VulnerablePower; + +public class EnTerror extends AbstractBossCard { + public static final String ID = "downfall_Charboss:Terror"; + private static final CardStrings cardStrings; + + static { + cardStrings = CardCrawlGame.languagePack.getCardStrings(Terror.ID); + } + + public EnTerror() { + super(ID, EnTerror.cardStrings.NAME, "green/skill/terror", 1, cardStrings.DESCRIPTION, CardType.SKILL, CardColor.GREEN, CardRarity.UNCOMMON, CardTarget.ENEMY, AbstractMonster.Intent.DEBUFF); + this.baseDamage = 5; + } + + @Override + public void use(final AbstractPlayer p, final AbstractMonster m) { + this.addToBot(new ApplyPowerAction(p, m, new VulnerablePower(p, 99, false), 99)); + } + + @Override + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + this.upgradeBaseCost(0); + } + } + + @Override + public AbstractCard makeCopy() { + return new EnTerror(); + } +} diff --git a/src/main/java/charbosses/cards/hermit/EnArsenal.java b/src/main/java/charbosses/cards/hermit/EnArsenal.java new file mode 100644 index 0000000000..da25fa2f22 --- /dev/null +++ b/src/main/java/charbosses/cards/hermit/EnArsenal.java @@ -0,0 +1,64 @@ +package charbosses.cards.hermit; + +import basemod.ReflectionHacks; +import charbosses.bosses.Hermit.Simpler.ArchetypeAct3BasicsSimple; +import charbosses.cards.AbstractBossCard; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.TextureAtlas; +import com.megacrit.cardcrawl.actions.animations.VFXAction; +import com.megacrit.cardcrawl.actions.common.SpawnMonsterAction; +import com.megacrit.cardcrawl.actions.common.SuicideAction; +import com.megacrit.cardcrawl.actions.utility.HideHealthBarAction; +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.monsters.beyond.SnakeDagger; +import com.megacrit.cardcrawl.vfx.combat.InflameEffect; +import downfall.util.TextureLoader; +import expansioncontent.expansionContentMod; +import hermit.characters.hermit; + +public class EnArsenal extends AbstractBossCard { + public static final String ID = "downfall:Arsenal"; + private static final CardStrings cardStrings; + + static { + cardStrings = CardCrawlGame.languagePack.getCardStrings(ID); + } + + public EnArsenal() { + super(ID, cardStrings.NAME, expansionContentMod.makeCardPath("SummonMushrooms.png"), 1, cardStrings.DESCRIPTION, CardType.SKILL, hermit.Enums.COLOR_YELLOW, CardRarity.RARE, CardTarget.SELF, AbstractMonster.Intent.BUFF); + portrait = TextureLoader.getTextureAsAtlasRegion(expansionContentMod.makeCardPath("SummonMushrooms.png")); + portraitImg = TextureLoader.getTexture(expansionContentMod.makeCardPath("SummonMushrooms.png")); + + } + + @Override + public void use(final AbstractPlayer p, final AbstractMonster m) { + for (AbstractMonster m2 : AbstractDungeon.getMonsters().monsters) { + if (!m2.isDead && !m2.isDying && m2 instanceof SnakeDagger) { + addToBot(new VFXAction(m2, new InflameEffect(m), 0.2F)); + addToBot(new SuicideAction(m2)); + addToBot(new HideHealthBarAction(m2)); + } + } + + addToBot(new SpawnMonsterAction(ArchetypeAct3BasicsSimple.getDoomedSnake(), true)); + } + + @Override + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + } + } + + @Override + public AbstractCard makeCopy() { + return new EnArsenal(); + } + +} diff --git a/src/main/java/charbosses/cards/hermit/EnBrawl.java b/src/main/java/charbosses/cards/hermit/EnBrawl.java new file mode 100644 index 0000000000..988d879993 --- /dev/null +++ b/src/main/java/charbosses/cards/hermit/EnBrawl.java @@ -0,0 +1,46 @@ +package charbosses.cards.hermit; + +import charbosses.powers.cardpowers.EnemyBrawlPower; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +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.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.CardStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.WeakPower; +import hermit.cards.Brawl; +import hermit.cards.HoleUp; +import hermit.characters.hermit; +import hermit.powers.BrawlPower; + +public class EnBrawl extends AbstractHermitBossCard { + public static final String ID = "downfall_Charboss:Brawl"; + private static final CardStrings cardStrings = CardCrawlGame.languagePack.getCardStrings(Brawl.ID); + + public EnBrawl() { + super(ID, cardStrings.NAME, "hermitResources/images/cards/hole_up.png", 2, cardStrings.DESCRIPTION, CardType.POWER, hermit.Enums.COLOR_YELLOW, CardRarity.UNCOMMON, CardTarget.SELF, AbstractMonster.Intent.BUFF); + baseMagicNumber = magicNumber = 3; + } + + @Override + public void use(final AbstractPlayer p, final AbstractMonster m) { + AbstractDungeon.actionManager.addToBottom( + new ApplyPowerAction(m, m, new EnemyBrawlPower(m, magicNumber), magicNumber)); + } + + @Override + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + upgradeMagicNumber(2); + } + } + + + @Override + public AbstractCard makeCopy() { + return new EnBrawl(); + } +} diff --git a/src/main/java/charbosses/cards/hermit/EnDeadeye.java b/src/main/java/charbosses/cards/hermit/EnDeadeye.java index 950b5fb3ff..d886d1624d 100644 --- a/src/main/java/charbosses/cards/hermit/EnDeadeye.java +++ b/src/main/java/charbosses/cards/hermit/EnDeadeye.java @@ -1,5 +1,7 @@ package charbosses.cards.hermit; +import basemod.helpers.CardTags; +import charbosses.bosses.AbstractCharBoss; import charbosses.powers.bossmechanicpowers.HermitConcentrationPower; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; @@ -12,6 +14,7 @@ import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.AbstractPower; import com.megacrit.cardcrawl.powers.StrengthPower; +import downfall.downfallMod; import hermit.cards.Deadeye; import hermit.characters.hermit; @@ -23,6 +26,8 @@ public EnDeadeye() { super(ID, cardStrings.NAME, "hermitResources/images/cards/deadeye.png", 1, cardStrings.DESCRIPTION, CardType.ATTACK, hermit.Enums.COLOR_YELLOW, CardRarity.UNCOMMON, CardTarget.ENEMY, AbstractMonster.Intent.ATTACK_BUFF); baseDamage = 5; baseMagicNumber = magicNumber = 2; + tags.add(downfallMod.CHARBOSS_DEADON); + strengthGeneratedIfPlayed = 3; } @Override @@ -38,7 +43,9 @@ public void use(final AbstractPlayer p, final AbstractMonster m) { public void onSpecificTrigger() { intentActive = false; this.intent = AbstractMonster.Intent.ATTACK; + strengthGeneratedIfPlayed = 0; createIntent(); + AbstractCharBoss.boss.preApplyIntentCalculations(); } @Override diff --git a/src/main/java/charbosses/cards/hermit/EnDesperado.java b/src/main/java/charbosses/cards/hermit/EnDesperado.java index 3d5b851d75..f6fefea1ec 100644 --- a/src/main/java/charbosses/cards/hermit/EnDesperado.java +++ b/src/main/java/charbosses/cards/hermit/EnDesperado.java @@ -2,6 +2,7 @@ import charbosses.bosses.AbstractCharBoss; import charbosses.bosses.Hermit.NewAge.ArchetypeAct2WheelOfFateNewAge; +import charbosses.bosses.Hermit.Simpler.ArchetypeAct2WheelOfFateSimple; import charbosses.cards.AbstractBossCard; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.common.DamageAction; @@ -34,6 +35,9 @@ public void update() { if (AbstractCharBoss.boss.chosenArchetype instanceof ArchetypeAct2WheelOfFateNewAge) { AbstractBossCard c = ((ArchetypeAct2WheelOfFateNewAge) AbstractCharBoss.boss.chosenArchetype).getCardFromDeck(uuid); if (c != null) c.baseDamage *= 2; + } else if (AbstractCharBoss.boss.chosenArchetype instanceof ArchetypeAct2WheelOfFateSimple) { + AbstractBossCard c = ((ArchetypeAct2WheelOfFateSimple) AbstractCharBoss.boss.chosenArchetype).getCardFromDeck(uuid); + if (c != null) c.baseDamage *= 2; } isDone = true; } diff --git a/src/main/java/charbosses/cards/hermit/EnDetermination.java b/src/main/java/charbosses/cards/hermit/EnDetermination.java new file mode 100644 index 0000000000..31add056d3 --- /dev/null +++ b/src/main/java/charbosses/cards/hermit/EnDetermination.java @@ -0,0 +1,42 @@ +package charbosses.cards.hermit; + +import charbosses.powers.cardpowers.EnemyShadowCloakPower; +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.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.CardStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import hermit.cards.Determination; +import hermit.cards.ShadowCloak; +import hermit.characters.hermit; +import hermit.powers.DeterminationPower; + +public class EnDetermination extends AbstractHermitBossCard { + public static final String ID = "downfall_Charboss:Determination"; + private static final CardStrings cardStrings = CardCrawlGame.languagePack.getCardStrings(Determination.ID); + + public EnDetermination() { + super(ID, cardStrings.NAME, "hermitResources/images/cards/determination.png", 1, cardStrings.DESCRIPTION, CardType.POWER, hermit.Enums.COLOR_YELLOW, CardRarity.UNCOMMON, CardTarget.SELF, AbstractMonster.Intent.BUFF); + baseMagicNumber = magicNumber = 4; + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + AbstractDungeon.actionManager.addToBottom( + new ApplyPowerAction(m, m, new DeterminationPower(m, 1), 1)); + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + } + } + + @Override + public AbstractCard makeCopy() { + return new EnDetermination(); + } +} diff --git a/src/main/java/charbosses/cards/hermit/EnDissolve.java b/src/main/java/charbosses/cards/hermit/EnDissolve.java new file mode 100644 index 0000000000..f1c84c4a7d --- /dev/null +++ b/src/main/java/charbosses/cards/hermit/EnDissolve.java @@ -0,0 +1,44 @@ +package charbosses.cards.hermit; + +import charbosses.powers.cardpowers.EnemyShadowCloakPower; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +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.localization.CardStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.BlurPower; +import hermit.cards.Dissolve; +import hermit.cards.ShadowCloak; +import hermit.characters.hermit; + +public class EnDissolve extends AbstractHermitBossCard { + public static final String ID = "downfall_Charboss:Dissolve"; + private static final CardStrings cardStrings = CardCrawlGame.languagePack.getCardStrings(Dissolve.ID); + + public EnDissolve() { + super(ID, cardStrings.NAME, "hermitResources/images/cards/dissolve.png", 2, cardStrings.DESCRIPTION, CardType.SKILL, hermit.Enums.COLOR_YELLOW, CardRarity.RARE, CardTarget.SELF, AbstractMonster.Intent.DEFEND_BUFF); + this.baseBlock = 18; + baseMagicNumber = magicNumber = 2; + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + this.addToBot(new GainBlockAction(m, m, this.block)); + this.addToBot(new ApplyPowerAction(m, m, new BlurPower(m, baseMagicNumber), baseMagicNumber)); + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeBlock(7); + } + } + + @Override + public AbstractCard makeCopy() { + return new EnDissolve(); + } +} diff --git a/src/main/java/charbosses/cards/hermit/EnDive.java b/src/main/java/charbosses/cards/hermit/EnDive.java index 44c14635cf..0ee5e14b26 100644 --- a/src/main/java/charbosses/cards/hermit/EnDive.java +++ b/src/main/java/charbosses/cards/hermit/EnDive.java @@ -12,6 +12,7 @@ import com.megacrit.cardcrawl.powers.AbstractPower; import com.megacrit.cardcrawl.powers.PlatedArmorPower; import com.megacrit.cardcrawl.powers.WeakPower; +import downfall.downfallMod; import hermit.cards.Dive; import hermit.cards.GhostlyPresence; import hermit.characters.hermit; @@ -24,6 +25,7 @@ public EnDive() { super(ID, cardStrings.NAME, "hermitResources/images/cards/dive.png", 1, cardStrings.DESCRIPTION, CardType.SKILL, hermit.Enums.COLOR_YELLOW, CardRarity.COMMON, CardTarget.SELF, AbstractMonster.Intent.DEFEND_BUFF); this.baseBlock = 8; baseMagicNumber = magicNumber = 1; + tags.add(downfallMod.CHARBOSS_DEADON); } @Override diff --git a/src/main/java/charbosses/cards/hermit/EnFeint.java b/src/main/java/charbosses/cards/hermit/EnFeint.java new file mode 100644 index 0000000000..6fddd0689f --- /dev/null +++ b/src/main/java/charbosses/cards/hermit/EnFeint.java @@ -0,0 +1,51 @@ +package charbosses.cards.hermit; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +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.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.CardStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.WeakPower; +import hermit.cards.Feint; +import hermit.cards.HoleUp; +import hermit.characters.hermit; +import hermit.powers.Bruise; + +public class EnFeint extends AbstractHermitBossCard { + public static final String ID = "downfall_Charboss:Feint"; + private static final CardStrings cardStrings = CardCrawlGame.languagePack.getCardStrings(Feint.ID); + + public EnFeint() { + super(ID, cardStrings.NAME, "hermitResources/images/cards/feint.png", 0, cardStrings.DESCRIPTION, CardType.SKILL, hermit.Enums.COLOR_YELLOW, CardRarity.COMMON, CardTarget.SELF, AbstractMonster.Intent.DEFEND_DEBUFF); + + baseMagicNumber = magicNumber = 2; + baseBlock = block = 3; + } + + @Override + public void use(final AbstractPlayer p, final AbstractMonster m) { + this.addToBot(new ApplyPowerAction(p, m, new Bruise(p, magicNumber), magicNumber, true, AbstractGameAction.AttackEffect.NONE)); + + + AbstractDungeon.actionManager.addToBottom(new GainBlockAction(m, m, block)); + } + + @Override + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + upgradeMagicNumber(1); + upgradeBlock(2); + } + } + + + @Override + public AbstractCard makeCopy() { + return new EnFeint(); + } +} diff --git a/src/main/java/charbosses/cards/hermit/EnGhostlyPresence.java b/src/main/java/charbosses/cards/hermit/EnGhostlyPresence.java index f1384424ff..6107a1f0c5 100644 --- a/src/main/java/charbosses/cards/hermit/EnGhostlyPresence.java +++ b/src/main/java/charbosses/cards/hermit/EnGhostlyPresence.java @@ -14,6 +14,7 @@ import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.AbstractPower; import com.megacrit.cardcrawl.powers.WeakPower; +import downfall.downfallMod; import hermit.cards.GhostlyPresence; import hermit.cards.ItchyTrigger; import hermit.characters.hermit; @@ -26,6 +27,7 @@ public EnGhostlyPresence() { super(ID, cardStrings.NAME, "hermitResources/images/cards/ghostly_presence.png", 1, cardStrings.DESCRIPTION, CardType.SKILL, hermit.Enums.COLOR_YELLOW, CardRarity.UNCOMMON, CardTarget.SELF, AbstractMonster.Intent.DEFEND_DEBUFF); this.baseBlock = 8; baseMagicNumber = magicNumber = 1; + tags.add(downfallMod.CHARBOSS_DEADON); } @Override diff --git a/src/main/java/charbosses/cards/hermit/EnGlare.java b/src/main/java/charbosses/cards/hermit/EnGlare.java index e935492d40..efcaab3f91 100644 --- a/src/main/java/charbosses/cards/hermit/EnGlare.java +++ b/src/main/java/charbosses/cards/hermit/EnGlare.java @@ -22,6 +22,7 @@ public class EnGlare extends AbstractHermitBossCard { public EnGlare() { super(ID, cardStrings.NAME, "hermitResources/images/cards/glare.png", 0, cardStrings.DESCRIPTION, CardType.SKILL, hermit.Enums.COLOR_YELLOW, CardRarity.COMMON, CardTarget.SELF, AbstractMonster.Intent.DEBUFF); baseMagicNumber = magicNumber = 1; + vulnGeneratedIfPlayed = 1; } @Override diff --git a/src/main/java/charbosses/cards/hermit/EnGoldenBullet.java b/src/main/java/charbosses/cards/hermit/EnGoldenBullet.java new file mode 100644 index 0000000000..55a223a7d3 --- /dev/null +++ b/src/main/java/charbosses/cards/hermit/EnGoldenBullet.java @@ -0,0 +1,48 @@ +package charbosses.cards.hermit; + +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.localization.CardStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import hermit.actions.GoldenBulletAction; +import hermit.cards.GoldenBullet; +import hermit.cards.Grudge; +import hermit.characters.hermit; +import hermit.patches.EnumPatch; + +public class EnGoldenBullet extends AbstractHermitBossCard { + public static final String ID = "downfall_Charboss:GoldenBullet"; + private static final CardStrings cardStrings = CardCrawlGame.languagePack.getCardStrings(GoldenBullet.ID); + + public EnGoldenBullet(int damage) { + super(ID, cardStrings.NAME, "hermitResources/images/cards/golden_bullet.png", 3, cardStrings.DESCRIPTION, CardType.ATTACK, hermit.Enums.COLOR_YELLOW, CardRarity.UNCOMMON, CardTarget.ENEMY, AbstractMonster.Intent.ATTACK); + this.baseDamage = damage; + this.baseMagicNumber = this.magicNumber = 2; + } + + public EnGoldenBullet() { + this(10); + } + + + @Override + public void use(final AbstractPlayer p, final AbstractMonster m) { + this.addToBot(new GoldenBulletAction(p, new DamageInfo(m, this.damage, this.damageTypeForTurn), 1, this.uuid)); + } + + @Override + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + upgradeDamage(6); + } + } + + @Override + public AbstractCard makeCopy() { + return new EnGoldenBullet(); + } +} diff --git a/src/main/java/charbosses/cards/hermit/EnHeadshot.java b/src/main/java/charbosses/cards/hermit/EnHeadshot.java index ffa2c943a2..7a0d8094d8 100644 --- a/src/main/java/charbosses/cards/hermit/EnHeadshot.java +++ b/src/main/java/charbosses/cards/hermit/EnHeadshot.java @@ -13,6 +13,7 @@ import com.megacrit.cardcrawl.localization.CardStrings; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.AbstractPower; +import downfall.downfallMod; import hermit.cards.Headshot; import hermit.characters.hermit; import hermit.patches.EnumPatch; @@ -24,6 +25,7 @@ public class EnHeadshot extends AbstractHermitBossCard { public EnHeadshot() { super(ID, cardStrings.NAME, "hermitResources/images/cards/headshot.png", 1, cardStrings.DESCRIPTION, CardType.ATTACK, hermit.Enums.COLOR_YELLOW, CardRarity.COMMON, CardTarget.ENEMY, AbstractMonster.Intent.ATTACK); this.baseDamage = 7; + tags.add(downfallMod.CHARBOSS_DEADON); } @Override diff --git a/src/main/java/charbosses/cards/hermit/EnHoleUp.java b/src/main/java/charbosses/cards/hermit/EnHoleUp.java index a799f78d00..b8acd3b2b8 100644 --- a/src/main/java/charbosses/cards/hermit/EnHoleUp.java +++ b/src/main/java/charbosses/cards/hermit/EnHoleUp.java @@ -21,6 +21,7 @@ public EnHoleUp() { super(ID, cardStrings.NAME, "hermitResources/images/cards/hole_up.png", 1, cardStrings.DESCRIPTION, CardType.SKILL, hermit.Enums.COLOR_YELLOW, CardRarity.COMMON, CardTarget.SELF, AbstractMonster.Intent.DEFEND); this.baseBlock = 12; baseMagicNumber = magicNumber = 2; + } @Override diff --git a/src/main/java/charbosses/cards/hermit/EnHorror.java b/src/main/java/charbosses/cards/hermit/EnHorror.java new file mode 100644 index 0000000000..ae7a9c6b45 --- /dev/null +++ b/src/main/java/charbosses/cards/hermit/EnHorror.java @@ -0,0 +1,49 @@ +package charbosses.cards.hermit; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +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.localization.CardStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.WeakPower; +import hermit.cards.HoleUp; +import hermit.cards.Horror; +import hermit.characters.hermit; +import hermit.powers.Bruise; +import hermit.powers.HorrorPower; + +public class EnHorror extends AbstractHermitBossCard { + public static final String ID = "downfall_Charboss:Horror"; + private static final CardStrings cardStrings = CardCrawlGame.languagePack.getCardStrings(Horror.ID); + + public EnHorror() { + super(ID, cardStrings.NAME, "hermitResources/images/cards/horror.png", 1, cardStrings.DESCRIPTION, CardType.SKILL, hermit.Enums.COLOR_YELLOW, CardRarity.UNCOMMON, CardTarget.ALL_ENEMY, AbstractMonster.Intent.DEBUFF); + + baseMagicNumber=magicNumber=3; + } + + @Override + public void use(final AbstractPlayer p, final AbstractMonster m) { + + int total_bruise = this.magicNumber; + this.addToBot(new ApplyPowerAction(p, m, new Bruise(p, total_bruise), total_bruise, true, AbstractGameAction.AttackEffect.BLUNT_HEAVY)); + this.addToBot(new ApplyPowerAction(p, m, new HorrorPower(p, 1), 1, true)); + } + + @Override + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + upgradeMagicNumber(2); + } + } + + + @Override + public AbstractCard makeCopy() { + return new EnHorror(); + } +} diff --git a/src/main/java/charbosses/cards/hermit/EnHyperfocused.java b/src/main/java/charbosses/cards/hermit/EnHyperfocused.java new file mode 100644 index 0000000000..8e732d6007 --- /dev/null +++ b/src/main/java/charbosses/cards/hermit/EnHyperfocused.java @@ -0,0 +1,54 @@ +package charbosses.cards.hermit; + +import basemod.ReflectionHacks; +import charbosses.cards.AbstractBossCard; +import charbosses.powers.bossmechanicpowers.HermitConcentrateAdder; +import charbosses.powers.bossmechanicpowers.HermitConcentrationPower; +import charbosses.powers.bossmechanicpowers.IroncladStatusPower; +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.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 downfall.util.TextureLoader; +import expansioncontent.expansionContentMod; +import hermit.HermitMod; +import hermit.characters.hermit; + +public class EnHyperfocused extends AbstractBossCard { + public static final String ID = "downfall:Hyperfocused"; + private static final CardStrings cardStrings; + + static { + cardStrings = CardCrawlGame.languagePack.getCardStrings(ID); + } + + public EnHyperfocused() { + super(ID, cardStrings.NAME, expansionContentMod.makeCardPath("SummonMushrooms.png"), 1, cardStrings.DESCRIPTION, CardType.POWER, hermit.Enums.COLOR_YELLOW, CardRarity.RARE, CardTarget.SELF, AbstractMonster.Intent.BUFF); + portrait = TextureLoader.getTextureAsAtlasRegion(expansionContentMod.makeCardPath("SummonMushrooms.png")); + portraitImg = TextureLoader.getTexture(expansionContentMod.makeCardPath("SummonMushrooms.png")); + } + + @Override + public void use(final AbstractPlayer p, final AbstractMonster m) { + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(m, m, new HermitConcentrateAdder(m))); + } + + @Override + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + } + } + + @Override + public AbstractCard makeCopy() { + return new EnHyperfocused(); + } + + +} diff --git a/src/main/java/charbosses/cards/hermit/EnMaintenance.java b/src/main/java/charbosses/cards/hermit/EnMaintenance.java index 6108874368..1cd6aa3740 100644 --- a/src/main/java/charbosses/cards/hermit/EnMaintenance.java +++ b/src/main/java/charbosses/cards/hermit/EnMaintenance.java @@ -1,15 +1,20 @@ package charbosses.cards.hermit; -import charbosses.bosses.AbstractCharBoss; -import charbosses.bosses.Hermit.NewAge.ArchetypeAct2WheelOfFateNewAge; +import charbosses.bosses.Hermit.Simpler.ArchetypeAct3BasicsSimple; +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.common.SuicideAction; +import com.megacrit.cardcrawl.actions.utility.HideHealthBarAction; 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.monsters.beyond.SnakeDagger; import com.megacrit.cardcrawl.powers.DexterityPower; -import hermit.actions.ReduceCostActionFixed; +import com.megacrit.cardcrawl.vfx.combat.InflameEffect; import hermit.characters.hermit; import hermit.powers.MaintenanceStrikePower; @@ -30,8 +35,7 @@ public EnMaintenance() { public void use(final AbstractPlayer p, final AbstractMonster m) { addToBot(new ApplyPowerAction(m, m, new MaintenanceStrikePower(m, magicNumber))); addToBot(new ApplyPowerAction(m, m, new DexterityPower(m, dexterity))); - if (!(AbstractCharBoss.boss.chosenArchetype instanceof ArchetypeAct2WheelOfFateNewAge)) - addToBot(new ReduceCostActionFixed(this.uuid, 1)); + } @Override diff --git a/src/main/java/charbosses/cards/hermit/EnMemento.java b/src/main/java/charbosses/cards/hermit/EnMemento.java new file mode 100644 index 0000000000..ba9629b13b --- /dev/null +++ b/src/main/java/charbosses/cards/hermit/EnMemento.java @@ -0,0 +1,64 @@ +package charbosses.cards.hermit; + +import charbosses.powers.cardpowers.EnemyShadowCloakPower; +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.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.CardStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.VulnerablePower; +import com.megacrit.cardcrawl.powers.WeakPower; +import hermit.cards.MementoCard; +import hermit.cards.ShadowCloak; +import hermit.characters.hermit; + +import java.util.Iterator; + +public class EnMemento extends AbstractHermitBossCard { + public static final String ID = "downfall_Charboss:Memento"; + private static final CardStrings cardStrings = CardCrawlGame.languagePack.getCardStrings(MementoCard.ID); + + public EnMemento() { + + super(ID, cardStrings.NAME, "hermitResources/images/cards/memento.png", 0, cardStrings.DESCRIPTION, CardType.SKILL, CardColor.CURSE, CardRarity.COMMON, CardTarget.ALL, AbstractMonster.Intent.DEBUFF); + baseMagicNumber = magicNumber = 1; + vulnGeneratedIfPlayed = 1; + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + Iterator var4 = AbstractDungeon.getCurrRoom().monsters.monsters.iterator(); + + while(var4.hasNext()) { + AbstractMonster mo = (AbstractMonster)var4.next(); + if (m.hasPower(VulnerablePower.POWER_ID)){ + this.addToBot(new ApplyPowerAction(mo, m, new VulnerablePower(mo, magicNumber, false), magicNumber+1, true, AbstractGameAction.AttackEffect.NONE)); + } else { + this.addToBot(new ApplyPowerAction(mo, m, new VulnerablePower(mo, magicNumber+1, false), magicNumber+1, true, AbstractGameAction.AttackEffect.NONE)); + } + + if (this.upgraded) + this.addToBot(new ApplyPowerAction(mo, m, new WeakPower(mo, magicNumber+1, false), magicNumber+1, true, AbstractGameAction.AttackEffect.NONE)); + } + + this.addToBot(new ApplyPowerAction(p, m, new VulnerablePower(p, magicNumber, false), magicNumber)); + + if (this.upgraded) + this.addToBot(new ApplyPowerAction(p, m, new WeakPower(p, magicNumber, false), magicNumber)); + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + } + } + + @Override + public AbstractCard makeCopy() { + return new EnMemento(); + } +} diff --git a/src/main/java/charbosses/cards/hermit/EnNoHoldsBarred.java b/src/main/java/charbosses/cards/hermit/EnNoHoldsBarred.java new file mode 100644 index 0000000000..867e458570 --- /dev/null +++ b/src/main/java/charbosses/cards/hermit/EnNoHoldsBarred.java @@ -0,0 +1,57 @@ +package charbosses.cards.hermit; + +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.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.localization.CardStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.vfx.combat.ViolentAttackEffect; +import hermit.actions.GoldenBulletAction; +import hermit.cards.GoldenBullet; +import hermit.cards.NoHoldsBarred; +import hermit.characters.hermit; +import hermit.powers.Bruise; + +public class EnNoHoldsBarred extends AbstractHermitBossCard { + public static final String ID = "downfall_Charboss:NoHoldsBarred"; + private static final CardStrings cardStrings = CardCrawlGame.languagePack.getCardStrings(NoHoldsBarred.ID); + + public EnNoHoldsBarred(int damage) { + super(ID, cardStrings.NAME, "hermitResources/images/cards/golden_bullet.png", 2, cardStrings.DESCRIPTION, CardType.ATTACK, hermit.Enums.COLOR_YELLOW, CardRarity.UNCOMMON, CardTarget.ALL_ENEMY, AbstractMonster.Intent.ATTACK_DEBUFF); + baseDamage=19; + magicNumber = baseMagicNumber = 5; + } + + public EnNoHoldsBarred() { + this(10); + } + + + @Override + public void use(final AbstractPlayer p, final AbstractMonster m) { + + this.addToBot(new VFXAction(new ViolentAttackEffect(p.hb.cX, p.hb.cY, Color.YELLOW))); + addToBot(new DamageAction(m, new DamageInfo(m, this.damage, damageTypeForTurn), AbstractGameAction.AttackEffect.FIRE)); + this.addToBot(new ApplyPowerAction(p, m, new Bruise(p, magicNumber), magicNumber, true, AbstractGameAction.AttackEffect.BLUNT_HEAVY)); + + } + + @Override + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + upgradeDamage(6); + } + } + + @Override + public AbstractCard makeCopy() { + return new EnNoHoldsBarred(); + } +} diff --git a/src/main/java/charbosses/cards/hermit/EnPurgatory.java b/src/main/java/charbosses/cards/hermit/EnPurgatory.java index 6493e832df..87a6a54abe 100644 --- a/src/main/java/charbosses/cards/hermit/EnPurgatory.java +++ b/src/main/java/charbosses/cards/hermit/EnPurgatory.java @@ -14,6 +14,7 @@ import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.monsters.beyond.SnakeDagger; import com.megacrit.cardcrawl.vfx.combat.InflameEffect; +import downfall.downfallMod; import hermit.cards.Purgatory; import hermit.characters.hermit; import hermit.vfx.ShortScreenFire; @@ -33,15 +34,16 @@ public void use(final AbstractPlayer p, final AbstractMonster m) { AbstractDungeon.actionManager.addToBottom(new VFXAction(p, new ShortScreenFire(), 0.5F)); addToBot(new DamageAction(p, new DamageInfo(m, this.damage, damageTypeForTurn), AbstractGameAction.AttackEffect.FIRE)); - for (AbstractMonster m2 : AbstractDungeon.getMonsters().monsters) { - if (!m2.isDead && !m2.isDying && m2 instanceof SnakeDagger) { - addToBot(new VFXAction(m2, new InflameEffect(m), 0.2F)); - addToBot(new SuicideAction(m2)); - addToBot(new HideHealthBarAction(m2)); + if (downfallMod.useLegacyBosses) { + for (AbstractMonster m2 : AbstractDungeon.getMonsters().monsters) { + if (!m2.isDead && !m2.isDying && m2 instanceof SnakeDagger) { + addToBot(new VFXAction(m2, new InflameEffect(m), 0.2F)); + addToBot(new SuicideAction(m2)); + addToBot(new HideHealthBarAction(m2)); + } } + addToBot(new SpawnMonsterAction(ArchetypeAct3DoomsdayNewAge.getDoomedSnake(), true)); } - - addToBot(new SpawnMonsterAction(ArchetypeAct3DoomsdayNewAge.getDoomedSnake(), true)); } @Override @@ -56,4 +58,4 @@ public void upgrade() { public AbstractCard makeCopy() { return new EnPurgatory(); } -} +} \ No newline at end of file diff --git a/src/main/java/charbosses/cards/hermit/EnReprieve.java b/src/main/java/charbosses/cards/hermit/EnReprieve.java new file mode 100644 index 0000000000..803f58c75d --- /dev/null +++ b/src/main/java/charbosses/cards/hermit/EnReprieve.java @@ -0,0 +1,40 @@ +package charbosses.cards.hermit; + +import charbosses.powers.cardpowers.EnemyShadowCloakPower; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.HealAction; +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 hermit.cards.Reprieve; +import hermit.cards.ShadowCloak; +import hermit.characters.hermit; + +public class EnReprieve extends AbstractHermitBossCard { + public static final String ID = "downfall_Charboss:Reprieve"; + private static final CardStrings cardStrings = CardCrawlGame.languagePack.getCardStrings(Reprieve.ID); + + public EnReprieve() { + super(ID, cardStrings.NAME, "hermitResources/images/cards/reprieve.png", 2, cardStrings.DESCRIPTION, CardType.SKILL, hermit.Enums.COLOR_YELLOW, CardRarity.RARE, CardTarget.SELF, AbstractMonster.Intent.BUFF); + baseMagicNumber = magicNumber = 10; + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) {this.addToBot(new HealAction(m, m, this.magicNumber)); + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeMagicNumber(3); + } + } + + @Override + public AbstractCard makeCopy() { + return new EnReprieve(); + } +} diff --git a/src/main/java/charbosses/cards/hermit/EnRevolver.java b/src/main/java/charbosses/cards/hermit/EnRevolver.java new file mode 100644 index 0000000000..3fd14626e5 --- /dev/null +++ b/src/main/java/charbosses/cards/hermit/EnRevolver.java @@ -0,0 +1,53 @@ +package charbosses.cards.hermit; + +import basemod.ReflectionHacks; +import charbosses.cards.AbstractBossCard; +import charbosses.powers.bossmechanicpowers.HermitWheelOfFortune; +import charbosses.powers.bossmechanicpowers.IroncladStatusPower; +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.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 downfall.util.TextureLoader; +import expansioncontent.expansionContentMod; +import hermit.characters.hermit; + +public class EnRevolver extends AbstractBossCard { + public static final String ID = "downfall:Revolver"; + private static final CardStrings cardStrings; + + static { + cardStrings = CardCrawlGame.languagePack.getCardStrings(ID); + } + + public EnRevolver() { + super(ID, cardStrings.NAME, expansionContentMod.makeCardPath("SummonMushrooms.png"), 1, cardStrings.DESCRIPTION, CardType.POWER, hermit.Enums.COLOR_YELLOW, CardRarity.RARE, CardTarget.SELF, AbstractMonster.Intent.BUFF); + portrait = TextureLoader.getTextureAsAtlasRegion(expansionContentMod.makeCardPath("SummonMushrooms.png")); + portraitImg = TextureLoader.getTexture(expansionContentMod.makeCardPath("SummonMushrooms.png")); + + } + + @Override + public void use(final AbstractPlayer p, final AbstractMonster m) { + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(m, m, new HermitWheelOfFortune(m))); + } + + @Override + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + } + } + + @Override + public AbstractCard makeCopy() { + return new EnRevolver(); + } + + +} diff --git a/src/main/java/charbosses/cards/hermit/EnRicochet.java b/src/main/java/charbosses/cards/hermit/EnRicochet.java new file mode 100644 index 0000000000..4b2dbda10b --- /dev/null +++ b/src/main/java/charbosses/cards/hermit/EnRicochet.java @@ -0,0 +1,73 @@ +package charbosses.cards.hermit; + +import charbosses.powers.bossmechanicpowers.HermitConcentrationPower; +import charbosses.powers.general.EnemyPoisonPower; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.AttackDamageRandomEnemyAction; +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; +import com.megacrit.cardcrawl.localization.CardStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.AbstractPower; +import com.megacrit.cardcrawl.powers.WeakPower; +import downfall.downfallMod; +import hermit.cards.Headshot; +import hermit.cards.Ricochet; +import hermit.characters.hermit; +import hermit.patches.EndOfTurnPatch; +import hermit.patches.EnumPatch; + +public class EnRicochet extends AbstractHermitBossCard { + public static final String ID = "downfall_Charboss:Ricochet"; + private static final CardStrings cardStrings = CardCrawlGame.languagePack.getCardStrings(Ricochet.ID); + + public EnRicochet() { + super(ID, cardStrings.NAME, "hermitResources/images/cards/ricochet.png", 1, cardStrings.DESCRIPTION, CardType.ATTACK, hermit.Enums.COLOR_YELLOW, CardRarity.UNCOMMON, CardTarget.ENEMY, AbstractMonster.Intent.ATTACK); + this.baseDamage = 7; + tags.add(downfallMod.CHARBOSS_DEADON); + } + + @Override + public void use(final AbstractPlayer p, final AbstractMonster m) { + AbstractDungeon.actionManager.addToBottom( + new DamageAction(p, new DamageInfo(m, damage, damageTypeForTurn), + EnumPatch.HERMIT_GUN2)); + + AbstractPower concentration = this.owner.getPower(HermitConcentrationPower.POWER_ID); + if (concentration != null && concentration.amount > 0) { + AbstractDungeon.actionManager.addToBottom( + new DamageAction(p, new DamageInfo(m, damage, damageTypeForTurn), + EnumPatch.HERMIT_GUN3)); + } + + + } + + @Override + public String overrideIntentText() { + + AbstractPower concentration = this.owner.getPower(HermitConcentrationPower.POWER_ID); + if (concentration != null && concentration.amount > 0) { + return intentDmg + "x2"; + } + return super.overrideIntentText(); + } + + + @Override + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + this.upgradeDamage(2); + } + } + + @Override + public AbstractCard makeCopy() { + return new EnRicochet(); + } +} diff --git a/src/main/java/charbosses/cards/hermit/EnRoughhouse.java b/src/main/java/charbosses/cards/hermit/EnRoughhouse.java index ec12886cba..7661ccd83f 100644 --- a/src/main/java/charbosses/cards/hermit/EnRoughhouse.java +++ b/src/main/java/charbosses/cards/hermit/EnRoughhouse.java @@ -14,6 +14,8 @@ import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.AbstractPower; import com.megacrit.cardcrawl.powers.StrengthPower; +import downfall.downfallMod; +import expansioncontent.expansionContentMod; import hermit.cards.Headshot; import hermit.cards.Roughhouse; import hermit.characters.hermit; @@ -26,7 +28,8 @@ public EnRoughhouse() { super(ID, cardStrings.NAME, "hermitResources/images/cards/roughhouse.png", 3, cardStrings.DESCRIPTION, CardType.ATTACK, hermit.Enums.COLOR_YELLOW, CardRarity.RARE, CardTarget.ENEMY, AbstractMonster.Intent.ATTACK_DEFEND); this.baseDamage = 24; this.baseBlock = 20; - modifyCostForCombat(-3); + if(downfallMod.useLegacyBosses) modifyCostForCombat(-3); + tags.add(downfallMod.CHARBOSS_DEADON); } @Override diff --git a/src/main/java/charbosses/cards/hermit/EnSmokingBarrel.java b/src/main/java/charbosses/cards/hermit/EnSmokingBarrel.java new file mode 100644 index 0000000000..3f698b9551 --- /dev/null +++ b/src/main/java/charbosses/cards/hermit/EnSmokingBarrel.java @@ -0,0 +1,46 @@ +package charbosses.cards.hermit; + +import charbosses.powers.cardpowers.EnemyBigShotPower; +import charbosses.powers.cardpowers.EnemyShadowCloakPower; +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.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.CardStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import downfall.downfallMod; +import hermit.cards.BigShot; +import hermit.cards.ShadowCloak; +import hermit.characters.hermit; +import hermit.powers.BigShotPower; + +public class EnSmokingBarrel extends AbstractHermitBossCard { + public static final String ID = "downfall_Charboss:SmokingBarrel"; + private static final CardStrings cardStrings = CardCrawlGame.languagePack.getCardStrings(BigShot.ID); + + public EnSmokingBarrel() { + super(ID, cardStrings.NAME, "hermitResources/images/cards/smoking_barrel.png", 1, cardStrings.DESCRIPTION, CardType.POWER, hermit.Enums.COLOR_YELLOW, CardRarity.UNCOMMON, CardTarget.SELF, AbstractMonster.Intent.BUFF); + baseMagicNumber = magicNumber = 3; + tags.add(downfallMod.CHARBOSS_DEADON); + } + + @Override + public void use(AbstractPlayer p, AbstractMonster m) { + AbstractDungeon.actionManager.addToBottom( + new ApplyPowerAction(m, m, new EnemyBigShotPower(m, magicNumber), magicNumber)); + } + + @Override + public void upgrade() { + if (!upgraded) { + upgradeName(); + upgradeMagicNumber(1); + } + } + + @Override + public AbstractCard makeCopy() { + return new EnSmokingBarrel(); + } +} diff --git a/src/main/java/charbosses/cards/hermit/EnSnapshot.java b/src/main/java/charbosses/cards/hermit/EnSnapshot.java new file mode 100644 index 0000000000..ca62e30d7d --- /dev/null +++ b/src/main/java/charbosses/cards/hermit/EnSnapshot.java @@ -0,0 +1,65 @@ +package charbosses.cards.hermit; + +import charbosses.powers.bossmechanicpowers.HermitConcentrationPower; +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; +import com.megacrit.cardcrawl.localization.CardStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.AbstractPower; +import downfall.downfallMod; +import hermit.actions.SnapshotAction; +import hermit.cards.Headshot; +import hermit.cards.Snapshot; +import hermit.characters.hermit; +import hermit.patches.EnumPatch; + +public class EnSnapshot extends AbstractHermitBossCard { + public static final String ID = "downfall_Charboss:Snapshot"; + private static final CardStrings cardStrings = CardCrawlGame.languagePack.getCardStrings(Snapshot.ID); + + public EnSnapshot() { + super(ID, cardStrings.NAME, "hermitResources/images/cards/card_snapshot.png", 1, cardStrings.DESCRIPTION, CardType.ATTACK, hermit.Enums.COLOR_YELLOW, CardRarity.BASIC, CardTarget.ENEMY, AbstractMonster.Intent.ATTACK_DEFEND); + this.baseDamage = 7; + tags.add(downfallMod.CHARBOSS_DEADON); + } + + @Override + public void use(final AbstractPlayer p, final AbstractMonster m) { + + AbstractPower concentration = this.owner.getPower(HermitConcentrationPower.POWER_ID); + if (concentration != null && concentration.amount > 0) { + + this.addToBot(new SnapshotAction(p, new DamageInfo(m, this.damage, this.damageTypeForTurn),1)); + + } + else { + AbstractDungeon.actionManager.addToBottom( + new DamageAction(p, new DamageInfo(m, damage, damageTypeForTurn), + EnumPatch.HERMIT_GUN)); + } + } + + @Override + public void onSpecificTrigger() { + this.intentActive = false; + this.createIntent(); + } + + + @Override + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + this.upgradeDamage(2); + } + } + + @Override + public AbstractCard makeCopy() { + return new EnSnapshot(); + } +} diff --git a/src/main/java/charbosses/cards/hermit/EnWideOpen.java b/src/main/java/charbosses/cards/hermit/EnWideOpen.java index ad0ec3ca7f..f982b519bf 100644 --- a/src/main/java/charbosses/cards/hermit/EnWideOpen.java +++ b/src/main/java/charbosses/cards/hermit/EnWideOpen.java @@ -25,6 +25,7 @@ public EnWideOpen() { super(ID, cardStrings.NAME, "hermitResources/images/cards/wide_open.png", 1, cardStrings.DESCRIPTION, CardType.ATTACK, hermit.Enums.COLOR_YELLOW, CardRarity.COMMON, CardTarget.ENEMY, AbstractMonster.Intent.ATTACK_DEBUFF); this.baseDamage = 6; baseMagicNumber = magicNumber = 1; + vulnGeneratedIfPlayed = magicNumber; } @Override @@ -39,6 +40,7 @@ public void upgrade() { this.upgradeName(); this.upgradeDamage(2); upgradeMagicNumber(1); + vulnGeneratedIfPlayed = magicNumber; } } diff --git a/src/main/java/charbosses/cards/other/Antidote.java b/src/main/java/charbosses/cards/other/Antidote.java index 418a84b069..49576b12df 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; } diff --git a/src/main/java/charbosses/cards/other/AntidoteAsPower.java b/src/main/java/charbosses/cards/other/AntidoteAsPower.java new file mode 100644 index 0000000000..11e9b54482 --- /dev/null +++ b/src/main/java/charbosses/cards/other/AntidoteAsPower.java @@ -0,0 +1,43 @@ +package charbosses.cards.other; + +import charbosses.powers.general.EnemyPoisonPower; +import charbosses.powers.general.PoisonProtectionPower; +import com.megacrit.cardcrawl.actions.common.ReducePowerAction; +import com.megacrit.cardcrawl.actions.common.RemoveSpecificPowerAction; +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.cards.AbstractDownfallCard; +import expansioncontent.expansionContentMod; +import hermit.util.Wiz; + +import static expansioncontent.cards.AbstractExpansionCard.makeID; + +public class AntidoteAsPower extends AbstractDownfallCard { + public static final String ID = makeID("AntidoteAsPower"); + public static final String IMG_PATH = expansionContentMod.makeCardPath("Antidote.png"); + private static final CardStrings cardStrings; + + public AntidoteAsPower() { + super(ID, cardStrings.NAME, IMG_PATH, 1, cardStrings.DESCRIPTION, CardType.POWER, CardColor.COLORLESS, CardRarity.SPECIAL, CardTarget.SELF); + baseMagicNumber = magicNumber = 3; + selfRetain = true; + } + + public void use(AbstractPlayer p, AbstractMonster m) { + Wiz.applyToSelf(new PoisonProtectionPower(p, magicNumber)); + + } + + public void upp () { + upgradeMagicNumber(1); + } + + static { + cardStrings = CardCrawlGame.languagePack.getCardStrings(ID); + } +} + + diff --git a/src/main/java/charbosses/cards/other/AntidoteAsPowerExpensive.java b/src/main/java/charbosses/cards/other/AntidoteAsPowerExpensive.java new file mode 100644 index 0000000000..790571e435 --- /dev/null +++ b/src/main/java/charbosses/cards/other/AntidoteAsPowerExpensive.java @@ -0,0 +1,39 @@ +package charbosses.cards.other; + +import charbosses.powers.general.PoisonProtectionPower; +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 expansioncontent.cards.AbstractDownfallCard; +import expansioncontent.expansionContentMod; +import hermit.util.Wiz; + +import static expansioncontent.cards.AbstractExpansionCard.makeID; + +public class AntidoteAsPowerExpensive extends AbstractDownfallCard { + public static final String ID = makeID("AntidoteAsPower"); + public static final String IMG_PATH = expansionContentMod.makeCardPath("Antidote.png"); + private static final CardStrings cardStrings; + + public AntidoteAsPowerExpensive() { + super(ID, cardStrings.NAME, IMG_PATH, 3, cardStrings.DESCRIPTION, CardType.POWER, CardColor.COLORLESS, CardRarity.SPECIAL, CardTarget.SELF); + baseMagicNumber = magicNumber = 2; + selfRetain = true; + } + + public void use(AbstractPlayer p, AbstractMonster m) { + Wiz.applyToSelf(new PoisonProtectionPower(p, magicNumber)); + + } + + public void upp () { + upgradeMagicNumber(1); + } + + static { + cardStrings = CardCrawlGame.languagePack.getCardStrings(ID); + } +} + + diff --git a/src/main/java/charbosses/cards/purple/EnBeta.java b/src/main/java/charbosses/cards/purple/EnBeta.java index d89268e265..54b1fcb8c7 100644 --- a/src/main/java/charbosses/cards/purple/EnBeta.java +++ b/src/main/java/charbosses/cards/purple/EnBeta.java @@ -50,6 +50,6 @@ public int getPriority(ArrayList hand) { } static { - cardStrings = CardCrawlGame.languagePack.getCardStrings("Alpha"); + cardStrings = CardCrawlGame.languagePack.getCardStrings("Beta"); } } 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 0000000000..7cbee7d89d --- /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/EnConjurBlade.java b/src/main/java/charbosses/cards/purple/EnConjurBlade.java index 215970a7b4..971daa28ff 100644 --- a/src/main/java/charbosses/cards/purple/EnConjurBlade.java +++ b/src/main/java/charbosses/cards/purple/EnConjurBlade.java @@ -20,7 +20,7 @@ public class EnConjurBlade extends AbstractBossCard { } public EnConjurBlade() { - super(ID, cardStrings.NAME, "purple/skill/conjure_blade", 3, cardStrings.DESCRIPTION, CardType.SKILL, CardColor.PURPLE, CardRarity.RARE, CardTarget.SELF, AbstractMonster.Intent.MAGIC); + super(ID, cardStrings.NAME, "purple/skill/conjure_blade", 2, cardStrings.DESCRIPTION, CardType.SKILL, CardColor.PURPLE, CardRarity.RARE, CardTarget.SELF, AbstractMonster.Intent.MAGIC); this.cardsToPreview = new Expunger(); this.exhaust = true; } diff --git a/src/main/java/charbosses/cards/purple/EnCrusade.java b/src/main/java/charbosses/cards/purple/EnCrusade.java new file mode 100644 index 0000000000..ee76c44177 --- /dev/null +++ b/src/main/java/charbosses/cards/purple/EnCrusade.java @@ -0,0 +1,77 @@ +package charbosses.cards.purple; + +import basemod.ReflectionHacks; +import charbosses.bosses.AbstractCharBoss; +import charbosses.bosses.Watcher.CharBossWatcher; +import charbosses.cards.AbstractBossCard; +import charbosses.powers.bossmechanicpowers.WatcherDivinityNoRemovePower; +import charbosses.powers.cardpowers.EnemyMantraPower; +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.HealAction; +import com.megacrit.cardcrawl.actions.common.RemoveSpecificPowerAction; +import com.megacrit.cardcrawl.actions.unique.RemoveDebuffsAction; +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 downfall.util.TextureLoader; +import expansioncontent.expansionContentMod; +import hermit.util.Wiz; + +public class EnCrusade extends AbstractBossCard { + public static final String ID = "downfall:Crusade"; + private static final CardStrings cardStrings; + + static { + cardStrings = CardCrawlGame.languagePack.getCardStrings(ID); + } + + public EnCrusade() { + super(ID, cardStrings.NAME, expansionContentMod.makeCardPath("SummonMushrooms.png"), 1, cardStrings.DESCRIPTION, CardType.POWER, CardColor.PURPLE, CardRarity.RARE, CardTarget.SELF, AbstractMonster.Intent.BUFF); + portrait = TextureLoader.getTextureAsAtlasRegion(expansionContentMod.makeCardPath("SummonMushrooms.png")); + portraitImg = TextureLoader.getTexture(expansionContentMod.makeCardPath("SummonMushrooms.png")); + this.loadJokeCardImage(); + baseMagicNumber = magicNumber = 10; + } + + @Override + public void use(final AbstractPlayer p, final AbstractMonster m) { + + if (m.hasPower(EnemyMantraPower.POWER_ID)){ + int amount = m.getPower(EnemyMantraPower.POWER_ID).amount; + Wiz.atb(new HealAction(m, m, amount * magicNumber)); + AbstractDungeon.actionManager.addToBottom(new RemoveDebuffsAction(m)); + Wiz.atb(new ApplyPowerAction(m, m, new StrengthPower(m, amount), amount)); + Wiz.atb(new RemoveSpecificPowerAction(m, m, m.getPower(EnemyMantraPower.POWER_ID))); + } + } + + @Override + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + upgradeMagicNumber(5); + } + } + + @Override + public AbstractCard makeCopy() { + return new EnCrusade(); + } + + public void loadJokeCardImage() { + Texture cardTexture; + cardTexture = hermit.util.TextureLoader.getTexture(this.assetUrl.replace("cards","betacards")); + 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(this, AbstractCard.class, "jokePortrait", cardImg); + } + +} diff --git a/src/main/java/charbosses/cards/purple/EnEndIsNigh.java b/src/main/java/charbosses/cards/purple/EnEndIsNigh.java new file mode 100644 index 0000000000..6a449af6c2 --- /dev/null +++ b/src/main/java/charbosses/cards/purple/EnEndIsNigh.java @@ -0,0 +1,99 @@ +package charbosses.cards.purple; + +import basemod.ReflectionHacks; +import charbosses.bosses.AbstractCharBoss; +import charbosses.cards.AbstractBossCard; +import charbosses.powers.bossmechanicpowers.IroncladStatusPower; +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.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.unique.IncreaseMaxHpAction; +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.RegenPower; +import com.megacrit.cardcrawl.powers.RitualPower; +import com.megacrit.cardcrawl.powers.VulnerablePower; +import com.megacrit.cardcrawl.powers.WeakPower; +import downfall.util.TextureLoader; +import expansioncontent.expansionContentMod; + +import java.util.Iterator; + +import static collector.util.Wiz.atb; +import static collector.util.Wiz.att; + +public class EnEndIsNigh extends AbstractBossCard { + public static final String ID = "downfall:EndIsNigh"; + private static final CardStrings cardStrings; + + static { + cardStrings = CardCrawlGame.languagePack.getCardStrings(ID); + } + + public EnEndIsNigh() { + super(ID, cardStrings.NAME, expansionContentMod.makeCardPath("SummonMushrooms.png"), 1, cardStrings.DESCRIPTION, CardType.POWER, CardColor.PURPLE, CardRarity.RARE, CardTarget.SELF, AbstractMonster.Intent.BUFF); + portrait = TextureLoader.getTextureAsAtlasRegion(expansionContentMod.makeCardPath("SummonMushrooms.png")); + portraitImg = TextureLoader.getTexture(expansionContentMod.makeCardPath("SummonMushrooms.png")); + this.loadJokeCardImage(); + baseMagicNumber = magicNumber = 1; + } + + @Override + public void use(final AbstractPlayer p, final AbstractMonster m) { + + /* + atb(new AbstractGameAction() { + @Override + public void update() { + isDone = true; + att(new AbstractGameAction() { + @Override + public void update() { + isDone = true; + m.increaseMaxHp(magicNumber, true); + } + }); + + } + }); + + */ + + Iterator var4 = AbstractDungeon.getCurrRoom().monsters.monsters.iterator(); + + while(var4.hasNext()) { + AbstractMonster mo = (AbstractMonster)var4.next(); + this.addToBot(new ApplyPowerAction(mo, m, new RitualPower(mo, 1, false), 1, true, AbstractGameAction.AttackEffect.NONE)); + } + this.addToBot(new ApplyPowerAction(p, m, new RitualPower(p, 1, false), 1, true, AbstractGameAction.AttackEffect.NONE)); + + } + + @Override + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + } + } + + @Override + public AbstractCard makeCopy() { + return new EnEndIsNigh(); + } + + public void loadJokeCardImage() { + Texture cardTexture; + cardTexture = hermit.util.TextureLoader.getTexture(this.assetUrl.replace("cards","betacards")); + 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(this, AbstractCard.class, "jokePortrait", cardImg); + } + +} diff --git a/src/main/java/charbosses/cards/purple/EnEyeForAnEye.java b/src/main/java/charbosses/cards/purple/EnEyeForAnEye.java new file mode 100644 index 0000000000..27c1e9b0ce --- /dev/null +++ b/src/main/java/charbosses/cards/purple/EnEyeForAnEye.java @@ -0,0 +1,66 @@ +package charbosses.cards.purple; + +import basemod.ReflectionHacks; +import charbosses.actions.unique.EnemyChangeStanceAction; +import charbosses.cards.AbstractBossCard; +import charbosses.powers.bossmechanicpowers.IroncladStatusPower; +import charbosses.powers.bossmechanicpowers.WatcherTrackerAttacksPower; +import charbosses.powers.bossmechanicpowers.WatcherTrackerSkillsPower; +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.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.CalmStance; +import downfall.util.TextureLoader; +import expansioncontent.expansionContentMod; + +public class EnEyeForAnEye extends AbstractBossCard { + public static final String ID = "downfall:EyeForAnEye"; + private static final CardStrings cardStrings; + + static { + cardStrings = CardCrawlGame.languagePack.getCardStrings(ID); + } + + public EnEyeForAnEye() { + super(ID, cardStrings.NAME, expansionContentMod.makeCardPath("SummonMushrooms.png"), 1, cardStrings.DESCRIPTION, CardType.POWER, CardColor.PURPLE, CardRarity.RARE, CardTarget.SELF, AbstractMonster.Intent.BUFF); + portrait = TextureLoader.getTextureAsAtlasRegion(expansionContentMod.makeCardPath("SummonMushrooms.png")); + portraitImg = TextureLoader.getTexture(expansionContentMod.makeCardPath("SummonMushrooms.png")); + this.loadJokeCardImage(); + } + + @Override + public void use(final AbstractPlayer p, final AbstractMonster m) { + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(m, m, new WatcherTrackerAttacksPower(m, 0))); + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(m, m, new WatcherTrackerSkillsPower(m, 0))); + AbstractDungeon.actionManager.addToBottom(new EnemyChangeStanceAction(CalmStance.STANCE_ID)); + } + + @Override + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + } + } + + @Override + public AbstractCard makeCopy() { + return new EnEyeForAnEye(); + } + + public void loadJokeCardImage() { + Texture cardTexture; + cardTexture = hermit.util.TextureLoader.getTexture(this.assetUrl.replace("cards","betacards")); + 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(this, AbstractCard.class, "jokePortrait", cardImg); + } + +} diff --git a/src/main/java/charbosses/cards/purple/EnFaithRewarded.java b/src/main/java/charbosses/cards/purple/EnFaithRewarded.java new file mode 100644 index 0000000000..34ce107abe --- /dev/null +++ b/src/main/java/charbosses/cards/purple/EnFaithRewarded.java @@ -0,0 +1,61 @@ +package charbosses.cards.purple; + +import basemod.ReflectionHacks; +import charbosses.cards.AbstractBossCard; +import charbosses.powers.bossmechanicpowers.IroncladStatusPower; +import charbosses.powers.bossmechanicpowers.WatcherDivinityNoRemovePower; +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.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 downfall.util.TextureLoader; +import expansioncontent.expansionContentMod; + +public class EnFaithRewarded extends AbstractBossCard { + public static final String ID = "downfall:FaithRewarded"; + private static final CardStrings cardStrings; + + static { + cardStrings = CardCrawlGame.languagePack.getCardStrings(ID); + } + + public EnFaithRewarded() { + super(ID, cardStrings.NAME, expansionContentMod.makeCardPath("SummonMushrooms.png"), 1, cardStrings.DESCRIPTION, CardType.POWER, CardColor.PURPLE, CardRarity.RARE, CardTarget.SELF, AbstractMonster.Intent.BUFF); + portrait = TextureLoader.getTextureAsAtlasRegion(expansionContentMod.makeCardPath("SummonMushrooms.png")); + portraitImg = TextureLoader.getTexture(expansionContentMod.makeCardPath("SummonMushrooms.png")); + this.loadJokeCardImage(); + } + + @Override + public void use(final AbstractPlayer p, final AbstractMonster m) { + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(m, m, new WatcherDivinityNoRemovePower(m))); + } + + @Override + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + } + } + + @Override + public AbstractCard makeCopy() { + return new EnFaithRewarded(); + } + + public void loadJokeCardImage() { + Texture cardTexture; + cardTexture = hermit.util.TextureLoader.getTexture(this.assetUrl.replace("cards","betacards")); + 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(this, AbstractCard.class, "jokePortrait", cardImg); + } + +} diff --git a/src/main/java/charbosses/cards/purple/EnFalseWorship.java b/src/main/java/charbosses/cards/purple/EnFalseWorship.java new file mode 100644 index 0000000000..d186cfbfbd --- /dev/null +++ b/src/main/java/charbosses/cards/purple/EnFalseWorship.java @@ -0,0 +1,86 @@ +package charbosses.cards.purple; + +import basemod.ReflectionHacks; +import charbosses.cards.AbstractBossCard; +import charbosses.powers.bossmechanicpowers.CultistRevivePower; +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.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.SpawnMonsterAction; +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.monsters.exordium.Cultist; +import com.megacrit.cardcrawl.powers.RitualPower; +import downfall.util.TextureLoader; +import expansioncontent.expansionContentMod; + +import java.util.Iterator; + +import static collector.util.Wiz.att; + +public class EnFalseWorship extends AbstractBossCard { + public static final String ID = "downfall:FalseWorship"; + private static final CardStrings cardStrings; + + private boolean foundCultist; + + static { + cardStrings = CardCrawlGame.languagePack.getCardStrings(ID); + } + + public EnFalseWorship() { + super(ID, cardStrings.NAME, expansionContentMod.makeCardPath("SummonMushrooms.png"), 2, cardStrings.DESCRIPTION, CardType.SKILL, CardColor.PURPLE, CardRarity.RARE, CardTarget.SELF, AbstractMonster.Intent.BUFF); + portrait = TextureLoader.getTextureAsAtlasRegion(expansionContentMod.makeCardPath("SummonMushrooms.png")); + portraitImg = TextureLoader.getTexture(expansionContentMod.makeCardPath("SummonMushrooms.png")); + this.loadJokeCardImage(); + } + + @Override + public void use(final AbstractPlayer p, final AbstractMonster m) { + foundCultist = false; + Iterator var4 = AbstractDungeon.getCurrRoom().monsters.monsters.iterator(); + AbstractMonster mo = null; + while(var4.hasNext()) { + mo = (AbstractMonster)var4.next(); + if (mo instanceof Cultist && !mo.isDeadOrEscaped()) { + foundCultist = true; + this.addToBot(new ApplyPowerAction(mo, m, new CultistRevivePower(mo, 1), 1, true, AbstractGameAction.AttackEffect.NONE)); + break; + } + } + + if (!foundCultist){ + AbstractMonster cawcaw = new Cultist(-400F, 0); + AbstractDungeon.actionManager.addToBottom(new SpawnMonsterAction(cawcaw, true)); + } + + } + + @Override + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + } + } + + @Override + public AbstractCard makeCopy() { + return new EnFalseWorship(); + } + + public void loadJokeCardImage() { + Texture cardTexture; + cardTexture = hermit.util.TextureLoader.getTexture(this.assetUrl.replace("cards","betacards")); + 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(this, AbstractCard.class, "jokePortrait", cardImg); + } + +} diff --git a/src/main/java/charbosses/cards/purple/EnFasting.java b/src/main/java/charbosses/cards/purple/EnFasting.java index 63a4e6ff51..f23a83daef 100644 --- a/src/main/java/charbosses/cards/purple/EnFasting.java +++ b/src/main/java/charbosses/cards/purple/EnFasting.java @@ -21,6 +21,8 @@ import com.megacrit.cardcrawl.powers.StrengthPower; import com.megacrit.cardcrawl.powers.watcher.EnergyDownPower; import com.megacrit.cardcrawl.vfx.combat.FastingEffect; +import downfall.downfallMod; +import expansioncontent.expansionContentMod; import java.util.ArrayList; @@ -41,7 +43,7 @@ public void use(AbstractPlayer p, AbstractMonster m) { 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)); - this.addToBot(new ApplyPowerAction(m, m, new EnemyEnergyDownPower(m, 1,true), 1)); + if (downfallMod.useLegacyBosses) this.addToBot(new ApplyPowerAction(m, m, new EnemyEnergyDownPower(m, 1,true), 1)); // final EnergyManager energy = AbstractCharBoss.boss.energy; // --energy.energyMaster; diff --git a/src/main/java/charbosses/cards/purple/EnFleetingFaith.java b/src/main/java/charbosses/cards/purple/EnFleetingFaith.java new file mode 100644 index 0000000000..cbac3c1f3a --- /dev/null +++ b/src/main/java/charbosses/cards/purple/EnFleetingFaith.java @@ -0,0 +1,67 @@ +package charbosses.cards.purple; + +import awakenedOne.util.Wiz; +import basemod.ReflectionHacks; +import charbosses.cards.AbstractBossCard; +import charbosses.powers.bossmechanicpowers.IroncladStatusPower; +import charbosses.powers.bossmechanicpowers.WatcherDivinityPower; +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.MakeTempCardInDiscardAction; +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 downfall.cards.curses.Haunted; +import downfall.util.TextureLoader; +import expansioncontent.expansionContentMod; + +public class EnFleetingFaith extends AbstractBossCard { + public static final String ID = "downfall:FleetingFaith"; + private static final CardStrings cardStrings; + + static { + cardStrings = CardCrawlGame.languagePack.getCardStrings(ID); + } + + public EnFleetingFaith() { + super(ID, cardStrings.NAME, expansionContentMod.makeCardPath("SummonMushrooms.png"), 1, cardStrings.DESCRIPTION, CardType.POWER, CardColor.PURPLE, CardRarity.RARE, CardTarget.SELF, AbstractMonster.Intent.BUFF); + portrait = TextureLoader.getTextureAsAtlasRegion(expansionContentMod.makeCardPath("SummonMushrooms.png")); + portraitImg = TextureLoader.getTexture(expansionContentMod.makeCardPath("SummonMushrooms.png")); + this.loadJokeCardImage(); + baseMagicNumber = magicNumber = 2; + cardsToPreview = new Haunted(); + } + + @Override + public void use(final AbstractPlayer p, final AbstractMonster m) { + Wiz.atb(new MakeTempCardInDiscardAction(new Haunted(), magicNumber)); + } + + @Override + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + upgradeMagicNumber(1); + } + } + + @Override + public AbstractCard makeCopy() { + return new EnFleetingFaith(); + } + + public void loadJokeCardImage() { + Texture cardTexture; + cardTexture = hermit.util.TextureLoader.getTexture(this.assetUrl.replace("cards","betacards")); + 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(this, AbstractCard.class, "jokePortrait", cardImg); + } + +} diff --git a/src/main/java/charbosses/cards/purple/EnJudgment.java b/src/main/java/charbosses/cards/purple/EnJudgment.java new file mode 100644 index 0000000000..9dc286bec3 --- /dev/null +++ b/src/main/java/charbosses/cards/purple/EnJudgment.java @@ -0,0 +1,79 @@ +package charbosses.cards.purple; + +import charbosses.cards.AbstractBossCard; +import charbosses.powers.cardpowers.EnemyWrathNextTurnPower; +import charbosses.powers.general.EnemyDrawCardNextTurnPower; +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.InstantKillAction; +import com.megacrit.cardcrawl.actions.utility.WaitAction; +import com.megacrit.cardcrawl.actions.watcher.JudgementAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.purple.Judgement; +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.vfx.combat.GiantTextEffect; +import com.megacrit.cardcrawl.vfx.combat.WeightyImpactEffect; + +import static collector.util.Wiz.att; + +public class EnJudgment extends AbstractBossCard { + public static final String ID = "downfall_Charboss:Judgment"; + private static final CardStrings cardStrings; + + static { + cardStrings = CardCrawlGame.languagePack.getCardStrings(Judgement.ID); + } + + public EnJudgment() { + super(ID, cardStrings.NAME, "purple/skill/judgment", 1, cardStrings.DESCRIPTION, CardType.SKILL, CardColor.PURPLE, CardRarity.RARE, CardTarget.ENEMY, AbstractMonster.Intent.MAGIC); + this.baseMagicNumber = 30; + this.magicNumber = 30; + } + + @Override + public void use(final AbstractPlayer p, final AbstractMonster m) { + if (p != null) { + this.addToBot(new VFXAction(new WeightyImpactEffect(p.hb.cX, p.hb.cY, Color.GOLD.cpy()))); + this.addToBot(new WaitAction(0.8F)); + this.addToBot(new VFXAction(new GiantTextEffect(p.hb.cX, p.hb.cY))); + } + + atb(new AbstractGameAction() { + @Override + public void update() { + isDone = true; + att(new AbstractGameAction() { + @Override + public void update() { + isDone = true; if (this.duration == Settings.ACTION_DUR_FAST && p.currentHealth <= magicNumber) { + this.addToTop(new InstantKillAction(p)); + } + + } + }); + + } + }); + + } + + @Override + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + this.upgradeMagicNumber(10); + } + } + + @Override + public AbstractCard makeCopy() { + return new EnJudgment(); + } +} diff --git a/src/main/java/charbosses/cards/purple/EnOmega.java b/src/main/java/charbosses/cards/purple/EnOmega.java index 6b74506f42..3dafc7c747 100644 --- a/src/main/java/charbosses/cards/purple/EnOmega.java +++ b/src/main/java/charbosses/cards/purple/EnOmega.java @@ -1,6 +1,7 @@ package charbosses.cards.purple; import charbosses.cards.AbstractBossCard; +import charbosses.powers.cardpowers.EnemyOmegaPower; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; import com.megacrit.cardcrawl.actions.common.DamageAction; @@ -22,6 +23,10 @@ public class EnOmega extends AbstractBossCard { public EnOmega() { super("Omega", cardStrings.NAME, "colorless/power/omega", 3, cardStrings.DESCRIPTION, CardType.POWER, CardColor.COLORLESS, CardRarity.SPECIAL, CardTarget.SELF, AbstractMonster.Intent.ATTACK); this.exhaust = true; + + baseDamage = baseMagicNumber = magicNumber = 50; + manualCustomDamageModifier = magicNumber; + damageType = damageTypeForTurn = DamageInfo.DamageType.THORNS; } public AbstractCard makeCopy() { @@ -37,7 +42,7 @@ public void upgrade() { } public void use(AbstractPlayer p, AbstractMonster m) { - this.addToBot(new ApplyPowerAction(m, m, new OmegaPower(m, this.magicNumber), this.magicNumber)); + this.addToBot(new ApplyPowerAction(m, m, new EnemyOmegaPower(m, this.magicNumber), this.magicNumber)); } static { cardStrings = CardCrawlGame.languagePack.getCardStrings("Omega"); diff --git a/src/main/java/charbosses/cards/purple/EnPressurePoints.java b/src/main/java/charbosses/cards/purple/EnPressurePoints.java index ca3ea5548e..cd9ecb967b 100644 --- a/src/main/java/charbosses/cards/purple/EnPressurePoints.java +++ b/src/main/java/charbosses/cards/purple/EnPressurePoints.java @@ -41,8 +41,8 @@ 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 - //still probably worth using imo. + //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 )); diff --git a/src/main/java/charbosses/cards/purple/EnProstrate.java b/src/main/java/charbosses/cards/purple/EnProstrate.java index f2f9c7296a..a6022756c3 100644 --- a/src/main/java/charbosses/cards/purple/EnProstrate.java +++ b/src/main/java/charbosses/cards/purple/EnProstrate.java @@ -28,6 +28,7 @@ public EnProstrate() { this.magicNumber = 2; this.baseBlock = 4; this.block = this.baseBlock; + strengthGeneratedIfPlayed = 2; //Faking intent for Brilliance } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/charbosses/cards/purple/EnSteady.java b/src/main/java/charbosses/cards/purple/EnSteady.java new file mode 100644 index 0000000000..d51a120e1e --- /dev/null +++ b/src/main/java/charbosses/cards/purple/EnSteady.java @@ -0,0 +1,55 @@ +package charbosses.cards.purple; + +import basemod.ReflectionHacks; +import charbosses.actions.unique.EnemyChangeStanceAction; +import charbosses.cards.AbstractBossCard; +import charbosses.powers.bossmechanicpowers.WatcherAngryPower; +import charbosses.powers.bossmechanicpowers.WatcherTrackerAttacksPower; +import charbosses.powers.bossmechanicpowers.WatcherTrackerSkillsPower; +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.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.CalmStance; +import downfall.util.TextureLoader; +import expansioncontent.expansionContentMod; + +public class EnSteady extends AbstractBossCard { + public static final String ID = "downfall:Steady"; + private static final CardStrings cardStrings; + + static { + cardStrings = CardCrawlGame.languagePack.getCardStrings(ID); + } + + public EnSteady() { + super(ID, cardStrings.NAME, expansionContentMod.makeCardPath("SummonMushrooms.png"), 0, cardStrings.DESCRIPTION, CardType.POWER, CardColor.PURPLE, CardRarity.RARE, CardTarget.SELF, AbstractMonster.Intent.MAGIC); + portrait = TextureLoader.getTextureAsAtlasRegion(expansionContentMod.makeCardPath("SummonMushrooms.png")); + portraitImg = TextureLoader.getTexture(expansionContentMod.makeCardPath("SummonMushrooms.png")); + } + + @Override + public void use(final AbstractPlayer p, final AbstractMonster m) { + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(m, m, new WatcherAngryPower(m))); + + } + + @Override + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + } + } + + @Override + public AbstractCard makeCopy() { + return new EnSteady(); + } + + +} diff --git a/src/main/java/charbosses/cards/purple/EnTruePeace.java b/src/main/java/charbosses/cards/purple/EnTruePeace.java new file mode 100644 index 0000000000..d10f78fc68 --- /dev/null +++ b/src/main/java/charbosses/cards/purple/EnTruePeace.java @@ -0,0 +1,60 @@ +package charbosses.cards.purple; + +import basemod.ReflectionHacks; +import charbosses.cards.AbstractBossCard; +import charbosses.powers.bossmechanicpowers.IroncladStatusPower; +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.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 downfall.util.TextureLoader; +import expansioncontent.expansionContentMod; + +public class EnTruePeace extends AbstractBossCard { + public static final String ID = "downfall:TruePeace"; + private static final CardStrings cardStrings; + + static { + cardStrings = CardCrawlGame.languagePack.getCardStrings(ID); + } + + public EnTruePeace() { + super(ID, cardStrings.NAME, expansionContentMod.makeCardPath("SummonMushrooms.png"), 0, cardStrings.DESCRIPTION, CardType.SKILL, CardColor.COLORLESS, CardRarity.COMMON, CardTarget.SELF, AbstractMonster.Intent.SLEEP); + portrait = TextureLoader.getTextureAsAtlasRegion(expansionContentMod.makeCardPath("SummonMushrooms.png")); + portraitImg = TextureLoader.getTexture(expansionContentMod.makeCardPath("SummonMushrooms.png")); + this.loadJokeCardImage(); + } + + @Override + public void use(final AbstractPlayer p, final AbstractMonster m) { + + } + + @Override + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + } + } + + @Override + public AbstractCard makeCopy() { + return new EnTruePeace(); + } + + public void loadJokeCardImage() { + Texture cardTexture; + cardTexture = hermit.util.TextureLoader.getTexture(this.assetUrl.replace("cards","betacards")); + 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(this, AbstractCard.class, "jokePortrait", cardImg); + } + +} diff --git a/src/main/java/charbosses/cards/red/EnBash.java b/src/main/java/charbosses/cards/red/EnBash.java index 19b5327d65..5050e65431 100644 --- a/src/main/java/charbosses/cards/red/EnBash.java +++ b/src/main/java/charbosses/cards/red/EnBash.java @@ -36,6 +36,7 @@ public EnBash() { if (AbstractCharBoss.boss.hasRelic(CBR_ChampionsBelt.ID)){ artifactConsumedIfPlayed = 2; } + vulnGeneratedIfPlayed = magicNumber; } @Override diff --git a/src/main/java/charbosses/cards/red/EnBerserk.java b/src/main/java/charbosses/cards/red/EnBerserk.java index e54e5650d0..22d6296018 100644 --- a/src/main/java/charbosses/cards/red/EnBerserk.java +++ b/src/main/java/charbosses/cards/red/EnBerserk.java @@ -33,7 +33,11 @@ public EnBerserk() { public void use(final AbstractPlayer p, final AbstractMonster m) { this.addToBot(new ApplyPowerAction(m, m, new EnemyBerserkPower(m), 1)); //Make apply vulnerable to itself? - this.addToBot(new ApplyPowerAction(m, m, new VulnerablePower(p, this.magicNumber, true), this.magicNumber)); + if (m.hasPower(VulnerablePower.POWER_ID)){ + this.addToBot(new ApplyPowerAction(m, m, new VulnerablePower(p, this.magicNumber+1, true), this.magicNumber+1)); + } else { + this.addToBot(new ApplyPowerAction(m, m, new VulnerablePower(p, this.magicNumber, true), this.magicNumber+1)); + } } @Override diff --git a/src/main/java/charbosses/cards/red/EnFeedingFrenzy.java b/src/main/java/charbosses/cards/red/EnFeedingFrenzy.java new file mode 100644 index 0000000000..673acd0b42 --- /dev/null +++ b/src/main/java/charbosses/cards/red/EnFeedingFrenzy.java @@ -0,0 +1,61 @@ +package charbosses.cards.red; + +import basemod.ReflectionHacks; +import charbosses.cards.AbstractBossCard; +import charbosses.powers.bossmechanicpowers.IroncladMushroomPower; +import charbosses.powers.bossmechanicpowers.IroncladStatusPower; +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.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 downfall.util.TextureLoader; +import expansioncontent.expansionContentMod; + +public class EnFeedingFrenzy extends AbstractBossCard { + public static final String ID = "downfall:FeedingFrenzy"; + private static final CardStrings cardStrings; + + static { + cardStrings = CardCrawlGame.languagePack.getCardStrings(ID); + } + + public EnFeedingFrenzy() { + super(ID, cardStrings.NAME, expansionContentMod.makeCardPath("SummonMushrooms.png"), 1, cardStrings.DESCRIPTION, CardType.POWER, CardColor.RED, CardRarity.RARE, CardTarget.SELF, AbstractMonster.Intent.BUFF); + portrait = TextureLoader.getTextureAsAtlasRegion(expansionContentMod.makeCardPath("SummonMushrooms.png")); + portraitImg = TextureLoader.getTexture(expansionContentMod.makeCardPath("SummonMushrooms.png")); + this.loadJokeCardImage(); + } + + @Override + public void use(final AbstractPlayer p, final AbstractMonster m) { + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(m, m, new IroncladMushroomPower(m, 1))); + } + + @Override + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + } + } + + @Override + public AbstractCard makeCopy() { + return new EnFeedingFrenzy(); + } + + public void loadJokeCardImage() { + Texture cardTexture; + cardTexture = hermit.util.TextureLoader.getTexture(this.assetUrl.replace("cards","betacards")); + 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(this, AbstractCard.class, "jokePortrait", cardImg); + } + +} diff --git a/src/main/java/charbosses/cards/red/EnImmolate.java b/src/main/java/charbosses/cards/red/EnImmolate.java index e508a71f9f..7e9ecfb514 100644 --- a/src/main/java/charbosses/cards/red/EnImmolate.java +++ b/src/main/java/charbosses/cards/red/EnImmolate.java @@ -6,6 +6,7 @@ import com.megacrit.cardcrawl.actions.AbstractGameAction; 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; import com.megacrit.cardcrawl.cards.status.Burn; @@ -37,6 +38,7 @@ public EnImmolate() { public void use(final AbstractPlayer p, final AbstractMonster m) { this.addToBot(new DamageAction(p, new DamageInfo(m, this.damage, this.damageTypeForTurn), AbstractGameAction.AttackEffect.FIRE)); this.addToBot(new MakeTempCardInDiscardAction(new Burn(), 1)); + //don't need to create status in boss deck, will be added manually } diff --git a/src/main/java/charbosses/cards/red/EnPowerThrough.java b/src/main/java/charbosses/cards/red/EnPowerThrough.java index d7c46ca23d..3b1535f4b3 100644 --- a/src/main/java/charbosses/cards/red/EnPowerThrough.java +++ b/src/main/java/charbosses/cards/red/EnPowerThrough.java @@ -7,11 +7,15 @@ 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.status.Burn; import com.megacrit.cardcrawl.cards.status.Wound; 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 downfall.downfallMod; +import expansioncontent.expansionContentMod; public class EnPowerThrough extends AbstractBossCard { public static final String ID = "downfall_Charboss:PowerThrough"; @@ -31,10 +35,11 @@ public EnPowerThrough(boolean wounds) { } public void use(AbstractPlayer p, AbstractMonster m) { - this.addToBot(new EnemyMakeTempCardInHandAction(new EnWound(), 2)); + if (downfallMod.useLegacyBosses) this.addToBot(new EnemyMakeTempCardInHandAction(new EnWound(), 2)); this.addToBot(new GainBlockAction(m, m, this.block)); if (addWoundsToPlayer) { this.addToBot(new MakeTempCardInDiscardAction(new Wound(), 2)); + } } diff --git a/src/main/java/charbosses/cards/red/EnRecklessCharge.java b/src/main/java/charbosses/cards/red/EnRecklessCharge.java index 9340ec6b1b..cf24f45db3 100644 --- a/src/main/java/charbosses/cards/red/EnRecklessCharge.java +++ b/src/main/java/charbosses/cards/red/EnRecklessCharge.java @@ -12,6 +12,7 @@ import com.megacrit.cardcrawl.cards.status.Wound; 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 downfall.downfallMod; @@ -25,7 +26,7 @@ public class EnRecklessCharge extends AbstractBossCard { } public EnRecklessCharge() { - super(ID, cardStrings.NAME, "red/attack/reckless_charge", 0, cardStrings.DESCRIPTION, CardType.ATTACK, CardColor.RED, CardRarity.UNCOMMON, CardTarget.ENEMY, AbstractMonster.Intent.ATTACK); + super(ID, cardStrings.NAME, "red/attack/reckless_charge", 0, cardStrings.DESCRIPTION, CardType.ATTACK, CardColor.RED, CardRarity.UNCOMMON, CardTarget.ENEMY, AbstractMonster.Intent.ATTACK_DEBUFF); this.baseDamage = 7; this.cardsToPreview = new Dazed(); this.tags.add(downfallMod.CHARBOSS_ATTACK); @@ -36,6 +37,7 @@ public EnRecklessCharge() { public void use(final AbstractPlayer p, final AbstractMonster m) { this.addToBot(new DamageAction(p, new DamageInfo(m, this.damage, this.damageTypeForTurn), AbstractGameAction.AttackEffect.SLASH_DIAGONAL)); this.addToBot(new MakeTempCardInDiscardAction(new Dazed(), 1)); + //don't need to create status in boss deck, will be added manually } diff --git a/src/main/java/charbosses/cards/red/EnRupture.java b/src/main/java/charbosses/cards/red/EnRupture.java new file mode 100644 index 0000000000..97b49378c9 --- /dev/null +++ b/src/main/java/charbosses/cards/red/EnRupture.java @@ -0,0 +1,45 @@ +package charbosses.cards.red; + +import charbosses.actions.unique.EnemyBlockPerNonAttackAction; +import charbosses.cards.AbstractBossCard; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.red.Rupture; +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.RupturePower; + +public class EnRupture extends AbstractBossCard { + public static final String ID = "downfall_Charboss:Rupture"; + private static final CardStrings cardStrings; + + static { + cardStrings = CardCrawlGame.languagePack.getCardStrings(Rupture.ID); + } + + public EnRupture() { + super(ID, cardStrings.NAME, "red/power/rupture", 1, cardStrings.DESCRIPTION, CardType.POWER, CardColor.RED, CardRarity.UNCOMMON, CardTarget.SELF, AbstractMonster.Intent.BUFF); + this.baseMagicNumber = 1; + this.magicNumber = this.baseMagicNumber; + } + + @Override + public void use(final AbstractPlayer p, final AbstractMonster m) { + this.addToBot(new ApplyPowerAction(m, m, new RupturePower(m, this.magicNumber), this.magicNumber)); + } + + @Override + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + this.upgradeMagicNumber(1); + } + } + + @Override + public AbstractCard makeCopy() { + return new EnRupture(); + } +} diff --git a/src/main/java/charbosses/cards/red/EnSpotWeakness.java b/src/main/java/charbosses/cards/red/EnSpotWeakness.java index ec2a955915..cecbb14bd0 100644 --- a/src/main/java/charbosses/cards/red/EnSpotWeakness.java +++ b/src/main/java/charbosses/cards/red/EnSpotWeakness.java @@ -46,6 +46,10 @@ public int getPriority(ArrayList hand) { return super.getPriority(hand) + 10; } + @Override + public void triggerWhenDrawn() { + this.addToBot(new ApplyPowerAction(AbstractCharBoss.boss, AbstractCharBoss.boss, new EnemySpotWeaknessPower(AbstractCharBoss.boss, magicNumber), magicNumber)); + } @Override public void upgrade() { diff --git a/src/main/java/charbosses/cards/red/EnStatusMirror.java b/src/main/java/charbosses/cards/red/EnStatusMirror.java new file mode 100644 index 0000000000..815f13cc16 --- /dev/null +++ b/src/main/java/charbosses/cards/red/EnStatusMirror.java @@ -0,0 +1,78 @@ +package charbosses.cards.red; + +import basemod.ReflectionHacks; +import charbosses.bosses.AbstractCharBoss; +import charbosses.cards.AbstractBossCard; +import charbosses.monsters.MushroomPurple; +import charbosses.monsters.MushroomRed; +import charbosses.monsters.MushroomWhite; +import charbosses.powers.bossmechanicpowers.IroncladStatusPower; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.TextureAtlas; +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.HealAction; +import com.megacrit.cardcrawl.actions.common.SpawnMonsterAction; +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.powers.StrengthPower; +import com.megacrit.cardcrawl.vfx.combat.BiteEffect; +import downfall.util.TextureLoader; +import expansioncontent.expansionContentMod; + +import java.util.ArrayList; +import java.util.Collections; + +public class EnStatusMirror extends AbstractBossCard { + public static final String ID = "downfall:StatusMirror"; + private static final CardStrings cardStrings; + + static { + cardStrings = CardCrawlGame.languagePack.getCardStrings(ID); + } + + public EnStatusMirror() { + super(ID, cardStrings.NAME, expansionContentMod.makeCardPath("SummonMushrooms.png"), 1, cardStrings.DESCRIPTION, CardType.POWER, CardColor.RED, CardRarity.RARE, CardTarget.SELF, AbstractMonster.Intent.BUFF); + portrait = TextureLoader.getTextureAsAtlasRegion(expansionContentMod.makeCardPath("SummonMushrooms.png")); + portraitImg = TextureLoader.getTexture(expansionContentMod.makeCardPath("SummonMushrooms.png")); + this.loadJokeCardImage(); + } + + @Override + public void use(final AbstractPlayer p, final AbstractMonster m) { + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(m, m, new IroncladStatusPower(m))); + } + + @Override + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + } + } + + @Override + public AbstractCard makeCopy() { + return new EnStatusMirror(); + } + + public void loadJokeCardImage() { + Texture cardTexture; + cardTexture = hermit.util.TextureLoader.getTexture(this.assetUrl.replace("cards","betacards")); + 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(this, AbstractCard.class, "jokePortrait", cardImg); + } + +} diff --git a/src/main/java/charbosses/cards/red/EnSummonMushrooms.java b/src/main/java/charbosses/cards/red/EnSummonMushrooms.java index 6f43b97d58..22faff9580 100644 --- a/src/main/java/charbosses/cards/red/EnSummonMushrooms.java +++ b/src/main/java/charbosses/cards/red/EnSummonMushrooms.java @@ -41,7 +41,7 @@ public class EnSummonMushrooms extends AbstractBossCard { } public EnSummonMushrooms() { - super(ID, cardStrings.NAME, expansionContentMod.makeCardPath("SummonMushrooms.png"), 1, cardStrings.DESCRIPTION, CardType.SKILL, CardColor.COLORLESS, CardRarity.RARE, CardTarget.SELF, AbstractMonster.Intent.BUFF); + super(ID, cardStrings.NAME, expansionContentMod.makeCardPath("SummonMushrooms.png"), 1, cardStrings.DESCRIPTION, CardType.SKILL, CardColor.RED, CardRarity.RARE, CardTarget.SELF, AbstractMonster.Intent.BUFF); portrait = TextureLoader.getTextureAsAtlasRegion(expansionContentMod.makeCardPath("SummonMushrooms.png")); portraitImg = TextureLoader.getTexture(expansionContentMod.makeCardPath("SummonMushrooms.png")); this.loadJokeCardImage(); diff --git a/src/main/java/charbosses/cards/red/EnWhirlwind.java b/src/main/java/charbosses/cards/red/EnWhirlwind.java new file mode 100644 index 0000000000..cd18db4678 --- /dev/null +++ b/src/main/java/charbosses/cards/red/EnWhirlwind.java @@ -0,0 +1,62 @@ +package charbosses.cards.red; + +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.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; +import com.megacrit.cardcrawl.vfx.combat.WhirlwindEffect; +import downfall.downfallMod; + +public class EnWhirlwind extends AbstractBossCard { + public static final String ID = "downfall_Charboss:Whirlwind"; + private static final CardStrings cardStrings; + private int cost; + + static { + cardStrings = CardCrawlGame.languagePack.getCardStrings("Whirlwind"); + } + + public EnWhirlwind(int inCost) { + super(ID, EnWhirlwind.cardStrings.NAME, "red/attack/whirlwind", -1, cardStrings.DESCRIPTION, CardType.ATTACK, CardColor.RED, CardRarity.UNCOMMON, CardTarget.ALL_ENEMY); + this.baseDamage = 5; + this.tags.add(downfallMod.CHARBOSS_ATTACK); + cost = inCost; + } + public EnWhirlwind() { + this(0); + } + + + @Override + public void use(final AbstractPlayer p, final AbstractMonster m) { + + this.addToBot(new SFXAction("ATTACK_WHIRLWIND")); + this.addToBot(new VFXAction(new WhirlwindEffect(), 0.0F)); + for (int i = 0; i < cost; ++i) { + this.addToBot(new VFXAction(p, new CleaveEffect(true), 0.0F)); + this.addToBot(new DamageAction(p, new DamageInfo(m, this.damage, this.damageTypeForTurn), AbstractGameAction.AttackEffect.SLASH_HORIZONTAL)); + } + //this.addToBot(new EnemyDiscardPileToTopOfDeckAction((AbstractCharBoss) m)); + } + + @Override + public void upgrade() { + if (!this.upgraded) { + this.upgradeName(); + this.upgradeDamage(3); + } + } + + @Override + public AbstractCard makeCopy() { + return new EnWhirlwind(); + } +} diff --git a/src/main/java/charbosses/cards/red/EnWildStrike.java b/src/main/java/charbosses/cards/red/EnWildStrike.java index 414edad5a6..aaad0a8685 100644 --- a/src/main/java/charbosses/cards/red/EnWildStrike.java +++ b/src/main/java/charbosses/cards/red/EnWildStrike.java @@ -13,6 +13,7 @@ import com.megacrit.cardcrawl.cards.status.Wound; 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 downfall.downfallMod; @@ -37,6 +38,7 @@ public EnWildStrike() { public void use(final AbstractPlayer p, final AbstractMonster m) { this.addToBot(new DamageAction(p, new DamageInfo(m, this.damage, this.damageTypeForTurn), AbstractGameAction.AttackEffect.SLASH_HEAVY)); this.addToBot(new MakeTempCardInDiscardAction(new Wound(), 1)); + //don't need to create in enemy deck, will be added manually } diff --git a/src/main/java/charbosses/monsters/Fortification.java b/src/main/java/charbosses/monsters/Fortification.java index f165cb5b32..43446e7836 100644 --- a/src/main/java/charbosses/monsters/Fortification.java +++ b/src/main/java/charbosses/monsters/Fortification.java @@ -2,6 +2,7 @@ import charbosses.bosses.AbstractCharBoss; import charbosses.cards.AbstractBossCard; +import charbosses.powers.bossmechanicpowers.IroncladFortificationPower; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.math.MathUtils; import com.esotericsoftware.spine.AnimationState; @@ -15,6 +16,7 @@ import com.megacrit.cardcrawl.powers.BarricadePower; import com.megacrit.cardcrawl.powers.DemonFormPower; import downfall.downfallMod; +import expansioncontent.expansionContentMod; import static charbosses.bosses.Ironclad.NewAge.ArchetypeAct3BlockNewAge.FORTIFICATION_AMOUNT; @@ -31,6 +33,8 @@ public Fortification() { e.setTime(e.getEndTime() * MathUtils.random()); this.stateData.setMix("Hit", "Idle", 0.1F); flipHorizontal= true; + + if (!downfallMod.useLegacyBosses) AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this, this, new IroncladFortificationPower(this))); } @Override @@ -53,9 +57,10 @@ public void die() { super.die(); if (AbstractCharBoss.boss != null) { AbstractDungeon.actionManager.addToBottom(new RemoveSpecificPowerAction(AbstractCharBoss.boss, AbstractCharBoss.boss, BarricadePower.POWER_ID)); - //AbstractDungeon.actionManager.addToBottom(new RemoveAllBlockAction(AbstractCharBoss.boss, AbstractCharBoss.boss)); - this.addToBot(new ApplyPowerAction(AbstractCharBoss.boss, AbstractCharBoss.boss, new DemonFormPower(AbstractCharBoss.boss, 5), 5)); - + if (downfallMod.useLegacyBosses) { + AbstractDungeon.actionManager.addToBottom(new RemoveAllBlockAction(AbstractCharBoss.boss, AbstractCharBoss.boss)); + this.addToBot(new ApplyPowerAction(AbstractCharBoss.boss, AbstractCharBoss.boss, new DemonFormPower(AbstractCharBoss.boss, 5), 5)); + } } } } diff --git a/src/main/java/charbosses/monsters/LouseTangerine.java b/src/main/java/charbosses/monsters/LouseTangerine.java index 306d775d5c..5f8632b031 100644 --- a/src/main/java/charbosses/monsters/LouseTangerine.java +++ b/src/main/java/charbosses/monsters/LouseTangerine.java @@ -14,6 +14,7 @@ import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.CurlUpPower; import com.megacrit.cardcrawl.powers.StrengthPower; +import downfall.downfallMod; public class LouseTangerine extends AbstractMonster { public static final String ID = "FuzzyLouseTangerine"; @@ -24,16 +25,16 @@ public class LouseTangerine extends AbstractMonster { public boolean sleepy = true; public LouseTangerine(float x, float y) { - super(NAME, "FuzzyLouseNormal", 48, 0.0F, -5.0F, 180.0F, 140.0F, (String)null, x, y); + super(NAME, "FuzzyLouseNormal", 38, 0.0F, -5.0F, 180.0F, 140.0F, (String)null, x, y); this.loadAnimation("expansioncontentResources/images/bosses/hermit/1/tangerine/skeleton_2.atlas", "expansioncontentResources/images/bosses/hermit/1/tangerine/skeleton_2.json", 1.0F); AnimationState.TrackEntry e = state.setAnimation(0, "idle", true); e.setTime(e.getEndTime() * MathUtils.random()); // Set damage. if (AbstractDungeon.ascensionLevel >= 9) { - biteDamage = AbstractDungeon.monsterHpRng.random(6, 8); + biteDamage = 8; } else { - biteDamage = AbstractDungeon.monsterHpRng.random(5, 7); + biteDamage = 6; } damage.add(new DamageInfo(this, biteDamage)); @@ -42,12 +43,12 @@ public LouseTangerine(float x, float y) { @Override public void usePreBattleAction() { - int curl_amount = AbstractDungeon.monsterHpRng.random(8); - + int curl_amount = 8; if (AbstractDungeon.ascensionLevel >= 9) curl_amount = 12; AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this, this, new CurlUpPower(this, curl_amount))); - AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this, this, new TangerinePower(this,3))); + + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this, this, new TangerinePower(this, 3))); setMove((byte)1, AbstractMonster.Intent.SLEEP); } diff --git a/src/main/java/charbosses/monsters/VoidCore.java b/src/main/java/charbosses/monsters/VoidCore.java new file mode 100644 index 0000000000..5195e02637 --- /dev/null +++ b/src/main/java/charbosses/monsters/VoidCore.java @@ -0,0 +1,62 @@ +package charbosses.monsters; + +import charbosses.bosses.AbstractCharBoss; +import charbosses.bosses.Defect.CharBossDefect; +import charbosses.powers.bossmechanicpowers.VoidOrbPower; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.math.MathUtils; +import com.megacrit.cardcrawl.actions.AbstractGameAction.AttackEffect; +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.GainBlockAction; +import com.megacrit.cardcrawl.actions.common.RollMoveAction; +import com.megacrit.cardcrawl.actions.unique.ApplyStasisAction; +import com.megacrit.cardcrawl.actions.utility.SFXAction; +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.MonsterStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.StrengthPower; +import com.megacrit.cardcrawl.vfx.BorderFlashEffect; +import com.megacrit.cardcrawl.vfx.combat.SmallLaserEffect; +import downfall.downfallMod; +import hermit.util.Wiz; + +public class VoidCore extends AbstractMonster { + public static final String ID = downfallMod.makeID("VoidCore"); + private static final MonsterStrings monsterStrings = CardCrawlGame.languagePack.getMonsterStrings(ID); + public static final String NAME = monsterStrings.NAME; + private int count; + + public VoidCore(float x, float y) { + super(monsterStrings.NAME, ID, 10, 0.0F, 0.0F, 160.0F, 160.0F, downfallMod.assetPath("images/monsters/Voidorb.png"), x, y); + + } + + @Override + public void usePreBattleAction() { + addToBot(new ApplyPowerAction(this, this, new VoidOrbPower(this))); + + } + + public void takeTurn() { + } + + public void update() { + super.update(); + if (this.count % 2 == 0) { + this.animY = MathUtils.cosDeg((float)(System.currentTimeMillis() / 6L % 360L)) * 6.0F * Settings.scale; + } else { + this.animY = -MathUtils.cosDeg((float)(System.currentTimeMillis() / 6L % 360L)) * 6.0F * Settings.scale; + } + + } + + protected void getMove(int num) { + this.setMove((byte)0, Intent.SLEEP); + } + +} diff --git a/src/main/java/charbosses/powers/bossmechanicpowers/CultistRevivePower.java b/src/main/java/charbosses/powers/bossmechanicpowers/CultistRevivePower.java new file mode 100644 index 0000000000..ce8b179779 --- /dev/null +++ b/src/main/java/charbosses/powers/bossmechanicpowers/CultistRevivePower.java @@ -0,0 +1,85 @@ +package charbosses.powers.bossmechanicpowers; + +import basemod.interfaces.CloneablePowerInterface; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.TextureAtlas; +import com.megacrit.cardcrawl.actions.animations.TalkAction; +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.AbstractPower; +import com.megacrit.cardcrawl.vfx.combat.HealEffect; +import downfall.downfallMod; +import downfall.util.TextureLoader; + +public class CultistRevivePower extends AbstractPower implements CloneablePowerInterface { + + public static final String POWER_ID = downfallMod.makeID("CultistRevivePower"); + public static final String NAME = CardCrawlGame.languagePack.getPowerStrings(POWER_ID).NAME; + public static final String DESCRIPTIONS[] = CardCrawlGame.languagePack.getPowerStrings(POWER_ID).DESCRIPTIONS; + + private static final Texture tex84 = TextureLoader.getTexture(downfallMod.assetPath("images/powers/FairyPotion84.png")); + private static final Texture tex32 = TextureLoader.getTexture(downfallMod.assetPath("images/powers/FairyPotion32.png")); + + public static boolean CANNOT_END = false; + + public CultistRevivePower(final AbstractCreature owner, final int amount) { + this.ID = POWER_ID; + this.owner = owner; + 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.name = NAME; + + this.updateDescription(); + } + + private void healUndead(AbstractCreature m, int healAmount) { + if (m.isDying) m.isDying = false; + for (AbstractPower p : m.powers) { + p.onHeal(healAmount); + } + + m.currentHealth += healAmount;// 451 + if (m.currentHealth > m.maxHealth) {// 452 + m.currentHealth = m.maxHealth;// 453 + } + + + if (healAmount > 0) {// 465 + m.healthBarUpdatedEvent();// 470 + } + + } + + @Override + public void onDeath() { + CANNOT_END = true; + super.onDeath(); + healUndead(owner, owner.maxHealth/2); + AbstractDungeon.effectsQueue.add(new HealEffect(owner.hb.cX, owner.hb.cY, owner.maxHealth)); + addToTop(new RemoveSpecificPowerAction(owner, owner, CultistRevivePower.POWER_ID)); + addToTop(new TalkAction(owner, DESCRIPTIONS[1])); + CANNOT_END = false; + } + + /* + + + */ + + @Override + public void updateDescription() { + this.description = DESCRIPTIONS[0]; + } + + @Override + public AbstractPower makeCopy() { + return new CultistRevivePower(owner, amount); + } +} \ No newline at end of file diff --git a/src/main/java/charbosses/powers/bossmechanicpowers/DefectAttackVoidPower.java b/src/main/java/charbosses/powers/bossmechanicpowers/DefectAttackVoidPower.java new file mode 100644 index 0000000000..3a044f46f2 --- /dev/null +++ b/src/main/java/charbosses/powers/bossmechanicpowers/DefectAttackVoidPower.java @@ -0,0 +1,53 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by Fernflower decompiler) +// + +package charbosses.powers.bossmechanicpowers; + +import collector.powers.DoomPower; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.common.MakeTempCardInDiscardAction; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.cards.status.VoidCard; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.localization.PowerStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import hermit.util.Wiz; + +public class DefectAttackVoidPower extends AbstractBossMechanicPower { + public static final String POWER_ID = "downfall:DefectAttackVoidPower"; + private static final PowerStrings powerStrings; + public static final String NAME; + public static final String[] DESC; + + public DefectAttackVoidPower(AbstractCreature owner) { + this.name = NAME; + this.ID = POWER_ID; + this.owner = owner; + this.amount = 0; + this.updateDescription(); + loadRegion("curiosity"); + this.type = PowerType.BUFF; + } + + + public void onAttack(DamageInfo info, int damageAmount, AbstractCreature target) { + if (damageAmount > 0 && target != this.owner && info.type == DamageInfo.DamageType.NORMAL) { + this.flash(); + Wiz.atb(new MakeTempCardInDiscardAction(new VoidCard(), 1)); + } + } + + + public void updateDescription() { + this.description = DESC[0]; + } + + static { + powerStrings = CardCrawlGame.languagePack.getPowerStrings(POWER_ID); + NAME = powerStrings.NAME; + DESC = powerStrings.DESCRIPTIONS; + } +} diff --git a/src/main/java/charbosses/powers/bossmechanicpowers/DefectBiasCuriosityPower.java b/src/main/java/charbosses/powers/bossmechanicpowers/DefectBiasCuriosityPower.java index 84c1227249..491b1afded 100644 --- a/src/main/java/charbosses/powers/bossmechanicpowers/DefectBiasCuriosityPower.java +++ b/src/main/java/charbosses/powers/bossmechanicpowers/DefectBiasCuriosityPower.java @@ -28,34 +28,22 @@ public DefectBiasCuriosityPower(AbstractCreature owner) { this.amount = 1; updateDescription(); loadRegion("bias"); - this.type = AbstractPower.PowerType.BUFF; + this.type = AbstractPower.PowerType.DEBUFF; } public void updateDescription() { - if (triggered==false) { - this.name = (DESCRIPTIONS[3]); - this.description = (DESCRIPTIONS[1]); - } - else { - this.name = NAME; - this.description = (DESCRIPTIONS[2]); - } - } - @Override - public void atEndOfRound() { - super.atEndOfRound(); - triggered=false; - 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) + // if(triggered==false) addToBot(new ApplyPowerAction(this.owner, this.owner, new FocusPower(this.owner, -this.amount), -this.amount)); } - public void onUseCard(AbstractCard card, UseCardAction action) { - if (card.type == AbstractCard.CardType.POWER && !(card instanceof AbstractBossCard)) { - flash(); - this.triggered=true; - updateDescription(); - } } -} diff --git a/src/main/java/charbosses/powers/bossmechanicpowers/DefectCuriosityLightningPower.java b/src/main/java/charbosses/powers/bossmechanicpowers/DefectCuriosityLightningPower.java index 0daa1bf4a9..8e1069739c 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 11c866bb5a..aa08b6e80f 100644 --- a/src/main/java/charbosses/powers/bossmechanicpowers/DefectCuriosityPower.java +++ b/src/main/java/charbosses/powers/bossmechanicpowers/DefectCuriosityPower.java @@ -1,18 +1,29 @@ package charbosses.powers.bossmechanicpowers; +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; @@ -29,7 +40,7 @@ public DefectCuriosityPower(AbstractCreature owner) { } public void updateDescription() { - this.description = (DESCRIPTIONS[0] + this.amount + DESCRIPTIONS[1]); + this.description = (DESCRIPTIONS[0] + this.amount + DESCRIPTIONS[1] + DESCRIPTIONS[2]); } public void onUseCard(AbstractCard card, UseCardAction action) { @@ -38,5 +49,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/HermitWheelOfFortune.java b/src/main/java/charbosses/powers/bossmechanicpowers/HermitWheelOfFortune.java index fc243a2759..b6bcd82888 100644 --- a/src/main/java/charbosses/powers/bossmechanicpowers/HermitWheelOfFortune.java +++ b/src/main/java/charbosses/powers/bossmechanicpowers/HermitWheelOfFortune.java @@ -1,7 +1,9 @@ package charbosses.powers.bossmechanicpowers; +import charbosses.bosses.AbstractCharBoss; import charbosses.bosses.Hermit.CharBossHermit; import charbosses.bosses.Hermit.NewAge.ArchetypeAct2WheelOfFateNewAge; +import charbosses.bosses.Hermit.Simpler.ArchetypeAct2WheelOfFateSimple; import charbosses.cards.AbstractBossCard; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; @@ -12,6 +14,8 @@ import com.megacrit.cardcrawl.localization.PowerStrings; import com.megacrit.cardcrawl.powers.AbstractPower; import com.megacrit.cardcrawl.powers.StrengthPower; +import downfall.downfallMod; +import expansioncontent.expansionContentMod; public class HermitWheelOfFortune extends AbstractBossMechanicPower { public static final String POWER_ID = "downfall:HermitWheelOfFortune"; @@ -23,20 +27,28 @@ public HermitWheelOfFortune(AbstractCreature owner) { this.name = NAME; this.ID = POWER_ID; this.owner = owner; - this.amount = 2; + if (downfallMod.useLegacyBosses){ + this.amount = 2; + } else { + this.amount = 0; + } this.updateDescription(); loadRegion("curiosity"); this.type = PowerType.BUFF; } public void updateDescription() { - this.description = DESC[0]; + if (!downfallMod.useLegacyBosses){ + this.description = DESC[1]; + } else { + this.description = DESC[0]; + } } @Override public void onAfterUseCard(AbstractCard card, UseCardAction action) { if (this.owner instanceof CharBossHermit && !(card instanceof AbstractBossCard) && card.type == AbstractCard.CardType.ATTACK) { - if (((CharBossHermit) this.owner).chosenArchetype instanceof ArchetypeAct2WheelOfFateNewAge) { + if (((CharBossHermit) this.owner).chosenArchetype instanceof ArchetypeAct2WheelOfFateNewAge || (((CharBossHermit) this.owner).chosenArchetype instanceof ArchetypeAct2WheelOfFateSimple && ((CharBossHermit) this.owner).chosenArchetype.turn >= 1)) { addToBot(new ReInitializeHandAction(this.owner, this)); } } @@ -45,7 +57,8 @@ public void onAfterUseCard(AbstractCard card, UseCardAction action) { @Override public void onSpecificTrigger() { flash(); - addToBot(new ApplyPowerAction(owner, owner, new StrengthPower(owner, amount), amount)); + + addToBot(new ApplyPowerAction(owner, owner, new StrengthPower(owner, 2), 2)); } static { @@ -70,7 +83,9 @@ class ReInitializeHandAction extends AbstractGameAction { public void update() { if (!this.shouldCancelAction()) { power.flash(); - ((ArchetypeAct2WheelOfFateNewAge) ((CharBossHermit) source).chosenArchetype).reInitializeHand(); + if (AbstractCharBoss.boss.chosenArchetype instanceof ArchetypeAct2WheelOfFateNewAge) ((ArchetypeAct2WheelOfFateNewAge) ((CharBossHermit) source).chosenArchetype).reInitializeHand(); + if (AbstractCharBoss.boss.chosenArchetype instanceof ArchetypeAct2WheelOfFateSimple) ((ArchetypeAct2WheelOfFateSimple) ((CharBossHermit) source).chosenArchetype).reInitializeHand(); + } isDone = true; } diff --git a/src/main/java/charbosses/powers/bossmechanicpowers/IroncladFortificationPower.java b/src/main/java/charbosses/powers/bossmechanicpowers/IroncladFortificationPower.java index f1fb447406..3ba4c26d77 100644 --- a/src/main/java/charbosses/powers/bossmechanicpowers/IroncladFortificationPower.java +++ b/src/main/java/charbosses/powers/bossmechanicpowers/IroncladFortificationPower.java @@ -9,6 +9,8 @@ import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.localization.PowerStrings; import com.megacrit.cardcrawl.powers.AbstractPower; +import downfall.downfallMod; +import expansioncontent.expansionContentMod; import static charbosses.bosses.Ironclad.NewAge.ArchetypeAct3BlockNewAge.FORTIFICATION_AMOUNT; @@ -29,7 +31,11 @@ public IroncladFortificationPower(AbstractCreature owner) { } public void updateDescription() { - this.description = DESC[0] + FORTIFICATION_AMOUNT + DESC[1]; + if (!downfallMod.useLegacyBosses){ + this.description = DESC[2]; + } else { + this.description = DESC[0] + FORTIFICATION_AMOUNT + DESC[1]; + } } static { diff --git a/src/main/java/charbosses/powers/bossmechanicpowers/IroncladMushroomPower.java b/src/main/java/charbosses/powers/bossmechanicpowers/IroncladMushroomPower.java index fc24b1fd91..183e60a08c 100644 --- a/src/main/java/charbosses/powers/bossmechanicpowers/IroncladMushroomPower.java +++ b/src/main/java/charbosses/powers/bossmechanicpowers/IroncladMushroomPower.java @@ -9,6 +9,8 @@ import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.localization.PowerStrings; import com.megacrit.cardcrawl.powers.AbstractPower; +import downfall.downfallMod; +import expansioncontent.expansionContentMod; public class IroncladMushroomPower extends AbstractBossMechanicPower { public static final String POWER_ID = "downfall:IroncladMushroomPower"; @@ -16,18 +18,22 @@ public class IroncladMushroomPower extends AbstractBossMechanicPower { public static final String NAME; public static final String[] DESC; - public IroncladMushroomPower(AbstractCreature owner) { + public IroncladMushroomPower(AbstractCreature owner, int amount) { this.name = NAME; this.ID = POWER_ID; this.owner = owner; - this.amount = 0; + this.amount = amount; this.updateDescription(); loadRegion("curiosity"); this.type = PowerType.BUFF; } public void updateDescription() { - this.description = DESC[0]; + if (!downfallMod.useLegacyBosses){ + this.description = DESC[1] + amount + DESC[2]; + } else { + this.description = DESC[0]; + } } static { diff --git a/src/main/java/charbosses/powers/bossmechanicpowers/IroncladStatusPower.java b/src/main/java/charbosses/powers/bossmechanicpowers/IroncladStatusPower.java index 4c0d02bf33..28e1bc7da1 100644 --- a/src/main/java/charbosses/powers/bossmechanicpowers/IroncladStatusPower.java +++ b/src/main/java/charbosses/powers/bossmechanicpowers/IroncladStatusPower.java @@ -5,10 +5,20 @@ package charbosses.powers.bossmechanicpowers; +import basemod.cardmods.RetainMod; +import basemod.helpers.CardModifierManager; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.colorless.Purity; 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.BufferPower; +import com.megacrit.cardcrawl.rooms.AbstractRoom; +import downfall.downfallMod; +import expansioncontent.expansionContentMod; +import hermit.util.Wiz; public class IroncladStatusPower extends AbstractBossMechanicPower { public static final String POWER_ID = "downfall:IroncladStatusPower"; @@ -20,14 +30,42 @@ public IroncladStatusPower(AbstractCreature owner) { this.name = NAME; this.ID = POWER_ID; this.owner = owner; - this.amount = 0; + if (downfallMod.useLegacyBosses) { + this.amount = 0; + } else { + this.amount = 40; + } this.updateDescription(); loadRegion("curiosity"); this.type = PowerType.BUFF; } + + @Override + public int onLoseHp(int damageAmount) { + + if (!downfallMod.useLegacyBosses && AbstractDungeon.getCurrRoom().phase == AbstractRoom.RoomPhase.COMBAT && !AbstractDungeon.player.hasPower(BufferPower.POWER_ID)) { + + this.amount -= damageAmount; + if (amount <= 0){ + amount = 40; + AbstractCard c = new Purity(); + CardModifierManager.addModifier(c, new RetainMod()); + Wiz.makeInHand(c); + } + } + + return super.onLoseHp(damageAmount); + } + public void updateDescription() { - this.description = DESC[0]; + + if (downfallMod.useLegacyBosses) { + this.description = DESC[0]; + } else { + + this.description = DESC[1] + amount + DESC[2]; + } } static { diff --git a/src/main/java/charbosses/powers/bossmechanicpowers/SilentDelayedWraithPower.java b/src/main/java/charbosses/powers/bossmechanicpowers/SilentDelayedWraithPower.java new file mode 100644 index 0000000000..604cc331e9 --- /dev/null +++ b/src/main/java/charbosses/powers/bossmechanicpowers/SilentDelayedWraithPower.java @@ -0,0 +1,95 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by Fernflower decompiler) +// + +package charbosses.powers.bossmechanicpowers; + +import charbosses.actions.common.EnemyMakeTempCardInHandAction; +import charbosses.bosses.AbstractCharBoss; +import charbosses.bosses.Silent.CharBossSilent; +import charbosses.cards.AbstractBossCard; +import charbosses.cards.colorless.EnShiv; +import charbosses.cards.green.EnFinisher; +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.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.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.localization.PowerStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.IntangiblePlayerPower; +import com.megacrit.cardcrawl.powers.IntangiblePower; +import com.megacrit.cardcrawl.powers.WraithFormPower; +import downfall.downfallMod; +import downfall.monsters.AbstractTotemMonster; + +public class SilentDelayedWraithPower extends AbstractBossMechanicPower { + public static final String POWER_ID = "downfall:SilentDelayedWraithPower"; + private static final PowerStrings powerStrings; + public static final String NAME; + public static final String[] DESC; + + private int healNormal = 10; + private int healAsc = 15; + + private boolean activated = false; + + public SilentDelayedWraithPower(AbstractCreature owner) { + name = NAME; + ID = POWER_ID; + this.owner = owner; + updateDescription(); + loadRegion("curiosity"); + type = PowerType.BUFF; + } + + public void updateDescription() { + if (AbstractDungeon.ascensionLevel >= 19){ + description = DESC[0] + "+" + DESC[1] + healAsc + DESC[2]; + } else { + description = DESC[0] + DESC[1] + healNormal + DESC[2]; + } + } + + + public int onLoseHp(int damageAmount) { + if (damageAmount >= this.owner.currentHealth) { + damageAmount = this.owner.currentHealth-1; + if (!activated) { + //((CharBossSilent) owner).cantDie = true; + activated = true; + if (AbstractDungeon.ascensionLevel >= 19){ + this.addToBot(new ApplyPowerAction(owner, owner, new IntangiblePlayerPower(owner, 3), 3)); + this.addToBot(new HealAction(owner,owner,healAsc)); + } else { + this.addToBot(new ApplyPowerAction(owner, owner, new IntangiblePlayerPower(owner, 2), 2)); + this.addToBot(new HealAction(owner,owner,healNormal)); + } + this.addToBot(new ApplyPowerAction(owner, owner, new WraithFormPower(owner, -1), -1)); + this.addToBot(new RemoveSpecificPowerAction(owner, owner, this)); + } + } + return damageAmount; + } + + @Override + public int onAttackedToChangeDamage(DamageInfo info, int damageAmount) { + + if ((float) this.owner.currentHealth <= damageAmount) { + + } + + return super.onAttackedToChangeDamage(info, damageAmount); + } + + static { + powerStrings = CardCrawlGame.languagePack.getPowerStrings(POWER_ID); + NAME = powerStrings.NAME; + DESC = powerStrings.DESCRIPTIONS; + } +} diff --git a/src/main/java/charbosses/powers/bossmechanicpowers/SilentPoisonPower.java b/src/main/java/charbosses/powers/bossmechanicpowers/SilentPoisonPower.java index 0ee4e9306a..32b52ae050 100644 --- a/src/main/java/charbosses/powers/bossmechanicpowers/SilentPoisonPower.java +++ b/src/main/java/charbosses/powers/bossmechanicpowers/SilentPoisonPower.java @@ -9,6 +9,7 @@ import com.megacrit.cardcrawl.localization.PowerStrings; import com.megacrit.cardcrawl.powers.AbstractPower; import com.megacrit.cardcrawl.rooms.AbstractRoom; +import downfall.downfallMod; public class SilentPoisonPower extends AbstractBossMechanicPower { public static final String POWER_ID = "downfall:SilentPoisonPower"; @@ -38,7 +39,15 @@ public void atStartOfTurn() { public void updateDescription() { - this.description = DESC[0]; + if (downfallMod.useLegacyBosses) { + + this.description = DESC[0]; + } + else { + + this.description = DESC[1]; + } + } static { diff --git a/src/main/java/charbosses/powers/bossmechanicpowers/TangerinePower.java b/src/main/java/charbosses/powers/bossmechanicpowers/TangerinePower.java index 812250bf0b..f661ea7f07 100644 --- a/src/main/java/charbosses/powers/bossmechanicpowers/TangerinePower.java +++ b/src/main/java/charbosses/powers/bossmechanicpowers/TangerinePower.java @@ -10,11 +10,13 @@ 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.powers.AbstractPower; import com.megacrit.cardcrawl.powers.BlurPower; import com.megacrit.cardcrawl.powers.StrengthPower; import com.megacrit.cardcrawl.vfx.combat.ShockWaveEffect; +import downfall.downfallMod; import hermit.util.TextureLoader; public class TangerinePower extends AbstractPower { @@ -60,7 +62,11 @@ public void onDeath() } public void updateDescription() { - this.description = DESC[0] + amount + DESC[1]; + if (downfallMod.useLegacyBosses || AbstractDungeon.ascensionLevel >= 19) { + this.description = DESC[0] + amount + DESC[1]; + } else { + this.description = DESC[2]; + } } static { diff --git a/src/main/java/charbosses/powers/bossmechanicpowers/VoidOrbPower.java b/src/main/java/charbosses/powers/bossmechanicpowers/VoidOrbPower.java new file mode 100644 index 0000000000..9399d1eda1 --- /dev/null +++ b/src/main/java/charbosses/powers/bossmechanicpowers/VoidOrbPower.java @@ -0,0 +1,103 @@ +package charbosses.powers.bossmechanicpowers; + +import basemod.interfaces.CloneablePowerInterface; +import charbosses.bosses.AbstractCharBoss; +import charbosses.bosses.Defect.CharBossDefect; +import charbosses.bosses.Defect.Simpler.ArchetypeAct1VoidsSimple; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.TextureAtlas; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +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.vfx.combat.HealEffect; +import downfall.downfallMod; +import downfall.util.TextureLoader; + +import static awakenedOne.util.Wiz.atb; + +public class VoidOrbPower extends AbstractPower implements CloneablePowerInterface { + + public static final String POWER_ID = downfallMod.makeID("VoidOrbPower"); + public static final String NAME = CardCrawlGame.languagePack.getPowerStrings(POWER_ID).NAME; + public static final String DESCRIPTIONS[] = CardCrawlGame.languagePack.getPowerStrings(POWER_ID).DESCRIPTIONS; + + private static final Texture tex84 = TextureLoader.getTexture(downfallMod.assetPath("images/powers/FairyPotion84.png")); + private static final Texture tex32 = TextureLoader.getTexture(downfallMod.assetPath("images/powers/FairyPotion32.png")); + + + public VoidOrbPower(final AbstractCreature owner) { + this.ID = POWER_ID; + this.owner = owner; + 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.name = NAME; + + this.updateDescription(); + + + } + + private void healUndead(AbstractCreature m, int healAmount) { + if (m.isDying) m.isDying = false; + // if (AbstractDungeon.ascensionLevel >= 19) m.maxHealth += 5; + for (AbstractPower p : m.powers) { + p.onHeal(healAmount); + } + + m.currentHealth += healAmount; + if (m.currentHealth > m.maxHealth) { + m.currentHealth = m.maxHealth; + } + + + if (healAmount > 0) { + m.healthBarUpdatedEvent(); + } + + } + + @Override + public void onDeath() { + if (AbstractCharBoss.boss != null) { + if (!AbstractCharBoss.boss.isDying) { + super.onDeath(); + healUndead(owner, 9999); + AbstractDungeon.effectsQueue.add(new HealEffect(owner.hb.cX, owner.hb.cY, owner.maxHealth)); + + atb(new AbstractGameAction() { + @Override + public void update() { + isDone = true; + if (AbstractCharBoss.boss != null) { + if (AbstractCharBoss.boss.chosenArchetype != null) { + ((ArchetypeAct1VoidsSimple) AbstractCharBoss.boss.chosenArchetype).minionDestroyedThisTurn = true; + if (!AbstractCharBoss.boss.orbs.isEmpty()) { + AbstractCharBoss.boss.removeNextOrb(); + } + + } + } + } + }); + + } + //Wiz.applyToSelf(new VoidProtectionPower(AbstractDungeon.player)); + } + } + + @Override + public void updateDescription() { + this.description = DESCRIPTIONS[0]; + } + + @Override + public AbstractPower makeCopy() { + return new VoidOrbPower(owner); + } +} \ No newline at end of file diff --git a/src/main/java/charbosses/powers/bossmechanicpowers/VoidProtectionPower.java b/src/main/java/charbosses/powers/bossmechanicpowers/VoidProtectionPower.java new file mode 100644 index 0000000000..8474190c50 --- /dev/null +++ b/src/main/java/charbosses/powers/bossmechanicpowers/VoidProtectionPower.java @@ -0,0 +1,86 @@ +package charbosses.powers.bossmechanicpowers; + +import automaton.cards.goodstatus.IntoTheVoid; +import basemod.interfaces.CloneablePowerInterface; +import charbosses.bosses.AbstractCharBoss; +import charbosses.bosses.Defect.Simpler.ArchetypeAct1VoidsSimple; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.TextureAtlas; +import com.megacrit.cardcrawl.actions.animations.TalkAction; +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.RemoveSpecificPowerAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.status.VoidCard; +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.DrawCardNextTurnPower; +import com.megacrit.cardcrawl.powers.EnergizedBluePower; +import com.megacrit.cardcrawl.vfx.combat.HealEffect; +import downfall.downfallMod; +import downfall.util.TextureLoader; +import hermit.util.Wiz; + +public class VoidProtectionPower extends AbstractPower implements CloneablePowerInterface { + + public static final String POWER_ID = downfallMod.makeID("VoidProtectionPower"); + public static final String NAME = CardCrawlGame.languagePack.getPowerStrings(POWER_ID).NAME; + public static final String DESCRIPTIONS[] = CardCrawlGame.languagePack.getPowerStrings(POWER_ID).DESCRIPTIONS; + + private static final Texture tex84 = TextureLoader.getTexture(downfallMod.assetPath("images/powers/FairyPotion84.png")); + private static final Texture tex32 = TextureLoader.getTexture(downfallMod.assetPath("images/powers/FairyPotion32.png")); + + public boolean finished = false; + + public VoidProtectionPower(final AbstractCreature owner) { + this.ID = POWER_ID; + this.owner = owner; + this.amount = 1; + 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.name = NAME; + + this.updateDescription(); + } + + @Override + public void stackPower(int stackAmount) { + super.stackPower(stackAmount); + updateDescription(); + } + + @Override + public void onCardDraw(AbstractCard card) { + super.onCardDraw(card); + if (!finished) { + if (card instanceof VoidCard || card instanceof IntoTheVoid) { + finished = true; + this.flash(); + addToBot(new GainEnergyAction(1)); + addToBot(new DrawCardAction(1)); + addToBot(new RemoveSpecificPowerAction(owner, owner, this)); + } + } + } + + @Override + public void updateDescription() { + if (amount > 1){ + description = DESCRIPTIONS[0] + amount + DESCRIPTIONS[1] + amount + DESCRIPTIONS[3]; + } else { + description = DESCRIPTIONS[0] + amount + DESCRIPTIONS[1] + amount + DESCRIPTIONS[2]; + } + } + + @Override + public AbstractPower makeCopy() { + return new VoidProtectionPower(owner); + } +} \ No newline at end of file diff --git a/src/main/java/charbosses/powers/bossmechanicpowers/WatcherAngryPower.java b/src/main/java/charbosses/powers/bossmechanicpowers/WatcherAngryPower.java index 7985b2a47f..dedebd7892 100644 --- a/src/main/java/charbosses/powers/bossmechanicpowers/WatcherAngryPower.java +++ b/src/main/java/charbosses/powers/bossmechanicpowers/WatcherAngryPower.java @@ -12,6 +12,8 @@ import com.megacrit.cardcrawl.core.AbstractCreature; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.localization.PowerStrings; +import downfall.downfallMod; +import expansioncontent.expansionContentMod; public class WatcherAngryPower extends AbstractBossMechanicPower { public static final String POWER_ID = "downfall:WatcherAngryPower"; @@ -26,20 +28,31 @@ public WatcherAngryPower(AbstractCreature owner) { this.ID = POWER_ID; this.owner = owner; this.updateDescription(); - loadRegion("curiosity"); + if (downfallMod.useLegacyBosses) { + loadRegion("curiosity"); + } else { + loadRegion("anger"); + } } public void updateDescription() { - this.description = DESCRIPTIONS[0]; + + if (downfallMod.useLegacyBosses) { + this.description = DESCRIPTIONS[0]; + } else { + this.description = DESCRIPTIONS[1]; + } } @Override public void atEndOfRound() { super.atEndOfRound(); - if (!active && owner.currentHealth <= owner.maxHealth / 2) { + if (downfallMod.useLegacyBosses) { + if (!active && owner.currentHealth <= owner.maxHealth / 2) { - this.addToBot(new EnemyChangeStanceAction(EnWrathStance.STANCE_ID)); - active = true; + this.addToBot(new EnemyChangeStanceAction(EnWrathStance.STANCE_ID)); + active = true; + } } } diff --git a/src/main/java/charbosses/powers/bossmechanicpowers/WatcherDivinityNoRemovePower.java b/src/main/java/charbosses/powers/bossmechanicpowers/WatcherDivinityNoRemovePower.java new file mode 100644 index 0000000000..e6b6b4e129 --- /dev/null +++ b/src/main/java/charbosses/powers/bossmechanicpowers/WatcherDivinityNoRemovePower.java @@ -0,0 +1,42 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by Fernflower decompiler) +// + +package charbosses.powers.bossmechanicpowers; + +import charbosses.cards.AbstractBossCard; +import charbosses.powers.cardpowers.EnemyMantraPower; +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.localization.PowerStrings; + +public class WatcherDivinityNoRemovePower extends AbstractBossMechanicPower { + public static final String POWER_ID = "downfall:WatcherDivinityNoRemovePower"; + private static final PowerStrings powerStrings; + public static final String NAME; + public static final String[] DESC; + + public WatcherDivinityNoRemovePower(AbstractCreature owner) { + this.name = NAME; + this.ID = POWER_ID; + this.owner = owner; + this.amount = 0; + this.updateDescription(); + loadRegion("curiosity"); + this.type = PowerType.BUFF; + } + + public void updateDescription() { + this.description = DESC[0]; + } + + static { + powerStrings = CardCrawlGame.languagePack.getPowerStrings(POWER_ID); + NAME = powerStrings.NAME; + DESC = powerStrings.DESCRIPTIONS; + } +} diff --git a/src/main/java/charbosses/powers/bossmechanicpowers/WatcherDivinityPower.java b/src/main/java/charbosses/powers/bossmechanicpowers/WatcherDivinityPower.java index ba09a2a72f..75eacaa811 100644 --- a/src/main/java/charbosses/powers/bossmechanicpowers/WatcherDivinityPower.java +++ b/src/main/java/charbosses/powers/bossmechanicpowers/WatcherDivinityPower.java @@ -6,20 +6,31 @@ package charbosses.powers.bossmechanicpowers; import charbosses.bosses.AbstractCharBoss; +import charbosses.bosses.Watcher.CharBossWatcher; import charbosses.cards.AbstractBossCard; +import charbosses.orbs.AbstractEnemyOrb; import charbosses.powers.cardpowers.EnemyAccuracyPower; import charbosses.powers.cardpowers.EnemyMantraPower; +import charbosses.stances.EnWrathStance; 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.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.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.localization.PowerStrings; +import com.megacrit.cardcrawl.orbs.AbstractOrb; import com.megacrit.cardcrawl.powers.AbstractPower; +import com.megacrit.cardcrawl.powers.IntangiblePlayerPower; +import com.megacrit.cardcrawl.powers.IntangiblePower; +import com.megacrit.cardcrawl.vfx.combat.DevotionEffect; import com.megacrit.cardcrawl.vfx.combat.TimeWarpTurnEndEffect; +import downfall.downfallMod; +import hermit.util.Wiz; public class WatcherDivinityPower extends AbstractBossMechanicPower { public static final String POWER_ID = "downfall:WatcherDivinityPower"; @@ -27,6 +38,8 @@ public class WatcherDivinityPower extends AbstractBossMechanicPower { public static final String NAME; public static final String[] DESC; + private boolean triggeredTheThing; + public WatcherDivinityPower(AbstractCreature owner) { this.name = NAME; this.ID = POWER_ID; @@ -42,12 +55,42 @@ public void updateDescription() { } public void onAfterUseCard(AbstractCard card, UseCardAction action) { - if (!(card instanceof AbstractBossCard)) { - this.addToBot(new ApplyPowerAction(this.owner, this.owner, new EnemyMantraPower(this.owner, 1), 1)); + if (downfallMod.useLegacyBosses) { + if (!(card instanceof AbstractBossCard)) { + this.addToBot(new ApplyPowerAction(this.owner, this.owner, new EnemyMantraPower(this.owner, 1), 1)); + } + } + + + if (!downfallMod.useLegacyBosses) { + if (!(card instanceof AbstractBossCard) && !card.purgeOnUse) { + if (this.amount < 6) { + flash(); + this.amount++; + if (this.amount == 6) { + Wiz.atb(new VFXAction(new DevotionEffect(), 0.4F)); + this.addToBot(new ApplyPowerAction(this.owner, this.owner, new IntangiblePlayerPower(this.owner, 1), 1)); + this.addToBot(new ApplyPowerAction(this.owner, this.owner, new EnemyMantraPower(this.owner, 1), 1)); + } + } + } } } + @Override + public void atStartOfTurn() { + this.amount = 0; + updateDescription(); + } + + @Override + public void atEndOfTurn(boolean isPlayer) { + this.amount = 0; + updateDescription(); + } + + static { powerStrings = CardCrawlGame.languagePack.getPowerStrings(POWER_ID); NAME = powerStrings.NAME; diff --git a/src/main/java/charbosses/powers/bossmechanicpowers/WatcherSkillPower.java b/src/main/java/charbosses/powers/bossmechanicpowers/WatcherSkillPower.java index 8de06293d3..4f46a2bab6 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/bossmechanicpowers/WatcherTrackerAttacksPower.java b/src/main/java/charbosses/powers/bossmechanicpowers/WatcherTrackerAttacksPower.java new file mode 100644 index 0000000000..54901d1516 --- /dev/null +++ b/src/main/java/charbosses/powers/bossmechanicpowers/WatcherTrackerAttacksPower.java @@ -0,0 +1,82 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by Fernflower decompiler) +// + +package charbosses.powers.bossmechanicpowers; + +import automaton.FunctionHelper; +import charbosses.actions.unique.EnemyChangeStanceAction; +import charbosses.bosses.AbstractCharBoss; +import charbosses.cards.AbstractBossCard; +import charbosses.stances.EnRealWrathStance; +import charbosses.stances.EnWrathStance; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.actions.utility.UseCardAction; +import com.megacrit.cardcrawl.actions.watcher.ChangeStanceAction; +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.DexterityPower; +import com.megacrit.cardcrawl.powers.LoseDexterityPower; +import com.megacrit.cardcrawl.powers.LoseStrengthPower; +import com.megacrit.cardcrawl.powers.StrengthPower; + +import static awakenedOne.util.Wiz.atb; + +public class WatcherTrackerAttacksPower extends AbstractBossMechanicPower { + public static final String POWER_ID = "downfall:WatcherTrackerAttacksPower"; + private static final PowerStrings powerStrings; + public static final String NAME; + public static final String[] DESCRIPTIONS; + + private boolean used = false; + + public WatcherTrackerAttacksPower(AbstractCreature owner, int newAmount) { + this.name = NAME; + this.ID = POWER_ID; + this.owner = owner; + this.amount = newAmount; + this.updateDescription(); + loadRegion("curiosity"); + } + + public void updateDescription() { + this.description = DESCRIPTIONS[0] + this.amount + DESCRIPTIONS[1]; + } + + + @Override + public void stackPower(int stackAmount) { + super.stackPower(stackAmount); + this.updateDescription(); + } + + @Override + public void onAfterUseCard(AbstractCard card, UseCardAction action) { + super.onAfterUseCard(card, action); + super.onAfterCardPlayed(card); + if (card instanceof AbstractBossCard) { + return; + } + if (card.type.equals(AbstractCard.CardType.ATTACK)) { + this.flash(); + stackPower(1); + if (owner.hasPower(WatcherTrackerSkillsPower.POWER_ID)){ + if (owner.getPower(WatcherTrackerSkillsPower.POWER_ID).amount < this.amount){ + atb(new EnemyChangeStanceAction(EnWrathStance.STANCE_ID)); + } + } + } + } + + + static { + powerStrings = CardCrawlGame.languagePack.getPowerStrings(POWER_ID); + NAME = powerStrings.NAME; + DESCRIPTIONS = powerStrings.DESCRIPTIONS; + } +} diff --git a/src/main/java/charbosses/powers/bossmechanicpowers/WatcherTrackerSkillsPower.java b/src/main/java/charbosses/powers/bossmechanicpowers/WatcherTrackerSkillsPower.java new file mode 100644 index 0000000000..dda1fba5c0 --- /dev/null +++ b/src/main/java/charbosses/powers/bossmechanicpowers/WatcherTrackerSkillsPower.java @@ -0,0 +1,80 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by Fernflower decompiler) +// + +package charbosses.powers.bossmechanicpowers; + +import charbosses.actions.unique.EnemyChangeStanceAction; +import charbosses.bosses.AbstractCharBoss; +import charbosses.cards.AbstractBossCard; +import charbosses.stances.EnCalmStance; +import charbosses.stances.EnRealWrathStance; +import charbosses.stances.EnWrathStance; +import com.megacrit.cardcrawl.actions.AbstractGameAction; +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.DamageInfo; +import com.megacrit.cardcrawl.core.AbstractCreature; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.localization.PowerStrings; +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 static awakenedOne.util.Wiz.atb; + +public class WatcherTrackerSkillsPower extends AbstractBossMechanicPower { + public static final String POWER_ID = "downfall:WatcherTrackerSkillsPower"; + private static final PowerStrings powerStrings; + public static final String NAME; + public static final String[] DESCRIPTIONS; + + private boolean used = false; + + public WatcherTrackerSkillsPower(AbstractCreature owner, int newAmount) { + this.name = NAME; + this.ID = POWER_ID; + this.owner = owner; + this.amount = newAmount; + this.updateDescription(); + loadRegion("curiosity"); + } + + public void updateDescription() { + this.description = DESCRIPTIONS[0] + this.amount + DESCRIPTIONS[1]; + } + + @Override + public void stackPower(int stackAmount) { + super.stackPower(stackAmount); + this.updateDescription(); + } + + @Override + public void onAfterUseCard(final AbstractCard card, final UseCardAction action) { + if (card instanceof AbstractBossCard) { + return; + } + if (!card.type.equals(AbstractCard.CardType.ATTACK)) { + this.flash(); + stackPower(1); + if (owner.hasPower(WatcherTrackerAttacksPower.POWER_ID)){ + if (owner.getPower(WatcherTrackerAttacksPower.POWER_ID).amount <= this.amount){ + atb(new EnemyChangeStanceAction(EnCalmStance.STANCE_ID)); + } + } + } + + } + + + + static { + powerStrings = CardCrawlGame.languagePack.getPowerStrings(POWER_ID); + NAME = powerStrings.NAME; + DESCRIPTIONS = powerStrings.DESCRIPTIONS; + } +} diff --git a/src/main/java/charbosses/powers/cardpowers/EnemyBigShotPower.java b/src/main/java/charbosses/powers/cardpowers/EnemyBigShotPower.java new file mode 100644 index 0000000000..15ede0cbe9 --- /dev/null +++ b/src/main/java/charbosses/powers/cardpowers/EnemyBigShotPower.java @@ -0,0 +1,81 @@ +package charbosses.powers.cardpowers; + +import basemod.interfaces.CloneablePowerInterface; +import charbosses.cards.AbstractBossCard; +import charbosses.powers.bossmechanicpowers.HermitConcentrationPower; +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.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.localization.PowerStrings; +import com.megacrit.cardcrawl.powers.AbstractPower; +import com.megacrit.cardcrawl.powers.WeakPower; +import com.megacrit.cardcrawl.powers.watcher.VigorPower; +import downfall.downfallMod; +import hermit.HermitMod; +import hermit.powers.BigShotPower; +import hermit.util.TextureLoader; +import hermit.util.Wiz; + +import static hermit.HermitMod.makePowerPath; + +public class EnemyBigShotPower extends AbstractPower implements CloneablePowerInterface { + public AbstractCreature source; + + public static final String POWER_ID = HermitMod.makeID(EnemyBigShotPower.class.getSimpleName()); + private static final PowerStrings powerStrings = CardCrawlGame.languagePack.getPowerStrings(HermitMod.makeID(BigShotPower.class.getSimpleName())); + public static final String NAME = powerStrings.NAME; + public static final String[] DESCRIPTIONS = powerStrings.DESCRIPTIONS; + + private static final Texture tex84 = TextureLoader.getTexture(makePowerPath("smoking_barrel_p.png")); + private static final Texture tex32 = TextureLoader.getTexture(makePowerPath("smoking_barrel.png")); + + + public EnemyBigShotPower(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 void onAfterUseCard(AbstractCard card, UseCardAction action) { + super.onAfterUseCard(card, action); + if (card instanceof AbstractBossCard){ + if (card.hasTag(downfallMod.CHARBOSS_DEADON)){ + AbstractPower concentration = this.owner.getPower(HermitConcentrationPower.POWER_ID); + if (concentration != null && concentration.amount > 0) { + Wiz.atb(new ApplyPowerAction(owner, owner, new VigorPower(owner, amount))); + } + } + } + } + + // Update the description when you apply this power. (i.e. add or remove an "s" in keyword(s)) + @Override + public void updateDescription() { + description = DESCRIPTIONS[0] + amount + DESCRIPTIONS[1]; + } + + @Override + public AbstractPower makeCopy() { + return new EnemyBigShotPower(owner, amount); + } +} diff --git a/src/main/java/charbosses/powers/cardpowers/EnemyBrawlPower.java b/src/main/java/charbosses/powers/cardpowers/EnemyBrawlPower.java new file mode 100644 index 0000000000..261a1fecef --- /dev/null +++ b/src/main/java/charbosses/powers/cardpowers/EnemyBrawlPower.java @@ -0,0 +1,64 @@ +package charbosses.powers.cardpowers; + +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.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 hermit.HermitMod; +import hermit.powers.Bruise; +import hermit.util.TextureLoader; + +import java.util.Iterator; + +public class EnemyBrawlPower extends AbstractPower implements CloneablePowerInterface { + public AbstractCreature source; + + public static final String POWER_ID = HermitMod.makeID("BrawlPower"); + private static final PowerStrings powerStrings = CardCrawlGame.languagePack.getPowerStrings(POWER_ID); + public static final String NAME = powerStrings.NAME; + public static final String[] DESCRIPTIONS = powerStrings.DESCRIPTIONS; + + // We create 2 new textures *Using This Specific Texture Loader* - an 84x84 image and a 32x32 one. + private static final Texture tex84 = TextureLoader.getTexture("hermitResources/images/powers/brawl_p.png"); + private static final Texture tex32 = TextureLoader.getTexture("hermitResources/images/powers/brawl.png"); + + public EnemyBrawlPower(final AbstractCreature owner, final int amount) { + name = NAME; + ID = POWER_ID; + + this.owner = owner; + this.amount = amount; + this.source = owner; + + type = PowerType.BUFF; + isTurnBased = false; + + // We load those textures here. + this.region128 = new TextureAtlas.AtlasRegion(tex84, 0, 0, 84, 84); + this.region48 = new TextureAtlas.AtlasRegion(tex32, 0, 0, 32, 32); + + updateDescription(); + } + + @Override + public void atStartOfTurn() { // At the start of your turn + this.flash(); + this.addToBot(new ApplyPowerAction(AbstractDungeon.player, this.owner, new Bruise(AbstractDungeon.player, this.amount), this.amount)); + } + + @Override + public void updateDescription() { + description = DESCRIPTIONS[0] + (amount) + DESCRIPTIONS[1]; + } + + @Override + public AbstractPower makeCopy() { + return new EnemyBrawlPower(owner, amount); + } +} diff --git a/src/main/java/charbosses/powers/cardpowers/EnemyDevotionPower.java b/src/main/java/charbosses/powers/cardpowers/EnemyDevotionPower.java index 9324b6b90c..de84149237 100644 --- a/src/main/java/charbosses/powers/cardpowers/EnemyDevotionPower.java +++ b/src/main/java/charbosses/powers/cardpowers/EnemyDevotionPower.java @@ -29,6 +29,7 @@ public void updateDescription() { this.description = powerStrings.DESCRIPTIONS[0] + this.amount + powerStrings.DESCRIPTIONS[1]; } + @Override public void atStartOfTurnPostDraw() { this.flash(); if (!AbstractCharBoss.boss.hasPower("Mantra") && this.amount >= 10) { diff --git a/src/main/java/charbosses/powers/cardpowers/EnemyLoopPower.java b/src/main/java/charbosses/powers/cardpowers/EnemyLoopPower.java new file mode 100644 index 0000000000..2df98ddf48 --- /dev/null +++ b/src/main/java/charbosses/powers/cardpowers/EnemyLoopPower.java @@ -0,0 +1,52 @@ +package charbosses.powers.cardpowers; + +import charbosses.bosses.AbstractCharBoss; +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.orbs.AbstractOrb; +import com.megacrit.cardcrawl.powers.AbstractPower; + +public class EnemyLoopPower extends AbstractPower { + public static final String POWER_ID = "Loop"; + private static final PowerStrings powerStrings; + public static final String NAME; + public static final String[] DESCRIPTIONS; + + public EnemyLoopPower(AbstractCreature owner, int amt) { + this.name = NAME; + this.ID = "Loop"; + this.owner = owner; + this.amount = amt; + this.updateDescription(); + this.loadRegion("loop"); + } + + public void atStartOfTurn() { + if (!AbstractCharBoss.boss.orbs.isEmpty()) { + this.flash(); + + for(int i = 0; i < this.amount; ++i) { + ((AbstractOrb)AbstractCharBoss.boss.orbs.get(0)).onStartOfTurn(); + ((AbstractOrb)AbstractCharBoss.boss.orbs.get(0)).onEndOfTurn(); + } + } + + } + + public void updateDescription() { + if (this.amount <= 1) { + this.description = DESCRIPTIONS[0]; + } else { + this.description = DESCRIPTIONS[1] + this.amount + DESCRIPTIONS[2]; + } + } + + + static { + powerStrings = CardCrawlGame.languagePack.getPowerStrings("Loop"); + NAME = powerStrings.NAME; + DESCRIPTIONS = powerStrings.DESCRIPTIONS; + } +} diff --git a/src/main/java/charbosses/powers/cardpowers/EnemyMantraPower.java b/src/main/java/charbosses/powers/cardpowers/EnemyMantraPower.java index 2ed5cc3c3b..a22da32249 100644 --- a/src/main/java/charbosses/powers/cardpowers/EnemyMantraPower.java +++ b/src/main/java/charbosses/powers/cardpowers/EnemyMantraPower.java @@ -14,11 +14,13 @@ import com.megacrit.cardcrawl.powers.AbstractPower; import com.megacrit.cardcrawl.powers.AbstractPower.PowerType; import com.megacrit.cardcrawl.powers.StrengthPower; +import downfall.downfallMod; 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; @@ -36,33 +38,38 @@ public EnemyMantraPower(AbstractCreature owner, int amount) { @Override public void atStartOfTurn() { - System.out.println("atStartOfTurn started..."); + //System.out.println("atStartOfTurn started..."); this.flash(); - int initialAmount = this.amount; + initialAmount = this.amount; - System.out.println("Initial amount of Mantra: " + initialAmount); + //System.out.println("Initial amount of Mantra: " + initialAmount); - addToBot(new ReducePowerAction(this.owner, this.owner, EnemyMantraPower.POWER_ID, 4)); - System.out.println("DEBUG: Reducing by 4..."); + addToBot(new ReducePowerAction(this.owner, this.owner, EnemyMantraPower.POWER_ID, 5)); + } - addToBot(new AbstractGameAction() { - @Override - public void update() { - System.out.println("Following up."); + public void atEndOfRound() { + if (downfallMod.useLegacyBosses) { + // System.out.println("DEBUG: Reducing by 5..."); - int reducedAmount = Math.min(4, initialAmount); - System.out.println("Predicted amount removed: " + reducedAmount); + addToBot(new AbstractGameAction() { + @Override + public void update() { + // System.out.println("Following up."); - int previousMantraGained = AbstractCharBoss.boss.mantraGained; - AbstractCharBoss.boss.mantraGained -= reducedAmount; - System.out.println("MantraGained reduced from " + previousMantraGained + " to " + AbstractCharBoss.boss.mantraGained); + int reducedAmount = Math.min(5, initialAmount); + // System.out.println("Predicted amount removed: " + reducedAmount); - this.isDone = true; - System.out.println("atStartOfTurn completed."); - } - }); + 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."); + } + }); + } } diff --git a/src/main/java/charbosses/powers/cardpowers/EnemyOmegaPower.java b/src/main/java/charbosses/powers/cardpowers/EnemyOmegaPower.java new file mode 100644 index 0000000000..85fc3b6238 --- /dev/null +++ b/src/main/java/charbosses/powers/cardpowers/EnemyOmegaPower.java @@ -0,0 +1,50 @@ +package charbosses.powers.cardpowers; + + +import charbosses.actions.unique.EnemyChangeStanceAction; +import charbosses.bosses.AbstractCharBoss; +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.DamageAllEnemiesAction; +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.localization.PowerStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.AbstractPower; +import com.megacrit.cardcrawl.vfx.combat.OmegaFlashEffect; + +import java.util.Iterator; + +public class EnemyOmegaPower extends AbstractPower { + public static final String POWER_ID = "OmegaPower"; + private static final PowerStrings powerStrings; + + public EnemyOmegaPower(AbstractCreature owner, int newAmount) { + this.name = powerStrings.NAME; + this.ID = "OmegaPower"; + this.owner = owner; + this.amount = newAmount; + this.updateDescription(); + this.loadRegion("omega"); + } + + public void updateDescription() { + this.description = powerStrings.DESCRIPTIONS[0] + this.amount + powerStrings.DESCRIPTIONS[1]; + } + + + public void atEndOfTurn(boolean isPlayer) { + this.addToBot(new DamageAction(AbstractDungeon.player, new DamageInfo(owner, this.amount, DamageInfo.DamageType.THORNS), AbstractGameAction.AttackEffect.FIRE)); + + } + + + static { + powerStrings = CardCrawlGame.languagePack.getPowerStrings("OmegaPower"); + } +} diff --git a/src/main/java/charbosses/powers/cardpowers/EnemySadisticPower.java b/src/main/java/charbosses/powers/cardpowers/EnemySadisticPower.java new file mode 100644 index 0000000000..e106c3f512 --- /dev/null +++ b/src/main/java/charbosses/powers/cardpowers/EnemySadisticPower.java @@ -0,0 +1,71 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package charbosses.powers.cardpowers; + +import collector.relics.Incense; +import com.megacrit.cardcrawl.actions.AbstractGameAction.AttackEffect; +import com.megacrit.cardcrawl.actions.common.DamageAction; +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; +import com.megacrit.cardcrawl.powers.AbstractPower.PowerType; +import com.megacrit.cardcrawl.powers.FrailPower; +import com.megacrit.cardcrawl.powers.VulnerablePower; +import com.megacrit.cardcrawl.powers.WeakPower; +import com.megacrit.cardcrawl.powers.watcher.VigorPower; +import com.megacrit.cardcrawl.relics.Ginger; +import com.megacrit.cardcrawl.relics.Turnip; +import downfall.actions.WaitForEscapeAction; +import hermit.relics.Horseshoe; + +public class EnemySadisticPower extends AbstractPower { + public static final String POWER_ID = "Sadistic"; + private static final PowerStrings powerStrings; + public static final String NAME; + public static final String[] DESCRIPTIONS; + + public EnemySadisticPower(AbstractCreature owner, int amount) { + this.name = NAME; + this.ID = "Sadistic"; + this.owner = owner; + this.amount = amount; + this.updateDescription(); + this.loadRegion("sadistic"); + } + + public void updateDescription() { + this.description = DESCRIPTIONS[0] + this.amount + DESCRIPTIONS[1]; + } + + public void onApplyPower(AbstractPower power, AbstractCreature target, AbstractCreature source) { + // check for horseshoe + if (!((power instanceof WeakPower || power instanceof FrailPower || power instanceof VulnerablePower) && + (power.amount == 1) && + AbstractDungeon.player.hasRelic(Horseshoe.ID))) { + // check for ginger / turnip + if (!(power.ID == WeakPower.POWER_ID && AbstractDungeon.player.hasRelic(Ginger.ID)) && !(power.ID == FrailPower.POWER_ID && AbstractDungeon.player.hasRelic(Turnip.ID))) { + // check for incense + if (!((power instanceof WeakPower || power instanceof FrailPower || power instanceof VulnerablePower) && + ((target.hasPower(power.ID) && AbstractDungeon.player.hasRelic(Incense.ID))))) { + if (power.type == PowerType.DEBUFF && !power.ID.equals("Shackled") && source == this.owner && target != this.owner && !target.hasPower("Artifact")) { + this.flash(); + this.addToBot(new DamageAction(target, new DamageInfo(this.owner, this.amount, DamageType.THORNS), AttackEffect.FIRE)); + } + } + } + } + } + + static { + powerStrings = CardCrawlGame.languagePack.getPowerStrings("Sadistic"); + NAME = powerStrings.NAME; + DESCRIPTIONS = powerStrings.DESCRIPTIONS; + } +} diff --git a/src/main/java/charbosses/powers/cardpowers/EnemySpotWeaknessPower.java b/src/main/java/charbosses/powers/cardpowers/EnemySpotWeaknessPower.java index a47b79c880..18e61ddcf3 100644 --- a/src/main/java/charbosses/powers/cardpowers/EnemySpotWeaknessPower.java +++ b/src/main/java/charbosses/powers/cardpowers/EnemySpotWeaknessPower.java @@ -33,8 +33,7 @@ public EnemySpotWeaknessPower(AbstractCreature owner, int strengthGain) { this.name = NAME; this.ID = "Spot Weakness"; this.owner = owner; - this.amount = 0; - this.theoreticalGain = strengthGain; + this.amount = strengthGain; this.updateDescription(); this.loadRegion("curiosity"); isActive = false; @@ -58,7 +57,7 @@ public void onUseCard(final AbstractCard card, final UseCardAction action) { if (card.type.equals(AbstractCard.CardType.ATTACK) && !isActive) { this.flash(); isActive = true; - amount = theoreticalGain; + //amount = theoreticalGain; updateDescription(); } } @@ -72,7 +71,11 @@ public void atStartOfTurn() { } public void updateDescription() { - this.description = DESCRIPTIONS[0] + this.theoreticalGain + DESCRIPTIONS[1] + this.amount + DESCRIPTIONS[2]; + if (isActive) { + this.description = DESCRIPTIONS[2] + this.amount + DESCRIPTIONS[1]; + } else { + this.description = DESCRIPTIONS[0] + this.amount + DESCRIPTIONS[1]; + } } static { diff --git a/src/main/java/charbosses/powers/general/EnemyPoisonPower.java b/src/main/java/charbosses/powers/general/EnemyPoisonPower.java index 0266ba7086..f827aa2f03 100644 --- a/src/main/java/charbosses/powers/general/EnemyPoisonPower.java +++ b/src/main/java/charbosses/powers/general/EnemyPoisonPower.java @@ -2,6 +2,8 @@ import charbosses.actions.unique.EnemyPoisonDamageAction; import charbosses.bosses.AbstractCharBoss; +import charbosses.bosses.Silent.CharBossSilent; +import charbosses.bosses.Silent.Simpler.ArchetypeAct1PoisonSimple; import charbosses.relics.CBR_SneckoSkull; import com.megacrit.cardcrawl.actions.AbstractGameAction.AttackEffect; import com.megacrit.cardcrawl.core.AbstractCreature; @@ -10,9 +12,11 @@ import com.megacrit.cardcrawl.localization.PowerStrings; import com.megacrit.cardcrawl.powers.AbstractPower; import com.megacrit.cardcrawl.rooms.AbstractRoom.RoomPhase; +import downfall.downfallMod; +import slimebound.SlimeboundMod; public class EnemyPoisonPower extends AbstractPower { - public static final String POWER_ID = "Poison"; + public static String POWER_ID = "Poison"; private static final PowerStrings powerStrings; public static final String NAME; public static final String[] DESCRIPTIONS; @@ -46,12 +50,18 @@ public void stackPower(int stackAmount) { } } + public void playApplyPowerSfx() { CardCrawlGame.sound.play("POWER_POISON", 0.05F); } public void updateDescription() { + if (downfallMod.useLegacyBosses) { this.description = DESCRIPTIONS[0] + this.amount + DESCRIPTIONS[1]; + } else { + + this.description = CardCrawlGame.languagePack.getPowerStrings("downfall:OnPlayerPoison").DESCRIPTIONS[0] + this.amount + CardCrawlGame.languagePack.getPowerStrings("downfall:OnPlayerPoison").DESCRIPTIONS[1]; + } } // Damage action moved to SilentPoisonPower so that it happens after Afterlife activation diff --git a/src/main/java/charbosses/powers/general/PoisonProtectionPower.java b/src/main/java/charbosses/powers/general/PoisonProtectionPower.java index e85076323f..05e6792935 100644 --- a/src/main/java/charbosses/powers/general/PoisonProtectionPower.java +++ b/src/main/java/charbosses/powers/general/PoisonProtectionPower.java @@ -3,30 +3,36 @@ import basemod.ReflectionHacks; import basemod.interfaces.CloneablePowerInterface; import charbosses.bosses.AbstractCharBoss; +import charbosses.bosses.Hermit.CharBossHermit; +import charbosses.bosses.Hermit.Simpler.ArchetypeAct2WheelOfFateSimple; +import charbosses.bosses.Silent.CharBossSilent; +import charbosses.bosses.Silent.Simpler.ArchetypeAct1PoisonSimple; import charbosses.cards.other.Antidote; import charbosses.powers.bossmechanicpowers.AbstractBossMechanicPower; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.TextureAtlas; -import com.megacrit.cardcrawl.actions.common.ExhaustAction; -import com.megacrit.cardcrawl.actions.common.MakeTempCardInHandAction; -import com.megacrit.cardcrawl.actions.common.RemoveSpecificPowerAction; +import com.megacrit.cardcrawl.actions.common.*; import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.DamageInfo; import com.megacrit.cardcrawl.cards.tempCards.Shiv; 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.PoisonPower; import com.megacrit.cardcrawl.vfx.AbstractGameEffect; import com.megacrit.cardcrawl.vfx.combat.GainPowerEffect; import downfall.downfallMod; import downfall.monsters.NeowBossFinal; import downfall.util.TextureLoader; +import slimebound.SlimeboundMod; import java.util.ArrayList; import java.util.Iterator; -@Deprecated +import static hermit.util.Wiz.atb; + public class PoisonProtectionPower extends AbstractPower implements CloneablePowerInterface { public static final String POWER_ID = downfallMod.makeID("PoisonResist"); @@ -41,9 +47,10 @@ public class PoisonProtectionPower extends AbstractPower implements CloneablePow private float timer; private boolean firstTurn = true; - public PoisonProtectionPower(AbstractCreature owner) { + public PoisonProtectionPower(AbstractCreature owner, int amount) { this.ID = POWER_ID; this.owner = owner; + this.amount = amount; this.type = PowerType.BUFF; this.isTurnBased = false; @@ -55,59 +62,27 @@ public PoisonProtectionPower(AbstractCreature owner) { this.updateDescription(); } - public void atStartOfCombat() { - - } + public void onAttack(DamageInfo info, int damageAmount, AbstractCreature target) { + if (damageAmount > 0 && target != this.owner && info.type == DamageInfo.DamageType.NORMAL) { + this.flash(); -// public void atStartOfTurn() { -// if (!AbstractDungeon.getMonsters().areMonstersBasicallyDead()) { -// boolean antidoteInHand = false; -// for (AbstractCard c : AbstractDungeon.player.hand.group) { -// if (c instanceof Antidote) { -// antidoteInHand = true; -// break; -// } -// } -// if (!antidoteInHand) { -// this.flash(); -// this.addToBot(new MakeTempCardInHandAction(new Antidote())); -// } -// } -// } + if(AbstractDungeon.player.hasPower(EnemyPoisonPower.POWER_ID) && AbstractDungeon.player.getPower(EnemyPoisonPower.POWER_ID).amount <= this.amount){ + atb(new RemoveSpecificPowerAction(owner, owner, EnemyPoisonPower.POWER_ID)); - @Override - public void update(int slot) { - super.update(slot); - if (firstTurn) { - if (this.timer <= 0F) { - ArrayList effect2 = ReflectionHacks.getPrivate(this, AbstractPower.class, "effect"); - effect2.add(new GainPowerEffect(this)); - this.timer = 1F; - if (AbstractDungeon.player != null) { - if (AbstractDungeon.player.hb.hovered) { - firstTurn = false; - } - } - } else { - this.timer -= Gdx.graphics.getDeltaTime(); + }else{ + addToBot(new ReducePowerAction(owner, owner, EnemyPoisonPower.POWER_ID, this.amount)); } } - } - - @Override - public void updateDescription() { - this.description = DESCRIPTIONS[0]; } - @Override - public void playApplyPowerSfx() { - //to prevent the 'last turn' warning from pinging audio all the time + public void updateDescription() { + this.description = DESCRIPTIONS[0] + amount + DESCRIPTIONS[1]; } @Override public AbstractPower makeCopy() { - return new PoisonProtectionPower(owner); + return new PoisonProtectionPower(owner, amount); } } \ 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 af45307d19..55c148b6b3 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_BrassTacks.java b/src/main/java/charbosses/relics/CBR_BrassTacks.java index a1c7f53122..4e3d115244 100644 --- a/src/main/java/charbosses/relics/CBR_BrassTacks.java +++ b/src/main/java/charbosses/relics/CBR_BrassTacks.java @@ -16,10 +16,9 @@ public CBR_BrassTacks() { } public String getUpdatedDescription() { - return this.DESCRIPTIONS[0]; + return this.DESCRIPTIONS[0] + 2 + this.DESCRIPTIONS[1]; } - public void atBattleStart() { this.flash(); this.addToTop(new ApplyPowerAction(this.owner, this.owner, new MetallicizePower(this.owner, 2))); diff --git a/src/main/java/charbosses/relics/CBR_CharredGlove.java b/src/main/java/charbosses/relics/CBR_CharredGlove.java index a96df886d0..fab76b54e5 100644 --- a/src/main/java/charbosses/relics/CBR_CharredGlove.java +++ b/src/main/java/charbosses/relics/CBR_CharredGlove.java @@ -17,9 +17,8 @@ public CBR_CharredGlove() { setTextureOutline(CharredGlove.IMG, CharredGlove.OUTLINE); } - @Override public String getUpdatedDescription() { - return this.DESCRIPTIONS[0]; + return this.DESCRIPTIONS[0] + 3 + this.DESCRIPTIONS[1]; } @Override @@ -32,13 +31,19 @@ public void update() { @Override public void update() { isDone = true; - AbstractCharBoss.boss.hand.applyPowers(); + if (AbstractCharBoss.boss != null) { + if (!AbstractCharBoss.boss.isDead && !AbstractCharBoss.boss.isDying) { + AbstractCharBoss.boss.hand.applyPowers(); + } + } } }); - for (AbstractCard q : AbstractCharBoss.boss.hand.group) { - if (q.type == AbstractCard.CardType.CURSE || q.color == AbstractCard.CardColor.CURSE) { - flash(); - addToTop(new ApplyPowerAction(AbstractCharBoss.boss, AbstractCharBoss.boss, new EnemyVigorPower(AbstractCharBoss.boss, 3))); + if (AbstractCharBoss.boss != null && !AbstractCharBoss.boss.isDead && !AbstractCharBoss.boss.isDying) { + for (AbstractCard q : AbstractCharBoss.boss.hand.group) { + if (q.type == AbstractCard.CardType.CURSE || q.color == AbstractCard.CardColor.CURSE) { + flash(); + addToTop(new ApplyPowerAction(AbstractCharBoss.boss, AbstractCharBoss.boss, new EnemyVigorPower(AbstractCharBoss.boss, 3))); + } } } } @@ -59,4 +64,4 @@ public void setTextureOutline(Texture t, Texture o) { public AbstractRelic makeCopy() { return new CBR_CharredGlove(); } -} +} \ No newline at end of file diff --git a/src/main/java/charbosses/relics/CBR_MummifiedHand.java b/src/main/java/charbosses/relics/CBR_MummifiedHand.java index 940a248efa..6258310537 100644 --- a/src/main/java/charbosses/relics/CBR_MummifiedHand.java +++ b/src/main/java/charbosses/relics/CBR_MummifiedHand.java @@ -28,7 +28,7 @@ public String getUpdatedDescription() { public void onUseCard(AbstractCard card, UseCardAction action) { if (card.type == AbstractCard.CardType.POWER) { this.flash(); - this.addToTop(new RelicAboveCreatureAction(AbstractDungeon.player, this)); + this.addToTop(new RelicAboveCreatureAction(this.owner, this)); //doesn't actually do anything, cost reduction in Silent 3 } diff --git a/src/main/java/charbosses/relics/CBR_SacredBark.java b/src/main/java/charbosses/relics/CBR_SacredBark.java new file mode 100644 index 0000000000..b6950be225 --- /dev/null +++ b/src/main/java/charbosses/relics/CBR_SacredBark.java @@ -0,0 +1,17 @@ +package charbosses.relics; + +import com.megacrit.cardcrawl.relics.AbstractRelic; +import com.megacrit.cardcrawl.relics.SacredBark; + +public class CBR_SacredBark extends AbstractCharbossRelic { + public static final String ID = "SacredBark"; + + public CBR_SacredBark() { + super(new SacredBark()); + } + + @Override + public AbstractRelic makeCopy() { + return new CBR_SacredBark(); + } +} diff --git a/src/main/java/charbosses/stances/EnWrathStance.java b/src/main/java/charbosses/stances/EnWrathStance.java index e9cf48e0c6..3c12ea0a99 100644 --- a/src/main/java/charbosses/stances/EnWrathStance.java +++ b/src/main/java/charbosses/stances/EnWrathStance.java @@ -29,6 +29,10 @@ public float atDamageGive(float damage, DamageType type) { return type == DamageType.NORMAL ? damage * 1.5F : damage; } + public float atDamageReceive(float damage, DamageType type) { + return type == DamageType.NORMAL ? damage * 1.5F : damage; + } + public void updateAnimation() { if (AbstractCharBoss.boss != null) { if (!Settings.DISABLE_EFFECTS) { diff --git a/src/main/java/collector/CollectorCollection.java b/src/main/java/collector/CollectorCollection.java index 05efc0336e..348054e5e9 100644 --- a/src/main/java/collector/CollectorCollection.java +++ b/src/main/java/collector/CollectorCollection.java @@ -149,6 +149,8 @@ public class CollectorCollection { collectionPool.put(Champ.ID, LastStand.ID); collectionPool.put(Donu.ID, ShapePower.ID); collectionPool.put(Deca.ID, ShapePower.ID); + + collectionPool.put(DoomedDagger.ID, DaggerCard.ID); } public static AbstractCard getCollectedCard(AbstractMonster m) { diff --git a/src/main/java/collector/CollectorMod.java b/src/main/java/collector/CollectorMod.java index 05729c506a..caddb19a63 100644 --- a/src/main/java/collector/CollectorMod.java +++ b/src/main/java/collector/CollectorMod.java @@ -159,7 +159,7 @@ public void receiveEditRelics() { BaseMod.addRelicToCustomPool(new TheContract(), CollectorChar.Enums.COLLECTOR); //Shared relics BaseMod.addRelic(new AutoCurser(), RelicType.SHARED); - BaseMod.addRelic(new Incense(), RelicType.SHARED); +// BaseMod.addRelic(new Incense(), RelicType.SHARED); BaseMod.addRelic(new Bagpipes(), RelicType.SHARED); BaseMod.addRelic(new FuelCanister(), RelicType.SHARED); BaseMod.addRelic(new ForbiddenFruit(), RelicType.SHARED); @@ -168,18 +168,7 @@ public void receiveEditRelics() { 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")) { - WidePotionsMod.whitelistSimplePotion(MiniCursePotion.POTION_ID); - WidePotionsMod.whitelistSimplePotion(ReservePotion.POTION_ID); - WidePotionsMod.whitelistSimplePotion(DebuffDoublePotion.POTION_ID); - WidePotionsMod.whitelistSimplePotion(TempHPPotion.POTION_ID); - } + } @Override @@ -198,13 +187,13 @@ public void receiveSetUnlocks() { Omen.ID, DoubleTrouble.ID, - Suffering.ID, + BottledCollectible.ID, JadeRing.ID, - MiniCurse.ID, + SoullitLamp.ID, - StashAway.ID, + Incense.ID, ForbiddenFruit.ID, - FingerOfDeath.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 ba4b067606..551915d0fc 100644 --- a/src/main/java/collector/actions/DrawCardFromCollectionAction.java +++ b/src/main/java/collector/actions/DrawCardFromCollectionAction.java @@ -4,12 +4,16 @@ 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; @@ -26,6 +30,14 @@ public void update() { 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/cards/Heatwave.java b/src/main/java/collector/cards/Heatwave.java index d3b833d574..f055658e59 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/MysteryWeaving.java b/src/main/java/collector/cards/MysteryWeaving.java index d331bd3428..d7eb4e2d0d 100644 --- a/src/main/java/collector/cards/MysteryWeaving.java +++ b/src/main/java/collector/cards/MysteryWeaving.java @@ -14,7 +14,7 @@ public class MysteryWeaving extends AbstractCollectorCard { public MysteryWeaving() { super(ID, 0, CardType.SKILL, CardRarity.COMMON, CardTarget.SELF); - baseBlock = 8; + baseBlock = 9; } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/collector/cards/ReceiveTribute.java b/src/main/java/collector/cards/ReceiveTribute.java index cef9dfb9fc..52cfffd24f 100644 --- a/src/main/java/collector/cards/ReceiveTribute.java +++ b/src/main/java/collector/cards/ReceiveTribute.java @@ -1,7 +1,7 @@ package collector.cards; import automaton.AutomatonChar; -import basemod.cardmods.RetainMod; +import awakenedOne.AwakenedOneChar; import basemod.helpers.CardModifierManager; import champ.ChampChar; import collector.CollectorChar; @@ -12,6 +12,7 @@ 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; @@ -54,6 +55,8 @@ public void use(AbstractPlayer p, AbstractMonster m) { 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(); @@ -66,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/ScorchingRay.java b/src/main/java/collector/cards/ScorchingRay.java index b58587209e..542b11531b 100644 --- a/src/main/java/collector/cards/ScorchingRay.java +++ b/src/main/java/collector/cards/ScorchingRay.java @@ -35,7 +35,7 @@ public void use(AbstractPlayer p, AbstractMonster m) { //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)); + dmg(q, AbstractGameAction.AttackEffect.FIRE); } return true; })); diff --git a/src/main/java/collector/cards/StashAway.java b/src/main/java/collector/cards/StashAway.java index 369f4e19a4..184724628a 100644 --- a/src/main/java/collector/cards/StashAway.java +++ b/src/main/java/collector/cards/StashAway.java @@ -15,7 +15,7 @@ public class StashAway extends AbstractCollectorCard { public StashAway() { super(ID, -1, CardType.SKILL, CardRarity.RARE, CardTarget.SELF); - baseBlock = 3; + baseBlock = 4; exhaust = true; } diff --git a/src/main/java/collector/cards/WhirlingFlame.java b/src/main/java/collector/cards/WhirlingFlame.java index 740203a591..6d301e406d 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 = 13; + baseDamage = 15; isMultiDamage = true; } diff --git a/src/main/java/collector/cards/collectibles/RomeoCard.java b/src/main/java/collector/cards/collectibles/RomeoCard.java index 6255608c5e..953739a505 100644 --- a/src/main/java/collector/cards/collectibles/RomeoCard.java +++ b/src/main/java/collector/cards/collectibles/RomeoCard.java @@ -6,6 +6,7 @@ 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; @@ -21,7 +22,7 @@ public RomeoCard() { 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/patches/CollectorBottleField.java b/src/main/java/collector/patches/CollectorBottleField.java index 8c8fe6d098..4e1fe5bb3e 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/potions/TempHPPotion.java b/src/main/java/collector/potions/TempHPPotion.java index 4c99a17935..76c621da32 100644 --- a/src/main/java/collector/potions/TempHPPotion.java +++ b/src/main/java/collector/potions/TempHPPotion.java @@ -3,8 +3,11 @@ 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; @@ -39,10 +42,13 @@ public void initializeData() { } this.tips.clear(); this.tips.add(new PowerTip(this.name, this.description)); - this.tips.add(new PowerTip(TipHelper.capitalize(BaseMod.getKeywordTitle("expansioncontent:temp_hp")), BaseMod.getKeywordDescription("expansioncontent:temp_hp"))); + if (Settings.language == Settings.GameLanguage.ENG) { + this.tips.add(new PowerTip(TipHelper.capitalize(BaseMod.getKeywordTitle("expansioncontent:temp_hp")), BaseMod.getKeywordDescription("expansioncontent:temp_hp"))); + } } 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"); @@ -52,13 +58,6 @@ public void use(AbstractCreature target) { CardCrawlGame.sound.play("HEAL_3"); } - float X_JITTER = 120.0F * Settings.scale; - float Y_JITTER = 120.0F * Settings.scale; - float OFFSET_Y = -50.0F * Settings.scale; - - for(int i = 0; i < 18; ++i) { - AbstractDungeon.effectsQueue.add(new HealVerticalLineEffect((AbstractDungeon.player.hb.cX + MathUtils.random(-X_JITTER * 1.5F, X_JITTER * 1.5F)), target.hb.cY + OFFSET_Y + MathUtils.random(-Y_JITTER, Y_JITTER))); - } atb(new AddTemporaryHPAction(AbstractDungeon.player, AbstractDungeon.player, potency)); } diff --git a/src/main/java/collector/powers/NextTurnVigorPower.java b/src/main/java/collector/powers/NextTurnVigorPower.java index 414cda0da1..a84e788b8f 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/collectioncards/GremlinNobCardPower.java b/src/main/java/collector/powers/collectioncards/GremlinNobCardPower.java index 8537eea28a..e1972d0e05 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 806bc53157..7310aadfb3 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 16ee35d9a4..ee4905c970 100644 --- a/src/main/java/collector/relics/BagOfTricks.java +++ b/src/main/java/collector/relics/BagOfTricks.java @@ -28,9 +28,6 @@ public void atBattleStart() { flash(); for (int i = 0; i < EXTRA_CARDS; i++) { atb(new DrawCardFromCollectionAction()); - if (!CollectorCollection.combatCollection.isEmpty() || AbstractDungeon.player.hasRelic(HolidayCoal.ID)) { - att(new DrawCardAction(1)); - } } } diff --git a/src/main/java/collector/relics/BottledCollectible.java b/src/main/java/collector/relics/BottledCollectible.java index 292b1d49f5..05f14a9a38 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/EmeraldTorch.java b/src/main/java/collector/relics/EmeraldTorch.java index b5570d692d..436d670f89 100644 --- a/src/main/java/collector/relics/EmeraldTorch.java +++ b/src/main/java/collector/relics/EmeraldTorch.java @@ -5,11 +5,9 @@ import collector.CollectorMod; import collector.actions.GainReservesAction; import collector.cards.Ember; -import com.megacrit.cardcrawl.cards.AbstractCard; import downfall.util.TextureLoader; import static collector.util.Wiz.atb; -import static collector.util.Wiz.makeInHand; public class EmeraldTorch extends CustomRelic { public static final String ID = CollectorMod.makeID("EmeraldTorch"); @@ -21,34 +19,12 @@ public EmeraldTorch() { } - @Override - public void onVictory() { - grayscale=false; - } - - @Override public void atBattleStart() { - System.out.println("DEBUG: This is a debug message."); - grayscale=false; flash(); - makeInHand(new Ember(), 1); - // atb(new GainReservesAction(1)); + atb(new GainReservesAction(1)); } - - @Override - public void onExhaust(AbstractCard card) { - if (!grayscale) { - if (card.cardID.equals(Ember.ID)) { - flash(); - atb(new GainReservesAction(1)); - grayscale=true; - } - } - } - - @Override public String getUpdatedDescription() { return DESCRIPTIONS[0]; diff --git a/src/main/java/collector/relics/ForbiddenFruit.java b/src/main/java/collector/relics/ForbiddenFruit.java index 881bdf9225..38b33787eb 100644 --- a/src/main/java/collector/relics/ForbiddenFruit.java +++ b/src/main/java/collector/relics/ForbiddenFruit.java @@ -3,102 +3,46 @@ import basemod.abstracts.CustomRelic; import basemod.helpers.CardPowerTip; import collector.CollectorMod; -import com.megacrit.cardcrawl.cards.curses.Necronomicurse; -import downfall.cards.curses.Sapped; -import com.megacrit.cardcrawl.cards.AbstractCard; -import com.megacrit.cardcrawl.cards.CardGroup; +import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +import com.megacrit.cardcrawl.cards.curses.Parasite; +import com.megacrit.cardcrawl.powers.DexterityPower; +import com.megacrit.cardcrawl.unlock.UnlockTracker; import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; -import com.megacrit.cardcrawl.relics.AbstractRelic; -import com.megacrit.cardcrawl.rooms.AbstractRoom; import com.megacrit.cardcrawl.vfx.cardManip.ShowCardAndObtainEffect; import downfall.util.TextureLoader; -import expansioncontent.cards.AwakenDeath; - -import java.util.stream.Collectors; - -import static downfall.patches.EvilModeCharacterSelect.evilMode; +import utilityClasses.DFL; 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"; private static final String OUTLINE_IMG_PATH = ForbiddenFruit.class.getSimpleName() + ".png"; - private int stage = 2; - private boolean selected = true; + public static final int MAX_HP = 10; + public static final int DEX = 1; public ForbiddenFruit() { - super(ID, TextureLoader.getTexture(CollectorMod.makeRelicPath(IMG_PATH)), TextureLoader.getTexture(CollectorMod.makeRelicOutlinePath(OUTLINE_IMG_PATH)), RelicTier.BOSS, LandingSound.MAGICAL); - tips.add(new CardPowerTip( new Sapped() ) ); + super(ID, TextureLoader.getTexture(CollectorMod.makeRelicPath(IMG_PATH)), TextureLoader.getTexture(CollectorMod.makeRelicOutlinePath(OUTLINE_IMG_PATH)), RelicTier.SHOP, LandingSound.MAGICAL); + tips.add(new CardPowerTip(new Parasite())); } public void onEquip() { - stage = 0; - selected = false; - - if (AbstractDungeon.isScreenUp) { - AbstractDungeon.dynamicBanner.hide(); - AbstractDungeon.overlayMenu.cancelButton.hide(); - AbstractDungeon.previousScreen = AbstractDungeon.screen; - } - AbstractDungeon.getCurrRoom().phase = AbstractRoom.RoomPhase.INCOMPLETE; - CardGroup group = new CardGroup(CardGroup.CardGroupType.UNSPECIFIED); - group.group.addAll(AbstractDungeon.srcRareCardPool.group.stream().map(AbstractCard::makeCopy).collect(Collectors.toList())); - for(AbstractCard c: group.group){ - for (AbstractRelic r : AbstractDungeon.player.relics) { - r.onPreviewObtainCard(c); - } - } - AbstractDungeon.gridSelectScreen.open(group, 1, DESCRIPTIONS[1], false, false, false, false); + AbstractDungeon.effectList.add(new ShowCardAndObtainEffect(new Parasite(), Settings.WIDTH / 2.0F, Settings.HEIGHT / 2.0F)); + UnlockTracker.markCardAsSeen("Parasite"); + DFL.pl().increaseMaxHp(MAX_HP, true); } @Override - public void update() { - super.update(); - - if (!selected && !AbstractDungeon.gridSelectScreen.selectedCards.isEmpty()) { - selected = true; - AbstractCard card = AbstractDungeon.gridSelectScreen.selectedCards.get(0); - AbstractDungeon.effectList.add(new ShowCardAndObtainEffect(card, (float) Settings.WIDTH / 2.0F, (float)Settings.HEIGHT / 2.0F)); - AbstractDungeon.gridSelectScreen.selectedCards.clear(); - - if (stage == 2) { - 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) { - selected = false; - CardGroup group = new CardGroup(CardGroup.CardGroupType.UNSPECIFIED); - for(AbstractCard c: group.group){ - for (AbstractRelic r : AbstractDungeon.player.relics) { - r.onPreviewObtainCard(c); - } - } - group.group.addAll(AbstractDungeon.srcUncommonCardPool.group.stream().map(AbstractCard::makeCopy).collect(Collectors.toList())); - AbstractDungeon.gridSelectScreen.open(group, 1, DESCRIPTIONS[2], false, false, false, false); - stage++; - } - else if (stage == 1) { - selected = false; - CardGroup group = new CardGroup(CardGroup.CardGroupType.UNSPECIFIED); - for(AbstractCard c: group.group){ - for (AbstractRelic r : AbstractDungeon.player.relics) { - r.onPreviewObtainCard(c); - } - } - group.group.addAll(AbstractDungeon.srcCommonCardPool.group.stream().map(AbstractCard::makeCopy).collect(Collectors.toList())); - AbstractDungeon.gridSelectScreen.open(group, 1, DESCRIPTIONS[3], false, false, false, false); - stage++; - } - } + public void atBattleStart(){ + addToBot(new ApplyPowerAction(DFL.pl(), DFL.pl(), new DexterityPower(DFL.pl(), DEX), DEX)); } public boolean canSpawn() { - return ((AbstractDungeon.floorNum > 1)); // you cannot boss swap into forbidden fruit + return ((AbstractDungeon.floorNum < 69));// :? } @Override public String getUpdatedDescription() { - return DESCRIPTIONS[0]; + return DESCRIPTIONS[0] + MAX_HP + DESCRIPTIONS[1] + DEX + DESCRIPTIONS[2]; } } diff --git a/src/main/java/collector/relics/FuelCanister.java b/src/main/java/collector/relics/FuelCanister.java index 1067ceb61f..c593c9f16c 100644 --- a/src/main/java/collector/relics/FuelCanister.java +++ b/src/main/java/collector/relics/FuelCanister.java @@ -29,7 +29,7 @@ public void onPlayerEndTurn() { ArrayList toRetain = new ArrayList<>(); for (AbstractCard q : AbstractDungeon.player.hand.group) { //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.isEthereal) && !(q.selfRetain)) { //if ((q.costForTurn < max) && !(q.costForTurn < -1) && !(q.selfRetain)) { toRetain.clear(); toRetain.add(q); diff --git a/src/main/java/collector/relics/Incense.java b/src/main/java/collector/relics/Incense.java index 20dc8e4d75..fc8954df9b 100644 --- a/src/main/java/collector/relics/Incense.java +++ b/src/main/java/collector/relics/Incense.java @@ -18,7 +18,7 @@ public class Incense extends CustomRelic implements OnReceivePowerRelic { private static final String OUTLINE_IMG_PATH = Incense.class.getSimpleName() + ".png"; public Incense() { - 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.UNCOMMON, LandingSound.MAGICAL); } @Override @@ -29,7 +29,7 @@ public String getUpdatedDescription() { @Override public boolean onReceivePower(AbstractPower beingApplied, AbstractCreature source) { if (beingApplied.ID.equals(WeakPower.POWER_ID) || beingApplied.ID.equals(VulnerablePower.POWER_ID) || beingApplied.ID.equals(FrailPower.POWER_ID)) { - if (AbstractDungeon.player.hasPower(WeakPower.POWER_ID) || AbstractDungeon.player.hasPower(VulnerablePower.POWER_ID) || AbstractDungeon.player.hasPower(FrailPower.POWER_ID)) { + if (AbstractDungeon.player.hasPower(beingApplied.ID)) { flash(); addToTop(new RelicAboveCreatureAction(AbstractDungeon.player, this)); return false; diff --git a/src/main/java/collector/relics/PrismaticTorch.java b/src/main/java/collector/relics/PrismaticTorch.java index 256bf04599..5fa57bf322 100644 --- a/src/main/java/collector/relics/PrismaticTorch.java +++ b/src/main/java/collector/relics/PrismaticTorch.java @@ -18,7 +18,7 @@ public class PrismaticTorch extends CustomRelic { private static final String IMG_PATH = PrismaticTorch.class.getSimpleName() + ".png"; private static final String OUTLINE_IMG_PATH = PrismaticTorch.class.getSimpleName() + ".png"; - private static final int EMBER_COUNT = 2; + private static final int EMBER_COUNT = 1; public PrismaticTorch() { super(ID, TextureLoader.getTexture(CollectorMod.makeRelicPath(IMG_PATH)), TextureLoader.getTexture(CollectorMod.makeRelicOutlinePath(OUTLINE_IMG_PATH)), RelicTier.BOSS, LandingSound.MAGICAL); @@ -29,7 +29,7 @@ public PrismaticTorch() { public void atBattleStart() { flash(); makeInHand(new Ember(), EMBER_COUNT); - // atb(new GainReservesAction(1)); + atb(new GainReservesAction(1)); } @Override @@ -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 e200eba84d..6123107f2e 100644 --- a/src/main/java/collector/relics/RoughDiamond.java +++ b/src/main/java/collector/relics/RoughDiamond.java @@ -24,7 +24,7 @@ public class RoughDiamond extends CustomRelic { public RoughDiamond() { - 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); } public void onEquip() { diff --git a/src/main/java/collector/relics/TheContract.java b/src/main/java/collector/relics/TheContract.java index 5b33088e94..aaef855c39 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/downfall/actions/MessageCaller.java b/src/main/java/downfall/actions/MessageCaller.java index 8cd2220e2c..75e8707b13 100644 --- a/src/main/java/downfall/actions/MessageCaller.java +++ b/src/main/java/downfall/actions/MessageCaller.java @@ -59,6 +59,9 @@ public void update() { 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/actions/NeowGainMinionPowersAction.java b/src/main/java/downfall/actions/NeowGainMinionPowersAction.java index f698060c66..d057514ea0 100644 --- a/src/main/java/downfall/actions/NeowGainMinionPowersAction.java +++ b/src/main/java/downfall/actions/NeowGainMinionPowersAction.java @@ -31,14 +31,14 @@ public boolean checkBossFaced(String id){ public void update() { this.isDone = true; - SlimeboundMod.logger.info(downfallMod.Act1BossFaced); - SlimeboundMod.logger.info(downfallMod.Act2BossFaced); - SlimeboundMod.logger.info(downfallMod.Act3BossFaced); - SlimeboundMod.logger.info("downfall:Ironclad " + checkBossFaced("downfall:Ironclad")); - SlimeboundMod.logger.info("downfall:Silent "+ checkBossFaced("downfall:Silent")); - SlimeboundMod.logger.info("downfall:Defect "+ checkBossFaced("downfall:Defect")); - SlimeboundMod.logger.info("downfall:Watcher "+ checkBossFaced("downfall:Watcher")); - SlimeboundMod.logger.info("downfall:Hermit "+ checkBossFaced("downfall:Hermit")); + // SlimeboundMod.logger.info(downfallMod.Act1BossFaced); + // SlimeboundMod.logger.info(downfallMod.Act2BossFaced); + // SlimeboundMod.logger.info(downfallMod.Act3BossFaced); + // SlimeboundMod.logger.info("downfall:Ironclad " + checkBossFaced("downfall:Ironclad")); + // SlimeboundMod.logger.info("downfall:Silent "+ checkBossFaced("downfall:Silent")); + // SlimeboundMod.logger.info("downfall:Defect "+ checkBossFaced("downfall:Defect")); + // SlimeboundMod.logger.info("downfall:Watcher "+ checkBossFaced("downfall:Watcher")); + // SlimeboundMod.logger.info("downfall:Hermit "+ checkBossFaced("downfall:Hermit")); AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this.owner, this.owner, new TrueNeowPower(owner, checkBossFaced("downfall:Ironclad"), diff --git a/src/main/java/downfall/cards/BloodySacrifice.java b/src/main/java/downfall/cards/BloodySacrifice.java index db5e59aee4..275157818b 100644 --- a/src/main/java/downfall/cards/BloodySacrifice.java +++ b/src/main/java/downfall/cards/BloodySacrifice.java @@ -1,5 +1,7 @@ package downfall.cards; +import basemod.patches.com.megacrit.cardcrawl.dungeons.AbstractDungeon.NoPools; +import basemod.patches.com.megacrit.cardcrawl.screens.compendium.CardLibraryScreen.NoCompendium; import com.badlogic.gdx.math.MathUtils; import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; import com.megacrit.cardcrawl.actions.common.LoseHPAction; @@ -16,6 +18,10 @@ import static expansioncontent.cards.AbstractExpansionCard.makeID; +@Deprecated +@NoCompendium +@NoPools + public class BloodySacrifice extends AbstractDownfallCard { diff --git a/src/main/java/downfall/cards/MajorBeam.java b/src/main/java/downfall/cards/MajorBeam.java index fbe2e397b3..3be5c63a65 100644 --- a/src/main/java/downfall/cards/MajorBeam.java +++ b/src/main/java/downfall/cards/MajorBeam.java @@ -17,6 +17,7 @@ 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; @@ -25,7 +26,7 @@ import static expansioncontent.cards.AbstractExpansionCard.makeID; import static expansioncontent.expansionContentMod.loadJokeCardImage; -public class MajorBeam extends AbstractDownfallCard { +public class MajorBeam extends AbstractExpansionCard { private static final int DAMAGE = 5; public static final String ID = makeID("MajorBeam"); @@ -33,11 +34,11 @@ public class MajorBeam extends AbstractDownfallCard { private static final CardStrings cardStrings; public MajorBeam() { - super(ID, cardStrings.NAME, IMG_PATH, 0, cardStrings.DESCRIPTION, CardType.ATTACK, CardColor.COLORLESS, CardRarity.SPECIAL, CardTarget.ENEMY); + super(ID, 0, CardType.ATTACK, CardRarity.SPECIAL, CardTarget.ENEMY, CardColor.COLORLESS); baseDamage = DAMAGE; + loadJokeCardImage(this,"MajorBeam.png"); baseMagicNumber = magicNumber = 1; //exhaust = true; - loadJokeCardImage(this, "MajorBeam.png"); } public void use(AbstractPlayer p, AbstractMonster m) { diff --git a/src/main/java/downfall/cards/curses/Aged.java b/src/main/java/downfall/cards/curses/Aged.java index 456a810751..2254becae6 100644 --- a/src/main/java/downfall/cards/curses/Aged.java +++ b/src/main/java/downfall/cards/curses/Aged.java @@ -2,6 +2,7 @@ import basemod.abstracts.CustomCard; +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.status.VoidCard; @@ -54,7 +55,7 @@ public void triggerOnEndOfTurnForPlayingCard() { super.triggerOnEndOfTurnForPlayingCard(); this.flash(); this.superFlash(); - AbstractDungeon.actionManager.addToBottom(new MakeTempCardInDrawPileAction(new VoidCard(),1, false, false, false)); + AbstractDungeon.actionManager.addToBottom(new MakeTempCardInDiscardAction(new VoidCard(),1)); } diff --git a/src/main/java/downfall/cards/curses/Bewildered.java b/src/main/java/downfall/cards/curses/Bewildered.java index 682c50d664..89108ecaa6 100644 --- a/src/main/java/downfall/cards/curses/Bewildered.java +++ b/src/main/java/downfall/cards/curses/Bewildered.java @@ -15,9 +15,12 @@ import com.megacrit.cardcrawl.monsters.AbstractMonster; import downfall.downfallMod; import expansioncontent.cardmods.PropertiesMod; +import hermit.util.Wiz; import sneckomod.SneckoMod; +import sneckomod.actions.MuddleAction; import sneckomod.actions.MuddleHandAction; import sneckomod.cards.AbstractSneckoCard; +import sneckomod.powers.MuddleDrawnCardsPower; public class Bewildered extends CustomCard { @@ -29,7 +32,7 @@ public class Bewildered extends CustomCard { private static final CardRarity RARITY = CardRarity.CURSE; private static final CardTarget TARGET = CardTarget.SELF; private static final CardStrings cardStrings; - private static final int COST = -2; + private static final int COST = 4; public static String UPGRADED_DESCRIPTION; static { @@ -45,7 +48,7 @@ public Bewildered() { super(ID, NAME, IMG_PATH, COST, DESCRIPTION, TYPE, CardColor.CURSE, RARITY, TARGET); // this.magicNumber = this.baseMagicNumber = 1; this.exhaust = true; - this.isEthereal = true; + // this.isEthereal = true; tags.add(downfallMod.DOWNFALL_CURSE); } @@ -53,10 +56,11 @@ public void use(AbstractPlayer p, AbstractMonster m) { } + @Override public void triggerWhenDrawn() { - AbstractDungeon.actionManager.addToBottom(new MuddleHandAction()); this.flash(); + Wiz.atb(new MuddleAction(this)); } public AbstractCard makeCopy() { 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 0000000000..f6dae7bedd --- /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 45d19685af..c33187b52e 100644 --- a/src/main/java/downfall/cards/curses/Haunted.java +++ b/src/main/java/downfall/cards/curses/Haunted.java @@ -1,6 +1,7 @@ package downfall.cards.curses; +import automaton.cards.goodstatus.IntoTheVoid; import basemod.abstracts.CustomCard; import basemod.helpers.CardModifierManager; import collector.cards.OnOtherCardExhaustInHand; @@ -8,7 +9,9 @@ import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.common.DamageAction; import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.CardQueueItem; import com.megacrit.cardcrawl.cards.DamageInfo; +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; @@ -19,7 +22,7 @@ import sneckomod.cards.TyphoonFang; -public class Haunted extends CustomCard implements OnOtherCardExhaustInHand { +public class Haunted extends CustomCard { public static final String ID = downfallMod.makeID("Haunted"); public static final String NAME; public static final String DESCRIPTION; @@ -28,7 +31,7 @@ public class Haunted extends CustomCard implements OnOtherCardExhaustInHand { private static final CardRarity RARITY = CardRarity.CURSE; private static final CardTarget TARGET = CardTarget.NONE; private static final CardStrings cardStrings; - private static final int COST = -2; + private static final int COST = 0; private static final int BLOCK = 5; private static final int UPGRADE_BONUS = 3; public static String UPGRADED_DESCRIPTION; @@ -43,7 +46,7 @@ public class Haunted extends CustomCard implements OnOtherCardExhaustInHand { public Haunted() { super(ID, NAME, IMG_PATH, COST, DESCRIPTION, TYPE, CardColor.CURSE, RARITY, TARGET); - this.magicNumber = this.baseMagicNumber = 1; + this.magicNumber = this.baseMagicNumber = 6; this.isEthereal = true; tags.add(downfallMod.DOWNFALL_CURSE); @@ -51,38 +54,41 @@ public Haunted() { } 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()); -// } -// } -// } -// }); - } +// public void triggerOnEndOfTurnForPlayingCard() { +// this.dontTriggerOnUseCard = true; +// AbstractDungeon.actionManager.cardQueue.add(new CardQueueItem(this, true)); +// } - @Override - public void atTurnStart() { - } +// public void triggerOnExhaust() { +// this.addToBot(new DamageAction(AbstractDungeon.player, new DamageInfo(AbstractDungeon.player, this.magicNumber, DamageInfo.DamageType.THORNS), AbstractGameAction.AttackEffect.SMASH)); +// +// } +// @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, 2, DamageInfo.DamageType.THORNS), AbstractGameAction.AttackEffect.FIRE)); + if (!AbstractDungeon.actionManager.turnHasEnded) { + 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 void triggerOnEndOfTurnForPlayingCard() { + flash(Color.PURPLE.cpy()); + this.addToBot(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/Icky.java b/src/main/java/downfall/cards/curses/Icky.java index 67f0f07793..0b2e63f945 100644 --- a/src/main/java/downfall/cards/curses/Icky.java +++ b/src/main/java/downfall/cards/curses/Icky.java @@ -1,7 +1,9 @@ package downfall.cards.curses; +import basemod.ReflectionHacks; import basemod.abstracts.CustomCard; +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.status.Slimed; @@ -10,6 +12,7 @@ import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.localization.CardStrings; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.DrawReductionPower; import downfall.downfallMod; import slimebound.SlimeboundMod; import slimebound.cards.AbstractSlimeboundCard; @@ -24,7 +27,7 @@ public class Icky extends CustomCard { private static final CardRarity RARITY = CardRarity.CURSE; private static final CardTarget TARGET = CardTarget.NONE; private static final CardStrings cardStrings; - private static final int COST = 1; + private static final int COST = 0; private static final int BLOCK = 5; private static final int UPGRADE_BONUS = 3; public static String UPGRADED_DESCRIPTION; @@ -40,13 +43,17 @@ public Icky() { super(ID, NAME, IMG_PATH, COST, DESCRIPTION, TYPE, CardColor.CURSE, RARITY, TARGET); this.magicNumber = this.baseMagicNumber = 1; - cardsToPreview = new Slimed(); + // cardsToPreview = new Slimed(); this.exhaust = true; + // selfRetain = true; tags.add(downfallMod.DOWNFALL_CURSE); } public void use(AbstractPlayer p, AbstractMonster m) { - AbstractDungeon.actionManager.addToBottom(new MakeTempCardInHandAction(new Slimed(), 1)); + DrawReductionPower pow = new DrawReductionPower(p,1); + ReflectionHacks.setPrivate(pow,DrawReductionPower.class,"justApplied",false); + + this.addToBot(new ApplyPowerAction(p, p, pow, 1)); } public AbstractCard makeCopy() { diff --git a/src/main/java/downfall/cards/curses/Malfunctioning.java b/src/main/java/downfall/cards/curses/Malfunctioning.java index 729077a930..18860932b7 100644 --- a/src/main/java/downfall/cards/curses/Malfunctioning.java +++ b/src/main/java/downfall/cards/curses/Malfunctioning.java @@ -6,6 +6,8 @@ import com.megacrit.cardcrawl.actions.common.MakeTempCardInDiscardAction; import com.megacrit.cardcrawl.actions.utility.WaitAction; import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.status.VoidCard; +import com.megacrit.cardcrawl.cards.status.Wound; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.core.Settings; @@ -25,7 +27,7 @@ public class Malfunctioning extends CustomCard { private static final CardRarity RARITY = CardRarity.CURSE; private static final CardTarget TARGET = CardTarget.NONE; private static final CardStrings cardStrings; - private static final int COST = 1; + private static final int COST = 2; public static String UPGRADED_DESCRIPTION; static { @@ -40,7 +42,8 @@ public Malfunctioning() { super(ID, NAME, IMG_PATH, COST, DESCRIPTION, TYPE, CardColor.CURSE, RARITY, TARGET); this.exhaust = true; tags.add(downfallMod.DOWNFALL_CURSE); - + this.cardsToPreview = new Wound(); + //this.isEthereal = true; } public void use(AbstractPlayer p, AbstractMonster m) { @@ -52,13 +55,7 @@ public void triggerOnEndOfTurnForPlayingCard() { super.triggerOnEndOfTurnForPlayingCard(); this.flash(); this.superFlash(); - for (AbstractCard c:AbstractDungeon.player.hand.group){ - addToBot(new ExhaustSpecificCardAction(c, AbstractDungeon.player.hand, true)); - addToBot(new MakeTempCardInDiscardAction(OffclassHelper.getARandomStatus(), 1)); - } - addToBot(new WaitAction(0.1F)); - addToBot(new WaitAction(0.1F)); - addToBot(new WaitAction(0.1F)); + AbstractDungeon.actionManager.addToBottom(new MakeTempCardInDiscardAction(new Wound(),1)); } public AbstractCard makeCopy() { diff --git a/src/main/java/downfall/cards/curses/Sapped.java b/src/main/java/downfall/cards/curses/Sapped.java index 09895eea62..00ab383a56 100644 --- a/src/main/java/downfall/cards/curses/Sapped.java +++ b/src/main/java/downfall/cards/curses/Sapped.java @@ -1,5 +1,8 @@ +/* package downfall.cards.curses; +import basemod.patches.com.megacrit.cardcrawl.dungeons.AbstractDungeon.NoPools; +import basemod.patches.com.megacrit.cardcrawl.screens.compendium.CardLibraryScreen.NoCompendium; import collector.cards.AbstractCollectorCard; import com.evacipated.cardcrawl.mod.stslib.fields.cards.AbstractCard.SoulboundField; import com.megacrit.cardcrawl.actions.unique.LoseEnergyAction; @@ -11,7 +14,8 @@ import expansioncontent.expansionContentMod; import static collector.CollectorMod.makeID; - +@NoCompendium +@NoPools public class Sapped extends AbstractCollectorCard { public final static String ID = makeID(Sapped.class.getSimpleName()); // intellij stuff skill, none, special, , , , , 1, 1 @@ -21,7 +25,6 @@ public Sapped() { isPyre(); exhaust = true; SoulboundField.soulbound.set(this, true); - tags.add(downfallMod.DOWNFALL_CURSE); } public void use(AbstractPlayer p, AbstractMonster m) { @@ -40,3 +43,5 @@ public void upp() { } } + + */ diff --git a/src/main/java/downfall/downfallMod.java b/src/main/java/downfall/downfallMod.java index 5284835a37..526ea4a58f 100644 --- a/src/main/java/downfall/downfallMod.java +++ b/src/main/java/downfall/downfallMod.java @@ -13,9 +13,20 @@ import automaton.cardmods.EncodeMod; import automaton.cards.Defend; import automaton.cards.Strike; +import automaton.potions.BuildAFunctionPotion; import automaton.potions.BurnAndBuffPotion; +import automaton.potions.CleanCodePotion; +import automaton.potions.FreeFunctionsPotion; import automaton.relics.*; import automaton.util.*; +import awakenedOne.AwakenedOneChar; +import awakenedOne.AwakenedOneMod; +import awakenedOne.potions.CultistsDelight; +import awakenedOne.potions.PhaseSkip; +import awakenedOne.potions.SacramentalWine; +import awakenedOne.potions.SneckoPowersPotion; +import awakenedOne.relics.AwakenedUrn; +import awakenedOne.relics.NerfedMummifiedHand; import basemod.BaseMod; import basemod.ModLabeledToggleButton; import basemod.ModPanel; @@ -30,6 +41,9 @@ import champ.ChampMod; import champ.cards.ModFinisher; import champ.potions.CounterstrikePotion; +import champ.potions.OpenerPotion; +import champ.potions.TechPotion; +import champ.potions.UltimateStancePotion; import champ.powers.LastStandModPower; import champ.relics.ChampStancesModRelic; import champ.util.TechniqueMod; @@ -39,15 +53,16 @@ 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.DebuffDoublePotion; +import collector.potions.MiniCursePotion; +import collector.potions.ReservePotion; 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; import com.badlogic.gdx.Gdx; @@ -107,6 +122,7 @@ import downfall.events.shrines_evil.UpgradeShrineEvil; import downfall.monsters.*; import downfall.monsters.gauntletbosses.*; +import downfall.patches.BanSharedContentPatch; import downfall.patches.DailyModeEvilPatch; import downfall.patches.EvilModeCharacterSelect; import downfall.patches.RewardItemTypeEnumPatch; @@ -123,29 +139,49 @@ import gremlin.GremlinMod; import gremlin.cards.Wizardry; import gremlin.characters.GremlinCharacter; +import gremlin.potions.GremlinPotion; +import gremlin.potions.NecromancyPotion; +import gremlin.potions.SwapPotion; import gremlin.potions.WizPotion; import gremlin.relics.WizardHat; import gremlin.relics.WizardStaff; import guardian.GuardianMod; import guardian.cards.ExploitGems; import guardian.characters.GuardianCharacter; +import guardian.patches.GuardianEnum; +import guardian.potions.AcceleratePotion; import guardian.potions.BlockOnCardUsePotion; +import guardian.potions.DefensiveModePotion; +import guardian.potions.StasisDiscoveryPotion; import guardian.relics.PickAxe; import guardian.rewards.GemReward; import guardian.rewards.GemRewardAllRarities; import hermit.HermitMod; +import hermit.characters.hermit; +import hermit.potions.BlackBile; +import hermit.potions.Eclipse; +import hermit.potions.Tonic; import slimebound.SlimeboundMod; import slimebound.characters.SlimeboundCharacter; +import slimebound.patches.SlimeboundEnum; +import slimebound.potions.SlimedPotion; +import slimebound.potions.SlimyTonguePotion; +import slimebound.potions.SpawnSlimePotion; import slimebound.potions.ThreeZeroPotion; import sneckomod.SneckoMod; import sneckomod.TheSnecko; -import sneckomod.cards.unknowns.*; +import sneckomod.potions.CheatPotion; +import sneckomod.potions.DiceRollPotion; import sneckomod.potions.MuddlingPotion; +import sneckomod.potions.OffclassReductionPotion; import sneckomod.util.ColorfulCardReward; import sneckomod.util.UpgradedUnknownReward; import theHexaghost.HexaMod; import theHexaghost.TheHexaghost; +import theHexaghost.potions.DoubleChargePotion; +import theHexaghost.potions.EctoCoolerPotion; +import theHexaghost.potions.InfernoChargePotion; import theHexaghost.potions.SoulburnPotion; import theHexaghost.util.SealSealReward; @@ -156,7 +192,9 @@ import java.util.*; import static downfall.patches.EvilModeCharacterSelect.evilMode; +import static gremlin.patches.GremlinEnum.GREMLIN; 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 { @@ -182,6 +220,7 @@ public class downfallMod implements OnPlayerDamagedSubscriber, OnStartBattleSubs //Config Menu Stuff private ModPanel settingsPanel; public static Properties configDefault = new Properties(); + public static boolean disableBaseGameAdjustments = false; public static boolean contentSharing_relics = true; public static boolean contentSharing_potions = true; public static boolean contentSharing_events = false; @@ -191,9 +230,13 @@ public class downfallMod implements OnPlayerDamagedSubscriber, OnStartBattleSubs public static boolean crossoverModCharacters = true; public static boolean unlockEverything = false; public static boolean noMusic = false; - public static boolean normalMapLayout = false; + public static boolean normalMapLayout = true; public static boolean sneckoNoModCharacters = false; public static boolean useIconsForAppliedProperties = false; + public static boolean useLegacyBosses = true; + public static boolean DeterministicConjure = true; + public static boolean SixSealsQuest = false; + public static boolean ShowCharModes = false; public static ArrayList shareableRelics = new ArrayList<>(); public static final String PROP_RELIC_SHARING = "contentSharing_relics"; @@ -204,17 +247,22 @@ public class downfallMod implements OnPlayerDamagedSubscriber, OnStartBattleSubs public static final String PROP_CHAR_CROSSOVER = "crossover_characters"; public static final String PROP_MOD_CHAR_CROSSOVER = "crossover_mod_characters"; public static final String PROP_UNLOCK_ALL = "unlockEverything"; - public static final String PROP_NORMAL_MAP = "normalMapLayout"; + public static final String PROP_NORMAL_MAP = "normalMapLayout_2"; 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 final String SIX_SEALS_QUEST = "SixSealsQuest"; + public static final String SHOW_CHAR_MODES = "ShowCarModes"; + public static final String NO_BASE_ADJUSTMENTS = "disableBaseGameAdjustments"; + public static final String LEGACY_BOSSES = "legacyBosses"; public static String Act1BossFaced = ""; public static String Act2BossFaced = ""; public static String Act3BossFaced = ""; - public static boolean[] unseenTutorials = new boolean[]{true, // Hermit - + public static boolean[] unseenTutorials = new boolean[]{ + true, // Hermit true, // Guardian 1 true, // Hexa 2 true, // Charboss Info 3 @@ -224,10 +272,10 @@ public class downfallMod implements OnPlayerDamagedSubscriber, OnStartBattleSubs true, // Champ 7 true, // Auto 8 true, // Gremlins 9 - true // Snecko 10 - // true, //act3 boss 11 - // true, //act3 boss 12 - // true //act3 boss 13 + true, // Snecko 10 + true, // Awakened 11 + true, // act 3 boss 2 12 + true // act 3 boss 3 13 }; public static Properties tutorialSaves = new Properties(); @@ -240,18 +288,23 @@ public class downfallMod implements OnPlayerDamagedSubscriber, OnStartBattleSubs public static AbstractCard.CardTags CHARBOSS_SETUP; @SpireEnum public static AbstractCard.CardTags DOWNFALL_CURSE; + @SpireEnum + public static AbstractCard.CardTags CHARBOSS_DEADON; public static final boolean EXPERIMENTAL_FLIP = false; 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.KOR, - // Settings.GameLanguage.FRA, - Settings.GameLanguage.ZHT, - // Settings.GameLanguage.RUS, - // Settings.GameLanguage.PTB + Settings.GameLanguage.ENG, + Settings.GameLanguage.ZHS, + Settings.GameLanguage.JPN, + Settings.GameLanguage.KOR, + Settings.GameLanguage.SPA, + Settings.GameLanguage.FRA, + Settings.GameLanguage.DEU, + // Settings.GameLanguage.ZHT, + // Settings.GameLanguage.RUS, + // Settings.GameLanguage.PTB }; public static ReplaceData[] wordReplacements; @@ -278,6 +331,10 @@ 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"); + configDefault.setProperty(LEGACY_BOSSES, "TRUE"); + configDefault.setProperty(SIX_SEALS_QUEST, "FALSE"); + configDefault.setProperty(SHOW_CHAR_MODES, "FALSE"); loadConfigData(); @@ -339,6 +396,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; } @@ -358,11 +417,15 @@ 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.setBool(SIX_SEALS_QUEST, SixSealsQuest); + config.setBool(SHOW_CHAR_MODES, ShowCharModes); + config.setBool(NO_BASE_ADJUSTMENTS, disableBaseGameAdjustments); + //config.setBool(LEGACY_BOSSES, useLegacyBosses); config.save(); GoldenIdol_Evil.save(); } catch (IOException e) { @@ -434,6 +497,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); @@ -473,7 +539,8 @@ public void receiveEditCards() { BaseMod.addCard(new Aged()); BaseMod.addCard(new Pride()); BaseMod.addCard(new Scatterbrained()); - BaseMod.addCard(new Sapped()); + // BaseMod.addCard(new Sapped()); + BaseMod.addCard(new CurseOfBlood()); /* BaseMod.addCard(new Slug()); BaseMod.addCard(new Defend_Crowbot()); @@ -540,6 +607,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); } @@ -560,14 +628,14 @@ public static ArrayList getRandomDownfallCurse(int count) { } public void receivePostInitialize() { - addPotions(); + //addPotions(); UnlockTracker.betaCardPref = new IndividualBetaArtEnablerPref(UnlockTracker.betaCardPref); soulsImage = TextureLoader.getTexture(downfallMod.assetPath("images/ui/Souls.png")); loadOtherData(); this.initializeMonsters(); - this.addPotions(); // sorry + this.addPotions(); this.initializeEvents(); this.initializeConfig(); @@ -749,6 +817,31 @@ private void initializeConfig() { unlockAllReskin(); }); + configPos -= configStep; + ModLabeledToggleButton noBaseAdjustmentsBtn = new ModLabeledToggleButton(configStrings.TEXT[15], 350.0f, configPos, Settings.CREAM_COLOR, FontHelper.charDescFont, disableBaseGameAdjustments, settingsPanel, (label) -> { + }, (button) -> { + disableBaseGameAdjustments = button.enabled; + 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; + saveData(); + }); + + /* + configPos -= configStep; + ModLabeledToggleButton legacyBossesButton = new ModLabeledToggleButton(configStrings.TEXT[16], 350.0f, configPos, Settings.CREAM_COLOR, FontHelper.charDescFont, useLegacyBosses, settingsPanel, (label) -> { + }, (button) -> { + useLegacyBosses = button.enabled; + saveData(); + }); + + */ + useLegacyBosses = true; + settingsPanel.addUIElement(contentSharingBtnCurses); settingsPanel.addUIElement(contentSharingBtnEvents); settingsPanel.addUIElement(contentSharingBtnPotions); @@ -760,6 +853,9 @@ private void initializeConfig() { settingsPanel.addUIElement(noMusicBtn); settingsPanel.addUIElement(unlockAllSkinBtn); settingsPanel.addUIElement(characterModCrossoverBtn); + settingsPanel.addUIElement(noBaseAdjustmentsBtn); + //settingsPanel.addUIElement(NoRNGConjureButton); + // settingsPanel.addUIElement(legacyBossesButton); } BaseMod.registerModBadge(badgeTexture, "downfall", "Downfall Team", "A very evil Expansion.", settingsPanel); @@ -780,10 +876,14 @@ public static void loadConfigData() { sneckoNoModCharacters = config.getBool(PROP_SNECKO_MODLESS); unlockEverything = config.getBool(PROP_UNLOCK_ALL); noMusic = config.getBool(PROP_NO_MUSIC); + useIconsForAppliedProperties = config.getBool(PROP_ICONS_FOR_APPLIED_PROPERTIES); + DeterministicConjure = config.getBool(NO_RNG_CONJURE); + SixSealsQuest = config.getBool(SIX_SEALS_QUEST); + ShowCharModes = config.getBool(SHOW_CHAR_MODES); + // useLegacyBosses = config.getBool(LEGACY_BOSSES); } crossoverCharacters = config.getBool(PROP_CHAR_CROSSOVER); crossoverModCharacters = config.getBool(PROP_MOD_CHAR_CROSSOVER); - useIconsForAppliedProperties = config.getBool(PROP_ICONS_FOR_APPLIED_PROPERTIES); } catch (Exception e) { e.printStackTrace(); clearData(); @@ -1036,7 +1136,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// @@ -1270,23 +1370,158 @@ private void initializeMonsters() { } public void addPotions() { - 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(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(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){ + + // if (!EvilModeCharacterSelect.evilMode) { + + //PUT SHARED POTIONS HERE + // if (!downfallMod.contentSharing_potions){ + //SHARED POTIONS + BaseMod.addPotion(BossPotion.class, Color.MAROON, Color.MAROON, new Color(0x470000ff), BossPotion.POTION_ID); + + //HEXAGHOST + BaseMod.addPotion(SoulburnPotion.class, Color.GRAY, Color.GRAY, Color.BLACK, SoulburnPotion.POTION_ID); + + //SLIME BOSS + BaseMod.addPotion(ThreeZeroPotion.class, Color.FOREST, Color.BLACK, Color.BLACK, ThreeZeroPotion.POTION_ID); + + //SNECKO + BaseMod.addPotion(MuddlingPotion.class, Color.CYAN, Color.CORAL, Color.MAROON, MuddlingPotion.POTION_ID); + + //GUARDIAN + BaseMod.addPotion(BlockOnCardUsePotion.class, Color.ROYAL, Color.TEAL, Color.BLUE, BlockOnCardUsePotion.POTION_ID); + + //COLLECTOR + //BaseMod.addPotion(TempHPPotion.class, Color.BLACK, Color.PURPLE, Color.GRAY, TempHPPotion.POTION_ID); + + //CHAMP + BaseMod.addPotion(CounterstrikePotion.class, Color.GRAY, Color.GRAY, Color.BLACK, CounterstrikePotion.POTION_ID); + + //GREMLINS + BaseMod.addPotion(WizPotion.class, Color.PURPLE, Color.PINK, Color.PURPLE, WizPotion.POTION_ID); + + //AUTO + BaseMod.addPotion(BurnAndBuffPotion.class, Color.RED, Color.GREEN, Color.CLEAR, BurnAndBuffPotion.POTION_ID); + + //AWAKENED + BaseMod.addPotion(CultistsDelight.class, Color.BLUE, Color.NAVY, Color.YELLOW, CultistsDelight.POTION_ID); + + if (Loader.isModLoaded("widepotions")) { + // WidePotionsMod.whitelistSimplePotion(TempHPPotion.POTION_ID); + WidePotionsMod.whitelistSimplePotion(CounterstrikePotion.POTION_ID); + WidePotionsMod.whitelistSimplePotion(SoulburnPotion.POTION_ID); + WidePotionsMod.whitelistSimplePotion(BurnAndBuffPotion.POTION_ID); + WidePotionsMod.whitelistSimplePotion(BlockOnCardUsePotion.POTION_ID); + WidePotionsMod.whitelistSimplePotion(ThreeZeroPotion.POTION_ID); + WidePotionsMod.whitelistSimplePotion(MuddlingPotion.POTION_ID); + WidePotionsMod.whitelistSimplePotion(CultistsDelight.POTION_ID); + } + // } + // } + + // if(EvilModeCharacterSelect.evilMode || downfallMod.contentSharing_events){ BaseMod.addPotion(CursedFountainPotion.class, Color.PURPLE, Color.MAROON, Color.BLACK, CursedFountainPotion.POTION_ID); + + // } + + //COLLECTOR POTIONS + 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); + + if (Loader.isModLoaded("widepotions")) { + WidePotionsMod.whitelistSimplePotion(MiniCursePotion.POTION_ID); + WidePotionsMod.whitelistSimplePotion(ReservePotion.POTION_ID); + WidePotionsMod.whitelistSimplePotion(DebuffDoublePotion.POTION_ID); + } + + //CHAMP POTIONS + BaseMod.addPotion(OpenerPotion.class, Color.TEAL, Color.GREEN, Color.FOREST, OpenerPotion.POTION_ID, ChampChar.Enums.THE_CHAMP); + BaseMod.addPotion(TechPotion.class, Color.BLUE, Color.PURPLE, Color.MAROON, TechPotion.POTION_ID, ChampChar.Enums.THE_CHAMP); + BaseMod.addPotion(UltimateStancePotion.class, Color.PURPLE, Color.PURPLE, Color.MAROON, UltimateStancePotion.POTION_ID, ChampChar.Enums.THE_CHAMP); + + if (Loader.isModLoaded("widepotions")) { + WidePotionsMod.whitelistSimplePotion(OpenerPotion.POTION_ID); + WidePotionsMod.whitelistSimplePotion(TechPotion.POTION_ID); + WidePotionsMod.whitelistSimplePotion(UltimateStancePotion.POTION_ID); + } + + //AWAKENED POTIONS + 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); + BaseMod.addPotion(PhaseSkip.class, Color.CYAN, Color.PURPLE, Color.BLUE, PhaseSkip.POTION_ID, AwakenedOneChar.Enums.AWAKENED_ONE); + + if (Loader.isModLoaded("widepotions")) { + WidePotionsMod.whitelistSimplePotion(SacramentalWine.POTION_ID); + WidePotionsMod.whitelistSimplePotion(SneckoPowersPotion.POTION_ID); + } + + //AUTOMATON POTIONS + BaseMod.addPotion(BuildAFunctionPotion.class, Color.FIREBRICK, Color.GRAY, Color.TAN, BuildAFunctionPotion.POTION_ID, AutomatonChar.Enums.THE_AUTOMATON); + BaseMod.addPotion(CleanCodePotion.class, Color.CORAL, Color.PURPLE, Color.MAROON, CleanCodePotion.POTION_ID, AutomatonChar.Enums.THE_AUTOMATON); + BaseMod.addPotion(FreeFunctionsPotion.class, Color.BLACK, Color.PURPLE, Color.GRAY, FreeFunctionsPotion.POTION_ID, AutomatonChar.Enums.THE_AUTOMATON); + + if (Loader.isModLoaded("widepotions")) { + WidePotionsMod.whitelistSimplePotion(BuildAFunctionPotion.POTION_ID); + WidePotionsMod.whitelistSimplePotion(CleanCodePotion.POTION_ID); + WidePotionsMod.whitelistSimplePotion(FreeFunctionsPotion.POTION_ID); + } + + //GREMLIN POTIONS + BaseMod.addPotion(SwapPotion.class, Color.BLACK, Color.GRAY, Color.SLATE, SwapPotion.POTION_ID, GREMLIN); + BaseMod.addPotion(GremlinPotion.class, Color.RED, Color.YELLOW, Color.BLUE, GremlinPotion.POTION_ID, GREMLIN); + BaseMod.addPotion(NecromancyPotion.class, Color.RED, Color.YELLOW, Color.BLUE, NecromancyPotion.POTION_ID, GREMLIN); + + if (Loader.isModLoaded("widepotions")) { + WidePotionsMod.whitelistSimplePotion(GremlinPotion.POTION_ID); } + //GUARDIAN POTIONS + BaseMod.addPotion(AcceleratePotion.class, Color.GOLDENROD, Color.GOLD, Color.YELLOW, AcceleratePotion.POTION_ID, GuardianEnum.GUARDIAN); + BaseMod.addPotion(DefensiveModePotion.class, Color.ROYAL, Color.TEAL, Color.BLUE, DefensiveModePotion.POTION_ID, GuardianEnum.GUARDIAN); + BaseMod.addPotion(StasisDiscoveryPotion.class, Color.GOLDENROD, Color.GOLD, Color.YELLOW, StasisDiscoveryPotion.POTION_ID, GuardianEnum.GUARDIAN); + if (Loader.isModLoaded("widepotions")) { - WidePotionsMod.whitelistSimplePotion(CursedFountainPotion.POTION_ID); + WidePotionsMod.whitelistSimplePotion(AcceleratePotion.POTION_ID); + WidePotionsMod.whitelistSimplePotion(DefensiveModePotion.POTION_ID); + WidePotionsMod.whitelistSimplePotion(StasisDiscoveryPotion.POTION_ID); + } + + //HERMIT POTIONS + BaseMod.addPotion(Tonic.class, null, null, null, Tonic.POTION_ID, hermit.Enums.HERMIT); + BaseMod.addPotion(BlackBile.class, null, null, null, BlackBile.POTION_ID, hermit.Enums.HERMIT); + BaseMod.addPotion(Eclipse.class, Color.SCARLET.cpy(), Color.BLACK.cpy(), null, Eclipse.POTION_ID, hermit.Enums.HERMIT); + + //SLIME BOSS POTIONS + BaseMod.addPotion(SlimedPotion.class, Color.PURPLE, Color.PURPLE, Color.MAROON, SlimedPotion.POTION_ID, SlimeboundEnum.SLIMEBOUND); + BaseMod.addPotion(SpawnSlimePotion.class, Color.GREEN, Color.FOREST, Color.BLACK, SpawnSlimePotion.POTION_ID, SlimeboundEnum.SLIMEBOUND); + BaseMod.addPotion(SlimyTonguePotion.class, Color.PURPLE, Color.PURPLE, Color.MAROON, SlimyTonguePotion.POTION_ID, SlimeboundEnum.SLIMEBOUND); + + if (Loader.isModLoaded("widepotions")) { + WidePotionsMod.whitelistSimplePotion(SlimedPotion.POTION_ID); + WidePotionsMod.whitelistSimplePotion(SpawnSlimePotion.POTION_ID); + WidePotionsMod.whitelistSimplePotion(SlimyTonguePotion.POTION_ID); + } + + //SNECKO POTIONS + 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); + + if (Loader.isModLoaded("widepotions")) { + WidePotionsMod.whitelistSimplePotion(CheatPotion.POTION_ID); + WidePotionsMod.whitelistSimplePotion(DiceRollPotion.POTION_ID); + WidePotionsMod.whitelistSimplePotion(OffclassReductionPotion.POTION_ID); + } + + //HEXAGHOST POTIONS + 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); + + if (Loader.isModLoaded("widepotions")) { + WidePotionsMod.whitelistSimplePotion(EctoCoolerPotion.POTION_ID); + WidePotionsMod.whitelistSimplePotion(DoubleChargePotion.POTION_ID); + WidePotionsMod.whitelistSimplePotion(InfernoChargePotion.POTION_ID); } } @@ -1294,8 +1529,6 @@ 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); @@ -1304,15 +1537,22 @@ public void receiveEditRelics() { BaseMod.addRelic(new RedIOU(), RelicType.SHARED); BaseMod.addRelic(new RedIOUUpgrade(), RelicType.SHARED); BaseMod.addRelic(new KnowingSkull(), RelicType.SHARED); - BaseMod.addRelic(new HeartBlessingBlue(), RelicType.SHARED); - BaseMod.addRelic(new HeartBlessingGreen(), RelicType.SHARED); - BaseMod.addRelic(new HeartBlessingRed(), RelicType.SHARED); + //BaseMod.addRelic(new HeartBlessingBlue(), RelicType.SHARED); + //BaseMod.addRelic(new HeartBlessingGreen(), RelicType.SHARED); + //BaseMod.addRelic(new HeartBlessingRed(), RelicType.SHARED); BaseMod.addRelic(new TeleportStone(), RelicType.SHARED); BaseMod.addRelic(new HeartsMalice(), RelicType.SHARED); BaseMod.addRelic(new NeowBlessing(), RelicType.SHARED); BaseMod.addRelic(new ExtraCursedBell(), RelicType.SHARED); BaseMod.addRelic(new ExtraCursedKey(), RelicType.SHARED); - addPotions(); + + if (!disableBaseGameAdjustments) { + // BaseMod.addRelic(new Hecktoplasm(), RelicType.SHARED); + BaseMod.addRelic(new BlackCandle(), RelicType.SHARED); + BaseMod.addRelicToCustomPool(new AwakenedUrn(), AwakenedOneChar.Enums.AWAKENED_BLUE); + BaseMod.addRelicToCustomPool(new NerfedMummifiedHand(), AwakenedOneChar.Enums.AWAKENED_BLUE); + } + //addPotions(); } public static boolean readyToDoThing = false; @@ -1360,6 +1600,14 @@ public void receivePostUpdate() { } } + public static int getNumKeysBroken(){ + int count=0; + if (AddBustKeyButtonPatches.KeyFields.bustedSapphire.get(AbstractDungeon.player)) count++; + if (AddBustKeyButtonPatches.KeyFields.bustedRuby.get(AbstractDungeon.player)) count++; + if (AddBustKeyButtonPatches.KeyFields.bustedEmerald.get(AbstractDungeon.player)) count++; + return count; + } + public static void resetBossList() { possEncounterList.clear(); possEncounterList.add(CharBossIronclad.ID); @@ -1427,7 +1675,16 @@ 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 || + p instanceof CollectorChar || + p instanceof AwakenedOneChar) { return true; } return false; @@ -1466,7 +1723,7 @@ public int receiveOnPlayerDamaged(int i, DamageInfo damageInfo) { @Override public void receivePostDungeonInitialize() { - addPotions(); + //addPotions(); if (CardCrawlGame.trial != null && CardCrawlGame.trial.dailyModIDs().contains(Jewelcrafting.ID) || ModHelper.isModEnabled(Jewelcrafting.ID)) { RelicLibrary.getRelic(PickAxe.ID).makeCopy().instantObtain(); @@ -1543,16 +1800,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)) { @@ -1600,6 +1852,8 @@ public void receivePostDungeonInitialize() { playedBossCardThisTurn = false; evilWithinSingleton.selected = false; + + } public static void saveBossFight(String ID) { @@ -1644,7 +1898,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() { } @@ -1681,9 +1935,6 @@ public void receiveOnBattleStart(AbstractRoom abstractRoom) { // 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) @@ -1746,6 +1997,13 @@ public void receiveOnBattleStart(AbstractRoom abstractRoom) { 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 4572944f4d..16832053f4 100644 --- a/src/main/java/downfall/events/Beggar_Evil.java +++ b/src/main/java/downfall/events/Beggar_Evil.java @@ -59,7 +59,7 @@ public Beggar_Evil() { this.gold = 75; } - if (Cleric_Evil.encountered) { + if (Cleric_Evil.heDead) { this.gold = this.gold*2; } diff --git a/src/main/java/downfall/events/Designer_Evil.java b/src/main/java/downfall/events/Designer_Evil.java index 7cde69448b..430416c398 100644 --- a/src/main/java/downfall/events/Designer_Evil.java +++ b/src/main/java/downfall/events/Designer_Evil.java @@ -44,8 +44,6 @@ public class Designer_Evil extends AbstractImageEvent { private CurrentScreen curScreen; private OptionChosen option; - private boolean adjustmentUpgradesOne; - private boolean cleanUpRemovesCards; private int hpLoss; @@ -54,8 +52,6 @@ public Designer_Evil() { this.curScreen = CurrentScreen.LOOTER; this.option = null; this.option = OptionChosen.NONE; - this.adjustmentUpgradesOne = AbstractDungeon.miscRng.randomBoolean(); - this.cleanUpRemovesCards = AbstractDungeon.miscRng.randomBoolean(); if (AbstractDungeon.ascensionLevel >= 15) { this.hpLoss = 12; } else { @@ -235,17 +231,10 @@ protected void buttonEffect(int buttonPressed) { case INTRO: this.imageEventText.updateBodyText(DESC[3]); this.imageEventText.removeDialogOption(0); - if (this.adjustmentUpgradesOne) { - this.imageEventText.updateDialogOption(0, OPTIONSALT[0] + OPTIONS[9], !AbstractDungeon.player.masterDeck.hasUpgradableCards()); - } else { - this.imageEventText.updateDialogOption(0, OPTIONSALT[0] + OPTIONS[7] + 2 + OPTIONS[8], !AbstractDungeon.player.masterDeck.hasUpgradableCards()); - } + this.imageEventText.updateDialogOption(0, OPTIONSALT[0] + OPTIONS[7] + 2 + OPTIONS[8], !AbstractDungeon.player.masterDeck.hasUpgradableCards()); + + this.imageEventText.setDialogOption(OPTIONSALT[1] + OPTIONS[11] + 2 + OPTIONS[12], CardGroup.getGroupWithoutBottledCards(AbstractDungeon.player.masterDeck).size() < 2); - if (this.cleanUpRemovesCards) { - this.imageEventText.setDialogOption(OPTIONSALT[1] + OPTIONS[10], CardGroup.getGroupWithoutBottledCards(AbstractDungeon.player.masterDeck).size() == 0); - } else { - this.imageEventText.setDialogOption(OPTIONSALT[1] + OPTIONS[11] + 2 + OPTIONS[12], CardGroup.getGroupWithoutBottledCards(AbstractDungeon.player.masterDeck).size() < 2); - } this.imageEventText.setDialogOption(OPTIONSALT[2] + OPTIONS[13], CardGroup.getGroupWithoutBottledCards(AbstractDungeon.player.masterDeck).size() == 0); this.imageEventText.setDialogOption(OPTIONSALT[4]); @@ -255,22 +244,14 @@ protected void buttonEffect(int buttonPressed) { switch (buttonPressed) { case 0: this.imageEventText.updateBodyText(DESC[4]); - if (this.adjustmentUpgradesOne) { - this.option = OptionChosen.UPGRADE; - AbstractDungeon.gridSelectScreen.open(AbstractDungeon.player.masterDeck.getUpgradableCards(), 1, OPTIONS[15], true, false, false, false); - } else { - this.upgradeTwoRandomCards(); - } + + this.upgradeTwoRandomCards(); break; case 1: this.imageEventText.updateBodyText(DESC[4]); - if (this.cleanUpRemovesCards) { - this.option = OptionChosen.REMOVE; - AbstractDungeon.gridSelectScreen.open(CardGroup.getGroupWithoutBottledCards(AbstractDungeon.player.masterDeck.getPurgeableCards()), 1, OPTIONS[17], false, false, false, true); - } else { - this.option = OptionChosen.TRANSFORM; - AbstractDungeon.gridSelectScreen.open(CardGroup.getGroupWithoutBottledCards(AbstractDungeon.player.masterDeck.getPurgeableCards()), 2, OPTIONS[16], false, false, false, false); - } + this.option = OptionChosen.TRANSFORM; + AbstractDungeon.gridSelectScreen.open(CardGroup.getGroupWithoutBottledCards(AbstractDungeon.player.masterDeck.getPurgeableCards()), 2, OPTIONS[16], false, false, false, false); + break; case 2: this.imageEventText.updateBodyText(DESC[4]); diff --git a/src/main/java/downfall/events/ForgottenAltar_Evil.java b/src/main/java/downfall/events/ForgottenAltar_Evil.java index b4f4d6095d..88fdbd33ae 100644 --- a/src/main/java/downfall/events/ForgottenAltar_Evil.java +++ b/src/main/java/downfall/events/ForgottenAltar_Evil.java @@ -4,10 +4,15 @@ 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.AbstractCreature; 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"; @@ -36,20 +41,35 @@ public ForgottenAltar_Evil() { this.screen = CurScreen.INTRO; this.noCardsInRewards = true; if (AbstractDungeon.ascensionLevel >= 15) { - this.hpLoss = MathUtils.round((float) AbstractDungeon.player.maxHealth * 0.3F); + this.hpLoss = MathUtils.round((float) AbstractDungeon.player.maxHealth * 0.25F); } else { this.hpLoss = MathUtils.round((float) AbstractDungeon.player.maxHealth * 0.2F); } + + if (AbstractDungeon.ascensionLevel >= 15) { + this.goldCost = 75; + } 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]); + this.imageEventText.setDialogOption(OPTIONSALT[0] + this.goldCost + OPTIONSALT[1] + (this.hpLoss) + 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] + 5 + OPTIONSALT[7]); + } } protected void buttonEffect(int buttonPressed) { @@ -59,12 +79,12 @@ protected void buttonEffect(int buttonPressed) { case 0: this.imageEventText.clearAllDialogs(); AbstractDungeon.player.loseGold(this.goldCost); - AbstractDungeon.player.heal(this.hpLoss + 10, true); + AbstractDungeon.player.heal(this.hpLoss, true); this.imageEventText.updateBodyText(DESCRIPTIONSALT[0]); this.imageEventText.setDialogOption(OPTIONSALT[5]); CardCrawlGame.sound.play("HEAL_1"); this.screenNum = 1; - logMetricHealAtCost(ID, "Offer Souls", goldCost, hpLoss + 10); + logMetricHealAtCost(ID, "Offer Souls", goldCost, hpLoss); return; case 1: @@ -79,8 +99,18 @@ 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)); + AbstractDungeon.player.damage(new DamageInfo((AbstractCreature)null, 5, DamageInfo.DamageType.HP_LOSS)); + CardCrawlGame.sound.play("ATTACK_DAGGER_6"); + CardCrawlGame.sound.play("BLOOD_SPLAT"); + 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 ca6e24a27c..4177b18b18 100644 --- a/src/main/java/downfall/events/GoldenIdol_Evil.java +++ b/src/main/java/downfall/events/GoldenIdol_Evil.java @@ -37,7 +37,7 @@ public GoldenIdol_Evil() { this.screen = CurScreen.INTRO; if (AbstractDungeon.ascensionLevel >= 15){ - gold = 75; + gold = 50; } if (!trapAlreadySet) { diff --git a/src/main/java/downfall/events/GremlinMatchGame_Evil.java b/src/main/java/downfall/events/GremlinMatchGame_Evil.java index 357143610e..128a48dc31 100644 --- a/src/main/java/downfall/events/GremlinMatchGame_Evil.java +++ b/src/main/java/downfall/events/GremlinMatchGame_Evil.java @@ -27,7 +27,6 @@ import com.megacrit.cardcrawl.relics.AbstractRelic; import com.megacrit.cardcrawl.vfx.cardManip.ShowCardAndObtainEffect; import downfall.relics.GremlinSack; -import slimebound.SlimeboundMod; import java.util.*; diff --git a/src/main/java/downfall/events/HeartEvent.java b/src/main/java/downfall/events/HeartEvent.java index 3433f24d5e..67cf1787c8 100644 --- a/src/main/java/downfall/events/HeartEvent.java +++ b/src/main/java/downfall/events/HeartEvent.java @@ -422,7 +422,11 @@ private void blessing() { this.roomEventText.clearRemainingOptions(); this.roomEventText.updateDialogOption(0, ((HeartReward) this.rewards.get(0)).optionLabel); this.roomEventText.addDialogOption(((HeartReward) this.rewards.get(1)).optionLabel); - this.roomEventText.addDialogOption(((HeartReward) this.rewards.get(2)).optionLabel); + String label = ((HeartReward) this.rewards.get(2)).optionLabel; + if (Settings.language == Settings.GameLanguage.DEU && label.startsWith("[ #rVerliere #rdein #rgesamtes")) { + label = "[ #rVerliere #ralle" + label.substring(30); + } + this.roomEventText.addDialogOption(label); this.roomEventText.addDialogOption(((HeartReward) this.rewards.get(3)).optionLabel); this.screenNum = 3; } diff --git a/src/main/java/downfall/events/Joust_Evil.java b/src/main/java/downfall/events/Joust_Evil.java index 68616ec8ed..55012bd197 100644 --- a/src/main/java/downfall/events/Joust_Evil.java +++ b/src/main/java/downfall/events/Joust_Evil.java @@ -49,8 +49,8 @@ public void update() { public Joust_Evil() { super(NAME, DESCRIPTIONSALT[0], "images/events/joust.jpg"); - int x = (int) (AbstractDungeon.player.maxHealth * 0.3); - int u = (int) (AbstractDungeon.player.maxHealth * 0.15); + int x = (int) (AbstractDungeon.player.maxHealth * 0.15); + int u = (int) (AbstractDungeon.player.maxHealth * 0.075); this.imageEventText.setDialogOption(OPTIONSALT[0] + x + OPTIONSALT[1] + OPTIONSALT[2]); this.imageEventText.setDialogOption(OPTIONSALT[3] + u + OPTIONSALT[1] + OPTIONSALT[4]); this.imageEventText.setDialogOption(OPTIONS[7]); @@ -58,39 +58,45 @@ public Joust_Evil() { } protected void buttonEffect(int buttonPressed) { + int gold = 0; switch (this.screen) {// 72 case INTRO: switch (buttonPressed) { case 0: this.joustTimer = 0.01F;// 97 if (AbstractDungeon.cardRandomRng.randomBoolean()) { - int damage = (int) (AbstractDungeon.player.maxHealth * 0.3); + int damage = (int) (AbstractDungeon.player.maxHealth * 0.15); AbstractDungeon.player.damage(new DamageInfo(null, damage, DamageInfo.DamageType.HP_LOSS)); - logMetricTakeDamage(ID, "Fought Strong Knight", damage); - imageEventText.updateBodyText(DESCRIPTIONSALT[1]); + // logMetricTakeDamage(ID, "Fought Strong Knight", damage); + // imageEventText.updateBodyText(DESCRIPTIONSALT[1]); + } + if (AbstractDungeon.ascensionLevel >= 15){ + gold = 175; } else { - int gold = 200; - AbstractDungeon.effectList.add(new RainingGoldEffect(gold)); - AbstractDungeon.player.gainGold(gold); - logMetricGainGold(ID, "Killed Strong Knight", gold); - imageEventText.updateBodyText(DESCRIPTIONSALT[2]); + gold = 200; } + AbstractDungeon.effectList.add(new RainingGoldEffect(gold)); + AbstractDungeon.player.gainGold(gold); + logMetricGainGold(ID, "Killed Strong Knight", gold); + imageEventText.updateBodyText(DESCRIPTIONSALT[2]); break; case 1: this.joustTimer = 0.01F;// 97 - int x = AbstractDungeon.cardRandomRng.random(100); - if (x < 25) { - int damage = (int) (AbstractDungeon.player.maxHealth * 0.15); + if (AbstractDungeon.cardRandomRng.randomBoolean()) { + int damage = (int) (AbstractDungeon.player.maxHealth * 0.075); AbstractDungeon.player.damage(new DamageInfo(null, damage, DamageInfo.DamageType.HP_LOSS)); - logMetricTakeDamage(ID, "Fought Weak Knight", damage); - imageEventText.updateBodyText(DESCRIPTIONSALT[3]); + //logMetricTakeDamage(ID, "Fought Weak Knight", damage); + // imageEventText.updateBodyText(DESCRIPTIONSALT[3]); + } + if (AbstractDungeon.ascensionLevel >= 15){ + gold = 75; } else { - int gold = 100; - AbstractDungeon.effectList.add(new RainingGoldEffect(gold)); - AbstractDungeon.player.gainGold(gold); - logMetricGainGold(ID, "Killed Weak Knight", gold); - imageEventText.updateBodyText(DESCRIPTIONSALT[4]); + gold = 100; } + AbstractDungeon.effectList.add(new RainingGoldEffect(gold)); + AbstractDungeon.player.gainGold(gold); + logMetricGainGold(ID, "Killed Weak Knight", gold); + imageEventText.updateBodyText(DESCRIPTIONSALT[4]); break; default: this.imageEventText.updateDialogOption(0, OPTIONS[7]);// 75 diff --git a/src/main/java/downfall/events/MindBloom_Evil.java b/src/main/java/downfall/events/MindBloom_Evil.java index d6a58fb1b0..d97b0bb56f 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; @@ -30,6 +33,7 @@ import com.megacrit.cardcrawl.vfx.cardManip.ShowCardAndObtainEffect; import com.megacrit.cardcrawl.vfx.cardManip.ShowCardBrieflyEffect; import downfall.downfallMod; +import downfall.monsters.AwakenedOneMirror; import downfall.monsters.GremlinMirror; import downfall.monsters.SneckoMirror; import downfall.patches.ui.campfire.AddBustKeyButtonPatches; @@ -40,10 +44,7 @@ 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; @@ -73,15 +74,15 @@ public MindBloom_Evil() { if (AddBustKeyButtonPatches.KeyFields.bustedRuby.get(AbstractDungeon.player) && AddBustKeyButtonPatches.KeyFields.bustedEmerald.get(AbstractDungeon.player) && AddBustKeyButtonPatches.KeyFields.bustedSapphire.get(AbstractDungeon.player)) { if (AbstractDungeon.player instanceof GremlinCharacter) { - this.imageEventText.setDialogOption(OPTIONSALT[5]); - } else { this.imageEventText.setDialogOption(OPTIONSALT[2]); + } 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[2]); } } else { if (AbstractDungeon.player instanceof GremlinCharacter) { - this.imageEventText.setDialogOption(OPTIONSALT[5]); + this.imageEventText.setDialogOption(OPTIONSALT[2]); } else { this.imageEventText.setDialogOption(OPTIONSALT[2]); //if ruining the surprise is important use this instead @@ -148,6 +149,9 @@ 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) { + AbstractDungeon.getCurrRoom().monsters = new MonsterGroup(new AwakenedOneMirror(0,0)); } else { ArrayList list = new ArrayList(); list.add("Slime Boss"); @@ -178,16 +182,28 @@ protected void buttonEffect(int buttonPressed) { case 1: this.imageEventText.updateBodyText(DESCRIPTIONSALT[2]); this.screen = CurScreen.LEAVE; + int effectCount = 0; List upgradedCards = new ArrayList(); - AbstractDungeon.player.loseRelic(HeartBlessingRed.ID); - AbstractDungeon.player.loseRelic(HeartBlessingBlue.ID); - AbstractDungeon.player.loseRelic(HeartBlessingGreen.ID); + Iterator var11 = AbstractDungeon.player.masterDeck.group.iterator(); + + 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; + AbstractDungeon.effectList.add(new ShowCardBrieflyEffect(c.makeStatEquivalentCopy(), x, y)); + AbstractDungeon.topLevelEffects.add(new UpgradeShineEffect(x, y)); + } - // if (AbstractDungeon.ascensionLevel >= 15) { - AbstractDungeon.getCurrRoom().spawnRelicAndObtain((float) Settings.WIDTH / 2.0F, (float) Settings.HEIGHT / 2.0F, new BurdenOfKnowledge()); - logMetricObtainRelic(ID, "BurdenOfKnowledge", new BurdenOfKnowledge()); - // } + upgradedCards.add(c.cardID); + c.upgrade(); + AbstractDungeon.player.bottledCardUpgradeCheck(c); + } + } + 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 2bd41ae2b2..c86a4785a0 100644 --- a/src/main/java/downfall/events/Nloth_Evil.java +++ b/src/main/java/downfall/events/Nloth_Evil.java @@ -1,28 +1,19 @@ package downfall.events; -import automaton.relics.BottledCode; -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.*; +import com.megacrit.cardcrawl.relics.AbstractRelic; +import com.megacrit.cardcrawl.relics.Circlet; +import com.megacrit.cardcrawl.relics.NlothsGift; import com.megacrit.cardcrawl.vfx.cardManip.ShowCardAndObtainEffect; -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; -import java.util.Iterator; import java.util.Random; public class Nloth_Evil extends AbstractImageEvent { @@ -57,39 +48,7 @@ public class Nloth_Evil extends AbstractImageEvent { public Nloth_Evil() { super(NAME, DIALOG_1, "images/events/nloth.jpg"); ArrayList relics = new ArrayList(); - 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(BottledCode.ID) || - r.relicId.equals(WingBoots.ID)) || - //event - - r.relicId.equals(D8.ID)) - { - relicIterator.remove(); // Remove the blacklisted relic - } - } - + relics.addAll(AbstractDungeon.player.relics); 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/WeMeetAgain_Evil.java b/src/main/java/downfall/events/WeMeetAgain_Evil.java index 7a441a4814..a07e7489e7 100644 --- a/src/main/java/downfall/events/WeMeetAgain_Evil.java +++ b/src/main/java/downfall/events/WeMeetAgain_Evil.java @@ -1,5 +1,7 @@ package downfall.events; +import automaton.relics.BottledCode; +import awakenedOne.relics.MoonTalisman; import champ.relics.SignatureFinisher; import collector.CollectorChar; import collector.relics.BottledCollectible; @@ -16,8 +18,11 @@ 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; @@ -67,7 +72,7 @@ public WeMeetAgain_Evil() { ((r.relicId != Strawberry.ID) && (r.relicId != MawBank.ID) && (r.relicId != PickAxe.ID) && - (r.relicId != TinyChest.ID) && + (r.relicId != Matryoshka.ID) && (r.relicId != WarPaint.ID) && (r.relicId != Whetstone.ID) && (r.relicId != SneckoCommon.ID) && @@ -84,6 +89,14 @@ public WeMeetAgain_Evil() { (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) && diff --git a/src/main/java/downfall/events/WingStatue_Evil.java b/src/main/java/downfall/events/WingStatue_Evil.java index 8274a99e6d..d8d76764b4 100644 --- a/src/main/java/downfall/events/WingStatue_Evil.java +++ b/src/main/java/downfall/events/WingStatue_Evil.java @@ -37,9 +37,9 @@ public WingStatue_Evil() { - this.goldLoss = MathUtils.ceil((float) AbstractDungeon.player.maxHealth * 0.5F); + this.goldLoss = MathUtils.ceil((float) AbstractDungeon.player.maxHealth * 0.25F); if (AbstractDungeon.ascensionLevel >= 15){ - this.goldLoss = MathUtils.ceil((float) AbstractDungeon.player.maxHealth * 0.25F); + this.goldLoss = MathUtils.ceil((float) AbstractDungeon.player.maxHealth * 0.35F); } if (AbstractDungeon.player.chosenClass == GremlinEnum.GREMLIN) { diff --git a/src/main/java/downfall/events/WorldOfGoop_Evil.java b/src/main/java/downfall/events/WorldOfGoop_Evil.java index 5d684d69e5..9e6ca545b3 100644 --- a/src/main/java/downfall/events/WorldOfGoop_Evil.java +++ b/src/main/java/downfall/events/WorldOfGoop_Evil.java @@ -35,19 +35,22 @@ public class WorldOfGoop_Evil extends AbstractImageEvent { private CurScreen screen; private int gold; + private int gold2; public WorldOfGoop_Evil() { super(NAME, DIALOG_1, "images/events/goopPuddle.jpg"); this.screen = CurScreen.INTRO; if (AbstractDungeon.ascensionLevel >= 15) { + this.gold2 = 325; this.gold = 150; } else { + this.gold2 = 375; this.gold = 175; } - 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[0] + (this.gold+50) * 3 + OPTIONS[3], new Icky()); + this.imageEventText.setDialogOption(OPTIONS[1] + this.gold2 + OPTIONS[4], new Icky()); this.imageEventText.setDialogOption(OPTIONS[2] + this.gold + OPTIONS[5], new Icky()); this.imageEventText.setDialogOption(OPTIONS[6]); } @@ -79,24 +82,12 @@ protected void buttonEffect(int buttonPressed) { this.imageEventText.setDialogOption(OPTIONS[6]); this.screen = CurScreen.RESULT; AbstractDungeon.effectList.add(new ShowCardAndObtainEffect(new Icky(), (float) Settings.WIDTH * .25F + 10.0F * Settings.scale, (float) Settings.HEIGHT / 2.0F)); - 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+50) * 3); - logMetricGoop(3); - return; - case 1: - this.imageEventText.updateBodyText(GOLD_DIALOG); - this.imageEventText.clearAllDialogs(); - this.imageEventText.setDialogOption(OPTIONS[6]); - this.screen = CurScreen.RESULT; 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+25) * 2); + AbstractDungeon.effectList.add(new RainingGoldEffect(this.gold2)); + AbstractDungeon.player.gainGold((this.gold2)); logMetricGoop(2); return; - case 2: + case 1: this.imageEventText.updateBodyText(GOLD_DIALOG); this.imageEventText.clearAllDialogs(); this.imageEventText.setDialogOption(OPTIONS[6]); @@ -106,7 +97,7 @@ protected void buttonEffect(int buttonPressed) { AbstractDungeon.player.gainGold(this.gold); logMetricGoop(1); return; - case 3: + case 2: //AbstractDungeon.player.damage(new DamageInfo(null, ((AbstractDungeon.ascensionLevel >= 15)?11:7))); this.imageEventText.updateBodyText(LEAVE_DIALOG); this.imageEventText.clearAllDialogs(); diff --git a/src/main/java/downfall/events/shrines_evil/DuplicatorEvil.java b/src/main/java/downfall/events/shrines_evil/DuplicatorEvil.java index 6bde00a8a5..9d6b32b7cd 100644 --- a/src/main/java/downfall/events/shrines_evil/DuplicatorEvil.java +++ b/src/main/java/downfall/events/shrines_evil/DuplicatorEvil.java @@ -5,7 +5,6 @@ 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; import com.megacrit.cardcrawl.core.Settings; diff --git a/src/main/java/downfall/events/shrines_evil/PurificationShrineEvil.java b/src/main/java/downfall/events/shrines_evil/PurificationShrineEvil.java index f780e7d83f..7d378acad7 100644 --- a/src/main/java/downfall/events/shrines_evil/PurificationShrineEvil.java +++ b/src/main/java/downfall/events/shrines_evil/PurificationShrineEvil.java @@ -1,8 +1,6 @@ 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; import com.megacrit.cardcrawl.core.Settings; @@ -95,8 +93,7 @@ public void update() { } AbstractDungeon.player.masterDeck.removeCard((AbstractCard) AbstractDungeon.gridSelectScreen.selectedCards.get(1)); cards.add(AbstractDungeon.gridSelectScreen.selectedCards.get(1).cardID); - //todo: write a better metric tracker - logMetric(ID, "Desecrated and lost" + hpAmt + "Max HP."); + logMetric(ID, "Desecrated and lost " + hpAmt + " Max HP."); } AbstractDungeon.gridSelectScreen.selectedCards.clear(); diff --git a/src/main/java/downfall/events/shrines_evil/TransmogrifierEvil.java b/src/main/java/downfall/events/shrines_evil/TransmogrifierEvil.java index ea7930455a..bc88f6d95d 100644 --- a/src/main/java/downfall/events/shrines_evil/TransmogrifierEvil.java +++ b/src/main/java/downfall/events/shrines_evil/TransmogrifierEvil.java @@ -1,10 +1,7 @@ package downfall.events.shrines_evil; - - -import com.megacrit.cardcrawl.cards.curses.Pain; -import downfall.cards.curses.Malfunctioning; -import downfall.cards.curses.Sapped; +import com.badlogic.gdx.math.MathUtils; +import com.megacrit.cardcrawl.cards.DamageInfo; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.core.Settings; @@ -13,8 +10,10 @@ import com.megacrit.cardcrawl.localization.EventStrings; import com.megacrit.cardcrawl.vfx.cardManip.ShowCardAndObtainEffect; import downfall.downfallMod; +import slimebound.SlimeboundMod; import java.util.ArrayList; +import java.util.Iterator; import java.util.List; @@ -31,12 +30,11 @@ public class TransmogrifierEvil extends AbstractImageEvent { public static String[] OPTIONSALT; private CUR_SCREEN screen = CUR_SCREEN.INTRO; - private List removedCards = new ArrayList(); private List obtainedCards = new ArrayList(); - private boolean bonusShrine; - private boolean bonusShrine2; - private boolean bonusShrine3; + private boolean cardsSelected = false; + private int cardCount; + private int lifeCost; public TransmogrifierEvil() { @@ -44,9 +42,18 @@ public TransmogrifierEvil() { DESCRIPTIONSALT = CardCrawlGame.languagePack.getEventString("downfall:EvilShrines").DESCRIPTIONS; OPTIONSALT = CardCrawlGame.languagePack.getEventString("downfall:EvilShrines").OPTIONS; - this.imageEventText.setDialogOption(OPTIONSALT[3], new Malfunctioning()); - this.imageEventText.setDialogOption(OPTIONS[0]); + if (AbstractDungeon.ascensionLevel >= 15){ + lifeCost = MathUtils.ceil((float) AbstractDungeon.player.maxHealth * 0.15F); + } else { + lifeCost = MathUtils.ceil((float) AbstractDungeon.player.maxHealth * 0.10F); + } + if (AbstractDungeon.player.masterDeck.getPurgeableCards().size() >= 2) { + this.imageEventText.setDialogOption(OPTIONSALT[3] + lifeCost + OPTIONSALT[5]); + } else { + this.imageEventText.setDialogOption(OPTIONS[6], true); + } + this.imageEventText.setDialogOption(OPTIONS[0]); this.imageEventText.setDialogOption(OPTIONS[1]); } @@ -60,47 +67,45 @@ public void onEnterRoom() { public void update() { super.update(); + if (cardCount == 1){ + + // SlimeboundMod.logger.info("hit the card count 1 section"); + if (!AbstractDungeon.isScreenUp && !AbstractDungeon.gridSelectScreen.selectedCards.isEmpty()) { + AbstractCard c = (AbstractCard)AbstractDungeon.gridSelectScreen.selectedCards.get(0); + AbstractDungeon.player.masterDeck.removeCard(c); + AbstractDungeon.transformCard(c, false, AbstractDungeon.miscRng); + AbstractCard transCard = AbstractDungeon.getTransformedCard(); + logMetricTransformCard("Transmorgrifier", "Transformed", c, transCard); + AbstractDungeon.effectsQueue.add(new ShowCardAndObtainEffect(transCard, (float)Settings.WIDTH / 2.0F, (float)Settings.HEIGHT * .66F)); + AbstractDungeon.gridSelectScreen.selectedCards.clear(); + } + } + else if (AbstractDungeon.gridSelectScreen.selectedCards.size() == cardCount && !this.cardsSelected && cardCount > 0) { + // SlimeboundMod.logger.info("hit the card count more than 1 section"); + this.cardsSelected = true; + float displayCount = 0.0F; + + // SlimeboundMod.logger.info("selected cards size:" + AbstractDungeon.gridSelectScreen.selectedCards.size()); + for (AbstractCard card: AbstractDungeon.gridSelectScreen.selectedCards){ + + // SlimeboundMod.logger.info(card.name); + card.untip(); + card.unhover(); + AbstractDungeon.player.masterDeck.removeCard(card); + AbstractDungeon.transformCard(card, false, AbstractDungeon.miscRng); + AbstractCard c = AbstractDungeon.getTransformedCard(); + SlimeboundMod.logger.info(c.name); + obtainedCards.add(c.cardID); + if (AbstractDungeon.screen != AbstractDungeon.CurrentScreen.TRANSFORM) { + AbstractDungeon.topLevelEffectsQueue.add(new ShowCardAndObtainEffect(c.makeCopy(), (float) Settings.WIDTH / 3.0F + displayCount, (float) Settings.HEIGHT / 2.0F, false)); + displayCount += (float) Settings.WIDTH / 6.0F; + } + } - if ((!AbstractDungeon.isScreenUp) && (!AbstractDungeon.gridSelectScreen.selectedCards.isEmpty())) { - AbstractCard c = (AbstractCard) AbstractDungeon.gridSelectScreen.selectedCards.get(0); - removedCards.add(c.cardID); - - AbstractDungeon.player.masterDeck.removeCard(c); - - AbstractDungeon.transformCard(c, false, AbstractDungeon.miscRng); - AbstractCard transCard = AbstractDungeon.getTransformedCard(); - obtainedCards.add(transCard.cardID); - - AbstractDungeon.effectsQueue.add(new com.megacrit.cardcrawl.vfx.cardManip.ShowCardAndObtainEffect(transCard, com.megacrit.cardcrawl.core.Settings.WIDTH * 0.25F, com.megacrit.cardcrawl.core.Settings.HEIGHT / 2.0F)); - - AbstractDungeon.gridSelectScreen.selectedCards.clear(); - if (bonusShrine3){ - AbstractCard curse = new Malfunctioning(); - AbstractDungeon.effectList.add(new ShowCardAndObtainEffect(curse, (float) (Settings.WIDTH * .5F), (float) (Settings.HEIGHT / 2)));// 66 - obtainedCards.add(curse.cardID); - - logMetricTransformCards(ID, "Desecrated", removedCards, obtainedCards); - - } else if (bonusShrine && !bonusShrine2){ - bonusShrine = false; - bonusShrine2 = true; - AbstractDungeon.gridSelectScreen.open( - com.megacrit.cardcrawl.cards.CardGroup.getGroupWithoutBottledCards(AbstractDungeon.player.masterDeck - .getPurgeableCards()), 1, OPTIONS[2], false, true, false, false); - - } else if (bonusShrine2){ - bonusShrine = false; - bonusShrine2 = false; - bonusShrine3 = true; - AbstractDungeon.gridSelectScreen.open( - com.megacrit.cardcrawl.cards.CardGroup.getGroupWithoutBottledCards(AbstractDungeon.player.masterDeck - .getPurgeableCards()), 1, OPTIONS[2], false, true, false, false); - } else { - logMetricTransformCards(ID, "Transformed", removedCards, obtainedCards); + AbstractDungeon.gridSelectScreen.selectedCards.clear(); + AbstractDungeon.getCurrRoom().rewardPopOutTimer = 0.25F; } - } - } protected void buttonEffect(int buttonPressed) { @@ -112,35 +117,27 @@ protected void buttonEffect(int buttonPressed) { switch (buttonPressed) { case 0: - removedCards.clear(); + AbstractDungeon.player.damage(new DamageInfo(null, this.lifeCost)); + cardCount = 2; obtainedCards.clear(); - bonusShrine = true; this.screen = CUR_SCREEN.COMPLETE; - + this.transform(cardCount); this.imageEventText.updateBodyText(DESCRIPTIONSALT[0]); - - AbstractDungeon.gridSelectScreen.open( - com.megacrit.cardcrawl.cards.CardGroup.getGroupWithoutBottledCards(AbstractDungeon.player.masterDeck - .getPurgeableCards()), 1, OPTIONS[2], false, true, false, false); - - this.imageEventText.updateDialogOption(0, OPTIONS[1]); - this.imageEventText.clearRemainingOptions(); break; case 1: - removedCards.clear(); + cardCount = 1; obtainedCards.clear(); - this.screen = CUR_SCREEN.COMPLETE; - - this.imageEventText.updateBodyText(DIALOG_2); + this.screen = CUR_SCREEN.COMPLETE; AbstractDungeon.gridSelectScreen.open( com.megacrit.cardcrawl.cards.CardGroup.getGroupWithoutBottledCards(AbstractDungeon.player.masterDeck - .getPurgeableCards()), 1, OPTIONS[2], false, true, false, false); + .getPurgeableCards()), cardCount, OPTIONS[2], false, true, false, false); + this.imageEventText.updateBodyText(DIALOG_2); this.imageEventText.updateDialogOption(0, OPTIONS[1]); this.imageEventText.clearRemainingOptions(); @@ -172,6 +169,17 @@ protected void buttonEffect(int buttonPressed) { } + private void transform(int count) { + if (!AbstractDungeon.isScreenUp) { + AbstractDungeon.gridSelectScreen.open(AbstractDungeon.player.masterDeck.getPurgeableCards(), count, CardCrawlGame.languagePack.getEventString("Drug Dealer").OPTIONS[5], false, false, false, false); + } else { + AbstractDungeon.dynamicBanner.hide(); + AbstractDungeon.previousScreen = AbstractDungeon.screen; + AbstractDungeon.gridSelectScreen.open(AbstractDungeon.player.masterDeck.getPurgeableCards(), count, CardCrawlGame.languagePack.getEventString("Drug Dealer").OPTIONS[5], false, false, false, false); + } + + } + private static enum CUR_SCREEN { INTRO, COMPLETE; @@ -181,6 +189,4 @@ private CUR_SCREEN() { } } -} - - +} \ No newline at end of file diff --git a/src/main/java/downfall/events/shrines_evil/UpgradeShrineEvil.java b/src/main/java/downfall/events/shrines_evil/UpgradeShrineEvil.java index 573cff15e1..5dbaeb8c0b 100644 --- a/src/main/java/downfall/events/shrines_evil/UpgradeShrineEvil.java +++ b/src/main/java/downfall/events/shrines_evil/UpgradeShrineEvil.java @@ -3,7 +3,6 @@ import com.megacrit.cardcrawl.cards.curses.Pain; -import downfall.cards.curses.Sapped; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.core.Settings; diff --git a/src/main/java/downfall/mainmenu/MainMenuAdPatch.java b/src/main/java/downfall/mainmenu/MainMenuAdPatch.java index e1177442eb..ad43d3483c 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/AwakenedOneMirror.java b/src/main/java/downfall/monsters/AwakenedOneMirror.java new file mode 100644 index 0000000000..c773e0e017 --- /dev/null +++ b/src/main/java/downfall/monsters/AwakenedOneMirror.java @@ -0,0 +1,413 @@ +package downfall.monsters; + + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.Color; +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.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.ClearCardQueueAction; +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.VFXAction; +import com.megacrit.cardcrawl.actions.common.*; +import com.megacrit.cardcrawl.actions.unique.CanLoseAction; +import com.megacrit.cardcrawl.actions.utility.SFXAction; +import com.megacrit.cardcrawl.actions.utility.WaitAction; +import com.megacrit.cardcrawl.cards.DamageInfo; +import com.megacrit.cardcrawl.cards.status.VoidCard; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.helpers.ModHelper; +import com.megacrit.cardcrawl.localization.MonsterStrings; +import com.megacrit.cardcrawl.monsters.AbstractMonster; +import com.megacrit.cardcrawl.monsters.exordium.Cultist; +import com.megacrit.cardcrawl.powers.*; +import com.megacrit.cardcrawl.relics.AbstractRelic; +import com.megacrit.cardcrawl.unlock.UnlockTracker; +import com.megacrit.cardcrawl.vfx.AwakenedEyeParticle; +import com.megacrit.cardcrawl.vfx.AwakenedWingParticle; +import com.megacrit.cardcrawl.vfx.SpeechBubble; +import com.megacrit.cardcrawl.vfx.combat.IntenseZoomEffect; +import com.megacrit.cardcrawl.vfx.combat.ShockWaveEffect; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import java.util.ArrayList; +import java.util.Iterator; + +public class AwakenedOneMirror extends AbstractMonster { + private static final Logger logger = LogManager.getLogger(com.megacrit.cardcrawl.monsters.beyond.AwakenedOne.class.getName()); + public static final String ID = "AwakenedOne"; + private static final MonsterStrings monsterStrings; + public static final String NAME; + public static final String[] MOVES; + public static final String[] DIALOG; + private boolean form1 = true; + private boolean firstTurn = true; + private boolean saidPower = false; + public static final int STAGE_1_HP = 300; + public static final int STAGE_2_HP = 300; + public static final int A_9_STAGE_1_HP = 320; + public static final int A_9_STAGE_2_HP = 320; + private static final int A_4_STR = 2; + private static final byte SLASH = 1; + private static final byte SOUL_STRIKE = 2; + private static final byte REBIRTH = 3; + private static final String SS_NAME; + private static final int SLASH_DMG = 20; + private static final int SS_DMG = 6; + private static final int SS_AMT = 4; + private static final int REGEN_AMT = 10; + private static final int STR_AMT = 1; + private static final byte DARK_ECHO = 5; + private static final byte SLUDGE = 6; + private static final byte TACKLE = 8; + private static final String DARK_ECHO_NAME; + private static final String SLUDGE_NAME; + private static final int ECHO_DMG = 40; + private static final int SLUDGE_DMG = 18; + private static final int TACKLE_DMG = 10; + private static final int TACKLE_AMT = 3; + private float fireTimer = 0.0F; + private static final float FIRE_TIME = 0.1F; + private Bone eye; + private Bone back; + private boolean animateParticles = false; + private ArrayList wParticles = new ArrayList(); + + public AwakenedOneMirror(float x, float y) { + super(NAME, "AwakenedOne", 150, 40.0F, -30.0F, 460.0F, 250.0F, (String)null, x, y); + if (AbstractDungeon.ascensionLevel >= 9) { + this.setHp(160); + } else { + this.setHp(150); + } + + this.loadAnimation("images/monsters/theForest/awakenedOne/skeleton.atlas", "images/monsters/theForest/awakenedOne/skeleton.json", 1.0F); + 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.type = EnemyType.BOSS; + this.dialogX = -200.0F * Settings.scale; + this.dialogY = 10.0F * Settings.scale; + this.damage.add(new DamageInfo(this, 15)); + this.damage.add(new DamageInfo(this, 4)); + this.damage.add(new DamageInfo(this, 30)); + this.damage.add(new DamageInfo(this, 12)); + this.damage.add(new DamageInfo(this, 6)); + } + + public void usePreBattleAction() { + CardCrawlGame.music.unsilenceBGM(); + AbstractDungeon.scene.fadeOutAmbiance(); + AbstractDungeon.getCurrRoom().playBgmInstantly("BOSS_BEYOND"); + AbstractDungeon.getCurrRoom().cannotLose = true; + if (AbstractDungeon.ascensionLevel >= 19) { + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this, this, new RegenerateMonsterPower(this, 10))); + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this, this, new CuriosityPower(this, 2))); + } else { + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this, this, new RegenerateMonsterPower(this, 5))); + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this, this, new CuriosityPower(this, 1))); + } + + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this, this, new UnawakenedPower(this))); + if (AbstractDungeon.ascensionLevel >= 4) { + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this, this, new StrengthPower(this, 2), 2)); + } + + UnlockTracker.markBossAsSeen("CROW"); + } + + public void takeTurn() { + int i; + label27: + switch (this.nextMove) { + case 1: + AbstractDungeon.actionManager.addToBottom(new SFXAction("MONSTER_AWAKENED_POUNCE")); + AbstractDungeon.actionManager.addToBottom(new ChangeStateAction(this, "ATTACK_1")); + AbstractDungeon.actionManager.addToBottom(new WaitAction(0.3F)); + AbstractDungeon.actionManager.addToBottom(new DamageAction(AbstractDungeon.player, (DamageInfo)this.damage.get(0), AbstractGameAction.AttackEffect.SLASH_DIAGONAL)); + break; + case 2: + i = 0; + + while(true) { + if (i >= 4) { + break label27; + } + + AbstractDungeon.actionManager.addToBottom(new DamageAction(AbstractDungeon.player, (DamageInfo)this.damage.get(1), AbstractGameAction.AttackEffect.FIRE)); + ++i; + } + case 3: + AbstractDungeon.actionManager.addToBottom(new SFXAction("VO_AWAKENEDONE_1")); + AbstractDungeon.actionManager.addToBottom(new VFXAction(this, new IntenseZoomEffect(this.hb.cX, this.hb.cY, true), 0.05F, true)); + AbstractDungeon.actionManager.addToBottom(new ChangeStateAction(this, "REBIRTH")); + case 4: + case 7: + default: + break; + case 5: + AbstractDungeon.actionManager.addToBottom(new ChangeStateAction(this, "ATTACK_2")); + AbstractDungeon.actionManager.addToBottom(new WaitAction(0.1F)); + this.firstTurn = false; + AbstractDungeon.actionManager.addToBottom(new SFXAction("VO_AWAKENEDONE_3")); + AbstractDungeon.actionManager.addToBottom(new VFXAction(this, new ShockWaveEffect(this.hb.cX, this.hb.cY, new Color(0.1F, 0.0F, 0.2F, 1.0F), ShockWaveEffect.ShockWaveType.CHAOTIC), 0.3F)); + AbstractDungeon.actionManager.addToBottom(new VFXAction(this, new ShockWaveEffect(this.hb.cX, this.hb.cY, new Color(0.3F, 0.2F, 0.4F, 1.0F), ShockWaveEffect.ShockWaveType.CHAOTIC), 1.0F)); + AbstractDungeon.actionManager.addToBottom(new DamageAction(AbstractDungeon.player, (DamageInfo)this.damage.get(2), AbstractGameAction.AttackEffect.SMASH)); + break; + case 6: + AbstractDungeon.actionManager.addToBottom(new ChangeStateAction(this, "ATTACK_2")); + AbstractDungeon.actionManager.addToBottom(new WaitAction(0.3F)); + AbstractDungeon.actionManager.addToBottom(new DamageAction(AbstractDungeon.player, (DamageInfo)this.damage.get(3), AbstractGameAction.AttackEffect.POISON)); + AbstractDungeon.actionManager.addToBottom(new MakeTempCardInDrawPileAction(new VoidCard(), 1, true, true)); + break; + case 8: + AbstractDungeon.actionManager.addToBottom(new SFXAction("MONSTER_AWAKENED_ATTACK")); + + for(i = 0; i < 3; ++i) { + AbstractDungeon.actionManager.addToBottom(new AnimateFastAttackAction(this)); + AbstractDungeon.actionManager.addToBottom(new WaitAction(0.06F)); + AbstractDungeon.actionManager.addToBottom(new DamageAction(AbstractDungeon.player, (DamageInfo)this.damage.get(4), AbstractGameAction.AttackEffect.FIRE, true)); + } + } + + AbstractDungeon.actionManager.addToBottom(new RollMoveAction(this)); + } + + public void changeState(String key) { + switch (key) { + case "REBIRTH": + if (AbstractDungeon.ascensionLevel >= 9) { + this.maxHealth = 160; + } else { + this.maxHealth = 150; + } + + if (Settings.isEndless && AbstractDungeon.player.hasBlight("ToughEnemies")) { + float mod = AbstractDungeon.player.getBlight("ToughEnemies").effectFloat(); + this.maxHealth = (int)((float)this.maxHealth * mod); + } + + if (ModHelper.isModEnabled("MonsterHunter")) { + this.currentHealth = (int)((float)this.currentHealth * 1.5F); + } + + this.state.setAnimation(0, "Idle_2", true); + this.halfDead = false; + this.animateParticles = true; + AbstractDungeon.actionManager.addToBottom(new HealAction(this, this, this.maxHealth)); + AbstractDungeon.actionManager.addToBottom(new CanLoseAction()); + break; + case "ATTACK_1": + this.state.setAnimation(0, "Attack_1", false); + this.state.addAnimation(0, "Idle_1", true, 0.0F); + break; + case "ATTACK_2": + this.state.setAnimation(0, "Attack_2", false); + this.state.addAnimation(0, "Idle_2", true, 0.0F); + } + + } + + protected void getMove(int num) { + if (this.form1) { + if (this.firstTurn) { + this.setMove((byte)1, Intent.ATTACK, 15); + this.firstTurn = false; + return; + } + + if (num < 25) { + if (!this.lastMove((byte)2)) { + this.setMove(SS_NAME, (byte)2, Intent.ATTACK, 4, 4, true); + } else { + this.setMove((byte)1, Intent.ATTACK, 15); + } + } else if (!this.lastTwoMoves((byte)1)) { + this.setMove((byte)1, Intent.ATTACK, 15); + } else { + this.setMove(SS_NAME, (byte)2, Intent.ATTACK, 4, 4, true); + } + } else { + if (this.firstTurn) { + this.setMove(DARK_ECHO_NAME, (byte)5, Intent.ATTACK, 30); + return; + } + + if (num < 50) { + if (!this.lastTwoMoves((byte)6)) { + this.setMove(SLUDGE_NAME, (byte)6, Intent.ATTACK_DEBUFF, 12); + } else { + this.setMove((byte)8, Intent.ATTACK, 6, 3, true); + } + } else if (!this.lastTwoMoves((byte)8)) { + this.setMove((byte)8, Intent.ATTACK, 6, 3, true); + } else { + this.setMove(SLUDGE_NAME, (byte)6, Intent.ATTACK_DEBUFF, 12); + } + } + + } + + public void damage(DamageInfo info) { + super.damage(info); + if (info.owner != null && info.type != DamageInfo.DamageType.THORNS && info.output > 0) { + 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); + } + } + + if (this.currentHealth <= 0 && !this.halfDead) { + if (AbstractDungeon.getCurrRoom().cannotLose) { + this.halfDead = true; + } + + Iterator s = this.powers.iterator(); + + AbstractPower p; + while(s.hasNext()) { + p = (AbstractPower)s.next(); + p.onDeath(); + } + + s = AbstractDungeon.player.relics.iterator(); + + while(s.hasNext()) { + AbstractRelic r = (AbstractRelic)s.next(); + r.onMonsterDeath(this); + } + + this.addToTop(new ClearCardQueueAction()); + s = this.powers.iterator(); + + while(true) { + do { + if (!s.hasNext()) { + this.setMove((byte)3, Intent.UNKNOWN); + this.createIntent(); + AbstractDungeon.actionManager.addToBottom(new ShoutAction(this, DIALOG[0])); + AbstractDungeon.actionManager.addToBottom(new SetMoveAction(this, (byte)3, Intent.UNKNOWN)); + this.applyPowers(); + this.firstTurn = true; + this.form1 = false; + if (GameActionManager.turn <= 1) { + UnlockTracker.unlockAchievement("YOU_ARE_NOTHING"); + } + + return; + } + + p = (AbstractPower)s.next(); + } while(p.type != AbstractPower.PowerType.DEBUFF && !p.ID.equals("Curiosity") && !p.ID.equals("Unawakened") && !p.ID.equals("Shackled")); + + s.remove(); + } + } + } + + public void update() { + super.update(); + if (!this.isDying && this.animateParticles) { + this.fireTimer -= Gdx.graphics.getDeltaTime(); + if (this.fireTimer < 0.0F) { + this.fireTimer = 0.1F; + AbstractDungeon.effectList.add(new AwakenedEyeParticle(this.skeleton.getX() + this.eye.getWorldX(), this.skeleton.getY() + this.eye.getWorldY())); + this.wParticles.add(new AwakenedWingParticle()); + } + } + + Iterator p = this.wParticles.iterator(); + + while(p.hasNext()) { + AwakenedWingParticle e = (AwakenedWingParticle)p.next(); + e.update(); + if (e.isDone) { + p.remove(); + } + } + + } + + public void render(SpriteBatch sb) { + Iterator var2 = this.wParticles.iterator(); + + AwakenedWingParticle p; + while(var2.hasNext()) { + p = (AwakenedWingParticle)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 = (AwakenedWingParticle)var2.next(); + if (!p.renderBehind) { + p.render(sb, this.skeleton.getX() + this.back.getWorldX(), this.skeleton.getY() + this.back.getWorldY()); + } + } + + } + + public void die() { + if (!AbstractDungeon.getCurrRoom().cannotLose) { + super.die(); + this.useFastShakeAnimation(5.0F); + CardCrawlGame.screenShake.rumble(4.0F); + if (this.saidPower) { + CardCrawlGame.sound.play("VO_AWAKENEDONE_2"); + AbstractDungeon.effectList.add(new SpeechBubble(this.hb.cX + this.dialogX, this.hb.cY + this.dialogY, 2.5F, DIALOG[1], false)); + this.saidPower = true; + } + + Iterator var1 = AbstractDungeon.getCurrRoom().monsters.monsters.iterator(); + + while(var1.hasNext()) { + AbstractMonster m = (AbstractMonster)var1.next(); + if (!m.isDying && m instanceof Cultist) { + AbstractDungeon.actionManager.addToBottom(new EscapeAction(m)); + } + } + + this.onBossVictoryLogic(); + // UnlockTracker.hardUnlockOverride("CROW"); + //UnlockTracker.unlockAchievement("CROW"); + // this.onFinalBossVictoryLogic(); + } + + } + + static { + monsterStrings = CardCrawlGame.languagePack.getMonsterStrings("AwakenedOne"); + NAME = monsterStrings.NAME; + MOVES = monsterStrings.MOVES; + DIALOG = monsterStrings.DIALOG; + SS_NAME = MOVES[0]; + DARK_ECHO_NAME = MOVES[1]; + SLUDGE_NAME = MOVES[3]; + } +} diff --git a/src/main/java/downfall/monsters/DoomedDagger.java b/src/main/java/downfall/monsters/DoomedDagger.java index aafb986949..d8b5a89f16 100644 --- a/src/main/java/downfall/monsters/DoomedDagger.java +++ b/src/main/java/downfall/monsters/DoomedDagger.java @@ -23,7 +23,7 @@ public class DoomedDagger extends AbstractMonster{ public boolean firstMove = true; public DoomedDagger(float x, float y) { - super(NAME, ID, AbstractDungeon.monsterHpRng.random(50, 60), 0.0F, -50.0F, 140.0F, 130.0F, null, x, y); + super(NAME, ID, AbstractDungeon.monsterHpRng.random(45, 55), 0.0F, -50.0F, 140.0F, 130.0F, null, x, y); this.initializeAnimation(); this.damage.add(new DamageInfo(this, 9)); this.damage.add(new DamageInfo(this, 25)); diff --git a/src/main/java/downfall/monsters/FleeingMerchant.java b/src/main/java/downfall/monsters/FleeingMerchant.java index 7e28ff9678..9915222ab1 100644 --- a/src/main/java/downfall/monsters/FleeingMerchant.java +++ b/src/main/java/downfall/monsters/FleeingMerchant.java @@ -70,7 +70,7 @@ public class FleeingMerchant extends AbstractMonster { public static final String SOULSTEALNAME = CardCrawlGame.languagePack.getMonsterStrings(ID).MOVES[0]; public static final float DRAW_X = Settings.WIDTH * 0.5F + 34.0F * Settings.scale; public static final float DRAW_Y = AbstractDungeon.floorY - 109.0F * Settings.scale; - public static final int START_HP = 400; + public static int START_HP = 400; public static int CURRENT_HP = 400; public static int CURRENT_STRENGTH = 0; @@ -86,13 +86,14 @@ public class FleeingMerchant extends AbstractMonster { private static byte ESCAPE = 2; private static byte SOULSTEAL = 3; + private int multi; + private int turn = 0; private boolean boss = false; public FleeingMerchant() { super(NAME, ID, START_HP, -10.0F, -30.0F, 180.0F, 150.0F, null, 0.0F, 0.0F); - drawX = 1260.0F * Settings.scale; drawY = AbstractDungeon.floorY + 30.0F * Settings.scale; @@ -117,7 +118,23 @@ public FleeingMerchant() { halfDead = false; damage.add(new DamageInfo(this, 2)); - setHp(400); + + if (AbstractDungeon.ascensionLevel >= 8) { + setHp(400); + } else { + setHp(360); + if (CURRENT_HP == 400) CURRENT_HP = 360; + } + + if (AbstractDungeon.ascensionLevel >= 3) { + this.multi = 5; + if (AbstractDungeon.ascensionLevel >= 18) { + this.multi++; + } + } else { + this.multi = 4; + } + this.currentHealth = CURRENT_HP; } @@ -140,6 +157,8 @@ public void usePreBattleAction() { //AbstractDungeon.actionManager.addToTop(new TalkAction(this, (abuse >= 3 ? DIALOG[2] : DIALOG[0]), 0.5F, 3.0F)); + + if (CURRENT_STRENGTH > 0) { AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this, this, new StrengthPower(this, CURRENT_STRENGTH), CURRENT_STRENGTH)); } @@ -184,7 +203,7 @@ public void takeTurn() { } else if (nextMove == ATTACK) { this.addToBot(new MerchantThrowGoldAction(AbstractDungeon.player, this, 5, false)); this.addToBot(new ForceWaitAction(1.6f)); - for (int i = 0; i < 5; ++i) { + for (int i = 0; i < multi; ++i) { this.addToBot(new DamageAction(AbstractDungeon.player, damage.get(0), true)); } @@ -246,7 +265,7 @@ protected void getMove(int num) { return; } if (turn == 1) { - setMove(ATTACK, Intent.ATTACK, ((DamageInfo) this.damage.get(0)).base, 5, true); + setMove(ATTACK, Intent.ATTACK, ((DamageInfo) this.damage.get(0)).base, multi, true); return; } if (turn == 2) { @@ -265,7 +284,7 @@ public void die() { AbstractDungeon.getCurrRoom().rewardAllowed = false; AbstractDungeon.getCurrRoom().rewards.clear(); */ - int increaseGold = 150; + int increaseGold = 100; if (FleeingMerchant.CURRENT_SOULS > 0) increaseGold += FleeingMerchant.CURRENT_SOULS; diff --git a/src/main/java/downfall/monsters/LadyInBlue.java b/src/main/java/downfall/monsters/LadyInBlue.java index 81b8790d04..69c3a09df3 100644 --- a/src/main/java/downfall/monsters/LadyInBlue.java +++ b/src/main/java/downfall/monsters/LadyInBlue.java @@ -109,7 +109,7 @@ public void takeTurn() { AbstractDungeon.actionManager.addToBottom(new ChangeStateAction(this, "ATTACK")); usedEmergency = true; addToBot(new VFXAction(new PotionThrowEffect("downfallResources/images/vfx/GhostInAJar.png", this.hb.cX, this.hb.cY, this.hb.cX, this.hb.cY, 2F, 0.6F, false, true), 0.6F)); - AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this, this, new IntangiblePower(this, 1), 1)); + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this, this, new IntangiblePlayerPower(this, 1), 1)); addToBot(new VFXAction(new PotionThrowEffect("downfallResources/images/vfx/FairyinaBottle.png", this.hb.cX, this.hb.cY, this.hb.cX, this.hb.cY, 2F, 0.6F, false, true), 0.6F)); AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this, this, new FairyPotionPower(this, 1), 1)); break; diff --git a/src/main/java/downfall/monsters/NeowBoss.java b/src/main/java/downfall/monsters/NeowBoss.java index 95069e6a55..209454623f 100644 --- a/src/main/java/downfall/monsters/NeowBoss.java +++ b/src/main/java/downfall/monsters/NeowBoss.java @@ -8,13 +8,11 @@ import com.esotericsoftware.spine.AnimationState; 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.HealAction; -import com.megacrit.cardcrawl.actions.common.MakeTempCardInDrawPileAction; -import com.megacrit.cardcrawl.actions.common.RollMoveAction; +import com.megacrit.cardcrawl.actions.common.*; import com.megacrit.cardcrawl.actions.utility.SFXAction; import com.megacrit.cardcrawl.actions.utility.WaitAction; import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.cards.status.Wound; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; @@ -25,6 +23,7 @@ import downfall.actions.NeowRezAction; import downfall.downfallMod; import guardian.vfx.SmallLaserEffectColored; +import hermit.cards.ImpendingDoom; import java.util.ArrayList; @@ -82,7 +81,7 @@ public NeowBoss() { this.drawX += DRAWX_OFFSET; this.drawY += DRAWY_OFFSET; - type = EnemyType.ELITE; + type = EnemyType.NORMAL; this.baseDrawX = drawX; StrGain = 1; @@ -203,6 +202,11 @@ public void takeTurn() { AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(AbstractDungeon.player, this, new VulnerablePower(AbstractDungeon.player, 1, true), 1)); AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(AbstractDungeon.player, this, new WeakPower(AbstractDungeon.player, 1, true), 1)); AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(AbstractDungeon.player, this, new FrailPower(AbstractDungeon.player, 1, true), 1)); + if (AbstractDungeon.ascensionLevel >= 18) { + addToBot(new MakeTempCardInDrawPileAction((new ImpendingDoom()), 1, false, true)); + } else { + this.addToBot(new MakeTempCardInDiscardAction(new ImpendingDoom(), 1)); + } } else { escape(); } @@ -223,6 +227,9 @@ public void takeTurn() { AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(minion, this, new StrengthPower(minion, StrGain), StrGain)); AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(minion, this, new DexterityPower(minion, StrGain), StrGain)); AbstractDungeon.actionManager.addToBottom(new HealAction(minion, this, 30)); +// if (AbstractDungeon.ascensionLevel >= 18) { +// AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(minion, this, new ArtifactPower(minion, 1), 1)); +// } } else { escape(); addToBot(new AbstractGameAction() { diff --git a/src/main/java/downfall/monsters/NeowBossFinal.java b/src/main/java/downfall/monsters/NeowBossFinal.java index 422ca2c4b9..4896488268 100644 --- a/src/main/java/downfall/monsters/NeowBossFinal.java +++ b/src/main/java/downfall/monsters/NeowBossFinal.java @@ -81,9 +81,9 @@ public NeowBossFinal() { this.baseDrawX = drawX; if (AbstractDungeon.ascensionLevel >= 9) { - setHp(650); + setHp(800); } else { - setHp(600); + setHp(750); } AnimationState.TrackEntry e = this.state.setAnimation(0, "idle", true); @@ -100,10 +100,10 @@ public NeowBossFinal() { if (AbstractDungeon.ascensionLevel >= 4) { - this.damage.add(new DamageInfo(this, 12)); //Eye Beam Damage - 54 damage first cycle + 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, 9)); //Eye Beam Damage - 42 damage first cycle + 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 } @@ -160,7 +160,7 @@ public void usePreBattleAction() { int invincibleAmt = 250; if (AbstractDungeon.ascensionLevel >= 19) { - // invincibleAmt -= 50; + 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) { @@ -176,13 +176,13 @@ public void usePreBattleAction() { } 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++) { @@ -243,17 +243,16 @@ public void takeTurn() { //AbstractDungeon.actionManager.addToBottom(new RemoveSpecificPowerAction(this, this, "Shackled")); - // god of life maxes out at 6 (7 on a19 because of the higher starting healing) now - if (this.hasPower(NeowInvulnerablePower.POWER_ID)) { - int buf = this.getPower(NeowInvulnerablePower.POWER_ID).amount; - if (buf < 6) { - AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this, this, new NeowInvulnerablePower(this, 2))); - } - } + // nerfed healing again + //Neow will only gain extra God of Life ONCE similar to the corrupt heart - if (!this.hasPower(NeowInvulnerablePower.POWER_ID)) { - AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this, this, new NeowInvulnerablePower(this, 2))); - } +// 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)); @@ -277,12 +276,13 @@ public void takeTurn() { } break; case 1: + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(this, this, new NeowInvulnerablePower(this, 1))); if (AbstractDungeon.ascensionLevel >= 19) { - AbstractDungeon.actionManager.addToBottom(new HealAction(this, this, 100)); + 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, 75)); + 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. } diff --git a/src/main/java/downfall/monsters/NeowBossSelector.java b/src/main/java/downfall/monsters/NeowBossSelector.java index d667c1dc62..c6b40e5047 100644 --- a/src/main/java/downfall/monsters/NeowBossSelector.java +++ b/src/main/java/downfall/monsters/NeowBossSelector.java @@ -56,12 +56,15 @@ public static ArrayList returnBossOptions() { ArrayList results = new ArrayList<>(); ArrayList bosses = new ArrayList<>(); + /* SlimeboundMod.logger.info("Bosses! " + downfallMod.Act1BossFaced + " " + validClass(downfallMod.Act1BossFaced) + downfallMod.Act2BossFaced + " " + validClass(downfallMod.Act2BossFaced) + downfallMod.Act3BossFaced + " " + validClass(downfallMod.Act3BossFaced)); + */ if (validClass(downfallMod.Act1BossFaced) && validClass(downfallMod.Act2BossFaced) && validClass(downfallMod.Act3BossFaced)) { + results.add(charbossToGauntlet(downfallMod.Act1BossFaced)); results.add(charbossToGauntlet(downfallMod.Act2BossFaced)); results.add(charbossToGauntlet(downfallMod.Act3BossFaced)); diff --git a/src/main/java/downfall/monsters/gauntletbosses/Defect.java b/src/main/java/downfall/monsters/gauntletbosses/Defect.java index 86792397db..fcb8664078 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/Hermit.java b/src/main/java/downfall/monsters/gauntletbosses/Hermit.java index e0c5fc664e..f4de395121 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 2052298d20..29b9c7eb8d 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,8 +111,12 @@ public void takeTurn() { private void bossMove() { int rnd = AbstractDungeon.cardRandomRng.random(0, 3); - if (turnNum > 5) { - rnd = AbstractDungeon.cardRandomRng.random(0, 4); + if (this.hasPower(EnemyDemonFormPower.POWER_ID)) { + if (rnd == 2) { + while (rnd == 2) { + rnd = AbstractDungeon.cardRandomRng.random(0, 3); + } + } } switch (rnd) { case 0: @@ -124,10 +135,6 @@ private void bossMove() { isAttacking = true; setMove(moveName(Bash.ID), (byte) 4, Intent.ATTACK_DEBUFF, this.damage.get(2).base); break; - case 4: - isAttacking = true; - setMove(moveName(Bash.ID), (byte) 4, Intent.ATTACK_DEBUFF, this.damage.get(2).base); - break; } } @@ -135,7 +142,15 @@ 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 ad33e7ebd3..99f53d3574 100644 --- a/src/main/java/downfall/monsters/gauntletbosses/Silent.java +++ b/src/main/java/downfall/monsters/gauntletbosses/Silent.java @@ -10,10 +10,8 @@ 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.green.Defend_Green; -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.green.*; +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,8 +90,16 @@ public void takeTurn() { addToBot(new GainBlockAction(this, 11)); break; case 5: - addToBot(new ApplyPowerAction(this, this, new BossIntangiblePower(this, 2), 2)); - addToBot(new ApplyPowerAction(this, this, new EnemyWraithFormPower(this, -1), -1)); + + if (AbstractDungeon.ascensionLevel >= 18) { + addToBot(new ApplyPowerAction(this, this, new ThornsPower(this, 5))); + } + + if (AbstractDungeon.ascensionLevel < 18) { + addToBot(new ApplyPowerAction(this, this, new ThornsPower(this, 3))); + } + + //addToBot(new ApplyPowerAction(this, this, new EnemyWraithFormPower(this, -1), -1)); break; } @@ -130,7 +136,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(Caltrops.ID), (byte) 5, Intent.BUFF); + } + + if (AbstractDungeon.ascensionLevel >= 18) { + setMove(moveName(Caltrops.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 bc95ff6db6..992db861ca 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 324741e43f..40efccf07d 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 f742bf6900..b7c06dbee8 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 700ab5dbdb..1d4df32fb3 100644 --- a/src/main/java/downfall/patches/BanSharedContentPatch.java +++ b/src/main/java/downfall/patches/BanSharedContentPatch.java @@ -5,14 +5,16 @@ import automaton.relics.BronzeIdol; import automaton.relics.DecasWashers; import automaton.relics.DonusWashers; -import automaton.relics.MakeshiftBattery; +import awakenedOne.AwakenedOneChar; +import awakenedOne.potions.CultistsDelight; +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.potions.TempHPPotion; import collector.relics.*; import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; import com.megacrit.cardcrawl.characters.AbstractPlayer; @@ -20,13 +22,12 @@ 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.characters.GremlinCharacter; import gremlin.potions.WizPotion; -import gremlin.relics.ImpeccablePecs; import gremlin.relics.PricklyShields; import gremlin.relics.SupplyScroll; import guardian.characters.GuardianCharacter; @@ -34,6 +35,7 @@ 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; @@ -41,16 +43,12 @@ 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; import theHexaghost.TheHexaghost; -import theHexaghost.potions.SoulburnPotion; -import champ.potions.CounterstrikePotion; import theHexaghost.relics.BolsterEngine; import theHexaghost.relics.Sixitude; @@ -60,11 +58,6 @@ import java.util.Map; public class BanSharedContentPatch { - private static Map> runLockedPotions = new HashMap<>(); - - public static void registerRunLockedPotion(AbstractPlayer.PlayerClass playerClass, String potionId) { - runLockedPotions.computeIfAbsent(playerClass, _ignore -> new ArrayList<>()).add(potionId); - } @SpirePatch( clz = AbstractDungeon.class, @@ -143,7 +136,6 @@ public static void Postfix(AbstractDungeon __instance) { 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); @@ -151,7 +143,7 @@ public static void Postfix(AbstractDungeon __instance) { AbstractDungeon.curseCardPool.removeCard(PrideStandard.ID); AbstractDungeon.curseCardPool.removeCard(Malfunctioning.ID); AbstractDungeon.curseCardPool.removeCard(Scatterbrained.ID); - AbstractDungeon.curseCardPool.removeCard(Sapped.ID); + // AbstractDungeon.curseCardPool.removeCard(Sapped.ID); AbstractDungeon.srcCurseCardPool.removeCard(Aged.ID); AbstractDungeon.srcCurseCardPool.removeCard(Icky.ID); @@ -160,8 +152,9 @@ public static void Postfix(AbstractDungeon __instance) { AbstractDungeon.srcCurseCardPool.removeCard(PrideStandard.ID); AbstractDungeon.srcCurseCardPool.removeCard(Malfunctioning.ID); AbstractDungeon.srcCurseCardPool.removeCard(Scatterbrained.ID); - AbstractDungeon.srcCurseCardPool.removeCard(Sapped.ID); + // AbstractDungeon.srcCurseCardPool.removeCard(Sapped.ID); } + if (AbstractDungeon.player instanceof SlimeboundCharacter) { AbstractDungeon.colorlessCardPool.removeCard(SuperPrepareCrush.ID); AbstractDungeon.srcColorlessCardPool.removeCard(SuperPrepareCrush.ID); @@ -222,7 +215,7 @@ public static void Postfix(AbstractDungeon __instance) { AbstractDungeon.colorlessCardPool.removeCard(SuperWhirlingFlame.ID); AbstractDungeon.srcColorlessCardPool.removeCard(WhirlingFlame.ID); } - } + } } @@ -234,75 +227,113 @@ 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); + } - @SpirePatch( - clz = PotionHelper.class, - method = "initialize" - ) + if (!(AbstractDungeon.player instanceof AutomatonChar)) { + AbstractDungeon.relicsToRemoveOnStart.add(DecasWashers.ID); + AbstractDungeon.relicsToRemoveOnStart.add(DonusWashers.ID); + } - 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 - //todo: I'm thinking of just making all these potions character exclusive which fixes the compendium problem - //todo: 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); - // } + 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); + } + + } + } } + + //Potions have to be handled in addPotions() of base mod file } diff --git a/src/main/java/downfall/patches/BanStuffPatch.java b/src/main/java/downfall/patches/BanStuffPatch.java index bee017f487..fcecf119d3 100644 --- a/src/main/java/downfall/patches/BanStuffPatch.java +++ b/src/main/java/downfall/patches/BanStuffPatch.java @@ -1,12 +1,26 @@ package downfall.patches; +import automaton.potions.BurnAndBuffPotion; +import awakenedOne.AwakenedOneChar; +import awakenedOne.potions.CultistsDelight; +import basemod.BaseMod; import basemod.devcommands.relic.RelicRemove; +import champ.potions.CounterstrikePotion; +import com.badlogic.gdx.graphics.Color; 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.PrismaticShard; +import com.megacrit.cardcrawl.relics.*; +import downfall.downfallMod; import downfall.potions.CursedFountainPotion; +import expansioncontent.potions.BossPotion; import gremlin.patches.GremlinEnum; +import gremlin.potions.WizPotion; +import guardian.potions.BlockOnCardUsePotion; +import slimebound.potions.ThreeZeroPotion; +import sneckomod.potions.MuddlingPotion; +import theHexaghost.potions.SoulburnPotion; import static com.megacrit.cardcrawl.dungeons.AbstractDungeon.relicsToRemoveOnStart; import static hermit.characters.hermit.Enums.HERMIT; @@ -20,18 +34,32 @@ public static class PotionPatch { public static void Postfix(AbstractPlayer.PlayerClass chosenClass) { PotionHelper.potions.remove(CursedFountainPotion.POTION_ID); + if (!EvilModeCharacterSelect.evilMode && !downfallMod.contentSharing_potions) { + PotionHelper.potions.remove(BossPotion.POTION_ID); + PotionHelper.potions.remove(SoulburnPotion.POTION_ID); + PotionHelper.potions.remove(ThreeZeroPotion.POTION_ID); + PotionHelper.potions.remove(MuddlingPotion.POTION_ID); + PotionHelper.potions.remove(BlockOnCardUsePotion.POTION_ID); + PotionHelper.potions.remove(CounterstrikePotion.POTION_ID); + PotionHelper.potions.remove(WizPotion.POTION_ID); + PotionHelper.potions.remove(BurnAndBuffPotion.POTION_ID); + PotionHelper.potions.remove(CultistsDelight.POTION_ID); + } + if (chosenClass == GremlinEnum.GREMLIN) { - relicsToRemoveOnStart.add("Prismatic Shard"); + relicsToRemoveOnStart.add(PrismaticShard.ID); } - if (EvilModeCharacterSelect.evilMode || chosenClass == HERMIT) { - relicsToRemoveOnStart.add("Blue Candle"); - } + if (!downfallMod.disableBaseGameAdjustments) { + if (EvilModeCharacterSelect.evilMode || chosenClass == HERMIT) { + relicsToRemoveOnStart.add(BlueCandle.ID); + } - if (EvilModeCharacterSelect.evilMode) { - relicsToRemoveOnStart.add("Ectoplasm"); + if (chosenClass == AwakenedOneChar.Enums.AWAKENED_ONE && !downfallMod.disableBaseGameAdjustments) { + relicsToRemoveOnStart.add(BirdFacedUrn.ID); + relicsToRemoveOnStart.add(MummifiedHand.ID); + } } - } } } diff --git a/src/main/java/downfall/patches/BlackCandlePatch.java b/src/main/java/downfall/patches/BlackCandlePatch.java new file mode 100644 index 0000000000..3a484f8736 --- /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/BossSetPatch.java b/src/main/java/downfall/patches/BossSetPatch.java index eec61e843f..8dfda51bff 100644 --- a/src/main/java/downfall/patches/BossSetPatch.java +++ b/src/main/java/downfall/patches/BossSetPatch.java @@ -14,6 +14,7 @@ import com.megacrit.cardcrawl.dungeons.TheEnding; import com.megacrit.cardcrawl.helpers.ImageMaster; import com.megacrit.cardcrawl.map.DungeonMap; +import com.megacrit.cardcrawl.relics.Sling; import downfall.downfallMod; import downfall.monsters.NeowBoss; import downfall.monsters.NeowBossFinal; @@ -38,6 +39,8 @@ public static void Postfix(AbstractDungeon __instance, String key) { } if (__instance instanceof TheEnding && EvilModeCharacterSelect.evilMode) { + downfallMod.removeAnyRelicFromPools(Sling.ID); + AbstractDungeon.bossList.clear(); AbstractDungeon.bossList.add(NeowBossFinal.ID); diff --git a/src/main/java/downfall/patches/CNCardTextColorPatch.java b/src/main/java/downfall/patches/CNCardTextColorPatch.java index a52a363ee6..0e6dd35807 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/CharSelectCustomModePatches.java b/src/main/java/downfall/patches/CharSelectCustomModePatches.java new file mode 100644 index 0000000000..576c7fc850 --- /dev/null +++ b/src/main/java/downfall/patches/CharSelectCustomModePatches.java @@ -0,0 +1,215 @@ +package downfall.patches; + +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.helpers.*; +import com.megacrit.cardcrawl.helpers.input.InputHelper; +import com.megacrit.cardcrawl.localization.UIStrings; +import com.megacrit.cardcrawl.screens.charSelect.CharacterOption; +import downfall.downfallMod; +import gremlin.GremlinMod; +import slimebound.SlimeboundMod; +import sneckomod.SneckoMod; +import theHexaghost.HexaMod; + +import java.util.ArrayList; + +import static reskinContent.patches.CharacterSelectScreenPatches.allTextInfoX; + +public class CharSelectCustomModePatches { + public static final Hitbox challengeDownHitbox = new Hitbox(40.0f * Settings.scale * (0.01f + (1.0f - 0.019f)), 40.0f * Settings.scale); + public static final Hitbox showCharModesHitbox = new Hitbox(50.0f * Settings.scale * (0.01f + (1.0f - 0.019f)), 50.0f * Settings.scale); + + public static final ArrayList challengeTips = new ArrayList<>(); + public static final UIStrings uiStringsSneckoMode = CardCrawlGame.languagePack.getUIString("sneckomod:ChallengeMode"); + public static final UIStrings uiStringsHexaghostSealMode = CardCrawlGame.languagePack.getUIString("hexamod:SealMode"); + public static final UIStrings uiStringsGrems = CardCrawlGame.languagePack.getUIString("Gremlin:ArtMode"); + + @SpirePatch(clz = CharacterOption.class, method = "renderRelics") + public static class RenderBtn { + public static void Postfix(CharacterOption obj, SpriteBatch sb) { + + if (isOnAnyOverride(obj)) { + showCharModesHitbox.move(200.0f * Settings.scale, Settings.HEIGHT / 2.0f - 190.0f * Settings.scale); + + sb.draw(ImageMaster.SETTINGS_ICON, showCharModesHitbox.cX - 26F + allTextInfoX, showCharModesHitbox.cY - 24.0f * Settings.scale, 32.0F, 32.0F, 64.0F, 64.0F, Settings.scale, Settings.scale, 0F, 0, 0, 64, 64, false, false); + if (showCharModesHitbox.hovered) { + sb.setBlendFunction(770, 1); + sb.setColor(new Color(1.0F, 1.0F, 1.0F, 0.25F)); + sb.draw(ImageMaster.SETTINGS_ICON, showCharModesHitbox.cX - 26F + allTextInfoX, showCharModesHitbox.cY - 24.0f * Settings.scale, 32.0F, 32.0F, 64.0F, 64.0F, Settings.scale, Settings.scale, 0F, 0, 0, 64, 64, false, false); + sb.setBlendFunction(770, 771); + } + showCharModesHitbox.render(sb); + } + + if (downfallMod.ShowCharModes) { + if (isOnHexaghost(obj)) { + challengeDownHitbox.move(260.0f * Settings.scale, Settings.HEIGHT / 2.0f - 190.0f * Settings.scale); + challengeDownHitbox.render(sb); + + sb.setColor(Color.WHITE); + sb.draw(ImageMaster.CHECKBOX, challengeDownHitbox.cX - 26F + allTextInfoX, challengeDownHitbox.cY - 32.0f, 32.0f, 32.0f, 64.0f, 64.0f, Settings.scale * (0.01f + (1.0f - 0.019f)), Settings.scale * (0.01f + (1.0f - 0.019f)), 0.0f, 0, 0, 64, 64, false, false); + if (downfallMod.SixSealsQuest) { + sb.draw(ImageMaster.TICK, challengeDownHitbox.cX - 26F + allTextInfoX, challengeDownHitbox.cY - 32.0f, 32.0f, 32.0f, 64.0f, 64.0f, Settings.scale * (0.01f + (1.0f - 0.019f)), Settings.scale * (0.01f + (1.0f - 0.019f)), 0.0f, 0, 0, 64, 64, false, false); + } + FontHelper.renderSmartText(sb, FontHelper.tipHeaderFont, uiStringsHexaghostSealMode.TEXT[0], challengeDownHitbox.cX + 55f * Settings.scale + allTextInfoX, challengeDownHitbox.cY, Settings.BLUE_TEXT_COLOR); + } + else if (isOnSnecko(obj)) { + challengeDownHitbox.move(260.0f * Settings.scale, Settings.HEIGHT / 2.0f - 190.0f * Settings.scale); + challengeDownHitbox.render(sb); + + sb.setColor(Color.WHITE); + sb.draw(ImageMaster.CHECKBOX, challengeDownHitbox.cX - 26F + allTextInfoX, challengeDownHitbox.cY - 32.0f, 32.0f, 32.0f, 64.0f, 64.0f, Settings.scale * (0.01f + (1.0f - 0.019f)), Settings.scale * (0.01f + (1.0f - 0.019f)), 0.0f, 0, 0, 64, 64, false, false); + if (SneckoMod.pureSneckoMode) { + sb.draw(ImageMaster.TICK, challengeDownHitbox.cX - 26F + allTextInfoX, challengeDownHitbox.cY - 32.0f, 32.0f, 32.0f, 64.0f, 64.0f, Settings.scale * (0.01f + (1.0f - 0.019f)), Settings.scale * (0.01f + (1.0f - 0.019f)), 0.0f, 0, 0, 64, 64, false, false); + } + FontHelper.renderSmartText(sb, FontHelper.tipHeaderFont, uiStringsSneckoMode.TEXT[0], challengeDownHitbox.cX + 55f * Settings.scale + allTextInfoX, challengeDownHitbox.cY, Settings.BLUE_TEXT_COLOR); + } + else if (isOnGrems(obj)) { + challengeDownHitbox.move(260.0f * Settings.scale, Settings.HEIGHT / 2.0f - 190.0f * Settings.scale); + challengeDownHitbox.render(sb); + + sb.setColor(Color.WHITE); + sb.draw(ImageMaster.CHECKBOX, challengeDownHitbox.cX - 26F + allTextInfoX, challengeDownHitbox.cY - 32.0f, 32.0f, 32.0f, 64.0f, 64.0f, Settings.scale * (0.01f + (1.0f - 0.019f)), Settings.scale * (0.01f + (1.0f - 0.019f)), 0.0f, 0, 0, 64, 64, false, false); + if (GremlinMod.gremlinArtMode) { + sb.draw(ImageMaster.TICK, challengeDownHitbox.cX - 26F + allTextInfoX, challengeDownHitbox.cY - 32.0f, 32.0f, 32.0f, 64.0f, 64.0f, Settings.scale * (0.01f + (1.0f - 0.019f)), Settings.scale * (0.01f + (1.0f - 0.019f)), 0.0f, 0, 0, 64, 64, false, false); + } + FontHelper.renderSmartText(sb, FontHelper.tipHeaderFont, uiStringsGrems.TEXT[0], challengeDownHitbox.cX + 55f * Settings.scale + allTextInfoX, challengeDownHitbox.cY, Settings.BLUE_TEXT_COLOR); + } + } + } + } + + private static boolean isOnHexaghost(CharacterOption obj){ + if ( (obj.name.toLowerCase().contains("hexaghost") || obj.name.contains("hexaplasme") || obj.name.contains("ヘクサゴースト") || obj.name.contains("육각령") || obj.name.contains("Гексадух") || obj.name.contains("Hexafantasma") || obj.name.contains("六火亡魂")) && obj.selected) { + return true; + } + return false; + } + + private static boolean isOnSnecko(CharacterOption obj){ + if ( (obj.name.toLowerCase().contains("snecko") || obj.name.contains("蛇") || obj.name.contains("스네코") || obj.name.contains("Змекко") || obj.name.contains("Geckobra") ) && obj.selected) { + return true; + } + return false; + } + + private static boolean isOnGrems(CharacterOption obj){ + if ( (obj.name.toLowerCase().contains("gremlin") || obj.name.contains("地精") || obj.name.contains("군단") || obj.name.contains("Гремлины") || obj.name.contains("Les Diablotins") ) && obj.selected) { + return true; + } + return false; + } + + private static boolean isOnAnyOverride(CharacterOption obj){ + return isOnSnecko(obj) || isOnHexaghost(obj) || isOnGrems(obj); + } + + @SpirePatch(clz = CharacterOption.class, method = "updateHitbox") + public static class UpdateHitbox { + public static void Postfix(CharacterOption obj) { + + if (isOnAnyOverride(obj)) { + showCharModesHitbox.update(); + if (showCharModesHitbox.hovered) { + if (InputHelper.justClickedLeft) { + CardCrawlGame.sound.playA("UI_CLICK_1", -0.4f); + showCharModesHitbox.clickStarted = true; + } + if (showCharModesHitbox.clicked) { + downfallMod.ShowCharModes = !downfallMod.ShowCharModes; + showCharModesHitbox.clicked = false; + downfallMod.saveData(); + } + } + } + + + if (downfallMod.ShowCharModes) { + if (isOnHexaghost(obj)) { + challengeDownHitbox.update(); + if (challengeDownHitbox.hovered) { + if (challengeTips.isEmpty()) { + challengeTips.add(new PowerTip(uiStringsHexaghostSealMode.TEXT[0], uiStringsHexaghostSealMode.TEXT[1])); + } else { + challengeTips.get(0).header = uiStringsHexaghostSealMode.TEXT[0]; + challengeTips.get(0).body = uiStringsHexaghostSealMode.TEXT[1]; + } + if (InputHelper.mX < 1400.0f * Settings.scale) { + TipHelper.queuePowerTips(InputHelper.mX + 60.0f * Settings.scale, InputHelper.mY - 50.0f * Settings.scale, challengeTips); + } else { + TipHelper.queuePowerTips(InputHelper.mX - 350.0f * Settings.scale, InputHelper.mY - 50.0f * Settings.scale, challengeTips); + } + + if (InputHelper.justClickedLeft) { + CardCrawlGame.sound.playA("UI_CLICK_1", -0.4f); + challengeDownHitbox.clickStarted = true; + } + if (challengeDownHitbox.clicked) { + downfallMod.SixSealsQuest = !downfallMod.SixSealsQuest; + challengeDownHitbox.clicked = false; + downfallMod.saveData(); + } + } + } + else if (isOnSnecko(obj)) { + challengeDownHitbox.update(); + if (challengeDownHitbox.hovered) { + if (challengeTips.isEmpty()) { + challengeTips.add(new PowerTip(uiStringsSneckoMode.TEXT[0], uiStringsSneckoMode.TEXT[1])); + }else { + challengeTips.get(0).header = uiStringsSneckoMode.TEXT[0]; + challengeTips.get(0).body = uiStringsSneckoMode.TEXT[1]; + } + if (InputHelper.mX < 1400.0f * Settings.scale) { + TipHelper.queuePowerTips(InputHelper.mX + 60.0f * Settings.scale, InputHelper.mY - 50.0f * Settings.scale, challengeTips); + } else { + TipHelper.queuePowerTips(InputHelper.mX - 350.0f * Settings.scale, InputHelper.mY - 50.0f * Settings.scale, challengeTips); + } + + if (InputHelper.justClickedLeft) { + CardCrawlGame.sound.playA("UI_CLICK_1", -0.4f); + challengeDownHitbox.clickStarted = true; + } + if (challengeDownHitbox.clicked) { + SneckoMod.pureSneckoMode = !SneckoMod.pureSneckoMode; + challengeDownHitbox.clicked = false; + downfallMod.saveData(); + } + } + } else if (isOnGrems(obj)) { + challengeDownHitbox.update(); + if (challengeDownHitbox.hovered) { + if (challengeTips.isEmpty()) { + challengeTips.add(new PowerTip(uiStringsGrems.TEXT[0], uiStringsGrems.TEXT[1])); + }else { + challengeTips.get(0).header = uiStringsGrems.TEXT[0]; + challengeTips.get(0).body = uiStringsGrems.TEXT[1]; + } + if (InputHelper.mX < 1400.0f * Settings.scale) { + TipHelper.queuePowerTips(InputHelper.mX + 60.0f * Settings.scale, InputHelper.mY - 50.0f * Settings.scale, challengeTips); + } else { + TipHelper.queuePowerTips(InputHelper.mX - 350.0f * Settings.scale, InputHelper.mY - 50.0f * Settings.scale, challengeTips); + } + + if (InputHelper.justClickedLeft) { + CardCrawlGame.sound.playA("UI_CLICK_1", -0.4f); + challengeDownHitbox.clickStarted = true; + } + if (challengeDownHitbox.clicked) { + GremlinMod.gremlinArtMode = !GremlinMod.gremlinArtMode; + challengeDownHitbox.clicked = false; + downfallMod.saveData(); + } + } + } + } + + } + + + } +} diff --git a/src/main/java/downfall/patches/DeathScreenCharUnlockPatch.java b/src/main/java/downfall/patches/DeathScreenCharUnlockPatch.java index 5d8b23ab00..cf8b51c7f9 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; @@ -30,11 +32,11 @@ public static void Postfix(ReturnToMenuButton __instance, float x, float y, Stri if (label == TEXT[37]) { //////SlimeboundMod.logger.info("text patch fired"); if (UnlockTracker.isCharacterLocked("Guardian")) { - // //SlimeboundMod.logger.info("first if"); + // //SlimeboundMod.logger.info("first if"); __instance.appear(Settings.WIDTH / 2.0F, Settings.HEIGHT * 0.15F, TEXT[40]); __instance.label = TEXT[40]; } else if (UnlockTracker.isCharacterLocked("Hexaghost") && EvilModeCharacterSelect.evilMode && AbstractDungeon.player.chosenClass == GuardianEnum.GUARDIAN) { - // //SlimeboundMod.logger.info("second if"); + // //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("Champ") && EvilModeCharacterSelect.evilMode && AbstractDungeon.player.chosenClass == TheHexaghost.Enums.THE_SPIRIT) { @@ -45,7 +47,15 @@ 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("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]; @@ -56,15 +66,16 @@ public static void Postfix(ReturnToMenuButton __instance, float x, float y, Stri !(UnlockTracker.isCharacterLocked("Champ")) && !(UnlockTracker.isCharacterLocked("Automaton")) && !(UnlockTracker.isCharacterLocked("Gremlin")) && - EvilModeCharacterSelect.evilMode && AbstractDungeon.player.chosenClass == GremlinEnum.GREMLIN){ - // //SlimeboundMod.logger.info("third if"); + !(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]); __instance.label = TEXT[40]; } } } - } diff --git a/src/main/java/downfall/patches/DeathScreenUnlockPatch.java b/src/main/java/downfall/patches/DeathScreenUnlockPatch.java index c07954c6a9..fcd4b3d5a1 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/EvilModeCharacterOption.java b/src/main/java/downfall/patches/EvilModeCharacterOption.java index 5b9a9050a1..75e17c1a4d 100644 --- a/src/main/java/downfall/patches/EvilModeCharacterOption.java +++ b/src/main/java/downfall/patches/EvilModeCharacterOption.java @@ -1,6 +1,7 @@ package downfall.patches; import automaton.AutomatonChar; +import awakenedOne.AwakenedOneChar; import champ.ChampChar; import champ.ChampMod; import collector.CollectorChar; @@ -32,44 +33,50 @@ public static void Prefix(CharacterOption __instance) { if ((__instance.hb.hovered) && (__instance.locked)) { if (__instance.c.chosenClass == GuardianEnum.GUARDIAN) { - TipHelper.renderGenericTip(InputHelper.mX + 70.0F * Settings.scale, InputHelper.mY - 10.0F * Settings.scale, __instance.TEXT[0], TEXT[0] + TEXT[11]); + TipHelper.renderGenericTip(InputHelper.mX + 70.0F * Settings.scale, InputHelper.mY - 10.0F * Settings.scale, __instance.TEXT[0], TEXT[1] + TEXT[0]); } else if (__instance.c.chosenClass == TheHexaghost.Enums.THE_SPIRIT) { if (UnlockTracker.isCharacterLocked("Guardian")) { - TipHelper.renderGenericTip(InputHelper.mX + 70.0F * Settings.scale, InputHelper.mY - 10.0F * Settings.scale, __instance.TEXT[0], TEXT[1] + TEXT[11]); + TipHelper.renderGenericTip(InputHelper.mX + 70.0F * Settings.scale, InputHelper.mY - 10.0F * Settings.scale, __instance.TEXT[0], TEXT[2] + TEXT[0]); } else { - TipHelper.renderGenericTip(InputHelper.mX + 70.0F * Settings.scale, InputHelper.mY - 10.0F * Settings.scale, __instance.TEXT[0], TEXT[2] + TEXT[11]); + TipHelper.renderGenericTip(InputHelper.mX + 70.0F * Settings.scale, InputHelper.mY - 10.0F * Settings.scale, __instance.TEXT[0], TEXT[3] + TEXT[0]); } } else if (__instance.c.chosenClass == ChampChar.Enums.THE_CHAMP) { if (UnlockTracker.isCharacterLocked("Hexaghost")) { - TipHelper.renderGenericTip(InputHelper.mX + 70.0F * Settings.scale, InputHelper.mY - 10.0F * Settings.scale, __instance.TEXT[0], TEXT[3] + TEXT[11]); + TipHelper.renderGenericTip(InputHelper.mX + 70.0F * Settings.scale, InputHelper.mY - 10.0F * Settings.scale, __instance.TEXT[0], TEXT[4] + TEXT[0]); } else { - TipHelper.renderGenericTip(InputHelper.mX + 70.0F * Settings.scale, InputHelper.mY - 10.0F * Settings.scale, __instance.TEXT[0], TEXT[4] + TEXT[11]); + TipHelper.renderGenericTip(InputHelper.mX + 70.0F * Settings.scale, InputHelper.mY - 10.0F * Settings.scale, __instance.TEXT[0], TEXT[5] + TEXT[0]); } } else if (__instance.c.chosenClass == AutomatonChar.Enums.THE_AUTOMATON) { if (UnlockTracker.isCharacterLocked("Champ")) { - TipHelper.renderGenericTip(InputHelper.mX + 70.0F * Settings.scale, InputHelper.mY - 10.0F * Settings.scale, __instance.TEXT[0], TEXT[5] + TEXT[11]); + TipHelper.renderGenericTip(InputHelper.mX + 70.0F * Settings.scale, InputHelper.mY - 10.0F * Settings.scale, __instance.TEXT[0], TEXT[6] + TEXT[0]); } else { - TipHelper.renderGenericTip(InputHelper.mX + 70.0F * Settings.scale, InputHelper.mY - 10.0F * Settings.scale, __instance.TEXT[0], TEXT[6] + TEXT[11]); + TipHelper.renderGenericTip(InputHelper.mX + 70.0F * Settings.scale, InputHelper.mY - 10.0F * Settings.scale, __instance.TEXT[0], TEXT[7] + TEXT[0]); } } else if (__instance.c.chosenClass == CollectorChar.Enums.THE_COLLECTOR) { if (UnlockTracker.isCharacterLocked("Automaton")) { - TipHelper.renderGenericTip(InputHelper.mX + 70.0F * Settings.scale, InputHelper.mY - 10.0F * Settings.scale, __instance.TEXT[0], TEXT[7] + TEXT[11]); + TipHelper.renderGenericTip(InputHelper.mX + 70.0F * Settings.scale, InputHelper.mY - 10.0F * Settings.scale, __instance.TEXT[0], TEXT[8] + TEXT[0]); } else { - TipHelper.renderGenericTip(InputHelper.mX + 70.0F * Settings.scale, InputHelper.mY - 10.0F * Settings.scale, __instance.TEXT[0], TEXT[8] + TEXT[11]); + TipHelper.renderGenericTip(InputHelper.mX + 70.0F * Settings.scale, InputHelper.mY - 10.0F * Settings.scale, __instance.TEXT[0], TEXT[9] + TEXT[0]); } - } else if (__instance.c.chosenClass == GremlinEnum.GREMLIN) { + } else if (__instance.c.chosenClass == AwakenedOneChar.Enums.AWAKENED_ONE) { if (UnlockTracker.isCharacterLocked("Collector")) { - TipHelper.renderGenericTip(InputHelper.mX + 70.0F * Settings.scale, InputHelper.mY - 10.0F * Settings.scale, __instance.TEXT[0], TEXT[9] + TEXT[11]); + TipHelper.renderGenericTip(InputHelper.mX + 70.0F * Settings.scale, InputHelper.mY - 10.0F * Settings.scale, __instance.TEXT[0], TEXT[10] + TEXT[0]); + } else { + TipHelper.renderGenericTip(InputHelper.mX + 70.0F * Settings.scale, InputHelper.mY - 10.0F * Settings.scale, __instance.TEXT[0], TEXT[11] + TEXT[0]); + } + } else if (__instance.c.chosenClass == GremlinEnum.GREMLIN) { + if (UnlockTracker.isCharacterLocked("Awakened")) { + TipHelper.renderGenericTip(InputHelper.mX + 70.0F * Settings.scale, InputHelper.mY - 10.0F * Settings.scale, __instance.TEXT[0], TEXT[12] + TEXT[0]); } else { - TipHelper.renderGenericTip(InputHelper.mX + 70.0F * Settings.scale, InputHelper.mY - 10.0F * Settings.scale, __instance.TEXT[0], TEXT[13] + TEXT[11]); + TipHelper.renderGenericTip(InputHelper.mX + 70.0F * Settings.scale, InputHelper.mY - 10.0F * Settings.scale, __instance.TEXT[0], TEXT[13] + TEXT[0]); } } else if (__instance.c.chosenClass == TheSnecko.Enums.THE_SNECKO) { if (UnlockTracker.isCharacterLocked("Gremlin")) { - TipHelper.renderGenericTip(InputHelper.mX + 70.0F * Settings.scale, InputHelper.mY - 10.0F * Settings.scale, __instance.TEXT[0], TEXT[12] + TEXT[11]); + TipHelper.renderGenericTip(InputHelper.mX + 70.0F * Settings.scale, InputHelper.mY - 10.0F * Settings.scale, __instance.TEXT[0], TEXT[14] + TEXT[0]); } else { - TipHelper.renderGenericTip(InputHelper.mX + 70.0F * Settings.scale, InputHelper.mY - 10.0F * Settings.scale, __instance.TEXT[0], TEXT[10] + TEXT[11]); + TipHelper.renderGenericTip(InputHelper.mX + 70.0F * Settings.scale, InputHelper.mY - 10.0F * Settings.scale, __instance.TEXT[0], TEXT[15] + TEXT[0]); } } } diff --git a/src/main/java/downfall/patches/EvilModeCharacterSelect.java b/src/main/java/downfall/patches/EvilModeCharacterSelect.java index 9d3a37e246..a37e36f6e8 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 0000000000..d605e82194 --- /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 b7cf776a02..42ff479d7b 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/GlobalTurnStartCheckPatch.java b/src/main/java/downfall/patches/GlobalTurnStartCheckPatch.java index fcf3d77e2d..a5ed23f1fc 100644 --- a/src/main/java/downfall/patches/GlobalTurnStartCheckPatch.java +++ b/src/main/java/downfall/patches/GlobalTurnStartCheckPatch.java @@ -5,6 +5,7 @@ import charbosses.bosses.AbstractCharBoss; import charbosses.bosses.Silent.CharBossSilent; import charbosses.bosses.Silent.NewAge.ArchetypeAct2MirrorImageNewAge; +import charbosses.bosses.Silent.Simpler.ArchetypeAct2MirrorImageSimple; import com.evacipated.cardcrawl.modthespire.lib.*; import com.megacrit.cardcrawl.actions.GameActionManager; import com.megacrit.cardcrawl.cards.AbstractCard; @@ -31,7 +32,7 @@ public static void Insert(GameActionManager __instance) { } } if (AbstractCharBoss.boss != null) { - if (AbstractCharBoss.boss.chosenArchetype instanceof ArchetypeAct2MirrorImageNewAge && (AbstractDungeon.lastCombatMetricKey.equals("SI_MIRROR_ARCHETYPE") || AbstractDungeon.actNum == 4)) { + if ((AbstractCharBoss.boss.chosenArchetype instanceof ArchetypeAct2MirrorImageNewAge || AbstractCharBoss.boss.chosenArchetype instanceof ArchetypeAct2MirrorImageSimple) && (AbstractDungeon.lastCombatMetricKey.equals("SI_MIRROR_ARCHETYPE") || AbstractDungeon.actNum == 4)) { ((CharBossSilent) AbstractCharBoss.boss).spawnImage(false); } } diff --git a/src/main/java/downfall/patches/HecktoplasmPatch.java b/src/main/java/downfall/patches/HecktoplasmPatch.java index c54dc71993..2b9d1ea205 100644 --- a/src/main/java/downfall/patches/HecktoplasmPatch.java +++ b/src/main/java/downfall/patches/HecktoplasmPatch.java @@ -1,3 +1,4 @@ +/* package downfall.patches; import charbosses.bosses.AbstractCharBoss; @@ -14,7 +15,9 @@ 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] = (int)(amount[0] * 0); + amount[0] = 0; } } } + + */ diff --git a/src/main/java/downfall/patches/LockVillainsPatch.java b/src/main/java/downfall/patches/LockVillainsPatch.java index 40946a1118..a615cfb0cd 100644 --- a/src/main/java/downfall/patches/LockVillainsPatch.java +++ b/src/main/java/downfall/patches/LockVillainsPatch.java @@ -22,6 +22,7 @@ public static void Postfix() { UnlockTracker.addCharacter("Champ"); UnlockTracker.addCharacter("Automaton"); UnlockTracker.addCharacter("Collector"); + UnlockTracker.addCharacter("Awakened"); UnlockTracker.addCharacter("Gremlin"); UnlockTracker.addCharacter("Snecko"); } diff --git a/src/main/java/downfall/patches/ProceedButtonPatch2.java b/src/main/java/downfall/patches/ProceedButtonPatch2.java index b542f9e0fe..07e82157e3 100644 --- a/src/main/java/downfall/patches/ProceedButtonPatch2.java +++ b/src/main/java/downfall/patches/ProceedButtonPatch2.java @@ -21,7 +21,7 @@ public class ProceedButtonPatch2 { public static SpireReturn Prefix(ProceedButton __instance) { if (EvilModeCharacterSelect.evilMode) { - SlimeboundMod.logger.info("HIT THE DOUBLE BOSS PATCH!"); + // SlimeboundMod.logger.info("HIT THE DOUBLE BOSS PATCH!"); AbstractDungeon.bossList.clear(); AbstractDungeon.bossList.add(CharBossMerchant.ID); // This and clear - just for safety. AbstractDungeon.bossKey = CharBossMerchant.ID; diff --git a/src/main/java/downfall/patches/RelicOverrides.java b/src/main/java/downfall/patches/RelicOverrides.java index 87447ef0aa..fba7b42902 100644 --- a/src/main/java/downfall/patches/RelicOverrides.java +++ b/src/main/java/downfall/patches/RelicOverrides.java @@ -1,32 +1,32 @@ 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 champ.ChampChar; -import com.badlogic.gdx.graphics.g2d.SpriteBatch; +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.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.cards.CardGroup; +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.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 guardian.relics.BottledAnomaly; +import guardian.relics.BottledStasis; +import guardian.relics.StasisEgg; import javassist.*; -import javassist.bytecode.DuplicateMemberException; +import sneckomod.relics.D8; import java.util.Objects; -import java.util.regex.Pattern; import static downfall.patches.EvilModeCharacterSelect.evilMode; @@ -86,6 +86,180 @@ public class RelicOverrides { // } +// @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 @@ -209,78 +383,78 @@ public static void Prefix(Courier _instance) { } } - @SpirePatch( - clz = PrismaticShard.class, - method = "getUpdatedDescription" - ) - public static class prismaticDesc { - @SpirePrefixPatch - public static void Postfix(PrismaticShard _instance) { - if (evilMode) { - //ReflectionHacks.setPrivateStaticFinal(Courier.class, "name", CardCrawlGame.languagePack.getRelicStrings("downfall:replacements").DESCRIPTIONS[6]); - // _instance.description = CardCrawlGame.languagePack.getRelicStrings("downfall:replacements").DESCRIPTIONS[8]; - - } - - } - } - - @SpirePatch( - clz = Ectoplasm.class, - method = "getUpdatedDescription" - ) - public static class EctoImage { - @SpirePrefixPatch - public static void Prefix(Ectoplasm _instance) { - 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; - } - - } - } - - @SpirePatch( - clz = Ectoplasm.class, - method = "setDescription" - ) - public static class EctoDesc { - @SpirePrefixPatch - public static SpireReturn Prefix() { - - if (evilMode) { - return SpireReturn.Return(CardCrawlGame.languagePack.getRelicStrings("downfall:replacements").DESCRIPTIONS[9]); - } - - return SpireReturn.Continue(); - } - } - - @SpirePatch( - clz=AbstractRelic.class, - method= SpirePatch.CONSTRUCTOR - ) - public static class EctoTitle { - @SpireInsertPatch( - 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") && evilMode) { - ReflectionHacks.setPrivateFinal(__instance, AbstractRelic.class, "relicStrings", CardCrawlGame.languagePack.getRelicStrings("downfall:Hecktoplasm").NAME); - - } - } - - private static class Locator extends SpireInsertLocator { - public int[] Locate(CtBehavior ctMethodToPatch) throws CannotCompileException, PatchingException { - Matcher finalMatcher = new Matcher.MethodCallMatcher(ImageMaster.class, "loadRelicImg"); - return LineFinder.findInOrder(ctMethodToPatch, finalMatcher); - } - } - } +// @SpirePatch( +// clz = PrismaticShard.class, +// method = "getUpdatedDescription" +// ) +// public static class prismaticDesc { +// @SpirePrefixPatch +// public static void Postfix(PrismaticShard _instance) { +// if (evilMode) { +// //ReflectionHacks.setPrivateStaticFinal(Courier.class, "name", CardCrawlGame.languagePack.getRelicStrings("downfall:replacements").DESCRIPTIONS[6]); +// // _instance.description = CardCrawlGame.languagePack.getRelicStrings("downfall:replacements").DESCRIPTIONS[8]; +// +// } +// +// } +// } +// +// @SpirePatch( +// clz = Ectoplasm.class, +// method = "getUpdatedDescription" +// ) +// public static class EctoImage { +// @SpirePrefixPatch +// public static void Prefix(Ectoplasm _instance) { +// 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; +// } +// +// } +// } +// +// @SpirePatch( +// clz = Ectoplasm.class, +// method = "setDescription" +// ) +// public static class EctoDesc { +// @SpirePrefixPatch +// public static SpireReturn Prefix() { +// +// if (evilMode) { +// return SpireReturn.Return(CardCrawlGame.languagePack.getRelicStrings("downfall:replacements").DESCRIPTIONS[9]); +// } +// +// return SpireReturn.Continue(); +// } +// } +// +// @SpirePatch( +// clz=AbstractRelic.class, +// method= SpirePatch.CONSTRUCTOR +// ) +// public static class EctoTitle { +// @SpireInsertPatch( +// 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") && evilMode) { +// ReflectionHacks.setPrivateFinal(__instance, AbstractRelic.class, "relicStrings", CardCrawlGame.languagePack.getRelicStrings("downfall:Hecktoplasm").NAME); +// +// } +// } +// +// private static class Locator extends SpireInsertLocator { +// public int[] Locate(CtBehavior ctMethodToPatch) throws CannotCompileException, PatchingException { +// Matcher finalMatcher = new Matcher.MethodCallMatcher(ImageMaster.class, "loadRelicImg"); +// return LineFinder.findInOrder(ctMethodToPatch, finalMatcher); +// } +// } +// } /* @SpirePatch( clz = Courier.class, diff --git a/src/main/java/downfall/patches/RestrictCardColor.java b/src/main/java/downfall/patches/RestrictCardColor.java index 068914335d..1bc0404767 100644 --- a/src/main/java/downfall/patches/RestrictCardColor.java +++ b/src/main/java/downfall/patches/RestrictCardColor.java @@ -10,6 +10,7 @@ import hermit.characters.hermit; import sneckomod.SneckoMod; import theHexaghost.HexaMod; +import theHexaghost.TheHexaghost; @SpirePatch(clz = CardLibrary.class, method = "getAnyColorCard", paramtypez = {AbstractCard.CardRarity.class}) public class RestrictCardColor { @@ -33,6 +34,10 @@ else if (!card.hasTag(SneckoMod.BANNEDFORSNECKO) && !card.hasTag(HexaMod.GHOSTWH } //PLEASE WORK + if (card.hasTag(HexaMod.GHOSTWHEELCARD) && !(AbstractDungeon.player instanceof TheHexaghost)){ + available = false; + } + if (card.color == CollectibleCardColorEnumPatch.CardColorPatch.COLLECTIBLE){ available = false; } diff --git a/src/main/java/downfall/patches/RestrictCardColorWithType.java b/src/main/java/downfall/patches/RestrictCardColorWithType.java index 3e0ec11769..a0268d2a14 100644 --- a/src/main/java/downfall/patches/RestrictCardColorWithType.java +++ b/src/main/java/downfall/patches/RestrictCardColorWithType.java @@ -9,6 +9,7 @@ import com.megacrit.cardcrawl.helpers.CardLibrary; import sneckomod.SneckoMod; import theHexaghost.HexaMod; +import theHexaghost.TheHexaghost; @SpirePatch(clz = CardLibrary.class, method = "getAnyColorCard", paramtypez = {AbstractCard.CardType.class, AbstractCard.CardRarity.class}) public class RestrictCardColorWithType { @@ -30,6 +31,10 @@ else if (!card.hasTag(SneckoMod.BANNEDFORSNECKO) && !card.hasTag(HexaMod.GHOSTWH available = true; } + if (card.hasTag(HexaMod.GHOSTWHEELCARD) && !(AbstractDungeon.player instanceof TheHexaghost)){ + available = false; + } + if (card.color == CollectibleCardColorEnumPatch.CardColorPatch.COLLECTIBLE){ available = false; } diff --git a/src/main/java/downfall/patches/ReturnRandomScreenlessRelicPatch.java b/src/main/java/downfall/patches/ReturnRandomScreenlessRelicPatch.java new file mode 100644 index 0000000000..9d696f688b --- /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 index 2f5ed3d6ec..76b38e101d 100644 --- a/src/main/java/downfall/patches/SpireShieldPatch.java +++ b/src/main/java/downfall/patches/SpireShieldPatch.java @@ -8,6 +8,7 @@ import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.monsters.ending.SpireShield; import com.megacrit.cardcrawl.powers.StrengthPower; +import gremlin.characters.GremlinCharacter; import guardian.characters.GuardianCharacter; import slimebound.characters.SlimeboundCharacter; import slimebound.powers.PotencyPower; @@ -21,21 +22,25 @@ 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 instanceof TheHexaghost || AbstractDungeon.player instanceof TheSnecko || AbstractDungeon.player instanceof GuardianCharacter || AbstractDungeon.player instanceof GremlinCharacter)) { 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.aiRng.randomBoolean()) { + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(AbstractDungeon.player, __instance, new PotencyPower(AbstractDungeon.player, __instance, -1), -1)); + } else { + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(AbstractDungeon.player, __instance, new StrengthPower(AbstractDungeon.player, -1), -1)); + } } if (AbstractDungeon.player instanceof TheHexaghost) { - AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(AbstractDungeon.player, __instance, new EnhancePower(-1), -1)); + if (AbstractDungeon.aiRng.randomBoolean()) { + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(AbstractDungeon.player, __instance, new EnhancePower(-1))); + } else { + AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(AbstractDungeon.player, __instance, new StrengthPower(AbstractDungeon.player, -1), -1)); + } } - if (AbstractDungeon.player instanceof TheSnecko || AbstractDungeon.player instanceof GuardianCharacter) { + if (AbstractDungeon.player instanceof TheSnecko || AbstractDungeon.player instanceof GuardianCharacter || AbstractDungeon.player instanceof GremlinCharacter) { AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(AbstractDungeon.player, __instance, new StrengthPower(AbstractDungeon.player, -1))); } diff --git a/src/main/java/downfall/patches/VictoryScreenUnlockPatch.java b/src/main/java/downfall/patches/VictoryScreenUnlockPatch.java index c1a1b99996..47b0d3b67b 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/actlikeit/MapCompatiblity.java b/src/main/java/downfall/patches/actlikeit/MapCompatiblity.java index edd7223c4b..ba5d61fd06 100644 --- a/src/main/java/downfall/patches/actlikeit/MapCompatiblity.java +++ b/src/main/java/downfall/patches/actlikeit/MapCompatiblity.java @@ -5,6 +5,8 @@ import com.evacipated.cardcrawl.modthespire.lib.SpireReturn; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.dungeons.TheEnding; +import com.megacrit.cardcrawl.relics.Sling; +import downfall.downfallMod; import downfall.patches.EvilModeCharacterSelect; @SpirePatch( @@ -16,10 +18,8 @@ public class MapCompatiblity { @SpirePrefixPatch public static SpireReturn evilMode() { - if (EvilModeCharacterSelect.evilMode) - { + if (EvilModeCharacterSelect.evilMode) { return SpireReturn.Return(AbstractDungeon.getCurrMapNode().y == 0 ? (AbstractDungeon.id.equals(TheEnding.ID) ? 2 : 14) : 13); - } //There's a high possibility that this is the second y check, which the actlikeit patch isn't normally intended to change. diff --git a/src/main/java/downfall/patches/rooms/BetterEndingPatches.java b/src/main/java/downfall/patches/rooms/BetterEndingPatches.java index f861dd676d..538dc658dd 100644 --- a/src/main/java/downfall/patches/rooms/BetterEndingPatches.java +++ b/src/main/java/downfall/patches/rooms/BetterEndingPatches.java @@ -39,43 +39,6 @@ public static void patch(SpireHeart __instance) { } } - @SpirePatch(clz = SpireHeart.class, method = "buttonEffect") - public static class MoveToAct4 { - @SpirePrefixPatch - public static SpireReturn Prefix(SpireHeart __instance) { - - if (EvilModeCharacterSelect.evilMode) { - if (AbstractDungeon.actNum == 3 && - AddBustKeyButtonPatches.KeyFields.bustedRuby.get(AbstractDungeon.player) && - AddBustKeyButtonPatches.KeyFields.bustedSapphire.get(AbstractDungeon.player) && - AddBustKeyButtonPatches.KeyFields.bustedEmerald.get(AbstractDungeon.player) - ) { - /* - __instance.roomEventText.clear(); - __instance.hasFocus = false; - __instance.roomEventText.hide(); - Color color = (Color)ReflectionHacks.getPrivate(__instance, SpireHeart.class, "fadeColor"); - ReflectionHacks.setPrivate(__instance, SpireHeart.class, "fadeColor", new Color(color.r, color.g, color.b, 0F)); - - CardCrawlGame.mode = CardCrawlGame.GameMode.GAMEPLAY; - CardCrawlGame.nextDungeon = "TheEnding"; - CardCrawlGame.music.fadeOutBGM(); - CardCrawlGame.music.fadeOutTempBGM(); - AbstractDungeon.getCurrRoom().phase = AbstractRoom.RoomPhase.COMPLETE; - AbstractDungeon.fadeOut(); - AbstractDungeon.isDungeonBeaten = true; - */ - return SpireReturn.Continue(); - } else { - Settings.hasRubyKey = false; - Settings.hasEmeraldKey = false; - Settings.hasSapphireKey = false; - } - return SpireReturn.Continue(); - } else { - return SpireReturn.Continue(); - } - } //Change effect when showing the player the score @SpirePatch(clz = SpireHeart.class, method = "buttonEffect") @@ -117,4 +80,4 @@ public int[] Locate(CtBehavior ctBehavior) throws Exception { } } } -} + diff --git a/src/main/java/downfall/patches/ui/map/FlipMap.java b/src/main/java/downfall/patches/ui/map/FlipMap.java index 9697c03dd2..c65bc5c9e0 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/patches/ui/topPanel/GoldToSoulPatches.java b/src/main/java/downfall/patches/ui/topPanel/GoldToSoulPatches.java index d44cbad677..714a3c1810 100644 --- a/src/main/java/downfall/patches/ui/topPanel/GoldToSoulPatches.java +++ b/src/main/java/downfall/patches/ui/topPanel/GoldToSoulPatches.java @@ -6,6 +6,7 @@ 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.helpers.ImageMaster; import com.megacrit.cardcrawl.helpers.PowerTip; import com.megacrit.cardcrawl.helpers.TipHelper; @@ -302,7 +303,11 @@ private static String filterString(String spireString) { } public static void UpdateMerchantTip() { - String result = uiStrings.TEXT[3] + ": " + (FleeingMerchant.DEAD ? uiStrings.TEXT[4] : FleeingMerchant.CURRENT_HP + "/" + FleeingMerchant.START_HP) + int vibe = 360; + if (AbstractDungeon.ascensionLevel >= 8) { + vibe = 400; + } + String result = uiStrings.TEXT[3] + ": " + (FleeingMerchant.DEAD ? uiStrings.TEXT[4] : FleeingMerchant.CURRENT_HP + "/" + vibe) + " NL " + uiStrings.TEXT[5] + ": " + FleeingMerchant.CURRENT_STRENGTH + " NL " + uiStrings.TEXT[6] + ": " + FleeingMerchant.CURRENT_SOULS; /* if (FleeingMerchant.CURRENT_DOOM > 0) { diff --git a/src/main/java/downfall/patches/vfx/DownfallCustomCardRewardNormalFunctionPatch.java b/src/main/java/downfall/patches/vfx/DownfallCustomCardRewardNormalFunctionPatch.java index 1fb9ee8225..1e1484b93a 100644 --- a/src/main/java/downfall/patches/vfx/DownfallCustomCardRewardNormalFunctionPatch.java +++ b/src/main/java/downfall/patches/vfx/DownfallCustomCardRewardNormalFunctionPatch.java @@ -9,6 +9,7 @@ import com.megacrit.cardcrawl.ui.buttons.ProceedButton; import downfall.util.ThirdSealReward; import guardian.rewards.GemReward; +import guardian.rewards.GemRewardButRelicRng; import javassist.CtBehavior; import sneckomod.util.UpgradedUnknownReward; import theHexaghost.util.SealSealReward; @@ -41,7 +42,12 @@ public static void generate_cards(CombatRewardScreen __instance) { } else if ( rewardItem instanceof GemReward ) { GemReward reward = (GemReward) rewardItem; reward.generate_reward_cards(); - } else if ( rewardItem instanceof UpgradedUnknownReward ) { + } + else if ( rewardItem instanceof GemRewardButRelicRng) { + GemRewardButRelicRng reward = (GemRewardButRelicRng) rewardItem; + reward.generate_reward_cards(); + } + else if ( rewardItem instanceof UpgradedUnknownReward ) { UpgradedUnknownReward reward = (UpgradedUnknownReward) rewardItem; reward.generate_reward_cards(); } diff --git a/src/main/java/downfall/powers/NextTurnPowerPower.java b/src/main/java/downfall/powers/NextTurnPowerPower.java index 83e201bb83..6f8cffe396 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/gauntletpowers/OnDeathEveryoneVigor.java b/src/main/java/downfall/powers/gauntletpowers/OnDeathEveryoneVigor.java index 3ed7967de9..f20c6f9a3e 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 8ea3768b69..fdf03ca119 100644 --- a/src/main/java/downfall/powers/neowpowers/HeartsFavorPower.java +++ b/src/main/java/downfall/powers/neowpowers/HeartsFavorPower.java @@ -66,7 +66,10 @@ public void onSpecificTrigger() { for (AbstractMonster m : AbstractDungeon.getCurrRoom().monsters.monsters) { if (m != null && !m.isDead && !m.isDying && !m.halfDead && m.id == NeowBossFinal.ID) { if (m.hasPower(NeowInvulnerablePower.POWER_ID)) { - addToBot(new ApplyPowerAction(m, p, new NeowInvulnerablePower(m, -this.amount), -this.amount)); + 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 ae848aa068..588ae04645 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 02c7f04b49..ed38e904af 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 index ee62960ab9..b0b1565ca6 100644 --- a/src/main/java/downfall/relics/BlackCandle.java +++ b/src/main/java/downfall/relics/BlackCandle.java @@ -1,31 +1,18 @@ 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.EscapeAction; import com.megacrit.cardcrawl.actions.common.LoseHPAction; -import com.megacrit.cardcrawl.actions.common.RelicAboveCreatureAction; import com.megacrit.cardcrawl.actions.utility.UseCardAction; import com.megacrit.cardcrawl.cards.AbstractCard; -import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; -import com.megacrit.cardcrawl.helpers.PowerTip; -import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.relics.AbstractRelic; -import com.megacrit.cardcrawl.relics.BlueCandle; -import downfall.actions.WaitForEscapeAction; import downfall.downfallMod; -import downfall.patches.EvilModeCharacterSelect; import hermit.characters.hermit; -import slimebound.characters.SlimeboundCharacter; +import hermit.patches.EnumPatch; import static downfall.patches.EvilModeCharacterSelect.evilMode; -import static hermit.characters.hermit.Enums.HERMIT; - -/// This relic exists to quickgrab its description, images, and texts to replace blue candle while playing evil mode, like hecktoplasm. -/// Do not remove it. Also, it doesn't work, the real patch uses an override. But still, don't touch this. public class BlackCandle extends CustomRelic { public static final String ID = downfallMod.makeID("BlackCandle"); @@ -43,21 +30,27 @@ public String getUpdatedDescription() { public void onUseCard(AbstractCard card, UseCardAction action) { if (card.type == AbstractCard.CardType.CURSE) { - this.flash(); if (card.cost == -2) { this.flash(); - this.addToBot(new LoseHPAction(AbstractDungeon.player, AbstractDungeon.player, 1, AbstractGameAction.AttackEffect.FIRE)); + 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 (evilMode || (AbstractDungeon.player instanceof hermit)); + return (evilMode || (AbstractDungeon.player instanceof hermit) && !downfallMod.disableBaseGameAdjustments); } 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 index 0498267d86..690cf6f8c4 100644 --- a/src/main/java/downfall/relics/BurdenOfKnowledge.java +++ b/src/main/java/downfall/relics/BurdenOfKnowledge.java @@ -1,6 +1,7 @@ package downfall.relics; import basemod.abstracts.CustomRelic; +import basemod.patches.com.megacrit.cardcrawl.screens.compendium.CardLibraryScreen.NoCompendium; import champ.relics.Barbells; import champ.relics.PowerArmor; import collector.CollectorCollection; @@ -32,6 +33,8 @@ import java.util.ArrayList; import java.util.List; +@NoCompendium +//This is a deprecated relic but remains for old saves so it doesn't become a circlet. public class BurdenOfKnowledge extends CustomRelic { public static final String ID = downfallMod.makeID("BurdenOfKnowledge"); @@ -40,7 +43,7 @@ public class BurdenOfKnowledge extends CustomRelic { int effectCount = 0; public BurdenOfKnowledge() { - super(ID, IMG, OUTLINE, RelicTier.SPECIAL, LandingSound.MAGICAL); + super(ID, IMG, OUTLINE, RelicTier.DEPRECATED, LandingSound.MAGICAL); } public String getUpdatedDescription() { @@ -56,7 +59,7 @@ public void onEquip() { downfallMod.removeAnyRelicFromPools(StasisUpgradeRelic.ID); downfallMod.removeAnyRelicFromPools(Barbells.ID); - AbstractDungeon.player.decreaseMaxHealth(10); + AbstractDungeon.player.decreaseMaxHealth(20); List upgradedCards = new ArrayList(); for (AbstractCard c : AbstractDungeon.player.masterDeck.group) { @@ -94,9 +97,9 @@ public void onEquip() { } - AbstractDungeon.player.loseRelic(HeartBlessingRed.ID); - AbstractDungeon.player.loseRelic(HeartBlessingBlue.ID); - AbstractDungeon.player.loseRelic(HeartBlessingGreen.ID); + // AbstractDungeon.player.loseRelic(HeartBlessingRed.ID); + // AbstractDungeon.player.loseRelic(HeartBlessingBlue.ID); + // AbstractDungeon.player.loseRelic(HeartBlessingGreen.ID); } public void onPreviewObtainCard(AbstractCard c) { @@ -109,16 +112,12 @@ public void onObtainCard(AbstractCard c) { } } - public void atBattleStart() { + 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, -1), -1)); - this.addToTop(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new DexterityPower(AbstractDungeon.player, -1), -1)); + 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)); - AbstractDungeon.player.hasRelic(Enchiridion.ID); - { - this.addToBot(new ArmamentsAction(true)); - } } public AbstractRelic makeCopy() { diff --git a/src/main/java/downfall/relics/ExtraCursedBell.java b/src/main/java/downfall/relics/ExtraCursedBell.java index 3b7e2f19e0..dba86d2256 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; @@ -44,14 +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.COMMON))); - 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; @@ -62,6 +81,8 @@ public void update() { CardCrawlGame.sound.playA("souls1", -0.1F); this.flash(); } - } + + + } diff --git a/src/main/java/downfall/relics/GremlinSack.java b/src/main/java/downfall/relics/GremlinSack.java index 4f3f0b9c12..7225788ebd 100644 --- a/src/main/java/downfall/relics/GremlinSack.java +++ b/src/main/java/downfall/relics/GremlinSack.java @@ -6,9 +6,11 @@ import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.events.shrines.GremlinMatchGame; import com.megacrit.cardcrawl.helpers.PowerTip; import com.megacrit.cardcrawl.vfx.cardManip.ShowCardAndObtainEffect; import downfall.downfallMod; +import downfall.events.GremlinMatchGame_Evil; import slimebound.SlimeboundMod; import java.util.ArrayList; @@ -82,7 +84,8 @@ public String getUpdatedDescription() { } public void onEquip() { - + AbstractDungeon.eventList.remove(GremlinMatchGame.ID); + AbstractDungeon.eventList.remove(GremlinMatchGame_Evil.ID); if (sackCards == null) onTrigger(); for (AbstractCard c : sackCards) { AbstractDungeon.effectList.add(new ShowCardAndObtainEffect(c, (MathUtils.random((float) Settings.WIDTH * 0.1F, (float) Settings.WIDTH * 0.9F)), (MathUtils.random((float) Settings.HEIGHT * 0.2F, (float) Settings.HEIGHT * 0.8F)))); diff --git a/src/main/java/downfall/relics/GremlinWheel.java b/src/main/java/downfall/relics/GremlinWheel.java index 39149c13e3..9620535bee 100644 --- a/src/main/java/downfall/relics/GremlinWheel.java +++ b/src/main/java/downfall/relics/GremlinWheel.java @@ -2,7 +2,10 @@ import basemod.abstracts.CustomRelic; import com.badlogic.gdx.graphics.Texture; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.events.shrines.GremlinWheelGame; import downfall.downfallMod; +import downfall.events.GremlinWheelGame_Evil; public class GremlinWheel extends CustomRelic { diff --git a/src/main/java/downfall/relics/HeartBlessingBlue.java b/src/main/java/downfall/relics/HeartBlessingBlue.java index 1f8efe5900..4bdca04407 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/Hecktoplasm.java b/src/main/java/downfall/relics/Hecktoplasm.java index e8ce07c705..47045e3032 100644 --- a/src/main/java/downfall/relics/Hecktoplasm.java +++ b/src/main/java/downfall/relics/Hecktoplasm.java @@ -1,3 +1,4 @@ + package downfall.relics; import basemod.abstracts.CustomRelic; @@ -39,7 +40,7 @@ public void onUnequip() { } public boolean canSpawn() { - return (AbstractDungeon.actNum <= 1 && evilMode); + return false; } public AbstractRelic makeCopy() { diff --git a/src/main/java/downfall/relics/ShatteredFragment.java b/src/main/java/downfall/relics/ShatteredFragment.java index 952415d62b..aab1d278ca 100644 --- a/src/main/java/downfall/relics/ShatteredFragment.java +++ b/src/main/java/downfall/relics/ShatteredFragment.java @@ -38,9 +38,12 @@ public ShatteredFragment() { //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 @@ -68,7 +71,7 @@ public void onUseCard(AbstractCard card, UseCardAction action) { 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, 1), 1)); + atb((AbstractGameAction)new ApplyPowerAction((AbstractCreature)AbstractDungeon.player, (AbstractCreature)AbstractDungeon.player, (AbstractPower)new StrengthPower((AbstractCreature)AbstractDungeon.player, AMOUNT), AMOUNT)); } } } diff --git a/src/main/java/downfall/tutorials/AwakenedOneTutorials.java b/src/main/java/downfall/tutorials/AwakenedOneTutorials.java new file mode 100644 index 0000000000..3dece52ed4 --- /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/ui/campfire/BustKeyOption.java b/src/main/java/downfall/ui/campfire/BustKeyOption.java index 5471f4229b..92a1bea263 100644 --- a/src/main/java/downfall/ui/campfire/BustKeyOption.java +++ b/src/main/java/downfall/ui/campfire/BustKeyOption.java @@ -2,6 +2,8 @@ import basemod.ReflectionHacks; import champ.relics.DeflectingBracers; +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.core.Settings; @@ -13,11 +15,15 @@ import com.megacrit.cardcrawl.rooms.CampfireUI; import com.megacrit.cardcrawl.rooms.RestRoom; import com.megacrit.cardcrawl.ui.campfire.AbstractCampfireOption; +import com.megacrit.cardcrawl.vfx.cardManip.ShowCardAndObtainEffect; import downfall.downfallMod; import downfall.patches.ui.campfire.AddBustKeyButtonPatches; import downfall.relics.*; import downfall.util.TextureLoader; import downfall.vfx.campfire.BustKeyEffect; +import slimebound.SlimeboundMod; + +import java.util.ArrayList; public class BustKeyOption extends AbstractCampfireOption { private static final UIStrings uiStrings = CardCrawlGame.languagePack.getUIString(downfallMod.makeID("BustKeyButton")); @@ -26,7 +32,25 @@ public class BustKeyOption extends AbstractCampfireOption { private boolean used; private boolean hacked; private float hackTime = 0F; - private int soulToCost = 50; + private int soulToCost = 0; + private int lastKnownKeysBroken = 0; + + private int const_FirstKeyCardsShown = 5; + private int const_FirstKeyCardsToGain = 1; + private AbstractCard.CardRarity const_FirstKeyCardsRarity = AbstractCard.CardRarity.COMMON; + private int const_FirstKeySoulsCost = 25; + + private int const_SecondKeyCardsShown = 4; + private int const_SecondKeyCardsToGain = 1; + private AbstractCard.CardRarity const_SecondKeyCardsRarity = AbstractCard.CardRarity.UNCOMMON; + private int const_SecondKeySoulsCost = 75; + + private int const_ThirdKeyCardsShown = 3; + private int const_ThirdKeyCardsToGain = 1; + private AbstractCard.CardRarity const_ThirdKeyCardsRarity = AbstractCard.CardRarity.RARE; + private int const_ThirdKeySoulsCost = 125; + + public static ArrayList cardsChosen = new ArrayList<>(); public BustKeyOption() { this(Keys.RUBY); @@ -34,7 +58,8 @@ public BustKeyOption() { public BustKeyOption(Keys key) { this.key = key; - if (AbstractDungeon.player.hasRelic(Ectoplasm.ID) || AbstractDungeon.player.hasRelic(Hecktoplasm.ID)) soulToCost = 0; + calcCost(key); + lastKnownKeysBroken = downfallMod.getNumKeysBroken(); if (AbstractDungeon.player.gold < soulToCost) { this.usable = false; updateImage(key); @@ -43,14 +68,21 @@ public BustKeyOption(Keys key) { updateImage(key); } } - + public void calcCost(Keys key) { + switch (downfallMod.getNumKeysBroken()) { + case 1: + soulToCost = const_SecondKeySoulsCost; + break; + case 2: + soulToCost = const_ThirdKeySoulsCost; + break; + default: + soulToCost = const_FirstKeySoulsCost; + } + } public void updateImage(Keys key) { - if (AbstractDungeon.player.hasRelic(Ectoplasm.ID) || AbstractDungeon.player.hasRelic(Hecktoplasm.ID)) { - this.description = TEXT[10]; - } else { - this.description = TEXT[3]; - } + switch (key) { case SAPPHIRE: this.label = TEXT[1]; @@ -59,15 +91,6 @@ public void updateImage(Keys key) { } else { this.img = TextureLoader.getTexture(downfallMod.assetPath("images/ui/campfire/sapphireDisabled.png")); } - if (!this.used) { - if (this.usable) { - this.description += TEXT[5]; - } else { - this.description = TEXT[8] + soulToCost + TEXT[9]; - } - } else { - this.description = TEXT[7]; - } break; case EMERALD: this.label = TEXT[2]; @@ -76,31 +99,50 @@ public void updateImage(Keys key) { } else { this.img = TextureLoader.getTexture(downfallMod.assetPath("images/ui/campfire/emeraldDisabled.png")); } + break; + default: + this.label = TEXT[0]; + if (this.usable) { + this.img = TextureLoader.getTexture(downfallMod.assetPath("images/ui/campfire/ruby.png")); + } else { + this.img = TextureLoader.getTexture(downfallMod.assetPath("images/ui/campfire/rubyDisabled.png")); + } + } + + this.description = TEXT[3]; + + switch (downfallMod.getNumKeysBroken()) { + case 1: if (!this.used) { if (this.usable) { - this.description += TEXT[6]; + this.description = this.description + soulToCost + TEXT[11] + const_SecondKeyCardsToGain + TEXT[12] + const_SecondKeyCardsShown + TEXT[5] + TEXT[13]; } else { this.description = TEXT[8] + soulToCost + TEXT[9]; } } else { - this.description = TEXT[7]; + this.description = TEXT[7]; //"Key Shattered!" } break; - default: - this.label = TEXT[0]; - if (this.usable) { - this.img = TextureLoader.getTexture(downfallMod.assetPath("images/ui/campfire/ruby.png")); + case 2: + if (!this.used) { + if (this.usable) { + this.description = this.description + soulToCost + TEXT[11] + const_ThirdKeyCardsToGain + TEXT[12] + const_ThirdKeyCardsShown + TEXT[6] + TEXT[13]; + } else { + this.description = TEXT[8] + soulToCost + TEXT[9]; + } } else { - this.img = TextureLoader.getTexture(downfallMod.assetPath("images/ui/campfire/rubyDisabled.png")); + this.description = TEXT[7]; //"Key Shattered!" } + break; + default: if (!this.used) { if (this.usable) { - this.description += TEXT[4]; + this.description = this.description + soulToCost + TEXT[11] + const_FirstKeyCardsToGain + TEXT[12] + const_FirstKeyCardsShown + TEXT[4] + TEXT[13]; } else { this.description = TEXT[8] + soulToCost + TEXT[9]; } } else { - this.description = TEXT[7]; + this.description = TEXT[7]; //"Key Shattered!" } } } @@ -125,12 +167,16 @@ public void update() { super.update(); if (!this.used) { - if (AbstractDungeon.player.gold < soulToCost && this.usable) { + if (lastKnownKeysBroken != downfallMod.getNumKeysBroken() || (AbstractDungeon.player.gold < soulToCost && this.usable)) { + lastKnownKeysBroken = downfallMod.getNumKeysBroken(); this.usable = false; + calcCost(key); updateImage(key); } - if (AbstractDungeon.player.gold >= soulToCost && !this.usable) { + if (lastKnownKeysBroken != downfallMod.getNumKeysBroken() || (AbstractDungeon.player.gold >= soulToCost && !this.usable)) { + lastKnownKeysBroken = downfallMod.getNumKeysBroken(); this.usable = true; + calcCost(key); updateImage(key); } } @@ -140,6 +186,7 @@ public void update() { if (this.used && !this.hacked) { this.hacked = true; + campfire.somethingSelected = false; campfire.touchOption = null; campfire.confirmButton.hide(); @@ -151,50 +198,53 @@ public void update() { AbstractDungeon.getCurrRoom().phase = AbstractRoom.RoomPhase.INCOMPLETE; } + + if (!cardsChosen.isEmpty()){ + SlimeboundMod.logger.info("SIZE IN OPTION " + cardsChosen.size()); + if (!cardsChosen.isEmpty()) { + AbstractCard c = ((AbstractCard) cardsChosen.get(0)).makeCopy(); + if (cardsChosen.size() >= 2) { + AbstractDungeon.topLevelEffects.add(new ShowCardAndObtainEffect(c, (float) Settings.WIDTH * 0.4F, (float) Settings.HEIGHT * 0.4F)); + c = ((AbstractCard) cardsChosen.get(1)).makeCopy(); + AbstractDungeon.topLevelEffects.add(new ShowCardAndObtainEffect(c, (float) Settings.WIDTH * 0.6F, (float) Settings.HEIGHT * 0.6F)); + } else { + AbstractDungeon.topLevelEffects.add(new ShowCardAndObtainEffect(c, (float) Settings.WIDTH / 2.0F, (float) Settings.HEIGHT / 2.0F)); + } + cardsChosen.clear(); + AbstractDungeon.gridSelectScreen.selectedCards.clear(); + } + } } @Override public void useOption() { - if (this.usable) { - 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) { + switch (downfallMod.getNumKeysBroken()) { + case 1: + AbstractDungeon.effectList.add(new BustKeyEffect(const_SecondKeyCardsToGain, const_SecondKeyCardsShown, const_SecondKeyCardsRarity, TEXT[5])); + break; + case 2: + AbstractDungeon.effectList.add(new BustKeyEffect(const_ThirdKeyCardsToGain, const_ThirdKeyCardsShown, const_ThirdKeyCardsRarity, TEXT[6])); + break; + default: + AbstractDungeon.effectList.add(new BustKeyEffect(const_FirstKeyCardsToGain, const_FirstKeyCardsShown, const_FirstKeyCardsRarity, TEXT[4])); + } + switch (this.key) { case SAPPHIRE: AddBustKeyButtonPatches.KeyFields.bustedSapphire.set(p, true); - 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); - 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); - 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 0000000000..28f60fff7c --- /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/LocalizeHelper.java b/src/main/java/downfall/util/LocalizeHelper.java index f8846842da..433d6bdce0 100644 --- a/src/main/java/downfall/util/LocalizeHelper.java +++ b/src/main/java/downfall/util/LocalizeHelper.java @@ -1,15 +1,18 @@ package downfall.util; import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.localization.CharacterStrings; import com.megacrit.cardcrawl.localization.UIStrings; public class LocalizeHelper { public static final UIStrings RunHistoryMonsterNames ; public static final UIStrings DonwfallRunHistoryMonsterNames ; + public static final CharacterStrings downfallCharacterSpeech ; static { RunHistoryMonsterNames = CardCrawlGame.languagePack.getUIString("RunHistoryMonsterNames"); DonwfallRunHistoryMonsterNames = CardCrawlGame.languagePack.getUIString("downfall:RunHistoryMonsterNames"); + downfallCharacterSpeech = CardCrawlGame.languagePack.getCharacterString("downfall:CharBossSpeech"); } public LocalizeHelper() { diff --git a/src/main/java/downfall/util/ThirdSealReward.java b/src/main/java/downfall/util/ThirdSealReward.java index 0e9c5def10..dd4f5c14b6 100644 --- a/src/main/java/downfall/util/ThirdSealReward.java +++ b/src/main/java/downfall/util/ThirdSealReward.java @@ -45,4 +45,4 @@ public void generate_reward_cards(){ this.cards.addAll(AbstractDungeon.getRewardCards()); } -} +} \ No newline at end of file diff --git a/src/main/java/downfall/vfx/campfire/BustKeyEffect.java b/src/main/java/downfall/vfx/campfire/BustKeyEffect.java index a9e28ae048..cc5e252baf 100644 --- a/src/main/java/downfall/vfx/campfire/BustKeyEffect.java +++ b/src/main/java/downfall/vfx/campfire/BustKeyEffect.java @@ -4,56 +4,147 @@ 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.core.CardCrawlGame; 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.rooms.AbstractRoom; +import com.megacrit.cardcrawl.rooms.CampfireUI; import com.megacrit.cardcrawl.rooms.RestRoom; import com.megacrit.cardcrawl.vfx.AbstractGameEffect; +import com.megacrit.cardcrawl.vfx.UpgradeShineEffect; +import com.megacrit.cardcrawl.vfx.cardManip.ShowCardAndObtainEffect; +import com.megacrit.cardcrawl.vfx.cardManip.ShowCardBrieflyEffect; +import downfall.ui.campfire.BustKeyOption; +import guardian.GuardianMod; +import guardian.cards.AbstractGemCard; +import guardian.cards.AbstractGuardianCard; +import slimebound.SlimeboundMod; + +import java.util.Collections; +import java.util.Iterator; public class BustKeyEffect extends AbstractGameEffect { private static final float DURATION = 2.0f; - private boolean hasBusted; + private int numCards; + private int shownCards; + private String msgShown; + private AbstractCard.CardRarity rarity; private Color screenColor; + private boolean pickCard = false; + private boolean rewardDone = false; + - public BustKeyEffect() { - this.hasBusted = false; + public BustKeyEffect(int cards, int cardsToShow, AbstractCard.CardRarity raritySelected, String msg) { + this.numCards = cards; + this.shownCards = cardsToShow; + this.rarity = raritySelected; + this.msgShown = msg; this.screenColor = AbstractDungeon.fadeColor.cpy(); - this.duration = DURATION; - this.screenColor.a = 0.0f; - ((RestRoom) AbstractDungeon.getCurrRoom()).cutFireSound(); + this.duration = 1.5F; + this.screenColor.a = 0.0F; + AbstractDungeon.overlayMenu.proceedButton.hide(); } + public void update() { - this.duration -= Gdx.graphics.getDeltaTime(); - this.updateBlackScreenColor(); - if (this.duration < 1.0f && !this.hasBusted) { - this.hasBusted = true; - CardCrawlGame.sound.playA("BLOCK_BREAK", 1.5f); - //AbstractDungeon.getCurrRoom().phase = AbstractRoom.RoomPhase.COMPLETE; + if (!AbstractDungeon.isScreenUp) { + this.duration -= Gdx.graphics.getDeltaTime(); + this.updateBlackScreenColor(); + } + + if (this.duration < 1.0F && !AbstractDungeon.isScreenUp && AbstractDungeon.gridSelectScreen.selectedCards.isEmpty() && !pickCard) { + pickCard = true; + CardGroup group = new CardGroup(CardGroup.CardGroupType.UNSPECIFIED); + for (int i = 0; i < shownCards; ++i) { + AbstractCard card = AbstractDungeon.getCard(rarity).makeCopy(); + boolean containsDupe = true; + + while (true) { + Iterator var6; + while (containsDupe) { + containsDupe = false; + +// if (card instanceof AbstractGemCard) { +// containsDupe = true; +// card = AbstractDungeon.getCard(rarity).makeCopy(); +// break; +// } + + var6 = group.group.iterator(); + + while (var6.hasNext()) { + AbstractCard c = (AbstractCard) var6.next(); + if (c.cardID.equals(card.cardID)) { + containsDupe = true; + card = AbstractDungeon.getCard(rarity).makeCopy(); + break; + } + } + } + + if (group.contains(card)) { + --i; + } else { + var6 = AbstractDungeon.player.relics.iterator(); + + while (var6.hasNext()) { + AbstractRelic r = (AbstractRelic) var6.next(); + r.onPreviewObtainCard(card); + } + + group.addToBottom(card); + } + break; + } + } + + AbstractDungeon.gridSelectScreen.open(group, numCards, msgShown, false, false, true, false); + AbstractDungeon.overlayMenu.cancelButton.show(AbstractDungeon.overlayMenu.cancelButton.buttonText); + } - if (this.duration < 0.0f) { + + if (this.duration < 0.0F) { this.isDone = true; - if ( AbstractDungeon.getCurrRoom() instanceof RestRoom) { - ((RestRoom) AbstractDungeon.getCurrRoom()).fadeIn(); + SlimeboundMod.logger.info("SIZE " + AbstractDungeon.gridSelectScreen.selectedCards.size()); + BustKeyOption.cardsChosen.addAll(AbstractDungeon.gridSelectScreen.selectedCards); + if (CampfireUI.hidden) { + AbstractRoom.waitTimer = 0.0F; + if (AbstractDungeon.getCurrRoom() instanceof RestRoom) { + GuardianMod.socketBonfireOption.reCheck(); + ((RestRoom) AbstractDungeon.getCurrRoom()).campfireUI.reopen(); + // there was a bug with the fire sound persisting and I'm not sure why, + // so this is basically a randomly thrown out preventative measure. + ((RestRoom) AbstractDungeon.getCurrRoom()).cutFireSound(); + + } } - //AbstractDungeon.getCurrRoom().phase = AbstractRoom.RoomPhase.COMPLETE; + } + } + + private void updateBlackScreenColor() { - if (this.duration > 1.5f) { - this.screenColor.a = Interpolation.fade.apply(1.0f, 0.0f, (this.duration - 1.5f) * 2.0f); - } else if (this.duration < 1.0f) { - this.screenColor.a = Interpolation.fade.apply(0.0f, 1.0f, this.duration); + 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 = 1.0f; + this.screenColor.a = Interpolation.fade.apply(0.0F, 1.0F, this.duration / 1.5F); } + } - public void render(final SpriteBatch sb) { + public void render(SpriteBatch sb) { sb.setColor(this.screenColor); - sb.draw(ImageMaster.WHITE_SQUARE_IMG, 0.0f, 0.0f, Settings.WIDTH, Settings.HEIGHT); + sb.draw(ImageMaster.WHITE_SQUARE_IMG, 0.0F, 0.0F, (float) Settings.WIDTH, (float) Settings.HEIGHT); + if (AbstractDungeon.screen == AbstractDungeon.CurrentScreen.GRID && pickCard && !rewardDone) { + AbstractDungeon.gridSelectScreen.render(sb); + } + } @Override diff --git a/src/main/java/expansioncontent/actions/BloodthirstAction.java b/src/main/java/expansioncontent/actions/BloodthirstAction.java index f6c3490ab8..fa932fdb07 100644 --- a/src/main/java/expansioncontent/actions/BloodthirstAction.java +++ b/src/main/java/expansioncontent/actions/BloodthirstAction.java @@ -9,8 +9,12 @@ 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; @@ -19,13 +23,15 @@ 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) { + 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 @@ -41,20 +47,37 @@ public void update() { while (var1.hasNext()) { AbstractCard c = var1.next(); if (c.uuid.equals(this.uuid)) { - // c.applyPowers(); + 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(); - //c.applyPowers(); + 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 { - AbstractDungeon.player.obtainPotion(AbstractDungeon.returnRandomPotion(true)); + if (!potion) { + AbstractDungeon.player.obtainPotion(AbstractDungeon.returnRandomPotion(true)); + } + if (potion) { + AbstractPotion potion = new PowerPotion(); + AbstractDungeon.player.obtainPotion(potion.makeCopy()); + } } } diff --git a/src/main/java/expansioncontent/actions/BossToolboxAction.java b/src/main/java/expansioncontent/actions/BossToolboxAction.java new file mode 100644 index 0000000000..6993fb1baa --- /dev/null +++ b/src/main/java/expansioncontent/actions/BossToolboxAction.java @@ -0,0 +1,105 @@ +package expansioncontent.actions; + +import automaton.AutomatonChar; +import awakenedOne.AwakenedOneChar; +import basemod.BaseMod; +import champ.ChampChar; +import collector.CollectorChar; +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.helpers.CardLibrary; +import com.megacrit.cardcrawl.screens.CardRewardScreen; +import com.megacrit.cardcrawl.vfx.cardManip.ShowCardAndAddToDiscardEffect; +import com.megacrit.cardcrawl.vfx.cardManip.ShowCardAndAddToHandEffect; +import expansioncontent.cards.*; +import expansioncontent.expansionContentMod; +import guardian.characters.GuardianCharacter; +import slimebound.characters.SlimeboundCharacter; +import theHexaghost.TheHexaghost; + +import java.util.ArrayList; +import java.util.Collections; + +public class BossToolboxAction extends AbstractGameAction { + private boolean retrieveCard = false; + private int count; + + public BossToolboxAction(int count) { + this.actionType = ActionType.CARD_MANIPULATION; + this.duration = Settings.ACTION_DUR_FAST; + this.count = count; + } + + public void update() { + if (this.duration == Settings.ACTION_DUR_FAST) { + AbstractDungeon.cardRewardScreen.customCombatOpen(this.generateCardChoices(), CardRewardScreen.TEXT[1], false); + 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.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 cardsList = new ArrayList<>(); + ArrayList selectionsList = new ArrayList<>(); + for (AbstractCard q : CardLibrary.getAllCards()) { + 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(); + cardsList.add(r); + } + } + Collections.shuffle(cardsList, AbstractDungeon.cardRandomRng.random); + for (int i = 0; i < 3; i++) { + selectionsList.add(cardsList.get(i)); + } + + return selectionsList; + } +} diff --git a/src/main/java/expansioncontent/actions/DiscoverBossAction.java b/src/main/java/expansioncontent/actions/DiscoverBossAction.java index 2259839c10..d6d7a53c5a 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)); @@ -70,18 +72,29 @@ private ArrayList generateCardChoices() { 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;} - } + 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 0000000000..ef88d896a7 --- /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 29d4b47010..732ad95db2 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 0000000000..a6043a23f7 --- /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 index 9b07b23d1c..3fdc70a135 100644 --- a/src/main/java/expansioncontent/actions/ExhaustVirusAction.java +++ b/src/main/java/expansioncontent/actions/ExhaustVirusAction.java @@ -34,7 +34,7 @@ public ExhaustVirusAction(int amount, boolean isRandom, boolean anyNumber, boole this.p = AbstractDungeon.player; this.canPickZero = canPickZero; this.isRandom = isRandom; - this.amount = 5; + this.amount = 3; this.duration = this.startDuration = Settings.ACTION_DUR_FAST; this.actionType = ActionType.EXHAUST; } @@ -98,7 +98,7 @@ public void update() { if (!this.isRandom) { numExhausted = this.amount; - AbstractDungeon.handCardSelectScreen.open(TEXT[0], 5, this.anyNumber, this.canPickZero); + AbstractDungeon.handCardSelectScreen.open(TEXT[0], 3, this.anyNumber, this.canPickZero); this.tickDuration(); return; } diff --git a/src/main/java/expansioncontent/actions/ManipulateTimeAction.java b/src/main/java/expansioncontent/actions/ManipulateTimeAction.java index 58ed76c41b..ea82b75178 100644 --- a/src/main/java/expansioncontent/actions/ManipulateTimeAction.java +++ b/src/main/java/expansioncontent/actions/ManipulateTimeAction.java @@ -41,7 +41,7 @@ public void update() { AbstractPlayer p = AbstractDungeon.player; if (!p.discardPile.isEmpty()) { - this.addToBot(new SelectCardsCenteredAction( + this.addToTop(new SelectCardsCenteredAction( p.discardPile.group, 1, "Choose.", diff --git a/src/main/java/expansioncontent/actions/PandemoniumAction.java b/src/main/java/expansioncontent/actions/PandemoniumAction.java new file mode 100644 index 0000000000..a4e2d361a8 --- /dev/null +++ b/src/main/java/expansioncontent/actions/PandemoniumAction.java @@ -0,0 +1,31 @@ +package expansioncontent.actions; + +import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.utility.NewQueueCardAction; +import com.megacrit.cardcrawl.actions.utility.UnlimboAction; +import com.megacrit.cardcrawl.cards.AbstractCard; +import com.megacrit.cardcrawl.core.Settings; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.monsters.AbstractMonster; + +public class PandemoniumAction extends AbstractGameAction { + + public PandemoniumAction() { + } + + @Override + public void update() { + isDone = true; + if (!AbstractDungeon.actionManager.turnHasEnded) { + if (!AbstractDungeon.player.discardPile.isEmpty()) { + AbstractCard cardToPlay = AbstractDungeon.player.discardPile.getRandomCard(AbstractDungeon.cardRandomRng); + AbstractDungeon.player.discardPile.removeCard(cardToPlay); + AbstractDungeon.getCurrRoom().souls.remove(cardToPlay); + AbstractDungeon.player.limbo.group.add(cardToPlay); + AbstractMonster randomMonster = AbstractDungeon.getCurrRoom().monsters.getRandomMonster(null, true, AbstractDungeon.cardRandomRng); + this.addToTop(new NewQueueCardAction(cardToPlay, randomMonster, false, true)); + this.addToTop(new UnlimboAction(cardToPlay)); + } + } + } +} diff --git a/src/main/java/expansioncontent/actions/RandomCardWithTagAction.java b/src/main/java/expansioncontent/actions/RandomCardWithTagAction.java index ea69a127a3..dd6ece104b 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/PropertiesMod.java b/src/main/java/expansioncontent/cardmods/PropertiesMod.java index 4fac405edd..0674878d7d 100644 --- a/src/main/java/expansioncontent/cardmods/PropertiesMod.java +++ b/src/main/java/expansioncontent/cardmods/PropertiesMod.java @@ -1,5 +1,6 @@ package expansioncontent.cardmods; +import awakenedOne.actions.ConjureAction; import basemod.abstracts.AbstractCardModifier; import basemod.helpers.CardModifierManager; import basemod.helpers.TooltipInfo; @@ -8,8 +9,10 @@ import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.common.ExhaustSpecificCardAction; +import com.megacrit.cardcrawl.actions.utility.UseCardAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.cards.CardGroup; +import com.megacrit.cardcrawl.core.AbstractCreature; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; @@ -20,6 +23,9 @@ import java.util.ArrayList; import java.util.List; +import static awakenedOne.util.Wiz.atb; +import static expansioncontent.expansionContentMod.ECHO; + @AbstractCardModifier.SaveIgnore public class PropertiesMod extends AbstractCardModifier { //This Modifier isn't saved due to how much it relies on Array lists to work, if you want to do something that survives Save and Exit, use a more specific card mod from this package. @@ -62,8 +68,8 @@ public void addProperty(supportedProperties property, boolean onlyForThisTurn) { //I think that it is the best way to make sure that all of the properties are applied. private void applyProperties(AbstractCard card) { if (bonusProperties.contains(supportedProperties.ECHO)) - if (!card.hasTag(expansionContentMod.ECHO)) - card.tags.add(expansionContentMod.ECHO); + if (!card.hasTag(ECHO)) + card.tags.add(ECHO); if (bonusProperties.contains(supportedProperties.ETHEREAL) || bonusPropertiesForThisTurn.contains(supportedProperties.ETHEREAL)) { card.isEthereal = true; @@ -88,54 +94,54 @@ private void applyProperties(AbstractCard card) { } //I have no idea how LibGDX sb.draw works, so if there is a better way to write this code feel free to do update this method. - private float renderIcon(AbstractCard card, SpriteBatch sb, TextureAtlas.AtlasRegion icon, float offset) { - float cardScale = Settings.scale * card.drawScale * 0.45f; //0.45 because I want some space from the size, but technically 0.5 could also work. - float iconScale = Settings.scale * card.drawScale * 0.35f; //0.35 is to get the icon to reasonable size. Note: changing the dimensions of files affects how big they are. - - sb.draw( icon, - card.current_x + AbstractCard.RAW_W * cardScale + (icon.offsetX - (float) icon.originalWidth) * iconScale, - card.current_y + AbstractCard.RAW_H * cardScale + (icon.offsetY - (float) icon.originalHeight) * iconScale + offset, - (icon.originalWidth - icon.offsetX) * iconScale - AbstractCard.RAW_W * cardScale, //Center of a card, to rotate around with the card. - (icon.originalHeight - icon.offsetY) * iconScale - AbstractCard.RAW_H * cardScale - offset, - (float) icon.packedWidth * iconScale, //Render scale - (float) icon.packedHeight * iconScale, - 1, //Don't touch this scale, as it also to distance from origin. - 1, - card.angle); - - return icon.originalHeight * iconScale; //Returns height offset for the next icon; - } - - @Override - public void onRender(AbstractCard card, SpriteBatch sb) { - if (!downfallMod.useIconsForAppliedProperties) - return; - - Color color = Color.WHITE.cpy(); - color.a = card.transparency; - sb.setColor(color); - - //TODO: Add overlay(?)/mask(?) for Echo cards. - - float offset = 0; - - //Rendering Icons in order of importance - if (bonusProperties.contains(supportedProperties.UNPLAYABLE) || bonusPropertiesForThisTurn.contains(supportedProperties.UNPLAYABLE)) { - offset -= renderIcon(card, sb, unplayableIcon, offset); - } - - if (bonusProperties.contains(supportedProperties.ETHEREAL) || bonusPropertiesForThisTurn.contains(supportedProperties.ETHEREAL)) { - offset -= renderIcon(card, sb, etherealIcon, offset); - } - - if (bonusProperties.contains(supportedProperties.RETAIN) || bonusPropertiesForThisTurn.contains(supportedProperties.RETAIN)) { - offset -= renderIcon(card, sb, retainIcon, offset); - } - - if (bonusProperties.contains(supportedProperties.EXHAUST) || bonusPropertiesForThisTurn.contains(supportedProperties.EXHAUST)) { - renderIcon(card, sb, exhaustIcon, offset); - } - } +// private float renderIcon(AbstractCard card, SpriteBatch sb, TextureAtlas.AtlasRegion icon, float offset) { +// float cardScale = Settings.scale * card.drawScale * 0.45f; //0.45 because I want some space from the size, but technically 0.5 could also work. +// float iconScale = Settings.scale * card.drawScale * 0.35f; //0.35 is to get the icon to reasonable size. Note: changing the dimensions of files affects how big they are. +// +// sb.draw( icon, +// card.current_x + AbstractCard.RAW_W * cardScale + (icon.offsetX - (float) icon.originalWidth) * iconScale, +// card.current_y + AbstractCard.RAW_H * cardScale + (icon.offsetY - (float) icon.originalHeight) * iconScale + offset, +// (icon.originalWidth - icon.offsetX) * iconScale - AbstractCard.RAW_W * cardScale, //Center of a card, to rotate around with the card. +// (icon.originalHeight - icon.offsetY) * iconScale - AbstractCard.RAW_H * cardScale - offset, +// (float) icon.packedWidth * iconScale, //Render scale +// (float) icon.packedHeight * iconScale, +// 1, //Don't touch this scale, as it also to distance from origin. +// 1, +// card.angle); +// +// return icon.originalHeight * iconScale; //Returns height offset for the next icon; +// } + +// @Override +// public void onRender(AbstractCard card, SpriteBatch sb) { +// if (!downfallMod.useIconsForAppliedProperties) +// return; +// +// Color color = Color.WHITE.cpy(); +// color.a = card.transparency; +// sb.setColor(color); +// +// //TODO: Add overlay(?)/mask(?) for Echo cards. +// +// float offset = 0; +// +// //Rendering Icons in order of importance +// if (bonusProperties.contains(supportedProperties.UNPLAYABLE) || bonusPropertiesForThisTurn.contains(supportedProperties.UNPLAYABLE)) { +// offset -= renderIcon(card, sb, unplayableIcon, offset); +// } +// +// if (bonusProperties.contains(supportedProperties.ETHEREAL) || bonusPropertiesForThisTurn.contains(supportedProperties.ETHEREAL)) { +// offset -= renderIcon(card, sb, etherealIcon, offset); +// } +// +// if (bonusProperties.contains(supportedProperties.RETAIN) || bonusPropertiesForThisTurn.contains(supportedProperties.RETAIN)) { +// offset -= renderIcon(card, sb, retainIcon, offset); +// } +// +// if (bonusProperties.contains(supportedProperties.EXHAUST) || bonusPropertiesForThisTurn.contains(supportedProperties.EXHAUST)) { +// renderIcon(card, sb, exhaustIcon, offset); +// } +// } @Override public List additionalTooltips(AbstractCard card) { @@ -193,42 +199,48 @@ private static void keywordBuilder(StringBuilder description, ArrayList counter) - description.append(uiStrings.TEXT[4]); - else { - description.append(uiStrings.TEXT[5]); - return; + if (!properties.contains(supportedProperties.ECHO)) { + if (properties.contains(supportedProperties.ETHEREAL)) { + + description.append(uiStrings.TEXT[6]); + description.append(uiStrings.TEXT[9]); + counter++; + if (properties.size() > counter) + description.append(uiStrings.TEXT[4]); + else { + description.append(uiStrings.TEXT[5]); + return; + } } } - if (properties.contains(supportedProperties.RETAIN)) { - description.append(uiStrings.TEXT[6]); - description.append(uiStrings.TEXT[10]); - counter++; - if (properties.size() > counter) - description.append(uiStrings.TEXT[4]); - else { - description.append(uiStrings.TEXT[5]); - return; + if (!properties.contains(supportedProperties.ECHO)) { + if (properties.contains(supportedProperties.RETAIN)) { + description.append(uiStrings.TEXT[6]); + description.append(uiStrings.TEXT[10]); + counter++; + if (properties.size() > counter) + description.append(uiStrings.TEXT[4]); + else { + description.append(uiStrings.TEXT[5]); + return; + } } } - if (properties.contains(supportedProperties.EXHAUST)) { - description.append(uiStrings.TEXT[6]); - description.append(uiStrings.TEXT[11]); - description.append(uiStrings.TEXT[5]); + if (!properties.contains(supportedProperties.ECHO)) { + if (properties.contains(supportedProperties.EXHAUST)) { + description.append(uiStrings.TEXT[6]); + description.append(uiStrings.TEXT[11]); + description.append(uiStrings.TEXT[5]); + } } } @Override public String modifyDescription(String rawDescription, AbstractCard card) { - if (downfallMod.useIconsForAppliedProperties) - return rawDescription; +// if (downfallMod.useIconsForAppliedProperties) +// return rawDescription; StringBuilder thingsToAdd = new StringBuilder(); @@ -238,10 +250,12 @@ public String modifyDescription(String rawDescription, AbstractCard card) { thingsToAdd.append(uiStrings.TEXT[12]); //" " } - if (bonusProperties.contains(supportedProperties.ETHEREAL) || bonusPropertiesForThisTurn.contains(supportedProperties.ETHEREAL)) { - thingsToAdd.append(uiStrings.TEXT[9]); //ETHEREAL - thingsToAdd.append(uiStrings.TEXT[5]); //"." - thingsToAdd.append(uiStrings.TEXT[12]); //" " + if (!bonusProperties.contains(supportedProperties.ECHO)) { + if (bonusProperties.contains(supportedProperties.ETHEREAL) || bonusPropertiesForThisTurn.contains(supportedProperties.ETHEREAL)) { + thingsToAdd.append(uiStrings.TEXT[9]); //ETHEREAL + thingsToAdd.append(uiStrings.TEXT[5]); //"." + thingsToAdd.append(uiStrings.TEXT[12]); //" " + } } if (bonusProperties.contains(supportedProperties.RETAIN) || bonusPropertiesForThisTurn.contains(supportedProperties.RETAIN)) { @@ -255,12 +269,22 @@ public String modifyDescription(String rawDescription, AbstractCard card) { rawDescription = thingsToAdd + rawDescription; } - if (bonusProperties.contains(supportedProperties.EXHAUST) || bonusPropertiesForThisTurn.contains(supportedProperties.EXHAUST)) {thingsToAdd.append(uiStrings.TEXT[10]); - rawDescription = rawDescription - + uiStrings.TEXT[12] //" " - + uiStrings.TEXT[13] //"NL " - + uiStrings.TEXT[11] //"Exhaust" - + uiStrings.TEXT[5]; //"." + if (!bonusProperties.contains(supportedProperties.ECHO)) { + if (bonusProperties.contains(supportedProperties.EXHAUST) || bonusPropertiesForThisTurn.contains(supportedProperties.EXHAUST)) { + thingsToAdd.append(uiStrings.TEXT[10]); + rawDescription = rawDescription + + uiStrings.TEXT[12] //" " + + uiStrings.TEXT[13] //"NL " + + uiStrings.TEXT[11] //"Exhaust" + + uiStrings.TEXT[5]; //"." + } + } + + if (bonusProperties.contains(supportedProperties.ECHO) || bonusPropertiesForThisTurn.contains(supportedProperties.ECHO)) { + thingsToAdd.append(uiStrings.TEXT[6]); //#y + thingsToAdd.append(uiStrings.TEXT[7]); //ECHO + thingsToAdd.append(uiStrings.TEXT[5]); //"." + thingsToAdd.append(uiStrings.TEXT[12]); //" " } return rawDescription; @@ -359,11 +383,21 @@ 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 //sorry - blue + + @Override + public void onUse(AbstractCard card, AbstractCreature target, UseCardAction action) { + super.onUse(card, target, action); + if ((card.hasTag(ECHO))) { + card.exhaust = true; + } + } + @Override public void onRetained(AbstractCard card) { - if (card.isEthereal) - AbstractDungeon.actionManager.addToTop(new ExhaustSpecificCardAction(card, AbstractDungeon.player.hand, true)); - } + if ((card.isEthereal) || (card.hasTag(ECHO))) { + AbstractDungeon.actionManager.addToTop(new ExhaustSpecificCardAction(card, AbstractDungeon.player.hand, true)); + } + } public enum supportedProperties { ECHO, diff --git a/src/main/java/expansioncontent/cards/AbstractExpansionCard.java b/src/main/java/expansioncontent/cards/AbstractExpansionCard.java index 4ad27e7023..95b3bdaed4 100644 --- a/src/main/java/expansioncontent/cards/AbstractExpansionCard.java +++ b/src/main/java/expansioncontent/cards/AbstractExpansionCard.java @@ -108,21 +108,6 @@ public boolean canUse(AbstractPlayer p, AbstractMonster m) { return super.canUse(p, m); } - - -//HEXAGHOST AFTERLIFE CODE -protected DamageInfo makeInfo() { - return makeInfo(damageTypeForTurn); -} - - private DamageInfo makeInfo(DamageInfo.DamageType type) { - return new DamageInfo(AbstractDungeon.player, damage, type); - } - - public void dmg(AbstractMonster m, DamageInfo info, AbstractGameAction.AttackEffect fx) { - atb(new DamageAction(m, makeInfo(), fx)); - } - @Override public void triggerOnExhaust() { int bonus = 0; @@ -162,16 +147,6 @@ protected boolean useAfterlifeVFX() { public void afterlife() {} - - - - - - - - - - //collector pyre code protected void isPyre() { CardModifierManager.addModifier(this, new PyreMod()); diff --git a/src/main/java/expansioncontent/cards/AwakenDeath.java b/src/main/java/expansioncontent/cards/AwakenDeath.java index 96292def4a..48af5a0d21 100644 --- a/src/main/java/expansioncontent/cards/AwakenDeath.java +++ b/src/main/java/expansioncontent/cards/AwakenDeath.java @@ -13,12 +13,10 @@ public class AwakenDeath extends AbstractExpansionCard { public static final String ID = makeID("AwakenDeath"); - private static final int MAGIC = 1; - public AwakenDeath() { super(ID, 2, AbstractCard.CardType.POWER, AbstractCard.CardRarity.UNCOMMON, AbstractCard.CardTarget.SELF); - this.tags.add(expansionContentMod.STUDY_AWAKENEDONE); 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"); diff --git a/src/main/java/expansioncontent/cards/BeatOfDeath.java b/src/main/java/expansioncontent/cards/BeatOfDeath.java index 668fe13493..7f05e52f1d 100644 --- a/src/main/java/expansioncontent/cards/BeatOfDeath.java +++ b/src/main/java/expansioncontent/cards/BeatOfDeath.java @@ -16,7 +16,6 @@ public class BeatOfDeath extends AbstractExpansionCard { 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.tags.add(expansionContentMod.STUDY); this.magicNumber = this.baseMagicNumber = 2; expansionContentMod.loadJokeCardImage((AbstractCard)this, "BeatOfDeath.png"); } diff --git a/src/main/java/expansioncontent/cards/BloodBarrage.java b/src/main/java/expansioncontent/cards/BloodBarrage.java index f60b12072c..07370bc8ae 100644 --- a/src/main/java/expansioncontent/cards/BloodBarrage.java +++ b/src/main/java/expansioncontent/cards/BloodBarrage.java @@ -18,8 +18,7 @@ public class BloodBarrage extends AbstractExpansionCard { 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.tags.add(expansionContentMod.STUDY); - this.baseDamage = 2; + this.baseDamage = 3; this.exhaust = true; this.baseMagicNumber = 5; this.magicNumber = this.baseMagicNumber; diff --git a/src/main/java/expansioncontent/cards/DashGenerateEvil.java b/src/main/java/expansioncontent/cards/DashGenerateEvil.java index e12299101a..c0bac8a537 100644 --- a/src/main/java/expansioncontent/cards/DashGenerateEvil.java +++ b/src/main/java/expansioncontent/cards/DashGenerateEvil.java @@ -24,7 +24,6 @@ public DashGenerateEvil() { this.baseDownfallMagic = 5; this.baseMagicNumber = this.magicNumber = 10; this.exhaust = true; - this.tags.add(expansionContentMod.STUDY); expansionContentMod.loadJokeCardImage((AbstractCard)this, "DashGenerateEvil.png"); } diff --git a/src/main/java/expansioncontent/cards/FaceSlap.java b/src/main/java/expansioncontent/cards/FaceSlap.java index da947be53c..cfa0904661 100644 --- a/src/main/java/expansioncontent/cards/FaceSlap.java +++ b/src/main/java/expansioncontent/cards/FaceSlap.java @@ -1,26 +1,17 @@ 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.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 static expansioncontent.expansionContentMod.loadJokeCardImage; + +import static champ.ChampMod.vigor; + import java.util.ArrayList; public class FaceSlap extends AbstractExpansionCard { @@ -53,24 +44,6 @@ public void use(AbstractPlayer p, AbstractMonster m) { atb(new TalkAction(true, getTaunt(), 2.0F, 2.0F)); } - public static void vigor(int begone) { - - AbstractDungeon.actionManager.addToBottom(new AbstractGameAction() { - @Override - public void update() { - isDone = true; - int x = begone; - 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; - } - } - AbstractDungeon.actionManager.addToTop(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new VigorPower(AbstractDungeon.player, x), x)); - } - }); - - } - private String getTaunt() { ArrayList derp = new ArrayList<>(); derp.add(Champ.DIALOG[0]); diff --git a/src/main/java/expansioncontent/cards/Flail.java b/src/main/java/expansioncontent/cards/Flail.java index fe5e625d75..ecde603d03 100644 --- a/src/main/java/expansioncontent/cards/Flail.java +++ b/src/main/java/expansioncontent/cards/Flail.java @@ -23,6 +23,8 @@ public Flail() { tags.add(expansionContentMod.STUDY_AUTOMATON); tags.add(expansionContentMod.STUDY); + tags.add(CardTags.STRIKE); + baseDamage = DAMAGE; this.isMultiDamage = true; this.exhaust = true; diff --git a/src/main/java/expansioncontent/cards/GuardianWhirl.java b/src/main/java/expansioncontent/cards/GuardianWhirl.java index 5b9fbbd743..01f1b97ba1 100644 --- a/src/main/java/expansioncontent/cards/GuardianWhirl.java +++ b/src/main/java/expansioncontent/cards/GuardianWhirl.java @@ -15,18 +15,18 @@ public class GuardianWhirl extends AbstractExpansionCard { public static final String ID = makeID("GuardianWhirl"); - private static final int DAMAGE = 5; + private static final int DAMAGE = 4; private static final int MAGIC = 2; private static final int downfallMagic = 10; public GuardianWhirl() { - super(ID, 1, AbstractCard.CardType.ATTACK, AbstractCard.CardRarity.UNCOMMON, AbstractCard.CardTarget.ALL_ENEMY); + 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 = 5; + this.baseDamage = 4; this.isMultiDamage = true; this.baseDownfallMagic = 10; this.magicNumber = this.baseMagicNumber = 2; @@ -52,7 +52,7 @@ public void use(AbstractPlayer p, AbstractMonster m) { public void upgrade() { if (!this.upgraded) { upgradeName(); - upgradeDamage(1); + upgradeDamage(2); } } } diff --git a/src/main/java/expansioncontent/cards/InvincibleStrength.java b/src/main/java/expansioncontent/cards/InvincibleStrength.java index e34fa4728c..49d7bec35d 100644 --- a/src/main/java/expansioncontent/cards/InvincibleStrength.java +++ b/src/main/java/expansioncontent/cards/InvincibleStrength.java @@ -15,7 +15,6 @@ public InvincibleStrength() { 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; - this.tags.add(expansionContentMod.STUDY); expansionContentMod.loadJokeCardImage((AbstractCard)this, "InvincibleStrength.png"); } diff --git a/src/main/java/expansioncontent/cards/LastStand.java b/src/main/java/expansioncontent/cards/LastStand.java index 953cd35ea4..2b26298382 100644 --- a/src/main/java/expansioncontent/cards/LastStand.java +++ b/src/main/java/expansioncontent/cards/LastStand.java @@ -46,8 +46,8 @@ public void use(AbstractPlayer p, AbstractMonster m) { atb(new RemoveDebuffsAction(p)); - atb(new ApplyPowerAction(p, p, new StrengthPower(p, 1), 1)); - double currentPct = p.currentHealth * 1.001 / p.maxHealth * 1.001; + //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)); diff --git a/src/main/java/expansioncontent/cards/ManipulateTime.java b/src/main/java/expansioncontent/cards/ManipulateTime.java index 9d58284871..141172d8b8 100644 --- a/src/main/java/expansioncontent/cards/ManipulateTime.java +++ b/src/main/java/expansioncontent/cards/ManipulateTime.java @@ -22,7 +22,7 @@ public ManipulateTime() { } public void use(AbstractPlayer p, AbstractMonster m) { - this.addToBot(new ManipulateTimeAction(this.upgraded)); + this.addToTop(new ManipulateTimeAction(this.upgraded)); } public void upgrade() { diff --git a/src/main/java/expansioncontent/cards/Pandemonium.java b/src/main/java/expansioncontent/cards/Pandemonium.java index 77eef538ee..a91cf85045 100644 --- a/src/main/java/expansioncontent/cards/Pandemonium.java +++ b/src/main/java/expansioncontent/cards/Pandemonium.java @@ -16,7 +16,6 @@ public class Pandemonium extends AbstractExpansionCard { public Pandemonium() { super(ID, 2, CardType.POWER, CardRarity.RARE, CardTarget.SELF); - tags.add(expansionContentMod.STUDY); baseMagicNumber = magicNumber = 1; this.setBackgroundTexture("expansioncontentResources/images/512/bg_boss_power.png", "expansioncontentResources/images/1024/bg_boss_power.png"); loadJokeCardImage(this, "Pandemonium.png"); diff --git a/src/main/java/expansioncontent/cards/PeekPages.java b/src/main/java/expansioncontent/cards/PeekPages.java index c9ce7a5a8a..310d05d2a9 100644 --- a/src/main/java/expansioncontent/cards/PeekPages.java +++ b/src/main/java/expansioncontent/cards/PeekPages.java @@ -29,18 +29,17 @@ public class PeekPages extends AbstractExpansionCard { public final static String ID = makeID("PeekPages"); public PeekPages() { - super(ID, 1, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); + super(ID, 0, 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; - this.tags.add(expansionContentMod.STUDY); loadJokeCardImage(this, "PeekPages.png"); } public void use(AbstractPlayer p, AbstractMonster m) { - this.addToBot(new MakeTempCardInDrawPileAction(this.cardsToPreview.makeStatEquivalentCopy(), magicNumber, true, true)); + this.addToBot(new MakeTempCardInDrawPileAction(this.cardsToPreview.makeStatEquivalentCopy(), magicNumber, false, true)); } diff --git a/src/main/java/expansioncontent/cards/QuickStudy.java b/src/main/java/expansioncontent/cards/QuickStudy.java index ba06ac922f..a5dfea6f1b 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,23 +32,34 @@ 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(SuperPrepareCrush.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(); diff --git a/src/main/java/expansioncontent/cards/Reverie.java b/src/main/java/expansioncontent/cards/Reverie.java index 655c8aacc2..28d39413ca 100644 --- a/src/main/java/expansioncontent/cards/Reverie.java +++ b/src/main/java/expansioncontent/cards/Reverie.java @@ -18,7 +18,7 @@ public class Reverie extends AbstractExpansionCard { private static final int MAGIC = 3; public Reverie() { - super(ID, 3, CardType.POWER, CardRarity.RARE, CardTarget.SELF); + super(ID, 2, CardType.POWER, CardRarity.RARE, CardTarget.SELF); tags.add(expansionContentMod.STUDY_TIMEEATER); tags.add(expansionContentMod.STUDY); baseMagicNumber = magicNumber = MAGIC; @@ -33,8 +33,7 @@ public void use(AbstractPlayer p, AbstractMonster m) { public void upgrade() { if (!upgraded) { upgradeName(); - //upgradeMagicNumber(2); - upgradeBaseCost(2); + upgradeMagicNumber(2); } } diff --git a/src/main/java/expansioncontent/cards/StudyTheSpire.java b/src/main/java/expansioncontent/cards/StudyTheSpire.java index 7af1b8b695..5b9b493b8c 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; @@ -45,6 +46,8 @@ private ArrayList getList() { 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 index 42fd64ebfc..17447dddb0 100644 --- a/src/main/java/expansioncontent/cards/SuperBloodthirst.java +++ b/src/main/java/expansioncontent/cards/SuperBloodthirst.java @@ -28,8 +28,8 @@ public class SuperBloodthirst extends AbstractExpansionCard { public SuperBloodthirst() { super(ID, 2, CardType.ATTACK, CardRarity.RARE, CardTarget.ENEMY); - tags.add(expansionContentMod.STUDY_AWAKENEDONE); 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; @@ -52,7 +52,7 @@ public void use(AbstractPlayer p, AbstractMonster m) { 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)); + this.addToBot(new BloodthirstAction(m, new DamageInfo(p, this.damage, this.damageTypeForTurn), this.uuid, false)); } public void upgrade() { diff --git a/src/main/java/expansioncontent/cards/SuperEtherStep.java b/src/main/java/expansioncontent/cards/SuperEtherStep.java index 74bd91fbec..be033e1035 100644 --- a/src/main/java/expansioncontent/cards/SuperEtherStep.java +++ b/src/main/java/expansioncontent/cards/SuperEtherStep.java @@ -42,9 +42,9 @@ public SuperEtherStep() { } 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)); - dmg(m, makeInfo(), AbstractGameAction.AttackEffect.FIRE); } public void upgrade() { diff --git a/src/main/java/expansioncontent/cards/SuperGhostShield.java b/src/main/java/expansioncontent/cards/SuperGhostShield.java index 5c191ef271..3cfa3e2a1e 100644 --- a/src/main/java/expansioncontent/cards/SuperGhostShield.java +++ b/src/main/java/expansioncontent/cards/SuperGhostShield.java @@ -6,6 +6,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.BlurPower; import downfall.downfallMod; @@ -61,6 +62,8 @@ public void 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("ブラー"); } @@ -69,15 +72,7 @@ public void initializeDescription() { String blur_name = downfallMod.keywords_and_proper_names.get("blur"); this.keywords.add(blur_name); } - if (Settings.language == Settings.GameLanguage.ZHS) { - this.keywords.add("格挡"); - } else if (Settings.language == Settings.GameLanguage.RUS) { - //this.keywords.add("ловкость"); - } else { - if (Settings.language != Settings.GameLanguage.JPN) { - this.keywords.add("block"); - } - } + } } diff --git a/src/main/java/expansioncontent/cards/TakeFlight.java b/src/main/java/expansioncontent/cards/TakeFlight.java index 73e1f837e8..82baf47094 100644 --- a/src/main/java/expansioncontent/cards/TakeFlight.java +++ b/src/main/java/expansioncontent/cards/TakeFlight.java @@ -1,16 +1,20 @@ package expansioncontent.cards; -import com.megacrit.cardcrawl.actions.AbstractGameAction; -import com.megacrit.cardcrawl.actions.common.ApplyPowerAction; +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.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.RegenPower; -import com.megacrit.cardcrawl.relics.AbstractRelic; +import com.megacrit.cardcrawl.powers.StrengthPower; import expansioncontent.expansionContentMod; +import hermit.actions.SoundAction; + +import static awakenedOne.AwakenedOneMod.*; public class TakeFlight extends AbstractExpansionCard { public static final String ID = makeID("TakeFlight"); @@ -21,50 +25,63 @@ public class TakeFlight extends AbstractExpansionCard { private static final int MAGIC = 1; - boolean chant = false; - public TakeFlight() { super(ID, 1, AbstractCard.CardType.POWER, AbstractCard.CardRarity.UNCOMMON, AbstractCard.CardTarget.SELF); - this.tags.add(expansionContentMod.STUDY_AWAKENEDONE); 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 = 3; - this.baseDownfallMagic = this.downfallMagic = 4; + 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"); - this.exhaust = true; } public void use(AbstractPlayer p, AbstractMonster m) { - if (!this.chant) - addToBot((AbstractGameAction)new ApplyPowerAction((AbstractCreature)AbstractDungeon.player, (AbstractCreature)AbstractDungeon.player, (AbstractPower)new RegenPower((AbstractCreature)AbstractDungeon.player, this.magicNumber), this.magicNumber)); - if (this.chant) - addToBot((AbstractGameAction)new ApplyPowerAction((AbstractCreature)AbstractDungeon.player, (AbstractCreature)AbstractDungeon.player, (AbstractPower)new RegenPower((AbstractCreature)AbstractDungeon.player, this.downfallMagic), this.downfallMagic)); + if (Wiz.isChantActive()) { + chant(); + } + if (!Wiz.isChantActive()) { + atb(new HealAction(p, p, magicNumber)); + } } - public void triggerWhenDrawn() { - this.chant = false; - } + public void chant() { + atb(new HealAction(AbstractDungeon.player, AbstractDungeon.player, downfallMagic)); - public void triggerOnCardPlayed(AbstractCard card) { - if (card.type == AbstractCard.CardType.POWER && AbstractDungeon.player.hand.contains((AbstractCard)this)) - this.chant = true; - } + if (!this.hasTag(ACTIVECHANT) && this.hasTag(CHANT)) { + this.tags.add(ACTIVECHANT); + this.addToBot(new SoundAction(AwakenedOneMod.makeID("CHANT"))); + } + + 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(); + } - @Override - public void onMoveToDiscard() { - this.chant = false; } public void triggerOnGlowCheck() { - this.glowColor = this.chant ? GOLD_BORDER_GLOW_COLOR : BLUE_BORDER_GLOW_COLOR; + 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(1); - upgradeDownfall(1); + upgradeMagicNumber(2); + upgradeDownfall(4); } } } diff --git a/src/main/java/expansioncontent/cards/Virus.java b/src/main/java/expansioncontent/cards/Virus.java index acbb5e5ff4..8ae31e43f4 100644 --- a/src/main/java/expansioncontent/cards/Virus.java +++ b/src/main/java/expansioncontent/cards/Virus.java @@ -24,7 +24,7 @@ public class Virus extends AbstractExpansionCard { public final static String ID = makeID("Virus"); - private static final int MAGIC = 5; + private static final int MAGIC = 3; public Virus() { super(ID, 1, CardType.SKILL, CardRarity.RARE, CardTarget.SELF); @@ -34,14 +34,14 @@ public Virus() { tags.add(expansionContentMod.STUDY_AUTOMATON); tags.add(expansionContentMod.STUDY); cardsToPreview = new MajorBeam(); - baseMagicNumber = MAGIC; + baseMagicNumber = magicNumber = MAGIC; this.exhaust = true; loadJokeCardImage(this, "Virus.png"); } public void use(AbstractPlayer p, AbstractMonster m) { - this.addToBot(new ExhaustVirusAction(5, false, true, true)); + this.addToBot(new ExhaustVirusAction(magicNumber, false, true, true)); } diff --git a/src/main/java/expansioncontent/patches/ShopBossPatch.java b/src/main/java/expansioncontent/patches/ShopBossPatch.java index e8cc19fc53..aa198ae968 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; @@ -49,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()) { @@ -88,10 +114,14 @@ public static boolean okayToSpawn(AbstractCard q) { } } if (AbstractDungeon.player instanceof CollectorChar || RandomCardWithTagAction.collectorLocked()) { - if (q.hasTag(expansionContentMod.STUDY_COLLECTOR)){ + 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 d15ce691c5..c6507b8437 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"); @@ -46,23 +53,31 @@ public AwakenDeathPower(AbstractCreature owner, AbstractCreature source, int amo @Override public boolean onPlayerDeath(AbstractPlayer abstractPlayer, DamageInfo damageInfo) { - trigger(abstractPlayer); - return false; + if (!abstractPlayer.hasRelic("Mark of the Bloom")) { + trigger(abstractPlayer); + return false; + } + return true; } - public void onVictory() - { - AbstractPlayer p = 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")); + awaken(true); + OrbitingSpells.upgradeall(); } @Override diff --git a/src/main/java/expansioncontent/powers/BeatOfDeathThatDoesntKillYouPower.java b/src/main/java/expansioncontent/powers/BeatOfDeathThatDoesntKillYouPower.java index 417c8c4c78..4f6a04488e 100644 --- a/src/main/java/expansioncontent/powers/BeatOfDeathThatDoesntKillYouPower.java +++ b/src/main/java/expansioncontent/powers/BeatOfDeathThatDoesntKillYouPower.java @@ -5,36 +5,16 @@ package expansioncontent.powers; -import collector.powers.DoomPower; -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.ApplyPowerAction; import com.megacrit.cardcrawl.actions.common.DamageAllEnemiesAction; -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 static hermit.util.Wiz.atb; - import com.megacrit.cardcrawl.actions.AbstractGameAction.AttackEffect; -import com.megacrit.cardcrawl.actions.common.DamageAction; 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.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.AbstractPower; -import com.megacrit.cardcrawl.powers.AbstractPower.PowerType; -import com.megacrit.cardcrawl.powers.VulnerablePower; -import com.megacrit.cardcrawl.powers.WeakPower; -import com.megacrit.cardcrawl.vfx.CollectorCurseEffect; -import slimebound.orbs.AttackSlime; public class BeatOfDeathThatDoesntKillYouPower extends AbstractPower { public static final String POWER_ID = "expansioncontent:BeatOfDeathP"; @@ -52,7 +32,7 @@ public BeatOfDeathThatDoesntKillYouPower(AbstractCreature owner, int amount) { this.type = PowerType.BUFF; } - public void onAfterUseCard(AbstractCard card, UseCardAction action) { + public void onAfterCardPlayed(AbstractCard card) { this.flash(); this.addToBot(new DamageAllEnemiesAction(this.owner, DamageInfo.createDamageMatrix(this.amount, true), DamageType.THORNS, AttackEffect.BLUNT_LIGHT, true)); } diff --git a/src/main/java/expansioncontent/powers/DeEnergizedPower.java b/src/main/java/expansioncontent/powers/DeEnergizedPower.java index 51b7b43e54..91300eaee6 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/PandemoniumPower.java b/src/main/java/expansioncontent/powers/PandemoniumPower.java index 1222993a2b..64da9d79d4 100644 --- a/src/main/java/expansioncontent/powers/PandemoniumPower.java +++ b/src/main/java/expansioncontent/powers/PandemoniumPower.java @@ -1,6 +1,7 @@ package expansioncontent.powers; import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.PlayTopCardAction; import com.megacrit.cardcrawl.actions.utility.UnlimboAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.cards.CardQueueItem; @@ -11,6 +12,10 @@ import com.megacrit.cardcrawl.localization.PowerStrings; import com.megacrit.cardcrawl.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.AbstractPower; +import expansioncontent.actions.EchoACardAction; +import expansioncontent.actions.PandemoniumAction; + +import static awakenedOne.util.Wiz.att; public class PandemoniumPower extends AbstractPower { public static final String POWER_ID = "expansioncontent:PandemoniumPower"; @@ -43,33 +48,7 @@ public void updateDescription() { 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; - } - }); - - } + addToBot(new PandemoniumAction()); } } } diff --git a/src/main/java/expansioncontent/powers/ReveriePower.java b/src/main/java/expansioncontent/powers/ReveriePower.java index c1618835d2..89e49e2d63 100644 --- a/src/main/java/expansioncontent/powers/ReveriePower.java +++ b/src/main/java/expansioncontent/powers/ReveriePower.java @@ -1,10 +1,12 @@ 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; @@ -44,30 +46,35 @@ public void updateDescription() { @Override public void atStartOfTurn() { - this.flash(); + if (AbstractDungeon.player.hand.size() < BaseMod.MAX_HAND_SIZE) { + if (Wiz.hand().size() < BaseMod.MAX_HAND_SIZE) { + this.flash(); + if (!AbstractDungeon.player.discardPile.isEmpty()) { + ArrayList cardsToChooseFrom = new ArrayList<>(); - 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)); + } - 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); + if (!cardsToChooseFrom.isEmpty()) { + this.addToBot(new SelectCardsCenteredAction( + cardsToChooseFrom, + 1, + DESCRIPTIONS[3], + (selectedCards) -> { + if (AbstractDungeon.player.hand.size() < BaseMod.MAX_HAND_SIZE) { + AbstractCard chosenCard = selectedCards.get(0); + AbstractDungeon.player.discardPile.removeCard(chosenCard); + AbstractDungeon.player.hand.addToHand(chosenCard); - chosenCard.lighten(false); - chosenCard.unhover(); - chosenCard.applyPowers(); - } - )); + chosenCard.lighten(false); + chosenCard.unhover(); + chosenCard.applyPowers(); + } + } + )); + } + } } } } diff --git a/src/main/java/expansioncontent/relics/StudyCardRelic.java b/src/main/java/expansioncontent/relics/StudyCardRelic.java index f493d8e2f9..be9f0eabdc 100644 --- a/src/main/java/expansioncontent/relics/StudyCardRelic.java +++ b/src/main/java/expansioncontent/relics/StudyCardRelic.java @@ -1,15 +1,11 @@ package expansioncontent.relics; 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.AbstractCard; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; -import com.megacrit.cardcrawl.helpers.CardLibrary; import com.megacrit.cardcrawl.relics.AbstractRelic; -import expansioncontent.cards.StudyTheSpire; +import expansioncontent.actions.BossToolboxAction; import expansioncontent.expansionContentMod; import downfall.util.TextureLoader; @@ -23,8 +19,7 @@ public class StudyCardRelic extends CustomRelic { private static final Texture OUTLINE = TextureLoader.getTexture(makeRelicOutlinePath("tinybowlerhatOutline.png")); public StudyCardRelic() { - super(ID, IMG, OUTLINE, RelicTier.DEPRECATED, LandingSound.FLAT); - this.tips.add(new CardPowerTip(new StudyTheSpire())); + super(ID, IMG, OUTLINE, RelicTier.SHOP, LandingSound.FLAT); } @Override @@ -32,22 +27,11 @@ public String getUpdatedDescription() { return this.DESCRIPTIONS[0]; } - @Override public void atBattleStartPreDraw() { -// if (AbstractDungeon.player instanceof SlimeboundCharacter) -// AbstractDungeon.actionManager.addToBottom(new VFXAction(new TinyHatParticle(AbstractDungeon.player))); - this.flash(); - - AbstractDungeon.actionManager.addToBottom(new RelicAboveCreatureAction(AbstractDungeon.player, this)); - - AbstractCard c; - c = CardLibrary.getCard(StudyTheSpire.ID).makeCopy(); - - c.modifyCostForCombat(-9); - AbstractDungeon.actionManager.addToBottom(new MakeTempCardInHandAction(c)); + this.addToBot(new RelicAboveCreatureAction(AbstractDungeon.player, this)); + addToBot(new BossToolboxAction(1)); } - @Override public AbstractRelic makeCopy() { return new StudyCardRelic(); diff --git a/src/main/java/gremlin/GremlinMod.java b/src/main/java/gremlin/GremlinMod.java index ebcda8b5be..b9bdac5ab1 100644 --- a/src/main/java/gremlin/GremlinMod.java +++ b/src/main/java/gremlin/GremlinMod.java @@ -52,6 +52,8 @@ import static basemod.BaseMod.addRelic; import static basemod.BaseMod.addRelicToCustomPool; +import static downfall.downfallMod.ShowCharModes; +import static downfall.downfallMod.SixSealsQuest; import static downfall.patches.EvilModeCharacterSelect.evilMode; import static gremlin.patches.GremlinEnum.GREMLIN; @@ -60,7 +62,7 @@ public class GremlinMod implements EditCharactersSubscriber, EditStringsSubscriber, EditRelicsSubscriber, EditCardsSubscriber, OnStartBattleSubscriber, PostBattleSubscriber, PostInitializeSubscriber, SetUnlocksSubscriber, StartGameSubscriber { - private static String modID = "gremlin"; + private static final String modID = "gremlin"; private static final Color GREMLIN_COLOR = CardHelper.getColor(205.0f, 92.0f, 92.0f); private static final String ASSETS_FOLDER = "gremlinResources/images"; @@ -128,8 +130,8 @@ public static void initialize() { new GremlinMod(); } - private static Map gremlinSkeletonMap = new HashMap<>(); - private static Map gremlinAnimationStateMap = new HashMap<>(); + private static final Map gremlinSkeletonMap = new HashMap<>(); + private static final Map gremlinAnimationStateMap = new HashMap<>(); public static Skeleton getGremlinSkeleton(String assetFolder) { if (!gremlinSkeletonMap.containsKey(assetFolder)) { @@ -138,7 +140,7 @@ public static Skeleton getGremlinSkeleton(String assetFolder) { TextureAtlas texture = new TextureAtlas(Gdx.files.internal(atlasString)); SkeletonJson json = new SkeletonJson(texture); - json.setScale(Settings.scale / 1f); + json.setScale(Settings.scale); SkeletonData skeletonData = json.readSkeletonData(Gdx.files.internal(jsonString)); gremlinSkeletonMap.put(assetFolder, new Skeleton(skeletonData)); gremlinSkeletonMap.get(assetFolder).setColor(Color.WHITE); @@ -302,6 +304,11 @@ public void receiveEditCards() { } + + public static boolean isGremArtModeEnabled(){ + return gremlinArtMode && ShowCharModes; + } + @Override public void receiveEditStrings() { String language = "eng"; @@ -445,15 +452,6 @@ public static boolean doesEnemyIntendToAttack(final AbstractMonster m) { @Override public void receivePostInitialize() { - BaseMod.addPotion(SwapPotion.class, Color.BLACK, Color.GRAY, Color.SLATE, SwapPotion.POTION_ID, GREMLIN); - BaseMod.addPotion(GremlinPotion.class, Color.RED, Color.YELLOW, Color.BLUE, GremlinPotion.POTION_ID, GREMLIN); - BaseMod.addPotion(NecromancyPotion.class, Color.RED, Color.YELLOW, Color.BLUE, NecromancyPotion.POTION_ID, GREMLIN); - - // BanSharedContentPatch.registerRunLockedPotion(GREMLIN, WizPotion.POTION_ID); - - if (Loader.isModLoaded("widepotions")) { - WidePotionsMod.whitelistSimplePotion(GremlinPotion.POTION_ID); - } BaseMod.addEvent(new AddEventParams.Builder(BackToBasicsGremlin.ID, BackToBasicsGremlin.class) //Event ID// //Event Character// diff --git a/src/main/java/gremlin/actions/AstoundAction.java b/src/main/java/gremlin/actions/AstoundAction.java index f6fcba5122..a4373bbd99 100644 --- a/src/main/java/gremlin/actions/AstoundAction.java +++ b/src/main/java/gremlin/actions/AstoundAction.java @@ -10,7 +10,7 @@ public class AstoundAction extends AbstractGameAction { - private boolean upgraded; + private final boolean upgraded; public AstoundAction(final AbstractCreature source, int amount, boolean upgraded) { this.duration = Settings.ACTION_DUR_XFAST; diff --git a/src/main/java/gremlin/actions/CounterStrikeAction.java b/src/main/java/gremlin/actions/CounterStrikeAction.java index d4b8a26767..52f4b88727 100644 --- a/src/main/java/gremlin/actions/CounterStrikeAction.java +++ b/src/main/java/gremlin/actions/CounterStrikeAction.java @@ -18,8 +18,8 @@ public class CounterStrikeAction extends AbstractGameAction { - private AbstractMonster m; - private boolean isUpgraded; + private final AbstractMonster m; + private final boolean isUpgraded; public CounterStrikeAction(final AbstractMonster m, final int amount, boolean isUpgraded) { this.actionType = ActionType.WAIT; diff --git a/src/main/java/gremlin/actions/DamagePerCardPlayedAction.java b/src/main/java/gremlin/actions/DamagePerCardPlayedAction.java index cce1cbabbc..d2c54b3154 100644 --- a/src/main/java/gremlin/actions/DamagePerCardPlayedAction.java +++ b/src/main/java/gremlin/actions/DamagePerCardPlayedAction.java @@ -8,7 +8,7 @@ public class DamagePerCardPlayedAction extends AbstractGameAction { - private DamageInfo info; + private final DamageInfo info; public DamagePerCardPlayedAction(final AbstractCreature target, final DamageInfo info, final AttackEffect effect) { this.setValues(target, this.info = info); diff --git a/src/main/java/gremlin/actions/DamageRandomEnemyActionButItsRelicRng.java b/src/main/java/gremlin/actions/DamageRandomEnemyActionButItsRelicRng.java new file mode 100644 index 0000000000..b41efea2e9 --- /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/DuplicateAction.java b/src/main/java/gremlin/actions/DuplicateAction.java index f74a422844..b4b8b0670f 100644 --- a/src/main/java/gremlin/actions/DuplicateAction.java +++ b/src/main/java/gremlin/actions/DuplicateAction.java @@ -18,7 +18,7 @@ public class DuplicateAction extends AbstractGameAction { public static final String[] TEXT = uiStrings.TEXT; private final AbstractPlayer p; private final int dupeAmount; - private ArrayList cannotDuplicate = new ArrayList<>(); + private final ArrayList cannotDuplicate = new ArrayList<>(); public DuplicateAction(AbstractCreature source, int amount) { setValues(AbstractDungeon.player, source, amount); diff --git a/src/main/java/gremlin/actions/DuplicatePowerAction.java b/src/main/java/gremlin/actions/DuplicatePowerAction.java new file mode 100644 index 0000000000..11842ccc1e --- /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/EatArmorAction.java b/src/main/java/gremlin/actions/EatArmorAction.java index e8952f11ab..a6ecccf2aa 100644 --- a/src/main/java/gremlin/actions/EatArmorAction.java +++ b/src/main/java/gremlin/actions/EatArmorAction.java @@ -8,7 +8,7 @@ public class EatArmorAction extends AbstractGameAction { - private AbstractCreature c; + private final AbstractCreature c; public EatArmorAction(AbstractCreature c) { this.c = c; diff --git a/src/main/java/gremlin/actions/GremlinSwapAction.java b/src/main/java/gremlin/actions/GremlinSwapAction.java index 908d697d54..f8e6b221ff 100644 --- a/src/main/java/gremlin/actions/GremlinSwapAction.java +++ b/src/main/java/gremlin/actions/GremlinSwapAction.java @@ -19,7 +19,7 @@ import java.util.Random; public class GremlinSwapAction extends AbstractGameAction { - private static UIStrings uiStrings = CardCrawlGame.languagePack.getUIString("Gremlin:Swap"); + private static final UIStrings uiStrings = CardCrawlGame.languagePack.getUIString("Gremlin:Swap"); private GremlinStandby gremlin; private boolean fromRelic = false; diff --git a/src/main/java/gremlin/actions/PretaliationAction.java b/src/main/java/gremlin/actions/PretaliationAction.java index bf76e66c52..c515a76145 100644 --- a/src/main/java/gremlin/actions/PretaliationAction.java +++ b/src/main/java/gremlin/actions/PretaliationAction.java @@ -9,7 +9,7 @@ public class PretaliationAction extends AbstractGameAction { - private AbstractMonster m; + private final AbstractMonster m; public PretaliationAction(final int dmgAmount, final AbstractMonster m) { this.actionType = ActionType.WAIT; diff --git a/src/main/java/gremlin/actions/ProperToolsAction.java b/src/main/java/gremlin/actions/ProperToolsAction.java index 6c30a7b225..c80211a3ff 100644 --- a/src/main/java/gremlin/actions/ProperToolsAction.java +++ b/src/main/java/gremlin/actions/ProperToolsAction.java @@ -10,7 +10,7 @@ public class ProperToolsAction extends AbstractGameAction { - private AbstractMonster m; + private final AbstractMonster m; public ProperToolsAction(final AbstractMonster m, int amount) { this.actionType = ActionType.WAIT; diff --git a/src/main/java/gremlin/actions/RemoveRandomDebuffAction.java b/src/main/java/gremlin/actions/RemoveRandomDebuffAction.java index d695a7d219..663a141146 100644 --- a/src/main/java/gremlin/actions/RemoveRandomDebuffAction.java +++ b/src/main/java/gremlin/actions/RemoveRandomDebuffAction.java @@ -10,7 +10,7 @@ import java.util.Iterator; public class RemoveRandomDebuffAction extends AbstractGameAction { - private AbstractCreature c; + private final AbstractCreature c; public RemoveRandomDebuffAction(AbstractCreature c) { this.c = c; diff --git a/src/main/java/gremlin/actions/SetCardTargetCoordinatesAction.java b/src/main/java/gremlin/actions/SetCardTargetCoordinatesAction.java index caa068534e..64c15c0766 100644 --- a/src/main/java/gremlin/actions/SetCardTargetCoordinatesAction.java +++ b/src/main/java/gremlin/actions/SetCardTargetCoordinatesAction.java @@ -5,9 +5,9 @@ //Thanks Mystic mod public class SetCardTargetCoordinatesAction extends AbstractGameAction { - private AbstractCard card; - private float destinationX; - private float destinationY; + private final AbstractCard card; + private final float destinationX; + private final float destinationY; public SetCardTargetCoordinatesAction(AbstractCard card, float destinationX, float destinationY) { //set a coordinate to -1 to use original coordinate this.actionType = ActionType.SPECIAL; diff --git a/src/main/java/gremlin/actions/ShivPerCardPlayedAction.java b/src/main/java/gremlin/actions/ShivPerCardPlayedAction.java index 7dae122884..fcdfec7abd 100644 --- a/src/main/java/gremlin/actions/ShivPerCardPlayedAction.java +++ b/src/main/java/gremlin/actions/ShivPerCardPlayedAction.java @@ -9,7 +9,7 @@ public class ShivPerCardPlayedAction extends AbstractGameAction { - private boolean upgraded; + private final boolean upgraded; public ShivPerCardPlayedAction(boolean upgraded) { this.actionType = ActionType.CARD_MANIPULATION; diff --git a/src/main/java/gremlin/actions/ThinkAction.java b/src/main/java/gremlin/actions/ThinkAction.java index 883b926574..f24509558d 100644 --- a/src/main/java/gremlin/actions/ThinkAction.java +++ b/src/main/java/gremlin/actions/ThinkAction.java @@ -8,9 +8,9 @@ public class ThinkAction extends AbstractGameAction { - private String msg; + private final String msg; private boolean used = false; - private float bubbleDuration; + private final float bubbleDuration; public ThinkAction(String text, float duration, float bubbleDuration) { diff --git a/src/main/java/gremlin/cards/AbstractGremlinCard.java b/src/main/java/gremlin/cards/AbstractGremlinCard.java index 39fd40bf47..208110fcc7 100644 --- a/src/main/java/gremlin/cards/AbstractGremlinCard.java +++ b/src/main/java/gremlin/cards/AbstractGremlinCard.java @@ -116,7 +116,7 @@ public enum ART_GREMLIN { } public ART_GREMLIN getGremlinEnumFromCard(AbstractCard card) { - if (!GremlinMod.gremlinArtMode && !(card instanceof GremlinDance)) { + if (!GremlinMod.isGremArtModeEnabled() && !(card instanceof GremlinDance)) { return ART_GREMLIN.NONE; } diff --git a/src/main/java/gremlin/cards/BrokenShin.java b/src/main/java/gremlin/cards/BrokenShin.java index 164acdfcae..526e8edd18 100644 --- a/src/main/java/gremlin/cards/BrokenShin.java +++ b/src/main/java/gremlin/cards/BrokenShin.java @@ -24,14 +24,13 @@ 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 = 2; + private static final int COST = 3; private static final int MAGIC = 4; private static final int UPGRADE_BONUS = -1; public BrokenShin() { super(ID, NAME, IMG_PATH, COST, strings.DESCRIPTION, TYPE, RARITY, TARGET); - this.baseMagicNumber = MAGIC; this.magicNumber = baseMagicNumber; this.tags.add(SneckoMod.BANNEDFORSNECKO); diff --git a/src/main/java/gremlin/cards/CounterStrike.java b/src/main/java/gremlin/cards/CounterStrike.java index b30fb75dae..0eb6f7bf92 100644 --- a/src/main/java/gremlin/cards/CounterStrike.java +++ b/src/main/java/gremlin/cards/CounterStrike.java @@ -47,7 +47,7 @@ public void use(AbstractPlayer p, AbstractMonster m) { AbstractDungeon.actionManager.addToBottom(new DamageAction(m, new DamageInfo(p, this.damage, this.damageTypeForTurn), AbstractGameAction.AttackEffect.BLUNT_LIGHT)); for(int i = 0; i < magicNumber; i++) { - AbstractDungeon.actionManager.addToBottom(new CounterStrikeAction(m, 1, upgraded)); + AbstractDungeon.actionManager.addToBottom(new CounterStrikeAction(m, 1, false)); } } diff --git a/src/main/java/gremlin/cards/Encore.java b/src/main/java/gremlin/cards/Encore.java index 9a85f81f76..d426274840 100644 --- a/src/main/java/gremlin/cards/Encore.java +++ b/src/main/java/gremlin/cards/Encore.java @@ -13,7 +13,6 @@ import gremlin.powers.WizPower; import static gremlin.GremlinMod.WIZARD_GREMLIN; -import static hermit.util.Wiz.removePower; public class Encore extends AbstractGremlinCard { public static final String ID = getID("Encore"); diff --git a/src/main/java/gremlin/cards/GremlinArms.java b/src/main/java/gremlin/cards/GremlinArms.java index 96a670a400..749d1df89e 100644 --- a/src/main/java/gremlin/cards/GremlinArms.java +++ b/src/main/java/gremlin/cards/GremlinArms.java @@ -45,7 +45,7 @@ public class GremlinArms extends AbstractGremlinCard { private boolean hasOptions = true; private float rotationTimer; private int previewIndex; - private ArrayList cardsList = new ArrayList<>(); + private final ArrayList cardsList = new ArrayList<>(); public GremlinArms() { diff --git a/src/main/java/gremlin/cards/GremlinDance.java b/src/main/java/gremlin/cards/GremlinDance.java index d396ea6fad..98a58dfd47 100644 --- a/src/main/java/gremlin/cards/GremlinDance.java +++ b/src/main/java/gremlin/cards/GremlinDance.java @@ -39,10 +39,10 @@ public class GremlinDance extends AbstractGremlinCard { private static final int MAGIC = 2; private static final int UPGRADE_BONUS = 2; - private String gremlin; + private final String gremlin; private float rotationTimer; private int previewIndex; - private ArrayList cardsList = new ArrayList<>(); + private final ArrayList cardsList = new ArrayList<>(); public GremlinDance() { diff --git a/src/main/java/gremlin/cards/Nob.java b/src/main/java/gremlin/cards/Nob.java index f3a42ae175..53d23187a9 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; @@ -39,7 +41,7 @@ public class Nob extends AbstractGremlinCard implements SpawnModificationCard { private float rotationTimer; private int previewIndex; - private ArrayList cardsList = new ArrayList<>(); + private final ArrayList cardsList = new ArrayList<>(); public Nob() { super(ID, NAME, IMG_PATH, COST, strings.DESCRIPTION, TYPE, RARITY, TARGET); @@ -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) { @@ -80,27 +83,6 @@ public void upgrade() { // 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/Pickpocket.java b/src/main/java/gremlin/cards/Pickpocket.java index 72570e1703..7dbdc11164 100644 --- a/src/main/java/gremlin/cards/Pickpocket.java +++ b/src/main/java/gremlin/cards/Pickpocket.java @@ -27,8 +27,8 @@ public class Pickpocket extends AbstractGremlinCard { private static final AbstractCard.CardTarget TARGET = AbstractCard.CardTarget.ENEMY; private static final int COST = 2; - private static final int POWER = 9; - private static final int MAGIC = 2; + private static final int POWER = 10; + private static final int MAGIC = 10; private static final int UPGRADE_BONUS = 4; public Pickpocket() @@ -37,9 +37,8 @@ public Pickpocket() this.baseMagicNumber = MAGIC; this.magicNumber = baseMagicNumber; this.baseDamage = POWER; - this.baseBlamage = 5; this.exhaust = true; - this.tags.add(MAD_GREMLIN); + this.tags.add(CardTags.HEALING); setBackgrounds(); GremlinMod.loadJokeCardImage(this, "Pickpocket.png"); } @@ -48,28 +47,10 @@ public Pickpocket() public void use(AbstractPlayer p, AbstractMonster m) { AbstractDungeon.actionManager.addToBottom(new DamageAction(m, new DamageInfo(p, this.damage, this.damageTypeForTurn), AbstractGameAction.AttackEffect.SLASH_DIAGONAL)); - - AbstractDungeon.actionManager.addToBottom(new ShackleAction(m, magicNumber)); - AbstractDungeon.actionManager.addToBottom(new ShackleAction(m, magicNumber)); - - if (!this.upgraded) { - { - AbstractDungeon.player.gainGold(5); - for (int i = 0; i < 5; ++i) { - AbstractDungeon.effectList.add(new GainPennyEffect(p, p.hb.cX, p.hb.cY, p.hb.cX, p.hb.cY, true)); - } - } - } - - if (this.upgraded) { - { - AbstractDungeon.player.gainGold(10); - for (int i = 0; i < 10; ++i) { + 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 @@ -77,9 +58,8 @@ public void upgrade() { if (!this.upgraded) { upgradeName(); - upgradeBlammage(5); upgradeDamage(UPGRADE_BONUS); - upgradeMagicNumber(1); + upgradeMagicNumber(4); } } } diff --git a/src/main/java/gremlin/cards/Polish.java b/src/main/java/gremlin/cards/Polish.java index 987993615f..e3b3fd117c 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,30 +61,8 @@ 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<>(); + private final ArrayList cardsList = new ArrayList<>(); } diff --git a/src/main/java/gremlin/cards/ProperTools.java b/src/main/java/gremlin/cards/ProperTools.java index a239efb27f..623320ecd7 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; @@ -36,7 +38,7 @@ public class ProperTools extends AbstractGremlinCard { private float rotationTimer; private int previewIndex; - private ArrayList cardsList = new ArrayList<>(); + private final ArrayList cardsList = new ArrayList<>(); public ProperTools() { @@ -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"); @@ -71,25 +70,4 @@ 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(); - } - } - } } diff --git a/src/main/java/gremlin/cards/ShowStopper.java b/src/main/java/gremlin/cards/ShowStopper.java index 5d0d2ffadd..473f65d95f 100644 --- a/src/main/java/gremlin/cards/ShowStopper.java +++ b/src/main/java/gremlin/cards/ShowStopper.java @@ -36,7 +36,7 @@ public ShowStopper() super(ID, NAME, IMG_PATH, COST, strings.DESCRIPTION, TYPE, RARITY, TARGET); this.baseDamage = POWER; - this.baseMagicNumber = 5; + this.magicNumber = this.baseMagicNumber = 5; this.isMultiDamage = true; this.tags.add(SneckoMod.BANNEDFORSNECKO); this.tags.add(WIZARD_GREMLIN); @@ -49,8 +49,7 @@ public void use(AbstractPlayer p, AbstractMonster m) { AbstractDungeon.actionManager.addToBottom(new VFXAction(new GrandFinalEffect(), 1.0F)); for(int i=0;i cardsList = new ArrayList<>(); + private final ArrayList cardsList = new ArrayList<>(); public SupplyScrollCard() { super(ID, NAME, GremlinMod.getResourcePath(IMG_PATH), COST, strings.DESCRIPTION, TYPE, diff --git a/src/main/java/gremlin/cards/Ward.java b/src/main/java/gremlin/cards/Ward.java index ad84e9d2e4..0dc08753db 100644 --- a/src/main/java/gremlin/cards/Ward.java +++ b/src/main/java/gremlin/cards/Ward.java @@ -40,7 +40,6 @@ public Ward() this.baseBlock = BLOCK; } this.exhaust = true; - GremlinMod.loadJokeCardImage(this, "Ward.png"); } @Override diff --git a/src/main/java/gremlin/events/BackToBasicsGremlin.java b/src/main/java/gremlin/events/BackToBasicsGremlin.java index 02fe57e909..3f63cc7621 100644 --- a/src/main/java/gremlin/events/BackToBasicsGremlin.java +++ b/src/main/java/gremlin/events/BackToBasicsGremlin.java @@ -44,9 +44,9 @@ public class BackToBasicsGremlin extends AbstractImageEvent { } private BackToBasicsGremlin.CUR_SCREEN screen; - private List cardsUpgraded; - private ArrayList strikesToRemove; - private ArrayList defendsToRemove; + private final List cardsUpgraded; + private final ArrayList strikesToRemove; + private final ArrayList defendsToRemove; public BackToBasicsGremlin() { super(NAME, DIALOG_1, "images/events/backToBasics.jpg"); diff --git a/src/main/java/gremlin/events/GremlinTrenchcoat.java b/src/main/java/gremlin/events/GremlinTrenchcoat.java index 8ab83bb501..b8e6664827 100644 --- a/src/main/java/gremlin/events/GremlinTrenchcoat.java +++ b/src/main/java/gremlin/events/GremlinTrenchcoat.java @@ -115,7 +115,7 @@ private enum CUR_SCREEN { INTRO, COMPLETE; - private CUR_SCREEN() { + CUR_SCREEN() { } } } diff --git a/src/main/java/gremlin/orbs/GremlinStandby.java b/src/main/java/gremlin/orbs/GremlinStandby.java index bd21f0fd7b..eda529bedb 100644 --- a/src/main/java/gremlin/orbs/GremlinStandby.java +++ b/src/main/java/gremlin/orbs/GremlinStandby.java @@ -24,7 +24,7 @@ public abstract class GremlinStandby extends AbstractOrb { public AnimationState state; public int hp; - private int yOffset; + private final int yOffset; public String assetFolder; public String animationName; diff --git a/src/main/java/gremlin/patches/ApplyPowerPatch.java b/src/main/java/gremlin/patches/ApplyPowerPatch.java index b189e599c4..94cd30d7c6 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/AttackDamageRandomPatch.java b/src/main/java/gremlin/patches/AttackDamageRandomPatch.java new file mode 100644 index 0000000000..45b024b508 --- /dev/null +++ b/src/main/java/gremlin/patches/AttackDamageRandomPatch.java @@ -0,0 +1,24 @@ +//package gremlin.patches; +// +//import basemod.ReflectionHacks; +//import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; +//import com.megacrit.cardcrawl.actions.common.AttackDamageRandomEnemyAction; +//import com.megacrit.cardcrawl.cards.DamageInfo; +//import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +//import gremlin.relics.FragmentationGrenade; +// +//@SpirePatch( +// clz= AttackDamageRandomEnemyAction.class, +// method=SpirePatch.CONSTRUCTOR, +// paramtypez={AttackDamageRandomEnemyAction.class} +//) +//public class AttackDamageRandomPatch { +// public static void Postfix(AttackDamageRandomEnemyAction __instance){ +// if(AbstractDungeon.player.hasRelic(FragmentationGrenade.ID)){ +// AbstractDungeon.player.getRelic(FragmentationGrenade.ID).flash(); +// DamageInfo old = ReflectionHacks.getPrivate(__instance, AttackDamageRandomEnemyAction.class, "info"); +// ReflectionHacks.setPrivate(__instance, AttackDamageRandomEnemyAction.class, "info", +// new DamageInfo(old.owner, old.base + FragmentationGrenade.OOMPH, old.type)); +// } +// } +//} \ No newline at end of file diff --git a/src/main/java/gremlin/patches/CampfireRestPatch.java b/src/main/java/gremlin/patches/CampfireRestPatch.java index a139483fa7..168a43c162 100644 --- a/src/main/java/gremlin/patches/CampfireRestPatch.java +++ b/src/main/java/gremlin/patches/CampfireRestPatch.java @@ -20,7 +20,7 @@ public static void Postfix(CampfireSleepEffect __instance){ if (ModHelper.isModEnabled(NightTerrors.ID)) { gremlinMob.mobState.setToMax(gremlinMob.maxHealth); } else { - int toHeal = (Integer)ReflectionHacks.getPrivate(__instance, CampfireSleepEffect.class, "healAmount"); + int toHeal = ReflectionHacks.getPrivate(__instance, CampfireSleepEffect.class, "healAmount"); gremlinMob.mobState.campfireHeal(toHeal, gremlinMob.maxHealth); } if (gremlinMob.canRez()) { diff --git a/src/main/java/gremlin/patches/DamageConditionalGivePatchApply.java b/src/main/java/gremlin/patches/DamageConditionalGivePatchApply.java index 342321064f..d1e68b1c00 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/GremBtnPatch.java b/src/main/java/gremlin/patches/GremBtnPatch.java index 72386a5f7e..19a02cdb77 100644 --- a/src/main/java/gremlin/patches/GremBtnPatch.java +++ b/src/main/java/gremlin/patches/GremBtnPatch.java @@ -1,3 +1,4 @@ +/* package gremlin.patches; import com.badlogic.gdx.graphics.Color; @@ -64,3 +65,6 @@ public static void Postfix(CharacterOption obj) { } } } + + + */ \ No newline at end of file diff --git a/src/main/java/gremlin/patches/GremlinMobState.java b/src/main/java/gremlin/patches/GremlinMobState.java index bd04ccd93d..aba305c915 100644 --- a/src/main/java/gremlin/patches/GremlinMobState.java +++ b/src/main/java/gremlin/patches/GremlinMobState.java @@ -15,7 +15,7 @@ public class GremlinMobState { public ArrayList gremlins; public ArrayList gremlinHP; - private ArrayList enslaved; + private final ArrayList enslaved; private String voucher; public boolean inCombat = false; // Workaround for not have ascension available at creation @@ -243,7 +243,7 @@ public String toString() { for(int i=0;i" + "[" + voucher + "]"; + return s + " <" + enslaved.toString() + ">" + "[" + voucher + "]"; } public String getGremlinName(int index) { diff --git a/src/main/java/gremlin/patches/UnforgivingPatch.java b/src/main/java/gremlin/patches/UnforgivingPatch.java index c89b5fadf8..e946dbc982 100644 --- a/src/main/java/gremlin/patches/UnforgivingPatch.java +++ b/src/main/java/gremlin/patches/UnforgivingPatch.java @@ -23,7 +23,7 @@ public class UnforgivingPatch { rloc=35 ) public static SpireReturn Insert(ApplyPowerAction __instance) { - AbstractPower powerToApply = (AbstractPower) ReflectionHacks.getPrivate(__instance, ApplyPowerAction.class, "powerToApply"); + AbstractPower powerToApply = ReflectionHacks.getPrivate(__instance, ApplyPowerAction.class, "powerToApply"); if(powerToApply.ID.equals(StrengthPower.POWER_ID) && __instance.amount < 0 && __instance.target.hasPower(UnforgivingPower.POWER_ID)){ diff --git a/src/main/java/gremlin/patches/eventpatches/CursedTomePatch.java b/src/main/java/gremlin/patches/eventpatches/CursedTomePatch.java index 9e72fcf665..03127e2030 100644 --- a/src/main/java/gremlin/patches/eventpatches/CursedTomePatch.java +++ b/src/main/java/gremlin/patches/eventpatches/CursedTomePatch.java @@ -17,7 +17,7 @@ public static class TomeConstructior { public static void Postfix(CursedTome __instance) { if (AbstractDungeon.player instanceof GremlinCharacter) { - int dmg = (int) ReflectionHacks.getPrivate(__instance, CursedTome.class, "finalDmg"); + int dmg = ReflectionHacks.getPrivate(__instance, CursedTome.class, "finalDmg"); dmg = (dmg + 4) / 5; // Divided by 5 rounded up ReflectionHacks.setPrivate(__instance, CursedTome.class, "finalDmg", dmg); } @@ -32,7 +32,7 @@ public static class TomeOptionDamage ) public static void Insert(CursedTome __instance, int buttonPressed){ if (AbstractDungeon.player instanceof GremlinCharacter) { - int dmg = (int) ReflectionHacks.getPrivate(__instance, CursedTome.class, "finalDmg"); + int dmg = ReflectionHacks.getPrivate(__instance, CursedTome.class, "finalDmg"); __instance.imageEventText.updateDialogOption(0, strings.OPTIONS[0] + dmg + CursedTome.OPTIONS[6]); } } @@ -46,7 +46,7 @@ public static class TomeDamage ) public static void Insert(CursedTome __instance, int buttonPressed){ if (AbstractDungeon.player instanceof GremlinCharacter) { - int dmg = (int) ReflectionHacks.getPrivate(__instance, CursedTome.class, "finalDmg"); + int dmg = ReflectionHacks.getPrivate(__instance, CursedTome.class, "finalDmg"); ((GremlinCharacter) AbstractDungeon.player).damageGremlins(dmg); } } diff --git a/src/main/java/gremlin/patches/eventpatches/GremlinEventFixPatch1.java b/src/main/java/gremlin/patches/eventpatches/GremlinEventFixPatch1.java index 9c498b661d..52d5667a9f 100644 --- a/src/main/java/gremlin/patches/eventpatches/GremlinEventFixPatch1.java +++ b/src/main/java/gremlin/patches/eventpatches/GremlinEventFixPatch1.java @@ -16,7 +16,7 @@ public class GremlinEventFixPatch1 { public static SpireField ranExtraCheck = new SpireField<>(() -> false); // The strings to detect that indicate this is an HP-loss event. - private static String[] REPLACEMENTSTRINGS = CardCrawlGame.languagePack.getUIString("Gremlin:EventReplacementStrings").TEXT; + private static final String[] REPLACEMENTSTRINGS = CardCrawlGame.languagePack.getUIString("Gremlin:EventReplacementStrings").TEXT; // Check if an event option involves the player losing HP via their text. protected static boolean needs_replacement(String msg) { diff --git a/src/main/java/gremlin/patches/eventpatches/KnowingSkullPatch.java b/src/main/java/gremlin/patches/eventpatches/KnowingSkullPatch.java index 2923218b37..5414cf7ad5 100644 --- a/src/main/java/gremlin/patches/eventpatches/KnowingSkullPatch.java +++ b/src/main/java/gremlin/patches/eventpatches/KnowingSkullPatch.java @@ -17,7 +17,7 @@ public static class SkullConstructior { public static void Postfix(KnowingSkull __instance) { if (AbstractDungeon.player instanceof GremlinCharacter) { - int dmg = (int) ReflectionHacks.getPrivate(__instance, KnowingSkull.class, "leaveCost"); + int dmg = ReflectionHacks.getPrivate(__instance, KnowingSkull.class, "leaveCost"); dmg = (dmg + 4) / 5; // Divided by 5 rounded up ReflectionHacks.setPrivate(__instance, KnowingSkull.class, "leaveCost", dmg); } @@ -32,7 +32,7 @@ public static class SkullOptionDamage ) public static void Insert(KnowingSkull __instance, int buttonPressed){ if (AbstractDungeon.player instanceof GremlinCharacter) { - int dmg = (int) ReflectionHacks.getPrivate(__instance, KnowingSkull.class, "leaveCost"); + int dmg = ReflectionHacks.getPrivate(__instance, KnowingSkull.class, "leaveCost"); __instance.imageEventText.updateDialogOption(0, strings.OPTIONS[2] + dmg + KnowingSkull.OPTIONS[1]); __instance.imageEventText.updateDialogOption(1, KnowingSkull.OPTIONS[5] + 90 + strings.OPTIONS[3] + dmg + KnowingSkull.OPTIONS[1]); __instance.imageEventText.updateDialogOption(2, strings.OPTIONS[1] + dmg + KnowingSkull.OPTIONS[1]); @@ -49,7 +49,7 @@ public static class SkullDamage ) public static void Insert(KnowingSkull __instance, int buttonPressed){ if (AbstractDungeon.player instanceof GremlinCharacter) { - int dmg = (int) ReflectionHacks.getPrivate(__instance, KnowingSkull.class, "leaveCost"); + int dmg = ReflectionHacks.getPrivate(__instance, KnowingSkull.class, "leaveCost"); ((GremlinCharacter) AbstractDungeon.player).damageGremlins(dmg); } } diff --git a/src/main/java/gremlin/patches/eventpatches/ScrapOozePatch.java b/src/main/java/gremlin/patches/eventpatches/ScrapOozePatch.java index b995517289..7ee41e483e 100644 --- a/src/main/java/gremlin/patches/eventpatches/ScrapOozePatch.java +++ b/src/main/java/gremlin/patches/eventpatches/ScrapOozePatch.java @@ -18,9 +18,9 @@ public static class OozeConstructior { public static void Postfix(ScrapOoze __instance) { if (AbstractDungeon.player instanceof GremlinCharacter) { - int dmg = (int) ReflectionHacks.getPrivate(__instance, ScrapOoze.class, "dmg"); + int dmg = ReflectionHacks.getPrivate(__instance, ScrapOoze.class, "dmg"); dmg = (dmg + 4) / 5; // Divided by 5 rounded up - int relicObtainChance = (int) ReflectionHacks.getPrivate(__instance, ScrapOoze.class, "relicObtainChance"); + int relicObtainChance = ReflectionHacks.getPrivate(__instance, ScrapOoze.class, "relicObtainChance"); __instance.imageEventText.updateDialogOption(0, strings.OPTIONS[0] + dmg + ScrapOoze.OPTIONS[1] + relicObtainChance + ScrapOoze.OPTIONS[2]); } } @@ -34,7 +34,7 @@ public static class OozePreDamage ) public static void Insert(ScrapOoze __instance, int buttonPressed){ if (AbstractDungeon.player instanceof GremlinCharacter) { - int dmg = (int) ReflectionHacks.getPrivate(__instance, ScrapOoze.class, "dmg"); + int dmg = ReflectionHacks.getPrivate(__instance, ScrapOoze.class, "dmg"); realDmg = dmg; dmg = (dmg + 4) / 5; // Divided by 5 rounded up ((GremlinCharacter) AbstractDungeon.player).damageGremlins(dmg); @@ -64,9 +64,9 @@ public static class OozeOption ) public static void Insert(ScrapOoze __instance, int buttonPressed) { if (AbstractDungeon.player instanceof GremlinCharacter) { - int dmg = (int) ReflectionHacks.getPrivate(__instance, ScrapOoze.class, "dmg"); + int dmg = ReflectionHacks.getPrivate(__instance, ScrapOoze.class, "dmg"); dmg = (dmg + 4) / 5; // Divided by 5 rounded up - int relicObtainChance = (int) ReflectionHacks.getPrivate(__instance, ScrapOoze.class, "relicObtainChance"); + int relicObtainChance = ReflectionHacks.getPrivate(__instance, ScrapOoze.class, "relicObtainChance"); __instance.imageEventText.updateDialogOption(0, strings.OPTIONS[1] + dmg + ScrapOoze.OPTIONS[1] + relicObtainChance + ScrapOoze.OPTIONS[2]); } } diff --git a/src/main/java/gremlin/patches/eventpatches/WingStatuePatch.java b/src/main/java/gremlin/patches/eventpatches/WingStatuePatch.java index faad8ed5de..e0f8cd9efe 100644 --- a/src/main/java/gremlin/patches/eventpatches/WingStatuePatch.java +++ b/src/main/java/gremlin/patches/eventpatches/WingStatuePatch.java @@ -17,7 +17,7 @@ public static class WingConstructior { public static void Postfix(GoldenWing __instance) { if (AbstractDungeon.player instanceof GremlinCharacter) { - int dmg = (int) ReflectionHacks.getPrivate(__instance, GoldenWing.class, "damage"); + int dmg = ReflectionHacks.getPrivate(__instance, GoldenWing.class, "damage"); dmg = (dmg + 4) / 5; // Divided by 5 rounded up ReflectionHacks.setPrivate(__instance, GoldenWing.class, "damage", dmg); // __instance.imageEventText.updateDialogOption(0, strings.OPTIONS[0] + dmg + GoldenWing.OPTIONS[1]); @@ -33,7 +33,7 @@ public static class WingDamage ) public static void Insert(GoldenWing __instance, int buttonPressed){ if (AbstractDungeon.player instanceof GremlinCharacter) { - int dmg = (int) ReflectionHacks.getPrivate(__instance, GoldenWing.class, "damage"); + int dmg = ReflectionHacks.getPrivate(__instance, GoldenWing.class, "damage"); ((GremlinCharacter) AbstractDungeon.player).damageGremlins(dmg); } } diff --git a/src/main/java/gremlin/potions/WizPotion.java b/src/main/java/gremlin/potions/WizPotion.java index 3d0e4584a6..48f7bda166 100644 --- a/src/main/java/gremlin/potions/WizPotion.java +++ b/src/main/java/gremlin/potions/WizPotion.java @@ -5,6 +5,7 @@ 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.GameDictionary; import com.megacrit.cardcrawl.helpers.PowerTip; @@ -13,6 +14,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); @@ -30,17 +33,19 @@ public void initializeData() { description = DESCRIPTIONS[0] + this.potency + DESCRIPTIONS[1]; this.tips.clear(); this.tips.add(new PowerTip(this.name, this.description)); - this.tips.add(new PowerTip( + if (Settings.language == Settings.GameLanguage.ENG) { + this.tips.add(new PowerTip( - com.megacrit.cardcrawl.helpers.TipHelper.capitalize(GameDictionary.VIGOR.NAMES[0]), - GameDictionary.keywords.get(GameDictionary.VIGOR.NAMES[0]))); + com.megacrit.cardcrawl.helpers.TipHelper.capitalize(GameDictionary.VIGOR.NAMES[0]), + GameDictionary.keywords.get(GameDictionary.VIGOR.NAMES[0]))); + } } - 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/AbstractGremlinPower.java b/src/main/java/gremlin/powers/AbstractGremlinPower.java index 22c6988071..e36adc5b9e 100644 --- a/src/main/java/gremlin/powers/AbstractGremlinPower.java +++ b/src/main/java/gremlin/powers/AbstractGremlinPower.java @@ -11,7 +11,7 @@ import basemod.ReflectionHacks; public abstract class AbstractGremlinPower extends AbstractPower { - private Color renderColor = null; + private final Color renderColor = null; static String getID(String ID){ return "Gremlin:"+ID; @@ -31,7 +31,7 @@ public void renderIcons(SpriteBatch sb, float x, float y, Color c) { sb.draw(region48, x - (float)region48.packedWidth / 2.0f, y - (float)region48.packedHeight / 2.0f, (float)region48.packedWidth / 2.0f, (float)region48.packedHeight / 2.0f, region48.packedWidth, region48.packedHeight, Settings.scale, Settings.scale, 0.0f); } @SuppressWarnings("unchecked") - ArrayList effectList = (ArrayList)ReflectionHacks.getPrivate(this, AbstractPower.class, "effect"); + ArrayList effectList = ReflectionHacks.getPrivate(this, AbstractPower.class, "effect"); for (AbstractGameEffect e : effectList) { e.render(sb, x, y); } diff --git a/src/main/java/gremlin/powers/BangPower.java b/src/main/java/gremlin/powers/BangPower.java index 8940ab9e39..92f9d90a01 100644 --- a/src/main/java/gremlin/powers/BangPower.java +++ b/src/main/java/gremlin/powers/BangPower.java @@ -58,7 +58,6 @@ public float atDamageGive(final float damage, final DamageInfo.DamageType type) @Override public void stackPower(int stackAmount) { - return; } @Override diff --git a/src/main/java/gremlin/powers/CrippledPower.java b/src/main/java/gremlin/powers/CrippledPower.java index 9acd832278..b64124e6d0 100644 --- a/src/main/java/gremlin/powers/CrippledPower.java +++ b/src/main/java/gremlin/powers/CrippledPower.java @@ -22,7 +22,7 @@ public class CrippledPower extends AbstractGremlinPower implements OnReceivePowe 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; + private final AbstractCreature source; public CrippledPower(AbstractCreature owner, AbstractCreature source, int amount) { this.name = strings.NAME; diff --git a/src/main/java/gremlin/relics/PricklyShields.java b/src/main/java/gremlin/relics/PricklyShields.java index fc5d18cab7..2df10a0f70 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 49e9971c8f..476c39d4f9 100644 --- a/src/main/java/gremlin/relics/StolenMerchandise.java +++ b/src/main/java/gremlin/relics/StolenMerchandise.java @@ -44,7 +44,7 @@ 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)); } diff --git a/src/main/java/gremlin/ui/campfire/ResurrectOption.java b/src/main/java/gremlin/ui/campfire/ResurrectOption.java index 6bf320a6c4..ff11648a29 100644 --- a/src/main/java/gremlin/ui/campfire/ResurrectOption.java +++ b/src/main/java/gremlin/ui/campfire/ResurrectOption.java @@ -63,7 +63,7 @@ public void useOption() { @Override public void update() { - float hackScale = (float) ReflectionHacks.getPrivate(this, AbstractCampfireOption.class, "scale"); + float hackScale = ReflectionHacks.getPrivate(this, AbstractCampfireOption.class, "scale"); if (this.hb.hovered) { diff --git a/src/main/java/guardian/GuardianMod.java b/src/main/java/guardian/GuardianMod.java index 3ad25d7899..d500ba1eef 100644 --- a/src/main/java/guardian/GuardianMod.java +++ b/src/main/java/guardian/GuardianMod.java @@ -390,6 +390,72 @@ public static ArrayList getRewardGemCards(boolean onlyCommon, int 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("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.relicRng.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 void updateStasisCount() { } @@ -876,7 +942,6 @@ public void receivePostInitialize() { .dungeonID(TheBeyond.ID) //Only in Evil if content sharing is disabled //This is a guardian exclusive event that doesn't overwrite anything, it should appear in standard even without content sharing - .spawnCondition(() -> (1==1)) // .spawnCondition(() -> (evilMode || downfallMod.contentSharing_events)) .create()); BaseMod.addEvent(new AddEventParams.Builder(CrystalForge.ID, CrystalForge.class) //Event ID// @@ -1012,17 +1077,7 @@ public void initializeSocketTextures() { public void addPotions() { - BaseMod.addPotion(AcceleratePotion.class, Color.GOLDENROD, Color.GOLD, Color.YELLOW, AcceleratePotion.POTION_ID, GuardianEnum.GUARDIAN); - BaseMod.addPotion(DefensiveModePotion.class, Color.ROYAL, Color.TEAL, Color.BLUE, DefensiveModePotion.POTION_ID, GuardianEnum.GUARDIAN); - BaseMod.addPotion(StasisDiscoveryPotion.class, Color.GOLDENROD, Color.GOLD, Color.YELLOW, StasisDiscoveryPotion.POTION_ID, GuardianEnum.GUARDIAN); -// BanSharedContentPatch.registerRunLockedPotion(GuardianEnum.GUARDIAN, BlockOnCardUsePotion.POTION_ID); - - if (Loader.isModLoaded("widepotions")) { - WidePotionsMod.whitelistSimplePotion(BlockOnCardUsePotion.POTION_ID); - WidePotionsMod.whitelistSimplePotion(AcceleratePotion.POTION_ID); - WidePotionsMod.whitelistSimplePotion(DefensiveModePotion.POTION_ID); - WidePotionsMod.whitelistSimplePotion(StasisDiscoveryPotion.POTION_ID); - } + } public boolean receivePreMonsterTurn(AbstractMonster abstractMonster) { diff --git a/src/main/java/guardian/actions/GemFireAction.java b/src/main/java/guardian/actions/GemFireAction.java index 991a529c7d..968ce5ab90 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; } @@ -168,9 +166,9 @@ public int get_cards(){ 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/cards/ArmoredProtocol.java b/src/main/java/guardian/cards/ArmoredProtocol.java index a0ced8543e..c33f5acdda 100644 --- a/src/main/java/guardian/cards/ArmoredProtocol.java +++ b/src/main/java/guardian/cards/ArmoredProtocol.java @@ -2,20 +2,16 @@ 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 { diff --git a/src/main/java/guardian/cards/CompilePackage.java b/src/main/java/guardian/cards/CompilePackage.java index 5ed3974f7b..cb16269e55 100644 --- a/src/main/java/guardian/cards/CompilePackage.java +++ b/src/main/java/guardian/cards/CompilePackage.java @@ -5,6 +5,7 @@ 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; @@ -43,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() { @@ -59,6 +62,8 @@ public CompilePackage() { updateDescription(); loadGemMisc(); + //cardsList.add(new PackageDefect()); + cardsList.add(new PackageDefect()); cardsList.add(new PackageWalker()); cardsList.add(new PackageSphere()); @@ -66,6 +71,8 @@ public CompilePackage() { cardsList.add(new PackageSentry()); cardsList.add(new PackageDonuDeca()); cardsList.add(new PackageAutomaton()); + this.tags.add(CardTags.HEALING); + //MultiCardPreview.add(this, new PackageDefect(), new PackageWalker(), new PackageSphere(), new PackageShapes(), new PackageSentry(), new PackageDonuDeca(), new PackageAutomaton()); GuardianMod.loadJokeCardImage(this, makeBetaCardPath("CompilePackage.png")); } @@ -86,12 +93,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) { @@ -104,6 +115,7 @@ public void updateDescription() { this.initializeDescription(); } + @Override public void update() { super.update(); diff --git a/src/main/java/guardian/cards/DecasProtection.java b/src/main/java/guardian/cards/DecasProtection.java index 9fe80f27ad..a65482be16 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/EvasiveProtocol.java b/src/main/java/guardian/cards/EvasiveProtocol.java index 4f53022d22..4072addc9c 100644 --- a/src/main/java/guardian/cards/EvasiveProtocol.java +++ b/src/main/java/guardian/cards/EvasiveProtocol.java @@ -34,7 +34,7 @@ public class EvasiveProtocol extends AbstractGuardianCard { //TUNING CONSTANTS private static final int DEX = 1; - private static final int BRACE_PER_TURN = 3; + 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; @@ -69,25 +69,25 @@ public void use(AbstractPlayer p, AbstractMonster m) { } if (!this.upgraded) { - brace(6); - mods = 6; + brace(secondaryM); + mods = secondaryM; } if (this.upgraded) { - brace(9); - mods = 9; + brace(secondaryM); + mods = secondaryM; } - if (p.stance instanceof DefensiveMode) { + 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 (((moda - mods) <= 0)) { - // AbstractDungeon.actionManager.addToBottom(new ReduceDebuffsAction(AbstractDungeon.player, magicNumber)); - // } + // AbstractDungeon.actionManager.addToBottom(new ReduceDebuffsAction(AbstractDungeon.player, magicNumber)); + // } //AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, new BracePerTurnPower(p, this.secondaryM))); } @@ -100,21 +100,9 @@ public void upgrade() { if (!this.upgraded) { upgradeName(); upgradeMagicNumber(1); - this.rawDescription = UPGRADED_DESCRIPTION; - updateDescription(); + 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/FierceBash.java b/src/main/java/guardian/cards/FierceBash.java index 088be64cc7..1769ed0911 100644 --- a/src/main/java/guardian/cards/FierceBash.java +++ b/src/main/java/guardian/cards/FierceBash.java @@ -29,11 +29,11 @@ public class FierceBash extends AbstractGuardianCard implements InStasisCard { private static final CardTarget TARGET = CardTarget.ENEMY; private static final CardStrings cardStrings; private static final int COST = 2; - private static final int DAMAGE = 16; + private static final int DAMAGE = 18; //TUNING CONSTANTS private static final int UPGRADE_BONUS = 4; - private static final int DAMAGEPERTURNINSTASIS = 1; + private static final int DAMAGEPERTURNINSTASIS = 2; private static final int SOCKETS = 0; private static final boolean SOCKETSAREAFTER = true; public static String DESCRIPTION; @@ -83,7 +83,8 @@ public AbstractCard makeCopy() { public void upgrade() { if (!this.upgraded) { upgradeName(); - upgradeMagicNumber(1); + upgradeDamage(4); + // upgradeMagicNumber(1); } } diff --git a/src/main/java/guardian/cards/GemFire.java b/src/main/java/guardian/cards/GemFire.java index fcb7c178c6..dcd7a126c7 100644 --- a/src/main/java/guardian/cards/GemFire.java +++ b/src/main/java/guardian/cards/GemFire.java @@ -1,7 +1,10 @@ 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; @@ -14,6 +17,7 @@ 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; @@ -24,6 +28,7 @@ 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"); @@ -33,7 +38,7 @@ public class GemFire extends AbstractGuardianCard { private static final CardRarity RARITY = CardRarity.RARE; private static final CardTarget TARGET = CardTarget.ENEMY; private static final int COST = 2; - private static final int DAMAGE = 16; + private static final int DAMAGE = 12; private static final int SOCKETS = 0; @@ -49,8 +54,6 @@ public GemFire() { } public void use(AbstractPlayer p, AbstractMonster m) { - AbstractDungeon.actionManager.addToBottom(new DamageAction(m, new DamageInfo(p, this.damage, this.damageTypeForTurn), AbstractGameAction.AttackEffect.FIRE)); - // SECOND ARRAY TO AVOID CRASHING ArrayList tempSockets = new ArrayList<>(); @@ -60,6 +63,21 @@ public void use(AbstractPlayer p, AbstractMonster m) { 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())); + } + + + 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<>(); @@ -74,7 +92,7 @@ public void use(AbstractPlayer p, AbstractMonster m) { for (GuardianMod.socketTypes socket : nonSyntheticSockets) { processSocket(p, m, socket); - AbstractDungeon.actionManager.addToBottom(new ForceWaitAction(0.1F)); + AbstractDungeon.actionManager.addToBottom(new ForceWaitAction(0.02F)); } } @@ -186,7 +204,8 @@ public AbstractCard makeCopy() { public void upgrade() { if (!upgraded) { upgradeName(); - upgradeBaseCost(1); + //upgradeBaseCost(1); + upgradeDamage(4); } } } diff --git a/src/main/java/guardian/cards/Gem_Synthetic.java b/src/main/java/guardian/cards/Gem_Synthetic.java index c7c2a243b7..234c2de6d1 100644 --- a/src/main/java/guardian/cards/Gem_Synthetic.java +++ b/src/main/java/guardian/cards/Gem_Synthetic.java @@ -21,7 +21,7 @@ public class Gem_Synthetic extends AbstractGemCard { public static final String NAME; public static final String IMG_PATH = "cards/gemBlack.png"; private static final CardType TYPE = CardType.SKILL; - private static final CardRarity RARITY = CardRarity.UNCOMMON; + private static final CardRarity RARITY = CardRarity.RARE; private static final CardTarget TARGET = CardTarget.SELF; private static final CardStrings cardStrings; private static final int COST = 0; diff --git a/src/main/java/guardian/cards/Gem_White.java b/src/main/java/guardian/cards/Gem_White.java index 78a87b406e..1e92933ee7 100644 --- a/src/main/java/guardian/cards/Gem_White.java +++ b/src/main/java/guardian/cards/Gem_White.java @@ -21,7 +21,7 @@ public class Gem_White extends AbstractGemCard { public static final String NAME; public static final String IMG_PATH = "cards/gemWhite.png"; private static final CardType TYPE = CardType.SKILL; - private static final CardRarity RARITY = CardRarity.RARE; + 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; diff --git a/src/main/java/guardian/cards/GuardianWhirl.java b/src/main/java/guardian/cards/GuardianWhirl.java index d33fedc486..cbbad40e56 100644 --- a/src/main/java/guardian/cards/GuardianWhirl.java +++ b/src/main/java/guardian/cards/GuardianWhirl.java @@ -24,7 +24,7 @@ public class GuardianWhirl extends AbstractGuardianCard { private static final CardTarget TARGET = CardTarget.ALL_ENEMY; private static final CardStrings cardStrings = CardCrawlGame.languagePack.getCardStrings(ID); - private static final int COST = 1; + private static final int COST = 2; private static final int DAMAGE = 4; private static final int MULTICOUNT = 2; private static final int SOCKETS = 0; @@ -77,7 +77,8 @@ public void triggerOnGlowCheck() { public void upgrade() { if (!this.upgraded) { upgradeName(); - upgradeMagicNumber(1); + upgradeDamage(2); + //upgradeMagicNumber(1); updateDescription(); } } diff --git a/src/main/java/guardian/cards/Metallicize.java b/src/main/java/guardian/cards/Metallicize.java index bcc58f91dc..412e532fe9 100644 --- a/src/main/java/guardian/cards/Metallicize.java +++ b/src/main/java/guardian/cards/Metallicize.java @@ -18,6 +18,8 @@ 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; @@ -31,7 +33,7 @@ public void use(AbstractPlayer p, AbstractMonster m) { public void upgrade() { if (!this.upgraded) { this.upgradeName(); - this.upgradeMagicNumber(1); + this.upgradeMagicNumber(2); } } diff --git a/src/main/java/guardian/cards/Planning.java b/src/main/java/guardian/cards/Planning.java index 8ebb2f3296..64fda62d85 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/Preprogram.java b/src/main/java/guardian/cards/Preprogram.java index 6523d66c5f..e70c99c973 100644 --- a/src/main/java/guardian/cards/Preprogram.java +++ b/src/main/java/guardian/cards/Preprogram.java @@ -25,10 +25,10 @@ public class Preprogram extends AbstractGuardianCard { private static final CardType TYPE = CardType.SKILL; private static final CardRarity RARITY = CardRarity.UNCOMMON; 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 COUNT = 4; + private static final int COUNT = 5; private static final int UPGRADECOUNT = 3; private static final int SOCKETS = 1; private static final boolean SOCKETSAREAFTER = true; diff --git a/src/main/java/guardian/cards/Recover.java b/src/main/java/guardian/cards/Recover.java index 6cfe1b6bec..f4493d62f6 100644 --- a/src/main/java/guardian/cards/Recover.java +++ b/src/main/java/guardian/cards/Recover.java @@ -20,7 +20,7 @@ public class Recover extends AbstractGuardianCard { public static final String IMG_PATH = "cards/recovery.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.SELF; private static final int COST = 1; diff --git a/src/main/java/guardian/cards/SecondStrike.java b/src/main/java/guardian/cards/SecondStrike.java index 4cf3dc341a..d78b4023d6 100644 --- a/src/main/java/guardian/cards/SecondStrike.java +++ b/src/main/java/guardian/cards/SecondStrike.java @@ -23,7 +23,7 @@ public class SecondStrike extends AbstractGuardianCard { private static final CardTarget TARGET = CardTarget.ENEMY; private static final CardStrings cardStrings; private static final int COST = 1; - private static final int DAMAGE = 5; + private static final int DAMAGE = 7; //TUNING CONSTANTS private static final int UPGRADE_BONUS = 2; @@ -71,7 +71,7 @@ public AbstractCard makeCopy() { public void upgrade() { if (!this.upgraded) { upgradeName(); - upgradeDamage(UPGRADE_BONUS); + //upgradeDamage(UPGRADE_BONUS); if (this.socketCount < 4) { this.socketCount++; this.saveGemMisc(); diff --git a/src/main/java/guardian/cards/SecondStrikePreviewCard.java b/src/main/java/guardian/cards/SecondStrikePreviewCard.java index 8ecf247a1d..5c252e462f 100644 --- a/src/main/java/guardian/cards/SecondStrikePreviewCard.java +++ b/src/main/java/guardian/cards/SecondStrikePreviewCard.java @@ -23,7 +23,7 @@ public class SecondStrikePreviewCard extends AbstractGuardianCard { private static final CardTarget TARGET = CardTarget.ENEMY; private static final CardStrings cardStrings; private static final int COST = 1; - private static final int DAMAGE = 5; + private static final int DAMAGE = 7; //TUNING CONSTANTS private static final int UPGRADE_BONUS = 2; @@ -70,7 +70,7 @@ public AbstractCard makeCopy() { public void upgrade() { if (!this.upgraded) { upgradeName(); - upgradeDamage(UPGRADE_BONUS); + //upgradeDamage(UPGRADE_BONUS); if (this.socketCount < 4) { this.socketCount++; this.saveGemMisc(); diff --git a/src/main/java/guardian/cards/SphericShield.java b/src/main/java/guardian/cards/SphericShield.java index 8f144deed1..34669190f0 100644 --- a/src/main/java/guardian/cards/SphericShield.java +++ b/src/main/java/guardian/cards/SphericShield.java @@ -1,25 +1,22 @@ package guardian.cards; -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.actions.common.ObtainPotionAction; 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.*; -import guardian.relics.ModeShifterPlus; -import guardian.stances.DefensiveMode; +import guardian.potions.DefensiveModePotion; import guardian.patches.AbstractCardEnum; -import sneckomod.powers.ToxicPersonalityPower; import static guardian.GuardianMod.makeBetaCardPath; +import static hermit.util.Wiz.atb; public class SphericShield extends AbstractGuardianCard { public static final String ID = GuardianMod.makeID("SphericShield"); @@ -30,7 +27,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 { @@ -41,64 +38,25 @@ public class SphericShield extends AbstractGuardianCard { } public SphericShield() { + super(ID, NAME, GuardianMod.getResourcePath(IMG_PATH), COST, DESCRIPTION, TYPE, AbstractCardEnum.GUARDIAN, RARITY, TARGET); - this.baseBlock = 10; - this.socketCount = 0; exhaust = true; + this.isEthereal = true; updateDescription(); loadGemMisc(); GuardianMod.loadJokeCardImage(this, makeBetaCardPath("SphericShield.png")); + this.tags.add(CardTags.HEALING); } 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)); - - ModeShifterPlus modeShifterPlusInstance = new ModeShifterPlus(); - if (AbstractDungeon.player.hasRelic(ModeShifterPlus.ID)) { - if (!AbstractDungeon.actionManager.turnHasEnded) { - addToTop(new GainEnergyAction(1)); - } - if (AbstractDungeon.actionManager.turnHasEnded) { - AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(p, p, new EnergizedGuardianPower(p, 1))); - } - addToTop(new DrawCardAction(AbstractDungeon.player, 2)); - modeShifterPlusInstance.flash(); - } - - 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); + AbstractRelic sozu = AbstractDungeon.player.getRelic(Sozu.ID); + if (sozu != null) { + sozu.flash(); + } else { + AbstractPotion potion = new DefensiveModePotion(); + atb(new ObtainPotionAction(potion)); } - - - } - } public AbstractCard makeCopy() { @@ -108,7 +66,9 @@ public AbstractCard makeCopy() { public void upgrade() { if (!this.upgraded) { upgradeName(); - upgradeBlock(4); + 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 f5f26ed20f..472a2353f1 100644 --- a/src/main/java/guardian/cards/SpikerProtocol.java +++ b/src/main/java/guardian/cards/SpikerProtocol.java @@ -37,7 +37,7 @@ public class SpikerProtocol extends AbstractGuardianCard { 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; @@ -77,16 +77,16 @@ public void use(AbstractPlayer p, AbstractMonster m) { if (!this.upgraded) { - brace(6); - mods = 6; + brace(secondaryM); + mods = secondaryM; } if (this.upgraded) { - brace(9); - mods = 9; + brace(secondaryM); + mods = secondaryM; } // } - if (p.stance instanceof DefensiveMode) { + 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))); @@ -101,22 +101,10 @@ public void upgrade() { if (!this.upgraded) { upgradeName(); upgradeMagicNumber(UPGRADE_THORNS); - this.rawDescription = UPGRADED_DESCRIPTION; - updateDescription(); + 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/StasisEngine.java b/src/main/java/guardian/cards/StasisEngine.java index 2eec718dec..7f55543c53 100644 --- a/src/main/java/guardian/cards/StasisEngine.java +++ b/src/main/java/guardian/cards/StasisEngine.java @@ -23,7 +23,7 @@ public class StasisEngine 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 = 2; + private static final int COST = 1; //TUNING CONSTANTS private static final int SOCKETS = 0; diff --git a/src/main/java/guardian/cards/Suspension.java b/src/main/java/guardian/cards/Suspension.java index 6ea0b7a696..4df8b8fc70 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")); diff --git a/src/main/java/guardian/cards/TwinSlam.java b/src/main/java/guardian/cards/TwinSlam.java index c1a801957c..8d5c19b47e 100644 --- a/src/main/java/guardian/cards/TwinSlam.java +++ b/src/main/java/guardian/cards/TwinSlam.java @@ -26,7 +26,7 @@ public class TwinSlam extends AbstractGuardianCard { private static final CardTarget TARGET = CardTarget.ENEMY; private static final CardStrings cardStrings; private static final int COST = 1; - private static final int DAMAGE = 5; + private static final int DAMAGE = 7; //TUNING CONSTANTS private static final int UPGRADE_BONUS = 2; @@ -82,7 +82,7 @@ public AbstractCard makeCopy() { public void upgrade() { if (!this.upgraded) { upgradeName(); - upgradeDamage(UPGRADE_BONUS); + // upgradeDamage(UPGRADE_BONUS); if (this.socketCount < 4) { this.socketCount++; this.saveGemMisc(); diff --git a/src/main/java/guardian/events/CrystalForge.java b/src/main/java/guardian/events/CrystalForge.java index 95f633c04f..adc47a53c8 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 e4d2ac74fd..7c0bd68d2c 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; @@ -99,14 +101,22 @@ protected void buttonEffect(int buttonPressed) { 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))); - CardCrawlGame.sound.play("MONSTER_BOOK_STAB_0"); - AbstractDungeon.player.getRelic(PickAxe.ID).onTrigger(); - if (AbstractDungeon.player.getRelic(PickAxe.ID).counter == -2) { - this.imageEventText.updateDialogOption(0, OPTIONS[5], true); - } + ArrayList gems1 = GuardianMod.getRewardGemCards(false, 1); + AbstractCard carda = gems1.get(0); + cardsAdded.add(carda.cardID); + AbstractDungeon.effectList.add(new ShowCardAndObtainEffect(carda, (float) (Settings.WIDTH / 2), (float) (Settings.HEIGHT / 2))); + + ArrayList gems2 = GuardianMod.getRewardGemCards(false, 1); + AbstractCard cardb = gems2.get(0); + cardsAdded.add(cardb.cardID); + AbstractDungeon.effectList.add(new ShowCardAndObtainEffect(cardb, (float) (Settings.WIDTH / 2), (float) (Settings.HEIGHT / 2))); + + + CardCrawlGame.sound.play("MONSTER_BOOK_STAB_0"); + //AbstractDungeon.player.getRelic(PickAxe.ID).onTrigger(); + AbstractDungeon.player.loseRelic(PickAxe.ID); this.tookGems = true; } else { @@ -124,14 +134,15 @@ protected void buttonEffect(int buttonPressed) { return; case 1: this.imageEventText.updateBodyText(DIALOG_MINE); - - ArrayList gems = GuardianMod.getRewardGemCards(false, 1); + AbstractDungeon.getCurrRoom().rewards.clear(); + ArrayList gems = GuardianMod.getRewardGemCards(false, 1); AbstractCard card = gems.get(0); - cardsAdded.add(card.cardID); + cardsAdded.add(card.cardID); 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)); + 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 b09512883b..d7e8388c48 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 b9587fe5fc..91f333ed7a 100644 --- a/src/main/java/guardian/patches/AddEnhanceButtonPatch.java +++ b/src/main/java/guardian/patches/AddEnhanceButtonPatch.java @@ -36,11 +36,12 @@ public static void patch(CampfireUI __instance, ArrayList { +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"; @@ -32,6 +36,17 @@ public BottledAnomaly() { 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 public Predicate isOnCard() { return BottledStasisPatch.inBottledAnomaly::get; @@ -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 diff --git a/src/main/java/guardian/relics/BottledStasis.java b/src/main/java/guardian/relics/BottledStasis.java index b514e22207..db405fa135 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,12 +22,12 @@ 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 = true; private boolean cardRemoved = false; public BottledStasis() { @@ -33,6 +35,17 @@ public BottledStasis() { 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 public Predicate isOnCard() { @@ -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,54 @@ 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()) { cardSelected = true; card = AbstractDungeon.gridSelectScreen.selectedCards.get(0); BottledStasisPatch.inBottledStasis.set(card, true); AbstractDungeon.getCurrRoom().phase = AbstractRoom.RoomPhase.COMPLETE; - AbstractDungeon.gridSelectScreen.selectedCards.clear(); 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 339dbedeb6..17d7a85459 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 4f61a7ef8c..69740f6612 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 bfaec69e1b..0889a1a1ac 100644 --- a/src/main/java/guardian/relics/ModeShifterPlus.java +++ b/src/main/java/guardian/relics/ModeShifterPlus.java @@ -4,16 +4,14 @@ import champ.ChampMod; import champ.relics.ChampionCrown; 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.common.MakeTempCardInHandAction; -import com.megacrit.cardcrawl.actions.common.RelicAboveCreatureAction; +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.cards.GearUp; +import guardian.powers.EnergizedGuardianPower; import guardian.stances.DefensiveMode; public class ModeShifterPlus extends CustomRelic { @@ -24,7 +22,7 @@ public class ModeShifterPlus extends CustomRelic { public ModeShifterPlus() { super(ID, new Texture(GuardianMod.getResourcePath(IMG_PATH)), new Texture(GuardianMod.getResourcePath(OUTLINE_IMG_PATH)), - RelicTier.BOSS, LandingSound.FLAT); + RelicTier.BOSS, LandingSound.CLINK); } @Override @@ -34,12 +32,22 @@ public void atBattleStart() { addToTop(new RelicAboveCreatureAction(AbstractDungeon.player, this)); } + //finally got around to doing this @Override - public void onChangeStance(AbstractStance prevStance, AbstractStance newStance) { - if (newStance instanceof DefensiveMode) { - // flash(); - addToTop(new RelicAboveCreatureAction(AbstractDungeon.player, this)); + 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 diff --git a/src/main/java/guardian/relics/ObsidianScales.java b/src/main/java/guardian/relics/ObsidianScales.java index 0c2521b51c..ca640454d4 100644 --- a/src/main/java/guardian/relics/ObsidianScales.java +++ b/src/main/java/guardian/relics/ObsidianScales.java @@ -14,6 +14,11 @@ public class ObsidianScales extends CustomRelic implements OnReceivePowerRelic{ 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)), @@ -23,7 +28,7 @@ public ObsidianScales() { public void atBattleStart() { this.flash(); - this.addToTop(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new ThornsPower(AbstractDungeon.player, 3), 3)); + this.addToTop(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new ThornsPower(AbstractDungeon.player, INITIALTHORNS), INITIALTHORNS)); } @@ -32,7 +37,7 @@ 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, 1), 1)); + this.addToBot(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new ThornsPower(AbstractDungeon.player, THORNS), THORNS)); } return true; } @@ -40,7 +45,7 @@ public boolean onReceivePower(AbstractPower var1, AbstractCreature var2) { @Override public String getUpdatedDescription() { - return DESCRIPTIONS[0]; + 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 523f772abe..5f4768e2a7 100644 --- a/src/main/java/guardian/relics/PickAxe.java +++ b/src/main/java/guardian/relics/PickAxe.java @@ -2,10 +2,15 @@ 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 downfall.util.TextureLoader; import guardian.GuardianMod; +import guardian.rewards.GemReward; +import guardian.rewards.GemRewardButRelicRng; +import utilityClasses.Wiz; public class PickAxe extends CustomRelic { public static final String ID = "Guardian:PickAxe"; @@ -15,9 +20,8 @@ public class PickAxe extends CustomRelic { public PickAxe() { super(ID, new Texture(GuardianMod.getResourcePath(IMG_PATH)), new Texture(GuardianMod.getResourcePath(OUTLINE_IMG_PATH)), - RelicTier.COMMON, LandingSound.FLAT); - - this.counter = 3; + RelicTier.COMMON, LandingSound.CLINK); +// this.counter = 3; } @Override @@ -25,23 +29,40 @@ public String getUpdatedDescription() { return this.DESCRIPTIONS[0]; } + + public void onEquip() { + if (AbstractDungeon.floorNum > 2 && (AbstractDungeon.getCurrRoom()).eliteTrigger) { + AbstractDungeon.getCurrRoom().rewards.add(new GemRewardButRelicRng()); + // AbstractDungeon.combatRewardScreen.open(); + // AbstractDungeon.getCurrRoom().rewardPopOutTimer = 0.0F; + } + } + @Override public void onTrigger() { super.onTrigger(); - this.counter--; + this.counter = -2; + this.grayscale = true; 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 { + // 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 diff --git a/src/main/java/guardian/relics/SackOfGems.java b/src/main/java/guardian/relics/SackOfGems.java index 955b554629..e14c4ed00e 100644 --- a/src/main/java/guardian/relics/SackOfGems.java +++ b/src/main/java/guardian/relics/SackOfGems.java @@ -2,17 +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 guardian.rewards.GemReward; -import guardian.rewards.GemRewardAllRarities; -import sneckomod.util.ColorfulRareReward; - -import java.util.ArrayList; +import guardian.rewards.GemRewardButRelicRng; public class SackOfGems extends CustomRelic { public static final String ID = "Guardian:SackOfGems"; @@ -32,12 +25,11 @@ public String getUpdatedDescription() { public void onEquip() { for (int i = 0; i < 5; i++) { - AbstractDungeon.getCurrRoom().rewards.add(new GemReward()); + AbstractDungeon.getCurrRoom().rewards.add(new GemRewardButRelicRng()); } - AbstractDungeon.combatRewardScreen.rewards.remove(AbstractDungeon.combatRewardScreen.rewards.size()-1); AbstractDungeon.combatRewardScreen.open(); AbstractDungeon.getCurrRoom().rewardPopOutTimer = 0.0F; - + AbstractDungeon.combatRewardScreen.rewards.remove(AbstractDungeon.combatRewardScreen.rewards.size()-1); } @Override diff --git a/src/main/java/guardian/relics/StasisCodex.java b/src/main/java/guardian/relics/StasisCodex.java index eff43ebab3..aa43697e44 100644 --- a/src/main/java/guardian/relics/StasisCodex.java +++ b/src/main/java/guardian/relics/StasisCodex.java @@ -26,22 +26,23 @@ public StasisCodex() { @Override public void atBattleStart() { - this.counter = 1; - marker = 1; + this.counter = 0; + marker = 0; this.grayscale = false; } @Override public void onPlayerEndTurn() { super.onPlayerEndTurn(); - if (marker < MAX_MARKER) { + if (marker < 3) { ++this.counter; marker++; - if (AbstractDungeon.player.hasEmptyOrb()) { + if (AbstractDungeon.player.hasEmptyOrb() || !GuardianMod.isStasisOrbInPlay()) { AbstractDungeon.actionManager.addToBottom(new RelicAboveCreatureAction(AbstractDungeon.player, this)); AbstractDungeon.actionManager.addToBottom(new StasisCodexAction()); } - if (marker == MAX_MARKER) { + if (marker == 3) { + this.flash(); this.grayscale = true; } } diff --git a/src/main/java/guardian/relics/StasisEgg.java b/src/main/java/guardian/relics/StasisEgg.java index 423ae58246..bbd1746444 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(); + 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; + } } @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/GemRewardButRelicRng.java b/src/main/java/guardian/rewards/GemRewardButRelicRng.java new file mode 100644 index 0000000000..67e17ace2c --- /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/hermit/HermitMod.java b/src/main/java/hermit/HermitMod.java index aa2eba4cb6..49ae791b40 100644 --- a/src/main/java/hermit/HermitMod.java +++ b/src/main/java/hermit/HermitMod.java @@ -327,7 +327,7 @@ public void receivePostInitialize() { return new BountyGold(rewardSave.amount); }, (customReward) -> { // this handles what to do when this quest type is saved. - return new RewardSave(customReward.type.toString(), null, ((BountyGold) customReward).goldAmt, 0); + return new RewardSave(customReward.type.toString(), null, customReward.goldAmt, 0); }); @@ -369,16 +369,7 @@ public void receivePostInitialize() { // ================ ADD POTIONS =================== public void receiveEditPotions() { - System.out.println("Beginning to edit potions"); - // Class Specific Potion. If you want your potion to not be class-specific, - // just remove the player class at the end (in this case the "TheDefaultEnum.THE_DEFAULT". - // Remember, you can press ctrl+P inside parentheses like addPotions) - BaseMod.addPotion(Tonic.class, null, null, null, Tonic.POTION_ID, hermit.Enums.HERMIT); - BaseMod.addPotion(BlackBile.class, null, null, null, BlackBile.POTION_ID, hermit.Enums.HERMIT); - BaseMod.addPotion(Eclipse.class, Color.SCARLET.cpy(), Color.BLACK.cpy(), null, Eclipse.POTION_ID, hermit.Enums.HERMIT); - - System.out.println("Done editing potions"); } // ================ /ADD POTIONS/ =================== diff --git a/src/main/java/hermit/actions/AdaptAction.java b/src/main/java/hermit/actions/AdaptAction.java index 80276e8759..0da2e39c90 100644 --- a/src/main/java/hermit/actions/AdaptAction.java +++ b/src/main/java/hermit/actions/AdaptAction.java @@ -20,10 +20,10 @@ public class AdaptAction extends AbstractGameAction { private static final UIStrings uiStrings; public static final String[] TEXT; - private AbstractPlayer p; - private boolean isRandom; - private boolean anyNumber; - private boolean canPickZero; + private final AbstractPlayer p; + private final boolean isRandom; + private final boolean anyNumber; + private final boolean canPickZero; public static int numExhausted; int block=0; diff --git a/src/main/java/hermit/actions/CheatAction.java b/src/main/java/hermit/actions/CheatAction.java index 02eaaeedc2..19aa580c22 100644 --- a/src/main/java/hermit/actions/CheatAction.java +++ b/src/main/java/hermit/actions/CheatAction.java @@ -19,12 +19,12 @@ public class CheatAction extends AbstractGameAction { public static final String[] TEXT; - private float startingDuration; - private AbstractCard cheatcard; + private final float startingDuration; + private final AbstractCard cheatcard; private AbstractCard onlyChoice; private boolean onlyBoolean = false; - private boolean isdeadon; - private int trig_times; + private final boolean isdeadon; + private final int trig_times; public CheatAction(int numCards, AbstractHermitCard cheatcard, boolean isdeadon, int trig_times) { this.amount = numCards; @@ -59,7 +59,7 @@ public void update() { 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((AbstractCard)AbstractDungeon.player.drawPile.group.get(AbstractDungeon.player.drawPile.size() - i - 1)); + tmpGroup.addToTop(AbstractDungeon.player.drawPile.group.get(AbstractDungeon.player.drawPile.size() - i - 1)); } } else { Iterator var5 = AbstractDungeon.player.drawPile.group.iterator(); diff --git a/src/main/java/hermit/actions/CovetAction.java b/src/main/java/hermit/actions/CovetAction.java index 9e87ee346c..28a29ce7a8 100644 --- a/src/main/java/hermit/actions/CovetAction.java +++ b/src/main/java/hermit/actions/CovetAction.java @@ -22,7 +22,7 @@ public class CovetAction extends AbstractGameAction { private static final UIStrings uiStrings; public static final String[] TEXT; - private AbstractPlayer p; + private final AbstractPlayer p; public int extra_draw; public CovetAction(int extra) { diff --git a/src/main/java/hermit/actions/DeadManAction.java b/src/main/java/hermit/actions/DeadManAction.java index 87e440c9c0..b7328bb4ee 100644 --- a/src/main/java/hermit/actions/DeadManAction.java +++ b/src/main/java/hermit/actions/DeadManAction.java @@ -14,7 +14,7 @@ import java.util.Iterator; public class DeadManAction extends AbstractGameAction { - private AbstractPlayer p; + private final AbstractPlayer p; public DeadManAction(int amount) { this.p = AbstractDungeon.player; diff --git a/src/main/java/hermit/actions/DeadOrAliveAction.java b/src/main/java/hermit/actions/DeadOrAliveAction.java index 981a322e85..a7d3e42e5b 100644 --- a/src/main/java/hermit/actions/DeadOrAliveAction.java +++ b/src/main/java/hermit/actions/DeadOrAliveAction.java @@ -8,10 +8,10 @@ import hermit.util.Wiz; public class DeadOrAliveAction extends AbstractGameAction { - private DamageInfo info; - private AbstractPlayer p; - private int energyOnUse; - private boolean freeToPlayOnce; + private final DamageInfo info; + private final AbstractPlayer p; + private final int energyOnUse; + private final boolean freeToPlayOnce; public DeadOrAliveAction(AbstractPlayer p, AbstractCreature target, DamageInfo info, boolean freeToPlayOnce, int energyOnUse) { this.info = info; diff --git a/src/main/java/hermit/actions/EclipseAction.java b/src/main/java/hermit/actions/EclipseAction.java index 4c85b3241f..895fed9661 100644 --- a/src/main/java/hermit/actions/EclipseAction.java +++ b/src/main/java/hermit/actions/EclipseAction.java @@ -18,7 +18,7 @@ public class EclipseAction extends AbstractGameAction { private static final UIStrings uiStrings; public static final String[] TEXT; - private AbstractPlayer p; + private final AbstractPlayer p; public EclipseAction(int amount) { this.p = AbstractDungeon.player; diff --git a/src/main/java/hermit/actions/EternalAction.java b/src/main/java/hermit/actions/EternalAction.java index 33746e6349..45c885f256 100644 --- a/src/main/java/hermit/actions/EternalAction.java +++ b/src/main/java/hermit/actions/EternalAction.java @@ -12,7 +12,7 @@ import java.util.Iterator; public class EternalAction extends AbstractGameAction { - private AbstractPlayer p; + private final AbstractPlayer p; public EternalAction() { this.actionType = ActionType.CARD_MANIPULATION; diff --git a/src/main/java/hermit/actions/EyeOfTheStormAction.java b/src/main/java/hermit/actions/EyeOfTheStormAction.java index d6b5c11234..c815d80885 100644 --- a/src/main/java/hermit/actions/EyeOfTheStormAction.java +++ b/src/main/java/hermit/actions/EyeOfTheStormAction.java @@ -8,9 +8,9 @@ public class EyeOfTheStormAction extends AbstractGameAction { - private AbstractCard cl; - private AbstractPlayer pl; - private int c_cost; + private final AbstractCard cl; + private final AbstractPlayer pl; + private final int c_cost; public EyeOfTheStormAction(AbstractPlayer p, AbstractCard c, int cost) { diff --git a/src/main/java/hermit/actions/FinalCanterAction.java b/src/main/java/hermit/actions/FinalCanterAction.java index aa3fa2dd6d..680356518c 100644 --- a/src/main/java/hermit/actions/FinalCanterAction.java +++ b/src/main/java/hermit/actions/FinalCanterAction.java @@ -10,9 +10,9 @@ import hermit.patches.EnumPatch; public class FinalCanterAction extends AbstractGameAction { - private AbstractCreature m; - private AbstractPlayer p; - private AbstractCard c; + private final AbstractCreature m; + private final AbstractPlayer p; + private final AbstractCard c; private AttackEffect eff = EnumPatch.HERMIT_GHOSTFIRE; public FinalCanterAction(AbstractCreature m, AbstractPlayer p, int amount, AbstractCard c, AttackEffect eff) { diff --git a/src/main/java/hermit/actions/FullyLoadedAction.java b/src/main/java/hermit/actions/FullyLoadedAction.java index bd690e2ec1..155f8a1516 100644 --- a/src/main/java/hermit/actions/FullyLoadedAction.java +++ b/src/main/java/hermit/actions/FullyLoadedAction.java @@ -14,8 +14,8 @@ import java.util.Iterator; public class FullyLoadedAction extends AbstractGameAction { - private AbstractPlayer p; - private CardType typeToCheck; + private final AbstractPlayer p; + private final CardType typeToCheck; public FullyLoadedAction() { this.p = AbstractDungeon.player; @@ -58,8 +58,7 @@ public void update() { this.p.createHandIsFullDialog(); } else { p.drawPile.group.remove(card); - p.drawPile.addToTop(card); - this.addToBot(new DrawCardAction(1)); + p.hand.group.add(card); } } } diff --git a/src/main/java/hermit/actions/GambitAction.java b/src/main/java/hermit/actions/GambitAction.java index 30c700955e..f1525de55c 100644 --- a/src/main/java/hermit/actions/GambitAction.java +++ b/src/main/java/hermit/actions/GambitAction.java @@ -14,8 +14,8 @@ import java.util.Iterator; public class GambitAction extends AbstractGameAction { - private AbstractPlayer p; - private CardType typeToCheck; + private final AbstractPlayer p; + private final CardType typeToCheck; public GambitAction(int amount, CardType type) { this.p = AbstractDungeon.player; diff --git a/src/main/java/hermit/actions/GoldenBulletAction.java b/src/main/java/hermit/actions/GoldenBulletAction.java index 02f7a31d82..d854902918 100644 --- a/src/main/java/hermit/actions/GoldenBulletAction.java +++ b/src/main/java/hermit/actions/GoldenBulletAction.java @@ -15,8 +15,8 @@ import java.util.UUID; public class GoldenBulletAction extends AbstractGameAction { - private DamageInfo info; - private UUID uuid; + private final DamageInfo info; + private final UUID uuid; int amount; public GoldenBulletAction(AbstractCreature target, DamageInfo info, int amount, UUID targetUUID) { diff --git a/src/main/java/hermit/actions/HandSelectAction.java b/src/main/java/hermit/actions/HandSelectAction.java index 1683fbdef7..48ebe2f5cb 100644 --- a/src/main/java/hermit/actions/HandSelectAction.java +++ b/src/main/java/hermit/actions/HandSelectAction.java @@ -54,6 +54,8 @@ public void update() { { first = false; + if (AbstractDungeon.getCurrRoom().monsters.areMonstersBasicallyDead()) isDone = true; + ArrayList validCards = new ArrayList<>(); if (p.hand.isEmpty()) diff --git a/src/main/java/hermit/actions/LuckDrawAction.java b/src/main/java/hermit/actions/LuckDrawAction.java index 6b2a6081d5..083270b985 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; @@ -10,9 +11,9 @@ import com.megacrit.cardcrawl.dungeons.AbstractDungeon; public class LuckDrawAction extends AbstractGameAction { - private AbstractPlayer p; - private CardType typeToCheck; - private int energy; + private final AbstractPlayer p; + private final CardType typeToCheck; + private final int energy; private int tracker = 0; public LuckDrawAction(int energy) { @@ -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; } @@ -39,7 +40,7 @@ public void update() { } if (!p.drawPile.isEmpty()) { - AbstractCard c = (AbstractCard) AbstractDungeon.player.drawPile.group.get(AbstractDungeon.player.drawPile.size() - 1); + AbstractCard c = AbstractDungeon.player.drawPile.group.get(AbstractDungeon.player.drawPile.size() - 1); if (c.cost > 0) tracker += c.cost; diff --git a/src/main/java/hermit/actions/MagnumAction.java b/src/main/java/hermit/actions/MagnumAction.java index 832e786f16..8971d1045e 100644 --- a/src/main/java/hermit/actions/MagnumAction.java +++ b/src/main/java/hermit/actions/MagnumAction.java @@ -36,13 +36,13 @@ public class MagnumAction extends AbstractGameAction { private static final UIStrings uiStrings; public static final String[] TEXT; - private AbstractPlayer p; - private AbstractCard magnumcard; - private boolean isRandom; - private boolean endTurn; + private final AbstractPlayer p; + private final AbstractCard magnumcard; + private final boolean isRandom; + private final boolean endTurn; public static int numDiscarded; private static final float DURATION; - private DamageInfo info; + private final DamageInfo info; public MagnumAction(AbstractCreature target, DamageInfo info, AbstractCard magnumcard) { diff --git a/src/main/java/hermit/actions/MagnumActionDamage.java b/src/main/java/hermit/actions/MagnumActionDamage.java index 735ee8976b..33ac9ff57c 100644 --- a/src/main/java/hermit/actions/MagnumActionDamage.java +++ b/src/main/java/hermit/actions/MagnumActionDamage.java @@ -11,9 +11,9 @@ import hermit.patches.EnumPatch; public class MagnumActionDamage extends AbstractGameAction { - private AbstractCreature m; - private AbstractPlayer p; - private AbstractCard c; + private final AbstractCreature m; + private final AbstractPlayer p; + private final AbstractCard c; public MagnumActionDamage(AbstractCreature m, AbstractPlayer p, AbstractCard c) { this.m = m; diff --git a/src/main/java/hermit/actions/MaliceAction.java b/src/main/java/hermit/actions/MaliceAction.java index 6a1d30e536..49a066188b 100644 --- a/src/main/java/hermit/actions/MaliceAction.java +++ b/src/main/java/hermit/actions/MaliceAction.java @@ -25,7 +25,7 @@ public class MaliceAction extends AbstractGameAction { public static final String[] TEXT; private final float startingDuration; private final DamageInfo info; - private AbstractPlayer p; + private final AbstractPlayer p; int[] base; boolean extra_draw; diff --git a/src/main/java/hermit/actions/ManifestAction.java b/src/main/java/hermit/actions/ManifestAction.java index 2b25fbe4ea..cfd1224822 100644 --- a/src/main/java/hermit/actions/ManifestAction.java +++ b/src/main/java/hermit/actions/ManifestAction.java @@ -16,8 +16,8 @@ // DEPRECATED public class ManifestAction extends AbstractGameAction { - private AbstractPlayer p; - private CardType typeToCheck; + private final AbstractPlayer p; + private final CardType typeToCheck; public ManifestAction(int amount) { this.p = AbstractDungeon.player; diff --git a/src/main/java/hermit/actions/ReduceDebuffsAction.java b/src/main/java/hermit/actions/ReduceDebuffsAction.java index 338ce465d1..587daf53d3 100644 --- a/src/main/java/hermit/actions/ReduceDebuffsAction.java +++ b/src/main/java/hermit/actions/ReduceDebuffsAction.java @@ -9,7 +9,7 @@ import com.megacrit.cardcrawl.powers.AbstractPower.PowerType; public class ReduceDebuffsAction extends AbstractGameAction { - private AbstractCreature c; + private final AbstractCreature c; public ReduceDebuffsAction(AbstractCreature c, int amount) { this.c = c; diff --git a/src/main/java/hermit/actions/ReprieveAction.java b/src/main/java/hermit/actions/ReprieveAction.java index 3bbc552f76..26af179585 100644 --- a/src/main/java/hermit/actions/ReprieveAction.java +++ b/src/main/java/hermit/actions/ReprieveAction.java @@ -18,7 +18,7 @@ import java.util.Iterator; public class ReprieveAction extends AbstractGameAction { - private AbstractPlayer p; + private final AbstractPlayer p; private int totalcards = 0; int curseTreshold = 0; diff --git a/src/main/java/hermit/actions/SoundAction.java b/src/main/java/hermit/actions/SoundAction.java index 06e68fb546..27ae7ab931 100644 --- a/src/main/java/hermit/actions/SoundAction.java +++ b/src/main/java/hermit/actions/SoundAction.java @@ -5,7 +5,7 @@ import com.megacrit.cardcrawl.core.Settings; public class SoundAction extends AbstractGameAction { - private String sfx; + private final String sfx; public SoundAction(String sound) { sfx = sound; diff --git a/src/main/java/hermit/actions/SpiteAction.java b/src/main/java/hermit/actions/SpiteAction.java index 1826b92c97..5ddfe5af32 100644 --- a/src/main/java/hermit/actions/SpiteAction.java +++ b/src/main/java/hermit/actions/SpiteAction.java @@ -14,7 +14,7 @@ import java.util.Iterator; public class SpiteAction extends AbstractGameAction { - private float startingDuration; + private final float startingDuration; public SpiteAction() { this.actionType = ActionType.WAIT; diff --git a/src/main/java/hermit/cards/AbstractHermitCard.java b/src/main/java/hermit/cards/AbstractHermitCard.java index b148d01b00..48e27fb889 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(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 512fd0401e..399772ba0b 100644 --- a/src/main/java/hermit/cards/Covet.java +++ b/src/main/java/hermit/cards/Covet.java @@ -5,6 +5,8 @@ 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.helpers.GameDictionary; import com.megacrit.cardcrawl.localization.CardStrings; import com.megacrit.cardcrawl.localization.UIStrings; import com.megacrit.cardcrawl.monsters.AbstractMonster; @@ -78,4 +80,14 @@ public void upgrade() { initializeDescription(); } } + + //add curse keyword + @Override + public void initializeDescription() { + super.initializeDescription(); + if (Settings.language == Settings.GameLanguage.ENG) { + this.keywords.add(GameDictionary.CURSE.NAMES[0].toLowerCase()); + } + } + } \ No newline at end of file diff --git a/src/main/java/hermit/cards/FromBeyond.java b/src/main/java/hermit/cards/FromBeyond.java index d75e17b1a3..0c6b95ca8e 100644 --- a/src/main/java/hermit/cards/FromBeyond.java +++ b/src/main/java/hermit/cards/FromBeyond.java @@ -60,7 +60,7 @@ public void use(AbstractPlayer p, AbstractMonster m) { Wiz.atb(new AbstractGameAction() { @Override public void update() { - target = AbstractDungeon.getMonsters().getRandomMonster((AbstractMonster) null, true, AbstractDungeon.cardRandomRng); + target = AbstractDungeon.getMonsters().getRandomMonster(null, true, AbstractDungeon.cardRandomRng); if (this.target != null && !isDeadOrEscaped(this.target)) { this.addToTop(new FastLoseHPAction(this.target, AbstractDungeon.player, dameg, EnumPatch.HERMIT_GHOSTFIRE)); } diff --git a/src/main/java/hermit/cards/Headshot.java b/src/main/java/hermit/cards/Headshot.java index eb578c1144..d803599175 100644 --- a/src/main/java/hermit/cards/Headshot.java +++ b/src/main/java/hermit/cards/Headshot.java @@ -63,22 +63,23 @@ public void triggerOnGlowCheck() { } } + @Override - public void calculateCardDamage(AbstractMonster mo) - { + public void calculateCardDamage(AbstractMonster mo) { super.calculateCardDamage(mo); - - if (isDeadOnPos() || trig_deadon) { - - int DeadOnTimes = DeadOnAmount(); - int base_dam = this.damage; - - for (int a = 0; a < DeadOnTimes; a++) { - this.damage += base_dam; + //if this triggers dead on 3 times it deals 400% damage by adding 100% 3 times, not 800% damage, this is intentional. + if (!mo.hasPower("Intangible")) { + if (isDeadOnPos() || trig_deadon) { + int DeadOnTimes = DeadOnAmount(); + int base_dam = this.damage; + for (int a = 0; a < DeadOnTimes; a++) { + this.damage += base_dam; + } } } - - isDamageModified = damage != baseDamage; + //don't uncomment this, bad idea!!! + //this.baseDamage = base_dam; + isDamageModified = damage != baseDamage; } //Upgraded stats. diff --git a/src/main/java/hermit/cards/ImpendingDoom.java b/src/main/java/hermit/cards/ImpendingDoom.java index 09124b9b9d..59e31d1540 100644 --- a/src/main/java/hermit/cards/ImpendingDoom.java +++ b/src/main/java/hermit/cards/ImpendingDoom.java @@ -28,7 +28,7 @@ public class ImpendingDoom extends AbstractDynamicCard { // STAT DECLARATION - private static final CardRarity RARITY = CardRarity.CURSE; //Change from Special Rarity: Impending Doom can now show up as a Curse during Downfall Mode runs. + 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; diff --git a/src/main/java/hermit/cards/ItchyTrigger.java b/src/main/java/hermit/cards/ItchyTrigger.java index 0206edf3af..481a4a8e75 100644 --- a/src/main/java/hermit/cards/ItchyTrigger.java +++ b/src/main/java/hermit/cards/ItchyTrigger.java @@ -106,7 +106,7 @@ public void itchyTrigger() { AbstractCard cc = (AbstractCard)var9.next(); } - c = (AbstractCard)groupCopy.get(AbstractDungeon.cardRandomRng.random(0, groupCopy.size() - 1)); + c = groupCopy.get(AbstractDungeon.cardRandomRng.random(0, groupCopy.size() - 1)); } if (c != null) { diff --git a/src/main/java/hermit/cards/Malice.java b/src/main/java/hermit/cards/Malice.java index 5b47394f41..ce047577db 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 c4e2eb8114..61bf8fcc2d 100644 --- a/src/main/java/hermit/cards/RoundhouseKick.java +++ b/src/main/java/hermit/cards/RoundhouseKick.java @@ -51,7 +51,6 @@ public RoundhouseKick() { baseDamage=13; exhaust=true; loadJokeCardImage(this, "roundhouse_kick.png"); - this.tags.add(SneckoMod.BANNEDFORSNECKO); } // Actions the card should do. diff --git a/src/main/java/hermit/cards/Snipe.java b/src/main/java/hermit/cards/Snipe.java index bca9aab172..1f7e0a61c5 100644 --- a/src/main/java/hermit/cards/Snipe.java +++ b/src/main/java/hermit/cards/Snipe.java @@ -32,7 +32,7 @@ public class Snipe extends AbstractDynamicCard { private static final int COST = 0; - private int SnipeAmount = 1; + private final int SnipeAmount = 1; // /STAT DECLARATION/ diff --git a/src/main/java/hermit/effects/HermitEyeParticle.java b/src/main/java/hermit/effects/HermitEyeParticle.java index d318981484..bda1ea6da4 100644 --- a/src/main/java/hermit/effects/HermitEyeParticle.java +++ b/src/main/java/hermit/effects/HermitEyeParticle.java @@ -17,7 +17,7 @@ public class HermitEyeParticle extends AbstractGameEffect { private float x; private float y; - private AtlasRegion img; + private final AtlasRegion img; public AbstractCreature parent; public Skeleton skeleton; private hermit hermitParent; diff --git a/src/main/java/hermit/effects/HermitUpgradeShineEffect.java b/src/main/java/hermit/effects/HermitUpgradeShineEffect.java index 482acc5b2c..40af63e95e 100644 --- a/src/main/java/hermit/effects/HermitUpgradeShineEffect.java +++ b/src/main/java/hermit/effects/HermitUpgradeShineEffect.java @@ -13,8 +13,8 @@ import com.megacrit.cardcrawl.vfx.UpgradeShineParticleEffect; public class HermitUpgradeShineEffect extends AbstractGameEffect { - private float x; - private float y; + private final float x; + private final float y; private boolean clang1 = false; private boolean clang2 = false; diff --git a/src/main/java/hermit/effects/HermitVictoryEmbers.java b/src/main/java/hermit/effects/HermitVictoryEmbers.java index a2dda83ae9..31132bfc02 100644 --- a/src/main/java/hermit/effects/HermitVictoryEmbers.java +++ b/src/main/java/hermit/effects/HermitVictoryEmbers.java @@ -17,21 +17,21 @@ public class HermitVictoryEmbers extends AbstractGameEffect { private float x; private float y; - private static Texture texture_normal = new Texture("hermitResources/images/ending/orb_long.png"); - private static Texture texture2_normal = new Texture("hermitResources/images/ending/orb_glow_long.png"); + private static final Texture texture_normal = new Texture("hermitResources/images/ending/orb_long.png"); + private static final Texture texture2_normal = new Texture("hermitResources/images/ending/orb_glow_long.png"); - private static Texture texture_alt = new Texture("hermitResources/images/ending/orb.png"); - private static Texture texture2_alt = new Texture("hermitResources/images/ending/orb_glow.png"); + private static final Texture texture_alt = new Texture("hermitResources/images/ending/orb.png"); + private static final Texture texture2_alt = new Texture("hermitResources/images/ending/orb_glow.png"); private Texture texture = texture_normal; private Texture texture2 = texture2_normal; private float speed = -6400.0f; - private float direction; + private final float direction; private float wiggle = 0; - private boolean random_ember; + private final boolean random_ember; private float alpha = 1; public HermitVictoryEmbers() { @@ -58,7 +58,7 @@ public HermitVictoryEmbers() { float h = MathUtils.random(0.7F, 0.85F); float dist = h * (float)Settings.WIDTH; this.y = (float) (Settings.HEIGHT*0.75 + MathUtils.sinDeg(placedir) * dist); - this.x = (float) (Settings.WIDTH/2 + MathUtils.cosDeg(placedir) * dist); + this.x = Settings.WIDTH/2 + MathUtils.cosDeg(placedir) * dist; this.direction = placedir; diff --git a/src/main/java/hermit/effects/HermitVictoryMoon.java b/src/main/java/hermit/effects/HermitVictoryMoon.java index f6aa5d76f6..2958459f95 100644 --- a/src/main/java/hermit/effects/HermitVictoryMoon.java +++ b/src/main/java/hermit/effects/HermitVictoryMoon.java @@ -11,13 +11,13 @@ public class HermitVictoryMoon extends AbstractGameEffect { // Settings - private float duration; + private final float duration; - private float x; - private float y; + private final float x; + private final float y; - private static Texture texture = new Texture("hermitResources/images/ending/red_moon.png"); - private static Texture texture_glow = new Texture("hermitResources/images/ending/moon_glow.png"); + private static final Texture texture = new Texture("hermitResources/images/ending/red_moon.png"); + private static final Texture texture_glow = new Texture("hermitResources/images/ending/moon_glow.png"); public static float alpha = 0; private static float wiggle = 0; @@ -38,7 +38,7 @@ public HermitVictoryMoon() { alpha = 0; // how big - this.scale = 1f * Settings.scale; + this.scale = Settings.scale; } @Override diff --git a/src/main/java/hermit/patches/AttackEffectPatch.java b/src/main/java/hermit/patches/AttackEffectPatch.java index ef5b8731b8..2a3f26a761 100644 --- a/src/main/java/hermit/patches/AttackEffectPatch.java +++ b/src/main/java/hermit/patches/AttackEffectPatch.java @@ -15,7 +15,7 @@ public class AttackEffectPatch { - private static Texture GhostFireTexture = TextureLoader.getTexture("hermitResources/images/vfx/HermitGhostFire.png"); + private static final Texture GhostFireTexture = TextureLoader.getTexture("hermitResources/images/vfx/HermitGhostFire.png"); @SpirePatch(clz = FlashAtkImgEffect.class, method = "loadImage") public static class vfx diff --git a/src/main/java/hermit/patches/FreePlayPatch.java b/src/main/java/hermit/patches/FreePlayPatch.java index bcae33ec77..27c65b058c 100644 --- a/src/main/java/hermit/patches/FreePlayPatch.java +++ b/src/main/java/hermit/patches/FreePlayPatch.java @@ -26,7 +26,7 @@ public static SpireReturn FreePlay(AbstractCard c) { if (CardCrawlGame.isInARun() && !AbstractDungeon.player.equals(null)) { if (AbstractDungeon.getCurrRoom().phase == AbstractRoom.RoomPhase.COMBAT) { - if (AbstractDungeon.player.hasPower(PlayCardAndExhaustPower.POWER_ID) && c.cost != -1 && AbstractDungeon.player.hand.group.indexOf(c) != -1) { + if (AbstractDungeon.player.hasPower(PlayCardAndExhaustPower.POWER_ID) && c.cost != -1 && AbstractDungeon.player.hand.group.contains(c)) { int amount = AbstractDungeon.player.getPower(PlayCardAndExhaustPower.POWER_ID).amount; if (amount > 0) return SpireReturn.Return(true); diff --git a/src/main/java/hermit/patches/VigorPatch.java b/src/main/java/hermit/patches/VigorPatch.java index 977b05fe8c..e6286d4059 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/potions/BlackBile.java b/src/main/java/hermit/potions/BlackBile.java index 2d2d21c8a8..ed394a733c 100644 --- a/src/main/java/hermit/potions/BlackBile.java +++ b/src/main/java/hermit/potions/BlackBile.java @@ -4,6 +4,7 @@ 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.GameDictionary; import com.megacrit.cardcrawl.helpers.PowerTip; @@ -47,14 +48,15 @@ public BlackBile() { } @Override - public void initializeData() - { + public void initializeData() { potency = getPotency(); description = DESCRIPTIONS[0] + potency + DESCRIPTIONS[1]; tips.clear(); tips.add(new PowerTip(name, description)); - this.tips.add(new PowerTip(TipHelper.capitalize(BaseMod.getKeywordProper("hermit:bruise")), GameDictionary.keywords.get("hermit:bruise"))); + if (Settings.language == Settings.GameLanguage.ENG) { + this.tips.add(new PowerTip(TipHelper.capitalize(BaseMod.getKeywordProper("hermit:bruise")), GameDictionary.keywords.get("hermit:bruise"))); + } } // See that description? It has DESCRIPTIONS[1] instead of just hard-coding the "text " + potency + " more text" inside. diff --git a/src/main/java/hermit/potions/Tonic.java b/src/main/java/hermit/potions/Tonic.java index 8b36d1c63e..f5a82a1f4b 100644 --- a/src/main/java/hermit/potions/Tonic.java +++ b/src/main/java/hermit/potions/Tonic.java @@ -4,6 +4,7 @@ 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.GameDictionary; import com.megacrit.cardcrawl.helpers.PowerTip; @@ -45,14 +46,15 @@ public Tonic() { } @Override - public void initializeData() - { + public void initializeData() { potency = getPotency(); description = DESCRIPTIONS[0] + potency + DESCRIPTIONS[1]; tips.clear(); tips.add(new PowerTip(name, description)); - this.tips.add(new PowerTip(TipHelper.capitalize(BaseMod.getKeywordProper("hermit:rugged")), GameDictionary.keywords.get("hermit:rugged"))); + if (Settings.language == Settings.GameLanguage.ENG) { + this.tips.add(new PowerTip(TipHelper.capitalize(BaseMod.getKeywordProper("hermit:rugged")), GameDictionary.keywords.get("hermit:rugged"))); + } } // See that description? It has DESCRIPTIONS[1] instead of just hard-coding the "text " + potency + " more text" inside. // DO NOT HARDCODE YOUR STRINGS ANYWHERE, it's really bad practice to have "Strings" in your code: diff --git a/src/main/java/hermit/powers/BigShotPower.java b/src/main/java/hermit/powers/BigShotPower.java index 0ca1a64ac4..db6ac5de58 100644 --- a/src/main/java/hermit/powers/BigShotPower.java +++ b/src/main/java/hermit/powers/BigShotPower.java @@ -35,7 +35,7 @@ public BigShotPower(final AbstractCreature owner, final int amount) { type = PowerType.BUFF; if (this.amount <= 0) { - this.addToTop(new RemoveSpecificPowerAction(this.owner, this.owner, this.POWER_ID)); + this.addToTop(new RemoveSpecificPowerAction(this.owner, this.owner, POWER_ID)); } this.region128 = new TextureAtlas.AtlasRegion(tex84, 0, 0, 84, 84); diff --git a/src/main/java/hermit/powers/Bruise.java b/src/main/java/hermit/powers/Bruise.java index 1f9d829509..f14f824409 100644 --- a/src/main/java/hermit/powers/Bruise.java +++ b/src/main/java/hermit/powers/Bruise.java @@ -45,7 +45,7 @@ public Bruise(final AbstractCreature owner, final int amount) { type = PowerType.DEBUFF; if (this.amount <= 0) { - this.addToTop(new RemoveSpecificPowerAction(this.owner, this.owner, this.POWER_ID)); + this.addToTop(new RemoveSpecificPowerAction(this.owner, this.owner, POWER_ID)); } this.region128 = new TextureAtlas.AtlasRegion(tex84, 0, 0, 84, 84); diff --git a/src/main/java/hermit/powers/CoalescencePower.java b/src/main/java/hermit/powers/CoalescencePower.java index 45efcfead3..c4cc409067 100644 --- a/src/main/java/hermit/powers/CoalescencePower.java +++ b/src/main/java/hermit/powers/CoalescencePower.java @@ -38,7 +38,7 @@ public CoalescencePower(final AbstractCreature owner, final int amount) { type = PowerType.BUFF; if (this.amount <= 0) { - this.addToTop(new RemoveSpecificPowerAction(this.owner, this.owner, this.POWER_ID)); + this.addToTop(new RemoveSpecificPowerAction(this.owner, this.owner, POWER_ID)); } this.region128 = new TextureAtlas.AtlasRegion(tex84, 0, 0, 84, 84); diff --git a/src/main/java/hermit/powers/ComboPower.java b/src/main/java/hermit/powers/ComboPower.java index e305395eb6..335bdd97dd 100644 --- a/src/main/java/hermit/powers/ComboPower.java +++ b/src/main/java/hermit/powers/ComboPower.java @@ -37,7 +37,7 @@ public ComboPower(final AbstractCreature owner, final int amount) { type = PowerType.BUFF; if (this.amount <= 0) { - this.addToTop(new RemoveSpecificPowerAction(this.owner, this.owner, this.POWER_ID)); + this.addToTop(new RemoveSpecificPowerAction(this.owner, this.owner, POWER_ID)); } this.region128 = new TextureAtlas.AtlasRegion(tex84, 0, 0, 84, 84); diff --git a/src/main/java/hermit/powers/DeterminationPower.java b/src/main/java/hermit/powers/DeterminationPower.java index 9a13bc17f3..2385baf197 100644 --- a/src/main/java/hermit/powers/DeterminationPower.java +++ b/src/main/java/hermit/powers/DeterminationPower.java @@ -39,7 +39,7 @@ public DeterminationPower(final AbstractCreature owner, final int amount) { type = PowerType.BUFF; if (this.amount <= 0) { - this.addToTop(new RemoveSpecificPowerAction(this.owner, this.owner, this.POWER_ID)); + this.addToTop(new RemoveSpecificPowerAction(this.owner, this.owner, POWER_ID)); } this.region128 = new TextureAtlas.AtlasRegion(tex84, 0, 0, 84, 84); @@ -60,7 +60,7 @@ public void updateDescription() { public boolean onReceivePower(AbstractPower power, AbstractCreature target, AbstractCreature source) { if (power.type==PowerType.DEBUFF) - this.addToBot(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new StrengthPower(AbstractDungeon.player, amount), amount)); + this.addToBot(new ApplyPowerAction(owner, owner, new StrengthPower(owner, amount), amount)); return true; } diff --git a/src/main/java/hermit/powers/Drained.java b/src/main/java/hermit/powers/Drained.java index 35e91936c6..f4ff6a37f0 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/powers/EternalPower.java b/src/main/java/hermit/powers/EternalPower.java index 3faa6f93a8..c1979d2926 100644 --- a/src/main/java/hermit/powers/EternalPower.java +++ b/src/main/java/hermit/powers/EternalPower.java @@ -30,7 +30,7 @@ public EternalPower(final AbstractCreature owner, final AbstractCreature source, ID = POWER_ID; this.owner = owner; - this.total = amount; + total = amount; this.amount = amount; this.source = source; diff --git a/src/main/java/hermit/powers/HighNoonPower.java b/src/main/java/hermit/powers/HighNoonPower.java index 5c327e39a0..651f1aae4a 100644 --- a/src/main/java/hermit/powers/HighNoonPower.java +++ b/src/main/java/hermit/powers/HighNoonPower.java @@ -38,7 +38,7 @@ public HighNoonPower(final AbstractCreature owner, final int amount) { type = PowerType.BUFF; if (this.amount <= 0) { - this.addToTop(new RemoveSpecificPowerAction(this.owner, this.owner, this.POWER_ID)); + this.addToTop(new RemoveSpecificPowerAction(this.owner, this.owner, POWER_ID)); } this.region128 = new TextureAtlas.AtlasRegion(tex84, 0, 0, 84, 84); diff --git a/src/main/java/hermit/powers/HorrorPower.java b/src/main/java/hermit/powers/HorrorPower.java index 53593e5209..c0fb95d8d0 100644 --- a/src/main/java/hermit/powers/HorrorPower.java +++ b/src/main/java/hermit/powers/HorrorPower.java @@ -39,7 +39,7 @@ public HorrorPower(final AbstractCreature owner, final int amount) { type = PowerType.DEBUFF; if (this.amount <= 0) { - this.addToTop(new RemoveSpecificPowerAction(this.owner, this.owner, this.POWER_ID)); + this.addToTop(new RemoveSpecificPowerAction(this.owner, this.owner, POWER_ID)); } this.region128 = new TextureAtlas.AtlasRegion(tex84, 0, 0, 84, 84); diff --git a/src/main/java/hermit/powers/Rugged.java b/src/main/java/hermit/powers/Rugged.java index 11e5b7657a..a1185917b8 100644 --- a/src/main/java/hermit/powers/Rugged.java +++ b/src/main/java/hermit/powers/Rugged.java @@ -39,7 +39,7 @@ public Rugged(final AbstractCreature owner, final int amount) { type = PowerType.BUFF; if (this.amount <= 0) { - this.addToTop(new RemoveSpecificPowerAction(this.owner, this.owner, this.POWER_ID)); + this.addToTop(new RemoveSpecificPowerAction(this.owner, this.owner, POWER_ID)); } this.region128 = new TextureAtlas.AtlasRegion(tex84, 0, 0, 84, 84); diff --git a/src/main/java/hermit/powers/SnipePower.java b/src/main/java/hermit/powers/SnipePower.java index bc8dccdfe7..2c4e003144 100644 --- a/src/main/java/hermit/powers/SnipePower.java +++ b/src/main/java/hermit/powers/SnipePower.java @@ -36,7 +36,7 @@ public SnipePower(final AbstractCreature owner, final int amount) { type = PowerType.BUFF; if (this.amount <= 0) { - this.addToTop(new RemoveSpecificPowerAction(this.owner, this.owner, this.POWER_ID)); + this.addToTop(new RemoveSpecificPowerAction(this.owner, this.owner, POWER_ID)); } 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 bbfdab7054..b11bcae062 100644 --- a/src/main/java/hermit/relics/BartenderGlass.java +++ b/src/main/java/hermit/relics/BartenderGlass.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.rooms.AbstractRoom; import hermit.HermitMod; @@ -18,6 +19,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 +32,7 @@ public void obtain() { super.obtain(); if (AbstractDungeon.getCurrRoom().phase == AbstractRoom.RoomPhase.COMBAT) - counter = 2; + counter = POTION_LIMIT; else counter = -1; } @@ -35,7 +40,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 +64,11 @@ public void onUsePotion() { @Override public String getUpdatedDescription() { - return DESCRIPTIONS[0]; + if ((Settings.language != Settings.GameLanguage.ZHS && Settings.language != Settings.GameLanguage.ZHT)) { + return DESCRIPTIONS[0] + POTION_LIMIT + DESCRIPTIONS[2] + POTION_LIMIT + DESCRIPTIONS[3]; + } else { + return DESCRIPTIONS[0] + POTION_LIMIT + DESCRIPTIONS[1]; + } } } diff --git a/src/main/java/hermit/relics/BlackPowder.java b/src/main/java/hermit/relics/BlackPowder.java index a0a3d782e5..af97e9e1e1 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 86cb54b511..78ba48d602 100644 --- a/src/main/java/hermit/relics/BloodyTooth.java +++ b/src/main/java/hermit/relics/BloodyTooth.java @@ -21,23 +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)); + 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]; + 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 77798cc412..7b4bfd99c8 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 b2369fb5a1..fe9506208a 100644 --- a/src/main/java/hermit/relics/CharredGlove.java +++ b/src/main/java/hermit/relics/CharredGlove.java @@ -37,14 +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)); //This should NEVER happen but maybe there's some cross-mod nonsense that allows it to happen. - //Mechanically speaking, this is so basically identical. - vigor(3); + //Mechanically speaking, this is basically identical. + vigor(AMOUNT); } } @@ -54,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 78158689de..f0fc3c405a 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)) { @@ -53,7 +58,7 @@ public void onCardDraw(AbstractCard card) { this.canTrigger = false; // visual feedback so the player can tell if it triggered that turn stopPulse(); - this.addToTop(new DrawCardAction(AbstractDungeon.player, 2)); + this.addToTop(new DrawCardAction(AbstractDungeon.player, DRAW)); this.addToTop(new ExhaustSpecificCardAction(card,AbstractDungeon.player.hand)); } @@ -81,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()); } @@ -91,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/Horseshoe.java b/src/main/java/hermit/relics/Horseshoe.java index d8d38b80ac..cb207aeadc 100644 --- a/src/main/java/hermit/relics/Horseshoe.java +++ b/src/main/java/hermit/relics/Horseshoe.java @@ -36,11 +36,7 @@ public boolean onReceivePower(AbstractPower var1, AbstractCreature var2) this.addToTop(new RelicAboveCreatureAction(AbstractDungeon.player, this)); flash(); - if (var1.amount != 0) { - return true; - } - - return false; + return var1.amount != 0; } return true; diff --git a/src/main/java/hermit/relics/Memento.java b/src/main/java/hermit/relics/Memento.java index 122fdd6b54..8020872c79 100644 --- a/src/main/java/hermit/relics/Memento.java +++ b/src/main/java/hermit/relics/Memento.java @@ -17,7 +17,7 @@ public class Memento extends CustomRelic { private static final Texture IMG = TextureLoader.getTexture(makeRelicPath("memento.png")); private static final Texture OUTLINE = TextureLoader.getTexture(makeRelicOutlinePath("memento.png")); - private int TURNS = 0; + private final int TURNS = 0; public Memento() { super(ID, IMG, OUTLINE, RelicTier.STARTER, LandingSound.FLAT); diff --git a/src/main/java/hermit/relics/RedScarf.java b/src/main/java/hermit/relics/RedScarf.java index 9c808aefb4..6616ce05dc 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 1a6ba6ec90..91a111ca77 100644 --- a/src/main/java/hermit/relics/StraightRazor.java +++ b/src/main/java/hermit/relics/StraightRazor.java @@ -20,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); } @@ -28,7 +32,7 @@ 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() { @@ -37,6 +41,6 @@ public boolean canSpawn() { @Override public String getUpdatedDescription() { - return DESCRIPTIONS[0]; + return DESCRIPTIONS[0] + HEALING + DESCRIPTIONS[1]; } } diff --git a/src/main/java/hermit/util/HermitTutorials.java b/src/main/java/hermit/util/HermitTutorials.java index ebbab46daa..b00261569f 100644 --- a/src/main/java/hermit/util/HermitTutorials.java +++ b/src/main/java/hermit/util/HermitTutorials.java @@ -22,13 +22,13 @@ public class HermitTutorials extends FtueTip { private static final TutorialStrings tutorialStrings = CardCrawlGame.languagePack.getTutorialString("HermitMod:HermitTutorials"); public static final String[] txt = tutorialStrings.TEXT; public static final String[] LABEL = tutorialStrings.LABEL; - private Texture img1; - private Texture img2; + private final Texture img1; + private final Texture img2; private Texture img3; - private Color screen = Color.valueOf("1c262a00"); + private final Color screen = Color.valueOf("1c262a00"); private float x; - private float x1; - private float x2; + private final float x1; + private final float x2; private float x3; private float targetX; private float startX; @@ -37,7 +37,7 @@ public class HermitTutorials extends FtueTip { private static String txt1 = txt[0]; private static String txt2 = txt[1]; - private int closeScreen; + private final int closeScreen; public HermitTutorials() { @@ -125,7 +125,7 @@ public void render(SpriteBatch sb) { 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)) + "/" + + FontHelper.renderFontCenteredWidth(sb, FontHelper.tipBodyFont, LABEL[3] + 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/hermit/util/IncreaseMiscActionHermit.java b/src/main/java/hermit/util/IncreaseMiscActionHermit.java index ea7677fd97..1e52fe7b1a 100644 --- a/src/main/java/hermit/util/IncreaseMiscActionHermit.java +++ b/src/main/java/hermit/util/IncreaseMiscActionHermit.java @@ -8,8 +8,8 @@ import java.util.UUID; public class IncreaseMiscActionHermit extends AbstractGameAction { - private int miscIncrease; - private UUID uuid; + private final int miscIncrease; + private final UUID uuid; public IncreaseMiscActionHermit(UUID targetUUID, int miscValue, int miscIncrease) { this.miscIncrease = miscIncrease; diff --git a/src/main/java/hermit/util/TextureLoader.java b/src/main/java/hermit/util/TextureLoader.java index e37bd5cda7..f5a1edc36f 100644 --- a/src/main/java/hermit/util/TextureLoader.java +++ b/src/main/java/hermit/util/TextureLoader.java @@ -17,7 +17,7 @@ public class TextureLoader { - private static HashMap textures = new HashMap(); + private static final HashMap textures = new HashMap(); //public static final Logger logger = LogManager.getLogger(TextureLoader.class.getName()); /** diff --git a/src/main/java/hermit/vfx/GreenFireEffect.java b/src/main/java/hermit/vfx/GreenFireEffect.java index f547857043..02b7751f81 100644 --- a/src/main/java/hermit/vfx/GreenFireEffect.java +++ b/src/main/java/hermit/vfx/GreenFireEffect.java @@ -12,13 +12,13 @@ public class GreenFireEffect extends AbstractGameEffect { private AtlasRegion img; - private float brightness; + private final float brightness; private float x; private float y; - private float vX; - private float vY; - private float startingDuration; - private boolean flipX = MathUtils.randomBoolean(); + private final float vX; + private final float vY; + private final float startingDuration; + private final boolean flipX = MathUtils.randomBoolean(); private float delayTimer = MathUtils.random(0.1F); public GreenFireEffect() { @@ -52,7 +52,7 @@ public void update() { } else if (this.startingDuration - this.duration < 0.75F) { this.color.a = Interpolation.fade.apply(0.0F, this.brightness, (this.startingDuration - this.duration) / 0.75F); } else if (this.duration < 1.0F) { - this.color.a = Interpolation.fade.apply(0.0F, this.brightness, this.duration / 1.0F); + this.color.a = Interpolation.fade.apply(0.0F, this.brightness, this.duration); } } diff --git a/src/main/java/reskinContent/patches/CharacterSelectScreenPatches.java b/src/main/java/reskinContent/patches/CharacterSelectScreenPatches.java index 42ea89955a..b74c7e6cce 100644 --- a/src/main/java/reskinContent/patches/CharacterSelectScreenPatches.java +++ b/src/main/java/reskinContent/patches/CharacterSelectScreenPatches.java @@ -56,7 +56,8 @@ public class CharacterSelectScreenPatches { new HexaghostSkin(), new SneckoSkin(), new ChampSkin(), - new AutomatonSkin() + new AutomatonSkin(), + new AwakenedOneSkin() }; diff --git a/src/main/java/reskinContent/reskinContent.java b/src/main/java/reskinContent/reskinContent.java index 4033a517d7..6f08b657fd 100644 --- a/src/main/java/reskinContent/reskinContent.java +++ b/src/main/java/reskinContent/reskinContent.java @@ -94,6 +94,9 @@ public static String getLanguageString() { case JPN: language = "jpn"; break; + case DEU: + language = "deu"; + break; default: language = "eng"; } diff --git a/src/main/java/reskinContent/skinCharacter/AwakenedOneSkin.java b/src/main/java/reskinContent/skinCharacter/AwakenedOneSkin.java new file mode 100644 index 0000000000..2ee9a83011 --- /dev/null +++ b/src/main/java/reskinContent/skinCharacter/AwakenedOneSkin.java @@ -0,0 +1,33 @@ +package reskinContent.skinCharacter; + +import automaton.AutomatonChar; +import awakenedOne.AwakenedOneChar; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import reskinContent.skinCharacter.skins.Automaton.AutomationOriginal; +import reskinContent.skinCharacter.skins.Automaton.BetaAutomaton; +import reskinContent.skinCharacter.skins.Automaton.ThePerfect; +import reskinContent.skinCharacter.skins.AwakenedOne.AwakenedOneOriginal; +import reskinContent.vfx.ReskinUnlockedTextEffect; + + +public class AwakenedOneSkin extends AbstractSkinCharacter { + public static final String ID = CardCrawlGame.languagePack.getCharacterString("awakened:awakenedOne").NAMES[0]; + public static final AbstractSkin[] SKINS = new AbstractSkin[]{ + new AwakenedOneOriginal() + }; + + public AwakenedOneSkin() { + super(ID, SKINS); + } + + @Override + public void checkUnlock() { + if (AbstractDungeon.player.chosenClass == AwakenedOneChar.Enums.AWAKENED_ONE && !this.reskinUnlock) { + AbstractDungeon.topLevelEffects.add(new ReskinUnlockedTextEffect(5)); + this.reskinUnlock = true; + } + } +} + + diff --git a/src/main/java/reskinContent/skinCharacter/skins/AwakenedOne/AwakenedOneOriginal.java b/src/main/java/reskinContent/skinCharacter/skins/AwakenedOne/AwakenedOneOriginal.java new file mode 100644 index 0000000000..a252adf985 --- /dev/null +++ b/src/main/java/reskinContent/skinCharacter/skins/AwakenedOne/AwakenedOneOriginal.java @@ -0,0 +1,24 @@ +package reskinContent.skinCharacter.skins.AwakenedOne; + +import automaton.AutomatonChar; +import awakenedOne.AwakenedOneChar; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import downfall.util.TextureLoader; +import reskinContent.skinCharacter.AbstractSkin; + +public class AwakenedOneOriginal extends AbstractSkin { + + public AwakenedOneOriginal() { + this.NAME = CardCrawlGame.languagePack.getUIString("reskinContent:ReSkin").TEXT[1]; + this.DESCRIPTION = CardCrawlGame.languagePack.getCharacterString(AwakenedOneChar.ID).TEXT[0]; + this.portraitStatic_IMG = TextureLoader.getTexture("awakenedResources/images/charSelect/charBG.png"); + this.SHOULDER1 = "awakenedResources/images/mainChar/shoulder.png"; + this.SHOULDER2 = "awakenedResources/images/mainChar/shoulderR.png"; + this.CORPSE = "awakenedResources/images/mainChar/corpse.png"; + this.atlasURL = "awakenedResources/images/mainChar/awakened.atlas"; + this.jsonURL = "awakenedResources/images/mainChar/awakened.json"; + this.renderscale = 1.2f; + } +} + + diff --git a/src/main/java/slimebound/SlimeboundMod.java b/src/main/java/slimebound/SlimeboundMod.java index 3b3834dbcd..6a2d18d3f9 100644 --- a/src/main/java/slimebound/SlimeboundMod.java +++ b/src/main/java/slimebound/SlimeboundMod.java @@ -535,12 +535,12 @@ public void receivePostInitialize() { .create()); */ - BaseMod.addEvent(new AddEventParams.Builder(ArtOfSlimeWar.ID, ArtOfSlimeWar.class) //Event ID// - //Act// - .dungeonIDs(TheCity.ID, "TheJungle") - //Only in Evil if content sharing is disabled - .spawnCondition(() -> (evilMode || downfallMod.contentSharing_events)) - .create()); +// BaseMod.addEvent(new AddEventParams.Builder(ArtOfSlimeWar.ID, ArtOfSlimeWar.class) //Event ID// +// //Act// +// .dungeonIDs(TheCity.ID, "TheJungle") +// //Only in Evil if content sharing is disabled +// .spawnCondition(() -> (evilMode || downfallMod.contentSharing_events)) +// .create()); BaseMod.addEvent(new AddEventParams.Builder(WorldOfGoopSlimebound.ID, WorldOfGoopSlimebound.class) //Event ID// //Event Character// @@ -598,17 +598,7 @@ public void receivePostInitialize() { public void addPotions() { - BaseMod.addPotion(SlimedPotion.class, Color.PURPLE, Color.PURPLE, Color.MAROON, SlimedPotion.POTION_ID, SlimeboundEnum.SLIMEBOUND); - BaseMod.addPotion(SpawnSlimePotion.class, Color.GREEN, Color.FOREST, Color.BLACK, SpawnSlimePotion.POTION_ID, SlimeboundEnum.SLIMEBOUND); - BaseMod.addPotion(SlimyTonguePotion.class, Color.PURPLE, Color.PURPLE, Color.MAROON, SlimyTonguePotion.POTION_ID, SlimeboundEnum.SLIMEBOUND); - // BanSharedContentPatch.registerRunLockedPotion(SlimeboundEnum.SLIMEBOUND, ThreeZeroPotion.POTION_ID); - if (Loader.isModLoaded("widepotions")) { - WidePotionsMod.whitelistSimplePotion(ThreeZeroPotion.POTION_ID); - WidePotionsMod.whitelistSimplePotion(SlimedPotion.POTION_ID); - WidePotionsMod.whitelistSimplePotion(SpawnSlimePotion.POTION_ID); - WidePotionsMod.whitelistSimplePotion(SlimyTonguePotion.POTION_ID); - } } diff --git a/src/main/java/slimebound/actions/ExhaustToHandDirectlyAction.java b/src/main/java/slimebound/actions/ExhaustToHandDirectlyAction.java index 90f70d14ad..13f0c2f39c 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/SlimeAutoAttack.java b/src/main/java/slimebound/actions/SlimeAutoAttack.java index bad22e3fef..195a6ed6a9 100644 --- a/src/main/java/slimebound/actions/SlimeAutoAttack.java +++ b/src/main/java/slimebound/actions/SlimeAutoAttack.java @@ -168,8 +168,9 @@ public void update() { AbstractDungeon.actionManager.addToTop(new SlimeAutoCultistBuff(1, this.slime)); } - if (slime instanceof ShieldSlime) + if (slime instanceof ShieldSlime) { AbstractDungeon.actionManager.addToTop(new GainBlockAction(AbstractDungeon.player, AbstractDungeon.player, this.debuffamount)); + } if (this.hitsAll) { AbstractDungeon.actionManager.addToTop(new DamageAllEnemiesAction(AbstractDungeon.player, DamageInfo.createDamageMatrix(this.damage, true, true), DamageInfo.DamageType.THORNS, AttackEffect.POISON)); @@ -179,19 +180,38 @@ public void update() { AE)); } - if (this.appliesPoison) - AbstractDungeon.actionManager.addToTop(new ApplyPowerAction(mo, AbstractDungeon.player, new PoisonPower(mo, AbstractDungeon.player, this.debuffamount), this.debuffamount, true, AbstractGameAction.AttackEffect.POISON)); - if (this.appliesSlimed) - AbstractDungeon.actionManager.addToTop(new ApplyPowerAction(mo, AbstractDungeon.player, new SlimedPower(mo, AbstractDungeon.player, this.debuffamount), this.debuffamount, true, AttackEffect.NONE)); - if (this.appliesWeak) - AbstractDungeon.actionManager.addToTop(new ApplyPowerAction(mo, AbstractDungeon.player, new WeakPower(mo, this.debuffamount, false), this.debuffamount, true, AbstractGameAction.AttackEffect.NONE)); - if (this.appliesVulnerable) - AbstractDungeon.actionManager.addToTop(new ApplyPowerAction(mo, AbstractDungeon.player, new VulnerablePower(mo, this.debuffamount, false), this.debuffamount, true, AbstractGameAction.AttackEffect.NONE)); - if (this.appliesBurn) - AbstractDungeon.actionManager.addToTop(new ApplyPowerAction(mo, AbstractDungeon.player, new BurnPower(mo, this.debuffamount), this.debuffamount, true, AbstractGameAction.AttackEffect.NONE)); - if (this.selfThorns) { + if (this.appliesPoison) { + if (this.debuffamount > 0) { + AbstractDungeon.actionManager.addToTop(new ApplyPowerAction(mo, AbstractDungeon.player, new PoisonPower(mo, AbstractDungeon.player, this.debuffamount), this.debuffamount, true, AttackEffect.POISON)); + } + } + if (this.appliesSlimed) { + if (this.debuffamount > 0) { + AbstractDungeon.actionManager.addToTop(new ApplyPowerAction(mo, AbstractDungeon.player, new SlimedPower(mo, AbstractDungeon.player, this.debuffamount), this.debuffamount, true, AttackEffect.NONE)); + } + } + if (this.appliesWeak) { + if (this.debuffamount > 0) { + AbstractDungeon.actionManager.addToTop(new ApplyPowerAction(mo, AbstractDungeon.player, new WeakPower(mo, this.debuffamount, false), this.debuffamount, true, AbstractGameAction.AttackEffect.NONE)); + } + } + if (this.appliesVulnerable) { + if (this.debuffamount > 0) { + AbstractDungeon.actionManager.addToTop(new ApplyPowerAction(mo, AbstractDungeon.player, new VulnerablePower(mo, this.debuffamount, false), this.debuffamount, true, AbstractGameAction.AttackEffect.NONE)); + } + } + + if (this.appliesBurn) { + if (this.debuffamount > 0) { + AbstractDungeon.actionManager.addToTop(new ApplyPowerAction(mo, AbstractDungeon.player, new BurnPower(mo, this.debuffamount), this.debuffamount, true, AbstractGameAction.AttackEffect.NONE)); + } + } + + if (this.selfThorns) { + if (this.debuffamount > 0) { AbstractDungeon.actionManager.addToTop(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new ThornsPower(AbstractDungeon.player, this.debuffamount), this.debuffamount, true, AbstractGameAction.AttackEffect.NONE)); AbstractDungeon.actionManager.addToTop(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new LoseThornsPower(AbstractDungeon.player, this.debuffamount), this.debuffamount, true, AbstractGameAction.AttackEffect.NONE)); + } } AbstractDungeon.actionManager.addToTop(new VFXAction(new SlimeIntentEffect(slime.intentImage, slime, speedTime), speedTime)); if (slime.movesToAttack) { diff --git a/src/main/java/slimebound/cards/AbstractSlimeboundCard.java b/src/main/java/slimebound/cards/AbstractSlimeboundCard.java index d57d3357b6..727164eaa2 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/OneTwoCombo.java b/src/main/java/slimebound/cards/OneTwoCombo.java index 25685541ec..db0e5cbcf8 100644 --- a/src/main/java/slimebound/cards/OneTwoCombo.java +++ b/src/main/java/slimebound/cards/OneTwoCombo.java @@ -48,15 +48,16 @@ public void onSplit() { public void use(AbstractPlayer p, AbstractMonster m) { addToBot(new DamageAction(m, new DamageInfo(p, damage, damageTypeForTurn), AbstractGameAction.AttackEffect.SLASH_HEAVY)); addToBot(new CommandAction()); - if (upgraded) 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/RallyTheTroops.java b/src/main/java/slimebound/cards/RallyTheTroops.java index 3d9312c208..c4639e021c 100644 --- a/src/main/java/slimebound/cards/RallyTheTroops.java +++ b/src/main/java/slimebound/cards/RallyTheTroops.java @@ -22,7 +22,7 @@ public class RallyTheTroops extends AbstractSlimeboundCard { private static final CardStrings cardStrings; private static final CardType TYPE = CardType.ATTACK; private static final CardRarity RARITY = CardRarity.RARE; - private static final CardTarget TARGET = CardTarget.SELF_AND_ENEMY; + private static final CardTarget TARGET = CardTarget.ENEMY; private static final int COST = 1; public static String UPGRADED_DESCRIPTION; diff --git a/src/main/java/slimebound/events/ArtOfSlimeWar.java b/src/main/java/slimebound/events/ArtOfSlimeWar.java index f79d51e725..1811b2e55b 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 aa4d419c7c..1c8a9ac406 100644 --- a/src/main/java/slimebound/orbs/AttackSlime.java +++ b/src/main/java/slimebound/orbs/AttackSlime.java @@ -25,7 +25,11 @@ public AttackSlime() { } public void updateDescription() { - this.description = this.descriptions[0] + this.passiveAmount + this.descriptions[1]; + if (this.passiveAmount > 0) { + this.description = this.descriptions[0] + this.passiveAmount + this.descriptions[1]; + } else { + this.description = this.descriptions[0] + 0 + this.descriptions[1]; + } } diff --git a/src/main/java/slimebound/orbs/BronzeSlime.java b/src/main/java/slimebound/orbs/BronzeSlime.java index 2fb3e02b7c..f52d703ae3 100644 --- a/src/main/java/slimebound/orbs/BronzeSlime.java +++ b/src/main/java/slimebound/orbs/BronzeSlime.java @@ -36,7 +36,11 @@ public void unsquish(){ } public void updateDescription() { - this.description = this.descriptions[0] + this.passiveAmount + this.descriptions[1]; + if (this.passiveAmount > 0) { + this.description = this.descriptions[0] + this.passiveAmount + this.descriptions[1]; + } else { + this.description = this.descriptions[0] + 0 + this.descriptions[1]; + } } diff --git a/src/main/java/slimebound/orbs/ChampSlime.java b/src/main/java/slimebound/orbs/ChampSlime.java index 634a31ef7b..ac41b337a9 100644 --- a/src/main/java/slimebound/orbs/ChampSlime.java +++ b/src/main/java/slimebound/orbs/ChampSlime.java @@ -45,7 +45,21 @@ public void postSpawnEffects() { public void updateDescription() { - this.description = this.descriptions[0] + this.passiveAmount + this.descriptions[1] + this.debuffAmount + this.descriptions[2]; + int cool = 0; + int cool2 = 0; + + cool = this.passiveAmount; + cool2 = this.debuffAmount; + + if (cool < 0) { + cool = 0; + } + + if (cool2 < 0) { + cool2 = 0; + } + + this.description = this.descriptions[0] + cool + this.descriptions[1] + cool2 + this.descriptions[2]; } diff --git a/src/main/java/slimebound/orbs/CultistSlime.java b/src/main/java/slimebound/orbs/CultistSlime.java index bbf7b5abe7..9a93762679 100644 --- a/src/main/java/slimebound/orbs/CultistSlime.java +++ b/src/main/java/slimebound/orbs/CultistSlime.java @@ -50,7 +50,11 @@ public void postSpawnEffects() { public void updateDescription() { - this.description = this.descriptions[0] + this.passiveAmount + this.descriptions[1]; + if (this.passiveAmount > 0) { + this.description = this.descriptions[0] + this.passiveAmount + this.descriptions[1]; + } else { + this.description = this.descriptions[0] + 0 + this.descriptions[1]; + } } diff --git a/src/main/java/slimebound/orbs/DarklingSlime.java b/src/main/java/slimebound/orbs/DarklingSlime.java index 4d2970e24d..82d66226ce 100644 --- a/src/main/java/slimebound/orbs/DarklingSlime.java +++ b/src/main/java/slimebound/orbs/DarklingSlime.java @@ -25,7 +25,11 @@ public DarklingSlime() { } public void updateDescription() { - this.description = this.descriptions[0] + this.passiveAmount + this.descriptions[1]; + if (this.passiveAmount > 0) { + this.description = this.descriptions[0] + this.passiveAmount + this.descriptions[1]; + } else { + this.description = this.descriptions[0] + 0 + this.descriptions[1]; + } } diff --git a/src/main/java/slimebound/orbs/DrawingSlime.java b/src/main/java/slimebound/orbs/DrawingSlime.java index b44eb7a7bd..a8999edc3d 100644 --- a/src/main/java/slimebound/orbs/DrawingSlime.java +++ b/src/main/java/slimebound/orbs/DrawingSlime.java @@ -20,16 +20,20 @@ public class DrawingSlime public DrawingSlime() { - super(ID, new Color(1.0F, 100F / 255F, 100F / 255F, 100F), atlasString, skeletonString, true, true, 3, 0, true, new Color(.45F, .58F, .58F, 1), SlimeFlareEffect.OrbFlareColor.AGGRESSIVE, new Texture("slimeboundResources/SlimeboundImages/orbs/attackBuff.png")); + 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); + //this.extraFontColor = new Color(.75F, .75F, .75F, 1F); spawnVFX(); } public void updateDescription() { - this.description = this.descriptions[0] + this.passiveAmount + this.descriptions[1] + 1 + this.descriptions[2]; - } + if (this.passiveAmount > 0) { + this.description = this.descriptions[0] + this.passiveAmount + this.descriptions[1] + 1 + this.descriptions[2]; + } else { + this.description = this.descriptions[0] + 0 + this.descriptions[1] + 1 + this.descriptions[2]; + } + } public void activateEffectUnique() { diff --git a/src/main/java/slimebound/orbs/GreedOozeSlime.java b/src/main/java/slimebound/orbs/GreedOozeSlime.java index c62e348b4a..99461576ee 100644 --- a/src/main/java/slimebound/orbs/GreedOozeSlime.java +++ b/src/main/java/slimebound/orbs/GreedOozeSlime.java @@ -39,7 +39,11 @@ public GreedOozeSlime() { } public void updateDescription() { - this.description = this.descriptions[0] + this.passiveAmount + this.descriptions[1]; + if (this.passiveAmount > 0) { + this.description = this.descriptions[0] + this.passiveAmount + this.descriptions[1]; + } else { + this.description = this.descriptions[0] + 0 + this.descriptions[1]; + } } diff --git a/src/main/java/slimebound/orbs/HexSlime.java b/src/main/java/slimebound/orbs/HexSlime.java index b9793a5ccd..c8d66c340c 100644 --- a/src/main/java/slimebound/orbs/HexSlime.java +++ b/src/main/java/slimebound/orbs/HexSlime.java @@ -55,8 +55,21 @@ public HexSlime() { public void updateDescription() { + int cool = 0; + int cool2 = 0; - this.description = this.descriptions[0] + this.passiveAmount + this.descriptions[1] + this.debuffAmount + this.descriptions[2]; + cool = this.passiveAmount; + cool2 = this.debuffAmount; + + if (cool < 0) { + cool = 0; + } + + if (cool2 < 0) { + cool2 = 0; + } + + this.description = this.descriptions[0] + cool + this.descriptions[1] + cool2 + this.descriptions[2]; } diff --git a/src/main/java/slimebound/orbs/PoisonSlime.java b/src/main/java/slimebound/orbs/PoisonSlime.java index 24d8047f79..46d611935c 100644 --- a/src/main/java/slimebound/orbs/PoisonSlime.java +++ b/src/main/java/slimebound/orbs/PoisonSlime.java @@ -28,8 +28,11 @@ public PoisonSlime(boolean topLevelVFX) { public void updateDescription() { - - this.description = this.descriptions[0] + this.passiveAmount + this.descriptions[1]; + if (this.passiveAmount > 0) { + this.description = this.descriptions[0] + this.passiveAmount + this.descriptions[1]; + } else { + this.description = this.descriptions[0] + 0 + this.descriptions[1]; + } } diff --git a/src/main/java/slimebound/orbs/ProtectorSlime.java b/src/main/java/slimebound/orbs/ProtectorSlime.java index 025886369c..7e1f603df3 100644 --- a/src/main/java/slimebound/orbs/ProtectorSlime.java +++ b/src/main/java/slimebound/orbs/ProtectorSlime.java @@ -28,7 +28,11 @@ public ProtectorSlime() { public void updateDescription() { - this.description = this.descriptions[0] + this.passiveAmount + this.descriptions[1] + (this.debuffAmount) + this.descriptions[2]; + if (this.passiveAmount > 0) { + this.description = this.descriptions[0] + this.passiveAmount + this.descriptions[1]; + } else { + this.description = this.descriptions[0] + 0 + this.descriptions[1]; + } } diff --git a/src/main/java/slimebound/orbs/ScrapOozeSlime.java b/src/main/java/slimebound/orbs/ScrapOozeSlime.java index 58fb6ece7f..44424b3a1e 100644 --- a/src/main/java/slimebound/orbs/ScrapOozeSlime.java +++ b/src/main/java/slimebound/orbs/ScrapOozeSlime.java @@ -44,7 +44,11 @@ public ScrapOozeSlime() { } public void updateDescription() { - this.description = this.descriptions[0] + this.passiveAmount + this.descriptions[1]; + if (this.passiveAmount > 0) { + this.description = this.descriptions[0] + this.passiveAmount + this.descriptions[1]; + } else { + this.description = this.descriptions[0] + 0 + this.descriptions[1]; + } } public void postSpawnEffects() { diff --git a/src/main/java/slimebound/orbs/ShieldSlime.java b/src/main/java/slimebound/orbs/ShieldSlime.java index 8ec315b864..6e7a459b19 100644 --- a/src/main/java/slimebound/orbs/ShieldSlime.java +++ b/src/main/java/slimebound/orbs/ShieldSlime.java @@ -29,9 +29,22 @@ public ShieldSlime() { public void updateDescription() { - this.description = this.descriptions[0] + this.passiveAmount + this.descriptions[1] + (this.debuffAmount) + this.descriptions[2]; - } + int cool = 0; + int cool2 = 0; + + cool = this.passiveAmount; + cool2 = this.debuffAmount; + + if (cool < 0) { + cool = 0; + } + if (cool2 < 0) { + cool2 = 0; + } + + this.description = this.descriptions[0] + cool + this.descriptions[1] + cool2 + this.descriptions[2]; + } public void activateEffectUnique() { AbstractDungeon.actionManager.addToBottom(new SlimeAutoAttack(AbstractDungeon.player, this.passiveAmount, AbstractGameAction.AttackEffect.BLUNT_LIGHT, this, false, false, false, this.debuffAmount, false,0 , false)); diff --git a/src/main/java/slimebound/orbs/SlimingSlime.java b/src/main/java/slimebound/orbs/SlimingSlime.java index 51875fbec2..0acfaea91a 100644 --- a/src/main/java/slimebound/orbs/SlimingSlime.java +++ b/src/main/java/slimebound/orbs/SlimingSlime.java @@ -33,7 +33,21 @@ public void postSpawnEffects() { } public void updateDescription() { - this.description = this.descriptions[0] + this.passiveAmount + this.descriptions[1] + (this.debuffAmount) + this.descriptions[2]; + int cool = 0; + int cool2 = 0; + + cool = this.passiveAmount; + cool2 = this.debuffAmount; + + if (cool < 0) { + cool = 0; + } + + if (cool2 < 0) { + cool2 = 0; + } + + this.description = this.descriptions[0] + cool + this.descriptions[1] + cool2 + this.descriptions[2]; } public void updateSlimedNumber() { diff --git a/src/main/java/slimebound/orbs/SlowingSlime.java b/src/main/java/slimebound/orbs/SlowingSlime.java index f63197626c..7e2bc93cf6 100644 --- a/src/main/java/slimebound/orbs/SlowingSlime.java +++ b/src/main/java/slimebound/orbs/SlowingSlime.java @@ -52,7 +52,21 @@ public void postSpawnEffects() { } public void updateDescription() { - this.description = this.descriptions[0] + this.passiveAmount + this.descriptions[1] + this.debuffAmount + this.descriptions[2]; + int cool = 0; + int cool2 = 0; + + cool = this.passiveAmount; + cool2 = this.debuffAmount; + + if (cool < 0) { + cool = 0; + } + + if (cool2 < 0) { + cool2 = 0; + } + + this.description = this.descriptions[0] + cool + this.descriptions[1] + cool2 + this.descriptions[2]; } diff --git a/src/main/java/slimebound/orbs/SpawnedSlime.java b/src/main/java/slimebound/orbs/SpawnedSlime.java index 6b83726095..e0081d9689 100644 --- a/src/main/java/slimebound/orbs/SpawnedSlime.java +++ b/src/main/java/slimebound/orbs/SpawnedSlime.java @@ -465,21 +465,35 @@ public void render(SpriteBatch sb) { public void renderText(SpriteBatch sb) { - if (this.extraFontColor != null) { + int cool = 0; + int cool2 = 0; + + cool = this.passiveAmount; + cool2 = this.debuffAmount; + + if (cool < 0) { + cool = 0; + } + + if (cool2 < 0) { + cool2 = 0; + } + + if (this.extraFontColor != null){ float fontOffset = 26 * Settings.scale; - if (this.passiveAmount > 9) fontOffset = fontOffset + (6 * Settings.scale); - FontHelper.renderFontCentered(sb, FontHelper.cardEnergyFont_L, this.passiveAmount + "/", this.cX + this.NUM_X_OFFSET, this.cY + this.NUM_Y_OFFSET, this.c, this.fontScale); + if (cool > 9) fontOffset = fontOffset + (6 * Settings.scale); + FontHelper.renderFontCentered(sb, FontHelper.cardEnergyFont_L, cool + "/", this.cX + this.NUM_X_OFFSET, this.cY + this.NUM_Y_OFFSET, this.c, this.fontScale); - FontHelper.renderFontCentered(sb, FontHelper.cardEnergyFont_L, Integer.toString(this.debuffAmount + this.slimeBonus), this.cX + this.NUM_X_OFFSET + fontOffset, this.cY + this.NUM_Y_OFFSET + 1F, this.extraFontColor, this.fontScale); + FontHelper.renderFontCentered(sb, FontHelper.cardEnergyFont_L, Integer.toString(cool2 + this.slimeBonus), this.cX + this.NUM_X_OFFSET + fontOffset, this.cY + this.NUM_Y_OFFSET + 1F, this.extraFontColor, this.fontScale); } else if (this instanceof PoisonSlime) { - FontHelper.renderFontCentered(sb, FontHelper.cardEnergyFont_L, this.passiveAmount + " All", this.cX + this.NUM_X_OFFSET - (Settings.scale * 0.01F), this.cY + this.NUM_Y_OFFSET, this.c, this.fontScale); + FontHelper.renderFontCentered(sb, FontHelper.cardEnergyFont_L, cool + " All", this.cX + this.NUM_X_OFFSET - (Settings.scale * 0.01F), this.cY + this.NUM_Y_OFFSET, this.c, this.fontScale); } else { - FontHelper.renderFontCentered(sb, FontHelper.cardEnergyFont_L, Integer.toString(this.passiveAmount), this.cX + this.NUM_X_OFFSET, this.cY + this.NUM_Y_OFFSET, this.c, this.fontScale); + FontHelper.renderFontCentered(sb, FontHelper.cardEnergyFont_L, Integer.toString(cool), this.cX + this.NUM_X_OFFSET, this.cY + this.NUM_Y_OFFSET, this.c, this.fontScale); } } diff --git a/src/main/java/slimebound/orbs/TorchHeadSlime.java b/src/main/java/slimebound/orbs/TorchHeadSlime.java index fc0b4796cb..537e443e2f 100644 --- a/src/main/java/slimebound/orbs/TorchHeadSlime.java +++ b/src/main/java/slimebound/orbs/TorchHeadSlime.java @@ -33,7 +33,11 @@ public void postSpawnEffects() { } public void updateDescription() { - this.description = this.descriptions[0] + this.passiveAmount + this.descriptions[1]; + if (this.passiveAmount > 0) { + this.description = this.descriptions[0] + this.passiveAmount + this.descriptions[1]; + } else { + this.description = this.descriptions[0] + 0 + this.descriptions[1]; + } } diff --git a/src/main/java/slimebound/potions/ThreeZeroPotion.java b/src/main/java/slimebound/potions/ThreeZeroPotion.java index dc241326e1..5d34024672 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/GoopPerTurnPower.java b/src/main/java/slimebound/powers/GoopPerTurnPower.java index 7a43d26124..610fe9509c 100644 --- a/src/main/java/slimebound/powers/GoopPerTurnPower.java +++ b/src/main/java/slimebound/powers/GoopPerTurnPower.java @@ -32,7 +32,7 @@ public GoopPerTurnPower(final AbstractCreature owner, final int amount) { this.owner = owner; 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/slimebound/powers/PotencyPower.java b/src/main/java/slimebound/powers/PotencyPower.java index 8a986ba1a6..8674ff242d 100644 --- a/src/main/java/slimebound/powers/PotencyPower.java +++ b/src/main/java/slimebound/powers/PotencyPower.java @@ -1,6 +1,7 @@ package slimebound.powers; +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; @@ -27,7 +28,7 @@ public PotencyPower(AbstractCreature owner, AbstractCreature source, int amount) this.name = NAME; this.ID = POWER_ID; - + this.canGoNegative = true; this.owner = owner; @@ -47,6 +48,14 @@ public PotencyPower(AbstractCreature owner, AbstractCreature source, int amount) } + public void stackPower(int stackAmount) { + this.fontScale = 8.0F; + this.amount += stackAmount;// 39 + if (this.amount == 0) {// 41 + this.addToTop(new RemoveSpecificPowerAction(this.owner, this.owner, this.ID));// 42 + } + }// 52 + public void updateDescription() { if(this.amount<0){ diff --git a/src/main/java/slimebound/relics/AbsorbEndCombat.java b/src/main/java/slimebound/relics/AbsorbEndCombat.java index 550fdde7fe..4a3810514b 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 241289ad0b..1d7d274e68 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/SelfDamagePreventRelic.java b/src/main/java/slimebound/relics/SelfDamagePreventRelic.java index 1ab3bbb0d2..099264c96a 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 f01a4bd8e0..41a2e6652e 100644 --- a/src/main/java/slimebound/relics/StickyStick.java +++ b/src/main/java/slimebound/relics/StickyStick.java @@ -17,50 +17,31 @@ 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.RARE, LandingSound.SOLID); + RelicTier.UNCOMMON, LandingSound.SOLID); this.largeImg = TextureLoader.getTexture(slimebound.SlimeboundMod.getResourcePath(IMG_PATH_LARGE)); } @Override public String getUpdatedDescription() { - return this.DESCRIPTIONS[0]; + return this.DESCRIPTIONS[0] + BLOCK_GAIN + DESCRIPTIONS[1]; } public void onCardDraw(AbstractCard card) { - if (this.counter == 2) { - this.grayscale = true; - return; - } - - if (this.counter < 3) { - if (card.type == AbstractCard.CardType.STATUS || card.type == AbstractCard.CardType.CURSE) { - this.flash(); - ++this.counter; - //this.addToTop(new ExhaustSpecificCardAction(card,AbstractDungeon.player.hand)); - this.addToTop(new DrawCardAction(AbstractDungeon.player, 1)); - if (card.cardID.equals(VoidCard.ID) || card.cardID.equals(IntoTheVoid.ID)) { - this.flash(); - this.addToTop(new GainEnergyAction(1)); - } - } + if (card.type == AbstractCard.CardType.STATUS || card.type == AbstractCard.CardType.CURSE) { + flash(); + addToBot(new GainBlockAction(AbstractDungeon.player, BLOCK_GAIN)); } } - public void atTurnStart() { - this.counter = 0; - this.grayscale = false; - } - - public void onVictory() { - this.counter = -1; - this.grayscale = false; - } - @Override public AbstractRelic makeCopy() { return new StickyStick(); diff --git a/src/main/java/sneckomod/OffclassHelper.java b/src/main/java/sneckomod/OffclassHelper.java index 013b592df8..8302bfceb6 100644 --- a/src/main/java/sneckomod/OffclassHelper.java +++ b/src/main/java/sneckomod/OffclassHelper.java @@ -72,7 +72,7 @@ public static void resetOffclassList() { for (AbstractCard c : CardLibrary.getAllCards()) { if (c.type != AbstractCard.CardType.STATUS && c.color != AbstractCard.CardColor.CURSE && c.type != AbstractCard.CardType.CURSE && c.rarity != AbstractCard.CardRarity.SPECIAL && !c.hasTag(AbstractCard.CardTags.STARTER_STRIKE) && !c.hasTag(AbstractCard.CardTags.STARTER_DEFEND) && !c.hasTag(AbstractCard.CardTags.HEALING) && !c.hasTag(SneckoMod.BANNEDFORSNECKO)) { - if (SneckoMod.pureSneckoMode || SneckoMod.validColors.contains(c.color) || !(AbstractDungeon.player instanceof TheSnecko)) { + if (SneckoMod.isPureSneckoModeEnabled() || SneckoMod.validColors.contains(c.color) || !(AbstractDungeon.player instanceof TheSnecko)) { if (!(AbstractDungeon.player != null && AbstractDungeon.player.getCardColor() == c.color)) { addOffclassToList(c); } diff --git a/src/main/java/sneckomod/SneckoMod.java b/src/main/java/sneckomod/SneckoMod.java index c69e46cb4d..94dd0ea33c 100644 --- a/src/main/java/sneckomod/SneckoMod.java +++ b/src/main/java/sneckomod/SneckoMod.java @@ -5,6 +5,8 @@ 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; @@ -27,10 +29,7 @@ import com.evacipated.cardcrawl.modthespire.lib.SpireInitializer; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.cards.CardGroup; -import com.megacrit.cardcrawl.cards.blue.BiasedCognition; -import com.megacrit.cardcrawl.cards.blue.GoForTheEyes; -import com.megacrit.cardcrawl.cards.blue.Hyperbeam; -import com.megacrit.cardcrawl.cards.blue.MachineLearning; +import com.megacrit.cardcrawl.cards.blue.*; import com.megacrit.cardcrawl.cards.colorless.*; import com.megacrit.cardcrawl.cards.green.*; import com.megacrit.cardcrawl.cards.purple.*; @@ -43,18 +42,14 @@ import com.megacrit.cardcrawl.events.exordium.Sssserpent; import com.megacrit.cardcrawl.helpers.CardLibrary; import com.megacrit.cardcrawl.random.Random; -import com.megacrit.cardcrawl.relics.AbstractRelic; 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.relics.BrokenWingStatue; import downfall.util.CardIgnore; import downfall.util.TextureLoader; -import expansioncontent.cards.Chronoboost; import expansioncontent.cards.DashGenerateEvil; -import expansioncontent.cards.PeekPages; import expansioncontent.cards.SuperLivingWall; import expansioncontent.patches.CardColorEnumPatch; import expansioncontent.patches.CenterGridCardSelectScreen; @@ -94,7 +89,7 @@ import java.util.function.Predicate; import static com.megacrit.cardcrawl.cards.AbstractCard.CardType.*; -import static downfall.downfallMod.sneckoNoModCharacters; +import static downfall.downfallMod.*; import static downfall.patches.EvilModeCharacterSelect.evilMode; import static sneckomod.util.ColorfulCardReward.TEXT; import static theHexaghost.HexaMod.GHOSTWHEELCARD; @@ -137,11 +132,15 @@ public class SneckoMod implements 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; + @SpireEnum + public static com.megacrit.cardcrawl.cards.AbstractCard.CardTags GIFT; 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; @@ -347,22 +346,93 @@ public static AbstractCard getOffClassCardMatchingPredicate(Predicate 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 instanceof Exhume); + possList.removeIf(c -> c instanceof Nightmare); + possList.removeIf(c -> c instanceof HandOfGreed); + possList.removeIf(c -> c instanceof Magnetism); + possList.removeIf(c -> c instanceof Discovery); possList.removeIf(c -> c.hasTag(AbstractCard.CardTags.HEALING)); } - if ((!pureSneckoMode && !AbstractDungeon.player.hasRelic(PrismaticShard.ID) && AbstractDungeon.player instanceof TheSnecko)); + if (!isPureSneckoModeEnabled() && !AbstractDungeon.player.hasRelic(PrismaticShard.ID) && AbstractDungeon.player instanceof TheSnecko) { possList.removeIf(c -> !validColors.contains(c.color)); + } + + if (AbstractDungeon.getCurrRoom().phase != AbstractRoom.RoomPhase.COMBAT) { + possList.removeIf(c -> c.hasTag(SneckoMod.GIFT)); + } 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.size() == 0) { - possList.add(new Madness()); + 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 ((!isPureSneckoModeEnabled() && !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 (AbstractDungeon.getCurrRoom().phase != AbstractRoom.RoomPhase.COMBAT) { + possList.removeIf(c -> c.hasTag(SneckoMod.GIFT)); + } + + 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 ((!isPureSneckoModeEnabled() && !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 (AbstractDungeon.getCurrRoom().phase != AbstractRoom.RoomPhase.COMBAT) { + possList.removeIf(c -> c.hasTag(SneckoMod.GIFT)); + } + + 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) { @@ -378,6 +448,8 @@ public static AbstractCard getOffClassCardMatchingPredicateDebuff(Predicate c.hasTag(AbstractCard.CardTags.HEALING)); } - if ((!pureSneckoMode && !AbstractDungeon.player.hasRelic(PrismaticShard.ID) && AbstractDungeon.player instanceof TheSnecko)); + + if (AbstractDungeon.getCurrRoom().phase != AbstractRoom.RoomPhase.COMBAT) { + possList.removeIf(c -> c.hasTag(SneckoMod.GIFT)); + } + + if ((!isPureSneckoModeEnabled() && !AbstractDungeon.player.hasRelic(PrismaticShard.ID) && AbstractDungeon.player instanceof TheSnecko)); possList.removeIf(c -> !validColors.contains(c.color)); possList.removeIf(c -> ( @@ -522,6 +619,9 @@ public static AbstractCard getOffClassCardMatchingPredicateDebuff(Predicate c.color == AbstractDungeon.player.getCardColor()); possList.removeIf(c -> c.color == CollectibleCardColorEnumPatch.CardColorPatch.COLLECTIBLE); - possList.removeIf(c -> c.color == CardColorEnumPatch.CardColorPatch.BOSS && ( - !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))); + possList.removeIf(c -> c.color == CardColorEnumPatch.CardColorPatch.BOSS); - if (possList.size() == 0) { - possList.add(new Madness()); + 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 boolean isPureSneckoModeEnabled(){ + return pureSneckoMode && ShowCharModes; + } public static AbstractCard getSpecificClassCard(AbstractCard.CardColor color) { @@ -648,12 +748,12 @@ public void receiveSetUnlocks() { OverwhelmingPresence.ID, SneckoBoss.ID, - CheapStock.ID, + SleevedAce.ID, CleanMud.ID, - GlitteringGambit.ID, + BlankCard.ID, SneckoTalon.ID, - Jackpot.ID, + RareBoosterPack.ID, TheSnecko.Enums.THE_SNECKO ); @@ -668,18 +768,6 @@ public void receiveAddAudio() { 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")) { - WidePotionsMod.whitelistSimplePotion(MuddlingPotion.POTION_ID); - WidePotionsMod.whitelistSimplePotion(CheatPotion.POTION_ID); - WidePotionsMod.whitelistSimplePotion(DiceRollPotion.POTION_ID); - WidePotionsMod.whitelistSimplePotion(OffclassReductionPotion.POTION_ID); - } } public void receivePostInitialize() { @@ -768,6 +856,7 @@ public void receivePostInitialize() { .spawnCondition(() -> (evilMode || downfallMod.contentSharing_events)) .create()); + ArrayList tmp = CardLibrary.getAllCards(); for (AbstractCard c : tmp) { if (c.type == AbstractCard.CardType.STATUS && !(c.hasTag(AutomatonMod.GOOD_STATUS))) { @@ -789,7 +878,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(); @@ -797,7 +886,7 @@ public static void resetUnknownsLists() { @Override public void receiveStartGame() { - if (!CardCrawlGame.loadingSave || (validColors.isEmpty() && !pureSneckoMode)) { + if (!CardCrawlGame.loadingSave || (validColors.isEmpty() && !isPureSneckoModeEnabled())) { openedStarterScreen = false; validColors = new ArrayList<>(); } @@ -834,7 +923,7 @@ public static AbstractCard playerStartCardForEventFromColor(AbstractCard.CardCol } public static void findAWayToTriggerThisAtGameStart() { - if (AbstractDungeon.player instanceof TheSnecko && !pureSneckoMode) { + if (AbstractDungeon.player instanceof TheSnecko && !isPureSneckoModeEnabled()) { validColors.clear(); choosingCharacters = 0; colorChoices = new CardGroup(CardGroup.CardGroupType.UNSPECIFIED); @@ -877,7 +966,7 @@ public void receivePostUpdate() { SneckoMod.openedStarterScreen = true; } } - if (SneckoMod.choosingCharacters > -1 && SneckoMod.choosingCharacters <= 2 && !AbstractDungeon.gridSelectScreen.selectedCards.isEmpty() && !pureSneckoMode) { + if (SneckoMod.choosingCharacters > -1 && SneckoMod.choosingCharacters <= 2 && !AbstractDungeon.gridSelectScreen.selectedCards.isEmpty() && !isPureSneckoModeEnabled()) { AbstractCard c = AbstractDungeon.gridSelectScreen.selectedCards.get(0); SneckoMod.colorChoices.removeCard(c); SneckoMod.validColors.add(c.color); diff --git a/src/main/java/sneckomod/actions/AceOfWandsAction.java b/src/main/java/sneckomod/actions/AceOfWandsAction.java index 4acb666a38..7db24d66a6 100644 --- a/src/main/java/sneckomod/actions/AceOfWandsAction.java +++ b/src/main/java/sneckomod/actions/AceOfWandsAction.java @@ -11,6 +11,8 @@ 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 { @@ -31,7 +33,9 @@ public void update() { if (AbstractDungeon.player.hasPower(WaveOfTheHandPower.POWER_ID)) { WaveOfTheHandPatch.isActive = 1; } - this.addToTop(new GainBlockAction(p, p, amount)); + if (AbstractDungeon.player.hasPower(AceOfWandsPower.POWER_ID)) { + this.addToTop(new GainBlockAction(p, p, amount)); + } this.isDone = true; this.tickDuration(); } diff --git a/src/main/java/sneckomod/actions/BabySneckoAttackAction.java b/src/main/java/sneckomod/actions/BabySneckoAttackAction.java index c890c21d5c..d0c319b8bf 100644 --- a/src/main/java/sneckomod/actions/BabySneckoAttackAction.java +++ b/src/main/java/sneckomod/actions/BabySneckoAttackAction.java @@ -19,8 +19,12 @@ public BabySneckoAttackAction(AbstractMonster m, BabySnecko b) { @Override public void update() { - this.b.baby.state.setAnimation(0, "boop", false); - this.b.baby.state.addAnimation(0, "idle", true, 0.0f); + if (b != null) { + if (b.baby != null) { + 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, 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 index 01a5cbeb4f..281445f4c7 100644 --- a/src/main/java/sneckomod/actions/BabySneckoMuddleAction.java +++ b/src/main/java/sneckomod/actions/BabySneckoMuddleAction.java @@ -14,28 +14,25 @@ public class BabySneckoMuddleAction extends AbstractGameAction { public void update () { ArrayList validCards = new ArrayList<>(); - // filter valid cards based on cost and tags 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; // Skip invalid cards + continue; } System.out.println("DEBUG: Card found valid, costs: " + card.costForTurn); validCards.add(card); } - // if there are valid cards, muddle two at random if (!validCards.isEmpty()) { - // if there's only one valid card, still muddle it int cardsToPick = Math.min(2, validCards.size()); ArrayList chosenCards = new ArrayList<>(); for (int i = 0; i < cardsToPick; i++) { - AbstractCard randomCard = validCards.get(AbstractDungeon.cardRandomRng.random(validCards.size() - 1)); + 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); // Avoid selecting the same card again + validCards.remove(randomCard); chosenCards.add(randomCard); } } diff --git a/src/main/java/sneckomod/actions/DrawOffclassAction.java b/src/main/java/sneckomod/actions/DrawOffclassAction.java new file mode 100644 index 0000000000..74352eaedd --- /dev/null +++ b/src/main/java/sneckomod/actions/DrawOffclassAction.java @@ -0,0 +1,47 @@ +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())); + + tmp.shuffle(); + + for (AbstractCard c : tmp.group) { + if (Wiz.hand().size() < BaseMod.MAX_HAND_SIZE) { + addToBot(new FetchAction(Wiz.p().drawPile, card -> card == c)); + count++; + if (count >= draw) break; + } + } + isDone = true; + } +} \ No newline at end of file diff --git a/src/main/java/sneckomod/actions/MuddleAction.java b/src/main/java/sneckomod/actions/MuddleAction.java index aa4ba3cca9..b2f42b62da 100644 --- a/src/main/java/sneckomod/actions/MuddleAction.java +++ b/src/main/java/sneckomod/actions/MuddleAction.java @@ -103,17 +103,8 @@ public void update() { card.setCostForTurn(truecost); } - if (AbstractDungeon.player.hasPower(BlunderGuardPower.POWER_ID)){ - if ((card.costForTurn == 3)) { - AbstractDungeon.player.getPower(BlunderGuardPower.POWER_ID).onSpecificTrigger(); - } - } - LoadedDie loadedDieInstance = new LoadedDie(); if (AbstractDungeon.player.hasRelic(LoadedDie.ID)) { - addToBot(new GainBlockAction(AbstractDungeon.player, 1)); - loadedDieInstance.flash(); - this.addToTop(new RelicAboveCreatureAction(AbstractDungeon.player, loadedDieInstance)); AbstractDungeon.player.getRelic(LoadedDie.ID).onTrigger(); } diff --git a/src/main/java/sneckomod/actions/MuddleHandAction.java b/src/main/java/sneckomod/actions/MuddleHandAction.java index e5af17fc4a..f542c7549c 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 index 3a84634d8d..ccbfe7705d 100644 --- a/src/main/java/sneckomod/actions/MuddleMarkedAction.java +++ b/src/main/java/sneckomod/actions/MuddleMarkedAction.java @@ -43,10 +43,7 @@ public void update() { AbstractDungeon.player.getPower(MudshieldPower.POWER_ID).onSpecificTrigger(); } - LoadedDie loadedDieInstance = new LoadedDie(); if (AbstractDungeon.player.hasRelic(LoadedDie.ID)) { - addToBot(new GainBlockAction(AbstractDungeon.player, 1)); - loadedDieInstance.flash(); AbstractDungeon.player.getRelic(LoadedDie.ID).onTrigger(); } diff --git a/src/main/java/sneckomod/actions/NopeAction.java b/src/main/java/sneckomod/actions/NopeAction.java index 96dc964998..ec73926e74 100644 --- a/src/main/java/sneckomod/actions/NopeAction.java +++ b/src/main/java/sneckomod/actions/NopeAction.java @@ -47,7 +47,7 @@ public void update() { continue; } - p.hand.moveToExhaustPile(c); + //p.hand.moveToExhaustPile(c); AbstractCard card = SneckoMod.getSpecificClassCard(c.color); this.addToBot(new MakeTempCardInHandAction(card)); } diff --git a/src/main/java/sneckomod/actions/PlayTyphoonAction.java b/src/main/java/sneckomod/actions/PlayTyphoonAction.java new file mode 100644 index 0000000000..9cf0be96ea --- /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/SerpentIdolAction.java b/src/main/java/sneckomod/actions/SerpentIdolAction.java index fcce09eea8..c7164edb9d 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/SuperSneckoSoulAction.java b/src/main/java/sneckomod/actions/SuperSneckoSoulAction.java index 003a51c5ad..dc232e37cc 100644 --- a/src/main/java/sneckomod/actions/SuperSneckoSoulAction.java +++ b/src/main/java/sneckomod/actions/SuperSneckoSoulAction.java @@ -5,6 +5,7 @@ import com.megacrit.cardcrawl.actions.common.DrawCardAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import hermit.util.Wiz; import sneckomod.actions.MuddleAction; public class SuperSneckoSoulAction extends AbstractGameAction { @@ -14,21 +15,16 @@ public SuperSneckoSoulAction() { @Override public void update() { - // Check if the player's hand size is below the maximum hand size if (AbstractDungeon.player.hand.size() < BaseMod.MAX_HAND_SIZE) { - addToBot(new DrawCardAction(1, new AbstractGameAction() { + Wiz.atb(new DrawCardAction(1, new AbstractGameAction() { @Override public void update() { - // Ensure there is a card in hand to muddle - if (AbstractDungeon.player.hand.size() > 0) { - AbstractCard drawnCard = AbstractDungeon.player.hand.getTopCard(); - addToTop(new MuddleAction(drawnCard)); // Muddle the drawn card - } + for (AbstractCard c: DrawCardAction.drawnCards) + Wiz.att(new MuddleAction(c)); 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 3def4804eb..6421016f75 100644 --- a/src/main/java/sneckomod/cards/AbstractSneckoCard.java +++ b/src/main/java/sneckomod/cards/AbstractSneckoCard.java @@ -30,8 +30,7 @@ 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 implements OnObtainCard { @@ -296,32 +295,29 @@ public List getCustomTooltips() { } - public boolean isOverflowActive(AbstractCard source) { // Adjusted to take a card parameter - boolean OVERFLOW = false; // Reset overflow state + public boolean isOverflowActive(AbstractCard source) { + boolean OVERFLOW = false; - // Only check for overflow if the card has the OVERFLOW tag if (source.hasTag(SneckoMod.OVERFLOW)) { - // Check if there are more than 5 cards in hand if (AbstractDungeon.player.hand.size() > 5 || (AbstractDungeon.player.hasPower(CheatPower.POWER_ID))) { OVERFLOW = true; } - // If the card purges on use, immediately return false - if ((source instanceof TyphoonFang && source.purgeOnUse)) { - return false; // If the card purges on use, it cannot cause overflow + if (source.hasTag(NO_TYPHOON)) { + return false; } - // Check for the D8 relic 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; // Set overflow if the D8 card is the same as the source card + OVERFLOW = true; } } } } - return OVERFLOW; // Return true or false + + return OVERFLOW; } diff --git a/src/main/java/sneckomod/cards/AceOfWands.java b/src/main/java/sneckomod/cards/AceOfWands.java index 0702792855..adb8d5a9ed 100644 --- a/src/main/java/sneckomod/cards/AceOfWands.java +++ b/src/main/java/sneckomod/cards/AceOfWands.java @@ -38,6 +38,7 @@ public AceOfWands() { super(ID, 3, CardType.POWER, CardRarity.RARE, CardTarget.SELF); baseMagicNumber = magicNumber = 4; isEthereal = true; + this.tags.add(SneckoMod.GIFT); SneckoMod.loadJokeCardImage(this, "AceOfWands.png"); } diff --git a/src/main/java/sneckomod/cards/Amass.java b/src/main/java/sneckomod/cards/Amass.java index 8c37cd2581..ec8f109f0b 100644 --- a/src/main/java/sneckomod/cards/Amass.java +++ b/src/main/java/sneckomod/cards/Amass.java @@ -10,8 +10,8 @@ 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 COST = 2; + private static final int BASE_BLOCK = 9; private static final int MAGIC = 1; private static final int UPGRADE_MAGIC = 1; @@ -32,17 +32,14 @@ public void use(AbstractPlayer p, AbstractMonster m) { public void applyPowers() { int realBaseBlock = this.baseBlock; - // Calculate total energy cost of cards in hand int totalEnergyCost = 0; for (AbstractCard card : AbstractDungeon.player.hand.group) { totalEnergyCost += card.costForTurn; } - // Increase baseBlock by (total energy cost * magicNumber) this.baseBlock += totalEnergyCost * this.magicNumber; super.applyPowers(); - // Reset baseBlock to avoid permanent modification this.baseBlock = realBaseBlock; this.isBlockModified = this.block != this.baseBlock; } @@ -51,17 +48,14 @@ public void applyPowers() { public void calculateCardDamage(AbstractMonster mo) { int realBaseBlock = this.baseBlock; - // Calculate total energy cost of cards in hand int totalEnergyCost = 0; for (AbstractCard card : AbstractDungeon.player.hand.group) { totalEnergyCost += card.costForTurn; } - // Increase baseBlock by (total energy cost * magicNumber) this.baseBlock += totalEnergyCost * this.magicNumber; super.calculateCardDamage(mo); - // Reset baseBlock to avoid permanent modification this.baseBlock = realBaseBlock; this.isBlockModified = this.block != this.baseBlock; } @@ -70,10 +64,7 @@ public void calculateCardDamage(AbstractMonster mo) { public void upgrade() { if (!upgraded) { upgradeName(); - upgradeBlock(4); - // upgradeMagicNumber(UPGRADE_MAGIC); - // rawDescription = UPGRADE_DESCRIPTION; - // initializeDescription(); + upgradeBlock(3); } } } diff --git a/src/main/java/sneckomod/cards/Belittle.java b/src/main/java/sneckomod/cards/Belittle.java index db3511e47c..315ecb8f1c 100644 --- a/src/main/java/sneckomod/cards/Belittle.java +++ b/src/main/java/sneckomod/cards/Belittle.java @@ -42,6 +42,7 @@ public class Belittle extends AbstractSneckoCard implements OnObtainCard { public Belittle() { super(ID, 1, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.ENEMY); baseMagicNumber = magicNumber = MAGIC; + this.tags.add(SneckoMod.GIFT); SneckoMod.loadJokeCardImage(this, "Belittle.png"); } diff --git a/src/main/java/sneckomod/cards/BeyondArmor.java b/src/main/java/sneckomod/cards/BeyondArmor.java index 30da15cac9..68b18a0cd3 100644 --- a/src/main/java/sneckomod/cards/BeyondArmor.java +++ b/src/main/java/sneckomod/cards/BeyondArmor.java @@ -2,6 +2,7 @@ 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; @@ -15,6 +16,7 @@ import hermit.relics.Spyglass; import hermit.util.Wiz; import sneckomod.SneckoMod; +import sneckomod.actions.DrawOffclassAction; import sneckomod.relics.UnknownEgg; import java.util.ArrayList; @@ -33,6 +35,7 @@ public BeyondArmor() { super(ID, 1, CardType.SKILL, CardRarity.COMMON, CardTarget.SELF); baseBlock = BLOCK; magicNumber = baseMagicNumber = MAGIC; + this.tags.add(SneckoMod.GIFT); SneckoMod.loadJokeCardImage(this, "BeyondArmor.png"); } @@ -53,23 +56,7 @@ public static boolean cardListDuplicate(ArrayList cardsList, Abstr public void use(AbstractPlayer p, AbstractMonster m) { addToBot(new GainBlockAction(p, p, this.block)); - - 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 != this.color) - .limit(magicNumber) - .collect(Collectors.toList())); - - for (AbstractCard c : tmp.group) { - if (Wiz.hand().size() < BaseMod.MAX_HAND_SIZE) { - addToBot(new FetchAction(Wiz.p().drawPile, card -> card == c)); - count++; - if (count >= magicNumber) break; - } - } + this.addToBot(new DrawOffclassAction(magicNumber)); } @Override @@ -84,7 +71,7 @@ public void onObtainCard() { if (!cardListDuplicate(cardsToReward, newCard)) { SOFTLOCK = 0; - cardsToReward.add(newCard.makeCopy()); // Use makeCopy() to ensure a new instance + cardsToReward.add(newCard.makeCopy()); } } SneckoMod.addGift(cardsToReward); diff --git a/src/main/java/sneckomod/cards/BlunderGuard.java b/src/main/java/sneckomod/cards/BlunderGuard.java index 368408318b..82be8a3437 100644 --- a/src/main/java/sneckomod/cards/BlunderGuard.java +++ b/src/main/java/sneckomod/cards/BlunderGuard.java @@ -26,7 +26,6 @@ public BlunderGuard() { public void use(AbstractPlayer p, AbstractMonster m) { applyToSelf(new BigGunsBlockPower(this.silly)); applyToSelf(new BigGunsStrengthPower(this.magicNumber)); - // atb(new GainEnergyAction(1)); } public void upgrade() { diff --git a/src/main/java/sneckomod/cards/Blunderbus.java b/src/main/java/sneckomod/cards/Blunderbus.java index 08fba5ee1b..9ead30c247 100644 --- a/src/main/java/sneckomod/cards/Blunderbus.java +++ b/src/main/java/sneckomod/cards/Blunderbus.java @@ -41,8 +41,6 @@ public Blunderbus() { super(ID, 1, CardType.ATTACK, CardRarity.RARE, CardTarget.ALL_ENEMY); baseDamage = DAMAGE; SneckoMod.loadJokeCardImage(this, "Blunderbus.png"); - - // Initialize multiDamage for all enemies isMultiDamage = true; } diff --git a/src/main/java/sneckomod/cards/CobraCoil.java b/src/main/java/sneckomod/cards/CobraCoil.java index 3a58a791b3..d11b80891f 100644 --- a/src/main/java/sneckomod/cards/CobraCoil.java +++ b/src/main/java/sneckomod/cards/CobraCoil.java @@ -32,6 +32,7 @@ public CobraCoil() { super(ID, COST, AbstractCard.CardType.ATTACK, AbstractCard.CardRarity.RARE, AbstractCard.CardTarget.ENEMY); baseDamage = DAMAGE; baseMagicNumber = magicNumber = MAGIC; + this.tags.add(SneckoMod.GIFT); SneckoMod.loadJokeCardImage(this, "CobraCoil.png"); } diff --git a/src/main/java/sneckomod/cards/ComboString.java b/src/main/java/sneckomod/cards/ComboString.java index 61c6e8c925..c47c92b4f0 100644 --- a/src/main/java/sneckomod/cards/ComboString.java +++ b/src/main/java/sneckomod/cards/ComboString.java @@ -30,6 +30,7 @@ public class ComboString extends AbstractSneckoCard { public ComboString() { super(ID, COST, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); baseDamage = DAMAGE; + this.tags.add(SneckoMod.GIFT); SneckoMod.loadJokeCardImage(this, "ComboString.png"); } diff --git a/src/main/java/sneckomod/cards/CrystalBoomerang.java b/src/main/java/sneckomod/cards/CrystalBoomerang.java index 0a676eb046..3c536264fc 100644 --- a/src/main/java/sneckomod/cards/CrystalBoomerang.java +++ b/src/main/java/sneckomod/cards/CrystalBoomerang.java @@ -1,11 +1,13 @@ package sneckomod.cards; +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.core.CardCrawlGame; import com.megacrit.cardcrawl.monsters.AbstractMonster; import downfall.util.SelectCardsCenteredAction; +import hermit.util.Wiz; import sneckomod.SneckoMod; public class CrystalBoomerang extends AbstractSneckoCard { @@ -35,14 +37,15 @@ public void use(AbstractPlayer p, AbstractMonster m) { (selectedCards) -> { AbstractCard selecteda = selectedCards.get(0); - p.discardPile.removeCard(selecteda); - p.hand.addToHand(selecteda); - selecteda.lighten(false); - selecteda.unhover(); - selecteda.applyPowers(); - + if (Wiz.hand().size() < BaseMod.MAX_HAND_SIZE) { + p.discardPile.removeCard(selecteda); + p.hand.addToHand(selecteda); + selecteda.lighten(false); + selecteda.unhover(); + selecteda.applyPowers(); + } if (selecteda.color != p.getCardColor()) { - this.addToTop(new GainBlockAction(p, p, this.block)); + blck(); } } )); diff --git a/src/main/java/sneckomod/cards/DangerNoodle.java b/src/main/java/sneckomod/cards/DangerNoodle.java index af452cb26c..a6ebec6111 100644 --- a/src/main/java/sneckomod/cards/DangerNoodle.java +++ b/src/main/java/sneckomod/cards/DangerNoodle.java @@ -6,6 +6,7 @@ import com.megacrit.cardcrawl.actions.AbstractGameAction; 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.monsters.AbstractMonster; import com.megacrit.cardcrawl.relics.AbstractRelic; @@ -30,6 +31,7 @@ public class DangerNoodle extends AbstractSneckoCard implements OnObtainCard { public DangerNoodle() { super(ID, 1, CardType.ATTACK, CardRarity.RARE, CardTarget.ENEMY); baseDamage = DAMAGE; + this.tags.add(SneckoMod.GIFT); SneckoMod.loadJokeCardImage(this, "DangerNoodle.png"); } @@ -50,7 +52,13 @@ public static boolean cardListDuplicate(ArrayList cardsList, Abstr public void use(AbstractPlayer p, AbstractMonster m) { dmg(m, makeInfo(), AbstractGameAction.AttackEffect.BLUNT_HEAVY); - addToBot(new SelectCardsInHandAction(1, BaseMod.getKeywordProper("sneckomod:muddle"), + String stuff; + if(Settings.language == Settings.GameLanguage.DEU){ + stuff = "irrst"; + } else { + stuff = BaseMod.getKeywordProper("sneckomod:muddle"); + } + addToBot(new SelectCardsInHandAction(1, stuff, (AbstractCard c) -> true, (cards) -> { for (AbstractCard card : cards) { diff --git a/src/main/java/sneckomod/cards/Deception.java b/src/main/java/sneckomod/cards/Deception.java index b20a619444..8c43d443e0 100644 --- a/src/main/java/sneckomod/cards/Deception.java +++ b/src/main/java/sneckomod/cards/Deception.java @@ -14,7 +14,7 @@ public class Deception extends AbstractSneckoCard { //this is definitely one of the cards of all time - blue - private static final int BLOCK = 14; + private static final int BLOCK = 11; private static final int UPG_BLOCK = 4; private static final int MAGIC = 1; @@ -37,7 +37,6 @@ public void upgrade() { if (!upgraded) { upgradeName(); upgradeBlock(UPG_BLOCK); - upgradeMagicNumber(UPG_MAGIC); } } } \ 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 86e18ebfc1..86df53ad37 100644 --- a/src/main/java/sneckomod/cards/DefensiveFlair.java +++ b/src/main/java/sneckomod/cards/DefensiveFlair.java @@ -31,6 +31,7 @@ public DefensiveFlair() { super(ID, 1, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); baseBlock = BLOCK; baseMagicNumber = magicNumber = MAGIC; + this.tags.add(SneckoMod.GIFT); SneckoMod.loadJokeCardImage(this, "DefensiveFlair.png"); } diff --git a/src/main/java/sneckomod/cards/GlitteringGambit.java b/src/main/java/sneckomod/cards/GlitteringGambit.java index 7d35e691f7..80cfaa5129 100644 --- a/src/main/java/sneckomod/cards/GlitteringGambit.java +++ b/src/main/java/sneckomod/cards/GlitteringGambit.java @@ -2,9 +2,14 @@ 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; @@ -22,6 +27,7 @@ public GlitteringGambit() { isEthereal = false; tags.add(CardTags.HEALING); tags.add(expansionContentMod.UNPLAYABLE); + this.tags.add(SneckoMod.GIFT); SneckoMod.loadJokeCardImage(this, "GlitteringGambit.png"); SoulboundField.soulbound.set(this, true); } @@ -71,6 +77,10 @@ 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) { diff --git a/src/main/java/sneckomod/cards/ImmovableObject.java b/src/main/java/sneckomod/cards/ImmovableObject.java index 9ee209f162..5b9ac1765f 100644 --- a/src/main/java/sneckomod/cards/ImmovableObject.java +++ b/src/main/java/sneckomod/cards/ImmovableObject.java @@ -46,7 +46,7 @@ public void update() { isDone = true; } }); - addToBot(new ExhaustSpecificCardAction(this, p.hand)); // Exhaust this card + addToBot(new ExhaustSpecificCardAction(this, p.hand)); } } diff --git a/src/main/java/sneckomod/cards/InertBlade.java b/src/main/java/sneckomod/cards/InertBlade.java index 05fead4f61..d08bcb958a 100644 --- a/src/main/java/sneckomod/cards/InertBlade.java +++ b/src/main/java/sneckomod/cards/InertBlade.java @@ -37,16 +37,16 @@ public InertBlade() { @Override public void use(AbstractPlayer p, AbstractMonster m) { addToBot(new DamageAction(m, new DamageInfo(p, damage, damageTypeForTurn), AbstractGameAction.AttackEffect.SLASH_HEAVY)); - - // Check the card's costForTurn and apply conditional effects - 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)); + 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)); + } } } diff --git a/src/main/java/sneckomod/cards/Lacerate.java b/src/main/java/sneckomod/cards/Lacerate.java index 21aec88f14..35dfdc74c3 100644 --- a/src/main/java/sneckomod/cards/Lacerate.java +++ b/src/main/java/sneckomod/cards/Lacerate.java @@ -1,68 +1,58 @@ package sneckomod.cards; -import champ.cards.Strike; -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.MakeTempCardInHandAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.cards.green.CripplingPoison; 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.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.cardManip.ShowCardAndObtainEffect; import sneckomod.SneckoMod; -import sneckomod.powers.LacerateDebuff; -import sneckomod.relics.UnknownEgg; - -import java.util.ArrayList; +import sneckomod.powers.VenomDebuff; public class Lacerate extends AbstractSneckoCard { public static final String ID = SneckoMod.makeID("Lacerate"); - private static final int DAMAGE = 11; - private static final int COST = 1; - private static final int UPGRADE_MAGIC = 1; - private static final int MAGIC = 3; + 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.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); - baseDamage = DAMAGE; + super(ID, COST, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.ALL_ENEMY); + //baseDamage = DAMAGE; baseMagicNumber = magicNumber = MAGIC; this.cardsToPreview = new CripplingPoison(); + this.exhaust = true; SneckoMod.loadJokeCardImage(this, "Lacerate.png"); } @Override public void use(AbstractPlayer p, AbstractMonster m) { - addToBot(new DamageAction(m, makeInfo(), AbstractGameAction.AttackEffect.SLASH_VERTICAL)); - addToBot(new ApplyPowerAction(m, p, new LacerateDebuff(m, magicNumber), magicNumber)); - } - - @Override - public void onObtainCard() { - ArrayList cardsToReward = new ArrayList<>(); - AbstractCard r = new CripplingPoison(); - - for (AbstractRelic relic : AbstractDungeon.player.relics) { - relic.onPreviewObtainCard(r); + 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)); + } } - - cardsToReward.add(r.makeCopy()); - SneckoMod.addGift(cardsToReward); } - + AbstractCard g = new CripplingPoison(); + if (this.upgraded) { + g.upgrade(); + } + AbstractDungeon.actionManager.addToBottom(new MakeTempCardInHandAction(g)); + } @Override public void upgrade() { if (!upgraded) { upgradeName(); - upgradeMagicNumber(UPGRADE_MAGIC); + AbstractCard q = new CripplingPoison(); + q.upgrade(); + cardsToPreview = q; + rawDescription = UPGRADE_DESCRIPTION; + initializeDescription(); } } } diff --git a/src/main/java/sneckomod/cards/LaserEyes.java b/src/main/java/sneckomod/cards/LaserEyes.java index fd6164e1d9..61987386fb 100644 --- a/src/main/java/sneckomod/cards/LaserEyes.java +++ b/src/main/java/sneckomod/cards/LaserEyes.java @@ -39,7 +39,7 @@ public void use(AbstractPlayer p, AbstractMonster m) { public void upgrade() { if (!upgraded) { upgradeName(); - upgradeDamage(UPGRADE_DAMAGE); // Increase base damage by 5 (to 20) + upgradeDamage(UPGRADE_DAMAGE); } } } diff --git a/src/main/java/sneckomod/cards/LastStrike.java b/src/main/java/sneckomod/cards/LastStrike.java index ce39a1a383..eeecb81340 100644 --- a/src/main/java/sneckomod/cards/LastStrike.java +++ b/src/main/java/sneckomod/cards/LastStrike.java @@ -25,7 +25,7 @@ public class LastStrike extends AbstractSneckoCard { public static final String ID = SneckoMod.makeID("LastStrike"); // Constants - private static final int BASE_DAMAGE = 9; + private static final int BASE_DAMAGE = 6; private static final int UPGRADE_DAMAGE = 3; private static int SOFTLOCK = 0; @@ -38,7 +38,7 @@ public LastStrike() { baseDamage = BASE_DAMAGE; tags.add(CardTags.STRIKE); SneckoMod.loadJokeCardImage(this, "LastStrike.png"); - + this.tags.add(SneckoMod.GIFT); resetMultiplierTracking(); } @@ -54,16 +54,13 @@ public void atBattleStart() { @Override public void use(AbstractPlayer p, AbstractMonster m) { - // Calculate multiplier for this use int uniqueStrikesCount = calculateDamageMultiplier(!hasPlayedOnce); - // Apply damage based on multiplier 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)); } - // Track LastStrike after first play to exclude itself in future calculations if (!hasPlayedOnce) { uniqueStrikeIDs.add(this.cardID); hasPlayedOnce = true; @@ -75,18 +72,12 @@ public void use(AbstractPlayer p, AbstractMonster m) { @Override public void applyPowers() { super.applyPowers(); - - // Calculate the multiplier without including this card if not yet played int uniqueStrikesCount = calculateDamageMultiplier(!hasPlayedOnce); - - // Update the description to show the multiplier dynamically updateDescription(uniqueStrikesCount); } private int calculateDamageMultiplier(boolean excludeThisCard) { uniqueStrikeIDs.clear(); - - // Track unique Strike cards played this combat for (AbstractCard card : AbstractDungeon.actionManager.cardsPlayedThisCombat) { if (card.hasTag(CardTags.STRIKE) && (!excludeThisCard || card != this)) { @@ -103,7 +94,7 @@ private void updateDescription(int uniqueStrikesCount) { @Override public void onMoveToDiscard() { - if(upgraded){ + if (upgraded) { this.rawDescription = cardStrings.UPGRADE_DESCRIPTION; } else { diff --git a/src/main/java/sneckomod/cards/LilGuardian.java b/src/main/java/sneckomod/cards/LilGuardian.java index 24d91849c4..8817e3e2a2 100644 --- a/src/main/java/sneckomod/cards/LilGuardian.java +++ b/src/main/java/sneckomod/cards/LilGuardian.java @@ -1,11 +1,12 @@ 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 com.megacrit.cardcrawl.ui.panels.EnergyPanel; import sneckomod.SneckoMod; public class LilGuardian extends AbstractSneckoCard { @@ -28,9 +29,8 @@ public void use(AbstractPlayer p, AbstractMonster m) { @Override public void triggerOnCardPlayed(AbstractCard card) { - if (card.costForTurn >= 2 && AbstractDungeon.player.hand.contains(this)) { - addToBot(new GainBlockAction(AbstractDungeon.player, AbstractDungeon.player, block)); - addToBot(new DiscardSpecificCardAction(this, AbstractDungeon.player.hand)); + if (AbstractDungeon.player.hand.contains(this) && card.costForTurn >= 2) { + AbstractDungeon.actionManager.cardQueue.add(new CardQueueItem(this, true, EnergyPanel.getCurrentEnergy(), true, true)); } } diff --git a/src/main/java/sneckomod/cards/LuckyBreak.java b/src/main/java/sneckomod/cards/LuckyBreak.java index 93ebe3602a..7453d5d4fd 100644 --- a/src/main/java/sneckomod/cards/LuckyBreak.java +++ b/src/main/java/sneckomod/cards/LuckyBreak.java @@ -18,7 +18,6 @@ public class LuckyBreak extends AbstractSneckoCard { private static final int UPG_BLOCK = 3; private static final int MAGIC = 1; - // private static final int UPG_MAGIC = 1; private static final int BASE_DRAW = 0; public LuckyBreak() { @@ -49,7 +48,6 @@ public void upgrade() { if (!upgraded) { upgradeName(); upgradeBlock(UPG_BLOCK); - // upgradeMagicNumber(UPG_MAGIC); } } } \ No newline at end of file diff --git a/src/main/java/sneckomod/cards/MakeshiftBlade.java b/src/main/java/sneckomod/cards/MakeshiftBlade.java index 45d0e3522e..35b0ba0a82 100644 --- a/src/main/java/sneckomod/cards/MakeshiftBlade.java +++ b/src/main/java/sneckomod/cards/MakeshiftBlade.java @@ -34,10 +34,9 @@ public class MakeshiftBlade extends AbstractSneckoCard { public static final String ID = SneckoMod.makeID("MakeshiftBlade"); // Card constants - private static final int DAMAGE = 12; + private static final int DAMAGE = 9; private static final int COST = 1; - private static final int MAGIC = 3; // Initial debuff requirement - private static final int UPGRADE_MAGIC = -1; // Reduces debuff requirement by 1 + private static final int MAGIC = 3; private static int SOFTLOCK = 0; @@ -46,6 +45,7 @@ public MakeshiftBlade() { baseDamage = DAMAGE; baseMagicNumber = magicNumber = MAGIC; baseSilly = silly = 3; + this.tags.add(SneckoMod.GIFT); SneckoMod.loadJokeCardImage(this, "MakeshiftBlade.png"); } @@ -101,7 +101,6 @@ public void onObtainCard() { public void upgrade() { if (!upgraded) { upgradeName(); - upgradeMagicNumber(UPGRADE_MAGIC); upgradeDamage(4); } } diff --git a/src/main/java/sneckomod/cards/MarkedCard.java b/src/main/java/sneckomod/cards/MarkedCard.java index 777018cd8c..8ee40deed5 100644 --- a/src/main/java/sneckomod/cards/MarkedCard.java +++ b/src/main/java/sneckomod/cards/MarkedCard.java @@ -4,6 +4,7 @@ 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.core.Settings; import com.megacrit.cardcrawl.monsters.AbstractMonster; import downfall.downfallMod; import sneckomod.SneckoMod; @@ -21,12 +22,17 @@ 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"), + String stuff; + if(Settings.language == Settings.GameLanguage.DEU){ + stuff = "irrst"; + } else { + stuff = BaseMod.getKeywordProper("sneckomod:muddle"); + } + addToBot(new SelectCardsInHandAction(magicNumber, stuff, (AbstractCard c) -> true, (cards) -> { for (AbstractCard card : cards) { @@ -36,15 +42,11 @@ public void use(AbstractPlayer p, AbstractMonster m) { )); } - // public void upgradeAction(AbstractPlayer p, AbstractMonster m){ - // AbstractDungeon.actionManager.addToBottom(new DrawCardAction(p, 1)); - // } - public void upgrade() { if (!upgraded) { upgradeName(); - upgradeMagicNumber(1); rawDescription = UPGRADE_DESCRIPTION; + this.selfRetain = true; initializeDescription(); } } diff --git a/src/main/java/sneckomod/cards/Medusa.java b/src/main/java/sneckomod/cards/Medusa.java index 56105dbd97..600dc25df8 100644 --- a/src/main/java/sneckomod/cards/Medusa.java +++ b/src/main/java/sneckomod/cards/Medusa.java @@ -1,29 +1,16 @@ package sneckomod.cards; -import automaton.cards.Undervolt; -import collector.cards.CursedWail; 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.cards.green.Choke; -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 hermit.cards.HighCaliber; import sneckomod.SneckoMod; -import sneckomod.powers.LacerateDebuff; -import sneckomod.powers.ToxicPersonalityPower; import sneckomod.powers.VenomDebuff; -import sneckomod.relics.UnknownEgg; import java.util.ArrayList; @@ -31,9 +18,9 @@ public class Medusa extends AbstractSneckoCard { public static final String ID = SneckoMod.makeID("Medusa"); - private static final int DAMAGE = 6; + private static final int DAMAGE = 7; private static final int UPG_DAMAGE = 2; - private static final int MAGIC = 3; + private static final int MAGIC = 2; private static final int UPG_MAGIC = 1; private static int SOFTLOCK = 0; @@ -41,6 +28,7 @@ public Medusa() { super(ID, 1, CardType.ATTACK, CardRarity.COMMON, CardTarget.ENEMY); baseDamage = DAMAGE; baseMagicNumber = magicNumber = MAGIC; + this.tags.add(SneckoMod.GIFT); SneckoMod.loadJokeCardImage(this, "Medusa.png"); } @@ -60,35 +48,8 @@ public static boolean cardListDuplicate(ArrayList cardsList, Abstr @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)); - - // Check if the target has LacerateDebuff and apply additional Venom equal to its amount - if (m.hasPower(LacerateDebuff.POWER_ID) && !m.hasPower("Artifact")) { - AbstractPower lacerate = m.getPower(LacerateDebuff.POWER_ID); - if (lacerate != null) { - int additionalVenomAmount = lacerate.amount; - this.addToBot(new ApplyPowerAction(m, p, new VenomDebuff(m, additionalVenomAmount), additionalVenomAmount)); - } - } - - // Check if the player has Toxic Personality power and the target does not have Artifact - if (AbstractDungeon.player.hasPower(ToxicPersonalityPower.POWER_ID) && !m.hasPower("Artifact")) { - ToxicPersonalityPower toxicPersonalityPower = - (ToxicPersonalityPower) AbstractDungeon.player.getPower(ToxicPersonalityPower.POWER_ID); - - if (toxicPersonalityPower != null) { - toxicPersonalityPower.onActivateCall(m); - - // Re-check LacerateDebuff after Toxic Personality activation and apply Venom if needed - if (m.hasPower(LacerateDebuff.POWER_ID) && !m.hasPower("Artifact")) { - AbstractPower lacerate = m.getPower(LacerateDebuff.POWER_ID); - int additionalVenomAmount = lacerate.amount; - this.addToBot(new ApplyPowerAction(m, p, new VenomDebuff(m, additionalVenomAmount), additionalVenomAmount)); - } - } - } } @Override diff --git a/src/main/java/sneckomod/cards/Mesmerize.java b/src/main/java/sneckomod/cards/Mesmerize.java index 6a8299d042..3625b98d85 100644 --- a/src/main/java/sneckomod/cards/Mesmerize.java +++ b/src/main/java/sneckomod/cards/Mesmerize.java @@ -6,6 +6,7 @@ import com.megacrit.cardcrawl.actions.utility.SFXAction; 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.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.StrengthPower; @@ -32,7 +33,15 @@ 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"), + //deu fix yay + String stuff; + if(Settings.language == Settings.GameLanguage.DEU){ + stuff = "irrst"; + } else { + stuff = BaseMod.getKeywordProper("sneckomod:muddle"); + } + // muddle is no longer random here + addToBot(new SelectCardsInHandAction(1, stuff, (AbstractCard c) -> true, (cards) -> { for (AbstractCard card : cards) { diff --git a/src/main/java/sneckomod/cards/Mudshield.java b/src/main/java/sneckomod/cards/Mudshield.java index 485219872e..ea801bfcd9 100644 --- a/src/main/java/sneckomod/cards/Mudshield.java +++ b/src/main/java/sneckomod/cards/Mudshield.java @@ -14,7 +14,6 @@ public class Mudshield extends AbstractSneckoCard { public Mudshield() { super(ID, 1, CardType.POWER, CardRarity.RARE, CardTarget.SELF); baseMagicNumber = magicNumber = 2; - SneckoMod.loadJokeCardImage(this, "Mudshield.png"); } diff --git a/src/main/java/sneckomod/cards/Nope.java b/src/main/java/sneckomod/cards/Nope.java index 95d06cbb00..4122b41058 100644 --- a/src/main/java/sneckomod/cards/Nope.java +++ b/src/main/java/sneckomod/cards/Nope.java @@ -11,7 +11,7 @@ public class Nope extends AbstractSneckoCard { //stupid intellij stuff SKILL, SELF, COMMON - private static final int BLOCK = 7; + private static final int BLOCK = 5; private static final int UPG_BLOCK = 3; public Nope() { diff --git a/src/main/java/sneckomod/cards/OtherworldlySlash.java b/src/main/java/sneckomod/cards/OtherworldlySlash.java index 3c26d6893a..e0971c49e3 100644 --- a/src/main/java/sneckomod/cards/OtherworldlySlash.java +++ b/src/main/java/sneckomod/cards/OtherworldlySlash.java @@ -27,6 +27,7 @@ public class OtherworldlySlash extends AbstractSneckoCard implements OnObtainCar public OtherworldlySlash() { super(ID, 1, CardType.ATTACK, CardRarity.COMMON, CardTarget.ENEMY); baseDamage = DAMAGE; + this.tags.add(SneckoMod.GIFT); SneckoMod.loadJokeCardImage(this, "OtherworldlySlash.png"); } @@ -45,7 +46,6 @@ public static boolean cardListDuplicate(ArrayList cardsList, Abstr @Override public void use(AbstractPlayer p, AbstractMonster m) { - // Deal initial damage dmg(m, makeInfo(), AbstractGameAction.AttackEffect.SLASH_HEAVY); boolean playedOffClassCard = AbstractDungeon.actionManager.cardsPlayedThisTurn.stream() .anyMatch(card -> card.color != this.color); diff --git a/src/main/java/sneckomod/cards/OverwhelmingPresence.java b/src/main/java/sneckomod/cards/OverwhelmingPresence.java index 769f9d6503..e0f69c42bc 100644 --- a/src/main/java/sneckomod/cards/OverwhelmingPresence.java +++ b/src/main/java/sneckomod/cards/OverwhelmingPresence.java @@ -11,18 +11,20 @@ public class OverwhelmingPresence extends AbstractSneckoCard { public OverwhelmingPresence() { super(ID, 1, CardType.POWER, CardRarity.UNCOMMON, CardTarget.SELF); - baseMagicNumber = magicNumber = 1; SneckoMod.loadJokeCardImage(this, "OverwhelmingPresence.png"); + this.isEthereal = true; } public void use(AbstractPlayer p, AbstractMonster m) { - applyToSelf(new OverwhelmingPresencePower(p, this.magicNumber)); + applyToSelf(new OverwhelmingPresencePower(p, 1)); } public void upgrade() { if (!upgraded) { upgradeName(); - upgradeBaseCost(0); + 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 index f387c7c8be..748f106600 100644 --- a/src/main/java/sneckomod/cards/PerpetualSerpent.java +++ b/src/main/java/sneckomod/cards/PerpetualSerpent.java @@ -23,9 +23,7 @@ public PerpetualSerpent() { @Override public void use(AbstractPlayer p, AbstractMonster m) { - dmg(m, makeInfo(), AbstractGameAction.AttackEffect.SLASH_HEAVY); - if (isOverflowActive(this)) { addToBot(new GainEnergyAction(MAGIC)); } diff --git a/src/main/java/sneckomod/cards/PureSnecko.java b/src/main/java/sneckomod/cards/PureSnecko.java index a465f9988f..3da4f6bd57 100644 --- a/src/main/java/sneckomod/cards/PureSnecko.java +++ b/src/main/java/sneckomod/cards/PureSnecko.java @@ -5,11 +5,10 @@ import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import hermit.util.Wiz; import sneckomod.SneckoMod; import sneckomod.actions.MuddleAction; -import java.util.ArrayList; - public class PureSnecko extends AbstractSneckoCard { public final static String ID = SneckoMod.makeID("PureSnecko"); @@ -29,26 +28,11 @@ public PureSnecko() { @Override public void use(AbstractPlayer p, AbstractMonster m) { - // Create a list to track the cards that are drawn - ArrayList preHand = new ArrayList<>(p.hand.group); // Store current cards in hand before drawing - - // Draw cards based on magicNumber - addToBot(new DrawCardAction(magicNumber, new AbstractGameAction() { + Wiz.atb(new DrawCardAction(magicNumber, new AbstractGameAction() { @Override public void update() { - ArrayList drawnCards = new ArrayList<>(); - - // Identify which cards were added to the hand - for (AbstractCard card : p.hand.group) { - if (!preHand.contains(card)) { - drawnCards.add(card); // These are the newly drawn cards - } - } - - // Muddle the newly drawn cards - for (AbstractCard card : drawnCards) { - addToBot(new MuddleAction(card)); // Automatically Muddle the drawn card - } + for (AbstractCard c: DrawCardAction.drawnCards) + Wiz.att(new MuddleAction(c)); isDone = true; } })); @@ -58,7 +42,7 @@ public void update() { public void upgrade() { if (!upgraded) { upgradeName(); - upgradeMagicNumber(UPG_MAGIC); // Increase the number of cards drawn when upgraded + upgradeMagicNumber(UPG_MAGIC); initializeDescription(); } } diff --git a/src/main/java/sneckomod/cards/QuickBite.java b/src/main/java/sneckomod/cards/QuickBite.java index d2f5b3715d..27a171dad4 100644 --- a/src/main/java/sneckomod/cards/QuickBite.java +++ b/src/main/java/sneckomod/cards/QuickBite.java @@ -2,38 +2,54 @@ 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 hermit.util.Wiz; 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"); //stupid intellij stuff ATTACK, ENEMY, COMMON - private static final int DAMAGE = 10; - private static final int UPG_DAMAGE = 3; + private static final int DAMAGE = 7; + private static final int UPG_DAMAGE = 2; public QuickBite() { super(ID, 1, CardType.ATTACK, CardRarity.COMMON, CardTarget.ENEMY); baseDamage = DAMAGE; + 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); - atb(new MuddleRandomCardAction(1, true)); - + Wiz.atb(new DrawCardAction(magicNumber, new AbstractGameAction() { + @Override + public void update() { + for (AbstractCard c: DrawCardAction.drawnCards) + Wiz.att(new MuddleAction(c)); + isDone = true; + } + })); } public void upgrade() { if (!upgraded) { upgradeName(); upgradeDamage(UPG_DAMAGE); + upgradeMagicNumber(1); + 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 e05c9e1033..b3af00cfa4 100644 --- a/src/main/java/sneckomod/cards/RainOfDice.java +++ b/src/main/java/sneckomod/cards/RainOfDice.java @@ -8,6 +8,7 @@ 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 downfall.downfallMod; @@ -44,7 +45,13 @@ public void calculateCardDamage(final AbstractMonster m) { public void use(AbstractPlayer p, AbstractMonster m) { addToBot(new DamageAction(m, new DamageInfo(p, damage, DamageInfo.DamageType.NORMAL), AbstractGameAction.AttackEffect.BLUNT_LIGHT)); - addToBot(new SelectCardsInHandAction(1, BaseMod.getKeywordProper("sneckomod:muddle"), + String stuff; + if(Settings.language == Settings.GameLanguage.DEU){ + stuff = "irrst"; + } else { + stuff = BaseMod.getKeywordProper("sneckomod:muddle"); + } + addToBot(new SelectCardsInHandAction(1, stuff, (AbstractCard c) -> true, (cards) -> { for (AbstractCard card : cards) { diff --git a/src/main/java/sneckomod/cards/RiskySword.java b/src/main/java/sneckomod/cards/RiskySword.java index 0ddf71bf21..c3cffce353 100644 --- a/src/main/java/sneckomod/cards/RiskySword.java +++ b/src/main/java/sneckomod/cards/RiskySword.java @@ -25,8 +25,7 @@ public RiskySword() { @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); + dmg(m, makeInfo(), AbstractGameAction.AttackEffect.SLASH_DIAGONAL); } @Override diff --git a/src/main/java/sneckomod/cards/RoundaboutSwing.java b/src/main/java/sneckomod/cards/RoundaboutSwing.java index 9b0fc0d965..8d22548818 100644 --- a/src/main/java/sneckomod/cards/RoundaboutSwing.java +++ b/src/main/java/sneckomod/cards/RoundaboutSwing.java @@ -11,7 +11,7 @@ public class RoundaboutSwing extends AbstractSneckoCard { public static final String ID = SneckoMod.makeID("RoundaboutSwing"); - private static final int DAMAGE = 11; + private static final int DAMAGE = 8; private static final int UPGRADE_DAMAGE = 3; private static final int MAGIC = 2; diff --git a/src/main/java/sneckomod/cards/SerpentBottle.java b/src/main/java/sneckomod/cards/SerpentBottle.java index b12d89b2d8..8d954e817c 100644 --- a/src/main/java/sneckomod/cards/SerpentBottle.java +++ b/src/main/java/sneckomod/cards/SerpentBottle.java @@ -5,6 +5,7 @@ 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.monsters.AbstractMonster; import downfall.downfallMod; import sneckomod.SneckoMod; @@ -26,7 +27,6 @@ public SerpentBottle() { baseSilly = silly = 2; SneckoMod.loadJokeCardImage(this, "SerpentBottle.png"); exhaust = true; - //tags.add(SneckoMod.SNEKPROOF); } @Override @@ -34,7 +34,13 @@ public void use(AbstractPlayer p, AbstractMonster m) { addToBot(new DrawCardAction(p, this.silly)); - addToBot(new SelectCardsInHandAction(magicNumber, BaseMod.getKeywordProper("sneckomod:muddle"), + String stuff; + if(Settings.language == Settings.GameLanguage.DEU){ + stuff = "irrst"; + } else { + stuff = BaseMod.getKeywordProper("sneckomod:muddle"); + } + addToBot(new SelectCardsInHandAction(magicNumber, stuff, (AbstractCard c) -> true, (cards) -> { for (AbstractCard card : cards) { diff --git a/src/main/java/sneckomod/cards/SerpentMind.java b/src/main/java/sneckomod/cards/SerpentMind.java index 31aa71a3cf..c7a06cd0db 100644 --- a/src/main/java/sneckomod/cards/SerpentMind.java +++ b/src/main/java/sneckomod/cards/SerpentMind.java @@ -30,6 +30,7 @@ public SerpentMind() { baseMagicNumber = magicNumber = MAGIC; tags.add(BaseModCardTags.FORM); isEthereal = true; + this.tags.add(SneckoMod.GIFT); SneckoMod.loadJokeCardImage(this, "SerpentMind.png"); } diff --git a/src/main/java/sneckomod/cards/SerpentineSleuth.java b/src/main/java/sneckomod/cards/SerpentineSleuth.java index 5ae9a3fd65..d53f17609c 100644 --- a/src/main/java/sneckomod/cards/SerpentineSleuth.java +++ b/src/main/java/sneckomod/cards/SerpentineSleuth.java @@ -23,9 +23,9 @@ public class SerpentineSleuth extends AbstractSneckoCard implements OnObtainCard private static int SOFTLOCK = 0; public SerpentineSleuth() { - super(ID, 3, CardType.POWER, CardRarity.RARE, CardTarget.SELF); - baseMagicNumber = magicNumber = 1; + super(ID, 4, CardType.POWER, CardRarity.RARE, CardTarget.SELF); isEthereal = true; + this.tags.add(SneckoMod.GIFT); SneckoMod.loadJokeCardImage(this, "SerpentineSleuth.png"); } @@ -44,7 +44,7 @@ public static boolean cardListDuplicate(ArrayList cardsList, Abstr } public void use(AbstractPlayer p, AbstractMonster m) { - applyToSelf(new SerpentineSleuthPower(this.magicNumber)); + applyToSelf(new SerpentineSleuthPower(1)); } @Override @@ -69,10 +69,7 @@ public void onObtainCard() { public void upgrade() { if (!upgraded) { upgradeName(); - //isEthereal = false; - upgradeMagicNumber(1); - rawDescription = UPGRADE_DESCRIPTION; - initializeDescription(); + 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 index 453fe78208..149bac05d0 100644 --- a/src/main/java/sneckomod/cards/SerpentsNest.java +++ b/src/main/java/sneckomod/cards/SerpentsNest.java @@ -24,8 +24,8 @@ public class SerpentsNest extends AbstractSneckoCard implements OnObtainCard { public SerpentsNest() { super(ID, 1, CardType.POWER, CardRarity.UNCOMMON, CardTarget.SELF); - baseMagicNumber = magicNumber = 9; - + baseMagicNumber = magicNumber = 7; + this.tags.add(SneckoMod.GIFT); SneckoMod.loadJokeCardImage(this, "SerpentsNest.png"); } diff --git a/src/main/java/sneckomod/cards/SlitherThrough.java b/src/main/java/sneckomod/cards/SlitherThrough.java index f03b382f0c..6115e669e7 100644 --- a/src/main/java/sneckomod/cards/SlitherThrough.java +++ b/src/main/java/sneckomod/cards/SlitherThrough.java @@ -30,6 +30,7 @@ public SlitherThrough() { super(ID, 2, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); baseDamage = DAMAGE; baseMagicNumber = magicNumber = MAGIC; + this.tags.add(SneckoMod.GIFT); SneckoMod.loadJokeCardImage(this, "SlitherThrough.png"); } diff --git a/src/main/java/sneckomod/cards/SnakeEyes.java b/src/main/java/sneckomod/cards/SnakeEyes.java index f9cd5297e5..a9eaefce3f 100644 --- a/src/main/java/sneckomod/cards/SnakeEyes.java +++ b/src/main/java/sneckomod/cards/SnakeEyes.java @@ -18,7 +18,7 @@ public class SnakeEyes extends AbstractSneckoCard implements OnObtainCard { - ///Snake Eyes + //Snake Eyes public final static String ID = makeID("SnakeEyes"); private static final int MAGIC = 1; @@ -28,6 +28,7 @@ public class SnakeEyes extends AbstractSneckoCard implements OnObtainCard { public SnakeEyes() { super(ID, 1, CardType.SKILL, CardRarity.RARE, CardTarget.SELF); baseMagicNumber = magicNumber = MAGIC; + this.tags.add(SneckoMod.GIFT); SneckoMod.loadJokeCardImage(this, "SnakeEyes.png"); } diff --git a/src/main/java/sneckomod/cards/SnekBite.java b/src/main/java/sneckomod/cards/SnekBite.java index ee0b88af4b..2f1a06554c 100644 --- a/src/main/java/sneckomod/cards/SnekBite.java +++ b/src/main/java/sneckomod/cards/SnekBite.java @@ -7,6 +7,7 @@ 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.monsters.AbstractMonster; import com.megacrit.cardcrawl.vfx.combat.BiteEffect; import downfall.downfallMod; @@ -35,8 +36,14 @@ 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); + String stuff; + if(Settings.language == Settings.GameLanguage.DEU){ + stuff = "irrst"; + } else { + stuff = BaseMod.getKeywordProper("sneckomod:muddle"); + } // muddle is no longer random here - addToBot(new SelectCardsInHandAction(magicNumber, BaseMod.getKeywordProper("sneckomod:muddle"), + addToBot(new SelectCardsInHandAction(magicNumber, stuff, (AbstractCard c) -> true, (cards) -> { for (AbstractCard card : cards) { diff --git a/src/main/java/sneckomod/cards/SoulRoll.java b/src/main/java/sneckomod/cards/SoulRoll.java index 97a642cc1c..17c479779b 100644 --- a/src/main/java/sneckomod/cards/SoulRoll.java +++ b/src/main/java/sneckomod/cards/SoulRoll.java @@ -5,6 +5,7 @@ import com.megacrit.cardcrawl.actions.common.GainBlockAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.monsters.AbstractMonster; import downfall.downfallMod; import sneckomod.SneckoMod; @@ -30,7 +31,14 @@ public SoulRoll() { public void use(AbstractPlayer p, AbstractMonster m) { addToBot(new GainBlockAction(p, p, block)); - addToBot(new SelectCardsInHandAction(magicNumber, BaseMod.getKeywordProper("sneckomod:muddle"), + + String stuff; + if(Settings.language == Settings.GameLanguage.DEU){ + stuff = "irrst"; + } else { + stuff = BaseMod.getKeywordProper("sneckomod:muddle"); + } + addToBot(new SelectCardsInHandAction(magicNumber, stuff, (AbstractCard c) -> true, (cards) -> { for (AbstractCard card : cards) { @@ -40,10 +48,6 @@ public void use(AbstractPlayer p, AbstractMonster m) { )); } - // public void upgradeAction(AbstractPlayer p, AbstractMonster m){ - // AbstractDungeon.actionManager.addToBottom(new DrawCardAction(p, 1)); - // } - public void upgrade() { if (!upgraded) { upgradeName(); diff --git a/src/main/java/sneckomod/cards/TailWhip.java b/src/main/java/sneckomod/cards/TailWhip.java index 36c08fc3a3..3975f22468 100644 --- a/src/main/java/sneckomod/cards/TailWhip.java +++ b/src/main/java/sneckomod/cards/TailWhip.java @@ -39,7 +39,6 @@ public void use(AbstractPlayer p, AbstractMonster m) { } if (y > 0) applyToEnemy(m, autoVuln(m, y)); - // atb(new MuddleHandAction()); } diff --git a/src/main/java/sneckomod/cards/ToothAndClaw.java b/src/main/java/sneckomod/cards/ToothAndClaw.java index e11312070e..edda74ffcd 100644 --- a/src/main/java/sneckomod/cards/ToothAndClaw.java +++ b/src/main/java/sneckomod/cards/ToothAndClaw.java @@ -27,9 +27,10 @@ public class ToothAndClaw extends AbstractSneckoCard { public ToothAndClaw() { super(ID, 1, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); - baseDamage = 6; + baseDamage = 4; SneckoMod.loadJokeCardImage(this, "ToothAndClaw.png"); this.cardsToPreview = new Shiv(); + this.tags.add(SneckoMod.GIFT); } public static boolean cardListDuplicate(ArrayList cardsList, AbstractCard card) { @@ -80,7 +81,7 @@ public void onObtainCard() { public void upgrade() { if (!upgraded) { upgradeName(); - upgradeDamage(3); + upgradeDamage(2); rawDescription = UPGRADE_DESCRIPTION; initializeDescription(); this.cardsToPreview.upgrade(); diff --git a/src/main/java/sneckomod/cards/TrashCan.java b/src/main/java/sneckomod/cards/TrashCan.java index 479627d9ec..479d9ea87d 100644 --- a/src/main/java/sneckomod/cards/TrashCan.java +++ b/src/main/java/sneckomod/cards/TrashCan.java @@ -14,8 +14,7 @@ public class TrashCan extends AbstractSneckoCard { //stupid intellij stuff POWER, SELF, UNCOMMON public TrashCan() { - super(ID, 0, CardType.POWER, CardRarity.UNCOMMON, CardTarget.SELF); - isInnate = false; + super(ID, 1, CardType.POWER, CardRarity.UNCOMMON, CardTarget.SELF); SneckoMod.loadJokeCardImage(this, "TrashCan.png"); } @@ -26,9 +25,7 @@ public void use(AbstractPlayer p, AbstractMonster m) { public void upgrade() { if (!upgraded) { - isInnate = true; - rawDescription = UPGRADE_DESCRIPTION; - initializeDescription(); + upgradeBaseCost(0); upgradeName(); } } diff --git a/src/main/java/sneckomod/cards/TyphoonFang.java b/src/main/java/sneckomod/cards/TyphoonFang.java index 0e840eb509..392cffbb99 100644 --- a/src/main/java/sneckomod/cards/TyphoonFang.java +++ b/src/main/java/sneckomod/cards/TyphoonFang.java @@ -9,6 +9,8 @@ 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"); @@ -30,7 +32,7 @@ public TyphoonFang() { 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.purgeOnUse) { + if (isOverflowActive(this) && !this.hasTag(NO_TYPHOON)) { if (!upgraded) { applyToSelf(new TyphoonPower(1)); } diff --git a/src/main/java/sneckomod/cards/WideAngle.java b/src/main/java/sneckomod/cards/WideAngle.java index 480109c7fc..b7713e1352 100644 --- a/src/main/java/sneckomod/cards/WideAngle.java +++ b/src/main/java/sneckomod/cards/WideAngle.java @@ -15,7 +15,7 @@ public class WideAngle extends AbstractSneckoCard { private static final int COST = 3; private static final int DAMAGE = 18; - private static final int UPGRADE_DMG = 6; + private static final int UPGRADE_DMG = 4; public WideAngle() { super(ID, COST, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ALL_ENEMY); diff --git a/src/main/java/sneckomod/cards/WideSting.java b/src/main/java/sneckomod/cards/WideSting.java index 7be37a6f7f..9ac1805189 100644 --- a/src/main/java/sneckomod/cards/WideSting.java +++ b/src/main/java/sneckomod/cards/WideSting.java @@ -2,6 +2,7 @@ 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; @@ -29,8 +30,10 @@ public class WideSting extends AbstractSneckoCard { private static int SOFTLOCK = 0; public WideSting() { - super(ID, 1, CardType.ATTACK, CardRarity.COMMON, CardTarget.ALL); + super(ID, 1, CardType.ATTACK, CardRarity.COMMON, CardTarget.ALL_ENEMY); baseDamage = DAMAGE; + this.isMultiDamage = true; + this.tags.add(SneckoMod.GIFT); SneckoMod.loadJokeCardImage(this, "WideSting.png"); } @@ -48,19 +51,15 @@ public static boolean cardListDuplicate(ArrayList cardsList, Abstr } public void use(AbstractPlayer p, AbstractMonster m) { - for (AbstractMonster monster : AbstractDungeon.getMonsters().monsters) { - if (!monster.isDead && !monster.isDying) { - addToBot(new DamageAction(monster, new DamageInfo(p, this.damage, this.damageTypeForTurn), AbstractGameAction.AttackEffect.SLASH_DIAGONAL)); - } + this.addToBot(new DamageAllEnemiesAction(p, this.multiDamage, this.damageTypeForTurn, AbstractGameAction.AttackEffect.SLASH_DIAGONAL)); - for (AbstractCard q : p.hand.group) { + for (AbstractCard q : p.hand.group) { if (q.color != AbstractDungeon.player.getCardColor()) { atb(new UpgradeSpecificCardAction(q)); // atb(new MuddleAction(q)); } } } - } @Override public void onObtainCard() { diff --git a/src/main/java/sneckomod/cards/unknowns/AbstractUnknownCard.java b/src/main/java/sneckomod/cards/unknowns/AbstractUnknownCard.java index 4dd982d47d..104328d470 100644 --- a/src/main/java/sneckomod/cards/unknowns/AbstractUnknownCard.java +++ b/src/main/java/sneckomod/cards/unknowns/AbstractUnknownCard.java @@ -111,7 +111,7 @@ public static void updateReplacements(ArrayList> funkyPr 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 (funkyPredicate.test(c) && (SneckoMod.isPureSneckoModeEnabled() || (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) { diff --git a/src/main/java/sneckomod/events/BackToBasicsSnecko.java b/src/main/java/sneckomod/events/BackToBasicsSnecko.java index 9caaea5015..5fef6e59cc 100644 --- a/src/main/java/sneckomod/events/BackToBasicsSnecko.java +++ b/src/main/java/sneckomod/events/BackToBasicsSnecko.java @@ -125,7 +125,7 @@ protected void buttonEffect(int buttonPressed) { for (AbstractCard c : strikesToRemove) { cardsRemoved.add(c.cardID); int choice; - choice = cardRandomRng.random(0,11); + choice = cardRandomRng.random(0,12); AbstractCard newCard = new Strike_Red(); switch (choice) { case 0: newCard = new Strike_Red(); break; @@ -143,6 +143,8 @@ protected void buttonEffect(int buttonPressed) { case 10: newCard = new collector.cards.Strike(); break; case 11: newCard = new gremlin.cards.Strike(); break; + + case 12: newCard = new awakenedOne.cards.Strike(); break; } if (c.upgraded) { @@ -157,7 +159,7 @@ protected void buttonEffect(int buttonPressed) { cardsRemoved.add(c.cardID); int choice; - choice = cardRandomRng.random(0,11); + choice = cardRandomRng.random(0,12); AbstractCard newCard = new Strike_Red(); switch (choice) { case 0: newCard = new Defend_Red(); break; @@ -175,6 +177,8 @@ protected void buttonEffect(int buttonPressed) { 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) { diff --git a/src/main/java/sneckomod/events/Serpent_Snecko.java b/src/main/java/sneckomod/events/Serpent_Snecko.java index 79cdffb3c0..04f8b8a0f8 100644 --- a/src/main/java/sneckomod/events/Serpent_Snecko.java +++ b/src/main/java/sneckomod/events/Serpent_Snecko.java @@ -63,7 +63,7 @@ public Serpent_Snecko() { if (AbstractDungeon.player.hasRelic(ConfusingCodex.ID) && AbstractDungeon.player.hasRelic(LoadedDie.ID) && - AbstractDungeon.player.hasRelic(RareBoosterPack.ID) && + //AbstractDungeon.player.hasRelic(RareBoosterPack.ID) && AbstractDungeon.player.hasRelic(SleevedAce.ID) && AbstractDungeon.player.hasRelic(UnknownEgg.ID) && AbstractDungeon.player.hasRelic(SneckoCommon.ID)){ @@ -123,9 +123,9 @@ private AbstractRelic getRandomFace() { ids.add(LoadedDie.ID); } // BaseMod.addRelicToCustomPool(new RareBoosterPack(), TheSnecko.Enums.SNECKO_CYAN); - if (!AbstractDungeon.player.hasRelic(RareBoosterPack.ID)) { - ids.add(RareBoosterPack.ID); - } +//// 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); diff --git a/src/main/java/sneckomod/patches/BottledD8Patch.java b/src/main/java/sneckomod/patches/BottledD8Patch.java index 56185a2a03..6011193afc 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 0000000000..0d91a51ff1 --- /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/SnekBtnPatch.java b/src/main/java/sneckomod/patches/SnekBtnPatch.java deleted file mode 100644 index 53412f533a..0000000000 --- a/src/main/java/sneckomod/patches/SnekBtnPatch.java +++ /dev/null @@ -1,69 +0,0 @@ -package sneckomod.patches; - -import com.badlogic.gdx.graphics.Color; -import com.badlogic.gdx.graphics.g2d.SpriteBatch; -import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; -import com.megacrit.cardcrawl.core.CardCrawlGame; -import com.megacrit.cardcrawl.core.Settings; -import com.megacrit.cardcrawl.helpers.*; -import com.megacrit.cardcrawl.helpers.input.InputHelper; -import com.megacrit.cardcrawl.localization.UIStrings; -import com.megacrit.cardcrawl.relics.AbstractRelic; -import com.megacrit.cardcrawl.screens.charSelect.CharacterOption; -import sneckomod.SneckoMod; - -import java.util.ArrayList; - -import static reskinContent.patches.CharacterSelectScreenPatches.allTextInfoX; - -public class SnekBtnPatch { - public static final Hitbox challengeDownHitbox = new Hitbox(40.0f * Settings.scale * (0.01f + (1.0f - 0.019f)), 40.0f * Settings.scale); - - public static final ArrayList challengeTips = new ArrayList<>(); - public static final UIStrings uiStrings = CardCrawlGame.languagePack.getUIString("sneckomod:ChallengeMode"); - - @SpirePatch(clz = CharacterOption.class, method = "renderRelics") - public static class RenderBtn { - public static void Postfix(CharacterOption obj, SpriteBatch sb) { - if ( (obj.name.toLowerCase().contains("snecko") || obj.name.contains("蛇") || obj.name.contains("스네코") || obj.name.contains("Змекко") || obj.name.contains("Geckobra") ) && obj.selected) { - challengeDownHitbox.move(190.0f * Settings.scale, Settings.HEIGHT / 2.0f - 190.0f * Settings.scale); - challengeDownHitbox.render(sb); - - sb.setColor(Color.WHITE); - sb.draw(ImageMaster.CHECKBOX, challengeDownHitbox.cX - 32.0f + allTextInfoX, challengeDownHitbox.cY - 32.0f , 32.0f, 32.0f, 64.0f, 64.0f, Settings.scale * (0.01f + (1.0f - 0.019f)), Settings.scale * (0.01f + (1.0f - 0.019f)), 0.0f, 0, 0, 64, 64, false, false); - if (SneckoMod.pureSneckoMode) { - sb.draw(ImageMaster.TICK, challengeDownHitbox.cX - 32.0f + allTextInfoX, challengeDownHitbox.cY - 32.0f , 32.0f, 32.0f, 64.0f, 64.0f, Settings.scale * (0.01f + (1.0f - 0.019f)), Settings.scale * (0.01f + (1.0f - 0.019f)), 0.0f, 0, 0, 64, 64, false, false); - } - FontHelper.renderSmartText(sb, FontHelper.tipHeaderFont, uiStrings.TEXT[0], challengeDownHitbox.cX + 25f * Settings.scale + allTextInfoX, challengeDownHitbox.cY, Settings.BLUE_TEXT_COLOR); - } - } - } - - @SpirePatch(clz = CharacterOption.class, method = "updateHitbox") - public static class UpdateHitbox { - public static void Postfix(CharacterOption obj) { - if ( (obj.name.toLowerCase().contains("snecko") || obj.name.contains("蛇") || obj.name.contains("스네코") || obj.name.contains("Змекко") || obj.name.contains("Geckobra") ) && obj.selected) { - challengeDownHitbox.update(); - if (challengeDownHitbox.hovered) { - if (challengeTips.isEmpty()) { - challengeTips.add(new PowerTip( uiStrings.TEXT[0], uiStrings.TEXT[1])); - } - if (InputHelper.mX < 1400.0f * Settings.scale) { - TipHelper.queuePowerTips(InputHelper.mX + 60.0f * Settings.scale, InputHelper.mY - 50.0f * Settings.scale, challengeTips); - } else { - TipHelper.queuePowerTips(InputHelper.mX - 350.0f * Settings.scale, InputHelper.mY - 50.0f * Settings.scale, challengeTips); - } - - if (InputHelper.justClickedLeft) { - CardCrawlGame.sound.playA("UI_CLICK_1", -0.4f); - challengeDownHitbox.clickStarted = true; - } - if (challengeDownHitbox.clicked) { - SneckoMod.pureSneckoMode = !SneckoMod.pureSneckoMode; - challengeDownHitbox.clicked = false; - } - } - } - } - } -} diff --git a/src/main/java/sneckomod/potions/CheatPotion.java b/src/main/java/sneckomod/potions/CheatPotion.java index f5eb0a416e..f81a79a564 100644 --- a/src/main/java/sneckomod/potions/CheatPotion.java +++ b/src/main/java/sneckomod/potions/CheatPotion.java @@ -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("overflow"))), BaseMod.getKeywordDescription(SneckoMod.makeID("overflow")))); } @@ -52,7 +52,7 @@ public CustomPotion makeCopy() { } public int getPotency(int ascensionLevel) { - return 1; + return 3; } } diff --git a/src/main/java/sneckomod/potions/DiceRollPotion.java b/src/main/java/sneckomod/potions/DiceRollPotion.java index 8846d1e8a7..7bfae7d27b 100644 --- a/src/main/java/sneckomod/potions/DiceRollPotion.java +++ b/src/main/java/sneckomod/potions/DiceRollPotion.java @@ -73,7 +73,7 @@ public boolean canUse() { } public boolean canSpawn() { - return Settings.isEndless || AbstractDungeon.floorNum <= 48; // cannot appear in act 4 + return Settings.isEndless || AbstractDungeon.actNum != 4; // cannot appear in act 4 } @Override diff --git a/src/main/java/sneckomod/potions/MuddlingPotion.java b/src/main/java/sneckomod/potions/MuddlingPotion.java index 7da6b91109..52759daa93 100644 --- a/src/main/java/sneckomod/potions/MuddlingPotion.java +++ b/src/main/java/sneckomod/potions/MuddlingPotion.java @@ -5,6 +5,7 @@ import basemod.abstracts.CustomPotion; 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; @@ -32,7 +33,9 @@ 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("muddle"))), BaseMod.getKeywordDescription(SneckoMod.makeID("muddle")))); + if (Settings.language == Settings.GameLanguage.ENG) { + this.tips.add(new PowerTip(TipHelper.capitalize(BaseMod.getKeywordTitle(SneckoMod.makeID("muddle"))), BaseMod.getKeywordDescription(SneckoMod.makeID("muddle")))); + } } public void use(AbstractCreature target) { diff --git a/src/main/java/sneckomod/powers/AceOfWandsPower.java b/src/main/java/sneckomod/powers/AceOfWandsPower.java index 732018bf72..40aad59e18 100644 --- a/src/main/java/sneckomod/powers/AceOfWandsPower.java +++ b/src/main/java/sneckomod/powers/AceOfWandsPower.java @@ -1,6 +1,7 @@ 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; @@ -8,7 +9,10 @@ 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; @@ -42,9 +46,11 @@ public void onApplyPower(AbstractPower power, AbstractCreature target, AbstractC 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 - addToTop(new AceOfWandsAction(amount)); + if (!((power.ID.equals(StrengthPower.POWER_ID) && target.hasPower(ShiftingPower.POWER_ID)))) { + addToTop(new AceOfWandsAction(amount)); } } + } @Override public void updateDescription() { diff --git a/src/main/java/sneckomod/powers/BlunderGuardPower.java b/src/main/java/sneckomod/powers/BlunderGuardPower.java index 2415f33885..a8236e6c67 100644 --- a/src/main/java/sneckomod/powers/BlunderGuardPower.java +++ b/src/main/java/sneckomod/powers/BlunderGuardPower.java @@ -23,6 +23,8 @@ 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"); @@ -48,39 +50,34 @@ public BlunderGuardPower(final int amount) { } public boolean isOverflowActive(AbstractCard source) { - boolean OVERFLOW = false; // Reset overflow state + boolean OVERFLOW = false; - // Only check for overflow if the card has the OVERFLOW tag if (source.hasTag(SneckoMod.OVERFLOW)) { - // Check if there are more than 5 cards in hand if (AbstractDungeon.player.hand.size() > 5 || (AbstractDungeon.player.hasPower(CheatPower.POWER_ID))) { OVERFLOW = true; } - // If the card purges on use, immediately return false - if ((source instanceof TyphoonFang && source.purgeOnUse)) { - return false; // If the card purges on use, it cannot cause overflow + if (source.hasTag(NO_TYPHOON)) { + return false; } - // Check for the D8 relic 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; // Set overflow if the D8 card is the same as the source card + OVERFLOW = true; } } } } - return OVERFLOW; // Return true or false + return OVERFLOW; } @Override public void onUseCard(AbstractCard card, UseCardAction action) { - // Check if the played card has OVERFLOW active and is not purged if (!isOverflowActive(card) || card.purgeOnUse) { - return; // Exit if OVERFLOW is not active or the card is purged + return; } flash(); addToTop(new GainBlockAction(owner, amount, false)); diff --git a/src/main/java/sneckomod/powers/FountainPower.java b/src/main/java/sneckomod/powers/FountainPower.java index dc0e54d328..c0da608a08 100644 --- a/src/main/java/sneckomod/powers/FountainPower.java +++ b/src/main/java/sneckomod/powers/FountainPower.java @@ -18,6 +18,8 @@ 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); @@ -48,60 +50,33 @@ public void onUseCard(AbstractCard card, UseCardAction action) { AbstractMonster randomTarget = getRandomAliveMonster(); if (randomTarget != null) { this.addToBot(new ApplyPowerAction(randomTarget, this.owner, new VenomDebuff(randomTarget, this.amount), this.amount)); - - // Check if the target has LacerateDebuff and apply additional Venom equal to its amount - if (randomTarget.hasPower(LacerateDebuff.POWER_ID) && !randomTarget.hasPower("Artifact")) { - AbstractPower lacerate = randomTarget.getPower(LacerateDebuff.POWER_ID); - if (lacerate != null) { - int additionalVenomAmount = lacerate.amount; - this.addToBot(new ApplyPowerAction(randomTarget, this.owner, new VenomDebuff(randomTarget, additionalVenomAmount), additionalVenomAmount)); - } - } - - // Check if the player has Toxic Personality power and the target does not have Artifact - if (AbstractDungeon.player.hasPower(ToxicPersonalityPower.POWER_ID) && !randomTarget.hasPower("Artifact")) { - ToxicPersonalityPower toxicPersonalityPower = - (ToxicPersonalityPower) AbstractDungeon.player.getPower(ToxicPersonalityPower.POWER_ID); - - if (toxicPersonalityPower != null) { - toxicPersonalityPower.onActivateCall(randomTarget); - - // Re-check LacerateDebuff after Toxic Personality activation and apply Venom if needed - if (randomTarget.hasPower(LacerateDebuff.POWER_ID) && !randomTarget.hasPower("Artifact")) { - AbstractPower lacerate = randomTarget.getPower(LacerateDebuff.POWER_ID); - int additionalVenomAmount = lacerate.amount; - this.addToBot(new ApplyPowerAction(randomTarget, this.owner, new VenomDebuff(randomTarget, additionalVenomAmount), additionalVenomAmount)); - } - } - } } } } - private boolean isOverflowActive(AbstractCard card) { - boolean overflowActive = false; + public boolean isOverflowActive(AbstractCard source) { + boolean OVERFLOW = false; - if (card.hasTag(SneckoMod.OVERFLOW)) { - if (AbstractDungeon.player.hand.size() > 5 || AbstractDungeon.player.hasPower("CheatPower")) { - overflowActive = true; + 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(card.uuid)) { - overflowActive = true; + if (d8Relic.card.uuid.equals(source.uuid)) { + OVERFLOW = true; } } } - - if (card instanceof TyphoonFang && card.purgeOnUse) { - overflowActive = false; - } } - return overflowActive; + return OVERFLOW; } private AbstractMonster getRandomAliveMonster() { diff --git a/src/main/java/sneckomod/powers/LacerateDebuff.java b/src/main/java/sneckomod/powers/LacerateDebuff.java index 6187281499..5c1ac7cbda 100644 --- a/src/main/java/sneckomod/powers/LacerateDebuff.java +++ b/src/main/java/sneckomod/powers/LacerateDebuff.java @@ -1,79 +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); - } -} +//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 index 97535815cb..8bec71cbb0 100644 --- a/src/main/java/sneckomod/powers/OverwhelmingPresencePower.java +++ b/src/main/java/sneckomod/powers/OverwhelmingPresencePower.java @@ -3,13 +3,17 @@ 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; @@ -39,40 +43,26 @@ public OverwhelmingPresencePower(AbstractCreature owner, int amount) { this.updateDescription(); } - @Override - public void atStartOfTurn() { - // Reset tracking to detect a new shuffle each turn - this.previousDrawPileSize = AbstractDungeon.player.drawPile.size(); - hasTriggeredThisTurn = false; - } + @Override + public void atStartOfTurn() { + hasTriggeredThisTurn = false; + } @Override - public void update(int slot) { - super.update(slot); - - // Detect shuffle by checking if the draw pile size has increased (refilled from discard) - int currentDrawPileSize = AbstractDungeon.player.drawPile.size(); - int discardPileSize = AbstractDungeon.player.discardPile.size(); - - if (!hasTriggeredThisTurn && currentDrawPileSize > previousDrawPileSize && discardPileSize == 0) { - // Shuffle detected and effect not yet triggered this turn - flash(); - addToBot(new GainEnergyAction(amount)); - addToBot(new DrawCardAction(AbstractDungeon.player, amount)); - - // Prevent re-triggering this turn - hasTriggeredThisTurn = true; + public void onUseCard(AbstractCard card, UseCardAction action) { + if (hasTriggeredThisTurn = false) { + if (card.color != AbstractDungeon.player.getCardColor() && !card.purgeOnUse) { + this.flash(); + addToBot(new DrawCardAction(amount)); + } } - - // Update the previousDrawPileSize for the next check - previousDrawPileSize = currentDrawPileSize; } @Override public void updateDescription() { this.description = (amount == 1) ? DESCRIPTIONS[0] - : DESCRIPTIONS[1] + this.amount + DESCRIPTIONS[2] + this.amount + DESCRIPTIONS[3]; + : DESCRIPTIONS[1] + this.amount + DESCRIPTIONS[2]; } @Override diff --git a/src/main/java/sneckomod/powers/SerpentMindPower.java b/src/main/java/sneckomod/powers/SerpentMindPower.java index b03d36d20d..096b4d3aee 100644 --- a/src/main/java/sneckomod/powers/SerpentMindPower.java +++ b/src/main/java/sneckomod/powers/SerpentMindPower.java @@ -32,7 +32,7 @@ public int getUniqueSuitsPlayedThisTurn() { Set uniqueColors = new HashSet<>(); // another one of these for (AbstractCard card : AbstractDungeon.actionManager.cardsPlayedThisTurn) { - // they still don't count because I said so. Sandtag convinced me that status and curse should count. + // Sandtag convinced me that status and curse should count. if ( //(card.type != AbstractCard.CardType.STATUS && // card.type != AbstractCard.CardType.CURSE && @@ -61,7 +61,9 @@ public SerpentMindPower(final int amount) { @Override public void atEndOfTurn(boolean isPlayer) { - applyToSelf(new StrengthPower(owner, amount*getUniqueSuitsPlayedThisTurn())); // wow boring nerf really cool (it's not cool) + if (getUniqueSuitsPlayedThisTurn() > 0) { + applyToSelf(new StrengthPower(owner, amount * getUniqueSuitsPlayedThisTurn())); // wow boring nerf really cool (it's not cool) + } } diff --git a/src/main/java/sneckomod/powers/SnakeEyesPower.java b/src/main/java/sneckomod/powers/SnakeEyesPower.java index bff9113ff2..c7adf25343 100644 --- a/src/main/java/sneckomod/powers/SnakeEyesPower.java +++ b/src/main/java/sneckomod/powers/SnakeEyesPower.java @@ -70,7 +70,6 @@ public void onUseCard(AbstractCard card, UseCardAction action) { @Override public void atEndOfTurn(boolean isPlayer) { - // Remove the power at the end of the turn if (isPlayer) { addToBot(new RemoveSpecificPowerAction(this.owner, this.owner, this)); } @@ -78,7 +77,6 @@ public void atEndOfTurn(boolean isPlayer) { @Override public void updateDescription() { - // Update the power description based on the amount if (this.amount == 1) { this.description = DESCRIPTIONS[0]; } else { diff --git a/src/main/java/sneckomod/powers/ToxicPersonalityPower.java b/src/main/java/sneckomod/powers/ToxicPersonalityPower.java index 486b297d40..2f4cbe5df4 100644 --- a/src/main/java/sneckomod/powers/ToxicPersonalityPower.java +++ b/src/main/java/sneckomod/powers/ToxicPersonalityPower.java @@ -1,63 +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); - } -} +//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 index de969d1686..c3df7f894c 100644 --- a/src/main/java/sneckomod/powers/TrashCanPower.java +++ b/src/main/java/sneckomod/powers/TrashCanPower.java @@ -58,15 +58,15 @@ public TrashCanPower(final AbstractCreature _owner, final AbstractCreature _sour updateDescription(); } - @Override - public void atStartOfTurnPostDraw() { - 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)); + public void atEndOfTurn(boolean isPlayer) { + if (isPlayer) { + 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 diff --git a/src/main/java/sneckomod/powers/TyphoonPlusPower.java b/src/main/java/sneckomod/powers/TyphoonPlusPower.java index 3b8c90fb8e..2a76444778 100644 --- a/src/main/java/sneckomod/powers/TyphoonPlusPower.java +++ b/src/main/java/sneckomod/powers/TyphoonPlusPower.java @@ -3,6 +3,7 @@ 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; @@ -13,11 +14,14 @@ 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); @@ -28,12 +32,13 @@ public class TyphoonPlusPower extends AbstractPower implements CloneablePowerInt 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; // Store the number of stacks + this.amount = amount; this.type = PowerType.BUFF; this.isTurnBased = true; @@ -43,91 +48,42 @@ public TyphoonPlusPower(int amount) { this.updateDescription(); } - public boolean isOverflowActive(AbstractCard source) { // Adjusted to take a card parameter - boolean OVERFLOW = false; // Reset overflow state - - // Only check for overflow if the card has the OVERFLOW tag + public boolean isOverflowActive(AbstractCard source) { + boolean OVERFLOW = false; if (source.hasTag(SneckoMod.OVERFLOW)) { - // Check if there are more than 5 cards in hand if (AbstractDungeon.player.hand.size() > 5 || (AbstractDungeon.player.hasPower(CheatPower.POWER_ID))) { OVERFLOW = true; } - // If the card purges on use, immediately return false - if ((source instanceof TyphoonFang && source.purgeOnUse)) { - return false; // If the card purges on use, it cannot cause overflow + if (source.hasTag(NO_TYPHOON)) { + return false; } - // Check for the D8 relic 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; // Set overflow if the D8 card is the same as the source card + OVERFLOW = true; } } } } - return OVERFLOW; // Return true or false + return OVERFLOW; } - @Override public void onUseCard(AbstractCard card, UseCardAction action) { - // Check if the played card has OVERFLOW active and is not purged - if (!isOverflowActive(card) || card.purgeOnUse) { - return; // Exit if OVERFLOW is not active or the card is purged + if (!isOverflowActive(card) || card.hasTag(NO_TYPHOON)) { + return; } - // Loop through and play as many upgraded TyphoonFang cards as the power's amount (stacks) for (int i = 0; i < this.amount; i++) { - // Create a new upgraded instance of TyphoonFang - AbstractCard tmp = new TyphoonFang(); - tmp.upgrade(); // Upgrade the card - tmp.purgeOnUse = true; // Set purge on use - tmp.freeToPlayOnce = true; - - AbstractMonster randomTarget = getRandomAliveMonster(); - - // Continuously attempt to find a valid target if the current one is null or dead - while (randomTarget == null) { - randomTarget = getRandomAliveMonster(); - // If all monsters are dead, exit the loop - if (AbstractDungeon.getMonsters().areMonstersBasicallyDead()) { - break; - } - } - - // If no valid target is available (all monsters are dead), break out of the loop entirely - if (randomTarget == null) { - break; - } - - // Add the card to the player's limbo (temporary play area) - AbstractDungeon.player.limbo.addToBottom(tmp); - tmp.current_x = card.current_x; - tmp.current_y = card.current_y; - tmp.target_x = (Settings.WIDTH / 2.0F - 300.0F * Settings.scale); - tmp.target_y = (Settings.HEIGHT / 2.0F); - - // Calculate the damage for the target - tmp.calculateCardDamage(randomTarget); - - // Add the card to the action manager's card queue, targeting the selected monster - AbstractDungeon.actionManager.cardQueue.add(new com.megacrit.cardcrawl.cards.CardQueueItem(tmp, randomTarget, card.energyOnUse)); + this.addToBot(new PlayTyphoonAction(AbstractDungeon.getCurrRoom().monsters.getRandomMonster((AbstractMonster)null, true, AbstractDungeon.cardRandomRng), true, true)); } } - // Helper function to get a random alive monster - private AbstractMonster getRandomAliveMonster() { - AbstractMonster randomTarget = AbstractDungeon.getMonsters().getRandomMonster(true); - if (randomTarget != null && randomTarget.isDeadOrEscaped()) { - randomTarget = null; // Ensure that the selected monster is alive - } - return randomTarget; - } @Override public void atEndOfTurn(boolean isPlayer) { diff --git a/src/main/java/sneckomod/powers/TyphoonPower.java b/src/main/java/sneckomod/powers/TyphoonPower.java index 5788cb7512..09908d2f8a 100644 --- a/src/main/java/sneckomod/powers/TyphoonPower.java +++ b/src/main/java/sneckomod/powers/TyphoonPower.java @@ -13,11 +13,14 @@ 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); @@ -27,18 +30,13 @@ public class TyphoonPower extends AbstractPower implements CloneablePowerInterfa 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"); - //coding this SUCKED, was butchered code and even after I decided to use gpt it was still insanely broken for hours - //making both versions of the power stack and chain properly, not fizzle randomly, not softlock etc. - //initially, I wanted the typhoon fangs to target the same enemy as the initial card - //(and selecting a random target if the enemy died or if the card was self targeting / aoe etc.) - //but it caused terrible issues with both powers stacking properly and enemies dying mid-chain - //having more than one stack of this at a time is probably going to be very rare anyways, but at least it works? + //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; // Store the number of stacks + this.amount = amount; this.type = PowerType.BUFF; this.isTurnBased = true; @@ -48,89 +46,42 @@ public TyphoonPower(int amount) { this.updateDescription(); } - public boolean isOverflowActive(AbstractCard source) { // Adjusted to take a card parameter - boolean OVERFLOW = false; // Reset overflow state + public boolean isOverflowActive(AbstractCard source) { + boolean OVERFLOW = false; - // Only check for overflow if the card has the OVERFLOW tag if (source.hasTag(SneckoMod.OVERFLOW)) { - // Check if there are more than 5 cards in hand if (AbstractDungeon.player.hand.size() > 5 || (AbstractDungeon.player.hasPower(CheatPower.POWER_ID))) { OVERFLOW = true; } - // If the card purges on use, immediately return false - if ((source instanceof TyphoonFang && source.purgeOnUse)) { - return false; // If the card purges on use, it cannot cause overflow + if (source.hasTag(NO_TYPHOON)) { + return false; } - // Check for the D8 relic 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; // Set overflow if the D8 card is the same as the source card + OVERFLOW = true; } } } } - return OVERFLOW; // Return true or false + return OVERFLOW; } @Override public void onUseCard(AbstractCard card, UseCardAction action) { - // Check if the played card has OVERFLOW active and is not purged - if (!isOverflowActive(card) || card.purgeOnUse) { - return; // Exit if OVERFLOW is not active or the card is purged + if (!isOverflowActive(card) || card.hasTag(NO_TYPHOON)) { + return; } - // Loop through and play as many TyphoonFang cards as the power's amount (stacks) - for (int i = 0; i < this.amount; i++) { - // Create a new instance of TyphoonFang - AbstractCard tmp = new TyphoonFang(); - tmp.purgeOnUse = true; // Set purge on use - tmp.freeToPlayOnce = true; - - AbstractMonster randomTarget = getRandomAliveMonster(); - - // Continuously attempt to find a valid target if the current one is null or dead - while (randomTarget == null) { - randomTarget = getRandomAliveMonster(); - // If all monsters are dead, exit the loop - if (AbstractDungeon.getMonsters().areMonstersBasicallyDead()) { - break; - } - } - - // If no valid target is available (all monsters are dead), break out of the loop entirely - if (randomTarget == null) { - break; + for (int i = 0; i < this.amount; i++) { + this.addToTop(new PlayTyphoonAction(AbstractDungeon.getCurrRoom().monsters.getRandomMonster((AbstractMonster) null, true, AbstractDungeon.cardRandomRng), true, false)); } - - // Add the card to the player's limbo (temporary play area) - AbstractDungeon.player.limbo.addToBottom(tmp); - tmp.current_x = card.current_x; - tmp.current_y = card.current_y; - tmp.target_x = (Settings.WIDTH / 2.0F - 300.0F * Settings.scale); - tmp.target_y = (Settings.HEIGHT / 2.0F); - - // Calculate the damage for the target - tmp.calculateCardDamage(randomTarget); - - // Add the card to the action manager's card queue, targeting the selected monster - AbstractDungeon.actionManager.cardQueue.add(new com.megacrit.cardcrawl.cards.CardQueueItem(tmp, randomTarget, card.energyOnUse)); - } - } - - // Helper function to get a random alive monster - private AbstractMonster getRandomAliveMonster() { - AbstractMonster randomTarget = AbstractDungeon.getMonsters().getRandomMonster(true); - if (randomTarget != null && randomTarget.isDeadOrEscaped()) { - randomTarget = null; // Ensure that the selected monster is alive - } - return randomTarget; } @Override diff --git a/src/main/java/sneckomod/powers/UnendingSupplyPower.java b/src/main/java/sneckomod/powers/UnendingSupplyPower.java index 2e5df70331..5624f17e27 100644 --- a/src/main/java/sneckomod/powers/UnendingSupplyPower.java +++ b/src/main/java/sneckomod/powers/UnendingSupplyPower.java @@ -46,8 +46,7 @@ public UnendingSupplyPower(final int amount) { public void atStartOfTurn() { if (!AbstractDungeon.getMonsters().areMonstersBasicallyDead()) { - this.flash();// - + this.flash(); ArrayList cards = OffclassHelper.getXRandomOffclassCards(this.amount); for (AbstractCard card : cards) { addToBot(new EchoACardAction(card, false)); diff --git a/src/main/java/sneckomod/powers/VenomDebuff.java b/src/main/java/sneckomod/powers/VenomDebuff.java index 352936edf0..7346596435 100644 --- a/src/main/java/sneckomod/powers/VenomDebuff.java +++ b/src/main/java/sneckomod/powers/VenomDebuff.java @@ -56,9 +56,11 @@ public VenomDebuff(AbstractCreature owner, int amount) { @Override public boolean onReceivePower(AbstractPower power, AbstractCreature target, AbstractCreature source) { - 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)); + 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; } diff --git a/src/main/java/sneckomod/relics/BlankCard.java b/src/main/java/sneckomod/relics/BlankCard.java index fc17a7269a..f2df4baa40 100644 --- a/src/main/java/sneckomod/relics/BlankCard.java +++ b/src/main/java/sneckomod/relics/BlankCard.java @@ -1,19 +1,17 @@ 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.AbstractGameAction; -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; -import sneckomod.actions.MuddleAction; import sneckomod.cards.unknowns.AbstractUnknownCard; import java.util.ArrayList; @@ -30,17 +28,19 @@ public class BlankCard extends CustomRelic { 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); possCardsList.removeIf(c -> (c.color == AbstractCard.CardColor.CURSE || c.type == CURSE || c.type == STATUS)); - AbstractCard card2 = possCardsList.get(AbstractDungeon.cardRandomRng.random(possCardsList.size() - 1)).makeStatEquivalentCopy(); + 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; diff --git a/src/main/java/sneckomod/relics/CleanMud.java b/src/main/java/sneckomod/relics/CleanMud.java index 68592d908c..96d09b8e58 100644 --- a/src/main/java/sneckomod/relics/CleanMud.java +++ b/src/main/java/sneckomod/relics/CleanMud.java @@ -2,8 +2,6 @@ import basemod.abstracts.CustomRelic; import com.badlogic.gdx.graphics.Texture; -import com.megacrit.cardcrawl.dungeons.AbstractDungeon; -import gremlin.actions.RemoveRandomDebuffAction; import sneckomod.SneckoMod; import downfall.util.TextureLoader; diff --git a/src/main/java/sneckomod/relics/ConfusingCodex.java b/src/main/java/sneckomod/relics/ConfusingCodex.java index 8a2145ba17..16652a4474 100644 --- a/src/main/java/sneckomod/relics/ConfusingCodex.java +++ b/src/main/java/sneckomod/relics/ConfusingCodex.java @@ -2,25 +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.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 sneckomod.SneckoMod; -import sneckomod.cards.AbstractSneckoCard; import downfall.util.TextureLoader; -import sneckomod.cards.TyphoonFang; import sneckomod.powers.CheatPower; -import java.util.ArrayList; - import static collector.util.Wiz.applyToEnemy; import static collector.util.Wiz.atb; +import static sneckomod.SneckoMod.NO_TYPHOON; public class ConfusingCodex extends CustomRelic { @@ -32,6 +27,8 @@ public ConfusingCodex() { super(ID, IMG, OUTLINE, RelicTier.RARE, LandingSound.MAGICAL); } + //Variables + public static final int AMOUNT = 3; @Override public void onEquip() { @@ -40,32 +37,28 @@ public void onEquip() { public boolean isOverflowActive(AbstractCard source) { - boolean OVERFLOW = false; // Reset overflow state + boolean OVERFLOW = false; - // Only check for overflow if the card has the OVERFLOW tag if (source.hasTag(SneckoMod.OVERFLOW)) { - // Check if there are more than 5 cards in hand if (AbstractDungeon.player.hand.size() > 5 || (AbstractDungeon.player.hasPower(CheatPower.POWER_ID))) { OVERFLOW = true; } - // If the card purges on use, immediately return false - if (source instanceof TyphoonFang && source.purgeOnUse) { - return false; // If the card purges on use, it cannot cause overflow + if (source.hasTag(NO_TYPHOON)) { + return false; } - // Check for the D8 relic 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; // Set overflow if the D8 card is the same as the source card + OVERFLOW = true; } } } } - return OVERFLOW; // Return true or false + return OVERFLOW; } @@ -73,11 +66,10 @@ public boolean isOverflowActive(AbstractCard source) { @Override public void onUseCard(AbstractCard card, UseCardAction action) { if (!isOverflowActive(card)) { - return; } ++this.counter; - if (this.counter % 3 == 0) { + if (this.counter % AMOUNT == 0) { this.counter = 0; AbstractMonster q = AbstractDungeon.getRandomMonster(); if (q != null) { @@ -90,6 +82,6 @@ public void onUseCard(AbstractCard card, UseCardAction action) { } public String getUpdatedDescription() { - return DESCRIPTIONS[0]; + return DESCRIPTIONS[0] + AMOUNT + DESCRIPTIONS[1]; } } diff --git a/src/main/java/sneckomod/relics/D8.java b/src/main/java/sneckomod/relics/D8.java index 7877a815e8..f772cfff08 100644 --- a/src/main/java/sneckomod/relics/D8.java +++ b/src/main/java/sneckomod/relics/D8.java @@ -1,9 +1,11 @@ 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; @@ -12,6 +14,7 @@ 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; @@ -20,7 +23,7 @@ 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")); @@ -32,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); @@ -73,13 +91,13 @@ public void onEquip() { @Override public void onPlayCard(AbstractCard card, AbstractMonster m) { - if (this.card != null && card.uuid.equals(this.card.uuid)) { + if (BottledD8Patch.inD8.get(card)) { if (!(card instanceof TyphoonFang && card.purgeOnUse)) { addToBot(new GainBlockAction(AbstractDungeon.player, 4)); this.flash(); //block tracking } } - if (this.card != null && card.uuid.equals(this.card.uuid) && AbstractDungeon.player.hand.size() <= 5 && !(AbstractDungeon.player.hasPower(CheatPower.POWER_ID))) { + 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 } @@ -105,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 = this.DESCRIPTIONS[2] + FontHelper.colorString(this.card.name, "y") + DESCRIPTIONS[3]; + 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 bdfd2f026d..695b07c9fa 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,13 +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();} + 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/SleevedAce.java b/src/main/java/sneckomod/relics/SleevedAce.java index 0df0975499..abb0d8d53d 100644 --- a/src/main/java/sneckomod/relics/SleevedAce.java +++ b/src/main/java/sneckomod/relics/SleevedAce.java @@ -21,12 +21,15 @@ public class SleevedAce extends CustomRelic { public SleevedAce() { super(ID, IMG, OUTLINE, RelicTier.UNCOMMON, LandingSound.MAGICAL); - this.tips.add(new CardPowerTip(new MarkedCard())); + AbstractCard q = new MarkedCard(); + q.upgrade(); + this.tips.add(new CardPowerTip(q)); } @Override public void atBattleStart() { AbstractCard q = new MarkedCard(); + q.upgrade(); addToBot(new MakeTempCardInHandAction(q)); } diff --git a/src/main/java/sneckomod/relics/SneckoBoss.java b/src/main/java/sneckomod/relics/SneckoBoss.java index 730c85c509..a6d1bcd3bc 100644 --- a/src/main/java/sneckomod/relics/SneckoBoss.java +++ b/src/main/java/sneckomod/relics/SneckoBoss.java @@ -48,7 +48,7 @@ private void openColorSelection() { CardGroup selectionGroup = new CardGroup(CardGroup.CardGroupType.UNSPECIFIED); for (AbstractCard card : CardLibrary.getAllCards()) { - if (card instanceof UnknownClass && (SneckoMod.validColors.contains(((UnknownClass) card).myColor) || SneckoMod.pureSneckoMode || AbstractDungeon.player.hasRelic(PrismaticShard.ID))) { + if (card instanceof UnknownClass && (SneckoMod.validColors.contains(((UnknownClass) card).myColor) || SneckoMod.isPureSneckoModeEnabled() || AbstractDungeon.player.hasRelic(PrismaticShard.ID))) { selectionGroup.addToTop(card.makeCopy()); } } diff --git a/src/main/java/sneckomod/relics/SneckoCommon.java b/src/main/java/sneckomod/relics/SneckoCommon.java index 971d88faa5..fb2f93884c 100644 --- a/src/main/java/sneckomod/relics/SneckoCommon.java +++ b/src/main/java/sneckomod/relics/SneckoCommon.java @@ -13,6 +13,7 @@ import com.megacrit.cardcrawl.relics.ToxicEgg2; import com.megacrit.cardcrawl.rooms.AbstractRoom; import downfall.util.TextureLoader; +import guardian.rewards.GemRewardButRelicRng; import sneckomod.SneckoMod; import sneckomod.cards.unknowns.UnknownClass; import sneckomod.util.ColorfulPowersReward; @@ -35,32 +36,25 @@ public SneckoCommon() { public void onEquip() { ArrayList cardsToReward = new ArrayList<>(); while (cardsToReward.size() < 5) { - AbstractCard newCard = SneckoMod.getOffClassCardMatchingPredicate(c -> - c.type == AbstractCard.CardType.POWER && c.rarity == AbstractCard.CardRarity.UNCOMMON); - + AbstractCard newCard = SneckoMod.getOffClassCardMatchingPredicateRelicRng(c -> c.type == AbstractCard.CardType.POWER && c.rarity == AbstractCard.CardRarity.UNCOMMON); for (AbstractRelic r : AbstractDungeon.player.relics) { r.onPreviewObtainCard(newCard); } - - //newCard.upgrade(); - AbstractDungeon.getCurrRoom().phase = AbstractRoom.RoomPhase.INCOMPLETE; + //AbstractDungeon.getCurrRoom().phase = AbstractRoom.RoomPhase.INCOMPLETE; CardGroup c = new CardGroup(CardGroup.CardGroupType.UNSPECIFIED); - - if (!isDuplicate(cardsToReward, newCard)) { - cardsToReward.add(newCard.makeCopy()); - } - } - AbstractDungeon.cardRewardScreen.open(cardsToReward, null, TEXT[2]); - AbstractDungeon.getCurrRoom().phase = AbstractRoom.RoomPhase.COMPLETE; + if (!isDuplicate(cardsToReward, newCard)) { + cardsToReward.add(newCard.makeCopy()); + } } - + AbstractDungeon.cardRewardScreen.open(cardsToReward, null, ""); + //AbstractDungeon.getCurrRoom().phase = AbstractRoom.RoomPhase.COMPLETE; + } private boolean isDuplicate(ArrayList cardsList, AbstractCard card) { return cardsList.stream().anyMatch(c -> c.cardID.equals(card.cardID)); } - public String getUpdatedDescription() { return this.DESCRIPTIONS[0]; } diff --git a/src/main/java/sneckomod/relics/SneckoSoul.java b/src/main/java/sneckomod/relics/SneckoSoul.java index b92d82887f..04ef46c4ee 100644 --- a/src/main/java/sneckomod/relics/SneckoSoul.java +++ b/src/main/java/sneckomod/relics/SneckoSoul.java @@ -1,15 +1,11 @@ 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.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 hermit.cards.MementoCard; import sneckomod.SneckoMod; import downfall.util.TextureLoader; import sneckomod.cards.SoulRoll; @@ -22,6 +18,7 @@ public class SneckoSoul extends CustomRelic { public SneckoSoul() { super(ID, IMG, OUTLINE, RelicTier.STARTER, LandingSound.MAGICAL); + tips.add(new CardPowerTip(new SoulRoll())); } @Override diff --git a/src/main/java/sneckomod/relics/SuperSneckoSoul.java b/src/main/java/sneckomod/relics/SuperSneckoSoul.java index f6a3c9bca9..21825da432 100644 --- a/src/main/java/sneckomod/relics/SuperSneckoSoul.java +++ b/src/main/java/sneckomod/relics/SuperSneckoSoul.java @@ -1,7 +1,7 @@ package sneckomod.relics; -import basemod.BaseMod; 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.dungeons.AbstractDungeon; @@ -15,19 +15,20 @@ public class SuperSneckoSoul extends CustomRelic { public static final String ID = SneckoMod.makeID("SuperSneckoSoul"); private static final Texture IMG = TextureLoader.getTexture(SneckoMod.makeRelicPath("SuperSneckoSoul.png")); private static final Texture OUTLINE = TextureLoader.getTexture(SneckoMod.makeRelicOutlinePath("SuperSneckoSoul.png")); + public SuperSneckoSoul() { super(ID, IMG, OUTLINE, RelicTier.BOSS, LandingSound.MAGICAL); this.counter = 0; + tips.add(new CardPowerTip(new SoulRoll())); } @Override - public void atTurnStart() { - grayscale = false; + public void atBattleStart() { + this.counter = 0; } @Override public void onVictory() { - grayscale = false; this.counter = 0; } diff --git a/src/main/java/sneckomod/relics/UnknownEgg.java b/src/main/java/sneckomod/relics/UnknownEgg.java index a81463110a..4fc10fe21e 100644 --- a/src/main/java/sneckomod/relics/UnknownEgg.java +++ b/src/main/java/sneckomod/relics/UnknownEgg.java @@ -38,7 +38,7 @@ public void onEquip() { } } - Collections.shuffle(upgradableCards, new Random(AbstractDungeon.miscRng.randomLong())); + Collections.shuffle(upgradableCards, new Random(AbstractDungeon.relicRng.randomLong())); if (!upgradableCards.isEmpty()) { if (upgradableCards.size() == 1) { ((AbstractCard) upgradableCards.get(0)).upgrade(); diff --git a/src/main/java/sneckomod/util/ArchetypeHelper.java b/src/main/java/sneckomod/util/ArchetypeHelper.java index b6a1deac33..b4524eed49 100644 --- a/src/main/java/sneckomod/util/ArchetypeHelper.java +++ b/src/main/java/sneckomod/util/ArchetypeHelper.java @@ -48,7 +48,10 @@ public static boolean givesEnergy(AbstractCard card) { if (Arrays.stream(orbCodes).anyMatch(s -> card.rawDescription.contains(s))) { return true; } - //TODO should probably also check if it actually spawns the card + + //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; } diff --git a/src/main/java/sneckomod/util/ColorfulPowersReward.java b/src/main/java/sneckomod/util/ColorfulPowersReward.java index d0e729ab5d..a77e91a4ab 100644 --- a/src/main/java/sneckomod/util/ColorfulPowersReward.java +++ b/src/main/java/sneckomod/util/ColorfulPowersReward.java @@ -32,8 +32,8 @@ private ArrayList getUpgradedUncommonCards() { while (selectedCards.size() < 5) { AbstractCard card = SneckoMod.getOffClassCardMatchingPredicate(c -> c.type == AbstractCard.CardType.POWER && c.rarity == AbstractCard.CardRarity.UNCOMMON); - card.upgrade(); if (!isDuplicate(selectedCards, card)) { + card.upgrade(); selectedCards.add(card); } } @@ -45,7 +45,9 @@ private ArrayList getUpgradedUncommonCards() { private ArrayList getDebugFallbackCards() { ArrayList debugCards = new ArrayList<>(); for (AbstractCard card : CardLibrary.getAllCards()) { - debugCards.add(card.makeCopy()); + if (!card.tags.contains(SneckoMod.BANNEDFORSNECKO) && card.color != AbstractDungeon.player.getCardColor() && card.type == AbstractCard.CardType.POWER && card.rarity == AbstractCard.CardRarity.UNCOMMON) { + debugCards.add(card.makeCopy()); + } } return debugCards; } diff --git a/src/main/java/sneckomod/util/ColorfulRareReward.java b/src/main/java/sneckomod/util/ColorfulRareReward.java index be2c8b1866..1f67ee8c85 100644 --- a/src/main/java/sneckomod/util/ColorfulRareReward.java +++ b/src/main/java/sneckomod/util/ColorfulRareReward.java @@ -42,7 +42,7 @@ private ArrayList getUpgradedUncommonCards() { // 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(); + AbstractCard card = availableCards.get(AbstractDungeon.relicRng.random(0, availableCards.size() - 1)).makeCopy(); if (!isDuplicate(selectedCards, card)) { selectedCards.add(card); } diff --git a/src/main/java/theHexaghost/GhostflameHelper.java b/src/main/java/theHexaghost/GhostflameHelper.java index de494f32ad..080cec1610 100644 --- a/src/main/java/theHexaghost/GhostflameHelper.java +++ b/src/main/java/theHexaghost/GhostflameHelper.java @@ -38,13 +38,15 @@ public static void init() { 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(); -// } - + 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.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(); + } } public static AbstractGhostflame getNextGhostFlame() { @@ -101,7 +103,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 ead6420f44..5884eb1778 100644 --- a/src/main/java/theHexaghost/HexaMod.java +++ b/src/main/java/theHexaghost/HexaMod.java @@ -58,6 +58,8 @@ import java.util.ArrayList; import java.util.Collection; +import static downfall.downfallMod.ShowCharModes; +import static downfall.downfallMod.SixSealsQuest; import static downfall.patches.EvilModeCharacterSelect.evilMode; import static theHexaghost.GhostflameHelper.*; import static theHexaghost.TheHexaghost.oscillarator; @@ -188,6 +190,10 @@ public static String makeID(String idText) { } + public static boolean isHexaghostSealsEnabled(){ + return SixSealsQuest && ShowCharModes; + } + private static void autoAddCards() throws URISyntaxException, IllegalAccessException, InstantiationException, NotFoundException, ClassNotFoundException { ClassFinder finder = new ClassFinder(); @@ -276,18 +282,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); -// BanSharedContentPatch.registerRunLockedPotion(TheHexaghost.Enums.THE_SPIRIT, SoulburnPotion.POTION_ID); - - if (Loader.isModLoaded("widepotions")) { - WidePotionsMod.whitelistSimplePotion(EctoCoolerPotion.POTION_ID); - WidePotionsMod.whitelistSimplePotion(SoulburnPotion.POTION_ID); - WidePotionsMod.whitelistSimplePotion(DoubleChargePotion.POTION_ID); - WidePotionsMod.whitelistSimplePotion(InfernoChargePotion.POTION_ID); - } + } @Override @@ -356,6 +351,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; } @@ -470,11 +466,11 @@ public void receivePostInitialize() { .bonusCondition(() -> (AbstractDungeon.cardRandomRng.random(0, 2) == 2)) .create()); - BaseMod.addEvent(new AddEventParams.Builder(SealChamber.ID, SealChamber.class) //Event ID// - .spawnCondition(() -> !AbstractDungeon.player.hasRelic(TheBrokenSeal.ID)) - //Event Character// - .playerClass(TheHexaghost.Enums.THE_SPIRIT) - .create()); +// BaseMod.addEvent(new AddEventParams.Builder(SealChamber.ID, SealChamber.class) //Event ID// +// .spawnCondition(() -> !AbstractDungeon.player.hasRelic(TheBrokenSeal.ID) && !hasAllSeals()) +// //Event Character// +// .playerClass(TheHexaghost.Enums.THE_SPIRIT) +// .create()); BaseMod.addEvent(new AddEventParams.Builder(HexaFalling.ID, HexaFalling.class) //Event ID// //Event Character// @@ -504,6 +500,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/actions/DiscoverEtherealAction.java b/src/main/java/theHexaghost/actions/DiscoverEtherealAction.java index 7df438ad02..385d54f369 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 7e6fe06bf3..4bd99a1dc0 100644 --- a/src/main/java/theHexaghost/actions/DrawEtherealAction.java +++ b/src/main/java/theHexaghost/actions/DrawEtherealAction.java @@ -11,6 +11,7 @@ import java.util.Iterator; +@Deprecated public class DrawEtherealAction extends AbstractGameAction{ public AbstractPlayer p; diff --git a/src/main/java/theHexaghost/actions/LimboToHandAction.java b/src/main/java/theHexaghost/actions/LimboToHandAction.java index 9bc7a75e91..0e60f4b701 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 ce7f39f6ba..fefc6a52b5 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 0000000000..e0fe9ae3dc --- /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 0000000000..f6d6b2c3af --- /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 15cc9dc8bb..ed08839c3b 100644 --- a/src/main/java/theHexaghost/actions/RecurringNightmareAction.java +++ b/src/main/java/theHexaghost/actions/RecurringNightmareAction.java @@ -2,11 +2,14 @@ import basemod.BaseMod; 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.core.CardCrawlGame; import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.vfx.cardManip.ShowCardAndAddToDiscardEffect; +import hermit.util.Wiz; import theHexaghost.cards.RecurringNightmare; import java.util.ArrayList; @@ -51,7 +54,12 @@ public void update() { if (canExhume.size() <= amount) { for (AbstractCard c : canExhume) { c.unfadeOut(); - this.p.hand.addToHand(c); + if (Wiz.hand().size() < BaseMod.MAX_HAND_SIZE) { + this.p.hand.addToHand(c); + } else { + AbstractDungeon.player.createHandIsFullDialog(); + this.p.discardPile.addToTop(c); + } this.p.exhaustPile.removeCard(c); c.unhover(); c.fadingOut = false; diff --git a/src/main/java/theHexaghost/cards/BacktrackSmack.java b/src/main/java/theHexaghost/cards/BacktrackSmack.java index 48c1635974..79c3a6ca01 100644 --- a/src/main/java/theHexaghost/cards/BacktrackSmack.java +++ b/src/main/java/theHexaghost/cards/BacktrackSmack.java @@ -12,7 +12,7 @@ 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); diff --git a/src/main/java/theHexaghost/cards/BurningQuestion.java b/src/main/java/theHexaghost/cards/BurningQuestion.java index 9d71259f62..6ab181db0a 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; @@ -44,6 +45,14 @@ public void upgrade() { } } + @Override + public float getTitleFontSize() { + if(Settings.language != Settings.GameLanguage.ENG) { + return 25.0F; + } else { + return 23.0F; + } + } // 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 @@ -55,12 +64,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/EmpoweredFlame.java b/src/main/java/theHexaghost/cards/EmpoweredFlame.java index 2d59f0acb3..b5b03252fa 100644 --- a/src/main/java/theHexaghost/cards/EmpoweredFlame.java +++ b/src/main/java/theHexaghost/cards/EmpoweredFlame.java @@ -1,6 +1,7 @@ package theHexaghost.cards; import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.monsters.AbstractMonster; import sneckomod.SneckoMod; import theHexaghost.HexaMod; @@ -10,7 +11,7 @@ public class EmpoweredFlame extends AbstractHexaCard { public final static String ID = makeID("EmpoweredFlame"); - private static final int MAGIC = 2; + private static final int MAGIC = 1; private static final int UPG_MAGIC = 1; public EmpoweredFlame() { @@ -31,4 +32,13 @@ public void upgrade() { upgradeMagicNumber(UPG_MAGIC); } } + + @Override + public float getTitleFontSize() { + if(Settings.language != Settings.GameLanguage.ENG) { + return 25.0F; + } else { + return 22.0F; + } + } } \ No newline at end of file diff --git a/src/main/java/theHexaghost/cards/EtherStep.java b/src/main/java/theHexaghost/cards/EtherStep.java index c7584fcdc3..a0d8ab90a8 100644 --- a/src/main/java/theHexaghost/cards/EtherStep.java +++ b/src/main/java/theHexaghost/cards/EtherStep.java @@ -1,11 +1,17 @@ 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; @@ -27,9 +33,9 @@ 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() { @@ -54,6 +60,23 @@ public void afterlife() { 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(); + } + } + if (AbstractDungeon.player.hasPower(VigorPower.POWER_ID)) { + 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 b77dd6a1fc..6dec95b1f2 100644 --- a/src/main/java/theHexaghost/cards/EtherealExpedition.java +++ b/src/main/java/theHexaghost/cards/EtherealExpedition.java @@ -105,7 +105,7 @@ public void upgrade() { @Override public void initializeDescription() { super.initializeDescription(); - if(Settings.language != Settings.GameLanguage.ZHS) { + if(Settings.language != Settings.GameLanguage.ZHS && Settings.language != Settings.GameLanguage.ZHT) { this.keywords.add(downfallMod.keywords_and_proper_names.get("afterlife")); } } diff --git a/src/main/java/theHexaghost/cards/ExtraCrispy.java b/src/main/java/theHexaghost/cards/ExtraCrispy.java index f52bab4c3d..c408bfe8bf 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/Firestarter.java b/src/main/java/theHexaghost/cards/Firestarter.java index faf7695667..8de5a5e315 100644 --- a/src/main/java/theHexaghost/cards/Firestarter.java +++ b/src/main/java/theHexaghost/cards/Firestarter.java @@ -11,8 +11,8 @@ public class Firestarter extends AbstractHexaCard { public Firestarter() { super(ID, 1, CardType.ATTACK, CardRarity.COMMON, CardTarget.ALL_ENEMY); - baseDamage = 6; - baseBurn = burn = 6; + baseDamage = 5; + baseBurn = burn = 5; isMultiDamage = true; HexaMod.loadJokeCardImage(this, "Firestarter.png"); } diff --git a/src/main/java/theHexaghost/cards/Floatwork.java b/src/main/java/theHexaghost/cards/Floatwork.java index a4f06b4e92..28566705f1 100644 --- a/src/main/java/theHexaghost/cards/Floatwork.java +++ b/src/main/java/theHexaghost/cards/Floatwork.java @@ -18,7 +18,7 @@ public class Floatwork extends AbstractHexaCard implements HexaPurpleTextInterfa public Floatwork() { super(ID, 1, CardType.POWER, CardRarity.UNCOMMON, CardTarget.SELF); baseBurn = burn = 1; - baseMagicNumber = magicNumber = 3; + baseMagicNumber = magicNumber = 2; // baseBlock = 5; isEthereal = true; tags.add(HexaMod.AFTERLIFE); @@ -47,7 +47,7 @@ public void upgrade() { if (!upgraded) { upgradeName(); // upgradeBlock(2); - upgradeMagicNumber(1); + upgradeMagicNumber(2); } } @@ -62,12 +62,13 @@ public void initializeDescription() { String afterlife_name = downfallMod.keywords_and_proper_names.get("afterlife"); this.keywords.add(afterlife_name); - if (Settings.language == Settings.GameLanguage.ZHS){ + if (Settings.language == Settings.GameLanguage.ZHS || Settings.language == Settings.GameLanguage.ZHT){ this.keywords.add("多层护甲"); }else if (Settings.language == Settings.GameLanguage.RUS){ this.keywords.add("plated"); }else{ - this.keywords.add("plated"); + String blur_name = downfallMod.keywords_and_proper_names.get("plated"); + this.keywords.add(blur_name); } diff --git a/src/main/java/theHexaghost/cards/GhostLash.java b/src/main/java/theHexaghost/cards/GhostLash.java index efe440a87e..ea1971c636 100644 --- a/src/main/java/theHexaghost/cards/GhostLash.java +++ b/src/main/java/theHexaghost/cards/GhostLash.java @@ -1,10 +1,16 @@ 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; @@ -14,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); @@ -96,12 +100,31 @@ public void afterlife() { 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(); + } + } + + if (AbstractDungeon.player.hasPower(VigorPower.POWER_ID)) { + 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/GhostOfSpireFuture.java b/src/main/java/theHexaghost/cards/GhostOfSpireFuture.java index 5f0a522cfc..13e1f93208 100644 --- a/src/main/java/theHexaghost/cards/GhostOfSpireFuture.java +++ b/src/main/java/theHexaghost/cards/GhostOfSpireFuture.java @@ -10,7 +10,7 @@ public class GhostOfSpireFuture extends AbstractHexaCard { public final static String ID = makeID("IntoShadow"); //into shadow public GhostOfSpireFuture() { - super(ID, 2, CardType.POWER, CardRarity.RARE, CardTarget.SELF); + super(ID, 3, CardType.POWER, CardRarity.RARE, CardTarget.SELF); magicNumber = baseMagicNumber = 1; this.isEthereal = true; this.tags.add(SneckoMod.BANNEDFORSNECKO); @@ -24,9 +24,10 @@ public void use(AbstractPlayer p, AbstractMonster m) { public void upgrade() { if (!upgraded) { upgradeName(); - this.isEthereal = false; - rawDescription = UPGRADE_DESCRIPTION; - initializeDescription(); + upgradeBaseCost(2); + //this.isEthereal = false; + //rawDescription = UPGRADE_DESCRIPTION; + //initializeDescription(); } } } diff --git a/src/main/java/theHexaghost/cards/GhostOfSpirePast.java b/src/main/java/theHexaghost/cards/GhostOfSpirePast.java index 9cbc55c92c..596f6faabb 100644 --- a/src/main/java/theHexaghost/cards/GhostOfSpirePast.java +++ b/src/main/java/theHexaghost/cards/GhostOfSpirePast.java @@ -18,7 +18,7 @@ public class GhostOfSpirePast extends AbstractHexaCard { private static final int MAGIC = 1; public GhostOfSpirePast() { - super(ID, 2, CardType.POWER, CardRarity.UNCOMMON, CardTarget.SELF); + super(ID, 1, CardType.POWER, CardRarity.UNCOMMON, CardTarget.SELF); baseMagicNumber = magicNumber = 1; tags.add(HexaMod.GHOSTWHEELCARD); this.tags.add(SneckoMod.BANNEDFORSNECKO); @@ -33,7 +33,9 @@ public void use(AbstractPlayer p, AbstractMonster m) { 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/theHexaghost/cards/GhostOfSpirePresent.java b/src/main/java/theHexaghost/cards/GhostOfSpirePresent.java index d8ebd05b65..3ede8e1012 100644 --- a/src/main/java/theHexaghost/cards/GhostOfSpirePresent.java +++ b/src/main/java/theHexaghost/cards/GhostOfSpirePresent.java @@ -16,7 +16,7 @@ public class GhostOfSpirePresent extends AbstractHexaCard { private static final int MAGIC = 1; public GhostOfSpirePresent() { - super(ID, 1, CardType.POWER, CardRarity.RARE, CardTarget.SELF); + super(ID, 2, CardType.POWER, CardRarity.RARE, CardTarget.SELF); tags.add(HexaMod.GHOSTWHEELCARD); this.tags.add(SneckoMod.BANNEDFORSNECKO); HexaMod.loadJokeCardImage(this, "GhostOfSpirePresent.png"); @@ -30,7 +30,7 @@ public void use(AbstractPlayer p, AbstractMonster m) { public void upgrade() { if (!upgraded) { upgradeName(); - upgradeBaseCost(0); + upgradeBaseCost(1); } } } \ No newline at end of file diff --git a/src/main/java/theHexaghost/cards/GhostShield.java b/src/main/java/theHexaghost/cards/GhostShield.java index 2d9f9010c8..6ae4e7bda6 100644 --- a/src/main/java/theHexaghost/cards/GhostShield.java +++ b/src/main/java/theHexaghost/cards/GhostShield.java @@ -4,6 +4,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.BlurPower; import downfall.downfallMod; @@ -15,7 +16,7 @@ public class GhostShield extends AbstractHexaCard implements HexaPurpleTextInter public final static String ID = makeID("GhostShield"); - private static final int BLOCK = 6; + private static final int BLOCK = 5; private static final int MAGIC = 1; private static final int UPG_BLOCK = 3; @@ -25,7 +26,7 @@ public GhostShield() { baseMagicNumber = magicNumber = MAGIC; isEthereal = true; tags.add(HexaMod.AFTERLIFE); - expansionContentMod.loadJokeCardImage((AbstractCard)this, "GhostShield.png"); + HexaMod.loadJokeCardImage(this, "GhostShield.png"); } public void use(AbstractPlayer p, AbstractMonster m) { @@ -55,15 +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{ - if (Settings.language != Settings.GameLanguage.JPN) { - this.keywords.add("block"); + 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 d545876556..fb1dd46cc6 100644 --- a/src/main/java/theHexaghost/cards/GhostflameBarrier.java +++ b/src/main/java/theHexaghost/cards/GhostflameBarrier.java @@ -5,27 +5,16 @@ import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.monsters.AbstractMonster; -import sneckomod.SneckoMod; import theHexaghost.HexaMod; 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"); } @@ -45,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/GiftsFromTheDead.java b/src/main/java/theHexaghost/cards/GiftsFromTheDead.java index 173517b8d0..f9422a6e3a 100644 --- a/src/main/java/theHexaghost/cards/GiftsFromTheDead.java +++ b/src/main/java/theHexaghost/cards/GiftsFromTheDead.java @@ -1,6 +1,7 @@ package theHexaghost.cards; import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.monsters.AbstractMonster; import theHexaghost.HexaMod; import theHexaghost.powers.GiftsFromTheDeadPower; @@ -25,4 +26,14 @@ public void upgrade() { upgradeBaseCost(1); } } + + @Override + public float getTitleFontSize() { + if(Settings.language != Settings.GameLanguage.ENG) { + return 25.0F; + } else { + return 22.0F; + } + } + } \ No newline at end of file diff --git a/src/main/java/theHexaghost/cards/HauntingEcho.java b/src/main/java/theHexaghost/cards/HauntingEcho.java index d89b5cf73a..65cdd32be1 100644 --- a/src/main/java/theHexaghost/cards/HauntingEcho.java +++ b/src/main/java/theHexaghost/cards/HauntingEcho.java @@ -18,11 +18,11 @@ public class HauntingEcho extends AbstractHexaCard { public final static String ID = makeID("HauntingEcho"); - private static final int DAMAGE = 8; + private static final int DAMAGE = 7; private static final int UPG_DAMAGE = 3; public HauntingEcho() { - super(ID, 1, CardType.ATTACK, CardRarity.COMMON, CardTarget.SELF_AND_ENEMY); + super(ID, 1, CardType.ATTACK, CardRarity.COMMON, CardTarget.ENEMY); baseDamage = DAMAGE; tags.add(HexaMod.GHOSTWHEELCARD); this.tags.add(SneckoMod.BANNEDFORSNECKO); diff --git a/src/main/java/theHexaghost/cards/HeatShield.java b/src/main/java/theHexaghost/cards/HeatShield.java index 225d0490a6..60f6081470 100644 --- a/src/main/java/theHexaghost/cards/HeatShield.java +++ b/src/main/java/theHexaghost/cards/HeatShield.java @@ -57,7 +57,7 @@ public void calculateCardDamage(AbstractMonster mo) { super.calculateCardDamage(mo); baseBlock = real_baseBlock; this.isBlockModified = block != baseBlock; - if(Settings.language == Settings.GameLanguage.ZHS){ + if(Settings.language == Settings.GameLanguage.ZHS || Settings.language == Settings.GameLanguage.ZHT){ this.rawDescription = DESCRIPTION + EXTENDED_DESCRIPTION[0]; }else{ this.rawDescription = EXTENDED_DESCRIPTION[0] + DESCRIPTION; diff --git a/src/main/java/theHexaghost/cards/HexaLevel.java b/src/main/java/theHexaghost/cards/HexaLevel.java index 915af9cb5f..a8e96f1c6f 100644 --- a/src/main/java/theHexaghost/cards/HexaLevel.java +++ b/src/main/java/theHexaghost/cards/HexaLevel.java @@ -33,7 +33,7 @@ public void use(AbstractPlayer p, AbstractMonster m) { public void upgrade() { if (!upgraded) { upgradeName(); - + //upgradeMagicNumber(1); rawDescription = UPGRADE_DESCRIPTION; initializeDescription(); } diff --git a/src/main/java/theHexaghost/cards/Hexaguard.java b/src/main/java/theHexaghost/cards/Hexaguard.java index 4ed8712b5f..e598b62f2a 100644 --- a/src/main/java/theHexaghost/cards/Hexaguard.java +++ b/src/main/java/theHexaghost/cards/Hexaguard.java @@ -4,6 +4,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 downfall.downfallMod; import theHexaghost.HexaMod; @@ -51,14 +52,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{ - if (Settings.language != Settings.GameLanguage.JPN) { - this.keywords.add("block"); - } + this.keywords.add(GameDictionary.BLOCK.NAMES[0].toLowerCase()); } - } -} \ No newline at end of file + } \ No newline at end of file diff --git a/src/main/java/theHexaghost/cards/LingeringShades.java b/src/main/java/theHexaghost/cards/LingeringShades.java index 7c748417a2..8b753c9dc8 100644 --- a/src/main/java/theHexaghost/cards/LingeringShades.java +++ b/src/main/java/theHexaghost/cards/LingeringShades.java @@ -2,6 +2,7 @@ import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.monsters.AbstractMonster; import sneckomod.SneckoMod; import theHexaghost.HexaMod; @@ -14,7 +15,7 @@ public class LingeringShades extends AbstractHexaCard{ public LingeringShades() { super(ID, 1, AbstractCard.CardType.SKILL, AbstractCard.CardRarity.RARE, AbstractCard.CardTarget.ENEMY); - baseBurn = burn = 11; + baseBurn = burn = 12; HexaMod.loadJokeCardImage(this, "LingeringShades.png"); tags.add(HexaMod.GHOSTWHEELCARD); this.tags.add(SneckoMod.BANNEDFORSNECKO); @@ -33,4 +34,13 @@ public void upgrade() { } } + @Override + public float getTitleFontSize() { + if(Settings.language != Settings.GameLanguage.ENG) { + return 19.0F; + } else { + return 23.0F; + } + } + } diff --git a/src/main/java/theHexaghost/cards/NecessarySacrifice.java b/src/main/java/theHexaghost/cards/NecessarySacrifice.java index b373c58f68..caf69be1af 100644 --- a/src/main/java/theHexaghost/cards/NecessarySacrifice.java +++ b/src/main/java/theHexaghost/cards/NecessarySacrifice.java @@ -14,6 +14,7 @@ public class NecessarySacrifice extends AbstractHexaCard { public NecessarySacrifice() { super(ID, 0, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); + HexaMod.loadJokeCardImage(this, "NecessarySacrifice.png"); } diff --git a/src/main/java/theHexaghost/cards/NightmareGuise.java b/src/main/java/theHexaghost/cards/NightmareGuise.java index a5dc71b973..c3a9d628c8 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 = 3; + baseBlock = 4; isEthereal = true; cardsToPreview = new ShadowGuise(); tags.add(HexaMod.AFTERLIFE); @@ -40,6 +40,7 @@ public void afterlife() { public void upgrade() { if (!upgraded) { upgradeName(); + upgradeBlock(1); this.cardsToPreview.upgrade(); rawDescription = cardStrings.UPGRADE_DESCRIPTION; initializeDescription(); diff --git a/src/main/java/theHexaghost/cards/NightmareStrike.java b/src/main/java/theHexaghost/cards/NightmareStrike.java index f9a32f1daf..976add55e2 100644 --- a/src/main/java/theHexaghost/cards/NightmareStrike.java +++ b/src/main/java/theHexaghost/cards/NightmareStrike.java @@ -5,6 +5,7 @@ import com.megacrit.cardcrawl.actions.common.MakeTempCardInHandAction; 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.monsters.AbstractMonster; import downfall.downfallMod; @@ -17,7 +18,7 @@ public class NightmareStrike extends AbstractHexaCard implements HexaPurpleTextI public NightmareStrike() { super(ID, 1, CardType.ATTACK, CardRarity.COMMON, CardTarget.ENEMY); - baseDamage = 3; + baseDamage = 4; isEthereal = true; cardsToPreview = new ShadowStrike(); tags.add(CardTags.STRIKE); @@ -44,11 +45,21 @@ public void upgrade() { if (!upgraded) { upgradeName(); this.cardsToPreview.upgrade(); + upgradeDamage(1); rawDescription = cardStrings.UPGRADE_DESCRIPTION; initializeDescription(); } } + @Override + public float getTitleFontSize() { + if(Settings.language != Settings.GameLanguage.ENG) { + return 25.0F; + } else { + return 23.0F; + } + } + // 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 diff --git a/src/main/java/theHexaghost/cards/OpposingAction.java b/src/main/java/theHexaghost/cards/OpposingAction.java index 8aa9405a26..e31b7acb4b 100644 --- a/src/main/java/theHexaghost/cards/OpposingAction.java +++ b/src/main/java/theHexaghost/cards/OpposingAction.java @@ -22,28 +22,12 @@ public OpposingAction() { } 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(2)); - 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/PhantomFireball.java b/src/main/java/theHexaghost/cards/PhantomFireball.java index 3ab1d31837..d9cd609cd1 100644 --- a/src/main/java/theHexaghost/cards/PhantomFireball.java +++ b/src/main/java/theHexaghost/cards/PhantomFireball.java @@ -7,6 +7,7 @@ import com.megacrit.cardcrawl.actions.common.RemoveSpecificPowerAction; 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.monsters.AbstractMonster; import com.megacrit.cardcrawl.powers.AbstractPower; @@ -68,6 +69,15 @@ public void triggerOnGlowCheck() { } } + @Override + public float getTitleFontSize() { + if(Settings.language != Settings.GameLanguage.ENG) { + return 19.0F; + } else { + return 23.0F; + } + } + public void upgrade() { if (!upgraded) { upgradeName(); diff --git a/src/main/java/theHexaghost/cards/PowerFromBeyond.java b/src/main/java/theHexaghost/cards/PowerFromBeyond.java index b26ef7d420..9351fe9acd 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 8901762908..40e85c31d0 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 = 11; - baseMagicNumber = magicNumber = 3; + super(ID, 2, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); + baseDamage = damage = 14; + 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,13 +48,12 @@ public void update() { this.isDone = true; } }); -// applyToSelf(new RadiantPower(magicNumber)); } public void upgrade() { if (!upgraded) { upgradeName(); - upgradeDamage(3); + upgradeDamage(4); upgradeMagicNumber(1); } } diff --git a/src/main/java/theHexaghost/cards/RainOfEmbers.java b/src/main/java/theHexaghost/cards/RainOfEmbers.java index 72a257cc02..3aff3600be 100644 --- a/src/main/java/theHexaghost/cards/RainOfEmbers.java +++ b/src/main/java/theHexaghost/cards/RainOfEmbers.java @@ -16,7 +16,7 @@ public class RainOfEmbers extends AbstractHexaCard { public RainOfEmbers() { super(ID, -1, CardType.ATTACK, CardRarity.UNCOMMON, CardTarget.ENEMY); - baseDamage = 5; + baseDamage = 6; // baseBurn = burn = 6; baseMagicNumber = magicNumber = 1; HexaMod.loadJokeCardImage(this, "RainOfEmbers.png"); @@ -26,21 +26,21 @@ 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 { + // 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)); - } + // } } public void upgrade() { if (!upgraded) { upgradeName(); - rawDescription = UPGRADE_DESCRIPTION; - initializeDescription(); -// upgradeDamage(3); + // rawDescription = UPGRADE_DESCRIPTION; +// initializeDescription(); + upgradeDamage(3); // upgradeBurn(2); } } diff --git a/src/main/java/theHexaghost/cards/RecurringNightmare.java b/src/main/java/theHexaghost/cards/RecurringNightmare.java index 99f49d91e1..8ba8c2af48 100644 --- a/src/main/java/theHexaghost/cards/RecurringNightmare.java +++ b/src/main/java/theHexaghost/cards/RecurringNightmare.java @@ -1,6 +1,7 @@ package theHexaghost.cards; import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.monsters.AbstractMonster; import sneckomod.SneckoMod; import theHexaghost.HexaMod; @@ -13,12 +14,12 @@ public class RecurringNightmare extends AbstractHexaCard { public final static String ID = makeID("NightmareVision"); public RecurringNightmare() { - super(ID, 0, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); + super(ID, 1, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); exhaust = true; baseMagicNumber = magicNumber = 1; tags.add(HexaMod.GHOSTWHEELCARD); this.tags.add(SneckoMod.BANNEDFORSNECKO); -// tags.add(CardTags.HEALING); + this.tags.add(CardTags.HEALING); HexaMod.loadJokeCardImage(this, "RecurringNightmare.png"); } @@ -30,9 +31,19 @@ public void use(AbstractPlayer p, AbstractMonster m) { public void upgrade() { if (!upgraded) { upgradeName(); + //upgradeBaseCost(0); upgradeMagicNumber(1); rawDescription = UPGRADE_DESCRIPTION; initializeDescription(); } } + + @Override + public float getTitleFontSize() { + if(Settings.language != Settings.GameLanguage.ENG) { + return 19.0F; + } else { + return 23.0F; + } + } } diff --git a/src/main/java/theHexaghost/cards/Sear.java b/src/main/java/theHexaghost/cards/Sear.java index ee02ce16b3..fa9cb661bd 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 e0ca8dc71f..ef50cb40b4 100644 --- a/src/main/java/theHexaghost/cards/SeventhEye.java +++ b/src/main/java/theHexaghost/cards/SeventhEye.java @@ -6,6 +6,7 @@ import com.megacrit.cardcrawl.monsters.AbstractMonster; import sneckomod.SneckoMod; import theHexaghost.HexaMod; +import theHexaghost.actions.RandomFlameAction; public class SeventhEye extends AbstractHexaCard { diff --git a/src/main/java/theHexaghost/cards/ShadowGuise.java b/src/main/java/theHexaghost/cards/ShadowGuise.java index 2e8b7d32b3..fe6e3e6c96 100644 --- a/src/main/java/theHexaghost/cards/ShadowGuise.java +++ b/src/main/java/theHexaghost/cards/ShadowGuise.java @@ -23,7 +23,7 @@ public class ShadowGuise extends AbstractHexaCard { //Shadow Guise public ShadowGuise(AbstractCard parent) { super(ID, 0, CardType.SKILL, CardRarity.SPECIAL, CardTarget.SELF, CardColor.COLORLESS); - baseBlock = 5; + baseBlock = 4; selfRetain = true; exhaust = true; // setParent(parent); @@ -68,7 +68,7 @@ public void use(AbstractPlayer p, AbstractMonster m) { public void upgrade() { if (!upgraded) { upgradeName(); - upgradeBlock(3); + upgradeBlock(2); } } diff --git a/src/main/java/theHexaghost/cards/ShadowStrike.java b/src/main/java/theHexaghost/cards/ShadowStrike.java index 60894d2bb5..424ca04fa9 100644 --- a/src/main/java/theHexaghost/cards/ShadowStrike.java +++ b/src/main/java/theHexaghost/cards/ShadowStrike.java @@ -20,7 +20,7 @@ public class ShadowStrike extends AbstractHexaCard { public ShadowStrike(AbstractCard parent) { super(ID, 0, CardType.ATTACK, CardRarity.SPECIAL, CardTarget.ENEMY, CardColor.COLORLESS); - baseDamage = 7; + baseDamage = 4; selfRetain = true; exhaust = true; // cardsToPreview = new NightmareGuise(); @@ -40,7 +40,7 @@ public void use(AbstractPlayer p, AbstractMonster m) { public void upgrade() { if (!upgraded) { upgradeName(); - upgradeDamage(3); + upgradeDamage(2); } } diff --git a/src/main/java/theHexaghost/cards/SpectersWail.java b/src/main/java/theHexaghost/cards/SpectersWail.java index dc538e0c4a..08f791ff8a 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,7 +65,23 @@ public void afterlife() { }else { AbstractDungeon.actionManager.addToBottom(new DamageAllEnemiesAction(p, DamageInfo.createDamageMatrix(this.baseDamage), DamageInfo.DamageType.NORMAL, AbstractGameAction.AttackEffect.FIRE)); } - atb(new RemoveSpecificPowerAction(AbstractDungeon.player, AbstractDungeon.player, VigorPower.POWER_ID)); + + if (AbstractDungeon.player.hasPower(GladiatorFormPower.POWER_ID)) { + GladiatorFormPower revengePower = (GladiatorFormPower) AbstractDungeon.player.getPower(GladiatorFormPower.POWER_ID); + + if (revengePower != null) { + revengePower.onSpecificTriggerBranch(); + } + } + if (AbstractDungeon.player.hasPower(VigorPower.POWER_ID)) { + 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/SpectralAdrenaline.java b/src/main/java/theHexaghost/cards/SpectralAdrenaline.java index 74af2fe9a3..b180bdfddd 100644 --- a/src/main/java/theHexaghost/cards/SpectralAdrenaline.java +++ b/src/main/java/theHexaghost/cards/SpectralAdrenaline.java @@ -16,7 +16,7 @@ public class SpectralAdrenaline extends AbstractHexaCard { public final static String ID = makeID("BrightRitual"); public SpectralAdrenaline() { - super(ID, 1, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); + super(ID, 2, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.SELF); exhaust = true; tags.add(HexaMod.GHOSTWHEELCARD); this.tags.add(SneckoMod.BANNEDFORSNECKO); @@ -43,7 +43,7 @@ public void update() { public void upgrade() { if (!upgraded) { upgradeName(); - upgradeBaseCost(0); + upgradeBaseCost(1); } } } \ No newline at end of file diff --git a/src/main/java/theHexaghost/cards/SpectralGrace.java b/src/main/java/theHexaghost/cards/SpectralGrace.java index a42d869926..1514cfab35 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 a820df0dd2..71e9e4dff5 100644 --- a/src/main/java/theHexaghost/cards/SpectralSpark.java +++ b/src/main/java/theHexaghost/cards/SpectralSpark.java @@ -9,12 +9,15 @@ import theHexaghost.GhostflameHelper; import theHexaghost.HexaMod; import theHexaghost.actions.RetractAction; +import theHexaghost.ghostflames.CrushingGhostflame; +import theHexaghost.ghostflames.InfernoGhostflame; +import theHexaghost.ghostflames.SearingGhostflame; public class SpectralSpark extends AbstractHexaCard { public final static String ID = makeID("NaughtySpirit"); - private static final int MAGIC = 4; + private static final int MAGIC = 3; public SpectralSpark() { super(ID, 0, CardType.SKILL, CardRarity.UNCOMMON, CardTarget.ENEMY); @@ -46,7 +49,15 @@ public void update() { } public void triggerOnGlowCheck() { - this.glowColor = GhostflameHelper.activeGhostFlame.charged ? AbstractCard.GOLD_BORDER_GLOW_COLOR : AbstractCard.BLUE_BORDER_GLOW_COLOR; + this.glowColor = AbstractCard.BLUE_BORDER_GLOW_COLOR; + + if (GhostflameHelper.activeGhostFlame instanceof CrushingGhostflame) { + if(GhostflameHelper.activeGhostFlame.getActiveFlamesTriggerCount() == 1){ + this.glowColor = AbstractCard.GOLD_BORDER_GLOW_COLOR; + } + } + + if(GhostflameHelper.activeGhostFlame.charged) this.glowColor = AbstractCard.GOLD_BORDER_GLOW_COLOR; } public void upgrade() { diff --git a/src/main/java/theHexaghost/cards/StepThrough.java b/src/main/java/theHexaghost/cards/StepThrough.java index 92ee46f339..88fd32931e 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 e5660022f4..5ab0adffb9 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; + super(ID, 0, CardType.ATTACK, CardRarity.COMMON, CardTarget.ENEMY); + baseDamage = 3; 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/ThermalTransfer.java b/src/main/java/theHexaghost/cards/ThermalTransfer.java index a246bce5af..e066cf0994 100644 --- a/src/main/java/theHexaghost/cards/ThermalTransfer.java +++ b/src/main/java/theHexaghost/cards/ThermalTransfer.java @@ -4,6 +4,7 @@ import com.megacrit.cardcrawl.actions.animations.VFXAction; import com.megacrit.cardcrawl.actions.common.GainBlockAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.monsters.AbstractMonster; import theHexaghost.HexaMod; import com.megacrit.cardcrawl.vfx.combat.FireballEffect; @@ -14,7 +15,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; @@ -47,4 +48,14 @@ public void upgrade() { upgradeBlock(UPG_BLOCK); } } + + @Override + public float getTitleFontSize() { + if(Settings.language != Settings.GameLanguage.ENG) { + return 25.0F; + } else { + return 23.0F; + } + } + } \ No newline at end of file diff --git a/src/main/java/theHexaghost/cards/TimeWarp.java b/src/main/java/theHexaghost/cards/TimeWarp.java index 633c090363..7af74c013d 100644 --- a/src/main/java/theHexaghost/cards/TimeWarp.java +++ b/src/main/java/theHexaghost/cards/TimeWarp.java @@ -14,7 +14,7 @@ public class TimeWarp extends AbstractHexaCard implements OnAdvanceOrRetractSubs //stupid intellij stuff ATTACK, ALL_ENEMY, COMMON - private static final int DAMAGE = 5; + private static final int DAMAGE = 4; private static final int UPG_DAMAGE = 2; public TimeWarp() { diff --git a/src/main/java/theHexaghost/cards/UnleashSpirits.java b/src/main/java/theHexaghost/cards/UnleashSpirits.java index 8e92f6bc4b..71c1a7289a 100644 --- a/src/main/java/theHexaghost/cards/UnleashSpirits.java +++ b/src/main/java/theHexaghost/cards/UnleashSpirits.java @@ -1,9 +1,11 @@ package theHexaghost.cards; import com.megacrit.cardcrawl.actions.AbstractGameAction; +import com.megacrit.cardcrawl.actions.common.AttackDamageRandomEnemyAction; import com.megacrit.cardcrawl.actions.common.DamageRandomEnemyAction; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.monsters.AbstractMonster; +import hermit.patches.EnumPatch; import theHexaghost.HexaMod; public class UnleashSpirits extends AbstractHexaCard { @@ -20,22 +22,9 @@ public UnleashSpirits() { } public void use(AbstractPlayer p, AbstractMonster m) { - atb(new DamageRandomEnemyAction(makeInfo(), AbstractGameAction.AttackEffect.FIRE)); - atb(new AbstractGameAction() { - @Override - public void update() { - isDone = true; -// int i = 0; -// for (AbstractCard c : AbstractDungeon.player.exhaustPile.group) { -// if (c.isEthereal) { -// i++; -// } -// } - for (int q = 0; q < HexaMod.cards_exhausted_last_turn; q++) { - addToTop(new DamageRandomEnemyAction(makeInfo(), AbstractGameAction.AttackEffect.FIRE)); - } - } - }); + for (int q = 0; q < HexaMod.cards_exhausted_last_turn + 1; q++) { + this.addToBot(new AttackDamageRandomEnemyAction(this, AbstractGameAction.AttackEffect.FIRE)); + } } public void applyPowers() { diff --git a/src/main/java/theHexaghost/cards/UnlimitedPower.java b/src/main/java/theHexaghost/cards/UnlimitedPower.java index 98f23ff3c1..76cc9c7373 100644 --- a/src/main/java/theHexaghost/cards/UnlimitedPower.java +++ b/src/main/java/theHexaghost/cards/UnlimitedPower.java @@ -5,10 +5,13 @@ import com.megacrit.cardcrawl.actions.common.GainEnergyAction; import com.megacrit.cardcrawl.actions.utility.WaitAction; 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 sneckomod.SneckoMod; import theHexaghost.GhostflameHelper; import theHexaghost.HexaMod; +import theHexaghost.TheHexaghost; import theHexaghost.actions.ChargeAction; import theHexaghost.actions.ExtinguishAction; import theHexaghost.actions.RetractAction; @@ -45,10 +48,33 @@ public void update() { } + //temp crash fix, I don't know how people are still drafting this + @Override + public boolean canUse(AbstractPlayer p, AbstractMonster m) { + boolean canUse = super.canUse(p, m); + if (!canUse) { + return false; + } + if (!(AbstractDungeon.player instanceof TheHexaghost)) { + this.cantUseMessage = "@?!?!@"; + return false; + } + return true; + } + public void upgrade() { if (!upgraded) { upgradeName(); upgradeBaseCost(3); } } + +// @Override +// public float getTitleFontSize() { +// if(Settings.language != Settings.GameLanguage.ENG) { +// return 19.0F; +// }else { +// return 20.0F; +// } +// } } diff --git a/src/main/java/theHexaghost/cards/VolcanoVisage.java b/src/main/java/theHexaghost/cards/VolcanoVisage.java index 7cce93625d..436be19b09 100644 --- a/src/main/java/theHexaghost/cards/VolcanoVisage.java +++ b/src/main/java/theHexaghost/cards/VolcanoVisage.java @@ -14,7 +14,7 @@ public class VolcanoVisage extends AbstractHexaCard { public VolcanoVisage() { super(ID, 1, CardType.POWER, CardRarity.RARE, CardTarget.SELF); - baseMagicNumber = magicNumber = 5; + baseMagicNumber = magicNumber = 4; tags.add(HexaMod.GHOSTWHEELCARD); this.tags.add(SneckoMod.BANNEDFORSNECKO); HexaMod.loadJokeCardImage(this, "VolcanoVisage.png"); diff --git a/src/main/java/theHexaghost/cards/seals/FirstSeal.java b/src/main/java/theHexaghost/cards/seals/FirstSeal.java index 1dd9fd9553..4772b4975e 100644 --- a/src/main/java/theHexaghost/cards/seals/FirstSeal.java +++ b/src/main/java/theHexaghost/cards/seals/FirstSeal.java @@ -14,7 +14,7 @@ public class FirstSeal extends AbstractSealCard { //stupid intellij stuff POWER, SELF, UNCOMMON - public static final int MAGIC = 8; + public static final int MAGIC = 7; public FirstSeal() { super(ID, 2, CardType.POWER, CardRarity.SPECIAL, CardTarget.SELF); diff --git a/src/main/java/theHexaghost/cards/seals/SecondSeal.java b/src/main/java/theHexaghost/cards/seals/SecondSeal.java index 12eabaddb8..665957b8b3 100644 --- a/src/main/java/theHexaghost/cards/seals/SecondSeal.java +++ b/src/main/java/theHexaghost/cards/seals/SecondSeal.java @@ -14,7 +14,7 @@ public class SecondSeal extends AbstractSealCard { //stupid intellij stuff POWER, SELF, UNCOMMON - public static final int MAGIC = 18; + public static final int MAGIC = 16; public SecondSeal() { super(ID, 2, CardType.POWER, CardRarity.SPECIAL, CardTarget.SELF); diff --git a/src/main/java/theHexaghost/cards/seals/SixthSeal.java b/src/main/java/theHexaghost/cards/seals/SixthSeal.java index 43a0c24a0f..d5edae3588 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"); @@ -54,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/events/SealChamber.java b/src/main/java/theHexaghost/events/SealChamber.java index 36d7617dba..e5e6d6d1c2 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,45 +275,6 @@ protected void buttonEffect(int buttonPressed) { } - - - public boolean canSpawn() { - int variable = 0; - int hasone = 0; - int hastwo = 0; - int hasthree = 0; - int hasfour = 0; - int hasfive = 0; - int hassix = 0; - - 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; - } - private enum CurScreen { INTRO, END; diff --git a/src/main/java/theHexaghost/events/WanderingSpecter.java b/src/main/java/theHexaghost/events/WanderingSpecter.java index e0c3955f3a..57f6426977 100644 --- a/src/main/java/theHexaghost/events/WanderingSpecter.java +++ b/src/main/java/theHexaghost/events/WanderingSpecter.java @@ -77,10 +77,9 @@ public WanderingSpecter() { shopForMore2 = true; } if ((!AbstractDungeon.player.hasRelic(BlueCandle.ID)) || (!AbstractDungeon.player.hasRelic(BlackCandle.ID))) { - if (EvilModeCharacterSelect.evilMode || (AbstractDungeon.player instanceof hermit)) { + if (EvilModeCharacterSelect.evilMode || (AbstractDungeon.player instanceof hermit) && !downfallMod.disableBaseGameAdjustments) { this.imageEventText.setDialogOption(OPTIONS[3], new BlackCandle()); - } - if (!EvilModeCharacterSelect.evilMode && !(AbstractDungeon.player instanceof hermit)) { + } else { this.imageEventText.setDialogOption(OPTIONS[3], new BlueCandle()); } } else { @@ -143,24 +142,23 @@ protected void buttonEffect(int buttonPressed) { // 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(); - if (!EvilModeCharacterSelect.evilMode) { + if (!EvilModeCharacterSelect.evilMode && !(AbstractDungeon.player instanceof hermit) && !downfallMod.disableBaseGameAdjustments) { AbstractDungeon.getCurrRoom().addRelicToRewards(new BlueCandle()); - } - if (EvilModeCharacterSelect.evilMode) { + downfallMod.removeAnyRelicFromPools(BlueCandle.ID); + } else { AbstractDungeon.getCurrRoom().addRelicToRewards(new BlackCandle()); + downfallMod.removeAnyRelicFromPools(BlackCandle.ID); } 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; - if (!EvilModeCharacterSelect.evilMode) { + if (!EvilModeCharacterSelect.evilMode && !(AbstractDungeon.player instanceof hermit)) { logMetricObtainRelicAndDamage(ID, "Chased Away", new BlueCandle(), 5); } - if (EvilModeCharacterSelect.evilMode) { + if (EvilModeCharacterSelect.evilMode || (AbstractDungeon.player instanceof hermit)) { logMetricObtainRelicAndDamage(ID, "Chased Away", new BlackCandle(), 5); } return; @@ -180,29 +178,38 @@ protected void buttonEffect(int buttonPressed) { cardsAdded.add(curse.cardID); cardsAdded.add(rareCard.cardID); + this.imageEventText.clearAllDialogs(); + this.imageEventText.setDialogOption(OPTIONS[9]); + this.screen = CurScreen.END; return; case 1: curse = CardLibrary.getCurse().makeStatEquivalentCopy(); AbstractDungeon.effectList.add(new ShowCardAndObtainEffect(curse, (float) (Settings.WIDTH * .5F), (float) (Settings.HEIGHT / 2)));// 66 - AbstractDungeon.player.increaseMaxHp(5, true); + AbstractDungeon.player.increaseMaxHp(12, true); this.imageEventText.updateDialogOption(1, OPTIONS[8], true); this.imageEventText.updateBodyText(DESCRIPTIONS[4]); cardsAdded.add(curse.cardID); - maxHpAdded = 5; + maxHpAdded = 12; + this.imageEventText.clearAllDialogs(); + this.imageEventText.setDialogOption(OPTIONS[9]); + this.screen = CurScreen.END; return; case 2: curse = CardLibrary.getCurse().makeStatEquivalentCopy(); AbstractDungeon.effectList.add(new ShowCardAndObtainEffect(curse, (float) (Settings.WIDTH * .5F), (float) (Settings.HEIGHT / 2)));// 66 - AbstractDungeon.effectList.add(new RainingGoldEffect(100)); - AbstractDungeon.player.gainGold(100); + AbstractDungeon.effectList.add(new RainingGoldEffect(180)); + AbstractDungeon.player.gainGold(180); this.imageEventText.updateDialogOption(2, OPTIONS[8], true); this.imageEventText.updateBodyText(DESCRIPTIONS[2]); cardsAdded.add(curse.cardID); - goldAdded = 100; + goldAdded = 180; + this.imageEventText.clearAllDialogs(); + this.imageEventText.setDialogOption(OPTIONS[9]); + this.screen = CurScreen.END; return; case 3: diff --git a/src/main/java/theHexaghost/ghostflames/AbstractGhostflame.java b/src/main/java/theHexaghost/ghostflames/AbstractGhostflame.java index 2a61fd6449..0759ffbb4e 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 06fb6ff69a..83643dd69b 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; @@ -99,7 +99,11 @@ public int getEffectCount(){ if (AbstractDungeon.player.hasPower(EnhancePower.POWER_ID)) { x += AbstractDungeon.player.getPower(EnhancePower.POWER_ID).amount; } - return x; + if (x > 0) { + return x; + } else { + return 0; + } } @Override diff --git a/src/main/java/theHexaghost/ghostflames/CrushingGhostflame.java b/src/main/java/theHexaghost/ghostflames/CrushingGhostflame.java index 4d8ced8339..fd6a34c1ae 100644 --- a/src/main/java/theHexaghost/ghostflames/CrushingGhostflame.java +++ b/src/main/java/theHexaghost/ghostflames/CrushingGhostflame.java @@ -42,7 +42,7 @@ public class CrushingGhostflame extends AbstractGhostflame { public CrushingGhostflame(float x, float y) { super(x, y); - damage = 6; + damage = 3; //this.textColor = new Color(1F,.75F,.75F,1F); this.triggersRequired = 2; @@ -73,16 +73,17 @@ public int getActiveFlamesTriggerCount() { return skillsPlayedThisTurn; } - @Override + @Override public void onCharge() { - atb(new AbstractGameAction() { - @Override - public void update() { - int x = getEffectCount(); - isDone = true; + for (int i = 0; i < 2; i++) { + atb(new AbstractGameAction() { + @Override + public void update() { + int x = getEffectCount(); + isDone = true; - if(AbstractDungeon.player.hasPower(FlameAffectAllEnemiesPower.POWER_ID)){ - for(int i = 0; i < AbstractDungeon.player.getPower(FlameAffectAllEnemiesPower.POWER_ID).amount; i++){ + if (AbstractDungeon.player.hasPower(FlameAffectAllEnemiesPower.POWER_ID)) { + for (int i = 0; i < AbstractDungeon.player.getPower(FlameAffectAllEnemiesPower.POWER_ID).amount; i++) { addToTop(new VFXAction( new AbstractGameEffect() { @@ -99,31 +100,34 @@ public void update() { } @Override - public void render(SpriteBatch spriteBatch) {} + public void render(SpriteBatch spriteBatch) { + } @Override - public void dispose() {} + public void dispose() { + } } )); - att(new DamageAllEnemiesAction(AbstractDungeon.player, DamageInfo.createDamageMatrix(x, true), DamageInfo.DamageType.THORNS, AttackEffect.NONE)); + att(new DamageAllEnemiesAction(AbstractDungeon.player, DamageInfo.createDamageMatrix(x, true), DamageInfo.DamageType.THORNS, AttackEffect.NONE)); // att(new DamageAllEnemiesAction(AbstractDungeon.player, x, DamageInfo.DamageType.THORNS, AttackEffect.NONE)); - } - } else { - AbstractMonster m = AbstractDungeon.getRandomMonster(); - if (m != null && !m.isDead && !m.isDying && !m.halfDead) { - 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))); + } + } else { + AbstractMonster m = AbstractDungeon.getRandomMonster(); + if (m != null && !m.isDead && !m.isDying && !m.halfDead) { + 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))); + } } } - } - }); + }); + } } @Override public String returnHoverHelperText() { int x = getEffectCount(); - return x+""; + return x+"x2"; } public int getEffectCount(){ @@ -190,4 +194,4 @@ public Color getActiveColor() { //return activeColor.cpy(); return Color.PURPLE.cpy(); } -} +} \ No newline at end of file diff --git a/src/main/java/theHexaghost/ghostflames/InfernoGhostflame.java b/src/main/java/theHexaghost/ghostflames/InfernoGhostflame.java index b10cdd3498..891d0cfc8a 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)); } } @@ -98,6 +98,9 @@ public void onCharge() { @Override public String returnHoverHelperText() { int x = getEffectCount(); + if (x < 0) { + x = 0; + } int chargedFlames = 0; for (int j = GhostflameHelper.hexaGhostFlames.size() - 1; j >= 0; j--) { AbstractGhostflame gf = GhostflameHelper.hexaGhostFlames.get(j); @@ -117,7 +120,11 @@ public int getEffectCount() { if (AbstractDungeon.player.hasPower(EnhancePower.POWER_ID)) { x += AbstractDungeon.player.getPower(EnhancePower.POWER_ID).amount; } - return x; + if (x > 0) { + return x; + } else { + return 0; + } } @Override diff --git a/src/main/java/theHexaghost/ghostflames/SearingGhostflame.java b/src/main/java/theHexaghost/ghostflames/SearingGhostflame.java index bd9a6cfa3c..58dc077333 100644 --- a/src/main/java/theHexaghost/ghostflames/SearingGhostflame.java +++ b/src/main/java/theHexaghost/ghostflames/SearingGhostflame.java @@ -38,7 +38,7 @@ public class SearingGhostflame extends AbstractGhostflame { public SearingGhostflame(float x, float y) { super(x, y); - magic = 6; + magic = 3; //this.textColor = new Color(.75F,1F,.75F,1F); this.triggersRequired = 2; @@ -56,58 +56,65 @@ public int getActiveFlamesTriggerCount() { @Override public void onCharge() { - atb(new AbstractGameAction() { - @Override - public void update() { - isDone = true; - int x = getEffectCount(); - - if(AbstractDungeon.player.hasPower(FlameAffectAllEnemiesPower.POWER_ID)){ - for(int i = 0; i < AbstractDungeon.player.getPower(FlameAffectAllEnemiesPower.POWER_ID).amount; i++){ - for (AbstractMonster m : AbstractDungeon.getCurrRoom().monsters.monsters) { - if (m != null && !m.isDead && !m.isDying && !m.halfDead) { - att(new ApplyPowerAction(m, AbstractDungeon.player, new BurnPower(m, x), x)); + for (int i = 0; i < 2; i++) { + atb(new AbstractGameAction() { + @Override + public void update() { + isDone = true; + int x = getEffectCount(); + + if (AbstractDungeon.player.hasPower(FlameAffectAllEnemiesPower.POWER_ID)) { + for (int i = 0; i < AbstractDungeon.player.getPower(FlameAffectAllEnemiesPower.POWER_ID).amount; i++) { + for (AbstractMonster m : AbstractDungeon.getCurrRoom().monsters.monsters) { + if (m != null && !m.isDead && !m.isDying && !m.halfDead) { + if (x > 0) { + att(new ApplyPowerAction(m, AbstractDungeon.player, new BurnPower(m, x), x)); + } + } } - } // att(new VFXAction(new FireballEffect(AbstractDungeon.player.hb.cX, AbstractDungeon.player.hb.cY, m.hb.cX, m.hb.cY), 0.2F)); - att(new VFXAction( - new AbstractGameEffect() { - - public void update() { - for (AbstractMonster m : AbstractDungeon.getCurrRoom().monsters.monsters) { - if (m != null && !m.isDead && !m.isDying && !m.halfDead) { - AbstractDungeon.effectsQueue.add(new FireballEffect(AbstractDungeon.player.hb.cX, AbstractDungeon.player.hb.cY, m.hb.cX, m.hb.cY)); + att(new VFXAction( + new AbstractGameEffect() { + + public void update() { + for (AbstractMonster m : AbstractDungeon.getCurrRoom().monsters.monsters) { + if (m != null && !m.isDead && !m.isDying && !m.halfDead) { + AbstractDungeon.effectsQueue.add(new FireballEffect(AbstractDungeon.player.hb.cX, AbstractDungeon.player.hb.cY, m.hb.cX, m.hb.cY)); + } } + this.isDone = true; } - this.isDone = true; - } - @Override - public void render(SpriteBatch spriteBatch) {} + @Override + public void render(SpriteBatch spriteBatch) { + } - @Override - public void dispose() {} - } - , 0.3F)); - if (AbstractDungeon.player.hasRelic(CandleOfCauterizing.ID)) { - AbstractRelic r = AbstractDungeon.player.getRelic(CandleOfCauterizing.ID); - r.flash(); + @Override + public void dispose() { + } + } + , 0.3F)); + if (AbstractDungeon.player.hasRelic(CandleOfCauterizing.ID)) { + AbstractRelic r = AbstractDungeon.player.getRelic(CandleOfCauterizing.ID); + r.flash(); + } } - } - } - else { - AbstractMonster m = AbstractDungeon.getRandomMonster(); - if (m != null && !m.isDead && !m.isDying && !m.halfDead) { - att(new ApplyPowerAction(m, AbstractDungeon.player, new BurnPower(m, x), x)); - att(new VFXAction(new FireballEffect(AbstractDungeon.player.hb.cX, AbstractDungeon.player.hb.cY, m.hb.cX, m.hb.cY), 0.4F)); - if (AbstractDungeon.player.hasRelic(CandleOfCauterizing.ID)) { - AbstractRelic r = AbstractDungeon.player.getRelic(CandleOfCauterizing.ID); - r.flash(); + } else { + AbstractMonster m = AbstractDungeon.getRandomMonster(); + if (m != null && !m.isDead && !m.isDying && !m.halfDead) { + if (x > 0) { + att(new ApplyPowerAction(m, AbstractDungeon.player, new BurnPower(m, x), x)); + } + att(new VFXAction(new FireballEffect(AbstractDungeon.player.hb.cX, AbstractDungeon.player.hb.cY, m.hb.cX, m.hb.cY), 0.4F)); + if (AbstractDungeon.player.hasRelic(CandleOfCauterizing.ID)) { + AbstractRelic r = AbstractDungeon.player.getRelic(CandleOfCauterizing.ID); + r.flash(); + } } } } - } - }); + }); + } } @Override @@ -145,18 +152,23 @@ public Texture getHelperEffectTexture() { @Override public String returnHoverHelperText() { int x = getEffectCount(); - return x + ""; + return x + "x2"; } public int getEffectCount() { int x = magic; if (AbstractDungeon.player.hasPower(EnhancePower.POWER_ID)) { - x += 2 * AbstractDungeon.player.getPower(EnhancePower.POWER_ID).amount; + x += AbstractDungeon.player.getPower(EnhancePower.POWER_ID).amount; } if(AbstractDungeon.player.hasRelic(CandleOfCauterizing.ID)){ x += CandleOfCauterizing.SOULBURN_BONUS_AMOUNT; } - return x; + + if (x > 0) { + return x; + } else { + return 0; + } } @Override diff --git a/src/main/java/theHexaghost/patches/EndTurnAdvance.java b/src/main/java/theHexaghost/patches/EndTurnAdvance.java index 80bd6d368a..9ff2e92547 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 350ea9baff..a2012cad30 100644 --- a/src/main/java/theHexaghost/patches/GenerateSealRewardPatch.java +++ b/src/main/java/theHexaghost/patches/GenerateSealRewardPatch.java @@ -5,6 +5,7 @@ import com.megacrit.cardcrawl.rooms.AbstractRoom; import com.megacrit.cardcrawl.rooms.MonsterRoomBoss; import com.megacrit.cardcrawl.rooms.MonsterRoomElite; +import downfall.downfallMod; import theHexaghost.HexaMod; import theHexaghost.TheHexaghost; import theHexaghost.relics.TheBrokenSeal; @@ -18,23 +19,12 @@ 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); + if(AbstractDungeon.player instanceof TheHexaghost && (!AbstractDungeon.player.hasRelic(TheBrokenSeal.ID) && HexaMod.isHexaghostSealsEnabled()) ) { - 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.rewards.add(new SealSealReward()); } + } } } diff --git a/src/main/java/theHexaghost/potions/EctoCoolerPotion.java b/src/main/java/theHexaghost/potions/EctoCoolerPotion.java index 284c66c3d6..f5e0894b81 100644 --- a/src/main/java/theHexaghost/potions/EctoCoolerPotion.java +++ b/src/main/java/theHexaghost/potions/EctoCoolerPotion.java @@ -9,6 +9,7 @@ import com.megacrit.cardcrawl.helpers.PowerTip; import com.megacrit.cardcrawl.helpers.TipHelper; import com.megacrit.cardcrawl.localization.PotionStrings; +import theHexaghost.HexaMod; import theHexaghost.actions.DiscoverEtherealAction; @@ -22,6 +23,7 @@ public EctoCoolerPotion() { super(NAME, POTION_ID, PotionRarity.COMMON, PotionSize.CARD, PotionColor.SMOKE); this.isThrown = false; this.targetRequired = false; + this.labOutlineColor = HexaMod.placeholderColor; } diff --git a/src/main/java/theHexaghost/potions/SoulburnPotion.java b/src/main/java/theHexaghost/potions/SoulburnPotion.java index 8ee5db020e..f5320dc19e 100644 --- a/src/main/java/theHexaghost/potions/SoulburnPotion.java +++ b/src/main/java/theHexaghost/potions/SoulburnPotion.java @@ -6,6 +6,7 @@ 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.helpers.TipHelper; @@ -23,10 +24,9 @@ public class SoulburnPotion extends CustomPotion { public SoulburnPotion() { - super(NAME, POTION_ID, PotionRarity.COMMON, PotionSize.SPHERE, PotionColor.FAIRY); + super(NAME, POTION_ID, PotionRarity.UNCOMMON, PotionSize.SPHERE, PotionColor.SMOKE); this.isThrown = true; this.targetRequired = true; - this.labOutlineColor = HexaMod.placeholderColor; } public boolean hasCandle(){ @@ -35,11 +35,13 @@ public boolean hasCandle(){ public void initializeData() { this.potency = getPotency(); - this.description = (DESCRIPTIONS[0] + (this.potency + ( hasCandle()?CandleOfCauterizing.SOULBURN_BONUS_AMOUNT:0 ) ) + DESCRIPTIONS[1]); + this.description = (DESCRIPTIONS[0] + (this.potency) + DESCRIPTIONS[1]); this.tips.clear(); this.tips.add(new PowerTip(this.name, this.description)); + if(Settings.language== Settings.GameLanguage.ENG){ this.tips.add(new PowerTip(TipHelper.capitalize(BaseMod.getKeywordTitle(HexaMod.makeID("soulburn"))), BaseMod.getKeywordDescription(HexaMod.makeID("soulburn")))); } + } public void use(AbstractCreature target) { @@ -53,7 +55,7 @@ public CustomPotion makeCopy() { } public int getPotency(int ascensionLevel) { - return 30; + return 40; } } diff --git a/src/main/java/theHexaghost/powers/EnhancePower.java b/src/main/java/theHexaghost/powers/EnhancePower.java index 717c13e67b..29a72dec30 100644 --- a/src/main/java/theHexaghost/powers/EnhancePower.java +++ b/src/main/java/theHexaghost/powers/EnhancePower.java @@ -58,11 +58,19 @@ public void updateDescription() { if(this.amount<0){ this.type = PowerType.DEBUFF; - description = DESCRIPTIONS[2] + amount*(-1) + DESCRIPTIONS[1] + " NL " + DESCRIPTIONS[3]; + description = DESCRIPTIONS[2] + amount*(-1) + DESCRIPTIONS[1]; }else{ this.type = PowerType.BUFF; - description = DESCRIPTIONS[0] + amount + DESCRIPTIONS[1] + " NL " + DESCRIPTIONS[3]; + description = DESCRIPTIONS[0] + amount + DESCRIPTIONS[1]; } + + // if(this.amount<0){ + // this.type = PowerType.DEBUFF; + // description = DESCRIPTIONS[2] + amount*(-1) + DESCRIPTIONS[1] + " NL " + DESCRIPTIONS[3]; + // }else{ + // this.type = PowerType.BUFF; + // description = DESCRIPTIONS[0] + amount + DESCRIPTIONS[1] + " NL " + DESCRIPTIONS[3]; + // } } @Override diff --git a/src/main/java/theHexaghost/powers/PastPower.java b/src/main/java/theHexaghost/powers/PastPower.java index a817a1c9d6..68ded8001a 100644 --- a/src/main/java/theHexaghost/powers/PastPower.java +++ b/src/main/java/theHexaghost/powers/PastPower.java @@ -10,10 +10,11 @@ import com.megacrit.cardcrawl.localization.PowerStrings; import com.megacrit.cardcrawl.powers.AbstractPower; import theHexaghost.HexaMod; +import theHexaghost.util.OnAdvanceOrRetractSubscriber; import theHexaghost.util.OnRetractSubscriber; import downfall.util.TextureLoader; -public class PastPower extends AbstractPower implements CloneablePowerInterface, OnRetractSubscriber { +public class PastPower extends AbstractPower implements CloneablePowerInterface, OnAdvanceOrRetractSubscriber { public static final String POWER_ID = HexaMod.makeID("PastPower"); @@ -41,37 +42,37 @@ public PastPower(final int amount) { @Override public void atStartOfTurnPostDraw() { -// activation_count = 0; -// updateDescription(); + activation_count = 0; + updateDescription(); } - @Override - public void onRetract() { -// if (activation_count < amount) { - this.flash(); -// addToBot(new GainEnergyAction(1)); - addToBot(new DrawCardAction(amount)); -// } -// activation_count++; -// updateDescription(); + public void onAdvanceOrRetract(boolean endTurn) { + if (!endTurn) { + if (activation_count < amount) { + this.flash(); + addToBot(new DrawCardAction(1)); + } + activation_count++; + updateDescription(); + } } - @Override public void updateDescription() { - StringBuilder sb = new StringBuilder(); - sb.append(DESCRIPTIONS[0]); - if (amount == 1) - sb.append(DESCRIPTIONS[1]); - else - sb.append(amount).append(DESCRIPTIONS[2]); -// sb.append(DESCRIPTIONS[3]).append(activation_count); -// if (activation_count == 1) -// sb.append(DESCRIPTIONS[4]); -// else -// sb.append(DESCRIPTIONS[5]); -// - this.description = sb.toString(); + + if (this.amount == 1) { + this.description = DESCRIPTIONS[0]; + } else { + this.description = (DESCRIPTIONS[1] + this.amount + DESCRIPTIONS[2]); + } + + if (activation_count >= this.amount) { + this.description += DESCRIPTIONS[6]; + } else if ((this.amount - activation_count) > 1) { + this.description += DESCRIPTIONS[3] + (this.amount - activation_count) + DESCRIPTIONS[4]; + } else { + this.description += DESCRIPTIONS[3] + (this.amount - activation_count) + DESCRIPTIONS[5]; + } } @Override diff --git a/src/main/java/theHexaghost/relics/BolsterEngine.java b/src/main/java/theHexaghost/relics/BolsterEngine.java index c3aaf53b1d..ca1127d99e 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 = 4; + 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 d419854d18..7fa97b9862 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,7 +13,9 @@ 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")); - public static final int SOULBURN_BONUS_AMOUNT = 3; + + //variables + public static final int SOULBURN_BONUS_AMOUNT = 2; public CandleOfCauterizing() { super(ID, IMG, OUTLINE, RelicTier.RARE, LandingSound.MAGICAL); @@ -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 f3479b34fe..5c590cb6df 100644 --- a/src/main/java/theHexaghost/relics/IceCube.java +++ b/src/main/java/theHexaghost/relics/IceCube.java @@ -13,7 +13,7 @@ public class IceCube extends CustomRelic { - //snow flake Xanatos' Icy Charm + //Xanatos' Icy Charm public static final String ID = HexaMod.makeID("IceCube"); private static final Texture IMG = TextureLoader.getTexture(makeRelicPath("IceCube.png")); private static final Texture OUTLINE = TextureLoader.getTexture(makeRelicOutlinePath("IceCube.png")); @@ -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 @@ -31,11 +34,11 @@ public void onUnequip() { }// 43 @Override - public void atBattleStart() { - this.addToBot(new ApplyPowerAction(AbstractDungeon.player, AbstractDungeon.player, new EnhancePower(-1), -1)); + public void atPreBattle() { + 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 4686c5e9b1..4b1e8d5bfe 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 516e352654..deb8f00a4e 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 4ab9b0764f..f09d30f60b 100644 --- a/src/main/java/theHexaghost/relics/Libra.java +++ b/src/main/java/theHexaghost/relics/Libra.java @@ -4,17 +4,12 @@ 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; @@ -62,25 +57,25 @@ public void onEquip() { if (starters.group.isEmpty()) { this.no_cards_to_select = true; } else { - - if (AbstractDungeon.isScreenUp) { - AbstractDungeon.dynamicBanner.hide(); - AbstractDungeon.previousScreen = AbstractDungeon.screen; - } - AbstractDungeon.gridSelectScreen.open(starters, starters.group.size(), true, this.DESCRIPTIONS[2]); + giveCards(starters.group); + //if (AbstractDungeon.isScreenUp) { + // AbstractDungeon.dynamicBanner.hide(); + // AbstractDungeon.previousScreen = AbstractDungeon.screen; + // } + // AbstractDungeon.gridSelectScreen.open(starters, starters.group.size(), true, this.DESCRIPTIONS[2]); } } - public void update() { - 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; - this.calledTransform = true; - AbstractDungeon.getCurrRoom().rewardPopOutTimer = 0.25F; - this.giveCards(AbstractDungeon.gridSelectScreen.selectedCards); - } - } +// public void update() { +// 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) || CInputActionSet.proceed.isJustPressed())) { +// AbstractDungeon.gridSelectScreen.confirmButton.hb.hovered = false; +// this.calledTransform = true; +// AbstractDungeon.getCurrRoom().rewardPopOutTimer = 0.25F; +// this.giveCards(AbstractDungeon.gridSelectScreen.selectedCards); +// } +// } public void giveCards(ArrayList group) { @@ -125,7 +120,6 @@ public void giveCards(ArrayList group) { 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)) { diff --git a/src/main/java/theHexaghost/relics/RecyclingMachine.java b/src/main/java/theHexaghost/relics/RecyclingMachine.java index be57c7be18..965e5efcb1 100644 --- a/src/main/java/theHexaghost/relics/RecyclingMachine.java +++ b/src/main/java/theHexaghost/relics/RecyclingMachine.java @@ -20,7 +20,7 @@ public class RecyclingMachine extends CustomRelic { public boolean activated = false; public RecyclingMachine() { - super(ID, IMG, OUTLINE, RelicTier.COMMON, LandingSound.HEAVY); + super(ID, IMG, OUTLINE, RelicTier.UNCOMMON, LandingSound.HEAVY); } @Override diff --git a/src/main/java/theHexaghost/relics/Sixitude.java b/src/main/java/theHexaghost/relics/Sixitude.java index 24b531ae7f..a7d07dc015 100644 --- a/src/main/java/theHexaghost/relics/Sixitude.java +++ b/src/main/java/theHexaghost/relics/Sixitude.java @@ -1,6 +1,7 @@ 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; @@ -10,11 +11,15 @@ import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.cards.DamageInfo; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.helpers.CardLibrary; import expansioncontent.actions.EchoACardAction; +import expansioncontent.expansionContentMod; import hermit.cards.Strike_Hermit; import theHexaghost.HexaMod; import downfall.util.TextureLoader; +import java.util.ArrayList; + import static theHexaghost.HexaMod.makeRelicOutlinePath; import static theHexaghost.HexaMod.makeRelicPath; @@ -24,6 +29,9 @@ 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.RARE, LandingSound.MAGICAL); this.counter = 0; @@ -31,18 +39,26 @@ public Sixitude() { @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)); - AbstractCard c2 = new Strike_Hermit(); - addToBot(new EchoACardAction(c2, true)); + 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 tmp = new Strike_Hermit(); + ArrayList possList = new ArrayList<>(CardLibrary.getAllCards()); + possList.removeIf(c -> (c.color != AbstractDungeon.player.getCardColor() || !c.hasTag(AbstractCard.CardTags.STARTER_STRIKE))); + if (!(possList.isEmpty())) { + tmp = possList.get(0); + } + tmp.updateCost(-1); + addToBot(new EchoACardAction(tmp, 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 ad19f392b7..7e89337ff1 100644 --- a/src/main/java/theHexaghost/relics/SoulConsumer.java +++ b/src/main/java/theHexaghost/relics/SoulConsumer.java @@ -37,34 +37,34 @@ public SoulConsumer() { super(ID, IMG, OUTLINE, RelicTier.RARE, LandingSound.MAGICAL); } + //variables + public static final int EXHAUST_REQUIREMENT = 4; + 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 addToBot(new ChargeCurrentFlameAction()); -// AbstractMonster m = AbstractDungeon.getRandomMonster(); -// if(m != null) { -// this.addToTop(new ApplyPowerAction(m, AbstractDungeon.player, new VulnerablePower(m, 1, false), 1)); -// } - } } - // public void onVictory() { - // this.counter = 0; - // } + public void onVictory() { + this.counter = -1; + } - // @Override + @Override + public void atBattleStart() { + this.counter = 0; + } + // @Override // public void onUseCard(AbstractCard targetCard, UseCardAction useCardAction) { // if(targetCard.hasTag(HexaMod.AFTERLIFE)){ // this.addToTop(new DamageAllEnemiesAction(null, DamageInfo.createDamageMatrix(DAMAGE, true), DamageInfo.DamageType.THORNS, AbstractGameAction.AttackEffect.FIRE)); @@ -92,6 +92,6 @@ public void onExhaust(AbstractCard card) { // } 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 42fe2dbf9b..f5543ed358 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 6992cd2633..04268f7642 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 0f59699073..a4a39fd44f 100644 --- a/src/main/java/theHexaghost/relics/TheBrokenSeal.java +++ b/src/main/java/theHexaghost/relics/TheBrokenSeal.java @@ -27,31 +27,38 @@ public class TheBrokenSeal extends CustomRelic { public static final UIStrings uiStrings = CardCrawlGame.languagePack.getUIString(downfallMod.makeID("Unfettered")); + //do not change relic tier even if doing config stuff please public TheBrokenSeal() { - super(ID, IMG, OUTLINE, RelicTier.SPECIAL, LandingSound.MAGICAL); + super(ID, IMG, OUTLINE, RelicTier.DEPRECATED, 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)); + 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 dca99b703a..5903e728a2 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/utilityClasses/DFL.java b/src/main/java/utilityClasses/DFL.java new file mode 100644 index 0000000000..8e0b6ad541 --- /dev/null +++ b/src/main/java/utilityClasses/DFL.java @@ -0,0 +1,313 @@ +package utilityClasses; + +import basemod.ReflectionHacks; +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.*; +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.monsters.AbstractMonster; +import com.megacrit.cardcrawl.powers.AbstractPower; +import com.megacrit.cardcrawl.random.Random; +import com.megacrit.cardcrawl.rooms.AbstractRoom; +import com.megacrit.cardcrawl.unlock.UnlockTracker; +import com.megacrit.cardcrawl.vfx.AbstractGameEffect; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; +import java.util.function.Consumer; +import java.util.function.Predicate; + +import static com.megacrit.cardcrawl.dungeons.AbstractDungeon.*; + +/** + * General util library. + * Imported from BundleCore. + * Contains both GFL and GGL functions and some other features. + */ +public class DFL { + + public static final Color DecaOrange = new Color((233f/255f), (169f/255f), (100f/255f), 0.0f); + + public static AbstractPlayer pl() { + return AbstractDungeon.player; + } + public static int GAL(){return AbstractDungeon.ascensionLevel;} + + 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 : aliveMonsterList()) + consumer.accept(m); + } + + public static ArrayList aliveMonsterList() { + ArrayList monsters = new ArrayList<>((AbstractDungeon.getMonsters()).monsters); + monsters.removeIf(m -> (m.isDead || m.halfDead)); + return monsters; + } + + public static void forAllMonstersActive(Consumer consumer) { + for (AbstractMonster m : activeMonsterList()) + consumer.accept(m); + } + + public static ArrayList activeMonsterList() { + ArrayList monsters = new ArrayList<>((AbstractDungeon.getMonsters()).monsters); + monsters.removeIf(m -> (m.isDead || m.isDying || m.escaped || m.halfDead || m.isEscaping)); + return monsters; + } + + public static ArrayList getCardsMatchingPredicate(Predicate pred) { + return getCardsMatchingPredicate(pred, false); + } + + public static ArrayList getCardsMatchingPredicate(Predicate pred, boolean allcards) { + if (allcards) { + ArrayList arrayList = new ArrayList<>(); + for (AbstractCard c : CardLibrary.getAllCards()) { + if (pred.test(c)) + arrayList.add(c.makeStatEquivalentCopy()); + } + return arrayList; + } + ArrayList cardsList = new ArrayList<>(); + for (AbstractCard c : srcCommonCardPool.group) { + if (pred.test(c)) + cardsList.add(c.makeStatEquivalentCopy()); + } + for (AbstractCard c : 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) { + return list.isEmpty() ? null : list.get(AbstractDungeon.cardRandomRng.random(list.size() - 1)); + } + + 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 att(AbstractGameAction action) { + AbstractDungeon.actionManager.addToTop(action); + } + + public static void atl(AbstractGameEffect action) { + AbstractDungeon.effectList.add(action); + } + + public static void vfx(AbstractGameEffect gameEffect) { + atb((AbstractGameAction)new VFXAction(gameEffect)); + } + + public static void vfx(AbstractGameEffect gameEffect, float duration) { + atb((AbstractGameAction)new VFXAction(gameEffect, duration)); + } + + public static void makeInHand(AbstractCard c, int i) { + atb((AbstractGameAction)new MakeTempCardInHandAction(c, i)); + } + + public static void makeInHandSameUUID(AbstractCard c) { + atb((AbstractGameAction)new MakeTempCardInHandAction(c, true, true)); + } + + public static void makeInHand(AbstractCard c) { + makeInHand(c, 1); + } + + public static void shuffleIn(AbstractCard c, int i) { + atb((AbstractGameAction)new MakeTempCardInDrawPileAction(c, i, true, true)); + } + + public static void shuffleIn(AbstractCard c) { + shuffleIn(c, 1); + } + + public static void intoDiscard(AbstractCard c, int i) { + atb((AbstractGameAction)new MakeTempCardInDiscardAction(c, i)); + } + + public static void topDeck(AbstractCard c, int i) { + atb((AbstractGameAction)new MakeTempCardInDrawPileAction(c, i, false, true)); + } + + public static void topDeck(AbstractCard c) { + topDeck(c, 1); + } + + public static void applyToEnemy(AbstractMonster m, AbstractPower po) { + atb((AbstractGameAction)new ApplyPowerAction((AbstractCreature)m, (AbstractCreature)AbstractDungeon.player, po, po.amount)); + } + + public static void applyToEnemyTop(AbstractMonster m, AbstractPower po) { + att((AbstractGameAction)new ApplyPowerAction((AbstractCreature)m, (AbstractCreature)AbstractDungeon.player, po, po.amount)); + } + + public static void applyToSelf(AbstractPower po) { + atb((AbstractGameAction)new ApplyPowerAction((AbstractCreature)AbstractDungeon.player, (AbstractCreature)AbstractDungeon.player, po, po.amount)); + } + + public static void applyToSelfTop(AbstractPower po) { + att((AbstractGameAction)new ApplyPowerAction((AbstractCreature)AbstractDungeon.player, (AbstractCreature)AbstractDungeon.player, po, po.amount)); + } + + public static void dmg(AbstractCreature target, DamageInfo info, AbstractGameAction.AttackEffect effect) { + atb((AbstractGameAction)new DamageAction(target, info, effect)); + } + + public static void dmg(AbstractCreature target, DamageInfo info) { + dmg(target, info, AbstractGameAction.AttackEffect.NONE); + } + + public static void block(AbstractCreature target, int amount) { + atb((AbstractGameAction)new GainBlockAction(target, amount)); + } + + private static HashMap getCurses = ReflectionHacks.getPrivateStatic(CardLibrary.class, "curses"); + private static HashMap getCards = ReflectionHacks.getPrivateStatic(CardLibrary.class, "cards"); + + public static AbstractCard betterReturnRandomCurse() { + refreshPool(); + AbstractCard c = betterGetCurse().makeCopy(); + UnlockTracker.markCardAsSeen(c.cardID); + return c; + } + + public static void refreshPool(){ + getCurses = ReflectionHacks.getPrivateStatic(CardLibrary.class, "curses"); + getCards = ReflectionHacks.getPrivateStatic(CardLibrary.class, "cards"); + } + + public static AbstractCard betterGetCurse() { + ArrayList tmp = new ArrayList<>(); + for (Map.Entry c : getCurses.entrySet()) { + if (c.getValue().rarity != AbstractCard.CardRarity.SPECIAL){ + tmp.add(c.getKey()); + } + } + return getCards.get(tmp.get(AbstractDungeon.cardRng.random(0, tmp.size() - 1))).makeCopy(); + } + + /** + * Supports any type of RnG as it must be provided manually + */ + public static AbstractCard betterGetCurse2(Random rng) { + ArrayList tmp = new ArrayList<>(); + for (Map.Entry c : getCurses.entrySet()) { + if (c.getValue().rarity != AbstractCard.CardRarity.SPECIAL){ + tmp.add(c.getKey()); + } + } + return getCards.get(tmp.get(AbstractDungeon.cardRng.random(0, tmp.size() - 1))).makeCopy(); + } + + /** + * + * @param type + * @param size + * @return + */ + public static ArrayList generateCardChoicesBetter(AbstractCard.CardType type, int size, Random rngQue, boolean restricted) { + ArrayList derp = new ArrayList<>(); + while (derp.size() < size) { + boolean dupe = false; + AbstractCard tmp; + if (type == null) { + tmp = returnTrulyRandomCardInCombatBetter(rngQue, restricted); + } else { + tmp = returnTrulyRandomCardInCombatBetter(type, rngQue, restricted); + } + for (AbstractCard c : derp) { + if (c.cardID.equals(tmp.cardID)) { + dupe = true; + break; + } + } + if (!dupe) + derp.add(tmp.makeCopy()); + } + return derp; + } + + public static AbstractCard returnTrulyRandomCardInCombatBetter(Random rngQue, boolean restricted) { + ArrayList list = new ArrayList<>(); + for (AbstractCard c : srcCommonCardPool.group) { + if (!c.hasTag(AbstractCard.CardTags.HEALING)) { + list.add(c); + UnlockTracker.markCardAsSeen(c.cardID); + } + } + for (AbstractCard c : srcUncommonCardPool.group) { + if (!c.hasTag(AbstractCard.CardTags.HEALING)) { + list.add(c); + UnlockTracker.markCardAsSeen(c.cardID); + } + } + for (AbstractCard c : srcRareCardPool.group) { + if (!c.hasTag(AbstractCard.CardTags.HEALING)) { + list.add(c); + UnlockTracker.markCardAsSeen(c.cardID); + } + } + return list.get(rngQue.random(list.size() - 1)); + } + + public static AbstractCard returnTrulyRandomCardInCombatBetter(AbstractCard.CardType type, Random RngQue, boolean restricted) { + ArrayList list = new ArrayList<>(); + for (AbstractCard c : srcCommonCardPool.group) { + if (c.type == type && !c.hasTag(AbstractCard.CardTags.HEALING)) + list.add(c); + } + for (AbstractCard c : srcUncommonCardPool.group) { + if (c.type == type && !c.hasTag(AbstractCard.CardTags.HEALING)) + list.add(c); + } + for (AbstractCard c : srcRareCardPool.group) { + if (c.type == type && !c.hasTag(AbstractCard.CardTags.HEALING)) + list.add(c); + } + return list.get(RngQue.random(list.size() - 1)); + } + +} diff --git a/src/main/java/utilityClasses/Later/LaterAction.java b/src/main/java/utilityClasses/Later/LaterAction.java new file mode 100644 index 0000000000..565025b072 --- /dev/null +++ b/src/main/java/utilityClasses/Later/LaterAction.java @@ -0,0 +1,25 @@ +package utilityClasses.Later; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.megacrit.cardcrawl.actions.AbstractGameAction; + +public class LaterAction extends AbstractGameAction { + private final Runnable action; + public LaterAction(Runnable action) { + this(action, 0.0F); + } + public LaterAction(Runnable action, float lateTime) { + this.action = action; + this.duration = lateTime; + } + public void update() { + this.duration -= Gdx.graphics.getDeltaTime(); + if (this.duration <= 0.0F) { + this.isDone = true; + this.action.run(); + } + } + public void render(SpriteBatch sb) {} + public void dispose() {} +} diff --git a/src/main/java/utilityClasses/Later/LaterEffect.java b/src/main/java/utilityClasses/Later/LaterEffect.java new file mode 100644 index 0000000000..62b443d4b4 --- /dev/null +++ b/src/main/java/utilityClasses/Later/LaterEffect.java @@ -0,0 +1,32 @@ +package utilityClasses.Later; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.megacrit.cardcrawl.vfx.AbstractGameEffect; + +/** + * For out of combat effects or effects involving visual flair that needs to be cleanly seperated outwith the actions of sfx. + */ +public class LaterEffect extends AbstractGameEffect { + private Runnable action; + + public LaterEffect(Runnable action) { + this(action, 0.0F); + } + + public LaterEffect(Runnable action, float lateTime) { + this.action = action; + this.duration = lateTime; + } + + public void update() { + this.duration -= Gdx.graphics.getDeltaTime(); + if (this.duration <= 0.0F) { + this.isDone = true; + this.action.run(); + } + } + + public void render(SpriteBatch sb) {} + public void dispose() {} +} \ No newline at end of file diff --git a/src/main/java/utilityClasses/Wiz.java b/src/main/java/utilityClasses/Wiz.java new file mode 100644 index 0000000000..81b297b8b7 --- /dev/null +++ b/src/main/java/utilityClasses/Wiz.java @@ -0,0 +1,217 @@ +package utilityClasses; + +import com.badlogic.gdx.graphics.Texture; +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.common.MakeTempCardInDrawPileAction; +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 com.megacrit.cardcrawl.helpers.CardLibrary; +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.random.Random; +import com.megacrit.cardcrawl.rooms.AbstractRoom; +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; + +/** + * General util library created by Vex and Ocean. + * Used by many characters, but most commonly collector. + */ +public class Wiz { + //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 || m.halfDead); + return monsters; + } + + public static ArrayList getCardsMatchingPredicate(Predicate pred) { + return getCardsMatchingPredicate(pred, false); + } + + public static ArrayList getCardsMatchingPredicate(Predicate pred, boolean allcards) { + if (allcards) { + ArrayList cardsList = new ArrayList<>(); + for (AbstractCard c : CardLibrary.getAllCards()) { + if (pred.test(c)) cardsList.add(c.cardID); + } + return cardsList; + } else { + ArrayList cardsList = new ArrayList<>(); + for (AbstractCard c : AbstractDungeon.srcCommonCardPool.group) { + if (pred.test(c)) cardsList.add(c.cardID); + } + for (AbstractCard c : AbstractDungeon.srcUncommonCardPool.group) { + if (pred.test(c)) cardsList.add(c.cardID); + } + for (AbstractCard c : AbstractDungeon.srcRareCardPool.group) { + if (pred.test(c)) cardsList.add(c.cardID); + } + return cardsList; + } + } + + 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); + } + + public static boolean isInCombat() { + return CardCrawlGame.isInARun() && AbstractDungeon.currMapNode != null && AbstractDungeon.getCurrRoom() != null && AbstractDungeon.getCurrRoom().phase == AbstractRoom.RoomPhase.COMBAT; + } + + public static void atb(AbstractGameAction... actions) { + for (AbstractGameAction action : actions) + AbstractDungeon.actionManager.addToBottom(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) { + atb(new VFXAction(gameEffect)); + } + + 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)); + } + + public static void makeInHand(AbstractCard c) { + makeInHand(c, 1); + } + + public static void makeInHandTop(AbstractCard c, int i) { + att(new MakeTempCardInHandAction(c, i)); + } + + public static void makeInHandTop(AbstractCard c) { + makeInHandTop(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 boolean isAfflicted(AbstractMonster m) { + return (m.hasPower(VulnerablePower.POWER_ID) && m.hasPower(WeakPower.POWER_ID)); + } + + 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); + } +} diff --git a/src/main/resources/ModTheSpire.json b/src/main/resources/ModTheSpire.json index 401908c226..892dc580d4 100644 --- a/src/main/resources/ModTheSpire.json +++ b/src/main/resources/ModTheSpire.json @@ -2,7 +2,128 @@ "modid": "${project.artifactId}", "name": "${project.name}", "author_list": [ - "The Downfall Collab Team" + "The Downfall Collab Team:", + "Michael Mayhem - Project Head", + "Vex - Primary Code & Design, Beta Art", + "AlexMdle - Hermit Mod, Art", + "kiooeht - UI Code, Steam Packager, Support", + "Evil Pickle - Character Boss Framework", + "Blank the Evil - Main Menu Code, VFX, Code Support", + "Alchyr - Event Code, Inverted Map, & More", + "Gk - Souls System & More", + "Rita-B - Costumes system, Costume Art", + "Ellie - Named the mod!", + "HypoSoc - Gremlins Mod", + "Blue Guy - Hexa/Snecko/Boss updates, Awakened One, & more", + "SandTag - Collector Update, Balance & more", + "Stanek - Code & Balance Support", + "Pandora's Bread - Main Menu Music", + "Downfall Artists:", + "FreshBone - Character Select Art", + "Opal - Primary Card Artist", + "occultpyromancer - Art/Design Support, Beta Art", + "bukie - Character Select Buttons Art", + "TheLethargicWeirdo - Card Art, Beta Art", + "Cartesian Canvas - Card Art", + "Half-Goblin Hankins - Card Art", + "Inmo - Card Art", + "pika22 - Beta Art", + "HermitFan69 - Card Art", + "MagerBlutooth - Card Art", + "Casey Yano - Monster Art", + "Dark_Brick - Art Support", + "QuestLion - Art Support", + "Daxie - Additional Art", + "claude27a - Additional Art", + "Zhen - Additional Art", + "Eudaimonia - Additional Art", + "ez - Beta Art, Art management", + "ThomasG - Beta Art", + "Gangur - Beta Art", + "cuboid consumer - Beta Art", + "jamieee - Beta Art", + "JackRenoson - Beta Art", + "Lazer - Beta Art", + "robowizard41 - Beta Art", + "Adrianko - Beta Art", + "Charisma - Beta Art", + "Nerdy314 - Beta Art", + "Nimrod - Beta Art", + "Lulu - Beta Art", + "Mozco - Beta Art", + "BluShroom20 - Beta Art", + "LXIXCDXX - Beta Art", + "Nefrit - Beta Art", + "zero-113 - Beta Art", + "Nic200 - Beta Art", + "Downfall Code Contributors:", + "codewarrior0 - Code Support", + "Arek75 - Code Support", + "SuperLuigi - Code Support", + "Arjen Kushna - Code Support", + "DoomZero - Code Support", + "danfireman - Code Support", + "GaySarahK - Code Support", + "JamesTripleQ - Code Support", + "JNatfali - Code Support", + "modargo - Code Support", + "Cany0udance - Code Support", + "yoshigospel - Code Support", + "Erim-Nelhah - Code Support", + "tetraminus - Code Support", + "Darkglade - Code Support", + "Downfall Additional Design & Testing", + "cheetah-shooter", + "Mirli", + "zording", + "Silver", + "arctic_mists", + "tayberksalads", + "Airazel", + "Pig", + "Paradoxica", + "Downfall Community:", + "Carbon the Wanderer - Moderator", + "TheRealEvab - Moderator", + "d/dx(6x^70 - Moderator", + "Ocean - Discord Bot, Beta Art", + "Downfall Localization:", + "ggro - Spanish Localization", + "AZDraw-Art - Spanish Localization", + "mwalls - Hexaghost Update, Chinese Localization", + "Rucodeby - Russian Localization", + "Nitablade - Russian Localization", + "borloch - Early Chinese Localization", + "Nyamnyami - Korean Localization", + "MisterShaokahn - French Localization", + "KKRSAN - Japanese Localization update", + "BerikXardas - German Localization", + "Akiel13 - French Localization fixes", + "Downfall Special Thanks:", + "Rhapsody - Content Creator", + "FrostPrime - Content Creator", + "Retromation - Content Creator", + "Tricky - Content Creator", + "John Twolfe - Content Creator", + "Wanderbot - Content Creator", + "smattymatty - Content Creator", + "Hutts - Content Creator", + "jorbs - Content Creator", + "Vinesauce - Content Creator", + "CapCasts - Content Creator", + "Baalorlord - Content Creator", + "DarkViperAU - Content Creator", + "Art Credit for Reality Rift:", + "Klei Entertainment", + "Dreamsite Games", + "asraworks", + "Daniel Mullins", + "Thomas Moon Kang", + "Abrakam Entertainment SA", + "Mixed Realms", + "Shiny Shoe", + "Spider Nest Games" + ], "description": "${project.description}", "version": "${project.version}", diff --git a/src/main/resources/awakenedResources/audio/awakenedoneattack.ogg b/src/main/resources/awakenedResources/audio/awakenedoneattack.ogg new file mode 100644 index 0000000000..acb70354d1 Binary files /dev/null and b/src/main/resources/awakenedResources/audio/awakenedoneattack.ogg differ diff --git a/src/main/resources/awakenedResources/audio/burning_study.ogg b/src/main/resources/awakenedResources/audio/burning_study.ogg new file mode 100644 index 0000000000..f9d67dfbb0 Binary files /dev/null and b/src/main/resources/awakenedResources/audio/burning_study.ogg differ diff --git a/src/main/resources/awakenedResources/audio/chant_activatev2.ogg b/src/main/resources/awakenedResources/audio/chant_activatev2.ogg new file mode 100644 index 0000000000..85cee87e36 Binary files /dev/null and b/src/main/resources/awakenedResources/audio/chant_activatev2.ogg differ diff --git a/src/main/resources/awakenedResources/audio/cryostasis.ogg b/src/main/resources/awakenedResources/audio/cryostasis.ogg new file mode 100644 index 0000000000..31ed734585 Binary files /dev/null and b/src/main/resources/awakenedResources/audio/cryostasis.ogg differ diff --git a/src/main/resources/awakenedResources/audio/darkleech.ogg b/src/main/resources/awakenedResources/audio/darkleech.ogg new file mode 100644 index 0000000000..e3e4989998 Binary files /dev/null and b/src/main/resources/awakenedResources/audio/darkleech.ogg differ diff --git a/src/main/resources/awakenedResources/audio/thunderboltv3.ogg b/src/main/resources/awakenedResources/audio/thunderboltv3.ogg new file mode 100644 index 0000000000..370fb53b45 Binary files /dev/null and b/src/main/resources/awakenedResources/audio/thunderboltv3.ogg 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 0000000000..81d2dd8b62 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 0000000000..60d16effe9 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 0000000000..29b4ba8b8e 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 0000000000..64f8cde4d5 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/1024/dimension/eden/attack.png b/src/main/resources/awakenedResources/images/1024/dimension/eden/attack.png new file mode 100644 index 0000000000..977d9b8144 Binary files /dev/null and b/src/main/resources/awakenedResources/images/1024/dimension/eden/attack.png differ diff --git a/src/main/resources/awakenedResources/images/1024/dimension/eden/power.png b/src/main/resources/awakenedResources/images/1024/dimension/eden/power.png new file mode 100644 index 0000000000..20e8e2b569 Binary files /dev/null and b/src/main/resources/awakenedResources/images/1024/dimension/eden/power.png differ diff --git a/src/main/resources/awakenedResources/images/1024/dimension/eden/skill.png b/src/main/resources/awakenedResources/images/1024/dimension/eden/skill.png new file mode 100644 index 0000000000..6f3ed99e29 Binary files /dev/null and b/src/main/resources/awakenedResources/images/1024/dimension/eden/skill.png differ diff --git a/src/main/resources/awakenedResources/images/1024/dimension/gordian/attack.png b/src/main/resources/awakenedResources/images/1024/dimension/gordian/attack.png new file mode 100644 index 0000000000..e5e2919ae2 Binary files /dev/null and b/src/main/resources/awakenedResources/images/1024/dimension/gordian/attack.png differ diff --git a/src/main/resources/awakenedResources/images/1024/dimension/gordian/power.png b/src/main/resources/awakenedResources/images/1024/dimension/gordian/power.png new file mode 100644 index 0000000000..0e462048c9 Binary files /dev/null and b/src/main/resources/awakenedResources/images/1024/dimension/gordian/power.png differ diff --git a/src/main/resources/awakenedResources/images/1024/dimension/gordian/skill.png b/src/main/resources/awakenedResources/images/1024/dimension/gordian/skill.png new file mode 100644 index 0000000000..068f50f9ee Binary files /dev/null and b/src/main/resources/awakenedResources/images/1024/dimension/gordian/skill.png differ diff --git a/src/main/resources/awakenedResources/images/1024/dimension/grift/attack.png b/src/main/resources/awakenedResources/images/1024/dimension/grift/attack.png new file mode 100644 index 0000000000..af27a3f6bf Binary files /dev/null and b/src/main/resources/awakenedResources/images/1024/dimension/grift/attack.png differ diff --git a/src/main/resources/awakenedResources/images/1024/dimension/grift/power.png b/src/main/resources/awakenedResources/images/1024/dimension/grift/power.png new file mode 100644 index 0000000000..e253a3793a Binary files /dev/null and b/src/main/resources/awakenedResources/images/1024/dimension/grift/power.png differ diff --git a/src/main/resources/awakenedResources/images/1024/dimension/grift/skill.png b/src/main/resources/awakenedResources/images/1024/dimension/grift/skill.png new file mode 100644 index 0000000000..b6b9d47a14 Binary files /dev/null and b/src/main/resources/awakenedResources/images/1024/dimension/grift/skill.png differ diff --git a/src/main/resources/awakenedResources/images/1024/dimension/inscryp/attack.png b/src/main/resources/awakenedResources/images/1024/dimension/inscryp/attack.png new file mode 100644 index 0000000000..9893dca184 Binary files /dev/null and b/src/main/resources/awakenedResources/images/1024/dimension/inscryp/attack.png differ diff --git a/src/main/resources/awakenedResources/images/1024/dimension/inscryp/power.png b/src/main/resources/awakenedResources/images/1024/dimension/inscryp/power.png new file mode 100644 index 0000000000..cfd0cb42d4 Binary files /dev/null and b/src/main/resources/awakenedResources/images/1024/dimension/inscryp/power.png differ diff --git a/src/main/resources/awakenedResources/images/1024/dimension/inscryp/skill.png b/src/main/resources/awakenedResources/images/1024/dimension/inscryp/skill.png new file mode 100644 index 0000000000..066a140452 Binary files /dev/null and b/src/main/resources/awakenedResources/images/1024/dimension/inscryp/skill.png differ diff --git a/src/main/resources/awakenedResources/images/1024/dimension/obelisk/attack.png b/src/main/resources/awakenedResources/images/1024/dimension/obelisk/attack.png new file mode 100644 index 0000000000..3b692eb440 Binary files /dev/null and b/src/main/resources/awakenedResources/images/1024/dimension/obelisk/attack.png differ diff --git a/src/main/resources/awakenedResources/images/1024/dimension/obelisk/power.png b/src/main/resources/awakenedResources/images/1024/dimension/obelisk/power.png new file mode 100644 index 0000000000..c4ac84b7e5 Binary files /dev/null and b/src/main/resources/awakenedResources/images/1024/dimension/obelisk/power.png differ diff --git a/src/main/resources/awakenedResources/images/1024/dimension/obelisk/skill.png b/src/main/resources/awakenedResources/images/1024/dimension/obelisk/skill.png new file mode 100644 index 0000000000..a0db092095 Binary files /dev/null and b/src/main/resources/awakenedResources/images/1024/dimension/obelisk/skill.png differ diff --git a/src/main/resources/awakenedResources/images/1024/dimension/roguebook/attack.png b/src/main/resources/awakenedResources/images/1024/dimension/roguebook/attack.png new file mode 100644 index 0000000000..5d7f4047c2 Binary files /dev/null and b/src/main/resources/awakenedResources/images/1024/dimension/roguebook/attack.png differ diff --git a/src/main/resources/awakenedResources/images/1024/dimension/roguebook/power.png b/src/main/resources/awakenedResources/images/1024/dimension/roguebook/power.png new file mode 100644 index 0000000000..7db8575c4f Binary files /dev/null and b/src/main/resources/awakenedResources/images/1024/dimension/roguebook/power.png differ diff --git a/src/main/resources/awakenedResources/images/1024/dimension/roguebook/skill.png b/src/main/resources/awakenedResources/images/1024/dimension/roguebook/skill.png new file mode 100644 index 0000000000..6e8502bd34 Binary files /dev/null and b/src/main/resources/awakenedResources/images/1024/dimension/roguebook/skill.png differ diff --git a/src/main/resources/awakenedResources/images/1024/dimension/storybook/attack.png b/src/main/resources/awakenedResources/images/1024/dimension/storybook/attack.png new file mode 100644 index 0000000000..67234f6eea Binary files /dev/null and b/src/main/resources/awakenedResources/images/1024/dimension/storybook/attack.png differ diff --git a/src/main/resources/awakenedResources/images/1024/dimension/storybook/power.png b/src/main/resources/awakenedResources/images/1024/dimension/storybook/power.png new file mode 100644 index 0000000000..2436dc2f19 Binary files /dev/null and b/src/main/resources/awakenedResources/images/1024/dimension/storybook/power.png differ diff --git a/src/main/resources/awakenedResources/images/1024/dimension/storybook/skill.png b/src/main/resources/awakenedResources/images/1024/dimension/storybook/skill.png new file mode 100644 index 0000000000..3640ccf591 Binary files /dev/null and b/src/main/resources/awakenedResources/images/1024/dimension/storybook/skill.png differ diff --git a/src/main/resources/awakenedResources/images/1024/dimension/towertactics/attack.png b/src/main/resources/awakenedResources/images/1024/dimension/towertactics/attack.png new file mode 100644 index 0000000000..c937a378c7 Binary files /dev/null and b/src/main/resources/awakenedResources/images/1024/dimension/towertactics/attack.png differ diff --git a/src/main/resources/awakenedResources/images/1024/dimension/towertactics/power.png b/src/main/resources/awakenedResources/images/1024/dimension/towertactics/power.png new file mode 100644 index 0000000000..3ae0d31f2e Binary files /dev/null and b/src/main/resources/awakenedResources/images/1024/dimension/towertactics/power.png differ diff --git a/src/main/resources/awakenedResources/images/1024/dimension/towertactics/skill.png b/src/main/resources/awakenedResources/images/1024/dimension/towertactics/skill.png new file mode 100644 index 0000000000..d6e7a038cc Binary files /dev/null and b/src/main/resources/awakenedResources/images/1024/dimension/towertactics/skill.png differ diff --git a/src/main/resources/awakenedResources/images/1024/dimension/train/attack.png b/src/main/resources/awakenedResources/images/1024/dimension/train/attack.png new file mode 100644 index 0000000000..e081707179 Binary files /dev/null and b/src/main/resources/awakenedResources/images/1024/dimension/train/attack.png differ diff --git a/src/main/resources/awakenedResources/images/1024/dimension/train/power.png b/src/main/resources/awakenedResources/images/1024/dimension/train/power.png new file mode 100644 index 0000000000..f1e7d760a6 Binary files /dev/null and b/src/main/resources/awakenedResources/images/1024/dimension/train/power.png differ diff --git a/src/main/resources/awakenedResources/images/1024/dimension/train/skill.png b/src/main/resources/awakenedResources/images/1024/dimension/train/skill.png new file mode 100644 index 0000000000..4c3152f491 Binary files /dev/null and b/src/main/resources/awakenedResources/images/1024/dimension/train/skill.png differ diff --git a/src/main/resources/awakenedResources/images/1024/dimension/vault/attack.png b/src/main/resources/awakenedResources/images/1024/dimension/vault/attack.png new file mode 100644 index 0000000000..b79e2e7255 Binary files /dev/null and b/src/main/resources/awakenedResources/images/1024/dimension/vault/attack.png differ diff --git a/src/main/resources/awakenedResources/images/1024/dimension/vault/power.png b/src/main/resources/awakenedResources/images/1024/dimension/vault/power.png new file mode 100644 index 0000000000..0e9a3dca71 Binary files /dev/null and b/src/main/resources/awakenedResources/images/1024/dimension/vault/power.png differ diff --git a/src/main/resources/awakenedResources/images/1024/dimension/vault/skill.png b/src/main/resources/awakenedResources/images/1024/dimension/vault/skill.png new file mode 100644 index 0000000000..b0ab71c679 Binary files /dev/null and b/src/main/resources/awakenedResources/images/1024/dimension/vault/skill.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 0000000000..8639c0779e 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 0000000000..8dd48eb2cb 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 0000000000..905cfc6c51 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 0000000000..db494c14a0 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 0000000000..cb8f04c77d 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/512/dimension/eden/attack.png b/src/main/resources/awakenedResources/images/512/dimension/eden/attack.png new file mode 100644 index 0000000000..d99184325c Binary files /dev/null and b/src/main/resources/awakenedResources/images/512/dimension/eden/attack.png differ diff --git a/src/main/resources/awakenedResources/images/512/dimension/eden/power.png b/src/main/resources/awakenedResources/images/512/dimension/eden/power.png new file mode 100644 index 0000000000..3d438d5309 Binary files /dev/null and b/src/main/resources/awakenedResources/images/512/dimension/eden/power.png differ diff --git a/src/main/resources/awakenedResources/images/512/dimension/eden/skill.png b/src/main/resources/awakenedResources/images/512/dimension/eden/skill.png new file mode 100644 index 0000000000..451b736b32 Binary files /dev/null and b/src/main/resources/awakenedResources/images/512/dimension/eden/skill.png differ diff --git a/src/main/resources/awakenedResources/images/512/dimension/gordian/attack.png b/src/main/resources/awakenedResources/images/512/dimension/gordian/attack.png new file mode 100644 index 0000000000..2461af7603 Binary files /dev/null and b/src/main/resources/awakenedResources/images/512/dimension/gordian/attack.png differ diff --git a/src/main/resources/awakenedResources/images/512/dimension/gordian/power.png b/src/main/resources/awakenedResources/images/512/dimension/gordian/power.png new file mode 100644 index 0000000000..1e3418810a Binary files /dev/null and b/src/main/resources/awakenedResources/images/512/dimension/gordian/power.png differ diff --git a/src/main/resources/awakenedResources/images/512/dimension/gordian/skill.png b/src/main/resources/awakenedResources/images/512/dimension/gordian/skill.png new file mode 100644 index 0000000000..86b53e9f4d Binary files /dev/null and b/src/main/resources/awakenedResources/images/512/dimension/gordian/skill.png differ diff --git a/src/main/resources/awakenedResources/images/512/dimension/grift/attack.png b/src/main/resources/awakenedResources/images/512/dimension/grift/attack.png new file mode 100644 index 0000000000..77f1d53312 Binary files /dev/null and b/src/main/resources/awakenedResources/images/512/dimension/grift/attack.png differ diff --git a/src/main/resources/awakenedResources/images/512/dimension/grift/power.png b/src/main/resources/awakenedResources/images/512/dimension/grift/power.png new file mode 100644 index 0000000000..ba60407c79 Binary files /dev/null and b/src/main/resources/awakenedResources/images/512/dimension/grift/power.png differ diff --git a/src/main/resources/awakenedResources/images/512/dimension/grift/skill.png b/src/main/resources/awakenedResources/images/512/dimension/grift/skill.png new file mode 100644 index 0000000000..da8db1e9df Binary files /dev/null and b/src/main/resources/awakenedResources/images/512/dimension/grift/skill.png differ diff --git a/src/main/resources/awakenedResources/images/512/dimension/inscryp/attack.png b/src/main/resources/awakenedResources/images/512/dimension/inscryp/attack.png new file mode 100644 index 0000000000..c6818b1a4c Binary files /dev/null and b/src/main/resources/awakenedResources/images/512/dimension/inscryp/attack.png differ diff --git a/src/main/resources/awakenedResources/images/512/dimension/inscryp/power.png b/src/main/resources/awakenedResources/images/512/dimension/inscryp/power.png new file mode 100644 index 0000000000..ced27a546d Binary files /dev/null and b/src/main/resources/awakenedResources/images/512/dimension/inscryp/power.png differ diff --git a/src/main/resources/awakenedResources/images/512/dimension/inscryp/skill.png b/src/main/resources/awakenedResources/images/512/dimension/inscryp/skill.png new file mode 100644 index 0000000000..2dd5857cc1 Binary files /dev/null and b/src/main/resources/awakenedResources/images/512/dimension/inscryp/skill.png differ diff --git a/src/main/resources/awakenedResources/images/512/dimension/obelisk/attack.png b/src/main/resources/awakenedResources/images/512/dimension/obelisk/attack.png new file mode 100644 index 0000000000..56bdfb49e8 Binary files /dev/null and b/src/main/resources/awakenedResources/images/512/dimension/obelisk/attack.png differ diff --git a/src/main/resources/awakenedResources/images/512/dimension/obelisk/power.png b/src/main/resources/awakenedResources/images/512/dimension/obelisk/power.png new file mode 100644 index 0000000000..a5282a0378 Binary files /dev/null and b/src/main/resources/awakenedResources/images/512/dimension/obelisk/power.png differ diff --git a/src/main/resources/awakenedResources/images/512/dimension/obelisk/skill.png b/src/main/resources/awakenedResources/images/512/dimension/obelisk/skill.png new file mode 100644 index 0000000000..1f4eb66dde Binary files /dev/null and b/src/main/resources/awakenedResources/images/512/dimension/obelisk/skill.png differ diff --git a/src/main/resources/awakenedResources/images/512/dimension/roguebook/attack.png b/src/main/resources/awakenedResources/images/512/dimension/roguebook/attack.png new file mode 100644 index 0000000000..d87303093c Binary files /dev/null and b/src/main/resources/awakenedResources/images/512/dimension/roguebook/attack.png differ diff --git a/src/main/resources/awakenedResources/images/512/dimension/roguebook/power.png b/src/main/resources/awakenedResources/images/512/dimension/roguebook/power.png new file mode 100644 index 0000000000..5f4b171374 Binary files /dev/null and b/src/main/resources/awakenedResources/images/512/dimension/roguebook/power.png differ diff --git a/src/main/resources/awakenedResources/images/512/dimension/roguebook/skill.png b/src/main/resources/awakenedResources/images/512/dimension/roguebook/skill.png new file mode 100644 index 0000000000..3f66bd2305 Binary files /dev/null and b/src/main/resources/awakenedResources/images/512/dimension/roguebook/skill.png differ diff --git a/src/main/resources/awakenedResources/images/512/dimension/storybook/attack.png b/src/main/resources/awakenedResources/images/512/dimension/storybook/attack.png new file mode 100644 index 0000000000..a3fae92e1e Binary files /dev/null and b/src/main/resources/awakenedResources/images/512/dimension/storybook/attack.png differ diff --git a/src/main/resources/awakenedResources/images/512/dimension/storybook/power.png b/src/main/resources/awakenedResources/images/512/dimension/storybook/power.png new file mode 100644 index 0000000000..50825014aa Binary files /dev/null and b/src/main/resources/awakenedResources/images/512/dimension/storybook/power.png differ diff --git a/src/main/resources/awakenedResources/images/512/dimension/storybook/skill.png b/src/main/resources/awakenedResources/images/512/dimension/storybook/skill.png new file mode 100644 index 0000000000..879ba1a134 Binary files /dev/null and b/src/main/resources/awakenedResources/images/512/dimension/storybook/skill.png differ diff --git a/src/main/resources/awakenedResources/images/512/dimension/towertactics/attack.png b/src/main/resources/awakenedResources/images/512/dimension/towertactics/attack.png new file mode 100644 index 0000000000..49b3675d66 Binary files /dev/null and b/src/main/resources/awakenedResources/images/512/dimension/towertactics/attack.png differ diff --git a/src/main/resources/awakenedResources/images/512/dimension/towertactics/power.png b/src/main/resources/awakenedResources/images/512/dimension/towertactics/power.png new file mode 100644 index 0000000000..5602ff4256 Binary files /dev/null and b/src/main/resources/awakenedResources/images/512/dimension/towertactics/power.png differ diff --git a/src/main/resources/awakenedResources/images/512/dimension/towertactics/skill.png b/src/main/resources/awakenedResources/images/512/dimension/towertactics/skill.png new file mode 100644 index 0000000000..d8b1c24a3b Binary files /dev/null and b/src/main/resources/awakenedResources/images/512/dimension/towertactics/skill.png differ diff --git a/src/main/resources/awakenedResources/images/512/dimension/train/attack.png b/src/main/resources/awakenedResources/images/512/dimension/train/attack.png new file mode 100644 index 0000000000..6e976910c4 Binary files /dev/null and b/src/main/resources/awakenedResources/images/512/dimension/train/attack.png differ diff --git a/src/main/resources/awakenedResources/images/512/dimension/train/power.png b/src/main/resources/awakenedResources/images/512/dimension/train/power.png new file mode 100644 index 0000000000..97efd84933 Binary files /dev/null and b/src/main/resources/awakenedResources/images/512/dimension/train/power.png differ diff --git a/src/main/resources/awakenedResources/images/512/dimension/train/skill.png b/src/main/resources/awakenedResources/images/512/dimension/train/skill.png new file mode 100644 index 0000000000..f1f012c0bc Binary files /dev/null and b/src/main/resources/awakenedResources/images/512/dimension/train/skill.png differ diff --git a/src/main/resources/awakenedResources/images/512/dimension/vault/attack.png b/src/main/resources/awakenedResources/images/512/dimension/vault/attack.png new file mode 100644 index 0000000000..044dfce311 Binary files /dev/null and b/src/main/resources/awakenedResources/images/512/dimension/vault/attack.png differ diff --git a/src/main/resources/awakenedResources/images/512/dimension/vault/power.png b/src/main/resources/awakenedResources/images/512/dimension/vault/power.png new file mode 100644 index 0000000000..2ef16cec17 Binary files /dev/null and b/src/main/resources/awakenedResources/images/512/dimension/vault/power.png differ diff --git a/src/main/resources/awakenedResources/images/512/dimension/vault/skill.png b/src/main/resources/awakenedResources/images/512/dimension/vault/skill.png new file mode 100644 index 0000000000..e42660a5c1 Binary files /dev/null and b/src/main/resources/awakenedResources/images/512/dimension/vault/skill.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 0000000000..950641bec0 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 0000000000..b84ffc93b9 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 0000000000..3a9e5410f3 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 0000000000..10adb3d077 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/ArcaneNesting.png b/src/main/resources/awakenedResources/images/cards/ArcaneNesting.png new file mode 100644 index 0000000000..ba9d490f54 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 0000000000..237b9b8d81 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/Archmagus.png b/src/main/resources/awakenedResources/images/cards/Archmagus.png new file mode 100644 index 0000000000..823fbc9456 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Archmagus.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Archmagus_p.png b/src/main/resources/awakenedResources/images/cards/Archmagus_p.png new file mode 100644 index 0000000000..6881daff52 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Archmagus_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/AwakenedForm.png b/src/main/resources/awakenedResources/images/cards/AwakenedForm.png new file mode 100644 index 0000000000..4848f5ce0e Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/AwakenedForm.png differ diff --git a/src/main/resources/awakenedResources/images/cards/AwakenedForm_p.png b/src/main/resources/awakenedResources/images/cards/AwakenedForm_p.png new file mode 100644 index 0000000000..6d229f8c26 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/AwakenedForm_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/BirdsEye.png b/src/main/resources/awakenedResources/images/cards/BirdsEye.png new file mode 100644 index 0000000000..398d758b6d Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/BirdsEye.png differ diff --git a/src/main/resources/awakenedResources/images/cards/BirdsEye_p.png b/src/main/resources/awakenedResources/images/cards/BirdsEye_p.png new file mode 100644 index 0000000000..7544fc462e Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/BirdsEye_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 0000000000..625e6796cb 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 0000000000..5ce57c0a1b 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/Bloodthirst.png b/src/main/resources/awakenedResources/images/cards/Bloodthirst.png new file mode 100644 index 0000000000..467f32178d Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Bloodthirst.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Bloodthirst_p.png b/src/main/resources/awakenedResources/images/cards/Bloodthirst_p.png new file mode 100644 index 0000000000..d40e95a6eb Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Bloodthirst_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Brainshock.png b/src/main/resources/awakenedResources/images/cards/Brainshock.png new file mode 100644 index 0000000000..43d643a332 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Brainshock.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Brainshock_p.png b/src/main/resources/awakenedResources/images/cards/Brainshock_p.png new file mode 100644 index 0000000000..927baaed89 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Brainshock_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/BurningStudy.png b/src/main/resources/awakenedResources/images/cards/BurningStudy.png new file mode 100644 index 0000000000..39eeae0b00 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/BurningStudy.png differ diff --git a/src/main/resources/awakenedResources/images/cards/BurningStudy_p.png b/src/main/resources/awakenedResources/images/cards/BurningStudy_p.png new file mode 100644 index 0000000000..db8e86589a Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/BurningStudy_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Carrionmaker.png b/src/main/resources/awakenedResources/images/cards/Carrionmaker.png new file mode 100644 index 0000000000..9da459c4af Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Carrionmaker.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Carrionmaker_p.png b/src/main/resources/awakenedResources/images/cards/Carrionmaker_p.png new file mode 100644 index 0000000000..0afee8762f Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Carrionmaker_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Caw.png b/src/main/resources/awakenedResources/images/cards/Caw.png new file mode 100644 index 0000000000..1288734484 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Caw.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Caw_p.png b/src/main/resources/awakenedResources/images/cards/Caw_p.png new file mode 100644 index 0000000000..8be8f2fd07 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Caw_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Ceremony.png b/src/main/resources/awakenedResources/images/cards/Ceremony.png new file mode 100644 index 0000000000..0079b922c7 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Ceremony.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Ceremony_p.png b/src/main/resources/awakenedResources/images/cards/Ceremony_p.png new file mode 100644 index 0000000000..7f601ba062 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Ceremony_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/ChosenVerse.png b/src/main/resources/awakenedResources/images/cards/ChosenVerse.png new file mode 100644 index 0000000000..71f4e0a388 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/ChosenVerse.png differ diff --git a/src/main/resources/awakenedResources/images/cards/ChosenVerse_p.png b/src/main/resources/awakenedResources/images/cards/ChosenVerse_p.png new file mode 100644 index 0000000000..bc6678131c Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/ChosenVerse_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/ClarionCall.png b/src/main/resources/awakenedResources/images/cards/ClarionCall.png new file mode 100644 index 0000000000..deb79bebb3 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/ClarionCall.png differ diff --git a/src/main/resources/awakenedResources/images/cards/ClarionCall_p.png b/src/main/resources/awakenedResources/images/cards/ClarionCall_p.png new file mode 100644 index 0000000000..a10b69fc49 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/ClarionCall_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Clutch.png b/src/main/resources/awakenedResources/images/cards/Clutch.png new file mode 100644 index 0000000000..ca955a6e6d Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Clutch.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Clutch_p.png b/src/main/resources/awakenedResources/images/cards/Clutch_p.png new file mode 100644 index 0000000000..d2a9eae712 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Clutch_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Crusher.png b/src/main/resources/awakenedResources/images/cards/Crusher.png new file mode 100644 index 0000000000..5372d2ff0c Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Crusher.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Crusher_p.png b/src/main/resources/awakenedResources/images/cards/Crusher_p.png new file mode 100644 index 0000000000..7742f13d36 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Crusher_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Cryostasis.png b/src/main/resources/awakenedResources/images/cards/Cryostasis.png new file mode 100644 index 0000000000..5e42feddef Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Cryostasis.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Cryostasis_p.png b/src/main/resources/awakenedResources/images/cards/Cryostasis_p.png new file mode 100644 index 0000000000..51b7edb9b4 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Cryostasis_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Daggerstorm.png b/src/main/resources/awakenedResources/images/cards/Daggerstorm.png new file mode 100644 index 0000000000..13e2560357 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Daggerstorm.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Daggerstorm_p.png b/src/main/resources/awakenedResources/images/cards/Daggerstorm_p.png new file mode 100644 index 0000000000..8d378de808 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Daggerstorm_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/DarkEcho.png b/src/main/resources/awakenedResources/images/cards/DarkEcho.png new file mode 100644 index 0000000000..3c0f777270 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/DarkEcho.png differ diff --git a/src/main/resources/awakenedResources/images/cards/DarkEcho_p.png b/src/main/resources/awakenedResources/images/cards/DarkEcho_p.png new file mode 100644 index 0000000000..19199f5cea Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/DarkEcho_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 0000000000..5b52285b66 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 0000000000..f84e6b8956 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 0000000000..b88445704f 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 0000000000..23ca59b32c 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 0000000000..51c673ecdc 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 0000000000..c31cf33c65 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 0000000000..a2afeec751 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 0000000000..06c9265c51 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/Dejection.png b/src/main/resources/awakenedResources/images/cards/Dejection.png new file mode 100644 index 0000000000..da33a35199 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Dejection.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Dejection_p.png b/src/main/resources/awakenedResources/images/cards/Dejection_p.png new file mode 100644 index 0000000000..f09ae851ca Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Dejection_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/DemonGlyph.png b/src/main/resources/awakenedResources/images/cards/DemonGlyph.png new file mode 100644 index 0000000000..157b5b0503 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/DemonGlyph.png differ diff --git a/src/main/resources/awakenedResources/images/cards/DemonGlyph_p.png b/src/main/resources/awakenedResources/images/cards/DemonGlyph_p.png new file mode 100644 index 0000000000..31fa4d0974 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/DemonGlyph_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/DesperatePrayer.png b/src/main/resources/awakenedResources/images/cards/DesperatePrayer.png new file mode 100644 index 0000000000..9c5bad31f4 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/DesperatePrayer.png differ diff --git a/src/main/resources/awakenedResources/images/cards/DesperatePrayerAlt.png b/src/main/resources/awakenedResources/images/cards/DesperatePrayerAlt.png new file mode 100644 index 0000000000..1630a4ef3c Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/DesperatePrayerAlt.png differ diff --git a/src/main/resources/awakenedResources/images/cards/DesperatePrayerAlt_p.png b/src/main/resources/awakenedResources/images/cards/DesperatePrayerAlt_p.png new file mode 100644 index 0000000000..4970d95b19 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/DesperatePrayerAlt_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/DesperatePrayer_p.png b/src/main/resources/awakenedResources/images/cards/DesperatePrayer_p.png new file mode 100644 index 0000000000..35bf1a3a4d Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/DesperatePrayer_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/ESPSpell.png b/src/main/resources/awakenedResources/images/cards/ESPSpell.png new file mode 100644 index 0000000000..b620cf825e Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/ESPSpell.png differ diff --git a/src/main/resources/awakenedResources/images/cards/ESPSpell_p.png b/src/main/resources/awakenedResources/images/cards/ESPSpell_p.png new file mode 100644 index 0000000000..25fc8cab1c Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/ESPSpell_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 0000000000..e61223c53f 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 0000000000..58875fa9a6 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/Ensorcelate.png b/src/main/resources/awakenedResources/images/cards/Ensorcelate.png new file mode 100644 index 0000000000..d43f3aa947 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Ensorcelate.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Ensorcelate_p.png b/src/main/resources/awakenedResources/images/cards/Ensorcelate_p.png new file mode 100644 index 0000000000..683c577ffe Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Ensorcelate_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Envision.png b/src/main/resources/awakenedResources/images/cards/Envision.png new file mode 100644 index 0000000000..413821ec70 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Envision.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Envision_p.png b/src/main/resources/awakenedResources/images/cards/Envision_p.png new file mode 100644 index 0000000000..cc5dc45e95 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Envision_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Eventide.png b/src/main/resources/awakenedResources/images/cards/Eventide.png new file mode 100644 index 0000000000..5cd513cd33 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Eventide.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Eventide_p.png b/src/main/resources/awakenedResources/images/cards/Eventide_p.png new file mode 100644 index 0000000000..6115607955 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Eventide_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 0000000000..1770b8a518 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 0000000000..7378132a66 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/FeatherVeil.png b/src/main/resources/awakenedResources/images/cards/FeatherVeil.png new file mode 100644 index 0000000000..d2b5c506b5 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/FeatherVeil.png differ diff --git a/src/main/resources/awakenedResources/images/cards/FeatherVeil_p.png b/src/main/resources/awakenedResources/images/cards/FeatherVeil_p.png new file mode 100644 index 0000000000..7f1d5cab01 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/FeatherVeil_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 0000000000..9a3dc83c04 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 0000000000..2c6b182d85 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/FlareShot.png b/src/main/resources/awakenedResources/images/cards/FlareShot.png new file mode 100644 index 0000000000..f844e22544 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/FlareShot.png differ diff --git a/src/main/resources/awakenedResources/images/cards/FlareShot_p.png b/src/main/resources/awakenedResources/images/cards/FlareShot_p.png new file mode 100644 index 0000000000..e06cec08d5 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/FlareShot_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/FourthDimension.png b/src/main/resources/awakenedResources/images/cards/FourthDimension.png new file mode 100644 index 0000000000..ee2be59953 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/FourthDimension.png differ diff --git a/src/main/resources/awakenedResources/images/cards/FourthDimension_p.png b/src/main/resources/awakenedResources/images/cards/FourthDimension_p.png new file mode 100644 index 0000000000..3ecdefbb1a Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/FourthDimension_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Gather.png b/src/main/resources/awakenedResources/images/cards/Gather.png new file mode 100644 index 0000000000..d1f9a9fd3a Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Gather.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Gather_p.png b/src/main/resources/awakenedResources/images/cards/Gather_p.png new file mode 100644 index 0000000000..82aa84e0a0 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Gather_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Gloomguard.png b/src/main/resources/awakenedResources/images/cards/Gloomguard.png new file mode 100644 index 0000000000..b8fce71444 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Gloomguard.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Gloomguard_p.png b/src/main/resources/awakenedResources/images/cards/Gloomguard_p.png new file mode 100644 index 0000000000..a7f5632815 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Gloomguard_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 0000000000..daf6010adc 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 0000000000..5f94cb674f 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 0000000000..c5954efc64 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 0000000000..85bdf17945 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/Inscribe.png b/src/main/resources/awakenedResources/images/cards/Inscribe.png new file mode 100644 index 0000000000..bbf9579ac5 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Inscribe.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Inscribe_p.png b/src/main/resources/awakenedResources/images/cards/Inscribe_p.png new file mode 100644 index 0000000000..d6dae34779 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Inscribe_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 0000000000..f439f2e4d0 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 0000000000..45be79a223 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 0000000000..b604e17638 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 0000000000..a22de76469 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/ManaShield.png b/src/main/resources/awakenedResources/images/cards/ManaShield.png new file mode 100644 index 0000000000..1e7dce367b Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/ManaShield.png differ diff --git a/src/main/resources/awakenedResources/images/cards/ManaShield_p.png b/src/main/resources/awakenedResources/images/cards/ManaShield_p.png new file mode 100644 index 0000000000..f028626ef1 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/ManaShield_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Manastorm.png b/src/main/resources/awakenedResources/images/cards/Manastorm.png new file mode 100644 index 0000000000..d2dd778ae8 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Manastorm.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Manastorm_p.png b/src/main/resources/awakenedResources/images/cards/Manastorm_p.png new file mode 100644 index 0000000000..6c28961e60 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Manastorm_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Mantis.png b/src/main/resources/awakenedResources/images/cards/Mantis.png new file mode 100644 index 0000000000..aabbb8908b Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Mantis.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Mantis_p.png b/src/main/resources/awakenedResources/images/cards/Mantis_p.png new file mode 100644 index 0000000000..18342bdef7 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Mantis_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/MiddenHeap.png b/src/main/resources/awakenedResources/images/cards/MiddenHeap.png new file mode 100644 index 0000000000..ee6eda03d0 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/MiddenHeap.png differ diff --git a/src/main/resources/awakenedResources/images/cards/MiddenHeap_p.png b/src/main/resources/awakenedResources/images/cards/MiddenHeap_p.png new file mode 100644 index 0000000000..6438b27329 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/MiddenHeap_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Minniegun.png b/src/main/resources/awakenedResources/images/cards/Minniegun.png new file mode 100644 index 0000000000..8c2781a26a Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Minniegun.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Minniegun_p.png b/src/main/resources/awakenedResources/images/cards/Minniegun_p.png new file mode 100644 index 0000000000..11df1f16a0 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Minniegun_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 0000000000..6c60aa34ba 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 0000000000..e4353dca23 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 0000000000..777be684fa 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 0000000000..df7d0d8f0f 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/Murder.png b/src/main/resources/awakenedResources/images/cards/Murder.png new file mode 100644 index 0000000000..908534563f Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Murder.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Murder_p.png b/src/main/resources/awakenedResources/images/cards/Murder_p.png new file mode 100644 index 0000000000..4627c430ff Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Murder_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/MysticOrder.png b/src/main/resources/awakenedResources/images/cards/MysticOrder.png new file mode 100644 index 0000000000..b0e3407b7a Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/MysticOrder.png differ diff --git a/src/main/resources/awakenedResources/images/cards/MysticOrder_p.png b/src/main/resources/awakenedResources/images/cards/MysticOrder_p.png new file mode 100644 index 0000000000..e4bbfa159e Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/MysticOrder_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 0000000000..d844664bed 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 0000000000..21304e5222 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/PackRat.png b/src/main/resources/awakenedResources/images/cards/PackRat.png new file mode 100644 index 0000000000..c1f5fddf0f Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/PackRat.png differ diff --git a/src/main/resources/awakenedResources/images/cards/PackRat_p.png b/src/main/resources/awakenedResources/images/cards/PackRat_p.png new file mode 100644 index 0000000000..43ce917ce6 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/PackRat_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 0000000000..da657b0d24 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 0000000000..57a995d631 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/Planeswalk.png b/src/main/resources/awakenedResources/images/cards/Planeswalk.png new file mode 100644 index 0000000000..7d1644bd77 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Planeswalk.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Planeswalk_p.png b/src/main/resources/awakenedResources/images/cards/Planeswalk_p.png new file mode 100644 index 0000000000..91e70492e2 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Planeswalk_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Pluck.png b/src/main/resources/awakenedResources/images/cards/Pluck.png new file mode 100644 index 0000000000..9cda62dcc4 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Pluck.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Pluck_p.png b/src/main/resources/awakenedResources/images/cards/Pluck_p.png new file mode 100644 index 0000000000..17cfd0a90b Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Pluck_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/PlumeJab.png b/src/main/resources/awakenedResources/images/cards/PlumeJab.png new file mode 100644 index 0000000000..363b5bc24d Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/PlumeJab.png differ diff --git a/src/main/resources/awakenedResources/images/cards/PlumeJab_p.png b/src/main/resources/awakenedResources/images/cards/PlumeJab_p.png new file mode 100644 index 0000000000..e7617265c2 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/PlumeJab_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 0000000000..06e560e0e4 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 0000000000..28ba02f452 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 0000000000..9347a14069 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 0000000000..b027121437 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/ProfaneStrike.png b/src/main/resources/awakenedResources/images/cards/ProfaneStrike.png new file mode 100644 index 0000000000..626621d003 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/ProfaneStrike.png differ diff --git a/src/main/resources/awakenedResources/images/cards/ProfaneStrike_p.png b/src/main/resources/awakenedResources/images/cards/ProfaneStrike_p.png new file mode 100644 index 0000000000..2cd803a634 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/ProfaneStrike_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 0000000000..0d4d2bcf9d 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 0000000000..f9c6dcb23c 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/RavenStrike.png b/src/main/resources/awakenedResources/images/cards/RavenStrike.png new file mode 100644 index 0000000000..cd0ae47690 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/RavenStrike.png differ diff --git a/src/main/resources/awakenedResources/images/cards/RavenStrike_p.png b/src/main/resources/awakenedResources/images/cards/RavenStrike_p.png new file mode 100644 index 0000000000..d50ca308ac Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/RavenStrike_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 0000000000..1630a4ef3c 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 0000000000..4970d95b19 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/Rebirth.png b/src/main/resources/awakenedResources/images/cards/Rebirth.png new file mode 100644 index 0000000000..d81db56483 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Rebirth.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Rebirth_p.png b/src/main/resources/awakenedResources/images/cards/Rebirth_p.png new file mode 100644 index 0000000000..6753e1956c Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Rebirth_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Recitation.png b/src/main/resources/awakenedResources/images/cards/Recitation.png new file mode 100644 index 0000000000..bdbe057281 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Recitation.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Recitation_p.png b/src/main/resources/awakenedResources/images/cards/Recitation_p.png new file mode 100644 index 0000000000..24702435a3 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Recitation_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 0000000000..e9924b9755 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 0000000000..8cf3540f0b 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/Scheme.png b/src/main/resources/awakenedResources/images/cards/Scheme.png new file mode 100644 index 0000000000..4619361f0f Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Scheme.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Scheme_p.png b/src/main/resources/awakenedResources/images/cards/Scheme_p.png new file mode 100644 index 0000000000..347de23f50 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Scheme_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 0000000000..716b601799 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 0000000000..3cb743c727 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/SignInBlood.png b/src/main/resources/awakenedResources/images/cards/SignInBlood.png new file mode 100644 index 0000000000..6ee19b2fe4 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/SignInBlood.png differ diff --git a/src/main/resources/awakenedResources/images/cards/SignInBlood_p.png b/src/main/resources/awakenedResources/images/cards/SignInBlood_p.png new file mode 100644 index 0000000000..f487c23289 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/SignInBlood_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 0000000000..27551a385f 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 0000000000..d7e335b12e 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 0000000000..2b817b3b19 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 0000000000..3b4a35eb48 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/Skyward.png b/src/main/resources/awakenedResources/images/cards/Skyward.png new file mode 100644 index 0000000000..35e90901de Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Skyward.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Skyward_p.png b/src/main/resources/awakenedResources/images/cards/Skyward_p.png new file mode 100644 index 0000000000..6a0b578930 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Skyward_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/SludgeBomb.png b/src/main/resources/awakenedResources/images/cards/SludgeBomb.png new file mode 100644 index 0000000000..ca85c6c32e Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/SludgeBomb.png differ diff --git a/src/main/resources/awakenedResources/images/cards/SludgeBomb_p.png b/src/main/resources/awakenedResources/images/cards/SludgeBomb_p.png new file mode 100644 index 0000000000..c20e512b0d Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/SludgeBomb_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 0000000000..f54525f34f 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 0000000000..ba95a760a4 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/SoulStrike.png b/src/main/resources/awakenedResources/images/cards/SoulStrike.png new file mode 100644 index 0000000000..4b444d1c46 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/SoulStrike.png differ diff --git a/src/main/resources/awakenedResources/images/cards/SoulStrike_p.png b/src/main/resources/awakenedResources/images/cards/SoulStrike_p.png new file mode 100644 index 0000000000..75ca17fb4a Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/SoulStrike_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Spellbinder.png b/src/main/resources/awakenedResources/images/cards/Spellbinder.png new file mode 100644 index 0000000000..833a4b59a2 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Spellbinder.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Spellbinder_p.png b/src/main/resources/awakenedResources/images/cards/Spellbinder_p.png new file mode 100644 index 0000000000..37c88c69f5 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Spellbinder_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 0000000000..8769c4ce92 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 0000000000..804859be89 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/Spew.png b/src/main/resources/awakenedResources/images/cards/Spew.png new file mode 100644 index 0000000000..e7050c87e6 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Spew.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Spew_p.png b/src/main/resources/awakenedResources/images/cards/Spew_p.png new file mode 100644 index 0000000000..7054f80cbc Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Spew_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/SplitWide.png b/src/main/resources/awakenedResources/images/cards/SplitWide.png new file mode 100644 index 0000000000..e70dd998c1 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/SplitWide.png differ diff --git a/src/main/resources/awakenedResources/images/cards/SplitWide_p.png b/src/main/resources/awakenedResources/images/cards/SplitWide_p.png new file mode 100644 index 0000000000..d7c6b4bd01 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/SplitWide_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/SpreadingSpores.png b/src/main/resources/awakenedResources/images/cards/SpreadingSpores.png new file mode 100644 index 0000000000..a3e1ef7d8e Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/SpreadingSpores.png differ diff --git a/src/main/resources/awakenedResources/images/cards/SpreadingSpores_p.png b/src/main/resources/awakenedResources/images/cards/SpreadingSpores_p.png new file mode 100644 index 0000000000..803a8aaf5d Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/SpreadingSpores_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/StormRuler.png b/src/main/resources/awakenedResources/images/cards/StormRuler.png new file mode 100644 index 0000000000..5ee5a4bcd8 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/StormRuler.png differ diff --git a/src/main/resources/awakenedResources/images/cards/StormRuler_p.png b/src/main/resources/awakenedResources/images/cards/StormRuler_p.png new file mode 100644 index 0000000000..9798d4e17f Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/StormRuler_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Strike.png b/src/main/resources/awakenedResources/images/cards/Strike.png new file mode 100644 index 0000000000..3aec4acd3a Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Strike.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Strike_p.png b/src/main/resources/awakenedResources/images/cards/Strike_p.png new file mode 100644 index 0000000000..06a34ae4c5 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Strike_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/TakeFlight.png b/src/main/resources/awakenedResources/images/cards/TakeFlight.png new file mode 100644 index 0000000000..ea7d7fca02 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/TakeFlight.png differ diff --git a/src/main/resources/awakenedResources/images/cards/TakeFlight_p.png b/src/main/resources/awakenedResources/images/cards/TakeFlight_p.png new file mode 100644 index 0000000000..af88ea6212 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/TakeFlight_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/TalonRake.png b/src/main/resources/awakenedResources/images/cards/TalonRake.png new file mode 100644 index 0000000000..23ab2aa46d Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/TalonRake.png differ diff --git a/src/main/resources/awakenedResources/images/cards/TalonRake_p.png b/src/main/resources/awakenedResources/images/cards/TalonRake_p.png new file mode 100644 index 0000000000..d2918bf3b3 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/TalonRake_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 0000000000..eb0a685a4c 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 0000000000..335bec13f8 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/TheEncyclopedia.png b/src/main/resources/awakenedResources/images/cards/TheEncyclopedia.png new file mode 100644 index 0000000000..09d9511b25 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/TheEncyclopedia.png differ diff --git a/src/main/resources/awakenedResources/images/cards/TheEncyclopedia_p.png b/src/main/resources/awakenedResources/images/cards/TheEncyclopedia_p.png new file mode 100644 index 0000000000..6d5ec84c18 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/TheEncyclopedia_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/TheTower.png b/src/main/resources/awakenedResources/images/cards/TheTower.png new file mode 100644 index 0000000000..78d58fe183 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/TheTower.png differ diff --git a/src/main/resources/awakenedResources/images/cards/TheTower_p.png b/src/main/resources/awakenedResources/images/cards/TheTower_p.png new file mode 100644 index 0000000000..79286773ce Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/TheTower_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 0000000000..09a78ddd4f 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 0000000000..42ad9f5c25 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/Unleash.png b/src/main/resources/awakenedResources/images/cards/Unleash.png new file mode 100644 index 0000000000..ee451aed79 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Unleash.png differ diff --git a/src/main/resources/awakenedResources/images/cards/Unleash_p.png b/src/main/resources/awakenedResources/images/cards/Unleash_p.png new file mode 100644 index 0000000000..1200e9ff82 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/Unleash_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 0000000000..84dcbde884 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 0000000000..58e7fe05a8 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 0000000000..78623ee878 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 0000000000..2487599a94 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/ArcaneNesting.png b/src/main/resources/awakenedResources/images/cards/joke/ArcaneNesting.png new file mode 100644 index 0000000000..bcb260ca79 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/ArcaneNesting.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/ArcaneNesting_p.png b/src/main/resources/awakenedResources/images/cards/joke/ArcaneNesting_p.png new file mode 100644 index 0000000000..efc9f8fc78 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/ArcaneNesting_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/Archmagus.png b/src/main/resources/awakenedResources/images/cards/joke/Archmagus.png new file mode 100644 index 0000000000..bfcdd07db2 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/Archmagus.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/Archmagus_p.png b/src/main/resources/awakenedResources/images/cards/joke/Archmagus_p.png new file mode 100644 index 0000000000..6750c06756 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/Archmagus_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/AwakenedForm.png b/src/main/resources/awakenedResources/images/cards/joke/AwakenedForm.png new file mode 100644 index 0000000000..3be8cd817e Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/AwakenedForm.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/AwakenedForm_p.png b/src/main/resources/awakenedResources/images/cards/joke/AwakenedForm_p.png new file mode 100644 index 0000000000..25f9708068 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/AwakenedForm_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/BirdsEye.png b/src/main/resources/awakenedResources/images/cards/joke/BirdsEye.png new file mode 100644 index 0000000000..e5434c3503 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/BirdsEye.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/BirdsEye_p.png b/src/main/resources/awakenedResources/images/cards/joke/BirdsEye_p.png new file mode 100644 index 0000000000..e84151d0cc Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/BirdsEye_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 0000000000..150e949d53 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 0000000000..64a1b5d98f 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 0000000000..6066cb9f36 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 0000000000..cb134cc8bd 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 0000000000..0968e6d7fc 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 0000000000..fbbeb7806c 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/Crusher.png b/src/main/resources/awakenedResources/images/cards/joke/Crusher.png new file mode 100644 index 0000000000..5372d2ff0c Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/Crusher.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/Crusher_p.png b/src/main/resources/awakenedResources/images/cards/joke/Crusher_p.png new file mode 100644 index 0000000000..7742f13d36 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/Crusher_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 0000000000..aeebaef9c7 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 0000000000..10da92c845 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/Daggerstorm.png b/src/main/resources/awakenedResources/images/cards/joke/Daggerstorm.png new file mode 100644 index 0000000000..13e2560357 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/Daggerstorm.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/Daggerstorm_p.png b/src/main/resources/awakenedResources/images/cards/joke/Daggerstorm_p.png new file mode 100644 index 0000000000..8d378de808 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/Daggerstorm_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/DarkEcho.png b/src/main/resources/awakenedResources/images/cards/joke/DarkEcho.png new file mode 100644 index 0000000000..c762137592 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/DarkEcho.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/DarkEcho_p.png b/src/main/resources/awakenedResources/images/cards/joke/DarkEcho_p.png new file mode 100644 index 0000000000..7c56491bc0 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/DarkEcho_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 0000000000..c434c335c5 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 0000000000..78a3f7c0dd 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/DarknessFalls.png b/src/main/resources/awakenedResources/images/cards/joke/DarknessFalls.png new file mode 100644 index 0000000000..610ff45b7e Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/DarknessFalls.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/DarknessFalls_p.png b/src/main/resources/awakenedResources/images/cards/joke/DarknessFalls_p.png new file mode 100644 index 0000000000..9625bbb0bc Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/DarknessFalls_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 0000000000..b242bc7159 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 0000000000..d3a878b810 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/Dejection.png b/src/main/resources/awakenedResources/images/cards/joke/Dejection.png new file mode 100644 index 0000000000..56db0625ce Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/Dejection.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/Dejection_p.png b/src/main/resources/awakenedResources/images/cards/joke/Dejection_p.png new file mode 100644 index 0000000000..4263c9ff6f Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/Dejection_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/Eventide.png b/src/main/resources/awakenedResources/images/cards/joke/Eventide.png new file mode 100644 index 0000000000..3c7acfaa5f Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/Eventide.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/Eventide_p.png b/src/main/resources/awakenedResources/images/cards/joke/Eventide_p.png new file mode 100644 index 0000000000..a1e5bf367d Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/Eventide_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/Gloomguard.png b/src/main/resources/awakenedResources/images/cards/joke/Gloomguard.png new file mode 100644 index 0000000000..96022051ee Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/Gloomguard.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/Gloomguard_p.png b/src/main/resources/awakenedResources/images/cards/joke/Gloomguard_p.png new file mode 100644 index 0000000000..c0dbe8395c Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/Gloomguard_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/Hymn.png b/src/main/resources/awakenedResources/images/cards/joke/Hymn.png new file mode 100644 index 0000000000..80faf0409c Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/Hymn.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/Hymn_p.png b/src/main/resources/awakenedResources/images/cards/joke/Hymn_p.png new file mode 100644 index 0000000000..bb85c89172 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/Hymn_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/Inscribe.png b/src/main/resources/awakenedResources/images/cards/joke/Inscribe.png new file mode 100644 index 0000000000..5cc5529e77 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/Inscribe.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/Inscribe_p.png b/src/main/resources/awakenedResources/images/cards/joke/Inscribe_p.png new file mode 100644 index 0000000000..99cb51fcc4 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/Inscribe_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/KnifesEdge.png b/src/main/resources/awakenedResources/images/cards/joke/KnifesEdge.png new file mode 100644 index 0000000000..9b880dc850 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/KnifesEdge.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/KnifesEdge_p.png b/src/main/resources/awakenedResources/images/cards/joke/KnifesEdge_p.png new file mode 100644 index 0000000000..7eed3f9816 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/KnifesEdge_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/ManaShield.png b/src/main/resources/awakenedResources/images/cards/joke/ManaShield.png new file mode 100644 index 0000000000..1e7dce367b Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/ManaShield.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/ManaShield_p.png b/src/main/resources/awakenedResources/images/cards/joke/ManaShield_p.png new file mode 100644 index 0000000000..f028626ef1 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/ManaShield_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/Mantis.png b/src/main/resources/awakenedResources/images/cards/joke/Mantis.png new file mode 100644 index 0000000000..aabbb8908b Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/Mantis.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/Mantis_p.png b/src/main/resources/awakenedResources/images/cards/joke/Mantis_p.png new file mode 100644 index 0000000000..18342bdef7 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/Mantis_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/MiddenHeap.png b/src/main/resources/awakenedResources/images/cards/joke/MiddenHeap.png new file mode 100644 index 0000000000..d024cfea60 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/MiddenHeap.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/MiddenHeap_p.png b/src/main/resources/awakenedResources/images/cards/joke/MiddenHeap_p.png new file mode 100644 index 0000000000..2957d0362a Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/MiddenHeap_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/Minniegun.png b/src/main/resources/awakenedResources/images/cards/joke/Minniegun.png new file mode 100644 index 0000000000..8c2781a26a Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/Minniegun.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/Minniegun_p.png b/src/main/resources/awakenedResources/images/cards/joke/Minniegun_p.png new file mode 100644 index 0000000000..11df1f16a0 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/Minniegun_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/MoonlitVision.png b/src/main/resources/awakenedResources/images/cards/joke/MoonlitVision.png new file mode 100644 index 0000000000..3049070c98 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/MoonlitVision.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/MoonlitVision_p.png b/src/main/resources/awakenedResources/images/cards/joke/MoonlitVision_p.png new file mode 100644 index 0000000000..fbaa7cbc68 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/MoonlitVision_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/Nihil.png b/src/main/resources/awakenedResources/images/cards/joke/Nihil.png new file mode 100644 index 0000000000..9760d62fc0 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/Nihil.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/Nihil_p.png b/src/main/resources/awakenedResources/images/cards/joke/Nihil_p.png new file mode 100644 index 0000000000..d95c297d6e Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/Nihil_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/PackRat.png b/src/main/resources/awakenedResources/images/cards/joke/PackRat.png new file mode 100644 index 0000000000..c1f5fddf0f Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/PackRat.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/PackRat_p.png b/src/main/resources/awakenedResources/images/cards/joke/PackRat_p.png new file mode 100644 index 0000000000..43ce917ce6 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/PackRat_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/Primacy.png b/src/main/resources/awakenedResources/images/cards/joke/Primacy.png new file mode 100644 index 0000000000..ead8a4f9e0 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/Primacy.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/Primacy_p.png b/src/main/resources/awakenedResources/images/cards/joke/Primacy_p.png new file mode 100644 index 0000000000..5020720881 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/Primacy_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/RavenStrike.png b/src/main/resources/awakenedResources/images/cards/joke/RavenStrike.png new file mode 100644 index 0000000000..bcd6323231 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/RavenStrike.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/RavenStrike_p.png b/src/main/resources/awakenedResources/images/cards/joke/RavenStrike_p.png new file mode 100644 index 0000000000..e97c21c931 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/RavenStrike_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/Rebirth.png b/src/main/resources/awakenedResources/images/cards/joke/Rebirth.png new file mode 100644 index 0000000000..7dd26a62ec Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/Rebirth.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/Rebirth_p.png b/src/main/resources/awakenedResources/images/cards/joke/Rebirth_p.png new file mode 100644 index 0000000000..0f9301484b Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/Rebirth_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/Scheme.png b/src/main/resources/awakenedResources/images/cards/joke/Scheme.png new file mode 100644 index 0000000000..4619361f0f Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/Scheme.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/Scheme_p.png b/src/main/resources/awakenedResources/images/cards/joke/Scheme_p.png new file mode 100644 index 0000000000..347de23f50 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/Scheme_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/SignInBlood.png b/src/main/resources/awakenedResources/images/cards/joke/SignInBlood.png new file mode 100644 index 0000000000..6ee19b2fe4 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/SignInBlood.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/SignInBlood_p.png b/src/main/resources/awakenedResources/images/cards/joke/SignInBlood_p.png new file mode 100644 index 0000000000..f487c23289 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/SignInBlood_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/SludgeBomb.png b/src/main/resources/awakenedResources/images/cards/joke/SludgeBomb.png new file mode 100644 index 0000000000..07dfa097bb Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/SludgeBomb.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/SludgeBomb_p.png b/src/main/resources/awakenedResources/images/cards/joke/SludgeBomb_p.png new file mode 100644 index 0000000000..d33176da8a Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/SludgeBomb_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/Spellbinder.png b/src/main/resources/awakenedResources/images/cards/joke/Spellbinder.png new file mode 100644 index 0000000000..ce8c30db32 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/Spellbinder.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/Spellbinder_p.png b/src/main/resources/awakenedResources/images/cards/joke/Spellbinder_p.png new file mode 100644 index 0000000000..0cd796176b Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/Spellbinder_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/Spew.png b/src/main/resources/awakenedResources/images/cards/joke/Spew.png new file mode 100644 index 0000000000..9bd94890a8 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/Spew.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/Spew_p.png b/src/main/resources/awakenedResources/images/cards/joke/Spew_p.png new file mode 100644 index 0000000000..358322dee3 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/Spew_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/SpreadingSpores.png b/src/main/resources/awakenedResources/images/cards/joke/SpreadingSpores.png new file mode 100644 index 0000000000..a3e1ef7d8e Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/SpreadingSpores.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/SpreadingSpores_p.png b/src/main/resources/awakenedResources/images/cards/joke/SpreadingSpores_p.png new file mode 100644 index 0000000000..803a8aaf5d Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/SpreadingSpores_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 0000000000..5810f9db46 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 0000000000..529f104055 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/TheEncyclopedia.png b/src/main/resources/awakenedResources/images/cards/joke/TheEncyclopedia.png new file mode 100644 index 0000000000..09d9511b25 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/TheEncyclopedia.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/TheEncyclopedia_p.png b/src/main/resources/awakenedResources/images/cards/joke/TheEncyclopedia_p.png new file mode 100644 index 0000000000..6d5ec84c18 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/TheEncyclopedia_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/TheTower.png b/src/main/resources/awakenedResources/images/cards/joke/TheTower.png new file mode 100644 index 0000000000..8ede3fe6dc Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/TheTower.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/TheTower_p.png b/src/main/resources/awakenedResources/images/cards/joke/TheTower_p.png new file mode 100644 index 0000000000..e575caa02f Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/TheTower_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 0000000000..a8c4a4487a 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 0000000000..277aea2dd9 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/joke/Unleash.png b/src/main/resources/awakenedResources/images/cards/joke/Unleash.png new file mode 100644 index 0000000000..f26feea00e Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/Unleash.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/Unleash_p.png b/src/main/resources/awakenedResources/images/cards/joke/Unleash_p.png new file mode 100644 index 0000000000..8c24c3f933 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/Unleash_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/Victuals.png b/src/main/resources/awakenedResources/images/cards/joke/Victuals.png new file mode 100644 index 0000000000..557763d3df Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/Victuals.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/Victuals_p.png b/src/main/resources/awakenedResources/images/cards/joke/Victuals_p.png new file mode 100644 index 0000000000..1ee95f49ec Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/Victuals_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/WaveOfMiasma.png b/src/main/resources/awakenedResources/images/cards/joke/WaveOfMiasma.png new file mode 100644 index 0000000000..3798621ddd Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/WaveOfMiasma.png differ diff --git a/src/main/resources/awakenedResources/images/cards/joke/WaveOfMiasma_p.png b/src/main/resources/awakenedResources/images/cards/joke/WaveOfMiasma_p.png new file mode 100644 index 0000000000..9470e7c434 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/joke/WaveOfMiasma_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 0000000000..854a9e8de7 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 0000000000..9d2c3d04ae 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 0000000000..7336191e78 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 0000000000..7bf95c3212 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 0000000000..a59ad3f3c1 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 0000000000..b3cd75583a 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 0000000000..1f948d7fef 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 0000000000..a01b613b18 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 0000000000..b9d34b36a0 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 0000000000..04f605cf39 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 0000000000..a076b16c53 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 0000000000..c85eb29e0c 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 0000000000..7e639d3b0a 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 0000000000..cc6d9de341 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 0000000000..61117f55f0 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 0000000000..01e9e3653d 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 0000000000..4e39311f25 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 0000000000..2d8f2f18ff 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 0000000000..1761946586 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 0000000000..ef3a3fc7d9 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 0000000000..57654284bb 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 0000000000..6b59b16d59 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 0000000000..b4c38b778c 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 0000000000..4a4a41f578 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 0000000000..4ec91b5909 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 0000000000..f022bee120 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 0000000000..73faf1c481 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 0000000000..1aaf2baed4 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 0000000000..c17ab5aba0 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 0000000000..c093bb489d 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 0000000000..9838afe509 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 0000000000..ad27a23d14 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/Crusher.png b/src/main/resources/awakenedResources/images/cards/programmerart/Crusher.png new file mode 100644 index 0000000000..5372d2ff0c Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Crusher.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Crusher_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/Crusher_p.png new file mode 100644 index 0000000000..7742f13d36 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Crusher_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Daggerstorm.png b/src/main/resources/awakenedResources/images/cards/programmerart/Daggerstorm.png new file mode 100644 index 0000000000..13e2560357 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Daggerstorm.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Daggerstorm_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/Daggerstorm_p.png new file mode 100644 index 0000000000..8d378de808 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Daggerstorm_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 0000000000..fa63951d89 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 0000000000..9a3c4c00d0 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 0000000000..8e977ec56c 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 0000000000..21373b374d 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 0000000000..17f25ddf1d 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 0000000000..56f44425a2 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 0000000000..b0912571a5 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 0000000000..5054033b53 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 0000000000..f9a2781bb0 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 0000000000..b9eeea7ec2 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 0000000000..d058302c4b 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 0000000000..b0202724a1 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 0000000000..500fc14ae6 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 0000000000..05ce6fb5c9 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 0000000000..d29e028ec4 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 0000000000..e4585fefcc 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 0000000000..9b0a190fbf 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 0000000000..1e4e2f7c82 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 0000000000..7b4bbb2cf9 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 0000000000..09c31d4e3f 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 0000000000..d25651f4de 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 0000000000..1aabdf4138 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/Eventide.png b/src/main/resources/awakenedResources/images/cards/programmerart/Eventide.png new file mode 100644 index 0000000000..ff7637b064 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Eventide.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Eventide_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/Eventide_p.png new file mode 100644 index 0000000000..78096079cf Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Eventide_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 0000000000..9868ebe5f1 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 0000000000..72689c504c 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 0000000000..42e6fc99f7 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 0000000000..f6f8b6cd83 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 0000000000..1b25d950ae 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 0000000000..bac9aad967 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 0000000000..7a0eb94c53 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 0000000000..84f8728e6f 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 0000000000..2ca39a6a4a 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 b/src/main/resources/awakenedResources/images/cards/programmerart/FourthDimension_p.png new file mode 100644 index 0000000000..ec6c01e317 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/FourthDimension_p.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 0000000000..9e8d83664c 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 0000000000..87662f86a0 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 0000000000..21994782c8 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 0000000000..d4cce6bc99 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 0000000000..ee7b348d43 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 0000000000..9d3b24d4f9 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 0000000000..27616b83dd 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 0000000000..2df3f35aa7 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 0000000000..caf27825c0 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 0000000000..0c563d2e7f 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 0000000000..2cd8bbf878 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 0000000000..62ce8f1b95 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/Inscribe.png b/src/main/resources/awakenedResources/images/cards/programmerart/Inscribe.png new file mode 100644 index 0000000000..f50a42917b Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Inscribe.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Inscribe_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/Inscribe_p.png new file mode 100644 index 0000000000..9ba9d1942b Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Inscribe_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 0000000000..7ecf158d97 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 0000000000..0445db90ba 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 0000000000..4c430a4e82 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 0000000000..3066a99c6f 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/ManaShield.png b/src/main/resources/awakenedResources/images/cards/programmerart/ManaShield.png new file mode 100644 index 0000000000..1e7dce367b Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/ManaShield.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/ManaShield_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/ManaShield_p.png new file mode 100644 index 0000000000..f028626ef1 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/ManaShield_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 0000000000..7990c02e50 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 0000000000..54c402ab98 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/Mantis.png b/src/main/resources/awakenedResources/images/cards/programmerart/Mantis.png new file mode 100644 index 0000000000..aabbb8908b Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Mantis.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Mantis_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/Mantis_p.png new file mode 100644 index 0000000000..18342bdef7 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Mantis_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 0000000000..d024cfea60 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 0000000000..2957d0362a 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/Minniegun.png b/src/main/resources/awakenedResources/images/cards/programmerart/Minniegun.png new file mode 100644 index 0000000000..8c2781a26a Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Minniegun.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Minniegun_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/Minniegun_p.png new file mode 100644 index 0000000000..11df1f16a0 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Minniegun_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 0000000000..d8f4f0b62b 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 0000000000..6288165c24 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 0000000000..ede8b97df0 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 0000000000..cb10c13e8f 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 0000000000..871261afc1 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 0000000000..c0526aa621 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 0000000000..0f3bc62e8a 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 0000000000..5c5540618f 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 0000000000..5261ec8788 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 0000000000..bf654f215c 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/PackRat.png b/src/main/resources/awakenedResources/images/cards/programmerart/PackRat.png new file mode 100644 index 0000000000..c1f5fddf0f Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/PackRat.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/PackRat_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/PackRat_p.png new file mode 100644 index 0000000000..43ce917ce6 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/PackRat_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 0000000000..7af4ec21d4 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 0000000000..9c8450cac8 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 0000000000..cd4fcc9076 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 0000000000..7d051575c5 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 0000000000..6a5e623008 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 0000000000..5750f23b84 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 0000000000..7c4c3f1ff3 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 0000000000..5c65f50ecd 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 0000000000..bc3195ce86 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 0000000000..70d0c410a6 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 0000000000..0a7bf5a7dd 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 0000000000..28930abcd3 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 0000000000..0304f5136e 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 0000000000..6b8ea5abe9 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 0000000000..90fdab84d7 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 0000000000..1a7271d5df 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 0000000000..e4ca7e3855 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 0000000000..7525619b86 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 0000000000..a886a0820e 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 0000000000..a646fd30ea 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 0000000000..4a87fa9e1d 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 0000000000..323545fcca 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 0000000000..e49c3a85f6 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 0000000000..c07b7c12e5 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 0000000000..4c238d4709 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 0000000000..ad7bd81f9e 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/Scheme.png b/src/main/resources/awakenedResources/images/cards/programmerart/Scheme.png new file mode 100644 index 0000000000..4619361f0f Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Scheme.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/Scheme_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/Scheme_p.png new file mode 100644 index 0000000000..347de23f50 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/Scheme_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 0000000000..190eea7607 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 0000000000..da86cfb038 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 0000000000..ed86514c41 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 0000000000..4ff0a39b1b 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/SignInBlood.png b/src/main/resources/awakenedResources/images/cards/programmerart/SignInBlood.png new file mode 100644 index 0000000000..6ee19b2fe4 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/SignInBlood.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/SignInBlood_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/SignInBlood_p.png new file mode 100644 index 0000000000..f487c23289 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/SignInBlood_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 0000000000..57c86924f5 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 0000000000..46ea9599bc 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 0000000000..9d352ad8a2 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 0000000000..9f06cd9a13 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 0000000000..80e1dcb1f1 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 0000000000..caf36f4177 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 0000000000..3d5e622688 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 0000000000..a7501e4039 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 0000000000..e376490ef3 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 0000000000..e2c597197d 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 0000000000..d4100e4176 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 0000000000..f49f0d5446 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 0000000000..8fa436cdb9 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 0000000000..2d6d55c3b0 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 0000000000..ec0d197779 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 0000000000..b97149584c 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 0000000000..70a47af6ee 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 0000000000..37230550cf 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 0000000000..ca9b6f243b 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 0000000000..6ad5ca9bcc 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/SpreadingSpores.png b/src/main/resources/awakenedResources/images/cards/programmerart/SpreadingSpores.png new file mode 100644 index 0000000000..a3e1ef7d8e Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/SpreadingSpores.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/SpreadingSpores_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/SpreadingSpores_p.png new file mode 100644 index 0000000000..803a8aaf5d Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/SpreadingSpores_p.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/StormRuler.png b/src/main/resources/awakenedResources/images/cards/programmerart/StormRuler.png new file mode 100644 index 0000000000..301b38063b Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/StormRuler.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/StormRuler_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/StormRuler_p.png new file mode 100644 index 0000000000..a1f6091981 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/StormRuler_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 0000000000..5d1951db8f 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 0000000000..7591c16357 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 0000000000..65a0597cf8 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 0000000000..6231202a27 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 0000000000..b064d79f6e 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 0000000000..05165fc822 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 0000000000..d0c3773076 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 0000000000..b6009c2763 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/TheEncyclopedia.png b/src/main/resources/awakenedResources/images/cards/programmerart/TheEncyclopedia.png new file mode 100644 index 0000000000..09d9511b25 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/TheEncyclopedia.png differ diff --git a/src/main/resources/awakenedResources/images/cards/programmerart/TheEncyclopedia_p.png b/src/main/resources/awakenedResources/images/cards/programmerart/TheEncyclopedia_p.png new file mode 100644 index 0000000000..6d5ec84c18 Binary files /dev/null and b/src/main/resources/awakenedResources/images/cards/programmerart/TheEncyclopedia_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 0000000000..23e786c201 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 0000000000..616a8750a5 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 0000000000..d6e1a563b6 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 0000000000..7fb0b32f71 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 0000000000..4441ff856f 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 0000000000..b96acbf035 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 0000000000..e0ce4f2a26 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 0000000000..dff9abc98d 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 0000000000..bd61ab3680 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 0000000000..949191840c 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 0000000000..f7aecc3549 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 0000000000..b583ee88ae 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 0000000000..2a251ab00b 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 0000000000..b62a71169e 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 0000000000..e2e32fb478 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 0000000000..48bf827d57 Binary files /dev/null and b/src/main/resources/awakenedResources/images/mainChar/AwakenedOne.png differ diff --git a/src/main/resources/awakenedResources/images/mainChar/AwakenedOneBonfireREDFIRE.png b/src/main/resources/awakenedResources/images/mainChar/AwakenedOneBonfireREDFIRE.png new file mode 100644 index 0000000000..3fbad551cf Binary files /dev/null and b/src/main/resources/awakenedResources/images/mainChar/AwakenedOneBonfireREDFIRE.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 0000000000..4be26b3b66 --- /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 0000000000..723cc350ac --- /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/corpse.png b/src/main/resources/awakenedResources/images/mainChar/corpse.png new file mode 100644 index 0000000000..5360e94eb0 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 0000000000..f1d4cd8c1b 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 0000000000..c48d7817f9 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 0000000000..08dd905cbe 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 0000000000..283537b0ba 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 0000000000..c77cf1d5c9 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 0000000000..2da003a416 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 0000000000..6b9a8129e7 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 0000000000..368bca8859 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 0000000000..589d7fd592 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 0000000000..f41be73856 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 0000000000..5e7c783717 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 0000000000..273ed14c71 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 0000000000..6b8da21483 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 0000000000..4d40ef8693 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 0000000000..0e20e33d62 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 0000000000..03c5e384bd 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 0000000000..6c08cfc943 --- /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/AphoticFountPower32.png b/src/main/resources/awakenedResources/images/powers/AphoticFountPower32.png new file mode 100644 index 0000000000..4237e49840 Binary files /dev/null and b/src/main/resources/awakenedResources/images/powers/AphoticFountPower32.png differ diff --git a/src/main/resources/awakenedResources/images/powers/AphoticFountPower84.png b/src/main/resources/awakenedResources/images/powers/AphoticFountPower84.png new file mode 100644 index 0000000000..e9fd31fc4b Binary files /dev/null and b/src/main/resources/awakenedResources/images/powers/AphoticFountPower84.png differ diff --git a/src/main/resources/awakenedResources/images/powers/ArchmagusPower32.png b/src/main/resources/awakenedResources/images/powers/ArchmagusPower32.png new file mode 100644 index 0000000000..d898b89a5d Binary files /dev/null and b/src/main/resources/awakenedResources/images/powers/ArchmagusPower32.png differ diff --git a/src/main/resources/awakenedResources/images/powers/ArchmagusPower84.png b/src/main/resources/awakenedResources/images/powers/ArchmagusPower84.png new file mode 100644 index 0000000000..8aab6eb1d0 Binary files /dev/null and b/src/main/resources/awakenedResources/images/powers/ArchmagusPower84.png differ diff --git a/src/main/resources/awakenedResources/images/powers/ChosensVersePower32.png b/src/main/resources/awakenedResources/images/powers/ChosensVersePower32.png new file mode 100644 index 0000000000..f6bdd82ebf Binary files /dev/null and b/src/main/resources/awakenedResources/images/powers/ChosensVersePower32.png differ diff --git a/src/main/resources/awakenedResources/images/powers/ChosensVersePower84.png b/src/main/resources/awakenedResources/images/powers/ChosensVersePower84.png new file mode 100644 index 0000000000..cf1008a2a3 Binary files /dev/null and b/src/main/resources/awakenedResources/images/powers/ChosensVersePower84.png differ diff --git a/src/main/resources/awakenedResources/images/powers/ConjureNextPower32.png b/src/main/resources/awakenedResources/images/powers/ConjureNextPower32.png new file mode 100644 index 0000000000..a4efb9c9e7 Binary files /dev/null and b/src/main/resources/awakenedResources/images/powers/ConjureNextPower32.png differ diff --git a/src/main/resources/awakenedResources/images/powers/ConjureNextPower84.png b/src/main/resources/awakenedResources/images/powers/ConjureNextPower84.png new file mode 100644 index 0000000000..07c9398b56 Binary files /dev/null and b/src/main/resources/awakenedResources/images/powers/ConjureNextPower84.png differ diff --git a/src/main/resources/awakenedResources/images/powers/CursedStrength32.png b/src/main/resources/awakenedResources/images/powers/CursedStrength32.png new file mode 100644 index 0000000000..7ad61afc6b Binary files /dev/null and b/src/main/resources/awakenedResources/images/powers/CursedStrength32.png differ diff --git a/src/main/resources/awakenedResources/images/powers/CursedStrength84.png b/src/main/resources/awakenedResources/images/powers/CursedStrength84.png new file mode 100644 index 0000000000..a41e15bfce Binary files /dev/null and b/src/main/resources/awakenedResources/images/powers/CursedStrength84.png differ diff --git a/src/main/resources/awakenedResources/images/powers/DaggerstormPower32.png b/src/main/resources/awakenedResources/images/powers/DaggerstormPower32.png new file mode 100644 index 0000000000..8eb77a2cac Binary files /dev/null and b/src/main/resources/awakenedResources/images/powers/DaggerstormPower32.png differ diff --git a/src/main/resources/awakenedResources/images/powers/DaggerstormPower84.png b/src/main/resources/awakenedResources/images/powers/DaggerstormPower84.png new file mode 100644 index 0000000000..51c11e5e89 Binary files /dev/null and b/src/main/resources/awakenedResources/images/powers/DaggerstormPower84.png differ 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 0000000000..513fbc7468 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 0000000000..da46da6fb8 Binary files /dev/null and b/src/main/resources/awakenedResources/images/powers/DarknessFallsPower84.png differ diff --git a/src/main/resources/awakenedResources/images/powers/DemonGlyphPower32.png b/src/main/resources/awakenedResources/images/powers/DemonGlyphPower32.png new file mode 100644 index 0000000000..74f2517b14 Binary files /dev/null and b/src/main/resources/awakenedResources/images/powers/DemonGlyphPower32.png differ diff --git a/src/main/resources/awakenedResources/images/powers/DemonGlyphPower84.png b/src/main/resources/awakenedResources/images/powers/DemonGlyphPower84.png new file mode 100644 index 0000000000..5087dbbcab Binary files /dev/null and b/src/main/resources/awakenedResources/images/powers/DemonGlyphPower84.png differ diff --git a/src/main/resources/awakenedResources/images/powers/EclipseEmbracePower32.png b/src/main/resources/awakenedResources/images/powers/EclipseEmbracePower32.png new file mode 100644 index 0000000000..1bbcb6e533 Binary files /dev/null and b/src/main/resources/awakenedResources/images/powers/EclipseEmbracePower32.png differ diff --git a/src/main/resources/awakenedResources/images/powers/EclipseEmbracePower84.png b/src/main/resources/awakenedResources/images/powers/EclipseEmbracePower84.png new file mode 100644 index 0000000000..ce611c9889 Binary files /dev/null and b/src/main/resources/awakenedResources/images/powers/EclipseEmbracePower84.png differ diff --git a/src/main/resources/awakenedResources/images/powers/EnsorcelatePower32.png b/src/main/resources/awakenedResources/images/powers/EnsorcelatePower32.png new file mode 100644 index 0000000000..0611ee7fc5 Binary files /dev/null and b/src/main/resources/awakenedResources/images/powers/EnsorcelatePower32.png differ diff --git a/src/main/resources/awakenedResources/images/powers/EnsorcelatePower84.png b/src/main/resources/awakenedResources/images/powers/EnsorcelatePower84.png new file mode 100644 index 0000000000..4da012d68e Binary files /dev/null and b/src/main/resources/awakenedResources/images/powers/EnsorcelatePower84.png differ diff --git a/src/main/resources/awakenedResources/images/powers/GrimoirePower32.png b/src/main/resources/awakenedResources/images/powers/GrimoirePower32.png new file mode 100644 index 0000000000..00424214e6 Binary files /dev/null and b/src/main/resources/awakenedResources/images/powers/GrimoirePower32.png differ diff --git a/src/main/resources/awakenedResources/images/powers/GrimoirePower84.png b/src/main/resources/awakenedResources/images/powers/GrimoirePower84.png new file mode 100644 index 0000000000..3b476ceadb Binary files /dev/null and b/src/main/resources/awakenedResources/images/powers/GrimoirePower84.png differ diff --git a/src/main/resources/awakenedResources/images/powers/IntensifyDebuffPower32.png b/src/main/resources/awakenedResources/images/powers/IntensifyDebuffPower32.png new file mode 100644 index 0000000000..7ce03f9a74 Binary files /dev/null and b/src/main/resources/awakenedResources/images/powers/IntensifyDebuffPower32.png differ diff --git a/src/main/resources/awakenedResources/images/powers/IntensifyDebuffPower84.png b/src/main/resources/awakenedResources/images/powers/IntensifyDebuffPower84.png new file mode 100644 index 0000000000..d0b825bb7a Binary files /dev/null and b/src/main/resources/awakenedResources/images/powers/IntensifyDebuffPower84.png differ diff --git a/src/main/resources/awakenedResources/images/powers/IntensifyPower32.png b/src/main/resources/awakenedResources/images/powers/IntensifyPower32.png new file mode 100644 index 0000000000..32a6418342 Binary files /dev/null and b/src/main/resources/awakenedResources/images/powers/IntensifyPower32.png differ diff --git a/src/main/resources/awakenedResources/images/powers/IntensifyPower84.png b/src/main/resources/awakenedResources/images/powers/IntensifyPower84.png new file mode 100644 index 0000000000..0e9a3b9bf4 Binary files /dev/null and b/src/main/resources/awakenedResources/images/powers/IntensifyPower84.png differ diff --git a/src/main/resources/awakenedResources/images/powers/ManaburnPower32.png b/src/main/resources/awakenedResources/images/powers/ManaburnPower32.png new file mode 100644 index 0000000000..da6654d2d6 Binary files /dev/null and b/src/main/resources/awakenedResources/images/powers/ManaburnPower32.png differ diff --git a/src/main/resources/awakenedResources/images/powers/ManaburnPower84.png b/src/main/resources/awakenedResources/images/powers/ManaburnPower84.png new file mode 100644 index 0000000000..309b1adc68 Binary files /dev/null and b/src/main/resources/awakenedResources/images/powers/ManaburnPower84.png differ diff --git a/src/main/resources/awakenedResources/images/powers/MoonlitVisionPower32.png b/src/main/resources/awakenedResources/images/powers/MoonlitVisionPower32.png new file mode 100644 index 0000000000..8f5a45eac7 Binary files /dev/null and b/src/main/resources/awakenedResources/images/powers/MoonlitVisionPower32.png differ diff --git a/src/main/resources/awakenedResources/images/powers/MoonlitVisionPower84.png b/src/main/resources/awakenedResources/images/powers/MoonlitVisionPower84.png new file mode 100644 index 0000000000..88c5bf8ab4 Binary files /dev/null and b/src/main/resources/awakenedResources/images/powers/MoonlitVisionPower84.png differ diff --git a/src/main/resources/awakenedResources/images/powers/PrimacyPower32.png b/src/main/resources/awakenedResources/images/powers/PrimacyPower32.png new file mode 100644 index 0000000000..e7899bcd49 Binary files /dev/null and b/src/main/resources/awakenedResources/images/powers/PrimacyPower32.png differ diff --git a/src/main/resources/awakenedResources/images/powers/PrimacyPower84.png b/src/main/resources/awakenedResources/images/powers/PrimacyPower84.png new file mode 100644 index 0000000000..aabf62c99a Binary files /dev/null and b/src/main/resources/awakenedResources/images/powers/PrimacyPower84.png differ diff --git a/src/main/resources/awakenedResources/images/powers/RisingChantPower32.png b/src/main/resources/awakenedResources/images/powers/RisingChantPower32.png new file mode 100644 index 0000000000..4450074d5d Binary files /dev/null and b/src/main/resources/awakenedResources/images/powers/RisingChantPower32.png differ diff --git a/src/main/resources/awakenedResources/images/powers/RisingChantPower84.png b/src/main/resources/awakenedResources/images/powers/RisingChantPower84.png new file mode 100644 index 0000000000..09022afc14 Binary files /dev/null and b/src/main/resources/awakenedResources/images/powers/RisingChantPower84.png differ diff --git a/src/main/resources/awakenedResources/images/powers/SacramentPower32.png b/src/main/resources/awakenedResources/images/powers/SacramentPower32.png new file mode 100644 index 0000000000..71359b2868 Binary files /dev/null and b/src/main/resources/awakenedResources/images/powers/SacramentPower32.png differ diff --git a/src/main/resources/awakenedResources/images/powers/SacramentPower84.png b/src/main/resources/awakenedResources/images/powers/SacramentPower84.png new file mode 100644 index 0000000000..42faac7b1a Binary files /dev/null and b/src/main/resources/awakenedResources/images/powers/SacramentPower84.png differ diff --git a/src/main/resources/awakenedResources/images/powers/SchemePower32.png b/src/main/resources/awakenedResources/images/powers/SchemePower32.png new file mode 100644 index 0000000000..f6489995ff Binary files /dev/null and b/src/main/resources/awakenedResources/images/powers/SchemePower32.png differ diff --git a/src/main/resources/awakenedResources/images/powers/SchemePower84.png b/src/main/resources/awakenedResources/images/powers/SchemePower84.png new file mode 100644 index 0000000000..de8b5dcb77 Binary files /dev/null and b/src/main/resources/awakenedResources/images/powers/SchemePower84.png differ diff --git a/src/main/resources/awakenedResources/images/powers/SongOfSorrowPower32.png b/src/main/resources/awakenedResources/images/powers/SongOfSorrowPower32.png new file mode 100644 index 0000000000..5b73afa032 Binary files /dev/null and b/src/main/resources/awakenedResources/images/powers/SongOfSorrowPower32.png differ diff --git a/src/main/resources/awakenedResources/images/powers/SongOfSorrowPower84.png b/src/main/resources/awakenedResources/images/powers/SongOfSorrowPower84.png new file mode 100644 index 0000000000..68b2289ccf Binary files /dev/null and b/src/main/resources/awakenedResources/images/powers/SongOfSorrowPower84.png differ diff --git a/src/main/resources/awakenedResources/images/powers/SpellbinderPower32.png b/src/main/resources/awakenedResources/images/powers/SpellbinderPower32.png new file mode 100644 index 0000000000..52abfda8ce Binary files /dev/null and b/src/main/resources/awakenedResources/images/powers/SpellbinderPower32.png differ diff --git a/src/main/resources/awakenedResources/images/powers/SpellbinderPower84.png b/src/main/resources/awakenedResources/images/powers/SpellbinderPower84.png new file mode 100644 index 0000000000..3348016e3d Binary files /dev/null and b/src/main/resources/awakenedResources/images/powers/SpellbinderPower84.png differ diff --git a/src/main/resources/awakenedResources/images/powers/SpellshieldPower32.png b/src/main/resources/awakenedResources/images/powers/SpellshieldPower32.png new file mode 100644 index 0000000000..913bf6b22c Binary files /dev/null and b/src/main/resources/awakenedResources/images/powers/SpellshieldPower32.png differ diff --git a/src/main/resources/awakenedResources/images/powers/SpellshieldPower84.png b/src/main/resources/awakenedResources/images/powers/SpellshieldPower84.png new file mode 100644 index 0000000000..a0f36e0acd Binary files /dev/null and b/src/main/resources/awakenedResources/images/powers/SpellshieldPower84.png differ diff --git a/src/main/resources/awakenedResources/images/powers/StrengthReturnPower32.png b/src/main/resources/awakenedResources/images/powers/StrengthReturnPower32.png new file mode 100644 index 0000000000..c4dddd5362 Binary files /dev/null and b/src/main/resources/awakenedResources/images/powers/StrengthReturnPower32.png differ diff --git a/src/main/resources/awakenedResources/images/powers/StrengthReturnPower84.png b/src/main/resources/awakenedResources/images/powers/StrengthReturnPower84.png new file mode 100644 index 0000000000..f168d061b7 Binary files /dev/null and b/src/main/resources/awakenedResources/images/powers/StrengthReturnPower84.png differ diff --git a/src/main/resources/awakenedResources/images/powers/ThaumaturgyPower32.png b/src/main/resources/awakenedResources/images/powers/ThaumaturgyPower32.png new file mode 100644 index 0000000000..3668bc139b Binary files /dev/null and b/src/main/resources/awakenedResources/images/powers/ThaumaturgyPower32.png differ diff --git a/src/main/resources/awakenedResources/images/powers/ThaumaturgyPower84.png b/src/main/resources/awakenedResources/images/powers/ThaumaturgyPower84.png new file mode 100644 index 0000000000..73abc4f53e Binary files /dev/null and b/src/main/resources/awakenedResources/images/powers/ThaumaturgyPower84.png differ diff --git a/src/main/resources/awakenedResources/images/powers/VoidRefundPower32.png b/src/main/resources/awakenedResources/images/powers/VoidRefundPower32.png new file mode 100644 index 0000000000..c59870756c Binary files /dev/null and b/src/main/resources/awakenedResources/images/powers/VoidRefundPower32.png differ diff --git a/src/main/resources/awakenedResources/images/powers/VoidRefundPower84.png b/src/main/resources/awakenedResources/images/powers/VoidRefundPower84.png new file mode 100644 index 0000000000..153727aefa Binary files /dev/null and b/src/main/resources/awakenedResources/images/powers/VoidRefundPower84.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 0000000000..07bd8f8f70 Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/AbyssBlade.png differ diff --git a/src/main/resources/awakenedResources/images/relics/AwakenedUrn.png b/src/main/resources/awakenedResources/images/relics/AwakenedUrn.png new file mode 100644 index 0000000000..016a14a20d Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/AwakenedUrn.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 0000000000..12f38f9604 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 0000000000..6bf4eb5652 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 0000000000..0e5e478b11 Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/CawingCask.png differ diff --git a/src/main/resources/awakenedResources/images/relics/CawingCask_Large.png b/src/main/resources/awakenedResources/images/relics/CawingCask_Large.png new file mode 100644 index 0000000000..7efea6c04d Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/CawingCask_Large.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 0000000000..ba4493881b 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 0000000000..5616cb664a 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 0000000000..d2fc8119c8 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 0000000000..939532a1ba 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 0000000000..fd13bfeeef Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/HexxBomb.png differ diff --git a/src/main/resources/awakenedResources/images/relics/HexxBomb_Large.png b/src/main/resources/awakenedResources/images/relics/HexxBomb_Large.png new file mode 100644 index 0000000000..b76c80878b Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/HexxBomb_Large.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 0000000000..6388fa1234 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 0000000000..5d6e2dbe98 Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/MoonTalisman.png differ diff --git a/src/main/resources/awakenedResources/images/relics/MoonTalisman_Large.png b/src/main/resources/awakenedResources/images/relics/MoonTalisman_Large.png new file mode 100644 index 0000000000..34d32e8138 Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/MoonTalisman_Large.png differ diff --git a/src/main/resources/awakenedResources/images/relics/NerfedMummifiedHand.png b/src/main/resources/awakenedResources/images/relics/NerfedMummifiedHand.png new file mode 100644 index 0000000000..09898bf19c Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/NerfedMummifiedHand.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 0000000000..48495551c6 Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/RippedDoll.png differ diff --git a/src/main/resources/awakenedResources/images/relics/RippedDoll_Large.png b/src/main/resources/awakenedResources/images/relics/RippedDoll_Large.png new file mode 100644 index 0000000000..406c25b171 Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/RippedDoll_Large.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 0000000000..c402fe9e44 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 0000000000..e63bc08318 Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/ShreddedDoll.png differ diff --git a/src/main/resources/awakenedResources/images/relics/ShreddedDoll_Large.png b/src/main/resources/awakenedResources/images/relics/ShreddedDoll_Large.png new file mode 100644 index 0000000000..15d0990db5 Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/ShreddedDoll_Large.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 0000000000..65b59cd803 Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/StrengthBooster.png differ diff --git a/src/main/resources/awakenedResources/images/relics/StrengthBooster_Large.png b/src/main/resources/awakenedResources/images/relics/StrengthBooster_Large.png new file mode 100644 index 0000000000..efd2330306 Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/StrengthBooster_Large.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 0000000000..564fa34929 Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/TomeOfPortalmancy.png differ diff --git a/src/main/resources/awakenedResources/images/relics/TomeOfPortalmancy_Large.png b/src/main/resources/awakenedResources/images/relics/TomeOfPortalmancy_Large.png new file mode 100644 index 0000000000..e2cdb54704 Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/TomeOfPortalmancy_Large.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 0000000000..6d78ed1605 Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/VioletPlumage.png differ diff --git a/src/main/resources/awakenedResources/images/relics/VioletPlumage_Large.png b/src/main/resources/awakenedResources/images/relics/VioletPlumage_Large.png new file mode 100644 index 0000000000..cdf14016df Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/VioletPlumage_Large.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 0000000000..c7321b2a6c Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/WhiteRibbon.png differ diff --git a/src/main/resources/awakenedResources/images/relics/WhiteRibbon_Large.png b/src/main/resources/awakenedResources/images/relics/WhiteRibbon_Large.png new file mode 100644 index 0000000000..3a9fe7185d Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/WhiteRibbon_Large.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 0000000000..ff2f159ef8 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 0000000000..30ff89ddc6 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/AwakenedUrn.png b/src/main/resources/awakenedResources/images/relics/outline/AwakenedUrn.png new file mode 100644 index 0000000000..e17e7b99d3 Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/outline/AwakenedUrn.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 0000000000..5c8544f5ea 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 0000000000..5ba80e34e9 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/CawingCask_Large.png b/src/main/resources/awakenedResources/images/relics/outline/CawingCask_Large.png new file mode 100644 index 0000000000..e1b0514c0e Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/outline/CawingCask_Large.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 0000000000..23891298fb 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 0000000000..43dc3952b9 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 0000000000..a171765105 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 0000000000..fc63879f63 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 0000000000..4536fa33b0 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 0000000000..a84d444198 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 0000000000..a9bd0e2ebf 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/NerfedMummifiedHand.png b/src/main/resources/awakenedResources/images/relics/outline/NerfedMummifiedHand.png new file mode 100644 index 0000000000..36fcd2902b Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/outline/NerfedMummifiedHand.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 0000000000..260cfbb913 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 0000000000..775f445bb1 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 0000000000..7e59b6c40f 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 0000000000..c8be98e90b 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/StrengthBooster_Large.png b/src/main/resources/awakenedResources/images/relics/outline/StrengthBooster_Large.png new file mode 100644 index 0000000000..0946b88a35 Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/outline/StrengthBooster_Large.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 0000000000..ee05fdd85a 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 0000000000..79116240ae 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/VioletPlumage_Large.png b/src/main/resources/awakenedResources/images/relics/outline/VioletPlumage_Large.png new file mode 100644 index 0000000000..94866eb1f4 Binary files /dev/null and b/src/main/resources/awakenedResources/images/relics/outline/VioletPlumage_Large.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 0000000000..28c0029461 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 0000000000..aa8016465d 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 0000000000..5c8544f5ea 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 0000000000..92d8bc70dd 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 0000000000..b1e922e481 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 0000000000..36fc324418 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 0000000000..7f40fb3e41 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 0000000000..cb62228c49 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 0000000000..c3da96872c 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 0000000000..2b915b89d0 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 0000000000..8263f32708 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 0000000000..550983ae5a 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 0000000000..e18622ef6f 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 0000000000..c3565f8e4d 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 0000000000..8e1d83b3eb 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 0000000000..12f38f9604 Binary files /dev/null and b/src/main/resources/awakenedResources/images/ui/missing.png differ diff --git a/src/main/resources/awakenedResources/images/ui/panelBg.png b/src/main/resources/awakenedResources/images/ui/panelBg.png new file mode 100644 index 0000000000..f14bffa285 Binary files /dev/null and b/src/main/resources/awakenedResources/images/ui/panelBg.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 0000000000..71145dde66 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 0000000000..e2b21354cd 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 0000000000..cc14ad09f5 Binary files /dev/null and b/src/main/resources/awakenedResources/images/ui/pip_unfilled.png differ diff --git a/src/main/resources/awakenedResources/images/ui/pip_unfilled_2.png b/src/main/resources/awakenedResources/images/ui/pip_unfilled_2.png new file mode 100644 index 0000000000..6ff1d58b7f Binary files /dev/null and b/src/main/resources/awakenedResources/images/ui/pip_unfilled_2.png differ diff --git a/src/main/resources/awakenedResources/images/ui/pip_unfilled_3.png b/src/main/resources/awakenedResources/images/ui/pip_unfilled_3.png new file mode 100644 index 0000000000..09780690c3 Binary files /dev/null and b/src/main/resources/awakenedResources/images/ui/pip_unfilled_3.png differ diff --git a/src/main/resources/awakenedResources/localization/deu/CardStrings.json b/src/main/resources/awakenedResources/localization/deu/CardStrings.json new file mode 100644 index 0000000000..2820e8923c --- /dev/null +++ b/src/main/resources/awakenedResources/localization/deu/CardStrings.json @@ -0,0 +1,410 @@ +{ + "awakened:Thunderbolt": { + "NAME": "Blitzstrahl", + "DESCRIPTION": "Behalten. NL Füge !D! Schaden zu. NL Erschöpft." + }, + "awakened:BurningStudy": { + "NAME": "Brennende Lehre", + "DESCRIPTION": "Behalten. NL Erhalte !M! Stärke. NL Wende !awakened:m2! Schwach auf ALLE Gegner an. NL Erschöpft." + }, + "awakened:Cryostasis": { + "NAME": "Kryostase", + "DESCRIPTION": "Behalten. NL Erhalte !B! Block. NL Erschöpft." + }, + "awakened:Darkleech": { + "NAME": "Verderben", + "DESCRIPTION": "Behalten. NL Wende !M! Verwundbar an. Wende !awakened:m2! awakened:Manabrand an. NL Erschöpft." + }, + "awakened:DeathCoil": { + "NAME": "Todesschlinge", + "DESCRIPTION": "Wende !M! awakened:Manabrand an. Verliere im nächsten Zug [E]." + }, + "awakened:ESPSpell": { + "NAME": "Sechster Sinn", + "DESCRIPTION": "Behalten. NL Ziehe !M! Karte. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Behalten. NL Ziehe !M! Karten. NL Erschöpft." + }, + "awakened:Strike": { + "NAME": "Schlag", + "DESCRIPTION": "Füge !D! Schaden zu." + }, + "awakened:Defend": { + "NAME": "Verteidigen", + "DESCRIPTION": "Erhalte !B! Block." + }, + "awakened:Brainshock": { + "NAME": "Hirnschock", + "DESCRIPTION": "Füge !D! Schaden zu. NL Lege eine Leere in den Abwurfstapel." + }, + "awakened:Intensify": { + "NAME": "Intensivieren", + "DESCRIPTION": "awakened:Aufrufen. NL In diesem Zug kosten *Zauber 0 und du kannst nicht erneut awakened:aufrufen.", + "UPGRADE_DESCRIPTION": "Behalten. awakened:Aufrufen. NL In diesem Zug kosten *Zauber 0 und du kannst nicht erneut awakened:aufrufen." + }, + "awakened:DarkEcho": { + "NAME": "Dunkles Echo", + "DESCRIPTION": "Füge am Ende des Zuges ALLEN Gegnern !M! Schaden zu. Der Schaden wird durch Stärke erhöht." + }, + "awakened:AwakenedForm": { + "NAME": "Erweckte Form", + "DESCRIPTION": "Erhalte !M! awakened:Neugier. NL Erhalte !awakened:m2! Ritual.", + "UPGRADE_DESCRIPTION": "*Erwache umgehend. NL Erhalte !M! awakened:Neugier. NL Erhalte !awakened:m2! Ritual." + }, + "awakened:Spellbinder": { + "NAME": "Bezaubern", + "DESCRIPTION": "awakened:Rufe zu Beginn jedes Zuges einen *Zauberspruch *auf." + }, + "awakened:Ceremony": { + "NAME": "Zeremonie", + "DESCRIPTION": "Behalten. NL Erhalte !M! Stärke." + }, + "awakened:TalonRake": { + "NAME": "Krallenkratzer", + "DESCRIPTION": "Füge 2 Mal !D! Schaden zu. NL awakened:Aufrufen." + }, + "awakened:Hymn": { + "NAME": "Hymne", + "DESCRIPTION": "Erhalte !B! Block. NL Erhalte eine *Zeremonie. NL Verliere im nächsten Zug [E]." + }, + "awakened:Psalm": { + "NAME": "Psalm", + "DESCRIPTION": "Füge ALLEN Gegnern !D! Schaden zu und wende !M! Schwach auf sie an." + }, + "awakened:DemonGlyph": { + "NAME": "Dämonenglyphen", + "DESCRIPTION": "Erhalte !M! Stärke und Geschicklichkeit. NL Wenn du *erwachst, erhalte weitere !awakened:m2! von Beiden." + }, + "awakened:TakeFlight": { + "NAME": "Abheben", + "DESCRIPTION": "Erhalte !B! Block. NL awakened:Chor: Erhalte 1 expansioncontent:Verschwimmen." + }, + "awakened:FeatherVeil": { + "NAME": "Federkleid", + "DESCRIPTION": "Erhalte !B! Block. NL Verliere !M! Stärke." + }, + "awakened:Peck": { + "NAME": "Picken", + "DESCRIPTION": "Erhalte !B! Block. NL Füge !D! Schaden zu. NL Ziehe !M! Karte.", + "UPGRADE_DESCRIPTION": "Erhalte !B! Block. NL Füge !D! Schaden zu. NL Ziehe !M! Karten." + }, + "awakened:Extension": { + "NAME": "Extensiv", + "DESCRIPTION": "Füge !D! Schaden zu. NL Nimm diese Karte vom Abwurfstapel auf die Hand, immer wenn du eine Macht spielst." + }, + "awakened:Pluck": { + "NAME": "Rupfen", + "DESCRIPTION": "Füge ALLEN Gegnern !D! Schaden zu. NL Erhalte *Federstiche." + }, + "awakened:FlareShot": { + "NAME": "Federflackern", + "DESCRIPTION": "Füge !D! Schaden zu. NL awakened:Chor: Ziehe im nächsten Zug !M! zusätzliche Karte." + }, + "awakened:ClarionCall": { + "NAME": "Kriegsfanfare", + "DESCRIPTION": "Füge !D! Schaden zu. NL Erhalte das nächste Mal wenn du awakened:ausgelaugt wirst [E]." + }, + "awakened:Recitation": { + "NAME": "Rezitieren", + "DESCRIPTION": "Füge !D! Schaden zu. NL awakened:Chor: Füge nochmal !D! Schaden zu." + }, + "awakened:ChosenVerse": { + "NAME": "Auserwählter Vers", + "DESCRIPTION": "Die nächsten !M! Male, an denen du in diesem Zug einen nicht-Angriff spielst, ziehe eine Karte und erhalte !B! Block." + }, + "awakened:SoulStrike": { + "NAME": "Seelenschlag", + "DESCRIPTION": "Füge !M! Mal !D! Schaden zu. NL Kostet für jede in diesem Zug gespielte Macht [E] weniger." + }, + "awakened:Altar": { + "NAME": "Altar", + "DESCRIPTION": "Erhalte !B! Block. NL Erschöpfe eine Karte. NL awakened:Aufrufen." + }, + "awakened:Envision": { + "NAME": "Manifestieren", + "DESCRIPTION": "Erhalte !B! Block. NL awakened:Rufe einen *Zauberspruch *auf und lege ihn auf den Nachziehstapel." + }, + "awakened:Thaumaturgy": { + "NAME": "Quacksalbereien", + "DESCRIPTION": "Erhalte !awakened:m2! Geschicklichkeit. NL Erhalte zu Beginn deiner nächsten !M! Züge eine *Zeremonie." + }, + "awakened:WaveOfMiasma": { + "NAME": "Miasma-Schleier", + "DESCRIPTION": "Erhalte !B! Block. NL Wende !awakened:m2! awakened:Manabrand auf ALLE Gegner an. NL Erschöpft." + }, + "awakened:SludgeBomb": { + "NAME": "Dimensionsbombe", + "DESCRIPTION": "Erfordert eine *Leere im Erschöpfungsstapel. Entferne sie und füge ALLEN Gegnern !D! Schaden zu.", + "EXTENDED_DESCRIPTION": [ + "Ich habe keine erschöpfte Leere." + ] + }, + "awakened:KnifesEdge": { + "NAME": "Messers Schneide", + "DESCRIPTION": "Erhalte !awakened:m2! Stärke. NL Lege !M! *Leeren in den Abwurfstapel." + }, + "awakened:FourthDimension": { + "NAME": "Vierte Dimension", + "DESCRIPTION": "Erschöpfe eine Handkarte. NL bronze:Setze !M! Kopien der Karte *ein. NL Erschöpft.", + "EXTENDED_DESCRIPTION": [ + "Erschöpfe eine Karte in die Vierte Dimension." + ] + }, + "awakened:RavenStrike": { + "NAME": "Rabenschlag", + "DESCRIPTION": "Füge !D! Schaden zu. NL awakened:Chor: Spiele die oberste Karte des Nachziehstapels." + }, + "awakened:Unleash": { + "NAME": "Freisetzen", + "DESCRIPTION": "Füge !D! Schaden zu. NL Der Schaden wird für jede andere Handkarte um !M! erhöht." + }, + "awakened:DesperatePrayer": { + "NAME": "Stoßgebet", + "DESCRIPTION": "Erhalte !M! *Zeremonie Karten. NL Erschöpft." + }, + "awakened:BirdsEye": { + "NAME": "Foglauge", + "DESCRIPTION": "awakened:Rufe einen *Zauberspruch deiner Wahl *auf.", + "UPGRADE_DESCRIPTION": "Fülle das Zauberbuch neu auf und awakened:Rufe danach einen *Zauberspruch deiner Wahl *auf." + }, + "awakened:Initiation": { + "NAME": "Initiierung", + "DESCRIPTION": "Erhalte !B! Block. NL Erhalte eine *Zeremonie." + }, + "awakened:Ensorcelate": { + "NAME": "Zauberformel", + "DESCRIPTION": "Erhalte !B! Block. NL Die nächste gespielte Macht kostet 0." + }, + "awakened:Skyward": { + "NAME": "Himmelswache", + "DESCRIPTION": "Erhalte !B! Block. NL Ziehe !M! Karte. NL Kostet für jede in diesem Kampf gespielte Macht [E] weniger." + }, + "awakened:RisingChant": { + "NAME": "Aufstiegschor", + "DESCRIPTION": "Flüchtig. NL Der erste awakened:Chor Effekt jedes Zuges wird doppelt aktiviert.", + "UPGRADE_DESCRIPTION": "Der erste awakened:Chor Effekt jedes Zuges wird doppelt aktiviert." + }, + "awakened:FeatherWhirl": { + "NAME": "Federwirbel", + "DESCRIPTION": "Erhalte NL X *Federstiche.", + "UPGRADE_DESCRIPTION": "Erhalte NL X+1 *Federstiche." + }, + "awakened:Murder": { + "NAME": "Mord", + "DESCRIPTION": "Füge !M! Mal einem zufälligen Gegner !D! Schaden zu.", + "UPGRADE_DESCRIPTION": "Behalten. NL Füge !M! Mal einem zufälligen Gegner !D! Schaden zu." + }, + "awakened:Nihil": { + "NAME": "Nihil", + "DESCRIPTION": "Wende !M! awakened:Manabrand an. NL awakened:Chor: ALLE Gegner verlieren TP in Höhe ihres awakened:Manabrandes." + }, + "awakened:MoonlitVision": { + "NAME": "Mondfinsternis", + "DESCRIPTION": "Erhalte [E] , wenn du das erste Mal im Zug einen *Zauber spielst." + }, + "awakened:Rebirth": { + "NAME": "Wiedergeburt", + "DESCRIPTION": "Wenn du das nächste Mal sterben würdest, oder am Ende des Kampfes, entferne alle Debuffs, *erwache, und heile !M! TP." + }, + "awakened:Archmagus": { + "NAME": "Erzmagier", + "DESCRIPTION": "Der erste in deinem Zug gespielte *Zauber wird zweimal gespielt." + }, + "awakened:Planeswalk": { + "NAME": "Grenzgänger", + "DESCRIPTION": "Erhalte [E] [E]. NL bronze:Setze eine Leere *ein.", + "UPGRADE_DESCRIPTION": "Erhalte [E] [E] [E]. NL bronze:Setze eine Leere *ein." + }, + "awakened:Spew": { + "NAME": "Ausspeien", + "DESCRIPTION": "Füge !D! Schaden zu. NL Für diese Karte ausgegebene [E] wird wie awakened:Auslaugen behandelt." + }, + "awakened:DarknessFalls": { + "NAME": "Ringfinsternis", + "DESCRIPTION": "Erhalte immer, wenn awakened:ausgelaugt wirst, NL !M! Block und !awakened:m2! Stärke.", + "UPGRADE_DESCRIPTION": "Angeboren. NL Erhalte immer, wenn awakened:ausgelaugt wirst, NL !M! Block und !awakened:m2! Stärke." + }, + "awakened:Eventide": { + "NAME": "Dämmerung", + "DESCRIPTION": "Füge 2 Mal einem zufälligen Gegner !D! Schaden zu. NL Lege eine Leere auf den Nachziehstapel." + }, + "awakened:EclipseEmbrace": { + "NAME": "Sonnenfinsternis", + "DESCRIPTION": "Immer wenn du eine Leere *erschöpfst, ziehe im nächsten Zug eine Karte und NL erhalte [E]." + }, + "awakened:Clutch": { + "NAME": "Umklammern", + "DESCRIPTION": "Füge !D! Schaden zu. NL Ziehe eine Karte, die 0 kostet." + }, + "awakened:Gloomguard": { + "NAME": "Düsterer Schutz", + "DESCRIPTION": "Erhalte !B! Block. NL Kostet 0, wenn sich eine Leere auf der Hand befindet." + }, + "awakened:Carrionmaker": { + "NAME": "Aasproduktion", + "DESCRIPTION": "Füge einem zufälligen Gegner !D! Schaden zu. NL Wiederhole das für jeden in diesem Zug gespielten Zauber.", + "EXTENDED_DESCRIPTION": [ + " NL (", + " Zauber gespielt.)", + " Zauber gespielt.)" + ] + }, + "awakened:MirePit": { + "NAME": "Schlammgrube", + "DESCRIPTION": "ALLE Gegner verlieren für diesen Zug !M! Stärke. Verliere im nächsten Zug [E]. NL Erschöpft." + }, + "awakened:SingularityShield": { + "NAME": "Singularitätsschild", + "DESCRIPTION": "Erhalte !B! Block. NL Erhalte im nächsten Zug !B! Block und verliere [E]." + }, + "awakened:Dejection": { + "NAME": "Schwermut", + "DESCRIPTION": "Füge !D! Schaden zu. NL Erschöpfe eine Karte. Wurde ein *Zauber erschöpft, dann erhalte eine *Zeremonie." + }, + "awakened:BloodRite": { + "NAME": "Blutiges Ritual", + "DESCRIPTION": "Füge !D! Schaden zu. NL Erhalte eine *Zeremonie." + }, + "awakened:SongOfSorrow": { + "NAME": "Leidenslieder", + "DESCRIPTION": "Immer wenn du eine Leere erhältst, verlieren ALLE Gegner !M! TP." + }, + "awakened:MysticOrder": { + "NAME": "Mystische Sitten", + "DESCRIPTION": "Ziehe !M! Karten. NL awakened:Aufrufen." + }, + "awakened:ProfaneStrike": { + "NAME": "Dunkler Schlag", + "DESCRIPTION": "Füge !D! Schaden zu. NL Lege eine Handkarte auf den Nachziehstapel." + }, + "awakened:Victuals": { + "NAME": "Verpflegung", + "DESCRIPTION": "awakened:Chor: NL Erhalte [E] [E]. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "awakened:Chor: NL Erhalte [E] [E] [E]. NL Erschöpft." + }, + "awakened:Gather": { + "NAME": "Ansammeln", + "DESCRIPTION": "Erhalte !B! Block. NL awakened:Chor: Schnappe eine Karte aus dem Abwurfstapel." + }, + "awakened:TheTower": { + "NAME": "Der Turm", + "DESCRIPTION": "Füge ALLEN Gegnern !D! Schaden zu. NL Der Schaden wird durch jede in diesem Kampf generierte Karte um !M! erhöht." + }, + "awakened:ArcaneNesting": { + "NAME": "Arkane Ausbrütung", + "DESCRIPTION": "Unspielbar. NL Erhalte !B! Block, wenn du mit dieser Karte auf der Hand eine Macht spielst.", + "EXTENDED_DESCRIPTION": [ + "Ich muss Mächte ausspielen um Block zu erhalten." + ] + }, + "awakened:MiddenHeap": { + "NAME": "Misthaufen", + "DESCRIPTION": "Erhalte !B! Block. NL Schnappe !M! Status oder Fluch vom Nachzieh- oder Abwurfstapel.", + "UPGRADE_DESCRIPTION": "Erhalte !B! Block. NL Schnappe !M! Status- oder *Fluchkarten vom Nachzieh- oder Abwurfstapel.", + "EXTENDED_DESCRIPTION": [ + "Nimm eine Karte auf die Hand.", + "Nimm Karten auf die Hand." + ] + }, + "awakened:Caw": { + "NAME": "Krächz!", + "DESCRIPTION": "Füge !D! Schaden zu. NL awakened:Chor: Alle *Krächz Karten fügen diesen Kampf !M! Schaden mehr zu." + }, + "awakened:Scour": { + "NAME": "Scheuern", + "DESCRIPTION": "Füge !D! Schaden zu. NL Wende !M! awakened:Manabrand an." + }, + "awakened:Manastorm": { + "NAME": "Manasturm", + "DESCRIPTION": "Füge ALLEN Gegnern !D! Schaden zu. NL awakened:Rufe zweimal *auf." + }, + "awakened:StormRuler": { + "NAME": "Donnergott", + "DESCRIPTION": "awakened:Aufrufen. NL *Blitzstrahlen fügen !M! mehr Schaden zu." + }, + "awakened:AphoticFount": { + "NAME": "Gefrorene Quellen", + "DESCRIPTION": "awakened:Aufrufen. NL Erhalte immer, wenn du *Kryostase spielst, !M! expansioncontent:Panzerrüstung." + }, + "awakened:Bloodthirst": { + "NAME": "Blutdurst", + "DESCRIPTION": "Füge !D! Schaden zu. NL Falls tödlich, erhalte einen awakened:Machttrank und erschöpfe diese Karte." + }, + "awakened:Procession": { + "NAME": "Prozession", + "DESCRIPTION": "Spiele eine Karte aus dem Nachziehstapel und mische *Leeren in Höhe ihrer Kosten hinein. NL Erschöpft." + }, + "awakened:SplitWide": { + "NAME": "Aufschlitzen", + "DESCRIPTION": "Füge !D! Schaden zu. NL Erhalte immer, wenn du diesen Gegner triffst, !M! *temporäre Stärke. NL Erschöpft." + }, + "awakened:Spellshield": { + "NAME": "Zauberschild", + "DESCRIPTION": "Erhalte am Ende des Zuges !M! Block für jede Karte, die du *behältst." + }, + "awakened:Siphon": { + "NAME": "Siphon", + "DESCRIPTION": "Füge !D! Schaden zu. NL awakened:Chor: gremlin:Stiehl !M! *temporäre Stärke." + }, + "awakened:PlumeJab": { + "NAME": "Federstiche", + "DESCRIPTION": "Behalten. NL Füge 2 Mal einem zufälligen Gegner !D! Schaden zu. NL Erschöpft." + }, + "awakened:Primacy": { + "NAME": "Vorrang", + "DESCRIPTION": "Ziehe das erste Mal, wenn du im Zug Stärke erhältst, eine Karte.", + "UPGRADE_DESCRIPTION": "Ziehe die ersten !M! Male, an denen du im Zug Stärke erhältst, eine Karte." + }, + "awakened:Daggerstorm": { + "NAME": "Dolchsturm", + "DESCRIPTION": "Immer wenn du eine Karte generierst, füge einem zufälligen Gegner !M! Schaden zu." + }, + "awakened:PackRat": { + "NAME": "Rudelratte", + "DESCRIPTION": "Füge 2 Mal !D! Schaden zu und erhalte 2 Mal !B! Block. NL Erhalte einen zufälligen Trank. NL Erschöpft." + }, + "awakened:Mantis": { + "NAME": "Mantis", + "DESCRIPTION": "Erhalte !M! Stärke. NL Erhalte *Federstiche." + }, + "awakened:ManaShield": { + "NAME": "Manaschild", + "DESCRIPTION": "Erhalte !B! Block. NL awakened:Aufrufen. NL Ein zufälliger *Zauber auf der Hand kostet 1 weniger." + }, + "awakened:Crusher": { + "NAME": "Brecher", + "DESCRIPTION": "Behalten. NL Füge !D! Schaden zu. NL Wenn eine Karte generiert wird, kostet Brecher um 1 weniger, bis du ihn ausspielst." + }, + "awakened:Minniegun": { + "NAME": "Minniegun", + "DESCRIPTION": "Füge !M! Mal !D! Schaden zu. NL bronze:Setze eine Leere *ein." + }, + "awakened:SignInBlood": { + "NAME": "Blutschwur", + "DESCRIPTION": "Erleide !awakened:m2! Schaden. NL Ziehe !M! Karten. NL Erhalte !awakened:m2! Stärke. NL Erschöpft." + }, + "awakened:SpreadingSpores": { + "NAME": "Sporen ausbreiten", + "DESCRIPTION": "Flüchtig. NL Erhalte !M! Stacheln. NL bronze:Setze eine Kopie *ein." + }, + "awakened:Scheme": { + "NAME": "Böser Plan", + "DESCRIPTION": "In diesem Zug spielst du die nächste Karte mit Kosten von höchstens 1 doppelt.", + "UPGRADE_DESCRIPTION": "In diesem Zug spielst du den nächsten !M! Karten mit Kosten von höchstens 1 doppelt." + }, + "awakened:TheEncyclopedia": { + "NAME": "Enzyklopädie", + "DESCRIPTION": "Nimm 2 von !M! zufälligen Karten auf die Hand. Sie kosten 2 weniger. NL Erschöpft.", + "EXTENDED_DESCRIPTION": [ + "Nimm 2 Karten auf die Hand." + ] + }, + "awakened:RealityRift": { + "NAME": "Dimensionsspalte", + "DESCRIPTION": "Erhalte !awakened:m2! von !M! Karten einer *ANDEREN *DIMENSION. Lege 2 *Leeren in den Abwurfstapel. Erschöpft." + }, + "awakened:Inscribe": { + "NAME": "Einschreiben", + "DESCRIPTION": "Wähle einen *Zauber. Lege für den Rest des Kampfes !M! Kopien in das Zauberbuch.", + "UPGRADE_DESCRIPTION": "awakened:Aufrufen. NL Wähle einen *Zauber. Lege für den Rest des Kampfes !M! Kopien in das Zauberbuch." + } +} diff --git a/src/main/resources/awakenedResources/localization/deu/CharacterStrings.json b/src/main/resources/awakenedResources/localization/deu/CharacterStrings.json new file mode 100644 index 0000000000..16abbc71b3 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/deu/CharacterStrings.json @@ -0,0 +1,13 @@ +{ + "awakened:awakenedOne": { + "NAMES": [ + "Der Erweckte", + "der Erweckte" + ], + "TEXT": [ + "Das Oberhaupt des Kultes - Der unsterbliche dunkle Hexer des Jenseits. NL Verfügt über die Macht der Leere und anderer Elemente.", + "NL Du sprichst deine mächtigsten Zauber...", + "Auf einer unbeleuchteten Straße triffst du auf ein paar vermummte Gestalten, die gerade mitten in irgendeinem dunklen Ritual sind. Als du näher kommst, wenden sie sich dir in gespenstischem Gleichklang zu. Der Größte von ihnen entblößt Fangzähne und streckt eine lange, blasse Hand nach dir aus. NL ~„Schließ~ ~dich~ ~uns~ ~an,~ ~oh~ ~Aufgestiegener,~ ~und~ ~spüre~ ~die~ ~Wärme~ ~des~ ~Spire.“~" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/deu/EventStrings.json b/src/main/resources/awakenedResources/localization/deu/EventStrings.json new file mode 100644 index 0000000000..748f2ed4f1 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/deu/EventStrings.json @@ -0,0 +1,88 @@ +{ + "awakened:Nest": { + "NAME": "Das Nest", + "DESCRIPTIONS": [ + "Du bist endlich wieder zu Hause. NL #pIm #pNest, wo du zum #b~leibhaftigen~ #b~Avatar~ #b~eines~ #b~Gottes~ aufgestiegen bist. Im Augenblick deines Erscheinens versammelt sich eine Schar @singender@ und @brüllender@ Kultisten um sich! NL Sie wissen ganz genau, dass deine Ankunft etwas von ihnen Einfordert - eine #r@Zehnte....@", + "Die bevorstehenden Kämpfe werden schwierig - ein idealer Zeitpunkt das eigene Arsenal aufzubessern. NL NL #r@...Aber@ #r@nicht@ #r@mit@ #r@Dolchen!@ NL NL Du vollziehst ein mächtiges Ritual, das ein besonderes #yRelikt beschwört. Doch das Ritual verlangt dir einen hohen Blutzoll ab. NL NL Geschwächt verlässt du dein Zuhause, in der Hoffnung mit dem Relikt mehr Unheil zu bringen.", + "Die Kultisten reihen sich an und bringen ihre Opfergaben. NL NL Die meisten sind @wertloser@ @Müll,@ doch einer von ihnen bringt etwas sehr Interessantes: ein #bmächtiges #bElixier das sich bei deinen Schlachten als hilfreich erweisen kann. NL NL Bald darauf verlässt du dein Zuhause und setzt deinen Weg abwärts fort.", + "Die Kultisten sind frenetischer als je zuvor, da du ihnen die Statue zurückgebracht hast. NL Zur Feier des Tages wirst du mit Seelen und Geschenken überhäuft! NL Als du nach den Feierlichkeiten das Nest verlassen hast fällt dir ein, dass du deine Zeit drinnen nicht genutzt hast, um nach besserer Ausrüstung zu suchen... NL NL Doch es ist schon zu spät.", + "#r@KRÄHENGOTT!!@ #r@HEIMGEKEHRT!!“@ NL #b~„KRÄCHZ~ #b~KRÄCHZ~ #b~KRÄÄÄÄCHZZZ!“~ NL Gut, dass du die Statue vorhin nicht zerstört hast.", + "", + "", + "Die Kultisten sind frenetischer als je zuvor, da du ihnen die Statue zurückgebracht hast. NL Zur Feier des Tages wirst du mit Seelen und Geschenken überhäuft! NL Als du nach den Feierlichkeiten das Nest verlassen hast fällt dir ein, dass du deine Zeit drinnen nicht genutzt hast, um nach besserer Ausrüstung zu suchen... NL NL Doch es ist schon zu spät.", + "Du bewegst dich schnurstracks zur #ySpendenkiste um die #yMünzen und ein #yRelikt zu entnehmen. NL NL Diese Münzen, die durch Blutvergießen erlangt wurden, enthalten die #bSeelen der Opfer. NL NL Das #yRelikt wird dir ebenfalls in deiner Reise noch von Nutzen sein. NL NL Als du die #rblutbefleckten Münzen einsammelst fällt dir auf, dass üblicherweise viel mehr gespendet wird... NL NL NL ~...~", + "Wurdest du... #r@bestohlen?@ Das Nest, #pausgeraubt? NL NL Natürlich nicht, ~völlig~ ~ausgeschlossen.~ NL NL NL Überhaupt daran zu denken wäre töricht. NL NL NL ~...oder?~ NL NL NL Du versuchst den #y~schleichenden~ #y~Zweifel~ abzuschütteln und verlässt das Nest wieder." + ], + "OPTIONS": [ + "[Statue zurückgeben] #rVerliere #rdie #rFlügelstatue. #gErhalte #gviele #gBelohnungen.", + "[Gesperrt] Erfordert die Zerbrochene Flügelstatue.", + "[Opfer annehmen] #gErhalte #gein #gGebräu #gder #gNeugier.", + "[Waffe beschwören] #gErhalte #gein #gbesonderes #gRelikt. #rVerliere #r", + " #rmax. #rTP.", + "[Spendenbox] #gErhalte #g", + " #gGold, #gein #ggewöhnliches #gRelikt, #rund #rZweifel.", + "[Verlassen]", + "[Continue]", + "[Rühmen lassen] #gErhalte #gBelohnungen für die Rückgabe der #gFlügelstatue.", + "[Weiter] - #rWerde #rverflucht #r- #rZweifel." + ] + }, + "awakened:WingStatueAwakened": { + "NAME": "Flügelstatue", + "DESCRIPTIONS": [ + "Zwischen den Steinen und Brocken erblickst du eine aufwändige große blaue Statue des Gottes der Krähen: Mazaleth. NL NL Plötzlich spürst du große Wut und du bekommst das Verlangen, die Statue zu zerschmettern. NL NL Doch dir ist klar, dass das den Ärger deiner Gönner auf dich zieht.", + "Die Statue zu zerstören wäre zu gefährlich - deswegen nimmst du sie einfach mit. NL Das Gewicht erdrückt dich für eine Weile, doch du gewöhnst dich schnell daran.", + "Du schägst mit all deiner Kraft auf die Statue. NL Schon bald @zerfällt@ sie in ihre Einzelteile. Einer der Splitter ist auffallend scharf, und trägt etwas Magie in sich. NL Du verlässt den Ort mit dem Splitter in deinen Krallen und spürst #pdunkle #pEnergien in dein Blut sickern.", + "Du gehst daran vorbei und setzt deine Reise fort.", + "Krä...Krächz?! Geschenk für KRÄHENGOTT?", + "KÄ-KRÄCHZ!!", + "Ein Geschäft? Das Angebot ist angemessen...", + "Der Kult wird zufrieden sein." + ], + "OPTIONS": [ + "[Zerstören] #gErhalte #gden #gScharfen #gSplitter. #rWerde #rzweimal #rverflucht #r- #rBlutleer.", + "[Mitnehmen] #rVerliere #r", + "[Verlassen]", + " #rTP. #gErhalte #gdie #gZerbrochene #gFlügelstatue." + ] + }, + "awakened:BackToBasics": { + "NAME": "", + "DESCRIPTIONS": [ + "Nichts hat eine Bedeutung - außer der Kampf ums Dasein. Im Hier und Jetzt." + ], + "OPTIONS": [ + "[Verzweiflung] #gSchlag und #gVerteidigen Karten #gkosten #0 und #rlaugen #rdich #raus.", + "[Gesperrt] Erfordert einen Schlag oder ein Verteidigen." + ] + }, + "awakened:AbyssEvent": { + "NAME": "Aus den Tiefen des Abgrundes", + "DESCRIPTIONS": [ + "Während du durch die Stadt umherstreifst erlangt dich ein schwer zu beschreibendes, unheimliches Gefühl...als ob sich eine andere #pRealität vor deinen Augen @enthüllt.@ NL Du hörst, spürst und siehst nichts mehr - außer einem #pmagischen #pFolianten direkt vor dir und einer ~außerweltlichen~ ~Stimme~ rufen... NL \n\n„ERWACHTES KIND. WANDERER DER UNENDLICHEN DIMENSIONEN. ES GIBT VIEL ZU BEREDEN. NIMM MEINE HAND UND DU WIRST DAS WISSEN FINDEN NACHDEM DU SUCHST...UNBEKANNTE WELTEN VON, MONSTERN, MASCHINEN, UND MAGIE JENSEITS DER VORSTELLUNGSKRAFT DIESER DIMENSION.“", + "„SEHR GUT. UNSERE ALLIANZ IST DADURCH BESIEGELT!“\n\n NL Mit dem Folianten in der Hand fühlst du, wie sich dir eine Welt von schier unbegrenzten Möglichkeiten eröffnet hat, doch das Gefühl des #paußerweltlichen #pUnwohlseins bleibt...", + "Du schaffst es von dieser Trance zu erwachen. Du breitest deine Flügel aus und lässt den #pFolianten liegen." + ], + "OPTIONS": [ + "[Nehmen] Erhalte die #gDimensionsspalte. #rWerde #rverflucht #r- #rAltern.", + "[Verlassen]", + "[Verlassen]" + ] + }, + "awakened:CultTalk": { + "NAME": "TalkStrings", + "DESCRIPTIONS": [ + "@VERGIB@ @MIR@ @MEISTER!@", + "@MEINE@ @ZEIT@ @IST@ @GEKOMMEN!@", + "@KRÄÄÄÄCHZ!@ @KRÄCHZ@ @KRÄÄÄÄCHZ!!!!@", + + "@MEIN@ @BLUT@ @FÜR@ @DEN@ @KRÄHENGOTT!@", + "@ICH@ @BIN@ @UNWÜRDIG!@", + "@ICH@ @STERBE@ @-@ @DER@ @SCHWARM@ @FLORIERT!!!@", + + "~Soll~ ~dies~ ~meine~ ~Erlösung~ ~sein…~", + "~...~", + "~Du~ ~lässt~ ~mir~ ~keine~ ~Wahl…~" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/deu/KeywordStrings.json b/src/main/resources/awakenedResources/localization/deu/KeywordStrings.json new file mode 100644 index 0000000000..67bbaadf91 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/deu/KeywordStrings.json @@ -0,0 +1,80 @@ +[ + { + "PROPER_NAME": "Machttrank", + "NAMES": [ + "machttrank", + "Power Potion", + "Power_Potion", + "power_potion", + "powerpotion" + ], + "DESCRIPTION": "#yTrank [REMOVE_SPACE]: Wähle #b1 von #b3 zufälligen #yMachtkarten. Nimm sie auf die Hand, sie kostet diesen Zug #b0." + }, + { + "PROPER_NAME": "Aufrufen", + "NAMES": [ + "aufrufen", + "aufgerufen", + "aufgerufene", + "aufruft", + "gerufen", + "gerufen", + "gerufene", + "rufen", + "rufe", + "conjure", + "conjured", + "awaken" + ], + "DESCRIPTION": "Ein Aufruf erschafft den nächsten Zauberspruch des Zauberbuches (Nimm den nächsten Zauber auf die Hand)." + }, + { + "PROPER_NAME": "Chor", + "NAMES": [ + "chor", + "chant" + ], + "DESCRIPTION": "Chor Effekte werden für den Rest des Kampfes aktiviert, wenn beim Ausspielen die letzte gespielte Karte eine #yMacht war." + }, + { + "PROPER_NAME": "Verhext", + "NAMES": [ + "verhext", + "verhexte", + "verhexter", + "hex", + "hexxed", + "hexx" + ], + "DESCRIPTION": "#yVerhexte Wesen erleiden vom nächsten Angriff #b20% mehr Schaden für jede Stufe. Jegliches #yverhext wird nach dem Angriff entfernt." + }, + { + "PROPER_NAME": "Ausgelaugt", + "NAMES": [ + "ausgelaugt", + "auslaugen", + "lauge", + "laugen", + "drain", + "drained" + ], + "DESCRIPTION": "Alle Effekte die dich [E] verlieren lassen, selbst wenn du bei #b0 bist. (Ausgegebene [E] für die Kosten einer Karte zählen NICHT.)" + }, + { + "PROPER_NAME": "Manabrand", + "NAMES": [ + "manabrand", + "manabrandes", + "manaburn" + ], + "DESCRIPTION": "Der Gegner verliert TP in Höhe des #yManabrandes immer dann, wenn du [E] verlierst, selbst wenn du bei #b0 bist. (Ausgegebene [E] für die Kosten einer Karte zählen NICHT.)" + }, + { + "PROPER_NAME": "Neugier", + "NAMES": [ + "neugier", + "curiosity" + ], + "DESCRIPTION": "Erhalte immer, wenn du eine #yMacht spielst, #b1 #yStärke [REMOVE_SPACE]." + } +] \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/deu/MonsterStrings.json b/src/main/resources/awakenedResources/localization/deu/MonsterStrings.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/deu/MonsterStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/deu/OrbStrings.json b/src/main/resources/awakenedResources/localization/deu/OrbStrings.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/deu/OrbStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/deu/PotionStrings.json b/src/main/resources/awakenedResources/localization/deu/PotionStrings.json new file mode 100644 index 0000000000..90b49d2d00 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/deu/PotionStrings.json @@ -0,0 +1,30 @@ +{ + "awakened:PhaseSkip": { + "NAME": "Trank des Aufstiegs", + "DESCRIPTIONS": [ + "#yErwache umgehend und #yverbessere alle Karten für den Kampf." + ] + }, + "awakened:CultistsDelight": { + "NAME": "Gebräu der Neugier", + "DESCRIPTIONS": [ + "Erhalte immer, wenn du in diesem Kampf eine #yMacht ausspielst, #b", + " #yStärke [REMOVE_SPACE]. Nimm eine zufällige #yMachtkarte auf die Hand. Sie kostet diesen Zug #b0 [REMOVE_SPACE]." + ] + }, + "awakened:SacramentalWine": { + "NAME": "Sekten-Messwein", + "DESCRIPTIONS": [ + "Erhalte immer, wenn du in diesem Kampf eine #yMacht ausspielst, #b", + " #yBlock [REMOVE_SPACE]. Nimm eine zufällige #yMachtkarte auf die Hand. Sie kostet diesen Zug #b0 [REMOVE_SPACE]." + ] + }, + "awakened:SneckoPowersPotion": { + "NAME": "Snecko-Essenz", + "DESCRIPTIONS": [ + "Wähle #b1 von #b3 zufälligen #yfremden #yMachtkarten [REMOVE_SPACE]. Nimm sie auf die Hand, sie kostet diesen Zug #b0 [REMOVE_SPACE].", + "Wähle #b1 von #b3 zufälligen #yfremden #yMachtkarten [REMOVE_SPACE]. Nimm #b", + " Kopien auf die Hand, sie kosten diesen Zug #b0 [REMOVE_SPACE]." + ] + } +} diff --git a/src/main/resources/awakenedResources/localization/deu/PowerStrings.json b/src/main/resources/awakenedResources/localization/deu/PowerStrings.json new file mode 100644 index 0000000000..9b260854f5 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/deu/PowerStrings.json @@ -0,0 +1,249 @@ +{ + "awakened:IntensifyPower": { + "NAME": "Intensiviert", + "DESCRIPTIONS": [ + "In diesem Zug kosten Zaubersprücke #b0 [REMOVE_SPACE].", + "Zaubersprüche kosten in den nächsten #b", + " Zügen #b0 [REMOVE_SPACE]." + ] + }, + "awakened:IntensifyDebuffPower": { + "NAME": "Ausgebrannt", + "DESCRIPTIONS": [ + "Du kannst in diesem Zug nicht mehr #yaufrufen [REMOVE_SPACE].", + "Du kannst in den nächsten #b", + " nicht #yaufrufen [REMOVE_SPACE]." + ] + }, + "awakened:RisingChantPower": { + "NAME": "Aufstiegschor", + "DESCRIPTIONS": [ + " #b", + " Mal pro Zug werden #yChor Effekte zweimal aktiviert. NL In diesem Zug noch #b", + " Mal." + ] + }, + "awakened:CursedStrength": { + "NAME": "Neumond", + "DESCRIPTIONS": [ + "Erhalte immer, wenn du #yausgelaugt wirst, #b", + " #yStärke [REMOVE_SPACE]." + ] + }, + "awakened:ThaumaturgyPower": { + "NAME": "Quacksalbereien", + "DESCRIPTIONS": [ + "Erhalte zu Beginn des Zuges eine #yZeremonie - noch #b", + " Mal." + ] + }, + "awakened:SacramentPower": { + "NAME": "Sakrament", + "DESCRIPTIONS": [ + "Erhalte immer, wenn du eine #yMacht ausspielst, #b", + " #yBlock [REMOVE_SPACE]." + ] + }, + "awakened:FlarePower": { + "NAME": "Federflackern", + "DESCRIPTIONS": [ + "Immer wenn du in diesem Zug einen #ynicht-Angriff spielst verlieren ALLE Gegner #b", + " TP." + ] + }, + "awakened:PrimacyPower": { + "NAME": "Vorrang", + "DESCRIPTIONS": [ + "Wenn du das erste Mal im Zug #yStärke erhältst, ziehe eine Karte.", + "Ziehe die ersten #b", + " Male, an denen du im Zug #yStärke erhältst, eine Karte.", + " NL Dieser Effekt kann in diesem Zug noch #b", + " Mal aktiviert werden.", + " Mal aktiviert werden.", + " NL Dieser Effekt kann in diesem Zug nicht mehr aktiviert werden." + ] + }, + "awakened:SpellbinderPower": { + "NAME": "Bezaubert", + "DESCRIPTIONS": [ + "#yRufe zu Beginn des Zuges einen Zaubespruch auf.", + "#yRufe zu Beginn des Zuges #b", + " Zaubesprüche auf." + ] + }, + "awakened:DarkEchoPower": { + "NAME": "Dunkles Echo", + "DESCRIPTIONS": [ + "Füge am Ende des Zuges ALLEN Gegnern #b", + " Schaden #b", + " Mal zu.", + " Schaden zu." + ] + }, + "awakened:MoonlitVisionPower": { + "NAME": "Mondfinsternis", + "DESCRIPTIONS": [ + "Erhalte [E] , wenn du das erste Mal im Zug einen Zauber spielst.", + "Die ersten #b", + " Male im Zug, an denen du einen Zauber spielst, erhalte [E].", + " NL Noch #b", + " Mal möglich in diesem Zug." + ] + }, + "awakened:EclipseEmbracePower": { + "NAME": "Sonnenfinsternis", + "DESCRIPTIONS": [ + "Immer wenn du eine #yLeere #yerschöpfst [REMOVE_SPACE], ziehe im nächsten Zug eine Karte und erhalte [E].", + "Immer wenn du eine #yLeere #yerschöpfst [REMOVE_SPACE], erhalte im nächsten Zug #b", + " [E] und ziehe #b", + " Karten." + ] + }, + "awakened:SongOfSorrowPower": { + "NAME": "Leidenslieder", + "DESCRIPTIONS": [ + "Immer wenn du eine #yLeere erhältst, verlieren ALLE Gegner #b", + " TP." + ] + }, + "awakened:ShroudOfMiasmaPower": { + "NAME": "Miasma-Schleier", + "DESCRIPTIONS": [ + "Erhalte immer, wenn du einen #yverhexten Gegner angreifst, #b", + " #yBlock [REMOVE_SPACE]." + ] + }, + "awakened:StrengthReturnPower": { + "NAME": "Aufgeschlitzt", + "DESCRIPTIONS": [ + "Wenn du diesen Gegner triffst, erhältst du #b", + " #ytemporäre #yStärke [REMOVE_SPACE]." + ] + }, + "awakened:ManaburnPower": { + "NAME": "Manabrand", + "DESCRIPTIONS": [ + "Verliert immer wenn du #yausgelaugt wirst #b", + " TP." + ] + }, + "awakened:ArchmagusPower": { + "NAME": "Erzmagier", + "DESCRIPTIONS": [ + "Der erste in deinem Zug gespielte #yZauber wird zweimal gespielt.", + "Die ersten #b", + " in deinem Zug gespielten #yZauber werden zweimal gespielt.", + " NL (Noch #b", + " Zauberwiederholungen für diesen Zug übrig)" + ] + }, + "awakened:DoubleSpellPower": { + "NAME": "Zauberwiederholung", + "DESCRIPTIONS": [ + "In diesem Zug spielst du den nächsten #yZauber doppelt.", + "In diesem Zug spielst du die nächsten ", + " #yZauber doppelt." + ] + }, + "awakened:DarknessFallsPower": { + "NAME": "Ringfinsternis", + "DESCRIPTIONS": [ + "Erhalte immer, wenn du #yausgelaugt wirst, #b", + " #yBlock [REMOVE_SPACE]." + ] + }, + "awakened:VoidRefundPower": { + "NAME": "Kriegsfanfare", + "DESCRIPTIONS": [ + "Erhalte das nächste Mal an dem du #yausgelaugt wirst [E].", + "Erhalte das nächste Mal an dem du #yausgelaugt wirst #b", + " [E]." + ] + }, + "awakened:DemonGlyphPower": { + "NAME": "Dämonenglyphen", + "DESCRIPTIONS": [ + "Erhalte #b", + " #yStärke und #yGeschicklichkeit sobald du #yerwachst [REMOVE_SPACE]." + ] + }, + "awakened:ReverseRitualPower": { + "NAME": "Erweckte Form", + "DESCRIPTIONS": [ + "Erhalte zu Beginn deines Zuges #b", + " #yRitual [REMOVE_SPACE]." + ] + }, + "awakened:EnsorcelatePower": { + "NAME": "Zauberformel", + "DESCRIPTIONS": [ + "Ignoriere die Energiekosten der nächsten gespielten #yMacht [REMOVE_SPACE].", + "Ignoriere die Energiekosten der nächsten #b", + " gespielten #yMächte [REMOVE_SPACE]." + ] + }, + "awakened:ConjureNextPower": { + "NAME": "Rupfen", + "DESCRIPTIONS": [ + "Nimm das nächste Mal wenn du #yausgelaugt wirst #yFederstiche auf die Hand.", + "Nimm das nächste Mal wenn du #yausgelaugt wirst #b", + " #yFederstiche auf die Hand." + ] + }, + "awakened:ChosensVersePower": { + "NAME": "Auserwählter Vers", + "DESCRIPTIONS": [ + "Das nächste Mal, wenn du in diesem Zug einen #ynicht-Angriff spielst, erhalte #b", + " #yBlock und ziehe eine Karte.", + "Die nächsten #b", + " Male im Zug, an denen du einen #ynicht-Angriff spielst, erhalte #b", + " #yBlock und ziehe eine Karte." + ] + }, + "awakened:AphoticFountPower": { + "NAME": "Gefrorene Quellen", + "DESCRIPTIONS": [ + "Erhalte immer, wenn du #yKryostase spielst, #b", + " #yPanzerrüstung [REMOVE_SPACE]." + ] + }, + "awakened:GrimoirePower": { + "NAME": "Donnergott", + "DESCRIPTIONS": [ + "Deine #yBlitzstrahlen fügen #b", + " mehr Schaden zu." + ] + }, + "awakened:SpellshieldPower": { + "NAME": "Zauberschild", + "DESCRIPTIONS": [ + "Erhalte am Ende des Zuges #b", + " #yBlock für jede Karte die du #ybehältst [REMOVE_SPACE]." + ] + }, + "awakened:DaggerstormPower": { + "NAME": "Dolchsturm", + "DESCRIPTIONS": [ + "Immer wenn du eine Karte generierst, füge einem zufälligen Gegner #b", + " Schaden zu." + ] + }, + "awakened:SchemePower": { + "NAME": "Böser Plan", + "DESCRIPTIONS": [ + "In diesem Zug spielst du die nächsten #b", + " Karten mit Kosten von höchstens #b1 doppelt.", + "In diesem Zug spielst du die nächste Karte mit Kosten von höchstens #b1 doppelt." + ] + }, + "awakened:FourthDimensionPower": { + "NAME": "Vierte Dimension", + "DESCRIPTIONS": [ + "Für #b", + " folgenden Zug, ", + " folgende Züge, ", + "spiele und #yerschöpfe eine Kopie von ", + " [REMOVE_SPACE]." + ] + } +} \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/deu/RelicStrings.json b/src/main/resources/awakenedResources/localization/deu/RelicStrings.json new file mode 100644 index 0000000000..67fee7e418 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/deu/RelicStrings.json @@ -0,0 +1,160 @@ +{ + "awakened:RippedDoll": { + "NAME": "Zerrissene Puppe", + "FLAVOR": "Das Einzige, was von deinem alten Leben übrig ist. Von der Puppe geht eine schwache Magie aus.", + "DESCRIPTIONS": [ + "#yawakened:Rufe zu Beginn deiner ersten #b", + " Züge einen Zauberspruch #yauf [REMOVE_SPACE]." + ] + }, + "awakened:ShreddedDoll": { + "NAME": "Zerfetzte Puppe", + "FLAVOR": "Die Puppe ist ein Beweis deiner Schwäche, und doch kannst du sie nicht loslassen.", + "DESCRIPTIONS": [ + "Ersetzt ", + " [REMOVE_SPACE].[] NL #yawakened:Rufe zu Beginn jedes Zuges einen Zauberspruch #yauf [REMOVE_SPACE]. NL Erhalte #b1 #yRitual [REMOVE_SPACE], wenn du das erste Mal im Kampf dein Zauberbuch neu auffüllst." + ] + }, + "awakened:WhiteRibbon": { + "NAME": "Weiße Schleife", + "FLAVOR": "Verleiht gesprochenen Worten auch außerhalb von Ritualen Macht.", + "DESCRIPTIONS": [ + "Erhalte immer, wenn du eine Karte mit #yawakened:Chor spielst, #b", + " #yBlock - auch wenn der Effekt nicht aktiviert ist." + ] + }, + "awakened:HexxBomb": { + "NAME": "Manabombe", + "FLAVOR": "3... 2...", + "DESCRIPTIONS": [ + "Immer wenn ein Gegner stirbt, übertrage sein #yawakened:Manabrand auf einen zufälligen Gegner." + ] + }, + "awakened:TomeOfPortalmancy": { + "NAME": "Almanach der Portale", + "FLAVOR": "Eine Betriebsanleitung zur Konstruktion und Wartung interdimensionaler Portale.", + "DESCRIPTIONS": [ + "Immer wenn du eine #yLeere erhältst, wende #b", + " #yawakened:Manabrand auf ALLE Gegner an." + ] + }, + "awakened:EyeOfTheOccult": { + "NAME": "Auge der Macht", + "FLAVOR": "Diese okkulte Schnitzerei verleiht seinem Träger magisches Wissen.", + "DESCRIPTIONS": [ + "#yBlitzstrahl und #yVerderben treffen ALLE Gegner." + ] + }, + "awakened:DeadBird": { + "NAME": "Rabengeist", + "FLAVOR": "Dieser Geist fliegt den Vefluchten und Verdammten nach.", + "DESCRIPTIONS": [ + "Füge am Ende des Zuges dem Gegner mit den niedrigsten TP #b", + " Schaden zu. Der Schaden wird von deiner #yStärke beeinflusst." + ] + }, + "awakened:AbyssBlade": { + "NAME": "Klinge der Leere", + "FLAVOR": "Jeder Hieb geht ins Leere... oder in die Leere?", + "DESCRIPTIONS": [ + "Wenn du das erste Mal im Zug #yawakened:ausgelaugt bist, ziehe eine Karte und erhalte [E]." + ] + }, + "awakened:ShardOfNowak": { + "NAME": "Vergoldeter Knochen", + "FLAVOR": "...nein, nicht diese Art von Fokus.", + "DESCRIPTIONS": [ + "Beginne jeden Kampf mit #b", + " #yStärke [REMOVE_SPACE]. Verliere diese #yStärke wieder, sobald du das erste Mal im Kampf TP verlierst." + ] + }, + "awakened:VioletPlumage": { + "NAME": "Violettes Gefieder", + "FLAVOR": "Gefärbt von der unendlichen Finsternis der Vergessenheit.", + "DESCRIPTIONS": [ + "Wenn du zum ersten Mal im Kampf einen Zug mit mehr als 0 [E] beendest, ziehe im nächsten Zug #b", + " zusätzliche Karten." + ] + }, + "awakened:ZenerDeck": { + "NAME": "Zener Karten", + "FLAVOR": "„Eins, zwei, drei - ihr alle seid dabei.“", + "DESCRIPTIONS": [ + "Lege zu Beginn jedes Kampfes den #ySechsten #ySinn in dein Zauberbuch und #yawakened:rufe ihn #yauf." + ] + }, + "awakened:CawingCask": { + "NAME": "Krächzendes Fass", + "FLAVOR": "Ein zeremoniell beschnitztes Fass, das den Krähengott Mazaleth darstellt. Der Inhalt riecht äußerst fragwürdig...", + "DESCRIPTIONS": [ + "Erhalte immer, wenn du einen Trank benutzt, #b", + " #yRitual [REMOVE_SPACE]." + ] + }, + "awakened:MiniBlackHole": { + "NAME": "Alethea", + "FLAVOR": "Direkt aus dem Abgrund.", + "DESCRIPTIONS": [ + "Wenn du in einem Zug keine #yMacht ausgespielt hast, dann ziehe eine zusätzliche Karte im nächsten Zug." + ] + }, + "awakened:StrengthBooster": { + "NAME": "Papierkrähe", + "FLAVOR": "Der Gebieter von Flüchen und Zweifel - ein Tausend Mal gefaltet...", + "DESCRIPTIONS": [ + "Gegner verlieren um #b", + "% mehr TP durch #yawakened:Manabrand [REMOVE_SPACE]." + ] + }, + "awakened:CursedBlessing": { + "NAME": "Letzter Wille", + "FLAVOR": "Ich vermache meine gesamten Besitztümer meiner Katze Noodles. Ade, du grausame Welt. XOXO Ritter", + "DESCRIPTIONS": [ + "Wenn du das erste Mal im Kampf #b", + " #yawakened:Chor Effekte aktivierst, erhalte #b", + " #yRitual [REMOVE_SPACE]." + ] + }, + "awakened:CurvedSwordMeme": { + "NAME": "Klinge beschwören", + "FLAVOR": "Na komm, mach es schon. Beschwöre eine Klinge, jetzt gleich. Ich warte. :^)", + "DESCRIPTIONS": [ + "Erhalte zu Beginn des Kampfes eine #yKlinge #ybeschwören Karte?", + "NOTE: THE PLAYER CANNOT OBTAIN THIS RELIC OUTSIDE OF CONSOLE, IT'S A JOKE RELIC!" + ] + }, + "awakened:CurvedSword": { + "NAME": "Zetsumei", + "FLAVOR": "Diese Klinge wird von Magiern bevorzugt, da sie einen Teil der gesprochenen Zauber in sich aufnimmt.", + "DESCRIPTIONS": [ + "Erhalte eine #yZeremonie für alle #b", + " Zauber, die du in einem Kampf ausspielst." + ] + }, + "awakened:MoonTalisman": { + "NAME": "Schwarze Rosenblüte", + "FLAVOR": "„Bitte... vergiss mich nicht... auch nach meinem Tod.“", + "DESCRIPTIONS": [ + "Wähle beim Aufheben eine Karte, die #rKEINEN Zauberspruch #yawakened:aufruft [REMOVE_SPACE]. Sie erhält #yawakened:Aufrufen.", + "Wähle eine Karte für die ", + "Die Blüte hat ", + " gesegnet und #yawakened:Aufrufen hinzugefügt.", + "Die eingelegte Karte wurde aus dem Deck #rentfernt [REMOVE_SPACE]. Das Relikt hat keine Wirkung mehr." + ] + }, + "awakened:AwakenedUrn": { + "NAME": "Vogelvase", + "FLAVOR": "Auf diesem Gefäß ist der böse aussehende Krähengott Mazaleth zu sehen.", + "DESCRIPTIONS": [ + "Die ersten #b4 Male im Kampf, an denen du eine #yMacht ausspielst, heile #b", + " TP." + ] + }, + "awakened:NerfedMummifiedHand": { + "NAME": "Ausgetrocknete Hand", + "FLAVOR": "Sie verlangt nach wahrer Macht, und reagiert nicht auf okkulte Rituale.", + "DESCRIPTIONS": [ + "Immer wenn du eine #rANDERE #yMacht als #yZeremonie ausspielst, kostet eine zufällige Handkarte in diesem Zug #b0 [REMOVE_SPACE]." + ] + } +} diff --git a/src/main/resources/awakenedResources/localization/deu/RunModStrings.json b/src/main/resources/awakenedResources/localization/deu/RunModStrings.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/deu/RunModStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/deu/UIStrings.json b/src/main/resources/awakenedResources/localization/deu/UIStrings.json new file mode 100644 index 0000000000..5c8bdcbd21 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/deu/UIStrings.json @@ -0,0 +1,46 @@ +{ + "awakened:SpellDescriptor": { + "TEXT": [ + "Zauber" + ] + }, + "awakened:ConjureMod": { + "TEXT": [ + " NL awakened:Aufrufen." + ] + }, + "awakened:SpellMod": { + "TEXT": [ + "[#12FAF0]Zauber. NL" + ] + }, + "awakened:DrainingMod": { + "TEXT": [ + " NL Verliere im nächsten Zug [E]." + ] + }, + "awakened:highlightChant": { + "TEXT": [ + "awakened:Chor: ", + "[awakenedIcon] [#12FAF0]Chor: " + ] + }, + "awakened:Spellbook": { + "TEXT": [ + "Zauberbuch", + "Erwachen", + "#yErwache nach dem Ausspielen von #b7 Mächten! NL NL Im #yErwachten Zustand #ygerufene Zaubersprüche werden #yverbessert [REMOVE_SPACE].", + "#yErwache nach dem Ausspielen von #b7 Mächten! NL NL Im #yErwachten Zustand #ygerufene Zaubersprüche werden #yverbessert [REMOVE_SPACE]." + ] + }, + "awakened:FullSpellbook": { + "TEXT": [ + "Mein Zauberbuch ist voll!" + ] + }, + "awakened:FourthDimensionDupeAttempt": { + "TEXT": [ + "@Das@ @zu@ @tun@ @würde@ @das@ @Raum-Zeit-Kontinuum@ @zerstören!!!@" + ] + } +} \ No newline at end of file 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 0000000000..e1658f06ac --- /dev/null +++ b/src/main/resources/awakenedResources/localization/eng/CardStrings.json @@ -0,0 +1,410 @@ +{ + "awakened:Thunderbolt": { + "NAME": "Thunderbolt", + "DESCRIPTION": "Retain. NL Deal !D! damage. NL Exhaust." + }, + "awakened:BurningStudy": { + "NAME": "Burning Study", + "DESCRIPTION": "Retain. NL Gain !M! Strength. NL Apply !awakened:m2! Weak to ALL enemies. NL Exhaust." + }, + "awakened:Cryostasis": { + "NAME": "Cryostasis", + "DESCRIPTION": "Retain. NL Gain !B! Block. NL Exhaust." + }, + "awakened:Darkleech": { + "NAME": "Darkleech", + "DESCRIPTION": "Retain. NL Apply !M! Vulnerable. NL Apply !awakened:m2! awakened:Manaburn. NL Exhaust." + }, + "awakened:DeathCoil": { + "NAME": "Deathcoil", + "DESCRIPTION": "Apply !M! awakened:Manaburn. NL Next turn, lose [E]." + }, + "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:Brainshock": { + "NAME": "Brainshock", + "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 !M! damage to ALL enemies, increased by Strength." + }, + "awakened:AwakenedForm": { + "NAME": "Awakened Form", + "DESCRIPTION": "Gain !M! awakened:Curiosity. NL Gain !awakened:m2! Ritual.", + "UPGRADE_DESCRIPTION": "*Awaken immediately. NL Gain !M! awakened:Curiosity. NL Gain !awakened:m2! Ritual." + }, + "awakened:Spellbinder": { + "NAME": "Spellbinder", + "DESCRIPTION": "At the start of your turn, awakened:Conjure." + }, + "awakened:Ceremony": { + "NAME": "Ceremony", + "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]." + }, + "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 *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 Gain a *Plume *Jab." + }, + "awakened:FlareShot": { + "NAME": "Feather Flare", + "DESCRIPTION": "Deal !D! damage. NL awakened:Chant: Next turn, draw !M! additional card." + }, + "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 a 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 !awakened:m2! Dexterity. NL At the start of your next !M! turns, add a *Ceremony into your hand." + }, + "awakened:WaveOfMiasma": { + "NAME": "Wave of Miasma", + "DESCRIPTION": "Gain !B! Block. NL Apply !awakened:m2! awakened:Manaburn to ALL enemies. NL Exhaust." + }, + "awakened:SludgeBomb": { + "NAME": "Sludge Bomb", + "DESCRIPTION": "Requires and erases an Exhausted *Void. NL Deal !D! damage to ALL enemies.", + "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": "4th Dimension", + "DESCRIPTION": "Exhaust a card. NL Shuffle !M! copies of it into your draw pile. NL Exhaust.", + "EXTENDED_DESCRIPTION": [ + "Exhaust for 4th Dimension." + ] + }, + "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": "Gain !M! *Ceremony cards. NL Exhaust." + }, + "awakened:BirdsEye": { + "NAME": "Byrd's Eye", + "DESCRIPTION": "Choose a Spell to awakened:Conjure.", + "UPGRADE_DESCRIPTION": "Refresh your Spells. Choose a Spell to awakened:Conjure." + }, + "awakened:Initiation": { + "NAME": "Initiation", + "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." + }, + "awakened:RisingChant": { + "NAME": "Rising Chorus", + "DESCRIPTION": "Ethereal. NL The first awakened:Chant effect you activate each turn is triggered twice.", + "UPGRADE_DESCRIPTION": "The first awakened:Chant effect you activate each turn is triggered twice." + }, + "awakened:FeatherWhirl": { + "NAME": "Feather Whirl", + "DESCRIPTION": "Gain X copies of *Plume *Jab.", + "UPGRADE_DESCRIPTION": "Gain X+1 copies of *Plume *Jab." + }, + "awakened:Murder": { + "NAME": "Murder", + "DESCRIPTION": "Deal !D! damage to a random enemy !M! times.", + "UPGRADE_DESCRIPTION": "Retain. NL 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": "The first time you play a Spell each turn, NL gain [E]." + }, + "awakened:Rebirth": { + "NAME": "Rebirth", + "DESCRIPTION": "When you would die or at the end of combat, remove all debuffs, *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 [E] spent on this card counts as being awakened:Drained." + }, + "awakened:DarknessFalls": { + "NAME": "Darkness Falls", + "DESCRIPTION": "Whenever you are awakened:Drained, gain !M! Block and !awakened:m2! Strength.", + "UPGRADE_DESCRIPTION": "Innate. NL Whenever you are awakened:Drained, gain !M! Block and !awakened:m2! Strength." + }, + "awakened:Eventide": { + "NAME": "Eventide", + "DESCRIPTION": "Deal !D! damage to a random enemy twice. NL Add a *Void to the top of your draw pile." + }, + "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 a 0-cost card." + }, + "awakened:Gloomguard": { + "NAME": "Gloomguard", + "DESCRIPTION": "Gain !B! Block. NL Costs 0 if a *Void is in hand." + }, + "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:Dejection": { + "NAME": "Dejection", + "DESCRIPTION": "Deal !D! damage. NL Exhaust a card. If it was a Spell, gain a *Ceremony." + }, + "awakened:BloodRite": { + "NAME": "Blood Rite", + "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:StormRuler": { + "NAME": "Storm Ruler", + "DESCRIPTION": "awakened:Conjure. NL *Thunderbolts deal !M! additional damage." + }, + "awakened:AphoticFount": { + "NAME": "Aphotic Fount", + "DESCRIPTION": "awakened:Conjure. NL Whenever you play *Cryostasis, gain !M! expansioncontent:Plated *Armor." + }, + "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": "Play a card in your draw pile and shuffle in *Voids equal to its cost. NL Exhaust." + }, + "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": "Retain. NL Deal !D! damage to a random enemy twice. NL Exhaust." + }, + "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." + }, + "awakened:Daggerstorm": { + "NAME": "Daggerstorm", + "DESCRIPTION": "Whenever you create a card, deal !M! damage to a random enemy." + }, + "awakened:PackRat": { + "NAME": "Pack Rat", + "DESCRIPTION": "Deal !D! damage and gain !B! Block twice. NL Obtain a random potion. NL Exhaust." + }, + "awakened:Mantis": { + "NAME": "Mantis", + "DESCRIPTION": "Gain !M! Strength. NL Add a *Plume *Jab into your hand." + }, + "awakened:ManaShield": { + "NAME": "Mana Shield", + "DESCRIPTION": "Gain !B! Block. NL awakened:Conjure. NL Reduce the cost of a random Spell in hand by 1." + }, + "awakened:Crusher": { + "NAME": "Crusher", + "DESCRIPTION": "Retain. NL Deal !D! damage. NL When a card is created, reduce this card's cost by 1 until played." + }, + "awakened:Minniegun": { + "NAME": "Minniegun", + "DESCRIPTION": "Deal !D! damage !M! times. NL Shuffle a *Void into your draw pile." + }, + "awakened:SignInBlood": { + "NAME": "Sign in Blood", + "DESCRIPTION": "Take !awakened:m2! damage. NL Draw !M! cards. NL Gain !awakened:m2! Strength. NL Exhaust." + }, + "awakened:SpreadingSpores": { + "NAME": "Spreading Spores", + "DESCRIPTION": "Ethereal. NL Gain !M! Thorns. NL Shuffle a copy of this into your draw pile." + }, + "awakened:Scheme": { + "NAME": "Scheme", + "DESCRIPTION": "The next card you play this turn that cost 1 or less is played twice.", + "UPGRADE_DESCRIPTION": "The next !M! cards you play this turn that cost 1 or less are played twice." + }, + "awakened:TheEncyclopedia": { + "NAME": "The Encyclopedia", + "DESCRIPTION": "Choose 2 of !M! random cards to add into your hand. They cost 2 less. NL Exhaust.", + "EXTENDED_DESCRIPTION": [ + "Choose 2 cards to add to your hand." + ] + }, + "awakened:RealityRift": { + "NAME": "Reality Rift", + "DESCRIPTION": "Choose !awakened:m2! of !M! powerful cards from *ANOTHER *DIMENSION to gain. NL Add 2 *Voids to your discard pile. Exhaust." + }, + "awakened:Inscribe": { + "NAME": "Inscribe", + "DESCRIPTION": "Choose a Spell. Add !M! copies to the Spellbook for the rest of combat.", + "UPGRADE_DESCRIPTION": "awakened:Conjure. NL Choose a Spell. Add !M! copies to the Spellbook for the rest of combat." + } +} 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 0000000000..728b1dea87 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/eng/CharacterStrings.json @@ -0,0 +1,13 @@ +{ + "awakened:awakenedOne": { + "NAMES": [ + "The Awakened", + "the Awakened" + ], + "TEXT": [ + "The Cult's triumph and immortal dark warlock of the Beyond. NL Possesses power over the Void and all other elements.", + "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 0000000000..119aa0fda0 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/eng/EventStrings.json @@ -0,0 +1,88 @@ +{ + "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:WingStatueAwakened": { + "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." + ] + }, + "awakened:AbyssEvent": { + "NAME": "From the Abyss", + "DESCRIPTIONS": [ + "As you make your way through the city, you are suddenly stricken by an inexplicable feeling...as if #preality itself is beginning to @unravel@ before you. NL Your senses failing you otherwise, you can see a #pgrimoire sitting before you, and an ~otherworldly~ ~voice~ calling... NL \n\n\"AWAKENED CHILD. WALKER OF THE INFINITE PLANES. WE HAVE MUCH TO DISCUSS. TAKE MY HAND, AND I WILL GUIDE YOU TO THE KNOWLEDGE YOU SEEK...TO UNKNOWN WORLDS OF MONSTERS, MACHINES, AND MAGIC BEYOND THIS REALM'S UNDERSTANDING.", + "\"GOOD. OUR ALLIANCE WILL BE A POWERFUL ONE\"\n\n NL While that sense of #potherworldly #pmalaise remains, with the tome in hand you feel as if an infinite world of possibilities has opened up to you...", + "You manage to snap out of the trance, spreading your wings and leaving the strange #pgrimoire behind." + ], + "OPTIONS": [ + "[Reach] Gain #gReality #gRift. #rBecome #rCursed - #rAged.", + "[Leave].", + "[Leave]" + ] + }, + "awakened:CultTalk": { + "NAME": "TalkStrings", + "DESCRIPTIONS": [ + "@MASTER!@ @FORGIVE@ @ME!@", + "@MY@ @TIME@ @HAS@ @COME!@", + "@CAWWWWWW!@ @CAW@ @CAW@ @CAW@ @CAWWWWWW!!!!@", + + "@MY@ @BLOOD@ @FOR@ @THE@ @BIRD@ @GOD!@", + "@I@ @AM@ @NOT@ @WORTHY!@", + "@I@ @DIE@ @SO@ @THE@ @FLOCK@ @MAY@ @PROSPER!!!@", + + "~Let~ ~this~ ~serve~ ~as~ ~my~ ~redemption…~", + "~...~", + "~You~ ~leave~ ~me~ ~no~ ~choice…~" + ] + } +} \ 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 0000000000..46318e26fe --- /dev/null +++ b/src/main/resources/awakenedResources/localization/eng/KeywordStrings.json @@ -0,0 +1,59 @@ +[ + { + "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": "Create the next card from your Spellbook in your hand." + }, + { + "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.)" + }, + { + "PROPER_NAME": "Curiosity", + "NAMES": [ + "curiosity" + ], + "DESCRIPTION": "Whenever you play a #yPower card, gain #b1 #yStrength [REMOVE_SPACE]." + } +] \ 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 0000000000..9e26dfeeb6 --- /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 0000000000..9e26dfeeb6 --- /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 0000000000..6cede5492b --- /dev/null +++ b/src/main/resources/awakenedResources/localization/eng/PotionStrings.json @@ -0,0 +1,30 @@ +{ + "awakened:PhaseSkip": { + "NAME": "Ascendant's Drink", + "DESCRIPTIONS": [ + "#yAwaken immediately and #yUpgrade all cards for the rest of combat." + ] + }, + "awakened:CultistsDelight": { + "NAME": "Cultist's Delight", + "DESCRIPTIONS": [ + "Whenever you play a #yPower card this combat, gain #b", + " #yStrength [REMOVE_SPACE]. Add a random #yPower to your hand that costs #b0 for the turn." + ] + }, + "awakened:SacramentalWine": { + "NAME": "Sacramental Wine", + "DESCRIPTIONS": [ + "Whenever you play a #yPower card this combat, gain #b", + " #yBlock [REMOVE_SPACE]. Add a random #yPower to your hand that costs #b0 for the turn." + ] + }, + "awakened:SneckoPowersPotion": { + "NAME": "Snecko Essence", + "DESCRIPTIONS": [ + "Choose #b1 of #b3 random #yOffclass #yPowers to add to your hand, it costs #b0 this turn.", + "Choose #b1 of #b3 random #yOffclass #yPowers 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 0000000000..b8a86d6034 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/eng/PowerStrings.json @@ -0,0 +1,249 @@ +{ + "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": [ + "The first #b", + " #yChant effect(s) activated this turn are triggered twice. NL #b", + " Effect(s) remaining this turn." + ] + }, + "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 #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": [ + "The first time you play Spell each turn, gain [E] .", + "The first #b", + " times you play a Spell each turn, gain [E] .", + " NL #b", + " remaining this turn." + ] + }, + "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.", + " NL ( [REMOVE_SPACE]#b", + " Spell Repetitions remaining)" + ] + }, + "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 start of your turn, gain #b", + " #yRitual [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:ConjureNextPower": { + "NAME": "Pluck", + "DESCRIPTIONS": [ + "The next time you are #yDrained [REMOVE_SPACE], add a #yPlume #yJab to your hand.", + "The next time you are #yDrained [REMOVE_SPACE], gain #b", + " copies of #yPlume #yJab [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 [REMOVE_SPACE].", + "The next #b", + " times you play a non-Attack card this turn, draw a card and gain #b", + " #yBlock [REMOVE_SPACE]." + ] + }, + "awakened:AphoticFountPower": { + "NAME": "Aphotic Fount", + "DESCRIPTIONS": [ + "Whenever you play #yCryostasis [REMOVE_SPACE], gain #b", + " #yPlated #yArmor [REMOVE_SPACE]." + ] + }, + "awakened:GrimoirePower": { + "NAME": "Storm Ruler", + "DESCRIPTIONS": [ + "Your #yThunderbolts deal #b", + " more damage." + ] + }, + "awakened:SpellshieldPower": { + "NAME": "Spellshield", + "DESCRIPTIONS": [ + "Whenever you #yRetain a card, gain #b", + " #yBlock." + ] + }, + "awakened:DaggerstormPower": { + "NAME": "Daggerstorm", + "DESCRIPTIONS": [ + "Whenever you create a card, deal #b", + " damage to a random enemy." + ] + }, + "awakened:SchemePower": { + "NAME": "Scheme", + "DESCRIPTIONS": [ + "The next #b", + " cards played this turn that cost #b1 or less will be played twice.", + "The next card played this turn that costs #b1 or less will be played twice." + ] + }, + "awakened:FourthDimensionPower": { + "NAME": "4th Dimension", + "DESCRIPTIONS": [ + "At the start of your next #b", + " turn, ", + " turns, ", + "play and #yExhaust a copy of ", + " [REMOVE_SPACE]." + ] + } +} \ 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 0000000000..f31ad275e5 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/eng/RelicStrings.json @@ -0,0 +1,160 @@ +{ + "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 card with a #yawakened:Chant effect, gain #b", + " #yBlock [REMOVE_SPACE], even if it is not active." + ] + }, + "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 you create a #yVoid [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": [ + "#yThunderbolt and #yDarkleech target 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 combat, 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], and 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." + ] + }, + "awakened:AwakenedUrn": { + "NAME": "Bird-Faced Vase", + "FLAVOR": "This urn shows the crow god Mazaleth looking mischievous.", + "DESCRIPTIONS": [ + "The first #b4 times you play a #yPower card each combat, heal #b", + " HP." + ] + }, + "awakened:NerfedMummifiedHand": { + "NAME": "Dessicated Hand", + "FLAVOR": "It demands true power, resisting your occultic magicks.", + "DESCRIPTIONS": [ + "Whenever you play a #yPower card that #rISN'T #yCeremony [REMOVE_SPACE], a random card in your hand costs #b0 that turn." + ] + } +} 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 0000000000..9e26dfeeb6 --- /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 0000000000..b40c0bc139 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/eng/UIStrings.json @@ -0,0 +1,46 @@ +{ + "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", + "Awakening", + "After playing #b7 #yPowers, become #yAwakened [REMOVE_SPACE]! NL NL While #yAwakened [REMOVE_SPACE], #yConjured Spell cards are #yUpgraded [REMOVE_SPACE], drastically increasing their efficacy.", + "After playing #b7 #yPowers, become #yAwakened [REMOVE_SPACE]! NL NL While #yAwakened [REMOVE_SPACE], #yConjured Spell cards are #yUpgraded [REMOVE_SPACE], drastically increasing their efficacy." + ] + }, + "awakened:FullSpellbook": { + "TEXT": [ + "My Spellbook is full!" + ] + }, + "awakened:FourthDimensionDupeAttempt": { + "TEXT": [ + "@Doing@ @that@ @would@ @break@ @the@ @space-time@ @continuum!!!@" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/fra/CardStrings.json b/src/main/resources/awakenedResources/localization/fra/CardStrings.json new file mode 100644 index 0000000000..c96fce3e05 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/fra/CardStrings.json @@ -0,0 +1,410 @@ +{ + "awakened:Thunderbolt": { + "NAME": "Tonnerre", + "DESCRIPTION": "Retenue. NL Infligez !D! dégâts. NL Épuisement." + }, + "awakened:BurningStudy": { + "NAME": "Étude brûlante", + "DESCRIPTION": "Retenue. NL Gagnez !M! de Force. NL Appliquez !awakened:m2! de Faiblesse à TOUS les ennemis. NL Épuisement." + }, + "awakened:Cryostasis": { + "NAME": "Cryostase", + "DESCRIPTION": "Retenue. NL Gagnez !B! d'Armure. NL Épuisement." + }, + "awakened:Darkleech": { + "NAME": "Drain obscur", + "DESCRIPTION": "Retenue. NL Appliquez !M! de Vulnérabilité. NL Appliquez !awakened:m2! de awakened:Manabrûlure. NL Épuisement." + }, + "awakened:DeathCoil": { + "NAME": "Spirale mortelle", + "DESCRIPTION": "Appliquez !M! de awakened:Manabrûlure. NL Au prochain tour, perdez [E]." + }, + "awakened:ESPSpell": { + "NAME": "Extrasenseur", + "DESCRIPTION": "Retenue. NL Piochez !M! carte. NL Épuisement.", + "UPGRADE_DESCRIPTION": "Retenue. NL Piochez !M! cartes. NL Épuisement." + }, + "awakened:Strike": { + "NAME": "Frappe", + "DESCRIPTION": "Infligez !D! dégâts." + }, + "awakened:Defend": { + "NAME": "Défense", + "DESCRIPTION": "Gagnez !B! d'Armure." + }, + "awakened:Brainshock": { + "NAME": "Choc cérébral", + "DESCRIPTION": "Infligez !D! dégâts. NL Ajoutez un *Néant dans votre pile de défausse." + }, + "awakened:Intensify": { + "NAME": "Intensification", + "DESCRIPTION": "awakened:Conjurez. NL Ce tour, les Sorts coûtent 0 et vous ne pouvez plus awakened:Conjurer à nouveau.", + "UPGRADE_DESCRIPTION": "Retenue. awakened:Conjurez. NL Ce tour, les Sorts coûtent 0 et vous ne pouvez plus awakened:Conjurer à nouveau." + }, + "awakened:DarkEcho": { + "NAME": "Écho obscur", + "DESCRIPTION": "À la fin de votre tour, infligez !M! dégâts à TOUS les ennemis, augmenté par la Force." + }, + "awakened:AwakenedForm": { + "NAME": "Forme Éveillée", + "DESCRIPTION": "Gagnez !M! de awakened:Curiosité. NL Gagnez !awakened:m2! de Rituel.", + "UPGRADE_DESCRIPTION": "*Éveillez-vous immédiatement. NL Gagnez !M! de awakened:Curiosité. NL Gagnez !awakened:m2! de Rituel." + }, + "awakened:Spellbinder": { + "NAME": "Lieur de sorts", + "DESCRIPTION": "Au début de votre tour, awakened:Conjurez." + }, + "awakened:Ceremony": { + "NAME": "Cérémonie", + "DESCRIPTION":"Retenue. NL Gagnez !M! de Force." + }, + "awakened:TalonRake": { + "NAME": "Griffes faucheuses", + "DESCRIPTION": "Infligez !D! dégâts deux fois. NL awakened:Conjurez." + }, + "awakened:Hymn": { + "NAME": "Hymne", + "DESCRIPTION": "Gagnez !B! d'Armure. NL Obtenez une *Cérémonie. NL Au prochain tour, perdez [E]." + }, + "awakened:Psalm": { + "NAME": "Psaume", + "DESCRIPTION": "Infligez !D! dégâts et appliquez !M! de Faiblesse à TOUS les ennemis." + }, + "awakened:DemonGlyph": { + "NAME": "Glyphe démoniaque", + "DESCRIPTION": "Gagnez !M! de Force et de Dextérité. NL Lorsque vous vous *Éveillez, gagnez-en !awakened:m2! de plus." + }, + "awakened:TakeFlight": { + "NAME": "Prendre son envol", + "DESCRIPTION": "Gagnez !B! d'Armure. NL awakened:Chant: L'Armure n'est pas retirée au début de votre prochain tour." + }, + "awakened:FeatherVeil": { + "NAME": "Voile plume", + "DESCRIPTION": "Gagnez !B! d'Armure. NL Perdez !M! de Force." + }, + "awakened:Peck": { + "NAME": "Picore", + "DESCRIPTION": "Gagnez !B! d'Armure. NL Infligez !D! dégâts. NL Piochez !M! carte.", + "UPGRADE_DESCRIPTION": "Gagnez !B! d'Armure. NL Infligez !D! dégâts. NL Piochez !M! cartes." + }, + "awakened:Extension": { + "NAME": "Extension", + "DESCRIPTION": "Infligez !D! dégâts. NL Lorsque vous jouez un Pouvoir, remettez cette carte de la défausse vers votre main." + }, + "awakened:Pluck": { + "NAME": "Picore", + "DESCRIPTION": "Infligez !D! dégâts à TOUS les ennemis. NL Obtenez un *Jab *Plume." + }, + "awakened:FlareShot": { + "NAME": "Éclat de Plumes", + "DESCRIPTION": "Infligez !D! dégâts. NL awakened:Chant: Au prochain tour, piochez !M! carte supplémentaire." + }, + "awakened:ClarionCall": { + "NAME": "Appel du clairon", + "DESCRIPTION": "Infligez !D! dégâts. NL La prochaine fois que vous êtes awakened:Drainé, gagnez [E]." + }, + "awakened:Recitation": { + "NAME": "Récitation", + "DESCRIPTION": "Infligez !D! dégâts. NL awakened:Chant: Infligez !D! dégâts à nouveau." + }, + "awakened:ChosenVerse": { + "NAME": "Verset choisi", + "DESCRIPTION": "Les !M! prochaines fois que vous jouez une carte n'étant pas une Attaque ce tour, piochez une carte et gagnez !B! d'Armure." + }, + "awakened:SoulStrike": { + "NAME": "Frappe de l'âme", + "DESCRIPTION": "Infligez !D! dégâts !M! fois. NL Coûte 1 [E] de moins pour chaque Pouvoir joué ce tour." + }, + "awakened:Altar": { + "NAME": "Autel", + "DESCRIPTION": "Gagnez !B! d'Armure. NL Épuisez une carte. NL awakened:Conjurez." + }, + "awakened:Envision": { + "NAME": "Envisagement", + "DESCRIPTION": "Gagnez !B! d'Armure. NL awakened:Conjurez et mettez le Sort en haut de votre Pioche." + }, + "awakened:Thaumaturgy": { + "NAME": "Thaumaturgie", + "DESCRIPTION": "Gagnez !awakened:m2! de Dextérité. NL Au début de vos !M! prochains tours, ajoutez une *Cérémonie dans votre main." + }, + "awakened:WaveOfMiasma": { + "NAME": "Vague de Miasmes", + "DESCRIPTION": "Gagnez !B! d'Armure. Appliquez !awakened:m2! de awakened:Manabrûlure à TOUS les ennemis. NL Épuisement." + }, + "awakened:SludgeBomb": { + "NAME": "Bomb-beurk", + "DESCRIPTION": "Requiert un *Néant Épuisé qui sera effacé. NL Infligez !D! dégâts à TOUS les ennemis.", + "EXTENDED_DESCRIPTION": [ + "Je n'ai pas de Néant Épuisé." + ] + }, + "awakened:KnifesEdge": { + "NAME": "Fil du Rasoir", + "DESCRIPTION": "Gagnez !awakened:m2! de Force. NL Ajoutez !M! *Néants dans votre défausse." + }, + "awakened:FourthDimension": { + "NAME": "4ème Dimension", + "DESCRIPTION": "Épuisez une carte. NL Mélangez !M! copies de celle-ci dans votre pioche. NL Épuisement.", + "EXTENDED_DESCRIPTION": [ + "Choisissez une carte à Épuiser pour 4ème Dimension." + ] + }, + "awakened:RavenStrike": { + "NAME": "Frappe du corbeau", + "DESCRIPTION": "Infligez !D! dégâts. NL awakened:Chant: Jouez la carte du haut de votre pioche." + }, + "awakened:Unleash": { + "NAME": "Déchaînement", + "DESCRIPTION": "Infligez !D! dégâts. NL Inflige !M! dégâts supplémentaires pour chaque autre carte dans votre main." + }, + "awakened:DesperatePrayer": { + "NAME": "Prière désespérée", + "DESCRIPTION": "Obtenez !M! cartes *Cérémonie. NL Épuisement." + }, + "awakened:BirdsEye": { + "NAME": "Œil de l'Oizo", + "DESCRIPTION": "Choisissez un Sort à awakened:Conjurer.", + "UPGRADE_DESCRIPTION": "Rafraîchissez vos Sorts. Choisissez un Sort à awakened:Conjurer." + }, + "awakened:Initiation": { + "NAME": "Initiation", + "DESCRIPTION": "Gagnez !B! d'Armure. NL Obtenez une *Cérémonie." + }, + "awakened:Ensorcelate": { + "NAME": "Ensorcelage", + "DESCRIPTION": "Gagnez !B! d'Armure. NL Le prochain Pouvoir que vous jouez coûte 0." + }, + "awakened:Skyward": { + "NAME": "Vers les cieux", + "DESCRIPTION": "Gagnez !B! d'Armure. NL Piochez !M! carte. NL Coûte 1 [E] de moins pour chaque Pouvoir joué ce combat." + }, + "awakened:RisingChant": { + "NAME": "Refrain ascendant", + "DESCRIPTION": "Éthérée. NL Le premier effet awakened:Chant que vous activez chaque tour est déclenché deux fois.", + "UPGRADE_DESCRIPTION": "Le premier effet awakened:Chant que vous activez chaque tour est déclenché deux fois." + }, + "awakened:FeatherWhirl": { + "NAME": "Ouragan de plumes", + "DESCRIPTION": "Obtenez X copies de *Jab *Plume.", + "UPGRADE_DESCRIPTION": "Obtenez X+1 copies de *Jab *Plume." + }, + "awakened:Murder": { + "NAME": "Meurtre", + "DESCRIPTION": "Infligez !D! dégâts à un ennemi aléatoire !M! fois.", + "UPGRADE_DESCRIPTION": "Retenue. Infligez !D! dégâts à un ennemi aléatoire !M! fois." + }, + "awakened:Nihil": { + "NAME": "Nihil", + "DESCRIPTION": "Appliquez !M! de awakened:Manabrûlure. NL awakened:Chant: TOUS les ennemis perdent autant de PV que leur awakened:Manabrûlure." + }, + "awakened:MoonlitVision": { + "NAME": "Vision lunaire", + "DESCRIPTION": "La première fois que vous jouez un Sort chaque tour, gagnez [E]." + }, + "awakened:Rebirth": { + "NAME": "Renaissance", + "DESCRIPTION": "Lorsque vous auriez dû mourir ou à la fin du combat, supprimez tous les malus, *Éveillez-vous, et soignez-vous de !M! PV à la place." + }, + "awakened:Archmagus": { + "NAME": "Archimage", + "DESCRIPTION": "Le premier Sort que vous jouez chaque tour est joué deux fois." + }, + "awakened:Planeswalk": { + "NAME": "Saut planaire", + "DESCRIPTION": "Gagnez [E] [E] . NL Mélangez un *Néant dans votre pioche.", + "UPGRADE_DESCRIPTION": "Gagnez [E] [E] [E] . NL Mélangez un *Néant dans votre pioche." + }, + "awakened:Spew": { + "NAME": "Crachat", + "DESCRIPTION": "Infligez !D! dégâts. NL Les [E] dépensées sur cette carte comptent comme étant awakened:Drainé." + }, + "awakened:DarknessFalls": { + "NAME": "Nuit tombante", + "DESCRIPTION": "Lorsque vous êtes awakened:Drainé, gagnez !M! d'Armure et !awakened:m2! de Force.", + "UPGRADE_DESCRIPTION": "Inné. NL Lorsque vous êtes awakened:Drainé, gagnez !M! d'Armure et !awakened:m2! de Force." + }, + "awakened:Eventide": { + "NAME": "Crépuscule", + "DESCRIPTION": "Infligez !D! dégâts à un ennemi aléatoire deux fois. NL Ajoutez un *Néant en haut de votre pioche." + }, + "awakened:EclipseEmbrace": { + "NAME": "Étreinte de l’Éclipse", + "DESCRIPTION": "Lorsque vous Épuisez un *Néant, gagnez [E] et piochez une carte au prochain tour." + }, + "awakened:Clutch": { + "NAME": "Emprise", + "DESCRIPTION": "Infligez !D! dégâts. NL Piochez une carte coûtant 0." + }, + "awakened:Gloomguard": { + "NAME": "Garde-ténèbres", + "DESCRIPTION": "Gagnez !B! d'Armure. NL Coûte 0 si un *Néant est en main." + }, + "awakened:Carrionmaker": { + "NAME": "Charognard", + "DESCRIPTION": "Infligez !D! dégâts à un ennemi aléatoire. NL Répétez ceci pour chaque Sort joué ce tour.", + "EXTENDED_DESCRIPTION": [ + " NL (", + " Sort joué.)", + " Sorts joués.)" + ] + }, + "awakened:MirePit": { + "NAME": "Fosse marécageuse", + "DESCRIPTION": "TOUS les ennemis perdent !M! de Force ce tour. NL Au prochain tour, perdez [E]. NL Épuisement." + }, + "awakened:SingularityShield": { + "NAME": "Bouclier singularité", + "DESCRIPTION": "Gagnez !B! d'Armure. NL Au prochain tour, gagnez !B! d'Armure et perdez [E]." + }, + "awakened:Dejection": { + "NAME": "Découragement", + "DESCRIPTION": "Infligez !D! dégâts. NL Épuisez une carte. Si c'était un Sort, gagnez une *Cérémonie." + }, + "awakened:BloodRite": { + "NAME": "Rite du Sang", + "DESCRIPTION": "Infligez !D! dégâts. NL Obtenez une *Cérémonie." + }, + "awakened:SongOfSorrow": { + "NAME": "Chanson du chagrin", + "DESCRIPTION": "Lorsque vous créez un *Néant, TOUS les ennemis perdent !M! PV." + }, + "awakened:MysticOrder": { + "NAME": "Ordre mystique", + "DESCRIPTION": "Piochez !M! cartes. NL awakened:Conjurez." + }, + "awakened:ProfaneStrike": { + "NAME": "Frappe profane", + "DESCRIPTION": "Infligez !D! dégâts. NL Mettez une carte de votre main vers le haut de votre pioche." + }, + "awakened:Victuals": { + "NAME": "Provisions", + "DESCRIPTION": "awakened:Chant: Gagnez [E] [E] . NL Épuisement.", + "UPGRADE_DESCRIPTION": "awakened:Chant: Gagnez [E] [E] [E] . NL Épuisement." + }, + "awakened:Gather": { + "NAME": "Rassemblement", + "DESCRIPTION": "Gagnez !B! d'Armure. NL awakened:Chant: Mettez une carte de votre défausse vers votre main." + }, + "awakened:TheTower": { + "NAME": "La Tour", + "DESCRIPTION": "Infligez !D! dégâts à TOUS les ennemis. NL Inflige !M! dégâts supplémentaires pour chaque carte créée ce combat." + }, + "awakened:ArcaneNesting": { + "NAME": "Nid arcanique", + "DESCRIPTION": "Injouable. NL Lorsque vous jouez un Pouvoir avec cette carte en main, gagnez !B! d'Armure.", + "EXTENDED_DESCRIPTION": [ + "Je dois jouer des Pouvoirs pour gagner de l'Armure de ceci." + ] + }, + "awakened:MiddenHeap": { + "NAME": "Tas d’ordures", + "DESCRIPTION": "Gagnez !B! d'Armure. NL Mettez !M! carte Statut ou Malédiction de votre pioche ou pile de défausse dans votre main.", + "UPGRADE_DESCRIPTION": "Gagnez !B! d'Armure. NL Mettez !M! cartes Statut ou Malédiction de votre pioche ou pile de défausse dans votre main.", + "EXTENDED_DESCRIPTION": [ + "Sélectionnez une carte à mettre dans votre main.", + "Sélectionnez des cartes à mettre dans votre main." + ] + }, + "awakened:Caw": { + "NAME": "Caw", + "DESCRIPTION": "Infligez !D! dégâts. NL awakened:Chant: Augmentez les dégâts de toutes les cartes *Caw de !M! ce combat." + }, + "awakened:Scour": { + "NAME": "Ratissage", + "DESCRIPTION": "Infligez !D! dégâts. NL Appliquez !M! de awakened:Manabrûlure." + }, + "awakened:Manastorm": { + "NAME": "Manatempête", + "DESCRIPTION": "Infligez !D! dégâts à TOUS les ennemis. NL awakened:Conjurez deux fois." + }, + "awakened:StormRuler": { + "NAME": "Maître des tempêtes", + "DESCRIPTION": "awakened:Conjurez. NL Les *Tonnerres infligent !M! dégâts supplémentaires." + }, + "awakened:AphoticFount": { + "NAME": "Source aphotique", + "DESCRIPTION": "awakened:Conjurez. NL Lorsque vous jouez *Cryostase, gagnez !M! *d'Armure expansioncontent:Plaquée." + }, + "awakened:Bloodthirst": { + "NAME": "Soif de sang", + "DESCRIPTION": "Infligez !D! dégâts. NL Si Fatal, obtenez une awakened:Potion_de_Pouvoir et Épuisez cette carte." + }, + "awakened:Procession": { + "NAME": "Cortège", + "DESCRIPTION": "Jouez une carte de votre pioche et mélangez autant de *Néants que son coût. NL Épuisement." + }, + "awakened:SplitWide": { + "NAME": "Flagellation", + "DESCRIPTION": "Infligez !D! dégâts. NL Lorsque vous attaquez cet ennemi, gagnez !M! de Force Temporaire. NL Épuisement." + }, + "awakened:Spellshield": { + "NAME": "Bouclier sortilègeux", + "DESCRIPTION": "Lorsque vous Retenez une carte, gagnez !M! d'Armure." + }, + "awakened:Siphon": { + "NAME": "Siphon", + "DESCRIPTION": "Infligez !D! dégâts. NL awakened:Chant: gremlin:Volez !M! de Force ce tour." + }, + "awakened:PlumeJab": { + "NAME": "Jab Plume", + "DESCRIPTION": "Retenue. NL Infligez !D! dégâts à un ennemi aléatoire deux fois. NL Épuisement." + }, + "awakened:Primacy": { + "NAME": "Primauté", + "DESCRIPTION": "La première fois que vous gagnez de la Force à chaque tour, piochez une carte.", + "UPGRADE_DESCRIPTION": "Les !M! premières fois que vous gagnez de la Force à chaque tour, piochez une carte." + }, + "awakened:Daggerstorm": { + "NAME": "Tempête de dagues", + "DESCRIPTION": "Lorsque vous créez une carte, infligez !M! dégâts à un ennemi aléatoire." + }, + "awakened:PackRat": { + "NAME": "Rat sac à dos", + "DESCRIPTION": "Infligez !D! dégâts et gagnez !B! d'Armure deux fois. NL Obtenez une potion aléatoire. NL Épuisement." + }, + "awakened:Mantis": { + "NAME": "Mante", + "DESCRIPTION": "Gagnez !M! de Force. NL Ajoutez un *Jab *Plume dans votre main." + }, + "awakened:ManaShield": { + "NAME": "Bouclier Mana", + "DESCRIPTION": "Gagnez !B! d'Armure. NL awakened:Conjurez. NL Réduisez le coût d'un Sort aléatoire en main de 1." + }, + "awakened:Crusher": { + "NAME": "Broyeur", + "DESCRIPTION": "Retenue. NL Infligez !D! dégâts. NL Lorsqu'une carte est créée, réduisez le coût de cette carte de 1 jusqu'à ce qu'elle soit jouée." + }, + "awakened:Minniegun": { + "NAME": "Minniegun", + "DESCRIPTION": "Infligez !D! dégâts !M! fois. NL Mélangez un *Néant dans votre pioche." + }, + "awakened:SignInBlood": { + "NAME": "Signature de sang", + "DESCRIPTION": "Prenez !awakened:m2! dégâts. NL Piochez !M! cartes. NL Gagnez !awakened:m2! de Force. NL Épuisement." + }, + "awakened:SpreadingSpores": { + "NAME": "Spores disséminées", + "DESCRIPTION": "Éthérée. NL Gagnez !M! d'Épines. NL Mélangez une copie de ceci dans votre pioche." + }, + "awakened:Scheme": { + "NAME": "Schéma", + "DESCRIPTION": "La prochaine carte que vous jouez ce tour coûtant 1 [E] ou moins sera jouée deux fois.", + "UPGRADE_DESCRIPTION": "Les !M! prochaines cartes que vous jouez ce tour coûtant 1 [E] ou moins seront jouées deux fois." + }, + "awakened:TheEncyclopedia": { + "NAME": "L'Encyclopédie", + "DESCRIPTION": "Choisissez 2 cartes parmi !M! aléatoires à ajouter dans votre main. Elles coûtent 2 [E] de moins. NL Épuisement.", + "EXTENDED_DESCRIPTION": [ + "Choisissez 2 cartes à ajouter dans votre main." + ] + }, + "awakened:RealityRift": { + "NAME": "Fracture de la Réalité", + "DESCRIPTION": "Choisissez !awakened:m2! cartes puissantes d'une *AUTRE *DIMENSION parmi !M! à obtenir. NL Ajoutez 2 *Néants dans votre défausse. Épuisement." + }, + "awakened:Inscribe": { + "NAME": "Gravure", + "DESCRIPTION": "Choisissez un Sort. Ajoutez-en !M! copies dans le Livre de Sorts pour le reste du combat.", + "UPGRADE_DESCRIPTION": "awakened:Conjurez. NL Choisissez un Sort. Ajoutez-en !M! copies dans le Livre de Sorts pour le reste du combat." + } +} diff --git a/src/main/resources/awakenedResources/localization/fra/CharacterStrings.json b/src/main/resources/awakenedResources/localization/fra/CharacterStrings.json new file mode 100644 index 0000000000..4cdfa51321 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/fra/CharacterStrings.json @@ -0,0 +1,13 @@ +{ + "awakened:awakenedOne": { + "NAMES": [ + "L'Éveillé", + "l'Éveillé" + ], + "TEXT": [ + "Le triomphe du Culte et l'immortel sorcier noir de l'Au-delà. NL Possède un pouvoir sur le Vide et tous les autres éléments.", + "NL Vous Conjurez vos plus grands sorts...", + "Naviguant dans une rue non éclairée, vous rencontrez plusieures figures encapuchonnées au milieu d'un rituel. Alors que vous vous approchez, ils se tournent vers vous en unisson. L'un des plus grands montre ses crocs et étire sa longue et pâle main vers vous. NL ~\"Rejoignez~ ~nous~ ~être~ ~éveillé,~ ~et~ ~ressentez~ ~la~ ~chaleur~ ~de~ ~la~ ~Tour.\"~" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/fra/EventStrings.json b/src/main/resources/awakenedResources/localization/fra/EventStrings.json new file mode 100644 index 0000000000..ef2b8db160 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/fra/EventStrings.json @@ -0,0 +1,88 @@ +{ + "awakened:Nest": { + "NAME": "Le Nid", + "DESCRIPTIONS": [ + "Vous l'avez trouvé. Vous êtes enfin revenu. NL #pLe#pNid, le site de votre ascension vers #b~l'avatar~ #b~vivant~ #b~d'un~ #b~dieu.~ Dès que vous entrez, vous êtes entouré de Cultistes, @acclamant@ et vous @applaudissant@ ! NL Ils savent bien que votre arrivée s'accompagne souvent d'une #r@dîme....@", + "Les combats à venir seront difficiles, et c'est le moment idéal pour trouver une arme unique à ajouter à votre arsenal. NL NL #r@...Pas@ #r@de@ #r@dagues@ #r@à@ #r@l'horizon...@ NL NL Vous accomplissez un rituel puissant pour invoquer une #yrelique extrêmement puissante, mais réaliser ce rituel vous a coûté cher. NL NL Drainé, vous quittez le Nid, espérant que votre nouvelle arme sèmera le chaos sur son passage.", + "De plus en plus de membres du groupe s'alignent pour vous apporter leurs offrandes. NL NL La plupart sont @des@ @déchets@ @sans@ @valeur,@ mais l'un d'eux apporte une offrande particulièrement intéressante : un #bélixir #bpuissant qui pourrait vous être très utile au combat. NL NL Peu après, vous quittez le Nid et poursuivez votre descente dans la Tour.", + "Les cultistes vous entourent encore plus que d'habitude en voyant leur précieuse statue leur revenir. NL Comme c'est un événement à célébrer, vous êtes comblé de cadeaux et d'Âmes ! NL Une fois les célébrations terminées et après avoir quitté le Nid, vous réalisez que vous auriez pu profiter de ce temps pour chercher une arme précieuse... NL NL Il est trop tard maintenant, mais vous continuez quand même votre chemin.", + "#r@\"DIEU@ #r@OISEAU@ #r@EST@ #r@REVENU!!\"@ NL #b~\"CAW~ #b~CAW~ #b~CAAAAAWWW!\"~ NL La statue que vous avez décidé de ne pas détruire s'est avérée très utile aujourd'hui.", + "", + "", + "Les Cultistes vous entourent encore plus que d'habitude en voyant leur précieuse statue leur revenir. NL Tel un motif de réjouissance, vous êtes comblé de cadeaux et d'Âmes ! NL Une fois les célébrations terminées et après avoir quitté le Nid, vous réalisez que vous auriez pu profiter de ce temps pour chercher une arme précieuse... NL NL Il est trop tard maintenant, mais vous continuez quand même votre chemin.", + "Vous vous précipitez vers la boîte de dons et le trésor, avec l'intention d'utiliser pleinement la pièce et de trouver également une #yRelique. NL NL Les pièces, payées au prix du sang, peuvent remplacer avantageusement les #bÂmes. NL NL La #yRelique, bien sûr, s'avérera également utile dans les épreuves à venir. NL NL Vous empochez les pièces trempées de #rsang de la boîte de dons, avec l'intention de les utiliser pleinement, mais vous remarquez alors que les caisses sont presque vides... NL NL NL ~...~", + "Avez-vous été... #r@volé?@ Le Nid, #pcambriolé ? NL NL Bien sûr que non, il n'y a ~aucune~ ~chance~ que cela arrive. NL NL NL Ce serait idiot, rien que d'y penser. NL NL NL ~...n'est-ce~ ~pas~ ~?~ NL NL NL Vous mettez de côté vos #y~doutes~ #y~tenaces~ et vous éloignez du Nid." + ], + "OPTIONS": [ + "[Rendre la statue] #rPerdez #rla #rStatue #rAilée #rBrisée. #gObtenez #gplusieures #grécompenses.", + "[Verrouillé] Reqiert la Statue Ailée Brisée.", + "[Collecter les offrandes] #gObtenez #gune #gPotion #gde #gCuriosité.", + "[Invoquer une arme] #gObtenez #gune #gRelique #gspéciale. #rPerdez #r", + " #rPV #rMax.", + "[Boîte de dons] #gGagnez #g", + " #gd'Or #get #gune #gRelique #gCommune. #rDevenez #rMaudit #r- #rDoute.", + "[Quitter]", + "[Continuer]", + "[Soyez loué !] #gGagnez #gdes #grécompenses pour avoir rendu la #gStatue #gAilée #gBrisée.", + "[Continuer] - #rDevenez #rMaudit #r- #rDoute." + ] + }, + "awakened:WingStatueAwakened": { + "NAME": "Statue ailée", + "DESCRIPTIONS": [ + "Parmi les pierres et les rochers, vous remarquez une grande statue bleue complexe représentant Mazaleth, le dieu des corbeaux. NL NL Vous ressentez soudainement une colère intense et l'envie de la détruire. NL NL Cependant, vous savez que cela attirerait la colère de votre bienfaiteur.", + "Vous décidez que cela ne vaut pas la peine de risquer de détruire la statue et décidez plutôt de l'emporter avec vous. NL Vous peinez temporairement sous son poids, mais vous vous en emparez rapidement et continuez votre chemin.", + "Vous vous jetez sur la statue et la réduisez en morceaux ! NL Dans les décombres, vous trouvez un fragment pointu de la statue qui possède encore une magie résiduelle. NL Vous partez, sentant une #pénergie #psombre s'infiltrer dans votre sang.", + "You walk past and continue onward.", + "CA...Caw?! Cadeau pour DIEU OISEAU ?", + "CA-CAAAW!!", + "Un échange ? Une offre équitable...", + "Le culte sera satisfait." + ], + "OPTIONS": [ + "[Détruire] #gObtenez #gFragment #gAiguisé. #rDevenez #rMaudit #rDeux #rFois #r- #rHémophilie.", + "[Collecter] #rPerdez #r", + "[Quitter]", + " #rPV. #gObtenez #gla #gStatue #gAilée #gBrisée." + ] + }, + "awakened:BackToBasics": { + "NAME": "", + "DESCRIPTIONS": [ + "Rien ne compte plus que la lutte pour la vie. Le présent." + ], + "OPTIONS": [ + "[Désespoir] #gVos #gFrappes #get #gDéfenses #gdeviennent #gDrainantes.", + "[Verrouillé] Requiert une Frappe ou une Défense." + ] + }, + "awakened:AbyssEvent": { + "NAME": "Depuis les Abysses", + "DESCRIPTIONS": [ + "Alors que vous vous promenez dans la ville, vous êtes soudainement envahi par un sentiment inexplicable...comme si la #préalité elle-même commençait à se @défaire@ sous vos yeux. NL Vos sens vous faisant défaut, vous pouvez voir un #pgrimoire devant vous, et une ~voix~ ~d'un~ ~autre~ ~monde~ vous parlant... NL \n\n\"ENFANT ÉVEILLÉ. VOYAGEUR DES PLANS INFINIS. NOUS AVONS BEAUCOUP À DISCUTER. PRENDS MA MAIN, ET JE TE GUIDERAI VERS LA CONNAISSANCE QUE TU RECHERCHES... VERS DES MONDES INCONNUS DE MONSTRES, DE MACHINES ET DE MAGIE AU-DELÀ DE LA COMPRÉHENSION DE CE ROYAUME.", + "\"BIEN. NOTRE ALLIANCE SERA PUISSANTE.\"\n\n NL Alors que ce sentiment de #pmalaise #psurnaturel persiste, avec ce livre entre les mains, vous avez l'impression qu'un monde infini de possibilités s'ouvre à vous...", + "Vous parvenez à sortir de votre transe, déployer vos ailes et laisser derrière vous l'étrange #pgrimoire." + ], + "OPTIONS": [ + "[Accéder] Obtenez #gFracture #gde #gla #gréalité. #rDevenez #rMaudit - #rAgé.", + "[Quitter].", + "[Quitter]" + ] + }, + "awakened:CultTalk": { + "NAME": "TalkStrings", + "DESCRIPTIONS": [ + "@MAÎTRE!@ @PARDONNEZ-MOI!@", + "@MON@ @TEMPS@ @EST@ @VENU!@", + "@CAWWWWWW!@ @CAW@ @CAW@ @CAW@ @CAWWWWWW!!!!@", + + "@MON@ @SANG@ @POUR@ @LE@ @DIEU@ @OISEAU!@", + "@JE@ @NE@ @SUIS@ @PAS@ @DIGNE!@", + "@JE@ @MEURS@ @POUR@ @QUE@ @LE@ @CLAN@ @PROSPÈRE!!!@", + + "~Que~ ~ceci~ ~serve~ ~à~ ~ma~ ~rédemption…~", + "~...~", + "~Vous~ ~ne~ ~me~ ~laissez~ ~pas~ ~le~ ~choix…~" + ] + } +} diff --git a/src/main/resources/awakenedResources/localization/fra/KeywordStrings.json b/src/main/resources/awakenedResources/localization/fra/KeywordStrings.json new file mode 100644 index 0000000000..8e5174f68b --- /dev/null +++ b/src/main/resources/awakenedResources/localization/fra/KeywordStrings.json @@ -0,0 +1,71 @@ +[ + { + "PROPER_NAME": "Potion de Pouvoir", + "NAMES": [ + "Power Potion", + "Power_Potion", + "power_potion", + "powerpotion", + "Potion de Pouvoir", + "Potion_de_Pouvoir", + "potion_de_pouvoir", + "potiondepouvoir" + ], + "DESCRIPTION": "#yPotion [REMOVE_SPACE]: Choisissez #b1 #yPouvoir aléatoire parmi #b3 à mettre dans votre main, il coûte #b0 ce tour." + }, + { + "PROPER_NAME": "Conjuration", + "NAMES": [ + "conjure", + "conjured", + "awaken", + "conjurez", + "conjurer", + "conjurez-le", + "conjurez-la" + ], + "DESCRIPTION": "Créez la prochaine carte du Livre de Sorts dans votre main." + }, + { + "PROPER_NAME": "Chant", + "NAMES": [ + "chant" + ], + "DESCRIPTION": "Les cartes avec des effets #yChant deviennent plus puissantes pour le reste du combat si la dernière carte jouée était un #yPouvoir [REMOVE_SPACE]." + }, + { + "PROPER_NAME": "Maléfice", + "NAMES": [ + "hex", + "hexxed", + "hexx", + "maléfice" + ], + "DESCRIPTION": "Les créatures avec #yMaléfice subissent #b20% de dégâts supplémentaires de la prochaine Attaque pour chaque pile. Tout le #yMaléfice est retiré après avoir été attaqué." + }, + { + "PROPER_NAME": "Drainé", + "NAMES": [ + "drain", + "drained", + "drainé" + ], + "DESCRIPTION": "N'importe quel effet vous faisant perdre des [E] , même si vous n'en aviez pas à perdre. (N'inclut pas les [E] dépensées en jouant des cartes.)" + }, + { + "PROPER_NAME": "Manabrûlure", + "NAMES": [ + "manaburn", + "manabrûlure" + ], + "DESCRIPTION": "Lorsque vous perdez des [E] , même si vous n'en aviez pas à perdre, perd des PV égaux à son #yManabrûle [REMOVE_SPACE]. (N'inclut pas les [E] dépensées en jouant des cartes.)" + }, + { + "PROPER_NAME": "Curiosité", + "NAMES": [ + "curiosity", + "curiosité" + ], + "DESCRIPTION": "Lorsque vous jouez une carte #yPouvoir, gagnez #b1 de #yForce [REMOVE_SPACE]." + } +] \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/fra/MonsterStrings.json b/src/main/resources/awakenedResources/localization/fra/MonsterStrings.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/fra/MonsterStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/fra/OrbStrings.json b/src/main/resources/awakenedResources/localization/fra/OrbStrings.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/fra/OrbStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/fra/PotionStrings.json b/src/main/resources/awakenedResources/localization/fra/PotionStrings.json new file mode 100644 index 0000000000..fe43db3087 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/fra/PotionStrings.json @@ -0,0 +1,30 @@ +{ + "awakened:PhaseSkip": { + "NAME": "Boisson de l'Ascendant", + "DESCRIPTIONS": [ + "#yÉveillez-vous immédiatement et #yAméliorez toutes vos cartes pour le reste du combat." + ] + }, + "awakened:CultistsDelight": { + "NAME": "Délice du Cultiste", + "DESCRIPTIONS": [ + "Lorsque vous jouez une carte #yPouvoir ce combat, gagnez #b", + " de #yForce [REMOVE_SPACE]. Ajoutez un #yPouvoir aléatoire qui coûte #b0 dans votre main pour ce tour." + ] + }, + "awakened:SacramentalWine": { + "NAME": "Vin de messe", + "DESCRIPTIONS": [ + "Lorsque vous jouez une carte #yPouvoir ce combat, gagnez #b", + " #yd'Armure [REMOVE_SPACE]. Ajoutez un #yPouvoir aléatoire qui coûte #b0 dans votre main pour ce tour." + ] + }, + "awakened:SneckoPowersPotion": { + "NAME": "Essence de Geckobra", + "DESCRIPTIONS": [ + "Choisissez #b1 #yPouvoir #yHors-Classe parmi #b3 à ajouter dans votre main, il coûte #b0 ce tour.", + "Choisissez #b1 #yPouvoir #yHors-Classe parmi #b3 et ajoutez #b", + " copies de celui-ci dans votre main, ils coûtent #b0 ce tour." + ] + } +} diff --git a/src/main/resources/awakenedResources/localization/fra/PowerStrings.json b/src/main/resources/awakenedResources/localization/fra/PowerStrings.json new file mode 100644 index 0000000000..b00ad1e07d --- /dev/null +++ b/src/main/resources/awakenedResources/localization/fra/PowerStrings.json @@ -0,0 +1,249 @@ +{ + "awakened:IntensifyPower": { + "NAME": "Intensification", + "DESCRIPTIONS": [ + "Ce tour, tous les Sorts coûtent #b0 [REMOVE_SPACE].", + "Pour les #b", + " prochaisn tours, tous les Sorts coûtent #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": "Refrain ascendant", + "DESCRIPTIONS": [ + "Le(s) #b", + " premier(s) effet(s) #yChant activé(s) ce tour est/sont déclenché(s) deux fois. NL #b", + " Effet(s) restant(s) ce tour." + ] + }, + "awakened:CursedStrength": { + "NAME": "Béni par les ténèbres", + "DESCRIPTIONS": [ + "Lorsque vous êtes #yDrainé [REMOVE_SPACE], gagnez #b", + " de #yForce [REMOVE_SPACE]." + ] + }, + "awakened:ThaumaturgyPower": { + "NAME": "Thaumaturgie", + "DESCRIPTIONS": [ + "Au début de vos #b", + " prochains tours, obtenez une #yCérémonie [REMOVE_SPACE]." + ] + }, + "awakened:SacramentPower": { + "NAME": "Sacrements", + "DESCRIPTIONS": [ + "Lorsque vous jouez un #yPouvoir [REMOVE_SPACE], gagnez #b", + " #yd'Armure [REMOVE_SPACE]." + ] + }, + "awakened:FlarePower": { + "NAME": "Éclat de Plumes", + "DESCRIPTIONS": [ + "Lorsque vous jouez une carte #yn'étant #ypas #yune #yAttaque ce tour, TOUS les ennemis perdent #b", + " PV." + ] + }, + "awakened:PrimacyPower": { + "NAME": "Primauté", + "DESCRIPTIONS": [ + "La première fois que vous gagnez de la #yForce chaque tour, piochez une carte.", + "Les #b", + " premières fois que vous gagnez de la #yForce chaque tour, piochez une carte.", + " NL Cet effet peut être encore déclenché #b", + " fois ce tour.", + " fois ce tour.", + " NL Cet effet ne peut pas être déclenché à nouveau pendant ce tour." + ] + }, + "awakened:SpellbinderPower": { + "NAME": "Envoûteur", + "DESCRIPTIONS": [ + "Au début de votre tour, #yConjurez [REMOVE_SPACE].", + "Au début de votre tour, #yConjurez #b", + " fois." + ] + }, + "awakened:DarkEchoPower": { + "NAME": "Écho obscur", + "DESCRIPTIONS": [ + "À la fin de votre tour, infligez #b", + " dégâts à TOUS les ennemis #b", + " fois.", + " dégâts à TOUS les ennemis." + ] + }, + "awakened:MoonlitVisionPower": { + "NAME": "Vision lunaire", + "DESCRIPTIONS": [ + "La première fois que vous jouez un Sort chaque tour, gagnez [E] .", + "Les #b", + " premières fois que vous jouez un Sort chaque tour, gagnez [E] .", + " NL #b", + " fois restantes ce tour." + ] + }, + "awakened:EclipseEmbracePower": { + "NAME": "Étreinte de l’Éclipse", + "DESCRIPTIONS": [ + "Lorsque vous #yÉpuisez un #yNéant [REMOVE_SPACE], gagnez [E] et piochez une carte au prochain tour.", + "Lorsque vous #yÉpuisez un #yNéant [REMOVE_SPACE], gagnez #b", + " [E] et piochez #b", + " cartes au prochain tour." + ] + }, + "awakened:SongOfSorrowPower": { + "NAME": "Chanson du chagrin", + "DESCRIPTIONS": [ + "Lorsque vous créez un #yNéant [REMOVE_SPACE], TOUS les ennemis perdent #b", + " PV." + ] + }, + "awakened:ShroudOfMiasmaPower": { + "NAME": "Linceul de Miasme", + "DESCRIPTIONS": [ + "Lorsque vous attaquez un ennemi avec du #yMaléfice [REMOVE_SPACE], gagnez #b", + " #yd'Armure [REMOVE_SPACE]." + ] + }, + "awakened:StrengthReturnPower": { + "NAME": "Flagellé", + "DESCRIPTIONS": [ + "Lorsque vous attaquez cet ennemi, gagnez #b", + " de #yForce #yTemporaire [REMOVE_SPACE]." + ] + }, + "awakened:ManaburnPower": { + "NAME": "Manabrûlure", + "DESCRIPTIONS": [ + "Lorsque vous êtes #yDrainé [REMOVE_SPACE], perd #b", + " PV." + ] + }, + "awakened:ArchmagusPower": { + "NAME": "Archimage", + "DESCRIPTIONS": [ + "Le premier Sort que vous jouez chaque tour est joué deux fois.", + "Les #b", + " premiers Sorts que vous jouez chaque tour sont jouées deux fois.", + " NL ( [REMOVE_SPACE]#b", + " répétitions de Sorts restantes)" + ] + }, + "awakened:DoubleSpellPower": { + "NAME": "Répétition de sort", + "DESCRIPTIONS": [ + "Le prochain Sort que vous jouez ce tour sera joué deux fois.", + "Les #b", + " prochains Sorts que vous jouez ce tour seront joués deux fois." + ] + }, + "awakened:DarknessFallsPower": { + "NAME": "Nuit Tombante", + "DESCRIPTIONS": [ + "Lorsque vous êtes #yDrainé [REMOVE_SPACE], gagnez #b", + " #yd'Armure [REMOVE_SPACE]." + ] + }, + "awakened:VoidRefundPower": { + "NAME": "Appel du clairon", + "DESCRIPTIONS": [ + "La prochaine fois que vous êtes #yDrainé [REMOVE_SPACE], gagnez [E] .", + "La prochaine fois que vous êtes #yDrainé [REMOVE_SPACE], gagnez #b", + " [E] ." + ] + }, + "awakened:DemonGlyphPower": { + "NAME": "Glyphe Démoniaque", + "DESCRIPTIONS": [ + "Gagnez #b", + " de #yForce et de #yDextérité lorsque vous vous #yÉveillez [REMOVE_SPACE]." + ] + }, + "awakened:ReverseRitualPower": { + "NAME": "Forme Éveillée", + "DESCRIPTIONS": [ + "Au début de votre tour, gagnez #b", + " de #yRituel [REMOVE_SPACE]." + ] + }, + "awakened:EnsorcelatePower": { + "NAME": "Ensorcelage", + "DESCRIPTIONS": [ + "Le prochain #yPouvoir que vous jouez coûte #b0 [REMOVE_SPACE].", + "Les #b", + " prchains #yPouvoirs qur vous jouez coûtent #b0 [REMOVE_SPACE]." + ] + }, + "awakened:ConjureNextPower": { + "NAME": "Picore", + "DESCRIPTIONS": [ + "La prochaine fois que vous êtes #yDrainé [REMOVE_SPACE], ajoutez un #yJab #yPlume dans votre main.", + "La prochaine fois que vous êtes #yDrainé [REMOVE_SPACE], obtenez #b", + " copies de #yJab #yPlume [REMOVE_SPACE]." + ] + }, + "awakened:ChosensVersePower": { + "NAME": "Verset choisi", + "DESCRIPTIONS": [ + "La prochaine fois que vous jouez une carte n'étant pas une Attaque ce tour, piochez une carte et gagnez #b", + " #yd'Armure [REMOVE_SPACE].", + "Les #b", + " prochaines fois que vous jouez une carte n'étant pas une Attaque ce tour, piochez une carte et gagnez #b", + " #yd'Armure [REMOVE_SPACE]." + ] + }, + "awakened:AphoticFountPower": { + "NAME": "Source aphotique", + "DESCRIPTIONS": [ + "Lorsque vous jouez #yCryostase [REMOVE_SPACE], gagnez #b", + " #yd'Armure #yPlaquée [REMOVE_SPACE]." + ] + }, + "awakened:GrimoirePower": { + "NAME": "Maître des tempêtes", + "DESCRIPTIONS": [ + "Vos #yTonerres infligent #b", + " dégâts supplémentaires." + ] + }, + "awakened:SpellshieldPower": { + "NAME": "Bouclier sortilègeux", + "DESCRIPTIONS": [ + "Lorsque vous #yRetenez une carte, gagnez #b", + " #yd'Armure." + ] + }, + "awakened:DaggerstormPower": { + "NAME": "Tempête de dagues", + "DESCRIPTIONS": [ + "Lorsque vous créez une carte, infligez #b", + " dégâts à un ennemi aléatoire." + ] + }, + "awakened:SchemePower": { + "NAME": "Schéma", + "DESCRIPTIONS": [ + "Les #b", + " prochaines cartes jouées ce tour qui coûtent #b1 [E] ou moins seront jouées deux fois.", + "La prochaine carte jouée ce tour qui coûte #b1 [E] ou moins sera jouée deux fois." + ] + }, + "awakened:FourthDimensionPower": { + "NAME": "4ème Dimension", + "DESCRIPTIONS": [ + "Au début de vos #b", + " prochain tour, ", + " prochains tours, ", + " jouez et #yÉpuisez une copie de ", + " [REMOVE_SPACE]." + ] + } +} diff --git a/src/main/resources/awakenedResources/localization/fra/RelicStrings.json b/src/main/resources/awakenedResources/localization/fra/RelicStrings.json new file mode 100644 index 0000000000..af298edb95 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/fra/RelicStrings.json @@ -0,0 +1,160 @@ +{ + "awakened:RippedDoll": { + "NAME": "Poupée déchirée", + "FLAVOR": "Le dernier souvenir de votre ancien soi. Il recèle encore des pouvoirs magiques latents.", + "DESCRIPTIONS": [ + "Au début des #b", + " premiers tours du combat, #yawakened:Conjurez [REMOVE_SPACE]." + ] + }, + "awakened:ShreddedDoll": { + "NAME": "Poupée déchiquetée", + "FLAVOR": "Un rappel de votre faiblesse, et pourtant vous ne pouvez toujours pas lâcher prise.", + "DESCRIPTIONS": [ + "Repmplace ", + " [REMOVE_SPACE].[] NL Au début de votre tour, #yawakened:Conjurez [REMOVE_SPACE]. NL La première fois que vous rafraîchissez vos Sorts à chaque combat, gagnez #b1 de #yRituel. [REMOVE_SPACE]." + ] + }, + "awakened:WhiteRibbon": { + "NAME": "Ruban blanc", + "FLAVOR": "Donne du pouvoir aux paroles prononcées, même sans rituel approprié.", + "DESCRIPTIONS": [ + "Lorsque vous jouez une carte avec un effet #yawakened:Chant, gagnez #b", + " #yd'Armure [REMOVE_SPACE], même si cet effet n'est pas actif." + ] + }, + "awakened:HexxBomb": { + "NAME": "Manabombe", + "FLAVOR": "3... 2...", + "DESCRIPTIONS": [ + "Lorsqu'un ennemi meurt, transférez sa #yawakened:Manabrûlure vers un ennemi aléatoire." + ] + }, + "awakened:TomeOfPortalmancy": { + "NAME": "Tome de Portalmancie", + "FLAVOR": "Un grimoire détaillant la construction et l'entretien des portails interplanaires.", + "DESCRIPTIONS": [ + "Lorsque vous créez un #yNéant [REMOVE_SPACE], appliquez #b", + " de #yawakened:Manabrûlure à TOUS les ennemis." + ] + }, + "awakened:EyeOfTheOccult": { + "NAME": "Œil de l'Occulte", + "FLAVOR": "Cette sculpture macabre confère à son propriétaire des connaissances magiques.", + "DESCRIPTIONS": [ + "#yTonnerre et #yDrain #yobscur cible maintenant TOUS les ennemis." + ] + }, + "awakened:DeadBird": { + "NAME": "Esprit corvidé", + "FLAVOR": "Ce spectre suit de près les damnés et les maudits..", + "DESCRIPTIONS": [ + "À la fin de votre tour, infligez #b", + " dégâts à l'ennemi ayant le moins de PV, augmenté par la #yForce [REMOVE_SPACE]." + ] + }, + "awakened:AbyssBlade": { + "NAME": "Lame abyssale", + "FLAVOR": "Remboursement des Néants.", + "DESCRIPTIONS": [ + "La première fois que vous êtes #yawakened:Drainé chaque tour, gagnez [E] et piochez une carte." + ] + }, + "awakened:ShardOfNowak": { + "NAME": "Fragment d'os doré", + "FLAVOR": "...Non, pas ce genre de concentration.", + "DESCRIPTIONS": [ + "Commencez chaque combat avec #b", + " de #yForce [REMOVE_SPACE]. Après avoir perdu n'importe quel type de PV, perdez cette #yForce pour le reste du combat." + ] + }, + "awakened:VioletPlumage": { + "NAME": "Plumage violet", + "FLAVOR": "Teinté par l'obscurité sans fin du chaos.", + "DESCRIPTIONS": [ + "La première fois que vous terminez votre tour avec des [E] excédents à chaque combat, piochez #b", + " cartes supplémentaires au début de votre prochain tour." + ] + }, + "awakened:ZenerDeck": { + "NAME": "Cartes de Zener", + "FLAVOR": "“Un, deux, trois, tous les regards doivent être tournés vers moi.”", + "DESCRIPTIONS": [ + "Au début de combat, ajoutez #yExtrasenseur à votre Livre de Sorts et #yawakened:Conjurez-le." + ] + }, + "awakened:CawingCask": { + "NAME": "Fût croassant", + "FLAVOR": "Un tonneau sculpté de manière cérémonielle représentant le dieu corbeau Mazaleth, dont le contenu dégage une odeur douteuse...", + "DESCRIPTIONS": [ + "Lorsque vous utilisez une potion, gagnez #b", + " de #yRituel [REMOVE_SPACE]." + ] + }, + "awakened:MiniBlackHole": { + "NAME": "Alethea", + "FLAVOR": "Abyssale.", + "DESCRIPTIONS": [ + "Si vous ne jouez pas de #yPouvoirs durant votre tour, piochez une carte supplémentaire au prochain tour." + ] + }, + "awakened:StrengthBooster": { + "NAME": "Corbeau en papier", + "FLAVOR": "Arbitre du doute et des malédictions mille fois repliées...", + "DESCRIPTIONS": [ + "Les ennemis prennent #b", + "% de dégâts supplémentaires de la #yawakened:Manabrûlure [REMOVE_SPACE]." + ] + }, + "awakened:CursedBlessing": { + "NAME": "Rites funéraires", + "FLAVOR": "Je lègue tous mes biens à mon chat, Noodles. Adieu, monde cruel. Bisous, Joûteur", + "DESCRIPTIONS": [ + "La première fois que vous activez #b", + " effets de #yawakened:Chant dans un combat, gagnez #b", + " de #yRituel [REMOVE_SPACE]." + ] + }, + "awakened:CurvedSwordMeme": { + "NAME": "Lame conjurée", + "FLAVOR": "Allez-y, faites-le. Conjurez une lame, tout de suite. Je vous observe. :^)", + "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 Une lame appréciée des mages pour sa capacité à canaliser la magie lancée vers elle-même.", + "DESCRIPTIONS": [ + "Chaque fois que vous jouez #b", + " Sorts dans un combat, gagnez une #yCérémonie [REMOVE_SPACE]." + ] + }, + "awakened:MoonTalisman": { + "NAME": "Talisman en croissant", + "FLAVOR": "“S'il vous plaît, ne m'oubliez pas. Même après ma mort.”", + "DESCRIPTIONS": [ + "Lorsque vous récupérez cette relique, choisissez une carte qui n'a PAS #yawakened:Conjurez [REMOVE_SPACE]et ajoutez l'effet #yawakened:Conjurez à celle-ci.", + "Choisissez une carte pour ", + "Le Talisman a béni ", + " et a ajouté #yawakened:Conjurez à celle-ci.", + "La carte attachée à cette relique a été #rretirée de votre deck, la relique ne fonctionne plus désormais." + ] + }, + "awakened:AwakenedUrn": { + "NAME": "Urne à tête d'oiseau", + "FLAVOR": "Cette urne représente le dieu corbeau Mazaleth avec un air malicieux.", + "DESCRIPTIONS": [ + "Les #b4 premières fois que vous jouez une carte #yPouvoir chaque combat, soignez-vous de #b", + " PV." + ] + }, + "awakened:NerfedMummifiedHand": { + "NAME": "Main disséquée", + "FLAVOR": "Elle exige un véritable pouvoir, capable de résister à vos magies occultes.", + "DESCRIPTIONS": [ + "Lorsque vous jouez un #yPouvoir qui #rN'EST #PAS #yCérémonie [REMOVE_SPACE], le coût d'une carte aléatoire de votre main passe à #b0 ce tour." + ] + } +} diff --git a/src/main/resources/awakenedResources/localization/fra/RunModStrings.json b/src/main/resources/awakenedResources/localization/fra/RunModStrings.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/fra/RunModStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/fra/UIStrings.json b/src/main/resources/awakenedResources/localization/fra/UIStrings.json new file mode 100644 index 0000000000..f468682936 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/fra/UIStrings.json @@ -0,0 +1,46 @@ +{ + "awakened:SpellDescriptor": { + "TEXT": [ + "Sort" + ] + }, + "awakened:ConjureMod": { + "TEXT": [ + " NL awakened:Conjurez." + ] + }, + "awakened:SpellMod": { + "TEXT": [ + "[#12FAF0]Sort. NL" + ] + }, + "awakened:DrainingMod": { + "TEXT": [ + " NL Au prochain tour, perdez [E]." + ] + }, + "awakened:highlightChant": { + "TEXT": [ + "awakened:Chant: ", + "[awakenedIcon] [#12FAF0]Chant: " + ] + }, + "awakened:Spellbook": { + "TEXT": [ + "Livre de sorts", + "Éveil", + "Après avoir joué #b7 Pouvoirs, devenez #yÉveillé [REMOVE_SPACE]! NL NL Lorsque vous êtes #yÉveillé [REMOVE_SPACE], les Sorts #yConjurés sont #yAméliorés [REMOVE_SPACE], augmentant drastiquement leur efficacité.", + "Après avoir joué #b7 Pouvoirs, devenez #yÉveillé [REMOVE_SPACE]! NL NL Lorsque vous êtes #yÉveillé [REMOVE_SPACE], les Sorts #yConjurés sont #yAméliorés [REMOVE_SPACE], augmentant drastiquement leur efficacité." + ] + }, + "awakened:FullSpellbook": { + "TEXT": [ + "Mon livre de Sorts est rempli !" + ] + }, + "awakened:FourthDimensionDupeAttempt": { + "TEXT": [ + "@Faire@ @ceci@ @briserait@ @le@ @continuum@ @espace-temps@ @!!!@" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/jpn/CardStrings.json b/src/main/resources/awakenedResources/localization/jpn/CardStrings.json new file mode 100644 index 0000000000..1913e70f45 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/jpn/CardStrings.json @@ -0,0 +1,410 @@ +{ + "awakened:Thunderbolt": { + "NAME": "雷撃", + "DESCRIPTION": "保留 NL !D! ダメージを与える。 NL 廃棄" + }, + "awakened:BurningStudy": { + "NAME": "炎の修練", + "DESCRIPTION": "保留 NL 筋力 !M! を得る。 NL 敵全体に 脱力 !awakened:m2! を与える。 NL 廃棄" + }, + "awakened:Cryostasis": { + "NAME": "氷結", + "DESCRIPTION": "保留 NL !B! ブロックを得る。 NL 廃棄" + }, + "awakened:Darkleech": { + "NAME": "暗吸精", + "DESCRIPTION": "保留 NL 弱体 !M! を与える。 NL awakened:マナバーン !awakened:m2! を与える。 NL 廃棄" + }, + "awakened:DeathCoil": { + "NAME": "死の螺旋", + "DESCRIPTION": "awakened:マナバーン !M! を与える。 NL 次のターン、 [E] を失う。" + }, + "awakened:ESPSpell": { + "NAME": "ESP", + "DESCRIPTION": "保留 NL カードを !M! 枚引く。 NL 廃棄", + "UPGRADE_DESCRIPTION": "保留 NL カードを !M! 枚引く。 NL 廃棄" + }, + "awakened:Strike": { + "NAME": "ストライク", + "DESCRIPTION": "!D! ダメージを与える。" + }, + "awakened:Defend": { + "NAME": "防御", + "DESCRIPTION": "!B! ブロックを得る。" + }, + "awakened:Brainshock": { + "NAME": "ブレインショック", + "DESCRIPTION": "!D! ダメージを与える。 NL 捨て札に *空虚 を加える。" + }, + "awakened:Intensify": { + "NAME": "増幅", + "DESCRIPTION": "awakened:召喚 NL このターンの間、スペルのコストが0になり awakened:召喚 が発動しなくなる。", + "UPGRADE_DESCRIPTION": "保留 NL awakened:召喚 NL このターンの間、スペルのコストが0になり awakened:召喚 が発動しなくなる。" + }, + "awakened:DarkEcho": { + "NAME": "ダークエコー", + "DESCRIPTION": "あなたのターン終了時、敵全体に !M! ダメージを与える。 このダメージは筋力の影響を受ける。" + }, + "awakened:AwakenedForm": { + "NAME": "覚醒化", + "DESCRIPTION": "awakened:キュリオシティ !M! を得る。 NL 儀式 !awakened:m2! を得る。", + "UPGRADE_DESCRIPTION": "即座に *覚醒 する。 NL awakened:キュリオシティ !M! を得る。 NL 儀式 !awakened:m2! を得る。" + }, + "awakened:Spellbinder": { + "NAME": "スペルバインダー", + "DESCRIPTION": "ターン開始時、 awakened:召喚 を行う。" + }, + "awakened:Ceremony": { + "NAME": "セレモニー", + "DESCRIPTION": "保留 NL 筋力 !M! を得る。" + }, + "awakened:TalonRake": { + "NAME": "かぎ爪", + "DESCRIPTION": "!D! ダメージを2回与える。 NL awakened:召喚" + }, + "awakened:Hymn": { + "NAME": "賛歌", + "DESCRIPTION": "!B! ブロックを得る。 NL *セレモニー を手札に加える NL 次のターン、 [E] を失う。" + }, + "awakened:Psalm": { + "NAME": "詩編", + "DESCRIPTION": "敵全体に !D! ダメージと 脱力 !M! を与える。" + }, + "awakened:DemonGlyph": { + "NAME": "デーモングリフ", + "DESCRIPTION": "筋力 !M! と 敏捷性 !M! を得る。 NL *覚醒 した場合、更に !awakened:m2! 増加する。" + }, + "awakened:TakeFlight": { + "NAME": "飛翔", + "DESCRIPTION": "!B! ブロックを得る。 NL awakened:詠唱 :次のターン開始時、ブロックが解除されなくなる" + }, + "awakened:FeatherVeil": { + "NAME": "フェザーヴェール", + "DESCRIPTION": "!B! ブロックを得る。 NL 筋力 !M! を失う。" + }, + "awakened:Peck": { + "NAME": "つつく", + "DESCRIPTION": "!B! ブロックを得る。 NL !D! ダメージを与える。 NL カードを !M! 枚引く。", + "UPGRADE_DESCRIPTION": "!B! ブロックを得る。 NL !D! ダメージを与える。 NL カードを !M! 枚引く。" + }, + "awakened:Extension": { + "NAME": "エクステンション", + "DESCRIPTION": "!D! ダメージを与える。 NL パワーをプレイした時、これを捨て札から手札に戻す。" + }, + "awakened:Pluck": { + "NAME": "掻き毟り", + "DESCRIPTION": "敵全体に !D! ダメージを与える。 NL *羽根撃ち を手札に加える。" + }, + "awakened:FlareShot": { + "NAME": "フェザーフレア", + "DESCRIPTION": "!D! ダメージを与える。 NL awakened:詠唱 :次のターン、カードを !M! 枚引く。" + }, + "awakened:ClarionCall": { + "NAME": "呼び寄せる声", + "DESCRIPTION": "!D! ダメージを与える。 NL 次に awakened:枯渇 が発動した時、 [E] を得る。" + }, + "awakened:Recitation": { + "NAME": "朗唱", + "DESCRIPTION": "!D! ダメージを与える。 NL awakened:詠唱 : もう一度 !D! ダメージを与える。" + }, + "awakened:ChosenVerse": { + "NAME": "選ばれた詩句", + "DESCRIPTION": "このターン中、 !M! 回まで、 非アタック カードをプレイした時に カードを 1 枚引き、 !B! ブロックを得る。" + }, + "awakened:SoulStrike": { + "NAME": "ソウルストライク", + "DESCRIPTION": "!D! ダメージを !M! 回与える。 NL このターンにプレイされたパワー1枚につきコストが [E] 減少する。" + }, + "awakened:Altar": { + "NAME": "祭壇", + "DESCRIPTION": "!B! ブロックを得る。 NL 手札を1枚廃棄する。 NL awakened:召喚" + }, + "awakened:Envision": { + "NAME": "想起", + "DESCRIPTION": "!B! ブロックを得る。 NL awakened:召喚 を行い山札の一番上にスペルカードを加える。" + }, + "awakened:Thaumaturgy": { + "NAME": "魔導学", + "DESCRIPTION": "敏捷性 !awakened:m2! を得る。 NL !M! ターンの間、ターン開始時に手札に *セレモニー を加える。" + }, + "awakened:WaveOfMiasma": { + "NAME": "瘴気の波", + "DESCRIPTION": "!B! ブロックを得る。 NL 敵全体に awakened:マナバーン !awakened:m2! を与える。 NL 廃棄" + }, + "awakened:SludgeBomb": { + "NAME": "スラッジボム", + "DESCRIPTION": "廃棄札に存在する *空虚 をコストとして使用する。 NL 敵全体に !D! ダメージを与える。", + "EXTENDED_DESCRIPTION": [ + "空虚が廃棄されていない" + ] + }, + "awakened:KnifesEdge": { + "NAME": "ナイフエッジ", + "DESCRIPTION": "筋力 !awakened:m2! を得る。 NL 捨て札に !M! 枚の *空虚 を加える。" + }, + "awakened:FourthDimension": { + "NAME": "第四次元", + "DESCRIPTION": "手札を1枚廃棄する。 NL 廃棄されたカードのコピーを !M! 枚山札に加えシャッフルする。 NL 廃棄", + "EXTENDED_DESCRIPTION": [ + "第四次元による廃棄" + ] + }, + "awakened:RavenStrike": { + "NAME": "レイブンストライク", + "DESCRIPTION": "!D! ダメージを与える。 NL awakened:詠唱 : 山札の一番上のカードをプレイする。" + }, + "awakened:Unleash": { + "NAME": "解き放つ", + "DESCRIPTION": "!D! ダメージを与える。 NL 手札の他のカード1枚につき !M! の追加ダメージを与える。" + }, + "awakened:DesperatePrayer": { + "NAME": "必死の祈り", + "DESCRIPTION": "!M! 枚の *セレモニー を手札に加える。 NL 廃棄" + }, + "awakened:BirdsEye": { + "NAME": "バードアイ", + "DESCRIPTION": "スペルを選択して awakened:召喚 し 手札に加える。", + "UPGRADE_DESCRIPTION": "魔導書をリフレッシュし、スペルを選択して awakened:召喚 し 手札に加える。" + }, + "awakened:Initiation": { + "NAME": "開幕", + "DESCRIPTION": "!B! ブロックを得る。 NL *セレモニー を手札に加える。" + }, + "awakened:Ensorcelate": { + "NAME": "魔力付与", + "DESCRIPTION": "!B! ブロックを得る。 NL 次にプレイするパワーのコストが 0 になる。" + }, + "awakened:Skyward": { + "NAME": "スカイウォード", + "DESCRIPTION": "!B! ブロックを得る。 NL カードを !M! 枚引く。 NL この戦闘中にプレイされたパワー1枚につき、コストが [E] 減少する。" + }, + "awakened:RisingChant": { + "NAME": "高まる祈り", + "DESCRIPTION": "エセリアル NL 各ターン、最初に起動した awakened:詠唱 の効果は2回発動する。", + "UPGRADE_DESCRIPTION": "各ターン、最初に起動した awakened:詠唱 の効果は2回発動する。" + }, + "awakened:FeatherWhirl": { + "NAME": "フェザーホイール", + "DESCRIPTION": " X 枚の *羽根撃ち を手札に加える。", + "UPGRADE_DESCRIPTION": "X+1 枚の *羽根撃ち を手札に加える。" + }, + "awakened:Murder": { + "NAME": "殺戮", + "DESCRIPTION": "ランダムな敵に !D! ダメージを M! 回 与える。", + "UPGRADE_DESCRIPTION": "保留 NL ランダムな敵に !D! ダメージを !M! 回 与える。" + }, + "awakened:Nihil": { + "NAME": "無", + "DESCRIPTION": "awakened:マナバーン !M! を与える。 NL awakened:詠唱 : 全ての敵が自身の awakened:マナバーン に等しいHPを失う。" + }, + "awakened:MoonlitVision": { + "NAME": "月明かりの幻影", + "DESCRIPTION": "毎ターン最初にスペルをプレイした時、 [E] を得る。" + }, + "awakened:Rebirth": { + "NAME": "転生", + "DESCRIPTION": "死亡時または戦闘終了時に、 全てのデバフを解除し、 *覚醒 状態になり HPを !M! 回復する。" + }, + "awakened:Archmagus": { + "NAME": "アークメイジ", + "DESCRIPTION": "毎ターン、最初にプレイするスペルが2回プレイされる。" + }, + "awakened:Planeswalk": { + "NAME": "次元渡り", + "DESCRIPTION": "[E] [E] を得る。 NL 山札に *空虚 を加えシャッフルする。", + "UPGRADE_DESCRIPTION": "[E] [E] [E] を得る。 NL 山札に *空虚 を加えシャッフルする。" + }, + "awakened:Spew": { + "NAME": "吐瀉", + "DESCRIPTION": "!D! ダメージを与える。 NL このカードに使用された [E] は awakened:枯渇 とみなされる。" + }, + "awakened:DarknessFalls": { + "NAME": "訪れる闇", + "DESCRIPTION": "awakened:枯渇 が発生した時、 !M! ブロックと筋力 !awakened:m2! を得る。", + "UPGRADE_DESCRIPTION": "天賦 NL awakened:枯渇 が発生した時、 !M! ブロックと筋力 !awakened:m2! を得る。" + }, + "awakened:Eventide": { + "NAME": "黄昏", + "DESCRIPTION": "ランダムな敵に !D! ダメージを2回与える。 NL 山札の一番上に *空虚 を置く。" + }, + "awakened:EclipseEmbrace": { + "NAME": "日蝕の抱擁", + "DESCRIPTION": "*空虚 を廃棄すると、次のターン [E] を得て カードを 1 枚引く。" + }, + "awakened:Clutch": { + "NAME": "クラッチ", + "DESCRIPTION": "!D! ダメージを与える。 NL 0コストのカードを1枚引く。" + }, + "awakened:Gloomguard": { + "NAME": "暗闇の守護者", + "DESCRIPTION": "!B! ブロックを得る。 NL 手札に *空虚 が存在する場合、コストが0になる。" + }, + "awakened:Carrionmaker": { + "NAME": "死肉を作る者", + "DESCRIPTION": "ランダムな敵に !D! ダメージを与える。 NL このターンにプレイされたスペルの数だけ繰り返す。", + "EXTENDED_DESCRIPTION": [ + " NL (", + " 回スペルをプレイした。)", + " 回スペルをプレイした。)" + ] + }, + "awakened:MirePit": { + "NAME": "泥沼の穴", + "DESCRIPTION": "このターンの間、敵全体が筋力 !M! を失う。 NL 次のターン、 [E] を失う。 NL 廃棄" + }, + "awakened:SingularityShield": { + "NAME": "特異点の盾", + "DESCRIPTION": "!B! ブロックを得る。 NL 次のターン、 [E] を失い、 !B! ブロックを得る。" + }, + "awakened:Dejection": { + "NAME": "陰鬱", + "DESCRIPTION": "!D! ダメージを与える。 NL 手札を1枚廃棄する。 スペルが廃棄された場合 *セレモニー を手札に加える。" + }, + "awakened:BloodRite": { + "NAME": "血の儀式", + "DESCRIPTION": "!D! ダメージを与える。 NL *セレモニー を手札に加える。" + }, + "awakened:SongOfSorrow": { + "NAME": "哀歌", + "DESCRIPTION": "あなたが *空虚 を生成する度に敵全体が HPを !M! 失う。" + }, + "awakened:MysticOrder": { + "NAME": "秘術教団", + "DESCRIPTION": "カードを !M! 枚引く。 NL awakened:召喚" + }, + "awakened:ProfaneStrike": { + "NAME": "プロフェインストライク", + "DESCRIPTION": "!D! ダメージを与える。 NL 手札を1枚山札の一番上に置く。" + }, + "awakened:Victuals": { + "NAME": "食糧", + "DESCRIPTION": "awakened:詠唱 : [E] [E] を得る。 NL 廃棄", + "UPGRADE_DESCRIPTION": "awakened:詠唱 : [E] [E] [E] を得る。 NL 廃棄" + }, + "awakened:Gather": { + "NAME": "集合", + "DESCRIPTION": "!B! ブロックを得る。 NL awakened:詠唱 : 捨て札のカードを1枚手札に加える。" + }, + "awakened:TheTower": { + "NAME": "塔", + "DESCRIPTION": "敵全体に !D! ダメージを与える。 NL この戦闘中に生成されたカード1枚毎に !M! の追加ダメージを与える。" + }, + "awakened:ArcaneNesting": { + "NAME": "アルケインネスト", + "DESCRIPTION": "使用不可 NL このカードが手札にある場合、パワーをプレイする度に !B! ブロックを得る。", + "EXTENDED_DESCRIPTION": [ + "このカードの効果はパワーをプレイした時に得られる。" + ] + }, + "awakened:MiddenHeap": { + "NAME": "埋葬された山", + "DESCRIPTION": "!B! ブロックを得る。 NL 山札または捨て札から !M! 枚の *状態異常 か *呪い カードを手札に加える。", + "UPGRADE_DESCRIPTION": "!B! ブロックを得る。 NL 山札または捨て札から !M! 枚の *状態異常 か *呪い カードを手札に加える。", + "EXTENDED_DESCRIPTION": [ + "選択したカードを手札に移す", + "選択したカードを手札に移す" + ] + }, + "awakened:Caw": { + "NAME": "カァ!", + "DESCRIPTION": "!D! ダメージを与える。 NL awakened:詠唱 : この戦闘中全ての *カァ! のダメージを !M! 増加させる。" + }, + "awakened:Scour": { + "NAME": "スカー", + "DESCRIPTION": "!D! ダメージを与える。 NL awakened:マナバーン !M! を与える。" + }, + "awakened:Manastorm": { + "NAME": "マナストーム", + "DESCRIPTION": "敵全体に !D! ダメージを与える。 NL awakened:召喚 を2回行う。" + }, + "awakened:StormRuler": { + "NAME": "ストームルーラー", + "DESCRIPTION": "awakened:召喚 NL *雷撃 が !M! の追加 ダメージを与える。" + }, + "awakened:AphoticFount": { + "NAME": "暗黒の泉", + "DESCRIPTION": "awakened:召喚 NL *氷結 をプレイした時、 *プレートアーマー !M! を得る。" + }, + "awakened:Bloodthirst": { + "NAME": "血の渇き", + "DESCRIPTION": "!D! ダメージを与える。 NL 致命 時、 awakened:パワーポーション を入手し、このカードを廃棄する。" + }, + "awakened:Procession": { + "NAME": "行進", + "DESCRIPTION": "山札のカードをプレイし、そのコストに等しい *空虚 を山札に加えシャッフルする。 NL 廃棄" + }, + "awakened:SplitWide": { + "NAME": "引き裂く", + "DESCRIPTION": "!D! ダメージを与える。 NL この敵を攻撃する度、一時的な 筋力 !M! を得る。 NL 廃棄" + }, + "awakened:Spellshield": { + "NAME": "スペルシールド", + "DESCRIPTION": "カードを 保留 した時、 !M! ブロックを得る。" + }, + "awakened:Siphon": { + "NAME": "サイフォン", + "DESCRIPTION": "!D! ダメージを与える。 NL awakened:詠唱 : このターンの間、 筋力 !M! を gremlin:スティール する。" + }, + "awakened:PlumeJab": { + "NAME": "羽根撃ち", + "DESCRIPTION": "保留 NL ランダムな敵に !D! ダメージを2回与える。 NL 廃棄" + }, + "awakened:Primacy": { + "NAME": "プライマシー", + "DESCRIPTION": "各ターンで初めて 筋力 を得た時、 カードを 1 枚引く。", + "UPGRADE_DESCRIPTION": "各ターン !M! 回まで、 筋力 を得た時、 カードを 1 枚引く。" + }, + "awakened:Daggerstorm": { + "NAME": "ダガーストーム", + "DESCRIPTION": "カードを生成した時、ランダムな敵に !M! ダメージを与える。" + }, + "awakened:PackRat": { + "NAME": "群れネズミ", + "DESCRIPTION": "2回 !D! ダメージを与え、2回 !B! ブロックを得る。 NL ランダムなポーションを入手する。 NL 廃棄" + }, + "awakened:Mantis": { + "NAME": "マンティス", + "DESCRIPTION": "筋力 !M! を得る。 NL 手札に *羽根撃ち を加える。" + }, + "awakened:ManaShield": { + "NAME": "マナシールド", + "DESCRIPTION": "!B! ブロックを得る。 NL awakened:召喚 NL 手札のランダムなスペルのコストを1減少させる。" + }, + "awakened:Crusher": { + "NAME": "クラッシャー", + "DESCRIPTION": "保留 NL !D! ダメージを与える。 NL カードが生成された時、このカードのコストを1減少させる。" + }, + "awakened:Minniegun": { + "NAME": "ミニガン", + "DESCRIPTION": "!D! ダメージを !M! 回与える。 NL 山札に *空虚 を加える。" + }, + "awakened:SignInBlood": { + "NAME": "血の署名", + "DESCRIPTION": " !awakened:m2! ダメージを受ける。 NL カードを !M! 枚引く。 NL 筋力 !awakened:m2! を得る。 NL 廃棄" + }, + "awakened:SpreadingSpores": { + "NAME": "胞子拡散", + "DESCRIPTION": "エセリアル NL トゲ !M! を得る。 NL このカードのコピーを山札に加えシャッフルする。" + }, + "awakened:Scheme": { + "NAME": "スキーム", + "DESCRIPTION": "このターンに次にプレイするコスト1以下のカードは2回プレイされる。", + "UPGRADE_DESCRIPTION": "このターンに次にプレイする !M! 枚のコスト1以下のカードは2回プレイされる。" + }, + "awakened:TheEncyclopedia": { + "NAME": "エンサイクロペディア", + "DESCRIPTION": "!M! 枚のランダムな カードから 2枚 を選択し、手札に加える。それらはコストが2減少する。 NL 廃棄", + "EXTENDED_DESCRIPTION": [ + "2枚を選択し、手札に加える" + ] + }, + "awakened:RealityRift": { + "NAME": "次元の裂け目", + "DESCRIPTION": "!M! 枚の *別次元 の 強力なカードから !awakened:m2! 枚を選択し、手札に加える。 NL 捨て札に2枚の *空虚 を加える。 NL 廃棄" + }, + "awakened:Inscribe": { + "NAME": "インスクライブ", + "DESCRIPTION": "*スペル を1枚選択し、この戦闘の間魔導書に !M! 枚追加する。", + "UPGRADE_DESCRIPTION": "awakened:召喚 NL *スペル を1枚選択し、この戦闘の間魔導書に !M! 枚追加する。" + } +} diff --git a/src/main/resources/awakenedResources/localization/jpn/CharacterStrings.json b/src/main/resources/awakenedResources/localization/jpn/CharacterStrings.json new file mode 100644 index 0000000000..4d0b6ef932 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/jpn/CharacterStrings.json @@ -0,0 +1,13 @@ +{ + "awakened:awakenedOne": { + "NAMES": [ + "目覚めし者", + "目覚めし者" + ], + "TEXT": [ + "教団の頂点に座す、彼方に棲む不滅の暗黒魔術師。 NL 虚無およびあらゆる元素を支配する力を有する。", + "NL あなたは最大の呪文を呼び出し…", + "暗い道を歩いていると、数人のフードをかぶった人物が何か暗い儀式をしているところに出くわす。あなたが近づくと、彼らは不気味に一斉にこちらを向いた。その中で最も背の高い者は牙の生えた歯をむき出しにし、青白い長い手をあなたに向かって伸ばした。 NL 「 ~我らに加われ選ばれし者よ。そして塔の温もりを感じるのだ~ 」" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/jpn/EventStrings.json b/src/main/resources/awakenedResources/localization/jpn/EventStrings.json new file mode 100644 index 0000000000..0a8784c313 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/jpn/EventStrings.json @@ -0,0 +1,88 @@ +{ + "awakened:Nest": { + "NAME": "イベント: 巣窟", + "DESCRIPTIONS": [ + "あなたはそれを見つけ、戻ってきた。 NL #p巣窟 ―― そこはあなたが生まれ変わった場所。 #b~生ける神の化身~ へと・・・。足を踏み入れた瞬間、狂信者達があなたを取り囲む。 @カァカァと鳴く声@ 、そして @歓声@ 。それらがあなたに向けられている。 NL 彼らは知っている。あなたの到来には #r供物 の要求が伴う事を。", + "これからの戦いは困難を極めるだろう。今こそあなたの持ち物に至高の武器を加える良い機会だ。 NL NL #r@...だが短剣は除く。@ NL NL あなたは強力な儀式を行い、それは極めて強大な #yレリック をもたらすが同時にあなたの身体に多大な消耗を強いた。 NL NL 消耗したあなたは巣窟を後にすると、新たな武器が戦場にさらなる混沌をもたらす事を期待する。", + "群れは次々と列を成しあなたへと捧げ物を持ってくる。 NL NL それらの殆どは @価値のないガラクタ@ だが、一匹の狂信者が目を引く供物を持ってきた。それは戦闘で特に役立つであろう #b強力な薬 だ。 NL NL 間もなくあなたは巣窟を離れ、尖塔の下へと旅を続けた。", + "狂信者達は彼らが大切にしていた像が戻ってきたのを見ると、普段にも増してあなたの周りを取り囲んだ。 NL それはたちまち祝宴へと変わると、あなたは信者達からの贈り物とソウルの雨を浴びた。 NL 祝賀が終わり巣窟を後にした時、あなたはこの時間を貴重な武器を探す時間に費やせたのではないかと気付く。 NL もう手遅れだが、それでもあなたは前へと歩みを進めた。", + "#r@「カミ!!@ #r@カエッテキタ!!」@ NL #b~「カァ!~ #b~カア!!~ #b~カアアァァア!!!」~ NL 破壊しなかった像が、今日こそ役に立ったようだ。", + "", + "", + "狂信者達はあなたと、彼らが大切にしていた像がまた戻ってきたのを見ると、普段にも増してあなたの周りを取り囲んだ。 NL それはたちまち祝宴へと変わると、あなたは信者達からの贈り物とソウルの雨を浴びた。 NL 祝賀が終わり巣窟を後にした時、あなたはこの時間を貴重な武器を探す時間に費やせたのではないかと気付く。 NL もう手遅れだが、それでもあなたは前へと歩みを進めた。", + "あなたは急ぎ献金の箱と宝物庫へと移動する。捧げられた全ての貨幣を利用し更に #yレリック も探すつもりだ。 NL NL 血その物を対価として捧げられたそのコインは、まさしく #bソウル の代替として相応しい供物である。 NL NL #yレリック もまたこれからの試練において役に立つだろう。 NL NL 献金の箱から #r血に染まった コインを握りしめ、最大限に利用しようと考える。が、その瞬間供物の量がかなり減っている事に気付く... NL NL NL ~...~", + "まさか... #r@盗まれたのか?@ 。 #p奪われた というのか? NL NL まさか ~そんなはずは無い。~ NL NL NL そんなこと、考える事自体愚かしい。 NL NL NL ~...そうだろう?~ NL NL NL あなたは #y~一抹の疑念~ を振り切り、巣窟から離れ歩き出した。" + ], + "OPTIONS": [ + "[像を返す] #r壊れた黄金の翼を失う。 #g多くの報酬。", + "[Locked] 壊れた黄金の翼が必要", + "[供物を受け取る] #g特別なポーション", + "[武器の召喚] #g入手:特殊なレリック。 #r失う: #r-", + " #r最大 #rHP", + "[寄付箱] #g入手: #g", + " #gゴールドとコモンレリック #r呪い-疑念", + "[立ち去る]", + "[続行]", + "[称賛を受ける!] #g壊れた黄金の翼を返還した報酬を受け取る。", + "[続行] - #r呪い-疑念" + ] + }, + "awakened:WingStatueAwakened": { + "NAME": "イベント: 黄金の翼", + "DESCRIPTIONS": [ + "石や岩の間であなたは烏神マザレスをモチーフにした精巧な大きな青い像に気付いた。 NL NL 突然、激しい怒りとそれを破壊したい衝動に駆られる。 NL NL しかし、そうすれば教団員の怒りを買う事になるだろうとあなたは思う。", + "あなたは像を破壊する危険を冒す価値はないと判断し、代わりに像を持ち帰ることに決めた。 NL その重さに一時的に耐えきれなくなるが、すぐに掴み直し先へ進む。", + "あなたは像に襲いかかると、それを粉々に砕いた! NL 瓦礫の中から、まだ魔法の残滓を宿す鋭い像の破片を見つける。 NL あなたは去りながら、 #p闇の精気 が血に染み込むのを感じる。", + "あなたはそれを無視すると、そのまま歩みを進めた。", + "カ・・・カァ!? 鳥神ヘノ贈リ物?", + "カァ!カアァァア!!", + "交換? 公平な提案だ...", + "教団員は喜ぶだろう。" + ], + "OPTIONS": [ + "[破壊] #g入手:鋭利な破片。 #r呪い-2枚の血友病", + "[収集] #r失う #r-", + "[立ち去る]", + " #rHP #g入手:壊れた黄金の翼。" + ] + }, + "awakened:BackToBasics": { + "NAME": "", + "DESCRIPTIONS": [ + "命を懸けた闘い。それ以外に価値はない。今この瞬間こそが全てだ。" + ], + "OPTIONS": [ + "[絶望] #g全てのストライクと防御に枯渇を付与。", + "[Locked] 必要: ストライクまたは防御。" + ] + }, + "awakened:AbyssEvent": { + "NAME": "イベント: 深淵にて", + "DESCRIPTIONS": [ + "シティを進むうちに突如として説明のつかない感覚に襲われる…。まるで #p現実 そのものが目の前で @解れ始めている@ かのようだ。 NL あなたの感覚が正常だったならば、目の前に #pグリモワール が置かれているのが見え、そして ~異世界からの声~ が呼んでいるのが聴こえただろう…。 NL 「目覚めし子よ。無限の次元を歩む者よ。我らは語るべきことが多い。私を手に取れ、そうすればお前が求める知識へと導こう……この世界の理を超えた、怪物、機械、そして魔法の未知なる領域へ。」", + "「それで良い。我らの同盟は強大なものとなるだろう。」 NL #p異界的 な #p不快感 が残ってはいるが、その書を手にしたことで、無限の可能性の世界が目の前に開けたように感じる……", + "あなたは一種の催眠の様な恍惚状態から何とか抜け出すと、翼を広げ #pグリモワール の元を後にした。" + ], + "OPTIONS": [ + "[手を伸ばす] #g入手:現実の亀裂 #r呪い-加齢", + "[立ち去る]", + "[立ち去る]" + ] + }, + "awakened:CultTalk": { + "NAME": "TalkStrings", + "DESCRIPTIONS": [ + "@主ヨ!@ @オユルシヲ!@", + "@ジブンノバンガキタ!@", + "@カアアァァアア!@ @カァ@ @カア@ @カァ@ @カアァァァアア!!!!@", + + "@我の血は鳥神のために!@", + "@私は何の価値もない者だ!@", + "@繁栄の為に!@ @命を捧げる!!@", + + "~これが私の贖罪になりますよう…~", + "~...~", + "~あなたは私に選ばせなかった...~" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/jpn/KeywordStrings.json b/src/main/resources/awakenedResources/localization/jpn/KeywordStrings.json new file mode 100644 index 0000000000..adb305d153 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/jpn/KeywordStrings.json @@ -0,0 +1,66 @@ +[ + { + "PROPER_NAME": "パワーポーション", + "NAMES": [ + "Power Potion", + "Power_Potion", + "power_potion", + "powerpotion", + "パワーポーション" + ], + "DESCRIPTION": "#yポーション : ランダムな #yパワー カード #b3 枚の中から #b1 枚を選び、手札に加える。このターン、そのコストは #b0 。" + }, + { + "PROPER_NAME": "召喚", + "NAMES": [ + "conjure", + "conjured", + "awaken", + "召喚" + ], + "DESCRIPTION": "魔導書から次のカードを作り出し、手札に加える。" + }, + { + "PROPER_NAME": "詠唱", + "NAMES": [ + "chant", + "詠唱" + ], + "DESCRIPTION": "直前にプレイしたカードが #yパワー なら、 #y詠唱 を持つカードはより強力な効果を得る。一度効果を発動した場合戦闘終了後まで効果を得る。" + }, + { + "PROPER_NAME": "呪詛", + "NAMES": [ + "hex", + "hexxed", + "hexx", + "呪詛" + ], + "DESCRIPTION": "#y呪詛 を持つ敵は、スタックごとに次の攻撃から受けるダメージが #b20% 増加する。攻撃を受けた後、 #y呪詛 は全て解除される。" + }, + { + "PROPER_NAME": "枯渇", + "NAMES": [ + "drain", + "drained", + "枯渇" + ], + "DESCRIPTION": " [E] を失う効果全般を指す。 [E] が残っていなくても発動する。(カードをプレイするための [E] 消費は含まない)" + }, + { + "PROPER_NAME": "マナバーン", + "NAMES": [ + "manaburn", + "マナバーン" + ], + "DESCRIPTION": "[E] を失う度、例え [E] がなくても、 #yマナバーン に等しいHPを失う。(カードをプレイするための [E] 消費は含まない)" + }, + { + "PROPER_NAME": "キュリオシティ", + "NAMES": [ + "curiosity", + "キュリオシティ" + ], + "DESCRIPTION": "#yパワー カードをプレイする度、 #y筋力 #b1 を得る。" + } +] diff --git a/src/main/resources/awakenedResources/localization/jpn/MonsterStrings.json b/src/main/resources/awakenedResources/localization/jpn/MonsterStrings.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/jpn/MonsterStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/jpn/OrbStrings.json b/src/main/resources/awakenedResources/localization/jpn/OrbStrings.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/jpn/OrbStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/jpn/PotionStrings.json b/src/main/resources/awakenedResources/localization/jpn/PotionStrings.json new file mode 100644 index 0000000000..7f64718039 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/jpn/PotionStrings.json @@ -0,0 +1,30 @@ +{ + "awakened:PhaseSkip": { + "NAME": "超越者の飲物", + "DESCRIPTIONS": [ + "即座に #y覚醒 し、戦闘終了まですべてのカードを #yアップグレード する。" + ] + }, + "awakened:CultistsDelight": { + "NAME": "カルティストの歓喜", + "DESCRIPTIONS": [ + "この戦闘中、 #yパワー カードをプレイする度 #y筋力 #b", + " を得る。 ランダムな #yパワー カードを手札に加え、このターン中そのコストを #b0 にする。" + ] + }, + "awakened:SacramentalWine": { + "NAME": "聖餐用のワイン", + "DESCRIPTIONS": [ + "この戦闘中、 #yパワー カードをプレイする度 #b", + " #yブロック を得る。 ランダムな #yパワー カードを手札に加え、このターン中そのコストを #b0 にする。" + ] + }, + "awakened:SneckoPowersPotion": { + "NAME": "スネッコエキス", + "DESCRIPTIONS": [ + "ランダムな他クラスの #yパワー カード #b3 枚から #b1 枚選び、手札に加える。このターン、そのコストは #b0 になる。", + "ランダムな他クラスの #yパワー カード #b3 枚から #b1 枚選び、 #b", + " 枚のコピーを手札に加える。それらのコストはこのターン #b0 になる。" + ] + } +} diff --git a/src/main/resources/awakenedResources/localization/jpn/PowerStrings.json b/src/main/resources/awakenedResources/localization/jpn/PowerStrings.json new file mode 100644 index 0000000000..3e72a6541d --- /dev/null +++ b/src/main/resources/awakenedResources/localization/jpn/PowerStrings.json @@ -0,0 +1,249 @@ +{ + "awakened:IntensifyPower": { + "NAME": "増幅", + "DESCRIPTIONS": [ + "このターン、スペルカードのコストは #b0 になる。", + "あと #b", + " ターンの間、スペルカードのコストは #b0 になる。" + ] + }, + "awakened:IntensifyDebuffPower": { + "NAME": "バーンアウト", + "DESCRIPTIONS": [ + "このターン、 #y召喚 は発動しない。", + "あと #b", + " ターンの間、 #y召喚 は発動しない。" + ] + }, + "awakened:RisingChantPower": { + "NAME": "高まるコーラス", + "DESCRIPTIONS": [ + "各ターン最初に発動する #b", + " #y詠唱 の効果は2回発動する。 NL 残り #b", + " 回。" + ] + }, + "awakened:CursedStrength": { + "NAME": "闇の祝福", + "DESCRIPTIONS": [ + "あなたが #y枯渇 状態になった時 #y筋力 #b", + " を得る。" + ] + }, + "awakened:ThaumaturgyPower": { + "NAME": "魔術", + "DESCRIPTIONS": [ + "あと #b", + " ターンの間、ターン開始時に #yセレモニー を手札に加える。" + ] + }, + "awakened:SacramentPower": { + "NAME": "秘跡", + "DESCRIPTIONS": [ + " #yパワー をプレイする度、 #b", + " #yブロック を得る。" + ] + }, + "awakened:FlarePower": { + "NAME": "フェザーフレア", + "DESCRIPTIONS": [ + "このターン中に #y非アタック カードをプレイした時、敵全体が #b", + " HPを失う。" + ] + }, + "awakened:PrimacyPower": { + "NAME": "プライマシー", + "DESCRIPTIONS": [ + "各ターンで最初に #y筋力 を得た時、 カードを 1 枚引く。", + "各ターンで #b", + " 回まで #y筋力 を得た時、 カードを 1 枚引く。", + " NL このターンあと #b", + " 回効果を起動出来る。", + " 回効果を起動出来る。", + " NL このターン、もう効果は起動しない。" + ] + }, + "awakened:SpellbinderPower": { + "NAME": "スペルバインダー", + "DESCRIPTIONS": [ + "ターン開始時、 #y召喚 ", + "ターン開始時、 #y召喚 を #b", + " 回行う。" + ] + }, + "awakened:DarkEchoPower": { + "NAME": "ダークエコー", + "DESCRIPTIONS": [ + "ターン終了時、敵全体に #b", + " ダメージを #b", + " 回与える。", + " ダメージを与える。" + ] + }, + "awakened:MoonlitVisionPower": { + "NAME": "月明かりの幻影", + "DESCRIPTIONS": [ + "各ターンで初めてスペルをプレイした時、 [E] を得る。", + "各ターンで #b", + " 回まで スペルをプレイした時、 [E] を得る。", + " NL このターン、あと #b", + " 回発動可能。" + ] + }, + "awakened:EclipseEmbracePower": { + "NAME": "月蝕の抱擁", + "DESCRIPTIONS": [ + "#y空虚 を #y廃棄 した次のターン、 [E] を得て カードを 1 枚引く。", + "#y空虚 を #y廃棄 した次のターン #b", + " [E] を得てカードを #b", + " 枚引く。" + ] + }, + "awakened:SongOfSorrowPower": { + "NAME": "哀歌", + "DESCRIPTIONS": [ + "#y空虚 を生成した時、敵全体が #b", + " HPを失う。" + ] + }, + "awakened:ShroudOfMiasmaPower": { + "NAME": "瘴気の波", + "DESCRIPTIONS": [ + "#y呪詛 を持つ相手に攻撃した際、 #b", + " #yブロック を得る。" + ] + }, + "awakened:StrengthReturnPower": { + "NAME": "引き裂き", + "DESCRIPTIONS": [ + "この敵に攻撃した際一時的な #y筋力 #b", + " を得る。" + ] + }, + "awakened:ManaburnPower": { + "NAME": "マナバーン", + "DESCRIPTIONS": [ + "#y枯渇 が発動した時 #b", + " HPを失う。" + ] + }, + "awakened:ArchmagusPower": { + "NAME": "アークメイジ", + "DESCRIPTIONS": [ + "各ターン最初にプレイされたスペルは2回プレイされる。", + "各ターン #b", + " 回まで、プレイされたスペルは2回プレイされる。", + " NL (あと #b", + " 回発動する。)" + ] + }, + "awakened:DoubleSpellPower": { + "NAME": "多重詠唱", + "DESCRIPTIONS": [ + "このターン、次にプレイされたスペルは2回プレイされる。", + "このターン #b", + " 回まで、プレイされたスペルは2回プレイされる。" + ] + }, + "awakened:DarknessFallsPower": { + "NAME": "闇の帳", + "DESCRIPTIONS": [ + " #y枯渇 が発動した時、 #b", + " #yブロック を得る。" + ] + }, + "awakened:VoidRefundPower": { + "NAME": "呼び寄せる声", + "DESCRIPTIONS": [ + "次に #y枯渇 が発動した時 [E] を得る。", + "次に #y枯渇 が発動した時 #b", + " [E] を得る。" + ] + }, + "awakened:DemonGlyphPower": { + "NAME": "デーモングリフ", + "DESCRIPTIONS": [ + "#y覚醒 した時、 #b", + " の #y筋力 と #y敏捷性 を得る。" + ] + }, + "awakened:ReverseRitualPower": { + "NAME": "覚醒化", + "DESCRIPTIONS": [ + "ターン開始時、 #y儀式 #b", + " を得る。" + ] + }, + "awakened:EnsorcelatePower": { + "NAME": "魔力付与", + "DESCRIPTIONS": [ + "次にプレイする #yパワー のコストは #b0 になる。", + "あと #b", + " 回まで、 プレイする #yパワー のコストは #b0 になる。" + ] + }, + "awakened:ConjureNextPower": { + "NAME": "掻き毟り", + "DESCRIPTIONS": [ + "次に #y枯渇 が発動した時、手札に #y羽根撃ち を加える。", + "次に #y枯渇 が発動した時、手札に #b", + " 枚の #y羽根撃ち を加える。" + ] + }, + "awakened:ChosensVersePower": { + "NAME": "選ばれた詩句", + "DESCRIPTIONS": [ + "このターン、次に #y非アタック カードをプレイした時、 カードを 1 枚引き #b", + " #yブロック を得る。", + "このターン、 #b", + " 回まで #y非アタック カードをプレイした時、 カードを 1 枚引き #b", + " #yブロック を得る。" + ] + }, + "awakened:AphoticFountPower": { + "NAME": "暗黒の泉", + "DESCRIPTIONS": [ + " #y氷結 をプレイした時、 #yプレートアーマー #b", + " を得る。 " + ] + }, + "awakened:GrimoirePower": { + "NAME": "ストームルーラー", + "DESCRIPTIONS": [ + "#y雷撃 が追加で #b", + " ダメージを与える。" + ] + }, + "awakened:SpellshieldPower": { + "NAME": "スペルシールド", + "DESCRIPTIONS": [ + "カードを #y保留 する度、 #b", + " #yブロック を得る。" + ] + }, + "awakened:DaggerstormPower": { + "NAME": "ダガーストーム", + "DESCRIPTIONS": [ + "カードを生成した時、ランダムな敵に #b", + " ダメージを与える。" + ] + }, + "awakened:SchemePower": { + "NAME": "スキーム", + "DESCRIPTIONS": [ + "次の #b", + " 枚の コストが #b1 以下のカードは2回プレイされる。", + "次のコストが #b1 以下のカードは2回プレイされる。" + ] + }, + "awakened:FourthDimensionPower": { + "NAME": "第四次元", + "DESCRIPTIONS": [ + "あと #b", + " ターンの間、ターン開始時に", + " ターンの間、ターン開始時に", + " のコピーがプレイされ、 #y廃棄 される。 ", + " " + ] + } +} \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/jpn/RelicStrings.json b/src/main/resources/awakenedResources/localization/jpn/RelicStrings.json new file mode 100644 index 0000000000..824a6d6a6d --- /dev/null +++ b/src/main/resources/awakenedResources/localization/jpn/RelicStrings.json @@ -0,0 +1,160 @@ +{ + "awakened:RippedDoll": { + "NAME": "裂けた人形", + "FLAVOR": "かつての自分が遺した痕。未だ秘めた魔力を宿している。", + "DESCRIPTIONS": [ + "戦闘開始から #b", + " ターンの間、ターン開始時に #yawakened:召喚 を行う。 " + ] + }, + "awakened:ShreddedDoll": { + "NAME": "引き裂かれた人形", + "FLAVOR": "あなたの無力感を思い出させるのに未だ手放せない", + "DESCRIPTIONS": [ + " ", + " 裂けた人形 [] と置き換える。 NL ターン開始時、 #yawakened:召喚 を行う。 NL 初めて魔導書がリフレッシュされた時 #y儀式 #b1 を得る。" + ] + }, + "awakened:WhiteRibbon": { + "NAME": "白いリボン", + "FLAVOR": "儀式を行わずともその言葉に力を与える", + "DESCRIPTIONS": [ + " #yawakened:詠唱 効果を持つカードをプレイする度に #b", + " #yブロック を得る。詠唱が発動する必要は無い。" + ] + }, + "awakened:HexxBomb": { + "NAME": "マナボム", + "FLAVOR": "3 2", + "DESCRIPTIONS": [ + "敵が死亡した時、持っていた #yawakened:マナバーン が他のランダムな敵に移る。" + ] + }, + "awakened:TomeOfPortalmancy": { + "NAME": "ポータルの書", + "FLAVOR": "異次元間のゲート構築と維持を詳述した魔術書", + "DESCRIPTIONS": [ + "#y空虚 が生成される度、敵全体に #b", + " #yawakened:マナバーン を与える。" + ] + }, + "awakened:EyeOfTheOccult": { + "NAME": "神秘の眼", + "FLAVOR": "この恐ろしい彫刻は持つ者に魔術の知識を与える。", + "DESCRIPTIONS": [ + "#y雷撃 と #y暗吸精 が敵全体をターゲットにする。" + ] + }, + "awakened:DeadBird": { + "NAME": "烏の魂", + "FLAVOR": "この亡霊は呪われし者共のすぐ後ろに付き纏う。", + "DESCRIPTIONS": [ + "ターン終了時、最もHPの少ない敵に #b", + " ダメージを与える。この効果は #y筋力 の影響を受ける。" + ] + }, + "awakened:AbyssBlade": { + "NAME": "アビスブレード", + "FLAVOR": "虚無の返還", + "DESCRIPTIONS": [ + "各ターン毎に初めて #yawakened:枯渇 が発生した時 [E] を得て カードを 1 枚引く。" + ] + }, + "awakened:ShardOfNowak": { + "NAME": "金彩の骨片", + "FLAVOR": "違う、そういう意味の集中じゃない。", + "DESCRIPTIONS": [ + "戦闘開始時、 #y筋力 #b", + " を得るが、HPを1でも失った時その #y筋力 を失う。" + ] + }, + "awakened:VioletPlumage": { + "NAME": "紫の羽毛", + "FLAVOR": "忘却の果て無き闇に染まった", + "DESCRIPTIONS": [ + "各戦闘で初めて [E] が余った状態でターンを終了した時、次のターン開始時に追加でカードを #b", + " 枚引く。" + ] + }, + "awakened:ZenerDeck": { + "NAME": "ゼナーデッキ", + "FLAVOR": "“1,2,3, 私には皆の視線が注がれるべきだ", + "DESCRIPTIONS": [ + "戦闘開始時、魔導書に #yESP を追加し #yawakened:召喚 する。" + ] + }, + "awakened:CawingCask": { + "NAME": "カウイングキャスク", + "FLAVOR": "儀式用に彫られた樽。鴉の神マザレスが描かれているが、中からは怪しい匂いがする", + "DESCRIPTIONS": [ + "ポーションを使用した時、 #y儀式 #b", + " を得る。" + ] + }, + "awakened:MiniBlackHole": { + "NAME": "アレシア", + "FLAVOR": "深淵より来たりて", + "DESCRIPTIONS": [ + "自分のターン中に #yパワー をプレイしなかった場合、次のターンに追加でカードを1枚引く" + ] + }, + "awakened:StrengthBooster": { + "NAME": "紙のカラス", + "FLAVOR": "疑念と呪詛を千度折り畳んだ裁定者", + "DESCRIPTIONS": [ + "敵が #yawakened:マナバーン で追加で #b", + "% のダメージを受ける。" + ] + }, + "awakened:CursedBlessing": { + "NAME": "最後の儀式", + "FLAVOR": "私の全財産を愛猫ヌードルズに託す。さらばだ、残酷な世界よ。XOXO ジョースター", + "DESCRIPTIONS": [ + "各戦闘で初めて #yawakened:詠唱 を #b", + " 回行うと #y儀式 #b", + " を得る。" + ] + }, + "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": "ゼツメイ", + "FLAVOR": "魔術師に好まれる剣。その理由は放たれた魔法を自らに取り込む能力にある。", + "DESCRIPTIONS": [ + "戦闘中に #b", + " 回スペルをプレイする度、 #yセレモニー を手札に加える。" + ] + }, + "awakened:MoonTalisman": { + "NAME": "クレセントタリスマン", + "FLAVOR": "“お願い、私を忘れないで。私が死んでも。忘れないで。”", + "DESCRIPTIONS": [ + "入手時、 #yawakened:召喚 を持たないカードを1枚選び、 #yawakened:召喚 を追加する", + "カードを選択:", + "このタリスマンは ", + " に祝福を与え、 #yawakened:召喚 を追加した", + "このレリックの効果を受けたカードはデッキから #r削除 された。" + ] + }, + "awakened:AwakenedUrn": { + "NAME": "鳥頭壺", + "FLAVOR": "鳥の神マザレスを、お茶目にかたどっている。", + "DESCRIPTIONS": [ + "各戦闘で最初の #b4 枚の #yパワー カードをプレイした時、HPを #b", + " 回復する" + ] + }, + "awakened:NerfedMummifiedHand": { + "NAME": "干乾びた手", + "FLAVOR": "それは真の力を求め、あなたのオカルト的魔術に抗う", + "DESCRIPTIONS": [ + "#yセレモニー #r以外の パワーカードをプレイした時、ランダムな手札のコストがこのターンの間 #b0 になる。" + ] + } +} diff --git a/src/main/resources/awakenedResources/localization/jpn/RunModStrings.json b/src/main/resources/awakenedResources/localization/jpn/RunModStrings.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/jpn/RunModStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/jpn/UIStrings.json b/src/main/resources/awakenedResources/localization/jpn/UIStrings.json new file mode 100644 index 0000000000..bd411a7ed5 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/jpn/UIStrings.json @@ -0,0 +1,46 @@ +{ + "awakened:SpellDescriptor": { + "TEXT": [ + "スペル" + ] + }, + "awakened:ConjureMod": { + "TEXT": [ + " NL awakened:召喚" + ] + }, + "awakened:SpellMod": { + "TEXT": [ + "[#12FAF0]スペル NL" + ] + }, + "awakened:DrainingMod": { + "TEXT": [ + " NL 次のターン、 [E] を失う。" + ] + }, + "awakened:highlightChant": { + "TEXT": [ + "awakened:詠唱 ", + "[awakenedIcon] [#12FAF0]詠唱 " + ] + }, + "awakened:Spellbook": { + "TEXT": [ + "魔導書", + "覚醒", + "#b7 枚のパワーをプレイすると #y覚醒 する! NL NL #y覚醒 中、 #y召喚 したスペルカードは #yアップグレード され、その効果が大幅に強化される。", + "#b7 枚のパワーをプレイすると #y覚醒 する! NL NL #y覚醒 中、 #y召喚 したスペルカードは #yアップグレード され、その効果が大幅に強化される。" + ] + }, + "awakened:FullSpellbook": { + "TEXT": [ + "魔導書が一杯だ!" + ] + }, + "awakened:FourthDimensionDupeAttempt": { + "TEXT": [ + "@そんな事をしたら時空連続体が崩壊してしまう!!@" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/kor/CardStrings.json b/src/main/resources/awakenedResources/localization/kor/CardStrings.json new file mode 100644 index 0000000000..df16e7e45a --- /dev/null +++ b/src/main/resources/awakenedResources/localization/kor/CardStrings.json @@ -0,0 +1,410 @@ +{ + "awakened:Thunderbolt": { + "NAME": "낙뢰", + "DESCRIPTION": "보존. NL 피해를 !D! 줍니다. NL 소멸." + }, + "awakened:BurningStudy": { + "NAME": "열정적인 학습", + "DESCRIPTION": "보존. NL 힘을 !M! 얻습니다. NL 적 전체에게 약화를 !awakened:m2! 부여합니다. NL 소멸." + }, + "awakened:Cryostasis": { + "NAME": "냉동수면", + "DESCRIPTION": "보존. NL 방어도를 !B! 얻습니다. NL 소멸." + }, + "awakened:Darkleech": { + "NAME": "어둠거머리", + "DESCRIPTION": "보존. NL 취약을 !M! 부여합니다. NL awakened:마나 *연소를 !awakened:m2! 부여합니다. NL 소멸." + }, + "awakened:DeathCoil": { + "NAME": "죽음의 휘감기", + "DESCRIPTION": "awakened:마나 *연소를 !M! 부여합니다. NL 다음 턴에 [E] 를 잃습니다." + }, + "awakened:ESPSpell": { + "NAME": "초감각", + "DESCRIPTION": "보존. NL 카드를 !M! 장 뽑습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "보존. NL 카드를 !M! 장 뽑습니다. NL 소멸." + }, + "awakened:Strike": { + "NAME": "타격", + "DESCRIPTION": "피해를 !D! 줍니다." + }, + "awakened:Defend": { + "NAME": "수비", + "DESCRIPTION": "방어도를 !B! 얻습니다." + }, + "awakened:Brainshock": { + "NAME": "뇌진탕", + "DESCRIPTION": "피해를 !D! 줍니다. NL *공허 를 버린 카드 더미에 섞어 넣습니다." + }, + "awakened:Intensify": { + "NAME": "격화", + "DESCRIPTION": "awakened:시전합니다. NL 이번 턴에 주문의 비용이 0이 되고 다시 awakened:시전할 수 없습니다.", + "UPGRADE_DESCRIPTION": "보존. awakened:시전합니다. NL 이번 턴에 주문의 비용이 0이 되고 다시 awakened:시전할 수 없습니다." + }, + "awakened:DarkEcho": { + "NAME": "어둠의 메아리", + "DESCRIPTION": "내 턴 종료 시 적 전체에게 피해를 !M! 줍니다. NL 이 카드의 피해량은 힘의 영향을 받습니다." + }, + "awakened:AwakenedForm": { + "NAME": "각성의 형상", + "DESCRIPTION": "awakened:호기심을 !M! 얻습니다. NL 의식을 !awakened:m2! 얻습니다.", + "UPGRADE_DESCRIPTION": "즉시 *깨어납니다. NL awakened:호기심을 !M! 얻습니다. NL 의식을 !awakened:m2! 얻습니다." + }, + "awakened:Spellbinder": { + "NAME": "주문구속자", + "DESCRIPTION": "내 턴 시작 시 awakened:시전합니다." + }, + "awakened:Ceremony": { + "NAME": "제식", + "DESCRIPTION": "보존. NL 힘을 !M! 얻습니다." + }, + "awakened:TalonRake": { + "NAME": "발톱 할퀴기", + "DESCRIPTION": "피해를 !D! 만큼 두 번 줍니다. NL awakened:시전합니다." + }, + "awakened:Hymn": { + "NAME": "찬가", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL *제식 을 얻습니다. NL 다음 턴에 [E] 를 잃습니다." + }, + "awakened:Psalm": { + "NAME": "시편", + "DESCRIPTION": "적 전체에게 피해를 !D! 주고 약화를 !M! 부여합니다." + }, + "awakened:DemonGlyph": { + "NAME": "악마의 문자", + "DESCRIPTION": "힘과 민첩을 !M! 얻습니다. NL *깨어난다면 추가로 !awakened:m2! 얻습니다." + }, + "awakened:TakeFlight": { + "NAME": "줄행랑", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL awakened:암송: 다음 턴 시작 시 방어도가 사라지지 않습니다." + }, + "awakened:FeatherVeil": { + "NAME": "깃털 장막", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 힘을 !M! 잃습니다." + }, + "awakened:Peck": { + "NAME": "쪼기", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 피해를 !D! 줍니다. NL 카드를 !M! 장 뽑습니다.", + "UPGRADE_DESCRIPTION": "방어도를 !B! 얻습니다. NL 피해를 !D! 줍니다. NL 카드를 !M! 장 뽑습니다." + }, + "awakened:Extension": { + "NAME": "확장", + "DESCRIPTION": "피해를 !D! 줍니다. NL 파워 카드를 사용할 때마다 버린 카드 더미에서 이 카드를 손으로 가져옵니다." + }, + "awakened:Pluck": { + "NAME": "쥐어뜯기", + "DESCRIPTION": "적 전체에게 피해를 !D! 줍니다. NL *깃털 *찌르기 를 얻습니다." + }, + "awakened:FlareShot": { + "NAME": "깃털 섬광", + "DESCRIPTION": "피해를 !D! 줍니다. NL awakened:암송: 다음 턴에 카드를 !M! 장 더 뽑습니다." + }, + "awakened:ClarionCall": { + "NAME": "날카로운 울음소리", + "DESCRIPTION": "피해를 !D! 줍니다. NL 다음에 awakened:고갈되면 [E] 를 얻습니다." + }, + "awakened:Recitation": { + "NAME": "낭송", + "DESCRIPTION": "피해를 !D! 줍니다. NL awakened:암송: 다시 피해를 !D! 줍니다." + }, + "awakened:ChosenVerse": { + "NAME": "선택받은 구절", + "DESCRIPTION": "이번 턴에 공격 카드를 제외한 카드를 !M! 장 사용할 때마다 카드를 1장 뽑고 방어도를 !B! 얻습니다." + }, + "awakened:SoulStrike": { + "NAME": "영혼 타격", + "DESCRIPTION": "피해를 !D! 만큼 !M! 번 줍니다. NL 이번 턴에 사용한 파워 카드마다 비용이 [E] 감소합니다." + }, + "awakened:Altar": { + "NAME": "제단", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 카드를 1장 소멸시킵니다. NL awakened:시전합니다." + }, + "awakened:Envision": { + "NAME": "구상", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL awakened:시전하고 뽑을 카드 더미 맨 위에 주문을 놓습니다." + }, + "awakened:Thaumaturgy": { + "NAME": "신비술", + "DESCRIPTION": "민첩을 !awakened:m2! 얻습니다. NL 다음 !M! 턴 동안 내 턴 시작 시 *제식 을 1장 손으로 가져옵니다." + }, + "awakened:WaveOfMiasma": { + "NAME": "물결치는 독기", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 적 전체에게 awakened:마나 *연소를 !awakened:m2! 부여합니다. NL 소멸." + }, + "awakened:SludgeBomb": { + "NAME": "오물 폭탄", + "DESCRIPTION": "제거 혹은 소멸된 *공허 가 있을 때만 사용할 수 있습니다. NL 적 전체에게 피해를 !D! 줍니다.", + "EXTENDED_DESCRIPTION": [ + "소멸한 공허가 존재하지 않아." + ] + }, + "awakened:KnifesEdge": { + "NAME": "예리한 칼날", + "DESCRIPTION": "힘을 !awakened:m2! 얻습니다. NL *공허 를 버린 카드 더미에 !M! 장 섞어 넣습니다." + }, + "awakened:FourthDimension": { + "NAME": "4차원", + "DESCRIPTION": "카드를 1장 소멸시킵니다. NL 뽑을 카드 더미에 그 카드를 !M! 장 복사해 섞어 넣습니다. NL 소멸.", + "EXTENDED_DESCRIPTION": [ + "4차원으로 소멸시킬 카드를 선택하십시오." + ] + }, + "awakened:RavenStrike": { + "NAME": "까마귀 타격", + "DESCRIPTION": "피해를 !D! 줍니다. NL awakened:암송: 뽑을 카드 더미 맨 위에 있는 카드를 사용합니다." + }, + "awakened:Unleash": { + "NAME": "해방", + "DESCRIPTION": "피해를 !D! 줍니다. NL 손에 있는 다른 카드 1장당 추가로 피해를 !M! 줍니다." + }, + "awakened:DesperatePrayer": { + "NAME": "절박한 기도", + "DESCRIPTION": "*제식 을 !M! 장 얻습니다. NL 소멸." + }, + "awakened:BirdsEye": { + "NAME": "섀의 눈", + "DESCRIPTION": "awakened:시전할 주문을 선택합니다.", + "UPGRADE_DESCRIPTION": "주문을 갱신합니다. awakened:시전할 주문을 선택합니다." + }, + "awakened:Initiation": { + "NAME": "입회", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL *제식 을 얻습니다." + }, + "awakened:Ensorcelate": { + "NAME": "매혹", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 다음에 사용하는 파워의 비용이 0이 됩니다." + }, + "awakened:Skyward": { + "NAME": "비상", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 카드를 !M! 장 뽑습니다. NL 이번 전투에서 사용한 파워 카드 1장당 비용이 [E] 감소합니다." + }, + "awakened:RisingChant": { + "NAME": "고조되는 합창", + "DESCRIPTION": "휘발성. NL 매 턴 처음으로 활성화된 암송 카드를 사용하면 두 번 활성화합니다.", + "UPGRADE_DESCRIPTION": "매 턴 처음으로 활성화된 암송 카드를 사용하면 두 번 활성화합니다." + }, + "awakened:FeatherWhirl": { + "NAME": "깃털 선회", + "DESCRIPTION": "*깃털 *찌르기 를 복사해 X장 얻습니다.", + "UPGRADE_DESCRIPTION": "*깃털 *찌르기 를 복사해 X+1장 얻습니다." + }, + "awakened:Murder": { + "NAME": "살해", + "DESCRIPTION": "무작위 적들에게 피해를 !D! 만큼 !M! 번 줍니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "보존. NL 무작위 적들에게 피해를 !D! 만큼 !M! 번 줍니다." + }, + "awakened:Nihil": { + "NAME": "무가치", + "DESCRIPTION": "awakened:마나 *연소를 !M! 부여합니다. NL awakened:암송: 적 전체가 부여된 awakened:마나 *연소만큼 체력을 잃습니다." + }, + "awakened:MoonlitVision": { + "NAME": "월광 시야", + "DESCRIPTION": "매 턴 처음으로 주문을 사용하면 [E] 를 얻습니다." + }, + "awakened:Rebirth": { + "NAME": "부활", + "DESCRIPTION": "죽거나 전투 종료 시 해로운 효과를 잃는 대신 체력을 !M! 회복하고 *깨어납니다." + }, + "awakened:Archmagus": { + "NAME": "대마법사", + "DESCRIPTION": "매 턴 처음으로 사용하는 주문이 2번 사용됩니다." + }, + "awakened:Planeswalk": { + "NAME": "차원 이동", + "DESCRIPTION": " [E] [E] 를 얻습니다. NL 뽑을 카드 더미에 *공허 를 1장 섞어 넣습니다.", + "UPGRADE_DESCRIPTION": " [E] [E] [E] 를 얻습니다. NL 뽑을 카드 더미에 *공허 를 1장 섞어 넣습니다." + }, + "awakened:Spew": { + "NAME": "게워내기", + "DESCRIPTION": "피해를 !D! 줍니다. NL 이 카드로 잃은 [E] 는 awakened:고갈로 취급합니다." + }, + "awakened:DarknessFalls": { + "NAME": "드리우는 어둠", + "DESCRIPTION": "awakened:고갈될 때마다 방어도를 !M! 얻고 힘을 !awakened:m2! 얻습니다.", + "UPGRADE_DESCRIPTION": "선천성. NL awakened:고갈될 때마다 방어도를 !M! 얻고 힘을 !awakened:m2! 얻습니다." + }, + "awakened:Eventide": { + "NAME": "황혼", + "DESCRIPTION": "무작위 적에게 피해를 !D! 만큼 2번 줍니다. NL 뽑을 카드 더미 맨 위에 *공허 를 놓습니다." + }, + "awakened:EclipseEmbrace": { + "NAME": "암흑의 수용", + "DESCRIPTION": "*공허 가 소멸될 때마다 다음 턴에 [E] 를 얻고 카드를 1장 뽑습니다." + }, + "awakened:Clutch": { + "NAME": "움켜쥐기", + "DESCRIPTION": "피해를 !D! 줍니다. NL 비용이 0인 카드를 1장 뽑습니다." + }, + "awakened:Gloomguard": { + "NAME": "암울한 방어", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 손에 *공허 가 있다면 이 카드의 비용이 0이 됩니다." + }, + "awakened:Carrionmaker": { + "NAME": "부패 유발자", + "DESCRIPTION": "무작위 적에게 피해를 !D! 줍니다. NL 이번 턴에 사용한 주문의 수만큼 반복합니다.", + "EXTENDED_DESCRIPTION": [ + " NL (주문을", + " 장 사용했습니다.)", + " 장 사용했습니다.)" + ] + }, + "awakened:MirePit": { + "NAME": "구렁텅이", + "DESCRIPTION": "적 전체의 힘을 이번 턴 동안 !M! 감소시킵니다. NL 다음 턴에 [E] 를 잃습니다. NL 소멸." + }, + "awakened:SingularityShield": { + "NAME": "특이점 방패", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 다음 턴에 방어도를 !B! 얻고 [E] 를 잃습니다." + }, + "awakened:Dejection": { + "NAME": "낙담", + "DESCRIPTION": "피해를 !D! 줍니다. NL 카드를 1장 소멸시킵니다. 소멸시킨 카드가 주문이면 *제식 을 얻습니다." + }, + "awakened:BloodRite": { + "NAME": "피의 제전", + "DESCRIPTION": "피해를 !D! 줍니다. NL *제식 을 얻습니다." + }, + "awakened:SongOfSorrow": { + "NAME": "비탄의 노래", + "DESCRIPTION": "*공허 를 생성할 때마다 적 전체가 체력을 !M! 잃습니다." + }, + "awakened:MysticOrder": { + "NAME": "신비로운 정렬", + "DESCRIPTION": "카드를 !M! 장 뽑습니다. NL awakened:시전합니다." + }, + "awakened:ProfaneStrike": { + "NAME": "불경한 타격", + "DESCRIPTION": "피해를 !D! 줍니다. NL 카드 1장을 뽑을 카드 더미 맨 위에 놓습니다." + }, + "awakened:Victuals": { + "NAME": "양식", + "DESCRIPTION": "awakened:암송: [E] [E] 를 얻습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "awakened:암송: [E] [E] [E] 를 얻습니다. NL 소멸." + }, + "awakened:Gather": { + "NAME": "거둬들이기", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL awakened:암송: 버린 카드 더미에서 카드 1장을 손으로 가져옵니다." + }, + "awakened:TheTower": { + "NAME": "탑", + "DESCRIPTION": "적 전체에게 피해를 !D! 줍니다. NL 이번 전투에서 생성한 카드마다 추가로 피해를 !M! 줍니다." + }, + "awakened:ArcaneNesting": { + "NAME": "숨겨진 둥지", + "DESCRIPTION": "사용불가. NL 이 카드가 손에 있을 때 파워 카드를 사용할 때마다 방어도를 !B! 얻습니다.", + "EXTENDED_DESCRIPTION": [ + "이 카드는 파워를 사용해서 방어도를 얻는 거야." + ] + }, + "awakened:MiddenHeap": { + "NAME": "쓰레기 더미", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 뽑을 카드 더미와 버린 카드 더미에서 상태이상이나 저주를 !M! 장 손으로 가져옵니다.", + "UPGRADE_DESCRIPTION": "방어도를 !B! 얻습니다. NL 뽑을 카드 더미와 버린 카드 더미에서 상태이상이나 저주를 !M! 장 손으로 가져옵니다.", + "EXTENDED_DESCRIPTION": [ + "가져올 카드를 선택하세요.", + "가져올 카드를 선택하세요." + ] + }, + "awakened:Caw": { + "NAME": "까악", + "DESCRIPTION": "피해를 !D! 줍니다. NL awakened:암송: 이번 전투 동안 모든 *까악 카드의 피해량이 !M! 증가합니다." + }, + "awakened:Scour": { + "NAME": "소탕", + "DESCRIPTION": "피해를 !D! 줍니다. NL awakened:마나 *연소를 !M! 부여합니다." + }, + "awakened:Manastorm": { + "NAME": "마나 폭풍", + "DESCRIPTION": "적 전체에게 피해를 !D! 줍니다. NL 2번 awakened:시전합니다." + }, + "awakened:StormRuler": { + "NAME": "폭풍의 지배자", + "DESCRIPTION": "awakened:시전합니다. NL *낙뢰 의 피해량이 !M! 증가합니다." + }, + "awakened:AphoticFount": { + "NAME": "무광의 샘", + "DESCRIPTION": "awakened:시전합니다. NL *냉동수면 을 사용할 때마다 expansioncontent:판금 *갑옷을 !M! 획득합니다." + }, + "awakened:Bloodthirst": { + "NAME": "피의 갈증", + "DESCRIPTION": "피해를 !D! 줍니다. NL 치명타라면 awakened:파워 *포션을 1개 얻고 이 카드를 소멸시킵니다." + }, + "awakened:Procession": { + "NAME": "행진", + "DESCRIPTION": "뽑을 카드 더미에서 카드를 1장 사용하고 그 카드의 비용만큼 *공허 를 섞어넣습니다. NL 소멸." + }, + "awakened:SplitWide": { + "NAME": "베어 가르기", + "DESCRIPTION": "피해를 !D! 줍니다. NL 대상을 공격할 때마다 힘을 !M! 얻습니다. NL 이번 턴이 끝날 때 이 카드로 얻은 힘을 잃습니다. NL 소멸." + }, + "awakened:Spellshield": { + "NAME": "주문 방패", + "DESCRIPTION": "카드를 보존할 때마다 방어도를 !M! 얻습니다." + }, + "awakened:Siphon": { + "NAME": "추출", + "DESCRIPTION": "피해를 !D! 줍니다. NL awakened:암송: 이번 턴에 힘을 !M! gremlin:강탈합니다." + }, + "awakened:PlumeJab": { + "NAME": "깃털 찌르기", + "DESCRIPTION": "보존. NL 무작위 적에게 피해를 !D! 만큼 2번 줍니다. NL 소멸." + }, + "awakened:Primacy": { + "NAME": "우두머리", + "DESCRIPTION": "매 턴 처음으로 힘을 얻으면 카드를 1장 뽑습니다.", + "UPGRADE_DESCRIPTION": "매 턴 최대 !M! 번 힘을 얻을 때마다 카드를 1장 뽑습니다." + }, + "awakened:Daggerstorm": { + "NAME": "단검 폭풍", + "DESCRIPTION": "카드를 생성할 때마다 무작위 적에게 피해를 !M! 줍니다." + }, + "awakened:PackRat": { + "NAME": "보따리 쥐", + "DESCRIPTION": "피해를 !D! 만큼 2번 줍니다. NL 방어도를 !B! 만큼 2번 얻습니다. NL 무작위 포션을 1개 얻습니다. NL 소멸." + }, + "awakened:Mantis": { + "NAME": "사마귀", + "DESCRIPTION": "힘을 !M! 얻습니다. NL *깃털 *찌르기 를 얻습니다." + }, + "awakened:ManaShield": { + "NAME": "마나 방패", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL awakened:시전합니다. NL 손에 있는 무작위 주문의 비용을 1 낮춥니다." + }, + "awakened:Crusher": { + "NAME": "맹격", + "DESCRIPTION": "보존. NL 피해를 !D! 줍니다. NL 카드가 생성될 시 사용하기 전까지 이 카드의 비용을 1 낮춥니다." + }, + "awakened:Minniegun": { + "NAME": "미니건", + "DESCRIPTION": "피해를 !D! 만큼 !M! 번 줍니다. NL 뽑을 카드 더미에 *공허 를 1장 섞어 넣습니다." + }, + "awakened:SignInBlood": { + "NAME": "피의 서약", + "DESCRIPTION": "피해를 !awakened:m2! 받습니다. NL 카드를 !M! 장 뽑습니다. NL 힘을 !awakened:m2! 얻습니다. NL 소멸." + }, + "awakened:SpreadingSpores": { + "NAME": "퍼져나가는 포자", + "DESCRIPTION": "휘발성. NL 가시를 !M! 얻습니다. NL 이 카드를 1장 복사해 뽑을 카드 더미에 섞어 넣습니다." + }, + "awakened:Scheme": { + "NAME": "책략", + "DESCRIPTION": "이번 턴에 다음으로 사용하는 비용이 1 이하인 카드가 두 번 사용됩니다.", + "UPGRADE_DESCRIPTION": "이번 턴에 최대 !M! 번 다음으로 사용하는 비용이 1 이하인 카드가 두 번 사용됩니다." + }, + "awakened:TheEncyclopedia": { + "NAME": "백과사전", + "DESCRIPTION": "무작위 카드 !M! 장 중 2장을 선택해 손으로 가져옵니다. 그 카드의 비용을 2 낮춥니다. NL 소멸.", + "EXTENDED_DESCRIPTION": [ + "뽑을 카드 더미에서 가져올 카드 2장을 선택하십시오." + ] + }, + "awakened:RealityRift": { + "NAME": "현실의 균열", + "DESCRIPTION": "*다른 *차원의 강력한 카드 !M! 장 중 !awakened:m2! 장을 선택해 얻습니다. NL 버린 카드 더미에 *공허 를 2장 섞어 넣습니다. NL 소멸." + }, + "awakened:Inscribe": { + "NAME": "각인", + "DESCRIPTION": "주문을 선택합니다. 이번 전투 동안 그 카드를 !M! 장 복사해 주문서에 섞어 넣고 그 카드를 얻습니다.", + "UPGRADE_DESCRIPTION": "awakened:시전합니다. NL 주문을 선택합니다. 이번 전투 동안 그 카드를 !M! 장 복사해 주문서에 섞어 넣고 그 카드를 얻습니다." + } +} diff --git a/src/main/resources/awakenedResources/localization/kor/CharacterStrings.json b/src/main/resources/awakenedResources/localization/kor/CharacterStrings.json new file mode 100644 index 0000000000..1de4c3b97e --- /dev/null +++ b/src/main/resources/awakenedResources/localization/kor/CharacterStrings.json @@ -0,0 +1,13 @@ +{ + "awakened:awakenedOne": { + "NAMES": [ + "깨어난 자", + "깨어난 자" + ], + "TEXT": [ + "저편에서 온 광신자들의 크나큰 업적이자 불멸의 흑마법사입니다. NL 공허와 다른 모든 원소를 지배하는 힘을 지니고 있습니다.", + "NL 가장 위대한 주문을 시전합니다...", + "조명이 없는 거리에서, 어둠의 의식을 치르고 있는 대여섯 명의 후드를 눌러싼 자들이 보입니다. 당신이 다가가자, 그들은 섬뜩한 미소를 지으며 돌아섰습니다. 그들 중 가장 키 큰 이는 송곳니가 길게 삐져나와 있습니다. 그가 당신에게 창백한 손을 내밉니다. NL ~\"우리와~ ~함께~ ~하자~ ~승천한~ ~자여,~ ~첨탑의~ ~따스함을~ ~느낄~ ~수~ ~있다네.\"~" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/kor/EventStrings.json b/src/main/resources/awakenedResources/localization/kor/EventStrings.json new file mode 100644 index 0000000000..5b9615caf6 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/kor/EventStrings.json @@ -0,0 +1,88 @@ +{ + "awakened:Nest": { + "NAME": "둥지", + "DESCRIPTIONS": [ + "당신은 #p둥지를 발견하고 다시 돌아왔습니다. NL 이곳은 당신이 #b~살아있는~ #b~신의~ #b~대리자의~ #b~자리에~ 오르게 된 장소입니다. 당신은 성당에 들어서는 순간 @까악거리며@ @환호하는@ 광신자들에게 둘러싸였습니다! NL 광신자들은 당신이 이곳에 오면 종종 #r@십일조를@ 요구하고는 한다는 것을 잘 알고 있습니다...", + "앞으로의 전투는 점점 어려워질 테니, 지금이 바로 무기고에 특별한 무기를 물색할 완벽한 기회입니다. NL NL #r@...하지만@ #r@단검은@ #r@아니었습니다.@ NL NL 당신은 엄청나게 강한 #y유물을 소환하기 위해 강력한 의식을 수행했지만, 의식의 수행은 당신에게 큰 타격을 줬습니다. NL NL 당신은 새로운 무기가 깨어날 시 혼란을 일으킬 수 있으리라는 희망을 품고서, 녹초가 된 상태로 둥지를 떠났습니다.", + "점점 더 많은 무리가 줄을 서며, 당신에게 제물을 바칩니다. NL NL 대부분은 @쓸모없는@ @쓰레기들이지만,@ 누군가가 흥미로운 제물: 이후 전투에서 큰 도움이 될 수도 있는 #b강력한 #b영약을 바쳤습니다. NL NL 당신은 얼마 지나지 않아 둥지를 떠나고 첨탑을 내려가는 여정을 이어갔습니다.", + "광신자들은 자신들의 보물인 동상이 다시 돌아온 것을 보자마자 평소보다 훨씬 더 많이 모여들어 당신을 둘러쌉니다. NL 이 경사스러운 일을 맞아, 선물과 영혼이 쏟아져내립니다! NL 축하 행사가 끝나고 둥지를 떠날 시간이 되니, 당신은 이 시간을 이용해 더 좋은 무기를 찾는 게 더 나았을 것 같다는 사실을 깨닫습니다... NL NL 아무튼 이미 늦었으니, 나아가기로 합니다.", + "#r@\"새의@ #r@신님께서!!@ #r@돌아오셨다!!\"@ NL #b~\"까악~ #b~까악~ #b~까아아아악!\"~ NL 조각상을 파괴하지 않기로 했던 결정이 확실히 도움이 됐습니다.", + "", + "", + "광신자들은 자신들의 보물인 동상이 다시 돌아온 것을 보고 평소보다 훨씬 더 많이 모여들어 당신을 둘러쌉니다. NL 이 경사스러운 일을 맞아, 선물과 영혼이 쏟아져내립니다! NL 축하 행사가 끝나고 둥지를 떠날 시간이 되니, 당신은 이 시간을 이용해 더 좋은 무기를 찾는 게 더 나았을 것 같다는 사실을 깨닫습니다... NL NL 아무튼 이미 늦었으니, 나아가기로 합니다.", + "당신은 빠르게 기부 상자와 금고로 이동해, 모든 동전을 최대한 챙기고 #y유물도 찾아보기로 했습니다. NL NL 피 그 자체로 지불된 동전들은 #b영혼을 대체할 유용한 수단으로 사용할 수 있을 것입니다. NL NL #y유물 또한 물론, 앞으로 찾아올 시련에서 큰 도움이 될 것입니다. NL NL 기부 상자에서 피에 젖은 동전을 꺼내 최대한 챙겨보려고 했지만, 당신은 금고 안이 상당히 비어있다는 것을 깨닫습니다... NL NL NL ~...~", + "#r@약탈을...@ 당한 걸까요? 둥지에 #p도둑이 든 걸까요? NL NL 물론, 그런 일은 ~절대로~ 일어날 수 없습니다. NL NL NL 그런 생각을 한다는 것 자체가 멍청한 일입니다. NL NL NL ~...그렇겠죠?~ NL NL NL 당신은 #y~남아있는~ #y~의심들은~ 일단 제쳐두고서 둥지를 떠납니다." + ], + "OPTIONS": [ + "[조각상을 돌려준다] #r부서진 #r날개 #r조각상을 #r잃습니다. #g많은 #g보상을 #g얻습니다.", + "[잠김] 부서진 날개 조각상이 필요합니다.", + "[제물을 걷는다] #g호기심 #g포션을 #g얻습니다.", + "[무기를 소환한다] #g특별한 #g유물을 #g획득합니다. #r최대 #r체력을 #r", + " #r잃습니다.", + "[기부 상자] #g골드를 #g", + " #g얻고 #g일반 #g유물을 #g하나 #g얻습니다. #r저주를 #r받습니다. #r- #r의심.", + "[떠난다]", + "[계속한다]", + "[칭찬 받기!] #g부서진 #g날개 #g조각상을 돌려놓은 #g보상을 #g받습니다.", + "[계속한다] - #r저주를 #r받습니다. #r- #r의심." + ] + }, + "awakened:WingStatueAwakened": { + "NAME": "날개 조각상", + "DESCRIPTIONS": [ + "돌덩이와 바위 사이에서, 당신은 까마귀의 신 마잘레스를 묘사하고 있는 복잡하고 커다란 푸른 조각상을 발견했습니다. NL NL 갑작스러운 강렬한 분노와 조각상을 파괴하고 싶다는 욕망이 느껴집니다. NL NL 하지만, 그럴 경우 은인의 분노를 불러올 수 있다는 건 이미 잘 알고 있는 사실입니다.", + "당신은 조각상을 파괴할 위험을 감수할 가치는 없다고 판단한 뒤, 그 대신 조각상을 가져가기로 합니다. NL 조각상의 무게에 잠시 당황했지만, 이윽고 재빨리 조각상을 짊어진 채로 이동했습니다.", + "조각상을 부숴 완전히 산산조각냈습니다! NL 당신은 잔해 속에서 여전히 마법의 기운이 남아있는 날카로운 조각을 발견했습니다. NL 길을 떠나자, #p어둠의 #p에너지가 당신의 피로 스며들어오는 것이 느껴집니다.", + "당신은 지나쳐 버리고는 가던 길을 갑니다.", + "까...까악?! 새의 신님께 바칠 공물?", + "까악-까아악!!", + "교환을? 괜찮은 제안이로군...", + "교단에서 만족스러워하겠군..." + ], + "OPTIONS": [ + "[파괴한다] #g날카로운 #g조각을 #g얻습니다. #r저주를 #r2장 #r받습니다. #r- #r혈우병.", + "[수집한다] #r체력을 #r", + "[떠난다]", + " #r잃습니다. #g부서진 #g날개 #g조각상을 #g얻습니다." + ] + }, + "awakened:BackToBasics": { + "NAME": "", + "DESCRIPTIONS": [ + "삶을 위한 투쟁 외에 중요한 것은 없습니다. 오직 지금과 현재 뿐이죠." + ], + "OPTIONS": [ + "[절망] #g타격과 #g수비에 #g고갈이 #g추가됩니다.", + "[잠김] 타격이나 수비가 필요합니다." + ] + }, + "awakened:AbyssEvent": { + "NAME": "심연에서", + "DESCRIPTIONS": [ + "도시를 지나던 당신에게 갑작스레 #p현실과 @괴리되는@ 듯한... 기묘한 느낌이 듭니다. NL 모든 감각을 잃어버리는 와중에도 당신 앞에 놓인 #p마도서는 또렷이 보입니다. 이윽고 ~이세계의~ ~부름이~ 들려옵니다... NL \n\n\"깨어난 아이여. 무한의 차원을 걷는 자여. 논할 것이 있도다. 내 손을 잡거라. 그러면 그대가 찾던 이 차원의 이해를 넘어선 세계의... 미지의 괴물, 기기, 마법, 그 지식을 구할지니.\"", + "\"좋다. 이 동맹으로 더욱 강력해질지니.\"\n\n NL 당신은 #p이세계의 #p공포는 뒤로한 채, 마도서를 쥐며 펼쳐진 무한한 가능성의 세계를 만끽합니다...", + "당신은 유혹에서 벗어나 수상한 #p마도서를 뒤로한 채 날개를 펼치고 떠나버립니다." + ], + "OPTIONS": [ + "[잡는다] #g현실의 #g균열을 #g얻습니다. #r저주를 #r받습니다. #r- #r노쇠.", + "[떠난다]", + "[떠난다]" + ] + }, + "awakened:CultTalk": { + "NAME": "TalkStrings", + "DESCRIPTIONS": [ + "@주여!@ @용서를 구하나이다!@", + "@이제@ @나의@ @시대다!@", + "@까아아아악!@ @까악@ @까악@ @까악@ @까아아아악!!!!@", + + "@제@ @피를@ @새의@ @신님께@ @바치나이다!@", + "@비록@ @이@ @한몸@ @보잘@ @것@ @없지만!@", + "@이@ @한몸@ @바쳐@ @교단은@ @더욱@ @번영할지어다!!!@", + + "~이~ ~의식으로~ ~저는~ ~구원받겠군요…~", + "~...~", + "~제게~ ~주어진~ ~선택지~ ~하나뿐이었네요…~" + ] + } +} diff --git a/src/main/resources/awakenedResources/localization/kor/KeywordStrings.json b/src/main/resources/awakenedResources/localization/kor/KeywordStrings.json new file mode 100644 index 0000000000..d41a630835 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/kor/KeywordStrings.json @@ -0,0 +1,85 @@ +[ + { + "PROPER_NAME": "파워 포션", + "NAMES": [ + "파워", + "파워 포션", + "파워_포션", + "파워포션", + "Power Potion", + "Power_Potion", + "power_potion", + "powerpotion" + ], + "DESCRIPTION": "#y포션: 무작위 #y파워 카드 #b셋 중 #b하나를 선택해 얻습니다. 이번 턴 동안 그 카드의 비용이 #b0이 됩니다." + }, + { + "PROPER_NAME": "시전", + "NAMES": [ + "시전", + "시전할", + "시전하고", + "시전하는", + "시전합니다", + "깨어난", + "깨어난다면", + "깨어납니다", + "conjure", + "conjured", + "awaken" + ], + "DESCRIPTION": "주문서에 첫 번째로 표시된 주문 카드를 얻습니다." + }, + { + "PROPER_NAME": "암송", + "NAMES": [ + "암송", + "chant" + ], + "DESCRIPTION": "마지막으로 사용한 카드가 #y파워 카드라면 #y암송 뒤에 적힌 효과가 발동합니다." + }, + { + "PROPER_NAME": "주술", + "NAMES": [ + "주술", + "hex", + "hexxed", + "hexx" + ], + "DESCRIPTION": "#y주술이 부여된 대상은 부여된 중첩마다 다음 공격으로 #b20%의 피해를 추가로 입습니다. #y주술은 공격을 1회 받은 후에 모두 제거됩니다." + }, + { + "PROPER_NAME": "고갈", + "NAMES": [ + "고갈", + "고갈로", + "고갈될", + "고갈되면", + "drain", + "drained" + ], + "DESCRIPTION": "[E] 를 잃게 하는 모든 효과를 의미하며, 실제로 [E] 를 잃지 않더라도 해당합니다. (카드를 사용해 소모한 [E] 는 포함하지 않습니다.)" + }, + { + "PROPER_NAME": "마나연소", + "NAMES": [ + "마나", + "마나 연소", + "마나_연소", + "마나연소를", + "마나연소가", + "마나연소", + "manaburn" + ], + "DESCRIPTION": "실제로 잃게 될 [E] 가 없더라도, [E] 를 잃을 때마다 #y마나 #y연소와 동일한 체력을 잃습니다. (카드를 사용해 소모한 [E] 는 포함하지 않습니다.)" + }, + { + "PROPER_NAME": "호기심", + "NAMES": [ + "호기심", + "호기심을", + "curiosity" + ], + "DESCRIPTION": "#y파워 카드를 사용할 때마다, #y힘을 #b1 얻습니다." + } +] \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/kor/MonsterStrings.json b/src/main/resources/awakenedResources/localization/kor/MonsterStrings.json new file mode 100644 index 0000000000..22fdca1b26 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/kor/MonsterStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/kor/OrbStrings.json b/src/main/resources/awakenedResources/localization/kor/OrbStrings.json new file mode 100644 index 0000000000..22fdca1b26 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/kor/OrbStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/kor/PotionStrings.json b/src/main/resources/awakenedResources/localization/kor/PotionStrings.json new file mode 100644 index 0000000000..2d88c7d93a --- /dev/null +++ b/src/main/resources/awakenedResources/localization/kor/PotionStrings.json @@ -0,0 +1,30 @@ +{ + "awakened:PhaseSkip": { + "NAME": "선조의 음료", + "DESCRIPTIONS": [ + "즉시 #y깨어납니다. 모든 카드를 이번 전투 동안 #y강화합니다." + ] + }, + "awakened:CultistsDelight": { + "NAME": "광신자의 환희", + "DESCRIPTIONS": [ + "이번 전투 동안 #y파워 카드를 사용할 때마다 #y힘을 #b", + " 얻습니다. 이번 턴 동안 비용이 #b0 인 무작위 #y파워 카드 한 장을 얻습니다." + ] + }, + "awakened:SacramentalWine": { + "NAME": "성찬식 와인", + "DESCRIPTIONS": [ + "이번 전투 동안 #y파워 카드를 사용할 때마다 #y방어도를 #b", + " 얻습니다. 이번 턴 동안 비용이 #b0 인 무작위 #y파워 카드 한 장을 얻습니다." + ] + }, + "awakened:SneckoPowersPotion": { + "NAME": "스네코 정수", + "DESCRIPTIONS": [ + "무작위 #y다른 #y직업 카드 #b셋 중 #b하나를 선택해 얻습니다. 이번 턴 동안 그 카드의 비용이 #b0이 됩니다.", + "무작위 #y다른 #y직업 카드 #b셋 중 #b하나를 선택해 그 카드를 #b", + " 장 복사해 얻습니다. 이번 턴 동안 그 카드의 비용이 #b0이 됩니다." + ] + } +} diff --git a/src/main/resources/awakenedResources/localization/kor/PowerStrings.json b/src/main/resources/awakenedResources/localization/kor/PowerStrings.json new file mode 100644 index 0000000000..45108c291f --- /dev/null +++ b/src/main/resources/awakenedResources/localization/kor/PowerStrings.json @@ -0,0 +1,249 @@ +{ + "awakened:IntensifyPower": { + "NAME": "격화", + "DESCRIPTIONS": [ + "이번 턴에 모든 주문 카드의 비용이 #b0 이 됩니다.", + "다음 #b", + " 턴 동안, 모든 주문 카드의 비용이 #b0 이 됩니다." + ] + }, + "awakened:IntensifyDebuffPower": { + "NAME": "탈진", + "DESCRIPTIONS": [ + "이번 턴 동안 #y시전할 수 없습니다.", + "다음 #b", + " 턴 동안 #y시전할 수 없습니다." + ] + }, + "awakened:RisingChantPower": { + "NAME": "고조되는 합창", + "DESCRIPTIONS": [ + "다음 #b", + " 번 활성화된 #y암송 카드를 사용하면 사용하면 두 번 활성화합니다. NL 이번 턴에 #b", + " 번 가능합니다." + ] + }, + "awakened:CursedStrength": { + "NAME": "어둠의 축복", + "DESCRIPTIONS": [ + "#y고갈될 때마다 #y힘을 #b", + " 얻습니다." + ] + }, + "awakened:ThaumaturgyPower": { + "NAME": "신비술", + "DESCRIPTIONS": [ + "다음 #b", + " 턴 동안 내 턴 시작 시 #y제식을 손으로 가져옵니다." + ] + }, + "awakened:SacramentPower": { + "NAME": "성찬식", + "DESCRIPTIONS": [ + "#y파워 카드를 사용할 때마다 #y방어도를 #b", + " 얻습니다." + ] + }, + "awakened:FlarePower": { + "NAME": "깃털 섬광", + "DESCRIPTIONS": [ + "이번 턴에 #y공격 #y카드를 #y제외한 카드를 사용할 때마다 모든 적이 체력을 #b", + " 잃습니다." + ] + }, + "awakened:PrimacyPower": { + "NAME": "우두머리", + "DESCRIPTIONS": [ + "매 턴 처음으로 #y힘을 얻으면 카드를 1장 뽑습니다.", + "매 턴 최대 #b", + " 번 #y힘을 얻을 때마다 카드를 #b1 장 뽑습니다.", + " NL 이 효과는 이번 턴에 #b", + " 번 더 발동할 수 있습니다.", + " 번 더 발동할 수 있습니다.", + " NL 이번 턴에 더 이상 발동하지 않습니다." + ] + }, + "awakened:SpellbinderPower": { + "NAME": "주문구속자", + "DESCRIPTIONS": [ + "내 턴 시작 시 #y시전합니다.", + "내턴 시작 시 #b", + " 번 #y시전합니다." + ] + }, + "awakened:DarkEchoPower": { + "NAME": "어둠의 메아리", + "DESCRIPTIONS": [ + "내 턴 종료 시 적 전체에게 피해를 #b", + " 만큼 #b", + " 번 #y줍니다.", + " 줍니다." + ] + }, + "awakened:MoonlitVisionPower": { + "NAME": "월광 시야", + "DESCRIPTIONS": [ + "매 턴 처음으로 주문을 사용하면 [E] 를 얻습니다.", + "매 턴 최대 #b", + " 번 주문을 사용할 때마다 [E] 를 얻습니다.", + " NL 이번 턴 #b", + " 번 남았습니다." + ] + }, + "awakened:EclipseEmbracePower": { + "NAME": "암흑의 수용", + "DESCRIPTIONS": [ + "#y공허가 #y소멸될 때마다 다음 턴에 에너지를 #b1 얻고 카드를 1장 뽑습니다.", + "#y공허가 #y소멸될 때마다 다음 턴에 에너지를 #b", + " 얻고 카드를 #b", + " 장 뽑습니다." + ] + }, + "awakened:SongOfSorrowPower": { + "NAME": "비탄의 노래", + "DESCRIPTIONS": [ + "#y공허를 생성할 때마다 적 전체가 체력을 #b", + " 잃습니다." + ] + }, + "awakened:ShroudOfMiasmaPower": { + "NAME": "물결치는 독기", + "DESCRIPTIONS": [ + "#y주술을 지닌 적을 공격할 때마다 #y방어도를 #b", + " 얻습니다." + ] + }, + "awakened:StrengthReturnPower": { + "NAME": "베어 가르기", + "DESCRIPTIONS": [ + "이 적을 공격할 때마다 #y힘을 #b", + " 얻고 턴 종료 시 잃습니다." + ] + }, + "awakened:ManaburnPower": { + "NAME": "마나 연소", + "DESCRIPTIONS": [ + "#y고갈될 때마다 체력을 #b", + " 잃습니다." + ] + }, + "awakened:ArchmagusPower": { + "NAME": "대마법사", + "DESCRIPTIONS": [ + "매 턴 처음으로 사용하는 주문이 #b2 번 사용됩니다.", + "매 턴 다음 사용하는 주문이 최대 #b", + " 장 #b2 번 사용됩니다.", + " NL (주문 반복이 #b", + " 번 남았습니다.)" + ] + }, + "awakened:DoubleSpellPower": { + "NAME": "주문 반복", + "DESCRIPTIONS": [ + "이번 턴에 다음 사용하는 주문이 #b2 번 사용됩니다.", + "이번 턴에 최대 #b", + " 번 다음 사용하는 주문이 #b2 번 사용됩니다." + ] + }, + "awakened:DarknessFallsPower": { + "NAME": "드리우는 어둠", + "DESCRIPTIONS": [ + "#y고갈될 때마다 #y힘을 #b", + " 얻습니다." + ] + }, + "awakened:VoidRefundPower": { + "NAME": "날카로운 울음소리", + "DESCRIPTIONS": [ + "다음에 #y고갈되면 #y에너지를 #b1 얻습니다.", + "다음에 #y고갈되면 #y에너지를 #b", + " 얻습니다." + ] + }, + "awakened:DemonGlyphPower": { + "NAME": "악마의 문자", + "DESCRIPTIONS": [ + "#y깨어난다면 #y힘과 #y민첩을 #b", + " 얻습니다." + ] + }, + "awakened:ReverseRitualPower": { + "NAME": "각성의 형상", + "DESCRIPTIONS": [ + "내 턴 시작 시 #y의식을 #b", + " 얻습니다." + ] + }, + "awakened:EnsorcelatePower": { + "NAME": "매혹", + "DESCRIPTIONS": [ + "다음 사용하는 #y파워 카드의 비용이 #b0이 됩니다.", + "이번 턴에 최대 #b", + " 번 다음 사용하는 #y파워 카드의 비용이 #b0이 됩니다." + ] + }, + "awakened:ConjureNextPower": { + "NAME": "쥐어뜯기", + "DESCRIPTIONS": [ + "다음에 #y고갈되면 #y깃털 #y찌르기를 얻습니다.", + "다음에 #y고갈되면 #y깃털 #y찌르기를 #b", + " 장 얻습니다." + ] + }, + "awakened:ChosensVersePower": { + "NAME": "선택받은 구절", + "DESCRIPTIONS": [ + "이번 턴에 다음으로 공격 카드를 제외한 카드를 사용하면 카드를 1장 뽑고 #y방어도를 #b", + " 얻습니다.", + "이번 턴에 최대 #b", + " 번 다음으로 공격 카드를 제외한 카드를 사용할 때마다 카드를 1장 뽑고 #y방어도를 #b", + " 얻습니다." + ] + }, + "awakened:AphoticFountPower": { + "NAME": "무광의 샘", + "DESCRIPTIONS": [ + "#y냉동수면을 사용할 때마다 #y판금 #y갑옷을 #b", + " 얻습니다." + ] + }, + "awakened:GrimoirePower": { + "NAME": "폭풍의 지배자", + "DESCRIPTIONS": [ + "#y날뢰의 피해량이 #b", + " 증가합니다." + ] + }, + "awakened:SpellshieldPower": { + "NAME": "주문 방패", + "DESCRIPTIONS": [ + "카드가 #y보존될 때마다 #y방어도를 #b", + " 얻습니다." + ] + }, + "awakened:DaggerstormPower": { + "NAME": "단검 폭풍", + "DESCRIPTIONS": [ + "카드를 생성할 때마다 무작위 적에게 피해를 #b", + " 줍니다." + ] + }, + "awakened:SchemePower": { + "NAME": "책략", + "DESCRIPTIONS": [ + "이번 턴에 최대 #b", + " 번 다음으로 사용하는 비용이 #b1 이하인 카드가 두 번 사용됩니다.", + "이번 턴에 다음으로 사용하는 비용이 #b1 이하인 카드가 두 번 사용됩니다." + ] + }, + "awakened:FourthDimensionPower": { + "NAME": "4차원", + "DESCRIPTIONS": [ + "다음 #b", + " 턴 동안 내 턴 시작 시 ", + " 턴 동안 내 턴 시작 시 ", + "카드를 복사해 사용하고 복사한 ", + " 카드를 #y소멸시킵니다." + ] + } +} \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/kor/RelicStrings.json b/src/main/resources/awakenedResources/localization/kor/RelicStrings.json new file mode 100644 index 0000000000..0c01abcf65 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/kor/RelicStrings.json @@ -0,0 +1,160 @@ +{ + "awakened:RippedDoll": { + "NAME": "찢어진 인형", + "FLAVOR": "과거의 자신을 떠오르게 하는 마지막 물건입니다. 마법을 품고 있습니다.", + "DESCRIPTIONS": [ + "전투 시작 후 #b", + " 턴 동안 #yawakened:시전합니다." + ] + }, + "awakened:ShreddedDoll": { + "NAME": "산산조각난 인형", + "FLAVOR": "자신의 약한 부분을 떠오르게 만들지만, 아직은 버릴 수 없습니다.", + "DESCRIPTIONS": [ + " ", + "과[] 교체합니다. 내 턴 시작 시 #yawakened:시전합니다. 전투마다 처음으로 주문을 갱신할 때마다 #y의식을 #b1 얻습니다." + ] + }, + "awakened:WhiteRibbon": { + "NAME": "하얀 리본", + "FLAVOR": "적합한 의식 과정 없이도, 내뱉는 말에 힘을 실어줍니다.", + "DESCRIPTIONS": [ + "#yawakened:암송 카드를 사용할 때마다 #y방어도를 #b", + " 얻습니다. #y암송 카드가 발동되지 않아도 방어도를 얻습니다." + ] + }, + "awakened:HexxBomb": { + "NAME": "마나 폭탄", + "FLAVOR": "3... 2...", + "DESCRIPTIONS": [ + "적이 죽을 때 지닌 #yawakened:마나 #y연소가 무작위로 다른 적에게 옮겨집니다." + ] + }, + "awakened:TomeOfPortalmancy": { + "NAME": "포탈술사의 서적", + "FLAVOR": "차원 이동 관문의 건설 및 유지보수에 관한 자세한 설명이 실려있는 마법서입니다.", + "DESCRIPTIONS": [ + "#y공허가 #y소멸될 때마다 적 전체에게 #yawakened:마나 #y연소를 #b", + " 부여합니다." + ] + }, + "awakened:EyeOfTheOccult": { + "NAME": "신비로운 눈", + "FLAVOR": "이 끔찍한 조각품은 소유자에게 마법 지식을 선사합니다.", + "DESCRIPTIONS": [ + "#y낙뢰와 #y어둠거머리가 적 전체를 대상으로 합니다." + ] + }, + "awakened:DeadBird": { + "NAME": "까마귀의 영혼", + "FLAVOR": "이 악령은 저주받은 자와 죄지은 자의 뒤를 쫓습니다.", + "DESCRIPTIONS": [ + "턴 종료 시 가장 체력이 낮은 적에게 피해를 #b", + " 줍니다. 이 유물의 #y피해량은 힘에 따라 증가합니다." + ] + }, + "awakened:AbyssBlade": { + "NAME": "심연의 칼날", + "FLAVOR": "심연의 복수.", + "DESCRIPTIONS": [ + "턴마다 처음으로 #yawakened:고갈될 때마다 [E] 를 얻고 카드를 1장 뽑습니다." + ] + }, + "awakened:ShardOfNowak": { + "NAME": "황금 뼛조각", + "FLAVOR": "...아뇨, 집중 표시가 아닙니다.", + "DESCRIPTIONS": [ + "전투 시작 시 #y힘을 #b", + " 얻습니다. 어떤 방식이든 체력을 잃을 시 남은 전투 동안 그 #y힘을 잃습니다." + ] + }, + "awakened:VioletPlumage": { + "NAME": "보라색 깃털", + "FLAVOR": "끝없는 망각의 어둠에 가려져 있습니다.", + "DESCRIPTIONS": [ + "전투마다 처음 내 턴 종료 시 [E] 가 남아있다면 내 다음 턴 시작 시 카드를 #b", + " 장 더 뽑습니다." + ] + }, + "awakened:ZenerDeck": { + "NAME": "제너 덱", + "FLAVOR": "“하나, 둘, 셋, 저만 바라보세요.”", + "DESCRIPTIONS": [ + "전투 시작 시 주문서에 #y초감각을 추가하고 이를 #yawakened:시전합니다." + ] + }, + "awakened:CawingCask": { + "NAME": "까악대는 통", + "FLAVOR": "의식을 통해 조각된 까마귀 신 마잘레스를 묘사하고 있는 통으로, 안의 내용물에선 수상쩍은 냄새가 납니다...", + "DESCRIPTIONS": [ + "포션을 사용할 때마다 #y의식을 #b", + " 얻습니다." + ] + }, + "awakened:MiniBlackHole": { + "NAME": "알레테아", + "FLAVOR": "심연에서 올라왔습니다.", + "DESCRIPTIONS": [ + "내 턴 동안 파워 카드를 사용하지 않았다면 다음 턴에 카드를 #b1 장 더 뽑습니다." + ] + }, + "awakened:StrengthBooster": { + "NAME": "종이 까마귀", + "FLAVOR": "의심과 저주의 중재자는 천 번이나 접히게 됐습니다...", + "DESCRIPTIONS": [ + "적들이 #yawakened:마나 #y연소를 통해 #b", + "%의 피해를 추가로 받습니다." + ] + }, + "awakened:CursedBlessing": { + "NAME": "최후의 의식", + "FLAVOR": "제 모든 재산을 제 고양이, 누들에게 남깁니다. 잘 있어라, 잔인한 세상아. XOXO Jouster", + "DESCRIPTIONS": [ + "전투에서 최대 #b", + " 번 #yawakened:암송 효과를 발동할 때마다 의식을 #b", + " 얻습니다." + ] + }, + "awakened:CurvedSwordMeme": { + "NAME": "영창의 칼날", + "FLAVOR": "자, 어서, 칼날을 영창해봐, 지금 당장. 내가 보고 있어. :^)", + "DESCRIPTIONS": [ + "전투 시작 시 #y영창의 #y칼날을 손으로 가져올까요?", + "참고: 플레이어는 콘솔 외부에서 해당 유물을 획득할 수 없으며, 농담성 유물입니다!" + ] + }, + "awakened:CurvedSword": { + "NAME": "절명", + "FLAVOR": "집중 마법을 되돌려주는 능력 덕에 마법사들에게 선호되는 칼입니다.", + "DESCRIPTIONS": [ + "전투에서 주문을 #b", + " 장 사용할 때마다 #y제식을 얻습니다." + ] + }, + "awakened:MoonTalisman": { + "NAME": "신월의 부적", + "FLAVOR": "“제발, 제가 죽은 뒤에도 절 잊지 말아주세요.”", + "DESCRIPTIONS": [ + "획득 시 #yawakened:시전 효과가 없는 카드를 1장 선택합니다. 그 카드에 #yawakened:시전 효과를 추가합니다.", + " ", + "부적의 축복을 받았습니다: ", + " 의 효과로 #yawakened:시전을 추가할 카드를 선택하세요.", + "이 유물로 선택한 카드가 덱에서 #r제거되어 유물이 비활성화됐습니다." + ] + }, + "awakened:AwakenedUrn": { + "NAME": "새 머리 화병", + "FLAVOR": "이 항아리는 까마귀 신 마잘레스의 장난스러운 모습을 표현하고 있습니다.", + "DESCRIPTIONS": [ + "전투마다 처음으로 #y파워 카드를 #b4장 사용하면 체력을 #b", + " 회복합니다." + ] + }, + "awakened:NerfedMummifiedHand": { + "NAME": "방부된 손", + "FLAVOR": "주술에 저항하며 진정한 힘을 선보이길 바라는 손입니다.", + "DESCRIPTIONS": [ + "#y제식 이 아닌 #y파워 카드를 사용할 때마다 그 턴 동안 손에 있는 무작위 카드 한 장의 비용이 #b0 이 됩니다." + ] + } +} diff --git a/src/main/resources/awakenedResources/localization/kor/RunModStrings.json b/src/main/resources/awakenedResources/localization/kor/RunModStrings.json new file mode 100644 index 0000000000..22fdca1b26 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/kor/RunModStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/kor/UIStrings.json b/src/main/resources/awakenedResources/localization/kor/UIStrings.json new file mode 100644 index 0000000000..1b09187941 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/kor/UIStrings.json @@ -0,0 +1,46 @@ +{ + "awakened:SpellDescriptor": { + "TEXT": [ + "주문" + ] + }, + "awakened:ConjureMod": { + "TEXT": [ + " NL awakened:시전합니다." + ] + }, + "awakened:SpellMod": { + "TEXT": [ + "[#12FAF0]주문. NL" + ] + }, + "awakened:DrainingMod": { + "TEXT": [ + " NL 다음 턴에 [E] 를 잃습니다." + ] + }, + "awakened:highlightChant": { + "TEXT": [ + "awakened:암송: ", + "[awakenedIcon] [#12FAF0]암송: " + ] + }, + "awakened:Spellbook": { + "TEXT": [ + "주문서", + "각성", + "파워 카드를 #b7장 사용한 후에 #y깨어납니다! NL NL #y깨어난 동안 #y시전하는 주문 카드가 #y강화되어 효과가 크게 향상됩니다.", + "파워 카드를 #b7장 사용한 후에 #y깨어납니다! NL NL #y깨어난 동안 #y시전하는 주문 카드가 #y강화되어 효과가 크게 향상됩니다." + ] + }, + "awakened:FullSpellbook": { + "TEXT": [ + "주문서가 꽉 찼어!" + ] + }, + "awakened:FourthDimensionDupeAttempt": { + "TEXT": [ + "@그걸@ @하면@ @시공간의@ @연속성이@ @붕괴해버릴@ @거야!!!@" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/rus/CardStrings.json b/src/main/resources/awakenedResources/localization/rus/CardStrings.json new file mode 100644 index 0000000000..1819e0cca4 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/rus/CardStrings.json @@ -0,0 +1,415 @@ +{ + "awakened:Thunderbolt": { + "NAME": "Удар Молнии", + "DESCRIPTION": "Оставляется. NL Наносит !D! Урона. NL Сжигается." + }, + "awakened:BurningStudy": { + "NAME": "Пылающее изучение", + "DESCRIPTION": "Оставляется. NL Даёт !M! Силу. NL Накладывает !awakened:m2! Слабости на ВСЕХ врагов. NL Сжигается.", + "UPGRADE_DESCRIPTION": "Оставляется. NL Даёт !M! Силы. NL Накладывает !awakened:m2! Слабости на ВСЕХ врагов. NL Сжигается." + }, + "awakened:Cryostasis": { + "NAME": "Криостазис", + "DESCRIPTION": "Оставляется. NL Даёт !B! Защиты. NL Сжигается." + }, + "awakened:Darkleech": { + "NAME": "Тёмный паразит", + "DESCRIPTION": "Оставляется. NL Накладывает !M! Уязвимости. NL Накладывает !awakened:m2! awakened:Ожога Маной. NL Сжигается." + }, + "awakened:DeathCoil": { + "NAME": "Спираль смерти", + "DESCRIPTION": "Накладывает !M! awakened:Ожога Маной. NL В следующем ходы вы теряете [E]." + }, + "awakened:ESPSpell": { + "NAME": "ЭСВ", + "DESCRIPTION": "Оставляется. NL Вы берёте !M! Карту. NL Сжигается.", + "UPGRADE_DESCRIPTION": "Оставляется. NL Вы берёте !M! Карты. NL Сжигается." + }, + "awakened:Strike": { + "NAME": "Удар", + "DESCRIPTION": "Наносит !D! урона." + }, + "awakened:Defend": { + "NAME": "Оборона", + "DESCRIPTION": "Даёт !B! Защиты." + }, + "awakened:Brainshock": { + "NAME": "Шок Мозга", + "DESCRIPTION": "Наносит !D! урона. NL Добовляет *Бездну в стопку сброса." + }, + "awakened:Intensify": { + "NAME": "Усиление", + "DESCRIPTION": "awakened:Призыв. NL В этом ходу Заклинания стоят 0, вы не можете использовать awakened:Призыв снова.", + "UPGRADE_DESCRIPTION": "Оставляется. awakened:Призыв. NL В этом ходу Заклинания стоят 0, вы не можете использовать awakened:Призыв снова." + }, + "awakened:DarkEcho": { + "NAME": "Тёмное эхо", + "DESCRIPTION": "В конце вашего хода Наносит !M! Урона ВСЕМ Врагам, С учётом Силы." + }, + "awakened:AwakenedForm": { + "NAME": "Пробуждённая форма", + "DESCRIPTION": "Даёт !M! awakened:Любознательности. NL Даёт !awakened:m2! Ритуал.", + "UPGRADE_DESCRIPTION": "*Пробудиться немедленно. NL Даёт !M! awakened:Любознательности. NL Даёт !awakened:m2! Ритуала." + }, + "awakened:Spellbinder": { + "NAME": "Заклинатель", + "DESCRIPTION": "В начале вашего хода делает awakened:Призыв." + }, + "awakened:Ceremony": { + "NAME": "Церимония", + "DESCRIPTION": "Оставляется. NL Даёт !M! Силу.", + "UPGRADE_DESCRIPTION": "Оставляется. NL Даёт !M! Силы." + }, + "awakened:TalonRake": { + "NAME": "Порвать Когтями", + "DESCRIPTION": "Наносит !D! Урона дважды. NL awakened:Призыв." + }, + "awakened:Hymn": { + "NAME": "Гимн", + "DESCRIPTION": "Дайт !B! Защиты. NL Даёт a *Церимонию. NL В следующем ходы вы теряете [E]." + }, + "awakened:Psalm": { + "NAME": "Псалом", + "DESCRIPTION": "Наносит !D! Урона и Накладывает !M! Слабости на ВСЕХ Врагов." + }, + "awakened:DemonGlyph": { + "NAME": "Демонический Глиф", + "DESCRIPTION": "Даёт !M! Силу и Ловкость. NL Когда ты *Пробуждён, получи ещё !awakened:m2!." + }, + "awakened:TakeFlight": { + "NAME": "Взмыть ввысь", + "DESCRIPTION": "Даёт !B! Защиты. NL awakened:Напев: Защита не снимается в начале следующего хода." + }, + "awakened:FeatherVeil": { + "NAME": "Перьевая Вуаль", + "DESCRIPTION": "Даёт !B! Защиты. NL Вы теряете !M! Силу." + }, + "awakened:Peck": { + "NAME": "Клевок", + "DESCRIPTION": "Даёт !B! Защиты. NL Наносит !D! Урона. NL Вы берёте !M! карту.", + "UPGRADE_DESCRIPTION": "Даёт !B! Защиты. NL Наносит !D! Урона. NL Вы берёте !M! карты." + }, + "awakened:Extension": { + "NAME": "Вытягивание", + "DESCRIPTION": "Наносит !D! Урона. NL Каждый раз когда вы разыгрываете Талант, возращаеться из стопки сброса в руку." + }, + "awakened:Pluck": { + "NAME": "Выщипываение", + "DESCRIPTION": "Наносит !D! Урона ВСЕМ Врагам. NL Добовляет в вашу руку *Укол_Пером." + }, + "awakened:FlareShot": { + "NAME": "Пылающее Перо", + "DESCRIPTION": "Наносит !D! Урона. NL awakened:Напев: В следующем ходу возьмите !M! Дополнительную карту." + }, + "awakened:ClarionCall": { + "NAME": "Звонкий Призыв", + "DESCRIPTION": "Наносит !D! Урона. NL В следующий раз когда вы будите awakened:Истощены, получите [E]." + }, + "awakened:Recitation": { + "NAME": "Декоамация", + "DESCRIPTION": "Наносит !D! Урона. NL awakened:Напев: Наносит !D! Урона ещё раз." + }, + "awakened:ChosenVerse": { + "NAME": "Избранный стих", + "DESCRIPTION": "Если следующие !M! карты, сыграными в этом ходу будут не-Атаками вы возьмёте карту и получите !B! Защиты." + }, + "awakened:SoulStrike": { + "NAME": "Удар Души", + "DESCRIPTION": "Наносит !D! Урона !M! раза. NL Стоит на 1 [E] меньше за каждый Талант разыграный в этом ходу." + }, + "awakened:Altar": { + "NAME": "Алтфрь", + "DESCRIPTION": "Даёт !B! Защиты. NL Сжигает карту. NL awakened:Призыв." + }, + "awakened:Envision": { + "NAME": "Предвиденье", + "DESCRIPTION": "Даёт !B! Защиты. NL awakened:Призыв и кладёте Заклинание на верх стопки добора." + }, + "awakened:Thaumaturgy": { + "NAME": "Тауматургия", + "DESCRIPTION": "Даёт !awakened:m2! Ловкость. NL В начале следующих !M! ходов добавляет *Церемонию в руку.", + "UPGRADE_DESCRIPTION":"Даёт !awakened:m2! Ловкости. NL В начале следующих !M! ходов добавляет *Церемонию в руку." + }, + "awakened:WaveOfMiasma": { + "NAME": "Волна Миазмов", + "DESCRIPTION": "Даёт !B! Защиты. NL Накладывает !awakened:m2! awakened:Ожога Маны ВСЕМ Врагам. NL Сжигается." + }, + "awakened:SludgeBomb": { + "NAME": "Грязная Бомба", + "DESCRIPTION": "Требует и стирает Сожжённую карту *Бездны. NL Наносит !D! Урона ВСЕМ Врагам.", + "EXTENDED_DESCRIPTION": [ + "У меня нет Сожжённой карты Бездны" + ] + }, + "awakened:KnifesEdge": { + "NAME": "На острие ножа", + "DESCRIPTION": "Даёт !awakened:m2! Силы. NL Добовляет !M! *Бездны в стопку сброса." + }, + "awakened:FourthDimension": { + "NAME": "4-ое измерение", + "DESCRIPTION": "Сжигает карту. NL Замещивает !M! копии в стопку добора. NL Сжигается.", + "EXTENDED_DESCRIPTION": [ + "Сожжён для 4-го измерения." + ] + }, + "awakened:RavenStrike": { + "NAME": "Удар Ворона", + "DESCRIPTION": "Наносит !D! Урона. NL awakened:Напев: Вы разыгрываете карту с верха стопки добора" + }, + "awakened:Unleash": { + "NAME": "Высвобождение", + "DESCRIPTION": "Наносит !D! Урона. NL Наносит на !M! больше Урона за каждую карту в вашей руке." + }, + "awakened:DesperatePrayer": { + "NAME": "Отчаянная молитва", + "DESCRIPTION": "Добовляет !M! карты *Церемония в руку. NL Сжигается." + }, + "awakened:BirdsEye": { + "NAME": "Взор Птицы", + "DESCRIPTION": "Выберите Заклинание для awakened:Призыв.", + "UPGRADE_DESCRIPTION": "Обновляет Заклинания. Выберите Заклинание для awakened:Призыв." + }, + "awakened:Initiation": { + "NAME": "Посвящение", + "DESCRIPTION": "Даёт !B! Защиты. NL Добовляет *Церемонию." + }, + "awakened:Ensorcelate": { + "NAME": "Очарование", + "DESCRIPTION": "Даёт !B! Защиты. NL Следующий разыграный Талант стоит 0." + }, + "awakened:Skyward": { + "NAME": "Ввысь", + "DESCRIPTION": "Даёт !B! Защиты. NL Вы берёте !M! карту. NL Стоит на 1 [E] меньше за каждый Талант, сыгранный в этом бою." + }, + "awakened:RisingChant": { + "NAME": "Восходящий хор", + "DESCRIPTION": "Эфирная. NL Первый в ходу awakened:Напев активируеться дважды.", + "UPGRADE_DESCRIPTION": "Первый в ходу awakened:Напев активируеться дважды." + }, + "awakened:FeatherWhirl": { + "NAME": "Перьевой вихрь", + "DESCRIPTION": "Добовляет X Копий *Укол_Пером.", + "UPGRADE_DESCRIPTION": "Добовляет X+1 Копий *Укол_Пером." + }, + "awakened:Murder": { + "NAME": "Убиение", + "DESCRIPTION": "Наносит !D! Урона случайному противнику !M! раз.", + "UPGRADE_DESCRIPTION": "Оставляется. NL Наносит !D! Урона случайному противнику !M! раз." + }, + "awakened:Nihil": { + "NAME": "Ничто", + "DESCRIPTION": "Накладывает !M! awakened:Ожога Маной. NL awakened:Напев: ВСЕ враги теряют ОЗ равное awakened:Ожогу Маной." + }, + "awakened:MoonlitVision": { + "NAME": "Лунное Видение", + "DESCRIPTION": "Когда вы разыгрываете первое за ход Заклинание NL Даёт [E]." + }, + "awakened:Rebirth": { + "NAME": "Перерождение", + "DESCRIPTION": "В конце боя или Когда вы должны умереть, снимает все дебаффы, *Пробуждаетесь и восстановите !M! ОЗ." + }, + "awakened:Archmagus": { + "NAME": "Архимаг", + "DESCRIPTION": "Первое в ходу Заклинание разыгрывается дважды." + }, + "awakened:Planeswalk": { + "NAME": "Переход между мирами", + "DESCRIPTION": "Даёт [E] [E] . NL Добавить *Бездну в стопку добора.", + "UPGRADE_DESCRIPTION": "Даёт [E] [E] [E] . NL Добавить *Бездну в стопку добора." + }, + "awakened:Spew": { + "NAME": "Изрыгание", + "DESCRIPTION": "Наносит !D! Урона. NL [E] потраченная на эту карту, считается awakened:Истощёной." + }, + "awakened:DarknessFalls": { + "NAME": "Наступление Тьмы", + "DESCRIPTION": "Каждый раз когда вы получаете awakened:Истощение, даёт !M! Защиты и !awakened:m2! Силу.", + "UPGRADE_DESCRIPTION": "Начальная. NL Каждый раз когда вы получаете awakened:Истощение, даёт !M! Защиты и !awakened:m2! Силу." + }, + "awakened:Eventide": { + "NAME": "Сумерки", + "DESCRIPTION": "Наносит !D! Урона случайному противнику дважды. NL Добавить *Бездна на верх стопки добора." + }, + "awakened:EclipseEmbrace": { + "NAME": "Объятие затмения", + "DESCRIPTION": "Каждый раз когда вы Сжигаете *Бездну, даёт [E] и доберите карту в следующий ход." + }, + "awakened:Clutch": { + "NAME": "Хватка", + "DESCRIPTION": "Наносит !D! Урона. NL Доберите карту со стоимостью 0." + }, + "awakened:Gloomguard": { + "NAME": "Мрачный страж", + "DESCRIPTION": "Даёт !B! Защиты. NL Стоит 0, если *Бездна находится в руке." + }, + "awakened:Carrionmaker": { + "NAME": "Падальщик", + "DESCRIPTION": "Наносит !D! Урона случайному противнику. NL Повторите за каждое Заклинание, сыгранное в этот ход.", + "EXTENDED_DESCRIPTION": [ + " NL (", + " Заклинание сыграно.)", + " Заклинаний сыграно.)" + ] + }, + "awakened:MirePit": { + "NAME": "Mire Pit", + "DESCRIPTION": "ВСЕ враги теряют !M! Силы в этот ход. NL В следующем ходы вы теряете [E]. NL Сжигается." + }, + "awakened:SingularityShield": { + "NAME": "Щит Сингулярности", + "DESCRIPTION": "Даёт !B! Защиты. В следующем ходы даёт !B! Защиты и вы потеряете [E]." + }, + "awakened:Dejection": { + "NAME": "Уныние", + "DESCRIPTION": "Наносит !D! Урона. NL Сжигает карту. Если это было Заклинание, даёт *Церемонию." + }, + "awakened:BloodRite": { + "NAME": "Кровавый обряд", + "DESCRIPTION": "Наносит !D! Урона. NL Даёт *Церемонию." + }, + "awakened:SongOfSorrow": { + "NAME": "Песнь Скорби", + "DESCRIPTION": "Каждый раз, когда вы создаёте *Бездну, ВСЕ враги теряют !M! ОЗ." + }, + "awakened:MysticOrder": { + "NAME": "Мистический Орден", + "DESCRIPTION": "Вы берёте !M! карт. NL awakened:Призыв." + }, + "awakened:ProfaneStrike": { + "NAME": "Осквернённый удар", + "DESCRIPTION": "Наносит !D! Урона. NL Вы кладёте карту из руки на верх стопки добора." + }, + "awakened:Victuals": { + "NAME": "Провиант", + "DESCRIPTION": "awakened:Напев: Даёт [E] [E] . NL Сжигается.", + "UPGRADE_DESCRIPTION": "awakened:Напев: Даёт [E] [E] [E] . NL Сжигается." + }, + "awakened:Gather": { + "NAME": "Сбор", + "DESCRIPTION": "Даёт !B! Защиты. NL awakened:Напев: Положите карту из стопки сброса в руку." + }, + "awakened:TheTower": { + "NAME": "Башня", + "DESCRIPTION": "Наносит !D! Урона ВСЕМ Врагам. NL Наносит на !M! больше урона за каждую карту, созданную в этом бою." + }, + "awakened:ArcaneNesting": { + "NAME": "Арканическое гнездование", + "DESCRIPTION": "Неиграбельная. NL Каждый раз, когда вы разыгрываете Талант, пока эта карта в руке, даёт !B! Защиты.", + "EXTENDED_DESCRIPTION": [ + "Мне нужно разыгрывать Талант, чтобы получать Защиту." + ] + }, + "awakened:MiddenHeap": { + "NAME": "Куча отбросов", + "DESCRIPTION": "Даёт !B! Защиты. NL Вы берёте !M! карту Статуса или Проклятия из стопки добора или стопки сброса в руку.", + "UPGRADE_DESCRIPTION": "Даёт !B! Защиты. NL Положить !M! карты Статуса или Проклятия из стопки добора или стопки сброса в руку.", + "EXTENDED_DESCRIPTION": [ + "Выберите карту, которую хотеите взять в руку.", + "Выберите карты, которые хотеите взять в руку." + ] + }, + "awakened:Caw": { + "NAME": "Кар", + "DESCRIPTION": "Наносит !D! Урона. NL awakened:Напев: Увеличить урон всех карт *Кар на !M! в этом бою." + }, + "awakened:Scour": { + "NAME": "Истязание", + "DESCRIPTION": "Наносит !D! Урона. NL Накладывает !M! awakened:Ожога Маны." + }, + "awakened:Manastorm": { + "NAME": "Магическая Буря", + "DESCRIPTION": "Наносит !D! Урона ВСЕМ Врагам. NL awakened:Призыв дважды." + }, + "awakened:StormRuler": { + "NAME": "Владыка бури ", + "DESCRIPTION": "awakened:Призыв. NL *Удар_Молнии Наносит на !M! больше Урона." + }, + "awakened:AphoticFount": { + "NAME": "Афотический источник", + "DESCRIPTION": "awakened:Призыв. NL Каждый раз, когда вы разыгрываете *Криостазис, даёт !M! expansioncontent:*Панцырь.", + "UPGRADE_DESCRIPTION": "awakened:Призыв. NL Каждый раз, когда вы разыгрываете *Криостазис, даёт !M! expansioncontent:*Панцыря." + }, + "awakened:Bloodthirst": { + "NAME": "Кровожадность", + "DESCRIPTION": "Наносит !D! Урона. Даёт awakened:Зелье_Таланта и Сжигается если Казнит врага." + }, + "awakened:Procession": { + "NAME": "Шествие", + "DESCRIPTION": "Разыграть карту из стопки добора и замешайте *Бездны равные её стоймости. NL Сжигается." + }, + "awakened:SplitWide": { + "NAME": "Широкий размах", + "DESCRIPTION": "Наносит !D! Урона. NL Каждый раз, когда вы атакуете этого врага, получите !M! временную Силу. NL Сжигается.", + "UPGRADE_DESCRIPTION": "Наносит !D! Урона. NL Каждый раз, когда вы атакуете этого врага, получите !M! временной Силы. NL Сжигается." + }, + "awakened:Spellshield": { + "NAME": "Щит чар", + "DESCRIPTION": "Каждый раз когда Оставляется карта, даёт !M! Защиты." + }, + "awakened:Siphon": { + "NAME": "Сифон", + "DESCRIPTION": "Наносит !D! Урона. NL awakened:Напев: gremlin:Ворует !M! Силы." + }, + "awakened:PlumeJab": { + "NAME": "Укол Пером", + "DESCRIPTION": "Оставляется. NL Наносит !D! Урона случайным противникам дважды. NL Сжигается." + }, + "awakened:Primacy": { + "NAME": "Первенство", + "DESCRIPTION": "Вы берёте карту, когда в первый раз за ход получаете Силу.", + "UPGRADE_DESCRIPTION": "Вы берёте карту, когда первые !M! раз за ход получаете Силу." + }, + "awakened:Daggerstorm": { + "NAME": "Буря Кинжалов", + "DESCRIPTION": "Наносит !M! Урона случайным Противникам, Каждый раз, когда вы создаёте карту." + }, + "awakened:PackRat": { + "NAME": "Крыса-собиратель", + "DESCRIPTION": "Наносит !D! Урона и даёт !B! Защиты дважды. NL Вы получаете случайно зелье. NL Сжигается." + }, + "awakened:Mantis": { + "NAME": "Богомол", + "DESCRIPTION": "Даёт !M! Силы. NL Добовляет в вашу руку *Укол_Пером." + }, + "awakened:ManaShield": { + "NAME": "Щит маны", + "DESCRIPTION": "Даёт !B! Защиты. NL awakened:Призыв. NL Уменьшает стоимость случайного Заклинания в руке на 1." + }, + "awakened:Crusher": { + "NAME": "Сокрушитель", + "DESCRIPTION": "Оставляется. NL Наносит !D! Урона. NL Каждый раз, когда вы создаёте карту, уменьшает её стоимость на 1 до её розыгрыша." + }, + "awakened:Minniegun": { + "NAME": "Миниган", + "DESCRIPTION": "Наносит !D! Урона !M! раз. NL Добавляет *Бездну в стопку добора." + }, + "awakened:SignInBlood": { + "NAME": "Подписать кровью", + "DESCRIPTION": "Вы получаете !awakened:m2! Урона. NL Вы берёте !M! карт. NL Даёт !awakened:m2! Силы. NL Сжигается." + }, + "awakened:SpreadingSpores": { + "NAME": "Распространяющиеся споры", + "DESCRIPTION": "Эфирная. NL Даёт !M! Шипов. NL Замешайте копию этой карты в стопку добора." + }, + "awakened:Scheme": { + "NAME": "План", + "DESCRIPTION": "Следующая карта стоймостью 1 или меньше разыгрываться дважды.", + "UPGRADE_DESCRIPTION": "Следующие !M! карт, стоймостью 1 или меньше разыгрываться дважды." + }, + "awakened:TheEncyclopedia": { + "NAME": "Энциклопедия", + "DESCRIPTION": "Выберите 2 из !M! случайных карт и добавьте их в руку. Они стоят на 2 меньше. NL Сжигается.", + "EXTENDED_DESCRIPTION": [ + "Выберите 2 карты для добавления в руку." + ] + }, + "awakened:RealityRift": { + "NAME": "Разлом реальности", + "DESCRIPTION": "Выберите !awakened:m2! из !M! мощных карт из *ДРУГОГО *ИЗМЕРЕНИЯ, чтобы получить. NL Добавте 2 *Бездны в стопку сброса. Сжигается." + }, + "awakened:Inscribe": { + "NAME": "Вписать", + "DESCRIPTION": "Выберите Заклинание. Добавите !M! копий в Книгу заклинаний до конца боя.", + "UPGRADE_DESCRIPTION": "awakened:Призыв. NL Выберите Заклинание. Добавите !M! копий в Книгу заклинаний до конца боя." + } +} diff --git a/src/main/resources/awakenedResources/localization/rus/CharacterStrings.json b/src/main/resources/awakenedResources/localization/rus/CharacterStrings.json new file mode 100644 index 0000000000..d7d9719887 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/rus/CharacterStrings.json @@ -0,0 +1,13 @@ +{ + "awakened:awakenedOne": { + "NAMES": [ + "Пробуждённый", + "пробуждённый" + ], + "TEXT": [ + "Триумф Культа и бессмертный тёмный колдун Запределья. NL Обладает властью над Пустотой и всеми прочими стихиями.", + "NL Ты призываешь свои величайшие заклинания...", + "Пробираясь по неосвещённой улице, ты натыкаешься на нескольких фигурантов в капюшонах, занятых тёмным ритуалом. Когда ты приближаешься, они одновременно поворачиваются к тебе с жуткой синхронностью. Самый высокий из них обнажает клыки и протягивает к тебе длинную бледную руку. NL ~«Присоединись~ ~к~ ~нам,~ ~вознёсшийся,~ ~и~ ~почувствуй~ ~тепло~ ~Шпиля.»~" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/rus/EventStrings.json b/src/main/resources/awakenedResources/localization/rus/EventStrings.json new file mode 100644 index 0000000000..52998ca351 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/rus/EventStrings.json @@ -0,0 +1,92 @@ +{ + "awakened:Nest": { + "NAME": "Гнездо", + "DESCRIPTIONS": [ + "Ты нашёл его… и вернулся. NL #pГнездо — #pместо #pтвоего #pвознесения, #pгде #pты #pстал #b~живым~ #b~аватаром~ #b~бога.~ Как только ты входишь, тебя окружают культисты, @каркающие@ и @ликующие@! NL Они хорошо знают, что твоё возвращение часто сопровождается требованием #r@десятины....@", + "Предстоящие битвы будут тяжёлыми, и сейчас — идеальный момент найти уникальное оружие для своего арсенала. NL NL #r@...Только@ #r@не@ #r@кинжалы.@ NL NL Ты совершаешь могущественный ритуал, призывая невероятно #yмощную #yреликвию, но плата за него оказывается высокой. NL NL Истощённый, ты покидаешь Гнездо, надеясь, что новое оружие посеет хаос на своём пути.", + "Всё больше членов стаи выстраиваются в очередь, принося подношения. NL NL Большинство — @бесполезный@ @хлам,@ но один приносит особенно интересный дар: #bмощный #bэликсир, который может серьёзно помочь в бою. NL NL Вскоре ты покидаешь Гнездо и продолжаешь свой путь вниз по Шпилю.", + "Культисты окружают тебя ещё плотнее обычного, увидев возвращение своей драгоценной статуи. NL Повод для праздника! Тебя осыпают дарами и Душами! NL Когда торжества заканчиваются и ты покидаешь Гнездо, ты понимаешь, что мог бы использовать это время для поисков ценного оружия... NL NL Теперь уже поздно, но ты всё равно движешься дальше.", + "#r@«ПТИЧИЙ@ #r@БОГ!!@ #r@ВОЗВРАТИЛСЯ!!»@ NL #b~«КАР~ #b~КАР~ #b~КАРРРРР!!!»~ NL Статуя, которую ты решил не разрушать, сегодня действительно оказалась полезной.", + "", + "", + "Культисты окружают тебя ещё плотнее обычного, увидев возвращение своей драгоценной статуи. NL Повод для праздника! Тебя осыпают дарами и Душами! NL Когда торжества заканчиваются и ты покидаешь Гнездо, ты понимаешь, что мог бы использовать это время для поисков ценного оружия... NL NL Теперь уже поздно, но ты всё равно движешься дальше.", + "Ты быстро направляешься к ящику для пожертвований и сокровищнице, намереваясь в полной мере воспользоваться монетами и найти #yРеликвию. NL NL Монеты, оплаченные самой кровью, вполне могут заменить #bДуши. NL NL #yРеликвия, разумеется, тоже пригодится в грядущих испытаниях. NL NL Ты сжимаешь в руках #rокровавленные монеты из ящика для пожертвований… но затем замечаешь, что сундуки почти пусты... NL NL NL ~...~", + "Тебя… #r@обокрали?@ Гнездо #pобчистили? NL NL Конечно же нет, ~ни~ ~за~ ~что~ такого бы не случилось. NL NL NL Было бы глупо даже подумать о подобном. NL NL NL ~...верно?~ NL NL NL Ты отталкиваешь свои #y~навязчивые~ #y~сомнения~ и уходишь прочь от Гнезда." + ], + "OPTIONS": [ + "[Вернуть статую] #rПотерять #rСтатую #rСломанного #rКрыла. #gПолучить #gмного #gнаград.", + "[Недоступно] Требуется Статуя сломанного крыла.", + "[Собрать подношения] #gПолучить #gЗелье #gЛюбопытства.", + "[Призвать оружие] #gПолучить #gособую #gРеликвию. #rПотерять #r", + " #rМакс. #rОЗ.", + "[Ящик пожертвований] #gПолучить #g", + " #gЗолото #gи #gОбычную #gРеликвию. #rПолучить #rПроклятие #r— #rСомнение.", + "[Уйти]", + "[Продолжить]", + "[Быть восхвалённым!] #gПолучить #gнаграды за возвращение #gСтатуи #gСломанного #gКрыла.", + "[Продолжить] — #rПолучить #rПроклятие #r— #rСомнение." + ] + }, + + "awakened:WingStatueAwakened": { + "NAME": "Крылатая статуя", + "DESCRIPTIONS": [ + "Среди камней ты замечаешь большую изящную синюю статую Мазалета — Бога Воронов. NL NL Тебя захлёстывает внезапная ярость и желание уничтожить её. NL NL Однако ты знаешь, что это навлечёт гнев твоего покровителя.", + "Ты решаешь, что риск того не стоит, и забираешь статую с собой. NL Сначала её вес тяготит тебя, но вскоре ты справляешься и продолжаешь путь.", + "Ты обрушиваешься на статую, разбивая её вдребезги! NL Среди обломков ты находишь острый осколок, всё ещё наполненный магией. NL Ты уходишь, ощущая, как #pтёмная #pэнергия проникает в твою кровь.", + "Ты проходишь мимо и продолжаешь путь.", + "КА…Кар?! Дар ПТИЧЬЕМУ БОГУ?", + "КА-КАРРР!!", + "Обмен? Честное предложение...", + "Культ будет доволен." + ], + "OPTIONS": [ + "[Разрушить] #gПолучить #gЗаточенный #gОсколок. #rПолучить #rПроклятие #rдважды #r— #rГемофилия.", + "[Забрать] #rПотерять #r", + "[Уйти]", + " #rHP. #gПолучить #gСтатую #gСломанного #gКрыла." + ] + }, + + "awakened:BackToBasics": { + "NAME": "", + "DESCRIPTIONS": [ + "Ничто не имеет значения, кроме борьбы за жизнь. Здесь и сейчас." + ], + "OPTIONS": [ + "[Отчаяние] #gВаши #gУдары #gи #gЗащиты #gстановятся #gИстощающими.", + "[Недоступно] Требуется Удар или Защита." + ] + }, + + "awakened:AbyssEvent": { + "NAME": "Из Бездны", + "DESCRIPTIONS": [ + "Продвигаясь по городу, ты внезапно ощущаешь необъяснимое чувство… словно #pсама #pреальность начинает @распадаться@ перед тобой. NL Ощущения подводят тебя, но ты видишь #pгримуар, лежащий перед тобой, и слышишь ~потусторонний~ ~голос~, зовущий… NL \n\n«ПРОБУЖДЁННОЕ ДИТЯ. СТРАННИК БЕСКОНЕЧНЫХ ПЛАНОВ. НАМ МНОГОЕ НУЖНО ОБСУДИТЬ. ВОЗЬМИ МОЮ РУКУ, И Я ПРИВЕДУ ТЕБЯ К ЗНАНИЮ, КОТОРОЕ ТЫ ИЩЕШЬ… В НЕИЗВЕСТНЫЕ МИРЫ ЧУДОВИЩ, МАШИН И МАГИИ, ЧТО ВНЕ ПОНИМАНИЯ ЭТОГО МИРА».", + "«ХОРОШО. НАШ СОЮЗ БУДЕТ МОГУЩЕСТВЕННЫМ»\n\n NL Пока ощущение #pпотустороннего #pнедомогания не исчезает, с томом в руках ты чувствуешь, будто перед тобой открылся бесконечный мир возможностей...", + "Ты с усилием вырываешься из транса, расправляешь крылья и оставляешь странный #pгримуар позади." + ], + "OPTIONS": [ + "[Протянуть руку] Получить #gРазлом #gРеальности. #rПолучить #rПроклятие — #rСтарость.", + "[Уйти].", + "[Уйти]" + ] + }, + + "awakened:CultTalk": { + "NAME": "Речи культа", + "DESCRIPTIONS": [ + "@ВЛАДЫКА!@ @ПРОСТИ@ @МЕНЯ!@", + "@МОЁ@ @ВРЕМЯ@ @ПРИШЛО!@", + "@КАРРРРРР!@ @КАР@ @КАР@ @КАР@ @КАРРРРРР!!!!@", + + "@МОЯ@ @КРОВЬ@ @ДЛЯ@ @ПТИЧЬЕГО@ @БОГА!@", + "@Я@ @НЕДОСТОИН!@", + "@Я@ @УМРУ@ @ЧТОБЫ@ @СТАЯ@ @ПРОЦВЕТАЛА!!!@", + + "~Пусть~ ~это~ ~станет~ ~моим~ ~искуплением…~", + "~...~", + "~Ты~ ~не~ ~оставляешь~ ~мне~ ~выбора…~" + ] + } +} diff --git a/src/main/resources/awakenedResources/localization/rus/KeywordStrings.json b/src/main/resources/awakenedResources/localization/rus/KeywordStrings.json new file mode 100644 index 0000000000..ef0dbc732a --- /dev/null +++ b/src/main/resources/awakenedResources/localization/rus/KeywordStrings.json @@ -0,0 +1,87 @@ +[ + { + "PROPER_NAME": "Зелье Таланта", + "NAMES": [ + "Power Potion", + "Power_Potion", + "power_potion", + "powerpotion", + "Зелье Таланта", + "Зелье_Таланта", + "зелье_таланта", + "зельеталанта" + ], + "DESCRIPTION": "#yЗелье [REMOVE_SPACE]: Вы выбераете #b1 из #b3 случайных #yТалантов и добовляете его в руку. В этом ходу она стоит #b0." + }, + { + "PROPER_NAME": "Призыв", + "NAMES": [ + "conjure", + "conjured", + "awaken", + "Призыв", + "Призыва", + "Призовите", + "Призвать" + ], + "DESCRIPTION": "Создаёт следующую карту из Книги заклинаний в руку." + }, + { + "PROPER_NAME": "Напев", + "NAMES": [ + "chant", + "Напев", + "Напева" + ], + "DESCRIPTION": "Карты с эффектами #yНапева становятся сильнее до конца боя, если последней сыгранной картой в бою была карта #yТаланта." + }, + { + "PROPER_NAME": "Порча", + "NAMES": [ + "Hex", + "hexxed", + "hexx", + "Порча", + "Порчи", + "Порчей" + ], + "DESCRIPTION": "Существо с #yПорчей получает на #b20% больше урона от следующей Атаки за каждый заряд. #yПорча снимается полностью после атаки." + }, + { + "PROPER_NAME": "Истощение", + "NAMES": [ + "drain", + "drained", + "Истощение", + "Истощения", + "Истощены", + "Истощёной" + ], + "DESCRIPTION": "Любой эффект, который приводит к потере [E] , даже если тебе нечего терять. (Не включает [E], потраченные на розыгрыш карт.)" + }, + { + "PROPER_NAME": "Ожог Маны", + "NAMES": [ + "manaburn", + "Ожог Маной", + "Ожогу Маны", + "Ожога Маной", + "Ожог_Маной", + "Ожогу_Маны", + "Ожога_Маной", + "ожогуманы", + "ожогманой", + "ожогаманой" + ], + "DESCRIPTION": "Каждый раз когда вы теряете [E] , даже если нечего терять, Существо теряет ОЗ равное #yОжогу Маны [REMOVE_SPACE]. (Не включает [E], потраченные на розыгрыш карт.)" + }, + { + "PROPER_NAME": "Любознательность", + "NAMES": [ + "curiosity", + "Любознательность", + "Любознательности" + ], + "DESCRIPTION": "Каждый раз, когда вы разыгрываете карту #yТаланта, получите #b1 #yСилу [REMOVE_SPACE]." + } +] \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/rus/MonsterStrings.json b/src/main/resources/awakenedResources/localization/rus/MonsterStrings.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/rus/MonsterStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/rus/OrbStrings.json b/src/main/resources/awakenedResources/localization/rus/OrbStrings.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/rus/OrbStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/rus/PotionStrings.json b/src/main/resources/awakenedResources/localization/rus/PotionStrings.json new file mode 100644 index 0000000000..7cfe53c9de --- /dev/null +++ b/src/main/resources/awakenedResources/localization/rus/PotionStrings.json @@ -0,0 +1,31 @@ +{ + "awakened:PhaseSkip": { + "NAME": "Напиток Возвышеного", + "DESCRIPTIONS": [ + "#yНемедленно #yПробудитесь и #yУлучшите все карты до конца боя." + ] + }, + "awakened:CultistsDelight": { + "NAME": "Услада культиста", + "DESCRIPTIONS": [ + "Когда вы разыгрываете #yТалант в этом бою, получите #b", + " #yСилы [REMOVE_SPACE]. Добавьте в руку случайный #yТалант, которая стоит #b0 в этом ходу." + ] + }, + "awakened:SacramentalWine": { + "NAME": "Священное вино", + "DESCRIPTIONS": [ + "Когда вы разыгрываете #yТалант в этом бою, получите #b", + " #yЗащиты [REMOVE_SPACE]. Добавьте в руку случайный #yТаланат, которая стоит #b0 в этом ходу." + ] + }, + "awakened:SneckoPowersPotion": { + "NAME": "Эссенция Снеко", + "DESCRIPTIONS": [ + "Выберите #b1 из #b3 случайных #yТалантов #yдругого #yкласса и добавьте её в руку. В этом ходу она стоит #b0.", + "Выберите #b1 из #b3 случайных #yТалантов #yдругого #yкласса и добавьте #b", + " копии в руку. В этом ходу они стоят #b0." + ] + } +} + diff --git a/src/main/resources/awakenedResources/localization/rus/PowerStrings.json b/src/main/resources/awakenedResources/localization/rus/PowerStrings.json new file mode 100644 index 0000000000..8797f7af42 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/rus/PowerStrings.json @@ -0,0 +1,249 @@ +{ + "awakened:IntensifyPower": { + "NAME": "Усиление", + "DESCRIPTIONS": [ + "В этот ход все карты Заклинаний стоят #b0 [REMOVE_SPACE].", + "В течение следующих #b", + " ходов все карты Заклинаний стоят #b0 [REMOVE_SPACE]." + ] + }, + "awakened:IntensifyDebuffPower": { + "NAME": "Выгорание", + "DESCRIPTIONS": [ + "Вы не можете #yПризывать до конца хода.", + "Вы не можете #yПризывать в течение следующих #b", + " ходов." + ] + }, + "awakened:RisingChantPower": { + "NAME": "Восходящий хор", + "DESCRIPTIONS": [ + "Первые #b", + " эффекта(ов) #yНаспева, активированные в этот ход, срабатывают дважды. NL Осталось #b", + " эффекта(ов) в этом ходу." + ] + }, + "awakened:CursedStrength": { + "NAME": "Тёмное благословение", + "DESCRIPTIONS": [ + "Каждый раз, когда вы получаете #yИстощение [REMOVE_SPACE], даёт #b", + " #yСилы [REMOVE_SPACE]." + ] + }, + "awakened:ThaumaturgyPower": { + "NAME": "Тауматургия", + "DESCRIPTIONS": [ + "В начале следующих #b", + " ходов даёт #yЦеремонию [REMOVE_SPACE]." + ] + }, + "awakened:SacramentPower": { + "NAME": "Таинства", + "DESCRIPTIONS": [ + "Каждый раз, когда вы разыгрываете карту #yТаланта [REMOVE_SPACE], даёт #b", + " #yЗащиты [REMOVE_SPACE]." + ] + }, + "awakened:FlarePower": { + "NAME": "Перьевая вспышка", + "DESCRIPTIONS": [ + "Каждый раз, когда вы разыгрываете #yне-Атаку в этот ход, ВСЕ враги теряют #b", + " ОЗ." + ] + }, + "awakened:PrimacyPower": { + "NAME": "Первенство", + "DESCRIPTIONS": [ + "В первый раз за ход, когда вы получаете #yСилу, возьмите карту.", + "В первые #b", + " раза за ход, когда вы получаете #yСилу, возьмите карту.", + " NL Этот эффект может сработать ещё #b", + " раза в этом ходу.", + " раз в этом ходу.", + " NL В этом ходу эффект больше не может сработать." + ] + }, + "awakened:SpellbinderPower": { + "NAME": "Заклинатель", + "DESCRIPTIONS": [ + "В начале вашего хода сделайте #yПризыв [REMOVE_SPACE].", + "В начале вашего хода сделайте #yПризыв #b", + " раза." + ] + }, + "awakened:DarkEchoPower": { + "NAME": "Тёмное эхо", + "DESCRIPTIONS": [ + "В конце вашего хода нанесите #b", + " урона ВСЕМ врагам #b", + " раза.", + " урона ВСЕМ врагам." + ] + }, + "awakened:MoonlitVisionPower": { + "NAME": "Лунное Видение", + "DESCRIPTIONS": [ + "В первый раз за ход, когда вы разыгрываете Заклинание, даёт [E].", + "В первые #b", + " раза за ход, когда вы разыгрываете Заклинание, даёт [E].", + " NL Осталось #b", + " раза в этом ходу." + ] + }, + "awakened:EclipseEmbracePower": { + "NAME": "Объятия затмения", + "DESCRIPTIONS": [ + "Каждый раз, когда вы #yСжигаете #yБездну [REMOVE_SPACE], даёт [E] и доберите карту в следующий ход.", + "Каждый раз, когда вы #yСжигаете #yБездну [REMOVE_SPACE], даёт #b", + " [E] и доберите #b", + " карты в следующий ход." + ] + }, + "awakened:SongOfSorrowPower": { + "NAME": "Песнь скорби", + "DESCRIPTIONS": [ + "Каждый раз, когда вы создаёте #yБездну [REMOVE_SPACE], ВСЕ враги теряют #b", + " ОЗ." + ] + }, + "awakened:ShroudOfMiasmaPower": { + "NAME": "Покров миазмов", + "DESCRIPTIONS": [ + "Каждый раз, когда вы атакуете врага с #yПорчей [REMOVE_SPACE], даёт #b", + " #yЗащиты [REMOVE_SPACE]." + ] + }, + "awakened:StrengthReturnPower": { + "NAME": "Широкий размах", + "DESCRIPTIONS": [ + "Каждый раз, когда вы атакуете этого врага, получите #b", + " временной #yСилы [REMOVE_SPACE]." + ] + }, + "awakened:ManaburnPower": { + "NAME": "Ожог маны", + "DESCRIPTIONS": [ + "Каждый раз, когда вы получаете #yИстощение [REMOVE_SPACE], теряет #b", + " ОЗ." + ] + }, + "awakened:ArchmagusPower": { + "NAME": "Архимаг", + "DESCRIPTIONS": [ + "Первое Заклинание, которое вы разыгрываете за ход, разыгрывается дважды.", + "Первые #b", + " Заклинания, которые вы разыгрываете за ход, разыгрываются дважды.", + " NL ( Осталось повторений Заклинаний: #b", + " )" + ] + }, + "awakened:DoubleSpellPower": { + "NAME": "Повтор чар", + "DESCRIPTIONS": [ + "Следующее Заклинание, которое вы разыграете в этот ход, разыгрывается дважды.", + "Следующие #b", + " Заклинаний, которые вы разыграете в этот ход, разыгрываются дважды." + ] + }, + "awakened:DarknessFallsPower": { + "NAME": "Густая Тьма", + "DESCRIPTIONS": [ + "Каждый раз, когда вы получаете #yИстощение [REMOVE_SPACE], даёт #b", + " #yЗащиты [REMOVE_SPACE]." + ] + }, + "awakened:VoidRefundPower": { + "NAME": "Звонкий призыв", + "DESCRIPTIONS": [ + "В следующий раз, когда вы получите #yИстощение [REMOVE_SPACE], даёт [E].", + "В следующий раз, когда вы получите #yИстощение [REMOVE_SPACE], даёт #b", + " [E]." + ] + }, + "awakened:DemonGlyphPower": { + "NAME": "Демонический глиф", + "DESCRIPTIONS": [ + "Даёт #b", + " #yСилы и #yЛовкости, когда вы #yПробуждаетесь [REMOVE_SPACE]." + ] + }, + "awakened:ReverseRitualPower": { + "NAME": "Пробуждённая форма", + "DESCRIPTIONS": [ + "В начале вашего хода даёт #b", + " #yРитуала [REMOVE_SPACE]." + ] + }, + "awakened:EnsorcelatePower": { + "NAME": "Очарование", + "DESCRIPTIONS": [ + "Следующая карта #yТаланта, которую вы разыграете, стоит #b0 [REMOVE_SPACE].", + "Следующие #b", + " карты #yТаланта, которые вы разыграете, стоят #b0 [REMOVE_SPACE]." + ] + }, + "awakened:ConjureNextPower": { + "NAME": "Выщипывание", + "DESCRIPTIONS": [ + "В следующий раз, когда вы получите #yИстощение [REMOVE_SPACE], добавьте #yУкол #yПером в руку.", + "В следующий раз, когда вы получите #yИстощение [REMOVE_SPACE], получите #b", + " копий #yУкол #yПером [REMOVE_SPACE]." + ] + }, + "awakened:ChosensVersePower": { + "NAME": "Избранный стих", + "DESCRIPTIONS": [ + "В следующий раз в этом ходу, когда вы разыгрываете не-Атаку, возьмите карту и получите #b", + " #yЗащиты [REMOVE_SPACE].", + "В следующие #b", + " раза в этом ходу, когда вы разыгрываете не-Атаку, возьмите карту и получите #b", + " #yЗащиты [REMOVE_SPACE]." + ] + }, + "awakened:AphoticFountPower": { + "NAME": "Афотический источник", + "DESCRIPTIONS": [ + "Каждый раз, когда вы разыгрываете #yКриостазис [REMOVE_SPACE], получите #b", + " #yПанциря [REMOVE_SPACE]." + ] + }, + "awakened:GrimoirePower": { + "NAME": "Повелитель бури", + "DESCRIPTIONS": [ + "Ваши #yУдары #yМолнии наносят на #b", + " больше урона." + ] + }, + "awakened:SpellshieldPower": { + "NAME": "Щит Чар", + "DESCRIPTIONS": [ + "Каждый раз, когда вы #yОставляете карту, даёт #b", + " #yЗащиты." + ] + }, + "awakened:DaggerstormPower": { + "NAME": "Буря Кинжалов", + "DESCRIPTIONS": [ + "Каждый раз, когда вы создаёте карту, нанесите #b", + " урона случайному врагу." + ] + }, + "awakened:SchemePower": { + "NAME": "План", + "DESCRIPTIONS": [ + "Следующие #b", + " карты, разыгранные в этот ход и стоящие #b1 или меньше, разыгрываются дважды.", + "Следующая карта, разыгранная в этот ход и стоящая #b1 или меньше, разыгрывается дважды." + ] + }, + "awakened:FourthDimensionPower": { + "NAME": "4-е измерение", + "DESCRIPTIONS": [ + "В начале вашего #b", + " следующего хода, ", + " следующих ходов, ", + "разыграйте и #yСожгите копию ", + " [REMOVE_SPACE]." + ] + } +} \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/rus/RelicStrings.json b/src/main/resources/awakenedResources/localization/rus/RelicStrings.json new file mode 100644 index 0000000000..843b438e67 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/rus/RelicStrings.json @@ -0,0 +1,160 @@ +{ + "awakened:RippedDoll": { + "NAME": "Порванная кукла", + "FLAVOR": "Последнее напоминание о прежнем «я». В ней всё ещё таится скрытая магия.", + "DESCRIPTIONS": [ + "В начале первых #b", + " ходов боя исполните #yawakened:Призыв [REMOVE_SPACE]." + ] + }, + "awakened:ShreddedDoll": { + "NAME": "Изорванная кукла", + "FLAVOR": "Напоминание о вашей слабости, от которого вы всё равно не можете отказаться.", + "DESCRIPTIONS": [ + "Заменяет ", + " [REMOVE_SPACE].[] NL В начале вашего хода исполните #yawakened:Призыв [REMOVE_SPACE]. NL В первый раз за бой, когда вы обновляете Книгу заклинаний, получите #b1 #yРитуал [REMOVE_SPACE]." + ] + }, + "awakened:WhiteRibbon": { + "NAME": "Белая лента", + "FLAVOR": "Наделяет силой произнесённые слова даже без верного ритуала.", + "DESCRIPTIONS": [ + "Когда вы разыгрываете карту с #yawakened:Напевом, получите #b", + " #yЗащиты [REMOVE_SPACE], даже если эффект не активен." + ] + }, + "awakened:HexxBomb": { + "NAME": "Манабомба", + "FLAVOR": "3... 2...", + "DESCRIPTIONS": [ + "Когда враг умирает, весь его #yawakened:Ожог_маны передаёться на случайного врага." + ] + }, + "awakened:TomeOfPortalmancy": { + "NAME": "Фолиант Магии Порталов", + "FLAVOR": "Гримуар, описывающий создание и обслуживание межпланарных врат.", + "DESCRIPTIONS": [ + "Когда вы создаёте #yБездну [REMOVE_SPACE], наложите #b", + " #yawakened:Ожога_маны на ВСЕХ врагов." + ] + }, + "awakened:EyeOfTheOccult": { + "NAME": "Око оккультизма", + "FLAVOR": "Эта жуткая гравюра передаёт своему владельцу магические знания.", + "DESCRIPTIONS": [ + "#yУдар #yМолнии и #yТёмный #yПаразит нацеливаются на ВСЕХ врагов." + ] + }, + "awakened:DeadBird": { + "NAME": "Дух ворона", + "FLAVOR": "Этот призрак следует по пятам за проклятыми и обречёнными.", + "DESCRIPTIONS": [ + "В конце вашего хода нанесите #b", + " урона врагу с наименьшим ОЗ, увеличиваеться за счёт #yСилы [REMOVE_SPACE]." + ] + }, + "awakened:AbyssBlade": { + "NAME": "Клинок бездны", + "FLAVOR": "Возврат Невозможен.", + "DESCRIPTIONS": [ + "В первый раз за ход, когда вы получаете #yawakened:Истощение, получите [E] и возьмите карту." + ] + }, + "awakened:ShardOfNowak": { + "NAME": "Позолоченный костяной осколок", + "FLAVOR": "...Нет, не в этом смысле.", + "DESCRIPTIONS": [ + "В начале каждого боя получите #b", + " #yСилы [REMOVE_SPACE]. После потери ОЗ, потеряйте эту #yСилу до конца боя." + ] + }, + "awakened:VioletPlumage": { + "NAME": "Фиолетовое оперение", + "FLAVOR": "Окрашено бесконечной тьмой небытия.", + "DESCRIPTIONS": [ + "Один раз за бой, когда вы заканчиваете ход с лишней [E], возьмите #b", + " дополнительных карт в начале следующего хода." + ] + }, + "awakened:ZenerDeck": { + "NAME": "Колода Зенера", + "FLAVOR": "«Раз, два, три — все взгляды должны быть на мне».", + "DESCRIPTIONS": [ + "В начале боя добавьте #yЭСВ в вашу Книгу заклинаний и #yawakened:Призовите её." + ] + }, + "awakened:CawingCask": { + "NAME": "Каркающая бочка", + "FLAVOR": "Ритуальная бочка с изображением бога-ворона Мазалета; содержимое пахнет подозрительно...", + "DESCRIPTIONS": [ + "Каждый раз, когда вы используете зелье, получите #b", + " #yРитуала [REMOVE_SPACE]." + ] + }, + "awakened:MiniBlackHole": { + "NAME": "Алетейя", + "FLAVOR": "Из Бездны.", + "DESCRIPTIONS": [ + "Если в свой ход вы не разыгрываете ни одной карты #yТаланта, возьмите дополнительную карту в следующий ход." + ] + }, + "awakened:StrengthBooster": { + "NAME": "Бумажный ворон", + "FLAVOR": "Судья сомнений и проклятий, сложенный тысячу раз...", + "DESCRIPTIONS": [ + "Враги получают на #b", + "% больше урона от #yawakened:Ожога_маны [REMOVE_SPACE]." + ] + }, + "awakened:CursedBlessing": { + "NAME": "Последние обряды", + "FLAVOR": "Я завещаю всё своё имущество коту по кличке Лапша. Прощай, жестокий мир. С любовью, Рыцарь", + "DESCRIPTIONS": [ + "В первый раз за бой, когда вы активируете #b", + " эффект #yawakened:Напева, получите #b", + " #yРитуала [REMOVE_SPACE]." + ] + }, + "awakened:CurvedSwordMeme": { + "NAME": "Призванный клинок", + "FLAVOR": "Ну же, давай. Призови клинок. Прямо сейчас. Я смотрю. :^)", + "DESCRIPTIONS": [ + "В начале боя добавьте #yПризыв #yКлинка в руку?", + "ПРИМЕЧАНИЕ: ИГРОК НЕ МОЖЕТ ПОЛУЧИТЬ ЭТУ РЕЛИКВИЮ ВНЕ КОНСОЛИ, ЭТО ШУТОЧНАЯ РЕЛИКВИЯ!" + ] + }, + "awakened:CurvedSword": { + "NAME": "Зецумэй", + "FLAVOR": "Клинок, любимый магами за способность возвращать сотворённую магию обратно в себя.", + "DESCRIPTIONS": [ + "Каждый раз, когда вы разыгрываете #b", + " Заклинаний за бой, получите #yЦеремонию [REMOVE_SPACE]." + ] + }, + "awakened:MoonTalisman": { + "NAME": "Лунный талисман", + "FLAVOR": "«Пожалуйста… просто не забывай меня. Даже после моей смерти».", + "DESCRIPTIONS": [ + "При получении выберите карту, которая #rНЕ имеет #yawakened:Призыв [REMOVE_SPACE], и добавьте к ней #yawakened:Призыв.", + "Выберите карту для ", + "Талисман благословил ", + " и добавил #yawakened:Призыв.", + "Карта, связанная с этой реликвией, была #rудалена из вашей колоды, реликвия больше не работает." + ] + }, + "awakened:AwakenedUrn": { + "NAME": "Ваза с птичьим лицом", + "FLAVOR": "Урна в виде хитро прищуревшегося бога-ворона Мазалета.", + "DESCRIPTIONS": [ + "Первые #b4 раза за бой, когда вы разыгрываете карту #yТаланта, восстановите #b", + " ОЗ." + ] + }, + "awakened:NerfedMummifiedHand": { + "NAME": "Высушенная рука", + "FLAVOR": "Она требует истинной силы, противостоящей вашей оккультной магии.", + "DESCRIPTIONS": [ + "Когда вы разыгрываете #yТалант, кроме #yЦеремоний [REMOVE_SPACE], случайная карта в вашей руке в этот ход стоит #b0." + ] + } +} diff --git a/src/main/resources/awakenedResources/localization/rus/RunModStrings.json b/src/main/resources/awakenedResources/localization/rus/RunModStrings.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/rus/RunModStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/rus/UIStrings.json b/src/main/resources/awakenedResources/localization/rus/UIStrings.json new file mode 100644 index 0000000000..a906ff6fd5 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/rus/UIStrings.json @@ -0,0 +1,46 @@ +{ + "awakened:SpellDescriptor": { + "TEXT": [ + "Заклинание" + ] + }, + "awakened:ConjureMod": { + "TEXT": [ + " NL awakened:Призыв." + ] + }, + "awakened:SpellMod": { + "TEXT": [ + "[#12FAF0]Заклинание. NL" + ] + }, + "awakened:DrainingMod": { + "TEXT": [ + " NL В следующим ходу потеряйте [E]." + ] + }, + "awakened:highlightChant": { + "TEXT": [ + "awakened:Напев: ", + "[awakenedIcon] [#12FAF0]Напев: " + ] + }, + "awakened:Spellbook": { + "TEXT": [ + "Книга заклинаний", + "Пробуждение", + "После розыгрыша #b7 Таланта станьте #yПробуждённым [REMOVE_SPACE]! NL NL Пока вы #yПробуждённый [REMOVE_SPACE], все #yПризванные заклинания #yУлучшаются [REMOVE_SPACE], значительно повышая их эффективность.", + "После розыгрыша #b7 Таланта станьте #yПробуждённым [REMOVE_SPACE]! NL NL Пока вы #yПробуждённый [REMOVE_SPACE], все #yПризванные заклинания #yУлучшаются [REMOVE_SPACE], значительно повышая их эффективность." + ] + }, + "awakened:FullSpellbook": { + "TEXT": [ + "Моя Книга заклинаний переполнена!" + ] + }, + "awakened:FourthDimensionDupeAttempt": { + "TEXT": [ + "@СДЕЛАВ@ @ЭТО@ @ТЫ@ @РАЗОРВЁШЬ@ @ПРОСТРАНСТВЕННО-ВРЕМЕННОЙ@ @КОНТИНУУМ!!!@" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/spa/CardStrings.json b/src/main/resources/awakenedResources/localization/spa/CardStrings.json new file mode 100644 index 0000000000..8d5ee1f2a6 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/spa/CardStrings.json @@ -0,0 +1,409 @@ +{ + "awakened:Thunderbolt": { + "NAME": "Rayo", + "DESCRIPTION": "Retiene. NL Haz !D! de daño. NL Agota." + }, + "awakened:BurningStudy": { + "NAME": "Estudio Ardiente", + "DESCRIPTION": "Retiene. NL Gana !M! de Fuerza. NL Aplica !awakened:m2! Débil a TODOS los enemigos. NL Agota" + }, + "awakened:Cryostasis": { + "NAME": "Criostasis", + "DESCRIPTION": "Retiene. NL Gana !B! de Bloqueo. NL Agota." + }, + "awakened:Darkleech": { + "NAME": "Sanguijuela Oscura", + "DESCRIPTION": "Retiene. NL Aplica !M! Vulnerable. NL Aplica !awakened:m2! awakened:Quema_de_Maná. NL Agota." + }, + "awakened:DeathCoil": { + "NAME": "Espiral de Muerte", + "DESCRIPTION": "Aplica !M! awakened:Quema_de_Maná. NL El próximo turno, pierdes [E]." + }, + "awakened:ESPSpell": { + "NAME": "ESP", + "DESCRIPTION": "Retiene. NL Roba !M! carta. NL Agota.", + "UPGRADE_DESCRIPTION": "Retiene. NL Roba !M! cartas. NL Agota." + }, + "awakened:Strike": { + "NAME": "Golpe", + "DESCRIPTION": "Haz !D! de daño." + }, + "awakened:Defend": { + "NAME": "Defender", + "DESCRIPTION": "Gana !B! de Bloqueo." + }, + "awakened:Brainshock": { + "NAME": "Shock Cerebral", + "DESCRIPTION": "Haz !D! de daño. NL Añade un *Vacio a tu pila de descarte." + }, + "awakened:Intensify": { + "NAME": "Intensificar", + "DESCRIPTION": "awakened:Conjura. NL Este turno, los Hechizos cuestan 0 y no puedes awakened:Conjurar de nuevo.", + "UPGRADE_DESCRIPTION": "Retiene. awakened:Conjura. NL Este turno, los Hechizos cuestan 0 y no puedes awakened:Conjurar de nuevo." + }, + "awakened:DarkEcho": { + "NAME": "Eco Oscuro", + "DESCRIPTION": "Al final de tu turno, haz !M! de daño a TODOS los enemigos, aumentado por Fuerza." + }, + "awakened:AwakenedForm": { + "NAME": "Forma Despierta", + "DESCRIPTION": "Obtén !M! awakened:Curiosidad. NL Obtén !awakened:m2! Ritual.", + "UPGRADE_DESCRIPTION": "*Despiertas de inmediato. NL Obtén !M! awakened:Curiosidad. NL Obtén !awakened:m2! Ritual." + }, + "awakened:Spellbinder": { + "NAME": "Encantador", + "DESCRIPTION": "Al comienzo de tu turno, awakened:Conjura." + }, + "awakened:Ceremony": { + "NAME": "Ceremonia", + "DESCRIPTION": "Retiene. NL Gana !M! de Fuerza." + }, + "awakened:TalonRake": { + "NAME": "Rasguño de Talón", + "DESCRIPTION": "Haz !D! de daño dos veces. NL awakened:Conjura." + }, + "awakened:Hymn": { + "NAME": "Himno", + "DESCRIPTION": "Gana !B! de Bloqueo. NL Gana una *Ceremonia. NL El próximo turno, pierdes [E]." + }, + "awakened:Psalm": { + "NAME": "Salmo", + "DESCRIPTION": "Haz !D! de daño y aplica !M! Débil a TODOS los enemigos." + }, + "awakened:DemonGlyph": { + "NAME": "Glifo Demoníaco", + "DESCRIPTION": "Gana !M! de Fuerza y Destreza. NL Cuando *Despiertas, gana !awakened:m2! más." + }, + "awakened:TakeFlight": { + "NAME": "Despegar", + "DESCRIPTION": "Gana !B! de Bloqueo. NL awakened:Canto: El Bloqueo no se elimina al comienzo de tu próximo turno." + }, + "awakened:FeatherVeil": { + "NAME": "Velo de Plumas", + "DESCRIPTION": "Gana !B! de Bloqueo. NL Pierde !M! de Fuerza." + }, + "awakened:Peck": { + "NAME": "Picoteo", + "DESCRIPTION": "Gana !B! de Bloqueo. NL Haz !D! de daño. NL Roba !M! carta.", + "UPGRADE_DESCRIPTION": "Gana !B! de Bloqueo. NL Haz !D! de daño. NL Roba !M! cartas." + }, + "awakened:Extension": { + "NAME": "Extensión", + "DESCRIPTION": "Haz !D! de daño. NL Cada vez que juegues un Poder, regresa esta carta de la pila de descarte a tu mano." + }, + "awakened:Pluck": { + "NAME": "Arrancar", + "DESCRIPTION": "Haz !D! de daño a TODOS los enemigos. NL Obtén un *Golpe *de *pluma." + }, + "awakened:FlareShot": { + "NAME": "Destello de Plumas", + "DESCRIPTION": "Haz !D! de daño. NL awakened:Canto: El siguiente turno, roba !M! carta adicional." + }, + "awakened:ClarionCall": { + "NAME": "Llamado Clarion", + "DESCRIPTION": "Haz !D! de daño. NL La próxima vez que seas awakened:Drenado, gana [E]." + }, + "awakened:Recitation": { + "NAME": "Recitación", + "DESCRIPTION": "Haz !D! de daño. NL awakened:Canto: Haz !D! de daño de nuevo." + }, + "awakened:ChosenVerse": { + "NAME": "Verso Elegido", + "DESCRIPTION": "Las próximas !M! veces que juegues una carta que no sea de Ataque este turno, roba una carta y gana !B! de Bloqueo." + }, + "awakened:SoulStrike": { + "NAME": "Golpe del Alma", + "DESCRIPTION": "Haz !D! de daño !M! veces. NL Cuesta 1 [E] menos por cada Poder jugado este turno." + }, + "awakened:Altar": { + "NAME": "Altar", + "DESCRIPTION": "Gana !B! de Bloqueo. NL Agota una carta. NL awakened:Conjura." + }, + "awakened:Envision": { + "NAME": "Visualizar", + "DESCRIPTION": "Gana !B! de Bloqueo. NL awakened:Conjura y coloca el Hechizo en la parte superior de tu pila de extracción." + }, + "awakened:Thaumaturgy": { + "NAME": "Taumaturgia", + "DESCRIPTION": "Gana !awakened:m2! Destreza. NL Al comienzo de tus próximos !M! turnos, añade una *Ceremonia a tu mano." + }, + "awakened:WaveOfMiasma": { + "NAME": "Ola de Miasma", + "DESCRIPTION": "Gana !B! de bloqueo. NL Aplica !awakened:m2! awakened:Quema_de_Maná a TODOS los enemigos. NL Agota." + }, + "awakened:SludgeBomb": { + "NAME": "Bomba de Lodo", + "DESCRIPTION": "Solo se puede jugar si un *Vacío está Agotado. NL Haz !D! de daño a TODOS los enemigos. NL Borra un *Vacío de tu Pila de Descarte.", + "EXTENDED_DESCRIPTION": [ + "No tengo un Vacío Agotado." + ] + }, + "awakened:KnifesEdge": { + "NAME": "Filo del Cuchillo", + "DESCRIPTION": "Gana !awakened:m2! Fuerza. NL Añade !M! *Vacíos a tu Pila de Descarte." + }, + "awakened:FourthDimension": { + "NAME": "4ta Dimensión", + "DESCRIPTION": "Agota una carta. NL Baraja !M! copias de ella en tu pila de extracción. NL Agota.", + "EXTENDED_DESCRIPTION": [ + "Agota para 4ta Dimensión." + ] + }, + "awakened:RavenStrike": { + "NAME": "Golpe del Cuervo", + "DESCRIPTION": "Haz !D! de daño. NL awakened:Canto: Juega la carta superior de tu pila de extracción." + }, + "awakened:Unleash": { + "NAME": "Desatar", + "DESCRIPTION": "Haz !D! de daño. NL Haz !M! de daño adicional por cada otra carta en tu mano." + }, + "awakened:DesperatePrayer": { + "NAME": "Oración Desesperada", + "DESCRIPTION": "Agrega !M! *Ceremonia a tu mano. NL Agota." + }, + "awakened:BirdsEye": { + "NAME": "Ojo de Pájaro", + "DESCRIPTION": "Elige un Hechizo para awakened:Conjurar.", + "UPGRADE_DESCRIPTION": "Recarga tus Hechizos. Elige un Hechizo para awakened:Conjurar." + }, + "awakened:Initiation": { + "NAME": "Iniciación", + "DESCRIPTION": "Gana !B! de Bloqueo. NL Gana una *Ceremonia." + }, + "awakened:Ensorcelate": { + "NAME": "Ensorcelar", + "DESCRIPTION": "Gana !B! de Bloqueo. NL El próximo Poder que juegues cuesta 0." + }, + "awakened:Skyward": { + "NAME": "Vara Celestial", + "DESCRIPTION": "Gana !B! de Bloqueo. NL Roba !M! cartas. NL Cuesta 1 [E] menos por cada Poder jugado en este combate." + }, + "awakened:RisingChant": { + "NAME": "Coro Ascendente", + "DESCRIPTION": "Etérea. NL El primer efecto de awakened:Canto que actives cada turno, se ejecuta dos veces", + "UPGRADE_DESCRIPTION": "El primer efecto de awakened:Canto que actives cada turno, se ejecuta dos veces" + }, + "awakened:FeatherWhirl": { + "NAME": "Remolino de Plumas", + "DESCRIPTION": "Gana X copias de *Golpe *de *Pluma.", + "UPGRADE_DESCRIPTION": "Gana X+1 copias de *Golpe *de *Pluma." + }, + "awakened:Murder": { + "NAME": "Asesinato", + "DESCRIPTION": "Haz !D! de daño a un enemigo al azar !M! veces.", + "UPGRADE_DESCRIPTION": "Retiene. NL Haz !D! de daño a un enemigo al azar !M! veces." + }, + "awakened:Nihil": { + "NAME": "Nihilismo", + "DESCRIPTION": "Aplica !M! awakened:Quema_de_Maná. NL awakened:Canto: TODOS los enemigos pierden PV igual a su awakened:Quema_de_Maná." + }, + "awakened:MoonlitVision": { + "NAME": "Visión de Luna", + "DESCRIPTION": "La primera vez que juegues un Hechizo cada turno, NL gana [E]." + }, + "awakened:Rebirth": { + "NAME": "Renacimiento", + "DESCRIPTION": "Cuando vayas a morir o al final del combate, elimina todas las desventajas, *Despierta, y sana !M! PV en su lugar." + }, + "awakened:Archmagus": { + "NAME": "Archimago", + "DESCRIPTION": "El primer Hechizo que juegues cada turno se juega dos veces." + }, + "awakened:Planeswalk": { + "NAME": "Caminar entre Planos", + "DESCRIPTION": "Gana [E] [E] . NL Baraja un *Vacío en tu pila de extracción.", + "UPGRADE_DESCRIPTION": "Gana [E] [E] [E] . NL Baraja un *Vacío en tu pila de extracción." + }, + "awakened:Spew": { + "NAME": "Escupir", + "DESCRIPTION": "Haz !D! de daño. NL [E] gastado en esta carta, cuenta como awakened:Drenado." + }, + "awakened:DarknessFalls": { + "NAME": "Cae la Oscuridad", + "DESCRIPTION": "Cada vez que seas awakened:Drenado, gana !M! de Bloqueo y !awakened:m2! Fuerza." + }, + "awakened:Eventide": { + "NAME": "Anochecer", + "DESCRIPTION": "Haz !D! de daño a un enemigo al azar dos veces. NL Añade un *Vacío en la parte superior de tu pila de extracción." + }, + "awakened:EclipseEmbrace": { + "NAME": "Acoger el Eclipse", + "DESCRIPTION": "Siempre que agotes un *Vacío, gana [E] y roba una carta el próximo turno." + }, + "awakened:Clutch": { + "NAME": "Agarre", + "DESCRIPTION": "Haz !D! de daño. NL Roba una carta de coste 0." + }, + "awakened:Gloomguard": { + "NAME": "Guardia de las Tinieblas", + "DESCRIPTION": "Gana !B! de Bloqueo. NL Cuesta 0 si hay un *Vacío en tu mano." + }, + "awakened:Carrionmaker": { + "NAME": "Hacedor de Carroña", + "DESCRIPTION": "Haz !D! de daño a un enemigo al azar. NL Repite por cada Hechizo jugado este turno.", + "EXTENDED_DESCRIPTION": [ + " NL (", + " Hechizo jugado.)", + " Hechizos jugados.)" + ] + }, + "awakened:MirePit": { + "NAME": "Foso de Pantano", + "DESCRIPTION": "TODOS los enemigos pierden !M! de Fuerza este turno. NL El próximo turno, pierde [E]. NL Agota." + }, + "awakened:SingularityShield": { + "NAME": "Escudo de Singularidad", + "DESCRIPTION": "Gana !B! de Bloqueo. NL El próximo turno, gana !B! de Bloqueo y pierde [E]." + }, + "awakened:Dejection": { + "NAME": "Repulsión", + "DESCRIPTION": "Haz !D! de daño. NL Agota una carta. Si era un Hechizo, obténn una *Ceremonia." + }, + "awakened:BloodRite": { + "NAME": "Rito de Sangre", + "DESCRIPTION": "Haz !D! de daño. NL Gana un *Ceremonia." + }, + "awakened:SongOfSorrow": { + "NAME": "Canción de Lamento", + "DESCRIPTION": "Cada vez que creas un *Vacío, TODOS los enemigos pierden !M! PV." + }, + "awakened:MysticOrder": { + "NAME": "Orden Mística", + "DESCRIPTION": "Roba !M! cartas. NL awakened:Conjura." + }, + "awakened:ProfaneStrike": { + "NAME": "Golpe Profano", + "DESCRIPTION": "Haz !D! de daño. NL Pon una carta de tu mano en la parte superior de tu pila de extracción." + }, + "awakened:Victuals": { + "NAME": "Víveres", + "DESCRIPTION": "awakened:Canto: Gana [E] [E] . NL Agota.", + "UPGRADE_DESCRIPTION": "awakened:Canto: Gana [E] [E] [E] . NL Agota." + }, + "awakened:Gather": { + "NAME": "Recolectar", + "DESCRIPTION": "Gana !B! de Bloqueo. NL awakened:Canto: Pon una carta de tu pila de descarte en tu mano." + }, + "awakened:TheTower": { + "NAME": "La Torre", + "DESCRIPTION": "Haz !D! de daño a TODOS los enemigos. NL Haz !M! de daño adicional por cada carta creada en este combate." + }, + "awakened:ArcaneNesting": { + "NAME": "Nidificación Arcana", + "DESCRIPTION": "Injugable. NL Cada vez que juegues un Poder mientras esta carta está en mano, gana !B! de Bloqueo.", + "EXTENDED_DESCRIPTION": [ + "Debo jugar Poderes para ganar Bloqueo de esto." + ] + }, + "awakened:MiddenHeap": { + "NAME": "Montón de Desechos", + "DESCRIPTION": "Gana !B! de Bloqueo. NL Pon !M! carta de Estado o Maldición de tu pila de extracción o descarte en tu mano.", + "UPGRADE_DESCRIPTION": "Gana !B! de Bloqueo. NL Pon !M! cartas de Estado o Maldición de tu pila de extracción o descarte en tu mano.", + "EXTENDED_DESCRIPTION": [ + "Selecciona una carta para mover a tu mano.", + "Selecciona cartas para mover a tu mano." + ] + }, + "awakened:Caw": { + "NAME": "Graznar", + "DESCRIPTION": "Haz !D! de daño. NL awakened:Canto: Aumenta el daño de todas las cartas *Graznar en !M! este combate." + }, + "awakened:Scour": { + "NAME": "Desgarrar", + "DESCRIPTION": "Haz !D! de daño. NL Aplica !M! awakened:Quema_de_Maná." + }, + "awakened:Manastorm": { + "NAME": "Tormenta de Maná", + "DESCRIPTION": "Haz !D! de daño a TODOS los enemigos. NL awakened:Conjura dos veces." + }, + "awakened:StormRuler": { + "NAME": "Traer la Tormenta", + "DESCRIPTION": "awakened:Conjura. NL Todos los *Rayo hacen !M! de daño adicional este combate." + }, + "awakened:AphoticFount": { + "NAME": "Fuente Afótica", + "DESCRIPTION": "awakened:Conjura. NL Cada vez que juegues *Criostasis, gana !M! *Armadura *de expansioncontent:Placas." + }, + "awakened:Bloodthirst": { + "NAME": "Sed de Sangre", + "DESCRIPTION": "Haz !D! de daño. NL Si es Fatal, gana una awakened:Poción_de_Poder y Agota esta carta." + }, + "awakened:Procession": { + "NAME": "Procesión", + "DESCRIPTION": "Juega una carta de tu pila de extracción y baraja *Vacíos iguales a su coste. NL Agota." + }, + "awakened:SplitWide": { + "NAME": "Separar", + "DESCRIPTION": "Haz !D! de daño. NL Al atacar a este enemigo, gana !M! de Fuerza temporal. NL Agota." + }, + "awakened:Spellshield": { + "NAME": "Escudo de Hechizo", + "DESCRIPTION": "Cada vez que retienes una carta, gana !M! de Bloqueo." + }, + "awakened:Siphon": { + "NAME": "Sifón", + "DESCRIPTION": "Haz !D! de daño. NL awakened:Canto: gremlin:Roba !M! de Fuerza este turno." + }, + "awakened:PlumeJab": { + "NAME": "Golpe de Pluma", + "DESCRIPTION": "Retiene. NL Haz !D! de daño a un enemigo al azar dos veces. NL Agota." + }, + "awakened:Primacy": { + "NAME": "Primacía", + "DESCRIPTION": "La primera vez que ganas Fuerza cada turno, roba una carta.", + "UPGRADE_DESCRIPTION": "Las primeras !M! veces que ganas Fuerza cada turno, roba una carta." + }, + "awakened:Daggerstorm": { + "NAME": "Tormenta de Dagas", + "DESCRIPTION": "Cada vez que creas una carta, haz !M! de daño a un enemigo al azar." + }, + "awakened:PackRat": { + "NAME": "Rata de Paquete", + "DESCRIPTION": "Haz !D! de daño y gana !B! de Bloqueo dos veces. NL Obtén una poción aleatoria. NL Agota." + }, + "awakened:Mantis": { + "NAME": "Mantis", + "DESCRIPTION": "Gana !M! de Fuerza. NL Añade un *Golpe *de *Pluma a tu mano." + }, + "awakened:ManaShield": { + "NAME": "Escudo de Maná", + "DESCRIPTION": "Gana !B! de Bloqueo. NL awakened:Conjura. NL Reduce el coste de un hechizo aleatorio en mano en 1." + }, + "awakened:Crusher": { + "NAME": "Triturador", + "DESCRIPTION": "Retiene. NL Haz !D! de daño. NL Cuando se crea una carta, reduce el coste de esta carta en 1 hasta que se juegue." + }, + "awakened:Minniegun": { + "NAME": "Minigun", + "DESCRIPTION": "Haz !D! de daño !M! veces. NL Baraja un *Vacío en tu pila de extracción." + }, + "awakened:SignInBlood": { + "NAME": "Firma en Sangre", + "DESCRIPTION": "Recibe !awakened:m2! de daño. NL Roba !M! cartas. NL Gana !awakened:m2! de Fuerza. NL Agota." + }, + "awakened:SpreadingSpores": { + "NAME": "Esporas Extendidas", + "DESCRIPTION": "Etérea. NL Gana !M! Espinas. NL Baraja una copia de esto en tu pila de extracción." + }, + "awakened:Scheme": { + "NAME": "Esquema", + "DESCRIPTION": "La próxima carta que juegues este turno que cueste 1 o menos se juega dos veces.", + "UPGRADE_DESCRIPTION": "Las próximas !M! cartas que juegues este turno que cuesten 1 o menos se juegan dos veces." + }, + "awakened:TheEncyclopedia": { + "NAME": "La Enciclopedia", + "DESCRIPTION": "Elige 2 de !M! cartas aleatorias para agregar a tu mano. Cuestan 2 menos. NL Agota.", + "EXTENDED_DESCRIPTION": [ + "Elige 2 cartas para agregar a tu mano." + ] + }, + "awakened:RealityRift": { + "NAME": "Fisura de Realidad", + "DESCRIPTION": "Elige !awakened:m2! de !M! cartas poderosas de *OTRA *DIMENSIÓN para Obtener. NL Agrega 2 *Vacíos a tu pila de descarte. Agotar." + }, + "awakened:Inscribe": { + "NAME": "Inscribir", + "DESCRIPTION": "Elige un Hechizo. Agrega una copia al Libro de Hechizos por el resto del combate", + "UPGRADE_DESCRIPTION": "awakened:Conjura. NL Elige un Hechizo. Agrega !M! copias al Libro de Hechizos por el resto del combate" + } +} diff --git a/src/main/resources/awakenedResources/localization/spa/CharacterStrings.json b/src/main/resources/awakenedResources/localization/spa/CharacterStrings.json new file mode 100644 index 0000000000..fc9c76205c --- /dev/null +++ b/src/main/resources/awakenedResources/localization/spa/CharacterStrings.json @@ -0,0 +1,13 @@ +{ + "awakened:awakenedOne": { + "NAMES": [ + "El Despertado", + "El Despertado" + ], + "TEXT": [ + "El triunfo del Culto y el inmortal brujo oscuro del Más allá. NL Posee poder sobre el Vacío y todos los demás elementos.", + "NL Conjura tus mayores hechizos...", + "Al navegar por una calle sin iluminar, te encuentras con varias figuras encapuchadas en medio de algún ritual oscuro. Al acercarte, se vuelven hacia ti con una inquietante sincronización. El más alto de entre ellos muestra dientes afilados y extiende una mano larga y pálida hacia ti. NL ~\"Únete~ ~a~ ~nosotros~ ~ascendido,~ ~y~ ~siente~ ~la~ ~calidez~ ~de~ ~la~ ~Aguja.\"~" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/spa/EventStrings.json b/src/main/resources/awakenedResources/localization/spa/EventStrings.json new file mode 100644 index 0000000000..a346658b46 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/spa/EventStrings.json @@ -0,0 +1,72 @@ +{ + "awakened:Nest": { + "NAME": "El Nido", + "DESCRIPTIONS": [ + "Lo has encontrado y has regresado. NL #pEl #pNido, el lugar de tu ascensión al #b~avatar~ #b~viviente~ #b~de~ #b~un~ #b~dios.~ Al instante de entrar, te rodean Cultistas, @gritando@ y @animándote@! NL Saben bien que tus llegadas suelen requerir un #r@tributo....@", + "Las batallas que vienen serán difíciles, y este es el momento perfecto para encontrar una pieza única de armamento para tu arsenal. NL NL #r@...No@ #r@dagas@ #r@por@ #r@favor.@ NL NL Realizas un potente ritual para invocar una #yreliquia extremadamente poderosa, pero realizar este ritual te ha dejado muy agotado. NL NL Exhausto, abandonas el Nido, esperando que tu nueva arma cause estragos.", + "Cada vez más miembros de la bandada se alinean, trayéndote ofrendas. NL NL La mayoría son @basura@ @inútil,@ pero uno trae una ofrenda particularmente interesante: un #belixir #bpotente que podría beneficiarte mucho en batalla. NL NL Poco después, dejas el Nido y continúas tu viaje descendiendo la Aguja.", + "Los cultistas te rodean aún más de lo normal al ver que su estatua preciada ha regresado. NL Como es motivo de celebración, te colman de regalos y Almas! NL Cuando termina la celebración y has dejado el Nido, te das cuenta de que podrías haber aprovechado este tiempo para buscar un arma valiosa... NL NL Ya es demasiado tarde, pero sigues adelante.", + "#r@\"¡DIOS PÁJARO!!@ #r@¡REGRESÓ!!\"@ NL #b~\"CAW~ #b~CAW~ #b~CAAAAAWWW!\"~ NL La estatua que decidiste no destruir ha sido útil hoy sin duda.", + "", + "", + "Los Cultistas te rodean aún más de lo normal al ver que su estatua preciada ha regresado. NL Como es motivo de celebración, te colman de regalos y Almas! NL Cuando termina la celebración y has dejado el Nido, te das cuenta de que podrías haber aprovechado este tiempo para buscar un arma valiosa... NL NL Ya es demasiado tarde, pero sigues adelante.", + "Te diriges rápidamente a la Caja de Donaciones y la tesorería, con la intención de aprovechar al máximo las monedas y encontrar una #yReliquia también. NL NL Las monedas, pagadas con sangre, pueden servir como sustituto viable de #bAlmas. NL NL La #yReliquia, por supuesto, también será útil en las pruebas venideras. NL NL Tomas las monedas #rbañadas en sangre de la Caja de Donaciones, con la intención de aprovecharlas al máximo, pero notas que las arcas están bastante vacías... NL NL NL ~...~", + "¿Te han... #r@robado?@ ¿El Nido, #probado? NL NL Por supuesto que no, ~no~ ~hay~ forma de que eso ocurra. NL NL NL Sería tonto siquiera pensarlo. NL NL NL ~...¿verdad?~ NL NL NL Apartas tus #y~dudas~ #y~persistentes~ y sigues adelante, alejándote del Nido." + ], + "OPTIONS": [ + "[Devolver Estatua] #rPierdes #rEstatua #rAla #rRota. #gObtienes #gmuchas #grecompensas.", + "[Bloqueado] Requiere Estatua Ala Rota.", + "[Recoger Ofrendas] #gObtienes #guna #gPoción #gCuriosa.", + "[Invocar Armamento] #gObtienes #guna #gReliquia #gespecial. #rPierdes #r", + " #rVida #rMáxima.", + "[Caja de Donaciones] #gObtienes #g", + " #gOro #gy #guna #gReliquia #gComún. #rTe #rMaldices #r- #rDuda.", + "[Salir]", + "[Continuar]", + "[Ser Alabado!] #gObtienes #grecompensas por devolver la #gEstatua #gAla #gRota.", + "[Continuar] - #rTe #rMaldeces #r- #rDuda." + ] + }, + "awakened:WingStatueAwakened": { + "NAME": "Estatua de Ala", + "DESCRIPTIONS": [ + "Entre las piedras y rocas, notas una gran estatua azul que representa a Mazaleth, Dios de los Cuervos. NL NL Sientes una intensa ira y deseo de destruirla. NL NL Sin embargo, sabes que hacerlo provocará la ira de tu benefactor.", + "Decides que no vale la pena el peligro de destruir la estatua, y en su lugar decides llevártela contigo. NL Te esfuerzas bajo su peso, pero pronto te acostumbras y sigues adelante.", + "Golpeas la estatua, ¡rompiéndola en pedazos! NL Entre los escombros, encuentras un fragmento afilado que aún posee magia residual. NL Te marchas, sintiendo una #penergía #poscura filtrarse en tu sangre.", + "Pasas de largo y continúas.", + "¿CA...Caw?! ¿Regalo para el DIOS PÁJARO?", + "¡CA-CAAAW!", + "¿Un intercambio? Una oferta justa...", + "El culto estará complacido." + ], + "OPTIONS": [ + "[Destruir] #gObtienes #gFragmento #gAfilado. #rTe #rMaldeces #rdos #rveces #r- #rHemofilia.", + "[Recoger] #rPierdes #r", + "[Salir]", + " #rPV. #gObtienes #gEstatua #gAla #gRota." + ] + }, + "awakened:BackToBasics": { + "NAME": "", + "DESCRIPTIONS": [ + "Nada importa excepto la lucha por la vida. El aquí y ahora." + ], + "OPTIONS": [ + "[Desesperación] #gTus #gGolpes #gy #gDefensas #gse #gvuelven #gDrenantes.", + "[Bloqueado] Requiere un Golpe o Defensa." + ] + }, + "awakened:AbyssEvent": { + "NAME": "Desde el Abismo", + "DESCRIPTIONS": [ + "Este es un texto de introducción.", + "Este es un texto de cierre - ¡tomaste el objeto!", + "Este es un texto de cierre - no tomaste el objeto." + ], + "OPTIONS": [ + "[Alcanzar] Obtén #gFisura #gde #gRealidad. #rTe #rMaldices - #rEnvejecido.", + "[Salir] Segunda opción que actualmente solo es salir.", + "[Salir]" + ] + } +} diff --git a/src/main/resources/awakenedResources/localization/spa/KeywordStrings.json b/src/main/resources/awakenedResources/localization/spa/KeywordStrings.json new file mode 100644 index 0000000000..2f2fb963c0 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/spa/KeywordStrings.json @@ -0,0 +1,73 @@ +[ + { + "PROPER_NAME": "Poción de Poder", + "NAMES": [ + "Power Potion", + "Power_Potion", + "power_potion", + "powerpotion", + "Poción de Poder", + "poción_de_poder" + ], + "DESCRIPTION": "#yPoción [REMOVE_SPACE]: Elije #b1 de #b3 cartas de #yPoder aleatorias para añadir a tu mano, cuesta #b0 este turno." + }, + { + "PROPER_NAME": "Conjuro", + "NAMES": [ + "conjure", + "conjured", + "awaken", + "despertar", + "despierta", + "conjuro", + "conjura", + "conjurar" + ], + "DESCRIPTION": "Crea la próxima carta de tu Libro de Hechizos en tu mano." + }, + { + "PROPER_NAME": "Canto", + "NAMES": [ + "chant", + "canto" + ], + "DESCRIPTION": "Las cartas con efecto de #yCanto se vuelven más poderosas durante el resto del combate si la última carta jugada en combate fue una carta de #yPoder." + }, + { + "PROPER_NAME": "Hex", + "NAMES": [ + "hex", + "hexxed", + "hexx" + ], + "DESCRIPTION": "Las criaturas con #yHex reciben #b20% más daño del próximo Ataque por cada acumulación. #yHex se elimina una vez después de ser atacado." + }, + { + "PROPER_NAME": "Drenado", + "NAMES": [ + "drain", + "drained", + "drenado" + ], + "DESCRIPTION": "Cualquier efecto que cause que pierdas [E] , incluso si no tienes para perder. (No incluye [E] gastado al jugar cartas.)" + }, + { + "PROPER_NAME": "Quemadura de Maná", + "NAMES": [ + "manaburn", + "Quemadura de Maná", + "quemadura_de_maná", + "Quema de Maná", + "quema_de_maná" + ], + "DESCRIPTION": "Cuando pierdes [E] , incluso si no tienes para perder, pierde PV igual a #yQuemadura #yde #yManá [REMOVE_SPACE]. (No incluye [E] gastado al jugar cartas.)" + }, + { + "PROPER_NAME": "Curiosidad", + "NAMES": [ + "curiosity", + "curiosidad" + ], + "DESCRIPTION": "Cada vez que juegues una carta de #yPoder, gana #b1 #yFuerza [REMOVE_SPACE]." + } +] diff --git a/src/main/resources/awakenedResources/localization/spa/MonsterStrings.json b/src/main/resources/awakenedResources/localization/spa/MonsterStrings.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/spa/MonsterStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/spa/OrbStrings.json b/src/main/resources/awakenedResources/localization/spa/OrbStrings.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/spa/OrbStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/spa/PotionStrings.json b/src/main/resources/awakenedResources/localization/spa/PotionStrings.json new file mode 100644 index 0000000000..fc61dcd220 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/spa/PotionStrings.json @@ -0,0 +1,30 @@ +{ + "awakened:PhaseSkip": { + "NAME": "Bebida del Ascendido", + "DESCRIPTIONS": [ + "#yDespierta inmediatamente y #yMejora todas tus cartas por el resto del combate." + ] + }, + "awakened:CultistsDelight": { + "NAME": "Delicia del Cultista", + "DESCRIPTIONS": [ + "Cada vez que juegas una carta de #yPoder en este combate, gana #b", + " #yFuerza [REMOVE_SPACE]. Añade un #yPoder aleatorio a tu mano que cuesta #b0 este turno." + ] + }, + "awakened:SacramentalWine": { + "NAME": "Vino Sacramental", + "DESCRIPTIONS": [ + "Cada vez que juegas una carta de #yPoder en este combate, gana #b", + " #yBloqueo [REMOVE_SPACE]. Añade un #yPoder aleatorio a tu mano que cuesta #b0 este turno." + ] + }, + "awakened:SneckoPowersPotion": { + "NAME": "Esencia de Snecko", + "DESCRIPTIONS": [ + "Elige #b1 de #b3 poderes #yAjenos aleatorios para añadir a tu mano, cuesta #b0 este turno.", + "Elige #b1 de #b3 poderes #yAjenos aleatorios y añade #b", + " copias a tu mano, cuestan #b0 este turno." + ] + } +} diff --git a/src/main/resources/awakenedResources/localization/spa/PowerStrings.json b/src/main/resources/awakenedResources/localization/spa/PowerStrings.json new file mode 100644 index 0000000000..f09ccf38bb --- /dev/null +++ b/src/main/resources/awakenedResources/localization/spa/PowerStrings.json @@ -0,0 +1,249 @@ +{ + "awakened:IntensifyPower": { + "NAME": "Intensificar", + "DESCRIPTIONS": [ + "Este turno, todas las cartas de Hechizo cuestan #b0 [REMOVE_SPACE].", + "Por los próximos #b", + " turnos, todas las cartas de Hechizo cuestan #b0 [REMOVE_SPACE]." + ] + }, + "awakened:IntensifyDebuffPower": { + "NAME": "Fatiga", + "DESCRIPTIONS": [ + "No puedes #yConjurar por el resto del turno.", + "No puedes #yConjurar por los próximos #b", + " turnos." + ] + }, + "awakened:RisingChantPower": { + "NAME": "Coro Ascendente", + "DESCRIPTIONS": [ + "Los primeros #b", + "Efecto(s) de #yCanto este turno se activa(n) 2 veces. NL #b", + "Efecto(s) faltantes este turno." + ] + }, + "awakened:CursedStrength": { + "NAME": "Bendición Oscura", + "DESCRIPTIONS": [ + "Cada vez que seas #yDrenado [REMOVE_SPACE], gana #b", + " #yFuerza [REMOVE_SPACE]." + ] + }, + "awakened:ThaumaturgyPower": { + "NAME": "Taumaturgia", + "DESCRIPTIONS": [ + "Al comienzo de tus próximos #b", + " turnos, gana una #yCeremonia [REMOVE_SPACE]." + ] + }, + "awakened:SacramentPower": { + "NAME": "Sacramentos", + "DESCRIPTIONS": [ + "Cada vez que juegues una carta de #yPoder [REMOVE_SPACE], gana #b", + " #yBloqueo [REMOVE_SPACE]." + ] + }, + "awakened:FlarePower": { + "NAME": "Destello de Plumas", + "DESCRIPTIONS": [ + "Cada vez que juegues una carta que #yno sea de #yataque este turno, TODOS los enemigos pierden #b", + " PV." + ] + }, + "awakened:PrimacyPower": { + "NAME": "Primacía", + "DESCRIPTIONS": [ + "La primera vez que ganes #yFuerza cada turno, roba una carta.", + "Las primeras #b", + " veces que ganes #yFuerza cada turno, roba una carta.", + " NL Este efecto puede activarse #b", + " veces más este turno.", + " vez más este turno.", + " NL Este efecto no se puede activar de nuevo este turno." + ] + }, + "awakened:SpellbinderPower": { + "NAME": "Aglutinador de Hechizos", + "DESCRIPTIONS": [ + "Al comienzo de tu turno, #yConjura [REMOVE_SPACE].", + "Al comienzo de tu turno, #yConjura #b", + " veces." + ] + }, + "awakened:DarkEchoPower": { + "NAME": "Eco Oscuro", + "DESCRIPTIONS": [ + "Al final de tu turno, inflige #b", + " de daño a TODOS los enemigos #b", + " veces.", + " de daño a TODOS los enemigos." + ] + }, + "awakened:MoonlitVisionPower": { + "NAME": "Visión de Luna", + "DESCRIPTIONS": [ + "La primera vez que juegues un hechizo cada turno, gana [E] .", + "Las primeras #b", + " veces que juegues un Hechizo cada turno, gana [E] .", + " NL #b", + " restante este turno." + ] + }, + "awakened:EclipseEmbracePower": { + "NAME": "Abrazo del Eclipse", + "DESCRIPTIONS": [ + "Cada vez que #yAgotes un #yVacio [REMOVE_SPACE], gana [E] y roba una carta el próximo turno.", + "Cada vez que #yAgotes un #yVacio [REMOVE_SPACE], gana #b", + " [E] y roba #b", + " cartas el próximo turno." + ] + }, + "awakened:SongOfSorrowPower": { + "NAME": "Canto de Pena", + "DESCRIPTIONS": [ + "Cada vez que crees un #yVacio [REMOVE_SPACE], TODOS los enemigos pierden #b", + " PV." + ] + }, + "awakened:ShroudOfMiasmaPower": { + "NAME": "Velo de Miasma", + "DESCRIPTIONS": [ + "Cada vez que ataques a un enemigo con #yHex [REMOVE_SPACE], gana #b", + " #yBloqueo [REMOVE_SPACE]." + ] + }, + "awakened:StrengthReturnPower": { + "NAME": "Ruptura Total", + "DESCRIPTIONS": [ + "Al atacar a este enemigo, gana #b", + " #yFuerza #ytemporal [REMOVE_SPACE]." + ] + }, + "awakened:ManaburnPower": { + "NAME": "Quemadura de Maná", + "DESCRIPTIONS": [ + "Cada vez que seas #yDrenado [REMOVE_SPACE], pierde #b", + " PV." + ] + }, + "awakened:ArchmagusPower": { + "NAME": "Archimago", + "DESCRIPTIONS": [ + "El primer Hechizo que juegues cada turno se juega dos veces.", + "Los primeros #b", + " Hechizos que juegues cada turno se juegan dos veces.", + " NL ( [REMOVE_SPACE]#b", + " Repeticiones de Hechizo restantes)" + ] + }, + "awakened:DoubleSpellPower": { + "NAME": "Hechizo repetido", + "DESCRIPTIONS": [ + "El siguiente Hechizo jugado este turno, se activa 2 veces.", + "Los siguientes #b", + " Hechizos jugados este turno, se activa 2 veces." + ] + }, + "awakened:DarknessFallsPower": { + "NAME": "Caída de la Oscuridad", + "DESCRIPTIONS": [ + "Cada vez que seas #yDrenado [REMOVE_SPACE], gana #b", + " #yBloqueo [REMOVE_SPACE]." + ] + }, + "awakened:VoidRefundPower": { + "NAME": "Llamado Clarion", + "DESCRIPTIONS": [ + "La próxima vez que seas #yDrenado [REMOVE_SPACE], gana [E] .", + "La próxima vez que seas #yDrenado [REMOVE_SPACE], gana #b", + " [E] ." + ] + }, + "awakened:DemonGlyphPower": { + "NAME": "Glifo Demoníaco", + "DESCRIPTIONS": [ + "Gana #b", + " #yFuerza y #yDestreza cuando #yDespiertes [REMOVE_SPACE]." + ] + }, + "awakened:ReverseRitualPower": { + "NAME": "Forma Despierta", + "DESCRIPTIONS": [ + "Al comienzo de tu turno, gana #b", + " #yRitual [REMOVE_SPACE]." + ] + }, + "awakened:EnsorcelatePower": { + "NAME": "Encantar", + "DESCRIPTIONS": [ + "El próximo #yPoder que juegues cuesta #b0 [REMOVE_SPACE].", + "Los próximos #b", + " #yPoderes que juegues cuestan #b0 [REMOVE_SPACE]." + ] + }, + "awakened:ConjureNextPower": { + "NAME": "Arrancar", + "DESCRIPTIONS": [ + "La proxima vez que seas #yDrenado [REMOVE_SPACE], agrega un #yGolpe #yde #yPluma a tu mano.", + "La proxima vez que seas #yDrenado [REMOVE_SPACE], agrega #b", + " copias de #yGolpe #yde #yPluma [REMOVE_SPACE]." + ] + }, + "awakened:ChosensVersePower": { + "NAME": "Verso Elegido", + "DESCRIPTIONS": [ + "La próxima vez que juegues una carta que no sea de ataque este turno, roba una carta y gana #b", + " #yBloqueo [REMOVE_SPACE].", + "Las próximas #b", + " veces que juegues una carta que no sea de ataque este turno, roba una carta y gana #b", + " #yBloqueo [REMOVE_SPACE]." + ] + }, + "awakened:AphoticFountPower": { + "NAME": "Fuente Apótica", + "DESCRIPTIONS": [ + "Cada vez que juegues #yCriostasis [REMOVE_SPACE], gana #b", + " #yArmadura #yde #yPlacas [REMOVE_SPACE]." + ] + }, + "awakened:GrimoirePower": { + "NAME": "Amo de Tormentas", + "DESCRIPTIONS": [ + "Tus #yRayo infligen #b", + " de daño adicional." + ] + }, + "awakened:SpellshieldPower": { + "NAME": "Escudo de Hechizo", + "DESCRIPTIONS": [ + "Cada vez que #yRetengas una carta, gana #b", + " #yBloqueo." + ] + }, + "awakened:DaggerstormPower": { + "NAME": "Tormenta de Dagas", + "DESCRIPTIONS": [ + "Cada vez que crees una carta, inflige #b", + " de daño a un enemigo al azar." + ] + }, + "awakened:SchemePower": { + "NAME": "Plan", + "DESCRIPTIONS": [ + "Las próximas #b", + " cartas jugadas este turno que cuesten #b1 o menos se jugarán dos veces.", + "La próxima carta jugada este turno que cueste #b1 o menos se jugará dos veces." + ] + }, + "awakened:FourthDimensionPower": { + "NAME": "4ta Dimensión", + "DESCRIPTIONS": [ + "Al comienzo de tu próximo #b", + " turno, ", + " turnos, ", + "juega y #yAgota una copia de ", + " [REMOVE_SPACE]." + ] + } +} diff --git a/src/main/resources/awakenedResources/localization/spa/RelicStrings.json b/src/main/resources/awakenedResources/localization/spa/RelicStrings.json new file mode 100644 index 0000000000..465a52285c --- /dev/null +++ b/src/main/resources/awakenedResources/localization/spa/RelicStrings.json @@ -0,0 +1,160 @@ +{ + "awakened:RippedDoll": { + "NAME": "Muñeca Desgarrada", + "FLAVOR": "El último recordatorio de tu yo anterior. Todavía contiene magia latente.", + "DESCRIPTIONS": [ + "Al comienzo de los primeros #b", + " turnos de cada combate, #yawakened:Conjura [REMOVE_SPACE]." + ] + }, + "awakened:ShreddedDoll": { + "NAME": "Muñeca Destruida", + "FLAVOR": "Un recordatorio de tu debilidad, y aún así no puedes dejarlo ir.", + "DESCRIPTIONS": [ + "Reemplaza ", + "[REMOVE_SPACE].[] NL Al comienzo de tu turno, #yawakened:Conjurar [REMOVE_SPACE]. NL La primera vez que renuevas tus Hechizos en cada combate, gana #b1 #yRitual [REMOVE_SPACE]." + ] + }, + "awakened:WhiteRibbon": { + "NAME": "Cinta Blanca", + "FLAVOR": "Da poder a las palabras habladas incluso sin ritual adecuado.", + "DESCRIPTIONS": [ + "Cada vez que juegues una carta con un efecto activo de #yawakened:Canto, gana #b", + " #yBloqueo [REMOVE_SPACE], incluso si no se activa." + ] + }, + "awakened:HexxBomb": { + "NAME": "Bomba de Maná", + "FLAVOR": "3... 2...", + "DESCRIPTIONS": [ + "Cada vez que un enemigo muere, transfiere cualquier #yQuemadura #yde #yManá que tenga a un enemigo al azar." + ] + }, + "awakened:TomeOfPortalmancy": { + "NAME": "Tomo de Portales", + "FLAVOR": "Un grimorio que detalla la construcción y mantenimiento de puertas interplanares.", + "DESCRIPTIONS": [ + "Siempre que un #yVacío sea creado [REMOVE_SPACE], aplica #b", + " #yQuemadura #yde #yManá a TODOS los enemigos." + ] + }, + "awakened:EyeOfTheOccult": { + "NAME": "Ojo del Oculto", + "FLAVOR": "Este espeluznante tallado imparte conocimiento mágico a su dueño.", + "DESCRIPTIONS": [ + "#yRayo y #ySanguijuela #yOscura apuntan a TODOS los enemigos." + ] + }, + "awakened:DeadBird": { + "NAME": "Espíritu Corvídeo", + "FLAVOR": "Este espectro sigue de cerca a los condenados y malditos.", + "DESCRIPTIONS": [ + "Al final de tu turno, inflige #b", + " de daño al enemigo con menos PV, aumentado por #yFuerza [REMOVE_SPACE]." + ] + }, + "awakened:AbyssBlade": { + "NAME": "Hoja del Abismo", + "FLAVOR": "Reembolso del Vacío.", + "DESCRIPTIONS": [ + "La primera vez seas #yawakened:Drenado cada turno, gana [E] y roba una carta." + ] + }, + "awakened:ShardOfNowak": { + "NAME": "Fragmento de Hueso Dorado", + "FLAVOR": "...No, no ese tipo de enfoque.", + "DESCRIPTIONS": [ + "Comienza cada combate con #b", + " de #yFuerza [REMOVE_SPACE]. Después de perder cualquier tipo de PV, pierde esa #yFuerza por el resto del combate." + ] + }, + "awakened:VioletPlumage": { + "NAME": "Plumaje Violeta", + "FLAVOR": "Teñido por la oscuridad interminable del olvido.", + "DESCRIPTIONS": [ + "La primera vez que termines tu turno con exceso de [E] en cada combate, roba #b", + " cartas adicionales al comienzo de tu próximo turno." + ] + }, + "awakened:ZenerDeck": { + "NAME": "Mazo Zener", + "FLAVOR": "“Uno, dos, tres, todos los ojos deberían estar sobre mí.”", + "DESCRIPTIONS": [ + "Al comienzo del combate, añade #yESP a tu Libro de Hechizos y #yawakened:Conjura." + ] + }, + "awakened:CawingCask": { + "NAME": "Barril Graznando", + "FLAVOR": "Un barril ceremonialmente tallado que representa al dios cuervo Mazaleth, su contenido huele cuestionable...", + "DESCRIPTIONS": [ + "Cada vez que uses una poción, gana #b", + " #yRitual [REMOVE_SPACE]." + ] + }, + "awakened:MiniBlackHole": { + "NAME": "Alethea", + "FLAVOR": "Desde el Abismo.", + "DESCRIPTIONS": [ + "Si no juegas ningún #yPoder durante tu turno, roba una carta adicional en el siguiente turno." + ] + }, + "awakened:StrengthBooster": { + "NAME": "Cuervo de Papel", + "FLAVOR": "Árbitro de dudas y maldiciones doblado mil veces...", + "DESCRIPTIONS": [ + "Los enemigos reciben #b", + "% de daño adicional de #yawakened:Quemadura_de_Maná [REMOVE_SPACE]." + ] + }, + "awakened:CursedBlessing": { + "NAME": "Ritos Finales", + "FLAVOR": "Dejo todo lo que tengo a mi gato, Fideos. Adiós, mundo cruel. XOXO Juez", + "DESCRIPTIONS": [ + "La primera vez que actives #b", + " #yawakened:Canto en un combate, gana #b", + " #yRitual [REMOVE_SPACE]." + ] + }, + "awakened:CurvedSwordMeme": { + "NAME": "Conjurar Espada", + "FLAVOR": "Adelante, hazlo. Conjura una espada, ahora mismo. Estoy mirando. :^)", + "DESCRIPTIONS": [ + "Al comienzo del combate, añade #yConjura #yEspada a tu mano?", + "NOTA: ¡EL JUGADOR NO PUEDE OBTENER ESTE RELIQUIA FUERA DE LA CONSOLA, ES UNA RELIQUIA DE BROMA!" + ] + }, + "awakened:CurvedSword": { + "NAME": "Zetsumei", + "FLAVOR": "Una hoja favorecida por los magos debido a su capacidad de canalizar la magia lanzada de nuevo en sí misma.", + "DESCRIPTIONS": [ + "Cada vez que juegues #b", + " #yHechizos en un combate, gana una #yCeremonia [REMOVE_SPACE]." + ] + }, + "awakened:MoonTalisman": { + "NAME": "Talismán de Media Luna", + "FLAVOR": "“Por favor, solo... no me olvides. Incluso después de que muera.”", + "DESCRIPTIONS": [ + "Al recoger, elige una carta que #rNO tenga #yawakened:Conjurar [REMOVE_SPACE]. Añade #yawakened:Conjurar a ella.", + "Elige una carta para ", + "El Talismán ha bendecido a ", + " y a añadido #yawakened:Conjurar a ella.", + "La carta adjunta a esta reliquia ha sido #rremovida de tu mazo, la reliquia ya no funciona." + ] + }, + "awakened:AwakenedUrn": { + "NAME": "Jarrón con Cara de Pájaro", + "FLAVOR": "Esta urna muestra al dios cuervo Mazaleth con un aspecto travieso.", + "DESCRIPTIONS": [ + "Las primeras #b4 veces que juegues una carta de #yPoder en cada combate, cura #b", + " PV." + ] + }, + "awakened:NerfedMummifiedHand": { + "NAME": "Dessicated Hand", + "FLAVOR": "It demands true power, resisting your occultic magicks.", + "DESCRIPTIONS": [ + "Cuando juegues un #yPoder que #rNO sea #yCeremonia [REMOVE_SPACE], una carta aleatoria de tu mano costara #b0 este turno." + ] + } + } diff --git a/src/main/resources/awakenedResources/localization/spa/RunModStrings.json b/src/main/resources/awakenedResources/localization/spa/RunModStrings.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/spa/RunModStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/spa/UIStrings.json b/src/main/resources/awakenedResources/localization/spa/UIStrings.json new file mode 100644 index 0000000000..03ca803b7c --- /dev/null +++ b/src/main/resources/awakenedResources/localization/spa/UIStrings.json @@ -0,0 +1,46 @@ +{ + "awakened:SpellDescriptor": { + "TEXT": [ + "Hechizo" + ] + }, + "awakened:ConjureMod": { + "TEXT": [ + " NL awakened:Conjurar." + ] + }, + "awakened:SpellMod": { + "TEXT": [ + "[#12FAF0]Hechizo. NL" + ] + }, + "awakened:DrainingMod": { + "TEXT": [ + " NL En el siguiente turno, pierde [E]." + ] + }, + "awakened:highlightChant": { + "TEXT": [ + "awakened:Profecía: ", + "[awakenedIcon] [#12FAF0]Profecía: " + ] + }, + "awakened:Spellbook": { + "TEXT": [ + "Libro de Hechizos", + "Despertar", + "Después de jugar #b7 Poderes, #yDespierta [REMOVE_SPACE]! NL NL Mientras estás #yDespierta [REMOVE_SPACE], las cartas de Hechizo #yConjuradas están #yMejoradas [REMOVE_SPACE], aumentando su eficacia.", + "Después de jugar #b7 Poderes, #yDespierta [REMOVE_SPACE]! NL NL Mientras estás #yDespierta [REMOVE_SPACE], las cartas de Hechizo #yConjuradas están #yMejoradas [REMOVE_SPACE], aumentando su eficacia." + ] + }, + "awakened:FullSpellbook": { + "TEXT": [ + "¡Mi Libro de Hechizos está lleno!" + ] + }, + "awakened:FourthDimensionDupeAttempt": { + "TEXT": [ + "@¡Hacer@ @eso@ @rompería@ @el@ @continuo@ @espacio-tiempo!!!@" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/zhs/CardStrings.json b/src/main/resources/awakenedResources/localization/zhs/CardStrings.json new file mode 100644 index 0000000000..a3acdd1336 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/zhs/CardStrings.json @@ -0,0 +1,412 @@ + +{ + "awakened:Thunderbolt": { + "NAME": "落雷", + "DESCRIPTION": "保留 。 NL 造成 !D! 点伤害 。 NL 消耗 。" + }, + "awakened:BurningStudy": { + "NAME": "炽肄", + "DESCRIPTION": "保留 。 NL 获得 !M! 点力量 。 NL 给予所有敌人 !awakened:m2! 层 虚弱 。 NL 消耗 。" + }, + "awakened:Cryostasis": { + "NAME": "凝冻", + "DESCRIPTION": "保留 。 NL 获得 !B! 点格挡 。 NL 消耗 。" + }, + "awakened:Darkleech": { + "NAME": "暗噬", + "DESCRIPTION": "保留 。 NL 给予 !M! 层 易伤 。 NL 给予 !awakened:m2! 层 awakened:灼气 。 NL 消耗 。" + }, + "awakened:DeathCoil": { + "NAME": "死缠", + "DESCRIPTION": "给予 !M! 层 awakened:灼气 。 NL 下回合失去 [E] 。" + }, + "awakened:ESPSpell": { + "NAME": "第六感", + "DESCRIPTION": "保留 。 NL 抽 !M! 张牌 。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "保留 。 NL 抽 !M! 张牌 。 NL 消耗 。" + }, + "awakened:Strike": { + "NAME": "打击", + "DESCRIPTION": "造成 !D! 点伤害 。" + }, + "awakened:Defend": { + "NAME": "防御", + "DESCRIPTION": "获得 !B! 点格挡 。" + }, + "awakened:Brainshock": { + "NAME": "脑震荡", + "DESCRIPTION": "造成 !D! 点伤害 。 NL 将一张 *虚空 放入你的弃牌堆中 。" + }, + "awakened:Intensify": { + "NAME": "激化", + "DESCRIPTION": "awakened:念咒 。 NL 本回合内 , 咒文牌耗能变为0 , 但你不能再次 awakened:念咒 。", + "UPGRADE_DESCRIPTION": "保留 。 awakened:念咒 。 NL 本回合内 , 咒文牌耗能变为0 , 但你不能再次awakened:念咒 。" + }, + "awakened:DarkEcho": { + "NAME": "黑暗回音", + "DESCRIPTION": "在你的回合结束时 , 对所有敌人造成 !M! 点伤害 。 伤害受力量加成 。" + }, + "awakened:AwakenedForm": { + "NAME": "觉醒形态", + "DESCRIPTION": "获得 !M! 层 awakened:好奇 。 NL 获得 !awakened:m2! 层仪式 。", + "UPGRADE_DESCRIPTION": "立刻 *觉醒 。 NL 获得 !M! 层 awakened:好奇 。 NL 获得 !awakened:m2! 层仪式 。" + }, + "awakened:Spellbinder": { + "NAME": "咒束", + "DESCRIPTION": "在每回合开始时 , awakened:念咒 。" + }, + "awakened:Ceremony": { + "NAME": "祭典", + "DESCRIPTION": "保留 。 NL 获得 !M! 点力量 。" + }, + "awakened:TalonRake": { + "NAME": "爪耙", + "DESCRIPTION": "造成 !D! 点伤害两次 。 NL awakened:念咒 。" + }, + "awakened:Hymn": { + "NAME": "圣诗", + "DESCRIPTION": "获得 !B! 点格挡 。 NL 获得一张 *祭典 。 NL 下回合失去 [E] 。" + }, + "awakened:Psalm": { + "NAME": "圣咏", + "DESCRIPTION": "对所有敌人造成 !D! 点伤害及给予 !M! 层 虚弱 。" + }, + "awakened:DemonGlyph": { + "NAME": "魔符", + "DESCRIPTION": "获得 !M! 点力量及敏捷 。 NL 当你 *觉醒 时 , 获得额外 !awakened:m2! 点 。" + }, + "awakened:TakeFlight": { + "NAME": "起飞", + "DESCRIPTION": "获得 !B! 点格挡 。 NL awakened:吟唱 : 你的下一回合开始时格挡不会消失 。" + }, + "awakened:FeatherVeil": { + "NAME": "羽幕", + "DESCRIPTION": "获得 !B! 点格挡 。 NL 失去 !M! 点力量 。" + }, + "awakened:Peck": { + "NAME": "啄击", + "DESCRIPTION": "获得 !B! 点格挡 。 NL 造成 !D! 点伤害 。 NL 抽 !M! 张牌 。", + "UPGRADE_DESCRIPTION": "获得 !B! 点格挡 。 NL 造成 !D! 点伤害 。 NL 抽 !M! 张牌 。" + }, + "awakened:Extension": { + "NAME": "延伸", + "DESCRIPTION": "造成 !D! 点伤害 。 NL 每当你打出一张能力牌 , 将这张牌从弃牌堆放回你的手牌 。" + }, + "awakened:Pluck": { + "NAME": "拔羽", + "DESCRIPTION": "对所有敌人造成 !D! 点伤害 。 NL 获得一张 *羽刺 。" + }, + "awakened:FlareShot": { + "NAME": "羽熠", + "DESCRIPTION": "造成 !D! 点伤害 。 NL awakened:吟唱 : 在下一回合多抽 !M! 张牌 。" + }, + "awakened:ClarionCall": { + "NAME": "号召", + "DESCRIPTION": "造成 !D! 点伤害 。 NL 你下次 awakened:力竭 时 , 获得 [E] 。" + }, + "awakened:Recitation": { + "NAME": "朗诵", + "DESCRIPTION": "造成 !D! 点伤害 。 NL awakened:吟唱 : 再次造成 !D! 点伤害 。" + }, + "awakened:ChosenVerse": { + "NAME": "被拣选的诗句", + "DESCRIPTION": "本回合内下 !M! 次打出非攻击牌时 , 抽一张卡并获得 !B! 点格挡 。" + }, + "awakened:SoulStrike": { + "NAME": "灵魂打击", + "DESCRIPTION": "造成 !D! 点伤害 !M! 次 。 NL 你在这个回合内每打出一张能力牌 , 耗能就减少1 [E] 。" + }, + "awakened:Altar": { + "NAME": "祭坛", + "DESCRIPTION": "获得 !B! 点格挡 。 NL 消耗一张手牌 。 NL awakened:念咒 。" + }, + "awakened:Envision": { + "NAME": "设想", + "DESCRIPTION": "获得 !B! 点格挡 。 NL awakened:念咒 并将该咒文牌放到抽牌堆的顶部 。" + }, + "awakened:Thaumaturgy": { + "NAME": "神术", + "DESCRIPTION": "获得 !awakened:m2! 点敏捷 。 NL 下 !M! 回合开始时 , 将一张 *祭典 加入你的手牌 。", + "UPGRADE_DESCRIPTION": "获得 !awakened:m2! 点敏捷 。 NL 下 !M! 回合开始时 , 将一张 *祭典 加入你的手牌 。" + }, + "awakened:WaveOfMiasma": { + "NAME": "瘴气冲天", + "DESCRIPTION": "获得 !B! 点格挡 。 NL 给予所有敌人 !awakened:m2! 层 awakened:灼气 。 NL 消耗 。" + }, + "awakened:SludgeBomb": { + "NAME": "污泥弹", + "DESCRIPTION": "此牌需要一张被消耗的 *虚空 才能被打出 。 NL 对所有敌人造成 !D! 点伤害 。 NL 从消耗堆中消除一张 *虚空 。 ", + "EXTENDED_DESCRIPTION": [ + "我没有已消耗的虚空牌 。" + ] + }, + "awakened:KnifesEdge": { + "NAME": "刀锋之下", + "DESCRIPTION": "获得 !awakened:m2! 点力量 。 NL 将 !M! 张 *虚空 加入弃牌堆 。" + }, + "awakened:FourthDimension": { + "NAME": "四维空间", + "DESCRIPTION": "消耗1张牌 。 NL 将 !M! 张其复制品放入你的抽牌堆 。 NL 消耗 。", + "EXTENDED_DESCRIPTION": [ + "请选择要复制的卡牌 。" + ] + }, + "awakened:RavenStrike": { + "NAME": "渡鸦打击", + "DESCRIPTION": "造成 !D! 点伤害 。 NL awakened:吟唱 : 打出抽牌堆顶部的牌 。" + }, + "awakened:Unleash": { + "NAME": "释放", + "DESCRIPTION": "造成 !D! 点伤害 。 NL 手牌里此卡牌以外每一张牌增加 !M! 点伤害 。" + }, + "awakened:DesperatePrayer": { + "NAME": "绝地求生", + "DESCRIPTION": "获得 !M! 张 *祭典 。 NL 消耗 。" + }, + "awakened:BirdsEye": { + "NAME": "异鸟瞰", + "DESCRIPTION": "从咒典中选择一张咒文牌来 awakened:念咒 。", + "UPGRADE_DESCRIPTION": "刷新咒典 。 从咒典中选择一张咒文牌来 awakened:念咒 。" + }, + "awakened:Initiation": { + "NAME": "入教", + "DESCRIPTION": "获得 !B! 点格挡 。 NL 获得一张 *祭典 。" + }, + "awakened:Ensorcelate": { + "NAME": "妖惑", + "DESCRIPTION": "获得 !B! 点格挡 。 NL 你打出的下一张能力牌耗能变为0 。" + }, + "awakened:Skyward": { + "NAME": "御天", + "DESCRIPTION": "获得 !B! 点格挡 。 NL 抽 !M! 张牌 。 NL 你在这场战斗内每打出一张能力牌 , 耗能就减少 [E] 。" + }, + "awakened:RisingChant": { + "NAME": "递进合唱", + "DESCRIPTION": "虚无 。 NL 每回合第1个激活的 awakened:吟唱 效果将触发2次 。", + "UPGRADE_DESCRIPTION": "每回合第1个激活的 awakened:吟唱 效果将触发2次 。" + }, + "awakened:FeatherWhirl": { + "NAME": "羽飙", + "DESCRIPTION": "获得X张 *羽刺 。", + "UPGRADE_DESCRIPTION": "获得X+1张 *羽刺 。" + }, + "awakened:Murder": { + "NAME": "谋杀", + "DESCRIPTION": "随机对敌人造成 !D! 点伤害 !M! 次 。", + "UPGRADE_DESCRIPTION": "保留 。 NL 随机对敌人造成 !D! 点伤害 !M! 次 。" + }, + "awakened:Nihil": { + "NAME": "无中生有", + "DESCRIPTION": "给予 !M! 层 awakened:灼气 。 NL awakened:吟唱 : 所有敌人失去等同所持 awakened:灼气 层数的生命 。" + }, + "awakened:MoonlitVision": { + "NAME": "月映法眼", + "DESCRIPTION": "你在每回合第一次打出咒文牌時 , NL 獲得 [E] 。" + }, + "awakened:Rebirth": { + "NAME": "重生", + "DESCRIPTION": "当你将死亡或在战斗结束时 , 清除你身上的所有负面效果 , *觉醒 , 并回复 !M! 点生命 。" + }, + "awakened:Archmagus": { + "NAME": "大法师", + "DESCRIPTION": "你每回合打出的第一张咒文牌会打出两次 。" + }, + "awakened:Planeswalk": { + "NAME": "次元游走", + "DESCRIPTION": "获得 [E] [E] 。 NL 将一张 *虚空 放入你的抽牌堆中 。", + "UPGRADE_DESCRIPTION": "获得 [E] [E] [E] 。 NL 将一张 *虚空 放入你的抽牌堆中 。" + }, + "awakened:Spew": { + "NAME": "喷涌", + "DESCRIPTION": "造成 !D! 点伤害 。 NL 耗能在此卡上的 [E] 会触发 awakened:力竭 。" + }, + "awakened:DarknessFalls": { + "NAME": "夜幕低垂", + "DESCRIPTION": "每当你 awakened:力竭 时 , 获得 !M! 点格挡 及 !awakened:m2! 点力量 。", + "UPGRADE_DESCRIPTION": "固有 。 NL 每当你 awakened:力竭 时 , 获得 !M! 点格挡 及 !awakened:m2! 点力量 。" + }, + "awakened:Eventide": { + "NAME": "薄暮", + "DESCRIPTION": "随机对敌人造成 !D! 点伤害两次 。 NL 将一张 *虚空 放到抽牌堆顶部 。" + }, + "awakened:EclipseEmbrace": { + "NAME": "日蚀入怀", + "DESCRIPTION": "每当你消耗一张 *虚空 , 下回合获得 [E] 并多抽一张牌 。" + }, + "awakened:Clutch": { + "NAME": "紧抓", + "DESCRIPTION": "造成 !D! 点伤害 。 NL 抽一张耗能为0的卡牌 。" + }, + "awakened:Gloomguard": { + "NAME": "忧郁拱卫", + "DESCRIPTION": "获得 !B! 点格挡 。 NL 如果你手牌中有一张 *虚空 , 这张牌耗能为0 。" + }, + "awakened:Carrionmaker": { + "NAME": "碾成肉酱", + "DESCRIPTION": "随机对敌人造成 !D! 点伤害 。 NL 你在这个回合内每打出一张咒文牌 , 就造成多一次伤害 。", + "EXTENDED_DESCRIPTION": [ + " NL (", + " 张法术牌已被打出 。 )", + " 张法术牌已被打出 。 )" + ] + }, + "awakened:MirePit": { + "NAME": "泥沼", + "DESCRIPTION": "所有敌人失去 !M! 点力量 1回合 。 NL 下回合失去 [E] 。 NL 消耗 。" + }, + "awakened:SingularityShield": { + "NAME": "奇点盾", + "DESCRIPTION": "获得 !B! 点格挡 。 NL 下回合获得 !B! 点格挡并失去 [E] 。" + }, + "awakened:Dejection": { + "NAME": "懊丧", + "DESCRIPTION": "造成 !D! 点伤害 。 NL 消耗一张手牌 。 如果消耗的是咒文牌 , 获得一张 *祭典 。" + }, + "awakened:BloodRite": { + "NAME": "血祭", + "DESCRIPTION": "造成 !D! 点伤害 。 NL 获得一张 *祭典 。" + }, + "awakened:SongOfSorrow": { + "NAME": "哀歌", + "DESCRIPTION": "每当你生成一张 *虚空 , 所有敌人失去 !M! 点生命 。" + }, + "awakened:MysticOrder": { + "NAME": "秘术修会", + "DESCRIPTION": "抽 !M! 张牌 。 NL awakened:念咒 。" + }, + "awakened:ProfaneStrike": { + "NAME": "亵渎打击", + "DESCRIPTION": "造成 !D! 点伤害 。 NL 将一张手牌放到抽牌堆的顶部 。" + }, + "awakened:Victuals": { + "NAME": "圣馔", + "DESCRIPTION": "awakened:吟唱 : 获得 [E] [E] 。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "awakened:吟唱 : 获得 [E] [E] [E] 。 NL 消耗 。" + }, + "awakened:Gather": { + "NAME": "聚集", + "DESCRIPTION": "获得 !B! 点格挡 。 NL awakened:吟唱 : 将弃牌堆中的一张牌放入你的手牌 。" + }, + "awakened:TheTower": { + "NAME": "塔", + "DESCRIPTION": "对所有敌人造成 !D! 点伤害 。 NL 你每在这场战斗中生成一张卡牌 , 这张牌增加 !D! 点伤害 。" + }, + "awakened:ArcaneNesting": { + "NAME": "奥术筑巢", + "DESCRIPTION": "不能被打出 。 NL 当这张牌在你手中 , 每打出一张能力牌时 , 获得 !B! 点格挡 。", + "EXTENDED_DESCRIPTION": [ + "要打出能力牌才能获得格挡 。" + ] + }, + "awakened:MiddenHeap": { + "NAME": "废弃堆", + "DESCRIPTION": "获得 !B! 点格挡 。 NL 将 !M! 张 状态 或 诅咒 牌从你的抽牌堆或弃牌堆放到你的手中 。", + "UPGRADE_DESCRIPTION": "获得 !B! 点格挡 。 NL 将 !M! 张 状态 或 诅咒 牌从你的抽牌堆或弃牌堆放到你的手中 。", + "EXTENDED_DESCRIPTION": [ + "选择放入手中的卡牌 。", + "选择放入手中的卡牌 。" + ] + }, + "awakened:Caw": { + "NAME": "咔", + "DESCRIPTION": "造成 !D! 点伤害 。 NL awakened:吟唱 : 在本场战斗中所有 *咔 牌的伤害增加 !M! 。" + }, + "awakened:Scour": { + "NAME": "追寻", + "DESCRIPTION": "造成 !D! 点伤害 。 NL 给予 !M! 层 awakened:灼气 。" + }, + "awakened:Manastorm": { + "NAME": "气轰", + "DESCRIPTION": "对所有敌人造成 !D! 点伤害 。 NL awakened:念咒 两次 。" + }, + "awakened:StormRuler": { + "NAME": "雷震子", + "DESCRIPTION": "awakened:念咒 。 NL *落雷 增加 !M! 点伤害 。" + }, + "awakened:AphoticFount": { + "NAME": "无光涌泉", + "DESCRIPTION": "awakened:念咒 。 NL 每当你打出 *冰凝 , 获得 !M! 点 expansioncontent:多层护甲 。" + }, + "awakened:Bloodthirst": { + "NAME": "嗜血", + "DESCRIPTION": "造成 !D! 点伤害 。 NL 斩杀 时 , 获得一瓶 awakened:能力药水 并 消耗 此卡 。" + }, + "awakened:Procession": { + "NAME": "行进", + "DESCRIPTION": "打出抽牌堆中的一张牌 , 放入等同耗能数目的 *虚空 。 NL 消耗 。" + }, + "awakened:SplitWide": { + "NAME": "劈破", + "DESCRIPTION": "造成 !D! 点伤害 。 NL 每当目标敌人受到攻击时 , 获得 !M! 点临时力量 。 NL 消耗 。" + }, + "awakened:Spellshield": { + "NAME": "咒盾", + "DESCRIPTION": "你每保留一张牌 , 获得 !M! 点格挡 。" + }, + "awakened:Siphon": { + "NAME": "抽离", + "DESCRIPTION": "造成 !D! 点伤害 。 NL awakened:吟唱 : 这个回合 gremlin:窃取 !M! 点力量 。" + }, + "awakened:PlumeJab": { + "NAME": "羽刺", + "DESCRIPTION": "保留 。 NL 随机对敌人造成 !D! 点伤害两次 。 NL 消耗 。" + }, + "awakened:Primacy": { + "NAME": "教主至上", + "DESCRIPTION": "每回合第一次获得力量时 , 抽一张牌 。", + "UPGRADE_DESCRIPTION": "每回合首 !M! 次获得力量时 , 抽一张牌 。" + }, + "awakened:Daggerstorm": { + "NAME": "匕首风暴", + "DESCRIPTION": "每当你生成一张卡牌 , 随机对敌人做造成 !D! 点伤害 。" + }, + "awakened:PackRat": { + "NAME": "林鼠", + "DESCRIPTION": "造成 !D! 点伤害及获得 !B! 点格挡两次 。 NL 随机获得一瓶药水 。 NL 消耗 。" + }, + "awakened:Mantis": { + "NAME": "螳螂", + "DESCRIPTION": "获得 !M! 点力量 。 NL 获得一张 *羽刺 。" + }, + "awakened:ManaShield": { + "NAME": "气盾", + "DESCRIPTION": "获得 !B! 点格挡 。 NL awakened:念咒 。 NL 手牌中的一张随机咒文牌耗能减少1 。" + }, + "awakened:Crusher": { + "NAME": "粉碎者", + "DESCRIPTION": "保留 。 NL 造成 !D! 点伤害 。 NL 每当有一张卡牌被生成 , 此卡牌打出前耗能减少1 。" + }, + "awakened:Minniegun": { + "NAME": "迷你枪", + "DESCRIPTION": "造成 !D! 点伤害 !M! 次 。 NL 将一张 *虚空 放入抽牌堆 。" + }, + "awakened:SignInBlood": { + "NAME": "以血立契", + "DESCRIPTION": "失去 !awakened:m2! 点生命 。 NL 抽 !M! 张牌 。 NL 获得 !awakened:m2! 点力量 。 NL 消耗 。" + }, + "awakened:SpreadingSpores": { + "NAME": "扩散孢子", + "DESCRIPTION": "虚无 。 NL 获得 !M! 层荆棘 。 NL 将此卡复制并放入你的抽牌堆 。" + }, + "awakened:Scheme": { + "NAME": "谋划", + "DESCRIPTION": "本回合打出的下一张耗能为1或以下的卡牌将被打出两次 。", + "UPGRADE_DESCRIPTION": "本回合打出的下 !M! 张耗能为1或以下的卡牌会打出两次 。" + }, + "awakened:TheEncyclopedia": { + "NAME": "百科全书", + "DESCRIPTION": "从 !M! 张随机牌中选择2张加入你的手牌 。 本场战斗其耗能减2 。 NL 消耗 。", + "EXTENDED_DESCRIPTION": [ + "选择2张卡牌加入你的手中 。" + ] + }, + "awakened:RealityRift": { + "NAME": "次元狭缝", + "DESCRIPTION": "从 !M! 张来自 *另一次元 的随机牌中选择 !awakened:m2! 张加入你的手牌 。 NL 将 2张 *虚空 加入弃牌堆 。 消耗 。" + }, + "awakened:Inscribe": { + "NAME": "铭刻", + "DESCRIPTION": "选择一张咒文牌 , 在本场战斗中增加 !M! 张其复制品到咒典内 。", + "UPGRADE_DESCRIPTION": "awakened:念咒 。 选择一张咒文牌 , 在本场战斗中增加 !M! 张其复制品至咒典内 。" + } +} \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/zhs/CharacterStrings.json b/src/main/resources/awakenedResources/localization/zhs/CharacterStrings.json new file mode 100644 index 0000000000..d12e117cfc --- /dev/null +++ b/src/main/resources/awakenedResources/localization/zhs/CharacterStrings.json @@ -0,0 +1,13 @@ +{ + "awakened:awakenedOne": { + "NAMES": [ + "觉醒者", + "觉醒者" + ], + "TEXT": [ + "邪教登峰造极的成就 , 隐居深处永生不灭的法师 。 NL 对虚空和其他元素的掌控已到了随心所欲的境界 。", + "在灯光昏暗的街道上巡视,你遇到几个戴着兜帽的人,他们正在进行某种黑暗的仪式。 当你靠近他们时,它们怪异地向你转过身来。 其中最高的一个露出尖牙,向你伸出一只长长的苍白的手。 NL ~\"加入~ ~我们,~ ~超渡者 。 ~ ~一起~ ~感受~ ~尖塔~ ~的~ ~温暖~ ~吧 。 \"~", + "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/zhs/EventStrings.json b/src/main/resources/awakenedResources/localization/zhs/EventStrings.json new file mode 100644 index 0000000000..7eab0076fc --- /dev/null +++ b/src/main/resources/awakenedResources/localization/zhs/EventStrings.json @@ -0,0 +1,88 @@ +{ + "awakened:Nest": { + "NAME": "巢穴", + "DESCRIPTIONS": [ + "你找到并回到 #p巢穴 , 那是你超渡成 #b~神的活化身~ 的场所 。 进去的一刻 , 你被邪教徒所包围 , 周围充满为你奏鸣的 @咔叫声@ 与 @欢呼声@ ! 与此同时 , 他们知道你的大驾光临必定伴随着缴纳 #r@奉献@ 的要求… ", + "前路的战斗将更为艰难 , 而这是寻找独一无二的兵械添加到武器库的大好时机 。 NL NL #r…@不过没有匕首喔@ #r@。@ NL NL 你举行了召唤 #y遗物 的庄重仪式 , 但进行仪式使你大伤元气 。 NL NL 力竭之际 , 你离开巢穴 , 但望新武器会在苏醒之时带来浩劫 。", + "越来越多信众列队 , 为你带来祭品 。 NL NL 大部分都 @渣滓不如@ , 不过有一位教徒带来的祭品特别引人入胜 : 一瓶能在战斗中助益良多的 #b强力药水 。 NL NL 未久 , 你离开巢穴并继续崩坠的旅程 。", + "望见他们珍重的雕像 , 把你重重包围的的教徒比平时更为多 。 NL 此为喜庆之时 , 礼品与灵魂如潮水般向你涌来 ! NL 在喜庆完毕离开巢穴之际 , 你忽然想起刚才的时间其实可以用来寻找宝贵的武器… NL NL 为时已晚 , 你抱着无谓执着的心情勇往直前 。 ", + "#r@\"鸟神回归了!!\"@ NL #b~\"咔~咔~咔~~~!\"~ NL 刚才决定不破坏的雕像现在派上用场了 。", + "", + "", + "望见他们珍重的雕像 , 把你重重包围的的教徒比平时更为多 。 NL 此为喜庆之时 , 礼品与灵魂如潮水般向你涌来 ! NL 在喜庆完毕离开巢穴之际 , 你忽然想起刚才的时间其实可以用来寻找宝贵的武器… NL NL 为时已晚 , 你抱着无谓执着的心情勇往直前 。", + "你迅速步移到捐款箱及库房 , 务求精用金币和寻找一件遗物 。 NL NL 以血代偿的金币可以用作替代 #y灵魂 支付的货币 , 而 #y遗物 必能对前路的试炼有所帮助 。 NL NL 你从捐款箱中紧抓 #r血染的 金币 , 打算把它们充分利用 , 但你却发现箱里的资金接近干渴… NL NL NL ~…~ ", + "你被… #r@掠夺了吗@ #r@?@ 巢穴 , 被 #p偷窃 了 ? 才怪呢 , 这种事才 ~没可能~ 发生 。 NL NL NL 能联想到这程度的 , 也太愚昧了 。 NL NL NL ~…~ ~吧~ ~?~ NL NL NL 你把 #y~积累的疑虑~ 甩开 , 从巢穴离去 。" + ], + "OPTIONS": [ + "[归还雕像] #r失去破碎的翅膀雕像 。 #g获得许多回报 。", + "[锁定] 需要破碎的翅膀雕像 。", + "[收集祭品] #g获得邪教徒药水 。", + "[召唤武器] #g获得一件特别的遗物 。 #r失去 #r", + " #r最大生命", + "[善款箱] #g获得 #g", + " #g金币及普通遗物 。 #r被诅咒 #r- #r疑虑 。", + "[离开]", + "[继续]", + "[受赞颂 !] 获得归还 #g破碎的翅膀雕像 的 #g回报 。", + "[继续] - #r被诅咒 #r- #r疑虑 。" + ] + }, + "awakened:WingStatueAwakened": { + "NAME": "翅膀雕像", + "DESCRIPTIONS": [ + "于巨石与漂砾之间 , 你看见一尊做工精细 , 描绘乌鸦之神马泽勒斯的蓝色雕像 。 NL NL 你突然感受到一股想摧毁它的强劲欲望 , NL NL 但是你知道这行为会触动到施主的震怒 。", + "你觉得不值得冒险把雕像摧毁 , 最后決定把它傍身攜带 。 NL 你在其重量下暂时扭伤 , 不过很快便重新振作继续上路 。", + "你对雕像发泄 , 使其散落成一地的零块 ! NL 在瓦砾之中 , 你发现一块仍然滞留些少剩余魔力的尖锐碎片 。 NL 你转身离去 , 然而你感觉到 #p黑暗的能量 渗入你的血丝 。", + "你径直走开 , 继续旅程 。", + "咔… 咔 ? ! 给鸟神的贡品 ?", + "咔 - 咔 !!", + "交换 ? 公平公道……", + "教团会满意的" + ], + "OPTIONS": [ + "[摧毁] #g获得 #y尖锐碎片 。 #r被双倍诅咒 #r- #r血友 。", + "[收集] #r失去 #r", + "[离开]", + "#r点生命 。 #g获得 #y破碎的翅膀雕像 。" + ] + }, + "awakened:BackToBasics": { + "NAME": "", + "DESCRIPTIONS": [ + "此刻此地 , 除了为生存而挣扎以外 , 一切毫无意义 。" + ], + "OPTIONS": [ + "[拼命] #g将所有打击与防御附加力竭 。", + "[锁定] 需要一张打击或防御 。" + ] + }, + "awakened:AbyssEvent": { + "NAME": "來自深淵", + "DESCRIPTIONS": [ + "穿梳于城市之间 , 你突然被难以解释的感觉所侵袭… 仿佛 #p现实 本身开始在你面前 @崩溃@ 。 NL 在感知开始朦胧之际 , 你看见一本 #p魔法书 在你面前屹立着 , 并听见一道 ~来自异界的声音~ 呼唤你… NL \n\n\"觉醒之子、无尽次元的游走者 , 吾等有事商量 。 接受吾伸出的援手 , 吾将引领汝到所望寻找的知识… 至颠覆此领域所知 , 来自未知世界的魔兽、魔偶、及魔法 。", + "\"好 。 吾等结盟实属无敌 。 \"\n\n NL 在 #p异界的萎靡 仍然存在之际 , 魔法书执在手中的你感觉到无限世界的可能性被打开…", + "你成功从恍惚中清醒过来 , 留下怪异的 #p魔法书 后展翅翱翔 。" + ], + "OPTIONS": [ + "[伸手] 获得 #g次元狭缝 。 #r被诅咒 #r- #r岁月 。", + "[离开] 。", + "[离开]" + ] + }, + "awakened:CultTalk": { + "NAME": "TalkStrings", + "DESCRIPTIONS": [ + "@主人!求祢宽恕我!@", + "@我的时辰已到!@", + "@咔~~~@ @!@ @咔咔咔咔~~~@ @!!@", + + "@为鸟神献上我的鲜血@ @!@", + "@我不配成为祢的羔羊@ @!@", + "@我为教团的兴盛牺牲@ @!!@", + + "~让此成为我的救赎…~", + "~…~", + "~祢逼使我无选择的余地…~" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/zhs/KeywordStrings.json b/src/main/resources/awakenedResources/localization/zhs/KeywordStrings.json new file mode 100644 index 0000000000..6ef4a16551 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/zhs/KeywordStrings.json @@ -0,0 +1,71 @@ +[ + { + "PROPER_NAME": "能力药水", + "NAMES": [ + "能力药水", + "能力药水", + "能力药水", + "能力药水", + "Power Potion", + "Power_Potion", + "power_potion", + "powerpotion" + ], + "DESCRIPTION": "#y药水 [REMOVE_SPACE] : 从 #b3 张随机 #y能力牌 中选择 #b1 张加入你的手牌 。 这张牌在本回合耗能变为 #b0 。" + }, + { + "PROPER_NAME": "念咒", + "NAMES": [ + "念咒", + " 念咒", + "觉醒", + "conjure", + "conjured", + "awaken" + ], + "DESCRIPTION": "从你的咒典中将下一张咒文卡加入你的手牌 。" + }, + { + "PROPER_NAME": "吟唱", + "NAMES": [ + "吟唱", + "chant" + ], + "DESCRIPTION": "若打出含有 #y吟唱 效果的卡牌时上一张打出的卡牌为 #y能力牌 , 该效果在战斗结束前会自动激活 。" + }, + { + "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": "力竭", + "NAMES": [ + "力竭", + "力竭", + "drain", + "drained" + ], + "DESCRIPTION": "任何令你失去 [E] 的效果 , [E] 为0时仍能触发(不包括打出卡牌消耗的 [E] 。 )" + }, + { + "PROPER_NAME": "灼气", + "NAMES": [ + "灼气", + "manaburn" + ], + "DESCRIPTION": "任何令你失去 [E] 的效果 , 此敌人失去等同 #y灼气 [REMOVE_SPACE]层数的生命值 。 [E] 为0时仍能触发(不包括打出卡牌消耗的 [E] 。 )" + }, + { + "PROPER_NAME": "好奇", + "NAMES": [ + "好奇", + "curiosity" + ], + "DESCRIPTION": "你每打出一张 #y能力牌 , 获得 #b1 点 #y力量 。" + } +] \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/zhs/MonsterStrings.json b/src/main/resources/awakenedResources/localization/zhs/MonsterStrings.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/zhs/MonsterStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/zhs/OrbStrings.json b/src/main/resources/awakenedResources/localization/zhs/OrbStrings.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/zhs/OrbStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/zhs/PotionStrings.json b/src/main/resources/awakenedResources/localization/zhs/PotionStrings.json new file mode 100644 index 0000000000..71a01ed514 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/zhs/PotionStrings.json @@ -0,0 +1,30 @@ +{ + "awakened:PhaseSkip": { + "NAME": "超渡者药水", + "DESCRIPTIONS": [ + "立刻 #y觉醒 并 在本场战斗中 #y升级 你的所有牌 。" + ] + }, + "awakened:CultistsDelight": { + "NAME": "邪教徒特调", + "DESCRIPTIONS": [ + "你每打出一张 #y能力牌 [REMOVE_SPACE] , 获得 #b", + "点 #y力量 [REMOVE_SPACE] 。 增加一张随机 #y能力牌 到你的手牌 , 其耗能本回合变为 #b0 。" + ] + }, + "awakened:SacramentalWine": { + "NAME": "圣餐酒", + "DESCRIPTIONS": [ + "你每打出一张 #y能力牌 , 获得 #b", + "点 #y格挡 [REMOVE_SPACE] 。 增加一张随机 #y能力牌 到你的手牌 , 其耗能本回合变为 #b0 。" + ] + }, + "awakened:SneckoPowersPotion": { + "NAME": "异蛇精华", + "DESCRIPTIONS": [ + "从 #b3 张随机 #y异色 #y能力牌 中选择 #b1 张加入你的手牌 。 这张牌在本回合耗能变为 #b0 。", + "从 #b3 张随机 #y异色 #y能力牌 中选择 #b1 张 , 将其 #b", + " 份复制品加入手牌 , 其本回合首次耗能为 #b0 。" + ] + } +} diff --git a/src/main/resources/awakenedResources/localization/zhs/PowerStrings.json b/src/main/resources/awakenedResources/localization/zhs/PowerStrings.json new file mode 100644 index 0000000000..4a0ea76769 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/zhs/PowerStrings.json @@ -0,0 +1,251 @@ +{ + "awakened:IntensifyPower": { + "NAME": "激化", + "DESCRIPTIONS": [ + "本回合内 , 咒文牌耗能变为 #b0 [REMOVE_SPACE] 。", + "下 #b", + " 回合内 , 咒文牌耗能变为 #b0 [REMOVE_SPACE] 。" + ] + }, + "awakened:IntensifyDebuffPower": { + "NAME": "倦怠", + "DESCRIPTIONS": [ + "本回合内 , 你不能再次 #y念咒 。", + "下 #b", + " 回合内 , 你不能再次 #y念咒 。" + ] + }, + "awakened:RisingChantPower": { + "NAME": "递进合唱", + "DESCRIPTIONS": [ + "本回合首 #b", + " 个 #y吟唱 效果将触发两次 。 NL 本回合剩余 #b", + " 个效果 。" + ] + }, + "awakened:CursedStrength": { + "NAME": "暗祷", + "DESCRIPTIONS": [ + "每当你 #y力竭 [REMOVE_SPACE] , 获得 #b", + "点#y格挡 [REMOVE_SPACE] 。", + "" + ] + }, + "awakened:ThaumaturgyPower": { + "NAME": "神术", + "DESCRIPTIONS": [ + "下 #b", + " 回合开始时 , 将一张 #y祭典 [REMOVE_SPACE]加入你的手牌 。" + ] + }, + "awakened:SacramentPower": { + "NAME": "圣礼", + "DESCRIPTIONS": [ + "你每打出一张 #y能力牌 [REMOVE_SPACE] , 获得 #b", + "点#y格挡 [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": "教主至上", + "DESCRIPTIONS": [ + "每回合第一次获得 #y力量 时 , 抽一张牌 。", + "每回合第 #b", + " 次获得 #y力量 时 , 抽一张牌 。", + " NL 本回合内此效果触发次数剩余 #b", + " 次 。", + " 次 。", + " NL 此效果无法再触发 。" + ] + }, + "awakened:SpellbinderPower": { + "NAME": "咒束", + "DESCRIPTIONS": [ + "在每回合开始时 , #y念咒 [REMOVE_SPACE] 。", + "在每回合开始时 , #y念咒 [REMOVE_SPACE] #b", + "次 。" + ] + }, + "awakened:DarkEchoPower": { + "NAME": "黑暗回音", + "DESCRIPTIONS": [ + "在你的回合结束时 , 对所有敌人造成 #b", + "点伤害 #b", + " 次 。", + "点伤害 。" + ] + }, + "awakened:MoonlitVisionPower": { + "NAME": "月映法眼", + "DESCRIPTIONS": [ + "你在每回合第一次打出咒文牌時 , NL 獲得 [E] 。", + "你在每回合首 #b", + " 次打出咒文牌時 , NL 獲得 [E] 。", + " NL 此回合剩余#b", + " 次 。" + ] + }, + "awakened:EclipseEmbracePower": { + "NAME": "日蚀入怀", + "DESCRIPTIONS": [ + "每当你 #y消耗 一张 #y虚空 [REMOVE_SPACE] , 获得 [E] 并于下回合多抽一张卡牌 。", + "每当你 #y消耗 一张 #y虚空 [REMOVE_SPACE] , 下回合获得 #b", + " [E] 并多抽 #b", + " 张卡牌 。" + ] + }, + "awakened:SongOfSorrowPower": { + "NAME": "哀歌", + "DESCRIPTIONS": [ + "每当你生成一张 #y虚空 [REMOVE_SPACE] , 所有敌人失去 #b", + "生命 。" + ] + }, + "awakened:ShroudOfMiasmaPower": { + "NAME": "Shroud of Miasma", + "DESCRIPTIONS": [ + "Whenever you attack an enemy with #yHex [REMOVE_SPACE], gain #b", + " #yBlock [REMOVE_SPACE]." + ] + }, + "awakened:StrengthReturnPower": { + "NAME": "劈破", + "DESCRIPTIONS": [ + "每当目标敌人受到攻击时 , 获得 #b", + "点临时 #y力量 [REMOVE_SPACE] 。" + ] + }, + "awakened:ManaburnPower": { + "NAME": "灼气", + "DESCRIPTIONS": [ + "每当你 #y力竭 [REMOVE_SPACE] , 此敌人失去 #b", + "点生命 。" + ] + }, + "awakened:ArchmagusPower": { + "NAME": "大法师", + "DESCRIPTIONS": [ + "你每回合第一次打出的咒文牌会打出两次 。", + "你每回合首 #b", + "次打出的咒文牌会打出两次 。", + " NL (剩余 [REMOVE_SPACE]#b", + " 次)" + ] + }, + "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": "夜幕低垂", + "DESCRIPTIONS": [ + "每当你 #y力竭 [REMOVE_SPACE]时 , 获得 #b", + "点 #y格挡 [REMOVE_SPACE] 。" + ] + }, + "awakened:VoidRefundPower": { + "NAME": "号召", + "DESCRIPTIONS": [ + "下一次 #y力竭 [REMOVE_SPACE]时 , 获得 [E] 。", + "下一次 y#力竭 [REMOVE_SPACE]时 , 获得 #b", + " [E] 。" + ] + }, + "awakened:DemonGlyphPower": { + "NAME": "魔符", + "DESCRIPTIONS": [ + "当你 #y觉醒 时 , 获得额外 #b", + "点 #y力量 和 #y敏捷 [REMOVE_SPACE] 。" + ] + }, + "awakened:ReverseRitualPower": { + "NAME": "觉醒形态", + "DESCRIPTIONS": [ + "回合开始时 , 获得 #b", + "层 #y仪式 [REMOVE_SPACE] 。" + ] + }, + "awakened:EnsorcelatePower": { + "NAME": "妖惑", + "DESCRIPTIONS": [ + "你打出的下一张 #y能力牌 耗能变为 #b0 [REMOVE_SPACE] 。", + "你打出的下 #b", + "张 #y能力牌 耗能变为 #b0 [REMOVE_SPACE] 。" + ] + }, + "awakened:ConjureNextPower": { + "NAME": "Pluck", + "DESCRIPTIONS": [ + "The next time you are #yDrained [REMOVE_SPACE], add a #yPlume #yJab to your hand.", + "The next time you are #yDrained [REMOVE_SPACE], gain #b", + " copies of #yPlume #yJab [REMOVE_SPACE]." + ] + }, + "awakened:ChosensVersePower": { + "NAME": "被拣选的诗句", + "DESCRIPTIONS": [ + "本回合内下一次打出非攻击牌时 , 抽一张卡并获得 #b", + "点#y格挡 [REMOVE_SPACE] 。", + "本回合内下 #b", + "次打出非攻击牌时 , 抽一张卡并获得 #b", + "点 #y格挡 [REMOVE_SPACE] 。" + ] + }, + "awakened:AphoticFountPower": { + "NAME": "无光涌泉", + "DESCRIPTIONS": [ + "每当你打出 #y凝冻 [REMOVE_SPACE] , 获得 #b", + "点 #y多层护甲 [REMOVE_SPACE] 。" + ] + }, + "awakened:GrimoirePower": { + "NAME": "雷震子", + "DESCRIPTIONS": [ + "#y落雷 [REMOVE_SPACE]增加 #b", + "点伤害 。 " + ] + }, + "awakened:SpellshieldPower": { + "NAME": "咒盾", + "DESCRIPTIONS": [ + "你每 #y保留 一张牌 , 获得 #b", + "点 #y格挡 。" + ] + }, + "awakened:DaggerstormPower": { + "NAME": "匕首风暴", + "DESCRIPTIONS": [ + "每当你生成一张卡牌 , 随机对敌人做造成 #b", + "点伤害 。" + ] + }, + "awakened:SchemePower": { + "NAME": "谋划", + "DESCRIPTIONS": [ + "本回合打出的下 #b", + " 张耗能为 #b1 或以下的卡牌会被打出两次 。", + "本回合打出的下一张耗能为 #b1 或以下的卡牌会被打出两次 。" + ] + }, + "awakened:FourthDimensionPower": { + "NAME": "4th Dimension", + "DESCRIPTIONS": [ + "At the start of your next #b", + " turn, ", + " turns, ", + "play and #yExhaust a copy of ", + " [REMOVE_SPACE]." + ] + } +} diff --git a/src/main/resources/awakenedResources/localization/zhs/RelicStrings.json b/src/main/resources/awakenedResources/localization/zhs/RelicStrings.json new file mode 100644 index 0000000000..4f092531d5 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/zhs/RelicStrings.json @@ -0,0 +1,160 @@ +{ + "awakened:RippedDoll": { + "NAME": "撕裂的玩偶", + "FLAVOR": "你前身的遗物 。 残余蕴藏的魔法 。", + "DESCRIPTIONS": [ + "在战斗首 #b", + "回合开始时 , #yawakened:念咒 [REMOVE_SPACE] 。" + ] + }, + "awakened:ShreddedDoll": { + "NAME": "撕碎的玩偶 ", + "FLAVOR": "你自身懦弱的证明 , 然而你仍未能放下 。", + "DESCRIPTIONS": [ + "替换 ", + " [REMOVE_SPACE] 。 NL 在每回合开始时 , #yawakened:念咒 [REMOVE_SPACE] 。 NL 在每场战斗中首次刷新咒典时 , 获得 #b1层 #y仪式 [REMOVE_SPACE] 。" + ] + }, + "awakened:WhiteRibbon": { + "NAME": "纯白缎帶", + "FLAVOR": "即使不是身处仪式当中亦能为经文赋予效力 。", + "DESCRIPTIONS": [ + "每当你打出含 #yawakened:吟唱 效果的卡牌 , 获得 #b", + "点#y格挡 [REMOVE_SPACE] , 无视激活状态 。" + ] + }, + "awakened:HexxBomb": { + "NAME": "气弹", + "FLAVOR": "3… 2…", + "DESCRIPTIONS": [ + "每当有敌人死去时 , 将其身上的 #yawakened:灼气 层数移到一名随机敌人身上 。" + ] + }, + "awakened:TomeOfPortalmancy": { + "NAME": "召门之书", + "FLAVOR": "详述如何建构及修理次元传送门的古书 。", + "DESCRIPTIONS": [ + "每当你生成一张 #y虚空 [REMOVE_SPACE], 给予所有敌人 #b", + "层 #yawakened:灼气 。" + ] + }, + "awakened:EyeOfTheOccult": { + "NAME": "邪教之眼", + "FLAVOR": "这个令人毛骨悚然的雕刻为其拥有者烙印上秘术知识 。", + "DESCRIPTIONS": [ + "#y落雷 和 #y暗噬 对所有敌人有效 。" + ] + }, + "awakened:DeadBird": { + "NAME": "鸦鹊亡魂", + "FLAVOR": "此魂魄会紧随罪人和受诅咒的人 。", + "DESCRIPTIONS": [ + "在你的回合结束时 , 对生命值最低的敌人敌人造成 #b", + "点伤害 , 伤害受 #y力量 加成 。" + ] + }, + "awakened:AbyssBlade": { + "NAME": "深渊之刃", + "FLAVOR": "虚无退款 。", + "DESCRIPTIONS": [ + "每回合第一次触发 #yawakened:力竭 时 , 获得 [E] 并抽一张牌 。" + ] + }, + "awakened:ShardOfNowak": { + "NAME": "镀金骸骨碎片", + "FLAVOR": "…不 , 不是那种集中 。", + "DESCRIPTIONS": [ + "在每场战斗开始时 , 获得 #b", + "点 #y力量 [REMOVE_SPACE] 。 失去任何生命值时 , 战斗结束前失去该点力量 。" + ] + }, + "awakened:VioletPlumage": { + "NAME": "堇紫羽毛", + "FLAVOR": "被无尽漆黑的忘却所轻染 。", + "DESCRIPTIONS": [ + "在每场战斗中首次回合结束时剩余 [E] 时 , 下回合多抽 #b", + " 张牌 。" + ] + }, + "awakened:ZenerDeck": { + "NAME": "齐纳牌组", + "FLAVOR": "“小眼睛 , 看老師 。“", + "DESCRIPTIONS": [ + "在每场战斗开始时 , 增加 #y第六感 到咒典中并将其 #yawakened:念咒 。" + ] + }, + "awakened:CawingCask": { + "NAME": "咔叫酒桶", + "FLAVOR": "在仪式上雕下乌鸦之神马泽勒斯样貌的木桶 , 內容物的氣味有点可疑…", + "DESCRIPTIONS": [ + "每当你使用一瓶药水 , 获得 #b", + "层 #y仪式 [REMOVE_SPACE] 。" + ] + }, + "awakened:MiniBlackHole": { + "NAME": "阿勒西亞", + "FLAVOR": "来自深渊 。", + "DESCRIPTIONS": [ + "如果你这回合没有打出过任何 #y能力牌 , 下回合多抽一张牌 。" + ] + }, + "awakened:StrengthBooster": { + "NAME": "纸鸦", + "FLAVOR": "疑虑和诅咒的仲裁者折上千次…", + "DESCRIPTIONS": [ + "敌人受到的 #y awakened:灼气 效果增加 #b", + "% 。" + ] + }, + "awakened:CursedBlessing": { + "NAME": "终傅", + "FLAVOR": "本人去世后 , 所有财产全部归爱猫面条所有 。 再见了 , 残酷的世界 。 XOXO 骑士", + "DESCRIPTIONS": [ + "每场战斗中首次发动第 #b", + "个 #y吟唱 效果时, 获得 #b", + "层 #y仪式 [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": "绝命", + "FLAVOR": "此魔刃拥有把已施行的法术抽纳自身的能力 , 受法师们的爱戴 。 ", + "DESCRIPTIONS": [ + "每场战斗中每打出 #b", + " 张咒文牌 , 获得一张 #y祭典 [REMOVE_SPACE] 。" + ] + }, + "awakened:MoonTalisman": { + "NAME": "玄月护符", + "FLAVOR": "“就算我 , 阴魂消散… 也请你 , 别忘记我 。“", + "DESCRIPTIONS": [ + "拾起时 , 选择一张 #r没有 #yawakened:念咒 [REMOVE_SPACE]的卡牌 , 并为其刻上 #yawakened:念咒 。", + "选择一张卡牌", + "卡牌受到护符保佑", + "并刻上 #yawakened:念咒 。", + "此遗物所绑定的卡牌已被 #r移除 , 遗物已经失效 。" + ] + }, + "awakened:AwakenedUrn": { + "NAME": "鸟面花瓶", + "FLAVOR": "这个花瓶上雕着乌鸦之神马泽勒斯嘲弄的样貌 。", + "DESCRIPTIONS": [ + "每场战斗中首 #b4 次 打出一张 #y能力牌 , 回复 #b", + "点生命 。" + ] + }, + "awakened:NerfedMummifiedHand": { + "NAME": "干枯之手", + "FLAVOR": "它渴求真正的能力 , 对你的邪教奥术加以抗拒 。", + "DESCRIPTIONS": [ + "你每打出一张 #r不是 #y祭典 的 #y能力牌 , 手牌中就有一张随机牌在这个回合耗能变为 #b0 。 " + ] + } +} diff --git a/src/main/resources/awakenedResources/localization/zhs/RunModStrings.json b/src/main/resources/awakenedResources/localization/zhs/RunModStrings.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/src/main/resources/awakenedResources/localization/zhs/RunModStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/awakenedResources/localization/zhs/UIStrings.json b/src/main/resources/awakenedResources/localization/zhs/UIStrings.json new file mode 100644 index 0000000000..557cac525f --- /dev/null +++ b/src/main/resources/awakenedResources/localization/zhs/UIStrings.json @@ -0,0 +1,46 @@ +{ + "awakened:SpellDescriptor": { + "TEXT": [ + "咒文" + ] + }, + "awakened:ConjureMod": { + "TEXT": [ + " NL awakened:念咒 。" + ] + }, + "awakened:SpellMod": { + "TEXT": [ + "[#12FAF0]咒文 。 NL " + ] + }, + "awakened:DrainingMod": { + "TEXT": [ + " NL 下一回合 , 失去 [E] 。" + ] + }, + "awakened:highlightChant": { + "TEXT": [ + "awakened:吟唱 : ", + "[awakenedIcon] [#12FAF0]吟唱 : " + ] + }, + "awakened:Spellbook": { + "TEXT": [ + "咒典", + "觉醒", + "打出 #b7 张能力牌后 , 就会 #y觉醒 !! NL NL #y觉醒 状态下 , #y念咒 产生的咒文牌会 #y升级 , 大幅提升它們的威力 。", + "打出 #b7 张能力牌后 , 就会 #y觉醒 !! NL NL #y觉醒 状态下 , #y念咒 产生的咒文牌会 #y升级 , 大幅提升它們的威力 。" + ] + }, + "awakened:FullSpellbook": { + "TEXT": [ + "咒典已经满了 !" + ] + }, + "awakened:FourthDimensionDupeAttempt": { + "TEXT": [ + "@次元的狭缝被打开了@ @!@" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/bronzeResources/localization/deu/CardStrings.json b/src/main/resources/bronzeResources/localization/deu/CardStrings.json new file mode 100644 index 0000000000..72ca9cef67 --- /dev/null +++ b/src/main/resources/bronzeResources/localization/deu/CardStrings.json @@ -0,0 +1,660 @@ +{ + "bronze:Allocate": { + "NAME": "Allokieren", + "DESCRIPTION": "Erhalte [E] für jeden Status im Nachziehstapel.", + "EXTENDED_DESCRIPTION": [ + " NL (Erhalte ", + " [E].)" + ] + }, + "bronze:AlphaBuild": { + "NAME": "Früher Zugang", + "DESCRIPTION": "Füge !D! Schaden zu. NL bronze:Setze einen zufälligen Status *ein. NL bronze:Kompilierung: bronze:Setze *Betaversion *ein.", + "UPGRADE_DESCRIPTION": "Angeboren. NL \u00A0 Füge !D! Schaden zu. NL bronze:Setze einen zufälligen Status *ein. NL bronze:Kompilierung: bronze:Setze *Betaversion *ein.", + "EXTENDED_DESCRIPTION": [ + "frühes", + "Alpha" + ] + }, + "bronze:Assembly": { + "NAME": "Programmieren", + "DESCRIPTION": "Spähe !M!. NL bronze:Kodiere alle abgeworfenen Karten mit *Kodieren in der gewählten Reihenfolge. NL Erschöpft." + }, + "bronze:Backtrace": { + "NAME": "Destruktor", + "DESCRIPTION": "Angeboren. NL \u00A0 Füge !D! Schaden zu. NL bronze:Kompilierungsfehler: Die Funktion erschöpft.", + "EXTENDED_DESCRIPTION": [ + "brutales", + "Zerstören" + ] + }, + "bronze:BetaBuild": { + "NAME": "Betaversion", + "DESCRIPTION": "Erhalte !B! Block. NL bronze:Setze einen zufälligen Status *ein. NL bronze:Kompilierung: bronze:Setze *Release *ein.", + "EXTENDED_DESCRIPTION": [ + "unausgereftes", + "Beta" + ] + }, + "bronze:BitShift": { + "NAME": "Bitshift", + "DESCRIPTION": "Nimm eine *kodierte Karte zurück auf die Hand. NL Sie erhält Behalten. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Behalten. NL Nimm eine *kodierte Karte zurück auf die Hand. NL Sie erhält Behalten. NL Erschöpft." + }, + "bronze:Boost": { + "NAME": "Software", + "DESCRIPTION": "Erhalte !B! Block. NL bronze:Kompilierung: Erhalte !M! Stärke.", + "EXTENDED_DESCRIPTION": [ + "weiches", + "Setup" + ] + }, + "bronze:Branch": { + "NAME": "Verzweigung", + "DESCRIPTION": "Füge !D! Schaden zu oder erhalte !B! Block. NL Die nicht gewählte Option wird bronze:kodiert. NL Erschöpft.", + "EXTENDED_DESCRIPTION": [ + "Zweig: Angriff", + "Füge !D! Schaden zu.", + "Zweig: Abwehr", + "Erhalte !B! Block." + ] + }, + "bronze:Break": { + "NAME": "Abbruch", + "DESCRIPTION": "Füge !D! Schaden zu. NL bronze:Kompilierungsfehler: Erhalte Benommen, *Verschleimt, Wunde, Brennen und Leere.", + "EXTENDED_DESCRIPTION": [ + "gehemmtes", + "Abbrechen" + ] + }, + "bronze:BronzeArmor": { + "NAME": "Bronzerüstung", + "DESCRIPTION": "Erhalte !bauto! Artefakt. NL bronze:Kompilierungsfehler: ALLE Gegner erhalten !M! Block.", + "EXTENDED_DESCRIPTION": [ + "flexibles", + "Rüsten" + ] + }, + "bronze:BronzeOrb": { + "NAME": "Orb-Strahl", + "DESCRIPTION": "Angeboren. NL Füge !D! Schaden zu. NL bronze:Kodiere eine zufällige Karte im Nachziehstapel. Erschöpft." + }, + "bronze:BugBarrage": { + "NAME": "Bugbefall", + "DESCRIPTION": "Erhalte !M! Wunden. NL bronze:Tausche jeden Status *um und füge für jeden davon !D! Schaden zu.", + "UPGRADE_DESCRIPTION": "Erhalte !M! Wunden. NL bronze:Tausche jeden Status *um und füge für jeden davon !D! Schaden zu.", + "EXTENDED_DESCRIPTION": [ + " NL (Trifft ", + " Mal.)" + ] + }, + "bronze:BuggyMess": { + "NAME": "Verbuggter Code", + "DESCRIPTION": "bronze:Setze ein Benommen *ein. NL Erhalte !M! [E].", + "EXTENDED_DESCRIPTION": [ + "verbuggtes", + "Chaos" + ] + }, + "bronze:BurnOut": { + "NAME": "Burnout", + "DESCRIPTION": "Füge einem zufälligen Gegner für JEDEN Status !D! Schaden zu. Erschöpfe dann die Statuskarten. NL Erschöpft.", + "EXTENDED_DESCRIPTION": [ + "Fügt einem zufälligen Gegner !D! Schaden für JEDEN Status zu (", + "), und erschöpft sie dann. NL Erschöpft." + ] + }, + "bronze:ChildClass": { + "NAME": "Aufrufen", + "DESCRIPTION": "Erhalte !B! Block. NL bronze:Kompilierung: Erhalte [E] in Höhe der Gesamtkosten deiner kodierten Karten.", + "EXTENDED_DESCRIPTION": [ + "gerufenes", + "Aufladen" + ] + }, + "bronze:ChosenStrike": { + "NAME": "Kultistenschlag", + "DESCRIPTION": "Füge !D! Schaden zu. NL bronze:Kompilierung: Erhöhe den Schaden permanent um !M!.", + "EXTENDED_DESCRIPTION": [ + "kultiges", + "Krächzen" + ] + }, + "bronze:ClassDefault": { + "NAME": "Standardklasse", + "DESCRIPTION": "Die nächsten !M! Male an, denen eine Funktion kompiliert, bronze:kodiere eine Kopie der Karte im ersten Slot." + }, + "bronze:CleanCode": { + "NAME": "Sauberer Code", + "DESCRIPTION": "Verhindere die nächsten !M! *Kompilierungsfehler, die du *kodierst.", + "UPGRADE_DESCRIPTION": "Angeboren. NL Verhindere die nächsten !M! *Kompilierungsfehler, die du *kodierst." + }, + "bronze:CloningBeam": { + "NAME": "Code-Duplizierung", + "DESCRIPTION": "Füge !D! Schaden zu. NL Die nächste Karte die bronze:kodiert wird, bronze:kodiert ein weiteres Mal. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Füge !D! Schaden zu. NL Die nächste Karte die bronze:kodiert wird, bronze:kodiert ein weiteres Mal." + }, + "bronze:Constructor": { + "NAME": "Konstruktor", + "DESCRIPTION": "Erhalte !B! Block. \u202F Wird im ersten Slot mit !M! mehr Block *kodiert.", + "EXTENDED_DESCRIPTION": [ + "stabiles", + "Trauern", + "Großartigkeit" + ] + }, + "bronze:CopyPaste": { + "NAME": "Kopie einfügen", + "DESCRIPTION": "In diesem Zug spielst du deine nächste Funktion zweimal aus.", + "UPGRADE_DESCRIPTION": "Behalten. NL In diesem Zug spielst du deine nächste Funktion zweimal aus." + }, + "bronze:CutThrough": { + "NAME": "Ausschneiden", + "DESCRIPTION": "Füge !D! Schaden zu. NL Spähe !M!. NL bronze:Kompilierung: Ziehe !bauto! Karte.", + "EXTENDED_DESCRIPTION": [ + "fehlendes", + "Schneiden" + ] + }, + "bronze:DarkDash": { + "NAME": "Dunkler Sprint", + "DESCRIPTION": "Erhalte !B! Block. NL Füge !D! Schaden zu. NL bronze:Kompilierungsfehler: bronze:Setze eine Leere *ein.", + "EXTENDED_DESCRIPTION": [ + "dunkles", + "Dunkel" + ] + }, + "bronze:Defend": { + "NAME": "Verteidigen", + "DESCRIPTION": "Erhalte !B! Block.", + "EXTENDED_DESCRIPTION": [ + "basis", + "Verteidigen" + ] + }, + "bronze:DelayedGuard": { + "NAME": "Backup", + "DESCRIPTION": "Erhalte im nächsten Zug !B! Block.", + "EXTENDED_DESCRIPTION": [ + "spätes", + "Schützen" + ] + }, + "bronze:DelayedSlice": { + "NAME": "Hacken", + "DESCRIPTION": "Füge !D! Schaden zu. NL Ziehe im nächsten Zug !M! zusätzliche Karte.", + "UPGRADE_DESCRIPTION": "Füge !D! Schaden zu. NL Ziehe im nächsten Zug !M! zusätzliche Karten.", + "EXTENDED_DESCRIPTION": [ + "illegales", + "Hacken" + ] + }, + "bronze:Deprecate": { + "NAME": "Obsolet", + "DESCRIPTION": "Wende !M! Schwach an.", + "EXTENDED_DESCRIPTION": [ + "altes", + "Auslaufen" + ] + }, + "bronze:DigitalCarnage": { + "NAME": "Digitales Blutbad", + "DESCRIPTION": "Füge !D! Schaden zu. NL bronze:Kompilierungsfehler: Die Funktion ist flüchtig.", + "EXTENDED_DESCRIPTION": [ + "digitales", + "Blutbad" + ] + }, + "bronze:FindAndReplace": { + "NAME": "Suchen-Ersetzen", + "DESCRIPTION": "Schnappe eine Karte vom Nachzieh- oder Abwurfstapel und lege ein Benommen an ihrer Stelle ein. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Schnappe eine Karte vom Nachzieh- oder Abwurfstapel. NL Erschöpft.", + "EXTENDED_DESCRIPTION": [ + "Wähle eine Karte." + ] + }, + "bronze:FineTuning": { + "NAME": "Feinjustierung", + "DESCRIPTION": "Erhöhe alle Zahlen auf kodierte Karten um !M! (Kosten ausgenommen). NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Behalten. NL Erhöhe alle Zahlen auf kodierte Karten um !M! (Kosten ausgenommen). NL Erschöpft." + }, + "bronze:Flail": { + "NAME": "Verdreschen", + "DESCRIPTION": "Füge ALLEN Gegnern !bauto! Mal !D! Schaden zu. NL Erhalte !M! Artefakt. NL Erschöpft.", + "EXTENDED_DESCRIPTION": [ + "rohes", + "Dreschen" + ] + }, + "bronze:FollowUp": { + "NAME": "Auswerten", + "DESCRIPTION": "Erhalte !B! Block. NL Füge !D! Schaden zu. NL Hast du diesen Kampf zuletzt eine Funktion gespielt, dann spiele diese Karte nochmal." + }, + "bronze:ForceShield": { + "NAME": "Kraftschild", + "DESCRIPTION": "Kostet [E] weniger für jede in diesem Kampf kompilierte Funktion. NL Erhalte !B! Block." + }, + "bronze:ForLoop": { + "NAME": "For-Schleife", + "DESCRIPTION": "Die nächste Karte die bronze:kodiert wird, wird zusätzlich X weitere Male bronze:kodiert. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Die nächste Karte die bronze:kodiert wird, wird zusätzlich X+1 weitere Male bronze:kodiert. NL Erschöpft." + }, + "bronze:Format": { + "NAME": "Formatieren", + "DESCRIPTION": "bronze:Kodiere X *Fragmentieren Karten. NL Erhalte [E]. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "bronze:Kodiere X+1 *Fragmentieren Karten. NL Erhalte [E]. NL Erschöpft." + }, + "bronze:FormatEncoded": { + "NAME": "Fragmentieren", + "DESCRIPTION": "Erhalte !B! Block. NL Füge !D! Schaden zu.", + "EXTENDED_DESCRIPTION": [ + "sauberes", + "Fragment" + ] + }, + "bronze:Fortify": { + "NAME": "Hardware", + "DESCRIPTION": "Füge !D! Schaden zu. NL bronze:Kompilierung: Erhalte !M! Geschicklichkeit.", + "EXTENDED_DESCRIPTION": [ + "hartes", + "Bauen" + ] + }, + "bronze:Frontload": { + "NAME": "Konstante", + "DESCRIPTION": "Erhalte !B! Block. NL bronze:Kompilierung: Die Funktion erhält Behalten.", + "EXTENDED_DESCRIPTION": [ + "fixes", + "Fixieren" + ] + }, + "bronze:FullRelease": { + "NAME": "Release", + "DESCRIPTION": "bronze:Kompilierung: Die Funktion wird eine Macht mit 'Zu Beginn jedes Zuges...'", + "EXTENDED_DESCRIPTION": [ + "volles", + "Release", + "1.0" + ] + }, + "bronze:GetLatest": { + "NAME": "Variable", + "DESCRIPTION": "Erhalte eine zufällige Karte mit bronze:Kodieren. Sie kostet 0 bis du sie spielst. NL Erschöpft." + }, + "bronze:Goto": { + "NAME": "Aktualisieren", + "DESCRIPTION": "Ziehe !M! Karte. NL bronze:Kompilierung: Ziehe im nächsten Zug !M! zusätzliche Karte.", + "UPGRADE_DESCRIPTION": "Ziehe !M! Karten. NL bronze:Kompilierung: Ziehe im nächsten Zug !M! zusätzliche Karten.", + "EXTENDED_DESCRIPTION": [ + "schnelles", + "Update" + ] + }, + "bronze:Hardcode": { + "NAME": "Hardcoden", + "DESCRIPTION": "Die nächste Funktion die du kompilierst wird deinem Deck hinzugefügt. Die kodierten Karten werden aus dem Deck entfernt." + }, + "bronze:HardenedForm": { + "NAME": "Orb beschwören", + "DESCRIPTION": "Immer wenn du eine Funktion spielst oder kompilierst, erhalte !M! Block und füge einem zufälligen Gegner !M! Schaden zu." + }, + "bronze:HyperBeam": { + "NAME": "HYPERSTRAHL", + "DESCRIPTION": "Behalten. NL Füge ALLEN Gegnern !D! Schaden zu. NL Lege !M! *Leeren auf den Nachziehstapel." + }, + "bronze:InfiniteBeams": { + "NAME": "Zahllose Strahlen", + "DESCRIPTION": "Erhalte zu Beginn jedes Zuges einen *hypostrahl.", + "UPGRADE_DESCRIPTION": "Erhalte zu Beginn jedes Zuges einen *hypostrahl+." + }, + "bronze:InfiniteLoop": { + "NAME": "Endlosschleife", + "DESCRIPTION": "Füge !D! Schaden zu. NL bronze:Kompilierung: Erhalte eine Kopie dieser Karte mit !M! mehr Schaden.", + "UPGRADE_DESCRIPTION": "Behalten. NL Füge !D! Schaden zu. NL bronze:Kompilierung: Erhalte eine Kopie dieser Karte mit !M! mehr Schaden.", + "EXTENDED_DESCRIPTION": [ + "endloses", + "Unendliche" + ] + }, + "bronze:Invalidate": { + "NAME": "Ungültig", + "DESCRIPTION": "Wende !M! Verwundbar an.", + "EXTENDED_DESCRIPTION": [ + "ungültiges", + "Manko" + ] + }, + "bronze:Iterate": { + "NAME": "Iterieren", + "DESCRIPTION": "Füge !M! Mal !D! Schaden zu.", + "EXTENDED_DESCRIPTION": [ + "iteratives", + "Iterieren" + ] + }, + "bronze:ItsAFeature": { + "NAME": "Es ist ein Feature", + "DESCRIPTION": "Erhalte immer, wenn du einen Status ziehst oder *erschöpfst, !M! Block." + }, + "bronze:Library": { + "NAME": "Bibliothek", + "DESCRIPTION": "Erhalte zu Beginn jedes Zuges eine zufällige Karte mit bronze:Kodieren. Sie kostet 0 bis du sie spielst." + }, + "bronze:MaxOutput": { + "NAME": "Laufwerk", + "DESCRIPTION": "Ziehe !M! Karten. NL Ziehe zu Beginn des Zuges 1 zusätzliche Karte und bronze:Setze 1 Benommen *ein." + }, + "bronze:Mutator": { + "NAME": "Antivirus", + "DESCRIPTION": "Erhalte !M! Stärke. NL expansioncontent:Transformiere einen Status auf der Hand in eine Kopie dieser Karte.", + "UPGRADE_DESCRIPTION": "Behalten. NL Erhalte !M! Stärke. NL expansioncontent:Transformiere einen Status auf der Hand in eine Kopie dieser Karte." + }, + "bronze:NullPointer": { + "NAME": "Nullpointer", + "DESCRIPTION": "Erhalte !B! Block. NL Füge !D! Schaden zu. NL bronze:Kompilierungsfehler: Die Funktion ist unspielbar.", + "EXTENDED_DESCRIPTION": [ + "null", + "Nichts" + ] + }, + "bronze:OilSpill": { + "NAME": "Ölleck", + "DESCRIPTION": "Füge !D! Schaden zu und wende !M! Gift an. NL bronze:Kompilierungsfehler: bronze:Setze ein *Verschleimt *ein.", + "EXTENDED_DESCRIPTION": [ + "öliges", + "Leck" + ] + }, + "bronze:Optimize": { + "NAME": "Optimieren", + "DESCRIPTION": "Die nächsten !M! nicht verbesserten Karten die bronze:kodiert werden, kodieren verbessert." + }, + "bronze:Overheat": { + "NAME": "Überhitzen", + "DESCRIPTION": "Füge !D! Schaden zu. NL Verhindere den nächsten *Kompilierungsfehler den du *kodierst." + }, + "bronze:Overload": { + "NAME": "Kopie einfügen", + "DESCRIPTION": "Spiele jeweils eine Kopie jeder kodierten Karte. Die Kopien werden nicht kodiert. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Spiele jeweils eine Kopie jeder kodierten Karte. Die Kopien werden nicht kodiert." + }, + "bronze:Philosophize": { + "NAME": "Philosophieren", + "DESCRIPTION": "Erhalte !bauto! Stärke. NL bronze:Kompilierungsfehler: ALLE Gegner erhalten !M! Stärke.", + "EXTENDED_DESCRIPTION": [ + "schlaues", + "Konzept" + ] + }, + "bronze:RecursiveStrike": { + "NAME": "Rekursiver Schlag", + "DESCRIPTION": "Füge !M! Mal !D! Schaden zu. NL bronze:Kodiere !M! Kopien von *Schlag.", + "UPGRADE_DESCRIPTION": "Füge !M! Mal !D! Schaden zu. NL bronze:Kodiere !M! Kopien von *Schlag+.", + "EXTENDED_DESCRIPTION": [ + "rekursives", + "Vorkommen" + ] + }, + "bronze:Refactor": { + "NAME": "Überschreiben", + "DESCRIPTION": "Spähe !M!. NL Erschöpfe abgeworfene Statuskarten. Erhalte pro erschöpften Status !B! Block." + }, + "bronze:Repair": { + "NAME": "Reparieren", + "DESCRIPTION": "Erhalte !B! Block. NL bronze:Kompilierung: NL Heile !M! TP.", + "EXTENDED_DESCRIPTION": [ + "bastelndes", + "Werkzeug" + ] + }, + "bronze:Replicate": { + "NAME": "Wiederholen", + "DESCRIPTION": "Füge !D! Schaden zu. \u202F NL Wenn *Kodiert: Lege eine Kopie in den Abwurfstapel.", + "EXTENDED_DESCRIPTION": [ + "erneutes", + "Tun" + ] + }, + "bronze:Repulsor": { + "NAME": "Validieren", + "DESCRIPTION": "Wenn du das erste Mal im Zug einen Status oder Fluch ziehst, erschöpfe ihn und ziehe eine Karte.", + "UPGRADE_DESCRIPTION": "Wenn du das erste Mal im Zug einen Status oder Fluch ziehst, erschöpfe ihn und ziehe eine Karte." + }, + "bronze:Return": { + "NAME": "Rückgängig", + "DESCRIPTION": "Lege eine Karte vom Abwurfstapel auf den Nachziehstapel. NL Erhalte im nächsten Zug [E].", + "UPGRADE_DESCRIPTION": "Lege eine Karte vom Abwurfstapel auf den Nachziehstapel. NL Erhalte im nächsten Zug [E] [E]." + }, + "bronze:Safeguard": { + "NAME": "Cybersicherheit", + "DESCRIPTION": "Erhalte !B! Block.", + "EXTENDED_DESCRIPTION": [ + "frühes", + "Blocken" + ] + }, + "bronze:Separator": { + "NAME": "Separator", + "DESCRIPTION": "Füge !D! Schaden zu. \u202F Wird in mittleren Slots mit !M! mehr Schaden *kodiert.", + "EXTENDED_DESCRIPTION": [ + "geteiltes", + "Areal" + ] + }, + "bronze:Shell": { + "NAME": "Blockchain", + "DESCRIPTION": "Erhalte !M! bronze:Verschwimmen.", + "UPGRADE_DESCRIPTION": "Erhalte !M! bronze:Verschwimmen. NL bronze:Kompilierung: Erhalte !M! bronze:Verschwimmen.", + "EXTENDED_DESCRIPTION": [ + "reihendes", + "Muster" + ] + }, + "bronze:Shield": { + "NAME": "Haftender Schild", + "DESCRIPTION": "Behalten. NL Erhalte !B! Block. NL bronze:Setze 1 *Verschleimt *ein.", + "EXTENDED_DESCRIPTION": [ + "haftendes", + "Abschirmen" + ] + }, + "bronze:ShipIt": { + "NAME": "Ausliefern", + "DESCRIPTION": "Füge !D! Schaden zu. NL Wiederhole das für jeden Status im Erschöpfungsstapel.", + "EXTENDED_DESCRIPTION": [ + "Füge !D! Schaden zu. NL Wiederhole das für jeden Status im Erschöpfungsstapel (", + ")." + ] + }, + "bronze:SpaghettiCode": { + "NAME": "Spaghetticode", + "DESCRIPTION": "Wähle 1 von 3 zufälligen Karten zum bronze:kodieren. Wiederhole das, bis eine Funktion kompiliert. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Wähle 1 von 3 zufälligen Karten zum bronze:kodieren. Wiederhole das, bis eine Funktion kompiliert." + }, + "bronze:Strike": { + "NAME": "Schlag", + "DESCRIPTION": "Füge !D! Schaden zu.", + "EXTENDED_DESCRIPTION": [ + "simples", + "Schlagen" + ] + }, + "bronze:Terminator": { + "NAME": "Terminator", + "DESCRIPTION": "bronze:Kompilierung: Wird im letzten Slot mit 'Spiele dieser Karte nochmal' *kodiert.", + "EXTENDED_DESCRIPTION": [ + "trauriges", + "Ende" + ] + }, + "bronze:ThunderWave": { + "NAME": "Blitzableiter", + "DESCRIPTION": "Füge ALLEN Gegnern !D! Schaden zu. NL Erhalte 1 guardianmod:Puffer. NL Erschöpft.", + "EXTENDED_DESCRIPTION": [ + " NL (Trifft ", + " Mal.)" + ] + }, + "bronze:TinkerersToolbox": { + "NAME": "Entwicklertools", + "DESCRIPTION": "Behalten. NL Erhalte *Debuggen, *Dekompilieren, *Batch, oder *Byteshift. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Behalten. NL Erhalte *Debuggen, *Dekompilieren, *Batch, oder *Byteshift." + }, + "bronze:Turbo": { + "NAME": "Turbo", + "DESCRIPTION": "Erhalte [E] [E]. NL Nimm eine Leere auf den Abwurfstapel.", + "UPGRADE_DESCRIPTION": "Erhalte [E] [E] [E]. NL Nimm eine Leere auf den Abwurfstapel." + }, + "bronze:Undervolt": { + "NAME": "Unterspannung", + "DESCRIPTION": "ALLE Gegner verlieren !M! Stärke. NL Erhalte 2 Brennen. NL Erschöpft." + }, + "bronze:Verify": { + "NAME": "Bewusste Form", + "DESCRIPTION": "Flüchtig. NL Wenn du eine Funktion ziehst, erhöhe alle Zahlen auf ihr um 1 (Kosten ausgenommen).", + "UPGRADE_DESCRIPTION": "Wenn du eine Funktion ziehst, erhöhe alle Zahlen auf ihr um 1 (Kosten ausgenommen)." + }, + "bronze:Virus": { + "NAME": "Virus", + "DESCRIPTION": "Füge !D! Schaden zu. NL Wirf deine Hand ab und erhalte genauso viele *hypostrahlen. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Füge !D! Schaden zu. NL Wirf deine Hand ab und erhalte genauso viele *hypostrahlen+. NL Erschöpft." + }, + "bronze:WhirlingStrike": { + "NAME": "Bronzegeschütz", + "DESCRIPTION": "Füge ALLEN Gegnern !D! Schaden zu.", + "EXTENDED_DESCRIPTION": [ + "dringendes", + "Geschoss" + ] + }, + "bronze:WildBeam": { + "NAME": "Entschlacken", + "DESCRIPTION": "Füge !D! Schaden zu. NL Erschöpfe einen zufälligen Status im Nachziehstapel.", + "EXTENDED_DESCRIPTION": [ + "wildes", + "Strahlen" + ] + }, + "bronze:WildStrike": { + "NAME": "Wilder Schlag", + "DESCRIPTION": "Füge !D! Schaden zu. NL bronze:Setze eine Wunde *ein." + }, + + "bronze:Batch": { + "NAME": "Batch", + "DESCRIPTION": "Kompiliere die derzeit kodierten Karten zu einer Funktion. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Kompiliere die derzeit kodierten Karten zu einer Funktion." + }, + "bronze:BranchBlock": { + "NAME": "Zweig: Abwehr", + "DESCRIPTION": "Erhalte !B! Block.", + "EXTENDED_DESCRIPTION": [ + "rechtes", + "Rechts" + ] + }, + "bronze:BranchHit": { + "NAME": "Zweig: Angriff", + "DESCRIPTION": "Füge !D! Schaden zu.", + "EXTENDED_DESCRIPTION": [ + "linkes", + "Links" + ] + }, + "bronze:ByteShift": { + "NAME": "Byteshift", + "DESCRIPTION": "Nimm alle kodierten Karten auf die Hand. NL Sie erhalten Behalten. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Behalten. NL Nimm alle kodierten Karten auf die Hand. NL Sie erhalten Behalten. NL Erschöpft." + }, + "bronze:DazingPulse": { + "NAME": "Betäubender Puls", + "DESCRIPTION": "Erhalte !B! Block NL Füge !D! Schaden zu. NL bronze:Kompilierungsfehler: bronze:Setze !M! Benommen *ein.", + "EXTENDED_DESCRIPTION": [ + "lahmes", + "Pulsieren" + ] + }, + "bronze:Debug": { + "NAME": "Debuggen", + "DESCRIPTION": "Entferne alle bronze:Kompilierungsfehler der derzeit kodierten Karten. NL Erschöpft." + }, + "bronze:DecaBeam": { + "NAME": "Proto-Schild", + "DESCRIPTION": "Erhalte !B! Block. NL bronze:Kompilierung: Erhalte !M! *Panzerrüstung und bronze:Setze !bauto! Benommen *ein.", + "EXTENDED_DESCRIPTION": [ + "gepanzertes", + "Panzern" + ] + }, + "bronze:Decompile": { + "NAME": "Dekompilieren", + "DESCRIPTION": "Erschöpfe alle kodierten Karten. Ziehe Karten und erhalte [E] in Höhe ihrer Anzahl. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Behalten. NL Erschöpfe alle kodierten Karten. Ziehe Karten und erhalte [E] in Höhe ihrer Anzahl. NL Erschöpft." + }, + "bronze:DonuBeam": { + "NAME": "Proto-Strahl", + "DESCRIPTION": "Füge !M! Mal !D! Schaden zu. NL bronze:Kompilierung: Erhalte !M! Stärke.", + "EXTENDED_DESCRIPTION": [ + "sanftes", + "Schießen" + ] + }, + "bronze:Explode": { + "NAME": "Explodieren", + "DESCRIPTION": "Wende !M! hexamod:Seelenfeuer auf ALLE Gegner an. NL bronze:Kompilierungsfehler: bronze:Setze !bauto! Brennen *ein.", + "EXTENDED_DESCRIPTION": [ + "instabiles", + "Detonieren" + ] + }, + "bronze:FunctionCard": { + "NAME": "()", + "DESCRIPTION": "", + "EXTENDED_DESCRIPTION": [ + "Funktion()", + "Perfektion()", + "()" + ] + }, + "bronze:MinorBeam": { + "NAME": "hypostrahl", + "DESCRIPTION": "Füge !D! Schaden zu.", + "EXTENDED_DESCRIPTION": [ + "kleines", + "Leuchten" + ] + }, + "bronze:Spike": { + "NAME": "Spikes", + "DESCRIPTION": "Füge !D! Schaden zu. NL bronze:Kompilierung: Erhalte !M! Stacheln.", + "EXTENDED_DESCRIPTION": [ + "dorniges", + "Eck" + ] + }, + "bronze:Ignite": { + "NAME": "Anzünden", + "DESCRIPTION": "Wende !M! hexamod:Seelenfeuer an. NL Erleide am Ende deines Zuges 2 Schaden.", + "UPGRADE_DESCRIPTION": "Wende !M! hexamod:Seelenfeuer an. NL Erleide am Ende deines Zuges 2 Schaden." + }, + "bronze:IntoTheVoid": { + "NAME": "In die Leere", + "DESCRIPTION": "Flüchtig. NL Der Gegner verliert in diesem Zug !M! Stärke. NL Wenn diese Karte gezogen wird, verliere 1 Energie. NL Erschöpft." + }, + "bronze:Lubricant": { + "NAME": "Schmiermittel", + "DESCRIPTION": "Ziehe !M! Karten. NL Erschöpft." + }, + "bronze:GrievousWound": { + "NAME": "Ansteckende Wunde", + "DESCRIPTION": "Wende !M! Verwundbar an." + }, + "bronze:Daze": { + "NAME": "Lähmen", + "DESCRIPTION": "Flüchtig. NL Wende !M! Schwach an. NL Erschöpft." + }, + "bronze:UnknownStatus": { + "NAME": "Perplex", + "DESCRIPTION": "Erhalte !B! Block." + } +} diff --git a/src/main/resources/bronzeResources/localization/deu/CharacterStrings.json b/src/main/resources/bronzeResources/localization/deu/CharacterStrings.json new file mode 100644 index 0000000000..01c14f8844 --- /dev/null +++ b/src/main/resources/bronzeResources/localization/deu/CharacterStrings.json @@ -0,0 +1,13 @@ +{ + "bronze:theAutomaton": { + "NAMES": [ + "Das Automaton", + "das Automaton" + ], + "TEXT": [ + "Der mechanische Wächter der Stadt. NL Kann sich an alle erdenklichen Anforderungen der Kämpfe anpassen.", + "NL WAFFENSYSTEME AUF 100%", + "Auf einer unbeleuchteten Straße triffst du auf ein paar vermummte Gestalten, die gerade mitten in irgendeinem dunklen Ritual sind. Als du näher kommst, wenden sie sich dir in gespenstischem Gleichklang zu. Der Größte von ihnen entblößt Fangzähne und streckt eine lange, blasse Hand nach dir aus. NL~„Schließ~ ~dich~ ~uns~ ~an,~ ~Bronzener,~ ~und~ ~spüre~ ~die~ ~Wärme~ ~des~ ~Spire.“~" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/bronzeResources/localization/deu/EventStrings.json b/src/main/resources/bronzeResources/localization/deu/EventStrings.json new file mode 100644 index 0000000000..4fbfdd2372 --- /dev/null +++ b/src/main/resources/bronzeResources/localization/deu/EventStrings.json @@ -0,0 +1,73 @@ +{ + "bronze:ShapeFactory": { + "NAME": "Drohnenfabrik", + "DESCRIPTIONS": [ + "Du hast die stillgelegte Drohnenfabrik des Exordium gefunden. Überraschenderweise funktionieren die Produktionsanlagen noch halbwegs. Du könntest einige dieser Maschinen ausschlachten und ihre Teile als Waffe nutzen.", + "In keiner der Drohne steckt etwas nützliches für dich." + ], + "OPTIONS": [ + "[Kämpfe gegen 1 Stachler] #gErhalte zur Belohnung #gSpikes.", + "[Kämpfe gegen 1 Repulsor] #gErhalte zur Belohnung #gBetäubender #gPuls.", + "[Kämpfe gegen 1 Explodierer] #gErhalte zur Belohnung #gExplodieren.", + "[Verlassen]", + "[Kämpfen]", + "[Kämpfe auch gegen 1 Stachler] #gErhalte zur Belohnung #gSpikes.", + "[Kämpfe auch gegen 1 Repulsor] #gErhalte zur Belohnung #gBetäubender #gPuls.", + "[Kämpfe auch gegen 1 Explodierer] #gErhalte zur Belohnung #gExplodieren." + ] + }, + "bronze:AncientFactory": { + "NAME": "Antike Fabrik", + "DESCRIPTIONS": [ + "Bei deinem unermüdlichen Weg abwärts stößt du auf die ~ursprüngliche~ Fabrik. Hier wurdest du gebaut - vom ~Schöpfer~ höchstpersönlich. NL Jedes von ihm erschaffene Konstrukt ist so #yperfekt wie du es bist. Du könntest die Teile einiger alter Prototypen für dich nutzen, doch dazu müsstest du sie aktivieren.", + "Auch wenn es Prototypen sind, hast du einen gesunden Respekt vor ihnen. Die Aktivierung stellt ein unnötiges Risiko dar." + ], + "OPTIONS": [ + "[Kämpfe gegen den Donu Prototypen] #gErhalte #gProto-Strahl.", + "[Kämpfe gegen den Deka Prototypen] #gErhalte #gProto-Schild.", + "[Kämpfe gegen Beide] #gErhalte #gBeide #gKarten.", + "[Verlassen]" + ] + }, + "bronze:BackToBasics": { + "NAME": "", + "DESCRIPTIONS": [ + "Ohne Einheit kann es keine Stärke geben." + ], + "OPTIONS": [ + "[Vereinigen] Alle #gSchlag und #gVerteidigen Karten erhalten #gKodieren [REMOVE_SPACE].", + "[Gesperrt] Erfordert einen Schlag oder ein Verteidigen." + ] + }, + "bronze:AccursedBlacksmith": { + "NAME": "", + "DESCRIPTIONS": [ + "Du entschließt dich, die Schmiede zu benutzen und... NL #y@KLONK@ #y@KLOOONK@ #y@KLONK!@ NL ... verbesserst dein Arsenal mit neuen Antrieben und Systemen." + ], + "OPTIONS": [ + "[Basteln] #gVerbessere #g3 #gzufällige #gKarten #gmit #gKodieren [REMOVE_SPACE].", + "[Gesperrt] Erfordert eine Karte mit Kodieren." + ] + }, + "bronze:CrystalForge": { + "NAME": "Düstere Schmiede", + "DESCRIPTIONS": [ + "Durch Geheimgänge, die nur ein Konstrukt des Spire kennt, betrittst du eine Kammer, die der Wartung und Reparatur von Automatonen gewidmet ist. Die Werkzeuge hier sind dir von großem Nutzen.", + "Mit der magischen Zange bettest du eine Waffe direkt in deinen Kern ein. #y@Bzzzt!@ Dich selbst zu kodieren ist nicht so einfach wie du dachtest.", + "Mit Hilfe des magischen Ambosses zerschlägst du ein Stück deiner Rüstung, um es dann in der Schmiede zu Energie zu konvertieren. Es ~verschmilzt~ ~mit~ ~dir,~ und du spürst mit der Wärme neue Kräfte in dir wachsen.", + "Du wirfst einen entbehrlichen Teil deiner Rüstung in das magische Schmiedefeuer, das Materie umwandeln kann. Nach einiger Zeit hat sich das Material aufgelöst und in eine Verbesserung für deinen Panzer umgewandelt.", + "Du verlässt die Schmiede auf den selben Weg, wie du sie betreten hast. Deine Reise geht weiter zur Dämmerung, die dich auf der Spitze des Spire erwartet.", + "Wähle eine Karte zum Entfernen aus." + ], + "OPTIONS": [ + "[Kreieren] #gErhalte #gFlaschencode. #rVerliere #r10 #rmax. #rTP.", + "[Umwandeln] #gTausche #geine #gKarte #ggegen #geine #gzufällige #gKarte #gmit #gKodieren.", + "[Verwerten] #rEntferne eine #yseltene Karte. #gErhalte #g10 #gmax. #gTP #gund #gheile #gdich.", + "[Gesperrt] Bereits benutzt.", + "[Verlassen]", + "[Gesperrt] Erfordert eine Karte mit Kodieren.", + "[Gesperrt] Erfordert eine seltene Karte.", + "Wähle eine Karte zum Entfernen aus." + ] + } +} \ No newline at end of file diff --git a/src/main/resources/bronzeResources/localization/deu/KeywordStrings.json b/src/main/resources/bronzeResources/localization/deu/KeywordStrings.json new file mode 100644 index 0000000000..565c0869f7 --- /dev/null +++ b/src/main/resources/bronzeResources/localization/deu/KeywordStrings.json @@ -0,0 +1,59 @@ +[ + { + "PROPER_NAME": "Kodieren", + "NAMES": [ + "kodieren", + "kodiert", + "kodierung", + "kodierte", + "kodierten", + "kodiere", + "encode", + "encoded" + ], + "DESCRIPTION": "Eine Karte, die beim Spielen kodiert wird, landet nicht auf den Abwurfstapel. NL Sind 3 Karten kodiert, #ykompilieren sie zu einer #yFunktion [REMOVE_SPACE], die #b1 kostet und die Effekte der kodierten Karten kombiniert." + }, + { + "PROPER_NAME": "Kompilieren", + "NAMES": [ + "kompilieren", + "kompiliert", + "kompilierung", + "kompilation", + "kompilierungsfehler", + "compile", + "compiled" + ], + "DESCRIPTION": "Kompilierungseffekte werden aktiviert, wenn entsprechende Karten zu einer #yFunktion kompilieren. NL Ist der Effekt negativ, wird er als #yKompilierungsfehler bezeichnet." + }, + { + "PROPER_NAME": "Verschwimmen", + "NAMES": [ + "verschwimmen", + "verschwommen", + "blur" + ], + "DESCRIPTION": "Block wird zu Beginn des Zuges nicht entfernt." + }, + { + "PROPER_NAME": "Einsetzten", + "NAMES": [ + "einsetzen", + "einsatz", + "setze", + "setzt", + "insert" + ], + "DESCRIPTION": "Mische bestimmte Karten in den Nachziehstapel." + }, + { + "PROPER_NAME": "Umtauschen", + "NAMES": [ + "umtausch", + "umtauschen", + "tausche", + "cycle" + ], + "DESCRIPTION": "Wirf Handkarten ab und ziehe genauso viele aus dem Nachziestapel." + } +] \ No newline at end of file diff --git a/src/main/resources/bronzeResources/localization/deu/MonsterStrings.json b/src/main/resources/bronzeResources/localization/deu/MonsterStrings.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/src/main/resources/bronzeResources/localization/deu/MonsterStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/bronzeResources/localization/deu/OrbStrings.json b/src/main/resources/bronzeResources/localization/deu/OrbStrings.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/src/main/resources/bronzeResources/localization/deu/OrbStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/bronzeResources/localization/deu/PotionStrings.json b/src/main/resources/bronzeResources/localization/deu/PotionStrings.json new file mode 100644 index 0000000000..ce7d7b9249 --- /dev/null +++ b/src/main/resources/bronzeResources/localization/deu/PotionStrings.json @@ -0,0 +1,34 @@ +{ + "bronze:FreeFunctionsPotion": { + "NAME": "Maschinenöl", + "DESCRIPTIONS": [ + "Erhöhe die Zahlen der derzeit #ykodierten Karten, abgesehen von den Kosten, um #b", + " [REMOVE_SPACE]." + ] + }, + "bronze:CleanCodePotion": { + "NAME": "Matetee", + "DESCRIPTIONS": [ + "Entferne alle #yKompilierungsfehler [REMOVE_SPACE], die gerade #ykodiert sind. Die nächste #yFunktion [REMOVE_SPACE], die #ykompiliert [REMOVE_SPACE], kostet #b0 bis du sie spielst.", + "Entferne alle #yKompilierungsfehler [REMOVE_SPACE], die gerade #ykodiert sind. Die nächsten #b", + " #yFunktionen [REMOVE_SPACE], die #ykompilieren [REMOVE_SPACE], kosten #b0 bis du sie spielst." + ] + }, + "bronze:BurnAndBuffPotion": { + "NAME": "Überhitzte Wärmepaste", + "DESCRIPTIONS": [ + "Erhalte #b", + " #yStärke und #b", + " #yGeschicklichkeit [REMOVE_SPACE]. NL Lege zwei #yBrennen+ Karten in den Abwurfstapel." + ] + }, + "bronze:BuildAFunctionPotion": { + "NAME": "Kios Clevere Mixtur", + "DESCRIPTIONS": [ + "Wähle #b1 von #b3 zufälligen Karten zum #yKodieren [REMOVE_SPACE]. Wiederhole das, bis eine #yFunktion kompiliert.", + "Wähle #b1 von #b3 zufälligen Karten zum #yKodieren [REMOVE_SPACE]. Wiederhole das, bis eine #yFunktion kompiliert. Nimm zusätzlich #b", + " Kopie der Funktion auf die Hand.", + " Kopien der Funktion auf die Hand." + ] + } +} diff --git a/src/main/resources/bronzeResources/localization/deu/PowerStrings.json b/src/main/resources/bronzeResources/localization/deu/PowerStrings.json new file mode 100644 index 0000000000..7ec0135684 --- /dev/null +++ b/src/main/resources/bronzeResources/localization/deu/PowerStrings.json @@ -0,0 +1,145 @@ +{ + "bronze:Cloning": { + "NAME": "Code-Duplizierung", + "DESCRIPTIONS": [ + "Die nächste Karte die #ykodiert wird, #ykodiert ein weiteres Mal.", + "Die nächste Karte die #ykodiert wird, #ykodiert #b", + " weitere Male." + ] + }, + "bronze:Default": { + "NAME": "Standardklasse", + "DESCRIPTIONS": [ + "Wird das nächste Mal eine Funktion kompiliert, dann #ykodiere eine Kopie der Karte im ersten Slot.", + "Die nächsten #b", + " Male, an denen eine Funktion kompiliert, #ykodiere eine Kopie der Karte im ersten Slot." + ] + }, + "bronze:Feature": { + "NAME": "Es ist ein Feature", + "DESCRIPTIONS": [ + "Erhalte immer, wenn du einen #rStatus ziehst oder #yerschöpfst [REMOVE_SPACE], #b", + " #yBlock [REMOVE_SPACE]." + ] + }, + "bronze:InfiniteBeams": { + "NAME": "Zahllose Strahlen", + "DESCRIPTIONS": [ + "Zu Beginn deines Zuges erhältst du #b1 #yKleiner #yStrahl Karte.", + "Zu Beginn deines Zuges erhältst du #b1 #yKleiner #yStrahl+ Karte.", + "Zu Beginn deines Zuges erhältst du #b", + " #yKleiner #yStrahl Karten.", + "Zu Beginn deines Zuges erhältst du #b", + " #yKleiner #yStrahl+ Karten." + ] + }, + "bronze:Optimize": { + "NAME": "Optimiert", + "DESCRIPTIONS": [ + "Die nächste nicht verbesserte Karte die #ykodiert wird, #ykodiert #yverbessert.", + "Die nächste #b", + " nicht verbesserten Karten die #ykodiert werden, #ykodieren #yverbessert." + ] + }, + "bronze:MaxOutput": { + "NAME": "Laufwerk", + "DESCRIPTIONS": [ + "Ziehe zu Beginn des Zuges zusätzlich #b1 Karte und mische #b1 #yBenommen in den Nachziehstapel.", + "Ziehe zu Beginn des Zuges #b", + " zusätzliche Karten und mische #b", + " #yBenommen in den Nachziehstapel." + ] + }, + "bronze:Return": { + "NAME": "Rückgängig", + "DESCRIPTIONS": [ + "Ziehe zu Beginn deines nächsten Zuges #b1 Karte und erhalte [E].", + "Zu Beginn deiner nächsten #b", + " Züge, ziehe #b1 Karte und erhalte [E]." + ] + }, + "bronze:Library": { + "NAME": "Bibliothek", + "DESCRIPTIONS": [ + "Erhalte zu Beginn jedes Zuges eine zufällige Karte mit #yKodieren. Sie kostet #b0 bis du sie spielst.", + "Erhalte zu Beginn jedes Zuges #b", + " zufällige Karten mit #yKodieren. Sie kosten #b0 bis du sie spielst." + ] + }, + "bronze:LibraryMod": { + "NAME": "Externe Bibliothek", + "DESCRIPTIONS": [ + "Erhalte zu Beginn jedes Zuges eine zufällige Karte mit #yKodieren. Sie ist #yflüchtig [REMOVE_SPACE]." + ] + }, + "bronze:BronzeHeatsink": { + "NAME": "Bronzener Wärmetauscher", + "DESCRIPTIONS": [ + "Immer wenn du eine #yFunktion spielst, ziehe #b1 Karte.", + "Immer wenn du eine #yFunktion spielst, ziehe #b", + " Karten." + ] + }, + "bronze:HardenedForm": { + "NAME": "Orb-Gehilfe", + "DESCRIPTIONS": [ + "Immer wenn du eine Funktion spielst oder kompilierst, erhalte #b", + " #yBlock und füge einem zufälligen Gegner #b", + " Schaden zu." + ] + }, + "bronze:Hardcode": { + "NAME": "Hardcoden", + "DESCRIPTIONS": [ + "Die nächste Funktion die du kompilierst wird deinem Deck hinzugefügt. Die #ykodierten Karten werden aus dem Deck entfernt", + "Die nächsten #b", + " Funktionen die du kompilierst werden deinem Deck hinzugefügt. Die #ykodierten Karten werden aus dem Deck entfernt." + ] + }, + "bronze:Verify": { + "NAME": "Bewusste Form", + "DESCRIPTIONS": [ + "Wenn du eine Funktion ziehst, erhöhe alle Zahlen auf ihr um #b1 (Kosten ausgenommen).", + "Wenn du eine Funktion ziehst, erhöhe alle Zahlen auf ihr um #b", + " (Kosten ausgenommen)." + ] + }, + "bronze:FreeFunction": { + "NAME": "Freie Funktion", + "DESCRIPTIONS": [ + "Die nächste Funktion die kompiliert kostet #b0 [REMOVE_SPACE].", + "Die nächsten #b", + " Funktionen die kompilieren kosten #b0 [REMOVE_SPACE]." + ] + }, + "bronze:CleanCode": { + "NAME": "Sauberer Code", + "DESCRIPTIONS": [ + "Verhindert beim nächsten Kompilieren alle #yKompilierungsfehler. Hält für #b1 weitere Funktion.", + "Verhindert beim nächsten Kompilieren alle #yKompilierungsfehler. Hält für #b", + " weitere Funktionen." + ] + }, + "bronze:CopyPaste": { + "NAME": "Kopie einfügen", + "DESCRIPTIONS": [ + "In diesem Zug spielst du deine nächste #yFunktion doppelt.", + "In diesem Zug spielst du deine nächsten #b", + " #yFunktionen doppelt." + ] + }, + "bronze:FullRelease": { + "NAME": "Release", + "DESCRIPTIONS": [ + "Zu Beginn jedes Zuges, NL " + ] + }, + "bronze:RemoveNextError": { + "NAME": "Fehler beheben", + "DESCRIPTIONS": [ + "Verhindere den nächsten #yKompilierungsfehler [REMOVE_SPACE], der #ykodiert wird.", + "Verhindere die nächsten #b", + " #yKompilierungsfehler [REMOVE_SPACE], die #ykodiert werden." + ] + } +} \ No newline at end of file diff --git a/src/main/resources/bronzeResources/localization/deu/RelicStrings.json b/src/main/resources/bronzeResources/localization/deu/RelicStrings.json new file mode 100644 index 0000000000..32db1fa6ae --- /dev/null +++ b/src/main/resources/bronzeResources/localization/deu/RelicStrings.json @@ -0,0 +1,108 @@ +{ + "bronze:BronzeCore": { + "NAME": "Bronzekern", + "FLAVOR": "Hält 50.000 Jahre.", + "DESCRIPTIONS": [ + "Erhalte [E] , wenn du das erste Mal im Kampf eine #yFunktion #ykompilierst [REMOVE_SPACE]." + ] + }, + "bronze:ProtectiveGoggles": { + "NAME": "Schutzbrille", + "FLAVOR": "Sieh es dir genau an.", + "DESCRIPTIONS": [ + "Wenn am Ende deines Zuges keine Karte #ybronze:kodiert ist, dann erhalte #b", + " #yBlock [REMOVE_SPACE]." + ] + }, + "bronze:DecasWashers": { + "NAME": "Dekas Dichtungen", + "FLAVOR": "Es ist nicht ganz klar, warum Deka sie sammelt.", + "DESCRIPTIONS": [ + "Ziehe zu Beginn deiner ersten #b", + " Züge jeweils eine zusätzliche Karte." + ] + }, + "bronze:Timepiece": { + "NAME": "Frostige Grundierung", + "FLAVOR": "22 Miligramm des Isotops Ne22 - Lebensdauer: 22 Jahre. Zu lagern in einem Mahagonikühlschrank.", + "DESCRIPTIONS": [ + "Alle #yFunktionen [REMOVE_SPACE], die du #ykompilierst [REMOVE_SPACE], erhalten #yBehalten [REMOVE_SPACE]." + ] + }, + "bronze:Mallet": { + "NAME": "Hammer", + "FLAVOR": "Jetzt reicht's! Ich hole meinen Hammer!", + "DESCRIPTIONS": [ + "Nimm zu Beginn jedes Kampfes #b2 #yFeinjustierung+ Karten auf die Hand." + ] + }, + "bronze:SilverBullet": { + "NAME": "Bronzekugel", + "FLAVOR": "Nicht effektiv gegen Spirewölfe - zum Glück sind sie schon ausgestorben.", + "DESCRIPTIONS": [ + "Nimm zu Beginn jedes Kampfes ein #yBronzegeschütz auf die Hand. Es kostet #b0 [REMOVE_SPACE]." + ] + }, + "bronze:MakeshiftBattery": { + "NAME": "Improvisierte Batterie", + "FLAVOR": "Sie hat 8,9 Volt.", + "DESCRIPTIONS": [ + "Erhalte in deinem Zug [E]. Lege zu Beginn jedes Zuges eine #yVerschleimt Karte in den Abwurfstapel." + ] + }, + "bronze:CableSpool": { + "NAME": "Kabeltrommel", + "FLAVOR": "Verstrickt...", + "DESCRIPTIONS": [ + "Die erste Karte, die im Kampf #ybronze:kodiert wird, #ykodiert ein zweites Mal." + ] + }, + "bronze:ElectromagneticCoil": { + "NAME": "Induktionsspule", + "FLAVOR": "Eine ineffiziente, aber unterhaltsame Energiequelle.", + "DESCRIPTIONS": [ + "#yFunktionen bestehen nun aus #b4 Karten." + ] + }, + "bronze:PlatinumCore": { + "NAME": "Platinkern", + "FLAVOR": "Changelog: UX verbessert.", + "DESCRIPTIONS": [ + "Ersetzt ", + " [REMOVE_SPACE].[] NL Die ersten #b", + " #ykompilierten #yFunktionen des Kampfes kosten #b0 bis du sie spielst." + ] + }, + "bronze:BottledCode": { + "NAME": "Flaschencode", + "FLAVOR": "Moment, ich habe Code für genau diese Situation dabei...", + "DESCRIPTIONS": [ + "Wähle beim Aufheben eine Karte mit #ybronze:Kodieren [REMOVE_SPACE]. Beginne jeden Kampf mit dieser Karte #ykodiert [REMOVE_SPACE].", + "Wähle eine Karte für den ", + "Beginne jeden Kampf mit ", + " #ybronze:kodiert [REMOVE_SPACE].", + "Die eingelegte Karte wurde aus dem Deck #rentfernt [REMOVE_SPACE]. Das Relikt hat keine Wirkung mehr." + ] + }, + "bronze:DonusWashers": { + "NAME": "Donus Dichtungen", + "FLAVOR": "Es ist offensichtlich, warum Donu sie sammelt.", + "DESCRIPTIONS": [ + "Erhalte im ersten Zug jedes Kampfes [E] [E] und mische #b1 #yLeere in den Nachziehstapel." + ] + }, + "bronze:BronzeIdol": { + "NAME": "Bronzener Götze", + "FLAVOR": "Ein antiker, zur Waffe umfunktionierter Antivirus. Wer hat ihn gebaut, und warum?", + "DESCRIPTIONS": [ + "#yStatus Karten sind nun spielbar und haben einen positiven Effekt." + ] + }, + "bronze:AnalyticalCore": { + "NAME": "Paradoxes Artefakt", + "FLAVOR": "Du warst beim Coden noch nie so sehr in Ekstase.", + "DESCRIPTIONS": [ + "Erhalte zu Beginn jedes Zuges eine zufällige Karte mit #ybronze:Kodieren [REMOVE_SPACE]. Sie ist #yflüchtig [REMOVE_SPACE]." + ] + } +} diff --git a/src/main/resources/bronzeResources/localization/deu/RunModStrings.json b/src/main/resources/bronzeResources/localization/deu/RunModStrings.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/src/main/resources/bronzeResources/localization/deu/RunModStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/bronzeResources/localization/deu/UIStrings.json b/src/main/resources/bronzeResources/localization/deu/UIStrings.json new file mode 100644 index 0000000000..e1bab8ebaa --- /dev/null +++ b/src/main/resources/bronzeResources/localization/deu/UIStrings.json @@ -0,0 +1,56 @@ +{ + "bronze:SpecificCardReward": { + "TEXT": [ + "Erhalte ", + " ", + "Wähle eine Karte." + ] + }, + "bronze:UnplayableMod": { + "TEXT": [ + "Unspielbar. NL ", + "FEHLER: NULL_POINTER", + "This is kept solely for the Null Pointer." + ] + }, + "bronze:EncodeAndShuffleMod": { + "TEXT": [ + " NL bronze:Kodiere, und lege dann eine Kopie dieser Karte auf den Abwurfstapel." + ] + }, + "bronze:DoublePlayModifier": { + "TEXT": [ + " NL Spiele diese Karte nochmal." + ] + }, + "bronze:MiscStrings": { + "TEXT": [ + "Wähle eine Karte um sie zurück auf die Hand zu nehmen. Sie erhält Behalten.", + " - Erhöhe den Schaden des #yKultistenschlags permanent um #b", + " [REMOVE_SPACE].", + "FEHLER: LEERE_SEQUENZ", + " - Erhalte eine Kopie der #yEndlosschleife mit #b", + " zusätzlichen Schaden.", + "Mutieren.", + "Kodieren.", + "" + ] + }, + "bronze:AutoTextHelper": { + "TEXT": [ + " NL bronze:Kompilierung", + "bronze:Kompilierung", + " NL bronze:Kodieren.", + "bronze:Kodieren. NL ", + "\u202F Wenn bronze:Kodiert:", + "LOCALIZATION NOTE: The text above must be equal to the start of Replicate's extra description line.", + "ERROR - KEINE_DOPPELTEN_RELEASES" + ] + }, + "bronze:CompileDisplayPanel": { + "TEXT": [ + "Bei Kompilierung:", + "bronze:Kompilierung" + ] + } +} \ 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 e008fd959b..aeea85f3b3 100644 --- a/src/main/resources/bronzeResources/localization/eng/CardStrings.json +++ b/src/main/resources/bronzeResources/localization/eng/CardStrings.json @@ -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", @@ -584,7 +584,7 @@ }, "bronze:DecaBeam": { "NAME": "Proto-Shield", - "DESCRIPTION": "Gain !B! Block. NL bronze:Compile - Gain !M! expansioncontent: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/PowerStrings.json b/src/main/resources/bronzeResources/localization/eng/PowerStrings.json index 83c0fa3dc1..372b5d7e65 100644 --- a/src/main/resources/bronzeResources/localization/eng/PowerStrings.json +++ b/src/main/resources/bronzeResources/localization/eng/PowerStrings.json @@ -19,26 +19,26 @@ "NAME": "It's A Feature", "DESCRIPTIONS": [ "Whenever you draw or #yExhaust a #yStatus card, gain #b", - " #yBlock [REMOVE_SPACE]." + " #yBlock." ] }, "bronze:InfiniteBeams": { "NAME": "Infinite Beams", "DESCRIPTIONS": [ - "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 #b1 #yMinor #yBeam.", + "At the start of your turn, Gain #b1 #yMinor #yBeam+.", "At the start of your turn, gain #b", - " #yMinor #yBeams [REMOVE_SPACE].", + " #yMinor #yBeams.", "At the start of your turn, gain #b", - " #yMinor #yBeam+s [REMOVE_SPACE]." + " #yMinor #yBeam+s." ] }, "bronze:Optimize": { "NAME": "Optimized", "DESCRIPTIONS": [ - "#yUpgrade the next #yUpgradable card you #yEncode [REMOVE_SPACE].", + "#yUpgrade the next #yUpgradable card you #yEncode.", "#yUpgrade the next #b", - " #yUpgradable cards you #yEncode [REMOVE_SPACE]." + " #yUpgradable cards you #yEncode." ] }, "bronze:MaxOutput": { @@ -69,7 +69,7 @@ "bronze:LibraryMod": { "NAME": "External Library", "DESCRIPTIONS": [ - "At the start of your turn, gain a random card with #yEncode and give it #yEthereal [REMOVE_SPACE]." + "At the start of your turn, gain a random card with #yEncode and give it #yEthereal." ] }, "bronze:BronzeHeatsink": { @@ -99,7 +99,7 @@ "bronze:Verify": { "NAME": "Sentient Form", "DESCRIPTIONS": [ - "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 #b1.", "Whenever you draw a Function, increase all numbers on it by #b", " except for cost." ] @@ -107,9 +107,9 @@ "bronze:FreeFunction": { "NAME": "Free Function", "DESCRIPTIONS": [ - "The next Function you create costs #b0 [REMOVE_SPACE].", + "The next Function you create costs #b0.", "The next #b", - " Functions you create cost #b0 [REMOVE_SPACE]." + " Functions you create cost #b0." ] }, "bronze:CleanCode": { @@ -137,9 +137,9 @@ "bronze:RemoveNextError": { "NAME": "Remove Errors", "DESCRIPTIONS": [ - "Remove the next #yCompile #yError #yEncoded [REMOVE_SPACE].", + "Remove the next #yCompile #yError #yEncoded.", "Remove the next #b", - " #yCompile #yErrors #yEncoded [REMOVE_SPACE]." + " #yCompile #yErrors #yEncoded." ] } } \ 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 13991a73ad..2a2214e9dd 100644 --- a/src/main/resources/bronzeResources/localization/eng/RelicStrings.json +++ b/src/main/resources/bronzeResources/localization/eng/RelicStrings.json @@ -10,14 +10,16 @@ "NAME": "Protective Goggles", "FLAVOR": "Look closely.", "DESCRIPTIONS": [ - "If you end your turn with no #yEncoded cards, gain #b4 #yBlock [REMOVE_SPACE]." + "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": { @@ -67,7 +69,8 @@ "FLAVOR": "Changelog: Improved user experience.", "DESCRIPTIONS": [ "Replaces ", - " [REMOVE_SPACE].[] 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": { @@ -77,7 +80,8 @@ "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]." + " [REMOVE_SPACE].", + "The bottled card has been #rremoved from your deck, the relic no longer functions." ] }, "bronze:DonusWashers": { diff --git a/src/main/resources/bronzeResources/localization/eng/UIStrings.json b/src/main/resources/bronzeResources/localization/eng/UIStrings.json index 3053b37dc1..9382315fb9 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 ae4291f74e..b2337dff73 100644 --- a/src/main/resources/bronzeResources/localization/fra/CardStrings.json +++ b/src/main/resources/bronzeResources/localization/fra/CardStrings.json @@ -18,7 +18,7 @@ }, "bronze:Assembly": { "NAME": "Assemblage", - "DESCRIPTION": "Scrutez !M!. NL bronze:Encodez toutes les cartes avec bronze:Encodez qui ont été défaussées dans l'ordre choisi. NL Exhaust." + "DESCRIPTION": "Scrutez !M!. NL bronze:Encodez toutes les cartes avec bronze:Encode qui ont été défaussées dans l'ordre choisi. NL Épuisement." }, "bronze:Backtrace": { "NAME": "Backtrace", @@ -61,7 +61,7 @@ }, "bronze:Break": { "NAME": "Fissure", - "DESCRIPTION": "Infligez !D! dégâts. NL bronze:Compilation *Erreur - bronze:Insérez une *Brûlure, une *Blessure et un *Englué.", + "DESCRIPTION": "Infligez !D! dégâts. NL bronze:Compilation *Erreur - bronze:Insérez une *Brûlure, une *Blessure, un *Englué et un *Néant.", "EXTENDED_DESCRIPTION": [ "broken", "Smash" @@ -69,7 +69,7 @@ }, "bronze:BronzeArmor": { "NAME": "Armure de Bronze", - "DESCRIPTION": "Gagnez !bauto! d'Artéfact. NL bronze:Compilation *Erreur - TOUS les ennemis gagnent !M! d'Artifact.", + "DESCRIPTION": "Gagnez !bauto! d'Artéfact. NL bronze:Compilation *Erreur - TOUS les ennemis gagnent !M! d'Armure.", "EXTENDED_DESCRIPTION": [ "bronze", "Armor" @@ -81,7 +81,7 @@ }, "bronze:BugBarrage": { "NAME": "Barrage buggé", - "DESCRIPTION": "Ajoutez 1 *Blessure dans votre main. NL bronze:Cyclez chaque Statut dans votre main, infligeant !D! de dégâts pour chacune.", + "DESCRIPTION": "Ajoutez !M! *Blessures dans votre main. NL bronze:Cyclez chaque Statut dans votre main, infligeant !D! de dégâts pour chacune.", "UPGRADE_DESCRIPTION": "Ajoutez !M! *Blessures dans votre main. NL bronze:Cyclez chaque Statut dans votre main, infligeant !D! de dégâts pour chacune.", "EXTENDED_DESCRIPTION": [ " NL (Frappe ", @@ -89,7 +89,7 @@ ] }, "bronze:BuggyMess": { - "NAME": "Désordre de bugs", + "NAME": "Chaos buggé", "DESCRIPTION": "bronze:Insérez un *Hébètement. NL Gagnez !M! [E] .", "EXTENDED_DESCRIPTION": [ "buggy", @@ -122,7 +122,7 @@ }, "bronze:ClassDefault": { "NAME": "Classe par défaut", - "DESCRIPTION": "Les !M! prochaines fois que vous créez une Fonction, bronze:Encodez une copie de la première carte de celle-ci" + "DESCRIPTION": "Les !M! prochaines fois que vous créez une Fonction, bronze:Encodez une copie de la carte actuelle dans le premier emplacement." }, "bronze:CleanCode": { "NAME": "Code Clean", @@ -183,7 +183,7 @@ "bronze:DelayedSlice": { "NAME": "Robo-Tranche", "DESCRIPTION": "Infigez !D! dégâts. NL Au prochain tour, piochez !M! carte supplémentaire.", - "UPGRADE_DESCRIPTION": "Infigez !D! dégâts. NL Au prochain tour, piochez !M! carte supplémentaires.", + "UPGRADE_DESCRIPTION": "Infigez !D! dégâts. NL Au prochain tour, piochez !M! cartes supplémentaires.", "EXTENDED_DESCRIPTION": [ "delayed", "Slice" @@ -236,8 +236,8 @@ }, "bronze:ForLoop": { "NAME": "Boucle bouclée", - "DESCRIPTION": "La prochaine carte que vous bronze:Encodez provoque X copies additionnelles d'être aussi bronze:Encodées. NL Épuisement.", - "UPGRADE_DESCRIPTION": "La prochaine carte que vous bronze:Encodez provoque X+1 copies additionnelles d'être aussi bronze:Encodées. NL Épuisement." + "DESCRIPTION": "La prochaine carte que vous bronze:Encodez provoque X copies supplémentaires d'être aussi bronze:Encodées. NL Épuisement.", + "UPGRADE_DESCRIPTION": "La prochaine carte que vous bronze:Encodez provoque X+1 copies supplémentaires d'être aussi bronze:Encodées. NL Épuisement." }, "bronze:Format": { "NAME": "Formatage", @@ -284,7 +284,7 @@ "bronze:Goto": { "NAME": "Goto", "DESCRIPTION": "Piochez !M! carte. NL bronze:Compilation - Au prochain tour, piochez !M! carte.", - "UPGRADE_DESCRIPTION": "Draw !M! cartes. NL bronze:Compilation - Au prochain tour, piochez !M! cartes.", + "UPGRADE_DESCRIPTION": "Piochez !M! cartes. NL bronze:Compilation - Au prochain tour, piochez !M! cartes.", "EXTENDED_DESCRIPTION": [ "running", "Sprint" @@ -300,7 +300,7 @@ }, "bronze:HyperBeam": { "NAME": "ULTRALASER", - "DESCRIPTION": "Retenue. NL Infligez !D! dégâts à TOUS les ennemis. NL Mettez 5 *Néant en haut de votre pioche. NL Quand Retenue, baissez son coût de 1 pour ce combat." + "DESCRIPTION": "Retenue. Infligez !D! dégâts à TOUS les ennemis. NL Mettez !M! *Néants en haut de votre pioche." }, "bronze:InfiniteBeams": { "NAME": "Lasers infinis", @@ -334,12 +334,11 @@ }, "bronze:ItsAFeature": { "NAME": "C'est une Feature", - "DESCRIPTION": "Lorsque vous piochez une Malédiction ou un Statut, gagnez 1 de Force Temporaire et 1 de Dextérité Temporaire.", - "UPGRADE_DESCRIPTION": "Inné. NL Lorsque vous piochez une Malédiction ou un Statut, gagnez 1 de Force Temporaire et 1 de Dextérité Temporaire." + "DESCRIPTION": "Lorsque vous piochez ou Épuisez un Statut, gagnez !M! d'Armure." }, "bronze:Library": { "NAME": "Bibliothèque", - "DESCRIPTION": "Au début de votre tour, ajoutez une carte aléatoire avec bronze:Encodez dans votre main. NL Elle coûte 0." + "DESCRIPTION": "Au début de votre tour, ajoutez une carte aléatoire avec bronze:Encodez dans votre main, elle coûte 0 jusqu'à ce qu'elle soit jouée." }, "bronze:MaxOutput": { "NAME": "Rendement max", @@ -347,7 +346,7 @@ }, "bronze:Mutator": { "NAME": "Mutateur", - "DESCRIPTION": "Gagnez !M! 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": { @@ -418,8 +417,8 @@ }, "bronze:Repulsor": { "NAME": "Répulseur", - "DESCRIPTION": "Épuisez la première carte Statut ou Malédiction que vous piochez et piochez une carte pour la remplacer.", - "UPGRADE_DESCRIPTION": "Inné. NL Épuisez la première carte Statut ou Malédiction que vous piochez et piochez une carte pour la remplacer." + "DESCRIPTION": "Lorsque vous piochez la première carte Statut ou Malédiction à chaque tour, Épuisez-la et piochez une carte.", + "UPGRADE_DESCRIPTION": "Inné. NL Lorsque vous piochez la première carte Statut ou Malédiction à chaque tour, Épuisez-la et piochez une carte." }, "bronze:Return": { "NAME": "Retour", @@ -428,7 +427,7 @@ }, "bronze:Safeguard": { "NAME": "Sauvegarde", - "DESCRIPTION": "Gagnez !B! d'Armure. NL bronze:Compilation *Erreur - Obtenez !M! de Fragilité.", + "DESCRIPTION": "Gagnez !B! d'Armure.", "EXTENDED_DESCRIPTION": [ "safe", "Guard" @@ -453,7 +452,7 @@ }, "bronze:Shield": { "NAME": "Bouclier collant", - "DESCRIPTION": "Gagnez !B! d'Armure. NL bronze:Insérez un *Englué.", + "DESCRIPTION": "Retenue. Gagnez !B! d'Armure. NL bronze:Insérez un *Englué.", "EXTENDED_DESCRIPTION": [ "sticky", "Shield" @@ -461,12 +460,16 @@ }, "bronze:ShipIt": { "NAME": "Livraison express", - "DESCRIPTION": "Infligez !D! dégâts. NL Infligez !M! dégâts additionnels pour tous vos Statuts." + "DESCRIPTION": "Infligez !D! dégâts. NL Répétez ceci pour chaque carte Statut épuisée.", + "EXTENDED_DESCRIPTION": [ + "Infligez !D! dégâts. NL Répétez ceci pour chaque carte Statut épuisée. (", + ")." + ] }, "bronze:SpaghettiCode": { "NAME": "Spaghetti Code", - "DESCRIPTION": "Jusqu'à ce que la Séquence soit complète, choisissez 1 de 3 cartes aléatoires à bronze:Encoder. NL Épuisement.", - "UPGRADE_DESCRIPTION": "Jusqu'à ce que la Séquence soit complète, choisissez 1 de 3 cartes aléatoires à bronze:Encoder." + "DESCRIPTION": "Choisissez 1 carte parmi 3 cartes aléatoires à bronze:Encoder. Répétez ceci jusqu'à ce que vous ayez créé une Fonction. NL Épuisement.", + "UPGRADE_DESCRIPTION": "Choisissez 1 carte parmi 3 cartes aléatoires à bronze:Encoder. Répétez ceci jusqu'à ce que vous ayez créé une Fonction." }, "bronze:Strike": { "NAME": "Frappe", @@ -478,7 +481,7 @@ }, "bronze:Terminator": { "NAME": "Terminateur", - "DESCRIPTION": "bronze:Compilation - Si il s'agit de la dernière carte de la Séquence, la Fonction gagne 'Jouez ceci deux fois'.", + "DESCRIPTION": "bronze:Compilation - S'il s'agit de la dernière carte de la Fonction, celle-ci gagne 'Jouez ceci deux fois'.", "EXTENDED_DESCRIPTION": [ "sad", "End" @@ -486,7 +489,7 @@ }, "bronze:ThunderWave": { "NAME": "Vague électrique", - "DESCRIPTION": "Infligez !D! dégâts à un ennemi aléatoire pour chaque Fonction créée durant ce combat.", + "DESCRIPTION": "Infligez !D! dégâts à TOUS les ennemis. NL Gagnez 1 guardianmod:Tampon. NL Épuisement.", "EXTENDED_DESCRIPTION": [ " NL (Hits ", " times.)" @@ -494,8 +497,8 @@ }, "bronze:TinkerersToolbox": { "NAME": "Outils de Dev", - "DESCRIPTION": "Retenue. NL Choisissez entre *Debug, *Regroupement, *Décompilation, and *Décalage *d'octet. NL Épuisement.", - "UPGRADE_DESCRIPTION": "Retenue. NL Choisissez entre *Debug, *Regroupement, *Décompilation, and *Décalage *d'octet." + "DESCRIPTION": "Retenue. NL Obtenez *Debug, *Batch, *Décompilation, ou *Décalage *d'octet. NL Épuisement.", + "UPGRADE_DESCRIPTION": "Retenue. NL Obtenez *Debug, *Batch, *Décompilation, ou *Décalage *d'octet." }, "bronze:Turbo": { "NAME": "Turbo", @@ -508,17 +511,17 @@ }, "bronze:Verify": { "NAME": "Forme sentinelle", - "DESCRIPTION": "Éthérée. NL La première fois que vous créez ou piochez une Fonction chaque tour, augmentez tous les nombres dessus par 1.", - "UPGRADE_DESCRIPTION": "La première fois que vous créez ou piochez une Fonction chaque tour, augmentez tous les nombres dessus par 1." + "DESCRIPTION": "Éthérée. NL Lorsque vous piochez une Fonction, augmentez de 1 tous les chiffres qui y figurent, à l'exception du coût.", + "UPGRADE_DESCRIPTION": "Lorsque vous piochez une Fonction, augmentez de 1 tous les chiffres qui y figurent, à l'exception du coût." }, "bronze:Virus": { "NAME": "Virus", - "DESCRIPTION": "Retenue. NL Infligez !D! dégâts. NL Transformez toutes les cartes en main en *Minilaser. NL Épuisement.", - "UPGRADE_DESCRIPTION": "Retenue. NL Infligez !D! dégâts. NL Transformez toutes les cartes en main en *Minilaser+. NL Épuisement." + "DESCRIPTION": "Infligez !D! dégâts. NL Défaussez votre main et gagnez un *Minilaser pour chaque carte défaussée. NL Épuisement.", + "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. NL Défaussez votre main et gagnez un *Minilaser pour chaque carte défaussée. NL Épuisement." }, "bronze:WhirlingStrike": { "NAME": "Tir perçant", - "DESCRIPTION": "Infligez !D! dégâts à tous les ennemis.", + "DESCRIPTION": "Infligez !D! dégâts à TOUS les ennemis.", "EXTENDED_DESCRIPTION": [ "piercing", "Shot" @@ -542,8 +545,8 @@ "bronze:Batch": { - "NAME": "Regroupement", - "DESCRIPTION": "Créez immédiatement une Fonction à partir des cartes de la Séquence. NL Epuisement.", + "NAME": "Batch", + "DESCRIPTION": "Créez immédiatement une Fonction à partir des cartes de la Séquence. NL Épuisement.", "UPGRADE_DESCRIPTION": "Créez immédiatement une Fonction à partir des cartes de la Séquence." }, "bronze:BranchBlock": { @@ -564,8 +567,8 @@ }, "bronze:ByteShift": { "NAME": "Décalage d'octet", - "DESCRIPTION": "Remettez toutes les cartes Encodées dans votre main. NL Elles gagnent Retenue. NL Epuisement.", - "UPGRADE_DESCRIPTION": "Retenue. NL Remettez toutes les cartes Encodées dans votre main. NL Elles gagnent Retenue. NL Epuisement." + "DESCRIPTION": "Remettez toutes les cartes Encodées dans votre main. NL Elles gagnent Retenue. NL Épuisement.", + "UPGRADE_DESCRIPTION": "Retenue. NL Remettez toutes les cartes Encodées dans votre main. NL Elles gagnent Retenue. NL Épuisement." }, "bronze:DazingPulse": { "NAME": "Onde Étrange", @@ -581,7 +584,7 @@ }, "bronze:DecaBeam": { "NAME": "Proto-Bouclier", - "DESCRIPTION": "Gagnez !B! d'Armure. NL bronze:Compilation - Gagnez !M! d'Armure Plaquée et bronze:Insérez !bauto! *Hébétement.", + "DESCRIPTION": "Gagnez !B! d'Armure. NL bronze:Compilation - Gagnez !M! *d'Armure *Plaquée et bronze:Insérez !bauto! *Hébétement.", "EXTENDED_DESCRIPTION": [ "jagged", "Barrier" @@ -636,7 +639,7 @@ "bronze:Ignite": { "NAME": "Flambage", "DESCRIPTION": "Appliquez !M! de hexamod:Brûlure. NL À la fin de votre tour, prenez 2 dégâts.", - "UPGRADE_DESCRIPTION": "Appliquez !M! de hexamod:Brûlure. NL À la fin de votre tour, prenez 4 dégâts.." + "UPGRADE_DESCRIPTION": "Appliquez !M! de hexamod:Brûlure. NL À la fin de votre tour, prenez 4 dégâts." }, "bronze:IntoTheVoid": { "NAME": "Dans le Néant", diff --git a/src/main/resources/bronzeResources/localization/fra/EventStrings.json b/src/main/resources/bronzeResources/localization/fra/EventStrings.json index 9d3fd06680..b0a4042bf5 100644 --- a/src/main/resources/bronzeResources/localization/fra/EventStrings.json +++ b/src/main/resources/bronzeResources/localization/fra/EventStrings.json @@ -35,7 +35,7 @@ "Il n'y a pas de force sans unité." ], "OPTIONS": [ - "[Unification] Toutes les #gFrappes et #gDéfenses gagnent #gEncode.", + "[Unification] Toutes les #gFrappes et #gDéfenses gagnent #gEncode [REMOVE_SPACE].", "[Verrouillé] Requiert une Frappe ou une Défense." ] }, @@ -70,4 +70,4 @@ "Choisissez une carte à Retirer." ] } -} \ No newline at end of file +} diff --git a/src/main/resources/bronzeResources/localization/fra/KeywordStrings.json b/src/main/resources/bronzeResources/localization/fra/KeywordStrings.json index e2a0d80801..76431a3371 100644 --- a/src/main/resources/bronzeResources/localization/fra/KeywordStrings.json +++ b/src/main/resources/bronzeResources/localization/fra/KeywordStrings.json @@ -2,25 +2,26 @@ { "PROPER_NAME": "Encode", "NAMES": [ - "encode", "encodé", "encodée", "encodées", "encodez", "encoder", + "encode", "encoded" ], - "DESCRIPTION": "Ajoutez la carte à la Séquence. NL Quand 3 cartes sont dans la Séquence, leurs effets (autre que Encode) sont fusionnés en une Fonction dont le coût est égal au coût de la carte la plus chère." + "DESCRIPTION": "Ajoutez la carte à la Séquence. NL Quand 3 cartes sont dans la Séquence, leurs effets (autre que Encode) sont fusionnés en une Fonction qui coûte #b1 [REMOVE_SPACE]." }, { "PROPER_NAME": "Compilation", "NAMES": [ "compilation", "compilé", + "compilés", "compile", "compiled" ], - "DESCRIPTION": "Un effet additionnel qui se déclenche lorsque cette carte, alors qu'elle est dans cette Séquence, est combinée dans une Fonction. NL Peut être un effet négatif, qui est référré en tant qu''Erreur'." + "DESCRIPTION": "Un effet qui se déclenche lorsque cette carte est fusionnée dans la Fonction. NL Peut être un effet négatif, qui est référé en tant qu''Erreur'." }, { "PROPER_NAME": "Flou", @@ -44,6 +45,6 @@ "cyclez", "cycle" ], - "DESCRIPTION": "Défaussez une carte et piochez en une pour la remplacer." + "DESCRIPTION": "Défaussez une carte et piochez-en une pour la remplacer." } -] \ No newline at end of file +] diff --git a/src/main/resources/bronzeResources/localization/fra/PotionStrings.json b/src/main/resources/bronzeResources/localization/fra/PotionStrings.json index 56cdd0e5bf..e9f8e8a933 100644 --- a/src/main/resources/bronzeResources/localization/fra/PotionStrings.json +++ b/src/main/resources/bronzeResources/localization/fra/PotionStrings.json @@ -3,32 +3,32 @@ "NAME": "Huile de Machine", "DESCRIPTIONS": [ "Augmentez tous les nombres des cartes de la Séquence de #b", - "." + " à part le coût." ] }, "bronze:CleanCodePotion": { - "NAME": "Élixir alchylique", + "NAME": "Élixir Alchylique", "DESCRIPTIONS": [ "Retirez tous les effets des *Erreurs de Compilation de la prochaine Fonction qur vous créez. Réduisez son coût à #b0 jusqu'à ce qu'elle soit jouée", "Retirez tous les effets des *Erreurs de Compilation pour les #b", - "prochaines Fonctions que vous créez. Réduisez leur coût à #b0 jusqu'à ce qu'elles soient jouées ." + "prochaines Fonctions que vous créez. Réduisez leur coût à #b0 jusqu'à ce qu'elles soient jouées." ] }, "bronze:BurnAndBuffPotion": { - "NAME": "Préparation Épuisante", + "NAME": "Breuvage Épuisant", "DESCRIPTIONS": [ "Gagnez #b", " de Force et #b", - " de Dexterité. NL Ajoutez deux #yBrûlures+ à votre défausse ." + " de Dexterité [REMOVE_SPACE]. NL Ajoutez deux #yBrûlures+ à votre défausse." ] }, "bronze:BuildAFunctionPotion": { - "NAME": "Savant mélange de Kio", + "NAME": "Savant Mélange de Kio", "DESCRIPTIONS": [ - "Jusqu'à ce que la séquence soit complète, choisissez #b1 parmi #b3 cartes aléatoires à #yEncoder.", - "Jusqu'à ce que la séquence soit complète, choisissez #b1 parmi #b3 cartes aléatoires à #yEncoder. Ajoutez #b", - " copies de la Fonction créée à votre main .", - " copies de la Fonction créée à votre main." + "Choisissez #b1 de #b3 cartes aléatoires à #yEncoder [REMOVE_SPACE], répétez jusqu'à ce que vous ayez créé une #yFonction.", + "Choisissez #b1 de #b3 cartes aléatoires à #yEncoder [REMOVE_SPACE], répétez jusqu'à ce que vous ayez créé une #yFonction et obtenez #b", + " copie de ceci.", + " copies de ceci." ] } } diff --git a/src/main/resources/bronzeResources/localization/fra/PowerStrings.json b/src/main/resources/bronzeResources/localization/fra/PowerStrings.json index 2f71395f95..abf0d52be4 100644 --- a/src/main/resources/bronzeResources/localization/fra/PowerStrings.json +++ b/src/main/resources/bronzeResources/localization/fra/PowerStrings.json @@ -2,45 +2,43 @@ "bronze:Cloning": { "NAME": "Fusion", "DESCRIPTIONS": [ - "La prochaine fois que vous ajoutez une carte dans la Séquence, ajoutez-en une copie supplémentaire de celle-ci.", - "La prochaine fois que vous ajoutez une carte dans la Séquence, ajoutez-en #b", + "La prochaine fois que vous #yEncodez une carte, #yEncodez une copie supplémentaire de celle-ci.", + "La prochaine fois que vous #yEncodez une carte, #yEncodez #b", " copies supplémentaires de celle-ci." ] }, "bronze:Default": { "NAME": "Classe par défaut", "DESCRIPTIONS": [ - "Ajoutez une copie de ", - " à la prochaine Séquence.", - " aux #b", - " prochaines Séquences." + "La prochaine fois que vous créez une fonction, #yEncodez une copie de la carte actuelle dans le premier emplacement.", + "Les #b", + " prochaines fois que vous créez une fonction, #yEncodez une copie de la carte actuelle dans le premier emplacement." ] }, "bronze:Feature": { "NAME": "C'est une Feature", "DESCRIPTIONS": [ "Lorsque vous piochez une #rMalédiction ou une carte #yStatut, gagnez #b", - " de #yForce temporaire et #b", - " de #yDextérité temporaire." + " #yd'Armure [REMOVE_SPACE]." ] }, "bronze:InfiniteBeams": { "NAME": "Lasers infinis", "DESCRIPTIONS": [ - "Au début de votre tour, add #b1 #yMinilaser dans votre main.", - "Au début de votre tour, add #b1 #yMinilaser+ dans votre main.", - "Au début de votre tour, add #b", - " #yMinilaser dans votre main.", + "Au début de votre tour, ajoutez #b1 #yMinilaser dans votre main.", + "Au début de votre tour, ajoutez #b1 #yMinilaser+ dans votre main.", + "Au début de votre tour, ajoutez #b", + " #yMinilaser dans votre main [REMOVE_SPACE].", "Au début de votre tour, ajoutez #b", - " #yMinilaser+ dans votre main." + " #yMinilaser+ dans votre main [REMOVE_SPACE]." ] }, "bronze:Optimize": { "NAME": "Optimisation", "DESCRIPTIONS": [ - "#yAméliorez la prochaine carte que vous #yEncodez et qui peut être #yAméliorée.", + "#yAméliorez la prochaine carte #yAméliorable que vous #yEncodez [REMOVE_SPACE].", "#yAméliorez les #b", - " prochaines cartes que vous #yEncodez et qui peuvent être #yAméliorées." + " prochaines cartes #yAméliorables que vous #yEncodez." ] }, "bronze:MaxOutput": { @@ -71,14 +69,14 @@ "bronze:LibraryMod": { "NAME": "Bibliothèque externe", "DESCRIPTIONS": [ - "Au début de votre tour, ajoutez une carte aléatoire avec #yEncode dans votre main. Celle-ci est Ethérée." + "Au début de votre tour, ajoutez une carte aléatoire avec #yEncode dans votre main et rendez-la #yEthérée [REMOVE_SPACE]." ] }, "bronze:BronzeHeatsink": { "NAME": "Dissipateur de bronze", "DESCRIPTIONS": [ - "Lorsque vous jouez une #yFonction, piochez #b1 carte.", - "Lorsque vous jouez une #yFonction, piochez #b", + "Lorsque vous jouez une #yFonction [REMOVE_SPACE], piochez #b1 carte.", + "Lorsque vous jouez une #yFonction [REMOVE_SPACE], piochez #b", " cartes." ] }, @@ -101,17 +99,17 @@ "bronze:Verify": { "NAME": "Forme sentinelle", "DESCRIPTIONS": [ - "La prochaine fois que vous piochez ou créez une Fonction, augmentez tous les nombres dessus de #b1.", - "Les #b", - " prochaines fois que vous piochez ou créez une Fonction, augmentez tous les nombres dessus de #b1." + "La prochaine fois que vous piochez ou créez une Fonction, augmentez tous les nombres dessus de #b1 [REMOVE_SPACE].", + "La prochaine fois que vous piochez ou créez une Fonction, augmentez tous les nombres dessus de #b", + " à part le coût." ] }, "bronze:FreeFunction": { "NAME": "Fonction gratuite", "DESCRIPTIONS": [ - "La prochaine Fonction que vous créez coûte #b0.", + "La prochaine Fonction que vous créez coûte #b0 [REMOVE_SPACE].", "Les #b", - " prochaines Fonctions que vous créez coûtent #b0." + " prochaines Fonctions que vous créez coûtent #b0 [REMOVE_SPACE]." ] }, "bronze:CleanCode": { @@ -119,15 +117,15 @@ "DESCRIPTIONS": [ "Retirez tous les effets des Erreurs de #yCompilation des cartes de la Séquence. Dure pour #b1 Fonction de plus.", "Retirez tous les effets des Erreurs de #yCompilation des cartes de la Séquence. Dure pour #b", - " Fonctions." + " Fonctions de plus." ] }, "bronze:CopyPaste": { "NAME": "Copier-coller", "DESCRIPTIONS": [ - "Votre prochaine Fonction est jouée 2 fois ce tour.", + "Votre prochaine Fonction est jouée deux fois ce tour.", "Vos #b", - " prochaines Fonctions sont jouées 2 fois ce tour." + " prochaines Fonctions sont jouées deux fois ce tour." ] }, "bronze:FullRelease": { @@ -139,9 +137,9 @@ "bronze:RemoveNextError": { "NAME": "Retrait des Erreurs", "DESCRIPTIONS": [ - "Retirez la prochaine #yErreur de #yCompilation #yEncodée.", + "Retirez la prochaine #yErreur de #yCompilation #yEncodée [REMOVE_SPACE].", "Retirez les #b", - "prochaines #yErreurs de #yCompilation #yEncodées." + "prochaines #yErreurs de #yCompilation #yEncodées [REMOVE_SPACE]." ] } -} \ No newline at end of file +} diff --git a/src/main/resources/bronzeResources/localization/fra/RelicStrings.json b/src/main/resources/bronzeResources/localization/fra/RelicStrings.json index 89fe1cf063..9b932ea6ab 100644 --- a/src/main/resources/bronzeResources/localization/fra/RelicStrings.json +++ b/src/main/resources/bronzeResources/localization/fra/RelicStrings.json @@ -10,21 +10,23 @@ "NAME": "Lunettes de protection", "FLAVOR": "Regardez attentivement.", "DESCRIPTIONS": [ - "Si vous finissez votre tour sans cartes dans la #ySéquence, gagnez #b4 d'#yArmure." + "Si vous finissez votre tour sans cartes #yEncodées, gagnez #b", + " d'#yArmure [REMOVE_SPACE]." ] }, "bronze:DecasWashers": { "NAME": "Rondelles de Deca", - "FLAVOR": "Ce n'est pas très clair sur le pourquoi Deca les collecte.", + "FLAVOR": "Ce n'est pas très clair sur pourquoi Deca les collecte.", "DESCRIPTIONS": [ - "Au début des #b3 premièrs tours, piochez une carte supplémentaire." + "Au début des #b", + " premiers tours, piochez une carte supplémentaire." ] }, "bronze:Timepiece": { - "NAME": "Fragment de temps", - "FLAVOR": "Vient de sa collection d'anciennes horloges.", + "NAME": "Apprêt Antigel", + "FLAVOR": "22 grammes de composé chimique Ar22, durée de conservation : 22 ans. À conserver de préférence dans un réfrigérateur en acajou.", "DESCRIPTIONS": [ - "Toutes les #yFonctions que vous #yCompilez gagnent #yRetenue." + "Toutes les Fonctions que vous créez gagnent #yRetenue [REMOVE_SPACE]." ] }, "bronze:Mallet": { @@ -52,7 +54,7 @@ "NAME": "Bobine de fil", "FLAVOR": "Emmêlée...", "DESCRIPTIONS": [ - "Ajoutez une copie de la première carte que vous jouez avec #yEncode chaque combat dans la Séquence." + "#yEncodez une copie de la première carte #yEncodable que vous jouez à chaque combat." ] }, "bronze:ElectromagneticCoil": { @@ -67,29 +69,31 @@ "FLAVOR": "Changelog: Expérience de l'utilisateur améliorée.", "DESCRIPTIONS": [ "Remplace ", - ".[] NL Les #b3 premières #yFonctions que vous créez chaque combat coûtent #b0 jusqu'à ce qu'elles soient jouées." + " [REMOVE_SPACE].[] NL Les #b", + " premières #yFonctions que vous créez chaque combat coûtent #b0 jusqu'à ce qu'elles soient jouées." ] }, "bronze:BottledCode": { - "NAME": "Code embouteillée", + "NAME": "Code embouteillé", "FLAVOR": "En fait, j'ai du code pour cette même chose...", "DESCRIPTIONS": [ - "Lorsque vous la ramassez, choisissez une carte avec #yEncode. Commencez chaque combat avec cette carte dans la #ySéquence.", + "Lorsque vous la ramassez, choisissez une carte avec #yEncode [REMOVE_SPACE]. Commencez chaque combat avec cette carte #yEncodée [REMOVE_SPACE].", "Choissisez une carte pour ", "Commencez chaque combat avec ", - " dans la #ySéquence." + " #yEncodé [REMOVE_SPACE].", + "La carte embouteillée a été #rretirée de votre deck, cette relique ne fonctionne plus désormais." ] }, "bronze:DonusWashers": { "NAME": "Rondelles de Donu", - "FLAVOR": "C'est plutôt clair sur le pourquoi Donu les collecte.", + "FLAVOR": "C'est plutôt clair sur pourquoi Donu les collecte.", "DESCRIPTIONS": [ "Au début de chaque combat, gagnez [E] [E] et ajoutez #b1 #Néant dans votre pioche." ] }, "bronze:BronzeIdol": { "NAME": "Idole de bronze", - "FLAVOR": "Un antivirus armé et antique - qui sait par qui il a été créé, et pourquoi?", + "FLAVOR": "Un antivirus armé et antique - qui sait par qui il a été créé, et pourquoi ?", "DESCRIPTIONS": [ "Les cartes #yStatut peuvent maintenant être jouées pour des effets utiles." ] @@ -98,7 +102,7 @@ "NAME": "Artéfact paradoxe", "FLAVOR": "Vous n'avez jamais vu un fou du codage comme celui-là auparavant.", "DESCRIPTIONS": [ - "Au début de chaque tour, ajoutez une carte aléatoire with #yEncode dans votre main et rendez-la #yEtherée." + "Au début de chaque tour, ajoutez une carte aléatoire avec #yEncode dans votre main et rendez-la #yEthérée [REMOVE_SPACE]." ] } } diff --git a/src/main/resources/bronzeResources/localization/fra/UIStrings.json b/src/main/resources/bronzeResources/localization/fra/UIStrings.json index cf3221560f..12ed48ec26 100644 --- a/src/main/resources/bronzeResources/localization/fra/UIStrings.json +++ b/src/main/resources/bronzeResources/localization/fra/UIStrings.json @@ -9,7 +9,8 @@ "bronze:UnplayableMod": { "TEXT": [ "Injouable. NL ", - "ERR_NULL_PTR" + "ERR_NULL_PTR", + "Conservé uniquement pour le pointeur Zéro." ] }, "bronze:EncodeAndShuffleMod": { @@ -19,7 +20,7 @@ }, "bronze:DoublePlayModifier": { "TEXT": [ - " NL Jouez ceci une seconde fois." + " NL Jouez ceci à nouveau." ] }, "bronze:MiscStrings": { @@ -30,8 +31,8 @@ "ERR: SEQUENCE_EMPTY", " - Ajoutez une copie de #yBoucle #yInfinie dans votre main avec #b", " de dégâts supplémentaires.", - " à Muter.", - " à Encoder.", + "Mutez.", + "Encodez.", "" ] }, @@ -52,4 +53,4 @@ "bronze:Compilation" ] } -} \ No newline at end of file +} diff --git a/src/main/resources/bronzeResources/localization/jpn/CardStrings.json b/src/main/resources/bronzeResources/localization/jpn/CardStrings.json index c044580599..02514918fa 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": [ "頑丈", "壁" @@ -300,7 +300,7 @@ }, "bronze:HyperBeam": { "NAME": "ハイパービーム", - "DESCRIPTION": "敵全体に !D! ダメージを与える。 NL 5枚の *空虚 が山札の一番上に置かれる。" + "DESCRIPTION": "保留 NL 敵全体に !D! ダメージを与える。 NL !M! 枚の *空虚 が山札の一番上に置かれる。" }, "bronze:InfiniteBeams": { "NAME": "無限のビーム", @@ -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,7 +334,7 @@ }, "bronze:ItsAFeature": { "NAME": "機能の一つ", - "DESCRIPTION": " 状態異常 カードを引くか 廃棄 するたびに、!M! ブロックを得る。" + "DESCRIPTION": "状態異常 カードを引いた時、または *廃棄 した時 !M! ブロックを得る。" }, "bronze:Library": { "NAME": "ライブラリ", @@ -346,12 +346,12 @@ }, "bronze:Mutator": { "NAME": "変異体", - "DESCRIPTION": "筋力 !M! を得る。 NL 状態異常 をこのカードのコピーに変身させる。", - "UPGRADE_DESCRIPTION": "保留 NL 筋力 !M! を得る。 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", "ポ" @@ -359,7 +359,7 @@ }, "bronze:OilSpill": { "NAME": "オイル漏れ", - "DESCRIPTION": " !D! ダメージと 毒 !M! を与える。 NL bronze:コンパイル *エラー NL bronze:インサート : *粘液", + "DESCRIPTION": "!D! ダメージと 毒 !M! を与える。 NL bronze:コンパイル *エラー NL bronze:インサート : *粘液", "EXTENDED_DESCRIPTION": [ "油塗れ", "漏れた" @@ -371,7 +371,7 @@ }, "bronze:Overheat": { "NAME": "熱暴走", - "DESCRIPTION": " !D! ダメージを与える。 NL 次の *コンパイルエラー を *エンコード から削除する。" + "DESCRIPTION": "!D! ダメージを与える。 NL 次の *コンパイルエラー を *エンコード から削除する。" }, "bronze:Overload": { "NAME": "コピーペースト", @@ -388,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": [ "回帰", "スト" @@ -397,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": [ "鍛冶屋", "レンチ" @@ -409,7 +409,7 @@ }, "bronze:Replicate": { "NAME": "レプリケート", - "DESCRIPTION": " !D! ダメージを与える。 \u202F *エンコード したらこれのコピーを捨て札に加える。", + "DESCRIPTION": "!D! ダメージを与える。 \u202F NL *エンコード したらこれのコピーを捨て札に加える。", "EXTENDED_DESCRIPTION": [ "複製", "コピー" @@ -427,7 +427,7 @@ }, "bronze:Safeguard": { "NAME": "セーフガード", - "DESCRIPTION": " !B! ブロックを得る。", + "DESCRIPTION": "!B! ブロックを得る。", "EXTENDED_DESCRIPTION": [ "セーフ", "ガード" @@ -435,7 +435,7 @@ }, "bronze:Separator": { "NAME": "セパレータ", - "DESCRIPTION": " !D! ダメージを与える。 \u202F bronze:エンコード の中央に使用された時、そのダメージを !M! 上昇させる。", + "DESCRIPTION": "!D! ダメージを与える。 \u202F bronze:エンコード の中央に使用された時、そのダメージを !M! 上昇させる。", "EXTENDED_DESCRIPTION": [ "分離", "チルド" @@ -443,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": [ "ブロック", "チェーン" @@ -452,7 +452,7 @@ }, "bronze:Shield": { "NAME": "粘着シールド", - "DESCRIPTION": " !B! ブロックを得る。 NL bronze:インサート : *粘液", + "DESCRIPTION": "保留 NL !B! ブロックを得る。 NL bronze:インサート : *粘液", "EXTENDED_DESCRIPTION": [ "粘着質", "シールド" @@ -460,11 +460,11 @@ }, "bronze:ShipIt": { "NAME": "出荷", - "DESCRIPTION": " !D! ダメージを与える。 NL 廃棄 した 状態異常 の数だけ繰り返す。", + "DESCRIPTION": "!D! ダメージを与える。 NL 廃棄札にある 状態異常 カードの枚数だけ繰り返す。", "EXTENDED_DESCRIPTION": [ - " !D! ダメージを与える。 NL 廃棄 した 状態異常 の数だけ繰り返す。 (", - ")." -] + "!D! ダメージを与える。 NL 廃棄札にある 状態異常 カードの枚数だけ繰り返す。 (", + " 枚)" + ] }, "bronze:SpaghettiCode": { "NAME": "スパゲティコード", @@ -473,7 +473,7 @@ }, "bronze:Strike": { "NAME": "ストライク", - "DESCRIPTION": " !D! ダメージを与える。", + "DESCRIPTION": "!D! ダメージを与える。", "EXTENDED_DESCRIPTION": [ "シンプル", "ストライク" @@ -516,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": "ピアッシングショット", @@ -529,7 +529,7 @@ }, "bronze:WildBeam": { "NAME": "浄化", - "DESCRIPTION": " !D! ダメージを与える。 NL 山札のランダムな 状態異常 カードを廃棄する。", + "DESCRIPTION": "!D! ダメージを与える。 NL 山札のランダムな 状態異常 カードを廃棄する。", "EXTENDED_DESCRIPTION": [ "野生", "ビーム" @@ -537,7 +537,7 @@ }, "bronze:WildStrike": { "NAME": "ワイルドストライク", - "DESCRIPTION": " !D! ダメージを与える。 NL bronze:インサート : *負傷" + "DESCRIPTION": "!D! ダメージを与える。 NL bronze:インサート : *負傷" }, @@ -551,7 +551,7 @@ }, "bronze:BranchBlock": { "NAME": "ブランチ:ブロック", - "DESCRIPTION": " !B! ブロックを得る。", + "DESCRIPTION": "!B! ブロックを得る。", "EXTENDED_DESCRIPTION": [ "フォーク", "ブランチ" @@ -559,7 +559,7 @@ }, "bronze:BranchHit": { "NAME": "ブランチ:アタック", - "DESCRIPTION": " !D! ダメージを与える。", + "DESCRIPTION": "!D! ダメージを与える。", "EXTENDED_DESCRIPTION": [ "フォーク", "ブランチ" @@ -572,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": [ "眩暈がする", "パルス" @@ -584,7 +584,7 @@ }, "bronze:DecaBeam": { "NAME": "プロトシールド", - "DESCRIPTION": " !B! ブロックを得る。 NL bronze:コンパイル - *プレートアーマー !M! 。 bronze:インサート : !bauto! *めまい", + "DESCRIPTION": "!B! ブロックを得る。 NL bronze:コンパイル - *プレートアーマー !M! 。 bronze:インサート : !bauto! *めまい", "EXTENDED_DESCRIPTION": [ "ジャギー", "バリア" @@ -597,7 +597,7 @@ }, "bronze:DonuBeam": { "NAME": "プロトビーム", - "DESCRIPTION": " !D! ダメージを !M! 回与える。 NL bronze:コンパイル - 筋力 !M! を得る。", + "DESCRIPTION": "!D! ダメージを !M! 回与える。 NL bronze:コンパイル - 筋力 !M! を得る。", "EXTENDED_DESCRIPTION": [ "スムーズな", "ブラスト" @@ -622,7 +622,7 @@ }, "bronze:MinorBeam": { "NAME": "マイナービーム", - "DESCRIPTION": " !D! ダメージを与える。", + "DESCRIPTION": "!D! ダメージを与える。", "EXTENDED_DESCRIPTION": [ "マイナー", "傷付" @@ -630,7 +630,7 @@ }, "bronze:Spike": { "NAME": "スパイク", - "DESCRIPTION": " !D! ダメージを与える。 NL bronze:コンパイル - トゲ !M! を得る。", + "DESCRIPTION": "!D! ダメージを与える。 NL bronze:コンパイル - トゲ !M! を得る。", "EXTENDED_DESCRIPTION": [ "刺々", "刺さる" @@ -638,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": "潤滑油", @@ -659,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 9869e7e8b9..acadb0d16a 100644 --- a/src/main/resources/bronzeResources/localization/jpn/PowerStrings.json +++ b/src/main/resources/bronzeResources/localization/jpn/PowerStrings.json @@ -18,8 +18,8 @@ "bronze:Feature": { "NAME": "機能の一つ", "DESCRIPTIONS": [ - " #y状態異常 をドローまた #y廃棄 した時、 #b ", - " #yブロック を得る。" + "#y状態異常 をドローまたは #y廃棄 した時、 #b", + " ブロックを得る。" ] }, "bronze:InfiniteBeams": { @@ -29,7 +29,7 @@ "ターン開始時 #yマイナービーム+ を #b1 枚手札に加える。", "ターン開始時 #yマイナービーム を #b", " 枚手札に加える。", - "ターン開始時 #yマイナービーム を #b", + "ターン開始時 #yマイナービーム+ を #b", " 枚手札に加える。" ] }, @@ -142,4 +142,4 @@ " 回 #yエンコード 時 #yコンパイルエラー を除去する" ] } -} +} \ No newline at end of file diff --git a/src/main/resources/bronzeResources/localization/jpn/RelicStrings.json b/src/main/resources/bronzeResources/localization/jpn/RelicStrings.json index 9013bd1fc7..5e65bcdf22 100644 --- a/src/main/resources/bronzeResources/localization/jpn/RelicStrings.json +++ b/src/main/resources/bronzeResources/localization/jpn/RelicStrings.json @@ -10,14 +10,16 @@ "NAME": "保護ゴーグル", "FLAVOR": "よく見て。", "DESCRIPTIONS": [ - "ターン終了時 #yエンコード済み のカードが無かったら #b4 #yブロック を得る。" + "ターン終了時 #yエンコード済み のカードが無かったら #b。", + " #yブロック を得る" ] }, "bronze:DecasWashers": { "NAME": "デカのワッシャー", "FLAVOR": "デカが何でこんな物を集めているのかは不明。", "DESCRIPTIONS": [ - "各戦闘開始から #b3 ターンの間、追加でカードを1枚引く。" + "各戦闘開始から #b", + " ターンの間、追加でカードを1枚引く。" ] }, "bronze:Timepiece": { @@ -67,7 +69,8 @@ "FLAVOR": "チェンジログ: ユーザーエクスペリエンスを改善しました。", "DESCRIPTIONS": [ " ", - " と置き換える。 NL 最初の #b3 回、ファンクションを作成した時 プレイするまでコストが #b0 になる。" + " と置き換える。 NL 最初の #b", + " 回、ファンクションを作成した時、プレイするまでコストが #b0 になる。" ] }, "bronze:BottledCode": { @@ -77,7 +80,8 @@ "入手時、 #yエンコード カードを1枚選択する。選択されたカードが #yエンコード済み の状態で戦闘を開始する。", "選択されたカード: ", "選択されたカード: ", - "。" + "。", + "このレリックの効果を受けたカードはデッキから #r削除 された。" ] }, "bronze:DonusWashers": { diff --git a/src/main/resources/bronzeResources/localization/kor/CardStrings.json b/src/main/resources/bronzeResources/localization/kor/CardStrings.json index a9392884db..e042d7b983 100644 --- a/src/main/resources/bronzeResources/localization/kor/CardStrings.json +++ b/src/main/resources/bronzeResources/localization/kor/CardStrings.json @@ -1,136 +1,152 @@ -{ - "bronze:DazingPulse": { - "NAME": "어지러운 펄스", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL 피해를 !D! 줍니다. NL bronze:컴파일 *오류 - *어지러움을 !M! 장 bronze:투입합니다.", +{ + "bronze:Allocate": { + "NAME": "배정", + "DESCRIPTION": "뽑을 카드 더미에 있는 상태이상 한 장당 [E] 를 얻습니다.", "EXTENDED_DESCRIPTION": [ - "어지러운", - "펄스" + " NL ( [E] 를 ", + " 얻습니다.)" ] }, - "bronze:Spike": { - "NAME": "가시", - "DESCRIPTION": "피해를 !D! 줍니다. NL bronze:컴파일 - 가시를 !M! 얻습니다.", + "bronze:AlphaBuild": { + "NAME": "얼리 액세스", + "DESCRIPTION": "피해를 !D! 줍니다. NL 무작위 상태이상을 bronze:투입합니다. NL bronze:컴파일 - *베타 *빌드를 bronze:투입합니다.", + "UPGRADE_DESCRIPTION": "선천성. NL \u00A0 피해를 !D! 줍니다. NL 무작위 상태이상을 bronze:투입합니다. NL bronze:컴파일 - *베타 *빌드를 bronze:투입합니다.", "EXTENDED_DESCRIPTION": [ - "뾰족한", - "가시" + "조잡한", + "알파" ] }, - "bronze:Explode": { - "NAME": "폭발", - "DESCRIPTION": "적 전체에게 hexamod:영혼화상을 !M! 부여합니다. NL bronze:컴파일 *오류 - *화상을 !bauto! 장 bronze:투입합니다.", - "EXTENDED_DESCRIPTION": [ - "불안정한", - "폭탄" - ] + "bronze:Assembly": { + "NAME": "어셈블리", + "DESCRIPTION": "예지 !M!. NL *예지로 버린 모든 *부호화 카드를 선택한 순서대로 bronze:부호화합니다. NL 소멸." }, - "bronze:DonuBeam": { - "NAME": "시제품-광선", - "DESCRIPTION": "피해를 !D! 만큼 !M! 번 줍니다. NL bronze:컴파일 - 힘을 !M! 얻습니다.", + "bronze:Backtrace": { + "NAME": "역추적", + "DESCRIPTION": "선천성. NL \u00A0 피해를 !D! 줍니다. NL bronze:컴파일 *오류 - 함수 카드에 소멸 효과가 추가됩니다.", "EXTENDED_DESCRIPTION": [ - "부드러운", - "폭발" + "무단", + "추적" ] }, - "bronze:DecaBeam": { - "NAME": "시제품-방패", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL bronze:컴파일 - 판금 갑옷을 !M! 얻고 *어지러움을 !bauto! 장 bronze:투입합니다.", + "bronze:BetaBuild": { + "NAME": "베타 빌드", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 무작위 상태이상을 bronze:투입합니다. NL bronze:컴파일 - *정식 *출시를 bronze:투입합니다.", "EXTENDED_DESCRIPTION": [ - "들쭉날쭉한", - "보호막" + "이른", + "베타" ] }, - "bronze:Strike": { - "NAME": "타격", - "DESCRIPTION": "피해를 !D! 줍니다.", + "bronze:BitShift": { + "NAME": "비트 이동", + "DESCRIPTION": "순차열에 있는 카드를 1장 가져옵니다. NL 그 카드는 보존됩니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "보존. NL 순차열에 있는 카드를 1장 선택해 가져옵니다. NL 그 카드는 보존됩니다. NL 소멸." + }, + "bronze:Boost": { + "NAME": "가속", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL bronze:컴파일 - 힘을 !M! 얻습니다.", "EXTENDED_DESCRIPTION": [ - "단순", - "타격" + "가속된", + "가속" ] }, - "bronze:Defend": { - "NAME": "수비", - "DESCRIPTION": "방어도를 !B! 얻습니다.", + "bronze:Branch": { + "NAME": "분기", + "DESCRIPTION": "피해를 !D! 줍니다 또는 방어도를 !B! 얻습니다. NL 선택하지 않은 효과를 bronze:부호화합니다. NL 소멸.", "EXTENDED_DESCRIPTION": [ - "기본", - "수비" + "분기: 공격", + "피해를 !D! 줍니다.", + "분기: 방어도", + "방어도를 !B! 얻습니다." ] }, - "bronze:FunctionCard": { - "NAME": "()", - "DESCRIPTION": "", + "bronze:Break": { + "NAME": "일시 정지", + "DESCRIPTION": "피해를 !D! 줍니다. NL bronze:컴파일 *오류 - *어지러움, *부상, *점액투성이, *화상, *공허를 얻습니다.", "EXTENDED_DESCRIPTION": [ - "함수()", - "완성()", - "()" + "고장난", + "주먹" ] }, - "bronze:Goto": { - "NAME": "Goto", - "DESCRIPTION": "카드를 !M! 장 뽑습니다. NL bronze:컴파일 - 다음 턴에 카드를 !M! 장 뽑습니다.", - "UPGRADE_DESCRIPTION": "카드를 !M! 장 뽑습니다. NL bronze:컴파일 - 다음 턴에 카드를 !M! 장 뽑습니다.", + "bronze:BronzeArmor": { + "NAME": "청동 갑옷", + "DESCRIPTION": "인공물을 !bauto! 얻습니다. NL bronze:컴파일 *오류 - 적 전체가 방어도를 !M! 얻습니다.", "EXTENDED_DESCRIPTION": [ - "작동중인", - "스프린트" + "청동", + "갑옷" ] }, - "bronze:Replicate": { - "NAME": "복제", - "DESCRIPTION": "피해를 !D! 줍니다. \u202F *부호화되면 이 카드를 한 장 복사해 버린 카드 더미에 섞어 넣습니다.", + "bronze:BronzeOrb": { + "NAME": "청동 구체", + "DESCRIPTION": "선천성. NL 피해를 !D! 줍니다. NL 뽑을 카드 더미에 있는 무작위 bronze:부호화 카드를 1장 *부호화합니다. NL 소멸." + }, + "bronze:BugBarrage": { + "NAME": "버그 방벽", + "DESCRIPTION": "*부상을 !M! 장 얻습니다. NL 손에 있는 상태이상을 모두 bronze:순환하고 *순환된 카드 한 장당 피해를 !D! 줍니다.", + "UPGRADE_DESCRIPTION": "*부상을 !M! 장 얻습니다. NL 손에 있는 상태이상을 모두 bronze:순환하고 *순환된 카드 한 장당 피해를 !D! 줍니다.", "EXTENDED_DESCRIPTION": [ - "복사한", - "복사" + " NL (피해를 ", + " 번 줍니다.)" ] }, - "bronze:Branch": { - "NAME": "분기", - "DESCRIPTION": "피해를 !D! 줍니다 또는 방어도를 !B! 얻습니다. NL 선택하지 않은 효과를 bronze:부호화합니다. NL 소멸.", + "bronze:BuggyMess": { + "NAME": "버그 덩어리", + "DESCRIPTION": "*어지러움을 bronze:투입합니다. NL [E] 를 !M! 얻습니다.", "EXTENDED_DESCRIPTION": [ - "분기: 공격", - "피해를 !D! 줍니다.", - "분기: 방어도", - "방어도를 !B! 얻습니다." + "버그", + "투성이" ] }, - "bronze:DelayedSlice": { - "NAME": "산업용 기계", - "DESCRIPTION": "피해를 !D! 줍니다. NL 다음 턴에 카드를 !M! 장 더 뽑습니다.", - "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL 다음 턴에 카드를 !M! 장 더 뽑습니다.", + "bronze:BurnOut": { + "NAME": "불태우기", + "DESCRIPTION": "bronze:소유한 상태이상 한 장당 무작위 적들에게 피해를 !D! 주고 그 카드를 모두 소멸시킵니다. NL 소멸.", "EXTENDED_DESCRIPTION": [ - "지연된", - "박편" + "bronze:소유한 상태이상 한 장당 무작위 적들에게 피해를 !D! 주고 그 카드를 모두 소멸시킵니다. NL 소멸. (피해를 ", + " 번 줍니다.)" ] }, - "bronze:WhirlingStrike": { - "NAME": "관통 사격", - "DESCRIPTION": "적 전체에게 피해를 !D! 줍니다.", + "bronze:ChildClass": { + "NAME": "호출", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL bronze:컴파일 - 순차열에 있는 전체 카드 비용의 합만큼 [E] 를 얻습니다.", "EXTENDED_DESCRIPTION": [ - "관통", - "사격" + "호출", + "에너지" ] }, - "bronze:Iterate": { - "NAME": "처리 반복", - "DESCRIPTION": "피해를 !D! 만큼 !M! 번 줍니다.", + "bronze:ChosenStrike": { + "NAME": "광신자 타격", + "DESCRIPTION": "피해를 !D! 줍니다. NL bronze:컴파일 - 영구적으로 이 카드의 피해량이 !M! 증가합니다.", "EXTENDED_DESCRIPTION": [ - "분석된", - "재귀" + "광신자", + "까악" ] }, - "bronze:Separator": { - "NAME": "분리기", - "DESCRIPTION": "피해를 !D! 줍니다. \u202F 처음이나 마지막으로 bronze:부호화되지 않는다면 이 카드의 피해량이 !M! 증가합니다.", + "bronze:ClassDefault": { + "NAME": "기본 클래스", + "DESCRIPTION": "다음 !M! 번까지 처음 순차열이 공백일 때 현재 처음 순차열 카드를 bronze:부호화합니다." + }, + "bronze:CleanCode": { + "NAME": "깔끔한 코드", + "DESCRIPTION": "다음으로 bronze:부호화하는 카드 !M! 장의 *컴파일 *오류 효과를 제거합니다.", + "UPGRADE_DESCRIPTION": "선천성. NL 다음으로 bronze:부호화하는 카드 !M! 장의 *컴파일 *오류 효과를 제거합니다." + }, + "bronze:CloningBeam": { + "NAME": "충돌 병합", + "DESCRIPTION": "피해를 !D! 줍니다. NL 다음으로 bronze:부호화하는 카드를 복사해 bronze:부호화합니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL 다음으로 bronze:부호화하는 카드를 복사해 bronze:부호화합니다." + }, + "bronze:Constructor": { + "NAME": "생성자", + "DESCRIPTION": "방어도를 !B! 얻습니다. \u202F 이 카드가 순차열의 처음으로 bronze:부호화되면 이 카드의 방어도를 !M! 증가시킵니다.", "EXTENDED_DESCRIPTION": [ - "하위", - "노드" + "설계", + "슬픔", + "웅장함" ] }, - "bronze:WildStrike": { - "NAME": "광역 타격", - "DESCRIPTION": "피해를 !D! 줍니다. NL *상처를 bronze:투입합니다." - }, - "bronze:Overheat": { - "NAME": "과열", - "DESCRIPTION": "피해를 !D! 줍니다. NL 다음으로 *부호화하는 카드의 *컴파일 *오류 효과를 제거합니다." + "bronze:CopyPaste": { + "NAME": "복사 붙여넣기", + "DESCRIPTION": "이번 턴에 다음으로 사용하는 함수 카드가 2번 사용됩니다.", + "UPGRADE_DESCRIPTION": "보존. NL 이번 턴에 다음으로 사용하는 함수 카드가 2번 사용됩니다." }, "bronze:CutThrough": { "NAME": "방향 꺾기", @@ -140,15 +156,6 @@ "꺾기" ] }, - "bronze:RecursiveStrike": { - "NAME": "반복 타격", - "DESCRIPTION": "피해를 !D! 만큼 !M! 번 줍니다. NL *타격 카드를 !M! 장 복사해 bronze:부호화합니다.", - "UPGRADE_DESCRIPTION": "피해를 !D! 만큼 !M! 번 줍니다. NL *타격+ 카드를 !M! 장 복사해 bronze:부호화합니다.", - "EXTENDED_DESCRIPTION": [ - "반복되는", - "재발" - ] - }, "bronze:DarkDash": { "NAME": "어둠의 돌진", "DESCRIPTION": "방어도를 !B! 얻습니다. NL 피해를 !D! 줍니다. NL bronze:컴파일 *오류 - *공허를 bronze:투입합니다.", @@ -157,28 +164,12 @@ "돌진" ] }, - "bronze:OilSpill": { - "NAME": "기름 유출", - "DESCRIPTION": "피해를 !D! 주고 중독을 !M! 부여합니다. NL bronze:컴파일 *오류 - *점액투성이를 bronze:투입합니다.", - "EXTENDED_DESCRIPTION": [ - "기름진", - "유출" - ] - }, - "bronze:WildBeam": { - "NAME": "세척", - "DESCRIPTION": "피해를 !D! 줍니다. NL 뽑을 카드 더미에서 무작위 상태이상을 1장 소멸시킵니다.", - "EXTENDED_DESCRIPTION": [ - "광역", - "광선" - ] - }, - "bronze:Frontload": { - "NAME": "초기 책정", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL bronze:컴파일 - 함수에 보존 효과가 추가됩니다.", + "bronze:Defend": { + "NAME": "수비", + "DESCRIPTION": "방어도를 !B! 얻습니다.", "EXTENDED_DESCRIPTION": [ - "견고한", - "벽" + "기본", + "수비" ] }, "bronze:DelayedGuard": { @@ -186,15 +177,16 @@ "DESCRIPTION": "다음 턴에 방어도를 !B! 얻습니다.", "EXTENDED_DESCRIPTION": [ "지연된", - "보호" + "수호" ] }, - "bronze:Shield": { - "NAME": "끈적이 방패", - "DESCRIPTION": "보존. NL 방어도를 !B! 얻습니다. NL *점액투성이를 1장 bronze:투입합니다.", + "bronze:DelayedSlice": { + "NAME": "산업용 기계", + "DESCRIPTION": "피해를 !D! 줍니다. NL 다음 턴에 카드를 !M! 장 더 뽑습니다.", + "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL 다음 턴에 카드를 !M! 장 더 뽑습니다.", "EXTENDED_DESCRIPTION": [ - "끈적이", - "방패" + "지연된", + "박편" ] }, "bronze:Deprecate": { @@ -205,86 +197,59 @@ "비난" ] }, - "bronze:Invalidate": { - "NAME": "무효화", - "DESCRIPTION": "취약을 !M! 부여합니다.", + "bronze:DigitalCarnage": { + "NAME": "디지털 대학살", + "DESCRIPTION": "피해를 !D! 줍니다. NL bronze:컴파일 *오류 - 함수 카드에 휘발성 효과가 추가됩니다.", "EXTENDED_DESCRIPTION": [ - "무효", - "오류" + "디지털", + "대학살" ] }, - "bronze:Shell": { - "NAME": "블록체인", - "DESCRIPTION": "bronze:흐릿함을 !M! 얻습니다.", - "UPGRADE_DESCRIPTION": "bronze:흐릿함을 !M! 얻습니다. NL bronze:컴파일 - bronze:흐릿함을 !M! 얻습니다.", + "bronze:FindAndReplace": { + "NAME": "검색 & 교체", + "DESCRIPTION": "뽑을 또는 버린 카드 더미에서 카드를 1장 가져옵니다. NL *어지러움을 선택한 더미에 섞어 넣습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "뽑을 또는 버린 카드 더미에서 카드를 1장 가져옵니다. NL 소멸.", "EXTENDED_DESCRIPTION": [ - "블록", - "체인" + "선택하십시오." ] }, - "bronze:BitShift": { - "NAME": "비트 이동", - "DESCRIPTION": "순차열에 있는 카드를 1장 선택해 가져옵니다. 그 카드에 보존 효과가 추가됩니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "보존. NL 순차열에 있는 카드를 1장 선택해 가져옵니다. 그 카드에 보존 효과가 추가됩니다. NL 소멸." + "bronze:FineTuning": { + "NAME": "미세 조정", + "DESCRIPTION": "순차열에 있는 모든 카드의 비용을 제외한 수치를 !M! 증가시킵니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "보존. NL 순차열에 있는 모든 카드의 비용을 제외한 수치를 !M! 증가시킵니다. NL 소멸." }, - "bronze:ByteShift": { - "NAME": "바이트 이동", - "DESCRIPTION": "순차열에 있는 모든 카드를 가져옵니다. NL 그 카드들에 보존 효과가 추가됩니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "보존. NL 순차열에 있는 모든 카드를 가져옵니다. NL 그 카드들에 보존 효과가 추가됩니다. NL 소멸." + "bronze:Flail": { + "NAME": "동요", + "DESCRIPTION": "적 전체에게 피해를 !D! 만큼 !bauto! 번 줍니다. NL 인공물을 !M! 얻습니다. NL 소멸.", + "EXTENDED_DESCRIPTION": [ + "휘젓는", + "동요" + ] }, - "bronze:Batch": { - "NAME": "일괄", - "DESCRIPTION": "함수 카드를 즉시 생성합니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "함수 카드를 즉시 생성합니다." - }, - "bronze:Constructor": { - "NAME": "생성자", - "DESCRIPTION": "방어도를 !B! 얻습니다. \u202F 이 카드가 처음으로 *부호화되면 이 카드의 방어도를 !M! 증가시킵니다.", - "EXTENDED_DESCRIPTION": [ - "설계", - "슬픔", - "웅장함" - ] - }, - "bronze:Terminator": { - "NAME": "종료 프로그램", - "DESCRIPTION": "bronze:컴파일 - 이 카드가 순차열의 마지막 카드라면 함수 카드에 '이 카드를 다시 사용합니다.' 효과를 추가합니다.", - "EXTENDED_DESCRIPTION": [ - "슬픈", - "종료" - ] - }, - "bronze:Overload": { - "NAME": "복사 붙여넣기", - "DESCRIPTION": "순차열에 있는 모든 카드를 복사해 사용합니다. 복사한 카드는 사용 후 소멸 되고 bronze:부호화되지 않습니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "순차열에 있는 모든 카드를 복사해 사용합니다. 복사한 카드는 사용 후 소멸 되고 bronze:부호화되지 않습니다." + "bronze:FollowUp": { + "NAME": "뒤따르기", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 피해를 !D! 줍니다. NL 마지막으로 사용했던 카드가 함수라면 이 카드를 다시 사용합니다." }, - "bronze:GetLatest": { - "NAME": "최신 정보", - "DESCRIPTION": "무작위 bronze:부호화 카드를 1장 얻습니다. NL 사용하기 전까지 그 카드의 비용은 0이 됩니다. NL 소멸." + "bronze:ForceShield": { + "NAME": "강제 방패", + "DESCRIPTION": "이번 전투에서 생성된 함수 카드의 수만큼 이 카드의 비용이 [E] 감소합니다. NL 방어도를 !B! 얻습니다." }, - "bronze:Flail": { - "NAME": "동요", - "DESCRIPTION": "적 전체에게 피해를 !D! 만큼 !bauto! 번 줍니다. 인공물을 !M! 얻습니다. NL 소멸.", - "EXTENDED_DESCRIPTION": [ - "휘젓는", - "동요" - ] + "bronze:ForLoop": { + "NAME": "For 루프", + "DESCRIPTION": "다음으로 bronze:부호화하는 카드를 추가로 X장 bronze:부호화합니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "다음으로 bronze:부호화하는 카드를 추가로 X+1장 bronze:부호화합니다. NL 소멸." }, - "bronze:DigitalCarnage": { - "NAME": "디지털 대학살", - "DESCRIPTION": "피해를 !D! 줍니다. NL bronze:컴파일 *오류 - 함수 카드에 휘발성 효과가 추가됩니다.", - "EXTENDED_DESCRIPTION": [ - "디지털", - "대학살" - ] + "bronze:Format": { + "NAME": "형식", + "DESCRIPTION": "*단편을 X장 bronze:부호화합니다. NL [E] 를 얻습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "*단편을 X+1장 bronze:부호화합니다. NL [E] 를 얻습니다. NL 소멸." }, - "bronze:NullPointer": { - "NAME": "공백 포인터", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL 피해를 !D! 줍니다. NL bronze:컴파일 *오류 - 함수 카드에 사용불가 효과가 추가됩니다.", + "bronze:FormatEncoded": { + "NAME": "단편", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 피해를 !D! 줍니다.", "EXTENDED_DESCRIPTION": [ - "공백", - "포인터" + "깨끗한", + "단편" ] }, "bronze:Fortify": { @@ -295,104 +260,145 @@ "요새" ] }, - "bronze:BronzeOrb": { - "NAME": "청동 구체", - "DESCRIPTION": "선천성. NL 피해를 !D! 줍니다. NL 뽑을 카드 더미에 있는 무작위 bronze:부호화 카드를 1장 bronze:부호화합니다. NL 소멸." + "bronze:Frontload": { + "NAME": "초기 책정", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL bronze:컴파일 - 함수에 보존 효과가 추가됩니다.", + "EXTENDED_DESCRIPTION": [ + "견고한", + "벽" + ] }, - "bronze:Virus": { - "NAME": "바이러스", - "DESCRIPTION": "피해를 !D! 줍니다. NL 카드를 전부 버립니다. NL 버린 카드 한 장당 *소형 *광선을 얻습니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL 카드를 전부 버립니다. NL 버린 카드 한 장당 *소형 *광선+을 얻습니다. NL 소멸." + "bronze:FullRelease": { + "NAME": "정식 출시", + "DESCRIPTION": "bronze:컴파일 - 함수 카드가 '내 턴 시작 시' 효과가 추가된 파워 카드가 됩니다.", + "EXTENDED_DESCRIPTION": [ + "정식", + "출시", + "1.0" + ] }, - "bronze:Backtrace": { - "NAME": "역추적", - "DESCRIPTION": "선천성. NL \u00A0 피해를 !D! 줍니다. NL bronze:컴파일 *오류 - 함수 카드에 소멸 효과가 추가됩니다.", + "bronze:GetLatest": { + "NAME": "최신 정보", + "DESCRIPTION": "무작위 bronze:부호화 카드를 1장 얻습니다. NL 사용하기 전까지 그 카드의 비용은 0이 됩니다. NL 소멸." + }, + "bronze:Goto": { + "NAME": "Goto", + "DESCRIPTION": "카드를 !M! 장 뽑습니다. NL bronze:컴파일 - 다음 턴에 카드를 !M! 장 뽑습니다.", + "UPGRADE_DESCRIPTION": "카드를 !M! 장 뽑습니다. NL bronze:컴파일 - 다음 턴에 카드를 !M! 장 뽑습니다.", "EXTENDED_DESCRIPTION": [ - "무단", - "추적" + "작동중인", + "스프린트" ] }, - "bronze:CloningBeam": { - "NAME": "충돌 병합", - "DESCRIPTION": "피해를 !D! 줍니다. NL 다음으로 bronze:부호화하는 카드를 복사해 bronze:부호화합니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL 다음으로 bronze:부호화하는 카드를 복사해 bronze:부호화합니다." + "bronze:Hardcode": { + "NAME": "하드코드", + "DESCRIPTION": "다음으로 생성하는 함수 카드를 덱에 추가합니다. NL 함수 카드에 사용된 카드들과 이 카드를 영구적으로 덱에서 제거합니다." }, - "bronze:FollowUp": { - "NAME": "뒤따르기", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL 피해를 !D! 줍니다. NL 마지막으로 사용했던 카드가 함수라면 이 카드를 다시 사용합니다." + "bronze:HardenedForm": { + "NAME": "구체 소환", + "DESCRIPTION": "함수 카드를 생성하거나 사용할 때마다 방어도를 !M! 얻고 무작위 적에게 피해를 !M! 줍니다." }, - "bronze:ForceShield": { - "NAME": "강제 방패", - "DESCRIPTION": "이번 전투에서 생성된 함수 카드의 수만큼 이 카드의 비용이 [E] 감소합니다. NL 방어도를 !B! 얻습니다." + "bronze:HyperBeam": { + "NAME": "파괴 광선", + "DESCRIPTION": "보존. NL 적 전체에게 피해를 !D! 줍니다. NL *공허를 !M! 장 뽑을 카드 더미 맨 위에 놓습니다." }, - "bronze:ForLoop": { - "NAME": "For 루프", - "DESCRIPTION": "다음으로 bronze:부호화하는 카드를 추가로 X장 bronze:부호화합니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "다음으로 bronze:부호화하는 카드를 추가로 X+1장 bronze:부호화합니다. NL 소멸." + "bronze:InfiniteBeams": { + "NAME": "무한 광선", + "DESCRIPTION": "내 턴 시작 시 *소형 *광선을 얻습니다.", + "UPGRADE_DESCRIPTION": "내 턴 시작 시 *소형 *광선+을 얻습니다." }, - "bronze:ChosenStrike": { - "NAME": "광신자 타격", - "DESCRIPTION": "피해를 !D! 줍니다. NL bronze:컴파일 - 영구적으로 이 카드의 피해량을 !M! 증가시킵니다.", + "bronze:InfiniteLoop": { + "NAME": "무한 반복", + "DESCRIPTION": "피해를 !D! 줍니다. NL bronze:컴파일 - 이 카드를 복사해 얻고 그 카드의 피해량을 !M! 증가시킵니다.", + "UPGRADE_DESCRIPTION": "보존. NL 피해를 !D! 줍니다. NL bronze:컴파일 - 이 카드를 복사해 얻고 그 카드의 피해량을 !M! 증가시킵니다.", "EXTENDED_DESCRIPTION": [ - "광신자", - "까악" + "무한", + "반복" ] }, - "bronze:ClassDefault": { - "NAME": "기본 클래스", - "DESCRIPTION": "다음 !M! 번까지 처음 순차열이 공백일 때 현재 처음 순차열 카드를 bronze:부호화합니다." - }, - "bronze:ItsAFeature": { - "NAME": "특징", - "DESCRIPTION": "상태이상을 뽑거나 소멸시킬 때마다 방어도를 !M! 얻습니다." + "bronze:Invalidate": { + "NAME": "무효화", + "DESCRIPTION": "취약을 !M! 부여합니다.", + "EXTENDED_DESCRIPTION": [ + "무효", + "오류" + ] }, - "bronze:MinorBeam": { - "NAME": "소형 광선", - "DESCRIPTION": "피해를 !D! 줍니다.", + "bronze:Iterate": { + "NAME": "처리 반복", + "DESCRIPTION": "피해를 !D! 만큼 !M! 번 줍니다.", "EXTENDED_DESCRIPTION": [ - "소형", - "흠집" + "분석된", + "재귀" ] }, - "bronze:InfiniteBeams": { - "NAME": "무한 광선", - "DESCRIPTION": "내 턴 시작 시 *소형 *광선을 얻습니다.", - "UPGRADE_DESCRIPTION": "내 턴 시작 시 *소형 *광선+을 얻습니다." + "bronze:ItsAFeature": { + "NAME": "특징", + "DESCRIPTION": "상태이상을 뽑거나 소멸될 때마다 방어도를 !M! 얻습니다." }, - "bronze:Optimize": { - "NAME": "최적화", - "DESCRIPTION": "다음으로 bronze:부호화되는 강화 가능한 카드를 !M! 장 강화합니다." + "bronze:Library": { + "NAME": "도서관", + "DESCRIPTION": "내 턴 시작 시 무작위 bronze:부호화 카드를 1장 얻습니다. NL 사용하기 전까지 그 카드의 비용은 0이 됩니다." }, "bronze:MaxOutput": { "NAME": "최대 출력", - "DESCRIPTION": "카드를 !M! 장 뽑습니다. NL 내 턴 시작 시 추가로 카드를 1장 뽑고 *어지러움을 1장 bronze:투입합니다." + "DESCRIPTION": "카드를 !M! 장 뽑습니다. NL 내 턴 시작 시 카드를 1장 더 뽑고 *어지러움을 bronze:투입합니다." }, "bronze:Mutator": { "NAME": "돌연변이", "DESCRIPTION": "힘을 !M! 얻습니다. NL 손에 있는 상태이상을 이 카드로 sneckomod:변화시킵니다.", "UPGRADE_DESCRIPTION": "보존. NL 힘을 !M! 얻습니다. NL 손에 있는 상태이상을 이 카드로 sneckomod:변화시킵니다." }, - "bronze:Allocate": { - "NAME": "배정", - "DESCRIPTION": "뽑을 카드 더미에 있는 상태이상 한 장당 [E] 를 얻습니다.", + "bronze:NullPointer": { + "NAME": "공백 포인터", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 피해를 !D! 줍니다. NL bronze:컴파일 *오류 - 함수 카드에 사용불가 효과가 추가됩니다.", "EXTENDED_DESCRIPTION": [ - " NL ( [E] 를 ", - " 얻습니다.)" + "공백", + "포인터" ] }, - "bronze:Decompile": { - "NAME": "디컴파일", - "DESCRIPTION": "순차열에 있는 모든 카드를 소멸시킵니다. [E] 를 얻고 소멸된 카드 한 장당 카드를 1장 뽑습니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "보존. NL 순차열에 있는 모든 카드를 소멸시킵니다. [E] 를 얻고 소멸된 카드 한 장당 카드를 1장 뽑습니다. NL 소멸." + "bronze:OilSpill": { + "NAME": "기름 유출", + "DESCRIPTION": "피해를 !D! 주고 중독을 !M! 부여합니다. NL bronze:컴파일 *오류 - *점액투성이를 bronze:투입합니다.", + "EXTENDED_DESCRIPTION": [ + "기름진", + "유출" + ] }, - "bronze:ChildClass": { - "NAME": "호출", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL bronze:컴파일 - 순차열에 있는 전체 카드 비용의 합만큼 [E] 를 얻습니다.", + "bronze:Optimize": { + "NAME": "최적화", + "DESCRIPTION": "다음으로 bronze:부호화되는 강화 가능한 카드를 !M! 장 강화합니다." + }, + "bronze:Overheat": { + "NAME": "과열", + "DESCRIPTION": "피해를 !D! 줍니다. NL 다음으로 bronze:부호화하는 카드의 *컴파일 *오류 효과를 제거합니다." + }, + "bronze:Overload": { + "NAME": "복사 붙여넣기", + "DESCRIPTION": "순차열에 있는 모든 카드를 복사해 사용합니다. 복사한 카드는 사용 후 소멸 되고 *부호화되지 않습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "순차열에 있는 모든 카드를 복사해 사용합니다. 복사한 카드는 사용 후 소멸 되고 *부호화되지 않습니다." + }, + "bronze:Philosophize": { + "NAME": "철학", + "DESCRIPTION": "힘을 !bauto! 얻습니다. NL bronze:컴파일 *오류 - 적 전체가 힘을 !M! 얻습니다.", "EXTENDED_DESCRIPTION": [ - "호출", - "에너지" + "똑똑한", + "안건" + ] + }, + "bronze:RecursiveStrike": { + "NAME": "반복 타격", + "DESCRIPTION": "피해를 !D! 만큼 !M! 번 줍니다. NL *타격을 !M! 장 복사해 bronze:부호화합니다.", + "UPGRADE_DESCRIPTION": "피해를 !D! 만큼 !M! 번 줍니다. NL *타격+을 !M! 장 복사해 bronze:부호화합니다.", + "EXTENDED_DESCRIPTION": [ + "반복되는", + "재발" ] }, + "bronze:Refactor": { + "NAME": "리팩터", + "DESCRIPTION": "예지 !M!. NL *예지로 버린 상태이상을 모두 소멸시킵니다. NL 소멸시킨 상태이상 한 장당 방어도를 !B! 얻습니다." + }, "bronze:Repair": { "NAME": "수리", "DESCRIPTION": "방어도를 !B! 얻습니다. NL bronze:컴파일 - 체력을 !M! 회복합니다.", @@ -401,14 +407,24 @@ "스패너" ] }, - "bronze:Boost": { - "NAME": "가속", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL bronze:컴파일 - 힘을 !M! 얻습니다.", + "bronze:Replicate": { + "NAME": "복제", + "DESCRIPTION": "피해를 !D! 줍니다. \u202F NL *부호화되면 이 카드를 한 장 복사해 버린 카드 더미에 섞어 넣습니다.", "EXTENDED_DESCRIPTION": [ - "가속된", - "가속" + "복사한", + "복사" ] }, + "bronze:Repulsor": { + "NAME": "격퇴", + "DESCRIPTION": "매 턴 처음으로 상태이상 또는 저주를 뽑았다면 그 카드를 소멸시키고 카드를 1장 뽑습니다.", + "UPGRADE_DESCRIPTION": "선천성. NL 매 턴 처음으로 상태이상 또는 저주를 뽑았다면 그 카드를 소멸시키고 카드를 1장 뽑습니다." + }, + "bronze:Return": { + "NAME": "복귀", + "DESCRIPTION": "버린 카드 더미에서 카드를 1장 선택해 뽑을 카드 더미 맨 위에 놓습니다. NL 다음 턴에 [E] 를 얻습니다.", + "UPGRADE_DESCRIPTION": "버린 카드 더미에서 카드를 1장 선택해 뽑을 카드 더미 맨 위에 놓습니다. NL 다음 턴에 [E] [E] 를 얻습니다." + }, "bronze:Safeguard": { "NAME": "안전보호", "DESCRIPTION": "방어도를 !B! 얻습니다.", @@ -417,46 +433,29 @@ "수호" ] }, - "bronze:BronzeArmor": { - "NAME": "청동 갑옷", - "DESCRIPTION": "인공물을 !bauto! 얻습니다. NL bronze:컴파일 *오류 - 적 전체가 방어도를 !M! 얻습니다.", + "bronze:Separator": { + "NAME": "분리기", + "DESCRIPTION": "피해를 !D! 줍니다. \u202F 처음이나 마지막으로 bronze:부호화되지 않는다면 이 카드의 피해량이 !M! 증가합니다.", "EXTENDED_DESCRIPTION": [ - "청동", - "갑옷" + "하위", + "노드" ] }, - "bronze:Philosophize": { - "NAME": "철학", - "DESCRIPTION": "힘을 !bauto! 얻습니다. NL bronze:컴파일 *오류 - 적 전체가 힘을 !M! 얻습니다.", + "bronze:Shell": { + "NAME": "블록체인", + "DESCRIPTION": "bronze:흐릿함을 !M! 얻습니다.", + "UPGRADE_DESCRIPTION": "bronze:흐릿함을 !M! 얻습니다. NL bronze:컴파일 - bronze:흐릿함을 !M! 얻습니다.", "EXTENDED_DESCRIPTION": [ - "똑똑한", - "안건" + "블록", + "체인" ] }, - "bronze:Return": { - "NAME": "복귀", - "DESCRIPTION": "버린 카드 더미에서 카드를 1장 선택해 뽑을 카드 더미 맨 위에 놓습니다. NL 다음 턴에 [E] 를 얻습니다.", - "UPGRADE_DESCRIPTION": "버린 카드 더미에서 카드를 1장 선택해 뽑을 카드 더미 맨 위에 놓습니다. NL 다음 턴에 [E] [E] 를 얻습니다." - }, - "bronze:Format": { - "NAME": "형식", - "DESCRIPTION": "*단편을 X장 bronze:부호화합니다. NL [E] 를 얻습니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "*단편을 X+1장 bronze:부호화합니다. NL [E] 를 얻습니다. NL 소멸." - }, - "bronze:FormatEncoded": { - "NAME": "단편", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL 피해를 !D! 줍니다.", - "EXTENDED_DESCRIPTION": [ - "깨끗한", - "단편" - ] - }, - "bronze:BurnOut": { - "NAME": "불태우기", - "DESCRIPTION": "bronze:소유한 상태이상 한 장당 무작위 적들에게 피해를 !D! 주고 그 카드를 모두 소멸시킵니다. NL 소멸.", + "bronze:Shield": { + "NAME": "끈적이 방패", + "DESCRIPTION": "보존. NL 방어도를 !B! 얻습니다. NL *점액투성이를 bronze:투입합니다.", "EXTENDED_DESCRIPTION": [ - "bronze:소유한 상태이상 한 장당 무작위 적들에게 피해를 !D! 주고 그 카드를 모두 소멸시킵니다. NL 소멸. NL (피해를 ", - " 번 줍니다.)" + "끈적이", + "방패" ] }, "bronze:ShipIt": { @@ -467,76 +466,88 @@ ")." ] }, - "bronze:Break": { - "NAME": "일시 정지", - "DESCRIPTION": "피해를 !D! 줍니다. NL bronze:컴파일 *오류 - *어지러움, *부상, *화상, *점액투성이, *공허를 bronze:투입합니다.", + "bronze:SpaghettiCode": { + "NAME": "스파게티 코드", + "DESCRIPTION": "순차열이 가득 찰 때까지 무작위 카드 3장 중 1장을 선택해 bronze:부호화합니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "순차열이 가득 찰 때까지 무작위 카드 3장 중 1장을 선택해 bronze:부호화합니다." + }, + "bronze:Strike": { + "NAME": "타격", + "DESCRIPTION": "피해를 !D! 줍니다.", "EXTENDED_DESCRIPTION": [ - "고장난", - "주먹" + "단순", + "타격" ] }, - "bronze:InfiniteLoop": { - "NAME": "무한 반복", - "DESCRIPTION": "피해를 !D! 줍니다. NL bronze:컴파일 - 이 카드를 복사해 얻고 그 카드의 피해량을 !M! 증가시킵니다.", - "UPGRADE_DESCRIPTION": "보존. NL 피해를 !D! 줍니다. NL bronze:컴파일 - 이 카드를 복사해 얻고 그 카드의 피해량을 !M! 증가시킵니다.", + "bronze:Terminator": { + "NAME": "종료 프로그램", + "DESCRIPTION": "bronze:컴파일 - 이 카드가 순차열의 마지막 카드라면 함수 카드에 '이 카드를 다시 사용합니다.' 효과를 추가합니다.", "EXTENDED_DESCRIPTION": [ - "무한", - "반복" + "슬픈", + "종료" ] }, - "bronze:Library": { - "NAME": "도서관", - "DESCRIPTION": "내 턴 시작 시 무작위 bronze:부호화 카드를 1장 얻습니다. NL 사용하기 전까지 그 카드의 비용은 0이 됩니다." - }, - "bronze:Verify": { - "NAME": "지각력의 형상", - "DESCRIPTION": "휘발성. NL 함수 카드를 뽑을 때마다 그 카드의 모든 수치를 1 증가시킵니다.", - "UPGRADE_DESCRIPTION": "함수 카드를 뽑을 때마다 그 카드의 모든 수치를 1 증가시킵니다." - }, - "bronze:HardenedForm": { - "NAME": "구체 소환", - "DESCRIPTION": "함수 카드를 생성하거나 사용할 때마다 방어도를 !M! 얻고 무작위 적에게 피해를 !M! 줍니다." + "bronze:ThunderWave": { + "NAME": "번개 파동", + "DESCRIPTION": "적 전체에게 피해를 !D! 줍니다. NL guardianmod:버퍼를 1 얻습니다. NL 소멸.", + "EXTENDED_DESCRIPTION": [ + " NL (피해를 ", + " 번 줍니다.)" + ] }, - "bronze:CopyPaste": { - "NAME": "복사 붙여넣기", - "DESCRIPTION": "이번 턴에 다음으로 사용하는 함수 카드가 2번 사용됩니다.", - "UPGRADE_DESCRIPTION": "보존. NL 이번 턴에 다음으로 사용하는 함수 카드가 2번 사용됩니다." + "bronze:TinkerersToolbox": { + "NAME": "개발자 도구", + "DESCRIPTION": "보존. NL *오류 *검출, *일괄, *디컴파일 또는 *바이트 *이동을 얻습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "보존. NL *오류 *검출, *일괄, *디컴파일 또는 *바이트 *이동을 얻습니다." }, - "bronze:Repulsor": { - "NAME": "격퇴", - "DESCRIPTION": "매 턴 처음으로 상태이상 또는 저주를 뽑았다면 그 카드를 소멸 시키고 카드를 1장 뽑습니다.", - "UPGRADE_DESCRIPTION": "선천성. NL 매 턴 처음으로 상태이상 또는 저주를 뽑았다면 그 카드를 소멸 시키고 카드를 1장 뽑습니다." + "bronze:Turbo": { + "NAME": "터보", + "DESCRIPTION": " [E] [E] 를 얻습니다. NL *공허를 버린 카드 더미에 섞어 넣습니다.", + "UPGRADE_DESCRIPTION": " [E] [E] [E] 를 얻습니다. NL *공허를 버린 카드 더미에 섞어 넣습니다." }, - "bronze:Debug": { - "NAME": "오류 검출", - "DESCRIPTION": "순차열에 있는 모든 *컴파일 *오류 효과를 제거합니다. NL 소멸." + "bronze:Undervolt": { + "NAME": "저전압", + "DESCRIPTION": "적 전체의 힘을 !M! 감소시킵니다. NL *화상을 2장 얻습니다. NL 소멸." }, - "bronze:HyperBeam": { - "NAME": "파괴 광선", - "DESCRIPTION": "적 전체에게 피해를 !D! 줍니다. NL *공허 5장을 뽑을 카드 맨 위에 놓습니다." + "bronze:Verify": { + "NAME": "지각력의 형상", + "DESCRIPTION": "휘발성. NL 함수 카드를 뽑을 때마다 그 카드의 비용을 제외한 모든 수치를 1 증가시킵니다.", + "UPGRADE_DESCRIPTION": "함수 카드를 뽑을 때마다 그 카드의 비용을 제외한 모든 수치를 1 증가시킵니다." }, - "bronze:Hardcode": { - "NAME": "하드코드", - "DESCRIPTION": "다음으로 생성하는 함수 카드를 덱에 추가합니다. NL 함수 카드에 사용된 카드들과 이 카드를 덱에서 영구적으로 제거합니다." + "bronze:Virus": { + "NAME": "바이러스", + "DESCRIPTION": "피해를 !D! 줍니다. NL 카드를 전부 버립니다. NL 버린 카드 한 장당 *소형 *광선을 얻습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL 카드를 전부 버립니다. NL 버린 카드 한 장당 *소형 *광선+을 얻습니다. NL 소멸." }, - "bronze:SpaghettiCode": { - "NAME": "스파게티 코드", - "DESCRIPTION": "순차열이 가득 찰 때까지 무작위 카드 3장 중 1장을 선택해 bronze:부호화합니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "순차열이 가득 찰 때까지 무작위 카드 3장 중 1장을 선택해 bronze:부호화합니다." + "bronze:WhirlingStrike": { + "NAME": "관통 사격", + "DESCRIPTION": "적 전체에게 피해를 !D! 줍니다.", + "EXTENDED_DESCRIPTION": [ + "관통", + "사격" + ] }, - "bronze:Assembly": { - "NAME": "어셈블리", - "DESCRIPTION": "예지 !M!. NL *예지로 버린 모든 bronze:부호화 카드를 선택한 순서대로 bronze:부호화합니다. NL 소멸." + "bronze:WildBeam": { + "NAME": "세척", + "DESCRIPTION": "피해를 !D! 줍니다. NL 뽑을 카드 더미에서 무작위 상태이상을 1장 소멸시킵니다.", + "EXTENDED_DESCRIPTION": [ + "광역", + "광선" + ] }, - "bronze:FineTuning": { - "NAME": "미세 조정", - "DESCRIPTION": "순차열에 있는 모든 카드의 수치를 !M! 증가시킵니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "보존. NL 순차열에 있는 모든 카드의 수치를 !M! 증가시킵니다. NL 소멸." + "bronze:WildStrike": { + "NAME": "광역 타격", + "DESCRIPTION": "피해를 !D! 줍니다. NL *부상을 bronze:투입합니다." }, - "bronze:CleanCode": { - "NAME": "깔끔한 코드", - "DESCRIPTION": "다음으로 bronze:부호화하는 카드 !M! 장의 *컴파일 *오류 효과를 제거합니다.", - "UPGRADE_DESCRIPTION": "선천성. NL 다음으로 !M! bronze:부호화하는 카드 !M! 장의 *컴파일 *오류 효과를 제거합니다." + + + + + + "bronze:Batch": { + "NAME": "일괄", + "DESCRIPTION": "함수 카드를 즉시 생성합니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "함수 카드를 즉시 생성합니다." }, "bronze:BranchBlock": { "NAME": "분기: 방어도", @@ -554,6 +565,77 @@ "분기" ] }, + "bronze:ByteShift": { + "NAME": "바이트 이동", + "DESCRIPTION": "순차열에 있는 모든 카드를 가져옵니다. NL 그 카드들은 보존됩니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "보존. NL 순차열에 있는 모든 카드를 가져옵니다. NL 그 카드들은 보존됩니다. NL 소멸." + }, + "bronze:DazingPulse": { + "NAME": "어지러운 펄스", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 피해를 !D! 줍니다. NL bronze:컴파일 *오류 - *어지러움을 !M! 장 bronze:투입합니다.", + "EXTENDED_DESCRIPTION": [ + "어지러운", + "펄스" + ] + }, + "bronze:Debug": { + "NAME": "오류 검출", + "DESCRIPTION": "순차열에 있는 모든 *컴파일 *오류 효과를 제거합니다. NL 소멸." + }, + "bronze:DecaBeam": { + "NAME": "시제품-방패", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL bronze:컴파일 - expansioncontent:판금 *갑옷을 !M! 얻고 *어지러움을 !bauto! 장 bronze:투입합니다.", + "EXTENDED_DESCRIPTION": [ + "들쭉날쭉한", + "보호막" + ] + }, + "bronze:Decompile": { + "NAME": "디컴파일", + "DESCRIPTION": "순차열에 있는 모든 카드를 소멸시킵니다. 소멸된 카드 한 장당 [E] 를 얻고 카드를 1장 뽑습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "보존. NL 순차열에 있는 모든 카드를 소멸시킵니다. 소멸된 카드 한 장당 [E] 를 얻고 카드를 1장 뽑습니다. NL 소멸." + }, + "bronze:DonuBeam": { + "NAME": "시제품-광선", + "DESCRIPTION": "피해를 !D! 만큼 !M! 번 줍니다. NL bronze:컴파일 - 힘을 !M! 얻습니다.", + "EXTENDED_DESCRIPTION": [ + "부드러운", + "폭발" + ] + }, + "bronze:Explode": { + "NAME": "폭발", + "DESCRIPTION": "적 전체에게 hexamod:영혼화상을 !M! 부여합니다. NL bronze:컴파일 *오류 - *화상을 !bauto! 장 bronze:투입합니다.", + "EXTENDED_DESCRIPTION": [ + "불안정한", + "폭탄" + ] + }, + "bronze:FunctionCard": { + "NAME": "()", + "DESCRIPTION": "", + "EXTENDED_DESCRIPTION": [ + "함수()", + "완성()", + "()" + ] + }, + "bronze:MinorBeam": { + "NAME": "소형 광선", + "DESCRIPTION": "피해를 !D! 줍니다.", + "EXTENDED_DESCRIPTION": [ + "소형", + "흠집" + ] + }, + "bronze:Spike": { + "NAME": "가시", + "DESCRIPTION": "피해를 !D! 줍니다. NL bronze:컴파일 - 가시를 !M! 얻습니다.", + "EXTENDED_DESCRIPTION": [ + "뾰족한", + "가시" + ] + }, "bronze:Ignite": { "NAME": "점화", "DESCRIPTION": "hexamod:영혼화상을 !M! 부여합니다. NL 내 턴 종료 시 피해를 2 받습니다.", @@ -561,7 +643,7 @@ }, "bronze:IntoTheVoid": { "NAME": "공허 속으로", - "DESCRIPTION": "휘발성. NL 적의 힘을 이번 턴 동안 !M! 감소시킵니다. NL 이 카드를 뽑을 때마다 [E] 를 잃습니다. NL 소멸." + "DESCRIPTION": "휘발성. NL 이번 턴 동안 적의 힘을 !M! 감소시킵니다. NL 이 카드를 뽑을 때마다 [E] 를 잃습니다. NL 소멸." }, "bronze:Lubricant": { "NAME": "윤활유", @@ -578,82 +660,5 @@ "bronze:UnknownStatus": { "NAME": "당혹", "DESCRIPTION": "방어도를 !B! 얻습니다." - }, - "bronze:TinkerersToolbox": { - "NAME": "개발자 도구", - "DESCRIPTION": "보존. NL *오류 *검출, *일괄, *디컴파일 또는 *바이트 *이동을 얻습니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "보존. NL *오류 *검출, *일괄, *디컴파일 또는 *바이트 *이동을 얻습니다." - }, - "bronze:Refactor": { - "NAME": "리팩터", - "DESCRIPTION": "예지 !M!. NL *예지로 버린 상태이상을 모두 소멸시킵니다. NL 소멸시킨 상태이상 한 장당 방어도를 !B! 얻습니다." - }, - "bronze:Turbo": { - "NAME": "터보", - "DESCRIPTION": " [E] [E] 를 얻습니다. NL *공허를 버린 카드 더미에 섞어 넣습니다.", - "UPGRADE_DESCRIPTION": " [E] [E] [E] 를 얻습니다. NL *공허를 버린 카드 더미에 섞어 넣습니다." - }, - "bronze:BugBarrage": { - "NAME": "버그 방벽", - "DESCRIPTION": "*부상을 !M! 장 얻습니다. NL 손에 있는 상태이상을 모두 bronze:순환하고 bronze:순환된 카드 한 장당 피해를 !D! 줍니다.", - "UPGRADE_DESCRIPTION": "*부상을 !M! 장 얻습니다. NL 손에 있는 상태이상을 모두 bronze:순환하고 bronze:순환된 카드 한 장당 피해를 !D! 줍니다.", - "EXTENDED_DESCRIPTION": [ - " NL (피해를 ", - " 번 줍니다.)" - ] - }, - "bronze:BuggyMess": { - "NAME": "버그 덩어리", - "DESCRIPTION": "*어지러움을 bronze:투입합니다. NL [E] 를 !M! 얻습니다.", - "EXTENDED_DESCRIPTION": [ - "버그", - "투성이" - ] - }, - "bronze:FindAndReplace": { - "NAME": "검색 & 교체", - "DESCRIPTION": "뽑을 또는 버린 카드 더미에서 카드를 1장 가져옵니다. NL *어지러움을 선택한 더미에 섞어 넣습니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "뽑을 또는 버린 카드 더미에서 카드를 1장 가져옵니다. NL 소멸.", - "EXTENDED_DESCRIPTION": [ - "선택하십시오." - ] - }, - "bronze:ThunderWave": { - "NAME": "번개 파동", - "DESCRIPTION": "적 전체에게 피해를 !D! 줍니다. NL guardianmod:버퍼를 1 얻습니다. NL 소멸.", - "EXTENDED_DESCRIPTION": [ - " NL (피해를 ", - " 번 줍니다.)" - ] - }, - "bronze:AlphaBuild": { - "NAME": "얼리 액세스", - "DESCRIPTION": "피해를 !D! 줍니다. NL 무작위 상태이상을 bronze:투입합니다. NL bronze:컴파일 - *베타 *빌드를 bronze:투입합니다.", - "UPGRADE_DESCRIPTION": "선천성. NL \u00A0 피해를 !D! 줍니다. NL 무작위 상태이상을 bronze:투입합니다. NL bronze:컴파일 - *베타 *빌드를 bronze:투입합니다.", - "EXTENDED_DESCRIPTION": [ - "조잡한", - "알파" - ] - }, - "bronze:BetaBuild": { - "NAME": "베타 빌드", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL 무작위 상태이상을 bronze:투입합니다. NL bronze:컴파일 - *정식 *출시를 bronze:투입합니다.", - "EXTENDED_DESCRIPTION": [ - "이른", - "베타" - ] - }, - "bronze:FullRelease": { - "NAME": "정식 출시", - "DESCRIPTION": "bronze:컴파일 - 함수 카드가 내 턴 시작 시 bronze:부호화한 카드의 효과를 발동시키는 파워 카드가 됩니다.", - "EXTENDED_DESCRIPTION": [ - "정식", - "출시", - "1.0" - ] - }, - "bronze:Undervolt": { - "NAME": "저전압", - "DESCRIPTION": "적 전체가 힘을 !M! 잃습니다. NL *화상을 2장 얻습니다. NL 소멸." } } diff --git a/src/main/resources/bronzeResources/localization/kor/EventStrings.json b/src/main/resources/bronzeResources/localization/kor/EventStrings.json index 3df70a6e90..9fa495097b 100644 --- a/src/main/resources/bronzeResources/localization/kor/EventStrings.json +++ b/src/main/resources/bronzeResources/localization/kor/EventStrings.json @@ -1,73 +1,73 @@ -{ - "bronze:ShapeFactory": { - "NAME": "무인순찰기 공장", - "DESCRIPTIONS": [ - "당신은 우연히 태초의 멈춰버린 무인순찰기 공장 중 하나를 발견합니다. 놀랍게도 아직도 조작할 수 있었습니다. 전원을 켜고 모양기들의 해체 작업을 한다면 무기 부품을 얻을 수 있을 것입니다.", - "아무 무인순찰기도 필요한 것을 가지고 있진 않군요." - ], - "OPTIONS": [ - "[반사기와 싸운다] 전투 보상으로 #g가시를 #g얻습니다.", - "[현혹기와 싸운다] 전투 보상으로 #g어지러운 #g펄스를 #g얻습니다.", - "[폭탄기와 싸운다] 전투 보상으로 #g폭발을 #g얻습니다.", - "[떠난다]", - "[전투 시작]", - "[반사기와도 싸운다] 전투 보상으로 #g가시도 #g얻습니다.", - "[현혹기와도 싸운다] 전투 보상으로 #g어지러운 #g펄스도 #g얻습니다.", - "[폭탄기와도 싸운다] 전투 보상으로 #g폭발도 #g얻습니다." - ] - }, - "bronze:AncientFactory": { - "NAME": "고대의 공장", - "DESCRIPTIONS": [ - "지칠 줄 모르고 내려가던 중 ~원시의~ 공장과 우연히 마주칩니다. 이곳에서 당신이 조립될 때 ~모양기를~ 처음 만났었죠. NL 이처럼 고대의 설계자들은 당신같이 #y완벽한 #y것들을 만들어 내곤 했습니다. 오래된 시제품들의 부품도 유용할 테지만 작동시켜서 분해해야 합니다.", - "완성되지 않은 시제품들이라도 여전히 만만찮은 강적입니다. 위험을 감수할 필요는 없죠." - ], - "OPTIONS": [ - "[시제품 도누와 싸운다] #g시제품-광선을 얻습니다.", - "[시제품 데카와 싸운다] #g시제품-방패를 얻습니다.", - "[시제품 도누 & 데카와 싸운다] #g두 #g카드를 #g모두 얻습니다.", - "[떠난다]" - ] - }, - "bronze:BackToBasics": { - "NAME": "", - "DESCRIPTIONS": [ - "단결하지 않으면 힘낼 수도 없습니다." - ], - "OPTIONS": [ - "[통일] #g모든 #g타격과 #g수비에 #g부호화 #g효과를 #g추가합니다.", - "[잠김] 타격이나 수비가 필요합니다." - ] - }, - "bronze:AccursedBlacksmith": { - "NAME": "", - "DESCRIPTIONS": [ - "당신만의 방식으로 무기를 재련하여... NL #y@깡@ #y@까앙@ #y@깡!@ NL ...새로운 데이터와 서보 기구를 이용해 무기를 강화했습니다." - ], - "OPTIONS": [ - "[연마] #g부호화 #g카드를 #g무작위로 #g3장 #g강화합니다.", - "[잠김] 강화 가능한 부호화 카드가 필요합니다." - ] - }, - "bronze:CrystalForge": { - "NAME": "으스스한 대장간", - "DESCRIPTIONS": [ - "첨탑의 관리자들에게만 알려진 비밀 통로를 통해 자동인형 모델 유지보수를 위한 방으로 들어갑니다. 이곳의 도구들은 당신에게 맞춰 설계되어 있습니다.", - "마법 집게로 조심스럽게 당신의 핵심에 무기를 바로 삽입합니다. #y@치지직!@ 스스로 코딩하는 게 생각보다 쉽진 않네요.", - "힘이 깃든 모루로 귀한 부품이 있는 장비를 조각내자, 대장간은 순수한 에너지로 가득찹니다. ~당신의~ ~형상에~ ~따스하고~ ~강한~ 힘이 스며듭니다.", - "필요 없는 장비를 던져넣자마자 대장간의 변성 기능이 작동했습니다. 잠시 후 재료가 용해되어 새롭게 갑옷을 강화해주는 재료로 압축됩니다.", - "당신은 으스스한 대장간을 뒤로한 채 들어왔던 비밀 통로로 나갑니다. 계속해서 첨탑을 몰락시키기 위한 여정을 떠납니다.", - "제거할 카드를 고르십시오." - ], - "OPTIONS": [ - "[제작] #g병에 #g담긴 #g코드를 #g얻습니다. #r최대 #r체력을 #r10 #r잃습니다.", - "[변성] #r카드를 #r1장 #r제거합니다. #g무작위 #g부호화 #g카드를 #g1장 #g얻습니다.", - "[재련] #y희귀 #y카드를 #r제거합니다. #g최대 #g체력을 #g10 #g얻고 #g체력을 #g모두 #g회복합니다.", - "[잠김] 이미 사용했습니다.", - "[떠난다]", - "[잠김] 부호화 카드가 필요합니다.", - "[잠김] 희귀 카드가 필요합니다.", - "제거할 카드를 선택하십시오." - ] - } -} +{ + "bronze:ShapeFactory": { + "NAME": "무인순찰기 공장", + "DESCRIPTIONS": [ + "당신은 우연히 태초의 멈춰버린 무인순찰기 공장 중 하나를 발견합니다. 놀랍게도 아직도 조작할 수 있었습니다. 전원을 켜고 모양기들의 해체 작업을 한다면 무기 부품을 얻을 수 있을 것입니다.", + "그 어떤 무인순찰기도 필요한 게 딱히 보이질 않는군요." + ], + "OPTIONS": [ + "[반사기와 싸운다] 전투 보상으로 #g가시를 #g얻습니다.", + "[현혹기와 싸운다] 전투 보상으로 #g어지러운 #g펄스를 #g얻습니다.", + "[폭탄기와 싸운다] 전투 보상으로 #g폭발을 #g얻습니다.", + "[떠난다]", + "[전투 시작]", + "[반사기와도 싸운다] 전투 보상으로 #g가시도 #g얻습니다.", + "[현혹기와도 싸운다] 전투 보상으로 #g어지러운 #g펄스도 #g얻습니다.", + "[폭탄기와도 싸운다] 전투 보상으로 #g폭발도 #g얻습니다." + ] + }, + "bronze:AncientFactory": { + "NAME": "고대의 공장", + "DESCRIPTIONS": [ + "지칠 줄 모르고 내려가던 중 ~원시의~ 공장과 우연히 마주칩니다. 이곳은 당신이 조립될 때 ~모양기를~ 처음 만난 곳입니다. NL 이처럼 고대의 설계자들은 당신같이 #y완벽한 #y것들을 만들어 내곤 했습니다. 오래된 시제품들의 부품도 유용할 테지만 작동시켜서 분해해야 합니다.", + "완성되지 않은 시제품들이라도 여전히 만만찮은 강적입니다. 위험을 감수할 필요는 없죠." + ], + "OPTIONS": [ + "[시제품 도누와 싸운다] #g시제품-광선을 #g얻습니다.", + "[시제품 데카와 싸운다] #g시제품-방패를 #g얻습니다.", + "[시제품 도누 & 데카와 싸운다] #g두 #g카드를 #g모두 얻습니다.", + "[떠난다]" + ] + }, + "bronze:BackToBasics": { + "NAME": "", + "DESCRIPTIONS": [ + "단결하지 않으면 힘이 되지 못하는 법입니다." + ], + "OPTIONS": [ + "[통일] #g모든 #g타격과 #g수비에 #g부호화 #g효과를 #g추가합니다.", + "[잠김] 타격이나 수비가 필요합니다." + ] + }, + "bronze:AccursedBlacksmith": { + "NAME": "", + "DESCRIPTIONS": [ + "당신만의 방식으로 무기를 재련하여... NL #y@깡@ #y@까앙@ #y@깡!@ NL ...새로운 데이터와 서보 기구를 이용해 무기를 강화했습니다." + ], + "OPTIONS": [ + "[연마] #g부호화 #g카드를 #g무작위로 #g3장 #g강화합니다.", + "[잠김] 강화 가능한 부호화 카드가 필요합니다." + ] + }, + "bronze:CrystalForge": { + "NAME": "으스스한 대장간", + "DESCRIPTIONS": [ + "첨탑의 관리자들에게만 알려진 비밀 통로를 통해 자동인형 모델 유지보수를 위한 방으로 들어갑니다. 이곳의 도구들은 당신에게 맞춰 설계되어 있습니다.", + "마법 집게로 조심스럽게 당신의 핵심에 무기를 바로 삽입합니다. #y@치지직!@ 스스로 코딩하는 게 생각보다 쉽진 않네요.", + "힘이 깃든 모루로 귀한 부품이 있는 장비를 조각내자, 대장간은 순수한 에너지로 가득찹니다. ~당신의~ ~형상에~ ~따스하고~ ~강한~ 힘이 스며듭니다.", + "필요 없는 장비를 던져넣자마자 대장간의 변성 기능이 작동합니다. 잠시 후 재료가 용해되어 새롭게 갑옷을 강화해주는 재료로 압축됩니다.", + "당신은 으스스한 대장간을 뒤로한 채 들어왔던 비밀 통로로 나갑니다. 계속해서 첨탑을 몰락시키기 위한 여정을 떠납니다.", + "제거할 카드를 선택하십시오." + ], + "OPTIONS": [ + "[제작] #g병에 #g담긴 #g코드를 #g얻습니다. #r최대 #r체력을 #r10 #r잃습니다.", + "[변성] #r카드를 #r1장 #r제거합니다. #g무작위 #g부호화 #g카드를 #g1장 #g얻습니다.", + "[재련] #r희귀 #r카드를 #r제거합니다. #g최대 #g체력을 #g10 #g얻고 #g체력을 #g모두 #g회복합니다.", + "[잠김] 이미 사용했습니다.", + "[떠난다]", + "[잠김] 부호화 카드가 필요합니다.", + "[잠김] 희귀 카드가 필요합니다.", + "제거할 카드를 선택하십시오." + ] + } +} diff --git a/src/main/resources/bronzeResources/localization/kor/MonsterStrings.json b/src/main/resources/bronzeResources/localization/kor/MonsterStrings.json index 9e26dfeeb6..22fdca1b26 100644 --- a/src/main/resources/bronzeResources/localization/kor/MonsterStrings.json +++ b/src/main/resources/bronzeResources/localization/kor/MonsterStrings.json @@ -1 +1 @@ -{} \ No newline at end of file +{} \ No newline at end of file diff --git a/src/main/resources/bronzeResources/localization/kor/OrbStrings.json b/src/main/resources/bronzeResources/localization/kor/OrbStrings.json index 9e26dfeeb6..22fdca1b26 100644 --- a/src/main/resources/bronzeResources/localization/kor/OrbStrings.json +++ b/src/main/resources/bronzeResources/localization/kor/OrbStrings.json @@ -1 +1 @@ -{} \ No newline at end of file +{} \ No newline at end of file diff --git a/src/main/resources/bronzeResources/localization/kor/PotionStrings.json b/src/main/resources/bronzeResources/localization/kor/PotionStrings.json index 7d62fca3b6..4cc7de09c3 100644 --- a/src/main/resources/bronzeResources/localization/kor/PotionStrings.json +++ b/src/main/resources/bronzeResources/localization/kor/PotionStrings.json @@ -1,34 +1,34 @@ -{ - "bronze:FreeFunctionsPotion": { - "NAME": "기계유", - "DESCRIPTIONS": [ - "순차열에 있는 비용을 제외한 모든 카드의 수치를 #b", - " 증가시킵니다." - ] - }, - "bronze:CleanCodePotion": { - "NAME": "알깔리성 엘릭서", - "DESCRIPTIONS": [ - "다음으로 생성하는 함수 카드의 모든 #y컴파일 #y오류를 제거합니다. 그 카드의 비용은 사용하기 전까지 #b0 으로 감소합니다.", - "다음 #b", - " 번까지 생성하는 함수 카드의 모든 #y컴파일 #y오류를 제거합니다. 그 카드의 비용은 사용하기 전까지 #b0 으로 감소합니다." - ] - }, - "bronze:BurnAndBuffPotion": { - "NAME": "애태우는 한 통", - "DESCRIPTIONS": [ - "#y힘을 #b", - " 얻고 #y민첩을 #b", - " 얻습니다. NL #y화상+을 2장 버린 카드 더미에 넣고 섞습니다." - ] - }, - "bronze:BuildAFunctionPotion": { - "NAME": "키오의 영리한 혼합 포션", - "DESCRIPTIONS": [ - "함수 카드가 생성될 때까지 카드 #b3 장 중 #b1 장 을 선택해 #y부호화합니다.", - "함수 카드가 생성될 때까지 카드 #b3 장 중 #b1 장 을 선택해 #y부호화합니다. 생성하는 함수 카드를 #b", - " 장 복사해 얻습니다.", - " 장 복사해 얻습니다." - ] - } -} +{ + "bronze:FreeFunctionsPotion": { + "NAME": "기계유", + "DESCRIPTIONS": [ + "순차열에 있는 비용을 제외한 모든 카드의 수치를 #b", + " 증가시킵니다." + ] + }, + "bronze:CleanCodePotion": { + "NAME": "알깔리성 엘릭서", + "DESCRIPTIONS": [ + "다음으로 생성하는 #y함수 카드의 모든 #y컴파일 #y오류를 제거합니다. 그 카드의 비용은 사용하기 전까지 #b0 으로 감소합니다.", + "다음 #b", + " 번까지 생성하는 함수 카드의 모든 #y컴파일 #y오류를 제거합니다. 그 카드의 비용은 사용하기 전까지 #b0 으로 감소합니다." + ] + }, + "bronze:BurnAndBuffPotion": { + "NAME": "애태우는 한 통", + "DESCRIPTIONS": [ + "#y힘을 #b", + " 얻고 #y민첩을 #b", + " 얻습니다. NL #y화상+을 2장 버린 카드 더미에 넣고 섞습니다." + ] + }, + "bronze:BuildAFunctionPotion": { + "NAME": "키오의 영리한 혼합 포션", + "DESCRIPTIONS": [ + "#y함수 카드가 생성될 때까지 카드 #b3 장 중 #b1 장을 선택해 #y부호화합니다.", + "#y함수 카드가 생성될 때까지 카드 #b3 장 중 #b1 장을 선택해 #y부호화합니다. 생성하는 함수 카드를 #b", + " 장 복사해 얻습니다.", + " 장 복사해 얻습니다." + ] + } +} diff --git a/src/main/resources/bronzeResources/localization/kor/PowerStrings.json b/src/main/resources/bronzeResources/localization/kor/PowerStrings.json index b7a4575524..6eb89a01ea 100644 --- a/src/main/resources/bronzeResources/localization/kor/PowerStrings.json +++ b/src/main/resources/bronzeResources/localization/kor/PowerStrings.json @@ -1,145 +1,145 @@ -{ - "bronze:Cloning": { - "NAME": "병합", - "DESCRIPTIONS": [ - "다음으로 순차열에 넣는 카드를 복사해 추가로 순차열에 넣습니다.", - "다음으로 순차열에 넣는 카드를 #b", - " 장 복사해 추가로 순차열에 넣습니다." - ] - }, - "bronze:Default": { - "NAME": "기본 클래스", - "DESCRIPTIONS": [ - "함수가 생성되고 복사한 카드를 처음으로 #y부호화합니다.", - "함수가 생성되고 다음 #b", - " 번까지 복사한 카드를 처음으로 #y부호화합니다." - ] - }, - "bronze:Feature": { - "NAME": "특징", - "DESCRIPTIONS": [ - "#y상태이상을 뽑거나 #y소멸시킬 때마다 #y방어도를 #b", - " 얻습니다." - ] - }, - "bronze:InfiniteBeams": { - "NAME": "무한 광선", - "DESCRIPTIONS": [ - "내 턴 시작 시 #y소형 #y광선을 #b1 장 얻습니다.", - "내 턴 시작 시 #y소형 #y광선+을 #b1 장 얻습니다.", - "내 턴 시작 시 #y소형 #y광선을 #b", - " 장 얻습니다.", - "내 턴 시작 시 #y소형 #y광선+을 #b", - " 장 얻습니다." - ] - }, - "bronze:Optimize": { - "NAME": "최적화", - "DESCRIPTIONS": [ - "다음으로 #y부호화되는 강화 가능한 카드를 #y강화합니다.", - "다음으로 #y부호화되는 강화 가능한 카드를 #b", - " 장 #y강화합니다." - ] - }, - "bronze:MaxOutput": { - "NAME": "최대 출력", - "DESCRIPTIONS": [ - "매 턴 시작 시 추가로 카드를 #b1 장 뽑고 뽑을 카드 더미에 #y어지러움을 #b1 장 넣고 섞습니다.", - "매 턴 시작 시 추가로 카드를 #b", - " 장 뽑고 뽑을 카드 더미에 #y어지러움을 #b", - " 장 넣고 섞습니다." - ] - }, - "bronze:Return": { - "NAME": "복귀", - "DESCRIPTIONS": [ - "내 다음 턴 시작 시 [E] 를 얻고 카드를 #b1 장 뽑습니다.", - "내 다음 #b", - " 턴 시작 시 [E] 를 얻고 카드를 #b1 장 뽑습니다." - ] - }, - "bronze:Library": { - "NAME": "도서관", - "DESCRIPTIONS": [ - "내 턴 시작 시 무작위 #y부호화 카드를 #b1 장 얻습니다. 사용 전까지 그 카드의 비용은 #b0 이 됩니다.", - "내 턴 시작 시 무작위 #y부호화 카드를 #b", - " 장 얻습니다. NL 사용 전까지 그 카드의 비용은 #b0 이 됩니다." - ] - }, - "bronze:LibraryMod": { - "NAME": "외부 도서관", - "DESCRIPTIONS": [ - "내 턴 시작 시 무작위 #y부호화 카드를 #b1 장 얻습니다. 그 카드에 #y휘발성 효과를 추가합니다." - ] - }, - "bronze:BronzeHeatsink": { - "NAME": "청동 방열판", - "DESCRIPTIONS": [ - "#y함수 카드를 사용할 때마다 카드를 #b1 장 뽑습니다.", - "#y함수 카드를 사용할 때마다 카드를 #b", - " 장 뽑습니다." - ] - }, - "bronze:HardenedForm": { - "NAME": "구체 소환", - "DESCRIPTIONS": [ - "#y함수 카드를 생성하거나 사용할 때마다 #y방어도를 #b", - " 얻고 무작위 적에게 피해를 #b", - " 줍니다." - ] - }, - "bronze:Hardcode": { - "NAME": "하드코딩", - "DESCRIPTIONS": [ - "다음으로 생성하는 #y함수 카드를 얻는 대신 덱에 추가합니다. 추가하면 함수 카드에 사용된 카드들과 #y하드코드를 덱에서 영구적으로 제거합니다.", - "다음으로 생성하는 함수 카드 #b", - " 장을 덱에 추가합니다. 추가하면 함수 카드에 사용된 카드들과 #y하드코드를 덱에서 영구적으로 제거합니다." - ] - }, - "bronze:Verify": { - "NAME": "지각력의 형상", - "DESCRIPTIONS": [ - "#y함수 카드를 뽑을 때마다 그 카드의 모든 수치를 #b1 증가시킵니다.", - "#y함수 카드를 뽑을 때마다 그 카드의 모든 수치를 #b", - " 증가시킵니다." - ] - }, - "bronze:FreeFunction": { - "NAME": "무료 함수", - "DESCRIPTIONS": [ - "다음으로 생성하는 함수 카드의 비용이 #b0 이 됩니다.", - "다음으로 생성하는 함수 카드 #b", - " 장의 비용이 #b0 이 됩니다." - ] - }, - "bronze:CleanCode": { - "NAME": "깔끔한 코드", - "DESCRIPTIONS": [ - "모든 #y컴파일된 #y오류 효과를 제거합니다. 다음 함수 카드를 #b1 장 생성할 때까지 지속됩니다.", - "모든 #y컴파일된 #y오류 효과를 제거합니다. 다음 함수 카드를 #b", - " 장 생성할 때까지 지속됩니다." - ] - }, - "bronze:CopyPaste": { - "NAME": "복사 붙여넣기", - "DESCRIPTIONS": [ - "이번 턴에 다음으로 사용하는 #y함수 카드를 두 번 사용합니다.", - "이번 턴에 다음 #b", - " 번까지 사용하는 #y함수 카드를 두 번 사용합니다." - ] - }, - "bronze:FullRelease": { - "NAME": "정규 발매", - "DESCRIPTIONS": [ - "내 턴 시작 시 NL " - ] - }, - "bronze:RemoveNextError": { - "NAME": "오류 제거", - "DESCRIPTIONS": [ - "다음으로 #y부호화하는 #y컴파일 #y오류 효과를 제거합니다.", - "다음 #b", - " 번까지 #y부호화하는 #y컴파일 #y오류 효과를 제거합니다." - ] - } -} +{ + "bronze:Cloning": { + "NAME": "병합", + "DESCRIPTIONS": [ + "다음으로 #y부호화하는 카드를 복사해 추가로 #y부호화합니다.", + "다음으로 #y부호화하는 카드를 #b", + " 장 복사해 추가로 #y부호화합니다." + ] + }, + "bronze:Default": { + "NAME": "기본 클래스", + "DESCRIPTIONS": [ + "함수가 생성되고 복사한 카드를 순차열의 첫 번째에 #y부호화합니다.", + "함수가 생성되고 다음 #b", + " 번까지 복사한 카드를 순차열의 첫 번째에 #y부호화합니다." + ] + }, + "bronze:Feature": { + "NAME": "특징", + "DESCRIPTIONS": [ + "#y상태이상을 뽑거나 #y소멸시킬 때마다 #y방어도를 #b", + " 얻습니다." + ] + }, + "bronze:InfiniteBeams": { + "NAME": "무한 광선", + "DESCRIPTIONS": [ + "내 턴 시작 시 #y소형 #y광선을 #b1 장 얻습니다.", + "내 턴 시작 시 #y소형 #y광선+을 #b1 장 얻습니다.", + "내 턴 시작 시 무작위 #y부호화 카드를 #b", + " 장 얻습니다.", + "내 턴 시작 시 무작위 #y부호화 카드를 #b", + " 장 얻습니다." + ] + }, + "bronze:Optimize": { + "NAME": "최적화", + "DESCRIPTIONS": [ + "다음으로 #y부호화되는 #y강화 가능한 카드를 #y강화합니다.", + "다음으로 #y부호화되는 #y강화 가능한 카드를 #b", + " 장 #y강화합니다." + ] + }, + "bronze:MaxOutput": { + "NAME": "최대 출력", + "DESCRIPTIONS": [ + "내 턴 시작 시 카드를 #b1 장 더 뽑고 뽑을 카드 더미에 #y어지러움을 #b1 장 넣고 섞습니다.", + "내 턴 시작 시 카드를 #b", + " 장 더 뽑고 뽑을 카드 더미에 #y어지러움을 #b", + " 장 넣고 섞습니다." + ] + }, + "bronze:Return": { + "NAME": "복귀", + "DESCRIPTIONS": [ + "내 다음 턴 시작 시 [E] 를 얻고 카드를 #b1 장 뽑습니다.", + "내 다음 #b", + " 턴 시작 시 [E] 를 얻고 카드를 #b1 장 뽑습니다." + ] + }, + "bronze:Library": { + "NAME": "도서관", + "DESCRIPTIONS": [ + "내 턴 시작 시 무작위 #y부호화 카드를 #b1 장 얻습니다. 사용 전까지 그 카드의 비용은 #b0 이 됩니다.", + "내 턴 시작 시 무작위 #y부호화 카드를 #b", + " 장 얻습니다. 사용 전까지 그 카드의 비용은 #b0 이 됩니다." + ] + }, + "bronze:LibraryMod": { + "NAME": "외부 도서관", + "DESCRIPTIONS": [ + "내 턴 시작 시 무작위 #y부호화 카드를 #b1 장 얻습니다. 그 카드에 #y휘발성을 추가합니다." + ] + }, + "bronze:BronzeHeatsink": { + "NAME": "청동 방열판", + "DESCRIPTIONS": [ + "#y함수 카드를 사용할 때마다 카드를 #b1 장 뽑습니다.", + "#y함수 카드를 사용할 때마다 카드를 #b", + " 장 뽑습니다." + ] + }, + "bronze:HardenedForm": { + "NAME": "구체 소환", + "DESCRIPTIONS": [ + "#y함수 카드를 생성하거나 사용할 때마다 #y방어도를 #b", + " 얻고 무작위 적에게 피해를 #b", + " 줍니다." + ] + }, + "bronze:Hardcode": { + "NAME": "하드코딩", + "DESCRIPTIONS": [ + "다음으로 생성하는 #y함수 카드를 얻는 대신 덱에 추가합니다. 추가하면 함수 카드에 사용된 카드들과 #y하드코드를 덱에서 영구적으로 제거합니다.", + "다음으로 생성하는 #y함수 카드 #b", + " 장을 덱에 추가합니다. 추가하면 함수 카드에 사용된 카드들과 #y하드코드를 덱에서 영구적으로 제거합니다." + ] + }, + "bronze:Verify": { + "NAME": "지각력의 형상", + "DESCRIPTIONS": [ + "#y함수 카드를 뽑을 때마다 그 카드의 모든 수치를 #b1 증가시킵니다.", + "#y함수 카드를 뽑을 때마다 그 카드의 모든 수치를 #b", + " 증가시킵니다." + ] + }, + "bronze:FreeFunction": { + "NAME": "무료 함수", + "DESCRIPTIONS": [ + "다음으로 생성하는 #y함수 카드의 비용이 #b0 이 됩니다.", + "다음으로 생성하는 #y함수 카드 #b", + " 장의 비용이 #b0 이 됩니다." + ] + }, + "bronze:CleanCode": { + "NAME": "깔끔한 코드", + "DESCRIPTIONS": [ + "모든 #y컴파일된 #y컴파일 #y오류를 제거합니다. 다음 함수 카드를 #b1 장 생성할 때까지 지속됩니다.", + "모든 #y컴파일된 #y컴파일 #y오류를 제거합니다. 다음 함수 카드를 #b", + " 장 생성할 때까지 지속됩니다." + ] + }, + "bronze:CopyPaste": { + "NAME": "복사 붙여넣기", + "DESCRIPTIONS": [ + "이번 턴에 다음으로 사용하는 #y함수 카드를 두 번 사용합니다.", + "이번 턴에 다음 #b", + " 번까지 사용하는 #y함수 카드를 두 번 사용합니다." + ] + }, + "bronze:FullRelease": { + "NAME": "정식 출시", + "DESCRIPTIONS": [ + "내 턴 시작 시 NL " + ] + }, + "bronze:RemoveNextError": { + "NAME": "오류 제거", + "DESCRIPTIONS": [ + "다음으로 #y부호화하는 #y컴파일 #y오류를 제거합니다.", + "다음 #b", + " 번까지 #y부호화하는 #y컴파일 #y오류를 제거합니다." + ] + } +} \ No newline at end of file diff --git a/src/main/resources/bronzeResources/localization/kor/RelicStrings.json b/src/main/resources/bronzeResources/localization/kor/RelicStrings.json index ae67fcd8f9..b38663e403 100644 --- a/src/main/resources/bronzeResources/localization/kor/RelicStrings.json +++ b/src/main/resources/bronzeResources/localization/kor/RelicStrings.json @@ -1,104 +1,108 @@ -{ - "bronze:BronzeCore": { - "NAME": "청동 핵심", - "FLAVOR": "50,000년에 한번 교체해주세요.", - "DESCRIPTIONS": [ - "매 전투 시 처음으로 #y함수 카드를 생성하면 [E] 를 얻습니다." - ] - }, - "bronze:ProtectiveGoggles": { - "NAME": "보안경", - "FLAVOR": "가까이서 볼 수 있습니다.", - "DESCRIPTIONS": [ - "내 턴 종료 시 #y순차열에 카드가 없다면 #y방어도를 #b4 얻습니다." - ] - }, - "bronze:DecasWashers": { - "NAME": "데카의 기계 부품", - "FLAVOR": "데카가 왜 이것들을 수집하는지는 알려지지 않았습니다.", - "DESCRIPTIONS": [ - "전투 시작 시 카드를 #b3 장 추가로 뽑고 뽑을 카드 더미에 #y어지러움을 섞어 넣습니다." - ] - }, - "bronze:Timepiece": { - "NAME": "얼어붙은 프라이머", - "FLAVOR": "Ar22 화합물 22온스, 유통 기한: 22년. 저온 보관하세요.", - "DESCRIPTIONS": [ - "생성하는 모든 #y함수 카드에 #y보존 효과가 추가됩니다." - ] - }, - "bronze:Mallet": { - "NAME": "망치", - "FLAVOR": "이거! 그 항아리 망치!", - "DESCRIPTIONS": [ - "#y미세 #y조정+을 2장을 얻은 채로 전투를 시작합니다." - ] - }, - "bronze:SilverBullet": { - "NAME": "은 탄환", - "FLAVOR": "첨탑눅대는 멸종한 지 오래입니다.", - "DESCRIPTIONS": [ - "#y관통 #y사격을 1장 얻은 채로 전투를 시작합니다. 그 카드의 비용은 #b0 입니다." - ] - }, - "bronze:MakeshiftBattery": { - "NAME": "임시변통 전지", - "FLAVOR": "8.99 볼트짜리입니다.", - "DESCRIPTIONS": [ - "내 턴 시작 시 [E] 를 얻고 #y점액투성이를 버린 카드 더미에 넣고 섞습니다." - ] - }, - "bronze:CableSpool": { - "NAME": "전선 타래", - "FLAVOR": "꼬여있습니다...", - "DESCRIPTIONS": [ - "매 전투 시 처음으로 #y부호화하는 카드를 1장 복사해 순차열에 넣습니다." - ] - }, - "bronze:ElectromagneticCoil": { - "NAME": "전자기 코일", - "FLAVOR": "비효율적이지만 흥미로운 전원입니다.", - "DESCRIPTIONS": [ - "#y함수 카드가 순차열에 카드를 #b4 장 병합해야 생성되도록 변경됩니다." - ] - }, - "bronze:PlatinumCore": { - "NAME": "백금 핵심", - "FLAVOR": "변경 사항 기록: 사용자 경험을 향상시켜줍니다.", - "DESCRIPTIONS": [ - "", - "과 교체합니다.[] NL 다음으로 생성하는 #y함수 카드 #b3 장의 비용이 사용하기 전까지 #b0 이 됩니다." - ] - }, - "bronze:BottledCode": { - "NAME": "병에 담긴 코드", - "FLAVOR": "사실, 내가 정확한 코드를 가지고 있는데...", - "DESCRIPTIONS": [ - "획득 시 #y부호화할 카드를 1장 고릅니다. 그 카드를 #y순차열에 넣은 채로 전투를 시작합니다.", - "카드를 선택하세요: ", - "#y순차열에 ", - " 카드를 넣은 채로 전투를 시작합니다." - ] - }, - "bronze:DonusWashers": { - "NAME": "도누의 기계 부품", - "FLAVOR": "도누가 왜 이것들을 수집하는지는 알 거 같습니다.", - "DESCRIPTIONS": [ - "전투 시작 시 [E] [E] 를 얻고 뽑을 카드 더미에 #y공허를 #b1 장 섞어 넣습니다." - ] - }, - "bronze:BronzeIdol": { - "NAME": "청동 우상", - "FLAVOR": "고대의 무기화된 백신입니다. 왜 만들었는지 그 누가 알겠습니까?", - "DESCRIPTIONS": [ - "#y상태이상이 이로운 효과를 가진 카드로 변경되고 사용할 수 있게됩니다." - ] - }, - "bronze:AnalyticalCore": { - "NAME": "패러독스의 인공물", - "FLAVOR": "이런 코딩 광풍은 처음 봅니다.", - "DESCRIPTIONS": [ - "매 턴 시작 시 무작위 #y부호화 카드를 1장 얻습니다. 그 카드에는 #y휘발성 효과가 추가됩니다." - ] - } -} +{ + "bronze:BronzeCore": { + "NAME": "청동 핵심", + "FLAVOR": "50,000년에 한번 교체해주세요.", + "DESCRIPTIONS": [ + "매 전투 시 처음으로 #y함수 카드를 생성하면 [E] 를 얻습니다." + ] + }, + "bronze:ProtectiveGoggles": { + "NAME": "보안경", + "FLAVOR": "가까이서 볼 수 있습니다.", + "DESCRIPTIONS": [ + "내 턴 종료 시 순차열에 카드가 없다면 #y방어도를 #b", + " 얻습니다." + ] + }, + "bronze:DecasWashers": { + "NAME": "데카의 기계 부품", + "FLAVOR": "데카가 왜 이것들을 수집하는지는 알려지지 않았습니다.", + "DESCRIPTIONS": [ + "전투 시 #b", + " 턴 동안 내 턴 시작 시 카드를 #b1 장 더 뽑습니다." + ] + }, + "bronze:Timepiece": { + "NAME": "얼어붙은 프라이머", + "FLAVOR": "Ar22 화합물 22온스, 유통기한: 22년. 저온 보관하세요.", + "DESCRIPTIONS": [ + "생성하는 모든 #y함수 카드에 #y보존이 추가됩니다." + ] + }, + "bronze:Mallet": { + "NAME": "망치", + "FLAVOR": "이거! 그 항아리 망치!", + "DESCRIPTIONS": [ + "#y미세 #y조정+을 #b2 장 얻은 채로 전투를 시작합니다." + ] + }, + "bronze:SilverBullet": { + "NAME": "은 탄환", + "FLAVOR": "첨탑눅대는 멸종한 지 오래입니다.", + "DESCRIPTIONS": [ + "#y관통 #y사격을 #b1 장 얻은 채로 전투를 시작합니다. 그 카드의 비용은 #b0 이 됩니다." + ] + }, + "bronze:MakeshiftBattery": { + "NAME": "임시변통 전지", + "FLAVOR": "8.99 볼트짜리입니다.", + "DESCRIPTIONS": [ + "내 턴 시작 시 [E] 를 얻고 #y점액투성이를 버린 카드 더미에 넣고 섞습니다." + ] + }, + "bronze:CableSpool": { + "NAME": "전선 타래", + "FLAVOR": "꼬여있습니다...", + "DESCRIPTIONS": [ + "매 전투 시 처음으로 #y부호화하는 카드를 #b1 장 복사해 #y부호화합니다." + ] + }, + "bronze:ElectromagneticCoil": { + "NAME": "전자기 코일", + "FLAVOR": "비효율적이지만 흥미로운 전원입니다.", + "DESCRIPTIONS": [ + "#y함수 카드가 순차열에 카드를 #b4 장 #y부호화해야 생성되도록 변경됩니다." + ] + }, + "bronze:PlatinumCore": { + "NAME": "백금 핵심", + "FLAVOR": "변경 사항 기록: 사용자 경험을 향상시켜줍니다.", + "DESCRIPTIONS": [ + " ", + "과[] 교체합니다. NL 다음 생성하는 #y함수 카드 #b", + " 장의 비용이 사용하기 전까지 #b0 이 됩니다." + ] + }, + "bronze:BottledCode": { + "NAME": "병에 담긴 코드", + "FLAVOR": "사실, 내가 정확한 코드를 가지고 있는데...", + "DESCRIPTIONS": [ + "획득 시 #y부호화할 카드를 #b1 장 선택합니다. 그 카드를 #y부호화한 채로 전투를 시작합니다.", + "카드를 선택하세요: ", + "순차열에 ", + " 카드를 넣은 채로 전투를 시작합니다.", + "병에 담긴 카드가 덱에서 #r제거되어 유물이 비활성화됐습니다." + ] + }, + "bronze:DonusWashers": { + "NAME": "도누의 기계 부품", + "FLAVOR": "도누가 왜 이것들을 수집하는지는 알 거 같습니다.", + "DESCRIPTIONS": [ + "전투 시작 시 [E] [E] 를 얻고 뽑을 카드 더미에 #y공허를 #b1 장 섞어 넣습니다." + ] + }, + "bronze:BronzeIdol": { + "NAME": "청동 우상", + "FLAVOR": "고대의 무기화된 백신입니다. 왜 만들었는지 그 누가 알겠습니까?", + "DESCRIPTIONS": [ + "#y상태이상이 이로운 효과를 가진 카드로 변경되고 사용할 수 있게됩니다." + ] + }, + "bronze:AnalyticalCore": { + "NAME": "패러독스의 인공물", + "FLAVOR": "이런 코딩 광풍은 처음 봅니다.", + "DESCRIPTIONS": [ + "매 턴 시작 시 무작위 #y부호화 카드를 #b1 장 얻습니다. 그 카드에는 #y휘발성이 추가됩니다." + ] + } +} diff --git a/src/main/resources/bronzeResources/localization/kor/RunModStrings.json b/src/main/resources/bronzeResources/localization/kor/RunModStrings.json index 9e26dfeeb6..22fdca1b26 100644 --- a/src/main/resources/bronzeResources/localization/kor/RunModStrings.json +++ b/src/main/resources/bronzeResources/localization/kor/RunModStrings.json @@ -1 +1 @@ -{} \ No newline at end of file +{} \ No newline at end of file diff --git a/src/main/resources/bronzeResources/localization/kor/UIStrings.json b/src/main/resources/bronzeResources/localization/kor/UIStrings.json index 8caee7b877..d6a3cb85b6 100644 --- a/src/main/resources/bronzeResources/localization/kor/UIStrings.json +++ b/src/main/resources/bronzeResources/localization/kor/UIStrings.json @@ -1,9 +1,9 @@ -{ +{ "bronze:SpecificCardReward": { "TEXT": [ "덱에 ", " 카드를 추가", - "카드를 선택하십시오" + "카드를 선택하십시오." ] }, "bronze:UnplayableMod": { @@ -26,13 +26,13 @@ "bronze:MiscStrings": { "TEXT": [ "가져올 카드를 선택하십시오. 그 카드는 보존됩니다.", - " - 영구적으로 #y광신자 #y타격의 피해량을 #b", - " 증가시킵니다.", + " - 영구적으로 #y광신자 #y타격의 피해량이 #b", + " 증가합니다.", "오류: 순차열_공백", - " - #y무한 #y반복을 복사해 얻고 피해량을 #b", - " 증가시킵니다.", - " 변화시킬 카드를 선택하십시오.", - " 부호화시킬 카드를 선택하십시오.", + " - #y무한 #y반복을 얻고 그 카드의 피해량이 #b", + " 증가합니다.", + "변화시킬 카드를 선택하십시오.", + "부호화시킬 카드를 선택하십시오.", "" ] }, @@ -53,4 +53,4 @@ "bronze:컴파일" ] } -} \ No newline at end of file +} 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 0000000000..3af9df3c93 --- /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 extracción.", + "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 extracción. 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 al azar por TODAS tus cartas de Estado, las agota. NL Agota.", + "EXTENDED_DESCRIPTION": [ + "Haz !D! de daño a un enemigo al azar 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! 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 extracción o de descarte. NL Agrega un *Desorientado donde estaba. NL Agota.", + "UPGRADE_DESCRIPTION": "Busca una carta de tu pila de extracción 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 al azar." + }, + "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 extracción." + }, + "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! 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 extracción. 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 extracción. 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 extracción.", + "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! Vulnerable." + }, + "bronze:Daze": { + "NAME": "Aturdido", + "DESCRIPTION": "Etérea. NL Aplica !M! 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 0000000000..511ef2dc1a --- /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 0000000000..1156f4f90b --- /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 0000000000..7e76b8d0e1 --- /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 extracción." + }, + { + "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 0000000000..9e26dfeeb6 --- /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 0000000000..9e26dfeeb6 --- /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 0000000000..d3393ecdd2 --- /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 0000000000..b11a3447fa --- /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 #yAturdido a tu pila de extracción cada turno.", + "Roba #b", + " cartas adicionales y añade #b", + " #yAturdido a tu pila de extracción 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": [ + "Cada vez que juegues una #yFunción [REMOVE_SPACE], roba #b1 carta.", + "Cada vez 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 al azar." + ] + }, + "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 0000000000..4912f03f83 --- /dev/null +++ b/src/main/resources/bronzeResources/localization/spa/RelicStrings.json @@ -0,0 +1,108 @@ +{ + "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 #b", + " 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 #b", + " 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 #b", + " 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].", + "La carta enbotellada ha sido #rremovida de tu mazo, la reliquia ya no funciona." + ] + }, + "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 extracción." + ] + }, + "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 0000000000..9e26dfeeb6 --- /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 0000000000..75b0f91193 --- /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 5dee1f6446..9723b87a09 100644 --- a/src/main/resources/bronzeResources/localization/zhs/CardStrings.json +++ b/src/main/resources/bronzeResources/localization/zhs/CardStrings.json @@ -469,7 +469,7 @@ }, "bronze:Break": { "NAME": "打断", - "DESCRIPTION": "造成 !D! 点伤害。 NL bronze:编译 *错误 : bronze:插入 *灼伤 、 *伤口 、 *黏液 、 *晕眩 与 *虚空 。", + "DESCRIPTION": "造成 !D! 点伤害。 NL bronze:编译 *错误 : 获得 *灼伤 、 *伤口 、 *黏液 、 *晕眩 与 *虚空 。", "EXTENDED_DESCRIPTION": [ "打断", "粉碎" @@ -508,7 +508,7 @@ }, "bronze:HyperBeam": { "NAME": "超能射线", - "DESCRIPTION": " 对所有敌人造成 !D! 点伤害。 NL 将5张 *虚空 加入抽牌堆顶部。" + "DESCRIPTION": "保留 。 NL 对所有敌人造成 !D! 点伤害。 NL 将 !M! 张 *虚空 加入抽牌堆顶部。" }, "bronze:Hardcode": { "NAME": "硬编码", @@ -652,3 +652,4 @@ "DESCRIPTION": "所有敌人失去 !M! 点 力量。 NL 获得两张 *灼伤 。 NL 消耗 。" } } + diff --git a/src/main/resources/bronzeResources/localization/zhs/RelicStrings.json b/src/main/resources/bronzeResources/localization/zhs/RelicStrings.json index 65612ade6d..c94c792c05 100644 --- a/src/main/resources/bronzeResources/localization/zhs/RelicStrings.json +++ b/src/main/resources/bronzeResources/localization/zhs/RelicStrings.json @@ -10,14 +10,16 @@ "NAME": "护目镜", "FLAVOR": "仔细观察。", "DESCRIPTIONS": [ - "回合结束时若 #ybronze:队列 为空,获得 #b4 点 #y格挡 。" + "回合结束时若 #ybronze:队列 为空,获得 #b", + " 点 #y格挡 。" ] }, "bronze:DecasWashers": { "NAME": "八体垫片", "FLAVOR": "真不知道八体为何收藏这些。", "DESCRIPTIONS": [ - "每场战斗的前 #b3 个回合,额外抽 #b1 张牌。" + "每场战斗的前 #b", + " 个回合,额外抽 #b1 张牌。" ] }, "bronze:Timepiece": { @@ -67,7 +69,8 @@ "FLAVOR": "更新日志: 提升用户体验。", "DESCRIPTIONS": [ "替换 ", - " 。 NL 每场战斗 #ybronze:编译 的前 #b3 张 #ybronze:方法 首次耗能为 #b0 。" + " 。 NL 每场战斗 #ybronze:编译 的前 #b", + " 张 #ybronze:方法 首次耗能为 #b0 。" ] }, "bronze:BottledCode": { @@ -77,7 +80,8 @@ "拾起时,选择牌组中的 #b1 张 #ybronze:编码 牌。 战斗开始时,它直接进入 #ybronze:队列 。", "选择一张牌 ", "战斗开始时, ", - " 直接进入 #ybronze:队列 。" + " 直接进入 #ybronze:队列 。", + "被瓶装的牌已从牌组 #r移除 ,本遗物不再生效。" ] }, "bronze:DonusWashers": { diff --git a/src/main/resources/bronzeResources/localization/zhs/UIStrings.json b/src/main/resources/bronzeResources/localization/zhs/UIStrings.json index 1d380e3b3d..179d2f9455 100644 --- a/src/main/resources/bronzeResources/localization/zhs/UIStrings.json +++ b/src/main/resources/bronzeResources/localization/zhs/UIStrings.json @@ -30,9 +30,9 @@ "错误:队列为空", " - 将提高 #b", " 点伤害的 #y无限循环 加入手牌。", - "选择一张牌变化", - "选择一张牌编码", - "选择一张牌" + "变化。", + "编码。", + "" ] }, "bronze:AutoTextHelper": { @@ -53,3 +53,4 @@ ] } } + diff --git a/src/main/resources/bronzeResources/localization/zht/RelicStrings.json b/src/main/resources/bronzeResources/localization/zht/RelicStrings.json index 9aa8e97463..53bf00f297 100644 --- a/src/main/resources/bronzeResources/localization/zht/RelicStrings.json +++ b/src/main/resources/bronzeResources/localization/zht/RelicStrings.json @@ -10,14 +10,16 @@ "NAME": "護目鏡", "FLAVOR": "仔細觀察。", "DESCRIPTIONS": [ - "回合結束時若 #ybronze:佇列 為空,獲得 #b4 點 #y格擋 。" + "回合結束時若 #ybronze:佇列 為空,獲得 #b", + " 點 #y格擋 。" ] }, "bronze:DecasWashers": { "NAME": "八體墊片", "FLAVOR": "真不知道八體為何收藏這些。", "DESCRIPTIONS": [ - "每場戰鬥的前 #b3 個回合,額外抽 #b1 張牌。" + "每場戰鬥的前 #b", + " 個回合,額外抽 #b1 張牌。" ] }, "bronze:Timepiece": { @@ -67,7 +69,8 @@ "FLAVOR": "更新日誌: 提升用戶體驗。", "DESCRIPTIONS": [ "替換 ", - " 。 NL 每場戰鬥 #ybronze:編譯 的前 #b3 張 #ybronze:方法 首次耗能為 #b0 。" + " 。 NL 每場戰鬥 #ybronze:編譯 的前 #b", + " 張 #ybronze:方法 首次耗能為 #b0 。" ] }, "bronze:BottledCode": { 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 0000000000..74798701d9 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 0000000000..891269c727 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/StanceDanceCrown.png b/src/main/resources/champResources/images/cards/StanceDanceCrown.png new file mode 100644 index 0000000000..74798701d9 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 0000000000..891269c727 Binary files /dev/null and b/src/main/resources/champResources/images/cards/StanceDanceCrown_p.png differ diff --git a/src/main/resources/champResources/localization/deu/CardStrings.json b/src/main/resources/champResources/localization/deu/CardStrings.json new file mode 100644 index 0000000000..dbdaf59607 --- /dev/null +++ b/src/main/resources/champResources/localization/deu/CardStrings.json @@ -0,0 +1,397 @@ +{ + "champ:Strike": { + "NAME": "Schlag", + "DESCRIPTION": "Füge !D! Schaden zu." + }, + "champ:Defend": { + "NAME": "Verteidigen", + "DESCRIPTION": "Erhalte !B! Block." + }, + "champ:Taunt": { + "NAME": "Verspotten", + "DESCRIPTION": "Wende !M! Schwach und !M! Verwundbar an.", + "UPGRADE_DESCRIPTION": "Wende !M! Schwach und !M! Verwundbar auf ALLE Gegner an." + }, + "champ:Execute": { + "NAME": "Hinrichten", + "DESCRIPTION": "Füge !cool! Mal !D! Schaden zu.", + "UPGRADE_DESCRIPTION": "Füge !cool! Mal !D! Schaden zu." + }, + "champ:StanceDance": { + "NAME": "Haltungstanz", + "DESCRIPTION": "Nimm eine *Haltung deiner Wahl an. NL Aktiviere ihren champ:Fertigkeitsbonus.", + "UPGRADE_DESCRIPTION": "Nimm eine *Haltung deiner Wahl an. NL Aktiviere ihren champ:Fertigkeitsbonus zweimal.", + "EXTENDED_DESCRIPTION": [ + "Nimm die champ:Offensivhaltung an.", + "Nimm die champ:Defensivhaltung an." + ] + }, + "champ:StanceDanceCrown": { + "NAME": "Inspiration", + "DESCRIPTION": "Behalten. NL Nimm eine zufällige *Haltung an, in der du dich nicht befindest. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Behalten. NL Nimm eine zufällige *Haltung an, in der du dich nicht befindest." + }, + "champ:SwordSigil": { + "NAME": "Kriegsbanner", + "DESCRIPTION": "Aktiviere den champ:Fertigkeitsbonus deiner *Haltung !M! Mal." + }, + "champ:FaceSlap": { + "NAME": "Maulschelle", + "DESCRIPTION": "Füge !D! Schaden zu. NL champ:Offensivcombo: Wende !M! Verwundbar an." + }, + "champ:FlashCut": { + "NAME": "Rückschlag", + "DESCRIPTION": "Füge !D! Schaden zu. NL champ:Defensivcombo: Erhalte !M! champ:Konter und !B! Block." + }, + "champ:DefensiveShout": { + "NAME": "Defensivschrei", + "DESCRIPTION": "Erhalte !M! champ:Konter. NL Nimm die champ:Defensivhaltung an." + }, + "champ:ShieldSigil": { + "NAME": "Kettenpeitsche", + "DESCRIPTION": "Füge !D! Schaden zu. NL champ:Fertigkeitsboni geben in diesem Zug !M! mehr *Elan und champ:Konter." + }, + "champ:FocusedDefense": { + "NAME": "Tänzeln & Ducken", + "DESCRIPTION": "Erhalte !B! Block. NL Erhalte !M! *Elan. NL Nimm die champ:Offensivhaltung an." + }, + "champ:FocusedBerserking": { + "NAME": "Stabile Haltung", + "DESCRIPTION": "Erschöpft. NL Führe, ohne die Haltung zu verlassen, !M! Mal aus: " + }, + "champ:SetATrap": { + "NAME": "Falle stellen", + "DESCRIPTION": "Erhalte !B! Block. NL champ:Defensivcombo: Wende !M! Schwach auf ALLE Gegner an." + }, + "champ:Backstep": { + "NAME": "Rückschritt", + "DESCRIPTION": "Erhalte !B! Block. NL Block wird durch *Elan zusätzlich erhöht." + }, + "champ:BerserkersShout": { + "NAME": "Offensivschrei", + "DESCRIPTION": "Erhalte !M! *Elan. NL Nimm die champ:Offensivhaltung an." + }, + "champ:RageSigil": { + "NAME": "Schlachtplan", + "DESCRIPTION": "Nimm die champ:Defensivhaltung an. NL Erhalte !B! Block. NL Spähe !M!." + }, + "champ:GutPunch": { + "NAME": "Ultimativer Hieb", + "DESCRIPTION": "Füge !D! Schaden zu. NL champ:Combo (jede Haltung): Nimm die champ:Ultimative *Haltung für 1 Zug an. NL Erschöpft." + }, + "champ:FanOfKnives": { + "NAME": "Klingensturm", + "DESCRIPTION": "Füge ALLEN Gegnern !D! Schaden zu. NL champ:Offensivcombo: NL Trifft zweimal.", + "UPGRADE_DESCRIPTION": "Füge ALLEN Gegnern !D! Schaden zu. NL champ:Offensivcombo: NL Trifft drei Mal." + }, + "champ:Devastate": { + "NAME": "Verwüsten", + "DESCRIPTION": "Füge !M! Mal !D! Schaden zu. Kostet [E] weniger für jeden *Abschluss, der in diesem Kampf gespielt wurde." + }, + "champ:Circumvent": { + "NAME": "Überlisten", + "DESCRIPTION": "Erhalte !B! Block. NL Ziehe !M! Karten. NL Wirf !M! Karten ab. NL champ:Defensivcombo: NL Wirf keine Karten ab." + }, + "champ:SkillfulDodge": { + "NAME": "Elegantes Ducken", + "DESCRIPTION": "Erhalte !B! Block. NL Erhalte !M! champ:Konter. NL champ:Defensivcombo: Erhöhe Block und champ:Konter um !cool!." + }, + "champ:TornadoPunch": { + "NAME": "Tornadohieb", + "DESCRIPTION": "Füge ALLEN Gegnern !D! Schaden zu. NL champ:Defensivcombo: Erhalte !B! Block für jeden getroffenen Gegner.", + "UPGRADE_DESCRIPTION": "Füge ALLEN Gegnern !D! Schaden zu. NL champ:Defensivcombo: Erhalte !B! Block für jeden getroffenen Gegner." + }, + "champ:EnGarde": { + "NAME": "En Garde!", + "DESCRIPTION": "Erhalte !B! Block. NL Wenn dein ganzes Block in diesem Zug verbraucht wird, dann erhalte im nächsten Zug !B! Block." + }, + "champ:ShieldSlam": { + "NAME": "Alles oder Nichts", + "DESCRIPTION": "Behalten. NL Ziehe !M! Karte.", + "UPGRADE_DESCRIPTION": "Behalten. NL Ziehe !M! Karten." + }, + "champ:EnchantShield": { + "NAME": "Schildzauber", + "DESCRIPTION": "Wähle eine Handkarte. Erhöhe ihren Block für diesen Kampf um !M!. NL Erschöpft.", + "EXTENDED_DESCRIPTION": [ + "Ein miserabler Zeitpunkt dafür." + ] + }, + "champ:BringItOn": { + "NAME": "Greif schon an!", + "DESCRIPTION": "Erhalte !B! Block. NL Erhalte !M! champ:Konter.", + "EXTENDED_DESCRIPTION": [ + "Ich bin gerade in keiner Haltung." + ] + }, + "champ:ShieldThrow": { + "NAME": "Schildwurf", + "DESCRIPTION": "Füge 2 Mal Schaden in Höhe deines *Blocks zu. Bist du nicht in champ:Defensivhaltung, geben Karten im nächsten Zug keinen Block.", + "EXTENDED_DESCRIPTION": [ + "Füge 2 Mal Schaden in Höhe deines *Blocks (!D!) zu. Bist du nicht in champ:Defensivhaltung, geben Karten im nächsten Zug keinen Block." + ] + }, + "champ:FalseCounter": { + "NAME": "Antäuschen", + "DESCRIPTION": "Erhalte !B! Block. NL Im nächsten Zug, ziehe 2 Karten und NL erhalte [E].", + "UPGRADE_DESCRIPTION": "Erhalte !B! Block. NL Im nächsten Zug, ziehe 2 Karten und NL erhalte [E] [E]." + }, + "champ:IronFortress": { + "NAME": "Launiges Zappeln", + "DESCRIPTION": "Erhalte immer, wenn du eine *Haltung annimmst, !M! Block." + }, + "champ:Lariat": { + "NAME": "Rückzug", + "DESCRIPTION": "Erhalte X Mal !B! Block. NL Aktiviere X Mal den champ:Fertigkeitsbonus deiner *Haltung." + }, + "champ:HoldFirm": { + "NAME": "Einstecken", + "DESCRIPTION": "Erhalte !B! Block. NL Erhalte !M! champ:Konter. NL Erhalte 1 bronze:Verschwimmen." + }, + "champ:ShieldWall": { + "NAME": "Eiserne Festung", + "DESCRIPTION": "Erhalte 2 Geschicklichkeit. NL Erhalte am Ende jedes Zuges !M! Block." + }, + "champ:Haymaker": { + "NAME": "Piledriver", + "DESCRIPTION": "Füge !D! Schaden zu. NL Wende 2 Verwundbar und 2 Schwach an." + }, + "champ:ViciousMockery": { + "NAME": "Verhöhnen", + "DESCRIPTION": "Erhalte !M! *Elan. NL Wende !DM! Schwach an. NL Aktiviere den champ:Fertigkeitsbonus deiner *Haltung.", + "EXTENDED_DESCRIPTION": [ + "champ:Offensivcombo: Erhalte !M! *temporäre Stärke. NL ", + "champ:Defensivcombo: Erhalte !M! *temporäre Geschicklichkeit." + ] + }, + "champ:PreciseThrust": { + "NAME": "Präziser Stoß", + "DESCRIPTION": "Füge !D! Schaden zu. NL champ:Offensivcombo: NL Füge !D! Schaden zu. NL champ:Defensivcombo: NL Erhalte !B! Block." + }, + "champ:CrookedStrike": { + "NAME": "Dosierter Schlag", + "DESCRIPTION": "Füge !D! Schaden zu. NL Verbraucht keinen *Elan." + }, + "champ:RapidStrikes": { + "NAME": "Überschlag", + "DESCRIPTION": "Füge !M! Mal !D! Schaden zu. Eine zufällige Schlag Karte auf deiner Hand kostet in diesem Zug 0." + }, + "champ:EnchantSword": { + "NAME": "Schwertzauber", + "DESCRIPTION": "Wähle eine Handkarte. Erhöhe ihren Schaden für diesen Kampf NL um !M!. NL Erschöpft.", + "EXTENDED_DESCRIPTION": [ + "Ein miserabler Zeitpunkt dafür." + ] + }, + "champ:BladeFlurry": { + "NAME": "Schlagserie", + "DESCRIPTION": "Füge !D! Schaden zu. NL Die nächste Schlag Karte in diesem Zug wird doppelt gespielt." + }, + "champ:SwordThrow": { + "NAME": "Schwertwurf", + "DESCRIPTION": "Füge !M! Mal !D! Schaden zu. Bist du nicht in champ:Offensivhaltung, kannst du im nächsten Zug keine *Angriffe spielen." + }, + "champ:MurderStrike": { + "NAME": "Durchschlag", + "DESCRIPTION": "Behalten. NL Füge !D! Schaden zu. Erhöhe den Schaden um !M! wenn du mit dieser Karte in der Hand eine Fertigkeit spielst." + }, + "champ:HeavySlash": { + "NAME": "Austeilen", + "DESCRIPTION": "Füge !D! Schaden zu. NL Erhalte im nächsten Zug *Elan in Höhe des ungeblockten Schadens." + }, + "champ:CheapShot": { + "NAME": "Fieser Trick", + "DESCRIPTION": "Füge !D! Schaden zu. NL Trifft bei Bossen zwei weitere Male. Anderenfalls wird das Ziel hermit:betäubt. NL Erschöpft." + }, + "champ:RisingSlash": { + "NAME": "Nachschlag", + "DESCRIPTION": "Behalten. NL Füge !D! Schaden zu - zweimal, wenn die letzte gespielte Karte ein champ:Abschluss war." + }, + "champ:Shatter": { + "NAME": "Zerbersten", + "DESCRIPTION": "Füge !D! Schaden zu. NL champ:Combo (jede Haltung): Wende !M! Schwach und !M! Verwundbar an." + }, + "champ:EnragedBash": { + "NAME": "Brutaler Hieb", + "DESCRIPTION": "Füge !D! Schaden zu. NL champ:Offensivcombo: NL Trifft in diesem Kampf ein weiteres Mal.", + "EXTENDED_DESCRIPTION": [ + "Füge !M! Mal !D! Schaden zu. NL champ:Offensivcombo: NL Trifft in diesem Kampf ein weiteres Mal." + ] + }, + "champ:VampiricStrike": { + "NAME": "Schmetterschlag", + "DESCRIPTION": "Füge !D! Schaden zu. NL Erhalte Block in Höhe des ungeblockten Schadens." + }, + "champ:AdrenalArmor": { + "NAME": "Adrenalrüstung", + "DESCRIPTION": "Erhalte !B! Block. NL Erhalte !M! *temporäre Stärke." + }, + "champ:HeartStrike": { + "NAME": "Exekutieren", + "DESCRIPTION": "Füge !D! Schaden zu - zweimal, wenn seine TP unter !M! % liegen.", + "EXTENDED_DESCRIPTION": [ + "Ein miserabler Zeitpunkt dafür.", + "Dieser Gegner kann noch nicht exekutiert werden." + ] + }, + "champ:CrownThrow": { + "NAME": "Kronerang", + "DESCRIPTION": "Füge !D! Schaden zu. NL champ:Offensivcombo: NL Ziehe !M! Karten." + }, + "champ:Encircle": { + "NAME": "Umkreisen", + "DESCRIPTION": "Füge ALLEN Gegnern !D! Schaden zu. NL Ziehe für jeden getroffenen Gegner !M! Karte." + }, + "champ:LastStand": { + "NAME": "Letztes Aufgebot", + "DESCRIPTION": "Entferne alle Debuffs und erhalte !M! Stärke, sobald deine TP unter 50% fallen.", + "EXTENDED_DESCRIPTION": [ + "~Jetzt~ ~hast~ ~du~ ~es~ ~geschafft~ ~...~", + "@EINE@ @NIEDERLAGE??@ NL @UNMÖGLICH!!@" + ] + }, + "champ:RecklessLeap": { + "NAME": "Kühner Schlag", + "DESCRIPTION": "Füge !D! Schaden zu. NL Erhalte !M! Stärke. NL Nimm die champ:Offensivhaltung an. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Füge !D! Schaden zu. NL Erhalte !M! Stärke. NL Nimm die champ:Offensivhaltung an.", + "EXTENDED_DESCRIPTION": [ + "Ein miserabler Zeitpunkt dafür." + ] + }, + "champ:IgnorePain": { + "NAME": "Analgesie", + "DESCRIPTION": "Deine TP können bis zum Beginn des nächsten Zuges nicht fallen. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Deine TP können bis zum Beginn des nächsten Zuges nicht fallen. NL Erschöpft." + }, + "champ:DeathBlow": { + "NAME": "Todesstoß", + "DESCRIPTION": "Füge ALLEN Gegnern !D! Schaden zu. NL Erhalte !M! *Elan. NL Erschöpft." + }, + "champ:ArenaPreparation": { + "NAME": "Ausrüstung", + "DESCRIPTION": "Erhalte !M! zufällige Fertigkeiten. NL Sie erhalten Behalten. NL Erschöpft." + }, + "champ:SteelEdge": { + "NAME": "Stählerne Klinge", + "DESCRIPTION": "Füge X Mal !D! Schaden zu und führe X Mal (mindestens 1 Mal) aus:", + "EXTENDED_DESCRIPTION": [ + "champ:Offensivcombo: Füge X Mal !D! Schaden zu. NL ", + "champ:Defensivcombo: Erhalte X Mal !B! Block.", + "Gladiator: Ziehe eine Karte und erhalte [E].", + "Gladiator: Ziehe 2 Karte und erhalte [E].", + "champ:Combo NL " + ] + }, + "champ:Improvising": { + "NAME": "Improvisation", + "DESCRIPTION": "Immer wenn du eine *Haltung annimst, aktiviere ihren champ:Fertigkeitsbonus NL !M! Mal." + }, + "champ:CalledShot": { + "NAME": "Erfrischung", + "DESCRIPTION": "champ:Offensivcombo: NL Erhalte [E] [E] und erschöpfe diese Karte. NL champ:Defensivcombo: NL Ziehe !M! Karten.", + "UPGRADE_DESCRIPTION": "champ:Offensivcombo: NL Erhalte [E] [E] [E] und erschöpfe diese Karte. NL champ:Defensivcombo: NL Ziehe !M! Karten.", + "EXTENDED_DESCRIPTION": [ + "champ:Offensivcombo: NL Erhalte [E] [E] und erschöpfe diese Karte. NL ", + "champ:Offensivcombo: NL Erhalte [E] [E] [E] und erschöpfe diese Karte. NL ", + "champ:Defensivcombo: NL Ziehe !M! Karten.", + "Ein miserabler Zeitpunkt dafür." + ] + }, + "champ:PerfectedStrike": { + "NAME": "Perfektionsschlag", + "DESCRIPTION": "Füge !D! Schaden zu. NL Fügt für JEDE deiner Schlag Karten !M! zusätzlichen Schaden zu." + }, + "champ:GladiatorForm": { + "NAME": "Gladiatorenform", + "DESCRIPTION": "Erhalte zu Beginn jedes Zuges !M! *Elan für alle 3 verbrauchten *Elan im vorherigen Zug. Wiederhole dann diesen Vorgang für champ:Konter." + }, + "champ:Duel": { + "NAME": "Herausfordern", + "DESCRIPTION": "Erhalte !B! Block. NL Füge !D! Schaden zu. NL Wiederhole das, wenn das Ziel Stärke hat.", + "UPGRADE_DESCRIPTION": "Erhalte !B! Block. NL Füge !D! Schaden zu. NL Wiederhole das, wenn das Ziel Stärke hat." + }, + "champ:DancingMaster": { + "NAME": "Tanzchampion", + "DESCRIPTION": "Wenn du das erste Mal im Zug einen champ:Abschluss spielst, ziehe 1 Karte und erhalte [E]." + }, + "champ:StrikeOfGenius": { + "NAME": "Schlagfertig", + "DESCRIPTION": "Erhalte zu Beginn jedes Zuges ein gremlin:Echo einer zufälligen Schlag Karte. NL Es kostet 0 bis du es spielst.", + "UPGRADE_DESCRIPTION": "Erhalte zu Beginn jedes Zuges ein gremlin:Echo einer zufälligen verbesserten Schlag Karte. NL Es kostet 0 bis du es spielst." + }, + "champ:DefensiveStyle": { + "NAME": "Doppelter Stil", + "DESCRIPTION": "champ:Fertigkeitsboni geben !M! mehr *Elan und champ:Konter." + }, + "champ:GladiatorStyle": { + "NAME": "Sauberer Kampf", + "DESCRIPTION": "champ:Offensivcombo: NL Erhalte !M! Stärke. NL champ:Defensivcombo: NL Erhalte !M! Geschicklichkeit." + }, + "champ:BerserkerStyle": { + "NAME": "Klinge schleifen", + "DESCRIPTION": "Schlag Karten fügen !M! mehr Schaden zu." + }, + "champ:Riposte": { + "NAME": "Konterschlag", + "DESCRIPTION": "Flüchtig. NL Füge !D! Schaden zu. NL Erschöpft." + }, + "champ:Endure": { + "NAME": "Erdulden", + "DESCRIPTION": "Nimm die champ:Defensivhaltung an. NL Erhalte !B! Block. Block wächst mit Stärke anstelle von Geschicklichkeit.", + "UPGRADE_DESCRIPTION": "Nimm die champ:Defensivhaltung an. NL Erhalte !B! Block. Block wächst mit Stärke UND Geschicklichkeit." + }, + "champ:PreemptiveStrike": { + "NAME": "Präventivschlag", + "DESCRIPTION": "Füge ALLEN Gegnern Schaden in Höhe deines champ:Konters zu. Verliere die Hälfte des champ:Konters. champ:Defensivcombo: Verliere kein champ:Konter.", + "EXTENDED_DESCRIPTION": [ + " NL (Fügt !D! Schaden zu)", + "Ein miserabler Zeitpunkt dafür." + ] + }, + "champ:Parry": { + "NAME": "Parieren", + "DESCRIPTION": "Erhalte !B! Block. NL Erhalte !M! champ:Konter. NL Wenn champ:Konter in diesem Zug verbraucht wird, erhalte einen weiteren *Konterschlag.", + "UPGRADE_DESCRIPTION": "Flüchtig. NL Füge Schaden in Höhe des verbrauchten champ:Konters zu. NL Erschöpft." + }, + "champ:EnchantCrown": { + "NAME": "Kronenzauber", + "DESCRIPTION": "Wähle eine Handkarte. Sie kostet in diesem Kampf 0. NL Erschöpft.", + "EXTENDED_DESCRIPTION": [ + "Ein miserabler Zeitpunkt dafür." + ] + }, + "champ:ModFinisherStrike": { + "NAME": "Abschlussschlag", + "DESCRIPTION": "Behalten. NL Füge !D! Schaden zu." + }, + "champ:UltimateStance": { + "NAME": "Siegespose", + "DESCRIPTION": "Während deines nächsten Zuges bist du in der champ:Ultimativen *Haltung. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Erfordert eine *Haltung. NL Nimm die champ:Ultimative *Haltung für !M! Züge an.", + "EXTENDED_DESCRIPTION": [ + "Ich bin gerade in keiner Haltung." + ] + }, + "champ:FancyFootwork": { + "NAME": "Graziöser Gang", + "DESCRIPTION": "Nimm eine zufällige *Haltung an, in der du dich nicht befindest. Der nächste champ:Abschluss des Zuges fügt ALLEN Gegnern !M! Schaden zu." + }, + "champ:TripleStrike": { + "NAME": "Dreifachschlag", + "DESCRIPTION": "Füge !D! Schaden zu. NL Erhalte 2 Basis *Schlag gremlin:Echos. Sie kosten 0 und aktivieren den champ:Fertigkeitsbonus.", + "UPGRADE_DESCRIPTION": "Füge !D! Schaden zu. NL Erhalte 2 Basis *Schlag+ gremlin:Echos. Sie kosten 0 und aktivieren den champ:Fertigkeitsbonus." + }, + "champ:WindUp": { + "NAME": "Aufziehen", + "DESCRIPTION": "Nimm eine *Haltung deiner Wahl an. NL Schnappe einen champ:Abschluss aus dem Nachziehstapel. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Nimm eine *Haltung deiner Wahl an. NL Schnappe einen champ:Abschluss aus dem Nachziehstapel.", + "EXTENDED_DESCRIPTION": [ + "Nimm die champ:Offensivhaltung an.", + "Nimm die champ:Defensivhaltung an." + ] + }, + "champ:Headbutt": { + "NAME": "Kopfnuss", + "DESCRIPTION": "Füge !D! Schaden zu. NL Lege eine Karte aus dem Abwurfstapel auf den Nachziehstapel." + } +} \ No newline at end of file diff --git a/src/main/resources/champResources/localization/deu/CharacterStrings.json b/src/main/resources/champResources/localization/deu/CharacterStrings.json new file mode 100644 index 0000000000..b094943c8e --- /dev/null +++ b/src/main/resources/champResources/localization/deu/CharacterStrings.json @@ -0,0 +1,74 @@ +{ + "champ:theChamp": { + "NAMES": [ + "Der Champ", + "der Champ" + ], + "TEXT": [ + "Der unumstrittene Arena-Champion. NL Er hat noch nie einen Kampf verloren.", + "NL Du ziehst deine Klinge...", + "Auf einer unbeleuchteten Straße triffst du auf ein paar vermummte Gestalten, die gerade mitten in irgendeinem dunklen Ritual sind. Als du näher kommst, wenden sie sich dir in gespenstischem Gleichklang zu. Der Größte von ihnen entblößt Fangzähne und streckt eine lange, blasse Hand nach dir aus. NL ~„Schließ~ ~dich~ ~uns~ ~an,~ ~Champion,~ ~und~ ~spüre~ ~die~ ~Wärme~ ~des~ ~Spire.“~", + "#rOffensivhaltung", + "#bDefensivhaltung", + "#Gladiatorenhaltung", + "Keine", + "ULTIMATIVE Haltung", + "Fertigkeitsbonus", + "Abschlussbonus", + "#yElan #b", + "Erhalte #b1 #yStärke.", + "Erhalte #b", + "Erhalte #b8 #yBlock.", + "Ziehe #b", + "Im nächsten Zug, ziehe #b1 Karte und Erhalte [E] .", + "Offensiv-Fertigkeitsbonus", + "Defensiv-Fertigkeitsbonus", + "Gladiatoren-Fertigkeitsbonus", + "#yElan #b", + "Erhalte #b1 #yStärke. Erhalte #b", + "Zählt gleichzeitig als #rOffensivhaltung und #bDefensivhaltung. Wenn du die Haltung in diesem Zug verlässt, nimm sie sofort wieder an.", + " Züge.", + "Aktuelle Haltung", + "#rOffensiv", + "#bDefensiv", + "#yGladiator", + "Keine", + "Pah. Der Kampf ist viel zu einfach.", + "[crown_icon] champ:Technik NL ", + "[crown_icon] : Ziehe eine Karte. NL ", + "[crown_icon] : Erhalte ", + "[crown_icon] : ", + "[crown_icon] : Alle Boni. NL ", + " NL [fist_icon] champ:Abschluss", + " NL [fist_icon] : [E] & [card_icon] im nächsten Zug.", + " NL [fist_icon] : Erhalte ", + " NL [fist_icon] : Erhalte 1 Stärke.", + " NL [fist_icon] : Alle Boni.", + "Elan erhöht den Schaden des nächsten Angriffs.", + "Fertigkeitsbonus", + "Wenn du in einer #yHaltung bist, dann aktiviere ihren Fertigkeitsbonus.", + "Abschluss", + "Erfordert eine Haltung. NL Nach dem Spielen eines Abschlusses, verlasse die #yHaltung und aktiviere den Abschlussbonus.", + "Ich habe nicht genug Block.", + "#yElan und Erhalte #b", + " #yElan.", + " #yKonter.", + " Karte.", + " Karten.", + "[crown_icon] : Ziehe ", + " Karten. NL ", + ". NL ", + " champ:Konter. NL ", + " Elan. NL ", + ".", + " #yBlock.", + " Block.", + " und Erhalte #b", + " #yKonter.", + " #yBlock. Verlasse die #yUltimative #yHaltung nicht.", + "Ich bin gerade in keiner Haltung.", + "Noch übrig: #b", + " Kann bis zu 3 Mal aktiviert werden." + ] + } +} \ No newline at end of file diff --git a/src/main/resources/champResources/localization/deu/EventStrings.json b/src/main/resources/champResources/localization/deu/EventStrings.json new file mode 100644 index 0000000000..2859bbe01e --- /dev/null +++ b/src/main/resources/champResources/localization/deu/EventStrings.json @@ -0,0 +1,103 @@ +{ + "champ:ChampTalk": { + "NAME": "", + "DESCRIPTIONS": [ + "DU WILLST DEINEN GÜRTEL ZURÜCK?", + "DANN KOMM UND HOL IHN DIR!" + ], + "OPTIONS": [ + "" + ] + }, + "champ:Colosseum": { + "NAME": "Das Kolosseum", + "DESCRIPTIONS": [ + "Auf deinem Weg bemerkst du eine große Gruppe Humanoider, die auf den Einlass in ein großes Auditorium warten. Die Sklavenhändler erschrecken kurz als du auftauchst, doch erklären gleich darauf was los ist. NL NL „CHAMPION! Euer Erscheinen ehrt uns! Seid ihr hier, um gegen den neuen Herausforderer zu kämpfen?“", + "Ein neuer Herausforderer? Wie reizvoll! NL NL Doch womöglich muss der Herausforderer noch warten. Das Publikum liebt es zu sehen, wie der Champion den neuesten Fang filetiert...", + "Du betrittst ein riesiges Kolosseum und stehst in der Mitte. Die überbordenden Zuschauerreihen sind voller #bSlavernhändler, #pKultisten und anderer Stadtbewohner. NL NL ", + "@„WER@ @WAGT@ @ES@ @MICH@ @HERAUSZUFORDERN?!“@ rufst du in die Menge, während du diesen 'Herausforderer' heranwinkst. NL Ein Ritter nähert sich - seine Rüstung gleicht fast deiner eigenen. Nur, dass seine pechschwarz ist. Das Publikum jubelt dem Hochstapler mehr zu, als er es verdient hätte. NL NL Es kann nur einen Champion geben!", + "@„DER@ @NÄCHSTE@ @GEHÖRT@ @MIR!“@ rufst du in die Menge, die mit einem ohrenbetäubenden Applaus antwortet. NL NL Die Sklavenhändler bringen ihren neuesten Fang hinein. Der unfreiwillige Herausforderer erwacht, etwas ~angeschlagen~ vom Überfall, doch ist sofort kampfbereit. NL NL Das sieht nach Spaß aus.", + "Auch wenn die Verlockung groß ist, findest du, dass ein Kampf hier nur Zeitverschwendung wäre. Deine Reise geht weiter, so auch die Überfälle der Sklavenhändler.", + "Schwarzer Ritter" + ], + "OPTIONS": [ + "[Titel verteidigen] #rGegner: #rSchwarzer #rRitter. #gErhalte #gviele #gBelohnungen.", + "[Teilnehmen] #rGegner: #rGefangener #rHeld. #gErhalte #gviele #gBelohnungen.", + "[Verlassen]", + "[KÄMPFEN!]", + "[Weiter]" + ] + }, + "champ:Library": { + "NAME": "Die Bibliothek", + "DESCRIPTIONS": [ + "Du erblickst das Quell des Wissens in der Stadt: die Alte Bibliothek. NL Drinnen findest du zahllose Schriftrollen, Manuskripte und Bücher. NL Du könntest dir eines nehmen und etwas stille Zeit auf einem gemütlichen Stuhl genießen, oder die Zeit nutzen um nach ein Buch zu suchen, das von Kampfkunst handelt.", + "Du verbringst viel Zeit damit, die großen Hallen nach Wälzern und Handbüchern abzusuchen, bis du endlich etwas findest, wonach du gesucht hast. NL NL Du machst es dir auf einem Stuhl gemütlich und liest von Techniken, die du schon fast vergessen hättest. Selbst ein perfekter Gladiator wie du weiß, dass man nicht nur den Körper, sondern auch den Geist trainieren und stimulieren muss." + ], + "OPTIONS": [ + "[Suchen] #gSuche #gnach #geinem #gKampfbuch.", + "[Gesperrt] Du besitzt alle Kampfbücher." + ] + }, + "champ:TechniqueTome": { + "NAME": "Enzyklopädie der Techniken", + "DESCRIPTIONS": [ + "Während du etwas abseits des Weges wanderst, spürst du eine immense Kraft, die dich anzieht. Fast schon wie von selbst machst du Schritt für Schritt in Richtung eines Podestes, auf dem ein massiver Wälzer liegt - umhüllt von einer scheurigen Art Energie. NL Du näherst dich dem Buch uns siehst plötzlich Skizzen und Zeichnungen von Attacken, Techniken und Kampfhaltungen auf Seiten, die eben noch ganz leer waren. NL NL Es ist fast zu schön um wahr zu sein - alles was du jemals über das Kämpfen wissen willst und kannst steht dort geschrieben und gezeichnet. Diese Gelegenheit muss genutzt werden!", + "Unglaublich! Die Techniken des Buches sind atemberaubend. Jedes Wort und jede Skizze springt förmlich direkt in deinen Kopf und eröffnet dir neue Möglichkeiten, wie du deine Gegner abschlachten kannst. NL NL Doch dieses Wissen kommt nicht ohne Kehrseite - du spürst, wie es deine Psyche belastet. Doch es gibt noch viel zu lernen...", + "Jawohl. Noch mehr Techniken. Du kannst jetzt nicht aufhören. Fast ohne Zurückhaltung saugst du das Wissen auf, das der Wälzer dir zur Verfügung stellt. NL NL Du bist bereit, noch mehr deiner Lebenskraft zu opfern, um von der Weisheit des Buches zu profitieren. Es gibt weiterhin viel zu lernen...", + "Es kostet dich viel deiner Willenskraft, dem Verlangen nachzugeben vom Buch zu lesen. Womöglich kehrst du hierhin zurück, doch jetzt gibt es Wichtigeres zu tun.", + "Das Wissen in diesem Buch ist fast jeden Preis wert. Es kostet viel Kraft sich vom sprichwörtlichen Griff des Buches zu lösen, doch du schaffst es. NL NL Du kannst es kaum erwarten, dein neues Wissen auf das nächste Opfer anzuwenden." + ], + "OPTIONS": [ + "[Lesen] Füge einem Angriff #y'aktiviere #yFertigkeitsbonus' hinzu. #rVerliere #r", + " #rTP.", + "[Verlassen]", + "[Gesperrt] Erfordert einen Angriff.", + "Wähle eine Karte um 'aktiviere Fertigkeitsbonus' hinzuzufügen.", + "[Lesen] Füge einem Angriff #y'aktiviere #yFertigkeitsbonus' hinzu. #rVerflucht #r- #rStolz." + ] + }, + "champ:Gym": { + "NAME": "Trainingshalle", + "DESCRIPTIONS": [ + "Entlang des Weges kommst du an der Trainingshalle des Exordium vorbei - ein Ort, den du regelmäßig besuchst, um deinen Körper in Form zu halten. NL NL Jetzt wo du schon hier bist, wäre es eine verschwendete Gelegenheit, nicht vorbeizusehen. Um der Beste zu bleiben, darfst du nicht aufhören, an dir zu arbeiten.", + "Heute ist Ausdauertraining dran. Mit der vollen Rüstung absolvierst du einige Runden auf der Laufstrecke. NL NL Voller Adrenalin und Energie verlässt du die Trainingshalle, bereit die Bedrohung des Spire zu zerschlagen.", + "Heute ist Kampftraining an der Reihe. Du siehst dich nach jemanden um, der so aussieht als könnte er ein paar Schläge einstecken. Du packst ihn an den Schultern und wirfst ihn in den Ring. Nach einigen Runden ist er schon KO. NL NL Der Kampf war keine Herausforderung, doch du hast eine neue Technik entwickelt, wie man einen Kampf beginnen kann.", + "Das heutige Training steht ganz im Zeichen des Oberkörpers. Du nimmst dir die schwersten Gewichte und Widerstände und absolvierst einige Sätze. Nach dem Training spürst du, dass dir das Gewichtheben ein wenig leichter fällt. NL NL Als du die Trainingshalle verlässt, machst du dir im Kopf die Notiz, dass beim nächsten Mal Beintraining an der Reihe ist. Das Beintraining darfst du nicht schwänzen!" + ], + "OPTIONS": [ + "[Cardio] #gErhalte #g", + " #gmax. #gTP.", + "[Sparring] Eine nicht-Abschluss Karte erhält 'Nimm #y(Haltung) an'.", + "[Gewichtheben] #gBeginne #gjeden #gKampf #gmit #g1 #gStärke.", + "[Verlassen]", + "Wähle eine nicht-Abschluss Karte um 'Nimm Defensiv an' hinzuzufügen.", + "Wähle eine nicht-Abschluss Karte um 'Nimm Gladiator an' hinzuzufügen.", + "Wähle eine nicht-Abschluss Karte um 'Nimm Offensiv an' hinzuzufügen.", + "[Gesperrt] Benötigt eine nicht-Abschluss Karte die keine Haltung annimmt." + ] + }, + "champ:MinorLeagueArena": { + "NAME": "Unterliga-Arena", + "DESCRIPTIONS": [ + "Auf deinem Weg entdeckst du eine bekanntes Wahrzeichen des Exordium - eine Arena in der früher die blutigen Spiele stattfanden, die mittlerweile im großen Kolosseum der Stadt über die Bühne gehen. Diese kleinere Arena bietet nun etwas schwächeren Kriegern die Möglichkeit, sich zu beweisen. Diese albernen Kämpfe sind zwar nicht ganz deine Liga, doch können sie für Ablenkung sorgen.", + "Du verlässt die Arena - das ist nur Zeitverschwendung. Du hörst, wie die Kämpfer erleichtert aufatmen. Keiner von ihnen war wohl dazu bereit, heute durch deine Hand zu sterben." + ], + "OPTIONS": [ + "[Kämpfe gegen Zenturio & Mystikerin] #gErhalte #gden #gManschettenknopf.", + "[Kämpfe gegen Gremlin-Aristo] #gErhalte #gden #gChampiongürtel.", + "[Kämpfe gegen 2 Sklavenhändler] #gErhalte #gdas #gHufeisen.", + "[Verlassen]" + ] + }, + "champ:BackToBasics": { + "NAME": "", + "DESCRIPTIONS": [ + "Fähigkeiten und das Vertrauen in ihnen sind eine unschlagbare Kombination." + ], + "OPTIONS": [ + "[Intuition] Alle #gSchlag und #gVerteidigen Karten aktivieren den #yFertigkeitsbonus.", + "[Gesperrt] Erfordert einen Schlag oder ein Verteidigen." + ] + } +} \ No newline at end of file diff --git a/src/main/resources/champResources/localization/deu/KeywordStrings.json b/src/main/resources/champResources/localization/deu/KeywordStrings.json new file mode 100644 index 0000000000..066e8f1a13 --- /dev/null +++ b/src/main/resources/champResources/localization/deu/KeywordStrings.json @@ -0,0 +1,122 @@ +[ + { + "PROPER_NAME": "Fertigkeitsbonus", + "NAMES": [ + "bonus", + "boni", + "fertigkeitsbonus", + "fertigkeitsboni", + "technik", + "techniken", + "bonus", + "bonuses", + "technique", + "techniques", + "champ:[crown_icon]", + "[crown_icon]" + ], + "DESCRIPTION": "Wenn du in einer #yHaltung bist, aktiviere ihren Fertigkeitsbonus. NL #rOffensiver #yFertigkeitsbonus: Erhalte #b2 #yElan [REMOVE_SPACE]. NL #bDefensiver #yFertigkeitsbonus: Erhalte #b3 #yKonter [REMOVE_SPACE]." + }, + { + "PROPER_NAME": "Combo", + "NAMES": [ + "combo", + "combo:", + "offensivcombo", + "defensivcombo", + "offensivcombo:", + "defensivcombo:", + "combo" + ], + "DESCRIPTION": "Zusätzlicher Effekt einer Karte der aktiviert wird, wenn man sich in der passenden #yHaltung befindet." + }, + { + "PROPER_NAME": "Schlag", + "NAMES": [ + "schlag", + "schläge", + "strike", + "strikes" + ], + "DESCRIPTION": "Jede Karte mit \"Schlag\" im Namen." + }, + { + "PROPER_NAME": "Abschluss", + "NAMES": [ + "abschluss", + "abschlüsse", + "abschlusses", + "abschlusskarte", + "abschlusskarten", + "abschlussbonus", + "abschließen", + "abschließt", + "finisher", + "finishers", + "[fist_icon]", + "champ:[fist_icon]" + ], + "DESCRIPTION": "Abschlusskarten erfordern zum Ausspielen eine #yHaltung. NL Nach dem Spielen eines Abschlusses, verlasse die #yHaltung und aktiviere den Abschlussbonus. NL #rOffensiver #yAbschlussbonus: Erhalte #b1 #yStärke [REMOVE_SPACE]. NL #bDefensiver #yAbschlussbonus: Erhalte #b6 #yBlock [REMOVE_SPACE]." + }, + { + "PROPER_NAME": "Konter", + "NAMES": [ + "konter", + "konters", + "counter" + ], + "DESCRIPTION": "Wenn du das nächste Mal angegriffen wirst, verliere dein Konter und erhalte einen #yKonterschlag der Schaden in Höhe des verbrauchten Konters zufügt." + }, + { + "PROPER_NAME": "Defensivhaltung", + "NAMES": [ + "defensiv", + "defensivhaltung", + "defensive", + "defensive." + ], + "DESCRIPTION": "#yHaltung. NL #yFertigkeitsbonus: Erhalte #b3 #yKonter [REMOVE_SPACE]. NL #yAbschlussbonus: Erhalte #b6 #yBlock [REMOVE_SPACE]." + }, + { + "PROPER_NAME": "Offensivhaltung", + "NAMES": [ + "offensiv", + "offensivhaltung", + "berserker", + "berserker." + ], + "DESCRIPTION": "#yHaltung. NL #yFertigkeitsbonus: Erhalte #b2 #yElan [REMOVE_SPACE]. NL #yAbschlussbonus: Erhalte #b1 #yStärke [REMOVE_SPACE]." + }, + { + "PROPER_NAME": "Gladiatorenhaltung", + "NAMES": [ + "gladiator", + "gladiatorenhaltung", + "gladiator", + "gladiator." + ], + "DESCRIPTION": "#yHaltung. NL #yFertigkeitsbonus: Ziehe eine Karte. NL #yAbschlussbonus: Im nächsten Zug, ziehe #b1 Karte und erhalte [E]. Beende deinen Zug." + }, + { + "PROPER_NAME": "Ultimative Haltung", + "NAMES": [ + "ultimativ", + "ultimative", + "ultimativen", + "ultimate", + "ultimate." + ], + "DESCRIPTION": "#yHaltung [REMOVE_SPACE]. Zählt gleichzeitig als #bDefensivhaltung und #rOffensivhaltung [REMOVE_SPACE]. NL Wenn du diese #yHaltung in deinem Zug verlässt, nimm sie sofort wieder an." + }, + { + "PROPER_NAME": "Ermüdung", + "NAMES": [ + "ermüdung", + "ermüdet", + "fatigue", + "fatigued", + "fatigue." + ], + "DESCRIPTION": "Verliere TP. Heile TP die durch #yErmüdung verloren wurden am Ende des Kampfes. Du kannst nicht vor #yErmüdung sterben." + } +] diff --git a/src/main/resources/champResources/localization/deu/MonsterStrings.json b/src/main/resources/champResources/localization/deu/MonsterStrings.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/src/main/resources/champResources/localization/deu/MonsterStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/champResources/localization/deu/OrbStrings.json b/src/main/resources/champResources/localization/deu/OrbStrings.json new file mode 100644 index 0000000000..31010fd14f --- /dev/null +++ b/src/main/resources/champResources/localization/deu/OrbStrings.json @@ -0,0 +1,7 @@ +{} + + + + + + diff --git a/src/main/resources/champResources/localization/deu/PotionStrings.json b/src/main/resources/champResources/localization/deu/PotionStrings.json new file mode 100644 index 0000000000..5cd9ede280 --- /dev/null +++ b/src/main/resources/champResources/localization/deu/PotionStrings.json @@ -0,0 +1,32 @@ +{ + "champ:OpenerPotion": { + "NAME": "Strategietrank", + "DESCRIPTIONS": [ + "Wähle #b1 von #b2 zufälligen Karten die eine #yHaltung annehmen (eine pro #yHaltung [REMOVE_SPACE]).", + " Nimm #b", + " Kopie auf die Hand. Sie kostet diesen Zug #b0 [REMOVE_SPACE].", + " Kopien auf die Hand. Sie kosten diesen Zug #b0 [REMOVE_SPACE]." + ] + }, + "champ:TechniquePotion": { + "NAME": "Technikflasche", + "DESCRIPTIONS": [ + "Aktiviere den #yFertigkeitsbonus deiner #yHaltung #b", + " Mal." + ] + }, + "champ:UltimateStancePotion": { + "NAME": "Stimpack", + "DESCRIPTIONS": [ + "Nimm die #yUltimative #yHaltung für #b", + " Zug an." + ] + }, + "champ:CounterPotion": { + "NAME": "Gebräu der Schärfe", + "DESCRIPTIONS": [ + "Erhalte #b", + " #yKonter [REMOVE_SPACE]." + ] + } +} diff --git a/src/main/resources/champResources/localization/deu/PowerStrings.json b/src/main/resources/champResources/localization/deu/PowerStrings.json new file mode 100644 index 0000000000..e45becd14e --- /dev/null +++ b/src/main/resources/champResources/localization/deu/PowerStrings.json @@ -0,0 +1,251 @@ +{ + "champ:CounterPower": { + "NAME": "Konter", + "DESCRIPTIONS": [ + "Wenn du das nächste Mal angegriffen wirst, verliere dein Konter und erhalte einen #yGegenschlag der #b", + " Schaden zufügt." + ] + }, + "champ:FocusedDefPower": { + "NAME": "Defensiver Fokus", + "DESCRIPTIONS": [ + "Wenn du einen #yAbschluss spielst erhältst du #b", + " #yBlock [REMOVE_SPACE]." + ] + }, + "champ:FocusedBerPower": { + "NAME": "Graziöser Gang", + "DESCRIPTIONS": [ + "Wenn du in diesem Zug einen #yAbschluss spielst, dann füge ALLEN Gegnern #b", + " Schaden zu." + ] + }, + "champ:ShieldWallPower": { + "NAME": "Schildmauer", + "DESCRIPTIONS": [ + "Erhalte am Ende deines Zuges #b", + " #yKonter [REMOVE_SPACE]." + ] + }, + "champ:EntangleNextTurnPower": { + "NAME": "Schwert verloren", + "DESCRIPTIONS": [ + "Du kannst im nächsten Zug keine #yAngriffe ausspielen.", + "Du kannst in den nächsten #b", + " Zügen keine #yAngriffe ausspielen." + ] + }, + "champ:DrawLessNextTurnPower": { + "NAME": "Weniger Ziehen", + "DESCRIPTIONS": [ + "Ziehe im nächsten Zug #b", + " Karte weniger.", + " Karten weniger." + ] + }, + "champ:PushThroughPower": { + "NAME": "Analgesie", + "DESCRIPTIONS": [ + "Du kannst in diesem Zug keine TP verlieren.", + "Du kannst in dein nächsten #b", + " Zügen keine TP verlieren." + ] + }, + "champ:WorseRupturePower": { + "NAME": "Endlose Wut", + "DESCRIPTIONS": [ + "Erhalte immer, wenn du während deines Zuges TP verlierst, #b", + " #ytemporäre #yStärke [REMOVE_SPACE]." + ] + }, + "champ:ImprovisingPower": { + "NAME": "Improvisieren", + "DESCRIPTIONS": [ + "Immer wenn du eine #yHaltung annimst, aktiviere ihren #yFertigkeitsbonus #b", + " Mal." + ] + }, + "champ:CalledShotPower": { + "NAME": "Standhaft bleiben", + "DESCRIPTIONS": [ + "Bleibe das nächste Mal wenn du #yabschließt in deiner #yHaltung.", + "Bleibe die nächsten #b", + " Male die du #yabschließt in deiner #yHaltung." + ] + }, + "champ:DancingMasterPower": { + "NAME": "Tanzchampion", + "DESCRIPTIONS": [ + "Wenn du im Zug das erste Mal einen #yAbschluss spielst, erhalte #b", + " [E] und ziehe #b", + " Karten. ", + "", + "Bereits in diesem Zug aktiviert.", + "" + ] + }, + "champ:StrikeOfGeniusPower": { + "NAME": "Schlagfertig", + "DESCRIPTIONS": [ + "Erhalte zu Beginn jedes Zuges ein gremlin:Echo einer zufälligen \"Schlag\" Karte. Es kostet #b0 bis du es spielst.", + "Erhalte zu Beginn jedes Zuges #b", + " gremlin:Echos von zufälligen \"Schlag\" Karten. Sie kosten #b0 bis du sie spielst." + ] + }, + "champ:StrikeOfGeniusUpgradedPower": { + "NAME": "Genieschlag+", + "DESCRIPTIONS": [ + "Erhalte zu Beginn jedes Zuges ein gremlin:Echo einer zufälligen verbesserten \"Schlag\" Karte. Es kostet #b0 bis du es spielst.", + "Erhalte zu Beginn jedes Zuges #b", + " gremlin:Echos von zufälligen verbesserten \"Schlag\" Karten. Sie kosten #b0 bis du sie spielst." + ] + }, + "champ:DefensiveStylePower": { + "NAME": "Defensivstil", + "DESCRIPTIONS": [ + "Erhöhe den #yKonter des #bdefensiven #yFertigkeitsbonuses um #b", + " [REMOVE_SPACE]." + ] + }, + "champ:GladiatorStylePower": { + "NAME": "Sauberer Kampf", + "DESCRIPTIONS": [ + "Erhalte wenn du deinen Zug ohne #yHaltung beginnst #b", + " #ytemporäre #yStärke und #ytemporäre #yGeschicklichkeit." + ] + }, + "champ:BerserkerStylePower": { + "NAME": "Offensivstil", + "DESCRIPTIONS": [ + "Erhöhe den #yElan des #roffensiven #yFertigkeitsbonuses um #b", + " [REMOVE_SPACE]." + ] + }, + "champ:FalseCounterPower": { + "NAME": "Falscher Konter", + "DESCRIPTIONS": [ + "Wenn du das nächste Mal #yKonter aktivierst, verliere nur die Hälfte.", + "Die nächsten #b", + " Male in denen du #yKonter aktivierst, verliere nur die Hälfte." + ] + }, + "champ:EnergizedDurationPower": { + "NAME": "Energiegeladen", + "DESCRIPTIONS": [ + "Du erhältst #b", + " [E] zusätzlich im nächsten Zug.", + " zusätzliche [E] im nächsten Zug.", + " - TRANSLATOR NOTE: - The above line is for plural if needed to distinguish from singular." + ] + }, + "champ:IronFortressPower": { + "NAME": "Launiges Zappeln", + "DESCRIPTIONS": [ + "Erhalte immer, wenn du eine #yHaltung annimmst, #b", + " #yBlock [REMOVE_SPACE]." + ] + }, + "champ:IronFortressVigorPower": { + "NAME": "Technisches Tänzeln: Offensiv", + "DESCRIPTIONS": [ + "Aktiviere immer wenn du eine #yHaltung annimmst den #roffensiven #yFertigkeitsbonus Bonus", + " #b", + " Mal." + ] + }, + "champ:LastStandMod": { + "NAME": "Letztes Aufgebot", + "DESCRIPTIONS": [ + "Wenn deine TP bei 50% oder darunter liegen, entferne alle Debuffs und erhalte ", + " #yStärke [REMOVE_SPACE]." + ] + }, + "champ:GladiatorFormPower": { + "NAME": "Gladiatorenform", + "DESCRIPTIONS": [ + "Erhalte zu Beginn jedes Zuges #b", + " #yElan für alle 3 verbrauchten #yElan im vorherigen Zug. Wiederhole dann diesen Vorgang für #yKonter." + ] + }, + "champ:NoBlockNextTurnPower": { + "NAME": "Schild verloren", + "DESCRIPTIONS": [ + "Karten geben im nächsten Zug kein #yBlock [REMOVE_SPACE].", + "Karten geben in deinen nächsten #b", + " Zügen kein #yBlock [REMOVE_SPACE]." + ] + }, + "champ:UltimateStancePower": { + "NAME": "Ultimativer Schwund", + "DESCRIPTIONS": [ + "Die #yUltimative #yHaltung wird nach diesem Zug verlassen.", + "Die #yUltimative #yHaltung wird nach #b", + " Zügen verlassen." + ] + }, + "champ:UltimateFormNextTurnPower": { + "NAME": "Ultimate Vorbereitung", + "DESCRIPTIONS": [ + "Nimm zu Beginn deines nächsten Zuges die #yUltimative #yHaltung an.", + " NL Sie hält für #b", + " Züge." + ] + }, + "champ:EnGardePower": { + "NAME": "En Garde", + "DESCRIPTIONS": [ + "Wenn dein #yBlock in diesem Zug vollständig verbraucht wird, erhalte im nächsten Zug #b", + " #yBlock [REMOVE_SPACE]." + ] + }, + "champ:ParryPower": { + "NAME": "Parieren", + "DESCRIPTIONS": [ + "Wenn #yKonter in diesem Zug verbraucht wird, erhalte einen zusätzlichen #yKonterschlag." + ] + }, + "champ:BoomerangPower": { + "NAME": "Bumerang", + "DESCRIPTIONS": [ + "Bring zu Beginn deines nächsten Zuges ", + " zurück auf die Hand. Es kostet #b0 und kommt nicht mehr zurück." + ] + }, + "champ:ResolvePower": { + "NAME": "Ermüdung", + "DESCRIPTIONS": [ + "Heile am Ende des Kampfes deine ermüdeten TP." + ] + }, + "champ:DualPlaySrikePower": { + "NAME": "Serienschlag", + "DESCRIPTIONS": [ + "In diesem Zug spielst du deine nächste #y\"Schlag\" Karte doppelt.", + "In diesem Zug spielst du deine nächsten ", + " #y\"Schlag\" Karten doppelt." + ] + }, + "champ:LastStandPower": { + "NAME": "Letztes Aufgebot", + "DESCRIPTIONS": [ + "Entferne alle Debuffs und erhalte #b", + " #yStärke sobald deine TP unter #b50% fallen.", + "~Jetzt~ ~hast~ ~du~ ~es~ ~geschafft~ ~...~", + "@EINE@ @NIEDERLAGE??@ NL @UNMÖGLICH!!@" + ] + }, + "champ:HonePower": { + "NAME": "Geschliffene Klinge", + "DESCRIPTIONS": [ + "Deine #y\"Schlag\" Karten fügen #b", + " mehr Schaden zu." + ] + }, + "champ:DoubleStyleThisTurnPower": { + "NAME": "Doppelter Stil", + "DESCRIPTIONS": [ + "In diesem Zug geben #yFertigkeitsboni #b", + " mehr #yElan und #yKonter [REMOVE_SPACE]." + ] + } +} \ No newline at end of file diff --git a/src/main/resources/champResources/localization/deu/RelicStrings.json b/src/main/resources/champResources/localization/deu/RelicStrings.json new file mode 100644 index 0000000000..b6a688a24d --- /dev/null +++ b/src/main/resources/champResources/localization/deu/RelicStrings.json @@ -0,0 +1,132 @@ +{ + "champ:ChampionCrown": { + "NAME": "Championkrone", + "FLAVOR": "A WINNER IS YOU!", + "DESCRIPTIONS": [ + "Du kannst ein Mal in jedem Kampf eine zufällige #yHaltung annehmen, in der du dich nicht befindest." + ] + }, + "champ:BlackKnightHelmet": { + "NAME": "Schwarzer Helm", + "FLAVOR": "Es ist nur eine Fleischwunde.", + "DESCRIPTIONS": [ + "Wenn du das erste Mal im Kampf die entsprechende #yHaltung annimst: NL #ychamp:Defensiv [REMOVE_SPACE]: #gErhalte #b2 #yGeschicklichkeit und #rverliere #b1 #yStärke [REMOVE_SPACE]. #ychamp:Offensiv [REMOVE_SPACE]: #gErhalte #b2 #yStärke und #rverliere #b1 #yGeschicklichkeit [REMOVE_SPACE]." + ] + }, + "champ:Barbells": { + "NAME": "Hantel", + "FLAVOR": "1000 Wiederholungen? Pah. Ich schaffe 1001.", + "DESCRIPTIONS": [ + "Wenn du ein Lagerfeuer mit mindestens #b", + " #yverbesserbaren Karten im Deck betrittst, dann #yverbessere eine zufällige Karte in deinem Deck." + ] + }, + "champ:BerserkersGuideToSlaughter": { + "NAME": "Berserker-Handbuch", + "FLAVOR": "Der Text ist unleserlich.", + "DESCRIPTIONS": [ + "Erhalte zu Beginn deines Zuges #b", + " #yElan [REMOVE_SPACE]." + ] + }, + "champ:ChampionCrownUpgraded": { + "NAME": "Krone des Sieges", + "FLAVOR": "Conglaturation!! You are the greatest winner.", + "DESCRIPTIONS": [ + "Ersetzt ", + " [REMOVE_SPACE].[] NL Wenn du das erste Mal im Zug einen #ychamp:Abschluss spielst, ziehe #b", + " Karten und nimm eine zufällige #yHaltung an." + ] + }, + "champ:DefensiveTrainingManual": { + "NAME": "Verteidigungstheorie", + "FLAVOR": "Sollten nicht eigentlich Theorien verteidigt werden?", + "DESCRIPTIONS": [ + "Erhöhe den #ychamp:Abschlussbonus der #bchamp:Defensivhaltung um weitere #b", + " #yBlock [REMOVE_SPACE]." + ] + }, + "champ:DeflectingBracers": { + "NAME": "Ablenkende Armschienen", + "FLAVOR": "Wenn du schon dachtest, dass Abblocken gut wäre...", + "DESCRIPTIONS": [ + "Erhalte zu Beginn deines Zuges #ychamp:Konter in Höhe der Hälfte es ungebrauchten NL #yBlock [REMOVE_SPACE]." + ] + }, + "champ:DuelingGlove": { + "NAME": "Fehdehandschuh", + "FLAVOR": "Zähle von zehn abwärts...", + "DESCRIPTIONS": [ + "Wenn du einen #yAngriff mit einem einzelnen Ziel auf einen Gegner spielst, der nicht #yVerwundbar ist, dann wende #b1 #yVerwundbar an." + ] + }, + "champ:FightingForDummies": { + "NAME": "Dolphins Stil-Leitfaden", + "FLAVOR": "Geschrieben vom renommierten Boxer und Entdecker Dolphin K. Mist.", + "DESCRIPTIONS": [ + "Wenn du deinen Zug ohne #yHaltung beendest, dann ziehe im nächsten Zug #b1 zusätzliche Karte." + ] + }, + "champ:GladiatorsBookOfMartialProwess": { + "NAME": "Lehren der Gladiatoren", + "FLAVOR": "Probiere alles aus - etwas wird schon hängenbleiben.", + "DESCRIPTIONS": [ + "Immer wenn du im selben Zug jeweils mindetens eine Karte mit #ychamp:Combo (egal ob aktiv oder nicht) und einen #ychamp:Abschluss ausspielst, sowie eine #yHaltung annimmst, erhalte #b1 #yStärke und #yGeschicklichkeit [REMOVE_SPACE]." + ] + }, + "champ:PowerArmor": { + "NAME": "Mächtige Rüstung", + "FLAVOR": "Wurde gebraucht gekauft.", + "DESCRIPTIONS": [ + "Erhalte in deinem Zug [E]. NL Dein #yElan und dein #ychamp:Konter können #b", + " nicht übersteigen." + ] + }, + "champ:RageAmulet": { + "NAME": "Amulett der Stärke", + "FLAVOR": "Verloren geglaubte Stärke fließt wieder durch dich, als ob sie nie weg gewesen wäre.", + "DESCRIPTIONS": [ + "Immer wenn du #yElan verbrauchst, erhalte für alle #b", + " ausgegebenen #yElan #b1 #yStärke [REMOVE_SPACE]." + ] + }, + "champ:SignatureFinisher": { + "NAME": "Spezialabschluss", + "FLAVOR": "Und jetzt kommt mein ULTIMATER MOVE!", + "DESCRIPTIONS": [ + "Wähle beim Aufheben eine #ychamp:Abschlusskarte [REMOVE_SPACE]. Diese #yAbschlusskarte kostet #b0 [REMOVE_SPACE], kann ohne #yHaltung ausgespielt werden, und bricht deine #yHaltung nicht ab.", + "Wähle eine Karte für den ", + " kostet #b0 [REMOVE_SPACE], kann ohne #yHaltung gespielt werden, und bricht deine #yHaltung nicht ab.", + "Die eingelegte Karte wurde aus dem Deck #rentfernt [REMOVE_SPACE]. Das Relikt hat keine Wirkung mehr." + ] + }, + "champ:SpectersHand": { + "NAME": "Phantomhand", + "FLAVOR": "Manche Siege bleiben bei dir.", + "DESCRIPTIONS": [ + "Erhalte immer, wenn du eine #yHaltung annimmst, ein #ygremlin:Echo einer Basis #ySchlag oder #yVerteidigen Karte. Es kostet #b0 [REMOVE_SPACE]." + ] + }, + "champ:LiftRelic": { + "NAME": "Innere Stärke", + "FLAVOR": "Es geht mehr um das riesige Schwert in deinem Herzen.", + "DESCRIPTIONS": [ + "Beginne jeden Kampf mit #b", + " #yStärke [REMOVE_SPACE]." + ] + }, + "champ:ChampStancesModRelic": { + "NAME": "Neuer Herausforderer", + "FLAVOR": "Hältst du der Krone stand?", + "DESCRIPTIONS": [ + "Beginne jeden Kampf in einer zufälligen Champ #yHaltung [REMOVE_SPACE]." + ] + }, + "downfall:BustedCrownGagText": { + "NAME": "Zerbrochene Krone", + "FLAVOR": "Nachahmung ist die aufrichtigste Form der Schmeichelei... oder doch nicht? Diese Krone sieht deiner nichtmal besonders ähnlich. Eigentlich ist sie eine Beleidigung.", + "DESCRIPTIONS": [ + "Bei Kartenbelohnungen hast du #b2 Karten weniger zur Auswahl. Erhalte in deinem Zug [E]." + ] + } +} \ No newline at end of file diff --git a/src/main/resources/champResources/localization/deu/RunModStrings.json b/src/main/resources/champResources/localization/deu/RunModStrings.json new file mode 100644 index 0000000000..f6b6fef2e8 --- /dev/null +++ b/src/main/resources/champResources/localization/deu/RunModStrings.json @@ -0,0 +1,6 @@ +{ + "Slimebound:AllSplit": { + "NAME": "Slime the Spire", + "DESCRIPTION": "All enemies Split into two Slime enemies." + } +} \ No newline at end of file diff --git a/src/main/resources/champResources/localization/deu/UIStrings.json b/src/main/resources/champResources/localization/deu/UIStrings.json new file mode 100644 index 0000000000..ab508c478c --- /dev/null +++ b/src/main/resources/champResources/localization/deu/UIStrings.json @@ -0,0 +1,44 @@ +{ + "champ:SealCommonReward": { + "TEXT": [ + "Erhalte eine gewöhnliche Karte" + ] + }, + "champ:SealSealReward": { + "TEXT": [ + "Erhalte ein Siegel" + ] + }, + "champ:TechniqueMod": { + "TEXT": [ + " NL Aktiviere den champ:Fertigkeitsbonus." + ] + }, + "champ:OpenerMod": { + "TEXT": [ + " NL Nimm die champ:Offensivhaltung an.", + " NL Nimm die champ:Defensivhaltung an.", + "Nimm die champ:Gladiatorenhaltung NL " + ] + }, + "champ:RetainCardMod": { + "TEXT": [ + "Behalten. NL " + ] + }, + "champ:EnchantUI": { + "TEXT": [ + "auf Kosten 0 setzt.", + "verstärkst.", + "verstärkst." + ] + }, + "champ:highlightCombos": { + "TEXT": [ + "champ:Offensivcombo:", + "[#5ebf2a] champ:Offensivcombo:", + "champ:Defensivcombo:", + "[#5ebf2a] champ:Defensivcombo:" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/champResources/localization/eng/CardStrings.json b/src/main/resources/champResources/localization/eng/CardStrings.json index a7dfada48f..bb5c809200 100644 --- a/src/main/resources/champResources/localization/eng/CardStrings.json +++ b/src/main/resources/champResources/localization/eng/CardStrings.json @@ -9,8 +9,8 @@ }, "champ:Taunt": { "NAME": "Taunt", - "DESCRIPTION": "Apply !M! Weak and 1 Vulnerable.", - "UPGRADE_DESCRIPTION": "Apply 1 Weak and 1 Vulnerable to ALL enemies." + "DESCRIPTION": "Apply !M! Weak and Vulnerable.", + "UPGRADE_DESCRIPTION": "Apply !M! Weak and Vulnerable to ALL enemies." }, "champ:Execute": { "NAME": "Execute", @@ -27,17 +27,13 @@ ] }, "champ:StanceDanceCrown": { - "NAME": "Champion's Crown", - "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." - ] + "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 champ:Bonus !M! times." + "DESCRIPTION": "Trigger your current *Stance's *Skill champ:Bonus !M! times." }, "champ:FaceSlap": { "NAME": "Face Slap", @@ -130,9 +126,9 @@ }, "champ:ShieldThrow": { "NAME": "Shield Throw", - "DESCRIPTION": "Deal damage equal to your Block, twice.", + "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." + "Deal damage equal to your Block ( !D! ) twice. NL If not in champ:Defensive, don't gain Block from cards next turn." ] }, "champ:FalseCounter": { @@ -146,7 +142,7 @@ }, "champ:Lariat": { "NAME": "Lariat", - "DESCRIPTION": "Gain !B! Block X times. NL Trigger your Stance's *Skill champ:Bonus X times." + "DESCRIPTION": "Gain !B! Block X times. NL Trigger your *Stance's *Skill champ:Bonus X times." }, "champ:HoldFirm": { "NAME": "Hold Firm", @@ -162,7 +158,7 @@ }, "champ:ViciousMockery": { "NAME": "Vicious Mockery", - "DESCRIPTION": "Gain !M! Vigor. NL Apply !DM! Weak. NL Trigger your Stance's *Skill champ:Bonus.", + "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." @@ -193,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", @@ -201,8 +197,7 @@ }, "champ:HeavySlash": { "NAME": "Masterful Slash", - "DESCRIPTION": "Deal !D! damage. NL At the start of your next turn, gain Vigor equal to unblocked damage dealt.", - "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", @@ -210,7 +205,7 @@ }, "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", @@ -224,7 +219,7 @@ ] }, "champ:VampiricStrike": { - "NAME": "Clobbering Strike", + "NAME": "Clobber Strike", "DESCRIPTION": "Deal !D! damage. NL Gain Block equal to unblocked damage dealt." }, "champ:AdrenalArmor": { @@ -289,7 +284,7 @@ }, "champ:Improvising": { "NAME": "Improvising", - "DESCRIPTION": "Enter a random Stance at the start of your turn if not in a Stance. NL Trigger *Skill champ:Bonus !M! times entering Stances." + "DESCRIPTION": "Whenever you enter a Stance, trigger its *Skill champ:Bonus !M! times." }, "champ:CalledShot": { "NAME": "Refreshment", @@ -342,8 +337,8 @@ }, "champ:Endure": { "NAME": "Endure", - "DESCRIPTION": "Enter champ:Defensive. NL Gain !B! Block, increased by *Strength.", - "UPGRADE_DESCRIPTION": "Enter champ:Defensive. NL Gain !B! Block, 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", @@ -384,7 +379,7 @@ "champ:TripleStrike": { "NAME": "Triple Strike", "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 Upgraded *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", diff --git a/src/main/resources/champResources/localization/eng/EventStrings.json b/src/main/resources/champResources/localization/eng/EventStrings.json index c9b9fe2f43..bf8cb8e7d7 100644 --- a/src/main/resources/champResources/localization/eng/EventStrings.json +++ b/src/main/resources/champResources/localization/eng/EventStrings.json @@ -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." ] }, diff --git a/src/main/resources/champResources/localization/eng/KeywordStrings.json b/src/main/resources/champResources/localization/eng/KeywordStrings.json index 57f753957a..1ea64cda49 100644 --- a/src/main/resources/champResources/localization/eng/KeywordStrings.json +++ b/src/main/resources/champResources/localization/eng/KeywordStrings.json @@ -34,7 +34,7 @@ "[fist_icon]", "champ:[fist_icon]" ], - "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]." + "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 #b6 #yBlock [REMOVE_SPACE]." }, { "PROPER_NAME": "Counter", @@ -49,7 +49,7 @@ "defensive", "defensive." ], - "DESCRIPTION": "#yStance. NL #ySkill Bonus: Gain #b3 #yCounter [REMOVE_SPACE]. NL #yFinisher Effect: Gain #b8 #yBlock [REMOVE_SPACE]." + "DESCRIPTION": "#yStance. NL #ySkill Bonus: Gain #b3 #yCounter [REMOVE_SPACE]. NL #yFinisher Effect: Gain #b6 #yBlock [REMOVE_SPACE]." }, { "PROPER_NAME": "Berserker", diff --git a/src/main/resources/champResources/localization/eng/PowerStrings.json b/src/main/resources/champResources/localization/eng/PowerStrings.json index a7da4b33c8..4a688862bd 100644 --- a/src/main/resources/champResources/localization/eng/PowerStrings.json +++ b/src/main/resources/champResources/localization/eng/PowerStrings.json @@ -61,7 +61,7 @@ "champ:ImprovisingPower": { "NAME": "Improvising", "DESCRIPTIONS": [ - "At the start of your turn, if you are not in a #yStance [REMOVE_SPACE], enter a random #yStance [REMOVE_SPACE]. Whenever you enter a #yStance [REMOVE_SPACE], trigger its #ySkill #yBonus #b", + "Whenever you enter a #yStance [REMOVE_SPACE], trigger its #ySkill #yBonus #b", " times." ] }, @@ -104,7 +104,7 @@ "NAME": "Defensive Style", "DESCRIPTIONS": [ "#bDefensive #ySkill #yBonuses grant #b", - " additional #yCounter [REMOVE_SPACE]." + " additional #yCounter." ] }, "champ:GladiatorStylePower": { @@ -170,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." ] }, @@ -229,7 +229,7 @@ "NAME": "Last Stand", "DESCRIPTIONS": [ "Once you get below #b50% HP, remove all debuffs and gain #b", - " Strength.", + " #yStrength.", "~You've~ ~done~ ~it~ ~now...~", "@DEFEAT??@ NL @IMPOSSIBLE!!@" ] diff --git a/src/main/resources/champResources/localization/eng/RelicStrings.json b/src/main/resources/champResources/localization/eng/RelicStrings.json index 6c1ca7cb74..644db480d7 100644 --- a/src/main/resources/champResources/localization/eng/RelicStrings.json +++ b/src/main/resources/champResources/localization/eng/RelicStrings.json @@ -3,7 +3,7 @@ "NAME": "Champion's Crown", "FLAVOR": "A WINNER IS YOU!", "DESCRIPTIONS": [ - "At the start of combat, choose to enter #bchamp:Defensive or #rchamp:Berserker #yStance [REMOVE_SPACE]." + "Once per combat, you may enter a #yStance you are not in." ] }, "champ:BlackKnightHelmet": { @@ -17,14 +17,16 @@ "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 [REMOVE_SPACE]." + "At the start of your turn, gain #b", + " #yVigor [REMOVE_SPACE]." ] }, "champ:ChampionCrownUpgraded": { @@ -32,14 +34,16 @@ "FLAVOR": "Conglaturation!! You are the greatest winner.", "DESCRIPTIONS": [ "Replaces ", - " [REMOVE_SPACE].[] NL Start each combat in #ychamp:Ultimate #yStance [REMOVE_SPACE], which lasts for #b3 turns." + " [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": [ - "#bchamp:Defensive #bStance's #ychamp:Finisher #yBonus grants #b3 more #yBlock [REMOVE_SPACE]." + "#bchamp:Defensive #bStance's #ychamp:Finisher #yBonus grants #b", + " more #yBlock [REMOVE_SPACE]." ] }, "champ:DeflectingBracers": { @@ -74,7 +78,8 @@ "NAME": "Power Armor", "FLAVOR": "Bought used.", "DESCRIPTIONS": [ - "Gain [E] at the start of your turn. NL Your maximum #yVigor and #ychamp:Counter is #b10 [REMOVE_SPACE]." + "Gain [E] at the start of your turn. NL Your maximum #yVigor and #ychamp:Counter is #b", + " [REMOVE_SPACE]." ] }, "champ:RageAmulet": { @@ -91,7 +96,8 @@ "DESCRIPTIONS": [ "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 #b0 [REMOVE_SPACE], can be used without a #yStance [REMOVE_SPACE], 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": { diff --git a/src/main/resources/champResources/localization/fra/CardStrings.json b/src/main/resources/champResources/localization/fra/CardStrings.json index 19036e0d37..c58dd148fd 100644 --- a/src/main/resources/champResources/localization/fra/CardStrings.json +++ b/src/main/resources/champResources/localization/fra/CardStrings.json @@ -9,35 +9,31 @@ }, "champ:Taunt": { "NAME": "Provoc", - "DESCRIPTION": "Appliquez !M! de Faiblesse et 1 de Vulnérabilité.", - "UPGRADE_DESCRIPTION": "Appliquez 1 de Faiblesse et 1 de Vulnérabilité à TOUS les ennemis." + "DESCRIPTION": "Appliquez !M! de Faiblesse et de Vulnérabilité.", + "UPGRADE_DESCRIPTION": "Appliquez !M! de Faiblesse et de Vulnérabilité à TOUS les ennemis." }, "champ:Execute": { "NAME": "Exécution", "DESCRIPTION": "Infligez !D! dégâts !cool! fois.", - "UPGRADE_DESCRIPTION": "Deal !D! dégâts !cool! fois." + "UPGRADE_DESCRIPTION": "Infligez !D! dégâts !cool! fois." }, "champ:StanceDance": { "NAME": "Danse des poses", - "DESCRIPTION": "Choisissez une Pose à Adopter. NL Si vous étiez déjà dans cette Pose, ajoutez un champ:Combo de cette Pose dans votre main.", - "UPGRADE_DESCRIPTION": "Choisissez une Pose à Adopter. NL Ajoutez un champ:Combo de cette Pose dans votre main.", + "DESCRIPTION": "Choisissez une Pose à Adopter. NL Déclenchez son champ:Bonus de *Compétence.", + "UPGRADE_DESCRIPTION": "Choisissez une Pose à Adopter. NL Déclenchez son champ:Bonus de *Compétence deux fois.", "EXTENDED_DESCRIPTION": [ - "Enter champ:Berserker.", - "Enter champ:Defensive." + "Adoptez la Pose du champ:Destructeur.", + "Adoptez la Pose champ:Défensive." ] }, - "champ:GladiatorsShout": { - "NAME": "Cri du Gladiateur", - "DESCRIPTION": "Adoptez la pose du champ:Gladiateur. NL Piochez 1 carte.", - "UPGRADE_DESCRIPTION": "Adoptez la pose du champ:Gladiateur. NL Piochez 2 cartes." + "champ:StanceDanceCrown": { + "NAME": "Inspiration", + "DESCRIPTION": "Retenue. Choisissez une Pose à Adopter. Épuisement.", + "UPGRADE_DESCRIPTION": "Retenue. Choisissez une Pose à Adopter." }, "champ:SwordSigil": { "NAME": "Sigle de la victoire", - "DESCRIPTION": "Déclenchez le *Bonus de *Compétence de votre Pose !M! fois. NL Épuisement" - }, - "champ:FocusedGladiator": { - "NAME": "Focus: Gladiator", - "DESCRIPTION": "Enter champ:Gladiator. NL Until you exit champ:Gladiator Stance, champ:Techniques draw 1 extra card." + "DESCRIPTION": "Déclenchez le *Bonus de *Compétence de votre *Pose !M! fois." }, "champ:FaceSlap": { "NAME": "Gifle", @@ -47,55 +43,29 @@ "NAME": "Frappe éclair", "DESCRIPTION": "Infligez !D! damage. NL champ:Combo Pose *Défensive: Gagnez !M! de champ:Contre et !B! d'Armure." }, - "champ:Balance": { - "NAME": "Balance", - "DESCRIPTION": "Enter champ:Defensive or champ:Gladiator. NL Add a random champ:Combo of that Stance into your hand.", - "UPGRADE_DESCRIPTION": "Enter champ:Defensive or champ:Gladiator. NL Add a random Upgraded random champ:Combo of that Stance into your hand.", - "EXTENDED_DESCRIPTION": [ - "Enter champ:Defensive. NL Add a random *Defensive champ:Combo to your hand.", - "Enter champ:Gladiator. NL Add a random *Gladiator champ:Combo to your hand.", - "Enter champ:Defensive. NL Add a random Upgraded *Defensive champ:Combo to your hand.", - "Enter champ:Gladiator. NL Add a random Upgraded *Gladiator champ:Combo to your hand." - ] - }, "champ:DefensiveShout": { - "NAME": "Cri de défense", + "NAME": "Cri défensif", "DESCRIPTION": "Gagnez !M! de champ:Contre. NL Adoptez la pose champ:Défensive." }, "champ:ShieldSigil": { "NAME": "Fouet de chaînes", - "DESCRIPTION": "Infligez !D! dégâts. NL Ce tour, vos Bonus de Compétences sont augmentés de !M!." + "DESCRIPTION": "Infligez !D! dégâts. NL Ce tour, vos champ:Bonus de *Compétences sont augmentés de !M!." }, "champ:FocusedDefense": { - "NAME": "Bob and Weave", - "DESCRIPTION": "Adoptez la pose du champ:Destructeur. NL Gagnez !B! d'Armure. NL Gagnez !M! de Vigueur." + "NAME": "Feinte brutale", + "DESCRIPTION": "Gagnez !B! d'Armure. NL Gagnez !M! de Vigueur. NL Adoptez la pose du champ:Destructeur." }, "champ:FocusedBerserking": { "NAME": "Tout donner", "DESCRIPTION": "Épuisement. Déclenchez !M! fois sans quitter votre pose: " - }, "champ:SetATrap": { - "NAME": "Piège", + "NAME": "Piège posé", "DESCRIPTION": "Gagnez !B! d'Armure. NL champ:Combo Pose *Défensive: Appliquez !M! de Faiblesse à TOUS les ennemis." }, "champ:Backstep": { "NAME": "Marche arrière", - "DESCRIPTION": "Adoptez la Pose champ:Défensive. NL Gagnez !B! d'Armure, augmentée par la *Vigueur.", - "EXTENDED_DESCRIPTION": [ - " NL (Gagnez !B! d'Armure.)" - ] - }, - "champ:Aggression": { - "NAME": "Aggression", - "DESCRIPTION": "Enter champ:Berserker or champ:Gladiator. NL Add a random champ:Combo card to your hand of the chosen Stance.", - "UPGRADE_DESCRIPTION": "Enter champ:Berserker or champ:Gladiator. NL Add a random Upgraded champ:Combo card to your hand of the chosen Stance.", - "EXTENDED_DESCRIPTION": [ - "Enter champ:Berserker. NL Add a random *Berserker champ:Combo to your hand.", - "Enter champ:Gladiator. NL Add a random *Gladiator champ:Combo to your hand.", - "Enter champ:Berserker. NL Add a random Upgraded *Berserker champ:Combo to your hand.", - "Enter champ:Gladiator. NL Add a random Upgraded *Gladiator champ:Combo to your hand." - ] + "DESCRIPTION": "Gagnez !B! d'Armure, augmentée par la *Vigueur." }, "champ:BerserkersShout": { "NAME": "Cri du Destructeur", @@ -103,7 +73,7 @@ }, "champ:RageSigil": { "NAME": "Plan de bataille", - "DESCRIPTION": "Gagnez !B! d'Armure. NL Scrutez !M! cartes." + "DESCRIPTION": "Adoptez la Pose champ:Défensive. Gagnez !B! d'Armure. NL Scrutez !M! cartes." }, "champ:GutPunch": { "NAME": "Coup à l'estomac", @@ -118,20 +88,9 @@ "NAME": "Dévastation", "DESCRIPTION": "Infligez !D! dégâts !M! fois. NL Coûte 1 [E] de moins pour chaque *Finisher joué ce combat." }, - "champ:Control": { - "NAME": "Contrôle", - "DESCRIPTION": "Adoptez la Pose champ:Défensive ou la Pose du champ:Destructeur. NL Ajoutez un champ:Combo aléatoire dans votre main de la Pose Choisie.", - "UPGRADE_DESCRIPTION": "Enter champ:Defensive or champ:Berserker. NL Add a random Upgraded champ:Combo card to your hand of the chosen Stance.", - "EXTENDED_DESCRIPTION": [ - "Enter champ:Defensive. NL Add a random *Defensive champ:Combo to your hand.", - "Enter champ:Berserker. NL Add a random *Berserker champ:Combo to your hand.", - "Enter champ:Defensive. NL Add a random Upgraded *Defensive champ:Combo to your hand.", - "Enter champ:Berserker. NL Add a random Upgraded *Berserker champ:Combo to your hand." - ] - }, "champ:Circumvent": { "NAME": "Contournement", - "DESCRIPTION": "Gagnez !B! d'Armure. NL Piochez !M! cartes. NL Défaussez !M! cartes." + "DESCRIPTION": "Gagnez !B! d'Armure. NL Piochez !M! cartes. NL Défaussez !M! cartes. NL champ:Combo Pose *Défensive : Ne défaussez pas de cartes." }, "champ:SkillfulDodge": { "NAME": "Esquive habile", @@ -152,7 +111,7 @@ "UPGRADE_DESCRIPTION": "Retenue. NL Piochez !M! cartes." }, "champ:EnchantShield": { - "NAME": "Enchantement de Bouclier", + "NAME": "Bouclier enchanté", "DESCRIPTION": "Choisissez une carte en main. Augmentez son Armure de !M! pour ce combat. NL Épuisement.", "EXTENDED_DESCRIPTION": [ "Un mauvais moment pour cette carte." @@ -167,23 +126,23 @@ }, "champ:ShieldThrow": { "NAME": "Lancer de bouclier", - "DESCRIPTION": "Infligez des dégâts égaux à votre Armure, deux fois. NL Gagnez 2 de Fragilité. champ:Combo Pose *Défensive: Ne gagnez pas de Fragilité.", + "DESCRIPTION": "Infligez des dégâts égaux à votre Armure, deux fois. NL Si vous n'êtes pas en Pose champ:Défensive, ne gagnez pas d'Armure des cartes à votre prochain tour.", "EXTENDED_DESCRIPTION": [ - "Infligez des dégâts égaux à votre Armure ( !D! ) deux fois. NL Gagnez 2 de Fragilité. champ:Combo Pose *Défensive: Perdez 2 de Fragilité." + "Infligez des dégâts égaux à votre Armure ( !D! ) deux fois. Si vous n'êtes pas en Pose champ:Défensive, ne gagnez pas d'Armure des cartes à votre prochain tour." ] }, "champ:FalseCounter": { "NAME": "Contre les cordes", - "DESCRIPTION": "Gagnez !B! d'Armure. Au prochain tour, gagnez [E] et piochez 3 cartes.", - "UPGRADE_DESCRIPTION": "Gagnez !B! d'Armure. Au prochain tour, gagnez [E] [E] et piochez 3 cartes." + "DESCRIPTION": "Gagnez !B! d'Armure. NL Au prochain tour, gagnez [E] et piochez 2 cartes.", + "UPGRADE_DESCRIPTION": "Gagnez !B! d'Armure. NL Au prochain tour, gagnez [E] [E] et piochez 2 cartes." }, "champ:IronFortress": { "NAME": "Dispositif technique", "DESCRIPTION": "Lorsque vous adoptez une Pose, gagnez !M! d'Armure." }, "champ:Lariat": { - "NAME": "Corps renforcé", - "DESCRIPTION": "Gagnez !B! d'Armure X fois." + "NAME": "Lariat", + "DESCRIPTION": "Gagnez !B! d'Armure X fois. NL Déclenchez votre champ:Bonus de *Compétence de *Pose X fois." }, "champ:HoldFirm": { "NAME": "Tenir bon", @@ -199,7 +158,7 @@ }, "champ:ViciousMockery": { "NAME": "Moquerie vicieuse", - "DESCRIPTION": "Gagnez !M! de Vigueur. NL Appliquez !DM! de Faiblesse.", + "DESCRIPTION": "Gagnez !M! de Vigueur. NL Appliquez !DM! de Faiblesse. NL Déclenchez le champ:Bonus de *Compétence de votre *Pose.", "EXTENDED_DESCRIPTION": [ "Pose du Destructeur champ:Combo: Gagnez !M! de Force temporaire. NL ", "Pose *Défensive champ:Combo: Gain !M! de Dextérité temporaire." @@ -218,7 +177,7 @@ "DESCRIPTION": "Infligez !D! dégâts !M! fois. NL Une carte \"Frappe\" aléatoire dans votre main coûte 0 ce tour." }, "champ:EnchantSword": { - "NAME": "Enchantement d'épée", + "NAME": "Épée enchantée", "DESCRIPTION": "Choisissez une carte en main. Augmentez ses dégâts de !M! pour ce combat. Épuisement.", "EXTENDED_DESCRIPTION": [ "Un mauvais moment pour cette carte." @@ -226,11 +185,11 @@ }, "champ:BladeFlurry": { "NAME": "Frappes en rafale", - "DESCRIPTION": "Infligez !D! dégâts. NL La prochaine *Frappe que vous jouez ce tour est jouée deux fois." + "DESCRIPTION": "Infligez !D! dégâts. NL La prochaine \"Frappe\" que vous jouez ce tour est jouée deux fois." }, "champ:SwordThrow": { "NAME": "Lancer d'épée", - "DESCRIPTION": "Infligez !D! dégâts !M! fois. NL Gagnez 2 de Faiblesse. NL champ:Combo Pose du *Destructeur: Ne gagnez pas de Faiblesse." + "DESCRIPTION": "Infligez !D! dégâts !M! fois. NL Si vous n'êtes pas en Pose du champ:Destructeur, vous ne pourrez pas jouer d'Attaques lors de votre prochain tour." }, "champ:MurderStrike": { "NAME": "Frappe meurtrière", @@ -238,21 +197,19 @@ }, "champ:HeavySlash": { "NAME": "Taillade magistrale", - "DESCRIPTION": "Infligez !D! dégâts. NL Obtenez une Compétence aléatoire. Elle coûte 0.", - "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. NL Obtenez une Compétence aléatoire Améliorée. Elle coûte 0." + "DESCRIPTION": "Infligez !D! dégâts. NL Au début de votre prochain tour, gagnez autant de Vigueur que de dégâts non-bloqués infligés." }, "champ:CheapShot": { "NAME": "Coup bas", - "DESCRIPTION": "Infligez !D! dégâts. NL Si l'ennemi est un Boss, Infligez ces dégâts deux fois supplémentaires. Sinon, étourdissez l'ennemi. NL Épuisement." + "DESCRIPTION": "Infligez !D! dégâts. NL Si l'ennemi est un Boss, infligez ces dégâts deux fois supplémentaires. Sinon, hermit:étourdissez l'ennemi. NL Épuisement." }, "champ:RisingSlash": { "NAME": "Frappe ascendante", - "DESCRIPTION": "Infligez !D! dégâts. NL Si la dernière carte jouée était un champ:Finisher, infligez !D! dégâts à nouveau." + "DESCRIPTION": "Retenue. NL Infligez !D! dégâts. NL Si la dernière carte jouée était un champ:Finisher, infligez !D! dégâts à nouveau." }, "champ:Shatter": { "NAME": "Craquement", - "DESCRIPTION": "Retirez l'Armure de l'ennemi. NL Infligez !D! dégâts.", - "UPGRADE_DESCRIPTION": "Retirez l'Armure et l'Artéfact de l'ennemi. NL Infligez !D! dégâts." + "DESCRIPTION": "Infligez !D! dégâts. NL Retirez l'Armure de l'ennemi. NL champ:Combo de *n'importe *quelle *Pose: Appliquez !M! de Faiblesse et de Vulnérabilité." }, "champ:EnragedBash": { "NAME": "Fleuret enragé", @@ -262,7 +219,7 @@ ] }, "champ:VampiricStrike": { - "NAME": "Démolition", + "NAME": "Frappe dévastatrice", "DESCRIPTION": "Infligez !D! dégâts. NL Gagnez de l'Armure égale aux dégâts non-bloqués infligés." }, "champ:AdrenalArmor": { @@ -279,11 +236,11 @@ }, "champ:CrownThrow": { "NAME": "Couronnerang", - "DESCRIPTION": "Infligez !D! dégâts. NL champ:Combo Pose du *Destructeur: Piochez !M! Attaques." + "DESCRIPTION": "Infligez !D! dégâts. NL champ:Combo Pose du *Destructeur: Piochez !M! cartes." }, "champ:Encircle": { "NAME": "Encerclement", - "DESCRIPTION": "Infligez !D! dégâts à TOUS les ennemis. NL Déclenchez le bonus de Compétence pour chaque ennemi touché." + "DESCRIPTION": "Infligez !D! dégâts à TOUS les ennemis. NL Piochez !M! carte pour chaque ennemi touché." }, "champ:LastStand": { "NAME": "Last Stand", @@ -295,8 +252,8 @@ }, "champ:RecklessLeap": { "NAME": "Frappe téméraire", - "DESCRIPTION": "Infligez !D! dégâts. NL Gagnez 2 de Force. NL Perdez 1 de Dextérité. NL Épuisement.", - "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. NL Gagnez 2 de Force. NL Perdez 1 de Dextérité.", + "DESCRIPTION": "Infligez !D! dégâts. NL Gagnez !M! de Force. NL Adoptez la Pose du champ:Destructeur. NL Épuisement.", + "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. NL Gagnez !M! de Force. NL Adoptez la Pose du champ:Destructeur.", "EXTENDED_DESCRIPTION": [ "Un mauvais moment pour cette carte." ] @@ -314,13 +271,9 @@ "NAME": "Préparation de l'arène", "DESCRIPTION": "Ajoutez !M! Compétences aléatoires dans votre main. NL Elles gagnent Retenue. NL Épuisement." }, - "champ:EndlessRage": { - "NAME": "Rage sans fin", - "DESCRIPTION": "Lorsque vous Adoptez une Pose :" - }, "champ:SteelEdge": { "NAME": "Lame de l'épée", - "DESCRIPTION": "Infligez !D! dégâts X fois.", + "DESCRIPTION": "Infligez !D! dégâts X fois. NL Performez ceci X fois, au minimum une fois :", "EXTENDED_DESCRIPTION": [ "champ:Combo Pose du *Destructeur: Infligez !D! dégâts X fois. NL ", "champ:Combo Pose *Défensive: Gagnez !B! d'Armure X fois.", @@ -331,7 +284,7 @@ }, "champ:Improvising": { "NAME": "Improvisation", - "DESCRIPTION": "Au début de votre tour, si vous n'êtes pas dans une Pose, entrez dans une Pose aléatoire." + "DESCRIPTION": "Lorsque vous entrez dans une Pose, déclenchez son champ:Bonus de *Compétence !M! fois." }, "champ:CalledShot": { "NAME": "Rafraîchissement", @@ -350,7 +303,7 @@ }, "champ:GladiatorForm": { "NAME": "Forme gladiatrice", - "DESCRIPTION": "Au début de chaque tour, gagnez !M! de Vigueur pour chaque 3 de Vigueur dépensés au tour précédent. Puis faites-la même chose pour le champ:Contre." + "DESCRIPTION": "Au début de chaque tour, gagnez !M! de Vigueur pour tous les 3 de Vigueur dépensés au tour précédent. Puis faites-la même chose pour le champ:Contre." }, "champ:Duel": { "NAME": "Challenge", @@ -363,31 +316,29 @@ }, "champ:StrikeOfGenius": { "NAME": "Frappé de génie", - "DESCRIPTION": "Au début de votre tour, ajoutez une carte aléatoire contenant \"Frappe\" dans votre main. NL Elle coûte 0 jusqu'à ce qu'elle soit jouée et gagne Épuisement.", - "UPGRADE_DESCRIPTION": "Au début de votre tour, ajoutez une carte aléatoire Améliorée contenant \"Frappe\" dans votre main. NL Elle coûte 0 jusqu'à ce qu'elle soit jouée et gagne Épuisement." + "DESCRIPTION": "Au début de votre tour, obtenez un gremlin:Écho de \"Frappe\" aléatoire dans votre main. NL Elle coûte 0 jusqu'à ce qu'elle soit jouée.", + "UPGRADE_DESCRIPTION": "Au début de votre tour, obtenez un gremlin:Écho Amélioré de \"Frappe\" aléatoire dans votre main. NL Elle coûte 0 jusqu'à ce qu'elle soit jouée." }, "champ:DefensiveStyle": { - "NAME": "Style défensif", - "DESCRIPTION": "Adoptez la Pose champ:Défensive. NL Les *Bonus de *Compétences de la Pose champ:Défensive donnent !M! de champ:Contre supplémentaires.", - "UPGRADE_DESCRIPTION": "Inné. NL Adoptez la Pose champ:Défensive. NL Les *Bonus de *Compétences de la Pose champ:Défensive donnent !M! de champ:Contre supplémentaires." + "NAME": "Double Style", + "DESCRIPTION": "Les champ:Bonus de *Compétence donnent !M! de Vigueur et de champ:Contre supplémentaires." }, "champ:GladiatorStyle": { "NAME": "Combat propre", - "DESCRIPTION": "Gagnez !M! de Force. NL Gagnez !M! de Dextérité." + "DESCRIPTION": "champ:Combo Pose du *Destructeur : NL Gagnez !M! de Force. NL champ:Combo Pose *Défensive : NL Gagnez !M! de Dextérité." }, "champ:BerserkerStyle": { - "NAME": "Style destructeur", - "DESCRIPTION": "Adoptez la Pose du champ:Destructeur. NL Les *Bonus de *Compétences de la Pose du champ:Destructeur donnent !M! de Vigueur supplémentaires.", - "UPGRADE_DESCRIPTION": "Inné. NL Adoptez la Pose du champ:Destructeur. NL Les *Bonus de *Compétences de la Pose du champ:Destructeur donnent !M! de Vigueur supplémentaires." + "NAME": "Affûtage de lame", + "DESCRIPTION": "Vos cartes \"Frappe\" infligent !M! dégâts supplémentaires." }, "champ:Riposte": { - "NAME": "Riposte", - "DESCRIPTION": "Infligez !D! dégâts. NL Épuisement." + "NAME": "Frappe riposte", + "DESCRIPTION": "Éthérée. NL Infligez !D! dégâts. NL Épuisement." }, "champ:Endure": { "NAME": "Endurance", - "DESCRIPTION": "Gagnez !B! d'Armure. NL L'*Armure de cette carte est augmentée par la *Force et non la *Dextérité.", - "UPGRADE_DESCRIPTION": "Gagnez !B! d'Armure. NL L'*Armure de cette carte est augmentée également par la Force." + "DESCRIPTION": "Adoptez la Pose champ:Défensive. Gagnez !B! d'Armure, augmentée par la Force au lieu de la Dextérité.", + "UPGRADE_DESCRIPTION": "Adoptez la Pose champ:Défensive. Gagnez !B! d'Armure, augmentée par la Force." }, "champ:PreemptiveStrike": { "NAME": "Frappe préventive", @@ -399,11 +350,11 @@ }, "champ:Parry": { "NAME": "Parade", - "DESCRIPTION": "Gagnez !B! d'Armure. Gagnez !M! de champ:Contre. NL Si votre champ:Contre est utilisé ce tour, obtenez *Riposte.", + "DESCRIPTION": "Gagnez !B! d'Armure. Gagnez !M! de champ:Contre. NL Si votre champ:Contre est utilisé ce tour, obtenez une autre *Frappe *riposte.", "UPGRADE_DESCRIPTION": "Éthérée. NL Infligez des dégâts égaux à votre champ:Contre utilisé. NL Épuisement." }, "champ:EnchantCrown": { - "NAME": "Enchantement de la couronne", + "NAME": "Couronne enchantée", "DESCRIPTION": "Choisissez une carte en main. Elle coûte 0 ce combat. NL Épuisement.", "EXTENDED_DESCRIPTION": [ "Un mauvais moment pour cette carte." @@ -423,12 +374,12 @@ }, "champ:FancyFootwork": { "NAME": "Jeu de jambes élégant", - "DESCRIPTION": "Entrez dans une Pose dans laquelle vous n'êtes pas. NL La prochaine fois que vous utilisez un champ:Finisher ce tour, TOUS les ennemis perdent !M! PV." + "DESCRIPTION": "Entrez dans une Pose dans laquelle vous n'êtes pas. NL Le prochain champ:Finisher que vous utilisez ce tour inflige !M! dégâts à TOUS les ennemis." }, "champ:TripleStrike": { "NAME": "Triple frappe", - "DESCRIPTION": "Infligez !D! dégâts. NL Obtenez 2 *Frappes. Elles coûtent 0 et déclenchent les *Bonus de *Compétence. NL Épuisement.", - "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. NL Obtenez 2 *Frappes+. Elles coûtent 0 et déclenchent les *Bonus de *Compétence. NL Épuisement." + "DESCRIPTION": "Infligez !D! dégâts. NL Obtenez 2 gremlin:Échos de *Frappe. Elles coûtent 0 et déclenchent les champ:Bonus de *Compétence.", + "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. NL Obtenez 2 gremlin:Échos de *Frappe+. Elles coûtent 0 et déclenchent les champ:Bonus de *Compétence." }, "champ:WindUp": { "NAME": "Pose éphémère", diff --git a/src/main/resources/champResources/localization/fra/CharacterStrings.json b/src/main/resources/champResources/localization/fra/CharacterStrings.json index 4e4f52be65..eaef39b3f3 100644 --- a/src/main/resources/champResources/localization/fra/CharacterStrings.json +++ b/src/main/resources/champResources/localization/fra/CharacterStrings.json @@ -8,9 +8,9 @@ "Le Roi de l'Arène indisputé. NL N'a jamais perdu un seul match.", "NL Vous préparez votre lame...", "Naviguant dans une rue non éclairée, vous rencontrez plusieures figures encapuchonnées au milieu d'un rituel. Alors que vous vous approchez, ils se tournent vers vous en unisson. L'un des plus grands montre ses crocs et étire sa longue et pâle main. NL ~\"Rejoignez~ ~nous~ ~Roi~ ~de~ ~l'Arène,~ ~et~ ~ressentez~ ~la~ ~chaleur~ ~de~ ~la~ ~Tour.\"~", - "Pose de #rDestructeur", + "Pose du #rDestructeur", "Pose #bDéfensive", - "Pose de #yGladiateur", + "Pose du #yGladiateur", "Aucune", "Pose ULTIME", "Bonus de Compétence", @@ -43,7 +43,7 @@ " NL [fist_icon] : [E] & [card_icon] au prochain tour.", " NL [fist_icon] : Gagnez ", " NL [fist_icon] : Gagnez 1 de Force.", - " NL [fist_icon] : Tous les Bonus.", + " NL [fist_icon] : Tous les Bonuss.", "La Vigueur augmente les dégâts de la prochaine Attaque.", "Compétence Bonus", "Si vous êtes dans une #yPose, déclenchez son bonus de Compétence.", @@ -71,4 +71,4 @@ " Peut être déclenchée jusqu'à 3 fois." ] } -} \ No newline at end of file +} diff --git a/src/main/resources/champResources/localization/fra/EventStrings.json b/src/main/resources/champResources/localization/fra/EventStrings.json index 0ab4e4de29..c1424a6df9 100644 --- a/src/main/resources/champResources/localization/fra/EventStrings.json +++ b/src/main/resources/champResources/localization/fra/EventStrings.json @@ -21,10 +21,10 @@ "Chevalier Noir" ], "OPTIONS": [ - "[Défendre le titre] #rCombattre le Chevalier Noir. #gGagnez #gplusieurs #grécompenses.", - "[Participer] #rCombattre un Héros Captif. #gGagnez #gplusieurs #grécompenses.", + "[Défendre le titre] #rCombattre #rle #rChevalier #rNoir. #gGagnez #gplusieurs #grécompenses.", + "[Participer] #rCombattre #run #rHéros #rCaptif. #gGagnez #gplusieurs #grécompenses.", "[Quitter]", - "[FIGHT!]", + "[COMBATTRE !]", "[Continuer]" ] }, @@ -35,7 +35,7 @@ "Vous passez beaucoup de temps à chercher dans les couloirs des tomes et des guides, jusqu'à ce que vous trouviez enfin le livre que vous cherchiez. NL NL En vous installant dans le fauteuil confortable, vous prenez le temps de réviser les positions et les styles oubliés. Même un combattant parfait comme vous sait que l'esprit est tout aussi important que le corps et qu'il doit être exercé." ], "OPTIONS": [ - "[Chercher] Localisez un #gLivre sur le Combat.", + "[Chercher] #gLocalisez #gun #gLivre #gsur #gle #gCombat.", "[Verrouillé] Déjà possédé tous les tomes de Combat." ] }, @@ -49,12 +49,12 @@ "Quel que soit le prix à payer, il en valait la peine pour acquérir ce précieux savoir. Il vous faut beaucoup d'efforts pour vous détacher de l'emprise du livre sur vous, mais vous y parvenez. NL NL Les enseignements du tome étant encore frais dans votre esprit, vous partez à la recherche d'une nouvelle victime sur laquelle les tester.." ], "OPTIONS": [ - "[Lire] Choisissez une Attaque à gagner le #y'#yBonus de #yCompétence'. #rPerdez #r", + "[Lire] Choisissez une Attaque à gagner #y'#yDéclenchez #yle #yBonus de #yCompétence'. #rPerdez #r", " #rPV.", "[Quitter]", "[Verrouillé] Requiert une Attaque.", - "Choisissez une carte à gagner le Bonus de Compétence.", - "[Lire] Choisissez une carte à gagner le #y'#yBonus de #yCompétence'. #rDevenez #rMaudit #r- #rFierté." + "Choisissez une carte à gagner 'Déclenchez le Bonus de Compétence'.", + "[Lire] Choisissez une Attaque à gagner #y'#yDéclenchez #yle #yBonus de #yCompétence'. #rDevenez #rMaudit #r- #rFierté." ] }, "champ:Gym": { @@ -69,7 +69,7 @@ "[Cardio] #gGagnez #g", " #gPV #gMax.", "[Combat d'entraînement] Choisissez une carte n'ayant pas Finisher pour gagner 'Adoptez la Pose (Choisie)'.", - "[Soulever des poids] #gGagnez #g1 #gde #gForce #gDéfinitivement.", + "[Soulever des poids] #gGagnez #g1 #gde #gForce #gde #gfaçon #gpermanente.", "[Quitter]", "Choisissez une carte n'ayant pas Finisher pour gagner 'Adoptez la Pose Défensive'.", "Choisissez une carte n'ayant pas Finisher pour gagner 'Adoptez la Pose du Gladiateur'.", @@ -86,7 +86,7 @@ "OPTIONS": [ "[Combattre Centurion & Mystique] #gGagnez #gAttache #gde #gCape", "[Combattre le Diablotin Nob] #gGagnez #gCeinture #gde #gChampion", - "[Combattre un duo d'Esclavagistes] #gGagnez #gPoignard", + "[Combattre un duo d'Esclavagistes] #gGagnez #gFer #gà #Cheval", "[Quitter]" ] }, @@ -100,4 +100,4 @@ "[Verrouillé] Requiert une Frappe ou une Défense." ] } -} \ No newline at end of file +} diff --git a/src/main/resources/champResources/localization/fra/KeywordStrings.json b/src/main/resources/champResources/localization/fra/KeywordStrings.json index 729771e5a6..162d707652 100644 --- a/src/main/resources/champResources/localization/fra/KeywordStrings.json +++ b/src/main/resources/champResources/localization/fra/KeywordStrings.json @@ -1,20 +1,32 @@ [ { - "PROPER_NAME": "Technique", + "PROPER_NAME": "Bonus de Compétence", "NAMES": [ + "bonus", + "bonuses", "technique", "techniques", "champ:[crown_icon]", "[crown_icon]" ], - "DESCRIPTION": "Si vous êtes dans une #yPose, déclenchez son bonus de Technique." + "DESCRIPTION": "Si vous êtes dans une #yPose [REMOVE_SPACE], déclenchez son bonus de Technique. NL #yBonus #yde #yCompétence du #rDestructeur : Gagnez #b2 de #yVigueur [REMOVE_SPACE]. NL #yBonus #yde #yCompétence #bDéfensive : Gagnez #b3 de #yContre [REMOVE_SPACE]." }, { "PROPER_NAME": "Combo", "NAMES": [ "combo" ], - "DESCRIPTION": "Un effet supplémentaire lorsque cette carte est jouée dans la #yPose listée, ou si vous êtes entré dans cette #yPose ce tour." + "DESCRIPTION": "Un effet supplémentaire lorsque cette carte est jouée dans la #yPose listée [REMOVE_SPACE]." + }, + { + "PROPER_NAME": "Frappe", + "NAMES": [ + "frappe", + "frappes", + "strike", + "strikes" + ], + "DESCRIPTION": "N'importe quelle carte contenant \"Frappe\" dans son nom. A ne pas confondre avec les #yFrappes, qui fait référence aux cartes Frappes communes exclusivement." }, { "PROPER_NAME": "Finisher", @@ -24,7 +36,7 @@ "[fist_icon]", "champ:[fist_icon]" ], - "DESCRIPTION": "Ceci requiert d'être dans une Pose. NL Après avoir joué un Finisher, si vous êtes dans une #yPose, quittez-la et déclenchez son bonus de Finisher." + "DESCRIPTION": "Ceci requiert d'être dans une Pose. NL Après avoir joué un Finisher, quittez votre #yPose et déclenchez son bonus de Finisher. #yBonus #yde #yFinisher du #rDestructeur : gagnez #b1 de #yForce[REMOVE_SPACE]. #yBonus #yde #yFinisher #bDéfensive : Gagnez #b6 #bd'Armure [REMOVE_SPACE]." }, { "PROPER_NAME": "Contre", @@ -32,17 +44,17 @@ "counter", "contre" ], - "DESCRIPTION": "La prochaine fois que vous prenez des dégâts #yd'Attaque, infligez ces dégâts en retour." + "DESCRIPTION": "La prochaine fois que vous prenez des dégâts #yd'Attaque, obtenez une #yFrappe #yRiposte qui inflige autant de dégâts que de Contre." }, { - "PROPER_NAME": "Defensive", + "PROPER_NAME": "Défensive", "NAMES": [ "défensive", "défensive.", "defensive", "defensive." ], - "DESCRIPTION": "#yPose. NL Bonus de #yCompétence: Gagnez #b3 de #yContre. NL Bonus de #yFinisher: Gagnez #b8 #yd'Armure." + "DESCRIPTION": "#yPose. NL Bonus de #yCompétence: Gagnez #b3 de #yContre [REMOVE_SPACE]. NL Bonus de #yFinisher: Gagnez #b6 #yd'Armure [REMOVE_SPACE]." }, { "PROPER_NAME": "Destructeur", @@ -52,7 +64,7 @@ "berserker", "berserker." ], - "DESCRIPTION": "#yPose. NL Bonus de #yCompétence: Gagnez #b2 de #yVigeur. NL Bonus de #yFinisher: Gagnez #b1 de #yForce." + "DESCRIPTION": "#yPose. NL Bonus de #yCompétence: Gagnez #b2 de #yVigeur. NL Bonus de #yFinisher: Gagnez #b1 de #yForce.[REMOVE_SPACE][REMOVE_SPACE]" }, { "PROPER_NAME": "Gladiateur", @@ -72,7 +84,7 @@ "ultimate", "ultimate." ], - "DESCRIPTION": "#yPose. Compte comme les #yPoses de #rDestructeur et #bDéfensive pour tous les usages. NL Si vous quittez cette position prématurément, revenez-y immédiatement." + "DESCRIPTION": "#yPose. Compte comme les #yPoses du #rDestructeur et #bDéfensive en même temps [REMOVE_SPACE]. NL Si vous quittez cette position prématurément, revenez-y immédiatement [REMOVE_SPACE]." }, { "PROPER_NAME": "Fatigue", diff --git a/src/main/resources/champResources/localization/fra/PotionStrings.json b/src/main/resources/champResources/localization/fra/PotionStrings.json index 58d951b91a..30e51613b5 100644 --- a/src/main/resources/champResources/localization/fra/PotionStrings.json +++ b/src/main/resources/champResources/localization/fra/PotionStrings.json @@ -2,21 +2,21 @@ "champ:OpenerPotion": { "NAME": "Potion de stratégie", "DESCRIPTIONS": [ - "Choisissez #b1 carte parmi #b2 qui permenttent d'adopter une #yPose à ajouter dans votre main (une pour chaque #yPose). Elle coûte #b0 ce tour.", - " Ajoutez #b", - " copie de celle-ci dans votre main.", - " copies de celle-ci dans votre main." + "Choisissez #b1 carte parmi #b2 qui permettent d'adopter une #yPose à ajouter dans votre main (une pour chaque #yPose [REMOVE_SPACE]). Elle coûte #b0 ce tour.", + " Obtenez #b", + " copie de celle-ci.", + " copies de celle-ci." ] }, "champ:TechniquePotion": { "NAME": "Technique Embouteillée", "DESCRIPTIONS": [ - "Utilisez la #yTechnique #b", + "Utilisez le #yBonus #yde #yCompétence de votre #Pose actuelle #b", " fois." ] }, "champ:UltimateStancePotion": { - "NAME": "Substance à la légalité douteuse", + "NAME": "Stimpack", "DESCRIPTIONS": [ "Adoptez la #yPose #yUltime pour #b", " tours." @@ -29,4 +29,4 @@ " de #yContre." ] } -} \ No newline at end of file +} diff --git a/src/main/resources/champResources/localization/fra/PowerStrings.json b/src/main/resources/champResources/localization/fra/PowerStrings.json index bf8761c805..83846a6025 100644 --- a/src/main/resources/champResources/localization/fra/PowerStrings.json +++ b/src/main/resources/champResources/localization/fra/PowerStrings.json @@ -2,7 +2,7 @@ "champ:CounterPower": { "NAME": "Contre", "DESCRIPTIONS": [ - "La prochaine fois que vous recevez des dégâts d'une #yAttaque, infligez #b", + "La prochaine fois que vous recevez des dégâts d'une #yAttaque, obtenez une #yFrappe #yRiposte #b", " ces dégâts en retour." ] }, @@ -10,21 +10,21 @@ "NAME": "Concentré : Pose Défensive", "DESCRIPTIONS": [ "La prochaine fois que vous jouez un #yFinisher ce tour, gagnez #b", - " #yd'Armure." + " #yd'Armure [REMOVE_SPACE]." ] }, "champ:FocusedBerPower": { - "NAME": "Concentré : Pose du Destructeur", + "NAME": "Fancy Footwork", "DESCRIPTIONS": [ - "La prochaine fois que vous jouez un #yFinisher ce tour, infligez #b", - " dégâts à TOUS les ennemis." + "La prochaine fois que vous utilisez un #yFinisher ce tour, TOUS les ennemis perdent #b", + " PV." ] }, "champ:ShieldWallPower": { "NAME": "Mur de boucliers", "DESCRIPTIONS": [ "À la fin de votre tour, gagnez #b", - " de #yContre." + " de #yContre [REMOVE_SPACE]." ] }, "champ:EntangleNextTurnPower": { @@ -36,7 +36,7 @@ ] }, "champ:DrawLessNextTurnPower": { - "NAME": "Couronne lancée", + "NAME": "Réduction de pioche", "DESCRIPTIONS": [ "Piochez #b", " carte de moins au prochain tour.", @@ -47,29 +47,30 @@ "NAME": "Ignorant la douleur", "DESCRIPTIONS": [ "Vous ne pouvez pas perdre de PV ce tour.", - "Vous ne pouvez pas perdre de PV ce tour et les #b", - " prochains." + "Vous ne pouvez pas perdre de PV pendant les #b", + " prochains tours." ] }, "champ:WorseRupturePower": { "NAME": "Rage sans fin", "DESCRIPTIONS": [ "Lorsque vous perdez des PV lors de votre tour, gagnez #b", - " de #yForce temporaire." + " de #yForce temporaire [REMOVE_SPACE]." ] }, "champ:ImprovisingPower": { "NAME": "Improvisation", "DESCRIPTIONS": [ - "At the start of your turn, if you are not in a Stance, enter a random Stance." + "Au début de votre tour, si vous n'êtes pas dans une #yPose [REMOVE_SPACE], adoptez une #yPose aléatoire. Lorsque vous adoptez une #yPose [REMOVE_SPACE], déclenchez son #yBonus #yde #yCompétence #b", + " fois." ] }, "champ:CalledShotPower": { - "NAME": "Called Shot", + "NAME": "Coup annoncé", "DESCRIPTIONS": [ - "La prochaine fois que vous jouez un #yFinisher, ne quittez pas votre #yPose.", + "La prochaine fois que vous jouez un #yFinisher [REMOVE_SPACE], ne quittez pas votre #yPose [REMOVE_SPACE].", "Les #b", - " prochaines fois que vous jouez un #yFinisher, ne quittez pas votre #yPose." + " prochaines fois que vous jouez un #yFinisher [REMOVE_SPACE], ne quittez pas votre #yPose [REMOVE_SPACE]." ] }, "champ:DancingMasterPower": { @@ -78,7 +79,7 @@ "La troisième fois que vous adoptez une #yPose chaque tour, gagnez #b", " [E] et piochez #b", " cartes. ", - " restants.", + "", "Utilisé ce tour.", "" ] @@ -86,24 +87,24 @@ "champ:StrikeOfGeniusPower": { "NAME": "Frappé de génie", "DESCRIPTIONS": [ - "Au début de votre tour, ajoutez une carte aléatoire contenant \"Frappe\" dans votre main. Elle coûte #b0 jusqu'à ce qu'elle soit jouée et gagne Épuisement.", + "Au début de votre tour, ajoutez un #yÉcho de \"Frappe\" aléatoire dans votre main [REMOVE_SPACE]. Elle coûte #b0 jusqu'à ce qu'elle soit jouée.", "Au début de votre tour, ajoutez #b", - " cartes aléatoires contenant \"Frappe\" dans votre main. Elles coûtent #b0 jusqu'à ce qu'elle soit jouées et gagnent Épuisement." + " #yÉchos de \"Frappe\" dans votre main [REMOVE_SPACE]. Elles coûtent #b0 jusqu'à ce qu'elle soit jouées." ] }, "champ:StrikeOfGeniusUpgradedPower": { "NAME": "Frappé de génie+", "DESCRIPTIONS": [ - "Au début de votre tour, ajoutez une carte aléatoire #yaméliorée contenant \"Frappe\" dans votre main. Elle coûte #b0 jusqu'à ce qu'elle soit jouée et gagne Épuisement.", + "Au début de votre tour, ajoutez un #yÉcho #yamélioré de \"Frappe\" aléatoire dans votre main [REMOVE_SPACE]. Elle coûte #b0 jusqu'à ce qu'elle soit jouée.", "Au début de votre tour, ajoutez #b", - " cartes aléatoires #yaméliorées contenant \"Frappe\" dans votre main. Elles coûtent #b0 jusqu'à ce qu'elle soit jouées et gagnent Épuisement." + " #yÉchos #yaméliorés de \"Frappe\" dans votre main [REMOVE_SPACE]. Elles coûtent #b0 jusqu'à ce qu'elle soit jouées." ] }, "champ:DefensiveStylePower": { "NAME": "Style défensif", "DESCRIPTIONS": [ "Les #yTechniques de la pose #yDéfensive donnent #b", - " de #yContre supplémentaires." + " de #yContre supplémentaire." ] }, "champ:GladiatorStylePower": { @@ -129,11 +130,11 @@ ] }, "champ:EnergizedDurationPower": { - "NAME": "Couronne enchantée", + "NAME": "Énergisé", "DESCRIPTIONS": [ - "Gagnez [E] au début de votre tour.", - "Gagnez [E] au début de vos #b", - " prochains tours.", + "Gagnez #b", + " [E] supplémentaire au prochain tour.", + " [E] supplémentaires au prochain tour.", " - TRANSLATOR NOTE: - The above line is for plural if needed to distinguish from singular." ] }, @@ -145,9 +146,9 @@ ] }, "champ:IronFortressVigorPower": { - "NAME": "Gabarit technique : Destructeur", + "NAME": "Dispositif technique : Destructeur", "DESCRIPTIONS": [ - "Lorsque vous adoptez une Pose, déclenchez la technique de la Pose du Destructeur", + "Lorsque vous adoptez une Pose, déclenchez le #yBonus #yde #yCompétence de la Pose du Destructeur", " #b", " fois." ] @@ -163,7 +164,7 @@ "NAME": "Forme gladiatrice", "DESCRIPTIONS": [ "Au début de votre tour, gagnez #b", - " de #yVigueur lorsque vous en dépensez 3 ce tour, puis faites la même chose pour le #yContre." + " de #yVigueur pour chaque 3 points dépensés pendant ce tour, puis faites la même chose pour le #yContre." ] }, "champ:NoBlockNextTurnPower": { @@ -183,9 +184,9 @@ ] }, "champ:UltimateFormNextTurnPower": { - "NAME": "Preparing Ultimate", + "NAME": "Préparation Ultime", "DESCRIPTIONS": [ - "Au début de votre prochain tour, entrez en #yPose #yUltime.", + "Au début de votre prochain tour, adoptez la #yPose #yUltime.", " NL Elle persistera pendant #b", " tours." ] @@ -200,14 +201,14 @@ "champ:ParryPower": { "NAME": "Parade", "DESCRIPTIONS": [ - "Si votre Contre est utilisé ce tour, ajoutez Riposte dans votre main." + "Si votre Contre est utilisé ce tour, obtenez une #yFrappe #yRiposte supplémentaire." ] }, "champ:BoomerangPower": { "NAME": "Boomerang", "DESCRIPTIONS": [ "Au début de votre prochain tour, remettez ", - " dans votre main. Elle coûte #b0 jusqu'à ce qu'elle soit jouée." + " dans votre main. Elle coûte #b0 et ne reviendra plus." ] }, "champ:ResolvePower": { @@ -219,25 +220,32 @@ "champ:DualPlaySrikePower": { "NAME": "Frappes en rafale", "DESCRIPTIONS": [ - "Votre prochaine #yFrappe est jouée deux fois ce tour.", + "Votre prochaine #y\"Frappe\" est jouée deux fois ce tour.", "Vos ", - " prochaines #yFrappes sont jouées deux fois ce tour." + " prochaines #y\"Frappes\" sont jouées deux fois ce tour." ] }, "champ:LastStandPower": { "NAME": "Last Stand", "DESCRIPTIONS": [ "Une fois que vous êtes en dessous de 50% de vos PV, retirez tous vos Débuffs et gagnez #b", - " de Force.", + " de #yForce.", "~Vous~ ~allez~ ~le~ ~regretter...~", "@UNE@ @DÉFAITE??@ NL @IMPOSSIBLE!!@" ] + }, + "champ:HonePower": { + "NAME": "Lame affûtée", + "DESCRIPTIONS": [ + "Vos cartes #y\"Frappe\" infligent #b", + " dégâts supplémentaires." + ] }, "champ:DoubleStyleThisTurnPower": { "NAME": "Fouet de chaînes", "DESCRIPTIONS": [ - "Pendant ce tour, les Bonus de #yCompétence accordent #b", - " d'effet supplémentaire." + "Pendant ce tour, les #yBonus #yde #yCompétence accordent #b", + " d'effets supplémentaires." ] } } diff --git a/src/main/resources/champResources/localization/fra/RelicStrings.json b/src/main/resources/champResources/localization/fra/RelicStrings.json index fdfcd1394f..f0dd854675 100644 --- a/src/main/resources/champResources/localization/fra/RelicStrings.json +++ b/src/main/resources/champResources/localization/fra/RelicStrings.json @@ -3,93 +3,108 @@ "NAME": "Couronne du champion", "FLAVOR": "VOUS ÊTES LE GAGNANT!", "DESCRIPTIONS": [ - "Au début du combat, entrez en Pose #bDéfensive ou en Pose du #rDestructeur" + "Une fois par combat, vous pouvez entrer dans une #yPose dans laquelle vous n'êtes pas actuellement." ] }, "champ:BlackKnightHelmet": { "NAME": "Casque du Chevalier noir", "FLAVOR": "Seulement une petite blessure.", "DESCRIPTIONS": [ - "La première fois que vous adoptez une Pose chaque combat: NL #bDéfensive: Gagnez 2 de Dextérité, Perdez 1 de Force. NL #rDestructeur: Gagnez 2 de Force, Perdez 1 de Dextérité." + "La première fois que vous adoptez une #yPose chaque combat: NL #bchamp:Défensive: Gagnez 2 de Dextérité, Perdez 1 de Force [REMOVE_SPACE]. NL #rchamp:Destructeur: Gagnez 2 de Force, Perdez 1 de Dextérité [REMOVE_SPACE]." ] }, "champ:Barbells": { "NAME": "Haltères", "FLAVOR": "1000 pompes ? Pff. Je peux en faire 1001.", "DESCRIPTIONS": [ - "Lorsque vous êtes dans un feu de camp, si vous avez au moins #b10 cartes non-Améliorées dans votre deck, #yAméliorez-en une aléatoirement." + "Lorsque vous êtes dans un feu de camp, si vous avez au moins #b", + "cartes non-Améliorées dans votre deck, #yAméliorez-en une aléatoirement." ] }, "champ:BerserkersGuideToSlaughter": { "NAME": "Guide du Destructeur", "FLAVOR": "Le texte est illisible.", "DESCRIPTIONS": [ - "Au début de votre tour, gagnez #b3 de Vigueur." + "Au début de votre tour, gagnez #b", + "de Vigueur [REMOVE_SPACE]." ] }, "champ:ChampionCrownUpgraded": { "NAME": "Couronne du victorieux", "FLAVOR": "Félissitations!! Vous êtes le plus grand vainqueur.", "DESCRIPTIONS": [ - "Remplace la #rCouronne #rdu #rChampion. NL Commencez chaque combat en #yPose #yUltime, qui dure pendant #b2 tours." + "Remplace ", + " [REMOVE_SPACE]. NL La prochaine fois que vous jouez un champ:Finisher à chaque tour, piochez #b", + " cartes et entrez dans une #yPose aléatoire." ] }, "champ:DefensiveTrainingManual": { "NAME": "Thèse défensive", "FLAVOR": "Pro tip: Ne vous faites pas toucher.", "DESCRIPTIONS": [ - "Le #yBonus de #yFinisher de la Pose Défensive donne #b5 #yd'Armure supplémentaire." + "Le #yBonus de #ychamp:Finisher de la #bPose #bchamp:Défensive donne #b", + "#yd'Armure supplémentaire." ] }, "champ:DeflectingBracers": { "NAME": "Bracelets déflecteurs", "FLAVOR": "Si vous pensiez que se protéger était bien...", "DESCRIPTIONS": [ - "Au début de votre tour, gagnez du #ychamp:Contre équivalent à l'Armure que vous avez perdu." + "Au début de votre tour, gagnez du #ychamp:Contre équivalent à la moitié de l'Armure expirée [REMOVE_SPACE]." ] }, "champ:DuelingGlove": { "NAME": "Gants de duel", "FLAVOR": "Comptez à partir de dix...", "DESCRIPTIONS": [ - "Après avoir utilisé une #yAttaque à cible unique, si la cible n'était pas #yVulnérable, appliquez #b1 de #yVulnérabilité." + "Après avoir utilisé une #yAttaque à cible unique [REMOVE_SPACE], si la cible n'était pas #yVulnérable [REMOVE_SPACE], appliquez #b1 de #yVulnérabilité [REMOVE_SPACE]." ] }, "champ:FightingForDummies": { "NAME": "Combattre pour les Nuls", "FLAVOR": "Étape 1. Battre l'ennemi", "DESCRIPTIONS": [ - "Si vous terminez votre tour dans aucune #yPose, gagnez 6 d'Armure." + "Si vous terminez votre tour dans aucune #yPose [REMOVE_SPACE], piochez #b1 carte supplémentaire au prochain tour." ] }, "champ:GladiatorsBookOfMartialProwess": { "NAME": "Manuel de gladiateur", "FLAVOR": "Essayez tout - quelque chose marchera sûrement.", "DESCRIPTIONS": [ - "Lorsque vous jouez un #yCombo, un #yFinisher, et que vous entrez dans une #yPose dans le même tour, gagnez #b1 de #yForce et de #yDextérité." + "Lorsque vous jouez un #yCombo [REMOVE_SPACE], un #yFinisher [REMOVE_SPACE], et que vous adoptez une #yPose dans le même tour, gagnez #b1 de #yForce et de #yDextérité [REMOVE_SPACE]." ] }, "champ:PowerArmor": { "NAME": "Armure de Puissance", "FLAVOR": "Achetée d'occasion.", "DESCRIPTIONS": [ - "Au début de votre tour, gagnez [E]. NL Votre #Vigueur et votre #Contre maximum est de #b30." + "Au début de votre tour, gagnez [E]. NL Votre #Vigueur et votre #Contre maximum est de #b", + "[REMOVE_SPACE]." + ] + }, + "champ:RageAmulet": { + "NAME": "Amulette d'inflexibilité", + "FLAVOR": "Une force que l'on croyait éphémère vous envahit comme si elle avait toujours été là.", + "DESCRIPTIONS": [ + "Chaque fois que vous dépensez de la #yVigueur [REMOVE_SPACE], gagnez #b1 de #yForce tous les #b", + " de #yVigueur dépensés." ] }, "champ:SignatureFinisher": { "NAME": "Attaque Signature", "FLAVOR": "Et maintenant, il est l'heure d'utiliser mon ATTAQUE LA PLUS PUISSANTE!", "DESCRIPTIONS": [ - "Lorsque vous la récupérez, choisisssez un #yFinisher. Ce #yFinisher coûte 0, peut être utilisée sans être dans une #yPose, et ne fait plus quitter votre #yPose.", + "Lorsque vous la récupérez, choisisssez un #yFinisher [REMOVE_SPACE]. Ce #yFinisher coûte 0 [REMOVE_SPACE], peut être utilisée sans être dans une #yPose [REMOVE_SPACE], et ne fait plus quitter votre #yPose.", "Choisissez une carte pour ", - " coûte 0, peut être utilisée sans être dans une #yPose, et ne fait plus quitter votre #yPose." + " coûte 0 [REMOVE_SPACE], peut être utilisée sans être dans une #yPose [REMOVE_SPACE], et ne fait plus quitter votre #yPose.", + "La carte attachée à cette relique a été #rretirée de votre deck, cette relique ne fonctionne plus dorénavant." ] }, "champ:SpectersHand": { "NAME": "Main de spectre", "FLAVOR": "Certaines victoires restent avec vous.", "DESCRIPTIONS": [ - "Lorsque vous Adoptez une Pose, ajoutez une #yFrappe ou une #yDéfense dans votre main. Elle coûte #b0 et a #yÉpuisement." + "Lorsque vous Adoptez une Pose [REMOVE_SPACE], ajoutez une #yFrappe ou une #yDéfense dans votre main [REMOVE_SPACE]. Elle coûte #b0 et a #yÉpuisement [REMOVE_SPACE]." ] }, "champ:LiftRelic": { @@ -97,14 +112,21 @@ "FLAVOR": "Il s'agit de l'épée gigantesque dans ton coeur.", "DESCRIPTIONS": [ "Commencez chaque combat avec #b", - " de #yForce." + " de #yForce [REMOVE_SPACE]." ] }, "champ:ChampStancesModRelic": { "NAME": "New Challenger", "FLAVOR": "Réussirez-vous à prendre la Couronne?", "DESCRIPTIONS": [ - "Commencez chaque combat dans une #yPose aléatoire du Champion." + "Commencez chaque combat dans une #yPose aléatoire du Champion [REMOVE_SPACE]." + ] + }, + "champ:BustedCrownGagText": { + "NAME": "Couronne fêlée", + "FLAVOR": "L'imitation est la forme la plus sincère de flatterie... ou pas ? Elle ne ressemble même pas à votre couronne. En réalité, c'est assez insultant.", + "DESCRIPTIONS": [ + "Au début de chaque tour, gagnez [E]. Aux écrans de sélection de cartes, vous disposez de 2 cartes de moins parmi lesquelles choisir." ] } } diff --git a/src/main/resources/champResources/localization/fra/UIStrings.json b/src/main/resources/champResources/localization/fra/UIStrings.json index 3c72d79050..a0c3199ffe 100644 --- a/src/main/resources/champResources/localization/fra/UIStrings.json +++ b/src/main/resources/champResources/localization/fra/UIStrings.json @@ -11,7 +11,7 @@ }, "champ:TechniqueMod": { "TEXT": [ - "NL Déclenchez votre *Bonus de *Compétence." + "NL Déclenchez votre champ:Bonus *de *Compétence." ] }, "champ:OpenerMod": { @@ -41,4 +41,4 @@ "champ:Combo Pose [#5ebf2a]Défensive:" ] } -} \ No newline at end of file +} diff --git a/src/main/resources/champResources/localization/jpn/CardStrings.json b/src/main/resources/champResources/localization/jpn/CardStrings.json index dbba01d00a..ff60074ca3 100644 --- a/src/main/resources/champResources/localization/jpn/CardStrings.json +++ b/src/main/resources/champResources/localization/jpn/CardStrings.json @@ -1,63 +1,59 @@ { "champ:Strike": { "NAME": "ストライク", - "DESCRIPTION": " !D! ダメージを与える。" + "DESCRIPTION": "!D! ダメージを与える。" }, "champ:Defend": { "NAME": "防御", - "DESCRIPTION": " !B! ブロックを得る。" + "DESCRIPTION": "!B! ブロックを得る。" }, "champ:Taunt": { "NAME": "誘い", - "DESCRIPTION": "脱力 !M! と 弱体 1 を与える。", - "UPGRADE_DESCRIPTION": "敵全体に 脱力 1 と 弱体 1 を与える。" + "DESCRIPTION": "脱力 と 弱体 !M! を与える。", + "UPGRADE_DESCRIPTION": "敵全体に 脱力 と 弱体 !M! を与える。。" }, "champ:Execute": { "NAME": "エクスキュート", - "DESCRIPTION": " !D! ダメージを !cool! 回与える。", - "UPGRADE_DESCRIPTION": " !D! ダメージを !cool! 回与える。" + "DESCRIPTION": "!D! ダメージを !cool! 回与える。", + "UPGRADE_DESCRIPTION": "!D! ダメージを !cool! 回与える。" }, "champ:StanceDance": { "NAME": "スタンスダンス", - "DESCRIPTION": "入るスタンスを選択。 NL * champ:スキルボーナス を得る。", - "UPGRADE_DESCRIPTION": "入るスタンスを選択。 NL * champ:スキルボーナス を 2 回得る。", + "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:守護 に入る。" - ] + "NAME": "閃き", + "DESCRIPTION": "保留 NL 別のスタンスに入る。 NL 廃棄", + "UPGRADE_DESCRIPTION": "保留 NL 別のスタンスに入る。" }, "champ:SwordSigil": { "NAME": "勝利の紋章", - "DESCRIPTION": "現在のスタンスの * champ:スキルボーナス を !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 このターン champ:スキルボーナス の効果が !M! 上昇。" + "DESCRIPTION": "!D! ダメージを与える。 NL このターン champ:スキルボーナス の効果が !M! 上昇する。" }, "champ:FocusedDefense": { "NAME": "回避行動", - "DESCRIPTION": " !B! ブロックを得る。 NL 気力 !M! を得る。 NL champ:狂化 のスタンスに入る。" + "DESCRIPTION": "!B! ブロックを得る。 NL 気力 !M! を得る。 NL champ:狂化 のスタンスに入る。" }, "champ:FocusedBerserking": { "NAME": "オールアウト", @@ -65,11 +61,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": "狂化の叫び", @@ -77,11 +73,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": "扇形投擲", @@ -90,15 +86,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": "トルネードパンチ", @@ -107,7 +103,7 @@ }, "champ:EnGarde": { "NAME": "構える", - "DESCRIPTION": " !B! ブロックを得る。 NL このターンブロックが破壊されると次のターン !B! ブロックを得る。" + "DESCRIPTION": "!B! ブロックを得る。 NL このターンブロックが破壊されると次のターン !B! ブロックを得る。" }, "champ:ShieldSlam": { "NAME": "真実の瞬間", @@ -123,34 +119,34 @@ }, "champ:BringItOn": { "NAME": "攻撃してみろ!", - "DESCRIPTION": " !B! ブロックを得る。 NL !M! champ:カウンター を得る。", + "DESCRIPTION": "!B! ブロックを得る。 NL !M! champ:カウンター を得る。", "EXTENDED_DESCRIPTION": [ "スタンスに入っていない。" ] }, "champ:ShieldThrow": { "NAME": "シールドスロー", - "DESCRIPTION": "現在のブロックと同等のダメージを2回与える。", + "DESCRIPTION": "現在のブロックと同等のダメージを2回与える。 NL champ:守護 スタンスでない場合、次のターンカードから *ブロック を得られなくなる。 ", "EXTENDED_DESCRIPTION": [ - "現在のブロックと同等のダメージ( !D! )を2回与える。" + "現在のブロックと同等のダメージ( !D! )を2回与える。 NL champ:守護 スタンスでない場合、次のターンカードから *ブロック を得られなくなる。" ] }, "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 回得る。 NL * champ:スキルボーナス を 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": "鋼鉄の要塞", @@ -158,11 +154,11 @@ }, "champ:Haymaker": { "NAME": "パイルドライバー", - "DESCRIPTION": " !D! ダメージを与える。 NL 弱体 2 を与える。 NL 脱力 2 を与える。" + "DESCRIPTION": "!D! ダメージを与える。 NL 弱体 2 を与える。 NL 脱力 2 を与える。" }, "champ:ViciousMockery": { "NAME": "悪意ある嘲笑", - "DESCRIPTION": "気力 !M! を得る。 NL 脱力 !DM! を与える。 NL * champ:スキルボーナス を得る。", + "DESCRIPTION": "気力 !M! を得る。 NL 脱力 !DM! を与える。 NL 現在の *スタンス の champ:スキルボーナス を得る。", "EXTENDED_DESCRIPTION": [ "狂化 champ:コンボ: 一時的な 筋力 !M! を得る。 NL ", "守護 champ:コンボ: 一時的な 敏捷性 !M! を得る。" @@ -170,15 +166,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": "エンチャントソード", @@ -189,11 +185,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 champ:狂化 スタンスでない場合、次のターン *アタック をプレイ出来なくなる。" }, "champ:MurderStrike": { "NAME": "マーダーストライク", @@ -201,39 +197,38 @@ }, "champ:HeavySlash": { "NAME": "達人の一撃", - "DESCRIPTION": " !D! ダメージを与える。 NL ランダムな スキル を1枚手札に加える。 NL それはコストが0になる。", - "UPGRADE_DESCRIPTION": " !D! ダメージを与える。 NL ランダムな スキル+ を1枚手札に加える。 NL それはコストが0になる。" + "DESCRIPTION": "!D! ダメージを与える。 NL 次のターン開始時、 防御されなかったダメージに等しい 気力 を得る。" }, "champ:CheapShot": { "NAME": "卑劣な攻撃", - "DESCRIPTION": " !D! ダメージを与える。 NL 対象がボスの場合更に2回攻撃する。それ以外なら hermit:スタン させる。 NL 廃棄" + "DESCRIPTION": "!D! ダメージを与える。 NL 対象がボスの場合更に2回攻撃する。それ以外なら hermit:スタン させる。 NL 廃棄" }, "champ:RisingSlash": { "NAME": "ライジングストライク", - "DESCRIPTION": " !D! ダメージを与える。 NL 最後にプレイされたカードが champ:フィニッシャー だった場合もう一度 !D! ダメージを与える。" + "DESCRIPTION": "保留 NL !D! ダメージを与える。 NL 直前にプレイしたカードが champ:フィニッシャー だった場合もう一度 !D! ダメージを与える。" }, "champ:Shatter": { - "NAME": "シャッター", - "DESCRIPTION": " !D! ダメージを与える。 NL *全スタンス champ:コンボ: 脱力 と 弱体 !M! を与える。" + "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": [ "今は時期ではない", "まだその敵を仕留める準備が出来てない" @@ -241,11 +236,11 @@ }, "champ:CrownThrow": { "NAME": "王冠攻撃", - "DESCRIPTION": " !D! ダメージを与える。 NL *狂化 champ:コンボ: アタックを !M! 枚引く。" + "DESCRIPTION": "!D! ダメージを与える。 NL *狂化 champ:コンボ: カードを !M! 枚引く。" }, "champ:Encircle": { "NAME": "包囲", - "DESCRIPTION": "敵全体に !D! ダメージを与える。 NL 攻撃が当たった敵の数だけカードを !M! 枚引く。" + "DESCRIPTION": "敵全体に !D! ダメージを与える。 NL 攻撃した敵の数だけ カードを !M! 枚引く。" }, "champ:LastStand": { "NAME": "ラストスタンド", @@ -257,8 +252,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": [ "今は動く時期じゃない" ] @@ -278,7 +273,7 @@ }, "champ:SteelEdge": { "NAME": "鋼鉄の刃", - "DESCRIPTION": " !D! ダメージを X 回与える。 NL 以下の効果を X 回発動する。 NL (少なくとも 1 回は発動する): ", + "DESCRIPTION": "!D! ダメージを X 回与える。 NL X回、最低でも1回次の効果を得る:", "EXTENDED_DESCRIPTION": [ "狂化 champ:コンボ: !D! ダメージを X 回与える。 NL ", "守護 champ:コンボ: !B! ブロックを X 回得る。", @@ -289,22 +284,22 @@ }, "champ:Improvising": { "NAME": "即興", - "DESCRIPTION": "ターン開始時スタンスに入っていなければランダムなスタンスに入る。" + "DESCRIPTION": "あなたが スタンス に入る度に、 champ:スキルボーナス を !M! 回発動する。" }, "champ:CalledShot": { "NAME": "リフレッシュ", - "DESCRIPTION": "*狂化 champ:コンボ : [E] [E] を得て、このカードを廃棄する。 NL *守護 champ:コンボ : カードを !M! 枚引く。", - "UPGRADE_DESCRIPTION": "*狂化 champ:コンボ : [E] [E] [E] を得て、このカードを廃棄する。 NL *守護 champ:コンボ : カードを !M! 枚引く。", + "DESCRIPTION": "*狂化 champ:コンボ: [E] [E] を得て、これを廃棄する。 NL *守護 champ:コンボ: カードを !M! 枚引く。", + "UPGRADE_DESCRIPTION": "*狂化 champ:コンボ: [E] [E] [E] を得て、これを廃棄する。 NL *守護 champ:コンボ: カードを !M! 枚引く。", "EXTENDED_DESCRIPTION": [ - "狂化 champ:コンボ : [E] [E] を得て、このカードを廃棄する。 NL ", - "狂化 champ:コンボ : [E] [E] [E] を得て、このカードを廃棄する。 NL ", - "守護 champ:コンボ : カードを !M! 枚引く。", + "狂化 champ:コンボ: [E] [E] を得て、これを廃棄する。 NL ", + "狂化 champ:コンボ: [E] [E] [E] を得て、これを廃棄する。 NL ", + "守護 champ:コンボ: カードを !M! 枚引く。", "今はこれを行う時期じゃない" ] }, "champ:PerfectedStrike": { "NAME": "パーフェクトストライク", - "DESCRIPTION": " !D! ダメージを与える。 NL 全ての「ストライク」の数 x !M! 追加ダメージ。" + "DESCRIPTION": "!D! ダメージを与える。 NL 全ての「ストライク」の数 x !M! 追加ダメージ。" }, "champ:GladiatorForm": { "NAME": "闘士化", @@ -312,29 +307,29 @@ }, "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": "ターン開始時ランダムな \"ストライク\" の gremlin:エコー を得る。 NL そのカードはコストが0。", - "UPGRADE_DESCRIPTION": "ターン開始時ランダムなアップグレードされた \"ストライク\" の gremlin:エコー を得る。 NL そのカードはコストが0。" + "DESCRIPTION": "ターン開始時ランダムな「ストライク」 の gremlin:エコー を得る。 NL そのカードはプレイするまでコストが0になる。", + "UPGRADE_DESCRIPTION": "ターン開始時ランダムな「ストライク+」 の gremlin:エコー を得る。 NL そのカードはプレイするまでコストが0になる。" }, "champ:DefensiveStyle": { - "NAME": "防御の構え", - "DESCRIPTION": " * champ:スキルボーナス が追加で !M! の 気力 と champ:カウンター を得る。" + "NAME": "ダブルスタイル", + "DESCRIPTION": "champ:スキルボーナス が追加で !M! champ:カウンター と 気力を与える。" }, "champ:GladiatorStyle": { "NAME": "正々堂々", - "DESCRIPTION": " *狂化 champ:コンボ: 筋力 !M! を得る。 NL *守護 champ:コンボ: 敏捷性 !M! を得る。" + "DESCRIPTION": "*狂化 champ:コンボ: 筋力 !M! を得る。 NL *守護 champ:コンボ: 敏捷性 !M! を得る。" }, "champ:BerserkerStyle": { - "NAME": "狂化の構え", - "DESCRIPTION": " 戦闘中、全ての「ストライク」カードのダメージが !M! 増加する。" + "NAME": "ホーンブレード", + "DESCRIPTION": "あなたの 「ストライク」 カードは追加で !M! ダメージを与える。" }, "champ:Riposte": { "NAME": "リポストストライク", @@ -342,8 +337,8 @@ }, "champ:Endure": { "NAME": "耐える", - "DESCRIPTION": " champ:守護 のスタンスに入る。 NL !B! ブロックを得る。 NL このカードは *筋力 の影響を受ける。", - "UPGRADE_DESCRIPTION": " champ:守護 のスタンスに入る。 NL !B! ブロックを得る。 NL このカードは *筋力 の影響を受ける。" + "DESCRIPTION": "champ:守護 のスタンスに入る。 NL !B! ブロックを得る。 NL このカードは *敏捷性 の代わりに *筋力 の影響を受ける。", + "UPGRADE_DESCRIPTION": "champ:守護 のスタンスに入る。 NL !B! ブロックを得る。 NL このカードは *筋力 の影響も受ける。" }, "champ:PreemptiveStrike": { "NAME": "プリムストライク", @@ -355,7 +350,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": { @@ -383,8 +378,8 @@ }, "champ:TripleStrike": { "NAME": "トリプルストライク", - "DESCRIPTION": " !D! ダメージを与える。 NL コストが0で * champ:スキルボーナス が付いた *ストライク の gremlin:エコー を2枚手札に加える。", - "UPGRADE_DESCRIPTION": " !D! ダメージを与える。 NL コストが0で * champ:スキルボーナス が付いた *ストライク+ の gremlin:エコー を2枚手札に加える。" + "DESCRIPTION": "!D! ダメージを与える。 NL コストが0で champ:スキルボーナス が付いた *ストライク の gremlin:エコー を2枚手札に加える。", + "UPGRADE_DESCRIPTION": "!D! ダメージを与える。 NL コストが0で champ:スキルボーナス が付いた *ストライク の gremlin:エコー を2枚手札に加える。" }, "champ:WindUp": { "NAME": "ワインドアップ", @@ -397,6 +392,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 0619cd739d..424c99e3f2 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 c3b5919044..3a95554cae 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] 既にすべての本を持っている。" ] }, @@ -49,12 +49,12 @@ "どんな代償を払おうと、この智慧を得る価値はある。 NL NL 本から学んだ教えを心に刻み、あなたは新しい犠牲者を探しに旅立った。" ], "OPTIONS": [ - "[読む] 選択したアタックに #yスキルボーナス を付与。 #r", - " HPを失う。", + "[読む] #g選択したアタックに #yスキルボーナス #gを付与。 #rHPを #r", + " 失う。", "[立ち去る]", "[Locked] 必要:アタックカード", - "選択したアタックに #yスキルボーナス を付与", - "[読む] 選択したアタックに #yスキルボーナス を付与。 #r呪い #r- #r傲慢" + "選択したカードに スキルボーナス を付与する。", + "[読む] #g選択したアタックに #yスキルボーナス #gを付与。 #r呪い #r- #rプライド" ] }, "champ:Gym": { @@ -86,7 +86,7 @@ "OPTIONS": [ "[戦闘: センチュリオンとミスティック] #g入手: #gマントの留め金。", "[戦闘: グレムリンボス] #g入手: #gチャンピオンベルト。", - "[戦闘: スレイバー二人] #g入手: #gリストブレード。", + "[戦闘: スレイバー二人] #g入手: #g蹄鉄。", "[立ち去る]" ] }, @@ -100,4 +100,4 @@ "[Locked] 必要:ストライクまたは防御。" ] } -} +} \ No newline at end of file diff --git a/src/main/resources/champResources/localization/jpn/KeywordStrings.json b/src/main/resources/champResources/localization/jpn/KeywordStrings.json index 04a1d76c1f..1390367cfb 100644 --- a/src/main/resources/champResources/localization/jpn/KeywordStrings.json +++ b/src/main/resources/champResources/localization/jpn/KeywordStrings.json @@ -4,14 +4,15 @@ "NAMES": [ "bonus", "bonuses", - "スキルボーナス", "technique", "techniques", - "テクニック", "champ:[crown_icon]", - "[crown_icon]" + "[crown_icon]", + "テクニック", + "ボーナス", + "スキルボーナス" ], - "DESCRIPTION": "#yスタンス 中の場合、そのスキルボーナスを発動する。 NL #r狂化 #yスキルボーナス : #b2 #y気力 を得る。 NL #b守護 #yスキルボーナス : #b3 #yカウンター を得る。" + "DESCRIPTION": "各種 #yスタンス では スキル にボーナスが付く。 NL #y狂化 : #b2 #y気力 を得る。 NL #y守護 : #yカウンター #b3 を得る。" }, { "PROPER_NAME": "コンボ", @@ -25,11 +26,10 @@ { "PROPER_NAME": "ストライク", "NAMES": [ - "strike", - "strikes", - "ストライク" + "ストライク", + "strikes" ], - "DESCRIPTION": "名前に「ストライク」が含まれるカード。" + "DESCRIPTION": "カード名に 「ストライク」を含むカード。 NL 初期デッキ内の ストライク のみを指す物と混同しないよう注意。" }, { "PROPER_NAME": "フィニッシャー", @@ -40,7 +40,7 @@ "champ:[fist_icon]", "フィニッシャー" ], - "DESCRIPTION": "スタンスに入っている必要がある。 NL フィニッシャーをプレイ後、スタンスを解除してフィニッシャーボーナスを得る。 NL #r狂化 #yフィニッシャーボーナス : #y筋力 #b1 を得る。 NL #b守護 #yフィニッシャーボーナス : #b8 #yブロック を得る。" + "DESCRIPTION": "スタンスに入っている必要がある。 NL フィニッシャーをプレイ後、スタンスを解除してフィニッシャーボーナスを得る。 NL #y狂化 : #y筋力 #b1 を得る。 NL #y守護 : #b6 #yブロック を得る。" }, { "PROPER_NAME": "カウンター", @@ -48,7 +48,7 @@ "counter", "カウンター" ], - "DESCRIPTION": "次に #y攻撃 でダメージを受けた時、同じダメージを与える #yリポストストライク を得る。" + "DESCRIPTION": "次に #y攻撃 でダメージを受けた時、そのダメージ相当の #yリポストストライク を手札に加える。" }, { "PROPER_NAME": "守護", @@ -57,7 +57,7 @@ "defensive.", "守護" ], - "DESCRIPTION": "#yスタンス NL #yスキルボーナス : NL #yカウンター #b3 を得る。 NL #yフィニッシャー : NL #b8 #yブロック を得る。" + "DESCRIPTION": "#yスタンス NL #yスキルボーナス NL #yカウンター #b3 を得る。 NL #yフィニッシャーエフェクト NL #b6 #yブロック を得る。" }, { "PROPER_NAME": "狂化", @@ -66,7 +66,7 @@ "berserker.", "狂化" ], - "DESCRIPTION": "#yスタンス NL #yスキルボーナス : NL #b2 #y気力 を得る。 NL #yフィニッシャー : NL #y筋力 #b1 を得る。" + "DESCRIPTION": "#yスタンス NL #yスキルボーナス NL #b2 #y気力 を得る。 NL #yフィニッシャーエフェクト NL #y筋力 #b1 を得る。" }, { "PROPER_NAME": "剣闘", @@ -75,7 +75,7 @@ "gladiator.", "剣闘" ], - "DESCRIPTION": "#yスタンス NL #yスキルボーナス : NL カードを1枚引く。 NL #yフィニッシャー : NL 次のターン カードを #b1 枚引き、 [E] を得る。ターンを終了する。" + "DESCRIPTION": "#yスタンス NL #yスキルボーナス NL カードを1枚引く。 NL #yフィニッシャーエフェクト NL 次のターン カードを #b1 枚引き、 [E] を得る。ターンを終了する。" }, { "PROPER_NAME": "アルティメットスタンス", diff --git a/src/main/resources/champResources/localization/jpn/PowerStrings.json b/src/main/resources/champResources/localization/jpn/PowerStrings.json index ab0b099e64..b5e7ad6430 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スタンス に入った時、 *スキルボーナス を #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筋力 ", " を得る。" ] }, @@ -172,9 +170,9 @@ "champ:NoBlockNextTurnPower": { "NAME": "シールドスロー", "DESCRIPTIONS": [ - "次のターンブロックを得られない。", + "次のターン #yブロック を得られない。", "あと #b", - " ターンの間ブロックを得られない。" + " ターンの間 #yブロック を得られない。" ] }, "champ:UltimateStancePower": { @@ -203,7 +201,7 @@ "champ:ParryPower": { "NAME": "パリング", "DESCRIPTIONS": [ - "このターンカウンターが発動した場合、 応酬 を1枚手札に加える。" + "このターン #yカウンター が発動した場合、 #yリポストストライク を追加で手札に加える。" ] }, "champ:BoomerangPower": { @@ -237,10 +235,10 @@ ] }, "champ:HonePower": { - "NAME": "研ぎ澄まされた刃", + "NAME": "ホーンブレード", "DESCRIPTIONS": [ - "戦闘中、全ての #y「ストライク」 カードのダメージは #b", - " ダメージ増加する。" + "あなたの #yストライク は追加で #b", + " ダメージを与える。" ] }, "champ:DoubleStyleThisTurnPower": { @@ -250,4 +248,4 @@ " の効果を得る。" ] } -} +} \ No newline at end of file diff --git a/src/main/resources/champResources/localization/jpn/RelicStrings.json b/src/main/resources/champResources/localization/jpn/RelicStrings.json index 4fcfda8566..0f2d6dbb7e 100644 --- a/src/main/resources/champResources/localization/jpn/RelicStrings.json +++ b/src/main/resources/champResources/localization/jpn/RelicStrings.json @@ -3,43 +3,47 @@ "NAME": "チャンピオンの王冠", "FLAVOR": "お前が勝者だ!", "DESCRIPTIONS": [ - "戦闘開始時 #bchamp:守護 か #rchamp:狂化 を選択して #yスタンス に入る。" + "戦闘毎に1度、自分が入っていない #yスタンス に入る事が出来る。" ] }, "champ:BlackKnightHelmet": { "NAME": "黒騎士の兜", "FLAVOR": "かすり傷だ。", "DESCRIPTIONS": [ - "戦闘中初めて各 #yスタンス に入る時: NL #bchamp:守護: 敏捷性 #b2 を得て #y筋力 #b1 を失う。 NL #rchamp:狂化: #y筋力 #b2 を得て #y敏捷性 #b1 を失う。" + "戦闘中初めて各 #yスタンス に入る時: NL #b守護: 敏捷性 #b2 を得て #y筋力 #b1 を失う。 NL #r狂化: #y筋力 #b2 を得て #y敏捷性 #b1 を失う。" ] }, "champ:Barbells": { "NAME": "バーベル", "FLAVOR": "1000回出来るかって? ぷふっ。 1001回出来るさ。", "DESCRIPTIONS": [ - "休憩所に入った時、アップグレードされていないカードが #b10 枚以上あればランダムに1枚 #yアップグレード する。" + "休憩所に入った時、アップグレードされていないカードが #b", + " 枚以上あればランダムに1枚 #yアップグレード する。" ] }, "champ:BerserkersGuideToSlaughter": { "NAME": "バーサーカーの心得", "FLAVOR": "文字が読めない。", "DESCRIPTIONS": [ - "ターン開始時 #b3 #y気力 を得る。" + "ターン開始時 #b", + " #y気力 を得る。" ] }, "champ:ChampionCrownUpgraded": { "NAME": "皇帝の冠", "FLAVOR": "Conglaturation!! あなたは最高の勝者だ。", "DESCRIPTIONS": [ - " #rチャンピオンの王冠 を置き換える。", - " NL 戦闘開始時 #ychamp:アルティメット #yスタンス に入る。#b3 ターン継続する。" + " ", + " [REMOVE_SPACE] [] NL 毎ターン、初めて #yフィニッシャー をプレイした時、 #b", + " 枚のカードを引き、ランダムな #yスタンス に入る。" ] }, "champ:DefensiveTrainingManual": { "NAME": "防御の神髄", "FLAVOR": "プロの一言:当たらないようにしよう。", "DESCRIPTIONS": [ - "守護のスタンスの #yフィニッシャーボーナス に追加で #b5 #yブロック 。" + "#bchamp:守護 #bスタンス の #yフィニッシャーボーナス で追加で #b", + " #yブロック を得る 。" ] }, "champ:DeflectingBracers": { @@ -67,60 +71,62 @@ "NAME": "剣闘士マニュアル", "FLAVOR": "何でもやってみろ。何か引っかかるさ。", "DESCRIPTIONS": [ - "同じターンに #yコンボ と #yフィニッシャー をプレイし、更に #yスタンス に入ったら #y筋力 と #y敏捷性 を #b1 得る。" + "同じターンに #yコンボ と #yフィニッシャー と #yスタンス の3種をプレイする度に、 #y筋力 と #y敏捷性 を #b1 得る。" ] }, "champ:PowerArmor": { "NAME": "パワーアーマー", "FLAVOR": "中古で買った。", "DESCRIPTIONS": [ - "ターン開始時 [E] を得る。 NL #y気力と #ychamp:カウンター の最大値が #b10 になる。" + "ターン開始時 [E] を得る。 NL #y気力と #ychamp:カウンター の最大値が #b", + " になる。" ] }, "champ:RageAmulet": { "NAME": "不屈のアミュレット", - "FLAVOR": "かつては儚いと思っていた力が、まるでずっとそこにあったかのように、あなたの中に流れていく。", + "FLAVOR": "かつては儚いものと思われていた力が、まるで最初から自分の中にあったかのように、あなたの内を流れている。", "DESCRIPTIONS": [ - " #y気力 を #b 消費するごとに #y筋力 #b1 を得る。", - " #y気力 を消費。" + " 一定の #y気力 を消費する度に #b1 #y筋力 を得る。 あと #b", + " #y気力" ] - }, + }, "champ:SignatureFinisher": { - "NAME": "フィニッシャーのサイン", + "NAME": "フィニッシャーサイン", "FLAVOR": "さあいよいよ俺のアルティメットムーブの出番だ!", "DESCRIPTIONS": [ - "入手時 デッキ の #yフィニッシャー を選択する。選ばれた #yフィニッシャー のコストが #b0 になり、 #yスタンス が無くても使用出来るようになり、使用時に #yスタンス を解除しなくなる。", + "入手時、 デッキ内の #yフィニッシャー を選択する。選んだ #yフィニッシャー のコストが #b0 になり、 #yスタンス が無くても使用出来るようになり、使用時に #yスタンス を解除しなくなる。", "選択されたカード: ", - " コストが #b0 になり、 #yスタンス が無くても使用出来るようになり、使用時に #yスタンス を解除しなくなる" + " コストが #b0 になり、 #yスタンス が無くても使用出来るようになり、使用時に #yスタンス を解除しなくなる", + "このレリックの効果を受けたカードはデッキから #r削除 された。" ] }, "champ:SpectersHand": { "NAME": "幽霊の手", "FLAVOR": "心に残る勝利もある。", "DESCRIPTIONS": [ - " #yスタンス に入った時 #yストライク または #y防御 の #ygremlin:エコー を得る。それらのコストは #b0 。" + " #yスタンス に入った時 #yストライク または #y防御 を得る。それらはコストが #b0 で #y廃棄 を持つ。" ] }, "champ:LiftRelic": { "NAME": "内なる強さ", "FLAVOR": "心の中にある巨大な剣の事さ。", "DESCRIPTIONS": [ - "戦闘開始時、 #y筋力 #b ", - " を得る。" + "戦闘を #y筋力 #b", + " を持って開始する。" ] }, "champ:ChampStancesModRelic": { "NAME": "ニューチャレンジャー", "FLAVOR": "王冠を奪うことが出来るのか?", "DESCRIPTIONS": [ - "戦闘開始時、ランダムな #yスタンス に入る。" + "戦闘開始時ランダムにチャンプの #yスタンス に入る。" ] }, "champ:BustedCrownGagText": { "NAME": "壊れた王冠", - "FLAVOR": "模倣はお世辞の最も誠実な形......か?あなたの王冠には似ても似つかない。実際、侮辱のようなものだ。", + "FLAVOR": "模倣は最大の賛辞…それとも?しかしあなたの王冠には似ても似つかない。失礼なくらいだ。", "DESCRIPTIONS": [ - "ターンの開始時、 [E] を得る。報酬のカード選択画面で、選択できるカードが2枚減る。" + "ターン開始時、 [E] を得る。報酬のカード選択画面で、選択出来るカードが2枚減る。" ] } -} +} \ No newline at end of file diff --git a/src/main/resources/champResources/localization/jpn/RunModStrings.json b/src/main/resources/champResources/localization/jpn/RunModStrings.json index ac978d0ac7..f6b6fef2e8 100644 --- a/src/main/resources/champResources/localization/jpn/RunModStrings.json +++ b/src/main/resources/champResources/localization/jpn/RunModStrings.json @@ -1,6 +1,6 @@ { "Slimebound:AllSplit": { - "NAME": "スライム・ザ・スパイア", - "DESCRIPTION": "すべての敵が2体のスライムに分裂する。" + "NAME": "Slime the Spire", + "DESCRIPTION": "All enemies Split into two Slime enemies." } -} +} \ 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 b3235d96e3..c53466b456 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 ee4e4cd1b5..0298bb486e 100644 --- a/src/main/resources/champResources/localization/kor/CardStrings.json +++ b/src/main/resources/champResources/localization/kor/CardStrings.json @@ -1,402 +1,397 @@ -{ - "champ:Strike": { - "NAME": "타격", - "DESCRIPTION": "피해를 !D! 줍니다." - }, - "champ:Defend": { - "NAME": "수비", - "DESCRIPTION": "방어도를 !B! 얻습니다." - }, - "champ:Taunt": { - "NAME": "도발", - "DESCRIPTION": "약화를 !M! 부여합니다. NL 취약을 1 부여합니다.", - "UPGRADE_DESCRIPTION": "적 전체에게 약화 와 취약을 1 부여합니다." - }, - "champ:Execute": { - "NAME": "처형", - "DESCRIPTION": "피해를 !D! 만큼 !cool! 번 줍니다.", - "UPGRADE_DESCRIPTION": "피해를 !D! 만큼 !cool! 번 줍니다." - }, - "champ:StanceDance": { - "NAME": "춤 자세", - "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:수비 자세를 취합니다." - ] - }, - "champ:SwordSigil": { - "NAME": "승리의 인장", - "DESCRIPTION": "현재 자세의 *스킬 *카드 champ:보너스를 !M! 번 얻습니다." - }, - "champ:FaceSlap": { - "NAME": "안면 강타", - "DESCRIPTION": "피해를 !D! 줍니다. NL *광폭화 champ:연계: 취약을 !M! 부여합니다." - }, - "champ:FlashCut": { - "NAME": "순간 타격", - "DESCRIPTION": "피해를 !D! 줍니다. NL *수비 champ:연계: champ:반격을 !M! 얻고 방어도를 !B! 얻습니다." - }, - "champ:DefensiveShout": { - "NAME": "수비 함성", - "DESCRIPTION": "champ:반격을 !M! 얻습니다. champ:수비 자세를 취합니다." - }, - "champ:ShieldSigil": { - "NAME": "쇠사슬 채찍", - "DESCRIPTION": "피해를 !D! 줍니다. NL 이번 턴 동안 *스킬 *카드 champ:보너스를 !M! 증가시킵니다." - }, - "champ:FocusedDefense": { - "NAME": "상하좌우", - "DESCRIPTION": "champ:광폭화 자세를 취합니다. NL 방어도를 !B! 얻습니다. NL 활력 을 !M! 얻습니다." - }, - "champ:FocusedBerserking": { - "NAME": "총력전", - "DESCRIPTION": "소멸. NL champ:자세에서 벗어나지 않습니다. 이 효과를 !M! 번 발동합니다:" - }, - "champ:SetATrap": { - "NAME": "함정 설치", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL *수비 champ:연계: 적 전체에게 약화를 !M! 부여합니다." - }, - "champ:Backstep": { - "NAME": "뒷걸음", - "DESCRIPTION": "방어도를 !B! 얻습니다. 이 카드의 방어도를 활력 만큼 증가시킵니다." - }, - "champ:BerserkersShout": { - "NAME": "광폭화 함성", - "DESCRIPTION": "활력 을 !M! 얻습니다. NL champ:광폭화 자세를 취합니다." - }, - "champ:RageSigil": { - "NAME": "싸움 계획", - "DESCRIPTION": "champ:수비 자세를 취합니다. NL 방어도를 !B! 얻습니다. NL 예지 !M! ." - }, - "champ:GutPunch": { - "NAME": "내장 파괴", - "DESCRIPTION": "피해를 !D! 줍니다. NL *자세 champ:연계: 1턴 동안 champ:궁극의 자세를 취합니다 NL 소멸." - }, - "champ:FanOfKnives": { - "NAME": "칼날 폭풍", - "DESCRIPTION": "적 전체에게 피해를 !D! 줍니다. NL *광폭화 champ:연계: 피해를 두 번 줍니다.", - "UPGRADE_DESCRIPTION": "적 전체에게 피해를 !D! 줍니다. NL *광폭화 champ:연계: 피해를 세 번 줍니다." - }, - "champ:Devastate": { - "NAME": "완파", - "DESCRIPTION": "피해를 !D! 만큼 !M! 번 줍니다. 이번 전투에 사용된 champ:마무리 카드의 수만큼 이 카드의 비용이 [E] 감소합니다." - }, - "champ:Circumvent": { - "NAME": "우회", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL 카드를 !M! 장 뽑습니다. NL 카드를 !M! 장 버립니다. NL *수비 champ:연계: 카드를 버리지 않습니다." - }, - "champ:SkillfulDodge": { - "NAME": "능숙한 회피", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL champ:반격을 !M! 얻습니다. NL *수비 champ:연계: 이번 전투 동안 이 카드의 방어도 와 champ:반격을 !cool! 증가시킵니다." - }, - "champ:TornadoPunch": { - "NAME": "회오리 주먹", - "DESCRIPTION": "적 전체에게 피해를 !D! 줍니다. NL *수비 champ:연계: 공격한 적 하나당 방어도를 !B! 얻습니다.", - "UPGRADE_DESCRIPTION": "적 전체에게 피해를 !D! 줍니다. NL *수비 champ:연계: 공격한 적 하나당 방어도를 !B! 얻습니다." - }, - "champ:EnGarde": { - "NAME": "준비 시작!", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL 이번 턴에 방어도를 모두 잃으면 다음 턴에 방어도를 !B! 얻습니다." - }, - "champ:ShieldSlam": { - "NAME": "최후의 순간", - "DESCRIPTION": "보존. NL 카드를 !M! 장 뽑습니다.", - "UPGRADE_DESCRIPTION": "보존. NL 카드를 !M! 장 뽑습니다." - }, - "champ:EnchantShield": { - "NAME": "방패 강화", - "DESCRIPTION": "카드를 선택합니다. 이번 전투 동안 그 카드의 방어도를 !M! 증가시킵니다. NL 소멸.", - "EXTENDED_DESCRIPTION": [ - "그건 어리석은 짓이다." - ] - }, - "champ:BringItOn": { - "NAME": "덤벼라", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL champ:반격을 !M! 얻습니다.", - "EXTENDED_DESCRIPTION": [ - "자세를 취하고 있지 않다." - ] - }, - "champ:ShieldThrow": { - "NAME": "방패 투척", - "DESCRIPTION": "현재 방어도 만큼 피해를 2번 줍니다.", - "EXTENDED_DESCRIPTION": [ - "현재 방어도 !D! 만큼 피해를 2번 줍니다." - ] - }, - "champ:FalseCounter": { - "NAME": "손 풀기", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL 다음 턴에 [E] 를 얻고 카드를 2장 뽑습니다.", - "UPGRADE_DESCRIPTION": "방어도를 !B! 얻습니다. NL 다음 턴에 [E] [E] 를 얻고 카드를 2장 뽑습니다." - }, - "champ:IronFortress": { - "NAME": "현란한 꺾기", - "DESCRIPTION": "champ:자세를 취할 때마다 방어도를 !M! 얻습니다." - }, - "champ:Lariat": { - "NAME": "래리어트", - "DESCRIPTION": "방어도를 !B! 만큼 X번 얻습니다. NL 현재 자세의 *스킬 *카드 champ:보너스를 X번 얻습니다." - }, - "champ:HoldFirm": { - "NAME": "버티기", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL champ:반격을 !M! 얻습니다. NL bronze:흐릿함을 1 얻습니다." - }, - "champ:ShieldWall": { - "NAME": "철의 요새", - "DESCRIPTION": "민첩을 2 얻습니다. NL 매 턴 종료 시 방어도를 !M! 얻습니다." - }, - "champ:Haymaker": { - "NAME": "맹타", - "DESCRIPTION": "피해를 !D! 줍니다. NL 취약을 2 부여합니다. NL 약화를 2 부여합니다." - }, - "champ:ViciousMockery": { - "NAME": "악랄한 조롱", - "DESCRIPTION": "활력 을 !M! 얻습니다. NL 약화를 !DM! 부여합니다. NL 현재 자세의 *스킬 *카드 champ:보너스를 얻습니다.", - "EXTENDED_DESCRIPTION": [ - "광폭화 champ:연계: 힘을 !M! 얻습니다. 이번 턴이 끝날 때 힘을 !M! 잃습니다. NL ", - "수비 champ:연계: 민첩을 !M! 얻습니다. 이번 턴이 끝날 때 민첩을 !M! 잃습니다." - ] - }, - "champ:PreciseThrust": { - "NAME": "정확한 찌르기", - "DESCRIPTION": "피해를 !D! 줍니다. NL *광폭화 champ:연계: 피해를 !D! 줍니다. NL *수비 champ:연계: 방어도를 !B! 얻습니다." - }, - "champ:CrookedStrike": { - "NAME": "졸렬한 타격", - "DESCRIPTION": "피해를 !D! 줍니다. NL 활력 을 소모하지 않습니다." - }, - "champ:RapidStrikes": { - "NAME": "재빠른 타격", - "DESCRIPTION": "피해를 !D! 만큼 !M! 번 줍니다. NL 이번 턴 동안 손에 있는 \"타격\" 이 포함된 카드를 무작위로 1장 비용을 0으로 낮춥니다." - }, - "champ:EnchantSword": { - "NAME": "검 강화", - "DESCRIPTION": "카드를 선택합니다. 이번 전투 동안 그 카드의 피해량을 !M! 증가시킵니다. NL 소멸.", - "EXTENDED_DESCRIPTION": [ - "그건 어리석은 짓이다." - ] - }, - "champ:BladeFlurry": { - "NAME": "타격 돌풍", - "DESCRIPTION": "피해를 !D! 줍니다. NL 이번 턴에 다음으로 사용하는 \"타격\" 이 포함된 카드가 2번 사용됩니다." - }, - "champ:SwordThrow": { - "NAME": "검 투척", - "DESCRIPTION": "피해를 !D! 만큼 !M! 번 줍니다. NL 약화를 2 얻습니다. NL *광폭화 champ:연계: 약화를 2 잃습니다." - }, - "champ:MurderStrike": { - "NAME": "죽이는 타격", - "DESCRIPTION": "보존. NL 피해를 !D! 줍니다. NL 이번 전투 동안 *스킬 *카드 champ:보너스를 얻을 때마다 이 카드의 피해량을 !M! 증가시킵니다." - }, - "champ:HeavySlash": { - "NAME": "숙달된 베기", - "DESCRIPTION": "피해를 !D! 줍니다. NL 다음 턴 시작 시 막히지 않은 피해만큼 활력 을 얻습니다.", - "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL 무작위 강화된 스킬 카드를 1장 얻습니다. NL 그 카드의 비용은 0이 됩니다." - }, - "champ:CheapShot": { - "NAME": "비열한 일격", - "DESCRIPTION": "피해를 !D! 줍니다. NL 적이 보스라면 피해를 3번 줍니다. 아니라면 적을 hermit:기절시킵니다. NL 소멸." - }, - "champ:RisingSlash": { - "NAME": "수직 타격", - "DESCRIPTION": "피해를 !D! 줍니다. NL 직전에 champ:마무리 카드를 사용했다면 피해를 2번 줍니다." - }, - "champ:Shatter": { - "NAME": "산산조각", - "DESCRIPTION": "피해를 !D! 줍니다. NL *자세 champ:연계: 약화 와 취약을 !M! 부여합니다." - }, - "champ:EnragedBash": { - "NAME": "불타는 맹공격", - "DESCRIPTION": "피해를 !D! 줍니다. NL *광폭화 champ:연계: 이번 전투에서 피해 횟수가 1 증가합니다. 자세를 바꿔도 유지됩니다.", - "EXTENDED_DESCRIPTION": [ - "피해를 !D! 만큼 !M! 번 줍니다. NL *광폭화 champ:연계: 이번 전투에서 피해 횟수가 1 증가합니다. 자세를 바꿔도 유지됩니다." - ] - }, - "champ:VampiricStrike": { - "NAME": "구타 타격", - "DESCRIPTION": "피해를 !D! 줍니다. NL 막히지 않은 피해만큼 방어도를 얻습니다." - }, - "champ:AdrenalArmor": { - "NAME": "흉갑", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL 힘을 !M! 얻습니다. 이번 턴이 끝날 때 힘을 !M! 잃습니다." - }, - "champ:HeartStrike": { - "NAME": "마무리 짓기", - "DESCRIPTION": "피해를 !D! 줍니다. NL 대상의 체력이 !M! % 미만일 때 피해를 2번 줍니다.", - "EXTENDED_DESCRIPTION": [ - "그건 어리석은 짓이다.", - "마무리를 짓기에는 아직 생생해 보이는군." - ] - }, - "champ:CrownThrow": { - "NAME": "왕관 부메랑", - "DESCRIPTION": "피해를 !D! 줍니다. NL *광폭화 champ:연계: 카드를 !M! 장 뽑습니다." - }, - "champ:Encircle": { - "NAME": "포위", - "DESCRIPTION": "적 전체에게 피해를 !D! 줍니다. NL 공격한 대상 하나당 카드를 !M! 장 뽑습니다." - }, - "champ:LastStand": { - "NAME": "최후의 저항", - "DESCRIPTION": "내 체력이 50% 미만일 때 모든 해로운 효과를 제거하고 힘을 !M! 얻습니다.", - "EXTENDED_DESCRIPTION": [ - "~넌~ ~실수를~ ~저질렀다...~", - "@패배??@ NL @말도@ @안돼!!@" - ] - }, - "champ:RecklessLeap": { - "NAME": "무모한 타격", - "DESCRIPTION": "피해를 !D! 줍니다. NL 힘을 !M! 얻습니다. NL champ:광폭화 자세를 취합니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL 힘을 !M! 얻습니다. NL champ:광폭화 자세를 취합니다.", - "EXTENDED_DESCRIPTION": [ - "그건 어리석은 짓이다." - ] - }, - "champ:IgnorePain": { - "NAME": "고통 감내", - "DESCRIPTION": "내 다음 턴 시작 전까지 체력이 감소하지 않습니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "내 다음 턴 시작 전까지 체력이 감소하지 않습니다. NL 소멸." - }, - "champ:DeathBlow": { - "NAME": "치명적인 강타", - "DESCRIPTION": "적 전체에게 피해를 !D! 줍니다. NL 활력 을 !M! 얻습니다. NL 소멸." - }, - "champ:ArenaPreparation": { - "NAME": "아레나 준비", - "DESCRIPTION": "무작위 스킬 카드를 !M! 장 얻습니다. NL 그 카드들을 보존합니다. NL 소멸." - }, - "champ:SteelEdge": { - "NAME": "강철 칼날", - "DESCRIPTION": "피해를 !D! 만큼 X번 줍니다. NL 이 효과를 1번 이상 X 번 발동합니다:", - "EXTENDED_DESCRIPTION": [ - "광폭화 champ:연계: 피해를 !D! 만큼 X번 줍니다. NL ", - "수비 champ:연계: 방어도를 X번 !B! 얻습니다.", - "검투사: 카드를 1장 뽑고 [E] 를 얻습니다.", - "검투사: 카드를 2장 뽑고 [E] 를 얻습니다.", - "champ:연계 NL " - ] - }, - "champ:Improvising": { - "NAME": "증강", - "DESCRIPTION": "턴 시작 시 자세를 취하고 있지 않다면 무작위 자세를 취합니다. NL 자세를 취하면 *스킬 *카드 champ:보너스를 !M! 번 얻습니다." - }, - "champ:CalledShot": { - "NAME": "원기 회복", - "DESCRIPTION": "*광폭화 champ:연계: [E] [E] 를 얻고 이 카드를 소멸시킵니다. NL *수비 champ:연계: 카드를 !M! 장 뽑습니다.", - "UPGRADE_DESCRIPTION": "*광폭화 champ:연계: [E] [E] [E] 를 얻고 이 카드를 소멸시킵니다. NL *수비 champ:연계: 카드를 !M! 장 뽑습니다.", - "EXTENDED_DESCRIPTION": [ - "광폭화 champ:연계: [E] [E] 를 얻고 이 카드를 소멸시킵니다. NL ", - "광폭화 champ:연계: [E] [E] [E] 를 얻고 이 카드를 소멸시킵니다. NL ", - "수비 champ:연계: 카드를 !M! 장 뽑습니다.", - "그건 어리석은 짓이다." - ] - }, - "champ:PerfectedStrike": { - "NAME": "완벽해진 타격", - "DESCRIPTION": "피해를 !D! 줍니다. NL 보유 중인 카드 중 이름에 \"타격\" 이 포함된 카드 하나당 피해량이 !M! 증가합니다." - }, - "champ:GladiatorForm": { - "NAME": "검투사의 형상", - "DESCRIPTION": "매 턴 시작 시 저번 턴에 소모한 활력 3당 활력 과 champ:반격을 !M! 얻습니다." - }, - "champ:Duel": { - "NAME": "도전", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL 피해를 !D! 줍니다. NL 대상이 힘을 가지고 있다면 이 카드를 두 번 사용합니다.", - "UPGRADE_DESCRIPTION": "방어도를 !B! 얻습니다. NL 피해를 !D! 줍니다. NL 대상이 힘을 가지고 있다면 이 카드를 두 번 사용합니다." - }, - "champ:DancingMaster": { - "NAME": "춤 전문가", - "DESCRIPTION": "매 턴 처음으로 champ:마무리 카드를 사용한다면 [E] 를 얻고 카드를 1장 뽑습니다." - }, - "champ:StrikeOfGenius": { - "NAME": "천재적인 타격", - "DESCRIPTION": "내 턴 시작 시 이름에 \"타격\" 이 포함된 무작위 gremlin:메아리를 얻습니다. NL 그 카드의 비용은 사용하기 전까지 0입니다.", - "UPGRADE_DESCRIPTION": "내 턴 시작 시 이름에 강화된 \"타격\" 이 포함된 무작위 gremlin:메아리를 얻습니다. NL 그 카드의 비용은 사용하기 전까지 0입니다." - }, - "champ:DefensiveStyle": { - "NAME": "이중 태세", - "DESCRIPTION": "*스킬 *카드 champ:보너스의 활력 과 champ:반격을 !M! 증가시킵니다." - }, - "champ:GladiatorStyle": { - "NAME": "건투", - "DESCRIPTION": "*광폭화 champ:연계: 힘을 !M! 얻습니다. NL *수비 champ:연계: 민첩을 !M! 얻습니다." - }, - "champ:BerserkerStyle": { - "NAME": "칼갈이", - "DESCRIPTION": "보유 중인 카드 중 이름에 \"타격\" 이 포함된 카드의 피해량을 !M! 증가시킵니다." - }, - "champ:Riposte": { - "NAME": "응수 타격", - "DESCRIPTION": "휘발성. NL 피해를 !D! 줍니다. NL 소멸." - }, - "champ:Endure": { - "NAME": "감내", - "DESCRIPTION": "champ:수비 자세를 취합니다. NL 방어도를 !B! 얻습니다. NL 이 카드의 방어도는 힘 만큼 증가합니다.", - "UPGRADE_DESCRIPTION": "champ:수비 자세를 취합니다. NL 방어도를 !B! 얻습니다. NL 이 카드의 방어도는 힘 만큼 증가합니다." - }, - "champ:PreemptiveStrike": { - "NAME": "우선 타격", - "DESCRIPTION": "적 전체에게 현재 champ:반격만큼 피해를 줍니다. NL champ:반격을 절반 잃습니다.", - "EXTENDED_DESCRIPTION": [ - " NL (피해를 !D! 줍니다)", - "그건 어리석은 짓이다." - ] - }, - "champ:Parry": { - "NAME": "받아치기", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL champ:반격을 !M! 얻습니다. NL 이번 턴에 champ:반격한다면 *응수를 1장 추가로 얻습니다.", - "UPGRADE_DESCRIPTION": "휘발성. NL champ:반격한 만큼 피해를 줍니다. NL 소멸." - }, - "champ:EnchantCrown": { - "NAME": "왕관 강화", - "DESCRIPTION": "카드를 선택합니다. 이번 전투 동안 그 카드의 비용은 0이 됩니다. NL 소멸.", - "EXTENDED_DESCRIPTION": [ - "그건 어리석은 짓이다." - ] - }, - "champ:ModFinisherStrike": { - "NAME": "마무리 타격", - "DESCRIPTION": "보존. NL 피해를 !D! 줍니다." - }, - "champ:UltimateStance": { - "NAME": "궁극의 자세", - "DESCRIPTION": "다음 턴 동안 champ:궁극의 자세를 취합니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "*수비 또는 *광폭화 자세를 사용할 수 있습니다. NL !M! 턴 동안 champ:궁극의 자세를 취합니다.", - "EXTENDED_DESCRIPTION": [ - "자세를 취하고 있지 않다." - ] - }, - "champ:FancyFootwork": { - "NAME": "기묘한 발놀림", - "DESCRIPTION": "취하지 않은 자세를 취합니다. NL 이번 턴 동안 다음으로 champ:마무리 카드를 사용한다면 적 전체에게 피해를 !M! 줍니다." - }, - "champ:TripleStrike": { - "NAME": "삼중 타격", - "DESCRIPTION": "피해를 !D! 줍니다. NL *타격의 gremlin:메아리를 2장 얻습니다. 그 카드의 비용은 0이 되고 *스킬 *카드 champ:보너스 효과를 얻습니다.", - "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL *타격+의 gremlin:메아리를 2장 얻습니다. 그 카드의 비용은 0이 되고 *스킬 *카드 champ:보너스 효과를 얻습니다." - }, - "champ:WindUp": { - "NAME": "뒤처리", - "DESCRIPTION": "선택한 자세를 취합니다. NL 뽑을 카드 더미에서 champ:마무리 카드를 가져옵니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "선택한 자세를 취합니다. NL 뽑을 카드 더미에서 champ:마무리 카드를 가져옵니다.", - "EXTENDED_DESCRIPTION": [ - "champ:광폭화 자세를 취합니다.", - "champ:수비 자세를 취합니다." - ] - }, - "champ:Headbutt": { - "NAME": "박치기", - "DESCRIPTION": "피해를 !D! 줍니다. NL 버린 카드 더미에서 카드를 1 장 선택해 뽑을 카드 더미 맨 위에 놓습니다." - } -} +{ + "champ:Strike": { + "NAME": "타격", + "DESCRIPTION": "피해를 !D! 줍니다." + }, + "champ:Defend": { + "NAME": "수비", + "DESCRIPTION": "방어도를 !B! 얻습니다." + }, + "champ:Taunt": { + "NAME": "도발", + "DESCRIPTION": "약화를 !M! 부여합니다. NL 취약을 !M! 부여합니다.", + "UPGRADE_DESCRIPTION": "적 전체에게 약화와 취약을 !M! 부여합니다." + }, + "champ:Execute": { + "NAME": "처형", + "DESCRIPTION": "피해를 !D! 만큼 !cool! 번 줍니다.", + "UPGRADE_DESCRIPTION": "피해를 !D! 만큼 !cool! 번 줍니다." + }, + "champ:StanceDance": { + "NAME": "춤 자세", + "DESCRIPTION": "선택한 champ:자세를 취합니다. NL 선택한 *자세의 *스킬 *카드 champ:보너스를 얻습니다.", + "UPGRADE_DESCRIPTION": "선택한 champ:자세를 취합니다. NL 선택한 *자세의 *스킬 *카드 champ:보너스를 2번 얻습니다.", + "EXTENDED_DESCRIPTION": [ + "champ:광폭화 자세를 취합니다.", + "champ:수비 자세를 취합니다." + ] + }, + "champ:StanceDanceCrown": { + "NAME": "챔피언의 왕관", + "DESCRIPTION": "보존. NL 취하지 않은 자세를 취합니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "보존. NL 취하지 않은 자세를 취합니다." + }, + "champ:SwordSigil": { + "NAME": "승리의 인장", + "DESCRIPTION": "현재 자세의 *스킬 *카드 champ:보너스를 !M! 번 얻습니다." + }, + "champ:FaceSlap": { + "NAME": "안면 강타", + "DESCRIPTION": "피해를 !D! 줍니다. NL *광폭화 champ:연계: 취약을 !M! 부여합니다." + }, + "champ:FlashCut": { + "NAME": "순간 타격", + "DESCRIPTION": "피해를 !D! 줍니다. NL *수비 champ:연계: champ:반격을 !M! 얻고 방어도를 !B! 얻습니다." + }, + "champ:DefensiveShout": { + "NAME": "수비 함성", + "DESCRIPTION": "champ:반격을 !M! 얻습니다. NL champ:수비 자세를 취합니다." + }, + "champ:ShieldSigil": { + "NAME": "쇠사슬 채찍", + "DESCRIPTION": "피해를 !D! 줍니다. NL 이번 턴 동안 *스킬 *카드 champ:보너스를 !M! 증가시킵니다." + }, + "champ:FocusedDefense": { + "NAME": "상하좌우", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL expansioncontent:활력을 !M! 얻습니다. NL champ:광폭화 자세를 취합니다." + }, + "champ:FocusedBerserking": { + "NAME": "총력전", + "DESCRIPTION": "소멸. NL champ:자세에서 벗어나지 않습니다. 이 효과를 !M! 번 발동합니다: " + }, + "champ:SetATrap": { + "NAME": "함정 설치", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL *수비 champ:연계: 적 전체에게 약화를 !M! 부여합니다." + }, + "champ:Backstep": { + "NAME": "뒷걸음", + "DESCRIPTION": "방어도를 !B! 얻습니다. 이 카드의 방어도를 활력 만큼 증가시킵니다." + }, + "champ:BerserkersShout": { + "NAME": "광폭화 함성", + "DESCRIPTION": "expansioncontent:활력을 !M! 얻습니다. NL champ:광폭화 자세를 취합니다." + }, + "champ:RageSigil": { + "NAME": "싸움 계획", + "DESCRIPTION": "champ:수비 자세를 취합니다. NL 방어도를 !B! 얻습니다. NL 예지 !M!." + }, + "champ:GutPunch": { + "NAME": "내장 파괴", + "DESCRIPTION": "피해를 !D! 줍니다. NL *자세 champ:연계: 1턴 동안 champ:궁극의 자세를 취합니다. NL 소멸." + }, + "champ:FanOfKnives": { + "NAME": "칼날 폭풍", + "DESCRIPTION": "적 전체에게 피해를 !D! 줍니다. NL *광폭화 champ:연계: 피해를 두 번 줍니다.", + "UPGRADE_DESCRIPTION": "적 전체에게 피해를 !D! 줍니다. NL *광폭화 champ:연계: 피해를 세 번 줍니다." + }, + "champ:Devastate": { + "NAME": "완파", + "DESCRIPTION": "피해를 !D! 만큼 !M! 번 줍니다. NL 이번 전투에 사용된 champ:마무리 카드의 수만큼 이 카드의 비용이 [E] 감소합니다." + }, + "champ:Circumvent": { + "NAME": "우회", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 카드를 !M! 장 뽑습니다. NL 카드를 !M! 장 버립니다. NL *수비 champ:연계: 카드를 버리지 않습니다." + }, + "champ:SkillfulDodge": { + "NAME": "능숙한 회피", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL champ:반격을 !M! 얻습니다. NL *수비 champ:연계: 이번 전투 동안 이 카드의 방어도 와 champ:반격을 !cool! 증가시킵니다." + }, + "champ:TornadoPunch": { + "NAME": "회오리 주먹", + "DESCRIPTION": "적 전체에게 피해를 !D! 줍니다. NL *수비 champ:연계: 공격한 적 하나당 방어도를 !B! 얻습니다.", + "UPGRADE_DESCRIPTION": "적 전체에게 피해를 !D! 줍니다. NL *수비 champ:연계: 공격한 적 하나당 방어도를 !B! 얻습니다." + }, + "champ:EnGarde": { + "NAME": "준비 시작!", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 이번 턴에 방어도를 모두 잃으면 다음 턴에 방어도를 !B! 얻습니다." + }, + "champ:ShieldSlam": { + "NAME": "최후의 순간", + "DESCRIPTION": "보존. NL 카드를 !M! 장 뽑습니다.", + "UPGRADE_DESCRIPTION": "보존. NL 카드를 !M! 장 뽑습니다." + }, + "champ:EnchantShield": { + "NAME": "방패 강화", + "DESCRIPTION": "카드를 선택합니다. 이번 전투 동안 그 카드의 방어도를 !M! 증가시킵니다. NL 소멸.", + "EXTENDED_DESCRIPTION": [ + "그건 어리석은 짓이다." + ] + }, + "champ:BringItOn": { + "NAME": "덤벼라", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL champ:반격을 !M! 얻습니다.", + "EXTENDED_DESCRIPTION": [ + "자세를 취하고 있지 않다." + ] + }, + "champ:ShieldThrow": { + "NAME": "방패 투척", + "DESCRIPTION": "현재 방어도만큼 피해를 2번 줍니다. NL champ:수비 자세를 취하고 있지 않다면 다음 턴에 카드로 방어도를 얻을 수 없습니다.", + "EXTENDED_DESCRIPTION": [ + "현재 방어도 !D! 만큼 피해를 2번 줍니다. NL champ:수비 자세를 취하고 있지 않다면 다음 턴에 카드로 방어도를 얻을 수 없습니다." + ] + }, + "champ:FalseCounter": { + "NAME": "손 풀기", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 다음 턴에 [E] 를 얻고 카드를 2장 뽑습니다.", + "UPGRADE_DESCRIPTION": "방어도를 !B! 얻습니다. NL 다음 턴에 [E] [E] 를 얻고 카드를 2장 뽑습니다." + }, + "champ:IronFortress": { + "NAME": "현란한 꺾기", + "DESCRIPTION": "champ:자세를 취할 때마다 방어도를 !M! 얻습니다." + }, + "champ:Lariat": { + "NAME": "래리어트", + "DESCRIPTION": "방어도를 !B! 만큼 X번 얻습니다. NL 현재 자세의 *스킬 *카드 champ:보너스를 X번 얻습니다." + }, + "champ:HoldFirm": { + "NAME": "버티기", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL champ:반격을 !M! 얻습니다. NL bronze:흐릿함을 1 얻습니다." + }, + "champ:ShieldWall": { + "NAME": "철의 요새", + "DESCRIPTION": "민첩을 2 얻습니다. NL 매 턴 종료 시 방어도를 !M! 얻습니다." + }, + "champ:Haymaker": { + "NAME": "맹타", + "DESCRIPTION": "피해를 !D! 줍니다. NL 취약을 2 부여합니다. NL 약화를 2 부여합니다." + }, + "champ:ViciousMockery": { + "NAME": "악랄한 조롱", + "DESCRIPTION": "expansioncontent:활력을 !M! 얻습니다. NL 약화를 !DM! 부여합니다. NL 현재 자세의 *스킬 *카드 champ:보너스를 얻습니다.", + "EXTENDED_DESCRIPTION": [ + "광폭화 champ:연계: 힘을 !M! 얻습니다. 이번 턴이 끝날 때 힘을 !M! 잃습니다. NL ", + "수비 champ:연계: 민첩을 !M! 얻습니다. 이번 턴이 끝날 때 민첩을 !M! 잃습니다." + ] + }, + "champ:PreciseThrust": { + "NAME": "정확한 찌르기", + "DESCRIPTION": "피해를 !D! 줍니다. NL *광폭화 champ:연계: 피해를 !D! 줍니다. NL *수비 champ:연계: 방어도를 !B! 얻습니다." + }, + "champ:CrookedStrike": { + "NAME": "졸렬한 타격", + "DESCRIPTION": "피해를 !D! 줍니다. NL expansioncontent:활력을 소모하지 않습니다." + }, + "champ:RapidStrikes": { + "NAME": "재빠른 타격", + "DESCRIPTION": "피해를 !D! 만큼 !M! 번 줍니다. NL 이번 턴 동안 손에 있는 \"타격\" 이 포함된 카드를 무작위로 1장 비용을 0으로 낮춥니다." + }, + "champ:EnchantSword": { + "NAME": "검 강화", + "DESCRIPTION": "카드를 선택합니다. 이번 전투 동안 그 카드의 피해량을 !M! 증가시킵니다. NL 소멸.", + "EXTENDED_DESCRIPTION": [ + "그건 어리석은 짓이다." + ] + }, + "champ:BladeFlurry": { + "NAME": "타격 돌풍", + "DESCRIPTION": "피해를 !D! 줍니다. NL 이번 턴에 다음으로 사용하는 \"타격\" 이 포함된 카드가 2번 사용됩니다." + }, + "champ:SwordThrow": { + "NAME": "검 투척", + "DESCRIPTION": "피해를 !D! 만큼 !M! 번 줍니다. NL champ:광폭화 자세를 취하고 있지 않다면 다음 턴에 *공격 *카드를 사용할 수 없습니다." + }, + "champ:MurderStrike": { + "NAME": "죽이는 타격", + "DESCRIPTION": "보존. NL 피해를 !D! 줍니다. NL *스킬 *카드를 사용할 때마다 이번 전투에서 이 카드의 피해량이 !M! 증가합니다." + }, + "champ:HeavySlash": { + "NAME": "숙달된 베기", + "DESCRIPTION": "피해를 !D! 줍니다. NL 내 다음 턴 시작 시 막히지 않은 피해만큼 expansioncontent:활력을 얻습니다." + }, + "champ:CheapShot": { + "NAME": "비열한 일격", + "DESCRIPTION": "피해를 !D! 줍니다. NL 적이 보스라면 피해를 3번 주고 아니라면 적을 hermit:기절시킵니다. NL 소멸." + }, + "champ:RisingSlash": { + "NAME": "수직 타격", + "DESCRIPTION": "보존. NL 피해를 !D! 줍니다. NL 직전에 champ:마무리 카드를 사용했다면 피해를 2번 줍니다." + }, + "champ:Shatter": { + "NAME": "산산조각", + "DESCRIPTION": "피해를 !D! 줍니다. NL *자세 champ:연계: 약화와 취약을 !M! 부여합니다." + }, + "champ:EnragedBash": { + "NAME": "불타는 맹공격", + "DESCRIPTION": "피해를 !D! 줍니다. NL *광폭화 champ:연계: 이번 전투에서 이 카드의 피해 횟수가 1번 증가합니다.", + "EXTENDED_DESCRIPTION": [ + "피해를 !D! 만큼 !M! 번 줍니다. NL *광폭화 champ:연계: 이번 전투에서 이 카드의 피해 횟수가 1번 증가합니다." + ] + }, + "champ:VampiricStrike": { + "NAME": "구타 타격", + "DESCRIPTION": "피해를 !D! 줍니다. NL 막히지 않은 피해만큼 방어도를 얻습니다." + }, + "champ:AdrenalArmor": { + "NAME": "흉갑", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 힘을 !M! 얻습니다. NL 이번 턴이 끝날 때 힘을 !M! 잃습니다." + }, + "champ:HeartStrike": { + "NAME": "마무리 짓기", + "DESCRIPTION": "피해를 !D! 줍니다. NL 대상의 체력이 !M! % 미만일 때 피해를 2번 줍니다.", + "EXTENDED_DESCRIPTION": [ + "그건 어리석은 짓이다.", + "마무리를 짓기에는 아직 생생해 보이는군." + ] + }, + "champ:CrownThrow": { + "NAME": "왕관 부메랑", + "DESCRIPTION": "피해를 !D! 줍니다. NL *광폭화 champ:연계: 카드를 !M! 장 뽑습니다." + }, + "champ:Encircle": { + "NAME": "포위", + "DESCRIPTION": "적 전체에게 피해를 !D! 줍니다. NL 공격한 적 하나당 카드를 !M! 장 뽑습니다." + }, + "champ:LastStand": { + "NAME": "최후의 저항", + "DESCRIPTION": "내 체력이 50% 미만일 때 모든 해로운 효과를 제거하고 힘을 !M! 얻습니다.", + "EXTENDED_DESCRIPTION": [ + "~넌~ ~실수를~ ~저질렀다...~", + "@패배??@ NL @말도@ @안돼!!@" + ] + }, + "champ:RecklessLeap": { + "NAME": "무모한 타격", + "DESCRIPTION": "피해를 !D! 줍니다. NL 힘을 !M! 얻습니다. NL champ:광폭화 자세를 취합니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL 힘을 !M! 얻습니다. NL champ:광폭화 자세를 취합니다.", + "EXTENDED_DESCRIPTION": [ + "그건 어리석은 짓이다." + ] + }, + "champ:IgnorePain": { + "NAME": "고통 감내", + "DESCRIPTION": "내 다음 턴 시작 전까지 체력이 감소하지 않습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "내 다음 턴 시작 전까지 체력이 감소하지 않습니다. NL 소멸." + }, + "champ:DeathBlow": { + "NAME": "치명적인 강타", + "DESCRIPTION": "적 전체에게 피해를 !D! 줍니다. NL expansioncontent:활력을 !M! 얻습니다. NL 소멸." + }, + "champ:ArenaPreparation": { + "NAME": "아레나 준비", + "DESCRIPTION": "무작위 *스킬 카드를 !M! 장 얻습니다. NL 그 카드들은 보존됩니다. NL 소멸." + }, + "champ:SteelEdge": { + "NAME": "강철 칼날", + "DESCRIPTION": "피해를 !D! 만큼 X번 줍니다. NL 이 효과를 1번 이상 X 번 발동합니다:", + "EXTENDED_DESCRIPTION": [ + "광폭화 champ:연계: 피해를 !D! 만큼 X번 줍니다. NL ", + "수비 champ:연계: 방어도를 !B! 만큼 X번 얻습니다.", + "검투사: 카드를 1장 뽑고 [E] 를 얻습니다.", + "검투사: 카드를 2장 뽑고 [E] 를 얻습니다.", + "champ:연계 NL " + ] + }, + "champ:Improvising": { + "NAME": "증강", + "DESCRIPTION": "자세를 취할 때마다 해당 자세의 *스킬 *카드 champ:보너스를 !M! 번 얻습니다." + }, + "champ:CalledShot": { + "NAME": "원기 회복", + "DESCRIPTION": "*광폭화 champ:연계: [E] [E] 를 얻고 이 카드를 소멸시킵니다. NL *수비 champ:연계: 카드를 !M! 장 뽑습니다.", + "UPGRADE_DESCRIPTION": "*광폭화 champ:연계: [E] [E] [E] 를 얻고 이 카드를 소멸시킵니다. NL *수비 champ:연계: 카드를 !M! 장 뽑습니다.", + "EXTENDED_DESCRIPTION": [ + "광폭화 champ:연계: [E] [E] 를 얻고 이 카드를 소멸시킵니다. NL ", + "광폭화 champ:연계: [E] [E] [E] 를 얻고 이 카드를 소멸시킵니다. NL ", + "수비 champ:연계: 카드를 !M! 장 뽑습니다.", + "그건 어리석은 짓이다." + ] + }, + "champ:PerfectedStrike": { + "NAME": "완벽해진 타격", + "DESCRIPTION": "피해를 !D! 줍니다. NL 보유 중인 카드 중 이름에 \"타격\" 이 포함된 카드 하나당 피해량이 !M! 증가합니다." + }, + "champ:GladiatorForm": { + "NAME": "검투사의 형상", + "DESCRIPTION": "내 턴 시작 시 저번 턴에 소모한 활력 3당 expansioncontent:활력과 champ:반격을 !M! 얻습니다." + }, + "champ:Duel": { + "NAME": "도전", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 피해를 !D! 줍니다. NL 대상이 힘을 가지고 있다면 이 카드를 두 번 사용합니다.", + "UPGRADE_DESCRIPTION": "방어도를 !B! 얻습니다. NL 피해를 !D! 줍니다. NL 대상이 힘을 가지고 있다면 이 카드를 두 번 사용합니다." + }, + "champ:DancingMaster": { + "NAME": "춤 전문가", + "DESCRIPTION": "매 턴 처음으로 champ:마무리 카드를 사용하면 [E] 를 얻고 카드를 1장 뽑습니다." + }, + "champ:StrikeOfGenius": { + "NAME": "천재적인 타격", + "DESCRIPTION": "내 턴 시작 시 이름에 \"타격\" 이 포함된 무작위 gremlin:메아리를 얻습니다. NL 그 카드의 비용은 사용하기 전까지 0 입니다.", + "UPGRADE_DESCRIPTION": "내 턴 시작 시 이름에 강화된 \"타격\" 이 포함된 무작위 gremlin:메아리를 얻습니다. NL 그 카드의 비용은 사용하기 전까지 0 입니다." + }, + "champ:DefensiveStyle": { + "NAME": "이중 태세", + "DESCRIPTION": "*스킬 *카드 champ:보너스의 expansioncontent:활력과 champ:반격을 !M! 증가시킵니다." + }, + "champ:GladiatorStyle": { + "NAME": "건투", + "DESCRIPTION": "*광폭화 champ:연계: 힘을 !M! 얻습니다. NL *수비 champ:연계: NL 민첩을 !M! 얻습니다." + }, + "champ:BerserkerStyle": { + "NAME": "칼갈이", + "DESCRIPTION": "보유 중인 카드 중 이름에 \"타격\" 이 포함된 카드의 피해량을 !M! 증가시킵니다." + }, + "champ:Riposte": { + "NAME": "응수 타격", + "DESCRIPTION": "휘발성. NL 피해를 !D! 줍니다. NL 소멸." + }, + "champ:Endure": { + "NAME": "감내", + "DESCRIPTION": "champ:수비 자세를 취합니다. NL 방어도를 !B! 얻습니다. NL 이 카드의 방어도는 민첩 대신 힘 만큼 증가합니다.", + "UPGRADE_DESCRIPTION": "champ:수비 자세를 취합니다. NL 방어도를 !B! 얻습니다. NL 이 카드의 방어도는 힘 만큼 증가합니다." + }, + "champ:PreemptiveStrike": { + "NAME": "우선 타격", + "DESCRIPTION": "적 전체에게 현재 champ:반격만큼 피해를 줍니다. *반격을 절반 잃습니다. NL *수비 champ:연계: champ:반격을 잃지 않습니다.", + "EXTENDED_DESCRIPTION": [ + " NL (피해를 !D! 줍니다.)", + "그건 어리석은 짓이다." + ] + }, + "champ:Parry": { + "NAME": "받아치기", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL champ:반격을 !M! 얻습니다. NL 이번 턴에 champ:반격하면 *응수 *타격을 얻습니다.", + "UPGRADE_DESCRIPTION": "휘발성. NL champ:반격한 만큼 피해를 줍니다. NL 소멸." + }, + "champ:EnchantCrown": { + "NAME": "왕관 강화", + "DESCRIPTION": "카드를 선택합니다. 이번 전투 동안 그 카드의 비용은 0이 됩니다. NL 소멸.", + "EXTENDED_DESCRIPTION": [ + "그건 어리석은 짓이다." + ] + }, + "champ:ModFinisherStrike": { + "NAME": "마무리 타격", + "DESCRIPTION": "보존. NL 피해를 !D! 줍니다." + }, + "champ:UltimateStance": { + "NAME": "궁극의 자세", + "DESCRIPTION": "다음 턴 동안 champ:궁극의 *자세를 취합니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "*수비 또는 *광폭화 자세를 취해야 합니다. NL champ:궁극의 *자세를 !M! 턴 동안 취합니다.", + "EXTENDED_DESCRIPTION": [ + "자세를 취하고 있지 않다." + ] + }, + "champ:FancyFootwork": { + "NAME": "기묘한 발놀림", + "DESCRIPTION": "취하지 않은 자세를 취합니다. NL 이번 턴 동안 다음으로 champ:마무리 카드를 사용하면 적 전체에게 피해를 !M! 줍니다." + }, + "champ:TripleStrike": { + "NAME": "삼중 타격", + "DESCRIPTION": "피해를 !D! 줍니다. NL *타격의 gremlin:메아리를 2장 얻습니다. 그 카드의 비용은 0이 되고 *스킬 *카드 champ:보너스 효과를 얻습니다.", + "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL *타격+의 gremlin:메아리를 2장 얻습니다. 그 카드의 비용은 0이 되고 *스킬 *카드 champ:보너스 효과를 얻습니다." + }, + "champ:WindUp": { + "NAME": "뒤처리", + "DESCRIPTION": "선택한 champ:자세를 취합니다. NL 뽑을 카드 더미에서 champ:마무리 카드를 가져옵니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "선택한 champ:자세를 취합니다. NL 뽑을 카드 더미에서 champ:마무리 카드를 가져옵니다.", + "EXTENDED_DESCRIPTION": [ + "champ:광폭화 자세를 취합니다.", + "champ:수비 자세를 취합니다." + ] + }, + "champ:Headbutt": { + "NAME": "박치기", + "DESCRIPTION": "피해를 !D! 줍니다. NL 버린 카드 더미에서 카드를 1장 선택해 뽑을 카드 더미 맨 위에 놓습니다." + } +} \ No newline at end of file diff --git a/src/main/resources/champResources/localization/kor/EventStrings.json b/src/main/resources/champResources/localization/kor/EventStrings.json index fb7fb97db1..11155fb113 100644 --- a/src/main/resources/champResources/localization/kor/EventStrings.json +++ b/src/main/resources/champResources/localization/kor/EventStrings.json @@ -1,103 +1,103 @@ -{ - "champ:ChampTalk": { - "NAME": "", - "DESCRIPTIONS": [ - "이 벨트를 되찾으러왔나?", - "가져갈 테면 가져 가보시지!" - ], - "OPTIONS": [ - "" - ] - }, - "champ:Colosseum": { - "NAME": "콜로세움", - "DESCRIPTIONS": [ - "첨탑을 따라 계속해서 내려가다 보니, 당신은 거대한 경기장 근처에서 매복하던 자들을 발견합니다. 다가가자 깜짝 놀란 노예상인이 재빨리 어찌 된 사정인지 설명합니다. NL NL \"챔피언님! 부디 자비를 베풀어주십쇼! 혹시 새로운 도전자를 상대하러 오신 건가요?\"", - "새로운 도전자? 이보다 좋은 일이 어디 있겠습니까! NL NL 하지만 도전자를 상대하려면 조금 기다려야 할 것입니다. 관객들은 늘 챔피언이 따끈따끈한 먹잇감을 학살하는 데 열광하니까요...", - "당신은 수많은 #b노예상인들과, #p광신자, 그리고 도시의 다른 주민들로 가득 찬 거대한 경기장에 들어섭니다. NL NL ", - "@\"누가@ @감히@ @내@ @자리를@ @노리느냐?!\"@ 붐비는 경기장 한가운데서 외치자 새로운 '도전자'가 손짓합니다. NL 다가온 기사는 당신과 아주 유사한 무장을 하고 있었습니다. 다른 점이라곤 검은색 잉크로 흠뻑 물들였다는 것뿐이었죠. 관중은 더 열렬한 환호를 보냅니다. NL NL 챔피언은 오직 하나니까요!", - "@\"다음@ @녀석은@ @내@ @몫이다!\"@ 붐비는 경기장 한가운데서 외치자 관중은 거대한 경기장을 가득 메우는 박수갈채로 화답합니다. NL NL 얼마 지나지 않아 노예상인들이 갓 잡은 포로를 끌고 옵니다. ~기습당해~ 얼떨결에 끌려온 도전자가 정신을 차리더니 자세를 가다듬습니다. NL NL 이거 일이 재밌어지겠네요.", - "구미가 당기긴 했지만 여기서 싸우는 불필요한 낭비라고 생각합니다. 당신은 가던 길을 가기로 했고 노예상인은 남아 다시 매복합니다.", - "검은 기사" - ], - "OPTIONS": [ - "[명예를 지킨다] #r검은 #r기사와 #r싸웁니다. #g많은 #g보상을 #g얻습니다.", - "[참가한다] #r사로잡힌 #r영웅과 #r싸웁니다. #g많은 #g보상을 #g얻습니다.", - "[떠난다]", - "[싸운다!]", - "[계속한다]" - ] - }, - "champ:Library": { - "NAME": "도서관", - "DESCRIPTIONS": [ - "당신은 도시 지식의 중심지인 오래된 도서관과 우연히 마주치게 됩니다. NL 건물 안에는 무수히 많은 두루마리, 원고, 책들이 줄줄이 늘어서 있습니다. NL 당신은 그 중 하나를 집어들고 한동한 조용히 의자에 앉아 아늑함을 즐기거나, 전투 기술에 대해 상세히 적힌 지침서를 찾아보는 시간을 보낼 수도 있습니다.", - "공간을 가득 메운 고서와 안내서를 뒤지는 데 많은 시간을 허비하다 마침내 당신이 찾던 책을 찾아냈습니다. NL NL 편안한 의자에 앉아 잊고 있었던 자세와 기술을 정리하는 시간을 가집니다. 당신처럼 완벽한 전투의 화신이라도 정신수양은 육체 수양만큼 중요한 법입니다." - ], - "OPTIONS": [ - "[찾는다] 전투 #g서적을 찾습니다.", - "[잠김] 모든 전투 고서를 봤습니다." - ] - }, - "champ:TechniqueTome": { - "NAME": "기술의 고서", - "DESCRIPTIONS": [ - "보이지 않는 거대한 힘이 발걸음을 샛길로 이끌었습니다. 당신은 얼마 지나지 않아 섬뜩한 에너지를 뿜어내는 받침대 위의 거대한 고서를 발견합니다. NL NL 다가가자 분명히 비어있던 페이지에 갑자기 당신이 전투에 대해 알아야 할 모든 것들, 공격 조합, 전투태세, 적의 약점 등이 새겨집니다. NL NL 너무 좋아서 현실이 아닌 거 같지만 이 선물, 이 기회, 이 지식을 절대 헛되게 해선 안 되겠죠!", - "세상에! 이 고서가 가르쳐주는 기술로 숨이 막힐 지경입니다. 상대방을 해치우는 새로운 방법이 단어와 그림으로 당신의 머릿속에 떠오릅니다. NL NL 불행히도 이런 지식은 대가 없인 얻을 수 없습니다. 당신의 정신에 크나큰 타격을 주지만 배울 게 많으니까요...", - "좋습니다. 좀 더 해야죠. 이제와서 멈출 수는 없습니다. 조금의 망설임도 없이 고서가 제공하는 풍부한 정보에 압도되어 더 진보한 전투 기술을 찾아냅니다. NL NL 대가를 완전히 이해한 당신은 자진해서 지식의 대가로 생명 에너지를 내놓습니다. 하지만 배울게 더 많아 보이네요...", - "당신은 모든 자제력을 동원해서 저주받은 책을 읽고 싶단 욕망을 참아냅니다. 언젠가 돌아오겠지만 지금은 - 해야 할 일이 있으니까요.", - "귀중한 지식을 위해 어떠한 대가던 치를만한 가치가 있었습니다. 고서의 손아귀에서 벗어나기 위해 노력을 엄청나게 기울여야 했지만 결국에는 해냈습니다. NL NL 고서의 가르침을 정신에 새긴 채 시험해볼 새로운 희생자를 찾아 나섭니다." - ], - "OPTIONS": [ - "[읽는다] #g기술 효과를 추가할 공격 카드를 선택합니다. #r체력을 #r", - " #r잃습니다.", - "[떠난다]", - "[잠김] 공격 카드가 필요합니다.", - "기술 효과를 추가할 카드를 선택하십시오.", - "[읽는다] #g기술 효과를 추가할 카드를 선택합니다. #r저주를 #r받습니다 #r- #r긍지." - ] - }, - "champ:Gym": { - "NAME": "연무장", - "DESCRIPTIONS": [ - "첨탑을 따라 내려가다 보니 당신이 몸을 가꾸기 위해 자주 찾는 태초의 연무장이 보입니다. NL NL 이곳에서 잠시 쉬지도 않고 그냥 가는 건 좋은 기회를 버리는 거겠죠. 정상에서 계속 머무르려면 쓸 수 있는 수는 다 취해야 하는 법입니다.", - "오늘은 체력에 집중하기로 합니다. 당신은 완전 무장을 하고 연무장 중앙에 놓인 트랙을 여러 바퀴 완주합니다. NL NL 솟구치는 에너지와 아드레날린으로 첨탑을 겁에 질리게 할 준비가 됐습니다.", - "오늘은 전투에 집중하기로 합니다. 당신은 재빨리 쉽게 처리할 수 있는 누군가를 찾아 그들의 사정은 봐주지 않은 채 경기장으로 끌고 옵니다. 그리고 얼마 지나지 않아 경기가 종료됩니다. NL NL 도전받아 치른 전투는 아니었지만 새로운 전투 시작 방법을 알았으니 이는 분명 앞으로 유용할 것입니다.", - "오늘은 근육과 상체 힘에 집중하기로 합니다. 비치된 중량과 당기기 기구를 수차례 사용해 근육을 가꿉니다. 운동을 마치자 하기 전보다 쉽게 들어 올리고 쉽게 잡아당기는 자신을 발견할 수 있었습니다. NL NL 연무장을 떠날 때 당신은 다음에 방문하면 하체 운동에 집중해야겠다고 머릿속에 입력해둡니다. 절대 놓쳐선 안 되는 법이죠." - ], - "OPTIONS": [ - "[심근 강화] #g최대 #g체력을 #g", - " #g얻습니다.", - "[연습 시합] 마무리 카드 제외 카드 선택: '선택한 자세를 취하는' 효과 추가.", - "[복근 운동] #g힘을 #g1 #g얻습니다.", - "[떠난다]", - "#b'수비 #b자세'를 #b취하는 효과를 추가할 카드를 선택합니다.", - "'검투사 자세'를 취하는 효과를 추가할 카드를 선택합니다.", - "#r'광폭화 #r자세'를 #r취하는 효과를 추가할 카드를 선택합니다.", - "[잠김] 자세를 추가할 카드가 필요합니다." - ] - }, - "champ:MinorLeagueArena": { - "NAME": "마이너리그 아레나", - "DESCRIPTIONS": [ - "태초를 지나치다 당신이 잘 알던 곳에 눈길이 갑니다. 지금은 도시의 콜로세움에서 진행되고 있지만 이전에는 이곳에서 혈투가 벌어졌었죠. 이 아담하고 매력적이지도 않은 아레나는 훈련장이나 일부 도전자들의 전투 장소로 이용됩니다. NL NL 이런 경기는 당신의 격에 맞지는 않지만 재미난 오락거리 정돈 되겠죠.", - "당신은 다른 곳에 시간을 쓰는 게 낫다고 생각해 아레나를 떠납니다. 당신이 떠나자 참가자들은 안도의 한숨을 내쉽니다. 분명 그 누구도 오늘 당신의 손에 죽고 싶지 않았던 거겠죠." - ], - "OPTIONS": [ - "[백부장 & 신비주의자와 싸운다] #g잠금 #g걸쇠를 #g얻습니다.", - "[귀족 그렘린과 싸운다] #g챔피언 #g벨트를 #g얻습니다.", - "[노예 상인 이인조와 싸운다] #g손목검을 #g얻습니다.", - "[떠난다]" - ] - }, - "champ:BackToBasics": { - "NAME": "", - "DESCRIPTIONS": [ - "기술과 자신감은 천하무적의 조합을 이룹니다." - ], - "OPTIONS": [ - "[직감] #g모든 #g타격과 #g수비에 #g스킬 #g카드 #g보너스 #g효과를 #g얻습니다.", - "[잠김] 타격이나 수비가 필요합니다." - ] - } +{ + "champ:ChampTalk": { + "NAME": "", + "DESCRIPTIONS": [ + "이 벨트를 되찾으러 왔나?", + "가져갈 테면 가져가 보시지!" + ], + "OPTIONS": [ + "" + ] + }, + "champ:Colosseum": { + "NAME": "콜로세움", + "DESCRIPTIONS": [ + "첨탑을 따라 계속해서 내려가다 보니, 당신은 거대한 경기장 근처에서 매복하던 자들을 발견합니다. 다가가자 깜짝 놀란 노예상인이 재빨리 어찌 된 사정인지 설명합니다. NL NL \"챔피언님! 부디 자비를 베풀어주십쇼! 혹시 새로운 도전자를 상대하러 오신 건가요?\"", + "새로운 도전자? 이보다 좋은 일이 어디 있겠습니까! NL NL 하지만 도전자를 상대하려면 조금 기다려야 합니다. 관객들이 늘 원하는 건 챔피언이 따끈따끈한 먹잇감을 학살하길 갈망하는 것이니까요...", + "당신은 수많은 #b노예상인들과, #p광신자, 그리고 도시의 다른 주민들로 가득 찬 거대한 경기장에 들어섭니다. NL NL ", + "@\"누가@ @감히@ @내@ @자리를@ @노리느냐?!\"@ 붐비는 경기장 한가운데서 외치자 새로운 '도전자'가 손짓합니다. NL 다가온 기사는 당신과 아주 유사한 무장을 하고 있었습니다. 다른 점이라곤 검은색 잉크로 흠뻑 물들였다는 것뿐이었죠. 관중은 더 열렬한 환호를 보냅니다. NL NL 오직 챔피언은 하나만 남게 될 테니까요!", + "@\"다음@ @녀석은@ @내@ @몫이다!\"@ 붐비는 경기장 한가운데서 외치자 관중은 거대한 경기장을 가득 메우는 박수갈채로 화답합니다. NL NL 얼마 지나지 않아 노예상인들이 갓 잡은 포로를 끌고 옵니다. ~기습당해~ 얼떨결에 끌려온 도전자가 정신을 차리더니 자세를 가다듬습니다. NL NL 이거 일이 재밌어지겠네요.", + "구미가 당기긴 했지만 여기서 싸우는 불필요한 낭비라고 생각합니다. 당신은 가던 길을 가기로 했고 노예상인은 남아 다시 매복합니다.", + "검은 기사" + ], + "OPTIONS": [ + "[명예를 지킨다] #r검은 #r기사와 #r싸웁니다. #g많은 #g보상을 #g얻습니다.", + "[참가한다] #r사로잡힌 #r영웅과 #r싸웁니다. #g많은 #g보상을 #g얻습니다.", + "[떠난다]", + "[싸운다!]", + "[계속한다]" + ] + }, + "champ:Library": { + "NAME": "도서관", + "DESCRIPTIONS": [ + "당신은 도시 지식의 중심지인 오래된 도서관과 우연히 마주치게 됩니다. NL 건물 안에는 무수히 많은 두루마리, 원고, 책들이 줄줄이 늘어서 있습니다. NL 당신은 그 중 하나를 집어들고 한동한 조용히 의자에 앉아 아늑함을 즐기거나, 전투 기술에 대해 상세히 적힌 지침서를 찾아보는 시간을 보낼 수도 있습니다.", + "공간을 가득 메운 고서와 안내서를 뒤지는 데 많은 시간을 허비하다 마침내 당신이 찾던 책을 찾아냈습니다. NL NL 편안한 의자에 앉아 잊고 있었던 자세와 기술을 정비하는 시간을 가집니다. 당신처럼 완벽한 전투의 화신이라도 정신수양은 육체 수양만큼 중요한 법입니다." + ], + "OPTIONS": [ + "[찾는다] #g전투 #g서적을 #g찾습니다.", + "[잠김] 모든 전투 고서를 봤습니다." + ] + }, + "champ:TechniqueTome": { + "NAME": "기술의 고서", + "DESCRIPTIONS": [ + "보이지 않는 거대한 힘이 발걸음을 샛길로 이끌었습니다. 당신은 얼마 지나지 않아 섬뜩한 에너지를 뿜어내는 받침대 위의 거대한 고서를 발견합니다. NL NL 다가가자 분명히 비어있던 페이지에 갑자기 당신이 전투에 대해 알아야 할 모든 것들, 공격 조합, 전투태세, 적의 약점 등이 새겨집니다. NL NL 너무 좋아서 현실이 아닌 것만 같습니다. 하지만 이 선물, 이 기회, 이 지식을 결코 놓칠 수는 없는 법입니다!", + "세상에! 이 고서가 가르쳐주는 기술로 숨이 막힐 지경입니다. 상대방을 해치우는 새로운 방법이 단어와 그림으로 당신의 머릿속에 떠오릅니다. NL NL 불행히도 이런 지식에는 대가가 따르는 법입니다. 당신의 정신에 크나큰 타격을 주지만 배울 게 많으니까요...", + "좋습니다. 좀 더 해야죠. 이제와서 멈출 수는 없습니다. 조금의 망설임도 없이 고서가 제공하는 풍부한 정보에 압도되어 더 진보한 전투 기술을 찾아냅니다. NL NL 대가를 완전히 이해한 당신은 자진해서 지식의 대가로 생명 에너지를 내놓습니다. 하지만 배울게 더 많아 보이네요...", + "당신은 모든 자제력을 동원해서 저주받은 책을 읽고 싶단 욕망을 참아냅니다. 언젠가 돌아오겠지만 지금은, 해야 할 일이 있으니까요.", + "귀중한 지식을 위해 어떠한 대가던 치를만한 가치가 있었습니다. 고서의 손아귀에서 벗어나기 위해 노력을 엄청나게 기울여야 했지만 결국에는 해냈습니다. NL NL 고서의 가르침을 정신에 새긴 채 시험해볼 새로운 희생자를 찾아 나섭니다." + ], + "OPTIONS": [ + "[읽는다] #y기술 #y효과를 추가할 공격 카드를 선택합니다. #r체력을 #r", + " #r잃습니다.", + "[떠난다]", + "[잠김] 공격 카드가 필요합니다.", + "기술 효과를 추가할 카드를 선택하십시오.", + "[읽는다] #y기술 #y효과를 추가할 공격 카드를 선택합니다. #r저주를 #r받습니다. #r- #r긍지." + ] + }, + "champ:Gym": { + "NAME": "연무장", + "DESCRIPTIONS": [ + "첨탑을 따라 내려가다 보니 당신이 몸을 가꾸기 위해 자주 찾는 태초의 연무장이 보입니다. NL NL 이곳에서 잠시 쉬지도 않고 그냥 가는 건 좋은 기회를 버리는 거겠죠. 정상에서 계속 머무르려면 쓸 수 있는 수는 다 취해야 하는 법입니다.", + "오늘은 체력에 집중하기로 합니다. 당신은 완전 무장을 하고 연무장 중앙에 놓인 트랙을 여러 바퀴 완주합니다. NL NL 솟구치는 에너지와 아드레날린으로 첨탑을 겁에 질리게 할 준비가 됐습니다.", + "오늘은 전투에 집중하기로 합니다. 당신은 재빨리 쉽게 처리할 수 있는 누군가를 찾아 그들의 사정은 봐주지 않은 채 경기장으로 끌고 옵니다. 그리고 얼마 지나지 않아 경기가 종료됩니다. NL NL 도전받아 치른 전투는 아니었지만 새로운 전투 시작 방법을 알았으니 이는 분명 앞으로 유용할 것입니다.", + "오늘은 근육과 상체 힘에 집중하기로 합니다. 비치된 중량과 당기기 기구를 수차례 사용해 근육을 가꿉니다. 운동을 마치자 하기 전보다 쉽게 들어 올리고 쉽게 잡아당기는 자신을 발견할 수 있었습니다. NL NL 연무장을 떠날 때 당신은 다음에 방문하면 하체 운동에 집중해야겠다고 머릿속에 입력해둡니다. 절대 놓쳐선 안 되는 법이죠." + ], + "OPTIONS": [ + "[심근 강화] #g최대 #g체력을 #g", + " #g얻습니다.", + "[연습 시합] 마무리 카드 제외 카드 선택: '선택한 자세를 취하는' 효과 추가.", + "[복근 운동] #g힘을 #g1 #g얻습니다.", + "[떠난다]", + "'수비 자세'를 취하는 효과를 추가할 카드를 선택합니다.", + "'검투사 자세'를 취하는 효과를 추가할 카드를 선택합니다.", + "'광폭화 자세'를 취하는 효과를 추가할 카드를 선택합니다.", + "[잠김] 자세를 추가할 카드가 필요합니다." + ] + }, + "champ:MinorLeagueArena": { + "NAME": "마이너리그 아레나", + "DESCRIPTIONS": [ + "태초를 지나치다 당신이 잘 알던 곳에 눈길이 갑니다. 지금은 도시의 콜로세움에서 진행되고 있지만 이전에는 이곳에서 혈투가 벌어졌었죠. 이 아담하고 매력적이지도 않은 아레나는 훈련장이나 일부 도전자들의 전투 장소로 이용됩니다. NL NL 이런 경기는 당신의 격에 맞지는 않지만 재미난 오락거리 정돈 되겠죠.", + "당신은 다른 곳에 시간을 쓰는 게 낫다고 생각해 아레나를 떠납니다. 당신이 떠나자 참가자들은 안도의 한숨을 내쉽니다. 분명 그 누구도 오늘 당신의 손에 죽고 싶지 않았던 거겠죠." + ], + "OPTIONS": [ + "[백부장 & 신비주의자와 싸운다] #g잠금 #g걸쇠를 #g얻습니다.", + "[귀족 그렘린과 싸운다] #g챔피언 #g벨트를 #g얻습니다.", + "[노예 상인 이인조와 싸운다] #g편자를 #g얻습니다.", + "[떠난다]" + ] + }, + "champ:BackToBasics": { + "NAME": "", + "DESCRIPTIONS": [ + "기술과 자신감은 천하무적의 조합을 이룹니다." + ], + "OPTIONS": [ + "[직감] #g모든 #g타격과 #g수비에 #y스킬 #y카드 #y보너스 #y효과를 #g얻습니다.", + "[잠김] 타격이나 수비가 필요합니다." + ] + } } \ No newline at end of file diff --git a/src/main/resources/champResources/localization/kor/KeywordStrings.json b/src/main/resources/champResources/localization/kor/KeywordStrings.json index ebc24f0f06..b7f79434f7 100644 --- a/src/main/resources/champResources/localization/kor/KeywordStrings.json +++ b/src/main/resources/champResources/localization/kor/KeywordStrings.json @@ -43,7 +43,7 @@ "[fist_icon]", "champ:[fist_icon]" ], - "DESCRIPTION": "자세를 취해야만 사용할 수 있습니다. NL 마무리 카드를 사용하면 #y자세에서 벗어나고 마무리 추가 효과가 적용됩니다. NL #r광폭화 #y스킬 #y보너스: #y힘을 #b1 얻습니다. NL #b수비 #y스킬 #y보너스: #y방어도를 #b8 얻습니다." + "DESCRIPTION": "자세를 취해야만 사용할 수 있습니다. NL 마무리 카드를 사용하면 #y자세에서 벗어나고 마무리 추가 효과가 적용됩니다. NL #r광폭화 #y스킬 #y보너스: #y힘을 #b1 얻습니다. NL #b수비 #y스킬 #y보너스: #y방어도를 #b6 얻습니다." }, { "PROPER_NAME": "반격", @@ -53,6 +53,7 @@ "반격을", "반격한", "반격만큼", + "반격하면", "반격한다면", "counter" ], @@ -65,7 +66,7 @@ "defensive", "defensive." ], - "DESCRIPTION": "#y자세. NL #y스킬 카드 보너스: #y반격을 #b3 얻습니다. NL #y마무리 추가 효과: #y방어도를 #b8 얻습니다." + "DESCRIPTION": "#y자세. NL #y스킬 카드 보너스: #y반격을 #b3 얻습니다. NL #y마무리 추가 효과: #y방어도를 #b6 얻습니다." }, { "PROPER_NAME": "광폭화", @@ -74,7 +75,7 @@ "berserker", "berserker." ], - "DESCRIPTION": "#y자세. NL #y스킬 카드 보너스: #y활력을 #b2 얻습니다. NL #y마무리 추가 효과: #y힘을 #b1 얻습니다." + "DESCRIPTION": "#y자세. NL #y스킬 카드 보너스: #y활력을 #b2 얻습니다. NL #y마무리 추가 효과: #y힘을 #b1 얻습니다." }, { "PROPER_NAME": "검투사", @@ -83,7 +84,7 @@ "gladiator", "gladiator." ], - "DESCRIPTION": "#y자세. NL #y스킬 카드 보너스: 카드를 1 장 뽑습니다. NL #y마무리 추가 효과: 다음 턴에 카드를 #b1 장 뽑고 [E] 를 얻습니다. 내 턴을 종료합니다." + "DESCRIPTION": "#y자세. NL #y스킬 카드 보너스: 카드를 1 장 뽑습니다. NL #y마무리 추가 효과: 다음 턴에 카드를 #b1 장 뽑고 [E] 를 얻습니다. 내 턴을 종료합니다." }, { "PROPER_NAME": "궁극의 자세", diff --git a/src/main/resources/champResources/localization/kor/MonsterStrings.json b/src/main/resources/champResources/localization/kor/MonsterStrings.json index 9e26dfeeb6..22fdca1b26 100644 --- a/src/main/resources/champResources/localization/kor/MonsterStrings.json +++ b/src/main/resources/champResources/localization/kor/MonsterStrings.json @@ -1 +1 @@ -{} \ No newline at end of file +{} \ No newline at end of file diff --git a/src/main/resources/champResources/localization/kor/OrbStrings.json b/src/main/resources/champResources/localization/kor/OrbStrings.json index 7654de2f30..22f958a1a9 100644 --- a/src/main/resources/champResources/localization/kor/OrbStrings.json +++ b/src/main/resources/champResources/localization/kor/OrbStrings.json @@ -1,7 +1,7 @@ -{} - - - - - - +{} + + + + + + diff --git a/src/main/resources/champResources/localization/kor/PotionStrings.json b/src/main/resources/champResources/localization/kor/PotionStrings.json index f9c0097175..d0b18e4ac7 100644 --- a/src/main/resources/champResources/localization/kor/PotionStrings.json +++ b/src/main/resources/champResources/localization/kor/PotionStrings.json @@ -1,32 +1,32 @@ -{ - "champ:OpenerPotion": { - "NAME": "전략 포션", - "DESCRIPTIONS": [ - "다른 종류 #y자세 카드 #b2 장 중 #b1 장을 선택해서 얻습니다. 이번 턴에 그 카드의 비용은 #b0 이 됩니다.", - "복사한 카드를 #b", - " 장 얻습니다.", - " 장 얻습니다." - ] - }, - "champ:TechniquePotion": { - "NAME": "병에 담긴 기술", - "DESCRIPTIONS": [ - "#y스킬 #y카드 #y보너스 효과를 #b", - " 번 얻습니다." - ] - }, - "champ:UltimateStancePotion": { - "NAME": "의심스러운 포션", - "DESCRIPTIONS": [ - "#y궁극의 #y자세를 #b", - " 턴 동안 취합니다." - ] - }, - "champ:CounterPotion": { - "NAME": "잘 우린 날카로움", - "DESCRIPTIONS": [ - "#y반격을 #b", - " 얻습니다." - ] - } -} +{ + "champ:OpenerPotion": { + "NAME": "전략 포션", + "DESCRIPTIONS": [ + "다른 종류 #y자세 카드 #b2 장 중 #b1 장을 선택해서 얻습니다. 이번 턴에 그 카드의 비용은 #b0 이 됩니다.", + " 복사한 카드를 #b", + " 장 얻습니다.", + " 장 얻습니다." + ] + }, + "champ:TechniquePotion": { + "NAME": "병에 담긴 기술", + "DESCRIPTIONS": [ + "현재 자세의 #y스킬 #y카드 #y보너스를 #b", + " 번 얻습니다." + ] + }, + "champ:UltimateStancePotion": { + "NAME": "스팀팩", + "DESCRIPTIONS": [ + "#y궁극의 #y자세를 #b", + " 턴 동안 취합니다." + ] + }, + "champ:CounterPotion": { + "NAME": "잘 우린 날카로움", + "DESCRIPTIONS": [ + "#y반격을 #b", + " 얻습니다." + ] + } +} diff --git a/src/main/resources/champResources/localization/kor/PowerStrings.json b/src/main/resources/champResources/localization/kor/PowerStrings.json index 2047f26754..bd119502ce 100644 --- a/src/main/resources/champResources/localization/kor/PowerStrings.json +++ b/src/main/resources/champResources/localization/kor/PowerStrings.json @@ -1,251 +1,251 @@ -{ - "champ:CounterPower": { - "NAME": "반격", - "DESCRIPTIONS": [ - "다음으로 피해를 받으면 피해를 #b", - " 만큼 주는 #y응수 #y타격을 얻습니다." - ] - }, - "champ:FocusedDefPower": { - "NAME": "집중: 수비", - "DESCRIPTIONS": [ - "이번 턴에 다음으로 #y마무리를 사용하면 #y방어도를 #b", - " 얻습니다." - ] - }, - "champ:FocusedBerPower": { - "NAME": "기묘한 발놀림", - "DESCRIPTIONS": [ - "이번 턴 동안 다음으로 #y마무리 카드를 사용하면 적 전체는 체력을 #b", - " 잃습니다." - ] - }, - "champ:ShieldWallPower": { - "NAME": "철의 요새", - "DESCRIPTIONS": [ - "내 턴 종료 시 #y반격을 #b", - " 얻습니다." - ] - }, - "champ:EntangleNextTurnPower": { - "NAME": "검 투척", - "DESCRIPTIONS": [ - "다음 턴에 #y공격 카드를 사용할 수 없습니다.", - "다음 #b", - " 턴 동안 #y공격 카드를 사용할 수 없습니다." - ] - }, - "champ:DrawLessNextTurnPower": { - "NAME": "뽑기 감소", - "DESCRIPTIONS": [ - "다음 턴에 카드를 #b", - " 장 적게 뽑습니다.", - " 장 적게 뽑습니다." - ] - }, - "champ:PushThroughPower": { - "NAME": "고통 감내", - "DESCRIPTIONS": [ - "이번 턴에 체력을 잃지 않습니다.", - "#b", - " 턴 동안 체력을 잃지 않습니다." - ] - }, - "champ:WorseRupturePower": { - "NAME": "끝없는 분노", - "DESCRIPTIONS": [ - "내 턴에 체력을 잃을 때마다 #y힘을 #b", - " 얻고 턴 종료 시 잃습니다." - ] - }, - "champ:ImprovisingPower": { - "NAME": "증강", - "DESCRIPTIONS": [ - "내 턴 시작 시 #y자세를 취하고 있지 않다면 무작위 #y자세를 취합니다. 자세를 취할 때마다 취한 자세의 스킬 카드 보너스를 #b", - " 번 얻습니다." - ] - }, - "champ:CalledShotPower": { - "NAME": "원기 회복", - "DESCRIPTIONS": [ - "다음으로 사용한 #y마무리 카드는 #y자세에서 벗어나지 않습니다.", - "다음 #b", - " 번 까지 사용한 #y마무리 카드는 #y자세에서 벗어나지 않습니다." - ] - }, - "champ:DancingMasterPower": { - "NAME": "춤 전문가", - "DESCRIPTIONS": [ - "매 턴 #마무리 카드를 처음으로 사용할 때마다 #b", - " [E] 를 얻고 카드를 #b", - " 장 뽑습니다. ", - "", - "이번 턴에 사용됐습니다.", - "" - ] - }, - "champ:StrikeOfGeniusPower": { - "NAME": "천재적인 타격", - "DESCRIPTIONS": [ - "턴 시작 시 이름에 \"타격\" 이 포함된 무작위 카드의 #y메아리를 1장 얻습니다. 그 카드의 비용은 사용하기 전까지 #b0 입니다.", - "턴 시작 시 이름에 \"타격\" 이 포함된 무작위 카드의 #y메아리를 #b", - " 장 얻습니다. 그 카드의 비용은 사용하기 전까지 #b0 입니다." - ] - }, - "champ:StrikeOfGeniusUpgradedPower": { - "NAME": "천재적인 타격+", - "DESCRIPTIONS": [ - "턴 시작 시 이름에 \"타격\" 이 포함된 무작위 카드의 #y강화된 #y메아리를 1장 얻습니다. 그 카드의 비용은 사용하기 전까지 #b0 이고 소멸합니다.", - "턴 시작 시 이름에 \"타격\" 이 포함된 무작위 카드의 #y강화된 #y메아리를 #b", - " 장 얻습니다. 그 카드의 비용은 사용하기 전까지 #b0 이고 소멸합니다." - ] - }, - "champ:DefensiveStylePower": { - "NAME": "수비 태세", - "DESCRIPTIONS": [ - "#y수비 자세의 #y스킬 카드 보너스 #y반격이 #b", - " 증가합니다." - ] - }, - "champ:GladiatorStylePower": { - "NAME": "건투", - "DESCRIPTIONS": [ - "내 턴 시작 시 #y자세를 취하고 있지 않다면 이번 턴에 #y힘과 #y민첩을 #b", - " 얻고 턴 종료 시 잃습니다." - ] - }, - "champ:BerserkerStylePower": { - "NAME": "광폭화 태세", - "DESCRIPTIONS": [ - "#y광폭화 자세의 #y스킬 카드 보너스 #y활력이 #b", - " 증가합니다." - ] - }, - "champ:FalseCounterPower": { - "NAME": "속이는 반격", - "DESCRIPTIONS": [ - "다음으로 #y반격이 발동하면 #y반격을 절반만 잃습니다.", - "다음 #b", - " 번까지 #y반격이 발동하면 #y반격을 절반만 잃습니다." - ] - }, - "champ:EnergizedDurationPower": { - "NAME": "에너지 충전", - "DESCRIPTIONS": [ - "다음 턴에 [E] 를 #b", - " 얻습니다.", - " 얻습니다.", - " - TRANSLATOR NOTE: - The above line is for plural if needed to distinguish from singular." - ] - }, - "champ:IronFortressPower": { - "NAME": "현란한 꺾기", - "DESCRIPTIONS": [ - "자세를 취할 때마다 #y방어도를 #b", - " 얻습니다." - ] - }, - "champ:IronFortressVigorPower": { - "NAME": "현란한 꺾기: 광폭화", - "DESCRIPTIONS": [ - "자세를 취할 때마다 #y광폭화 #y자세의 #y스킬 카드 보너스 효과를", - " #b", - " 번 얻습니다." - ] - }, - "champ:LastStandMod": { - "NAME": "최후의 자세", - "DESCRIPTIONS": [ - "턴 시작 시 체력이 50% 이하라면 모든 해로운 효과를 제거하고 #y힘을 #b", - " 얻습니다." - ] - }, - "champ:GladiatorFormPower": { - "NAME": "검투사의 형상", - "DESCRIPTIONS": [ - "다음 내 턴 시작 시 #b이번 턴 동안 소모한 #y활력 #b3 당 #y활력과 #y반격을 #b", - " 얻습니다." - ] - }, - "champ:NoBlockNextTurnPower": { - "NAME": "방패 던지기", - "DESCRIPTIONS": [ - "다음 턴 #y방어도를 얻을 수 없습니다.", - "다음 #b", - " 턴 동안 #y방어도를 얻을 수 없습니다." - ] - }, - "champ:UltimateStancePower": { - "NAME": "궁극의 회수", - "DESCRIPTIONS": [ - "궁극의 자세가 이번 턴에 끝납니다.", - "궁극의 자세가 #b", - " 턴 남았습니다." - ] - }, - "champ:UltimateFormNextTurnPower": { - "NAME": "궁극의 준비", - "DESCRIPTIONS": [ - "내 다음 턴 시작 시 #y궁극의 #y자세를 취합니다.", - " NL #b", - " 턴 동안 지속됩니다." - ] - }, - "champ:EnGardePower": { - "NAME": "준비!", - "DESCRIPTIONS": [ - "이번 턴에 #y방어도를 모두 잃으면 다음 턴에 #y방어도를 #b", - " 얻습니다." - ] - }, - "champ:ParryPower": { - "NAME": "받아치기", - "DESCRIPTIONS": [ - "이번 턴에 #y반격이 발동하면 #y응수 #y타격을 한 장 추가로 얻습니다." - ] - }, - "champ:BoomerangPower": { - "NAME": "부메랑", - "DESCRIPTIONS": [ - "다음 내 턴 시작 시 ", - " 카드를 가져옵니다. 그 카드의 비용은 사용하기 전까지 #b0 이 되고 사용 후 카드를 가져오지 않습니다." - ] - }, - "champ:ResolvePower": { - "NAME": "피로", - "DESCRIPTIONS": [ - "전투 종료 시 #y피로로 잃은 체력을 회복합니다." - ] - }, - "champ:DualPlaySrikePower": { - "NAME": "타격 돌풍", - "DESCRIPTIONS": [ - "이번 턴에 다음으로 사용하는 #y\"타격\" 카드를 2번 사용합니다.", - "이번 턴에 ", - " 번까지 사용하는 #y\"타격\" 카드를 2번 사용합니다." - ] - }, - "champ:LastStandPower": { - "NAME": "최후의 저항", - "DESCRIPTIONS": [ - "내 체력이 50% 미만일 때 모든 해로운 효과를 제거하고 #y힘을 #b", - " 얻습니다.", - "~넌~ ~실수를~ ~저질렀다...~", - "@패배??@ NL @말도@ @안돼!!@" - ] - }, - "champ:HonePower": { - "NAME": "칼갈이", - "DESCRIPTIONS": [ - "보유 중인 카드 중 이름에 \"타격\" 이 포함된 카드의 피해량이 #b", - " 증가합니다." - ] - }, - "champ:DoubleStyleThisTurnPower": { - "NAME": "쇠사슬 채찍", - "DESCRIPTIONS": [ - "이번 턴 동안 #y스킬 카드 보너스를 #b", - " 증가시킵니다." - ] - } -} +{ + "champ:CounterPower": { + "NAME": "반격", + "DESCRIPTIONS": [ + "다음으로 피해를 받으면 피해를 #b", + " 만큼 주는 #y응수 #y타격을 얻습니다." + ] + }, + "champ:FocusedDefPower": { + "NAME": "집중: 수비", + "DESCRIPTIONS": [ + "이번 턴에 다음으로 #y마무리를 사용하면 #y방어도를 #b", + " 얻습니다." + ] + }, + "champ:FocusedBerPower": { + "NAME": "기묘한 발놀림", + "DESCRIPTIONS": [ + "이번 턴 동안 다음으로 #y마무리 카드를 사용하면 적 전체는 체력을 #b", + " 잃습니다." + ] + }, + "champ:ShieldWallPower": { + "NAME": "방패 막기", + "DESCRIPTIONS": [ + "내 턴 종료 시 #y반격을 #b", + " 얻습니다." + ] + }, + "champ:EntangleNextTurnPower": { + "NAME": "검 투척", + "DESCRIPTIONS": [ + "다음 턴에 #y공격 카드를 사용할 수 없습니다.", + "다음 #b", + " 턴 동안 #y공격 카드를 사용할 수 없습니다." + ] + }, + "champ:DrawLessNextTurnPower": { + "NAME": "뽑기 감소", + "DESCRIPTIONS": [ + "다음 턴에 카드를 #b", + " 장 적게 뽑습니다.", + " 장 적게 뽑습니다." + ] + }, + "champ:PushThroughPower": { + "NAME": "고통 감내", + "DESCRIPTIONS": [ + "이번 턴에 체력을 잃지 않습니다.", + "#b", + " 턴 동안 체력을 잃지 않습니다." + ] + }, + "champ:WorseRupturePower": { + "NAME": "끝없는 분노", + "DESCRIPTIONS": [ + "내 턴에 체력을 잃을 때마다 #y힘을 #b", + " 얻고 턴 종료 시 잃습니다." + ] + }, + "champ:ImprovisingPower": { + "NAME": "증강", + "DESCRIPTIONS": [ + "#y자세를 취할 때마다 해당 #y자세의 #y스킬 #y카드 #y보너스를 #b", + " 번 얻습니다." + ] + }, + "champ:CalledShotPower": { + "NAME": "원기 회복", + "DESCRIPTIONS": [ + "다음으로 사용한 #y마무리 카드는 #y자세에서 벗어나지 않습니다.", + "다음 #b", + " 번까지 사용한 #y마무리 카드는 #y자세에서 벗어나지 않습니다." + ] + }, + "champ:DancingMasterPower": { + "NAME": "춤 전문가", + "DESCRIPTIONS": [ + "매 턴 #y마무리 카드를 처음으로 사용할 때마다 #b", + " [E] 를 얻고 카드를 #b", + " 장 뽑습니다. ", + "", + "이번 턴에 사용됐습니다.", + "" + ] + }, + "champ:StrikeOfGeniusPower": { + "NAME": "천재적인 타격", + "DESCRIPTIONS": [ + "내 턴 시작 시 이름에 \"타격\" 이 포함된 무작위 #y메아리를 얻습니다. 그 카드의 비용은 사용하기 전까지 #b0 입니다.", + "내 턴 시작 시 이름에 \"타격\" 이 포함된 무작위 #y메아리를 #b", + " 장 얻습니다. 그 카드들의 비용은 사용하기 전까지 #b0 입니다." + ] + }, + "champ:StrikeOfGeniusUpgradedPower": { + "NAME": "천재적인 타격+", + "DESCRIPTIONS": [ + "내 턴 시작 시 이름에 \"타격\" 이 포함된 무작위 #y강화된 #y메아리를 얻습니다. 그 카드의 비용은 사용하기 전까지 #b0 입니다.", + "내 턴 시작 시 이름에 \"타격\" 이 포함된 무작위 #y메아리를 #b", + " 장 얻습니다. 그 카드들의 비용은 사용하기 전까지 #b0 입니다." + ] + }, + "champ:DefensiveStylePower": { + "NAME": "수비 태세", + "DESCRIPTIONS": [ + "#b수비 자세의 #y스킬 카드 보너스 #y반격이 #b", + " 증가합니다." + ] + }, + "champ:GladiatorStylePower": { + "NAME": "건투", + "DESCRIPTIONS": [ + "내 턴 시작 시 #y자세를 취하고 있지 않다면 이번 턴에 #y힘과 #y민첩을 #b", + " 얻고 턴 종료 시 잃습니다." + ] + }, + "champ:BerserkerStylePower": { + "NAME": "광폭화 태세", + "DESCRIPTIONS": [ + "#r광폭화 자세의 #y스킬 카드 보너스 #y활력이 #b", + " 증가합니다." + ] + }, + "champ:FalseCounterPower": { + "NAME": "속이는 반격", + "DESCRIPTIONS": [ + "다음으로 #y반격이 발동하면 #y반격을 절반만 잃습니다.", + "다음 #b", + " 번까지 #y반격이 발동하면 #y반격을 절반만 잃습니다." + ] + }, + "champ:EnergizedDurationPower": { + "NAME": "에너지 충전", + "DESCRIPTIONS": [ + "다음 턴에 [E] 를 #b", + " 얻습니다.", + " 얻습니다.", + " - TRANSLATOR NOTE: - The above line is for plural if needed to distinguish from singular." + ] + }, + "champ:IronFortressPower": { + "NAME": "현란한 꺾기", + "DESCRIPTIONS": [ + "#y자세를 취할 때마다 #y방어도를 #b", + " 얻습니다." + ] + }, + "champ:IronFortressVigorPower": { + "NAME": "현란한 꺾기: 광폭화", + "DESCRIPTIONS": [ + "#y자세를 취할 때마다 #r광폭화 #r자세의 #y스킬 카드 보너스를", + " #b", + " 번 얻습니다." + ] + }, + "champ:LastStandMod": { + "NAME": "최후의 저항", + "DESCRIPTIONS": [ + "턴 시작 시 체력이 #b50% 이하라면 모든 해로운 효과를 제거하고 #y힘을 #b", + " 얻습니다." + ] + }, + "champ:GladiatorFormPower": { + "NAME": "검투사의 형상", + "DESCRIPTIONS": [ + "다음 내 턴 시작 시 이번 턴 동안 소모한 #y활력 #b3 당 #y활력과 #y반격을 #b", + " 얻습니다." + ] + }, + "champ:NoBlockNextTurnPower": { + "NAME": "방패 투척", + "DESCRIPTIONS": [ + "다음 턴 #y방어도를 얻을 수 없습니다.", + "다음 #b", + " 턴 동안 #y방어도를 얻을 수 없습니다." + ] + }, + "champ:UltimateStancePower": { + "NAME": "궁극의 회수", + "DESCRIPTIONS": [ + "궁극의 자세가 이번 턴에 끝납니다.", + "궁극의 자세가 #b", + " 턴 남았습니다." + ] + }, + "champ:UltimateFormNextTurnPower": { + "NAME": "궁극의 준비", + "DESCRIPTIONS": [ + "내 다음 턴 시작 시 #y궁극의 #y자세를 취합니다.", + " NL #b", + " 턴 동안 지속됩니다." + ] + }, + "champ:EnGardePower": { + "NAME": "준비 시작", + "DESCRIPTIONS": [ + "이번 턴에 #y방어도를 모두 잃으면 다음 턴에 #y방어도를 #b", + " 얻습니다." + ] + }, + "champ:ParryPower": { + "NAME": "받아치기", + "DESCRIPTIONS": [ + "이번 턴에 #y반격이 발동하면 #y응수 #y타격을 한 장 추가로 얻습니다." + ] + }, + "champ:BoomerangPower": { + "NAME": "부메랑", + "DESCRIPTIONS": [ + "내 다음 턴 시작 시 ", + " 카드를 가져옵니다. 그 카드의 비용은 사용하기 전까지 #b0 이 되고 사용 후 카드를 가져오지 않습니다." + ] + }, + "champ:ResolvePower": { + "NAME": "피로", + "DESCRIPTIONS": [ + "전투 종료 시 #y피로로 잃은 체력을 회복합니다." + ] + }, + "champ:DualPlaySrikePower": { + "NAME": "타격 돌풍", + "DESCRIPTIONS": [ + "이번 턴에 다음으로 사용하는 #y\"타격\" 카드를 #b2 번 사용합니다.", + "이번 턴에 최대 #b ", + " 번 사용하는 #y\"타격\" 카드를 #b2 번 사용합니다." + ] + }, + "champ:LastStandPower": { + "NAME": "최후의 저항", + "DESCRIPTIONS": [ + "내 체력이 #b50% 미만일 때 모든 해로운 효과를 제거하고 #y힘을 #b", + " 얻습니다.", + "~넌~ ~실수를~ ~저질렀다...~", + "@패배??@ NL @말도@ @안돼!!@" + ] + }, + "champ:HonePower": { + "NAME": "칼갈이", + "DESCRIPTIONS": [ + "보유 중인 카드 중 이름에 #y\"타격\" 이 포함된 카드의 피해량이 #b", + " 증가합니다." + ] + }, + "champ:DoubleStyleThisTurnPower": { + "NAME": "쇠사슬 채찍", + "DESCRIPTIONS": [ + "이번 턴 동안 #y스킬 카드 보너스가 #b", + " 증가합니다." + ] + } +} \ No newline at end of file diff --git a/src/main/resources/champResources/localization/kor/RelicStrings.json b/src/main/resources/champResources/localization/kor/RelicStrings.json index b70c2079cb..c509561252 100644 --- a/src/main/resources/champResources/localization/kor/RelicStrings.json +++ b/src/main/resources/champResources/localization/kor/RelicStrings.json @@ -1,126 +1,132 @@ -{ - "champ:ChampionCrown": { - "NAME": "챔피언 왕관", - "FLAVOR": "승자는 바로 당신입니다!", - "DESCRIPTIONS": [ - "#b수비 또는 #r광폭화 자세를 선택해 취한 채로 전투를 시작합니다." - ] - }, - "champ:BlackKnightHelmet": { - "NAME": "검은 기사의 투구", - "FLAVOR": "살짝 스친 상처 뿐입니다.", - "DESCRIPTIONS": [ - "매 전투 시 처음으로 수비 또는 광폭화 자세를 취할 때 자세에 따라 유물의 효과가 따로 한 번씩 적용됩니다. NL #bchamp:수비: 민첩을 #b2 얻고 힘을 #b1 잃습니다. NL #rchamp:광폭화: 힘을 #b2 얻고 민첩을 #b1 잃습니다." - ] - }, - "champ:Barbells": { - "NAME": "역기", - "FLAVOR": "100번? 웃기는군. 난 101번도 가능하다.", - "DESCRIPTIONS": [ - "휴식 장소를 거칠 때마다 강화하지 않은 카드가 #b10 장 이상이면 무작위로 하나 #y강화합니다." - ] - }, - "champ:BerserkersGuideToSlaughter": { - "NAME": "올바른 광폭화 지침서", - "FLAVOR": "글을 읽을 수가 없습니다.", - "DESCRIPTIONS": [ - "내 턴 시작 시 #y활력을 #b3 얻습니다." - ] - }, - "champ:ChampionCrownUpgraded": { - "NAME": "승리의 왕관", - "FLAVOR": "축하합니다!! 당신은 영광스러운 승자입니다.", - "DESCRIPTIONS": [ - "", - "과 교체합니다.[] NL #b3 턴 동안 #ychamp:궁극의 #y자세를 취한 채로 전투를 시작합니다." - ] - }, - "champ:DefensiveTrainingManual": { - "NAME": "수비 논문", - "FLAVOR": "전문가의 조언: 안 맞으면 됩니다.", - "DESCRIPTIONS": [ - "#bchamp수비 자세의 #ychamp:마무리 #y추가 #y효과의 #y방어도가 #b4 증가합니다." - ] - }, - "champ:DeflectingBracers": { - "NAME": "편향된 아대", - "FLAVOR": "차단하고 싶은 게 있다면...", - "DESCRIPTIONS": [ - "내 턴 시작 시 이번 턴 시작으로 사라진 방어도의 절반만큼 #ychamp:반격을 얻습니다." - ] - }, - "champ:DuelingGlove": { - "NAME": "결투 장갑", - "FLAVOR": "10부터 세겠다...", - "DESCRIPTIONS": [ - "공격 대상이 하나인 #y공격 카드 사용 시 대상에 #y취약이 없다면 #y취약을 #b1 부여합니다." - ] - }, - "champ:FightingForDummies": { - "NAME": "돌핀 식 안내서", - "FLAVOR": "저자: 저명한 탐험가이자 복싱 선수인 돌핀 K.미스트", - "DESCRIPTIONS": [ - "내 턴 종료 시 #y자세를 취하고 있지 않다면 다음 턴에 카드를 1장 추가로 뽑습니다." - ] - }, - "champ:GladiatorsBookOfMartialProwess": { - "NAME": "검투사 안내서", - "FLAVOR": "뭐라도 하다보면 - 뭔가 걸리겠죠.", - "DESCRIPTIONS": [ - "한 턴에 #ychamp:연계, #ychamp:마무리, #y자세 카드를 전부 사용할 때마다 #y힘과 #y민첩 을 #b1 얻습니다." - ] - }, - "champ:PowerArmor": { - "NAME": "강력한 갑옷", - "FLAVOR": "중고로 샀습니다.", - "DESCRIPTIONS": [ - "내 턴 시작 시 [E] 를 얻습니다. NL 최대 #y활력과 #ychamp:반격이 #b10 으로 감소합니다." - ] - }, - "champ:RageAmulet": { - "NAME": "반골의 애뮬릿", - "FLAVOR": "한때 덧없다고 생각한 힘은 언제나 당신과 함께하고 있었습니다.", - "DESCRIPTIONS": [ - "#y활력을 #b", - " 소모할 때마다 #y힘을 #b1 얻습니다." - ] - }, - "champ:SignatureFinisher": { - "NAME": "대표 마무리 기술", - "FLAVOR": "이제 궁극기를 맛보아라!", - "DESCRIPTIONS": [ - "획득 시 #ychamp:마무리 카드를 1장 선택합니다. 그 카드의 비용은 #b0 이 됩니다. #y자세를 취하지 않아도 사용 가능하며 #y자세에서 벗어나지 않습니다.", - "카드를 선택하세요: ", - " 카드는 비용이 #b0 이 됩니다. #y자세를 취하지 않아도 사용 가능하며 #y자세에서 벗어나지 않습니다." - ] - }, - "champ:SpectersHand": { - "NAME": "불안한 귀신의 손", - "FLAVOR": "승리했다면 무언가가 함께하고 있을지도 모릅니다.", - "DESCRIPTIONS": [ - "자세를 취할 때마다 #y타격 또는 #y수비 카드를 얻습니다. 그 카드의 비용은 #b0 입니다." - ] - }, - "champ:LiftRelic": { - "NAME": "내면의 힘", - "FLAVOR": "누구든 마음속에 거대한 검을 품고 있습니다.", - "DESCRIPTIONS": [ - "#y힘을 #b", - " 얻은 채로 전투를 시작합니다." - ] - }, - "champ:ChampStancesModRelic": { - "NAME": "새로운 도전자", - "FLAVOR": "왕관을 노리고 왔느냐?", - "DESCRIPTIONS": [ - "무작위 #y자세를 취한 채로 전투를 시작합니다." - ] - }, - "champ:BustedCrownGagText": { - "NAME": "부서진 왕관", - "FLAVOR": "모방은 진심 어린 극찬의 형태라는 게... 맞는 말일까요? 투사의 왕관과 닮지도 않았습니다. 오히려 모욕에 가까운 물건입니다.", - "DESCRIPTIONS": [ - "매 턴 시작 시 [E] 를 얻습니다. 카드 보상을 받을 때 선택할 수 있는 카드가 #b2 장 줄어듭니다." - ] - } -} +{ + "champ:ChampionCrown": { + "NAME": "챔피언 왕관", + "FLAVOR": "승자는 바로 당신입니다!", + "DESCRIPTIONS": [ + "전투당 한 번 취하지 않은 #y자세를 취합니다." + ] + }, + "champ:BlackKnightHelmet": { + "NAME": "검은 기사의 투구", + "FLAVOR": "살짝 스친 흠집 뿐입니다.", + "DESCRIPTIONS": [ + "매 전투 시 처음으로 수비 또는 광폭화 자세를 취할 때 자세에 따라 이 효과가 따로 한 번씩 적용됩니다. NL #bchamp:수비: #y민첩을 #b2 얻고 #y힘을 #b1 잃습니다. NL #rchamp:광폭화: #y힘을 #b2 얻고 #y민첩을 #b1 잃습니다." + ] + }, + "champ:Barbells": { + "NAME": "역기", + "FLAVOR": "100번? 웃기는군. 난 101번도 가능하다.", + "DESCRIPTIONS": [ + "휴식 장소를 거칠 때마다 #y강화하지 #y않은 카드가 #b", + " 장 이상이면 무작위로 하나 #y강화합니다." + ] + }, + "champ:BerserkersGuideToSlaughter": { + "NAME": "올바른 광폭화 지침서", + "FLAVOR": "글을 읽을 수가 없습니다.", + "DESCRIPTIONS": [ + "내 턴 시작 시 #y활력을 #b", + " 얻습니다." + ] + }, + "champ:ChampionCrownUpgraded": { + "NAME": "승리의 왕관", + "FLAVOR": "축하합니다!! 당신은 영광스러운 승자입니다.", + "DESCRIPTIONS": [ + " ", + "과[] 교체합니다. NL 매 턴 처음 #ychamp:마무리 카드를 사용하면 카드를 #b", + " 장 뽑고 무작위 #y자세를 취합니다." + ] + }, + "champ:DefensiveTrainingManual": { + "NAME": "수비 논문", + "FLAVOR": "전문가의 조언: 안 맞으면 됩니다.", + "DESCRIPTIONS": [ + "#bchamp:수비 #b자세의 #ychamp:마무리 #y보너스 #y방어도가 #b", + " 증가합니다." + ] + }, + "champ:DeflectingBracers": { + "NAME": "편향된 아대", + "FLAVOR": "차단하고 싶은 게 있다면...", + "DESCRIPTIONS": [ + "내 턴 시작 시 이번 턴 시작으로 사라진 #y방어도의 절반만큼 #ychamp:반격을 얻습니다." + ] + }, + "champ:DuelingGlove": { + "NAME": "결투 장갑", + "FLAVOR": "10부터 세겠다...", + "DESCRIPTIONS": [ + "공격 대상이 하나인 #y공격 카드 사용 시 대상에 #y취약이 없다면 #y취약을 #b1 부여합니다." + ] + }, + "champ:FightingForDummies": { + "NAME": "돌핀 식 안내서", + "FLAVOR": "저자: 저명한 탐험가이자 복싱 선수인 돌핀 K.미스트", + "DESCRIPTIONS": [ + "내 턴 종료 시 #y자세를 취하고 있지 않다면 다음 턴에 카드를 #b1 장 더 뽑습니다." + ] + }, + "champ:GladiatorsBookOfMartialProwess": { + "NAME": "검투사 안내서", + "FLAVOR": "뭐라도 하다보면 - 뭔가 걸리겠죠.", + "DESCRIPTIONS": [ + "한 턴에 #ychamp:연계, #ychamp:마무리, #ychamp:자세를 #y취하는 카드를 전부 사용할 때마다 #y힘과 #y민첩을 #b1 얻습니다." + ] + }, + "champ:PowerArmor": { + "NAME": "강력한 갑옷", + "FLAVOR": "중고로 샀습니다.", + "DESCRIPTIONS": [ + "내 턴 시작 시 [E] 를 얻습니다. NL 최대 #y활력과 #ychamp:반격이 #b", + " 으로 됩니다." + ] + }, + "champ:RageAmulet": { + "NAME": "반골의 애뮬릿", + "FLAVOR": "한때 덧없다고 생각한 힘은 언제나 당신과 함께하고 있었습니다.", + "DESCRIPTIONS": [ + "소모한 #y활력 #b", + " 당 #y힘을 #b1 얻습니다." + ] + }, + "champ:SignatureFinisher": { + "NAME": "대표 마무리 기술", + "FLAVOR": "이제 궁극기를 맛보아라!", + "DESCRIPTIONS": [ + "획득 시 #ychamp:마무리 카드를 1장 선택합니다. 그 카드의 비용은 #b0 이 됩니다. #ychamp:자세를 취하지 않아도 사용 가능하며 #y자세에서 벗어나지 않습니다.", + "카드를 선택하세요: ", + " 카드의 비용은 #b0 이 됩니다. #y자세를 취하지 않아도 사용 가능하며 #y자세에서 벗어나지 않습니다.", + "이 유물로 선택한 카드가 덱에서 #r제거되어 유물이 비활성화됐습니다." + ] + }, + "champ:SpectersHand": { + "NAME": "불안한 귀신의 손", + "FLAVOR": "승리했다면 무언가가 함께하고 있을지도 모릅니다.", + "DESCRIPTIONS": [ + "#y자세를 취할 때마다 #y타격 또는 #y수비의 #ygremlin:메아리를 얻습니다. 그 카드의 비용은 #b0 입니다." + ] + }, + "champ:LiftRelic": { + "NAME": "내면의 힘", + "FLAVOR": "누구든 마음속에 거대한 검을 품고 있습니다.", + "DESCRIPTIONS": [ + "#y힘을 #b", + " 얻은 채로 전투를 시작합니다." + ] + }, + "champ:ChampStancesModRelic": { + "NAME": "새로운 도전자", + "FLAVOR": "왕관을 노리고 왔느냐?", + "DESCRIPTIONS": [ + "무작위 #y자세를 취한 채로 전투를 시작합니다." + ] + }, + "champ:BustedCrownGagText": { + "NAME": "부서진 왕관", + "FLAVOR": "모방은 진심 어린 극찬의 형태라는 게... 맞는 말일까요? 투사의 왕관과 닮지도 않았습니다. 오히려 모욕에 가까운 물건입니다.", + "DESCRIPTIONS": [ + "내 턴 시작 시 [E] 를 얻습니다. 카드 보상을 받을 때 선택할 수 있는 카드가 #b2 장 줄어듭니다." + ] + } +} \ No newline at end of file diff --git a/src/main/resources/champResources/localization/kor/RunModStrings.json b/src/main/resources/champResources/localization/kor/RunModStrings.json index ea299cc250..87db0746f9 100644 --- a/src/main/resources/champResources/localization/kor/RunModStrings.json +++ b/src/main/resources/champResources/localization/kor/RunModStrings.json @@ -1,6 +1,6 @@ -{ - "Slimebound:AllSplit": { - "NAME": "첨탑 슬라임", - "DESCRIPTION": "모든 적이 슬라임 두 마리로 분열합니다" - } +{ + "Slimebound:AllSplit": { + "NAME": "첨탑 슬라임", + "DESCRIPTION": "모든 적이 슬라임 두 마리로 분열합니다." + } } \ No newline at end of file diff --git a/src/main/resources/champResources/localization/kor/UIStrings.json b/src/main/resources/champResources/localization/kor/UIStrings.json index aebaf1cf71..07a6a67ba5 100644 --- a/src/main/resources/champResources/localization/kor/UIStrings.json +++ b/src/main/resources/champResources/localization/kor/UIStrings.json @@ -1,44 +1,44 @@ -{ - "champ:SealCommonReward": { - "TEXT": [ - "덱에 일반 카드 추가" - ] - }, - "champ:SealSealReward": { - "TEXT": [ - "덱에 봉인 추가" - ] - }, - "champ:TechniqueMod": { - "TEXT": [ - " NL *스킬 *카드 champ:보너스 효과를 얻습니다." - ] - }, - "champ:OpenerMod": { - "TEXT": [ - " NL champ:광폭화 자세를 취합니다.", - " NL champ:수비 자세를 취합니다.", - "champ:검투사 자세를 취합니다 NL " - ] - }, - "champ:RetainCardMod": { - "TEXT": [ - "보존. NL " - ] - }, - "champ:EnchantUI": { - "TEXT": [ - "비용이 0이 됩니다.", - "피해량이 증가합니다.", - "방어도가 증가합니다." - ] - }, - "champ:highlightCombos": { - "TEXT": [ - "*광폭화 champ:연계:", - "[#5ebf2a]광폭화 champ:연계:", - "*수비 champ:연계:", - "[#5ebf2a]수비 champ:연계:" - ] - } +{ + "champ:SealCommonReward": { + "TEXT": [ + "덱에 일반 카드 추가" + ] + }, + "champ:SealSealReward": { + "TEXT": [ + "덱에 봉인 추가" + ] + }, + "champ:TechniqueMod": { + "TEXT": [ + " NL *스킬 *카드 champ:보너스 효과를 얻습니다." + ] + }, + "champ:OpenerMod": { + "TEXT": [ + " NL champ:광폭화 자세를 취합니다.", + " NL champ:수비 자세를 취합니다.", + "champ:검투사 자세를 취합니다. NL " + ] + }, + "champ:RetainCardMod": { + "TEXT": [ + "보존. NL " + ] + }, + "champ:EnchantUI": { + "TEXT": [ + "비용이 0이 됩니다.", + "피해량이 증가합니다.", + "방어도가 증가합니다." + ] + }, + "champ:highlightCombos": { + "TEXT": [ + "*광폭화 champ:연계:", + "[#5ebf2a]광폭화 champ:연계:", + "*수비 champ:연계:", + "[#5ebf2a]수비 champ:연계:" + ] + } } \ No newline at end of file diff --git a/src/main/resources/champResources/localization/ptb/KeywordStrings.json b/src/main/resources/champResources/localization/ptb/KeywordStrings.json index 791f71c950..c6fbf11c88 100644 --- a/src/main/resources/champResources/localization/ptb/KeywordStrings.json +++ b/src/main/resources/champResources/localization/ptb/KeywordStrings.json @@ -43,7 +43,7 @@ "defensive", "defensivo." ], - "DESCRIPTION": "#yPostura. NL #yBônus de Habilidade: Ganhe #b3 #yContra-ataque. NL Efeito de #yFinalizador: Ganhe #b8 #yBloqueio." + "DESCRIPTION": "#yPostura. NL #yBônus de Habilidade: Ganhe #b3 #yContra-ataque. NL Efeito de #yFinalizador: Ganhe #b6 #yBloqueio." }, { "PROPER_NAME": "Berserker", diff --git a/src/main/resources/champResources/localization/rus/KeywordStrings.json b/src/main/resources/champResources/localization/rus/KeywordStrings.json index ae81eb87ec..ee22a744c9 100644 --- a/src/main/resources/champResources/localization/rus/KeywordStrings.json +++ b/src/main/resources/champResources/localization/rus/KeywordStrings.json @@ -44,7 +44,7 @@ "рыцаря", "рыцаря." ], - "DESCRIPTION": "#bОборонительная #yстойка. NL Бонус #yНавыка - даёт #b3 #yКонтратаки. NL Бонус #yФинишера - даёт #b8 #yЗащиты." + "DESCRIPTION": "#bОборонительная #yстойка. NL Бонус #yНавыка - даёт #b3 #yКонтратаки. NL Бонус #yФинишера - даёт #b6 #yЗащиты." }, { "PROPER_NAME": "Стойка Берсерка", 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 0000000000..2a22cf1721 --- /dev/null +++ b/src/main/resources/champResources/localization/spa/CardStrings.json @@ -0,0 +1,382 @@ +{ + "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! Débil y 1 Vulnerable.", + "UPGRADE_DESCRIPTION": "Aplica 1 Débil y 1 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": "Inspiración", + "DESCRIPTION": "Retener. NL Entra en una Postura en la que no estás. NL Agota.", + "UPGRADE_DESCRIPTION": "Retener. NL Entra en una Postura en la que no estás." + }, + "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! 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! 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 Vulnerable. NL Aplica 2 Débil." + }, + "champ:ViciousMockery": { + "NAME": "Burlas Crueles", + "DESCRIPTION": "Gana !M! de Vigor. NL Aplica !DM! 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 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! 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! de daño adicional." + }, + "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 extracción. NL Agota.", + "UPGRADE_DESCRIPTION": "Elige una Postura para entrar. NL Busca un champ:Final en tu pila de extracción.", + "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 extracción." + } +} \ No newline at end of file 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 0000000000..67c4019d5d --- /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 0000000000..1fa1f1fe01 --- /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 0000000000..7dc7db2e83 --- /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 #b6 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 #b6 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 0000000000..9e26dfeeb6 --- /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 0000000000..31010fd14f --- /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 0000000000..27cabbe4f1 --- /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 0000000000..638d3bbfc4 --- /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": [ + "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 0000000000..c72df0f578 --- /dev/null +++ b/src/main/resources/champResources/localization/spa/RelicStrings.json @@ -0,0 +1,132 @@ +{ + "champ:ChampionCrown": { + "NAME": "Corona del Campeón", + "FLAVOR": "¡ERES EL GANADOR!", + "DESCRIPTIONS": [ + "Al comienzo del combate, elige entrar en una #yPostura en la que no estés." + ] + }, + "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 #b", + " 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 #b", + " de #yVigor [REMOVE_SPACE]." + ] + }, + "champ:ChampionCrownUpgraded": { + "NAME": "Corona Victoriosa", + "FLAVOR": "¡Felicidaciones! Eres el mejor ganador.", + "DESCRIPTIONS": [ + "Reemplaza ", + " [REMOVE_SPACE].[] NL La primera vez que juegues un #ychamp:Final, roba #b", + " cartas y entra en una #yPostura aleatoria." + ] + }, + "champ:DefensiveTrainingManual": { + "NAME": "Tesis Defensiva", + "FLAVOR": "Consejo profesional: no te dejes golpear.", + "DESCRIPTIONS": [ + "El #bBono de #yFinal de la #yPostura #bchamp:Defensivo otorga #b", + " 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 #b", + " [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.", + "La carta adjunta a esta reliquia a sido #rremovida de tu mazo, esta reliquia ya no funciona." + ] + }, + "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 0000000000..9c656b7c6c --- /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 0000000000..e271a157ce --- /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 ade4130af9..86531d52be 100644 --- a/src/main/resources/champResources/localization/zhs/CardStrings.json +++ b/src/main/resources/champResources/localization/zhs/CardStrings.json @@ -27,13 +27,9 @@ ] }, "champ:StanceDanceCrown": { - "NAME": "冠军金冠", - "DESCRIPTION": "选择进入一种 姿态 。 NL 获得其 champ:技术 奖励一次 。", - "UPGRADE_DESCRIPTION": "选择进入一种 姿态 。 NL 获得其 champ:技术 奖励两次 。", - "EXTENDED_DESCRIPTION": [ - " 进入 champ:战狂 。", - " 进入 champ:防守 。" - ] + "NAME": "临场反应", + "DESCRIPTION": "保留 。 NL 进入另一种 姿态 。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "保留 。 NL 进入另一种 姿态 。" }, "champ:SwordSigil": { "NAME": "胜利旌旗", @@ -133,9 +129,9 @@ }, "champ:ShieldThrow": { "NAME": "护盾猛掷", - "DESCRIPTION": "造成你当前 格挡 值点伤害两次。", + "DESCRIPTION": "造成你当前 格挡 值点伤害两次。 NL 若未处于 champ:防守 ,下回合无法从牌获得 格挡 。", "EXTENDED_DESCRIPTION": [ - "造成你当前 格挡 值(!D!)点伤害两次。" + "造成你当前 格挡 值(!D!)点伤害两次。 NL 若未处于 champ:防守 ,下回合无法从牌获得 格挡 。" ] }, "champ:FalseCounter": { @@ -196,7 +192,7 @@ }, "champ:SwordThrow": { "NAME": "剑刃猛掷", - "DESCRIPTION": "造成 !D! 点伤害 !M! 次。 NL 获得2层 虚弱 。 NL champ:战狂 champ:连段 : NL 不获得 虚弱 。" + "DESCRIPTION": "造成 !D! 点伤害 !M! 次。 NL 若未处于 champ:战狂 ,下回合无法打出攻击。" }, "champ:MurderStrike": { "NAME": "刽子打击", @@ -212,7 +208,7 @@ }, "champ:RisingSlash": { "NAME": "狂烈打击", - "DESCRIPTION": "造成 !D! 点伤害。 NL 若打出的上张牌为 champ:终结技 ,再造成一次。" + "DESCRIPTION": "保留 。 NL 造成 !D! 点伤害。 NL 若打出的上张牌为 champ:终结技 ,再造成一次。" }, "champ:Shatter": { "NAME": "粉碎", @@ -291,7 +287,7 @@ }, "champ:Improvising": { "NAME": "触类旁通", - "DESCRIPTION": "回合开始时若未处于 姿态 ,随机进入 champ:战狂 或 champ:防守 。 NL 每次进入 姿态 时,获得其 champ:技术 奖励 !M! 次 。" + "DESCRIPTION": "进入 姿态 时,获得其 champ:技术 奖励 !M! 次 。" }, "champ:CalledShot": { "NAME": "畅饮", @@ -344,7 +340,7 @@ }, "champ:Endure": { "NAME": "忍耐", - "DESCRIPTION": "进入 champ:防守 。 NL 获得 !B! 点 格挡 。 NL 格挡 值受 力量 加成而非 敏捷 。", + "DESCRIPTION": "进入 champ:防守 。 NL 获得 !B! 点 格挡 。 NL 格挡 值仅受 力量 加成。", "UPGRADE_DESCRIPTION": "进入 champ:防守 。 NL 获得 !B! 点 格挡 。 NL 格挡 值还受 力量 加成。" }, "champ:PreemptiveStrike": { diff --git a/src/main/resources/champResources/localization/zhs/KeywordStrings.json b/src/main/resources/champResources/localization/zhs/KeywordStrings.json index 0f0057d257..fc4e0da863 100644 --- a/src/main/resources/champResources/localization/zhs/KeywordStrings.json +++ b/src/main/resources/champResources/localization/zhs/KeywordStrings.json @@ -39,7 +39,7 @@ "champ:[fist_icon]", "终结技" ], - "DESCRIPTION": "处于姿态时才能打出。 NL 打出 #y终结技 后,退出当前 #y姿态 并触发其 #y终结技 效果 。 NL #r战狂 #y终结技 -获得 #b1 点 #y力量 。 NL #b防守 #y终结技-获得 #b8 点 #y格挡 。" + "DESCRIPTION": "处于姿态时才能打出。 NL 打出 #y终结技 后,退出当前 #y姿态 并触发其 #y终结技 效果 。 NL #r战狂 #y终结技 -获得 #b1 点 #y力量 。 NL #b防守 #y终结技-获得 #b6 点 #y格挡 。" }, { "PROPER_NAME": "反击", @@ -56,7 +56,7 @@ "defensive.", "防守" ], - "DESCRIPTION": "#y姿态 : NL #y技术 -获得 #b3 层 #y反击 。 NL #y终结技 -获得 #b8 点 #y格挡 。" + "DESCRIPTION": "#y姿态 : NL #y技术 -获得 #b3 层 #y反击 。 NL #y终结技 -获得 #b6 点 #y格挡 。" }, { "PROPER_NAME": "战狂", diff --git a/src/main/resources/champResources/localization/zhs/PowerStrings.json b/src/main/resources/champResources/localization/zhs/PowerStrings.json index 9d5b687c4c..5ebaad3f65 100644 --- a/src/main/resources/champResources/localization/zhs/PowerStrings.json +++ b/src/main/resources/champResources/localization/zhs/PowerStrings.json @@ -32,7 +32,7 @@ "champ:ImprovisingPower": { "NAME": "触类旁通", "DESCRIPTIONS": [ - "你的回合开始时,若未处于 #y姿态 ,随机进入 #y战狂 或 #y防守 。 每当你进入 #y姿态 时,获得其 champ:技术 奖励 #b", + "每当你进入 #y姿态 时,获得其 champ:技术 奖励 #b", " 次 。" ] }, @@ -134,9 +134,9 @@ "champ:NoBlockNextTurnPower": { "NAME": "爆甲", "DESCRIPTIONS": [ - "你下回合不能获得格挡。", + "你下回合不能从卡牌获得格挡。", "你下 #b", - " 个回合不能获得格挡。" + " 个回合不能从卡牌获得格挡。" ] }, "champ:UltimateStancePower": { diff --git a/src/main/resources/champResources/localization/zhs/RelicStrings.json b/src/main/resources/champResources/localization/zhs/RelicStrings.json index ad07b34ccc..840e89d586 100644 --- a/src/main/resources/champResources/localization/zhs/RelicStrings.json +++ b/src/main/resources/champResources/localization/zhs/RelicStrings.json @@ -3,7 +3,7 @@ "NAME": "冠军金冠", "FLAVOR": "你是冠军!", "DESCRIPTIONS": [ - "战斗开始时,选择进入 #r战狂 或 #b防守 。" + "每场战斗可进入当前另一种 #y姿态 一次。" ] }, "champ:BlackKnightHelmet": { @@ -17,14 +17,16 @@ "NAME": "杠铃", "FLAVOR": "1000 下?切,我还能做 1001 下。", "DESCRIPTIONS": [ - "进入 #y休息处 时,若至少有 #b10 张未 #y升级 的牌,随机 #y升级 其中 #b1 张。" + "进入 #y休息处 时,若至少有 #b", + " 张未 #y升级 的牌,随机 #y升级 其中 #b1 张。" ] }, "champ:BerserkersGuideToSlaughter": { "NAME": "战狂指南", "FLAVOR": "文字难以辨认。", "DESCRIPTIONS": [ - "回合开始时,获得 #b3 层 #y活力 。" + "回合开始时,获得 #b", + " 层 #y活力 。" ] }, "champ:ChampionCrownUpgraded": { @@ -32,7 +34,8 @@ "FLAVOR": "恭喜!!你是最大的赢家。", "DESCRIPTIONS": [ "替换 ", - " 。 NL 战斗开始时,进入 #ychamp:终极 并持续 #b3 回合 。" + " 。 NL 战斗开始时,进入 #ychamp:终极 并持续 #b", + " 回合 。" ] }, "champ:RageAmulet": { @@ -47,7 +50,8 @@ "NAME": "防御训练手册", "FLAVOR": "专业提示:不要被打到。", "DESCRIPTIONS": [ - " #bchamp:防守 的 #ychamp:终结技 奖励额外提供 #b3 点 #y格挡 。" + " #bchamp:防守 的 #ychamp:终结技 奖励额外提供 #b", + " 点 #y格挡 。" ] }, "champ:DeflectingBracers": { @@ -82,7 +86,8 @@ "NAME": "力量铠甲", "FLAVOR": "买来的。", "DESCRIPTIONS": [ - "回合开始时,获得 [E] 。 NL 最大 #y活力 与 #ychamp:反击 层数被限为 #b10 。" + "回合开始时,获得 [E] 。 NL 最大 #y活力 与 #ychamp:反击 层数被限为 #b", + " 。" ] }, "champ:SignatureFinisher": { @@ -91,7 +96,8 @@ "DESCRIPTIONS": [ "拾起时,选择 #b1 张 #ychamp:终结技 ,其耗能变为 #b0 ,能在未处于 #y姿态 时打出且不会退出 #y姿态 。", "选择一张终结技 ", - " 的耗能为 #b0 ,能在不处于姿态时打出且不会退出姿态。" + " 的耗能为 #b0 ,能在不处于姿态时打出且不会退出姿态。", + "相关牌已被 #r移出 牌组,本遗物不再生效。" ] }, "champ:SpectersHand": { diff --git a/src/main/resources/champResources/localization/zht/KeywordStrings.json b/src/main/resources/champResources/localization/zht/KeywordStrings.json index 932342f5aa..f540d5c427 100644 --- a/src/main/resources/champResources/localization/zht/KeywordStrings.json +++ b/src/main/resources/champResources/localization/zht/KeywordStrings.json @@ -40,7 +40,7 @@ "防守", "defensive" ], - "DESCRIPTION": "#y姿態 : NL #y技術 -獲得 #b3 層 #y反擊 。 NL #y終結技 -獲得 #b8 點 #y格擋 。" + "DESCRIPTION": "#y姿態 : NL #y技術 -獲得 #b3 層 #y反擊 。 NL #y終結技 -獲得 #b6 點 #y格擋 。" }, { "PROPER_NAME": "戰狂", diff --git a/src/main/resources/champResources/localization/zht/RelicStrings.json b/src/main/resources/champResources/localization/zht/RelicStrings.json index 46a0f0cb18..fdab1b7812 100644 --- a/src/main/resources/champResources/localization/zht/RelicStrings.json +++ b/src/main/resources/champResources/localization/zht/RelicStrings.json @@ -17,28 +17,32 @@ "NAME": "杠鈴", "FLAVOR": "1000 下?切,我還能做 1001 下。", "DESCRIPTIONS": [ - "進入 #y休息處 時,若至少有 #b10 張未 #y升級 的牌,隨機 #y升級 其中 #b1 張。" + "進入 #y休息處 時,若至少有 #b", + " 張未 #y升級 的牌,隨機 #y升級 其中 #b1 張。" ] }, "champ:BerserkersGuideToSlaughter": { "NAME": "戰狂指南", "FLAVOR": "文字難以辨認。", "DESCRIPTIONS": [ - "每回合開始時獲得 #b3 點 #y活力 。" + "每回合開始時獲得 #b", + " 點 #y活力 。" ] }, "champ:ChampionCrownUpgraded": { "NAME": "終極王冠", "FLAVOR": "恭喜!!你是最大的贏家。", "DESCRIPTIONS": [ - "替換 #r冠軍金冠 。 NL 每場戰鬥開始時,進入 #ychamp:終極 並持續 #b1 回合 。" + "替換 #r冠軍金冠 。 NL 每場戰鬥開始時,進入 #ychamp:終極 並持續 #b", + " 回合 。" ] }, "champ:DefensiveTrainingManual": { "NAME": "防禦訓練手冊", "FLAVOR": "專業提示:不要被打到。", "DESCRIPTIONS": [ - " #ychamp:防守 的 #ychamp:終結技 獎勵額外獲得 #b5 點 #y格擋 。" + " #ychamp:防守 的 #ychamp:終結技 獎勵額外獲得 #b", + " 點 #y格擋 。" ] }, "champ:DeflectingBracers": { diff --git a/src/main/resources/collectorResources/images/cards/Sapped.png b/src/main/resources/collectorResources/images/cards/Sapped.png deleted file mode 100644 index 2011ede42b..0000000000 Binary files a/src/main/resources/collectorResources/images/cards/Sapped.png and /dev/null differ diff --git a/src/main/resources/collectorResources/images/cards/Sapped_p.png b/src/main/resources/collectorResources/images/cards/Sapped_p.png deleted file mode 100644 index 871497c4a2..0000000000 Binary files a/src/main/resources/collectorResources/images/cards/Sapped_p.png and /dev/null differ diff --git a/src/main/resources/collectorResources/localization/deu/CardStrings.json b/src/main/resources/collectorResources/localization/deu/CardStrings.json new file mode 100644 index 0000000000..5db36b4d73 --- /dev/null +++ b/src/main/resources/collectorResources/localization/deu/CardStrings.json @@ -0,0 +1,700 @@ +{ + "collector:ActOfAggression": { + "NAME": "Aggression", + "DESCRIPTION": "Erhalte !B! Block. NL Wende !M! Verwundbar auf ALLE Gegner an." + }, + "collector:AlwaysMore": { + "NAME": "Immer mehr", + "DESCRIPTION": "collector:Opfergabe. NL Erhalte !M! Gold." + }, + "collector:AshenStrike": { + "NAME": "Äschernder Schlag", + "DESCRIPTION": "Füge !D! Schaden zu. NL Erhalte eine *Glut." + }, + "collector:Arrogance": { + "NAME": "Arroganz", + "DESCRIPTION": "Erhalte !B! Block. NL Dein nächster Angriff in diesem Zug wendet zusätzlich !M! collector:Verdammnis an." + }, + "collector:AshesAndDust": { + "NAME": "Schutt und Asche", + "DESCRIPTION": "Füge ALLEN Gegnern X Mal !D! Schaden zu. NL Trifft 2 zusätzliche Male, wenn X mindestens 5 ist." + }, + "collector:BindingCall": { + "NAME": "Gebundener Ruf", + "DESCRIPTION": "Erhalte NL !M! expansioncontent:temporäre_TP. NL collector:Fackelkopf: \"Wende !clm2! collector:Verdammnis auf einen zufälligen Gegner an.\"" + }, + "collector:Billow": { + "NAME": "Aufblähen", + "DESCRIPTION": "Erhalte !B! Block. NL Nimm im nächsten Zug *Aufbrüllen auf die Hand." + }, + "collector:Bellow": { + "NAME": "Aufbrüllen", + "DESCRIPTION": "Flüchtig. NL Wende collector:Verdammnis in Höhe des im letzten Zug ungenutzen Block an. Erschöpft.", + "EXTENDED_DESCRIPTION": [ + " NL (!M! collector:Verdammnis.)" + ] + }, + "collector:BlackBindings": { + "NAME": "Dunkle Bandagen", + "DESCRIPTION": "Wende !M! Schwach an. Wende danach für jeden Debuff des Gegners !clm2! collector:Verdammnis an." + }, + "collector:Blightning": { + "NAME": "Fäulnisblitz", + "DESCRIPTION": "Füge !D! Schaden zu. Wende !M! collector:Verdammnis an. Ziehe eine Karte vom Sammlungsstapel. NL Erschöpft." + }, + "collector:Bonfire": { + "NAME": "Freudenfeuer", + "DESCRIPTION": "collector:Opfergabe. NL Erhalte !B! Block. NL Erhalte im nächsten Zug 1 collector:Reserve." + }, + "collector:BrainDrain": { + "NAME": "Braindrain", + "DESCRIPTION": "Der Gegner verliert !M! TP. Nimm sein *Sammlerstück auf die Hand. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Der Gegner verliert !M! TP. Nimm sein verbessertes *Sammlerstück auf die Hand. NL Erschöpft." + }, + "collector:BramblesparKindling": { + "NAME": "Dorniger Anzünder", + "DESCRIPTION": "Unspielbar. NL Wenn diese Karte *erschöpft, erhalte einen *Brennenden *Schlag.", + "UPGRADE_DESCRIPTION": "Unspielbar. NL Wenn diese Karte *erschöpft, erhalte einen *Brennenden *Schlag+.", + "EXTENDED_DESCRIPTION": [ + "Ich muss das zum Gebrauch anzünden." + ] + }, + "collector:BurningStrike": { + "NAME": "Brennender Schlag", + "DESCRIPTION": "Füge !D! Schaden zu. NL Ziehe eine Karte.", + "UPGRADE_DESCRIPTION": "Füge !D! Schaden zu. NL Ziehe !M! Karten." + }, + "collector:CantTouchThis": { + "NAME": "Unberührbar", + "DESCRIPTION": "Erhalte !M! Geschicklichkeit. NL Wende immer !clm2! collector:Verdammnis auf Angreifer, deren Angriffe du blockst, an." + }, + "collector:CoffinNail": { + "NAME": "Sargnagel", + "DESCRIPTION": "Füge !D! Schaden zu. NL Wenn diese Karte *erschöpft, erhalte zu Beginn des nächsten Zuges eine Kopie mit !M! mehr Schaden." + }, + "collector:Condemn": { + "NAME": "Verdammen", + "DESCRIPTION": "Wende !M! Verwundbar und !clm2! collector:Verdammnis an." + }, + "collector:CursedWail": { + "NAME": "Verhextes Heulen", + "DESCRIPTION": "ALLE Gegner verlieren in diesem Zug !M! Stärke. NL collector:Geplagte Gegner verlieren zusätzlich dauerhaft !clm2! Stärke. NL Erschöpft." + }, + "collector:DarkApotheosis": { + "NAME": "Dunkle Apotheose", + "DESCRIPTION": "Verbessere alle Karten im Sammlungsstapel für den Rest des Kampfes. NL Erschöpft." + }, + "collector:DarkLordForm": { + "NAME": "Schattenlord Form", + "DESCRIPTION": "Spiele zu Beginn deines Zuges *Du *gehörst *mir! auf einen zufälligen Gegner.", + "UPGRADE_DESCRIPTION": "Spiele zu Beginn deines Zuges *Du *gehörst *mir!+ auf einen zufälligen Gegner." + }, + "collector:Darkstorm": { + "NAME": "Finsterer Sturm", + "DESCRIPTION": "Erhalte einen *Fäulnisblitz. NL bronze:Setze !M! zusätzliche *Fäulnisblitze *ein. NL Erschöpft." + }, + "collector:DarkwoodKindling": { + "NAME": "Finsterer Anzünder", + "DESCRIPTION": "Unspielbar. NL Wenn diese Karte *erschöpft, erhalte im nächsten Zug !M! collector:Reserve.", + "UPGRADE_DESCRIPTION": "Unspielbar. NL Behalten. NL Wenn diese Karte *erschöpft, erhalte im nächsten Zug !M! collector:Reserve.", + "EXTENDED_DESCRIPTION": [ + "Ich muss das zum Gebrauch anzünden." + ] + }, + "collector:Defend": { + "NAME": "Vertedigen", + "DESCRIPTION": "Erhalte !B! Block." + }, + "collector:DoubleTrouble": { + "NAME": "Doppelt gemoppelt", + "DESCRIPTION": "Erhalte !B! Block. NL In diesem Zug spielst du dein nächstes *Sammlerstück zweimal aus." + }, + "collector:DoMayhem": { + "NAME": "Wahnsinnstat", + "DESCRIPTION": "Wenn ein Gegner zu Beginn deines Zuges mindestens 25 collector:Verdammnis hat, dann spiele die oberste Karte des Nachziehstapels." + }, + "collector:DragonsTrove": { + "NAME": "Drachenschatz", + "DESCRIPTION": "collector:Opfergabe. NL Ziehe 2 Karten vom Sammlungsstapel. NL Erhalte !M! collector:Reserve. NL Erschöpft." + }, + "collector:Ember": { + "NAME": "Glut", + "DESCRIPTION": "Behalten. NL Erschöpft. NL Wenn diese Karte *erschöpft, erhalte !M! Stärke.", + "EXTENDED_DESCRIPTION": [ + "Die Glut muss entzündet, und nicht ausgespielt werden." + ] + }, + "collector:Empower": { + "NAME": "Ermächtigen", + "DESCRIPTION": "Erhalte zu Beginn deiner nächsten !M! Züge X Stärke." + }, + "collector:Extricate": { + "NAME": "Seele trennen", + "DESCRIPTION": "Erschöpfe alle Handkarten außer Angriffe. NL Füge !D! Schaden zu." + }, + "collector:FeelMyPain": { + "NAME": "Fühle den Schmerz", + "DESCRIPTION": "Immer wenn du eine Karte *erschöpfst verliert ein zufälliger Gegner !M! TP." + }, + "collector:FiendFire": { + "NAME": "Teufelsfeuer", + "DESCRIPTION": "Erschöpfe deine Hand. Füge pro erschöpfter Karte !D! Schaden zu. NL Erschöpft." + }, + "collector:Finalize": { + "NAME": "Vollenden", + "DESCRIPTION": "Heile !clm2! TP wenn der Gegner stirbt. NL Wende !M! collector:Verdammnis an. NL Erschöpft." + }, + "collector:FingerOfDeath": { + "NAME": "Todesberührung", + "DESCRIPTION": "Für diese Karte kann nur collector:Reserve benutzt werden. NL Wende !M! collector:Verdammnis an.", + "UPGRADE_DESCRIPTION": "Für diese Karte kann nur collector:Reserve benutzt werden. NL Wende !M! collector:Verdammnis auf ALLE Gegner an." + }, + "collector:FlameLash": { + "NAME": "Flammenpeitsche", + "DESCRIPTION": "collector:Opfergabe. NL Füge !D! Schaden zu. Erhöhe den Schaden dieser Karte um den Schaden der *geopferten Karte.", + "UPGRADE_DESCRIPTION": "collector:Opfergabe. NL Füge !D! Schaden zu. Erhöhe den Schaden dieser Karte um den Schaden der *geopferten Karte plus !M! ." + }, + "collector:FleetingEmbers": { + "NAME": "Flüchtige Glut", + "DESCRIPTION": "collector:Opfergabe. NL Erhalte !B! Block. NL Erhalte !M! *Glut Karten." + }, + "collector:Forgery": { + "NAME": "Fälschen", + "DESCRIPTION": "Füge !D! Schaden zu. NL Wähle 1 von !M! zufälligen Karten aus dem Sammlungsstapel. Nimm eine Kopie auf die Hand.", + "EXTENDED_DESCRIPTION": [ + "und nimm eine Kopie auf die Hand." + ] + }, + "collector:FuelTheFire": { + "NAME": "Befeuern", + "DESCRIPTION": "collector:Opfergabe. NL Erhalte im nächsten Zug !M! collector:Reserve.", + "UPGRADE_DESCRIPTION": "collector:Opfergabe. NL Im nächsten Zug, erhalte !M! collector:Reserve und ziehe eine Karte." + }, + "collector:Goodbye": { + "NAME": "Lebewohl", + "DESCRIPTION": "Verdopple die collector:Verdammnis des Gegners. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Verdreifache die collector:Verdammnis des Gegners. NL Erschöpft." + }, + "collector:GourmandsGaze": { + "NAME": "Des Vielfraß Blick", + "DESCRIPTION": "Füge !D! Schaden zu. NL Erhalte !B! Block wenn du in diesem Zug ein *Sammlerstück gespielt hast." + }, + "collector:GreaterHurting": { + "NAME": "Starke Kränkung", + "DESCRIPTION": "Flüchtig. NL Füge !D! Schaden zu. NL Wenn diese Karte *erschöpft, erhalte die *Stärkste *Kränkung.", + "UPGRADE_DESCRIPTION": "Flüchtig. NL Füge !D! Schaden zu. NL Wenn diese Karte *erschöpft, erhalte die *Stärkste *Kränkung+." + }, + "collector:GreatestHurting": { + "NAME": "Stärkste Kränkung", + "DESCRIPTION": "Flüchtig. NL Füge !D! Schaden zu. NL Wenn diese Karte *erschöpft, erhalte eine *Glut." + }, + "collector:GreenpyreLocus": { + "NAME": "Geheimer Hort", + "DESCRIPTION": "Wähle 1 von 3 *Sammlerstücken und nimm es auf die Hand. Mische !M! weitere Kopien in den Sammlungsstapel.", + "EXTENDED_DESCRIPTION": [ + "Wähle eine Karte, die du auf die Hand nimmst." + ] + }, + "collector:Heatwave": { + "NAME": "Hitzewelle", + "DESCRIPTION": "Füge ALLEN Gegnern !D! Schaden zu. NL Erhalte eine *Glut." + }, + "collector:Hoard": { + "NAME": "Horten", + "DESCRIPTION": "collector:Opfergabe. NL Ziehe !M! Karten. NL Behalte sie in diesem Zug." + }, + "collector:HoardersStrike": { + "NAME": "Sammlerschlag", + "DESCRIPTION": "Füge !D! Schaden zu. NL Spiele die oberste Karte des Sammlungsstapels." + }, + "collector:Hurting": { + "NAME": "Kränkung", + "DESCRIPTION": "Flüchtig. NL Füge !D! Schaden zu. NL Wenn diese Karte *erschöpft, erhalte eine *Starke *Kränkung.", + "UPGRADE_DESCRIPTION": "Flüchtig. NL Füge !D! Schaden zu. NL Wenn diese Karte *erschöpft, erhalte eine *Starke *Kränkung+." + }, + "collector:IllTakeThat": { + "NAME": "Einsammeln", + "DESCRIPTION": "Stiehl bis zu !M! Block des Gegners. NL Füge danach !D! Schaden zu." + }, + "collector:InevitableDemise": { + "NAME": "Untergang", + "DESCRIPTION": "Füge !D! Schaden zu. NL Verhindere die nächste Entfernung der collector:Verdammnis dieses Gegners." + }, + "collector:InflictAgony": { + "NAME": "Quälen", + "DESCRIPTION": "Füge !D! Schaden zu. NL Wende 2 Schwach und Verwundbar an, falls der Gegner nicht collector:geplagt ist." + }, + "collector:Invigorate": { + "NAME": "Sabotage", + "DESCRIPTION": "collector:Opfergabe. NL Nimm *Straucheln oder *Blenden auf die Hand. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "collector:Opfergabe. NL Nimm *Straucheln+ oder *Blenden+ auf die Hand. NL Erschöpft.", + "EXTENDED_DESCRIPTION": [ + "Wähle eine Karte, die du auf die Hand nimmst." + ] + }, + "collector:IronbarkKindling": { + "NAME": "Eiserner Anzünder", + "DESCRIPTION": "Unspielbar. NL Wenn diese Karte *erschöpft, erhalte !B! Block.", + "UPGRADE_DESCRIPTION": "Unspielbar. Behalten. NL Wenn diese Karte *erschöpft, erhalte !B! Block.", + "EXTENDED_DESCRIPTION": [ + "Ich muss das zum Gebrauch anzünden." + ] + }, + "collector:ItMattersNot": { + "NAME": "Irrelevanz", + "DESCRIPTION": "Erhalte !B! Block. NL Erhöhe bestehendes Schwach und Verwundbar ALLER Gegner um !M!." + }, + "collector:JadedJabs": { + "NAME": "Abgebrühte Stiche", + "DESCRIPTION": "collector:Opfergabe. NL Füge !D! Schaden zu. NL Erhalte Messer in Anzahl der Höhe der Kosten der *geopferten Karte + !M!." + }, + "collector:Karma": { + "NAME": "Karma", + "DESCRIPTION": "Erhalte immer am Ende deines Zuges NL !M! Block. NL Erhalte zusätzlich !clm2! Block wenn ein Gegner collector:geplagt ist.", + "UPGRADE_DESCRIPTION": "Angeboren. NL Erhalte immer am Ende deines Zuges NL !M! Block. NL Erhalte zusätzlich !clm2! Block wenn ein Gegner collector:geplagt ist." + }, + "collector:LanternFlare": { + "NAME": "Todeslaterne", + "DESCRIPTION": "collector:Opfergabe. NL Wende !M! collector:Verdammnis an. Der Gegner erhält immer am Ende seines Zuges !clm2! collector:Verdammnis." + }, + "collector:LuckyWick": { + "NAME": "Glücksdocht", + "DESCRIPTION": "Erhalte !B! Block. NL Füge !D! Schaden zu." + }, + "collector:MastersCall": { + "NAME": "Meisterruf", + "DESCRIPTION": "Unused!" + }, + "collector:MiniCurse": { + "NAME": "Mini-Fluch", + "DESCRIPTION": "collector:Opfergabe. NL Wende 1 Schwach und 1 Verwundbar an.", + "UPGRADE_DESCRIPTION": "collector:Opfergabe. NL Wende 1 Schwach und 1 Verwundbar auf ALLE Gegner an." + }, + "collector:Misdirect": { + "NAME": "In die Irre führen", + "DESCRIPTION": "Erhalte !B! Block. NL Erhalte im nächsten Zug 1 collector:Reserve." + }, + "collector:MysteryWeaving": { + "NAME": "Magischer Faden", + "DESCRIPTION": "Erhalte !B! Block. NL Gibt für jede andere Handkarte 2 Block weniger." + }, + "collector:OakbrimKindling": { + "NAME": "Greller Anzünder", + "DESCRIPTION": "Unspielbar. NL Wenn diese Karte *erschöpft, ziehe !M! Karten.", + "EXTENDED_DESCRIPTION": [ + "Ich muss das zum Gebrauch anzünden." + ] + }, + "collector:Omen": { + "NAME": "Vorbote", + "DESCRIPTION": "Erhalte immer, wenn du ein *Sammlerstück spielst, 1 Stärke.", + "UPGRADE_DESCRIPTION": "Angeboren. NL Erhalte immer, wenn du ein *Sammlerstück spielst, 1 Stärke." + }, + "collector:ProtectingCall": { + "NAME": "Schützender Ruf", + "DESCRIPTION": "Erhalte NL !M! expansioncontent:temporäre_TP. NL collector:Fackelkopf: NL \"Erhalte !clm2! Block.\"" + }, + "collector:Pyromancy": { + "NAME": "Pyromanie", + "DESCRIPTION": "collector:Opfergabe. NL Erhalte zu Beginn deines Zuges 1 collector:Reserve.", + "UPGRADE_DESCRIPTION": "Angeboren. collector:Opfergabe. NL Erhalte zu Beginn deines Zuges 1 collector:Reserve." + }, + "collector:RagingCall": { + "NAME": "Wütender Ruf", + "DESCRIPTION": "Erhalte NL !M! expansioncontent:temporäre_TP. NL collector:Fackelkopf: \"Füge ALLEN Gegnern !clm2! Schaden zu.\"." + }, + "collector:ReceiveTribute": { + "NAME": "Tribut kassieren", + "DESCRIPTION": "collector:Opfergabe. NL Nimm 1 von !M! *Boss Karten auf die Hand. Sie erhält Behalten. NL Erschöpft.", + "EXTENDED_DESCRIPTION": [ + "Wähle eine Karte, die du auf die Hand nimmst." + ] + }, + "collector:Roast": { + "NAME": "Rösten", + "DESCRIPTION": "collector:Opfergabe. NL Füge !D! Schaden zu." + }, + "collector:RotwoodKindling": { + "NAME": "Morscher Anzünder", + "DESCRIPTION": "Unspielbar. NL Wenn diese Karte *erschöpft, wende !M! Verwundbar und !clm2! collector:Verdammnis auf ALLE Gegner an.", + "EXTENDED_DESCRIPTION": [ + "Ich muss das zum Gebrauch anzünden." + ] + }, + "collector:SapStrength": { + "NAME": "Mal des Todes", + "DESCRIPTION": "Füge !D! Schaden zu. NL Im nächsten Zug verliert der Gegner TP in Höhe des doppelten ungeblockten Schadens." + }, + "collector:ScorchingRay": { + "NAME": "Sengender Strahl", + "DESCRIPTION": "Füge X Mal einem zufälligen Gegner !D! Schaden zu." + }, + "collector:SeedOfDoubt": { + "NAME": "Saat des Zweifels", + "DESCRIPTION": "Wende !M! collector:Verdammnis an. Wenn diese Karte auf der Hand ist während eine Karte *erschöpft, erhöhe ihre *Verdammnis um !clm2!." + }, + "collector:ShadowDaggers": { + "NAME": "Schattendolche", + "DESCRIPTION": "Füge für jedes *Sammlerstück, das in diesem Kampf gespielt wurde, !D! Schaden zu. NL Erschöpft.", + "EXTENDED_DESCRIPTION": [ + " NL (Trifft ", + " mal.)", + " mal.)" + ] + }, + "collector:SomberShield": { + "NAME": "Düsterer Schild", + "DESCRIPTION": "collector:Opfergabe. NL Erhalte !B! Block. NL Erhalte im nächsten Zug eine Kopie der *geopferten Karte." + }, + "collector:SoulSnare": { + "NAME": "Seelenschlinge", + "DESCRIPTION": "Wende !M! collector:Verdammnis an. NL Erschöpft." + }, + "collector:Soulforge": { + "NAME": "Seelenschmiede", + "DESCRIPTION": "Ziehe eine Karte vom Sammlungsstapel. Nimm zusäzlich !M! verbesserte Kopie auf die Hand. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Ziehe eine Karte vom Sammlungsstapel. Nimm zusäzlich !M! verbesserte Kopien auf die Hand. NL Erschöpft." + }, + "collector:Spark": { + "NAME": "Funke", + "DESCRIPTION": "Erhalte 1 collector:Reserve. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Erhalte 1 collector:Reserve. NL Ziehe 1 Karte. NL Erschöpft." + }, + "collector:SpiritLeech": { + "NAME": "Geistesentzug", + "DESCRIPTION": "Füge !D! Schaden zu. NL Erhalte !B! Block wenn der Gegner collector:geplagt ist." + }, + "collector:StashAway": { + "NAME": "Vorräte anlegen", + "DESCRIPTION": "Erhalte X Mal !B! Block. NL Erhalte im nächsten Zug X collector:Reserve. NL Erschöpft." + }, + "collector:Strike": { + "NAME": "Schlag", + "DESCRIPTION": "Füge !D! Schaden zu." + }, + "collector:SuckerPunch": { + "NAME": "Unerwarteter Hieb", + "DESCRIPTION": "Füge !D! Schaden zu. NL Wende !M! Schwach an." + }, + "collector:Suffering": { + "NAME": "Leiden lassen", + "DESCRIPTION": "Wende immer, wenn du *Schwach oder *Verwundbar anwendest, zusätzlich !M! collector:Verdammnis an." + }, + "collector:SunbloomKindling": { + "NAME": "Starker Anzünder", + "DESCRIPTION": "Unspielbar. NL Wenn diese Karte *erschöpft, erhalte !M! Stärke und 2 *Glut Karten.", + "EXTENDED_DESCRIPTION": [ + "Ich muss das zum Gebrauch anzünden." + ] + }, + "collector:ThornWhip": { + "NAME": "Dornenpeitsche", + "DESCRIPTION": "Füge ALLEN Gegnern !D! Schaden zu und wende !M! hermit:Prügel auf sie an. Erhalte ein Messer." + }, + "collector:Torchbearer": { + "NAME": "Fackelträger", + "DESCRIPTION": "Erhalte !M! expansioncontent:temporäre_TP. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Erschöpft wenn du expansioncontent:temporäre_TP hast. NL Erhalte !M! expansioncontent:temporäre_TP." + }, + "collector:WhirlingFlame": { + "NAME": "Wirbelflamme", + "DESCRIPTION": "Füge ALLEN Gegnern !D! Schaden zu. NL Lege eine Karte aus dem Abwurfstapel auf den Nachziehstapel." + }, + "collector:VoidArmor": { + "NAME": "Leere Hülle", + "DESCRIPTION": "ALLE erhalten !B! Block und 1 bronze:Verschwimmen." + }, + "collector:Wildfire": { + "NAME": "Waldbrand", + "DESCRIPTION": "Füge für jeden Debuff des Gegners !D! Schaden zu." + }, + "collector:YouAreMine": { + "NAME": "Du gehörst mir!", + "DESCRIPTION": "Wende !M! Schwach, !M! Verwundbar und !clm2! collector:Verdammnis an." + }, + "collector:Whomp": { + "NAME": "Schröpfen", + "DESCRIPTION": "Füge !D! Schaden zu. NL Erhalte !M! expansioncontent:temporäre_TP. NL Erschöpft." + }, + "collector:AcidSlimeCard": { + "NAME": "Säureschleim", + "DESCRIPTION": "Erhalte !M! zufällige Karte, die 0 Kostet.", + "UPGRADE_DESCRIPTION": "Erhalte !M! zufällige Karten, die 0 Kosten." + }, + "collector:AugmenterCard": { + "NAME": "Erweiterer", + "DESCRIPTION": "Verliere 3 TP. NL Erhalte !M! Stärke." + }, + "collector:BearCard": { + "NAME": "Bär", + "DESCRIPTION": "Erhalte !B! Block. NL Entferne allen Block des Gegners. NL Füge !D! Schaden zu." + }, + "collector:BlueSlaverCard": { + "NAME": "Sklavenhändler B", + "DESCRIPTION": "Füge !D! Schaden zu. NL Wende 1 Schwach an. Verdopple dann das Schwach des Gegners." + }, + "collector:BonfireSpiritsCard": { + "NAME": "Lagerfeuergeister", + "DESCRIPTION": "collector:Opfergabe. NL Heile !M! TP. Erhöhe deine max. TP um 1, falls die *geopferte Karte *selten war." + }, + "collector:BookOfStabbingCard": { + "NAME": "Buch des Stechens", + "DESCRIPTION": "Wende immer, wenn du ungeblockten Angriffsschaden zufügst, !M! collector:Verdammnis an." + }, + "collector:BronzeOrbCard": { + "NAME": "Bronzeorb", + "DESCRIPTION": "Erhalte !B! Block. NL Füge !D! Schaden zu. NL Die oberste Karte des Nachziehstapels kostet 0 bis du sie spielst." + }, + "collector:ByrdCard": { + "NAME": "Fogl", + "DESCRIPTION": "Füge 5 Mal !D! Schaden zu." + }, + "collector:CenturionCard": { + "NAME": "Zenturio", + "DESCRIPTION": "Erhalte !B! Block. NL Erhalte !M! Geschicklichkeit." + }, + "collector:ChosenCard": { + "NAME": "Auserwählte", + "DESCRIPTION": "Wende !M! Schwach an. NL Wende zusätzlich !clm2! Verwundbar an, wenn der Gegner nicht angreifen will." + }, + "collector:ClericCard": { + "NAME": "Priester", + "DESCRIPTION": "collector:Opfergabe. NL Erhalte !M! expansioncontent:temporäre_TP." + }, + "collector:CultistCard": { + "NAME": "Kultist", + "DESCRIPTION": "collector:Opfergabe. NL Erhalte zu Beginn deiner nächsten 3 Züge 1 Stärke." + }, + "collector:DaggerCard": { + "NAME": "Dolch", + "DESCRIPTION": "Verliere !M! TP. NL Füge !D! Schaden zu." + }, + "collector:DarklingsCard": { + "NAME": "Dunkeling", + "DESCRIPTION": "collector:Opfergabe. NL Füge !D! Schaden zu. expansioncontent:Exhumiere ein *Sammlerstück.", + "EXTENDED_DESCRIPTION": [ + "um2 Kopien zu erstellen." + ] + }, + "collector:DesignerInSpireCard": { + "NAME": "Designer In-Spire", + "DESCRIPTION": "Erhalte NL !M! expansioncontent:temporäre_TP. NL collector:Fackelkopf: NL \"Ziehe 1 Karte.\"" + }, + "collector:FinalBossCard": { + "NAME": "Finale", + "DESCRIPTION": "Entferne den *Unverwundbar Buff des Gegners und hermit:betäube ihn. NL Erschöpft." + }, + "collector:FaceTraderCard": { + "NAME": "Gesichtshändler", + "DESCRIPTION": "Erhalte !M! zufällige Karten von allen möglichen Farben. NL Sie sind Flüchtig." + }, + "collector:FatGremlinCard": { + "NAME": "Fetter Gremlin", + "DESCRIPTION": "Füge !D! Schaden zu. NL Wende !M! Schwach an." + }, + "collector:FungiBeastCard": { + "NAME": "Pilzbestie", + "DESCRIPTION": "Wende !M! Verwundbar an. Wende zusätzlich 1 Verwundbar auf ALLE Gegner an." + }, + "collector:GiantHeadCardStageOne": { + "NAME": "Tick", + "DESCRIPTION": "Erhalte *Tock im nächsten Zug." + }, + "collector:GiantHeadCardStageTwo": { + "NAME": "Tock", + "DESCRIPTION": "Erhalte eine *Riesenkopfnuss im nächsten Zug." + }, + "collector:GiantHeadCardStageThree": { + "NAME": "Riesenkopfnuss", + "DESCRIPTION": "Füge ALLEN Gegnern !D! Schaden zu." + }, + "collector:GremlinLeaderCard": { + "NAME": "Gremlinanführer", + "DESCRIPTION": "Nimm !M! zufällige Gremlin *Sammlerstücke auf die Hand." + }, + "collector:GremlinNobCard": { + "NAME": "Gremlin-Aristo", + "DESCRIPTION": "Erhalte immer, wenn du eine Fertigkeit spielst, !M! *Elan." + }, + "collector:GremlinWizardCard": { + "NAME": "Gremlinzauberer", + "DESCRIPTION": "Erhalte im nächsten Zug !M! *Elan und 1 collector:Reserve." + }, + "collector:JawWormCard": { + "NAME": "Kieferwurm", + "DESCRIPTION": "Erhalte !B! Block. NL Erhalte !M! Stärke." + }, + "collector:JousterCard": { + "NAME": "Ritter", + "DESCRIPTION": "Füge !D! Schaden zu. NL Erhalte !B! Block, falls es der einzige Gegner ist." + }, + "collector:LagavulinCard": { + "NAME": "Lagavulin", + "DESCRIPTION": "ALLE Gegner verlieren !M! Stärke." + }, + "collector:LivingWallCard": { + "NAME": "Lebendige Wand", + "DESCRIPTION": "collector:Opfergabe. NL Erhalte eine zufällige verbesserte Karte. NL Sie kostet 0 bis du sie spielst." + }, + "collector:LouseCard": { + "NAME": "Laus", + "DESCRIPTION": "Erhalte 1 bronze:Verschwimmen. NL Erhalte das nächste Mal, wenn du ungeblockten Angriffsschaden erleidest, !B! Block." + }, + "collector:MadGremlinCard": { + "NAME": "Wütender Gremlin", + "DESCRIPTION": "Erhalte !M! temporäre Stärke." + }, + "collector:MawCard": { + "NAME": "Der Schlund", + "DESCRIPTION": "Füge !D! Schaden zu." + }, + "collector:MerchantCard": { + "NAME": "Händler", + "DESCRIPTION": "Erhalte !M! zufällige farblose Karten. NL Sie kosten in diesem Zug 0." + }, + "collector:MushroomCard": { + "NAME": "Pilze", + "DESCRIPTION": "Füge !D! Schaden zu. NL Wende per Zufall entweder !M! Schwach oder !M! Verwundbar an." + }, + "collector:MysticCard": { + "NAME": "Mystikerin", + "DESCRIPTION": "Erhalte !M! expansioncontent:temporäre_TP." + }, + "collector:NemesisCard": { + "NAME": "Nemesis", + "DESCRIPTION": "Erhalte 1 Immateriell." + }, + "collector:NlothCard": { + "NAME": "N'Loth", + "DESCRIPTION": "collector:Opfergabe. NL Erhalte eine zufällige seltene Karte. NL Sie kostet 1 weniger.", + "UPGRADE_DESCRIPTION": "collector:Opfergabe. NL Erhalte eine zufällige seltene Karte. NL Sie kostet 0." + }, + "collector:OrbWalkerCard": { + "NAME": "Kugelwandler", + "DESCRIPTION": "Füge !D! Schaden zu. NL Erhalte !M! *Glut Karten." + }, + "collector:PointyCard": { + "NAME": "Pointy", + "DESCRIPTION": "Füge 2 Mal !D! Schaden zu. NL Ziehe eine Karte." + }, + "collector:RanwidCard": { + "NAME": "Ranwid", + "DESCRIPTION": "Erhalte am Ende des Kampfes zusätzlich eine Kartenbelohnung und einen Trank." + }, + "collector:RedSlaverCard": { + "NAME": "Sklavenhändler R", + "DESCRIPTION": "Der Gegner verliert in diesem Zug !M! Stärke." + }, + "collector:ReptomancerCard": { + "NAME": "Reptilomantin", + "DESCRIPTION": "Erhalte NL !M! expansioncontent:temporäre_TP. NL collector:Fackelkopf: \"Wende !clm2! Gift auf einen zufälligen Gegner an.\"" + }, + "collector:RepulsorCard": { + "NAME": "Repulsor", + "DESCRIPTION": "collector:Opfergabe. NL Ziehe !M! Karten." + }, + "collector:RomeoCard": { + "NAME": "Romeo", + "DESCRIPTION": "Dein nächster Angriff kostet 0 und fügt !M! zusätzlichen Schaden zu." + }, + "collector:ScrapOozeCard": { + "NAME": "Schrottschlamm", + "DESCRIPTION": "collector:Opfergabe. NL Verliere 3 TP. NL Erhalte !M! zufällige Angriffe. Sie kosten diesen NL Zug 0." + }, + "collector:SentryCard": { + "NAME": "Wache", + "DESCRIPTION": "Füge !D! Schaden zu. NL Wende !M! Schwach an. NL Wiederhole das, wenn eine *Wache im Erschöpfungsstapel ist." + }, + "collector:ShelledParasiteCard": { + "NAME": "Panzerparasit", + "DESCRIPTION": "Erhalte !M! expansioncontent:Panzerrüstung." + }, + "collector:ShieldGremlinCard": { + "NAME": "Schildgremlin", + "DESCRIPTION": "Erhalte !B! Block." + }, + "collector:SnakePlantCard": { + "NAME": "Schlangenpflanze", + "DESCRIPTION": "Füge 3 Mal !D! Schaden zu." + }, + "collector:SneakyGremlinCard": { + "NAME": "Schleich-Gremlin", + "DESCRIPTION": "Füge !D! Schaden zu. NL Ziehe eine Karte." + }, + "collector:SneckoCard": { + "NAME": "Snecko", + "DESCRIPTION": "Ziehe !M! Karten. NL sneckomod:Irre alle Handkarten." + }, + "collector:SphericGuardianCard": { + "NAME": "Sphären-Wächter", + "DESCRIPTION": "Erhalte !M! expansioncontent:Verschwimmen." + }, + "collector:SpikerCard": { + "NAME": "Stachler", + "DESCRIPTION": "Erhalte !M! Stacheln." + }, + "collector:SpikeSlimeCard": { + "NAME": "Stachelschleim", + "DESCRIPTION": "Erhalte !B! Block. NL Immer wenn dich in diesem Zug ein Gegner angreift, füge ihm NL !M! Schaden zu." + }, + "collector:SpireGrowthCard": { + "NAME": "Spire-Wuchs", + "DESCRIPTION": "Der Gegner erleidet am Ende seiner Züge !M! Schaden." + }, + "collector:SpireShieldCard": { + "NAME": "Spire-Schild", + "DESCRIPTION": "Erhalte !M! Geschicklichkeit." + }, + "collector:SpireSpearCard": { + "NAME": "Spire-Speer", + "DESCRIPTION": "Erhalte !M! Stärke." + }, + "collector:SsserpentCard": { + "NAME": "Ssssslange", + "DESCRIPTION": "Füge !D! Schaden zu. NL Nimm *Zweifel auf die Hand." + }, + "collector:TaskmasterCard": { + "NAME": "Zuchtmeister", + "DESCRIPTION": "Füge !D! Schaden zu. NL Wende !clm2! collector:Verdammnis an. NL Erhalte !M! Stärke." + }, + "collector:ThievesCard": { + "NAME": "Räuber", + "DESCRIPTION": "Erleide !M! weniger Angriffsschaden in diesem Zug." + }, + "collector:TorchHeadCard": { + "NAME": "Fackelkopf", + "DESCRIPTION": "Erhalte einen zufälligen Fackelkopf-Ruf. NL Er kostet diesen Zug 0." + }, + "collector:TransientCard": { + "NAME": "Schwundling", + "DESCRIPTION": "Erhalte !M! Stärke. NL Stirb nach 6 Zügen." + }, + "collector:VagrantCard": { + "NAME": "Landstreicher", + "DESCRIPTION": "Erhalte !M! collector:Reserve. NL Nimm *Scham auf die Hand." + }, + "collector:WomanInBlueCard": { + "NAME": "Frau in Blau", + "DESCRIPTION": "Erhalte einen zufälligen Trank. NL Verliere am Ende des Kampfes alle Tränke." + }, + "collector:WrithingMassCard": { + "NAME": "Knäuelmasse", + "DESCRIPTION": "Spähe !M!. NL Spiele die oberste Karte des Nachziehstapels." + }, + "collector:DefaultCollectibleCard": { + "NAME": "Seelenlose Hülle", + "DESCRIPTION": "Dieser Gegner hat noch kein eigenes *Sammlerstück! NL Erhalte !M! Stärke und NL !M! Geschicklichkeit." + }, + "collector:ShootingStar": { + "NAME": "Sternschnuppe", + "DESCRIPTION": "Wenn du das erste Mal im Zug einen Angriff collector:opferst, erhalte eine Kopie des Angriffs. Sie kostet 0 bis du sie spielst." + }, + "collector:CollectorCard": { + "NAME": "Ouroboros", + "DESCRIPTION": "collector:Opfergabe. NL Wende !M! Schwach und !M! Verwundbar an. NL Erhalte !clm2! expansioncontent:temporäre_TP." + }, + "collector:Sapped": { + "NAME": "Ausgelaugt", + "DESCRIPTION": "collector:Opfergabe. NL Wenn diese Karte gezogen wird, verliere [E]. NL Erschöpft. NL Kann nicht aus dem Deck entfernt werden." + } +} \ No newline at end of file diff --git a/src/main/resources/collectorResources/localization/deu/CharacterStrings.json b/src/main/resources/collectorResources/localization/deu/CharacterStrings.json new file mode 100644 index 0000000000..665d4b8aa9 --- /dev/null +++ b/src/main/resources/collectorResources/localization/deu/CharacterStrings.json @@ -0,0 +1,13 @@ +{ + "collector:theCollector": { + "NAMES": [ + "Die Sammlerin", + "die Sammlerin" + ], + "TEXT": [ + "Die berühmt-berüchtigte Hexerin der Stadt. NL Sammelt neben Plunder auch Seelen.", + "NL Die grüne Flamme deines Stabes glimmert...", + "Auf einer unbeleuchteten Straße triffst du auf ein paar vermummte Gestalten, die gerade mitten in irgendeinem dunklen Ritual sind. Als du näher kommst, wenden sie sich dir in gespenstischem Gleichklang zu. Der Größte von ihnen entblößt Fangzähne und streckt eine lange, blasse Hand nach dir aus. NL ~„Schließ~ ~dich~ ~uns~ ~an,~ ~oh~ ~Schreckliche,~ ~und~ ~spüre~ ~die~ ~Wärme~ ~des~ ~Spire.“~" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/collectorResources/localization/deu/EventStrings.json b/src/main/resources/collectorResources/localization/deu/EventStrings.json new file mode 100644 index 0000000000..0e0dcd235c --- /dev/null +++ b/src/main/resources/collectorResources/localization/deu/EventStrings.json @@ -0,0 +1,3 @@ +{ + +} \ No newline at end of file diff --git a/src/main/resources/collectorResources/localization/deu/KeywordStrings.json b/src/main/resources/collectorResources/localization/deu/KeywordStrings.json new file mode 100644 index 0000000000..1016596ca6 --- /dev/null +++ b/src/main/resources/collectorResources/localization/deu/KeywordStrings.json @@ -0,0 +1,64 @@ +[ + { + "PROPER_NAME": "Plage", + "NAMES": [ + "plage", + "geplagt", + "geplagte", + "afflicted" + ], + "DESCRIPTION": "Wesen sind geplagt wenn sie gleichzeitig #yVerwundbar und #ySchwach sind." + }, + { + "PROPER_NAME": "Verdammnis", + "NAMES": [ + "verdammnis", + "verdammen", + "verdamme", + "verdammt", + "verdammte", + "doom", + "doomed" + ], + "DESCRIPTION": "Verdammte Wesen verlieren zu Beginn ihrer Züge TP in Höhe der Verdammnis. Sämtliche Verdammnis wird danach entfernt, es sei denn, das Wesen ist #ygeplagt (ist gleichzeitig #ySchwach und #yVerwundbar [REMOVE_SPACE])." + }, + { + "PROPER_NAME": "Opfergabe", + "NAMES": [ + "opfergabe", + "opferst", + "geopfert", + "geopferte", + "geopferten", + "pyre" + ], + "DESCRIPTION": "Erfordert als zusätzliche Kosten das #yErschöpfen einer Handkarte." + }, + { + "PROPER_NAME": "Reserve", + "NAMES": [ + "reserve", + "reserven", + "reserviert", + "reserve", + "reserves" + ], + "DESCRIPTION": "Eine zweite Energiequelle, die angezapft wird, wenn die reguläre Energie erschöpft ist. Reserve verfällt nicht am Ende des Zuges." + }, + { + "PROPER_NAME": "Superflüchtig", + "NAMES": [ + "superflüchtig", + "megathereal" + ], + "DESCRIPTION": "Superflüchtige Karten landen am Ende des Zuges in den Erschöpfungsstapel - unabhängig davon, wo sie sich gerade befinden." + }, + { + "PROPER_NAME": "Fackelkopf", + "NAMES": [ + "fackelkopf", + "torchhead" + ], + "DESCRIPTION": "Solange du über #ytemporäre #yTP verfügst, aktiviert jeder Angriff die Fackelkopf-Effekte." + } +] \ No newline at end of file diff --git a/src/main/resources/collectorResources/localization/deu/MonsterStrings.json b/src/main/resources/collectorResources/localization/deu/MonsterStrings.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/src/main/resources/collectorResources/localization/deu/MonsterStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/collectorResources/localization/deu/OrbStrings.json b/src/main/resources/collectorResources/localization/deu/OrbStrings.json new file mode 100644 index 0000000000..e4678fd006 --- /dev/null +++ b/src/main/resources/collectorResources/localization/deu/OrbStrings.json @@ -0,0 +1,8 @@ +{ +} + + + + + + diff --git a/src/main/resources/collectorResources/localization/deu/PotionStrings.json b/src/main/resources/collectorResources/localization/deu/PotionStrings.json new file mode 100644 index 0000000000..0e805d055d --- /dev/null +++ b/src/main/resources/collectorResources/localization/deu/PotionStrings.json @@ -0,0 +1,36 @@ +{ + "collector:MiniCursePotion": { + "NAME": "Seelengift", + "DESCRIPTIONS": [ + "Wende #b1 #ySchwach [REMOVE_SPACE], #b1 #yVerwundbar [REMOVE_SPACE], und #b6 #yVerdammnis an.", + "Wende #b", + " #ySchwach [REMOVE_SPACE], #b", + " #yVerwundbar [REMOVE_SPACE], und #b", + " #yVerdammnis an." + ] + }, + "collector:ReservePotion": { + "NAME": "Reservetrank", + "DESCRIPTIONS": [ + "Erhalte #b2 #yReserve.", + "Erhalte #b", + " #yReserve [REMOVE_SPACE]." + ] + }, + "collector:DebuffDoublePotion": { + "NAME": "Balsamierflüssigkeit", + "DESCRIPTIONS": [ + "Verdopple die Debuffs des Gegners.", + "Multipliziere die Debuffs des Gegners mit #b", + " [REMOVE_SPACE]." + ] + }, + "collector:TempHPPotion": { + "NAME": "Höllenwasser", + "DESCRIPTIONS": [ + "Erhalte #b8 #ytemporäre #yTP [REMOVE_SPACE].", + "Erhalte #b", + " #ytemporäre #yTP [REMOVE_SPACE]." + ] + } +} diff --git a/src/main/resources/collectorResources/localization/deu/PowerStrings.json b/src/main/resources/collectorResources/localization/deu/PowerStrings.json new file mode 100644 index 0000000000..d62928db7b --- /dev/null +++ b/src/main/resources/collectorResources/localization/deu/PowerStrings.json @@ -0,0 +1,327 @@ +{ + "collector:AddCopyNextTurn": { + "NAME": "Bonuskarte", + "DESCRIPTIONS": [ + "Nimm zu Beginn deines nächsten Zuges ", + " auf die Hand." + ] + }, + "collector:BindingCall": { + "NAME": "Bindender Ruf", + "DESCRIPTIONS": [ + "Wende immer, wenn du deine gesamten #ytemporären #yTP verlierst, #b", + " #yVerdammnis auf ALLE Gegner an.", + "Translator Note: NOT USED" + ] + }, + "collector:CantTouchThis": { + "NAME": "Unberührbar", + "DESCRIPTIONS": [ + "Wende immer #b", + " #yVerdammnis auf Angreifer, deren Angriffe du vollständig geblockt hast, an." + ] + }, + "collector:Crackle": { + "NAME": "Pyromanie", + "DESCRIPTIONS": [ + "Erhalte zu Beginn deines Zuges #b1 #yReserve [REMOVE_SPACE].", + "Erhalte zu Beginn deines Zuges #b", + " #yReserve [REMOVE_SPACE]." + ] + }, + "collector:DarkLordForm": { + "NAME": "Schattenlord Form", + "DESCRIPTIONS": [ + "Spiele zu Beginn deines Zuges #yDu #yGehörst #yMir auf einen zufälligen Gegner.", + "Spiele zu Beginn deines Zuges #yDu #yGehörst #yMir auf #b", + " zufällige Gegner." + ] + }, + "collector:DarkLordFormPlus": { + "NAME": "Schattenlord Form+", + "DESCRIPTIONS": [ + "Spiele zu Beginn deines Zuges #yDu #yGehörst #yMir+ auf einen zufälligen Gegner.", + "Spiele zu Beginn deines Zuges #yDu #yGehörst #yMir+ auf #b", + " zufällige Gegner." + ] + }, + "collector:DoMayhem": { + "NAME": "Wahnsinnstat", + "DESCRIPTIONS": [ + "Wenn ein Gegner zu Beginn deines Zuges mindestens #b", + " #yVerdammnis hat, dann spiele die oberste Karte des Nachziehstapels.", + " #yVerdammnis, dann spiele die obersten #b", + " Karten des Nachziehstapels." + ] + }, + "collector:Doom": { + "NAME": "Verdammnis", + "DESCRIPTIONS": [ + "Verliert zu Beginn seines Zuges #b", + " TP. Sämtliche #yVerdammnis wird danach entfernt - es sei denn, der Gegner ist #ygeplagt [REMOVE_SPACE]." + ] + }, + "collector:DoublePlayCollectibles": { + "NAME": "Sammlerstücke vermehren", + "DESCRIPTIONS": [ + "Sammlerstücke werden zweimal gespielt.", + "Sammlerstücke werden #b", + " zusätzliche Male gespielt." + ] + }, + "collector:DemisePower": { + "NAME": "Untergang", + "DESCRIPTIONS": [ + "Verhindere die nächste Entfernung der #yVerdammnis dieses Gegners.", + "Verhindere die nächsten #b", + " Entfernungen der #yVerdammnis dieses Gegners." + ] + }, + "collector:FeelMyPain": { + "NAME": "Fühle meinen Schmerz", + "DESCRIPTIONS": [ + "Immer wenn du eine Karte #yerschöpfst verliert ein zufälliger Gegner #b", + " TP." + ] + }, + "collector:HealIfDieThisTurn": { + "NAME": "Vollendet", + "DESCRIPTIONS": [ + "Wenn ", + " stirbt, heile #b", + " TP." + ] + }, + "collector:Karma": { + "NAME": "Karma", + "DESCRIPTIONS": [ + "Erhalte am Ende des Zuges #b", + " #yBlock, wenn ein Gegner #ygeplagt ist." + ] + }, + "collector:NextAttackAppliesDoom": { + "NAME": "Verdammter Angriff", + "DESCRIPTIONS": [ + "Der nächste Angriff in diesem Zug wendet zusätzlich #b", + " #yVerdammnis an." + ] + }, + "collector:AttacksApplyDoomPower": { + "NAME": "Verdammte Angriffe", + "DESCRIPTIONS": [ + "Angriffe wenden in diesem Zug zusätzlich #b", + " #yVerdammnis an." + ] + }, + "collector:NextCollectedTwice": { + "NAME": "Doppelt gemoppelt", + "DESCRIPTIONS": [ + "In diesem Zug spielst du dein nächstes #ySammlerstück doppelt.", + "In diesem Zug spielst du deine nächsten #b", + " #ySammlerstücke doppelt." + ] + }, + "collector:NextTurnReserve": { + "NAME": "Reservevorrat", + "DESCRIPTIONS": [ + "Erhalte zu Beginn deines nächsten Zuges #b1 #yReserve [REMOVE_SPACE].", + "Erhalte zu Beginn deines nächsten Zuges #b", + " #yReserve [REMOVE_SPACE]." + ] + }, + "collector:Omen": { + "NAME": "Vorbote", + "DESCRIPTIONS": [ + "Erhalte immer, wenn du ein #ySammlerstück spielst, #b", + " #yStärke [REMOVE_SPACE]." + ] + }, + "collector:ProtectingCall": { + "NAME": "Schützender Ruf", + "DESCRIPTIONS": [ + "Wenn du zu Beginn deines Zuges #ytemporäre #yTP hast, erhalte #b", + " #yBlock.", + "Translator Note: NOT USED" + ] + }, + "collector:RagingCall": { + "NAME": "Wütender Ruf", + "DESCRIPTIONS": [ + "Wenn du am Ende deines Zuges #ytemporäre #yTP hast, füge ALLEN Gegnern #b", + " Schaden zu.", + "Translator Note: NOT USED" + ] + }, + "collector:Reserve": { + "NAME": "Reserve", + "DESCRIPTIONS": [ + "Du hast #b1 #yReserve [REMOVE_SPACE].", + "Du hast #b", + " #yReserve [REMOVE_SPACE]." + ] + }, + "collector:Soulforge": { + "NAME": "Seelenschmiede", + "DESCRIPTIONS": [ + "Erhalte zu Beginn deines Zuges eine #yGlut [REMOVE_SPACE].", + "Erhalte zu Beginn deines Zuges #b", + " #yGlut Karten." + ] + }, + "collector:StrengthOverTurns": { + "NAME": "Ermächtigung", + "DESCRIPTIONS": [ + "Erhalte zu Beginn deines nächsten Zuges #b", + " #yStärke.", + "Erhalte zu Beginn deiner nächsten #b", + " Züge #b" + ] + }, + "collector:Suffering": { + "NAME": "Leiden lassen", + "DESCRIPTIONS": [ + "Wende immer, wenn du #ySchwach oder #yVerwundbar anwendest, zusätzlich #b", + " #yVerdammnis an." + ] + }, + "collector:TorchHead": { + "NAME": "Fackelkopf", + "DESCRIPTIONS": [ + "Immer wenn du einen #yAngriff spielst während du #ytemporäre #yTP hast, Fackelkopf: NL ", + "Wendet #b", + " #yVerdammnis auf einen zufälligen Gegner an.", + "Fügt ALLEN Gegnern #b", + " Schaden zu.", + "Gibt dir #b", + " #yBlock.", + " #yGift auf einen zufälligen Gegner an.", + "Zieht #b", + " Karte für dich.", + " Karten für dich." + ] + }, + "collector:IncreasedCollectionDraw": { + "NAME": "Sammlerstücke ziehen", + "DESCRIPTIONS": [ + "Ziehe zu Beginn deines Zuges #b1 zusätzliches Sammlerstück.", + "Ziehe zu Beginn deines Zuges #b", + " zusätzliche Sammlerstücke." + ] + }, + "collector:MastersCall": { + "NAME": "Meisterruf", + "DESCRIPTIONS": [ + "Füge immer, wenn du einen #yAngriff spielst, während du #ytemporäre #yTP hast, einem zufälligen Gegner #b", + " Schaden zu.", + "Translator Note: NOT USED" + ] + }, + "collector:LouseCard": { + "NAME": "Zusammenrollen", + "DESCRIPTIONS": [ + "Erhalte #b", + " #yBlock wenn du das nächste Mal ungeblockten Angriffsschaden erleidest." + ] + }, + "collector:MadGremlinCard": { + "NAME": "Wütend", + "DESCRIPTIONS": [ + "Nimm das Nächste Mal, wenn du in diesem Zug ungeblockten Angriffsschaden erleidest, einen #yWütenden #yGremlin auf die Hand.", + "Nimm das Nächste Mal, wenn du in diesem Zug ungeblockten Angriffsschaden erleidest, #b", + " #yWütende #yGremlins auf die Hand." + ] + }, + "collector:GremlinWizardCard": { + "NAME": "Aufladen", + "DESCRIPTIONS": [ + "Erhalte im nächsten Zug #b", + " #yElan [REMOVE_SPACE]." + ] + }, + "collector:ThievesCard": { + "NAME": "Gerissen", + "DESCRIPTIONS": [ + "Nimm #b", + " weniger Angriffsschaden in diesem Zug." + ] + }, + "collector:BookOfStabbingCard": { + "NAME": "Bestechend", + "DESCRIPTIONS": [ + "Wende immer, wenn du ungeblockten Angriffsschaden zufügst #b", + " #yVerdammnis an." + ] + }, + "collector:TransientCard": { + "NAME": "Auflösen", + "DESCRIPTIONS": [ + "#rStirb am Ende des Zuges.", + "#rStirb in #b", + " Zügen." + ] + }, + "collector:ReptomancerCard": { + "NAME": "Giftiger Ruf", + "DESCRIPTIONS": [ + "Wenn du am Ende des Zuges #ytemporäre #yTP hast, wende #b", + " #yGift auf einen zufälligen Gegner an." + ] + }, + "collector:MoreBlockWithTempHP": { + "NAME": "Fingerhut", + "DESCRIPTIONS": [ + "Erhalte während du #ytemporäre #yTP hast zusätzlich #b", + " #yBlock durch Karten." + ] + }, + "collector:NextTurnVigor": { + "NAME": "Elan in Reserve", + "DESCRIPTIONS": [ + "Erhalte zu Beginn deines nächsten Zuges #b", + " #yElan [REMOVE_SPACE]." + ] + }, + "collector:AcidSlimeCard": { + "NAME": "Schleimiges Duplizieren", + "DESCRIPTIONS": [ + "In diesem Zug spielst du deinen nächsten #yAngriff ODER deine nächste #yFertigkeit doppelt.", + "In diesem Zug spielst du deine nächsten #b", + " #yAngriffe ODER #yFertigkeiten doppelt." + ] + }, + "collector:GremlinNobCard": { + "NAME": "Erzürnen", + "DESCRIPTIONS": [ + "Erhalte immer, wenn du eine #yFertigkeit spielst, #b", + " #yElan [REMOVE_SPACE]." + ] + }, + "collector:LanternFlare": { + "NAME": "Todeslaterne", + "DESCRIPTIONS": [ + "Erhält am Ende seines Zuges #b", + " #yVerdammnis [REMOVE_SPACE]." + ] + }, + "collector:WomanInBlueCard": { + "NAME": "Frau in Blau", + "DESCRIPTIONS": [ + "Verliere am Ende des Kampfes alle Tränke." + ] + }, + "collector:ShootingStar": { + "NAME": "Sternschnuppe", + "DESCRIPTIONS": [ + "Wenn du das erste Mal im Zug einen #yAngriff als #yOpfergabe anbietest, nimm eine Kopie des Angriffs auf die Hand. Sie kostet #b0 bis du sie spielst.", + "Die ersten #b", + " Male im Zug, an denen du einen #yAngriff als #yOpfergabe anbietest, nimm jeweils eine Kopie des Angriffs auf die Hand. Sie kosten #b0 bis du sie spielst." + ] + }, + "collector:LoseHpNextTurn": { + "NAME": "Mal des Todes", + "DESCRIPTIONS": [ + "Verliert am Ende seines Zuges #b", + " TP." + ] + } +} diff --git a/src/main/resources/collectorResources/localization/deu/RelicStrings.json b/src/main/resources/collectorResources/localization/deu/RelicStrings.json new file mode 100644 index 0000000000..cc243fc157 --- /dev/null +++ b/src/main/resources/collectorResources/localization/deu/RelicStrings.json @@ -0,0 +1,126 @@ +{ + "collector:EmeraldTorch": { + "NAME": "Smaragdfackel", + "FLAVOR": "Die Flamme der Gier brennt nie aus.", + "DESCRIPTIONS": [ + "Beginne jeden Kampf mit #b1 #ycollector:Reserve [REMOVE_SPACE]." + ] + }, + "collector:PrismaticTorch": { + "NAME": "Regenbogenfackel", + "FLAVOR": "Die stets wechselnde Flamme ist ein Zeichen des Glücks.", + "DESCRIPTIONS": [ + "Ersetzt ", + "[] [REMOVE_SPACE]. Beginne jeden Kampf mit #b1 #ycollector:Reserve und nimm eine #yGlut auf die Hand. Wenn du das erste Mal im Zug eine #yGlut #yerschöpfst [REMOVE_SPACE], erhalte #b1 #ycollector:Reserve [REMOVE_SPACE]." + ] + }, + "collector:HolidayCoal": { + "NAME": "Krampus-Kohle", + "FLAVOR": "„Faszinierend! Aber warum steckt das nur in bestimmten Kaminen?“ - Ranwid", + "DESCRIPTIONS": [ + "Erhalte immer, wenn du von einem leeren #ySammlungsstapel ziehen würdest, einen #yGlücksdocht [REMOVE_SPACE]." + ] + }, + "collector:BagOfTricks": { + "NAME": "Wundertüte", + "FLAVOR": "Wundervoll.", + "DESCRIPTIONS": [ + "Ziehe zu Beginn jedes Kampfes #b", + " zusätzliche Karten vom #ySammlungsstapel [REMOVE_SPACE]." + ] + }, + "collector:JadeRing": { + "NAME": "Jadering", + "FLAVOR": "Jade ist das Symbol der Ehrlichkeit.", + "DESCRIPTIONS": [ + "Gegner erleiden #b", + " mehr Schaden durch #ycollector:Verdammnis [REMOVE_SPACE]." + ] + }, + "collector:SoullitLamp": { + "NAME": "Seelenlampe", + "FLAVOR": "Ein makaberes Leuchtmittel. Summendes Geheul ersetzt das Knistern eines Feuers.", + "DESCRIPTIONS": [ + "Erhalte beim Aufheben #b3 #yEssenzen [REMOVE_SPACE]. Nimm zu Beginn des Kampfes eine #yGlut auf die Hand." + ] + }, + "collector:ThimbleHelm": { + "NAME": "Fingerhelm", + "FLAVOR": "Ein Helm für die kleinsten Helden des Spire.", + "DESCRIPTIONS": [ + "Beginne jeden Kampf mit #b", + " #ytemporären #yTP [REMOVE_SPACE]. Während du #ytemporäre #yTP hast, geben Karten #b1 #yBlock zusätzlich." + ] + }, + "collector:Incense": { + "NAME": "Weihrauch", + "FLAVOR": "Eine altmodische Art der mentalen Reinigung.", + "DESCRIPTIONS": [ + "Während du #ySchwach [REMOVE_SPACE], #yVerwundbar oder #yGebrechlich bist, kannst du weder #ySchwach [REMOVE_SPACE], #yVerwundbar noch #yGebrechlich erhalten." + ] + }, + "collector:FuelCanister": { + "NAME": "Treibstoffkanister", + "FLAVOR": "Ekelhaft.", + "DESCRIPTIONS": [ + "#yBehalte am Ende des Zuges eine zufällige Karte mit den niedrigsten Kosten." + ] + }, + "collector:AutoCurser": { + "NAME": "Verhexter Talisman", + "FLAVOR": "„Ich stoße mir viel öfter den Zeh an, während ich das Ding trage. Ich glaube es funktioniert!“ - Ranwid", + "DESCRIPTIONS": [ + "Wende zu Beginn des Kampfes #b1 #ySchwach und #yVerwundbar auf einen zufälligen Gegner an." + ] + }, + "collector:Bagpipes": { + "NAME": "Dudelsack", + "FLAVOR": "Man erzählt sich, dass der Klang dieses Instruments Kublai den Großen in den Wahnsinn getrieben hat.", + "DESCRIPTIONS": [ + "Immer wenn du NEUES #ySchwach oder #yVerwundbar anwendest, erhöhe die angewendete Anzahl um #b1 [REMOVE_SPACE]." + ] + }, + "collector:BottledCollectible": { + "NAME": "Flaschenhirn", + "FLAVOR": "Gefunden im Labor eines Zauberers.", + "DESCRIPTIONS": [ + "#yVerbessere beim Aufheben eine Karte in deiner #ySammlung [REMOVE_SPACE]. Beginne jeden Kampf mit der gewählten Karte auf deinem #ySammlungsstapel [REMOVE_SPACE].", + "Beginne jeden Kampf mit ", + " auf deinem #ySammlungsstapel [REMOVE_SPACE].", + "Wähle eine Karte für das ", + "Die eingelegte Karte wurde aus dem Deck #rentfernt [REMOVE_SPACE]. Das Relikt hat keine Wirkung mehr." + ] + }, + "collector:TheContract": { + "NAME": "Der Vertrag", + "FLAVOR": "Mit Blut unterschrieben.", + "DESCRIPTIONS": [ + "Erhalte beim Aufheben #b", + " #yEssenzen [REMOVE_SPACE]." + ] + }, + "collector:ForbiddenFruit": { + "NAME": "Verbotene Frucht", + "FLAVOR": "Diese Frucht sieht äußerst fremdartig aus.", + "DESCRIPTIONS": [ + "Füge beim Aufheben einen #rParasiten in dein Deck hinzu und erhöhe deine max. TP um #b", + " [REMOVE_SPACE]. Beginne jeden Kampf mit #b", + " #yGeschicklichkeit [REMOVE_SPACE]." + ] + }, + "collector:RoughDiamond": { + "NAME": "Rohdiamant", + "FLAVOR": "Wegen der Zerstörung der Minen sind selbst unreine, ungeschliffene Diamanten äußerst kostbar.", + "DESCRIPTIONS": [ + "Erhalte beim Aufheben eine #yseltene Kartenbelohnung. Erhalte [E] , wenn du das erste Mal im Zug eine #yseltene Karte spielst.", + "Wissen!" + ] + }, + "collector:BlockedChakra": { + "NAME": "Gehemmtes Chakra", + "FLAVOR": "Es reicht bloß ein gezerrter Muskel.", + "DESCRIPTIONS": [ + "Erhalte in deinem Zug [E]. Du kannst erst ab deinem vierten Zug vom #ySammlungsstapel ziehen." + ] + } +} \ No newline at end of file diff --git a/src/main/resources/collectorResources/localization/deu/RunModStrings.json b/src/main/resources/collectorResources/localization/deu/RunModStrings.json new file mode 100644 index 0000000000..7a73a41bfd --- /dev/null +++ b/src/main/resources/collectorResources/localization/deu/RunModStrings.json @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/src/main/resources/collectorResources/localization/deu/UIStrings.json b/src/main/resources/collectorResources/localization/deu/UIStrings.json new file mode 100644 index 0000000000..ac18cf978a --- /dev/null +++ b/src/main/resources/collectorResources/localization/deu/UIStrings.json @@ -0,0 +1,110 @@ +{ + "collector:CollectionReward": { + "TEXT": [ + "Wähle ein Sammlerstück aus." + ] + }, + "collector:CollectibleCardTab": { + "TEXT": [ + "Sammlerstück" + ] + }, + "collector:CollectionScreen": { + "TEXT": [ + "Ausblenden", + "Der Kampf beginnt mit all diesen Karten in der Sammlung." + ] + }, + "collector:CollectionUITopPanel": { + "TEXT": [ + "Sammlung", + "Sieh alle Karten deiner Sammlung an.", + "Diese Karten landen zu Beginn jedes Kampfes im Sammlungsstapel." + ] + }, + "collector:CombatCollectionPileButton": { + "TEXT": [ + "Sammlungsstapel", + "Der Stapel beinhaltet die noch nicht in diesem Kampf gezogenen Sammlerstücke. Von hier wird zu Beginn jedes Zuges eine Karte gezogen.", + "Ich habe keine Sammlerstücke!" + ] + }, + "collector:EssenceCount": { + "TEXT": [ + "Essenzen", + "Wandle Essenzen in Karten für deine Sammlung (Sammlerstücke) um. Normale Kämpfe erzeugen #b1 Essenz, Elitekämpfe #b2 Essenzen, und Bosskämpfe #b3 [REMOVE_SPACE]! NL Du hast #b", + " #yEssenzen." + ] + }, + "collector:CombatCollectionViewScreen": { + "TEXT": [ + "Übersicht der Sammlung" + ] + }, + "collector:PyreInfo": { + "TEXT": [ + "Opfergabe", + "Erfordert als zusätzliche Kosten das #yErschöpfen einer Handkarte." + ] + }, + "collector:CollectedCardMod": { + "TEXT": [ + "collector:Superflüchtig. NL ", + "Sammlerstück" + ] + }, + "collector:CollectibleCardReward": { + "TEXT": [ + "Sammeln: ", + "Du kannst diese Karte aufsammeln" + ] + }, + "collector:HoardedMod": { + "TEXT": [ + "Unspielbar. Behalten. NL ", + "Unspielbar. NL ", + "Behalten. NL " + ] + }, + "collector:SecondEnergyOrb": { + "TEXT": [ + "Reserve", + "Eine zweite Energiequelle, die angezapft wird, wenn die reguläre Energie erschöpft ist. Reserve verfällt nicht am Ende des Zuges." + ] + }, + "collector:PyreCostSpendScreen": { + "TEXT": [ + "Erschöpfe eine Karte als Opfer." + ] + }, + "collector:PyreModText": { + "TEXT": [ + "Ich kann gerade kein Opfer geben!" + ] + }, + "collector:StashAwayCampfireOption": { + "TEXT": [ + "Freilassen", + "Entferne ein Sammlerstück. Erhalte ", + " Seelen.", + "Erfordert ein Sammlerstück.", + "Wähle ein Sammlerstück zum Entfernen." + ] + }, + "collector:BonusEventOption": { + "TEXT": [ + "[Einsammeln]" + ] + }, + "collector:EssenceReward": { + "TEXT": [ + "Erhalte ", + " Essenz." + ] + }, + "collector:CharacterOption": { + "TEXT": [ + "Essenzen: " + ] + } +} diff --git a/src/main/resources/collectorResources/localization/eng/RelicStrings.json b/src/main/resources/collectorResources/localization/eng/RelicStrings.json index a186271faf..7313967ef4 100644 --- a/src/main/resources/collectorResources/localization/eng/RelicStrings.json +++ b/src/main/resources/collectorResources/localization/eng/RelicStrings.json @@ -3,7 +3,7 @@ "NAME": "Emerald Torch", "FLAVOR": "The fires of greed never fade.", "DESCRIPTIONS": [ - "At the start of each combat, add an #yEmber into your hand. The first time you #yExhaust an #yEmber each combat, gain #b1 #ycollector:Reserve [REMOVE_SPACE]." + "Start each combat with #b1 #ycollector:Reserve." ] }, "collector:PrismaticTorch": { @@ -11,7 +11,7 @@ "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]." + "[] [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": { @@ -87,24 +87,25 @@ "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 [REMOVE_SPACE]." + "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 #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." + "Upon pickup, add a #rParasite to your deck and gain #b", + " Max HP. Start each combat with #b", + " #yDexterity." ] }, "collector:RoughDiamond": { diff --git a/src/main/resources/collectorResources/localization/fra/CardStrings.json b/src/main/resources/collectorResources/localization/fra/CardStrings.json index a643eea2ad..2d40b73618 100644 --- a/src/main/resources/collectorResources/localization/fra/CardStrings.json +++ b/src/main/resources/collectorResources/localization/fra/CardStrings.json @@ -1,102 +1,102 @@ { "collector:ActOfAggression": { "NAME": "Acte d'agression", - "DESCRIPTION": "Gagnez !B! d'Armure. NL Appliquez !M! Vulnérable a TOUS les ennemis." + "DESCRIPTION": "Gagnez !B! d'Armure. NL Appliquez !M! de Vulnérabilité à TOUS les ennemis." }, "collector:AlwaysMore": { - "NAME": "Toujours plus", - "DESCRIPTION": "collector:Bûcher. NL gagnez !M! Or." + "NAME": "Toujours Plus", + "DESCRIPTION": "collector:Bûcher. NL Gagnez !M! d'Or." }, "collector:AshenStrike": { "NAME": "Frappe cendrée", - "DESCRIPTION": "Infligez !D! dégâts. NL Gagnez un *Charbon." + "DESCRIPTION": "Infligez !D! dégâts. NL Obtenez une *Braise." }, "collector:Arrogance": { "NAME": "Arrogance", - "DESCRIPTION": "Gagnez !B! d'Armure. NL Votre prochaine attaque a ce tour inflige !M! collector:Malédiction." + "DESCRIPTION": "Gagnez !B! d'Armure. NL Votre prochaine Attaque ce tour applique !M! de collector:Condamnation." }, "collector:AshesAndDust": { "NAME": "Cendres et poussière", - "DESCRIPTION": "Infligez !D! dégâts a TOUS les ennemis X fois. NL Si X est 5 ou plus, frappe 2 fois de plus." + "DESCRIPTION": "Infligez !D! dégâts à TOUS les ennemis X fois. NL Si X est 5 ou plus, frappe deux fois de plus." }, "collector:BindingCall": { "NAME": "Appel contraignant", - "DESCRIPTION": "Gagnez !M! expansioncontent:PV_temporaire. NL collector:Têtedetorche gagne \"Applique !clm2! collector:Malédiction a un ennemi aléatoire.\"" + "DESCRIPTION": "Gagnez !M! expansioncontent:PV_temporaires. NL collector:Tête_de_torche gagne \"Appliquez !clm2! de collector:Condamnation à un ennemi aléatoire.\"" }, "collector:Billow": { - "NAME": "Onduler", - "DESCRIPTION": "Gagnez !B! d'Armure. NL Au prochain tour, ajoute *Onduler a votre main." + "NAME": "Volute", + "DESCRIPTION": "Gagnez !B! d'Armure. NL Au prochain tour, ajoutez *Vocifère dans votre main." }, "collector:Bellow": { - "NAME": "Mugir", - "DESCRIPTION": "Éthérée. NL Applique collector:Malédiction égale à l'Armure inutiliser du tour précédant. NL Épuisement.", + "NAME": "Vocifère", + "DESCRIPTION": "Éthérée. NL Appliquez autant de collector:Condamnation que d'Armure inutilisée au tour précédent. NL Épuisement.", "EXTENDED_DESCRIPTION": [ - " NL ( Appliques !M! collector:Malédiction )" + " NL ( Appliquez !M! de collector:Condamnation )" ] }, "collector:BlackBindings": { - "NAME": "Reliures noires", - "DESCRIPTION": "Applique !M! Faiblesse, Puis applique !clm2! collector:Malédiction pour chaque débuff unique sur l'ennemi." + "NAME": "Chaînes Noires", + "DESCRIPTION": "Appliquez !M! de Faiblesse, puis appliquez !clm2! de collector:Condamnation pour chaque débuff unique sur l'ennemi." }, "collector:Blightning": { - "NAME": "Éclair de flétrissement", - "DESCRIPTION": "Applique !M! collector:Malédiction. NL Infligez !D! dégâts. NL Piochez 1 carte de votre pile de collection. NL Épuisement." + "NAME": "Fléaudre", + "DESCRIPTION": "Appliquez !M! de collector:Condamnation. NL Infligez !D! dégâts. NL Piochez 1 carte de votre pile de Collection. NL Épuisement." }, "collector:Bonfire": { - "NAME": "Feu de camp", + "NAME": "Feu de joie", "DESCRIPTION": "collector:Bûcher. NL Gagnez !B! d'Armure. NL Au prochain tour, gagnez 1 collector:Réserve." }, "collector:BrainDrain": { - "NAME": "Exode des cerveaux", - "DESCRIPTION": "L'ennemi perd !M! PV. NL ajoutez leur carte collecé a votre main. NL Épuisement.", - "UPGRADE_DESCRIPTION": "L'ennemi perd !M! PV. NL ajoutez leur carte collecé a votre main et améliorer la. NL Épuisement." + "NAME": "Drain Mental", + "DESCRIPTION": "L'ennemi perd !M! PV. NL Ajoutez leur carte Collectée à votre main. NL Épuisement.", + "UPGRADE_DESCRIPTION": "L'ennemi perd !M! PV. NL Ajoutez leur carte Collectée à votre main et Améliorez-la. NL Épuisement." }, "collector:BramblesparKindling": { - "NAME": "Petit bois de ronces", - "DESCRIPTION": "Injouable. NL quand *Epuiser, Ajoutez une *Frappe *Brûlante a votre main.", - "UPGRADE_DESCRIPTION": "Injouable. NL quand *Epuiser, Ajoutez une *Frappe *Brûlante a votre main.", + "NAME": "Allume-Ronces", + "DESCRIPTION": "Injouable. NL Lorsque cette carte est *Épuisée, ajoutez une *Frappe *Brûlante dans votre main.", + "UPGRADE_DESCRIPTION": "Injouable. NL Lorsque cette carte est *Épuisée, ajoutez une *Frappe *Brûlante+ dans votre main.", "EXTENDED_DESCRIPTION": [ "Je dois allumer ce petit bois pour l'utiliser." ] }, "collector:BurningStrike": { "NAME": "Frappe brûlante", - "DESCRIPTION": "Infligez !D! dégâts. NL Pioche une carte.", - "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. NL Pioche !M! cartes." + "DESCRIPTION": "Infligez !D! dégâts. NL Piochez une carte.", + "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. NL Piochez !M! cartes." }, "collector:CantTouchThis": { "NAME": "Intouchable", - "DESCRIPTION": "Gagnez !M! Dextérité. NL Lorsque vous bloquez complètement une attaque, appliquez !clm2! collector:Malédiction a l'attaquent." + "DESCRIPTION": "Gagnez !M! de Dextérité. NL Lorsque vous bloquez complètement une Attaque, appliquez !clm2! de collector:Condamnation à l'attaquant." }, "collector:CoffinNail": { - "NAME": "Clou de cercueil", - "DESCRIPTION": "Infligez !D! dégâts. NL Quand *Épuiser, retournez-la dans votre main au prochain tour avec !M! dégâts de plus." + "NAME": "Clou du cercueil", + "DESCRIPTION": "Infligez !D! dégâts. NL Lorsque cette carte est *Épuisée, remettez-la dans votre main au prochain tour avec !M! dégâts supplémentaires." }, "collector:Condemn": { "NAME": "Condamner", - "DESCRIPTION": "Appliquez !M! Vulnérable. NL Appliquez !clm2! collector:Malédiction." + "DESCRIPTION": "Appliquez !M! de Vulnérabilité. NL Appliquez !clm2! de collector:Condamnation." }, "collector:CursedWail": { "NAME": "Lamentation maudite", - "DESCRIPTION": "TOUS les ennemis perdent !M! Force ce tour. NL Les ennemis collector:Affligé perdent !clm2! Force. NL Épuisement." + "DESCRIPTION": "TOUS les ennemis perdent !M! de Force ce tour. NL Les ennemis collector:Affligés perdent !clm2! de Force. NL Épuisement." }, "collector:DarkApotheosis": { "NAME": "Apothéose sombre", - "DESCRIPTION": "Améliorer la pile de collection pour le reste du combat. NL Épuisement." + "DESCRIPTION": "Améliorez la pile de Collection pour le reste du combat. NL Épuisement." }, "collector:DarkLordForm": { "NAME": "Forme du Seigneur des Ténèbres", - "DESCRIPTION": "Au début de votre tour, joue *Tu *Est *Mien a un ennemi aléatoire.", - "UPGRADE_DESCRIPTION": "Au début de votre tour, joue #Tu #Est #Mien+ a un ennemi aléatoire." + "DESCRIPTION": "Au début de votre tour, jouez *VOUS *ÊTES *À *MOI sur un ennemi aléatoire.", + "UPGRADE_DESCRIPTION": "Au début de votre tour, jouez *VOUS *ÊTES *À *MOI+ sur un ennemi aléatoire." }, "collector:Darkstorm": { "NAME": "Tempête sombre", - "DESCRIPTION": "Gagnez un *Éclair *de *flétrissement. NL Mélangez en !M! de plus dans votre pioche. NL Épuisement." + "DESCRIPTION": "Obtenez un *Fléaudre. NL Mélangez en !M! de plus dans votre pioche. NL Épuisement." }, "collector:DarkwoodKindling": { - "NAME": "Bois d'allumage en saule", - "DESCRIPTION": "Injouable. NL Quand *Épuiser, gagnez !M! collector:Réserve au prochain tour.", - "UPGRADE_DESCRIPTION": "Injouable. NL Retenue. NL Quand *Épuiser, gagnez !M! collector:Réserve au prochain tour.", + "NAME": "Allume-Saule Noir", + "DESCRIPTION": "Injouable. NL Lorsque cette carte est *Épuisée, gagnez !M! collector:Réserves au prochain tour.", + "UPGRADE_DESCRIPTION": "Injouable. NL Retenue. NL Lorsque cette carte est *Épuisée, gagnez !M! collector:Réserves au prochain tour.", "EXTENDED_DESCRIPTION": [ "Je dois allumer ce petit bois pour l'utiliser." ] @@ -107,142 +107,142 @@ }, "collector:DoubleTrouble": { "NAME": "Double Trouble", - "DESCRIPTION": "Gagnez !B! d'Armure. NL Votre prochaine carte collecté a ce tour et jouez 2 fois." + "DESCRIPTION": "Gagnez !B! d'Armure. NL Votre prochaine carte Collectée jouée ce tour est jouée deux fois." }, "collector:DoMayhem": { "NAME": "Faire du chaos", - "DESCRIPTION": "Au début de votre tour, si un ennemi a 25 de collector:Malédiction ou plus, jouez la carte au dessus de votre pioche." + "DESCRIPTION": "Au début de votre tour, si un ennemi a 25 de collector:Condamnation ou plus, jouez la carte en haut de votre pioche." }, "collector:DragonsTrove": { - "NAME": "Le trésor du dragon", - "DESCRIPTION": "collector:Bûcher. NL Piochez 2 cartes de votre pile de collection. NL Gagnez !M! collector:Réserve. NL Épuisement." + "NAME": "Trésor du dragon", + "DESCRIPTION": "collector:Bûcher. NL Piochez 2 cartes de votre pile de Collection. NL Gagnez !M! collector:Réserve. NL Épuisement." }, "collector:Ember": { - "NAME": "Charbon", - "DESCRIPTION": "Retenue. NL Épuisement. NL Quand *Épuiser, gagnez !M! Force.", + "NAME": "Braise", + "DESCRIPTION": "Retenue. NL Épuisement. NL Lorsque cette carte est *Épuisée, gagnez !M! de Force.", "EXTENDED_DESCRIPTION": [ "Ces braises doivent être allumées, pas jouées." ] }, "collector:Empower": { "NAME": "Potentiel", - "DESCRIPTION": "Gagnez X Force au début de vos prochains !M! tours." + "DESCRIPTION": "Gagnez X de Force au début de vos !M! prochains tours." }, "collector:Extricate": { - "NAME": "Couper l'âme", - "DESCRIPTION": "Épuiser toutes les cartes non-attaque de votre main. NL Infligez !D! dégâts." + "NAME": "Déchirure d'âme", + "DESCRIPTION": "Épuisez toutes les cartes qui ne sont pas des Attaques de votre main. NL Infligez !D! dégâts." }, "collector:FeelMyPain": { - "NAME": "Ressent ma douleur", - "DESCRIPTION": "A chaque fois que vous *Épuiser une carte, une ennemi aléatoire perd !M! PV." + "NAME": "Ressens ma douleur", + "DESCRIPTION": "Lorsque vous *Épuisez une carte, un ennemi aléatoire perd !M! PV." }, "collector:FiendFire": { "NAME": "Feu démoniaque", - "DESCRIPTION": "Épuiser votre main. NL Infligez !D! dégâts pour chaque carte *Épuiser. NL Épuisement." + "DESCRIPTION": "Épuisez votre main. NL Infligez !D! dégâts pour chaque carte *Épuisée. NL Épuisement." }, "collector:Finalize": { "NAME": "Finalisé", - "DESCRIPTION": "Quand l'ennemi meurt, soigne !clm2! PV. NL Appliquez !M! collector:Malédiction. NL Épuisement." + "DESCRIPTION": "Quand l'ennemi meurt, soignez-vous de !clm2! PV. NL Appliquez !M! de collector:Condamnation. NL Épuisement." }, "collector:FingerOfDeath": { "NAME": "Doigt de la mort", - "DESCRIPTION": "Seule la collector:Réserves peux être dépensez pour cette carte. NL Appliquez !M! collector:Malédiction.", - "UPGRADE_DESCRIPTION": "Only collector:Réserves may be spent on this. NL Apply !M! collector:Malédiction to ALL enemies." + "DESCRIPTION": "Seule les collector:Réserves peuvent être dépensées pour cette carte. NL Appliquez !M! de collector:Condamnation.", + "UPGRADE_DESCRIPTION": "Seule les collector:Réserves peuvent être dépensées pour cette carte. NL Appliquez !M! de collector:Condamnation à TOUS les ennemis." }, "collector:FlameLash": { - "NAME": "Fouet de flamme", - "DESCRIPTION": "collector:Bûcher. NL Infligez !D! dégâts, ensuite ajoutez les dégâts de la carte *Bûcher.", - "UPGRADE_DESCRIPTION": "collector:Bûcher. NL Infligez !D! dégâts, ensuite ajoutez les dégâts de la carte *Bûcher plus !M!." + "NAME": "Fouet enflammé", + "DESCRIPTION": "collector:Bûcher. NL Infligez !D! dégâts, puis ajoutez les dégâts de la carte qui a servi au *Bûcher.", + "UPGRADE_DESCRIPTION": "collector:Bûcher. NL Infligez !D! dégâts, puis ajoutez les dégâts de la carte qui a servi au *Bûcher plus !M!." }, "collector:FleetingEmbers": { - "NAME": "Charbons éphémères", - "DESCRIPTION": "collector:Bûcher. NL Gagnez !B! d'Armure. NL Ajoutez !M! *Charbons a votre main." + "NAME": "Braises éphémères", + "DESCRIPTION": "collector:Bûcher. NL Gagnez !B! d'Armure. NL Ajoutez !M! *Braises a votre main." }, "collector:Forgery": { "NAME": "Falsification", - "DESCRIPTION": "Infligez !D! dégâts. NL Choisissez 1 carte sur !M! de votre pile de collection et gagnez en une copie.", + "DESCRIPTION": "Infligez !D! dégâts. NL Choisissez 1 carte parmi !M! de votre pile de Collection et gagnez-en une copie.", "EXTENDED_DESCRIPTION": [ - "a ajoutez a votre main." + "à ajouter dans votre main." ] }, "collector:FuelTheFire": { "NAME": "Alimenter le feu", - "DESCRIPTION": "collector:Bûcher. NL Au prochain tour, gagnez !M! collector:Réserve.", - "UPGRADE_DESCRIPTION": "collector:Bûcher. NL Au prochain tour, gagnez !M! collector:Réserve et piochez une carte." + "DESCRIPTION": "collector:Bûcher. NL Au prochain tour, gagnez !M! collector:Réserves.", + "UPGRADE_DESCRIPTION": "collector:Bûcher. NL Au prochain tour, gagnez !M! collector:Réserves et piochez une carte." }, "collector:Goodbye": { - "NAME": "Aurevoir", - "DESCRIPTION": "Double la collector:Malédiction de l'ennemi. NL Épuisement.", - "UPGRADE_DESCRIPTION": "Triple la collector:Malédiction de l'ennemi. NL Épuisement." + "NAME": "Au Revoir", + "DESCRIPTION": "Doublez la collector:Condamnation de l'ennemi. NL Épuisement.", + "UPGRADE_DESCRIPTION": "Triplez la collector:Condamnation de l'ennemi. NL Épuisement." }, "collector:GourmandsGaze": { - "NAME": "Le regard du gourmand", - "DESCRIPTION": "Infligez !D! dégâts. NL Si vous avez jouez une carte collector:Collecté a ce tour, gagnez !B! d'Armure." + "NAME": "Regard du gourmand", + "DESCRIPTION": "Infligez !D! dégâts. NL Si vous avez jouée une carte Collectée durant ce tour, gagnez !B! d'Armure." }, "collector:GreaterHurting": { - "NAME": "Plus de souffrance", - "DESCRIPTION": "Éthérée. NL Infligez !D! dégâts. NL Si cette carte est Épuiser, gagnez *Le *plus *grand *mal.", - "UPGRADE_DESCRIPTION": "Éthérée. NL Infligez !D! dégâts. NL Si cette carte est Épuiser, gagnez *Le *plus *grand *mal+." + "NAME": "Supplice Accru", + "DESCRIPTION": "Éthérée. NL Infligez !D! dégâts. NL Si cette carte est Épuisée, obtenez *Supplice *Suprême.", + "UPGRADE_DESCRIPTION": "Éthérée. NL Infligez !D! dégâts. NL Si cette carte est Épuisée, obtenez *Supplice *Suprême+." }, "collector:GreatestHurting": { - "NAME": "Le plus grand mal", - "DESCRIPTION": "Éthérée. NL Infligez !D! dégâts. NL Si cette carte est Épuiser, gagnez un *Charbon." + "NAME": "Supplice Suprême", + "DESCRIPTION": "Éthérée. NL Infligez !D! dégâts. NL Si cette carte est Épuisée, obtenez une *Braise." }, "collector:GreenpyreLocus": { "NAME": "Locus du Bûcher Vert", - "DESCRIPTION": "Choisissez 1 carte collecté parmis 3 a ajoutez a votre main. Ajoutez !M! copie de cette carte a votre pile de collection.", + "DESCRIPTION": "Choisissez 1 carte Collectée parmi 3 à ajouter dans votre main. Ajoutez !M! copies de cette carte dans votre pile de Collection.", "EXTENDED_DESCRIPTION": [ - "Choisissez une carte a ajoutez a votre main." + "Choisissez une carte à ajouter dans votre main." ] }, "collector:Heatwave": { "NAME": "Canicule", - "DESCRIPTION": "Infligez !D! dégâts a TOUS les ennemis. NL Gagnez un *Charbon." + "DESCRIPTION": "Infligez !D! dégâts a TOUS les ennemis. NL Obtenez une *Braise." }, "collector:Hoard": { - "NAME": "Provision", - "DESCRIPTION": "collector:Bûcher. NL Piochez !M! cartes. NL Elles seront Retenues à ce tour." + "NAME": "Provisions", + "DESCRIPTION": "collector:Bûcher. NL Piochez !M! cartes. NL Elles seront Retenues ce tour." }, "collector:HoardersStrike": { - "NAME": "Frappe du collectionneur", - "DESCRIPTION": "Infligez !D! dégâts. NL Jouez la carte au dessus de votre pile de collection." + "NAME": "Frappe du Collectionneur", + "DESCRIPTION": "Infligez !D! dégâts. NL Jouez la carte au dessus de votre pile de Collection." }, "collector:Hurting": { - "NAME": "Blesser", - "DESCRIPTION": "Éthérée. NL Infligez !D! dégâts. NL Si cette carte est Épuiser, gagnez a *Le *plus *Grand *mal.", - "UPGRADE_DESCRIPTION": "Éthérée. NL Infligez !D! dégâts. NL Si cette carte est Épuiser, gagnez a *Le *plus *Grand *mal+." + "NAME": "Supplice", + "DESCRIPTION": "Éthérée. NL Infligez !D! dégâts. NL Si cette carte est Épuisée, obtenez un *Supplice *Accru.", + "UPGRADE_DESCRIPTION": "Éthérée. NL Infligez !D! dégâts. NL Si cette carte est Épuisée, obtenez un *Supplice *Accru+." }, "collector:IllTakeThat": { "NAME": "Je vais prendre ça", - "DESCRIPTION": "Volez jusqu'a !M! d'Armure a l'ennemi. NL Infligez !D! dégâts." + "DESCRIPTION": "Volez jusqu'à !M! d'Armure de l'ennemi. NL Infligez !D! dégâts." }, "collector:InevitableDemise": { "NAME": "Décès inévitable", - "DESCRIPTION": "Infligez !D! dégâts. NL Prévien la prochaine fois que la collector:Malédiction de la cible est retiré." + "DESCRIPTION": "Infligez !D! dégâts. NL Prévenez la prochaine fois que la collector:Condamnation de la cible se retire." }, "collector:InflictAgony": { - "NAME": "Infliger l'agonie", - "DESCRIPTION": "Infligez !D! dégâts. NL Si l'ennemi n'est pas collector:Affligé, appliquez 2 Faiblesse et Vulnérable." + "NAME": "Infliger l'Agonie", + "DESCRIPTION": "Infligez !D! dégâts. NL Si l'ennemi n'est pas collector:Affligé, appliquez 2 de Faiblesse et de Vulnérabilité." }, "collector:Invigorate": { "NAME": "Flash", - "DESCRIPTION": "collector:Bûcher. NL Choisissez d'obtenir *Trébucher ou *Aveuglement. NL Épuisement.", - "UPGRADE_DESCRIPTION": "collector:Bûcher. NL Choisissez d'obtenir *Trébucher+ ou *Aveuglement+. NL Épuisement.", + "DESCRIPTION": "collector:Bûcher. NL Choisissez d'obtenir *Croche-pied ou *Aveuglement. NL Épuisement.", + "UPGRADE_DESCRIPTION": "collector:Bûcher. NL Choisissez d'obtenir *Croche-pied+ ou *Aveuglement+. NL Épuisement.", "EXTENDED_DESCRIPTION": [ "Choisissez une carte a ajoutez a votre main." ] }, "collector:IronbarkKindling": { - "NAME": "Bois d'allumage de fer", - "DESCRIPTION": "Injouable. NL Quand *Épuiser, gagnez !B! d'Armure.", - "UPGRADE_DESCRIPTION": "Injouable. Retenue. NL Quand *Épuiser, gagnez !B! d'Armure.", + "NAME": "Allume-Bois de fer", + "DESCRIPTION": "Injouable. NL Lorsque cette carte est *Épuisée, gagnez !B! d'Armure.", + "UPGRADE_DESCRIPTION": "Injouable. Retenue. NL Lorsque cette carte est *Épuisée, gagnez !B! d'Armure.", "EXTENDED_DESCRIPTION": [ "Je dois allumer ce petit bois pour l'utiliser." ] }, "collector:ItMattersNot": { - "NAME": "Cela n'a pas d'importance", - "DESCRIPTION": "Gagnez !B! d'Armure. NL Augmente la Faiblesse et la Vulnérable de TOUS les ennemis de !M!." + "NAME": "Aucune importance", + "DESCRIPTION": "Gagnez !B! d'Armure. NL Augmentez la Faiblesse et la Vulnérabilité de TOUS les ennemis de !M!." }, "collector:JadedJabs": { "NAME": "Coups blasés", @@ -254,11 +254,11 @@ "UPGRADE_DESCRIPTION": "Inné. NL Au début de votre tour, gagnez !M! d'Armure. NL Si un ennemi est collector:Affligé, gagnez en !clm2! de plus." }, "collector:LanternFlare": { - "NAME": "Flamme de lanterne", - "DESCRIPTION": "collector:Bûcher. NL Appliquez !M! collector:Malédiction. NL L'ennemi en gagne !clm2! de plus a la fin de chaque tour." + "NAME": "Lanterne Flamboyante", + "DESCRIPTION": "collector:Bûcher. NL Appliquez !M! de collector:Condamnation. NL L'ennemi en gagne !clm2! de plus à la fin de chaque tour." }, "collector:LuckyWick": { - "NAME": "Mèche porte-bonheur", + "NAME": "Mèche Providentielle", "DESCRIPTION": "Gagnez !B! d'Armure. NL Infligez !D! dégâts." }, "collector:MastersCall": { @@ -267,32 +267,32 @@ }, "collector:MiniCurse": { "NAME": "Mini-Malédiction", - "DESCRIPTION": "collector:Bûcher. NL Appliquez 1 Faiblesse et Vulnérable.", - "UPGRADE_DESCRIPTION": "collector:Bûcher. NL Appliquez 1 Faiblesse et Vulnérable a TOUS les ennemis." + "DESCRIPTION": "collector:Bûcher. NL Appliquez 1 de Faiblesse et de Vulnérabilité.", + "UPGRADE_DESCRIPTION": "collector:Bûcher. NL Appliquez 1 de Faiblesse et de Vulnérabilité à TOUS les ennemis." }, "collector:Misdirect": { - "NAME": "Mauvaise direction", + "NAME": "Désorientation", "DESCRIPTION": "Gagnez !B! d'Armure. NL Au prochain tour, gagnez 1 collector:Réserve." }, "collector:MysteryWeaving": { - "NAME": "Tissage mystère", - "DESCRIPTION": "Gagnez !B! d'Armure. NL Obtenez 2 d'Armure en moins pour chaque carte dans votre main." + "NAME": "Tissage Occulte", + "DESCRIPTION": "Gagnez !B! d'Armure. NL Donne 2 d'Armure en moins pour chaque carte dans votre main." }, "collector:OakbrimKindling": { - "NAME": "Bois d'allumage en chêne", - "DESCRIPTION": "Injouable. NL Quand *Épuiser, piochez !M! cartes.", + "NAME": "Allume-Chêne", + "DESCRIPTION": "Injouable. NL Lorsque cette carte est *Épuisée, piochez !M! cartes.", "EXTENDED_DESCRIPTION": [ "Je dois allumer ce petit bois pour l'utiliser." ] }, "collector:Omen": { "NAME": "Présage", - "DESCRIPTION": "Chaque fois que vous jouez une carte collecté, gagnez 1 Force.", - "UPGRADE_DESCRIPTION": "Inné. NL Chaque fois que vous jouez une carte collecté, gagnez 1 Force." + "DESCRIPTION": "Chaque fois que vous jouez une carte Collectée, gagnez 1 de Force.", + "UPGRADE_DESCRIPTION": "Inné. NL Chaque fois que vous jouez une carte Collectée, gagnez 1 de Force.." }, "collector:ProtectingCall": { "NAME": "Appel de protection", - "DESCRIPTION": "Gagnez !M! expansioncontent:PV_temporaire. NL collector:Têtedetorche gagne \"Gagnez !clm2! d'Armure.\"" + "DESCRIPTION": "Gagnez !M! expansioncontent:PV_temporaires. NL collector:Tête_de_torche gagne \"Gagnez !clm2! d'Armure.\"" }, "collector:Pyromancy": { "NAME": "Pyromancie", @@ -301,41 +301,41 @@ }, "collector:RagingCall": { "NAME": "Appel enragé", - "DESCRIPTION": "Gagnez !M! expansioncontent:PV_temporaire. NL collector:Têtedetorche gagne \"Infligez !clm2! dégâts a TOUS les ennemis.\"." + "DESCRIPTION": "Gagnez !M! expansioncontent:PV_temporaires. NL collector:Tête_de_torche gagne \"Infligez !clm2! dégâts a TOUS les ennemis.\"." }, "collector:ReceiveTribute": { - "NAME": "Recevoir un hommage", - "DESCRIPTION": "collector:Bûcher. NL Choisissez 1 carte de boss parmis !M! Boss a obtenir. Elle gagne Retenue. NL Épuisement.", + "NAME": "Tribut Reçu", + "DESCRIPTION": "collector:Bûcher. NL Choisissez 1 carte de Boss parmi !M! à Obtenir. Elle gagne Retenue. NL Épuisement.", "EXTENDED_DESCRIPTION": [ - "Choisissez une carte a ajoutez a votre main." + "Choisissez une carte à ajouter dans votre main." ] }, "collector:Roast": { - "NAME": "Rôtir", + "NAME": "Rôtissage", "DESCRIPTION": "collector:Bûcher. NL Infligez !D! dégâts." }, "collector:RotwoodKindling": { - "NAME": "Bois d'allumage pourri", - "DESCRIPTION": "Injouable. NL Quand *Épuiser, appliquez !M! Vulnérable et !clm2! collector:Malédiction a TOUS les ennemis.", + "NAME": "Allume-Bois pourri", + "DESCRIPTION": "Injouable. NL Lorsque cette carte est *Épuisée, appliquez !M! de Vulnérabilité et !clm2! de collector:Condamnation à TOUS les ennemis.", "EXTENDED_DESCRIPTION": [ "Je dois allumer ce petit bois pour l'utiliser." ] }, "collector:SapStrength": { "NAME": "Marque mortelle", - "DESCRIPTION": "Infligez !D! dégâts. NL Au prochain tour, l'ennemi perd des PV égaux à 2 fois les dégâts non-bloqués infligés." + "DESCRIPTION": "Infligez !D! dégâts. NL Au prochain tour, l'ennemi perd des PV égaux à deux fois les dégâts non-bloqués infligés." }, "collector:ScorchingRay": { - "NAME": "Rayon brûlant", - "DESCRIPTION": "Infligez !D! dégâts a un ennemi aléatoire X fois." + "NAME": "Rayon ardent", + "DESCRIPTION": "Infligez !D! dégâts à un ennemi aléatoire X fois." }, "collector:SeedOfDoubt": { "NAME": "Graine du doute", - "DESCRIPTION": "Appliquez !M! collector:Malédiction. NL Chaque fois que cette carte est *Épuiser quand elle est dans votre main, augmentez sa *Malédiction de !clm2!." + "DESCRIPTION": "Appliquez !M! de collector:Condamnation. NL Chaque fois que cette carte est *Épuisée quand elle est dans votre main, augmentez sa *Condamnation de !clm2!." }, "collector:ShadowDaggers": { "NAME": "Dagues de l'Ombre", - "DESCRIPTION": "Infligez !D! dégâts pour chaque carte collecté jouez a ce combat. NL Épuisement.", + "DESCRIPTION": "Infligez !D! dégâts pour chaque carte Collectée jouée ce combat. NL Épuisement.", "EXTENDED_DESCRIPTION": [ " NL (Touche ", " fois.)", @@ -344,16 +344,16 @@ }, "collector:SomberShield": { "NAME": "Bouclier sombre", - "DESCRIPTION": "collector:Bûcher. NL Gagnez !B! d'Armure. NL Au prochain tour, gagnez une copie de la carte *Épuiser." + "DESCRIPTION": "collector:Bûcher. NL Gagnez !B! d'Armure. NL Au prochain tour, gagnez une copie de la carte *Épuisée." }, "collector:SoulSnare": { "NAME": "Piège d'âme", - "DESCRIPTION": "Appliquez !M! collector:Malédiction. NL Épuisement." + "DESCRIPTION": "Appliquez !M! de collector:Condamnation. NL Épuisement." }, "collector:Soulforge": { "NAME": "Forgeâme", - "DESCRIPTION": "Piochez une carte de votre pile de collection. Gagnez en !M! copie améliorer. NL Épuisement.", - "UPGRADE_DESCRIPTION": "Piochez une carte de votre pile de collection. Gagnez en !M! copies améliorées. NL Épuisement." + "DESCRIPTION": "Piochez une carte de votre pile de collection. Gagnez-en !M! copie améliorée. NL Épuisement.", + "UPGRADE_DESCRIPTION": "Piochez une carte de votre pile de collection. Gagnez-en !M! copies améliorées. NL Épuisement." }, "collector:Spark": { "NAME": "Étincelle", @@ -365,160 +365,160 @@ "DESCRIPTION": "Infligez !D! dégâts. NL Si l'ennemi est collector:Affligé, gagnez !B! d'Armure." }, "collector:StashAway": { - "NAME": "Se cacher", - "DESCRIPTION": "Gagnez !B! d'Armure X fois. NL Au prochain tour, gagnez X collector:Réserve. NL Épuisement." + "NAME": "Planquer", + "DESCRIPTION": "Gagnez !B! d'Armure X fois. NL Au prochain tour, gagnez X collector:Réserves. NL Épuisement." }, "collector:Strike": { "NAME": "Frappe", "DESCRIPTION": "Infligez !D! dégâts." }, "collector:SuckerPunch": { - "NAME": "Coup de poing vicieux", - "DESCRIPTION": "Infligez !D! dégâts. NL Appliquez !M! Faiblesse." + "NAME": "Coup bas", + "DESCRIPTION": "Infligez !D! dégâts. NL Appliquez !M! de Faiblesse." }, "collector:Suffering": { "NAME": "Souffrance", - "DESCRIPTION": "Chaque fois que vous appliquez *Faiblesse ou *Vulnérable a un ennemi, appliquez leur aussi !M! collector:Malédiction." + "DESCRIPTION": "Chaque fois que vous appliquez de la *Faiblesse ou de la *Vulnérabilité sur un ennemi, appliquez-leur aussi !M! de collector:Condamnation." }, "collector:SunbloomKindling": { - "NAME": "Bois d'allumage ensoleillé", - "DESCRIPTION": "Injouable. NL Quand *Épuiser, gagnez !M! Force et Ajoutez 2 *Charbons a votre main.", + "NAME": "Allume-Fleur de Soleil", + "DESCRIPTION": "Injouable. NL Lorsque cette carte est *Épuisée, gagnez !M! de Force et Ajoutez 2 *Braises dans votre main.", "EXTENDED_DESCRIPTION": [ "Je dois allumer ce petit bois pour l'utiliser." ] }, "collector:ThornWhip": { "NAME": "Fouet épineux", - "DESCRIPTION": "Infligez !D! dégâts et appliquez !M! hermit:Meurtri a TOUS les ennemis. NL Gagnez un *Surin." + "DESCRIPTION": "Infligez !D! dégâts et appliquez !M! de hermit:Meurtri à TOUS les ennemis. NL Obtenez un *Surin." }, "collector:Torchbearer": { "NAME": "Porteur du flambeau", - "DESCRIPTION": "Gagnez !M! expansioncontent:PV_temporaire. NL Épuisement.", - "UPGRADE_DESCRIPTION": "Si vous avez des expansioncontent:PV_temporaire, Épuisement. NL Gagnez !M! expansioncontent:PV_temporaire." + "DESCRIPTION": "Gagnez !M! expansioncontent:PV_temporaires. NL Épuisement.", + "UPGRADE_DESCRIPTION": "Si vous avez des expansioncontent:PV_temporaires, Épuisement. NL Gagnez !M! expansioncontent:PV_temporaires." }, "collector:WhirlingFlame": { "NAME": "Flamme tourbillonnante", - "DESCRIPTION": "Infligez !D! dégâts a TOUS les ennemis. NL Mettez une carte de votre défausse sur le dessus de votre pioche." + "DESCRIPTION": "Infligez !D! dégâts à TOUS les ennemis. NL Mettez une carte de votre défausse sur le dessus de votre pioche." }, "collector:VoidArmor": { "NAME": "Armure du Vide", - "DESCRIPTION": "TOUS le monde gagne !B! d'Armure et 1 bronze:Flou." + "DESCRIPTION": "TOUT le monde gagne !B! d'Armure et 1 de bronze:Flou." }, "collector:Wildfire": { "NAME": "Feu de forêt", "DESCRIPTION": "Infligez !D! dégâts pour chaque débuff unique sur l'ennemi." }, "collector:YouAreMine": { - "NAME": "Tu est mien!", - "DESCRIPTION": "Appliquez !M! Faiblesse. NL Appliquez !M! Vulnérable. Appliquez !clm2! collector:Malédiction." + "NAME": "VOUS ÊTES À MOI !", + "DESCRIPTION": "Appliquez !M! de Faiblesse. NL Appliquez !M! de Vulnérabilité. Appliquez !clm2! de collector:Condamnation." }, "collector:Whomp": { "NAME": "Whomp", - "DESCRIPTION": "Infligez !D! dégâts. NL Gagnez !M! expansioncontent:PV_temporaire. NL Épuisement." + "DESCRIPTION": "Infligez !D! dégâts. NL Gagnez !M! expansioncontent:PV_temporaires. NL Épuisement." }, "collector:AcidSlimeCard": { - "NAME": "Boue acide", - "DESCRIPTION": "Ajoutez !M! carte aléatoire coûtent 0 à votre main.", - "UPGRADE_DESCRIPTION": "Ajoutez !M! cartes aléatoires coûtent 0 à votre main." + "NAME": "Slime acide", + "DESCRIPTION": "Ajoutez !M! carte aléatoire coûtant 0 à votre main.", + "UPGRADE_DESCRIPTION": "Ajoutez !M! cartes aléatoires coûtant 0 à votre main." }, "collector:AugmenterCard": { - "NAME": "Augmenter", - "DESCRIPTION": "Perdez 3 PV. NL Gagnez !M! Force." + "NAME": "Dealer", + "DESCRIPTION": "Perdez 3 PV. NL Gagnez !M! de Force." }, "collector:BearCard": { - "NAME": "Endurer", + "NAME": "Balourd", "DESCRIPTION": "Gagnez !B! d'Armure. NL Enlevez l'Armure de l'ennemi. NL Infligez !D! dégâts." }, "collector:BlueSlaverCard": { - "NAME": "Esclave bleu", - "DESCRIPTION": "Infligez !D! dégâts. NL Appliquez 1 Faiblesse. NL Doublez la Faiblesse de l'ennemi." + "NAME": "Esclavagiste bleu", + "DESCRIPTION": "Infligez !D! dégâts. NL Appliquez 1 de Faiblesse. NL Doublez la Faiblesse de l'ennemi." }, "collector:BonfireSpiritsCard": { - "NAME": "Esprits du feu de joie", - "DESCRIPTION": "collector:Bûcher. NL Soignez !M! PV. NL Si la carte Épuiser etait Rare, augmentez vos PV max de 1." + "NAME": "Esprits du feu de camp", + "DESCRIPTION": "collector:Bûcher. NL Soignez-vous de !M! PV. NL Si la carte Épuisée était Rare, augmentez vos PV max de 1." }, "collector:BookOfStabbingCard": { - "NAME": "Livre du poignardage", - "DESCRIPTION": "Chaque fois que vous ingligez des dégâts non-bloquées, appliquez !M! collector:Malédiction." + "NAME": "Manuel d'assassinat", + "DESCRIPTION": "Chaque fois que vous ingligez des dégâts non-bloqués, appliquez !M! de collector:Condamnation." }, "collector:BronzeOrbCard": { - "NAME": "Orbe en bronze", - "DESCRIPTION": "Gagnez !B! d'Armure. NL Infligez !D! dégâts. NL La carte du haut de votre pioche coûtera 0 jusqu'à être jouée." + "NAME": "Orbe", + "DESCRIPTION": "Gagnez !B! d'Armure. NL Infligez !D! dégâts. NL La carte du haut de votre pioche coûtera 0 jusqu'à ce qu'elle soit jouée." }, "collector:ByrdCard": { - "NAME": "Vautours", + "NAME": "Oizo", "DESCRIPTION": "Infligez !D! dégâts 5 fois." }, "collector:CenturionCard": { "NAME": "Centurion", - "DESCRIPTION": "Gagnez !B! d'Armure. NL Gagnez !M! Dextérité." + "DESCRIPTION": "Gagnez !B! d'Armure. NL Gagnez !M! de Dextérité." }, "collector:ChosenCard": { "NAME": "Élu", - "DESCRIPTION": "Appliquez !M! Faiblesse. NL Si l'ennemi na pas l'intention d'attaquer, appliquez !clm2! Vulnérable." + "DESCRIPTION": "Appliquez !M! de Faiblesse. NL Si l'ennemi na pas l'intention d'attaquer, appliquez !clm2! de Vulnérabilité." }, "collector:ClericCard": { "NAME": "Clerc", - "DESCRIPTION": "collector:Bûcher. NL Gagnez !M! expansioncontent:PV_temporaire." + "DESCRIPTION": "collector:Bûcher. NL Gagnez !M! expansioncontent:PV_temporaires." }, "collector:CultistCard": { "NAME": "Cultiste", - "DESCRIPTION": "collector:Bûcher. NL Gagnez 1 Force au début de vos 3 prochain tour." + "DESCRIPTION": "collector:Bûcher. NL Gagnez 1 de Force au début de vos 3 prochains tours." }, "collector:DaggerCard": { "NAME": "Dague", "DESCRIPTION": "Perdez !M! PV. NL Infligez !D! dégâts." }, "collector:DarklingsCard": { - "NAME": "Ténébreux", - "DESCRIPTION": "collector:Bûcher. NL Infligez !D! dégâts. expansioncontent:Exhumer une carte collectée.", + "NAME": "Êtres sombres", + "DESCRIPTION": "collector:Bûcher. NL Infligez !D! dégâts. expansioncontent:Exhumez une carte Collectée.", "EXTENDED_DESCRIPTION": [ "Pour en créer 2 copies." ] }, "collector:DesignerInSpireCard": { "NAME": "Designer-In-Spire", - "DESCRIPTION": "Gagnez !M! expansioncontent:PV_temporaire. NL collector:Têtedetorche gagne \"Pioche 1 carte.\"" + "DESCRIPTION": "Gagnez !M! expansioncontent:PV_temporaires. NL collector:Tête_de_torche gagne \"Pioche 1 carte.\"" }, "collector:FinalBossCard": { "NAME": "Fin de partie", - "DESCRIPTION": "Enlevez l'invincibilité des ennemis et étourdissez-les. NL Épuisement." + "DESCRIPTION": "Enlevez l'Invincibilité de l'ennemi et Étourdissez-le. NL Épuisement." }, "collector:FaceTraderCard": { - "NAME": "Marchand de visage", - "DESCRIPTION": "Ajoutez !M! cartes aléatoires de toute couleur a votre main. NL Elle devienne Éthérée." + "NAME": "Échangeur de visage", + "DESCRIPTION": "Ajoutez !M! cartes aléatoires de n'importe quelle couleur dans votre main. NL Elles deviennent Éthérées." }, "collector:FatGremlinCard": { "NAME": "Gros diablotin", - "DESCRIPTION": "Infligez !D! dégâts. NL Appliquez !M! Faiblesse." + "DESCRIPTION": "Infligez !D! dégâts. NL Appliquez !M! de Faiblesse." }, "collector:FungiBeastCard": { "NAME": "Champi-bête", - "DESCRIPTION": "Appliquez !M! Vulnérable. NL Appliquez 1 Vulnérable a TOUS les ennemis." + "DESCRIPTION": "Appliquez !M! de Vulnérabilité. NL Appliquez 1 de Vulnérabilité à TOUS les ennemis." }, "collector:GiantHeadCardStageOne": { "NAME": "Tic", - "DESCRIPTION": "Au prochain tour, gagnez un *Toc." + "DESCRIPTION": "Au prochain tour, gagnez un *Tac." }, "collector:GiantHeadCardStageTwo": { - "NAME": "Toc", + "NAME": "Tac", "DESCRIPTION": "Au prochain tour, gagnez un *Coup *de *tête." }, "collector:GiantHeadCardStageThree": { "NAME": "Coup de tête", - "DESCRIPTION": "Infligez !D! dégâts a TOUS les ennemis." + "DESCRIPTION": "Infligez !D! dégâts à TOUS les ennemis." }, "collector:GremlinLeaderCard": { - "NAME": "Chef des diablotins", - "DESCRIPTION": "Ajoutez !M! diablotin collecté aléatoire a votre main." + "NAME": "Diablotin en chef", + "DESCRIPTION": "Ajoutez !M! Collectionables de Diablotin aléatoires dans votre main." }, "collector:GremlinNobCard": { - "NAME": "Diablotin bourgeois", - "DESCRIPTION": "Chaque fois que vous jouez une compétence, gagnez !M! Vigueur." + "NAME": "Diablotin Nob", + "DESCRIPTION": "Chaque fois que vous jouez une Compétence, gagnez !M! de Vigueur." }, "collector:GremlinWizardCard": { - "NAME": "Diablotin magicien", - "DESCRIPTION": "Au prochain tour, NL gagnez !M! Vigueur et 1 collector:Réserve." + "NAME": "Diablotin sorcier", + "DESCRIPTION": "Au prochain tour, NL gagnez !M! de Vigueur et 1 collector:Réserve." }, "collector:JawWormCard": { "NAME": "Mâchouilleur", @@ -530,87 +530,87 @@ }, "collector:LagavulinCard": { "NAME": "Lagavulin", - "DESCRIPTION": "TOUS les ennemis perdent !M! Force." + "DESCRIPTION": "TOUS les ennemis perdent !M! de Force." }, "collector:LivingWallCard": { "NAME": "Mur vivant", - "DESCRIPTION": "collector:Bûcher. NL Gagnez une carte améliorer aléatoire. NL Elle coûtera 0 jusqu'à être jouée." + "DESCRIPTION": "collector:Bûcher. NL Obtenez une carte Améliorée aléatoire. NL Elle coûtera 0 jusqu'à ce qu'elle soit jouée." }, "collector:LouseCard": { "NAME": "Pou", - "DESCRIPTION": "Gagnez 1 bronze:Flou. NL La prochaine fois que vous recevrez des dégâts non bloqués, gagnez !B! d'Armure." + "DESCRIPTION": "Gagnez 1 de bronze:Flou. NL La prochaine fois que vous recevrez des dégâts non-bloqués, gagnez !B! d'Armure." }, "collector:MadGremlinCard": { - "NAME": "Diablotin furieux", - "DESCRIPTION": "Gagnez !M! Force temporaire." + "NAME": "Diablotin fou", + "DESCRIPTION": "Gagnez !M! de Force Temporaire." }, "collector:MawCard": { - "NAME": "La gueule", + "NAME": "La Gueule", "DESCRIPTION": "Infligez !D! dégâts." }, "collector:MerchantCard": { "NAME": "Marchand", - "DESCRIPTION": "Ajoutez !M! cartes incolore aléatoire a votre main. NL Elle coûtent 0 a ce tour." + "DESCRIPTION": "Ajoutez !M! cartes incolores aléatoires dans votre main. NL Elle coûtent 0 ce tour." }, "collector:MushroomCard": { "NAME": "Champignon", - "DESCRIPTION": "Infligez !D! dégâts. NL Appliquez !M! Faiblesse et Vulnérable aléatoirement." + "DESCRIPTION": "Infligez !D! dégâts. NL Appliquez !M! de Faiblesse et de Vulnérabilité aléatoirement." }, "collector:MysticCard": { - "NAME": "Mystique", - "DESCRIPTION": "Gagnez !M! expansioncontent:PV_temporaire." + "NAME": "Soigneur", + "DESCRIPTION": "Gagnez !M! expansioncontent:PV_temporaires." }, "collector:NemesisCard": { - "NAME": "Nemesis", + "NAME": "Némésis", "DESCRIPTION": "Gagnez 1 Intangible." }, "collector:NlothCard": { "NAME": "N'Loth", - "DESCRIPTION": "collector:Bûcher. NL Ajoutez une carte rare aléatoire dans votre main. NL Elle coûtent 1 de moin.", - "UPGRADE_DESCRIPTION": "collector:Bûcher. NL Ajoutez une carte rare aléatoire dans votre main. NL Elle coûtera 0." + "DESCRIPTION": "collector:Bûcher. NL Ajoutez une carte Rare aléatoire dans votre main. NL Elle coûte 1 [E] de moins.", + "UPGRADE_DESCRIPTION": "collector:Bûcher. NL Ajoutez une carte Rare aléatoire dans votre main. NL Elle coûte 0." }, "collector:OrbWalkerCard": { - "NAME": "Gardien sphérique", - "DESCRIPTION": "Infligez !D! dégâts. NL Ajoutez !M! *Charbons a votre main." + "NAME": "L'Orbiste", + "DESCRIPTION": "Infligez !D! dégâts. NL Ajoutez !M! *Braises dans votre main." }, "collector:PointyCard": { - "NAME": "Pointue", - "DESCRIPTION": "Infligez !D! dégâts 2 fois. NL Piochez 1 carte." + "NAME": "Pointu", + "DESCRIPTION": "Infligez !D! dégâts deux fois. NL Piochez 1 carte." }, "collector:RanwidCard": { "NAME": "Ranwid", - "DESCRIPTION": "Gagnez 1 potion et une carte additionnelle à la fin du combat." + "DESCRIPTION": "Gagnez 1 Récompense de Potion et de Carte supplémentaire à la fin du combat." }, "collector:RedSlaverCard": { "NAME": "Esclavagiste rouge", "DESCRIPTION": "L'ennemi perd !M! Force pour ce tour." }, "collector:ReptomancerCard": { - "NAME": "Reptomancer", - "DESCRIPTION": "Gagnez !M! expansioncontent:PV_temporaire. NL collector:Têtedetorche gagne \"Applique !clm2! Poison a un ennemi aléatoire.\"" + "NAME": "Reptomancien", + "DESCRIPTION": "Gagnez !M! expansioncontent:PV_temporaires. NL collector:Tête_de_torche gagne \"Applique !clm2! de Poison à un ennemi aléatoire.\"" }, "collector:RepulsorCard": { - "NAME": "Répulseur", + "NAME": "Répugnant", "DESCRIPTION": "collector:Bûcher. NL Piochez !M! cartes." }, "collector:RomeoCard": { - "NAME": "Romeo", - "DESCRIPTION": "Votre prochaine attaque coûtera 0 et infligera !M! dégâts additionnelle." + "NAME": "Roméo", + "DESCRIPTION": "Votre prochaine Attaque coûtera 0 et infligera !M! dégâts supplémentaires." }, "collector:ScrapOozeCard": { - "NAME": "Limon de ferraille", - "DESCRIPTION": "collector:Bûcher. NL Perdez 3 PV. NL Ajoutez !M! attaques aléatoire a votre main. NL Elle coûteront 0 a ce tour." + "NAME": "Slime de ferraille", + "DESCRIPTION": "collector:Bûcher. NL Perdez 3 PV. NL Ajoutez !M! Attaques aléatoires dans votre main. NL Elle coûteront 0 ce tour." }, "collector:SentryCard": { "NAME": "Sentinelle", - "DESCRIPTION": "Infligez !D! dégâts. NL Appliquez !M! Faiblesse. NL Répétez s'il y a des *Sentinelle dans votre pile d'Épuisement." + "DESCRIPTION": "Infligez !D! dégâts. NL Appliquez !M! de Faiblesse. NL Répétez ceci s'il y a des *Sentinelles dans votre pile d'Épuisement." }, "collector:ShelledParasiteCard": { - "NAME": "Carapace parasitée", - "DESCRIPTION": "Gagnez !M! D'armure plaquée." + "NAME": "Parasite en carapace", + "DESCRIPTION": "Gagnez !M! *d'Armure expansioncontent:Plaquée." }, "collector:ShieldGremlinCard": { - "NAME": "Diablotin bouclier", + "NAME": "Diablotin à bouclier", "DESCRIPTION": "Gagnez !B! d'Armure." }, "collector:SnakePlantCard": { @@ -622,79 +622,79 @@ "DESCRIPTION": "Infligez !D! dégâts. NL Piochez 1 carte." }, "collector:SneckoCard": { - "NAME": "Snecko", + "NAME": "Geckobra", "DESCRIPTION": "Piochez !M! cartes. NL sneckomod:Confondez votre main." }, "collector:SphericGuardianCard": { "NAME": "Gardien sphérique", - "DESCRIPTION": "Gagnez !M! expansioncontent:Flou." + "DESCRIPTION": "Gagnez !M! de expansioncontent:Flou." }, "collector:SpikerCard": { "NAME": "Épineux", - "DESCRIPTION": "Gagnez !M! piques." + "DESCRIPTION": "Gagnez !M! d'Épines." }, "collector:SpikeSlimeCard": { - "NAME": "Slime à pointes", - "DESCRIPTION": "Gagnez !B! d'Armure. NL Chaque fois que vous êtes attaqué à ce tour, Infligez !M! dégâts en retour." + "NAME": "Slime épineux", + "DESCRIPTION": "Gagnez !B! d'Armure. NL Chaque fois que vous êtes attaqué ce tour, infligez !M! dégâts en retour." }, "collector:SpireGrowthCard": { - "NAME": "Croissance du spire", - "DESCRIPTION": "L'ennemi subit !M! dégâts a la fin de chacun de ses tours." + "NAME": "Excroissance de la Tour", + "DESCRIPTION": "L'ennemi subit !M! dégâts à la fin de chacun de ses tours." }, "collector:SpireShieldCard": { - "NAME": "Bouclier du spire", - "DESCRIPTION": "Gagnez !M! Dextérité." + "NAME": "Bouclier de la Tour", + "DESCRIPTION": "Gagnez !M! de Dextérité." }, "collector:SpireSpearCard": { - "NAME": "Lance du spire", - "DESCRIPTION": "Gagnez !M! Force." + "NAME": "Lance de la Tour", + "DESCRIPTION": "Gagnez !M! de Force." }, "collector:SsserpentCard": { "NAME": "Ssserpent", - "DESCRIPTION": "Infligez !D! dégâts. NL Ajoutez *Doute a votre main." + "DESCRIPTION": "Infligez !D! dégâts. NL Ajoutez un *Doute dans votre main." }, "collector:TaskmasterCard": { "NAME": "Tyran", - "DESCRIPTION": "Appliquez !clm2! collector:Malédiction. NL Infligez !D! dégâts. NL Gagnez !M! Force." + "DESCRIPTION": "Appliquez !clm2! de collector:Condamnation. NL Infligez !D! dégâts. NL Gagnez !M! de Force." }, "collector:ThievesCard": { - "NAME": "Voleur", - "DESCRIPTION": "Prennais !M! dégâts de moins a ce tour." + "NAME": "Brigands", + "DESCRIPTION": "Prenez !M! dégâts de moins des attaques ce tour." }, "collector:TorchHeadCard": { "NAME": "Tête de torche", - "DESCRIPTION": "Ajoutez une carte appel aléatoire de Tête de torche dans votre main.. NL Elle coûtera a ce tour." + "DESCRIPTION": "Ajoutez une carte Appel aléatoire de Tête de torche dans votre main.. NL Elle coûte 0 ce tour." }, "collector:TransientCard": { - "NAME": "Éphémère", - "DESCRIPTION": "Gagnez !M! Force. NL Meurt dans 6 tour." + "NAME": "L'Éphémère", + "DESCRIPTION": "Gagnez !M! de Force. NL Mourrez dans 6 tours." }, "collector:VagrantCard": { "NAME": "Vagabond", - "DESCRIPTION": "Gagnez !M! collector:Réserve. NL Ajoutez une *Honte dans votre main." + "DESCRIPTION": "Gagnez !M! collector:Réserves. NL Ajoutez une *Honte dans votre main." }, "collector:WomanInBlueCard": { "NAME": "Femme en bleu", - "DESCRIPTION": "Gagnez une potion aléatoire. NL Perdez TOUTES vos potion a la fin du combat." + "DESCRIPTION": "Gagnez une potion aléatoire. NL Perdez TOUTES vos potions à la fin du combat." }, "collector:WrithingMassCard": { - "NAME": "Foule frémissante", - "DESCRIPTION": "Scrutez !M!. NL Jouez la carte au dessus de votre pioche." + "NAME": "Masse agonisante", + "DESCRIPTION": "Scrutez !M! cartes. NL Jouez la carte au dessus de votre pioche." }, "collector:DefaultCollectibleCard": { "NAME": "Coque sans âme", - "DESCRIPTION": "Cet ennemi n'a pas encore de collection unique! NL Gagnez !M! Force and Dextérité." + "DESCRIPTION": "Cet ennemi n'a pas encore de Collectionable unique! NL Gagnez !M! de Force et de Dextérité." }, "collector:ShootingStar": { "NAME": "Étoile filante", - "DESCRIPTION": "La premiere fois que vous collector:Bûcher une attaque a ce tour, gagnez en 1 copie. NL Elle coûtera 0 jusqu'à être jouée." + "DESCRIPTION": "La première fois que vous mettez une Attaque au collector:Bûcher ce tour, obtenez une copie de celle-ci. NL Elle coûte 0 jusqu'à ce qu'elle soit jouée." }, "collector:CollectorCard": { "NAME": "Ouroboros", - "DESCRIPTION": "collector:Bûcher. NL Appliquez !M! Faiblesse. NL Appliquez !M! Vulnérable. NL Gagnez !clm2! PV_temporaire." + "DESCRIPTION": "collector:Bûcher. NL Appliquez !M! de Faiblesse. NL Appliquez !M! de Vulnérabilité. NL Gagnez !clm2! PV_temporaires." }, "collector:Sapped": { - "NAME": "Saper", - "DESCRIPTION": "collector:Bûcher. NL Épuisement. NL Ne peut pas être enlever de votre deck." + "NAME": "Sapé", + "DESCRIPTION": "collector:Bûcher. Lorsqu'elle est piochée, perdez [E]. NL Épuisement. NL Ne peut pas être enlevée de votre deck." } -} \ No newline at end of file +} diff --git a/src/main/resources/collectorResources/localization/fra/CharacterStrings.json b/src/main/resources/collectorResources/localization/fra/CharacterStrings.json index 1120c0d22f..7e829b206d 100644 --- a/src/main/resources/collectorResources/localization/fra/CharacterStrings.json +++ b/src/main/resources/collectorResources/localization/fra/CharacterStrings.json @@ -6,8 +6,8 @@ ], "TEXT": [ "La célèbre sorcière de la ville. NL Revendique les âmes et les reliques.", - "NL Votre bâton brille d'un bûcher vert...", - "Naviguer dans une rue non éclairée, vous rencontrez plusieurs personnages encapuchonnés au milieu d'un sombre rituel. À mesure que vous approchez, ils se tournent vers vous à l'unisson. Le plus grand d'entre eux montre ses dents et tend vers vous une longue main pâle.. NL ~\"Rejoins~ ~nous~ ~l'horrible~ ,~ ~et~ ~ressens~ ~la~ ~chaleur~ ~de~ ~la~ ~Cime.\"~" + "NL Votre bâton brille d'une lueur verte...", + "Naviguant dans une rue non éclairée, vous rencontrez plusieures figures encapuchonnées au milieu d'un rituel. Alors que vous vous approchez, ils se tournent vers vous en unisson. L'un des plus grands montre ses crocs et étire sa longue et pâle main. NL ~\"Rejoignez~ ~nous~ ~être~ ~spectral,~ ~et~ ~ressentez~ ~la~ ~chaleur~ ~de~ ~la~ ~Tour.\"~" ] } -} \ No newline at end of file +} diff --git a/src/main/resources/collectorResources/localization/fra/KeywordStrings.json b/src/main/resources/collectorResources/localization/fra/KeywordStrings.json index 6bae1840f9..c36ff886c6 100644 --- a/src/main/resources/collectorResources/localization/fra/KeywordStrings.json +++ b/src/main/resources/collectorResources/localization/fra/KeywordStrings.json @@ -3,23 +3,25 @@ "PROPER_NAME": "Affligé", "NAMES": [ "affligé", - "afflicted" + "affligés", + "afflicted" ], - "DESCRIPTION": "Les créature sont affligé quand elle sont #yVulnérable et #yAffaiblis." + "DESCRIPTION": "Une créature est affligée quand elle est #yVulnérable et #yAffaiblie." }, { - "PROPER_NAME": "Malédiction", + "PROPER_NAME": "Condamnation", "NAMES": [ - "malédiction", - "maudite", - "doom", + "condamnation", + "condamnée", + "doom", "doomed" ], - "DESCRIPTION": "Les créatures maudites perdent des PV au début de leur tour, ensuite la malédiction est retirez #bsauf_si la créature est #yAffligé (#yAffaiblis et #yVulnérable [REMOVE_SPACE])." + "DESCRIPTION": "Les créatures condamnées perdent des PV au début de leur tour, ensuite la condamnation est retirée #bsauf #bsi la créature est #yAffligée (#yAffaiblie et #yVulnérable en même temps)." }, { "PROPER_NAME": "Bûcher", "NAMES": [ + "pyre", "bûcher" ], "DESCRIPTION": "Nécessite d'épuiser une carte en main en plus de payer son coût en énergie." @@ -27,23 +29,27 @@ { "PROPER_NAME": "Réserve", "NAMES": [ + "reserve", + "reserves", "réserve", "réserves" ], - "DESCRIPTION": "Un type alternatif d'énergie stockée au fil des tours." + "DESCRIPTION": "Un autre type d'énergie qui est stockée entre les tours." }, { - "PROPER_NAME": "MegaÉthérée", + "PROPER_NAME": "Méga-Éthérée", "NAMES": [ - "megaÉthérée" + "megathereal", + "méga-éthérée" ], - "DESCRIPTION": "Les cartes MegaÉthérée vont dans la défausse quand jouez ou a la fin du tour, peu importe ou elle sont." + "DESCRIPTION": "Les cartes Méga-Éthérées quand elles sont jouées ET à la fin de votre tour, peu importe leur emplacement." }, { "PROPER_NAME": "Tête de torche", "NAMES": [ - "têtedetorche" + "torchhead", + "tête_de_torche" ], - "DESCRIPTION": "Quand vous avez des #yPV #yTemporaire, chaque attaque que vous jouez déclenche Tête de torche." + "DESCRIPTION": "Lorsque vous avez des #yPV #yTemporaires, chaque Attaque que vous jouez déclenche Tête de Torche." } -] \ No newline at end of file +] diff --git a/src/main/resources/collectorResources/localization/fra/PotionStrings.json b/src/main/resources/collectorResources/localization/fra/PotionStrings.json index 871bd21a63..bf533c88c7 100644 --- a/src/main/resources/collectorResources/localization/fra/PotionStrings.json +++ b/src/main/resources/collectorResources/localization/fra/PotionStrings.json @@ -2,35 +2,35 @@ "collector:MiniCursePotion": { "NAME": "Extrait d'âme", "DESCRIPTIONS": [ - "Applique #b1 #yFaiblesse, #b1 #yVulnérable, et #b6 #yMaudit.", - "Applique #b", - " #yFaiblesse, #b", - " #yVulnérable, and #b", - " #yMaudit [REMOVE_SPACE]." + "Appliquez #b1 de #yFaiblesse, #b1 de #yVulnérabilité, et #b6 de #yCondamnation.", + "Appliquez #b", + " de #yFaiblesse, #b", + " de #yVulnérabilité, et #b", + " de #yCondamnation [REMOVE_SPACE]." ] }, "collector:ReservePotion": { "NAME": "Potion de réserve", "DESCRIPTIONS": [ - "Gagnez #b2 #yRéserve.", + "Gagnez #b2 de #yRéserve.", "Gagnez #b", - " #yRéserve [REMOVE_SPACE]." + " de #yRéserve [REMOVE_SPACE]." ] }, "collector:DebuffDoublePotion": { "NAME": "Huiles d'embaumement", "DESCRIPTIONS": [ - "Double les débuff de la cible.", - "Multiplie les débuff de la cible par #b", + "Doublez les débuffs de la cible.", + "Multipliez les débuff de la cible par #b", "." ] }, "collector:TempHPPotion": { - "NAME": "Eau gangrené", + "NAME": "Eau-Fel", "DESCRIPTIONS": [ - "Gagnez #b8 #yPV #ytemporaire", + "Gagnez #b8 #yPV #yTemporaires", "Gagnez #b", - " #yPV #ytemporaire [REMOVE_SPACE]." + " #yPV #yTemporaires [REMOVE_SPACE]." ] } } diff --git a/src/main/resources/collectorResources/localization/fra/PowerStrings.json b/src/main/resources/collectorResources/localization/fra/PowerStrings.json index 452de3b4bd..46c50daf2f 100644 --- a/src/main/resources/collectorResources/localization/fra/PowerStrings.json +++ b/src/main/resources/collectorResources/localization/fra/PowerStrings.json @@ -1,28 +1,28 @@ { "collector:AddCopyNextTurn": { - "NAME": "Gagner une carte", + "NAME": "Gain de carte", "DESCRIPTIONS": [ - "Au début de votre tour, ajoute ", + "Au début de votre tour, ajoutez ", " dans votre main." ] }, "collector:BindingCall": { "NAME": "Appel contraignant", "DESCRIPTIONS": [ - "Chaque fois que vous perdez tout vos #yPV #ytemporaire, applique #b de", - " #yMalédiction a TOUS les enemies.", + "Chaque fois que vous perdez tout vos #yPV #yTemporaires, appliquez #b de", + " #yCondamnation à TOUS les enemies.", "Translator Note: NOT USED" ] }, "collector:CantTouchThis": { "NAME": "Intouchable", "DESCRIPTIONS": [ - "Chaque fois que vous bloquez entièrement une attaque, applique #b de", - " #yMalédiction a l'attaquent." + "Chaque fois que vous bloquez entièrement une Attaque, appliquez #b de", + " #yCondamnation à l'attaquant." ] }, "collector:Crackle": { - "NAME": "Crépiter", + "NAME": "Crépitation", "DESCRIPTIONS": [ "Au début de votre tour, gagnez #b1 #yRéserve.", "Au début de votre tour, gagnez #b", @@ -32,49 +32,49 @@ "collector:DarkLordForm": { "NAME": "Forme du Seigneur des Ténèbres", "DESCRIPTIONS": [ - "Au début de votre tour, joue #yTu #yEst #yMien a un ennemi aléatoire.", - "Au début de votre tour, joue #b", - " copie de #yTu #yEst #yMien a un ennemi aléatoire." + "Au début de votre tour, jouez #yVous #yÊtes #yÀ #yMoi sur un ennemi aléatoire.", + "Au début de votre tour, jouez #b", + " copies de #yVous #yÊtes #yÀ #yMoi sur un ennemi aléatoire." ] }, "collector:DarkLordFormPlus": { "NAME": "Forme du Seigneur des Ténèbres+", "DESCRIPTIONS": [ - "Au début de votre tour, joue #yTu #yEst #yMien+ a un ennemi aléatoire.", - "Au début de votre tour, joue #b", - " copie de #yTu #yEst #yMien+ a un ennemi aléatoire." + "Au début de votre tour, jouez #yVous #yÊtes #yÀ #yMoi+ sur un ennemi aléatoire.", + "Au début de votre tour, jouez #b", + " copies de #yVous #yÊtes #yÀ #yMoi+ sur un ennemi aléatoire." ] }, "collector:DoMayhem": { "NAME": "Faire du chaos", "DESCRIPTIONS": [ "Au début de votre tour, si un ennemi a #b", - " ou plus de #yMalédiction, vous jouez la carte au sommet de votre pioche.", - " ou plus de #yMalédiction, vous jouez les #b", - " cartes du sommet de votre pioche." + " de #yCondamnation ou plus, jouez la carte en haut de votre pioche.", + " de #yCondamnation ou plus, jouez les #b", + " cartes en haut de votre pioche." ] }, "collector:Doom": { - "NAME": "Malédiction", + "NAME": "Condamnation", "DESCRIPTIONS": [ - "Perds #b", - " PV au début de sont tour, Retirez toutes les #yMalédiction sauf si il est #yAffligé." + "Perd #b", + " PV au début de son tour, retirant toute la #yCondamnation sauf si ceci est #yAffligé." ] }, "collector:DoublePlayCollectibles": { - "NAME": "Objets de collection multi-utilisation", + "NAME": "Collectionable rejouable", "DESCRIPTIONS": [ - "Les cartes collecté sont jouez 2 fois.", - "Les cartes collecté sont jouez #b", + "Les cartes Collectées sont jouées deux fois.", + "Les cartes Collectées sont jouées #b", " fois de plus." ] }, "collector:DemisePower": { - "NAME": "Décès inévitable", + "NAME": "Déchéance inévitable", "DESCRIPTIONS": [ - "Préviens la prochaine fois que la #yMalédiction de l'ennemi se retire.", - "Préviens les #b prochaine", - " fois que la #yMalédiction de l'ennemi se retire." + "Empêchez la prochaine perte de #yCondamnation de l'ennemi.", + "Empêchez les #b", + " prochaines pertes de #yCondamnation de l'ennemi." ] }, "collector:FeelMyPain": { @@ -88,37 +88,37 @@ "NAME": "Finalisé", "DESCRIPTIONS": [ "Quand ", - " meurts, soigne #b", + " meurt, soignez-vous de #b", " PV." ] }, "collector:Karma": { "NAME": "Karma", "DESCRIPTIONS": [ - "A la fin de votre tour, si un ennemi est #yAffligé [REMOVE_SPACE], gagnez #b", + "À la fin de votre tour, si un ennemi est #yAffligé [REMOVE_SPACE], gagnez #b", " #yd'Armure." ] }, "collector:NextAttackAppliesDoom": { - "NAME": "Attaque maudite", + "NAME": "Attaque condamnée", "DESCRIPTIONS": [ - "Votre prochaine attaque durent se tour applique #b", - " #yMalédiction." + "Votre prochaine Attaque durant ce tour applique #b", + " de #yCondamnation." ] }, "collector:AttacksApplyDoomPower": { - "NAME": "Attaques maudite", + "NAME": "Attaques condamnées", "DESCRIPTIONS": [ - "Vos attaque durent se tour applique #b", - " #yMalédiction." + "Vos Attaques durant ce tour applique #b", + " de #yCondamnation." ] }, "collector:NextCollectedTwice": { - "NAME": "Doublez", + "NAME": "Doubler la mise", "DESCRIPTIONS": [ - "Votre prochaine carte collecté durent se tour et jouez 2 fois.", - "Vos prochaine #b", - " carte collecté durent se tour sont jouez 2 fois." + "Votre prochaine carte Collectée durant ce tour est jouée deux fois.", + "Vos #b", + " prochaines cartes Collectées durant ce tour sont jouées deux fois." ] }, "collector:NextTurnReserve": { @@ -132,8 +132,8 @@ "collector:Omen": { "NAME": "Présage", "DESCRIPTIONS": [ - "Chaque fois que vous jouez une carte #yCollecté, gagnez #b", - " #yForce." + "Chaque fois que vous jouez une carte #yCollectée, gagnez #b", + " de #yForce." ] }, "collector:ProtectingCall": { @@ -161,51 +161,51 @@ ] }, "collector:Soulforge": { - "NAME": "Forgeâme", + "NAME": "Forge d'âme", "DESCRIPTIONS": [ - "Au début de votre tour, ajoute #b1 #yCharbon a votre main.", - "Au début de votre tour, ajoute #b", - " #yCharbons a votre main." + "Au début de votre tour, ajoutez #b1 #yBraise dans votre main.", + "Au début de votre tour, ajoutez #b", + " #Braises dans votre main." ] }, "collector:StrengthOverTurns": { "NAME": "Potentiel", "DESCRIPTIONS": [ - "Au début de votre tour, gagnez #b", - " #yForce.", + "Au début de prochain tour, gagnez #b", + " de #yForce.", "Au début de vos #b", - " tours, gagnez #b" + " prochains tours, gagnez #b" ] }, "collector:Suffering": { "NAME": "Souffrance", "DESCRIPTIONS": [ - "Chaque fois que vous appliquez #yFaiblesse or #yVulnérable, appliquez aussi #b", - " #yMalédiction." + "Chaque fois que vous appliquez de la #yFaiblesse ou de la #yVulnérabilité, appliquez aussi #b", + " de #yCondamnation." ] }, "collector:TorchHead": { "NAME": "Tête de torche", "DESCRIPTIONS": [ - "Chaque fois que vous jouez une #yAttaque, si vous avez des #yPV #ytemporaire, Tête de torche: NL ", + "Lorsque que vous jouez une #yAttaque, si vous avez des #yPV #ytemporaire, Tête de torche: NL ", "Applique #b", - " #yMalédiction a un ennemi aléatoire.", - "Infliges #b", - " dégats a TOUS les ennemis.", + " de #yCondamnation a un ennemi aléatoire.", + "Inflige #b", + " dégâts a TOUS les ennemis.", "Vous accorde #b", " #yd'Armure.", - " #yPoison a un ennemi aléatoire.", - "Vous pioche #b", + " de #yPoison a un ennemi aléatoire.", + "Vous fait piocher #b", " carte.", " cartes." ] }, "collector:IncreasedCollectionDraw": { - "NAME": "Augmentation de la pile de collection", + "NAME": "Pioche de la Collection augmentée", "DESCRIPTIONS": [ - "Piochez #b1 carte collecté additionnel.", + "Piochez #b1 carte Collectée supplémentaire.", "Piochez #b", - " cartes collectées additionnel." + " cartes Collectées supplémentaires." ] }, "collector:MastersCall": { @@ -217,110 +217,110 @@ ] }, "collector:LouseCard": { - "NAME": "Se détendre", + "NAME": "Recroquevillement", "DESCRIPTIONS": [ - "La prochaine fois que vous subirez des dégâts non bloqués, gagnez #b", + "La prochaine fois que vous subirez des dégâts non-bloqués, gagnez #b", " #yd'Armure." ] }, "collector:MadGremlinCard": { - "NAME": "En colère", + "NAME": "En Colère", "DESCRIPTIONS": [ - "Si vous subissez des dégâts non bloqués à ce tour, ajoutez un #yDiablotin #yÉnervé a votre main.", - "Si vous subissez des dégâts non bloqués à ce tour, ajoutez #b", - " #yDiablotin #yÉnervé a votre main." + "Si vous subissez des dégâts non-bloqués ce tour, ajoutez un #yDiablotin #yÉnervé dans votre main.", + "Si vous subissez des dégâts non-bloqués ce tour, ajoutez #b", + " #yDiablotins #yÉnervés dans votre main." ] }, "collector:GremlinWizardCard": { - "NAME": "Recharger", + "NAME": "Recharge", "DESCRIPTIONS": [ "Au prochain tour, gagnez #b", - " #yVigueur." + " de #yVigueur." ] }, "collector:ThievesCard": { "NAME": "Ruse", "DESCRIPTIONS": [ "Prenez #b", - " dégâts en moins des attaques se tour." + " de dégâts en moins des Attaques ce tour." ] }, "collector:BookOfStabbingCard": { - "NAME": "Poignardé", + "NAME": "Poignardeur", "DESCRIPTIONS": [ - "Chaque fois que vous infligez des dégâts non bloqués, appliquez #b", - " #yMalédiction." + "Chaque fois que vous infligez des dégâts non-bloqués, appliquez #b", + " de #yCondamnation." ] }, "collector:TransientCard": { "NAME": "Déclin", "DESCRIPTIONS": [ - "A la fin de votre tour, #rmeurt.", + "À la fin de votre tour, #rmourrez.", "Dans #b", - " tours, #rmeurt." + " tours, #rmourrez." ] }, "collector:ReptomancerCard": { "NAME": "Appel toxique", "DESCRIPTIONS": [ - "A la fin de votre tour, si vous avez des #yPV #ytemporaire, appliquez #b", - " #yPoison a un ennemi aléatoire." + "À la fin de votre tour, si vous avez des #yPV #yTemporaires, appliquez #b", + " de #yPoison a un ennemi aléatoire." ] }, "collector:MoreBlockWithTempHP": { - "NAME": "Heaume à dé à coudre", + "NAME": "Heaume à coudre", "DESCRIPTIONS": [ - "Quand vous avez des #yPV #ytemporaire, gagnez #b", - " #yd'Armure en plus des cartes." + "Lorsque vous avez des #yPV #yTemporaires, gagnez #b", + " #yd'Armure supplémentaire des cartes jouées." ] }, "collector:NextTurnVigor": { "NAME": "Vigueur au prochain tour", "DESCRIPTIONS": [ "Au début de votre prochain tour, gagnez #b", - " #yVigueur." + " de #yVigueur." ] }, "collector:AcidSlimeCard": { "NAME": "Duplication visqueuse", "DESCRIPTIONS": [ - "Votre prochaine #yAttaque ou #yCompétence durent ce tour et jouez 2 fois.", - "Vos prochaines #b", - " #yAttaque ou #yCompétence durent ce tour et jouez 2 fois." + "Votre prochaine #yAttaque ou #yCompétence durant ce tour est jouée deux fois.", + "Vos #b", + " prochaines #yAttaques ou #yCompétences durant ce tour sont jouées deux fois." ] }, "collector:GremlinNobCard": { "NAME": "Colère", "DESCRIPTIONS": [ "Chaque fois que vous jouez une #yCompétence, gagnez #b", - " #yVigueur." + " de #yVigueur." ] }, "collector:LanternFlare": { "NAME": "Roussi", "DESCRIPTIONS": [ - "A la fin de sont tour, gagnez #b", - " #yMalédiction." + "À la fin de son tour, gagne #b", + " de #yCondamnation." ] }, "collector:WomanInBlueCard": { "NAME": "Femme en bleu", "DESCRIPTIONS": [ - "A la fin du combat, perdez toutes vos potions." + "À la fin du combat, perdez toutes vos potions." ] }, "collector:ShootingStar": { "NAME": "Étoile filante", "DESCRIPTIONS": [ - "La première fois que vous mettez au #yBûcher une #yAttaque a chaque tour, retournez la dans votre main. Elle coûtera #b0 jusqu'à ce qu'elle soit jouée.", + "La première fois que vous mettez au #yBûcher une #yAttaque à chaque tour, remettez-la dans votre main. Elle coûtera #b0 jusqu'à ce qu'elle soit jouée.", "Les #b", - " première fois que vous mettez au #yBûcher une #yAttaque a chaque tour, retournez les dans votre main. Elles coûteront #b0 jusqu'à ce qu'elle soit jouée." + " premières que vous mettez au #yBûcher une #yAttaque à chaque tour, remettez-la dans votre main. Elles coûteront #b0 jusqu'à ce qu'elle soient jouées." ] }, "collector:LoseHpNextTurn": { - "NAME": "Marqué par la mort", + "NAME": "Marqué par la Mort", "DESCRIPTIONS": [ - "A la fin de son tour, perd #b", + "À la fin de son tour, perd #b", " PV." ] } diff --git a/src/main/resources/collectorResources/localization/fra/RelicStrings.json b/src/main/resources/collectorResources/localization/fra/RelicStrings.json index 0169216ba9..a6734375e0 100644 --- a/src/main/resources/collectorResources/localization/fra/RelicStrings.json +++ b/src/main/resources/collectorResources/localization/fra/RelicStrings.json @@ -1,6 +1,6 @@ { "collector:EmeraldTorch": { - "NAME": "Torche emeraude", + "NAME": "Torche en émeraude", "FLAVOR": "Les feux de la cupidité ne s'éteignent jamais.", "DESCRIPTIONS": [ "Commencez chaque combat avec #b1 #ycollector:Réserve." @@ -11,114 +11,116 @@ "FLAVOR": "Les flammes en constante évolution reflètent la faveur de la fortune.", "DESCRIPTIONS": [ "Remplace ", - ".[] Au début de chaque combat, ajouter un #yCharbon dans votre main et gagnez #b1 #ycollector:Réserve. La première fois que vous #yÉpuisez un #yCharbon chaque tour, gagnez #b1 #ycollector:Réserve." + "[] [REMOVE_SPACE]. Au début de chaque combat, ajoutez une #yBraise dans votre main et gagnez #b1 #ycollector:Réserve [REMOVE_SPACE]. La première fois que vous #yÉpuisez une #yBraise chaque tour, gagnez #b1 #ycollector:Réserve." ] }, "collector:HolidayCoal": { "NAME": "Charbon Krampien", - "FLAVOR": "\"Intrigant! Mais pourquoi seulement des cheminées spécifiques?\" - Ranwid", + "FLAVOR": "\"Intrigant! Mais pourquoi que des cheminées spécifiques?\" - Ranwid", "DESCRIPTIONS": [ - "Quand vous piochiez dans une pile de collection vide, vous piochez a la place un #yMèche #yChanceuse." + "Lorsque vous auriez dû piochez dans une pile de Collection vide, piochez une #yMèche #yProvidentielle à la place." ] }, "collector:BagOfTricks": { - "NAME": "Sac à malice", - "FLAVOR": "Scabreux.", + "NAME": "Sac à malices", + "FLAVOR": "Complexe.", "DESCRIPTIONS": [ "Au début de chaque combat, piochez #b", - " carte collecté." + " cartes Collectées." ] }, "collector:JadeRing": { "NAME": "Bague en jade", - "FLAVOR": "le jade est le symbole de l'honnêteté.", + "FLAVOR": "Le jade est le symbole de l'honnêteté.", "DESCRIPTIONS": [ - "Chaque fois qu'un ennemie non-sbire #ycollector:Maudit meurt, gagnez #b", - " Ames." + "Les ennemis prennent #b", + " dégâts supplémentaires de la #ycollector:Condamnation [REMOVE_SPACE]." ] }, "collector:SoullitLamp": { - "NAME": "Lampe éclairée par des âme", + "NAME": "Lampe des Âmes", "FLAVOR": "Une décoration macabre. Les crépitements du feu sont remplacés par des gémissements bourdonnants.", "DESCRIPTIONS": [ - "A l'obtention, gagnez #b3 #yEssence. Au début du combat, ajoutez un #yCharbon dans votre main." + "Lorsque vous récupérez cette relique, gagnez #b3 #yEssence [REMOVE_SPACE]. Au début du combat, ajoutez une #yBraise dans votre main." ] }, "collector:ThimbleHelm": { - "NAME": "Heaume à dé à coudre", + "NAME": "Heaume à coudre", "FLAVOR": "Porté par les plus petits héros du Spire.", "DESCRIPTIONS": [ "Commencez chaque combat avec #b", - " #yPV_temporaire. Pendant que vous avez des #yPV_temporaire, les cartes donne #b1 #yd'Armure additionnel." + " #yPV_temporaires. Lorsque vous avez des #yPV_temporaires, les cartes procurent #b1 #yd'Armure supplémentaire." ] }, "collector:Incense": { "NAME": "Encens", "FLAVOR": "Une forme désuète de clarification mentale.", "DESCRIPTIONS": [ - "Vous ne pouvez pas gagner #yFaiblesse, #yVulnérable ou #yFragilité pendant que vous êtes #yAffaiblis, #yVulnérable ou #yFragilisé." + "Vous ne pouvez pas gagner de #yFaiblesse [REMOVE_SPACE], de #yVulnérabilité ou de #yFragilité lorsque que vous êtes #yAffaibli, #yVulnérable ou #yFragilisé [REMOVE_SPACE]." ] }, "collector:FuelCanister": { "NAME": "Bidon de carburant", "FLAVOR": "Dégoûtant.", "DESCRIPTIONS": [ - "A la fin de votre tour, #yRetenez la carte la plus coûteuse de votre en main." + "À la fin de votre tour, #yRetenez la carte la moins coûteuse dans votre main." ] }, "collector:AutoCurser": { "NAME": "Talisman maléfique", - "FLAVOR": "\"Quand je met ça, mon taux de coups aux orteils a considérablement augmenté. je pense que ça marche!\" - Ranwid", + "FLAVOR": "\"Quand je met ça, mon taux de coups aux orteils a considérablement augmenté. Je crois que ça marche!\" - Ranwid", "DESCRIPTIONS": [ - "Au début du combat, appliquez #b1 #yFaiblesse et #yVulnérable a un ennemie aléatoire." + "Au début du combat, appliquez #b1 de #yFaiblesse et de #yVulnérabilité à un ennemi aléatoire." ] }, "collector:Bagpipes": { "NAME": "Cornemuses", - "FLAVOR": "On dit que cet instrument redouté a rendu Kublai complétement fou..", + "FLAVOR": "On dit que cet instrument redouté a rendu Kublai le Grand complétement fou.", "DESCRIPTIONS": [ - "Quand vous appliquez #yFaiblesse ou #yVulnérable, augmente le montent appliquez de #b1." + "Quand vous appliquez de la #yFaiblesse ou de la #yVulnérabilité sur un ennemi, augmentez le montent appliqué de #b1 [REMOVE_SPACE]." ] }, "collector:BottledCollectible": { "NAME": "Cerveau en bouteille", "FLAVOR": "Récupéré dans le laboratoire d'un sorcier.", "DESCRIPTIONS": [ - "A l'obtention, #yAméliorer une carte de votre collection. Commencez le combat avec cette carte au sommet de la pile de collection.", + "Lorsque vous récupérez cette relique, #yAméliorez une carte de votre Collection. Commencez le combat avec cette carte au sommet de la pile de Collection.", "Commencez le combat avec ", - " au sommet de la pile de collection.", - "Sélectionnez une carte a mettre en bouteille " + " au sommet de la pile de Collection.", + "Sélectionnez une carte à mettre en bouteille pour ", + "La carte embouteillée a été #rretirée de votre deck, la relique ne fonctionne plus." ] }, "collector:TheContract": { - "NAME": "Le contrat", + "NAME": "Le Contrat", "FLAVOR": "Signez avec votre sang.", "DESCRIPTIONS": [ - "A l'obtention, gagnez #b10 #yEssence." + "Lorsque vous récupérez cette relique, gagnez #b", + " #yEssences [REMOVE_SPACE]." ] }, "collector:ForbiddenFruit": { "NAME": "Fruit défendu", "FLAVOR": "Cette espèce de fruit semble complètement inconnue.", "DESCRIPTIONS": [ - "A l'obtention, Choissisez et obtenez une carte commune, peu commune, et rare parmis toutes celle disponible. ensuite, obtenez la #yNécrodiction.", - "Choisissez une carte rare à ajouter à votre deck.", - "Choisissez une carte peu commune à ajouter à votre deck.", - "Choisissez une carte commune à ajouter à votre deck." + "Lorsque vous récupérez cette relique, ajoutez un #rParasite dans votre deck et gagnez #b", + " PV Max. Commencez chaque combat avec #b", + " de #yDextérité." ] }, "collector:RoughDiamond": { "NAME": "Diamant brut", "FLAVOR": "Avec la démolition des mines, même cette pierre ternie a de la valeur.", "DESCRIPTIONS": [ - "Chaque fois que vous jouez une carte rare coûtent #b2 ou plus, gagnez [E] ." + "La première fois que vous jouez une carte #yRare chaque tour, gagnez [E] . Lorsque vous récupérez cette relique, obtenez une récompense de carte #yRare [REMOVE_SPACE].", + "Le Savoir!" ] }, "collector:BlockedChakra": { "NAME": "Chakra bloqué", - "FLAVOR": "Une élongation musculaire suffit.", + "FLAVOR": "Il suffit juste d'une seule élongation musculaire.", "DESCRIPTIONS": [ - "Gagnez [E] au début de votre tour. Vous ne piochez pas dans votre pile de collection avant le 4eme tour." + "Gagnez [E] au début de votre tour. Vous ne piochez pas dans votre pile de Collection avant le 4ème tour." ] } -} \ No newline at end of file +} diff --git a/src/main/resources/collectorResources/localization/fra/UIStrings.json b/src/main/resources/collectorResources/localization/fra/UIStrings.json index f065e27661..85acbfbfd5 100644 --- a/src/main/resources/collectorResources/localization/fra/UIStrings.json +++ b/src/main/resources/collectorResources/localization/fra/UIStrings.json @@ -1,18 +1,18 @@ { "collector:CollectionReward": { "TEXT": [ - "Choisissez une carte à collectez." + "Choisissez une carte à Collecter." ] }, "collector:CollectibleCardTab": { "TEXT": [ - "Objet de collection" + "Collectionnable" ] }, "collector:CollectionScreen": { "TEXT": [ "Cacher", - "Votre collection commence le combat avec toutes les cartes ici." + "Votre Collection commence le combat avec toutes les cartes ici." ] }, "collector:CollectionUITopPanel": { @@ -24,32 +24,32 @@ }, "collector:CombatCollectionPileButton": { "TEXT": [ - "Pile de collection", - "Contient les cartes collectées que vous n'avez pas encore piochées pour ce combat.. Vous piochez une carte au début de chaque tour.", - "Je n'ai aucune carte collectée!" + "Pile de Collection", + "Contient les cartes collectées que vous n'avez pas encore piochées pour ce combat. Vous piochez une carte de cette pile au début de chaque tour.", + "Je n'ai aucune carte Collectée!" ] }, "collector:EssenceCount": { "TEXT": [ "Essences", - "Dépensez des essences pour ajouter des cartes à votre collection. Les salle de combat donne #b1 #yEssence. Les Élites donne #b2 #yEssence, les boss en donne #b3! NL Vous avez #b", + "Dépensez des essences pour ajouter des cartes à votre collection. Les salles de combat donne #b1 #yEssence. Les Élites donne #b2 #yEssence, les Boss en donnent #b3! NL Vous avez #b", " Essences." ] }, "collector:CombatCollectionViewScreen": { "TEXT": [ - "Écran de la collection de combat" + "Écran de la Collection de Combat" ] }, "collector:PyreInfo": { "TEXT": [ "Bûcher", - "Pour jouer cette carte, payez le coût supplémentaire des cartes a Épuisement de votre main.." + "Pour jouer cette carte, payez le coût supplémentaire d'Épuiser une carte de votre main." ] }, "collector:CollectedCardMod": { "TEXT": [ - "collecteur:MegaÉthérée. NL ", + "collecteur:Mega-Éthérée. NL ", "Collecté" ] }, @@ -74,7 +74,7 @@ }, "collector:PyreCostSpendScreen": { "TEXT": [ - "Epuiser pour le Bûcher." + "Épuisez pour le Bûcher." ] }, "collector:PyreModText": { @@ -85,10 +85,10 @@ "collector:StashAwayCampfireOption": { "TEXT": [ "Libérer", - "Enlevez une carte collecté. Gagnez ", - " Ames.", - "Nécessite une carte collectée.", - "Sélectionnez une carte collectée à enlevez." + "Retirez une carte Collectée. Gagnez ", + " Âmes.", + "Nécessite une carte Collectée.", + "Sélectionnez une carte Collectée à retirer." ] }, "collector:BonusEventOption": { diff --git a/src/main/resources/collectorResources/localization/jpn/CardStrings.json b/src/main/resources/collectorResources/localization/jpn/CardStrings.json index 6bec5aead1..b2da5f01c7 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": "トーチベアラー", @@ -607,7 +608,7 @@ }, "collector:ShelledParasiteCard": { "NAME": "ヤドカリパラサイト", - "DESCRIPTION": " expansioncontent:プレートアーマー !M! を得る。" + "DESCRIPTION": "プレートアーマー !M! を得る。" }, "collector:ShieldGremlinCard": { "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 834ba002ee..eec0a06b65 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": [ - "戦闘開始時、 #y燃え殻 を手札に追加する。各戦闘で初めて #y燃え殻 を #y廃棄 すると、 #b1 #ycollector:リザーブ を得る。" + "戦闘開始時、 #ycollector:リザーブ #b1を得る" ] }, "collector:PrismaticTorch": { @@ -11,14 +11,14 @@ "FLAVOR": "絶え間なく変化する炎は幸運の恵みを映し出す", "DESCRIPTIONS": [ " ", - " [] と置き換える。戦闘開始時、 #y燃え殻 を 2 枚手札に追加する。各ターンで初めて #y燃え殻 を #y廃棄 すると、 #b1 #ycollector:リザーブ を得る。" + "[] と置き換える。戦闘開始時、 #b1 枚の #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": { @@ -56,14 +56,14 @@ "NAME": "お香", "FLAVOR": "時代遅れな精神統一方法", "DESCRIPTIONS": [ - "#y脱力 、 #y弱体 、 #y脆弱化 のいずれかを受けている間、追加でそれらのデバフを受けない。" + "#y脱力 、 #y弱体 、 #y脆弱化 のいずれかを受けている間、それらのデバフを受けなくなる。" ] }, "collector:FuelCanister": { "NAME": "燃料容器", "FLAVOR": "気分がむかむかする", "DESCRIPTIONS": [ - "ターン終了時、手札で最もコストの高いカードを #y保留 する。" + "ターン終了時、手札で最もコストの低いカードを #y保留 する。" ] }, "collector:AutoCurser": { @@ -77,7 +77,7 @@ "NAME": "バグパイプ", "FLAVOR": "この恐ろしい楽器はクビライ王を狂わせたと言われている", "DESCRIPTIONS": [ - "あなたが #y脱力 や #y弱体 を与えた時、追加で #b1 与える。" + "あなたが #y脱力 や #y弱体 を新しく与えた時、追加で #b1 与える。" ] }, "collector:BottledCollectible": { @@ -87,31 +87,33 @@ "入手時、 コレクトカード を1枚 #yアップグレード し、そのカードを戦闘開始時に収集札の一番上に置く。", "戦闘開始時 ", " は収集札の一番上に置かれる。", - "選択されたカード " + "選択されたカード ", + "このレリックの効果を受けたカードはデッキから #r削除 された。" ] }, "collector:TheContract": { "NAME": "契約書", "FLAVOR": "血で書かれたサイン", "DESCRIPTIONS": [ - "入手時、 #b10 #yエッセンス を得る。" + "入手時、 #b", + " #yエッセンス を得る。" ] }, "collector:ForbiddenFruit": { "NAME": "フォビドゥンフルーツ", "FLAVOR": "この種の果物はまったく馴染みが無い", "DESCRIPTIONS": [ - "入手時、コモン、アンコモン、レアカードを1枚ずつ選んで入手する。 NL 更にデッキに #y消耗 を加える。", - "レアカードを選びデッキに加える。", - "アンコモンカードを選びデッキに加える。", - "コモンカードを選びデッキに加える。" + "入手時、デッキに #r寄生 を加える。最大HPが #b", + " 増加する。 戦闘開始時、 #y敏捷性 #b", + " を得る。" ] }, "collector:RoughDiamond": { "NAME": "ラフダイヤモンド", "FLAVOR": "鉱山が取り壊され、この変色した石ですら価値がある。", "DESCRIPTIONS": [ - "各ターンに初めてレアカードをプレイした時、 [E] を得る。入手時、レアカードを1枚入手する。" + "各ターン、初めて #yレアカード をプレイした時 [E] を得る。 レリック入手時に #yレアカード 報酬を得る。", + "知識!" ] }, "collector:BlockedChakra": { @@ -121,4 +123,4 @@ "ターン開始時、 [E] を得る。あなたは 4 ターン目までターン開始時に収集札からカードを引けなくなる。" ] } -} +} \ No newline at end of file diff --git a/src/main/resources/collectorResources/localization/kor/CardStrings.json b/src/main/resources/collectorResources/localization/kor/CardStrings.json index 114c2ac023..1e46347b85 100644 --- a/src/main/resources/collectorResources/localization/kor/CardStrings.json +++ b/src/main/resources/collectorResources/localization/kor/CardStrings.json @@ -1,700 +1,700 @@ -{ - "collector:ActOfAggression": { - "NAME": "공격의 장", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL 적 전체에게 취약을 !M! 부여합니다." - }, - "collector:AlwaysMore": { - "NAME": "한없는 야욕", - "DESCRIPTION": "collector:장작. NL 골드를 !M! 얻습니다." - }, - "collector:AshenStrike": { - "NAME": "잿빛 타격", - "DESCRIPTION": "피해를 !D! 줍니다. NL *불씨를 얻습니다." - }, - "collector:Arrogance": { - "NAME": "오만", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL 이번 턴에 사용하는 다음 공격 카드가 collector:파멸을 !M! 추가로 부여합니다." - }, - "collector:AshesAndDust": { - "NAME": "먼지와 재", - "DESCRIPTION": "적 전체에게 피해를 !D! 만큼 X 번 줍니다. NL X 가 5이상일 경우 2번 더 피해를 줍니다." - }, - "collector:BindingCall": { - "NAME": "번제의 부름", - "DESCRIPTION": "expansioncontent:임시 *체력을 !M! 얻습니다. NL collector:횃불_머리에게 \" 무작위 적에게 collector:파멸을 !clm2! 부여합니다. \" 행동을 추가합니다." - }, - "collector:Billow": { - "NAME": "연기", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL 다음 턴에 *고함을 얻습니다." - }, - "collector:Bellow": { - "NAME": "고함", - "DESCRIPTION": "휘발성. NL 저번 턴에 남은 방어도 만큼 collector:파멸을 부여합니다. NL 소멸.", - "EXTENDED_DESCRIPTION": [ - " NL ( collector:파멸을 !M! 부여합니다.)" - ] - }, - "collector:BlackBindings": { - "NAME": "암흑의 구속", - "DESCRIPTION": "약화를 !M! 부여합니다. 적이 보유한 해로운 효과 종류만큼 collector:파멸을 !clm2! 부여합니다." - }, - "collector:Blightning": { - "NAME": "황폐의 벼락", - "DESCRIPTION": "collector:파멸을 !M! 부여합니다. NL 피해를 !D! 줍니다. NL 수집품 카드 더미에서 카드를 1장 뽑습니다. NL 소멸." - }, - "collector:Bonfire": { - "NAME": "모닥불", - "DESCRIPTION": "collector:장작. NL 방어도를 !B! 얻습니다. NL 다음 턴에 collector:비축을 1 얻습니다." - }, - "collector:BrainDrain": { - "NAME": "두뇌 흡수", - "DESCRIPTION": "적이 체력을 !M! 잃습니다. NL 적의 collector:수집품 카드를 얻습니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "적이 체력을 !M! 잃습니다. NL 적의 collector:수집품 카드를 얻고 강화합니다. NL 소멸." - }, - "collector:BramblesparKindling": { - "NAME": "가시나무서 쏘시개", - "DESCRIPTION": "사용불가. NL 소멸되면 *불타는 *타격을 얻습니다.", - "UPGRADE_DESCRIPTION": "사용불가. NL 소멸되면 *불타는 *타격+을 얻습니다.", - "EXTENDED_DESCRIPTION": [ - "불쏘시개에는 불을 부쳐야 하지 않겠나." - ] - }, - "collector:BurningStrike": { - "NAME": "불타는 타격", - "DESCRIPTION": "피해를 !D! 줍니다. NL 카드를 1장 뽑습니다.", - "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL 카드를 !M! 장 뽑습니다." - }, - "collector:CantTouchThis": { - "NAME": "손대지 말거라", - "DESCRIPTION": "민첩을 !M! 얻습니다. NL 피해를 받지 않는다면 공격한 대상에게 collector:파멸을 !clm2! 부여합니다." - }, - "collector:CoffinNail": { - "NAME": "수명 흡수", - "DESCRIPTION": "피해를 !D! 줍니다. NL 소멸되면 다음 턴에 이 카드의 피해량이 !M! 증가하고 이 카드를 가져옵니다." - }, - "collector:Condemn": { - "NAME": "규탄", - "DESCRIPTION": "취약을 !M! 부여합니다. NL collector:파멸을 !clm2! 부여합니다." - }, - "collector:CursedWail": { - "NAME": "저주받은 통곡", - "DESCRIPTION": "collector:고초된 적의 힘을 !clm2! 감소시킵니다. NL 이번 턴 동안 적 전체의 힘을 !M! 감소시킵니다. NL 소멸." - }, - "collector:DarkApotheosis": { - "NAME": "어둠의 정점", - "DESCRIPTION": "모든 수집품 카드를 이번 전투 동안 강화합니다. NL 소멸." - }, - "collector:DarkLordForm": { - "NAME": "어둠 군주의 형상", - "DESCRIPTION": "내 턴 시작 시 무작위 적에게 *넌 *나의 *것이다!를 사용합니다.", - "UPGRADE_DESCRIPTION": "내 턴 시작 시 무작위 적에게 *넌 *나의 *것이다!+를 사용합니다." - }, - "collector:Darkstorm": { - "NAME": "어둠의 폭풍", - "DESCRIPTION": "*황폐의 *벼락을 얻습니다. NL 뽑을 카드 더미에 그 카드를 !M! 장 섞어 넣습니다. NL 소멸." - }, - "collector:DarkwoodKindling": { - "NAME": "흑버들재 쏘시개", - "DESCRIPTION": "사용불가. NL 소멸되면 다음 턴에 collector:비축을 !M! 얻습니다.", - "UPGRADE_DESCRIPTION": "사용불가. NL 보존. NL 소멸되면 다음 턴에 collector:비축을 !M! 얻습니다.", - "EXTENDED_DESCRIPTION": [ - "불쏘시개에는 불을 부쳐야 하지 않겠나." - ] - }, - "collector:Defend": { - "NAME": "수비", - "DESCRIPTION": "방어도를 !B! 얻습니다." - }, - "collector:DoubleTrouble": { - "NAME": "더해지는 난제", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL 이번 턴에 다음 사용하는 수집품 카드가 두 번 사용됩니다." - }, - "collector:DoMayhem": { - "NAME": "대혼란의 서막", - "DESCRIPTION": "내 턴 시작 시 collector:파멸을 25 이상 보유한 적이 있다면 뽑을 카드 더미 맨 위에 있는 카드를 사용합니다." - }, - "collector:DragonsTrove": { - "NAME": "용의 비보", - "DESCRIPTION": "collector:장작. NL 수집품 카드를 2장 뽑습니다. NL collector:비축을 !M! 얻습니다. NL 소멸." - }, - "collector:Ember": { - "NAME": "불씨", - "DESCRIPTION": "보존. NL 소멸되면 힘을 !M! 얻습니다. NL 소멸.", - "EXTENDED_DESCRIPTION": [ - "사용할 수 없다. 불씨는 지펴져야만 하지." - ] - }, - "collector:Empower": { - "NAME": "권능", - "DESCRIPTION": "다음 !M! 턴 동안 내 턴 시작 시 힘을 X 얻습니다." - }, - "collector:Extricate": { - "NAME": "영혼 절단", - "DESCRIPTION": "손에 있는 공격 카드를 제외한 모든 카드를 소멸시킵니다. NL 피해를 !D! 줍니다." - }, - "collector:FeelMyPain": { - "NAME": "나의 고통을 느껴라", - "DESCRIPTION": "카드를 소멸시킬 때마다 무작위 적들의 체력을 !M! 잃게합니다." - }, - "collector:FiendFire": { - "NAME": "지옥불", - "DESCRIPTION": "카드를 전부 소멸시킵니다. NL 그 수만큼 피해를 !D! 줍니다. NL 소멸." - }, - "collector:Finalize": { - "NAME": "종결", - "DESCRIPTION": "적이 죽을 때 체력을 !clm2! 회복합니다. NL collector:파멸을 !M! 부여합니다. NL 소멸." - }, - "collector:FingerOfDeath": { - "NAME": "죽음의 손짓", - "DESCRIPTION": "collector:비축으로만 이 카드를 사용할 수 있습니다. NL collector:파멸을 !M! 부여합니다.", - "UPGRADE_DESCRIPTION": "collector:비축으로만 이 카드를 사용할 수 있습니다. NL 적 전체에게 collector:파멸을 !M! 부여합니다." - }, - "collector:FlameLash": { - "NAME": "화염 채찍", - "DESCRIPTION": "collector:장작. NL 피해를 !D! 줍니다. NL 이 카드로 소멸시킨 카드의 피해량만큼 이 카드의 피해량이 증가합니다.", - "UPGRADE_DESCRIPTION": "collector:장작. NL 피해를 !D! 줍니다. NL 이 카드로 소멸시킨 카드의 피해량 + !M! 만큼 이 카드의 피해량이 증가합니다." - }, - "collector:FleetingEmbers": { - "NAME": "스치는 불씨", - "DESCRIPTION": "collector:장작. NL 방어도를 !B! 얻습니다. NL *불씨를 !M! 장 얻습니다." - }, - "collector:Forgery": { - "NAME": "위조품", - "DESCRIPTION": "피해를 !D! 줍니다. NL 수집품 카드 더미에서 카드 !M! 장 중 1장 선택 후 복사해 가져옵니다.", - "EXTENDED_DESCRIPTION": [ - "복사할 카드를 선택하십시오." - ] - }, - "collector:FuelTheFire": { - "NAME": "연료 공급", - "DESCRIPTION": "collector:장작. NL 다음 턴에 collector:비축을 !M! 얻습니다.", - "UPGRADE_DESCRIPTION": "collector:장작. NL 다음 턴에 collector:비축을 !M! 얻습니다. 카드를 1장 뽑습니다." - }, - "collector:Goodbye": { - "NAME": "잘 가거라", - "DESCRIPTION": "적의 collector:파멸을 2배로 늘립니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "적의 collector:파멸을 3배로 늘립니다. NL 소멸." - }, - "collector:GourmandsGaze": { - "NAME": "폭식가의 응시", - "DESCRIPTION": "피해를 !D! 줍니다. NL 이번 턴에 collector:수집품 카드를 사용했다면 방어도를 !B! 얻습니다." - }, - "collector:GreaterHurting": { - "NAME": "심한 아픔", - "DESCRIPTION": "휘발성. NL 피해를 !D! 줍니다. NL 이 카드 소멸 시 *심각한 *아픔을 얻습니다.", - "UPGRADE_DESCRIPTION": "휘발성. NL 피해를 !D! 줍니다. NL 이 카드 소멸 시 *심각한 *아픔+을 얻습니다." - }, - "collector:GreatestHurting": { - "NAME": "심각한 아픔", - "DESCRIPTION": "휘발성. NL 피해를 !D! 줍니다. NL 이 카드 소멸 시 *불씨를 얻습니다." - }, - "collector:GreenpyreLocus": { - "NAME": "머무는 녹색 불꽃", - "DESCRIPTION": "collector:수집품 카드 3장 중 1장을 선택해 얻습니다. NL *수집품 카드 더미에 그 카드를 !M! 장 복사해 섞어 넣습니다.", - "EXTENDED_DESCRIPTION": [ - "가져올 카드를 선택하십시오." - ] - }, - "collector:Heatwave": { - "NAME": "열 파동", - "DESCRIPTION": "적 전체에게 피해를 !D! 줍니다. NL *불씨를 얻습니다." - }, - "collector:Hoard": { - "NAME": "저축", - "DESCRIPTION": "collector:장작. NL 카드를 !M! 장 뽑습니다. NL 이번 턴 동안 그 카드에 보존 효과가 추가됩니다." - }, - "collector:HoardersStrike": { - "NAME": "저축가의 타격", - "DESCRIPTION": "피해를 !D! 줍니다. NL 수집품 카드 더미 맨 위에 있는 카드를 사용합니다." - }, - "collector:Hurting": { - "NAME": "아픔", - "DESCRIPTION": "휘발성. NL 피해를 !D! 줍니다. NL 이 카드 소멸 시 *심한 *아픔을 얻습니다.", - "UPGRADE_DESCRIPTION": "휘발성. NL 피해를 !D! 줍니다. NL 이 카드 소멸 시 *심한 *아픔+을 얻습니다." - }, - "collector:IllTakeThat": { - "NAME": "거둬들이마", - "DESCRIPTION": "적의 방어도를 !M! 까지 gremlin:강탈합니다. NL 피해를 !D! 줍니다." - }, - "collector:InevitableDemise": { - "NAME": "필연적 종말", - "DESCRIPTION": "피해를 !D! 줍니다. NL 다음으로 대상의 collector:파멸이 제거될 때 제거되지 않게 합니다." - }, - "collector:InflictAgony": { - "NAME": "고통의 형벌", - "DESCRIPTION": "피해를 !D! 줍니다. NL 적이 collector:고초되지 않았다면 약화 와 취약을 2 부여합니다." - }, - "collector:Invigorate": { - "NAME": "섬광", - "DESCRIPTION": "collector:장작. NL *헛디딤 또는 *실명을 선택해 얻습니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "collector:장작. NL *헛디딤+ 또는 *실명+을 선택해 얻습니다. NL 소멸.", - "EXTENDED_DESCRIPTION": [ - "얻을 카드를 선택하십시오." - ] - }, - "collector:IronbarkKindling": { - "NAME": "유칼리나무철 쏘시개", - "DESCRIPTION": "사용불가. NL 소멸되면 방어도를 !B! 얻습니다.", - "UPGRADE_DESCRIPTION": "사용불가. 보존. NL 소멸되면 방어도를 !B! 얻습니다.", - "EXTENDED_DESCRIPTION": [ - "불쏘시개에는 불을 부쳐야 하지 않겠나." - ] - }, - "collector:ItMattersNot": { - "NAME": "가소롭구나", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL 약화를 가진 적이 있다면 그 적에게 약화를 !M! 부여하고 취약을 가진 적이 있다면 그 적에게 취약을 !M! 부여합니다." - }, - "collector:JadedJabs": { - "NAME": "거절의 찌르기", - "DESCRIPTION": "collector:장작. NL 피해를 !D! 줍니다. NL 이 카드로 소멸시킨 카드의 비용 + !M! 만큼 단도를 얻습니다." - }, - "collector:Karma": { - "NAME": "업보", - "DESCRIPTION": "내 턴 종료 시 방어도를 !M! 얻습니다. NL collector:고초된 적이 있다면 이 카드로 얻는 방어도가 !clm2! 증가합니다.", - "UPGRADE_DESCRIPTION": "선천성. NL 내 턴 종료 시 방어도를 !M! 얻습니다. NL collector:고초된 적이 있다면 이 카드로 얻는 방어도가 !clm2! 증가합니다." - }, - "collector:LanternFlare": { - "NAME": "등불", - "DESCRIPTION": "collector:장작. NL collector:파멸을 !M! 부여합니다. NL 대상의 매 턴 종료 시 파멸을 !clm2! 부여합니다." - }, - "collector:LuckyWick": { - "NAME": "행운의 심지", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL 피해를 !D! 줍니다." - }, - "collector:MastersCall": { - "NAME": "군주의 부름", - "DESCRIPTION": "사용안합니다!" - }, - "collector:MiniCurse": { - "NAME": "옅은 저주", - "DESCRIPTION": "collector:장작. NL 취약 과 약화를 1 부여합니다.", - "UPGRADE_DESCRIPTION": "collector:장작. NL 적 전체에게 취약 과 약화를 1 부여합니다." - }, - "collector:Misdirect": { - "NAME": "방향 상실", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL 다음 턴에 collector:비축을 1 얻습니다." - }, - "collector:MysteryWeaving": { - "NAME": "신비한 무늬", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL 손에 있는 다른 카드 하나당 이 카드의 방어도를 2 감소시킵니다." - }, - "collector:OakbrimKindling": { - "NAME": "참나무널 쏘시개", - "DESCRIPTION": "사용불가. NL 소멸되면 카드를 !M! 장 뽑습니다.", - "EXTENDED_DESCRIPTION": [ - "불쏘시개에는 불을 부쳐야 하지 않겠나." - ] - }, - "collector:Omen": { - "NAME": "징조", - "DESCRIPTION": "수집품 카드를 사용할 때마다 힘을 1 얻습니다.", - "UPGRADE_DESCRIPTION": "선천성. NL 수집품 카드를 사용할 때마다 힘을 1 얻습니다." - }, - "collector:ProtectingCall": { - "NAME": "수호의 부름", - "DESCRIPTION": "expansioncontent:임시 *체력을 !M! 얻습니다. NL collector:횃불_머리에게 \" 방어도를 !clm2! 얻습니다. \" 행동을 추가합니다." - }, - "collector:Pyromancy": { - "NAME": "불점", - "DESCRIPTION": "collector:장작. NL 내 턴 시작 시 collector:비축을 1 얻습니다.", - "UPGRADE_DESCRIPTION": "선천성. collector:장작. NL 내 턴 시작 시 collector:비축을 1 얻습니다." - }, - "collector:RagingCall": { - "NAME": "거센 부름", - "DESCRIPTION": "expansioncontent:임시 *체력을 !M! 얻습니다. NL collector:횃불_머리에게 \" 적 전체에게 피해를 !clm2! 줍니다.\" 행동을 추가합니다." - }, - "collector:ReceiveTribute": { - "NAME": "공물 징수", - "DESCRIPTION": "collector:장작. NL expansioncontent:보스 카드 !M! 장 중 1장을 선택해 얻습니다. 그 카드에 보존효과를 추가합니다. NL 소멸.", - "EXTENDED_DESCRIPTION": [ - "얻을 카드를 선택하십시오." - ] - }, - "collector:Roast": { - "NAME": "굽기", - "DESCRIPTION": "collector:장작. NL 피해를 !D! 줍니다." - }, - "collector:RotwoodKindling": { - "NAME": "부목 쏘시개", - "DESCRIPTION": "사용불가. NL 소멸되면 적 전체에게 취약을 !M! 부여합니다.", - "EXTENDED_DESCRIPTION": [ - "불쏘시개에는 불을 부쳐야 하지 않겠나." - ] - }, - "collector:SapStrength": { - "NAME": "죽음의 낙인", - "DESCRIPTION": "피해를 !D! 줍니다. NL 다음 턴에 적이 체력을 두 배로 잃습니다." - }, - "collector:ScorchingRay": { - "NAME": "맹렬한 광선", - "DESCRIPTION": "무작위 적들에게 피해를 !D! 만큼 X 번 줍니다." - }, - "collector:SeedOfDoubt": { - "NAME": "의심의 씨앗", - "DESCRIPTION": "collector:파멸을 !M! 부여합니다. NL 이 카드가 손에 있다면 카드가 소멸할 때마다 이 카드의 *파멸이 !clm2! 증가합니다." - }, - "collector:ShadowDaggers": { - "NAME": "그림자 단검", - "DESCRIPTION": "이번 전투에서 사용한 수집품 카드만큼 피해를 !D! 줍니다. NL 소멸.", - "EXTENDED_DESCRIPTION": [ - " NL (피해를 ", - " 번 줍니다.)", - " 번 줍니다.)" - ] - }, - "collector:SomberShield": { - "NAME": "거무스름한 방패", - "DESCRIPTION": "collector:장작. NL 방어도를 !B! 얻습니다. NL 다음 턴에 이 카드로 소멸시킨 카드를 복사해 얻습니다." - }, - "collector:SoulSnare": { - "NAME": "영혼 덫", - "DESCRIPTION": "collector:파멸을 !M! 부여합니다. NL 소멸." - }, - "collector:Soulforge": { - "NAME": "영혼 구축", - "DESCRIPTION": "collector:수집품 카드 더미에서 카드를 1장 뽑습니다. 강화된 그 카드를 !M! 장 얻습니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "collector:수집품 카드 더미에서 카드를 1장 뽑습니다. 강화된 그 카드를 !M! 장 얻습니다. NL 소멸." - }, - "collector:Spark": { - "NAME": "불똥", - "DESCRIPTION": "collector:비축을 1 얻습니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "collector:비축을 1 얻습니다. NL 카드를 1장 뽑습니다. NL 소멸." - }, - "collector:SpiritLeech": { - "NAME": "정기 흡수", - "DESCRIPTION": "피해를 !D! 줍니다. NL 대상이 collector:고초된 적이면 방어도를 !B! 얻습니다." - }, - "collector:StashAway": { - "NAME": "은닉", - "DESCRIPTION": "방어도를 !B! 만큼 X 번 얻습니다. NL 다음 턴에 collector:비축을 X 얻습니다. NL 소멸." - }, - "collector:Strike": { - "NAME": "타격", - "DESCRIPTION": "피해를 !D! 줍니다." - }, - "collector:SuckerPunch": { - "NAME": "불의의 일격", - "DESCRIPTION": "피해를 !D! 줍니다. NL 약화를 !M! 부여합니다." - }, - "collector:Suffering": { - "NAME": "고통 나누기", - "DESCRIPTION": "약화 또는 취약을 부여할 때마다 부여한 적에게 collector:파멸을 !M! 부여합니다." - }, - "collector:SunbloomKindling": { - "NAME": "햇살꽃 쏘시개", - "DESCRIPTION": "사용불가. NL 소멸되면 힘을 !M! 얻고 *불씨를 2장 얻습니다.", - "EXTENDED_DESCRIPTION": [ - "불쏘시개에는 불을 부쳐야 하지 않겠나." - ] - }, - "collector:ThornWhip": { - "NAME": "가시 채찍", - "DESCRIPTION": "피해를 !D! 줍니다. 적 전체에게 hermit:타박상을 !M! 부여합니다. NL 단도를 1장 얻습니다." - }, - "collector:Torchbearer": { - "NAME": "횃불 봉송자", - "DESCRIPTION": "expansioncontent:임시 *체력을 !M! 얻습니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "expansioncontent:임시 *체력을 가지고 있다면 소멸합니다. NL expansioncontent:임시 *체력을 !M! 얻습니다." - }, - "collector:WhirlingFlame": { - "NAME": "회오리 불", - "DESCRIPTION": "적 전체에게 피해를 !D! 줍니다. NL 버린 카드 더미 카드를 1장 뽑을 카드 더미 맨 위에 놓습니다." - }, - "collector:VoidArmor": { - "NAME": "공허 갑옷", - "DESCRIPTION": "모두 방어도를 !B! 얻습니다. NL 모두 bronze:흐릿함을 1 얻습니다." - }, - "collector:Wildfire": { - "NAME": "들불", - "DESCRIPTION": "피해를 !D! 줍니다. NL 적이 보유한 효과의 종류 하나당 피해를 !D! 줍니다." - }, - "collector:YouAreMine": { - "NAME": "넌 나의 것이다!", - "DESCRIPTION": "약화를 !M! 부여합니다. NL 취약을 !M! 부여합니다. collector:파멸을 !clm2! 부여합니다." - }, - "collector:Whomp": { - "NAME": "짝", - "DESCRIPTION": "피해를 !D! 줍니다. NL expansioncontent:임시 *체력을 !M! 얻습니다. NL 소멸." - }, - "collector:AcidSlimeCard": { - "NAME": "산성 슬라임", - "DESCRIPTION": "무작위 비용이 0인 카드를 !M! 장 얻습니다.", - "UPGRADE_DESCRIPTION": "무작위 비용이 0인 카드를 !M! 장 얻습니다." - }, - "collector:AugmenterCard": { - "NAME": "증강자", - "DESCRIPTION": "체력을 3 잃습니다. NL 힘을 !M! 얻습니다." - }, - "collector:BearCard": { - "NAME": "곰", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL 적의 모든 방어도를 없앱니다. NL 피해를 !D! 줍니다." - }, - "collector:BlueSlaverCard": { - "NAME": "푸른 노예 상인", - "DESCRIPTION": "피해를 !D! 줍니다. NL 약화를 1 부여합니다. NL 적의 약화를 두 배로 늘립니다." - }, - "collector:BonfireSpiritsCard": { - "NAME": "모닥불 정령들", - "DESCRIPTION": "collector:장작. NL 체력을 !M! 회복합니다. NL 이 카드로 희귀 카드가 소멸되면 최대 체력이 1 증가합니다." - }, - "collector:BookOfStabbingCard": { - "NAME": "칼부림의 책", - "DESCRIPTION": "막히지 않은 피해를 줄 때마다 collector:파멸을 !M! 부여합니다." - }, - "collector:BronzeOrbCard": { - "NAME": "청동 구체", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL 피해를 !D! 줍니다. NL 뽑을 카드 더미 맨 위에 있는 카드의 비용이 사용하기 전까지 0이 됩니다." - }, - "collector:ByrdCard": { - "NAME": "섀", - "DESCRIPTION": "피해를 !D! 만큼 5번 줍니다." - }, - "collector:CenturionCard": { - "NAME": "백부장", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL 민첩을 !M! 얻습니다." - }, - "collector:ChosenCard": { - "NAME": "선택받은 자", - "DESCRIPTION": "약화를 !M! 부여합니다. NL 적이 공격할 의도가 없다면 취약을 !clm2! 부여합니다." - }, - "collector:ClericCard": { - "NAME": "성직자", - "DESCRIPTION": "collector:장작. NL expansioncontent:임시 *체력을 !M! 얻습니다." - }, - "collector:CultistCard": { - "NAME": "광신자", - "DESCRIPTION": "collector:장작. NL 다음 3턴 동안 내 턴 시작 시 힘을 1 얻습니다." - }, - "collector:DaggerCard": { - "NAME": "단검", - "DESCRIPTION": "체력을 !M! 잃습니다. NL 피해를 !D! 줍니다." - }, - "collector:DarklingsCard": { - "NAME": "어두미", - "DESCRIPTION": "collector:장작. NL 피해를 !D! 줍니다. NL 수집품 카드를 expansioncontent:발굴합니다.", - "EXTENDED_DESCRIPTION": [ - "복사할 카드를 선택하십시오." - ] - }, - "collector:DesignerInSpireCard": { - "NAME": "탑-클래스 디자이너", - "DESCRIPTION": "expansioncontent:임시 *체력을 !M! 얻습니다. NL collector:횃불_머리에게 \" 카드를 1장 뽑습니다. \" 행동을 추가합니다." - }, - "collector:FinalBossCard": { - "NAME": "마지막 게임", - "DESCRIPTION": "적의 *천하무적을 제거하고 적 전체를 기절 시킵니다. NL 소멸." - }, - "collector:FaceTraderCard": { - "NAME": "얼굴 상인", - "DESCRIPTION": "무작위 색상 카드를 !M! 장 얻습니다. NL 그 카드에 휘발성 효과가 추가됩니다." - }, - "collector:FatGremlinCard": { - "NAME": "뚱뚱한 그렘린", - "DESCRIPTION": "피해를 !D! 줍니다. NL 약화를 !M! 부여합니다." - }, - "collector:FungiBeastCard": { - "NAME": "동물하초", - "DESCRIPTION": "취약을 !M! 부여합니다. NL 적 전체에게 취약을 1 부여합니다." - }, - "collector:GiantHeadCardStageOne": { - "NAME": "째", - "DESCRIPTION": "다음 턴에 *깍을 얻습니다." - }, - "collector:GiantHeadCardStageTwo": { - "NAME": "깍", - "DESCRIPTION": "다음 턴에 *머리 *박치기를 얻습니다." - }, - "collector:GiantHeadCardStageThree": { - "NAME": "머리 박치기", - "DESCRIPTION": "적 전체에게 피해를 !D! 줍니다." - }, - "collector:GremlinLeaderCard": { - "NAME": "그렘린 리더", - "DESCRIPTION": "수집 목록 중 무작위 그렘린 카드를 !M! 장 얻습니다." - }, - "collector:GremlinNobCard": { - "NAME": "귀족 그렘린", - "DESCRIPTION": "스킬 카드를 사용할 때마다 expansioncontent:활력을 !M! 얻습니다." - }, - "collector:GremlinWizardCard": { - "NAME": "마법사 그렘린", - "DESCRIPTION": "다음 턴에 expansioncontent:활력을 !M! 얻고 collector:비축을 1 얻습니다." - }, - "collector:JawWormCard": { - "NAME": "턱 벌레", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL 힘을 !M! 얻습니다." - }, - "collector:JousterCard": { - "NAME": "기사", - "DESCRIPTION": "피해를 !D! 줍니다. NL 적이 하나만 있다면 방어도를 !B! 얻습니다." - }, - "collector:LagavulinCard": { - "NAME": "라가불린", - "DESCRIPTION": "적 전체의 힘을 !M! 감소시킵니다." - }, - "collector:LivingWallCard": { - "NAME": "살아있는 벽", - "DESCRIPTION": "collector:장작. NL 무작위 강화된 카드를 얻습니다. NL 사용하기 전까지 그 카드의 비용이 0이 됩니다." - }, - "collector:LouseCard": { - "NAME": "공벌레", - "DESCRIPTION": "bronze:흐릿함을 1 얻습니다. NL 다음으로 막히지 않은 피해를 받는다면 방어도를 !B! 얻습니다." - }, - "collector:MadGremlinCard": { - "NAME": "화난 그렘린", - "DESCRIPTION": "힘을 !M! 얻습니다. NL 이번 턴이 끝날 때 힘을 !M! 잃습니다." - }, - "collector:MawCard": { - "NAME": "아귀", - "DESCRIPTION": "피해를 !D! 줍니다." - }, - "collector:MerchantCard": { - "NAME": "상인", - "DESCRIPTION": "무색 카드를 !M! 장 얻습니다. NL 이번 턴에 그 카드의 비용이 0이 됩니다." - }, - "collector:MushroomCard": { - "NAME": "버섯", - "DESCRIPTION": "피해를 !D! 줍니다. NL 약화 또는 취약을 !M! 부여합니다." - }, - "collector:MysticCard": { - "NAME": "신비주의자", - "DESCRIPTION": "expansioncontent:임시 *체력을 !M! 얻습니다." - }, - "collector:NemesisCard": { - "NAME": "네메시스", - "DESCRIPTION": "불가침을 1 얻습니다." - }, - "collector:NlothCard": { - "NAME": "느로스", - "DESCRIPTION": "collector:장작. NL 무작위 희귀 카드를 1장 얻습니다. NL 그 카드의 비용을 1 감소시킵니다.", - "UPGRADE_DESCRIPTION": "collector:장작. NL 무작위 희귀 카드를 1장 얻습니다. NL 그 카드의 비용은 0이 됩니다." - }, - "collector:OrbWalkerCard": { - "NAME": "구체 순찰기", - "DESCRIPTION": "피해를 !D! 줍니다. NL *불씨를 !M! 장 얻습니다." - }, - "collector:PointyCard": { - "NAME": "촉새", - "DESCRIPTION": "피해를 !D! 만큼 두 번 줍니다. NL 카드를 1장 뽑습니다." - }, - "collector:RanwidCard": { - "NAME": "랜위드", - "DESCRIPTION": "전투 종료 시 포션과 카드 보상을 추가로 얻습니다." - }, - "collector:RedSlaverCard": { - "NAME": "붉은 노예 상인", - "DESCRIPTION": "이번 턴 동안 적의 힘을 !M! 감소시킵니다." - }, - "collector:ReptomancerCard": { - "NAME": "파충류 주술사", - "DESCRIPTION": "expansioncontent:임시 *체력을 !M! 얻습니다. NL collector:횃불_머리에게 \" 무작위 적에게 중독을 !clm2! 부여합니다. \" 행동을 추가합니다." - }, - "collector:RepulsorCard": { - "NAME": "현혹기", - "DESCRIPTION": "collector:장작. NL 카드를 !M! 장 뽑습니다." - }, - "collector:RomeoCard": { - "NAME": "로미오", - "DESCRIPTION": "다음 사용하는 공격 카드의 비용이 0이 되고 피해량이 !M! 증가합니다." - }, - "collector:ScrapOozeCard": { - "NAME": "날붙이 수액", - "DESCRIPTION": "collector:장작. NL 체력을 3 잃습니다. NL 무작위 공격 카드를 !M! 장 얻습니다. NL 이번 턴에 그 카드의 비용이 0이 됩니다." - }, - "collector:SentryCard": { - "NAME": "보초기", - "DESCRIPTION": "피해를 !D! 줍니다. NL 약화를 !M! 부여합니다. NL 소멸된 카드 더미에 *보초기가 있다면 피해를 !D! 줍니다." - }, - "collector:ShelledParasiteCard": { - "NAME": "갑각 기생충", - "DESCRIPTION": "expansioncontent:판금_갑옷을 !M! 얻습니다." - }, - "collector:ShieldGremlinCard": { - "NAME": "방패 그렘린", - "DESCRIPTION": "방어도를 !B! 얻습니다." - }, - "collector:SnakePlantCard": { - "NAME": "뱀 식물", - "DESCRIPTION": "피해를 !D! 만큼 3번 줍니다." - }, - "collector:SneakyGremlinCard": { - "NAME": "교활한 그렘린", - "DESCRIPTION": "피해를 !D! 줍니다. NL 카드를 1장 뽑습니다." - }, - "collector:SneckoCard": { - "NAME": "스네코", - "DESCRIPTION": "카드를 !M! 장 뽑습니다. NL 손에 있는 카드가 sneckomod:뒤엉킵니다." - }, - "collector:SphericGuardianCard": { - "NAME": "구체형 수호기", - "DESCRIPTION": "bronze:흐릿함을 !M! 얻습니다." - }, - "collector:SpikerCard": { - "NAME": "반사기", - "DESCRIPTION": "가시를 !M! 얻습니다." - }, - "collector:SpikeSlimeCard": { - "NAME": "가시 슬라임", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL 이번 턴에 공격받을 때마다 공격한 대상에게 피해를 !M! 줍니다." - }, - "collector:SpireGrowthCard": { - "NAME": "첨탑 암종", - "DESCRIPTION": "적 턴이 종료할 때마다 피해를 !M! 줍니다." - }, - "collector:SpireShieldCard": { - "NAME": "첨탑의 방패", - "DESCRIPTION": "민첩을 !M! 얻습니다." - }, - "collector:SpireSpearCard": { - "NAME": "첨탑의 창", - "DESCRIPTION": "힘을 !M! 얻습니다." - }, - "collector:SsserpentCard": { - "NAME": "배애애애앰", - "DESCRIPTION": "피해를 !D! 줍니다. NL *의심을 얻습니다." - }, - "collector:TaskmasterCard": { - "NAME": "노예 관리자", - "DESCRIPTION": "collector:파멸을 !clm2! 부여합니다. NL 피해를 !D! 줍니다. NL 힘을 !M! 얻습니다." - }, - "collector:ThievesCard": { - "NAME": "도둑들", - "DESCRIPTION": "이번 턴에 적의 피해량을 !M! 감소시킵니다." - }, - "collector:TorchHeadCard": { - "NAME": "횃불 머리", - "DESCRIPTION": "무작위 collector:횃불_머리 *부름을 1장 얻습니다. NL 이번 턴에 그 카드의 비용은 0이 됩니다." - }, - "collector:TransientCard": { - "NAME": "과도자", - "DESCRIPTION": "힘을 !M! 얻습니다. NL 6턴 후 죽습니다." - }, - "collector:VagrantCard": { - "NAME": "부랑자", - "DESCRIPTION": "collector:비축을 !M! 얻습니다. NL *수치를 얻습니다." - }, - "collector:WomanInBlueCard": { - "NAME": "파란 옷의 여자", - "DESCRIPTION": "무작위 포션을 하나 얻습니다. NL 전투 종료 시 모든 포션을 잃습니다." - }, - "collector:WrithingMassCard": { - "NAME": "꿈틀대는 덩어리", - "DESCRIPTION": "예지 !M!. NL 뽑을 카드 더미 맨 위에 있는 카드를 사용합니다." - }, - "collector:DefaultCollectibleCard": { - "NAME": "영혼 없는 허물", - "DESCRIPTION": "이 적은 아직 고유한 수집품 카드가 없습니다! NL 힘 과 민첩을 !M! 얻습니다." - }, - "collector:ShootingStar": { - "NAME": "유성", - "DESCRIPTION": "매 턴 처음 collector:장작으로 공격 카드 소멸 시 그 카드를 복사해 얻습니다. NL 사용하기 전까지 그 카드의 비용은 0이 됩니다." - }, - "collector:CollectorCard": { - "NAME": "우로보로스", - "DESCRIPTION": "collector:장작. NL 약화를 !M! 부여합니다. NL 취약을 !M! 부여합니다. NL expansioncontent:임시 *체력을 !clm2! 얻습니다." - }, - "collector:Sapped": { - "NAME": "쇠락화", - "DESCRIPTION": "collector:장작. NL 이 카드를 뽑으면 [E] 를 잃습니다. NL 소멸. NL 덱에서 제거할 수 없습니다." - } -} +{ + "collector:ActOfAggression": { + "NAME": "공격의 장", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 적 전체에게 취약을 !M! 부여합니다." + }, + "collector:AlwaysMore": { + "NAME": "한없는 야욕", + "DESCRIPTION": "collector:장작. NL 골드를 !M! 얻습니다." + }, + "collector:AshenStrike": { + "NAME": "잿빛 타격", + "DESCRIPTION": "피해를 !D! 줍니다. NL *불씨를 얻습니다." + }, + "collector:Arrogance": { + "NAME": "오만", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 이번 턴에 사용하는 다음 공격 카드가 collector:파멸을 !M! 추가로 부여합니다." + }, + "collector:AshesAndDust": { + "NAME": "먼지와 재", + "DESCRIPTION": "적 전체에게 피해를 !D! 만큼 X번 줍니다. NL X 가 5 이상일 경우 2번 더 피해를 줍니다." + }, + "collector:BindingCall": { + "NAME": "번제의 부름", + "DESCRIPTION": "expansioncontent:임시 *체력을 !M! 얻습니다. NL collector:횃불 *머리에게 \"무작위 적에게 collector:파멸을 !clm2! 부여합니다.\" 행동을 추가합니다." + }, + "collector:Billow": { + "NAME": "연기", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 다음 턴에 *고함을 얻습니다." + }, + "collector:Bellow": { + "NAME": "고함", + "DESCRIPTION": "휘발성. NL 저번 턴에 남은 방어도만큼 collector:파멸을 부여합니다. NL 소멸.", + "EXTENDED_DESCRIPTION": [ + " NL ( collector:파멸을 !M! 부여합니다.)" + ] + }, + "collector:BlackBindings": { + "NAME": "암흑의 구속", + "DESCRIPTION": "약화를 !M! 부여합니다. 적이 보유한 해로운 효과 종류만큼 collector:파멸을 !clm2! 부여합니다." + }, + "collector:Blightning": { + "NAME": "황폐의 벼락", + "DESCRIPTION": "collector:파멸을 !M! 부여합니다. NL 피해를 !D! 줍니다. NL 수집품 카드 더미에서 카드를 1장 뽑습니다. NL 소멸." + }, + "collector:Bonfire": { + "NAME": "모닥불", + "DESCRIPTION": "collector:장작. NL 방어도를 !B! 얻습니다. NL 다음 턴에 collector:비축을 1 얻습니다." + }, + "collector:BrainDrain": { + "NAME": "두뇌 흡수", + "DESCRIPTION": "적이 체력을 !M! 잃습니다. NL 적의 collector:수집품 카드를 얻습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "적이 체력을 !M! 잃습니다. NL 적의 강화된 collector:수집품 카드를 얻습니다. NL 소멸." + }, + "collector:BramblesparKindling": { + "NAME": "가시나무서 쏘시개", + "DESCRIPTION": "사용불가. NL 소멸되면 *불타는 *타격을 얻습니다.", + "UPGRADE_DESCRIPTION": "사용불가. NL 소멸되면 *불타는 *타격+을 얻습니다.", + "EXTENDED_DESCRIPTION": [ + "불쏘시개에는 불을 붙여야 하지 않겠나." + ] + }, + "collector:BurningStrike": { + "NAME": "불타는 타격", + "DESCRIPTION": "피해를 !D! 줍니다. NL 카드를 1장 뽑습니다.", + "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL 카드를 !M! 장 뽑습니다." + }, + "collector:CantTouchThis": { + "NAME": "손대지 말거라", + "DESCRIPTION": "민첩을 !M! 얻습니다. NL 피해를 받지 않는다면 공격한 대상에게 collector:파멸을 !clm2! 부여합니다." + }, + "collector:CoffinNail": { + "NAME": "수명 흡수", + "DESCRIPTION": "피해를 !D! 줍니다. NL 소멸되면 다음 턴에 이 카드의 피해량이 !M! 증가하고 이 카드를 가져옵니다." + }, + "collector:Condemn": { + "NAME": "규탄", + "DESCRIPTION": "취약을 !M! 부여합니다. NL collector:파멸을 !clm2! 부여합니다." + }, + "collector:CursedWail": { + "NAME": "저주받은 통곡", + "DESCRIPTION": "collector:고초된 적의 힘을 !clm2! 감소시킵니다. NL 이번 턴 동안 적 전체의 힘을 !M! 감소시킵니다. NL 소멸." + }, + "collector:DarkApotheosis": { + "NAME": "어둠의 정점", + "DESCRIPTION": "모든 *수집품 카드를 이번 전투 동안 강화합니다. NL 소멸." + }, + "collector:DarkLordForm": { + "NAME": "어둠 군주의 형상", + "DESCRIPTION": "내 턴 시작 시 무작위 적에게 *넌 *나의 *것이다!를 사용합니다.", + "UPGRADE_DESCRIPTION": "내 턴 시작 시 무작위 적에게 *넌 *나의 *것이다!+를 사용합니다." + }, + "collector:Darkstorm": { + "NAME": "어둠의 폭풍", + "DESCRIPTION": "*황폐의 *벼락을 얻습니다. NL 뽑을 카드 더미에 그 카드를 !M! 장 섞어 넣습니다. NL 소멸." + }, + "collector:DarkwoodKindling": { + "NAME": "흑버들재 쏘시개", + "DESCRIPTION": "사용불가. NL 소멸되면 다음 턴에 collector:비축을 !M! 얻습니다.", + "UPGRADE_DESCRIPTION": "사용불가. NL 보존. NL 소멸되면 다음 턴에 collector:비축을 !M! 얻습니다.", + "EXTENDED_DESCRIPTION": [ + "불쏘시개에는 불을 붙여야 하지 않겠나." + ] + }, + "collector:Defend": { + "NAME": "수비", + "DESCRIPTION": "방어도를 !B! 얻습니다." + }, + "collector:DoubleTrouble": { + "NAME": "더해지는 난제", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 이번 턴에 다음 사용하는 수집품 카드가 두 번 사용됩니다." + }, + "collector:DoMayhem": { + "NAME": "대혼란의 서막", + "DESCRIPTION": "내 턴 시작 시 collector:파멸을 25 이상 보유한 적이 있다면 뽑을 카드 더미 맨 위에 있는 카드를 사용합니다." + }, + "collector:DragonsTrove": { + "NAME": "용의 비보", + "DESCRIPTION": "collector:장작. NL *수집품 카드를 2장 뽑습니다. NL collector:비축을 !M! 얻습니다. NL 소멸." + }, + "collector:Ember": { + "NAME": "불씨", + "DESCRIPTION": "보존. NL 소멸되면 힘을 !M! 얻습니다. NL 소멸.", + "EXTENDED_DESCRIPTION": [ + "사용할 수 없다. 불씨는 지펴져야만 하지." + ] + }, + "collector:Empower": { + "NAME": "권능", + "DESCRIPTION": "다음 !M! 턴 동안 내 턴 시작 시 힘을 X 얻습니다." + }, + "collector:Extricate": { + "NAME": "영혼 절단", + "DESCRIPTION": "손에 있는 공격 카드를 제외한 모든 카드를 소멸시킵니다. NL 피해를 !D! 줍니다." + }, + "collector:FeelMyPain": { + "NAME": "나의 고통을 느껴라", + "DESCRIPTION": "카드가 소멸될 때마다 무작위 적들의 체력을 !M! 잃게합니다." + }, + "collector:FiendFire": { + "NAME": "지옥불", + "DESCRIPTION": "카드를 전부 소멸시킵니다. NL 그 수만큼 피해를 !D! 줍니다. NL 소멸." + }, + "collector:Finalize": { + "NAME": "종결", + "DESCRIPTION": "적이 죽을 때 체력을 !clm2! 회복합니다. NL collector:파멸을 !M! 부여합니다. NL 소멸." + }, + "collector:FingerOfDeath": { + "NAME": "죽음의 손짓", + "DESCRIPTION": "collector:비축으로만 이 카드를 사용할 수 있습니다. NL collector:파멸을 !M! 부여합니다.", + "UPGRADE_DESCRIPTION": "collector:비축으로만 이 카드를 사용할 수 있습니다. NL 적 전체에게 collector:파멸을 !M! 부여합니다." + }, + "collector:FlameLash": { + "NAME": "화염 채찍", + "DESCRIPTION": "collector:장작. NL 피해를 !D! 줍니다. NL 이 카드로 소멸시킨 카드의 피해량만큼 이 카드의 피해량이 증가합니다.", + "UPGRADE_DESCRIPTION": "collector:장작. NL 피해를 !D! 줍니다. NL 이 카드로 소멸시킨 카드의 피해량 + !M! 만큼 이 카드의 피해량이 증가합니다." + }, + "collector:FleetingEmbers": { + "NAME": "스치는 불씨", + "DESCRIPTION": "collector:장작. NL 방어도를 !B! 얻습니다. NL *불씨를 !M! 장 얻습니다." + }, + "collector:Forgery": { + "NAME": "위조품", + "DESCRIPTION": "피해를 !D! 줍니다. NL 수집품 카드 더미에서 카드 !M! 장 중 1장 선택 후 복사해 가져옵니다.", + "EXTENDED_DESCRIPTION": [ + "복사할 카드를 선택하십시오." + ] + }, + "collector:FuelTheFire": { + "NAME": "연료 공급", + "DESCRIPTION": "collector:장작. NL 다음 턴에 collector:비축을 !M! 얻습니다.", + "UPGRADE_DESCRIPTION": "collector:장작. NL 다음 턴에 collector:비축을 !M! 얻고 카드를 1장 뽑습니다." + }, + "collector:Goodbye": { + "NAME": "잘 가거라", + "DESCRIPTION": "적의 collector:파멸을 2배로 늘립니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "적의 collector:파멸을 3배로 늘립니다. NL 소멸." + }, + "collector:GourmandsGaze": { + "NAME": "폭식가의 응시", + "DESCRIPTION": "피해를 !D! 줍니다. NL 이번 턴에 collector:수집품 카드를 사용했다면 방어도를 !B! 얻습니다." + }, + "collector:GreaterHurting": { + "NAME": "심한 아픔", + "DESCRIPTION": "휘발성. NL 피해를 !D! 줍니다. NL 이 카드 소멸 시 *심각한 *아픔을 얻습니다.", + "UPGRADE_DESCRIPTION": "휘발성. NL 피해를 !D! 줍니다. NL 이 카드 소멸 시 *심각한 *아픔+을 얻습니다." + }, + "collector:GreatestHurting": { + "NAME": "심각한 아픔", + "DESCRIPTION": "휘발성. NL 피해를 !D! 줍니다. NL 이 카드 소멸 시 *불씨를 얻습니다." + }, + "collector:GreenpyreLocus": { + "NAME": "머무는 녹색 불꽃", + "DESCRIPTION": "collector:수집품 카드 3장 중 1장을 선택해 얻습니다. *수집품 카드 더미에 그 카드를 !M! 장 복사해 섞어 넣습니다.", + "EXTENDED_DESCRIPTION": [ + "얻을 카드를 선택하십시오." + ] + }, + "collector:Heatwave": { + "NAME": "열 파동", + "DESCRIPTION": "적 전체에게 피해를 !D! 줍니다. NL *불씨를 얻습니다." + }, + "collector:Hoard": { + "NAME": "저축", + "DESCRIPTION": "collector:장작. NL 카드를 !M! 장 뽑습니다. NL 이번 턴 동안 그 카드를 보존합니다." + }, + "collector:HoardersStrike": { + "NAME": "저축가의 타격", + "DESCRIPTION": "피해를 !D! 줍니다. NL *수집품 카드 더미 맨 위에 있는 카드를 사용합니다." + }, + "collector:Hurting": { + "NAME": "아픔", + "DESCRIPTION": "휘발성. NL 피해를 !D! 줍니다. NL 이 카드 소멸 시 *심한 *아픔을 얻습니다.", + "UPGRADE_DESCRIPTION": "휘발성. NL 피해를 !D! 줍니다. NL 이 카드 소멸 시 *심한 *아픔+을 얻습니다." + }, + "collector:IllTakeThat": { + "NAME": "거둬들이마", + "DESCRIPTION": "적의 방어도를 최대 !M! gremlin:강탈합니다. NL 피해를 !D! 줍니다." + }, + "collector:InevitableDemise": { + "NAME": "필연적 종말", + "DESCRIPTION": "피해를 !D! 줍니다. NL 다음으로 대상의 collector:파멸이 제거될 때 제거되지 않게 합니다." + }, + "collector:InflictAgony": { + "NAME": "고통의 형벌", + "DESCRIPTION": "피해를 !D! 줍니다. NL 적이 collector:고초되지 않았다면 약화 와 취약을 2 부여합니다." + }, + "collector:Invigorate": { + "NAME": "섬광", + "DESCRIPTION": "collector:장작. NL *헛디딤 또는 *실명을 선택해 얻습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "collector:장작. NL *헛디딤+ 또는 *실명+을 선택해 얻습니다. NL 소멸.", + "EXTENDED_DESCRIPTION": [ + "얻을 카드를 선택하십시오." + ] + }, + "collector:IronbarkKindling": { + "NAME": "유칼리나무철 쏘시개", + "DESCRIPTION": "사용불가. NL 소멸되면 방어도를 !B! 얻습니다.", + "UPGRADE_DESCRIPTION": "사용불가. 보존. NL 소멸되면 방어도를 !B! 얻습니다.", + "EXTENDED_DESCRIPTION": [ + "불쏘시개에는 불을 붙여야 하지 않겠나." + ] + }, + "collector:ItMattersNot": { + "NAME": "가소롭구나", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 약화를 가진 적이 있다면 그 적에게 약화를 !M! 부여하고 취약을 가진 적이 있다면 그 적에게 취약을 !M! 부여합니다." + }, + "collector:JadedJabs": { + "NAME": "거절의 찌르기", + "DESCRIPTION": "collector:장작. NL 피해를 !D! 줍니다. NL 이 카드로 소멸시킨 카드의 비용 + !M! 만큼 단도를 얻습니다." + }, + "collector:Karma": { + "NAME": "업보", + "DESCRIPTION": "내 턴 종료 시 방어도를 !M! 얻습니다. NL collector:고초된 적이 있다면 이 카드로 얻는 방어도가 !clm2! 증가합니다.", + "UPGRADE_DESCRIPTION": "선천성. NL 내 턴 종료 시 방어도를 !M! 얻습니다. NL collector:고초된 적이 있다면 이 카드로 얻는 방어도가 !clm2! 증가합니다." + }, + "collector:LanternFlare": { + "NAME": "등불", + "DESCRIPTION": "collector:장작. NL collector:파멸을 !M! 부여합니다. NL 대상의 매 턴 종료 시 파멸을 !clm2! 부여합니다." + }, + "collector:LuckyWick": { + "NAME": "행운의 심지", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 피해를 !D! 줍니다." + }, + "collector:MastersCall": { + "NAME": "군주의 부름", + "DESCRIPTION": "사용안합니다!" + }, + "collector:MiniCurse": { + "NAME": "옅은 저주", + "DESCRIPTION": "collector:장작. NL 취약과 약화를 1 부여합니다.", + "UPGRADE_DESCRIPTION": "collector:장작. NL 적 전체에게 취약과 약화를 1 부여합니다." + }, + "collector:Misdirect": { + "NAME": "방향 상실", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 다음 턴에 collector:비축을 1 얻습니다." + }, + "collector:MysteryWeaving": { + "NAME": "신비한 무늬", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 손에 있는 다른 카드 하나당 이 카드의 방어도를 2 감소시킵니다." + }, + "collector:OakbrimKindling": { + "NAME": "참나무널 쏘시개", + "DESCRIPTION": "사용불가. NL 소멸되면 카드를 !M! 장 뽑습니다.", + "EXTENDED_DESCRIPTION": [ + "불쏘시개에는 불을 붙여야 하지 않겠나." + ] + }, + "collector:Omen": { + "NAME": "징조", + "DESCRIPTION": "*수집품 카드를 사용할 때마다 힘을 1 얻습니다.", + "UPGRADE_DESCRIPTION": "선천성. NL *수집품 카드를 사용할 때마다 힘을 1 얻습니다." + }, + "collector:ProtectingCall": { + "NAME": "수호의 부름", + "DESCRIPTION": "expansioncontent:임시 *체력을 !M! 얻습니다. NL collector:횃불 *머리에게 \" 방어도를 !clm2! 얻습니다. \" 행동을 추가합니다." + }, + "collector:Pyromancy": { + "NAME": "불점", + "DESCRIPTION": "collector:장작. NL 내 턴 시작 시 collector:비축을 1 얻습니다.", + "UPGRADE_DESCRIPTION": "선천성. collector:장작. NL 내 턴 시작 시 collector:비축을 1 얻습니다." + }, + "collector:RagingCall": { + "NAME": "거센 부름", + "DESCRIPTION": "expansioncontent:임시 *체력을 !M! 얻습니다. NL collector:횃불 *머리에게 \" 적 전체에게 피해를 !clm2! 줍니다. \" 행동을 추가합니다." + }, + "collector:ReceiveTribute": { + "NAME": "공물 징수", + "DESCRIPTION": "collector:장작. NL expansioncontent:보스 카드 !M! 장 중 1장을 선택해 얻습니다. 그 카드에 보존 효과가 추가됩니다. NL 소멸.", + "EXTENDED_DESCRIPTION": [ + "얻을 카드를 선택하십시오." + ] + }, + "collector:Roast": { + "NAME": "굽기", + "DESCRIPTION": "collector:장작. NL 피해를 !D! 줍니다." + }, + "collector:RotwoodKindling": { + "NAME": "부목 쏘시개", + "DESCRIPTION": "사용불가. NL 소멸되면 적 전체에게 취약을 !M! 부여하고 collector:파멸을 !clm2! 부여합니다.", + "EXTENDED_DESCRIPTION": [ + "불쏘시개에는 불을 붙여야 하지 않겠나." + ] + }, + "collector:SapStrength": { + "NAME": "죽음의 낙인", + "DESCRIPTION": "피해를 !D! 줍니다. NL 다음 턴에 적이 받은 막히지 않은 피해량의 두 배만큼 체력을 잃습니다." + }, + "collector:ScorchingRay": { + "NAME": "맹렬한 광선", + "DESCRIPTION": "무작위 적들에게 피해를 !D! 만큼 X 번 줍니다." + }, + "collector:SeedOfDoubt": { + "NAME": "의심의 씨앗", + "DESCRIPTION": "collector:파멸을 !M! 부여합니다. NL 이 카드가 손에 있다면 카드가 소멸될 때마다 이 카드의 *파멸이 !clm2! 증가합니다." + }, + "collector:ShadowDaggers": { + "NAME": "그림자 단검", + "DESCRIPTION": "이번 전투에서 사용한 수집품 카드만큼 피해를 !D! 줍니다. NL 소멸.", + "EXTENDED_DESCRIPTION": [ + " NL (피해를 ", + " 번 줍니다.)", + " 번 줍니다.)" + ] + }, + "collector:SomberShield": { + "NAME": "거무스름한 방패", + "DESCRIPTION": "collector:장작. NL 방어도를 !B! 얻습니다. NL 다음 턴에 이 카드로 소멸시킨 카드를 복사해 얻습니다." + }, + "collector:SoulSnare": { + "NAME": "영혼 덫", + "DESCRIPTION": "collector:파멸을 !M! 부여합니다. NL 소멸." + }, + "collector:Soulforge": { + "NAME": "영혼 구축", + "DESCRIPTION": "collector:수집품 카드 더미에서 카드를 1장 뽑습니다. 강화된 그 카드를 !M! 장 얻습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "collector:수집품 카드 더미에서 카드를 1장 뽑습니다. 강화된 그 카드를 !M! 장 얻습니다. NL 소멸." + }, + "collector:Spark": { + "NAME": "불똥", + "DESCRIPTION": "collector:비축을 1 얻습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "collector:비축을 1 얻습니다. NL 카드를 1장 뽑습니다. NL 소멸." + }, + "collector:SpiritLeech": { + "NAME": "정기 흡수", + "DESCRIPTION": "피해를 !D! 줍니다. NL 대상이 collector:고초된 적이면 방어도를 !B! 얻습니다." + }, + "collector:StashAway": { + "NAME": "은닉", + "DESCRIPTION": "방어도를 !B! 만큼 X번 얻습니다. NL 다음 턴에 collector:비축을 X 얻습니다. NL 소멸." + }, + "collector:Strike": { + "NAME": "타격", + "DESCRIPTION": "피해를 !D! 줍니다." + }, + "collector:SuckerPunch": { + "NAME": "불의의 일격", + "DESCRIPTION": "피해를 !D! 줍니다. NL 약화를 !M! 부여합니다." + }, + "collector:Suffering": { + "NAME": "고통 나누기", + "DESCRIPTION": "약화 또는 취약을 부여할 때마다 부여한 적에게 collector:파멸을 !M! 부여합니다." + }, + "collector:SunbloomKindling": { + "NAME": "햇살꽃 쏘시개", + "DESCRIPTION": "사용불가. NL 소멸되면 힘을 !M! 얻고 *불씨를 2장 얻습니다.", + "EXTENDED_DESCRIPTION": [ + "불쏘시개에는 불을 붙여야 하지 않겠나." + ] + }, + "collector:ThornWhip": { + "NAME": "가시 채찍", + "DESCRIPTION": "적 전체에게 피해를 !D! 주고 hermit:타박상을 !M! 부여합니다. NL 단도를 얻습니다." + }, + "collector:Torchbearer": { + "NAME": "횃불 봉송자", + "DESCRIPTION": "expansioncontent:임시 *체력을 !M! 얻습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "expansioncontent:임시 *체력을 가지고 있다면 소멸합니다. NL expansioncontent:임시 *체력을 !M! 얻습니다." + }, + "collector:WhirlingFlame": { + "NAME": "회오리 불", + "DESCRIPTION": "적 전체에게 피해를 !D! 줍니다. NL 버린 카드 더미에서 카드를 1장 선택해 뽑을 카드 더미 맨 위에 놓습니다." + }, + "collector:VoidArmor": { + "NAME": "공허 갑옷", + "DESCRIPTION": "모두 방어도를 !B! 얻습니다. NL 모두 bronze:흐릿함을 1 얻습니다." + }, + "collector:Wildfire": { + "NAME": "들불", + "DESCRIPTION": "적이 보유한 효과의 종류 하나당 피해를 !D! 줍니다." + }, + "collector:YouAreMine": { + "NAME": "넌 나의 것이다!", + "DESCRIPTION": "약화를 !M! 부여합니다. NL 취약을 !M! 부여합니다. collector:파멸을 !clm2! 부여합니다." + }, + "collector:Whomp": { + "NAME": "짝", + "DESCRIPTION": "피해를 !D! 줍니다. NL expansioncontent:임시 *체력을 !M! 얻습니다. NL 소멸." + }, + "collector:AcidSlimeCard": { + "NAME": "산성 슬라임", + "DESCRIPTION": "무작위 비용이 0인 카드를 !M! 장 얻습니다.", + "UPGRADE_DESCRIPTION": "무작위 비용이 0인 카드를 !M! 장 얻습니다." + }, + "collector:AugmenterCard": { + "NAME": "증강자", + "DESCRIPTION": "체력을 3 잃습니다. NL 힘을 !M! 얻습니다." + }, + "collector:BearCard": { + "NAME": "곰", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 적의 모든 방어도를 없앱니다. NL 피해를 !D! 줍니다." + }, + "collector:BlueSlaverCard": { + "NAME": "푸른 노예 상인", + "DESCRIPTION": "피해를 !D! 줍니다. NL 약화를 1 부여합니다. NL 적의 약화를 두 배로 늘립니다." + }, + "collector:BonfireSpiritsCard": { + "NAME": "모닥불 정령들", + "DESCRIPTION": "collector:장작. NL 체력을 !M! 회복합니다. NL 이 카드로 희귀 카드가 소멸되면 최대 체력이 1 증가합니다." + }, + "collector:BookOfStabbingCard": { + "NAME": "칼부림의 책", + "DESCRIPTION": "막히지 않은 피해를 줄 때마다 collector:파멸을 !M! 부여합니다." + }, + "collector:BronzeOrbCard": { + "NAME": "청동 구체", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 피해를 !D! 줍니다. NL 뽑을 카드 더미 맨 위에 있는 카드의 비용이 사용하기 전까지 0이 됩니다." + }, + "collector:ByrdCard": { + "NAME": "섀", + "DESCRIPTION": "피해를 !D! 만큼 5번 줍니다." + }, + "collector:CenturionCard": { + "NAME": "백부장", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 민첩을 !M! 얻습니다." + }, + "collector:ChosenCard": { + "NAME": "선택받은 자", + "DESCRIPTION": "약화를 !M! 부여합니다. NL 적이 공격할 의도가 없다면 취약을 !clm2! 부여합니다." + }, + "collector:ClericCard": { + "NAME": "성직자", + "DESCRIPTION": "collector:장작. NL expansioncontent:임시 *체력을 !M! 얻습니다." + }, + "collector:CultistCard": { + "NAME": "광신자", + "DESCRIPTION": "collector:장작. NL 다음 3턴 동안 내 턴 시작 시 힘을 1 얻습니다." + }, + "collector:DaggerCard": { + "NAME": "단검", + "DESCRIPTION": "체력을 !M! 잃습니다. NL 피해를 !D! 줍니다." + }, + "collector:DarklingsCard": { + "NAME": "어두미", + "DESCRIPTION": "collector:장작. NL 피해를 !D! 줍니다. *수집품 카드를 expansioncontent:발굴합니다.", + "EXTENDED_DESCRIPTION": [ + "복사할 카드를 선택하십시오." + ] + }, + "collector:DesignerInSpireCard": { + "NAME": "탑-클래스 디자이너", + "DESCRIPTION": "expansioncontent:임시 *체력을 !M! 얻습니다. NL collector:횃불 *머리에게 \" 카드를 1장 뽑습니다. \" 행동을 추가합니다." + }, + "collector:FinalBossCard": { + "NAME": "마지막 게임", + "DESCRIPTION": "적의 *천하무적을 제거하고 hermit:기절시킵니다. NL 소멸." + }, + "collector:FaceTraderCard": { + "NAME": "얼굴 상인", + "DESCRIPTION": "무작위 색상 카드를 !M! 장 얻습니다. NL 그 카드에 휘발성 효과가 추가됩니다." + }, + "collector:FatGremlinCard": { + "NAME": "뚱뚱한 그렘린", + "DESCRIPTION": "피해를 !D! 줍니다. NL 약화를 !M! 부여합니다." + }, + "collector:FungiBeastCard": { + "NAME": "동물하초", + "DESCRIPTION": "취약을 !M! 부여합니다. NL 적 전체에게 취약을 1 부여합니다." + }, + "collector:GiantHeadCardStageOne": { + "NAME": "째", + "DESCRIPTION": "다음 턴에 *깍을 얻습니다." + }, + "collector:GiantHeadCardStageTwo": { + "NAME": "깍", + "DESCRIPTION": "다음 턴에 *머리 *박치기를 얻습니다." + }, + "collector:GiantHeadCardStageThree": { + "NAME": "머리 박치기", + "DESCRIPTION": "적 전체에게 피해를 !D! 줍니다." + }, + "collector:GremlinLeaderCard": { + "NAME": "그렘린 리더", + "DESCRIPTION": "*수집품 목록 중 무작위 그렘린 카드를 !M! 장 얻습니다." + }, + "collector:GremlinNobCard": { + "NAME": "귀족 그렘린", + "DESCRIPTION": "스킬 카드를 사용할 때마다 expansioncontent:활력을 !M! 얻습니다." + }, + "collector:GremlinWizardCard": { + "NAME": "마법사 그렘린", + "DESCRIPTION": "다음 턴에 expansioncontent:활력을 !M! 얻고 collector:비축을 1 얻습니다." + }, + "collector:JawWormCard": { + "NAME": "턱 벌레", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 힘을 !M! 얻습니다." + }, + "collector:JousterCard": { + "NAME": "기사", + "DESCRIPTION": "피해를 !D! 줍니다. NL 적이 하나만 있다면 방어도를 !B! 얻습니다." + }, + "collector:LagavulinCard": { + "NAME": "라가불린", + "DESCRIPTION": "적 전체의 힘을 !M! 감소시킵니다." + }, + "collector:LivingWallCard": { + "NAME": "살아있는 벽", + "DESCRIPTION": "collector:장작. NL 무작위 강화된 카드를 얻습니다. NL 사용하기 전까지 그 카드의 비용이 0이 됩니다." + }, + "collector:LouseCard": { + "NAME": "공벌레", + "DESCRIPTION": "bronze:흐릿함을 1 얻습니다. NL 다음으로 막히지 않은 피해를 받는다면 방어도를 !B! 얻습니다." + }, + "collector:MadGremlinCard": { + "NAME": "화난 그렘린", + "DESCRIPTION": "힘을 !M! 얻습니다. NL 이번 턴이 끝날 때 힘을 !M! 잃습니다." + }, + "collector:MawCard": { + "NAME": "아귀", + "DESCRIPTION": "피해를 !D! 줍니다." + }, + "collector:MerchantCard": { + "NAME": "상인", + "DESCRIPTION": "무작위 무색 카드를 !M! 장 얻습니다. NL 이번 턴에 그 카드들의 비용은 0이 됩니다." + }, + "collector:MushroomCard": { + "NAME": "버섯", + "DESCRIPTION": "피해를 !D! 줍니다. NL 무작위 적에게 약화 또는 취약을 !M! 부여합니다." + }, + "collector:MysticCard": { + "NAME": "신비주의자", + "DESCRIPTION": "expansioncontent:임시 *체력을 !M! 얻습니다." + }, + "collector:NemesisCard": { + "NAME": "네메시스", + "DESCRIPTION": "불가침을 1 얻습니다." + }, + "collector:NlothCard": { + "NAME": "느로스", + "DESCRIPTION": "collector:장작. NL 무작위 희귀 카드를 1장 얻습니다. NL 그 카드의 비용을 1 낮춥니다.", + "UPGRADE_DESCRIPTION": "collector:장작. NL 무작위 희귀 카드를 1장 얻습니다. NL 그 카드의 비용은 0이 됩니다." + }, + "collector:OrbWalkerCard": { + "NAME": "구체 순찰기", + "DESCRIPTION": "피해를 !D! 줍니다. NL *불씨를 !M! 장 얻습니다." + }, + "collector:PointyCard": { + "NAME": "촉새", + "DESCRIPTION": "피해를 !D! 만큼 두 번 줍니다. NL 카드를 1장 뽑습니다." + }, + "collector:RanwidCard": { + "NAME": "랜위드", + "DESCRIPTION": "전투 종료 시 포션과 카드 보상을 추가로 얻습니다." + }, + "collector:RedSlaverCard": { + "NAME": "붉은 노예 상인", + "DESCRIPTION": "이번 턴 동안 적의 힘을 !M! 감소시킵니다." + }, + "collector:ReptomancerCard": { + "NAME": "파충류 주술사", + "DESCRIPTION": "expansioncontent:임시 *체력을 !M! 얻습니다. NL collector:횃불 *머리에게 \"무작위 적에게 중독을 !clm2! 부여합니다.\" 행동을 추가합니다." + }, + "collector:RepulsorCard": { + "NAME": "현혹기", + "DESCRIPTION": "collector:장작. NL 카드를 !M! 장 뽑습니다." + }, + "collector:RomeoCard": { + "NAME": "로미오", + "DESCRIPTION": "다음 사용하는 공격 카드의 비용이 0이 되고 피해량이 !M! 증가합니다." + }, + "collector:ScrapOozeCard": { + "NAME": "날붙이 수액", + "DESCRIPTION": "collector:장작. NL 체력을 3 잃습니다. NL 무작위 공격 카드를 !M! 장 얻습니다. NL 이번 턴에 그 카드들의 비용은 0이 됩니다." + }, + "collector:SentryCard": { + "NAME": "보초기", + "DESCRIPTION": "피해를 !D! 줍니다. NL 약화를 !M! 부여합니다. NL 소멸된 카드 더미에 있는 *보초기 한 장당 반복합니다." + }, + "collector:ShelledParasiteCard": { + "NAME": "갑각 기생충", + "DESCRIPTION": "expansioncontent:판금 *갑옷을 !M! 얻습니다." + }, + "collector:ShieldGremlinCard": { + "NAME": "방패 그렘린", + "DESCRIPTION": "방어도를 !B! 얻습니다." + }, + "collector:SnakePlantCard": { + "NAME": "뱀 식물", + "DESCRIPTION": "피해를 !D! 만큼 3번 줍니다." + }, + "collector:SneakyGremlinCard": { + "NAME": "교활한 그렘린", + "DESCRIPTION": "피해를 !D! 줍니다. NL 카드를 1장 뽑습니다." + }, + "collector:SneckoCard": { + "NAME": "스네코", + "DESCRIPTION": "카드를 !M! 장 뽑습니다. NL 손에 있는 카드가 sneckomod:뒤엉킵니다." + }, + "collector:SphericGuardianCard": { + "NAME": "구체형 수호기", + "DESCRIPTION": "bronze:흐릿함을 !M! 얻습니다." + }, + "collector:SpikerCard": { + "NAME": "반사기", + "DESCRIPTION": "가시를 !M! 얻습니다." + }, + "collector:SpikeSlimeCard": { + "NAME": "가시 슬라임", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 이번 턴에 공격받을 때마다 공격한 대상에게 피해를 !M! 줍니다." + }, + "collector:SpireGrowthCard": { + "NAME": "첨탑 암종", + "DESCRIPTION": "대상의 턴이 종료할 때마다 피해를 !M! 줍니다." + }, + "collector:SpireShieldCard": { + "NAME": "첨탑의 방패", + "DESCRIPTION": "민첩을 !M! 얻습니다." + }, + "collector:SpireSpearCard": { + "NAME": "첨탑의 창", + "DESCRIPTION": "힘을 !M! 얻습니다." + }, + "collector:SsserpentCard": { + "NAME": "배애애애앰", + "DESCRIPTION": "피해를 !D! 줍니다. NL *의심을 얻습니다." + }, + "collector:TaskmasterCard": { + "NAME": "노예 관리자", + "DESCRIPTION": "collector:파멸을 !clm2! 부여합니다. NL 피해를 !D! 줍니다. NL 힘을 !M! 얻습니다." + }, + "collector:ThievesCard": { + "NAME": "도둑들", + "DESCRIPTION": "이번 턴에 적의 피해량을 !M! 감소시킵니다." + }, + "collector:TorchHeadCard": { + "NAME": "횃불 머리", + "DESCRIPTION": "무작위 collector:횃불 *머리 *부름을 1장 얻습니다. NL 이번 턴에 그 카드의 비용은 0이 됩니다." + }, + "collector:TransientCard": { + "NAME": "과도자", + "DESCRIPTION": "힘을 !M! 얻습니다. NL 6턴 후 죽습니다." + }, + "collector:VagrantCard": { + "NAME": "부랑자", + "DESCRIPTION": "collector:비축을 !M! 얻습니다. NL *수치를 얻습니다." + }, + "collector:WomanInBlueCard": { + "NAME": "파란 옷의 여자", + "DESCRIPTION": "무작위 포션을 하나 얻습니다. NL 전투 종료 시 모든 포션을 잃습니다." + }, + "collector:WrithingMassCard": { + "NAME": "꿈틀대는 덩어리", + "DESCRIPTION": "예지 !M!. NL 뽑을 카드 더미 맨 위에 있는 카드를 사용합니다." + }, + "collector:DefaultCollectibleCard": { + "NAME": "영혼 없는 허물", + "DESCRIPTION": "이 적은 아직 고유한 수집품 카드가 없습니다! NL 힘과 민첩을 !M! 얻습니다." + }, + "collector:ShootingStar": { + "NAME": "유성", + "DESCRIPTION": "매 턴 처음 collector:장작으로 공격 카드 소멸 시 그 카드를 복사해 얻습니다. NL 사용하기 전까지 그 카드의 비용이 0이 됩니다." + }, + "collector:CollectorCard": { + "NAME": "우로보로스", + "DESCRIPTION": "collector:장작. NL 약화를 !M! 부여합니다. NL 취약을 !M! 부여합니다. NL expansioncontent:임시 *체력을 !clm2! 얻습니다." + }, + "collector:Sapped": { + "NAME": "쇠락화", + "DESCRIPTION": "collector:장작. NL 이 카드를 뽑으면 [E] 를 잃습니다. NL 소멸. NL 덱에서 제거할 수 없습니다." + } +} diff --git a/src/main/resources/collectorResources/localization/kor/EventStrings.json b/src/main/resources/collectorResources/localization/kor/EventStrings.json index cb92a2ed0d..29091fa582 100644 --- a/src/main/resources/collectorResources/localization/kor/EventStrings.json +++ b/src/main/resources/collectorResources/localization/kor/EventStrings.json @@ -1,3 +1,3 @@ -{ - +{ + } \ No newline at end of file diff --git a/src/main/resources/collectorResources/localization/kor/KeywordStrings.json b/src/main/resources/collectorResources/localization/kor/KeywordStrings.json index b2ea97ba20..027e8415e8 100644 --- a/src/main/resources/collectorResources/localization/kor/KeywordStrings.json +++ b/src/main/resources/collectorResources/localization/kor/KeywordStrings.json @@ -61,6 +61,7 @@ "PROPER_NAME": "횃불 머리", "NAMES": [ "torchhead", + "횃불", "횃불_머리", "횃불_머리가", "횃불_머리에게" diff --git a/src/main/resources/collectorResources/localization/kor/MonsterStrings.json b/src/main/resources/collectorResources/localization/kor/MonsterStrings.json index 9e26dfeeb6..22fdca1b26 100644 --- a/src/main/resources/collectorResources/localization/kor/MonsterStrings.json +++ b/src/main/resources/collectorResources/localization/kor/MonsterStrings.json @@ -1 +1 @@ -{} \ No newline at end of file +{} \ No newline at end of file diff --git a/src/main/resources/collectorResources/localization/kor/OrbStrings.json b/src/main/resources/collectorResources/localization/kor/OrbStrings.json index 8bdec4b3f4..2f7235e79b 100644 --- a/src/main/resources/collectorResources/localization/kor/OrbStrings.json +++ b/src/main/resources/collectorResources/localization/kor/OrbStrings.json @@ -1,8 +1,8 @@ -{ -} - - - - - - +{ +} + + + + + + diff --git a/src/main/resources/collectorResources/localization/kor/PotionStrings.json b/src/main/resources/collectorResources/localization/kor/PotionStrings.json index 0f2d8d95f9..69ceac0bac 100644 --- a/src/main/resources/collectorResources/localization/kor/PotionStrings.json +++ b/src/main/resources/collectorResources/localization/kor/PotionStrings.json @@ -1,37 +1,36 @@ -{ - "collector:MiniCursePotion": { - "NAME": "영혼 추출제", - "DESCRIPTIONS": [ - "#y약화와 #y취약을 #b1 #y파멸을 #b6 부여합니다.", - "#y약화를 #b", - " , #y취약을 #b", - " , #y파멸을 #b", - " 부여합니다." - ] - }, - "collector:ReservePotion": { - "NAME": "비축 포션", - "DESCRIPTIONS": [ - "#y비축을 #b2 얻습니다.", - "#y비축을 #b", - " 얻습니다." - ] - }, - "collector:DebuffDoublePotion": { - "NAME": "방부제", - "DESCRIPTIONS": [ - "대상의 해로운 효과를 #b2 배로 만듭니다.", - "대상의 해로운 효과를 #b", - " 배로 만듭니다." - ] - }, - "collector:TempHPPotion": { - "NAME": "지옥물", - "DESCRIPTIONS": [ - "#y임시 #y체력을 #b8 얻습니다.", - "#y임시 #y체력을 #b", - " 얻습니다." - ] - } - } - \ No newline at end of file +{ + "collector:MiniCursePotion": { + "NAME": "영혼 추출제", + "DESCRIPTIONS": [ + "#y약화와 #y취약을 #b1 #y파멸을 #b6 부여합니다.", + "#y약화를 #b", + " , #y취약을 #b", + " , #y파멸을 #b", + " 부여합니다." + ] + }, + "collector:ReservePotion": { + "NAME": "비축 포션", + "DESCRIPTIONS": [ + "#y비축을 #b2 얻습니다.", + "#y비축을 #b", + " 얻습니다." + ] + }, + "collector:DebuffDoublePotion": { + "NAME": "방부제", + "DESCRIPTIONS": [ + "대상의 해로운 효과를 #b2 배로 만듭니다.", + "대상의 해로운 효과를 #b", + " 배로 만듭니다." + ] + }, + "collector:TempHPPotion": { + "NAME": "지옥물", + "DESCRIPTIONS": [ + "#y임시 #y체력을 #b8 얻습니다.", + "#y임시 #y체력을 #b", + " 얻습니다." + ] + } +} diff --git a/src/main/resources/collectorResources/localization/kor/PowerStrings.json b/src/main/resources/collectorResources/localization/kor/PowerStrings.json index e0198547d1..907712d264 100644 --- a/src/main/resources/collectorResources/localization/kor/PowerStrings.json +++ b/src/main/resources/collectorResources/localization/kor/PowerStrings.json @@ -1,327 +1,327 @@ -{ - "collector:AddCopyNextTurn": { - "NAME": "카드 획득", - "DESCRIPTIONS": [ - "내 다음 턴 시작 시 ", - "를 얻습니다." - ] - }, - "collector:BindingCall": { - "NAME": "번제의 부름", - "DESCRIPTIONS": [ - "#y임시 #y체력을 잃을 때마다 적 전체에게 #y파멸을 #b", - " 부여합니다.", - "Translator Note: 사용안함" - ] - }, - "collector:CantTouchThis": { - "NAME": "손대지 말거라", - "DESCRIPTIONS": [ - "공격에 피해를 받지 않는다면 공격한 대상에게 #y파멸을 #b", - " 부여합니다." - ] - }, - "collector:Crackle": { - "NAME": "치직", - "DESCRIPTIONS": [ - "내 턴 시작 시 #y비축을 #b1 얻습니다.", - "내 턴 시작 시 #y비축을 #b", - " 얻습니다." - ] - }, - "collector:DarkLordForm": { - "NAME": "어둠 군주의 형상", - "DESCRIPTIONS": [ - "내 턴 시작 시 무작위 적에게 #y넌 #y나의 #y것이다!를 사용합니다.", - "내 턴 시작 시 무작위 적들에게 #y넌 #y나의 #y것이다!를 #b", - " 번 사용합니다." - ] - }, - "collector:DarkLordFormPlus": { - "NAME": "어둠 군주의 형상+", - "DESCRIPTIONS": [ - "내 턴 시작 시 무작위 적에게 #y넌 #y나의 #y것이다!+를 사용합니다.", - "내 턴 시작 시 무작위 적들에게 #y넌 #y나의 #y것이다!를 #b", - " 번 사용합니다." - ] - }, - "collector:DoMayhem": { - "NAME": "대혼란의 서막", - "DESCRIPTIONS": [ - "내 턴 시작 시 #y파멸을 #b", - " 이상 보유한 적이 있다면 뽑을 카드 더미 맨 위에 있는 카드를 사용합니다.", - " 이상 보유한 적이 있다면 뽑을 카드 더미 맨 위부터 카드를 #b", - " 장 사용합니다." - ] - }, - "collector:Doom": { - "NAME": "파멸", - "DESCRIPTIONS": [ - "턴 시작 시 체력을 #b", - " 잃습니다. 체력을 잃었을 때 #y약화와 취약을 #y모두 가지고 있지 않다면 #y파멸을 제거합니다." - ] - }, - "collector:DoublePlayCollectibles": { - "NAME": "수집품 다중 사용", - "DESCRIPTIONS": [ - "수집품 카드가 두 번 사용됩니다.", - "수집품 카드가 #b", - " 번 사용됩니다." - ] - }, - "collector:DemisePower": { - "NAME": "필연적 종말", - "DESCRIPTIONS": [ - "다음으로 대상의 #y파멸이 제거될 때 #y파멸이 제거되지 않게 합니다.", - "다음 #b", - " 번 대상의 #y파멸이 제거될 때 #y파멸이 제거되지 않게 합니다." - ] - }, - "collector:FeelMyPain": { - "NAME": "나의 고통을 느껴라", - "DESCRIPTIONS": [ - "카드를 #y소멸시킬 때마다 무작위 적들의 체력을 #b", - " 잃게합니다." - ] - }, - "collector:HealIfDieThisTurn": { - "NAME": "종결", - "DESCRIPTIONS": [ - "", - " 적이 죽는다면 내 체력을 #b", - " 회복합니다." - ] - }, - "collector:Karma": { - "NAME": "업보", - "DESCRIPTIONS": [ - "내 턴 종료 시 #y고초된 적이 있다면 방어도를 #b", - " 얻습니다." - ] - }, - "collector:NextAttackAppliesDoom": { - "NAME": "다음 공격 파멸", - "DESCRIPTIONS": [ - "이번 턴에 다음 공격 카드 사용시 #y파멸을 #b", - " 부여합니다." - ] - }, - "collector:AttacksApplyDoomPower": { - "NAME": "공격 파멸", - "DESCRIPTIONS": [ - "이번 턴 동안 #y공격 카드 사용 시 #y파멸을 #b", - " 부여합니다." - ] - }, - "collector:NextCollectedTwice": { - "NAME": "추가 난제", - "DESCRIPTIONS": [ - "이번 턴에 다음 사용하는 #y수집품 카드가 두 번 사용됩니다.", - "이번 턴에 다음 #b", - " 번까지 사용하는 #y수집품 카드가 두 번 사용됩니다." - ] - }, - "collector:NextTurnReserve": { - "NAME": "다음 턴 비축", - "DESCRIPTIONS": [ - "내 다음 턴 시작 시 #y비축을 #b1 얻습니다.", - "내 다음 턴 시작 시 #y비축을 #b", - " 얻습니다." - ] - }, - "collector:Omen": { - "NAME": "징조", - "DESCRIPTIONS": [ - "#y수집품 카드를 사용할 때마다 #y힘을 #b", - " 얻습니다." - ] - }, - "collector:ProtectingCall": { - "NAME": "수호의 부름", - "DESCRIPTIONS": [ - "내 턴 시작 시 #y임시 #y체력이 있다면 #y방어도를 #b", - " 얻습니다.", - "Translator Note: NOT USED" - ] - }, - "collector:RagingCall": { - "NAME": "거센 부름", - "DESCRIPTIONS": [ - "내 턴 종료 시 #y임시 #y체력이 있다면 적 전체에게 피해를 #b", - " 줍니다.", - "Translator Note: NOT USED" - ] - }, - "collector:Reserve": { - "NAME": "비축", - "DESCRIPTIONS": [ - "#y비축이 #b1 있습니다.", - "#y비축이 #b", - " 있습니다." - ] - }, - "collector:Soulforge": { - "NAME": "영혼 구축", - "DESCRIPTIONS": [ - "내 턴 시작 시 #y불씨를 #b1 장 얻습니다.", - "내 턴 시작 시 #y불씨를 #b", - " 얻습니다." - ] - }, - "collector:StrengthOverTurns": { - "NAME": "권능", - "DESCRIPTIONS": [ - "다음 내 턴 시작 시 #y힘을 #b", - " 얻습니다.", - "다음 내 #b", - " 턴 시작 시 #y힘을 #b" - ] - }, - "collector:Suffering": { - "NAME": "고통 나누기", - "DESCRIPTIONS": [ - "#y약화 또는 #y취약을 부여할 때마다 부여한 적에게 #y파멸을 #b", - " 부여합니다." - ] - }, - "collector:TorchHead": { - "NAME": "횃불 머리", - "DESCRIPTIONS": [ - "공격 카드를 사용할 때마다 #y임시 #y체력이 있다면 횃불 머리는 아래처럼 행동합니다: NL ", - "무작위 적 #b", - " #y파멸 부여.", - "적 전체에게 피해를 #b", - " 줍니다.", - "#y방어도를 #b", - " 얻습니다.", - " #y중독 부여.", - "카드를 #b", - " 장 뽑습니다.", - " 장 뽑습니다." - ] - }, - "collector:IncreasedCollectionDraw": { - "NAME": "수집품 뽑기 증가", - "DESCRIPTIONS": [ - "매 턴 수집품 카드 더미에서 카드를 #b1 장 더 뽑습니다.", - "매 턴 수집품 카드 더미에서 카드를 #b", - " 장 더 뽑습니다." - ] - }, - "collector:MastersCall": { - "NAME": "군주의 부름", - "DESCRIPTIONS": [ - "공격 카드를 사용할 때마다 #y임시 #y체력이 있다면 무작위 적에게 피해를 #b", - " 줍니다.", - "Translator Note: NOT USED" - ] - }, - "collector:LouseCard": { - "NAME": "몸 말기", - "DESCRIPTIONS": [ - "적의 공격으로 막히지 않은 피해를 입었다면 #y방어도를 #b", - " 얻습니다." - ] - }, - "collector:MadGremlinCard": { - "NAME": "분노", - "DESCRIPTIONS": [ - "이번 턴에 공격으로 피해를 입는다면 #y화난 #y그렘린을 #b1 장 얻습니다.", - "이번 턴에 공격으로 피해를 입는다면 #y화난 #y그렘린을 #b", - " 장 얻습니다." - ] - }, - "collector:GremlinWizardCard": { - "NAME": "충전 중", - "DESCRIPTIONS": [ - "다음 턴에 #y활력을 #b", - " 얻습니다." - ] - }, - "collector:ThievesCard": { - "NAME": "부당", - "DESCRIPTIONS": [ - "이번 턴 동안 받는 피해량을 #b", - " 감소시킵니다." - ] - }, - "collector:BookOfStabbingCard": { - "NAME": "칼부림", - "DESCRIPTIONS": [ - "막히지 않은 피해를 줄 때마다 #y파멸을 #b", - " 부여합니다." - ] - }, - "collector:TransientCard": { - "NAME": "희미해짐", - "DESCRIPTIONS": [ - "내 턴 종료 시 #r죽습니다.", - "#b", - " 턴 뒤 #r죽습니다." - ] - }, - "collector:ReptomancerCard": { - "NAME": "유독성 부름", - "DESCRIPTIONS": [ - "내 턴 종료 시 #y임시 #y체력이 있다면 무작위 적에게 #y중독을 #b", - " 부여합니다." - ] - }, - "collector:MoreBlockWithTempHP": { - "NAME": "제어 깍지", - "DESCRIPTIONS": [ - "#y임시 #y체력을 가지고 있는 동안 추가로 #y방어도가 #b", - " 증가합니다." - ] - }, - "collector:NextTurnVigor": { - "NAME": "다음 턴 활력", - "DESCRIPTIONS": [ - "내 다음 턴 시작 시 #y활력을 #b", - " 얻습니다." - ] - }, - "collector:AcidSlimeCard": { - "NAME": "끈적이는 복사", - "DESCRIPTIONS": [ - "이번 턴에 다음 사용하는 #y공격 또는 #y스킬 카드가 두 번 사용됩니다.", - "이번 턴에 다음 #b", - " 번 사용하는 #y공격 또는 #y스킬 카드가 두 번 사용됩니다." - ] - }, - "collector:GremlinNobCard": { - "NAME": "격분", - "DESCRIPTIONS": [ - "#y스킬 카드를 사용 할 때마다 #y활력을 #b", - " 얻습니다." - ] - }, - "collector:LanternFlare": { - "NAME": "그을음", - "DESCRIPTIONS": [ - "대상의 턴 종료 시 #y파멸을 #b", - " 얻습니다." - ] - }, - "collector:WomanInBlueCard": { - "NAME": "파란 옷의 여자", - "DESCRIPTIONS": [ - "전투 종료 시 모든 포션을 잃습니다." - ] - }, - "collector:ShootingStar": { - "NAME": "유성", - "DESCRIPTIONS": [ - "매 턴 처음 collector:장작으로 공격 카드 소멸 시 소멸시킨 카드를 복사해 얻습니다. 사용하기 전까지 그 카드의 비용은 0이 됩니다.", - "매 턴 다음 #b", - " 번 collector:장작으로 공격 카드 소멸 시 소멸시킨 카드를 복사해 얻습니다. 사용하기 전까지 그 카드의 비용은 0이 됩니다." - ] - }, - "collector:LoseHpNextTurn": { - "NAME": "쇠락 중", - "DESCRIPTIONS": [ - "대상의 턴이 끝날 때 대상이 체력을 #b", - " 잃습니다." - ] - } -} +{ + "collector:AddCopyNextTurn": { + "NAME": "카드 획득", + "DESCRIPTIONS": [ + "내 다음 턴 시작 시 ", + " 카드를 얻습니다." + ] + }, + "collector:BindingCall": { + "NAME": "번제의 부름", + "DESCRIPTIONS": [ + "#y임시 #y체력을 잃을 때마다 적 전체에게 #y파멸을 #b", + " 부여합니다.", + "Translator Note: 사용안함" + ] + }, + "collector:CantTouchThis": { + "NAME": "손대지 말거라", + "DESCRIPTIONS": [ + "공격에 피해를 받지 않는다면 공격한 대상에게 #y파멸을 #b", + " 부여합니다." + ] + }, + "collector:Crackle": { + "NAME": "치직", + "DESCRIPTIONS": [ + "내 턴 시작 시 #y비축을 #b1 얻습니다.", + "내 턴 시작 시 #y비축을 #b", + " 얻습니다." + ] + }, + "collector:DarkLordForm": { + "NAME": "어둠 군주의 형상", + "DESCRIPTIONS": [ + "내 턴 시작 시 무작위 적에게 #y넌 #y나의 #y것이다!를 사용합니다.", + "내 턴 시작 시 무작위 적에게 #y넌 #y나의 #y것이다!를 #b", + " 번 사용합니다." + ] + }, + "collector:DarkLordFormPlus": { + "NAME": "어둠 군주의 형상+", + "DESCRIPTIONS": [ + "내 턴 시작 시 무작위 적에게 #y넌 #y나의 #y것이다!+를 사용합니다.", + "내 턴 시작 시 무작위 적에게 #y넌 #y나의 #y것이다!+를 #b", + " 번 사용합니다." + ] + }, + "collector:DoMayhem": { + "NAME": "대혼란의 서막", + "DESCRIPTIONS": [ + "내 턴 시작 시 #y파멸을 #b", + " 이상 보유한 적이 있다면 뽑을 카드 더미 맨 위에 있는 카드를 사용합니다.", + " 이상 보유한 적이 있다면 뽑을 카드 더미 맨 위부터 카드를 #b", + " 장 사용합니다." + ] + }, + "collector:Doom": { + "NAME": "파멸", + "DESCRIPTIONS": [ + "턴 시작 시 체력을 #b", + " 잃습니다. 체력을 잃었을 때 #y약화와 #y취약을 모두 가지고 있지 않다면 #y파멸을 제거합니다." + ] + }, + "collector:DoublePlayCollectibles": { + "NAME": "수집품 다중 사용", + "DESCRIPTIONS": [ + "수집품 카드가 #b2 번 사용됩니다.", + "수집품 카드가 #b", + " 번 사용됩니다." + ] + }, + "collector:DemisePower": { + "NAME": "필연적 종말", + "DESCRIPTIONS": [ + "다음으로 대상의 #y파멸이 제거될 때 제거되지 않게 합니다.", + "다음 #b", + " 번 대상의 #y파멸이 제거될 때 제거되지 않게 합니다." + ] + }, + "collector:FeelMyPain": { + "NAME": "나의 고통을 느껴라", + "DESCRIPTIONS": [ + "카드가 #y소멸될 때마다 무작위 적들의 체력을 #b", + " 잃게합니다." + ] + }, + "collector:HealIfDieThisTurn": { + "NAME": "종결", + "DESCRIPTIONS": [ + "", + " 적이 죽으면 내 체력을 #b", + " 회복합니다." + ] + }, + "collector:Karma": { + "NAME": "업보", + "DESCRIPTIONS": [ + "내 턴 종료 시 #y고초된 적이 있다면 방어도를 #b", + " 얻습니다." + ] + }, + "collector:NextAttackAppliesDoom": { + "NAME": "다음 공격 파멸", + "DESCRIPTIONS": [ + "이번 턴에 다음 #y공격 카드 사용 시 #y파멸을 #b", + " 부여합니다." + ] + }, + "collector:AttacksApplyDoomPower": { + "NAME": "공격 파멸", + "DESCRIPTIONS": [ + "이번 턴에 #y공격 카드 사용 시 #y파멸을 #b", + " 부여합니다." + ] + }, + "collector:NextCollectedTwice": { + "NAME": "추가 난제", + "DESCRIPTIONS": [ + "이번 턴에 다음 사용하는 #y수집품 카드가 #b2 번 사용됩니다.", + "이번 턴에 최대 #b", + " 번 다음 사용하는 #y수집품 카드가 #b2 번 사용됩니다." + ] + }, + "collector:NextTurnReserve": { + "NAME": "다음 턴 비축", + "DESCRIPTIONS": [ + "내 다음 턴 시작 시 #y비축을 #b1 얻습니다.", + "내 다음 턴 시작 시 #y비축을 #b", + " 얻습니다." + ] + }, + "collector:Omen": { + "NAME": "징조", + "DESCRIPTIONS": [ + "#y수집품 카드를 사용할 때마다 #y힘을 #b", + " 얻습니다." + ] + }, + "collector:ProtectingCall": { + "NAME": "수호의 부름", + "DESCRIPTIONS": [ + "내 턴 시작 시 #y임시 #y체력이 있다면 #y방어도를 #b", + " 얻습니다.", + "Translator Note: 사용안함" + ] + }, + "collector:RagingCall": { + "NAME": "거센 부름", + "DESCRIPTIONS": [ + "내 턴 종료 시 #y임시 #y체력이 있다면 적 전체에게 피해를 #b", + " 줍니다.", + "Translator Note: 사용안함" + ] + }, + "collector:Reserve": { + "NAME": "비축", + "DESCRIPTIONS": [ + "#y비축이 #b1 있습니다.", + "#y비축이 #b", + " 있습니다." + ] + }, + "collector:Soulforge": { + "NAME": "영혼 구축", + "DESCRIPTIONS": [ + "내 턴 시작 시 #y불씨를 #b1 장 얻습니다.", + "내 턴 시작 시 #y불씨를 #b", + " 장 얻습니다." + ] + }, + "collector:StrengthOverTurns": { + "NAME": "권능", + "DESCRIPTIONS": [ + "내 다음 턴 시작 시 #y힘을 #b", + " 얻습니다.", + "내 다음 #b", + " 턴 시작 시 #y힘을 #b" + ] + }, + "collector:Suffering": { + "NAME": "고통 나누기", + "DESCRIPTIONS": [ + "#y약화 또는 #y취약을 부여할 때마다 부여한 적에게 #y파멸을 #b", + " 부여합니다." + ] + }, + "collector:TorchHead": { + "NAME": "횃불 머리", + "DESCRIPTIONS": [ + "공격 카드를 사용할 때마다 #y임시 #y체력이 있다면 #y횃불 #y머리는 아래처럼 행동합니다: NL ", + "무작위 적 #b", + " #y파멸 부여.", + "적 전체에게 피해를 #b", + " 줍니다.", + "#y방어도를 #b", + " 얻습니다.", + " #y중독 부여.", + "카드를 #b", + " 장 뽑습니다.", + " 장 뽑습니다." + ] + }, + "collector:IncreasedCollectionDraw": { + "NAME": "수집품 뽑기 증가", + "DESCRIPTIONS": [ + "매 턴 수집품 카드 더미에서 카드를 #b1 장 더 뽑습니다.", + "매 턴 수집품 카드 더미에서 카드를 #b", + " 장 더 뽑습니다." + ] + }, + "collector:MastersCall": { + "NAME": "군주의 부름", + "DESCRIPTIONS": [ + "#y공격 카드를 사용할 때마다 #y임시 #y체력이 있다면 무작위 적에게 피해를 #b", + " 줍니다.", + "Translator Note: 사용안함" + ] + }, + "collector:LouseCard": { + "NAME": "몸 말기", + "DESCRIPTIONS": [ + "적의 공격으로 막히지 않은 피해를 입었다면 #y방어도를 #b", + " 얻습니다." + ] + }, + "collector:MadGremlinCard": { + "NAME": "분노", + "DESCRIPTIONS": [ + "이번 턴에 공격으로 피해를 입는다면 #y화난 #y그렘린을 얻습니다.", + "이번 턴에 공격으로 피해를 입는다면 #y화난 #y그렘린을 #b", + " 장 얻습니다." + ] + }, + "collector:GremlinWizardCard": { + "NAME": "충전 중", + "DESCRIPTIONS": [ + "다음 턴에 #y활력을 #b", + " 얻습니다." + ] + }, + "collector:ThievesCard": { + "NAME": "부당", + "DESCRIPTIONS": [ + "이번 턴 동안 받는 피해량이 #b", + " 감소합니다." + ] + }, + "collector:BookOfStabbingCard": { + "NAME": "칼부림", + "DESCRIPTIONS": [ + "막히지 않은 피해를 줄 때마다 #y파멸을 #b", + " 부여합니다." + ] + }, + "collector:TransientCard": { + "NAME": "희미해짐", + "DESCRIPTIONS": [ + "내 턴 종료 시 #r죽습니다.", + "#b", + " 턴 뒤 #r죽습니다." + ] + }, + "collector:ReptomancerCard": { + "NAME": "유독성 부름", + "DESCRIPTIONS": [ + "내 턴 종료 시 #y임시 #y체력이 있다면 무작위 적에게 #y중독을 #b", + " 부여합니다." + ] + }, + "collector:MoreBlockWithTempHP": { + "NAME": "제어 깍지", + "DESCRIPTIONS": [ + "#y임시 #y체력을 가지고 있는 동안 카드로 얻는 #y방어도가 #b", + " 증가합니다." + ] + }, + "collector:NextTurnVigor": { + "NAME": "다음 턴 활력", + "DESCRIPTIONS": [ + "내 다음 턴 시작 시 #y활력을 #b", + " 얻습니다." + ] + }, + "collector:AcidSlimeCard": { + "NAME": "끈적이는 복사", + "DESCRIPTIONS": [ + "이번 턴에 다음 사용하는 #y공격 또는 #y스킬 카드가 두 번 사용됩니다.", + "이번 턴에 다음 #b", + " 번 사용하는 #y공격 또는 #y스킬 카드가 두 번 사용됩니다." + ] + }, + "collector:GremlinNobCard": { + "NAME": "격분", + "DESCRIPTIONS": [ + "#y스킬 카드를 사용 할 때마다 #y활력을 #b", + " 얻습니다." + ] + }, + "collector:LanternFlare": { + "NAME": "그을음", + "DESCRIPTIONS": [ + "대상의 턴 종료 시 #y파멸을 #b", + " 부여합니다." + ] + }, + "collector:WomanInBlueCard": { + "NAME": "파란 옷의 여자", + "DESCRIPTIONS": [ + "전투 종료 시 모든 포션을 잃습니다." + ] + }, + "collector:ShootingStar": { + "NAME": "유성", + "DESCRIPTIONS": [ + "매 턴 처음 #y장작으로 #y공격 카드 #y소멸 시 그 카드를 카드를 복사해 얻습니다. 사용하기 전까지 그 카드의 비용이 #b0 이 됩니다.", + "매 턴 다음 #b", + " 번 #y장작으로 #y공격 카드 #y소멸 시 그 카드를 카드를 복사해 얻습니다. 사용하기 전까지 그 카드의 비용이 #b0 이 됩니다." + ] + }, + "collector:LoseHpNextTurn": { + "NAME": "죽음의 낙인", + "DESCRIPTIONS": [ + "대상의 턴이 끝날 때 대상이 체력을 #b", + " 잃습니다." + ] + } +} diff --git a/src/main/resources/collectorResources/localization/kor/RelicStrings.json b/src/main/resources/collectorResources/localization/kor/RelicStrings.json index 102b898487..183090ab0d 100644 --- a/src/main/resources/collectorResources/localization/kor/RelicStrings.json +++ b/src/main/resources/collectorResources/localization/kor/RelicStrings.json @@ -1,124 +1,126 @@ -{ - "collector:EmeraldTorch": { - "NAME": "에메랄드 횃불", - "FLAVOR": "탐욕의 불길을 결코 꺼지지 않습니다.", - "DESCRIPTIONS": [ - "매 전투 시작 시 #y불씨를 얻습니다. 매 전투 시 처음으로 #y불씨를 소멸시키면 #ycollector:비축을 #b1 얻습니다." - ] - }, - "collector:PrismaticTorch": { - "NAME": "프리즘 횃불", - "FLAVOR": "행운의 은총처럼 타오르는 변화무쌍한 불꽃입니다.", - "DESCRIPTIONS": [ - "", - "과 교체합니다.[] 전투 시작 시 #y불씨를 얻고 #ycollector:비축을 #b1 얻습니다. 매 턴 처음으로 #y불씨를 #y소멸시킬 때마다 #ycollector:비축을 #b1 얻습니다." - ] - }, - "collector:HolidayCoal": { - "NAME": "크람피언 석탄", - "FLAVOR": "\"흥미롭군요! 그런데 왜 특정 굴뚝에만 두는거죠?\" - 랜위드", - "DESCRIPTIONS": [ - "카드를 뽑을 때 수집품 카드 더미가 비어있다면 대신 #y행운의 #y심지를 얻습니다." - ] - }, - "collector:BagOfTricks": { - "NAME": "속임수 가방", - "FLAVOR": "교활합니다.", - "DESCRIPTIONS": [ - "매 전투 시작 시 수집품 카드를 #b", - " 장 더 뽑습니다." - ] - }, - "collector:JadeRing": { - "NAME": "옥 반지", - "FLAVOR": "옥은 순수함의 상징입니다.", - "DESCRIPTIONS": [ - "#ycollector:파멸의 피해량이 #b", - " 증가합니다." - ] - }, - "collector:SoullitLamp": { - "NAME": "영혼빛 등불", - "FLAVOR": "원혼으로 장식되어 있습니다. 이글거리는 불소리 대신 비명소리가 들립니다.", - "DESCRIPTIONS": [ - "획득 시 #y정수를 #b3 얻습니다. 매 전투 시작 시 #y불씨를 얻습니다." - ] - }, - "collector:ThimbleHelm": { - "NAME": "제어 깍지", - "FLAVOR": "첨탑의 가장 작은 영웅들이 입었던 옷입니다.", - "DESCRIPTIONS": [ - "#yexpansioncontent:임시 #y체력을 #b", - " 얻은 채로 전투를 시작합니다. #yexpansioncontent:임시 체력이 있는 동안 카드의 방어도가 #b1 증가합니다." - ] - }, - "collector:Incense": { - "NAME": "향", - "FLAVOR": "넋을 기리는 관습입니다.", - "DESCRIPTIONS": [ - "내가 #y약화 혹은 #y취약 또는 #y손상을 보유한다면 #y약화, #y취약, #y손상을 얻지 않습니다." - ] - }, - "collector:FuelCanister": { - "NAME": "연료통", - "FLAVOR": "역겹습니다.", - "DESCRIPTIONS": [ - "내 턴 종료 시 손에 있는 비용이 가장 낮은 카드를 #y보존합니다." - ] - }, - "collector:AutoCurser": { - "NAME": "헥스 부적", - "FLAVOR": "\"이걸 붙였더니 퍽 발등 찍는 일이 잦아지더라구요. 영험한 거 같아요\" - 랜위드", - "DESCRIPTIONS": [ - "전투 시작 시 무작위 적에게 #y약화와 #y취약을 #b1 부여합니다." - ] - }, - "collector:Bagpipes": { - "NAME": "백파이프", - "FLAVOR": "이 공포의 악기가 쿠빌라이를 미치게 만들었다고 전해집니다.", - "DESCRIPTIONS": [ - "적에게 #y약화 또는 #y취약을 새롭게 부여할 때마다 부여량이 #b1 증가합니다." - ] - }, - "collector:BottledCollectible": { - "NAME": "병 속의 두뇌", - "FLAVOR": "마법사의 실험실에서 수집한 것입니다.", - "DESCRIPTIONS": [ - "획득 시 수집품 덱에 있는 카드를 하나 #y강화합니다. 전투 시작 시 그 카드를 수집품 카드 더미 맨 위에 놓습니다.", - "전투 시작 시 ", - " 카드를 수집품 카드 더미 맨 위에 놓습니다.", - "카드를 선택하세요: " - ] - }, - "collector:TheContract": { - "NAME": "계약서", - "FLAVOR": "피로 서명되었습니다.", - "DESCRIPTIONS": [ - "획득 시 #y정수를 #b10 얻습니다." - ] - }, - "collector:ForbiddenFruit": { - "NAME": "금단의 과실", - "FLAVOR": "그 어디서도 보지 못한 과일입니다.", - "DESCRIPTIONS": [ - "획득 시 모든 카드 중에서 일반, 특별, 희귀 카드를 1장씩 선택합니다. NL #y쇠락화를 얻습니다.", - "덱에 추가할 희귀 카드를 선택하십시오.", - "덱에 추가할 특별 카드를 선택하십시오.", - "덱에 추가할 일반 카드를 선택하십시오." - ] - }, - "collector:RoughDiamond": { - "NAME": "비세공 다이아몬드", - "FLAVOR": "폐광에선 이렇게 더럽혀진 돌도 가치있는 법입니다.", - "DESCRIPTIONS": [ - "매 턴 처음으로 희귀 카드를 사용하면 [E] 를 얻습니다" - ] - }, - "collector:BlockedChakra": { - "NAME": "막힌 혈", - "FLAVOR": "하나만 풀어주면 충분합니다.", - "DESCRIPTIONS": [ - "내 턴 시작 시 [E] 를 얻습니다. 4턴 동안 수집품 카드 더미에서 카드를 뽑을 수 없습니다." - ] - } +{ + "collector:EmeraldTorch": { + "NAME": "에메랄드 횃불", + "FLAVOR": "탐욕의 불길은 결코 꺼지지 않습니다.", + "DESCRIPTIONS": [ + "#ycollector:비축을 #b1 얻은 채로 전투를 시작합니다." + ] + }, + "collector:PrismaticTorch": { + "NAME": "프리즘 횃불", + "FLAVOR": "행운의 은총처럼 타오르는 변화무쌍한 불꽃입니다.", + "DESCRIPTIONS": [ + "", + "과[] 교체합니다. 전투 시작 시 #y불씨를 얻고 #ycollector:비축을 #b1 얻습니다. 매 턴 #y불씨가 처음 #y소멸되면 #ycollector:비축을 #b1 얻습니다." + ] + }, + "collector:HolidayCoal": { + "NAME": "크람피언 석탄", + "FLAVOR": "\"흥미롭군요! 그런데 왜 특정 굴뚝에만 두는거죠?\" - 랜위드", + "DESCRIPTIONS": [ + "카드를 뽑을 때 수집품 카드 더미가 비어있다면 대신 #y행운의 #y심지를 얻습니다." + ] + }, + "collector:BagOfTricks": { + "NAME": "속임수 가방", + "FLAVOR": "교활합니다.", + "DESCRIPTIONS": [ + "매 전투 시작 시 #y수집품 카드를 #b", + " 장 더 뽑습니다." + ] + }, + "collector:JadeRing": { + "NAME": "옥 반지", + "FLAVOR": "옥은 순수함의 상징입니다.", + "DESCRIPTIONS": [ + "#ycollector:파멸의 피해량이 #b", + " 증가합니다." + ] + }, + "collector:SoullitLamp": { + "NAME": "영혼빛 등불", + "FLAVOR": "원혼으로 장식되어 있습니다. 이글거리는 불소리 대신 비명소리가 들립니다.", + "DESCRIPTIONS": [ + "획득 시 #y정수를 #b3 얻습니다. 매 전투 시작 시 #y불씨를 얻습니다." + ] + }, + "collector:ThimbleHelm": { + "NAME": "제어 깍지", + "FLAVOR": "첨탑의 가장 작은 영웅들이 입었던 옷입니다.", + "DESCRIPTIONS": [ + "#yexpansioncontent:임시 #y체력을 #b", + " 얻은 채로 전투를 시작합니다. #y임시 #y체력이 있는 동안 카드의 #y방어도가 #b1 증가합니다." + ] + }, + "collector:Incense": { + "NAME": "향", + "FLAVOR": "넋을 기리는 관습입니다.", + "DESCRIPTIONS": [ + "내가 #y약화 혹은 #y취약 또는 #y손상을 보유한다면 #y약화, #y취약, #y손상을 얻지 않습니다." + ] + }, + "collector:FuelCanister": { + "NAME": "연료통", + "FLAVOR": "역겹습니다.", + "DESCRIPTIONS": [ + "내 턴 종료 시 손에 있는 비용이 가장 낮은 카드를 #y보존합니다." + ] + }, + "collector:AutoCurser": { + "NAME": "헥스 부적", + "FLAVOR": "\"이걸 붙였더니 퍽 발등 찍는 일이 잦아지더라구요. 영험한 거 같아요!\" - 랜위드", + "DESCRIPTIONS": [ + "전투 시작 시 무작위 적에게 #y약화와 #y취약을 #b1 부여합니다." + ] + }, + "collector:Bagpipes": { + "NAME": "백파이프", + "FLAVOR": "이 공포의 악기가 쿠빌라이를 미치게 만들었다고 전해집니다.", + "DESCRIPTIONS": [ + "적에게 #y약화 또는 #y취약을 새롭게 부여할 때마다 부여량이 #b1 증가합니다." + ] + }, + "collector:BottledCollectible": { + "NAME": "병 속의 두뇌", + "FLAVOR": "마법사의 실험실에서 수집한 것입니다.", + "DESCRIPTIONS": [ + "획득 시 수집품 덱에 있는 카드를 #b1 장 #y강화합니다. 전투 시작 시 그 카드를 수집품 카드 더미 맨 위에 놓습니다.", + "전투 시작 시 ", + " 카드를 수집품 카드 더미 맨 위에 놓습니다.", + "카드를 선택하세요: ", + "병에 담긴 카드가 덱에서 #r제거되어 유물이 비활성화됐습니다." + ] + }, + "collector:TheContract": { + "NAME": "계약서", + "FLAVOR": "피로 서명되었습니다.", + "DESCRIPTIONS": [ + "획득 시 정수를 #b", + " 얻습니다." + ] + }, + "collector:ForbiddenFruit": { + "NAME": "금단의 과실", + "FLAVOR": "그 어디서도 보지 못한 과일입니다.", + "DESCRIPTIONS": [ + "획득 시 #r기생충을 얻습니다. 최대 체력을 #b", + " 얻습니다. #y민첩을 #b", + " 얻은 채로 전투를 시작합니다." + ] + }, + "collector:RoughDiamond": { + "NAME": "비세공 다이아몬드", + "FLAVOR": "폐광에선 이렇게 더럽혀진 돌도 가치있는 법입니다.", + "DESCRIPTIONS": [ + "매 턴 처음으로 #y희귀 카드를 사용하면 [E] 를 얻습니다. 획득 시 #y희귀 카드 보상을 얻습니다.", + "지식이다!" + ] + }, + "collector:BlockedChakra": { + "NAME": "막힌 혈", + "FLAVOR": "하나만 풀어주면 충분합니다.", + "DESCRIPTIONS": [ + "내 턴 시작 시 [E] 를 얻습니다. 4턴 동안 수집품 카드 더미에서 카드를 뽑을 수 없습니다." + ] + } } \ No newline at end of file diff --git a/src/main/resources/collectorResources/localization/kor/RunModStrings.json b/src/main/resources/collectorResources/localization/kor/RunModStrings.json index e02aef276e..8593c62d96 100644 --- a/src/main/resources/collectorResources/localization/kor/RunModStrings.json +++ b/src/main/resources/collectorResources/localization/kor/RunModStrings.json @@ -1,2 +1,2 @@ -{ +{ } \ No newline at end of file diff --git a/src/main/resources/collectorResources/localization/kor/UIStrings.json b/src/main/resources/collectorResources/localization/kor/UIStrings.json index de8ab633dd..77586d4c22 100644 --- a/src/main/resources/collectorResources/localization/kor/UIStrings.json +++ b/src/main/resources/collectorResources/localization/kor/UIStrings.json @@ -1,110 +1,110 @@ -{ - "collector:CollectionReward": { - "TEXT": [ - "수집할 카드를 선택하십시오." - ] - }, - "collector:CollectibleCardTab": { - "TEXT": [ - "수집 목록" - ] - }, - "collector:CollectionScreen": { - "TEXT": [ - "숨김", - "이곳에 있는 모든 수집품 카드를 가지고 전투를 시작합니다." - ] - }, - "collector:CollectionUITopPanel": { - "TEXT": [ - "수집품 덱", - "#y수집품 카드를 확인합니다.", - "전투 시작 시 이 카드들은 별개의 수집품 카드 더미로 취급됩니다." - ] - }, - "collector:CombatCollectionPileButton": { - "TEXT": [ - "수집품 더미", - "이번 전투 동안 여기에서 뽑지 않은 #y수집품 카드를 보여줍니다. NL 매 턴 시작 시 여기서 카드를 #b1 장 뽑습니다. NL NL 여기있는 카드를 보려면 클릭하십시오. (섞여있음).", - "수집된 카드가 없다!" - ] - }, - "collector:EssenceCount": { - "TEXT": [ - "정수", - "정수를 소모해 수집품 카드를 얻을 수 있습니다. NL 일반 전투 후 #b1, 엘리트 전투 후 #b2, 보스 전투 후 #b3 을 획득할 수 있습니다. NL NL 정수를 #b", - " 가지고 있습니다." - ] - }, - "collector:CombatCollectionViewScreen": { - "TEXT": [ - "자신의 턴이 시작될 때 이 곳에서 카드를 가져옵니다." - ] - }, - "collector:PyreInfo": { - "TEXT": [ - "장작", - "이 카드를 사용하려면 추가로 카드를 1장 소멸시켜야합니다." - ] - }, - "collector:CollectedCardMod": { - "TEXT": [ - "collector:수집품. NL ", - "" - ] - }, - "collector:CollectibleCardReward": { - "TEXT": [ - "수집: ", - "이것을 얻을 수 있습니다" - ] - }, - "collector:HoardedMod": { - "TEXT": [ - "사용불가. 보존. NL ", - "사용불가. NL ", - "보존. NL " - ] - }, - "collector:SecondEnergyOrb": { - "TEXT": [ - "비축", - "턴이 지나가도 유지되는 특별한 에너지입니다." - ] - }, - "collector:PyreCostSpendScreen": { - "TEXT": [ - "장작으로 소멸시킬 카드를 선택하십시오." - ] - }, - "collector:PyreModText": { - "TEXT": [ - "소멸 시킬 카드가 없다!" - ] - }, - "collector:StashAwayCampfireOption": { - "TEXT": [ - "제거", - "수집품 카드를 제거합니다. 영혼을 ", - " 얻습니다.", - "수집품 카드가 필요합니다.", - "제거할 수집품 카드를 선택하십시오." - ] - }, - "collector:BonusEventOption": { - "TEXT": [ - "[가져간다]" - ] - }, - "collector:EssenceReward": { - "TEXT": [ - "", - " 정수" - ] - }, - "collector:CharacterOption": { - "TEXT": [ - "정수: " - ] - } -} +{ + "collector:CollectionReward": { + "TEXT": [ + "수집할 카드를 선택하십시오." + ] + }, + "collector:CollectibleCardTab": { + "TEXT": [ + "수집 목록" + ] + }, + "collector:CollectionScreen": { + "TEXT": [ + "숨김", + "이곳에 있는 모든 수집품 카드를 가지고 전투를 시작합니다." + ] + }, + "collector:CollectionUITopPanel": { + "TEXT": [ + "수집품 덱", + "#y수집품 카드를 확인합니다.", + "전투 시작 시 이 카드들은 별개의 수집품 카드 더미로 취급됩니다." + ] + }, + "collector:CombatCollectionPileButton": { + "TEXT": [ + "수집품 더미", + "이번 전투 동안 여기에서 뽑지 않은 #y수집품 카드를 보여줍니다. NL 매 턴 시작 시 여기서 카드를 #b1 장 뽑습니다. NL NL 여기있는 카드를 보려면 클릭하십시오. (섞여있음).", + "수집된 카드가 없다!" + ] + }, + "collector:EssenceCount": { + "TEXT": [ + "정수", + "정수를 소모해 수집품 카드를 얻을 수 있습니다. NL 일반 전투 후 #b1, 엘리트 전투 후 #b2, 보스 전투 후 #b3 을 획득할 수 있습니다. NL NL 정수를 #b", + " 가지고 있습니다." + ] + }, + "collector:CombatCollectionViewScreen": { + "TEXT": [ + "자신의 턴이 시작될 때 이 곳에서 카드를 가져옵니다." + ] + }, + "collector:PyreInfo": { + "TEXT": [ + "장작", + "이 카드를 사용하려면 추가로 카드를 1장 소멸시켜야 합니다." + ] + }, + "collector:CollectedCardMod": { + "TEXT": [ + "collector:수집품. NL ", + "" + ] + }, + "collector:CollectibleCardReward": { + "TEXT": [ + "수집: ", + "이것을 얻을 수 있습니다." + ] + }, + "collector:HoardedMod": { + "TEXT": [ + "사용불가. 보존. NL ", + "사용불가. NL ", + "보존. NL " + ] + }, + "collector:SecondEnergyOrb": { + "TEXT": [ + "비축", + "턴이 지나가도 유지되는 특별한 에너지입니다." + ] + }, + "collector:PyreCostSpendScreen": { + "TEXT": [ + "장작으로 소멸시킬 카드를 선택하십시오." + ] + }, + "collector:PyreModText": { + "TEXT": [ + "소멸시킬 카드가 없다!" + ] + }, + "collector:StashAwayCampfireOption": { + "TEXT": [ + "제거", + "수집품 카드를 제거합니다. 영혼을 ", + " 얻습니다.", + "수집품 카드가 필요합니다.", + "제거할 수집품 카드를 선택하십시오." + ] + }, + "collector:BonusEventOption": { + "TEXT": [ + "[가져간다]" + ] + }, + "collector:EssenceReward": { + "TEXT": [ + "", + " 정수" + ] + }, + "collector:CharacterOption": { + "TEXT": [ + "정수: " + ] + } +} 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 0000000000..5f2e60584b --- /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! 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 al azar.\"" + }, + "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 en el turno anterior. NL Agota.", + "EXTENDED_DESCRIPTION": [" NL ( Aplica !M! de collector:Condena )"] + }, + "collector:BlackBindings": { + "NAME": "Ataduras Negras", + "DESCRIPTION": "Aplica !M! Débil, aplica !clm2! de collector:Condena por cada desventaja distinta 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! 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 al azar.", + "UPGRADE_DESCRIPTION": "Al comienzo de tu turno, juega *¡Eres *Mío!+ contra un enemigo al azar." + }, + "collector:Darkstorm": { + "NAME": "Tormenta Oscura", + "DESCRIPTION": "Obtén un *Relámpago *Marchito. NL Baraja !M! más en tu pila de extracción. 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 extracción." + }, + "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 al azar 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 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 Débil y Vulnerable.", + "UPGRADE_DESCRIPTION": "collector:Pira. NL Aplica 1 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! 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 al azar 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! 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 extracción." + }, + "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 distinta en el enemigo." + }, + "collector:YouAreMine": { + "NAME": "¡Eres Mío!", + "DESCRIPTION": "Aplica !M! Débil. NL Aplica !M! Vulnerable. Aplica !clm2! 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 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 extracción 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! Débil. NL Si el enemigo no piensa atacar, aplica !clm2! 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 PV. 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! Débil." + }, + "collector:FungiBeastCard": { + "NAME": "Bestia Hongo", + "DESCRIPTION": "Aplica !M! Vulnerable. NL Aplica 1 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! 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 al azar.\"" + }, + "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 PV. 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! 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! Débil. NL Aplica !M! 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 0000000000..9538c83363 --- /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 0000000000..0e0dcd235c --- /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 0000000000..7a0333da87 --- /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 0000000000..9e26dfeeb6 --- /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 0000000000..e4678fd006 --- /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 0000000000..c4dc6c80ef --- /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 0000000000..ff9010ca05 --- /dev/null +++ b/src/main/resources/collectorResources/localization/spa/PowerStrings.json @@ -0,0 +1,328 @@ +{ + "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.", + "Translator Note: NOT USED" + ] + }, + "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 al azar.", + "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 al azar.", + "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 extracción.", + " o más de #yCondena, juega las #b", + " primeras cartas de tu pila de extracción." + ] + }, + "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 al azar 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.", + "Translator Note: NOT USED" + ] + }, + "collector:RagingCall": { + "NAME": "Llamado Furioso", + "DESCRIPTIONS": [ + "Al final de tu turno, si tienes #yPV #yTemporales, inflige #b", + " de daño a TODOS los enemigos.", + "Translator Note: NOT USED" + ] + }, + "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 al azar.", + "Inflige #b", + " de daño a TODOS los enemigos.", + "Gana #b", + " de #yBloqueo.", + " #yVeneno a un enemigo al azar.", + "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 al azar.", + "Translator Note: NOT USED" + ] + }, + "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 al azar." + ] + }, + "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 0000000000..acc6d2e133 --- /dev/null +++ b/src/main/resources/collectorResources/localization/spa/RelicStrings.json @@ -0,0 +1,128 @@ +{ + "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 al azar." + ] + }, + "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 ", + "La carta embotellada ha sido #rremovida de tu mazo, la reliquia ya no funciona." + + ] + }, + "collector:TheContract": { + "NAME": "El Contrato", + "FLAVOR": "Firma con sangre.", + "DESCRIPTIONS": [ + "Al obtenerla, gana #b", + " 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." + ] + } +} \ No newline at end of file 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 0000000000..7a73a41bfd --- /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 0000000000..ec998867fc --- /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/RelicStrings.json b/src/main/resources/collectorResources/localization/zhs/RelicStrings.json index 03db4e4887..4b60137af5 100644 --- a/src/main/resources/collectorResources/localization/zhs/RelicStrings.json +++ b/src/main/resources/collectorResources/localization/zhs/RelicStrings.json @@ -3,7 +3,7 @@ "NAME": "翠绿火炬", "FLAVOR": "贪婪之火永不灭。", "DESCRIPTIONS": [ - "战斗开始时,获得一张 #y余烬 。每场战斗首次 #y消耗 一张 #y余烬 时,获得 #b1 #ycollector:储能 。" + "战斗开始时,获得 #b1 #ycollector:储能 。" ] }, "collector:PrismaticTorch": { @@ -11,7 +11,7 @@ "FLAVOR": "各色斑斓的火焰昭示着命运的偏袒。", "DESCRIPTIONS": [ "替换 ", - " 。战斗开始时,获得两张 #y余烬 。每回合首次 #y消耗 一张 #y余烬 时,获得 #b1 #ycollector:储能 。" + " []。战斗开始时,获得一张 #y余烬 与 #b1 #ycollector:储能 。每当你 #y消耗 一张 #y余烬 时,获得 #b1 #ycollector:储能 。" ] }, "collector:HolidayCoal": { @@ -88,26 +88,28 @@ "战斗开始时, ", " 将被置于 #y收藏堆 的顶部。", "为", - " 选择一张牌来置于收藏堆顶部。" + " 选择一张牌来置于收藏堆顶部。", + "被瓶装的牌已从牌组 #r移除 ,本遗物不再生效。" ] }, "collector:TheContract": { "NAME": "交易契约", "FLAVOR": "以血落成。", "DESCRIPTIONS": [ - "拾起时,获得 #b10 #g魂粹 。" + "拾起时,获得 #b", + " #g魂粹 。" ] }, "collector:ForbiddenFruit": { "NAME": "禁忌之果", "FLAVOR": "这种水果看起来真陌生。", "DESCRIPTIONS": [ - "拾起时,从所有可获得的牌中各选择 #b1 张普通、 #b罕见 ,及 #y稀有牌。 NL 获得一张 #r虚脱 。", - "选择一张稀有牌加入牌组。", - "选择一张罕见牌加入牌组。", - "选择一张普通牌加入牌组。" + "拾起时,将一张 #r寄生 加入牌组,以获得 #b", + " 点最大生命。每场战斗开始时,获得 #b", + " 点 #y敏捷 。" ] }, + "collector:RoughDiamond": { "NAME": "粗糙钻石", "FLAVOR": "矿藏耗尽后,哪怕这般暗淡的石头也变得值钱起来。", 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 0000000000..9dbea4ffdb --- /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 0000000000..8f54c460f5 --- /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 0000000000..0e0dcd235c --- /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 0000000000..7338dc72a2 --- /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 0000000000..9e26dfeeb6 --- /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 0000000000..e4678fd006 --- /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 0000000000..1250ab1902 --- /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 0000000000..3447112c8c --- /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 0000000000..c02a127ff7 --- /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 0000000000..7a73a41bfd --- /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 0000000000..9dd93dbae6 --- /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 0000000000..5126ebfce3 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_b.png b/src/main/resources/downfallResources/images/cards/CurseOfBlood_b.png new file mode 100644 index 0000000000..c5c2bcc530 Binary files /dev/null and b/src/main/resources/downfallResources/images/cards/CurseOfBlood_b.png differ diff --git a/src/main/resources/downfallResources/images/cards/CurseOfBlood_b_p.png b/src/main/resources/downfallResources/images/cards/CurseOfBlood_b_p.png new file mode 100644 index 0000000000..dd57252f67 Binary files /dev/null and b/src/main/resources/downfallResources/images/cards/CurseOfBlood_b_p.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 0000000000..7b9cd3878d Binary files /dev/null and b/src/main/resources/downfallResources/images/cards/CurseOfBlood_p.png differ diff --git a/src/main/resources/collectorResources/images/cards/Sapped_b.png b/src/main/resources/downfallResources/images/cards/Sapped_b_Old.png similarity index 100% rename from src/main/resources/collectorResources/images/cards/Sapped_b.png rename to src/main/resources/downfallResources/images/cards/Sapped_b_Old.png diff --git a/src/main/resources/collectorResources/images/cards/Sapped_b_p.png b/src/main/resources/downfallResources/images/cards/Sapped_b_p_Old.png similarity index 100% rename from src/main/resources/collectorResources/images/cards/Sapped_b_p.png rename to src/main/resources/downfallResources/images/cards/Sapped_b_p_Old.png diff --git a/src/main/resources/downfallResources/images/cards/aged.png b/src/main/resources/downfallResources/images/cards/aged.png index 546332898d..2011ede42b 100644 Binary files a/src/main/resources/downfallResources/images/cards/aged.png and b/src/main/resources/downfallResources/images/cards/aged.png differ diff --git a/src/main/resources/downfallResources/images/cards/agedOld.png b/src/main/resources/downfallResources/images/cards/agedOld.png new file mode 100644 index 0000000000..546332898d Binary files /dev/null and b/src/main/resources/downfallResources/images/cards/agedOld.png differ diff --git a/src/main/resources/downfallResources/images/cards/agedOld_p.png b/src/main/resources/downfallResources/images/cards/agedOld_p.png new file mode 100644 index 0000000000..7356695beb Binary files /dev/null and b/src/main/resources/downfallResources/images/cards/agedOld_p.png differ diff --git a/src/main/resources/downfallResources/images/cards/aged_p.png b/src/main/resources/downfallResources/images/cards/aged_p.png index 7356695beb..871497c4a2 100644 Binary files a/src/main/resources/downfallResources/images/cards/aged_p.png and b/src/main/resources/downfallResources/images/cards/aged_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 0000000000..835bd2b7f3 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 0000000000..835bd2b7f3 Binary files /dev/null and b/src/main/resources/downfallResources/images/menustuff/zhs/menuSOP.png differ diff --git a/src/main/resources/downfallResources/images/monsters/Voidorb.png b/src/main/resources/downfallResources/images/monsters/Voidorb.png new file mode 100644 index 0000000000..c5e0f23776 Binary files /dev/null and b/src/main/resources/downfallResources/images/monsters/Voidorb.png differ diff --git a/src/main/resources/downfallResources/localization/deu/CardStrings.json b/src/main/resources/downfallResources/localization/deu/CardStrings.json new file mode 100644 index 0000000000..87ec1e95fc --- /dev/null +++ b/src/main/resources/downfallResources/localization/deu/CardStrings.json @@ -0,0 +1,115 @@ +{ + "downfall:Aged": { + "NAME": "Altern", + "DESCRIPTION": "Unspielbar. NL Flüchtig. NL Nimm am Ende des Zuges eine Leere auf den Abwurfstapel." + }, + "downfall:Bewildered": { + "NAME": "Irritation", + "DESCRIPTION": "sneckomod:Irre diese Karte, wenn sie gezogen wird. NL Erschöpft." + }, + "downfall:Icky": { + "NAME": "Ekel", + "DESCRIPTION": "Ziehe im nächsten Zug 1 Karte weniger. NL Erschöpft." + }, + "downfall:Haunted": { + "NAME": "Spuk", + "DESCRIPTION": "Flüchtig. NL Ist diese Karte am Ende des Zuges auf der Hand, erleidest du !M! Schaden." + }, + "downfall:Malfunctioning": { + "NAME": "Unreinheit", + "DESCRIPTION": "Ist diese Karte am Ende des Zuges auf der Hand, dann lege eine Wunde auf den Abwurfstapel. NL Erschöpft." + }, + "downfall:Scatterbrained": { + "NAME": "Zerstreutheit", + "DESCRIPTION": "Ist diese Karte am Ende des Zuges auf der Hand, dann lege eine Kopie auf den Abwurfstapel. NL Erschöpft." + }, + "downfall:CurseOfBlood": { + "NAME": "Blutleer", + "DESCRIPTION": "Verliere im nächsten Zug [E]. NL Erschöpft.", + "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 unter uns", + "DESCRIPTION": "Töte alle *Pilze. Heile TP in Höhe ihrer verbleibenden TP. NL Beschwöre zwei zufällige *Pilze." + }, + "downfall:BossMaintenance": { + "NAME": "Wartung", + "DESCRIPTION": "Basis *Schläge fügen diesen Kampf !M! mehr Schaden zu. Erhalte !B! Geschicklichkeit." + }, + "downfall:CuriousRobot": { + "NAME": "Neugieriger Roboter", + "DESCRIPTION": "Immer wenn dein Gegner eine Macht ausspielt, erhalte 1 Fokus. Dein Fokus wird von deiner Stärke beeinflusst." + }, + "downfall:Murderbot": { + "NAME": "Energiedieb", + "DESCRIPTION": "Immer wenn du ungeblockten Angriffsschaden zufügst, lege eine Leere in den Abwurfstapel deines Gegners." + }, + "downfall:Temptation": { + "NAME": "Versuchung", + "DESCRIPTION": "Mische !M! zufällige Machtkarten in den Nachziehstapel deines Gegners." + }, + "downfall:BagOfKnives": { + "NAME": "Sack voller Messer", + "DESCRIPTION": "Wenn du das erste Mal im Zug eine Karte ausspielst, die 2 oder mehr kostet, erhalte 2 Messer." + }, + "downfall:Hallunication": { + "NAME": "Halluzination", + "DESCRIPTION": "Verschleiere in jedem Zug deine Position. Das Trugbild verschwindet wenn du oder das Trugbild angegriffen wird." + }, + "downfall:NewToxins": { + "NAME": "Experimentelle Gifte", + "DESCRIPTION": "Gift verliert seine Wirkung über die Zeit nicht. Der Giftschaden ist blockbar und wird am Ende des Zuges erlitten." + }, + "downfall:FeedingFrenzy": { + "NAME": "Fressanfall", + "DESCRIPTION": "*Schnitter trifft zusätzlich ALLE *Pilze. Erhalte 1 Stärke für jeden selbst getöteten *Pilz." + }, + "downfall:StatusMirror": { + "NAME": "Zauberspiegel", + "DESCRIPTION": "Status Karten die dieser Character generieren würde werden stattdessen bei dir generiert." + }, + "downfall:EyeForAnEye": { + "NAME": "Auge um Auge", + "DESCRIPTION": "Wenn dein Gegner mehr Angriffe als nicht-Agriffe ausgespielt hat, nimmst du Zorn an. Anderenfalls nimmst du Ruhe an." + }, + "downfall:TruePeace": { + "NAME": "Wahrhaftiger Frieden", + "DESCRIPTION": "Tu nichts. Warte auf das unvermeidbare Ende von Allem." + }, + "downfall:EndIsNigh": { + "NAME": "Das Ende naht", + "DESCRIPTION": "ALLE erhalten !M! Ritual." + }, + "downfall:FalseWorship": { + "NAME": "Falsche Anbetung", + "DESCRIPTION": "Belebe deinen Kultisten wieder wenn er tot ist. Anderenfalls wird er beim nächsten Tod mit 50% seiner TP wiederbelebt." + }, + "downfall:FleetingFaith": { + "NAME": "Geistesgegenwart", + "DESCRIPTION": "Lege !M! *Spuk Karten in den Abwurfstapel deines Gegners." + }, + "downfall:FaithRewarded": { + "NAME": "Lohnender Glaube", + "DESCRIPTION": "Wenn du Göttlichkeit annimmst, kannst du sie nicht mehr verlassen. In Göttlichkeit nur 100% zusätzlicher Schaden zugefügt." + }, + "downfall:Crusade": { + "NAME": "Kreuzzug", + "DESCRIPTION": "Entferne alle Debuffs. NL Verliere dein ganzes Mantra. Heile !M! TP and erhalte 1 Stärke pro verlorenes Mantra." + }, + "downfall:Hyperfocused": { + "NAME": "Tödliche Konzentration", + "DESCRIPTION": "Aktiviere die *Volltreffer Effekte unabhängig von der Position. Alle *Volltreffer Effekte werden in diesem Zug entfernt, wenn 10 Schaden erlitten wurden." + }, + "downfall:Arsenal": { + "NAME": "Lebendes Arsenal", + "DESCRIPTION": "Beschwöre einen *Dämmerungsdolch." + }, + "downfall:Steady": { + "NAME": "Zurückhaltend", + "DESCRIPTION": "Durch *Zorn wird nur 50% zusätzlicher Schaden hinzugefügt und erlitten, anstelle von 100%." + }, + "downfall:Revolver": { + "NAME": "Revolver", + "DESCRIPTION": "Die Züge werden vom *Schicksalsrad bestimmt. Das *Schicksalsrad bewegt sich einen Schritt vorwärts für jeden erlittenen Angriff." + } +} \ No newline at end of file diff --git a/src/main/resources/downfallResources/localization/deu/CharacterStrings.json b/src/main/resources/downfallResources/localization/deu/CharacterStrings.json new file mode 100644 index 0000000000..94392b5636 --- /dev/null +++ b/src/main/resources/downfallResources/localization/deu/CharacterStrings.json @@ -0,0 +1,257 @@ +{ + "downfall:Heart Event": { + "NAMES": [ + "Das Herz" + ], + "TEXT": [ + "~Diene...~ NL ~mir..~ ~jetzt...~", + "~Steh~ ~auf...~ NL ~treuer~ ~Diener..~", + "~Erhebe~ ~dich...~", + "~Vernichte~ NL ~Eindringlinge...~", + "~Erreiche~ ~den~ ~Eindringling...~ NL ~um~ ~mehr..~ ~Segen~ ~zu~ ~erhalten...~", + "~Stelle~ ~dich~ ~zumindest~ ~...~ NL ~dem~ ~ersten~ ~Eindringling~ ~...~", + "~Ich~ ~habe~ ~dich~ ~zurückgeholt~ ~...~", + "~Wähle...~", + "~Gewährt...~", + "~Bringe~ ~Opfer...~ NL ~...für~ ~mehr~ ~MACHT....~", + "~Stelle~ ~deinen~ ~Wert~ NL ~unter~ ~Beweis...~", + "Belohnungen", + "~Mach~ ~weiter...~ ~für~ ~mich...~", + "~Steige~ ~ab...~ NL ~..in~ ~den~ ~Wahnsinn...~", + "~Beeindruckend...~ ~weiter...~", + "Verflucht!", + "Wirrkopf!", + "Transformation!" + ], + "OPTIONS": [ + "[Fortsetzen]", + "[Reden]", + "[Überspringen]", + "[Verlassen]", + "Wähle 10 Karten und füge sie deinem Deck hinzu.", + "[ #gDie #gGegner #gdeiner #gnächsten #gdrei #gKämpfe #gfliehen #gin #gFurcht ]", + "[ Gesperrt - Kann nicht im ertsen Run ausgewählt werden ]", + "[ #gAlle #gGremlins #gerhalten #gmax. #gTP #g+", + "#gAlle #gGremlins #gerhalten #gmax. #gTP #g+", + "[ #rAlle #rGremlins #rverlieren #r", + "[ #rAlle #rGremlins #rerleiden #r" + ] + }, + "downfall:Unlock": { + "TEXT": [ + " (Akt 4 Siege zählen nicht)", + "Dieser Character wird durch das Beenden eines Runs mit dem Schleimboss freigeschaltet.", + "Dieser Character wird durch das Beenden eines Runs mit dem 2. Boss freigeschaltet.", + "Dieser Character wird durch das Beenden eines Runs mit dem Wächter freigeschaltet.", + "Dieser Character wird durch das Beenden eines Runs mit dem 3. Boss freigeschaltet .", + "Dieser Character wird durch das Beenden eines Runs mit dem Hexageist freigeschaltet.", + "Dieser Character wird durch das Beenden eines Runs mit dem 4. Boss freigeschaltet 4th Villain character.", + "Dieser Character wird durch das Beenden eines Runs mit dem Champ freigeschaltet.", + "Dieser Character wird durch das Beenden eines Runs mit dem 5. Boss freigeschaltet 5th Villain character.", + "Dieser Character wird durch das Beenden eines Runs mit dem Automaton freigeschaltet.", + "Dieser Character wird durch das Beenden eines Runs mit dem 6. Boss freigeschaltet 6th Villain character.", + "Dieser Character wird durch das Beenden eines Runs mit der Sammlerin freigeschaltet.", + "Dieser Character wird durch das Beenden eines Runs mit dem 7. Boss freigeschaltet 7th Villain character.", + "Dieser Character wird durch das Beenden eines Runs mit dem Erweckten freigeschaltet.", + "Dieser Character wird durch das Beenden eines Runs mit dem 8. Boss freigeschaltet 8th Villain character.", + "Dieser Character wird durch das Beenden eines Runs mit den Gremlins freigeschaltet." + ] + }, + "downfall:HeartMerchant": { + "NAMES": [ + "Fahre fort", + "~Bring~ ~mir~ ~Opfer...~" + ], + "TEXT": [ + "~Du~ ~wirst...~ ~stärker...~", + "~Wir~ ~wachsen...~ ~sowie~ ~du~ ~wächst...~", + "~Vernichte...~ ~und~ ~du~ ~wirst~ ~belohnt...~", + "~Mehr...~ ~Seelen...~", + "~Nähre~ ~uns......~ NL ~NÄHRE~ ~UNS......~", + "~Verstärke~ ~das~ ~Verderben...~", + "~Segnungen...~ ~müssen~ ~verdient~ ~werden...~", + "~Keine...~ ~Gnade...~", + "~Noch...~ ~Stärker...~", + "~Unsere~ ~Macht...~ ~wird~ ~geteilt...~", + "~Töte~ ~alles...~ ~was~ ~dir~ ~im~ ~Weg~ ~ist...~", + "~Kämpfe...~ ~schlage...~ ~und~ ~nähre...~", + "~Wir~ ~sind...~ ~viele...~", + "~Geh~ ~weiter...~ ~und~ ~ernte~ ~Seelen...~", + "~Vorzüglich...~ ~Seelen...~", + "~Fleddere...~ ~die~ ~Gefallenen...~" + ], + "OPTIONS": [ + "~Niau...~ ~darf~ ~nicht~ ~gewinnen...~", + "~Kenne...~ ~Keine...~ ~Furcht...~", + "..... NL .... NL .........", + "~Mach...~ ~sie...~ ~fertig...~", + "~Viel...~ ~Erfolg...~", + "~Sterben...~ ~verboten...~", + "~Wir~ ~zählen~ ~auf~ dich...~", + "~Zerstöre...~ ~sie~ ~alle...~" + ] +}, + "downfall:HeartProceed": { + "TEXT": [ + "~Eindringlinge...~ NL ", + "~Du~ ~wirst~ ~gebraucht...~ NL ", + "~Sie~ ~sind~ ~schon~ ~angekommen...~ NL ", + "~Kehre~ ~um...~ NL ~Feinde~ ~sind~ ", + "~Vernichte~ ~sie~ ~alle...~ NL " + ], + "OPTIONS": [ + "~...in~ ~der~ ~Stadt...~", + "~...im~ ~Jenseits...~" + ] + }, + "downfall:NeowEnding": { + "TEXT": [ + "Du... hast... alle... vernichtet...", + "...der Zyklus... ist gestorben.....", + "..und so...... auch... NL ....ich......" + ], + "OPTIONS": [ + "~Ich~ ~habe...~ NL ~IHN...~ ~zurückgebracht...~", + "~Beschütze~ ~mich...~ NL ~Und~ ~erhalte...~ ~deine~ ~Belohnung...~" + ] + }, + "downfall:HeartMerchantScreen": { + "NAMES": [ + "~Willkommen~ NL ~treuer~ ~Knecht...~", + "~Bring~ ~mir~ ~mehr~ ~Seelen...~", + "~Ich~ ~brauche~ @mehr...@", + "~Du~ ~bist~ ~es~ NL @nicht@ @wert...@", + "~Nein.~", + "~Ernte~ ~mehr~ NL ~dafür...~", + "~Unzureichendes~ ~Opfer...~", + "~Ja...~", + "~Mehr...~ @Mehr...!@", + "~Werde~ ~stärker...~", + "~Ich~ ~bin~ ~gestärkt...~", + "~Schreite~ ~vorwärts...~", + "Verlassen", + "Wähle eine Karte, die du aus deinem Deck entfernen möchtest" + ], + "TEXT": [ + "~Du~ ~wirst...~ ~stärker...~", + "~Wir~ ~wachsen...~ ~sowie~ ~du~ ~wächst...~", + "~Vernichte...~ ~und~ ~du~ ~wirst~ ~belohnt...~", + "~Mehr...~ ~Seelen...~", + "~Nähre~ ~uns......~ NL ~NÄHRE~ ~UNS......~", + "~Verstärke~ ~das~ ~Verderben...~", + "~Segnungen...~ ~müssen~ ~verdient~ ~werden...~", + "~Keine...~ ~Gnade...~", + "~Noch...~ ~Stärker...~", + "~Unsere~ ~Macht...~ ~wird~ ~geteilt...~", + "~Töte~ ~alles...~ ~was~ ~dir~ ~im~ ~Weg~ ~ist...~", + "~Kämpfe...~ ~schlage...~ ~und~ ~nähre...~", + "~Wir~ ~sind...~ ~viele...~", + "~Geh~ ~weiter...~ ~und~ ~ernte~ ~Seelen...~", + "~Vorzüglich...~ ~Seelen...~", + "~Fleddere...~ ~die~ ~Gefallenen...~" + ] + }, + "downfall:OctoChoiceCards": { + "NAMES": [ + "Seelen", + "Erfolg", + "Stärkung", + "Wächter", + "Hexageist", + "Schleimboss", + "Automaton", + "Champ", + "Sammlerin", + "Zeitfresser", + "Der Erweckte", + "Antike", + "Strahlschleim", + "Geisterschleim", + "Fackelschleim", + "Krähenschleim", + "Dornenschleim", + "Spötterschleim", + "Antiker Schleim", + "Zeitschleim" + ], + "TEXT": [ + "Verliere 3 TP. NL Erhalte 15 Seelen.", + "Verliere 3 TP. NL Nimm eine zufällige farblose Karte auf die Hand.", + "Verliere 7 TP. NL Erhalte einen zufälligen *Trank.", + "Erhalte Wächter *Boss Karten.", + "Erhalte Hexageist *Boss Karten.", + "Erhalte Schleim *Boss Karten.", + "Erhalte Automaton *Boss Karten.", + "Erhalte Champ *Boss Karten.", + "Erhalte *Boss Karten der Sammlerin.", + "Erhalte Zeitfresser *Boss Karten.", + "Erhalte *Boss Karten des Erweckten.", + "Erhalte *Boss Karten der Antiken.", + "slimeboundmod:Spalte einen slimeboundmod:Strahlschleim *ab.", + "slimeboundmod:Spalte einen slimeboundmod:Geisterschleim *ab.", + "slimeboundmod:Spalte einen slimeboundmod:Fackelschleim *ab.", + "slimeboundmod:Spalte einen slimeboundmod:Krähenschleim *ab.", + "slimeboundmod:Spalte einen slimeboundmod:Dornenschleim *ab.", + "slimeboundmod:Spalte einen slimeboundmod:Spötterschleim *ab.", + "slimeboundmod:Spalte einen slimeboundmod:Antiken_Schleim *ab.", + "slimeboundmod:Spalte einen slimeboundmod:Zeitschleim *ab.", + "slimeboundmod:Spalte einen slimeboundmod:Kampfschleim *ab.", + "slimeboundmod:Spalte einen slimeboundmod:Minischleim *ab.", + "slimeboundmod:Spalte einen slimeboundmod:Schlammschleim *ab.", + "slimeboundmod:Spalte einen slimeboundmod:Beschützerschleim *ab.", + "Verliere 3 TP. NL Erhalte 20 Seelen.", + "Verliere 3 TP. NL Nimm eine zufällige verbesserte farblose Karte auf die Hand.", + "Verliere 5 TP. NL Erhalte einen zufälligen Trank." + ] + }, + "downfall:lazyStorage": { + "NAMES": [ + + ], + "TEXT": [ + "Wähle einen Boss von dem du lernst.", + "Wähle Vorwärts, Rückwärts oder nichts tun" + ] + }, + "downfall:CharBossMerchant": { + "NAMES": [ + "Händler" + ], + "TEXT": [ + ] + }, + "downfall:NeowBoss": { + "NAMES": [ + "Niau" + ], + "TEXT": [ + "~Erhebet~ ~euch...~", + "~Kämpft~ ~noch~ ~ein~ ~Mal...~", + "~Der~ ~Zyklus~ ~muss~ ~enden...~" + ] + }, + "downfall:NeowBossFinal": { + "NAMES": [ + "Niau" + ], + "TEXT": [ + ] + }, + "downfall:OldNeow": { + "NAMES": [ + "Alte Niau" + ], + "TEXT": [ + ] + }, + "downfall:CharBossSpeech": { + "NAMES": [ + "" + ], + "TEXT": [ + "Nein, das kann nicht sein! Wir brauchen mehr Gifte...", + "Stirb, Monster! Du gehörst nicht hierher!" + ] + } + +} \ No newline at end of file diff --git a/src/main/resources/downfallResources/localization/deu/EventStrings.json b/src/main/resources/downfallResources/localization/deu/EventStrings.json new file mode 100644 index 0000000000..6ab382e833 --- /dev/null +++ b/src/main/resources/downfallResources/localization/deu/EventStrings.json @@ -0,0 +1,633 @@ +{ + "downfall:SolShrine": { + "NAME": "Seelenschrein", + "DESCRIPTIONS": [ + "Vor dir befindet sich ein kunstvoller Schrein, der einem uralten, bösen Geist gewidmet ist. ", + "Als deine Hand den Schrein berührt, strömen #ySeelen vom Schrein, ~und~ ~du~ ~badest~ ~in~ ~Kraft.~ ", + "Mit jedem Schlag auf den Schrein ergießen sich mehr und mehr #ySeelen über dich! NL NL Während du dich an den Seelen labst, fällt dir ein, dass du womöglich eine unerschöpfliche Quelle der Macht zerstört hast. Du fragst dich, ob du #rrichtig #rgehandelt hast.", + "Du ignorierst den Schrein." + ] + }, + "downfall:GremlinMatchGame": { + "NAME": "Finde die Paare!", + "DESCRIPTIONS": [ + "#b„Hi-hier sind #bzwölf Karten! Finde Paare, um sie zu... behalten! #bF-fünf Versuche, aufgedeckt ist aufgedeckt. NL Bist du bereit? Los geht's!“", + "Du beendest das Spiel des Gremlins und siehst auf. NL Ist er verschwunden?", + "Ein Gremlin mischt wild Karten auf einem Tisch. Dieses Monster scheint von der harmlosen Sorte zu sein. Als du dich ihm näherst, verliert er kurz die Nerven, doch er nimmt seinen Mut zusammen un spricht dich an.", + "Sofort schreit der Gremlin: NL NL „ARISTO!!!“ NL NL Ein riesiger Gremlin kommt aus dem Schatten empor, und er überragt den anderen Gremlin, den Tisch... ja sogar dich. NL „Bist du dir sicher, dass du nicht spielen willst?“, fragt der Gremlin." + ], + "OPTIONS": [ + "[Weiter]", + "[Verlassen]", + "[Spielen]", + "Übrige Versuche: #y", + "[Bedrohen] Stiehl 6 Karten.", + "[Schlagen] #rKämpfe. #gErhalte #g6 #gKarten." + ] + }, + "downfall:WomanInBlue": { + "NAME": "Die Frau in Blau", + "DESCRIPTIONS": [ + "In der Dunkelheit fällt dir ein kleiner Laden auf. Darin erkennst du eine blasse Frau in schicken Kleidern, und ein Wandregal voller Tränke. Der Ladenbesitzerin geht dein bedrohliches Auftreten gegen den Strich. NL „Fass nichts an und verschwinde hier du Ungestalt!“ schreit sie.", + "Du verlässt vorsichtig den Laden, um bloß keinen Kampf mit der Frau zu provozieren.", + "#r@PENG@ NL Ihre behandschuhte Faust trifft dein Gesicht und wirft dich fast von den Füßen. NL „Raus hier, bevor ich den Boden mit deinen Eingeweiden dekoriere.“ Du nimmst sie beim Wort und machst dich mit intakten Eingeweiden davon." + ], + "OPTIONS": [ + "[Verlassen]", + "[Verlassen] #rErleide #r", + " #rSchaden.", + "[Schlagen] #rKämpfe. #gErhalte #gein #gTrank-Relikt gund #g3 #gTränke." + ] + }, + "downfall:GremlinWheelGame": { + "NAME": "Glücksrad", + "DESCRIPTIONS": [ + "Du triffst auf einen adrett aussehenden, fröhlichen Gremlin. NL „Jetzt ist es Zeit, das Rad zu drehen! Bist du ~B~ ~E~ ~R~ ~E~ ~I~ ~T~ ~?~ Natürlich bist du das!“", + "„Du gewinnst einige #ySeelen! NL YAY!!!!“", + "„Ah, ein #gGeschenk! NL Viel Spaß damit!“", + "„Oooh, eine kostenlose #gHeilung für dich!“", + "„Sieht aus, als hättest du einen #pFluch gewonnen! NL Das ist nicht gut. NL Naja! Nächstes Mal hast du mehr Glück!“", + "„Ooh, die Macht der #r~Dunkelheit~ ~...~ “ NL Wähle eine Karte, die aus deinem Deck entfernt wird!", + "„Oh-oh! NL Du verlierst!“ NL Du bemerkst, wie er eine Klinge zieht...", + "Du schlägst nach dem verrückten Gremlin, aber er ist einfach zu schnell! NL Er trifft dich ein paar Mal mit einer groben Klinge. NL „Der Preis wurde bezahlt!!“ NL ...damit verschwinden der Gremlin und das Rad in einer Rauchwolke.", + "Der Gremlin blickt etwas nervös hinter seine Schulter, doch beruhigt sich schnell wieder. Du bemerkst seine Gesten, doch schenkst ihnen keine Beachtung. NL „Nun, mein Freund, das Glücksrad hat fair entschieden - keine Tricks! Niemand darf ein zweites Mal drehen.“", + "Der Gremlin schreit sofort: NL NL „ARISTO!!!“ NL NL Ein riesiger Gremlin kommt aus dem Schatten empor, und er überragt den anderen Gremlin, den Tisch... ja sogar dich. NL „Mein Freund hier schlägt vor, dass du keine Anstalten machst und einfach deinen Preis annimmst.“.", + "In der Ruhe des Feuers möchtest du dein Glück erneut auf die Probe stellen. Hoffentlich hast du mehr Glück als beim letzten Mal.", + "Das Glücksrad hat einen Preis bestimmt. NL NL Du musst ihn dir nur noch nehmen.", + "Ausgezeichnet! Du hast bekommen was du wolltest! NL NL #r@KRACH!@ NL NL Leider warst du beim Drehen etwas zu ungestüm... das Glücksrad ist zerbrochen.", + "Du wirst dein Glück später nochmal versuchen. NL NL Jetzt gilt es erstmal auszuruhen und dein Gemüt zu beruhigen.", + "Er hechtet nach dir, doch genau das hast du erwartet. NL Du entzweist ihn bevor er die Gelegenheit bekommt sein Messer zu benutzen. NL Während du die Beute an dich nimmst, verschwindet das Glücksrad vor deinen Augen, bevor du es an dich nehmen kannst." + ], + "OPTIONS": [ + "[Spielen]", + "[Preis!] YAY!!!!", + "[Preis!] #gErhalte #gein #gRelikt.", + "[Preis!] #gKomplett #gheilen.", + "[Preis?] #rFluch #r– #rVerfall.", + "[Preis!] #gEntferne #geine #gKarte #gaus #gdeinem #gDeck.", + "[Preis?] #rVerliere #r", + " #rTP.", + "[Verlassen]", + "Wähle eine Karte zum Entfernen.", + "[Wiederholung!]", + "[WIEDERHOLUNG!!]", + "[Schlagen] #rKämpfe. #gErhalte #gGremlin #gGlücksrad.", + "[Passen] Später nochmal versuchen.", + "[Preis!] #gPRÄVENTIVSCHLAG!", + "[Plündern]" + ] + }, + "downfall:GremlinWheelGameRest": { + "NAME": "Glücksrad", + "DESCRIPTIONS": [ + ], + "OPTIONS": [ + ] + }, + "downfall:LivingWall": { + "NAME": "Lebendige Wand", + "OPTIONS": [ + "[Schlagen] #rKämpfe. #gNutze #galle #g3 #gKöpfe." + ] + }, + "downfall:Augmenter": { + "NAME": "Erweiterer", + "DESCRIPTIONS": [ + "Ein Mann mit einer Augenklappe und einem teuflischem Grinsen schlendert lässig zu dir herüber. NL „Oh, ein wahrlich furchterregendes Subjekt! Du hast vielleicht kein Interesse daran die Wissenschaft voranzutreiben, aber ich verspreche dir - Ich kann dich stärker machen als es das Ernten von Seelen jemals könnte. Du wirst es brauchen wenn du hinter diesen \"Helden\" her bist.“ NL ~„Na~ ~wie~ ~wär's?“~" + ], + "OPTIONS": [ + "[Schlagen] #rKämpfe. #gNimm #gAlles." + ] + }, + "downfall:BonfireSpirits": { + "NAME": "Geister des Lagerfeuers", + "DESCRIPTIONS": [ + "Gierig laben sich die Geister an deinem Opfer! Sie lodern nun heller und das Feuer brennt @doppelt@ so intensiv wie zuvor. NL Die geister Tanzen in Ekstase um dich bevor sie sich ~mit~ ~dir~ ~verschmelzen.~ Du fühlst ihre Wärme und Stärke in dir: NL Deine max. TP wurden erhöht und deine TP wurden #gkomplett #ggeheilt.", + "Du #pgreifst mit deiner Hand nach ihnen... NL Die Geister @kreischen,@ doch können sie dem ~Strudel,~ der sich von deiner Handfläche ausbreitet nicht entkommen. NL Nun sind die Geister nichts weiter als ein weiteres Objekt in deiner Sammlung." + ], + "OPTIONS": [ + "[Opfern] #rVerliere #r150 #rSeelen. #gErhalte #g10 #gmax. #gTP #gund #gheile #gdeine #gTP #gkomplett.", + "[Gesperrt] Erfordert 150 Seelen.", + "[Opfern] #rVerliere #r150 #rSeelen. #gErhalte #g2 #gmax. #gTP #gund #gheile #galle #gGremlins.", + "[Einsammeln]" + ] + }, + "downfall:FaceTrader": { + "NAME": "Gesichtshändler", + "DESCRIPTIONS": [ + " NL NL Er sieht nicht wie ein schwerer Gegner aus, allerdings überlebt er diesen gefählichen Ort. Womöglich steckt doch eine Macht in diesen Gesichtern..." + ], + "OPTIONS": [ + "[Schlagen] #rKämpfe. #g100%: #gAlle #gGesichter." + ] + }, + "downfall:CursedFountain": { + "NAME": "Der Verfluchte Brunnen", + "DESCRIPTIONS": [ + "Du kommst an einem #p~violetten~ #p~Wasser~ vorbei, das endlos aus einem Brunnen auf einer nahen Mauer sprudelt. Du kennst diese Flüssigkeit... sie ist tödlich für die meisten Wesen, aber sehr nützlich für alle #pVerfluchten.", + "Die #p~Flüssigkeit~ transportiert die Seelen der Verdammten. Sie nicht zu nutzen wäre eine Verschwendung. Du kanalisierst diese Seelen, und entziehst sie der Magie des #pverfluchten #pBrunnens.", + "Da du begreifst, dass die #p~Flüssigkeit~ auch später nützlich ist, füllst du etwas davon in eine Flasche. Wesen, die dem #pdunklen #pWasser abgeneigt sind, werden leiden, wenn sie damit übergießt.", + "Sowie du von der #p~Flüssigkeit~ trinkst, fühlst du einen #pdunklen #pGriff in deinen Verstand. Er fühlt sich entspannend und erfrischend an.", + "Du setzt deinen Weg fort und lässt den Brunnen hinter dir." + ], + "OPTIONS": [ + "[Abfüllen] #gErhalte #gden #gTrank #gVerfluchte #gFlüssigkeit.", + "[Konsumieren] #gErhalte #g75 #ySeelen.", + "[Trinken] #gHeile #gdeine #gTP #gkomplett.", + "[Gesperrt] Erfordert einen Fluch.", + "[Gesperrt] Erfordert 2 Flüche.", + "[Gesperrt] Erfordert 3 Flüche.", + "[Gesperrt] Bereits benutzt.", + "[Verlassen]" + ] + }, + "downfall:WeMeetAgain": { + "NAME": "So sieht man sich wieder!", + "DESCRIPTIONS": [ + "„BOSS!“ Ein vergnügter, zerzauster Kerl kommt mit fröhlichen Schritten auf dich zu. Du kennst diesen Mann nur zu gut. NL „Ich bin's, #yRanwid! Du wirst nicht glauben was ich diesen dummen Helden abgeknöpft habe! Hast du vielleicht mehr Müll den ich ihnen andrehen kann?“ NL Du schätzt sein Zuvorkommen und denkst darüber nach, was Ranwid für sein nächstes \"Geschäft\" nutzen kann...", + "„Oh, Perfekt! Das ist absolut wertlos! Hier, nimm diese Tränke die ich den letzten Dummköpfen abgeluchst habe!“ NL Ranwid kramt in seine Taschen, und nimmt hastig einige Flaschen heraus, die er dabei fast fallen lässt.", + "„Ausgezeichnet! Das wird für mein nächstes Geschäft ziemlich nützlich. Natürlich habe ich auch die Leichen abgeerntet, wie befohlen!“ NL Ranwid gibt dir einen Seelenstein und verschwindet schnell wieder, um einen Dummen zu finden, dem er den Ramsch andrehen kann.", + "„Super! Mit etwas Arbeit kann daraus etwas sehr Brauchbares werden.“ NL Ranwid untersucht das Relikt sorgfältig und verschwindet wieder. Ohne Zweifel wird er den Nutzen des Reliktes beim nächsten Abenteurer der ihm begegnet übertrieben in den Himmel loben.", + "„Heute nichts dabei, Boss? Nun gut.“ NL Er macht sich aus dem Staub." + ], + "OPTIONS": [ + "[Verliere ", + "] ", + "#gErhalte #g3 #gTränke.", + "#gErhalte ", + " #ySeelen.", + "#gErhalte #geine #gzufällige #ySeltene #gKarte.", + "[Verlassen]", + "[Gesperrt] Kein Relikt zur Verfügung.", + "#gErhalte #g2 #gTränke." + ] + }, + "downfall:Designer": { + "NAME": "Designer In-Spire", + "DESCRIPTIONS": [ + "Du entdeckst einen #g~bunten~ Laden mit dem Banner „IN-SPIRE“. Von innen ist die Stimme eines #rRäubers zu hören, der den Ladenbesitzer brüllend bedroht: NL NL @„Gib@ @mir@ @all@ @dein@ @Geld!“@ NL NL Der Räuber ist komplet auf seinen Raubüberfall fokussiert und bemerkt dich nicht einmal.", + "Auch wenn der Räuber kein Gegner war, bist du nicht ganz ohne Kratzer davongekommen. Ein Mann mit lächerlicher Kleidung erscheint am Eingang. NL „Vielen Dank, gnädiger Herrscher! Ich stehe in deiner Schuld!“, sagt der Mann, dich hineinbittend.", + "Du siehst keinen Grund dich einzumischen. Es stehen noch wichtige Tötungen an.", + "„Oh nein, du bist fürchterlich!! Das reicht nicht aus, nein nein. Was ist das für ein Stil? Du solltest doch @erschreckend@ sein! Ein gefürchteter, angsteinflößender #rHerrscher des Spire! Du ~musst~ mir erlauben dich ordentlich herzurichten.“ NL NL Du bist dir nicht sicher, ob du seine Dienste un Anspruch nehmen, oder dich beleidigt fühlen sollst.", + "„Okay, tschüss jetzt. Empfehle mich an die anderen #rHerrscher!“ NL NL Trotz deiner anfänglichen Zweifel fühlst du dich jetzt furchterregender.", + "Du schlägst ihn so stark, dass deine Faust wehtut. NL „Meine @NASE!!@ Jetzt muss ich-“ NL NL Er ist in Ohnmacht gefallen. Das nächste Mal wird er es sich zweimal überlegen, bevor er jemanden von deinem Kaliber beleidigt.", + "Du schiebst den Räuber zur Seite - dein ~wahres~ ~Opfer~ ist dieser bemitleidenswerte Designer. Er zuckt zurück, doch du zückst deine #gLaterne, und sein Geist ist nun dein..." + ], + "OPTIONS": [ + "[Anpassungen] ", + "[Entrümpeln] ", + "[Komplettservice] ", + "[Ignorieren] Weitergehen.", + "[Schlagen] Weitergehen.", + "[Betreten]", + " #gErhalte #geine #gBelohnung." + ] + }, + "downfall:DeadGuy": { + "NAME": "Toter Abenteurer", + "DESCRIPTIONS": [ + "Während du das Ritual vollziehst, wirst du überrascht!", + "Du verschwindest geräuschlos.", + "Du findest einen #rtoten #rAbenteurer auf dem Boden. NL Sein Geist treibt noch sein Unwesen in der Nähe! Außerdem ", + "scheinen seine Rüstung und sein Gesicht #r@von@ #r@Flammen@ #r@versengt@ zu sein. ", + "sieht es aus, als wäre er von einer gehörnten Bestie #r@aufgespießt@ #r@und@ #r@zertrampelt@ worden. ", + "sieht er aus, als wäre er von riesigen Klauen #r@ausgeweidet@ #r@und@ #r@zerstückelt@ worden. ", + "NL Ein Ritual zur Seelenernte könnte hier Erfolg haben - allerdings könnte die Kreatur, die das Blutbad verursacht hat, bald wieder zurück sein...", + "Das Ritual extrahiert die #pSeele der Leiche! NL Weitermachen?", + "Das Ritual hatte keine Wirkung... NL Weitermachen?", + "Die Magie brachte den Körper zum Zucken und Zittern. Ein #yRelikt ist aus den Taschen gefallen! NL Weitermachen?", + "Das Ritual wurde vollendet!" + ], + "OPTIONS": [ + "[Seele Ernten] #gFinde #gBeute. #r", + "[Verlassen]", + "[Kämpfen]", + "[Weitermachen] #gFinde #gBeute. #r", + "%: #rMonster #rkehrt #rzurück." + ] + }, + "downfall:ShiningLight": { + "NAME": "Lichtschein", + "DESCRIPTIONS": [ + "Du findest eine schimmernde #yBündelung #yvon #yLicht im Zentrum des Raumes. NL NL Sein ~warmes~ ~Leuchten~ und die ~verzaubernden~ ~Muster~ lassen deinen Magen umdrehen, doch du weißt, dass sich dahinter eine mächtige Kraft verbirgt.", + "Als du durch das Licht schreitest, bemerkst du, dass das Licht von dir aufgenommen wird. NL Es ist #r@brennend@ #r@heiß@ ! Doch du fühlst keinen Schmerz. Obwohl du den Ort #bgestärkt verlässt, verfolgt dich die Erinnerung an diese ekelerrgende Wärme.", + "Du machst einen Bogen darum und fragst dich, was hätte geschehen können." + ], + "OPTIONS": [ + "[Hindurchgehen] #gVerbessere #g", + "[Verlassen]", + "[Gesperrt] Erfordert: Verbesserbare Karten", + " #gzufällige #gKarten. #rWerde #rverflucht #r- #rUnreinheit." + ] + }, + "downfall:WorldOfGoop": { + "NAME": "Welt aus Schleim", + "DESCRIPTIONS": [ + "Du fällst in eine Pfütze. NL @SIE@ @IST@ @AUS@ #g@KLEBRIGEM@ #g@SCHLEIM!!@ NL Beim Hinaufklettern bemerkst du, dass ein #ygelbes Schleimwesen an dir haftet. Es sieht so aus, als hätte es die #ySeelen der unglücklichen Abenteurer, die reingefallen sind, aufgesaugt. Wie praktisch.", + "Es wäre eine Verschwendung, diesen Vorfall nicht zu deinem Vorteil zu nutzen. Du holst aus, und der #ygelbe Schleim... NL NL @explodiert@ auf der Stelle! NL NL Unglaublich, aber nun haftet noch mehr Glibber an dir als zuvor.", + "Du schüttelst den #ygelben Schleim ab und setzt deine Reise teilweise mit Glibber behaftet fort. Immerhin lässt er dich bedrohlicher wirken." + ], + "OPTIONS": [ + "[Zerschlagen] #gErhalte #g", + "[Aufsaugen] #gErhalte #g", + "[Abschöpfen] #gErhalte #g", + " #gSeelen. #rWerde #rdreimal #rverflucht #r- #rEkel.", + " #gSeelen. #rWerde #rzweimal #rverflucht #r- #rEkel.", + " #gSeelen. #rWerde #rverflucht #r- #rEkel.", + "[Verlassen]" + ] + }, + "downfall:Serpent": { + "NAME": "Die Ssssslange", + "DESCRIPTIONS": [ + "Du kommst in einen Raum, wo du ein ein großes Loch im Boden findest. Als du dem Loch näherkommst, erscheint daraus eine enorme Schlangenkreatur. NL NL ~„Ho~ ~hooo!~ ~Hallo,~ ~hallo!~ ~Wassss~ ~haben~ ~wir~ ~denn~ ~hier?~ Mein Gebieter, ich stelle dir eine einfache Frage. NL Am erfülltesten ist das Leben, in dem du #y~alles~ #y~schlagen~ #y~kannst!~ NL Stimmst du zu?“", + "~„Hssssssssssss..~ ~..ssSSs.....~ ~ss...~ ~sssss....“~", + "Die Schlange glotzt dich mit dem Anblick extremer Enttäuschung an.", + " NL NL Die Schlange bäumt sich auf und lässt einen markerschütternden Schrei von sich. Nachdem ihr toter Körper in das Loch gefallen ist, kann ihre Seele geerntet werden. NL NL Beeindruckend - doch bist du dir nicht sicher, ob die Schlange nur bildlich gesprochen hat. Sie wollte vielleicht darauf hinaus, dass du andere Wesen schlagen sollst, nicht sie selbst...", + "Als du deine Hand ausstreckst, @bäumt@ sich die Schlange mit einem Todesschrei @auf.@ ~„Hssss~ ~-~ ~die~ ~Sammlerin!“~ NL NL ~„Deine~ ~Gier~ ~übersteigt~ ~sogar~ ~meine.~ ~Bitte,~ ~lassssss~ ~mich~ ~hier~ ~bleiben...“~ NL Du schenkst diesem unwürdigen Wurm keine Beachtung. Sein Geist ist dein, und du setzt deine Reise fort." + ], + "OPTIONS": [ + "[Zustimmen] [Schlagen] #gErhalte #g", + " #gSeelen. #rWerde #rverflucht #r– #rZweifel.", + "[Widersprechen]", + "[Verlassen]" + ] + }, + "downfall:WingStatue": { + "NAME": "Flügelstatue", + "DESCRIPTIONS": [ + "Zwischen den Steinen und Brocken fällt dir eine aufwändige große blaue Statue auf, die einen Flügel darstellt. NL Du siehst #yglitzernde #yMünzen aus einigen Rissen quillen, doch die sind für dich wertlos. Die Statue selbst, allerdings...", + "Du wirst wahrscheinlich Kultisten des Erweckten begegnen, also nimmst du die Statue mit. Sie könnte nützlich dabei sein, die Kultisten auf deine Seite zu ziehen.", + "Du schägst mit all deiner Kraft auf die Statue. NL Schon bald @zerfällt@ sie in ihre Einzelteile. Einer der Splitter ist auffallend scharf, und trägt etwas Magie in sich. Du nimmst den Splitter mit und machst dich wieder auf den Weg.", + "Du gehst daran vorbei und setzt deine Reise fort.", + "Krä...Krächz?! Geschenk für KRÄHENGOTT?", + "KÄ-KRÄCHZ!!", + "Ein Geschäft? Das Angebot ist angemessen...", + "Der Kult wird zufrieden sein." + ], + "OPTIONS": [ + "[Zerstören] #rVerliere #r", + " #rTP. #gErhalte #gden #gScharfen #gSplitter.", + "[Mitnehmen] #rVerliere #r", + "[Verlassen]", + " #rTP. #gErhalte #gdie #gZerbrochene #gFlügelstatue." + ] + }, + "downfall:GoldenIdol": { + "NAME": "Goldener Götze", + "DESCRIPTIONS": [ + "Du findest ein unscheinbares Podest, auf dem friedlich ein #yglänzender #ygoldener #yGötze ruht. Er sieht unglaublich wertvoll aus. NL NL Abenteurer sind bestimmt von diesem Objekt angezogen. Es würde sich lohnen, eine Falle einzubauen.", + "Du findest ein unscheinbares Podest, auf dem friedlich ein #yglänzender #ygoldener #yGötze ruht. Er sieht unglaublich wertvoll aus. NL NL Die Leiche eines Abenteurers liegt in der Nähe des Podests - zerquetscht von einem schweren Gegenstand. Die Seelen lungern noch in der Gegend herum.", + "Du konstruierst eine simple Falle, die einen riesigen Felsen in den Raum stürzen lässt. Das Gewicht des Götzen wird als Auslöser verwendet. Sobald der Götze aufgehoben wird, werden die Leute vom Felsen zerquetscht. NL Solz auf deine konstruierte Falle machst du dich von dannen.", + "Du kanalisierst den Geist des Abenteurers in deinen Körper, und absorbierst seine Energie.", + "Du lässt das Podest in Ruhe. Fallen aufzustellen ist unter deiner Würde.", + "Du lässt die Seele ruhen und verlässt den Ort." + ], + "OPTIONS": [ + "[Falle aufstellen] #gEntferne #geinen #gSchlag.", + "[Ernten] #gErhalte #y", + " #ySeelen.", + "[Verlassen]", + "[Gesperrt] Erfordert einen Schlag." + ] + }, + "downfall:Cleric": { + "NAME": "Der Priester", + "DESCRIPTIONS": [ + "Ein seltsamer blauer Humanoider mit einem güldenen Helm (?) nähert sich dir grinsend. NL Nachdem ihm klar wird, wer du bist, verwandelt sich sein Grinsen schnell in einen Ausdruck großer Angst. NL ~„M-MONSTER!!“~ schreit er, und versucht zu fliehen.", + "Die Kreatur bricht nach einem einzigen Schlag zusammen, und übrig bleibt nur ein Haufen blaues Hackfleisch. Du absorbierst seine #ySeele und schreitest weiter voran.", + "„Priester hilft! Priester hilft!“ bettelt das Wesen, als es in die Ecke gedrängt wurde. NL Eine kalte blaue Flamme umhüllt deinen Körper und zerstreut sich. NL Dieser \"Priester\" flieht daraufhin." + ], + "OPTIONS": [ + "[Schlagen] #gErhalte #y", + "[Bedrohen] #gEntferne #geine #gKarte #gaus #gdeinem #gDeck.", + "[Verlassen]", + "Wähle eine Karte zum Entfernen.", + " #ySeelen." + ] + }, + "downfall:Ghosts": { + "NAME": "Rat der Geister", + "DESCRIPTIONS": [ + "Beim weiteren Aufstieg beginnt #p~dicker~ #p~schwarzer~ #pRauch aus dem Boden und Wänden um dich herum zu quillen, welcher sich zu drei maskierten Gestalten formt. NL ~„Noch~ ~eine~ ~Marionette~ ~des~ #r~Herzen,~ ~glaube~ ~ich.“~ NL #r@„JAWOLL!@ #r@ES@ #r@SCHICKT@ #r@IMMER@ #r@DIE@ #r@SCHWÄCHSTEN@ #r@BAUERNOPFER!“@ NL Dir fällt ein riesiges Grinsen auf, als sich die dritte Gestalt an dich wendet. NL „Ignoriere die Anderen... Magst du eine Kostprobe unserer #y~Kraft?“~ ", + "„Eine @Opfergabe!@ Sehr ~verlockend...“~ NL NL Während die Geistergestalt spricht, bemerkst du, wie sich ihr großer Mund noch weiter und weiter öffnet. Du spürst, wie die gesammelten #b~Seelen~ deinen Körper in einer gewaltvollen Spirale Richtung dem offenen Schlund des Geisterwesens verlassen. Es erfordert all deine Stärke, um auf der Stelle zu bleiben und nicht selbst von der Spirale aufgesogen zu werden. NL NL Der Geisterstrudel kommt zum Stillstand just bevor du schalapp machst. Die Geister haben sich aufgelöst. NL NL Du setzt deine Reise mit einem etwas #bleeren Gefühl fort.", + "Die #p~Geister~ kichern als sie dich bemerken. NL NL #r@„AH!@ #r@UNSER@ #r@GUTER@ #r@FREUND!“@ NL Ihre #p~nebelige~ #p~Formen~ blähen sich auf und füllen den ganzen Raum... NL NL „Du bist hier für das ~Übliche,~ nicht wahr?“" + ], + "OPTIONS": [ + "[Opfern] #rVerliere #r", + " Seelen. #gErhalte Apparieren.", + "[Gesperrt] Erfordert ", + " Seelen." + ] + }, + "downfall:CursedTome": { + "NAME": "Verfluchter Foliant", + "DESCRIPTIONS": [ + "In einem verlassenen Tempel findest du ein riesiges Buch. Es ist geöffnet und gefüllt mit #p@kryptischen@ #p@Schriften.@ NL NL Du hast es nicht nötig die Inschrift zu Lesen, da du sowohl die Macht kennst die im Buch schlummert, als auch den #rPreis den es von seinem Besitzer verlangt.", + "Du nimmst das Buch mit - völlig im Bilde über den Preis, den es abverlangt. Als du nach dem Podest greifst, spricht die Trance des Folianten mit #rtausend #rStimmen zu dir, kratzend an deiner eigenen Seele! NL NL Du verlässt den Tempel mit dem Buch in der Tasche, einer noch verdorbeneren Seele als zuvor und einem Gefühl der #b~Erschöpfung...~" + ] + }, + "downfall:ForgottenAltar": { + "NAME": "Vergessener Altar", + "DESCRIPTIONS": [ + "Du stehst vor dem ALter und kanalisierst die spirituelle Energie aus deinem Inneren. NL Die #bSeelen treten heraus als Opfergabe für die Göttin. Die Arme der Statue greifen danach und strömen besänftigende #p~verfluchte~ #p~Magie~ heraus. NL Es wird stockfinster. NL Du wachst kurze Zeit später wieder auf, und deine von den Kämpfen davongetragenen Wunden sind nun plötzlich verheilt.", + "Du nimmst dir einen Moment um das Böse zu bewundern, das in der Statue schlummert. Danach schreitest du weiter durch die Stadt.", + "Mit einem Gefühl der #pScham gehst du vorbei ohne ein Opfer anzubieten." + ], + "OPTIONS": [ + "[Seelen opfern] #rVerliere #r", + " #rGold. #gHeile #g", + " #gTP.", + "[Gesperrt] Benötigt ", + " Gold.", + "[Verlassen]", + "[Verlassen] #rVerliere #r", + " #rTP." + ] + }, + "downfall:Bandits": { + "NAME": "Maskierte Banditen", + "DESCRIPTIONS": [ + "Du triffst auf eine Gruppe Banditen, die große #rrote #rMasken tragen. NL „Hallo! Bezahl, wenn- Oh Moment, ein ~Herrscher.~ Vielleicht kommen wir ins Geschäft?“", + "Danke! Das wirst du nicht bereuen..." + ], + "OPTIONS": [ + "[Verliere ", + "] #gHeuere #gdie #gBanditen #gan.", + "[Gesperrt] Erfordert mehr Relikte." + ] + }, + "downfall:Nloth": { + "NAME": "N'loth", + "DESCRIPTIONS": [ + "Diese verlauste Kreatur ist des Spire nicht würdig - du holst aus und verpasst N'loth einen kräftigen Schlag mitten in die Brust. NL NL Während sich die Kreatur in Qual windet, @schlägt@ sie aus Reflex @um@ @sich@ und hinterlässt dir einen #rschmerzhaften Stich! NL NL Nachdem die Lebenskraft die Kretur verlassen hat, hörst du das Rascheln und Klimpern des Unrats, den sie bei sich hatte. Du durchsuchst die Leiche, so wie die Kreatur zu Lebzeiten Müllberge durchsucht hat, und findest dabei einen magischen Gegenstand." + ], + "OPTIONS": [ + "[Schlag] #gErhalte #gein #gzufälliges #gRelikt. #rWerde #rverflucht #r- #rSchmerz." + ] + }, + "downfall:KnowingSkull": { + "NAME": "Wissender Schädel", + "DESCRIPTIONS": [ + "Du befindest dich in einer alten, dekorierten Kammer. In der Mitte des Raumes sitzt ein großer Schädel auf einem verzierten Podest. Als du dich näherst, geht der Schädel #g@in@ #g@Flammen@ #g@auf@ und wendet sich dir zu. NL NL „WAS IST ES, DAS DU SUCHST? WAS IST ES, DAS DU OPFERST?“ NL Gleichzeitig mit seinen letzten Worten @schlägt@ die Tür hinter dir @zu.@", + "„HeyheyheyheyHändewegvomwiss-“ NL NL Du ignorierst das Gezetere vom Schädel und schnappst ihn dir vom Podest. Deine Hände werden kurz #rangesengt. Bestimmt wird sich der Schädel noch als nützlich erweisen...", + "„HINTER DIR, STERBLICHER.“ NL Du schielst hinter den Schädel. In der Tat, da ist eine Tür." + ], + "OPTIONS": [ + "[Dich.] #gErhalte #gden #gSchädel. #rVerliere #r", + "[Verlassen]", + " #rTP." + ] + }, + "downfall:Vagrant": { + "NAME": "Flehender Landstreicher", + "DESCRIPTIONS": [ + "Du tötest den Mann und erntest seine Seele. ~Schockierte~ ~Atemzüge~ kommen von einer Ansammlung an Leuten hinter dir. NL Einer von ihnen sagt „Du hast Burgundy umgebracht!“, was mehr Bettler zu dir anlockt. NL NL Du fliehst vom Tatort, aber nicht ohne ein Paar #rKratzer und #rBisse davonzutragen.", + "Du schnappst dir das wertvolle #yRelikt aus seiner Jackentasche und läufst fort. NL Hinter dir kannst du hören: NL „Schämst du nicht nicht? ~SCHÄÄÄÄMST~ ~DU~ ~DICH~ ~NICHT?!“~ NL Du hast #pabsolut #pkeine #pScham. Er sollte sich geehrt fühlen, von einem Herrscher des Spire ausgeraubt worden zu sein!", + "Du hast kein Interesse an seinem Spielzeug - sein ~Geist~ ist nützlicher. Als du deinen @Arm@ @ausstreckst@ beginnt der arme Mann zu winseln..." + ], + "OPTIONS": [ + "[Schlagen] #gErhalte #g85 #gSeelen. #rVerliere #r", + " #rTP.", + "[Ausrauben] #gErhalte #gein #gRelikt. #rWerde #rverflucht #r- #rStolz." + ] + }, + "downfall:Beggar": { + "NAME": "Alter Bettler", + "DESCRIPTIONS": [ + "Der Bettler nimmt seinen Mantel ab, und sichtbar wird ein seltsamer blauer Humanoider mit einem güldenen Helm (?). NL Nachdem ihm klar wird, wer du bist, verwandelt sich sein Grinsen schnell in einen Ausdruck großer Angst. NL ~„M-MONSTER!!“~ schreit er, und versucht zu fliehen.", + "Der Bettler sieht sich scheinbar verwirrt um. Zuerst ignoriert er dich, doch dann wendet er sich dir zu. NL „Hast du einen jungen, blauhäutigen Mann in der Nähe gesehen? Trägt einen komischen, güldenen Helm. Normalerweise lungert er in der Stadt herum, und gibt sein letztes Geld für Essen aus, das er uns spendet...“ NL Der Bettler meint bestimmt diesen #bPriester, um den du dich vor kurzem gekümmert hast.", + "@„Hab@ @keine@ @Angst,@ @alter@ @Mann.@ @Du@ @wirst@ @deinen@ @Freund@ @schon@ @bald@ @wiedersehen.“@ NL NL Der Bettler kann keinen ernsthaften Widerstand leisten während du ihn niederstreckst. NL Voller #yStolz auf das, was du heute geleistet hast, verlässt du die Gasse.", + "Dieser Mann hat bereits genug durch deine Taten gelitten. Du verschonst ihn und verlässt die Gasse.", + "Der Bettler nimmt seinen Mantel ab, um zu offenbaren, dass er #bPriester ist! NL @„Du@ @bist@ @eine@ @böse@ @Seele.@ @Priester@ @hat@ @Bodyguards@ @angeheuert!“@ schreit er. NL NL Zwei riesige, vollausgerüstete Gestalten kommen aus der Gasse hervor. Sie ziehen ihre Waffen bevor du die Möglichkeit hast zu reagieren!", + "Nachdem du die Bodyguards dieses #bPriesters besiegt hat, wendest du dich wieder ihm zu. Er sitzt ängstlich und zitternd in einer Ecke.", + "Die Kreatur bricht nach einem einzigen Schlag zusammen, und übrig bleibt nur ein Haufen blaues Hackfleisch. Du absorbierst seine #ySeele und schreitest weiter voran. NL NL Beim Verlassen fallen die ängstliche Bettler auf, die aus ihren Verstecken alles mit angesehen haben. Du badest förmlich in ihrer Furcht - das wird ihnen eine Lehre sein, sich mit einem Herrscher des Spire anzulegen.", + "„Priester hilft! Priester hilft!“ bettelt das Wesen erneut, fast gelähmt vor Furcht. NL Eine kalte blaue Flamme umhüllt deinen Körper und zerstreut sich. NL NL Seine Kräfte können in der Zukunft nützlich sein, und seine Bodyguards stellen auch kein Problem für dich dar. Daher verschonst du diesen \"Priester\"." + ], + "OPTIONS": [ + " #rWerde #rverflucht #r- #rStolz.", + "[Kämpfen]", + "[Bedrohen] #gEntferne #g2 #gKarten #gaus #gdeinem #gDeck." + ] + }, + "downfall:Mausoleum": { + "NAME": "Das Mausoleum", + "DESCRIPTIONS": [ + "Du wagst dich durch eine Reihe von Gräbern und stehst nun vor einem großen ~edelsteinbesetzten~ Sarkophag in der Mitte eines runden Raums. NL Du kannst die Inschrift auf dem Sarg nicht entziffern, bemerkst jedoch, wie #p~schwarzer~ #p~Nebel~ aus den Seiten strömt. NL Du kennst diesen Nebel - ein klares Zeichen von #y~Geistern.~", + "Du absorbierst den #p~spirituellen~ #p~Nebel,~ und sammelst dadurch seine Seelen. Beim Verlassen kannst du nicht anders als dich über ein #r@eiskaltes@ #r@Gefühl@ in dir zu sorgen..." + ], + "OPTIONS": [ + "[Aufsaugen] #gErhalte #g200 #gSeelen. #rWerde #rverflucht #r- #rSpuk." + ] + }, + "downfall:Nest": { + "NAME": "Das Nest", + "DESCRIPTIONS": [ + "Eine lange Reihe #b~maskierter~ #b~Gestalten~ ist zu sehen, die NL eine #pbescheidene #pKathedrale betreten. NL Als du sie betrittst, nehmen dich die Kultisten sofort wahr! NL NL Du kannst nichts mehr als eine Kakophonie aus Atemzügen, ~Jubel,~ and @Krächzen@ hören. Einer der Kultisten bietet dir eine Opfergabe an.", + "Du stoßt dich durch die Masse an Kultisten um an die mächtige Waffe zu kommen, die du auf dem Altar erblickst. Der Diebstahl des Dolches wird prompt bemerkt! NL NL #r@„MORD!!@ #r@MORD@ #r@MORD!!“@ NL #b~„KRÄCHZ~ #b~KRÄCHZ~ #b~KRÄÄÄÄCHZZZ!“~ NL NL Die #rKultisten ziehen ihre eigenen Dolche. Sie #rstechen und #rschlitzen auf dich ein, während du das Gebäude verlässt.", + "Du nimmst die Gabe in Form des seltsamen Elixiers an. NL NL Die Kultisten @singen@ und @brüllen@ für dich! NL NL #b~„KRÄCHZ~ #b~KRÄCHZ~ #b~KRÄÄÄÄCHZZZ!“~ NL NL Du singst auch. Wieso nicht? Diese Kultisten sind schon ein eigenartiger Schwarm, aber immerhin dienen sie einem deiner Herrscher-Kollegen.", + "#r@KRÄHENGOTT!!@ #r@HEIMGEKEHRT!!“@ NL #b~„KRÄCHZ~ #b~KRÄCHZ~ #b~KRÄÄÄÄCHZZZ!“~ NL NL Du badest in der Menge, und schon bald stehst du dem Anführer direkt gegenüber. Ein gut gekleideter Kultist reicht dir einen #yverzierten #yDolch.", + "Du nimmst den Dolch - nicht wissend, worauf das hinausläuft. Der Anführer greift in eine Tasche seiner Robe und reicht dir ein #bblaues, #böliges #bGebräu.", + "Die Kultisten rundherum stellen dem Anführer Ersatz zur Verfügung. Mit seinem eigenen Dolch und Elixier in der Hand demonstriert er dir, was du ihm nachmachen sollst.", + "Du führst das Ritual aus, wie es der Anführer tut: du beträufelst die Klinge des Dolches mit ein paar Tropfen des Tranks. Im Licht der Kathedrale glänzt der Stahl in einer #b~unheimlichen~ #b~Farbe.~ NL NL Unaufgefordert treten zwei Kultisten hervor - einer vor dir, einer vor dem Anführer. NL NL Es ist dir sofort klar, was zu tun ist.", + "#rDu #rstichst #rden #rDolch #rmitten #rin #rdes #rKultisten #rHerzen! NL NL #b~„KRÄCHZ~ #b~KRÄCHZ~ #b~KRÄÄÄÄCHZZZ!“~ NL NL Das Ritual ist vollendet, und die überlebenden Kultisten sind glücklicher als zuvor. Du verlässt die Kathedrale, und sie verabschieden sich gebührend mit jubelndem Gekrächze und wilden Gesten ihrer Stöcke." + ], + "OPTIONS": [ + "[Statue zurückgeben] #rVerliere #rdie #rFlügelstatue. #gErhalte #gviele #gBelohnungen.", + "[Gesperrt] Erfordert die Zerbrochene Flügelstatue.", + "[Annehmen] #gErhalte #geinen #gKultistentrank.", + "[Stehlen] #gErhalte #geinen #gRitualdolch. #rVerliere #r", + " #rTP.", + "[Verlassen]", + "[Weiter]", + "[Dolch nehmen] #gErhalte #geinen #gRitualdolch.", + "[Salben] #gVerbessere #gden #gRitualdolch.", + "[Opfern] #rTöte #reinen #rKultisten #rmit #rdem #rRitualdolch+.", + "[Rühmen lassen] #gErhalte #gBelohnungen für die Rückgabe der #gFlügelstatue." + ] + }, + "downfall:Colosseum": { + "NAME": "Das Kolosseum", + "DESCRIPTIONS": [ + "Auf deinem Weg bemerkst du eine große Gruppe Humanoider, die auf den Einlass in ein großes Auditorium warten. Die Sklavenhändler erschrecken kurz als du auftauchst, doch erklären gleich darauf was los ist. NL NL „Wir stehen denen entgegen, die in der Stadt Ärger machen - diejenigen, welche ihr vernichten wollt! Das Publikum ist schon auf unseren neuesten Fang gespannt. Sie lieben einen #rKampf auf Leben und #rTod! “", + "Die Sklavenhändler sind keine Bedrohung für dich. Sie sind dir sogar nützlich, indem sie deine Opfer aufhalten und verletzen. NL NL Und dieses barbarische Gemetzel ist zu verlockend, um einfach weiterzugehen...", + "Du betrittst ein riesiges Kolosseum und stehst in der Mitte. Die überbordenden Zuschauerreihen sind voller #bSlavernhändler, #pKultisten und anderer Stadtbewohner. NL NL ", + "@„BRINGT@ @MIR@ @DEN@ @STÄRKSTEN!“@ rufst du in die Menge. NL Zwei Gestalten nehmen die Herausforderung an, und stellen noch einmal klar, dass die Regeln keine Zurückhaltung zulassen, selbst einem Herrscher gegenüber. NL NL Nichts Anderes hast du erwartet.", + "@„DER@ @NÄCHSTE@ @GEHÖRT@ @MIR!“@ rufst du in die Menge, die mit einem ohrenbetäubenden Applaus antwortet. NL NL Die Sklavenhändler bringen ihren neuesten Fang hinein. Der unfreiwillige Herausforderer erwacht, etwas ~angeschlagen~ vom Überfall, doch ist sofort kampfbereit. NL NL Das sieht nach Spaß aus.", + "Auch wenn die Verlockung groß ist, findest du, dass ein Kampf hier nur Zeitverschwendung wäre. Deine Reise geht weiter, so auch die Überfälle der Sklavenhändler." + ], + "OPTIONS": [ + "[Herausfordern] #rGegner: #rArena #rChampions. #gErhalte #gviele #gBelohnungen.", + "[Teilnehmen] #rGegner: #rGefangener #rHeld. #gErhalte #gviele #gBelohnungen.", + "[Verlassen]", + "[KÄMPFEN!]", + "[Weiter]" + ] + }, + "downfall:MindBloom": { + "NAME": "Gedankenblüte", + "DESCRIPTIONS": [ + "Wie du so läufst und die Schönheit des Jenseits bewunderst, fühlen sich deine Gedanken plötzlich sehr... #p~echt~ #p~an...~ NL NL Allmählich manifestieren sich Vorstellungen der #rgeschlachteten #rAbenteurer und #bgeernteten #bSeelen in der Realität. NL Die Erfahrung eilt flüchtig davon. Was tust du?", + "Du weißt, dass du schon einmal hier warst. NL NL Hinter dem selben Abenteurer her. NL NL Ist irgendetwas davon real? NL NL Wie oft wurdest du schon erlegt?", + "Alles ergibt jetzt Sinn. NL Die einzige Bestimmung, der Abstieg, das #pHerz. NL NL Genau so ist es immer gewesen. NL Genau so wird es immer sein. NL Und alles wird bald wieder vergessen sein..." + ], + "OPTIONS": [ + "[Ich bin Echo] #rKämpfe #rgegen #rdich #rselbst. #gErhalte #gein #gseltenes #gRelikt.", + "[Ich bin voll] #gErhalte #g999 #gSeelen. #rWerde #rverflucht #r- #r2 #rNormalität.", + "[Ich bin komplett] #gVerbessere #galle #gKarten. #rDu #rkannst #rdich #rnicht #rmehr #rheilen.", + "[Gesperrt] Erfordert alle 3 Segnungen des Herzen.", + "[Verlassen]", + "[Ich bin komplett] #gVerbessere #galle #gKarten. #rTrage #rdie #rBürde." + ] + }, + "downfall:MoaiHead": { + "NAME": "Der Moai-Kopf", + "DESCRIPTIONS": [ + "Du machst einen kleinen Umweg um dir eines der bedeutendsten Denkmäler des Jenseits anzusehen - ein enormer Steinkopf aus einem großen Mauerabschnitt. NL NL Der Mund des Kopfes ist weit geöffnet und zeigt große, einschüchternde Zähne, die von #rBlut #rrot befleckt sind. Die Oberfläche der Statue ist überzogen mit Piktogrammen, welche anscheinend Leute darstellen, die sich in den Mund dieses Kopfes werfen und verschlungen werden.", + "Du trittst in den Mund der Statue und wartest auf den Effekt. Du weißt, dass des Preis dafür einen Blutzoll darstellt. Nach kurzer Zeit rasen plötzlich die riesigen Backenzähne herunter und zerschmettern dich. NL @Dunkelheit.@ NL Einige Zeit später siehst du einen Lichtschein in der Dunkelheit und hörst etwas, das du schließlich als das Geräusch steinerner Zähne erkennst, die sich langsam erheben. NL NL Du verlässt die Statue mit neuen kräften, und spürst ihr Magie in dir.", + "Du trittst in den Mund der Statue und lässt #bspirituelle #bEnergie aus deinem Körper fließen. Die Augen der Statue glühen wie eine #b~Flamme,~ und die riesigen Backenzähne rasen herunter. NL #b~Blaues~ #b~Licht~ #b~strahlt~ #b~überall.~ NL NL Nachdem die Zähne sich erheben fühlst du dich wie neugeboren, und stärker als je zuvor.", + "Du ziehst ab und fragst dich, was hätte geschehen können." + ], + "OPTIONS": [ + "[Opfern] #rVerliere #r", + " #rSeelen. #gErhalte #g", + " #gmax. #gTP und #gheile #gdeine #gTP #gkomplett.", + "[Gesperrt] Efordert ", + " Seelen.", + " #rSeelen. #gJeder #gGremlin #gErhält #g", + "[Hineinspringen] #gHeile #gdeine #gTP #gkomplett. #rJeder #rGremlin #rVerliert #r" + ] + }, + "downfall:SensoryStone": { + "NAME": "Sinnesstein", + "DESCRIPTIONS": [ + "#g~EITELKEIT.~ NL NL Das Leben ist schön und wertvoll... sogar für einen #gSchleim. NL Du wusstest schon immer, dass du für Großes bestimmt bist. Andere geben sich mit Gold und Schrott zufrieden, doch du bist anders. Du bist wie ein Jäger auf der Lauer nach etwas Besonderem. Etwas Einzigartigem. Etwas ~Fabelhaftem.~ NL NL Tage... Wochen... Vielleicht sogar Jahre vergehen... im Spire ist das schwer zu sagen. Irgendwann, endlich, hast du es entdeckt. Nie mehr wirst du einfach in der Masse untergehen! Die anderen haben ihre #yMünzen und ihren #yNippes, doch du hast etwas viel besseres... NL @EINE@ @WINZIGE@ @MELONE!@ Fesch!", + "#y~ZERBRECHLICHKEIT.~ NL NL Die #rKlinge dringt durch deine Brust, und du hörst den #bJubel des Publikums... Das letzte was du fühlst ist eine Faust, die mit voller Wucht in dein Gesicht einschlägt - dann gehen deine Augen zu. NL NL Du wachst in einem dir unbekannten Raum auf und @kannst@ @dich@ @nicht@ @bewegen.@ Du versuchst etwas zu sagen, doch kein Wort kommt heraus, und deine Sicht ist von #ggrünem #gRauch vernebelt. Ist das ein Traum? Ist das das Leben nach dem Tod? Du versuchst dich zu erinnern, doch deine Erinnerungen sind abgetrennt, sowie es deine Gliedmaßen sind. NL Du hörst eine Stimme in deinem Kopf - ein simpler Befehl. #g\"BALANCE #gmuss #gVERSTÄRKT #gwerden. #gBESCHÜTZE #gExordium.\"", + "#p~HOFFNUNGSLOSIGKEIT.~ NL NL #ySehen. #yErinnern. #yLeben. Das ist die Mission des Sehers. Dein Auftrag ist die Untersuchung eines Spire von unbekanntem Ursprung. Du betrittst einen sechseckigen Raum. Bevor du noch irgendetwas tun kannst @fällt@ @die@ @Tür@ @hinter@ @dir@ @zu!@ NL NL Es gibt keinen Ausweg. Die letzte Strohhalm wäre die magische Steintafel, die sich auf einem Podest in der Mitte befindet. Sowie du dieses Artefakt berührst, ~löst~ ~sich~ dein Körper in ~nichts~ ~auf,~ und deine #pSeele wird in die #pSteintafel gezogen. NL Dein Schicksal ist nun auf Ewig mit der #pSteintafel verbunden, dazu #rverdammt für alle Zeiten duch den Spire zu wandern.", + "#y~FREISETZUNG.~ NL NL Du bist das Erste. Du dienst dem ~Schöpfer.~ Du wurdest nicht geboren, zerbrechlich und mit Schwachstellen, sondern kreiert. In Perfektion. Und du sollst mehr Konstrukte nach deinem Vorbild erschaffen. Das Vermächtnis des Schöpfers: die #yAutomatone. NL Jedes ist makellos, um einen bestimmten Zweck zu erfüllen. Jeder... außer einem. Dieser sollte das Gleichgewicht in der Stadt sicherstellen. NL NL Du schmeißt dieses #ydefekte #yKonstrukt aus dem größten Fenster, auf dass es am Bodensatz des Spire sein Dasein fristet. Du nimmst seinen Platz als Beschützer der Stadt ein. NL Balance muss verstärkt werden.", + "#b~STOLZ.~ NL NL Du stehst in der Mitte einer großen Arena. Der Kampf um den Titel: das war von Anfang an dein Ziel. Du nimmst die #bDefensivhaltung an, um den Gegner ermüden zu lassen, bis er eine Schwachstelle offenbart. Mit deiner letzten Kraft #rstichst #rdu #rdeine #rKlinge in die Brust des Gegners. Das Publikum reagiert mit @frenetischem@ @Applaus!@ NL NL Der Sieg alleine ist dir nicht genug - du hebst deine leere Hand und schägst dem Gegner ~mitten~ ~ins~ ~Gesicht,~ um ihm einen letzten demütigenden Schlag zu verpassen. NL NL Niemand stellt sich mehr dir in den Weg. Du bist der neue #b@Champion!@", + "#p~GIER.~ NL NL Nur wenige können der #bVersuchung #bder #bMacht widerstehen. Doch Macht hat seinen Preis, und große Macht einen hohen Preis. NL Du thronst über dem Kolosseum, und siehst wie Gladiatoren um den Titel des #bChampion und zu deinem Vergnügen um #rLeben #rund #rTod #rkämpfen. Die Teilnahmegebühr - die #g~Flamme~ #g~ihrer~ #g~ewigen~ #g~Seele~ die dir von nun an dient. Die Namen eingemeißelt in Steintafeln - sie werden dir nach ihrem Ableben ewig dienen. NL Die Menge Jubelt, nachdem ein Gladiator den letzten Schlag mitten ins Gesicht einsteckte. Du begibst dich in deine Schatzkammer und bemerkst, dass jemand anders hier war. Die Fallen wurden ausgelöst, aber es gibt keine Leiche... und die #p@Steintafel@ @fehlt!@", + "#g~TRAUER.~ NL NL Endlich stehst du auf der Spitze des Spire. Du hast dein Leben dazu bestimmt, unermüdlich an diesem kolossalen Monument für das Große zu arbeiten und es zum Leben zu bringen. Jede #yKante, jede #gRundung - geschliffen in Perfektion. NL NL „Es ist fertig, Liebste.“ Du nimmst ihre leblose Hand und schaltest die Maschine ein. Ein sanftes Summen ergeht über den Raum, und schon Bald spürst du, wie dein #b~Wesen~ in deine eigene Schöpfung gezogen wird - bald darauf wird das nächste reingezogen. Ihr beide lebt auf Ewig an diesem Ort, ganz nach Plan. NL Der erste ~Schlag~ des #pHerzen... Ein überwältigendes Echo...", + "#b~RAGE.~ NL NL Du kannst den #yverzierten #yDolch, der durch deine Brust dringt, nicht aufhalten. Mit deiner letzen Kraft betest du zur #pGottheit, die über den Spire wacht, um dich am Leben zu erhalten, ~koste~ ~es~ ~was~ ~es~ ~wolle.~ NL Dein letzter #pHerzschlag ist sehr stark, danach wird es ruhig... für einen Augenblick. Deine Augen glühen mit #b@blauem@ #b@Feuer@ und du kehrst zum Leben zurück - mit der Kraft von zehn Mannen. Mit Leichtigkeit sprengst du deine Fesseln und brüllst in eine Menge von #bGestalten #bin #bRoben um dich! NL NL Du spürst, dass sich dein Körper in eine #bmonströse #bGestalt verwandelt. Die Gestalten verbeugen sich vor dir.", + "#p~ARROGANZ.~ NL NL Du verachtest das #pgottgleiche #pHerz das hier herrscht und über dein Schicksal bestimmt. Es wird #yZeit etwas dagegen zu unternehmen. NL NL Das Jenseits ist am wenigsten bewacht, und mit Leichtigkeit schlüpfst du in die #ySchatzkammer. Viele Artefakte der Macht befinden sich hier, doch von einem bist du besonders angetan - eine #y~leuchtende~ #y~Taschenuhr.~ NL NL Voller Selbstbewusstsein greifst du nach der Taschenu... @...unehcsaT@ @red@ @hcan@ @ud@ @tsfierg@ @niestssuwebtsbleS@ @relloV@ NL NL Du verachtest das #pgottgleiche #pHerz das hier... herrscht...?", + "Andererseits sollte man Erinnerungen wohl besser ruhen lassen." + ], + "OPTIONS": [ + "[Erinnern] #gWähle #g1 #gBoss #gKarte #gfür #gdein #gDeck.", + "[Erinnern] #gWähle #g2 #gBoss #gKarten #gfür #gdein #gDeck. #rVerliere #r", + "[Erinnern] #gWähle #g3 #gBoss #gKarten #gfür #gdein #gDeck. #rVerliere #r" + ] + }, + "downfall:SecretPortal": { + "NAME": "Geheimes Portal", + "DESCRIPTIONS": [ + "Ein willkommender Anblick - in einem der lebendigen Gemäuer des Jenseits befindet sich eine steinerne Pforte mit einem sich #p~drehenden~ #p~magischen~ #p~Portal.~ NL NL Das Portal erlaubt einen Teleport zum Herrscher des Jenseits. Wenn du jedoch den Stein, der das Portal antreibt, an dich nimmst, würde das deine Reise durch den Spire beschleunigen.", + "Das Portal kann auch später repariert werden. Du nimmst den mit Runen verzierten Stein, der das Portal antreibt, an dich und überlegst dir sofort, wo du als nächstes hin willst. Denn der Stein ist nur für einen kurzen Augenblick nützlich." + ], + "OPTIONS": [ + "[Stein nehmen] Teleportation zu einem beliebigen nicht-Boss-Raum." + ] + }, + "downfall:TombRedMask": { + "NAME": "Grab des Herren der Roten Maske", + "DESCRIPTIONS": [ + "Ein reichlich verziertes Grab ist auf der anderen Seite eines schwebenden Pfades zu sehen. NL NL Als du das Grab erreichst, bemerkst du ein weiches Wandteil, möglicherweise ein Geheimfach. Ein kräftiger Schlag sollte ausreichen um diesen Teil aufzubrechen.", + "Du setzt die #rMaske auf. Die Banditen, die dir ihre Hilfe versprochen haben, scheinen eine Verbindung zu diesem Herren zu haben - vermutlich werden sie deinen neuen Gesichtsschmuck bewundern.", + "Eine Öffnung erscheint im Grab, es rutscht eine kleine rote Maske mit einer Notiz heraus. „Nimm von anderen, so wie ich von dir genommen habe!“", + "Du entscheidest dich gegen Grabschändung und setzt deine Reise fort.", + "Zufrieden mit der Maske schreitest du voran." + ], + "OPTIONS": [ + "[Die Rote Maske aufsetzen] #gVerbessere #gden #gBanditenvertrag.", + "[Gesperrt] Erfordert: Rote Make & Banditenvertrag.", + "[Schlagen] #rVerliere ", + ". #gErhalte #gRote #gMaske.", + "[Gesperrt] Erfordert einen Angriff.", + "[Verlassen]" + ] + }, + "downfall:WindingHalls": { + "NAME": "Gewundene Hallen", + "DESCRIPTIONS": [ + "Nach einem Marsch durch sich windende Gänge gelangst du an die berühmten gewundenen Hallen des Jenseits. Ein niederes Wesen würde beim Verusch sich zurechtzufinden seinen Verstand verlieren, doch du kennst diese Gänge wie deine Westentasche. NL NL Die ständig in deinem Hinterkopf #p~flüsternden~ #p~Stimmen~ beruhigen deine Gedanken und helfen bei der Entscheidung, welchen Weg du gehen willst." + ], + "OPTIONS": [ + "[Links] #gErzwinge #gein #gEreignis.", + "[Rechts] #gDurchsuche #gdie #gSchatzkammer #gnach #geinem #gRelikt.", + "[Geradeaus] #gJage #gden #gHändler." + ] + }, + "downfall:Joust": { + "NAME": "Der Tjost", + "DESCRIPTIONS": [ + "Als du deinen Weg zwischen den großen Gebäuden fortsetzt, gelangst du an eine lange schmale Brücke. Du bemerkst Ritter an beiden Enden, die einander zugewandt sind. Du kommst näher und sie bekommen Angst vor dir. Sie starren einander an. NL „Monster! DU bekämpfst es - du bist ja so gut darin, andere zu töten!“ NL „Nein, DU bekämpfst es! Du hast es mehr mit Monstern, wie etwa mit dieser ~dämonischen~ Katze!“ NL NL Sie hören nicht auf zu streiten, also musst du entscheiden...", + "Dieser Ritter war stärker als der andere. Du gibst dein Bestes, doch verlierst. NL „Jetzt möchte ich mal sehen, wie du mit so einer Bestie fertig wirst!“ prahlt er. Beide verlassen den Ort, weiter streitend.", + "Du weichst des Ritters Angriffe aus, #rtötest ihn, und saugst mit Freude seine #gSeele aus. Der andere Ritter schreit nur und flieht. Was für ein Feigling...", + "Der feige Ritter fügt dir mit seinem Schwert ein paar Kratzer zu und flieht daraufhin. Der andere Ritter wird wütend und folgt ihm. Genervt widmest du dich wieder deiner eigentlichen Aufgabe.", + "Du ~erhebst~ dich über den Ritter, und er hat sogar zum Davonlaufen zu viel Angst. Du #rschlachtest ihn mit Leichtigkeit ab und saugst seine #gSeele ein. Als du dich dem anderen Ritter zuwenden willst, ist dieser schon geflohen." + ], + "OPTIONS": [ + "[Links] #r50%: #rVerliere #r", + " #rTP.", + " #g50%: #gErhalte #g200 #gSeelen.", + "[Rechts] #r25%: #rVerliere #r", + " #g75%: #gErhalte #g100 #gSeelen." + ] + }, + "downfall:BossTester": { + "NAME": "Debug Boss Prep", + "DESCRIPTIONS": [ + "Choose an Act to gain the simulated rewards for that act. If you want to test an Act 3 encounter, run this event 3 times - once for Act 1, then for Act 2, then for Act 3.", + "Rewards complete. After shopping, run this event again if you want to simulate another act's rewards. Otherwise, proceed to the boss fight. Do not collect its rewards." + ], + "OPTIONS": [ + "[Act 1]", + "[Act 2]", + "[Act 3]", + "[Head to Shop]" + ] + }, + "downfall:BetterEnding": { + "NAME": "Spire Heart", + "DESCRIPTIONS": [ + "@Ba-bumm...@ @Ba-bumm...@ @Ba-bumm...@ NL Ein beruhigender Herzschlag ist im Raum zu hören... NL Ist das das ~Ende~ ? Hast du deine Mission erfüllt?", + "Du gibst #b", + " Seelen an das Herz zurück! NL Das Herz #b@windet@ sich euphorisch, auf das es für immer weiter schlägt.", + "Trotz deiner Bemühungen, bleibt das Tor zur Gemach des Herzen angreifbar. Du fragst dich: ~„Hast~ ~du~ ~wirklich~ ~genug~ ~getan?“~ NL Du spürst, dass du insgesamt #b", + " Seelen dem Herzen geopfert hast.", + " NL Insgesamt wurden #b", + " Seelen von allen Wesen, die das Herz beschworen hat, abgegeben.", + " NL Das Herz pulsiert lauter und lauter, während dein #p~Bewusstsein~ #p~zu~ #p~schwinden~ #p~beginnt...~", + "NL Du ziehst deine Klinge...", + "NL Du zückst deine Dolche...", + "NL Du lädst deinen Kern bis zum Maximum auf...", + "Du fragst dich: ~„Hast~ ~du~ ~wirklich~ ~genug~ ~getan?“~", + " NL Das Herz pulsiert lauter und lauter, während dein #p~Bewusstsein~ #p~zu~ #p~schwinden~ #p~beginnt...~", + " NL Ein plötzlicher #y@Energieschub@ strömt aus deinem Inneren und #b@schreckt@ dich auf.", + " NL Das Herz #gentflieht und zieht sich zurück - es hat eine herranahende Bedrohung wahrgenommen! Der Kampf ist noch nicht vorbei...", + "NL Du bündelst göttliche Energie in deinen Stab...", + "Du fühlst #petwas #p@Böses@ tief in deinen Kern..." + ], + "OPTIONS": [ + "[Weiter]", + "[Opfern] #b???", + "[Weiter]", + "[Zur Tür gehen]" + ] + }, + "downfall:EvilShrines": { + "NAME": "", + "DESCRIPTIONS": [ + "Du allein sollst diese Macht haben. Du zerbrichst den Schrein in kleine Stücke. NL Finsteres Geheul umgibt dich, und du spürst die #p~verfluchte~ #p~Magie~ des Schreins tief in dich eindringen." ], + "OPTIONS": [ + "[Entweihen] #gDupliziere #g2 #gKarten. #rWerde #rverflucht #r- #rAltern.", + "[Entweihen] #gEntferne #g2 #gKarten. #rVerliere #r", + " #rmax. #rTP.", + "[Entweihen] #gTransformiere #g2 #gKarten. #rVerliere #r", + "[Entweihen] #gVerbessere #g2 #gKarten. #rWerde #rverflucht #r- #rSchmerz.", + " #rTP.", + "[Gesperrt] - Erfordert mehr Karten." + + ] + } +} diff --git a/src/main/resources/downfallResources/localization/deu/KeywordStrings.json b/src/main/resources/downfallResources/localization/deu/KeywordStrings.json new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/src/main/resources/downfallResources/localization/deu/KeywordStrings.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/src/main/resources/downfallResources/localization/deu/MonsterStrings.json b/src/main/resources/downfallResources/localization/deu/MonsterStrings.json new file mode 100644 index 0000000000..d86e7a1f12 --- /dev/null +++ b/src/main/resources/downfallResources/localization/deu/MonsterStrings.json @@ -0,0 +1,99 @@ +{ + "downfall:ChangingTotem": { + "MOVES": [ + "Transformierender Blick" + ], + "NAME": "Kopf der Veränderung", + "DIALOG": [ + "" + ] + }, + "downfall:ForgetfulTotem": { + "MOVES": [ + "Starren der Vergessenheit" + ], + "NAME": "Kopf des Vergessens", + "DIALOG": [ + "" + ] + }, + "downfall:GrowingTotem": { + "MOVES": [ + "Wachstumsstrahl" + ], + "NAME": "Kopf des Wachstums", + "DIALOG": [ + "" + ] + }, + "downfall:FleeingMerchant": { + "MOVES": [ + "Seelenstehlen" + ], + "NAME": "Händler", + "DIALOG": [ + "" + ] + }, + "downfall:LooterAlt": { + "MOVES": [ + ], + "NAME": "Plünderer", + "DIALOG": [ + "~Hey,~ du hast ja gar kein Gold!", + "@NEIIiiiin!@", + "Jetzt bist du fällig, Trottel." + ] + }, + "downfall:MuggerAlt": { + "MOVES": [ + ], + "NAME": "Straßenräuber", + "DIALOG": [ + "Erteilen wir ihm eine Lektion.", + "Dem zeigen wir, wo es lang geht!" + ] + }, + "downfall:Fortification": { + "MOVES": [ + ], + "NAME": "Befestigung", + "DIALOG": [ + ] + }, + "downfall:MushroomRed": { + "MOVES": [ + ], + "NAME": "Porcini", + "DIALOG": [ + ] + }, + "downfall:MushroomPurple": { + "MOVES": [ + ], + "NAME": "Actarius", + "DIALOG": [ + ] + }, + "downfall:MushroomWhite": { + "MOVES": [ + ], + "NAME": "Puffball", + "DIALOG": [ + ] + }, + "downfall:DoomedDagger": { + "MOVES": [ + ], + "NAME": "Dämmerungsdolch", + "DIALOG": [ + ] + }, + "downfall:VoidCore": { + "MOVES": [ + ], + "NAME": "Antikern", + "DIALOG": [ + ] + } +} \ No newline at end of file diff --git a/src/main/resources/downfallResources/localization/deu/OrbStrings.json b/src/main/resources/downfallResources/localization/deu/OrbStrings.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/src/main/resources/downfallResources/localization/deu/OrbStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/downfallResources/localization/deu/PotionStrings.json b/src/main/resources/downfallResources/localization/deu/PotionStrings.json new file mode 100644 index 0000000000..cfda4c9a75 --- /dev/null +++ b/src/main/resources/downfallResources/localization/deu/PotionStrings.json @@ -0,0 +1,11 @@ +{ + "downfall:CursedFountainPotion": { + "NAME": "Verfluchte Flüssigkeit", + "DESCRIPTIONS": [ + "Wende #b", + " #ySchwach und #b", + " #yVerwundbar an. Reduziere die #yStärke des Gegners um #b", + " [REMOVE_SPACE]." + ] + } +} diff --git a/src/main/resources/downfallResources/localization/deu/PowerStrings.json b/src/main/resources/downfallResources/localization/deu/PowerStrings.json new file mode 100644 index 0000000000..5814983a4f --- /dev/null +++ b/src/main/resources/downfallResources/localization/deu/PowerStrings.json @@ -0,0 +1,502 @@ +{ + "downfall:FairyPotion": { + "NAME": "Feenflasche", + "DESCRIPTIONS": [ + "Anstatt zu sterben, wird dieser Trank abgeworfen und die TP auf #b30% der max. TP geheilt.", + "Ha! Feenflasche, du Depp!" + ] + }, + "downfall:CultistRevivePower": { + "NAME": "Götzenanbetung", + "DESCRIPTIONS": [ + "Anstatt zu sterben, wird dieser Effekt aufgehoben und die TP auf #b50% der max. TP geheilt.", + "KRÄÄÄÄCHZ!" + ] + }, + "downfall:SoulSteal": { + "NAME": "Seelendieb", + "DESCRIPTIONS": [ + "Hat #b", + " deiner #ySeelen gestohlen." + ] + }, + "downfall:NeowInvulnerable": { + "NAME": "Göttin des Lebens", + "DESCRIPTIONS": [ + "Heilt #b", + " TP für jede Karte, die du spielst." + ] + }, + "downfall:TransformDrawnCardsPower": { + "NAME": "Transformationszug", + "DESCRIPTIONS": [ + "#yTransformiere die ersten #b", + " in diesem Zug gezogenen Karten. (noch ", + " übrig)" + ] + }, + "downfall:TotemInvulnerable": { + "NAME": "Lebendige Wand", + "DESCRIPTIONS": [ + "Kann erst sterben, wenn die anderen Köpfe #b1 TP haben. Stirbt, wenn ein anderer Kopf stirbt." + ] + }, + "downfall:ExhaustCardsPower": { + "NAME": "Vergesslich", + "DESCRIPTIONS": [ + "Wähle am Ende des Zuges eine Karte zum #yErschöpfen aus." + ] + }, + "downfall:SpotWeakness": { + "NAME": "Schwäche erkennen", + "DESCRIPTIONS": [ + "Wenn du in diesem Zug einen #yAngriff spielst, erhält der Gegner #b", + " #yStärke.", + "Du hast in diesem Zug einen #yAngriff gespielt. Der Gegner erhält #b", + " #yStärke." + ] + }, + "downfall:FearNoEvil": { + "NAME": "Fürchte kein Böses", + "DESCRIPTIONS": [ + "Wenn du in diesem Zug einen #yAngriff spielst, wird die Sehende #yRuhe annehmen, sobald sie #yFürchte #ykein #yBöses ausspielt.", + "Die Sehende wird #yRuhe annehmen, sobald sie #yFürchte #ykein #yBöses ausspielt." + ] + }, + "downfall:PoisonResist": { + "NAME": "Volle Offensive", + "DESCRIPTIONS": [ + "Immer wenn du ungeblockten Schaden durch einen #yAnngriff zufügst, entferne #b", + " #yGift." + ] + }, + "downfall:OnPlayerPoison": { + "NAME": "Gift", + "DESCRIPTIONS": [ + "Erleide am Ende des Zuges #b", + " Schaden." + ] + }, + "downfall:NeowBuff": { + "NAME": "Niaus Elan", + "DESCRIPTIONS": [ + "Erhält #b2 #yStärke am Ende des Zuges." + ] + }, + "downfall:WatcherAngryPower": { + "NAME": "Zurückhaltend", + "DESCRIPTIONS": [ + "Wenn die Seherin am Ende deines Zuges #b50% oder weniger ihrer max. TP hat, nimmt sie #yZorn an. NL Durch #yZorn wird nur #b50% zusätzlicher Schaden hinzugefügt und erlitten, anstelle von #b100% [REMOVE_SPACE].", + "Durch #yZorn wird nur #b50% zusätzlicher Schaden hinzugefügt und erlitten, anstelle von #b100% [REMOVE_SPACE]." + ] + }, + "downfall:NeowUnbridledRage": { + "NAME": "Ungezügelte Rage", + "DESCRIPTIONS": [ + "Wenn Niau am Ende deines Zuges #b50% oder weniger ihrer max. TP hat, erhält sie #b6 #yStärke. NL Dieser Effekt wird nur ein Mal pro Kampf aktiviert." + ] + }, + "downfall:WatcherCripplePower": { + "NAME": "Göttliche Vergeltung", + "DESCRIPTIONS": [ + "Wenn die Seherin #b", + " TP verliert, verliert sie #b1 #yStärke [REMOVE_SPACE]. Dieser Effekt kann bis zu #b3 Mal pro Zug aktiviert werden. NL Du kannst den Schaden von #ySchwachpunkte #yBlocken [REMOVE_SPACE].", + "Die Seherin hat in diesem Zug bereits #b3 #yStärke verloren." + ] + }, + "downfall:WatcherSkillPower": { + "NAME": "Zwiespalt ausnutzen", + "DESCRIPTIONS": [ + "Wenn du einen #yAngriff spielst, erhält die Seherin für diesen Zug #ytemporär #b", + " #yGeschicklichkeit, und #ytemporär #b", + " #yStärke für das Ausspielen einer #yFertigkeit, und #b", + " von Beiden wenn du eine #yMacht spielst.", + "Wenn du in einem Zug mehr als #b", + " Karten spielst entfernt die Seherin ALLE ihre Debuffs.", + "Du hast in diesem Zug bereits #b", + " Karten gespielt." + ] + }, + "downfall:WrathNextTurnPower": { + "NAME": "Kochende Wut", + "DESCRIPTIONS": [ + "Zu Beginn des nächsten Zuges nimmt die Seherin #yZorn an." + ] + }, + "downfall:NeowBlasphemersDemise": { + "NAME": "Verderben der Gotteslästerer", + "DESCRIPTIONS": [ + "Beim nächsten Buff erhält Niau zusätzlich #b10 #yStärke, es sei denn, die verliert noch #b", + " TP.", + "Niau ist angeschlagen und erhält keine zusätzliche #yStärke beim nächsten Buff." + ] + }, + "downfall:WatcherDivinityPower": { + "NAME": "Flüchtiger Glaube", + "DESCRIPTIONS": [ + "Immer wenn du eine Karte spielst, erhält die Seherin #b1 #yMantra. NL Wenn die Seherin #yGöttlichkeit annimmt, erhält sie #b3 #yStärke. NL Zu Beginn ihres Zuges verliert die Seherin #b5 #yMantra. NL Die Seherin verlässt #yGöttlichkeit nicht am Ende ihres Zuges." + ] + }, + "downfall:SimpleWatcherDivinityPower": { + "NAME": "Flüchtiger Glaube", + "DESCRIPTIONS": [ + "Wenn du innerhalb eines Zuges mindestens #b6 Karten spielst, erhält die Seherin #b1 #yMantra und #b1 #yImmateriell [REMOVE_SPACE].", + " NL Du hast in diesem Zug bereits #b", + " Karten gespielt.", + " NL (Wurde in diesem Zug bereits aktiviert)", + " NL NL Die Seherin verlässt #yGöttlichkeit nicht am Ende ihres Zuges. In #yGöttlichkeit wird nur 100% zusätzlicher Schaden zugefügt." + ] + }, + "downfall:NeowFleetingFaith": { + "NAME": "Flüchtiger Glaube", + "DESCRIPTIONS": [ + "Immer wenn du eine Karte spielst, erhält Niau #b1 #yMantra [REMOVE_SPACE]. Niau verliert #b5 #yMantra zu Beginn ihres Zuges." + ] + }, + "downfall:SilentShivTimeEaterPower": { + "NAME": "Sack voller Messer", + "DESCRIPTIONS": [ + "Wenn du das erste Mal im Zug eine Karte ausspielst, die #b2 oder mehr kostet, erhält die Stille 2 #yMesser [REMOVE_SPACE]." + ] + }, + "downfall:SilentDelayedWraithPower": { + "NAME": "Fatale Bessesenheit", + "DESCRIPTIONS": [ + "Wenn die Stille das erste Mal 0 TP erreicht, aktiviert sie #yGeistform", + " und heilt #b", + " TP." + ] + }, + "downfall:NeowBagOfKnives": { + "NAME": "Sack voller Messer", + "DESCRIPTIONS": [ + "Wenn du das erste Mal im Zug eine Karte ausspielst, die #b2 oder mehr kostet, erleide zweimal #b4 Schaden." + ] + }, + "downfall:SilentMirrorImagePower": { + "NAME": "Doppelt sehen", + "DESCRIPTIONS": [ + "Zu Beginn jedes Zuges verschleiert ein Trugbild die wahre Position der Stillen. Das Trugbild verschwindet, sobald die Stille oder das Trugbild angegriffen wird." + ] + }, + "downfall:NeowSeeingDouble": { + "NAME": "Doppelt sehen", + "DESCRIPTIONS": [ + "In jedem Zug erteilt der erste #yAngriff auf Niau #b0 Sachaden." + ] + }, + "downfall:SilentPoisonPower": { + "NAME": "Experimentelle Gifte", + "DESCRIPTIONS": [ + "#yGift ist blockbar, und der Schaden wird am Ende des Zuges erlitten.", + "#yGift ist blockbar, verliert seine Wirkung über die Zeit nicht, und der Schaden wird am Ende des Zuges erlitten." + ] + }, + "downfall:NeowHighlyToxic": { + "NAME": "Achtung: Äußerst toxisch", + "DESCRIPTIONS": [ + "Niau wendet in jedem Zug #b5 #yGift auf dich an. #yGift ist blockbar, und der Schaden wird am Ende des Zuges erlitten. NL Mische zu Beginn des Kampfes 2 #yGegengifte in deinen Nachziehstapel." + ] + }, + "downfall:DefectVoidPower": { + "NAME": "Energiedieb", + "DESCRIPTIONS": [ + "Immer wenn das Defekte eine #yLeere erschafft, landet sie stattdessen in DEINEN Abwurfstapel." + ] + }, + "downfall:NeowEnergyThief": { + "NAME": "Energiedieb", + "DESCRIPTIONS": [ + "Wenn Niau #rFlüche in deinen Nachziestapel legt, wird zusätzlich eine #yLeere hinzugefügt." + ] + }, + "downfall:DefectAncientConstructPower": { + "NAME": "Antikes Konstrukt", + "DESCRIPTIONS": [ + "Das Defekte beginnt den Kampf mit 2 #yBronzeorb Untertanen. NL Seine #yKraft #ydes #yKerns Karten #yerschöpfen nicht." + ] + }, + "downfall:NeowAncientConstruct": { + "NAME": "Antikes Konstrukt", + "DESCRIPTIONS": [ + "Wenn Niau am ende ihres Zuges kein #yArtefakt hat, erhält sie #b2 #yArtefakt [REMOVE_SPACE]." + ] + }, + "downfall:DefectCuriosity": { + "NAME": "Unverzerrter Fokus", + "DESCRIPTIONS": [ + "Immer wenn du eine #yMacht spielst, erhält das Defekte #b", + " #yFokus [REMOVE_SPACE].", + " Die #yStärke des Defekten beeinflusst auch sein #yFokus [REMOVE_SPACE]." + ] + }, + "downfall:DefectBiasCuriosity": { + "NAME": "Bias", + "DESCRIPTIONS": [ + "Das Defekte beginnt den Kampf mit #b4 #yFokus [REMOVE_SPACE], und erhält #b1 #yFokus [REMOVE_SPACE], immer wenn du eine #yMacht spielst. Zu Beginn seines Zuges verliert es #b1 #yFokus.", + "Das Defekte verliert #b", + " #yFokus", + " zu Beginn seines Zuges." + ] + }, + "downfall:DefectCuriosityLighning": { + "NAME": "Unverzerrter Fokus", + "DESCRIPTIONS": [ + "Immer wenn du eine #yMacht spielst, erschafft das Defekte #b", + " #yBlitz #yOrb [REMOVE_SPACE]." + ] + }, + "downfall:NeowUnbiasedCognition": { + "NAME": "Unverzerrter Fokus", + "DESCRIPTIONS": [ + "Immer wenn du eine #yMacht spielst, erhält Niau #b2 #yStärke [REMOVE_SPACE]." + ] + }, + "downfall:IroncladStatusPower": { + "NAME": "Synchronisieren", + "DESCRIPTIONS": [ + "Immer wenn der Eiserne eine #yStatus Karte erhält, wird eine Kopie in deinen Abwurfstapel gelegt.", + "Immer wenn der Eiserne eine #yStatus Karte erhält, wird eine Kopie in deinen Abwurfstapel gelegt. NL Wenn du noch #b", + " TP verlierst, erhältst du eine #yReinheit mit #yBehalten.", + "Immer wenn der Eiserne eine #yStatus Karte erhält, wird eine Kopie in deinen Nachziehstapel gemischt. NL Wenn du noch #b" + ] + }, + "downfall:NeowSyncronize": { + "NAME": "Synchronisieren", + "DESCRIPTIONS": [ + "Am Ende des Zuges legt Niau eine zufällige #yStatus Karte auf deinen Nachziehstapel." + ] + }, + "downfall:IroncladMushroomPower": { + "NAME": "Fressanfall", + "DESCRIPTIONS": [ + "#ySchnitter #yErschöpft nicht und trifft zusätzlich ALLE #yPilze. NL Wenn der Eiserne einen #yPilz tötet, erhält er #b1 #yStärke [REMOVE_SPACE].", + "#ySchnitter #yErschöpft nicht und trifft zusätzlich ALLE #yPilze. NL Wenn der Eiserne einen #yPilz tötet, erhält er #b", + " #yStärke [REMOVE_SPACE]." + ] + }, + "downfall:NeowFeedingFrenzy": { + "NAME": "Fressanfall", + "DESCRIPTIONS": [ + "Niau heilt ihre TP jedes Mal, wenn sie ungeblockten Angriffsschaden zufügt." + ] + }, + "downfall:IroncladFortificationPower": { + "NAME": "Bastion", + "DESCRIPTIONS": [ + "Der Eiserne beginnt den Kampf mit einer #yBefestigung als Untertan, der ihm in jedem Zug #b", + " #yBlock gibt. NL Wenn die #yBefestigung zerstört ist, verliert der Eiserne #yBarrikade, aber erhält #b5 #yStärke zu Beginn jedes Zuges.", + "Nach Zerstörung verliert der Eiserne #yBarrikade, aber erhält #b5 #yStärke zu Beginn jedes Zuges." + ] + }, + "downfall:NeowBastion": { + "NAME": "Bastion", + "DESCRIPTIONS": [ + "Niau beginnt den Kampf mit #yBarrikade und erhält #b10 #yBlock zu Beginn jedes Zuges." + ] + }, + "downfall:MerchantStrengthPower": { + "NAME": "Seelendieb", + "DESCRIPTIONS": [ + "Der Händler beginnt den Kampf mit dem Doppelten an #yStärke [REMOVE_SPACE], den er in diesem Run durch Seelenstehlen erhalten hat. Zusätzlich erhält er genauso viel #yGeschicklichkeit [REMOVE_SPACE]." + ] + }, + "downfall:NeowMantra": { + "NAME": "Mantra", + "DESCRIPTIONS": [ + "Wenn Niau #b10 #yMantra hat, nimmt sie #yGöttlichkeit an. Sie verursacht dann im folgenden Zug den dreifachen Schaden." + ] + }, + "downfall:NeowSeeingDoubleProduct": { + "NAME": "???", + "DESCRIPTIONS": [ + "Der nächste #yAngriff auf Niau verursacht #b0 Sachaden." + ] + }, + "downfall:CrowbotRitualPower": { + "NAME": "Umprogrammieren:Ritual", + "DESCRIPTIONS": [ + "Wenn #yCrowBot #b50% oder weniger seiner max. TP hat, verliert es #b3 TP und erhält #b", + " #yStärke am Ende seines Zuges." + ] + }, + "downfall:DamageMultiplier": { + "NAME": "Schadensmultiplikator", + "DESCRIPTIONS": [ + "#yAngriffe erteilen #b", + " Mal so viel Schaden." + ] + }, + "downfall:CompressionMold": { + "NAME": "Kompressionsform", + "DESCRIPTIONS": [ + "#yAbgefeuerte Munition wird im Anschluss verbessert." + ] + }, + "downfall:OnDeathEveryoneStr": { + "NAME": "Todesschrei: Entflammen+", + "DESCRIPTIONS": [ + "Wenn dieser Charakter stirbt, erhalten ALLE (inklusive dir) #b", + " #yStärke [REMOVE_SPACE]." + ] + }, + "downfall:OnDeathEveryoneThorns": { + "NAME": "Todesschrei: Krähenfüße+", + "DESCRIPTIONS": [ + "Wenn dieser Charakter stirbt, erhalten ALLE (inklusive dir) #b", + " #yStacheln [REMOVE_SPACE]." + ] + }, + "downfall:OnDeathEveryoneBuffer": { + "NAME": "Todesschrei: Puffer+", + "DESCRIPTIONS": [ + "Wenn dieser Charakter stirbt, erhalten ALLE (inklusive dir) #b", + " #yPuffer. (Puffer: Verhindert den nächsten TP-Verlust)" + ] + }, + "downfall:OnDeathEveryoneVigor": { + "NAME": "Todesschrei: Flammenkranz+", + "DESCRIPTIONS": [ + "Wenn dieser Charakter stirbt, erhalten ALLE (inklusive dir) #b", + " #yElan. (Elan: Erhöht den Schaden des nächsten Angriffs)" + ] + }, + "downfall:OnDeathEveryoneRuggedVuln": { + "NAME": "Todesschrei: Gestalt", + "DESCRIPTIONS": [ + "Wenn dieser Charakter stirbt, erhalten ALLE (inklusive dir) #b", + " #yRobust und #b", + " #yVerwundbar. (Robust: Reduziert den nächsten erhaltenen, ungeblockten Schaden zu #b2 [REMOVE_SPACE])" + ] + }, + "downfall:MonsterVigor": { + "NAME": "Elan", + "DESCRIPTIONS": [ + "Die nächste Attacke dieses Charakters verursacht #b", + " zusätzlichen Schaden." + ] + }, + "downfall:HermitConcentrateAdder": { + "NAME": "Tödlicher Fokus", + "DESCRIPTIONS": [ + "Der Einsiedler aktiviert seine #yVolltreffer Effekte nur solange er #yKonzentriert ist. Die #yKonzentration ist für diesen Zug verloren, wenn er #b10 TP verliert." + ] + }, + "downfall:HermitConcentrationPower": { + "NAME": "Konzentriert", + "DESCRIPTIONS": [ + "Der Einsiedler aktiviert seine #yVolltreffer Effekte nur solange er #yKonzentriert ist. Wenn er noch #b", + " TP verliert, verliert er seine #yKonzentration in diesem Zug.", + "Der Einsiedler ist nicht #yKonzentriert und kann seine #yVolltreffer Effekte in diesem Zug nicht aktivieren." + ] + }, + "downfall:TangerinePower": { + "NAME": "Hilfssheriff", + "DESCRIPTIONS": [ + "Wenn die Wachlaus stirbt, verliert der Einsiedler seine #yKonzentration in diesem Zug, und er erhält permanent #b", + " #yStärke.", + "Wenn die Wachlaus stirbt, verliert der Einsiedler seine #yKonzentration in diesem Zug." + ] + }, + "downfall:HermitWheelOfFortune": { + "NAME": "Schicksalsrad", + "DESCRIPTIONS": [ + "Wenn du einen #yAngriff spielst, #ytauscht der Einsiedler seine erste Karte #yum. Die Kosten seiner Karten können sich nicht verändern. Immer wenn er den #rNecronomischen #rFluch zieht, erhält er #b2 #yStärke [REMOVE_SPACE].", + "Wenn du einen #yAngriff spielst, #ytauscht der Einsiedler seine erste Karte #yum [REMOVE_SPACE]." + ] + }, + "downfall:HermitDoomsday": { + "NAME": "Tag des jüngsten Gerichts", + "DESCRIPTIONS": [ + "Der Einsideler beginnt den Kampf mit #b1 #yRitual [REMOVE_SPACE]. Immer wenn der Einsiedler #yFegefeuer spielt, wird ein #rDämmerungsdolch beschworen." + ] + }, + "downfall:NeowEclipse": { + "NAME": "Verhängnisvoll", + "DESCRIPTIONS": [ + "In jedem Zug gibt dir Niau ein #yflüchtiges #yDrohendes #Unheil auf die Hand." + ] + }, + "downfall:NeowWheelOfDeath": { + "NAME": "Unglücksrad", + "DESCRIPTIONS": [ + "Jedes Mal wenn du #b", + " Karten spielst, erhält Niau #b", + " #yStärke [REMOVE_SPACE]." + ] + }, + "downfall:NeowDistracting": { + "NAME": "Ablenkend", + "DESCRIPTIONS": [ + "Wenn du das erste Mal im Zug Niau Schaden durch einen #yAngriff zufügst, verlierst du #b1 [E] im nächsten Zug." + ] + }, + "downfall:NextTurnPowerPower": { + "NAME": "Nächster Zug: ", + "DESCRIPTIONS": [ + "BUG! You should not see this", + "Erhalte #b", + " #y", + " im nächsten Zug.", + "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": { + "NAME": "Unsterblich", + "DESCRIPTIONS": [ + "Niaus TP könne nicht unter #b1 fallen. Statt zu sterben heilt sie sich voll, und beginnt eine neue Phase." + ] + }, + "downfall:NeowDivinity": { + "NAME": "Göttlichkeit", + "DESCRIPTIONS": [ + "Niau erteilt in diesem Zug den dreifachen Sachaden." + ] + }, + "downfall:NeowSpirit": { + "NAME": "Geist der Helden", + "DESCRIPTIONS": [ + "Wenn Niau sich bufft erhält sie #b6 #yStärke und... ", + " NL #b1 Dämonenform. (#rDer #rEiserne [REMOVE_SPACE])", + " NL #b2 Stacheln. (#gDie #gStille [REMOVE_SPACE])", + " NL #b2 Puffer. (#bDas #bDefekte [REMOVE_SPACE])", + " NL #b5 Mantra. (#pDie #pSeherin [REMOVE_SPACE])", + " NL legt einen #yVerfall in deinen Nachziehstapel. (#yDer #yEinsiedler [REMOVE_SPACE])" + ] + }, + "downfall:HeartsFavorPower": { + "NAME": "Hilfe von Herzen", + "DESCRIPTIONS": [ + "Immer wenn Niaus #yUnverwundbar #b0 erreicht, reduziere ihren #yGöttin #ydes #yLebens Effekt um #b", + " [REMOVE_SPACE]." + ] + }, + "downfall:DefectAttackVoidPower":{ + "NAME": "Energiedieb", + "DESCRIPTIONS": [ + "Immer wenn du ungeblockten Angriffsschaden zufügst, lege eine #yLeere in den Abwurfstapel deines Gegners." + ] + }, + "downfall:WatcherTrackerAttacksPower":{ + "NAME": "Auge um Angriff", + "DESCRIPTIONS": [ + "Du hast bereits #b", + " Angriffe gespielt. Solange diese Zahl über die der nicht-Angriffe liegt, nimmt die Seherin #yZorn an." + ] + }, + "downfall:WatcherTrackerSkillsPower":{ + "NAME": "Freude an Fertigkeiten", + "DESCRIPTIONS": [ + "Du hast bereits #b", + " Angriffe gespielt. Solange diese Zahl mindestens so groß wie die der Angriffe ist, nimmt die Seherin #yRuhe an." + ] + }, + "downfall:VoidOrbPower":{ + "NAME": "Antikern", + "DESCRIPTIONS": [ + "Wenn der Antikern stirbt, heilt sie alle TP des Defekten und entfernt einen seiner #ySchatten Orbs.", + " Erhält 5 max. TP für jedes Mal, wenn dieser Effekt zum Einsatz kommt." + ] + } +} diff --git a/src/main/resources/downfallResources/localization/deu/RelicStrings.json b/src/main/resources/downfallResources/localization/deu/RelicStrings.json new file mode 100644 index 0000000000..cef208a4ad --- /dev/null +++ b/src/main/resources/downfallResources/localization/deu/RelicStrings.json @@ -0,0 +1,564 @@ +{ + "downfall:NeowBlessing": { + "NAME": "Niaus Segnung", + "FLAVOR": "Kühle deinen Zorn ab. Sei so taff und unnachgiebig wie es der Spire selbst ist.", + "DESCRIPTIONS": [ + "Der Boss hat mehr max. TP, kein Starter Relikt, zieht #b2 Karten weniger, und erhält #b1 ", + " weniger. NL Zu Beginn des Kampfes erhält der Boss einen einzigartigen Buff. Der Boss kann nicht #yBetäubt werden." + ] + }, + "downfall:NeowBlessing_Player": { + "NAME": "Niaus Segnung", + "FLAVOR": "Kühle deinen Zorn ab. Sei so taff und unnachgiebig wie es der Spire selbst ist.", + "DESCRIPTIONS": [ + "Erhöhe beim Aufheben deine max. TP um #b100. Erhöhe deine max. TP um #b100 wenn du einen neuen Akt erreichst. NL Verliere alle Trankslots. NL Ziehe #b1 Karte weniger und verliere [E] zu Beginn deines Zuges." + ] + }, + "downfall:CoffeeDripper": { + "DESCRIPTIONS": [ + " NL Der Boss beginnt mit weniger TP, da er nicht rasten konnte." + ] + }, + "downfall:BustedCrown": { + "DESCRIPTIONS": [ + " NL Der Boss hatte weniger Auswahl beim Zusammenstellen des Decks, was zu suboptimalen Synergien geführt hat." + ] + }, + "downfall:Girya": { + "DESCRIPTIONS": [ + " NL Der Boss beginnt mit weniger TP, da er mehr trainiert hat anstatt zu rasten." + ] + }, + "downfall:Matroyshka": { + "DESCRIPTIONS": [ + " NL Der Boss hat ", + " zusätzliche Relikte gefunden." + ] + }, + "downfall:Ectoplasm": { + "DESCRIPTIONS": [ + " NL Da der Boss kein Gold sammeln konnte hat er ", + " Karten weniger als gewöhnlich entfernt." + ] + }, + "downfall:BlackStar": { + "DESCRIPTIONS": [ + " NL Der Boss hat ", + " zusätzliche Relikte gefunden, aber beginnt mit weniger TP." + ] + }, + "downfall:MoltenEgg": { + "DESCRIPTIONS": [ + " NL Der Boss hat ", + " Angriffe durch dieses Relikt verbessert." + ] + }, + "downfall:ToxicEgg": { + "DESCRIPTIONS": [ + " NL Der Boss hat ", + " Fertigkeiten durch dieses Relikt verbessert." + ] + }, + "downfall:FrozenEgg": { + "DESCRIPTIONS": [ + "Der Boss hat viele verbesserte Mächte." + ] + }, + "downfall:Shovel": { + "DESCRIPTIONS": [ + " NL Der Boss hat ", + " zusätzliche Relikte gefunden, aber beginnt mit weniger TP, da er mehr gegraben hat anstatt zu rasten." + ] + }, + "downfall:CBRSerpentHead": { + "DESCRIPTIONS": [ + " NL Der Boss nutzte das zusätzliche Gold um 2 Karten aus dem Deck zu entfernen." + ] + }, + "downfall:CursedKey": { + "DESCRIPTIONS": [ + " NL Der Boss hat ", + " Flüche durch dieses Relikt erhalten." + ] + }, + "downfall:DreamCatcher": { + "DESCRIPTIONS": [ + " NL Der Boss hat zusätzliche Karten beim Rasten erhalten." + ] + }, + "downfall:PrayerWheel": { + "DESCRIPTIONS": [ + " NL Der Boss hat ", + " zusätzliche Karten durch dieses Relikt erhalten." + ] + }, + "downfall:PeacePipe": { + "DESCRIPTIONS": [ + " NL Der Boss hat ", + " zusätzliche Karten entfernt, aber beginnt mit weniger TP, da er mehr geraucht hat anstatt zu rasten." + ] + }, + "downfall:RunicDome": { + "DESCRIPTIONS": [ + " NL Der Boss spielt seine Karten nicht unbedingt in der idealen Reihenfolge." + ] + }, + "downfall:CentennialPuzzle": { + "DESCRIPTIONS": [ + " NL Kann nicht während des Zuges des Bosses aktiviert werden." + ] + }, + "downfall:CBRFaceOfCleric": { + "DESCRIPTIONS": [ + " max. TP wurden durch dieses Relikt erlangt." + ] + }, + "downfall:Omamori": { + "DESCRIPTIONS": [ + " NL Hat verhindert, dass der Boss diese Flüche erhält: " + ] + }, + "downfall:DollysMirror": { + "DESCRIPTIONS": [ + " NL Der Spiegel duplizierte " + ] + }, + "downfall:Vampires": { + "NAME": "Ereignis: Vampire (?)", + "FLAVOR": "Das Blut des Meisters... Das Blut des Meisters! DAS BLUT DES MEISTERS!", + "DESCRIPTIONS": [ + "Schläge wurden durch Bisse ersetzt. NL -", + " max. TP." + ] + }, + "downfall:BonfireSpirits": { + "NAME": "Ereignis: Geister des Lagerfeuers", + "FLAVOR": "Die Geister werfen kleine Knochen und Stückchen ins Feuer, das mit jedem Mal hell auflodert...", + "DESCRIPTIONS": [ + "Der Boss entfernte eine Karte um 10 max. TP zu erhalten." + ] + }, + "downfall:DesignerInSpire": { + "NAME": "Ereignis: Designer In-Spire", + "FLAVOR": "Das reicht nicht aus, nein nein. Was ist das für ein Stil? Scheußlich! Bluuuutest du etwa? Eeeklig.", + "DESCRIPTIONS": [ + "Eine Karte wurde entfernt, eine andere verbessert." + ] + }, + "downfall:DivineFountain": { + "NAME": "Ereignis: Der Göttliche Brunnen", + "FLAVOR": "Du kommst an einem glitzerndem Wasser vorbei, das endlos aus einem Brunnen auf einer nahen Mauer sprudelt.", + "DESCRIPTIONS": [ + " Flüche wurden vom Deck entfernt." + ] + }, + "downfall:Duplicator": { + "NAME": "Ereignis: Duplikator", + "FLAVOR": "Vor dir befindet sich ein dekorierter Altar, der einem uralten Wesen gewidmet ist.", + "DESCRIPTIONS": [ + "Eine starke Karte wurde dupliziert." + ] + }, + "downfall:BigFish": { + "NAME": "Ereignis: Großer Fang", + "FLAVOR": "Dein Weg führt dich durch einen langen Korridor, wo du eine Banane, einen Donut und eine Kiste herumschweben siehst.", + "DESCRIPTIONS": [ + "Der Donut wurde gewählt. NL +5 max. TP.", + "Die Kiste wurde gewählt. NL Ein Reue Fluch und ein Relikt wurden hinzugefügt." + ] + }, + "downfall:LivingWall": { + "NAME": "Ereignis: Lebendige Wand", + "FLAVOR": "Vergiss, was du weißt, und ich lasse dich gehen.", + "DESCRIPTIONS": [ + "Der Boss entfernte ", + "Der Boss verbesserte ", + "Der Boss transformierte ", + " zu " + ] + }, + "downfall:WheelOfChange": { + "NAME": "Ereignis: Glücksrad", + "FLAVOR": "Jetzt ist es Zeit, das Rad zu drehen! Bist du BEREIT? Natürlich bist du das!", + "DESCRIPTIONS": [ + "Das Glücksrad gab dem Boss ", + "Die TP des Bosses wurden komplett geheilt.", + "Das Glücksrad entfernte ", + " vom Deck des Bossed.", + "Das Glücksrad verursachte dem Boss Schaden." + ] + }, + "downfall:Falling": { + "NAME": "Ereignis: Freier Fall", + "FLAVOR": "Im freien Fall wägst du deine Optionen ab...", + "DESCRIPTIONS": [ + "Schlag wurde vom Deck entfernt." + ] + }, + "downfall:Augmenter": { + "NAME": "Ereignis: Erweiterer", + "FLAVOR": "Heda, Fremdling. Bist du interessiert, die Wissenschaft voranzubringen?", + "DESCRIPTIONS": [ + "Der Boss transformuerte 2 Karten", + "Der Boss erhielt J.A.X.", + "Der Boss erhielt die Mutagen-Kraft." + ] + }, + "downfall:AncientWriting": { + "NAME": "Ereignis: Uralte Inschrift", + "FLAVOR": "Auf einmal wird dir die Bedeutung klar...", + "DESCRIPTIONS": [ + "Der Boss hatte alle Schläge & Verteidigen verbessert." + ] + }, + "downfall:Bandits": { + "NAME": "Ereignis: Maskierte Banditen", + "FLAVOR": "Leg los, Bär!!", + "DESCRIPTIONS": [ + "Der Boss hat die Banditen besiegt und die Rote Maske erbeutet, beginnt aber mit weniger TP." + ] + }, + "downfall:WingStatue": { + "NAME": "Ereignis: Flügelstatue", + "FLAVOR": "Zwischen den Steinen und Brocken fällt dir eine aufwändige große blaue Statue auf, die einen Flügel darstellt.", + "DESCRIPTIONS": [ + " wurde vom Deck entfernt." + ] + }, + "downfall:Serpent": { + "NAME": "Ereignis: Die Ssssslange", + "FLAVOR": "Am erfülltesten ist das Leben, in dem du alles kaufen kannst! Stimmst du zu?", + "DESCRIPTIONS": [ + "Der Boss erhielt den Fluch Zweifel und nutzte das Gold um ein Relikt zu kaufen." + ] + }, + "downfall:Cleric": { + "NAME": "Ereignis: Der Priester", + "FLAVOR": "Hallo, mein Freund! Ich bin Priester! Bist du an meinen Diensten interessiert?!", + "DESCRIPTIONS": [ + "Eine Karte wurde vom Deck entfernt." + ] + }, + "downfall:OldBeggar": { + "NAME": "Ereignis: Alter Bettler", + "FLAVOR": "Hast du ein paar Münzen, mein Kind?", + "DESCRIPTIONS": [ + "Eine Karte wurde vom Deck entfernt." + ] + }, + "downfall:Library": { + "NAME": "Ereignis: Die Bibliothek", + "FLAVOR": "Du kommst an einem verzierten, anscheinend verlassenen Gebäude vorbei.", + "DESCRIPTIONS": [ + "Der Boss erhielt eine weitere Karte mit guter Synergie zum Deck." + ] + }, + "downfall:Mausoleum": { + "NAME": "Ereignis: Das Mausoleum", + "FLAVOR": "Du kannst die Inschrift auf dem Sarg nicht entziffern, bemerkst jedoch, wie schwarzer Nebel aus den Seiten strömt.", + "DESCRIPTIONS": [ + "Der Boss erhielt den Fluch Leid und ein zusätzliches Relikt." + ] + }, + "downfall:Nest": { + "NAME": "Ereignis: Das Nest", + "FLAVOR": "KRÄCHZ KRÄCHZ KRÄÄÄÄCHZZZ!!", + "DESCRIPTIONS": [ + "Der Boss erhielt einen Ritualdolch." + ] + }, + "downfall:Colosseum": { + "NAME": "Ereignis: Das Kolosseum", + "FLAVOR": "WIR BEGINNEN NUN DEN KAMPF!!!!", + "DESCRIPTIONS": [ + "Der Boss besiegte die Champions und erhielt zwei zusätzliche Relikte." + ] + }, + "downfall:PleadingVagrant": { + "NAME": "Ereignis: Flehender Landstreicher", + "FLAVOR": "Hast du was für mich, mein Freund? Bitte... ein paar Münzen vielleicht?", + "DESCRIPTIONS": [ + "Der Boss hat den Landstreicher ausgeraubt, und erhielt den Fluch Scham und " + ] + }, + "downfall:Mushroom": { + "NAME": "Ereignis: Pilze", + "FLAVOR": "Du betrittst einen Korridor voller Pilzen in hypnotisierenden Farben.", + "DESCRIPTIONS": [ + "Der Boss heilte seine TP komplett und erhielt einen Parasiten.", + "Der Boss erhielt den Seltsamen Pilz, aber beginnt mit weniger TP." + ] + }, + "downfall:ShiningLight": { + "NAME": "Ereignis: Lichtschein", + "FLAVOR": "Du findest eine schimmernde Bündelung von Licht im Zentrum des Raumes.", + "DESCRIPTIONS": [ + "Der Boss verbesserte ", + " und ", + ", aber beginnt mit weniger TP." + ] + }, + "downfall:ScrapOoze": { + "NAME": "Ereignis: Schrottschlamm", + "FLAVOR": "Vor dir liegt eine schleimartige Kreatur, die mehr als genug Schrott gegessen hat.", + "DESCRIPTIONS": [ + "Der Boss erhielt ein zusätzliches Relikt." + ] + }, + "downfall:GoldenIdolEvent": { + "NAME": "Ereignis: Goldener Götze", + "FLAVOR": "Du findest ein unscheinbares Podest, auf dem friedlich ein glänzender goldener Götze ruht.", + "DESCRIPTIONS": [ + "Der Boss nahm den Goldenen Götzen und erhielt den Fluch Verletzung. Für das zusätzliche Gold kaufte er " + ] + }, + "downfall:FaceTrader": { + "NAME": "Ereignis: Gesichtshändler", + "FLAVOR": "Gesicht. Darf ich anfassen? Vielleicht tauschen?", + "DESCRIPTIONS": [ + "Der Boss erhielt ein zufälliges Gesicht Relikt." + ] + }, + "downfall:OminousForge": { + "NAME": "Ereignis: Verwunschene Schmiede", + "FLAVOR": "KLONK KLOOONK KLONK!", + "DESCRIPTIONS": [ + "Der Boss erhielt die Verformte Zange und den Fluch Schmerz." + ] + }, + "downfall:Purifier": { + "NAME": "Ereignis: Schrein der Reinigung", + "FLAVOR": "Vor dir befindet sich ein kunstvoller Schrein, der einem vergessenen Geist gewidmet ist.", + "DESCRIPTIONS": [ + " wurde vom Deck entfernt." + ] + }, + "downfall:MatchAndKeep": { + "NAME": "Ereignis: Finde die Paare!", + "FLAVOR": "Hier sind zwölf Karten! Finde Paare, um sie zu behalten! Fünf Versuche, aufgedeckt ist aufgedeckt. Bist du bereit? Los geht's!", + "DESCRIPTIONS": [ + "Der Boss erhielt eine mächtige Karte." + ] + }, + "downfall:Transmogrifier": { + "NAME": "Ereignis: Schrein der Verwandlung", + "FLAVOR": "Vor dir befindet sich ein kunstvoller Schrein, der einem vergessenen Geist gewidmet ist.", + "DESCRIPTIONS": [ + "Der Boss transformierte eine Starter Karte." + ] + }, + "downfall:TombRedMask": { + "NAME": "Ereignis: Grab des Herren der Roten Maske", + "FLAVOR": "Ein reichlich verziertes Grab ist auf der anderen Seite eines schwebenden Pfades zu sehen.", + "DESCRIPTIONS": [ + "Der Boss erhielt die Rote Maske." + ] + }, + "downfall:UpgradeShrine": { + "NAME": "Ereignis: Schrein der Verbesserung", + "FLAVOR": "Vor dir befindet sich ein kunstvoller Schrein, der einem vergessenen Geist gewidmet ist.", + "DESCRIPTIONS": [ + "Der Boss #yverbesserte eine Karte." + ] + }, + "downfall:WeMeetAgain": { + "NAME": "Ereignis: So sieht man sich wieder!", + "FLAVOR": "Ich bin's, Ranwid! Haste heute Sachen für mich dabei? Das übliche? So 'n Typ wie ich schafft's nicht alleine, weißte?", + "DESCRIPTIONS": [ + "Ranwid erhielt Gold für ein zusätzliches Relikt." + ] + }, + "downfall:GoldenShrine": { + "NAME": "Ereignis: Goldener Schrein", + "FLAVOR": "Vor dir befindet sich ein kunstvoller Schrein, der einem uralten Geist gewidmet ist.", + "DESCRIPTIONS": [ + "Der Boss erhielt den Fluch Reue und kaufte sich für das Gold " + ] + }, + "downfall:GremlinSack": { + "NAME": "Gremlin-Sack", + "FLAVOR": "Der kleine Gremlin und sein Bodyguard waren keine Gegner für dich.", + "DESCRIPTIONS": [ + "Erhalte beim Aufheben folgende Karten für dein Deck: NL ", + "Erhalte beim Aufheben #b6 Karten vom Gremlin-Memory für dein Deck.", + "#g(Starter) ", + "#g(Gewöhnlich) ", + "#b(Ungewöhnlich) ", + "#y(Selten) ", + "#b(Farblos) ", + "#r(Fluch) " + ] + }, + "downfall:GremlinWheel": { + "NAME": "Gremlin-Glücksrad", + "FLAVOR": "Niemand bekommt einen zweiten Versuch sagte er...", + "DESCRIPTIONS": [ + "Du kannst jetzt am Lagerfeuer das Glücksrad drehen. Das Einsammeln des Preises nutzt das Relikt ab.", + "Die Kraft dieses Reliktes ist schon aufgebraucht." + ] + }, + "downfall:CloakOfManyFaces": { + "NAME": "Umhang der Gesichter", + "FLAVOR": "Es waren Steve, und Bill, und Ian, und Fred, und John...", + "DESCRIPTIONS": [ + "Erhalte beim Aufheben #yKultisten-Kopfstück [REMOVE_SPACE], #yPriesters #yGesicht [REMOVE_SPACE], #yN'loths #yhungriges #yGesicht [REMOVE_SPACE], #yGremlin-Visage [REMOVE_SPACE], und #ySsslangenkopf [REMOVE_SPACE]." + ] + }, + "downfall:BrokenWingStatue": { + "NAME": "Zerbrochene Flügelstatue", + "FLAVOR": "Ein abgebrochener Brocken einer einst beeindruckenden Statue.", + "DESCRIPTIONS": [ + "Die Kultisten, die #yden #yErweckten anbeten, sind bestimmt daran interessiert...", + "Beim nächsten Kampf gegen Wesen der Kultisten-Gruppe werden sie dieses Relikt an sich nehmen und vom Kampf fliehen." + ] + }, + "downfall:ShatteredFragment": { + "NAME": "Scharfer Splitter", + "FLAVOR": "Einst eine zerbrochene Statue - nun eine improvisierte Waffe.", + "DESCRIPTIONS": [ + "Erhalte jedes Mal, wenn du in Elite- und Bosskämpfen eine #yMacht ausspielst, #b", + " #yStärke [REMOVE_SPACE]." + ] + }, + "downfall:RedIOU": { + "NAME": "Banditenvertrag", + "FLAVOR": "Das rote Banditentrio willigte ein, dir im Austausch für ein Souvenier zu helfen... aber eigentlich taten sie es im Austausch für ihr Leben.", + "DESCRIPTIONS": [ + "Die Rot Maskierten Banditen helfen dir zu Beginn des #bdritten Bosskampfes.", + "Es gibt Arbeit, Jungs!", + "~Leg~ ~los,~ ~Bär!!~", + "Unsere Schuld ist beglichen. NL Wir sind hier fertig.", + "Ein Hoch auf den neuen NL ~Herren~ ~der~ ~Roten~ ~Maske!~", + "Viel Erfolg, Boss!" + ] + }, + "downfall:RedIOUUpgrade": { + "NAME": "Banditenvertrag+", + "FLAVOR": "Das rote Banditentrio willigte ein, dir im Austausch für ein Souvenier zu helfen... nun tun sie es, weil du der neue Anführer bist.", + "DESCRIPTIONS": [ + "Die Rot Maskierten Banditen helfen dir zu Beginn des #bdritten Bosskampfes." + ] + }, + "downfall:KnowingSkull": { + "NAME": "Wissender Schädel", + "FLAVOR": "Leg mich wieder hin!", + "DESCRIPTIONS": [ + "Zu Beginn des Kampfes kannst du dir im Austausch gegen TP #yGold [REMOVE_SPACE], einen #yTrank [REMOVE_SPACE], oder eine #yfarblose #yKarte wünschen." + ] + }, + "downfall:HeartBlessingRed": { + "NAME": "Herz-Segnung Rubin", + "FLAVOR": "Das Herz ist stark.", + "DESCRIPTIONS": [ + "Beginne jeden Bosskampf mit #b1 #yStärke [REMOVE_SPACE]." + ] + }, + "downfall:HeartBlessingBlue": { + "NAME": "Herz-Segnung Saphir", + "FLAVOR": "Das Herz ist zufrieden.", + "DESCRIPTIONS": [ + "Heile zu Beginn von Bosskämpfen #b10 TP." + ] + }, + "downfall:HeartBlessingGreen": { + "NAME": "Herz-Segnung Smaragd", + "FLAVOR": "Das Herz ist alles.", + "DESCRIPTIONS": [ + "Beginne jeden Bosskampf mit #b1 #yGeschicklichkeit [REMOVE_SPACE]." + ] + }, + "downfall:BurdenOfKnowledge": { + "NAME": "Bürde des Wissens", + "FLAVOR": "Die Wahrheit tut weh.", + "DESCRIPTIONS": [ + "#rVerliere beim Aufheben #rALLE #rSegnungen #rdes #rHerzen und #b20 max. TP. #yVerbessere #rALLE Karten #rIMMER und #rÜBERALL [REMOVE_SPACE]. Beginne jeden Kampf mit #b2 weniger #yStärke und #yGeschicklichkeit [REMOVE_SPACE]." + ] + }, + "downfall:TeleportStone": { + "NAME": "Teleportstein", + "FLAVOR": "Niemals das Haus ohne Teleportstein verlassen!", + "DESCRIPTIONS": [ + "Anstelle des nächsten Raumes kannst du dich in einen beliebigen nicht-Boss Raum auf deinem Weg teleportieren.", + "", + "Die Kraft dieses Reliktes ist schon aufgebraucht." + ] + }, + "downfall:HeartsMalice": { + "NAME": "Des Herzen Bosheit", + "FLAVOR": "Das Herz schenkte dir Bosheit und Verdorbenheit.", + "DESCRIPTIONS": [ + "Die Gegner deiner #b3 nächsten Kämpfe fliehen vor Furcht.", + "Die Kraft dieses Reliktes ist schon aufgebraucht." + ] + }, + "downfall:Hecktoplasm": { + "NAME": "Hecktoplasma", + "FLAVOR": "Dieser Klumpen aus Schleim scheint mit der Kraft hunderter lebendiger Seelen zu pulsieren. Kein Wunder, dass den niemand wollte.", + "DESCRIPTIONS": [ + " NL Du kannst keine #ySeelen mehr erhalten. Erhalte in deinem Zug [E]. Das Zerbrechen der Schlüssel erfordert keine #ySeelen [REMOVE_SPACE].", + "Hecktoplasma" + ] + }, + "downfall:BlackCandle": { + "NAME": "Schwarze Kerze", + "FLAVOR": "Die Flamme scheint in der Dunkelheit sogar noch intensiver.", + "DESCRIPTIONS": [ + "#yUnspielbare #rFluchkarten können jetzt ausgespielt werden, und spielbare #rFlüche kosten #b0 [REMOVE_SPACE]. Spielst du einen #yUnspielbaren oder kostenreduzierten #rFluch aus, verliere #b1 TP und #yerschöpfe ihn.", + "Schwarze Kerze" + ] + }, + "downfall:replacements": { + "NAME": "", + "FLAVOR": "", + "DESCRIPTIONS": [ + "In Händler-, Elite- und Bosskämpfen, erhalte in deinem Zug [E].", + "Verfluchte Münze", + "Nur noch wenige wissen um den Wert dieser alten Münze bescheid...", + "MVB-Karte", + "Du bist wahrlich des Herzens MVB: Meist versorgender Boss.", + "Das Herz kennt keine Gnade und verdirbt sogar die Liebsten... unsere Haustiere.", + "Verdorbene Kurierin", + "Dem Herzen gehen nie mehr Karten, Relikte oder Tränke aus und seine Preise sind um #b20% gesenkt.", + "Kampf-Kartenbelohnungen enthalten jetzt auch farblose und andersfarbige Karten, inklusive Helden-Karten.", + "Du kannst keine #ySeelen mehr erhalten. Erhalte in deinem Zug [E]. Das Zerbrechen der Schlüssel erfordert keine #ySeelen [REMOVE_SPACE]." + ] + }, + "downfall:LizardTail": { + "NAME": "Super-Echsenschwanz", + "FLAVOR": "Ein falscher Schwanz, um Gegner während des Kampfes hereinzulegen.", + "DESCRIPTIONS": [ + "Anstatt zu sterben, heile #b100% deiner max. TP (funktioniert einmal)." + ] + }, + "downfall:TestRelic": { + "NAME": "VFX Tester", + "FLAVOR": "When it index oobs, you did it.", + "DESCRIPTIONS": [ + "#pRight #pClick: Play the next card." + ] + }, + "downfall:ExtraCursedKey": { + "NAME": "Entweihter Schlüssel", + "FLAVOR": "Wurde aus gutem Grund weggesperrt.", + "DESCRIPTIONS": [ + "Erhalte [E] , wenn du das erste Mal im Zug einen #rFluch ziehst. NL Immer wenn du eine Truhe (außer Bosstruhen) öffnest, nimm eine #rVerletzung [REMOVE_SPACE]." + ] + }, + "downfall:ExtraCursedBell": { + "NAME": "Entweihte Rufglocke", + "FLAVOR": "Du bildest dir ein sie zu hören, bist dir aber nicht sicher.", + "DESCRIPTIONS": [ + "Erhalte beim Aufheben einen besonderen #rFluch und #b3 gewöhnliche #yRelikte [REMOVE_SPACE].", + "Die Glocke schlägt...", + "Belohnungen überspringen", + "Schließen" + ] + }, + "downfall:BustedCrownGagText": { + "NAME": "Zerbrochene Krone", + "FLAVOR": "Nachahmung ist die aufrichtigste Form der Schmeichelei... oder doch nicht? Diese Krone sieht deiner nichtmal besonders ähnlich. Eigentlich ist sie eine Beleidigung.", + "DESCRIPTIONS": [ + "Bei Kartenbelohnungen hast du #b2 Karten weniger zur Auswahl. Erhalte in deinem Zug [E]." + ] + } +} \ No newline at end of file diff --git a/src/main/resources/downfallResources/localization/deu/RunModStrings.json b/src/main/resources/downfallResources/localization/deu/RunModStrings.json new file mode 100644 index 0000000000..4796bfda06 --- /dev/null +++ b/src/main/resources/downfallResources/localization/deu/RunModStrings.json @@ -0,0 +1,58 @@ +{ + "downfall:WorldOfGoo": { + "NAME": "Welt aus Glibber", + "DESCRIPTION": "Nimm einen Verschleimt Status in deinen Abwurfstapel immer wenn du ungeblockten Sachaden eleidest." + }, + "downfall:Hexed": { + "NAME": "Verhext", + "DESCRIPTION": "Beginne den Run mit einem Samthalsband. Jede karte, die zu ziehst, wird Flüchtig." + }, + "downfall:Improvised": { + "NAME": "Improvisiert", + "DESCRIPTION": "Beginne den Run mit 10 zufälligen Karten." + }, + "downfall:Jewelcrafting": { + "NAME": "Juwelen", + "DESCRIPTION": "Beginne den Run mit zwei Edelsteinketten und der Singenden Spitzhacke." + }, + "downfall:EvilRun": { + "NAME": "Böser Run", + "DESCRIPTION": "Aktiviert die Besonderheiten eines Boss Runs." + }, + "downfall:ExchangeController": { + "NAME": "Gesegnet", + "DESCRIPTION": "Beginne den Run mit Niaus Segnung." + }, + "downfall:Lament": { + "NAME": "Klage", + "DESCRIPTION": "Beginne den Run mit Niaus Klage." + }, + "downfall:ChampStances": { + "NAME": "Neuer Herausforderer", + "DESCRIPTION": "Beginne jeden Kampf in einer zufälligen Champ Haltung. Du erhältst einen Abschlusschlag. Alle Basis Karten aktivieren den Fertigkeitsbonus." + }, + "downfall:Enraging": { + "NAME": "Letztes Aufgebot", + "DESCRIPTION": "Alle Gegner erhalten Stärke und verlieren ihre Debuffs, sobald sie weniger als 50% ihrer max. TP übrig haben." + }, + "downfall:Analytical": { + "NAME": "Analytisch", + "DESCRIPTION": "Erhalte zu Beginn jedes Zuges eine zufällige Karte mit Kodieren. Sie erhält Flüchtig. Alle Basis Schlag und Verteidigen Karten erhalten Kodieren." + }, + "downfall:StatusAbuse": { + "NAME": "Auferlegt", + "DESCRIPTION": "Beginne den Run mit einer Improvisierten Batterie, Donus Dichtungen, Dekas Dichtungen, Verbandskasten, und einem Bronzenen Götzen. Alle anderen Relikte werden durch Reife ersetzt." + }, + "downfall:TooManyShivs": { + "NAME": "Zu viele Messer", + "DESCRIPTION": "Beginne den Run mit einem Samthalsband, Essenz der Leere, und 10 Messer." + }, + "downfall:Wizzardry": { + "NAME": "Zauberei", + "DESCRIPTION": "Beginne den Run mit einem Magierhut, einem Zauberstab, und einer verbesserten Zauberei Karte." + }, + "downfall:TransformRewards": { + "NAME": "Transformiert", + "DESCRIPTION": "Alle Kartenbelohnungen werden zu „Transformiere eine Karte“." + } +} \ No newline at end of file diff --git a/src/main/resources/downfallResources/localization/deu/UIStrings.json b/src/main/resources/downfallResources/localization/deu/UIStrings.json new file mode 100644 index 0000000000..2cae7fb157 --- /dev/null +++ b/src/main/resources/downfallResources/localization/deu/UIStrings.json @@ -0,0 +1,216 @@ +{ + "downfall:EvilMenuPanel": { + "TEXT": [ + "Downfall", + "Verteidige das Herz vor Eindringlingen, die „Slay the Spire“ im Sinn haben.", + "Wähle deinen Boss", + "Kampagne" + ] + }, + "downfall:SoulToGoldChanges": { + "TEXT": [ + "Seelen", + "Zeigt, wie viele Seelen du dir einverleibt hast. Seelen können beim Herz gegen Belohnungen eingetauscht werden.", + "Händler Status", + "TP", + "Tot!", + "Stärke", + "Gestohlene Seelen", + "Verderben" + ] + }, + "downfall:BustKeyButton": { + "TEXT": [ + "Rubin zerbrechen", + "Saphir zerbrechen", + "Smaragd zerbrechen", + "(Kleine Aktion) Für ", + " gewöhnlichen Karten zu erhalten.", + " ungewöhnlichen Karten zu erhalten.", + " seltenen Karten zu erhalten.", + "Schlüssel zerbrochen!", + "Erfordert ", + " Seelen.", + "(Kleine Aktion) Zerbreche den Schlüssel um ", + " Seelen: Wähle bis zu ", + " von ", + " Verbessere Belohnungen für weiteres Zerbrechen." + ] + }, + "downfall:WheelSpinButton": { + "TEXT": [ + "Glücksrad drehen", + "(Kleine Aktion) Glücksrad drehen.", + "Kann nicht erneut gedreht werden." + ] + }, + "downfall:AscensionText": { + "TEXT": [ + "19. Bosse erhalten ein zusätzliches Relikt.", + "20. Der Boss in Akt 3 hat einen Echsenschwanz der die TP komplett heilt.", + "Erhalte den Rubinschlüssel. Du kannst ihn später zerbrechen.", + "4. Bosse haben eine zusätzliche verbesserte Karte." + ] + }, + "downfall:ConfigMenuText": { + "TEXT": [ + "Aktiviere globale Downfall Relikte in Standard Runs.", + "Aktiviere globale Downfall Tränke in Standard Runs.", + "Aktiviere globale Downfall Ereignisse in Standard Runs.", + "Aktiviere Downfall Boss Karten in Standard Runs.", + "Erlaube Standard Charactere in Downfall Runs, und Bosse in Standard Runs.", + "Erlaube gemoddete Charactere in Downfall Runs.", + "Aktiviere Downfall Flüche in Standard Runs.", + "Standard Kartenlayout für Downfall Runs - Lagerfeuer vor dem Boss, nicht zu Beginn.", + "Schalte alle gesperrten Karten und Relikte für Downfall Charactere frei (erfordert Neustart)", + "Deaktiviere Champs Haltungs-Hilfe - für erfahrene Champions", + "Deaktiviere Karten anderer Mods für Snecko.", + "Deaktiviere Musik Überschreibungen (erfordert Neustart)", + "Schalte alle gesperrten Skins für Downfall Charactere frei", + "Ersetze Text für Eigenschaften in Karten durch ihre Symbole.", + "Das Zauberbuch hebt die nächste gerufene Karte hervor.", + "Deaktiviere Änderungen bei original Karten und Relikte durch Downfall (erfordert Neustart)", + "Aktiviere Legacy Downfall Bosse (pre-6.0)" + ] + }, + "downfall:EnergyPanelTip": { + "TEXT": [ + "Des Gegners aktuelle Menge an Energie. Man braucht Energie, um Karten auszuspielen." + ], + "EXTRA_TEXT": [ + "Energie" + ] + }, + "downfall:RemoveCardReward": { + "TEXT": [ + "Entferne eine Karte", + "Wähle eine Karte zum Entfernen" + ] + }, + "downfall:TransformCardReward": { + "TEXT": [ + "Transformiere eine Karte", + "Wähle eine Karte zum Transformieren" + ] + }, + "downfall:UpgradeCardReward": { + "TEXT": [ + "Verbessere eine Karte", + "Wähle eine Karte zum Verbessern" + ] + }, + "downfall:BossRelicReward": { + "TEXT": [ + "Wähle 1 vom 3 Boss Relikten.", + "Erhalte ein ", + ".", + "Wähle ein Relikt.. irgendwie" + ] + }, + "downfall:EtherealMod": { + "TEXT": [ + "Flüchtig. NL " + ] + }, + "downfall:JaxReward": { + "TEXT": [ + "Etwas JAX gefunden!" + ] + }, + "downfall:RareCardReward": { + "TEXT": [ + "Erhalte eine seltene Karte." + ] + }, + "downfall:OctoChoiceAction": { + "TEXT": [ + "Wähle eine Möglichkeit aus.", + "Das solltest du nicht sehen. Ups" + ] + }, + "downfall:BossCardReward": { + "TEXT": [ + "Erhalte eine Boss Karte", + "Wähle eine Karte." + ] + }, + "downfall:ColorfulCardReward": { + "TEXT": [ + "Erhalte eine ", + " Karte", + "Wähle eine Karte." + ] + }, + "downfall:ColorfulUncommonCardReward": { + "TEXT": [ + "Erhalte eine ", + " Karte", + "Wähle eine Karte." + ] + }, + "downfall:ColorfulRareCardReward": { + "TEXT": [ + "Erhalte eine ", + " Karte", + "Wähle eine Karte." + ] + }, + "downfall:DiceRollPotionReward": { + "TEXT": [ + "Erhalte eine verbesserte ", + " Karte", + "Wähle eine Karte." + ] + }, + "downfall:ColorfulPowersCardReward": { + "TEXT": [ + "Erhalte eine verbesserte Macht ", + " ", + "Wähle eine Karte." + ] + }, + "downfall:RunHistoryMonsterNames": { + "TEXT": [ + "Lebendige Wandgesichter", + "Der Eiserne", + "Die Stille", + "Das Defekte", + "Die Seherin", + "Händler", + "Der Einsiedler" + ] + }, + "downfall:WhaleHunter": { + "TEXT": [ + "Walfänger", + "Beende den Zyklus." + ] + }, + "downfall:Unfettered": { + "TEXT": [ + "Befreit", + "Gebrochenes Siegel erhalten." + ] + }, + "downfall:SingleCardViewPopup": { + "TEXT": [ + "Munition" + ] + }, + "downfall:MainMenuAd": { + "TEXT": [ + "Willst du mehr?", + "Weitere Mods, darunter", + "Downfall, sind verfügbar für ", + "original Slay the Spire auf", + "Steam Workshop.", + "Klick hier um mehr zu erfahren!" + ] + }, + "downfall:CantEscapeGauntlet": { + "TEXT": [ + "Es sind zu viele...." + ], + "Translator note": "This pops up when you try to escape the gauntlet fight, where there are more than 1 hero alive yet, so you are overwhelmed by number thus cant escape." + } +} diff --git a/src/main/resources/downfallResources/localization/deu/replacementStrings.json b/src/main/resources/downfallResources/localization/deu/replacementStrings.json new file mode 100644 index 0000000000..14e087ceed --- /dev/null +++ b/src/main/resources/downfallResources/localization/deu/replacementStrings.json @@ -0,0 +1,14 @@ +[ + { + "KEYS": [ + "Gold" + ], + "VALUE": "Seelen" + }, + { + "KEYS": [ + "gold" + ], + "VALUE": "seelen" + } +] \ No newline at end of file diff --git a/src/main/resources/downfallResources/localization/eng/CardStrings.json b/src/main/resources/downfallResources/localization/eng/CardStrings.json index 235dd5c81c..339f14ee6a 100644 --- a/src/main/resources/downfallResources/localization/eng/CardStrings.json +++ b/src/main/resources/downfallResources/localization/eng/CardStrings.json @@ -1,34 +1,115 @@ { "downfall:Aged": { "NAME": "Aged", - "DESCRIPTION": "Unplayable. Ethereal. NL At the end of your turn, add a *Void to the top of your draw pile." + "DESCRIPTION": "Unplayable. Ethereal. NL At the end of your turn, add a *Void to your discard pile." }, "downfall:Bewildered": { "NAME": "Bewildered", - "DESCRIPTION": "Unplayable. Ethereal. NL When drawn, sneckomod:Muddle your hand." + "DESCRIPTION": "When drawn, sneckomod:Muddle this card. NL Exhaust." }, "downfall:Icky": { "NAME": "Icky", - "DESCRIPTION": "Gain a *Slimed. NL Exhaust." + "DESCRIPTION": "Draw 1 less card next turn. NL Exhaust." }, "downfall:Haunted": { "NAME": "Haunted", - "DESCRIPTION": "Ethereal. Unplayable. NL Whenever another card is *Exhausted when this is in hand, take 2 damage." + "DESCRIPTION": "Ethereal. NL At the end of your turn, take !M! damage." }, "downfall:Malfunctioning": { "NAME": "Flawed", - "DESCRIPTION": "At the end of your turn, transform all cards in hand into random Status cards. NL Exhaust." + "DESCRIPTION": "At the end of your turn, add a *Wound to your discard pile. NL Exhaust." }, "downfall:Scatterbrained": { "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." }, "downfall:BossMaintenance": { "NAME": "Maintenance", - "DESCRIPTION": "*Strikes deal !M! more damage this combat. NL Gain !B! Dexterity. NL This costs 1 more this combat." + "DESCRIPTION": "*Strikes deal !M! more damage this combat. NL Gain !B! Dexterity." + }, + "downfall:CuriousRobot": { + "NAME": "Curious Robot", + "DESCRIPTION": "When your opponent plays a Power, gain 1 Focus. Your Strength affects your Focus." + }, + "downfall:Murderbot": { + "NAME": "Energy Thief", + "DESCRIPTION": "Whenever you deal unblocked attack damage, add a *Void to your opponent's discard pile." + }, + "downfall:Temptation": { + "NAME": "Temptation", + "DESCRIPTION": "Shuffle !M! random Powers into your opponent's draw pile." + }, + "downfall:BagOfKnives": { + "NAME": "Bag of Knives", + "DESCRIPTION": "The first time you play a card that costs 2 or more each turn, gain 2 *Shivs." + }, + "downfall:Hallunication": { + "NAME": "Hallucination", + "DESCRIPTION": "Hide your real location each turn. When you or the illusion are Attacked, the illusion fades." + }, + "downfall:NewToxins": { + "NAME": "New Toxins", + "DESCRIPTION": "Poison no longer decays, but is blockable and deals damage at the end of turn instead of the start." + }, + "downfall:FeedingFrenzy": { + "NAME": "Feeding Frenzy", + "DESCRIPTION": "*Reaper also targets ALL *Mushrooms. Gain 1 Strength when you kill your own *Mushroom." + }, + "downfall:StatusMirror": { + "NAME": "Magic Mirror", + "DESCRIPTION": "Status cards this character generates are added to you instead." + }, + "downfall:EyeForAnEye": { + "NAME": "Eye for an Eye", + "DESCRIPTION": "If your opponent has played more Attacks than non-Attacks, you are in Wrath. Else, you are in Calm." + }, + "downfall:TruePeace": { + "NAME": "True Peace", + "DESCRIPTION": "Do nothing. Wait for the inevitable end of all things." + }, + "downfall:EndIsNigh": { + "NAME": "End is Nigh", + "DESCRIPTION": "EVERYONE gains !M! Ritual." + }, + "downfall:FalseWorship": { + "NAME": "False Worship", + "DESCRIPTION": "Revive your Cultist if he is dead. Otherwise, he revives upon death, restoring 50% HP." + }, + "downfall:FleetingFaith": { + "NAME": "Spectral Presence", + "DESCRIPTION": "Add !M! *Haunted cards to your opponent's discard pile." + }, + "downfall:FaithRewarded": { + "NAME": "Faith Rewarded", + "DESCRIPTION": "If you enter Divinity, you can never leave it. Divinity's damage bonus is reduced to 200%." + }, + "downfall:Crusade": { + "NAME": "Crusade", + "DESCRIPTION": "Remove all Debuffs. NL Lose all Mantra. Heal !M! HP and gain 1 Strength for each Mantra lost." + }, + "downfall:Hyperfocused": { + "NAME": "Deadly Focus", + "DESCRIPTION": "Always gain *Dead *On effects. After receiving 10 damage, remove *Dead *On effects for that turn." + }, + "downfall:Arsenal": { + "NAME": "Living Arsenal", + "DESCRIPTION": "Summon a *Doomed *Dagger." + }, + "downfall:Steady": { + "NAME": "Steady", + "DESCRIPTION": "*Wrath now increases damage dealt and receive by 50% instead of 100%." + }, + "downfall:Revolver": { + "NAME": "Revolver", + "DESCRIPTION": "Future turns are dictated by the *Wheel *of *Fate. When attacked, the *Wheel advances one step." } } \ No newline at end of file diff --git a/src/main/resources/downfallResources/localization/eng/CharacterStrings.json b/src/main/resources/downfallResources/localization/eng/CharacterStrings.json index 4e022d69a1..002dce0915 100644 --- a/src/main/resources/downfallResources/localization/eng/CharacterStrings.json +++ b/src/main/resources/downfallResources/localization/eng/CharacterStrings.json @@ -39,6 +39,7 @@ }, "downfall:Unlock": { "TEXT": [ + " (Act 4 Wins do not count)", "This character is unlocked by completing a run with the Slime Boss.", "This character is unlocked by completing a run with the 2nd Villain character.", "This character is unlocked by completing a run with the Guardian.", @@ -49,10 +50,11 @@ "This character is unlocked by completing a run with the 5th Villain character.", "This character is unlocked by completing a run with the Automaton.", "This character is unlocked by completing a run with the 6th Villain character.", - "This character is unlocked by completing a run with the Gremlins.", - " (Act 4 Wins do not count)", + "This character is unlocked by completing a run with the Collector.", "This character is unlocked by completing a run with the 7th Villain character.", - "This character is unlocked by completing a run with the Collector." + "This character is unlocked by completing a run with the Awakened One.", + "This character is unlocked by completing a run with the 8th Villain character.", + "This character is unlocked by completing a run with the Gremlins." ] }, "downfall:HeartMerchant": { @@ -241,6 +243,16 @@ ], "TEXT": [ ] + }, + "downfall:CharBossSpeech": { + "NAMES": [ + "" + ], + "TEXT": [ + "No, that cannot be! We need more toxins...", + "Die, monster! You don't belong in this world!" + + ] } } \ No newline at end of file diff --git a/src/main/resources/downfallResources/localization/eng/EventStrings.json b/src/main/resources/downfallResources/localization/eng/EventStrings.json index 022c3d5787..9a0415563f 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]" ] }, @@ -223,7 +223,7 @@ "downfall:WorldOfGoop": { "NAME": "World of Goop", "DESCRIPTIONS": [ - "You fall into a puddle. NL @IT'S@ @MADE@ @OF@ #g@SLIME@ #g@GOOP!!@ NL You can feel goop in your ears, goop in your nose, goop everywhere. NL NL Climbing out, you notice that stuck to your body is a unique-looking #yyellow Slime creature. It appears to have been collecting #ySouls from unfortunate adventurers who fell into the puddle. How convenient.", + "You fall into a puddle. NL @IT'S@ @MADE@ @OF@ #g@SLIME@ #g@GOOP!!@ NL Climbing out, you notice that stuck to your body is a unique-looking #yyellow Slime creature. It appears to have been collecting #ySouls from unfortunate adventurers who fell into the puddle. How convenient.", "Not wanting to make this unfortunate puddle incident go without reward, you strike at the #yyellow slime creature. NL NL It @bursts@ instantly! NL NL You didn't think it possible, but you find yourself even more covered in goop than you were before.", "Brushing off the #yyellow slime, you continue on your journey, though still partially covered in goop. It certainly adds to your menacing aesthetic." ], @@ -331,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", @@ -339,7 +340,9 @@ " #gHP.", "[Locked] Requires ", " Souls.", - "[Leave]" + "[Leave]", + "[Leave] #rLose #r", + " #rHP." ] }, "downfall:Bandits": { @@ -471,7 +474,7 @@ "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. #rBecome #rBurdened.", + "[I am Complete] #gUpgrade #gall #gCards. #rYou #rcan #rno #rlonger #rheal.", "[Locked] Requires all 3 Heart Blessings.", "[Leave]", "[I am Complete] #gUpgrade #gall #gCards. #rBecome #rBurdened." @@ -557,7 +560,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.", @@ -620,8 +623,11 @@ "[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." + "[Desecrate] #gTransform #g2 #gcards. #rLose #r", + "[Desecrate] #gUpgrade #g2 #gcards. #rCursed #r- #rPain.", + " #rHP.", + "[Locked] - Not enough cards." + ] } } diff --git a/src/main/resources/downfallResources/localization/eng/MonsterStrings.json b/src/main/resources/downfallResources/localization/eng/MonsterStrings.json index 574e9a1cca..3cb489e975 100644 --- a/src/main/resources/downfallResources/localization/eng/MonsterStrings.json +++ b/src/main/resources/downfallResources/localization/eng/MonsterStrings.json @@ -88,5 +88,12 @@ "NAME": "Doomed Dagger", "DIALOG": [ ] + }, + "downfall:VoidCore": { + "MOVES": [ + ], + "NAME": "Void Core", + "DIALOG": [ + ] } } \ No newline at end of file diff --git a/src/main/resources/downfallResources/localization/eng/PowerStrings.json b/src/main/resources/downfallResources/localization/eng/PowerStrings.json index 12e2fab14e..f44653e276 100644 --- a/src/main/resources/downfallResources/localization/eng/PowerStrings.json +++ b/src/main/resources/downfallResources/localization/eng/PowerStrings.json @@ -6,6 +6,13 @@ "Ha! Fairy Potion, jerk!" ] }, + "downfall:CultistRevivePower": { + "NAME": "False Worship", + "DESCRIPTIONS": [ + "Heals to #b50% of Max HP instead of dying, removing this effect.", + "CAAAAWWWW!" + ] + }, "downfall:SoulSteal": { "NAME": "Soul Stealer", "DESCRIPTIONS": [ @@ -43,7 +50,10 @@ "downfall:SpotWeakness": { "NAME": "Spot Weakness", "DESCRIPTIONS": [ - "Every turn in which you play an attack card with this power active, this enemy gains #b"," #yStrength. Currently it will gain #b", " #yStrength [REMOVE_SPACE]." + "If you play an #yAttack this turn, enemy will gain #b", + " #yStrength.", + "You played an #yAttack this turn. The enemy will gain #b", + " #yStrength." ] }, "downfall:FearNoEvil": { @@ -54,9 +64,17 @@ ] }, "downfall:PoisonResist": { - "NAME": "Poison Resistance", + "NAME": "Can't Slow Down", "DESCRIPTIONS": [ - "#yPoison triggers at the end of your turn. NL At the end of your turn, spend all remaining [E] to remove 10 #yPoison per [E] spent." + "Whenever you deal unblocked #yAttack damage, remove #b", + " #yPoison." + ] + }, + "downfall:OnPlayerPoison": { + "NAME": "Poison", + "DESCRIPTIONS": [ + "At the end of your turn, take #b", + " damage." ] }, "downfall:NeowBuff": { @@ -66,9 +84,10 @@ ] }, "downfall:WatcherAngryPower": { - "NAME": "Unbridled Rage", + "NAME": "Steady", "DESCRIPTIONS": [ - "At the end of her turn, if Watcher is at or below #b50% HP, she enters #yWrath. NL Watcher's #yWrath increases damage dealt and received by #b50% instead of #b100% [REMOVE_SPACE]." + "At the end of her turn, if Watcher is at or below #b50% HP, she enters #yWrath. NL Watcher's #yWrath increases damage dealt and received by #b50% instead of #b100% [REMOVE_SPACE].", + "Watcher's #yWrath increases damage dealt and received by #b50% instead of #b100% [REMOVE_SPACE]." ] }, "downfall:NeowUnbridledRage": { @@ -88,9 +107,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 +134,17 @@ "downfall:WatcherDivinityPower": { "NAME": "Fleeting Faith", "DESCRIPTIONS": [ - "Watcher gains #b1 #yMantra whenever you play a card. NL Whenever Watcher enters #yDivinity, she gains #b3 #yStrength. NL Watcher loses #b4 #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:SimpleWatcherDivinityPower": { + "NAME": "Fleeting Faith", + "DESCRIPTIONS": [ + "Watcher gains #b1 #yMantra and #b1 #yIntangible after you play #b6 cards in a single turn.", + " NL You have played #b", + " cards this turn.", + " NL (Has triggered already this turn)", + " NL NL When Watcher enters Divinity, she will never leave it, but Divinity increases damage by only 200%." ] }, "downfall:NeowFleetingFaith": { @@ -125,6 +159,14 @@ "The first time you play a card that costs #b2 or more each turn, Silent gains 2 #yShivs [REMOVE_SPACE]." ] }, + "downfall:SilentDelayedWraithPower": { + "NAME": "Fatal Possession", + "DESCRIPTIONS": [ + "The first time Silent reaches 0 HP, she will activate #yWraith #yForm", + " and heal #b", + " HP." + ] + }, "downfall:NeowBagOfKnives": { "NAME": "Bag of Knives", "DESCRIPTIONS": [ @@ -144,9 +186,10 @@ ] }, "downfall:SilentPoisonPower": { - "NAME": "Warning: Highly Toxic", + "NAME": "New Toxins", "DESCRIPTIONS": [ - "#yPoison is blockable and deals damage at end of turn. NL Receive an #yAntidote at the start of combat." + "#yPoison is blockable and deals damage at end of turn.", + "#yPoison is blockable, does not decay, and deals damage at end of turn." ] }, "downfall:NeowHighlyToxic": { @@ -182,23 +225,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": "Corrected Cognitive", + "NAME": "Bias", "DESCRIPTIONS": [ - "Defect plays an #yUnbiased #yCognition at the start of combat. NL Whenever you play a #yPower card, Defect's #yBias loses efficacy this turn.", - "Whenever you play a #yPower card, Defect's #yBias loses efficacy this turn.", - "Defect's #yBias loses efficacy this turn.", - "Bias" + "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]." ] }, @@ -211,7 +255,10 @@ "downfall:IroncladStatusPower": { "NAME": "Synchronize", "DESCRIPTIONS": [ - "Whenever Ironclad generates a #yStatus card, a duplicate is added into your discard pile." + "Whenever Ironclad generates a #yStatus card, a duplicate is added into your discard pile.", + "Whenever Ironclad generates a #yStatus card, it enters your discard pile instead. NL After losing #b", + " more HP, you gain a #yPurity with #yRetain.", + "Whenever Ironclad generates a #yStatus card, it enters your draw pile instead. NL After losing #b" ] }, "downfall:NeowSyncronize": { @@ -223,7 +270,9 @@ "downfall:IroncladMushroomPower": { "NAME": "Feeding Frenzy", "DESCRIPTIONS": [ - "Ironclad's #yReaper does not #yExhaust and targets ALL Mushrooms. NL When Ironclad kills a Mushroom, he gains #b1 #yStrength [REMOVE_SPACE]." + "Ironclad's #yReaper does not #yExhaust and targets ALL Mushrooms. NL When Ironclad kills a Mushroom, he gains #b1 #yStrength [REMOVE_SPACE].", + "Ironclad's #yReaper targets ALL Mushrooms. NL When Ironclad kills a Mushroom, he gains #b", + " #yStrength [REMOVE_SPACE]." ] }, "downfall:NeowFeedingFrenzy": { @@ -236,7 +285,8 @@ "NAME": "Bastion", "DESCRIPTIONS": [ "Ironclad begins the fight with a #yFortification, which will grant him #b", - " #yBlock each turn. NL When the #yFortification has been destroyed, Ironclad loses #yBarricade, but gains #b5 #yStrength at the start of each turn." + " #yBlock each turn. NL When the #yFortification has been destroyed, Ironclad loses #yBarricade, but gains #b5 #yStrength at the start of each turn.", + "When destroyed, Ironclad loses #yBarricade, but gains #b5 #yStrength at the start of each turn." ] }, "downfall:NeowBastion": { @@ -248,7 +298,7 @@ "downfall:MerchantStrengthPower": { "NAME": "Soul Stealer", "DESCRIPTIONS": [ - "Merchant has double 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." ] }, "downfall:NeowMantra": { @@ -344,13 +394,15 @@ "NAME": "Deputy", "DESCRIPTIONS": [ "When Tangerine dies, Hermit's #yConcentration breaks and he gains #b", - " #yStrength." + " #yStrength.", + "When Tangerine dies, Hermit's #yConcentration breaks." ] }, "downfall:HermitWheelOfFortune": { - "NAME": "Wheel of Fortune", + "NAME": "Wheel of Fate", "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 #yStrength.", + "After you play an #yAttack, Hermit #yCycles his first card." ] }, "downfall:HermitDoomsday": { @@ -384,9 +436,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": { @@ -418,5 +471,32 @@ "Whenever Neow's #yInvincible reaches #b0 [REMOVE_SPACE], reduce her #yGod #yof #yLife by #b", " [REMOVE_SPACE]." ] + }, + "downfall:DefectAttackVoidPower":{ + "NAME": "Energy Thief", + "DESCRIPTIONS": [ + "Whenever you deal unblocked attack damage, add a Void to your opponent's discard pile." + ] + }, + "downfall:WatcherTrackerAttacksPower":{ + "NAME": "Eye for Attacks", + "DESCRIPTIONS": [ + "You have played #b", + " Attacks. While this number exceeds non-Attacks, Watcher is in #yWrath Stance." + ] + }, + "downfall:WatcherTrackerSkillsPower":{ + "NAME": "Eye for Skills", + "DESCRIPTIONS": [ + "You have played #b", + " non-Attacks. While this number exceeds or matches Attacks, Watcher is in #yCalm Stance." + ] + }, + "downfall:VoidOrbPower":{ + "NAME": "Void Core", + "DESCRIPTIONS": [ + "When killed, Void Core restores all HP and removes one #yDarkness Orb from Defect.", + " Gains 5 Max HP each time this occurs." + ] } } diff --git a/src/main/resources/downfallResources/localization/eng/RelicStrings.json b/src/main/resources/downfallResources/localization/eng/RelicStrings.json index cf8d796331..6f18b07477 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": [ - "During Elite and Boss combats, whenever you play a #yPower card, gain #b1 #yStrength [REMOVE_SPACE]." + "During Elite and Boss combats, whenever you play a #yPower [REMOVE_SPACE], gain #b", + " #yStrength [REMOVE_SPACE]." ] }, "downfall:RedIOU": { @@ -456,7 +457,7 @@ "NAME": "Sapphire Heart Blessing", "FLAVOR": "The heart is pleased.", "DESCRIPTIONS": [ - "Start Boss combats with #b10 #yTemporary #yHP [REMOVE_SPACE]." + "At the start of Boss combats, heal #b10 HP." ] }, "downfall:HeartBlessingGreen": { @@ -470,7 +471,7 @@ "NAME": "Burden of Knowledge", "FLAVOR": "The truth hurts.", "DESCRIPTIONS": [ - "Upon pickup, #rlose #rALL #rHeart #rBlessings and #b10 Max HP. Permanently #yUpgrade #rALL cards #rEVERYWHERE [REMOVE_SPACE]. Start combats with #b1 less #yStrength and #yDexterity [REMOVE_SPACE]." + "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": { @@ -494,7 +495,7 @@ "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" ] }, @@ -502,7 +503,7 @@ "NAME": "Black Candle", "FLAVOR": "The flame shines even brighter from within the darkness.", "DESCRIPTIONS": [ - "#yUnplayable #rCurse cards can now be played. Whenever you play an #yUnplayable #rCurse card, #yExhaust it and lose #b1 HP.", + "#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" ] }, diff --git a/src/main/resources/downfallResources/localization/eng/UIStrings.json b/src/main/resources/downfallResources/localization/eng/UIStrings.json index f7112a07f2..7b5322a930 100644 --- a/src/main/resources/downfallResources/localization/eng/UIStrings.json +++ b/src/main/resources/downfallResources/localization/eng/UIStrings.json @@ -24,14 +24,17 @@ "Break Ruby", "Break Sapphire", "Break Emerald", - "(Free Action) Spend 50 Souls: Destroy key to ", - "start Boss combats with 1 Strength.", - "start Boss combats with 10 Temporary HP.", - "start Boss combats with 1 Dexterity.", + "(Free Action) Spend ", + " Common cards to gain.", + " Uncommon cards to gain.", + " Rare cards to gain.", "Key shattered!", "Requires ", " Souls.", - "(Free Action) Destroy key to " + "(Free Action) Destroy key to ", + " Souls: Choose up to ", + " of ", + " Enhance future key breaks." ] }, "downfall:WheelSpinButton": { @@ -64,7 +67,10 @@ "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.", + "No Downfall adjustments to original cards & relics (requires game restart)", + "Use Legacy Downfall Bosses (pre-6.0)" ] }, "downfall:EnergyPanelTip": { diff --git a/src/main/resources/downfallResources/localization/fra/CardStrings.json b/src/main/resources/downfallResources/localization/fra/CardStrings.json index b6e7064a88..366f50293e 100644 --- a/src/main/resources/downfallResources/localization/fra/CardStrings.json +++ b/src/main/resources/downfallResources/localization/fra/CardStrings.json @@ -1,34 +1,115 @@ { "downfall:Aged": { "NAME": "Vieillesse", - "DESCRIPTION": "Injouable. Éthérée. NL À la fin de votre tour, ajoutez un Néant sur le haut de votre pioche." + "DESCRIPTION": "Injouable. Éthérée. NL À la fin de votre tour, ajoutez un *Néant dans votre défausse." }, "downfall:Bewildered": { "NAME": "Perplexité", - "DESCRIPTION": "Quand vous jouez une autre carte que celle ci, sneckomod:Confondez votre main, puis défaussez ceci. NL Épuisement." + "DESCRIPTION": "Quand cette carte est piochée, sneckomod:Confondez-la. NL Épuisement." }, "downfall:Icky": { "NAME": "Dégoût", - "DESCRIPTION": "Ajouté un Englué dans votre main. NL Épuisement." + "DESCRIPTION": "Piochez 1 carte de moins au prochain tour. NL Épuisement." }, "downfall:Haunted": { "NAME": "Hantise", - "DESCRIPTION": "Éthérée. Injouable. NL Quand cette carte est piochée, ajoutez Ethérée à toutes les cartes de votre main." + "DESCRIPTION": "Éthérée. NL À la fin du tour, subissez !M! dégâts." }, "downfall:Malfunctioning": { "NAME": "Vicié", - "DESCRIPTION": "À la fin de votre tour, transformez toutes les cartes de votre main en carte Statut aléatoires. NL Épuisement." + "DESCRIPTION": "À la fin de votre tour, ajoutez une *Blessure dans votre défausse. NL Épuisement." }, "downfall:Scatterbrained": { "NAME": "Écervellé", "DESCRIPTION": "Injouable. NL Quand cette carte est piochée, si c'est votre tour, remplissez votre main avec des gremlin:Échos de cette carte." }, + "downfall:CurseOfBlood": { + "NAME": "Hémophilie", + "DESCRIPTION": "Perdez [E] au début de votre prochain tour. NL Épuisement.", + "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": "Tuez tous les Champignons. Soignez vous autant de leurs PV restants. NL Invoquez deux Champignons." }, "downfall:BossMaintenance": { "NAME": "Entretien", - "DESCRIPTION": "Vos *Frappes infligent !M! dégâts supplémentaires ce combat. NL Gagnez !B! de Dexterité. NL Cette carte coûte 1 [E] de plus ce combat." + "DESCRIPTION": "Vos *Frappes infligent !M! dégâts supplémentaires ce combat. NL Gagnez !B! de Dextérité." + }, + "downfall:CuriousRobot": { + "NAME": "Robot Curieux", + "DESCRIPTION": "Lorsque votre adversaire joue un Pouvoir, gagnez 1 de Concentration. Votre Force affecte votre Concentration." + }, + "downfall:Murderbot": { + "NAME": "Voleur d'Énergie", + "DESCRIPTION": "Lorsque vous infligez des dégâts non-bloqués, ajoutez un *Néant dans la défausse de votre adversaire." + }, + "downfall:Temptation": { + "NAME": "Tentation", + "DESCRIPTION": "Mélangez !M! Pouvoirs aléatoires, dans la pioche de votre adversaire." + }, + "downfall:BagOfKnives": { + "NAME": "Sac de Couteaux", + "DESCRIPTION": "La première fois que vous jouez une carte qui coûte 2 [E] ou plus chaque tour, gagnez 2 *Surins." + }, + "downfall:Hallunication": { + "NAME": "Hallucination", + "DESCRIPTION": "Cachez votre véritable emplacement à chaque tour. Lorsque vous ou l'illusion êtes Attaqués, l'illusion disparaît." + }, + "downfall:NewToxins": { + "NAME": "Nouvelles Toxines", + "DESCRIPTION": "Le Poison ne se dissipe plus, mais peut être bloqué et inflige des dégâts à la fin du tour plutôt qu'au début." + }, + "downfall:FeedingFrenzy": { + "NAME": "Faim Frénétique", + "DESCRIPTION": "*Faucheuse cible également TOUS les *Champignons. Gagnez 1 de Force lorsque vous tuez votre propre *Champignon." + }, + "downfall:StatusMirror": { + "NAME": "Miroir magique", + "DESCRIPTION": "Les cartes Statut que ce personnage génère vous sont ajoutées à vous à la place." + }, + "downfall:EyeForAnEye": { + "NAME": "Œil pour Œil", + "DESCRIPTION": "Si votre adversaire a joué plus d'Attaques que d'autres cartes, vous entrez en Colère. Sinon, vous êtes en Calme." + }, + "downfall:TruePeace": { + "NAME": "Paix véritable", + "DESCRIPTION": "Ne faites rien. Attendez la fin inévitable de toutes choses." + }, + "downfall:EndIsNigh": { + "NAME": "Fin prochaine", + "DESCRIPTION": "TOUT LE MONDE gagne !M! de Rituel." + }, + "downfall:FalseWorship": { + "NAME": "Faux culte", + "DESCRIPTION": "Ressucitez votre Cultiste s'il est mort. Sinon, il ressucite lorsqu'il mourra avec 50% de ses PV Max." + }, + "downfall:FleetingFaith": { + "NAME": "Présence spectrale", + "DESCRIPTION": "Ajoutez !M! cartes *Hanté dans la défausse de votre adversaire." + }, + "downfall:FaithRewarded": { + "NAME": "Foi Récompensée", + "DESCRIPTION": "Lorsque vous entrez en Divinité, vous ne pouvez plus la quitter. Les dégâts bonus de la Divinité sont réduits à 200%." + }, + "downfall:Crusade": { + "NAME": "Croisade", + "DESCRIPTION": "Retirez tous les Débuffs. NL Perdez tout votre Mantra. soignez-vous de !M! PV et gagnez 1 de Force pour chaque Mantra perdu." + }, + "downfall:Hyperfocused": { + "NAME": "Focus mortel", + "DESCRIPTION": "Obtenez toujours vos effets *Dans *Le *Mille. Après avoir reçu 10 dégâts, perdez vos effets *Dans *Le *Mille pour ce tour." + }, + "downfall:Arsenal": { + "NAME": "Arsenal vivant", + "DESCRIPTION": "Invoquez une *Dague *Condamnée." + }, + "downfall:Steady": { + "NAME": "Stabilité", + "DESCRIPTION": "La *Colère augmente les dégâts infligés et reçus de 50% au lieu de 100%." + }, + "downfall:Revolver": { + "NAME": "Revolver", + "DESCRIPTION": "Les tours futurs seront dictées par la *Roue *de *la *Destinée. Lorsqu'elle est attaquée, la *Roue avance d'une étape." } -} \ No newline at end of file +} diff --git a/src/main/resources/downfallResources/localization/fra/CharacterStrings.json b/src/main/resources/downfallResources/localization/fra/CharacterStrings.json index 33f9c80753..95de7b6db8 100644 --- a/src/main/resources/downfallResources/localization/fra/CharacterStrings.json +++ b/src/main/resources/downfallResources/localization/fra/CharacterStrings.json @@ -39,6 +39,7 @@ }, "downfall:Unlock": { "TEXT": [ + " (Les victoires de l'Acte 4 ne comptent pas)", "Ce personnage se déverouille en complétant une run avec le Parrain Slime.", "Ce personnage se déverouille en complétant une run avec le 2ème vilain.", "Ce personnage se déverouille en complétant une run avec le Gardien.", @@ -49,10 +50,11 @@ "Ce personnage se déverouille en complétant une run avec le 5ème vilain.", "Ce personnage se déverouille en complétant une run avec l'Automate.", "Ce personnage se déverouille en complétant une run avec le 6ème vilain.", - "Ce personnage se déverouille en complétant une run avec les Diablotins.", - " (Les victoires de l'Acte 4 ne comptent pas)", - "This character is unlocked by completing a run with the 7th Villain character.", - "This character is unlocked by completing a run with Snecko." + "Ce personnage se déverouille en complétant une run avec le Collecteur.", + "Ce personnage se déverouille en complétant une run avec le 7ème vilain.", + "Ce personnage se déverouille en complétant une run avec l'Éveillé.", + "Ce personnage se déverouille en complétant une run avec le 8ème vilain.", + "Ce personnage se déverouille en complétant une run avec les Diablotins." ] }, "downfall:HeartMerchant": { @@ -173,9 +175,9 @@ "Division: Temporel" ], "TEXT": [ - "Perdez 3 PV. NL Gagnez 40 Âmes.", - "Perdez 1 PV. NL Ajoutez une carte Incolore aléatoire dans votre main.", - "Perdez 5 PV. NL Gagnez une potion aléatoire.", + "Perdez 3 PV. NL Obtenez 15 Âmes.", + "Perdez 3 PV. NL Ajoutez une carte Incolore aléatoire dans votre main.", + "Perdez 7 PV. NL Obtenez une potion aléatoire.", "Obtenez des cartes du Gardien expansioncontent:Boss.", "Obtenez des cartes de l'Hexaplasme expansioncontent:Boss.", "Obtenez des cartes du Parrain Slime expansioncontent:Boss.", @@ -197,9 +199,9 @@ "Divisez vous en slimeboundmod:Slime_Guerrier.", "Divisez vous en slimeboundmod:Slime_Bourbier.", "Divisez vous en slimeboundmod:Slime_Sangsue.", - "Perdez 3 PV. NL Obtenez 50 Âmes.", - "Perdez 1 PV. NL Ajoutez une carte Incolore Améliorée aléatoire dans votre main.", - "Perdez 2 PV. NL Obtenez une Potion aléatoire" + "Perdez 3 PV. NL Obtenez 20 Âmes.", + "Perdez 3 PV. NL Ajoutez une carte Incolore Améliorée aléatoire dans votre main.", + "Perdez 5 PV. NL Obtenez une Potion aléatoire" ] }, "downfall:lazyStorage": { @@ -241,6 +243,15 @@ ], "TEXT": [ ] + }, + "downfall:CharBossSpeech": { + "NAMES": [ + "" + ], + "TEXT": [ + "Non, ce n'est pas possible ! On a besoin de plus de toxines...", + "Meurs, monstre! Tu n'appartiens pas à ce monde !" + ] } -} \ No newline at end of file +} diff --git a/src/main/resources/downfallResources/localization/fra/EventStrings.json b/src/main/resources/downfallResources/localization/fra/EventStrings.json index 2a8c2acec3..7710d4610b 100644 --- a/src/main/resources/downfallResources/localization/fra/EventStrings.json +++ b/src/main/resources/downfallResources/localization/fra/EventStrings.json @@ -106,9 +106,9 @@ "Vous tendez la main pour #ptake... NL Les esprits @shriek,@ ~tourbillonne~ autour du vortex qui émerge de ta paume dans des tentatives inutiles de fuite. NL Bientôt, leurs esprits eux-mêmes ne sont rien de plus qu'un objet de votre collection." ], "OPTIONS": [ - "[Offrir] #rPerdez #r150 #rÂmes. #gGagnez #g10 #gPV #gMax.", + "[Offrir] #rPerdez #r150 #rÂmes. #gGagnez #g10 #gPV #gMax #get #gSoignez-vous entièrement.", "[Verrouillé] Requiert 150 Âmes.", - "[Offrir] #rPerdez #r150 #rÂmes. #gChaque #gDiablotin #gGagne #g2 #gPV #gMax.", + "[Offrir] #rPerdez #r150 #rÂmes. #gGagnez #g2 #gPV #gMax #get #Soignez #gchaque #gDiablotin #gentièrement.", "[Prendre]" ] }, @@ -214,15 +214,16 @@ "Vous la contournez, vous demandant ce qui aurait pu se passer." ], "OPTIONS": [ - "[Entrer] #gAméliorez #g3 #gcartes #galéatoires. #rDevenez #rMaudit #r- #rVicié.", + "[Entrer] #gAméliorez #g", "[Quitter]", - "[Améliorer] Requiert: des Cartes Améliorables" + "[Verrouillé] Requiert: des Cartes Améliorables", + " #gcartes #galéatoires. #rDevenez #rMaudit #r- #rVicié." ] }, "downfall:WorldOfGoop": { "NAME": "Monde visqueux", "DESCRIPTIONS": [ - "Vous tombez dans une flaque. NL @ELLE@ @EST@ @REMPLIE@ @D'UNE@ #g@SUBSTANCE@ #g@VISQUEUSE!!@ NL Vous pouvez la ressentir dans votre nez, vos oreilles, partout. NL NL En sortant, vous remarquez que, collé à votre corps, se trouve un Slime #yjaune d'apparence unique. On dirait qu'il a collecté des #yÂmes des malhereux aventuriers qui sont tombés dans la flaque. Quelle chance.", + "Vous tombez dans une flaque. NL @ELLE@ @EST@ @REMPLIE@ @D'UNE@ #g@SUBSTANCE@ #g@VISQUEUSE!!@ NL En sortant, vous remarquez que, collé à votre corps, se trouve un Slime #yjaune d'apparence unique. On dirait qu'il a collecté des #yÂmes des malhereux aventuriers qui sont tombés dans la flaque. Quelle chance.", "Ne voulant pas faire de cet incident de flaque sans récompense, vous frappez ce slime #yjaune. NL NL Il @éclate@ en morceaux! NL NL Vous ne pensez pas que c'était possible, mais vous vous trouvez encore plus couvert de cette matière visqueuse que vous ne l'étiez avant.", "Vous débarassant du slime #yjaune, vous continuez votre voyage, bien que vous soyez encore partiellement couvert de matière visqueuse. Cela ajoute certainement de l'esthétique menaçante." ], @@ -267,8 +268,9 @@ "OPTIONS": [ "[Détruire] #rPerdez #r", " #rPV. #gGagnez #gFragment #gaiguisé.", - "[Collecter] #gGagnez #gStatue #gailée #gbrisée.", - "[Quitter]" + "[Collecter] #rPerdez #r", + "[Quitter]", + " #rPV. #gGagnez #gStatue #gailée #gbrisée." ] }, "downfall:GoldenIdol": { @@ -308,7 +310,8 @@ "NAME": "Conseil des Fantômes ", "DESCRIPTIONS": [ "Alors que vous continuez votre descente, une #p~épaisse~ #p~fumée~ #p~noire~ commence à émaner du sol et des murs autour de vous, se regroupant en trois formes masquées qui commencent à parler. NL ~\"Un~ ~autre~ ~pantin~ #r~du~ #r~Cœur~ ~il~ ~me~ ~semble.\"~ NL #r@\"EN@ #r@EFFET!@ #r@IL@ #r@ENVOIE@ #r@TOUJOURS@ #r@LES@ #r@PIONS@ #r@LES@ #r@PLUS@ #r@FAIBLES!\"@ NL Vous remarquez un sourire surdimensionné alors que le troisième s'adresse à vous. NL \"Ignore les autres... Voudrais-tu goûter à notre #y~pouvoir?\"~ ", - "\"Une @offrande!@ Que c'est ~tentant...\"~ NL NL Alors que le fantôme parle, vous remarquez que la grande bouche s'ouvre de plus en plus. À l'intérieur de votre corps, vous sentez les #b~âmes~ récupérées des morts se faire aspirer dans l'énorme mâchoire du fantôme. Cela prend toute votre force pour ne pas être aspiré par celle-ci. NL NL Alors que vos forces commençaient à s'épuiser, le vortex s'arrête, et les esprits se confondent dans la brume. NL NL Vous reprenez votre route, vous sentant légèrement #bvide." + "\"Une @offrande!@ Que c'est ~tentant...\"~ NL NL Alors que le fantôme parle, vous remarquez que la grande bouche s'ouvre de plus en plus. À l'intérieur de votre corps, vous sentez les #b~âmes~ récupérées des morts se faire aspirer dans l'énorme mâchoire du fantôme. Cela prend toute votre force pour ne pas être aspiré par celle-ci. NL NL Alors que vos forces commençaient à s'épuiser, le vortex s'arrête, et les esprits se confondent dans la brume. NL NL Vous reprenez votre route, vous sentant légèrement #bvide.", + "Les #p~fantômes~ ricanent à votre approche. NL NL #r@\"AH!@ #r@NOTRE@ #r@BON@ #r@AMI@ #r@!@ NL Leurs #p~formes~ #p~gazeuses~ se répandent dans la pièce... NL NL \"Ici pour le ~travail,~ nous présumons ?\"" ], "OPTIONS": [ "[Offrir] #rPerdez #r", @@ -328,7 +331,8 @@ "NAME": "Autel oublié", "DESCRIPTIONS": [ "Face à la statue, vous canalisez votre énergie spirituelle. NL Alors que les #bâmes sont retirées de vous en tant qu'offrande à la déesse, les bras de la statue s'étendent et dégagent une #p~magie~ #p~noire~ apaisante. NL Tout devient sombre. NL Vous vous réveillez peu de temps après, vos plaies et vos blessures soudainement guéries.", - "Après avoir pris un moment à admirer le mal à l'intérieur de cette statue, vous repartez, traversant la Cité." + "Après avoir pris un moment à admirer le mal à l'intérieur de cette statue, vous repartez, traversant la Cité.", + "Vous décidez de partir sans faire d'offrande à la statue, mais vous ressentez une honte tenace de ne pas avoir fait d'offrande." ], "OPTIONS": [ "[Offrir des Âmes] #rPerdez #r", @@ -336,7 +340,9 @@ " #gPV.", "[Verrouillé] Requiert ", " Âmes.", - "[Quitter]" + "[Quitter]", + "[Quitter] #rPerdez #r", + " #rPV." ] }, "downfall:Bandits": { @@ -468,7 +474,7 @@ "OPTIONS": [ "[L'Écho] #rCombattez #rvous-même. #gObtenez #gune #gRelique #gRare.", "[La Gourmandise] #gGagnez #g999 #gÂmes. #rMaudit #r- #r2 #rNormalité.", - "[Le Complet] #gAméliorez #gtoutes #gvos #gCartes. #rPerdez #rtoutes #rles #rBénédictions #rdu #rCœur et #r10 #rPV #rMax.", + "[Le Complet] #gAméliorez #gtoutes #gvos #gCartes. #rVous #rne #rpouvez #rplus #rvous #rSoigner", "[Verrouillé] Requiert Les 3 Bénédictions du Cœur.", "[Quitter]", "[Le Complet] #gAméliorez #gtoutes #gvos #gCartes. #rPerdez #rtoutes #rles #rBénédictions #rdu #rCœur et #r2 #rPV #rMax.." @@ -546,7 +552,7 @@ "En remontant lentement les chemins tortueux, vous vous retrouvez dans les infâmes couloirs labyrinthiques de l'Au-Delà. Un être inférieur deviendrait fou à essayer de se diriger dans ces couloirs, mais pour vous, ils sont aussi familiers qu'un vieil ami. NL NL Les #p~voix~ qui vous #p~chuchotent~ à l'oreille vous facilitent la tâche alors que vous décidez quel chemin prendre." ], "OPTIONS": [ - "[Gauche] #gExplorez #gun #gEvènement.", + "[Gauche] #gExplorez #gun #gÉvènement.", "[Droite] #gCherchez #gla #gTrésorerie #gpour #gune #gRelique.", "[Tout droit] #gTraquez #gle #gMarchand." ] @@ -554,7 +560,7 @@ "downfall:Joust": { "NAME": "La joute", "DESCRIPTIONS": [ - "En traversant les grands bâtiments, vous arrivez devant un pont long et étroit et repérez deux chevaliers de chaque côté, se faisant face à face. Vous vous approchez et ils s'écartèrent, se regardant l'un l'autre. NL \"Un monstre ! Vous le combattez, si vous êtes si fort à tuer des choses!\" NL \"Non, vous, COMBATTEZ-le ! Vous connaissez mieux les monstres, avec ce ~chat~ ~démoniaque!~\" NL NL Ils ne veulent pas arrêter de se chamailler. Vous devez vous décider....", + "En traversant les grands bâtiments, vous arrivez devant un pont long et étroit et repérez deux chevaliers de chaque côté, se faisant face à face. Vous vous approchez et ils s'écartèrent, se regardant l'un l'autre. NL \"Un monstre ! Vous le combattez, si vous êtes si fort à tuer des choses!\" NL \"Non, vous, COMBATTEZ-le ! Vous connaissez mieux les monstres, avec ce ~chat~ démoniaque!\" NL NL Ils ne veulent pas arrêter de se chamailler. Vous devez vous décider....", "Ce chevalier était clairement plus fort que l'autre, et malgré vos efforts, vous vous faites battre. NL \"J'aurais aimé vous voir combattre cette bête!\" dit-il à l'autre chevalier alors qu'ils partent en se chamaillant..", "Vous évitez sans peine les attaques du chevalier et le #rtuez sans pitié, tout en aspirant ses #gâmes joyeusement. L'autre chevalier se met alors à crier et s'enfuit. Quel trouillard...", "Le chevalier trouillard vous donne quelques égratinures avec son épée, avant de s'enfuir en criant. L'autre chevalier le poursuit, énervé. Vous retournez à votre travail, irrité de cette situation.", @@ -614,10 +620,13 @@ "DESCRIPTIONS": [ "Vous seul devriez avoir ce pouvoir. Vous mettez en pièces l'autel. NL Un gémissement obscur vous entoure, et vous pouvez ressentir la #p~magie~ #p~maudite~ de l'Autel s'infiltrer dans votre corps." ], "OPTIONS": [ - "[Profaner] #gDupliquez #g2 #gcartes. #rMaudit #r- #rAléatoire.", - "[Profaner] #gRetirez #g3 #gcartes. #rMaudit #r- #rAléatoire.", - "[Profaner] #gTransformez #g3 #gcartes. #rMaudit #r- #rAléatoire.", - "[Profaner] #gAméliorez #g2 #gcartes. #rMaudit #r- #rAléatoire." + "[Profaner] #gDupliquez #g2 #gcartes. #rMaudit #r- #rVieilliesse.", + "[Profaner] #gRetirez #g2 #gcartes. #rPerdez #r", + " #rPV #rMax", + "[Profaner] #gTransformez #g2 #gcartes. #rPerdez #r", + "[Profaner] #gAméliorez #g2 #gcartes. #rMaudit #r- #rDouleur.", + " #rPV.", + "[Verrouillé] - Pas assez de cartes." ] } -} \ No newline at end of file +} diff --git a/src/main/resources/downfallResources/localization/fra/MonsterStrings.json b/src/main/resources/downfallResources/localization/fra/MonsterStrings.json index 7e04c62fe3..b59d6cfefa 100644 --- a/src/main/resources/downfallResources/localization/fra/MonsterStrings.json +++ b/src/main/resources/downfallResources/localization/fra/MonsterStrings.json @@ -88,5 +88,12 @@ "NAME": "Dague Maudite", "DIALOG": [ ] - } -} \ No newline at end of file + }, + "downfall:VoidCore": { + "MOVES": [ + ], + "NAME": "Noyau vide", + "DIALOG": [ + ] +} +} diff --git a/src/main/resources/downfallResources/localization/fra/PowerStrings.json b/src/main/resources/downfallResources/localization/fra/PowerStrings.json index cac6c654f4..a5252a34b6 100644 --- a/src/main/resources/downfallResources/localization/fra/PowerStrings.json +++ b/src/main/resources/downfallResources/localization/fra/PowerStrings.json @@ -6,6 +6,13 @@ "Ha! Potion féérique, idiot!" ] }, + "downfall:CultistRevivePower": { + "NAME": "Faux Culte", + "DESCRIPTIONS": [ + "Soigne #b50% de ses PV Max au lieu de mourir, retirant cet effet.", + "CAAAAWWWW!" + ] + }, "downfall:SoulSteal": { "NAME": "Voleur d'âmes", "DESCRIPTIONS": [ @@ -41,9 +48,12 @@ ] }, "downfall:SpotWeakness": { - "NAME": "Spot Weakness", + "NAME": "Repérer les faiblesses", "DESCRIPTIONS": [ - "Chaque tour que vous jouez une Attaque avec ce pouvoir actif, cet ennemi gagne #b", " de #yForce. Actuellement, il va gagner #b", " de #yForce." + "Si vous jouez une #yAttaque ce tour, l'ennemi gagnera #b", + " de #yForce.", + "Vous avez joué une Attaque ce tour. l'ennemi va gagner #b", + " de #yForce." ] }, "downfall:FearNoEvil": { @@ -54,9 +64,17 @@ ] }, "downfall:PoisonResist": { - "NAME": "Résistance au poison", + "NAME": "Impossible de ralentir", + "DESCRIPTIONS": [ + "Lorsque vous infligez des dégâts #yd'Attaque, perdez #b", + " de #yPoison." + ] + }, + "downfall:OnPlayerPoison": { + "NAME": "Poison", "DESCRIPTIONS": [ - "Le #yPoison se déclenche à la fin de votre tour. À la fin de votre tour, dépensez toutes les [E] restantes pour retirer 10 #yPoison par [E] dépensée." + "À la fin de votre tour, prenez #b", + " dégâts." ] }, "downfall:NeowBuff": { @@ -66,9 +84,10 @@ ] }, "downfall:WatcherAngryPower": { - "NAME": "Rage débridée", + "NAME": "Stabilité", "DESCRIPTIONS": [ - "À la fin du tour, si la Gardienne est à #b50% de ses PV ou moins, elle entre en #yColère. NL La #yColère de la Gardienne augmente les dégâts infligés et reçus de #b50% au lieu de #b100%." + "À la fin du tour, si la Gardienne est à #b50% de ses PV ou moins, elle entre en #yColère. NL La #yColère de la Gardienne augmente les dégâts infligés et reçus de #b50% au lieu de #b100%.", + "La #yColre de la Gardienne augmente les dégâts reçus et infligés de #b50% au lieu de #b100% [REMOVE_SPACE]." ] }, "downfall:NeowUnbridledRage": { @@ -88,15 +107,20 @@ "downfall:WatcherSkillPower": { "NAME": "En proie à la discorde", "DESCRIPTIONS": [ - "Chaque fois que vous jouez une compétence, la Gardienne gagne #b", - " temporary #yStrength.", - "Chaque fois que vous jouez une compétence, la Gardienne gagne #yTemporary #yStrength [REMOVE_SPACE]." + "Lorsque vous jouez une Attaque, la Gardienne gagne #b", + " de #yDextérité Temporaire, #b", + " de #yForce Temporaire quand vous jouez une #yCompétence, et #b", + " des deux quand vous jouez un #yPouvoir.", + "Si vous jouez plus de #b", + " cartes en un tour, la Gardienne retire TOUS ses débuffs.", + "Vous avez joué #b", + " cartes ce tour." ] }, "downfall:WrathNextTurnPower": { "NAME": "Colère au prochain tour", "DESCRIPTIONS": [ - "Au début de son tour, la Gardienne entrera en #yWrath [REMOVE_SPACE]." + "Au début de son tour, la Gardienne entrera en #yColère [REMOVE_SPACE]." ] }, "downfall:NeowBlasphemersDemise": { @@ -110,7 +134,17 @@ "downfall:WatcherDivinityPower": { "NAME": "Foi éphémère", "DESCRIPTIONS": [ - "La Gardienne gagne #b1 de Mantra lorsque vous jouez une carte. NL La Gardienne perd #b5 de Mantra au début de son tour. NL La Gardienne ne quitte pas sa position de Divinité à la fin de son tour." + "La Gardienne gagne #b1 de #yMantra lorsque vous jouez une carte. NL Lorsque la Gardienne entre en #yDivinité, elle gagne #b3 de #yForce. NL La Gardienne perd #b5 de #yMantra au début de son tour. NL La Gardienne ne quitte pas sa #yDivinité à la fin de son tour." + ] + }, + "downfall:SimpleWatcherDivinityPower": { + "NAME": "Foi éphémère", + "DESCRIPTIONS": [ + "La Gardienne gagne #b1 de Mantra et #b1 #yd'Intangibilité après que vous ayez joué #b6 cartes en un tour.", + " NL Vous avez joué #b", + " cartes ce tour.", + " NL (A déjà été déclenché ce tour)", + " NL NL Une fois que La Gardienne entre en Divinité, elle ne la quitte pas pour le reste du combat, mais la Divinité augmente les dégâts de 200% seulement." ] }, "downfall:NeowFleetingFaith": { @@ -125,6 +159,14 @@ "La première fois que vous jouez une carte qui coûte #b2 ou plus chaque tour, la Silencieuse gagne 2 #ySurins." ] }, + "downfall:SilentDelayedWraithPower": { + "NAME": "Possession fatale", + "DESCRIPTIONS": [ + "La première fois que la Silencieuse atteint 0 PV, elle activera #yForme #ySpectrale", + " et se soignera de #b", + " PV." + ] + }, "downfall:NeowBagOfKnives": { "NAME": "Sac de couteaux", "DESCRIPTIONS": [ @@ -144,9 +186,10 @@ ] }, "downfall:SilentPoisonPower": { - "NAME": "Attention: Hautement toxique", + "NAME": "Nouvelles Toxines", "DESCRIPTIONS": [ - "Le Poison peut être défendu et inflige des dégâts à la fin du tour. NL Recevez un #yAntidote au début de votre tour." + "Le #yPoison peut être bloqué et inflige des dégâts à la fin du tour.", + "Le #yPoison peut être bloqué, ne se dégrade pas, et inflige des dégâts à la fin du tour." ] }, "downfall:NeowHighlyToxic": { @@ -183,14 +226,24 @@ "NAME": "Cognition Impartiale", "DESCRIPTIONS": [ "Lorsque vous jouez une carte #yPouvoir, le Défectueux gagne #b", - " de #yConcentration." + " de #yConcentration [REMOVE_SPACE].", + " Les changements de la Force du Défecteux change également sa #yConcentration [REMOVE_SPACE]." + ] + }, + "downfall:DefectBiasCuriosity": { + "NAME": "Cognition corrigée", + "DESCRIPTIONS": [ + "Le Défectueux commence avec #b4 de #yConcentration et en gagne #b1 de plus lorsque vous jouez un #yPouvoir [REMOVE_SPACE], mais perd également #b1 de #yConcentration au début de leur tour.", + "Le Défectueux perd #b", + " de #yConcentration", + " à la fin de leur tour." ] }, "downfall:DefectCuriosityLighning": { - "NAME": "Cognition impartiale", + "NAME": "Biais", "DESCRIPTIONS": [ - "Chaque fois que vous jouez une carte #yPower, le Défectueux canalise #b", - " #yLightning #yOrb [REMOVE_SPACE]." + "Lorsque vous jouez un #yPouvoir [REMOVE_SPACE], le Défectueux canalise #b", + " #yOrbe #yKéraunique [REMOVE_SPACE]." ] }, "downfall:NeowUnbiasedCognition": { @@ -202,7 +255,10 @@ "downfall:IroncladStatusPower": { "NAME": "Synchronisation", "DESCRIPTIONS": [ - "Lorsque le Soldat de Fer génère une carte Statut, un doublon est ajouté dans votre défausse." + "Lorsque le Soldat de Fer génère une carte #yStatut, un doublon est ajouté dans votre défausse.", + "Lorsque le Soldat de Fer génère une carte #yStatut, elle entre dans votre défausse à la place. NL Après avoir perdu #b", + " PV de plus, vous obtenez une #yPureté avec #yRetenue.", + "Lorsque le Soldat de Fer génère une carte #yStatut, elle entre dans votre pioche à la place. NL Après avoir perdu #b" ] }, "downfall:NeowSyncronize": { @@ -214,7 +270,9 @@ "downfall:IroncladMushroomPower": { "NAME": "Faim Frénétique", "DESCRIPTIONS": [ - "La #yFaucheuse du Soldat de Fer ne #ys'Épuise pas et cible TOUS les Champignons. NL Quand le Soldat de Fer tue un Champignon, il gagne #b1 de #yForce." + "La #yFaucheuse du Soldat de Fer ne #ys'Épuise pas et cible TOUS les Champignons. NL Quand le Soldat de Fer tue un Champignon, il gagne #b1 de #yForce [REMOVE_SPACE].", + "La #yFaucheuse du Soldat de Fer cible TOUS les Champignons. NL Quand le Soldat de Fer tue un Champignon, il gagne #b", + " de #yForce [REMOVE_SPACE]." ] }, "downfall:NeowFeedingFrenzy": { @@ -227,7 +285,8 @@ "NAME": "Bastion", "DESCRIPTIONS": [ "Le Soldat de fer commence le combat avec une #yFortification, qui lui octroie #b", - " #yd'Armure chaque tour. NL Quand la #yFortification est détruite, le Soldat de Fer perd #yBarricade, mais gagne #b5 de #yForce par tour." + " #yd'Armure chaque tour. NL Quand la #yFortification est détruite, le Soldat de Fer perd #yBarricade, mais gagne #b5 de #yForce au début de chaque tour.", + "Quand détruite, le Soldat de Fer perd #yBarricade, mais gagne #b5 de #yForce au début de chaque tour." ] }, "downfall:NeowBastion": { @@ -239,7 +298,7 @@ "downfall:MerchantStrengthPower": { "NAME": "Voleur d'Âmes", "DESCRIPTIONS": [ - "Le Marchand a toujours la #yForce obtenue par ses vols d'Âmes durant cette run, et gagne de la Dextérité égale à sa Force." + "Le Marchand a le double de la #yForce obtenue par ses vols d'Âmes durant cette run, et gagne un montant égal de Dextérité." ] }, "downfall:NeowMantra": { @@ -255,7 +314,7 @@ ] }, "downfall:CrowbotRitualPower": { - "NAME": "Reprogrammer:Rituel", + "NAME": "Reprogrammer:Ritual", "DESCRIPTIONS": [ "Quand #yCrowBot est à #b50% de PV ou moins, il perd #b3 PV et gagne #b", " de #yForce à la fin de son tour." @@ -334,20 +393,22 @@ "downfall:TangerinePower": { "NAME": "Député", "DESCRIPTIONS": [ - "Quand Mandarine meurt, l'Ermite brise sa #yConcentration et gagnes #b", - " #yStrength." + "Quand Mandarine meurt, l'Ermite brise sa #yConcentration et gagne #b", + " de #yForce.", + "Quand Mandarine meurt, l'Ermite brise sa #yConcentration." ] }, "downfall:HermitWheelOfFortune": { - "NAME": "Roue de la Fortune", + "NAME": "Roue de la Destinée", "DESCRIPTIONS": [ - "Lorsque vous attaquez l'Ermite, sa carte la plus à gauche est défaussée et il pioche une carte." + "Lorsque vous jouez une Attaque, l'Ermite #yCycle sa première carte. Le coût des cartes de l'Ermite ne peut pas changer. Lorsque l'Ermite pioche #rMalédiction #rFatale, il gagne #b2 de #yForce.", + "Lorsque vous jouez une Attaque, l'Ermite #yCycle sa première carte." ] }, "downfall:HermitDoomsday": { "NAME": "Doomsday", "DESCRIPTIONS": [ - "Au début de votre tour, gagnez un #rDestin #rImminent avec #yRetenue." + "L'Ermite commence avec #b1 de Rituel [REMOVE_SPACE]. Lorsque l'Ermite joue #yPurgatoire [REMOVE_SPACE], il invoque une #rDague #rCondamnée [REMOVE_SPACE]." ] }, "downfall:NeowEclipse": { @@ -361,7 +422,7 @@ "DESCRIPTIONS": [ "Toutes les #b", " cartes que vous jouez, Neow gagne #b", - " de #yForce." + " de #yForce [REMOVE_SPACE]." ] }, "downfall:NeowDistracting": { @@ -376,8 +437,10 @@ "BUG! You should not see this", "Au prochain tour, gagnez #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": { @@ -404,10 +467,37 @@ ] }, "downfall:HeartsFavorPower": { - "NAME": "Faveur du coeur", + "NAME": "Faveur du Cœur", "DESCRIPTIONS": [ - "Chaque fois que #yInvincible de Neow atteint #b0 [REMOVE_SPACE], Réduit sa #yGod #yof #yLife de #b", + "Chaque fois que #yl'Invincibilité de Neow atteint #b0 [REMOVE_SPACE], réduisez sa compétence #yDieu #yde #yla #yVie de #b", " [REMOVE_SPACE]." ] + }, + "downfall:DefectAttackVoidPower":{ + "NAME": "Energy Thief", + "DESCRIPTIONS": [ + "Lorsque vous infligez des dégâts non-bloqués, ajoutez un Néant dans la défausse de l'adversaire." + ] + }, + "downfall:WatcherTrackerAttacksPower":{ + "NAME": "Œil pour les attaques", + "DESCRIPTIONS": [ + "Vous avez joué #b", + " Attaques. Lorsque ce nombre dépasse les non-Attaques, la Gardienne est en #yColère." + ] + }, + "downfall:WatcherTrackerSkillsPower":{ + "NAME": "Œil pour les Compétences", + "DESCRIPTIONS": [ + "Vous avez joué #b", + " non-Attaques. Lorsque ce nombre dépasse ou égale celui des Attaques, la Gardienne est en #yCalme." + ] + }, + "downfall:VoidOrbPower":{ + "NAME": "Void Core", + "DESCRIPTIONS": [ + "Quand tué, le Noyau Vide restaure tous ses PV et retire un Orbe #yObscur du Défectueux.", + " Gagne 5 PV max chaque fois que cela occure." + ] } } diff --git a/src/main/resources/downfallResources/localization/fra/RelicStrings.json b/src/main/resources/downfallResources/localization/fra/RelicStrings.json index 2dd35fdd47..c9d4c8057b 100644 --- a/src/main/resources/downfallResources/localization/fra/RelicStrings.json +++ b/src/main/resources/downfallResources/localization/fra/RelicStrings.json @@ -3,8 +3,8 @@ "NAME": "Bénédiction de Neow", "FLAVOR": "Apaisez votre rage. Soyez aussi rude et inflexible que la Tour elle-même.", "DESCRIPTIONS": [ - "Le Boss a augmenté ses PV Max, n'a pas de relique de starter, pioche 2 cartes de moins, et a 1 ", - " de moins . NL Au début du combat, le Boss gagne un effet de Buff unique." + "Le Boss a augmenté ses PV Max, n'a pas de relique de starter, pioche 2 cartes de moins, et a #b1 ", + " de moins . NL Au début du combat, le Boss gagne un effet de Buff unique. Ne peut pas être #yÉtourdi" ] }, "downfall:NeowBlessing_Player": { @@ -43,7 +43,7 @@ }, "downfall:BlackStar": { "DESCRIPTIONS": [ - " NL Boss a acquis ", + " NL Le Boss a acquis ", " reliques supplémentaires, mais commence avec moins de vie maximale." ] }, @@ -156,7 +156,7 @@ "NAME": "Évènement : Duplicateur", "FLAVOR": "Devant vous trône un autel décoré consacré à une divinité antique.", "DESCRIPTIONS": [ - "Boss duplicated a powerful card." + "Le Boss a dupliqué une carte puissante." ] }, "downfall:BigFish": { @@ -185,7 +185,7 @@ "Le Boss a été soigné au maximum.", "La Roue a retiré ", " du deck du Boss.", - "La roue a infligé des dégâts au Boss." + "La Roue a infligé des dégâts au Boss." ] }, "downfall:Falling": { @@ -213,7 +213,7 @@ }, "downfall:Bandits": { "NAME": "Évènement : Bandits", - "FLAVOR": "Get em Bear!", + "FLAVOR": "Vas-y Balourd!", "DESCRIPTIONS": [ "Le Boss a battu les Bandits, gagnant le Masque Rouge, mais commence avec moins de vie maximale." ] @@ -313,7 +313,7 @@ ] }, "downfall:FaceTrader": { - "NAME": "Évènement : Echangeur de visages", + "NAME": "Évènement : Échangeur de visages", "FLAVOR": "Visage. Laissez-moi toucher? Peut-être échanger?", "DESCRIPTIONS": [ "Le Boss a obtenu une relique de visage aléatoire." @@ -377,7 +377,7 @@ }, "downfall:GremlinSack": { "NAME": "Sac de diablotin", - "FLAVOR": "Le Gremlin et son garde du corps n'ont pas fait le poids face à vous.", + "FLAVOR": "Le Diablotin et son garde du corps n'ont pas fait le poids face à vous.", "DESCRIPTIONS": [ "Lorsque vous le ramassez, ajoutez les cartes suivantes dans votre deck: NL ", "Lorsque vous le ramassez, ajoutez 6 cartes du jeu des Paires à votre deck.", @@ -390,7 +390,7 @@ ] }, "downfall:GremlinWheel": { - "NAME": "Roue du changement", + "NAME": "Roue du Changement", "FLAVOR": "Il a dit : pas le droit à plusieurs essais.", "DESCRIPTIONS": [ "À chaque site de repos, vous pouvez tourner la roue une fois. Prendre cette option et collecter la récompense utilise la relique..", @@ -408,22 +408,24 @@ "NAME": "Statue ailée brisée", "FLAVOR": "Un morceau brisé d'une statue autrefois magnifique.", "DESCRIPTIONS": [ - "Les cultistes qui vénèrent l'Éveillé seront peut-être intéréssés par ceci...." + "Les cultistes qui vénèrent l'Éveillé seront peut-être intéréssés par ceci....", + "Au début de chaque combat, si les ennemis appartiennent au groupe des Cultistes, ils vous prendront cette relique et s'échapperont du combat." ] }, "downfall:ShatteredFragment": { "NAME": "Fragment aiguisé", "FLAVOR": "Une statue brisée autrefois - aujourd'hui une arme de fortune.", "DESCRIPTIONS": [ - "Au début de chaque tour, ajoutez un #ySurin #yde #ycristal à votre main." + "Pendant les combats d'Élites et de Boss, chaque fois que vous jouez une carte #yPouvoir [REMOVE_SPACE], gagnez #b", + " de #yForce [REMOVE_SPACE]." ] }, "downfall:RedIOU": { "NAME": "Contrat de bandit", "FLAVOR": "Un accord du trio de Bandits - en partie contre un bibelot, mais surtout en échange de leurs vies.", "DESCRIPTIONS": [ - "Au début du #b3ème combat de boss, les Bandits au Masque Rouge iront vous assister.", - "Il es temps de travailler, les gars!", + "Au début du #b3ème combat de boss, les Bandits au Masque Rouge viendront vous aider.", + "Au boulot, les gars!", "Vas-y Balourd!", "Un deal est un deal. NL On arrête ici.", "Vive le nouveau NL ~Seigneur~ ~au~ ~Masque~ ~Rouge!~", @@ -434,37 +436,44 @@ "NAME": "Contrat de Bandit+", "FLAVOR": "Un accord du trio de Bandits - en partie contre un bibelot, mais surtout en échange de leurs vies.", "DESCRIPTIONS": [ - "Au début du #b3ème combat de boss, les Bandits au Masque Rouge iront vous assister." + "Au début du #b3ème combat de boss, les Bandits au Masque Rouge viendront vous aider." ] }, "downfall:KnowingSkull": { "NAME": "Crâne savant", "FLAVOR": "Lâche-moi!", "DESCRIPTIONS": [ - "Au début de chaque combat vous pouvez faire le voeu d'avoir des Âmes, du Succès ou un Remontant. ." + "Au début de chaque combat vous pouvez faire le voeu d'avoir des Âmes, des Potions ou une carte Incolore au prix de vos PV." ] }, "downfall:HeartBlessingRed": { - "NAME": "Bénédiction de Rubis du Cœur", + "NAME": "Bénédiction du Cœur de Rubis", "FLAVOR": "Le Cœur est puissant.", "DESCRIPTIONS": [ "Durant les combats de Boss, gagnez #b1 de #yForce." ] }, "downfall:HeartBlessingBlue": { - "NAME": "Bénédiction de Saphir du Cœur", + "NAME": "Bénédiction du Cœur de Saphir", "FLAVOR": "Le Cœur est satisfait.", "DESCRIPTIONS": [ - "Durant les combats de Boss, gagnez #10 PV Temporaires." + "Au début des combats de Boss, soignez-vous de #b10 PV." ] }, "downfall:HeartBlessingGreen": { - "NAME": "Bénédiction d'Émeraude du Cœur", + "NAME": "Bénédiction du Cœur d'Émeraude", "FLAVOR": "Le Cœur est tout.", "DESCRIPTIONS": [ "Durant les combats de Boss, gagnez #b1 de #yDexterité." ] }, + "downfall:BurdenOfKnowledge": { + "NAME": "Fardeau du savoir", + "FLAVOR": "La vérité fait mal.", + "DESCRIPTIONS": [ + "Lorsque vous le ramassez, #rperdez #rTOUTES #rles #rBénédictions #rdu #rCœur et #b20 PV Max. #yAméliorez #yTOUTES #yvos #ycartes #rPARTOUT de façon permanente. Commencez les combats avec #b2 de #yForce en moins et #b2 de #yDextérité en moins." + ] + }, "downfall:TeleportStone": { "NAME": "Pierre de téléportation", "FLAVOR": "Ne quittez pas la maison sans elle.", @@ -486,14 +495,23 @@ "NAME": "Hecktoplasme", "FLAVOR": "Cette boule de slime semble déborder d'énergie de centaines d'âmes. Pas étonnant que personne n'en veut. ", "DESCRIPTIONS": [ - "Vous ne pouvez plus obtenir d'#yÂmes. Briser des clés ne coûte pas d'#yÂmes. Gagnez [E] au début de votre tour." + "Gagnez [E] au début de votre tour. Vous ne pouvez plus obtenir d'#yÂmes [REMOVE_SPACE]. Briser des clés ne coûte pas d'#yÂmes [REMOVE_SPACE].", + "Hecktoplasm" + ] + }, + "downfall:BlackCandle": { + "NAME": "Bougie noire", + "FLAVOR": "La flamme brille encore plus fort dans l'obscurité.", + "DESCRIPTIONS": [ + "Les #rMalédictions #yInjouables peuvent être jouées et les #rMalédictions jouables coûtent désormais #b0 [REMOVE_SPACE]. Lorsque vous jouez une carte #rMalédiction #yInjouable ou à prix réduit, #yÉpuisez-la et perdez #b1 PV.", + "Black Candle" ] }, "downfall:replacements": { "NAME": "", "FLAVOR": "", "DESCRIPTIONS": [ - "Durant les combats d'Elite, de Marchand et de Boss, gagnez [E] au déébut de votre tour.", + "Durant les combats d'Élite, de Marchand et de Boss, gagnez [E] au début de votre tour.", "Pièce maudite", "Peu de gens connaissent le véritable coût de cette pièce.", "Carte BPP", @@ -502,7 +520,7 @@ "Courrier corrompu", "Le Cœur réapprovisionne les cartes, reliques, et les potions. Tous les prix sont réduits de #b20%.", "Les récompenses de combat contiennent désormais des cartes Incolores et des cartes de la couleur des Héros.", - "Gagnez [E] au début de votre tour. Vous ne pouvez plus obtenir #yd'Âmes. Briser les clés ne coûte pas d'Âmes." + "Gagnez [E] au début de votre tour. Vous ne pouvez plus obtenir #yd'Âmes. Briser les clés ne coûte pas #yd'Âmes." ] }, "downfall:LizardTail": { @@ -535,5 +553,12 @@ "Passer les récompenses", "Fermer" ] + }, + "downfall:BustedCrownGagText": { + "NAME": "Couronne brisée", + "FLAVOR": "L'imitation est la forme la plus sincère de flatterie... ou pas ? Elle ne ressemble même pas à votre couronne. C'est même très insultant.", + "DESCRIPTIONS": [ + "Gagnez [E] au début de votre tour. Les prochaines récompenses de carte auront 2 choix de cartes en moins." + ] } } diff --git a/src/main/resources/downfallResources/localization/fra/RunModStrings.json b/src/main/resources/downfallResources/localization/fra/RunModStrings.json index 4a66ad8c36..40705a1a54 100644 --- a/src/main/resources/downfallResources/localization/fra/RunModStrings.json +++ b/src/main/resources/downfallResources/localization/fra/RunModStrings.json @@ -53,6 +53,6 @@ }, "downfall:TransformRewards": { "NAME": "Transformation", - "DESCRIPTION": "Toutes les récompenses de carte devienne \"Transform a card\"." + "DESCRIPTION": "Toutes les récompenses de carte devienne \"Transformez une carte\"." } -} \ No newline at end of file +} diff --git a/src/main/resources/downfallResources/localization/fra/UIStrings.json b/src/main/resources/downfallResources/localization/fra/UIStrings.json index 64b866eb75..c1c1516239 100644 --- a/src/main/resources/downfallResources/localization/fra/UIStrings.json +++ b/src/main/resources/downfallResources/localization/fra/UIStrings.json @@ -24,14 +24,17 @@ "Casser le Rubis", "Casser le Saphir", "Casser l'Émeraude", - "(Action Gratuite) Dépensez 50 Âmes : Détruisez la clé pour ", - "gagner 1 de Force durant les combats de Boss.", - "gagner 10 PV Temporaires durant les combats de Boss.", - "gagner 1 de Dextérité durant les combats de Boss.", + "(Action gratuite) Dépensez ", + " Communes à obtenir.", + " Peu Communes à obtenir.", + " Rares à obtenir.", "Clé détruite!", "Requiert ", " Âmes.", - "(Action gratuite) Détruisez la clé pour " + "(Action gratuite) Détruisez la clé pour ", + " Âmes: Choisissez jusqu'à ", + " cartes parmi ", + " Augmentez les destructions de clés futures." ] }, "downfall:WheelSpinButton": { @@ -64,7 +67,10 @@ "Prevent Snecko from using card pools from other mods.", "Désactive le remplacement de la musique (requiert un restart du jeu)", "Débloque tous les déguisements alternatifs des personnages Downfall", - "Utilisez des icônes au lieu de texte pour les propriétés appliquées." + "Utilisez des icônes au lieu de texte pour les propriétés appliquées.", + "Le grimoire met en évidence la prochaine carte que Conjure va piocher.", + "Aucun ajustement de Downfall pour les cartes et reliques originales (requiert un redémarrage du jeu)", + "Utilisez les Boss de Downfall Legacy (avant la 6.0)" ] }, "downfall:EnergyPanelTip": { @@ -135,9 +141,43 @@ "Choisissez une carte." ] }, + "downfall:ColorfulUncommonCardReward": { + "TEXT": [ + "Ajoutez une carte ", + " à votre deck", + "Choisissez une carte." + ] + }, + "downfall:ColorfulRareCardReward": { + "TEXT": [ + "Ajoutez une carte ", + " à votre deck", + "Choisissez une carte." + ] + }, + "downfall:DiceRollPotionReward": { + "TEXT": [ + "Ajoutez une carte Améliorée ", + " à votre deck", + "Choisissez une carte." + ] + }, + "downfall:ColorfulPowersCardReward": { + "TEXT": [ + "Ajoutez un Pouvoir Amélioré ", + " à votre deck", + "Choisissez une carte." + ] + }, "downfall:RunHistoryMonsterNames": { "TEXT": [ - "Têtes vivantes" + "Têtes vivantes", + "Le Soldat de Fer", + "La Silencieuse", + "Le Défectueux", + "The Watcher", + "Marchand", + "L'Ermite" ] }, "downfall:WhaleHunter": { @@ -145,6 +185,12 @@ "Chasseur de baleine", "Vous avez fini le cycle." ] + }, + "downfall:Unfettered": { + "TEXT": [ + "Sans entraves", + "Vous avez obtenu le Sceau Brisé." + ] }, "downfall:SingleCardViewPopup": { "TEXT": [ @@ -167,4 +213,4 @@ ], "Translator note": "This pops up when you try to escape the gauntlet fight, where there are more than 1 hero alive yet, so you are overwhelmed by number thus cant escape." } -} +} \ No newline at end of file diff --git a/src/main/resources/downfallResources/localization/jpn/CardStrings.json b/src/main/resources/downfallResources/localization/jpn/CardStrings.json index bec38337fa..e7f1d1e2bd 100644 --- a/src/main/resources/downfallResources/localization/jpn/CardStrings.json +++ b/src/main/resources/downfallResources/localization/jpn/CardStrings.json @@ -1,28 +1,33 @@ { "downfall:Aged": { "NAME": "加齢", - "DESCRIPTION": "使用不可 NL エセリアル NL ターン終了時、山札の上に *空虚 を追加する。" + "DESCRIPTION": "使用不可 NL エセリアル NL ターン終了時、捨て札に *空虚 を追加する。" }, "downfall:Bewildered": { "NAME": "困惑", - "DESCRIPTION": "使用不可 NL エセリアル NL このカードを引いた時、手札を sneckomod:泥まみれ にする。" + "DESCRIPTION": "このカードは引いた時、 sneckomod:泥まみれ になる。 NL 廃棄" }, "downfall:Icky": { "NAME": "粘液塗れ", - "DESCRIPTION": " *粘液 を手札に加える。 NL 廃棄" + "DESCRIPTION": "次のターン開始時にドローするカードが1枚減少する。 NL 廃棄" }, "downfall:Haunted": { "NAME": "幽霊", - "DESCRIPTION": "使用不可 NL エセリアル NL このカードが手札にあるとき、他のカードが *廃棄 されるたび、2ダメージを受ける。" + "DESCRIPTION": "使用不可 NL エセリアル NL ターン終了時に NL !M!ダメージを受ける。" }, "downfall:Malfunctioning": { "NAME": "不調", - "DESCRIPTION": "ターン終了時、手札を全てランダムな 状態異常 カードに変換する。 NL 廃棄" + "DESCRIPTION": "ターン終了時、捨て札に *負傷 を加える。 NL 廃棄" }, "downfall:Scatterbrained": { "NAME": "散漫", "DESCRIPTION": "ターン終了時にこのカードが手札にあった場合、捨札にこのカードのコピーを加える。 NL 廃棄" }, + "downfall:CurseOfBlood": { + "NAME": "血友病", + "DESCRIPTION": "次のターン開始時、 [E] を失う。 NL 廃棄", + "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": "菌類混入", "DESCRIPTION": "全てのマッシュルームを倒し、その残り HP と同じだけHPを回復する。 NL 2体のマッシュルームを呼び出す。" @@ -30,5 +35,81 @@ "downfall:BossMaintenance": { "NAME": "メンテナンス", "DESCRIPTION": "戦闘中 *ストライク のダメージが !M! 増加する。 NL 敏捷性 !B! を得る。 NL このカードのコストが1増加する。" + }, + "downfall:CuriousRobot": { + "NAME": "キュリオスロボット", + "DESCRIPTION": "相手がパワーを使用する度、集中 1 を得る。筋力がフォーカスに影響する。" + }, + "downfall:Murderbot": { + "NAME": "エナジーシーフ", + "DESCRIPTION": "アタックでブロックされなかったダメージを与える度、相手の捨て札に *空虚 を1つ加える。" + }, + "downfall:Temptation": { + "NAME": "誘惑", + "DESCRIPTION": "相手の山札に !M! 枚のランダムなパワーをシャッフルする。" + }, + "downfall:BagOfKnives": { + "NAME": "ナイフ袋", + "DESCRIPTION": "ターンごとに初めてコスト2以上のカードをプレイした時、*ナイフ を2枚手札に加える。" + }, + "downfall:Hallunication": { + "NAME": "幻覚", + "DESCRIPTION": "毎ターン、実際の位置を隠す。あなたか幻が攻撃された時、幻は消える。" + }, + "downfall:NewToxins": { + "NAME": "新毒", + "DESCRIPTION": "毒はもう減衰しないが、ブロック可能になり、ターン開始時ではなく終了時にダメージを与える。" + }, + "downfall:FeedingFrenzy": { + "NAME": "熱狂的な捕食", + "DESCRIPTION": "*死神 はすべての *キノコ を対象にする。自分の *キノコ を倒すと筋力1を得る。" + }, + "downfall:StatusMirror": { + "NAME": "マジックミラー", + "DESCRIPTION": "このキャラクターが生成する状態異常カードは代わりにあなたの山札に加わる。" + }, + "downfall:EyeForAnEye": { + "NAME": "目には目を", + "DESCRIPTION": "相手がアタックカードを非アタックカードより多くプレイしている場合、怒り状態になる。それ以外は平静状態。" + }, + "downfall:TruePeace": { + "NAME": "真の平穏", + "DESCRIPTION": "何もしない。全ての終わりを待つ。" + }, + "downfall:EndIsNigh": { + "NAME": "終末は近い", + "DESCRIPTION": "「全員」が 儀式 !M! を得る。" + }, + "downfall:FalseWorship": { + "NAME": "偽りの崇拝", + "DESCRIPTION": "狂信者が死亡している場合、復活させる。そうでなければ、死亡時に50%のHPで復活する。" + }, + "downfall:FleetingFaith": { + "NAME": "幽霊の存在", + "DESCRIPTION": "相手の捨て札に !M! 枚の *幽霊カード を加える。" + }, + "downfall:FaithRewarded": { + "NAME": "報われた信仰", + "DESCRIPTION": "神性スタンスに入った後、決して解除されない。ただしスタンスのダメージボーナスは200%に減少する。" + }, + "downfall:Crusade": { + "NAME": "十字軍", + "DESCRIPTION": "全てのデバフを除去する。 NL 全てのマントラを失う。失ったマントラ1つにつき、 HPを !M! 回復し 筋力 1 を得る。" + }, + "downfall:Hyperfocused": { + "NAME": "致命的集中", + "DESCRIPTION": "常に *デッド・オン の効果を発動する。 ターン中に 10のダメージを受けた場合、そのターンは *デッド・オン を解除する。" + }, + "downfall:Arsenal": { + "NAME": "生ける兵器庫", + "DESCRIPTION": "*ダガー を召喚する。" + }, + "downfall:Steady": { + "NAME": "安定", + "DESCRIPTION": "*憤怒 スタンスで与えるダメージと受けるダメージを50%増加に変更される。(以前は100%)" + }, + "downfall:Revolver": { + "NAME": "リボルバー", + "DESCRIPTION": "今後のターンは *運命の輪 によって決定される。攻撃された時、 *運命の輪 は1ステップ進む。" } } diff --git a/src/main/resources/downfallResources/localization/jpn/CharacterStrings.json b/src/main/resources/downfallResources/localization/jpn/CharacterStrings.json index 2852a97343..9734b12a71 100644 --- a/src/main/resources/downfallResources/localization/jpn/CharacterStrings.json +++ b/src/main/resources/downfallResources/localization/jpn/CharacterStrings.json @@ -39,6 +39,7 @@ }, "downfall:Unlock": { "TEXT": [ + " (Act 4 のクリアは関係しない)", "このキャラクターは以下のランを完了することでアンロックされる: スライムボス", "このキャラクターは以下のランを完了することでアンロックされる: 2人目の悪役キャラクター", "このキャラクターは以下のランを完了することでアンロックされる: ガーディアン", @@ -49,10 +50,11 @@ "このキャラクターは以下のランを完了することでアンロックされる: 5人目の悪役キャラクター", "このキャラクターは以下のランを完了することでアンロックされる: オートマトン", "このキャラクターは以下のランを完了することでアンロックされる: 6人目の悪役キャラクター", - "このキャラクターは以下のランを完了することでアンロックされる: グレムリン", - " (Act 4 のクリアは関係ない)", + "このキャラクターは以下のランを完了することでアンロックされる: コレクター", "このキャラクターは以下のランを完了することでアンロックされる: 7人目の悪役キャラクター", - "このキャラクターは以下のランを完了することでアンロックされる: スネッコ" + "このキャラクターは以下のランを完了することでアンロックされる: 目覚めし者", + "このキャラクターは以下のランを完了することでアンロックされる: 8人目の悪役キャラクター", + "このキャラクターは以下のランを完了することでアンロックされる: グレムリン" ] }, "downfall:HeartMerchant": { @@ -109,7 +111,7 @@ "..ああ...... そう... NL ....そうしよう......" ], "OPTIONS": [ - "~私が...~ NL ~彼を...~ ~連れ戻し...そして...ソウルを奪った...~", + "~私が...~ NL ~彼を...~ ~連れ戻した...~", "~私を守れ...~ NL ~そして受け取れ...褒美を...~" ] }, @@ -241,6 +243,16 @@ ], "TEXT": [ ] + }, + "downfall:CharBossSpeech": { + "NAMES": [ + "" + ], + "TEXT": [ + "馬鹿な! もっと毒が必要か...", + "死ね、化物! お前はこの世界に相応しくない!" + + ] } } \ No newline at end of file diff --git a/src/main/resources/downfallResources/localization/jpn/EventStrings.json b/src/main/resources/downfallResources/localization/jpn/EventStrings.json index 002d4e0be8..90e013cca2 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,16 +214,17 @@ "あなたは周りを歩き、何が起こるのだろうと考えた。" ], "OPTIONS": [ - "[入る] #gランダムなカード3枚をアップグレード。 #r呪い #r- #r不調。", + "[入る] ", "[立ち去る]", - "[Locked] 必要: アップグレードされていないカード" + "[Locked] 必要: アップグレードされていないカード", + " #g枚のランダムなカードをアップグレード。 #r呪い #r- #r不調" ] }, "downfall:WorldOfGoop": { "NAME": "一面の堆積物", "DESCRIPTIONS": [ - "あなたは汚水の水たまりに落ちた。 NL それは #g@スライム@ の #g@堆積物@ で出来ていた! NL 耳や鼻、堆積物は体中にまとわりついてくる。 NL NL 水から抜け出すと、 #y黄色いスライム というユニークな生き物が身体に張り付いているのに気付く。どうやら、水に落ちた冒険者から #yソウル を集めているようだ。なんて便利なんだ...。", - "この不愉快な水たまりから、せめてもの収穫を得るため #y黄色いスライム に襲い掛かった NL NL 瞬間、スライムは @破裂@ した! NL NL まさかとは思ったが、気が付いた時にはもう、全身が #r粘液塗れ になってしまっていた・・・。", + "あなたは汚水の水たまりに落ちた。 NL それは #g@スライム@ の #g@堆積物@ で出来ていた! NL NL 水から抜け出すと、 #yイエロースライム というユニークな生き物が身体に張り付いているのに気付く。どうやら、水に落ちた冒険者から #yソウル を集めているようだ。なんて便利なんだ...。", + "この不愉快な水たまりから、せめてもの収穫を得るため #yイエロースライム に襲い掛かった NL NL 瞬間、スライムは @破裂@ した! NL NL まさかとは思ったが、気が付いた時にはもう、全身が #r粘液塗れ になってしまっていた・・・。", "黄色いスライムを払い落とし、あなたはまだ部分的に粘液に覆われながらも旅を続ける。それは確かにあなたの威圧感を彩るに悪くはなかった。" ], "OPTIONS": [ @@ -246,7 +245,6 @@ "蛇はとてもがっかりした様子であなたを見つめた。", " NL NL 大蛇は頭をもたげ、恐ろしいほどの悲鳴を上げる。その体がぐったりして穴に落ちると、生き物の生命力が容易に収穫できるようになっていた。 NL NL 畏敬の念を抱かせるが、蛇は比喩的に言っているのだろうかと思わざるを得ない。おそらく、他者への暴力を援助し、奨励することを意図しているのだろうが、自分自身はそうではないのだろう....", "あなたが手を伸ばすと、大蛇は悲鳴を上げながら @後ずさる@ 。 ~「ハスススス...簒奪者!」~ NL NL ~「あなたの欲望は底が知れません!お願いでえぇぇぇす!見逃して下さあぁぁい...」~ NL あなたは彼の言葉など気にしない。彼の魂はあなたの物なのだ。" - ], "OPTIONS": [ "[同意] [殴る] #g入手:", @@ -268,11 +266,11 @@ "教団は喜ぶだろう。" ], "OPTIONS": [ - "[破壊] #r #r", - " #rHPを失う。 #g入手 #g鋭い破片", - "[収集] #r #r", + "[破壊] #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", @@ -334,7 +331,8 @@ "NAME": "忘れられた祭壇", "DESCRIPTIONS": [ "あなたは祭壇の前に立ち、身体の内にあるエネルギーを台座へと流す。 NL 女神への捧げものとしての #ソウル が届くと、像は腕を伸ばし #p~呪われた魔法~ をあなたへと放った。 NL -暗転- NL しばらくして目が覚めた時、あなたの身体から戦いでつけられた傷や怪我が消えていた。", - "この像に宿る邪悪な物にしばらく見とれた後、あなたは元の道へと戻った。" + "この像に宿る邪悪な物にしばらく見とれた後、あなたは元の道へと戻った。", + "捧げる物などありはしない。像を無視し立ち去ろうとする。しかし微かに #p後ろめたさ を感じてしまった" ], "OPTIONS": [ "[魂を捧げる] #r", @@ -342,7 +340,9 @@ " #gHP回復。", "[Locked] 必要 ", " ソウル。", - "[立ち去る]" + "[立ち去る]", + "[Leave] #rLose #r", + " #rHP." ] }, "downfall:Bandits": { @@ -405,7 +405,7 @@ "「聖職者だ助けてくれ! 聖職者を助けてくれ!」 その生物は恐怖に震えながらも、言葉を発することが出来るようになった。 NL 冷たく青い炎があなたの身体を包み、消滅した。 NL NL あなたは、この生物の力はあとで役に立つかもしれないし、また護衛を雇った所で簡単に切り伏せれると判断し、この「聖職者」とやらを生かしておいた。" ], "OPTIONS": [ - " #r呪い #r- #r傲慢", + " #r呪い #r- #rプライド", "[戦闘]", "[脅迫] #gデッキから2枚のカードを削除する。" ] @@ -436,7 +436,7 @@ "[像を返す] #r壊れた黄金の翼を失う。 #g入手: #g数多の報酬", "[Locked] 要求 : 壊れた黄金の翼。", "[受け入れる] #g入手: #g狂信者のポーション。", - "[盗む] #g入手: 装飾された短剣 #r", + "[盗む] #g入手:装飾された短剣 #r", " #rHPを失う。", "[立ち去る]", "[続行]", @@ -453,7 +453,7 @@ "この奴隷商人はあなたにとって脅威ではないし、獲物を弱らせるのに役立つかもしれない。 NL NL しかし、この血のスポーツは見過ごすにはあまりにも魅力的だ。", "巨大なスタジアムに足を踏み入れると、そこでは #bスレイバー や #p狂信者 など街の住民で溢れんばかりの観客が居た。 NL NL ", "@「強い奴を連れてこい!」@ あなたは観客に向かって叫び、チャンピオンへと宣戦を布告した。 NL 二人の挑戦者が近づいてくる。彼らはアリーナのルール上、あなたが誰であろうと手加減は出来ない、と警告してきた。", - "@「次は俺の番だ!」@ あなたが観客に向かって叫ぶと、観客は万雷の拍手と歓声でそれに応える。 NL NL 奴隷商人が最新の獲物を引きずり込むのに時間はかからなかった。無防備な挑戦者は ~朦朧~ としながらも目を覚まし、身支度を整えた。 NL NL これは楽しめそうだ。", + "@「次は俺の番だ!」@ あなたが叫ぶと、観客たちは怒号の様な拍手をもってそれに応える。 NL NL 奴隷商が次の獲物を見つけるのにはさして時間はかからなかった。待ち伏せられ捕らえられた何も知らない挑戦者は、グロッキーになりながらも目を覚まし獲物を構える。 NL NL これは楽しみだ・・・。", "魅力的ではあるが、ここで戦うのは時間の無駄だろう。旅を続け、奴隷商人達が待ち伏せを再開するのを見送った。" ], "OPTIONS": [ @@ -474,10 +474,10 @@ "OPTIONS": [ "[私は反響] #r自分自身との戦闘。 #g入手:レアレリック", "[私は満腹] #g入手: #g999 #gソウル #r呪い #r- #r2 #r凡庸", - "[私は完全] #g全カードをアップグレード。 #r重荷を背負う。", + "[私は完全] #g全カードをアップグレード。 #r今後HPを回復出来なくなる", "[Locked] 必要:3つの心臓の祝福。", "[立ち去る]", - "[私は完全] #g全カードをアップグレード。 #r重荷を背負う。" + "[私は完全] #g全カードをアップグレード。 #r負担を背負う。" ] }, "downfall:MoaiHead": { @@ -621,10 +621,13 @@ "この力は自分だけが持つべきだ。あなたは祠を粉々に砕く。 NL 周囲に暗い慟哭が響き渡り、あなたは祠の #p~呪いの魔法~ が骨身に染み渡るのを感じた。"], "OPTIONS": [ "[冒涜] #g2枚のカードを複製。 #r呪い #r- #r加齢", - "[冒涜] #g2枚のカードを削除。 #r最大HP #r", - " #r #rを失う。 ", - "[冒涜] #g3枚のカードを変換。 #r呪い #r- #r不調", - "[冒涜] #g2枚のカードをアップグレード。 #r呪い #r- #r痛み" + "[冒涜] #g2枚のカードを削除。 #r", + " #r最大HPを失う。", + "[冒涜] #g2枚のカードを変化。 #r失う #r-", + "[冒涜] #g2枚のカードをアップグレード。 #r呪い #r- #r痛み", + " #rHP.", + "[Locked] - 適したカードが無い。" + ] } } diff --git a/src/main/resources/downfallResources/localization/jpn/MonsterStrings.json b/src/main/resources/downfallResources/localization/jpn/MonsterStrings.json index 5707452e9f..108cba8bb0 100644 --- a/src/main/resources/downfallResources/localization/jpn/MonsterStrings.json +++ b/src/main/resources/downfallResources/localization/jpn/MonsterStrings.json @@ -88,5 +88,12 @@ "NAME": "ドゥームダガー", "DIALOG": [ ] + }, + "downfall:VoidCore": { + "MOVES": [ + ], + "NAME": "虚無の核", + "DIALOG": [ + ] } } \ No newline at end of file diff --git a/src/main/resources/downfallResources/localization/jpn/PowerStrings.json b/src/main/resources/downfallResources/localization/jpn/PowerStrings.json index dcadc7ecce..9b8a3a8351 100644 --- a/src/main/resources/downfallResources/localization/jpn/PowerStrings.json +++ b/src/main/resources/downfallResources/localization/jpn/PowerStrings.json @@ -2,11 +2,18 @@ "downfall:FairyPotion": { "NAME": "瓶詰の妖精", "DESCRIPTIONS": [ - "死亡時、代わりに最大HPの #b30% まで回復しこの無効化される。", + "死亡時、代わりに最大HPの #b30% まで回復しこの効果を失う。", "はっ!瓶詰の妖精だ!バカめ!" ] }, - "downfall:SoulSteal": { + "downfall:CultistRevivePower": { + "NAME": "偽りの崇拝", + "DESCRIPTIONS": [ + "死亡時最大HPの #b50% で復活し、この効果を失う。", + "カアアアアァァ!" + ] + }, + "downfall:SoulSteal": { "NAME": "ソウルスティーラー", "DESCRIPTIONS": [ "あなたのソウルを #b", @@ -43,20 +50,31 @@ "downfall:SpotWeakness": { "NAME": "弱点発見", "DESCRIPTIONS": [ - "この効果を受けた状態で アタック カードをプレイしたターン毎に、この敵は #b"," #y筋力 を得る。 現在 #b", " #y筋力 を得る。" - ] + "この効果を受けた状態で アタック カードをプレイしたターン毎に、この敵は #b", + " #y筋力 を得る。", + "このターン、あなたは #y攻撃 をプレイした。敵は #b", + " #y筋力 を得る。" + ] }, "downfall:FearNoEvil": { "NAME": "悪しきを恐れず", "DESCRIPTIONS": [ - "このターン、あなたが アタック カードをプレイした場合、この敵は #y悪しきを恐れず をプレイ後、 #y平静 の スタンス に変わる。", - "この敵は #y悪しきを恐れず をプレイ後、 #y平静 の スタンス に変わる。" + "このターン、あなたが アタック カードをプレイした場合、このウォッチャーは #y悪しきを恐れず をプレイ後、 #y平静 の スタンス に変わる。", + "ウォッチャーは #y悪しきを恐れず をプレイ後、 #y平静 の スタンス に変わる。" ] }, "downfall:PoisonResist": { - "NAME": "ポイズンレジスト", + "NAME": "減速不可能", "DESCRIPTIONS": [ - "あなたのターン終了時、 #y毒 が発動する。 NL ターン終了時、残りの [E] をすべて消費し、消費した [E] * 10 の #y毒 を除去する。" + "あなたが #yアタック でブロックされなかったダメージを与える度、 #b", + " #y毒 を除去する。" + ] + }, + "downfall:OnPlayerPoison": { + "NAME": "毒", + "DESCRIPTIONS": [ + "あなたはターン終了時 #b", + " ダメージを受ける。" ] }, "downfall:NeowBuff": { @@ -66,9 +84,10 @@ ] }, "downfall:WatcherAngryPower": { - "NAME": "抑えられぬ憤怒", + "NAME": "安定", "DESCRIPTIONS": [ - "ターン終了時、ウォッチャーのHPが #b50% 以下なら #y憤怒 の スタンス に入る。 NL ウォッチャーの #y憤怒 ではダメージが #b100% ではなく #b50% 増加する。" + "ターン終了時、ウォッチャーのHPが #b50% 以下の場合、彼女は #y憤怒 のスタンスに入る。 NL ウォッチャーの #y憤怒 は、与えるダメージと受けるダメージが #b100% ではなく #b50% 増加する。", +"ウォッチャーの #y憤怒 は、与えるダメージと受けるダメージが #b100% ではなく #b50% 増加する。" ] }, "downfall:NeowUnbridledRage": { @@ -81,16 +100,21 @@ "NAME": "神聖なる報復", "DESCRIPTIONS": [ "ウォッチャーは1ターンに3回まで、 #b", - " HPを失う度、このターンの間 #y筋力 を #b1 失う。 NL あなたは #yプレッシャー のダメージを #bブロック 出来る。", + " HPを失う度、 #y筋力 を #b1 失う。 NL あなたは #y点穴 のダメージを #bブロック 出来る。", "ウォッチャーはこのターン既に #y筋力 を #b3 失っている。" ] }, "downfall:WatcherSkillPower": { "NAME": "不調和の利用", "DESCRIPTIONS": [ - "あなたが スキル をプレイする度に ウォッチャーは 一時的な #y筋力 #b", - " を得る。", - "あなたが スキル をプレイする度に ウォッチャーは 一時的な #y筋力 を得る。" + "あなたが #yアタック をプレイする度、ウォッチャーは 一時的な #y敏捷性 #b", + " を得る。あなたが #yスキル をプレイする度、ウォッチャーは一時的な #y筋力 #b", + " を得る。あなたが #yパワー をプレイする度、ウォッチャーは両方を #b", + " 得る。", + "このターンにあなたが #b", + " 枚のカードをプレイした時、ウォッチャーは全てのデバフを解除する。", + "このターンあなたは #b", + " 枚のカードをプレイしている。" ] }, "downfall:WrathNextTurnPower": { @@ -110,7 +134,17 @@ "downfall:WatcherDivinityPower": { "NAME": "儚き信仰", "DESCRIPTIONS": [ - "ウォッチャーはあなたがカードをプレイする度に #yマントラ #b1 を得る。 NL ウォッチャーが #y神聖 のスタンス に入るたびに、 #y筋力 #b3 を得る。 NL ウォッチャーはターン開始時に #yマントラ #b4 を失う。 NL ウォッチャーはターン終了時に #y神聖 のスタンスを終了しない。" + "ウォッチャーはカードをプレイするたびに #b1 #yマントラ を得る。 NL ウォッチャーが #y神性スタンス に入るたびに #b3 #y筋力 を得る。 NL ウォッチャーはターン開始時に #b5 #yマントラ を失う。 NL ウォッチャーはターン終了時に #y神性スタンス を解除しない。" + ] + }, + "downfall:SimpleWatcherDivinityPower": { + "NAME": "儚き信仰", + "DESCRIPTIONS": [ + "あなたが1ターンに #b6 枚のカードをプレイした時、 ウォッチャーは #b1 #yマントラ と #b1 #y無形 を得る。", + " NL あなたはこのターン #b", + " 枚のカードをプレイしている。", + " NL (このターン、既に発動している。)", + " NL NL ウォッチャーが #y神聖スタンス に入った後解除される事は無いが、ダメージの上昇は200%だけ上昇する。" ] }, "downfall:NeowFleetingFaith": { @@ -125,6 +159,14 @@ "サイレントは毎ターン あなたが初めて コスト #b2 以上のカードをプレイした時、 2 枚の #yナイフ を手札に加える。" ] }, + "downfall:SilentDelayedWraithPower": { + "NAME": "フェイタル ポゼッション", + "DESCRIPTIONS": [ + "サイレントが初めてHP0になった時、 #y死霊化", + " を発動し、HPを #b", + " 回復する。" + ] + }, "downfall:NeowBagOfKnives": { "NAME": "ナイフの袋", "DESCRIPTIONS": [ @@ -144,9 +186,10 @@ ] }, "downfall:SilentPoisonPower": { - "NAME": "警告: 致死性の毒", + "NAME": "新毒", "DESCRIPTIONS": [ - "#y毒 はターン終了時にダメージを受けるが、ブロック出来る。 NL 戦闘開始時に #yアンチドーテ を1枚受け取る。" + "#y毒 はターン終了時にダメージを与えるが、ブロックで軽減出来る。", + "#y毒 はターン終了時に減衰せず、ダメージを与えるが、ブロックで軽減出来る。" ] }, "downfall:NeowHighlyToxic": { @@ -158,7 +201,7 @@ "downfall:DefectVoidPower": { "NAME": "エナジー泥棒", "DESCRIPTIONS": [ - "ディフェクトが #y空虚 を生成するたび、それはあなたの山札の上に置かれる。" + "ディフェクトが #y空虚 を生成するたび、それはあなたの捨て札に置かれる。" ] }, "downfall:NeowEnergyThief": { @@ -170,7 +213,7 @@ "downfall:DefectAncientConstructPower": { "NAME": "古代の構築物", "DESCRIPTIONS": [ - "戦闘を 2 #yブロンズオーブ ミニオンで開始する。 NL ターン終了時に #yアーティファクト を持っていなかった場合、 #yアーティファクト #b1 を得る。" + "戦闘を 2 #yブロンズオーブ ミニオンを連れて開始する。 NL ディフェクトの #yコアサージ は #y廃棄 されない。" ] }, "downfall:NeowAncientConstruct": { @@ -179,20 +222,21 @@ "ネオーはターン終了時に #yアーティファクト を持っていなかった場合、 #yアーティファクト #b2 を得る。" ] }, - "downfall:DefectBiasCuriosity": { - "NAME": "認知修正", - "DESCRIPTIONS": [ - "ディフェクトは戦闘開始時に #y認知偏向 をプレイする。 NL あなたが #yパワー をプレイするたび、ディフェクトの #yバイアス はこのターン中、無効化される。", - "あなたが #yパワー をプレイするたび、ディフェクトの #yバイアス はこのターン中、無効化される。", - "ディフェクトの #yバイアス はこのターン中、無効化される。", - "バイアス" - ] - }, "downfall:DefectCuriosity": { "NAME": "認知非偏向", "DESCRIPTIONS": [ "あなたが #yパワー をプレイした時、ディフェクトは #y集中力 #b", - " を得る。" + " を得る。", + " ディフェクトの #y筋力 の変更は #y集中力 にも影響する。" + ] + }, + "downfall:DefectBiasCuriosity": { + "NAME": "偏向", + "DESCRIPTIONS": [ + "ディフェクトは戦闘開始時に #y集中力 #b4 を持ち、 あなたが #yパワー をプレイするたびに #y集中力 #b1 を得るが、ターン開始時に #y集中力 #b1 を失う。", + "ディフェクトはターン終了時に #y集中力 #b", + " を失う。", + "" ] }, "downfall:DefectCuriosityLighning": { @@ -211,7 +255,10 @@ "downfall:IroncladStatusPower": { "NAME": "シンクロナイズ", "DESCRIPTIONS": [ - "アイアンクラッドが #y状態異常 を生成する度に、あなたの捨て札にも複製を加える。" + "アイアンクラッドが #y状態異常 を生成する度に、あなたの捨て札にも複製を加える。", + "アイアンクラッドが #y状態異常 カードを生成するたび、それは代わりにあなたの捨て札に置かれる。 NL #b", + " 以上のHPを失った時、 #y保留 付きの #y祓い清め を得る。", + "アイアンクラッドが #y状態異常 カードを生成するたび、それは代わりにあなたの山札に置かれる。 NL #b" ] }, "downfall:NeowSyncronize": { @@ -223,7 +270,9 @@ "downfall:IroncladMushroomPower": { "NAME": "エサの奪い合い", "DESCRIPTIONS": [ - "アイアンクラッドの #y死神 は #y廃棄 されず、また全てのマッシュルームを対象とする。 NL アイアンクラッドがマッシュルームを倒すと、彼は #y筋力 #b1 を得る。" + "アイアンクラッドの #y死神 は #y廃棄 されず、また全てのマッシュルームを対象とする。 NL アイアンクラッドがマッシュルームを倒すと、彼は #y筋力 #b1 を得る。", + "アイアンクラッドの #y死神 は 全てのマッシュルームを対象とする。彼がマッシュルームを倒した時、 #y筋力 #b", + " を得る。" ] }, "downfall:NeowFeedingFrenzy": { @@ -236,7 +285,8 @@ "NAME": "バスティオン", "DESCRIPTIONS": [ "アイアンクラッドは #yバリケード を持ち、 #y要塞 を連れて戦闘を開始する。それは毎ターン #b", - " #yブロック をアイアンクラッドに付与する。 NL アイアンクラッドは #y要塞 を破壊された時 #yバリケード を失うが、各ターン開始時に #y筋力 #b5 を得る。" + " #yブロック をアイアンクラッドに付与する。 NL アイアンクラッドは #y要塞 を破壊された時 #yバリケード を失うが、各ターン開始時に #y筋力 #b5 を得る。", + "破壊された時 #yバリケード を失うが、各ターン開始時に #y筋力 #b5 を得る。" ] }, "downfall:NeowBastion": { @@ -248,7 +298,7 @@ "downfall:MerchantStrengthPower": { "NAME": "ソウルスティーラー", "DESCRIPTIONS": [ - "商人は ソウルスティール で得た #y筋力 を維持しており、更に同量の #y敏捷性 も得る。" + "商人は ソウルスティール で得た #y筋力 を2倍所持しており、更に同量の #y敏捷性 も持っている。" ] }, "downfall:NeowMantra": { @@ -344,13 +394,15 @@ "NAME": "補佐役", "DESCRIPTIONS": [ "タンジェリンが死亡すると、ハーミットは #y集中 が途切れ、 #y筋力 #b", - " を失う。" + " を得る。", + "タンジェリンが死亡すると、 ハーミットは #y集中 が途切れる。" ] }, "downfall:HermitWheelOfFortune": { - "NAME": "ホイール・オブ・フォーチュン", + "NAME": "運命の輪", "DESCRIPTIONS": [ - "ハーミットのカードはコストが変動しない。あなたが #yアタック をプレイするたびハーミットは左端のカードを捨て、カードを #b1 枚引く。 彼が #y死霊の呪い を引く度、彼は #y筋力 2 を得る。" + "あなたが #yアタック をプレイした後、ハーミットは最初のカードを #y循環 させる。ハーミットのカードコストは変化しない。ハーミットが #r死霊の呪い を引く度に、 #y筋力 #b2 を得る。", + "あなたが #yアタック をプレイした後、ハーミットは最初のカードを #y循環 させる。" ] }, "downfall:HermitDoomsday": { @@ -383,10 +435,10 @@ "NAME": "Next Turn ", "DESCRIPTIONS": [ "バグ! 見てはいけない", - "次のターン, #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": { @@ -418,5 +470,32 @@ "ネオーの #y無敵 が #b0 になる度に、彼女の #y命の神 を #b", " 減らす。" ] + }, + "downfall:DefectAttackVoidPower":{ + "NAME": "エナジーシーフ", + "DESCRIPTIONS": [ + "あなたが #yアタック でブロックされなかったダメージを与える度、相手の捨て札に *空虚 を加える。" + ] + }, + "downfall:WatcherTrackerAttacksPower":{ + "NAME": "目には目を(アタック)", + "DESCRIPTIONS": [ + "あなたは #b", + " 枚の #yアタック をプレイしている。 この数値が 非アタック の枚数を上回っている間ウォッチャーは #y憤怒 スタンスになる。" + ] + }, + "downfall:WatcherTrackerSkillsPower":{ + "NAME": "目には目を(スキル)", + "DESCRIPTIONS": [ + "あなたは #b", + " 枚の #y非アタック をプレイしている。 この数値が アタック の枚数を上回っている間ウォッチャーは #y平静 のスタンスになる" + ] + }, + "downfall:VoidOrbPower":{ + "NAME": "虚無の核", + "DESCRIPTIONS": [ + "破壊された時、虚無の核はHPを全快し、 ディフェクトから #yダーク オーブを1個取り除く。", + " この効果が発動する度に、最大HPが5増加する。" + ] } } diff --git a/src/main/resources/downfallResources/localization/jpn/RelicStrings.json b/src/main/resources/downfallResources/localization/jpn/RelicStrings.json index 3f545d901a..823520712e 100644 --- a/src/main/resources/downfallResources/localization/jpn/RelicStrings.json +++ b/src/main/resources/downfallResources/localization/jpn/RelicStrings.json @@ -416,7 +416,8 @@ "NAME": "鋭い破片", "FLAVOR": "かつては壊れた像、今は間に合わせの武器。", "DESCRIPTIONS": [ - "エリートまたはボスとの戦闘中、 #yパワー カードをプレイするたびに、 #b1 #y筋力 を得る。" + "エリートまたはボスとの戦闘で、あなたが #yパワー をプレイするたび、 #b", + " #y筋力 を得る。" ] }, "downfall:RedIOU": { @@ -456,7 +457,7 @@ "NAME": "サファイアハートの祝福", "FLAVOR": "心臓が喜ぶ。", "DESCRIPTIONS": [ - "ボス戦開始時、 #y一時的な体力 を #b10 得る。" + "ボス戦開始時、 HP を #b10 回復する。" ] }, "downfall:HeartBlessingGreen": { @@ -468,9 +469,9 @@ }, "downfall:BurdenOfKnowledge": { "NAME": "知識の負担", - "FLAVOR": "真実は痛い。", + "FLAVOR": "真実は痛みを伴う物だ。", "DESCRIPTIONS": [ - "入手時、 #rすべて の #r心臓の祝福 と最大HP #b10 を #r失う 。 #rすべて のカードを #r永久 に #yアップグレード する。 #b1 少ない #y筋力 と #y敏捷性 で戦闘を開始する。" + "入手時、 #r全てのハートの祝福 と 最大HP #b20 を失う。 さらに戦闘開始時 #b2 の #y筋力 と #y敏捷性 を失う。 恒久的に全てのカードを #yアップグレード する。" ] }, "downfall:TeleportStone": { @@ -494,17 +495,18 @@ "NAME": "ヘクトプラズム", "FLAVOR": "このスライムの塊は何百もの魂のエネルギーで脈打っているようだ。そりゃ誰も欲しがらない。", "DESCRIPTIONS": [ - "ターン開始時、 [E] を得る。 #yソウル を入手できなくなり、鍵の破壊に #yソウル が必要なくなる。" + "ターン開始時、 [E] を得る。 #yソウル を入手できなくなり、鍵の破壊に #yソウル が必要なくなる。", + "ヘクトプラズム" ] }, "downfall:BlackCandle": { "NAME": "ブラックキャンドル", - "FLAVOR": "暗闇の中でこそ、炎はさらに輝きを増す。", + "FLAVOR": "暗闇の中で、炎は更に輝きを増している。", "DESCRIPTIONS": [ - "#y使用不可 の #r呪い がプレイできるようになる。 #y使用不可 の #r呪い をプレイすると, HP #b1 を失い、 #y廃棄 する。", + "#y使用不可 の #r呪い カードをプレイすることが出来る。更に元々プレイ可能な #呪い のコストが0になる。 あなたが #r呪い をプレイする度、それを #y廃棄 し、 #b1 のHPを失う。", "ブラックキャンドル" - ] - }, + ] + }, "downfall:replacements": { "NAME": "", "FLAVOR": "", @@ -539,24 +541,24 @@ "NAME": "呪いの鍵 EX", "FLAVOR": "正当な理由でロックされてる。", "DESCRIPTIONS": [ - "ターン開始時、 [E] を得る。 NL ボス以外の宝箱を開ける度に #b2 枚の #r呪い がデッキに加わる。" + "各ターン、最初に #r呪い を引く度 [E] を得る。 NL ボス以外の宝箱を開ける度に #r負傷 をデッキに加える。" ] }, "downfall:ExtraCursedBell": { "NAME": "呼びよせる鐘 EX", "FLAVOR": "響いているような気がするがどうしても確認できない。", "DESCRIPTIONS": [ - "入手時、 #b2 枚の特殊な #r呪い と #b3 つのレリックを得る。", + "入手時、 特殊な #r呪い と #b3 つのコモンレリックを得る。", "鐘が二度鳴った...", "報酬をスキップ", "閉じる" ] }, - "champ:BustedCrownGagText": { + "downfall:BustedCrownGagText": { "NAME": "壊れた王冠", - "FLAVOR": "模倣はお世辞の最も誠実な形......か?あなたの王冠には似ても似つかない。実際、侮辱のようなものだ。", + "FLAVOR": "模倣は最大の賛辞…それとも?しかしあなたの王冠には似ても似つかない。失礼なくらいだ。", "DESCRIPTIONS": [ - "ターンの開始時、 [E] を得る。報酬のカード選択画面で、選択できるカードが2枚減る。" + "ターン開始時、 [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 d8a5b838b3..6c3dcab978 100644 --- a/src/main/resources/downfallResources/localization/jpn/UIStrings.json +++ b/src/main/resources/downfallResources/localization/jpn/UIStrings.json @@ -24,14 +24,17 @@ "ルビーの鍵を壊す", "サファイアの鍵を壊す", "エメラルドの鍵を壊す", - "(行動消費なし) 50 ソウルを消費: 鍵を破壊 ", - "ボス戦で筋力 1 を得る。", - "ボス戦で一時的な HP を 10 得る。", - "ボス戦で敏捷性 1 を得る。", + "(行動消費なし)", + "コモンカードを得る:", + "アンコモンカードを得る:", + "レアカードを得る:", "鍵は破壊された!", - "要求 ", - " ソウル", - "(行動消費なし) 鍵を破壊する " + " ", + " ソウルが必要", + "(行動消費なし) 鍵を破壊する ", + " ソウルを消費: 最大 ", + " 枚の中から選択。", + " これ以降の鍵破壊の効果が上昇する。" ] }, "downfall:WheelSpinButton": { @@ -64,7 +67,10 @@ "スネッコが他のMODのカードを使用できなくする", "音楽の変更を許可しない (再起動が必要)", "Downfall キャラクター のスキンをすべて解除。", - "カード特性のテキストの代わりにアイコンを利用する。" + "カード特性のテキストの代わりにアイコンを利用する。", + "次に召喚で魔導書から引くカードをハイライトする。", + "StSオリジナルカードとレリックの調整は行わない (ゲームを再起動して下さい)", + "Downfallのレガシーボスを使用する (6.0以前の仕様にする)" ] }, "downfall:EnergyPanelTip": { @@ -113,7 +119,7 @@ }, "downfall:RareCardReward": { "TEXT": [ - "レアカードをデッキに加えた。" + "レアカードをデッキに加える。" ] }, "downfall:OctoChoiceAction": { @@ -125,42 +131,42 @@ "downfall:BossCardReward": { "TEXT": [ "デッキにボスカードを追加。", - "カードを取れ" + "カードを選ぶ。" ] }, "downfall:ColorfulCardReward": { "TEXT": [ "デッキに ", " カードを追加。", - "カードを取る" + "カードを選ぶ。" ] }, "downfall:ColorfulUncommonCardReward": { "TEXT": [ "デッキに ", " カードを追加。", - "カードを取る" + "カードを選ぶ。" ] }, "downfall:ColorfulRareCardReward": { "TEXT": [ "デッキに ", " カードを追加。", - "カードを取る" + "カードを選ぶ。" ] }, "downfall:DiceRollPotionReward": { "TEXT": [ - "デッキに ", - " アップグレードされたカードを追加。", - "カードを取る" + "デッキに", + "アップグレードされたカードを追加。", + "カードを選ぶ。" ] }, "downfall:ColorfulPowersCardReward": { "TEXT": [ - "デッキに ", - " アップグレードされたパワーを追加。", - "カードを取る" + "デッキに", + "アップグレードされたパワーカードを追加。", + "カードを選ぶ。" ] }, "downfall:RunHistoryMonsterNames": { @@ -182,8 +188,8 @@ }, "downfall:Unfettered": { "TEXT": [ - "束縛から解放された", - "壊れた封印を手に入れた" + "自由だ", + "壊れた封印を入手した。" ] }, "downfall:SingleCardViewPopup": { diff --git a/src/main/resources/downfallResources/localization/kor/CardStrings.json b/src/main/resources/downfallResources/localization/kor/CardStrings.json index 131788057a..d2ce1ec0c3 100644 --- a/src/main/resources/downfallResources/localization/kor/CardStrings.json +++ b/src/main/resources/downfallResources/localization/kor/CardStrings.json @@ -1,34 +1,115 @@ -{ - "downfall:Aged": { - "NAME": "노쇠", - "DESCRIPTION": "사용불가. NL 휘발성. NL 내 턴 종료 시 뽑을 더미 맨 위에 *공허를 놓습니다." - }, - "downfall:Bewildered": { - "NAME": "당혹", - "DESCRIPTION": "사용불가. NL 휘발성. NL 이 카드를 뽑을 때 손에 있는 모든 카드가 sneckomod:뒤엉킵니다." - }, - "downfall:Icky": { - "NAME": "질척임", - "DESCRIPTION": "*점액투성이를 1장 얻습니다. NL 소멸." - }, - "downfall:Haunted": { - "NAME": "귀신들림", - "DESCRIPTION": "사용불가. NL 휘발성. NL 이 카드가 손에 있다면 이 카드 이외의 카드가 소멸할 때마다 피해를 2 받습니다." - }, - "downfall:Malfunctioning": { - "NAME": "결함", - "DESCRIPTION": "내 턴 종료 시 손에 있는 모든 카드를 무작위 상태이상 카드로 변환합니다. NL 소멸." - }, - "downfall:Scatterbrained": { - "NAME": "주의산만", - "DESCRIPTION": "내 턴 종료 시 이 카드가 손에 있다면 이 카드를 1장 복사해 버린 카드 더미에 넣고 섞습니다. NL 소멸." - }, - "downfall:SummonMushrooms": { - "NAME": "균류 무리", - "DESCRIPTION": "모든 버섯을 죽입니다. 버섯의 남아있던 체력만큼 체력을 회복합니다. NL 버섯을 2개 소환합니다." - }, - "downfall:BossMaintenance": { - "NAME": "유지보수", - "DESCRIPTION": "이번 전투 동안 *타격의 피해량을 !M! 증가시키고 이 카드의 비용을 [E] 증가시킵니다. NL 민첩을 !B! 얻습니다." - } -} +{ + "downfall:Aged": { + "NAME": "노쇠", + "DESCRIPTION": "사용불가. NL 휘발성. NL 내 턴 종료 시 버린 더미 맨 위에 *공허를 놓습니다." + }, + "downfall:Bewildered": { + "NAME": "당혹", + "DESCRIPTION": "이 카드를 뽑을 때 손에 있는 모든 카드가 sneckomod:뒤엉킵니다. NL 소멸." + }, + "downfall:Icky": { + "NAME": "질척임", + "DESCRIPTION": "다음 턴에 카드를 1장 덜 뽑습니다. NL 소멸." + }, + "downfall:Haunted": { + "NAME": "귀신들림", + "DESCRIPTION": "휘발성. NL 내 턴 종료 시 피해를 !M! 받습니다." + }, + "downfall:Malfunctioning": { + "NAME": "결함", + "DESCRIPTION": "내 턴 종료 시 버린 카드 더미에 *부상을 1장 섞어 넣습니다. NL 소멸." + }, + "downfall:Scatterbrained": { + "NAME": "주의산만", + "DESCRIPTION": "내 턴 종료 시 이 카드가 손에 있다면 이 카드를 1장 복사해 버린 카드 더미에 넣고 섞습니다. NL 소멸." + }, + "downfall:CurseOfBlood": { + "NAME": "혈우병", + "DESCRIPTION": "내 다음 턴 시작 시 [E] 을 잃습니다. NL 소멸.", + "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": "균류 무리", + "DESCRIPTION": "모든 버섯을 죽입니다. 버섯의 남아있던 체력만큼 체력을 회복합니다. NL 버섯을 2개 소환합니다." + }, + "downfall:BossMaintenance": { + "NAME": "유지보수", + "DESCRIPTION": "이번 전투 동안 *타격의 피해량이 !M! 증가합니다. NL 민첩을 !B! 얻습니다." + }, + "downfall:CuriousRobot": { + "NAME": "호기심 많은 로봇", + "DESCRIPTION": "내가 파워를 사용할 의도가 있다면 밀집을 1 얻습니다. 힘이 밀집에 영향을 줍니다." + }, + "downfall:Murderbot": { + "NAME": "에너지 도둑", + "DESCRIPTION": "막히지 않은 피해를 줄 때마다 상대의 버린 카드 더미에 *공허를 섞어 넣습니다." + }, + "downfall:Temptation": { + "NAME": "유도", + "DESCRIPTION": "상대의 뽑을 카드 더미에 무작위 파워 카드를 !M! 장 섞어 넣습니다." + }, + "downfall:BagOfKnives": { + "NAME": "칼날 꾸러미", + "DESCRIPTION": "매 턴 내가 비용이 2 이상인 카드를 처음으로 사용하면 단도를 2장 얻습니다." + }, + "downfall:Hallunication": { + "NAME": "환각", + "DESCRIPTION": "매 턴 진짜 내가 어디에 있는지 숨깁니다. 본체나 분신을 공격하면 분신은 제거됩니다." + }, + "downfall:NewToxins": { + "NAME": "위험: 유독 과다", + "DESCRIPTION": "중독이 사라지지 않으며 내 턴 시작 시가 아니라 내 턴 종료시 방어도에 막히는 피해를 주게 됩니다." + }, + "downfall:FeedingFrenzy": { + "NAME": "광란의 포식", + "DESCRIPTION": "*사신이 모든 *버섯을 대상으로 삼습니다. 죽인 *버섯당 힘을 1 얻습니다." + }, + "downfall:StatusMirror": { + "NAME": "마법 거울", + "DESCRIPTION": "이 캐릭터가 생성하는 상태이상이 당신에게 대신 생성됩니다." + }, + "downfall:EyeForAnEye": { + "NAME": "눈에는 눈", + "DESCRIPTION": "상대가 공격 카드가 아닌 카드보다 공격 카드를 많이 사용했다면 진노합니다. 아니라면 명상합니다." + }, + "downfall:TruePeace": { + "NAME": "진정한 평화", + "DESCRIPTION": "행동하지 않습니다. 만물의 필연적 종말을 기다립니다." + }, + "downfall:EndIsNigh": { + "NAME": "머지 않은 최후", + "DESCRIPTION": "모두 의식을 !M! 얻습니다." + }, + "downfall:FalseWorship": { + "NAME": "헛된 숭배", + "DESCRIPTION": "광신자가 죽었다면 부활시킵니다. 아니라면 광신자가 죽으면 50% 체력으로 부활시킵니다." + }, + "downfall:FleetingFaith": { + "NAME": "영적인 존재", + "DESCRIPTION": "상대의 버린 카드 더미에 *귀신들림을 !M! 장 섞어 넣습니다." + }, + "downfall:FaithRewarded": { + "NAME": "믿음의 대가", + "DESCRIPTION": "강림 *경지라면 절대 벗어나지 않습니다. 대신 강림 시 공격이 2배의 피해를 줍니다." + }, + "downfall:Crusade": { + "NAME": "진군", + "DESCRIPTION": "모든 해로운 효과를 제거합니다. NL 모든 만트라를 잃습니다. 잃은 만트라 하나당 힘을 1 얻고 체력을 !M! 회복합니다." + }, + "downfall:Hyperfocused": { + "NAME": "초집중", + "DESCRIPTION": "*정조준 효과가 항상 부여됩니다. 피해를 10 받으면 그 턴에 *정조준 효과가 제거됩니다." + }, + "downfall:Arsenal": { + "NAME": "살아있는 무기고", + "DESCRIPTION": "*파멸의 *단검을 소환합니다." + }, + "downfall:Steady": { + "NAME": "진노 표출", + "DESCRIPTION": "*진노로 받는 피해량이 100% 대신 50%로 증가합니다." + }, + "downfall:Revolver": { + "NAME": "리볼버", + "DESCRIPTION": "앞으로 턴이 *숙명의 *돌림판으로 결정됩니다. 공격 시 *돌림판이 한 칸 앞으로 갑니다." + } +} diff --git a/src/main/resources/downfallResources/localization/kor/CharacterStrings.json b/src/main/resources/downfallResources/localization/kor/CharacterStrings.json index a92c36e1cd..58a76de1ff 100644 --- a/src/main/resources/downfallResources/localization/kor/CharacterStrings.json +++ b/src/main/resources/downfallResources/localization/kor/CharacterStrings.json @@ -39,6 +39,7 @@ }, "downfall:Unlock": { "TEXT": [ + " NL (4막 승리는 포함되지 않습니다.)", "대왕 슬라임으로 등반에 성공한다면 이 캐릭터가 해제됩니다.", "두 번째 악당 캐릭터로 등반에 성공한다면 이 캐릭터가 해제됩니다.", "수호자로 등반에 성공한다면 이 캐릭터가 해제됩니다.", @@ -47,12 +48,13 @@ "네 번째 악당 캐릭터로 등반에 성공한다면 이 캐릭터가 해제됩니다.", "투사로 등반에 성공한다면 이 캐릭터가 해제됩니다.", "다섯 번째 악당 캐릭터로 등반에 성공한다면 이 캐릭터가 해제됩니다.", - "자동인형으로 등반에 성공한다면 이 캐릭터가 해제됩니다.", + "청동 자동인형으로 등반에 성공한다면 이 캐릭터가 해제됩니다.", "여섯 번째 악당 캐릭터로 등반에 성공한다면 이 캐릭터가 해제됩니다.", - "그렘린으로 등반에 성공한다면 이 캐릭터가 해제됩니다.", - " NL (4막 승리는 포함되지 않습니다.)", + "수집가로 등반에 성공한다면 이 캐릭터가 해제됩니다.", "일곱 번째 악당 캐릭터로 등반에 성공한다면 이 캐릭터가 해제됩니다.", - "수집가로 등반에 성공한다면 이 캐릭터가 해제됩니다." + "깨어난 자로 등반에 성공한다면 이 캐릭터가 해제됩니다.", + "여덟 번째 악당 캐릭터로 등반에 성공한다면 이 캐릭터가 해제됩니다.", + "그렘린 군단으로 등반에 성공한다면 이 캐릭터가 해제됩니다." ] }, "downfall:HeartMerchant": { @@ -241,5 +243,17 @@ ], "TEXT": [ ] + }, + "downfall:CharBossSpeech": { + "NAMES": [ + "" + ], + "TEXT": [ + "안돼, 그러지 마! 우린 그저 약물이 필요했을 뿐인데...", + "죽어라, 괴물 녀석! 이 세상에서 지워주마!" + + ] } -} \ No newline at end of file + +} + diff --git a/src/main/resources/downfallResources/localization/kor/EventStrings.json b/src/main/resources/downfallResources/localization/kor/EventStrings.json index 1d14c11459..8a21104212 100644 --- a/src/main/resources/downfallResources/localization/kor/EventStrings.json +++ b/src/main/resources/downfallResources/localization/kor/EventStrings.json @@ -1,628 +1,633 @@ -{ - "downfall:SolShrine": { - "NAME": "영혼 성소", - "DESCRIPTIONS": [ - "당신 앞에 고대 악한 영혼을 기리는 공들인 성소가 놓여있습니다. ", - "성소를 건드리자, #y영혼 이 성소로부터 쏟아지며 ~당신에게~ ~힘의~ ~세례를~ ~퍼붓습니다.~ ", - "성소를 후릴 때마다 계속해서 #y영혼 이 줄줄이 쏟아집니다! NL NL 당신이 영혼을 흡수하자, 이 성소에서 무한히 에너지를 공급할 수 있다는 사실을 깨닫습니다. 당신은 #r올바른 #r결정을 내린 것인지 의문이 듭니다.", - "당신은 성소를 무시합니다." - ] - }, - "downfall:GremlinMatchGame": { - "NAME": "맞추고 가져가!", - "DESCRIPTIONS": [ - "\" 카드는 #b12장! 짝을 맞추면 가져가도 된다! 기회는 #b5번, 무르기 없기다. NL 준비됐느냐? 시작하자꾸나!\"", - "당신은 그렘린의 게임을 마치고 올려다보았습니다. NL 그렘린이 어디로 사라졌지?", - "그렘린은 미친듯이 테이블 위의 카드를 섞고 있습니다. 이 괴물은 해롭지는 않아 보입니다. 당신이 다가가자, 그렘린은 당황해서 겁먹은 것처럼 보였지만 이내 마음을 다잡고 말을 건넵니다.", - "즉시, 그렘린이 외칩니다! NL NL \"안돼!!!\" NL NL 음지에서 그렘린이 서서히 나오더니, 당신, 그렘린, 테이블을 내려다봅니다. NL \"이제 진정한 게임을 시작하지 않겠느냐?\" 그렘린이 묻습니다." - ], - "OPTIONS": [ - "[계속한다]", - "[떠난다]", - "[시도한다]", - "남은 시도 횟수: #y", - "[위협한다] 카드를 6장 훔칩니다.", - "[때린다] #r싸웁니다. #g카드를 #g6장 #g얻습니다." - ] - }, - "downfall:WomanInBlue": { - "NAME": "파란 옷의 여자", - "DESCRIPTIONS": [ - "당신은 어둠 속에 파묻힌 작은 가게를 발견합니다. 그 안에서 멋진 옷차림의 창백한 여자가 포션 진열장을 관리하는게 보입니다. 그녀는 당신의 위협적인 모습에 깜짝 놀랍니다. NL \"나랑 내 물건들을 내버려 둬, 멍청아!!\" 그녀가 비명을 지릅니다.", - "당신은 괜히 여자를 자극해서 싸우고 싶지 않아 조심스레 가게를 빠져나옵니다.", - "#r@쾅!@ NL 그녀의 장갑을 낀 주먹이 얼굴을 강타하여 당신을 거의 발치까지 쓰러뜨립니다. NL \"네 내장으로 바닥을 더럽히기 전에 여기서 나가.\" 그녀의 말을 받아들여 밖으로 나갑니다. 내장은 온전히 몸 안에 있군요." - ], - "OPTIONS": [ - "[떠난다]", - "[떠난다] #r피해를 #r", - " #r받습니다.", - "[때린다] #r싸웁니다. #g포션 #g3개와 #g포션 #g유물 #g1개를 #g얻습니다." - ] - }, - "downfall:GremlinWheelGame": { - "NAME": "운명의 돌림판", - "DESCRIPTIONS": [ - "당신은 말쑥해보이는 쾌활한 그렘린과 우연히 마주쳤습니다. 무대 뒤에서 그렘린이 머뭇거리며 힐끔대다 눈이 마주치긴 했지만, 당신의 위협적인 모습에도 불구하고 동요하지 않는 듯합니다. NL \"돌림판을 돌릴 시간이예요! ~준~ ~비~ ~됐~ ~나~ ~요?\"~", - "\" #y영혼 을 얻으셨습니다! \" NL 앗싸!!!!", - "\"아, #g선물 이군요! NL 즐겨주시길!\"", - "\"이야, 공짜 #g회복을 드립니다!\"", - "\" #p저주 를 얻으신 듯 하군요! NL 좋지 않네요. NL 어쩔 수 없죠! 다음번엔 행운이 있길!\"", - "\"오우, #r~어둠~ 의 힘... NL 덱에서 제거할 카드를 한 장 골라주세요!\"", - "\"이런!\" NL \"패배하셨습니다!\" NL 당신은 그가 칼을 준비하는 걸 발견합니다...", - "당신은 미친 그렘린을 베려했으나 그는 너무 빠릅니다! NL 그는 투박한 칼로 당신을 몇 번 공격합니다. NL \"대가는 지불되었다!!\" NL 그 말과 함께, 그렘린과 돌림판 둘 다 감쪽같이 사라졌습니다.", - "그렘린은 긴장한 듯 자신의 어깻죽지로 시선을 돌렸지만 재빨리 긴장을 풉니다. 당신은 그렘린의 손짓을 보고도 무시합니다. NL \"워, 워, 친구. 굴림판이 공정하게 보상을 결정한 거라구요! 아무도 두 번 돌릴 순 없어요.\"", - "즉시, 그렘린이 소리 지릅니다! NL NL \"안돼!!!\" NL NL 음지에서 그렘린이 서서히 나오더니, 당신, 그렘린, 테이블을 내려다봅니다. NL \"내 친구의 돌림판을 어디 가져갈 수 있으면 가져가 봐라.\".", - "모닥불에서 지난번 돌림판보다 운이 더 좋을지 알아보기로 합니다.", - "돌림판이 보상을 가리켰습니다. NL NL 이제 손만 뻗어서 가져가면 됩니다.", - "성공입니다! 이번에야말로 원하던 것을 찾아냈습니다! NL NL #r@콰직!@ NL NL 마지막으로 조금 거칠게 돌렸나봅니다... 돌림판이 부서지고 말았습니다.", - "당신은 다른 날에 운을 시험해 보기로 결심합니다. NL NL 지금은 안정을 취해야겠죠.", - "그렘린은 달려들지만 당신은 준비되어있습니다. NL 그렘린이 단도로 찌르기 전에 베어버립니다. NL 슬프게도 당신 맘대로 상품을 뜯어가기도 전에 돌림판은 감쪽같이 사라졌습니다." - ], - "OPTIONS": [ - "[돌린다]", - "[보상!] 와아!!!!", - "[보상!] #g유물을 #g획득합니다.", - "[보상!] #g체력을 #g전부 #g회복합니다.", - "[보상?] #r저주 #r- #r부패.", - "[보상!] #g카드 #g더미에서 #g카드를 #g1장 #g제거합니다.", - "[보상?] #r체력을 #r", - " #r잃습니다.", - "[떠난다]", - "제거할 카드를 선택하십시오.", - "[재도전!]", - "[재도저언!!]", - "[때린다] #r싸웁니다. #g운명의 #g돌림판을 #g얻습니다.", - "[넘긴다] 나중에 돌립니다.", - "[보상!] #g선빵필승!", - "[훔친다]" - ] - }, - "downfall:GremlinWheelGameRest": { - "NAME": "운명의 돌림판", - "DESCRIPTIONS": [ - ], - "OPTIONS": [ - ] - }, - "downfall:LivingWall": { - "NAME": "살아있는 벽", - "OPTIONS": [ - "[때린다] #r싸웁니다. #g세 #g머리 #g모두 #g이용합니다." - ] - }, - "downfall:Augmenter": { - "NAME": "증강자", - "DESCRIPTIONS": [ - "안대를 끼고 사악한 웃음을 짓는 남자가 성큼성큼 다가옵니다. NL \"세상에, 정말 무시무시한 놈이야! 네가 과학에 관심 있을 진 모르겠지만, 난 널 그 어떤 생명체보다 강하게 만들어 줄 수 있어. \"영웅들\"을 쫓는다면 이게 필요할 테지.\" NL NL ~\"자,~ ~어떡할래?\"~" - ], - "OPTIONS": [ - "[때린다] #r싸웁니다. #g모두 #g얻습니다." - ] - }, - "downfall:BonfireSpirits": { - "NAME": "모닥불 정령들", - "DESCRIPTIONS": [ - "정령들은 당신이 준 영혼들을 게걸스럽게 먹습니다! 정령들은 영혼을 잔뜩 먹더니, 불꽃이 @두@ @배@ 더 밝게 타오릅니다. NL 정령들이 흥분하여 당신을 둘러싸고 춤을 추더니 이내 ~당신의~ ~몸~ ~속으로~ ~스며들고,~ 당신은 따뜻함과 힘으로 가득찹니다. NL 최대 체력이 증가하고 체력이 전부 #g회복 됩니다.", - "당신은 그들을 #p취하기 #p위해 손을 뻗습니다... NL 정령들은 @비명을@ @지르며@ 당신의 손바닥에서 솟아오르는 소용돌이를 벗어나려고 헛된 ~발버둥을~ ~칩니다.~ NL 이윽고 정령들은 당신의 수집품으로 박제될 뿐이었습니다." - ], - "OPTIONS": [ - "[기부] #r영혼을 #r150 #r잃습니다. #g최대 #g체력을 #g10 #g얻고 #g체력을 #g모두 #g회복합니다.", - "[잠김] 영혼이 150 필요합니다.", - "[기부] #r영혼을 #r150 #r잃습니다. #g각 #g그렘린이 #g최대 #g체력을 #g2 #g얻고 #g체력을 #g모두 #g회복합니다.", - "[가져간다]" - ] - }, - "downfall:FaceTrader": { - "NAME": "얼굴 상인", - "DESCRIPTIONS": [ - " NL NL 잘 싸울 것처럼 보이진 않지만 이곳에서 살아 남아왔습니다. 아마 이 가면들이 힘을 주는 거겠죠...." - ], - "OPTIONS": [ - "[때린다] #r싸웁니다. #g100%: #g모든 #g얼굴." - ] - }, - "downfall:CursedFountain": { - "NAME": "저주받은 샘", - "DESCRIPTIONS": [ - "근처 벽에 달린 분수로부터 끝없이 흘러나오는 #p~연보랏빛~ #p~액체와~ 우연히 마주쳤습니다. 대부분 생명체에게는 치명적이지만 저주받은 자에게는 꽤나 유익하다고 알고 있습니다.", - "샘의 #p~액체에는~ 길을 잃은 영혼들이 일렁입니다. 안 쓰는 게 낭비 같군요. 당신은 #p저주받은 #p샘의 마법에서 영혼들을 떼어 나릅니다.", - "이 #p~액체가~ 유용할 거 같은 느낌이 들어 나중에 사용하도록 병에 담았습니다. 이 #p어둠의 #p물에 익숙하지 않은 생명체가 적셔지면 분명 고통받을 테니까요.", - "#p~액체를~ 마시자 당신의 정신에 어둠의 손길이 닿는 게 느껴집니다. 꽤 부유하고 산뜻한 기분이군요.", - "당신은 샘을 뒤로한 채 가던 길을 갑니다." - ], - "OPTIONS": [ - "[담는다] #g저주받은 #g샘 #g포션을 #g얻습니다.", - "[흡수한다] #g영혼을 #g75 #y얻습니다.", - "[마신다] #g모든 #g체력을 #g회복합니다.", - "[잠김] 저주가 1장 필요합니다.", - "[잠김] 저주가 2장 필요합니다.", - "[잠김] 저주가 3장 필요합니다.", - "[잠김] 이미 사용했습니다.", - "[떠난다]" - ] - }, - "downfall:WeMeetAgain": { - "NAME": "또 만났네요!", - "DESCRIPTIONS": [ - "\"보스!\" 너저분한 옷을 입은 쾌활한 남자가 신이 나서 당신에게 다가옵니다. 당신은 이 남자를 잘 알고 있습니다. NL \"저예요, #y랜위드! 제가 저주받은 영웅들한테 사기친 걸 못 믿으시겠죠! 혹시 놈들한테 줄 쓰레기 같은 물건이 있나요?\" NL 당신은 그의 호의에 감사하며 사정을 생각해봅니다. 분명 랜위드가 다음 번 \"거래\"에서 쓸만한걸 건질 테니 말이죠...", - "\"와, 완벽해요! 완전 쓰레기 같아요! 여기요, 최근에 멍청이들이 준 영약을 받아 가셔요!\" NL 랜위드는 엉거주춤하게 주머니를 뒤적거리다 하마터면 깨트릴뻔했지만, 무사히 3병을 건넵니다.", - "\"훌륭해요! 이건 다음 거래에 아주 쓸모 있을 거예요. 아, 그리고 당신이 원한대로 시체들에서 수확해 왔어요!\" NL 랜위드는 영혼석을 건네주고는 당신의 쓸모없는 장신구를 팔아 넘길 새로운 호구를 찾아 허둥지둥 길을 나섭니다.", - "\"딱이네요! 제가 조금만 더 손보면 정말 특별해 보일 거예요.\" NL 랜위드는 유물을 주의깊게 살피며 떠납니다. 다음번에 만날 모험가들에게 이 유물이 얼마나 대단한 물건인지, 어떻게 허풍 칠지 생각해보는 게 분명해 보이는군요.", - "\"보스, 오늘은 아무것도 없나요? 괜찮아요!\" NL 그는 잽싸게 달아납니다." - ], - "OPTIONS": [ - "[ ", - " 유물을 준다] ", - "#g포션을 #g3개 #g얻습니다.", - "#g영혼을 ", - " #g얻습니다.", - "#g무작위 #g희귀 #g카드를 #g1장 #g얻습니다.", - "[떠난다]", - "[잠김] 줄 유물이 없습니다.", - "#g포션을 #g2개 #g얻습니다." - ] - }, - "downfall:Designer": { - "NAME": "탑-클래스 디자이너", - "DESCRIPTIONS": [ - "당신은 \"탑-클래스\"라는 간판이 걸린 #g~화려한~ 상점을 발견합니다. 입구 안쪽에서 #r도적 이 안에 있는 자를 소리치며 위협합니다. NL NL @\"돈을@ @내놔라!\"@ NL NL 도적은 터는 것에 정신 팔려 당신을 알아차리지 못합니다.", - "생채기 하나 없이 가뿐하게 도적을 처리합니다. 우스꽝스러운 옷을 입은 남자가 상점 입구에 나타납니다. NL \"고마워, 친절한 지배자 씨!\", 남자가 안에서 손짓하면서 말합니다.", - "당신은 이 일에 엮여봤자 좋을 거 없다고 생각합니다. 침입자를 처리하는 게 더 중요하니까요.", - "\"세상에 맙소사, 끔찍해!! 이건 아니야, 아니고말고. 이 차림새는 도대체 뭐야? 지배자는 더 @위협적인@ @존재야!@ 첨탑의 지배자란 무시무시해야 된다고! 내가 어디 한 번 ~제대로~ 변신시켜줄게.\" NL NL 당신은 이 남자의 말을 믿고 그의 서비스를 받을지, 아니면 차림새에 대한 모욕으로 받아 들여야 할지 망설여집니다.", - "\"그래 좋아, 이젠 안녕해야겠네! 다른 #r지배자 씨들한테 내 이야기 좀 해줘!\" NL NL 당신은 이 남자의 능력을 걱정했지만, 확실히 더 위협적으로 느껴지게 됐습니다.", - "당신은 그를 때렸습니다. NL \"내 @얼굴!!@ 그럼 내 차례인-\" NL NL 그는 기절했습니다. 이러면 다음번에는 당신과 비슷한 생명체를 만나면 모욕하지 않고 몸을 사리겠죠.", - "당신은 도적을 내칩니다. 안타깝게도 ~진정한~ ~사냥감은~ 디자이너였습니다. 그는 당신이 다가올 때마다 뒷걸음쳤지만 당신이 #g전등을 내밀자, 곧 그의 영혼은 당신 것이 되었습니다..." - ], - "OPTIONS": [ - "[교정] ", - "[정리정돈] ", - "[풀 서비스] ", - "[무시] 떠납니다.", - "[때린다] 떠납니다.", - "[가게로 들어간다]", - " #g보상을 #g얻습니다." - ] - }, - "downfall:DeadGuy": { - "NAME": "죽은 모험가", - "DESCRIPTIONS": [ - "의식을 계속하던 중 기습을 당했습니다!", - "소리없이 탈출했습니다.", - "바닥 위의 #r죽은 #r모험가 와 우연히 마주쳤습니다. NL 그의 영혼은 여전히 남아있습니다. 또 ", - "갑옷과 얼굴이 #r@화염에@ #r@그을린@ 것으로 보입니다. ", - "마치 뿔달린 짐승이 그를 #r@찌르고@ #r@짓밟은@ 것처럼 보입니다. ", - "거대한 발톱에 의해 잘리고 내장이 빠져나온 것처럼 보입니다. ", - " NL 영혼을 수확하는 의식으로 전리품을 얻을 수 있겠지만 남자를 해친 생물이 곧 돌아올지도 모릅니다.", - "시체에서 영혼을 뽑는 의식이 성공했습니다! NL 의식을 계속하시겠습니까?", - "전사한 남자의 영혼을 뽑아내는 데 실패했습니다... NL 의식을 계속하시겠습니까?", - "의식으로 그의 몸을 흔들자 주머니에서 #y유물 이 떨어집니다! NL 의식을 계속하시겠습니까?", - "의식이 완벽히 끝났습니다!" - ], - "OPTIONS": [ - "[영혼 수확] #g시체를 #g뒤집니다. #r", - "[떠난다]", - "[싸운다]", - "[계속한다] #g시체를 #g뒤집니다. #r", - "%: #r괴물이 #r돌아옵니다." - ] - }, - "downfall:ShiningLight": { - "NAME": "밝은 빛", - "DESCRIPTIONS": [ - "당신은 방 한가운데에서 일렁이는 #y빛의 #y덩어리 를 발견했습니다. NL NL ~따뜻한~ ~빛과~ ~황홀한~ ~문양이~ 속을 뒤틀리게 하지만 이 빛은 엄청난 힘을 가지고 있습니다.", - "빛 사이로 걸어갈 때 빛이 당신에게 흡수될 때 인상을 찌푸립니다. NL #r@타는@ #r@듯이@ #r@뜨겁습니다!@ 이내 고통은 사그라들고 #b활기 를 되찾았지만, 이 역겨운 따뜻함은 잊을 수 없는 기억이 되어 상처로 남을 것입니다.", - "무슨 일이 벌어질 수 있었을지 궁금해하면서 빛을 빙 돌려 돌아갑니다." - ], - "OPTIONS": [ - "[들어간다] #g무작위 #g카드를 #g", - "[떠난다]", - "[잠김] 필요: 강화 가능한 카드", - " #g장 #g강화합니다. #r저주를 #r받습니다 #r- #r결함." - ] - }, - "downfall:WorldOfGoop": { - "NAME": "끈적이 천지", - "DESCRIPTIONS": [ - "당신은 물웅덩이에 빠졌습니다. NL @그@ @웅덩이는@ #g@끈적이@ #g@슬라임으로@ @가득@ @차@ @있습니다!!@ NL 귀와 코를 포함한 모든 곳에서 끈적임이 느껴집니다. NL NL 기어 올라와보니 독특하게 생긴 #y노란색 #y슬라임 이 몸에 붙어있단 것을 알아차립니다. 슬라임은 웅덩이에 빠진 불행한 모험가들에게 #y영혼 을 수집하고 있었던 것으로 보입니다. 정말 편리하군요.", - "이 불행한 웅덩이 사건을 그냥 넘기고 싶진 않아, 당신은 #y노란색 #y슬라임 후려칩니다. NL NL 슬라임은 바로 @터져버렸습니다!@ NL NL 아까보다 더 많은 끈적이로 뒤덮일거라곤 생각하지도 못했는데 말이죠.", - "#y노란색 #y슬라임 을 털어내고 여정을 떠납니다. 여전히 군데군데 끈적이가 붙어 있긴 하지만요. 확실히 더 무시무시해 보이긴 하겠네요." - ], - "OPTIONS": [ - "[전부 수확한다] #g영혼을 #g", - "[흡수한다] #g영혼을 #g", - "[짜낸다] #g영혼을 #g", - " #g얻습니다. #r저주를 #r3장 #r받습니다 #r- #r질척임.", - " #g얻습니다. #r저주를 #r2장 #r받습니다 #r- #r질척임.", - " #g얻습니다. #r저주를 #r받습니다 #r- #r질척임.", - "[떠난다]" - ] - }, - "downfall:Serpent": { - "NAME": "배애애애앰", - "DESCRIPTIONS": [ - "당신은 땅에 뚫린 큰 구멍을 보고 방으로 들어갔습니다. 구멍 앞에 도달하자 갑자기 커다란 뱀이 튀어나왔습니다. NL NL ~\"하~ ~하하!~ ~안녕~ ~안녕!~ ~무엇이~ ~우리를~ ~여기로~ ~이끌었을까?~ 안녕 우리의 지배자, 간단한 질문을 하나 할게. NL 인생의 가장 좋은 점은 바로 #r~뭐든지~ #r~때려~ #r~눕힐~ #r~수~ #r~있다는~ #r~것~ 아니겠어? NL 너도 그렇게 생각하지?\"", - "~\"스스슷슷스스스..~ ~..스스스슷.....~ ~스슷...~ ~스스스....\"~", - "뱀은 매우 실망한 표정으로 당신을 노려봅니다.", - " NL NL 뱀은 고개를 쳐들고는 섬뜩한 단말마를 내지르더니 몸이 축 늘어졌습니다. 덕분에 생명력을 손쉽게 수확해냈습니다. NL NL 그 모습은 당신의 경외심을 불러일으켰습니다. 그런데 은유적으로 말한 거 아니었나 생각이 듭니다. 아마 다른 이들에게 무력을 행사하란 뜻 같기도 하지만 이제는 아닙니다...", - "당신이 손을 뻗자 뱀이 @겁에@ @질렸고@ 비명을 지르며 뒷걸음 칩니다. ~\"스스스슷~ ~수집하려는~ ~거구나!\"~ NL NL ~\"나보다~ ~훨씬~ ~탐욕스러워.~ ~제에에에에에발,~ ~나를~ ~내버...\"~ NL 당신은 버러지 따윈 신경 쓰지 않습니다. 그의 영혼은 당신의 것이 되었습니다. 앞으로도 영원히 말이죠." - ], - "OPTIONS": [ - "[승낙] [때린다] #g영혼을 #g", - " #g얻습니다. #r저주를 #r받습니다 #r- #r의심.", - " #g얻습니다. #r저주를 #r받습니다 #r- #r의심.", - "[거절]", - "[떠난다]" - ] - }, - "downfall:WingStatue": { - "NAME": "날개 조각상", - "DESCRIPTIONS": [ - "돌과 바위들 사이에서, 당신은 날개 모양의 복잡하고 커다란 푸른 조각상을 발견했습니다. NL 조각상 틈새로부터 쏟아져 나오는 #y금화 를 발견했지만, 당신에게는 아무런 가치가 없습니다. 하지만 조각상이라면 말이 다르겠죠...", - "깨어난 자의 광신자들과 만날지도 모르니, 당신은 부서진 조각상을 가져갑니다. 이걸로 교단의 신도들에게 당신의 대의를 증명할 수 있겠죠.", - "당신은 있는 힘껏 조각상을 후립니다. NL 그러자 곧 치명적으로 날카로운 조각이 @사방으로@ @튑니다.@ 당신은 파편을 쥐고 길을 나섭니다.", - "당신은 지나쳐 버리고는 가던 길을 갑니다.", - "까...까악?! 새의 신님께 바칠 공물?", - "까악-까아악!!", - "교환을? 괜찮은 제안이로군...", - "교단에서 만족스러워하겠군..." - ], - "OPTIONS": [ - "[파괴한다] #r영혼을 #r", - " #r잃습니다. #g날카로운 #g조각을 #g얻습니다.", - "[수집한다] #r체력을 #r", - "[떠난다]", - " #r잃습니다. #g부서진 #g날개 #g조각상을 #g얻습니다." - ] - }, - "downfall:GoldenIdol": { - "NAME": "황금 우상", - "DESCRIPTIONS": [ - "당신은 눈에 띄지 않는 곳에서 받침대 위에 평화로이 앉아있는 #y빛나는 #y황금 #y우상 을 발견했습니다. 엄청난 가치가 있어보입니다. NL NL 떠도는 모험가들이 탐낼만한 물건임이 분명해, 함정을 설치할만한 가치가 있어 보입니다.", - "당신은 눈에 띄지 않는 곳에서 받침대 위에 평화로이 앉아있는 #y빛나는 #y황금 #y우상 을 발견했습니다. 엄청난 가치가 있어보입니다. NL NL 모험가의 시신은 거대한 물체에 짓눌린 채 복도 아래 조금 떨어진 곳에 놓여있었습니다. 모험가의 영혼은 아직도 이곳에 머물러있습니다.", - "우상의 무게를 촉매로 주위의 거대한 바위가 무너지도록 간단한 함정을 설치하면, 누군가 #y빛나는 우상을 가져가려 할 때 함정이 발동할 겁니다. NL 함정 설치에 만족한 당신은 발걸음을 옮깁니다.", - "당신은 모험가의 영혼을 체내로 흡수하여 에너지를 만들어냅니다.", - "받침대는 그대로 두기로 했습니다. 함정 설치는 당신 수준에 걸맞은 일이 아니니까요.", - "당신은 영혼을 그대로 내버려두고 가던 길을 갑니다." - ], - "OPTIONS": [ - "[함정 설치] #r타격을 #r1장 #r제거합니다.", - "[수확] #g영혼을 #g", - " #g얻습니다.", - "[떠난다]", - "[잠김] 타격 1장이 필요합니다." - ] - }, - "downfall:Cleric": { - "NAME": "성직자", - "DESCRIPTIONS": [ - "금색 투구(?)를 낀 이상한 푸른색의 인간형 생물이 크게 미소지으며 당신에게 다가옵니다. NL 당신이 어떤 존재인지 깨닫는 순간, 이 생물의 환한 웃음은 순식간에 공포에 물든 표정으로 바뀝니다. NL ~\"괴-괴물이다!!\"~ 겁에 질려 소리를 지르더니 몸을 돌려 달아나려고 합니다.", - "단 한 방에 푸른색 살덩어리로 전락합니다. 당신은 성직자의 #y영혼을 흡수하고는 발걸음을 옮깁니다.", - "\"성직자 살려! 성직자 살려줘!\" 당신이 위협적으로 다가가자 성직자가 소리칩니다. NL 푸른색의 차가운 불꽃이 당신의 몸을 감싸더니 없어집니다. NL 그러자마자 \"성직자\"는 달아나 버렸습니다." - ], - "OPTIONS": [ - "[때린다] #g영혼을 #y", - "[위협한다] #g카드을 #g1장 #g제거합니다.", - "[얻는다]", - "제거할 카드를 고르십시오.", - " #y얻습니다." - ] - }, - "downfall:Ghosts": { - "NAME": "유령 의회", - "DESCRIPTIONS": [ - "계속 내려가다 보니, #p~짙고~ #p~검은~ #p~연기~ 가 주변의 땅과 벽에서 차오르더니 가면을 쓴 세 형상으로 합쳐집니다. NL NL ~\"내가~ ~보기엔~ ~심장의~ ~또~ ~다른~ ~하수인인~ ~것~ ~같은데\"~ NL #r@\"동의하네!@ #r@그것은@ #r@항상@ #r@약해빠진@ #r@졸개들을@ #r@보낸단@ #r@말이지!\"@ NL NL 당신은 세 번째 존재가 지나칠 정도로 큰 미소를 짓는 걸 알아챕니다. NL \"다른 자들은 신경쓰지 말게... 우리의 #y~힘~ 을 맛보고 싶은가?\" ", - "@\"공물이라!@ 꽤나 ~매력적이군...\"~ NL NL 유령의 형상을 한 것이 말을 하면 할수록 그것의 큰 입이 점점 더 커지는 것을 알아챕니다. 몸 안에서 죽은 이들에게 수집한 #b~영혼~ 이 강제로 소용돌이치며 거대한 입속으로 빨려들어갑니다. 당신은 거기에 휘말려 들어가지 않으려고 안간힘을 다 해 버팁니다. NL NL 의식을 잃기 직전에야, 소용돌이는 잦아들었고 유령의 형상을 한 것은 에테르 속으로 녹아들어 사라져버렸습니다. NL NL 당신은 #b공허함 을 느끼지만 계속 나아갑니다.", - "당신이 다가가자 유령의 형상을 한 것이 낄낄대기 시작합니다. NL NL #r@\"아하!@ #r@우리의@ #r@좋은@ #r@친구@ #r@아닌가!\"@ NL 그들은 연기처럼 부풀어 올라 공간을 가득 메웁니다... NL NL \"여기 ~평소처럼~ 들게, 퍽 괜찮지 않은가?\"" - ], - "OPTIONS": [ - "[바친다] #r영혼을 #r", - " 잃습니다. #g영체화 를 1장 받습니다.", - "[잠김] 영혼이 ", - " 필요합니다." - ] - }, - "downfall:CursedTome": { - "NAME": "저주받은 고서", - "DESCRIPTIONS": [ - "당신은 버려진 사원에서 거대한 책을 발견하고 열어서 #p@수수께끼@ #p@같은@ #p@글@ 발견합니다. NL NL 자세히 글을 해석할 필요는 없습니다. 왜냐하면 이미 글이 가진 힘과 어떤 #r대가 를 치르는 지 알고 있기 때문입니다.", - "대가를 알고는 저 책의 대가를 치르기로 합니다. 받침대를 향해 손을 뻗는 순간, 고서가 당신의 무수히 많은 영혼을 긁으며 #r천 #r가지 #r목소리 로 최면을 걸어옵니다! NL NL 간신히 책을 얻어내고는 이전보다 더 타락한 상태로 #b~진이~ #b~빠진~ #b~채~ 사원을 빠져나갑니다." - ] - }, - "downfall:ForgottenAltar": { - "NAME": "잊힌 제단", - "DESCRIPTIONS": [ - "당신은 제단에 서서 내면의 영적 에너지를 전달합니다. NL 여신에게 바치는 공물로 영혼이 쏟아져나오자 달래주는 듯 조각상의 팔들이 뻗어 나와 #p~저주의~ #p~마법~ 을 뿜어냅니다. NL 모든 것이 어둠으로 뒤덮입니다. NL 잠시 후 깨어나자 단잠을 잔 듯 전투로 인한 상처가 모두 나아있었습니다.", - "잠시 악이 깃든 조각상을 우러러보고는 다시 발길을 돌려 도시로의 여정을 떠납니다." - ], - "OPTIONS": [ - "[영혼을 제공한다] #r영혼을 #r", - " #r잃습니다. #g체력을 #g", - " #g회복합니다.", - "[잠김] 영혼이 ", - " 필요합니다.", - "[떠난다]" - ] - }, - "downfall:Bandits": { - "NAME": "붉은 가면 도적단", - "DESCRIPTIONS": [ - "당신은 커다란 #r붉은 #r가면 을 착용한 도적 무리와 맞닥뜨렸습니다. NL \"이봐, 지나가고 싶- 이런, ~괴물이잖아.~ 우리 서비스가 필요하진 않아?\"", - "정말 고마워, 멍청아! 분명 이 선택을 후회하지 않을거야..." - ], - "OPTIONS": [ - "[", - " 유물을 잃습니다] #g도적단을 #g고용합니다.", - "[잠김] 유물이 필요합니다." - ] - }, - "downfall:Nloth": { - "NAME": "느로스", - "DESCRIPTIONS": [ - "이 바닥에 사는 첨탑 생물이 아니라고 결론 짓자마자 느로스의 상자를 쳐서 뺏고는 휘두릅니다. NL NL 극심한 고통에 느로스의 몸이 넘어가자 반사적으로 @촉수를@ @휘둘러@ 당신에게 #r고통스러운 #r자국 을 남깁니다! NL NL 생명을 다한 몸이 땅에 넘어가자 덜컥이는 소리와 함께 눈을 매료시키는 장신구를 보게 됩니다. 그가 쓰레기 더미를 뒤지던 것처럼 그의 몸을 뒤지자 강력한 마법의 유물을 발견할 수 있었습니다." - ], - "OPTIONS": [ - "[때린다] #g무작위 #g유물을 #g얻습니다. #r저주를 #r받습니다 #r- #r고통." - ] - }, - "downfall:KnowingSkull": { - "NAME": "뭐든지 아는 해골", - "DESCRIPTIONS": [ - "당신은 장식으로 꾸며진 낡은 방에 들어섭니다. 화려하게 장식된 받침대 위에 놓여진 커다란 해골이 방 한가운데에 있습니다. 가까이 다가가자 해골이 #g@갑자기@ #g@불꽃을@ #g@내뿜으며@ 당신을 바라봅니다. NL NL \"무엇을 구하는가? 무엇을 바칠 것인가?\" NL 해골이 말을 마침과 동시에 뒤에 있던 문이 @쾅@ @닫힙니다.@", - "\"자자자자자잠깐나한테손-\" NL NL 해골의 말은 무시하고 받침대에서 잡아채자 순간 #r불길이 해골을 그을리고 맙니다. 나중에 유용한 데가 있겠죠...", - "\"뒤쪽이다, 필멸자야.\" NL 해골의 뒤를 슬쩍 보자 아니나 다를까 문이 있군요." - ], - "OPTIONS": [ - "[너.] #g해골을 #g얻습니다. #r체력을 #r", - "[떠난다] ", - " #r잃습니다." - ] - }, - "downfall:Vagrant": { - "NAME": "애원하는 부랑자", - "DESCRIPTIONS": [ - "당신은 남자를 죽이고 영혼을 수확합니다. 뒤에서 약 냄새가 나는 ~중독자들이~ ~몰려듭니다.~ NL \"저 녀석이 방금 부르고뉴를 죽였어!\" 누군가 외치자, 이곳에서 마주쳤던 부랑자들보다 더 많은 이들이 다가옵니다. NL NL 탈출에는 성공했지만 #r물린 #r상처와 #r긁힌 #r상처투성이네요.", - "당신은 그의 손아귀에서 #y귀중해 #y보이는 #y유물 을 낚아채고 달아납니다. NL 뒤에서 소리가 들립니다. NL \"부끄럽지도 않느냐? #r~자존심도~ ~없는~ ~거어어냐고오?!\"~ NL 그러나 당신은 부끄러움 따윈 모릅니다. 첨탑의 지배자에게 도둑맞는 건 영광이니까요!", - "당신은 장난감 따윈 관심 없습니다. 역시 그의 ~영혼이~ 제일 쓸만하겠죠. 당신이 @팔을@ @뻗자@ 부랑자는 훌쩍일 수밖에 없었습니다..." - ], - "OPTIONS": [ - "[때린다] #g영혼을 #g85 #g얻습니다. #r체력을 #r", - " #r잃습니다.", - "[턴다] #g유물을 #g얻습니다. #r저주를 #r받습니다 #r- #r긍지." - ] - }, - "downfall:Beggar": { - "NAME": "늙은 거지", - "DESCRIPTIONS": [ - "황금 투구(?)를 낀 이상한 푸른 색의 인간형 생물이 크게 미소지으며 당신에게 다가옵니다. NL 당신이 어떤 존재인지 깨닫는 순간, 이 생물의 환한 웃음은 순식간에 공포에 물든 표정으로 바뀝니다. NL ~\"괴-괴물이다!!\"~ 겁에 질려 소리를 지르더니 몸을 돌려 달아나려고 합니다.", - "늙은 거지는 어리둥절한 듯 주위를 둘러봅니다. 그는 당신을 무시하고 이곳을 쭉 훑더니 당신을 힐끔 쳐다봅니다. NL \"젊고 푸른 피부를 가진 남자 못봤나? 특이한 황금 투구를 쓴? 주로 도시에 와서 헌금으로 먹을 걸 나눠주고는...\" NL 거지는 조금 전에 해치운 #b성직자 를 찾는 게 분명해 보이네요.", - "@\"겁내지@ @말라고,@ @늙은이.@ @네@ @생각보다@ @더@ @빨리@ @그@ @친구를@ @만날@ @테니까.\"@ NL NL 거지는 방어하기 위해 안간힘을 쓰지만 당신은 손쉽게 그를 쓰러뜨립니다. NL 골목을 뒤로하고 당신은 오늘 한 일에 #y긍지 를 느끼며 앞으로 걸어 나갑니다.", - "이 남자는 충분히 고통받았으니까요. 당신은 그를 살려 두기로 하고 자리를 옮깁니다.", - "거지는 망토를 벗어 던지고 본인이 #b성직자 임을 드러냅니다! NL @\"끔찍한@ @영혼이로구나.@ @성직자는@ @경호원을@ @고용했다고!\"@ 그가 외칩니다. NL NL 골목에서 완전 무장을 한 두 덩치가 나왔습니다. 당신이 반응하기도 전에 검을 뽑아 달려듭니다!", - "#b성직자 의 경호원을 죽이고 그를 다시 골목 구석으로 몰아넣습니다. 그는 겁에 질려 몸을 떨고 있습니다.", - "단 한 방에 푸른색 살덩어리로 전락합니다. 당신은 흡족하게 성직자의 #y영혼 을 흡수하고는 발걸음을 옮깁니다. NL NL 당신이 길을 나설 때 다른 거지들이 건물 뒤편과 골목에서 유심히 쳐다보고 있었다는 것을 깨달았습니다. 당신은 그들의 공포를 누립니다. 첨탑의 지배자에게 덤비면 어떻게 되는지 교훈이 되었겠죠.", - "\"성직자 살려! 성직자 살려줘!\" 당신이 위협적으로 다가가자 성직자가 소리칩니다. NL 푸른색의 차가운 불꽃이 당신의 몸을 감싸더니 없어집니다. NL NL 당신은 그의 힘이 유용하고 다시 경호원을 고용해도 쉽게 처리할 수 있기 때문에 이 \"성직자\" 를 한 번 더 살려 두기로 합니다." - ], - "OPTIONS": [ - " #r저주를 #r받습니다 #r- #r긍지.", - "[싸운다]", - "[위협한다] #g덱에서 #g카드를 #g2장 #g제거합니다." - ] - }, - "downfall:Mausoleum": { - "NAME": "영묘", - "DESCRIPTIONS": [ - "일련의 무덤 사이를 지나가던 중, 원형 방의 중심에 놓인 ~보석으로~ ~가득한~ 커다란 석관과 마주쳤습니다. NL 관에 적혀 있는 글을 알아볼 수는 없지만, #p~검은~ #p~안개~ 가 옆에서 스며 나오는 것을 볼 수 있습니다. NL 당신에게 이 안개는 익숙한데, 분명 #y~영혼의~ 신호였죠.", - "당신은 그들의 영혼을 모으며 #p~영혼~ #p~안개~ 를 흡수합니다. 하지만 떠나면서 당신은 #r@뭔가@ #r@오싹한@ #r@느낌을@ 받기 시작했습니다..." - ], - "OPTIONS": [ - "[포식] #g영혼을 #g200 #g얻습니다. #r저주를 #r받습니다 #r- #r귀신들림." - ] - }, - "downfall:Nest": { - "NAME": "둥지", - "DESCRIPTIONS": [ - "길게 줄지어 늘어선 #b~모자를~ #b~눌러쓴~ #b~무리~ 가 #p알려지지 #p않은 #p대성당 으로 들어서는 것이 보입니다. NL 당신이 성당에 들어서는 순간 군중들이 돌아봅니다! NL NL 순식간에 대성당이 헉하는 소리, 환호하는 소리, 그리고 까악거리는 불협화음으로 가득 찹니다. 광신자 중 하나가 제물을 들고 당신에게 다가옵니다.", - "제단 위에 놓인, 위험해 보이는 무기에 눈독 들인 당신은 줄을 선 광신자들을 베어버리고 간단하게 물건을 가져갑니다. 당신은 빠르게 #r광신자들에게 포위당합니다! NL NL #r@\"살인자!!@ #r@살인자@ #r@살인자!!\"@ NL #b~\"까악~ #b~까악~ #b~까아아아아아악!\"~ NL NL 광신자들은 빠르게 가진 단검을 뽑아 듭니다. 당신은 그들을 #r가르고 #r베고 #r밀치면서 건물을 빠져나옵니다.", - "광신자의 제물을 받아들이고 그의 손에 들려있던 이상한 엘릭서를 가져갑니다. NL NL 광신자들이 당신을 위해 @구호를@ @외칩니다!@ NL NL #b~\"까악~ #b~까악~ #b~까아아아아아악!!\"~ NL NL 당신도 함께 구호를 외칩니다. 안 될게 있나요? 광신자들은 이상한 집단이지만 당신의 동료 지배자를 잘 섬기고 있으니까요.", - "#r@\"새의@ #r@신님께서!!@ #r@돌아오셨다!!\"@ NL #b~\"까악~ #b~까악~ #b~까아아아악!\"~ NL NL 열렬한 환호로 맞이해주는 광신자들을 헤치다, 곧 지도자와 직접 마주하게 됩니다. 멋진 옷을 입은 광신자가 당신의 손에 #y화려하게 #y장식된 #y단검 을 쥐어줍니다.", - "무슨 일이 벌어질지 모르는 채, 당신은 단검을 가져갑니다. 광신자들의 지도자는 로브 안에 손을 넣어 #b기름진 #b파란 #b혼합물 을 내어줍니다.", - "지도자를 둘러싼 광신자들이 곧바로 단검과 포션을 그에게 가져다줍니다. 그는 당신에게 행동을 따라 하라고 손짓합니다.", - "당신은 지도자의 의식 과정을 따라 합니다. 포션의 코르크 마개를 따서 액체를 부드럽게 단검에 약간 붓습니다. 대성당의 불빛이 칼날에 비쳐 #b~섬뜩한~ #b~빛깔~ 을 내는 것만 같습니다. NL NL 지도자의 손짓이나 말 한마디 없이 두 광신자가 앞으로 다가옵니다. 한 명은 당신에게, 한 명은 지도자에게 갑니다. NL NL 이제 그들이 무엇을 원하는지는 극도로 명확해졌습니다.", - "#r당신은 #r단검을 #r광신자의 #r심장에 #r꽂습니다! NL NL #b~\"까악~ #b~까악~ #b~까아아아악!\"~ NL NL 의식을 마치자 살아남은 광신자들은 더할 나위 없이 행복해 보입니다. 그들은 축하의 의미로 막대기를 흔들며, 당신이 대성당을 빠져나올 때도 계속해서 까악거리며 환호성을 지릅니다." - ], - "OPTIONS": [ - "[조각상을 돌려준다] #r부서진 #r날개 #r조각상을 #r잃습니다. #g많은 #g보상을 #g얻습니다.", - "[잠김] 부서진 날개 조각상이 필요합니다.", - "[받아들인다] #g광신자 #g포션을 #g얻습니다.", - "[훔친다] #g의식용 #g단검을 #g얻습니다. #r체력을 #r", - " #r잃습니다.", - "[떠난다]", - "[계속한다]", - "[단검을 받는다] #g의식용 #g단검을 #g받습니다.", - "[세례를 받는다] #g의식용 #g단검을 #g강화합니다.", - "[희생] #r의식용 #r단검+으로 #r광신자를 #r죽입니다.", - "[찬사를 받는다] #g부서진 #g날개 #g조각상을 #g돌려주고 #g보상들을 #g받습니다." - ] - }, - "downfall:Colosseum": { - "NAME": "콜로세움", - "DESCRIPTIONS": [ - "첨탑을 따라 계속해서 내려가다 보니, 당신은 거대한 경기장 근처에서 매복하던 자들을 발견합니다. 다가가자 깜짝 놀란 노예상인이 재빨리 어찌 된 사정인지 설명합니다. NL NL \"우리는 도시에 침입한 자들을 기다리고 있다구. 너도 그들이 목적이잖아! 갓 잡아서 싱싱한 포로를 관중들도 기다리고 있어. 모두들 #r싸움부터 #r죽음까지 정말 사랑하니까!\"", - "노예상인들은 적대적이지도 않고 당신의 먹잇감에 상처를 입혀 움직임을 둔하게 하니 크게 도움이 될 것입니다. NL NL 이 혈투는 그냥 넘기기엔 너무 매력적입니다...", - "당신은 수많은 #b노예상인들과, #p광신자, 그리고 도시의 다른 주민들로 가득 찬 거대한 경기장에 들어섭니다. NL NL ", - "@\"챔피언을@ @데려와라!\"@ 붐비는 경기장 한가운데서 그들의 챔피언에게 도전장을 내밉니다. NL 두 도전자가 다가와 당신이 첨탑의 지배자라도 이 아레나에서는 봐주지 않는다고 경고합니다. NL NL 당신은 그 누구에게도 뒤지지 않는다고 자부합니다.", - "@\"다음@ @녀석은@ @내@ @몫이다!\"@ 붐비는 경기장 한가운데서 외치자 관중은 거대한 경기장을 가득 메우는 박수갈채로 화답합니다. NL NL 얼마 지나지 않아 노예상인들이 갓 잡은 포로를 끌고 옵니다. ~기습당해~ 얼떨결에 끌려온 도전자가 정신을 차리더니 자세를 가다듬습니다. NL NL 이거 일이 재밌어지겠네요.", - "구미가 당기긴 했지만 여기서 싸우는 불필요한 낭비라고 생각합니다. 당신은 가던 길을 가기로 했고 노예상인은 남아 다시 매복합니다." - ], - "OPTIONS": [ - "[도전한다] #r아레나 #r챔피언과 #r싸웁니다. #g많은 #g보상을 #g얻습니다.", - "[참가한다] #r사로잡힌 #r영웅과 #r싸웁니다. #g많은 #g보상을 #g얻습니다.", - "[떠난다]", - "[싸운다!]", - "[계속한다]" - ] - }, - "downfall:MindBloom": { - "NAME": "의식의 개화", - "DESCRIPTIONS": [ - "아름다운 저편을 가로지르며 걷는 당신의 생각이 갑자기 매우... #p~현실적으로~ 느껴지기 시작합니다... NL NL 상상 속에 있던 #r죽인 #r모험가 와 #b비축한 #b영혼 들이 현실 속에서 모습을 드러냅니다. NL 그 감각은 순식간에 사라져가고 있습니다. 어떻게 할까요?", - "당신은 예전에 이곳에 와본 적이 있습니다. NL NL 똑같이 모험가를 사냥했었죠. NL NL 이건 현실인 걸까요? NL NL 당신은 몇 번이나 죽었던 걸까요?", - "모든 것이 합리적으로 돌아옵니다. NL 단 하나의 목적, 하강, #p심장. NL NL 이것이 항상 유지되어왔던 방식입니다. NL 이것이 언제까지나 유지될 방식입니다. NL 이 모든 것은 다시 곧 잊혀지게 될 것입니다..." - ], - "OPTIONS": [ - "[나는 메아리다] #r자기 #r자신과 #r싸웁니다. #g희귀 #g유물을 #g얻습니다.", - "[나는 부유하다] #g영혼을 #g999 #g얻습니다. #r저주 #r- #r규칙 #r준수 #r2장.", - "[나는 완전하다] #g모든 #g카드 #g강화. #r부담을 #r얻습니다.", - "[잠김] 심장의 축복이 3개 필요합니다.", - "[떠난다]", - "[나는 완전하다] #g모든 #g카드 #g손실. #r부담을 #r얻습니다." - ] - }, - "downfall:MoaiHead": { - "NAME": "모아이 석상", - "DESCRIPTIONS": [ - "당신은 저편의 아름다운 상징물인 커다란 벽의 단편에 있는 거대한 돌무더기 머리 쪽으로 돌아가기로 합니다. NL NL 머리의 입은 활짝 열려있으며, 피로 붉게 얼룩진 커다랗고 겁주는 이빨을 드러냅니다. 석상의 표면은 머리의 입에 몸을 던져 삼켜지는 사람들을 가리키는 듯한 상형문자 투성이입니다.", - "대가를 피로 지불해야 한다는 것을 아는 당신은 석상의 입 안으로 발을 들여 석상이 작동되기를 기다립니다. 잠시 후 커다란 어금니가 쾅하고 내려오며 완전히 당신을 으스러뜨립니다. NL @어둠.@ NL 어둠 속에서 시간이 좀 지난 후, 빛 한 조각이 보입니다. 그리고 돌 이빨이 천천히 올라가는 소리가 들린다는 것을 알아차렸습니다. NL NL 석상의 마법으로 편히 휴식한 채 길을 떠납니다.", - "석상 입 안으로 발을 들이자 어마어마한 #b영적인 #b에너지가 체내로 흘러들어옵니다. 석상의 눈에 #b~불길이~ #b~일더니~ 커다란 어금니가 내려오며 당신을 으스러뜨립니다. NL 온 사방에 #b~푸른~ #b~빛이~ 가득합니다. NL NL 돌 이빨이 올라가자 당신은 완전히 활기를 되찾았고 이전보다 더 강력해진 느낌이 들었습니다.", - "무슨 일이 벌어질까 생각하며 길을 떠납니다." - ], - "OPTIONS": [ - "[영혼을 바친다] #r영혼을 #r", - " #r잃습니다. #g최대 #g체력 + #g", - " #g, #g체력 #g모두 #g회복.", - "[잠김] 영혼이 ", - " 필요합니다.", - " #r잃습니다. #g모든 #g그렘린이 #g최대 #g체력을 #g", - "[안으로 뛰어든다] #g체력을 #g모두 #g회복합니다. #r영혼을 #r" - ] - }, - "downfall:SensoryStone": { - "NAME": "감각석", - "DESCRIPTIONS": [ - "#g~자만.~ NL NL 삶은 아름답고 참으로 감명 깊습니다... #g슬라임 일지라도 말이죠. NL NL 당신은 위대한 일을 해낼 운명이란 걸 항상 알고 있었습니다. 다른 이들은 금화나 날붙이에 안주하지만 당신은 아닙니다. 당신은 포식자처럼 무언가 특별한 것, 독특한 것, ~엄청난~ ~것을~ 기다립니다. NL NL 며칠이고... 몇 달이고... 몇 년이나... 첨탑에서 이루 말할 수 없는 나날이 흐르다, 마침내 당신은 그것을 발견하게 됩니다. 당신은 더는 덩어리로만 있지 않을 것입니다! 그들은 #y금화 와 #y장신구 를 가지고 있지만 당신은 더 좋은 걸 가지고 있죠... NL NL @바로@ @이@ @작은@ @중절모@ @말이죠!@ 정말 근사합니다!", - "#y~노쇠.~ NL NL 당신의 가슴에 #r검 이 박히고 #b환호성 이 귀를 가득 메웁니다... 마지막으로 얼굴에 주먹이 날아들어오고 이윽고 눈이 감깁니다. NL NL 낯선 방에서 깨어났지만 @움직일@ @수@ @없습니다.@ 말을 하려해도 아무 말도 나오지 않은 채 시야는 #g녹색 #g안개로 가려져 있습니다. 이건 꿈일까요? 여긴 사후세계인 걸까요? 기억해내려 애썼지만, 기억도, 팔다리도, 모두 흩어져있었습니다. NL NL 당신의 머릿속에서 단 하나의 명령이 떠오릅니다. #g\"균형은 #g강화되어야만 #g한다. #g태초를 #g지켜라.\"", - "#p~절망.~ NL NL #y관찰. #y기억. #y생존. 이게 와쳐의 임무입니다. 당신의 임무는 정체불명의 첨탑을 조사하는 것입니다. 육각형의 방에 들어서자마자 반응할 새도 없이 @뒤에@ @문이@ @무너져내립니다!@ NL NL 탈출구는 없습니다. 유일한 길은 받침대 위에 마법이 서려 있을 게 분명한 석판을 가져 오는 것뿐이었습니다. 유물이 피부에 닿는 그 순간, 당신의 몸이 ~형체도~ ~없이~ ~녹아내렸고~ 당신의 #p영혼 은 #p석판 에 빨려 들어갔습니다. NL NL 당신의 운명은 영원히 #p석판에 묶여 영겁의 세월 동안 #r저주받은 채로 첨탑을 헤매게 될 것입니다.", - "#y~무관심.~ NL NL 당신은 첫 번째로, ~모양기를~ 모셨습니다. 당신은 약점을 지니지 않은 채 태어나지 않고, '완벽'하게 생성되었습니다. 당신의 도식으로 수많은 구조물이 생성되었습니다. 창조주의 유산인 #y자동인형 덕에 말이죠. NL NL 하나하나가 다 완벽한 디자인이었고 모두 특정 목적에 부합했습니다. 도시의 균형을 유지하기 위해, 단 하나만 제외하고 말이죠. NL 당신은 #y결함 을 가장 높은 곳에 자리 잡은 창밖으로 내던져버렸고 그것은 첨탑 밑바닥까지 떨어져 나뒹굴었습니다. 이후 당신은 도시의 수호자 자리를 대신하게 되었습니다. NL NL 균형은 강화되어야만 하니까요.", - "#b~교만.~ NL NL 당신은 웅장한 경기장의 중심에 서 있습니다. 당신의 모든 노력이 이 단 한 번의 전투으로 결실을 맺습니다. 당신은 적의 체력을 소모시켜 틈이 생길 때까지 #b수비자세를 #b취합니다. 마지막 온 힘을 다해 상대방의 가슴에 #r검을 #r찔러 #r넣습니다. 관중석에 @우레와@ @같은@ @박수가@ @터져나옵니다!@ NL NL 당신은 승리만으로 그치지 않고 ~적의~ ~안면에다~ ~주먹을~ ~갈겨~ 최후의 모욕적인 일격을 날립니다. NL NL 이제 당신의 앞길을 막는 이는 그 누구도 없습니다. 당신이 바로 새로운 #b@챔피언입니다!@", - "#p~탐욕.~ NL NL #b권력의 #b유혹을 이겨낼 자는 거의 없을 것입니다. 그러나 권력에는 대가가 따르고, 위대한 권력에는 더 큰 대가가 따릅니다. NL NL 당신은 콜로세움이 내려다 보이는 왕좌에 앉아 #b챔피언 의 영광을 위해 #r죽을 #r때까지 #r싸우는 #r사람들을 흥미롭게 지켜봅니다. #g~영원한~ #g~영혼의~ #g~불꽃이~ 당신을 모십니다. 발을 들인 대가로 석판에 이름이 새겨져 사후세계의 당신에게 묶인 이들이죠. NL NL 한 전사가 안면에 강타를 날려 쓰러뜨리자 관중들은 환호성을 내지릅니다. 당신이 금고로 가보니 누군가 침입한 듯합니다. 함정은 작동됐지만 아무것도 찾을 수 없었습니다... 그리고 #p@석판도@ @사라졌습니다!@", - "#g~비탄.~ NL NL 당신은 마침내 첨탑의 정상에 서게 되었습니다. 당신은 위대한 자의 기념비인 이 거대한 건축물을 세우기 위해 지칠 줄 모르고 세월과 인생을 바쳤습니다. 정말이지 완벽한 #g곡선입니다. 모든 #y경계가 꼼꼼하게 설계되어 있습니다. NL NL “이제 끝났어요, 내 사랑.” 무기물의 손을 당신은 살포시 감싸고는 기계 전원을 켭니다. 부드러운 시동소리가 방을 가득 메우고 곧 당신의 #b~정수가~ 격렬히 빠져나가 창조물과 여러 가지 것들에 섞여 들어갑니다. 당신이 계획한 대로 둘 다 영원히 이곳에서 살아가게 될 것입니다. NL NL 메아리와 함께... #p심장의 ~첫~ ~고동~ ~소리가~ 울려 퍼집니다.", - "#b~분노.~ NL NL 당신은 가슴에 꽂혀 들어오는 #y화려하게 #y장식된 #y단검 을 어찌할 힘이 없었습니다. 최후의 순간, 이 첨탑을 다스리는 #p신에게 ~어떠한~ ~대가를~ 치러도 좋으니 살아남을 힘을 달라고 간절히 빕니다. NL NL 당신의 #p심장 은 마지막으로 격렬하게 고동치더니 이내... 고요해졌습니다. 하지만 사력을 다해 생명을 되찾아 #b@푸른@ #b@불꽃을@ 튀며 눈을 번뜩 뜹니다. 그리고는 구속을 쉽사리 끊어버리고 당신을 #b@둘러싼@ #b@로브를@ #b@입은@ #b@이들에게@ 포효합니다! NL NL 당신의 몸이 #b괴물의 #b형상으로 변하는 것이 느껴지자 앞에 있는 이들은 당신을 향해 절을 올립니다.", - "#p~오만.~ NL NL 이곳을 지배하는 #p신과 #p같은 #p심장 은 당신의 운명을 좌우합니다. 이제 조치를 취해야 할 #y시간 입니다. NL NL 저편은 첨탑의 구역 중 가장 경비가 덜한 곳이라 당신은 쉽게 #y금고에 잠입할 수 있었습니다. 강력한 유물이 많이 있었지만 유독 눈길을 끄는 ' #y~빛나는~ #y~회중시계~ '가 있었습니다. NL NL 굴하지 않는 자신감으로 손을 뻗고는, 회중시계를 낚아... @...아낚@ @를계시중회@ @,는고뻗@ @을손@ @로으감신자@ @는않@ @지하굴@ NL NL 이곳을 지배하는 #p신과 #p같은 #p심장을 자극... 한건가요...?", - "다시 생각해보니, 추억은 추억으로 남는 게 제일 좋을지도 모르겠네요." - ], - "OPTIONS": [ - "[회상] #g1장의 #g보스 #g카드 #g보상을 #g획득합니다.", - "[회상] #g2장의 #g보스 #g카드 #g보상을 #g획득합니다. #r체력을 #r", - "[회상] #g3장의 #g보스 #g카드 #g보상을 #g획득합니다. #r체력을 #r" - ] - }, - "downfall:SecretPortal": { - "NAME": "비밀 포탈", - "DESCRIPTIONS": [ - "반가운 광경이 펼쳐지고 있었습니다. #p~소용돌이치는~ #p~마법의~ #p~포탈~ 이 있는 돌 입구를 저편의 움직이는 벽이 둘러싸고 있습니다. NL NL 이 포탈은 저편의 지배자들과 빨리 접촉할 수 있습니다. 하지만 당신이 동력을 가져간다면 첨탑을 내려가는 여정이 앞당겨질 것입니다.", - "포탈은 나중에 언제든지 복구할 수 있습니다. 당신은 포탈에 동력을 공급하는 룬스톤을 캐고는, 재빨리 다음 목적지를 고민합니다. 이 돌은 잠시깐이지만 유용할 것입니다." - ], - "OPTIONS": [ - "[가져간다] 보스를 제외한 방으로 이동할 수 있습니다." - ] - }, - "downfall:TombRedMask": { - "NAME": "붉은 가면 왕의 무덤", - "DESCRIPTIONS": [ - "둥둥 떠있는 길의 반대 쪽에 매우 화려하게 장식된 무덤이 보입니다. NL NL 무덤에 이르자 당신은 비밀 장소가 있어 보이는 부드러운 벽을 발견합니다. 공격 한 번이면 충분히 부술 수 있을 것 같군요.", - "당신은 #r가면을 씁니다. 당신을 도와주기로 계약한 도적단은 이곳의 왕과 연관이 있어 보입니다. 아마 그들은 당신의 새 장신구에 영감을 받았던 거 같네요.", - "무덤에서 구멍이 열리더니 메모가 붙은 작은 붉은 가면이 슬며시 튀어나옵니다. \"내가 너에게서 취하듯이 남의 것을 취하여라!\"", - "무덤을 훼손하지 않기로 하고는 계속 나아갑니다.", - "가면을 수집한 데 만족하고는 계속 나아갑니다." - ], - "OPTIONS": [ - "[붉은 가면을 쓴다] #g도적단과의 #g계약을 #g강화합니다.", - "[잠김] 필요: 붉은 가면 & 도적단과의 계약.", - "[후려친다] ", - " #r카드를 #r잃습니다. #g붉은 #g가면을 #g얻습니다.", - "[잠김] 공격 카드가 필요합니다.", - "[떠난다]" - ] - }, - "downfall:WindingHalls": { - "NAME": "돌고도는 회랑", - "DESCRIPTIONS": [ - "구불구불한 길을 따라 천천히 걸어가다 당신은 저편의 악명높은 돌고 도는 회랑에 있단 걸 깨닫습니다. 작은 생명체들은 길을 찾으려고 하면 미치겠지만, 당신에게는 마치 오랜 친구처럼 친숙합니다. NL NL 머릿속에서 계속해서 들리는 #p~속삭이는~ #p~목소리~ 가 어느 길로 가야 할지 결정해줍니다." - ], - "OPTIONS": [ - "[왼쪽] #g이벤트를 #g탐사합니다.", - "[오른쪽] #g보물 #g상자에서 #g유물을 #g찾습니다.", - "[직진] #g상인을 #g추적합니다." - ] - }, - "downfall:Joust": { - "NAME": "마상 시합", - "DESCRIPTIONS": [ - "커다란 건물들 사이를 지나가던 중, 길고 좁은 다리와 마주쳤습니다. 다리의 양 끝에는 기사들이 서로를 마주보고 있습니다. 당신이 다가가자, 그들은 서로를 노려보고는 흩어집니다. NL \"괴물! 네가 죽이는 걸 그렇게 잘한다면, 저것과 싸워라!\" NL \"아니, 네가 싸워라! 괴물들을 더 잘 알지 않느냐, 저 ~악마같은~ ~고양이와~ 함께 말이다!\" NL NL 그들은 말다툼을 멈추지 않습니다. 당신이 결정해야 할 것 같군요...", - "이 기사는 다른 기사보다 강한 게 분명합니다. 당신은 최선을 다했음에도 결국 패배했습니다. NL \"난 네 그런 짐승 같은 모습이 좋더라!\" 그들이 떠날 때 그는 다른 기사에게 말합니다, 말다툼하면서 말이죠.", - "당신은 그 기사의 공격을 피하고는 인정사정없이 그를 #r죽입니다. 그리고 그의 #g영혼 을 즐겁게 빨아먹습니다. 다른 기사는 비명을 지르며 도망칩니다. 정말 겁쟁이군요...", - "겁쟁이 기사는 멀리서 장검으로 당신의 몸에 생채기를 약간 내고는 비명을 지르며 도망칩니다. 다른 기사는 화가 나서 그를 뒤쫓습니다. 당신은 짜증을 내며 다시 할 일이나 하러 갑니다.", - "당신은 겁쟁이 기사를 향해 ~슬금슬금~ 다가갔지만 겁쟁이 기사는 겁에 질려 도망치지 못합니다. 당신이 손쉽게 그를 #r살해하고 #g영혼 을 취하고 다른 기사에게로 몸을 돌리자 이미 부리나케 도망간 뒤였습니다." - ], - "OPTIONS": [ - "[왼쪽] #r50%: #r체력을 #r", - " #r잃습니다.", - " #g50%: #g영혼을 #g200 #g얻습니다.", - "[오른쪽] #r25%: #r체력을 #r", - " #g75%: #g영혼을 #g100 #g얻습니다." - ] - }, - "downfall:BossTester": { - "NAME": "디버그 보스 준비", - "DESCRIPTIONS": [ - "막을 선택해서 그 막에 해당하는 보상을 시뮬레이션해서 받습니다. 만약 3막의 총 보상을 원한다면 3번째를 선택하세요. 첫 번째는 3막, 두 번째는 2막, 세 번째는 3막입니다.", - "보상을 받았습니다. 상점을 둘러본 후 다른 막의 보상을 원한다면 이 이벤트를 다시 실행하세요. 아니라면 보스와 전투하세요. 보스 보상은 주어지지 않습니다." - ], - "OPTIONS": [ - "[1막]", - "[2막]", - "[3막]", - "[상점]" - ] - }, - "downfall:BetterEnding": { - "NAME": "첨탑의 심장", - "DESCRIPTIONS": [ - "@쿠-궁@ ... @쿠-궁@ ... @쿠-궁@ ... NL 깊이 고동치는 격려가 방 전체에 걸쳐 느껴집니다... NL 이걸로 ~끝~ 일까요 ? 당신의 목적은 달성했을까요?", - "당신은 영혼들을 #b", - " 심장에게 돌려주었습니다! NL 심장은 크게 기뻐하며 #b@두근두근@ 거렸고, 영원히 두근거릴 겁니다.", - "노력에도 불구하고 심장의 문은 여전히 취약합니다. 당신은 스스로에게 질문합니다. ~\"이걸로~ ~정말~ ~만족하는~ ~건가?\"~ NL 당신은 지금까지 심장에게 영혼을 총 #b", - " 개 바친 것 같은 느낌이 듭니다.", - " NL 심장에게 소환된 모든 이들이 지금까지 영혼을 총 #b", - " 개 바쳤습니다.", - " NL 심장은 더욱 더 크게 맥박 치고 당신의 #y~의식은~ #y~점점~ #y~흐릿해집니다...~", - "NL 당신은 검을 준비합니다...", - "NL 당신은 단검을 준비합니다...", - "NL 당신은 코어를 최대로 충전합니다...", - "당신은 스스로에게 질문합니다. ~\"이걸로~ ~정말~ ~만족하는~ ~건가?\"~", - " NL 심장은 더욱 더 크게 맥박하고 당신의 #p~의식이~ #p~점점~ #p~흐릿해지기...~ #p~시작합니다~", - " NL 당신의 안에서 갑작스럽게 #y@에너지@ 가 폭발하듯 솟구쳤고, 그 #b@충격으로@ #b@인해@ 깨어납니다.", - " NL 다가오는 위협을 감지한 심장이 위쪽으로 #g물러납니다! 싸움은 아직 끝나지 않았습니다...", - "NL 당신은 지팡이에 신성한 에너지를 축적합니다...", - "당신은 내면에서 #p무언가 #p@악함을@ 느낍니다..." - ], - "OPTIONS": [ - "[계속한다]", - "[준다] #b???", - "[잠든다]", - "[문에 접근한다]" - ] - }, - "downfall:EvilShrines": { - "NAME": "", - "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고통." - ] - } -} \ No newline at end of file +{ + "downfall:SolShrine": { + "NAME": "영혼 성소", + "DESCRIPTIONS": [ + "당신 앞에 고대 악한 영혼을 기리는 공들인 성소가 놓여있습니다. ", + "성소를 건드리자, #y영혼이 성소로부터 쏟아지며 ~당신에게~ ~힘의~ ~세례를~ ~퍼붓습니다.~ ", + "성소를 후릴 때마다 계속해서 #y영혼이 줄줄이 쏟아집니다! NL NL 당신이 영혼을 흡수하자, 이 성소에서 무한히 에너지를 공급할 수 있다는 사실을 깨닫습니다. 당신은 #r올바른 #r결정을 내린 것인지 의문이 듭니다.", + "당신은 성소를 무시합니다." + ] + }, + "downfall:GremlinMatchGame": { + "NAME": "맞추고 가져가!", + "DESCRIPTIONS": [ + "\" 카드는 #b12장! 짝을 맞추면 가져가도 된다! 기회는 #b5번, 무르기 없기다. NL 준비됐느냐? 시작하자꾸나!\"", + "당신은 그렘린의 게임을 마치고 올려다보았습니다. NL 그렘린이 어디로 사라졌지?", + "그렘린은 미친듯이 테이블 위의 카드를 섞고 있습니다. 이 괴물은 해롭지는 않아 보입니다. 당신이 다가가자, 그렘린은 당황해서 겁먹은 것처럼 보였지만 이내 마음을 다잡고 말을 건넵니다.", + "즉시, 그렘린이 외칩니다! NL NL \"귀족!!!\" NL NL 음지에서 그렘린이 서서히 나오더니, 당신, 그렘린, 테이블을 내려다봅니다. NL \"이제 진정한 게임을 시작하지 않겠느냐?\" 그렘린이 묻습니다." + ], + "OPTIONS": [ + "[계속한다]", + "[떠난다]", + "[시도한다]", + "남은 시도 횟수: #y", + "[위협한다] 카드를 6장 훔칩니다.", + "[때린다] #r싸웁니다. #g카드를 #g6장 #g얻습니다." + ] + }, + "downfall:WomanInBlue": { + "NAME": "파란 옷의 여자", + "DESCRIPTIONS": [ + "당신은 어둠 속에 파묻힌 작은 가게를 발견합니다. 그 안에서 멋진 옷차림의 창백한 여자가 포션 진열장을 관리하는게 보입니다. 그녀는 당신의 위협적인 모습에 깜짝 놀랍니다. NL \"나랑 내 물건들을 내버려 둬, 멍청아!!\" 그녀가 비명을 지릅니다.", + "당신은 괜히 여자를 자극해서 싸우고 싶지 않아 조심스레 가게를 빠져나옵니다.", + "#r@쾅!@ NL 그녀의 장갑을 낀 주먹이 얼굴을 강타하더니 당신은 발치에 거의 쓰러지다시피 합니다. NL \"네 내장을 바닥에다 흩뿌려 놓기 전에 여기서 나가.\" 그녀의 말을 받아들여 밖으로 나갑니다. 덕분에 내장은 몸 안에 온전히 있군요." + ], + "OPTIONS": [ + "[떠난다]", + "[떠난다] #r피해를 #r", + " #r받습니다.", + "[때린다] #r싸웁니다. #g포션 #g3개와 #g포션 #g유물 #g1개를 #g얻습니다." + ] + }, + "downfall:GremlinWheelGame": { + "NAME": "운명의 돌림판", + "DESCRIPTIONS": [ + "당신은 말쑥해보이는 쾌활한 그렘린과 우연히 마주쳤습니다. 무대 뒤에서 그렘린이 머뭇거리며 힐끔대다 눈이 마주치긴 했지만, 당신의 위협적인 모습에도 불구하고 동요하지 않는 듯합니다. NL \"돌림판을 돌릴 시간이에요! ~준~ ~비~ ~됐~ ~나~ ~요?\"~", + "\" #y영혼 을 얻었습니다! \" NL 앗싸!!!!", + "\"아, #g선물 이군요! NL 즐겨주시길!\"", + "\"이야, 공짜 #g회복을 드립니다!\"", + "\" #p저주 를 얻으신 듯 하군요! NL 좋지 않네요. NL 어쩔 수 없죠! 다음번엔 행운이 있길!\"", + "\"오우, #r~어둠의~ 힘... NL 덱에서 제거할 카드를 한 장 골라주세요!\"", + "\"이런!\" NL \"패배하셨습니다!\" NL 당신은 그가 칼을 준비하는 걸 발견합니다...", + "당신은 미친 그렘린을 베려했으나 그는 너무 빠릅니다! NL 그는 투박한 칼로 당신을 몇 번 공격합니다. NL \"대가는 지불되었다!!\" NL 그 말과 함께, 그렘린과 돌림판 둘 다 감쪽같이 사라졌습니다.", + "그렘린은 긴장한 듯 자신의 어깻죽지로 시선을 돌렸지만 재빨리 긴장을 풉니다. 당신은 그렘린의 손짓을 보고도 무시합니다. NL \"워, 워, 친구. 굴림판이 공정하게 보상을 결정한 거라구요! 아무도 두 번 돌릴 순 없어요.\"", + "즉시, 그렘린이 소리 지릅니다! NL NL \"귀족!!!\" NL NL 음지에서 그렘린이 서서히 나오더니, 당신, 그렘린, 테이블을 내려다봅니다. NL \"내 친구의 돌림판을 어디 가져갈 수 있으면 가져가 봐라.\".", + "모닥불에서 지난번 돌림판보다 운이 더 좋을지 알아보기로 합니다.", + "돌림판이 보상을 가리켰습니다. NL NL 이제 손만 뻗어서 가져가면 됩니다.", + "성공입니다! 이번에야말로 원하던 것을 찾아냈습니다! NL NL #r@콰직!@ NL NL 마지막으로 조금 거칠게 돌렸나봅니다... 돌림판이 부서지고 말았습니다.", + "당신은 다른 날에 운을 시험해 보기로 결심합니다. NL NL 지금은 안정을 취해야겠죠.", + "그렘린은 달려들지만 당신은 준비되어있습니다. NL 그렘린이 단도로 찌르기 전에 베어버립니다. NL 슬프게도 당신 맘대로 상품을 뜯어가기도 전에 돌림판은 감쪽같이 사라졌습니다." + ], + "OPTIONS": [ + "[돌린다]", + "[보상!] 와아!!!!", + "[보상!] #g유물을 #g획득합니다.", + "[보상!] #g체력을 #g전부 #g회복합니다.", + "[보상?] #r저주 #r- #r부패.", + "[보상!] #g카드 #g더미에서 #g카드를 #g1장 #g제거합니다.", + "[보상?] #r체력을 #r", + " #r잃습니다.", + "[떠난다]", + "제거할 카드를 선택하십시오.", + "[재도전!]", + "[재도저언!!]", + "[때린다] #r싸웁니다. #g운명의 #g돌림판을 #g얻습니다.", + "[넘긴다] 나중에 돌립니다.", + "[보상!] #g선빵필승!", + "[훔친다]" + ] + }, + "downfall:GremlinWheelGameRest": { + "NAME": "운명의 돌림판", + "DESCRIPTIONS": [ + ], + "OPTIONS": [ + ] + }, + "downfall:LivingWall": { + "NAME": "살아있는 벽", + "OPTIONS": [ + "[때린다] #r싸웁니다. #g세 #g머리 #g모두 #g이용합니다." + ] + }, + "downfall:Augmenter": { + "NAME": "증강자", + "DESCRIPTIONS": [ + "안대를 끼고 사악한 웃음을 짓는 남자가 성큼성큼 다가옵니다. NL \"세상에, 정말 무시무시한 놈이군! 네가 과학에 관심 있을 진 모르겠지만, 난 널 그 어떤 생명체보다 강하게 만들어 줄 수 있어. \"영웅들\"을 쫓는다면 이게 필요할 테지.\" NL NL ~\"자,~ ~어떡할래?\"~" + ], + "OPTIONS": [ + "[때린다] #r싸웁니다. #g모두 #g얻습니다." + ] + }, + "downfall:BonfireSpirits": { + "NAME": "모닥불 정령들", + "DESCRIPTIONS": [ + "정령들은 당신이 준 영혼들을 게걸스럽게 먹습니다! 정령들은 영혼을 잔뜩 먹더니, 불꽃이 @두@ @배@ 더 밝게 타오릅니다. NL 정령들이 흥분하여 당신을 둘러싸고 춤을 추더니 이내 ~당신의~ ~몸~ ~속으로~ ~스며들고,~ 당신은 따뜻함과 힘으로 가득찹니다. NL 최대 체력이 증가하고 체력이 전부 #g회복됩니다.", + "당신은 그들을 #p취하기 #p위해 손을 뻗습니다... NL 정령들은 @비명을@ @지르며@ 당신의 손바닥에서 솟아오르는 소용돌이를 벗어나려고 헛된 ~발버둥을~ ~칩니다.~ NL 이윽고 정령들은 당신의 수집품으로 박제될 뿐이었습니다." + ], + "OPTIONS": [ + "[기부] #r영혼을 #r150 #r잃습니다. #g최대 #g체력을 #g10 #g얻고 #g체력을 #g모두 #g회복합니다.", + "[잠김] 영혼이 150 필요합니다.", + "[기부] #r영혼을 #r150 #r잃습니다. #g각 #g그렘린이 #g최대 #g체력을 #g2 #g얻고 #g체력을 #g모두 #g회복합니다.", + "[가져간다]" + ] + }, + "downfall:FaceTrader": { + "NAME": "얼굴 상인", + "DESCRIPTIONS": [ + " NL NL 잘 싸울 것처럼 보이진 않지만 이곳에서 살아 남아왔습니다. 아마 이 가면들이 힘을 주는 거겠죠...." + ], + "OPTIONS": [ + "[때린다] #r싸웁니다. #g100%: #g모든 #g얼굴." + ] + }, + "downfall:CursedFountain": { + "NAME": "저주받은 샘", + "DESCRIPTIONS": [ + "근처 벽에 달린 분수로부터 끝없이 흘러나오는 #p~연보랏빛~ #p~액체와~ 우연히 마주쳤습니다. 대부분 생명체에게는 치명적이지만 저주받은 자에게는 꽤나 유익하다고 알고 있습니다.", + "샘의 #p~액체에는~ 길을 잃은 영혼들이 일렁입니다. 오히려 이용하지 않으면 손해겠군요. 당신은 #p저주받은 #p샘의 마법에서 영혼들을 떼어 나릅니다.", + "이 #p~액체가~ 유용할 거 같은 느낌이 들어 나중에 사용하도록 병에 담았습니다. 이 #p어둠의 #p물에 익숙하지 않은 생명체가 적셔지면 분명 고통받을 테니까요.", + "#p~액체를~ 마시자 당신의 정신에 #p어둠의 #p손길이 닿는 게 느껴집니다. 꽤 부유하고 산뜻한 기분이군요.", + "당신은 샘을 뒤로한 채 가던 길을 갑니다." + ], + "OPTIONS": [ + "[담는다] #g저주받은 #g샘 #g포션을 #g얻습니다.", + "[흡수한다] #g영혼을 #g75 #g얻습니다.", + "[마신다] #g모든 #g체력을 #g회복합니다.", + "[잠김] 저주가 1장 필요합니다.", + "[잠김] 저주가 2장 필요합니다.", + "[잠김] 저주가 3장 필요합니다.", + "[잠김] 이미 사용했습니다.", + "[떠난다]" + ] + }, + "downfall:WeMeetAgain": { + "NAME": "또 만났네요!", + "DESCRIPTIONS": [ + "\"보스!\" 너저분한 옷을 입은 쾌활한 남자가 신이 나서 당신에게 다가옵니다. 당신은 이 남자를 잘 알고 있습니다. NL \"저예요, #y랜위드! 제가 저주받은 영웅들한테 사기친 걸 못 믿으시겠죠! 혹시 놈들한테 줄 쓰레기 같은 물건이 있나요?\" NL 당신은 그의 호의에 감사하며 사정을 생각해봅니다. 분명 랜위드가 다음 번 \"거래\"에서 쓸만한걸 건질 테니 말이죠...", + "\"와, 완벽해요! 완전 쓰레기 같아요! 여기요, 최근에 멍청이들이 준 영약을 받아 가셔요!\" NL 랜위드는 엉거주춤하게 주머니를 뒤적거리다 하마터면 깨트릴뻔했지만, 무사히 3병을 건넵니다.", + "\"훌륭해요! 이건 다음 거래에 아주 쓸모 있을 거예요. 아, 그리고 당신이 원한대로 시체들에서 수확해 왔어요!\" NL 랜위드는 영혼석을 건네주고는 당신의 쓸모없는 장신구를 팔아 넘길 새로운 호구를 찾아 허둥지둥 길을 나섭니다.", + "\"딱이네요! 제가 조금만 더 손보면 정말 특별해 보일 거예요.\" NL 랜위드는 유물을 주의깊게 살피며 떠납니다. 다음번에 만날 모험가들에게 이 유물이 얼마나 대단한 물건인지, 어떻게 허풍 칠지 생각해보는 게 분명해 보이는군요.", + "\"보스, 오늘은 아무것도 없나요? 괜찮아요!\" NL 그는 잽싸게 달아납니다." + ], + "OPTIONS": [ + "[ ", + " 유물을 준다] ", + "#g포션을 #g3개 #g얻습니다.", + "#g영혼을 ", + " #g얻습니다.", + "#g무작위 #g희귀 #g카드를 #g1장 #g얻습니다.", + "[떠난다]", + "[잠김] 줄 유물이 없습니다.", + "#g포션을 #g2개 #g얻습니다." + ] + }, + "downfall:Designer": { + "NAME": "탑-클래스 디자이너", + "DESCRIPTIONS": [ + "당신은 \"탑-클래스\"라는 간판이 걸린 #g~화려한~ 상점을 발견합니다. 입구 안쪽에서 #r도적이 안에 있는 자에게 소리치며 위협합니다. NL NL @\"돈@ @내놔!\"@ NL NL 도적은 터는 것에 정신 팔려 당신을 알아차리지 못합니다.", + "생채기 하나 없이 가뿐하게 도적을 처리합니다. 우스꽝스러운 옷을 입은 남자가 상점 입구에 나타납니다. NL \"고마워, 친절한 지배자 씨!\", 남자가 안에서 손짓하면서 말합니다.", + "당신은 이 일에 엮여봤자 좋을 거 없다고 생각합니다. 침입자를 처리하는 게 더 중요하니까요.", + "\"세상에 맙소사, 끔찍해!! 이건 아니야, 아니고말고. 이 차림새는 도대체 뭐야? 지배자는 더 @위협적인@ @존재야!@ 첨탑의 #r지배자란 무시무시해야 된다고! 내가 어디 한 번 ~제대로~ 변신시켜줄게.\" NL NL 당신은 이 남자의 말을 믿고 그의 서비스를 받을지, 아니면 차림새에 대한 모욕으로 받아 들여야 할지 망설여집니다.", + "\"그래 좋아, 이젠 안녕해야겠네! 다른 #r지배자 씨들한테 좀 잘 말해줘!\" NL NL 당신은 이 남자의 능력을 걱정했지만, 확실히 더 위협적으로 느껴지게 됐습니다.", + "당신은 그를 때렸습니다. NL \"내 @얼굴!!@ 그럼 내 차례인-\" NL NL 그는 기절했습니다. 이러면 다음번에는 당신과 비슷한 생명체를 만나면 모욕하지 않고 몸을 사리겠죠.", + "당신은 도적을 내칩니다. 안타깝게도 ~진정한~ ~사냥감은~ 디자이너였습니다. 그는 당신이 다가올 때마다 뒷걸음쳤지만 당신이 #g등불을 내밀자, 곧 그의 영혼은 당신 것이 되었습니다..." + ], + "OPTIONS": [ + "[교정] ", + "[정리정돈] ", + "[풀 서비스] ", + "[무시] 떠납니다.", + "[때린다] 떠납니다.", + "[가게로 들어간다]", + " #g보상을 #g얻습니다." + ] + }, + "downfall:DeadGuy": { + "NAME": "죽은 모험가", + "DESCRIPTIONS": [ + "의식을 계속하던 중 기습을 당했습니다!", + "소리없이 탈출했습니다.", + "바닥 위의 #r죽은 #r모험가 와 우연히 마주쳤습니다. NL 그의 영혼은 여전히 남아있습니다. 또 ", + "갑옷과 얼굴이 #r@화염에@ #r@그을린@ 것으로 보입니다. ", + "마치 뿔달린 짐승이 그를 #r@찌르고@ #r@짓밟은@ 것처럼 보입니다. ", + "거대한 발톱에 의해 #r@잘리고@ #r@내장이@ #r@빠져나온@ 것처럼 보입니다. ", + " NL 영혼을 수확하는 의식으로 전리품을 얻을 수 있겠지만 남자를 해친 생물이 곧 돌아올지도 모릅니다.", + "시체에서 영혼을 뽑는 의식이 성공했습니다! NL 의식을 계속하시겠습니까?", + "전사한 남자의 영혼을 뽑아내는 데 실패했습니다... NL 의식을 계속하시겠습니까?", + "의식으로 그의 몸을 흔들자 주머니에서 #y유물 이 떨어집니다! NL 의식을 계속하시겠습니까?", + "의식이 완벽히 끝났습니다!" + ], + "OPTIONS": [ + "[영혼 수확] #g시체를 #g뒤집니다. #r", + "[떠난다]", + "[싸운다]", + "[계속한다] #g시체를 #g뒤집니다. #r", + "%: #r괴물이 #r돌아옵니다." + ] + }, + "downfall:ShiningLight": { + "NAME": "밝은 빛", + "DESCRIPTIONS": [ + "당신은 방 한가운데에서 일렁이는 #y빛의 #y덩어리 를 발견했습니다. NL NL ~따뜻한~ ~빛과~ ~황홀한~ ~문양이~ 속을 뒤틀리게 하지만 이 빛은 엄청난 힘을 가지고 있습니다.", + "빛 사이로 걸어가자, 빛이 당신에게 흡수되면서 미간이 절로 찌푸려집니다. NL #r@타는@ #r@듯이@ #r@뜨겁습니다!@ 이내 고통은 사그라들고 #b활기를 되찾았지만, 이 역겨운 따뜻함은 잊을 수 없는 기억이 되어 상처로 남을 것입니다.", + "무슨 일이 벌어질까 궁금해하면서 빛을 피해 돌아갑니다." + ], + "OPTIONS": [ + "[들어간다] #g무작위 #g카드를 #g", + "[떠난다]", + "[잠김] 필요: 강화 가능한 카드", + " #g장 #g강화합니다. #r저주를 #r받습니다. #r- #r결함." + ] + }, + "downfall:WorldOfGoop": { + "NAME": "끈적이 천지", + "DESCRIPTIONS": [ + "당신은 물웅덩이에 빠졌습니다. NL @그@ @웅덩이는@ #g@끈적이@ #g@슬라임으로@ @가득@ @차@ @있습니다!!@ NL 귀와 코를 포함한 모든 곳에서 끈적임이 느껴집니다. NL NL 기어 올라와보니 독특하게 생긴 #y노란색 #y슬라임이 몸에 붙어있단 것을 알아차립니다. 슬라임은 웅덩이에 빠진 불행한 모험가들에게 #y영혼을 수집하고 있었던 것으로 보입니다. 정말 편리하군요.", + "이 불행한 웅덩이 사건을 그냥 넘기고 싶진 않아, 당신은 #y노란색 #y슬라임을 후려칩니다. NL NL 슬라임은 바로 @터져버렸습니다!@ NL NL 아까보다 더 많은 끈적이로 뒤덮일거라곤 생각하지도 못했는데 말이죠.", + "#y노란색 #y슬라임을 털어내고 여정을 떠납니다. 여전히 군데군데 끈적이가 붙어 있긴 하지만요. 확실히 더 무시무시해 보이긴 하겠네요." + ], + "OPTIONS": [ + "[전부 수확한다] #g영혼을 #g", + "[흡수한다] #g영혼을 #g", + "[짜낸다] #g영혼을 #g", + " #g얻습니다. #r저주를 #r3장 #r받습니다. #r- #r질척임.", + " #g얻습니다. #r저주를 #r2장 #r받습니다. #r- #r질척임.", + " #g얻습니다. #r저주를 #r받습니다. #r- #r질척임.", + "[떠난다]" + ] + }, + "downfall:Serpent": { + "NAME": "배애애애앰", + "DESCRIPTIONS": [ + "당신은 땅에 뚫린 큰 구멍을 보고 방으로 들어갔습니다. 구멍 앞에 도달하자 갑자기 커다란 뱀이 튀어나왔습니다. NL NL ~\"하~ ~하하!~ ~안녕~ ~안녕!~ ~무엇이~ ~우리를~ ~여기로~ ~이끌었을까?~ 안녕 우리의 지배자, 간단한 질문을 하나 할게. NL 인생의 가장 좋은 점은 바로 #r~뭐든지~ #r~때려~ #r~눕힐~ #r~수~ #r~있다는~ #r~것~ 아니겠어? NL 너도 그렇게 생각하지?\"", + "~\"스스슷슷스스스..~ ~..스스스슷.....~ ~스슷...~ ~스스스....\"~", + "뱀은 매우 실망한 표정으로 당신을 노려봅니다.", + " NL NL 뱀은 고개를 쳐들고는 섬뜩한 단말마를 내지르더니 몸이 축 늘어졌습니다. 덕분에 생명력을 손쉽게 수확해냈습니다. NL NL 그 모습은 당신의 경외심을 불러일으켰습니다. 그런데 은유적으로 말한 거 아니었나 생각이 듭니다. 아마 다른 이들에게 무력을 행사하란 뜻 같기도 하지만 이제는 아닙니다...", + "당신이 손을 뻗자 뱀이 @겁에@ @질렸고@ 비명을 지르며 뒷걸음 칩니다. ~\"스스스슷~ ~수집하려는~ ~거구나!\"~ NL NL ~\"나보다~ ~훨씬~ ~탐욕스러워.~ ~제에에에에에발,~ ~나를~ ~내버...\"~ NL 당신은 버러지 따윈 신경 쓰지 않습니다. 그의 영혼은 당신의 것이 되었습니다. 앞으로도 영원히 말이죠." + ], + "OPTIONS": [ + "[동의] [때린다] #g영혼을 #g", + " #g얻습니다. #r저주를 #r받습니다. #r- #r의심.", + "[거부]", + "[떠난다]" + ] + }, + "downfall:WingStatue": { + "NAME": "날개 조각상", + "DESCRIPTIONS": [ + "돌과 바위들 사이에서, 당신은 날개 모양의 복잡하고 커다란 푸른 조각상을 발견했습니다. NL 조각상 틈새로부터 쏟아져 나오는 #y금화를 발견했지만, 당신에게는 아무런 가치가 없습니다. 하지만 조각상이라면 말이 다르겠죠...", + "깨어난 자의 광신자들과 만날지도 모르니, 당신은 부서진 조각상을 가져갑니다. 이걸로 교단의 신도들에게 당신의 대의를 증명할 수 있겠죠.", + "당신은 있는 힘껏 조각상을 후립니다. NL 그러자 곧 치명적으로 날카로운 조각이 @사방으로@ @튑니다.@ 당신은 파편을 쥐고 길을 나섭니다.", + "당신은 지나쳐 버리고는 가던 길을 갑니다.", + "까...까악?! 새의 신님께 바칠 공물?", + "까악-까아악!!", + "교환을? 괜찮은 제안이로군...", + "교단에서 만족스러워하겠군..." + ], + "OPTIONS": [ + "[파괴한다] #r체력을 #r", + " #r잃습니다. #g날카로운 #g조각을 #g얻습니다.", + "[수집한다] #r체력을 #r", + "[떠난다]", + " #r잃습니다. #g부서진 #g날개 #g조각상을 #g얻습니다." + ] + }, + "downfall:GoldenIdol": { + "NAME": "황금 우상", + "DESCRIPTIONS": [ + "당신은 눈에 띄지 않는 곳에서 받침대 위에 평화로이 앉아있는 #y빛나는 #y황금 #y우상을 발견했습니다. 엄청난 가치가 있어보입니다. NL NL 떠도는 모험가들이 탐낼만한 물건임이 분명해, 함정을 설치할만한 가치가 있어 보입니다.", + "당신은 눈에 띄지 않는 곳에서 받침대 위에 평화로이 앉아있는 #y빛나는 #y황금 #y우상을 발견했습니다. 엄청난 가치가 있어보입니다. NL NL 모험가의 시신은 거대한 물체에 짓눌린 채 복도 아래 조금 떨어진 곳에 놓여있었습니다. 모험가의 영혼은 아직도 이곳에 머물러있습니다.", + "우상의 무게를 촉매로 주위의 거대한 바위가 무너지도록 간단한 함정을 설치하면, 누군가 #y빛나는 #y우상을 가져가려 할 때 함정이 발동할 겁니다. NL 함정 설치에 만족한 당신은 발걸음을 옮깁니다.", + "당신은 모험가의 영혼을 체내로 흡수하여 에너지를 만들어냅니다.", + "받침대는 그대로 두기로 했습니다. 함정 설치는 당신 수준에 걸맞은 일이 아니니까요.", + "당신은 영혼을 그대로 내버려두고 가던 길을 갑니다." + ], + "OPTIONS": [ + "[함정 설치] #g타격을 #g1장 #g제거합니다.", + "[수확] #g영혼을 #g", + " #g얻습니다.", + "[떠난다]", + "[잠김] 타격이 1장 필요합니다." + ] + }, + "downfall:Cleric": { + "NAME": "성직자", + "DESCRIPTIONS": [ + "금색 투구(?)를 낀 이상한 푸른색의 인간형 생물이 크게 미소지으며 당신에게 다가옵니다. NL 당신이 어떤 존재인지 깨닫는 순간, 이 생물의 환한 웃음은 순식간에 공포에 물든 표정으로 바뀝니다. NL ~\"괴-괴물이다!!\"~ 겁에 질려 소리를 지르더니 뒤돌아 달아나려고 합니다.", + "생물은 단 한 방에 푸른색 살덩어리로 전락합니다. 당신은 성직자의 #y영혼을 흡수하고는 발걸음을 옮깁니다.", + "\"성직자 살려! 성직자 살려줘!\" 당신이 위협적으로 다가가자 성직자가 소리칩니다. NL 푸른색의 차가운 불꽃이 당신의 몸을 감싸더니 없어집니다. NL 그러자마자 \"성직자\"는 달아나 버렸습니다." + ], + "OPTIONS": [ + "[때린다] #g영혼을 #g", + "[위협한다] #g카드를 #g1장 #g제거합니다.", + "[떠난다]", + "제거할 카드를 선택하십시오.", + " #g얻습니다." + ] + }, + "downfall:Ghosts": { + "NAME": "유령 의회", + "DESCRIPTIONS": [ + "계속 내려가다 보니, #p~짙고~ #p~검은~ #p~연기~ 가 주변의 땅과 벽에서 차오르더니 가면을 쓴 세 형상으로 합쳐집니다. NL NL ~\"내가~ ~보기엔~ ~심장의~ ~또~ ~다른~ ~하수인인~ ~것~ ~같은데\"~ NL #r@\"동의하네!@ #r@그것은@ #r@항상@ #r@약해빠진@ #r@졸개들을@ #r@보낸단@ #r@말이지!\"@ NL NL 당신은 세 번째 존재가 지나칠 정도로 큰 미소를 짓는 걸 알아챕니다. NL \"다른 자들은 신경쓰지 말게... 우리의 #y~힘~ 을 맛보고 싶은가?\" ", + "@\"공물이라!@ 꽤나 ~매력적이군...\"~ NL NL 유령의 형상을 한 것이 말을 하면 할수록 그것의 큰 입이 점점 더 커지는 것을 알아챕니다. 몸 안에서 죽은 이들에게 수집한 #b~영혼~ 이 강제로 소용돌이치며 거대한 입속으로 빨려들어갑니다. 당신은 거기에 휘말려 들어가지 않으려고 안간힘을 다 해 버팁니다. NL NL 의식을 잃기 직전에야, 소용돌이는 잦아들었고 유령의 형상을 한 것은 에테르 속으로 녹아들어 사라져버렸습니다. NL NL 당신은 #b공허함 을 느끼지만 계속 나아갑니다.", + "당신이 다가가자 유령의 형상을 한 것이 낄낄대기 시작합니다. NL NL #r@\"아하!@ #r@우리의@ #r@좋은@ #r@친구@ #r@아닌가!\"@ NL 그들은 연기처럼 부풀어 올라 공간을 가득 메웁니다... NL NL \"여기 ~평소처럼~ 들게, 퍽 괜찮지 않은가?\"" + ], + "OPTIONS": [ + "[바친다] #r영혼을 #r", + " #r잃습니다. #g영체화를 1장 받습니다.", + "[잠김] 영혼이 ", + " 필요합니다." + ] + }, + "downfall:CursedTome": { + "NAME": "저주받은 고서", + "DESCRIPTIONS": [ + "당신은 버려진 사원에서 거대한 책을 발견하고 열어서 #p@수수께끼@ #p@같은@ #p@글@ 발견합니다. NL NL 자세히 글을 해석할 필요는 없습니다. 왜냐하면 이미 글이 가진 힘과 어떤 #r대가를 치르는 지 알고 있기 때문입니다.", + "대가를 인지하고 책의 대가를 치르기로 합니다. 받침대를 향해 손을 뻗는 순간, 고서가 당신의 무수히 많은 영혼을 긁으며 #r천 #r가지 #r목소리로 최면을 걸어옵니다! NL NL 간신히 책을 얻어내고는 이전보다 더 타락한 상태로 #b~진이~ #b~빠진~ #b~채~ 사원을 빠져나갑니다." + ] + }, + "downfall:ForgottenAltar": { + "NAME": "잊힌 제단", + "DESCRIPTIONS": [ + "당신은 제단에 서서 내면의 영적 에너지를 전달합니다. NL 여신에게 바치는 공물로 영혼이 쏟아져나오자 달래주는 듯 조각상의 팔들이 뻗어 나와 #p~저주의~ #p~마법을~ 뿜어냅니다. NL 모든 것이 어둠으로 뒤덮입니다. NL 잠시 후 깨어나자 단잠을 잔 듯 전투로 인한 상처가 모두 나아있었습니다.", + "잠시 악이 깃든 조각상을 우러러보고는 다시 발길을 돌려 도시로의 여정을 떠납니다.", + "당신은 조각상에게 바치지 않기로 결심합니다. 하지만 아무것도 주질 못했단 사실에 괜스레 #p수치를 느낍니다." + ], + "OPTIONS": [ + "[영혼을 바친다] #r영혼을 #r", + " #r잃습니다. #g체력을 #g", + " #g회복합니다.", + "[잠김] 영혼이 ", + " 필요합니다.", + "[떠난다]", + "[떠난다] #r체력을 #r", + "#r잃습니다." + ] + }, + "downfall:Bandits": { + "NAME": "붉은 가면 도적단", + "DESCRIPTIONS": [ + "당신은 커다란 #r붉은 #r가면을 착용한 도적 무리와 맞닥뜨렸습니다. NL \"이봐, 지나가고 싶- 이런, ~괴물이잖아.~ 우리 서비스가 필요하진 않아?\"", + "정말 고마워, 멍청아! 분명 이 선택을 후회하지 않을거야..." + ], + "OPTIONS": [ + "[", + " 유물을 잃습니다] #g도적단을 #g고용합니다.", + "[잠김] 유물이 필요합니다." + ] + }, + "downfall:Nloth": { + "NAME": "느로스", + "DESCRIPTIONS": [ + "이 바닥에 사는 첨탑 생물이 아니라고 결론 짓자마자 느로스의 상자를 쳐서 뺏고는 휘두릅니다. NL NL 극심한 고통에 느로스의 몸이 넘어가자 반사적으로 @촉수를@ @휘둘러@ 당신에게 #r고통스러운 #r자국을 남깁니다! NL NL 생명을 다한 몸이 땅에 넘어가자 덜컥이는 소리와 함께 눈을 매료시키는 장신구를 보게 됩니다. 그가 쓰레기 더미를 뒤지던 것처럼 그의 몸을 뒤지자 강력한 마법의 유물을 발견할 수 있었습니다." + ], + "OPTIONS": [ + "[때린다] #g무작위 #g유물을 #g얻습니다. #r저주를 #r받습니다. #r- #r고통." + ] + }, + "downfall:KnowingSkull": { + "NAME": "뭐든지 아는 해골", + "DESCRIPTIONS": [ + "당신은 장식으로 꾸며진 낡은 방에 들어섭니다. 화려하게 장식된 받침대 위에 놓여진 커다란 해골이 방 한가운데에 있습니다. 가까이 다가가자 해골이 #g@갑자기@ #g@불꽃을@ #g@내뿜으며@ 당신을 바라봅니다. NL NL \"무엇을 구하는가? 무엇을 바칠 것인가?\" NL 해골이 말을 마침과 동시에 뒤에 있던 문이 @쾅@ @닫힙니다.@", + "\"자자자자자잠깐나한테손-\" NL NL 해골의 말은 무시하고 받침대에서 잡아채자 순간 #r불길이 해골을 그을리고 맙니다. 나중에 유용한 데가 있겠죠...", + "\"뒤쪽이다, 필멸자야.\" NL 해골의 뒤를 슬쩍 보자 아니나 다를까 문이 있군요." + ], + "OPTIONS": [ + "[너.] #g해골을 #g얻습니다. #r체력을 #r", + "[떠난다]", + " #r잃습니다." + ] + }, + "downfall:Vagrant": { + "NAME": "애원하는 부랑자", + "DESCRIPTIONS": [ + "당신은 남자를 죽이고 영혼을 수확합니다. 뒤에서 약 냄새가 나는 ~중독자들이~ ~몰려듭니다.~ NL \"저 녀석이 방금 부르고뉴를 죽였어!\" 누군가 외치자, 이곳에서 마주쳤던 부랑자들보다 더 많은 이들이 다가옵니다. NL NL 탈출에는 성공했지만 #r물린 #r상처와 #r긁힌 #r상처투성이네요.", + "당신은 그의 손아귀에서 #y귀중해 #y보이는 #y유물을 낚아채고 달아납니다. NL 뒤에서 소리가 들립니다. NL \"부끄럽지도 않느냐? #r~자존심도~ ~없는~ ~거어어냐고오?!\"~ NL 그러나 당신은 부끄러움 따윈 모릅니다. 첨탑의 지배자에게 도둑맞는 건 영광이니까요!", + "당신은 장난감 따윈 관심 없습니다. 역시 그의 ~영혼이~ 제일 쓸만하겠죠. 당신이 @팔을@ @뻗자@ 부랑자는 훌쩍일 수밖에 없었습니다..." + ], + "OPTIONS": [ + "[때린다] #g영혼을 #g85 #g얻습니다. #r체력을 #r", + " #r잃습니다.", + "[턴다] #g유물을 #g얻습니다. #r저주를 #r받습니다. #r- #r긍지." + ] + }, + "downfall:Beggar": { + "NAME": "늙은 거지", + "DESCRIPTIONS": [ + "황금 투구(?)를 낀 이상한 푸른 색의 인간형 생물이 크게 미소지으며 당신에게 다가옵니다. NL 당신이 어떤 존재인지 깨닫는 순간, 이 생물의 환한 웃음은 순식간에 공포에 물든 표정으로 바뀝니다. NL ~\"괴,~ ~괴물이다!!\"~ 겁에 질려 소리를 지르더니 몸을 돌려 달아나려고 합니다.", + "늙은 거지는 어리둥절한 듯 주위를 둘러봅니다. 그는 당신을 무시하고 이곳을 쭉 훑더니 당신을 힐끔 쳐다봅니다. NL \"젊고 푸른 피부를 가진 남자 못봤나? 특이한 황금 투구를 쓴? 주로 도시에 와서 헌금으로 먹을 걸 나눠주고는...\" NL 거지는 조금 전에 해치운 #b성직자를 찾는 게 분명해 보이네요.", + "@\"겁내지@ @말라고,@ @늙은이.@ @네@ @생각보다@ @더@ @빨리@ @그@ @친구를@ @만날@ @테니까.\"@ NL NL 거지는 방어하기 위해 안간힘을 쓰지만 당신은 손쉽게 그를 쓰러뜨립니다. NL 골목을 뒤로하고 당신은 오늘 한 일에 #y긍지를 느끼며 앞으로 걸어 나갑니다.", + "이 남자는 충분히 고통받았으니까요. 당신은 그를 살려 두기로 하고 자리를 옮깁니다.", + "거지는 망토를 벗어 던지고 본인이 #b성직자 임을 드러냅니다! NL @\"끔찍한@ @영혼이로구나.@ @성직자는@ @경호원을@ @고용했다고!\"@ 그가 외칩니다. NL NL 골목에서 완전 무장을 한 두 덩치가 나왔습니다. 당신이 반응하기도 전에 검을 뽑아 달려듭니다!", + "#b성직자의 경호원을 죽이고 그를 다시 골목 구석으로 몰아넣습니다. 그는 겁에 질려 몸을 떨고 있습니다.", + "단 한 방에 푸른색 살덩어리로 전락합니다. 당신은 흡족하게 성직자의 #y영혼을 흡수하고는 발걸음을 옮깁니다. NL NL 당신이 길을 나설 때 다른 거지들이 건물 뒤편과 골목에서 유심히 쳐다보고 있었다는 것을 깨닫게 됩니다. 당신은 그들의 공포를 누립니다. 첨탑의 지배자에게 덤비면 어떻게 되는지 교훈이 되었겠죠.", + "\"성직자 살려! 성직자 살려줘!\" 당신이 위협적으로 다가가자 성직자가 소리칩니다. NL 푸른색의 차가운 불꽃이 당신의 몸을 감싸더니 없어집니다. NL NL 당신은 그의 힘이 유용하고 다시 경호원을 고용해도 쉽게 처리할 수 있기 때문에 이 \"성직자\" 를 한 번 더 살려 두기로 합니다." + ], + "OPTIONS": [ + " #r저주를 #r받습니다. #r- #r긍지.", + "[싸운다]", + "[위협한다] #g덱에서 #g카드를 #g2장 #g제거합니다." + ] + }, + "downfall:Mausoleum": { + "NAME": "영묘", + "DESCRIPTIONS": [ + "일련의 무덤 사이를 지나가던 중, 원형 방의 중심에 놓인 ~보석으로~ ~가득한~ 커다란 석관과 마주쳤습니다. NL 관에 적혀 있는 글을 알아볼 수는 없지만, #p~검은~ #p~안개가~ 옆에서 스며 나오는 것이 보였습니다. NL 당신에게 이 안개는 익숙한데, 분명 #y~영혼의~ 신호였죠.", + "당신은 그들의 영혼을 모으며 #p~영혼~ #p~안개를~ 흡수합니다. 하지만 떠나면서 당신은 #r@뭔가@ #r@오싹한@ #r@느낌을@ 받기 시작합니다..." + ], + "OPTIONS": [ + "[포식] #g영혼을 #g200 #g얻습니다. #r저주를 #r받습니다. #r- #r귀신들림." + ] + }, + "downfall:Nest": { + "NAME": "둥지", + "DESCRIPTIONS": [ + "길게 줄지어 늘어선 #b~모자를~ #b~눌러쓴~ #b~무리~ 가 #p알려지지 #p않은 #p대성당 으로 들어서는 것이 보입니다. NL 당신이 성당에 들어서는 순간 군중들이 돌아봅니다! NL NL 순식간에 대성당이 헉하는 소리, 환호하는 소리, 그리고 까악거리는 불협화음으로 가득 찹니다. 광신자 중 하나가 제물을 들고 당신에게 다가옵니다.", + "제단 위에 놓인, 위험해 보이는 무기에 눈독 들인 당신은 줄을 선 광신자들을 베어버리고 간단하게 물건을 가져갑니다. 당신은 빠르게 #r광신자들에게 포위당합니다! NL NL #r@\"살인자!!@ #r@살인자@ #r@살인자!!\"@ NL #b~\"까악~ #b~까악~ #b~까아아아아아악!\"~ NL NL 광신자들은 빠르게 가진 단검을 뽑아 듭니다. 당신은 그들을 #r가르고 #r베고 #r밀치면서 건물을 빠져나옵니다.", + "광신자의 제물을 받아들이고 그의 손에 들려있던 이상한 엘릭서를 가져갑니다. NL NL 광신자들이 당신을 위해 @구호를@ @외칩니다!@ NL NL #b~\"까악~ #b~까악~ #b~까아아아아아악!!\"~ NL NL 당신도 함께 구호를 외칩니다. 안 될게 있나요? 광신자들은 이상한 집단이지만 당신의 동료 지배자를 잘 섬기고 있으니까요.", + "#r@\"새의@ #r@신님께서!!@ #r@돌아오셨다!!\"@ NL #b~\"까악~ #b~까악~ #b~까아아아악!\"~ NL NL 열렬한 환호로 맞이해주는 광신자들을 헤치다, 곧 지도자와 직접 마주하게 됩니다. 멋진 옷을 입은 광신자가 당신의 손에 #y화려하게 #y장식된 #y단검을 쥐어줍니다.", + "무슨 일이 벌어질지 모르는 채, 당신은 단검을 가져갑니다. 광신자들의 지도자는 로브 안에 손을 넣어 #b기름진 #b파란 #b혼합물을 내어줍니다.", + "지도자를 둘러싼 광신자들이 곧바로 단검과 포션을 그에게 가져다줍니다. 그는 당신에게 행동을 따라 하라고 손짓합니다.", + "당신은 지도자의 의식 과정을 따라 합니다. 포션의 코르크 마개를 따서 액체를 부드럽게 단검에 약간 붓습니다. 대성당의 불빛이 칼날에 비쳐 #b~섬뜩한~ #b~빛깔을~ 내는 것만 같습니다. NL NL 지도자의 손짓이나 말 한마디 없이 두 광신자가 앞으로 다가옵니다. 한 명은 당신에게, 한 명은 지도자에게 갑니다. NL NL 이제 그들이 무엇을 원하는지는 극도로 명확해졌습니다.", + "#r당신은 #r단검을 #r광신자의 #r심장에 #r꽂습니다! NL NL #b~\"까악~ #b~까악~ #b~까아아아악!\"~ NL NL 의식을 마치자 살아남은 광신자들은 더할 나위 없이 행복해 보입니다. 그들은 축하의 의미로 막대기를 흔들며, 당신이 대성당을 빠져나올 때도 계속해서 까악거리며 환호성을 지릅니다." + ], + "OPTIONS": [ + "[조각상을 돌려준다] #r부서진 #r날개 #r조각상을 #r잃습니다. #g많은 #g보상을 #g얻습니다.", + "[잠김] 부서진 날개 조각상이 필요합니다.", + "[받아들인다] #g광신자 #g포션을 #g얻습니다.", + "[훔친다] #g의식용 #g단검을 #g얻습니다. #r체력을 #r", + " #r잃습니다.", + "[떠난다]", + "[계속한다]", + "[단검을 받는다] #g의식용 #g단검을 #g받습니다.", + "[세례를 받는다] #g의식용 #g단검을 #g강화합니다.", + "[희생] #r의식용 #r단검+으로 #r광신자를 #r죽입니다.", + "[찬사를 받는다] #g부서진 #g날개 #g조각상을 #g돌려주고 #g보상들을 #g받습니다." + ] + }, + "downfall:Colosseum": { + "NAME": "콜로세움", + "DESCRIPTIONS": [ + "첨탑을 따라 계속해서 내려가다 보니, 당신은 거대한 경기장 근처에서 매복하던 자들을 발견합니다. 다가가자 깜짝 놀란 노예상인이 재빨리 어찌 된 사정인지 설명합니다. NL NL \"우리는 도시에 침입한 녀석들을 기다리고 있다구. 너도 녀석들이 목적이잖아! 갓 잡아서 싱싱한 포로를 관중들도 기다리고 있어. 모두들 #r싸움부터 #r죽음까지 정말 사랑한다니까!\"", + "노예상인들은 적대적이지도 않고 당신의 먹잇감에 상처를 입혀 움직임을 둔하게 하니 크게 도움이 될 것입니다. NL NL 그러나 이 혈투를 그냥 넘기기엔 너무 매력적입니다...", + "당신은 수많은 #b노예상인들과, #p광신자, 그리고 도시의 다른 주민들로 가득 찬 거대한 경기장에 들어섭니다. NL NL ", + "@\"챔피언을@ @데려와라!\"@ 붐비는 경기장 한가운데서 그들의 챔피언에게 도전장을 내밉니다. NL 두 도전자가 다가와 당신이 첨탑의 지배자라도 이 아레나에서는 봐주지 않는다고 경고합니다. NL NL 당신은 그 누구에게도 뒤지지 않는다고 자부합니다.", + "@\"다음@ @녀석은@ @내@ @몫이다!\"@ 붐비는 경기장 한가운데서 외치자 관중은 거대한 경기장을 가득 메우는 박수갈채로 화답합니다. NL NL 얼마 지나지 않아 노예상인들이 갓 잡은 포로를 끌고 옵니다. ~기습당해~ 얼떨결에 끌려온 도전자가 정신을 차리더니 자세를 가다듬습니다. NL NL 이거 일이 재밌어지겠네요.", + "구미가 당기긴 했지만 여기서 싸우는 불필요한 낭비라고 생각합니다. 당신은 가던 길을 가기로 했고 노예상인은 남아 다시 매복합니다." + ], + "OPTIONS": [ + "[도전한다] #r아레나 #r챔피언과 #r싸웁니다. #g많은 #g보상을 #g얻습니다.", + "[참가한다] #r사로잡힌 #r영웅과 #r싸웁니다. #g많은 #g보상을 #g얻습니다.", + "[떠난다]", + "[싸운다!]", + "[계속한다]" + ] + }, + "downfall:MindBloom": { + "NAME": "의식의 개화", + "DESCRIPTIONS": [ + "아름다운 저편을 가로지르며 걷는 당신의 생각이 갑자기 매우... #p~현실적으로~ 느껴지기 시작합니다... NL NL 상상 속에 있던 #r죽인 #r모험가와 #b비축한 #b영혼들이 현실 속에서 모습을 드러냅니다. NL 그 감각은 순식간에 사라져가고 있습니다. 어떻게 할까요?", + "당신은 예전에 이곳에 와본 적이 있습니다. NL NL 똑같이 모험가를 사냥했었죠. NL NL 이건 현실인 걸까요? NL NL 당신은 몇 번이나 죽었던 걸까요?", + "모든 것이 합리적으로 돌아옵니다. NL 단 하나의 목적, 하강, #p심장. NL NL 이것이 항상 유지되어왔던 방식입니다. NL 이것이 언제까지나 유지될 방식입니다. NL 이 모든 것은 다시 곧 잊혀지게 될 것입니다..." + ], + "OPTIONS": [ + "[나는 메아리다] #r자기 #r자신과 #r싸웁니다. #g희귀 #g유물을 #g얻습니다.", + "[나는 부유하다] #g영혼을 #g999 #g얻습니다. #r저주 #r- #r규칙 #r준수 #r2장.", + "[나는 완전하다] #g모든 #g카드 #g강화. #r회복할 #r수 #r없게 #r됩니다.", + "[잠김] 심장의 축복이 3개 필요합니다.", + "[떠난다]", + "[나는 완전하다] #g모든 #g카드 #g강화. #r부담을 #r얻습니다." + ] + }, + "downfall:MoaiHead": { + "NAME": "모아이 석상", + "DESCRIPTIONS": [ + "당신은 저편의 아름다운 상징물인 커다란 벽의 단편에 있는 거대한 돌무더기 머리 쪽으로 돌아가기로 합니다. NL NL 머리의 입은 활짝 열려있으며, 피로 붉게 얼룩진 커다랗고 겁주는 이빨을 드러냅니다. 석상의 표면은 머리의 입에 몸을 던져 삼켜지는 사람들을 가리키는 듯한 상형문자 투성이입니다.", + "대가를 피로 지불해야 한다는 것을 아는 당신은 석상의 입 안으로 발을 들여 석상이 작동되기를 기다립니다. 잠시 후 커다란 어금니가 쾅하고 내려오며 완전히 당신을 으스러뜨립니다. NL @어둠.@ NL 어둠 속에서 시간이 좀 지난 후, 빛 한 줌이 보입니다. 그리고 돌 이빨이 천천히 올라가는 소리가 들린다는 것을 알아차렸습니다. NL NL 석상의 마법으로 편히 휴식한 채 길을 떠납니다.", + "석상 입 안으로 발을 들이자 어마어마한 #b영적인 #b에너지가 체내로 흘러들어옵니다. 석상의 눈에 #b~불길이~ #b~일더니~ 커다란 어금니가 내려오며 당신을 으스러뜨립니다. NL 온 사방에 #b~푸른~ #b~빛이~ 가득합니다. NL NL 돌 이빨이 올라가자 당신은 완전히 활기를 되찾았고 이전보다 더 강력해진 느낌이 들었습니다.", + "무슨 일이 벌어질까 생각하며 길을 떠납니다." + ], + "OPTIONS": [ + "[영혼을 바친다] #r영혼을 #r", + " #r잃습니다. #g최대 #g체력 #g+ #g", + " #g, #g체력 #g모두 #g회복.", + "[잠김] 영혼이 ", + " 필요합니다.", + " #r잃습니다. #g모든 #g그렘린 #g최대 #g체력 #g+ #g", + "[안으로 뛰어든다] #g체력을 #g모두 #g회복합니다. #r영혼을 #r" + ] + }, + "downfall:SensoryStone": { + "NAME": "감각석", + "DESCRIPTIONS": [ + "#g~자만.~ NL NL 삶은 아름답고 참으로 감명 깊습니다... #g슬라임 일지라도 말이죠. NL NL 당신은 위대한 일을 해낼 운명이란 걸 항상 알고 있었습니다. 다른 이들은 금화나 날붙이에 안주하지만 당신은 아닙니다. 당신은 포식자처럼 무언가 특별한 것, 독특한 것, ~엄청난~ ~것을~ 기다립니다. NL NL 며칠이고... 몇 달이고... 몇 년이나... 첨탑에서 이루 말할 수 없는 나날이 흐르다, 마침내 당신은 그것을 발견하게 됩니다. 당신은 더는 덩어리로만 있지 않을 것입니다! 그들은 #y금화 와 #y장신구 를 가지고 있지만 당신은 더 좋은 걸 가지고 있죠... NL NL @바로@ @이@ @작은@ @중절모@ @말이죠!@ 정말 근사합니다!", + "#y~노쇠.~ NL NL 당신의 가슴에 #r검 이 박히고 #b환호성 이 귀를 가득 메웁니다... 마지막으로 얼굴에 주먹이 날아들어오고 이윽고 눈이 감깁니다. NL NL 낯선 방에서 깨어났지만 @움직일@ @수@ @없습니다.@ 말을 하려해도 아무 말도 나오지 않은 채 시야는 #g녹색 #g안개로 가려져 있습니다. 이건 꿈일까요? 여긴 사후세계인 걸까요? 기억해내려 애썼지만, 기억도, 팔다리도, 모두 흩어져있었습니다. NL NL 당신의 머릿속에서 단 하나의 명령이 떠오릅니다. #g\"균형은 #g강화되어야만 #g한다. #g태초를 #g지켜라.\"", + "#p~절망.~ NL NL #y관찰. #y기억. #y생존. 이게 와쳐의 임무입니다. 당신의 임무는 정체불명의 첨탑을 조사하는 것입니다. 육각형의 방에 들어서자마자 반응할 새도 없이 @뒤에@ @문이@ @무너져내립니다!@ NL NL 탈출구는 없습니다. 유일한 길은 받침대 위에 마법이 서려 있을 게 분명한 석판을 가져 오는 것뿐이었습니다. 유물이 피부에 닿는 그 순간, 당신의 몸이 ~형체도~ ~없이~ ~녹아내렸고~ 당신의 #p영혼 은 #p석판 에 빨려 들어갔습니다. NL NL 당신의 운명은 영원히 #p석판에 묶여 영겁의 세월 동안 #r저주받은 채로 첨탑을 헤매게 될 것입니다.", + "#y~무관심.~ NL NL 당신은 첫 번째로, ~모양기를~ 모셨습니다. 당신은 약점을 지니지 않은 채 태어나지 않고, '완벽'하게 생성되었습니다. 당신의 도식으로 수많은 구조물이 생성되었습니다. 창조주의 유산인 #y자동인형 덕에 말이죠. NL NL 하나하나가 다 완벽한 디자인이었고 모두 특정 목적에 부합했습니다. 도시의 균형을 유지하기 위해, 단 하나만 제외하고 말이죠. NL 당신은 #y결함 을 가장 높은 곳에 자리 잡은 창밖으로 내던져버렸고 그것은 첨탑 밑바닥까지 떨어져 나뒹굴었습니다. 이후 당신은 도시의 수호자 자리를 대신하게 되었습니다. NL NL 균형은 강화되어야만 하니까요.", + "#b~교만.~ NL NL 당신은 웅장한 경기장의 중심에 서 있습니다. 당신의 모든 노력이 이 단 한 번의 전투으로 결실을 맺습니다. 당신은 적의 체력을 소모시켜 틈이 생길 때까지 #b수비자세를 #b취합니다. 마지막 온 힘을 다해 상대방의 가슴에 #r검을 #r찔러 #r넣습니다. 관중석에 @우레와@ @같은@ @박수가@ @터져나옵니다!@ NL NL 당신은 승리만으로 그치지 않고 ~적의~ ~안면에다~ ~주먹을~ ~갈겨~ 최후의 모욕적인 일격을 날립니다. NL NL 이제 당신의 앞길을 막는 이는 그 누구도 없습니다. 당신이 바로 새로운 #b@챔피언입니다!@", + "#p~탐욕.~ NL NL #b권력의 #b유혹을 이겨낼 자는 거의 없을 것입니다. 그러나 권력에는 대가가 따르고, 위대한 권력에는 더 큰 대가가 따릅니다. NL NL 당신은 콜로세움이 내려다 보이는 왕좌에 앉아 #b챔피언 의 영광을 위해 #r죽을 #r때까지 #r싸우는 #r사람들을 흥미롭게 지켜봅니다. #g~영원한~ #g~영혼의~ #g~불꽃이~ 당신을 모십니다. 발을 들인 대가로 석판에 이름이 새겨져 사후세계의 당신에게 묶인 이들이죠. NL NL 한 전사가 안면에 강타를 날려 쓰러뜨리자 관중들은 환호성을 내지릅니다. 당신이 금고로 가보니 누군가 침입한 듯합니다. 함정은 작동됐지만 아무것도 찾을 수 없었습니다... 그리고 #p@석판도@ @사라졌습니다!@", + "#g~비탄.~ NL NL 당신은 마침내 첨탑의 정상에 서게 되었습니다. 당신은 위대한 자의 기념비인 이 거대한 건축물을 세우기 위해 지칠 줄 모르고 세월과 인생을 바쳤습니다. 정말이지 완벽한 #g곡선입니다. 모든 #y경계가 꼼꼼하게 설계되어 있습니다. NL NL “이제 끝났어요, 내 사랑.” 무기물의 손을 당신은 살포시 감싸고는 기계 전원을 켭니다. 부드러운 시동소리가 방을 가득 메우고 곧 당신의 #b~정수가~ 격렬히 빠져나가 창조물과 여러 가지 것들에 섞여 들어갑니다. 당신이 계획한 대로 둘 다 영원히 이곳에서 살아가게 될 것입니다. NL NL 메아리와 함께... #p심장의 ~첫~ ~고동~ ~소리가~ 울려 퍼집니다.", + "#b~분노.~ NL NL 당신은 가슴에 꽂혀 들어오는 #y화려하게 #y장식된 #y단검 을 어찌할 힘이 없었습니다. 최후의 순간, 이 첨탑을 다스리는 #p신에게 ~어떠한~ ~대가를~ 치러도 좋으니 살아남을 힘을 달라고 간절히 빕니다. NL NL 당신의 #p심장 은 마지막으로 격렬하게 고동치더니 이내... 고요해졌습니다. 하지만 사력을 다해 생명을 되찾아 #b@푸른@ #b@불꽃을@ 튀며 눈을 번뜩 뜹니다. 그리고는 구속을 쉽사리 끊어버리고 당신을 #b@둘러싼@ #b@로브를@ #b@입은@ #b@이들에게@ 포효합니다! NL NL 당신의 몸이 #b괴물의 #b형상으로 변하는 것이 느껴지자 앞에 있는 이들은 당신을 향해 절을 올립니다.", + "#p~오만.~ NL NL 이곳을 지배하는 #p신과 #p같은 #p심장 은 당신의 운명을 좌우합니다. 이제 조치를 취해야 할 #y시간 입니다. NL NL 저편은 첨탑의 구역 중 가장 경비가 덜한 곳이라 당신은 쉽게 #y금고에 잠입할 수 있었습니다. 강력한 유물이 많이 있었지만 유독 눈길을 끄는 ' #y~빛나는~ #y~회중시계~ '가 있었습니다. NL NL 굴하지 않는 자신감으로 손을 뻗고는, 회중시계를 낚아... @...아낚@ @를계시중회@ @,는고뻗@ @을손@ @로으감신자@ @는않@ @지하굴@ NL NL 이곳을 지배하는 #p신과 #p같은 #p심장을 자극... 한건가요...?", + "다시 생각해보니, 추억은 추억으로 남는 게 제일 좋을지도 모르겠네요." + ], + "OPTIONS": [ + "[회상] #g1장의 #g보스 #g카드 #g보상을 #g획득합니다.", + "[회상] #g2장의 #g보스 #g카드 #g보상을 #g획득합니다. #r체력을 #r", + "[회상] #g3장의 #g보스 #g카드 #g보상을 #g획득합니다. #r체력을 #r" + ] + }, + "downfall:SecretPortal": { + "NAME": "비밀 포탈", + "DESCRIPTIONS": [ + "반가운 광경이 펼쳐지고 있었습니다. #p~소용돌이치는~ #p~마법의~ #p~포탈~ 이 있는 돌 입구를 저편의 움직이는 벽이 둘러싸고 있습니다. NL NL 이 포탈은 저편의 지배자들과 빨리 접촉할 수 있습니다. 하지만 당신이 동력을 가져간다면 첨탑을 내려가는 여정이 앞당겨질 것입니다.", + "포탈은 나중에 언제든지 복구할 수 있습니다. 당신은 포탈에 동력을 공급하는 룬스톤을 캐고는, 재빨리 다음 목적지를 고민합니다. 이 돌은 잠시깐이지만 유용할 것입니다." + ], + "OPTIONS": [ + "[가져간다] 보스를 제외한 방으로 이동할 수 있습니다." + ] + }, + "downfall:TombRedMask": { + "NAME": "붉은 가면 왕의 무덤", + "DESCRIPTIONS": [ + "둥둥 떠있는 길의 반대 쪽에 매우 화려하게 장식된 무덤이 보입니다. NL NL 무덤에 이르자 당신은 비밀 장소가 있어 보이는 부드러운 벽을 발견합니다. 공격 한 번이면 충분히 부술 수 있을 것 같군요.", + "당신은 #r가면을 씁니다. 당신을 도와주기로 계약한 도적단은 이곳의 왕과 연관이 있어 보입니다. 아마 그들은 당신의 새 장신구에 영감을 받았던 거 같네요.", + "무덤에서 구멍이 열리더니 메모가 붙은 작은 붉은 가면이 슬며시 튀어나옵니다. \"내가 너에게서 취하듯이 남의 것을 취하여라!\"", + "무덤을 훼손하지 않기로 하고는 계속 나아갑니다.", + "가면을 수집한 데 만족하고는 계속 나아갑니다." + ], + "OPTIONS": [ + "[붉은 가면을 쓴다] #g도적단과의 #g계약을 #g강화합니다.", + "[잠김] 필요: 붉은 가면 & 도적단과의 계약.", + "[후려친다] ", + " #r카드를 #r잃습니다. #g붉은 #g가면을 #g얻습니다.", + "[잠김] 공격 카드가 필요합니다.", + "[떠난다]" + ] + }, + "downfall:WindingHalls": { + "NAME": "돌고도는 회랑", + "DESCRIPTIONS": [ + "구불구불한 길을 따라 천천히 걸어가다 당신은 저편의 악명높은 돌고 도는 회랑에 있단 걸 깨닫습니다. 작은 생명체들은 길을 찾으려고 하면 미치겠지만, 당신에게는 마치 오랜 친구처럼 친숙합니다. NL NL 머릿속에서 계속해서 들리는 #p~속삭이는~ #p~목소리가~ 어느 길로 가야 할지 결정해줍니다." + ], + "OPTIONS": [ + "[왼쪽] #g이벤트를 #g탐사합니다.", + "[오른쪽] #g보물 #g상자에서 #g유물을 #g찾습니다.", + "[직진] #g상인을 #g추적합니다." + ] + }, + "downfall:Joust": { + "NAME": "마상 시합", + "DESCRIPTIONS": [ + "커다란 건물들 사이를 지나가던 중, 길고 좁은 다리와 마주쳤습니다. 다리의 양 끝에는 기사들이 서로를 마주보고 있습니다. 당신이 다가가자, 그들은 서로를 노려보고는 흩어집니다. NL \"괴물! 네가 죽이는 걸 그렇게 잘한다면, 저것과 싸워라!\" NL \"아니, 네가 싸워라! 괴물들을 더 잘 알지 않느냐, 저 ~악마같은~ ~고양이와~ 함께 말이다!\" NL NL 그들은 말다툼을 멈추지 않습니다. 당신이 결정해야 할 것 같군요...", + "이 기사는 다른 기사보다 강한 게 분명합니다. 당신은 최선을 다했음에도 결국 패배했습니다. NL \"난 네 그런 짐승 같은 모습이 좋더라!\" 그들이 떠날 때 그는 다른 기사에게 말합니다. 말다툼하면서 말이죠.", + "당신은 그 기사의 공격을 피하고는 인정사정없이 그를 #r죽입니다. 그리고 그의 #g영혼을 즐겁게 빨아먹습니다. 다른 기사는 비명을 지르며 도망칩니다. 정말 겁쟁이군요...", + "겁쟁이 기사는 멀리서 장검으로 당신의 몸에 생채기를 약간 내고는 비명을 지르며 도망칩니다. 다른 기사는 화가 나서 그를 뒤쫓습니다. 당신은 짜증을 내며 다시 할 일이나 하러 갑니다.", + "당신은 겁쟁이 기사를 향해 ~슬금슬금~ 다가갔지만 겁쟁이 기사는 겁에 질려 도망치지 못합니다. 당신이 손쉽게 그를 #r살해하고 #g영혼을 취하고 다른 기사에게로 몸을 돌리자 이미 부리나케 도망간 뒤였습니다." + ], + "OPTIONS": [ + "[왼쪽] #r50%: #r체력을 #r", + " #r잃습니다.", + " #g50%: #g영혼을 #g200 #g얻습니다.", + "[오른쪽] #r25%: #r체력을 #r", + " #g75%: #g영혼을 #g100 #g얻습니다." + ] + }, + "downfall:BossTester": { + "NAME": "디버그 보스 준비", + "DESCRIPTIONS": [ + "막을 선택해서 그 막에 해당하는 보상을 시뮬레이션해서 받습니다. 만약 3막의 총 보상을 원한다면 3번째를 선택하세요. 첫 번째는 3막, 두 번째는 2막, 세 번째는 3막입니다.", + "보상을 받았습니다. 상점을 둘러본 후 다른 막의 보상을 원한다면 이 이벤트를 다시 실행하세요. 아니라면 보스와 전투하세요. 보스 보상은 주어지지 않습니다." + ], + "OPTIONS": [ + "[1막]", + "[2막]", + "[3막]", + "[상점]" + ] + }, + "downfall:BetterEnding": { + "NAME": "첨탑의 심장", + "DESCRIPTIONS": [ + "@쿠-궁@ ... @쿠-궁@ ... @쿠-궁@ ... NL 깊이 고동치는 격려가 방 전체에 걸쳐 느껴집니다... NL 이걸로 ~끝~ 일까요 ? 당신의 목적은 달성했을까요?", + "당신은 영혼들을 #b", + " 심장에게 돌려주었습니다! NL 심장은 크게 기뻐하며 #b@두근두근@ 거렸고, 영원히 두근거릴 겁니다.", + "노력에도 불구하고 심장의 문은 여전히 취약합니다. 당신은 스스로에게 질문합니다. ~\"이걸로~ ~정말~ ~만족하는~ ~건가?\"~ NL 당신은 지금까지 심장에게 영혼을 총 #b", + " 개 바친 것 같은 느낌이 듭니다.", + " NL 심장에게 소환된 모든 이들이 지금까지 영혼을 총 #b", + " 개 바쳤습니다.", + " NL 심장은 더욱 더 크게 맥박 치고 당신의 #y~의식은~ #y~점점~ #y~흐릿해집니다...~", + "NL 당신은 검을 준비합니다...", + "NL 당신은 단검을 준비합니다...", + "NL 당신은 코어를 최대로 충전합니다...", + "당신은 스스로에게 질문합니다. ~\"이걸로~ ~정말~ ~만족하는~ ~건가?\"~", + " NL 심장은 더욱 더 크게 맥박 치고 당신의 #y~의식은~ #y~점점~ #y~흐릿해집니다...~", + " NL 당신의 안에서 갑작스럽게 #y@에너지@ 가 폭발하듯 솟구쳤고, 그 #b@충격으로@ #b@인해@ 깨어납니다.", + " NL 다가오는 위협을 감지한 심장이 위쪽으로 #g물러납니다! 싸움은 아직 끝나지 않았습니다...", + "NL 당신은 지팡이에 신성한 에너지를 축적합니다...", + "당신은 내면에서 #p무언가 #p@악함을@ 느낍니다..." + ], + "OPTIONS": [ + "[계속한다]", + "[준다] #b???", + "[잠든다]", + "[문에 접근한다]" + ] + }, + "downfall:EvilShrines": { + "NAME": "", + "DESCRIPTIONS": [ + "오직 당신만이 이 힘을 가질 자격이 있는 법이죠. 당신은 성소를 산산조각 냈습니다. NL 어두운 통곡이 온 사방에 울려 퍼지더니 성소의 #p~저주~ #p~마법이~ 뼈에 사무치는 게 느껴졌습니다." ], + "OPTIONS": [ + "[훼손] #g카드를 #g2장 #g복제합니다. #r저주를 #r받습니다. #r- #r노쇠.", + "[훼손] #g카드를 #g2장 #g제거합니다. #r최대 #r체력을 #r", + " #r잃습니다.", + "[훼손] #g카드를 #g2장 #g변화합니다. #r체력을 #r", + "[훼손] #g카드를 #g2장 #g강화합니다. #r저주를 #r받습니다. #r- #r고통.", + " #r잃습니다.", + "[잠김] - 카드가 충분하지 않습니다." + + ] + } +} diff --git a/src/main/resources/downfallResources/localization/kor/MonsterStrings.json b/src/main/resources/downfallResources/localization/kor/MonsterStrings.json index 5a0f72df24..1ad5e32606 100644 --- a/src/main/resources/downfallResources/localization/kor/MonsterStrings.json +++ b/src/main/resources/downfallResources/localization/kor/MonsterStrings.json @@ -1,92 +1,99 @@ -{ - "downfall:ChangingTotem": { - "MOVES": [ - "Transformative Gaze" - ], - "NAME": "변화의 머리", - "DIALOG": [ - "" - ] - }, - "downfall:ForgetfulTotem": { - "MOVES": [ - "Forgetful Stare" - ], - "NAME": "망각의 머리", - "DIALOG": [ - "" - ] - }, - "downfall:GrowingTotem": { - "MOVES": [ - "Growth Beam" - ], - "NAME": "성장의 머리", - "DIALOG": [ - "" - ] - }, - "downfall:FleeingMerchant": { - "MOVES": [ - "Soul Steal" - ], - "NAME": "영혼 강탈", - "DIALOG": [ - "" - ] - }, - "downfall:LooterAlt": { - "MOVES": [ - ], - "NAME": "도적", - "DIALOG": [ - "~어이,~ 돈이 없잖아!", - "@안돼에에에에에!@", - "오늘이 네 제삿날이다, 멍청아." - ] - }, - "downfall:MuggerAlt": { - "MOVES": [ - ], - "NAME": "강도", - "DIALOG": [ - "한 수 가르쳐주지.", - "혼쭐을 내주마!" - ] - }, - "downfall:Fortification": { - "MOVES": [ - ], - "NAME": "요새", - "DIALOG": [ - ] - }, - "downfall:MushroomRed": { - "MOVES": [ - ], - "NAME": "그물버섯", - "DIALOG": [ - ] - }, - "downfall:MushroomPurple": { - "MOVES": [ - ], - "NAME": "섯버섯", - "DIALOG": [ - ] - }, - "downfall:MushroomWhite": { - "MOVES": [ - ], - "NAME": "말불버섯", - "DIALOG": [ - ] - }, - "downfall:DoomedDagger": { - "MOVES": [ - ], - "NAME": "파멸의 단검", - "DIALOG": [ - ] - } -} \ No newline at end of file +{ + "downfall:ChangingTotem": { + "MOVES": [ + "Transformative Gaze" + ], + "NAME": "변화의 머리", + "DIALOG": [ + "" + ] + }, + "downfall:ForgetfulTotem": { + "MOVES": [ + "Forgetful Stare" + ], + "NAME": "망각의 머리", + "DIALOG": [ + "" + ] + }, + "downfall:GrowingTotem": { + "MOVES": [ + "Growth Beam" + ], + "NAME": "성장의 머리", + "DIALOG": [ + "" + ] + }, + "downfall:FleeingMerchant": { + "MOVES": [ + "Soul Steal" + ], + "NAME": "영혼 강탈", + "DIALOG": [ + "" + ] + }, + "downfall:LooterAlt": { + "MOVES": [ + ], + "NAME": "도적", + "DIALOG": [ + "~어이,~ 돈이 없잖아!", + "@안돼에에에에에!@", + "오늘이 네 제삿날이다, 멍청아." + ] + }, + "downfall:MuggerAlt": { + "MOVES": [ + ], + "NAME": "강도", + "DIALOG": [ + "한 수 가르쳐주지.", + "혼쭐을 내주마!" + ] + }, + "downfall:Fortification": { + "MOVES": [ + ], + "NAME": "요새", + "DIALOG": [ + ] + }, + "downfall:MushroomRed": { + "MOVES": [ + ], + "NAME": "그물버섯", + "DIALOG": [ + ] + }, + "downfall:MushroomPurple": { + "MOVES": [ + ], + "NAME": "섯버섯", + "DIALOG": [ + ] + }, + "downfall:MushroomWhite": { + "MOVES": [ + ], + "NAME": "말불버섯", + "DIALOG": [ + ] + }, + "downfall:DoomedDagger": { + "MOVES": [ + ], + "NAME": "파멸의 단검", + "DIALOG": [ + ] + }, + "downfall:VoidCore": { + "MOVES": [ + ], + "NAME": "공허 핵심", + "DIALOG": [ + ] + } +} diff --git a/src/main/resources/downfallResources/localization/kor/OrbStrings.json b/src/main/resources/downfallResources/localization/kor/OrbStrings.json index 9e26dfeeb6..22fdca1b26 100644 --- a/src/main/resources/downfallResources/localization/kor/OrbStrings.json +++ b/src/main/resources/downfallResources/localization/kor/OrbStrings.json @@ -1 +1 @@ -{} \ No newline at end of file +{} \ 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 10f0cb40f1..079c213b98 100644 --- a/src/main/resources/downfallResources/localization/kor/PotionStrings.json +++ b/src/main/resources/downfallResources/localization/kor/PotionStrings.json @@ -1,11 +1,11 @@ -{ - "downfall:CursedFountainPotion": { - "NAME": "저주받은 샘 포션", - "DESCRIPTIONS": [ - "사용하면 #y약화를 #b", - " 부여하고 #y취약을 #b", - " 부여하고 #y힘을 #b", - " 감소시킵니다." - ] - } -} +{ + "downfall:CursedFountainPotion": { + "NAME": "저주받은 샘 포션", + "DESCRIPTIONS": [ + "사용하면 #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 8280f9f802..570975c64b 100644 --- a/src/main/resources/downfallResources/localization/kor/PowerStrings.json +++ b/src/main/resources/downfallResources/localization/kor/PowerStrings.json @@ -1,422 +1,502 @@ -{ - "downfall:FairyPotion": { - "NAME": "병 속의 요정", - "DESCRIPTIONS": [ - "체력이 #b0 이하가 될 때 최대 체력의 #b30% 만큼 회복하고 이 효과를 제거합니다.", - "허! 병 속의 요정이라니, 얼간이 같으니!" - ] - }, - "downfall:SoulSteal": { - "NAME": "영혼 도둑", - "DESCRIPTIONS": [ - "당신의 영혼을 #b", - " 훔쳤습니다." - ] - }, - "downfall:NeowInvulnerable": { - "NAME": "신의 생명", - "DESCRIPTIONS": [ - "내 카드를 사용할 때마다 체력을 #b", - " 회복합니다." - ] - }, - "downfall:TransformDrawnCardsPower": { - "NAME": "뽑을 카드 변형", - "DESCRIPTIONS": [ - "이번 턴에 처음으로 뽑는 카드를 #b", - " 장 #y변형 합니다. (", - " 남았습니다.)" - ] - }, - "downfall:TotemInvulnerable": { - "NAME": "살아있는 벽", - "DESCRIPTIONS": [ - "모든 머리의 체력이 #b1 이 될 때까지 죽일 수 없습니다. 다른 머리가 죽으면 죽습니다." - ] - }, - "downfall:ExhaustCardsPower": { - "NAME": "망각", - "DESCRIPTIONS": [ - "턴 종료 시 #y소멸시킬 카드를 1장 선택합니다." - ] - }, - "downfall:SpotWeakness": { - "NAME": "약점 분석", - "DESCRIPTIONS": [ - "매 턴 이 효과가 발동하는 동안 공격 카드를 사용할 때마다 이 적은 #y힘을 #b"," 얻습니다. 현재 #y힘을 #b", " 얻습니다." - ] - }, - "downfall:FearNoEvil": { - "NAME": "무외", - "DESCRIPTIONS": [ - "이번 턴 동안 내 #y공격 카드를 사용하면 #y무외를 사용해 #y명상할 것입니다.", - "#y무외를 사용해 #y명상할 것입니다." - ] - }, - "downfall:PoisonResist": { - "NAME": "중독 저항", - "DESCRIPTIONS": [ - "내 턴 종료 시 #y중독 효과를 받습니다. NL 내 턴 종료 시 남은 [E] 당 #y중독을 #b10 만큼 제거합니다." - ] - }, - "downfall:NeowBuff": { - "NAME": "니오우의 힘", - "DESCRIPTIONS": [ - "니오우의 턴 종료 시 #y힘을 #b2 얻습니다." - ] - }, - "downfall:WatcherAngryPower": { - "NAME": "진노 표출", - "DESCRIPTIONS": [ - "와쳐의 턴 종료 시 체력이 #b50% 이하라면 #y진노합니다. NL 진노는 와쳐의 주고 받는 피해량을 증가시킵니다. 받는 피해량은 #b100% 가 아닌 #b50% 증가합니다." - ] - }, - "downfall:NeowUnbridledRage": { - "NAME": "격노 표출", - "DESCRIPTIONS": [ - "니오우의 턴 종료 시 체력이 #b50% 이하라면 #y힘을 #b6 얻습니다. NL 전투마다 한 번만 발동합니다." - ] - }, - "downfall:WatcherCripplePower": { - "NAME": "천벌", - "DESCRIPTIONS": [ - "와쳐가 체력을 #b", - " 잃으면 #y힘을 #b1 잃습니다(턴당 최대 3번). NL 와쳐의 #y급소 피해는 #y방어도로 막을 수 있습니다.", - "이번 턴에 와쳐가 #y힘을 #b3 잃어 #y힘을 더 잃지 않습니다." - ] - }, - "downfall:WatcherSkillPower": { - "NAME": "부조화한 기도", - "DESCRIPTIONS": [ - "#y스킬 카드를 사용할 때마다 와쳐는 임시로 #y힘을 #b", - " 얻고 턴 종료시 얻은 #y힘을 잃습니다.", - "#y스킬 카드를 사용할 때마다 와쳐는 임시로 #y힘을 얻고 턴 종료시 얻은 #y힘을 잃습니다." - ] - }, - "downfall:WrathNextTurnPower": { - "NAME": "다음 턴 진노", - "DESCRIPTIONS": [ - "와쳐의 턴 시작 시 #y진노합니다." - ] - }, - "downfall:NeowBlasphemersDemise": { - "NAME": "모독자의 최후", - "DESCRIPTIONS": [ - "니오우가 체력을 #b", - " 잃기 전까지 이로운 효과를 얻을 때 추가로 #y힘을 #b10 증가시킵니다.", - "니오우가 마비되어 이로운 효과 턴에도 #y힘을 증가시킬 수 없습니다." - ] - }, - "downfall:WatcherDivinityPower": { - "NAME": "속절없는 믿음", - "DESCRIPTIONS": [ - "내 카드를 1장 사용할 때마다 와쳐가 #y만트라를 #b1 얻습니다. NL 와쳐가 #y강림한다면 힘을 #b3 얻습니다. NL 와쳐의 턴 시작 시 #y만트라를 #b4 잃습니다. NL 와쳐의 턴 종료 시 #y강림에서 벗어나지 않습니다." - ] - }, - "downfall:NeowFleetingFaith": { - "NAME": "덧없는 믿음", - "DESCRIPTIONS": [ - "내 카드를 1장 사용할 때마다 니오우가 #y만트라를 #b1 얻습니다. 니오우의 턴 시작 시 #y만트라를 #b5 잃습니다." - ] - }, - "downfall:SilentShivTimeEaterPower": { - "NAME": "칼날 꾸러미", - "DESCRIPTIONS": [ - "매 턴 내가 비용이 #b2 이상인 카드를 처음으로 사용하면 사일런트가 #y단도를 2장 얻습니다." - ] - }, - "downfall:NeowBagOfKnives": { - "NAME": "날붙이 꾸러미", - "DESCRIPTIONS": [ - "매 턴 내가 비용이 #b2 이상인 카드를 처음으로 사용하면 피해를 #b4 만큼 2번 받습니다." - ] - }, - "downfall:SilentMirrorImagePower": { - "NAME": "복시", - "DESCRIPTIONS": [ - "매 턴 시작 시 사일런트의 분신이 진짜 사일런트가 어디에 있는지 숨깁니다. 진짜 사일런트나 분신을 공격하면 해당 턴에 제거됩니다." - ] - }, - "downfall:NeowSeeingDouble": { - "NAME": "복안", - "DESCRIPTIONS": [ - "매 턴 처음으로 사용하는 내 #y공격 카드의 피해량이 #b0 이 됩니다." - ] - }, - "downfall:SilentPoisonPower": { - "NAME": "위험: 유독 과다", - "DESCRIPTIONS": [ - "턴 종료 시 #y중독은 방어도에 막히는 피해를 줍니다. NL 전투 시작 시 #y해독제를 얻습니다." - ] - }, - "downfall:NeowHighlyToxic": { - "NAME": "위험: 유독 과대", - "DESCRIPTIONS": [ - "니오우는 턴당 #y중독을 #b5 부여합니다. 턴 종료 시 #y중독은 방어도에 막히는 피해를 줍니다. NL 전투 시작 시 뽑을 카드 더미에 #y해독제를 2장 섞어 넣습니다." - ] - }, - "downfall:DefectVoidPower": { - "NAME": "에너지 도둑", - "DESCRIPTIONS": [ - "디펙트가 #y공허를 생성할 때마다 내 버린 카드 더미에 #y공허를 섞어 넣습니다." - ] - }, - "downfall:NeowEnergyThief": { - "NAME": "에너지 강탈", - "DESCRIPTIONS": [ - "니오우가 #r저주를 내 뽑을 카드 더미에 섞어 넣을 때 #r공허도 1장 카드 더미에 섞어 넣습니다." - ] - }, - "downfall:DefectAncientConstructPower": { - "NAME": "고대의 구성", - "DESCRIPTIONS": [ - "#y청동 #y구체 하수인 2체와 싸웁니다. NL 디펙트의 #y코어 #y서지가 #y소멸하지 않습니다." - ] - }, - "downfall:NeowAncientConstruct": { - "NAME": "고대의 구조", - "DESCRIPTIONS": [ - "니오우가 #y인공물이 없다면 턴 종료 시 #y인공물을 #b2 얻습니다." - ] - }, - "downfall:DefectCuriosity": { - "NAME": "인지 비편향", - "DESCRIPTIONS": [ - "내 #y파워 카드를 1장 사용할 때마다 디펙트는 #y밀집을 #b", - " 얻습니다." - ] - }, - "downfall:DefectBiasCuriosity": { - "NAME": "수정된 인지", - "DESCRIPTIONS": [ - "전투 시작 시 디펙트가 #y인지 #y비편향을 사용합니다. NL 내 #y파워 카드를 사용할 때마다 그 턴 동안 디펙트가 #y편향의 효과를 받지 않습니다.", - "내 #y파워 카드를 사용할 때마다 그 턴 동안 디펙트가 #y편향의 효과를 받지 않습니다.", - "이번 턴 동안 디펙트가 #y편향의 효과를 받지 않게 됩니다.", - "편향" - ] - }, - "downfall:DefectCuriosityLighning": { - "NAME": "인지 비편향", - "DESCRIPTIONS": [ - "내 #y파워 카드를 사용할 때마다 디펙트가 #y번개 #y구체를 #b", - " 영창합니다." - ] - }, - "downfall:NeowUnbiasedCognition": { - "NAME": "인식 비편향", - "DESCRIPTIONS": [ - "내 #y파워 카드를 1장 사용할 때마다 니오우는 #y힘을 #b2 얻습니다." - ] - }, - "downfall:IroncladStatusPower": { - "NAME": "아픔 나누기", - "DESCRIPTIONS": [ - "아이언클래드가 #y상태이상을 생성할 때마다 동일한 카드를 내 버린 카드 더미에 섞어 넣습니다." - ] - }, - "downfall:NeowSyncronize": { - "NAME": "고통 나누기", - "DESCRIPTIONS": [ - "매 턴 니오우는 무작위 #y상태이상을 1장 내 버린 카드더미에 섞어 넣습니다." - ] - }, - "downfall:IroncladMushroomPower": { - "NAME": "광란의 포식", - "DESCRIPTIONS": [ - "아이언클래드의 #y사신 카드는 #y소멸하지 않고 모든 버섯들을 대상으로 삼습니다. NL 버섯을 죽이면 아이언클래드가 #y힘을 #b1 얻습니다." - ] - }, - "downfall:NeowFeedingFrenzy": { - "NAME": "광도의 포식", - "DESCRIPTIONS": [ - "니오우는 막히지 않은 피해를 받을 때마다 체력을 회복합니다." - ] - }, - "downfall:IroncladFortificationPower": { - "NAME": "요새", - "DESCRIPTIONS": [ - "아이언클래드가 #y요새와 함께 싸웁니다. 매 턴 요새는 아이언클래드에게 #y방어도를 #b", - " 줍니다. NL #y요새가 파괴되었다면 아이언클래드는 #y바리케이드를 잃지만 매 턴 #y힘을 #b5 얻습니다." - ] - }, - "downfall:NeowBastion": { - "NAME": "보루", - "DESCRIPTIONS": [ - "니오우는 #y바리케이드를 가지고 매 턴 시작 시 #y방어도를 #b10 얻습니다." - ] - }, - "downfall:MerchantStrengthPower": { - "NAME": "영혼 도둑", - "DESCRIPTIONS": [ - "상인은 이번 도전에서 영혼 강탈로 벌은 #y힘을 두 배로 늘립니다. 벌은 #y힘만큼 #y민첩을 얻습니다." - ] - }, - "downfall:NeowMantra": { - "NAME": "만트라", - "DESCRIPTIONS": [ - "니오우의 #y만트라가 #b10 되면 #y강림해서 니오우의 공격이 3배의 피해를 줍니다." - ] - }, - "downfall:NeowSeeingDoubleProduct": { - "NAME": "???", - "DESCRIPTIONS": [ - "이번 턴에 니오우에게 가하는 #y공격의 피해가 #b0 됩니다." - ] - }, - "downfall:CrowbotRitualPower": { - "NAME": "재 프로그래밍: 의식", - "DESCRIPTIONS": [ - "#y크로우봇의 체력이 #b50% 이하됐다면 크로우봇의 턴 종료 시 체력을 #b3 잃고 #y힘을 #b", - " 얻습니다." - ] - }, - "downfall:DamageMultiplier": { - "NAME": "피해 배율기", - "DESCRIPTIONS": [ - "#y공격이 피해를 #b", - " 번 줍니다." - ] - }, - "downfall:CompressionMold": { - "NAME": "금형 압축", - "DESCRIPTIONS": [ - "#y발사된 탄약은 이후 강화됩니다." - ] - }, - "downfall:OnDeathEveryoneStr": { - "NAME": "최후의 발악: 발화+", - "DESCRIPTIONS": [ - "이 캐릭터가 죽을 때 나를 포함한 모든 캐릭터가 #y힘을 #b", - " 얻습니다." - ] - }, - "downfall:OnDeathEveryoneThorns": { - "NAME": "최후의 발악: 마름쇠+", - "DESCRIPTIONS": [ - "이 캐릭터가 죽을 때 나를 포함한 모든 캐릭터가 #y가시를 #b", - " 얻습니다." - ] - }, - "downfall:OnDeathEveryoneBuffer": { - "NAME": "최후의 발악: 버퍼+", - "DESCRIPTIONS": [ - "이 캐릭터가 죽을 때 나를 포함한 모든 캐릭터가 #y버퍼를 #b", - " 얻습니다." - ] - }, - "downfall:OnDeathEveryoneVigor": { - "NAME": "최후의 발악: 불의 고리+", - "DESCRIPTIONS": [ - "이 캐릭터가 죽을 때 나를 포함한 모든 캐릭터가 #y활력을 #b", - " 얻습니다." - ] - }, - "downfall:OnDeathEveryoneRuggedVuln": { - "NAME": "최후의 발악:게슈탈트", - "DESCRIPTIONS": [ - "이 캐릭터가 죽을 때 나를 포함한 모든 캐릭터가 #y강인함을 #b", - " 얻고 #y취약을 #b", - " 얻습니다." - ] - }, - "downfall:MonsterVigor": { - "NAME": "활력", - "DESCRIPTIONS": [ - "다음 공격이 추가로 피해를 #b", - " 줍니다." - ] - }, - "downfall:HermitConcentrateAdder": { - "NAME": "초집중", - "DESCRIPTIONS": [ - "허밋이 집중해서 허밋의 카드에 특별한 정조준 효과를 부여합니다. 막히지 않은 피해를 #b10 주면 허밋의 집중이 깨져 정조준 효과를 잃게 됩니다." - ] - }, - "downfall:HermitConcentrationPower": { - "NAME": "집중 중", - "DESCRIPTIONS": [ - "집중하는 동안 허밋의 카드에 #y정조준 효과가 적용됩니다. 이번 턴에 막히지 않은 피해를 #b", - " 주면 집중이 깨집니다.", - "허밋의 집중이 깨져 이번 턴에 #y정조준 효과가 발동하지 않습니다." - ] - }, - "downfall:TangerinePower": { - "NAME": "보안관", - "DESCRIPTIONS": [ - "탄제린이 죽으면 허밋의 #y집중이 깨집니다. 허밋이 #y힘을 #b", - " 얻습니다." - ] - }, - "downfall:HermitWheelOfFortune": { - "NAME": "행운의 돌림판", - "DESCRIPTIONS": [ - "#y공격 카드를 사용할 때마다 허밋의 첫번째 카드를 #y순환합니다. 허밋의 카드 비용이 고정됩니다." - ] - }, - "downfall:HermitDoomsday": { - "NAME": "최후의 심판", - "DESCRIPTIONS": [ - "허밋이 #y의식을 #b1 얻습니다. 허밋이 #y연옥을 사용할 때마다 #y파멸의 #y단검을 소환합니다." - ] - }, - "downfall:NeowEclipse": { - "NAME": "암흑기", - "DESCRIPTIONS": [ - "매 턴 니오우는 #y휘발성 효과가 추가된 #y임박한 #y종말을 내 손에 추가합니다." - ] - }, - "downfall:NeowWheelOfDeath": { - "NAME": "죽음의 돌림판", - "DESCRIPTIONS": [ - "카드를 #b", - " 번 사용할 때마다 니오우는 #y힘을 #b", - " 얻습니다." - ] - }, - "downfall:NeowDistracting": { - "NAME": "산만", - "DESCRIPTIONS": [ - "이번 턴 동안 처음으로 니오우에게 #y공격 카드로 피해를 준다면 다음 턴에 [E] 를 #b1 적게 얻습니다." - ] - }, - "downfall:NextTurnPowerPower": { - "NAME": "다음 턴 ", - "DESCRIPTIONS": [ - "버그! 이걸 볼 수 없습니다.", - "다음턴에 #b", - " ", - "을 얻습니다.", - "LOCALIZATION NOTE: Please keep the space after 'Next Turn' in the NAME field." - ] - }, - "downfall:NeowStayAt1Hp": { - "NAME": "불사", - "DESCRIPTIONS": [ - "니오우의 체력을 #b1 이하로 잃게 할 수 없습니다. 체력이 #b1 이하가 되면 니오우는 체력을 모두 회복하고 새로운 국면으로 접어듭니다." - ] - }, - "downfall:NeowDivinity": { - "NAME": "강림", - "DESCRIPTIONS": [ - "이번 턴 동안 니오우의 공격이 3배의 피해를 줍니다." - ] - }, - "downfall:NeowSpirit": { - "NAME": "영웅의 혼", - "DESCRIPTIONS": [ - "니오우가 이로운 효과를 사용한다면 #y힘을 #b6 얻고... ", - " NL 악마의 형상을 1 얻습니다. #r(아이언클래드)", - " NL 가시를 #b2 얻습니다. #g(사일런트)", - " NL 버퍼를 #b2 얻습니다. #b(디펙트)", - " NL 만트라를 #b5 얻습니다. #p(와쳐)", - " NL 부패를 #b1 장 뽑을 카드 더미에 섞어 넣습니다. #y(허밋)" - ] - }, - "downfall:HeartsFavorPower": { - "NAME": "심장의 은총", - "DESCRIPTIONS": [ - "니오우의 #y천하무적이 #b0 이 될 때마다 #y신의 #y생명을 #b", - " 감소시킵니다." - ] - } -} +{ + "downfall:FairyPotion": { + "NAME": "병 속의 요정", + "DESCRIPTIONS": [ + "체력이 #b0 이하가 될 때 최대 체력의 #b30% 만큼 회복하고 이 효과를 제거합니다.", + "허! 병 속의 요정이라니, 얼간이 같으니!" + ] + }, + "downfall:CultistRevivePower": { + "NAME": "헛된 숭배", + "DESCRIPTIONS": [ + "체력이 #b0 이하가 될 때 최대 체력의 #b50% 만큼 회복하고 이 효과를 제거합니다.", + "까아아아악!" + ] + }, + "downfall:SoulSteal": { + "NAME": "영혼 도둑", + "DESCRIPTIONS": [ + "당신의 영혼을 #b", + " 훔쳤습니다." + ] + }, + "downfall:NeowInvulnerable": { + "NAME": "신의 생명", + "DESCRIPTIONS": [ + "내 카드를 사용할 때마다 체력을 #b", + " 회복합니다." + ] + }, + "downfall:TransformDrawnCardsPower": { + "NAME": "뽑을 카드 변화", + "DESCRIPTIONS": [ + "이번 턴에 처음으로 뽑는 카드를 #b", + " 장 #y변화합니다. (", + " 남았습니다.)" + ] + }, + "downfall:TotemInvulnerable": { + "NAME": "살아있는 벽", + "DESCRIPTIONS": [ + "모든 머리의 체력이 #b1 이 될 때까지 죽일 수 없습니다. 다른 머리가 죽으면 죽습니다." + ] + }, + "downfall:ExhaustCardsPower": { + "NAME": "망각", + "DESCRIPTIONS": [ + "턴 종료 시 #y소멸시킬 카드를 1장 선택합니다." + ] + }, + "downfall:SpotWeakness": { + "NAME": "약점 분석", + "DESCRIPTIONS": [ + "매 턴 이 효과가 발동하는 동안 #y공격 카드를 사용할 때마다 이 적은 #y힘을 #b", + " 얻습니다.", + "이번 턴에 #y공격 카드를 사용했습니다. 현재 #y힘을 #b", + " 얻었습니다." + ] + }, + "downfall:FearNoEvil": { + "NAME": "무외", + "DESCRIPTIONS": [ + "이번 턴 동안 내 #y공격 카드를 사용하면 #y무외를 사용해 #y명상할 것입니다.", + "#y무외를 사용해 #y명상할 것입니다." + ] + }, + "downfall:PoisonResist": { + "NAME": "중독 저항", + "DESCRIPTIONS": [ + "막히지 않은 #y공격 피해를 줄 때마다 중독을 #b", + " 제거합니다." + ] + }, + "downfall:OnPlayerPoison": { + "NAME": "중독", + "DESCRIPTIONS": [ + "내 턴 종료 시 피해를 #b", + " 받습니다." + ] + }, + "downfall:NeowBuff": { + "NAME": "니오우의 활력", + "DESCRIPTIONS": [ + "니오우의 턴 종료 시 #y힘을 #b2 얻습니다." + ] + }, + "downfall:WatcherAngryPower": { + "NAME": "진노 표출", + "DESCRIPTIONS": [ + "와쳐의 턴 종료 시 체력이 #b50% 이하라면 #y진노합니다. NL 진노는 와쳐의 주고 받는 피해량을 증가시킵니다. 받는 피해량은 #b100% 가 아닌 #b50% 증가합니다.", + "진노는 와쳐의 주고 받는 피해량을 증가시킵니다. 받는 피해량은 #b100% 가 아닌 #b50% 증가합니다." + ] + }, + "downfall:NeowUnbridledRage": { + "NAME": "격노 표출", + "DESCRIPTIONS": [ + "니오우의 턴 종료 시 체력이 #b50% 이하라면 #y힘을 #b6 얻습니다. NL 전투당 한 번만 발동합니다." + ] + }, + "downfall:WatcherCripplePower": { + "NAME": "천벌", + "DESCRIPTIONS": [ + "와쳐가 체력을 #b", + " 잃으면 #y힘을 #b1 잃습니다 (턴당 최대 3번). NL 와쳐의 #y급소 피해는 #y방어도로 막을 수 있습니다.", + "이번 턴에 와쳐가 #y힘을 #b3 잃어 #y힘을 더 잃지 않습니다." + ] + }, + "downfall:WatcherSkillPower": { + "NAME": "부조화한 기도", + "DESCRIPTIONS": [ + "#y스킬 카드를 사용할 때마다 와쳐는 임시로 #y힘을 #b", + " 얻고 #y민첩을 #b", + " 얻고 턴 종료시 얻은 #y힘과 #y민첩을 잃습니다. #y스킬 카드를 사용하면 #y힘을 #b", + " 얻고 #y파워 카드를 사용하면 #y힘과 #y민첩 모두 얻습니다.", + "한 턴에 카드를 #b", + " 장 이상 사용하면 와쳐의 해로운 효과를 모두 제거합니다.", + "이번 턴에 카드를 #b", + " 장 사용했습니다." + ] + }, + "downfall:WrathNextTurnPower": { + "NAME": "다음 턴 진노", + "DESCRIPTIONS": [ + "와쳐의 턴 시작 시 #y진노합니다." + ] + }, + "downfall:NeowBlasphemersDemise": { + "NAME": "모독자의 최후", + "DESCRIPTIONS": [ + "니오우가 체력을 #b", + " 잃기 전까지 이로운 효과를 얻을 때 추가로 #y힘을 #b10 증가시킵니다.", + "니오우가 마비돼 이로운 효과 턴에도 #y힘을 증가시킬 수 없습니다." + ] + }, + "downfall:WatcherDivinityPower": { + "NAME": "속절없는 믿음", + "DESCRIPTIONS": [ + "내 카드를 사용할 때마다 와쳐가 #y만트라를 #b1 얻습니다. NL 와쳐가 #y강림하면 와쳐가 #y힘을 #b3 얻습니다. NL 와쳐의 턴 시작 시 와쳐는 #y만트라를 #b5 잃습니다. NL 와쳐가 #y강림하면 그 경지에서 벗어나지 않습니다." + ] + }, + "downfall:SimpleWatcherDivinityPower": { + "NAME": "속절없는 믿음", + "DESCRIPTIONS": [ + "한 턴에 내 카드를 #b6 장 사용하면 와쳐가 #y만트라를 #b1 , #y불가침을 #b1 얻습니다.", + " NL 이번 턴에 카드를 #b", + " 장 사용했습니다.", + " NL (이번 턴에 효과가 발동했습니다.)", + " NL NL 와쳐가 #y강림하면 절대 벗어나지 않지만, 공격이 #b2 배의 피해를 줍니다." + ] + }, + "downfall:NeowFleetingFaith": { + "NAME": "덧없는 믿음", + "DESCRIPTIONS": [ + "내 카드를 1장 사용할 때마다 니오우가 #y만트라를 #b1 얻습니다. 니오우의 턴 시작 시 #y만트라를 #b5 잃습니다." + ] + }, + "downfall:SilentShivTimeEaterPower": { + "NAME": "칼날 꾸러미", + "DESCRIPTIONS": [ + "매 턴 내가 비용이 #b2 이상인 카드를 처음으로 사용하면 사일런트가 #y단도를 #b2 장 얻습니다." + ] + }, + "downfall:SilentDelayedWraithPower": { + "NAME": "흉기", + "DESCRIPTIONS": [ + "처음 사일런트이 체력이 #b0 이하가 될 때 #y분노의 #y형상을 취하며", + " 체력을 #b", + " 회복합니다." + ] + }, + "downfall:NeowBagOfKnives": { + "NAME": "날붙이 꾸러미", + "DESCRIPTIONS": [ + "매 턴 내가 비용이 #b2 이상인 카드를 처음으로 사용하면 피해를 #b4 만큼 두 번 받습니다." + ] + }, + "downfall:SilentMirrorImagePower": { + "NAME": "복시", + "DESCRIPTIONS": [ + "매 턴 시작 시 사일런트의 분신이 진짜 사일런트가 어디에 있는지 숨깁니다. 본체나 분신을 공격하면 분신은 해당 턴에 제거됩니다." + ] + }, + "downfall:NeowSeeingDouble": { + "NAME": "복안", + "DESCRIPTIONS": [ + "매 턴 처음으로 사용하는 내 #y공격 카드의 피해량이 #b0 이 됩니다." + ] + }, + "downfall:SilentPoisonPower": { + "NAME": "위험: 유독 과다", + "DESCRIPTIONS": [ + "턴 종료 시 #y중독은 방어도에 막히는 피해를 줍니다.", + "#y중독이 사라지지 않으며 내 턴 종료시 방어도에 막히는 피해를 줍니다." + ] + }, + "downfall:NeowHighlyToxic": { + "NAME": "위험: 유독 과대", + "DESCRIPTIONS": [ + "니오우는 턴당 #y중독을 #b5 부여합니다. 턴 종료 시 #y중독은 방어도에 막히는 피해를 줍니다. NL 전투 시작 시 뽑을 카드 더미에 #y해독제를 2장 섞어 넣습니다." + ] + }, + "downfall:DefectVoidPower": { + "NAME": "에너지 도둑", + "DESCRIPTIONS": [ + "디펙트가 #y공허를 생성할 때마다 내 버린 카드 더미에 #y공허를 섞어 넣습니다." + ] + }, + "downfall:NeowEnergyThief": { + "NAME": "에너지 강탈", + "DESCRIPTIONS": [ + "니오우가 #r저주를 내 뽑을 카드 더미에 섞어 넣을 때 #y공허도 1장 카드 더미에 섞어 넣습니다." + ] + }, + "downfall:DefectAncientConstructPower": { + "NAME": "고대의 구성", + "DESCRIPTIONS": [ + "#y청동 #y구체 하수인 2체와 싸웁니다. NL 디펙트의 #y코어 #y서지가 #y소멸하지 않습니다." + ] + }, + "downfall:NeowAncientConstruct": { + "NAME": "고대의 구조", + "DESCRIPTIONS": [ + "니오우가 #y인공물이 없다면 니오우의 턴 종료 시 #y인공물을 #b2 얻습니다." + ] + }, + "downfall:DefectCuriosity": { + "NAME": "인지 비편향", + "DESCRIPTIONS": [ + "내 #y파워 카드를 사용할 때마다 디펙트는 #y밀집을 #b", + " 얻습니다.", + " #y밀집이 디펙트의 #y힘으로 증가합니다." + ] + }, + "downfall:DefectBiasCuriosity": { + "NAME": "수정된 인지", + "DESCRIPTIONS": [ + "전투 시작 시 디펙트가 #y밀집을 #b4 얻습니다. 내 #y파워 카드를 사용할 때마다 #y밀집을 #b1 얻고 동시에 디펙트의 턴 시작 시 #y밀집을 #b1 잃습니다.", + "디펙트의 턴 종료 시 #y밀집을 #b", + "", + " 잃습니다." + ] + }, + "downfall:DefectCuriosityLighning": { + "NAME": "인지 비편향", + "DESCRIPTIONS": [ + "내 #y파워 카드를 사용할 때마다 디펙트가 #y번개 #y구체를 #b", + " 번 영창합니다." + ] + }, + "downfall:NeowUnbiasedCognition": { + "NAME": "인식 비편향", + "DESCRIPTIONS": [ + "내 #y파워 카드를 사용할 때마다 니오우는 #y힘을 #b2 얻습니다." + ] + }, + "downfall:IroncladStatusPower": { + "NAME": "아픔 나누기", + "DESCRIPTIONS": [ + "아이언클래드가 #y상태이상을 생성할 때마다 동일한 카드를 내 버린 카드 더미에 섞어 넣습니다.", + "아이언클래드가 #y상태이상을 생성할 때마다 동일한 카드를 내 버린 카드 더미에 섞어 넣습니다. NL 체력을 #b", + " 이상 잃으면 #y보존된 #y순수를 얻습니다.", + "아이언클래드가 #y상태이상을 생성할 때마다 동일한 카드를 내 버린 카드 더미에 섞어 넣습니다. NL 체력을 #b" + ] + }, + "downfall:NeowSyncronize": { + "NAME": "고통 나누기", + "DESCRIPTIONS": [ + "매 턴 니오우는 무작위 #y상태이상을 1장 내 버린 카드더미에 섞어 넣습니다." + ] + }, + "downfall:IroncladMushroomPower": { + "NAME": "광란의 포식", + "DESCRIPTIONS": [ + "아이언클래드의 #y사신은 #y소멸하지 않고 모든 버섯들을 대상으로 삼습니다. NL 버섯을 죽이면 아이언클래드가 #y힘을 #b1 얻습니다.", + "아이언클래드의 #y사신은 모든 버섯들을 대상으로 삼습니다. NL 버섯을 죽이면 아이언클래드가 #y힘을 #b", + " 얻습니다." + ] + }, + "downfall:NeowFeedingFrenzy": { + "NAME": "광도의 포식", + "DESCRIPTIONS": [ + "니오우는 막히지 않은 피해를 받을 때마다 체력을 회복합니다." + ] + }, + "downfall:IroncladFortificationPower": { + "NAME": "요새", + "DESCRIPTIONS": [ + "아이언클래드가 #y요새와 함께 싸웁니다. 매 턴 요새는 아이언클래드에게 #y방어도를 #b", + " 줍니다. NL #y요새가 파괴되면 아이언클래드는 #y바리케이드를 잃지만 매 턴 #y힘을 #b5 얻습니다.", + "파괴되면 아이언클래드는 #y바리케이드를 잃지만 매 턴 #y힘을 #b5 얻습니다." + ] + }, + "downfall:NeowBastion": { + "NAME": "보루", + "DESCRIPTIONS": [ + "니오우는 #y바리케이드를 가지고 매 턴 시작 시 #y방어도를 #b10 얻습니다." + ] + }, + "downfall:MerchantStrengthPower": { + "NAME": "영혼 도둑", + "DESCRIPTIONS": [ + "상인은 이번 도전에서 영혼 강탈로 벌은 #y힘을 두 배로 늘립니다. 벌은 #y힘만큼 #y민첩을 얻습니다." + ] + }, + "downfall:NeowMantra": { + "NAME": "만트라", + "DESCRIPTIONS": [ + "니오우의 #y만트라가 #b10 되면 #y강림해서 니오우의 공격이 #b3 배의 피해를 줍니다." + ] + }, + "downfall:NeowSeeingDoubleProduct": { + "NAME": "???", + "DESCRIPTIONS": [ + "이번 턴에 니오우에게 가하는 #y공격의 피해가 #b0 됩니다." + ] + }, + "downfall:CrowbotRitualPower": { + "NAME": "재 프로그래밍: 의식", + "DESCRIPTIONS": [ + "#y크로우봇의 체력이 #b50% 이하라면 크로우봇의 턴 종료 시 체력을 #b3 잃고 #y힘을 #b", + " 얻습니다." + ] + }, + "downfall:DamageMultiplier": { + "NAME": "피해 배율기", + "DESCRIPTIONS": [ + "#y공격이 피해를 #b", + " 번 줍니다." + ] + }, + "downfall:CompressionMold": { + "NAME": "금형 압축", + "DESCRIPTIONS": [ + "#y발사된 탄약은 이후 강화됩니다." + ] + }, + "downfall:OnDeathEveryoneStr": { + "NAME": "최후의 발악: 발화+", + "DESCRIPTIONS": [ + "이 캐릭터가 죽을 때 나를 포함한 모든 캐릭터가 #y힘을 #b", + " 얻습니다." + ] + }, + "downfall:OnDeathEveryoneThorns": { + "NAME": "최후의 발악: 마름쇠+", + "DESCRIPTIONS": [ + "이 캐릭터가 죽을 때 나를 포함한 모든 캐릭터가 #y가시를 #b", + " 얻습니다." + ] + }, + "downfall:OnDeathEveryoneBuffer": { + "NAME": "최후의 발악: 버퍼+", + "DESCRIPTIONS": [ + "이 캐릭터가 죽을 때 나를 포함한 모든 캐릭터가 #y버퍼를 #b", + " 얻습니다. (버퍼: 다음 번에 체력을 잃는 것을 막아줍니다.)" + ] + }, + "downfall:OnDeathEveryoneVigor": { + "NAME": "최후의 발악: 불의 고리+", + "DESCRIPTIONS": [ + "이 캐릭터가 죽을 때 나를 포함한 모든 캐릭터가 #y활력을 #b", + " 얻습니다. (활력: 다음 공격이 추가 피해를 줍니다.)" + ] + }, + "downfall:OnDeathEveryoneRuggedVuln": { + "NAME": "최후의 발악: 게슈탈트", + "DESCRIPTIONS": [ + "이 캐릭터가 죽을 때 나를 포함한 모든 캐릭터가 #y강인함을 #b", + " 얻고 #y취약을 #b", + " 얻습니다. (강인함: 막히지 않은 공격 피해를 입을 경우 피해를 #b2 으로 낮춥니다.)" + ] + }, + "downfall:MonsterVigor": { + "NAME": "활력", + "DESCRIPTIONS": [ + "다음 공격의 피해량이 #b", + " 증가합니다." + ] + }, + "downfall:HermitConcentrateAdder": { + "NAME": "초집중", + "DESCRIPTIONS": [ + "허밋이 #y집중해서 허밋의 카드에 특별한 #y정조준 효과를 부여합니다. 막히지 않은 피해를 #b10 주면 허밋의 #y집중이 깨져 #y정조준 효과를 잃게 됩니다." + ] + }, + "downfall:HermitConcentrationPower": { + "NAME": "집중 중", + "DESCRIPTIONS": [ + "#y집중하는 동안 허밋의 카드에 #y정조준 효과가 적용됩니다. 이번 턴에 막히지 않은 피해를 #b", + " 주면 #y집중이 깨집니다.", + "허밋의 #y집중이 깨져 이번 턴에 #y정조준 효과가 발동하지 않습니다." + ] + }, + "downfall:TangerinePower": { + "NAME": "보안관", + "DESCRIPTIONS": [ + "탄제린이 죽으면 허밋의 #y집중이 깨집니다. 허밋이 #y힘을 #b", + " 얻습니다.", + "탄제린이 죽으면 허밋의 #y집중이 깨집니다." + ] + }, + "downfall:HermitWheelOfFortune": { + "NAME": "숙명의 돌림판", + "DESCRIPTIONS": [ + "#y공격 카드를 사용할 때마다 허밋의 첫번째 카드가 #y순환합니다. 허밋의 카드 비용이 고정됩니다. 허밋이 #r네크로노미콘의 #r저주를 뽑을 때마다 #y힘을 #b2 얻습니다.", + "#y공격 카드를 사용할 때마다 허밋의 첫번째 카드가 #y순환합니다." + ] + }, + "downfall:HermitDoomsday": { + "NAME": "최후의 심판", + "DESCRIPTIONS": [ + "허밋이 #y의식을 #b1 얻습니다. 허밋이 #y연옥을 사용할 때마다 #r파멸의 #r단검을 소환합니다." + ] + }, + "downfall:NeowEclipse": { + "NAME": "암흑기", + "DESCRIPTIONS": [ + "매 턴 니오우는 #y휘발성이 추가된 #y임박한 #y종말을 내 손에 추가합니다." + ] + }, + "downfall:NeowWheelOfDeath": { + "NAME": "죽음의 돌림판", + "DESCRIPTIONS": [ + "카드를 #b", + " 번 사용할 때마다 니오우는 #y힘을 #b", + " 얻습니다." + ] + }, + "downfall:NeowDistracting": { + "NAME": "산만", + "DESCRIPTIONS": [ + "이번 턴에 처음으로 니오우에게 #y공격 카드로 피해를 준다면 다음 턴에 에너지를 #b1 적게 얻습니다." + ] + }, + "downfall:NextTurnPowerPower": { + "NAME": "다음 턴 ", + "DESCRIPTIONS": [ + "버그! 이걸 볼 수 없습니다.", + "다음 턴에 획득 #b", + " #y", + ".", + "LOCALIZATION NOTE: Please keep the space after 'Next Turn' in the NAME field.", + "finalized text should look like this: Next turn, gain #b7 #yVigor." + ] + }, + "downfall:NeowStayAt1Hp": { + "NAME": "불사", + "DESCRIPTIONS": [ + "니오우의 체력이 #b1 미만으로 되지 않습니다. 체력이 #b1 이하가 되면 니오우는 체력을 모두 회복하고 새로운 국면으로 접어듭니다." + ] + }, + "downfall:NeowDivinity": { + "NAME": "강림", + "DESCRIPTIONS": [ + "이번 턴 동안 니오우의 공격이 #b3 배의 피해를 줍니다." + ] + }, + "downfall:NeowSpirit": { + "NAME": "영웅의 혼", + "DESCRIPTIONS": [ + "니오우가 이로운 효과를 사용한다면 #y힘을 #b6 얻고... ", + " NL 악마화를 #b1 얻습니다. #r(아이언클래드)", + " NL 가시를 #b2 얻습니다. #g(사일런트)", + " NL 버퍼를 #b2 얻습니다. #b(디펙트)", + " NL 만트라를 #b5 얻습니다. #p(와쳐)", + " NL #y부패를 #b1 장 뽑을 카드 더미에 섞어 넣습니다. #y(허밋)" + ] + }, + "downfall:HeartsFavorPower": { + "NAME": "심장의 은총", + "DESCRIPTIONS": [ + "니오우의 #y천하무적이 #b0 이 될 때마다 #y신의 #y생명이 #b", + " 감소합니다." + ] + }, + "downfall:DefectAttackVoidPower":{ + "NAME": "에너지 강탈", + "DESCRIPTIONS": [ + "막히지 않은 피해를 줄 때마다 상대의 버린 카드 더미에 공허를 섞어 넣습니다." + ] + }, + "downfall:WatcherTrackerAttacksPower":{ + "NAME": "눈 공격", + "DESCRIPTIONS": [ + "이번 턴에 공격 카드를 #b", + " 장 사용했습니다. 공격이 아닌 카드 사용이 해당 수치를 초과하면 와쳐는 #y진노합니다." + ] + }, + "downfall:WatcherTrackerSkillsPower":{ + "NAME": "눈 스킬", + "DESCRIPTIONS": [ + "이번 턴에 공격이 아닌 카드를 #b", + " 장 사용했습니다. 공격 카드 사용이 해당 수치 이상이면 와쳐는 #y명상합니다." + ] + }, + "downfall:VoidOrbPower":{ + "NAME": "공허 핵심", + "DESCRIPTIONS": [ + "죽으면 공허 핵심이 체력을 모두 회복하고 디펙트의 #y암흑 구체를 하나 제거합니다.", + " 이 효과가 발동하면 최대 체력을 #b5 얻습니다." + ] + } +} diff --git a/src/main/resources/downfallResources/localization/kor/RelicStrings.json b/src/main/resources/downfallResources/localization/kor/RelicStrings.json index 09c381ec82..af354964b9 100644 --- a/src/main/resources/downfallResources/localization/kor/RelicStrings.json +++ b/src/main/resources/downfallResources/localization/kor/RelicStrings.json @@ -1,563 +1,564 @@ -{ - "downfall:NeowBlessing": { - "NAME": "니오우의 축복", - "FLAVOR": "분노를 가라앉혀라. 첨탑처럼 거칠고 단호해져라.", - "DESCRIPTIONS": [ - "시작 유물을 대체합니다. 보스의 최대 체력이 증가합니다. 카드를 #b2 장 덜 뽑고 ", - " 를 #b1 덜 가집니다. NL 전투 시작 시 보스는 독특한 이로운 효과를 얻습니다. #y기절하지 않습니다." - ] - }, - "downfall:NeowBlessing_Player": { - "NAME": "니오우의 축복", - "FLAVOR": "분노를 가라앉혀라. 첨탑처럼 거칠고 단호해져라.", - "DESCRIPTIONS": [ - "획득 시 최대 체력이 #b100 증가합니다. NL 막마다 최대 체력을 #b100 만큼 증가시킵니다. NL 모든 포션 슬롯을 잃습니다. NL 매 턴 시작 시 카드를 #b1 장 덜 뽑고 [E] 를 잃습니다." - ] - }, - "downfall:CoffeeDripper": { - "DESCRIPTIONS": [ - " NL 휴식할 수 없어서 보스의 체력이 최대 체력보다 낮아집니다." - ] - }, - "downfall:BustedCrown": { - "DESCRIPTIONS": [ - " NL 최적의 카드를 선택할 수 없어서 보스는 평소보다 서로 연계하는 카드가 적습니다." - ] - }, - "downfall:Girya": { - "DESCRIPTIONS": [ - " NL 휴식 대신 운동을 선택해서 보스의 체력이 최대 체력보다 낮아집니다." - ] - }, - "downfall:Matroyshka": { - "DESCRIPTIONS": [ - " NL 보스가 추가로 ", - " 유물을 획득했습니다." - ] - }, - "downfall:Ectoplasm": { - "DESCRIPTIONS": [ - " NL 골드를 얻을 수 없어서 보스는 카드를 ", - " 장 제거하지 못했습니다." - ] - }, - "downfall:BlackStar": { - "DESCRIPTIONS": [ - " NL 보스가 추가로 ", - " 유물을 획득했지만 체력이 최대 체력보다 낮아집니다." - ] - }, - "downfall:MoltenEgg": { - "DESCRIPTIONS": [ - " NL 보스가 이 유물로 ", - " 공격 카드를 강화했습니다." - ] - }, - "downfall:ToxicEgg": { - "DESCRIPTIONS": [ - " NL 보스가 이 유물로 ", - " 스킬 카드를 강화했습니다." - ] - }, - "downfall:FrozenEgg": { - "DESCRIPTIONS": [ - "보스는 강화된 파워 카드를 많이 가지고 있습니다." - ] - }, - "downfall:Shovel": { - "DESCRIPTIONS": [ - " NL 보스가 추가로 ", - " 유물을 획득했지만 휴식할 수 없었기 때문에 보스의 체력이 최대 체력보다 낮아집니다." - ] - }, - "downfall:CBRSerpentHead": { - "DESCRIPTIONS": [ - " NL 보스가 골드를 사용해 덱에서 카드를 2장 제거했습니다." - ] - }, - "downfall:CursedKey": { - "DESCRIPTIONS": [ - " NL 보스가 이 유물로 ", - " 저주를 받았습니다." - ] - }, - "downfall:DreamCatcher": { - "DESCRIPTIONS": [ - " NL 보스가 휴식해서 추가로 카드를 얻었습니다." - ] - }, - "downfall:PrayerWheel": { - "DESCRIPTIONS": [ - " NL 보스가 이 유물로 추가로 ", - " 카드를 얻었습니다." - ] - }, - "downfall:PeacePipe": { - "DESCRIPTIONS": [ - " NL 보스가 추가로 ", - " 카드를 제거했지만 체력이 최대 체력보다 낮아집니다." - ] - }, - "downfall:RunicDome": { - "DESCRIPTIONS": [ - " NL 보스가 카드를 제대로 골라서 사용하지 못합니다." - ] - }, - "downfall:CentennialPuzzle": { - "DESCRIPTIONS": [ - " NL 보스의 턴에서 발동하지 않습니다." - ] - }, - "downfall:CBRFaceOfCleric": { - "DESCRIPTIONS": [ - " 최대 체력을 이 유물로 얻었습니다." - ] - }, - "downfall:Omamori": { - "DESCRIPTIONS": [ - " NL 이 유물로 저주를 막았습니다 - " - ] - }, - "downfall:DollysMirror": { - "DESCRIPTIONS": [ - " NL 거울로 카드를 복사했습니다 - " - ] - }, - "downfall:Vampires": { - "NAME": "이벤트: 흡혈귀(?)", - "FLAVOR": "주인님의 피... 주인님의 피! 주.인.님.의.피!!!", - "DESCRIPTIONS": [ - "타격이 흡혈로 교체됐습니다. NL 최대 체력을 ", - " 잃습니다." - ] - }, - "downfall:BonfireSpirits": { - "NAME": "이벤트: 모닥불 정령들", - "FLAVOR": "불이 두 배로 타오르면서 불꽃이 압도할 듯이 폭발합니다.", - "DESCRIPTIONS": [ - "보스가 덱에서 카드를 1장 제거하고 최대 체력을 10 얻었습니다." - ] - }, - "downfall:DesignerInSpire": { - "NAME": "이벤트: 탑-클래스 디자이너", - "FLAVOR": "이건 아니야, 아니고말고. 이 차림새는 도대체 뭐야? 구역질나! 설마 지금 피이이이이이를 흘리고 있는 거야? 역겨워.", - "DESCRIPTIONS": [ - "보스가 덱에서 카드를 1장 제거하고 카드를 1장 강화했습니다." - ] - }, - "downfall:DivineFountain": { - "NAME": "이벤트: 신성한 샘", - "FLAVOR": "근처 벽에 달린 분수로부터 끝없이 흘러나오는 일렁이는 물과 우연히 마주쳤습니다.", - "DESCRIPTIONS": [ - " 저주들을 덱에서 제거했습니다." - ] - }, - "downfall:Duplicator": { - "NAME": "이벤트: 복제 성소", - "FLAVOR": "당신 앞에 고대의 영혼을 기리는 공들인 제단이 놓여있습니다.", - "DESCRIPTIONS": [ - "보스가 강력한 카드를 복사했습니다." - ] - }, - "downfall:BigFish": { - "NAME": "이벤트: 월척", - "FLAVOR": "당신은 긴 복도를 따라 걷다가 허공에 떠있는 바나나, 도넛, 그리고 상자를 발견했습니다.", - "DESCRIPTIONS": [ - "도넛을 골랐습니다. NL 최대 체력이 5 증가합니다.", - "상자를 골랐습니다. NL 후회와 유물을 가집니다." - ] - }, - "downfall:LivingWall": { - "NAME": "이벤트: 살아있는 벽", - "FLAVOR": "네가 알던 것을 잊으면, 너를 보내 주마.", - "DESCRIPTIONS": [ - "보스가 제거했습니다 - ", - "보스가 강화했습니다 - ", - "보스가 ", - " 카드를 변화했습니다 - " - ] - }, - "downfall:WheelOfChange": { - "NAME": "이벤트: 운명의 돌림판", - "FLAVOR": "돌림판을 돌릴 시간이예요! 준비됐나요? 당연히 돼 있죠!", - "DESCRIPTIONS": [ - "돌림판으로 획득 - ", - "보스가 돌림판 덕에 체력을 모두 회복했습니다.", - "보스가 돌림판 덕에 덱에서 ", - " 카드를 제거했습니다.", - "보스가 돌림판 덕에 피해를 받았습니다." - ] - }, - "downfall:Falling": { - "NAME": "이벤트: 추락", - "FLAVOR": "추락하는 동안 당신에겐 몇 개의 선택지가 있습니다...", - "DESCRIPTIONS": [ - "덱에서 타격을 제거했습니다." - ] - }, - "downfall:Augmenter": { - "NAME": "이벤트: 증강자", - "FLAVOR": "여보게 거기, 낮선 이여. 과학의 발전에 관심이 있나?", - "DESCRIPTIONS": [ - "보스가 카드 2장을 변화했습니다.", - "보스가 J.A.X. 를 얻었습니다", - "보스가 돌연변이의 힘을 얻었습니다." - ] - }, - "downfall:AncientWriting": { - "NAME": "이벤트: 고대 문자", - "FLAVOR": "갑자기 글의 내용이 명확해져 갑니다...", - "DESCRIPTIONS": [ - "보스가 모든 타격과 수비를 강화했습니다." - ] - }, - "downfall:Bandits": { - "NAME": "이벤트: 붉은 가면 도적단", - "FLAVOR": "잡아라 곰!", - "DESCRIPTIONS": [ - "보스가 도적단을 처치하고 붉은 가면을 얻었습니다. 그래서 최대 체력이 감소한 채로 전투합니다." - ] - }, - "downfall:WingStatue": { - "NAME": "이벤트: 날개 조각상", - "FLAVOR": "돌과 바위들 사이에서, 당신은 날개 모양의 복잡하고 커다란 푸른 조각상을 발견했습니다.", - "DESCRIPTIONS": [ - " 카드를 덱에서 제거했습니다." - ] - }, - "downfall:Serpent": { - "NAME": "이벤트: 배애애애앰", - "FLAVOR": "인생의 가장 좋은 점은 바로 뭐든지 살 수 있다는 것 아니겠어? 너도 그렇게 생각하지?", - "DESCRIPTIONS": [ - "보스가 의심을 받고 금화를 얻어 추가로 유물을 샀습니다." - ] - }, - "downfall:Cleric": { - "NAME": "이벤트: 성직자", - "FLAVOR": "안녕하신가 친구! 난 성직자라네! 나의 서비스에 관심있나?!", - "DESCRIPTIONS": [ - "보스가 덱에서 카드를 제거했습니다." - ] - }, - "downfall:OldBeggar": { - "NAME": "이벤트: 늙은 거지", - "FLAVOR": "몇 푼 좀 내주겠니, 꼬마야?", - "DESCRIPTIONS": [ - "보스가 덱에서 카드를 제거했습니다." - ] - }, - "downfall:Library": { - "NAME": "이벤트: 도서관", - "FLAVOR": "당신이 우연히 발견한 건물은 화려하게 장식되어 있지만 버려진 것 같습니다.", - "DESCRIPTIONS": [ - "보스가 추가로 서로 연계되는 카드를 얻었습니다." - ] - }, - "downfall:Mausoleum": { - "NAME": "이벤트: 영묘", - "FLAVOR": "관에 적혀 있는 글을 알아볼 수는 없지만, 검은 안개가 옆에서 스며 나오는 것을 볼 수 있습니다.", - "DESCRIPTIONS": [ - "보스가 몸부림을 받고 추가로 유물을 얻었습니다." - ] - }, - "downfall:Nest": { - "NAME": "이벤트: 둥지", - "FLAVOR": "까악 까악 까아아아악!", - "DESCRIPTIONS": [ - "보스가 의식용 단검을 얻었습니다." - ] - }, - "downfall:Colosseum": { - "NAME": "이벤트: 콜로세움", - "FLAVOR": "전투를 시작하겠다!!!!", - "DESCRIPTIONS": [ - "보스가 콜로세움 이벤트에서 이기고 추가로 2개의 유물을 얻었습니다." - ] - }, - "downfall:PleadingVagrant": { - "NAME": "이벤트: 애원하는 부랑자", - "FLAVOR": "좀 없어 친구? 제발... 아니면 #y동전이라도?", - "DESCRIPTIONS": [ - "보스가 부랑자에게 속아 수치를 얻었습니다. 획득 - " - ] - }, - "downfall:Mushroom": { - "NAME": "이벤트: 버섯들", - "FLAVOR": "당신은 혼을 빼놓는 색깔의 버섯들로 가득찬 통로에 들어섭니다.", - "DESCRIPTIONS": [ - "보스가 체력을 모두 회복하고 기생충을 얻었습니다.", - "보스가 이상한 버섯 유물을 얻지만 체력이 최대 체력보다 낮아집니다." - ] - }, - "downfall:ShiningLight": { - "NAME": "이벤트: 밝은 빛", - "FLAVOR": "당신은 방 한가운데에서 일렁이는 빛의 덩어리를 발견했습니다.", - "DESCRIPTIONS": [ - "보스가 ", - " 카드와 ", - " 카드를 강화했지만 체력이 최대 체력보다 낮아집니다." - ] - }, - "downfall:ScrapOoze": { - "NAME": "이벤트: 날붙이 수액", - "FLAVOR": "당신 앞에는 동강난 날붙이들을 마구 먹어댄 슬라임 같은 생물이 있습니다.", - "DESCRIPTIONS": [ - "보스가 추가로 유물을 얻었습니다." - ] - }, - "downfall:GoldenIdolEvent": { - "NAME": "이벤트: 황금 우상", - "FLAVOR": "제단 꼭대기에는 화려한 장식의 여자 조각상이 팔을 쭉 뻗은 채로 놓여있습니다. NL 그녀는 희생을 요구하며, 당신을 부릅니다.", - "DESCRIPTIONS": [ - "보스가 황금 우상을 얻는 대신 상처를 받았습니다. 추가로 획득한 골드의 사용처 - " - ] - }, - "downfall:FaceTrader": { - "NAME": "이벤트: 얼굴 상인", - "FLAVOR": "얼굴. 만지게 해주지 않겠나? 아니면 거래는?", - "DESCRIPTIONS": [ - "보스가 무작위 얼굴 유물을 1개 얻었습니다." - ] - }, - "downfall:OminousForge": { - "NAME": "이벤트: 수상한 대장간", - "FLAVOR": "깡! 까앙! 깡!", - "DESCRIPTIONS": [ - "보스가 휘어진 집게와 고통을 얻었습니다." - ] - }, - "downfall:Purifier": { - "NAME": "이벤트: 정화 성소", - "FLAVOR": "당신 앞에 잊힌 영혼을 기리는 공들인 성소가 놓여있습니다.", - "DESCRIPTIONS": [ - " 카드를 덱에서 제거했습니다." - ] - }, - "downfall:MatchAndKeep": { - "NAME": "이벤트: 맞추고 가져가!", - "FLAVOR": "카드는 12장! 짝을 맞추면 가져가도 된다! 기회는 5번, 무르기 없기다. 준비됐느냐? 시작하자꾸나!", - "DESCRIPTIONS": [ - "보스가 성공적으로 짝을 맞춰 강력한 카드를 얻었습니다." - ] - }, - "downfall:Transmogrifier": { - "NAME": "이벤트: 변환 성소", - "FLAVOR": "당신 앞에 잊힌 영혼을 기리는 공들인 성소가 놓여있습니다.", - "DESCRIPTIONS": [ - "보스가 기본 카드를 새로운 카드로 변화시켰습니다." - ] - }, - "downfall:TombRedMask": { - "NAME": "이벤트: 붉은 가면 왕의 무덤", - "FLAVOR": "둥둥 떠있는 길의 반대 쪽에 매우 화려하게 장식된 무덤이 보입니다.", - "DESCRIPTIONS": [ - "보스가 붉은 가면 유물을 얻었습니다." - ] - }, - "downfall:UpgradeShrine": { - "NAME": "이벤트: 강화 성소", - "FLAVOR": "당신 앞에 잊힌 영혼을 기리는 공들인 성소가 놓여있습니다.", - "DESCRIPTIONS": [ - "보스가 강화 성소에서 카드를 한 장 #y강화했습니다." - ] - }, - "downfall:WeMeetAgain": { - "NAME": "이벤트: 또 만났네요!", - "FLAVOR": "저예요, #y랜위드! 오늘 저한테 줄 거 있나요? 늘 주시던 그거? 저 같은 놈은 혼자서는 성공할 수 없다는 거 잘 아시잖아요?", - "DESCRIPTIONS": [ - "골드를 주고 추가 유물으로 교환했습니다." - ] - }, - "downfall:GoldenShrine": { - "NAME": "이벤트: 황금 성소", - "FLAVOR": "당신 앞에 잊힌 영혼을 기리는 공들인 성소가 놓여있습니다.", - "DESCRIPTIONS": [ - "보스가 금화를 위해 후회를 받았습니다. 추가로 획득한 골드의 사용처 - " - ] - }, - "downfall:GremlinSack": { - "NAME": "그렘린 자루", - "FLAVOR": "그렘린과 경호원은 상대가 되질 않았습니다.", - "DESCRIPTIONS": [ - "획득 시 아래 카드들을 덱에 추가합니다: NL ", - "획득 시 짝을 맞춰서 가져가야했던 카드를 #b6 장 덱에 추가합니다.", - "#g(기본) ", - "#g(일반) ", - "#b(특별) ", - "#y(희귀) ", - "#b(무색) ", - "#r(저주) " - ] - }, - "downfall:GremlinWheel": { - "NAME": "운명의 돌림판", - "FLAVOR": "아무도 두 번 돌릴 순 없어요. 라고 그렘린이 이야기했었죠.", - "DESCRIPTIONS": [ - "휴식 장소에서 돌림판을 한 번 돌릴 수 있습니다. 선택된 보상을 받으면 소모됩니다.", - "이미 사용된 유물입니다." - ] - }, - "downfall:CloakOfManyFaces": { - "NAME": "망토 속 많은 얼굴", - "FLAVOR": "이건 스티브, 빌, 이안, 프레드, 존입니다...", - "DESCRIPTIONS": [ - "획득 시 광신자 얼굴, 성직자 얼굴, 느로스의 배고픈 얼굴, 그렘린 얼굴, 뱀 얼굴을 획득합니다." - ] - }, - "downfall:BrokenWingStatue": { - "NAME": "부서진 날개 조각상", - "FLAVOR": "한때 장대했던 부서진 조각상 덩어리입니다.", - "DESCRIPTIONS": [ - "깨어난 자를 숭배하는 광신자들이 이것에 관심을 가질 것입니다.", - "매 전투 시작 시 광신자나 선택받은 자가 있다면 광신자들이 이 유물을 가지고 달아납니다." - ] - }, - "downfall:ShatteredFragment": { - "NAME": "날카로운 조각", - "FLAVOR": "한때 부서진 조각상이었지만 지금은 간이 무기입니다.", - "DESCRIPTIONS": [ - "매 전투 시작 시 #y피로 #y물든 #y희생을 1장 얻습니다." - ] - }, - "downfall:RedIOU": { - "NAME": "도적단과의 계약", - "FLAVOR": "도적단 삼인방과 합의를 봤단 증거입니다. 장신구로 대가를 치를 때도 있지만 대부분 목숨과 맞바꿉니다.", - "DESCRIPTIONS": [ - "3막 보스와 전투 시작 시, 붉은 가면 도적단이 도와줍니다.", - "일할 시간이야, 친구들!", - "잡아라 곰!", - "받은 만큼만 일한다구. NL 이만 실례.", - "우리의 새로운 NL ~붉은~ ~가면~ ~왕~ 에게 박수!", - "행운을 빌게, 두목!" - ] - }, - "downfall:RedIOUUpgrade": { - "NAME": "도적단과의 계약+", - "FLAVOR": "도적단 삼인방과 합의를 봤단 증거입니다. 장신구로 대가를 치를 때도 있지만 대부분 목숨과 맞바꿉니다.", - "DESCRIPTIONS": [ - "3막 보스와 전투 시작 시, 붉은 가면 도적단이 더 열심히 도와줍니다." - ] - }, - "downfall:KnowingSkull": { - "NAME": "뭐든지 아는 해골", - "FLAVOR": "이거 놔라!", - "DESCRIPTIONS": [ - "매 전투 시작 시 영혼, 포션, 체력을 바치고 무색카드를 얻을 수 있습니다." - ] - }, - "downfall:HeartBlessingRed": { - "NAME": "심장의 축복받은 루비", - "FLAVOR": "심장이 강해졌습니다. 심장은 기뻐할 것입니다.", - "DESCRIPTIONS": [ - "보스 전투 시작 시 #y힘을 #b1 얻습니다." - ] - }, - "downfall:HeartBlessingBlue": { - "NAME": "심장의 축복받은 사파이어", - "FLAVOR": "심장이 기뻐할 것입니다.", - "DESCRIPTIONS": [ - "보스 전투 시작 시 #ygremlin:임시_체력을 #b10 얻습니다." - ] - }, - "downfall:HeartBlessingGreen": { - "NAME": "심장의 축복받은 에메랄드", - "FLAVOR": "심장은 모든 것입니다.", - "DESCRIPTIONS": [ - "보스 전투 시작 시 #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": "집을 떠나기 전에 꼭 챙겨갈 물건입니다.", - "DESCRIPTIONS": [ - "다음 방을 선택할 때 지도에서 보스를 제외한 어떤 방이라도 선택할 수 있습니다.", - "", - "이미 사용된 유물입니다." - ] - }, - "downfall:HeartsMalice": { - "NAME": "심장의 악의", - "FLAVOR": "타락한 심장이 선사한 악의입니다.", - "DESCRIPTIONS": [ - "앞으로 #b3 번의 전투 동안 적들이 겁에 질려 도망칩니다.", - "이미 사용된 유물입니다." - ] - }, - "downfall:Hecktoplasm": { - "NAME": "내형질", - "FLAVOR": "이 점액질의 기운과 방울은 수백명의 영혼으로 넘쳐 보입니다. 아무도 원하지 않았던 게 당연했겠군요.", - "DESCRIPTIONS": [ - "매 턴 시작 시 [E] 를 얻습니다. 앞으로 #y영혼을 얻을 수 없습니다. 열쇠를 부술 때 #y영혼을 소모하지 않습니다.", - "내형질" - ] - }, - "downfall:BlackCandle": { - "NAME": "검은 양초", - "FLAVOR": "어둠 속에서도 불꽃이 환하게 밝혀줍니다.", - "DESCRIPTIONS": [ - "#y사용 #y불가인 #y저주 카드를 사용할 수 있게 됩니다. #y저주 카드를 사용하면 체력을 #b1 잃고 그 카드를 #y소멸시킵니다.", - "검은 양초" - ] - }, - "downfall:replacements": { - "NAME": "", - "FLAVOR": "", - "DESCRIPTIONS": [ - "상인, 보스, 엘리트 전투 동안, 매 턴 시작 시 [E] 를 얻습니다.", - "저주받은 동전", - "이 낡은 동전의 진정한 값어치를 아는 자는 거의 없습니다...", - "MVB 카드", - "정말 당신은 심장의 MVB(최고로 값진 보스)입니다.", - "심장의 타락은 끝이 없습니다. 소중한 애완동물도 없습니다.", - "타락한 배달원", - "심장의 상품이 품절되지 않으며 비용 또한 #b20% 감소합니다.", - "전투 후 카드 보상에 무색과 일반 캐릭터 카드가 추가됩니다.", - "매 턴 시작 시 [E] 를 얻습니다. 앞으로 #y영혼을 얻을 수 없습니다. 열쇠를 부술 때 #y영혼을 소모하지 않습니다." - ] - }, - "downfall:LizardTail": { - "NAME": "강력한 도마뱀 꼬리", - "FLAVOR": "전투 중에 적들을 속이는 가짜 꼬리입니다.", - "DESCRIPTIONS": [ - "사망 시 한 번에 한해 체력을 #b100% 까지 회복시킵니다." - ] - }, - "downfall:TestRelic": { - "NAME": "VFX 시험", - "FLAVOR": "어머나, 해내셨네요.", - "DESCRIPTIONS": [ - "#p우클릭 #p시: 다음 카드를 사용합니다." - ] - }, - "downfall:ExtraCursedKey": { - "NAME": "더욱 저주받은 열쇠", - "FLAVOR": "좋은 의도로 잠겨 있었을 것입니다.", - "DESCRIPTIONS": [ - "매 턴 처음으로 #r저주를 뽑으면 [E] 를 얻습니다. NL 보스 이외의 상자를 열 때마다 #r상처를 얻습니다." - ] - }, - "downfall:ExtraCursedBell": { - "NAME": "더욱 저주받은 방울", - "FLAVOR": "방울의 메아리가 들려도 어디 있는지 절대 확인할 수 없습니다.", - "DESCRIPTIONS": [ - "획득 시 #r특별한 #r저주 #b2 장과 일반 유물을 #b3 개 획득합니다.", - "방울 소리가 두 번 울리고...", - "보상 넘기기", - "닫기" - ] - }, - "downfall:BustedCrownGagText": { - "NAME": "부서진 왕관", - "FLAVOR": "모방은 진심 어린 극찬의 형태라는 게... 맞는 말일까요? 투사의 왕관과 닮지도 않았습니다. 오히려 모욕에 가까운 물건입니다.", - "DESCRIPTIONS": [ - "매 턴 시작 시 [E] 를 얻습니다. 카드 보상을 받을 때 선택할 수 있는 카드가 #b2 장 줄어듭니다." - ] - } -} +{ + "downfall:NeowBlessing": { + "NAME": "니오우의 축복", + "FLAVOR": "분노를 가라앉혀라. 첨탑처럼 거칠고 단호해져라.", + "DESCRIPTIONS": [ + "시작 유물을 대체합니다. 보스의 최대 체력이 증가합니다. 카드를 #b2 장 덜 뽑고 ", + " 를 #b1 덜 가집니다. NL 전투 시작 시 보스는 고유한 이로운 효과를 얻습니다. #y기절하지 않습니다." + ] + }, + "downfall:NeowBlessing_Player": { + "NAME": "니오우의 축복", + "FLAVOR": "분노를 가라앉혀라. 첨탑처럼 거칠고 단호해져라.", + "DESCRIPTIONS": [ + "획득 시 최대 체력이 #b100 증가합니다. NL 막마다 최대 체력이 #b100 증가합니다. NL 모든 포션 슬롯을 잃습니다. NL 내 턴 시작 시 카드를 #b1 장 덜 뽑고 [E] 를 잃습니다." + ] + }, + "downfall:CoffeeDripper": { + "DESCRIPTIONS": [ + " NL 휴식을 못해 보스의 체력이 최대 체력보다 낮아집니다." + ] + }, + "downfall:BustedCrown": { + "DESCRIPTIONS": [ + " NL 최적의 카드를 선택하지 못해 보스는 평소보다 연계하는 카드가 적습니다." + ] + }, + "downfall:Girya": { + "DESCRIPTIONS": [ + " NL 휴식 대신 운동을 선택해 보스의 체력이 최대 체력보다 낮아집니다." + ] + }, + "downfall:Matroyshka": { + "DESCRIPTIONS": [ + " NL 보스가 추가로 ", + " 유물을 획득했습니다." + ] + }, + "downfall:Ectoplasm": { + "DESCRIPTIONS": [ + " NL 골드를 얻지 못해 보스는 카드를 ", + " 장 제거하지 못했습니다." + ] + }, + "downfall:BlackStar": { + "DESCRIPTIONS": [ + " NL 보스가 추가로 ", + " 유물을 획득했지만 체력이 최대 체력보다 낮아집니다." + ] + }, + "downfall:MoltenEgg": { + "DESCRIPTIONS": [ + " NL 보스가 이 유물로 ", + " 공격 카드를 강화했습니다." + ] + }, + "downfall:ToxicEgg": { + "DESCRIPTIONS": [ + " NL 보스가 이 유물로 ", + " 스킬 카드를 강화했습니다." + ] + }, + "downfall:FrozenEgg": { + "DESCRIPTIONS": [ + "보스는 강화된 파워 카드를 많이 가지고 있습니다." + ] + }, + "downfall:Shovel": { + "DESCRIPTIONS": [ + " NL 보스가 추가로 ", + " 유물을 획득했지만 휴식할 수 없었기 때문에 보스의 체력이 최대 체력보다 낮아집니다." + ] + }, + "downfall:CBRSerpentHead": { + "DESCRIPTIONS": [ + " NL 보스가 골드를 사용해 덱에서 카드를 2장 제거했습니다." + ] + }, + "downfall:CursedKey": { + "DESCRIPTIONS": [ + " NL 보스가 이 유물로 ", + " 저주를 받았습니다." + ] + }, + "downfall:DreamCatcher": { + "DESCRIPTIONS": [ + " NL 보스가 휴식해서 추가로 카드를 얻었습니다." + ] + }, + "downfall:PrayerWheel": { + "DESCRIPTIONS": [ + " NL 보스가 이 유물로 추가로 ", + " 카드를 얻었습니다." + ] + }, + "downfall:PeacePipe": { + "DESCRIPTIONS": [ + " NL 보스가 추가로 ", + " 카드를 제거했지만 체력이 최대 체력보다 낮아집니다." + ] + }, + "downfall:RunicDome": { + "DESCRIPTIONS": [ + " NL 보스가 카드를 제대로 골라서 사용하지 못합니다." + ] + }, + "downfall:CentennialPuzzle": { + "DESCRIPTIONS": [ + " NL 보스의 턴에서 발동하지 않습니다." + ] + }, + "downfall:CBRFaceOfCleric": { + "DESCRIPTIONS": [ + " 최대 체력을 이 유물로 얻었습니다." + ] + }, + "downfall:Omamori": { + "DESCRIPTIONS": [ + " NL 이 유물로 저주를 막았습니다. - " + ] + }, + "downfall:DollysMirror": { + "DESCRIPTIONS": [ + " NL 거울로 카드를 복사했습니다. - " + ] + }, + "downfall:Vampires": { + "NAME": "이벤트: 흡혈귀(?)", + "FLAVOR": "주인님의 피... 주인님의 피! 주.인.님.의.피!!!", + "DESCRIPTIONS": [ + "타격이 흡혈로 교체됐습니다. NL 최대 체력을 ", + " 잃습니다." + ] + }, + "downfall:BonfireSpirits": { + "NAME": "이벤트: 모닥불 정령들", + "FLAVOR": "불이 두 배로 타오르면서 불꽃이 압도할 듯이 폭발합니다.", + "DESCRIPTIONS": [ + "보스가 덱에서 카드를 1장 제거하고 최대 체력을 10 얻었습니다." + ] + }, + "downfall:DesignerInSpire": { + "NAME": "이벤트: 탑-클래스 디자이너", + "FLAVOR": "이건 아니야, 아니고말고. 이 차림새는 도대체 뭐야? 구역질나! 설마 지금 피이이이이이를 흘리고 있는 거야? 역겨워.", + "DESCRIPTIONS": [ + "보스가 덱에서 카드를 1장 제거하고 카드를 1장 강화했습니다." + ] + }, + "downfall:DivineFountain": { + "NAME": "이벤트: 신성한 샘", + "FLAVOR": "근처 벽에 달린 분수로부터 끝없이 흘러나오는 일렁이는 물과 우연히 마주쳤습니다.", + "DESCRIPTIONS": [ + " 저주들을 덱에서 제거했습니다." + ] + }, + "downfall:Duplicator": { + "NAME": "이벤트: 복제 성소", + "FLAVOR": "당신 앞에 고대의 영혼을 기리는 공들인 제단이 놓여있습니다.", + "DESCRIPTIONS": [ + "보스가 강력한 카드를 복사했습니다." + ] + }, + "downfall:BigFish": { + "NAME": "이벤트: 월척", + "FLAVOR": "당신은 긴 복도를 따라 걷다가 허공에 떠있는 바나나, 도넛, 그리고 상자를 발견했습니다.", + "DESCRIPTIONS": [ + "도넛을 골랐습니다. NL 최대 체력이 5 증가합니다.", + "상자를 골랐습니다. NL 후회와 유물을 가집니다." + ] + }, + "downfall:LivingWall": { + "NAME": "이벤트: 살아있는 벽", + "FLAVOR": "네가 알던 것을 잊으면, 너를 보내 주마.", + "DESCRIPTIONS": [ + "보스가 제거했습니다. - ", + "보스가 강화했습니다. - ", + "보스가 ", + " 카드를 변화했습니다. - " + ] + }, + "downfall:WheelOfChange": { + "NAME": "이벤트: 운명의 돌림판", + "FLAVOR": "돌림판을 돌릴 시간이예요! 준비됐나요? 당연히 돼 있죠!", + "DESCRIPTIONS": [ + "돌림판으로 획득 - ", + "보스가 돌림판 덕에 체력을 모두 회복했습니다.", + "보스가 돌림판 덕에 덱에서 ", + " 카드를 제거했습니다.", + "보스가 돌림판 덕에 피해를 받았습니다." + ] + }, + "downfall:Falling": { + "NAME": "이벤트: 추락", + "FLAVOR": "추락하는 동안 당신에겐 몇 개의 선택지가 있습니다...", + "DESCRIPTIONS": [ + "덱에서 타격을 제거했습니다." + ] + }, + "downfall:Augmenter": { + "NAME": "이벤트: 증강자", + "FLAVOR": "여보게 거기, 낮선 이여. 과학의 발전에 관심이 있나?", + "DESCRIPTIONS": [ + "보스가 카드를 2장 변화했습니다.", + "보스가 J.A.X. 를 얻었습니다.", + "보스가 돌연변이의 힘을 얻었습니다." + ] + }, + "downfall:AncientWriting": { + "NAME": "이벤트: 고대 문자", + "FLAVOR": "갑자기 글의 내용이 명확해져 갑니다...", + "DESCRIPTIONS": [ + "보스가 모든 타격과 수비를 강화했습니다." + ] + }, + "downfall:Bandits": { + "NAME": "이벤트: 붉은 가면 도적단", + "FLAVOR": "잡아라 곰!", + "DESCRIPTIONS": [ + "보스가 도적단을 처치하고 붉은 가면을 얻었지만, 최대 체력이 감소한 채로 전투합니다." + ] + }, + "downfall:WingStatue": { + "NAME": "이벤트: 날개 조각상", + "FLAVOR": "돌과 바위들 사이에서, 당신은 날개 모양의 복잡하고 커다란 푸른 조각상을 발견했습니다.", + "DESCRIPTIONS": [ + " 카드를 덱에서 제거했습니다." + ] + }, + "downfall:Serpent": { + "NAME": "이벤트: 배애애애앰", + "FLAVOR": "인생의 가장 좋은 점은 바로 뭐든지 살 수 있다는 것 아니겠어? 너도 그렇게 생각하지?", + "DESCRIPTIONS": [ + "보스가 의심을 받고 금화를 얻어 추가로 유물을 샀습니다." + ] + }, + "downfall:Cleric": { + "NAME": "이벤트: 성직자", + "FLAVOR": "안녕하신가 친구! 난 성직자라네! 나의 서비스에 관심있나?!", + "DESCRIPTIONS": [ + "보스가 덱에서 카드를 제거했습니다." + ] + }, + "downfall:OldBeggar": { + "NAME": "이벤트: 늙은 거지", + "FLAVOR": "몇 푼 좀 내주겠니, 꼬마야?", + "DESCRIPTIONS": [ + "보스가 덱에서 카드를 제거했습니다." + ] + }, + "downfall:Library": { + "NAME": "이벤트: 도서관", + "FLAVOR": "당신이 우연히 발견한 건물은 화려하게 장식되어 있지만 버려진 것 같습니다.", + "DESCRIPTIONS": [ + "보스가 추가로 연계되는 카드를 얻었습니다." + ] + }, + "downfall:Mausoleum": { + "NAME": "이벤트: 영묘", + "FLAVOR": "관에 적혀 있는 글을 알아볼 수는 없지만, 검은 안개가 옆에서 스며 나오는 것을 볼 수 있습니다.", + "DESCRIPTIONS": [ + "보스가 몸부림을 받고 추가로 유물을 얻었습니다." + ] + }, + "downfall:Nest": { + "NAME": "이벤트: 둥지", + "FLAVOR": "까악 까악 까아아아악!", + "DESCRIPTIONS": [ + "보스가 의식용 단검을 얻었습니다." + ] + }, + "downfall:Colosseum": { + "NAME": "이벤트: 콜로세움", + "FLAVOR": "전투를 시작하겠다!!!!", + "DESCRIPTIONS": [ + "보스가 콜로세움 이벤트에서 이기고 추가로 유물을 2개 얻었습니다." + ] + }, + "downfall:PleadingVagrant": { + "NAME": "이벤트: 애원하는 부랑자", + "FLAVOR": "좀 없어 친구? 제발... 아니면 #y동전이라도?", + "DESCRIPTIONS": [ + "보스가 부랑자에게 속아 수치를 얻었습니다. 획득 - " + ] + }, + "downfall:Mushroom": { + "NAME": "이벤트: 버섯들", + "FLAVOR": "당신은 혼을 빼놓는 색깔의 버섯들로 가득찬 통로에 들어섭니다.", + "DESCRIPTIONS": [ + "보스가 체력을 모두 회복하고 기생충을 얻었습니다.", + "보스가 이상한 버섯 유물을 얻지만 체력이 최대 체력보다 낮아집니다." + ] + }, + "downfall:ShiningLight": { + "NAME": "이벤트: 밝은 빛", + "FLAVOR": "당신은 방 한가운데에서 일렁이는 빛의 덩어리를 발견했습니다.", + "DESCRIPTIONS": [ + "보스가 ", + " 카드와 ", + " 카드를 강화했지만 체력이 최대 체력보다 낮아집니다." + ] + }, + "downfall:ScrapOoze": { + "NAME": "이벤트: 날붙이 수액", + "FLAVOR": "당신 앞에는 동강난 날붙이들을 마구 먹어댄 슬라임 같은 생물이 있습니다.", + "DESCRIPTIONS": [ + "보스가 추가로 유물을 얻었습니다." + ] + }, + "downfall:GoldenIdolEvent": { + "NAME": "이벤트: 황금 우상", + "FLAVOR": "제단 꼭대기에는 화려한 장식의 여자 조각상이 팔을 쭉 뻗은 채로 놓여있습니다. NL 그녀는 희생을 요구하며, 당신을 부릅니다.", + "DESCRIPTIONS": [ + "보스가 황금 우상을 얻는 대신 상처를 받았습니다. 추가로 획득한 골드의 사용처 - " + ] + }, + "downfall:FaceTrader": { + "NAME": "이벤트: 얼굴 상인", + "FLAVOR": "얼굴. 만지게 해주지 않겠나? 아니면 거래는?", + "DESCRIPTIONS": [ + "보스가 무작위 얼굴 유물을 1개 얻었습니다." + ] + }, + "downfall:OminousForge": { + "NAME": "이벤트: 수상한 대장간", + "FLAVOR": "깡! 까앙! 깡!", + "DESCRIPTIONS": [ + "보스가 휘어진 집게와 고통을 얻었습니다." + ] + }, + "downfall:Purifier": { + "NAME": "이벤트: 정화 성소", + "FLAVOR": "당신 앞에 잊힌 영혼을 기리는 공들인 성소가 놓여있습니다.", + "DESCRIPTIONS": [ + " 카드를 덱에서 제거했습니다." + ] + }, + "downfall:MatchAndKeep": { + "NAME": "이벤트: 맞추고 가져가!", + "FLAVOR": "카드는 12장! 짝을 맞추면 가져가도 된다! 기회는 5번, 무르기 없기다. 준비됐느냐? 시작하자꾸나!", + "DESCRIPTIONS": [ + "보스가 성공적으로 짝을 맞춰 강력한 카드를 얻었습니다." + ] + }, + "downfall:Transmogrifier": { + "NAME": "이벤트: 변환 성소", + "FLAVOR": "당신 앞에 잊힌 영혼을 기리는 공들인 성소가 놓여있습니다.", + "DESCRIPTIONS": [ + "보스가 기본 카드를 새로운 카드로 변화시켰습니다." + ] + }, + "downfall:TombRedMask": { + "NAME": "이벤트: 붉은 가면 왕의 무덤", + "FLAVOR": "둥둥 떠있는 길의 반대 쪽에 매우 화려하게 장식된 무덤이 보입니다.", + "DESCRIPTIONS": [ + "보스가 붉은 가면 유물을 얻었습니다." + ] + }, + "downfall:UpgradeShrine": { + "NAME": "이벤트: 강화 성소", + "FLAVOR": "당신 앞에 잊힌 영혼을 기리는 공들인 성소가 놓여있습니다.", + "DESCRIPTIONS": [ + "보스가 강화 성소에서 카드를 한 장 #y강화했습니다." + ] + }, + "downfall:WeMeetAgain": { + "NAME": "이벤트: 또 만났네요!", + "FLAVOR": "저예요, #y랜위드! 오늘 저한테 줄 거 있나요? 늘 주시던 그거? 저 같은 놈은 혼자서는 성공할 수 없다는 거 잘 아시잖아요?", + "DESCRIPTIONS": [ + "골드를 주고 추가 유물으로 교환했습니다." + ] + }, + "downfall:GoldenShrine": { + "NAME": "이벤트: 황금 성소", + "FLAVOR": "당신 앞에 잊힌 영혼을 기리는 공들인 성소가 놓여있습니다.", + "DESCRIPTIONS": [ + "보스가 금화를 위해 후회를 받았습니다. 추가로 획득한 골드의 사용처 - " + ] + }, + "downfall:GremlinSack": { + "NAME": "그렘린 자루", + "FLAVOR": "그렘린과 경호원은 상대가 되질 않았습니다.", + "DESCRIPTIONS": [ + "획득 시 아래 카드들을 덱에 추가합니다: NL ", + "획득 시 짝을 맞춰서 가져가야했던 카드를 #b6 장 덱에 추가합니다.", + "#g(기본) ", + "#g(일반) ", + "#b(특별) ", + "#y(희귀) ", + "#b(무색) ", + "#r(저주) " + ] + }, + "downfall:GremlinWheel": { + "NAME": "운명의 돌림판", + "FLAVOR": "아무도 두 번 돌릴 순 없어요. 라고 그렘린이 이야기했었죠.", + "DESCRIPTIONS": [ + "휴식 장소에서 돌림판을 한 번 돌릴 수 있습니다. 선택된 보상을 받으면 소모됩니다.", + "이미 사용된 유물입니다." + ] + }, + "downfall:CloakOfManyFaces": { + "NAME": "망토 속 많은 얼굴", + "FLAVOR": "이건 스티브, 빌, 이안, 프레드, 존입니다...", + "DESCRIPTIONS": [ + "획득 시 광신자 얼굴, 성직자 얼굴, 느로스의 배고픈 얼굴, 그렘린 얼굴, 뱀 얼굴을 획득합니다." + ] + }, + "downfall:BrokenWingStatue": { + "NAME": "부서진 날개 조각상", + "FLAVOR": "한때 장대했던 부서진 조각상 덩어리입니다.", + "DESCRIPTIONS": [ + "깨어난 자를 숭배하는 광신자들이 이것에 관심을 가질 것입니다.", + "매 전투 시작 시 광신자나 선택받은 자가 있다면 광신자들이 이 유물을 가지고 달아납니다." + ] + }, + "downfall:ShatteredFragment": { + "NAME": "날카로운 조각", + "FLAVOR": "한때 부서진 조각상이었지만 지금은 간이 무기입니다.", + "DESCRIPTIONS": [ + "엘리트 또는 보스 전투 동안 #y파워 카드를 사용할 때마다 #y힘을 #b", + " 얻습니다." + ] + }, + "downfall:RedIOU": { + "NAME": "도적단과의 계약", + "FLAVOR": "도적단 삼인방과 합의를 봤단 증거입니다. 장신구로 대가를 치를 때도 있지만 대부분 목숨과 맞바꿉니다.", + "DESCRIPTIONS": [ + "#b3 막 보스와 전투 시작 시, 붉은 가면 도적단이 도와줍니다.", + "일할 시간이야, 친구들!", + "잡아라 곰!", + "받은 만큼만 일한다구. NL 이만 실례.", + "우리의 새로운 NL ~붉은~ ~가면~ ~왕~ 에게 박수!", + "행운을 빌게, 두목!" + ] + }, + "downfall:RedIOUUpgrade": { + "NAME": "도적단과의 계약+", + "FLAVOR": "도적단 삼인방과 합의를 봤단 증거입니다. 장신구로 대가를 치를 때도 있지만 대부분 목숨과 맞바꿉니다.", + "DESCRIPTIONS": [ + "#b3 막 보스와 전투 시작 시, 붉은 가면 도적단이 더 열심히 도와줍니다." + ] + }, + "downfall:KnowingSkull": { + "NAME": "뭐든지 아는 해골", + "FLAVOR": "이거 놔라!", + "DESCRIPTIONS": [ + "매 전투 시작 시 체력을 바치고 영혼, 포션, 무색 카드 중 하나를 얻는 소원을 빌 수 있습니다." + ] + }, + "downfall:HeartBlessingRed": { + "NAME": "심장의 축복받은 루비", + "FLAVOR": "심장이 강해졌습니다. 심장은 기뻐할 것입니다.", + "DESCRIPTIONS": [ + "보스 전투 시작 시 #y힘을 #b1 얻습니다." + ] + }, + "downfall:HeartBlessingBlue": { + "NAME": "심장의 축복받은 사파이어", + "FLAVOR": "심장이 기뻐할 것입니다.", + "DESCRIPTIONS": [ + "보스 전투 시작 시 체력을 #b10 회복합니다." + ] + }, + "downfall:HeartBlessingGreen": { + "NAME": "심장의 축복받은 에메랄드", + "FLAVOR": "심장은 모든 것입니다.", + "DESCRIPTIONS": [ + "보스 전투 시작 시 #y민첩을 #b1 얻습니다." + ] + }, + "downfall:BurdenOfKnowledge": { + "NAME": "지식의 부담", + "FLAVOR": "진리는 때론 상처가 됩니다.", + "DESCRIPTIONS": [ + "획득 시 #r심장의 #r축복을 #r모두 #r잃고 최대 체력을 #b20 #r잃습니다. #y어떤 카드든 #y모두 영구적으로 #y강화합니다. 전투 시작 시 #y힘과 #y민첩을 #b2 잃습니다." + ] + }, + "downfall:TeleportStone": { + "NAME": "순간이동석", + "FLAVOR": "집을 떠나기 전에 꼭 챙겨갈 물건입니다.", + "DESCRIPTIONS": [ + "다음 방을 선택할 때 지도에서 보스를 제외한 방을 선택할 수 있습니다.", + "", + "이미 사용된 유물입니다." + ] + }, + "downfall:HeartsMalice": { + "NAME": "심장의 악의", + "FLAVOR": "타락한 심장이 선사한 악의입니다.", + "DESCRIPTIONS": [ + "앞으로 #b3 번의 전투 동안 적들이 겁에 질려 도망칩니다.", + "이미 사용된 유물입니다." + ] + }, + "downfall:Hecktoplasm": { + "NAME": "내형질", + "FLAVOR": "이 점액질의 기운과 방울은 수백명의 영혼으로 넘쳐 보입니다. 아무도 원하지 않았던 게 당연했겠군요.", + "DESCRIPTIONS": [ + "내 턴 시작 시 [E] 를 얻습니다. 앞으로 #y영혼을 얻을 수 없습니다. 열쇠를 부술 때 #y영혼을 소모하지 않습니다.", + "내형질" + ] + }, + "downfall:BlackCandle": { + "NAME": "검은 양초", + "FLAVOR": "어둠 속에서도 불꽃이 환하게 밝혀줍니다.", + "DESCRIPTIONS": [ + "#y사용불가인 #r저주를 사용할 수 있게 됩니다. 사용 가능한 #r저주의 비용은 #b0이 됩니다. #y저주를 사용하면 체력을 #b1 잃고 그 카드를 #y소멸시킵니다.", + "검은 양초" + ] + }, + "downfall:replacements": { + "NAME": "", + "FLAVOR": "", + "DESCRIPTIONS": [ + "상인, 보스, 엘리트 전투 동안, 내 턴 시작 시 [E] 를 얻습니다.", + "저주받은 동전", + "이 낡은 동전의 진정한 값어치를 아는 자는 거의 없습니다...", + "MVB 카드", + "정말 당신은 심장의 MVB(최고로 값진 보스) 입니다.", + "심장의 타락은 끝이 없어 소중한 애완동물도 없습니다.", + "타락한 배달원", + "심장의 상품이 품절되지 않으며 비용 또한 #b20% 감소합니다.", + "전투 후 카드 보상에 무색과 일반 캐릭터 카드가 추가됩니다.", + "내 턴 시작 시 [E] 를 얻습니다. 앞으로 #y영혼을 얻을 수 없습니다. 열쇠를 부술 때 #y영혼을 소모하지 않습니다." + ] + }, + "downfall:LizardTail": { + "NAME": "강력한 도마뱀 꼬리", + "FLAVOR": "전투 중에 적들을 속이는 가짜 꼬리입니다.", + "DESCRIPTIONS": [ + "사망 시 한 번에 한해 체력을 #b100% 회복합니다." + ] + }, + "downfall:TestRelic": { + "NAME": "VFX 시험", + "FLAVOR": "어머나, 해내셨네요.", + "DESCRIPTIONS": [ + "#p우클릭 #p시: 다음 카드를 사용합니다." + ] + }, + "downfall:ExtraCursedKey": { + "NAME": "더욱 저주받은 열쇠", + "FLAVOR": "좋은 의도로 잠겨 있었을 것입니다.", + "DESCRIPTIONS": [ + "매 턴 처음으로 #r저주를 뽑으면 [E] 를 얻습니다. NL 보스 이외의 상자를 열 때마다 #r상처를 얻습니다." + ] + }, + "downfall:ExtraCursedBell": { + "NAME": "더욱 저주받은 방울", + "FLAVOR": "방울의 메아리가 들려도 어디 있는지 절대 확인할 수 없습니다.", + "DESCRIPTIONS": [ + "획득 시 #r특별한 #r저주와 일반 유물을 #b3 개 얻습니다.", + "방울 소리가 두 번 울리고...", + "보상 넘기기", + "닫기" + ] + }, + "downfall:BustedCrownGagText": { + "NAME": "부서진 왕관", + "FLAVOR": "모방은 진심 어린 극찬의 형태라는 게... 맞는 말일까요? 투사의 왕관과 닮지도 않았습니다. 오히려 모욕에 가까운 물건입니다.", + "DESCRIPTIONS": [ + "내 턴 시작 시 [E] 를 얻습니다. 카드 보상을 받을 때 선택할 수 있는 카드가 #b2 장 줄어듭니다." + ] + } +} \ No newline at end of file diff --git a/src/main/resources/downfallResources/localization/kor/RunModStrings.json b/src/main/resources/downfallResources/localization/kor/RunModStrings.json index 57d6b8e0db..4278b332aa 100644 --- a/src/main/resources/downfallResources/localization/kor/RunModStrings.json +++ b/src/main/resources/downfallResources/localization/kor/RunModStrings.json @@ -1,58 +1,58 @@ -{ - "downfall:WorldOfGoo": { - "NAME": "끈적이 천지", - "DESCRIPTION": "막히지 않은 피해를 받을 때마다 점액투성이 상태이상을 버린 카드 더미에 넣고 섞습니다." - }, - "downfall:Hexed": { - "NAME": "육각으로", - "DESCRIPTION": "벨벳 초커를 가지고 시작합니다. 뽑은 카드에 휘발성 효과가 추가됩니다." - }, - "downfall:Improvised": { - "NAME": "즉흥적", - "DESCRIPTION": "미확인 카드를 10장 가진 채로 시작합니다." - }, - "downfall:Jewelcrafting": { - "NAME": "보석세공", - "DESCRIPTION": "복사한 보석 활용 2장과 광시곡의 곡괭이를 가진 채로 시작합니다." - }, - "downfall:EvilRun": { - "NAME": "악마의 도전", - "DESCRIPTION": "악마의 도전 컨텐츠를 활성화합니다." - }, - "downfall:ExchangeController": { - "NAME": "축복받은", - "DESCRIPTION": "니오우의 축복을 가지고 시작합니다." - }, - "downfall:Lament": { - "NAME": "비탄", - "DESCRIPTION": "니오우의 비탄을 가지고 시작합니다." - }, - "downfall:ChampStances": { - "NAME": "새로운 도전자", - "DESCRIPTION": "투사의 무작위 자세를 취한 채 전투를 시작합니다. 마무리 타격을 얻습니다. 모든 기본 카드에 기술 효과가 추가됩니다." - }, - "downfall:Enraging": { - "NAME": "최후의 저항", - "DESCRIPTION": "적들의 체력이 50% 이하가 되면 다음 턴에 힘을 얻고 모든 해로운 효과를 제거합니다." - }, - "downfall:Analytical": { - "NAME": "분석가", - "DESCRIPTION": "매 턴 시작 시 무작위 부호화 카드를 얻습니다. 그 카드에는 휘발성 효과가 추가됩니다. 시작 타격과 수비에 부호화 효과가 추가됩니다." - }, - "downfall:StatusAbuse": { - "NAME": "고장 수리", - "DESCRIPTION": "임시변통 전지, 도누의 기계 부품, 데카의 기계 부품, 구급 상자, 청동 우상을 가진 채로 시작합니다. 다른 유물은 모두 관으로 교체합니다." - }, - "downfall:TooManyShivs": { - "NAME": "너무 많은 단도", - "DESCRIPTION": "벨벳 초커, 공허의 본질, 단도 10장을 가진 채로 시작합니다." - }, - "downfall:Wizzardry": { - "NAME": "마아아법", - "DESCRIPTION": "마법사 모자, 마법사 지팡이, 복사한 마법 기술 1장을 가진 채 시작합니다." - }, - "downfall:TransformRewards": { - "NAME": "변화됨", - "DESCRIPTION": "모든 카드 보상이 \"변화 카드\" 가 됩니다." - } -} +{ + "downfall:WorldOfGoo": { + "NAME": "끈적이 천지", + "DESCRIPTION": "막히지 않은 피해를 받을 때마다 점액투성이 상태이상을 버린 카드 더미에 넣고 섞습니다." + }, + "downfall:Hexed": { + "NAME": "육각으로", + "DESCRIPTION": "벨벳 초커를 가지고 시작합니다. 뽑은 카드에 휘발성이 추가됩니다." + }, + "downfall:Improvised": { + "NAME": "즉흥적", + "DESCRIPTION": "Unknown 카드를 10장 가진 채로 시작합니다." + }, + "downfall:Jewelcrafting": { + "NAME": "보석세공", + "DESCRIPTION": "추가 보석 활용 2장과 광시곡의 곡괭이를 가진 채로 시작합니다." + }, + "downfall:EvilRun": { + "NAME": "악마의 도전", + "DESCRIPTION": "악마의 도전 컨텐츠를 활성화합니다." + }, + "downfall:ExchangeController": { + "NAME": "축복받은", + "DESCRIPTION": "니오우의 축복을 가지고 시작합니다." + }, + "downfall:Lament": { + "NAME": "비탄", + "DESCRIPTION": "니오우의 비탄을 가지고 시작합니다." + }, + "downfall:ChampStances": { + "NAME": "새로운 도전자", + "DESCRIPTION": "투사의 무작위 자세를 취한 채 전투를 시작합니다. 마무리 타격을 얻습니다. 모든 기본 카드에 기술 효과가 추가됩니다." + }, + "downfall:Enraging": { + "NAME": "최후의 저항", + "DESCRIPTION": "적들의 체력이 50% 이하가 되면 다음 턴에 힘을 얻고 모든 해로운 효과를 제거합니다." + }, + "downfall:Analytical": { + "NAME": "분석가", + "DESCRIPTION": "매 턴 시작 시 무작위 부호화 카드를 얻습니다. 그 카드에는 휘발성이 추가됩니다. 시작 타격과 수비에 부호화 효과가 추가됩니다." + }, + "downfall:StatusAbuse": { + "NAME": "고장 수리", + "DESCRIPTION": "임시변통 전지, 도누의 기계 부품, 데카의 기계 부품, 구급 상자, 청동 우상을 가진 채로 시작합니다. 다른 유물은 모두 관으로 교체합니다." + }, + "downfall:TooManyShivs": { + "NAME": "너무 많은 단도", + "DESCRIPTION": "벨벳 초커, 공허의 본질, 단도 10장을 가진 채로 시작합니다." + }, + "downfall:Wizzardry": { + "NAME": "마아아법", + "DESCRIPTION": "마법사 모자, 마법사 지팡이, 추가 마법 기술을 가진 채 시작합니다." + }, + "downfall:TransformRewards": { + "NAME": "변화됨", + "DESCRIPTION": "모든 카드 보상이 \"변화 카드\" 가 됩니다." + } +} \ No newline at end of file diff --git a/src/main/resources/downfallResources/localization/kor/UIStrings.json b/src/main/resources/downfallResources/localization/kor/UIStrings.json index 83eb7fd0e0..9bd60dc427 100644 --- a/src/main/resources/downfallResources/localization/kor/UIStrings.json +++ b/src/main/resources/downfallResources/localization/kor/UIStrings.json @@ -1,209 +1,231 @@ -{ - "downfall:EvilMenuPanel": { - "TEXT": [ - "몰락", - "첨탑을 오르려는 침입자들로부터 심장을 보호하세요.", - "악당을 선택하십시오", - "캠페인" - ] - }, - "downfall:SoulToGoldChanges": { - "TEXT": [ - "영혼", - "영혼이 얼마나 많은지 보여줍니다. 영혼은 심장의 보상으로도 주어집니다.", - "상인 상태", - "체력", - "사망!", - "힘", - "영혼 강탈", - "파멸" - ] - }, - "downfall:BustKeyButton": { - "TEXT": [ - "루비 파괴", - "사파이어 파괴", - "에메랄드 파괴", - "(자유 행동) 50 영혼을 소모하고 열쇠를 파괴합니다. ", - "보스 전투 동안 힘 1 획득.", - "보스 전투 동안 임시체력 10 획득.", - "보스 전투 동안 민첩 1 획득.", - "열쇠를 깨트렸다!", - "영혼이 ", - " 필요합니다.", - "(자유 행동) 열쇠를 파괴합니다. " - ] - }, - "downfall:WheelSpinButton": { - "TEXT": [ - "돌림판", - "(자유 행동) 돌림판을 돌립니다.", - "다시 돌릴 수 없습니다." - ] - }, - "downfall:AscensionText": { - "TEXT": [ - "19. 보스들이 더 많은 유물을 가지고 등장합니다.", - "20. 3막 보스가 모든 체력을 회복하는 도마뱀 꼬리를 가지고 등장합니다.", - "루비 열쇠를 획득합니다. 파괴는 나중에 해야 합니다.", - "4. 보스들이 더 많은 강화된 카드를 가지고 등장합니다." - ] - }, - "downfall:ConfigMenuText": { - "TEXT": [ - "일반 도전에서 Downfall 모드의 캐릭터의 유물이 출현합니다.", - "일반 도전에서 Downfall 모드의 포션이 출현합니다.", - "일반 도전에서 Downfall 모드의 이벤트가 출현합니다.", - "일반 도전에서 Downfall 모드의 보스 카드가 출현합니다.", - "일반 캐릭터로 몰락을 도전하고 몰락의 악당 캐릭터로 일반을 도전합니다.", - "모드 캐릭터로 몰락을 도전합니다.", - "일반 도전에서 Downfall 모드의 저주가 출현합니다.", - "Downfall 도전에서 원래 지도 형식을 사용합니다. 시작을 모닥불에서 하지 않습니다.", - "Downfall 모드 캐릭터의 모든 잠긴 카드와 유물을 해금합니다(재시작 필요).", - "투사의 상단 자세 설명창을 표시하지 않습니다.", - "스네코가 다른 모드의 카드를 사용하지 않게 합니다.", - "음악을 끕니다(재시작 필요).", - "Downfall 모드 캐릭터의 모든 잠긴 교체 스킨을 해금합니다.", - "적용된 속성에 대해 설명문 추가하는 대신 아이콘을 사용합니다." - ] - }, - "downfall:EnergyPanelTip": { - "TEXT": [ - "적의 현재 에너지 숫자입니다. 카드를 사용하려면 에너지가 필요합니다." - ], - "EXTRA_TEXT": [ - "에너지" - ] - }, - "downfall:RemoveCardReward": { - "TEXT": [ - "덱에 카드를 제거", - "제거할 카드를 선택하십시오." - ] - }, - "downfall:TransformCardReward": { - "TEXT": [ - "덱에 카드를 변화", - "변화할 카드를 선택하십시오." - ] - }, - "downfall:UpgradeCardReward": { - "TEXT": [ - "덱에 카드를 강화", - "강화할 카드를 선택하십시오." - ] - }, - "downfall:BossRelicReward": { - "TEXT": [ - "3개의 보스 유물 중 1개를 선택하세요.", - "얻습니다. ", - ".", - "유물을 선택하세요.. 아무거나요." - ] - }, - "downfall:EtherealMod": { - "TEXT": [ - "휘발성. NL " - ] - }, - "downfall:JaxReward": { - "TEXT": [ - "JAX 좀 찾아보자!" - ] - }, - "downfall:RareCardReward": { - "TEXT": [ - "덱에 희귀 카드를 추가" - ] - }, - "downfall:OctoChoiceAction": { - "TEXT": [ - "선택하세요.", - "당신은 이걸 봐선 안됐습니다. 에그머니나." - ] - }, - "downfall:BossCardReward": { - "TEXT": [ - "덱에 보스 카드를 추가", - "카드를 선택하십시오." - ] - }, - "downfall:ColorfulCardReward": { - "TEXT": [ - "덱에 ", - " 카드를 추가", - "카드를 선택하십시오." - ] - }, - "downfall:ColorfulUncommonCardReward": { - "TEXT": [ - "덱에 ", - " 카드를 추가", - "카드를 선택하십시오." - ] - }, - "downfall:ColorfulRareCardReward": { - "TEXT": [ - "덱에 ", - " 카드를 추가", - "카드를 선택하십시오." - ] - }, - "downfall:DiceRollPotionReward": { - "TEXT": [ - "덱에 강화된 ", - " 카드를 추가", - "카드를 선택하십시오." - ] - }, - "downfall:ColorfulPowersCardReward": { - "TEXT": [ - "덱에 강화된 ", - " 파워 카드를 추가", - "카드를 선택하십시오." - ] - }, - "downfall:RunHistoryMonsterNames": { - "TEXT": [ - "살아있는 벽 머리들", - "아이언클래드", - "사일런트", - "디펙트", - "와쳐", - "상인" - ] - }, - "downfall:WhaleHunter": { - "TEXT": [ - "고래 사냥꾼", - "순환은 끝났다." - ] - }, - "downfall:Unfettered": { - "TEXT": [ - "봉인 해제", - "파괴된 봉인을 얻었습니다." - ] - }, - "downfall:SingleCardViewPopup": { - "TEXT": [ - "탄약" - ] - }, - "downfall:MainMenuAd": { - "TEXT": [ - "더 원하시나요?", - "Slay the Spire 토대로 ", - "창작 마당에는 Downfall을 ", - "포함한 많은 모드가 있습니다.", - "자세한 사항에 대해서는", - "여기를 클릭해주세요!" - ] - }, - "downfall:CantEscapeGauntlet": { - "TEXT": [ - "압도당했습니다." - ], - "Translator note": "이 창은 전투에서 영웅이 1명이라도 남아있을 때 벗어나려하면 표시됩니다. 당신은 압도되어 이 전투에서 도망칠 수 없습니다." - } -} \ No newline at end of file +{ + "downfall:EvilMenuPanel": { + "TEXT": [ + "몰락", + "첨탑을 오르려는 침입자들로부터 심장을 보호하세요.", + "악당을 선택하십시오", + "캠페인" + ] + }, + "downfall:SoulToGoldChanges": { + "TEXT": [ + "영혼", + "영혼이 얼마나 많은지 보여줍니다. 영혼은 심장의 보상으로도 주어집니다.", + "상인 상태", + "체력", + "사망!", + "힘", + "영혼 강탈", + "파멸" + ] + }, + "downfall:BustKeyButton": { + "TEXT": [ + "루비 파괴", + "사파이어 파괴", + "에메랄드 파괴", + "(자유 행동) 영혼을 ", + " 장의 일반 카드 중 선택.)", + " 장의 특별 카드 중 선택.)", + " 장의 희귀 카드 중 선택.)", + "열쇠를 깨트렸다!", + "영혼을 ", + " 필요로 합니다.", + "(자유 행동) 열쇠를 파괴합니다. ", + " 소모하고 카드를 ", + " 장 얻습니다. (", + " 열쇠는 파괴 후 강화됩니다." + ] + }, + "downfall:BustKeyButtonBackupForTranslators": { + "TEXT": [ + "루비 파괴", + "사파이어 파괴", + "에메랄드 파괴", + "(자유 행동) 50 영혼을 소모하고 열쇠를 파괴합니다. ", + "보스 전투 동안 힘 1 획득.", + "보스 전투 동안 체력 10 회복.", + "보스 전투 동안 민첩 1 획득.", + "열쇠를 깨트렸다!", + "영혼이 ", + " 필요합니다.", + "(자유 행동) 열쇠를 파괴합니다. " + ] + }, + "downfall:WheelSpinButton": { + "TEXT": [ + "돌림판", + "(자유 행동) 돌림판을 돌립니다.", + "다시 돌릴 수 없습니다." + ] + }, + "downfall:AscensionText": { + "TEXT": [ + "19. 보스들이 더 많은 유물을 가지고 등장합니다.", + "20. 3막 보스가 모든 체력을 회복하는 도마뱀 꼬리를 가지고 등장합니다.", + "루비 열쇠를 획득합니다. 파괴는 나중에 해야 합니다.", + "4. 보스들이 더 많은 강화된 카드를 가지고 등장합니다." + ] + }, + "downfall:ConfigMenuText": { + "TEXT": [ + "일반 도전에서 Downfall 모드의 캐릭터의 유물이 출현합니다.", + "일반 도전에서 Downfall 모드의 포션이 출현합니다.", + "일반 도전에서 Downfall 모드의 이벤트가 출현합니다.", + "일반 도전에서 Downfall 모드의 보스 카드가 출현합니다.", + "일반 캐릭터로 몰락을 도전하고 몰락의 악당 캐릭터로 일반을 도전합니다.", + "모드 캐릭터로 몰락을 도전합니다.", + "일반 도전에서 Downfall 모드의 저주가 출현합니다.", + "Downfall 도전에서 원래 지도 형식을 사용합니다. 시작을 모닥불에서 하지 않습니다.", + "Downfall 모드 캐릭터의 모든 잠긴 카드와 유물을 해금합니다 (재시작 필요).", + "투사의 상단 자세 설명창을 표시하지 않습니다.", + "스네코 선택 시 다른 모드의 카드가 출현하지 않게 합니다.", + "음악을 끕니다 (재시작 필요).", + "Downfall 모드 캐릭터의 모든 잠긴 교체 스킨을 해금합니다.", + "적용된 속성에 대해 설명문 추가하는 대신 아이콘을 사용합니다.", + "주문서가 암송으로 뽑을 다음 카드를 표시합니다.", + "Downfall 모드의 기본 카드와 유물의 밸런스 조정을 없앱니다 (재시작 필요).", + "과거 Downfall 보스가 출현합니다 (pre-6.0)." + ] + }, + "downfall:EnergyPanelTip": { + "TEXT": [ + "적의 현재 에너지 숫자입니다. 카드를 사용하려면 에너지가 필요합니다." + ], + "EXTRA_TEXT": [ + "에너지" + ] + }, + "downfall:RemoveCardReward": { + "TEXT": [ + "덱에 카드를 제거", + "제거할 카드를 선택하십시오." + ] +}, + "downfall:TransformCardReward": { + "TEXT": [ + "덱에 카드를 변화", + "변화할 카드를 선택하십시오." + ] + }, + "downfall:UpgradeCardReward": { + "TEXT": [ + "덱에 카드를 강화", + "강화할 카드를 선택하십시오." + ] + }, + "downfall:BossRelicReward": { + "TEXT": [ + "3개의 보스 유물 중 1개를 선택하세요.", + "얻습니다. ", + ".", + "유물을 선택하세요.. 아무거나요." + ] + }, + "downfall:EtherealMod": { + "TEXT": [ + "휘발성. NL " + ] + }, + "downfall:JaxReward": { + "TEXT": [ + "JAX 좀 찾아보자!" + ] + }, + "downfall:RareCardReward": { + "TEXT": [ + "덱에 희귀 카드를 추가" + ] + }, + "downfall:OctoChoiceAction": { + "TEXT": [ + "선택하세요.", + "당신은 이걸 봐선 안됐습니다. 에그머니나." + ] + }, + "downfall:BossCardReward": { + "TEXT": [ + "덱에 보스 카드를 추가", + "카드를 선택하십시오." + ] + }, + "downfall:ColorfulCardReward": { + "TEXT": [ + "덱에 ", + " 카드를 추가", + "카드를 선택하십시오." + ] + }, + "downfall:ColorfulUncommonCardReward": { + "TEXT": [ + "덱에 ", + " 카드를 추가", + "카드를 선택하십시오." + ] + }, + "downfall:ColorfulRareCardReward": { + "TEXT": [ + "덱에 ", + " 카드를 추가", + "카드를 선택하십시오." + ] + }, + "downfall:DiceRollPotionReward": { + "TEXT": [ + "덱에 강화된 ", + " 카드를 추가", + "카드를 선택하십시오." + ] + }, + "downfall:ColorfulPowersCardReward": { + "TEXT": [ + "덱에 강화된 ", + " 파워 카드를 추가", + "카드를 선택하십시오." + ] + }, + "downfall:RunHistoryMonsterNames": { + "TEXT": [ + "살아있는 벽 머리들", + "아이언클래드", + "사일런트", + "디펙트", + "와쳐", + "상인", + "허밋" + ] + }, + "downfall:WhaleHunter": { + "TEXT": [ + "고래 사냥꾼", + "순환은 끝났다." + ] + }, + "downfall:Unfettered": { + "TEXT": [ + "봉인 해제", + "파괴된 봉인을 얻었습니다." + ] + }, + "downfall:SingleCardViewPopup": { + "TEXT": [ + "탄약" + ] + }, + "downfall:MainMenuAd": { + "TEXT": [ + "더 원하시나요?", + "Slay the Spire 토대로", + "창작 마당에는 Downfall을 ", + "포함한 많은 모드가 있습니다.", + "자세한 사항에 대해서는", + "여기를 클릭해주세요!" + ] + }, + "downfall:CantEscapeGauntlet": { + "TEXT": [ + "그럴 수 없다." + ], + "Translator note": "이 창은 전투에서 영웅이 1명이라도 남아있을 때 벗어나려하면 표시됩니다. 당신은 압도되어 이 전투에서 도망칠 수 없습니다." + } +} diff --git a/src/main/resources/downfallResources/localization/ptb/UIStrings.json b/src/main/resources/downfallResources/localization/ptb/UIStrings.json index fb4bd62f98..522281e63b 100644 --- a/src/main/resources/downfallResources/localization/ptb/UIStrings.json +++ b/src/main/resources/downfallResources/localization/ptb/UIStrings.json @@ -19,6 +19,24 @@ ] }, "downfall:BustKeyButton": { + "TEXT": [ + "Break Ruby", + "Break Sapphire", + "Break Emerald", + "(Free Action) Spend ", + " Common cards to gain.", + " Uncommon cards to gain.", + " Rare cards to gain.", + "Key shattered!", + "Requires ", + " Souls.", + "(Free Action) Destroy key to ", + " Souls: Choose up to ", + " of ", + " Enhance future key breaks." + ] + }, + "downfall:BustKeyButtonBackupForTranslators": { "TEXT": [ "Quebrar Rubi", "Quebrar Safira", @@ -30,7 +48,7 @@ "Chave destruída!", "Requer ", " almas.", - "(Ação Grátis) Destrua a chave para " + "(Ação Grátis) Destrua a chave para ", ] }, "downfall:WheelSpinButton": { diff --git a/src/main/resources/downfallResources/localization/rus/CardStrings.json b/src/main/resources/downfallResources/localization/rus/CardStrings.json index 37196e8ac7..da0fc59184 100644 --- a/src/main/resources/downfallResources/localization/rus/CardStrings.json +++ b/src/main/resources/downfallResources/localization/rus/CardStrings.json @@ -13,7 +13,7 @@ }, "downfall:Haunted": { "NAME": "Беспокойство", - "DESCRIPTION": "Неиграбельная. Эфирная. NL Когда вы берёте эту карту, все остальные карты в руке получают Эфирность." + "DESCRIPTION": "Неиграбельная. Эфирная. NL Вы получите !M! урона в конце вашего хода." }, "downfall:Malfunctioning": { "NAME": "Изъян", diff --git a/src/main/resources/downfallResources/localization/rus/UIStrings.json b/src/main/resources/downfallResources/localization/rus/UIStrings.json index a2aa0c5790..160f3569f9 100644 --- a/src/main/resources/downfallResources/localization/rus/UIStrings.json +++ b/src/main/resources/downfallResources/localization/rus/UIStrings.json @@ -20,6 +20,24 @@ ] }, "downfall:BustKeyButton": { + "TEXT": [ + "Break Ruby", + "Break Sapphire", + "Break Emerald", + "(Free Action) Spend ", + " Common cards to gain.", + " Uncommon cards to gain.", + " Rare cards to gain.", + "Key shattered!", + "Requires ", + " Souls.", + "(Free Action) Destroy key to ", + " Souls: Choose up to ", + " of ", + " Enhance future key breaks." + ] + }, + "downfall:BustKeyButtonBackupForTranslators": { "TEXT": [ "Разбить ключ-Рубин", "Разбить ключ-Сапфир", @@ -31,7 +49,8 @@ "Ключ уже разбит!", "Требуется ", " душ.", - "(Не тратит действие) Разбейте ключ и " + "(Не тратит действие) Разбейте ключ и ", + "Souls: Destroy key to " ] }, "downfall:WheelSpinButton": { 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 0000000000..76c6b80993 --- /dev/null +++ b/src/main/resources/downfallResources/localization/spa/CardStrings.json @@ -0,0 +1,115 @@ +{ + "downfall:Aged": { + "NAME": "Envejecido", + "DESCRIPTION": "Injugable. Etérea. NL Al final de tu turno, añade un *Vacío en la parte superior de tu pila de extracción." + }, + "downfall:Bewildered": { + "NAME": "Desconcertado", + "DESCRIPTION": "Al robarla, sneckomod:Confunde esta carta. NL Agota." + }, + "downfall:Icky": { + "NAME": "Pegajoso", + "DESCRIPTION": "Retiene. NL Agota." + }, + "downfall:Haunted": { + "NAME": "Embrujado", + "DESCRIPTION": "Etérea. Injugable. NL Al final de tu turno, recibe !M! 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:CurseOfBlood": { + "NAME": "Haemophilia", + "DESCRIPTION": "Pierde [E] al inicio de tu próximo turno. NL Agota.", + "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": "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! de daño adicional este combate. NL Gana !B! de Destreza." + }, + "downfall:CuriousRobot": { + "NAME": "Robot Curioso", + "DESCRIPTION": "Cuando tu oponente juega un Poder, gana 1 Foco. Tu Fuerza afecta a tu Foco." + }, + "downfall:Murderbot": { + "NAME": "Ladrón de Energía", + "DESCRIPTION": "Cada vez que infliges daño de ataque no bloqueado, añade un *Vacío a la pila de descarte de tu oponente." + }, + "downfall:Temptation": { + "NAME": "Tentación", + "DESCRIPTION": "Baraja !M! Poderes aleatorios en la pila de extracción de tu oponente." + }, + "downfall:BagOfKnives": { + "NAME": "Bolsa de Cuchillos", + "DESCRIPTION": "La primera vez que juegas una carta que cuesta 2 o más cada turno, gana 2 *Shivs." + }, + "downfall:Hallunication": { + "NAME": "Alucinación", + "DESCRIPTION": "Oculta tu ubicación real cada turno. Cuando tú o la ilusión son Atacados, la ilusión se desvanece." + }, + "downfall:NewToxins": { + "NAME": "Nuevas Toxinas", + "DESCRIPTION": "El Veneno ya no se desvanece, pero es bloqueable y causa daño al final del turno en lugar del inicio." + }, + "downfall:FeedingFrenzy": { + "NAME": "Frenesí Alimenticio", + "DESCRIPTION": "*Segador también apunta a TODOS los *Hongos. Gana 1 de Fuerza cuando matas a tu propio *Hongo." + }, + "downfall:StatusMirror": { + "NAME": "Espejo Mágico", + "DESCRIPTION": "Las cartas de Estado que genera este personaje se añaden a ti en su lugar." + }, + "downfall:EyeForAnEye": { + "NAME": "Ojo por Ojo", + "DESCRIPTION": "Si tu oponente ha jugado más Ataques que no Ataques, estás en Ira. Si no, estás en Calma." + }, + "downfall:TruePeace": { + "NAME": "Verdadera Paz", + "DESCRIPTION": "No hacer nada. Esperar el fin inevitable de todas las cosas." + }, + "downfall:EndIsNigh": { + "NAME": "El Fin está Cerca", + "DESCRIPTION": "TODOS ganan !M! Ritual." + }, + "downfall:FalseWorship": { + "NAME": "Falsa Adoración", + "DESCRIPTION": "Revive a tu Cultista si está muerto. De lo contrario, revive al morir, restaurando 50% de PV." + }, + "downfall:FleetingFaith": { + "NAME": "Fe Fugaz", + "DESCRIPTION": "Gana 1 Mantra cuando tu oponente juega una carta. Pierde 5 al inicio de tu turno." + }, + "downfall:FaithRewarded": { + "NAME": "Fe Recompensada", + "DESCRIPTION": "Si entras en Divinidad, nunca puedes salir de ella." + }, + "downfall:Crusade": { + "NAME": "Crusada", + "DESCRIPTION": "Elimina todas las desventajas. NL Pierde todo el Mantra. Sana !M! PV y gana 1 de Fuerza por cada Mantra perdido." + }, + "downfall:Hyperfocused": { + "NAME": "Foco Mortal", + "DESCRIPTION": "Siempre obtiene efectos de *En Muerte. Después de recibir 10 de daño, elimina los efectos de *En Muerte por ese turno." + }, + "downfall:Arsenal": { + "NAME": "Arsenal Viviente", + "DESCRIPTION": "Invoca un *Daga *Condenada." + }, + "downfall:Steady": { + "NAME": "Estable", + "DESCRIPTION": "*Ira ahora incrementa el daño infligido y recibido en un 50% en lugar de un 100%." + }, + "downfall:Revolver": { + "NAME": "Revólver", + "DESCRIPTION": "Los turnos futuros son dictados por la *Rueda *del *Destino. Al ser atacado, la *Rueda avanza un paso." + } +} 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 0000000000..08a823a692 --- /dev/null +++ b/src/main/resources/downfallResources/localization/spa/CharacterStrings.json @@ -0,0 +1,252 @@ +{ + "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": [ + "(Las victorias en el Acto 4 no cuentan)", + "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 el Coleccionista.", + "Este personaje se desbloquea al completar una partida con el séptimo personaje Villano.", + "Este personaje se desbloquea al completar una partida con el Despertado.", + "Este personaje se desbloquea al completar una partida con el octavo personaje Villano.", + "Este personaje se desbloquea al completar una partida con los Gremlins." + ] + }, + "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": [] + }, + "downfall:CharBossSpeech": { + "NAMES": [ + "" + ], + "TEXT": [ + "No, ¡Eso no puede ser! Necesitamos más toxinas...", + "¡Muere, monstruo! ¡No perteneces a este mundo!" + ] + } + +} \ 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 0000000000..c99db67d7c --- /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 Espectral.", + "[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.", + "Decides irte sin hacer ninguna ofrenda a la estatua, pero sientes #pVergüenza de no haberlo hecho." + ], + "OPTIONS": [ + "[Ofrendar Almas] #rPierde #r", + " #rAlmas. #gCura #g", + " #gPV.", + "[Bloqueado] Requiere ", + " Almas.", + "[Salir]", + "[Salir] #rMaldito #r- #rVergüenza." + ] + }, + "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.", + " #rPV.", + "[Bloqueado] - No tienes suficientes cartas." + ] + } +} 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 0000000000..0637a088a0 --- /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 0000000000..effef219af --- /dev/null +++ b/src/main/resources/downfallResources/localization/spa/MonsterStrings.json @@ -0,0 +1,87 @@ +{ + "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": [] + }, + "downfall:VoidCore": { + "MOVES": [ + ], + "NAME": "Núcleo vacío", + "DIALOG": [ + ] + } +} \ No newline at end of file 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 0000000000..9e26dfeeb6 --- /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 0000000000..5d61784bf2 --- /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", + " #yDébil, #b", + " #yVulnerable, 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 0000000000..5a116a6ece --- /dev/null +++ b/src/main/resources/downfallResources/localization/spa/PowerStrings.json @@ -0,0 +1,496 @@ +{ + "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:CultistRevivePower": { + "NAME": "Falso Culto", + "DESCRIPTIONS": [ + "Cura al #b50% de tus PV máximos en vez de morir, eliminando este efecto.", + "CAAAAWWWW!" + ] + }, + "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": [ + "Si juegas una carta de ataque este turno, este enemigo ganará #b", + " de #yFuerza.", + "Jugaste una carta de ataque este turno. El enemigo ganará #b", + " de #yFuerza." + ] + }, + "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": [ + "Cada vez que inflijas daño de #yAtaque no bloqueado, remueve #b", + " #yVeneno." + ] + }, + "downfall:OnPlayerPoison": { + "NAME": "Veneno", + "DESCRIPTIONS": [ + "Al final de tu turno, recibe #b", + " de daño." + ] + }, + "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].", + "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 un #yAtaque, La Vigilante gana #b", + " #yDestreza #ytemporal, #b", + " #yFuerza #ytemporal cuando juegas una #yHabilidad, y #b", + " de ambos cuando juegas un #yPoder.", + "Si juegas mas de #b", + " cartas en un turno, La Vigilante remueve todas sus desventajas.", + "Jugaste #b", + " cartas este turno." + ] + }, + "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 y #b1 Intangible cada vez que juegues #b6 cartas en un turno.", + " NL Jugaste #b", + " cartas este turno.", + " NL (Ya se ha activado este turno)", + " NL NL Cuando La Vigilante entre en #yDivinidad, nunca saldrá de ella, pero #yDivinidad aumenta el daño solamente en 200%." + ] + }, + "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:SilentDelayedWraithPower": { + "NAME": "Posesión Fatal", + "DESCRIPTIONS": [ + "La primera vez que La Silenciosa alcanza 0 PV, activa #yForma #yEspectral", + " y se cura #b", + " PV." + ] + }, + "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.", + "#yVeneno es bloqueable, no decae y causa daño al final del turno." + ] + }, + "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 extracción, 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 [REMOVE_SPACE].", + " Los cambios a la #yFuerza del Defectuoso también afectan su #yConcentración [REMOVE_SPACE]." + ] + }, + "downfall:DefectBiasCuriosity": { + "NAME": "Cognición Corregida", + "DESCRIPTIONS": [ + "El Defectuoso empieza el combate con #b4 #yConcentración y gana #b1 más cada vez que juegas una carta #yPoder [REMOVE_SPACE], pero también pierde #b1 #yConcentración al inicio de su turno.", + "El Defectuoso pierde #b", + " #yConcentración", + " al final de su turno." + ] + }, + "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.", + "Cada vez que El Blindado genere una carta #yEstado, se agrega a tu pila de descarte en su lugar. NL Al perder #b", + " más PV, ganas #yPuridad con #yRetener.", + "Cada vez que El Blindado genere una carta #yEstado, se agrega a tu pila de extracción en su lugar. NL Al perder #b" + ] + }, + "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].", + "La #yParca de El Blindado apunta a TODOS los Hongos. NL Cuando El Blindado mata un Hongo, gana #b", + " de #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 de #yFuerza al inicio de cada turno.", + "Cuando se destruye, El Blindado pierde #yBarrera, pero gana #b5 de #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.", + "Cuando Mandarina muere, la #yConcentración de El Hermitaño se rompe." + ] + }, + "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. . Cuando El Hermitaño roba #rNecronomicurse, gana #b2 de Fuerza.", + "Después de jugar un #yAtaque, El Hermitaño #yCicla su primera carta" + ] + }, + "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": "Próximo Turno ", + "DESCRIPTIONS": [ + "¡ERROR! No deberías ver esto", + "El siguiente turno, gana #b", + " #y", + " [REMOVE_SPACE].", + "NOTA DE LOCALIZACIÓN: Por favor, mantén el espacio después de 'Siguiente Turno' en el campo de NOMBRE.", + "finalized text should look like this: Next turn, gain #b7 #yVigor [REMOVE_SPACE]." + ] + }, + "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]." + ] + }, + "downfall:DefectAttackVoidPower":{ + "NAME": "Robo de Energía", + "DESCRIPTIONS": [ + "Siempre que inflijas daño de ataque no bloqueado, añade un Vacío a la pila de descarte de tu oponente." + ] + }, + "downfall:WatcherTrackerAttacksPower":{ + "NAME": "Ojo por los Ataques", + "DESCRIPTIONS": [ + "Has jugado #b", + " Ataques. Mientras este número supere a los no-Ataques, La Vigilante está en la postura de #yCólera." + ] + }, + "downfall:WatcherTrackerSkillsPower":{ + "NAME": "Ojo por las Habilidades", + "DESCRIPTIONS": [ + "Has jugado #b", + " no-Ataques. Mientras este número supere o iguale a los Ataques, La Vigilante está en la postura de #yCalma." + ] + }, + "downfall:VoidOrbPower":{ + "NAME": "Núcleo del Vacío", + "DESCRIPTIONS": [ + "Cuando es destruido, el Núcleo del Vacío restaura todos los PV y elimina un Orbe de #yOscuridad del Defecto.", + " Gana 5 PV Máx cada vez que esto ocurre." + ] + } +} 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 0000000000..729bd16bff --- /dev/null +++ b/src/main/resources/downfallResources/localization/spa/RelicStrings.json @@ -0,0 +1,564 @@ +{ + "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 #b", + " 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 0000000000..19d5f31d9d --- /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 PV." + }, + "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 0000000000..ca5d8fd33e --- /dev/null +++ b/src/main/resources/downfallResources/localization/spa/UIStrings.json @@ -0,0 +1,231 @@ +{ + "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", + "PV", + "¡Muerto!", + "Fuerza", + "Almas robadas", + "Perdición" + ] + }, + "downfall:BustKeyButton": { + "TEXT": [ + "Romper Rubí", + "Romper Zafiro", + "Romper Esmeralda", + "(Acción gratuita) Gasta ", + " cartas Comunes para obtenerla.", + " cartas PocoComunes para obtenerla.", + " cartas Raras para obtenerla.", + "¡Llave destruida!", + "Se requieren ", + " Almas.", + "(Acción gratuita) Destruye la llave para ", + " Almas: Elige ", + " de ", + " Mejora las futuras llaves destruidas." + ] + }, + "downfall:BustKeyButtonBackupForTranslators": { + "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 PV Temporales.", + "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 todos los PV.", + "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.", + "El Libro de Hechizos resalta la próxima carta que robarás al Conjurar.", + "Sin ajustes de Downfall a cartas y reliquias originales (Urna de Cara de Pájaro)", + "Usar Jefes de Downfall Legado (pre-6.0)" + ] + }, + "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 0000000000..6826f212ee --- /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 eda1fa10cc..1cf94435f9 100644 --- a/src/main/resources/downfallResources/localization/zhs/CardStrings.json +++ b/src/main/resources/downfallResources/localization/zhs/CardStrings.json @@ -1,23 +1,23 @@ { "downfall:Aged": { "NAME": "岁月", - "DESCRIPTION": "虚无 。 NL 不能被打出 。 NL 回合结束时, NL 将 *虚空 加入抽牌堆顶。" + "DESCRIPTION": "虚无 。 NL 不能被打出 。 NL 回合结束时, NL 将 *虚空 加入弃牌堆。" }, "downfall:Bewildered": { "NAME": "困惑", - "DESCRIPTION": "虚无 。 NL 不能被打出 。 NL 抽到时 , NL sneckomod:混淆 其他手牌 。" + "DESCRIPTION": "抽到时 , NL sneckomod:混淆 本牌 。 NL 消耗 。" }, "downfall:Icky": { "NAME": "黏液缠身", - "DESCRIPTION": "获得一张 *黏液 。 NL 消耗 。" + "DESCRIPTION": "下回合少抽一张牌。 NL 消耗 。" }, "downfall:Haunted": { "NAME": "闹鬼", - "DESCRIPTION": "虚无 。 NL 不能被打出 。 NL 消耗 牌时若本牌在手, NL 受到2点伤害。" + "DESCRIPTION": "本牌被 消耗 时, NL 在你的回合结束时,你受到 !M! 点伤害。" }, "downfall:Malfunctioning": { "NAME": "纰漏", - "DESCRIPTION": "回合结束时若本牌在手, NL 将手牌全变为随机状态。 NL 消耗 。" + "DESCRIPTION": "回合结束时若本牌在手, NL 加入一张 *伤口 至弃牌堆。 NL 消耗 。" }, "downfall:Scatterbrained": { "NAME": "漫不经心", @@ -29,6 +29,88 @@ }, "downfall:BossMaintenance": { "NAME": "维护", - "DESCRIPTION": "*打击 额外造成 !M! 点伤害。 NL 获得 !B! 点 敏捷 。 NL 本场战斗耗能加1。" + "DESCRIPTION": "*打击 额外造成 !M! 点伤害。 NL 获得 !B! 点 敏捷 。" + }, + "downfall:CurseOfBlood": { + "NAME": "血友病", + "DESCRIPTION": "下回合失去 [E] 。 NL 消耗 。" + }, + "downfall:CuriousRobot": { + "NAME": "Curious Robot", + "DESCRIPTION": "When your opponent plays a Power, gain 1 Focus. Your Strength affects your Focus." + }, + "downfall:Murderbot": { + "NAME": "Energy Thief", + "DESCRIPTION": "Whenever you deal unblocked attack damage, add a *Void to your opponent's discard pile." + }, + "downfall:Temptation": { + "NAME": "Temptation", + "DESCRIPTION": "Shuffle !M! random Powers into your opponent's draw pile." + }, + "downfall:BagOfKnives": { + "NAME": "Bag of Knives", + "DESCRIPTION": "The first time you play a card that costs 2 or more each turn, gain 2 *Shivs." + }, + "downfall:Hallunication": { + "NAME": "Hallucination", + "DESCRIPTION": "Hide your real location each turn. When you or the illusion are Attacked, the illusion fades." + }, + "downfall:NewToxins": { + "NAME": "New Toxins", + "DESCRIPTION": "Poison no longer decays, but is blockable and deals damage at the end of turn instead of the start." + }, + "downfall:FeedingFrenzy": { + "NAME": "Feeding Frenzy", + "DESCRIPTION": "*Reaper also targets ALL *Mushrooms. Gain 1 Strength when you kill your own *Mushroom." + }, + "downfall:StatusMirror": { + "NAME": "Magic Mirror", + "DESCRIPTION": "Status cards this character generates are added to you instead." + }, + "downfall:EyeForAnEye": { + "NAME": "Eye for an Eye", + "DESCRIPTION": "If your opponent has played more Attacks than non-Attacks, you are in Wrath. Else, you are in Calm." + }, + "downfall:TruePeace": { + "NAME": "True Peace", + "DESCRIPTION": "Do nothing. Wait for the inevitable end of all things." + }, + "downfall:EndIsNigh": { + "NAME": "End is Nigh", + "DESCRIPTION": "EVERYONE gains !M! Ritual." + }, + "downfall:FalseWorship": { + "NAME": "False Worship", + "DESCRIPTION": "Revive your Cultist if he is dead. Otherwise, he revives upon death, restoring 50% HP." + }, + "downfall:FleetingFaith": { + "NAME": "Spectral Presence", + "DESCRIPTION": "Add !M! *Haunted cards to your opponent's discard pile." + }, + "downfall:FaithRewarded": { + "NAME": "Faith Rewarded", + "DESCRIPTION": "If you enter Divinity, you can never leave it. Divinity's damage bonus is reduced to 200%." + }, + "downfall:Crusade": { + "NAME": "Crusade", + "DESCRIPTION": "Remove all Debuffs. NL Lose all Mantra. Heal !M! HP and gain 1 Strength for each Mantra lost." + }, + "downfall:Hyperfocused": { + "NAME": "Deadly Focus", + "DESCRIPTION": "Always gain *Dead *On effects. After receiving 10 damage, remove *Dead *On effects for that turn." + }, + "downfall:Arsenal": { + "NAME": "Living Arsenal", + "DESCRIPTION": "Summon a *Doomed *Dagger." + }, + "downfall:Steady": { + "NAME": "Steady", + "DESCRIPTION": "*Wrath now increases damage dealt and receive by 50% instead of 100%." + }, + "downfall:Revolver": { + "NAME": "Revolver", + "DESCRIPTION": "Future turns are dictated by the *Wheel *of *Fate. When attacked, the *Wheel advances one step." } } + + diff --git a/src/main/resources/downfallResources/localization/zhs/CharacterStrings.json b/src/main/resources/downfallResources/localization/zhs/CharacterStrings.json index 5bd1b31491..c420882fbc 100644 --- a/src/main/resources/downfallResources/localization/zhs/CharacterStrings.json +++ b/src/main/resources/downfallResources/localization/zhs/CharacterStrings.json @@ -39,6 +39,7 @@ }, "downfall:Unlock": { "TEXT": [ + " (进入第4幕无法解锁)", "这名角色需要用史莱姆老大打过一局游戏才能解锁。", "这名角色需要用第二名恶棍打过一局游戏才能解锁。", "这名角色需要用守护者打过一局游戏才能解锁。", @@ -49,10 +50,11 @@ "这名角色需要用第五名恶棍打过一局游戏才能解锁。", "这名角色需要用铜制机械人偶打过一局游戏才能解锁。", "这名角色需要用第六名恶棍打过一局游戏才能解锁。", - "这名角色需要用地精小队打过一局游戏才能解锁。", - " (进入第4幕无法解锁)", + "这名角色需要用收藏家打过一局游戏才能解锁。", "这名角色需要用第七名恶棍打过一局游戏才能解锁。", - "这名角色需要用收藏家打过一局游戏才能解锁。" + "这名角色需要用觉醒者打过一局游戏才能解锁。", + "这名角色需要用第八名恶棍打过一局游戏才能解锁。", + "这名角色需要用地精小队打过一局游戏才能解锁。" ] }, "downfall:HeartMerchant": { @@ -241,5 +243,14 @@ ], "TEXT": [ ] + }, + "downfall:CharBossSpeech": { + "NAMES": [ + "" + ], + "TEXT": [ + "不,怎么会! 我们的毒还不够...", + "去死吧,怪物!这个世界不需要你!" + ] } } diff --git a/src/main/resources/downfallResources/localization/zhs/EventStrings.json b/src/main/resources/downfallResources/localization/zhs/EventStrings.json index e56b51f5b1..205759f335 100644 --- a/src/main/resources/downfallResources/localization/zhs/EventStrings.json +++ b/src/main/resources/downfallResources/localization/zhs/EventStrings.json @@ -224,7 +224,7 @@ "downfall:WorldOfGoop": { "NAME": "黏液世界", "DESCRIPTIONS": [ - "你掉进了一个水坑里。 NL 可是坑里 @全是@ #g@史莱姆黏液@ ! NL 你感到耳朵里是黏液,鼻子里是黏液,到处都是黏液。 NL NL 爬出水坑后,你注意到一个样貌奇特的 #y黄色 史莱姆生物粘在你的身上。它看上去收集了许多不幸落入水坑的冒险者的 #y金币 。多方便啊。", + "你掉进了一个水坑里。 NL 可是坑里 @全是@ #g@史莱姆黏液@ ! NL 爬出水坑后,你注意到一个样貌奇特的 #y黄色 史莱姆生物粘在你的身上。它看上去收集了许多不幸落入水坑的冒险者的 #y金币 。多方便啊。", "你不想白白地掉进水坑里,于是击打了这个 #y黄色 的史莱姆生物。 NL NL 它立即 @爆开@ 了! NL NL 这出乎你的意料,更多黏液粘到了你的身上。", "你把这 #y黄色 史莱姆从身上擦掉,继续你的旅程。虽然身上还裹着黏液,不过它还挺符合你恐怖审美的。" ], @@ -332,7 +332,8 @@ "NAME": "被遗忘的祭坛", "DESCRIPTIONS": [ "你站在祭坛前,引导着内在的精神能量。 NL 随着献给女神的 #b灵魂 涌出,雕像的双手伸到你的面前,散发出一股 #p~诅咒的魔法~ 抚慰着你。 NL 一切坠入黑暗。 NL 你在一段时间后苏醒了过来,战斗中受的大小伤口都愈合了。", - "简要地感谢了雕像中寄宿的恶灵后,你离开了,继续在城市中穿行。" + "简要地感谢了雕像中寄宿的恶灵后,你离开了,继续在城市中穿行。", + "你决定弃之而去,但你对这个决定隐约觉得有些 #p遗憾 。" ], "OPTIONS": [ "[献上灵魂] #r失去 #r", @@ -340,7 +341,9 @@ " #g点生命。", "[锁定] 需要 ", " 灵魂。", - "[离开]" + "[离开]", + "[离开] #r失去 #r", + " #r点生命。" ] }, "downfall:Bandits": { @@ -472,7 +475,7 @@ "OPTIONS": [ "[我为回响] #r与自己战斗。 #g获得一件稀有遗物。", "[我将富有] #g获得999灵魂。 #r被诅咒-2张 #r凡庸。", - "[我将完整] #g升级所有牌。 #r背负沉重的负担。", + "[我将完整] #g升级所有牌。 #r无法再回复生命。", "[锁定] 需要全部3件心脏的祝福。", "[离开]", "[我将完整] #g升级所有牌。 #r背负沉重的负担。" @@ -622,8 +625,10 @@ "[亵渎] #g复制2张牌。 #r被诅咒- #r岁月。", "[亵渎] #g移除2张牌。 #r失去 #r", " #r点最大生命。", - "[亵渎] #g变化3张牌。 #r被诅咒- #r纰漏。", - "[亵渎] #g升级2张牌。 #r被诅咒- #r疼痛。" + "[亵渎] #g变化2张牌。 #r失去 #r", + "[亵渎] #g升级2张牌。 #r被诅咒- #r疼痛。", + " #r点生命。", + "[锁定] - 牌组内相关牌数不足。" ] } } diff --git a/src/main/resources/downfallResources/localization/zhs/MonsterStrings.json b/src/main/resources/downfallResources/localization/zhs/MonsterStrings.json index ab4333680b..1ab0f0679c 100644 --- a/src/main/resources/downfallResources/localization/zhs/MonsterStrings.json +++ b/src/main/resources/downfallResources/localization/zhs/MonsterStrings.json @@ -88,5 +88,12 @@ "NAME": "末日匕首", "DIALOG": [ ] + }, + "downfall:VoidCore": { + "MOVES": [ + ], + "NAME": "虚空之核", + "DIALOG": [ + ] } -} \ No newline at end of file +} diff --git a/src/main/resources/downfallResources/localization/zhs/PowerStrings.json b/src/main/resources/downfallResources/localization/zhs/PowerStrings.json index ab4d2528f9..77400bda8f 100644 --- a/src/main/resources/downfallResources/localization/zhs/PowerStrings.json +++ b/src/main/resources/downfallResources/localization/zhs/PowerStrings.json @@ -43,7 +43,10 @@ "downfall:SpotWeakness": { "NAME": "观察弱点", "DESCRIPTIONS": [ - "每当你每打出一张攻击牌,这名敌人将获得 #b"," 点 #y力量 。目前将获得 #b", " 点 #y力量 。" + "若你本回合打出一张攻击,该单位获得 #b", + " 点 #y力量 。", + "你本回合已打出一张攻击,该单位将获得 #b", + " 点 #y力量 。" ] }, "downfall:FearNoEvil": { @@ -54,9 +57,17 @@ ] }, "downfall:PoisonResist": { - "NAME": "抗毒", + "NAME": "拭毒", "DESCRIPTIONS": [ - " #y中毒 将在你回合结束时触发。回合结束时,你每有 [E] ,使用并失去 #b10 层 #y中毒 。" + "每当你造成 #y攻击 伤害,失去 #b", + " 层 #y中毒 。" + ] + }, + "downfall:OnPlayerPoison": { + "NAME": "中毒", + "DESCRIPTIONS": [ + "你的回合结束时,受到 #b", + " 点伤害。" ] }, "downfall:NeowBuff": { @@ -68,7 +79,8 @@ "downfall:WatcherAngryPower": { "NAME": "无遏狂怒", "DESCRIPTIONS": [ - " #y观者 的回合结束时,若其生命不高于 #b50% ,她将永久进入 #y愤怒 。 NL #y愤怒 时造成与受到的伤害增加 #b50% 而非 #b100% 。" + " #y观者 的回合结束时,若其生命不高于 #b50% ,她将永久进入 #y愤怒 。 NL #y愤怒 时造成与受到的伤害增加 #b50% 而非 #b100% 。", + "#y观者 的 #y愤怒 姿态使其造成与受到的伤害增加 #b50% 而非 #b100% 。" ] }, "downfall:NeowUnbridledRage": { @@ -88,9 +100,14 @@ "downfall:WatcherSkillPower": { "NAME": "失谐掠夺者", "DESCRIPTIONS": [ - "每当你打出技能牌时,观者将获得 #b", - " 点 #y临时 #y力量 。", - "每当你打出技能牌时,观者将获得 #y临时 #y力量 。" + "每当你打出一张 #y攻击 , #y观者 获得 #b", + " 层 #y临时敏捷 ,打出 #y技能 时获得 #b", + " 层 #y临时力量 ,打出能力时均获得。", + "", + "若你在一回合打出超过 #b", + " 张牌, #y观者 失去所有负面效果。", + "本回合你已打出 #b", + " 张牌。" ] }, "downfall:WrathNextTurnPower": { @@ -110,7 +127,17 @@ "downfall:WatcherDivinityPower": { "NAME": "消逝的信仰", "DESCRIPTIONS": [ - "每当你打出 #b1 张牌时, #y观者 获得 #b1 层 #p真言 ,你的回合开始时其失去 #b4 层 。 NL 当 #y观者 进入 #y神格 时,她将获得 #b3 点 #y力量 ,而且不会自动退出 #y神格 。" + "每当你打出 #b1 张牌时, #y观者 获得 #b1 层 #p真言 ,你的回合开始时其失去 #b5 层 。 NL 当 #y观者 进入 #y神格 时,她将获得 #b3 点 #y力量 ,而且不会自动退出 #y神格 。" + ] + }, + "downfall:SimpleWatcherDivinityPower": { + "NAME": "消逝的信仰", + "DESCRIPTIONS": [ + "若你在一回合打出 #b6 张牌, #y观者 获得 #b1 层 #y真言 与 #y无实体 。", + " NL 本回合你已打出 #b", + " 张牌。", + " NL (本回合已触发)", + " NL NL #y观者 不会退出 #p神格 ,但造成的伤害仅提升 #b200% 。" ] }, "downfall:NeowFleetingFaith": { @@ -146,7 +173,8 @@ "downfall:SilentPoisonPower": { "NAME": "警告:剧毒", "DESCRIPTIONS": [ - " #y中毒 在你的回合结束时触发且伤害能被 #y格挡 抵消。 NL 战斗开始时获得 #b1 张 #y解毒剂 。" + " #y中毒 在你的回合结束时触发且伤害能被 #y格挡 抵消。", + " #y中毒 在你的回合结束时触发、伤害能被 #y格挡 抵消,且层数不衰减。" ] }, "downfall:NeowHighlyToxic": { @@ -183,7 +211,9 @@ "NAME": "無偏认知", "DESCRIPTIONS": [ "每当你打出 #b1 张 #y能力牌 时, #y故障机器人 获得 #b", - " 点 #y集中 。" + " 点 #y集中 。", + "当故障机器人的#y力量改变时,它的#y集中也会相应改变。", + "" ] }, "downfall:DefectBiasCuriosity": { @@ -419,5 +449,20 @@ "每当你使 #y涅奥 耗尽 #y坚不可摧 时,降低其 #y生命之神 #b", " 层。" ] + }, + "downfall:CultistRevivePower": { + "NAME": "妄奉", + "DESCRIPTIONS": [ + "抵抗一次死亡,并将生命回复至 #b50% 。", + "咔咔!" + ] + }, + "downfall:SilentDelayedWraithPower": { + "NAME": "Fatal Possession", + "DESCRIPTIONS": [ + "#y静默猎手 首次生命值降至 #b0 时,免死并开启 #y幽魂形态 ", + " ,再回复 #b", + " 点生命。" + ] } } diff --git a/src/main/resources/downfallResources/localization/zhs/RelicStrings.json b/src/main/resources/downfallResources/localization/zhs/RelicStrings.json index 8de7197521..5ae7aecbf2 100644 --- a/src/main/resources/downfallResources/localization/zhs/RelicStrings.json +++ b/src/main/resources/downfallResources/localization/zhs/RelicStrings.json @@ -416,7 +416,8 @@ "NAME": "尖锐碎片", "FLAVOR": "曾经破碎的雕像 - 如今打造成了武器。", "DESCRIPTIONS": [ - "在Boss战与精英战中,每当你打出 #b1 张 #y能力牌 时,获得 #b1 点 #y力量 。." + "在Boss战与精英战中,每当你打出 #b1 张 #y能力牌 时,获得 #b", + " 点 #y力量 。." ] }, "downfall:RedIOU": { @@ -552,7 +553,7 @@ "关闭" ] }, - "champ:BustedCrownGagText": { + "downfall:BustedCrownGagText": { "NAME": "破碎金冠", "FLAVOR": "仿制是最真挚的奉承……吗?这看起来不像你的金冠,更像对你的羞辱。", "DESCRIPTIONS": [ diff --git a/src/main/resources/downfallResources/localization/zhs/UIStrings.json b/src/main/resources/downfallResources/localization/zhs/UIStrings.json index 4b71657b35..b2b3975d44 100644 --- a/src/main/resources/downfallResources/localization/zhs/UIStrings.json +++ b/src/main/resources/downfallResources/localization/zhs/UIStrings.json @@ -20,6 +20,24 @@ ] }, "downfall:BustKeyButton": { + "TEXT": [ + "Break Ruby", + "Break Sapphire", + "Break Emerald", + "(Free Action) Spend ", + " Common cards to gain.", + " Uncommon cards to gain.", + " Rare cards to gain.", + "Key shattered!", + "Requires ", + " Souls.", + "(Free Action) Destroy key to ", + " Souls: Choose up to ", + " of ", + " Enhance future key breaks." + ] + }, + "downfall:BustKeyButtonBackupForTranslators": { "TEXT": [ "打碎红宝石", "打碎蓝宝石", @@ -64,7 +82,10 @@ "禁止异蛇使用其他Mod的角色牌池。", "禁用主菜单音乐替换(需要重启游戏)。", "解锁所有崩坠角色的皮肤。", - "为牌附加例如保留、虚无等效果时,使用图标而非文字。" + "为牌附加例如保留、虚无等效果时,使用图标而非文字。", + "The Spellbook highlights the next card Conjure will draw.", + "No Downfall adjustments to original cards & relics (requires game restart)", + "Use Legacy Downfall Bosses (pre-6.0)" ] }, "downfall:EnergyPanelTip": { diff --git a/src/main/resources/downfallResources/localization/zht/RelicStrings.json b/src/main/resources/downfallResources/localization/zht/RelicStrings.json index 6c6f465609..53cf346eb1 100644 --- a/src/main/resources/downfallResources/localization/zht/RelicStrings.json +++ b/src/main/resources/downfallResources/localization/zht/RelicStrings.json @@ -415,7 +415,8 @@ "NAME": "尖銳碎片", "FLAVOR": "曾經破碎的雕像 - 如今打造成了武器。", "DESCRIPTIONS": [ - "每回合開始時,將一張 #y水晶小刀 加入手牌。" + "在Boss战与精英战中,每当你打出 #b1 张 #y能力牌 时,获得 #b", + " 点 #y力量 。." ] }, "downfall:RedIOU": { diff --git a/src/main/resources/downfallResources/localization/zht/UIStrings.json b/src/main/resources/downfallResources/localization/zht/UIStrings.json index 153cd44c43..caf45449e9 100644 --- a/src/main/resources/downfallResources/localization/zht/UIStrings.json +++ b/src/main/resources/downfallResources/localization/zht/UIStrings.json @@ -19,6 +19,24 @@ ] }, "downfall:BustKeyButton": { + "TEXT": [ + "Break Ruby", + "Break Sapphire", + "Break Emerald", + "(Free Action) Spend ", + " Common cards to gain.", + " Uncommon cards to gain.", + " Rare cards to gain.", + "Key shattered!", + "Requires ", + " Souls.", + "(Free Action) Destroy key to ", + " Souls: Choose up to ", + " of ", + " Enhance future key breaks." + ] + }, + "downfall:BustKeyButtonBackupForTranslators": { "TEXT": [ "打碎紅寶石", "打碎藍寶石", @@ -30,7 +48,7 @@ "鑰匙已擊碎!", "需要", "靈魂。", - "(自由行動)摧毀寶石鑰匙來" + "(自由行動)摧毀寶石鑰匙來", ] }, "downfall:WheelSpinButton": { diff --git a/src/main/resources/expansioncontentResources/images/betacards/DoubleAct.png b/src/main/resources/expansioncontentResources/images/betacards/DoubleAct.png index 1364897291..ea6abb3019 100644 Binary files a/src/main/resources/expansioncontentResources/images/betacards/DoubleAct.png 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 index cac4c37624..4ca02a3909 100644 Binary files a/src/main/resources/expansioncontentResources/images/betacards/DoubleAct_p.png and b/src/main/resources/expansioncontentResources/images/betacards/DoubleAct_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/ExploitVulnerability.png b/src/main/resources/expansioncontentResources/images/betacards/ExploitVulnerability.png index 785875032c..9176f514ca 100644 Binary files a/src/main/resources/expansioncontentResources/images/betacards/ExploitVulnerability.png 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 index 4e318f0bb4..1dc53431b3 100644 Binary files a/src/main/resources/expansioncontentResources/images/betacards/ExploitVulnerability_p.png and b/src/main/resources/expansioncontentResources/images/betacards/ExploitVulnerability_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/MajorBeam.png b/src/main/resources/expansioncontentResources/images/betacards/MajorBeam.png index 7bbf844fe0..fd29e0a1e2 100644 Binary files a/src/main/resources/expansioncontentResources/images/betacards/MajorBeam.png 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 index 49b089b146..12ed55aced 100644 Binary files a/src/main/resources/expansioncontentResources/images/betacards/MajorBeam_p.png and b/src/main/resources/expansioncontentResources/images/betacards/MajorBeam_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/Pandemonium.png b/src/main/resources/expansioncontentResources/images/betacards/Pandemonium.png index 41cdd6fa0d..ed1a132741 100644 Binary files a/src/main/resources/expansioncontentResources/images/betacards/Pandemonium.png 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 index 5a8001beb8..487b1e1f05 100644 Binary files a/src/main/resources/expansioncontentResources/images/betacards/Pandemonium_p.png 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 index 7d201c70c6..a701bf323d 100644 Binary files a/src/main/resources/expansioncontentResources/images/betacards/PeekPages.png 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 index 46cae7306c..c25daa1dee 100644 Binary files a/src/main/resources/expansioncontentResources/images/betacards/PeekPages_p.png and b/src/main/resources/expansioncontentResources/images/betacards/PeekPages_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/SuperBloodthirst.png b/src/main/resources/expansioncontentResources/images/betacards/SuperBloodthirst.png index b13432ac33..150e949d53 100644 Binary files a/src/main/resources/expansioncontentResources/images/betacards/SuperBloodthirst.png 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 index 4ebeddbec8..64a1b5d98f 100644 Binary files a/src/main/resources/expansioncontentResources/images/betacards/SuperBloodthirst_p.png and b/src/main/resources/expansioncontentResources/images/betacards/SuperBloodthirst_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/TakeFlight.png b/src/main/resources/expansioncontentResources/images/betacards/TakeFlight.png index e1b09df2ed..4c5e6bbed9 100644 Binary files a/src/main/resources/expansioncontentResources/images/betacards/TakeFlight.png 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 index 2ac775eb28..3fafa76c51 100644 Binary files a/src/main/resources/expansioncontentResources/images/betacards/TakeFlight_p.png and b/src/main/resources/expansioncontentResources/images/betacards/TakeFlight_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/betacards/Virus.png b/src/main/resources/expansioncontentResources/images/betacards/Virus.png index ffce515149..1367179ebe 100644 Binary files a/src/main/resources/expansioncontentResources/images/betacards/Virus.png 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 index aa998df897..826bf43ec0 100644 Binary files a/src/main/resources/expansioncontentResources/images/betacards/Virus_p.png and b/src/main/resources/expansioncontentResources/images/betacards/Virus_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/PeekPages.png b/src/main/resources/expansioncontentResources/images/cards/PeekPages.png index 7d201c70c6..ea9e9b56b0 100644 Binary files a/src/main/resources/expansioncontentResources/images/cards/PeekPages.png 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 index 46cae7306c..bbdbe13e41 100644 Binary files a/src/main/resources/expansioncontentResources/images/cards/PeekPages_p.png and b/src/main/resources/expansioncontentResources/images/cards/PeekPages_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/SuperBloodthirst.png b/src/main/resources/expansioncontentResources/images/cards/SuperBloodthirst.png index b13432ac33..467f32178d 100644 Binary files a/src/main/resources/expansioncontentResources/images/cards/SuperBloodthirst.png 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 index 4ebeddbec8..d40e95a6eb 100644 Binary files a/src/main/resources/expansioncontentResources/images/cards/SuperBloodthirst_p.png and b/src/main/resources/expansioncontentResources/images/cards/SuperBloodthirst_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/cards/Virus.png b/src/main/resources/expansioncontentResources/images/cards/Virus.png index ef7330d9e7..6ee15371ce 100644 Binary files a/src/main/resources/expansioncontentResources/images/cards/Virus.png 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 index b131bc53c2..58aa1f34c8 100644 Binary files a/src/main/resources/expansioncontentResources/images/cards/Virus_p.png and b/src/main/resources/expansioncontentResources/images/cards/Virus_p.png differ diff --git a/src/main/resources/expansioncontentResources/images/powers/Echo32.png b/src/main/resources/expansioncontentResources/images/powers/Echo32.png new file mode 100644 index 0000000000..a36a99a9f9 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/powers/Echo32.png differ diff --git a/src/main/resources/expansioncontentResources/images/powers/Echo84.png b/src/main/resources/expansioncontentResources/images/powers/Echo84.png new file mode 100644 index 0000000000..209bed1b97 Binary files /dev/null and b/src/main/resources/expansioncontentResources/images/powers/Echo84.png differ diff --git a/src/main/resources/expansioncontentResources/localization/deu/CardStrings.json b/src/main/resources/expansioncontentResources/localization/deu/CardStrings.json new file mode 100644 index 0000000000..578b82d42c --- /dev/null +++ b/src/main/resources/expansioncontentResources/localization/deu/CardStrings.json @@ -0,0 +1,221 @@ +{ + "expansioncontent:GuardianWhirl": { + "NAME": "Wächter-Wirbel", + "DESCRIPTION": "Füge ALLEN Gegnern !M! Mal !D! Schaden zu. NL Wenn du mindestens !DM! Block hast, füge den Schaden !M! weitere Male zu.", + "EXTENDED_DESCRIPTION": [ + "Benötigt mehr Block." + ] + }, + "expansioncontent:Hexaburn": { + "NAME": "Hexafeuer", + "DESCRIPTION": "Füge !M! Mal einem zufälligen Gegner !D! Schaden zu. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Füge !M! Mal einem zufälligen Gegner !D! Schaden zu." + }, + "expansioncontent:InvincibleStrength": { + "NAME": "Unverwundbar", + "DESCRIPTION": "Erhalte !M! expansioncontent:Unverwundbar. NL Hattest du bereits expansioncontent:Unverwundbar, dann hält es ein weiteres Mal." + }, + "expansioncontent:HyperBeam": { + "NAME": "Automa-Strahl", + "DESCRIPTION": "Füge ALLEN Gegnern !D! Schaden zu. NL Lege eine Leere auf den Nachziehstapel. NL Erschöpft." + }, + "expansioncontent:LastStand": { + "NAME": "Finales Aufgebot", + "DESCRIPTION": "Entferne alle Debuffs. NL Erhalte !M! Stärke." + }, + "expansioncontent:YouAreMine": { + "NAME": "DU BIST MEIN!!!", + "DESCRIPTION": "Wende !M! Schwach, !M! Verwundbar, und !DM! expansioncontent:Verdammnis auf ALLE Gegner an. NL Erschöpft." + }, + "expansioncontent:AwakenDeath": { + "NAME": "Neugier", + "DESCRIPTION": "Erhalte !M! awakened:Neugier." + }, + "expansioncontent:Chronoboost": { + "NAME": "Zeitbooster", + "DESCRIPTION": "Erhalte !M! Stärke für alle 12 gespielten Karten." + }, + "expansioncontent:PolyBeam": { + "NAME": "Donu-Ring", + "DESCRIPTION": "Erhalte !M! Stärke." + }, + "expansioncontent:DecaShield": { + "NAME": "Deka-Schild", + "DESCRIPTION": "Erhalte !B! expansioncontent:Panzerrüstung." + }, + "expansioncontent:ShapePower": { + "NAME": "Antiker Segen", + "DESCRIPTION": "Erhalte !M! Stärke und !DM! expansioncontent:Panzerrüstung.", + "EXTENDED_DESCRIPTION": [ + "Donus Macht", + "Erhalte !M! Stärke.", + "Dekas Schild", + "Erhalte !M! Panzerrüstung." + ] + }, + "expansioncontent:SuperPrepareCrush": { + "NAME": "Vor-Schmettern", + "DESCRIPTION": "Erhalte im nächsten Zug [E] [E] [E], *ZERSCHMETTERN! und !M! Stärke. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Erhalte im nächsten Zug [E] [E] [E] [E], *ZERSCHMETTERN!+ und !M! Stärke. NL Erschöpft.", + "EXTENDED_DESCRIPTION": [ + "~Schleim~ ~...~ NL #r~ZERSCHMETTERN!!!~" + ] + }, + "expansioncontent:SuperLivingWall": { + "NAME": "Gallertmauer", + "DESCRIPTION": "Erhalte !B! Block. NL Immer wenn dich in diesem Zug ein Gegner angreift, wende !M! expansioncontent:Glibber auf ihn an." + }, + + "expansioncontent:StudyTheSpire": { + "NAME": "Spire-Studien", + "DESCRIPTION": "Erhalte zu Beginn deiner nächsten !M! Züge eine zufällige *Boss Karte. Sie kosten 0.", + "UPGRADE_DESCRIPTION": "Erhalte zu Beginn deiner nächsten !M! Züge eine zufällige *verbesserte *Boss Karte. Sie kosten 0." + }, + "expansioncontent:QuickStudy": { + "NAME": "Schnellstudien", + "DESCRIPTION": "Wähle 1 aus 3 zufälligen *Boss Karten und nimm sie auf die Hand. Sie kostet 0, bis du sie spielst. Erschöpft.", + "UPGRADE_DESCRIPTION": "Wähle 1 aus 3 zufälligen *verbesserten *Boss Karten und nimm sie auf die Hand. Sie kostet 0, bis du sie spielst. Erschöpft.", + "EXTENDED_DESCRIPTION": [ + "Wähle eine Boss Karte." + ] + }, + "expansioncontent:DashGenerateEvil": { + "NAME": "Das pure Böse", + "DESCRIPTION": "Füge ALLEN Gegnern !M! Schaden zu, immer wenn du im Kampf !DM! Debuffs anwendest." + }, + "expansioncontent:KnowingSkullWish": { + "NAME": "Wissender Schädel", + "DESCRIPTION": "Flüchtig. NL Opfere TP um dir *Gold, einen *Trank, oder eine *farblose *Karte zu *wünschen. NL Erschöpft." + }, + "expansioncontent:Antidote": { + "NAME": "Gegengift", + "DESCRIPTION": "Behalten. NL Entferne !M! Gift." + }, + "expansioncontent:AntidoteAsPower": { + "NAME": "Volle Offensive", + "DESCRIPTION": "Behalten. NL Immer wenn du ungeblockten Angriffsschaden zufügst, entferne !M! von deinem Gift." + }, + "expansioncontent:SuperGhostShield": { + "NAME": "Phantomschild", + "DESCRIPTION": "Flüchtig. [#e087a4]Reinkarnation.[] NL [#e087a4]Erhalte[] [#e087a4]!B![] [#e087a4]Block.[] NL [#e087a4]Erhalte[] [#e087a4]!M![] [#e087a4]Verschwimmen.[]", + "EXTENDED_DESCRIPTION": [ + "Erhalte !B! Block." + ] + }, + "expansioncontent:SuperGoopSpray": { + "NAME": "Glibbernebel", + "DESCRIPTION": "Wende !M! expansioncontent:Glibber und !DM! Schwach an.", + "UPGRADE_DESCRIPTION": "Wende !M! expansioncontent:Glibber und !DM! Schwach auf ALLE Gegner an." + }, + "expansioncontent:ChargeUp": { + "NAME": "Panzerreinigung", + "DESCRIPTION": "Reduziere deine Debuffs um !M!. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Reduziere deine Debuffs um !M!." + }, + "expansioncontent:SuperTaunt": { + "NAME": "Fieser Spott", + "DESCRIPTION": "Wende !M! Schwach und !M! Verwundbar an.", + "UPGRADE_DESCRIPTION": "Wende !M! Schwach und !M! Verwundbar auf ALLE Gegner an." + }, + "expansioncontent:Torchfire": { + "NAME": "Buschbrand", + "DESCRIPTION": "Füge !D! Schaden zu. NL Wiederhole das für jeden verschiedenen Debuff des Gegners." + }, + + "expansioncontent:TakeFlight": { + "NAME": "Auffrischen", + "DESCRIPTION": "Heile !M! TP. NL awakened:Chor: Heile stattdessen !DM! TP." + }, + "expansioncontent:BeatOfDeath": { + "NAME": "Pochen des Todes", + "DESCRIPTION": "Immer wenn du eine Karte ausspielst, NL füge ALLEN Gegnern !M! Schaden zu." + }, + "expansioncontent:SuperViciousMockery": { + "NAME": "Bösartiger Hohn", + "DESCRIPTION": "Erhalte !M! *Elan. NL Wende !DM! Schwach an." + }, + "expansioncontent:SuperClobber": { + "NAME": "Prügelschlag", + "DESCRIPTION": "Füge !D! Schaden zu. NL Erhalte soviel Block, wie du ungeblockten Schaden zugefügt hast." + }, + + "expansioncontent:SuperSomberShield": { + "NAME": "Scheiterhaufen", + "DESCRIPTION": "expansioncontent:Opfergabe. NL Erhalte !B! Block. NL Erhalte im nächsten Zug eine Kopie der *geopferten Karte." + }, + + "expansioncontent:SuperWhirlingFlame": { + "NAME": "Wirbelnder Funke", + "DESCRIPTION": "Füge ALLEN Gegnern !D! Schaden zu. NL Lege eine Karte aus dem Abwurfstapel auf den Nachziehstapel." + }, + "expansioncontent:Flail": { + "NAME": "Flegelschlag", + "DESCRIPTION": "Füge ALLEN Gegnern !DM! Mal !D! Schaden zu. NL Erhalte !M! Artefakt. NL Erschöpft.", + "EXTENDED_DESCRIPTION": [ + "dreschend", + "Flegel" + ] + }, + "expansioncontent:SuperBloodthirst": { + "NAME": "Blutlust", + "DESCRIPTION": "Füge !D! Schaden zu. NL Falls tödlich, erhalte einen zufälligen Trank und erschöpfe diese Karte." + }, + "expansioncontent:SuperBodyCrash": { + "NAME": "Bodycheck", + "DESCRIPTION": "Erhalte !B! Block. NL Füge Schaden in Höhe deines aktuellen *Blocks zu.", + "UPGRADE_DESCRIPTION": " NL (Fügt !D! Schaden zu.)" + }, + "expansioncontent:SuperEtherStep": { + "NAME": "Phantomschritt", + "DESCRIPTION": "Füge !D! Schaden zu. NL Erschöpfe eine Karte. NL Ziehe !M! Karte.", + "UPGRADE_DESCRIPTION": "Füge !D! Schaden zu. NL Erschöpfe eine Karte. NL Ziehe !M! Karten." + }, + + "expansioncontent:Virus": { + "NAME": "Trojaner", + "DESCRIPTION": "Erschöpfe bis zu !M! Karten. bronze:Setze pro erschöpfter Karte einen *Schnellen *Strahl *ein. NL Erschöpft." + }, + + "expansioncontent:MajorBeam": { + "NAME": "Schneller Strahl", + "DESCRIPTION": "Füge !D! Schaden zu. NL Ziehe !M! Karte.", + "UPGRADE_DESCRIPTION": "Füge !D! Schaden zu. NL Ziehe !M! Karten." + }, + + "expansioncontent:ManipulateTime": { + "NAME": "Nachplanen", + "DESCRIPTION": "Lege eine Karte aus dem Abwurfstapel unter den Nachziehstapel. Sie kostet 0 bis du sie spielst.", + "UPGRADE_DESCRIPTION": "Lege eine Karte aus dem Abwurfstapel unter den Nachziehstapel. Sie kostet in diesem Kampf 0." + }, + "expansioncontent:Pandemonium": { + "NAME": "Pandämonium", + "DESCRIPTION": "Spiele zu Beginn deines Zuges eine zufällige Karte im Abwurfstapel." + }, + "expansioncontent:Reverie": { + "NAME": "Déjà-vu", + "DESCRIPTION": "Schnappe zu Beginn deines Zuges eine der !M! obersten Karten des Abwurfstapels." + }, + "expansioncontent:ExploitVulnerability": { + "NAME": "Donu-Strahl", + "DESCRIPTION": "Entferne allen Block des Gegners, und erhalte genauso viel Block. Füge 2 Mal !D! Schaden zu." + }, + "expansioncontent:PeekPages": { + "NAME": "Nachlesen", + "DESCRIPTION": "Lege !M! *Einsicht Karten auf den Nachziehstapel. NL Erschöpft." + }, + "expansioncontent:BloodBarrage": { + "NAME": "Blutsalve", + "DESCRIPTION": "Füge !M! Mal !D! Schaden zu. NL Erschöpft." + }, + "expansioncontent:DoubleAct": { + "NAME": "Doppeltes Spiel", + "DESCRIPTION": "Erhalte zu Beginn deines nächsten Zuges die doppelte Menge [E] und ziehe doppelt so viele Karten. NL Erschöpft." + }, + "expansioncontent:BloodySacrifice": { + "NAME": "Blutiges Opfer", + "DESCRIPTION": "Flüchtig. NL Verliere !M! % deiner max. TP. NL Erhalte 1 Ritual. Erschöpft.", + "EXTENDED_DESCRIPTION":[ + " NL (Verliere {amount} max. TP.)" + ] + } +} diff --git a/src/main/resources/expansioncontentResources/localization/deu/CharacterStrings.json b/src/main/resources/expansioncontentResources/localization/deu/CharacterStrings.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/src/main/resources/expansioncontentResources/localization/deu/CharacterStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/expansioncontentResources/localization/deu/DailyModStrings.json b/src/main/resources/expansioncontentResources/localization/deu/DailyModStrings.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/src/main/resources/expansioncontentResources/localization/deu/DailyModStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/expansioncontentResources/localization/deu/EventStrings.json b/src/main/resources/expansioncontentResources/localization/deu/EventStrings.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/src/main/resources/expansioncontentResources/localization/deu/EventStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/expansioncontentResources/localization/deu/KeywordStrings.json b/src/main/resources/expansioncontentResources/localization/deu/KeywordStrings.json new file mode 100644 index 0000000000..32cac7fb5d --- /dev/null +++ b/src/main/resources/expansioncontentResources/localization/deu/KeywordStrings.json @@ -0,0 +1,188 @@ +[ + { + "PROPER_NAME": "Verschwimmen", + "ID": "blur", + "NAMES": [ + "verschwimmen", + "verschwimme", + "verschwommen", + "blur" + ], + "DESCRIPTION": "#yBlock wird zu Beginn deines Zuges nicht entfernt." + }, + { + "PROPER_NAME": "Vibrancy", + "NAMES": [ + "vibrancy" + ], + "DESCRIPTION": "NOT USED DO NOT TL" + }, + { + "PROPER_NAME": "Opulence", + "NAMES": [ + "opulence" + ], + "DESCRIPTION": "NOT USED DO NOT TL" + }, + { + "PROPER_NAME": "Erholen", + "NAMES": [ + "erholen", + "regen" + ], + "DESCRIPTION": "Heile TP in Höhe von #yErholen am Ende deines Zuges, und reduziere dann #yErholen um #b1 [REMOVE_SPACE]." + }, + { + "PROPER_NAME": "Panzerrüstung", + "NAMES": [ + "panzerrüstung", + "plated" + ], + "DESCRIPTION": "Du erhältst #yBlock in Höhe deiner #yPanzerrüstung am Ende des Zuges. Ungeblockter Angriffsschaden reduziert #yPanzerrüstung um #b1" + }, + { + "PROPER_NAME": "Boss", + "NAMES": [ + "boss" + ], + "DESCRIPTION": "Du kannst nur #b1 #yBoss Karte pro Zug spielen." + }, + { + "PROPER_NAME": "Echo", + "ID": "echo", + "NAMES": [ + "echos", + "echo" + ], + "DESCRIPTION": "Echos sind Kopien von Karten, die zusätzlich #yflüchtig sind und #yerschöpfen. Von einem Echo kann kein Echo erstellt werden." + }, + { + "PROPER_NAME": "Exhumieren", + "ID": "exhume", + "NAMES": [ + "exhumieren", + "exhumiere", + "exhumiert", + "exhume" + ], + "DESCRIPTION": "Nimm eine erschöpfte Karte auf die Hand." + }, + { + "PROPER_NAME": "Unverwundbar", + "NAMES": [ + "unverwundbar" + ], + "DESCRIPTION": "Du kannst innerhalb eines Zuges nicht mehr als eine bestimmte Anzahl an TP verlieren. NL Wenn Unverwundbar TP-Verlust verhindert hat, wird es im nächsten Zug erntfernt." + }, + { + "PROPER_NAME": "Fleddern", + "NAMES": [ + "fleddern", + "fleddere", + "gefleddert", + "gefledderte", + "reclaim" + ], + "DESCRIPTION": "Nimm eine erschöpfte Karte in deinen Abwurfstapel." + }, + { + "PROPER_NAME": "Glibber", + "NAMES": [ + "glibber", + "glibbers", + "geglibbert", + "angeglibbert", + "goop" + ], + "DESCRIPTION": "Der Schaden des nächsten Angriffs wird um die Höhe des #yGlibbers erhöht. Der Angriff entfernt den #yGlibber und aktiviert #yKonsum Effekte." + }, + { + "PROPER_NAME": "Gefesselt", + "NAMES": [ + "gefesselt", + "fesseln", + "fessle", + "shackled" + ], + "DESCRIPTION": "Gefesselte Wesen verlieren #yStärke für einen Zug." + }, + { + "PROPER_NAME": "Temporäre TP", + "ID": "temp_hp", + "NAMES": [ + "temporäre tp", + "temporäre_tp", + "temporären tp", + "temporären_tp", + "temp tp", + "temp_tp", + "temp hp", + "temp_hp" + ], + "DESCRIPTION": "Verhindert TP-Verlust bis zum Ende des Kampfes." + }, + { + "PROPER_NAME": "Opfergabe", + "NAMES": [ + "opfergabe", + "pyre" + ], + "DESCRIPTION": "Erfordert als zusätzliche Kosten das #yErschöpfen einer Handkarte." + }, + { + "PROPER_NAME": "Verdammnis", + "NAMES": [ + "verdammnis", + "verdammen", + "verdamme", + "verdammt", + "verdammte", + "doom", + "doomed" + ], + "DESCRIPTION": "Verdammte Wesen verlieren zu Beginn ihrer Züge TP in Höhe der Verdammnis. Sämtliche Verdammnis wird danach entfernt, es sei denn, das Wesen ist #ygeplagt (ist gleichzeitig #ySchwach und #yVerwundbar [REMOVE_SPACE])." + }, + + { + "NAMES": [ + "glibber", + "glibbers", + "goop", + "gooped" + ], + "PROPER_NAME": "Glibber", + "DESCRIPTION": "Der Schaden des nächsten #yAngriffs wird um die Anzahl des #yGlibbers erhöht. Ein #yAngriff entfernt sämtlichen #yGlibber und aktiviert #yKonsum Effekte." + }, + + { + "NAMES": [ + "umwickelt", + "umwickeln", + "constricted" + ], + "PROPER_NAME": "Umwickelt", + "DESCRIPTION": "Umwickelte Wesen erleiden am Ende des Zuges Schaden in Höhe der Umwickelung." + }, + + { + "PROPER_NAME": "Chor", + "NAMES": [ + "chor", + "chant", + "Chant", + "Chants" + ], + "DESCRIPTION": "Chor Effekte werden für den Rest des Kampfes aktiviert, wenn beim Ausspielen die letzte gespielte Karte eine #yMacht war." + }, + { + "PROPER_NAME": "Transformieren", + "ID": "transform", + "NAMES": [ + "transformieren", + "transformiere", + "transformiert", + "transform" + ], + "DESCRIPTION": "#yErschöpfe eine Karte und ersetze sie durch eine zufällige Karte." + } +] diff --git a/src/main/resources/expansioncontentResources/localization/deu/MonsterStrings.json b/src/main/resources/expansioncontentResources/localization/deu/MonsterStrings.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/src/main/resources/expansioncontentResources/localization/deu/MonsterStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/expansioncontentResources/localization/deu/OrbStrings.json b/src/main/resources/expansioncontentResources/localization/deu/OrbStrings.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/src/main/resources/expansioncontentResources/localization/deu/OrbStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/expansioncontentResources/localization/deu/PotionStrings.json b/src/main/resources/expansioncontentResources/localization/deu/PotionStrings.json new file mode 100644 index 0000000000..326c17370e --- /dev/null +++ b/src/main/resources/expansioncontentResources/localization/deu/PotionStrings.json @@ -0,0 +1,10 @@ +{ + "expansioncontent:BossPotion": { + "NAME": "Boss-Trank", + "DESCRIPTIONS": [ + "Wähle #b1 von #b3 zufälligen #yBoss Karten [REMOVE_SPACE]. Nimm sie auf die Hand, sie kostet diesen Zug #b0 [REMOVE_SPACE].", + "Wähle #b1 von #b3 zufälligen #yBoss Karten und nimm #b", + " Kopien auf die Hand, sie kosten diesen Zug #b0 [REMOVE_SPACE]." + ] + } +} \ No newline at end of file diff --git a/src/main/resources/expansioncontentResources/localization/deu/PowerStrings.json b/src/main/resources/expansioncontentResources/localization/deu/PowerStrings.json new file mode 100644 index 0000000000..b89af92ce1 --- /dev/null +++ b/src/main/resources/expansioncontentResources/localization/deu/PowerStrings.json @@ -0,0 +1,139 @@ +{ + "expansioncontent:StudyTheSpirePower": { + "NAME": "Spire-Studien", + "DESCRIPTIONS": [ + "Erhalte zu Beginn deines nächsten Zuges eine zufällige #yBoss Karte. NL Sie kostet #b0 bis sie gespielt wurde.", + "Erhalte zu Beginn deiner nächsten #b", + " Züge eine zufällige #yBoss Karte. NL Sie kosten #b0 bis sie gespielt wurden.", + "Erhalte zu Beginn deines nächsten Zuges eine zufällige #yverbesserte #yBoss Karte. NL Sie kostet #b0 bis sie gespielt wurde.", + "Erhalte zu Beginn deiner nächsten #b", + " Züge eine zufällige #yverbesserte #yBoss Karte. NL Sie kosten #b0 bis sie gespielt wurden." + ] + }, + "expansioncontent:AwakenedOnePower": { + "NAME": "Finsteres Ritual", + "DESCRIPTIONS": [ + "Erhalte #b", + " #yStärke wenn der Gegner in seinem Zug nicht angreift." + ] + }, + "expansioncontent:AwakenDeathPower": { + "NAME": "Wiedererwachen", + "DESCRIPTIONS": [ + "Anstatt zu sterben, heile #b", + " TP und entferne diesen Effekt." + ] + }, + "expansioncontent:ChronoBoostPower": { + "NAME": "Zeitbooster", + "DESCRIPTIONS": [ + "Nach dem Ausspielen von #b", + " Karten erhältst du #b", + " #yStärke [REMOVE_SPACE]." + ] + }, + "expansioncontent:ChronoBoostPlusPower": { + "NAME": "Zeitbooster+", + "DESCRIPTIONS": [ + "Nach dem Ausspielen von #b", + " Karten erhältst du #b", + " #yStärke [REMOVE_SPACE]." + ] + }, + "expansioncontent:DeEnergizedPower": { + "NAME": "Energieentladen", + "DESCRIPTIONS": [ + "Du verlierst #b", + " [E] im nächsten Zug." + ] + }, + "expansioncontent:PolyBeamAgainPower": { + "NAME": "Potenz", + "DESCRIPTIONS": [ + "Zu Beginn deines nächsten Zuges wird #yPoly-Strahl gespielt.", + "Zu Beginn deiner nächsten #b", + " Züge wird #yPoly-Strahl gespielt." + ] + }, + "expansioncontent:PolyBeamAgainPowerUpgraded": { + "NAME": "Potenz+", + "DESCRIPTIONS": [ + "Zu Beginn deines nächsten Zuges wird #yPoly-Strahl+ gespielt.", + "Zu Beginn deiner nächsten #b", + " Züge wird #yPoly-Strahl+ gespielt." + ] + }, + "expansioncontent:AddCopyPower": { + "NAME": "Vorrätige Karte", + "DESCRIPTIONS": [ + "Nimm zu Beginn deines nächsten Zuges ", + " auf die Hand." + ] + }, + "expansioncontent:AddSameInstancePower": { + "NAME": "Vorrätige Karte", + "DESCRIPTIONS": [ + "Nimm zu Beginn deines nächsten Zuges ", + " auf die Hand." + ] + }, + "expansioncontent:NextTurnExhumePower": { + "NAME": "Verspätetes Exhumieren", + "DESCRIPTIONS": [ + "Exhumiere ", + " zu Beginn deines nächsten Zuges." + ] + }, + "expansioncontent:PretendHexWheelPower": { + "NAME": "Hexafeuer", + "DESCRIPTIONS": [ + "Füge nach #b", + " Zügen #b6 Mal einem zufälligen Gegner #b", + "Füge am Ende des Zuges #b6 Mal einem zufälligen Gegner #b", + " Schaden zu." + ] + }, + "expansioncontent:BeatOfDeathP": { + "NAME": "Pochen des Todes", + "DESCRIPTIONS": [ + "Immer wenn du eine Karte ausspielst, verursachst du #b", + " Schaden an ALLEN Gegnern." + ] + }, + "expansioncontent:PandemoniumPower":{ + "NAME": "Pandämonium", + "DESCRIPTIONS": [ + "Spiele zu Beginn deines Zuges eine zufällige Karte deines Abwurfstapels.", + "Spiele zu Beginn deines Zuges #b", + " zufällige Karten deines Abwurfstapels." + ] + }, + "expansioncontent:EvilWithinPower":{ + "NAME": "Das pure Böse", + "DESCRIPTIONS": [ + "Füge ALLEN Gegnern #b", + " Schaden zu, nachdem du #b", + " weitere Debuffs angewendet hast.", + " weiteren Debuff angewendet hast." + ] + }, + "expansioncontent:ReveriePower":{ + "NAME": "Déjà-vu", + "DESCRIPTIONS": [ + "Schnappe zu Beginn deines Zuges die oberste Karte des Abwurfstapels.", + "Schnappe zu Beginn deines Zuges eine der obersten #b", + " Karten des Abwurfstapels.", + "Wähle eine Karte, die du auf die Hand nimmst." + ] +}, + "expansioncontent:VexVinciblePower": { + "NAME": "Unverwundbar", + "DESCRIPTIONS": [ + "Verhindert jeglichen TP-Verlust, der innerhalb eines Zuges über #b", + " hinausgeht. Entferne diesen Effekt am Ende des Zuges, wenn er TP-Verlust verhindert hat.", + "Verhindert jeglichen TP-Verlust, der innerhalb eines Zuges über #b", + " hinausgeht. Entferne 1 #yUnverwundbar am Ende des Zuges, wenn es TP-Verlust verhindert hat (noch #b", + " übrig)." + ] + } +} diff --git a/src/main/resources/expansioncontentResources/localization/deu/RelicStrings.json b/src/main/resources/expansioncontentResources/localization/deu/RelicStrings.json new file mode 100644 index 0000000000..0bd8cc47e4 --- /dev/null +++ b/src/main/resources/expansioncontentResources/localization/deu/RelicStrings.json @@ -0,0 +1,9 @@ +{ + "expansioncontent:StudyCardRelic": { + "NAME": "Winzige Melone", + "FLAVOR": "Wer den Hut kontrolliert, kontrolliert den Spire.", + "DESCRIPTIONS": [ + "Wähle zu Beginn jedes Kampfes #b1 von #b3 zufälligen Boss Karten und nimm diese auf die Hand." + ] + } +} diff --git a/src/main/resources/expansioncontentResources/localization/deu/RunModStrings.json b/src/main/resources/expansioncontentResources/localization/deu/RunModStrings.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/src/main/resources/expansioncontentResources/localization/deu/RunModStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/expansioncontentResources/localization/deu/UIStrings.json b/src/main/resources/expansioncontentResources/localization/deu/UIStrings.json new file mode 100644 index 0000000000..6be677b96a --- /dev/null +++ b/src/main/resources/expansioncontentResources/localization/deu/UIStrings.json @@ -0,0 +1,58 @@ +{ + "downfall:PropertiesMod": { + "TEXT": [ + "Angewendete Eigenschaften.", + "Zusätzliche Eigenschaften: ", + "Weitere Eigenschaften für diesen Zug: ", + " NL Zusätzlich in diesem Zug: ", + ", ", + ".", + "#y", + "Echo", + "Unspielbar", + "Flüchtig", + "Behalten", + "Erschöpft", + " ", + "NL ", + "Echo: " + ] + }, + "downfall:EtherealMod": { + "TEXT": [ + "Flüchtig. NL " + ] + }, + "downfall:ExhaustMod": { + "TEXT": [ + " NL Erschöpft." + ] + }, + "downfall:InnateMod": { + "TEXT": [ + "Angeboren. NL " + ] + }, + "downfall:RetainCardMod": { + "TEXT": [ + "Behalten. NL " + ] + }, + "downfall:UnplayableMod": { + "TEXT": [ + "Unspielbar. NL ", + "Diese Karte kann nicht gespielt werden.", + "Diese Karte kann in diesem Zug nicht gespielt werden." + ] + }, + "expansioncontent:CannotUseBossCardMessage": { + "TEXT": [ + "Ich habe in diesem Zug bereits eine Boss Karte gespielt!" + ] + }, + "expansioncontent:BossCardTagName": { + "TEXT": [ + "Boss" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/expansioncontentResources/localization/eng/CardStrings.json b/src/main/resources/expansioncontentResources/localization/eng/CardStrings.json index 465ae3f19a..ede208da83 100644 --- a/src/main/resources/expansioncontentResources/localization/eng/CardStrings.json +++ b/src/main/resources/expansioncontentResources/localization/eng/CardStrings.json @@ -20,11 +20,11 @@ "DESCRIPTION": "Deal !D! damage to ALL enemies. NL Place a *Void on top of your draw pile. NL Exhaust." }, "expansioncontent:LastStand": { - "NAME": "Last Stand", + "NAME": "Final Stand", "DESCRIPTION": "Remove all Debuffs. NL Gain !M! Strength." }, "expansioncontent:YouAreMine": { - "NAME": "YOU ARE MINE!", + "NAME": "YOU ARE MINE!!!", "DESCRIPTION": "Apply !M! Weak, !M! Vulnerable, and !DM! expansioncontent:Doom to ALL enemies. NL Exhaust." }, "expansioncontent:AwakenDeath": { @@ -62,7 +62,7 @@ ] }, "expansioncontent:SuperLivingWall": { - "NAME": "Living Wall", + "NAME": "Gelatinous Wall", "DESCRIPTION": "Gain !B! Block. NL Apply !M! expansioncontent:Goop to attackers this turn." }, @@ -91,20 +91,24 @@ "NAME": "Antidote", "DESCRIPTION": "Retain. NL Lose !M! Poison." }, + "expansioncontent:AntidoteAsPower": { + "NAME": "Can't Slow Down", + "DESCRIPTION": "Retain. NL Whenever you deal unblocked Attack damage, lose !M! Poison." + }, "expansioncontent:SuperGhostShield": { - "NAME": "Ghost Shield", + "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 Spray", + "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": "Resilient Plate", + "NAME": "Cleansing Plate", "DESCRIPTION": "Reduce each of your debuffs by !M!. NL Exhaust.", "UPGRADE_DESCRIPTION": "Reduce each of your debuffs by !M!." }, @@ -120,32 +124,32 @@ "expansioncontent:TakeFlight": { "NAME": "Revitalize", - "DESCRIPTION": "Gain !M! expansioncontent:Regen. NL expansioncontent:Chant: Gain !DM! *Regen instead." + "DESCRIPTION": "Heal !M! HP. NL awakened:Chant: Heal !DM! HP instead." }, "expansioncontent:BeatOfDeath": { "NAME": "Beat Of Death", "DESCRIPTION": "Whenever you play a card, deal !M! damage to ALL enemies." }, "expansioncontent:SuperViciousMockery": { - "NAME": "Vicious Mockery", + "NAME": "Mockery", "DESCRIPTION": "Gain !M! Vigor. NL Apply !DM! Weak." }, "expansioncontent:SuperClobber": { - "NAME": "Clobbering Strike", + "NAME": "Walloping Strike", "DESCRIPTION": "Deal !D! damage. NL Gain Block equal to unblocked damage dealt." }, "expansioncontent:SuperSomberShield": { - "NAME": "Somber Shield", + "NAME": "Greenpyre Shield", "DESCRIPTION": "expansioncontent:Pyre. NL Gain !B! Block. NL Next turn, gain a copy of the *Exhausted card." }, "expansioncontent:SuperWhirlingFlame": { - "NAME": "Whirling Flame", + "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": "Flail", + "NAME": "Flailing Strikes", "DESCRIPTION": "Deal !D! damage to ALL enemies !DM! times. NL Gain !M! Artifact. NL Exhaust.", "EXTENDED_DESCRIPTION": [ "flailing", @@ -153,22 +157,22 @@ ] }, "expansioncontent:SuperBloodthirst": { - "NAME": "Bloodthirst", + "NAME": "Bloodlust", "DESCRIPTION": "Deal !D! damage. NL If Fatal, obtain a random potion and Exhaust this card." }, "expansioncontent:SuperBodyCrash": { - "NAME": "Body Crash", + "NAME": "Body Smash", "DESCRIPTION": "Gain !B! Block. NL Deal damage equal to your Block.", "UPGRADE_DESCRIPTION": " NL (Deals !D! damage.)" }, "expansioncontent:SuperEtherStep": { - "NAME": "Ether Step", - "DESCRIPTION": "Exhaust 1 card. NL Draw !M! card. NL Deal !D! damage.", - "UPGRADE_DESCRIPTION": "Exhaust 1 card. NL Draw !M! cards. NL Deal !D! damage." + "NAME": "Specter Step", + "DESCRIPTION": "Deal !D! damage. NL Exhaust a card. NL Draw !M! card.", + "UPGRADE_DESCRIPTION": "Deal !D! damage. NL Exhaust a card. NL Draw !M! cards." }, "expansioncontent:Virus": { - "NAME": "Virus", + "NAME": "404 Virus", "DESCRIPTION": "Exhaust up to !M! cards, shuffle a *Major *Beam into the draw pile for each card exhausted. NL Exhaust." }, @@ -197,7 +201,7 @@ }, "expansioncontent:PeekPages": { "NAME": "Peek Pages", - "DESCRIPTION": "Shuffle !M! *Insights into your draw pile. NL Exhaust." + "DESCRIPTION": "Place !M! *Insights on top of your draw pile. NL Exhaust." }, "expansioncontent:BloodBarrage": { "NAME": "Blood Barrage", diff --git a/src/main/resources/expansioncontentResources/localization/eng/KeywordStrings.json b/src/main/resources/expansioncontentResources/localization/eng/KeywordStrings.json index 1c5b398ed0..2b85d14ad7 100644 --- a/src/main/resources/expansioncontentResources/localization/eng/KeywordStrings.json +++ b/src/main/resources/expansioncontentResources/localization/eng/KeywordStrings.json @@ -33,7 +33,7 @@ "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]." + "DESCRIPTION": "At the end of your turn, gain #yBlock equal to your #yPlated #yArmor [REMOVE_SPACE]. Taking unblocked attack damage reduces #yPlated #yArmor by #b1." }, { "PROPER_NAME": "Boss", @@ -121,13 +121,12 @@ }, { - "PROPER_NAME": "Chant", "NAMES": [ - "chant", - "Chant", - "Chants" + "constricted" ], - "DESCRIPTION": "Chant effects on a card activate during play if you played a Power while it was in hand."}, + "PROPER_NAME": "Constricted", + "DESCRIPTION": "Creatures with Constricted take damage at the end of their turn." + }, { "PROPER_NAME": "Transform", "ID": "transform", diff --git a/src/main/resources/expansioncontentResources/localization/eng/RelicStrings.json b/src/main/resources/expansioncontentResources/localization/eng/RelicStrings.json index 4a4d63075f..fb12c98fc5 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 [REMOVE_SPACE]." + "At the start of each combat, choose #b1 of #b3 random Boss cards and add the chosen card into your hand." ] } } diff --git a/src/main/resources/expansioncontentResources/localization/fra/CardStrings.json b/src/main/resources/expansioncontentResources/localization/fra/CardStrings.json index 3c1a3fab48..c5abf9d786 100644 --- a/src/main/resources/expansioncontentResources/localization/fra/CardStrings.json +++ b/src/main/resources/expansioncontentResources/localization/fra/CardStrings.json @@ -19,12 +19,12 @@ "DESCRIPTION": "NL Infligez !D! dégâts à TOUS les ennemis. NL Au début de votre prochain tour, perdez [E]. NL Épuisement." }, "expansioncontent:LastStand": { - "NAME": "Last Stand", + "NAME": "Vent final", "DESCRIPTION": "Retirez tous vos Débuffs. NL Gagnez 1 de Force. NL Si vous êtes en-dessous de la moitié de vos PV, gagnez 2 de Force.", "UPGRADE_DESCRIPTION": "Retirez tous vos Débuffs. NL Gagnez 1 de Force. NL Si vous êtes en-dessous de la moitié de vos PV, soignez-vous de !M! PV et gagnez 2 de Force." }, "expansioncontent:YouAreMine": { - "NAME": "VOUS ÊTES À MOI!", + "NAME": "VOUS ÊTES À MOI !!!", "DESCRIPTION": "Retirez TOUTE l'Armure de l'ennemi. NL Appliquez !M! de Faiblesse et de Vulnérabilité à TOUS les ennemis. NL Épuisement." }, "expansioncontent:AwakenDeath": { @@ -56,8 +56,15 @@ }, "expansioncontent:PrepareCrush": { "NAME": "Prépration du Crush", - "DESCRIPTION": "Gagnez !B! d'Armure. NL Au prochain tour, obtenez [E] [E] [E] et *SLIME *CRUSH. NL Épuisement.", - "UPGRADE_DESCRIPTION": "Gagnez !B! d'Armure. NL Au prochain tour, obtenez [E] [E] [E] et *SLIME *CRUSH+. NL Épuisement." + "DESCRIPTION": "Au prochain tour, obtenez *SLIME *CRUSH, [E] [E] [E] et !M! de Force. NL Épuisement.", + "UPGRADE_DESCRIPTION": "Au prochain tour, obtenez *SLIME *CRUSH+, [E] [E] [E] [E] et !M! de Force. NL Épuisement.", + "EXTENDED_DESCRIPTION": [ + "~Slime...~ NL #r~CRUSH!!!~" + ] + }, + "expansioncontent:SuperLivingWall": { + "NAME": "Mur gélatineux", + "DESCRIPTION": "Gagnez !B! d'Armure. NL Appliquez !M! de expansioncontent:Goop aux attaquants ce tour." }, "expansioncontent:StudyTheSpire": { "NAME": "Étude de la tour", @@ -74,15 +81,141 @@ }, "expansioncontent:DashGenerateEvil": { "NAME": "Mal intérieur", - "DESCRIPTION": "Infligez !D! dégâts. NL Ajoutez une carte *Boss aléatoire dans votre main. Elle coûte 0 jusqu'à ce qu'elle soit jouée. NL Épuisement.", - "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. NL Ajoutez une carte *Boss aléatoire Améliorée dans votre main. Elle coûte 0 jusqu'à ce qu'elle soit jouée. NL Épuisement." + "DESCRIPTION": "Lorsque vous appliquez !DM! debuffs, infligez !M! dégâts à TOUS les ennemis." }, "expansioncontent:KnowingSkullWish": { "NAME": "Crâne savant", - "DESCRIPTION": "Éthérée. NL Dépensez des PV pour obtenir des Âmes, du Succès ou un Remontant. NL Épuisement." + "DESCRIPTION": "Éthérée. NL Dépensez des PV pour *Souhaiter *des *Âmes, des *Potions ou une carte *Incolore. NL Épuisement." }, "expansioncontent:Antidote": { "NAME": "Antidote", "DESCRIPTION": "Perdez tout votre Poison." + }, + "expansioncontent:AntidoteAsPower": { + "NAME": "Impossible de ralentir", + "DESCRIPTION": "Retenue. NL Lorsque vous infligez des dégâts d'Attaque non-bloqués, perdez !M! de Poison." + }, + "expansioncontent:SuperGhostShield": { + "NAME": "Bouclier spectral", + "DESCRIPTION": "Ethérée. [#e087a4]Après-vie.[] NL [#e087a4]Gagnez[] [#e087a4]!B![] [#e087a4]d'Armure.[] NL [#e087a4]Gagnez[] [#e087a4]!M![] [#e087a4]de [#e087a4]Flou.[]", + "EXTENDED_DESCRIPTION": [ + "Gagnez !B! d'Armure." + ] + }, + "expansioncontent:SuperGoopSpray": { + "NAME": "Projection gluante", + "DESCRIPTION": "Appliqez !M! de expansioncontent:Goop et !DM! de Faiblesse.", + "UPGRADE_DESCRIPTION": "Appliquez !M! de expansioncontent:Goop et !DM! de Faiblesse à TOUS les ennemis." + }, + "expansioncontent:ChargeUp": { + "NAME": "Plaque purificatrice", + "DESCRIPTION": "Réduisez chacun de vos debuffs de !M!. NL Épuisement.", + "UPGRADE_DESCRIPTION": "Réduisez chacun de vos debuffs de !M!." + }, + "expansioncontent:SuperTaunt": { + "NAME": "Provoc", + "DESCRIPTION": "Appliquez !M! de Faiblesse et de Vulnérabilité.", + "UPGRADE_DESCRIPTION": "Appliquez !M! de Faiblesse et de Vulnérabilité à TOUS les ennemis." + }, + "expansioncontent:Torchfire": { + "NAME": "Feu sauvage", + "DESCRIPTION": "Infligez !D! dégâts. NL Répétez pour chaque debuff unique sur l'ennemi." + }, + + "expansioncontent:TakeFlight": { + "NAME": "Revitalisation", + "DESCRIPTION": "Soignez-vous de !M! PV. NL awakened:Chant: Soignez-vous de !DM! PV à la place." + }, + "expansioncontent:BeatOfDeath": { + "NAME": "Pulsation de la Mort", + "DESCRIPTION": "Whenever you play a card, deal !M! damage to ALL enemies." + }, + "expansioncontent:SuperViciousMockery": { + "NAME": "Moquerie", + "DESCRIPTION": "Gagnez !M! de Vigueur. NL Appliquez !DM! de Faiblesse." + }, + "expansioncontent:SuperClobber": { + "NAME": "Frappe écrasante", + "DESCRIPTION": "Infligez !D! dégâts. NL Gagnez autant d'Armure que de dégâts non-bloqués." + }, + + "expansioncontent:SuperSomberShield": { + "NAME": "Bouclier du Brasier Vert", + "DESCRIPTION": "expansioncontent:Bûcher. NL Gagnez !B! d'Armure. NL Au prochain tour, obtenez une copie de la carte *Épuisée." + }, + + "expansioncontent:SuperWhirlingFlame": { + "NAME": "Braise tourbillonnante", + "DESCRIPTION": "Infligez !D! dégâts à TOUS les ennemis. NL Mettez une carte de votre défausse sur le haut de votre pioche." + }, + "expansioncontent:Flail": { + "NAME": "Frappes du Fléau", + "DESCRIPTION": "Infligez !D! dégâts à TOUS les ennemis !DM! fois. NL Gagnez !M! d'Artéfact. NL Épuisement.", + "EXTENDED_DESCRIPTION": [ + "flailing", + "Flail" + ] + }, + "expansioncontent:SuperBloodthirst": { + "NAME": "Soif de sang", + "DESCRIPTION": "Infligez !D! dégâts. NL Si Fatal, obtenez une potion aléatoire et Épuisez cette carte." + }, + "expansioncontent:SuperBodyCrash": { + "NAME": "Body Smash", + "DESCRIPTION": "Gagnez !B! d'Armure. NL Infligez autant de dégâts que votre Armure.", + "UPGRADE_DESCRIPTION": " NL (Inflige !D! dégâts.)" + }, + "expansioncontent:SuperEtherStep": { + "NAME": "Pas spectral", + "DESCRIPTION": "Infligez !D! dégâts. NL Épuisez 1 carte. NL Piochez !M! carte.", + "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. NL Épuisez 1 carte. NL Piochez !M! cartes. " + }, + + "expansioncontent:Virus": { + "NAME": "Virus 404", + "DESCRIPTION": "Épuisez jusqu'à !M! cartes, mélangez un *Rayon *majeur dans la pioche pour chaque carte épuisée. NL Épuisement." + }, + + "expansioncontent:MajorBeam": { + "NAME": "Rayon majeur", + "DESCRIPTION": "Infligez !D! dégâts. NL Piochez !M! carte.", + "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. NL Piochez !M! cartes." + }, + + "expansioncontent:ManipulateTime": { + "NAME": "Rétrospective", + "DESCRIPTION": "Placez une carte de votre défausse en bas de votre pioche. Elle coûte 0 jusqu'à ce qu'elle soit jouée.", + "UPGRADE_DESCRIPTION": "Placez une carte de votre défausse en bas de votre pioche. Elle coûte 0 ce combat." + }, + "expansioncontent:Pandemonium": { + "NAME": "Pandémonium", + "DESCRIPTION": "Au début de votre tour, jouez une carte au hasard dans votre défausse." + }, + "expansioncontent:Reverie": { + "NAME": "Rêverie", + "DESCRIPTION": "Au début de votre tour, mettez dans votre main l'une des !M! cartes du dessus de votre défausse." + }, + "expansioncontent:ExploitVulnerability": { + "NAME": "Rayon Donu", + "DESCRIPTION": "Retirez toute l'Armure de l'ennemi, puis gagnez autant d'Armure. NL Infligez !D! dégâts deux fois." + }, + "expansioncontent:PeekPages": { + "NAME": "Feuilleter les pages", + "DESCRIPTION": "Placez !M! *Perspicacités en haut de votre pioche. NL Épuisement." + }, + "expansioncontent:BloodBarrage": { + "NAME": "Barrage de sang", + "DESCRIPTION": "Infligez !D! dégâts !M! fois. NL Épuisement." + }, + "expansioncontent:DoubleAct": { + "NAME": "Double acte", + "DESCRIPTION": "Au début de votre prochain tour, piochez des cartes et gagnez [E] une fois de plus. NL Épuisement." + }, + "expansioncontent:BloodySacrifice": { + "NAME": "Sacrifice sanglant", + "DESCRIPTION": "Éthérée. NL Perdez !M! % de vos PV Max. NL Gagnez 1 Rituel. Épuisement.", + "EXTENDED_DESCRIPTION":[ + " NL (Perdez {amount} PV max. )" + ] } } diff --git a/src/main/resources/expansioncontentResources/localization/fra/KeywordStrings.json b/src/main/resources/expansioncontentResources/localization/fra/KeywordStrings.json index b0dc791159..cb5fa65490 100644 --- a/src/main/resources/expansioncontentResources/localization/fra/KeywordStrings.json +++ b/src/main/resources/expansioncontentResources/localization/fra/KeywordStrings.json @@ -1,20 +1,59 @@ [ + { + "PROPER_NAME": "Flou", + "ID": "blur", + "NAMES": [ + "blur", + "flou" + ], + "DESCRIPTION": "#yL'Armure n'est pas retirée lors de votre prochain tour." + }, + { + "PROPER_NAME": "Vibrancy", + "NAMES": [ + "vibrancy" + ], + "DESCRIPTION": "NOT USED DO NOT TL" + }, + { + "PROPER_NAME": "Opulence", + "NAMES": [ + "opulence" + ], + "DESCRIPTION": "NOT USED DO NOT TL" + }, + { + "PROPER_NAME": "Régénération", + "NAMES": [ + "regen", + "régénération" + ], + "DESCRIPTION": "À la fin de votre tour, soignez-vous d'autant de PV que de votre #yRégénération puis réduisez la #yRégénération de #b1 [REMOVE_SPACE]." + }, + { + "PROPER_NAME": "Armure Plaquée", + "NAMES": [ + "Plaquée", + "plated" + ], + "DESCRIPTION": "À la fin de votre tour, gagnez de l'Armure égale à votre #yArmure #yPlaquée [REMOVE_SPACE]. Prendre des dégâts d'attaque non-bloqués réduit #yl'Armure #yPlaquée de #b1." + }, { "PROPER_NAME": "Boss", "NAMES": [ - "boss", "boss" ], "DESCRIPTION": "Vous ne pouvez jouer #bqu'1 carte de #yBoss pendant votre tour." }, { - "PROPER_NAME": "Invincibilité", + "PROPER_NAME": "Echo", + "ID": "echo", "NAMES": [ - "d'invincibilité", - "invincibilité", - "invincible" + "echo", + "écho", + "échos" ], - "DESCRIPTION": "Vous ne pouvez pas perdre plus d'une certaine quantité de PV pendant un tour. NL À la fin de n'importe quel tour dans lequel Invincibilité a empêché la perte de PV, retirez cet effet" + "DESCRIPTION": "Ajoutez une copie d'une carte dans votre main, elle est #yÉthérée et #ys'Épuise [REMOVE_SPACE]. NL Vous ne pouvez pas obtenir des Échos d'Échos." }, { "PROPER_NAME": "Exhumation", @@ -25,6 +64,15 @@ ], "DESCRIPTION": "Choisissez une carte Épuisée et mettez-la dans votre main." }, + { + "PROPER_NAME": "Invincibilité", + "NAMES": [ + "d'invincibilité", + "invincibilité", + "invincible" + ], + "DESCRIPTION": "Vous ne pouvez pas perdre plus d'une certaine quantité de PV pendant un tour. NL À la fin de n'importe quel tour dans lequel Invincibilité a empêché la perte de PV, retirez cet effet" + }, { "PROPER_NAME": "Recyclage", "NAMES": [ @@ -33,6 +81,13 @@ ], "DESCRIPTION": "Choisissez une carte Épuisée et mettez-la dans votre défausse." }, + { + "PROPER_NAME": "Goop", + "NAMES": [ + "goop" + ], + "DESCRIPTION": "La prochaine attaque inflige #b1 dégât de plus par #yGoop [REMOVE_SPACE], retirant alors tout le #yGoop et déclenchant les effets de #yConsumation." + }, { "PROPER_NAME": "Enchaîné", "NAMES": [ @@ -42,12 +97,67 @@ "DESCRIPTION": "Les créatures enchaînées perdent de la #yForce pour un tour." }, { - "PROPER_NAME": "PV temporaire", + "PROPER_NAME": "PV temporaires", "ID": "temp_hp", "NAMES": [ - "pv_temporaire", - "temp_hp" + "pv temporaires", + "pv_temporaires" + ], + "DESCRIPTION": "Jusqu'à la fin du combat, empêche les dégâts sur les PV" + }, + { + "PROPER_NAME": "Bûcher", + "NAMES": [ + "bûcher", + "pyre" + ], + "DESCRIPTION": "Nécessite l'épuisement d'une carte en main en plus de payer son coût en énergie." + }, + { + "PROPER_NAME": "Condamnation", + "NAMES": [ + "condamnation", + "condamnées", + "doom", + "doomed" + ], + "DESCRIPTION": "Les créatures condamnées perdent des PV au début de leur tour, puis la Condamnation est retirée #bsauf si la créature est #yAffligée (a à la fois #yFaible et #yVulnérable [REMOVE_SPACE])." + }, + + { + "NAMES": [ + "goop", + "goopées", + "gooped" + ], + "PROPER_NAME": "Goop", + "DESCRIPTION": "La prochaine attaque inflige #b1 dégât de plus par #yGoop [REMOVE_SPACE], retirant alors tout le #yGoop et déclenchant les effets de #yConsumation." + }, + + { + "NAMES": [ + "constriction", + "constricted" + ], + "PROPER_NAME": "Constricton", + "DESCRIPTION": "Les créatures contraintes subissent des dégâts à la fin de leur tour." + }, + + { + "PROPER_NAME": "Chant", + "NAMES": [ + "chant", + "Chant", + "Chants" + ], + "DESCRIPTION": "Les effets Chant sur une carte s'activent pendant le jeu si vous avez joué une carte Pouvoir alors qu'elle était dans votre main."}, + { + "PROPER_NAME": "Transformation", + "ID": "transform", + "NAMES": [ + "transformez", + "transform" ], - "DESCRIPTION": "jusqu'a la fin du combat, prevois les perte de PV." + "DESCRIPTION": "#yÉpuisez une carte, la remplaçant avec une carte différente." } -] \ No newline at end of file +] diff --git a/src/main/resources/expansioncontentResources/localization/fra/PowerStrings.json b/src/main/resources/expansioncontentResources/localization/fra/PowerStrings.json index 26ffcc2cde..ff6946033c 100644 --- a/src/main/resources/expansioncontentResources/localization/fra/PowerStrings.json +++ b/src/main/resources/expansioncontentResources/localization/fra/PowerStrings.json @@ -92,6 +92,39 @@ "A la fin de votre tour, infligez #b", " dégâts à un ennemi aléatoire #b6 fois." ] + }, + "expansioncontent:BeatOfDeathP": { + "NAME": "Pulsation de la mort", + "DESCRIPTIONS": [ + "Lorsque vous jouez une carte, infligez #b", + " dégâts à TOUS les ennemis." + ] + }, + "expansioncontent:PandemoniumPower":{ + "NAME": "Pandémonium", + "DESCRIPTIONS": [ + "Au début de votre tour, jouez une carte aléatoire de votre défausse.", + "Au début de votre tour, jouez #b", + " cartes aléatoires de votre défausse." + ] + }, + "expansioncontent:EvilWithinPower":{ + "NAME": "Mal intérieur", + "DESCRIPTIONS": [ + "Infligez #b", + " dégâts à TOUS les ennemis après avoir appliqué #b", + " debuffs supplémentaires.", + " debuff supplémentaire." + ] + }, + "expansioncontent:ReveriePower":{ + "NAME": "Rêverie", + "DESCRIPTIONS": [ + "Au début de votre tour, regardez la carte du dessus de votre défausse et ajoutez-la à votre main.", + "Au début de votre tour, regardez les #b", + " cartes du dessus de votre défausse et choisissez-en une à ajouter à votre main.", + "Choisissez une carte à ajouter à votre main." + ] }, "expansioncontent:VexVinciblePower": { "NAME": "Invincibilité", @@ -103,4 +136,4 @@ " activations." ] } -} \ No newline at end of file +} diff --git a/src/main/resources/expansioncontentResources/localization/fra/RelicStrings.json b/src/main/resources/expansioncontentResources/localization/fra/RelicStrings.json index 1bc10ad713..017e459ff5 100644 --- a/src/main/resources/expansioncontentResources/localization/fra/RelicStrings.json +++ b/src/main/resources/expansioncontentResources/localization/fra/RelicStrings.json @@ -3,7 +3,7 @@ "NAME": "Petit chapeau melon", "FLAVOR": "Celui qui contrôle ce chapeau, contrôle la tour.", "DESCRIPTIONS": [ - "Au début du combat, ajoutez une carte Etude de la Tour dans votre main. Elle coûte 0." + "Au début de votre 2ème tour, choisissez #b1 carte Boss aléatoire parmi #b3 cartes et ajoutez-la à votre main." ] } -} \ No newline at end of file +} diff --git a/src/main/resources/expansioncontentResources/localization/fra/UIStrings.json b/src/main/resources/expansioncontentResources/localization/fra/UIStrings.json index bf73a0e591..d98a9aec60 100644 --- a/src/main/resources/expansioncontentResources/localization/fra/UIStrings.json +++ b/src/main/resources/expansioncontentResources/localization/fra/UIStrings.json @@ -1,48 +1,48 @@ { "downfall:PropertiesMod": { "TEXT": [ - "Applied properties.", - "Additional properties: ", - "Additional properties for this turn: ", - " NL Also for this turn: ", + "Propriétés appliquées.", + "Propriétés supplémentaires : ", + "Propriétés supplémentaires pour ce tour : ", + " NL Aussi pour ce tour : ", ", ", ".", "#y", - "Echo", - "Unplayable", - "Ethereal", - "Retain", - "Exhaust", + "Écho", + "Injouable", + "Éthérée", + "Retenue", + "Épuisement", " ", "NL ", - "Echo: " + "Écho: " ] }, "downfall:EtherealMod": { "TEXT": [ - "Ethereal. NL " + "Éthérée. NL " ] }, "downfall:ExhaustMod": { "TEXT": [ - " NL Exhaust." + " NL Épuisement." ] }, "downfall:InnateMod": { "TEXT": [ - "Innate. NL " + "Inné. NL " ] }, "downfall:RetainCardMod": { "TEXT": [ - "Retain. NL " + "Retenue. NL " ] }, "downfall:UnplayableMod": { "TEXT": [ - "Unplayable. NL ", - "This card can't be played.", - "This card can't be played this turn." + "Injouable. NL ", + "Cette carte ne peut pas être jouée.", + "Cette carte ne peut pas être jouée ce tour." ] }, "expansioncontent:CannotUseBossCardMessage": { diff --git a/src/main/resources/expansioncontentResources/localization/jpn/CardStrings.json b/src/main/resources/expansioncontentResources/localization/jpn/CardStrings.json index ef5084a38a..1975f0f9f0 100644 --- a/src/main/resources/expansioncontentResources/localization/jpn/CardStrings.json +++ b/src/main/resources/expansioncontentResources/localization/jpn/CardStrings.json @@ -1,75 +1,75 @@ { "expansioncontent:GuardianWhirl": { "NAME": "旋風刃", - "DESCRIPTION": "敵全体に !D! ダメージを !M! 回与える。 NL !DM! ブロック以上もっている場合、 攻撃回数が !M! 回増加。", + "DESCRIPTION": "敵全体に !D! ダメージを !M! 回与える。 NL 自分が !DM! ブロック以上持っていた場合、更に !M! 回ダメージを与える。 NL 廃棄", "EXTENDED_DESCRIPTION": [ "もっとブロックが必要だ" ] }, "expansioncontent:Hexaburn": { "NAME": "ヘクサバーン", - "DESCRIPTION": "ランダムな敵に !D! ダメージを !M! 回与える。 NL 廃棄 ", - "UPGRADE_DESCRIPTION": "ランダムな敵に !D! ダメージを !M! 回与える。 " + "DESCRIPTION": "!M! 回 ランダムな敵に !D! ダメージを与える。 NL 廃棄", + "UPGRADE_DESCRIPTION": "!M! 回 ランダムな敵に !D! ダメージを与える。" }, "expansioncontent:InvincibleStrength": { "NAME": "インビンシブル", - "DESCRIPTION": " expansioncontent:無敵 !M! を得る。 NL すでに expansioncontent:無敵 を持っていた場合、もう1ターン持続する。" + "DESCRIPTION": "expansioncontent:無敵 !M! を得る。 NL 既に expansioncontent:無敵 を持っていた場合、発動回数を 1 増やす" }, "expansioncontent:HyperBeam": { "NAME": "オートマ-ビーム", - "DESCRIPTION": "敵全体に !D! ダメージを与える。 NL 1枚の *空虚 が山札の一番上に置かれる。 NL 廃棄 " + "DESCRIPTION": "敵全体に !D! ダメージを与える。 NL 山札の上に *空虚 が置かれる。 NL 廃棄" }, "expansioncontent:LastStand": { - "NAME": "ラストスタンド", - "DESCRIPTION": "全てのデバフを解除。 NL 筋力 !M! を得る。" + "NAME": "ファイナルスタンド", + "DESCRIPTION": "全てのデバフを解除する。 NL 筋力 !M! を得る。" }, "expansioncontent:YouAreMine": { "NAME": "お前はわたしの物だ!!", - "DESCRIPTION": "敵全体に 脱力 !M! 、 弱体 !M! と expansioncontent:破滅 !DM! を与える。 NL 廃棄 " + "DESCRIPTION": "敵全体に 脱力 と 弱体 !M! を与え、更に expansioncontent:破滅 !DM! を与える。 NL 廃棄" }, "expansioncontent:AwakenDeath": { - "NAME": "好奇心", - "DESCRIPTION": " 「パワー」 をプレイするたび、 筋力 !M! を得る。" + "NAME": "キュリオシティ", + "DESCRIPTION": "パワー をプレイする度、 筋力 !M! を得る。" }, "expansioncontent:Chronoboost": { - "NAME": "クロノ・ブースト", + "NAME": "クロノ-ブースト", "DESCRIPTION": "カードを12枚プレイする毎に 筋力 !M! を得る。" }, "expansioncontent:PolyBeam": { "NAME": "ドヌーブラスト", - "DESCRIPTION": " 筋力 !M! を得る。" + "DESCRIPTION": "筋力 !M! を得る。" }, "expansioncontent:DecaShield": { "NAME": "デカシールド", - "DESCRIPTION": " プレートアーマー !B! を得る。" + "DESCRIPTION": "プレートアーマー !B! を得る。" }, "expansioncontent:ShapePower": { "NAME": "シェイプ達の祝福", - "DESCRIPTION": " 筋力 !M! と expansioncontent:プレートアーマー !DM! を得る。", + "DESCRIPTION": "筋力 !M! と プレートアーマー !DM! を得る。", "EXTENDED_DESCRIPTION": [ "ドヌーパワー", - " 筋力 !M! を得る。", + "筋力 !M! を得る。", "デカシールド", - " プレートアーマー !M! を得る。" + "プレートアーマー !M! を得る。" ] }, "expansioncontent:SuperPrepareCrush": { "NAME": "クラッシュ準備", - "DESCRIPTION": "次のターン、 [E] [E] [E] と 筋力 !M! を得て、 *スライムクラッシュ!!! を手札に加える。 NL 廃棄 ", - "UPGRADE_DESCRIPTION": "次のターン、 [E] [E] [E] [E] と 筋力 !M! を得て、 *スライムクラッシュ!!!+ を手札に加える。 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 このターン攻撃してきた相手に expansioncontent:汚泥 !M! を与える。" + "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": "手っ取り早い研究", @@ -81,7 +81,7 @@ }, "expansioncontent:DashGenerateEvil": { "NAME": "悪意の中で", - "DESCRIPTION": "敵にデバフを !DM! 与えるたび、敵全体に !M! ダメージを与える。 " + "DESCRIPTION": "敵にデバフを !DM! 回適用する度に、すべての敵に !M! ダメージを与える。" }, "expansioncontent:KnowingSkullWish": { "NAME": "しゃれこうべ", @@ -91,17 +91,24 @@ "NAME": "アンチドーテ", "DESCRIPTION": "保留 NL 毒 を !M! 軽減する。" }, + "expansioncontent:AntidoteAsPower": { + "NAME": "減速不可能", + "DESCRIPTION": "保留 NL あなたがブロックされなかったダメージを与える度、 毒を !M! 減少させる。" + }, "expansioncontent:SuperGhostShield": { - "NAME": "ゴーストシールド", - "DESCRIPTION": "エセリアル NL [#e087a4]死後[] NL 1 [#e087a4]ブラー[] [#e087a4]を得る。[] NL !B! [#e087a4]ブロックを得る。[]" + "NAME": "スペクターシールド", + "DESCRIPTION": "エセリアル NL [#e087a4]死後[] NL !B! [#e087a4]ブロックを得る。[] NL 1 [#e087a4]ブラー[] [#e087a4]を得る。[]", + "EXTENDED_DESCRIPTION": [ + "!B! ブロックを得る。" + ] }, "expansioncontent:SuperGoopSpray": { - "NAME": "ヘドロ噴射", + "NAME": "ヘドロ射出", "DESCRIPTION": " expansioncontent:汚泥 !M! と 脱力 !DM! を与える。", "UPGRADE_DESCRIPTION": "敵全体に expansioncontent:汚泥 !M! と 脱力 !DM! を与える。" }, "expansioncontent:ChargeUp": { - "NAME": "弾力性プレート", + "NAME": "洗浄プレート", "DESCRIPTION": "自分のデバフの数値を !M! 減少させる。 NL 廃棄 ", "UPGRADE_DESCRIPTION": "自分のデバフの数値を !M! 減少させる。" }, @@ -112,101 +119,100 @@ }, "expansioncontent:Torchfire": { "NAME": "ワイルドファイア", - "DESCRIPTION": " !D! ダメージを与える。 NL 敵の持つデバフの種類の数だけ繰り返す。" + "DESCRIPTION": "!D! ダメージを与える。 NL 敵の持つデバフの種類の数だけ繰り返す。" }, "expansioncontent:TakeFlight": { "NAME": "活性化", - "DESCRIPTION": "expansioncontent:再生 !M! を得る。 NL expansioncontent:詠唱 : *再生 !DM! を得る。" + "DESCRIPTION": "HPを !M! 回復する。 NL awakened:詠唱 : 更にHPを !DM! 回復する。" }, "expansioncontent:BeatOfDeath": { "NAME": "死の鼓動", - "DESCRIPTION": "カードをプレイするたび、 敵全体に !M! ダメージを与える。" + "DESCRIPTION": "カードをプレイする度、 敵全体に !M! ダメージを与える。" }, "expansioncontent:SuperViciousMockery": { - "NAME": "悪意ある嘲笑", + "NAME": "嘲笑", "DESCRIPTION": "気力 !M! を得る。 NL 脱力 !DM! を与える。" }, "expansioncontent:SuperClobber": { - "NAME": "強打の一撃", - "DESCRIPTION": " !D! ダメージを与える。 NL ブロックされなかったダメージに等しいブロックを得る。" + "NAME": "ワロップストライク", + "DESCRIPTION": "!D! ダメージを与える。 NL ブロックされなかったダメージに等しいブロックを得る。" }, "expansioncontent:SuperSomberShield": { - "NAME": "暗澹たる盾", - "DESCRIPTION": "expansioncontent:葬火 NL !B! ブロックを得る。 NL 次のターン、このカードによって *廃棄 したカードのコピーを得る。" + "NAME": "緑炎の盾", + "DESCRIPTION": "expansioncontent:葬火 NL !B! ブロックを得る。 NL 次のターン、このカードによって *廃棄 したカードのコピーを得る。" }, "expansioncontent:SuperWhirlingFlame": { - "NAME": "渦巻く焔", + "NAME": "渦巻く劫火", "DESCRIPTION": "敵全体に !D! ダメージを与える。 NL 捨て札からカードを1枚、山札の上に置く。" }, "expansioncontent:Flail": { - "NAME": "フレイル", + "NAME": "フレイルストライク", "DESCRIPTION": "敵全体に !D! ダメージを !DM! 回与える。 NL !M! アーティファクト を得る。 NL 廃棄 ", "EXTENDED_DESCRIPTION": [ "flailing", - "Flail", - "フレイル" + "Flail" ] }, "expansioncontent:SuperBloodthirst": { - "NAME": "血の渇き", - "DESCRIPTION": " !D! ダメージを与える。 NL 致命 時、ランダムなポーションを獲得し、このカードを 廃棄 する。" + "NAME": "ブラッドラスト", + "DESCRIPTION": "!D! ダメージを与える。 NL *致命 時、ランダムなポーションを獲得し、このカードを *廃棄 する。" }, "expansioncontent:SuperBodyCrash": { - "NAME": "ボディクラッシュ", - "DESCRIPTION": " !B! ブロックを得る。 NL ブロックと同じ値のダメージを与える", + "NAME": "ボディスマッシュ", + "DESCRIPTION": "!B! ブロックを得る。 NL ブロックと同じ値のダメージを与える", "UPGRADE_DESCRIPTION": " NL ( !D! ダメージ。)" }, "expansioncontent:SuperEtherStep": { - "NAME": "エーテルステップ", - "DESCRIPTION": " 手札を1枚廃棄する。 NL カードを !M! 枚引く。 NL !D! ダメージを与える。", - "UPGRADE_DESCRIPTION": " 手札を1枚廃棄する。 NL カードを !M! 枚引く。 NL !D! ダメージを与える。" + "NAME": "スペクターステップ", + "DESCRIPTION": "!D! ダメージを与える。 NL 手札を1枚廃棄する。 NL カードを !M! 枚引く。", + "UPGRADE_DESCRIPTION": "!D! ダメージを与える。 NL 手札を1枚廃棄する。 NL カードを !M! 枚引く。" }, "expansioncontent:Virus": { - "NAME": "ウイルス", - "DESCRIPTION": "手札を !M! 枚 廃棄 し、 *メジャービーム に変換する。 NL 廃棄 " + "NAME": "404ウィルス", + "DESCRIPTION": "手札を最大 !M! 枚 廃棄 し、廃棄した数だけ山札に *メジャービーム を加える。 NL 廃棄 " }, "expansioncontent:MajorBeam": { "NAME": "メジャービーム", - "DESCRIPTION": " !D! ダメージを与える。 NL カードを !M! 枚引く。", - "UPGRADE_DESCRIPTION": " !D! ダメージを与える。 NL カードを !M! 枚引く。" + "DESCRIPTION": "!D! ダメージを与える。 NL カードを !M! 枚引く。", + "UPGRADE_DESCRIPTION": "!D! ダメージを与える。 NL カードを !M! 枚引く。" }, "expansioncontent:ManipulateTime": { "NAME": "再考", - "DESCRIPTION": "捨て札からカードを1枚山札の底に置く。プレイされるまでそのコストは0。", - "UPGRADE_DESCRIPTION": "捨て札からカードを1枚山札の底に置く。戦闘終了までそのコストは0。" + "DESCRIPTION": "捨て札からカードを1枚山札の底に置く。プレイされるまでそのコストは0になる。", + "UPGRADE_DESCRIPTION": "捨て札からカードを1枚山札の底に置く。戦闘終了までそのコストは0になる。" }, "expansioncontent:Pandemonium": { "NAME": "パンデモニウム", "DESCRIPTION": "ターン開始時、捨て札にあるカードをランダムに1枚プレイする。" }, "expansioncontent:Reverie": { - "NAME": "空想", - "DESCRIPTION": "ターン開始時に、捨て札の一番上から !M! 枚のカードのうち1枚を手札に加える。" + "NAME": "夢想", + "DESCRIPTION": "ターン開始時、捨て札の上から !M! 枚のカードを開き、1枚を手札に加える。" }, "expansioncontent:ExploitVulnerability": { "NAME": "ドヌービーム", "DESCRIPTION": "敵の持つブロックを全て盗む。 NL 2回 !D! ダメージを与える。" }, "expansioncontent:PeekPages": { - "NAME": "ページをのぞく", - "DESCRIPTION": " !M! 枚の *洞察 を山札に混ぜる。 NL 廃棄 " + "NAME": "ページを覗く", + "DESCRIPTION": "山札の一番上に !M! 枚の *洞察 を置く。 NL 廃棄 " }, "expansioncontent:BloodBarrage": { - "NAME": "ブラッド・バレージ", - "DESCRIPTION": " !D! ダメージを !M! 回与える。 NL 廃棄 " + "NAME": "ブラッド・バラージュ", + "DESCRIPTION": "!D! ダメージを !M! 回与える。 NL 廃棄 " }, "expansioncontent:DoubleAct": { - "NAME": "ダブルボス", - "DESCRIPTION": "次のターン、2倍のカード枚数 と [E] を得る。 NL 廃棄 " + "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 0094cf0cbb..47fc85e296 100644 --- a/src/main/resources/expansioncontentResources/localization/jpn/KeywordStrings.json +++ b/src/main/resources/expansioncontentResources/localization/jpn/KeywordStrings.json @@ -1,44 +1,44 @@ [ - { - "PROPER_NAME": "ブラー", - "ID": "ブラー", - "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プレートアーマー に等しいブロックを獲得します。ブロックされていない攻撃ダメージを受けると、 #yプレートアーマー が #b1 減る。" - }, - { + { + "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", @@ -46,22 +46,13 @@ ], "DESCRIPTION": "#yボス を持つカードは1ターンに #b1 枚しかプレイできない。" }, - { - "PROPER_NAME": "エコー", - "ID": "エコー", - "NAMES": [ - "echo", - "エコー" - ], - "DESCRIPTION": "カードのコピーを手札に追加する。そのカードは #yエセリアル と #y廃棄 を持つ。 NL エコーしたカードはエコー出来ない。" - }, { "PROPER_NAME": "無敵", "NAMES": [ "invincible", "無敵" ], - "DESCRIPTION": "1ターンにこれ以上のHPを失うことはない。 NL 無敵 がHPの減少を防いだターンの終了時、 効果を除去する。" + "DESCRIPTION": "1ターンにこれ以上のHPを失うことはない。 NL 無敵 がHPの減少を防いだターンの終了時、効果を除去する。" }, { "PROPER_NAME": "発掘", @@ -69,7 +60,7 @@ "exhume", "発掘" ], - "DESCRIPTION": "廃棄山からカードを手札に戻す。" + "DESCRIPTION": "廃棄札からカードを手札に戻す。" }, { "PROPER_NAME": "回収", @@ -77,15 +68,7 @@ "reclaim", "回収" ], - "DESCRIPTION": "廃棄山からカードを捨て札に戻す。" - }, - { - "PROPER_NAME": "汚泥", - "NAMES": [ - "goop", - "汚泥" - ], - "DESCRIPTION": "次の攻撃は、 #y汚泥 ごとに #b1 の追加ダメージを与え、 すべての #y汚泥 を除去し、 #y泥食い 効果を発動する。" + "DESCRIPTION": "廃棄札からカードを捨て札に戻す。" }, { "PROPER_NAME": "束縛", @@ -102,40 +85,59 @@ "temp_hp", "一時的な体力" ], - "DESCRIPTION": "戦闘終了まで、 HPへのダメージを肩代わりする。" + "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": [ - "pyre", - "葬火" - ], - "DESCRIPTION": "コストの支払いに加え、 手札を一枚廃棄する必要がある。 " - }, - { - "PROPER_NAME": "破滅", - "NAMES": [ - "doom", - "doomed", - "破滅" - ], - "DESCRIPTION": "破滅状態の敵はターン開始時にHPを失い、 その後破滅状態が解除される。ただしその敵が #y苦悶 状態である時は除く。( #y脱力 と #y弱体 を同時に受けている状態)" - }, - { - "PROPER_NAME": "詠唱", - "NAMES": [ - "chant", - "Chant", - "Chants", - "詠唱" - ], - "DESCRIPTION": "パワーが手札にあるときにプレイした場合、 プレイ中に発動する。" - }, - { - "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 71e8d0aa9b..6730a6625f 100644 --- a/src/main/resources/expansioncontentResources/localization/jpn/PowerStrings.json +++ b/src/main/resources/expansioncontentResources/localization/jpn/PowerStrings.json @@ -63,6 +63,13 @@ " ターン開始時に発動する。" ] }, + "expansioncontent:AddCopyPower": { + "NAME": "遅延カード", + "DESCRIPTIONS": [ + " ", + " を次の自分のターンの開始時に手札に加える。" + ] + }, "expansioncontent:AddSameInstancePower": { "NAME": "遅延カード", "DESCRIPTIONS": [ @@ -82,43 +89,43 @@ "DESCRIPTIONS": [ "あと #b", " ターン後、 #b", - "ターン終了時 #b", + "あなたのターン終了時 #b", " ダメージをランダムな敵に #b6 回与える。" ] }, "expansioncontent:BeatOfDeathP": { "NAME": "死の鼓動", "DESCRIPTIONS": [ - "カードをプレイするたびに、敵全体に #b", + "あなたがカードをプレイする度敵全体に #b", " ダメージを与える。" ] }, "expansioncontent:PandemoniumPower":{ "NAME": "パンデモニウム", "DESCRIPTIONS": [ - "ターン開始時に、捨て札からランダムなカードをプレイする。", - "ターン開始時に、捨て札から #b 枚", - " ランダムなカードをプレイする。" + "ターン開始時、ランダムに捨て札のカードを1枚プレイする。", + "ターン開始時、ランダムに捨て札のカードを #b", + " 枚プレイする。" ] }, "expansioncontent:EvilWithinPower":{ "NAME": "悪意の中で", "DESCRIPTIONS": [ - "#b を与えた後、敵全体に #b", - " ダメージを与える。", - " より多くのデバフ。", - " より多くのデバフ。" + "条件を満たした時、敵全体に #b", + " ダメージを与える。更に #b", + " 回デバフを与える。", + " 回デバフを与える。" ] }, "expansioncontent:ReveriePower":{ - "NAME": "空想", + "NAME": "夢想", "DESCRIPTIONS": [ - "ターンの開始時に、捨て札の一番上のカードを見て、それを手札に加える。", - "ターンの開始時に、捨て札の一番上の #b", - " カードを見て、その中から 1 枚を選んで手札に加える。", - "手札に加えるカードを 1 枚選ぶ。" - ] - }, + "ターン開始時、捨て札の一番上のカードを確認しそれを手札に加える。", + "ターン開始時、捨て札のカードを上から #b", + " 枚を確認し、選んで1枚を手札に加える。", + " 枚を確認し、選んで1枚を手札に加える。" + ] +}, "expansioncontent:VexVinciblePower": { "NAME": "無敵", "DESCRIPTIONS": [ @@ -126,7 +133,7 @@ " までに制限する。", "1ターンに受けるダメージとHPの損失を #b", " までに制限する。あと #b", - " 発動すると効果を失う。" + " 回発動すると効果を失う。" ] } } diff --git a/src/main/resources/expansioncontentResources/localization/jpn/RelicStrings.json b/src/main/resources/expansioncontentResources/localization/jpn/RelicStrings.json index 957f4d2df9..e7895b4a14 100644 --- a/src/main/resources/expansioncontentResources/localization/jpn/RelicStrings.json +++ b/src/main/resources/expansioncontentResources/localization/jpn/RelicStrings.json @@ -3,7 +3,7 @@ "NAME": "タイニーボウラーハット", "FLAVOR": "帽子を制する者はスパイアを制す。", "DESCRIPTIONS": [ - "戦闘開始時、手札に コスト #b0 の #yスパイアの研究 カードを手札に加える。" + "戦闘開始時、#b3 枚の ボス カードから #b1 枚を選択し手札に加える。" ] } } \ No newline at end of file diff --git a/src/main/resources/expansioncontentResources/localization/kor/CardStrings.json b/src/main/resources/expansioncontentResources/localization/kor/CardStrings.json index 19dfdddbf5..d014058fbc 100644 --- a/src/main/resources/expansioncontentResources/localization/kor/CardStrings.json +++ b/src/main/resources/expansioncontentResources/localization/kor/CardStrings.json @@ -1,15 +1,15 @@ -{ +{ "expansioncontent:GuardianWhirl": { "NAME": "회오리 바람", - "DESCRIPTION": "적 전체에게 피해를 !D! 만큼 4번 줍니다. NL 방어도가 !DM! 이상이면 피해를 !M! 번 추가로 줍니다.", + "DESCRIPTION": "적 전체에게 피해를 !D! 만큼 !M! 번 줍니다. NL 방어도가 !DM! 이상이면 피해를 !M! 번 더 줍니다.", "EXTENDED_DESCRIPTION": [ "방어도가 더 필요하다." ] }, "expansioncontent:Hexaburn": { - "NAME": "지옥염", - "DESCRIPTION": "무작위 적에게 피해를 !D! 만큼 !M! 번 줍니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "무작위 적에게 피해를 !D! 만큼 !M! 번 줍니다." + "NAME": "육각염", + "DESCRIPTION": "무작위 적들에게 피해를 !D! 만큼 !M! 번 줍니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "무작위 적들에게 피해를 !D! 만큼 !M! 번 줍니다." }, "expansioncontent:InvincibleStrength": { "NAME": "천하무적", @@ -25,7 +25,7 @@ }, "expansioncontent:YouAreMine": { "NAME": "넌 나의 것이다!", - "DESCRIPTION": "적 전체에게 약화를 !M!, 취약을 !M!, expansioncontent:파멸을 !DM! 부여합니다. NL 소멸." + "DESCRIPTION": "적 전체에게 약화와 취약을 !M! 부여하고 expansioncontent:파멸을 !DM! 부여합니다. NL 소멸." }, "expansioncontent:AwakenDeath": { "NAME": "호기심", @@ -41,11 +41,11 @@ }, "expansioncontent:DecaShield": { "NAME": "데카의 방패", - "DESCRIPTION": "expansioncontent:판금_갑옷을 !DM! 얻습니다. NL 힘을 !M! 얻습니다." + "DESCRIPTION": "expansioncontent:판금 *갑옷을 !B! 얻습니다." }, "expansioncontent:ShapePower": { "NAME": "모양기의 축복", - "DESCRIPTION": "힘을 !M! 얻습니다. 또는 expansioncontent:판금_갑옷을 !DM! 얻습니다.", + "DESCRIPTION": "힘을 !M! 얻습니다. NL expansioncontent:판금 *갑옷을 !DM! 얻습니다.", "EXTENDED_DESCRIPTION": [ "도누의 힘", "힘을 !M! 얻습니다.", @@ -55,8 +55,8 @@ }, "expansioncontent:SuperPrepareCrush": { "NAME": "으깨기 준비", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL 다음 턴에 [E] [E] [E] 을 얻고 *슬라임 *으깬다를 얻습니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "방어도를 !B! 얻습니다. NL 다음 턴에 [E] [E] [E] 을 얻고 *슬라임 *으깬다 *+를 얻습니다. 힘을 !M! 얻습니다. NL 소멸.", + "DESCRIPTION": "다음 턴에 *슬라임 *으깬다를 얻고 [E] [E] [E] 을 얻고 힘을 !M! 얻습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "다음 턴에 *슬라임 *으깬다 *+를 얻고 [E] [E] [E] [E] 을 얻고 힘을 !M! 얻습니다. NL 소멸.", "EXTENDED_DESCRIPTION": [ "~슬라임...~ NL #r~으깬다!!!~" ] @@ -65,32 +65,37 @@ "NAME": "살아있는 벽", "DESCRIPTION": "방어도를 !B! 얻습니다. NL 이번 턴에 공격한 대상에게 expansioncontent:점액을 !M! 부여합니다." }, + "expansioncontent:StudyTheSpire": { "NAME": "첨탑 학습", - "DESCRIPTION": "다음 !M! 턴 동안 시작할 때마다 무작위 *보스 카드를 1장 얻습니다. 사용하기 전까지 그 카드의 비용은 0이 됩니다.", - "UPGRADE_DESCRIPTION": "다음 !M! 턴 동안 시작할 때마다 무작위 강화된 *보스 카드를 1장 얻습니다. 사용하기 전까지 그 카드의 비용은 0이 됩니다." + "DESCRIPTION": "다음 !M! 턴 동안 시작할 때마다 무작위 *보스 카드를 1장 얻습니다. 그 카드의 비용은 0이 됩니다.", + "UPGRADE_DESCRIPTION": "다음 !M! 턴 동안 시작할 때마다 무작위 강화된 *보스 카드를 1장 얻습니다. 그 카드의 비용은 0이 됩니다." }, "expansioncontent:QuickStudy": { "NAME": "빠른 학습", - "DESCRIPTION": "*보스 카드 3종류 중 1가지를 선택해 얻습니다. NL 사용하기 전까지 그 카드의 비용은 0이 됩니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "강화된 *보스 카드 3종류 중 1가지를 선택해 얻습니다. NL 사용하기 전까지 그 카드의 비용은 0이 됩니다. NL 소멸.", + "DESCRIPTION": "*보스 카드 3종류 중 1가지를 선택해 얻습니다. NL 사용하기 전까지 그 카드의 비용이 0이 됩니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "강화된 *보스 카드 3종류 중 1가지를 선택해 얻습니다. NL 사용하기 전까지 그 카드의 비용이 0이 됩니다. NL 소멸.", "EXTENDED_DESCRIPTION": [ "보스 카드를 고르십시오." ] }, "expansioncontent:DashGenerateEvil": { "NAME": "내면의 악", - "DESCRIPTION": "해로운 효과를 !DM! 부여할 때마다 적 전체에게 피해를 !D! 줍니다." + "DESCRIPTION": "해로운 효과를 !DM! 부여할 때마다 적 전체에게 피해를 !M! 줍니다." }, "expansioncontent:KnowingSkullWish": { "NAME": "뭐든지 아는 해골", - "DESCRIPTION": "휘발성. NL 체력을 잃고 *영혼, *포션, *무색 *카드를 얻습니다. NL 소멸." + "DESCRIPTION": "휘발성. NL 체력을 잃고 *영혼, *포션, *무색 *카드 중 하나를 얻는 소원을 빕니다. NL 소멸." }, "expansioncontent:Antidote": { "NAME": "해독제", "DESCRIPTION": "보존. NL 중독을 !M! 잃습니다." }, - "expansioncontent:SuperhostShieldG": { + "expansioncontent:AntidoteAsPower": { + "NAME": "중독 저항", + "DESCRIPTION": "보존. NL 막히지 않은 공격 피해를 줄 때마다 중독이 !M! 감소합니다." + }, + "expansioncontent:SuperGhostShield": { "NAME": "유령 보호막", "DESCRIPTION": "휘발성. [#e087a4]사후세계.[] NL [#e087a4]방어도를[] [#e087a4]!B![] [#e087a4]얻습니다.[] NL [#e087a4]흐릿함을[] [#e087a4]!M![] [#e087a4]얻습니다.[]", "EXTENDED_DESCRIPTION": [ @@ -99,7 +104,7 @@ }, "expansioncontent:SuperGoopSpray": { "NAME": "점액 분사", - "DESCRIPTION": "expansioncontent:점액을 !M! 부여하고 약화를 !DM! 부여합니다.", + "DESCRIPTION": "expansioncontent:점액을 !M! 부여합니다. NL 약화를 !DM! 부여합니다.", "UPGRADE_DESCRIPTION": "적 전체에게 expansioncontent:점액을 !M! 부여하고 약화를 !DM! 부여합니다." }, "expansioncontent:ChargeUp": { @@ -109,8 +114,8 @@ }, "expansioncontent:SuperTaunt": { "NAME": "도발", - "DESCRIPTION": "약화 와 취약을 !M! 부여합니다.", - "UPGRADE_DESCRIPTION": "적 전체에게 약화 와 취약을 !M! 부여합니다." + "DESCRIPTION": "약화와 취약을 !M! 부여합니다.", + "UPGRADE_DESCRIPTION": "적 전체에게 약화와 취약을 !M! 부여합니다." }, "expansioncontent:Torchfire": { "NAME": "들불", @@ -119,7 +124,7 @@ "expansioncontent:TakeFlight": { "NAME": "재활성화", - "DESCRIPTION": "시전하지 않으면 expansioncontent:재생을 !M! 얻습니다. NL expansioncontent:시전하면 *재생을 !DM! 얻습니다." + "DESCRIPTION": "체력을 !M! 회복합니다. NL awakened:암송: 대신 체력을 !DM! 회복합니다." }, "expansioncontent:BeatOfDeath": { "NAME": "죽음의 비트", @@ -127,7 +132,7 @@ }, "expansioncontent:SuperViciousMockery": { "NAME": "악랄한 조롱", - "DESCRIPTION": "활력 을 !M! 얻습니다. NL 약화를 !DM! 부여합니다." + "DESCRIPTION": "expansioncontent:활력을 !M! 얻습니다. NL 약화를 !DM! 부여합니다." }, "expansioncontent:SuperClobber": { "NAME": "구타 타격", @@ -141,14 +146,14 @@ "expansioncontent:SuperWhirlingFlame": { "NAME": "회오리 불", - "DESCRIPTION": "적 전체에게 피해를 !D! 줍니다. NL 버린 카드 더미 카드를 1장 뽑을 카드 더미 맨 위에 놓습니다." + "DESCRIPTION": "적 전체에게 피해를 !D! 줍니다. NL 버린 카드 더미에서 카드를 1장 선택해 뽑을 카드 더미 맨 위에 놓습니다." }, "expansioncontent:Flail": { - "NAME": "손상", + "NAME": "마구 타격", "DESCRIPTION": "적 전체에게 피해를 !D! 만큼 !DM! 번 줍니다. NL 인공물을 !M! 얻습니다. NL 소멸.", "EXTENDED_DESCRIPTION": [ - "손상된", - "손상" + "휘젓는", + "동요" ] }, "expansioncontent:SuperBloodthirst": { @@ -161,14 +166,14 @@ "UPGRADE_DESCRIPTION": " NL (피해를 !D! 줍니다.)" }, "expansioncontent:SuperEtherStep": { - "NAME": "에테르 걸음", - "DESCRIPTION": "카드를 1장 소멸시킵니다. NL 카드를 !M! 장 뽑습니다. NL 피해를 !D! 줍니다.", - "UPGRADE_DESCRIPTION": "카드를 1장 소멸시킵니다. NL 카드를 !M! 장 뽑습니다. NL 피해를 !D! 줍니다." + "NAME": "영적인 걸음", + "DESCRIPTION": "피해를 !D! 줍니다. NL 카드를 1장 소멸시킵니다. NL 카드를 !M! 장 뽑습니다.", + "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL 카드를 1장 소멸시킵니다. NL 카드를 !M! 장 뽑습니다." }, "expansioncontent:Virus": { - "NAME": "바이러스", - "DESCRIPTION": "카드를 !M! 장까지 소멸시킵니다. 소멸시킨 카드당 *주력 *광선을 뽑을 카드 더미에 섞어 넣습니다. NL 소멸." + "NAME": "404 바이러스", + "DESCRIPTION": "카드를 최대 !M! 장 소멸시킵니다. 소멸시킨 카드당 *주력 *광선을 뽑을 카드 더미에 섞어 넣습니다. NL 소멸." }, "expansioncontent:MajorBeam": { @@ -179,8 +184,8 @@ "expansioncontent:ManipulateTime": { "NAME": "토막 생각", - "DESCRIPTION": "버린 카드 더미에서 카드를 1 장 선택해 뽑을 카드 더미 맨 위에 놓습니다. 사용하기 전까지 그 카드의 비용은 0이 됩니다.", - "UPGRADE_DESCRIPTION": "버린 카드 더미에서 카드를 1 장 선택해 뽑을 카드 더미 맨 위에 놓습니다. 이번 전투에서 그 카드의 비용은 0이 됩니다." + "DESCRIPTION": "버린 카드 더미에서 카드를 1 장 선택해 뽑을 카드 더미 바닥에 놓습니다. 사용하기 전까지 그 카드의 비용이 0 이 됩니다.", + "UPGRADE_DESCRIPTION": "버린 카드 더미에서 카드를 1 장 선택해 뽑을 카드 더미 바닥에 놓습니다. 이번 전투 동안 그 카드의 비용은 0이 됩니다." }, "expansioncontent:Pandemonium": { "NAME": "대혼란", @@ -192,15 +197,15 @@ }, "expansioncontent:ExploitVulnerability": { "NAME": "도누 광선", - "DESCRIPTION": "적의 모든 방어도를 없앱니다. NL 피해를 !D! 만큼 2번 줍니다." + "DESCRIPTION": "적의 모든 방어도를 없앱니다. NL 없앤 방어도만큼 방어도를 얻습니다. NL 피해를 !D! 만큼 두 번 줍니다." }, "expansioncontent:PeekPages": { "NAME": "염탐", - "DESCRIPTION": "뽑을 카드 더미에 통찰을 !M! 장 섞어 넣습니다. NL 소멸." + "DESCRIPTION": "뽑을 카드 더미 위에 *통찰을 !M! 장 놓습니다. NL 소멸." }, "expansioncontent:BloodBarrage": { "NAME": "피의 장벽", - "DESCRIPTION": "피해를 !D! 만큼 !M! 줍니다. NL 소멸." + "DESCRIPTION": "피해를 !D! 만큼 !M! 번 줍니다. NL 소멸." }, "expansioncontent:DoubleAct": { "NAME": "합 맞추기", diff --git a/src/main/resources/expansioncontentResources/localization/kor/DailyModStrings.json b/src/main/resources/expansioncontentResources/localization/kor/DailyModStrings.json index 9e26dfeeb6..22fdca1b26 100644 --- a/src/main/resources/expansioncontentResources/localization/kor/DailyModStrings.json +++ b/src/main/resources/expansioncontentResources/localization/kor/DailyModStrings.json @@ -1 +1 @@ -{} \ No newline at end of file +{} \ No newline at end of file diff --git a/src/main/resources/expansioncontentResources/localization/kor/EventStrings.json b/src/main/resources/expansioncontentResources/localization/kor/EventStrings.json index 9e26dfeeb6..22fdca1b26 100644 --- a/src/main/resources/expansioncontentResources/localization/kor/EventStrings.json +++ b/src/main/resources/expansioncontentResources/localization/kor/EventStrings.json @@ -1 +1 @@ -{} \ No newline at end of file +{} \ No newline at end of file diff --git a/src/main/resources/expansioncontentResources/localization/kor/KeywordStrings.json b/src/main/resources/expansioncontentResources/localization/kor/KeywordStrings.json index 7894f98d0a..1c3532a41b 100644 --- a/src/main/resources/expansioncontentResources/localization/kor/KeywordStrings.json +++ b/src/main/resources/expansioncontentResources/localization/kor/KeywordStrings.json @@ -46,7 +46,8 @@ "PROPER_NAME": "활력", "NAMES": [ "활력", - "활력을" + "활력을", + "활력과" ], "DESCRIPTION": "다음 공격이 추가 피해를 줍니다." }, @@ -135,15 +136,31 @@ }, { - "PROPER_NAME": "시전", + "PROPER_NAME": "암송", "NAMES": [ "chant", "Chant", "Chants", - "시전", - "시전하면", - "시전합니다", - "시전을" + "암송", + "암송하면", + "암송합니다", + "암송을" ], - "DESCRIPTION": "손에 있는 동안 파워 카드를 사용하면 활성화되는 효과입니다."} + "DESCRIPTION": "손에 있는 동안 파워 카드를 사용하면 활성화되는 효과입니다."}, + { + "PROPER_NAME": "변화", + "NAMES": [ + "변화", + "변화된", + "변화하는", + "변화를", + "변화가", + "변화되거나", + "변화시키고", + "변화합니다", + "변화시킵니다", + "TRANSFORM" + ], + "DESCRIPTION": "무작위로 정해진 카드로 교체됩니다." + } ] diff --git a/src/main/resources/expansioncontentResources/localization/kor/MonsterStrings.json b/src/main/resources/expansioncontentResources/localization/kor/MonsterStrings.json index 9e26dfeeb6..22fdca1b26 100644 --- a/src/main/resources/expansioncontentResources/localization/kor/MonsterStrings.json +++ b/src/main/resources/expansioncontentResources/localization/kor/MonsterStrings.json @@ -1 +1 @@ -{} \ No newline at end of file +{} \ No newline at end of file diff --git a/src/main/resources/expansioncontentResources/localization/kor/OrbStrings.json b/src/main/resources/expansioncontentResources/localization/kor/OrbStrings.json index 9e26dfeeb6..22fdca1b26 100644 --- a/src/main/resources/expansioncontentResources/localization/kor/OrbStrings.json +++ b/src/main/resources/expansioncontentResources/localization/kor/OrbStrings.json @@ -1 +1 @@ -{} \ No newline at end of file +{} \ No newline at end of file diff --git a/src/main/resources/expansioncontentResources/localization/kor/PotionStrings.json b/src/main/resources/expansioncontentResources/localization/kor/PotionStrings.json index 7444f846c5..06ad57ad80 100644 --- a/src/main/resources/expansioncontentResources/localization/kor/PotionStrings.json +++ b/src/main/resources/expansioncontentResources/localization/kor/PotionStrings.json @@ -1,10 +1,10 @@ -{ +{ "expansioncontent:BossPotion": { "NAME": "보스 포션", "DESCRIPTIONS": [ - "무작위 보스 카드 3가지 중 1장을 선택해 얻습니다. 이번 턴에 그 카드의 비용이 0이 됩니다.", - "무작위 보스 카드 3가지 중 1장을 선택해 선택한 카드를 #b", - " 장 얻습니다. 이번 턴에 그 카드의 비용이 0이 됩니다." + "무작위 #y보스 카드 #b3 가지 중 #b1 장을 선택해 얻습니다. 이번 턴에 그 카드의 비용이 #b0 이 됩니다.", + "무작위 #y보스 카드 #b3 가지 중 #b1 장을 선택해 선택한 카드를 #b", + " 장 얻습니다. 이번 턴에 그 카드들의 비용은 #b0 이 됩니다." ] } -} +} \ No newline at end of file diff --git a/src/main/resources/expansioncontentResources/localization/kor/PowerStrings.json b/src/main/resources/expansioncontentResources/localization/kor/PowerStrings.json index 5a38a8f5bd..2c9680043d 100644 --- a/src/main/resources/expansioncontentResources/localization/kor/PowerStrings.json +++ b/src/main/resources/expansioncontentResources/localization/kor/PowerStrings.json @@ -1,139 +1,139 @@ -{ - "expansioncontent:StudyTheSpirePower": { - "NAME": "첨탑 학습", - "DESCRIPTIONS": [ - "다음 턴 시작 시 무작위 #y보스 카드를 1장 얻습니다. NL 사용하기 전까지 그 카드의 비용은 #b0 이 됩니다.", - "다음 #b", - " 턴 동안 시작 시 무작위 #y보스 카드를 1장 얻습니다. NL 사용하기 전까지 그 카드의 비용은 #b0 이 됩니다.", - "다음 턴 시작 시 무작위 강화된 #y보스 카드를 1장 얻습니다. NL 사용하기 전까지 그 카드의 비용은 #b0 이 됩니다.", - "다음 #b", - " 턴 동안 시작 시 무작위 강화된 #y보스 카드를 1장 얻습니다. NL 사용하기 전까지 그 카드의 비용은 #b0 이 됩니다." - ] - }, - "expansioncontent:AwakenedOnePower": { - "NAME": "어두운 의식", - "DESCRIPTIONS": [ - "이번 턴에 적이 공격하지 않으면 #y힘을 #b", - " 얻습니다." - ] - }, - "expansioncontent:AwakenDeathPower": { - "NAME": "각성", - "DESCRIPTIONS": [ - "사망할 때 체력을 #b", - " 회복하고 이 효과를 제거합니다." - ] - }, - "expansioncontent:ChronoBoostPower": { - "NAME": "시간 가속", - "DESCRIPTIONS": [ - "카드를 #b", - " 장 더 사용하면 #y힘을 #b", - " 얻습니다." - ] - }, - "expansioncontent:ChronoBoostPlusPower": { - "NAME": "시간 가속+", - "DESCRIPTIONS": [ - "카드를 #b", - " 장 더 사용하면 #y힘을 #b", - " 얻습니다." - ] - }, - "expansioncontent:DeEnergizedPower": { - "NAME": "무전압 상태", - "DESCRIPTIONS": [ - "다음 내 턴 시작 시 [E] 를 #b", - " 잃습니다." - ] - }, - "expansioncontent:PolyBeamAgainPower": { - "NAME": "잠재", - "DESCRIPTIONS": [ - "다음 턴 시작 시 #y다연발 #y광선 이 사용됩니다. ", - "다음 #b", - " 턴까지 시작 시 #y다연발 #y광선 이 사용됩니다." - ] - }, - "expansioncontent:PolyBeamAgainPowerUpgraded": { - "NAME": "잠재", - "DESCRIPTIONS": [ - "다음 턴 시작 시 #y다연발 #y광선+ 이 사용됩니다. ", - "다음 #b", - " 턴까지 시작 시 #y다연발 #y광선+ 이 사용됩니다." - ] - }, - "expansioncontent:AddCopyPower": { - "NAME": "지연된 카드", - "DESCRIPTIONS": [ - "다음 내 턴 시작 시 ", - " 카드를 얻습니다." - ] - }, - "expansioncontent:AddSameInstancePower": { - "NAME": "지연된 카드", - "DESCRIPTIONS": [ - "다음 내 턴 시작 시 ", - " 카드를 얻습니다." - ] - }, - "expansioncontent:NextTurnExhumePower": { - "NAME": "지연된 발굴", - "DESCRIPTIONS": [ - "다음 내 턴 시작 시 ", - " 카드를 발굴합니다." - ] - }, - "expansioncontent:PretendHexWheelPower": { - "NAME": "지옥염", - "DESCRIPTIONS": [ - "#b", - " 턴 후 무작위 적들에게 피해를 #b", - "턴 종료 시 무작위 적들에게 피해를 #b", - " 만큼 #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": [ - "이번 턴에 #b", - " 체력 이상을 잃지 않습니다. 효과가 발동하면 천하무적을 다음 턴에 제거합니다.", - "이번 턴에 #b", - " 체력 이상을 잃지 않습니다. 효과가 발동하면 천하무적을 다음 턴에 제거합니다. NL 제거될 시 다음 #b", - " 번까지 다시 바로 발동합니다." - ] - } -} +{ + "expansioncontent:StudyTheSpirePower": { + "NAME": "첨탑 학습", + "DESCRIPTIONS": [ + "다음 턴 시작 시 무작위 #y보스 카드를 #b1 장 얻습니다. NL 사용하기 전까지 그 카드의 비용이 #b0 이 됩니다.", + "다음 #b", + " 턴 동안 시작 시 무작위 #y보스 카드를 #b1 장 얻습니다. NL 사용하기 전까지 그 카드의 비용은 #b0 이 됩니다.", + "다음 턴 시작 시 무작위 #y강화된 #y보스 카드를 #b1 장 얻습니다. NL 사용하기 전까지 그 카드의 비용이 #b0 이 됩니다.", + "다음 #b", + " 턴 동안 시작 시 무작위 #y강화된 #y보스 카드를 #b1 장 얻습니다. NL 사용하기 전까지 그 카드의 비용은 #b0 이 됩니다." + ] + }, + "expansioncontent:AwakenedOnePower": { + "NAME": "어두운 의식", + "DESCRIPTIONS": [ + "이번 턴에 적이 공격하지 않으면 #y힘을 #b", + " 얻습니다." + ] + }, + "expansioncontent:AwakenDeathPower": { + "NAME": "각성", + "DESCRIPTIONS": [ + "사망할 때 체력을 #b", + " 회복하고 이 효과를 제거합니다." + ] + }, + "expansioncontent:ChronoBoostPower": { + "NAME": "시간 가속", + "DESCRIPTIONS": [ + "카드를 #b", + " 장 더 사용하면 #y힘을 #b", + " 얻습니다." + ] + }, + "expansioncontent:ChronoBoostPlusPower": { + "NAME": "시간 가속+", + "DESCRIPTIONS": [ + "카드를 #b", + " 장 더 사용하면 #y힘을 #b", + " 얻습니다." + ] + }, + "expansioncontent:DeEnergizedPower": { + "NAME": "무전압 상태", + "DESCRIPTIONS": [ + "다음 내 턴 시작 시 [E] 를 #b", + " 잃습니다." + ] + }, + "expansioncontent:PolyBeamAgainPower": { + "NAME": "잠재", + "DESCRIPTIONS": [ + "다음 내 턴 시작 시 #y다연발 #y광선이 사용됩니다. ", + "다음 #b", + " 턴 동안 내 턴 시작 시 #y다연발 #y광선이 사용됩니다." + ] + }, + "expansioncontent:PolyBeamAgainPowerUpgraded": { + "NAME": "잠재", + "DESCRIPTIONS": [ + "다음 내 턴 시작 시 #y다연발 #y광선+이 사용됩니다. ", + "다음 #b", + " 턴 동안 내 턴 시작 시 #y다연발 #y광선+이 사용됩니다." + ] + }, + "expansioncontent:AddCopyPower": { + "NAME": "지연된 카드", + "DESCRIPTIONS": [ + "다음 내 턴 시작 시 ", + " 카드를 얻습니다." + ] + }, + "expansioncontent:AddSameInstancePower": { + "NAME": "지연된 카드", + "DESCRIPTIONS": [ + "다음 내 턴 시작 시 ", + " 카드를 얻습니다." + ] + }, + "expansioncontent:NextTurnExhumePower": { + "NAME": "지연된 발굴", + "DESCRIPTIONS": [ + "다음 내 턴 시작 시 ", + " 카드를 발굴합니다." + ] + }, + "expansioncontent:PretendHexWheelPower": { + "NAME": "지옥염", + "DESCRIPTIONS": [ + "#b", + " 턴 후 무작위 적들에게 피해를 #b", + "내 턴 종료 시 무작위 적들에게 피해를 #b", + " 만큼 #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": [ + "이번 턴에 #b", + " 체력 이상을 잃지 않습니다. 효과가 발동하면 천하무적을 다음 턴에 제거합니다.", + "이번 턴에 #b", + " 체력 이상을 잃지 않습니다. 효과가 발동하면 천하무적을 다음 턴에 제거합니다. NL 제거될 시 다음 #b", + " 번까지 다시 바로 발동합니다." + ] + } +} diff --git a/src/main/resources/expansioncontentResources/localization/kor/RelicStrings.json b/src/main/resources/expansioncontentResources/localization/kor/RelicStrings.json index c28fcaf156..509ea656c4 100644 --- a/src/main/resources/expansioncontentResources/localization/kor/RelicStrings.json +++ b/src/main/resources/expansioncontentResources/localization/kor/RelicStrings.json @@ -1,9 +1,9 @@ -{ - "expansioncontent:StudyCardRelic": { - "NAME": "작은 중절모", - "FLAVOR": "이 모자를 다스리는 자, 이 첨탑을 다스리리라.", - "DESCRIPTIONS": [ - "전투 시작 시 비용이 #b0 인 #y첨탑 #y학습을 얻습니다." - ] - } -} \ No newline at end of file +{ + "expansioncontent:StudyCardRelic": { + "NAME": "작은 중절모", + "FLAVOR": "이 모자를 다스리는 자, 이 첨탑을 다스리리라.", + "DESCRIPTIONS": [ + "전투 시작 시 보스 카드 #b3 종류 중 #b1 가지를 선택해 얻습니다." + ] + } +} diff --git a/src/main/resources/expansioncontentResources/localization/kor/RunModStrings.json b/src/main/resources/expansioncontentResources/localization/kor/RunModStrings.json index 9e26dfeeb6..22fdca1b26 100644 --- a/src/main/resources/expansioncontentResources/localization/kor/RunModStrings.json +++ b/src/main/resources/expansioncontentResources/localization/kor/RunModStrings.json @@ -1 +1 @@ -{} \ No newline at end of file +{} \ No newline at end of file diff --git a/src/main/resources/expansioncontentResources/localization/ptb/RelicStrings.json b/src/main/resources/expansioncontentResources/localization/ptb/RelicStrings.json index 22fa2dae81..0bd2f3be37 100644 --- a/src/main/resources/expansioncontentResources/localization/ptb/RelicStrings.json +++ b/src/main/resources/expansioncontentResources/localization/ptb/RelicStrings.json @@ -3,7 +3,7 @@ "NAME": "Pequeno Chapéu-Coco", "FLAVOR": "Quem controla o chapéu, controla a Spire.", "DESCRIPTIONS": [ - "No início do combate, adicione um card #yStudy #ythe #ySpire à sua mão. Ele custa #b0." + "No início do combate, escolha #b1 de #b3 cartas de Chefe para ganhar." ] } } diff --git a/src/main/resources/expansioncontentResources/localization/rus/RelicStrings.json b/src/main/resources/expansioncontentResources/localization/rus/RelicStrings.json index af755701f7..e5d1bb513b 100644 --- a/src/main/resources/expansioncontentResources/localization/rus/RelicStrings.json +++ b/src/main/resources/expansioncontentResources/localization/rus/RelicStrings.json @@ -3,7 +3,7 @@ "NAME": "Маленькая шляпа-котелок", "FLAVOR": "Кто владеет шляпой - владеет Шпилем.", "DESCRIPTIONS": [ - "Добавляет в руку #yИзучение #yШпиля, в начале боя. Она стоит #b0." + "Выберите и получите #b1 из #b3 карт *Босса в руку., в начале боя." ] } } \ No newline at end of file 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 0000000000..3d47d3bdf6 --- /dev/null +++ b/src/main/resources/expansioncontentResources/localization/spa/CardStrings.json @@ -0,0 +1,214 @@ +{ + "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 al azar !M! veces. NL Agota.", + "UPGRADE_DESCRIPTION": "Haz !D! de daño a un enemigo al azar !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 extracción. 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! Débil, !M! 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:AntidoteAsPower": { + "NAME": "No detenerse", + "DESCRIPTION": "Retener. NL Cada vez que inflijas daño de Ataque no bloqueado, 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! Débil.", + "UPGRADE_DESCRIPTION": "Aplica !M! de expansioncontent:Baba y !DM! 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! Débil y Vulnerable.", + "UPGRADE_DESCRIPTION": "Aplica !M! Débil y 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! 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 extracción." + }, + "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 extracción 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 extracción. Cuesta 0 hasta ser jugada.", + "UPGRADE_DESCRIPTION": "Coloca una carta de tu pila de descarte al fondo de tu pila de extracción. 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 extracción. 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 0000000000..9e26dfeeb6 --- /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 0000000000..9e26dfeeb6 --- /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 0000000000..9e26dfeeb6 --- /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 0000000000..775ccc91e8 --- /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 0000000000..9e26dfeeb6 --- /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 0000000000..9e26dfeeb6 --- /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 0000000000..7e68743c59 --- /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 0000000000..a08c565f04 --- /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 al azar #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 0000000000..41daf257c1 --- /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, elige #b1 de #b3 cartas Jefe para obtener." + ] + } +} 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 0000000000..9e26dfeeb6 --- /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 0000000000..ac9a99d62f --- /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 7a6a420581..44191e1e56 100644 --- a/src/main/resources/expansioncontentResources/localization/zhs/CardStrings.json +++ b/src/main/resources/expansioncontentResources/localization/zhs/CardStrings.json @@ -74,7 +74,7 @@ "expansioncontent:QuickStudy": { "NAME": "快速学习", "DESCRIPTION": "从随机 3 张 *首领 牌选择 1 张获得之。 NL 该牌下 1次 打出为0耗能。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "从随机 3 张已 升级 的 *首领 牌选择 1 张获得之。 NL 该牌下 1次 打出为0耗能。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "从随机 3 张已 升级 *首领 牌选择 1 张获得之。 NL 该牌下 1次 打出为0耗能。 NL 消耗 。", "EXTENDED_DESCRIPTION": [ "选择 1 张 首领 牌。" ] diff --git a/src/main/resources/expansioncontentResources/localization/zhs/RelicStrings.json b/src/main/resources/expansioncontentResources/localization/zhs/RelicStrings.json index 0bddd7e2b1..d2825cbf57 100644 --- a/src/main/resources/expansioncontentResources/localization/zhs/RelicStrings.json +++ b/src/main/resources/expansioncontentResources/localization/zhs/RelicStrings.json @@ -3,7 +3,7 @@ "NAME": "袖珍圆顶礼帽", "FLAVOR": "谁掌控了这顶礼帽,谁就掌控了这座尖塔!", "DESCRIPTIONS": [ - "战斗开始时,将一张耗能为 #b0 的 #y研究尖塔 加入手牌。" + "战斗开始时,将一从随机 #b3 张 首领 牌选择 #b1 张获得之。 加入手牌。" ] } } diff --git a/src/main/resources/expansioncontentResources/localization/zht/RelicStrings.json b/src/main/resources/expansioncontentResources/localization/zht/RelicStrings.json index 8f00bcc58f..a17549a34e 100644 --- a/src/main/resources/expansioncontentResources/localization/zht/RelicStrings.json +++ b/src/main/resources/expansioncontentResources/localization/zht/RelicStrings.json @@ -3,7 +3,7 @@ "NAME": "袖珍圓頂禮帽", "FLAVOR": "誰掌控了這頂禮帽,誰就掌控了這座尖塔!", "DESCRIPTIONS": [ - "戰鬥開始時,將一張耗能為 #b0 的 #y研究尖塔 加入手牌。" + "战斗开始时,将一从随机 #b3 张 首领 牌选择 #b1 张获得之。 加入手牌。" ] } } diff --git a/src/main/resources/gremlinResources/images/cards/ward_b.png b/src/main/resources/gremlinResources/images/cards/ward_b.png new file mode 100644 index 0000000000..c14ac972a9 Binary files /dev/null and b/src/main/resources/gremlinResources/images/cards/ward_b.png differ diff --git a/src/main/resources/gremlinResources/images/cards/ward_b_p.png b/src/main/resources/gremlinResources/images/cards/ward_b_p.png new file mode 100644 index 0000000000..9a832777e8 Binary files /dev/null and b/src/main/resources/gremlinResources/images/cards/ward_b_p.png differ diff --git a/src/main/resources/gremlinResources/localization/deu/CardStrings.json b/src/main/resources/gremlinResources/localization/deu/CardStrings.json new file mode 100644 index 0000000000..51f94ba3d4 --- /dev/null +++ b/src/main/resources/gremlinResources/localization/deu/CardStrings.json @@ -0,0 +1,514 @@ +{ + "Gremlin:AggressiveDefense": { + "NAME": "Offensive Abwehr", + "DESCRIPTION": "Füge !D! Schaden zu. NL Immer wenn du in diesem Zug Block erhältst, verliert dieser Gegner !M! TP." + }, + + "Gremlin:ArmsTheft": { + "NAME": "Waffendiebstahl", + "DESCRIPTION": "Wende !M! Schwach an. NL gremlin:Stiehl !M! Stärke. NL Erschöpft." + }, + + "Gremlin:Astound": { + "NAME": "Erstaunen", + "DESCRIPTION": "Erhalte !B! Block. NL Erhalte !M! *Schutz Karten, wenn du mindestens 3 gremlin:Esprit hast.", + "UPGRADE_DESCRIPTION": "Erhalte !B! Block. NL Erhalte !M! *Schutz+ Karten, wenn du mindestens 3 gremlin:Esprit hast." + }, + + "Gremlin:Bang": { + "NAME": "Ultimativer Stoß", + "DESCRIPTION": "Füge !M! Mal !D! Schaden zu. Lege *Energie *sammeln in den Abwurfstapel. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Füge !M! Mal !D! Schaden zu. Lege *Energie *sammeln+ in den Abwurfstapel. NL Erschöpft." + }, + + "Gremlin:Bellow": { + "NAME": "Gebrüll", + "DESCRIPTION": "Flüchtig. NL Erhalte für jeden Gegner der nicht angreifen will !M! Stärke. NL Erschöpft." + }, + + "Gremlin:BrokenShin": { + "NAME": "Schienbeinbruch", + "DESCRIPTION": "Wende 1 gremlin:Agonie für je !M! Schwach des Gegners an. NL Erschöpft." + }, + + "Gremlin:BubbleBarrier": { + "NAME": "Schildblase", + "DESCRIPTION": "Erhalte !M! Block für jede weitere Karte, die du in diesem Zug ausspielst." + }, + + "Gremlin:BulkUp": { + "NAME": "Massephase", + "DESCRIPTION": "Erhalte !M! expansioncontent:temporäre_TP. NL gremlin:Wechsle zum gremlin:Fetten_Gremlin." + }, + + "Gremlin:BurlyBlow": { + "NAME": "Schikanieren", + "DESCRIPTION": "Füge !D! Schaden zu. NL Wiederhole das ein Mal pro Schwach des Gegners." + }, + + "Gremlin:CatScratch": { + "NAME": "Katzenkralle", + "DESCRIPTION": "Füge !M! Mal !D! Schaden zu." + }, + + "Gremlin:Changeo": { + "NAME": "Abrakadabra!", + "DESCRIPTION": "Erhalte !B! Block und NL !M! gremlin:Esprit." + }, + + "Gremlin:CongaLine": { + "NAME": "Polonaise", + "DESCRIPTION": "Erhalte zu Beginn deines Zuges [E] und gremlin:wechsle zum nächsten Gremlin.", + "UPGRADE_DESCRIPTION": "Angeboren. NL Erhalte zu Beginn deines Zuges [E] und gremlin:wechsle zum nächsten Gremlin." + }, + + "Gremlin:CounterStrike": { + "NAME": "Gegenschlag", + "DESCRIPTION": "Füge !D! Schaden zu. NL Wenn der Gegner angreifen will, aktiviere den Bonus des aktuellen Gremlins !M! Mal." + }, + + "Gremlin:CowerChoice": { + "NAME": "Feigheit", + "DESCRIPTION": "Verliere deine ganze Reserve an Gold.", + "EXTENDED_DESCRIPTION": ["SCHWÄCHLINGE NICHT DUMM."] + }, + + "Gremlin:CowerChoiceB": { + "NAME": "Feigheit", + "DESCRIPTION": "Verliere den Gremlin, der am weitesten hinten steht, permanent.", + "EXTENDED_DESCRIPTION": ["Gut. Und ihr anderen - verschwindet!", "Ja! Zischt ab!"] + }, + + "Gremlin:DaggerDance": { + "NAME": "Dolchtanz", + "DESCRIPTION": "Füge ALLEN Gegnern !M! Mal !D! Schaden zu." + }, + + "Gremlin:Dazzle": { + "NAME": "Schillern", + "DESCRIPTION": "Füge !D! Schaden zu. NL gremlin:Stiehl 2 Stärke, wenn du mindestens 3 gremlin:Esprit hast. NL Erschöpft." + }, + + "Gremlin:Defend": { + "NAME": "Verteidigen", + "DESCRIPTION": "Erhalte !B! Block." + }, + + "Gremlin:Duplicate": { + "NAME": "Duplizieren", + "DESCRIPTION": "Wähle einen Angriff auf der Hand. NL Erhalte !M! expansioncontent:Echos. NL Sie kosten 1 weniger. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Wähle einen Angriff auf der Hand. NL Erhalte !M! expansioncontent:Echos. NL Sie kosten 1 weniger." + }, + + "Gremlin:EdibleArmor": { + "NAME": "Essbare Rüstung", + "DESCRIPTION": "Wandle dein aktuelles Block in expansioncontent:temporäre_TP um. NL Erschöpft." + }, + + "Gremlin:Encore": { + "NAME": "Zugabe", + "DESCRIPTION": "Erhalte 3 gremlin:Esprit. NL Der Verbauch von gremlin:Esprit fügt zusätzlich !M! Schaden zu." + }, + + "Gremlin:Enthusiasm": { + "NAME": "Enthusiasmus", + "DESCRIPTION": "Ziehe immer wenn du gremlin:wechselst eine Karte." + }, + + "Gremlin:Erupt": { + "NAME": "Wutausbruch", + "DESCRIPTION": "Erhalte !M! *temporäre Stärke. NL Erschöpft." + }, + + "Gremlin:Exacerbate": { + "NAME": "Tortur", + "DESCRIPTION": "Füge !D! Schaden zu. NL Der Gegner verliert jedes Mal, wenn er Schwach erleidet, !M! TP. NL Erschöpft." + }, + + "Gremlin:FairyDust": { + "NAME": "Feenstaub", + "DESCRIPTION": "Erhalte !M! *Schutz Karten und ziehe NL !M! Karten. NL Erschöpft." + }, + + "Gremlin:SleeveOfAces": { + "NAME": "Kartentrick", + "DESCRIPTION": "Füge !D! Schaden zu. NL Erhalte Messer in Anzahl der Höhe deines gremlin:Esprits.", + "UPGRADE_DESCRIPTION": "Füge !D! Schaden zu. NL Erhalte Messer+ in Anzahl der Höhe deines gremlin:Esprits." + }, + + "Gremlin:FatGremlin": { + "NAME": "Fetter Gremlin", + "DESCRIPTION": "gremlin:Wechsle zum gremlin:Fetten_Gremlin." + }, + + "Gremlin:FeelTheAudience": { + "NAME": "Publikumsmagnet", + "DESCRIPTION": "Füge ALLEN Gegnern !D! Schaden zu. NL Erhalte !M! gremlin:Esprit für jeden, der angreifen will." + }, + + "Gremlin:FightChoice": { + "NAME": "Kämpfen", + "DESCRIPTION": "Beginne den Kampf. NL Die Gegner erhalten !M! Stärke.", + "EXTENDED_DESCRIPTION": ["KNIRPSE JETZT STERBEN!", "Da bettelt jemand um eine Lektion!"] + }, + + "Gremlin:FlipOut": { + "NAME": "Ausflippen", + "DESCRIPTION": "Füge !D! Schaden zu. NL Wenn du in diesem Zug Block erhalten würdest, füge stattdessen ALLEN Gegnern Schaden in derselben Höhe zu." + }, + + "Gremlin:Flurry": { + "NAME": "Tumult", + "DESCRIPTION": "Füge für jede in diesem Zug gespielte Karte !D! Schaden zu. NL Erschöpft.", + "EXTENDED_DESCRIPTION": [ + " NL (", + " Karte gespielt.)", + " Karten gespielt.)" + ] + }, + + "Gremlin:FollowThrough": { + "NAME": "Für den Anführer!", + "DESCRIPTION": "Füge !D! Schaden zu. NL Erhalte !M! *temporäre Stärke." + }, + + "Gremlin:Fury": { + "NAME": "Raserei", + "DESCRIPTION": "Kostet [E] weniger pro 2 deiner Stärke. NL Füge 3 Mal !D! Schaden zu." + }, + + "Gremlin:Glimmer": { + "NAME": "Glimmer", + "DESCRIPTION": "Füge !D! Schaden zu. NL Erhalte 2 *Schutz Karten.", + "UPGRADE_DESCRIPTION": "Füge !D! Schaden zu. NL Erhalte 2 *Schutz+ Karten." + }, + + "Gremlin:GlitterGuard": { + "NAME": "Glitterschutz", + "DESCRIPTION": "Erhalte !M! *Schutz Karten. NL gremlin:Wechsle zum gremlin:Schildgremlin.", + "UPGRADE_DESCRIPTION": "Erhalte !M! *Schutz+ Karten. NL gremlin:Wechsle zum gremlin:Schildgremlin." + }, + + "Gremlin:GremlinArms": { + "NAME": "Gremlinarsenal", + "DESCRIPTION": "Aktiviere den Bonus des aktuellen Gremlins und gremlin:wechsle zu einem Gremlin deiner Wahl.", + "UPGRADE_DESCRIPTION": "Aktiviere den Bonus des aktuellen Gremlins zweimal und gremlin:wechsle zu einem Gremlin deiner Wahl." + }, + + "Gremlin:GremlinMeal": { + "NAME": "Muskelspiel", + "DESCRIPTION": "Erhalte !M! *temporäre Stärke." + }, + + "Gremlin:GremlinDance": { + "NAME": "Gremlintanz", + "DESCRIPTION": "Füge !D! Schaden zu. NL Hat verschiedene Zusatzeffekte, abhängig vom aktuellen Gremlin.", + "EXTENDED_DESCRIPTION": ["Füge !D! Schaden zu", + ". NL Trifft ALLE Gegner.", ". NL Der Gegner verliert für diesen Zug !M! Stärke.", + ". NL Erhalte !B! Block.", ". NL Ziehe !M! Karten.", ". NL Erhalte !M! gremlin:Esprit.", ". NL Erhalte !M! Stärke."] + }, + + "Gremlin:GremlinOffensive": { + "NAME": "Gremlinoffensive", + "DESCRIPTION": "Füge !D! Schaden zu. NL Erhalte *Gremlinoffensive. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Füge !D! Schaden zu. NL Erhalte *Gremlinoffensive+. NL Erschöpft." + }, + + "Gremlin:GremlinToss": { + "NAME": "Gremlinweitwurf", + "DESCRIPTION": "Erhalte !M! *temporäre *TP. Füge Schaden in Höhe der Summe des aktuellen *Blocks und der expansioncontent:temporären_TP zu.", + "UPGRADE_DESCRIPTION": "Erhalte !M! *temporäre *TP. Füge Schaden in Höhe der Summe des aktuellen *Blocks und der expansioncontent:temporären_TP zu.", + "EXTENDED_DESCRIPTION": [" NL (Fügt !D! Schaden zu.)"] + }, + + "Gremlin:GremlinWizard": { + "NAME": "Gremlinzeuberer", + "DESCRIPTION": "gremlin:Wechsle zum gremlin:Gremlinzauberer." + }, + + "Gremlin:Heckle": { + "NAME": "Zwischenrufen", + "DESCRIPTION": "Erhalte jedes Mal, wenn du einen Gegner debuffst, NL !M! expansioncontent:temporäre_TP." + }, + + "Gremlin:InfiniteBlocks": { + "NAME": "Schutzbunker", + "DESCRIPTION": "Nimm immer zu Beginn deines Zuges einen *Schutz in die Hand.", + "UPGRADE_DESCRIPTION": "Angeboren. NL Nimm immer zu Beginn deines Zuges einen *Schutz in die Hand." + }, + + "Gremlin:IrksomeBlow": { + "NAME": "Verbissener Hieb", + "DESCRIPTION": "Füge !D! Schaden zu. NL Stärke beeinflusst den Lästigen Hieb !M! Mal." + }, + + "Gremlin:Irritability": { + "NAME": "Reizbarkeit", + "DESCRIPTION": "Erhalte !B! Block. NL Erhalte !M! *temporäre Stacheln. NL gremlin:Wechsle zum gremlin:Wütenden_Gremlin." + }, + + "Gremlin:Jeer": { + "NAME": "Sticheln", + "DESCRIPTION": "Füge !D! Schaden zu. Erhalte !M! expansioncontent:temporäre_TP, wenn der Gegner einen Debuff hat." + }, + + "Gremlin:Kablamo": { + "NAME": "Simsalabim!", + "DESCRIPTION": "Füge ALLEN Gegnern 2 Mal !D! Schaden zu. NL Dieser Angriff verbraucht keinen gremlin:Esprit." + }, + + "Gremlin:LeaderChoice": { + "NAME": "Entscheidung", + "DESCRIPTION": "Deinen Kamereden opfern?" + }, + + "Gremlin:MadGremlin": { + "NAME": "Wütender Gremlin", + "DESCRIPTION": "gremlin:Wechsle zum gremlin:Wütenden_Gremlin." + }, + + "Gremlin:MakeshiftArmor": { + "NAME": "Schrottrüstung", + "DESCRIPTION": "Erhalte jedes Mal, wenn du 7 Angriffe spielst, 1 Artefakt.", + "UPGRADE_DESCRIPTION": "Erhalte !M! Artefakt. NL Erhalte jedes Mal, wenn du 7 Angriffe spielst, 1 Artefakt." + }, + + "Gremlin:Mockery": { + "NAME": "Posse", + "DESCRIPTION": "Wende !M! Schwach an. NL Erhalte !B! Block, wenn der Gegner mindestens 3 Schwach hat." + }, + + "Gremlin:Necromancy": { + "NAME": "Nekromantie", + "DESCRIPTION": "Erfordert 3 gremlin:Esprit. NL Verbrauche deinen gremlin:Esprit, um einen zufälligen Gremlin mit !M! TP wiederzubeleben. Erschöpft.", + "EXTENDED_DESCRIPTION": ["Nicht genug Esprit.", "Niemand ist tot.", "Kein Platz mehr."] + }, + + "Gremlin:Nob": { + "NAME": "Aristo-Form", + "DESCRIPTION": "Erhalte !M! *temporäre *TP. NL Mutiere zum gremlin:Gremlin-Aristo, bis deine expansioncontent:temporären_TP verbraucht sind." + }, + + "Gremlin:NobChoice": { + "NAME": "Entscheidung", + "DESCRIPTION": "Gold aufgeben?" + }, + + "Gremlin:PartyStick": { + "NAME": "Leuchtstab", + "DESCRIPTION": "Flüchtig. NL Unspielbar. NL Erhalte [E] , wenn du mit dieser Karte auf der Hand gremlin:wechselst.", + "UPGRADE_DESCRIPTION": "Unspielbar. NL Erhalte [E] , wenn du mit dieser Karte auf der Hand gremlin:wechselst.", + "EXTENDED_DESCRIPTION": ["Niemand darf mit dem Leuchtstab spielen."] + }, + + "Gremlin:Patsy": { + "NAME": "Sündenbock", + "DESCRIPTION": "Erhalte !B! Block. NL gremlin:Wechsle zum nächsten Gremlin." + }, + + "Gremlin:Pickpocket": { + "NAME": "Taschendiebstahl", + "DESCRIPTION": "Füge !D! Schaden zu. NL Erhalte !M! Gold. NL Erschöpft." + }, + + "Gremlin:PinNeedle": { + "NAME": "Stecknadel", + "DESCRIPTION": "Füge !D! Schaden zu. NL bronze:Setze !M! *Nadelstiche *ein. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Füge !D! Schaden zu. NL bronze:Setze !M! *Nadelstich+ Karten *ein. NL Erschöpft." + }, + + "Gremlin:Pinprick": { + "NAME": "Nadelstich", + "DESCRIPTION": "Füge !D! Schaden zu. NL Ziehe eine Karte. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Wenn du diese Karte ziehst, erhalte ein expansioncontent:Echo. NL Füge !D! Schaden zu. NL Ziehe eine Karte. NL Erschöpft." + }, + + "Gremlin:Polish": { + "NAME": "Aufpolieren", + "DESCRIPTION": "Messer fügen !M! mehr Schaden zu. NL *Schutz verleiht !M! Block zusätzlich." + }, + + "Gremlin:PourSalt": { + "NAME": "Wunde salzen", + "DESCRIPTION": "Füge !D! Schaden zu. Wenn der Gegner Schwach ist, reduziere es um 1, um !M! Messer zu erhalten." + }, + + "Gremlin:Presto": { + "NAME": "Hokuspokus!", + "DESCRIPTION": "Füge !D! Schaden zu. Erhalte !M! gremlin:Esprit." + }, + + "Gremlin:Pretaliation": { + "NAME": "Eilangriff", + "DESCRIPTION": "Füge 2 Mal !D! Schaden zu. NL Der Gegner greift dich mit !M! Schaden an." + }, + + "Gremlin:ProperTools": { + "NAME": "Adäquate Waffe", + "DESCRIPTION": "Füge !D! Schaden zu. Erhalte !M! *Schutz Karten, wenn der Gegner angreifen will. Erhalte anderenfalls !M! Messer." + }, + + "Gremlin:RageBreak": { + "NAME": "Gremlin-Ekstase", + "DESCRIPTION": "Verdopple deine Stärke. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Erhalte !B! Block. NL Verdopple deine Stärke. NL Erschöpft." + }, + + "Gremlin:Raid": { + "NAME": "Raubzug", + "DESCRIPTION": "Ziehe eine Karte für jeden lebenden Gremlin. NL Wirf !M! Karten ab.", + "UPGRADE_DESCRIPTION": "Ziehe eine Karte für jeden lebenden Gremlin. NL Wirf !M! Karten ab." + }, + + "Gremlin:Revel": { + "NAME": "Gelage", + "DESCRIPTION": "Erhalte [E] für jeden lebenden Gremlin." + }, + + "Gremlin:Rhythm": { + "NAME": "Rhythmus", + "DESCRIPTION": "gremlin:Wechsle zum nächsten Gremlin. Schnappe eine Basis Karte vom Nachziehstapel. Sie kostet diesen Zug 0." + }, + + "Gremlin:Rush": { + "NAME": "Bullenangriff", + "DESCRIPTION": "Flüchtig. NL Füge !D! Schaden zu. NL Erschöpft." + }, + + "Gremlin:Scatter": { + "NAME": "Zerstreuen", + "DESCRIPTION": "Wenn du das nächste Mal TP verlieren würdest, gremlin:wechsle stattdessen zu einem zufälligen Gremlin. NL Erschöpft." + }, + + "Gremlin:SecondVolley": { + "NAME": "Zweite Welle", + "DESCRIPTION": "Füge !D! Schaden zu. NL Erhalte ein Messer NL für jede Karte, die du in diesem Zug gespielt hast (Maximal bis deine Hand voll ist).", + "UPGRADE_DESCRIPTION": "Füge !D! Schaden zu. NL Erhalte ein Messer+ NL für jede Karte, die du in diesem Zug gespielt hast (Maximal bis deine Hand voll ist).", + "EXTENDED_DESCRIPTION": [ + " NL (", + " Karte gespielt.)", + " Karten gespielt.)" + ] + }, + + "Gremlin:ShadowShiv": { + "NAME": "Versteckte Messer", + "DESCRIPTION": "Erhalte ein Messer jedes Mal, wenn du einen Angriff spielst, der nicht erschöpft." + }, + + "Gremlin:ShankStone": { + "NAME": "Schaftstein", + "DESCRIPTION": "Unspielbar. NL Erhalte immer, wenn du diese Karte ziehst, !M! Messer.", + "EXTENDED_DESCRIPTION": ["Ich kann diese Karte nicht ausspielen."] + }, + + "Gremlin:SharpenBlades": { + "NAME": "Waffen schärfen", + "DESCRIPTION": "Alle Angriffe auf der Hand kosten diesen Zug 0.", + "UPGRADE_DESCRIPTION": "Ziehe eine Karte. NL Alle Angriffe auf der Hand kosten diesen Zug 0." + }, + + "Gremlin:ShieldGremlin": { + "NAME": "Schildgremlin", + "DESCRIPTION": "gremlin:Wechsle zum gremlin:Schildgremlin." + }, + + "Gremlin:ShowOfHands": { + "NAME": "Handzeichen", + "DESCRIPTION": "Erhalte !M! Block pro Handkarte.", + "UPGRADE_DESCRIPTION": "Ziehe eine Karte. NL Erhalte !M! Block pro Handkarte." + }, + + "Gremlin:ShowStopper": { + "NAME": "Höhepunkt", + "DESCRIPTION": "Kann nur gespielt werden, wenn du GENAU 7 gremlin:Esprit hast. NL Füge ALLEN Gegnern !M! Mal !D! Schaden zu.", + "EXTENDED_DESCRIPTION": ["Es Fehlt noch an Spannung.", "Das Timing wurde verpasst."] + }, + + "Gremlin:SkullBash": { + "NAME": "Schädelstoß", + "DESCRIPTION": "Flüchtig. NL Füge !D! Schaden zu. NL Wende !M! Verwundbar an. NL Erschöpft." + }, + + "Gremlin:SneakyGremlin": { + "NAME": "Schleich-Gremlin", + "DESCRIPTION": "gremlin:Wechsle zum gremlin:Schleichenden_Gremlin." + }, + + "Gremlin:Strike": { + "NAME": "Schlag", + "DESCRIPTION": "Füge !D! Schaden zu." + }, + + "Gremlin:Stupend": { + "NAME": "Beeindrucken", + "DESCRIPTION": "Erhalte !B! Block. NL Füge !D! Schaden zu. NL Block wird durch gremlin:Esprit zusätzlich erhöht." + }, + + "Gremlin:SupplyScrollCard": { + "NAME": "Versorgung", + "DESCRIPTION": "Erhalte per Zufall Messer und *Schutz (insgesamt !M!). NL Erschöpft." + }, + + "Gremlin:Tadah": { + "NAME": "Et voilà!", + "DESCRIPTION": "Erhalte einen *Schutz. NL gremlin:Wechsle zum gremlin:Gremlinzauberer.", + "UPGRADE_DESCRIPTION": "Erhalte einen *Schutz+. NL gremlin:Wechsle zum gremlin:Gremlinzauberer." + }, + + "Gremlin:TagTeam": { + "NAME": "Tag-Team", + "DESCRIPTION": "gremlin:Wechsle zu einem Gremlin deiner Wahl.", + "UPGRADE_DESCRIPTION": "Behalten. NL gremlin:Wechsle zu einem Gremlin deiner Wahl." + }, + + "Gremlin:TargetWeakness": { + "NAME": "Wunden treffen", + "DESCRIPTION": "Gegner mit Schwach erleiden !M! zusätzlichen Schaden." + }, + + "Gremlin:Tricksy": { + "NAME": "Trickkiste", + "DESCRIPTION": "Ziehe !M! Karten und wirf alle gezogenen nicht-Angriffe ab. NL gremlin:Wechsle zum gremlin:Schleichenden_Gremlin." + }, + + "Gremlin:TwistTheKnife": { + "NAME": "Zweischneidig", + "DESCRIPTION": "Füge !D! Schaden zu. NL Erhalte 1 Messer.", + "UPGRADE_DESCRIPTION": "Füge !D! Schaden zu. NL Erhalte 1 Messer+." + }, + + "Gremlin:ToeStub": { + "NAME": "Zehenstoßen", + "DESCRIPTION": "Füge !D! Schaden zu. Wende !M! Verwundbar an wenn der Gegner Schwach ist." + }, + + "Gremlin:Unforgiving": { + "NAME": "Nachtragen", + "DESCRIPTION": "Du kannst keine Stärke verlieren." + }, + + "Gremlin:Ward": { + "NAME": "Schutz", + "DESCRIPTION": "Erhalte !B! Block. NL Erschöpft." + }, + + "Gremlin:Whiz": { + "NAME": "Energie sammeln", + "DESCRIPTION": "Erhalte !M! gremlin:Esprit. Erhalte im nächsten Zug den *Ultimativen *Stoß. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Erhalte !M! gremlin:Esprit. Erhalte im nächsten Zug den *Ultimativen *Stoß+. NL Erschöpft." + }, + + "Gremlin:Wizardry": { + "NAME": "Zauberei", + "DESCRIPTION": "Erhalte zu Beginn jedes Zuges !M! gremlin:Esprit.", + "UPGRADE_DESCRIPTION": "Angeboren. NL Erhalte zu Beginn jedes Zuges !M! gremlin:Esprit." + }, + + "Gremlin:Placeholder": { + "NAME": "", + "DESCRIPTION": "", + "UPGRADE_DESCRIPTION": "", + "EXTENDED_DESCRIPTION": [""] + } +} diff --git a/src/main/resources/gremlinResources/localization/deu/CharacterStrings.json b/src/main/resources/gremlinResources/localization/deu/CharacterStrings.json new file mode 100644 index 0000000000..4c3902e616 --- /dev/null +++ b/src/main/resources/gremlinResources/localization/deu/CharacterStrings.json @@ -0,0 +1,15 @@ +{ + "Gremlin": { + "NAMES": [ + "Die Gremlins" + ], + "TEXT": [ + "Ein chaotischer Haufen Spire-Bewohner, NL der sich für die Suche nach Nahrung und Schätzen zusammengeschlossen hat.", + "NL Was für ein Festmahl! Ihr holt eure Messer raus." + ], + "KEYWORDS": [ + "Ein chaotischer Haufen Spire-Bewohner, NL der sich für die Suche nach Nahrung und Schätzen zusammengeschlossen hat.", + "NL Was für ein Festmahl! Ihr holt eure Messer raus." + ] + } +} \ No newline at end of file diff --git a/src/main/resources/gremlinResources/localization/deu/EventStrings.json b/src/main/resources/gremlinResources/localization/deu/EventStrings.json new file mode 100644 index 0000000000..9ca7b88a7a --- /dev/null +++ b/src/main/resources/gremlinResources/localization/deu/EventStrings.json @@ -0,0 +1,111 @@ +{ + "Gremlin:CursedTome": { + "OPTIONS": [ + "[Nehmen] #gErhalte #gdas #gBuch. #rAlle #rGremlins #rverlieren #r" + ] + }, + "Gremlin:BackToBasics": { + "NAME": "", + "DESCRIPTIONS": [ + "Ein flexibler Geist ist nicht von Zweifeln geplagt." + ], + "OPTIONS": [ + "[Willkür] #gErsetze alle #gSchlag und #gVerteidigen Karten durch #gMesser und #gSchutz.", + "[Gesperrt] Erfordert einen Schlag oder ein Verteidigen." + ] + }, + "Gremlin:KnowingSkull": { + "OPTIONS": [ + "[Information?] #gEnthülle #gden #gBoss. #rAlle #rGremlins #rverlieren #r", + "[Erfolg] #gErhalte #geine #gfarblose #gKarte. #rAlle #rGremlins #rverlieren #r", + "[Stärkung?] #gErhalte #geinen #gTrank. #rAlle #rGremlins #rverlieren #r", + " #gGold. #rAlle #rGremlins #rverlieren #r", + "[Wie komme ich hier raus?] #rAlle #rGremlins #rverlieren #r" + + ] + }, + "Gremlin:MatchingGame": { + "DESCRIPTIONS": [ + "„Hier sind #bzwölf Karten! Finde Paare, um sie zu behalten! #bFünf Versuche-“ NL NL „ #bZehn Versuche!“ wirfst du ein. NL NL Der Gremlin wirft dir einen bösen Blick zu. „ #bFÜNF Versuche!“ NL NL „ #bAcht.“ NL NL „ #bSechs,“ entgegnet er. „Hoffentlich werdet ihr #pverflucht.“ NL NL Du hoffst, dass er #pverflucht wird.", + "Du beendest das Spiel des Gremlins und siehst auf. NL Er hat sih aus dem STaub gemacht bevor du noch mehre #y~kostenlosen~ #y~Kram~ erbeuten konntest!", + "Ein Gremlin mischt wild Karten auf einem Tisch. Er bietet anscheinend #y~kostenlosen~ #y~Kram~ an. Du willst den #y~kostenlosen~ #y~Kram.~" + ] + }, + "Gremlin:Nest": { + "OPTIONS": [ + "[Einreihen] #gErhalte #gRitualdolch. #rAlle #rGremlins #rverlieren #r" + ] + }, + "Gremlin:ScrapOoze": { + "OPTIONS": [ + "[Hineingreifen] #rAlle #rGremlins #rverlieren #r", + "[Tiefer] #rAlle #rGremlins #rverlieren #r" + ] + }, + "Gremlin:ScrapOozeReplacement": { + "NAME": "Schrottschlamm", + "DESCRIPTIONS": [ + "Als ihr den Raum betretet, hört ihr ein ~Gurgeln~ und das @Zermahlen@ von Metallen. Es ist ein #ySchrottschleim! Diese lustigen kleinen Wesen finden allen möglichen #yKram. Und sie sind zu schwach und zu lamngsam um euch vom Diebstahl abzuhalten! Ihr wisst, wie man in sie hineingreifen kann, ohne sich an deren Säure zu verätzen. Allerdings ist es zeitintensiv und erfordert #rKonzentration.", + "Immer vorsichtig... ihr weicht den schrottigen und spitzen Dingen aus. Wenn es doch bloß nicht so #r@langweilig@ wäre. NL Aber wenn ihr dranbleibt, dann wartet ein wertvolles #yRelikt auf euch...", + "#gGeschafft! NL Nachdem ihr euch durch das Metall und die brennende Säure gewühlt habt, bekommt ihr endlich das #yRelikt zu fassen und werft es heraus. NL Ihr zeiht euch aus dem Schlamm heraus und macht euch mit eurem neuen Spielzeug davon.", + "Das ist viel zu #rlangweilig. Warum tun wir das nochmal?", + "Du entschließt dich, die Gegend zu verlassen. NL Der Schleim ist unaufmerksam, da er mit seiner Mahlzeit zufrieden ist." + ], + "OPTIONS": [ + "[Hineingreifen] #r", + "%: #rWerde #rverflucht #r- #rZerstreutheit. #g", + "%: #gFinde #gein #gRelikt.", + "[Verlassen]", + "[Ruhig bleiben] #r" + ] + }, + "Gremlin:SensoryStone": { + "OPTIONS": [ + "[Erinnern] #gWähle #g2 #gfarblose #gKarten #gfür #gdein #gDeck. #rAlle #rGremlins #rverlieren #r", + "[Erinnern] #gWähle #g3 #gfarblose #gKarten #gfür #gdein #gDeck. #rAlle #rGremlins #rverlieren #r" + ] + }, + "Gremlin:Trenchcoat": { + "NAME": "Verdächtiger Händler", + "DESCRIPTIONS": [ + "Du begegnest einer Gestalt, die verdächtig nach fünf Gremlins in einem Trenchcoat aussieht. NL „Hello, Reisender,“ erklingt eine quietschende Stimme. NL „Ich bin es, der #yfröhliche #yHändler, und sicher nicht fünf Gremlins in einem Trenchcoat. Hast du Interesse an meinen ~exquisiten~ ~Waren~ die bestimmt nicht gestohlen sind? Nur heute zum Sonderpreis!“", + "Du kannst einem Rabatt nicht widerstehen, nicht einmal von einer so verdächtigen Gestalt. NL Der Händler verchwindet augenblicklich nach der Transaktion. NL NL Einen Moment später hörst du eine Stimme aus der Ferne frustriert rufen: #r„Vermaledeite, #rdiebische #rGremlins!“.", + "Du hast kein Interesse daran, diesen Händler zu bereichern. Du behältst dein Geld. Der Händler verschwindet sofort nachdem er bemerkt hat, dass bei dir nichts zu holen ist." + ], + "OPTIONS": [ + "[Kaufen] #rVerliere #r", + " #rGold", + ". #gErhalte #g1 #gzufällige #gfarblose #gKarte.", + ". #gErhalte #g2 #gzufällige #gfarblose #gKarten.", + ". #gErhalte #g3 #gzufällige #gfarblose #gKarten.", + "[Verlassen]", + "[Gesperrt] Benötigt mindestens ", + " Gold.", + "[Ablehnen]" + ] + }, + "Gremlin:Vampires": { + "DESCRIPTIONS": [ + "Auf einer unbeleuchteten Straße trefft ihr auf ein paar vermummte Gestalten, die gerade mitten in irgendeinem dunklen Ritual sind. Als ihr näher kommt, wenden sie sich euch in gespenstischem Gleichklang zu. Der Größte von ihnen entblößt Fangzähne und streckt eine lange, blasse Hand nach euch aus. NL ~„Schließt~ ~euch~ ~uns~ ~an,~ ~ihr~ ~Gierigen,~ ~und~ ~spürt~ ~die~ ~Wärme~ ~des~ ~Spire.“~" + ] + }, + "Gremlin:WheelGame": { + "DESCRIPTIONS": [ + "Er hechtet nach dir, doch genau das hast du erwartet. NL Du entzweist ihn bevor er die Gelegenheit bekommt sein Messer zu benutzen. NL Während du die Beute an dich nimmst, verschwindet das Glücksrad vor deinen Augen, bevor du es an dich nehmen kannst." + ], + "OPTIONS": [ + "[Preis!] #gPRÄVENTIVSCHLAG!", + "[Plündern]" + ] + }, + "Gremlin:WingStatue": { + "OPTIONS": [ + "[Beten] #gEntferne #geine #gKarte #gaus #gdeinem #gDeck. #rAlle #rGremlins #rverlieren #r" + ] + }, + "Gremlin:WorldOfGoop": { + "OPTIONS": [ + " #gGold. #rAlle #rGremlins #rverlieren #r" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/gremlinResources/localization/deu/KeywordStrings.json b/src/main/resources/gremlinResources/localization/deu/KeywordStrings.json new file mode 100644 index 0000000000..1d2e3119fb --- /dev/null +++ b/src/main/resources/gremlinResources/localization/deu/KeywordStrings.json @@ -0,0 +1,104 @@ +[ + { + "NAMES": [ + "agonie", + "agony" + ], + "PROPER_NAME": "Agonie", + "DESCRIPTION": "Wesen in Agonie fügen mit Angriffen #b80% weniger Schaden zu." + }, + { + "NAMES": [ + "verkrüppelt", + "verkrüppeln", + "verkrüpple", + "cripple" + ], + "PROPER_NAME": "Verkrüppelt", + "DESCRIPTION": "Verkrüppelte Gegner können kein #ySchwach verlieren. Sie verlieren am Ende ihrer Züge TP in Höhe ihres #ySchwach [REMOVE_SPACE]." + }, + { + "NAMES": [ + "echos", + "echo", + "echoes" + ], + "PROPER_NAME": "Echo", + "DESCRIPTION": "Echos sind Kopien von Karten, die zusätzlich #yflüchtig sind und #yerschöpfen. Von einem Echo kann kein Echo erstellt werden." + }, + { + "NAMES": [ + "fetter gremlin", "fetter_gremlin", "fetten gremlin", "fetten_gremlin", "fat gremlin", "fat_gremlin" + ], + "PROPER_NAME": "Fetter Gremlin", + "DESCRIPTION": "Wende nach dem Ausspielen eines Angriffs #b1 #ySchwach pro Treffer an." + }, + { + "NAMES": [ + "gremlinzauberer", "gremlin wizard", "gremlin_wizard" + ], + "PROPER_NAME": "Gremlinzauberer", + "DESCRIPTION": "Erhalte nach dem Ausspielen einer Fertigkeit #b1 #yEsprit [REMOVE_SPACE]." + }, + { + "NAMES": [ + "wütender gremlin", "wütender_gremlin", "wütenden gremlin", "wütenden_gremlin", "mad gremlin", "mad_gremlin" + ], + "PROPER_NAME": "Wütender Gremlin", + "DESCRIPTION": "Erhalte jdes Mal wenn du angegriffen wirst #b2 #ytemporäre #yStärke pro Treffer." + }, + { + "NAMES": [ + "schildgremlin", "shield gremlin", "shield_gremlin" + ], + "PROPER_NAME": "Schildgremlin", + "DESCRIPTION": "Erhalte nach dem Ausspielen einer Fertigkeit #b2 #yBlock [REMOVE_SPACE]." + }, + { + "NAMES": [ + "schleichender gremlin", "schleichender_gremlin", "schleichenden gremlin", "schleichenden_gremlin", "sneaky gremlin", "sneaky_gremlin" + ], + "PROPER_NAME": "Schleichender Gremlin", + "DESCRIPTION": "Angriffe, die 0 kosten, fügen #b2 zusätzlichen Schaden zu. Füge nach dem Ausspielen eines Angriffs einem zufälligen Gegner #b2 Schaden zu." + }, + { + "NAMES": [ + "wechseln", + "wechsel", + "wechselst", + "gewechselt", + "wechsle", + "swap" + ], + "PROPER_NAME": "Auswechseln", + "DESCRIPTION": "Effekte, die den führenden Gremlin austauschen. Wenn es kein legales Ziel für den Tausch gibt, passiert nichts." + }, + { + "NAMES": [ + "esprit", + "esprits", + "wiz" + ], + "PROPER_NAME": "Esprit", + "DESCRIPTION": "Bei mindestens 3 Esprit verbraucht der nächste Angriff den geamten Vorrat und fügt dabei #b7 Schaden mehr zu." + }, + { + "NAMES": [ + "stehlen", + "stiehl", + "gestohlen", + "steal" + ], + "PROPER_NAME": "Stehlen", + "DESCRIPTION": "Der Gegner verliert eine bestimmte Menge eines Buffs. Du erhältsts diese Menge des selben Buffs." + }, + { + "NAMES": [ + "aristo", + "gremlin-aristo", + "nob" + ], + "PROPER_NAME": "Gremlin-Aristo", + "DESCRIPTION": "Erhalte zu Beginn jedes Zuges je #b1 #yGebrüll, #ySchädelstoß und #yBullenangriff." + } +] diff --git a/src/main/resources/gremlinResources/localization/deu/MonsterStrings.json b/src/main/resources/gremlinResources/localization/deu/MonsterStrings.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/src/main/resources/gremlinResources/localization/deu/MonsterStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/gremlinResources/localization/deu/OrbStrings.json b/src/main/resources/gremlinResources/localization/deu/OrbStrings.json new file mode 100644 index 0000000000..95c2b6145a --- /dev/null +++ b/src/main/resources/gremlinResources/localization/deu/OrbStrings.json @@ -0,0 +1,42 @@ +{ + "Gremlin:FatGremlin": { + "NAME": "Fetter Gremlin", + "DESCRIPTION": [ + "Wende nach dem Ausspielen eines Angriffs #b", + " #ySchwach pro Treffer an." + ] + }, + + "Gremlin:GremlinWizard": { + "NAME": "Gremlinzauberer", + "DESCRIPTION": [ + "Erhalte nach dem Ausspielen einer Fertigkeit #b", + " #yEsprit [REMOVE_SPACE]." + ] + }, + + "Gremlin:MadGremlin": { + "NAME": "Wütender Gremlin", + "DESCRIPTION": [ + "Erhalte jdes Mal wenn du angegriffen wirst #b", + " #ytemporäre #yStärke pro Treffer." + ] + }, + + "Gremlin:ShieldGremlin": { + "NAME": "Schildgremlin", + "DESCRIPTION": [ + "Erhalte nach dem Ausspielen einer Fertigkeit #b", + " #yBlock [REMOVE_SPACE]." + ] + }, + + "Gremlin:SneakyGremlin": { + "NAME": "Schleichender Gremlin", + "DESCRIPTION": [ + "Angriffe, die 0 kosten, fügen #b", + " zusätzlichen Schaden zu. Füge nach dem Ausspielen eines Angriffs einem zufälligen Gegner #b", + " Schaden zu." + ] + } +} diff --git a/src/main/resources/gremlinResources/localization/deu/PotionStrings.json b/src/main/resources/gremlinResources/localization/deu/PotionStrings.json new file mode 100644 index 0000000000..192da5451a --- /dev/null +++ b/src/main/resources/gremlinResources/localization/deu/PotionStrings.json @@ -0,0 +1,29 @@ +{ + "gremlin:GremlinPotion": { + "NAME": "Eau de Grem", + "DESCRIPTIONS": [ + "Aktiviere alle #b5 Gremlin-Boni #b", + " Mal." + ] + }, + "gremlin:NecromancyPotion": { + "NAME": "Gremlinflasche", + "DESCRIPTIONS": [ + "Belebe einen zufälligen Gremlin mit #b", + "% der max. TP wieder." + ] + }, + "gremlin:SwapPotion": { + "NAME": "Duplikatenflasche", + "DESCRIPTIONS": [ + "#yWechsle zu einem zufälligen Gremlin." + ] + }, + "gremlin:WizPotion": { + "NAME": "Flüssiger Elan", + "DESCRIPTIONS": [ + "Erhalte #b", + " #yElan [REMOVE_SPACE]." + ] + } +} \ No newline at end of file diff --git a/src/main/resources/gremlinResources/localization/deu/PowerStrings.json b/src/main/resources/gremlinResources/localization/deu/PowerStrings.json new file mode 100644 index 0000000000..c7afb53b83 --- /dev/null +++ b/src/main/resources/gremlinResources/localization/deu/PowerStrings.json @@ -0,0 +1,203 @@ +{ + "Gremlin:Agony": { + "NAME": "Agonie", + "DESCRIPTIONS": [ + "#yAngriffe fügen #b", + "% weniger Schaden für #b", + " Zug zu.", + " Züge zu." + ] + }, + "Gremlin:Bang": { + "NAME": "Voller Esprit", + "DESCRIPTIONS": [ + "Der nächste Angriff verbraucht dein gesamtes #yEsprit und fügt dabei #b", " Schaden mehr zu." + ] + }, + "Gremlin:Bashed": { + "NAME": "Niedergeschmettert", + "DESCRIPTIONS": [ + "Verliert in diesem Zug jedes Mal, wenn du #yBlock erhältst, #b", " TP." + ] + }, + "Gremlin:BubbleBarrier": { + "NAME": "Schildblase", + "DESCRIPTIONS": [ + "Erhalte #b", " #yBlock für jede Karte, die du in diesem Zug ausspielst." + ] + }, + "Gremlin:CongaLine": { + "NAME": "Polonaise", + "DESCRIPTIONS": [ + "Erhalte zu Beginn deines Zuges ", + " und #ywechsle zum nächsten Gremlin." + ] + }, + "Gremlin:Crippled": { + "NAME": "Gezeichnet", + "DESCRIPTIONS": [ + "Wenn dieser Gegner #ySchwach erleidet, verliert er #b", + " TP." + ] + }, + "Gremlin:Encore": { + "NAME": "Zugabe", + "DESCRIPTIONS": [ + "Der Verbauch von #yEsprit fügt zusätzlich #b", " Schaden zu." + ] + }, + "Gremlin:Enthusiasm": { + "NAME": "Enthusiasmus", + "DESCRIPTIONS": [ + "Ziehe immer wenn du #ywechselst #b", + " Karte.", + " Karten." + ] + }, + "Gremlin:FatGremlin": { + "NAME": "Fetter Gremlin", + "DESCRIPTIONS": [ + "Wende nach dem Ausspielen eines Angriffs #b", + " #ySchwach pro Treffer an." + ] + }, + "Gremlin:Flex": { + "NAME": "Temporäre Stärke", + "DESCRIPTIONS": [ + "Am Ende deines Zuges verlierst du #b", + " #yStärke [REMOVE_SPACE]." + ] + }, + "Gremlin:Furious": { + "NAME": "Ausgeflippt", + "DESCRIPTIONS": [ + "Immer wenn du in diesem Zug #yBlock erhalten würdest, füge stattdessen ALLEN Gegnern Schaden in derselben Höhe zu." + ] + }, + "Gremlin:GremlinNob": { + "NAME": "Gremlin-Aristo", + "DESCRIPTIONS": [ + "Erhalte zu Beginn jedes Zuges #b3 Gremlin-Aristo Karten. Du kannst nicht mehr #ywechseln [REMOVE_SPACE]. Wenn deine #ytemporären #yTP verbraucht sind, verhindere Schaden der darüber hinausgeht und verwandle dich zurück." + ] + }, + "Gremlin:GremlinWizard": { + "NAME": "Gremlinzauberer", + "DESCRIPTION": [ + "Erhalte nach dem Ausspielen einer Fertigkeit #b", + " #yEsprit [REMOVE_SPACE]." + ] + }, + "Gremlin:Heckle": { + "NAME": "Zwischenrufe", + "DESCRIPTIONS": [ + "Erhalte jedes Mal, wenn du einen Gegner debuffst, #b", + " #ytemporäre #yTP [REMOVE_SPACE]." + ] + }, + "Gremlin:InfiniteBlocks": { + "NAME": "Schutzbunker", + "DESCRIPTIONS": [ + "Zu Beginn deines Zuges erhältst du #b", + " #ySchutz.", + " #ySchutz Karten." + ] + }, + "Gremlin:MadGremlin": { + "NAME": "Wütender Gremlin", + "DESCRIPTION": [ + "Erhalte jdes Mal wenn du angegriffen wirst #b", + " #ytemporäre #yStärke pro Treffer." + ] + }, + "Gremlin:MakeshiftArmor": { + "NAME": "Schrottrüstung", + "DESCRIPTIONS": [ + "Spiele noch #b", + " Angriff, um #b", + " Angriffe, um #b", + " #yArtefakt zu erhalten." + ] + }, + "Gremlin:MakingMagic": { + "NAME": "Jetzt wird es magisch", + "DESCRIPTIONS": [ + "Erhalte zu Beginn deines nächsten Zuges #b", + " #yUltimativen #yStoß [REMOVE_SPACE].", + " #yUltimative #yStöße [REMOVE_SPACE]." + ] + }, + "Gremlin:MakingMoreMagic": { + "NAME": "Jetzt wird es magisch+", + "DESCRIPTIONS": [ + "Erhalte zu Beginn deines nächsten Zuges #b", + " #yUltimativer #yStoß+ Karte.", + " #yUltimativer #yStoß+ Karten." + ] + }, + "Gremlin:Polish": { + "NAME": "Aufpoliert", + "DESCRIPTIONS": [ + "#ySchutz verleiht #b", + " zusätzlichen #yBlock [REMOVE_SPACE]." + ] + }, + "Gremlin:Scatter": { + "NAME": "Verteilen", + "DESCRIPTIONS": [ + "Noch #b", + " ein Mal wenn du TP verlieren würdest, #ywechsle stattdessen zu einem zufälligen Gremlin.", + " Mal wenn du TP verlieren würdest, #ywechsle stattdessen zu einem zufälligen Gremlin." + ] + }, + "Gremlin:ShadowShiv": { + "NAME": "Versteckte Messer", + "DESCRIPTIONS": [ + "Immer wenn du einen Angriff spielst der nicht #yErschöpft, erhalte #b", + " #yMesser [REMOVE_SPACE].", + " #yMesser [REMOVE_SPACE]." + ] + }, + "Gremlin:ShieldGremlin": { + "NAME": "Schildgremlin", + "DESCRIPTION": [ + "Erhalte nach dem Ausspielen einer Fertigkeit #b", + " #yBlock [REMOVE_SPACE].", + "" + ] + }, + "Gremlin:SneakyGremlin": { + "NAME": "Schleichender Gremlin", + "DESCRIPTION": [ + "Angriffe, die 0 kosten, fügen #b", + " zusätzlichen Schaden zu. Füge nach dem Ausspielen eines Angriffs einem zufälligen Gegner #b", + " Schaden zu." + ] + }, + "Gremlin:TargetWeakness": { + "NAME": "Wunden Treffen", + "DESCRIPTIONS": [ + "Füge Gegnern mit #ySchwach #b", + " zusätzlichen Schaden zu." + ] + }, + "Gremlin:Unforgiving": { + "NAME": "Nachtragend", + "DESCRIPTIONS": [ + "Du kannst keine #yStärke verlieren." + ] + }, + "Gremlin:Wiz": { + "NAME": "Esprit", + "DESCRIPTIONS": [ + "Energie sammeln... NL Noch #b", " Esprit benötigt.", " Esprit benötigt.", + "Bereit zum Zaubern." + ] + }, + "Gremlin:Wizardry": { + "NAME": "Zauberei", + "DESCRIPTIONS": [ + "Erhalte zu Beginn deines Zuges #b", + " #yEsprit [REMOVE_SPACE]." + ] + } +} \ No newline at end of file diff --git a/src/main/resources/gremlinResources/localization/deu/RelicStrings.json b/src/main/resources/gremlinResources/localization/deu/RelicStrings.json new file mode 100644 index 0000000000..cdabe4ff64 --- /dev/null +++ b/src/main/resources/gremlinResources/localization/deu/RelicStrings.json @@ -0,0 +1,143 @@ +{ + "Gremlin:ImpeccablePecs": { + "NAME": "Einwandfreie Muskeln", + "FLAVOR": "Glorreich.", + "DESCRIPTIONS": [ + "Erhalte immer, wenn du #yStärke erhältst, die gleiche Anzahl an #ytemporären #yTP [REMOVE_SPACE]. NL Beginne jeden Kampf mit #b1 #yStärke [REMOVE_SPACE]." + ] + }, + "Gremlin:FragmentationGrenade": { + "NAME": "Splittegranate", + "FLAVOR": "Niemand wagt es den Gremlin zu fragen, wo er das her hat.", + "DESCRIPTIONS": [ + "Schaden, der zufälligen Gegnern zugefügt wird, wird um #b", " erhöht." + ] + }, + "Gremlin:GremlinBomb": { + "NAME": "Gremlinbombe", + "FLAVOR": "Gremlins haben das zweifelhafte Talent, gefährliche Gegenstände zu finden. Manchmal überleben sie sogar die Plünderung besagter Gegenstände.", + "DESCRIPTIONS": [ + "Immer wenn ein Gremlin stirbt, füge ALLEN Gegnern #b", " Schaden zu." + ] + }, + "Gremlin:GremlinGravestone": { + "NAME": "Gremlin-Grabstein", + "FLAVOR": "Wohin gehen Gremlins nach den Tod? Egal wohin - es ist jedenfalls verdammt noch mal nicht weit genug.", + "DESCRIPTIONS": [ + "Tote Gremlins können als kleine Aktion am Lagerfeuer wiederbelebt werden." + ] + }, + "Gremlin:GremlinKnob": { + "NAME": "Horn des Anführers", + "FLAVOR": "Der Gremlin mit dem besten Horn ist so lange der Anführer seiner Gruppe, bis ein anderer es ihm gestohlen hat.", + "DESCRIPTIONS": [ + "Zu Beginn jedes Kampfes, ziehe #b1 Karte, erhalte [E] , und #ygremlin:wechsle zum nächsten Gremlin." + ] + }, + "Gremlin:GremlinKnobUpgrade": { + "NAME": "Krone des Anführers", + "FLAVOR": "Je schöner das Symbol der Macht, desto häufiger wird es gestohlen.", + "DESCRIPTIONS": [ + "Ersetzt ", + ". NL Wenn du das erste Mal im Zug den Nachziehstapel mischst, ziehe #b1 Karte, erhalte [E] , und #ygremlin:wechsle zum nächsten Gremlin." + ] + }, + "Gremlin:GremlinMask": { + "NAME": "Gremlin-Visage", + "FLAVOR": "Für Gremlingruppen ist sie ein Statussymbol.", + "DESCRIPTIONS": [ + "Beginne jeden Kampf mit #b1 #ytemporärer #yStärke." + ] + }, + "Gremlin:LeaderVoucher": { + "NAME": "Gutschein des Anführers", + "FLAVOR": "Gutschein für 1 Gremlin", + "DESCRIPTIONS": [ + "Erhalte in deinem Zug [E]. NL Verliere beim Aufheben einen Gremlin #rfür #rden #rRest #rdes #rRuns.", + " NL #r(Fetter #rGremlin)", + " NL #r(Gremlinzauberer)", + " NL #r(Wütender #rGremlin)", + " NL #r(Schildgremlin)", + " NL #r(Schleichender #rGremlin)" + ] + }, + "Gremlin:MagicalMallet": { + "NAME": "Zauberhammer", + "FLAVOR": "Stößt Zehen doppelt so hart.", + "DESCRIPTIONS": [ + "Bis zu #b3 Mal im Zug erhältst du beim Anwenden von #ySchwach zusätzlich #b1 #ygremlin:Esprit [REMOVE_SPACE]." + ] + }, + "Gremlin:PricklyShields": { + "NAME": "Rüstungsnägel", + "FLAVOR": "Gremlins nutzen fast jeden Unrat, den sie finden, als Waffe oder Rüstung. Manchmal sogar als Beides.", + "DESCRIPTIONS": [ + "Füge immer wenn du #yBlock erhältst einem zufälligen Gegner #b"," Schaden zu." + ] + }, + "Gremlin:ShortStature": { + "NAME": "Kleine Statue", + "FLAVOR": "Es ist überraschend, wie gut sie funktioniert.", + "DESCRIPTIONS": [ + "Wenn das erste Mal im Kampf ein Gremlin sterben würde, werden seine TP stattdessen um #b75% der max. TP geheilt.", + "Bereits in diesem Kampf aktiviert." + ] + }, + "Gremlin:StolenMerchandise": { + "NAME": "Diebesgut", + "FLAVOR": "„Vermaledeite, diebische Gremlins!“", + "DESCRIPTIONS": [ + "Erhalte immer, wenn du #ygremlin:wechselst [REMOVE_SPACE], ein #yEcho einer zufälligen farblosen Karte. NL Der Händler erhält zu Beginn jedes Kampfes #b", + " #yStärke [REMOVE_SPACE].", + "Ihr diebischen, verdammten Tunichtgute!", + "Feiges Ungezifer!", + "Gierige grabschende Gremlins!" + ] + }, + "Gremlin:SupplyScroll": { + "NAME": "Versorgungsschrift", + "FLAVOR": "Eine erstaunlich detaillierte Inventurliste der von der Gruppe angehäuften Gegenstände.", + "DESCRIPTIONS": [ + "Ziehe zu Beginn deines dritten Zuges #b2 Karten und erhalte NL [E] [E] ." + ] + }, + "Gremlin:TagTeamwork": { + "NAME": "Tag-Teamarbeit", + "FLAVOR": "TEAM - Toll, ein anderer macht's.", + "DESCRIPTIONS": [ + "Immer wenn du #yTag-Team ziehst, ziehe eine Karte. NL Nimm beim Aufheben zwei #yTag-Team Karten in dein Deck auf." + ] + }, + "Gremlin:WizardHat": { + "NAME": "Magierhut", + "FLAVOR": "Die dazu passende Robe wurde schon längst gestohlen.", + "DESCRIPTIONS": [ + "Immer wenn du #ygremlin:Esprit verbrauchst, entferne einen zufälligen Debuff." + ] + }, + "Gremlin:WizardStaff": { + "NAME": "Zauberstab", + "FLAVOR": "Der Stolz und Ruhm eines jeden Gremlinzauberers. Diese Stäbe werden oft von feindlichen Gruppen gestohlen.", + "DESCRIPTIONS": [ + "Der Verbauch von #ygremlin:Esprit fügt zusätzlich #b7 Schaden zu." + ] + }, + "Gremlin:WoundPoker": { + "NAME": "Wundenpiekser", + "FLAVOR": "Tut es weh, wenn ich das mache?", + "DESCRIPTIONS": [ + "Füge am Ende jedes Zuges jedem Gegner mit #ySchwach #b", " Schaden zu." + ] + }, + "Gremlin:PatchFixes": { + "NAME": "", + "FLAVOR": "", + "DESCRIPTIONS": [ + "Erhöhe beim Aufheben die max. TP jedes Gremlins um #b", + "Anstatt eine Karte deinem Deck hinzuzufügen, können alle Gremlins #b+1 max. TP erhalten.", + " #yGold. NL Erhöhe die max. TP jedes Gremlins um #b", + "Erhöhe die max. TP aller Gremlins nach jedem fünften Kampf um #b1.", + "+1 max. TP" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/gremlinResources/localization/deu/RunModStrings.json b/src/main/resources/gremlinResources/localization/deu/RunModStrings.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/src/main/resources/gremlinResources/localization/deu/RunModStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/gremlinResources/localization/deu/UIStrings.json b/src/main/resources/gremlinResources/localization/deu/UIStrings.json new file mode 100644 index 0000000000..e053945ba0 --- /dev/null +++ b/src/main/resources/gremlinResources/localization/deu/UIStrings.json @@ -0,0 +1,74 @@ +{ + "Gremlin:NobFight": { + "TEXT": [ + "HER MIT DEN SEELEN, WINZLINGE!", + "Hey, Hitzkopf. Du kommst jetzt mit mir.", + "Hey, Fettklops. Du kommst jetzt mit mir.", + "Hey, Kleine. Du kommst jetzt mit mir.", + "Hey, Zappelphilipp. Du kommst jetzt mit mir.", + "Hey. Hohlkopf. Du kommst jetzt mit mir.", + "Hey. Du kommst jetzt mit mir.", + "Ich muss wählen." + ] + }, + "Gremlin:GremFight": { + "TEXT": [ + "Schlagt ihre Schädel ein!", + "Macht sie fertig!", + "Plündert ihr Zeug!" + ] + }, + "Gremlin:ResurrectOption": { + "TEXT": [ + "Wiederbeleben", + "(Kleine Aktion) Bring einen Gremlin von den Toten zurück.", + "Erfordert einen toten Gremlin.", + "Das Grab wurde bereits geschändet.", + "ICH BIN WIEDER DA!", + "ICH BIN ZURÜCK!", + "BEREIT FÜR MEHR MISSETATEN!" + ] + }, + "Gremlin:RestOption": { + "TEXT": [ + "Ausruhen", + "Heile jeden Gremlin um 100% der max. TP (", + " TP von ", + "Heile jeden Gremlin um 30% der max. TP (", + "Sind Gremlins tot, wird ein zufälliger wiederbelebt." + ] + }, + "Gremlin:Swap": { + "TEXT": [ + "KEIN WECHSEL!", + "ARISTO IST DER BOSS!", + "ARISTO HAT FÜR IMMER DAS SAGEN!" + ] + }, + "Gremlin:ArtMode": { + "TEXT": [ + "Gremlinbild-Modus", + "Die Gremlins machen sich auf den Kartentexten breit und erleichtern so das Finden bzw. Verstehen von Synergien. Hat keine Auswirkungen auf die Karteneffekte." + ] + }, + "Gremlin:BonusGold": { + "TEXT": [ + " Gold (Bonus)" + ] + }, + "Gremlin:MakeEchoAction": { + "TEXT": [ + "Echo: " + ] + }, + "Gremlin:EventReplacementStrings": { + "TEXT": [ + "#rVerliere #r", + " #rTP", + "#rAlle #rGremlins #rverlieren #r", + "#gErhalte #g", + " #gTP", + "#gAlle #gGremlins #gerhalten #g" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/gremlinResources/localization/eng/CardStrings.json b/src/main/resources/gremlinResources/localization/eng/CardStrings.json index f0a6b741ad..784c09fc73 100644 --- a/src/main/resources/gremlinResources/localization/eng/CardStrings.json +++ b/src/main/resources/gremlinResources/localization/eng/CardStrings.json @@ -308,7 +308,7 @@ "Gremlin:Pickpocket": { "NAME": "Pickpocket", - "DESCRIPTION": "Deal !D! damage. NL Target loses !M! Strength this turn, twice. NL Gain !blamage! Gold. NL Exhaust." + "DESCRIPTION": "Deal !D! damage. NL Gain !M! Gold. NL Exhaust." }, "Gremlin:PinNeedle": { diff --git a/src/main/resources/gremlinResources/localization/eng/KeywordStrings.json b/src/main/resources/gremlinResources/localization/eng/KeywordStrings.json index b626adc88c..0c4a0150c6 100644 --- a/src/main/resources/gremlinResources/localization/eng/KeywordStrings.json +++ b/src/main/resources/gremlinResources/localization/eng/KeywordStrings.json @@ -19,7 +19,7 @@ "echoes" ], "PROPER_NAME": "Echo", - "DESCRIPTION": "Echoes are copies of cards with #yEthereal and #yExhaust [REMOVE_SPACE]." + "DESCRIPTION": "Echoes are copies of cards with #yEthereal and #yExhaust. Echoes cannot be Echoed." }, { "NAMES": [ diff --git a/src/main/resources/gremlinResources/localization/eng/RelicStrings.json b/src/main/resources/gremlinResources/localization/eng/RelicStrings.json index 63817f56a6..60333b34be 100644 --- a/src/main/resources/gremlinResources/localization/eng/RelicStrings.json +++ b/src/main/resources/gremlinResources/localization/eng/RelicStrings.json @@ -3,7 +3,7 @@ "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." ] }, "Gremlin:FragmentationGrenade": { diff --git a/src/main/resources/gremlinResources/localization/fra/CardStrings.json b/src/main/resources/gremlinResources/localization/fra/CardStrings.json index b16436dfe2..195c14b686 100644 --- a/src/main/resources/gremlinResources/localization/fra/CardStrings.json +++ b/src/main/resources/gremlinResources/localization/fra/CardStrings.json @@ -6,19 +6,19 @@ "Gremlin:ArmsTheft": { "NAME": "Vol d'armes", - "DESCRIPTION": "gremlin:Volez !M! de Force. NL Épuisement." + "DESCRIPTION": "Appliquez !M! de Faiblesse. NL gremlin:Volez !M! de Force. NL Épuisement." }, "Gremlin:Astound": { "NAME": "Étonnement", - "DESCRIPTION": "Gagnez !B! d'Armure. NL Si vous avez 3 de gremlin:Magie ou plus, ajoutez !M! Protections dans votre main.", - "UPGRADE_DESCRIPTION": "Gagnez !B! d'Armure. NL Si vous avez 3 de gremlin:Magie ou plus, ajoutez !M! Protections Améliorées dans votre main." + "DESCRIPTION": "Gagnez !B! d'Armure. NL Si vous avez 3 de gremlin:Magie ou plus, obtenez !M! *Protections.", + "UPGRADE_DESCRIPTION": "Gagnez !B! d'Armure. NL Si vous avez 3 de gremlin:Magie ou plus, ajoutez !M! *Protections Améliorées." }, "Gremlin:Bang": { "NAME": "Bang", - "DESCRIPTION": "Infligez !D! dégâts !M! fois. Ajoutez une copie de Wizzz dans votre défausse. NL Épuisement.", - "UPGRADE_DESCRIPTION": "Infligez !D! dégâts !M! fois. Ajoutez une copie de Wizzz Améliorée dans votre défausse. NL Épuisement." + "DESCRIPTION": "Infligez !D! dégâts !M! fois. Ajoutez un *Wizzz dans votre défausse. NL Épuisement.", + "UPGRADE_DESCRIPTION": "Infligez !D! dégâts !M! fois. Ajoutez un *Wizzz+ dans votre défausse. NL Épuisement." }, "Gremlin:Bellow": { @@ -28,7 +28,7 @@ "Gremlin:BrokenShin": { "NAME": "Casse-tibias", - "DESCRIPTION": "Appliquez gremlin:Agonie pour toutes les !M! piles de Faiblesse que l'ennemi a. NL Épuisement." + "DESCRIPTION": "Appliquez de gremlin:l'Agonie pour toutes les !M! piles de Faiblesse que l'ennemi a. NL Épuisement." }, "Gremlin:BubbleBarrier": { @@ -38,7 +38,7 @@ "Gremlin:BulkUp": { "NAME": "Gonflette", - "DESCRIPTION": "Gagnez !M! de PV Temporaires. NL gremlin:Permutez vers le gremlin:Gros_Diablotin." + "DESCRIPTION": "Gagnez !M! expansioncontent:PV_Temporaires. NL gremlin:Permutez vers le gremlin:Gros_Diablotin." }, "Gremlin:BurlyBlow": { @@ -52,20 +52,19 @@ }, "Gremlin:Changeo": { - "NAME": "Change-o!", + "NAME": "Pouf !", "DESCRIPTION": "Gagnez !B! d'Armure et !M! de gremlin:Magie." }, "Gremlin:CongaLine": { - "NAME": "Ligne de Conga", - "DESCRIPTION": "Au début de votre tour, gagnez [E] et gremlin:Permutez au prochain Diablotin.", - "UPGRADE_DESCRIPTION": "Inné. NL Au début de votre tour, gagnez [E] et gremlin:Permutez au prochain Diablotin." + "NAME": "Chenille", + "DESCRIPTION": "Au début de votre tour, gagnez [E] et gremlin:Permutez vers le prochain Diablotin.", + "UPGRADE_DESCRIPTION": "Inné. NL Au début de votre tour, gagnez [E] et gremlin:Permutez vers le prochain Diablotin." }, "Gremlin:CounterStrike": { - "NAME": "Contre frappe", - "DESCRIPTION": "Infligez !D! dégâts. Si l'ennemi a l'intention d'attaquer, ajoutez !M! Protections dans votre main.", - "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. Si l'ennemi a l'intention d'attaquer, ajoutez !M! Protections Améliorées dans votre main." + "NAME": "Contre Frappe", + "DESCRIPTION": "Infligez !D! dégâts. Si l'ennemi a l'intention d'attaquer, déclenchez le Bonus du Diablotin actuel !M! fois." }, "Gremlin:CowerChoice": { @@ -77,16 +76,16 @@ "Gremlin:CowerChoiceB": { "NAME": "Battre en retraite", "DESCRIPTION": "Perdez définitivement votre Diablotin le plus à l'arrière.", - "EXTENDED_DESCRIPTION": ["Bien. Vous pouvez dégager le reste !", "Ouais! Dégagez!"] + "EXTENDED_DESCRIPTION": ["Bien. Le reste, dégagez !", "Ouais! Dégagez !"] }, "Gremlin:DaggerDance": { - "NAME": "Danse de dagues", + "NAME": "Danse des dagues", "DESCRIPTION": "Infligez !D! dégâts à TOUS les ennemis !M! fois." }, "Gremlin:Dazzle": { - "NAME": "Aveuglement", + "NAME": "Éblouissement", "DESCRIPTION": "Infligez !D! dégâts. NL Si vous avez 3 de gremlin:Magie ou plus, gremlin:volez 2 de Force. NL Épuisement." }, @@ -97,18 +96,18 @@ "Gremlin:Duplicate": { "NAME": "Duplication", - "DESCRIPTION": "Créez !M! gremlin:Échos d'une Attaque de votre main. Ils coûtent 1 de moins. Épuisement.", - "UPGRADE_DESCRIPTION": "Créez !M! gremlin:Échos d'une Attaque de votre main. Ils coûtent 1 de moins." + "DESCRIPTION": "Choisissez une Attaque. Créez !M! gremlin:Échos de celle-ci. Ces Échos* coûtent 1 de moins. Épuisement.", + "UPGRADE_DESCRIPTION": "Choisissez une Attaque. Créez !M! gremlin:Échos de celle-ci. Ces Échos* coûtent 1 de moins." }, "Gremlin:EdibleArmor": { "NAME": "Armure comestible", - "DESCRIPTION": "Convertissez votre Armure en PV temporaires." + "DESCRIPTION": "Convertissez votre Armure en expansioncontent:PV_Temporaires. Épuisement." }, "Gremlin:Encore": { "NAME": "Encore", - "DESCRIPTION": "Gagnez 3 de gremlin:Magie. NL Lorsque vous consumez la gremlin:Magie, infligez !M! dégâts à TOUS les ennemis." + "DESCRIPTION": "Gagnez 3 de gremlin:Magie. NL La gremlin:Magie inflige !M! dégâts supplémentaires." }, "Gremlin:Enthusiasm": { @@ -122,19 +121,19 @@ }, "Gremlin:Exacerbate": { - "NAME": "Envenimement", - "DESCRIPTION": "Infligez !D! dégâts. gremlin:Paralysez l'ennemi. NL Épuisement." + "NAME": "Aggravation", + "DESCRIPTION": "Infligez !D! dégâts. NL Lorsque vous appliquez de la Faiblesse à cet ennemi, celui-ci perd !M! PV. NL Épuisement." }, "Gremlin:FairyDust": { "NAME": "Poudre féérique", - "DESCRIPTION": "Ajoutez !M! Protections dans votre main et piochez !M! cartes. NL Épuisement." + "DESCRIPTION": "Obtenez !M! *Protections et piochez !M! cartes. NL Épuisement." }, "Gremlin:SleeveOfAces": { "NAME": "Manche d'As", - "DESCRIPTION": "Infligez !D! dégâts. NL Ajoutez 1 Surin dans votre main pour chaque pile de gremlin:Magie que vous avez.", - "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. NL Ajoutez 1 Surin Amélioré dans votre main pour chaque pile de gremlin:Magie que vous avez." + "DESCRIPTION": "Infligez !D! dégâts. NL Obtenez 1 Surin pour chaque pile de gremlin:Magie que vous avez.", + "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. NL Obtenez 1 Surin Amélioré pour chaque pile de gremlin:Magie que vous avez." }, "Gremlin:FatGremlin": { @@ -143,7 +142,7 @@ }, "Gremlin:FeelTheAudience": { - "NAME": "Sentir le public", + "NAME": "Sentir la foule", "DESCRIPTION": "Infligez !D! dégâts à TOUS les ennemis. NL Gagnez 1 de !M! gremlin:Magie pour chaque ennemi qui a l'intention d'attaquer." }, @@ -155,7 +154,7 @@ "Gremlin:FlipOut": { "NAME": "Pétage de plomb", - "DESCRIPTION": "Infligez !D! dégâts. NL Lorsque vous gagnez de l'Armure ce tour, à la place infligez autant de dégâts à TOUS les ennemis." + "DESCRIPTION": "Infligez !D! dégâts. NL Lorsque vous gagnez de l'Armure ce tour, infligez à la place autant de dégâts à TOUS les ennemis." }, "Gremlin:Flurry": { @@ -169,7 +168,7 @@ }, "Gremlin:FollowThrough": { - "NAME": "Jusqu'au bout", + "NAME": "Pour Le Chef !", "DESCRIPTION": "Infligez !D! dégâts. NL Gagnez !M! de Force Temporaire." }, @@ -180,19 +179,20 @@ "Gremlin:Glimmer": { "NAME": "Miroi-coup", - "DESCRIPTION": "Infligez !D! dégâts. NL Ajoutez 2 Protections dans votre main.", - "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. NL Ajoutez 2 Protections Améliorées dans votre main." + "DESCRIPTION": "Infligez !D! dégâts. NL Obtenez 2 *Protections.", + "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. NL Obtenez 2 *Protections Améliorées." }, "Gremlin:GlitterGuard": { "NAME": "Garde scintillante", - "DESCRIPTION": "Ajoutez !M! Protections dans votre main. NL gremlin:Permutez vers le gremlin:Diablotin_à_Bouclier.", - "UPGRADE_DESCRIPTION": "Ajoutez !M! Protections Améliorées dans votre main. NL gremlin:Permutez vers le gremlin:Diablotin_à_Bouclier." + "DESCRIPTION": "Obtenez !M! *Protections. NL gremlin:Permutez vers le gremlin:Diablotin_à_Bouclier.", + "UPGRADE_DESCRIPTION": "Obtenez !M! *Protections Améliorées. NL gremlin:Permutez vers le gremlin:Diablotin_à_Bouclier." }, "Gremlin:GremlinArms": { "NAME": "Aux armes !", - "DESCRIPTION": "Ajoutez un assortiment aléatoire de !M! Surins et Protections dans votre main." + "DESCRIPTION": "Déclenchez le bonus de votre Diablotin actuel, puis gremlin:Permutez vers un Diablotin vivant de votre choix.", + "UPGRADE_DESCRIPTION": "Déclenchez le bonus de votre Diablotin actuel deux fois, puis gremlin:Permutez vers un Diablotin vivant de votre choix." }, "Gremlin:GremlinMeal": { @@ -205,19 +205,19 @@ "DESCRIPTION": "Infligez !D! dégâts. NL A un effet bonus selon le Diablotin que vous êtes.", "EXTENDED_DESCRIPTION": ["Infligez !D! dégâts", " à TOUS les ennemis.", ". NL L'ennemi perd !M! de Force ce tour.", - ". NL Gagnez !B! d'Armure.", ". NL Piochez !M! cartes.", ". NL Cette attaque ne consume pas de gremlin:Magie.", ". NL Gagnez !M! de Force."] + ". NL Gagnez !B! d'Armure.", ". NL Piochez !M! cartes.", ". NL Gagnez !M! de gremlin:Magie.", ". NL Gagnez !M! de Force."] }, "Gremlin:GremlinOffensive": { "NAME": "Offensive malicieuse", - "DESCRIPTION": "Infligez !D! dégâts. NL Ajoutez une Offensive malicieuse dans votre main. NL Épuisement.", - "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. NL Ajoutez une Offensive malicieuse Améliorée dans votre main. NL Épuisement." + "DESCRIPTION": "Infligez !D! dégâts. NL Obtenez une *Offensive *malicieuse. NL Épuisement.", + "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. NL Obtenez une *Offensive *malicieuse Améliorée. NL Épuisement." }, "Gremlin:GremlinToss": { "NAME": "Lancer de diablotin", - "DESCRIPTION": "Infligez des dégâts égaux à votre Armure actuelle et vos PV Temporaires.", - "UPGRADE_DESCRIPTION": "Gagnez !M! PV Temporaires. NL Infligez des dégâts égaux à votre Armure actuelle et vos PV Temporaires.", + "DESCRIPTION": "Gagnez !M! expansioncontent:PV_Temporaires. Infligez des dégâts égaux à votre Armure actuelle et vos *PV *Temporaires.", + "UPGRADE_DESCRIPTION": "Gagnez !M! expansioncontent:PV_Temporaires. NL Infligez des dégâts égaux à votre Armure actuelle et vos *PV *Temporaires.", "EXTENDED_DESCRIPTION": [" NL (Infligez !D! dégâts.)"] }, @@ -228,18 +228,18 @@ "Gremlin:Heckle": { "NAME": "Chahut", - "DESCRIPTION": "Lorsque vous appliquez un débuff à un ennemi, gagnez !M! PV Temporaires." + "DESCRIPTION": "Lorsque vous appliquez un débuff à un ennemi, gagnez !M! expansioncontent:PV_Temporaires." }, "Gremlin:InfiniteBlocks": { "NAME": "Armure infinie", - "DESCRIPTION": "Au début de votre tour, ajoutez une Protection dans votre main.", - "UPGRADE_DESCRIPTION": "Inné. NL Au début de votre tour, ajoutez une Protection dans votre main." + "DESCRIPTION": "Au début de votre tour, obtenez une *Protection.", + "UPGRADE_DESCRIPTION": "Inné. NL Au début de votre tour, obtenez une *Protection." }, "Gremlin:IrksomeBlow": { "NAME": "Coup fâcheux", - "DESCRIPTION": "Infligez !D! dégâts. NL Coup fâcheux est affecté par la Force !M! fois." + "DESCRIPTION": "Infligez !D! dégâts. NL La Force affecte cette carte !M! fois." }, "Gremlin:Irritability": { @@ -249,17 +249,17 @@ "Gremlin:Jeer": { "NAME": "Raillerie", - "DESCRIPTION": "Infligez !D! dégâts. Si l'ennemi a un débuff, gagnez !M! PV Temporaires." + "DESCRIPTION": "Infligez !D! dégâts. Si l'ennemi a un débuff, gagnez !M! expansioncontent:PV_Temporaires." }, "Gremlin:Kablamo": { "NAME": "Kablamo!", - "DESCRIPTION": "Infligez !D! dégâts à TOUS les ennemis. NL Cette attaque ne consume pas de gremlin:Magie." + "DESCRIPTION": "Infligez !D! dégâts à TOUS les ennemis deux fois. NL Cette attaque ne consume pas de gremlin:Magie." }, "Gremlin:LeaderChoice": { "NAME": "Faire un choix", - "DESCRIPTION": "Abandonnez votre ami?" + "DESCRIPTION": "Abandonner votre ami ?" }, "Gremlin:MadGremlin": { @@ -286,50 +286,50 @@ "Gremlin:Nob": { "NAME": "NOB", - "DESCRIPTION": "Gagnez !M! PV Temporaires. NL Mutez-vous en Diablotin Gremlin Nob jusqu'à ce que vous n'avez plus de PV Temporaires." + "DESCRIPTION": "Gagnez !M! expansioncontent:PV_Temporaires. NL Transformez-vous en Diablotin Nob jusqu'à ce que vous n'avez plus de *PV *Temporaires." }, "Gremlin:NobChoice": { "NAME": "Faire un choix", - "DESCRIPTION": "Diablos chétifs donner Or?" + "DESCRIPTION": "Diablos chétifs donner Or ?" }, "Gremlin:PartyStick": { "NAME": "Bâton de joie", - "DESCRIPTION": "Injouable. NL Lorsque vous gremlin:Permutez alors que cette carte est dans votre main, gagnez [E]", - "UPGRADE_DESCRIPTION": "Injouable. NL Lorsque vous gremlin:Permutez alors que cette carte est dans votre main, gagnez [E] [E]", + "DESCRIPTION": "Éthérée. Injouable. NL Lorsque vous gremlin:Permutez, gagnez [E]", + "UPGRADE_DESCRIPTION": "Injouable. NL Lorsque vous gremlin:Permutez, gagnez [E]", "EXTENDED_DESCRIPTION": ["Personne n'est autorisé de jouer avec le Bâton de Joie."] }, "Gremlin:Patsy": { "NAME": "Bouc émissaire", - "DESCRIPTION": "Gagnez !B! d'Armure. NL gremlin:Permutez au prochain Diablotin." + "DESCRIPTION": "Gagnez !B! d'Armure. NL gremlin:Permutez vers le prochain Diablotin." }, "Gremlin:Pickpocket": { "NAME": "Pickpocket", - "DESCRIPTION": "gremlin:Volez tout l'Artéfact de l'ennemi. NL Infligez !D! dégâts. NL Épuisement." + "DESCRIPTION": "Infligez !D! dégâts. NL Gagnez !M! d'Or. NL Épuisement." }, "Gremlin:PinNeedle": { "NAME": "Aiguille d'épingle", - "DESCRIPTION": "Infligez !D! dégâts. NL Mélangez !M! Piqûre d'aiguille dans votre pioche. NL Épuisement.", - "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. NL Mélangez !M! Piqûre d'aiguille Améliorées dans votre pioche. NL Épuisement." + "DESCRIPTION": "Infligez !D! dégâts. NL bronze:Insérez !M! *Piqûres *d'épingles. NL Épuisement.", + "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. NL bronze:Insérez !M! *Piqûres *d'épingles Améliorées. NL Épuisement." }, "Gremlin:Pinprick": { "NAME": "Piqûre d'épingle", - "DESCRIPTION": "Infligez !D! dégâts. NL Piochez une carte. NL Exhaust.", - "UPGRADE_DESCRIPTION": "Lorsque vous piochez cette carte, ajoutez un gremlin:Évcho de celle-ci dans votre main. NL Infligez !D! dégâts. NL Piochez une carte . NL Épuisement." + "DESCRIPTION": "Infligez !D! dégâts. NL Piochez une carte. NL Épuisement.", + "UPGRADE_DESCRIPTION": "Lorsque vous piochez cette carte, obtenez un gremlin:Écho de celle-ci. NL Infligez !D! dégâts. NL Piochez une carte. NL Épuisement." }, "Gremlin:Polish": { "NAME": "Polissage", - "DESCRIPTION": "Les Surins infligent !M! dégâts supplémentaires. NL Les protections donnent !M! d'Armure supplémentaire." + "DESCRIPTION": "Les Surins infligent !M! dégâts supplémentaires. NL Les *Protections donnent !M! d'Armure supplémentaire." }, "Gremlin:PourSalt": { - "NAME": "Ajouter du sel", + "NAME": "Grain de sel", "DESCRIPTION": "Infligez !D! dégâts. Si l'ennemi est Affaibli, retirez une pile de celle-ci et ajoutez !M! Surins dans votre main." }, @@ -340,7 +340,7 @@ "Gremlin:Pretaliation": { "NAME": "Représailles", - "DESCRIPTION": "Infligez !D! dégâts si l'ennemi a l'intention d'attaquer. NL Infligez !blamage! dégâts sinon." + "DESCRIPTION": "Infligez !D! dégâts deux fois. NL L'ennemi vous attaque pour !M! dégâts." }, "Gremlin:ProperTools": { @@ -351,7 +351,7 @@ "Gremlin:RageBreak": { "NAME": "Crise de rage", "DESCRIPTION": "Doublez votre Force. NL Épuisement.", - "UPGRADE_DESCRIPTION": "Doublez votre Force." + "UPGRADE_DESCRIPTION": "Gagnez !B! d'Armure. NL Doublez votre Force. NL Épuisement." }, "Gremlin:Raid": { @@ -367,7 +367,7 @@ "Gremlin:Rhythm": { "NAME": "Rythme", - "DESCRIPTION": "gremlin:Permutez au prochain Diablotin. NL Récupérez une carte Basique de votre pioche. Elle coûte 0 ce tour." + "DESCRIPTION": "gremlin:Permutez vers le prochain Diablotin. NL Récupérez une carte Basique de votre pioche. Elle coûte 0 ce tour." }, "Gremlin:Rush": { @@ -376,14 +376,14 @@ }, "Gremlin:Scatter": { - "NAME": "Dispersez-vous!", - "DESCRIPTION": "La prochaine fois que vous perdez des PV, à la place gremlin:Permutez au Diablotin suivant. NL Épuisement." + "NAME": "Dispersion !", + "DESCRIPTION": "La prochaine fois que vous perdez des PV, à la place gremlin:Permutez vers le Diablotin suivant. NL Épuisement." }, "Gremlin:SecondVolley": { "NAME": "Seconde salve", - "DESCRIPTION": "Infligez !D! dégâts. Ajoutez un Surin dans votre main pour chaque carte jouée ce tour.", - "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. Ajoutez un Surin Amélioré dans votre main pour chaque carte jouée ce tour.", + "DESCRIPTION": "Infligez !D! dégâts. Obtenez un Surin pour chaque carte jouée ce tour, ou jusqu'à ce que votre main soit pleine.", + "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. Obtenez un Surin Amélioré pour chaque carte jouée ce tour, ou jusqu'à ce que votre main soit pleine.", "EXTENDED_DESCRIPTION": [ " NL (", " carte jouée.)", @@ -393,13 +393,13 @@ "Gremlin:ShadowShiv": { "NAME": "Surin obscur", - "DESCRIPTION": "Lorsque vous jouez une Attaque qui ne s'Épuise pas, ajoutez un Surin dans votre main." + "DESCRIPTION": "Lorsque vous jouez une Attaque qui ne s'Épuise pas, obtenez un Surin." }, "Gremlin:ShankStone": { - "NAME": "Tige et pierre", - "DESCRIPTION": "Injouable. NL Lorsque vous piochez cette carte, ajoutez !M! Surins dans votre main.", - "EXTENDED_DESCRIPTION": ["I can't play this card."] + "NAME": "Pierre d’estoc", + "DESCRIPTION": "Injouable. NL Lorsque vous piochez cette carte, obtenez !M! Surins.", + "EXTENDED_DESCRIPTION": ["Je ne peux pas jouer cette carte."] }, "Gremlin:SharpenBlades": { @@ -409,7 +409,7 @@ }, "Gremlin:ShieldGremlin": { - "NAME": "Shield Gremlin", + "NAME": "Diablotin à bouclier", "DESCRIPTION": "gremlin:Permutez vers le gremlin:Diablotin_à_Bouclier." }, @@ -427,7 +427,7 @@ "Gremlin:SkullBash": { "NAME": "Briser le crâne", - "DESCRIPTION": "Éthérée. NL Infligez !D! dégâts. NL Appliquez !M! Vulnerabilité. NL Épuisement." + "DESCRIPTION": "Éthérée. NL Infligez !D! dégâts. NL Appliquez !M! de Vulnerabilité. NL Épuisement." }, "Gremlin:SneakyGremlin": { @@ -447,13 +447,13 @@ "Gremlin:SupplyScrollCard": { "NAME": "Parchemin d'équipement", - "DESCRIPTION": "Ajoutez un assortiment aléatoire de 4 Surins et Protections dans votre main. NL Épuisement." + "DESCRIPTION": "Obtenez un assortiment aléatoire de !M! Surins et *Protections. NL Épuisement." }, "Gremlin:Tadah": { "NAME": "Tada!", - "DESCRIPTION": "Ajoutez un gremlin:Écho d'une Compétence aléatoire. NL gremlin:Permutez vers le gremlin:Diablotin_Sorcier.", - "UPGRADE_DESCRIPTION": "Ajoutez un gremlin:Écho d'une Compétence aléatoire. Elle coûte 1 de moins. NL gremlin:Permutez vers le gremlin:Diablotin_Sorcier." + "DESCRIPTION": "Obtenez une *Protection. NL gremlin:Permutez vers le gremlin:Diablotin_Sorcier.", + "UPGRADE_DESCRIPTION": "Obtenez une *Protection améliorée. NL gremlin:Permutez vers le gremlin:Diablotin_Sorcier." }, "Gremlin:TagTeam": { @@ -474,13 +474,13 @@ "Gremlin:TwistTheKnife": { "NAME": "Poignard tordu", - "DESCRIPTION": "Infligez !D! dégâts. NL Ajoutez 1 Surin dans votre main.", - "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. NL Ajoutez 1 Surin Amélioré dans votre main." + "DESCRIPTION": "Infligez !D! dégâts. NL Obtenez 1 Surin.", + "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. NL Obtenez 1 Surin Amélioré." }, "Gremlin:ToeStub": { "NAME": "Coup à l'orteil", - "DESCRIPTION": "Infligez !D! dégâts. Si l'ennemi est Affaibli, appliquez !M! Vulnérabilité." + "DESCRIPTION": "Infligez !D! dégâts. Si l'ennemi est Affaibli, appliquez !M! de Vulnérabilité." }, "Gremlin:Unforgiving": { @@ -495,8 +495,8 @@ "Gremlin:Whiz": { "NAME": "Wizzz", - "DESCRIPTION": "Gagnez !M! de gremlin:Magie. Au prochain tour, ajoutez Bang dans votre main. NL Épuisement.", - "UPGRADE_DESCRIPTION": "Gagnez !M! de gremlin:Magie. Au prochain tour, ajoutez Bang Améliorée dans votre main. NL Épuisement." + "DESCRIPTION": "Gagnez !M! de gremlin:Magie. Au prochain tour, obtenez un *Bang. NL Épuisement.", + "UPGRADE_DESCRIPTION": "Gagnez !M! de gremlin:Magie. Au prochain tour, obtenez un *Bang Amélioré. NL Épuisement." }, "Gremlin:Wizardry": { @@ -511,4 +511,4 @@ "UPGRADE_DESCRIPTION": "", "EXTENDED_DESCRIPTION": [""] } -} \ No newline at end of file +} diff --git a/src/main/resources/gremlinResources/localization/fra/CharacterStrings.json b/src/main/resources/gremlinResources/localization/fra/CharacterStrings.json index 2db79226a6..b12b565580 100644 --- a/src/main/resources/gremlinResources/localization/fra/CharacterStrings.json +++ b/src/main/resources/gremlinResources/localization/fra/CharacterStrings.json @@ -4,7 +4,7 @@ "Les Diablotins" ], "TEXT": [ - "Une foule chaotique d'habitants de la Tour qui s'est regroupée NL pour chercher de la nourriture et un trésor..", + "Une foule chaotique d'habitants de la Tour qui s'est regroupée NL pour chercher de la nourriture et un trésor.", "NL Quel festin ! Vous préparez vos couteaux." ], "KEYWORDS": [ @@ -12,4 +12,4 @@ "NL Quel festin ! Vous préparez vos couteaux." ] } -} \ No newline at end of file +} diff --git a/src/main/resources/gremlinResources/localization/fra/EventStrings.json b/src/main/resources/gremlinResources/localization/fra/EventStrings.json index 80016ed27a..065ba736a1 100644 --- a/src/main/resources/gremlinResources/localization/fra/EventStrings.json +++ b/src/main/resources/gremlinResources/localization/fra/EventStrings.json @@ -1,7 +1,7 @@ { "Gremlin:CursedTome": { "OPTIONS": [ - "[Prendre] #gObtenir #gle #gLivre. #rTous #rles #rDiablotins #rperdent #r" + "[Prendre] #gObtenez #gle #gLivre. #rTous #rles #rDiablotins #rperdent #r" ] }, "Gremlin:BackToBasics": { @@ -108,4 +108,4 @@ " #gd'Or. #rTous #rles #rDiablotins #rperdent #rb" ] } -} \ No newline at end of file +} diff --git a/src/main/resources/gremlinResources/localization/fra/KeywordStrings.json b/src/main/resources/gremlinResources/localization/fra/KeywordStrings.json index 9bae7b058b..7a14469d4a 100644 --- a/src/main/resources/gremlinResources/localization/fra/KeywordStrings.json +++ b/src/main/resources/gremlinResources/localization/fra/KeywordStrings.json @@ -1,6 +1,7 @@ [ { "NAMES": [ + "l'agonie", "agonie", "agony" ], @@ -14,23 +15,17 @@ "cripple" ], "PROPER_NAME": "Paralysie", - "DESCRIPTION": "Les ennemis #yParalysés ne peuvent plus perdre de #yFaiblesse désormais. À la fin de leur tour, ils perdent des PV d'une quantité égale de leur #yFaiblesse." + "DESCRIPTION": "Les ennemis #yParalysés ne peuvent plus perdre de #yFaiblesse désormais. À la fin de leur tour, ils perdent des PV d'une quantité égale à leur #yFaiblesse." }, { "NAMES": [ "écho", - "echo" - ], - "PROPER_NAME": "Écho", - "DESCRIPTION": "Un écho est une copie d'une carte avec #yÉthérée et #yÉpuisement." - }, - { - "NAMES": [ + "echo", "échos", "echoes" ], - "PROPER_NAME": "Échos", - "DESCRIPTION": "Des échos sont des copies d'une carte avec #yÉthérée et #yÉpuisement." + "PROPER_NAME": "Écho", + "DESCRIPTION": "Un écho est une copie d'une carte avec #yÉthérée et #yÉpuisement. Les Échos ne peuvent pas reproduire des Échos." }, { "NAMES": [ @@ -40,7 +35,7 @@ "fat_gremlin" ], "PROPER_NAME": "Gros diablotin", - "DESCRIPTION": "Lorsque vous jouez une Attaque, appliquez #b1 de #yFaiblesse toutes les cibles." + "DESCRIPTION": "Lorsque vous jouez une Attaque, appliquez #b1 de #yFaiblesse à toutes les cibles." }, { "NAMES": [ @@ -50,7 +45,7 @@ "gremlin_wizard" ], "PROPER_NAME": "Diablotin sorcier", - "DESCRIPTION": "Lorsque vous jouez une Compétence, gagnez #b1 de #yMagie." + "DESCRIPTION": "Lorsque vous jouez une Compétence, gagnez #b1 de #yMagie [REMOVE_SPACE]." }, { "NAMES": [ @@ -60,7 +55,7 @@ "mad_gremlin" ], "PROPER_NAME": "Diablotin fou", - "DESCRIPTION": "Gagnez #b2 de #yForce #yTemporaire quand vous êtes attaqué." + "DESCRIPTION": "Gagnez #b2 de #yForce #yTemporaire lorsque vous êtes attaqué." }, { "NAMES": [ @@ -70,7 +65,7 @@ "shield_gremlin" ], "PROPER_NAME": "Diablotin à bouclier", - "DESCRIPTION": "Lorsque vous jouez une Compétence, gagnez #b2 #yd'Armure." + "DESCRIPTION": "Lorsque vous jouez une Compétence, gagnez #b2 #yd'Armure [REMOVE_SPACE]." }, { "NAMES": [ @@ -80,7 +75,7 @@ "sneaky_gremlin" ], "PROPER_NAME": "Diablotin sournois", - "DESCRIPTION": "Lorsque vous jouez une attaque, Infligez #b3 dégâts à un ennemi aléatoire." + "DESCRIPTION": "Les Attaques coûtant 0 infligent #b2 dégâts supplémentaires. Après avoir joué une Attaque, infligez #b2 dégâts à un ennemi aléatoire." }, { "NAMES": [ @@ -105,6 +100,13 @@ ], "PROPER_NAME": "Vol", "DESCRIPTION": "La cible perd une quantité spécifiée de ressources. Vous gagnez le montant qui a été perdu." + }, + { + "NAMES": [ + "nob" + ], + "PROPER_NAME": "Diablotin Nob", + "DESCRIPTION": "Au début de votre tour, ajoutez #b1 #ySoufflet , #yBriser #yle #ycrâne et #yRuée à votre main." } ] diff --git a/src/main/resources/gremlinResources/localization/fra/OrbStrings.json b/src/main/resources/gremlinResources/localization/fra/OrbStrings.json index 86eab9ba30..59aaa36848 100644 --- a/src/main/resources/gremlinResources/localization/fra/OrbStrings.json +++ b/src/main/resources/gremlinResources/localization/fra/OrbStrings.json @@ -3,7 +3,7 @@ "NAME": "Gros diablotin", "DESCRIPTION": [ "Lorsque vous jouez une Attaque, appliquez #b", - " de #yFaiblesse toutes les cibles." + " de #yFaiblesse à toutes les cibles." ] }, @@ -11,7 +11,7 @@ "NAME": "Diablotin sorcier", "DESCRIPTION": [ "Lorsque vous jouez une Compétence, gagnez #b", - " de #yMagie." + " de #yMagie [REMOVE_SPACE]." ] }, @@ -19,7 +19,7 @@ "NAME": "Diablotin fou", "DESCRIPTION": [ "Gagnez #b", - " de #yForce #yTemporaire quand vous êtes attaqué." + " de #yForce #yTemporaire lorsque vous êtes attaqué." ] }, @@ -27,15 +27,16 @@ "NAME": "Diablotin à bouclier", "DESCRIPTION": [ "Lorsque vous jouez une Compétence, gagnez #b", - " #yd'Armure." + " #yd'Armure [REMOVE_SPACE]." ] }, "Gremlin:SneakyGremlin": { "NAME": "Diablotin sournois", "DESCRIPTION": [ - "Lorsque vous jouez une Attaque, infligez #b", + "Les Attaques coûtant 0 infligent #b", + " dégâts supplémentaires. Lorsque vous jouez une Attaque, infligez #b", " dégâts à un ennemi aléatoire." ] } -} \ No newline at end of file +} diff --git a/src/main/resources/gremlinResources/localization/fra/PotionStrings.json b/src/main/resources/gremlinResources/localization/fra/PotionStrings.json index 8b2a4fcc5f..bfa29f5aed 100644 --- a/src/main/resources/gremlinResources/localization/fra/PotionStrings.json +++ b/src/main/resources/gremlinResources/localization/fra/PotionStrings.json @@ -16,14 +16,14 @@ "gremlin:SwapPotion": { "NAME": "Leurre embouteillé", "DESCRIPTIONS": [ - "#ySwap to a random Gremlin." + "#yPermutez vers un Diablotin aléatoire." ] }, "gremlin:WizPotion": { "NAME": "Potion magique", "DESCRIPTIONS": [ "Gagnez #b", - " de #yVigueur." + " de #yVigueur [REMOVE_SPACE]." ] } -} \ No newline at end of file +} diff --git a/src/main/resources/gremlinResources/localization/fra/PowerStrings.json b/src/main/resources/gremlinResources/localization/fra/PowerStrings.json index a3ae2bb2f0..743e669713 100644 --- a/src/main/resources/gremlinResources/localization/fra/PowerStrings.json +++ b/src/main/resources/gremlinResources/localization/fra/PowerStrings.json @@ -23,7 +23,7 @@ "Gremlin:BubbleBarrier": { "NAME": "Barrière de bulles", "DESCRIPTIONS": [ - "Lorsque vous jouez une carte ce tour, gagnez #b", " #yd'Armure." + "Lorsque vous jouez une carte ce tour, gagnez #b", " #yd'Armure [REMOVE_SPACE]." ] }, "Gremlin:CongaLine": { @@ -36,13 +36,14 @@ "Gremlin:Crippled": { "NAME": "Paralysé", "DESCRIPTIONS": [ - "La #yFaiblesse ne se perd plus. À la fin du tour, cet ennemi perd des PV équivalents à sa #bFaiblesse." + "Lorsque cet ennemi gagne de la #yFaiblesse [REMOVE_SPACE], il perd #b", + " PV." ] }, "Gremlin:Encore": { "NAME": "Encore", "DESCRIPTIONS": [ - "Lorsque vous consumez de la #yMagie, infligez #b", " dégâts à TOUS les ennemis." + "La #yMagie inflige #b", " dégâts supplémentaires." ] }, "Gremlin:Enthusiasm": { @@ -56,7 +57,7 @@ "Gremlin:FatGremlin": { "NAME": "Gros Diablotin", "DESCRIPTIONS": [ - "Lorsque vous jouez une attaque, appliquez #b", + "Lorsque vous jouez une Attaque, appliquez #b", " de #yFaiblesse à toutes les cibles." ] }, @@ -64,41 +65,41 @@ "NAME": "Perte de Force", "DESCRIPTIONS": [ "À la fin de ce tour, perdez #b", - " de #yForce." + " de #yForce [REMOVE_SPACE]." ] }, "Gremlin:Furious": { "NAME": "Furieux", "DESCRIPTIONS": [ - "Lorsque vous auriez dû gagnez de #yl'Armure ce tour, à la place infligez autant de dégâts à TOUS les ennemis." + "Lorsque vous auriez dû gagner de #yl'Armure ce tour, à la place infligez autant de dégâts à TOUS les ennemis." ] }, "Gremlin:GremlinNob": { "NAME": "Diablotin Nob", "DESCRIPTIONS": [ - "Au début de chaque tour, ajoutez #b3 cartes de Diablotin Nob dans votre main. Vous ne pouvez plus #yPermuter désormais. Lorsque vous perdez tous vos #yPV #yTemporaires, empêchez les dégâts suivants et renvoyez-les." + "Au début de chaque tour, obtenez #b3 cartes de Diablotin Nob. Vous ne pouvez plus #yPermuter désormais. Lorsque vous perdez tous vos #yPV #yTemporaires [REMOVE_SPACE], empêchez les dégâts suivants et renvoyez-les." ] }, "Gremlin:GremlinWizard": { "NAME": "Diablotin sorcier", "DESCRIPTIONS": [ "Lorsque vous jouez une Compétence, gagnez #b", - " de #yMagie." + " de #yMagie [REMOVE_SPACE]." ] }, "Gremlin:Heckle": { "NAME": "Chahut", "DESCRIPTIONS": [ "Lorsque vous appliquez un débuff à un ennemi, gagnez #b", - " #yPV #yTemporaires." + " #yPV #yTemporaires [REMOVE_SPACE]." ] }, "Gremlin:InfiniteBlocks": { "NAME": "Armure infinie", "DESCRIPTIONS": [ - "Au début de votre tour, ajoutez #b", - " #yProtection dans votre main.", - " #yProtections dans votre main." + "Au début de votre tour, obtenez #b", + " #yProtection [REMOVE_SPACE].", + " #yProtections [REMOVE_SPACE]." ] }, "Gremlin:MadGremlin": { @@ -114,23 +115,23 @@ "Jouez #b", " attaque de plus pour #b", " attaques de plus pour gagner #b", - " #yArtéfact." + " #yArtéfact [REMOVE_SPACE]." ] }, "Gremlin:MakingMagic": { "NAME": "Faire de la magie", "DESCRIPTIONS": [ - "Au début de votre prochain tour, ajoutez #b", - " copie de #yBang dans votre main.", - " copies de #yBang dans votre main." + "Au début de votre prochain tour, obtenez #b", + " copie de #yBang [REMOVE_SPACE].", + " copies de #yBang [REMOVE_SPACE]." ] }, "Gremlin:MakingMoreMagic": { "NAME": "Faire de la Magie+", "DESCRIPTIONS": [ - "Au début de votre prochain tour, ajoutez #b", - " copie #yAméliorée de #yBang dans votre main.", - " copies #yAméliorées de #yBang dans votre main." + "Au début de votre prochain tour, obtenez #b", + " copie #yAméliorée de #yBang [REMOVE_SPACE].", + " copies #yAméliorées de #yBang [REMOVE_SPACE]." ] }, "Gremlin:Polish": { @@ -151,9 +152,9 @@ "Gremlin:ShadowShiv": { "NAME": "Surin obscur", "DESCRIPTIONS": [ - "Lorsque vous jouez une Attaque qui ne s'Épuise pas, ajoutez #b", - " #ySurin dans votre main.", - " #ySurins dans votre main." + "Lorsque vous jouez une Attaque qui ne #ys'Épuise pas, obtenez #b", + " #ySurin.", + " #ySurins." ] }, "Gremlin:ShieldGremlin": { @@ -166,7 +167,8 @@ "Gremlin:SneakyGremlin": { "NAME": "Diablotin Sournois", "DESCRIPTIONS": [ - "Lorsque vous jouez une Attaque, infligez #b", + "Les Attaques coûtant 0 ont leurs dégâts augmentés de #b", + " [REMOVE_SPACE]. Lorsque vous jouez une Attaque, infligez #b", " dégâts à un ennemi aléatoire." ] }, @@ -174,27 +176,27 @@ "NAME": "Cibler les plaies", "DESCRIPTIONS": [ "Infligez #b", - " dégâts supplémentaires aux ennemis #yAffaiblis." + " dégâts supplémentaires aux ennemis #yAffaiblis [REMOVE_SPACE]." ] }, "Gremlin:Unforgiving": { "NAME": "Impitoyable", "DESCRIPTIONS": [ - "Vous ne pouvez pas perdre de Force." + "Vous ne pouvez pas perdre de #yForce [REMOVE_SPACE]." ] }, "Gremlin:Wiz": { "NAME": "Magie", "DESCRIPTIONS": [ "En train de charger. NL Besoin de #b", " pile de plus.", " piles de plus.", - "Ready to fire." + "Prêt à faire feu." ] }, "Gremlin:Wizardry": { "NAME": "Sorcellerie", "DESCRIPTIONS": [ "Au début de votre tour, gagnez #b", - " de #yMagie." + " de #yMagie [REMOVE_SPACE]." ] } -} \ No newline at end of file +} diff --git a/src/main/resources/gremlinResources/localization/fra/RelicStrings.json b/src/main/resources/gremlinResources/localization/fra/RelicStrings.json index a94570df32..10656f7b2d 100644 --- a/src/main/resources/gremlinResources/localization/fra/RelicStrings.json +++ b/src/main/resources/gremlinResources/localization/fra/RelicStrings.json @@ -3,7 +3,7 @@ "NAME": "Pectos impeccables", "FLAVOR": "Glorieux.", "DESCRIPTIONS": [ - "Lorsque vous gagnez de la #yForce, gagnez un nombre équivalent de #yPV #yTemporaires. NL Commencez chaque combat avec #b1 de #yForce." + "Lorsque vous gagnez de la #yForce [REMOVE_SPACE], gagnez un nombre équivalent de #yPV #yTemporaires [REMOVE_SPACE]. NL Commencez chaque combat avec #b1 de #yForce." ] }, "Gremlin:FragmentationGrenade": { @@ -65,11 +65,11 @@ "NAME": "Maillet magique", "FLAVOR": "Écrase le petit doigt deux fois plus fort.", "DESCRIPTIONS": [ - "Lorsque vous appliquez de la #yFaiblesse, gagnez #b1 de #yMagie, au maximum de #b3 fois par tour." + "Lorsque vous appliquez de la #yFaiblesse, gagnez #b1 de #yMagie [REMOVE_SPACE], au maximum de #b3 fois par tour." ] }, "Gremlin:PricklyShields": { - "NAME": "Bouclier d'épines", + "NAME": "Bouclier épineux", "FLAVOR": "Les diablotins utilisent n'importe quoi pourvu que ça peut servir d'arme ou d'armure. Certains objets servent aux deux.", "DESCRIPTIONS": [ "Lorsque vous appliquez de #yl'Armure, infligez #b", " dégâts à un ennemi aléatoire." @@ -87,46 +87,46 @@ "NAME": "Marchandise volée", "FLAVOR": "\"Saleté de voleurs, ces diablotins!\".", "DESCRIPTIONS": [ - "Lorsque vous #yPermutez, ajoutez un #yÉcho d'une carte Incolore aléatoire dans votre main. NL Au début du combat, le Marchand gagne #b", - " de Force.", - "Bande de bons à rien de voleurs!", - "Espèce de lâche, misérable vermine!", - "Vous êtes vraiment avides et cupides!" + "Lorsque vous #yPermutez [REMOVE_SPACE], ajoutez un #yÉcho d'une carte Incolore aléatoire dans votre main. NL Au début du combat, le Marchand gagne #b", + " de #yForce [REMOVE_SPACE].", + "Bande de bons à rien de voleurs !", + "Espèces de lâches, misérables vermines !", + "Vous êtes vraiment avides et cupides !" ] }, "Gremlin:SupplyScroll": { "NAME": "Parchemin d'équipement", "FLAVOR": "Un inventaire surprenamment détaillé des différents équipements de la bande.", "DESCRIPTIONS": [ - "Au début du 3ème tour, gagnez [E] et piochez #b2 cartes." + "Au début du 3ème tour, gagnez [E] [E] et piochez #b2 cartes." ] }, "Gremlin:TagTeamwork": { "NAME": "Travail d'équipe", - "FLAVOR": "Le travail d'équipe fait marcher le rêve.", + "FLAVOR": "L’union fait la force.", "DESCRIPTIONS": [ - "Lorsque vous piochez #yTandem, piochez une autre carte. NL Lorsque vous récupérez cette relique, ajoutez deux copies de #yTandem dans votre deck." + "Lorsque vous piochez #yTandem [REMOVE_SPACE], piochez une autre carte. NL Lorsque vous récupérez cette relique, ajoutez deux copies de #yTandem dans votre deck." ] }, "Gremlin:WizardHat": { "NAME": "Chapeau de sorcier", "FLAVOR": "La robe qui l'accompagnait a été volée depuis.", "DESCRIPTIONS": [ - "Lorsque vous consumez de la #yMagie, retirez un débuff aléatoire." + "Lorsque vous consumez de la #yMagie [REMOVE_SPACE], retirez un débuff aléatoire." ] }, "Gremlin:WizardStaff": { "NAME": "Bâton de sorcier", "FLAVOR": "La fierté et la joie de chaque Diablotin Sorcier, ce bâton est une cible fréquente de vol par les bandes rivales.", "DESCRIPTIONS": [ - "La Magie inflige #b7 dégâts supplémentaires." + "La #yMagie inflige #b7 dégâts supplémentaires." ] }, "Gremlin:WoundPoker": { "NAME": "Tisonnier blessant", - "FLAVOR": "Est-ce que ça fait mal si je fais ça?.", + "FLAVOR": "Est-ce que ça fait mal si je fais ça ?", "DESCRIPTIONS": [ - "À la fin de votre tour, infliigez #b", " dégâts à chaque ennemi #yAffaibli." + "À la fin de votre tour, infligez #b", " dégâts à chaque ennemi #yAffaibli." ] }, "Gremlin:PatchFixes": { diff --git a/src/main/resources/gremlinResources/localization/jpn/CardStrings.json b/src/main/resources/gremlinResources/localization/jpn/CardStrings.json index d7a619c3f8..bf2f99852d 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,7 +64,7 @@ "Gremlin:CounterStrike": { "NAME": "カウンターストライク", - "DESCRIPTION": " !D! ダメージを与える。最前列のグレムリンのグレムリンのボーナスを !M! 回発動する。" + "DESCRIPTION": "!D! ダメージを与える。 NL 敵が攻撃を予定している場合、現在のグレムリンボーナスを !M! 回行う。" }, "Gremlin:CowerChoice": { @@ -86,28 +86,28 @@ "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": { "NAME": "複製", - "DESCRIPTION": "手札から選んだ アタック 1 枚の gremlin:エコー を !M! 枚得る。それらはコストが 1 少ない。 NL 廃棄", - "UPGRADE_DESCRIPTION": "手札から選んだ アタック 1 枚の gremlin:エコー を !M! 枚得る。それらはコストが 1 少ない。" + "DESCRIPTION": "手札の アタック 1 枚の gremlin:エコー を !M! 枚得る。それらはコストが 1 少ない。 NL 廃棄", + "UPGRADE_DESCRIPTION": "手札の アタック 1 枚の gremlin:エコー を !M! 枚得る。それらはコストが 1 少ない。" }, "Gremlin:EdibleArmor": { "NAME": "食用アーマー", - "DESCRIPTION": "ブロックを expansioncontent:一時的な体力 に変換する。 NL 廃棄 " + "DESCRIPTION": "ブロックを expansioncontent:一時的な体力 に変換する。 NL 廃棄" }, "Gremlin:Encore": { "NAME": "アンコール", - "DESCRIPTION": "3 gremlin:魔力 を得る。 NL gremlin:魔力 を消費した時、敵全体に !M! ダメージ。" + "DESCRIPTION": "3 gremlin:魔力 を得る。 NL gremlin:魔力 が追加で !M! ダメージを与える。" }, "Gremlin:Enthusiasm": { @@ -122,18 +122,18 @@ "Gremlin:Exacerbate": { "NAME": "悪化させる", - "DESCRIPTION": " !D! ダメージを与える。 NL この敵に 脱力 を与えるたびに、敵は !M! HPを失う。 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": { @@ -154,7 +154,7 @@ "Gremlin:FlipOut": { "NAME": "反転", - "DESCRIPTION": " !D! ダメージを与える。 NL このターンあなたがブロックを得る代わりに敵全体に同じダメージを与える。" + "DESCRIPTION": "!D! ダメージを与える。 NL このターンあなたがブロックを得る代わりに敵全体に同じダメージを与える。" }, "Gremlin:Flurry": { @@ -169,7 +169,7 @@ "Gremlin:FollowThrough": { "NAME": "リーダーの為に!", - "DESCRIPTION": " !D! ダメージを与える。 NL 一時的な 筋力 !M! を得る。" + "DESCRIPTION": "!D! ダメージを与える。 NL 一時的な 筋力 !M! を得る。" }, "Gremlin:Fury": { @@ -179,20 +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": "現在のグレムリンのボーナスを発動し、生きているグレムリンと gremlin:交代 する。", - "UPGRADE_DESCRIPTION": "現在のグレムリンのボーナスを 2 回発動し、生きているグレムリンと gremlin:交代 する。" + "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": " !D! ダメージを与える。 NL 敵はこのターンに 筋力 !M! を 2 回失う。 NL !blamage! ゴールドを獲得。 NL 廃棄" + "DESCRIPTION": "!D! ダメージを与える。 NL !M! ゴールドを得る。 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! ダメージを 2 回与える。 NL 敵から !M! ダメージを受ける。" + "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 (", " 枚プレイした)", @@ -442,7 +442,7 @@ "Gremlin:Stupend": { "NAME": "驚け", - "DESCRIPTION": " !B! ブロックを得る。 NL !D! ダメージを与える。 NL ブロックは gremlin:魔力 の影響を受ける。" + "DESCRIPTION": "!B! ブロックを得る。 NL !D! ダメージを与える。 NL ブロックは gremlin:魔力 の影響を受ける。" }, "Gremlin:SupplyScrollCard": { @@ -452,8 +452,8 @@ "Gremlin:Tadah": { "NAME": "じゃじゃーん!", - "DESCRIPTION": " *ガード を手札に加える。 NL gremlin:交代 : gremlin:グレムリンウィザード", - "UPGRADE_DESCRIPTION": "アップグレードされた *ガード を手札に加える。 NL gremlin:交代 : gremlin:グレムリンウィザード" + "DESCRIPTION": "*ガード を手札に加える。 NL gremlin:交代 : gremlin:グレムリンウィザード", + "UPGRADE_DESCRIPTION": "*ガード+ を手札に加える。 NL gremlin:交代 : gremlin:グレムリンウィザード" }, "Gremlin:TagTeam": { @@ -474,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": { @@ -490,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 45fa04503f..92d9769700 100644 --- a/src/main/resources/gremlinResources/localization/jpn/KeywordStrings.json +++ b/src/main/resources/gremlinResources/localization/jpn/KeywordStrings.json @@ -22,7 +22,7 @@ "エコー" ], "PROPER_NAME": "エコー", - "DESCRIPTION": "エコーは #yエセリアル と #y廃棄 を持ったコピーカード。" + "DESCRIPTION": "エコーは #yエセリアル と #y廃棄 を持ったコピーカード。エコーのエコーは作成されない。" }, { "NAMES": [ @@ -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 d0c99ad073..749ebd0de5 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,8 +34,8 @@ "Gremlin:SneakyGremlin": { "NAME": "スニーキーグレムリン", "DESCRIPTION": [ - " 0 コストの攻撃は #b ", - " 追加ダメージを与える。 アタックをプレイするたびに、ランダムな敵に #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 46a1d0b3a1..78d5fdb483 100644 --- a/src/main/resources/gremlinResources/localization/jpn/PowerStrings.json +++ b/src/main/resources/gremlinResources/localization/jpn/PowerStrings.json @@ -36,14 +36,14 @@ "Gremlin:Crippled": { "NAME": "廃人", "DESCRIPTIONS": [ - "この敵が #y脱力 を受ける度、 #b ", - " HP を失う。" + " #y脱力 を受ける度 HPを #b", + " 失う。" ] }, "Gremlin:Encore": { "NAME": "アンコール", "DESCRIPTIONS": [ - " #y魔力 を消費する度に、敵全体に #b", " ダメージを与える。" + " #y魔力 が追加で #b", " ダメージを与える。" ] }, "Gremlin:Enthusiasm": { @@ -167,15 +167,15 @@ "Gremlin:SneakyGremlin": { "NAME": "スニーキーグレムリン", "DESCRIPTIONS": [ - "0 コストの攻撃のダメージが #b ", - " 増加する。 攻撃をプレイするたびに、ランダムな敵に #b ", - " ダメージを与える。" + "0コストのアタックが追加で #b", + " ダメージを与える。アタックをプレイする度に、ランダムな敵に #b", + " ダメージを与える。" ] }, "Gremlin:TargetWeakness": { "NAME": "傷口を広げる", "DESCRIPTIONS": [ - " #y脱力 状態の敵に 追加で #b", + "脱力状態の敵に 追加で #b", " ダメージを与える。" ] }, @@ -199,4 +199,4 @@ " を得る。" ] } -} +} \ No newline at end of file diff --git a/src/main/resources/gremlinResources/localization/jpn/RelicStrings.json b/src/main/resources/gremlinResources/localization/jpn/RelicStrings.json index 3f42b7df58..0fde28786f 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 17ddb11109..cbe9c77aa3 100644 --- a/src/main/resources/gremlinResources/localization/kor/CardStrings.json +++ b/src/main/resources/gremlinResources/localization/kor/CardStrings.json @@ -1,514 +1,514 @@ -{ - "Gremlin:AggressiveDefense": { - "NAME": "공격적인 수비", - "DESCRIPTION": "피해를 !D! 줍니다. NL 이번 턴 동안 방어도를 얻을 때마다 공격한 대상은 체력을 !M! 잃습니다." - }, - - "Gremlin:ArmsTheft": { - "NAME": "소매 치기", - "DESCRIPTION": "적의 힘을 !M! gremlin:강탈합니다. NL 소멸." - }, - - "Gremlin:Astound": { - "NAME": "경외", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL gremlin:마법을 3 이상 보유한다면 *수호를 !M! 장 얻습니다.", - "UPGRADE_DESCRIPTION": "방어도를 !B! 얻습니다. NL gremlin:마법을 3 이상 보유한다면 *수호+를 !M! 장 얻습니다." - }, - - "Gremlin:Bang": { - "NAME": "쾅", - "DESCRIPTION": "피해를 !D! 만큼 !M! 번 줍니다. *마아법을 한 장 버린 카드 더미에 섞어 넣습니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "피해를 !D! 만큼 !M! 번 줍니다. *마아법+을 한 장 버린 카드 더미에 섞어 넣습니다. NL 소멸." - }, - - "Gremlin:Bellow": { - "NAME": "고함", - "DESCRIPTION": "휘발성. NL 공격할 의도가 없는 적 하나당 힘을 !M! 얻습니다. NL 소멸." - }, - - "Gremlin:BrokenShin": { - "NAME": "정강이 까기", - "DESCRIPTION": "대상이 보유한 약화 !M! 당 gremlin:분개를 부여합니다. NL 소멸." - }, - - "Gremlin:BubbleBarrier": { - "NAME": "거품 장벽", - "DESCRIPTION": "이번 턴에 카드를 사용할 때마다 방어도를 !M! 얻습니다." - }, - - "Gremlin:BulkUp": { - "NAME": "몸집 부풀리기", - "DESCRIPTION": "expansioncontent:임시 *체력을 !M! 얻습니다. NL gremlin:뚱뚱한_그렘린으로 gremlin:교체합니다." - }, - - "Gremlin:BurlyBlow": { - "NAME": "굵직한 강타", - "DESCRIPTION": "피해를 !D! 줍니다. NL 적이 보유한 약화 하나당 피해를 !D! 줍니다." - }, - - "Gremlin:CatScratch": { - "NAME": "고양이 할퀴기", - "DESCRIPTION": "피해를 !D! 만큼 !M! 번 줍니다." - }, - - "Gremlin:Changeo": { - "NAME": "충전 중이다!", - "DESCRIPTION": "방어도를 !B! 얻고 gremlin:마법을 !M! 얻습니다." - }, - - "Gremlin:CongaLine": { - "NAME": "콩가 자세", - "DESCRIPTION": "내 턴 시작 시 [E] 를 얻고 다음 그렘린으로 gremlin:교체합니다.", - "UPGRADE_DESCRIPTION": "선천성. NL 내 턴 시작 시 [E] 를 얻고 다음 그렘린으로 gremlin:교체합니다." - }, - - "Gremlin:CounterStrike": { - "NAME": "반사 타격", - "DESCRIPTION": "피해를 !D! 줍니다. NL 적이 공격할 의도가 있다면 *수호를 !M! 장 얻습니다.", - "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL 적이 공격할 의도가 있다면 *수호+를 !M! 장 얻습니다." - }, - - "Gremlin:CowerChoice": { - "NAME": "큰절", - "DESCRIPTION": "모든 영혼을 잃습니다.", - "EXTENDED_DESCRIPTION": ["겁쟁이 그렘린. NL 멍청하지 않다."] - }, - - "Gremlin:CowerChoiceB": { - "NAME": "큰절", - "DESCRIPTION": "가장 뒤에 있는 그렘린을 영구적으로 잃습니다.", - "EXTENDED_DESCRIPTION": ["좋다. NL 남은 녀석들은 꺼져라!", "좋다! 꺼져라!"] - }, - - "Gremlin:DaggerDance": { - "NAME": "단검의 춤", - "DESCRIPTION": "적 전체에게 피해를 !D! 만큼 !M! 번 줍니다." - }, - - "Gremlin:Dazzle": { - "NAME": "현혹", - "DESCRIPTION": "피해를 !D! 줍니다. NL gremlin:마법을 3 이상 보유하고 있다면 힘을 2 gremlin:강탈합니다. NL 소멸." - }, - - "Gremlin:Defend": { - "NAME": "수비", - "DESCRIPTION": "방어도를 !B! 얻습니다." - }, - - "Gremlin:Duplicate": { - "NAME": "위조", - "DESCRIPTION": "손에 있는 공격 카드의 gremlin:메아리를 !M! 장 얻습니다. 그 카드의 비용을 1 낮춥니다. 소멸.", - "UPGRADE_DESCRIPTION": "손에 있는 공격 카드의 gremlin:메아리를 !M! 장 얻습니다. 그 카드의 비용을 1 낮춥니다." - }, - - "Gremlin:EdibleArmor": { - "NAME": "식용 갑옷", - "DESCRIPTION": "방어도를 변환해서 expansioncontent:임시 *체력을 얻습니다. NL 소멸." - }, - - "Gremlin:Encore": { - "NAME": "앙코르", - "DESCRIPTION": "gremlin:마법을 3 얻습니다. NL gremlin:마법을 소모할 때마다 적 전체에게 피해를 !M! 줍니다." - }, - - "Gremlin:Enthusiasm": { - "NAME": "열광", - "DESCRIPTION": "gremlin:교체할 때마다 카드를 1장 뽑습니다." - }, - - "Gremlin:Erupt": { - "NAME": "분출", - "DESCRIPTION": "힘을 !M! 얻습니다. NL 이번 턴이 끝날 때 힘을 !M! 잃습니다. NL 소멸." - }, - - "Gremlin:Exacerbate": { - "NAME": "악화", - "DESCRIPTION": "피해를 !D! 줍니다. NL gremlin:무력화를 부여합니다. NL 소멸." - }, - - "Gremlin:FairyDust": { - "NAME": "요정 가루", - "DESCRIPTION": "*수호를 !M! 장 얻고 카드를 !M! 장 뽑습니다. NL 소멸." - }, - - "Gremlin:SleeveOfAces": { - "NAME": "소매 속 카드", - "DESCRIPTION": "피해를 !D! 줍니다. NL 보유한 gremlin:마법 하나당 단도를 1장 얻습니다.", - "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL 보유한 gremlin:마법 하나당 강화된 단도를 1장 얻습니다." - }, - - "Gremlin:FatGremlin": { - "NAME": "뚱뚱한 그렘린", - "DESCRIPTION": "gremlin:뚱뚱한_그렘린으로 gremlin:교체합니다." - }, - - "Gremlin:FeelTheAudience": { - "NAME": "관중 청취", - "DESCRIPTION": "적 전체에게 피해를 !D! 줍니다. NL 공격할 의도가 있는 적 하나당 gremlin:마법을 !M! 얻습니다." - }, - - "Gremlin:FightChoice": { - "NAME": "싸움", - "DESCRIPTION": "전투를 시작합니다. NL 적이 힘을 !M! 얻습니다.", - "EXTENDED_DESCRIPTION": ["그렘린 죽인다!", "아무나 공격해라!"] - }, - - "Gremlin:FlipOut": { - "NAME": "자제력 상실", - "DESCRIPTION": "피해를 !D! 줍니다. NL 이번 턴 동안 방어도를 얻을 수 없습니다. NL 방어도를 얻을 때마다 적 전체에게 얻은 방어도만큼 피해를 줍니다." - }, - - "Gremlin:Flurry": { - "NAME": "돌풍", - "DESCRIPTION": "이번 턴에 사용된 카드 한 장당 피해를 !D! 줍니다. NL 소멸.", - "EXTENDED_DESCRIPTION": [ - " NL (카드를 ", - " 장 사용했습니다.)", - " 장 사용했습니다.)" - ] - }, - - "Gremlin:FollowThrough": { - "NAME": "리더를 위하여!", - "DESCRIPTION": "피해를 !D! 줍니다. NL 힘을 !M! 얻습니다. NL 이번 턴이 끝날 때 힘을 !M! 잃습니다." - }, - - "Gremlin:Fury": { - "NAME": "격분", - "DESCRIPTION": "보유한 힘 2당 이 카드의 비용이 [E] 감소합니다. NL 피해를 !D! 만큼 3번 줍니다." - }, - - "Gremlin:Glimmer": { - "NAME": "희미한 빛", - "DESCRIPTION": "피해를 !D! 줍니다. NL *수호를 2 장 얻습니다.", - "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL *수호+를 2 장 얻습니다." - }, - - "Gremlin:GlitterGuard": { - "NAME": "희미한 보호", - "DESCRIPTION": "*수호를 !M! 장 얻습니다. NL gremlin:방패_그렘린으로 gremlin:교체합니다.", - "UPGRADE_DESCRIPTION": "*수호+를 !M! 장 얻습니다. NL gremlin:방패_그렘린으로 gremlin:교체합니다." - }, - - "Gremlin:GremlinArms": { - "NAME": "그렘린 무기", - "DESCRIPTION": "무작위 단도 또는 *수호를 !M! 장 얻습니다." - }, - - "Gremlin:GremlinMeal": { - "NAME": "몸 풀기", - "DESCRIPTION": "힘을 !M! 얻습니다. NL 이번 턴이 끝날 때 힘을 !M! 잃습니다." - }, - - "Gremlin:GremlinDance": { - "NAME": "그렘린의 춤", - "DESCRIPTION": "피해를 !D! 줍니다. NL 현재 맨 앞에 있는 그렘린에 따라 효과가 추가됩니다.", - "EXTENDED_DESCRIPTION": ["피해를 !D! 줍니다.", - " 적 전체에게 피해를 줍니다.", ". NL 이번 턴 동안 적의 힘을 !M! 감소시킵니다.", - ". NL 방어도를 !B! 얻습니다.", ". NL 카드를 !M! 장 뽑습니다.", ". NL gremlin:마법을 !M! 얻습니다.", ". NL 힘을 !M! 얻습니다."] - }, - - "Gremlin:GremlinOffensive": { - "NAME": "그렘린 공세", - "DESCRIPTION": "피해를 !D! 줍니다. NL *그렘린 *공세를 1장 얻습니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL *그렘린 *공세+를 1장 얻습니다. NL 소멸." - }, - - "Gremlin:GremlinToss": { - "NAME": "그렘린 던지기", - "DESCRIPTION": "현재 방어도 와 gremlin:임시_체력만큼 피해를 줍니다.", - "UPGRADE_DESCRIPTION": "expansioncontent:임시 *체력을 !M! 얻습니다. NL 현재 방어도와 gremlin:임시_체력만큼 피해를 줍니다.", - "EXTENDED_DESCRIPTION": [" NL (피해를 !D! 줍니다.)"] - }, - - "Gremlin:GremlinWizard": { - "NAME": "마법사 그렘린", - "DESCRIPTION": "gremlin:마법사_그렘린으로 gremlin:교체합니다." - }, - - "Gremlin:Heckle": { - "NAME": "야유", - "DESCRIPTION": "적에게 해로운 효과를 부여할 때마다 expansioncontent:임시 *체력을 !M! 얻습니다." - }, - - "Gremlin:InfiniteBlocks": { - "NAME": "무한의 방어", - "DESCRIPTION": "내 턴 시작 시 *수호를 1장 얻습니다.", - "UPGRADE_DESCRIPTION": "선천성. NL 내 턴 시작 시 *수호를 1장 얻습니다." - }, - - "Gremlin:IrksomeBlow": { - "NAME": "짜증나는 강타", - "DESCRIPTION": "피해를 !D! 줍니다. NL 힘의 효과가 !M! 배로 적용됩니다." - }, - - "Gremlin:Irritability": { - "NAME": "조급함", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL 가시를 !M! 얻습니다. 이번 턴이 끝날 때 가시를 !M! 잃습니다. NL gremlin:화난_그렘린으로 gremlin:교체합니다." - }, - - "Gremlin:Jeer": { - "NAME": "조롱", - "DESCRIPTION": "피해를 !D! 줍니다. 적이 해로운 효과를 보유하고 있다면 expansioncontent:임시 *체력을 !M! 얻습니다." - }, - - "Gremlin:Kablamo": { - "NAME": "멋져!", - "DESCRIPTION": "적 전체에게 피해를 !D! 줍니다. NL 이 공격은 gremlin:마법을 소모하지 않습니다." - }, - - "Gremlin:LeaderChoice": { - "NAME": "선택하기", - "DESCRIPTION": "포기할 친구는 누구?" - }, - - "Gremlin:MadGremlin": { - "NAME": "화난 그렘린", - "DESCRIPTION": "gremlin:화난_그렘린으로 gremlin:교체합니다." - }, - - "Gremlin:MakeshiftArmor": { - "NAME": "급조 갑옷", - "DESCRIPTION": "공격 카드를 7장 사용할 때마다 인공물을 1 얻습니다.", - "UPGRADE_DESCRIPTION": "인공물을 !M! 얻습니다. NL 공격 카드를 7장 사용할 때마다 인공물을 1 얻습니다." - }, - - "Gremlin:Mockery": { - "NAME": "무시하는 조롱", - "DESCRIPTION": "약화를 !M! 부여합니다. NL 적이 약화를 3 이상 보유하고 있다면 방어도를 !B! 얻습니다." - }, - - "Gremlin:Necromancy": { - "NAME": "주술", - "DESCRIPTION": "gremlin:마법이 3 이상 필요합니다. NL 모든 gremlin:마법을 소모해서 무작위 그렘린을 체력이 !M! 인 상태로 부활시킵니다. NL 소멸.", - "EXTENDED_DESCRIPTION": ["마력이 부족해.", "아무도 죽지 않았어.", "공간이 비좁아."] - }, - - "Gremlin:Nob": { - "NAME": "귀족", - "DESCRIPTION": "expansioncontent:임시 *체력을 !M! 얻습니다. NL expansioncontent:임시 *체력을 모두 잃기 전까지 gremlin:귀족_그렘린으로 변이합니다." - }, - - "Gremlin:NobChoice": { - "NAME": "선택하기", - "DESCRIPTION": "연약한 그렘린이 영혼을 줘야 할까?" - }, - - "Gremlin:PartyStick": { - "NAME": "선봉 막대", - "DESCRIPTION": "휘발성. 사용불가. NL 이 카드가 손에 있는 동안 gremlin:교체할 때마다 [E] 를 얻습니다.", - "UPGRADE_DESCRIPTION": "사용불가. NL 이 카드가 손에 있는 동안 gremlin:교체할 때마다 [E] 를 얻습니다.", - "EXTENDED_DESCRIPTION": ["아무도 선봉 막대를 안 가지려고 해."] - }, - - "Gremlin:Patsy": { - "NAME": "봉", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL 다음 그렘린으로 gremlin:교체합니다." - }, - - "Gremlin:Pickpocket": { - "NAME": "슬쩍하기", - "DESCRIPTION": "모든 인공물을 gremlin:강탈합니다. NL 피해를 !D! 줍니다. NL 소멸." - }, - - "Gremlin:PinNeedle": { - "NAME": "바늘 핀", - "DESCRIPTION": "피해를 !D! 줍니다. NL *성가신 *구멍을 !M! 장 bronze:투입합니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL *성가신 *구멍+을 !M! 장 bronze:투입합니다. NL 소멸." - }, - - "Gremlin:Pinprick": { - "NAME": "성가신 구멍", - "DESCRIPTION": "피해를 !D! 줍니다. NL 카드를 1장 뽑습니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "이 카드를 뽑을 때 이 카드의 gremlin:메아리를 1장 얻습니다. NL 피해를 !D! 줍니다. NL 카드를 1장 뽑습니다. NL 소멸." - }, - - "Gremlin:Polish": { - "NAME": "광택제", - "DESCRIPTION": "단도 의 피해량을 !M! 증가시킵니다. NL *수호의 방어도를 !M! 증가시킵니다." - }, - - "Gremlin:PourSalt": { - "NAME": "소금 치기", - "DESCRIPTION": "피해를 !D! 줍니다. 적이 약화를 보유하고 있다면 약화를 1 제거하고 단도를 !M! 장 얻습니다." - }, - - "Gremlin:Presto": { - "NAME": "쨘!", - "DESCRIPTION": "피해를 !D! 줍니다. gremlin:마법을 !M! 얻습니다." - }, - - "Gremlin:Pretaliation": { - "NAME": "선제 공격", - "DESCRIPTION": "적이 공격할 의도가 있다면 피해를 !D! 줍니다. NL 적이 공격할 의도가 없다면 피해를 !blamage! 줍니다." - }, - - "Gremlin:ProperTools": { - "NAME": "제대로된 장비", - "DESCRIPTION": "피해를 !D! 줍니다. 적이 공격할 의도가 있다면 *수호를 !M! 장 얻습니다. 적이 공격할 의도가 없다면 단도를 !M! 장 얻습니다." - }, - - "Gremlin:RageBreak": { - "NAME": "고장난 분노", - "DESCRIPTION": "힘을 두 배로 만듭니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "방어도를 !B! 얻습니다. NL 힘을 두 배로 만듭니다. NL 소멸." - }, - - "Gremlin:Raid": { - "NAME": "습격", - "DESCRIPTION": "살아있는 그렘린 하나당 카드를 1장 뽑습니다. NL 카드를 !M! 장 버립니다.", - "UPGRADE_DESCRIPTION": "살아있는 그렘린 하나당 카드를 1장 뽑습니다. NL 카드를 !M! 장 버립니다." - }, - - "Gremlin:Revel": { - "NAME": "연회", - "DESCRIPTION": "살아있는 그렘린 하나당 [E] 를 얻습니다." - }, - - "Gremlin:Rhythm": { - "NAME": "리듬", - "DESCRIPTION": "다음 그렘린으로 gremlin:교체합니다. NL 뽑을 카드 더미에서 gremlin:시작 카드를 1장 가져옵니다. 이번 턴에 그 카드의 비용은 0이 됩니다." - }, - - "Gremlin:Rush": { - "NAME": "서두르기", - "DESCRIPTION": "휘발성. NL 피해를 !D! 줍니다. NL 소멸." - }, - - "Gremlin:Scatter": { - "NAME": "튀어어!", - "DESCRIPTION": "다음으로 체력을 잃을 때 무작위 그렘린으로 gremlin:교체하고 체력을 잃는 것을 막아줍니다. NL 소멸." - }, - - "Gremlin:SecondVolley": { - "NAME": "다음 일제 사격", - "DESCRIPTION": "피해를 !D! 줍니다. 이번 턴에 사용한 카드 한 장당 단도를 손이 가득찰 때까지 얻습니다.", - "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. 이번 턴에 사용한 카드 한 장당 강화된 단도를 가득찰 때까지 얻습니다.", - "EXTENDED_DESCRIPTION": [ - " NL (카드를 ", - " 장 사용했습니다.)", - " 장 사용했습니다.)" - ] - }, - - "Gremlin:ShadowShiv": { - "NAME": "그림자 단도", - "DESCRIPTION": "소멸하지 않는 공격 카드를 사용할 때마다 단도를 얻습니다." - }, - - "Gremlin:ShankStone": { - "NAME": "자루석", - "DESCRIPTION": "사용불가. NL 이 카드를 뽑을 때마다 단도를 !M! 장 얻습니다.", - "EXTENDED_DESCRIPTION": ["이 카드는 사용할 수 없다구."] - }, - - "Gremlin:SharpenBlades": { - "NAME": "날카로운 검", - "DESCRIPTION": "이번 턴 동안 손에 있는 모든 공격 카드의 비용을 0으로 낮춥니다.", - "UPGRADE_DESCRIPTION": "카드를 1장 뽑습니다. NL 이번 턴 동안 손에 있는 모든 공격 카드의 비용을 0으로 낮춥니다." - }, - - "Gremlin:ShieldGremlin": { - "NAME": "방패 그렘린", - "DESCRIPTION": " gremlin:방패_그렘린으로 gremlin:교체합니다." - }, - - "Gremlin:ShowOfHands": { - "NAME": "거수", - "DESCRIPTION": "손에 있는 카드 한 장당 방어도를 !M! 얻습니다.", - "UPGRADE_DESCRIPTION": "카드를 1장 뽑습니다. NL 손에 있는 카드 한 장당 방어도를 !M! 얻습니다." - }, - - "Gremlin:ShowStopper": { - "NAME": "명연기", - "DESCRIPTION": "gremlin:마법을 7 보유하고 있을 때만 사용가능합니다. NL 적 전체에게 피해를 !D! 만큼 !M! 번 줍니다.", - "EXTENDED_DESCRIPTION": ["긴장감이 부족해.", "타이밍을 놓쳤어."] - }, - - "Gremlin:SkullBash": { - "NAME": "해골 강타", - "DESCRIPTION": "휘발성. NL 피해를 !D! 줍니다. NL 취약을 !M! 부여합니다. NL 소멸." - }, - - "Gremlin:SneakyGremlin": { - "NAME": "교활한 그렘린", - "DESCRIPTION": "gremlin:교활한_그렘린으로 gremlin:교체합니다." - }, - - "Gremlin:Strike": { - "NAME": "타격", - "DESCRIPTION": "피해를 !D! 줍니다." - }, - - "Gremlin:Stupend": { - "NAME": "비대", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL 피해를 !D! 줍니다. NL gremlin:마법 효과가 방어도에 적용됩니다." - }, - - "Gremlin:SupplyScrollCard": { - "NAME": "보급형 두루마리", - "DESCRIPTION": "무작위 단도 또는 *수호를 !M! 장 얻습니다. NL 소멸." - }, - - "Gremlin:Tadah": { - "NAME": "이제 간다!", - "DESCRIPTION": "무작위 스킬 카드의 gremlin:메아리를 1장 얻습니다. NL gremlin:마법사_그렘린으로 gremlin:교체합니다.", - "UPGRADE_DESCRIPTION": "무작위 강화된 스킬 카드의 gremlin:메아리를 1장 얻습니다. NL gremlin:마법사_그렘린으로 gremlin:교체합니다." - }, - - "Gremlin:TagTeam": { - "NAME": "태그 팀", - "DESCRIPTION": "살아있는 그렘린 중 선택해 gremlin:교체합니다.", - "UPGRADE_DESCRIPTION": "보존. NL 살아있는 그렘린 중 선택해 gremlin:교체합니다." - }, - - "Gremlin:TargetWeakness": { - "NAME": "상처입은 대상", - "DESCRIPTION": "공격 대상이 약화를 보유하고 있다면 내 피해량이 !M! 증가합니다." - }, - - "Gremlin:Tricksy": { - "NAME": "잔머리", - "DESCRIPTION": "카드를 !M! 장 뽑습니다. 뽑은 카드 중 공격 카드가 아닌 카드를 모두 버립니다. NL gremlin:교활한_그렘린으로 gremlin:교체합니다." - }, - - "Gremlin:TwistTheKnife": { - "NAME": "칼 돋친 말", - "DESCRIPTION": "피해를 !D! 줍니다. NL 단도를 1장 얻습니다.", - "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL 강화된 단도를 1장 얻습니다." - }, - - "Gremlin:ToeStub": { - "NAME": "삐끗", - "DESCRIPTION": "피해를 !D! 줍니다. 적이 약화를 보유하고 있다면 취약을 !M! 부여합니다." - }, - - "Gremlin:Unforgiving": { - "NAME": "지독함", - "DESCRIPTION": "힘을 잃지 않습니다." - }, - - "Gremlin:Ward": { - "NAME": "수호", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL 소멸." - }, - - "Gremlin:Whiz": { - "NAME": "마아법", - "DESCRIPTION": "gremlin:마법을 !M! 얻습니다. 다음 턴에 *쾅을 얻습니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "gremlin:마법을 !M! 얻습니다. 다음 턴에 *쾅+을 얻습니다. NL 소멸." - }, - - "Gremlin:Wizardry": { - "NAME": "마법 기술", - "DESCRIPTION": "내 턴 시작 시 gremlin:마법을 !M! 얻습니다.", - "UPGRADE_DESCRIPTION": "선천성. NL 내 턴 시작 시 gremlin:마법을 !M! 얻습니다." - }, - - "Gremlin:Placeholder": { - "NAME": "", - "DESCRIPTION": "", - "UPGRADE_DESCRIPTION": "", - "EXTENDED_DESCRIPTION": [""] - } -} \ No newline at end of file +{ + "Gremlin:AggressiveDefense": { + "NAME": "공격적인 수비", + "DESCRIPTION": "피해를 !D! 줍니다. NL 이번 턴 동안 방어도를 얻을 때마다 공격한 대상은 체력을 !M! 잃습니다." + }, + + "Gremlin:ArmsTheft": { + "NAME": "소매 치기", + "DESCRIPTION": "약화를 !M! 부여합니다. NL 적의 힘을 !M! gremlin:강탈합니다. NL 소멸." + }, + + "Gremlin:Astound": { + "NAME": "경외", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL gremlin:마법이 3 이상이면 *수호를 !M! 장 얻습니다.", + "UPGRADE_DESCRIPTION": "방어도를 !B! 얻습니다. NL gremlin:마법이 3 이상 이상이면 *수호+를 !M! 장 얻습니다." + }, + + "Gremlin:Bang": { + "NAME": "쾅", + "DESCRIPTION": "피해를 !D! 만큼 !M! 번 줍니다. *마아법을 버린 카드 더미에 섞어 넣습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "피해를 !D! 만큼 !M! 번 줍니다. *마아법+을 버린 카드 더미에 섞어 넣습니다. NL 소멸." + }, + + "Gremlin:Bellow": { + "NAME": "고함", + "DESCRIPTION": "휘발성. NL 공격할 의도가 없는 적 하나당 힘을 !M! 얻습니다. NL 소멸." + }, + + "Gremlin:BrokenShin": { + "NAME": "정강이 까기", + "DESCRIPTION": "대상의 약화 !M! 당 gremlin:분개를 부여합니다. NL 소멸." + }, + + "Gremlin:BubbleBarrier": { + "NAME": "거품 장벽", + "DESCRIPTION": "이번 턴에 카드를 사용할 때마다 방어도를 !M! 얻습니다." + }, + + "Gremlin:BulkUp": { + "NAME": "몸집 부풀리기", + "DESCRIPTION": "expansioncontent:임시 *체력을 !M! 얻습니다. NL gremlin:뚱뚱한 *그렘린으로 gremlin:교체합니다." + }, + + "Gremlin:BurlyBlow": { + "NAME": "굵직한 강타", + "DESCRIPTION": "피해를 !D! 줍니다. NL 적이 보유한 약화 하나당 피해를 !D! 줍니다." + }, + + "Gremlin:CatScratch": { + "NAME": "고양이 할퀴기", + "DESCRIPTION": "피해를 !D! 만큼 !M! 번 줍니다." + }, + + "Gremlin:Changeo": { + "NAME": "충전 중이다!", + "DESCRIPTION": "방어도를 !B! 얻고 gremlin:마법을 !M! 얻습니다." + }, + + "Gremlin:CongaLine": { + "NAME": "콩가 자세", + "DESCRIPTION": "내 턴 시작 시 [E] 를 얻고 다음 그렘린으로 gremlin:교체합니다.", + "UPGRADE_DESCRIPTION": "선천성. NL 내 턴 시작 시 [E] 를 얻고 다음 그렘린으로 gremlin:교체합니다." + }, + + "Gremlin:CounterStrike": { + "NAME": "반사 타격", + "DESCRIPTION": "피해를 !D! 줍니다. NL 적이 공격할 의도가 있다면 선두에 있는 그렘린의 고유 효과를 !M! 번 발동시킵니다." + }, + + "Gremlin:CowerChoice": { + "NAME": "큰절", + "DESCRIPTION": "모든 영혼을 잃습니다.", + "EXTENDED_DESCRIPTION": ["겁쟁이 그렘린. NL 멍청하지 않다."] + }, + + "Gremlin:CowerChoiceB": { + "NAME": "큰절", + "DESCRIPTION": "가장 뒤에 있는 그렘린을 영구적으로 잃습니다.", + "EXTENDED_DESCRIPTION": ["좋다. NL 남은 녀석들은 꺼져라!", "좋다! 꺼져라!"] + }, + + "Gremlin:DaggerDance": { + "NAME": "단검의 춤", + "DESCRIPTION": "적 전체에게 피해를 !D! 만큼 !M! 번 줍니다." + }, + + "Gremlin:Dazzle": { + "NAME": "현혹", + "DESCRIPTION": "피해를 !D! 줍니다. NL gremlin:마법이 3 이상이면 힘을 2 gremlin:강탈합니다. NL 소멸." + }, + + "Gremlin:Defend": { + "NAME": "수비", + "DESCRIPTION": "방어도를 !B! 얻습니다." + }, + + "Gremlin:Duplicate": { + "NAME": "위조", + "DESCRIPTION": "손에 있는 공격 카드의 gremlin:메아리를 !M! 장 얻습니다. NL 그 카드의 비용을 1 낮춥니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "손에 있는 공격 카드의 gremlin:메아리를 !M! 장 얻습니다. NL 그 카드의 비용을 1 낮춥니다." + }, + + "Gremlin:EdibleArmor": { + "NAME": "식용 갑옷", + "DESCRIPTION": "방어도를 변환해서 expansioncontent:임시 *체력을 얻습니다. NL 소멸." + }, + + "Gremlin:Encore": { + "NAME": "앙코르", + "DESCRIPTION": "gremlin:마법을 3 얻습니다. NL gremlin:마법을 소모할 때 피해량을 !M! 증가시킵니다." + }, + + "Gremlin:Enthusiasm": { + "NAME": "열광", + "DESCRIPTION": "gremlin:교체할 때마다 카드를 1장 뽑습니다." + }, + + "Gremlin:Erupt": { + "NAME": "분출", + "DESCRIPTION": "힘을 !M! 얻습니다. NL 이번 턴이 끝날 때 힘을 !M! 잃습니다. NL 소멸." + }, + + "Gremlin:Exacerbate": { + "NAME": "악화", + "DESCRIPTION": "피해를 !D! 줍니다. NL 공격한 대상에게 약화를 부여할 때마다 대상은 체력을 !M! 잃습니다. NL 소멸." + }, + + "Gremlin:FairyDust": { + "NAME": "요정 가루", + "DESCRIPTION": "*수호를 !M! 장 얻습니다. NL 카드를 !M! 장 뽑습니다. NL 소멸." + }, + + "Gremlin:SleeveOfAces": { + "NAME": "소매 속 카드", + "DESCRIPTION": "피해를 !D! 줍니다. NL 보유한 gremlin:마법당 단도를 1장 얻습니다.", + "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL 보유한 gremlin:마법 하나당 강화된 단도를 1장 얻습니다." + }, + + "Gremlin:FatGremlin": { + "NAME": "뚱뚱한 그렘린", + "DESCRIPTION": "gremlin:뚱뚱한 *그렘린으로 gremlin:교체합니다." + }, + + "Gremlin:FeelTheAudience": { + "NAME": "관중 청취", + "DESCRIPTION": "적 전체에게 피해를 !D! 줍니다. NL 공격할 의도가 있는 적 하나당 gremlin:마법을 !M! 얻습니다." + }, + + "Gremlin:FightChoice": { + "NAME": "싸움", + "DESCRIPTION": "전투를 시작합니다. NL 적이 힘을 !M! 얻습니다.", + "EXTENDED_DESCRIPTION": ["그렘린 죽인다!", "아무나 공격해라!"] + }, + + "Gremlin:FlipOut": { + "NAME": "자제력 상실", + "DESCRIPTION": "피해를 !D! 줍니다. NL 이번 턴에 방어도를 얻을 수 없습니다. NL 방어도를 얻을 때마다 적 전체에게 얻은 방어도만큼 피해를 줍니다." + }, + + "Gremlin:Flurry": { + "NAME": "돌풍", + "DESCRIPTION": "이번 턴에 사용된 카드 한 장당 피해를 !D! 줍니다. NL 소멸.", + "EXTENDED_DESCRIPTION": [ + " NL (카드를 ", + " 장 사용했습니다.)", + " 장 사용했습니다.)" + ] + }, + + "Gremlin:FollowThrough": { + "NAME": "리더를 위하여!", + "DESCRIPTION": "피해를 !D! 줍니다. NL 힘을 !M! 얻습니다. NL 이번 턴이 끝날 때 힘을 !M! 잃습니다." + }, + + "Gremlin:Fury": { + "NAME": "격분", + "DESCRIPTION": "보유한 힘 2당 이 카드의 비용이 [E] 감소합니다. NL 피해를 !D! 만큼 3번 줍니다." + }, + + "Gremlin:Glimmer": { + "NAME": "희미한 빛", + "DESCRIPTION": "피해를 !D! 줍니다. NL *수호를 2장 얻습니다.", + "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL *수호+를 2장 얻습니다." + }, + + "Gremlin:GlitterGuard": { + "NAME": "희미한 보호", + "DESCRIPTION": "*수호를 !M! 장 얻습니다. NL gremlin:방패 *그렘린으로 gremlin:교체합니다.", + "UPGRADE_DESCRIPTION": "*수호+를 !M! 장 얻습니다. NL gremlin:방패 *그렘린으로 gremlin:교체합니다." + }, + + "Gremlin:GremlinArms": { + "NAME": "그렘린 무기", + "DESCRIPTION": "선두에 있는 그렘린의 효과를 발동시킵니다. 살아있는 그렘린 중 선택해 gremlin:교체합니다.", + "UPGRADE_DESCRIPTION": "선두에 있는 그렘린의 효과를 2번 발동시킵니다. 살아있는 그렘린 중 선택해 gremlin:교체합니다." + }, + + "Gremlin:GremlinMeal": { + "NAME": "몸 풀기", + "DESCRIPTION": "힘을 !M! 얻습니다. NL 이번 턴이 끝날 때 힘을 !M! 잃습니다." + }, + + "Gremlin:GremlinDance": { + "NAME": "그렘린의 춤", + "DESCRIPTION": "피해를 !D! 줍니다. NL 현재 맨 앞에 있는 그렘린에 따라 효과가 추가됩니다.", + "EXTENDED_DESCRIPTION": ["피해를 !D! 줍니다.", + " 적 전체에게 피해를 줍니다.", ". NL 이번 턴 동안 적의 힘을 !M! 감소시킵니다.", + ". NL 방어도를 !B! 얻습니다.", ". NL 카드를 !M! 장 뽑습니다.", ". NL gremlin:마법을 !M! 얻습니다.", ". NL 힘을 !M! 얻습니다."] + }, + + "Gremlin:GremlinOffensive": { + "NAME": "그렘린 공세", + "DESCRIPTION": "피해를 !D! 줍니다. NL *그렘린 *공세를 얻습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL *그렘린 *공세+를 얻습니다. NL 소멸." + }, + + "Gremlin:GremlinToss": { + "NAME": "그렘린 던지기", + "DESCRIPTION": "expansioncontent:임시 *체력을 !M! 얻습니다. NL 현재 방어도 와 *임시 *체력만큼 피해를 줍니다.", + "UPGRADE_DESCRIPTION": "expansioncontent:임시 *체력을 !M! 얻습니다. NL 현재 방어도 와 *임시 *체력만큼 피해를 줍니다.", + "EXTENDED_DESCRIPTION": [" NL (피해를 !D! 줍니다.)"] + }, + + "Gremlin:GremlinWizard": { + "NAME": "마법사 그렘린", + "DESCRIPTION": "gremlin:마법사 *그렘린으로 gremlin:교체합니다." + }, + + "Gremlin:Heckle": { + "NAME": "야유", + "DESCRIPTION": "적에게 해로운 효과를 부여할 때마다 expansioncontent:임시 *체력을 !M! 얻습니다." + }, + + "Gremlin:InfiniteBlocks": { + "NAME": "무한의 방어", + "DESCRIPTION": "내 턴 시작 시 *수호를 얻습니다.", + "UPGRADE_DESCRIPTION": "선천성. NL 내 턴 시작 시 *수호를 얻습니다." + }, + + "Gremlin:IrksomeBlow": { + "NAME": "짜증나는 강타", + "DESCRIPTION": "피해를 !D! 줍니다. NL 힘의 효과가 !M! 배로 적용됩니다." + }, + + "Gremlin:Irritability": { + "NAME": "조급함", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 가시를 !M! 얻습니다. 이번 턴이 끝날 때 가시를 !M! 잃습니다. NL gremlin:화난 *그렘린으로 gremlin:교체합니다." + }, + + "Gremlin:Jeer": { + "NAME": "조롱", + "DESCRIPTION": "피해를 !D! 줍니다. 적이 해로운 효과를 보유하고 있다면 expansioncontent:임시 *체력을 !M! 얻습니다." + }, + + "Gremlin:Kablamo": { + "NAME": "멋져!", + "DESCRIPTION": "적 전체에게 피해를 !D! 만큼 2번 줍니다. NL 이 공격은 gremlin:마법을 소모하지 않습니다." + }, + + "Gremlin:LeaderChoice": { + "NAME": "선택하기", + "DESCRIPTION": "포기할 친구는 누구?" + }, + + "Gremlin:MadGremlin": { + "NAME": "화난 그렘린", + "DESCRIPTION": "gremlin:화난 *그렘린으로 gremlin:교체합니다." + }, + + "Gremlin:MakeshiftArmor": { + "NAME": "급조 갑옷", + "DESCRIPTION": "공격 카드를 7장 사용할 때마다 인공물을 1 얻습니다.", + "UPGRADE_DESCRIPTION": "인공물을 !M! 얻습니다. NL 공격 카드를 7장 사용할 때마다 인공물을 1 얻습니다." + }, + + "Gremlin:Mockery": { + "NAME": "무시하는 조롱", + "DESCRIPTION": "약화를 !M! 부여합니다. NL 적의 약화가 3 이상이면 방어도를 !B! 얻습니다." + }, + + "Gremlin:Necromancy": { + "NAME": "주술", + "DESCRIPTION": "gremlin:마법이 3 이상 필요합니다. NL 모든 gremlin:마법을 소모해서 무작위 그렘린을 체력이 !M! 인 상태로 부활시킵니다. NL 소멸.", + "EXTENDED_DESCRIPTION": ["마력이 부족해.", "아무도 죽지 않았어.", "공간이 비좁아."] + }, + + "Gremlin:Nob": { + "NAME": "귀족", + "DESCRIPTION": "expansioncontent:임시 *체력을 !M! 얻습니다. NL expansioncontent:임시 *체력을 모두 잃기 전까지 gremlin:귀족 *그렘린으로 변이합니다." + }, + + "Gremlin:NobChoice": { + "NAME": "선택하기", + "DESCRIPTION": "연약한 그렘린이 영혼을 줘야 할까?" + }, + + "Gremlin:PartyStick": { + "NAME": "선봉 막대", + "DESCRIPTION": "휘발성. 사용불가. NL 이 카드가 손에 있는 동안 gremlin:교체할 때마다 [E] 를 얻습니다.", + "UPGRADE_DESCRIPTION": "사용불가. NL 이 카드가 손에 있는 동안 gremlin:교체할 때마다 [E] 를 얻습니다.", + "EXTENDED_DESCRIPTION": ["아무도 선봉 막대를 안 가지려고 해."] + }, + + "Gremlin:Patsy": { + "NAME": "봉", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 다음 그렘린으로 gremlin:교체합니다." + }, + + "Gremlin:Pickpocket": { + "NAME": "슬쩍하기", + "DESCRIPTION": "피해를 !D! 줍니다. NL 골드를 !M! 얻습니다. NL 소멸." + }, + + "Gremlin:PinNeedle": { + "NAME": "바늘 핀", + "DESCRIPTION": "피해를 !D! 줍니다. NL *성가신 *구멍을 !M! 장 bronze:투입합니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL *성가신 *구멍+을 !M! 장 bronze:투입합니다. NL 소멸." + }, + + "Gremlin:Pinprick": { + "NAME": "성가신 구멍", + "DESCRIPTION": "피해를 !D! 줍니다. NL 카드를 1장 뽑습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "이 카드를 뽑을 때 이 카드의 gremlin:메아리를 1장 얻습니다. NL 피해를 !D! 줍니다. NL 카드를 1장 뽑습니다. NL 소멸." + }, + + "Gremlin:Polish": { + "NAME": "광택제", + "DESCRIPTION": "단도 의 피해량을 !M! 증가시킵니다. NL *수호의 방어도를 !M! 증가시킵니다." + }, + + "Gremlin:PourSalt": { + "NAME": "소금 치기", + "DESCRIPTION": "피해를 !D! 줍니다. 적이 약화를 보유하고 있다면 약화를 1 제거하고 단도를 !M! 장 얻습니다." + }, + + "Gremlin:Presto": { + "NAME": "쨘!", + "DESCRIPTION": "피해를 !D! 줍니다. gremlin:마법을 !M! 얻습니다." + }, + + "Gremlin:Pretaliation": { + "NAME": "선제 공격", + "DESCRIPTION": "피해를 !D! 만큼 두 번 줍니다. NL 적이 공격할 의도가 있다면 피해를 !M! 줍니다." + }, + + "Gremlin:ProperTools": { + "NAME": "제대로된 장비", + "DESCRIPTION": "피해를 !D! 줍니다. 적이 공격할 의도가 있다면 *수호를 !M! 장 얻습니다. 적이 공격할 의도가 없다면 단도를 !M! 장 얻습니다." + }, + + "Gremlin:RageBreak": { + "NAME": "고장난 분노", + "DESCRIPTION": "힘을 두 배로 만듭니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "방어도를 !B! 얻습니다. NL 힘을 두 배로 만듭니다. NL 소멸." + }, + + "Gremlin:Raid": { + "NAME": "습격", + "DESCRIPTION": "살아있는 그렘린 하나당 카드를 1장 뽑습니다. NL 카드를 !M! 장 버립니다.", + "UPGRADE_DESCRIPTION": "살아있는 그렘린 하나당 카드를 1장 뽑습니다. NL 카드를 !M! 장 버립니다." + }, + + "Gremlin:Revel": { + "NAME": "연회", + "DESCRIPTION": "살아있는 그렘린 하나당 [E] 를 얻습니다." + }, + + "Gremlin:Rhythm": { + "NAME": "리듬", + "DESCRIPTION": "다음 그렘린으로 gremlin:교체합니다. NL 뽑을 카드 더미에서 gremlin:시작 카드를 1장 가져옵니다. 이번 턴에 그 카드의 비용은 0이 됩니다." + }, + + "Gremlin:Rush": { + "NAME": "서두르기", + "DESCRIPTION": "휘발성. NL 피해를 !D! 줍니다. NL 소멸." + }, + + "Gremlin:Scatter": { + "NAME": "튀어어!", + "DESCRIPTION": "다음으로 체력을 잃을 때 무작위 그렘린으로 gremlin:교체하고 체력을 잃는 것을 막아줍니다. NL 소멸." + }, + + "Gremlin:SecondVolley": { + "NAME": "다음 일제 사격", + "DESCRIPTION": "피해를 !D! 줍니다. NL 이번 턴에 사용한 카드 한 장당 단도를 손이 가득찰 때까지 얻습니다.", + "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL 이번 턴에 사용한 카드 한 장당 강화된 단도를 손이 가득찰 때까지 얻습니다.", + "EXTENDED_DESCRIPTION": [ + " NL (카드를 ", + " 장 사용했습니다.)", + " 장 사용했습니다.)" + ] + }, + + "Gremlin:ShadowShiv": { + "NAME": "그림자 단도", + "DESCRIPTION": "*소멸하지 않는 공격 카드를 사용할 때마다 단도를 얻습니다." + }, + + "Gremlin:ShankStone": { + "NAME": "자루석", + "DESCRIPTION": "사용불가. NL 이 카드를 뽑을 때마다 단도를 !M! 장 얻습니다.", + "EXTENDED_DESCRIPTION": ["이 카드는 사용할 수 없다구."] + }, + + "Gremlin:SharpenBlades": { + "NAME": "날카로운 검", + "DESCRIPTION": "이번 턴 동안 손에 있는 모든 공격 카드의 비용을 0으로 낮춥니다.", + "UPGRADE_DESCRIPTION": "카드를 1장 뽑습니다. NL 이번 턴 동안 손에 있는 모든 공격 카드의 비용을 0으로 낮춥니다." + }, + + "Gremlin:ShieldGremlin": { + "NAME": "방패 그렘린", + "DESCRIPTION": "gremlin:방패 *그렘린으로 gremlin:교체합니다." + }, + + "Gremlin:ShowOfHands": { + "NAME": "거수", + "DESCRIPTION": "손에 있는 카드 한 장당 방어도를 !M! 얻습니다.", + "UPGRADE_DESCRIPTION": "카드를 1장 뽑습니다. NL 손에 있는 카드 한 장당 방어도를 !M! 얻습니다." + }, + + "Gremlin:ShowStopper": { + "NAME": "명연기", + "DESCRIPTION": "gremlin:마법을 7 보유할 때만 사용가능합니다. NL 적 전체에게 피해를 !D! 만큼 !M! 번 줍니다.", + "EXTENDED_DESCRIPTION": ["긴장감이 부족해.", "타이밍을 놓쳤어."] + }, + + "Gremlin:SkullBash": { + "NAME": "해골 강타", + "DESCRIPTION": "휘발성. NL 피해를 !D! 줍니다. NL 취약을 !M! 부여합니다. NL 소멸." + }, + + "Gremlin:SneakyGremlin": { + "NAME": "교활한 그렘린", + "DESCRIPTION": "gremlin:교활한 *그렘린으로 gremlin:교체합니다." + }, + + "Gremlin:Strike": { + "NAME": "타격", + "DESCRIPTION": "피해를 !D! 줍니다." + }, + + "Gremlin:Stupend": { + "NAME": "비대", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 피해를 !D! 줍니다. NL gremlin:마법 효과가 방어도에 적용됩니다." + }, + + "Gremlin:SupplyScrollCard": { + "NAME": "보급형 두루마리", + "DESCRIPTION": "무작위 단도 또는 *수호를 !M! 장 얻습니다. NL 소멸." + }, + + "Gremlin:Tadah": { + "NAME": "이제 간다!", + "DESCRIPTION": "*수호를 얻습니다. NL gremlin:마법사 *그렘린으로 gremlin:교체합니다.", + "UPGRADE_DESCRIPTION": "*수호+를 얻습니다. NL gremlin:마법사 *그렘린으로 gremlin:교체합니다." + }, + + "Gremlin:TagTeam": { + "NAME": "태그 팀", + "DESCRIPTION": "살아있는 그렘린 중 선택해 gremlin:교체합니다.", + "UPGRADE_DESCRIPTION": "보존. NL 살아있는 그렘린 중 선택해 gremlin:교체합니다." + }, + + "Gremlin:TargetWeakness": { + "NAME": "상처입은 대상", + "DESCRIPTION": "공격 대상이 약화를 보유하고 있다면 피해량이 !M! 증가합니다." + }, + + "Gremlin:Tricksy": { + "NAME": "잔머리", + "DESCRIPTION": "카드를 !M! 장 뽑습니다. 뽑은 카드 중 공격 카드가 아닌 카드를 모두 버립니다. NL gremlin:교활한 *그렘린으로 gremlin:교체합니다." + }, + + "Gremlin:TwistTheKnife": { + "NAME": "칼 돋친 말", + "DESCRIPTION": "피해를 !D! 줍니다. NL 단도를 얻습니다.", + "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL 강화된 단도를 얻습니다." + }, + + "Gremlin:ToeStub": { + "NAME": "삐끗", + "DESCRIPTION": "피해를 !D! 줍니다. 적이 약화를 보유하고 있다면 취약을 !M! 부여합니다." + }, + + "Gremlin:Unforgiving": { + "NAME": "지독함", + "DESCRIPTION": "힘을 잃지 않습니다." + }, + + "Gremlin:Ward": { + "NAME": "수호", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 소멸." + }, + + "Gremlin:Whiz": { + "NAME": "마아법", + "DESCRIPTION": "gremlin:마법을 !M! 얻습니다. 다음 턴에 *쾅을 얻습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "gremlin:마법을 !M! 얻습니다. 다음 턴에 *쾅+을 얻습니다. NL 소멸." + }, + + "Gremlin:Wizardry": { + "NAME": "마법 기술", + "DESCRIPTION": "내 턴 시작 시 gremlin:마법을 !M! 얻습니다.", + "UPGRADE_DESCRIPTION": "선천성. NL 내 턴 시작 시 gremlin:마법을 !M! 얻습니다." + }, + + "Gremlin:Placeholder": { + "NAME": "", + "DESCRIPTION": "", + "UPGRADE_DESCRIPTION": "", + "EXTENDED_DESCRIPTION": [""] + } +} diff --git a/src/main/resources/gremlinResources/localization/kor/EventStrings.json b/src/main/resources/gremlinResources/localization/kor/EventStrings.json index f572f86f7e..8fd44d8307 100644 --- a/src/main/resources/gremlinResources/localization/kor/EventStrings.json +++ b/src/main/resources/gremlinResources/localization/kor/EventStrings.json @@ -1,111 +1,111 @@ -{ - "Gremlin:CursedTome": { - "OPTIONS": [ - "[가져간다] #g책을 #g얻습니다. #r모든 #r그렘린이 #r체력을 #r" - ] - }, - "Gremlin:BackToBasics": { - "NAME": "", - "DESCRIPTIONS": [ - "융통성있는 정신은 의심에 굴하지 않습니다." - ], - "OPTIONS": [ - "[변덕] #g모든 #g타격과 #g수비를 #g단도와 #g수호로 #g교체합니다.", - "[잠김] 타격과 수비가 필요합니다." - ] - }, - "Gremlin:KnowingSkull": { - "OPTIONS": [ - "[정보?] #g보스가 #g나타납니다. #r모든 #r그렘린이 #r체력을 #r", - "[성공하는 법?] #g무색 #g카드를 #g1개 #g얻습니다. #r모든 #r그렘린이 #r체력을 #r", - "[정신자극제?] #g포션을 #g1개 #g얻습니다. #r모든 #r그렘린이 #r영혼을 #r", - " #g잃습니다. #r모든 #r그렘린이 #r체력을 #r", - "[어디로 나가?] #r모든 #r그렘린이 #r체력을 #r" - - ] - }, - "Gremlin:MatchingGame": { - "DESCRIPTIONS": [ - "\" 카드는 #b12장! 짝을 맞추면 가져가도 된다! 기회는 #b5번- \" NL NL #b\"10번!\" 당신이 끼어듭니다. NL NL 그렘린이 노려봅니다. #b\"5번!\" NL NL #b\"여덟.\" NL NL #b\"6번,\" 그가 침을 뱉습니다. \"그리고 #p저주 도 받아 가야겠구나.\" NL NL 당신은 그가 #p저주받길 바랍니다.", - "당신은 그렘린의 게임을 마치고 올려다보았습니다. NL 더 #y~공짜로~ #y~더~ #y~챙기기도~ 전에 그는 도망쳐버렸습니다!", - "그렘린은 미친듯이 테이블 위의 카드를 섞고 있습니다. 그는 #y~공짜로~ ~물건을~ 주는 것 같습니다. 당신은 #y~공짜~ #y~물건이라면~ 놓칠 수 없죠." - ] - }, - "Gremlin:Nest": { - "OPTIONS": [ - "[줄에 서 있는다] 의식용 단검 #g카드를 #g얻습니다. #r그렘린들이 #r체력을 #r" - ] - }, - "Gremlin:ScrapOoze": { - "OPTIONS": [ - "[뒤진다] #r모든 #r그렘린이 #r체력을 #r", - "[더 뻗는다] #r모든 #r그렘린이 #r체력을 #r" - ] - }, - "Gremlin:ScrapOozeReplacement": { - "NAME": "날붙이 수액", - "DESCRIPTIONS": [ - "방으로 들어가 보니 ~콸콸~ ~흐르는~ ~소리~ 와 @철이@ @갈리는@ @소리@ 가 들립니다. #y날붙이 #y수액 이네요! 이 재미있는 작은 슬라임들은 항상 #y먹음직스러운 #y것들을 찾아다닙니다. 더 좋은 건 그들이 느리고 너무 약해서 당신이 가져가도 된다는 거죠! 당신은 가시의 산성을 피하는 최적의 방법도 알고 있으니까요. 하지만 불행히도 물건을 가져가려면 약간의 #r평정심 과 #r집중력 이 필요합니다.", - "조심, 조심스럽게, 당신은 가시 부분과 날붙이 부분을 피해서 갑니다. 이거 참 #r@지루하네요.@ NL 하지만 계속하다 보면 눈부신 유물을 얻을 수 있을 것입니다...", - "#g성공이다! NL 당신은 날붙이와 불타는 산 속을 뒤적거린 끝에 #y유물을 붙잡아 꺼냈습니다. NL 새로운 장난감을 움켜쥐고 수액에서 손을 뺍니다.", - "이 방법은 너무 #r지루했습니다. 대체 무슨 짓을 한거죠?", - "당신은 이 곳을 벗어나기로 했습니다. NL 슬라임은 계속 날붙이를 삼키기만 할 뿐 당신에게 아무런 관심도 보이지 않습니다." - ], - "OPTIONS": [ - "[조심히 가져간다] #r", - "%: #r저주를 #r받습니다 #r- #r주의산만. #g", - "%: #g유물을 #g찾습니다.", - "[떠난다]", - "[조심한다] #r" - ] - }, - "Gremlin:SensoryStone": { - "OPTIONS": [ - "[회상] #g2장의 #g무색 #g카드 #b보상을 #g획득합니다. #r모든 #r그렘린이 #r체력을 #r", - "[회상] #g3장의 #g무색 #g카드 #b보상을 #g획득합니다. #r모든 #r그렘린이 #r체력을 #r" - ] - }, - "Gremlin:Trenchcoat": { - "NAME": "수상쩍은 상인", - "DESCRIPTIONS": [ - "당신은 트렌치코트 안에 다섯 그렘린이 합쳐서 있는 듯한 수상쩍은 자와 우연히 마주쳤습니다. NL \"안녕, 여행자,\" 거슬리는 목소리로 불러세웁니다. NL \"나야 나, #y친절한 #y상인. 절대 트렌치코트 안에 그렘린 다섯 마리가 함께 있는 건 아니다. 완전 훔치지 않은 것 같은 ~양품들~ 좀 보고 가?\"", - "수상쩍은 상인의 물건일지라도 할인은 참을 수 없습니다. NL 구매를 마치자마자 상인은 바로 판을 접습니다. NL NL 멀리서 희미하게 화난 고함 소리가 들립니다. #r\"빌어먹을, #r그렘린들이 #r털어갔네요!\"", - "비열한 상인의 배를 채워줄 순 없죠. 당신은 짐을 챙깁니다. 당신이 가담하지 않자 상인은 곧바로 달아나버렸습니다." - ], - "OPTIONS": [ - "[산다] #r영혼을 #r", - " #r잃습니다", - ". #g무작위 #g무색 #g카드를 #g1장 #g얻습니다.", - ". #g무작위 #g무색 #g카드를 #g2장 #g얻습니다.", - ". #g무작위 #g무색 #g카드를 #g3장 #g얻습니다.", - "[떠난다]", - "[잠김] 요구 사항: 최소 ", - " 영혼.", - "[거절한다]" - ] - }, - "Gremlin:Vampires": { - "DESCRIPTIONS": [ - "조명이 없는 거리에서, 어둠의 의식을 치르고 있는 대여섯 명의 후드를 눌러싼 자들이 보입니다. 당신이 다가가자, 그들은 섬뜩한 미소를 지으며 돌아섰습니다. 그들 중 가장 키 큰 이는 송곳니가 길게 삐져나와 있었습니다. 그가 당신에게 창백한 손을 내밉니다. NL ~\"우리와~ ~함께~ ~하자~ ~탐욕스러운~ ~자여,~ ~첨탑의~ ~따스함을~ ~느낄~ ~수~ ~있다네.\"~" - ] - }, - "Gremlin:WheelGame": { - "DESCRIPTIONS": [ - "그렘린은 달려들지만 당신은 준비되어있습니다. NL 그렘린이 단도로 찌르기 전에 베어버립니다. NL 슬프게도 당신 맘대로 상을 뜯어가기도 전에 돌림판은 감쪽같이 사라졌습니다." - ], - "OPTIONS": [ - "[보상!] #g선빵필승!", - "[턴다]" - ] - }, - "Gremlin:WingStatue": { - "OPTIONS": [ - "[기도] #g카드를 #g1장 #g덱에서 #g제거합니다. #r모든 #r그렘린들이 #r체력을 #r" - ] - }, - "Gremlin:WorldOfGoop": { - "OPTIONS": [ - " #g얻습니다. #r모든 #r그렘린들이 #r체력을 #r" - ] - } +{ + "Gremlin:CursedTome": { + "OPTIONS": [ + "[가져간다] #g책을 #g얻습니다. #r모든 #r그렘린이 #r체력을 #r" + ] + }, + "Gremlin:BackToBasics": { + "NAME": "", + "DESCRIPTIONS": [ + "융통성있는 정신은 의심에 굴하지 않습니다." + ], + "OPTIONS": [ + "[변덕] #g모든 #g타격과 #g수비를 #g단도와 #g수호로 #g교체합니다.", + "[잠김] 타격 또는 수비가 필요합니다." + ] + }, + "Gremlin:KnowingSkull": { + "OPTIONS": [ + "[정보?] #g보스가 #g나타납니다. #r모든 #r그렘린이 #r체력을 #r", + "[성공하는 법?] #g무색 #g카드를 #g1개 #g얻습니다. #r모든 #r그렘린이 #r체력을 #r", + "[정신자극제?] #g포션을 #g1개 #g얻습니다. #r모든 #r그렘린이 #r영혼을 #r", + " #g얻습니다. #r모든 #r그렘린이 #r체력을 #r", + "[어디로 나가?] #r모든 #r그렘린이 #r체력을 #r" + + ] + }, + "Gremlin:MatchingGame": { + "DESCRIPTIONS": [ + "\" 카드는 #b12장! 짝을 맞추면 가져가도 된다! 기회는 #b5번- \" NL NL #b\"10번!\" 당신이 끼어듭니다. NL NL 그렘린이 노려봅니다. #b\"5번!\" NL NL #b\"여덟.\" NL NL #b\"6번,\" 그가 침을 뱉습니다. \"그리고 #p저주 도 받아 가야겠구나.\" NL NL 당신은 그가 #p저주받길 바랍니다.", + "당신은 그렘린의 게임을 마치고 올려다보았습니다. NL 더 #y~공짜로~ #y~더~ #y~챙기기도~ 전에 그는 도망쳐버렸습니다!", + "그렘린은 미친듯이 테이블 위의 카드를 섞고 있습니다. 그는 #y~공짜로~ ~물건을~ 주는 것 같습니다. 당신은 #y~공짜~ #y~물건이라면~ 놓칠 수 없죠." + ] + }, + "Gremlin:Nest": { + "OPTIONS": [ + "[줄에 서 있는다] #g의식용 #g단검 #g카드를 #g얻습니다. #r모든 #r그렘린이 #r체력을 #r" + ] + }, + "Gremlin:ScrapOoze": { + "OPTIONS": [ + "[뒤진다] #r모든 #r그렘린이 #r체력을 #r", + "[더 뻗는다] #r모든 #r그렘린이 #r체력을 #r" + ] + }, + "Gremlin:ScrapOozeReplacement": { + "NAME": "날붙이 수액", + "DESCRIPTIONS": [ + "방으로 들어가 보니 ~콸콸~ ~흐르는~ ~소리~ 와 @철이@ @갈리는@ @소리@ 가 들립니다. #y날붙이 #y수액 이네요! 이 재미있는 작은 슬라임들은 항상 #y먹음직스러운 #y것들을 찾아다닙니다. 더 좋은 건 그들이 느리고 너무 약해서 당신이 가져가도 된다는 거죠! 당신은 가시의 산성을 피하는 최적의 방법도 알고 있으니까요. 하지만 불행히도 물건을 가져가려면 약간의 #r평정심 과 #r집중력 이 필요합니다.", + "조심, 조심스럽게, 당신은 가시 부분과 날붙이 부분을 피해서 갑니다. 이거 참 #r@지루하네요.@ NL 하지만 계속하다 보면 눈부신 #y유물을 얻을 수 있을 것입니다...", + "#g성공이다! NL 당신은 날붙이와 불타는 산 속을 뒤적거린 끝에 #y유물을 붙잡아 꺼냈습니다. NL 새로운 장난감을 움켜쥐고 수액에서 손을 뺍니다.", + "이 방법은 너무 #r지루했습니다. 대체 무슨 짓을 한거죠?", + "당신은 이 곳을 벗어나기로 했습니다. NL 슬라임은 계속 날붙이를 삼키기만 할 뿐 당신에게 아무런 관심도 보이지 않습니다." + ], + "OPTIONS": [ + "[조심히 가져간다] #r", + "%: #r저주를 #r받습니다. #r- #r주의산만. #g", + "%: #g유물을 #g찾습니다.", + "[떠난다]", + "[조심한다] #r" + ] + }, + "Gremlin:SensoryStone": { + "OPTIONS": [ + "[회상] #g2장의 #g무색 #g카드 #g보상을 #g획득합니다. #r모든 #r그렘린이 #r체력을 #r", + "[회상] #g3장의 #g무색 #g카드 #g보상을 #g획득합니다. #r모든 #r그렘린이 #r체력을 #r" + ] + }, + "Gremlin:Trenchcoat": { + "NAME": "수상쩍은 상인", + "DESCRIPTIONS": [ + "당신은 트렌치코트 안에 다섯 그렘린이 합쳐서 있는 듯한 수상쩍은 자와 우연히 마주쳤습니다. NL \"안녕, 여행자,\" 거슬리는 목소리로 불러세웁니다. NL \"나야 나, #y친절한 #y상인. 절대 트렌치코트 안에 그렘린 다섯 마리가 함께 있는 건 아니다. 완전 훔치지 않은 것 같은 ~양품들~ 좀 보고 가?\"", + "수상쩍은 상인의 물건일지라도 할인은 참을 수 없습니다. NL 구매를 마치자마자 상인은 바로 판을 접습니다. NL NL 멀리서 희미하게 화난 고함 소리가 들립니다. #r\"빌어먹을, #r그렘린들이 #r털어갔네요!\"", + "비열한 상인의 배를 채워줄 순 없죠. 당신은 짐을 챙깁니다. 당신이 가담하지 않자 상인은 곧바로 달아나버렸습니다." + ], + "OPTIONS": [ + "[산다] #r영혼을 #r", + " #r잃습니다", + ". #g무작위 #g무색 #g카드를 #g1장 #g얻습니다.", + ". #g무작위 #g무색 #g카드를 #g2장 #g얻습니다.", + ". #g무작위 #g무색 #g카드를 #g3장 #g얻습니다.", + "[떠난다]", + "[잠김] 필요: 최소 ", + " 영혼.", + "[거절한다]" + ] + }, + "Gremlin:Vampires": { + "DESCRIPTIONS": [ + "조명이 없는 거리에서, 어둠의 의식을 치르고 있는 대여섯 명의 후드를 눌러싼 자들이 보입니다. 당신이 다가가자, 그들은 섬뜩한 미소를 지으며 돌아섰습니다. 그들 중 가장 키 큰 이는 송곳니가 길게 삐져나와 있었습니다. 그가 당신에게 창백한 손을 내밉니다. NL ~\"우리와~ ~함께~ ~하자~ ~탐욕스러운~ ~자여,~ ~첨탑의~ ~따스함을~ ~느낄~ ~수~ ~있다네.\"~" + ] + }, + "Gremlin:WheelGame": { + "DESCRIPTIONS": [ + "그렘린은 달려들지만 당신은 준비되어있습니다. NL 그렘린이 단도로 찌르기 전에 베어버립니다. NL 슬프게도 당신 맘대로 상을 뜯어가기도 전에 돌림판은 감쪽같이 사라졌습니다." + ], + "OPTIONS": [ + "[보상!] #g선빵필승!", + "[턴다]" + ] + }, + "Gremlin:WingStatue": { + "OPTIONS": [ + "[기도] #g카드를 #g1장 #g덱에서 #g제거합니다. #r모든 #r그렘린들이 #r체력을 #r" + ] + }, + "Gremlin:WorldOfGoop": { + "OPTIONS": [ + " #g얻습니다. #r모든 #r그렘린들이 #r체력을 #r" + ] + } } \ No newline at end of file diff --git a/src/main/resources/gremlinResources/localization/kor/KeywordStrings.json b/src/main/resources/gremlinResources/localization/kor/KeywordStrings.json index 0da2b1984f..1b25628535 100644 --- a/src/main/resources/gremlinResources/localization/kor/KeywordStrings.json +++ b/src/main/resources/gremlinResources/localization/kor/KeywordStrings.json @@ -29,6 +29,7 @@ }, { "NAMES": [ + "뚱뚱한", "뚱뚱한 그렘린", "뚱뚱한_그렘린", "뚱뚱한_그렘린으로", @@ -40,6 +41,7 @@ }, { "NAMES": [ + "마법사", "마법사 그렘린", "마법사_그렘린", "마법사_그렘린으로", @@ -51,6 +53,7 @@ }, { "NAMES": [ + "화난", "화난 그렘린", "화난_그렘린", "화난_그렘린으로", @@ -62,6 +65,7 @@ }, { "NAMES": [ + "방패", "방패 그렘린", "방패_그렘린", "방패_그렘린으로", @@ -73,6 +77,7 @@ }, { "NAMES": [ + "교활한", "교활한 그렘린", "교활한_그렘린", "교활한_그렘린으로", @@ -80,7 +85,7 @@ "sneaky_gremlin" ], "PROPER_NAME": "교활한 그렘린", - "DESCRIPTION": "#y공격 카드를 사용할 때마다 무작위 적에게 피해를 #b2 줍니다." + "DESCRIPTION": "비용이 0인 공격 카드 사용 시 추가로 피해를 #b2 줍니다. #y공격 카드를 사용할 때마다 무작위 적에게 피해를 #b2 줍니다." }, { "NAMES": [ @@ -122,6 +127,7 @@ }, { "NAMES": [ + "귀족", "귀족 그렘린", "귀족_그렘린", "귀족_그렘린으로" @@ -131,6 +137,7 @@ }, { "NAMES": [ + "임시", "임시 체력", "임시_체력", "임시_체력을", diff --git a/src/main/resources/gremlinResources/localization/kor/MonsterStrings.json b/src/main/resources/gremlinResources/localization/kor/MonsterStrings.json index 9e26dfeeb6..22fdca1b26 100644 --- a/src/main/resources/gremlinResources/localization/kor/MonsterStrings.json +++ b/src/main/resources/gremlinResources/localization/kor/MonsterStrings.json @@ -1 +1 @@ -{} \ No newline at end of file +{} \ No newline at end of file diff --git a/src/main/resources/gremlinResources/localization/kor/OrbStrings.json b/src/main/resources/gremlinResources/localization/kor/OrbStrings.json index 753f304b12..751251c406 100644 --- a/src/main/resources/gremlinResources/localization/kor/OrbStrings.json +++ b/src/main/resources/gremlinResources/localization/kor/OrbStrings.json @@ -1,41 +1,42 @@ -{ - "Gremlin:FatGremlin": { - "NAME": "뚱뚱한 그렘린", - "DESCRIPTION": [ - "공격 카드를 사용할 때마다 공격한 대상에게 #y약화를 #b", - " 부여합니다." - ] - }, - - "Gremlin:GremlinWizard": { - "NAME": "마법사 그렘린", - "DESCRIPTION": [ - "스킬 카드를 사용할 때마다 #y마법을 #b", - " 얻습니다." - ] - }, - - "Gremlin:MadGremlin": { - "NAME": "화난 그렘린", - "DESCRIPTION": [ - "공격을 받을 때마다 #y힘을 #b", - " 얻습니다. 내 턴이 끝날 때 얻은 #y힘을 잃습니다." - ] - }, - - "Gremlin:ShieldGremlin": { - "NAME": "방패 그렘린", - "DESCRIPTION": [ - "스킬 카드를 사용할 때마다 #y방어도를 #b", - " 얻습니다." - ] - }, - - "Gremlin:SneakyGremlin": { - "NAME": "교활한 그렘린", - "DESCRIPTION": [ - "공격카드를 사용할 때마다 무작위 적에게 피해를 #b", - " 줍니다." - ] - } -} +{ + "Gremlin:FatGremlin": { + "NAME": "뚱뚱한 그렘린", + "DESCRIPTION": [ + "공격 카드를 사용할 때마다 공격한 대상에게 #y약화를 #b", + " 부여합니다." + ] + }, + + "Gremlin:GremlinWizard": { + "NAME": "마법사 그렘린", + "DESCRIPTION": [ + "스킬 카드를 사용할 때마다 #y마법을 #b", + " 얻습니다." + ] + }, + + "Gremlin:MadGremlin": { + "NAME": "화난 그렘린", + "DESCRIPTION": [ + "공격을 받을 때마다 #y힘을 #b", + " 얻습니다. 내 턴이 끝날 때 얻은 #y힘을 잃습니다." + ] + }, + + "Gremlin:ShieldGremlin": { + "NAME": "방패 그렘린", + "DESCRIPTION": [ + "스킬 카드를 사용할 때마다 #y방어도를 #b", + " 얻습니다." + ] + }, + + "Gremlin:SneakyGremlin": { + "NAME": "교활한 그렘린", + "DESCRIPTION": [ + "비용이 0인 공격 카드 사용 시 추가로 피해를 #b", + " 줍니다. 공격카드를 사용할 때마다 무작위 적에게 피해를 #b", + " 줍니다." + ] + } +} diff --git a/src/main/resources/gremlinResources/localization/kor/PotionStrings.json b/src/main/resources/gremlinResources/localization/kor/PotionStrings.json index 038a02f576..969c0fc5ec 100644 --- a/src/main/resources/gremlinResources/localization/kor/PotionStrings.json +++ b/src/main/resources/gremlinResources/localization/kor/PotionStrings.json @@ -1,29 +1,29 @@ -{ - "gremlin:GremlinPotion": { - "NAME": "그렘린 향수", - "DESCRIPTIONS": [ - "모든 그렘린 #b5 마리의 능력을 #b", - " 번 사용합니다." - ] - }, - "gremlin:NecromancyPotion": { - "NAME": "단지 속의 그렘린", - "DESCRIPTIONS": [ - "무작위 그렘린을 최대 체력의 #b", - "% 회복한 상태로 부활시킵니다." - ] - }, - "gremlin:SwapPotion": { - "NAME": "병에 담긴 사기", - "DESCRIPTIONS": [ - "무작위 그렘린으로 #y교체합니다." - ] - }, - "gremlin:WizPotion": { - "NAME": "마법 핏자 포션", - "DESCRIPTIONS": [ - "#y활력을 #b", - " 얻습니다." - ] - } +{ + "gremlin:GremlinPotion": { + "NAME": "그렘린 향수", + "DESCRIPTIONS": [ + "모든 그렘린 #b5 마리의 능력을 #b", + " 번 사용합니다." + ] + }, + "gremlin:NecromancyPotion": { + "NAME": "단지 속의 그렘린", + "DESCRIPTIONS": [ + "무작위 그렘린을 최대 체력의 #b", + "% 회복한 상태로 부활시킵니다." + ] + }, + "gremlin:SwapPotion": { + "NAME": "병에 담긴 사기", + "DESCRIPTIONS": [ + "무작위 그렘린으로 #y교체합니다." + ] + }, + "gremlin:WizPotion": { + "NAME": "마법 핏자 포션", + "DESCRIPTIONS": [ + "#y활력을 #b", + " 얻습니다." + ] + } } \ No newline at end of file diff --git a/src/main/resources/gremlinResources/localization/kor/PowerStrings.json b/src/main/resources/gremlinResources/localization/kor/PowerStrings.json index aa04d2ce50..6213ea98c5 100644 --- a/src/main/resources/gremlinResources/localization/kor/PowerStrings.json +++ b/src/main/resources/gremlinResources/localization/kor/PowerStrings.json @@ -1,200 +1,202 @@ -{ - "Gremlin:Agony": { - "NAME": "고통스러운 상처", - "DESCRIPTIONS": [ - "#y공격 피해량을 #b", - "% 감소시킵니다. #b", - " 턴 동안 지속됩니다.", - " 턴 동안 지속됩니다." - ] - }, - "Gremlin:Bang": { - "NAME": "쾅", - "DESCRIPTIONS": [ - "다음으로 사용하는 공격 카드에 모든 #y마법을 소모해서 피해량을 #b", " 증가시킵니다." - ] - }, - "Gremlin:Bashed": { - "NAME": "강타 피해", - "DESCRIPTIONS": [ - "이번 턴 동안 #y방어도를 얻을 때마다 체력을 #b", " 잃습니다." - ] - }, - "Gremlin:BubbleBarrier": { - "NAME": "거품 장벽", - "DESCRIPTIONS": [ - "이번 턴 동안 카드를 사용할 때마다 #y방어도를 #b", " 얻습니다." - ] - }, - "Gremlin:CongaLine": { - "NAME": "콩가 자세", - "DESCRIPTIONS": [ - "내 턴 시작 시 ", - " 를 얻고 다음 그렘린으로 #y교체합니다." - ] - }, - "Gremlin:Crippled": { - "NAME": "무력화", - "DESCRIPTIONS": [ - "턴 종료 시 #y약화를 잃지 않습니다. 적 턴 종료 시 #b약화만큼 체력을 잃습니다." - ] - }, - "Gremlin:Encore": { - "NAME": "앙코르", - "DESCRIPTIONS": [ - "#y마법을 소모할 때마다 적 전체에게 피해를 #b", " 줍니다." - ] - }, - "Gremlin:Enthusiasm": { - "NAME": "열광", - "DESCRIPTIONS": [ - "#y교체할 때마다 카드를 #b", - " 장 뽑습니다.", - " 장 뽑습니다." - ] - }, - "Gremlin:FatGremlin": { - "NAME": "뚱뚱한 그렘린", - "DESCRIPTIONS": [ - "공격 카드를 사용할 때마다 공격한 대상에게 #y약화를 #b", - " 부여합니다." - ] - }, - "Gremlin:Flex": { - "NAME": "힘 감소", - "DESCRIPTIONS": [ - "이번 턴 종료 시 #y힘을 #b", - " 잃습니다." - ] - }, - "Gremlin:Furious": { - "NAME": "거센 분노", - "DESCRIPTIONS": [ - "이번 턴에 #y방어도를 얻는 대신 적 전체에게 #y방어도만큼 피해를 줍니다." - ] - }, - "Gremlin:GremlinNob": { - "NAME": "귀족 그렘린", - "DESCRIPTIONS": [ - "매 턴 시작 시 귀족 그렘린의 카드를 #b3 장 얻습니다. #y교체할 수 없습니다. 모든 #y임시 #y체력을 잃는다면 #y임시 #y체력을 초과하는 피해를 막아주고 원래 그렘린으로 돌아옵니다." - ] - }, - "Gremlin:GremlinWizard": { - "NAME": "마법사 그렘린", - "DESCRIPTIONS": [ - "스킬 카드를 사용할 때마다 #y마법을 #b", - " 얻습니다." - ] - }, - "Gremlin:Heckle": { - "NAME": "야유", - "DESCRIPTIONS": [ - "해로운 효과를 부여할 때마다 #y임시 #y체력을 #b", - " 얻습니다." - ] - }, - "Gremlin:InfiniteBlocks": { - "NAME": "무한의 방어", - "DESCRIPTIONS": [ - "내 턴 시작 시 #y수호를 #b", - " 장 얻습니다.", - " 장 얻습니다." - ] - }, - "Gremlin:MadGremlin": { - "NAME": "화난 그렘린", - "DESCRIPTIONS": [ - "공격을 받을 때마다 힘을 #b", - " 얻습니다. 내 턴이 끝날 때 얻은 힘을 잃습니다." - ] - }, - "Gremlin:MakeshiftArmor": { - "NAME": "급조 갑옷", - "DESCRIPTIONS": [ - "공격 카드를 #b", - " 장 더 사용하면 #y인공물을 #b", - " 장 더 사용하면 #y인공물을 #b", - " 얻습니다." - ] - }, - "Gremlin:MakingMagic": { - "NAME": "마법 제작", - "DESCRIPTIONS": [ - "내 다음 턴 시작 시 #y쾅을 #b", - " 장 복사해 얻습니다.", - " 장 복사해 얻습니다." - ] - }, - "Gremlin:MakingMoreMagic": { - "NAME": "마법 제작+", - "DESCRIPTIONS": [ - "내 다음 턴 시작 시 #y쾅+을 #b", - " 장 복사해 얻습니다.", - " 장 복사해 얻습니다." - ] - }, - "Gremlin:Polish": { - "NAME": "광택제", - "DESCRIPTIONS": [ - "#y수호의 #y방어도를 #b", - " 증가시킵니다." - ] - }, - "Gremlin:Scatter": { - "NAME": "튀어어", - "DESCRIPTIONS": [ - "다음 #b", - " 번까지 체력을 잃을 때 무작위 그렘린으로 #y교체하고 체력을 잃는 것을 막아줍니다.", - " 번까지 체력을 잃을 때 무작위 그렘린으로 #y교체하고 체력을 잃는 것을 막아줍니다." - ] - }, - "Gremlin:ShadowShiv": { - "NAME": "그림자 단도", - "DESCRIPTIONS": [ - "#y소멸하지 않는 공격 카드를 사용할 때마다 #y단도를 #b", - " 장 얻습니다.", - " 장 얻습니다." - ] - }, - "Gremlin:ShieldGremlin": { - "NAME": "방패 그렘린", - "DESCRIPTIONS": [ - "스킬 카드를 사용할 때마다 #y방어도를 #b", - " 얻습니다." - ] - }, - "Gremlin:SneakyGremlin": { - "NAME": "교활한 그렘린", - "DESCRIPTIONS": [ - "공격 카드를 사용할 때마다 무작위 적에게 피해를 #b", - " 줍니다." - ] - }, - "Gremlin:TargetWeakness": { - "NAME": "상처입은 대상", - "DESCRIPTIONS": [ - "#y약화를 보유한 적이면 피해량을 #b", - " 증가시킵니다." - ] - }, - "Gremlin:Unforgiving": { - "NAME": "지독함", - "DESCRIPTIONS": [ - "#y힘을 잃지 않습니다." - ] - }, - "Gremlin:Wiz": { - "NAME": "마법", - "DESCRIPTIONS": [ - "충전 중입니다. NL #y마법이 #b", " 더 필요합니다.", " 더 필요합니다.", - "이제 갑니다." - ] - }, - "Gremlin:Wizardry": { - "NAME": "마법 기술", - "DESCRIPTIONS": [ - "내 턴 시작 시 #y마법을 #b", - " 얻습니다." - ] - } +{ + "Gremlin:Agony": { + "NAME": "고통스러운 상처", + "DESCRIPTIONS": [ + "#y공격 피해량을 #b", + "% 감소시킵니다. #b", + " 턴 동안 지속됩니다.", + " 턴 동안 지속됩니다." + ] + }, + "Gremlin:Bang": { + "NAME": "쾅", + "DESCRIPTIONS": [ + "다음으로 사용하는 공격 카드에 모든 #y마법을 소모해서 피해량을 #b", " 증가시킵니다." + ] + }, + "Gremlin:Bashed": { + "NAME": "강타 피해", + "DESCRIPTIONS": [ + "이번 턴 동안 #y방어도를 얻을 때마다 체력을 #b", " 잃습니다." + ] + }, + "Gremlin:BubbleBarrier": { + "NAME": "거품 장벽", + "DESCRIPTIONS": [ + "이번 턴 동안 카드를 사용할 때마다 #y방어도를 #b", " 얻습니다." + ] + }, + "Gremlin:CongaLine": { + "NAME": "콩가 자세", + "DESCRIPTIONS": [ + "내 턴 시작 시 ", + " 를 얻고 다음 그렘린으로 #y교체합니다." + ] + }, + "Gremlin:Crippled": { + "NAME": "무력화", + "DESCRIPTIONS": [ + "이 적에게 #y약화를 부여할 때마다 이 적은 체력을 #b", + " 잃습니다." + ] + }, + "Gremlin:Encore": { + "NAME": "앙코르", + "DESCRIPTIONS": [ + "#y마법의 피해량이 #b", " 증가합니다." + ] + }, + "Gremlin:Enthusiasm": { + "NAME": "열광", + "DESCRIPTIONS": [ + "#y교체할 때마다 카드를 #b", + " 장 뽑습니다.", + " 장 뽑습니다." + ] + }, + "Gremlin:FatGremlin": { + "NAME": "뚱뚱한 그렘린", + "DESCRIPTIONS": [ + "공격 카드를 사용할 때마다 공격한 대상에게 #y약화를 #b", + " 부여합니다." + ] + }, + "Gremlin:Flex": { + "NAME": "힘 감소", + "DESCRIPTIONS": [ + "이번 턴 종료 시 #y힘을 #b", + " 잃습니다." + ] + }, + "Gremlin:Furious": { + "NAME": "거센 분노", + "DESCRIPTIONS": [ + "이번 턴에 #y방어도를 얻는 대신 적 전체에게 #y방어도만큼 피해를 줍니다." + ] + }, + "Gremlin:GremlinNob": { + "NAME": "귀족 그렘린", + "DESCRIPTIONS": [ + "매 턴 시작 시 귀족 그렘린의 카드를 #b3 장 얻습니다. #y교체할 수 없습니다. 모든 #y임시 #y체력을 잃는다면 #y임시 #y체력을 초과하는 피해를 막아주고 원래 그렘린으로 돌아옵니다." + ] + }, + "Gremlin:GremlinWizard": { + "NAME": "마법사 그렘린", + "DESCRIPTIONS": [ + "스킬 카드를 사용할 때마다 #y마법을 #b", + " 얻습니다." + ] + }, + "Gremlin:Heckle": { + "NAME": "야유", + "DESCRIPTIONS": [ + "해로운 효과를 부여할 때마다 #y임시 #y체력을 #b", + " 얻습니다." + ] + }, + "Gremlin:InfiniteBlocks": { + "NAME": "무한의 방어", + "DESCRIPTIONS": [ + "내 턴 시작 시 #y수호를 #b", + " 장 얻습니다.", + " 장 얻습니다." + ] + }, + "Gremlin:MadGremlin": { + "NAME": "화난 그렘린", + "DESCRIPTIONS": [ + "공격을 받을 때마다 힘을 #b", + " 얻습니다. 내 턴이 끝날 때 얻은 힘을 잃습니다." + ] + }, + "Gremlin:MakeshiftArmor": { + "NAME": "급조 갑옷", + "DESCRIPTIONS": [ + "공격 카드를 #b", + " 장 더 사용하면 #y인공물을 #b", + " 장 더 사용하면 #y인공물을 #b", + " 얻습니다." + ] + }, + "Gremlin:MakingMagic": { + "NAME": "마법 제작", + "DESCRIPTIONS": [ + "내 다음 턴 시작 시 #y쾅을 #b", + " 장 복사해 얻습니다.", + " 장 복사해 얻습니다." + ] + }, + "Gremlin:MakingMoreMagic": { + "NAME": "마법 제작+", + "DESCRIPTIONS": [ + "내 다음 턴 시작 시 #y쾅+을 #b", + " 장 복사해 얻습니다.", + " 장 복사해 얻습니다." + ] + }, + "Gremlin:Polish": { + "NAME": "광택제", + "DESCRIPTIONS": [ + "#y수호의 #y방어도를 #b", + " 증가시킵니다." + ] + }, + "Gremlin:Scatter": { + "NAME": "튀어어", + "DESCRIPTIONS": [ + "다음 #b", + " 번 체력을 잃을 때 무작위 그렘린으로 #y교체하고 체력을 잃는 것을 막아줍니다.", + " 번 체력을 잃을 때 무작위 그렘린으로 #y교체하고 체력을 잃는 것을 막아줍니다." + ] + }, + "Gremlin:ShadowShiv": { + "NAME": "그림자 단도", + "DESCRIPTIONS": [ + "#y소멸하지 않는 공격 카드를 사용할 때마다 #y단도를 #b", + " 장 얻습니다.", + " 장 얻습니다." + ] + }, + "Gremlin:ShieldGremlin": { + "NAME": "방패 그렘린", + "DESCRIPTIONS": [ + "스킬 카드를 사용할 때마다 #y방어도를 #b", + " 얻습니다." + ] + }, + "Gremlin:SneakyGremlin": { + "NAME": "교활한 그렘린", + "DESCRIPTIONS": [ + "비용이 0인 공격 카드 사용 시 추가로 피해를 #b", + " 줍니다. 공격 카드를 사용할 때마다 무작위 적에게 피해를 #b", + " 줍니다." + ] + }, + "Gremlin:TargetWeakness": { + "NAME": "상처입은 대상", + "DESCRIPTIONS": [ + "#y약화를 보유한 적이면 피해량이 #b", + " 증가합니다." + ] + }, + "Gremlin:Unforgiving": { + "NAME": "지독함", + "DESCRIPTIONS": [ + "#y힘을 잃지 않습니다." + ] + }, + "Gremlin:Wiz": { + "NAME": "마법", + "DESCRIPTIONS": [ + "충전 중입니다. NL #y마법이 #b", " 더 필요합니다.", " 더 필요합니다.", + "이제 갑니다." + ] + }, + "Gremlin:Wizardry": { + "NAME": "마법 기술", + "DESCRIPTIONS": [ + "내 턴 시작 시 #y마법을 #b", + " 얻습니다." + ] + } } \ No newline at end of file diff --git a/src/main/resources/gremlinResources/localization/kor/RelicStrings.json b/src/main/resources/gremlinResources/localization/kor/RelicStrings.json index 84b296d47e..17fda08f7b 100644 --- a/src/main/resources/gremlinResources/localization/kor/RelicStrings.json +++ b/src/main/resources/gremlinResources/localization/kor/RelicStrings.json @@ -1,143 +1,143 @@ -{ - "Gremlin:ImpeccablePecs": { - "NAME": "천상의 복근", - "FLAVOR": "눈부십니다.", - "DESCRIPTIONS": [ - "#y힘을 얻을 때마다 얻은 #y힘만큼 #y임시 #y체력을 얻습니다. NL #b힘을 #b1 얻은 채 전투를 시작합니다." - ] - }, - "Gremlin:FragmentationGrenade": { - "NAME": "세열수류탄", - "FLAVOR": "그 누구도 그렘린이 이걸 어디서 얻었는지 감히 물어보지 못합니다.", - "DESCRIPTIONS": [ - "무작위 적에게 주는 피해량을 #b", " 증가시킵니다." - ] - }, - "Gremlin:GremlinBomb": { - "NAME": "그렘린의 폭탄", - "FLAVOR": "그렘린들은 위험한 물건을 찾는 묘한 재주가 있습니다. 때로는 약탈당했는데 덕분에 살아남기도 하죠.", - "DESCRIPTIONS": [ - "그렘린이 죽을 때마다 적 전체에게 피해를 #b", " 줍니다." - ] - }, - "Gremlin:GremlinGravestone": { - "NAME": "그렘린의 묘비", - "FLAVOR": "그렘린은 죽으면 어디로 가? 저기 가까운 데 있잖아.", - "DESCRIPTIONS": [ - "휴식 장소에서 자유 행동으로 죽은 그렘린을 살릴 수 있습니다." - ] - }, - "Gremlin:GremlinKnob": { - "NAME": "군단의 지도자 막대기", - "FLAVOR": "그렘린 군단 중에서 가장 뛰어난 뿔을 가진 자가 군중을 지휘합니다. 막대기를 빼앗기기 전까지 말이죠.", - "DESCRIPTIONS": [ - " [E] 를 얻고 카드를 #b1 장 뽑고 다음 그렘린으로 #y교체한 채 전투를 시작합니다." - ] - }, - "Gremlin:GremlinKnobUpgrade": { - "NAME": "군단의 지도자 왕관", - "FLAVOR": "직위의 상징이 화려할수록 도둑맞을 확률이 올라갑니다.", - "DESCRIPTIONS": [ - "", - " 와 교체합니다. NL 매 턴 처음으로 뽑을 카드 더미를 섞을 때 [E] 를 얻고 카드를 #b1 뽑고 다음 그렘린으로 #y교체합니다." - ] - }, - "Gremlin:GremlinMask": { - "NAME": "그렘린의 가면", - "FLAVOR": "그렘린들 사이에서 지위를 나타내는 표지입니다.", - "DESCRIPTIONS": [ - "#y힘을 #b1 얻은 채로 전투를 시작합니다. 턴 종료 시 #y힘을 #b1 잃습니다." - ] - }, - "Gremlin:LeaderVoucher": { - "NAME": "그렘린 리더의 보증서", - "FLAVOR": "차용증: 그렘린 하나 데려감.", - "DESCRIPTIONS": [ - "내 턴 시작 시 [E] 를 얻습니다. NL 획득 시 #r영구적으로 #r그렘린을 #r1마리 #r잃습니다.", - " NL #r( #r뚱뚱한 #r그렘린 #r)", - " NL #r( #r마법사 #r그렘린 #r)", - " NL #r( #r화난 #r그렘린 #r)", - " NL #r( #r방패 #r그렘린 #r)", - " NL #r( #r교활한 #r그렘린 #r)" - ] - }, - "Gremlin:MagicalMallet": { - "NAME": "마법 망치", - "FLAVOR": "머리가 두 배 단단합니다.", - "DESCRIPTIONS": [ - "#y약화를 부여할 때마다 #y마법을 #b1 얻습니다. 매 턴 최대 #b3 번 얻을 수 있습니다." - ] - }, - "Gremlin:PricklyShields": { - "NAME": "압정 방패", - "FLAVOR": "그렘린들은 찾은 잡동사니를 모두 무기나 갑옷으로 사용합니다. 일부는 두 가지 역할을 할 때도 있습니다.", - "DESCRIPTIONS": [ - "#y방어도를 얻을 때마다 무작위 적에게 피해를 #b", " 줍니다." - ] - }, - "Gremlin:ShortStature": { - "NAME": "짧은 조각상", - "FLAVOR": "눈에 띄지 않으면 장난치기 쉬워집니다.", - "DESCRIPTIONS": [ - "매 전투 시 처음으로 그렘린이 죽으면 죽는 대신 최대 체력의 #b75% 만큼 회복합니다.", - "이 전투에서 이미 사용됐습니다." - ] - }, - "Gremlin:StolenMerchandise": { - "NAME": "훔친 상품", - "FLAVOR": "\"빌어먹을, 그렘린들이 털어갔네요!\"", - "DESCRIPTIONS": [ - "#y교체할 때마다 무작위 무색 카드의 #y메아리를 얻습니다. NL 상인이 #y힘을 #b", - " 얻은 채로 전투를 시작합니다.", - "정말 못된 짓을 했네요. NL 이 빌어먹을 도둑분들!", - "이 비겁하고 밥벌레 같은 분들!", - "요, 욕심쟁이 그렘린들 NL 꼭 잡을 거예요!" - ] - }, - "Gremlin:SupplyScroll": { - "NAME": "보급형 두루마리", - "FLAVOR": "놀랍도록 상세하게 적힌 그렘린들의 잡동사니 목록입니다.", - "DESCRIPTIONS": [ - "3번째 턴 시작 시 [E] [E] 를 얻고 카드를 #b2 장 뽑습니다." - ] - }, - "Gremlin:TagTeamwork": { - "NAME": "태그 팀워크", - "FLAVOR": "팀워크는 꿈을 이룹니다.", - "DESCRIPTIONS": [ - "#y태그 #y팀을 뽑을 때마다 다른 카드를 1장 더 뽑습니다. NL 획득 시 #y태그 #y팀을 2장 복사해 덱에 넣습니다." - ] - }, - "Gremlin:WizardHat": { - "NAME": "마법사 모자", - "FLAVOR": "동봉된 로브는 도둑맞은 지 오래입니다.", - "DESCRIPTIONS": [ - "#y마법을 소모할 때마다 무작위 해로운 효과를 제거합니다." - ] - }, - "Gremlin:WizardStaff": { - "NAME": "마법사 지팡이", - "FLAVOR": "모든 마법사 그렘린의 자부심이자 기쁨입니다. 경쟁 상대에게 자주 도둑맞곤 합니다.", - "DESCRIPTIONS": [ - "#y마법의 피해량을 #b7 증가시킵니다." - ] - }, - "Gremlin:WoundPoker": { - "NAME": "상처받은 삼지창", - "FLAVOR": "이렇게 하면 아프나?", - "DESCRIPTIONS": [ - "매 턴 종료 시 #y약화를 보유한 적당 피해를 #b", " 줍니다." - ] - }, - "Gremlin:PatchFixes": { - "NAME": "", - "FLAVOR": "", - "DESCRIPTIONS": [ - "획득 시 모든 그렘린의 최대 체력 + #b", - "카드 보상을 얻는 대신 모든 그렘린의 최대 체력을 #b1 증가시킬 수 있습니다.", - " #y골드 를 획득합니다. NL 모든 그렘린이 최대 체력 + #b", - "전투를 5번 끝낼 때마다 모든 그렘린의 최대 체력을 #b1 증가시킵니다.", - "+1 최대 체력" - ] - } -} +{ + "Gremlin:ImpeccablePecs": { + "NAME": "천상의 복근", + "FLAVOR": "눈부십니다.", + "DESCRIPTIONS": [ + "#y힘을 얻을 때마다 얻은 #y힘만큼 #y임시 #y체력을 얻습니다. NL #b힘을 #b1 얻은 채 전투를 시작합니다." + ] + }, + "Gremlin:FragmentationGrenade": { + "NAME": "세열수류탄", + "FLAVOR": "그 누구도 그렘린이 이걸 어디서 얻었는지 감히 물어보지 못합니다.", + "DESCRIPTIONS": [ + "무작위 적에게 주는 피해량이 #b", " 증가합니다." + ] + }, + "Gremlin:GremlinBomb": { + "NAME": "그렘린의 폭탄", + "FLAVOR": "그렘린들은 위험한 물건을 찾는 묘한 재주가 있습니다. 때로는 약탈당했는데 덕분에 살아남기도 하죠.", + "DESCRIPTIONS": [ + "그렘린이 죽을 때마다 적 전체에게 피해를 #b", " 줍니다." + ] + }, + "Gremlin:GremlinGravestone": { + "NAME": "그렘린의 묘비", + "FLAVOR": "그렘린은 죽으면 어디로 가? 저기 가까운 데 있잖아.", + "DESCRIPTIONS": [ + "휴식 장소에서 자유 행동으로 죽은 그렘린을 살릴 수 있습니다." + ] + }, + "Gremlin:GremlinKnob": { + "NAME": "군단의 지도자 막대기", + "FLAVOR": "그렘린 군단 중에서 가장 뛰어난 뿔을 가진 자가 군중을 지휘합니다. 막대기를 빼앗기기 전까지 말이죠.", + "DESCRIPTIONS": [ + " [E] 를 얻고 카드를 #b1 장 뽑고 다음 그렘린으로 #y교체한 채 전투를 시작합니다." + ] + }, + "Gremlin:GremlinKnobUpgrade": { + "NAME": "군단의 지도자 왕관", + "FLAVOR": "직위의 상징이 화려할수록 도둑맞을 확률이 올라갑니다.", + "DESCRIPTIONS": [ + "", + "와 교체합니다. NL 매 턴 처음으로 뽑을 카드 더미를 섞을 때 [E] 를 얻고 카드를 #b1 뽑고 다음 그렘린으로 #y교체합니다." + ] + }, + "Gremlin:GremlinMask": { + "NAME": "그렘린의 가면", + "FLAVOR": "그렘린들 사이에서 지위를 나타내는 표지입니다.", + "DESCRIPTIONS": [ + "#y힘을 #b1 얻은 채로 전투를 시작합니다. 턴 종료 시 #y힘을 #b1 잃습니다." + ] + }, + "Gremlin:LeaderVoucher": { + "NAME": "그렘린 리더의 보증서", + "FLAVOR": "차용증: 그렘린 하나 데려감.", + "DESCRIPTIONS": [ + "내 턴 시작 시 [E] 를 얻습니다. NL 획득 시 #r영구적으로 #r그렘린을 #r1마리 #r잃습니다.", + " NL #r( #r뚱뚱한 #r그렘린 #r)", + " NL #r( #r마법사 #r그렘린 #r)", + " NL #r( #r화난 #r그렘린 #r)", + " NL #r( #r방패 #r그렘린 #r)", + " NL #r( #r교활한 #r그렘린 #r)" + ] + }, + "Gremlin:MagicalMallet": { + "NAME": "마법 망치", + "FLAVOR": "머리가 두 배 단단합니다.", + "DESCRIPTIONS": [ + "#y약화를 부여할 때마다 #y마법을 #b1 얻습니다 (턴당 최대 #b3 번)." + ] + }, + "Gremlin:PricklyShields": { + "NAME": "압정 방패", + "FLAVOR": "그렘린들은 찾은 잡동사니를 모두 무기나 갑옷으로 사용합니다. 일부는 두 역할을 다 할 때도 있습니다.", + "DESCRIPTIONS": [ + "#y방어도를 얻을 때마다 무작위 적에게 피해를 #b", " 줍니다." + ] + }, + "Gremlin:ShortStature": { + "NAME": "짧은 조각상", + "FLAVOR": "눈에 띄지 않으면 장난치기 쉬워집니다.", + "DESCRIPTIONS": [ + "매 전투 시 처음으로 그렘린이 죽으면 죽는 대신 최대 체력의 #b75% 만큼 회복합니다.", + "이 전투에서 이미 사용됐습니다." + ] + }, + "Gremlin:StolenMerchandise": { + "NAME": "훔친 상품", + "FLAVOR": "\"빌어먹을, 그렘린들이 털어갔네요!\"", + "DESCRIPTIONS": [ + "#y교체할 때마다 무작위 무색 카드의 #y메아리를 얻습니다. NL 상인이 #y힘을 #b", + " 얻은 채로 전투를 시작합니다.", + "정말 못된 짓을 했네요. NL 이 빌어먹을 도둑분들!", + "이 비겁하고 밥벌레 같은 분들!", + "욕심쟁이 그렘린들 NL 꼭 잡을 거예요!" + ] + }, + "Gremlin:SupplyScroll": { + "NAME": "보급형 두루마리", + "FLAVOR": "놀랍도록 상세하게 적힌 그렘린들의 잡동사니 목록입니다.", + "DESCRIPTIONS": [ + "3번째 내 턴 시작 시 [E] [E] 를 얻고 카드를 #b2 장 뽑습니다." + ] + }, + "Gremlin:TagTeamwork": { + "NAME": "태그 팀워크", + "FLAVOR": "팀워크는 꿈을 이룹니다.", + "DESCRIPTIONS": [ + "#y태그 #y팀을 뽑을 때마다 다른 카드를 #b1 장 더 뽑습니다. NL 획득 시 #y태그 #y팀을 #b2 장 복사해 덱에 넣습니다." + ] + }, + "Gremlin:WizardHat": { + "NAME": "마법사 모자", + "FLAVOR": "동봉된 로브는 도둑맞은 지 오래입니다.", + "DESCRIPTIONS": [ + "#y마법을 소모할 때마다 무작위 해로운 효과를 제거합니다." + ] + }, + "Gremlin:WizardStaff": { + "NAME": "마법사 지팡이", + "FLAVOR": "모든 마법사 그렘린의 자부심이자 기쁨입니다. 경쟁 상대에게 자주 도둑맞곤 합니다.", + "DESCRIPTIONS": [ + "#y마법의 피해량이 #b7 증가합니다." + ] + }, + "Gremlin:WoundPoker": { + "NAME": "상처받은 삼지창", + "FLAVOR": "이렇게 하면 아프나?", + "DESCRIPTIONS": [ + "매 턴 종료 시 #y약화를 보유한 적 하나당 피해를 #b", " 줍니다." + ] + }, + "Gremlin:PatchFixes": { + "NAME": "", + "FLAVOR": "", + "DESCRIPTIONS": [ + "획득 시 모든 그렘린의 최대 체력 + #b", + "카드 보상을 얻는 대신 모든 그렘린의 최대 체력을 #b1 증가시킬 수 있습니다.", + " #y골드를 획득합니다. NL 모든 그렘린이 최대 체력 + #b", + "전투를 5번 끝낼 때마다 모든 그렘린의 최대 체력을 #b1 증가시킵니다.", + "+1 최대 체력" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/gremlinResources/localization/kor/RunModStrings.json b/src/main/resources/gremlinResources/localization/kor/RunModStrings.json index 9e26dfeeb6..22fdca1b26 100644 --- a/src/main/resources/gremlinResources/localization/kor/RunModStrings.json +++ b/src/main/resources/gremlinResources/localization/kor/RunModStrings.json @@ -1 +1 @@ -{} \ No newline at end of file +{} \ No newline at end of file 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 0000000000..7ac15cee97 --- /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 *Magia+ 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! de daño adicional." + }, + "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 este combate. NL Las *Protecciones otorgan !M! de Bloqueo adicional este combate." + }, + "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 extracción. 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 0000000000..5ef8376755 --- /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 0000000000..31ce29f662 --- /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 0000000000..b46f02bc96 --- /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 al azar." + }, + { + "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 0000000000..9e26dfeeb6 --- /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 0000000000..04a46c47e5 --- /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. Cada vez que juegues un Ataque, inflige #b", + " de daño a un enemigo al azar." + ] + } +} 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 0000000000..108f2950c7 --- /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 0000000000..f9f9a1979c --- /dev/null +++ b/src/main/resources/gremlinResources/localization/spa/PowerStrings.json @@ -0,0 +1,202 @@ +{ + "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.", + " 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", + " de daño adicional. Cada vez que juegas un Ataque, inflige #b", + " de daño a un enemigo al azar." + ] + }, + "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 0000000000..68f109e61a --- /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 al azar." + ] + }, + "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 0000000000..9e26dfeeb6 --- /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 0000000000..da955119b1 --- /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/zht/CardStrings.json b/src/main/resources/gremlinResources/localization/zht/CardStrings.json index ded543aeab..8f723303cf 100644 --- a/src/main/resources/gremlinResources/localization/zht/CardStrings.json +++ b/src/main/resources/gremlinResources/localization/zht/CardStrings.json @@ -274,7 +274,7 @@ }, "Gremlin:Pickpocket": { "NAME": "扒手", - "DESCRIPTION": "造成 !D! 點傷害。 NL 目標失去 !M! 點 力量 2 次。 NL 獲得 !blamage! 靈魂。 NL 消耗 。" + "DESCRIPTION": "造成 !D! 点伤害。 NL 获得 !blamage! 灵魂。 NL 消耗 。" }, "Gremlin:PinNeedle": { "NAME": "縫衣針", diff --git a/src/main/resources/guardianResources/localization/deu/CardStrings.json b/src/main/resources/guardianResources/localization/deu/CardStrings.json new file mode 100644 index 0000000000..f7c788b3bc --- /dev/null +++ b/src/main/resources/guardianResources/localization/deu/CardStrings.json @@ -0,0 +1,463 @@ +{ + "Guardian:Strike_Guardian": { + "NAME": "Schlag", + "DESCRIPTION": "Füge !D! Schaden zu." + }, + "Guardian:Defend_Guardian": { + "NAME": "Verteidigen", + "DESCRIPTION": "Erhalte !B! Block." + }, + "Guardian:Gem_Red": { + "NAME": "Rubin", + "DESCRIPTION": "guardianmod:Juwel. NL Erhalte 2 *temporäre Stärke.", + "UPGRADE_DESCRIPTION": "Erhalte 2 *temp. Stärke." + }, + "Guardian:Gem_Green": { + "NAME": "Smaragd", + "DESCRIPTION": "guardianmod:Juwel. NL Erhalte 2 *temporäre Geschicklichkeit.", + "UPGRADE_DESCRIPTION": "Erhalte 2 *temp. Geschicklichkeit." + }, + "Guardian:Gem_Lightblue": { + "NAME": "Turmalin", + "DESCRIPTION": "guardianmod:Juwel. NL Erhalte 4 *temporäre Stacheln.", + "UPGRADE_DESCRIPTION": "Erhalte 4 *temp. Stacheln." + }, + "Guardian:Gem_White": { + "NAME": "Opal", + "DESCRIPTION": "guardianmod:Juwel. NL Ziehe eine Karte.", + "UPGRADE_DESCRIPTION": "Ziehe 1 Karte." + }, + "Guardian:Gem_Orange": { + "NAME": "Zitrin", + "DESCRIPTION": "guardianmod:Juwel. NL Erhalte [E].", + "UPGRADE_DESCRIPTION": "Erhalte [E]." + }, + "Guardian:Gem_Cyan": { + "NAME": "Aquamarin", + "DESCRIPTION": "guardianmod:Juwel. NL Erhalte einen *Kristallschutz.", + "UPGRADE_DESCRIPTION": "Erhalte *Kristallschutz." + }, + "Guardian:ChargeUp": { + "NAME": "Aufladen", + "DESCRIPTION": "Erhalte !B! Block. NL Erhalte im nächsten Zug !M! *temporäre Stärke." + }, + "Guardian:DonusPower": { + "NAME": "Überladen", + "DESCRIPTION": "Ziehe !M! Karten. NL Reduziere deine Debuffs um 1.", + "UPGRADE_DESCRIPTION": "Ziehe !M! Karten. NL Reduziere deine Debuffs um 1." + }, + "Guardian:DecasProtection": { + "NAME": "Antike Macht", + "DESCRIPTION": "Erhalte !M! *temporäre Stärke und !M! *temporäre Geschicklichkeit." + }, + "Guardian:FierceBash": { + "NAME": "Erbitterter Hieb", + "DESCRIPTION": "Füge !D! Schaden zu. NL Lege diese Karte in guardianmod:Stasis. NL guardianmod:Ticken - Erhöhe den Schaden um !M!." + }, + "Guardian:PolyBeam": { + "NAME": "Poly-Strahl", + "DESCRIPTION": "Füge !M! Mal einem zufälligen Gegner NL !D! Schaden zu." + }, + "Guardian:TwinSlam": { + "NAME": "Zwillingshieb", + "DESCRIPTION": "Füge !D! Schaden zu. NL Erhalte einen *Zweiten *Hieb.", + "UPGRADE_DESCRIPTION": "Füge !D! Schaden zu. NL Erhalte einen *Zweiten *Hieb+." + }, + "Guardian:GuardianWhirl": { + "NAME": "Wächter-Wind", + "DESCRIPTION": "Füge ALLEN Gegnern 2 Mal !D! Schaden zu. NL Wenn du mindestens 16 Block hast, füge den Schaden !M! weitere Male zu.", + "EXTENDED_DESCRIPTION": [ + "Benötigt mehr Block." + ] + }, + "Guardian:VentSteam": { + "NAME": "Dampf ablassen", + "DESCRIPTION": "Wende !M! Verwundbar auf ALLE Gegner an.", + "UPGRADE_DESCRIPTION": "Wende !M! Verwundbar auf ALLE Gegner an." + }, + "Guardian:CurlUp": { + "NAME": "Einrollen", + "DESCRIPTION": "Lege eine zufällige Handkarte in guardianmod:Stasis. NL guardianmod:Abhärten !M!.", + "UPGRADE_DESCRIPTION": "Lege eine Handkarte deiner Wahl in guardianmod:Stasis. NL guardianmod:Abhärten !M!." + }, + "Guardian:TimeBomb": { + "NAME": "Zeitbombe", + "DESCRIPTION": "Füge ALLEN Gegnern !D! Schaden zu. NL guardianmod:Beschleunige ALLE Karten in *Stasis. NL Erschöpft." + }, + "Guardian:HyperBeam_Guardian": { + "NAME": "Gigastrahl", + "DESCRIPTION": "Füge ALLEN Gegnern !D! Schaden zu. Stärke beeinflusst Gigastrahl NL !M! Mal. Im nächsten Zug bist du hermit:betäubt." + }, + "Guardian:BronzeArmor": { + "NAME": "Stabiler Panzer", + "DESCRIPTION": "Verringere deine Debuffs um !M!. NL guardianmod:Abhärten 8. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Verringere deine Debuffs um !M!. NL guardianmod:Abhärten 8." + }, + "Guardian:FloatingOrbs": { + "NAME": "Schwebende Orbs", + "DESCRIPTION": "Immer wenn du eine Karte ausspielst, die 0 kostet, füge einem zufälligen Gegner !M! Schaden zu." + }, + "Guardian:OrbSlam": { + "NAME": "Kugelknaller", + "DESCRIPTION": "Füge !GuardianMulti! Mal !D! Schaden zu. NL Erschöpft." + }, + "Guardian:Incinerate": { + "NAME": "Veraschen", + "DESCRIPTION": "Füge !D! Schaden zu. NL guardianmod:Beschleunige.", + "UPGRADE_DESCRIPTION": "Füge !D! Schaden zu. NL guardianmod:Beschleunige zweimal." + }, + "Guardian:Orbwalk": { + "NAME": "Kugelwandlung", + "DESCRIPTION": "Erhalte !M! Stärke. NL guardianmod:Ticken - Erhalte 1 Stärke. NL guardianmod:Volatil.", + "UPGRADE_DESCRIPTION": "Erhalte !M! Stärke. NL guardianmod:Ticken - Erhalte 1 Stärke." + }, + "Guardian:WalkerClaw": { + "NAME": "Wandlerklaue", + "DESCRIPTION": "Füge !M! Mal !D! Schaden zu.", + "UPGRADE_DESCRIPTION": "Füge !M! Mal !D! Schaden zu." + }, + "Guardian:SphericShield": { + "NAME": "Schildkuppel", + "DESCRIPTION": "Flüchtig. NL Erhalte eine guardianmod:Panzerpolitur. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Erhalte eine guardianmod:Panzerpolitur. NL Erschöpft." + }, + "Guardian:Harden": { + "NAME": "Erhärten", + "DESCRIPTION": "Erfordert mindestens 20 Block. NL guardianmod:Abhärten !GuardianSecondM! und Erhalte !M! Stacheln.", + "EXTENDED_DESCRIPTION": [ + "Mehr Block benötigt." + ] + }, + "Guardian:SentryBeam": { + "NAME": "Wache-Strahl", + "DESCRIPTION": "Füge !D! Schaden zu. NL Lege eine *Wache-Welle in guardianmod:Stasis. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Füge !D! Schaden zu. NL Lege eine *Wache-Welle+ in guardianmod:Stasis. NL Erschöpft." + }, + "Guardian:SentryWave": { + "NAME": "Wache-Welle", + "DESCRIPTION": "Wende !M! Schwach an. NL Lege einen *Wache-Strahl in guardianmod:Stasis. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Wende !M! Schwach an. guardianmod:Abhärten 2. Lege einen *Wache-Strahl+ in guardianmod:Stasis. NL Erschöpft." + }, + "Guardian:CompilePackage": { + "NAME": "Paket kompilieren", + "DESCRIPTION": "Lege 1 von 3 *Paketen in guardianmod:Stasis. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Lege 1 von 3 verbesserten *Paketen in guardianmod:Stasis. NL Erschöpft.", + "EXTENDED_DESCRIPTION": [ + "Wähle ein Paket." + ] + }, + "Guardian:PackageShapes": { + "NAME": "Paket: Formen", + "DESCRIPTION": "Erhalte *Zeitbombe, *Stachelprotokoll, und *Zurückstoßen. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Erhalte *Zeitbombe+, *Stachelprotokoll+, und *Zurückstoßen+. NL Erschöpft." + }, + "Guardian:PackageDonuDeca": { + "NAME": "Paket: Antike", + "DESCRIPTION": "Erhalte *Überladen, *Antike *Macht, und *Antikes *Konstrukt. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Erhalte *Überladen+, *Antike *Macht+, und *Antikes *Konstrukt+. NL Erschöpft." + }, + "Guardian:PackageSphere": { + "NAME": "Paket: Sphärisch", + "DESCRIPTION": "Erhalte NL *Sphärischer *Schild, *Schwebende *Orbs, und *Erhärten. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Erhalte NL *Sphärischer *Schild+, *Schwebende *Orbs+, und *Erhärten+. NL Erschöpft." + }, + "Guardian:PackageSentry": { + "NAME": "Paket: Wache", + "DESCRIPTION": "Erhalte einen *Wache-Strahl und zwei *Wache-Wellen. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Erhalte einen *Wache-Strahl+ und zwei *Wache-Welle+. NL Erschöpft." + }, + "Guardian:PackageWalker": { + "NAME": "Paket: Kugelwandler", + "DESCRIPTION": "Erhalte NL *Kugelwandeln, *Wandlerklaue, und *Veraschen. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Erhalte NL *Kugelwandeln+, *Wandlerklaue+, und *Veraschen+. NL Erschöpft." + }, + "Guardian:PackageAutomaton": { + "NAME": "Paket: Bronze", + "DESCRIPTION": "Erhalte *Gigastrahl, *Orb-Assistenz, und *Stabiler *Panzer. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Erhalte *Gigastrahl+, *Orb-Assistenz+, und *Stabiler *Panzer+. NL Erschöpft." + }, + "Guardian:PackageDefect": { + "NAME": "Paket: Defekt", + "DESCRIPTION": "Erhalte *Umsteuern, *Vorprogrammiert, und *Zeitkapazität. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Erhalte *Umsteuern+, *Vorprogrammiert+, und *Zeitkapazität+. NL Erschöpft." + }, + "Guardian:Planning": { + "NAME": "Reinigungsschild", + "DESCRIPTION": "Erhalte !B! Block. NL Reduziere deine Debuffs um !M!." + }, + "Guardian:Recover": { + "NAME": "Rückgewinnung", + "DESCRIPTION": "Erhalte !B! Block. NL guardianmod:Abhärten !M!. NL Lege eine Karte vom Abwurfstapel in guardianmod:Stasis." + }, + "Guardian:Emergency": { + "NAME": "Notfall", + "DESCRIPTION": "guardianmod:Beschleunige ALLE Karten in guardianmod:Stasis. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "guardianmod:Beschleunige ALLE Karten in guardianmod:Stasis zweimal. NL Erschöpft." + }, + "Guardian:Clone": { + "NAME": "Klonen", + "DESCRIPTION": "Wähle eine Handkrte. Lege eine Kopie in guardianmod:Stasis. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Wähle eine Handkrte. Lege eine Kopie in guardianmod:Stasis. NL guardianmod:Beschleunige. NL Erschöpft." + }, + "Guardian:Preprogram": { + "NAME": "Vorprogrammiert", + "DESCRIPTION": "Sieh dir die obersten !M! Karten des Nachziehstapels an. Lege eine davon in guardianmod:Stasis." + }, + "Guardian:GemFinder": { + "NAME": "Juwelendetektor", + "DESCRIPTION": "Flüchtig. NL Erhalte am Ende des Kampfes ein zusätzliches zufälliges guardianmod:Juwel zur Belohnung." + }, + "Guardian:StasisField": { + "NAME": "Stasisfeld", + "DESCRIPTION": "Erhalte !B! Block. NL Lege diese Karte in *Stasis." + }, + "Guardian:Metallicize": { + "NAME": "Erhärten", + "DESCRIPTION": "Erhalte !M! expansioncontent:Panzerrüstung." + }, + "Guardian:StasisStrike": { + "NAME": "Stasisschlag", + "DESCRIPTION": "Füge !D! Schaden zu. NL Erhalte 1 Stasis-Slot." + }, + "Guardian:FuturePlans": { + "NAME": "Zukunftspläne", + "DESCRIPTION": "Du kannst am Ende jedes Zuges bis zu !M! Karte in guardianmod:Stasis legen.", + "UPGRADE_DESCRIPTION": "Angeboren. NL Du kannst am Ende jedes Zuges bis zu !M! Karte in guardianmod:Stasis legen." + }, + "Guardian:Suspension": { + "NAME": "Aufschub", + "DESCRIPTION": "Erhalte !B! Block. NL Lege eine Handkarte in guardianmod:Stasis.", + "UPGRADE_DESCRIPTION": "Erhalte !B! Block. NL Lege eine Handkarte in guardianmod:Stasis." + }, + "Guardian:FastForward": { + "NAME": "Volldampf", + "DESCRIPTION": "guardianmod:Beschleunige !M! Mal.", + "UPGRADE_DESCRIPTION": "Behalten. NL guardianmod:Beschleunige !M! Mal." + }, + "Guardian:TimeCapacitor": { + "NAME": "Zeitkapazität", + "DESCRIPTION": "Erhalte !M! Stasis-Slot." + }, + "Guardian:ConstructionForm": { + "NAME": "Konstruktform", + "DESCRIPTION": "Flüchtig. NL Erhalte !M! guardianmod:Puffer. NL Wenn du zu Beginn deines Zuges mindestens 1 guardianmod:Puffer hast, erhalte 1 Stärke.", + "UPGRADE_DESCRIPTION": "Erhalte !M! guardianmod:Puffer. NL Wenn du zu Beginn deines Zuges mindestens 1 guardianmod:Puffer hast, erhalte 1 Stärke." + }, + "Guardian:RollAttack": { + "NAME": "Rollender Angriff", + "DESCRIPTION": "Füge !D! Schaden zu. NL Trifft ALLE Gegner im *Defensivmodus. Anderenfalls: guardianmod:Abhärten 8." + }, + "Guardian:GemFire": { + "NAME": "Juwelenkanone", + "DESCRIPTION": "Füge !D! Schaden zu. NL Aktiviere ALLE guardianmod:Juwelen. NL Erschöpft.", + "UPGRADE_DESCRIPTION": " NL (Du hast !M! Juwel(en).)" + }, + "Guardian:ChargeCore": { + "NAME": "Kernladung", + "DESCRIPTION": "Füge !D! Schaden zu. NL Lege diese Karte in guardianmod:Stasis. NL guardianmod:Ticken - Ziehe eine Karte. guardianmod:Volatil." + }, + "Guardian:Reroute": { + "NAME": "Umsteuern", + "DESCRIPTION": "Füge !D! Schaden zu. NL Lege die nächste Karte, die du in diesem Zug spielst, in guardianmod:Stasis." + }, + "Guardian:PiercingHide": { + "NAME": "Stechende Haut", + "DESCRIPTION": "Erhalte !B! Block und !M! *temporäre Stacheln. NL guardianmod:Abhärten 3.", + "UPGRADE_DESCRIPTION": "Erhalte !B! Block und !M! *temporäre Stacheln. NL guardianmod:Abhärten 4." + }, + "Guardian:ShieldSpikes": { + "NAME": "Stachelschild", + "DESCRIPTION": "Erhalte !B! Block. NL Erhalte !M! Stacheln wenn du im *Defensivmodus bist. guardianmod:Abhärten 8." + }, + "Guardian:PrismaticBeam": { + "NAME": "Regenbogensalve", + "DESCRIPTION": "Füge für jedes guardianmod:Juwel in dieser Karte !D! Schaden zu." + }, + "Guardian:PrismaticBarrier": { + "NAME": "Regenbogenschild", + "DESCRIPTION": "Erhalte für jedes guardianmod:Juwel in dieser Karte !B! Block." + }, + "Guardian:TemporalStrike": { + "NAME": "Zeitschlag", + "DESCRIPTION": "Füge !D! Schaden zu. NL Erhalte [E] wenn eine Karte in guardianmod:Stasis liegt.", + "UPGRADE_DESCRIPTION": "Füge !D! Schaden zu. NL Erhalte [E] wenn eine Karte in guardianmod:Stasis liegt." + }, + "Guardian:TemporalShield": { + "NAME": "Zeitschild", + "DESCRIPTION": "Erhalte !B! Block. NL guardianmod:Beschleunige." + }, + "Guardian:ExploitGems": { + "NAME": "Edelsteinkette", + "DESCRIPTION": "Ziehe eine Karte." + }, + "Guardian:RefractedBeam": { + "NAME": "Prismenstrahl", + "DESCRIPTION": "Füge !M! Mal !D! Schaden zu. NL Kann beliebig oft verbessert werden. Pro Verbesserung +1 Mal:" + }, + "Guardian:MultiBeam": { + "NAME": "Multistrahl", + "DESCRIPTION": "Füge ALLEN Gegnern X mal !D! Schaden zu. NL guardianmod:Ticken - Erhöhe den Schaden um !M!." + }, + "Guardian:BaubleBeam": { + "NAME": "Orb-Fassung", + "DESCRIPTION": "Füge !D! Schaden zu. NL Führe !M! Mal aus:" + }, + "Guardian:PrimingBeam": { + "NAME": "Zielstrahl", + "DESCRIPTION": "Füge !D! Schaden zu. NL guardianmod:Abhärten !M!." + }, + "Guardian:EvasiveProtocol": { + "NAME": "Fluchtprotokoll", + "DESCRIPTION": "Reduziere jedes Mal, wenn du in den *Defensivmodus wechselst, deine Debuffs um !M!. NL guardianmod:Abhärten !GuardianSecondM!.", + "UPGRADE_DESCRIPTION": "Reduziere jedes Mal, wenn du in den *Defensivmodus wechselst, deine Debuffs um !M!. NL guardianmod:Abhärten !GuardianSecondM!." + }, + "Guardian:SpikerProtocol": { + "NAME": "Stachelprotokoll", + "DESCRIPTION": "Erhalte jedes Mal, wenn du in den *Defensivmodus wechselst, !M! Stacheln. NL guardianmod:Abhärten !GuardianSecondM!.", + "UPGRADE_DESCRIPTION": "Erhalte jedes Mal, wenn du in den *Defensivmodus wechselst, !M! Stacheln. NL guardianmod:Abhärten !GuardianSecondM!." + }, + "Guardian:ArmoredProtocol": { + "NAME": "Rüstungsprotokoll (Deprecated card do not TL!)", + "DESCRIPTION": "Erhalte jedes Mal, wenn du deinen Zug im *Defensivmodus beendest, !M! Block. NL Zu Beginn deines Zuges: guardianmod:Abhärten 3." + }, + "Guardian:TimeSifter": { + "NAME": "Zeitsieb", + "DESCRIPTION": "guardianmod:Beschleunige zu Beginn deines Zuges.", + "UPGRADE_DESCRIPTION": "Angeboren. NL guardianmod:Beschleunige zu Beginn deines Zuges." + }, + "Guardian:AncientConstruct": { + "NAME": "Antikes Konstrukt", + "DESCRIPTION": "Erhalte 1 Artefakt. NL Wenn du zu Beginn deines Zuges kein Artefakt hast, dann erhalte !M! Artefakt.", + "UPGRADE_DESCRIPTION": "Erhalte 1 Artefakt. NL Wenn du zu Beginn deines Zuges kein Artefakt hast, dann erhalte !M! Artefakt." + }, + "Guardian:CrystalBeam": { + "NAME": "Kristallstrahl", + "DESCRIPTION": "Füge !D! Schaden zu. NL Der Schaden wird für jedes guardianmod:Juwel im Deck um !M! erhöht." + }, + "Guardian:Gem_Synthetic": { + "NAME": "Onyx", + "DESCRIPTION": "guardianmod:Juwel. NL Reduziere deine Debuffs um 1.", + "UPGRADE_DESCRIPTION": "Reduziere Debuffs um 1." + }, + "Guardian:Gem_Yellow": { + "NAME": "Bernstein", + "DESCRIPTION": "guardianmod:Juwel. NL guardianmod:Beschleunige.", + "UPGRADE_DESCRIPTION": "guardianmod:Beschleunige." + }, + "Guardian:Gem_Purple": { + "NAME": "Amethyst", + "DESCRIPTION": "guardianmod:Juwel. NL ALLE Gegner verlieren für diesen Zug 2 Stärke.", + "UPGRADE_DESCRIPTION": "ALLE Gegner verlieren diesen Zug 2 Stärke." + }, + "Guardian:Gem_Crimson": { + "NAME": "Granat", + "DESCRIPTION": "guardianmod:Juwel. NL Wende 1 Verwundbar auf ALLE Gegner an.", + "UPGRADE_DESCRIPTION": "Wende 1 Verwundbar auf ALLE Gegner an." + }, + "Guardian:Gem_Blue": { + "NAME": "Saphir", + "DESCRIPTION": "guardianmod:Juwel. NL guardianmod:Abhärten 4.", + "UPGRADE_DESCRIPTION": "guardianmod:Abhärten 4." + }, + "Guardian:Gem_Fragmented": { + "NAME": "Edelsteinsplitter", + "DESCRIPTION": "guardianmod:Juwel. NL Erhalte ein *Kristallmesser.", + "UPGRADE_DESCRIPTION": "Erhalte *Kristallmesser." + }, + "Guardian:CrystalShiv": { + "NAME": "Kristallmesser", + "DESCRIPTION": "Füge !D! Schaden zu. NL Erschöpft." + }, + "Guardian:CrystalWard": { + "NAME": "Kristallschutz", + "DESCRIPTION": "Erhalte !B! Block. NL Erschöpft." + }, + "Guardian:Repulse": { + "NAME": "Zurückstoßen", + "DESCRIPTION": "Wenn du im Zug das erste Mal einen Status oder Fluch ziehst, erschöpfe ihn und ziehe eine Karte.", + "UPGRADE_DESCRIPTION": "Wenn du im Zug das erste Mal einen Status oder Fluch ziehst, erschöpfe ihn und ziehe eine Karte." + }, + "Guardian:BronzeOrb": { + "NAME": "Orb-Assistenz", + "DESCRIPTION": "Füge !D! Schaden zu. NL guardianmod:Härte dich in Höhe des ungeblockten Schadens *ab. NL Erschöpft." + }, + "Guardian:RevengeProtocol": { + "NAME": "Kampfprotokoll", + "DESCRIPTION": "Erhalte jedes Mal, wenn du in den *Defensivmodus wechselst, !M! Stärke. NL Zu Beginn jedes Zuges: guardianmod:Abhärten !GuardianSecondM!." + }, + "Guardian:GatlingBeam": { + "NAME": "Laserkanone", + "DESCRIPTION": "Füge !D! Schaden zu. Lege diese Karte in guardianmod:Stasis. Die NL guardianmod:Stasis hält !M! Züge. NL guardianmod:Ticken - Füge einem zufälligen Gegner !D! Schaden zu." + }, + "Guardian:ShieldCharger": { + "NAME": "Schild aufladen", + "DESCRIPTION": "Lege diese Karte in guardianmod:Stasis. NL guardianmod:Ticken - Erhalte !B! Block und guardianmod:Abhärten !M!. NL guardianmod:Volatil." + }, + "Guardian:StasisEngine": { + "NAME": "Stasismotor", + "DESCRIPTION": "Wenn du in einem Zug die dritte Karte mit Kosten 0 spielst, erhalte [E] und ziehe eine Karte.", + "UPGRADE_DESCRIPTION": "Angeboren. NL Wenn du in einem Zug die dritte Karte mit Kosten 0 spielst, erhalte [E] und ziehe eine Karte." + }, + "Guardian:HammerDown": { + "NAME": "Runterhämmern", + "DESCRIPTION": "Füge !D! Schaden zu. NL Verdopple deine Stärke und Geschicklichkeit. NL Erschöpft." + }, + "Guardian:OmegaCannon": { + "NAME": "Omega Kanone", + "DESCRIPTION": "Füge !D! Schaden zu. NL Diese Karte kostet für jeden Stärkepunkt 1 [E] weniger." + }, + "Guardian:ModeShift": { + "NAME": "Moduswchsel", + "DESCRIPTION": "Tausche deine Stärke und Geschicklichkeit. NL Ziehe eine Karte.", + "UPGRADE_DESCRIPTION": "Behalten. NL Tausche deine Stärke und Geschicklichkeit. NL Ziehe eine Karte." + }, + "Guardian:PackageConstruct": { + "NAME": "Paket: Konstrukt", + "DESCRIPTION": "Erhalte *Runterhämmern, *Omega *Kanone, und *Moduswechsel. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Erhalte *Runterhämmern+, *Omega *Kanone+, und *Moduswechsel+. NL Erschöpft." + }, + "Guardian:PackageMass": { + "NAME": "Paket: Masse", + "DESCRIPTION": "Erhalte *Stachelmasse, *Bombenmasse, und *Gruppenknaller. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Erhalte *Stachelmasse+, *Bombenmasse+, und *Gruppenknaller+. NL Erschöpft." + }, + "Guardian:MassOfStacheln": { + "NAME": "Stachelmasse", + "DESCRIPTION": "Erhalte !M! *temporäre Stacheln. NL Erschöpft wenn du mindestens 1 Artefakt hast." + }, + "Guardian:MassTimeBomb": { + "NAME": "Bombenmasse", + "DESCRIPTION": "Lege eine *Zeitbombe in alle leeren Stasis-Slots. NL Erschöpft wenn beim Ausspielen mindestens 2 *Zeitbomben generiert wurden.", + "UPGRADE_DESCRIPTION": "Lege eine *Zeitbombe+ in alle leeren Stasis-Slots. NL Erschöpft wenn beim Ausspielen mindestens 2 *Zeitbombe+ generiert wurden." + }, + "Guardian:MassSlam": { + "NAME": "Gruppenknaller", + "DESCRIPTION": "Füge !M! Mal !D! Schaden zu. NL Erschöpft wenn du mindestens 3 Stärke hast." + }, + "Guardian:GemstoneGunCard": { + "NAME": "Juwelenpistole", + "DESCRIPTION": "Behalten.", + "UPGRADE_DESCRIPTION": " NL Erschöpft." + }, + "Guardian:BodySlam": { + "NAME": "Körpereinsatz", + "DESCRIPTION": "Erhalte !B! Block. NL Füge Schaden in Höhe deines aktuellen *Blocks zu.", + "UPGRADE_DESCRIPTION": " NL (Fügt !D! Schaden zu.)" + }, + "Guardian:SecondStrike": { + "NAME": "Zweiter Hieb", + "DESCRIPTION": "Flüchtig. NL Füge !D! Schaden zu. NL Erschöpft." + }, + "Guardian:SecondStrikePreviewCard": { + "NAME": "Zweiter Hieb", + "DESCRIPTION": "Flüchtig. NL Füge !D! Schaden zu. NL Kopiert die *Juwelen im *Zwillingshieb. NL Erschöpft." + }, + "Guardian:StrikeForStrike": { + "NAME": "Schlag auf Schlag", + "DESCRIPTION": "Füge !D! Schaden zu. NL Der Gegner greift dich mit !M! Schaden an." + }, + "Guardian:GearUp": { + "NAME": "Hochschalten", + "DESCRIPTION": "Behalten. NL guardianmod:Abhärten !M!. NL Erschöpft." + } +} diff --git a/src/main/resources/guardianResources/localization/deu/CharacterStrings.json b/src/main/resources/guardianResources/localization/deu/CharacterStrings.json new file mode 100644 index 0000000000..f33a1e7c87 --- /dev/null +++ b/src/main/resources/guardianResources/localization/deu/CharacterStrings.json @@ -0,0 +1,18 @@ +{ + "Guardian": { + "NAMES": [ + "Der Wächter" + ], + "TEXT": [ + "Ein Konstrukt des Spire, dazu programmiert es zu verteidigen. NL Kann sich selbst auf Kommando vor Gefahr schützen.", + "PRIMÄRDIREKTIVE - #r~ZERSTÖRE~ #r~HERZ.~", + "[ guardianmod:Fassung ]", + "Auf einer unbeleuchteten Straße triffst du auf ein paar vermummte Gestalten, die gerade mitten in irgendeinem dunklen Ritual sind. Als du näher kommst, wenden sie sich dir in gespenstischem Gleichklang zu. Der Größte von ihnen entblößt Fangzähne und streckt eine lange, blasse Hand nach dir aus. NL~„Schließ~ ~dich~ ~uns~ ~an,~ ~antiker~ ~Beschützer,~ ~und~ ~spüre~ ~die~ ~Wärme~ ~des~ ~Spire.“~", + "Defensivmodus", + "Du hast #b3 #yStacheln und dein Block verfällt nicht zu Beginn deines Zuges.", + "~FEHLER:~ #rStasis im Vorgang." + ], + "KEYWORDS": [ + ] + } +} \ No newline at end of file diff --git a/src/main/resources/guardianResources/localization/deu/EventStrings.json b/src/main/resources/guardianResources/localization/deu/EventStrings.json new file mode 100644 index 0000000000..7bbfef239b --- /dev/null +++ b/src/main/resources/guardianResources/localization/deu/EventStrings.json @@ -0,0 +1,128 @@ +{ + "Guardian:GemMine": { + "NAME": "Edelsteinmine", + "DESCRIPTIONS": [ + "Du betrittst einen alten Minenschacht. Dir fallen die glänzenden Juwelen in den Felsspalten auf. #gSmaragde, #rRubine, #pAmethyste und dergleichen. Du siehst einige Gremlin-Schürfer, die mit adäquatem Werkzeug ausgestattet sind - doch die Juwelen sind so nah an der Oberfläche, dass du sie womöglich auch mit bloßen Händen ausgraben kannst.", + "Du gräbst deine Krallen in die Felswand und hast ein Juwel aus seiner Einbettung befreit. Es tut etwas weh, doch das war es wert.", + "Auch wenn das Ausgraben der Schätze reizvoll ist, beschließt du, deine Rüstung für wichtigere Aufgaben zu schonen.", + "Du hast die alte Mine ausgeschöpft und verlässt sie mit einem Gefühl von Stolz und Zufriedenheit. Und mit leicht beschädigten bronzenen Gliedmaßen.", + "Du hast eine Spitzhacke von den Gremlins erbeutet. Ihr Zustand ist miserabel. Du kannst sie jetzt für deine Ausgrabungen nutzen, oder für später aufheben.", + "Mit der Spitzhacke konntest du einige Juwelen ausgraben. Sie ist kaputtgegangen - doch deine Krallen sind heil geblieben." + ], + "OPTIONS": [ + "[Klauen benutzen] #gErhalte #gein #gzufälliges #gJuwel. #rVerliere #r", + " #rTP.", + "[Verlassen]", + "[Rauben] #rKämpfe #rgegen #rGremlins. #gErhalte #gdie #gSingende #gSpitzhacke.", + "[Spitzhacke benutzen] #gErhalte #g3 #gzufällige #gJuwelen. #rVerliere #rdie #rSpitzhacke.", + "[Gesperrt] Die Spitzhacke ist Kaputt." + ] + }, + "Guardian:StasisEgg": { + "NAME": "Quantumkammer", + "DESCRIPTIONS": [ + "Du erblickst eine Kiste, die außen mit Runen verziert ist. Du wirfst einen Blick hinein und siehst ein eigenartiges eiförmiges Gerät, das leise vor sich hin summt. Du hast keine Ahnung was es ist, oder wofür es gut sein soll. Aber die Energie die von dem Gerät ausgeht lässt dich spüren, dass es sehr mächtig ist.", + "Etwas so mächtiges muss benutzt werden. Du steckst das Ei ein. Die Runen beginnen zu leuchten, und du spürst wie dir die Zeit entrinnt. Du wirst immer ~langsamer~ ~und~ ~langsamer~ ~.~ ~.~ ~.~", + "Etwas so mächtiges darf nicht in die falschen Hände geraten, also zerstörst du es. NL Das Ei sondert ein warmes Licht ab, das dich stärkt. Daraufhin #rexplodiert es #rwuchtig. Die Scherben haben sich auf #rschmerzhafte Weise in dich eingebettet.", + "Etwas so mächtiges ist aus gutem Grund hier verstaut worden. Obwohl deine Instinkte dir sagen, dass du etwas mit dem Gerät anfangen kannst, lässt du es in Ruhe. Du verschließt die Kiste wieder und gehst weiter deiner Wege." + ], + "OPTIONS": [ + "[Benutzen] #gErhalte #gdie #gQuantumkammer. #rWerde #rverflucht #r- #rAltern.", + "[Zerstören] #gErhalte #g", + " #gmax. #gTP. #rWerde #rverflucht #r- #rSchmerz.", + "[Verlassen]", + "[Gesperrt] Erfordert eine nicht eingelegte Karte." + ] + }, + "Guardian:AccursedBlacksmith": { + "NAME": "", + "DESCRIPTIONS": [ + "Du entschließt dich, die Schmiede zu benutzen und... NL #y@KLONK@ #y@KLOOONK@ #y@KLONK!@ NL ...mehr Platz für deine Juwelen zu schaffen." + ], + "OPTIONS": [ + "[Basteln] #gFüge #geiner #gKarte #gmit #gFassungen #geine #gweitere #gFassung #ghinzu.", + "Füge einer Karte eine Fassung hinzu.", + "[Gesperrt] Erfordert eine Karte mit Fassungen." + ] + }, + "Guardian:GuardianTalk": { + "NAME": "", + "DESCRIPTIONS": [ + "ERSATZBLECHBÜCHSE - ZURÜCK AUFS FLIESSBAND.", + "ANOMALIE FESTGESTELLT.", + "WÄCHTER MODELL FEHLERHAFT.", + "ALPHA PROTOKOLL AUFGEHOBEN.", + "WÄCHTER: ZURÜCK AUF DEN POSTEN.", + "FEHLER IM PROTOKOLL FESTGESTELLT.", + "WÄCHTER UMGEHEND TERMINIEREN.", + "NEUES PROTOKOLL: ZERSTÖREN.", + "ZURÜCK ZUM EXORDIUM." + ], + "OPTIONS": [ + "" + ] + }, + "Guardian:CrystalForge": { + "NAME": "Düstere Schmiede", + "DESCRIPTIONS": [ + "Durch Geheimgänge, die nur ein Konstrukt des Spire kennt, betrittst du eine Kammer, die der Wartung und Reparatur von Automatonen gewidmet ist. Auch wenn die Werkzeuge nicht auf Wächter zugeschnitten sind, kannst du sie benutzen.", + "Mit Hilfe des magischen Ambosses zerstörst du ein obsolet gewordenes Stück deiner Rüstung, um die wertvollen Juwelen zu gewinnen, die unüberlegter Weise zuvor eingesetzt hast.", + "Mit der magischen Zange schaffst du es, Juwelen aus Fassungen zu entfernen. Die Juwelen sind dabei allerdings in die Brüche gegangen", + "Du wirfst einen entbehrlichen Teil deiner Rüstung in das magische Schmiedefeuer, das Materie umwandeln kann. Nach einiger Zeit hat sich das Teil in ein wunderschönes Juwel verwandelt.", + "Du verlässt die Schmiede auf den selben Weg, wie du sie betreten hast. Deine Reise geht weiter zur Dämmerung, die dich auf der Spitze des Spire erwartet.", + "Wähle eine Karte zum Abtragen aus.", + "Wähle eine Karte zum Aufstemmen aus.", + "Wähle eine Karte zum Umwandeln aus.", + "Wähle ein Juwel aus.", + "Wähle die Karte aus, in der du das Juwel einsetzt.", + "Du nutzt die Pause, um ein Juwel in deine Ausrüstung einzubetten. Du spürst sofort, wie deine Kräfte wachsen." + ], + "OPTIONS": [ + "[Abtragen] #rEntferne eine Karte mit Fassungen. Erhalte eingebettete #gJuwelen.", + "[Gesperrt] Erfordert eine Karte mit eingebetteten Juwelen.", + "[Aufstemmen] #rZerstöre alle #gJuwelen die in einer Karte eingebettet sind.", + "[Umwandeln] #rEntferne eine Karte. Erhalte ein zufälliges #gJuwel.", + "[Gesperrt] Bereits benutzt.", + "[Verlassen]", + "[Einsetzen] Setze ein #gJuwel in eine offene #gFassung ein.", + "[Gesperrt] Erfordert ein Juwel und eine offene Fassung." + ] + }, + "Guardian:Purifier": { + "NAME": "", + "DESCRIPTIONS": [ + "Du zerbrichst den Schrein mit einem schnellen, starken Hieb. Im Geröll findest du zwei Juwelen im perfekten Zustand, die du für deine Kämpfe nutzen kannst. NL NL Du verlässt das, was vom Schrein übrig ist, und begibst dich weiter Richtung Feind." + ], + "OPTIONS": [ + "[Zerstören] #gErhalte #g2 #gzufällige #gJuwelen." + ] + }, + "Guardian:Transmorgrifier": { + "NAME": "", + "DESCRIPTIONS": [ + "" + ], + "OPTIONS": [ + "" + ] + }, + "Guardian:UpgradeShrine": { + "NAME": "", + "DESCRIPTIONS": [ + "" + ], + "OPTIONS": [ + "" + ] + }, + "Guardian:BackToBasics": { + "NAME": "", + "DESCRIPTIONS": [ + "Als Nagel musst du die Schläge aushalten; Als Hammer musst du zuschlagen." + ], + "OPTIONS": [ + "[Ausdauer] Alle #gSchlag und #gVerteidigen Karten erhalten #gAbhärten #g2.", + "[Gesperrt] Erfordert einen Schlag oder ein Verteidigen." + ] + } +} \ No newline at end of file diff --git a/src/main/resources/guardianResources/localization/deu/KeywordStrings.json b/src/main/resources/guardianResources/localization/deu/KeywordStrings.json new file mode 100644 index 0000000000..377b45cc04 --- /dev/null +++ b/src/main/resources/guardianResources/localization/deu/KeywordStrings.json @@ -0,0 +1,109 @@ +[ + { + "NAMES": [ + "fassung", + "einbetten", + "eingebettet", + "socket", + "sockets", + "socketed" + ], + "PROPER_NAME": "Fassung", + "DESCRIPTION": "#yJuwelen können am Lagerfeuer permanent in Karten mit offenen Fassungen eingebettet werden. Pro Fassung kann ein Juwel eingebettet werden." + }, + { + "NAMES": [ + "stasis" + ], + "PROPER_NAME": "Stasis", + "DESCRIPTION": "Eine Karte liegt für die Anzahl der Züge in Statis, die den Kosten der Karte plus #b1 entspricht. NL Wenn eine Karte die Stasis verlässt, nimm sie auf die Hand. Sie kostet #b0 bis du sie spielst." + }, + { + "NAMES": [ + "juwel", + "juwelen", + "juwele", + "gem", + "gems" + ], + "PROPER_NAME": "Juwel", + "DESCRIPTION": "Juwelen können am Lagerfeuer permanent in Karten mit offenen Fassungen eingebettet werden. Juwelen können nicht #yverbessert werden." + }, + { + "PROPER_NAME": "Defensivmodus", + "NAMES": [ + "defensivmodus", + "defensiv", + "defensive mode", + "defensive_mode", + "defensive" + ], + "DESCRIPTION": "#yHaltung. NL Im Defensivmodus hast du #b3 #yStacheln und dein #yBlock verfällt nicht zu Beginn deines Zuges." + }, + { + "NAMES": [ + "beschleunigen", + "beschleunige", + "beschleunigung", + "accelerate" + ], + "PROPER_NAME": "Beschleunigung", + "DESCRIPTION": "Reduziere die Anzahl der Züge, die die vorderste Karte noch in #yStasis verweilt um #b1 [REMOVE_SPACE]." + }, + { + "NAMES": [ + "paket", + "pakete", + "package", + "packages" + ], + "PROPER_NAME": "Paket", + "DESCRIPTION": "#yFertigkeit die drei Karten erschafft, welche einem Konstrukt des Spire nachempfunden sind." + }, + { + "NAMES": [ + "volatil", + "volatile" + ], + "PROPER_NAME": "Volatil", + "DESCRIPTION": "Wenn diese Karte die #yStasis verlässt, wird sie #yerschöpft [REMOVE_SPACE]." + }, + { + "NAMES": [ + "panzerpolitur", + "Polishing Oil", + "Polishing_Oil", + "polishing_oil", + "polishingoil" + ], + "PROPER_NAME": "Panzerpolitur", + "DESCRIPTION": "#yTrank [REMOVE_SPACE]: Erhalte #b16 #yBlock [REMOVE_SPACE]. Wechsle in den #yDefensivmodus [REMOVE_SPACE]." + }, + { + "NAMES": [ + "ticken", + "tick" + ], + "PROPER_NAME": "Ticken", + "DESCRIPTION": "Wenn diese Karte in #yStasis ist und sich die Verweildauer reduziert..." + }, + { + "NAMES": [ + "puffer", + "buffer" + ], + "PROPER_NAME": "Puffer", + "DESCRIPTION": "Verhindere den nächsten TP-Verlust." + }, + { + "NAMES": [ + "abhärten", + "abhärtest", + "abgehärtet", + "härte", + "brace" + ], + "PROPER_NAME": "Abhärten X", + "DESCRIPTION": "Reduziere den erforderlichen TP-Verlust für den #yModuswechsel um X." + } +] diff --git a/src/main/resources/guardianResources/localization/deu/MonsterStrings.json b/src/main/resources/guardianResources/localization/deu/MonsterStrings.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/src/main/resources/guardianResources/localization/deu/MonsterStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/guardianResources/localization/deu/OrbStrings.json b/src/main/resources/guardianResources/localization/deu/OrbStrings.json new file mode 100644 index 0000000000..f547a7302c --- /dev/null +++ b/src/main/resources/guardianResources/localization/deu/OrbStrings.json @@ -0,0 +1,25 @@ +{ + "Guardian:EmptyStasisSlot": { + "NAME": "Stasis-Slot", + "DESCRIPTION": [ + "Karten können durch #yStasis in diese Slots gelegt werden." + ] + }, + "Guardian:StasisOrb": { + "NAME": "Stasis: ", + "DESCRIPTION": [ + " wird zu Beginn des nächsten Zuges mit Kosten 0 auf die Hand genommen.", + " wird in #b", + " Zügen mit Kosten 0 auf die Hand genommen.", + " #yerschöpft zu Beginn des nächsten Zuges.", + " #yerschöpft in #b", + " Zügen." + ] + } +} + + + + + + diff --git a/src/main/resources/guardianResources/localization/deu/PotionStrings.json b/src/main/resources/guardianResources/localization/deu/PotionStrings.json new file mode 100644 index 0000000000..5c6cb86556 --- /dev/null +++ b/src/main/resources/guardianResources/localization/deu/PotionStrings.json @@ -0,0 +1,31 @@ +{ + "Guardian:AcceleratePotion": { + "NAME": "Notfalltrank", + "DESCRIPTIONS": [ + "#yBeschleunige alle Karten in #yStasis #b", + " Mal." + ] + }, + "Guardian:DefensiveModePotion": { + "NAME": "Panzerpolitur", + "DESCRIPTIONS": [ + "Erhalte #b", + " #yBlock [REMOVE_SPACE]. Wechsle in den #yDefensivmodus [REMOVE_SPACE]." + ] + }, + "Guardian:BlockOnCardUsePotion": { + "NAME": "Rüstungstinktur", + "DESCRIPTIONS": [ + "Erhalte jedes Mal, wenn du in diesem Zug eine Karte spielst, #b", + " #yBlock." + ] + }, + "Guardian:StasisDiscoveryPotion": { + "NAME": "Quantum Elixier", + "DESCRIPTIONS": [ + "Erhalte Stasis-Slots, bis du #b", + " hast. Führe folgendes #b", + " Mal aus: NL Wähle #b1 von #b3 Karten aus, um sie in #yStasis zu legen." + ] + } +} diff --git a/src/main/resources/guardianResources/localization/deu/PowerStrings.json b/src/main/resources/guardianResources/localization/deu/PowerStrings.json new file mode 100644 index 0000000000..1bacaaeaf7 --- /dev/null +++ b/src/main/resources/guardianResources/localization/deu/PowerStrings.json @@ -0,0 +1,214 @@ +{ + "Guardian:NextTurnGainTemporaryStrengthPower": { + "NAME": "Aufladen", + "DESCRIPTIONS": [ + "Erhalte zu Beginn des nächsten Zuges #b", + " #ytemporäre #yStärke." + ] + }, + "Guardian:StunnedPower": { + "NAME": "Betäubt", + "DESCRIPTIONS": [ + "Überspringe deinen nächsten Zug.", + "Überspringe deine nächsten #b", + " Züge." + ] + }, + "Guardian:FloatingOrbsPower": { + "NAME": "Schwebende Orbs", + "DESCRIPTIONS": [ + "Immer wenn du eine Karte ausspielst, die #y0 kostet, füge einem zufälligen Gegner #b", + " Schaden zu." + ] + }, + "Guardian:OrbwalkPower": { + "NAME": "Kugelwandlung", + "DESCRIPTIONS": [ + "Zu Beginn deines Zuges erhältst du #b", + " #yStärke [REMOVE_SPACE]." + ] + }, + "Guardian:ClonePower": { + "NAME": "Umsteuern", + "DESCRIPTIONS": [ + "Lege die nächste Karte, die du in diesem Zug spielst, in #yStasis.", + "Lege die nächsten #b", + " Karten, die du in diesem Zug spielst, in #yStasis." + ] + }, + "Guardian:GemFinderPower": { + "NAME": "Juwelendetektor", + "DESCRIPTIONS": [ + "Erhalte am Ende des Kampfes ein zusätzliches zufälliges #yguardianmod:Juwel zur Belohnung.", + "Erhalte am Ende des Kampfes #b", + " zusätzliche zufällige #yguardianmod:Juwelen zur Belohnung." + ] + }, + "Guardian:FuturePlansPower": { + "NAME": "Zukunftspläne", + "DESCRIPTIONS": [ + "Du kannst am Ende jedes Zuges bis zu #b", + " Karte in #yStasis legen.", + " Karten in #yStasis legen." + ] + }, + "Guardian:DefenseModePower": { + "NAME": "Defensivmodus", + "DESCRIPTIONS": [ + "#yDefensivmodus bleibt für #b", + " Züge aktiv. Der #yDefensivmodus erteilt #b", + " #yStacheln, und zusätzlich für das Spielen jeder Karte #b2 #yBlock [REMOVE_SPACE]. Schaden den du selbst zufügst wird um #b25% reduziert." + ] + }, + "Guardian:ConstructModePower": { + "NAME": "Konstruktform", + "DESCRIPTIONS": [ + "Wenn du zu Beginn deines Zuges mindestens #b", + " #yPuffer hast, erhalte #b", + " #yStärke [REMOVE_SPACE]." + ] + }, + "Guardian:MultiBoostPower": { + "NAME": "Multi-Boost", + "DESCRIPTIONS": [ + "#yAngriffe die mehr als ein Mal Schaden zufügen, fügen ein weiteres Mal Schaden zu.", + "#yAngriffe die mehr als ein Mal Schaden zufügen, fügen #b", + " weitere Male Schaden zu." + ] + }, + "Guardian:TargetedPower": { + "NAME": "Anvisiert", + "DESCRIPTIONS": [ + "Immer wenn diese Gegner Schaden erleidert erhältst du für diesen Zug #b", + " #ytemporäre #yStärke [REMOVE_SPACE]." + ] + }, + "Guardian:LoseThornsPower": { + "NAME": "Temporäre Stacheln", + "DESCRIPTIONS": [ + "Verliere zu Beginn deines nächsten Zuges #b", + " #yStacheln [REMOVE_SPACE]." + ] + }, + "Guardian:BeamBuffPower": { + "NAME": "Geladen", + "DESCRIPTIONS": [ + "Strahl-Karten fügen #b", + " mehr Schaden zu." + ] + }, + "Guardian:DefensiveModeBuffsPower": { + "NAME": "Defensivmodus+", + "DESCRIPTIONS": [ + "#yDefensivmodus erteilt ZUSÄTZLICH: NL #b", + " #yStacheln.", + " #yGeschicklichkeit.", + " #yBlock am Ende des Zuges.", + "#yErschöpfe den ersten in jedem Zug gezogenen #yStatus oder #yFluch [REMOVE_SPACE].", + "#yErschöpfe die ersten #b", + " in jedem Zug gezogenen #yStatus oder #yFluch Karten.", + "Erhalte am Ende des yDefensivmodus #b", + " #yStärke für jeden Zug, in dem der Modus aktiv war." + ] + }, + "Guardian:AutomayhemPower": { + "NAME": "Zeitsieb", + "DESCRIPTIONS": [ + "#yBeschleunige zu Beginn deines Zuges.", + "yBeschleunige ", + " Mal zu Beginn deines Zuges." + ] + }, + "Guardian:ConstructPower": { + "NAME": "Antikes Konstrukt", + "DESCRIPTIONS": [ + "Wenn du zu Beginn deines Zuges kein #yArtefakt hast, dann erhalte #b", + " #yArtefakt", + " [REMOVE_SPACE]." + ] + }, + "Guardian:ModeShiftPower": { + "NAME": "Moduswechsel", + "DESCRIPTIONS": [ + "Wenn du #b", + " TP verlierst oder #yabhärtest [REMOVE_SPACE], erhalte #b16 #yBlock [REMOVE_SPACE], wechsle bis zum nächsten Zug in den #yDefensivmodus [REMOVE_SPACE], und erhöhe die erforderliche Anzahl um den Effekt erneut zu aktivieren um #b10 (kann #b50 nicht übersteigen)." + ] + }, + "Guardian:ExhaustStatusesPower": { + "NAME": "Zurückstoßen", + "DESCRIPTIONS": [ + "Wenn du im Zug das erste Mal einen #yStatus oder #yFluch ziehst, #yerschöpfe ihn und ziehe eine Karte.", + "Die ersten #b", + " Male im Zug, an denen du einen #yStatus oder #yFluch ziehst, #yerschöpfe ihn und ziehe eine Karte." + ] + }, + "Guardian:RevengePower": { + "NAME": "Kampfprotokoll", + "DESCRIPTIONS": [ + "Erhalte jedes Mal, wenn du in den #yDefensivmodus wechselst, #b", + " #yStrength [REMOVE_SPACE]." + ] + }, + "Guardian:StasisEnginePower": { + "NAME": "Stasismotor", + "DESCRIPTIONS": [ + "Wenn du in einem Zug die #bdritte Karte mit Kosten #b0 spielst, erhalte #b", + " [E] und ziehe #b", + " Karte", + " Karten", + " [REMOVE_SPACE]." + ] + }, + "Guardian:EnergizedGuardianPower": { + "NAME": "Energiegeladen", + "DESCRIPTIONS": [ + "Du erhältst #b", + " [E] zusätzlich im nächsten Zug.", + " zusätzliche [E] im nächsten Zug.", + " - TRANSLATOR NOTE: - The above line is for plural if needed to distinguish from singular." + ] + }, + "Guardian:BlockOnCardUsePower": { + "NAME": "Rüstungstinktur", + "DESCRIPTIONS": [ + "Erhalte jedes Mal, wenn du in diesem Zug eine Karte spielst, #b", + " #yBlock [REMOVE_SPACE]." + ] + }, + "Guardian:EvasiveProtocolPower": { + "NAME": "Fluchtprotokoll", + "DESCRIPTIONS": [ + "Reduziere jedes Mal, wenn du in den #yDefensivmodus wechselst, deine Debuffs um #b", + " [REMOVE_SPACE]." + ] + }, + "Guardian:SpikerProtocolPower": { + "NAME": "Stachelprotokoll", + "DESCRIPTIONS": [ + "Erhalte jedes Mal, wenn du in den #yDefensivmodus wechselst, #b", + " #yStacheln [REMOVE_SPACE]." + ] + }, + "Guardian:ArmoredProtocolPower": { + "NAME": "Rüstungsprotokoll", + "DESCRIPTIONS": [ + "Erhalte jedes Mal, wenn du deinen Zug im #yDefensivmodus beendest, #b", + " #yBlock [REMOVE_SPACE]." + ] + }, + "Guardian:DontLeaveDefensiveModePower": { + "NAME": "Defensivmodus", + "DESCRIPTIONS": [ + "Du verlässt den #yDefensivmodus zu Beginn deines nächsten Zuges.", + "Der #yDefensivmodus ist noch für #b", + " Züge aktiv." + ] + }, + "Guardian:BracePerTurnPower": { + "NAME": "Abhärtung", + "DESCRIPTIONS": [ + "#yHärte dich zu Beginn deines Zuges um #b", + " #yab [REMOVE_SPACE]." + ] + } +} diff --git a/src/main/resources/guardianResources/localization/deu/RelicStrings.json b/src/main/resources/guardianResources/localization/deu/RelicStrings.json new file mode 100644 index 0000000000..f92345f365 --- /dev/null +++ b/src/main/resources/guardianResources/localization/deu/RelicStrings.json @@ -0,0 +1,137 @@ +{ + "Guardian:ModeShifter": { + "NAME": "Bronzenes Zahnrad", + "FLAVOR": "Schutz, wenn du ihn am dringendsten nötig hast.", + "DESCRIPTIONS": [ + "Nimm zu Beginn jedes Kampfes #yHochschalten auf die Hand. NL Der Wächter beginnt den Run mit einem zufälligen gewöhnlichen #yguardianmod:Juwel [REMOVE_SPACE]." + ] + }, + "Guardian:ModeShifterPlus": { + "NAME": "Wächter-Zahnrad", + "FLAVOR": "Hält 3.000 Stockwerke.", + "DESCRIPTIONS": [ + "Ersetzt ", + " [REMOVE_SPACE].[] NL Nimm zu Beginn jedes Kampfes #yHochschalten auf die Hand. NL Immer wenn du in den #yguardianmod:Defensivmodus wechselst, erhalte [E] und ziehe #b2 Karten." + ] + }, + "Guardian:ObsidianScales": { + "NAME": "Obsidianschuppen", + "FLAVOR": "Schwärze den Himmel mit deinem Blut. Räche dich an alle, die dich geschlagen haben.", + "DESCRIPTIONS": [ + "Erhalte zu Beginn jedes Kampfes #b", + " #yStacheln [REMOVE_SPACE]. Erhalte immer, wenn du einen Debuff erhältst oder debuffed wirst #b", + " #yStacheln [REMOVE_SPACE]." + ] + }, + "Guardian:DefensiveModeMoreBlock": { + "NAME": "Baalors königliche Platte", + "FLAVOR": "Man kann nie ganug Rüstung tragen.", + "DESCRIPTIONS": [ + "Immer wenn du dich NL #yguardianmod:abhärtest [REMOVE_SPACE], #yhärte dich um #b1 mehr #yab." + ] + }, + "Guardian:guardianmod:GemCopier": { + "NAME": "Edelsteinglas", + "FLAVOR": "Nur die Reinsten sind gut genug.", + "DESCRIPTIONS": [ + "Immer wenn du ein #yguardianmod:Juwel ausspielst, spiel zusätzlich eine Kopie davon aus." + ] + }, + "Guardian:PocketSentry": { + "NAME": "Arumbas Miniaturwache", + "FLAVOR": "Wachmodus aktiviert. Ziel erfasst. Keine bösen Absichten.", + "DESCRIPTIONS": [ + "Wende alle #b3 Züge #b1 #ySchwach auf ALLE Gegner an." + ] + }, + "Guardian:SackOfGems": { + "NAME": "Edelsteinsack", + "FLAVOR": "Ooh... Glitzer!", + "DESCRIPTIONS": [ + "Nimm beim Aufheben bis zu #b5 zufällige #yguardianmod:Juwelen in dein Deck auf." + ] + }, + "Guardian:StasisCodex": { + "NAME": "Pilotenkodex", + "FLAVOR": "Skizzen und Diagramme der ersten handbetriebenen Prototypen des Spire - angefertigt vom Meisterpiloten David.", + "DESCRIPTIONS": [ + "Wähle am Ende deiner ersten #b3 Züge #b1 von #b3 zufälligen Karten aus um sie in #yguardianmod:Stasis zu legen, falls du einen freien Stasis-Slot hast." + ] + }, + "Guardian:StasisSlotIncreaseRelic": { + "NAME": "Miniatur-Polizei-Zelle", + "FLAVOR": "Sie ist drinnen größer...", + "DESCRIPTIONS": [ + "Beginne jeden Kampf mit #b2 zusätzlichen Stasis-Slots." + ] + }, + "Guardian:StasisSlotReductionRelic": { + "NAME": "Wanderbots", + "FLAVOR": "Diese Drohnen waren ein äußerst nützlicher Fund, doch sie benötigen viel Energie für den Antrieb.", + "DESCRIPTIONS": [ + "Verliere zu Beginn deines Kampfes #b1 Stasis-Slot. NL Erhalte in deinem Zug [E]." + ] + }, + "Guardian:StasisUpgradeRelic": { + "NAME": "Kryokammer", + "FLAVOR": "Die Dinge scheinen beim Hinausgehen immer besser als beim Hineingehen.", + "DESCRIPTIONS": [ + "Beginne jeden Kampf mit #b1 zusätzlichen Stasis-Slot. Immer wenn eine Karte in #yguardianmod:Stasis gelegt wird, #yverbessere sie für den Kampf." + ] + }, + "Guardian:BottledStasis": { + "NAME": "Flaschenwurmloch", + "FLAVOR": "Irgendwo wartet immer etwas Unglaubliches auf seine Entdeckung.", + "DESCRIPTIONS": [ + "Wähle beim Aufheben eine Karte. Beginne jeden Kampf mit der gewählten Karte in #yguardianmod:Stasis [REMOVE_SPACE].", + "Wähle eine Karte für das ", + "Beginne jeden Kampf mit ", + " in #yguardianmod:Stasis [REMOVE_SPACE].", + "Die eingelegte Karte wurde aus dem Deck #rentfernt [REMOVE_SPACE]. Das Relikt hat keine Wirkung mehr." + ] + }, + "Guardian:StasisEgg": { + "NAME": "Quantumkammer", + "FLAVOR": "Um das Küken zu bekommen muss man es schlüpfen lassen, und nicht das Ei zerbrechen.", + "DESCRIPTIONS": [ + "Wähle beim Aufheben eine Karte. Beginne jeden Kampf ohne der gewählten Karte. Nimm die gewählte Karte und #b2 Kopien zu Beginn von Zug #b4 auf die Hand.", + "Wähle eine Karte für die ", + "Beginne jeden Kampf ohne ", + " . Nimm diese Karte und #b2 Kopien zu Beginn von Zug #b4 auf die Hand.", + "Die eingelegte Karte wurde aus dem Deck #rentfernt [REMOVE_SPACE]. Das Relikt hat keine Wirkung mehr." + ] + }, + "Guardian:TickHelperRelic": { + "NAME": "Kühlflüssigkeit", + "FLAVOR": "Gesundheitsschädlich. Nicht konsumieren.", + "DESCRIPTIONS": [ + "Beginne jeden Kampf mit #b2 zusätzlichen Stasis-Slots. NL Wenn eine Karte in #yguardianmod:Stasis gelegt wird, erhöhe ihre Verweildauer um #b2 Züge." + ] + }, + "Guardian:PickAxe": { + "NAME": "Singende Spitzhacke", + "FLAVOR": "Kaum zu glauben, dass jemand mit der Spitzhacke nach Juwelen suchen muss, wo doch im Spire so viele herumliegen.", + "DESCRIPTIONS": [ + "Jedes Mal, wenn du einen Elitekampf gewinnst, erhältst du zusätzlich ein zufälliges #yguardianmod:Juwel zur Belohnung." + ] + }, + "Guardian:GemstoneGun": { + "NAME": "Juwelenpistole", + "FLAVOR": "Peng! Peng! Peng! Hey, ein Hattrick!", + "DESCRIPTIONS": [ + "Wähle beim Aufheben #b3 #yguardianmod:Juwelen aus. Nimm zu Beginn jedes Kampfes eine #yerschöpfende Karte mit #yBehalten und den gewählten #yJuwelen eingebettet auf die Hand.", + "Wähle ein Juwel zum Laden der Juwelenpistole." + ] + }, + "Guardian:BottledAnomaly": { + "NAME": "Flaschenanomalie", + "FLAVOR": "Es wirbelt und wirbelt bis es schließlich kaputtgeht.", + "DESCRIPTIONS": [ + "Wähle beim Aufheben eine Karte. Beginne jeden Kampf ohne der gewählten Karte. Nimm die gewählte Karte zu Beginn von Zug #b3 auf die Hand. Sie kostet diesen Zug #b0.", + "Wähle eine Karte für die ", + "Beginne jeden Kampf ohne ", + " . Nimm diese Karte zu Beginn von Zug #b3 auf die Hand. Sie kostet diesen Zug #b0.", + "Die eingelegte Karte wurde aus dem Deck #rentfernt [REMOVE_SPACE]. Das Relikt hat keine Wirkung mehr." + ] + } +} diff --git a/src/main/resources/guardianResources/localization/deu/RunModStrings.json b/src/main/resources/guardianResources/localization/deu/RunModStrings.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/src/main/resources/guardianResources/localization/deu/RunModStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/guardianResources/localization/deu/UIStrings.json b/src/main/resources/guardianResources/localization/deu/UIStrings.json new file mode 100644 index 0000000000..403ffe8872 --- /dev/null +++ b/src/main/resources/guardianResources/localization/deu/UIStrings.json @@ -0,0 +1,41 @@ +{ + "Guardian:EnhanceBonfireOptions": { + "TEXT": [ + "Einsetzen", + "(Kleine Aktion) Setze ein Juwel in eine offene Fassung ein.", + "Erfordert ein Juwel und eine offene Fassung.", + "Wähle ein Juewel aus.", + "Wähle die Karte aus, in der du das Juwel einsetzt." + ] + }, + "Guardian:UIOptions": { + "TEXT": [ + "Wähle eine Karte, um sie in Stasis zu legen.", + "Wähle ein Juewel aus.", + "Erhalte ein Juwel", + "in Stasis legen.", + "~FEHLER:~ Kann im Konstruktor-Modus nicht #rAngreifen.", + "~FEHLER:~ #rStasis im Vorgang.", + "Erhalte ein Juwel", + "" + ] + }, + "Guardian:FindGemsOption": { + "TEXT": [ + "Schürfen.", + "Erhalte 2 zufällige Juwelen.", + "Spitzhacke ist kaputt." + ] + }, + "Guardian:BraceMod": { + "TEXT": [ + " NL guardianmod:Abhärten 2." + ] + }, + "Guardian:gemDescriptor": { + "TEXT": [ + "Juwel", + "guardianmod:Juwel. NL " + ] + } +} diff --git a/src/main/resources/guardianResources/localization/eng/CardStrings.json b/src/main/resources/guardianResources/localization/eng/CardStrings.json index 480bc09746..13679e20e8 100644 --- a/src/main/resources/guardianResources/localization/eng/CardStrings.json +++ b/src/main/resources/guardianResources/localization/eng/CardStrings.json @@ -43,8 +43,8 @@ }, "Guardian:DonusPower": { "NAME": "Overload", - "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." + "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", @@ -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 a guardianmod:Package to place into guardianmod:Stasis. NL Exhaust.", - "UPGRADE_DESCRIPTION": "Choose an Upgraded guardianmod:Package to place into guardianmod:Stasis. 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." ] @@ -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", @@ -307,13 +308,13 @@ }, "Guardian:EvasiveProtocol": { "NAME": "Evasive Protocol", - "DESCRIPTION": "Whenever you enter *Defensive *Mode, reduce each of your debuffs by !M!. NL guardianmod:Brace 6.", - "UPGRADE_DESCRIPTION": "Whenever you enter *Defensive *Mode, reduce each of your debuffs by !M!. NL guardianmod:Brace 9." + "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. NL guardianmod:Brace 6.", - "UPGRADE_DESCRIPTION": "Whenever you enter *Defensive *Mode, gain !M! Thorns. NL guardianmod:Brace 9." + "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 (Deprecated card do not TL!)", diff --git a/src/main/resources/guardianResources/localization/eng/EventStrings.json b/src/main/resources/guardianResources/localization/eng/EventStrings.json index 52e47e6463..375fff36a4 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": { @@ -30,7 +30,8 @@ "[Use] #gGain #gQuantum #gChamber. #rBecome #rCursed #r- #rAged.", "[Smash] #gGain #g", " #gMax #gHP. #rBecome #rCursed #r- #rPain.", - "[Leave]" + "[Leave]", + "[Locked] Requires an unbottled card." ] }, "Guardian:AccursedBlacksmith": { @@ -93,7 +94,7 @@ "With a swift crushing blow, you shatter the Shrine into pieces in order to uncover the treasures within. Within the rubble, you find two pristine and usable gemstones, patiently awaiting their place in your weaponry. NL NL You leave the remains of the Shrine and continue the climb." ], "OPTIONS": [ - "[Smash] #gGain #g2 #gRandom #gGems [REMOVE_SPACE]." + "[Smash] #gGain #g2 #gRandom #gGems." ] }, "Guardian:Transmorgrifier": { diff --git a/src/main/resources/guardianResources/localization/eng/KeywordStrings.json b/src/main/resources/guardianResources/localization/eng/KeywordStrings.json index 2e807bb291..932a5f1955 100644 --- a/src/main/resources/guardianResources/localization/eng/KeywordStrings.json +++ b/src/main/resources/guardianResources/localization/eng/KeywordStrings.json @@ -30,7 +30,7 @@ "defensive_mode", "defensive" ], - "DESCRIPTION": "#yStance. NL Gain #b16 #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": [ @@ -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" diff --git a/src/main/resources/guardianResources/localization/eng/PotionStrings.json b/src/main/resources/guardianResources/localization/eng/PotionStrings.json index 56cbbeec53..bb40e2b648 100644 --- a/src/main/resources/guardianResources/localization/eng/PotionStrings.json +++ b/src/main/resources/guardianResources/localization/eng/PotionStrings.json @@ -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 e9c408f1cd..e8fb0c8512 100644 --- a/src/main/resources/guardianResources/localization/eng/PowerStrings.json +++ b/src/main/resources/guardianResources/localization/eng/PowerStrings.json @@ -145,7 +145,7 @@ "Guardian:RevengePower": { "NAME": "Revenge", "DESCRIPTIONS": [ - "Whenever you enter #yDefensive #yMode gain #b", + "Whenever you enter #yDefensive #yMode [REMOVE_SPACE], gain #b", " #yStrength [REMOVE_SPACE]." ] }, @@ -156,7 +156,7 @@ " [E] and draw #b", " card", " cards", - " whenever you play the 3rd 0-cost card in a single turn." + " whenever you play the #b3rd 0-cost card in a single turn." ] }, "Guardian:EnergizedGuardianPower": { diff --git a/src/main/resources/guardianResources/localization/eng/RelicStrings.json b/src/main/resources/guardianResources/localization/eng/RelicStrings.json index e993702beb..eeeebb26bb 100644 --- a/src/main/resources/guardianResources/localization/eng/RelicStrings.json +++ b/src/main/resources/guardianResources/localization/eng/RelicStrings.json @@ -3,7 +3,7 @@ "NAME": "Bronze Gear", "FLAVOR": "Protection where you need it most.", "DESCRIPTIONS": [ - "At the start of each combat, gain #yGear #yUp [REMOVE_SPACE]. NL Guardian starts the run with a random common #yGem [REMOVE_SPACE]." + "At the start of each combat, gain #yGear #yUp. NL Guardian starts the run with a random common #yGem [REMOVE_SPACE]." ] }, "Guardian:ModeShifterPlus": { @@ -11,21 +11,23 @@ "FLAVOR": "Replace every 3,000 floors.", "DESCRIPTIONS": [ "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." + " [REMOVE_SPACE].[] NL At the start of combat, gain #yGear #yUp. 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 #b3 #yThorns [REMOVE_SPACE]. Whenever you are debuffed or gain a debuff, gain #b1 #yThorns [REMOVE_SPACE]." + "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 [REMOVE_SPACE], #yBrace 1 more." + "Whenever you #yguardianmod:Brace [REMOVE_SPACE], #yBrace #b1 more." ] }, "Guardian:guardianmod:GemCopier": { @@ -39,7 +41,7 @@ "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": { @@ -53,7 +55,7 @@ "NAME": "Pilot's Codex", "FLAVOR": "Designs and diagrams of the Spire's earliest manually-driven prototypes, by Master Pilot David.", "DESCRIPTIONS": [ - "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]." + "At the end of your first #b3 turns, if your #yguardianmod:Stasis slots aren't full, choose #b1 of #b3 cards to place into #yguardianmod:Stasis [REMOVE_SPACE]." ] }, "Guardian:StasisSlotIncreaseRelic": { @@ -95,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": { @@ -109,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 #b2 #yguardianmod:Gems at Rest Sites, you may choose to add them to your deck. (up to #b3 times)." + "Whenever you defeat an Elite encounter, add a random #yguardianmod:Gem to the rewards." ] }, "Guardian:GemstoneGun": { diff --git a/src/main/resources/guardianResources/localization/fra/CardStrings.json b/src/main/resources/guardianResources/localization/fra/CardStrings.json index c2cca04ded..a9b2452f82 100644 --- a/src/main/resources/guardianResources/localization/fra/CardStrings.json +++ b/src/main/resources/guardianResources/localization/fra/CardStrings.json @@ -43,8 +43,8 @@ }, "Guardian:DonusPower": { "NAME": "Surcharge", - "DESCRIPTION": "Piochez !M! cartes. NL Au prochain tour, piochez 2 cartes de moins.", - "UPGRADE_DESCRIPTION": "Piochez !M! cartes. NL Au prochain tour, piochez 2 cartes de moins. Réduisez chacun de vos Débuffs de 1." + "DESCRIPTION": "Piochez !M! cartes. NL Réduisez chacun de vos débuffs de 1.", + "UPGRADE_DESCRIPTION": "Piochez !M! cartes. NL Réduisez chacun de vos débuffs de 1." }, "Guardian:DecasProtection": { "NAME": "Pouvoir antique", @@ -60,20 +60,20 @@ }, "Guardian:TwinSlam": { "NAME": "Double claque", - "DESCRIPTION": "Infligez !D! dégâts. NL Ajoutez *Claque *secondaire dans votre main.", - "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. NL Ajoutez *Claque *secondaire+ dans votre main." + "DESCRIPTION": "Infligez !D! dégâts. NL Obtenez une *Claque *secondaire.", + "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. NL Obtenez une *Claque *secondaire+." }, "Guardian:GuardianWhirl": { "NAME": "Tourbillon du Gardien", - "DESCRIPTION": "Requiert 20 d'Armure ou plus. NL Infligez !D! dégâts à TOUS les ennemis !M! fois.", + "DESCRIPTION": "Infligez !D! dégâts à TOUS les ennemis 2 fois. NL Si vous avez 16 d'Armure ou plus, infligez ces dégâts !M! fois supplémentaires.", "EXTENDED_DESCRIPTION": [ "Requiert plus d'Armure." ] }, "Guardian:VentSteam": { "NAME": "Vapeur d'eau", - "DESCRIPTION": "Appliquez !M! de Vulnérabilité.", - "UPGRADE_DESCRIPTION": "Appliquez !M! de Vulnérabilité." + "DESCRIPTION": "Appliquez !M! de Vulnérabilité à TOUS les ennemis.", + "UPGRADE_DESCRIPTION": "Appliquez !M! de Vulnérabilité à TOUS les ennemis." }, "Guardian:CurlUp": { "NAME": "Recroquevillement", @@ -104,7 +104,7 @@ "Guardian:Incinerate": { "NAME": "Incinération", "DESCRIPTION": "Infligez !D! dégâts. NL guardianmod:Accélérez.", - "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. NL guardianmod:Accélérez 2 fois." + "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. NL guardianmod:Accélérez deux fois." }, "Guardian:Orbwalk": { "NAME": "Puissance orbitale", @@ -118,7 +118,8 @@ }, "Guardian:SphericShield": { "NAME": "Bouclier sphérique", - "DESCRIPTION": "Gagnez !B! d'Armure. NL Entrez en guardianmod:Mode_Défensif. NL Épuisement." + "DESCRIPTION": "Éthérée. NL Obtenez une guardianmod:Huile_de_Lustrage. Épuisement.", + "UPGRADE_DESCRIPTION": "Obtenez une guardianmod:Huile_de_Lustrage. Épuisement." }, "Guardian:Harden": { "NAME": "Durcissement", @@ -128,61 +129,61 @@ ] }, "Guardian:SentryBeam": { - "NAME": "Sentinelle laser", - "DESCRIPTION": "Infligez !D! dégâts. NL Placez une *Sentinelle *onde en guardianmod:Stase. NL Épuisement.", - "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. NL Placez une *Sentinelle *onde+ en guardianmod:Stase. NL Épuisement." + "NAME": "Sentinelle explosive", + "DESCRIPTION": "Infligez !D! dégâts. NL Placez une *Sentinelle *ondée en guardianmod:Stase. NL Épuisement.", + "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. NL Placez une *Sentinelle *ondée+ en guardianmod:Stase. NL Épuisement." }, "Guardian:SentryWave": { - "NAME": "Sentinelle onde", - "DESCRIPTION": "Appliquez !M! de Faiblesse. NL Placez une *Sentinelle *Laser en guardianmod:Stase. NL Exhaust.", - "UPGRADE_DESCRIPTION": "Appliquez !M! de Faiblesse. NL guardianmod:Renforcez de 2. NL Placez une *Sentinelle *Laser+ en guardianmod:Stase. NL Épuisement." + "NAME": "Sentinelle ondée", + "DESCRIPTION": "Appliquez !M! de Faiblesse. NL Placez une *Sentinelle *explosive en guardianmod:Stase. NL Exhaust.", + "UPGRADE_DESCRIPTION": "Appliquez !M! de Faiblesse. NL guardianmod:Renforcez de 2. NL Placez une *Sentinelle *Explosive+ en guardianmod:Stase. NL Épuisement." }, "Guardian:CompilePackage": { "NAME": "Paquets compilés", - "DESCRIPTION": "Choisissez un guardianmod:Colis parmi trois à ajouter dans votre main. NL Exhaust.", - "UPGRADE_DESCRIPTION": "Choisissez un guardianmod:Colis parmi trois à ajouter dans votre main. Les cartes que le guardianmod:Colis ajoute vont être Améliorées. NL Épuisement.", + "DESCRIPTION": "Choisissez un *Colis parmi trois à ajouter dans votre main. NL Épuisement.", + "UPGRADE_DESCRIPTION": "Choisissez un *Colis parmi trois à ajouter dans votre main. Les cartes que le guardianmod:Colis ajoute vont être Améliorées. NL Épuisement.", "EXTENDED_DESCRIPTION": [ "Choisissez un Colis." ] }, "Guardian:PackageShapes": { "NAME": "Colis : Formes", - "DESCRIPTION": "Ajoutez *Bombe *à *Retardement, *Protocole *épineux, et *Répulseur dans votre main. NL Épuisement.", - "UPGRADE_DESCRIPTION": "Ajoutez *Bombe *à *Retardement+, *Protocole *épineux+, et *Répulseur+ dans votre main. NL Épuisement." + "DESCRIPTION": "Obtenez *Bombe *temporelle, *Protocole *épineux, et *Répulseur. NL Épuisement.", + "UPGRADE_DESCRIPTION": "Obtenez *Bombe *temporelle+, *Protocole *épineux+, et *Répulseur+. NL Épuisement." }, "Guardian:PackageDonuDeca": { "NAME": "Colis : Anciens", - "DESCRIPTION": "Ajoutez *Attaque *Antique, *Pouvoir *Antique, et *Construction *Antique dans votre main. NL Épuisement.", - "UPGRADE_DESCRIPTION": "Ajoutez *Attaque *Antique+, *Pouvoir *Antique+, et *Construction *Antique+ dans votre main. NL Épuisement." + "DESCRIPTION": "Obtenez *Surcharge, *Pouvoir *Antique, et *Construction *Antique . NL Épuisement.", + "UPGRADE_DESCRIPTION": "Obtenez *Surcharge+, *Pouvoir *Antique+, et *Construction *Antique+ . NL Épuisement." }, "Guardian:PackageSphere": { "NAME": "Colis : Sphérique", - "DESCRIPTION": "Ajoutez *Bouclier *sphérique, *Orbes *flottants et *Métallisation dans votre main. NL Épuisement.", - "UPGRADE_DESCRIPTION": "Ajoutez *Sentinelle *Laser+ et deux *Sentinelle *Onde+ dans votre main. NL Épuisement." + "DESCRIPTION": "Obtenez *Bouclier *Sphérique, *Orbes *Flottants et *Durcissement. NL Épuisement.", + "UPGRADE_DESCRIPTION": "Obtenez *Bouclier *Sphérique+, *Orbes *Flottants+ et *Durcissement+. NL Épuisement." }, "Guardian:PackageSentry": { "NAME": "Colis : Sentinelle", - "DESCRIPTION": "Ajoutez *Sentinelle *Laser et deux *Sentinelle *Onde dans votre main. NL Épuisement.", - "UPGRADE_DESCRIPTION": "Ajoutez *Sentinelle *Laser et deux *Sentinelle *Onde dans votre main et Améliore-les. NL Épuisement." + "DESCRIPTION": "Obtenez une *Sentinelle *Explosive et deux *Sentinelles *Ondées. NL Épuisement.", + "UPGRADE_DESCRIPTION": "Obtenez *Sentinelle *Explosive+ et deux *Sentinelles *Ondées+. NL Épuisement." }, "Guardian:PackageWalker": { "NAME": "Colis : Orbiste", - "DESCRIPTION": "Ajoutez une *Puissance *orbitale, *Griffures *profondes, et *Incinération dans votre main. NL Épuisement.", - "UPGRADE_DESCRIPTION": "Ajoutez une *Puissance *orbitale+, *Griffures *profondes+, et *Incinération+ dans votre main. NL Épuisement." + "DESCRIPTION": "Obtenez une *Puissance *Orbitale, *Griffures *profondes, et *Incinération. NL Épuisement.", + "UPGRADE_DESCRIPTION": "Obtenez une *Puissance *orbitale+, *Griffures *profondes+, et *Incinération+. NL Épuisement." }, "Guardian:PackageAutomaton": { "NAME": "Colis : Bronze", - "DESCRIPTION": "Ajoutez *Ultra *Laser, *Faisceau *Orbital, et *Armure *de *Bronze dans votre main. NL Épuisement.", - "UPGRADE_DESCRIPTION": "Ajoutez *Ultra *Laser+, *Faisceau *Orbital+, et *Armure *de *Bronze+ dans votre main. NL Épuisement." + "DESCRIPTION": "Obtenez *Ultra *Laser, *Support *Orbital, et *Plaque *Résistante. NL Épuisement.", + "UPGRADE_DESCRIPTION": "Obtenez *Ultra *Laser+, *Support *Orbital+, et *Plaque *Résistante+. NL Épuisement." }, "Guardian:PackageDefect": { "NAME": "Colis : Défectueux", - "DESCRIPTION": "Ajoutez *Détournement, *Préprogramme, et *Condensateur *de *temps dans votre main. NL Épuisement.", - "UPGRADE_DESCRIPTION": "Ajoutez *Détournement+, *Préprogramme+, et *Condensateur *de *temps+ dans votre main. NL Épuisement." + "DESCRIPTION": "Obtenez *Détournement, *Préprogramme, et *Condensateur *de *temps. NL Épuisement.", + "UPGRADE_DESCRIPTION": "Obtenez *Détournement+, *Préprogramme+, et *Condensateur *de *temps+. NL Épuisement." }, "Guardian:Planning": { - "NAME": "Planning", - "DESCRIPTION": "Placez lez !M! cartes du haut de votre pioche en guardianmod:Stase." + "NAME": "Bouclier de stockage", + "DESCRIPTION": "Gagnez !B! d'Armure. Réduisez vos débuffs de !M!." }, "Guardian:Recover": { "NAME": "Rétablissement", @@ -190,13 +191,13 @@ }, "Guardian:Emergency": { "NAME": "Cycle d'urgence", - "DESCRIPTION": "guardianmod:Accélérez jusqu'à ce qu'une carte en guardianmod:Stase retourne dans votre main. NL Épuisement.", - "UPGRADE_DESCRIPTION": "guardianmod:Accélérez jusqu'à ce qu'une carte en guardianmod:Stase retourne dans votre main." + "DESCRIPTION": "guardianmod:Accélérez TOUTES les cartes en guardianmod:Stase. NL Épuisement.", + "UPGRADE_DESCRIPTION": "guardianmod:Accélérez TOUTES les cartes en guardianmod:Stase deux fois. NL Épuisement." }, "Guardian:Clone": { "NAME": "Clonage", - "DESCRIPTION": "Choisissez une carte dans votre main. Placez une copie de cette carte en guardianmod:Stase. NL Épuisement.", - "UPGRADE_DESCRIPTION": "Choisissez une carte dans votre main. Placez une copie de cette carte en guardianmod:Stase. NL guardianmod:Accélérez. NL Épuisement." + "DESCRIPTION": "Choisissez une carte. Placez une copie de cette carte en guardianmod:Stase. NL Épuisement.", + "UPGRADE_DESCRIPTION": "Choisissez une carte. Placez une copie de cette carte en guardianmod:Stase. NL guardianmod:Accélérez. NL Épuisement." }, "Guardian:Preprogram": { "NAME": "Préprogramme", @@ -204,11 +205,15 @@ }, "Guardian:GemFinder": { "NAME": "Détecteur de gemmes", - "DESCRIPTION": "À la fin du combat, vous pouvez choisir une guardianmod:Gemme commune à ajouter dans votre deck." + "DESCRIPTION": "Éthérée. À la fin du combat, vous pouvez choisir une guardianmod:Gemme commune à ajouter dans votre deck." }, "Guardian:StasisField": { "NAME": "Champ statique", - "DESCRIPTION": "Gagnez !B! d'Armure. NL Placez cette carte en guardianmod:Stase. NL Quand cette carte quitte sa Stase, gagnez !B! d'Armure." + "DESCRIPTION": "Gagnez !B! d'Armure. NL Placez cette carte en guardianmod:Stase." + }, + "Guardian:Metallicize": { + "NAME": "Durcissement", + "DESCRIPTION": "Gagnez !M! expansioncontent:d'Armure *Plaquée." }, "Guardian:StasisStrike": { "NAME": "Frappe statique", @@ -221,8 +226,8 @@ }, "Guardian:Suspension": { "NAME": "Suspension", - "DESCRIPTION": "Placez une carte de votre main en guardianmod:Stase.", - "UPGRADE_DESCRIPTION": "Piochez une carte. NL Placez une carte de votre main en guardianmod:Stase." + "DESCRIPTION": "Gagnez !B! d'Armure. NL Placez une carte de votre main en guardianmod:Stase.", + "UPGRADE_DESCRIPTION": "Gagnez !B! d'Armure. NL Placez une carte de votre main en guardianmod:Stase." }, "Guardian:FastForward": { "NAME": "Boost de vitesse", @@ -235,33 +240,34 @@ }, "Guardian:ConstructionForm": { "NAME": "Forme Constructive", - "DESCRIPTION": "Éthérée. NL Gagnez !M! guardianmod:Tampon. NL Au début de votre tour, si vous avez guardianmod:Tampon, gagnez 1 de Force.", - "UPGRADE_DESCRIPTION": "Gagnez !M! guardianmod:Tampon. NL Au début de votre tour, si vous avez guardianmod:Tampon, gagnez 1 de Force." + "DESCRIPTION": "Éthérée. NL Gagnez !M! de guardianmod:Tampon. NL Au début de chaque tour, si vous avez 1 guardianmod:Tampon ou plus, gagnez 1 de Force.", + "UPGRADE_DESCRIPTION": "Gagnez !M! guardianmod:Tampon. NL Au début de chaque tour, si vous avez 1 guardianmod:Tampon ou plus, gagnez 1 de Force." }, "Guardian:RollAttack": { "NAME": "Roulade", - "DESCRIPTION": "Infligez !D! dégâts. NL Si vous êtes en guardianmod:Mode_Défensif, affecte TOUS les ennemis. Sinon, guardianmod:Renforcez de 8." + "DESCRIPTION": "Infligez !D! dégâts. NL Si vous êtes en *Mode *Défensif, cela affecte TOUS les ennemis. Sinon, guardianmod:Renforcez de 8." }, "Guardian:GemFire": { "NAME": "Canon gemme", - "DESCRIPTION": "Épuisez toutes les guardianmod:Gemmes, également celles qui sont encastrées. Infligez !D! dégâts à un ennemi aléatoire pour chaque guardianmod:Gemme. NL Épuisement.", - "UPGRADE_DESCRIPTION": " NL (Touche !M! fois.)" + "DESCRIPTION": "Infligez !D! dégâts. NL Activez TOUTES vos guardianmod:Gemmes. NL Épuisement.", + "UPGRADE_DESCRIPTION": " NL (Vous avez !M! Gemme(s).)" }, "Guardian:ChargeCore": { "NAME": "Noyau chargé", - "DESCRIPTION": "Infligez !D! dégâts, puis placez cette carte en guardianmod:Stase. NL guardianmod:Tic - Piochez une carte. NL guardianmod:Volatile." + "DESCRIPTION": "Infligez !D! dégâts. NL Placez cette carte en guardianmod:Stase. NL guardianmod:Tic - Piochez une carte. NL guardianmod:Volatile." }, "Guardian:Reroute": { "NAME": "Détournement", - "DESCRIPTION": "Infligez !D! dégâts. NL Placez la prochaine Attaque ou Compétence que vous jouez et qui ne s'Épuise pas en guardianmod:Stase." + "DESCRIPTION": "Infligez !D! dégâts. NL Placez la prochaine Attaque ou Compétence que vous jouez ce tour en guardianmod:Stase." }, "Guardian:PiercingHide": { "NAME": "Armure perçante", - "DESCRIPTION": "Gagnez !B! d'Armure et !M! Épines temporaires. NL guardianmod:Renforcez de 3." + "DESCRIPTION": "Gagnez !B! d'Armure et !M! d'Épines temporaires. NL guardianmod:Renforcez de 3.", + "UPGRADE_DESCRIPTION": "Gagnez !B! d'Armure et !M! d'Épines temporaires. NL guardianmod:Renforcez de 4." }, "Guardian:ShieldSpikes": { "NAME": "Bouclier de picots", - "DESCRIPTION": "Gagnez !B! d'Armure. NL Gagnez !M! d'Épines si vous êtes en guardianmod:Mode_Défensif. Sinon, guardianmod:Renforcez de 8." + "DESCRIPTION": "Gagnez !B! d'Armure. NL Gagnez !M! d'Épines si vous êtes en *Mode *Défensif. guardianmod:Renforcez de 8." }, "Guardian:PrismaticBeam": { "NAME": "Spray prismatique", @@ -282,8 +288,7 @@ }, "Guardian:ExploitGems": { "NAME": "Exploitation de gemmes", - "DESCRIPTION": "Piochez une carte.", - "UPGRADE_DESCRIPTION": "Gagnez [E]. NL Piochez une carte." + "DESCRIPTION": "Piochez une carte." }, "Guardian:RefractedBeam": { "NAME": "Rayon rétracté", @@ -303,11 +308,13 @@ }, "Guardian:EvasiveProtocol": { "NAME": "Protocole évasif", - "DESCRIPTION": "Lorsque vous êtes en guardianmod:Mode_Défensif, augmentez votre Dextérité de !M!. NL Au début de votre tour, guardianmod:Renforcez de 3." + "DESCRIPTION": "Lorsque vous entrez en *Mode *Défensif, réduisez chacun de vos débuffs de !M!. NL guardianmod:Renforcez de !GuardianSecondM!.", + "UPGRADE_DESCRIPTION": "Lorsque vous entrez en *Mode *Défensif, réduisez chacun de vos débuffs de !M!. NL guardianmod:Renforcez de !GuardianSecondM!." }, "Guardian:SpikerProtocol": { "NAME": "Protocole épineux", - "DESCRIPTION": "Gagnez !M! d'Épines lorsque vous êtes en guardianmod:Mode_Défensif. NL Au début de votre tour, guardianmod:Renforcez de 3." + "DESCRIPTION": "Gagnez !M! d'Épines lorsque vous entrez en *Mode *Défensif. NL guardianmod:Renforcez de !GuardianSecondM!.", + "UPGRADE_DESCRIPTION": "Gagnez !M! d'Épines lorsque vous entrez en *Mode *Défensif. NL guardianmod:Renforcez de !GuardianSecondM!." }, "Guardian:ArmoredProtocol": { "NAME": "Protocole blindé", @@ -320,12 +327,12 @@ }, "Guardian:AncientConstruct": { "NAME": "Construction antique", - "DESCRIPTION": "Au début de votre tour, si vous n'avez pas d'Artéfact, gagnez !M! Artéfact.", - "UPGRADE_DESCRIPTION": "Gagnez 2 Artéfact. NL Au début de votre tour, si vous n'avez pas d'Artéfact, gagnez !M! Artéfact." + "DESCRIPTION": "Gagnez 1 d'Artéfact. Au début de votre tour, si vous n'avez pas d'Artéfact, gagnez !M! d'Artéfact.", + "UPGRADE_DESCRIPTION": "Gagnez 2 d'Artéfact. NL Au début de votre tour, si vous n'avez pas d'Artéfact, gagnez !M! d'Artéfact." }, "Guardian:CrystalBeam": { "NAME": "Rayon cristallin", - "DESCRIPTION": "Infligez !D! dégâts. Les dégâts sont augmentés de !M! pour chaque guardianmod:Gemme guardianmod:Encastrées dans TOUTES vos cartes." + "DESCRIPTION": "Infligez !D! dégâts. Les dégâts sont augmentés de !M! pour chaque guardianmod:Gemme dans votre deck." }, "Guardian:Gem_Synthetic": { "NAME": "Onyx", @@ -372,11 +379,11 @@ }, "Guardian:BronzeOrb": { "NAME": "Support orbital", - "DESCRIPTION": "Inné. NL Infligez !D! dégâts. NL Mettez une carte aléatoire de votre pioche en guardianmod:Stase. NL Épuisement." + "DESCRIPTION": "Infligez !D! dégâts. NL guardianmod:Renforcez d'un montant égal aux dégâts non-bloqués. NL Épuisement." }, "Guardian:RevengeProtocol": { "NAME": "Protocole de vengeance", - "DESCRIPTION": "Lorsque vous êtes en guardianmod:Mode_Défensif, augmentez votre Force de !M!. NL Au début de votre tour, guardianmod:Renforcez de !GuardianSecondM!." + "DESCRIPTION": "Lorsque vous entrez en *Mode *Défensif, gagnez !M! de Force. NL Au début de votre tour, guardianmod:Renforcez de !GuardianSecondM!." }, "Guardian:GatlingBeam": { "NAME": "Tourelle laser", @@ -388,44 +395,44 @@ }, "Guardian:StasisEngine": { "NAME": "Moteur statique", - "DESCRIPTION": "Lorsque vous jouez la 3ème carte qui coûte 0 dans un seul tour, gagnez [E] et piochez une carte.", + "DESCRIPTION": "Lorsque vous jouez 3 carte coûtant 0 dans un seul tour, gagnez [E] et piochez une carte.", "UPGRADE_DESCRIPTION": "Inné. NL Lorsque vous jouez la 3ème carte qui coûte 0 dans un seul tour, gagnez [E] et piochez une carte." }, "Guardian:HammerDown": { - "NAME": "Hammer Down", - "DESCRIPTION": "Deal !D! damage. NL Double your Strength and Dexterity. NL Épuisement." + "NAME": "Marteau Abattu", + "DESCRIPTION": "Infligez !D! dégâts. NL Doublez votre Force et votre Dextérité. NL Épuisement." }, "Guardian:OmegaCannon": { - "NAME": "Omega Cannon", - "DESCRIPTION": "Deal !D! damage. NL Costs 1 less [E] for each Strength you have." + "NAME": "Canon Oméga", + "DESCRIPTION": "Deal !D! damage. NL Coûte 1 [E] de moins pour chaque Force que vous avez." }, "Guardian:ModeShift": { - "NAME": "Mode Shift", - "DESCRIPTION": "Swap your Strength and Dexterity. NL Draw a card.", - "UPGRADE_DESCRIPTION": "Retain. NL Swap your Strength and Dexterity. NL Draw a card." + "NAME": "Changement de mode", + "DESCRIPTION": "Permutez votre Force et votre Dextérité. NL Piochez une carte.", + "UPGRADE_DESCRIPTION": "Retenue. NL Permutez votre Force et votre Dextérité. NL Piochez une carte." }, "Guardian:PackageConstruct": { - "NAME": "Package: Construct", - "DESCRIPTION": "Add a Hammer Down, Omega Cannon, and Mode Shift to your hand. NL Épuisement.", - "UPGRADE_DESCRIPTION": "Add a Hammer Down, Omega Cannon, and Mode Shift to your hand and Upgrade them. NL Épuisement." + "NAME": "Colis: Androïde", + "DESCRIPTION": "Obtenez Marteau Abattu, Canon Oméga et Changement de mode. NL Épuisement.", + "UPGRADE_DESCRIPTION": "Obtenez Marteau Abattu+, Canon Oméga+ et Changement de mode+. NL Épuisement." }, "Guardian:PackageMass": { - "NAME": "Package: Mass", - "DESCRIPTION": "Add a Mass of Spikes, Mass of Bombs, and Group Slam to your hand. NL Épuisement.", - "UPGRADE_DESCRIPTION": "Add a Mass of Spikes, Mass of Bombs, and Group Slam to your hand and Upgrade them. NL Épuisement." + "NAME": "Colis: Masse", + "DESCRIPTION": "Obtenez Masse de Piques, Masse de Bombes et Slam collectif. NL Épuisement.", + "UPGRADE_DESCRIPTION": "Obtenez Masse de Piques+, Masse de Bombes+ et Slam collectif+. NL Épuisement." }, "Guardian:MassOfThorns": { - "NAME": "Mass Of Spikes", - "DESCRIPTION": "Gain !M! temporary Thorns. NL Exhaust if you have Artifact." + "NAME": "Masse de Piques", + "DESCRIPTION": "Gagnez !M! d'Épines Temporaires. NL Épuisement si vous avez de l'Artéfact." }, "Guardian:MassTimeBomb": { - "NAME": "Mass Of Bombs", - "DESCRIPTION": "In each empty guardianmod:Stasis slot, place a Time Bomb there. NL Exhaust if this created 2 or more Time Bombs.", - "UPGRADE_DESCRIPTION": "In each empty guardianmod:Stasis slot, place an Upgraded Time Bomb there. NL Exhaust if this created 2 or more Time Bombs." + "NAME": "Masse de Bombes", + "DESCRIPTION": "Pour chaque emplacement de guardianmod:Stase vide, placez-y une Bombe temporelle. NL Épuisement si cela a créé 2 Bombes Temporelles ou plus.", + "UPGRADE_DESCRIPTION": "Pour chaque emplacement de guardianmod:Stase vide, placez-y une Bombe temporelle Améliorée. NL Épuisement si cela a créé 2 Bombes Temporelles ou plus." }, "Guardian:MassSlam": { - "NAME": "Group Slam", - "DESCRIPTION": "Deal !D! damage !M! times. NL Exhaust if you have 3 or more Strength." + "NAME": "Slam collectif", + "DESCRIPTION": "Infligez !D! dégâts !M! fois. NL Épuisement si vous avez 3 de Force ou plus." }, "Guardian:GemstoneGunCard": { "NAME": "Fusil à gemmes", diff --git a/src/main/resources/guardianResources/localization/fra/CharacterStrings.json b/src/main/resources/guardianResources/localization/fra/CharacterStrings.json index 8123b07377..ad4d3572dd 100644 --- a/src/main/resources/guardianResources/localization/fra/CharacterStrings.json +++ b/src/main/resources/guardianResources/localization/fra/CharacterStrings.json @@ -4,15 +4,15 @@ "Le Gardien" ], "TEXT": [ - "Un androïde de la Tour, programmée pour la défendre. NL Capable se défendre-lui même par commande.", + "Un androïde de la Tour, programmé pour la défendre. NL Capable se défendre lui-même sur commande.", "DIRECTIVE PRIMAIRE - #r~DÉTRUIRE~ #r~CŒUR.~", "[ guardianmod:Cavité ]", "Dans une rue mal éclairée, vous rencontrez plusieurs personnages encapuchonnés en plein rituel. Lorsque vous vous approchez, ils se tournent vers vous à l'unisson. Le plus grand d'entre eux montre ses crocs et tend une longue main pâle vers vous. NL ~\"Rejoignez~ ~nous~ ~protecteur~ ~antique,~ ~et~ ~ressentez~ ~la~ ~chaleur~ ~de~ ~la~ ~Tour.\"~", - "Modé défensif", - "Vous gagnez #b3 #yd'Épines, #b10 #yd'Armure au début de votre tour, et votre Armure ne s'expire pas.", + "Mode défensif", + "Vous gagnez #b3 #yd'Épines et votre Armure ne s'expire pas.", "~ERREUR:~ #rStase en cours." ], "KEYWORDS": [ ] } -} \ No newline at end of file +} diff --git a/src/main/resources/guardianResources/localization/fra/EventStrings.json b/src/main/resources/guardianResources/localization/fra/EventStrings.json index 05820d4de7..8e7443c037 100644 --- a/src/main/resources/guardianResources/localization/fra/EventStrings.json +++ b/src/main/resources/guardianResources/localization/fra/EventStrings.json @@ -7,15 +7,15 @@ "Bien que la perspective d'un trésor soit attrayante, vous préférez gardez votre armure pour des aventures plus importantes.", "Ayant réussi à conquérir l'ancienne mine, vous repartez avec un sentiment de satisfaction. Et des appendices de bronze douloureux.", "Vous volez la pioche du camp de Diablotins, qui semble être de mauvaise qualité. Vous pouvez l'utiliser ici pour gagner des pierres précieuses, ou le mettre de côté pour l'utiliser plus tard dans votre ascension.", - "Utilisant la pioche, vous frappez le mur et taillez une pierre précieuse. Celle-ci s'use un peu dans le processus, mais mieux vaut l'abîmer que vos propres griffes." + "Utilisant la pioche, vous frappez le mur et taillez plusieures pierres précieuses. La pioche s'est détruite dans le processus, mais mieux vaut maintenant que l'abîmer avec vos propres griffes." ], "OPTIONS": [ - "[Creuser avec les griffes] #gGagnez #gune #gGemme #galéatoire. #rPerdez #r", + "[Creuser avec les griffes] #gObtenez #gune #gGemme #galéatoire. #rPerdez #r", " #rPV.", "[Quitter]", - "[Voler] #rFight #rGremlins. #gGain #gPick #gof #gRhapsody.", - "[Miner avec la Pioche] #gGagnez #gune #gGemme #galéatoire. #rPerdez #rune #rcharge #rde #rla #rPioche.", - "[Verrouillé] Pioche #rCassée." + "[Voler] #rCombattez #rdes #rDiablotins. #gObtenez #gPioche #gde #gchez #gRhapsody.", + "[Miner avec la Pioche] #gObtenez #g3 #gGemmes #galéatoires. #rPerdez #rPioche #rde #rchez #rRhapsody.", + "[Verrouillé] Pioche Cassée." ] }, "Guardian:StasisEgg": { @@ -30,7 +30,8 @@ "[Utiliser] #gGagnez #gChambre #gQuantique. #rDevenez #rMaudit #r- #rVieillesse", "[Détruire] #gGagnez #g", " #gPV #gMax. #rDevenez #rMaudit #r- #rDouleur", - "[Quitter]" + "[Quitter]", + "[Verrouillé] Requiert une carte non Embouteillée" ] }, "Guardian:AccursedBlacksmith": { @@ -39,7 +40,7 @@ "Vous décidez d'utiliser la forge et... NL #y@CLANG@ #y@CLAAANG@ #y@CLANG!@ NL ...de faire de la place dans votre arsenal pour de nouvelles gemmes." ], "OPTIONS": [ - "[Trafiquer] #gAjoutez #gune #gcavité #gpour #gn'importe #gquelle #gcarte #gpouvant #gavoir #gune #gcavité.", + "[Trafiquer] #gAjoutez #gune #gCavité #gpour #gn'importe #gquelle #gcarte #gpouvant #gavoir #gune #gCavité.", "Ajoutez une Cavité à une carte.", "[Verrouillé] Requiert une carte avec des cavités." ] @@ -77,10 +78,10 @@ "Profitant de cette pause dans votre ascension, vous placez une pierre précieuse dans votre équipement, sentant instantanément votre puissance augmenter." ], "OPTIONS": [ - "[Démonter] #rRetirez une Carte Encastrée. Gagnez ses #gGemmes.", + "[Démonter] #rRetirez une Carte Encastrée. Obtenez ses #gGemmes.", "[Verrouillé] Requiert une Carte Encastrée avec une Gemme installée.", "[Forcer] #rDétruisez toutes les #gGemmes dans une carte Encastrée.", - "[Transmettre] #rRetirez une carte. Gagnez une #gGemme aléatoire.", + "[Transmettre] #rRetirez une carte. Obtenez une #gGemme aléatoire.", "[Verrouillé] Déjà utilisée.", "[Quitter]", "[Optimiser] Ajoutez une #gGemme dans une #gCavité.", @@ -124,4 +125,4 @@ "[Verrouillé] Requiert une Frappe et une Défense." ] } -} \ No newline at end of file +} diff --git a/src/main/resources/guardianResources/localization/fra/KeywordStrings.json b/src/main/resources/guardianResources/localization/fra/KeywordStrings.json index 4577138c50..cd20629bde 100644 --- a/src/main/resources/guardianResources/localization/fra/KeywordStrings.json +++ b/src/main/resources/guardianResources/localization/fra/KeywordStrings.json @@ -10,15 +10,15 @@ "socketed" ], "PROPER_NAME": "Cavité", - "DESCRIPTION": "Une Gemme peut être placée dans une Cavité dans un Site de Repos pour combiner les effets de la carte et les effets de la Gemme." + "DESCRIPTION": "Une #yGemme peut être placée dans cette Cavité à un Site de Repos." }, { "NAMES": [ - "stasis", - "stase" + "stase", + "stasis" ], "PROPER_NAME": "Stase", - "DESCRIPTION": "Une carte en #yStase gagne un compteur de tour égal à son coût plus #b1. NL Le compteur de tour est réduit de #b1 au début de votre tour. NL Lorsque le compteur atteint #b0, elle retourne dans votre main et coûte #b0 jusqu'à ce qu'elle soit jouée." + "DESCRIPTION": "Une carte en Stase gagne un compteur de tours égal à son coût plus #b1 [REMOVE_SPACE]. NL Le compteur de tour est réduit de #b1 au début de votre tour. NL Lorsque le compteur atteint #b0, elle retourne dans votre main et coûte #b0 jusqu'à ce qu'elle soit jouée." }, { "NAMES": [ @@ -28,26 +28,27 @@ "gems" ], "PROPER_NAME": "Gemme", - "DESCRIPTION": "Des #yGemmes peuvent être placées dans des #yCavités dans certaines cartes dans un site de Repos. Ne peut pas être #yAméliorée." + "DESCRIPTION": "Des #yGemmes peuvent être placées dans des #yCavités dans certaines cartes à un site de Repos. Ne peut pas être #yAméliorée." }, { - "PROPER_NAME": "Mode défensif", + "PROPER_NAME": "Mode Défensif", "NAMES": [ "defensive mode", "defensive_mode", - "Mode défensif", + "mode défensif", "mode_défensif", "défensif", "defensive" ], - "DESCRIPTION": "#yPose. NL Lorsque vous êtes en Mode défensif , vous avez #b3 #yd'Épines, gagnez #b10 #yd'Armure au début de votre tour, et votre #yArmure n'expire pas." }, + "DESCRIPTION": "#yPose. NL Lorsque vous êtes en Mode Défensif, vous avez #b3 #yd'Épines et votre #yArmure n'expire pas." + }, { "NAMES": [ "accelerate", "accélérez" ], - "PROPER_NAME": "Accélérer", - "DESCRIPTION": "Réduisez le compteur de tours de 1 de la carte la plus à droite en #yStase de #b1. Si le compteur de la carte est maintenant à #b0, remettez-la dans votre main. Elle coûte #b0 jusqu'à ce qu'elle soit jouée." + "PROPER_NAME": "Accélération", + "DESCRIPTION": "Réduisez le compteur de tours de la carte la plus à droite en #yStase de #b1 [REMOVE_SPACE]." }, { "NAMES": [ @@ -56,14 +57,28 @@ "packages" ], "PROPER_NAME": "Colis", - "DESCRIPTION": "Une #yCompétence #ys'Épuisant qui génère trois cartes inspirées d'un Gardien de la Tour." + "DESCRIPTION": "Une #yCompétence #ys'Épuisant qui génère trois cartes inspirées d'un androïde de la Tour." }, { "NAMES": [ "volatile" ], "PROPER_NAME": "Volatile", - "DESCRIPTION": "Lorsque cette carte quitte son état de #yStase, #yÉpuisez-la au lieu de la remettre dans votre main." + "DESCRIPTION": "Lorsque cette carte quitte son état de #yStase, elle #ys'Épuise [REMOVE_SPACE]." + }, + { + "NAMES": [ + "Polishing Oil", + "Polishing_Oil", + "polishing_oil", + "polishingoil", + "Huile de lustrage", + "Huile_de_lustrage", + "huile_de_lustrage", + "huiledelustrage" + ], + "PROPER_NAME": "Huile de lustrage", + "DESCRIPTION": "#yPotion [REMOVE_SPACE]: Gagnez #b16 #yd'Armure [REMOVE_SPACE]. Entrez en #yMode #yDéfensif [REMOVE_SPACE]." }, { "NAMES": [ @@ -71,7 +86,7 @@ "tick" ], "PROPER_NAME": "Tic", - "DESCRIPTION": "Cet effet se déclenche lorsque le compteur de tours de la carte est réduit lorsqu'elle est en #yStase." + "DESCRIPTION": "Cet effet se déclenche lorsque le compteur de tours de la carte est réduit." }, { "NAMES": [ @@ -86,15 +101,7 @@ "renforcez", "brace" ], - "PROPER_NAME": "Renforcement", - "DESCRIPTION": "Réduisez la perte de PV nécessaire pour déclencher le Changement de mode de X, déclenchant le Changement de mode si la perte de PV nécessaire est maintenant à 0." - }, - { - "NAMES": [ - "downgrade", - "Rétrogradez" - ], - "PROPER_NAME": "Rétrogradation", - "DESCRIPTION": "Retirez une amélioration d'une carte." + "PROPER_NAME": "Renforcement X", + "DESCRIPTION": "Réduisez la perte de PV nécessaire pour déclencher le #yChangement #yde #yMode de X." } ] diff --git a/src/main/resources/guardianResources/localization/fra/PotionStrings.json b/src/main/resources/guardianResources/localization/fra/PotionStrings.json index fac3dac3e3..b5bfa9cc66 100644 --- a/src/main/resources/guardianResources/localization/fra/PotionStrings.json +++ b/src/main/resources/guardianResources/localization/fra/PotionStrings.json @@ -1,6 +1,6 @@ { "Guardian:AcceleratePotion": { - "NAME": "Potion temporelle", + "NAME": "Potion d'urgence", "DESCRIPTIONS": [ "Accélérez toutes les cartes en #yStase #b", " fois." @@ -10,11 +10,11 @@ "NAME": "Huile de lustrage", "DESCRIPTIONS": [ "Gagnez #b", - " d'Armure. Entrez en #yMode #Défensif" + " #yd'Armure [REMOVE_SPACE]. Entrez en #yMode #Défensif [REMOVE_SPACE]." ] }, "Guardian:BlockOnCardUsePotion": { - "NAME": "Lotion d'armurier", + "NAME": "Teinture d'armurier", "DESCRIPTIONS": [ "Gagnez #b", " #yd'Armure chaque fois que vous jouez une carte ce tour." @@ -23,9 +23,9 @@ "Guardian:StasisDiscoveryPotion": { "NAME": "Élixir quantique", "DESCRIPTIONS": [ - "Gagnez des emplacements de #yStase jusqu'à ce que vous en avez #b", - ". NL #b", - " fois, choisissez #b1 parmi #b3 cartes à placer en #yStase." + "Gagnez des emplacements de #yStase jusqu'à ce que vous en ayez #b", + ". NL Répétez #b", + " fois : choisissez #b1 parmi #b3 cartes à placer en #yStase [REMOVE_SPACE]." ] } } diff --git a/src/main/resources/guardianResources/localization/fra/PowerStrings.json b/src/main/resources/guardianResources/localization/fra/PowerStrings.json index fe366a3242..205030a0a6 100644 --- a/src/main/resources/guardianResources/localization/fra/PowerStrings.json +++ b/src/main/resources/guardianResources/localization/fra/PowerStrings.json @@ -18,7 +18,7 @@ "NAME": "Orbes flottants", "DESCRIPTIONS": [ "Lorsque vous jouez une carte #yCoûtant #y0, infligez #b", - "dégâts à un ennemi aléatoire" + "dégâts à un ennemi aléatoire." ] }, "Guardian:OrbwalkPower": { @@ -37,49 +37,50 @@ ] }, "Guardian:GemFinderPower": { - "NAME": "Détecteur de gemmes", + "NAME": "Détecteur de Gemmes", "DESCRIPTIONS": [ - "À la fin du combat, choisissez une #yGemme Commune à ajouter à votre deck.", - "À la fin du combat, choisissez #b", - "#yGemmes Communes à ajouter à votre deck." + "À la fin du combat, vous pouvez ajouter une #yGemme aléatoire à votre deck.", + "À la fin du combat, vous pouvez ajouter #b", + "#yGemmes aléatoires à votre deck." ] }, "Guardian:FuturePlansPower": { - "NAME": "Plans futurs", + "NAME": "Plans Futurs", "DESCRIPTIONS": [ "À la fin de votre tour, vous pouvez placer #b", - "carte en #yStase.", - "cartes en #yStase." + "carte en #yStase [REMOVE_SPACE].", + "cartes en #yStase [REMOVE_SPACE]." ] }, "Guardian:DefenseModePower": { - "NAME": "Mode défensif", + "NAME": "Mode Défensif", "DESCRIPTIONS": [ - "Le #yMode #ydéfensif restera actif pour #b", + "Le #yMode #yDéfensif restera actif pour #b", " tours. Le #yMode #ydéfensif accorde #b", " #yd'Épines, réduit les dégâts de #b25%, et accorde #b2 #yd'Armure quand vous jouez une carte." ] }, "Guardian:ConstructModePower": { - "NAME": "Mode constructif", + "NAME": "Mode Construction", "DESCRIPTIONS": [ - "Au début de chaque tour, si vous avez au moins 1 Tampon, gagnez #b", - " de Force." + "Au début de chaque tour, si vous avez au moins #b", + " #yTampon, gagnez #b", + " de #yForce." ] }, "Guardian:MultiBoostPower": { "NAME": "MultiBoost", "DESCRIPTIONS": [ - "#yAttacks that deal damage multiple times do so an additional time.", - "#yAttacks that deal damage multiple times do so #b", - " additional times." + "Les #yAttaques qui infligent des dégâts plusieurs fois frappent une fois de plus.", + "Les #yAttaques qui infligent des dégâts plusieurs fois frappent #b", + " fois de plus." ] }, "Guardian:TargetedPower": { - "NAME": "Targeted", + "NAME": "Ciblé", "DESCRIPTIONS": [ - "Each time this enemy takes damage, gain #b", - " #yStrength for this turn." + "Chaque fois que cet ennemi prend des dégâts, gagnez #b", + " de #yForce pour ce tour." ] }, "Guardian:LoseThornsPower": { @@ -90,10 +91,10 @@ ] }, "Guardian:BeamBuffPower": { - "NAME": "Primed", + "NAME": "Primé", "DESCRIPTIONS": [ - "Beam cards deal #b", - " more damage." + "Les cartes Laser infligent #b", + " dégâts supplémentaires." ] }, "Guardian:DefensiveModeBuffsPower": { @@ -101,13 +102,13 @@ "DESCRIPTIONS": [ "En supplément de ses effets normaux, le #yMode #yDéfensif appliquera: NL #b", " #yd'Épines.", - "de #yDextérité.", - " #yd'Armure à la fin de votre tour.", + " de #yDextérité.", + " #yd'Armure à la fin de chaque tour.", "#yÉpuisez la première carte #yStatut ou #yMalédiction piochée chaque tour.", "#yÉpuisez les #b", " premières cartes #yStatut ou #yMalédiction piochées chaque tour.", "Gagnez #b", - " de #yForce pour chaque tour que le #yMode #yDéfensif a été actif lorsqu'il se termine." + " de #yForce pour chaque tour où le #yMode #yDéfensif a été actif lorsqu'il se termine." ] }, "Guardian:AutomayhemPower": { @@ -123,39 +124,39 @@ "DESCRIPTIONS": [ "Gagnez #b", " #yd'Artéfact ", - " au début de votre tour si vous n'avez pas #yd'Artéfact." + " au début de votre tour si vous n'avez pas #yd'Artéfact [REMOVE_SPACE]." ] }, "Guardian:ModeShiftPower": { - "NAME": "Changement de mode", + "NAME": "Changement de Mode", "DESCRIPTIONS": [ - "Si vous perdez encore #b", - " PV, gagnez #b10 #yd'Armure, entrez en #yMode #yDéfensif jusqu'au prochain tour until, et augmentez le nombre de PV perdus requis pour déclencher cet effet de 10, pour un maximum de 50." + "Quand vous perdez #b", + " PV, gagnez #b16 #yd'Armure, entrez en #yMode #yDéfensif jusqu'au prochain tour, et augmentez le nombre de PV perdus requis pour déclencher cet effet de 10, jusqu'à un maximum de #b50 [REMOVE_SPACE]." ] }, "Guardian:ExhaustStatusesPower": { "NAME": "Répulseur", "DESCRIPTIONS": [ - "La première carte #yStatut ou #yMalédiction que vous piochez chaque tour sera #yÉpuisée, piochez une carte si cet effet se réalise.", - "Les #b", - "premières cartes #yStatut ou #yMalédiction que vous piochez chaque tour seront #yÉpuisées, piochez une carte à chaque fois que cet effet se réalise." + "Lorsque vous piochez la première carte #yStaut ou #rMalédiction chaque tour, #yÉpuisez-la et piochez une carte.", + "Lorsque vous piochez les #b", + "premières cartes #yStatut ou #yMalédiction chaque tour, #yÉpuisez-les et piochez une carte." ] }, "Guardian:RevengePower": { - "NAME": "Revanchard", + "NAME": "Vengeance", "DESCRIPTIONS": [ - "Lorsque vous êtes en #yMode #yDéfensif augmentez votre #yForce de #b", - " ." + "Chaque fois que vous entrez en #yMode #yDéfensif gagnez #b", + " de #yForce [REMOVE_SPACE]." ] }, "Guardian:StasisEnginePower": { - "NAME": "Moteur statique", + "NAME": "Moteur de stase", "DESCRIPTIONS": [ "Gagnez #b", " [E] et piochez #b", " carte", " cartes", - " lorsque vous jouez une 3ème carte qui coûte 0 en un seul tour." + " la première fois que vous jouez #b3 cartes qui coûtent 0 en un seul tour." ] }, "Guardian:EnergizedGuardianPower": { @@ -175,39 +176,39 @@ ] }, "Guardian:EvasiveProtocolPower": { - "NAME": "Protocole évasif", + "NAME": "Protocole d'évasion", "DESCRIPTIONS": [ - "Gagnez #b", - " de #yDextérité lorsque vous êtes en #yMode #yDéfensif." + "Réduisez vos débuffs de #b", + " quand vous entrez en #yMode #yDéfensif [REMOVE_SPACE]." ] }, "Guardian:SpikerProtocolPower": { "NAME": "Protocole épineux", "DESCRIPTIONS": [ "Gagnez #b", - " #yd'Épines lorsque vous êtes en #yMode #yDéfensif." + " #yd'Épines lorsque vous entrez en #yMode #yDéfensif [REMOVE_SPACE]." ] }, "Guardian:ArmoredProtocolPower": { "NAME": "Protocole blindé", "DESCRIPTIONS": [ "Gagnez #b", - " #yd'Armure à la fin de votre tour lorsque vous êtes en #yMode #yDéfensif." + " #yd'Armure à la fin de votre tour lorsque vous êtes en #yMode #yDéfensif [REMOVE_SPACE]." ] }, "Guardian:DontLeaveDefensiveModePower": { - "NAME": "Mode défensif", + "NAME": "Mode Défensif", "DESCRIPTIONS": [ - "Vous quittez le #yMode #yDéfensif à la fin de votre prochain tour.", - "Le #yMode #yDéfensif sera encore actif pour encore #b", - " tours." + "Vous quitterez le #yMode #yDéfensif à la fin de ce tour.", + "Le #yMode #yDéfensif sera actif pour encore #b", + " rounds." ] }, "Guardian:BracePerTurnPower": { "NAME": "Renforcement", "DESCRIPTIONS": [ "Au début de votre tour, #yRenforcez de #b", - " ." + " [REMOVE_SPACE]." ] } } diff --git a/src/main/resources/guardianResources/localization/fra/RelicStrings.json b/src/main/resources/guardianResources/localization/fra/RelicStrings.json index 35b66bc739..2f5f00cacc 100644 --- a/src/main/resources/guardianResources/localization/fra/RelicStrings.json +++ b/src/main/resources/guardianResources/localization/fra/RelicStrings.json @@ -3,27 +3,38 @@ "NAME": "Engrenage de bronze", "FLAVOR": "De la protection lorsque vous en avez le plus besoin.", "DESCRIPTIONS": [ - "Au début de chaque combat, obtenez #yEngrenage NL Le Gardien commence la run avec une #yGemme commune aléatoire." ] + "Au début de chaque combat, obtenez #yEngrenage. NL Le Gardien commence l'aventure avec une #yGemme commune aléatoire." + ] }, "Guardian:ModeShifterPlus": { "NAME": "Engrenage de gardien", "FLAVOR": "Remplacez ceci tous les 3,000 étages.", "DESCRIPTIONS": [ - "Remplace #rEngrenage #rde #rBronze. NL Commencez chaque combat en #yguardianmod:Mode_Défensif, qui persiste pour #b3 tours." + "Remplace", + "[REMOVE_SPACE]. Au début de chaque combat, obtenez #yEngrenage. Lorsque vous entrez en #yMode #yDéfensif [REMOVE_SPACE], gagnez [E] et piochez #b2 cartes." ] }, + "Guardian:ObsidianScales": { + "NAME": "Écailles d'obsidienne", + "FLAVOR": "Tâchez le ciel de noir avec votre sang. Ripostez contre tous ceux qui vous ont attaqué.", + "DESCRIPTIONS": [ + "Au début du combat, gagnez #b", + " #yd'Épines [REMOVE_SPACE]. Lorsque vous êtes ou subissez un débuff, gagnez #b", + " #yd'Épines [REMOVE_SPACE]." + ] + }, "Guardian:DefensiveModeMoreBlock": { "NAME": "Plaque royale de Baalor", "FLAVOR": "On n'a jamais assez d'Armure.", "DESCRIPTIONS": [ - "Lorsque vous #yguardianmod:Renforcez, #yRenforcez 1 de plus." + "Lorsque vous #yguardianmod:Renforcez, #yRenforcez #b1 fois de plus." ] }, "Guardian:guardianmod:GemCopier": { "NAME": "Gobelet de pierres précieuses", "FLAVOR": "Seules les plus pures feront l'affaire.", "DESCRIPTIONS": [ - "Lorsque vous jouez une #yguardianmod:Gemme , jouez une copie de celle-ci." + "Lorsque vous jouez une #yguardianmod:Gemme [REMOVE_SPACE], jouez une copie de celle-ci." ] }, "Guardian:PocketSentry": { @@ -37,19 +48,19 @@ "NAME": "Sacoche de gemmes", "FLAVOR": "Ooh... brillant!", "DESCRIPTIONS": [ - "Lorsque vous la récupérez, ajoutez #b5 #yguardianmod:Gemmes aléatoires dans votre deck." + "Lorsque vous la récupérez, vous pouvez ajouter jusqu'à #b5 #yguardianmod:Gemmes aléatoires dans votre deck." ] }, "Guardian:StasisCodex": { "NAME": "Codex de Pilote", "FLAVOR": "Des designs et des diagrammes des premiers prototypes à commande manuelle de la Tour, par le maître pilote David.", "DESCRIPTIONS": [ - " Si vous n'avez pas de carte en #yguardianmod:Stase à la fin de votre tour, choisissez-en #b1 parmi #b3 cards à placer en #yguardianmod:Stase." + "À la fin de vos #b3 premiers tours, si vous n'avez pas de carte en #yguardianmod:Stase à la fin de votre tour, choisissez-en #b1 parmi #b3 cards à placer en #yguardianmod:Stase." ] }, "Guardian:StasisSlotIncreaseRelic": { - "NAME": "Tiny Police Box", - "FLAVOR": "It's bigger on the inside...", + "NAME": "Cabine temporelle minuscule", + "FLAVOR": "C'est plus grand à l'intérieur...", "DESCRIPTIONS": [ "Commencez chaque combat avec #b2 emplacements de #yguardianmod:Stase supplémentaires." ] @@ -58,7 +69,7 @@ "NAME": "Drones errants", "FLAVOR": "Ces drones trouvent les meilleures pièces de récupération, mais requiert de la puissance pour se maintenir.", "DESCRIPTIONS": [ - "Au début de chaque combat, perdez #b2 emplacements de #yguardianmod:Stase. NL Gagnez [E] au début de votre tour." + "Au début de chaque combat, perdez #b1 emplacement de #yguardianmod:Stase. NL Gagnez [E] au début de votre tour." ] }, "Guardian:StasisUpgradeRelic": { @@ -86,12 +97,13 @@ "Lorsque vous la récupérez, choisissez une carte. Commencez chaque combat avec cette carte retirée de votre deck. Au début du #b4e tour, remettez #b2 copies de cette carte dans votre main.", "Choisissez une carte pour ", "Commencez chaque combat avec ", - " retirée de vootre deck. Au début du #b4e tour, remettez #b2 copies de celle-ci dans votre main." + " retirée de votre deck. Au début du #b4e tour, remettez #b2 copies de celle-ci dans votre main.", + "La carte attachée à cette relique a été #rretirée du deck, cette relique ne fonctionne plus." ] }, "Guardian:TickHelperRelic": { "NAME": "Cooling Fluid", - "FLAVOR": "Hazardous. Do not consume.", + "FLAVOR": "Dangereux. Ne pas ingérer.", "DESCRIPTIONS": [ "Start each combat with #b2 additional #yguardianmod:Stasis slots. NL When a card enters #yguardianmod:Stasis, increase its turn counter by #b2." ] @@ -100,7 +112,7 @@ "NAME": "Pioche de chez Rhapsody", "FLAVOR": "Avec toutes les pierres précieuses qui jonchent la Tour, il est difficile d'imaginer que quelqu'un soit si malchanceux qu'il ait eu besoin de cette pioche pour l'aider.", "DESCRIPTIONS": [ - "Vous pouvez désormais #gMiner pour récupérer #b2 #yguardianmod:Gemmes aux feux de camp (jusqu'à #b3 fois)." + "Lorsque vous battez un ennemi d'Élite, ajoutez une #yguardianmod:Gemme aléatoire parmi les récompenses." ] }, "Guardian:GemstoneGun": { @@ -108,7 +120,7 @@ "FLAVOR": "Pan! Pan! Pan! Hé, J'en ai eu trois!", "DESCRIPTIONS": [ "Quand vous le prenez, choisissez #b3 #yguardianmod:Gemmes. Au début de chaque combat, obtenez une carte avec Retenue, Épuisement et a ces trois Gemmes encastrées.", - "Choose a Gem to load the Gem Gun." + "Choisissez une Gemme à recharger dans le Fusil à gemme." ] }, "Guardian:BottledAnomaly": { diff --git a/src/main/resources/guardianResources/localization/fra/UIStrings.json b/src/main/resources/guardianResources/localization/fra/UIStrings.json index 5fb5baaa36..15b71b0d8a 100644 --- a/src/main/resources/guardianResources/localization/fra/UIStrings.json +++ b/src/main/resources/guardianResources/localization/fra/UIStrings.json @@ -23,7 +23,7 @@ "Guardian:FindGemsOption": { "TEXT": [ "Miner", - "Gagnez 2 Gemmes aléatoires.", + "Obtenez 2 Gemmes aléatoires.", "Pioche cassée." ] }, diff --git a/src/main/resources/guardianResources/localization/jpn/CardStrings.json b/src/main/resources/guardianResources/localization/jpn/CardStrings.json index ca7c31efd6..9103c504cb 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": "ルビー", @@ -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": "敵全体に !D! ダメージを 2 回与える。 NL 16ブロック以上ある場合、 !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,13 @@ }, "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": "エセリアル NL guardianmod:磨き油 を得る。 NL 廃棄", + "UPGRADE_DESCRIPTION": "guardianmod:磨き油 を得る。 NL 廃棄" }, "Guardian:Harden": { "NAME": "硬化", @@ -129,8 +130,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 +140,8 @@ }, "Guardian:CompilePackage": { "NAME": "コンパイルパッケージ", - "DESCRIPTION": "3枚の guardianmod:パッケージ から 1 枚を得て、 guardianmod:停滞 スロットに加える。 NL 廃棄", - "UPGRADE_DESCRIPTION": "3枚の 強化済み guardianmod:パッケージ から 1 枚を得て、 guardianmod:停滞 スロットに加える。 NL 廃棄", + "DESCRIPTION": "guardianmod:パッケージ を選択し、それらを guardianmod:停滞 スロットに置く。 NL 廃棄", + "UPGRADE_DESCRIPTION": "強化済み guardianmod:パッケージ を選択し、それらを guardianmod:停滞 スロットに置く。 NL 廃棄", "EXTENDED_DESCRIPTION": [ "パッケージを選択" ] @@ -157,8 +158,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: セントリー", @@ -181,17 +182,17 @@ "UPGRADE_DESCRIPTION": "強化済み NL *経路変更 NL *先行プログラム NL *タイムキャパシター NL 廃棄" }, "Guardian:Planning": { - "NAME": "プランニング", - "DESCRIPTION": "山札の上から !M! 枚のカードを guardianmod:停滞 させる。" + "NAME": "格納シールド", + "DESCRIPTION": "!B! ブロックを得る。 NL 自分のデバフを !M! 減少させる。" }, "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,19 +205,19 @@ }, "Guardian:GemFinder": { "NAME": "ジェム探査", - "DESCRIPTION": "エセリアル NL 戦闘終了時に、ランダムな guardianmod:ジェム をデッキに加える。" + "DESCRIPTION": "エセリアル NL 戦闘終了後、ランダムな guardianmod:ジェム をデッキに加える。" }, "Guardian:StasisField": { "NAME": "停滞フィールド", - "DESCRIPTION": " !B! ブロックを得る。 NL このカードを *停滞 させる。" + "DESCRIPTION": "!B! ブロックを得る。 NL このカードを *停滞 させる。" }, - "Guardian:Metallicize": { - "NAME": "ハーデン", - "DESCRIPTION": " !M! expansioncontent:プレートアーマー を得る。" + "Guardian:Metallicize": { + "NAME": "硬化", + "DESCRIPTION": "*プレートアーマー !M! を得る。" }, "Guardian:StasisStrike": { "NAME": "ステイシスストライク", - "DESCRIPTION": " !D! ダメージを与える。 NL 停滞 スロットを1得る。" + "DESCRIPTION": "!D! ダメージを与える。 NL 停滞 スロットを1得る。" }, "Guardian:FuturePlans": { "NAME": "未来のプラン", @@ -226,7 +227,7 @@ "Guardian:Suspension": { "NAME": "サスペンション", "DESCRIPTION": "!B! ブロックを得る。 NL 手札のカードを1枚 guardianmod:停滞 させる。", - "UPGRADE_DESCRIPTION": "カードを 1 枚引く。 NL 手札のカードを1枚 guardianmod:停滞 させる。" + "UPGRADE_DESCRIPTION": "!B! ブロックを得る。 NL 手札のカードを1枚 guardianmod:停滞 させる。" }, "Guardian:FastForward": { "NAME": "スピードブースト", @@ -239,60 +240,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": " !D! ダメージを与える。 ソケットにある物を含め全ての guardianmod:ジェム を発動する。 NL 廃棄 ", - "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", - "UPGRADE_DESCRIPTION":" !B! ブロックと一時的な トゲ !M! を得る。 NL guardianmod:制動 4" + "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 何度でもアップグレード出来る。 NL アップグレードごとに +1:" + "DESCRIPTION": "!D! ダメージを !M! 回与える。 NL 何度でもアップグレード出来る。 NL アップグレードする度ジェムの発動回数が増加する。" }, "Guardian:MultiBeam": { "NAME": "マルチ-ビーム", @@ -300,21 +300,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:制動 6", - "UPGRADE_DESCRIPTION": " *ディフェンシブモード に入るたびに、 各デバフが !M! 減少する。 NL guardianmod:制動 9" + "DESCRIPTION": " *ディフェンシブモード に入った時、自分のデバフを !M! 減少させる。 NL guardianmod:制動 !GuardianSecondM!", + "UPGRADE_DESCRIPTION": "*ディフェンシブモード に入った時、自分のデバフを !M! 減少させる。 NL guardianmod:制動 !GuardianSecondM!" }, "Guardian:SpikerProtocol": { "NAME": "反撃プロトコル", - "DESCRIPTION": " *ディフェンシブモード に入るたびに、 トゲ !M! を得る。 NL ターン開始時 guardianmod:制動 6", - "UPGRADE_DESCRIPTION":" *ディフェンシブモード に入るたびに、 トゲ !M! を得る。 NL ターン開始時 guardianmod:制動 9" + "DESCRIPTION": " *ディフェンシブモード に入った時、 トゲ !M! を得る。 NL guardianmod:制動 !GuardianSecondM!", + "UPGRADE_DESCRIPTION": " *ディフェンシブモード に入った時、 トゲ !M! を得る。 NL guardianmod:制動 !GuardianSecondM!" }, "Guardian:ArmoredProtocol": { "NAME": "防御プロトコル", @@ -327,12 +327,12 @@ }, "Guardian:AncientConstruct": { "NAME": "古代の構築物", - "DESCRIPTION": " 1 アーティファクト を得る。 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": "オニキス", @@ -366,11 +366,11 @@ }, "Guardian:CrystalShiv": { "NAME": "クリスタルナイフ", - "DESCRIPTION": " !D! ダメージを与える。 NL 廃棄" + "DESCRIPTION": "!D! ダメージを与える。 NL 廃棄" }, "Guardian:CrystalWard": { "NAME": "水晶の護り", - "DESCRIPTION": " !B! ブロックを得る。 NL 廃棄" + "DESCRIPTION": "!B! ブロックを得る。 NL 廃棄" }, "Guardian:Repulse": { "NAME": "リパルサー", @@ -379,15 +379,15 @@ }, "Guardian:BronzeOrb": { "NAME": "オーブサポート", - "DESCRIPTION": " !D! ダメージを与える。 NL ブロックされていないダメージを与えるには、 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": "シールドチャージャー", @@ -400,11 +400,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": "モードシフト", @@ -441,7 +441,7 @@ }, "Guardian:BodySlam": { "NAME": "ボディクラッシュ", - "DESCRIPTION": " !B! ブロックを得る。 NL ブロックと同じ値のダメージを与える。", + "DESCRIPTION": "!B! ブロックを得る。 NL ブロックと同じ値のダメージを与える。", "UPGRADE_DESCRIPTION": " NL ( !D! ダメージ)" }, "Guardian:SecondStrike": { @@ -454,7 +454,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 b45f450779..1ee38d3d6e 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 b65205dbd5..a643c3ada2 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": [ @@ -60,6 +60,17 @@ "PROPER_NAME": "揮発性", "DESCRIPTION": "このカードが #y停滞 から離れた時 #y廃棄 される。" }, + { + "NAMES": [ + "Polishing Oil", + "Polishing_Oil", + "polishing_oil", + "polishingoil", + "磨き油" + ], + "PROPER_NAME": "磨き油", + "DESCRIPTION": "#yポーション : #b16 #yブロックを得て、 #yディフェンシブモード に入る。" + }, { "NAMES": [ "tick", diff --git a/src/main/resources/guardianResources/localization/jpn/PotionStrings.json b/src/main/resources/guardianResources/localization/jpn/PotionStrings.json index ccfb9a7f19..aee8e22f26 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 9da4c12bde..1c2783f4ab 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ディフェンシブモード の間デバフを #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 e06f3f18d2..0f7542d95a 100644 --- a/src/main/resources/guardianResources/localization/jpn/RelicStrings.json +++ b/src/main/resources/guardianResources/localization/jpn/RelicStrings.json @@ -3,22 +3,24 @@ "NAME": "ブロンズギア", "FLAVOR": "最も重要な部分を保護する。", "DESCRIPTIONS": [ - "戦闘開始時、 #yギアアップ を得る。 NL ガーディアンはランダムなコモン #yジェム を持った状態でランを開始する。" + "戦闘開始時、 #yギアアップ を手札に加える。 NL ガーディアンはランダムなコモン #yジェム を持った状態でランを開始する。" ] }, "Guardian:ModeShifterPlus": { "NAME": "ガーディアンギア", "FLAVOR": "3,000フロア毎に交換してください", "DESCRIPTIONS": [ - " ", - " [] と置き換える。 NL 戦闘の開始時に、 #yギアアップ を得る。 NL #yディフェンシブモード に入るたびに、 [E] を得て #b2 枚のカードをドローする。" + "", + "#rブロンズギア と置き換える。 NL 戦闘開始時、 #yギアアップ を手札に加える。 NL #yディフェンシブモード になる度、 [E] を得てカードを #b2 枚引く。" ] }, "Guardian:ObsidianScales": { - "NAME": "Obsidian Scales", - "FAVOR": "血で空を黒く染めろ。攻撃してきた者すべてに報復せよ。", + "NAME": "オブシディアンスケイル", + "FLAVOR": "お前の血で空を黒く染めろ。お前に害成す全てに報復せよ。", "DESCRIPTIONS": [ - "戦闘開始時に、 #yトゲ #b3 を獲得する。デバフを受けたりデバフを獲得したりするたびに、 #yトゲ #b1 を獲得する。" + "戦闘開始時、 #yトゲ #b", + " を得る。あなたが デバフを受けた時、 #yトゲ #b", + " を得る。" ] }, "Guardian:DefensiveModeMoreBlock": { @@ -39,21 +41,21 @@ "NAME": "アルンバのポケットセントリー", "FLAVOR": "セントリーモード、起動。ターゲット補足。悪く思うな。", "DESCRIPTIONS": [ - "3ターン毎に全ての敵に #y脱力 #b1 を与える。" + "#b3 ターン毎に全ての敵に #y脱力 #b1 を与える。" ] }, "Guardian:SackOfGems": { "NAME": "ジェム入り袋", "FLAVOR": "おおぉ...眩しい!", "DESCRIPTIONS": [ - "入手時、ランダムな #yguardianmod:ジェム #b5 枚をデッキに追加する。" + "入手時、ランダムな #yguardianmod:ジェム #b5 枚を選択してデッキに追加する。" ] }, "Guardian:StasisCodex": { - "NAME": "パイロットのコーデックス", + "NAME": "パイロットコーデックス", "FLAVOR": "尖塔の初期手動駆動プロトタイプの設計図とダイアグラム。 by - マスター パイロット デビッド", "DESCRIPTIONS": [ - "戦闘開始から3ターン後、 #yguardianmod:停滞 スロットがいっぱいで無い場合、 #b3 枚のカードから #b1 枚を選択し、 #yguardianmod:停滞 スロットに置く。" + "戦闘開始から3ターンの間、ターン終了時に #yguardianmod:停滞 スロットが空いていた場合、 #b3 枚のカードから #b1 枚を選択し、 #yguardianmod:停滞 スロットに置く。" ] }, "Guardian:StasisSlotIncreaseRelic": { @@ -95,7 +97,8 @@ "入手時、デッキからカードを1枚選択する。このカードをデッキから取り除いた状態で戦闘を開始する。 #b4ターン目 開始時、このカードとそのコピー #b2 枚をあなたの手札に加える。", "選択されたカード: ", "戦闘開始時 ", - " をデッキから取り除いた状態で戦闘を開始する。 #b4ターン目 開始時、このカードとそのコピー #b2 枚をあなたの手札に加える。" + " をデッキから取り除いた状態で戦闘を開始する。 #b4ターン目 開始時、このカードとそのコピー #b2 枚をあなたの手札に加える。", + "このレリックの効果を受けたカードはデッキから #r削除 された。" ] }, "Guardian:TickHelperRelic": { @@ -109,7 +112,7 @@ "NAME": "ピッケル・オブ・ラプソディ", "FLAVOR": "尖塔に多くの宝石が散在する中で、このピッケルを必要とするほど不運な人が居るとは想像し難い。", "DESCRIPTIONS": [ - "休憩所で #b2 枚の #yguardianmod:ジェム を #g掘削 出来るようになる。 (最大 #b3 回)" + "エリートに勝利した時、報酬に #b1 枚のランダムな #yguardianmod:ジェム カードを加える。" ] }, "Guardian:GemstoneGun": { @@ -124,11 +127,11 @@ "NAME": "瓶詰めの異変", "FLAVOR": "渦を巻いて、渦を巻いて、最後には壊れる。", "DESCRIPTIONS": [ - "入手時、デッキからカードを1枚選択する。戦闘開始時、山札からそれを取り除く。 #b3ターン目 開始時、コストを0にしたそのカードを手札に加える。", + "入手時、デッキからカードを1枚選択する。戦闘開始時、山札からそれを取り除く。 #b3ターン目 開始時、そのカードを手札に加える。カードはそのターンの間コストが #b0 になる。", "選択されたカード: ", - "戦闘開始時 ", - " 山札からそれを取り除く。 #b3ターン目 開始時、コストを0にしたそのカードを手札に加える。", + "戦闘開始時山札から ", + " を取り除く。 #b3ターン目 開始時、そのカードを手札に加える。カードはそのターンの間コストが #b0 になる。", "瓶に入ったカードがデッキから #r取り除かれ レリックは機能を失った。" ] } -} +} \ No newline at end of file diff --git a/src/main/resources/guardianResources/localization/jpn/UIStrings.json b/src/main/resources/guardianResources/localization/jpn/UIStrings.json index 1b6c9f3e30..625fe50f88 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 1c3a1a8435..0d8b41596b 100644 --- a/src/main/resources/guardianResources/localization/kor/CardStrings.json +++ b/src/main/resources/guardianResources/localization/kor/CardStrings.json @@ -1,4 +1,4 @@ -{ +{ "Guardian:Strike_Guardian": { "NAME": "타격", "DESCRIPTION": "피해를 !D! 줍니다." @@ -9,18 +9,18 @@ }, "Guardian:Gem_Red": { "NAME": "루비", - "DESCRIPTION": "guardianmod:보석. NL 힘을 2 얻습니다. 이번 턴이 끝날 때 힘을 2 잃습니다.", - "UPGRADE_DESCRIPTION": "힘을 2 얻습니다. 이번 턴이 끝날 때 힘을 2 잃습니다." + "DESCRIPTION": "guardianmod:보석. NL 힘을 2 얻습니다. NL 이번 턴이 끝날 때 힘을 2 잃습니다.", + "UPGRADE_DESCRIPTION": "힘을 2 얻습니다. NL 이번 턴이 끝날 때 힘을 2 잃습니다." }, "Guardian:Gem_Green": { "NAME": "에메랄드", - "DESCRIPTION": "guardianmod:보석. NL 민첩을 2 얻습니다. 이번 턴이 끝날 때 민첩을 2 잃습니다.", - "UPGRADE_DESCRIPTION": "민첩을 2 얻습니다. 이번 턴이 끝날 때 민첩을 2 잃습니다." + "DESCRIPTION": "guardianmod:보석. NL 민첩을 2 얻습니다. NL 이번 턴이 끝날 때 민첩을 2 잃습니다.", + "UPGRADE_DESCRIPTION": "민첩을 2 얻습니다. NL 이번 턴이 끝날 때 민첩을 2 잃습니다." }, "Guardian:Gem_Lightblue": { "NAME": "토르말린", - "DESCRIPTION": "guardianmod:보석. NL 가시를 4 얻습니다. 이번 턴이 끝날 때 가시를 4 잃습니다.", - "UPGRADE_DESCRIPTION": "가시를 4 얻습니다. 이번 턴이 끝날 때 가시를 4 잃습니다." + "DESCRIPTION": "guardianmod:보석. NL 가시를 4 얻습니다. NL 이번 턴이 끝날 때 가시를 4 잃습니다.", + "UPGRADE_DESCRIPTION": "가시를 4 얻습니다. NL 이번 턴이 끝날 때 가시를 4 잃습니다." }, "Guardian:Gem_White": { "NAME": "석영", @@ -34,12 +34,12 @@ }, "Guardian:Gem_Cyan": { "NAME": "아쿠아 마린", - "DESCRIPTION": "guardianmod:보석. NL *크리스탈 *수호를 1장 얻습니다.", - "UPGRADE_DESCRIPTION": "*크리스탈 *수호를 1장 얻습니다." + "DESCRIPTION": "guardianmod:보석. NL *크리스탈 *수호를 얻습니다.", + "UPGRADE_DESCRIPTION": "*크리스탈 *수호를 얻습니다." }, "Guardian:ChargeUp": { "NAME": "충전 중", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL 다음 턴 동안 힘을 !M! 얻습니다." + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 다음 턴에 힘을 !M! 얻습니다. NL 다음 턴이 끝날 때 힘을 !M! 잃습니다." }, "Guardian:DonusPower": { "NAME": "과적", @@ -48,7 +48,7 @@ }, "Guardian:DecasProtection": { "NAME": "고대의 파워", - "DESCRIPTION": "힘 과 민첩을 !M! 얻습니다. NL 이번 턴이 끝날 때 힘 과 민첩을 !M! 잃습니다." + "DESCRIPTION": "힘과 민첩을 !M! 얻습니다. NL 이번 턴이 끝날 때 힘과 민첩을 !M! 잃습니다." }, "Guardian:FierceBash": { "NAME": "매서운 강타", @@ -77,8 +77,8 @@ }, "Guardian:CurlUp": { "NAME": "웅크리기", - "DESCRIPTION": "무작위 카드 1장을 guardianmod:정지장에 넣습니다. NL guardianmod:대비를 !M! 합니다.", - "UPGRADE_DESCRIPTION": "카드 1장을 guardianmod:정지장에 넣습니다. NL guardianmod:대비를 !M! 합니다." + "DESCRIPTION": "무작위 카드를 1장 guardianmod:정지장에 넣습니다. NL guardianmod:대비를 !M! 합니다.", + "UPGRADE_DESCRIPTION": "카드를 1장 guardianmod:정지장에 넣습니다. NL guardianmod:대비를 !M! 합니다." }, "Guardian:TimeBomb": { "NAME": "시한폭탄", @@ -90,8 +90,8 @@ }, "Guardian:BronzeArmor": { "NAME": "탄력적인 갑옷", - "DESCRIPTION": "보유한 모든 해로운 효과를 !M! 감소시킵니다. NL guardianmod:대비를 8 합니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "보유한 모든 해로운 효과를 !M! 감소시킵니다. NL guardianmod:대비를 8 합니다." + "DESCRIPTION": "보유한 해로운 효과를 각각 !M! 만큼 감소시킵니다. NL guardianmod:대비를 8 합니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "보유한 해로운 효과를 각각 !M! 만큼 감소시킵니다. NL guardianmod:대비를 8 합니다." }, "Guardian:FloatingOrbs": { "NAME": "부유 구체", @@ -118,24 +118,25 @@ }, "Guardian:SphericShield": { "NAME": "구체 방어", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL guardianmod:수비_모드로 전환합니다. NL 소멸." + "DESCRIPTION": "휘발성. NL guardianmod:연마유를 1개 얻습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "guardianmod:연마유를 1개 얻습니다. NL 소멸." }, "Guardian:Harden": { "NAME": "경화", - "DESCRIPTION": "방어도 가 20 이상 필요합니다. NL guardianmod:대비를 !GuardianSecondM! 하고 가시를 !M! 얻습니다.", + "DESCRIPTION": "방어도가 20 이상 필요합니다. NL guardianmod:대비를 !GuardianSecondM! 하고 가시를 !M! 얻습니다.", "EXTENDED_DESCRIPTION": [ - "방어도가 더 필요하다." + "방어도 더 필요." ] }, "Guardian:SentryBeam": { "NAME": "보초기 폭발", - "DESCRIPTION": "피해를 !D! 줍니다. NL *보초기 *파동을 1장 guardianmod:정지장에 넣습니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL *보초기 *파동+을 1장 guardianmod:정지장에 넣습니다. NL 소멸." + "DESCRIPTION": "피해를 !D! 줍니다. NL *보초기 *파동을 guardianmod:정지장에 넣습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL *보초기 *파동+을 guardianmod:정지장에 넣습니다. NL 소멸." }, "Guardian:SentryWave": { "NAME": "보초기 파동", - "DESCRIPTION": "약화를 !M! 부여합니다. NL *보초기 *폭발을 1장 guardianmod:정지장에 넣습니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "약화를 !M! 부여합니다. NL guardianmod:대비를 2 합니다. NL *보초기 *폭발+을 1장 guardianmod:정지장에 넣습니다. NL 소멸." + "DESCRIPTION": "약화를 !M! 부여합니다. NL *보초기 *폭발을 guardianmod:정지장에 넣습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "약화를 !M! 부여합니다. NL guardianmod:대비를 2 합니다. NL *보초기 *폭발+을 guardianmod:정지장에 넣습니다. NL 소멸." }, "Guardian:CompilePackage": { "NAME": "컴파일 패키지", @@ -166,7 +167,7 @@ "UPGRADE_DESCRIPTION": "*보초기 *폭발+ 1장, *보초기 *파동+ 2장을 얻습니다. NL 소멸." }, "Guardian:PackageWalker": { - "NAME": "패키지: 구체 보조기", + "NAME": "패키지: 구체 순찰기", "DESCRIPTION": "*구체 *순찰기, *순찰기 *할퀴기, *소각을 얻습니다. NL 소멸.", "UPGRADE_DESCRIPTION": "*구체 *순찰기+, *순찰기 *할퀴기+, *소각+을 얻습니다. NL 소멸." }, @@ -181,8 +182,8 @@ "UPGRADE_DESCRIPTION": "*재편성+, *사전 *구성+, *시간 *축전기+를 얻습니다. NL 소멸." }, "Guardian:Planning": { - "NAME": "계획", - "DESCRIPTION": "뽑을 카드 더미 위에서 !M! 장을 guardianmod:정지장에 넣습니다." + "NAME": "저장 방패", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 보유한 해로운 효과를 각각 !M! 만큼 감소시킵니다." }, "Guardian:Recover": { "NAME": "복구", @@ -191,7 +192,7 @@ "Guardian:Emergency": { "NAME": "긴급 상황", "DESCRIPTION": "guardianmod:정지장에 있는 모든 카드를 guardianmod:가속합니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "guardianmod:정지장에 있는 모든 카드를 2번 guardianmod:가속합니다. NL 소멸." + "UPGRADE_DESCRIPTION": "guardianmod:정지장에 있는 모든 카드를 두 번 guardianmod:가속합니다. NL 소멸." }, "Guardian:Clone": { "NAME": "복제", @@ -208,20 +209,20 @@ }, "Guardian:StasisField": { "NAME": "정지장 방어막", - "DESCRIPTION": "방어도를 !B! 만큼 3번 얻습니다. NL 이 카드를 guardianmod:정지장에 넣습니다." + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 이 카드를 guardianmod:정지장에 넣습니다." }, "Guardian:Metallicize": { "NAME": "경화", - "DESCRIPTION": "expansioncontent:판금_갑옷을 !M! 얻습니다." + "DESCRIPTION": "expansioncontent:판금 *갑옷을 !M! 얻습니다." }, "Guardian:StasisStrike": { "NAME": "정지장 타격", - "DESCRIPTION": "피해를 !D! 줍니다. NL guardianmod:정지장 슬롯을 1 얻습니다." + "DESCRIPTION": "피해를 !D! 줍니다. NL *정지장 슬롯을 1 얻습니다." }, "Guardian:FuturePlans": { "NAME": "미래 계획", - "DESCRIPTION": "턴 종료 시 카드를 !M! 장 guardianmod:정지장에 넣습니다.", - "UPGRADE_DESCRIPTION": "선천성. NL 턴 종료 시 카드를 !M! 장 guardianmod:정지장에 넣습니다." + "DESCRIPTION": "턴 종료 시 카드를 최대 !M! 장 guardianmod:정지장에 넣습니다.", + "UPGRADE_DESCRIPTION": "선천성. NL 턴 종료 시 카드를 최대 !M! 장 guardianmod:정지장에 넣습니다." }, "Guardian:Suspension": { "NAME": "완충장치", @@ -235,7 +236,7 @@ }, "Guardian:TimeCapacitor": { "NAME": "시간 축전기", - "DESCRIPTION": "정지장 슬롯을 !M! 개 얻습니다." + "DESCRIPTION": "정지장 슬롯을 !M! 얻습니다." }, "Guardian:ConstructionForm": { "NAME": "구조물의 형상", @@ -257,7 +258,7 @@ }, "Guardian:Reroute": { "NAME": "재편성", - "DESCRIPTION": "피해를 !D! 줍니다. NL 이번 턴 동안 다음으로 사용하는 카드를 guardianmod:정지장에 넣습니다." + "DESCRIPTION": "피해를 !D! 줍니다. NL 이번 턴에 다음 사용하는 카드를 guardianmod:정지장에 넣습니다." }, "Guardian:PiercingHide": { "NAME": "가시 외골격", @@ -287,16 +288,15 @@ }, "Guardian:ExploitGems": { "NAME": "보석 활용", - "DESCRIPTION": "카드를 1장 뽑습니다. NL guardianmod:째깍할 때 이 카드를 사용합니다. NL guardianmod:불안정.", - "UPGRADE_DESCRIPTION": " [E] 를 얻습니다. NL 카드를 1장 뽑습니다." + "DESCRIPTION": "카드를 1장 뽑습니다." }, "Guardian:RefractedBeam": { "NAME": "굴절 광선", - "DESCRIPTION": "피해를 !D! 만큼 !M! 번 줍니다. NL 강화 횟수에 제한이 없습니다." + "DESCRIPTION": "피해를 !D! 만큼 !M! 번 줍니다. NL 강화 횟수에 제한이 없습니다. NL 강화 +1 당 효과:" }, "Guardian:MultiBeam": { "NAME": "다중 광선", - "DESCRIPTION": "적 전체에게 피해를 !D! 만큼 X번 줍니다. NL guardianmod:째깍할 때 이 카드의 피해량이 !M! 만큼 증가합니다." + "DESCRIPTION": "적 전체에게 피해를 !D! 만큼 X번 줍니다. NL guardianmod:째깍할 때 이 카드의 피해량이 !M! 증가합니다." }, "Guardian:BaubleBeam": { "NAME": "큐빅 폭발", @@ -308,17 +308,17 @@ }, "Guardian:EvasiveProtocol": { "NAME": "회피 규약", - "DESCRIPTION": "guardianmod:수비_모드로 전환할 때마다 모든 해로운 효과를 !M! 감소시킵니다. NL 내 턴 시작 시 guardianmod:대비를 6 합니다.", - "UPGRADE_DESCRIPTION": "guardianmod:수비_모드로 전환할 때마다 모든 해로운 효과를 !M! 감소시킵니다. NL 내 턴 시작 시 guardianmod:대비를 9 합니다." + "DESCRIPTION": "guardianmod:수비_모드로 전환할 때마다 보유한 해로운 효과를 각각 !M! 만큼 감소시킵니다. NL guardianmod:대비를 !GuardianSecondM! 합니다.", + "UPGRADE_DESCRIPTION": "guardianmod:수비_모드로 전환할 때마다 보유한 해로운 효과를 각각 !M! 만큼 감소시킵니다. NL guardianmod:대비를 !GuardianSecondM! 합니다." }, "Guardian:SpikerProtocol": { "NAME": "가시 돋친 규약", - "DESCRIPTION": "guardianmod:수비_모드로 전환할 때마다 가시를 !M! 얻습니다. NL guardianmod:대비를 6 합니다.", - "UPGRADE_DESCRIPTION": "guardianmod:수비_모드로 전환할 때마다 가시를 !M! 얻습니다. NL guardianmod:대비를 9 합니다." + "DESCRIPTION": "guardianmod:수비_모드로 전환할 때마다 가시를 !M! 얻습니다. NL guardianmod:대비를 !GuardianSecondM! 합니다.", + "UPGRADE_DESCRIPTION": "guardianmod:수비_모드로 전환할 때마다 가시를 !M! 얻습니다. NL guardianmod:대비를 !GuardianSecondM! 합니다." }, "Guardian:ArmoredProtocol": { - "NAME": "무장 규약", - "DESCRIPTION": "guardianmod:수비_모드 동안 턴 종료 시 방어도를 !M! 얻습니다. NL 내 턴 시작 시 guardianmod:대비를 3 합니다." + "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": "시간 선별기", @@ -328,7 +328,7 @@ "Guardian:AncientConstruct": { "NAME": "고대의 구조", "DESCRIPTION": "인공물을 1 얻습니다. NL 내 턴 시작 시 인공물이 없다면 인공물을 !M! 얻습니다.", - "UPGRADE_DESCRIPTION": "인공물을 2 얻습니다. NL 내 턴 시작 시 인공물이 없다면 인공물을 !M! 얻습니다." + "UPGRADE_DESCRIPTION": "인공물을 1 얻습니다. NL 내 턴 시작 시 인공물이 없다면 인공물을 !M! 얻습니다." }, "Guardian:CrystalBeam": { "NAME": "크리스탈 광선", @@ -374,12 +374,12 @@ }, "Guardian:Repulse": { "NAME": "격퇴", - "DESCRIPTION": "매 턴 처음으로 상태이상 또는 저주를 뽑으면 소멸시키고 카드를 1장 뽑습니다.", - "UPGRADE_DESCRIPTION": "매 턴 처음으로 상태이상 또는 저주를 뽑으면 소멸시키고 카드를 1장 뽑습니다." + "DESCRIPTION": "매 턴 처음으로 상태이상 또는 저주를 뽑으면 그 카드를 소멸시키고 카드를 1장 뽑습니다.", + "UPGRADE_DESCRIPTION": "매 턴 처음으로 상태이상 또는 저주를 뽑으면 그 카드를 소멸시키고 카드를 1장 뽑습니다." }, "Guardian:BronzeOrb": { "NAME": "구체 보조기", - "DESCRIPTION": "피해를 !D! 줍니다. NL 막히지 않은 피해를 받은만큼 guardianmod:대비합니다. NL 소멸." + "DESCRIPTION": "피해를 !D! 줍니다. NL 막히지 않은 피해를 받은만큼 guardianmod:대비합니다. NL 소멸." }, "Guardian:RevengeProtocol": { "NAME": "복수 규약", @@ -400,7 +400,7 @@ }, "Guardian:HammerDown": { "NAME": "전속력 내려치기", - "DESCRIPTION": "피해를 !D! 줍니다. NL 힘 과 민첩을 2배로 늘립니다. NL 소멸." + "DESCRIPTION": "피해를 !D! 줍니다. NL 힘과 민첩을 2배로 늘립니다. NL 소멸." }, "Guardian:OmegaCannon": { "NAME": "오메가 대포", @@ -408,8 +408,8 @@ }, "Guardian:ModeShift": { "NAME": "모드 전환", - "DESCRIPTION": "힘 과 민첩 의 수치를 서로 바꿉니다. NL 카드를 1장 뽑습니다.", - "UPGRADE_DESCRIPTION": "보존. NL 힘 과 민첩 의 수치를 서로 바꿉니다. NL 카드를 1장 뽑습니다." + "DESCRIPTION": "힘과 민첩 의 수치를 서로 바꿉니다. NL 카드를 1장 뽑습니다.", + "UPGRADE_DESCRIPTION": "보존. NL 힘과 민첩 의 수치를 서로 바꿉니다. NL 카드를 1장 뽑습니다." }, "Guardian:PackageConstruct": { "NAME": "패키지: 구조", @@ -427,8 +427,8 @@ }, "Guardian:MassTimeBomb": { "NAME": "폭탄 더미", - "DESCRIPTION": "빈 guardianmod:정지장 슬롯마다 *시한 *폭탄을 넣습니다. NL 시한 폭탄이 2장 이상 생성된다면 이 카드를 소멸시킵니다.", - "UPGRADE_DESCRIPTION": "빈 guardianmod:정지장 슬롯마다 *시한 *폭탄+을 넣습니다. NL 시한 폭탄이 2장 이상 생성된다면 이 카드를 소멸시킵니다." + "DESCRIPTION": "빈 guardianmod:정지장 슬롯마다 *시한폭탄을 넣습니다. NL 시한 폭탄이 2장 이상 생성된다면 이 카드를 소멸시킵니다.", + "UPGRADE_DESCRIPTION": "빈 guardianmod:정지장 슬롯마다 *시한폭탄+을 넣습니다. NL 시한 폭탄이 2장 이상 생성된다면 이 카드를 소멸시킵니다." }, "Guardian:MassSlam": { "NAME": "단체 강타", @@ -450,14 +450,14 @@ }, "Guardian:SecondStrikePreviewCard": { "NAME": "두 번째 강타", - "DESCRIPTION": "휘발성. NL 피해를 !D! 줍니다. NL *두 *번 *강타의 guardianmod:소켓에 장착된 *보석이 이 카드의 guardianmod:소켓에 장착됩니다. NL 피해를 !D! 줍니다. NL 소멸." + "DESCRIPTION": "휘발성. NL 피해를 !D! 줍니다. NL *두 *번 *강타에 장착된 *보석이 이 카드에 장착됩니다. NL 소멸." }, "Guardian:StrikeForStrike": { "NAME": "연쇄 타격", - "DESCRIPTION": "피해를 !D! 줍니다. NL 적이 피해를 !M! 줍니다." + "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 bc3860840c..e5349bcc39 100644 --- a/src/main/resources/guardianResources/localization/kor/CharacterStrings.json +++ b/src/main/resources/guardianResources/localization/kor/CharacterStrings.json @@ -9,7 +9,7 @@ "[ guardianmod:소켓 ]", "조명이 없는 거리에서, 어둠의 의식을 치르고 있는 대여섯 명의 후드를 눌러싼 자들이 보입니다. 당신이 다가가자, 그들은 섬뜩한 미소를 지으며 돌아섰습니다. 그들 중 가장 키 큰 이는 송곳니가 길게 삐져나와 있었습니다. 그가 당신에게 창백한 손을 내밉니다. NL ~\"우리와~ ~함께~ ~하자~ ~고대의~ ~수호자여~ ~첨탑의~ ~따스함을~ ~느낄~ ~수~ ~있다네.\"~", "수비 모드", - "턴이 시작될 때마다 #y가시를 #b3 얻고 #y방어도를 #b10 얻고 방어도를 잃지 않습니다.", + "턴이 시작될 때마다 #y가시를 #b3 얻고 방어도를 잃지 않습니다.", "~에러:~ #r정지장 진행 중." ], "KEYWORDS": [ diff --git a/src/main/resources/guardianResources/localization/kor/EventStrings.json b/src/main/resources/guardianResources/localization/kor/EventStrings.json index f2d680d0ea..adf8a15d48 100644 --- a/src/main/resources/guardianResources/localization/kor/EventStrings.json +++ b/src/main/resources/guardianResources/localization/kor/EventStrings.json @@ -1,4 +1,4 @@ -{ +{ "Guardian:GemMine": { "NAME": "보석 광산", "DESCRIPTIONS": [ @@ -13,9 +13,9 @@ "[손톱으로 판다] #g무작위 #g보석을 #g얻습니다. #r체력을 #r", " #r잃습니다.", "[떠난다]", - "[턴다] #r그렘린들과 #r싸웁니다. #g곡괭이의 #g광시곡을 #g얻습니다.", - "[곡괭이로 채굴] #g무작위 #g보석을 #g얻습니다. #r곡괭이 #r사용횟수를 #r잃습니다.", - "[잠김] 곡괭이가 #r부서졌습니다." + "[턴다] #r그렘린들과 #r싸웁니다. #g광시곡의 #g곡괭이 #g얻습니다.", + "[곡괭이로 채굴] #g무작위 #g보석을 #g얻습니다. #r광시곡의 #r곡괭이를 #r잃습니다.", + "[잠김] 곡괭이가 부서졌습니다." ] }, "Guardian:StasisEgg": { @@ -24,13 +24,14 @@ "당신의 발에 걸려 이상한 룬 문자가 새겨진 상자를 열고 맙니다. 안을 유심히 들여다보니 은은하게 윙윙거리는 이상한 알 모양을 한 장치를 발견합니다. 이게 무엇인지, 어디 쓰이는 것인지는 모르지만 뿜어져 나오는 에너지로 강력한 무언가라고 확신합니다.", "당신은 이것을 사용하기로 합니다. 알을 손에 넣고 길을 나서려는데 룬이 빛을 발하며 이상하게도 시간이 점점 더 ~점점~ ~더~ ~천천~ ~히~ ~.~ ~.~ ~.~", "당신은 이 힘을 다른 모험가가 남용하지 못하도록 파괴하기로 합니다. NL #r폭발하기 #r직전 알에서 따스한 빛이 활력을 주었지만 파편들은 #r고통스럽게 당신의 몸을 베어버립니다.", - "당신은 이게 여기 있는 이유가 있을 것이라고 생각합니다. 본능은 이 강력한 힘으로 무언가 해야 한다고 말하고 있지만 이것 또한 남겨둔 자의 의도일지도 모릅니다. 당신은 뚜껑을 닫고 발걸음을 옮깁니다." + "당신은 이게 여기 있는 이유가 있을 것이라고 생각합니다. 본능은 이 강력한 힘으로 무언가 해야 한다고 말하고 있지만 이것 또한 남겨둔 자의 의도일지도 모릅니다. 당신은 뚜껑을 닫고 발걸음을 옮깁니다." ], "OPTIONS": [ - "[사용] #g양자 #g알을 #g얻습니다. #r저주를 #r받습니다 #r- #r노쇠.", + "[사용] #g양자 #g알을 #g얻습니다. #r저주를 #r받습니다. #r- #r노쇠.", "[강타] #g최대 #g체력을 #g", - " #g얻습니다. #r저주를 #r받습니다 #r- #r고통.", - "[떠난다]" + " #g얻습니다. #r저주를 #r받습니다. #r- #r고통.", + "[떠난다]", + "[잠김] 병에 담기지 않은 카드가 필요합니다." ] }, "Guardian:AccursedBlacksmith": { @@ -74,12 +75,12 @@ "변성할 카드를 고르십시오.", "보석을 고르십시오.", "보석을 장착할 카드를 고르십시오.", - "험난한 여정에 찾아온 잠깐의 휴식 시간 동안 당신은 보석을 장착합니다. 그러자 곧바로 힘이 차오르는 게 느껴졌습니다." + "험난한 여정에 찾아온 잠깐의 휴식 시간 동안 당신은 보석을 장착합니다. 그러자 곧바로 힘이 차오르는 게 느껴집니다." ], "OPTIONS": [ "[해체] #r보석이 #r장착된 #r카드를 #r제거합니다. #g그 #g카드에 #g장착된 #g보석을 #g얻습니다.", "[잠김] 보석이 장착된 카드가 필요합니다.", - "[분해] 카드를 한 장 선택하고 그 카드에 장착된 모든 보석을 #g파괴합니다.", + "[분해] 카드를 한 장 선택하고 그 카드에 장착된 모든 #g보석을 #g파괴합니다.", "[변성] #r카드를 #r한 #r장 #r제거합니다. #g무작위 #g보석을 #g한 #g장 #g얻습니다.", "[잠김] 이미 사용했습니다.", "[떠난다]", @@ -120,8 +121,8 @@ "못이라면 두들김을 인내하라, 망치라면 두들겨라." ], "OPTIONS": [ - "[인내] #g모든 #g타격과 #g수비에 #g대비 #g효과를 #g2 #g추가합니다.", - "[잠김] 타격이나 수비가 필요합니다." + "[인내] #g모든 #g타격과 #g수비에 #g'대비를 #g2 #g합니다.' #g효과를 #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 378a2495b9..bc96bb6a49 100644 --- a/src/main/resources/guardianResources/localization/kor/KeywordStrings.json +++ b/src/main/resources/guardianResources/localization/kor/KeywordStrings.json @@ -99,6 +99,7 @@ "대비", "대비를", "대비할", + "대비합니다", "brace" ], "PROPER_NAME": "대비", @@ -115,5 +116,17 @@ ], "PROPER_NAME": "퇴화", "DESCRIPTION": "카드의 강화를 제거합니다." + }, + { + "NAMES": [ + "연마유", + "연마유를", + "Polishing Oil", + "Polishing_Oil", + "polishing_oil", + "polishingoil" + ], + "PROPER_NAME": "연마유", + "DESCRIPTION": "#y물약 : #y방어도를 #b16 얻습니다. #y수비 #y모드로 전환합니다 ." } ] diff --git a/src/main/resources/guardianResources/localization/kor/MonsterStrings.json b/src/main/resources/guardianResources/localization/kor/MonsterStrings.json index 9e26dfeeb6..22fdca1b26 100644 --- a/src/main/resources/guardianResources/localization/kor/MonsterStrings.json +++ b/src/main/resources/guardianResources/localization/kor/MonsterStrings.json @@ -1 +1 @@ -{} \ No newline at end of file +{} \ No newline at end of file diff --git a/src/main/resources/guardianResources/localization/kor/OrbStrings.json b/src/main/resources/guardianResources/localization/kor/OrbStrings.json index c7bea41481..5b4e16dcea 100644 --- a/src/main/resources/guardianResources/localization/kor/OrbStrings.json +++ b/src/main/resources/guardianResources/localization/kor/OrbStrings.json @@ -1,4 +1,4 @@ -{ +{ "Guardian:EmptyStasisSlot": { "NAME": "정지장 슬롯", "DESCRIPTION": [ diff --git a/src/main/resources/guardianResources/localization/kor/PotionStrings.json b/src/main/resources/guardianResources/localization/kor/PotionStrings.json index d863864b1f..ab556ab00b 100644 --- a/src/main/resources/guardianResources/localization/kor/PotionStrings.json +++ b/src/main/resources/guardianResources/localization/kor/PotionStrings.json @@ -1,4 +1,4 @@ -{ +{ "Guardian:AcceleratePotion": { "NAME": "긴급 포션", "DESCRIPTIONS": [ diff --git a/src/main/resources/guardianResources/localization/kor/PowerStrings.json b/src/main/resources/guardianResources/localization/kor/PowerStrings.json index 44c6ac23b4..da894ff0c2 100644 --- a/src/main/resources/guardianResources/localization/kor/PowerStrings.json +++ b/src/main/resources/guardianResources/localization/kor/PowerStrings.json @@ -1,8 +1,8 @@ -{ +{ "Guardian:NextTurnGainTemporaryStrengthPower": { "NAME": "충전 중", "DESCRIPTIONS": [ - "다음 턴 동안 #y힘을 #b", + "다음 턴 동안 힘을 #b", " 얻습니다." ] }, @@ -17,7 +17,7 @@ "Guardian:FloatingOrbsPower": { "NAME": "부유 구체", "DESCRIPTIONS": [ - "비용이 0인 카드를 사용할 때마다 무작위 적에게 피해를 #b", + "비용이 #b0 인 카드를 사용할 때마다 무작위 적에게 피해를 #b", " 줍니다." ] }, @@ -29,10 +29,10 @@ ] }, "Guardian:ClonePower": { - "NAME": "재설계", + "NAME": "재편성", "DESCRIPTIONS": [ - "이번 턴에 다음으로 사용하는 카드를 #y정지장에 넣습니다.", - "이번 턴에 다음으로 사용하는 카드를 #b", + " 이번 턴에 다음 사용하는 카드를 #y정지장에 넣습니다.", + "이번 턴에 다음 사용하는 카드를 #b", " 장 #y정지장에 넣습니다." ] }, @@ -57,14 +57,14 @@ "DESCRIPTIONS": [ "#y수비 #y모드는 #b", " 턴까지 활성화 됩니다. #y수비 #y모드일 때 #y가시를 #b", - " 얻고 받는 피해량을 #b25% 감소시킵니다. 또 카드를 사용할 때마다 #y방어도를 #b2 얻습니다." + " 얻고 받는 피해량을 #b25% 감소시키고 카드를 사용할 때마다 #y방어도를 #b2 얻습니다." ] }, "Guardian:ConstructModePower": { "NAME": "재구성 모드", "DESCRIPTIONS": [ "내 턴 시작 시 #y버퍼가 #b", - " 이상 있다면 #y힘을 #b", + " 이상이면 #y힘을 #b", " 얻습니다." ] }, @@ -101,11 +101,11 @@ "NAME": "수비 모드+", "DESCRIPTIONS": [ "일반 #y수비 #y모드에 추가로 다음과 같은 효과를 얻습니다: NL #b", - " #y가시.", - " #y민첩.", + " #y가시,", + " #y민첩,", " #y방어도를 매 턴 종료 시 획득.", "매 턴 처음으로 #y상태이상 또는 #y저주 카드를 뽑으면 #y소멸시킵니다.", - "매 턴 #y상태이상 또는 #y저주 카드를 최대 #b", + "매 턴 #y상태이상 또는 #y저주 카드를 최대", " 장까지 뽑으면 #y소멸시킵니다.", "#y방어 #y모드가 끝날 때 활성화됐던 턴당 #y힘을 #b", " 얻습니다." @@ -115,7 +115,7 @@ "NAME": "시간 선별기", "DESCRIPTIONS": [ "내 턴 시작 시 #y가속합니다.", - "내 턴 시작 시 #y가속을 #b", + "내 턴 시작 시 #y가속을 #b ", " 번 합니다." ] }, @@ -124,7 +124,7 @@ "DESCRIPTIONS": [ "내 턴 시작 시 #y인공물이 없다면 #y인공물을 #b", " ", - "얻습니다." + " 얻습니다." ] }, "Guardian:ModeShiftPower": { @@ -152,15 +152,15 @@ "Guardian:StasisEnginePower": { "NAME": "정지장 엔진", "DESCRIPTIONS": [ - " [E] 를 #b", + "[E] 를 #b", " 얻고 카드를 #b", " 장 뽑습니다.", " 장 뽑습니다.", - " 이 효과는 한 턴에 비용이 0인 카드를 3번 사용 할때마다 발동됩니다." + " 이 효과는 한 턴에 비용이 #b0 인 카드를 #b3 번 사용 할때마다 발동됩니다." ] }, "Guardian:EnergizedGuardianPower": { - "NAME": "원기 왕성", + "NAME": "에너지 충전", "DESCRIPTIONS": [ "다음 턴에 [E] 를 추가로 #b", " 얻습니다.", @@ -178,7 +178,7 @@ "Guardian:EvasiveProtocolPower": { "NAME": "회피 규약", "DESCRIPTIONS": [ - "#y수비 #y모드로 전환할 때마다 모든 해로운 효과를 #b", + "#y수비 #y모드로 전환할 때마다 해로운 효과를 각각 #b", " 감소시킵니다." ] }, @@ -208,7 +208,7 @@ "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 d5e7597319..4e138bcd2a 100644 --- a/src/main/resources/guardianResources/localization/kor/RelicStrings.json +++ b/src/main/resources/guardianResources/localization/kor/RelicStrings.json @@ -1,4 +1,4 @@ -{ +{ "Guardian:ModeShifter": { "NAME": "청동 톱니바퀴", "FLAVOR": "수호가 가장 중요합니다.", @@ -10,50 +10,52 @@ "NAME": "수호자 톱니바퀴", "FLAVOR": "3,000 층마다 교체해주세요.", "DESCRIPTIONS": [ - "#r청동 #r톱니바퀴와 교체합니다. NL 매 전투 시작 시 #yguardianmod:수비_모드로 전환하며 #b3 턴 지속됩니다.", - "와 교체합니다.[] NL 매 전투 시작 시 #y정비를 얻습니다. NL #y수비 #y모드로 전환할 때마다 [E] 를 얻고 카드를 #b2 장 뽑습니다." + "", + "와[] 교체합니다. NL 매 전투 시작 시 #y정비를 얻습니다. NL #y수비 #y모드로 전환할 때마다 [E] 를 얻고 카드를 #b2 장 뽑습니다." ] }, "Guardian:ObsidianScales": { "NAME": "흑요석 비늘", "FLAVOR": "당신의 피로 하늘을 검게 물들여야 합니다. 공격당했다면 가리지 않고 반격하세요.", "DESCRIPTIONS": [ - "매 전투 시작 시 #y가시를 #b3 얻습니다. 해로운 효과를 보유하거나 얻을 때마다 #y가시를 #b1 얻습니다." + "매 전투 시작 시 #y가시를 #b", + " 얻습니다. 해로운 효과를 보유하거나 얻을 때마다 #y가시를 #b", + " 얻습니다." ] }, "Guardian:DefensiveModeMoreBlock": { "NAME": "뱔로르의 위풍당당한 갑옷", "FLAVOR": "갑옷 하나만으로는 절대 충분하지 않죠.", "DESCRIPTIONS": [ - "#yguardianmod:대비할 때마다 추가로 #y대비를 #b1 만큼 합니다." + "#yguardianmod:대비할 때마다 추가로 #y대비를 #y1 합니다." ] }, "Guardian:guardianmod:GemCopier": { "NAME": "보석 텀블러", "FLAVOR": "가장 깨끗한 사람만 쓸 수 있습니다.", "DESCRIPTIONS": [ - "#yguardianmod:보석 카드를 사용할 때 복사한 그 카드를 사용합니다." + "#yguardianmod:보석 카드를 사용할 때 그 카드를 복사해 사용합니다." ] }, "Guardian:PocketSentry": { "NAME": "아룸바의 휴대용 보초기", "FLAVOR": "보초 모드 활성화. 목표 지정. 유감 없음.", "DESCRIPTIONS": [ - "3 턴마다 적 전체에게 #y약화를 #b1 부여합니다." + "#b3 턴마다 적 전체에게 #y약화를 #b1 부여합니다." ] }, "Guardian:SackOfGems": { "NAME": "보석 자루", "FLAVOR": "우와... 눈부시네요!", "DESCRIPTIONS": [ - "획득 시 덱에 무작위 #yguardianmod:보석을 #b5 장 선택해 얻습니다." + "획득 시 덱에 무작위 #yguardianmod:보석을 최대 #b5 장 선택해 얻습니다." ] }, "Guardian:StasisCodex": { "NAME": "조종사의 고문서", "FLAVOR": "숙련된 조종사 데이비드가 작성한 첨탑의 초기 구동 설계 및 도해.", "DESCRIPTIONS": [ - "3턴 동안 내 턴 종료 시 #yguardianmod:정지장 슬롯에 카드가 1장이라도 없다면 #b3 장 중 #b1 장을 선택해 #y정지장에 넣습니다." + "#b3 턴 동안 내 턴 종료 시 #yguardianmod:정지장 슬롯에 카드가 #b1 장이라도 없다면 #b3 장 중 #b1 장을 선택해 #y정지장에 넣습니다." ] }, "Guardian:StasisSlotIncreaseRelic": { @@ -85,7 +87,7 @@ "카드를 선택하세요: ", "매 전투 시작 시 ", " 카드를 #yguardianmod:정지장에 넣습니다.", - "병에 담긴 카드가 덱에서 제거되어 유물의 효과가 발동하지 않습니다." + "병에 담긴 카드가 덱에서 #r제거되어 유물의 효과가 발동하지 않습니다." ] }, "Guardian:StasisEgg": { @@ -94,29 +96,30 @@ "DESCRIPTIONS": [ "획득 시 카드를 한 장 선택합니다. 매 전투 시작 시 덱에서 그 카드를 제거합니다. #b4 턴 후, 턴 시작 시 제거한 카드와 복사한 카드 #b2 장을 얻습니다.", "카드를 선택하세요: ", - "매 전투 시 선택한 ", - " 카드를 덱에서 제거합니다. #b4 턴 후, 턴 시작 시 제거한 카드와 복사한 카드 #b2 장을 얻습니다." + "매 전투 시작 시 선택한 ", + " 카드를 덱에서 제거합니다. #b4 턴 후, 턴 시작 시 제거한 카드와 복사한 카드 #b2 장을 얻습니다.", + "이 유물로 선택한 카드가 덱에서 #r제거되어 유물이 비활성화됐습니다." ] }, "Guardian:TickHelperRelic": { "NAME": "냉각용 유체", "FLAVOR": "위험. 먹지 마시오.", "DESCRIPTIONS": [ - "추가로 #yguardianmod:정지장 슬롯을 #b2 개 가진 채로 전투를 시작합니다. NL 카드의 #y정지장 대기 횟수를 #b2 증가시킵니다." + "매 전투를 정지장 슬롯을 #b2 더 가진 채로 시작합니다. NL 카드의 #yguardianmod:정지장 대기 횟수를 #b2 증가시킵니다." ] }, "Guardian:PickAxe": { "NAME": "광시곡의 곡괭이", "FLAVOR": "첨탑 여기저기에 원석들은 많이 널려있어서 불행히도 곡괭이가 필요했던 사람은 상상이 잘 가지 않습니다.", "DESCRIPTIONS": [ - "휴식 장소에서 최대 #b3 번 #g채굴할 수 있습니다. #g채굴 시 덱에 #yguardianmod:보석을 #b2 장 얻습니다." + "엘리트 전투에서 패배할 때마다 #yguardianmod:보석 카드 보상을 추가합니다." ] }, "Guardian:GemstoneGun": { "NAME": "원석 총", "FLAVOR": "탕! 탕! 탕! 와, 3번 맞췄다!", "DESCRIPTIONS": [ - "획득 시 #yguardianmod:보석을 #b3 장 선택합니다. 매 전투 시작 시 보존, 소멸, 선택해 장착한 보석 효과를 보유한 #y원석 #y총 카드를 얻습니다.", + "획득 시 #yguardianmod:보석을 #b3 장 선택합니다. 매 전투 시작 시 선택해 장착한 보석 효과를 보유하고 #y보존, #y소멸이 있는 #y원석 #y총 카드를 얻습니다.", "원석 총에 장전할 보석을 선택하십시오." ] }, @@ -127,8 +130,8 @@ "획득 시 카드를 한 장 선택합니다. 매 전투 시작 시 뽑을 카드 더미에서 그 카드를 제거합니다. #b3 턴 후, 턴 시작 시 제거한 카드를 얻습니다. 카드를 얻은 턴에 그 카드의 비용이 #b0 이 됩니다.", "카드를 선택하세요: ", "매 전투 시작 시 선택한 ", - " 카드를 뽑을 카드 더미에서 제거합니다. #b3 턴 후, 턴 시작 시 제거한 카드를 얻습니다. NL 카드를 얻은 턴에 그 카드의 비용은 #b0 입니다.", - "병에 담긴 카드가 덱에서 제거되어 유물의 효과가 발동하지 않습니다." + " 카드를 뽑을 카드 더미에서 제거합니다. #b3 턴 후, 턴 시작 시 제거한 카드를 얻습니다. NL 카드를 얻은 턴에 그 카드의 비용은 #b0 이 됩니다.", + "병에 담긴 카드가 덱에서 #r제거되어 유물의 효과가 발동하지 않습니다." ] } } diff --git a/src/main/resources/guardianResources/localization/kor/RunModStrings.json b/src/main/resources/guardianResources/localization/kor/RunModStrings.json index 9e26dfeeb6..22fdca1b26 100644 --- a/src/main/resources/guardianResources/localization/kor/RunModStrings.json +++ b/src/main/resources/guardianResources/localization/kor/RunModStrings.json @@ -1 +1 @@ -{} \ No newline at end of file +{} \ No newline at end of file diff --git a/src/main/resources/guardianResources/localization/kor/UIStrings.json b/src/main/resources/guardianResources/localization/kor/UIStrings.json index 7049b188db..cba4f44555 100644 --- a/src/main/resources/guardianResources/localization/kor/UIStrings.json +++ b/src/main/resources/guardianResources/localization/kor/UIStrings.json @@ -1,4 +1,4 @@ -{ +{ "Guardian:EnhanceBonfireOptions": { "TEXT": [ "세공", @@ -10,12 +10,12 @@ }, "Guardian:UIOptions": { "TEXT": [ - "정지장에 넣을 카드를 고르십시오.", - "보석을 채취하십시오", + "정지장에 넣을 카드를 선택하십시오.", + "보석을 선택하십시오.", "덱에 보석을 추가", - "정지장에 넣을 카드를 고르십시오.", - "~에러:~ 구조물 모드 중 #r공격 불가.", - "~에러:~ #r정지장 진행 중.", + "정지장에 넣을 카드를 선택하십시오.", + "~오류:~ 구조물 모드 중 #r공격 불가.", + "~오류:~ #r정지장 진행 중.", "덱에 보석을 추가", "" ] @@ -29,7 +29,7 @@ }, "Guardian:BraceMod": { "TEXT": [ - " NL guardianmod:대비를 2 만큼 합니다." + " NL guardianmod:대비를 2 합니다." ] }, "Guardian:gemDescriptor": { 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 0000000000..4f64fcc3ea --- /dev/null +++ b/src/main/resources/guardianResources/localization/spa/CardStrings.json @@ -0,0 +1,467 @@ +{ + "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 al azar !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! Vulnerable a TODOS los enemigos.", + "UPGRADE_DESCRIPTION": "Aplica !M! 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 al azar." +}, +"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.", + "UPGRADE_DESCRIPTION": "Gana un guardianmod:Polishing_Oil. 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! Débil. NL Coloca una *Explosión *Centinela en guardianmod:Estasis. NL Agota.", + "UPGRADE_DESCRIPTION": "Aplica !M! 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 extracción 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 extracción. 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 Vulnerable a TODOS los enemigos.", + "UPGRADE_DESCRIPTION": "Aplica 1 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 al azar." +}, +"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 0000000000..01f5710e1b --- /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 0000000000..6384527046 --- /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 0000000000..e15b0717b0 --- /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 0000000000..9e26dfeeb6 --- /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 0000000000..c115342092 --- /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 0000000000..b0b8a10142 --- /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 0000000000..f1b5696589 --- /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 al azar." + ] + }, + "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 0000000000..eaed416a49 --- /dev/null +++ b/src/main/resources/guardianResources/localization/spa/RelicStrings.json @@ -0,0 +1,137 @@ +{ + "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 #b", + " de #yEspinas [REMOVE_SPACE]. Cada vez que recibas una desventaja o se te aplique una, obtén #b", + " 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 #b3 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.", + "La carta adjunta a esta reliquia ha sido #rremovida de tu mazo, la reliquia ya no funciona." + ] + }, + "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 extracción. 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." + ] + } +} \ No newline at end of file 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 0000000000..9e26dfeeb6 --- /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 0000000000..5a0df13bf5 --- /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 7446aae1da..7fddbb3ae3 100644 --- a/src/main/resources/guardianResources/localization/zhs/CardStrings.json +++ b/src/main/resources/guardianResources/localization/zhs/CardStrings.json @@ -104,7 +104,7 @@ "Guardian:Incinerate": { "NAME": "焚烧", "DESCRIPTION": "造成 !D! 点伤害。 NL guardianmod:加速 。", - "UPGRADE_DESCRIPTION": "造成 !D! 点伤害。 NL guardianmod:加速 。" + "UPGRADE_DESCRIPTION": "造成 !D! 点伤害。 NL guardianmod:加速 2 次。" }, "Guardian:Orbwalk": { "NAME": "行者圆球", @@ -176,8 +176,8 @@ "UPGRADE_DESCRIPTION": "获得 *重分配+ , *预编程+ 与 *时间容器+ 各1张。 NL 消耗 。" }, "Guardian:Planning": { - "NAME": "规划", - "DESCRIPTION": "guardianmod:凝滞 抽牌堆顶部 !M! 张牌。" + "NAME": "储量护盾", + "DESCRIPTION": "获得 !B! 点格挡。 NL 失去所有负面效果 !M! 层。" }, "Guardian:Recover": { "NAME": "恢复", @@ -298,8 +298,8 @@ }, "Guardian:EvasiveProtocol": { "NAME": "闪避协议", - "DESCRIPTION": "当你进入 guardianmod:防御模式 时, NL 失去所有负面效果 !M! 层。 NL guardianmod:提防 6。", - "UPGRADE_DESCRIPTION": "当你进入 guardianmod:防御模式 时, NL 失去所有负面效果 !M! 层。 NL guardianmod:提防 9。" + "DESCRIPTION": "当你进入 guardianmod:防御模式 时, NL 失去所有负面效果 !M! 层。 NL guardianmod:提防 !GuardianSecondM!。", + "UPGRADE_DESCRIPTION": "当你进入 guardianmod:防御模式 时, NL 失去所有负面效果 !M! 层。 NL guardianmod:提防 !GuardianSecondM!。" }, "Guardian:SpikerProtocol": { "NAME": "荆棘协议", @@ -373,7 +373,8 @@ }, "Guardian:SphericShield": { "NAME": "球形护盾", - "DESCRIPTION": "获得 !B! 点 格挡 。 NL 进入 guardianmod:防御模式 。 NL 消耗 。" + "DESCRIPTION": "虚无。 NL 获得一瓶 guardianmod:抛光油 。 NL 消耗。", + "UPGRADE_DESCRIPTION": "获得一瓶 guardianmod:抛光油 。 NL 消耗。" }, "Guardian:RevengeProtocol": { "NAME": "复仇协议", diff --git a/src/main/resources/guardianResources/localization/zhs/KeywordStrings.json b/src/main/resources/guardianResources/localization/zhs/KeywordStrings.json index a6aa36664b..c169de6299 100644 --- a/src/main/resources/guardianResources/localization/zhs/KeywordStrings.json +++ b/src/main/resources/guardianResources/localization/zhs/KeywordStrings.json @@ -6,6 +6,20 @@ "PROPER_NAME": "镶嵌", "DESCRIPTION": " #y宝石 能够被 #y镶嵌 进有 #y孔位 的牌上,使其效果附加于牌。" }, + { + "NAMES": [ + "抛光油", + "抛光油", + "抛光油", + "抛光油", + "Polishing Oil", + "Polishing_Oil", + "polishing_oil", + "polishingoil" + ], + "PROPER_NAME": "抛光油", + "DESCRIPTION": "#y药水 [REMOVE_SPACE]: 获得 #b16 点 #y格挡 [REMOVE_SPACE]。 进入 #y防御模式 [REMOVE_SPACE]。" + }, { "NAMES": [ "凝滞" diff --git a/src/main/resources/guardianResources/localization/zhs/RelicStrings.json b/src/main/resources/guardianResources/localization/zhs/RelicStrings.json index 8237beb2a6..77fcb7a749 100644 --- a/src/main/resources/guardianResources/localization/zhs/RelicStrings.json +++ b/src/main/resources/guardianResources/localization/zhs/RelicStrings.json @@ -18,7 +18,9 @@ "NAME": "黑曜鳞", "FLAVOR": "用鲜血将天空染成漆黑,向所有出手者展开反击。", "DESCRIPTIONS": [ - "战斗开始时,获得 #b3 点 #y荆棘 。每当你获得负面效果,获得 #b1 层 #y荆棘 。" + "战斗开始时,获得 #b", + " 点 #y荆棘 。每当你获得负面效果,获得 #b", + " 层 #y荆棘 。" ] }, "Guardian:DefensiveModeMoreBlock": { @@ -109,7 +111,7 @@ "NAME": "星光采矿镐", "FLAVOR": "有那么多宝石散落在尖塔中,很难想象有这么不幸的人需要这把镐来帮助他们。", "DESCRIPTIONS": [ - "你能在休息处 #y挖掘 #b2 颗 #yguardianmod:宝石 ,你可以选择将它们加入牌组中。(至多使用 #b3 次)" + "击败精英敌人后, NL 你可以将1 张随机 guardianmod:宝石 加入牌组。" ] }, "Guardian:GemstoneGun": { diff --git a/src/main/resources/guardianResources/localization/zht/CardStrings.json b/src/main/resources/guardianResources/localization/zht/CardStrings.json index 8d40901507..6d46f395c2 100644 --- a/src/main/resources/guardianResources/localization/zht/CardStrings.json +++ b/src/main/resources/guardianResources/localization/zht/CardStrings.json @@ -104,7 +104,7 @@ "Guardian:Incinerate": { "NAME": "焚燒", "DESCRIPTION": "造成 !D! 點傷害。 NL guardianmod:加速 。", - "UPGRADE_DESCRIPTION": "造成 !D! 點傷害。 NL guardianmod:加速 。" + "UPGRADE_DESCRIPTION": "造成 !D! 點傷害。 NL guardianmod:加速 2 次。。" }, "Guardian:Orbwalk": { "NAME": "行者圓球", @@ -176,8 +176,8 @@ "UPGRADE_DESCRIPTION": "獲得 *重分配+ , *預編程+ 與 *時間容器+ 各1張。 NL 消耗 。" }, "Guardian:Planning": { - "NAME": "規劃", - "DESCRIPTION": "guardianmod:凝滯 抽牌堆頂部 !M! 張牌。" + "NAME": "储量护盾", + "DESCRIPTION": "获得 !B! 点格挡。 NL 失去所有负面效果 !M! 层。" }, "Guardian:Recover": { "NAME": "恢復", @@ -298,13 +298,13 @@ }, "Guardian:EvasiveProtocol": { "NAME": "閃避協議", - "DESCRIPTION": "當你進入 guardianmod:防禦模式 時, NL 失去所有負面效果 !M! 層。 NL guardianmod:提防 6。", - "UPGRADE_DESCRIPTION": "當你進入 guardianmod:防禦模式 時, NL 失去所有負面效果 !M! 層。 NL guardianmod:提防 9。" + "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。" + "DESCRIPTION": "當你進入 guardianmod:防禦模式 時, NL 獲得 !M! 層 荊棘 。 NL guardianmod:提防 !GuardianSecondM!。", + "UPGRADE_DESCRIPTION": "當你進入 guardianmod:防禦模式 時, NL 獲得 !M! 層 荊棘 。 NL guardianmod:提防 !GuardianSecondM!。" }, "Guardian:ArmoredProtocol": { "NAME": "裝甲協議", @@ -372,8 +372,9 @@ "DESCRIPTION": "造成 !D! 點傷害。 NL guardianmod:提防 等同於造成的未被格擋的傷害。 NL 消耗 。" }, "Guardian:SphericShield": { - "NAME": "球形護盾", - "DESCRIPTION": "獲得 !B! 點 格擋 。 NL 進入 guardianmod:防禦模式 。 NL 消耗 。" + "NAME": "球形护盾", + "DESCRIPTION": "虚无。 NL 获得一瓶 guardianmod:抛光油 。 NL 消耗。", + "UPGRADE_DESCRIPTION": "获得一瓶 guardianmod:抛光油 。 NL 消耗。" }, "Guardian:RevengeProtocol": { "NAME": "復仇協議", diff --git a/src/main/resources/guardianResources/localization/zht/KeywordStrings.json b/src/main/resources/guardianResources/localization/zht/KeywordStrings.json index ae3219d9f5..b7368fff32 100644 --- a/src/main/resources/guardianResources/localization/zht/KeywordStrings.json +++ b/src/main/resources/guardianResources/localization/zht/KeywordStrings.json @@ -6,6 +6,20 @@ "PROPER_NAME": "鑲嵌", "DESCRIPTION": " #y寶石 能夠被 #y鑲嵌 進有 #y孔位 的牌上,使其效果附加於牌。" }, + { + "NAMES": [ + "抛光油", + "抛光油", + "抛光油", + "抛光油", + "Polishing Oil", + "Polishing_Oil", + "polishing_oil", + "polishingoil" + ], + "PROPER_NAME": "抛光油", + "DESCRIPTION": "#y药水 [REMOVE_SPACE]: 获得 #b16 点 #y格挡 [REMOVE_SPACE]。 进入 #y防御模式 [REMOVE_SPACE]。" + }, { "NAMES": [ "凝滯" diff --git a/src/main/resources/guardianResources/localization/zht/RelicStrings.json b/src/main/resources/guardianResources/localization/zht/RelicStrings.json index daf20abeb8..123578a3a8 100644 --- a/src/main/resources/guardianResources/localization/zht/RelicStrings.json +++ b/src/main/resources/guardianResources/localization/zht/RelicStrings.json @@ -18,7 +18,9 @@ "NAME": "黑曜鱗", "FLAVOR": "用鮮血將天空染成漆黑,向所有出手者展開反擊。", "DESCRIPTIONS": [ - "戰鬥開始時,獲得 #b3 點 #y荊棘 。每當你獲得負面效果,獲得 #b1 層 #y荊棘 。" + "戰鬥開始時,獲得 #b", + " 點 #y荊棘 。每當你獲得負面效果,獲得 #b", + " 層 #y荊棘 。" ] }, "Guardian:DefensiveModeMoreBlock": { @@ -106,10 +108,10 @@ ] }, "Guardian:PickAxe": { - "NAME": "星光采礦鎬", - "FLAVOR": "有那麽多寶石散落在尖塔中,很難想象有這麽不幸的人需要這把鎬來幫助他們。", + "NAME": "星光采矿镐", + "FLAVOR": "有那么多宝石散落在尖塔中,很难想象有这么不幸的人需要这把镐来帮助他们。", "DESCRIPTIONS": [ - "你能在休息處 #y挖掘 #b2 顆 #yguardianmod:寶石 ,你可以選擇將它們加入牌組中。(至多使用 #b3 次)" + "击败精英敌人后, NL 你可以将1 张随机 guardianmod:宝石 加入牌组。" ] }, "Guardian:GemstoneGun": { 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 0000000000..43302986c6 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 0000000000..2eccf183a7 Binary files /dev/null and b/src/main/resources/hermitResources/images/tip/awakened_t2.png differ diff --git a/src/main/resources/hermitResources/localization/deu/CardStrings.json b/src/main/resources/hermitResources/localization/deu/CardStrings.json index 9bf423ba9e..b7b7ff8208 100644 --- a/src/main/resources/hermitResources/localization/deu/CardStrings.json +++ b/src/main/resources/hermitResources/localization/deu/CardStrings.json @@ -9,99 +9,97 @@ }, "hermit:Snapshot": { "NAME": "Schnappschuss", - "DESCRIPTION": "Füge !D! Schaden zu. hermit:Volltreffer: Kostet 0." + "DESCRIPTION": "Füge !D! Schaden zu. hermit:Volltreffer: Erhalte soviel Block, wie du ungeblockten Schaden zugefügt hast." }, "hermit:Desperado": { "NAME": "Desperado", - "DESCRIPTION": "Füge !D! Schaden zu. NL Erhalte !M! Gebrechlich." + "DESCRIPTION": "Füge !D! Schaden zu. NL Verdopple den Schaden dieser Karte und erhöhe ihre Kosten um 1." }, "hermit:Headshot": { "NAME": "Kopfschuss", - "DESCRIPTION": "Füge !D! Schaden zu. NL hermit:Dead_On: Fügt doppelten Schaden zu." + "DESCRIPTION": "Füge !D! Schaden zu. NL hermit:Volltreffer: Verdopple den zugefügten Schaden." }, "hermit:Quickdraw": { - "NAME": "Schnellzug", - "DESCRIPTION": "Füge !D! Schaden zu. NL Ziehe !M! Karten. NL Im nächsten Zug, ziehe 1 Karte weniger." + "NAME": "Ladehemmung", + "DESCRIPTION": "Füge !D! Schaden zu. NL Ziehe !M! Karten. NL Ziehe im nächsten Zug 1 Karte weniger." }, "hermit:WideOpen": { - "NAME": "Breit Offen", + "NAME": "Schießwütig", "DESCRIPTION": "Füge !D! Schaden zu. NL Wende !M! Verwundbar an." }, "hermit:Covet": { "NAME": "Begehrung", - "DESCRIPTION": "Erschöpfe eine Karte. Ziehe eine Karte. Wenn du ein Fluch erschöpfst, ziehe !M! mehr.", - "UPGRADE_DESCRIPTION": "Erschöpfe eine Karte. Ziehe eine Karte. Wenn du ein Fluch oder Status erschöpfst, ziehe !M! mehr." + "DESCRIPTION": "Wirf 1 Karte ab. Ziehe !M! Karte. NL Abgeworfene Flüche werden erschöpft.", + "UPGRADE_DESCRIPTION": "Wirf 1 Karte ab. Ziehe !M! Karten. NL Abgeworfene Flüche werden erschöpft." }, "hermit:HighCaliber": { - "NAME": "Großcaliber", - "DESCRIPTION": "Füge !D! Schaden zu. NL Mische ein *Schlag in den Abwurfstapel. NL Erschöpft.", - "UPGRADE_DESCRIPTION": "Füge !D! Schaden zu. NL Mische ein *Schlag+ in den Abwurfstapel. NL Erschöpft." + "NAME": "Hochkarätig", + "DESCRIPTION": "Füge !D! Schaden zu. NL Erhalte *Schlag+2. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Füge !D! Schaden zu. NL Erhalte *Schlag+3. NL Erschöpft." }, "hermit:BodyArmor": { "NAME": "Schutzweste", - "DESCRIPTION": "Erhalte !B! Block. NL Mische ein *Verteidigen in den Abwurfstapel. NL Erschöpft.", - "UPGRADE_DESCRIPTION": "Erhalte !B! Block. NL Mische ein *Verteidigen+ in den Abwurfstapel. NL Erschöpft." + "DESCRIPTION": "Wirf eine Karte ab. NL Erhalte !B! Block - zweimal, wenn ein nicht-Angriff abgeworfen wurde." }, "hermit:Snipe": { - "NAME": "Scharfschützen", - "DESCRIPTION": "hermit:Konzentriere dich. NL Erhalte !M! Stärke für diesen Zug." + "NAME": "Zielen", + "DESCRIPTION": "Dein in diesem Zug nächster ausgelöster hermit:Volltreffer Effekt wird zweimal ausgeführt. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "hermit:Konzentriere dich. NL Dein in diesem Zug nächster ausgelöster hermit:Volltreffer Effekt wird zweimal ausgeführt. NL Erschöpft." }, "hermit:CalledShot": { - "NAME": "Fangschuss", - "DESCRIPTION": "Füge Schaden gleich der Anzahl von Karten in der Hand zu. NL hermit:Volltreffer: NL Ziehe !M! Karten.", - "UPGRADE_DESCRIPTION": " NL (Fügt !D! Schaden zu.)" + "NAME": "Nachschuss", + "DESCRIPTION": "Füge !D! Schaden zu. NL Ziehe eine Karte, wenn die letzte im Zug gespielte Karte ein hermit:Volltreffer war.", + "UPGRADE_DESCRIPTION": "Behalten. NL Füge !D! Schaden zu. NL Ziehe eine Karte, wenn die letzte im Zug gespielte Karte ein hermit:Volltreffer war." }, "hermit:Dissolve": { "NAME": "Auflösen", - "DESCRIPTION": "Erhalte !M! Block für jede Karte in den Abwurfstapel. NL Mische 1 *Verfall in den Abwurfstapel.", - "UPGRADE_DESCRIPTION": " NL (Erhalte !B! Block.)" + "DESCRIPTION": "Erhalte !B! Block. NL Erhalte 2 expansioncontent:Verschwimmen. NL Erschöpft." }, "hermit:BlackWind": { "NAME": "Schwarzer Wind", - "DESCRIPTION": "Flüchtig. NL Füge Schaden gleich deinen fehlenden TP zu. NL Erschöpft.", + "DESCRIPTION": "Flüchtig. NL Füge Schaden in Höhe deiner fehlenden TP zu. NL Erschöpft.", "UPGRADE_DESCRIPTION": " NL (Fügt !D! Schaden zu.)" }, "hermit:Purgatory": { "NAME": "Fegefeuer", - "DESCRIPTION": "Flüchtig. NL Füge ALLEN Gegnern !D! Schaden zu.", - "UPGRADE_DESCRIPTION": "Füge ALLEN Gegnern !D! Schaden zu." + "DESCRIPTION": "Flüchtig. NL Füge ALLEN Gegnern !D! Schaden zu." }, "hermit:ShadowCloak": { "NAME": "Schattenmantel", - "DESCRIPTION": "Immer wenn du ein Fluch ziehst, erhalte !M! Block." + "DESCRIPTION": "Erhalte immer, wenn du einen Fluch ziehst oder *erschöpfst, !M! Block." }, "hermit:FatalDesire": { "NAME": "Todestrieb", - "DESCRIPTION": "Zu Beginn deines Zuges, ziehe 2 Karten und nimm eine *Verletzung auf die Hand.", - "UPGRADE_DESCRIPTION": "Angeboren. NL Zu Beginn deines Zuges, ziehe 2 Karten und nimm eine *Verletzung auf die Hand." + "DESCRIPTION": "Ziehe zu Beginn deines Zuges 2 Karten und nimm eine *Verletzung auf die Hand.", + "UPGRADE_DESCRIPTION": "Angeboren. NL Ziehe zu Beginn deines Zuges 2 Karten und nimm eine *Verletzung auf die Hand." }, "hermit:Gambit": { "NAME": "Gambit", - "DESCRIPTION": "Nimm !M! zufällige Angriffe aus dem Abwurfstapel auf die Hand. Erschöpft." + "DESCRIPTION": "Nimm !M! zufällige Angriffe aus dem Abwurfstapel auf die Hand. Sie kosten diesen Zug 1 weniger. NL Erschöpft." }, "hermit:Roughhouse": { - "NAME": "Rauferei", - "DESCRIPTION": "Füge !D! Schaden zu. hermit:Volltreffer\: NL Erhalte !B! Block." + "NAME": "Misshandeln", + "DESCRIPTION": "Füge !D! Schaden zu. hermit:Volltreffer: NL Erhalte !B! Block." }, "hermit:Malice": { "NAME": "Bosheit", - "DESCRIPTION": "Erschöpfe eine Karte. NL Füge !D! Schaden zu. NL Wenn du ein Fluch erschöpfst, füge es ALLEN Gegnern zu." + "DESCRIPTION": "Erschöpfe eine Karte. NL Füge !D! Schaden zu. NL Wurde ein Fluch erschöpft, werden ALLE Gegner getroffen." }, "hermit:Deadeye": { "NAME": "Adlerauge", - "DESCRIPTION": "Füge !D! Schaden zu. NL Erhalte !M! Stärke. NL Erschöpfe. NL hermit:Volltreffer: NL Erschöpft nicht." + "DESCRIPTION": "Füge !D! Schaden zu. NL hermit:Volltreffer: NL Erhalte !M! Stärke." }, "hermit:GhostlyPresence": { - "NAME": "Geisterhafte Präsenz", - "DESCRIPTION": "Erhalte !B! Block. NL hermit:Volltreffer\: NL Wende !M! Schwach auf ALLE Gegner an." + "NAME": "Geisterpräsenz", + "DESCRIPTION": "Erhalte !B! Block. NL hermit:Volltreffer: NL Wende !M! Schwach auf ALLE Gegner an." }, "hermit:Adapt": { - "NAME": "Anpassung", - "DESCRIPTION": "Am Ende deines Zuges kannst du bis zu 2 Karten erschöpfen. NL Erhalte !M! Block für jede." + "NAME": "Anpassen", + "DESCRIPTION": "Zu Beginn deines Zuges kannst du eine Karte erschöpfen um 8 Block zu erhalten." }, "hermit:Dive": { - "NAME": "Tauchen", - "DESCRIPTION": "Erhalte !B! Block. NL hermit:Volltreffer\: NL Erhalte !M! *Panzerrüstung." + "NAME": "Wegducken", + "DESCRIPTION": "Erhalte !B! Block. NL hermit:Volltreffer: NL Erhalte !M! expansioncontent:Panzerrüstung." }, "hermit:FlashPowder": { "NAME": "Blitzpulver", @@ -109,111 +107,113 @@ }, "hermit:Roulette": { "NAME": "Roulette", - "DESCRIPTION": "Füge einem zufälligen Gegner !D! Schaden zu. NL Wirf deine Hand ab und ziehe genauso viele Karten." + "DESCRIPTION": "Füge !D! Schaden zu. NL Wirf deine Hand ab und ziehe genauso viele Karten." }, "hermit:Midnight": { "NAME": "Mitternacht", - "DESCRIPTION": "Flüchtig. NL Erhalte !B! Block. NL Nimm ein *Drohendes *Verhängnis auf die Hand.", - "UPGRADE_DESCRIPTION": "Erhalte !B! Block. NL Nimm ein *Drohendes *Verhängnis auf die Hand." + "DESCRIPTION": "Erhalte !B! Block. NL Nimm das *Drohende *Unheil auf die Hand." }, "hermit:Glare": { - "NAME": "Starr", - "DESCRIPTION": "Wende !M! Schwach und Verwundbar an.", - "UPGRADE_DESCRIPTION": "Wende !M! Schwach, Verwundbar und !hermit:SecondMagic! hermit:Prügel an." + "NAME": "Starren", + "DESCRIPTION": "Wende !M! Schwach und !M! Verwundbar an.", + "UPGRADE_DESCRIPTION": "Behalten. NL Wende !M! Schwach und !M! Verwundbar an." }, "hermit:TakeCover": { - "NAME": "In Deckung", - "DESCRIPTION": "Nimm X *Verteidigen auf die Hand. NL Sie kosten diesen Kampf 0. NL Erschöpft.", - "UPGRADE_DESCRIPTION": "Nimm X *Verteidigen+ auf die Hand. NL Sie kosten diesen Kampf 0. NL Erschöpft." + "NAME": "In Deckung gehen", + "DESCRIPTION": "Nimm ein NL *Verteidigen, das 0 kostet, auf die Hand. NL *Verbessere es danach X Mal. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Nimm ein NL *Verteidigen+, das 0 kostet, auf die Hand. NL *Verbessere es danach X Mal. NL Erschöpft." }, "hermit:Misfire": { - "NAME": "Fehlzündung", - "DESCRIPTION": "Füge einem zufälligen Gegner !D! Schaden zu. NL Mische ein *Ungeschickt in den Nachziehstapel." + "NAME": "Rohrkrepierer", + "DESCRIPTION": "Füge !D! Schaden zu. NL bronze:Setze *Ungeschickt *ein." }, "hermit:SprayPray": { - "NAME": "Schusssalve", - "DESCRIPTION": "Füge 3 mal einem zufälligen Gegner !D! Schaden zu. NL Mische ein *Zweifel in den Nachziehstapel." + "NAME": "Dauerfeuer", + "DESCRIPTION": "Füge 3 Mal einem zufälligen Gegner !D! Schaden zu. NL bronze:Setze *Zweifel *ein." }, "hermit:Scavenge": { "NAME": "Erbeuten", - "DESCRIPTION": "Erhalte !M! *Panzerrüstung. NL hermit:Volltreffer: NL Erhalte !hermit:SecondMagic! Gold. NL Erschöpft." + "DESCRIPTION": "Erhalte !M! expansioncontent:Panzerrüstung. NL hermit:Volltreffer: NL Erhalte !hermit:SecondMagic! Gold. NL Erschöpft." }, "hermit:ImpendingDoom": { - "NAME": "Drohendes Verhängnis", - "DESCRIPTION": "Unspielbar. NL hermit:Volltreffer: NL Am Ende deines Zuges, füge 13 Schaden an ALLE zu." + "NAME": "Drohendes Unheil", + "DESCRIPTION": "Unspielbar. NL Ist diese Karte am Ende des Zuges in hermit:Volltreffer Position, fügt sie ALLEN 13 Schaden zu." }, "hermit:MementoCard": { "NAME": "Andenken", "DESCRIPTION": "Behalten. NL Wende !M! Verwundbar auf ALLE an." }, "hermit:Shortfuse": { - "NAME": "Kurze Zündschnurr", - "DESCRIPTION": "Füge !D! Schaden zu. NL Kostet 1 [E] weniger für jedes in diesen Zug gespielte *Schlag oder *Verteidigen." + "NAME": "Kurze Lunte", + "DESCRIPTION": "Füge !D! Schaden zu. NL Kostet diesen Zug [E] weniger pro gespielte Basis *Schlag oder *Verteidigen Karte in diesem Zug." }, "hermit:Grudge": { - "NAME": "Groll", - "DESCRIPTION": "Füge ALLEN Gegnern !D! Schaden zu. NL Fügt !M! mehr Schaden zu für jeden deiner *Flüche." + "NAME": "Unwesen", + "DESCRIPTION": "Füge ALLEN Gegnern !D! Schaden zu. NL Der Schaden wird für jeden deiner Flüche um !M! erhöht." }, "hermit:Spite": { "NAME": "Hass", - "DESCRIPTION": "Ziehe !M! *Flüche. NL Füge 2 mal !D! Schaden zu." + "DESCRIPTION": "Erschöpfe alle unspielbaren Handkarten. NL Erhalte !B! Block. NL Ziehe !M! Karten" }, "hermit:Manifest": { - "NAME": "Manifestation", - "DESCRIPTION": "Erhalte !B! Block. NL Ziehe !M! *Flüche." + "NAME": "Verkörperung", + "DESCRIPTION": "Erhalte !B! Block. NL Nimm *Verfall auf die Hand." }, "hermit:Feint": { "NAME": "Finte", "DESCRIPTION": "Erhalte !B! Block. NL Wende !M! hermit:Prügel auf ALLE Gegner an." }, "hermit:LowProfile": { - "NAME": "Flaches Profil", + "NAME": "Untertauchen", "DESCRIPTION": "Erhalte !B! Block. NL Erhalte !M! mehr Block für jeden deiner Debuffs." }, "hermit:Horror": { "NAME": "Horror", - "DESCRIPTION": "Wende !M! hermit:Prügel auf ALLE Gegner an. NL hermit:Prügel läuft in diesen Zug nicht ab." + "DESCRIPTION": "Wende !M! hermit:Prügel auf ALLE Gegner an. NL hermit:Prügel läuft in diesem Zug nicht ab." }, "hermit:NoHoldsBarred": { - "NAME": "Ohne Regeln", - "DESCRIPTION": "Füge !D! Schaden und wende !M! hermit:Prügel auf ALLE Gegner an. NL Erhalte 1 weniger [E] im nächsten Zug." + "NAME": "Ungezügelt", + "DESCRIPTION": "Füge ALLEN Gegnern !D! Schaden zu und wende !M! hermit:Prügel auf sie an. Verliere im nächsten Zug [E]." }, "hermit:Cheat": { "NAME": "Schummeln", - "DESCRIPTION": "Spiele eine der obersten !M! Karten deines Nachziehstapels. NL Wenn ein hermit:Volltreffer: So ist auch die gespielte Karte." + "DESCRIPTION": "Spiele eine der obersten !M! Karten des Nachziehstapels. NL hermit:Volltreffer: Aktiviere auch ihren hermit:Volltreffer Effekt." }, "hermit:Vantage": { - "NAME": "Aussichtspunkt", - "DESCRIPTION": "Erhalte !B! Block. NL hermit:Volltreffer: NL Verbessere !M! zufällige Karten in deiner Hand bis zum ende des Kampfes." + "NAME": "Ausspähen", + "DESCRIPTION": "Erhalte !B! Block. NL hermit:Volltreffer: NL Ziehe eine Karte und verbessere sie bis zum Ende des Kampfes.", + "UPGRADE_DESCRIPTION": "Erhalte !B! Block. NL hermit:Volltreffer: NL Ziehe !M! Karten und verbessere sie bis zum Ende des Kampfes." }, "hermit:Brawl": { - "NAME": "Schlägerei", - "DESCRIPTION": "Wende immer zu Beginn deines Zuges auf ALLE Gegner !M! hermit:Prügel an." + "NAME": "Gewaltbereit", + "DESCRIPTION": "Wende zu Beginn jedes Zuges !M! hermit:Prügel auf ALLE Gegner an." }, "hermit:Combo": { - "NAME": "Kombo", - "DESCRIPTION": "Immer wenn du ein hermit:Volltreffer erzielst, nimm eine zufällige Karte mit hermit:Volltreffer auf die Hand.", - "UPGRADE_DESCRIPTION": "Put the first !M! hermit:Dead_On cards triggered each turn back into your hand." + "NAME": "Combo", + "DESCRIPTION": "Nimm in jedem Zug die erste Karte, NL die einen hermit:Volltreffer ausgelöst hat, wieder auf die Hand.", + "UPGRADE_DESCRIPTION": "Nimm in jedem Zug die ersten !M! Karten, NL die einen hermit:Volltreffer ausgelöst haben, wieder auf die Hand." }, "hermit:BigShot": { - "NAME": "Rauchendes Rohr", - "DESCRIPTION": "Immer wenn du ein hermit:Volltreffer erzielst, fügt dein nächster Angriff !M! mehr Schaden zu." + "NAME": "Rauchender Colt", + "DESCRIPTION": "Immer wenn du ein hermit:Volltreffer erzielst, erhältst du !M! *Elan." }, "hermit:OverwhelmingPower": { - "NAME": "Überwältigende Macht", - "DESCRIPTION": "Erhalte [E] [E] [E]. NL Ziehe !hermit:SecondMagic! Karten. NL Immer wenn du dein Zug mit 0 Energie beendest, verliere !M! TP." + "NAME": "Ausufernde Macht", + "DESCRIPTION": "Erhalte [E] [E] [E]. NL Ziehe !hermit:SecondMagic! Karten. NL Immer wenn du deinen Zug mit 0 Energie beendest, verliere NL !M! TP." }, "hermit:Maintenance": { "NAME": "Wartung", - "DESCRIPTION": "Verbessere alle *Schläge und *Verteidigungen für diesen Kampf. NL Dies kann sie beliebig oft verbessern." + "DESCRIPTION": "Basis *Schläge fügen diesen Kampf !M! mehr Schaden zu. Erhalte !hermit:SecondMagic! *Geschicklichkeit. NL Erhöhe die Kosten dieser Karte um 1." }, "hermit:EternalForm": { "NAME": "Ewige Form", - "DESCRIPTION": "Die ersten !M! Karten jeden Zug kosten 0. NL Erhalte keine [E] am Beginn deiner Züge." + "DESCRIPTION": "Flüchtig. NL Die ersten 4 in einem Zug gezogenen, spielbaren Karten kosten in dem Zug 1 weniger.", + "UPGRADE_DESCRIPTION": "Die ersten 4 in einem Zug gezogenen, spielbaren Karten kosten in dem Zug 1 weniger." }, "hermit:FullyLoaded": { "NAME": "Vollgeladen", - "DESCRIPTION": "Ziehe ALLE deine *Schläge and *Verteidigunen. NL Erschöpft." + "DESCRIPTION": "Nimm alle Basis *Schlag und *Verteidigen Karten vom Nachziehstapel auf die Hand. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Behalten. NL Nimm alle Basis *Schlag und *Verteidigen Karten vom Nachziehstapel auf die Hand. Erschöpft." }, "hermit:Gestalt": { "NAME": "Gestalt", @@ -221,111 +221,108 @@ }, "hermit:RoundhouseKick": { "NAME": "Roundhouse Kick", - "DESCRIPTION": "Füge ALLEN Gegnern !D! Schaden zu. NL *Betäube jeden der angreifen will. NL Erschöpft." + "DESCRIPTION": "Füge ALLEN Gegnern !D! Schaden zu. NL hermit:Betäube jeden, der nicht angreifen will. NL Erschöpft." }, "hermit:CursedWeapon": { "NAME": "Verfluchte Waffe", - "DESCRIPTION": "Verliere !M! TP. NL Füge !D! Schaden zu. NL Erhöhe den Schaden dieser Karte permanent um 3. NL Erschöpft." + "DESCRIPTION": "Verliere !M! TP. Füge !D! Schaden zu. NL Alle *Verfluchten *Waffen fügen permanent !hermit:SecondMagic! mehr Schaden zu. Erschöpft." }, "hermit:Enervate": { "NAME": "Entziehen", "DESCRIPTION": "Füge !D! Schaden zu. NL hermit:Volltreffer: NL Erhalte [E] und ziehe eine Karte." }, "hermit:Ricochet": { - "NAME": "Ricochet", - "DESCRIPTION": "Füge !D! Schaden zu. Wiederhole auf einem zufälligen Gegner für jedes hermit:Volltreffer in diesem Zug.", - "EXTENDED_DESCRIPTION": [" NL (Wiederholt !M! ", "mal.)","male.)"] + "NAME": "Querschläger", + "DESCRIPTION": "Füge !D! Schaden zu. Wiederhole das auf zufällige Gegner für jeden hermit:Volltreffer in diesem Zug.", + "EXTENDED_DESCRIPTION": [" NL (Wiederholt !M! ", "Mal.)","Mal.)"] }, "hermit:TrackingShot": { - "NAME": "Spurschuss", - "DESCRIPTION": "hermit:Konzentriere dich. NL Füge !D! Schaden zu." + "NAME": "Doppelschuss", + "DESCRIPTION": "hermit:Konzentriere dich. NL Füge 2 Mal !D! Schaden zu." }, "hermit:LoneWolf": { "NAME": "Einsamer Wolf", - "DESCRIPTION": "Wähle eine Karte. NL Es kostet 0 in diesem Kampf. NL Wirf den rest deiner Hand ab. NL Erschöpft." + "DESCRIPTION": "Wähle eine Handkarte. Sie kostet diesen Zug 0. NL Wirf alle anderen Handkarten ab." }, "hermit:HighNoon": { - "NAME": "High Noon", - "DESCRIPTION": "Immer wenn du ein *Schlag oder *Verteidigen spielst, ziehe eine Karte." + "NAME": "Duell", + "DESCRIPTION": "Ziehe immer, wenn du einen Basis *Schlag oder ein *Verteidigen spielst, eine Karte." }, "hermit:Reprieve": { - "NAME": "Auszeit", - "DESCRIPTION": "Erschöpfe eine beliebige Zahl *Flüche aus dem Nachziehstapel. NL Heile 4 TP für jeden. NL Erschöpft.", - "EXTENDED_DESCRIPTION": [ - "Es gibt keine Flüche in meinem Nachziehstapel." - ] + "NAME": "Gnadenfrist", + "DESCRIPTION": "Flüchtig. NL Heile !M! TP. NL Erschöpft." }, "hermit:TakeAim": { - "NAME": "Ins Visier", + "NAME": "Anvisieren", "DESCRIPTION": "hermit:Konzentriere dich immer zu Beginn deines Zuges.", "UPGRADE_DESCRIPTION": "hermit:Konzentriere dich. NL hermit:Konzentriere dich immer zu Beginn deines Zuges." }, "hermit:Magnum": { "NAME": "Magnum", - "DESCRIPTION": "Wirf 6 Karten ab. NL Für jede, füge !D! Schaden zu." + "DESCRIPTION": "Wirf 6 Karten ab. NL Füge pro abgeworfener Karte !D! Schaden zu." }, "hermit:Determination": { "NAME": "Entschlossenheit", - "DESCRIPTION": "Immer wenn ein Debuff auf dich angewandt ist, erhalte 1 Stärke.", - "UPGRADE_DESCRIPTION": "Angeboren. NL Immer wenn ein Debuff auf dich angewandt ist, erhalte 1 Stärke." + "DESCRIPTION": "Erhalte immer, wenn ein Debuff auf dich angewendet wird, 1 Stärke.", + "UPGRADE_DESCRIPTION": "Angeboren. NL Erhalte immer, wenn ein Debuff auf dich angewendet wird, 1 Stärke." }, "hermit:Showdown": { "NAME": "Showdown", - "DESCRIPTION": "Behalten. NL Füge !D! Schaden zu. NL Spiele alle *Schläge in deiner Hand auf zufälligen Gegnern." + "DESCRIPTION": "Füge !D! Schaden zu. NL Spiele alle Basis *Schläge in deiner Hand aus." }, "hermit:LuckOfTheDraw": { "NAME": "Glückszug", - "DESCRIPTION": "Ziehe Karten bis du ein Wert von !M! [E] in Karten erreicht hast." + "DESCRIPTION": "Ziehe Karten, bis die Summe der Kosten der gezogenen Karten !M! erreicht hat." }, "hermit:Coalescence": { "NAME": "Koaleszenz", - "DESCRIPTION": "Erhalte !M! Geschicklichkeit für diesen Zug." + "DESCRIPTION": "Erhalte !B! Block. NL Behalte in diesem Zug bis zu !M! Karten." }, "hermit:PistolWhip": { - "NAME": "Pistolenpeitsche", + "NAME": "Pistolenprügel", "DESCRIPTION": "Füge !D! Schaden zu. NL Wende !M! hermit:Prügel an." }, "hermit:DeadMansHand": { "NAME": "Totenhand", - "DESCRIPTION": "Wirf deine Hand ab. Nimm die !M! seltensten Karten aus deinem Nachziehstapel auf die Hand." + "DESCRIPTION": "Wirf deine Hand ab. NL Nimm die !M! seltensten Karten aus dem Nachziehstapel auf die Hand." }, "hermit:DeadOrAlive": { "NAME": "Tot oder Lebendig", - "DESCRIPTION": "Füge X mal !D! Schaden zu. NL Falls tödlich, erhälst du hermit:Kopfgeld. NL Erschöpft." + "DESCRIPTION": "Füge X Mal !D! Schaden zu. NL Falls tödlich, erhältst du hermit:Kopfgeld. NL Erschöpft." }, "hermit:GoldenBullet": { - "NAME": "Goldene Kugel", + "NAME": "Goldener Schuss", "DESCRIPTION": "Füge !D! Schaden zu. NL Falls tödlich, kostet diese Karte permanent 1 weniger. NL Erschöpft." }, "hermit:HoleUp": { - "NAME": "Verschanzen", + "NAME": "Verkriechen", "DESCRIPTION": "Erhalte !B! Block. NL Erhalte !M! Schwach." }, "hermit:ItchyTrigger": { - "NAME": "Schussreiz", - "DESCRIPTION": "Füge !D! Schaden zu. NL hermit:Volltreffer: Eine zufällige Karte in deiner Hand kostet 0 für diesen Zug." + "NAME": "Triggerdisziplin", + "DESCRIPTION": "Füge !D! Schaden zu. NL hermit:Volltreffer: Eine zufällige Handkarte kostet diesen Zug 0." }, "hermit:EyeOfTheStorm": { "NAME": "Auge des Sturms", - "DESCRIPTION": "Erhalte Energie bis zu deinen Maximum. NL Erschöpft.", - "UPGRADE_DESCRIPTION": "Ziehe eine Karte. NL hermit:Volltreffer: NL Erhalte Energie bis zu deinen Maximum. NL Erschöpft." + "DESCRIPTION": "hermit:Konzentriere dich. NL Erhalte Energie bis zu deinem Maximum. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "hermit:Konzentriere dich. NL Erhalte Energie bis zu deinem Maximum. NL Erschöpft." }, "hermit:FinalCanter": { - "NAME": "Letzter Kanter", - "DESCRIPTION": "Behalten. NL Füge für jedes Fluch in der Hand !D! Schaden zu. NL Erschöpft.", + "NAME": "Letzter Ritt", + "DESCRIPTION": "Behalten. NL Füge für jeden Fluch auf der Hand !D! Schaden zu. NL Erschöpft.", "UPGRADE_DESCRIPTION": " NL (Du hast !M! Fluch.)", "EXTENDED_DESCRIPTION": [" NL (Du hast !M! Flüche.)"] }, "hermit:HeroicBravado": { - "NAME": "Heldenhafte Tapferkeit", - "DESCRIPTION": "Flüchtig. NL Erhalte 1 hermit:Robust. NL Diese Karte kostet für den Rest des Kampfes 1 mehr." + "NAME": "Revolverheld", + "DESCRIPTION": "Flüchtig. NL Erhalte 1 hermit:Robust. NL Erhöhe die Kosten dieser Karte um !M!." }, "hermit:FromBeyond": { "NAME": "Aus dem Jenseits", - "DESCRIPTION": "Für jede erschöpfte Karte, verliert ein zufälliger gegner !M! TP." + "DESCRIPTION": "Für jede Karte im Erschöpfungsstapel verliert ein zufälliger gegner !M! TP." }, "hermit:Virtue": { "NAME": "Tugend", - "DESCRIPTION": "Verringere alle deine Debuffs um !M!." + "DESCRIPTION": "Behalten. NL Reduziere deine Debuffs um !M!." } } diff --git a/src/main/resources/hermitResources/localization/deu/CharacterStrings.json b/src/main/resources/hermitResources/localization/deu/CharacterStrings.json index ffb9283e58..70780e878d 100644 --- a/src/main/resources/hermitResources/localization/deu/CharacterStrings.json +++ b/src/main/resources/hermitResources/localization/deu/CharacterStrings.json @@ -5,10 +5,11 @@ "der Einsiedler" ], "TEXT": [ - "Ein einsamer untoter Schütze aus einem fernem Ort. NL Heimgesucht von dem unausweichlichem Geist der Vergangenheit.", - "NL Du reichst für deinen Holster...", - "Auf einer unbeleuchteten Straße triffst du auf ein paar vermummte Gestalten, die gerade mitten in irgendeinem dunklen Ritual sind. Als du näher kommst, wenden sie sich dir in gespenstischem Gleichklang zu. Der Größte von ihnen entblößt Fangzähne und streckt eine lange, blasse Hand nach dir aus. NL ~\"Schließ~ ~dich~ ~uns~ ~an~ ~Leerer,~ ~und~ ~spüre~ ~die~ ~Wärme~ ~des~ ~Spire.\"~", - "#y~VERZWEIFLUNG.~ NL NL Der letzte Gegner sinkt zum Boden, eine rauchende Wunde in Hand. Die Körper haben kaum Zeit kalt zu werden als du sie plünderst. NL NL #bStoff. #rPlatten. #yGold. NL NL Wolken wirbeln sich hoch über dir, ein schlechtes Zeichen. Du hast dich zu lange in einem Ort aufgehalten. Bald kommen sie dich holen. NL NL Wieder musst du fliehen, #raber #rwohin?" + "Ein einsamer untoter Schütze aus einem fernem Ort. NL Heimgesucht von dem unausweichlichen Geist der Vergangenheit.", + "NL Du greifst nach deinem Halfter...", + "Auf einer unbeleuchteten Straße triffst du auf ein paar vermummte Gestalten, die gerade mitten in irgendeinem dunklen Ritual sind. Als du näher kommst, wenden sie sich dir in gespenstischem Gleichklang zu. Der Größte von ihnen entblößt Fangzähne und streckt eine lange, blasse Hand nach dir aus. NL ~„Schließ~ ~dich~ ~uns~ ~an,~ ~Leerer,~ ~und~ ~spüre~ ~die~ ~Wärme~ ~des~ ~Spire.“~", + "#y~VERZWEIFLUNG.~ NL NL Der letzte Gegner sinkt zum Boden, greifend auf eine aufklaffende rauchende Wunde. Die Körper haben kaum Zeit kalt zu werden als du sie plünderst. NL NL #bStoff. #rPlatten. #yGold. NL NL Wolken wirbeln sich hoch über dir - ein böses Omen. Du hast dich zu lange an einem Ort aufgehalten. Bald kommen sie dich holen. NL NL Wieder musst du fliehen, #raber #rwohin?", + "Nächste Karte" ] } } \ No newline at end of file diff --git a/src/main/resources/hermitResources/localization/deu/KeywordStrings.json b/src/main/resources/hermitResources/localization/deu/KeywordStrings.json index 0e75c938f0..beef3aa8a5 100644 --- a/src/main/resources/hermitResources/localization/deu/KeywordStrings.json +++ b/src/main/resources/hermitResources/localization/deu/KeywordStrings.json @@ -3,9 +3,13 @@ "PROPER_NAME": "Volltreffer", "NAMES": [ "Volltreffer", - "volltreffer" + "volltreffer", + "Dead On", + "Dead_On", + "dead_on", + "deadon" ], - "DESCRIPTION": "Diese Karte hat ein zusätzliches Effekt in der Mitte deiner Hand." + "DESCRIPTION": "Diese Karte hat einen zusätzlichen Effekt wenn sie sich beim Ausspielen in der Mitte deiner Hand befindet." }, { "PROPER_NAME": "Konzentration", @@ -14,36 +18,52 @@ "konzentration", "Konzentriere", "konzentriere", - "Konzentriert", - "konzentriert" + "Konzentriert", + "konzentriert", + "Concentrate", + "concentrate", + "concentrated", + "Concentrated" ], - "DESCRIPTION": "Wenn konzentriert, erzielt deine nächste #yVolltreffer Karte ihren Effekt unabhängig von Position. Läuft am ende des Zuges ab." + "DESCRIPTION": "Wenn du konzentriert bist, erzielt deine nächste #yVolltreffer Karte ihren Effekt unabhängig von Position. Läuft am ende des Zuges ab." }, { "ID": "bruise", "PROPER_NAME": "Prügel", "NAMES": [ "Prügel", - "prügel" + "prügel", + "bruise", + "bruised" ], - "DESCRIPTION": "Ziele mit Prügel nehmen mehr Angriffschaden. Mit jedem Treffer wird es um #b1 reduziert. Läuft am ende des Zuges ab." -}, + "DESCRIPTION": "Ziele mit Prügel nehmen mehr Angriffsschaden. Läuft am ende des Zuges ab." + }, { "ID": "rugged", "PROPER_NAME": "Robust", "NAMES": [ "Robust", - "robust" - ], - "DESCRIPTION": "Reduziert den nächsten Angriffschadentreffer zu #b1." -}, + "robust", + "rugged" + ], + "DESCRIPTION": "Reduziert den nächsten erlitennen TP-Verlust durch Angriffsschaden zu #b2 [REMOVE_SPACE]." + }, { "PROPER_NAME": "Kopfgeld", "NAMES": [ "Kopfgeld", - "kopfgeld" + "kopfgeld", + "bounty" + ], + "DESCRIPTION": "Normaler Gegner: #b15 Gold. NL Elitegegner: #b35 Gold. NL Boss: #b75 Gold." + }, + { + "PROPER_NAME": "Betäuben", + "NAMES": [ + "betäubt", + "betäube", + "betäuben" ], - "DESCRIPTION": "Normaler Gegner: #b15 Gold. Elite Gegner: #b35 Gold. Boss: #b75 Gold." -} - + "DESCRIPTION": "Betäubte Wesen übergehen ihren nächsten Zug." + } ] \ No newline at end of file diff --git a/src/main/resources/hermitResources/localization/deu/PotionStrings.json b/src/main/resources/hermitResources/localization/deu/PotionStrings.json index d886ceb008..ae1dd54356 100644 --- a/src/main/resources/hermitResources/localization/deu/PotionStrings.json +++ b/src/main/resources/hermitResources/localization/deu/PotionStrings.json @@ -1,7 +1,7 @@ { "hermit:Tonic": { "NAME": "Tonikum", - "DESCRIPTIONS": ["Erhalte #b", " #yRobust."] + "DESCRIPTIONS": ["Erhalte #b", " #yRobust [REMOVE_SPACE]."] }, "hermit:BlackBile": { "NAME": "Schwarze Galle", @@ -9,6 +9,6 @@ }, "hermit:Eclipse": { "NAME": "Flüssige Leere", - "DESCRIPTIONS": ["Nimm #b", " #yerschöpfte Karte in deine Hand auf. Sie kostet für diesen Zug #b0."," #yerschöpfte Karten in deine Hand auf. Sie kosten für diesen Zug #b0."] + "DESCRIPTIONS": ["Nimm #b", " #yerschöpfte Karte auf die Hand. Sie kostet diesen Zug #b0 [REMOVE_SPACE]."," #yerschöpfte Karten auf die Hand. Sie kosten diesen Zug #b0 [REMOVE_SPACE]."] } } \ No newline at end of file diff --git a/src/main/resources/hermitResources/localization/deu/PowerStrings.json b/src/main/resources/hermitResources/localization/deu/PowerStrings.json index 209daa8a6c..401a515683 100644 --- a/src/main/resources/hermitResources/localization/deu/PowerStrings.json +++ b/src/main/resources/hermitResources/localization/deu/PowerStrings.json @@ -4,75 +4,91 @@ "DESCRIPTIONS": ["Deine nächste #yVolltreffer Karte in diesem Zug erzielt ihren Effekt unabhängig von Position."] }, "hermit:HighNoonPower": { - "NAME": "High Noon", - "DESCRIPTIONS": ["Immer wenn du ein #ySchlag oder #yVerteidigen spielst, ziehe #b", " Karte.", " Karten."] + "NAME": "Duell", + "DESCRIPTIONS": ["Ziehe immer, wenn du einen Basis #ySchlag oder ein #yVerteidigen spielst, #b", " Karte.", " Karten."] }, "hermit:FatalDesirePower": { "NAME": "Todestrieb", - "DESCRIPTIONS": ["Zu Beginn deines Zuges, ziehe #b", " Karten und nimm #b", " Verletzung auf die Hand.", " Verletzungen auf die Hand."] + "DESCRIPTIONS": ["Ziehe zu Beginn deines Zuges #b", " Karten und nimm #b", " Verletzung auf die Hand.", " Verletzungen auf die Hand."] }, "hermit:ShadowCloakPower": { "NAME": "Schattenmantel", - "DESCRIPTIONS": ["Immer wenn du ein Fluch ziehst, erhalte #b", " Block."] + "DESCRIPTIONS": ["Erhalte immer, wenn du einen #rFluch ziehst oder #yerschöpfst [REMOVE_SPACE], #b", " Block."] }, "hermit:TakeAimPower": { - "NAME": "Ins Visier", + "NAME": "Anvisieren", "DESCRIPTIONS": ["#yKonzentriere dich immer zu Beginn deines Zuges."] }, "hermit:AdaptPower": { "NAME": "Anpassen", - "DESCRIPTIONS": ["Am Ende deines Zuges kannst du bis zu 2 Karten erschöpfen. Erhalte #b", " Block für jede."] + "DESCRIPTIONS": ["Zu Beginn deines Zuges kannst du bis zu #b", " Karte #yerschöpfen um #b8 Block zu erhalten.", " Karten #yerschöpfen. Erhalte #b8 Block für jede."] }, "hermit:Bruise": { "NAME": "Prügel", - "DESCRIPTIONS": ["Für diesen Zug, nimmt #b", " mehr Angriffschaden. Wird mit jedem Treffer um 1 reduziert."] + "DESCRIPTIONS": ["Nimmt in diesem Zug #b", " mehr Angriffsschaden"] }, "hermit:HorrorPower": { "NAME": "Horror", "DESCRIPTIONS": ["Prügel läuft für #b", " Zug nicht ab.", " Züge nicht ab."] }, "hermit:ComboPower": { - "NAME": "Kombo", - "DESCRIPTIONS": ["Immer wenn du ein #yVolltreffer erzielst, nimm #b", " zufällige Karte mit #yVolltreffer auf die Hand.", " zufällige Karten mit #yVolltreffer auf die Hand"] + "NAME": "Combo", + "DESCRIPTIONS": ["Nimm die #b", " nächste Karte, die einen #yVolltreffer auslöst, wieder auf die Hand.", " nächsten Karten, die einen #yVolltreffer auslösen, wieder auf die Hand."] }, "hermit:BigShotPower": { - "NAME": "Rauchendes Rohr", - "DESCRIPTIONS": ["Immer wenn du ein #yVolltreffer erzielst, fügt dein nächster Angriff #b", " mehr Schaden zu."] + "NAME": "Rauchender Colt", + "DESCRIPTIONS": ["Immer wenn du ein #yVolltreffer erzielst, erhältst du #b", " #yElan [REMOVE_SPACE]."] }, "hermit:BrawlPower": { - "NAME": "Schlägerei", - "DESCRIPTIONS": ["Wende immer zu Beginn deines Zuges auf ALLE Gegner #b", " #yPrügel an."] + "NAME": "Gewaltbereit", + "DESCRIPTIONS": ["Wende zu Beginn jedes Zuges #b", " #yPrügel auf ALLE Gegner an."] }, "hermit:Rugged": { "NAME": "Robust", - "DESCRIPTIONS": ["Der ungeblockte Angriffschaden von ", " mehr Treffern wird zu #b1 reduziert.", " mehr Treffer wird zu #b1 reduziert."] + "DESCRIPTIONS": ["TP-Verlust durch ungeblockten Angriffsschaden wird noch ", " Mal zu #b2 reduziert.", " beim nächsten Mal zu #b2 reduziert."] }, "hermit:EternalPower": { - "NAME": "Ewige Macht", - "DESCRIPTIONS": ["Du kannst #b", " Karte mehr in diesen Zug umsonst spielen.", " mehr Karten in diesen Zug umsonst spielen", "Du kannst keine Karten mehr in diesen Zug umsonst spielen."] + "NAME": "Ewige Form", + "DESCRIPTIONS": ["Die Kosten der ersten #b4 zu Beginn des Zuges gezogenen, spielbaren Karten werden diesen Zug um #b", " reduziert."] }, "hermit:OverwhelmingPowerPower": { - "NAME": "Überwältigende Macht", - "DESCRIPTIONS": ["Verliere #b"," TP wenn du dein Zug mit 0 Energie beendest."] + "NAME": "Ausgeuferte Macht", + "DESCRIPTIONS": ["Verliere #b"," TP wenn du deinen Zug mit #b0 Energie beendest."] }, "hermit:Bounty": { "NAME": "Kopfgeld", - "DESCRIPTIONS": ["Derzeitiges Kopfgeld: "] + "DESCRIPTIONS": ["Derzeitiges Kopfgeld: #b"] }, "hermit:Drained": { "NAME": "Ausgelaugt", - "DESCRIPTIONS": ["Erhalte #b", " weniger Energie im nächsten Zug."] + "DESCRIPTIONS": ["Erhalte #b", " weniger [E] im nächsten Zug."] }, "hermit:DeterminationPower": { "NAME": "Entschlossenheit", - "DESCRIPTIONS": ["Immer wenn ein Debuff auf dich angewandt ist, erhalte #b", " #yStärke."] + "DESCRIPTIONS": ["Erhalte immer, wenn ein Debuff auf dich angewendet wird, #b", " #yStärke."] }, "hermit:RyeStalkPower": { - "NAME": "Rye Stalk", - "DESCRIPTIONS": ["Nicht benutzt, lol."] + "NAME": "Roggenhalm", + "DESCRIPTIONS": ["#yBehalte am Ende des Zuges eine beliebige Anzahl an Karten."] }, "hermit:PetGhostPower": { "NAME": "Haustiergeist", - "DESCRIPTIONS": ["Du kannst nicht sterben. Stirb am Ende von", " dem nächsten Zug.", " diesem Zug."] + "DESCRIPTIONS": ["Du kannst nicht sterben. Stirb nach", " Zügen.", " diesem Zug."] +}, +"hermit:SnipePower": { + "NAME": "Zielen", + "DESCRIPTIONS": ["Der #yVolltreffer Effekt wird für die #b", " nächste Karte zweimal ausgelöst.", " nächsten Karten zweimal ausgelöst."] +}, +"hermit:CoalescencePower": { + "NAME": "Koaleszenz", + "DESCRIPTIONS": ["#Behalte am ende des Zuges bis zu #b", " Karte.", " Karten."] +}, +"hermit:ReprievePower": { + "NAME": "Gnadenfrist", + "DESCRIPTIONS": ["Erhalte #b", " zusätzlichen Zug nach diesem Zug.", " zusätzliche Züge nach diesem Zug."] +}, +"hermit:MaintenanceStrikePower": { + "NAME": "Wartung", + "DESCRIPTIONS": ["Deine Basis #ySchläge fügen #b", " mehr Schaden zu."] } } \ No newline at end of file diff --git a/src/main/resources/hermitResources/localization/deu/RelicStrings.json b/src/main/resources/hermitResources/localization/deu/RelicStrings.json index fd31f79f92..628474f96d 100644 --- a/src/main/resources/hermitResources/localization/deu/RelicStrings.json +++ b/src/main/resources/hermitResources/localization/deu/RelicStrings.json @@ -1,74 +1,113 @@ { "hermit:Momento": { "NAME": "Altes Medaillon", - "FLAVOR": "Ein verblasstes Bild ist drin.", + "FLAVOR": "Ein verblasstes Bild ist drinnen.", "DESCRIPTIONS": [ "Nimm zu Beginn jedes Kampfes ein #yAndenken auf deine Hand." ] }, "hermit:RyeStalk": { "NAME": "Roggenhalm", - "FLAVOR": "Immer noch in tadellosem Zustand, obwohl es so lang gekaut worden ist.", + "FLAVOR": "Immer noch in tadellosem Zustand, obwohl so lang daran gekaut wurde.", "DESCRIPTIONS": [ - "#yhermit:Prügel wird nicht mehr mit jeden Treffer verringert." + "Jedes Mal wenn du TP während der gegnerischen Züge verlierst, ziehe #b1 Karte." ] }, "hermit:BartenderGlass": { "NAME": "Schnapsglas", "FLAVOR": "Jede Flüssigkeit, die sich darin befindet, verwandelt sich in etwas anderes.", "DESCRIPTIONS": [ - "Die ersten #b2 male, dass du ein Trank im Kampf benutzst, erhalte ein zufälliges Trank. Du kannst nur #b2 Tränke in jedem Kampf benutzen.", - "Du kannst keine Tränke mehr in diesen Kampf benutzen." + "Die ersten #b", + "Du kannst in diesem Kampf keine Tränke mehr benutzen.", + " Male, bei denen ein Trank im Kampf benutzt wird, erhältst du einen zufälligen Trank. Du kannst maximal #b", + " Tränke pro Kampf benutzen." ] }, "hermit:Horseshoe": { "NAME": "Hufeisen", "FLAVOR": "Ein Glücksbringer. Jemand wird es sicherlich vermissen.", "DESCRIPTIONS": [ - "Immer wenn du #ySchwach, #yGebrechlich oder #yVerwundbar erhälst, erhalte #b1 weniger." + "Immer wenn du #ySchwach, #yGebrechlich oder #yVerwundbar erhältst, erhältst du stattdessen #b1 weniger davon." ] }, "hermit:Spyglass": { "NAME": "Fernrohr", "FLAVOR": "Eigentum von Kestin Highfin.", "DESCRIPTIONS": [ - "Immer wenn du dein Zug #yhermit:konzentriert endest, erhalte [E] im nächsten Zug." + "Immer wenn du deinen Zug #yhermit:konzentriert beendest, erhalte [E] im nächsten Zug." ] }, "hermit:RedScarf": { "NAME": "Roter Schal", - "FLAVOR": "Es ist kuschelig und warm.", + "FLAVOR": "Er ist kuschelig und warm.", "DESCRIPTIONS": [ - "Wirf zu beginn jedes Kampfes, bis zu #b7 Karten aus dem Nachziehstapel ab." + "Immer wenn du einen NEUEN Debuff auf einen Gegner anwendest, erhalte #b", + " #yBlock [REMOVE_SPACE]." ] }, "hermit:DentedPlate": { - "NAME": "Verbeulte Platte", + "NAME": "Verbeulter Brustpanzer", "FLAVOR": "Es stecken immer noch ein paar Kugeln darin.", "DESCRIPTIONS": [ - "Wenn deine TP unter oder genau #b50% sind, erhalte [E] und ziehe #b1 Karte in deinem Zug." + "Wenn deine TP zu Beginn des Zuges bei #b50% der max. TP under darunter sind, ziehe #b1 Karte erhalte [E]." ] }, "hermit:PetGhost": { "NAME": "Haustiergeist", "FLAVOR": "Armer Kerl.", "DESCRIPTIONS": [ - "Wenn du sterben würdest, überlebe mit #b1 TP statdessen. Du stirbst am Ende deines nächsten Zuges und kannst bis dahin nicht sterben." + "Verhindere den ersten tödlichen TP-Verlust in jedem Kampf." ] }, "hermit:CharredGlove": { "NAME": "Verkohlter Handschuh", "FLAVOR": "In Teilen des Handschus glüht immer noch unheimliche Asche.", "DESCRIPTIONS": [ - "Immer wenn du ein #yFluch ziehst, fügt dein nächster Angriff #b3 mehr Schaden zu." + "Erhalte immer, wenn du einen #rFluch ziehst, #b", + " #yElan [REMOVE_SPACE]." ] }, "hermit:ClaspedLocket": { - "NAME": "Zuklapptes Medaillon", - "FLAVOR": "Es öffnet nicht mehr.", + "NAME": "Zugeklapptes Medaillon", + "FLAVOR": "Es kann nicht mehr geöffnet werden.", "DESCRIPTIONS": [ - "Ersetzt #yAltes #yMedaillon. Nimm beim Aufheben #b3 #yAndenken in dein Deck auf.", - "Nie wieder..." + "Ersetzt das #yAlte #yMedaillon [REMOVE_SPACE]. Wenn zum ersten Mal im Zug ein #rFluch gezogen wird, #yerschöpfe ihn und ziehe #b", + "Nie wieder...", + " Karten. Nimm beim Aufheben #b", + " #rVerletzungen in dein Deck auf." + ] + }, + "hermit:StraightRazor": { + "NAME": "Rasiermesser", + "FLAVOR": "Für eine wirklich glatte Rasur...", + "DESCRIPTIONS": [ + "Immer wenn du eine Karte aus deinem Deck entfernst oder #ytransformierst [REMOVE_SPACE], heile #b", + " TP." + ] + }, + "hermit:BrassTacks": { + "NAME": "Messingzwecken", + "FLAVOR": "Der Glanz dieser Zwecken scheint niemals zu verblassen.", + "DESCRIPTIONS": [ + "Erhalte am Ende jedes Zuges #b", + " #yBlock [REMOVE_SPACE]." + ] + }, + "hermit:BlackPowder": { + "NAME": "Schwarzpulver", + "FLAVOR": "Mit Vorsicht zu handhaben.", + "DESCRIPTIONS": [ + "Immer wenn du einen #yhermit:Volltreffer Effekt aktivierst, füge ALLEN Gegnern #b", + " Schaden zu." + ] + }, + "hermit:BloodyTooth": { + "NAME": "Abgebrochener Zahn", + "FLAVOR": "Sieht zu groß aus, um menschlichen Ursprungs zu sein...", + "DESCRIPTIONS": [ + "Immer wenn du einen Elitekampf gewinnst, heile #b", + " TP und erhalte #b", + " #yGold [REMOVE_SPACE]." ] } } \ No newline at end of file diff --git a/src/main/resources/hermitResources/localization/deu/TutorialStrings.json b/src/main/resources/hermitResources/localization/deu/TutorialStrings.json index c0f6eacf9c..750406e734 100644 --- a/src/main/resources/hermitResources/localization/deu/TutorialStrings.json +++ b/src/main/resources/hermitResources/localization/deu/TutorialStrings.json @@ -1,15 +1,145 @@ { "HermitMod:HermitTutorials": { "TEXT": [ - "Der Einsiedler besitzt Karten die einen #yVolltreffer erzielen können. NL NL Ein #Volltreffer wird erzielt, wenn diese Karten aus der Mitte deiner Hand gespielt sind.", - "In ebenen Händen zählen #ybeide mittlere Karten, auch wenn es die einzigen Karten in deiner Hand sind." + "Der Einsiedler besitzt Karten, die einen #yVolltreffer erzielen können. NL NL Ein Volltreffer wird erzielt, wenn diese Karten aus der Mitte deiner Hand gespielt werden.", + "Bei einer geraden Anzahl an Handkarten gibt es #yzwei mittlere Karten, auch wenn es die einzigen Karten in deiner Hand sind." ], "LABEL": [ - "Nächstes", + "Weiter", "Verstanden", "Volltreffer", "(Seite: ", ")" ] + }, + "HermitMod:GuardianTutorials": { + "TEXT": [ + "Der Wächter kann sich in den #yDefensivmodus einrollen, nachdem er sich genug #yabgehärtet, oder TP verloren hat.", + "Er kann auch #yJuwelen in bestimmte Karten einsetzen, um sie zu verstärken." + ], + "LABEL": [ + "Weiter", + "Verstanden", + "Der Wächter", + "(Seite: ", + ")" + ] + }, + "HermitMod:HexaghostTutorials": { + "TEXT": [ + "Der Hexageist durch das #yEntzünden seiner #yGeisterflammen Kräfte freisetzen.", + "Die aktuelle #yGeisterflamme wird durch bestimmte Aktionen entzündet." + ], + "LABEL": [ + "Weiter", + "Verstanden", + "Der Hexageist", + "(Seite: ", + ")" + ] + }, + "HermitMod:CharbossTutorials": { + "TEXT": [ + "Die gegnerischen Helden haben besondere Fähigkeiten, die einen Strategiewechsel erforderlich machen können.", + "Achte also auf die Buffs der Helden, bevor du etwas Unüberlegtes tust." + ], + "LABEL": [ + "Weiter", + "Verstanden", + "Spire Slayer", + "(Seite: ", + ")" + ] + }, + "HermitMod:ChampTutorials": { + "TEXT": [ + "Der Champ kann zwei #yHaltungen im Kampf annehmen: #yOffensiv und #yDefensiv. Das Ausspielen einer Fertigkeit während einer Haltung aktiviert den jeweiligen #yBonus der Haltung, was bis zu drei Mal möglich ist.", + "Während einer Haltung können #yAbschlusskarten gespielt werden, welche den #yAbschlussbonus der Haltung aktivieren, jedoch zum Verlassen der Haltung führen." + ], + "LABEL": [ + "Weiter", + "Verstanden", + "Der Champ", + "(Seite: ", + ")" + ] + }, + "HermitMod:AutomatonTutorials": { + "TEXT": [ + "Das Automaton kann Karten #yKodieren. Drei #yKodierte Karten werden dabei zu einer #yFunktions-Karte kombiniert", + "Manche Karten haben einen Effekt beim #yKompilieren. Diese Effekte werden aktiviert, wenn diese Karte Teil einer gerade entstandenen Funktion ist. Negative Effekte werden als #yKompilierungsfehler bezeichnet." + ], + "LABEL": [ + "Weiter", + "Verstanden", + "Das Automaton", + "(Seite: ", + ")" + ] + }, + "HermitMod:SneckoTutorials": { + "TEXT": [ + "Snecko kann Karten #yirren, um ihre Kosten für den Zug auf einen Zufallswert zwischen 0 and 3 zu verändern. Durch das Irren werden die Kosten IMMER verändert.", + "Snecko kann auch #yGeschenkkarten finden. Diese Karten geben Snecko beim Aufheben eine weitere Kartenbelohnung - allerdings nur #yfremde Karten, sprich: Karten anderer Charaktere bzw Klassen." + ], + "LABEL": [ + "Weiter", + "Verstanden", + "Snecko", + "(Seite: ", + ")" + ] + }, + "HermitMod:GremlinsTutorials": { + "TEXT": [ + "Die Gremlins sind zu fünft - alle haben ihre eigenen TP und Besonderheiten. Nur der Bonus des aktiven Gremlins wird ausgelöst.", + "Der aktive Gremlin kann #yausgewechselt werden. Ein Wechsel kann zum Beispiel durch das Ausspielen bestimmter Karten erfolgen." + ], + "LABEL": [ + "Weiter", + "Verstanden", + "Die Gremlins", + "(Seite: ", + ")" + ] + }, + "HermitMod:SlimeBossTutorials": { + "TEXT": [ + "Der Schleimboss kann Gegner mit #yGlibber besprühen. Dadurch erleiden sie durch den nächsten Angriff mehr Schaden. Der Glibber wird durch den Angriff entfernt, und etwaige #yKonsum-Effekte aktiviert.", + "Er kann auch kleinere Schleimuntertanen von sich abspalten, die am Anfang des Zuges und auch auf #yKommando angreifen." + ], + "LABEL": [ + "Weiter", + "Verstanden", + "Der Schleimboss", + "(Seite: ", + ")" + ] + }, + "HermitMod:CollectorTutorials": { + "TEXT": [ + "Die Sammlerin erntet die #yEssenz getöteter Feinde. Mit #yEssenz können ihre Geister in die #ySammlung aufgenommen werden.", + "Die Sammlung ist ein eigenständiges Deck. In jedem Zug wird eine Karte von der Sammlung gezogen, sofern noch eine übrig ist." + ], + "LABEL": [ + "Weiter", + "Verstanden", + "Die Sammlerin", + "(Seite: ", + ")" + ] + }, + "HermitMod:AwakenedOneTutorials": { + "TEXT": [ + "Der Erweckte verfügt über eine Sammlung starker #yZauberkarten in seinem #yZauberbuch.", + "Wird eine Karte mit #yAufruf gespielt, dann wird die nächste Karte vom Zauberbuch gezogen. Wenn das Zauberbuch leer ist werden die Zauberkarten wieder aufgefüllt." + ], + "LABEL": [ + "Weiter", + "Verstanden", + "Der Erweckte", + "(Seite: ", + ")" + ] } } \ No newline at end of file diff --git a/src/main/resources/hermitResources/localization/deu/UIStrings.json b/src/main/resources/hermitResources/localization/deu/UIStrings.json index 9b23e36538..416796e1e5 100644 --- a/src/main/resources/hermitResources/localization/deu/UIStrings.json +++ b/src/main/resources/hermitResources/localization/deu/UIStrings.json @@ -8,5 +8,10 @@ "TEXT": [ "Behalte." ] + }, + "hermit:SpecialFriend": { + "TEXT": [ + "Wachlaus" + ] } } \ No newline at end of file diff --git a/src/main/resources/hermitResources/localization/eng/CardStrings.json b/src/main/resources/hermitResources/localization/eng/CardStrings.json index fe4c5f4f04..377a8a34e7 100644 --- a/src/main/resources/hermitResources/localization/eng/CardStrings.json +++ b/src/main/resources/hermitResources/localization/eng/CardStrings.json @@ -79,7 +79,7 @@ }, "hermit:Roughhouse": { "NAME": "Roughhouse", - "DESCRIPTION": "Deal !D! damage. hermit:Dead_On\: NL Gain !B! Block." + "DESCRIPTION": "Deal !D! damage. hermit:Dead_On: NL Gain !B! Block." }, "hermit:Malice": { "NAME": "Malice", @@ -87,11 +87,11 @@ }, "hermit:Deadeye": { "NAME": "Deadeye", - "DESCRIPTION": "Deal !D! damage. NL hermit:Dead_On\: NL Gain !M! Strength." + "DESCRIPTION": "Deal !D! damage. NL hermit:Dead_On: NL Gain !M! Strength." }, "hermit:GhostlyPresence": { "NAME": "Ghostly Presence", - "DESCRIPTION": "Gain !B! Block. NL hermit:Dead_On\: NL Apply !M! Weak to ALL enemies." + "DESCRIPTION": "Gain !B! Block. NL hermit:Dead_On: NL Apply !M! Weak to ALL enemies." }, "hermit:Adapt": { "NAME": "Adapt", @@ -99,7 +99,7 @@ }, "hermit:Dive": { "NAME": "Dive", - "DESCRIPTION": "Gain !B! Block. NL hermit:Dead_On\: NL Gain !M! expansioncontent:Plated *Armor." + "DESCRIPTION": "Gain !B! Block. NL hermit:Dead_On: NL Gain !M! expansioncontent:Plated *Armor." }, "hermit:FlashPowder": { "NAME": "Flash Powder", diff --git a/src/main/resources/hermitResources/localization/eng/KeywordStrings.json b/src/main/resources/hermitResources/localization/eng/KeywordStrings.json index b644b759b9..d690640ff9 100644 --- a/src/main/resources/hermitResources/localization/eng/KeywordStrings.json +++ b/src/main/resources/hermitResources/localization/eng/KeywordStrings.json @@ -27,7 +27,7 @@ "bruised" ], "DESCRIPTION": "Bruised targets take more attack damage. Wears off on turn end." -}, + }, { "ID": "rugged", "PROPER_NAME": "Rugged", @@ -35,14 +35,14 @@ "rugged" ], "DESCRIPTION": "Reduces next instance of attack damage taken to #b2 [REMOVE_SPACE]." -}, + }, { "PROPER_NAME": "Bounty", "NAMES": [ "bounty" ], - "DESCRIPTION": "Normal Enemy: #b15 gold. Elite Enemy: #b40 gold. Boss: #b100 gold." -}, + "DESCRIPTION": "Normal Enemy: #b15 gold. Elite Enemy: #b40 gold. Boss: #b100 gold." + }, { "PROPER_NAME": "Stun", "NAMES": [ @@ -53,5 +53,4 @@ ], "DESCRIPTION": "Stunned enemies skip their turn." } - ] \ No newline at end of file diff --git a/src/main/resources/hermitResources/localization/eng/PowerStrings.json b/src/main/resources/hermitResources/localization/eng/PowerStrings.json index f3b4598eed..34259ef60b 100644 --- a/src/main/resources/hermitResources/localization/eng/PowerStrings.json +++ b/src/main/resources/hermitResources/localization/eng/PowerStrings.json @@ -13,7 +13,7 @@ }, "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", @@ -61,7 +61,7 @@ }, "hermit:Drained": { "NAME": "Drained", - "DESCRIPTIONS": ["Gain #b", " less energy next turn."] + "DESCRIPTIONS": ["Gain #b", " less [E] next turn."] }, "hermit:DeterminationPower": { "NAME": "Determination", diff --git a/src/main/resources/hermitResources/localization/eng/RelicStrings.json b/src/main/resources/hermitResources/localization/eng/RelicStrings.json index 10d07d7647..3ddd8b0868 100644 --- a/src/main/resources/hermitResources/localization/eng/RelicStrings.json +++ b/src/main/resources/hermitResources/localization/eng/RelicStrings.json @@ -17,15 +17,17 @@ "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 [REMOVE_SPACE], #yFrail or #yVulnerable [REMOVE_SPACE], gain #b1 less." + "Whenever you gain #yWeak, #yFrail or #yVulnerable [REMOVE_SPACE], gain #b1 less." ] }, "hermit:Spyglass": { @@ -39,7 +41,8 @@ "NAME": "Red Scarf", "FLAVOR": "It's warm and fuzzy.", "DESCRIPTIONS": [ - "Whenever you apply a new debuff to an enemy, gain #b3 #yBlock [REMOVE_SPACE]." + "Whenever you apply a new debuff to an enemy, gain #b", + " #yBlock [REMOVE_SPACE]." ] }, "hermit:DentedPlate": { @@ -60,43 +63,51 @@ "NAME": "Charred Glove", "FLAVOR": "Parts of the glove still glow with otherworldly cinders.", "DESCRIPTIONS": [ - "Whenever you draw a #rCurse [REMOVE_SPACE], 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 [REMOVE_SPACE]. First time you draw a #rCurse each turn, #yExhaust it and draw #b2 cards. Upon pickup, obtain #b2 #rInjuries [REMOVE_SPACE].", - "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 #yBlock [REMOVE_SPACE]." + "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 b34cc97c02..e6e56ba7b7 100644 --- a/src/main/resources/hermitResources/localization/eng/TutorialStrings.json +++ b/src/main/resources/hermitResources/localization/eng/TutorialStrings.json @@ -128,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/fra/CardStrings.json b/src/main/resources/hermitResources/localization/fra/CardStrings.json index e9229b026d..b193f54efb 100644 --- a/src/main/resources/hermitResources/localization/fra/CardStrings.json +++ b/src/main/resources/hermitResources/localization/fra/CardStrings.json @@ -8,7 +8,7 @@ "DESCRIPTION": "Gagnez !B! d'Armure." }, "hermit:Snapshot": { - "NAME": "Snapshot", + "NAME": "Tir éclair", "DESCRIPTION": "Infligez !D! dégâts. hermit:Dans_Le_Mille: Gagnez autant d'Armure que de dégâts non-bloqués." }, "hermit:Desperado": { @@ -20,11 +20,11 @@ "DESCRIPTION": "Infligez !D! dégâts. NL hermit:Dans_Le_Mille: Infligez le double de dégâts." }, "hermit:Quickdraw": { - "NAME": "Dégainer", + "NAME": "Gâchette rapide", "DESCRIPTION": "Infligez !D! dégâts. NL Piochez !M! cartes. NL Au prochain tour, piochez 1 carte en moins." }, "hermit:WideOpen": { - "NAME": "Grand ouvert", + "NAME": "À découvert", "DESCRIPTION": "Infligez !D! dégâts. NL Appliquez !M! de Vulnérabilité." }, "hermit:Covet": { @@ -42,12 +42,12 @@ "DESCRIPTION": "Défaussez une carte. NL Gagnez !B! d'Armure. NL Si cette carte n'était pas une Attaque, gagnez !B! d'Armure supplémentaire." }, "hermit:Snipe": { - "NAME": "Snipe", + "NAME": "Sniper", "DESCRIPTION": "Votre prochain effet hermit:Dans_Le_Mille se déclenche deux fois. NL Épuisement.", "UPGRADE_DESCRIPTION": "hermit:Concentrez-vous. NL Votre prochain effet hermit:Dans_Le_Mille se déclenche deux fois. NL Épuisement." }, "hermit:CalledShot": { - "NAME": "Tir contrôlé", + "NAME": "Tir annoncé", "DESCRIPTION": "Infligez !D! dégâts. NL Si la dernière carte jouée a déclenché hermit:Dans_Le_Mille, piochez une carte.", "UPGRADE_DESCRIPTION": "Retenue. NL Infligez !D! dégâts. NL Si la dernière carte jouée a déclenché hermit:Dans_Le_Mille, piochez une carte." }, @@ -74,12 +74,12 @@ "UPGRADE_DESCRIPTION": "Inné. NL Au début de votre tour, piochez 2 cartes et ajoutez une *Blessure à votre main." }, "hermit:Gambit": { - "NAME": "Sacrifice", + "NAME": "Gambit", "DESCRIPTION": "Mettez !M! Attaques aléatoires de votre défausse vers votre main. Elles coûtent 1 [E] de moins pour ce tour. NL Épuisement." }, "hermit:Roughhouse": { - "NAME": "Chahut", - "DESCRIPTION": "Infligez !D! dégâts. hermit:Dans_Le_Mille : NL Gagnez !B! d'Armure." + "NAME": "Baston", + "DESCRIPTION": "Infligez !D! dégâts. hermit:Dans_Le_Mille: NL Gagnez !B! d'Armure." }, "hermit:Malice": { "NAME": "Malice", @@ -87,11 +87,11 @@ }, "hermit:Deadeye": { "NAME": "Fine gâchette", - "DESCRIPTION": "Infligez !D! dégâts. NL hermit:Dans_Le_Mille : NL Gagnez !M! de Force." + "DESCRIPTION": "Infligez !D! dégâts. NL hermit:Dans_Le_Mille: NL Gagnez !M! de Force." }, "hermit:GhostlyPresence": { "NAME": "Présence fantômatique", - "DESCRIPTION": "Gagnez !B! d'Armure. NL hermit:Dans_Le_Mille : NL Appliquez !M! de Faiblesse à TOUS les ennemis." + "DESCRIPTION": "Gagnez !B! d'Armure. NL hermit:Dans_Le_Mille: NL Appliquez !M! de Faiblesse à TOUS les ennemis." }, "hermit:Adapt": { "NAME": "Adaptation", @@ -99,10 +99,10 @@ }, "hermit:Dive": { "NAME": "Plongée", - "DESCRIPTION": "Gagnez !B! d'Armure. NL hermit:Dans_Le_Mille : NL Gagnez !M! *d'Armure *Plaquée." + "DESCRIPTION": "Gagnez !B! d'Armure. NL hermit:Dans_Le_Mille: NL Gagnez !M! *d'Armure expansioncontent:Plaquée." }, "hermit:FlashPowder": { - "NAME": "Poudre Flash", + "NAME": "Poudre aveuglante", "DESCRIPTION": "Gagnez !B! d'Armure. NL Tous les ennemis perdent !M! de Force. NL Épuisement." }, "hermit:Roulette": { @@ -120,49 +120,49 @@ "UPGRADE_DESCRIPTION": "Retenue. Appliquez !M! de Faiblesse et de Vulnérabilité." }, "hermit:TakeCover": { - "NAME": "À couvert", + "NAME": "À couvert !", "DESCRIPTION": "Ajoutez une *Défense coûtant 0 dans votre main et améliorez-la X fois. NL Épuisement.", "UPGRADE_DESCRIPTION": "Ajoutez une *Défense coûtant 0 dans votre main et améliorez-la X+1 fois. NL Épuisement." }, "hermit:Misfire": { - "NAME": "Rater son coup", - "DESCRIPTION": "Infligez !D! dégâts à un ennemi aléatoire. NL Ajoutez une *Maladresse dans votre pioche." + "NAME": "Coup manqué", + "DESCRIPTION": "Infligez !D! dégâts à un ennemi aléatoire. NL Mélangez une *Maladresse dans votre pioche." }, "hermit:SprayPray": { - "NAME": "Spray n' Pray", - "DESCRIPTION": "Infligez !D! dégâts à un ennemi aléatoire 3 fois. NL Ajoutez un *Doute dans votre pioche." + "NAME": "Arroser et prier", + "DESCRIPTION": "Infligez !D! dégâts à un ennemi aléatoire 3 fois. NL Mélangez un *Doute dans votre pioche." }, "hermit:Scavenge": { - "NAME": "Scavenge", - "DESCRIPTION": "Gagnez !M! *d'Armure *Plaquée. NL hermit:Dans_Le_Mille: NL Gagnez !hermit:SecondMagic! d'Or. NL Épuisement." + "NAME": "Fouille", + "DESCRIPTION": "Gagnez !M! *d'Armure expansioncontent:Plaquée. NL hermit:Dans_Le_Mille: NL Gagnez !hermit:SecondMagic! d'Or. NL Épuisement." }, "hermit:ImpendingDoom": { "NAME": "Destin Imminent", "DESCRIPTION": "Injouable. NL hermit:Dans_Le_Mille: NL À la fin de votre tour, infligez 13 dégâts à TOUT LE MONDE." }, "hermit:MementoCard": { - "NAME": "Memento", + "NAME": "Mémento", "DESCRIPTION": "Retenue. NL Appliquez !M! Vulnérabilité à TOUT LE MONDE." }, "hermit:Shortfuse": { - "NAME": "Irritabilité", + "NAME": "Mèche courte", "DESCRIPTION": "Infligez !D! dégâts. NL Coûte 1 [E] de moins par *Frappe ou *Défense jouée ce tour." }, "hermit:Grudge": { "NAME": "Rancune", - "DESCRIPTION": "Infligez !D! dégâts à TOUS les ennemis. NL Inflige !M! dégâts de plus pour TOUTES vos Malédictions." + "DESCRIPTION": "Infligez !D! dégâts à TOUS les ennemis. NL Inflige !M! dégâts supplémentaires pour TOUTES vos Malédictions." }, "hermit:Spite": { "NAME": "Dépit", - "DESCRIPTION": "Infligez !D! dégâts. NL Piochez une carte pour chaque Malédiction dans votre main." + "DESCRIPTION": "Épuisez toutes les cartes Injouables dans votre main. NL Gagnez !B! d'Armure. NL Piochez !M! cartes." }, "hermit:Manifest": { "NAME": "Manifeste", - "DESCRIPTION": "Gagnez !B! d'Armure. NL Obtenez un *Déclin." + "DESCRIPTION": "Gagnez !B! d'Armure. NL Ajoutez un *Déclin dans votre main." }, "hermit:Feint": { "NAME": "Feinte", - "DESCRIPTION": "Gagnez !B! d'Armure. NL Appliquez !M! de hermit:Meurtri à TOUS les ennemis." + "DESCRIPTION": "Gagnez !B! d'Armure. NL Appliquez !M! hermit:Contusions à TOUS les ennemis." }, "hermit:LowProfile": { "NAME": "Profil bas", @@ -170,11 +170,11 @@ }, "hermit:Horror": { "NAME": "Horreur", - "DESCRIPTION": "Appliquez !M! de hermit:Meurtri à TOUS les ennemis. NL Le hermit:Meurtri ne s'estompe pas ce tour." + "DESCRIPTION": "Appliquez !M! hermit:Contusions à TOUS les ennemis. NL Les hermit:Contusions ne s'estompent pas ce tour." }, "hermit:NoHoldsBarred": { "NAME": "Tout est permis", - "DESCRIPTION": "Infligez !D! dégâts et appliquez !M! de hermit:Meurtri à TOUS les ennemis. NL Gagnez 1 [E] de moins au rochain tour." + "DESCRIPTION": "Infligez !D! dégâts et appliquez !M! hermit:Contusions à TOUS les ennemis. NL Gagnez 1 [E] de moins au prochain tour." }, "hermit:Cheat": { "NAME": "Tricherie", @@ -182,12 +182,12 @@ }, "hermit:Vantage": { "NAME": "Avantage", - "DESCRIPTION": "Gagnez !B! d'Armure. NL hermit:Dans_Le_Mille: NL Piochez !M! carte et Améliorez-la pour le reste du combat.", - "UPGRADE_DESCRIPTION": "Gagnez !B! d'Armure. NL hermit:Dans_Le_Mille: NL Piochez !M! cartes et Améliorez-les pour le reste du combat." + "DESCRIPTION": "Gagnez !B! d'Armure. NL hermit:Dans_Le_Mille: NL Piochez et Améliorez une carte.", + "UPGRADE_DESCRIPTION": "Gagnez !B! d'Armure. NL hermit:Dans_Le_Mille: NL Piochez et Améliorez !M! cartes." }, "hermit:Brawl": { "NAME": "Pugilat", - "DESCRIPTION": "Au début de votre tour, appliquez !M! de hermit:Meurtri à TOUS les ennemis." + "DESCRIPTION": "Au début de votre tour, appliquez !M! hermit:Contusions à TOUS les ennemis." }, "hermit:Combo": { "NAME": "Combo", @@ -229,7 +229,7 @@ "DESCRIPTION": "Perdez !M! PV. NL Infligez !D! dégâts. NL Toutes les *Armes *maudites gagnent !hermit:SecondMagic! dégâts de façon permanente. NL Épuisement." }, "hermit:Enervate": { - "NAME": "Énervement", + "NAME": "Sape", "DESCRIPTION": "Infligez !D! dégâts. NL hermit:Dans_Le_Mille: NL Gagnez [E] et piochez une carte." }, "hermit:Ricochet": { @@ -269,19 +269,19 @@ }, "hermit:Showdown": { "NAME": "Showdown", - "DESCRIPTION": "Retenue. NL Infligez !D! dégâts. NL Jouez toutes vos *Frappes en main sur des cibles aléatoires." + "DESCRIPTION": "Infligez !D! dégâts. NL Jouez toutes vos *Frappes en main." }, "hermit:LuckOfTheDraw": { - "NAME": "Question de hasard", - "DESCRIPTION": "Piochez Piochez jusqu'à ce que vous piochiez des cartes d'une valeur totale de !M! [E]." + "NAME": "Chance du tirage", + "DESCRIPTION": "Piochez des cartes jusqu'à ce que leur coût total soit de !M! [E] ou plus." }, "hermit:Coalescence": { "NAME": "Coalescence", "DESCRIPTION": "Gagnez !B! d'Armure. NL Retenez jusqu'à !M! cartes ce tour." }, "hermit:PistolWhip": { - "NAME": "Fouet du pistolet", - "DESCRIPTION": "Infligez !D! dégâts. NL Appliquez !M! de hermit:Meurtri." + "NAME": "Coup de crosse", + "DESCRIPTION": "Infligez !D! dégâts. NL Appliquez !M! hermit:Contusions." }, "hermit:DeadMansHand": { "NAME": "Main de l'homme mort", @@ -293,10 +293,10 @@ }, "hermit:GoldenBullet": { "NAME": "Balle dorée", - "DESCRIPTION": "Infligez !D! dégâts. NL If Fatal, permanently reduce this card's cost by 1. NL Épuisement." + "DESCRIPTION": "Infligez !D! dégâts. NL Si Fatal, réduisez de façon permanente le coût de cette carte de 1. NL Épuisement." }, "hermit:HoleUp": { - "NAME": "Criblé de trous", + "NAME": "Planque", "DESCRIPTION": "Gagnez !B! d'Armure. NL Gagnez !M! de Faiblesse." }, "hermit:ItchyTrigger": { @@ -305,14 +305,13 @@ }, "hermit:EyeOfTheStorm": { "NAME": "Oeil du cyclone", - "DESCRIPTION": "Gagnez de l'Énergie jusqu'à votre maximum. NL Épuisement.", - "UPGRADE_DESCRIPTION": "Piochez une carte. NL hermit:Dans_Le_Mille: NL Gagnez de l'Énergie jusqu'à votre maximum. NL Épuisement." + "DESCRIPTION": "hermit:Concentrez-vous. NL Gagnez de l'Énergie jusqu'à votre maximum. NL Épuisement." }, "hermit:FinalCanter": { "NAME": "Galop final", - "DESCRIPTION": "Retenue. NL Épuisez toutes les Malédictions dans votre main, infligez !D! dégâts pour chaque Malédiction Épuisée. NL Épuisement.", - "UPGRADE_DESCRIPTION": " NL (Vous avez !M! Malédiciton.)", - "EXTENDED_DESCRIPTION": [" NL (Vous avez !M! Malédicitons.)"] + "DESCRIPTION": "Retenue. NL Infligez !D! dégâts pour chaque Malédiction en main. NL Épuisement.", + "UPGRADE_DESCRIPTION": " NL (Vous avez !M! Malédiction.)", + "EXTENDED_DESCRIPTION": [" NL (Vous avez !M! Malédictions.)"] }, "hermit:HeroicBravado": { "NAME": "Bravado héroïque", @@ -320,7 +319,7 @@ }, "hermit:FromBeyond": { "NAME": "De l'Au-Delà", - "DESCRIPTION": "Pour chaque carte dans votre pile d'épuisement, un ennemi aléatoire perd !M! PV." + "DESCRIPTION": "Pour chaque carte Épuisée, un ennemi aléatoire perd !M! PV." }, "hermit:Virtue": { "NAME": "Vertu", diff --git a/src/main/resources/hermitResources/localization/fra/KeywordStrings.json b/src/main/resources/hermitResources/localization/fra/KeywordStrings.json index da1999f1d4..9e707e1a90 100644 --- a/src/main/resources/hermitResources/localization/fra/KeywordStrings.json +++ b/src/main/resources/hermitResources/localization/fra/KeywordStrings.json @@ -29,14 +29,14 @@ }, { "ID": "bruise", - "PROPER_NAME": "Meurtri", + "PROPER_NAME": "Contusion", "NAMES": [ "bruise", - "meurtri", - "meurtris", + "contusion", + "contusions", "bruised" ], - "DESCRIPTION": "Les cibles meurtries prennent plus de dégâts des attaques. Chaque coup, le taux de Meurtri est réduit de #b1. S'estompe à la fin du tour." + "DESCRIPTION": "Les cibles victimes de contusions prennent plus de dégâts des Attaques. S'estompe à la fin du tour." }, { "ID": "rugged", @@ -70,4 +70,4 @@ "DESCRIPTION": "Les ennemis étourdis passent leur tour." } -] \ No newline at end of file +] diff --git a/src/main/resources/hermitResources/localization/fra/PotionStrings.json b/src/main/resources/hermitResources/localization/fra/PotionStrings.json index b45bab6918..7ce05cdcc6 100644 --- a/src/main/resources/hermitResources/localization/fra/PotionStrings.json +++ b/src/main/resources/hermitResources/localization/fra/PotionStrings.json @@ -1,14 +1,14 @@ { "hermit:Tonic": { "NAME": "Tonique", - "DESCRIPTIONS": ["Gagnez #b", " de #yRobustesse."] + "DESCRIPTIONS": ["Gagnez #b", " de #yRobustesse [REMOVE_SPACE]."] }, "hermit:BlackBile": { "NAME": "Bile noire", - "DESCRIPTIONS": ["Appliquez #b", " de #yMeurtri."] + "DESCRIPTIONS": ["Appliquez #b", " #yContusions [REMOVE_SPACE]."] }, "hermit:Eclipse": { "NAME": "Vide liquide", - "DESCRIPTIONS": ["Mettez #b", " carte de votre #ydéfausse dans votre main. Celle-ci coûte 0 ce tour. "," cartes de votre #ydéfausse dans votre main. Celles-ci coûtennt 0 ce tour"] + "DESCRIPTIONS": ["Récupérez #b", " #yÉpuisée dans votre main. Celle-ci coûte 0 ce tour. "," #yÉpuisées dans votre main. Celles-ci coûtent 0 ce tour."] +} } -} \ No newline at end of file diff --git a/src/main/resources/hermitResources/localization/fra/PowerStrings.json b/src/main/resources/hermitResources/localization/fra/PowerStrings.json index 1206f1def6..f01fe38f8d 100644 --- a/src/main/resources/hermitResources/localization/fra/PowerStrings.json +++ b/src/main/resources/hermitResources/localization/fra/PowerStrings.json @@ -13,43 +13,43 @@ }, "hermit:ShadowCloakPower": { "NAME": "Cape obscure", - "DESCRIPTIONS": ["Lorsque vous piochez une Malédiction, gagnez #b", " d'Armure."] + "DESCRIPTIONS": ["Lorsque vous piochez ou #yÉpuisez une #rMalédiction, gagnez #b", " d'Armure."] }, "hermit:TakeAimPower": { "NAME": "Ciblage", - "DESCRIPTIONS": ["Au début de votre tour, #yConcentrez-vous."] + "DESCRIPTIONS": ["Au début de votre tour, #yConcentrez-vous [REMOVE_SPACE]."] }, "hermit:AdaptPower": { "NAME": "Adaptation", "DESCRIPTIONS": ["Au début de votre tour, vous pouvez #yÉpuiser #b", " carte dans votre main pour gagner #b8 d'Armure.", " cartes dans votre main pour gagner #b8 d'Armure par carte."] }, "hermit:Bruise": { - "NAME": "Meurtri", - "DESCRIPTIONS": ["Ce tour, la cible subit #b", " dégâts supplémentaires. Chaque coup réduit cet effet de 1."] + "NAME": "Contusion", + "DESCRIPTIONS": ["Ce tour, la cible subit #b", " dégâts supplémentaires."] }, "hermit:HorrorPower": { "NAME": "Horreur", - "DESCRIPTIONS": ["L'effet Meurtri ne s'estompe pas pendant #b", " tour.", " tours."] + "DESCRIPTIONS": ["Les Contusions ne s'estompent pas pendant #b", " tour.", " tours."] }, "hermit:ComboPower": { "NAME": "Combo", - "DESCRIPTIONS": ["Lorsque vous activez un effet #yDans #yLe #yMille, ajoutez #b", " carte aléatoire avec #yDans #yLe #yMille à votre main.", " cartes aléatoires avec #yDans #yLe #yMille à votre main."] + "DESCRIPTIONS": ["Les cartes avec un effet #yDans #yLe #yMille déclenché retourneront dans votre main. Sera déclenché pour encore #b", " carte.", " cartes."] }, "hermit:BigShotPower": { "NAME": "Baril de fumée", - "DESCRIPTIONS": ["Lorsque vous activez un effet #yDans #yLe #yMille, votre prochaine attaque inflige #b", " dégâts supplémentaires."] + "DESCRIPTIONS": ["Lorsque vous activez un effet #yDans #yLe #yMille, votre prochaine attaque infligera #b", " dégâts supplémentaires."] }, "hermit:BrawlPower": { "NAME": "Pugilat", - "DESCRIPTIONS": ["Au début de votre tour, appliquez #b", " de Meurtri à TOUS les ennemis."] + "DESCRIPTIONS": ["Au début de votre tour, appliquez #b", " Contusions à TOUS les ennemis."] }, "hermit:Rugged": { "NAME": "Robustesse", - "DESCRIPTIONS": ["La/les prochaine(s)", " fois que vous prenez des dégâts non-bloqués, réduisez-les à #b1.", " fois que vous prenez des dégâts non-bloqués, réduisez-les à #b1."] + "DESCRIPTIONS": ["La/les prochaine(s)", " fois que vous prenez des dégâts non-bloqués, réduisez-les à #b1 [REMOVE_SPACE].", " fois que vous prenez des dégâts non-bloqués, réduisez-les à #b1. [REMOVE_SPACE]"] }, "hermit:EternalPower": { "NAME": "Pouvoir éternel", - "DESCRIPTIONS": ["Au début de votre tour, réduisez le coût de toutes les cartes de votre main de #b", "."] + "DESCRIPTIONS": ["Les #b4 premières cartes piochées au début de chaque tour coûteront #b"," [E] de moins ce tour."] }, "hermit:OverwhelmingPowerPower": { "NAME": "Puissance écrasante", @@ -61,11 +61,11 @@ }, "hermit:Drained": { "NAME": "Drainé", - "DESCRIPTIONS": ["Gagnez #b", " énergie de moins au prochain tour."] + "DESCRIPTIONS": ["Gagnez #b", " [E] de moins au prochain tour."] }, "hermit:DeterminationPower": { "NAME": "Détermination", - "DESCRIPTIONS": ["Lorsqu'un Débuff vous est appliqué, gagnez #b", " de #yForce."] + "DESCRIPTIONS": ["Lorsqu'un Débuff vous est appliqué, gagnez #b", " de #yForce [REMOVE_SPACE]."] }, "hermit:RyeStalkPower": { "NAME": "Tige de seigle", @@ -73,10 +73,10 @@ }, "hermit:PetGhostPower": { "NAME": "Fantôme de compagnie", - "DESCRIPTIONS": ["Vous ne pouvez pas mourir. Mourrez à la fin de ", " votre prochain tour.", " ce tour."] + "DESCRIPTIONS": ["Vous ne pouvez pas mourir. Mourrez à la fin de ", " votre prochain tour.", " tours."] }, "hermit:SnipePower": { - "NAME": "Snipe", + "NAME": "Sniper", "DESCRIPTIONS": ["Le/les #b", " prochain effet #yDans #yLe #yMille ce tour est joué 2 fois.", " prochains effets #yDans #yLe #yMille ce tour sont joués 2 fois."] }, "hermit:CoalescencePower": { @@ -91,4 +91,4 @@ "NAME": "Maintenance", "DESCRIPTIONS": ["Vos #yFrappes infligent #b", " dégâts supplémentaires."] } - } \ No newline at end of file + } diff --git a/src/main/resources/hermitResources/localization/fra/RelicStrings.json b/src/main/resources/hermitResources/localization/fra/RelicStrings.json index 9018469d89..37d64f96a6 100644 --- a/src/main/resources/hermitResources/localization/fra/RelicStrings.json +++ b/src/main/resources/hermitResources/localization/fra/RelicStrings.json @@ -3,100 +3,111 @@ "NAME": "Vieux médaillon", "FLAVOR": "Une photo délavée se trouve à l'intérieur.", "DESCRIPTIONS": [ - "Au début de chaque combat, ajoutez un #yMemento à votre main." + "Au début de chaque combat, ajoutez un #yMémento à votre main." ] }, "hermit:RyeStalk": { "NAME": "Tige de seigle", "FLAVOR": "Toujours en parfait état, malgré le fait qu'il ait été mâchouillé pendant si longtemps.", "DESCRIPTIONS": [ - "Au début de chaque combat, TOUS les ennemis perdent #b2 de #yForce." + "Lorsque vous perdez des PV durant le tour de l'ennemi, piochez #b1 carte." ] }, "hermit:BartenderGlass": { "NAME": "Verre à shot", "FLAVOR": "Tout liquide placé à l'intérieur se transforme en quelque chose d'autre.", "DESCRIPTIONS": [ - "Les #b2 premières fois que vous utilisez une potion chaque combat, gagnez une potion aléatoire. Vous ne pouvez utiliser que #b2 potions chaque combat.", - "Vous ne pouvez plus utiliser de potions ce combat." + "Les #b", + "Vous ne pouvez plus utiliser de potions ce combat.", + " premières fois que vous utilisez une potion chaque combat, gagnez une potion aléatoire. Vous ne pouvez utiliser que #b", + " potions chaque combat." ] }, "hermit:Horseshoe": { "NAME": "Fer à cheval", "FLAVOR": "Porte-bonheur. Ça va manquer à quelqu'un.", "DESCRIPTIONS": [ - "Lorsque vous gagnez de la #yFaiblesse, #yFragilité ou #yVulnérabilité, gagnez-en #b1 de moins." + "Lorsque vous gagnez de la #yFaiblesse, de la #yFragilité ou de la #yVulnérabilité [REMOVE_SPACE], gagnez-en #b1 de moins." ] }, "hermit:Spyglass": { "NAME": "Longue-vue", "FLAVOR": "Propriété de Kestin Highfin.", "DESCRIPTIONS": [ - "Si vous terminez votre tour #yhermit:Concentré, gagnez une [E] supplémentaire au prochain tour." + "Si vous terminez votre tour #yhermit:Concentré [REMOVE_SPACE], gagnez une [E] supplémentaire au prochain tour." ] }, "hermit:RedScarf": { "NAME": "Écharpe rouge", "FLAVOR": "Chaude et confortable.", "DESCRIPTIONS": [ - "Lorsque vous appliquez un débuff à un ennemi, gagnez #b2 #yd'Armure." + "Lorsque vous appliquez un nouveau débuff à un ennemi, gagnez #b", + " #yd'Armure [REMOVE_SPACE]." ] }, "hermit:DentedPlate": { "NAME": "Plaque cabossée", "FLAVOR": "Plusieures balles sont restées logées à l'intérieur.", "DESCRIPTIONS": [ - "Lorsque vous êtes à #b50% ou moins de vos PV maximum, gagnez [E] et piochez #b1 carte au début de votre tour." + "Lorsque vous êtes à #b50% ou moins de vos PV maximum [REMOVE_SPACE], gagnez [E] et piochez #b1 carte au début de votre tour." ] }, "hermit:PetGhost": { "NAME": "Fantôme de compagnie", "FLAVOR": "Pauvre chou.", "DESCRIPTIONS": [ - "La 1ère fois que vous seriez mort chaque combat, survivez avec #b1 PV à la place." + "Empêchez votre première perte de PV mortelle à chaque combat." ] }, "hermit:CharredGlove": { "NAME": "Gant carbonisé", "FLAVOR": "Certaines parties de ce gant brillent encore de cendres d'un autre monde.", "DESCRIPTIONS": [ - "Lorsque vous piochez une #rMalédiction, votre prochaine attaque inflige #b3 dégâts supplémentaires." + "Lorsque vous piochez une #rMalédiction [REMOVE_SPACE], votre prochaine attaque inflige #b", + " dégâts supplémentaires." ] }, "hermit:ClaspedLocket": { "NAME": "Médaillon agrafé", "FLAVOR": "Il ne veut plus s'ouvrir à présent.", "DESCRIPTIONS": [ - "Remplace #yVieux #yMédaillon. La première fois que vous piochez une Malédiction chaque tour, #yÉpuisez-la et piochez #b2 cartes. Lorsque vous la récupérez, obtenez #b2 #rBlessures.", - "Plus jamais..." + "Remplace #yVieux #yMédaillon [REMOVE_SPACE]. La première fois que vous piochez une #rMalédiction chaque tour, #yÉpuisez-la et piochez #b", + "Plus jamais...", + " cartes. Lorsque vous la récupérez, obtenez #b", + " #rBlessures [REMOVE_SPACE]." ] }, "hermit:StraightRazor": { "NAME": "Coupe-choux", "FLAVOR": "Pour un rasage plus net...", "DESCRIPTIONS": [ - "Lorsque vous retirez une carte de votre deck, soignez-vous de #b15 PV." + "Lorsque vous retirez ou #yTransformez une carte de votre deck, soignez-vous de #b", + " PV." ] }, "hermit:BrassTacks": { "NAME": "Punaises en laiton", "FLAVOR": "The luster on these tacks never seems to fade.", "DESCRIPTIONS": [ - "Commencez chaque combat avec #b2 de #yMétallisation." + "À la fin de votre tour, gagnez #b", + " #yd'Armure [REMOVE_SPACE]." ] }, "hermit:BlackPowder": { "NAME": "Poudre noire", "FLAVOR": "À manipuler avec précaution.", "DESCRIPTIONS": [ - "À la fin de votre tour, infligez #b2 dégâts à TOUS les ennemis pour chaque effet #yhermit:Dans_Le_Mille déclenché." + "Lorsque vous déclenchez un effet #yhermit:Dans_Le_Mille, infligez #b", + " dégâts à TOUS les ennemis." ] }, "hermit:BloodyTooth": { "NAME": "Dent cassée", - "FLAVOR": "Elle semble trop large pour être venue d'une machoîre humaine...", + "FLAVOR": "Elle semble trop large pour être venue d'une mâchoire humaine...", "DESCRIPTIONS": [ - "Lorsque vous battez un ennemi d'Élite, gagnez #b1 de #yForce au début de chaque combat pour le reste de l'Acte." + "Lorsque vous battez un ennemi d'Élite, soignez-vous de #b", + " PV et gagnez #b", + " d'Or." ] } } diff --git a/src/main/resources/hermitResources/localization/fra/TutorialStrings.json b/src/main/resources/hermitResources/localization/fra/TutorialStrings.json index 0cf0a30af6..4634de83b4 100644 --- a/src/main/resources/hermitResources/localization/fra/TutorialStrings.json +++ b/src/main/resources/hermitResources/localization/fra/TutorialStrings.json @@ -14,7 +14,7 @@ }, "HermitMod:GuardianTutorials": { "TEXT": [ - "Le Gardien peut s'Enrouler lorsqu'il a atteint un certain taux de Renforcement.", + "Le Gardien peut s'Enrouler après qu'il ait atteint un certain taux de Renforcement.", "Il peut également introduire des Gemmes dans certaines cartes dans le but d'augmenter leurs effets." ], "LABEL": [ @@ -46,22 +46,100 @@ "LABEL": [ "Suivant", "Compris", - "Les Spire Slayers", + "Les Chasseurs de la Tour", + "(Page: ", + ")" + ] + }, + "HermitMod:ChampTutorials": { + "TEXT": [ + "Le Champion peut passer d'une Pose de Gladiateur à une autre, la Pose du Destructeur et la Pose Défensive. Jouer des Compétences lorsque vous êtes dans une de ces Poses déclenchent leurs Bonus de Compétences, jusqu'à trois fois.", + "Il peut également utiliser de puissantes cartes Finisher lorsqu'il se trouve dans ces Poses, au prix de devoir les quitter." + ], + "LABEL": [ + "Suivant", + "Compris", + "Le Champion", + "(Page: ", + ")" + ] + }, + "HermitMod:AutomatonTutorials": { + "TEXT": [ + "L'Automate peut utiliser des cartes Encoder pour les ajouter à une séquence (jusqu'à trois cartes) et les combiner en une carte Fonction unique.", + "Certaines cartes ont des effets de Compilation spéciaux qui s'activent lorsqu'elles sont combinées en une Fonction, qui peut être positive ou négative (on parle alors d'Erreur de Compilation)." + ], + "LABEL": [ + "Suivant", + "Compris", + "L'Automate", + "(Page: ", + ")" + ] + }, + "HermitMod:SneckoTutorials": { + "TEXT": [ + "Le Geckobra peut Confondre ses cartes pour remplacer temporairement leur coût avec un nombre entre 0 et 3. Confondre modifiera toujours le coût d’une carte, et ne le relancera jamais vers le même nombre.", + "Il peut également trouver des cartes Cadeaux qui qui lui permettent d'obtenir des cartes d'autres personnages lorsqu'il les prend." + ], + "LABEL": [ + "Suivant", + "Compris", + "Le Geckobra", + "(Page: ", + ")" + ] + }, + "HermitMod:GremlinsTutorials": { + "TEXT": [ + "Les Diablotins sont cinq personnages en un et ont chacun leur effet unique et PVs.", + "Vous pouvez les Permuter en utilisant certaines cartes." + ], + "LABEL": [ + "Suivant", + "Compris", + "Les Diablotins", + "(Page: ", + ")" + ] + }, + "HermitMod:SlimeBossTutorials": { + "TEXT": [ + "Le Parrain Slime peut appliquer du Goop sur les ennemis pour augmenter les dégâts qu'ils prendront la prochaine fois qu'ils seront attaqués, retirant alors tout le Goop et activant n'importe quel effet de Consumation.", + "Il peut également se Diviser en Slimes sbires qui attaquent au début de son tour et lorsqu'il Commande." + ], + "LABEL": [ + "Suivant", + "Compris", + "Le Parrain Slime", "(Page: ", ")" ] }, "HermitMod:CollectorTutorials": { "TEXT": [ - "Collector takes Essences from foes. You can spend Essences to add their spirits into your Collection.", - "The Collection is a separate deck. You draw one card from it each turn." + "Le Collecteur prend les Essences des ennemis. Vous pouvez dépenser des Essences pour ajouter leurs esprits à votre Collection.", + "La Collection est un deck à part entière. Vous piochez une carte de ce deck à chaque tour." ], "LABEL": [ "Suivant", "Compris", - "Le collecteur", + "Le Collecteur", "(Page: ", ")" - ] + ] + }, + "HermitMod:AwakenedOneTutorials": { + "TEXT": [ + "L'Éveillé a une d'une puissante sélection de cartes Sort dans son Grimoire.", + "Lorsque vous jouez une carte avec Conjuration, vous piochez une carte de celui-ci. Vider le Grimoire régénère tous les Sorts." + ], + "LABEL": [ + "Suivant", + "Compris", + "L'Éveillé", + "(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 e09a31a841..9559196ed6 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/PowerStrings.json b/src/main/resources/hermitResources/localization/jpn/PowerStrings.json index 64e05d7021..b1963addbc 100644 --- a/src/main/resources/hermitResources/localization/jpn/PowerStrings.json +++ b/src/main/resources/hermitResources/localization/jpn/PowerStrings.json @@ -13,7 +13,7 @@ }, "hermit:ShadowCloakPower": { "NAME": "シャドウクローク", - "DESCRIPTIONS": ["呪い を引くか 廃棄 する度に #b", " ブロックを得る。"] + "DESCRIPTIONS": ["#r呪い を引くか 廃棄 する度に #b", " ブロックを得る。"] }, "hermit:TakeAimPower": { "NAME": "狙う", @@ -61,7 +61,7 @@ }, "hermit:Drained": { "NAME": "ドレイン", - "DESCRIPTIONS": ["次のターンエナジーを #b", " 失う。"] + "DESCRIPTIONS": ["次のターン [E] を #b", " 失う。"] }, "hermit:DeterminationPower": { "NAME": "決意", diff --git a/src/main/resources/hermitResources/localization/jpn/RelicStrings.json b/src/main/resources/hermitResources/localization/jpn/RelicStrings.json index 43094d110b..ce09dbdde1 100644 --- a/src/main/resources/hermitResources/localization/jpn/RelicStrings.json +++ b/src/main/resources/hermitResources/localization/jpn/RelicStrings.json @@ -17,8 +17,10 @@ "NAME": "ショットグラス", "FLAVOR": "中に入れた液体が別の物に変化する。", "DESCRIPTIONS": [ - "戦闘中に ポーション を 使用した時、ランダムなポーションを得る。 1回の戦闘に使えるポーションが #b2 個までになる。", - "この戦闘中はもうポーションを使えない。" + "各戦闘で #b", + "この戦闘中はもうポーションを使えない。", + " 回まで、戦闘中にポーションを使用する度にランダムなポーションを得る。 1回の戦闘で使えるポーションが #b", + " 個までになる。" ] }, "hermit:Horseshoe": { @@ -39,7 +41,8 @@ "NAME": "赤いスカーフ", "FLAVOR": "ポカポカして暖かい。", "DESCRIPTIONS": [ - "敵に新たにデバフを与えた時 #b3 #yブロック を得る。" + "あなたが敵に新たにデバフを与えた時 #b", + " #yブロック を得る。" ] }, "hermit:DentedPlate": { @@ -60,43 +63,51 @@ "NAME": "焦げた手袋", "FLAVOR": "手袋の一部は今でも別世界の燃えカスで光っている。", "DESCRIPTIONS": [ - " #r呪い を引く度に、次のアタックのダメージが #b3 上昇する。" + " #r呪い を引く度に、次のアタックで与えるダメージが #b", + " 上昇する。" ] }, "hermit:ClaspedLocket": { "NAME": "留め具付きのロケット", "FLAVOR": "もう、開かない。", "DESCRIPTIONS": [ - " #y古いロケット と置き換える。 毎ターン初めて 呪い を引いた時それを #y廃棄 し、カードを #b2 枚引く。 取得時、 #b2 枚の #r怪我 をデッキに加える。", - "もう二度と..." + " #y古いロケット と置き換える。 毎ターン初めて 呪い を引いた時それを #y廃棄 し、カードを #b", + "もう二度と...", + " 枚引く。 取得時、 #b", + " 枚の #r怪我 をデッキに加える。" ] }, "hermit:StraightRazor": { "NAME": "直刃の剃刀", "FLAVOR": "よりクリーンなシェービングの為に...", "DESCRIPTIONS": [ - "デッキのカードを削除したり #y変換 したりする度にHPを #b15 回復する。" + "デッキのカードを削除したり #y変換 したりする度にHPを #b", + " 回復する。" ] }, "hermit:BrassTacks": { "NAME": "真鍮製の鋲", "FLAVOR": "これは決して色褪せない。", "DESCRIPTIONS": [ - "あなたのターン終了時、 #b2 ブロックを得る。" + "あなたのターン終了時、 #b", + " #yブロック を得る。" ] }, "hermit:BlackPowder": { "NAME": "黒色火薬", "FLAVOR": "取扱注意", "DESCRIPTIONS": [ - "#yhermit:デッド-オン を発動させた時、敵全体に #b2 ダメージを与える。" + "#yhermit:デッド-オン を発動させた時、敵全体に #b", + " ダメージを与える。" ] }, "hermit:BloodyTooth": { "NAME": "折れた歯", "FLAVOR": "人間の物にしては大きすぎる気が...", "DESCRIPTIONS": [ - "エリートを倒すたびにHPを #b7 回復し、更に #b35 ゴールドを得る。" + "エリート戦で勝利する度にHPを #b", + " 回復し、更に #b", + " ゴールドを得る。" ] } } diff --git a/src/main/resources/hermitResources/localization/jpn/TutorialStrings.json b/src/main/resources/hermitResources/localization/jpn/TutorialStrings.json index 4f34869cec..dd360fc1aa 100644 --- a/src/main/resources/hermitResources/localization/jpn/TutorialStrings.json +++ b/src/main/resources/hermitResources/localization/jpn/TutorialStrings.json @@ -5,7 +5,7 @@ "偶数手札の場合、手札がこれだけであっても両方とも中央のカードと判定される。" ], "LABEL": [ - "次", + "次へ", "了解", "デッド-オン", "(Page: ", @@ -18,7 +18,7 @@ "また、彼はカードにジェムを装着することが出来る。" ], "LABEL": [ - "次", + "次へ", "了解", "ガーディアン", "(Page: ", @@ -31,7 +31,7 @@ "それぞれがアクティブである間に特定のアクションを行い、力を溜める。" ], "LABEL": [ - "次", + "次へ", "了解", "ヘクサゴースト", "(Page: ", @@ -44,24 +44,102 @@ "必ずヒーローのバフを確認してから戦闘を開始するようにしましょう。" ], "LABEL": [ - "次", + "次へ", "了解", "スパイアスレイヤー", "(Page: ", ")" ] }, + "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": [ "コレクターは敵からエッセンスを奪う事が出来る。あなたはエッセンスを消費することでその霊魂をコレクションに加えることが出来る。", "コレクションはサイドデッキとして扱われ、あなたは毎ターンそこからカードを1枚引く。" ], "LABEL": [ - "Next", + "次へ", "了解", "コレクター", "(Page: ", ")" ] + }, + "HermitMod:AwakenedOneTutorials": { + "TEXT": [ + "目覚めし者は、強力なスペルカードを魔導書から使用できる。", + " #yスペル を持つカードをプレイすると魔導書からカードを1枚引き、魔導書が空になると全てのスペルがリフレッシュされる。" + ], + "LABEL": [ + "次へ", + "了解", + "目覚めし者", + "(Page: ", + ")" + ] } } \ No newline at end of file diff --git a/src/main/resources/hermitResources/localization/kor/CardStrings.json b/src/main/resources/hermitResources/localization/kor/CardStrings.json index 1dc99609a4..486863b0fa 100644 --- a/src/main/resources/hermitResources/localization/kor/CardStrings.json +++ b/src/main/resources/hermitResources/localization/kor/CardStrings.json @@ -1,4 +1,4 @@ -{ +{ "hermit:Strike_Hermit": { "NAME": "타격", "DESCRIPTION": "피해를 !D! 줍니다." @@ -29,8 +29,8 @@ }, "hermit:Covet": { "NAME": "갈망", - "DESCRIPTION": "카드를 1장 버립니다. NL 카드를 !M! 장 뽑습니다. 저주를 버린다면 소멸시킵니다.", - "UPGRADE_DESCRIPTION": "카드를 1장 버립니다. NL 카드를 !M! 장 뽑습니다. 저주를 버린다면 소멸시킵니다." + "DESCRIPTION": "카드를 1장 버립니다. NL 카드를 !M! 장 뽑습니다. NL 저주를 버린다면 소멸시킵니다.", + "UPGRADE_DESCRIPTION": "카드를 1장 버립니다. NL 카드를 !M! 장 뽑습니다. NL 저주를 버린다면 소멸시킵니다." }, "hermit:HighCaliber": { "NAME": "대구경", @@ -79,27 +79,27 @@ }, "hermit:Roughhouse": { "NAME": "난장판", - "DESCRIPTION": "피해를 !D! 줍니다. hermit:정조준\: NL 방어도를 !B! 얻습니다." + "DESCRIPTION": "피해를 !D! 줍니다. hermit:정조준: NL 방어도를 !B! 얻습니다." }, "hermit:Malice": { "NAME": "악의", - "DESCRIPTION": "손에 있는 카드를 1장 소멸시킵니다. NL 피해를 !D! 줍니다. NL 저주를 소멸시켰다면 적 전체에게 피해를 줍니다." + "DESCRIPTION": "카드를 1장 소멸시킵니다. NL 피해를 !D! 줍니다. NL 저주가 소멸되면 적 전체에게 피해를 줍니다." }, "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": "적응", - "DESCRIPTION": "내 턴 시작 시 손에 있는 카드 중 1장을 선택해 소멸시킵니다. *소멸시켰다면 방어도를 8 얻습니다." + "DESCRIPTION": "내 턴 시작 시 카드를 최대 1장 소멸시킵니다. NL 카드가 소멸되면 방어도를 8 얻습니다." }, "hermit:Dive": { "NAME": "급하강", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL hermit:정조준\: NL expansioncontent:판금_갑옷을 !M! 얻습니다." + "DESCRIPTION": "방어도를 !B! 얻습니다. NL hermit:정조준: NL expansioncontent:판금 *갑옷을 !M! 얻습니다." }, "hermit:FlashPowder": { "NAME": "섬광탄", @@ -116,8 +116,8 @@ }, "hermit:Glare": { "NAME": "응시", - "DESCRIPTION": "약화를 !M! 부여합니다. NL 취약을 !M! 부여합니다.", - "UPGRADE_DESCRIPTION": "보존. NL 약화를 !M! 부여합니다. NL 취약을 !M! 부여합니다." + "DESCRIPTION": "약화와 취약을 !M! 부여합니다.", + "UPGRADE_DESCRIPTION": "보존. NL 약화와 취약을 !M! 부여합니다." }, "hermit:TakeCover": { "NAME": "엄폐", @@ -134,7 +134,7 @@ }, "hermit:Scavenge": { "NAME": "청소부", - "DESCRIPTION": "expansioncontent:판금_갑옷을 !M! 얻습니다. NL hermit:정조준: NL 골드를 !hermit:SecondMagic! 얻습니다. NL 소멸." + "DESCRIPTION": "expansioncontent:판금 *갑옷을 !M! 얻습니다. NL hermit:정조준: NL 골드를 !hermit:SecondMagic! 얻습니다. NL 소멸." }, "hermit:ImpendingDoom": { "NAME": "임박한 종말", @@ -154,7 +154,7 @@ }, "hermit:Spite": { "NAME": "앙심", - "DESCRIPTION": "손에 있는 사용불가 카드를 모두 소멸시킵니다. NL 방어도를 !B! 얻습니다. NL 카드를 !M! 장 뽑습니다. " + "DESCRIPTION": "손에 있는 사용불가 카드를 모두 소멸시킵니다. NL 방어도를 !B! 얻습니다. NL 카드를 !M! 장 뽑습니다." }, "hermit:Manifest": { "NAME": "현현", @@ -182,8 +182,8 @@ }, "hermit:Vantage": { "NAME": "위치 선점", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL hermit:정조준: NL 카드를 1장 뽑고 그 카드를 강화합니다.", - "UPGRADE_DESCRIPTION": "방어도를 !B! 얻습니다. NL hermit:정조준: NL 카드를 !M! 장 뽑고 그 카드를 강화합니다." + "DESCRIPTION": "방어도를 !B! 얻습니다. NL hermit:정조준: 카드를 1장 뽑고 그 카드를 강화합니다.", + "UPGRADE_DESCRIPTION": "방어도를 !B! 얻습니다. NL hermit:정조준: 카드를 !M! 장 뽑고 그 카드를 강화합니다." }, "hermit:Brawl": { "NAME": "난투", @@ -200,11 +200,11 @@ }, "hermit:OverwhelmingPower": { "NAME": "압도적인 힘", - "DESCRIPTION": "[E] [E] [E] 를 얻습니다. NL 카드를 !hermit:SecondMagic! 장 뽑습니다. NL [E] 가 0인 상태로 내 턴을 끝날 때마다 체력을 !M! 잃습니다." + "DESCRIPTION": " [E] [E] [E] 를 얻습니다. NL 카드를 !hermit:SecondMagic! 장 뽑습니다. NL [E] 가 0인 상태로 내 턴을 끝날 때마다 체력을 !M! 잃습니다." }, "hermit:Maintenance": { "NAME": "유지보수", - "DESCRIPTION": "이번 전투 동안 *타격의 피해량을 !M! 증가시키고 이 카드의 비용을 [E] 증가시킵니다. NL 민첩을 !hermit:SecondMagic! 얻습니다." + "DESCRIPTION": "이번 전투 동안 *타격의 피해량이 !M! 증가합니다. NL 민첩을 !hermit:SecondMagic! 얻습니다. NL 이번 전투 동안 이 카드의 비용이 1 증가합니다." }, "hermit:EternalForm": { "NAME": "영겁의 형상", @@ -226,7 +226,7 @@ }, "hermit:CursedWeapon": { "NAME": "저주받은 무기", - "DESCRIPTION": "체력을 !M! 잃습니다. NL 피해를 !D! 줍니다. NL 모든 *저주받은 *무기의 피해량이 영구적으로 !hermit:SecondMagic! 상승합니다. 소멸." + "DESCRIPTION": "체력을 !M! 잃습니다. NL 피해를 !D! 줍니다. NL 모든 *저주받은 *무기의 피해량이 영구적으로 !hermit:SecondMagic! 상승합니다. NL 소멸." }, "hermit:Enervate": { "NAME": "쇠약", @@ -243,7 +243,7 @@ }, "hermit:LoneWolf": { "NAME": "외톨이", - "DESCRIPTION": "카드를 선택합니다. NL 그 카드의 비용이 이번 턴 동안 0이 됩니다. NL 다른 카드를 모두 버립니다." + "DESCRIPTION": "카드를 선택합니다. NL 이번 턴에 그 카드의 비용은 0이 됩니다. NL 다른 카드를 모두 버립니다." }, "hermit:HighNoon": { "NAME": "정오", @@ -256,7 +256,7 @@ "hermit:TakeAim": { "NAME": "겨냥", "DESCRIPTION": "내 턴 시작 시 hermit:집중합니다.", - "UPGRADE_DESCRIPTION": "hermit:집중합니다. NL 내 턴 시작 시 hermit:집중합니다." + "UPGRADE_DESCRIPTION": "hermit:집중합니다. NL 내 턴 시작 시 hermit:집중합니다." }, "hermit:Magnum": { "NAME": "매그넘", @@ -273,11 +273,11 @@ }, "hermit:LuckOfTheDraw": { "NAME": "행운의 뽑기", - "DESCRIPTION": "뽑은 카드의 [E] 합이 !M! 이상 될 때까지 카드를 뽑습니다." + "DESCRIPTION": "뽑은 카드의 비용 합이 !M! 이상 될 때까지 카드를 뽑습니다." }, "hermit:Coalescence": { "NAME": "융합", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL 내 턴 종료 시 손에 있는 카드 중 최대 !M! 장을 선택해 보존합니다." + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 이번 턴에 카드 중 최대 !M! 장을 선택해 보존합니다." }, "hermit:PistolWhip": { "NAME": "권총패기", @@ -309,13 +309,13 @@ }, "hermit:FinalCanter": { "NAME": "최후의 위선", - "DESCRIPTION": "보존. 손에 있는 저주 한 장당 피해를 !D! 줍니다. NL 소멸.", + "DESCRIPTION": "보존. NL 손에 있는 저주 한 장당 피해를 !D! 줍니다. NL 소멸.", "UPGRADE_DESCRIPTION": " NL (저주가 !M! 장 있습니다.)", "EXTENDED_DESCRIPTION": [" NL (저주가 !M! 장 있습니다.)"] }, "hermit:HeroicBravado": { "NAME": "영웅적 객기", - "DESCRIPTION": "휘발성. NL hermit:강인함을 1 얻습니다. NL 이번 전투 동안 이 카드의 비용을 !M! 증가시킵니다." + "DESCRIPTION": "휘발성. NL hermit:강인함을 1 얻습니다. NL 이번 전투 동안 이 카드의 비용이 !M! 증가합니다." }, "hermit:FromBeyond": { "NAME": "저 너머에서", @@ -323,6 +323,6 @@ }, "hermit:Virtue": { "NAME": "선행", - "DESCRIPTION": "보존. NL 내 보유한 모든 해로운 효과를 !M! 감소시킵니다." + "DESCRIPTION": "보존. NL 내 보유한 해로운 효과를 각각 !M! 만큼 감소시킵니다." } } diff --git a/src/main/resources/hermitResources/localization/kor/DailyModStrings.json b/src/main/resources/hermitResources/localization/kor/DailyModStrings.json index 9e26dfeeb6..d177980a92 100644 --- a/src/main/resources/hermitResources/localization/kor/DailyModStrings.json +++ b/src/main/resources/hermitResources/localization/kor/DailyModStrings.json @@ -1 +1,3 @@ -{} \ No newline at end of file +{ + +} diff --git a/src/main/resources/hermitResources/localization/kor/EventStrings.json b/src/main/resources/hermitResources/localization/kor/EventStrings.json index 0db3279e44..d177980a92 100644 --- a/src/main/resources/hermitResources/localization/kor/EventStrings.json +++ b/src/main/resources/hermitResources/localization/kor/EventStrings.json @@ -1,3 +1,3 @@ -{ +{ } diff --git a/src/main/resources/hermitResources/localization/kor/MonsterStrings.json b/src/main/resources/hermitResources/localization/kor/MonsterStrings.json index 9e26dfeeb6..22fdca1b26 100644 --- a/src/main/resources/hermitResources/localization/kor/MonsterStrings.json +++ b/src/main/resources/hermitResources/localization/kor/MonsterStrings.json @@ -1 +1 @@ -{} \ No newline at end of file +{} \ No newline at end of file diff --git a/src/main/resources/hermitResources/localization/kor/OrbStrings.json b/src/main/resources/hermitResources/localization/kor/OrbStrings.json index 9e26dfeeb6..22fdca1b26 100644 --- a/src/main/resources/hermitResources/localization/kor/OrbStrings.json +++ b/src/main/resources/hermitResources/localization/kor/OrbStrings.json @@ -1 +1 @@ -{} \ No newline at end of file +{} \ No newline at end of file diff --git a/src/main/resources/hermitResources/localization/kor/PotionStrings.json b/src/main/resources/hermitResources/localization/kor/PotionStrings.json index f2a484d729..5948a233e2 100644 --- a/src/main/resources/hermitResources/localization/kor/PotionStrings.json +++ b/src/main/resources/hermitResources/localization/kor/PotionStrings.json @@ -1,4 +1,4 @@ -{ +{ "hermit:Tonic": { "NAME": "토닉", "DESCRIPTIONS": ["#y강인함을 #b", " 얻습니다."] @@ -9,6 +9,6 @@ }, "hermit:Eclipse": { "NAME": "액체 공허", - "DESCRIPTIONS": ["소멸된 카드 더미에서 #b", " 장의 카드를 손으로 가져옵니다. 이번 턴 동안 비용이 #b0 이 됩니다.", " 장의 카드를 손으로 가져옵니다. 이번 턴 동안 비용이 #b0 이 됩니다."] + "DESCRIPTIONS": ["#y소멸된 카드 더미에서 #b", " 장의 카드를 가져옵니다. 이번 턴에 그 카드의 비용은 #b0 이 됩니다."," 장의 카드를 가져옵니다. 이번 턴에 그 카드들의 비용은 #b0 이 됩니다."] } } \ No newline at end of file diff --git a/src/main/resources/hermitResources/localization/kor/PowerStrings.json b/src/main/resources/hermitResources/localization/kor/PowerStrings.json index fc056461a8..3b7fb3f0fe 100644 --- a/src/main/resources/hermitResources/localization/kor/PowerStrings.json +++ b/src/main/resources/hermitResources/localization/kor/PowerStrings.json @@ -1,15 +1,15 @@ -{ +{ "hermit:Concentration": { "NAME": "집중", - "DESCRIPTIONS": ["이번 턴에 다음으로 사용하는 #y정조준 카드의 효과는 위치와 관계없이 발동합니다."] + "DESCRIPTIONS": ["이번 턴에 다음 사용하는 #y정조준 카드의 효과는 위치와 관계없이 발동합니다."] }, "hermit:HighNoonPower": { "NAME": "정오", - "DESCRIPTIONS": ["#y타격 또는 #y수비를 사용할 때마다, 카드를 #b", " 장 뽑습니다.", " 장 뽑습니다."] + "DESCRIPTIONS": ["#y타격 또는 #y수비를 사용할 때마다 카드를 #b", " 장 뽑습니다.", " 장 뽑습니다."] }, "hermit:FatalDesirePower": { "NAME": "파멸의 욕망", - "DESCRIPTIONS": ["내 턴 시작 시, 카드를 #b", " 장 뽑고, #y상처를 #b", " 장 얻습니다.", " 장 얻습니다."] + "DESCRIPTIONS": ["내 턴 시작 시 카드를 #b", " 장 뽑고 #y상처를 #b", " 장 얻습니다.", " 장 얻습니다."] }, "hermit:ShadowCloakPower": { "NAME": "그림자 망토", @@ -17,11 +17,11 @@ }, "hermit:TakeAimPower": { "NAME": "겨냥", - "DESCRIPTIONS": ["턴 시작 시 #y집중합니다."] + "DESCRIPTIONS": ["내 턴 시작 시 #y집중합니다."] }, "hermit:AdaptPower": { "NAME": "적응", - "DESCRIPTIONS": ["턴 종료 시 최대 #b", " 장의 카드를 소멸시킵니다. 소멸시켰다면 방어도를 #b8 얻습니다." , " 장의 카드를 소멸시킵니다. 소멸시켰다면 방어도를 #b8 얻습니다."] + "DESCRIPTIONS": ["턴 종료 시 최대 #b", " 장의 카드를 #y소멸시킵니다. #y소멸시킨 카드 한 장당 방어도를 #b8 얻습니다." , " 장의 카드를 #y소멸시킵니다. #y소멸시킨 카드 한 장당 방어도를 #b8 얻습니다."] }, "hermit:Bruise": { "NAME": "타박상", @@ -29,11 +29,11 @@ }, "hermit:HorrorPower": { "NAME": "참상", - "DESCRIPTIONS": ["다음 #b", " 턴 동안 타박상이 사라지지 않습니다.", " 턴 동안 타박상이 사라지지 않습니다."] + "DESCRIPTIONS": ["#b", " 턴 동안 #y타박상이 사라지지 않습니다.", " 턴 동안 #y타박상이 사라지지 않습니다."] }, "hermit:ComboPower": { "NAME": "연계", - "DESCRIPTIONS": ["이번 동안 #y정조준 효과가 발동한 카드를 #b", " 장 가져옵니다.", " 장 가져옵니다."] + "DESCRIPTIONS": ["이번 턴 동안 #y정조준 효과가 발동한 카드를 #b", " 장 가져옵니다.", " 장 가져옵니다."] }, "hermit:BigShotPower": { "NAME": "달궈진 총구", @@ -41,11 +41,11 @@ }, "hermit:BrawlPower": { "NAME": "난투", - "DESCRIPTIONS": ["내 턴 시작 시 적 전체에게 타박상을 #b", " 부여합니다."] + "DESCRIPTIONS": ["내 턴 시작 시 적 전체에게 #y타박상을 #b", " 부여합니다."] }, "hermit:Rugged": { "NAME": "강인함", - "DESCRIPTIONS": ["막히지 않은 공격 피해를 다음 #b", " 번까지 피해량을 #b2 으로 줄입니다.", " 번까지 피해량을 #b2 으로 줄입니다"] + "DESCRIPTIONS": ["막히지 않은 공격 피해를 다음 #b", " 번까지 피해량을 #b2 으로 줄입니다.", " 번까지 피해량을 #b2 으로 줄입니다."] }, "hermit:EternalPower": { "NAME": "영겁의 힘", @@ -53,11 +53,11 @@ }, "hermit:OverwhelmingPowerPower": { "NAME": "압도적인 힘", - "DESCRIPTIONS": ["턴 종료 시 에너지가 0이라면 체력을 #b"," 잃습니다."] + "DESCRIPTIONS": ["내 턴 종료 시 에너지가 #b0 이면 체력을 #b"," 잃습니다."] }, "hermit:Bounty": { "NAME": "현상금", - "DESCRIPTIONS": ["현재 현상금: "] + "DESCRIPTIONS": ["현재 현상금: #b"] }, "hermit:Drained": { "NAME": "탈진", @@ -73,11 +73,11 @@ }, "hermit:PetGhostPower": { "NAME": "꼬마 유령", - "DESCRIPTIONS": ["죽을 수 없습니다.", " 다음 턴에 죽습니다.", " 이번 턴에 죽습니다."] + "DESCRIPTIONS": ["죽지 않습니다.", " 다음 턴에 죽습니다.", " 이번 턴에 죽습니다."] }, "hermit:SnipePower": { "NAME": "저격", - "DESCRIPTIONS": ["이번 턴에 사용하는 정조준 효과가 다음 #b", " 번까지 두 번 발동됩니다.", " 번까지 두 번 발동됩니다."] + "DESCRIPTIONS": ["이번 턴에 사용하는 #y정조준 효과가 다음 #b", " 번까지 두 번 발동됩니다.", " 번까지 두 번 발동됩니다."] }, "hermit:CoalescencePower": { "NAME": "융합", diff --git a/src/main/resources/hermitResources/localization/kor/RelicStrings.json b/src/main/resources/hermitResources/localization/kor/RelicStrings.json index 514c034881..54a4059b30 100644 --- a/src/main/resources/hermitResources/localization/kor/RelicStrings.json +++ b/src/main/resources/hermitResources/localization/kor/RelicStrings.json @@ -1,4 +1,4 @@ -{ +{ "hermit:Momento": { "NAME": "오래된 목걸이", "FLAVOR": "안에는 흐릿한 사진이 있습니다.", @@ -17,8 +17,10 @@ "NAME": "샷잔", "FLAVOR": "어떤 액체든지 안에 들어가면 다른 것으로 변화합니다.", "DESCRIPTIONS": [ - "매 전투마다 포션을 사용한다면 무작위 포션을 얻습니다. 매 전투마다 최대 #b2 개의 포션만 사용할 수 있습니다.", - "이번 전투에서 더 이상 포션을 사용할 수 없습니다." + "매 전투마다 포션을 사용한다면 무작위 포션을 #b", + "이번 전투에서 더 이상 포션을 사용할 수 없습니다.", + " 개 얻습니다. 매 전투에서 포션을 #b", + " 개만 사용할 수 있습니다." ] }, "hermit:Horseshoe": { @@ -39,14 +41,15 @@ "NAME": "붉은 스카프", "FLAVOR": "따뜻하고 보송합니다.", "DESCRIPTIONS": [ - "적에게 신규 해로운 효과를 부여할 때마다 #y방어도를 #b3 얻습니다." + "적에게 신규 해로운 효과를 부여할 때마다 #y방어도를 #b", + " 얻습니다." ] }, "hermit:DentedPlate": { "NAME": "찌그러진 철판", "FLAVOR": "총알 몇 개는 아직도 안에 박혀있습니다.", "DESCRIPTIONS": [ - "체력이 #b50% 이하일 때 내 턴이 시작 시 [E] 를 얻고 카드를 #b1 장 뽑습니다." + "체력이 #b50% 이하일 때 내 턴 시작 시 [E] 를 얻고 카드를 #b1 장 뽑습니다." ] }, "hermit:PetGhost": { @@ -60,43 +63,51 @@ "NAME": "그을린 장갑", "FLAVOR": "장갑의 다른 부분은 초자연적인 빛을 띄고 있습니다.", "DESCRIPTIONS": [ - "#r저주를 뽑을 때마다 다음 공격의 피해량이 #b3 증가합니다." + "#r저주를 뽑을 때마다 다음 공격의 피해량이 #b", + " 증가합니다." ] }, "hermit:ClaspedLocket": { "NAME": "굳게 닫힌 목걸이", "FLAVOR": "더 이상 열리지 않습니다.", "DESCRIPTIONS": [ - "#y오래된 #y목걸이와 교체합니다. 매 턴 처음으로 #r저주를 뽑을 때마다 그 카드를 #y소멸시키고 카드를 2장 뽑습니다. 획득 시, #y상처를 #b2 장 얻습니다.", - "두 번 다시는..." + "#y오래된 #y목걸이와 교체합니다. 매 턴 처음으로 #r저주를 뽑을 때마다 그 카드를 #y소멸시키고 카드를 #b", + "두 번 다시는...", + " 장 뽑습니다. 획득 시, #y상처를 #b", + " 장 얻습니다." ] }, "hermit:StraightRazor": { "NAME": "올곧은 면도날", "FLAVOR": "깨끗하게 하려면...", "DESCRIPTIONS": [ - "덱에서 카드를 제거하거나 #y변화시킬 때마다 체력을 #b15 회복합니다." + "덱에서 카드를 #y제거하거나 #y변화시킬 때마다 체력을 #b", + " 회복합니다." ] }, "hermit:BrassTacks": { "NAME": "놋쇠 압정", "FLAVOR": "이 압정들의 광채는 결코 사라지지 않을 것 같습니다.", "DESCRIPTIONS": [ - "내 턴 종료 시 방어도를 #b2 얻습니다." + "내 턴 종료 시 #y방어도를 #b", + " 얻습니다." ] }, "hermit:BlackPowder": { "NAME": "흑색화약", "FLAVOR": "취급주의.", "DESCRIPTIONS": [ - " #yhermit:정조준 효과를 발동할 때마다 적 전체에게 피해를 #b2 만큼 줍니다." + "#yhermit:정조준 효과를 발동할 때마다 적 전체에게 피해를 #b", + " 줍니다." ] }, "hermit:BloodyTooth": { "NAME": "부러진 이빨", "FLAVOR": "사람의 이빨이라기엔 너무 커 보입니다...", "DESCRIPTIONS": [ - "엘리트를 처치할 때마다 #y체력을 #b7 얻고 #y골드를 #b35 얻습니다." + "엘리트를 처치할 때마다 체력을 #b", + " 회복하고 #y골드를 #b", + " 얻습니다." ] } } diff --git a/src/main/resources/hermitResources/localization/kor/RunModStrings.json b/src/main/resources/hermitResources/localization/kor/RunModStrings.json index 9e26dfeeb6..22fdca1b26 100644 --- a/src/main/resources/hermitResources/localization/kor/RunModStrings.json +++ b/src/main/resources/hermitResources/localization/kor/RunModStrings.json @@ -1 +1 @@ -{} \ No newline at end of file +{} \ No newline at end of file diff --git a/src/main/resources/hermitResources/localization/kor/TutorialStrings.json b/src/main/resources/hermitResources/localization/kor/TutorialStrings.json index f3072345c9..244a5128f6 100644 --- a/src/main/resources/hermitResources/localization/kor/TutorialStrings.json +++ b/src/main/resources/hermitResources/localization/kor/TutorialStrings.json @@ -1,132 +1,145 @@ -{ - "HermitMod:HermitTutorials": { - "TEXT": [ - "허밋은 #y정조준 카드를 사용할 수 있습니다. NL NL #y정조준 카드는 패 중앙에서 사용할 때 특별한 효과가 발동합니다.", - "손에 있는 카드가 짝수일 경우, 가운데 두 장이 #y모두 해당되며, 손에 카드가 한 장만 있을 때도 해당됩니다." - ], - "LABEL": [ - "다음", - "준비 되었습니다!", - "정조준", - "(페이지: ", - ")" - ] - }, - "HermitMod:GuardianTutorials": { - "TEXT": [ - "수호자는 웅크리기 카드로 #y대비를 할 수 있습니다.", - "또한 #y소켓이 있는 카드에 #y보석을 장착해 NL 보석의 효과도 존재하는 고유한 카드를 만들 수있습니다." - ], - "LABEL": [ - "다음", - "알겠습니다", - "수호자", - "(페이지: ", - ")" - ] - }, - "HermitMod:HexaghostTutorials": { - "TEXT": [ - "육각령은 불꽃을 #y점화시켜 불꽃마다 고유한 효과를 발동시킵니다.", - "불꽃은 아이콘에 표시된 조건의 카드를 맞춰서 사용하면 점화됩니다." - ], - "LABEL": [ - "다음", - "알겠습니다", - "육각령", - "(페이지: ", - ")" - ] - }, - "HermitMod:CharbossTutorials": { - "TEXT": [ - "적 캐릭터들은 강력한 능력을 갖추고 있어 그에 맞는 전략이 필요합니다.", - "전투에 임하기 전에 적의 기믹을 파악하십시오." - ], - "LABEL": [ - "다음", - "알겠습니다", - "첨탑 침략자들", - "(페이지: ", - ")" - ] - }, - "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": [ - "수집가는 적한테 정수를 얻습니다. 정수를 소모해서 그들의 영혼을 수집품에 추가할 수 있습니다.", - "수집품은 일반 덱과 별개입니다. 매 턴 수집품 덱에서 수집품 카드를 한 장 뽑습니다." - ], - "LABEL": [ - "다음", - "알겠습니다", - "수집가", - "(페이지: ", - ")" - ] - } +{ + "HermitMod:HermitTutorials": { + "TEXT": [ + "허밋은 #y정조준 카드를 사용할 수 있습니다. NL NL #y정조준 카드는 패 중앙에서 사용할 때 특별한 효과가 발동합니다.", + "손에 있는 카드가 짝수일 경우, 가운데 두 장이 #y모두 해당되며, 손에 카드가 한 장만 있을 때도 해당됩니다." + ], + "LABEL": [ + "다음", + "알겠습니다", + "정조준", + "(페이지: ", + ")" + ] + }, + "HermitMod:GuardianTutorials": { + "TEXT": [ + "수호자는 #y웅크리기 카드로 #y대비를 할 수 있습니다.", + "또한 #y소켓이 있는 카드에 #y보석을 장착해 NL 보석의 효과도 존재하는 고유한 카드를 만들 수있습니다." + ], + "LABEL": [ + "다음", + "알겠습니다", + "수호자", + "(페이지: ", + ")" + ] + }, + "HermitMod:HexaghostTutorials": { + "TEXT": [ + "육각령은 불꽃을 #y점화시켜 불꽃마다 고유한 효과를 발동시킵니다.", + "불꽃은 아이콘에 표시된 조건의 카드를 맞춰서 사용하면 #y점화됩니다." + ], + "LABEL": [ + "다음", + "알겠습니다", + "육각령", + "(페이지: ", + ")" + ] + }, + "HermitMod:CharbossTutorials": { + "TEXT": [ + "적 캐릭터들은 강력한 능력을 갖추고 있어 그에 맞는 전략이 필요합니다.", + "전투에 임하기 전에 적의 기믹을 파악하십시오." + ], + "LABEL": [ + "다음", + "알겠습니다", + "첨탑 침략자", + "(페이지: ", + ")" + ] + }, + "HermitMod:ChampTutorials": { + "TEXT": [ + "투사는 2가지 검투사 자세인 #r광폭화 자세와 #b수비 자세를 취할 수 있습니다. 자세를 취하는 동안 스킬 카드를 사용하면 해당하는 스킬 #y보너스가 최대 #b3 번 발동합니다.", + "자세를 취하는 동안에는 자세를 벗어나는 대가로 강력한 마무리 카드를 사용할 수 있습니다." + ], + "LABEL": [ + "다음", + "알겠습니다", + "투사", + "(페이지: ", + ")" + ] + }, + "HermitMod:AutomatonTutorials": { + "TEXT": [ + "청동 자동인형은 #y부호화 카드를 최대 3장 사용해 함수 카드 1장으로 병합할 수 있습니다.", + "일부 카드가 보유하는 #y컴파일은 함수 카드로 병합될 때 긍정적이거나 부정적인 고유 효과가 발동하는 것을 의미합니다. 부정적인 효과는 #y컴파일 #y에러라고 표시됩니다." + ], + "LABEL": [ + "다음", + "알겠습니다", + "청동 자동인형", + "(페이지: ", + ")" + ] + }, + "HermitMod:SneckoTutorials": { + "TEXT": [ + "스네코는 카드를 뒤엉키게 해 카드의 비용을 #b0 에서 #b3 까지 일시적으로 변경할 수 있습니다. 뒤엉킨 카드의 비용은 항상 변경되며 그 턴에 다시 뒤엉키게 하면 같은 비용이 되지 않게끔합니다.", + "카드 획득 시 다른 캐릭터의 선물 카드를 얻을 수 있습니다." + ], + "LABEL": [ + "다음", + "알겠습니다", + "스네코", + "(페이지: ", + ")" + ] + }, + "HermitMod:GremlinsTutorials": { + "TEXT": [ + "그렘린 군단은 5명 모두 전투에 참여하게 됩니다. 각기 고유 체력과 고유 효과를 보유하고 있습니다.", + "특정 카드를 사용해 그렘린을 교체할 수 있습니다." + ], + "LABEL": [ + "다음", + "알겠습니다", + "그렘린 군단", + "(페이지: ", + ")" + ] + }, + "HermitMod:SlimeBossTutorials": { + "TEXT": [ + "대왕 슬라임은 피해량이 증가하는 #y점액을 부여해 다음번 해당 적 공격 시 점액을 모두 제거하고 적이 받는 피해량을 증가시킬 수 있습니다.", + "슬라임 하수인으로 #y분열해서 대왕 슬라임의 턴 시작 시 공격하거나 #y명령해서 공격할 수도 있습니다." + ], + "LABEL": [ + "다음", + "알겠습니다", + "대왕 슬라임", + "(페이지: ", + ")" + ] + }, + "HermitMod:CollectorTutorials": { + "TEXT": [ + "수집가는 적한테 정수를 얻습니다. 정수를 소모해서 그들의 영혼을 #y수집품에 추가할 수 있습니다.", + "수집품은 일반 덱과 별개입니다. 매 턴 수집품 덱에서 수집품 카드를 한 장 뽑습니다." + ], + "LABEL": [ + "다음", + "알겠습니다", + "수집가", + "(페이지: ", + ")" + ] + }, + "HermitMod:AwakenedOneTutorials": { + "TEXT": [ + "깨어난 자에겐 주문서가 있으며 주문서에는 강력한 주문이 있습니다.", + "#y시전 카드를 사용할 때마다 주문서에서 카드를 한 장 뽑습니다. 주문서가 비워지면 모든 주문을 갱신합니다." + ], + "LABEL": [ + "다음", + "알겠습니다", + "깨어난 자", + "(페이지: ", + ")" + ] + } } \ No newline at end of file diff --git a/src/main/resources/hermitResources/localization/kor/UIStrings.json b/src/main/resources/hermitResources/localization/kor/UIStrings.json index 7d7e6ed725..3a0f8926ef 100644 --- a/src/main/resources/hermitResources/localization/kor/UIStrings.json +++ b/src/main/resources/hermitResources/localization/kor/UIStrings.json @@ -1,4 +1,4 @@ -{ +{ "hermit:bountygold": { "TEXT": [ " 골드 (현상금)" 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 0000000000..71a6a172f8 --- /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! 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! 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! Débil y Vulnerable.", + "UPGRADE_DESCRIPTION": "Retiene. NL Aplica !M! 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 al azar 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! de daño adicional 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! 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 al azar 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! de 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! de Bloqueo. NL Gana !M! 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 al azar 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 0000000000..6dc05bad7e --- /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 0000000000..0db3279e44 --- /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 0000000000..0db3279e44 --- /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 0000000000..a58f90fb5c --- /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 0000000000..9e26dfeeb6 --- /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 0000000000..9e26dfeeb6 --- /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 0000000000..e25bb69984 --- /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 0000000000..59ff97899d --- /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 0000000000..0b4bf702d4 --- /dev/null +++ b/src/main/resources/hermitResources/localization/spa/RelicStrings.json @@ -0,0 +1,113 @@ +{ + "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 #b", + "No puedes usar más pociones en este combate.", + " veces que uses una poción en cada combate, obtén una poción aleatoria. Solo puedes usar #b", + " pociones cada 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 #b", + " #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 #b", + " 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 #b", + "Nunca Más...", + " cartas. Al obtener esta reliquia, consigue #b", + " #rInjurias [REMOVE_SPACE]." + ] + }, + "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 #b", + " 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 #b", + " de #yBloqueo." + ] + }, + "hermit:BlackPowder": { + "NAME": "Pólvora Negra", + "FLAVOR": "Manéjala con cuidado.", + "DESCRIPTIONS": [ + "Cada vez que actives un efecto de #yhermit:Preciso, inflige #b", + " 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 #b", + " de vida y gana #b", + " 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 0000000000..9e26dfeeb6 --- /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 0000000000..2410fa6165 --- /dev/null +++ b/src/main/resources/hermitResources/localization/spa/TutorialStrings.json @@ -0,0 +1,145 @@ +{ + "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: ", + ")" + ] + }, + "HermitMod:AwakenedOneTutorials": { + "TEXT": [ + "El Despertado tiene una poderosa selección de cartas de Hechizo que se encuentran dentro de su Libro de Hechizos.", + "Cada vez que juegas una carta con Conjurar, robas una carta de él. Vaciar el Libro de Hechizos refresca todos los Hechizos." + ], + "LABEL": [ + "Siguiente", + "Entendido", + "El Despertado", + "(Página: ", + ")" + ] + } +} \ No newline at end of file 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 0000000000..38a4f7a975 --- /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 b4949a1ca4..1bfc6ed3e2 100644 --- a/src/main/resources/hermitResources/localization/zhs/CardStrings.json +++ b/src/main/resources/hermitResources/localization/zhs/CardStrings.json @@ -52,7 +52,7 @@ "UPGRADE_DESCRIPTION": "保留 。 NL 造成 !D! 点伤害。 NL 若本回合上张牌触发 hermit:精准 ,抽一张牌。" }, "hermit:Dissolve": { - "NAME": "渐隐", + "NAME": "溶解", "DESCRIPTION": "获得 !B! 点 格挡 。 NL 两回合内 格挡 不会消失 。 NL 消耗 。" }, "hermit:BlackWind": { @@ -74,7 +74,7 @@ "UPGRADE_DESCRIPTION": "固有 。 NL 回合开始时,额外抽2张牌并获得1张 *受伤 。" }, "hermit:Gambit": { - "NAME": "后手策回", + "NAME": "棄子", "DESCRIPTION": "随机将弃牌堆中 !M! 张攻击牌返回手牌。 NL 本回合其单次耗能减1。 NL 消耗 。" }, "hermit:Roughhouse": { diff --git a/src/main/resources/hermitResources/localization/zhs/RelicStrings.json b/src/main/resources/hermitResources/localization/zhs/RelicStrings.json index 1f09f1379c..23e8a5bf75 100644 --- a/src/main/resources/hermitResources/localization/zhs/RelicStrings.json +++ b/src/main/resources/hermitResources/localization/zhs/RelicStrings.json @@ -17,7 +17,8 @@ "NAME": "酒保玻璃杯", "FLAVOR": "任何倒进去的液体都能变成一杯饮料。", "DESCRIPTIONS": [ - "每场战斗最多使用 #b2 瓶药水,战斗中使用药水时,随机生成另外 #b1 瓶。", + "每场战斗最多使用 #b", + " 瓶药水,战斗中使用药水时,随机生成另外 #b1 瓶。", "本场战斗药水使用次数已耗尽。" ] }, @@ -39,7 +40,8 @@ "NAME": "红色围巾", "FLAVOR": "温暖又舒适。", "DESCRIPTIONS": [ - "给予敌人未有的 #r负面效果 时,获得 #b3 点 格挡 。" + "给予敌人未有的 #r负面效果 时,获得 #b", + " 点 格挡 。" ] }, "hermit:DentedPlate": { @@ -60,14 +62,17 @@ "NAME": "烧焦的手套", "FLAVOR": "手套上还残留着部分的尘世灰烬。", "DESCRIPTIONS": [ - "抽到 #y诅咒 时,获得 #b3 层 #y活力 。" + "抽到 #y诅咒 时,获得 #b", + " 层 #y活力 。" ] }, "hermit:ClaspedLocket": { "NAME": "破损的吊坠", "FLAVOR": "再也不会打开了", "DESCRIPTIONS": [ - "替换 #y老旧小盒 。 NL 每回合首次抽到 #y诅咒 时, #y消耗 其并抽 #b2 张牌。 NL 拾起时,将 #b2 张 #y受伤 加入牌组。", + "替换 #y老旧小盒 。 NL 每回合首次抽到 #y诅咒 时, #y消耗 其并抽 #b", + " 张牌。 NL 拾起时,将 #b", + " 张 #y受伤 加入牌组。", "再也……" ] }, @@ -75,28 +80,33 @@ "NAME": "刮胡刀", "FLAVOR": "干净利落。。。", "DESCRIPTIONS": [ - "移除或变化一张牌时,回复 #b15 点生命。" + "移除或变化一张牌时,回复 #b", + " 点生命。" ] }, "hermit:BrassTacks": { "NAME": "破旧铜钉", "FLAVOR": "尽管年深岁久,你仍然能从它们身上感受到昔日的光芒。", "DESCRIPTIONS": [ - "回合结束时,获得 #b2 点 #y格挡 。" + "回合结束时,获得 #b", + " 点 #y格挡 。" ] }, "hermit:BlackPowder": { "NAME": "黑火药", "FLAVOR": "谨慎处理。", "DESCRIPTIONS": [ - "触发 #yhermit:精准 效果时,对所有敌人造成 #b2 点伤害。" + "触发 #yhermit:精准 效果时,对所有敌人造成 #b", + " 点伤害。" ] }, "hermit:BloodyTooth": { "NAME": "兽牙战利品", "FLAVOR": "这颗巨大牙齿不像是从人颚掉落的。。。", "DESCRIPTIONS": [ - "精英战斗获胜时,回复 #b7 点生命并获得 #b35 金币 。" + "精英战斗获胜时,回复 #b", + " 点生命并获得 #b", + " 金币 。" ] } } diff --git a/src/main/resources/hermitResources/localization/zhs/TutorialStrings.json b/src/main/resources/hermitResources/localization/zhs/TutorialStrings.json index d366a35f49..4fdd1dba0a 100644 --- a/src/main/resources/hermitResources/localization/zhs/TutorialStrings.json +++ b/src/main/resources/hermitResources/localization/zhs/TutorialStrings.json @@ -116,17 +116,30 @@ ")" ] }, - "HermitMod:CollectorTutorials": { + "HermitMod:AwakenedOneTutorials": { "TEXT": [ - "收藏家有一副额外牌组,即收藏堆。你每回合从中抽1张牌。", - "战斗胜利时会获得魂粹,可用来将怪物的藏品牌加入收藏堆。" + "觉醒者的咒典内蕴藏着威力强大的咒文牌。", + "打出含有念咒字眼的卡牌时,从咒典中抽一张牌。咒典被清空时会刷新所有咒文。" ], "LABEL": [ "下一条", - "我准备好了!", - "收藏家", + "我准备好了", + "觉醒者", "(页数:", ")" - ] + ], + "HermitMod:CollectorTutorials": { + "TEXT": [ + "收藏家有一副额外牌组,即收藏堆。你每回合从中抽1张牌。", + "战斗胜利时会获得魂粹,可用来将怪物的藏品牌加入收藏堆。" + ], + "LABEL": [ + "下一条", + "我准备好了!", + "收藏家", + "(页数:", + ")" + ] + } } } diff --git a/src/main/resources/hermitResources/localization/zht/CardStrings.json b/src/main/resources/hermitResources/localization/zht/CardStrings.json index 980d0325cc..c0c97960b3 100644 --- a/src/main/resources/hermitResources/localization/zht/CardStrings.json +++ b/src/main/resources/hermitResources/localization/zht/CardStrings.json @@ -74,7 +74,7 @@ "UPGRADE_DESCRIPTION": "固有 。 NL 回合開始時,抽兩張牌並獲得一張 *受傷 。" }, "hermit:Gambit": { - "NAME": "開場白", + "NAME": "棄子", "DESCRIPTION": "隨機將棄牌堆中 !M! 張攻擊牌返回手牌。 NL 本回合其下次耗能減1。 NL 消耗 。" }, "hermit:Roughhouse": { @@ -325,4 +325,4 @@ "NAME": "高尚", "DESCRIPTION": "保留 。 NL 失去所有負面效果 !M! 層。" } -} +} \ No newline at end of file diff --git a/src/main/resources/hermitResources/localization/zht/RelicStrings.json b/src/main/resources/hermitResources/localization/zht/RelicStrings.json index 1e5cb5ea5b..cab2836ae6 100644 --- a/src/main/resources/hermitResources/localization/zht/RelicStrings.json +++ b/src/main/resources/hermitResources/localization/zht/RelicStrings.json @@ -39,7 +39,8 @@ "NAME": "紅色圍巾", "FLAVOR": "溫暖又舒適。", "DESCRIPTIONS": [ - "給予敵人 #r負面狀態 時,獲得 #b2 點 格擋 。" + "給予敵人 #r負面狀態 時,獲得 #b", + " 點 格擋 。" ] }, "hermit:DentedPlate": { @@ -60,7 +61,8 @@ "NAME": "燒焦的手套", "FLAVOR": "手套上還殘留著部分的塵世灰燼。", "DESCRIPTIONS": [ - "抽到 #y詛咒 時,獲得 #b3 層 #y活力 。" + "抽到 #y詛咒 時,獲得 #b", + " 層 #y活力 。" ] }, "hermit:ClaspedLocket": { @@ -75,21 +77,24 @@ "NAME": "刮胡刀", "FLAVOR": "幹凈利落。。。", "DESCRIPTIONS": [ - "移除或變化一張牌時,回復 #b15 點生命。" + "移除或變化一張牌時,回復 #b", + " 點生命。" ] }, "hermit:BrassTacks": { "NAME": "破舊銅釘", "FLAVOR": "盡管年深歲久,你仍然能從它們身上感受到昔日的光芒。", "DESCRIPTIONS": [ - "回合結束時,獲得 #b2 點 #y格擋 。" + "回合結束時,獲得 #b", + " 點 #y格擋 。" ] }, "hermit:BlackPowder": { "NAME": "黑火藥", "FLAVOR": "謹慎處理。", "DESCRIPTIONS": [ - "回合結束時,本回合每觸發過一次 #yhermit:精準 效果就對所有敵人造成 #b2 點傷害。" + "回合結束時,本回合每觸發過一次 #yhermit:精準 效果就對所有敵人造成 #b", + " 點傷害。" ] }, "hermit:BloodyTooth": { diff --git a/src/main/resources/hexamodResources/images/relics/outline/AncientSpiritShield.png b/src/main/resources/hexamodResources/images/relics/outline/AncientSpiritShield.png index 89f44c51b8..ee2e360137 100644 Binary files a/src/main/resources/hexamodResources/images/relics/outline/AncientSpiritShield.png and b/src/main/resources/hexamodResources/images/relics/outline/AncientSpiritShield.png differ diff --git a/src/main/resources/hexamodResources/images/relics/outline/BolsterEngine.png b/src/main/resources/hexamodResources/images/relics/outline/BolsterEngine.png index b7a9e6f7f8..25dca56060 100644 Binary files a/src/main/resources/hexamodResources/images/relics/outline/BolsterEngine.png and b/src/main/resources/hexamodResources/images/relics/outline/BolsterEngine.png differ diff --git a/src/main/resources/hexamodResources/images/relics/outline/CandleOfCauterizing.png b/src/main/resources/hexamodResources/images/relics/outline/CandleOfCauterizing.png index 0c32f8cfaa..38d419ff93 100644 Binary files a/src/main/resources/hexamodResources/images/relics/outline/CandleOfCauterizing.png and b/src/main/resources/hexamodResources/images/relics/outline/CandleOfCauterizing.png differ diff --git a/src/main/resources/hexamodResources/images/relics/outline/IceCube.png b/src/main/resources/hexamodResources/images/relics/outline/IceCube.png index a5d90acf5e..91a493bdd2 100644 Binary files a/src/main/resources/hexamodResources/images/relics/outline/IceCube.png and b/src/main/resources/hexamodResources/images/relics/outline/IceCube.png differ diff --git a/src/main/resources/hexamodResources/images/relics/outline/InflammatoryLetter.png b/src/main/resources/hexamodResources/images/relics/outline/InflammatoryLetter.png index 1f26e96fbf..429152411a 100644 Binary files a/src/main/resources/hexamodResources/images/relics/outline/InflammatoryLetter.png and b/src/main/resources/hexamodResources/images/relics/outline/InflammatoryLetter.png differ diff --git a/src/main/resources/hexamodResources/images/relics/outline/Libra.png b/src/main/resources/hexamodResources/images/relics/outline/Libra.png index 7e3e6f76ba..b6d84b2342 100644 Binary files a/src/main/resources/hexamodResources/images/relics/outline/Libra.png and b/src/main/resources/hexamodResources/images/relics/outline/Libra.png differ diff --git a/src/main/resources/hexamodResources/images/relics/outline/MatchstickCase.png b/src/main/resources/hexamodResources/images/relics/outline/MatchstickCase.png index 4c7ad9f422..811266529d 100644 Binary files a/src/main/resources/hexamodResources/images/relics/outline/MatchstickCase.png and b/src/main/resources/hexamodResources/images/relics/outline/MatchstickCase.png differ diff --git a/src/main/resources/hexamodResources/images/relics/outline/RecyclingMachine.png b/src/main/resources/hexamodResources/images/relics/outline/RecyclingMachine.png index 49db2dcb94..9699503f14 100644 Binary files a/src/main/resources/hexamodResources/images/relics/outline/RecyclingMachine.png and b/src/main/resources/hexamodResources/images/relics/outline/RecyclingMachine.png differ diff --git a/src/main/resources/hexamodResources/images/relics/outline/Sixitude.png b/src/main/resources/hexamodResources/images/relics/outline/Sixitude.png index dd20d69810..1d6667e4c0 100644 Binary files a/src/main/resources/hexamodResources/images/relics/outline/Sixitude.png and b/src/main/resources/hexamodResources/images/relics/outline/Sixitude.png differ diff --git a/src/main/resources/hexamodResources/images/relics/outline/SoulOfChaos.png b/src/main/resources/hexamodResources/images/relics/outline/SoulOfChaos.png index fe7e21bb3c..9387150263 100644 Binary files a/src/main/resources/hexamodResources/images/relics/outline/SoulOfChaos.png and b/src/main/resources/hexamodResources/images/relics/outline/SoulOfChaos.png differ diff --git a/src/main/resources/hexamodResources/images/relics/outline/SoulStone.png b/src/main/resources/hexamodResources/images/relics/outline/SoulStone.png index 913873b907..64bb173b13 100644 Binary files a/src/main/resources/hexamodResources/images/relics/outline/SoulStone.png and b/src/main/resources/hexamodResources/images/relics/outline/SoulStone.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 023a9a9249..57073310a6 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/images/relics/outline/UnbrokenSoul.png b/src/main/resources/hexamodResources/images/relics/outline/UnbrokenSoul.png index 023a9a9249..57073310a6 100644 Binary files a/src/main/resources/hexamodResources/images/relics/outline/UnbrokenSoul.png and b/src/main/resources/hexamodResources/images/relics/outline/UnbrokenSoul.png differ diff --git a/src/main/resources/hexamodResources/localization/KeywordStrings.json b/src/main/resources/hexamodResources/localization/KeywordStrings.json deleted file mode 100644 index 170aa35dc0..0000000000 --- a/src/main/resources/hexamodResources/localization/KeywordStrings.json +++ /dev/null @@ -1,120 +0,0 @@ -[ - { - "PROPER_NAME": "Активный", - "NAMES": [ - "активный", - "активен", - "активного", - "текущий" - ], - "DESCRIPTION": "Текущий (активный) Огонёк может быть #yЗажжён, при выполнении указанных условий." - }, - { - "PROPER_NAME": "Продвижение", - "NAMES": [ - "продвижение", - "продвижении", - "продвигает", - "продвигаете", - "продвигается", - "продвигаетесь" - ], - "DESCRIPTION": "Вы переходите к след. Огоньку и #yТушите его, если был #yЗажжён, или в конце вашего хода. Вы также переходите к след. Огоньку в конце вашего хода." - }, - { - "PROPER_NAME": "Откат", - "NAMES": [ - "откат", - "откате", - "отката", - "откатываете" - ], - "DESCRIPTION": "Вы переходите к предыдущему Огоньку и #yТушите его, если был #yЗажжён." - }, - { - "PROPER_NAME": "Интенсивность", - "NAMES": [ - "интенсивность", - "интенсивности" - ], - "DESCRIPTION": "Интенсивность увеличивает кол-во урона, #yОжога #yдуши и #yЗащиты, накладываемых Огоньками при #yЗажигании." - }, - { - "PROPER_NAME": "Ожог души", - "NAMES": [ - "soulburn", - "soulburned", - "ожог_души", - "ожог", - "ожога", - "ожога_души" - ], - "DESCRIPTION": "Через #b3 хода, враг теряет ОЗ равное кол-ву, наложенного на него, #yОжога #yдуши, снимая этот эффект." - }, - { - "PROPER_NAME": "Тушение", - "NAMES": [ - "тушит", - "тушите", - "потушите", - "тушится" - ], - "DESCRIPTION": "Даёт возможность #yЗажечь Огонёк ещё раз, сбраcывая условия для его #yЗажжения." - }, - { - "PROPER_NAME": "Зажигание", - "NAMES": [ - "ignite", - "force-ignite", - "зажигает", - "зажигаете", - "зажигается", - "зажгите", - "зажжёте", - "зажжёный", - "зажжён", - "зажжётся", - "зажигаются", - "зажжение" - ], - "DESCRIPTION": "Срабатывает эффект Зажжения (описанный при наводе на Огонёк)." - }, - { - "PROPER_NAME": "Печать", - "NAMES": [ - "печать" - ], - "DESCRIPTION": "Если все #b6 различных Печатей были сыграны в этом бою, вы получаете #pСломанную #pПечать и удаляете из колоды все остальные #yПечати." - }, - { - "PROPER_NAME": "Посмертие", - "NAMES": [ - "посмертие", - "посмертием" - ], - "DESCRIPTION": "Если эта карта #yСжигается, её эффект срабатывает." - }, - { - "PROPER_NAME": "Сокрушающий", - "NAMES": [ - "сокрушающий" - ], - "DESCRIPTION": "#yОгонёк. #yЗажигается, когда #b2 #yНавыка были сыграны, пока #yОгонёк #yАктивен. #yЗажигание: наносит #b3 урона случ. врагу дважды." - }, - { - "PROPER_NAME": "Укрепляющий", - "NAMES": [ - "укрепляющий", - "укрепляющего" - ], - "DESCRIPTION": "#yОгонёк. #yЗажигается, когда #yТалант был сыгран, пока #yОгонёк #yАктивенй. #yЗажигание: даёт #b4 #yЗащиты и #b1 #yСилы." - }, - { - "PROPER_NAME": "Обжигающий", - "NAMES": [ - "обжигающий", - "обжигающего" - ], - "DESCRIPTION": "#yОгонёк. #yЗажигается, когда #b2 #yАтаки были сыграны, пока #yОгонёк #yАктивен. #yЗажигание: накладывает #b4 #yОжога #yдуши на случ. врага." - } -] diff --git a/src/main/resources/hexamodResources/localization/deu/CardStrings.json b/src/main/resources/hexamodResources/localization/deu/CardStrings.json new file mode 100644 index 0000000000..94948dfea3 --- /dev/null +++ b/src/main/resources/hexamodResources/localization/deu/CardStrings.json @@ -0,0 +1,566 @@ +{ + "hexamod:AdvancingGuard": { + "NAME": "Vorlaufschutz", + "DESCRIPTION": "Erhalte !B! Block. NL Bewege dich hexamod:vorwärts." + }, + "hexamod:FleetingFlash": { + "NAME": "Aufflackern", + "DESCRIPTION": "hexamod:Entzünde die aktuelle Geisterflamme, und hexamod:lösche sie dann." + }, + "hexamod:ApocalypseNow": { + "NAME": "Apokalypse", + "DESCRIPTION": "Flüchtig. NL Erhalte [E] [E]. NL Bewege dich zur *Inferno Geisterflamme. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Flüchtig. NL Erhalte [E] [E]. NL Bewege dich zur *Inferno Geisterflamme. NL Erschöpft.", + "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 " + }, + "hexamod:Doomsday": { + "NAME": "Jüngstes Gericht", + "DESCRIPTION": "Das nächste Mal, wenn alle !M! Geisterflammen *entzündet sind, hast du einen weiteren Zug nach diesem.", + "UPGRADE_DESCRIPTION": "Das nächste Mal, wenn mindestens !M! Geisterflammen *entzündet sind, hast du einen weiteren Zug nach diesem." + }, + "hexamod:BacktrackSmack": { + "NAME": "Rückhandschelle", + "DESCRIPTION": "Füge 2 Mal !D! Schaden zu. NL Bewege dich hexamod:rückwärts." + }, + "hexamod:BurningQuestion": { + "NAME": "Brennende Frage", + "DESCRIPTION": "Flüchtig. [#e087a4]Reinkarnation.[] NL Erhalte !M! Stärke. NL ", + "EXTENDED_DESCRIPTION": [ + "Erhalte 1 Geschicklichkeit." + ], + "Translator Note":[ + "For card text simplicity, we have designed a new text system for afterlife cards. Now if an Afterlife card has EXTENDED_DESCRIPTION, it means", + "its card description will be the form of DESCRIPTION/UPGRADE_DESCRIPTION + colored EXTENDED_DESCRIPTION (We have built a system to color them)", + "automatically) . Or they only use manual color setting in the DESCRIPTION, because colored text appears in the middle.", + "(Sear, Flames from Beyond and Specter's Wail use this form) Check how they look in game for a detailed view and if you have any", + "questions or issues, contact Mwalls in the loc channel." + ] + }, + "hexamod:BurningTouch": { + "NAME": "Brennender Griff", + "DESCRIPTION": "Wende !burny! hexamod:Seelenfeuer an - zweimal, wenn der Gegner bereits hexamod:Seelenfeuer hat." + }, + "hexamod:CatchUp": { + "NAME": "Spätzünder", + "DESCRIPTION": "hexamod:Entzünde die vorherige Geisterflamme !M! Mal. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "hexamod:Entzünde die vorherige Geisterflamme !M! Mal." + }, + "hexamod:ChargedBarrage": { + "NAME": "Dauerbrenner", + "DESCRIPTION": "Wende !burny! hexamod:Seelenfeuer an. Wiederhole das für jede *entzündete Geisterflamme." + }, + "hexamod:CouncilsJustice": { + "NAME": "Geisterstrafe", + "DESCRIPTION": "Füge !D! Schaden zu. Der Schaden wird für jedes *erschöpfte *Apparieren um !M! erhöht. NL Erschöpft." + }, + "hexamod:Defend": { + "NAME": "Verteidigen", + "DESCRIPTION": "Erhalte !B! Block." + }, + "hexamod:Divider": { + "NAME": "Aufteiler", + "DESCRIPTION": "Füge !D! Schaden zu. NL Wiederhole das für jede *entzündete Geisterflamme." + }, + "hexamod:DynamicBlow": { + "NAME": "Dynamischer Hieb", + "DESCRIPTION": "Flüchtig. NL Wenn die aktuelle Geisterflamme hexamod:entzündet ist, wende !burny! hexamod:Seelenfeuer an. Anderenfalls, füge !D! Schaden zu.", + "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 " + }, + "hexamod:EmpoweredFlame": { + "NAME": "Lichterloh", + "DESCRIPTION": "Erhalte !M! hexamod:Intensität." + }, + "hexamod:EtherealExpedition": { + "NAME": "Flucht zum Äther", + "DESCRIPTION": "Flüchtig. [#e087a4]Reinkarnation.[] NL [#e087a4]Setze[] !M! [#e087a4]zufällige[] [#e087a4]Reinkarnation [#e087a4]Karte[] [#e087a4]ein[] und nimm eine weitere auf die Hand." + }, + "hexamod:ExtraCrispy": { + "NAME": "Restwärme", + "DESCRIPTION": "Wenn hexamod:Seelenfeuer detoniert, dann wende umgehend nach der Detonation !M! hexamod:Seelenfeuer an." + }, + "hexamod:FastForward": { + "NAME": "Vorspulen", + "DESCRIPTION": "Ziehe !M! Karten. NL Bewege dich hexamod:vorwärts.", + "UPGRADE_DESCRIPTION": "hexamod:Entzünde die aktuelle Geisterflamme. NL Bewege dich hexamod:vorwärts." + }, + "hexamod:Firestarter": { + "NAME": "Brandsatz", + "DESCRIPTION": "Füge ALLEN Gegnern !D! Schaden zu und wende !burny! hexamod:Seelenfeuer auf sie an." + }, + "hexamod:FlamesFromBeyond": { + "NAME": "Jenseitsflamme", + "DESCRIPTION": "Flüchtig. [#e087a4]Reinkarnation.[] NL [#e087a4]Wende[] !burny! [#e087a4]Seelenfeuer[] [#e087a4]auf[] [#e087a4]ALLE[] [#e087a4]Gegner[] [#e087a4]an[] - zweimal." + }, + "hexamod:BadOmen": { + "NAME": "Böses Omen", + "DESCRIPTION": "Wähle einen Geisterflammen-Typ. Die aktuelle Geisterflamme wird zum gewählten Typ. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Behalten. NL Wähle einen Geisterflammen-Typ. Die aktuelle Geisterflamme wird zum gewählten Typ. NL Erschöpft.", + "EXTENDED_DESCRIPTION": [ + "Ersetze die aktuelle Geisterflamme durch eine hexamod:Stärkende Geisterflamme", + "Ersetze die aktuelle Geisterflamme durch eine hexamod:Schlagende Geisterflamme", + "Ersetze die aktuelle Geisterflamme durch eine hexamod:Sengende Geisterflamme", + "Tu nichts." + ] + }, + "hexamod:Float": { + "NAME": "Schweben", + "DESCRIPTION": "Ziehe eine Karte. NL Bewege dich hexamod:vorwärts.", + "UPGRADE_DESCRIPTION": "Ziehe eine Karte. NL Du kannst dich NL hexamod:vorwärts oder hexamod:rückwärts bewegen.", + "EXTENDED_DESCRIPTION": ["hexamod:Vorwärts.", "hexamod:Rückwärts.", "Tu nichts."] + }, + "hexamod:MatchstickFloat": { + "NAME": "Magisches Zündholz", + "DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team.", + "UPGRADE_DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team.", + "EXTENDED_DESCRIPTION": ["hexamod:Vorwärts.", "hexamod:Rückwärts.", "Tu nichts."] + }, + "hexamod:Floatwork": { + "NAME": "Schwebekraft", + "DESCRIPTION": "Flüchtig. [#e087a4]Reinkarnation.[] NL Erhalte 1 Geschicklichkeit. NL ", + "EXTENDED_DESCRIPTION": [ + "Erhalte !M! Panzerrüstung." + ] + }, + "hexamod:ForkedFlame": { + "NAME": "Dreizackflamme", + "DESCRIPTION": "Füge !D! Schaden zu. NL hexamod:Entzünde die vorherige, und danach die nächste Geisterflamme.", + "UPGRADE_DESCRIPTION": "Füge !D! Schaden zu. NL hexamod:Entzünde die vorherige, dann die aktuelle, und danach die nächste Geisterflamme." + }, + "hexamod:WhisperFromBeyond": { + "NAME": "Jenseitsgeflüster", + "DESCRIPTION": "Füge !D! Schaden zu. NL Immer wenn eine Karte in diesem Zug erschöpft wird, wende !burny! hexamod:Seelenfeuer auf den Gegner an." + }, + "hexamod:InstantInferno": { + "NAME": "Zündende Idee", + "DESCRIPTION": "Behalten. NL Wende !burny! hexamod:Seelenfeuer an. Wechsle zur Inferno Geisterflamme und hexamod:entzünde sie. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Behalten. NL Wende !burny! hexamod:Seelenfeuer an. NL hexamod:Entzünde die Inferno Geisterflamme. NL Erschöpft." + }, + "hexamod:GhostLash": { + "NAME": "Geisterpeitsche", + "DESCRIPTION": "Flüchtig. [#e087a4]Reinkarnation.[] NL [#e087a4]Füge[] !D! [#e087a4]Schaden[] [#e087a4]zu.[] NL Der Schaden wird für jede andere flüchtige Handkarte um !M! erhöht.", + "EXTENDED_DESCRIPTION": [ + "" + ] + }, + "hexamod:IntoShadow": { + "NAME": "Aus dem Schatten", + "DESCRIPTION": "Flüchtig. NL Immer wenn du dich hexamod:rückwärts bewegst, kostet die nächste gespielte Karte 0 und sie erschöpft.", + "UPGRADE_DESCRIPTION": "Immer wenn du dich hexamod:rückwärts bewegst, kostet die nächste gespielte Karte 0 und sie erschöpft.", + "EXTENDED_DESCRIPTION": [ + "zum Ausspielen und Erschöpfen." + ], + "TRANSLATOR_NOTE": [ + " Vanilla uses hard coded sentence structure for the sentence above", + " its former part is 'Choose a card to ' + above or 'Choose n cards to' + above, where n is a dynamic number.", + " It will dynamically pick one so you only need to translate the verb(to do what)" + ] + }, + "hexamod:DevilsDance": { + "NAME": "Totentanz", + "DESCRIPTION": "Ziehe, wenn du dich das erste Mal im Zug hexamod:vorwärts oder hexamod:rückwärts bewegst, eine Karte.", + "UPGRADE_DESCRIPTION": "Ziehe die ersten !M! Male, an denen du dich im Zug hexamod:vorwärts oder hexamod:rückwärts bewegst, eine Karte." + }, + "hexamod:HereAndNow": { + "NAME": "Hier und Jetzt", + "DESCRIPTION": "Erhalte zu Beginn deines Zuges [E]. NL hexamod:Lösche am Ende jedes Zuges die aktuelle Geisterflamme." + }, + "hexamod:GhostShield": { + "NAME": "Geisterschild", + "DESCRIPTION": "Flüchtig. [#e087a4]Reinkarnation.[] NL Erhalte 1 expansioncontent:Verschwimmen. NL ", + "EXTENDED_DESCRIPTION": [ + "Erhalte !B! Block." + ] + }, + "hexamod:GiftsFromBeyond": { + "NAME": "Gabe der Toten", + "DESCRIPTION": "Nimm zu Beginn des Zuges !M! zufällige hexamod:Reinkarnation Karte auf die Hand.", + "EXTENDED_DESCRIPTION": [ + "Diese Geister sind zu mächtig um sie direkt zu rufen." + ] + }, + "hexamod:HauntedHand": { + "NAME": "Geisterhand", + "DESCRIPTION": "Flüchtig. [#e087a4]Reinkarnation.[] NL Ziehe !M! Karte. NL ", + "UPGRADE_DESCRIPTION": "Flüchtig. [#e087a4]Reinkarnation.[] NL Ziehe !M! Karten. NL ", + "EXTENDED_DESCRIPTION": [ + "Ziehe weiter, bis du eine nicht-flüchtige Karte gezogen hast." + ] + }, + "hexamod:HauntingEcho": { + "NAME": "Schauriges Echo", + "DESCRIPTION": "Füge !D! Schaden zu. NL Wenn die aktuelle Geisterflamme *entzündet ist, dann hexamod:entzünde sie erneut." + }, + "hexamod:HeatCrush": { + "NAME": "Hitzehammer", + "DESCRIPTION": "Füge !D! Schaden zu. NL Der Schaden wird um die Höhe des gegnerischen *Seelenfeuers erhöht." + }, + "hexamod:HeatMetal": { + "NAME": "Heißes Eisen", + "DESCRIPTION": "Füge !D! Schaden zu. NL Wende !burny! hexamod:Seelenfeuer und !M! Verwundbar an." + }, + "hexamod:HeatShield": { + "NAME": "Hitzeschild", + "DESCRIPTION": "Erhalte Block in Höhe des *Seelenfeuers. Verzögere die Detonation des *Seelenfeuers um 1 Zug. Erschöpft.", + "UPGRADE_DESCRIPTION": "Erhalte Block in Höhe des *Seelenfeuers. Verzögere die Detonation des *Seelenfeuers um 1 Zug.", + "EXTENDED_DESCRIPTION": [ + " NL (Erhalte !B! Block.)" + ] + }, + "hexamod:Hexaguard": { + "NAME": "Hexaschutz", + "DESCRIPTION": "Flüchtig. [#e087a4]Reinkarnation.[] NL Ziehe !M! Karten. NL ", + "EXTENDED_DESCRIPTION": [ + "Erhalte !B! Block." + ] + }, + "hexamod:InfernalForm": { + "NAME": "Infernale Form", + "DESCRIPTION": "Zu Beginn deines Zuges erhältst du !M! hexamod:Intensität.", + "UPGRADE_DESCRIPTION": "Erhalte !M! hexamod:Intensität. NL Zu Beginn deines Zuges erhältst du !M! hexamod:Intensität." + }, + "hexamod:Incineration": { + "NAME": "Einäscherung", + "DESCRIPTION": "Füge !M! Mal !D! Schaden zu und wende !M! Mal !burny! hexamod:Seelenfeuer an." + }, + "hexamod:StokeTheFire": { + "NAME": "Anheizen", + "DESCRIPTION": "Erhalte !B! Block. NL Verbessere für jede *entzündete Geisterflamme eine zufällige Handkarte in diesem Kampf." + }, + "hexamod:NecessarySacrifice": { + "NAME": "Würdiges Opfer", + "DESCRIPTION": "Erschöpfe 2 Karten. NL Angriffe und Fertigkeiten werden in den jeweils anderen Typ expansioncontent:transformiert.", + "UPGRADE_DESCRIPTION": "Erschöpfe 2 Karten. NL Angriffe und Fertigkeiten werden in den jeweils anderen Typ expansioncontent:transformiert und verbessert.", + "EXTENDED_DESCRIPTION": [ + "Erschöpfe für ein würdiges Opfer." + ] + }, + "hexamod:NightmareGuise": { + "NAME": "Albtraumgestalt", + "DESCRIPTION": "Flüchtig. [#e087a4]Reinkarnation.[] NL Erhalte !B! Block. NL [#e087a4]Erhalte[] [#e087a4]eine[] [#e087a4]Schattengestalt.[]", + "UPGRADE_DESCRIPTION": "Flüchtig. [#e087a4]Reinkarnation.[] NL Erhalte !B! Block. NL [#e087a4]Erhalte[] [#e087a4]eine[] [#e087a4]Schattengestalt+.[]" + }, + "hexamod:NightmareStrike": { + "NAME": "Albtraumschlag", + "DESCRIPTION": "Flüchtig. [#e087a4]Reinkarnation.[] NL Füge !D! Schaden zu. NL [#e087a4]Erhalte[] [#e087a4]einen[] [#e087a4]Schattenschlag.[]", + "UPGRADE_DESCRIPTION": "Flüchtig. [#e087a4]Reinkarnation.[] NL Füge !D! Schaden zu. NL [#e087a4]Erhalte[] [#e087a4]einen[] [#e087a4]Schattenschlag+.[]" + }, + "hexamod:Poltergeist": { + "NAME": "Poltergeist", + "DESCRIPTION": "Immer wenn du eine flüchtige Karte spielst, verliert ein zufälliger Gegner !M! TP." + }, + "hexamod:PhantomCloak": { + "NAME": "Geistermantel", + "DESCRIPTION": "Flüchtig. NL Erhalte !M! Geschicklichkeit und verliere 1 Stärke." + }, + "hexamod:PhantomFireball": { + "NAME": "Zündung", + "DESCRIPTION": "Füge !D! Schaden zu. NL Wenn der Gegner *Seelenfeuer hat, detoniere es vollständig.", + "UPGRADE_DESCRIPTION": "Füge !D! Schaden zu. NL Wenn der Gegner *Seelenfeuer hat, detoniere es bis auf 1." + }, + "hexamod:PowerFromBeyond": { + "NAME": "Macht der Geister", + "DESCRIPTION": "Flüchtig. [#e087a4]Reinkarnation.[] NL [#e087a4]Im[] [#e087a4]nächsten[] [#e087a4]Zug,[] [#e087a4]ziehe[] !M! [#e087a4]Karten[] und NL erhalte [E]. NL ", + "UPGRADE_DESCRIPTION": "Flüchtig. [#e087a4]Reinkarnation.[] NL [#e087a4]Im[] [#e087a4]nächsten[] [#e087a4]Zug,[] [#e087a4]ziehe[] !M! [#e087a4]Karten[] und NL erhalte [E] [E]. NL ", + "EXTENDED_DESCRIPTION": [ + "" + ] + }, + "hexamod:Premonition": { + "NAME": "Vorahnung", + "DESCRIPTION": "Wähle einen Kartentyp. Spiele eine zufällige Karte dieses Typen aus dem Nachziehstapel. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Wähle einen Kartentyp. Spiele eine zufällige Karte dieses Typen aus dem Nachziehstapel.", + "EXTENDED_DESCRIPTION": [ + "zum Ausspielen und Erschöpfen." + ] + }, + "hexamod:RadiantFlame": { + "NAME": "Flammentausch", + "DESCRIPTION": "Füge !D! Schaden zu. NL Entferne das *Seelenfeuer des Gegners um !M! hexamod:Intensität zu erhalten." + }, + "hexamod:RainOfEmbers": { + "NAME": "Ascheregen", + "DESCRIPTION": "Füge X Mal !D! Schaden zu und wende X Mal !M! Schwach an.", + "UPGRADE_DESCRIPTION": "Füge X+1 Mal !D! Schaden zu und wende X+1 Mal !M! Schwach an." + }, + "hexamod:NightmareVision": { + "NAME": "Albtraumvisionen", + "DESCRIPTION": "Bewege dich Hexamod:rückwärts. NL expansioncontent:Exhumiere eine *flüchtige Karte. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Bewege dich Hexamod:rückwärts. NL expansioncontent:Exhumiere !M! *flüchtige Karten. NL Erschöpft.", + "EXTENDED_DESCRIPTION": [ + "Wähle eine flüchtige Karte und nimm sie auf die Hand.", + "Wähle ", + " flüchtige Karten und nimm sie auf die Hand." + ] + }, + "hexamod:Incorporeal": { + "NAME": "Unkörperlich", + "DESCRIPTION": "Bewege dich Hexamod:rückwärts. NL Verliere !M! TP. NL Erhalte 1 Immateriell. NL Erschöpft." + }, + "hexamod:Rewind": { + "NAME": "Zurückspulen", + "DESCRIPTION": "Bewege dich Hexamod:rückwärts. NL Schnappe eine Karte vom Abwurfstapel. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Bewege dich Hexamod:rückwärts. NL Schnappe !M! Karten vom Abwurfstapel. NL Erschöpft." + }, + "hexamod:Sear": { + "NAME": "Versengen", + "DESCRIPTION": "Flüchtig. [#e087a4]Reinkarnation. NL Füge !D! Schaden zu. NL [#e087a4]Wende[] !burny! [#e087a4]Seelenfeuer[] [#e087a4]an.[]" + }, + "hexamod:SearingWound": { + "NAME": "Brandblasen", + "DESCRIPTION": "ALLE Gegner verlieren TP in Höhe ihres *Seelenfeuers. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "ALLE Gegner verlieren TP in Höhe ihres *Seelenfeuers." + }, + "hexamod:ShadowGuise": { + "NAME": "Schattengestalt", + "DESCRIPTION": "Behalten. NL Erhalte !B! Block. NL Erschöpft." + }, + "hexamod:ShadowStrike": { + "NAME": "Schattenschlag", + "DESCRIPTION": "Behalten. NL Füge !D! Schaden zu. NL Erschöpft." + }, + "hexamod:ShieldOfDarkness": { + "NAME": "Nachtschild", + "DESCRIPTION": "Erhalte !B! Block. NL Spähe !M!. NL Erschöpfe abgeworfene *flüchtige Karten." + }, + "hexamod:Kindle": { + "NAME": "Anfachen", + "DESCRIPTION": "Wenn die aktuelle Geisterflamme nicht *entzündet ist, dann hexamod:entzünde sie.", + "UPGRADE_DESCRIPTION": "hexamod:Entzünde die aktuelle Geisterflamme." + }, + "hexamod:LivingBomb": { + "NAME": "Lebendige Bombe", + "DESCRIPTION": "Wende !burny! hexamod:Seelenfeuer. Wenn das Seelenfeuer detoniert, verlieren ALLE Gegner TP." + }, + "hexamod:SpectersWail": { + "NAME": "Gespenstergeheul", + "DESCRIPTION": "Flüchtig. [#e087a4]Reinkarnation.[] NL [#e087a4]Füge[] [#e087a4]ALLEN[] [#e087a4]Gegnern[] !D! [#e087a4]Schaden[] [#e087a4]zu[] - zweimal." + }, + "hexamod:BrightRitual": { + "NAME": "Grelles Ritual", + "DESCRIPTION": "Spring zur ersten Geisterflamme, hexamod:lösche alle, erhalte [E] und ziehe 1 Karte pro *gelöschter. Erschöpft." + }, + "hexamod:NaughtySpirit": { + "NAME": "Frecher Geist", + "DESCRIPTION": "Wende !burny! hexamod:Seelenfeuer an. Ist die aktuelle Geisterflamme hexamod:entzündet, nimm diese Karte auf die Hand und bewege dich hexamod:rückwärts." + }, + "hexamod:StepThrough": { + "NAME": "Durchschreiten", + "DESCRIPTION": "Füge !D! Schaden zu. NL Ziehe für jede *entzündete Geisterflamme 1 Karte." + }, + "hexamod:Strike": { + "NAME": "Schlag", + "DESCRIPTION": "Füge !D! Schaden zu." + }, + "hexamod:StrikeFromBeyond": { + "NAME": "Jenseitsschlag", + "DESCRIPTION": "Füge !D! Schaden zu. NL Ziehe eine *flüchtige Karte vom Nachziehstapel.", + "EXTENDED_DESCRIPTION": ["Flüchtig","Flüchtig. NL "] + }, + "hexamod:SuperheatedStrike": { + "NAME": "Sengender Schlag", + "DESCRIPTION": "Flüchtig. NL Füge !D! Schaden zu. NL Wende !burny! hexamod:Seelenfeuer an. NL Erleide !M! Schaden wenn diese Karte *erschöpft.", + "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 " + }, + "hexamod:SwordOfDarkness": { + "NAME": "Nachtschwert", + "DESCRIPTION": "Füge !D! Schaden zu. NL Spähe !M!. NL Erschöpfe abgeworfene *flüchtige Karten." + }, + "hexamod:ThermalTransfer": { + "NAME": "Thermotransfer", + "DESCRIPTION": "Füge !D! Schaden zu. NL Erhalte !B! Block, wenn der Gegner *Seelenfeuer hat." + }, + "hexamod:TimeOfNeed": { + "NAME": "Zeit der Not", + "DESCRIPTION": "Behalten. NL Nimm eine zufällige Macht auf die Hand. Sie kostet 1 weniger. NL Erschöpft." + }, + "hexamod:TimeWarp": { + "NAME": "Zeitsprung", + "DESCRIPTION": "Füge !D! Schaden zu. NL Nimm diese Karte vom Abwurfstapel auf die Hand, immer wenn du dich hexamod:vorwärts oder hexamod:rückwärts bewegst." + }, + "hexamod:FlareFlick": { + "NAME": "Zündender Funke", + "DESCRIPTION": "Füge !D! Schaden zu. NL hexamod:Entzünde die aktuelle Geisterflamme und bewege dich hexamod:vorwärts.", + "UPGRADE_DESCRIPTION": "Füge !D! Schaden zu. NL hexamod:Entzünde die aktuelle Geisterflamme. Du kannst dich NL hexamod:vorwärts oder hexamod:rückwärts bewegen.", + "EXTENDED_DESCRIPTION": ["hexamod:Vorwärts.", "hexamod:Rückwärts.", "Tu nichts."] + }, + "hexamod:TurnItUp": { + "NAME": "Aufgedreht", + "DESCRIPTION": "Erhalte für diesen Zug *temporär !M! hexamod:Intensität, !M! Stärke, und NL !M! Geschicklichkeit.", + "UPGRADE_DESCRIPTION": "Behalten. NL Erhalte für diesen Zug temporär !M! hexamod:Intensität, !M! Stärke, und NL !M! Geschicklichkeit." + }, + "hexamod:UnleashSpirits": { + "NAME": "Geister rufen", + "DESCRIPTION": "Füge einem zufälligen Gegner !D! Schaden zu. NL Wiederhole das für jede Karte, die im letzten Zug *erschöpft wurde.", + "UPGRADE_DESCRIPTION": " NL (Trifft !M! Mal.)" + }, + "hexamod:UnlimitedPower": { + "NAME": "Hexaflamme", + "DESCRIPTION": "hexamod:Entzünde alle Geisterflammen im Uhrzeigersinn. NL Erschöpft." + }, + "hexamod:VolcanoVisage": { + "NAME": "Vulkanvisage", + "DESCRIPTION": "Wende immer, wenn du eine Geisterflamme hexamod:entzündest, !M! hexamod:Seelenfeuer auf ALLE Gegner an." + }, + "hexamod:WildfireWeapon": { + "NAME": "Brandstiftung", + "DESCRIPTION": "Immer wenn du ungeblockten Angriffsschaden zufügst, wende !M! hexamod:Seelenfeuer an.", + "Translate_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 " + }, + "hexamod:FirstSeal": { + "NAME": "Erstes Siegel", + "DESCRIPTION": "Flüchtig hexamod:Siegel. NL Heile !M! TP am Ende des Kampfes.", + "UPGRADE_DESCRIPTION": "hexamod:Siegel. NL Heile !M! TP am Ende des Kampfes." + }, + "hexamod:SecondSeal": { + "NAME": "Zweites Siegel", + "DESCRIPTION": "Flüchtig hexamod:Siegel. NL Erhalte am Ende des Kampfes zusätzlich !M! Gold.", + "UPGRADE_DESCRIPTION": "hexamod:Siegel. NL Erhalte am Ende des Kampfes zusätzlich !M! Gold." + }, + "hexamod:ThirdSeal": { + "NAME": "Drittes Siegel", + "DESCRIPTION": "Flüchtig hexamod:Siegel. NL Erhalte am Ende des Kampfes eine zusätzliche Kartenbelohnung.", + "UPGRADE_DESCRIPTION": "hexamod:Siegel. NL Erhalte am Ende des Kampfes eine zusätzliche Kartenbelohnung." + }, + "hexamod:FourthSeal": { + "NAME": "Viertes Siegel", + "DESCRIPTION": "Flüchtig hexamod:Siegel. NL Erhalte am Ende des Kampfes einen zusätzlichen Trank.", + "UPGRADE_DESCRIPTION": "hexamod:Siegel. NL Erhalte am Ende des Kampfes einen zusätzlichen Trank." + }, + "hexamod:FifthSeal": { + "NAME": "Sechstes Siegel", + "DESCRIPTION": "Flüchtig hexamod:Siegel. NL Erhöhe am Ende des Kampfes deine max. TP um !M!.", + "UPGRADE_DESCRIPTION": "hexamod:Siegel. NL Erhöhe am Ende des Kampfes deine max. TP um !M!." + }, + "hexamod:SixthSeal": { + "NAME": "Fünftes Siegel", + "DESCRIPTION": "Flüchtig hexamod:Siegel. NL Verbessere am Ende des Kampfes 1 zufällige Karte für alle 13 unverbesserten Karten im Deck.", + "UPGRADE_DESCRIPTION": "hexamod:Siegel. NL Verbessere am Ende des Kampfes 1 zufällige Karte für alle 13 unverbesserten Karten im Deck.", + "EXTENDED_DESCRIPTION": [ + "(Verbessert ", + " Karte.) NL ", + " Karten.) NL " + ] + }, + "hexamod:LingeringShades": { + "NAME": "Weilende Schatten", + "DESCRIPTION": "Bewege dich hexamod:rückwärts. NL Wende !burny! hexamod:Seelenfeuer an. Nimm alle flüchtigen Karten im Abwurfstapel auf die Hand." + }, + "hexamod:EtherStep": { + "NAME": "Ätherschritt", + "DESCRIPTION": "Flüchtig. [#e087a4]Reinkarnation.[] NL [#e087a4]Füge[] !D! [#e087a4]Schaden[] [#e087a4]zu.[] NL Erschöpfe eine Karte. NL Ziehe !M! Karte.", + "UPGRADE_DESCRIPTION": "Flüchtig. [#e087a4]Reinkarnation.[] NL [#e087a4]Füge[] !D! [#e087a4]Schaden[] [#e087a4]zu.[] NL Erschöpfe eine Karte. NL Ziehe !M! Karten." + }, + "hexamod:OpposingAction": { + "NAME": "Entgegensetzen", + "DESCRIPTION": "Bewege dich hexamod:rückwärts. NL Erhalte [E] [E]. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Bewege dich hexamod:rückwärts. NL Erhalte [E] [E] [E]. NL Erschöpft." + }, + "hexamod:SeventhEye": { + "NAME": "Siebtes Auge", + "DESCRIPTION": "Schnappe eine Karte vom Nachziehstapel. NL Spring auf eine zufällige Geisterflamme. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Schnappe eine Karte vom Nachziehstapel. NL Spring auf eine zufällige Geisterflamme. NL Erschöpft." + }, + "hexamod:FlameDevourer": { + "NAME": "Pyrovor", + "DESCRIPTION": "Wenn die vorherige Geisterflamme *entzündet ist, bewege dich hexamod:rückwärts und erhalte !B! Block." + }, + "hexamod:SpectralGrace": { + "NAME": "Geistergrazie", + "DESCRIPTION": "Wirf !M! Karten ab. NL Füge !D! Schaden zu.", + "UPGRADE_DESCRIPTION": "Wirf !M! Karten ab. NL Füge !D! Schaden zu." + }, + "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": "Lebendige Bombe", + "DESCRIPTION": "Wende !burny! hexamod:Seelenfeuer. Wenn das Seelenfeuer detoniert, verlieren ALLE Gegner TP." + }, + "hexamod:ApocalypticArmor": { + "NAME": "Jüngstes Gericht", + "DESCRIPTION": "Das nächste Mal, wenn alle !M! Geisterflammen *entzündet sind, hast du einen weiteren Zug nach diesem.", + "UPGRADE_DESCRIPTION": "Das nächste Mal, wenn min. !M! Geisterflammen *entzündet sind, hast du einen weiteren Zug nach diesem." + }, + "hexamod:RetreatToShadows": { + "NAME": "Unkörperlich", + "DESCRIPTION": "Bewege dich Hexamod:rückwärts. NL Verliere !M! TP. NL Erhalte 1 Immateriell. NL Erschöpft." + }, + "hexamod:SpectralSpark": { + "NAME": "Frecher Geist", + "DESCRIPTION": "Wende !burny! hexamod:Seelenfeuer an. Ist die aktuelle Geisterflamme hexamod:entzündet, nimm diese Karte auf die Hand und bewege dich hexamod:rückwärts." + }, + "hexamod:Toasty": { + "NAME": "Zündender Funke", + "DESCRIPTION": "Füge !D! Schaden zu. NL hexamod:Entzünde die aktuelle Geisterflamme und bewege dich hexamod:vorwärts.", + "UPGRADE_DESCRIPTION": "Füge !D! Schaden zu. NL hexamod:Entzünde die aktuelle Geisterflamme. Bewege dich hexamod:vorwärts oder hexamod:rückwärts." + }, + "hexamod:ParanormalForm": { + "NAME": "Poltergeist", + "DESCRIPTION": "Immer wenn du eine flüchtige Karte spielst, verliert ein zufälliger Gegner !M! TP." + }, + "hexamod:RecurringNightmare": { + "NAME": "Albtraumvisionen", + "DESCRIPTION": "Bewege dich Hexamod:rückwärts. NL expansioncontent:Exhumiere eine *flüchtige Karte. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Bewege dich Hexamod:rückwärts. NL expansioncontent:Exhumiere !M! *flüchtige Karten. NL Erschöpft.", + "EXTENDED_DESCRIPTION": [ + "Wähle eine flüchtige Karte und nimm sie auf die Hand.", + "Wähle ", + " flüchtige Karten und nimm sie auf die Hand." + ] + }, + "hexamod:Haunt": { + "NAME": "Geisterhand", + "DESCRIPTION": "Flüchtig. [#e087a4]Reinkarnation.[] NL Ziehe !M! Karte. NL ", + "UPGRADE_DESCRIPTION": "Flüchtig. [#e087a4]Reinkarnation.[] NL Ziehe !M! Karten. NL ", + "EXTENDED_DESCRIPTION": [ + "Ziehe weiter, bis du eine nicht-flüchtige Karte gezogen hast." + ] + }, + "hexamod:InspiringFlames": { + "NAME": "Anheizen", + "DESCRIPTION": "Erhalte !B! Block. NL Verbessere für jede *entzündete Geisterflamme eine zufällige Handkarte in diesem Kampf." + }, + "hexamod:SpectralAdrenaline": { + "NAME": "Grelles Ritual", + "DESCRIPTION": "Erhalte [E] und ziehe 1 Karte für jede *entzündete Geisterflamme. hexamod:Lösche alle Geisterflammen. NL Erschöpft." + }, + "hexamod:GhostOfSpirePresent": { + "NAME": "Hier und Jetzt", + "DESCRIPTION": "Erhalte zu Beginn deines Zuges [E]. NL hexamod:Lösche am Ende jedes Zuges die aktuelle Geisterflamme." + }, + "hexamod:GhostOfSpirePast": { + "NAME": "Totentanz", + "DESCRIPTION": "Ziehe, wenn du dich das erste Mal im Zug hexamod:vorwärts oder hexamod:rückwärts bewegst, eine Karte.", + "UPGRADE_DESCRIPTION": "Ziehe die ersten !M! Male, an denen du dich im Zug hexamod:vorwärts oder hexamod:rückwärts bewegst, eine Karte." + }, + "hexamod:GhostOfSpireFuture": { + "NAME": "Aus dem Schatten", + "DESCRIPTION": "Flüchtig. NL Immer wenn du dich hexamod:rückwärts bewegst, spiele eine Handkarte und erschöpfe sie.", + "UPGRADE_DESCRIPTION": "Immer wenn du dich hexamod:rückwärts bewegst, spiele eine Handkarte und erschöpfe sie.", + "EXTENDED_DESCRIPTION": [ + "zum Ausspielen und Erschöpfen." + ] + }, + "hexamod:HexaLevel": { + "NAME": "Infernale Form", + "DESCRIPTION": "Zu Beginn deines Zuges erhältst du !M! hexamod:Intensität.", + "UPGRADE_DESCRIPTION": "Erhalte !M! hexamod:Intensität. NL Zu Beginn deines Zuges erhältst du !M! hexamod:Intensität." + }, + "hexamod:SkipABeat": { + "NAME": "Anfachen", + "DESCRIPTION": "Wenn die aktuelle Geisterflamme nicht *entzündet ist, dann hexamod:entzünde sie.", + "UPGRADE_DESCRIPTION": "hexamod:Entzünde die aktuelle Geisterflamme." + }, + "hexamod:FlameSwitch": { + "NAME": "Böses Omen", + "DESCRIPTION": "Wähle einen Geisterflammen-Typ. Die aktuelle Geisterflamme wird zum gewählten Typ. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Behalten. NL Wähle einen Geisterflammen-Typ. Die aktuelle Geisterflamme wird zum gewählten Typ. NL Erschöpft.", + "EXTENDED_DESCRIPTION": [ + "Ersetze die aktuelle Geisterflamme durch eine hexamod:Stärkende Geisterflamme", + "Ersetze die aktuelle Geisterflamme durch eine hexamod:Schlagende Geisterflamme", + "Ersetze die aktuelle Geisterflamme durch eine hexamod:Sengende Geisterflamme", + "Tu nichts." + ] + } +} diff --git a/src/main/resources/hexamodResources/localization/deu/CharacterStrings.json b/src/main/resources/hexamodResources/localization/deu/CharacterStrings.json new file mode 100644 index 0000000000..7d4d10779e --- /dev/null +++ b/src/main/resources/hexamodResources/localization/deu/CharacterStrings.json @@ -0,0 +1,13 @@ +{ + "hexamod:theHexaghost": { + "NAMES": [ + "Der Hexageist", + "der Hexageist" + ], + "TEXT": [ + "Ein verfluchter Geist des Spire. NL Fristet ein ewiges Dasein als Beschützer des Spire.", + "NL Du sammelst den brennenden Hass der Toten an...", + "Auf einer unbeleuchteten Straße triffst du auf ein paar vermummte Gestalten, die gerade mitten in irgendeinem dunklen Ritual sind. Als du näher kommst, wenden sie sich dir in gespenstischem Gleichklang zu. Der Größte von ihnen entblößt Fangzähne und streckt eine lange, blasse Hand nach dir aus. NL ~„Schließ~ ~dich~ ~uns~ ~an,~ ~oh~ ~Schrecklicher,~ ~und~ ~spüre~ ~die~ ~Wärme~ ~des~ ~Spire.“~" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/hexamodResources/localization/deu/EventStrings.json b/src/main/resources/hexamodResources/localization/deu/EventStrings.json new file mode 100644 index 0000000000..63e035cb5c --- /dev/null +++ b/src/main/resources/hexamodResources/localization/deu/EventStrings.json @@ -0,0 +1,96 @@ +{ + "hexamod:WanderingSpecter": { + "NAME": "Wanderndes Gespenst", + "DESCRIPTIONS": [ + "Dieser Bereich sieht sehr nach einem #pFriedhof aus. Du gehst vorsichtig weiter, bis du plötzlich von einer eigenartigen, matten ~Geistererscheinung~ aufgehalten wirst. Sie streckt beide Arme aus - offensichtlich bietet sie dir ein #rGeschäft an. NL NL Du erkennst, dass sich in jeder Hand ein wertvolles #bRelikt befindet, doch du kannst nicht genau erkennen, welche es sind. Bestimmt müssen diese Gaben hoch #rbezahlt werden.", + "Du dankst der Erscheinung für das Geschäft. Das #bGespenst sieht dich ein letztes Mal angestrengt an und setzt dann seinen ~endlosen~ ~Marsch~ fort. Auch du setzt deine Reise fort. ", + "Die schillernde weiße Schachtel @zerbricht@ sofort nachdem du sie in die Hand nimmst! Während du die Seelen aufsammelst, die aus der zerbrochenen Schatel empor steigen, bewegt sich ein #pschwarzer #pSpliitter und ~bohrt~ sich direkt in deinen Körper.", + "Du spürst die #pDunkelheit durch dich strömen, gleich nachdem du die eigenartige #ygoldene Schachtel geöffnet hast. Darin befindet sich eine nützliche Waffe!", + "Du nimmst die pulsierende Schachtel, die wie ein Herz @SCHLÄGT,@ und fühlst den @PULS@ in deinem Arm. #pÜbelkeit macht sich in dir breit, doch du fühlst dich stärker mit ihr...", + "Nachdem du das Artefakt der Gestalt gegriffen hast, wird der Raum von #pDunkelheit erfüllt. Das Gespenst spricht erneut zu dir, doch hörst du seine Worte nur in deinem Kopf. NL NL #p„Deine #pWahl #pwar #pweise. #pWie #pwäre #pes #pmit #peinem #pweiteren #pGeschäft, #pmein #pFreund?“", + "Du weißt, dass die Geschäfte des #pGespenstes einen zu hohen Tribut abverlangen. Du musst es verjagen - was für ein glücklicher Zufall! Drüben an der Wand! Eine #bKerze, die #bFlüche #bbannt! NL NL Du #rversengst #rdich ein wenig als du nach der Kerze schnappst, und wirfst sie in Richtung des Gespenstes, das sich in einen #bschaurigen #bNebel auflöst. NL NL Es kann keine Geschäfte mehr machen.", + "Du weißt, dass die Geschäfte des #pGespenstes einen zu hohen Tribut abverlangen. Du musst es verjagen - was für ein glücklicher Zufall! Du hast eine #bKerze, die #bFlüche #bbannt dabei! NL NL Du wirfst sie in Richtung des Gespenstes, das sich in einen #bschaurigen #bNebel auflöst. NL NL Es kann keine Geschäfte mehr machen." + ], + "OPTIONS": [ + "[Links] #gErhalte #geine #gDu-Vu-Puppe oder #gein #gDunkelstein-Amulett und #r2x #rSpuk.", + "[Weitere Geschäfte]", + "[Rechts] #gErhalte #geinen #rEntweihten #gSchlüssel oder #geine #grEntweihte #gRufglocke.", + "[Verjagen] #gErhalte #geine #bfluchbannende #bKerze. #rVerliere #r5 #rTP.", + "[Verjagen] Verlassen.", + "[Verlange Macht] #gErhalte eine #gzufällige #yseltene #gKarte. #rVerflucht #r- #rzufällig.", + "[Verlange Leben] #gErhalte #g12 #gmax. #gTP. #rVerflucht #r- #rzufällig.", + "[Verlange Seelen] #gErhalte #g180 #gSeelen. #rVerflucht #r- #rzufällig.", + "[Gesperrt] Geschäft abgeschlossen.", + "[Verlassen]" + ] + }, + "hexamod:SealChamber": { + "NAME": "Siegelkammer", + "DESCRIPTIONS": [ + "Vor dir steht ein bedrohlich wirkendes Bauwerk. Die meisten würden es nicht wagen, sich ihm zu nähern, doch du weißt um den Zweck des Bauwerks bescheid. NL Du betrittst die Kammer und machst dich bereit, ein #rOpfer zu geben...", + "Du erhältst ein Siegel im Austausch deiner gesammelten Seelen - ein weiterer Schritt zur ultimativen Macht. ", + "Du überlegst es dir anders und entscheidest dich dagegen, ein Opfer zu bringen. Du brauchst alles was du gerade hast für deine weitere Reise.", + "Dieses Siegel wird für die bevorstehenden Kämpfe den meisten Nutzen erbringen." + ], + "OPTIONS": [ + "[Opfern] #rVerliere ", + " TP. #gErhalte #gdas #gErste #gSiegel.", + " #ySeelen. #gErhalte #gdas #gZweite #gSiegel.", + ". #gErhalte #gdas #gDritte #gSiegel.", + ". #gErhalte #gdas #gVierte #gSiegel.", + "[Gesperrt] Erfordert mehr Gold.", + "[Gesperrt] Erfordert eine gewöhnliche Karte.", + "[Gesperrt] Erfordert einen Trank.", + "[Verlassen]", + "[Gesperrt] Opfer gebracht.", + ". #gErhalte #gdas #gFünfte #gSiegel.", + "[Gesperrt] Erfordert eine verbesserte Karte.", + " max. TP. #gErhalte #gdas #gSechste #gSiegel.", + "[Gesperrt] Erfordert 2 max. TP." + ] + }, + "hexamod:HexaFalling": { + "NAME": "Freier Fall", + "DESCRIPTIONS": [ + "Unbeeindruckt von den Gesetzen der Schwerkraft ~schwebst~ du einfach weiter.", + " NL ... oder du schwebst einfach drüber." + ], + "Translator Note": "the second sentence above is added after the vanilla one, which offers 3 choices [land](skill), [channel](power) and [strike](attack), you can preview below", + "preview": "Im freien Fall wägst du deine Optionen ab: Mit deiner besten Technik sicher landen. Eine Macht kanalisieren, um den Sturz zu überleben. In die Wand schlagen, um daran hängenzubleiben.", + "OPTIONS": [ + "[Schweben] #gVerliere #gnichts...", + "[Verlassen]" + ] + }, + "hexamod:CouncilOfGhosts": { + "NAME": "Rat der Geister", + "DESCRIPTIONS": [ + "Beim weiteren Aufstieg beginnt #p~dicker~ #p~schwarzer~ #pRauch aus dem Boden und Wänden um dich herum zu quillen, welcher sich zu drei maskierten Gestalten formt, die zu sprechen beginnen. NL NL ~„Dieses~ ~Wesen~ ~ist~ #r~verdammt...“~ NL „Wir verstehen deine Misere, #pVerfluchter... möchstest du unsere #y~Geheimnisse~ erfahren?“", + "#y„Exzellent!“ NL Du bemerkst, wie sich bei den Worten der Geisterfigur ihr riesiger Mund weiter und weiter öffnet. #p~Dicker~ #p~schwarzer~ #p~Rauch~ quillt hervor und verhüllt den Raum. Du kannst weder sehen noch atmen...", + "Während du noch immer vom #p~schwarzen~ #p~Rauch~ umgeben bist, verfault dein Körper mehr, doch dein Geist #pbrennt #pheller als jemals zuvor. NL Du verstehst jetzt wie das Körperliche und Unkörperliche auf solche Weisen verbunden sind, die deine kühnsten Vorstellungen übersteigen.", + "Inmitten der Dunkelheit siehst du mit ungetrübtem Auge. Die Geister haben dir gezeigt, wie du deine Form meisterst - wie du mit Leichtigkeit in diese und die andere Welt übergehen kannst.", + "„Viel Erfolg, #pVerfluchter...“ NL ~„Wir~ ~bleiben~ ~hier~ ~um~ ~anderen~ ~zu~ ~helfen...“~ NL #r@„HA@ #r@HA@ #r@HA@ #r@HAHAHA!“@ NL NL Du bist dir nicht sicher, warum der letzte Geist, der den Rat verlassen hat, lachte. Doch du bist in erster Linie dankbar dafür, dass sie dich in ihre Geheimnisse eingeweiht haben.", + "„Wie enttäuschend...“ NL ~„Du~ ~wirst~ ~diesm~ ~Ort~ ~niemals~ ~entkommen...“~ NL #r@„HA@ #r@HA@ #r@HA@ #r@HAHAHA!“@ NL NL Die Formen verblassen, nur das nervtötende Lachen klingt in deinen Ohren nach." + ], + "OPTIONS": [ + "[Annehmen] #rVerliere #r", + " #rmax. #rTP. Schalte Studieren und Lernen frei.", + "[Studieren] #rVerliere #ralle #rSchläge. #gErhalte #g3 #gGeisterstrafen.", + "[Lernen] #rVerliere #ralle #rVerteidigen Karten. #gErhalte #g", + "[Abschließen]", + "[Verlassen]", + "[Gesperrt] Verlassen noch nicht möglich.", + " #gApparieren." + ] + }, + "hexamod:BackToBasics": { + "NAME": "", + "DESCRIPTIONS": [ + "Der Geist ist das Schwert - und die Erfahrung ist der Schleifstein." + ], + "OPTIONS": [ + "[Wehmut] Alle #gSchlag und #gVerteidigen Karten werden #gflüchtig.", + "[Gesperrt] Erfordert einen Schlag oder ein Verteidigen." + ] + } +} \ No newline at end of file diff --git a/src/main/resources/hexamodResources/localization/deu/KeywordStrings.json b/src/main/resources/hexamodResources/localization/deu/KeywordStrings.json new file mode 100644 index 0000000000..c12ea0a2d2 --- /dev/null +++ b/src/main/resources/hexamodResources/localization/deu/KeywordStrings.json @@ -0,0 +1,146 @@ +[ + { + "PROPER_NAME": "Aktiv", + "NAMES": [ + "aktiv", + "aktive", + "active" + ], + "DESCRIPTION": "Die #yaktive Geisterflamme kann #yentzündet werden, indem man ihre spezifischen Anforderungen für das #yEntzünden erfüllt." + }, + { + "PROPER_NAME": "Vorwärts", + "NAMES": [ + "vorwärts", + "advance", + "advanced", + "advancing" + ], + "DESCRIPTION": "Bewege dich im Uhrzeigersinn auf die nächste Geisterflamme. Das bewegen AUF eine #yentzündete Geisterflamme #ylöscht sie." + }, + { + "PROPER_NAME": "Rückwärts", + "NAMES": [ + "rückwärts", + "retract", + "retracted", + "retracting" + ], + "DESCRIPTION": "Bewege dich im Gegenuhrzeigersinn auf die vorherige Geisterflamme. Das bewegen AUF eine #yentzündete Geisterflamme #ylöscht sie." + }, + { + "PROPER_NAME": "Intensität", + "NAMES": [ + "intensität", + "intensity" + ], + "DESCRIPTION": "Intensität erhöht Schaden, #ySeelenfeuer [REMOVE_SPACE], und #yBlock der durch das #yEntzünden von Geisterflammen entsteht." + }, + { + "ID": "soulburn", + "PROPER_NAME": "Seelenfeuer", + "NAMES": [ + "seelenfeuer", + "seelenfeuers", + "soulburn", + "soulburned" + ], + "DESCRIPTION": "Nach #b3 Zügen detoniert das Seelenfeuer und der Gegner verliert TP in seiner Höhe. Das Seelenfeuer wird daraufhin entfernt." + }, + { + "PROPER_NAME": "Löschen", + "NAMES": [ + "löschen", + "lösche", + "löscht", + "gelöscht", + "gelöschte", + "extinguish", + "extinguished" + ], + "DESCRIPTION": "Löscht #yentzündete Geisterflammen und erlaubt es, sie erneut durch die spezifischen Anforderungen zu #yentzünden [REMOVE_SPACE]." + }, + { + "PROPER_NAME": "Entzünden", + "NAMES": [ + "entzünden", + "entzündung", + "entzünde", + "entzündest", + "entzündet", + "entzündete", + "entzündungs", + "ignite", + "ignited", + "force-ignite" + ], + "DESCRIPTION": "Aktiviet den Entzündungs Effekt der Geisterflamme." + }, + { + "PROPER_NAME": "Siegel", + "NAMES": [ + "siegel", + "seal" + ], + "DESCRIPTION": "Siegel-Karten können nach einem Kampf gefunden werden. Je mehr Siegel man ausspielt, desto öfter findet man weitere Siegel. Werden alle #b6 Siegel in eiem Kampf ausgespielt, erhalte das #pGebrochene #pSiegel und entferne die #b6 Siegel aus deinem Deck." + }, + { + "ID": "afterlife", + "PROPER_NAME": "Reinkarnation", + "NAMES": [ + "reinkarnation", + "afterlife" + ], + "DESCRIPTION": "Der #pviolett hervorgehobene Effekt wird auch beim #yErschöpfen der Karte aktiviert." + }, + { + "PROPER_NAME": "Schlagend", + "NAMES": [ + "schlagend", + "schlagende", + "schlagenden", + "crushing" + ], + "DESCRIPTION": "#yGeisterflamme [REMOVE_SPACE]. #yEntzündet sich, wenn #b2 #yFertigkeiten gespielt werden, während man sich auf ihr befindet. #yEntzündung [REMOVE_SPACE]: Füge 2 Mal einem zufälligen Gegner #b3 Schaden zu.", + "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 " + }, + { + "PROPER_NAME": "Stärkend", + "NAMES": [ + "stärkend", + "stärkende", + "stärkenden", + "bolstering" + ], + "DESCRIPTION": "#yGeisterflamme [REMOVE_SPACE]. #yEntzündet sich, wenn eine #yMacht gespielt wird, während man sich auf ihr befindet. #yEntzündung [REMOVE_SPACE]: Erhalte #b4 #yBlock und #b1 #yStärke [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": "Panzerrüstung", + "NAMES": [ + "panzerrüstung", + "plated" + ], + "DESCRIPTION": "Du erhältst #yBlock in Höhe deiner #yPanzerrüstung am Ende des Zuges. Ungeblockter Angriffsschaden reduziert #yPanzerrüstung um #b1 [REMOVE_SPACE]." + }, + { + "PROPER_NAME": "Sengend", + "NAMES": [ + "sengend", + "sengende", + "sengenden", + "searing" + ], + "DESCRIPTION": "#yGeisterflamme [REMOVE_SPACE]. #yEntzündet sich, wenn #b2 #yAngriffe gespielt werden, während man sich auf ihr befindet. #yEntzündung [REMOVE_SPACE]: Wende 2 Mal #b3 #ySeelenfeuer auf einen zufälligen Gegner an.", + "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 " + }, + { + "PROPER_NAME": "Inferno", + "NAMES": [ + "inferno" + ], + "DESCRIPTION": "#yGeisterflamme [REMOVE_SPACE]. #yEntzündet sich, wenn [E] [E] [E] ausgegeben wird, während man sich auf ihr befindet. #yEntzündung [REMOVE_SPACE]: Füge für jede #yentzündete Geisterflamme einem zufälligen Gegner #b4 Schaden zu. #yLösche danach alle Geisterflammen. Du erhältst #b2 #yIntensität wenn alle Geisterflammen #yentzündet sind.", + "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/deu/MonsterStrings.json b/src/main/resources/hexamodResources/localization/deu/MonsterStrings.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/src/main/resources/hexamodResources/localization/deu/MonsterStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/hexamodResources/localization/deu/OrbStrings.json b/src/main/resources/hexamodResources/localization/deu/OrbStrings.json new file mode 100644 index 0000000000..121af08840 --- /dev/null +++ b/src/main/resources/hexamodResources/localization/deu/OrbStrings.json @@ -0,0 +1,69 @@ +{ + "hexamod:SearingGhostflame": { + "NAME": "Sengende Geisterflamme", + "DESCRIPTION": [ + "#yEntzündet [REMOVE_SPACE]. ", + "#yEntzündet wenn #b" , + " #yAngriff gespielt wird.", + " #yAngriffe gespielt werden.", + "#yEntzündet wenn #b2 #yAngriffe gespielt werden, während man sich auf ihr befindet.", + " NL NL #yEntzündung [REMOVE_SPACE]: Wende zweimal #b", + " #ySeelenfeuer auf einen zufälligen Gegner an.", + " NL NL Wenn diese Geisterflamme am Ende des Zuges #yentzündet ist während du dich auf ihr befindest, bewege dich #yvorwärts zur Nächsten." + ] + }, + "hexamod:CrushingGhostflame": { + "NAME": "Schlagende Geisterflamme", + "DESCRIPTION": [ + "#yEntzündet [REMOVE_SPACE]. ", + "#yEntzündet wenn #b" , + " #yFertigkeit gespielt wird.", + " #yFertigkeiten gespielt werden.", + "#yEntzündet wenn #b2 #yFertigkeiten gespielt werden, während man sich auf ihr befindet.", + " NL NL #yEntzündung [REMOVE_SPACE]: Füge zweimal einem zufälligen Gegner #b", + " Schaden zu.", + " NL NL Wenn diese Geisterflamme am Ende des Zuges #yentzündet ist während du dich auf ihr befindest, bewege dich #yvorwärts zur Nächsten." + ] + }, + "hexamod:BolsteringGhostflame": { + "NAME": "Stärkende Geisterflamme", + "DESCRIPTION": [ + "#yEntzündet [REMOVE_SPACE]. ", + "#yEntzündet wenn eine #yMacht gespielt wird." , + "#yEntzündet wenn eine #yMacht gespielt wird, während man sich auf ihr befindet.", + " NL NL #yEntzündung [REMOVE_SPACE]: Erhalte #b", + " #yBlock und #b1 #yStärke [REMOVE_SPACE].", + " NL NL Wenn diese Geisterflamme am Ende des Zuges #yentzündet ist während du dich auf ihr befindest, bewege dich #yvorwärts zur Nächsten." + ] + }, + "hexamod:InfernoGhostflame": { + "NAME": "Inferno-Geisterflamme", + "DESCRIPTION": [ + "#yEntzündet [REMOVE_SPACE]. #yLöscht sich am Ende jedes Zuges.", + "#yEntzündet wenn [E] [E] [E] ausgegeben wird.", + "#yEntzündet wenn [E] [E] ausgegeben wird.", + "#yEntzündet wenn [E] ausgegeben wird.", + "Error. Please report to mod dev: ", + "#yEntzündet wenn [E] [E] [E] ausgegeben wird, während man sich auf ihr befindet. #yLöscht sich am Ende jedes Zuges.", + " NL NL #yEntzündung [REMOVE_SPACE]: Füge für jede #yentzündete Geisterflamme einem zufälligen Gegner #b", + " Schaden zu. #yLösche danach alle Geisterflammen. Du erhältst #b2 #yIntensität wenn alle Geisterflammen #yentzündet sind.", + " NL NL Wenn diese Geisterflamme am Ende des Zuges #yentzündet ist während du dich auf ihr befindest, bewege dich #yvorwärts zur Nächsten." + ] + }, + "hexamod:MayhemGhostflame": { + "NAME": "Wahnsinnige Geisterflamme", + "DESCRIPTION": [ + "#yEntzündet [REMOVE_SPACE]. ", + "#yEntzündet am Ende deines Zuges.", + "#yEntzündet wenn du deinen Zug auf ihr beendest.", + " NL NL #yEntzündung [REMOVE_SPACE]: #ySpähe #b", + " , verstärkt durch #yIntensität, und spiele dann die oberste Karte des Nachziehstapels. ", + " NL NL Wenn diese Geisterflamme am Ende des Zuges #yentzündet ist während du dich auf ihr befindest, bewege dich #yvorwärts zur Nächsten." + ] + } +} + + + + + diff --git a/src/main/resources/hexamodResources/localization/deu/PotionStrings.json b/src/main/resources/hexamodResources/localization/deu/PotionStrings.json new file mode 100644 index 0000000000..ca2c2291ea --- /dev/null +++ b/src/main/resources/hexamodResources/localization/deu/PotionStrings.json @@ -0,0 +1,32 @@ +{ + "hexamod:SoulburnPotion": { + "NAME": "Molotow", + "DESCRIPTIONS": [ + "Wende #b", + " #ySeelenfeuer an." + ] + }, + "hexamod:DoubleChargePotion": { + "NAME": "Brandbeschleuniger", + "DESCRIPTIONS": [ + "#yEntzünde die aktuelle #yGeisterflamme #b", + " Mal." + ] + }, + "hexamod:EctoCoolerPotion": { + "NAME": "Ecto-Kühler", + "DESCRIPTIONS": [ + "Wähle #b1 von #b3 zufälligen #yflüchtigen Karten. Nimm sie auf die Hand, sie kostet diesen Zug #b0 [REMOVE_SPACE].", + "Wähle #b1 von #b3 zufälligen #yflüchtigen Karten. Nimm #b", + " Kopien auf die Hand, sie kosten diesen Zug #b0 [REMOVE_SPACE]." + ] + }, + "hexamod:InfernoChargePotion": { + "NAME": "Flüssiges Inferno", + "DESCRIPTIONS": [ + "Die #yGeisterflammen-Effekte werden in diesem Kampf auf ALLE Gegner angewendet.", + "Die #yGeisterflammen-Effekte werden in diesem Kampf auf ALLE Gegner #b", + " Mal angewendet." + ] + } +} diff --git a/src/main/resources/hexamodResources/localization/deu/PowerStrings.json b/src/main/resources/hexamodResources/localization/deu/PowerStrings.json new file mode 100644 index 0000000000..a957e39358 --- /dev/null +++ b/src/main/resources/hexamodResources/localization/deu/PowerStrings.json @@ -0,0 +1,253 @@ +{ + "hexamod:AgainPower": { + "NAME": "Nochmal!", + "DESCRIPTIONS": [ + "Gehe am Ende des nächsten Zuges nicht #yvorwärts [REMOVE_SPACE].", + "Gehe am Ende der nächsten #b", + " Züge nicht #yvorwärts [REMOVE_SPACE]." + ], + "TRANSLATOR_NOTE": "not used not used not used not used not used not used not used not used" + }, + "hexamod:ApocalypticArmorPower": { + "NAME": "Jüngstes Gericht", + "DESCRIPTIONS": [ + "Das nächste Mal, wenn #b", + " Geisterflammen #yentzündet sind, hast du einen weiteren Zug nach diesem.", + "Das nächste Mal, wenn mindestens #b" + ] + }, + "hexamod:ApplyBurnAtTurnStartOncePower": { + "NAME": "Spätzünder", + "DESCRIPTIONS": [ + "Wende zu Beginn des nächsten Zuges #b", + " #ySeelenfeuer auf ALLE Gegner an." + ], + "TRANSLATOR_NOTE": "not used not used not used not used not used not used not used not used" + }, + "hexamod:BurnPerTurnPower": { + "NAME": "Heißes Eisen", + "DESCRIPTIONS": [ + "Wende das nächste Mal, an dem das #ySeelenfeuer dieses Feindes detoniert #b", + " #ySeelenfeuer an." + ], + "TRANSLATOR_NOTE": "not used not used not used not used not used not used not used not used" + }, + "hexamod:BurnPower": { + "NAME": "Seelenfeuer", + "DESCRIPTIONS": [ + "Verliert in #b", + " Zügen #b", + " Zug #b", + " TP. Das #ySeelenfeuer wird dann entfernt." + ] + }, + "hexamod:BurnvenomPower": { + "NAME": "Waldbrand-Waffe", + "DESCRIPTIONS": [ + "Immer wenn du ungeblockten Angriffsschaden zufügst, wende #b", + " #ySeelenfeuer an." + ], + "TRANSLATOR_NOTE": "not used not used not used not used not used not used not used not used" + }, + "hexamod:CommonPostCombatPower": { + "NAME": "Versiegelte Belohnung: Karte", + "DESCRIPTIONS": [ + "Erhalte am Ende des Kampfes #b", + " zusätzliche Kartenbelohnungen.", + " zusätzliche Kartenbelohnung." + ] + }, + "hexamod:CrispyPower_new": { + "NAME": "Restwärme", + "DESCRIPTIONS": [ + "Wenn #ySeelenfeuer detoniert, dann wende umgehend nach der Detonation #b", + " #ySeelenfeuer an." + ] + }, + "hexamod:EnhancePower": { + "NAME": "Intensität", + "DESCRIPTIONS": [ + "Erhöhe Schaden, #ySeelenfeuer [REMOVE_SPACE], und #yBlock der durch das #yEntzünden von Geisterflammen entsteht um #b", + " [REMOVE_SPACE].", + "Verringere Schaden, #ySeelenfeuer [REMOVE_SPACE], und #yBlock der durch das #yEntzünden von Geisterflammen entsteht um #b", + "Hat bei #ySengenden #yGeisterflammen die doppelte Wirkung." + ] + }, + "hexamod:EtherealRefundPower": { + "NAME": "Flüchtige Rückerstattung", + "DESCRIPTIONS": [ + "Immer wenn du in diesem Zug eine #yflüchtige Karte spielst, erhalte ", + " ." + ], + "TRANSLATOR_NOTE": "not used not used not used not used not used not used not used not used" + }, + "hexamod:FuturePower": { + "NAME": "Aus dem Schatten", + "DESCRIPTIONS": [ + "Die #b", + " nächste gespielte Karte wird jedes Mal, wenn du dich #yrückwärts bewegst, #b0 kosten und #yerschöpfen [REMOVE_SPACE].", + " nächsten gespielten Karten werden jedes Mal, wenn du dich #yrückwärts bewegst, #b0 kosten und #yerschöpfen [REMOVE_SPACE]." + ] + }, + "hexamod:FutureUpgradePower": { + "NAME": "Versiegelte Belohnung: Verbessern", + "DESCRIPTIONS": [ + "#yVerbessere am Ende des Kampfes #b", + " zufällige Karte in deinem Deck.", + " zufällige Karten in deinem Deck." + ] + }, + "hexamod:StopFromAdvancingPower": { + "NAME": "Hier und Jetzt", + "DESCRIPTIONS": [ + "#yLösche am Ende des Zuges die aktuelle Geisterflamme." + ] + }, + "hexamod:GhostFlameBarrierPower": { + "NAME": "Geisterflammen-Barriere", + "DESCRIPTIONS": [ + "Wenn du #yAngriffsschaden erleidest, wird beim Angreifer #b", + " #ySeelenfeuer angewendet." + ], + "TRANSLATOR_NOTE": "not used not used not used not used not used not used not used not used" + }, + "hexamod:GiftsFromBeyondPower": { + "NAME": "Geschenkte Karten", + "DESCRIPTIONS": [ + "Nimm zu Beginn des Zuges #b", + " zufällige #yReinkarnation Karte auf die Hand.", + " zufällige #yReinkarnation Karten auf die Hand." + ] + }, + "hexamod:GoldPostCombatPower": { + "NAME": "Versiegelte Belohnung: Gold", + "DESCRIPTIONS": [ + "Die Gold Belohnung des Kampfes wird um #b", + " erhöht." + ] + }, + "hexamod:HexalevelPower": { + "NAME": "Infernale Form", + "DESCRIPTIONS": [ + "Zu Beginn deines Zuges erhältst du #b", + " #yIntensität [REMOVE_SPACE]." + ] + }, + "hexamod:LoseEnhanceInTurnsPower": { + "NAME": "Überhitzt", + "DESCRIPTIONS": [ + "Verliere am Ende deines Zuges #b", + "Verliere nach #b", + " Zügen #b", + " #yIntensität [REMOVE_SPACE]." + ], + "TRANSLATOR_NOTE": "not used not used not used not used not used not used not used not used" + }, + "hexamod:ParanormalFormPower": { + "NAME": "Poltergeist", + "DESCRIPTIONS": [ + "Immer wenn du eine #yflüchtige Karte spielst, verliert ein zufälliger Gegner #b", + " TP." + ] + }, + "hexamod:PastPower": { + "NAME": "Totentanz", + "DESCRIPTIONS": [ + "Wenn du dich das erste Mal im Zug #yvorwärts oder #yrückwärts bewegst, ziehe eine Karte.", + "Ziehe eine Karte für die ersten #b", + " Male, an denen du dich im Zug #yvorwärts oder #yrückwärts bewegst.", + " NL Dieser Effekt kann in diesem Zug noch #b", + " Mal aktiviert werden.", + " Mal aktiviert werden.", + " NL Dieser Effekt kann in diesem Zug nicht mehr aktiviert werden." + ] + }, + "hexamod:PotionPostCombatPower": { + "NAME": "Versiegelte Belohnung: Trank", + "DESCRIPTIONS": [ + "Erhalte am Ende des Kampfes #b", + " zusätzliche Tränke.", + " zusätzlichen Trank." + ] + }, + "hexamod:RadiantPower": { + "NAME": "Strahlende Flamme", + "DESCRIPTIONS": [ + "Erhalte #b ", + "Block immer wenn eine Geisterflamme #yentzündet wird." + ] + }, + "hexamod:SealPostCombatPower": { + "NAME": "Versiegelte Belohnung: Siegel", + "DESCRIPTIONS": [ + "Erhalte am Ende des Kampfes #b", + " zusätzliche #ySiegel Karten.", + " zusätzliche #ySiegel Karte." + ], + "TRANSLATOR_NOTE": "not used not used not used not used not used not used not used not used" + }, + "hexamod:TimeStopPower": { + "NAME": "Ankunft der Hölle", + "DESCRIPTIONS": [ + "Du hast einen weiteren Zug nach diesem.", + "Du hast #b", + " weitere Züge nach diesem." + ] + }, + "hexamod:VolcanoVisagePower": { + "NAME": "Vulkanvisage", + "DESCRIPTIONS": [ + "Wende immer, wenn du eine Geisterflamme #yentzündest [REMOVE_SPACE], #b", + " #ySeelenfeuer auf ALLE Gegner an." + ] + }, + "hexamod:LivingBombPower": { + "NAME": "Lebendige Bombe", + "DESCRIPTIONS": [ + "Wenn das #ySeelenfeuer dieses Wesens detoneirt, nehmen ALLE Gegner Schaden." + ] + }, + "hexamod:GainEnergyAtStartOfTurnPower": { + "NAME": "Mehr Energie", + "DESCRIPTIONS": [ + "Erhalte zu Beginn deines Zuges " + ] + }, + "hexamod:SoulburnOnExhaustPower": { + "NAME": "Seelenfeuer-Befall", + "DESCRIPTIONS": [ + "Immer wenn in diesem Zug eine Karte #yerschöpft [REMOVE_SPACE], wende #b", + " #ySeelenfeuer auf diesen Gegner an." + ] + }, + "hexamod:LoseIntensityPower": { + "NAME": "Temporäre Intensität", + "DESCRIPTIONS": [ + "Am Ende deines Zuges verlierst du #b", + " #yIntensität [REMOVE_SPACE]." + ] + }, + "hexamod:MaxHPPostCombatPower": { + "NAME": "Versiegelte Belohnung: max. TP", + "DESCRIPTIONS": [ + "Erhalte am Ende des Kampfes #b", + " max. TP." + ] + }, + "hexamod:InfernoPotionPower": { + "NAME": "Hexabrand", + "DESCRIPTIONS": [ + "Die Geisterflammen-Effekte werden in diesem Kampf auf ALLE Gegner angewendet.", + "Die Geisterflammen-Effekte werden in diesem Kampf auf ALLE Gegner #b", + " Mal angewendet." + ] + }, + "hexamod:PlayCardAndExhaustPower": { + "NAME": "In den Schatten", + "DESCRIPTIONS": [ + "Die nächste Karte die du spielst kostet #b0 und #yerschöpft [REMOVE_SPACE].", + "Die nächsten #b", + " Karten die du spielst kosten #b0 und #yerschöpfen [REMOVE_SPACE]." + ] + } +} diff --git a/src/main/resources/hexamodResources/localization/deu/RelicStrings.json b/src/main/resources/hexamodResources/localization/deu/RelicStrings.json new file mode 100644 index 0000000000..7309dc8c93 --- /dev/null +++ b/src/main/resources/hexamodResources/localization/deu/RelicStrings.json @@ -0,0 +1,114 @@ +{ + "hexamod:SpiritBrand": { + "NAME": "Mal des Geistes", + "FLAVOR": "Ein an mich gebundener Beschützer.", + "DESCRIPTIONS": [ + "Erhalte #b", + " #yBlock [REMOVE_SPACE], wenn das erste Mal im Zug eine #yGeisterflamme #yhexamod:entzündet wird." + ] + }, + "hexamod:TheBrokenSeal": { + "NAME": "Das gebrochene Siegel", + "FLAVOR": "Unbegrenzte, ungebändigte, unstillbare Macht.", + "DESCRIPTIONS": [ + "Erhöhe beim Aufheben deine max. TP um #b", + " und heile deine TP komplett. Beginne jeden Kampf mit #b", + " #yStärke [REMOVE_SPACE], #yGeschicklichkeit [REMOVE_SPACE], und #yhexamod:Intensität [REMOVE_SPACE]. Du kannst keine weiteren Siegel oder #pGebrochene #pSiegel erhalten." + ] + }, + "hexamod:UnbrokenSoul": { + "NAME": "Mal des Äthers", + "FLAVOR": "Mal sehen ob wir es... besser machen können.", + "DESCRIPTIONS": [ + "Ersetzt ", + " [REMOVE_SPACE].[] NL Erhalte #b", + " #yBlock immer wenn eine #yGeisterflamme #yhexamod:entzündet wird." + ] + }, + "hexamod:IceCube": { + "NAME": "Xanatos' eisiges Amulett", + "FLAVOR": "So kalt...", + "DESCRIPTIONS": [ + "Erhalte in deinem Zug [E]. Beginne jeden Kampf mit #b", + " weniger #yhexamod:Intensität [REMOVE_SPACE]. Die #yInferno #yGeisterflamme kann deine #yhexamod:Intensität nicht erhöhen." + ] + }, + "hexamod:SoulStone": { + "NAME": "Seelenstein", + "FLAVOR": "Eine Seele würde diesem Stein Leben einhauchen!", + "DESCRIPTIONS": [ + "#yhexamod:Entzünde die aktuelle #yGeisterflamme immer, wenn du #b", + " Karten #yerschöpfst." + ] + }, + "hexamod:RecyclingMachine": { + "NAME": "Recycler", + "FLAVOR": "Eines Tages werde ich auch recycelt.", + "DESCRIPTIONS": [ + "Wenn das erste Mal im Kampf eine #yflüchtige Karte #yerschöpft [REMOVE_SPACE], die weder ein #yStatus noch ein #rFluch ist, nimm eine Kopie dieser Karte auf die Hand, die #b0 kostet bis du sie spielst." + ] + }, + "hexamod:MatchstickCase": { + "NAME": "Magisches Zündholz", + "FLAVOR": "Funktioniert auf allen Oberflächen!", + "DESCRIPTIONS": [ + "Wenn du das erste Mal im Zug eine #yGeisterflamme #yhexamod:entzündest [REMOVE_SPACE], kannst du dich #yhexamod:vorwärts or #yhexamod:rückwärts bewegen." + ] + }, + "hexamod:InflammatoryLetter": { + "NAME": "TOBSCo Sauce", + "FLAVOR": "Etwas extra-Schärfe macht alles besser.", + "DESCRIPTIONS": [ + "Beginne jeden Kampf mit #b", + " #yhexamod:Intensität [REMOVE_SPACE]." + ] + }, + "hexamod:SoulOfChaos": { + "NAME": "Chaos-Seele", + "FLAVOR": "Manifestierter Wahnsinn.", + "DESCRIPTIONS": [ + "Bewege dich zu Beginn jedes Zuges auf eine zufällige #yGeisterflamme und ersetze ihren Geisterflammentyp. Spiele am Ende jedes Zuges die oberste Karte des Nachziehstapels." + ] + }, + "hexamod:JarOfFuel": { + "NAME": "Olexas Schild", + "FLAVOR": "Schutz auf Nachfrage.", + "DESCRIPTIONS": [ + "#yMachtkarten bringen auch die #yhexamod:Entzündung #ySengender und #ySchlagender #yGeisterflammen voran." + ] + }, + "hexamod:BolsterEngine": { + "NAME": "Trickys Stärkungsstab", + "FLAVOR": "Unterstützt durch die Recherche tausender Bücher. Wissen ist Macht!", + "DESCRIPTIONS": [ + "Erhalte für die erste #yMacht [REMOVE_SPACE], die du im Kampf spielst, #b", + " #yBlock und #b", + " #yStärke [REMOVE_SPACE]." + ] + }, + "hexamod:CandleOfCauterizing": { + "NAME": "Rote Kerze", + "FLAVOR": "Feuer BRENNT...", + "DESCRIPTIONS": [ + "Immer wenn du #yhexamod:Seelenfeuer anwendest, wende zusätzlich #b", + " #ySeelenfeuer an." + ] + }, + "hexamod:Sixitude": { + "NAME": "Sechseckiges Mal", + "FLAVOR": "Feuer, feuer, feuer, feuer, feuer, FEUER!", + "DESCRIPTIONS": [ + "Immer wenn du #b", + " Karten spielst, die mehr als #b0 kosten, nimm ein #ygremlin:Echo eines Basis #ySchlags auf die Hand. Es kostet #b0." + ] + }, + "hexamod:Libra": { + "NAME": "Libra", + "FLAVOR": "Balance ist überall.", + "DESCRIPTIONS": [ + "#yTransformiere jeweils eine beliebige Anzahl deiner #ySchläge in zufällige Fertigkeiten und #yVerteidigen in zufällige Angriffe.", + "Die Waage der Gerechtigkeit neigt sich.", + "Wähle eine beliebige Anzahl an Karten, um sie zu ihren gegenteiligen Typen zu transformieren." + ] + } +} diff --git a/src/main/resources/hexamodResources/localization/deu/RunModStrings.json b/src/main/resources/hexamodResources/localization/deu/RunModStrings.json new file mode 100644 index 0000000000..426535250b --- /dev/null +++ b/src/main/resources/hexamodResources/localization/deu/RunModStrings.json @@ -0,0 +1,6 @@ +{ + "Slimebound:AllSplit": { + "NAME": "Slime the Spire", + "DESCRIPTION": "Alle Gegner spalten sich in zwei Schleim-Monster auf." + } +} \ No newline at end of file diff --git a/src/main/resources/hexamodResources/localization/deu/UIStrings.json b/src/main/resources/hexamodResources/localization/deu/UIStrings.json new file mode 100644 index 0000000000..a18364180a --- /dev/null +++ b/src/main/resources/hexamodResources/localization/deu/UIStrings.json @@ -0,0 +1,25 @@ +{ + "hexamod:SealCommonReward": { + "TEXT": [ + "Erhalte eine gewöhnliche Karte" + ] + }, + "hexamod:SealSealReward": { + "TEXT": [ + "Erhalte ein Siegel", + "Wähle eine Karte." + ] + }, + "hexamod:SealDescriptor": { + "TEXT": [ + "Siegel", + "hexamod:Siegel. NL " + ] + }, + "hexamod:SealMode": { + "TEXT": [ + "Legacy Modus - Sechs Siegel", + "Siegel Karten tauchen nach manchen Kämpfen als Belohnung auf. Sammle alle Siegel um eine besondere Belohnung zu erhalten. Runs in diesem Modus sind einfacher." + ] + } +} \ No newline at end of file diff --git a/src/main/resources/hexamodResources/localization/eng/CardStrings.json b/src/main/resources/hexamodResources/localization/eng/CardStrings.json index 2d422dcca6..cb6d481df5 100644 --- a/src/main/resources/hexamodResources/localization/eng/CardStrings.json +++ b/src/main/resources/hexamodResources/localization/eng/CardStrings.json @@ -110,7 +110,7 @@ }, "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.", + "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."] }, @@ -157,8 +157,8 @@ }, "hexamod:DevilsDance": { "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." + "DESCRIPTION": "The first time you hexamod:Advance or hexamod:Retract each turn, draw a card.", + "UPGRADE_DESCRIPTION": "The first !M! times you hexamod:Advance or hexamod:Retract each turn, draw a card." }, "hexamod:HereAndNow": { "NAME": "Here and Now", @@ -228,8 +228,8 @@ }, "hexamod:NecessarySacrifice": { "NAME": "Worthy Sacrifice", - "DESCRIPTION": "Exhaust 2 cards. NL If they are Attack or Skill, transform them to the opposite type.", - "UPGRADE_DESCRIPTION": "Exhaust 2 cards. NL If they are Attack or Skill, transform them to the opposite type and Upgrade them.", + "DESCRIPTION": "Exhaust 2 cards. NL If they are Attack or Skill, transform them into the opposite type.", + "UPGRADE_DESCRIPTION": "Exhaust 2 cards. NL If they are Attack or Skill, transform them into the opposite type and Upgrade them.", "EXTENDED_DESCRIPTION": [ "Exhaust for Worthy Sacrifice." ] @@ -250,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", @@ -260,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": { @@ -276,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", @@ -321,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", @@ -364,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", @@ -372,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", @@ -381,13 +380,13 @@ "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", @@ -400,7 +399,7 @@ }, "hexamod:VolcanoVisage": { "NAME": "Volcano Visage", - "DESCRIPTION": "Whenever you *Ignite a Ghostflame, apply !M! hexamod:Soulburn to ALL enemies." + "DESCRIPTION": "Whenever you hexamod:Ignite a Ghostflame, apply !M! hexamod:Soulburn to ALL enemies." }, "hexamod:WildfireWeapon": { "NAME": "Wildfire Weapon", @@ -448,11 +447,8 @@ }, "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 a card. NL Draw !M! card.", + "UPGRADE_DESCRIPTION": "Ethereal. [#e087a4]Afterlife.[] NL [#e087a4]Deal[] !D! [#e087a4]damage.[] NL Exhaust a card. NL Draw !M! cards." }, "hexamod:OpposingAction": { "NAME": "Opposing Action", @@ -535,8 +531,8 @@ }, "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." + "DESCRIPTION": "The first time you hexamod:Advance or hexamod:Retract each turn, draw a card.", + "UPGRADE_DESCRIPTION": "The first !M! times you hexamod:Advance or hexamod:Retract each turn, draw a card." }, "hexamod:GhostOfSpireFuture": { "NAME": "Into Shadow", diff --git a/src/main/resources/hexamodResources/localization/eng/EventStrings.json b/src/main/resources/hexamodResources/localization/eng/EventStrings.json index b03bacc1ac..6dfe83a29e 100644 --- a/src/main/resources/hexamodResources/localization/eng/EventStrings.json +++ b/src/main/resources/hexamodResources/localization/eng/EventStrings.json @@ -7,19 +7,19 @@ "As you take the iridescent white box, it @shatters@ in your grip! As you collect the souls it breaks into, a #pblack #pshard emerges and ~embeds~ itself in your body.", "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...'", + "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?'", "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.", + "[Left Box] #gObtain #gDu-Vu #gDoll #gor #gDarkstone #gPeriapt and #r2x #rHaunted.", "[Shop for More]", - "[Right Box] #gObtain #ga #gCursed #gKey #gor #gCalling #gBell. #rIt #ris #rextra #rCursed.", + "[Right Box] #gObtain #ga #rTainted #gCursed #gKey #gor #gCalling #gBell.", "[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.", - "[Trade for Souls] #gGain #g100 #gSouls. #rBecome #rCursed #r- #rRandom.", + "[Trade for Power] #gGain a #grandom #yRare #gcard. #rCursed #r- #rRandom.", + "[Trade for Life] #gGain #g12 #gMax #gHP. #rCursed #r- #rRandom.", + "[Trade for Souls] #gGain #g180 #gSouls. #rCursed #r- #rRandom.", "[Locked] Trade Complete.", "[Leave]" ] @@ -67,14 +67,14 @@ "DESCRIPTIONS": [ "As you continue your descent, #p~thick~ #p~black~ #p~smoke~ begins to billow out of the ground and walls around you, coalescing into three masked forms that start to speak. NL NL ~\"This~ ~one~ ~is~ #r~doomed...\"~ NL \"We understand your plight, #pcursed one... Would you like to learn our #y~secrets?\"~ ", "#y\"Excellent!\" NL As the ghostly shape speaks, you notice its large mouth opening wider and wider. #p~Thick~ #p~black~ #p~smoke~ spews forth and envelops the room. You cannot see or breathe...", - "Still shrouded in #p~black~ #p~smoke~, your body withers, but your spirit #pburns #pbrighter than ever before. NL You understand how the corporeal and incorporeal are connected, in ways you never thought possible.", + "Still shrouded in #p~black~ #p~smoke,~ your body withers, but your spirit #pburns #pbrighter than ever before. NL You understand how the corporeal and incorporeal are connected, in ways you never thought possible.", "Within the darkness, you see with eyes unclouded. The spirits have shown you how to master your form, to transition between this world and another with ease.", "\"Good luck, #pcursed one...\" NL ~\"We~ ~will~ ~stay~ ~and~ ~help~ ~others...\"~ NL #r@\"HA@ #r@HA@ #r@HA@ #r@HAHAHA!\"@ NL NL You aren't quite sure why the last one laughed as the Council faded, but you are grateful to have gained their knowledge.", "\"How disappointing...\" NL ~\"You~ ~will~ ~never~ ~escape~ ~this~ ~place...\"~ NL #r@\"HA@ #r@HA@ #r@HA@ #r@HAHAHA!\"@ NL NL The shapes fade away, leaving only the unnerving laughter ringing in your ears." ], "OPTIONS": [ "[Accept] #rLose #r", - " #rMax #rHP [REMOVE_SPACE]. Unlock Study and Learn options.", + " #rMax #rHP. Unlock Study and Learn options.", "[Study] #rLose #rall #rStrikes. #gGain #g3 #gCouncil's #gJustice.", "[Learn] #rLose #rall #rDefends. #gGain #g", "[Complete]", diff --git a/src/main/resources/hexamodResources/localization/eng/KeywordStrings.json b/src/main/resources/hexamodResources/localization/eng/KeywordStrings.json index a8f9f5bff9..0c08665952 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 damage, #ySoulburn [REMOVE_SPACE], 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." }, { "ID": "soulburn", @@ -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 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", @@ -77,7 +77,7 @@ "NAMES": [ "crushing" ], - "DESCRIPTION": "#yGhostflame. #yIgnites when #b2 #ySkills are played when you are on it. #yIgnition [REMOVE_SPACE]: When #yIgnited [REMOVE_SPACE], deal #b6 damage to a random enemy.", + "DESCRIPTION": "#yGhostflame. #yIgnites when #b2 #ySkills are played when you are on it. #yIgnition [REMOVE_SPACE]: When #yIgnited [REMOVE_SPACE], deal #b3 damage to a random enemy twice.", "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 " }, { @@ -94,14 +94,22 @@ "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." + "DESCRIPTION": "At the end of your turn, gain #yBlock equal to your #yPlated #yArmor [REMOVE_SPACE]. 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 #b3 #ySoulburn to a random enemy, twice [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 " + }, + { + "PROPER_NAME": "Inferno", + "NAMES": [ + "inferno" + ], + "DESCRIPTION": "#yGhostflame. #yIgnites when #b3 Energy is spent when you are on it. #yIgnition [REMOVE_SPACE]: When #yIgnited [REMOVE_SPACE], deal #b4 damage to a random enemy for each ignited Ghostflame. If all Ghostflames are Ignited, gain #b2 #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/OrbStrings.json b/src/main/resources/hexamodResources/localization/eng/OrbStrings.json index 3c4ea7d725..15c78712a1 100644 --- a/src/main/resources/hexamodResources/localization/eng/OrbStrings.json +++ b/src/main/resources/hexamodResources/localization/eng/OrbStrings.json @@ -8,7 +8,7 @@ " #yAttacks are played.", "#yIgnites when #b2 #yAttacks are played while on it.", " NL NL #yIgnition [REMOVE_SPACE]: Apply #b", - " #ySoulburn to a random enemy.", + " #ySoulburn to a random enemy twice.", " NL NL At the end of your turn, if this is #yIgnited [REMOVE_SPACE], #yAdvance to the next Ghostflame." ] }, @@ -21,7 +21,7 @@ " #ySkills are played.", "#yIgnites when #b2 #ySkills are played while on it.", " NL NL #yIgnition [REMOVE_SPACE]: Deal #b", - " damage to a random enemy.", + " damage to a random enemy twice.", " NL NL At the end of your turn, if this is #yIgnited [REMOVE_SPACE], #yAdvance to the next Ghostflame." ] }, @@ -32,7 +32,7 @@ "#yIgnites when a #yPower is played.", "#yIgnites when a #yPower is played while on it.", " NL NL #yIgnition [REMOVE_SPACE]: Gain #b", - " #yBlock and #b1 #yStrength.", + " #yBlock and #b1 #yStrength [REMOVE_SPACE].", " NL NL At the end of your turn, if this is #yIgnited [REMOVE_SPACE], #yAdvance to the next Ghostflame." ] }, diff --git a/src/main/resources/hexamodResources/localization/eng/PotionStrings.json b/src/main/resources/hexamodResources/localization/eng/PotionStrings.json index 444e39efad..9ac66e2882 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 e2ac011af9..28c100257a 100644 --- a/src/main/resources/hexamodResources/localization/eng/PowerStrings.json +++ b/src/main/resources/hexamodResources/localization/eng/PowerStrings.json @@ -153,9 +153,13 @@ "hexamod:PastPower": { "NAME": "Devil's Dance", "DESCRIPTIONS": [ - "Whenever you #yRetract, draw #b", - " card.", - " cards." + "The first time you #yAdvance or #yRetract each turn, draw a card.", + "The first #b", + " times you gain #yAdvance or #yRetract 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." ] }, "hexamod:PotionPostCombatPower": { @@ -241,9 +245,9 @@ "hexamod:PlayCardAndExhaustPower": { "NAME": "Shadowy Shift", "DESCRIPTIONS": [ - "Your next card is free to play then #yExhausts [REMOVE_SPACE].", + "Your next card is free to play and #yExhausts [REMOVE_SPACE].", "Your next #b", - " cards are free to play then #yExhaust [REMOVE_SPACE]." + " cards are free to play and #yExhaust [REMOVE_SPACE]." ] } } diff --git a/src/main/resources/hexamodResources/localization/eng/RelicStrings.json b/src/main/resources/hexamodResources/localization/eng/RelicStrings.json index 6523ff43c5..9a3376a4a0 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 #yhexamod:Ignite 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 [REMOVE_SPACE], 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 ", - " [REMOVE_SPACE].[] NL Whenever you #yIgnite a Ghostflame, gain #b4 #yBlock [REMOVE_SPACE]." + " [REMOVE_SPACE].[] NL Whenever you #yhexamod:Ignite 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,49 +59,54 @@ "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." ] }, "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, gain an #ygremlin:Echo of a basic #yStrike [REMOVE_SPACE]. It costs #b0 [REMOVE_SPACE]." + "Whenever you play #b", + " #bnon-0 cost cards, gain an #ygremlin:Echo of a basic #yStrike. It costs #b0." ] }, "hexamod:Libra": { "NAME": "Libra", "FLAVOR": "Balance in all things.", "DESCRIPTIONS": [ - "Choose any number of your Strikes and Defends to #yTransform into their opposite type.", + "#yTransform your Strikes into random Skills, and your Defends into random Attacks.", "The scales of justice tip.", "Choose any number of cards to Transform into the opposite type." ] diff --git a/src/main/resources/hexamodResources/localization/eng/UIStrings.json b/src/main/resources/hexamodResources/localization/eng/UIStrings.json index 415443006c..7b3040ff49 100644 --- a/src/main/resources/hexamodResources/localization/eng/UIStrings.json +++ b/src/main/resources/hexamodResources/localization/eng/UIStrings.json @@ -15,5 +15,11 @@ "Seal", "hexamod:Seal. NL " ] + }, + "hexamod:SealMode": { + "TEXT": [ + "Legacy Mode - Six Seals", + "Adds Seal rewards periodically in combat. Assemble the Seals to earn a special relic. Playing with this option enabled will make the game easier." + ] } } \ No newline at end of file diff --git a/src/main/resources/hexamodResources/localization/fra/CardStrings.json b/src/main/resources/hexamodResources/localization/fra/CardStrings.json index 972b7a6e41..badbe76f12 100644 --- a/src/main/resources/hexamodResources/localization/fra/CardStrings.json +++ b/src/main/resources/hexamodResources/localization/fra/CardStrings.json @@ -4,7 +4,7 @@ "DESCRIPTION": "Gagnez !B! d'Armure. NL hexamod:Avancez." }, "hexamod:FleetingFlash": { - "NAME": "Encore!", + "NAME": "Flash éphémère", "DESCRIPTION": "hexamod:Enflammez le Feu Follet actuel, puis hexamod:Éteignez-le." }, "hexamod:ApocalypseNow": { @@ -24,9 +24,9 @@ }, "hexamod:BurningQuestion": { "NAME": "Sujet brûlant", - "DESCRIPTION": "Ethérée. [#e087a4]Après-vie.[] NL Gagnez !M! Force. NL ", + "DESCRIPTION": "Ethérée. [#e087a4]Après-vie.[] NL Gagnez !M! de Force. NL ", "EXTENDED_DESCRIPTION": [ - "Gagnez 1 dextérité." + "Gagnez 1 de Dextérité." ], "Translator Note":[ "For card text simplicity, we have designed a new text system for afterlife cards. Now if an Afterlife card has EXTENDED_DESCRIPTION, it means", @@ -38,7 +38,7 @@ }, "hexamod:BurningTouch": { "NAME": "Toucher de feu", - "DESCRIPTION": "Appliquez !burny! de hexamod:Brûlure, deux fois si l'ennemi a de la hexamod:Brûlure." + "DESCRIPTION": "Appliquez !burny! de hexamod:Brûlure, deux fois si l'ennemi avait déjà de la hexamod:Brûlure." }, "hexamod:CatchUp": { "NAME": "Temps perdu", @@ -63,7 +63,8 @@ }, "hexamod:DynamicBlow": { "NAME": "Souffle dynamique", - "DESCRIPTION": "Éthérée. NL Si le Feu Follet actuel hexamod:Enflammé, appliquez !burny! de hexamod:Brûlure. Sinon, infligez !D! dégâts." + "DESCRIPTION": "Éthérée. NL Si le Feu Follet actuel est hexamod:Enflammé, appliquez !burny! de hexamod:Brûlure. Sinon, infligez !D! dégâts.", + "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 " }, "hexamod:EmpoweredFlame": { "NAME": "Flamme amplifiée", @@ -71,11 +72,11 @@ }, "hexamod:EtherealExpedition": { "NAME": "Expédition sinistre", - "DESCRIPTION": "Éthérée. [#e087a4]Après-vie.[] NL Ajoutez une carte *Éthérée aléatoire dans votre main. NL Elle coûte 0 ce tour. NL Épuisement." + "DESCRIPTION": "Éthérée. [#e087a4]Après-vie.[] NL [#e087a4]Ajoutez[] !M! [#e087a4]carte[] [#e087a4]Après-Vie [#e087a4]aléatoire[] [#e087a4]dans[] [#e087a4]votre[] [#e087a4]pioche[] et une autre dans votre main." }, "hexamod:ExtraCrispy": { "NAME": "Extra Croustillant", - "DESCRIPTION": "Quand hexamod:Brûlure s'active sur un ennemie, applique !M! hexamod:Brûlure sur eux apres activation." + "DESCRIPTION": "Quand la hexamod:Brûlure s'active sur un ennemi, appliquez !M! de hexamod:Brûlure sur eux après l'activation." }, "hexamod:FastForward": { "NAME": "Avance rapide", @@ -88,7 +89,7 @@ }, "hexamod:FlamesFromBeyond": { "NAME": "Flammes de l'Au-delà", - "DESCRIPTION": "Éthérée. hexamod:Après-vie. NL Appliquez !burny! de hexamod:Brûlure à TOUS les ennemis 2 fois." + "DESCRIPTION": "Éthérée. [#e087a4]Après-vie.[] NL [#e087a4]Appliquez[] !burny! [#e087a4]de[] [#e087a4]Brûlure[] [#e087a4]à[] [#e087a4]TOUS[] [#e087a4]les[] [#e087a4]ennemis[] [#e087a4]deux[] [#e087a4]fois[]." }, "hexamod:BadOmen": { "NAME": "Mauvais Présage", @@ -96,9 +97,9 @@ "UPGRADE_DESCRIPTION": "Retenue. NL Choisissez un type de Feu Follet pour remplacer le Feu Follet actuel. NL Épuisement.", "EXTENDED_DESCRIPTION": [ "Remplacez le Feu Follet actuel avec un Feu Follet hexamod:Renforceur", - "Remplacez le Feu Follet actuel avec un Feu Follet hexamod:Écrasent", + "Remplacez le Feu Follet actuel avec un Feu Follet hexamod:Écrasant", "Remplacez le Feu Follet actuel avec un Feu Follet hexamod:Incinérateur", - "Rien faire." + "Ne rien faire." ] }, "hexamod:Float": { @@ -107,11 +108,17 @@ "UPGRADE_DESCRIPTION": "Piochez une carte. NL Vous pouvez choisir de NL hexamod:Rétracter ou hexamod:Avancer.", "EXTENDED_DESCRIPTION": ["hexamod:Avancez.","hexamod:Rétractez.", "Ne rien faire."] }, + "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": "Jeu de fausses jambes", - "DESCRIPTION": "Éthérée. hexamod:Après-vie. NL Gagnez 1 dextérité. NL ", + "DESCRIPTION": "Éthérée. [#e087a4]Après-vie.[] NL Gagnez 1 Dextérité. NL ", "EXTENDED_DESCRIPTION": [ - "Gain !M! Plated Armor." + "Gagnez !M! d'Armure Plaquée." ] }, "hexamod:ForkedFlame": { @@ -120,25 +127,25 @@ "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. NL hexamod:Enflammez le Feu Follet précédent, puis l'actuel, puis le suivant." }, "hexamod:WhisperFromBeyond": { - "NAME": "Chuchotement de l'Au-delà", - "DESCRIPTION": "Infligez !D! dégâts. NL Chaque fois qu'une carte est épuiser se tour, applique !burny! hexamod:Brûlure a un ennemie." + "NAME": "Soupir de l'Au-delà", + "DESCRIPTION": "Infligez !D! dégâts. NL Lorsqu'une carte est Épuisée ce tour, appliquez !burny! de hexamod:Brûlure à un ennemi." }, "hexamod:InstantInferno": { "NAME": "Enfer immédiat", - "DESCRIPTION": "Retenue. NL Applique !burny! hexamod:Brûlure. NL Selectionnez et hexamod:Enflammez le Feu Follet Infernal. NL Épuisement.", - "UPGRADE_DESCRIPTION": "Retenue. NL Applique !burny! hexamod:Brûlure. NL hexamod:Enflammez le Feu Follet Infernal. NL Épuisement." + "DESCRIPTION": "Retenue. NL Appliquez !burny! de hexamod:Brûlure. NL Passez au Feu Follet Infernal et hexamod:Enflammez-le. NL Épuisement.", + "UPGRADE_DESCRIPTION": "Retenue. NL Appliquez !burny! de hexamod:Brûlure. NL hexamod:Enflammez les *Feux *Follets *Infernaux. NL Épuisement." }, "hexamod:GhostLash": { "NAME": "Fouet fantômatique", - "DESCRIPTION": "Éthérée. hexamod:Après-vie. NL [#e087a4]Infligez[] !D! [#e087a4]dégats.[] NL Inflige !M! dégats supplémentaire pour chaque carte Éthérée dans la main.", + "DESCRIPTION": "Éthérée. [#e087a4]Après-vie.[]. NL [#e087a4]Infligez[] !D! [#e087a4]dégâts.[] NL Infligez !M! dégâts supplémentaires pour chaque carte Éthérée dans votre main.", "EXTENDED_DESCRIPTION": [ "" ] }, "hexamod:IntoShadow": { "NAME": "Dans les ombres", - "DESCRIPTION": "Éthérée. NL Chaque fois que vous hexamod:Rétractez, votre prochaine carte est gratuite et s'épuise.", - "UPGRADE_DESCRIPTION": "Chaque fois que vous hexamod:Rétractez, votre prochaine carte est gratuite et s'épuise.", + "DESCRIPTION": "Éthérée. NL Chque fois que vous hexamod:Rétractez, votre prochaine carte sera gratuite et s'Épuisera.", + "UPGRADE_DESCRIPTION": "Chque fois que vous hexamod:Rétractez, votre prochaine carte sera gratuite et s'Épuisera.", "EXTENDED_DESCRIPTION": [ "Jouez et Épuiser." ], @@ -150,33 +157,33 @@ }, "hexamod:DevilsDance": { "NAME": "Danse du démon", - "DESCRIPTION": "Chaque fois que vous hexamod:Rétractez , piochez 1 carte.", - "UPGRADE_DESCRIPTION": "Inné. NL La première fois que vous hexamod:Rétractez chaque tour, gagnez [E] et piochez 1 carte. NL hexamod:Rétractez." + "DESCRIPTION": "La première fois que vous hexamod:Avancez ou hexamod:Rétractez à chaque tour, piochez une carte.", + "UPGRADE_DESCRIPTION": "Les !M! premières fois que vous hexamod:Avancez ou hexamod:Rétractez à chaque tour, piochez une carte." }, "hexamod:HereAndNow": { "NAME": "Ici et Maintenant", - "DESCRIPTION": "Au début de votre tour, gagnez [E] . NL A la fin du tour, hexamod:Éteignez le feu follet actuel." + "DESCRIPTION": "Au début de votre tour, gagnez [E] . NL À la fin du tour, hexamod:Éteignez le feu follet actuel." }, "hexamod:GhostShield": { "NAME": "Bouclier fantôme", - "DESCRIPTION": "Éthérée. hexamod:Après-vie. NL NL Gagnez 1 de Flou. NL ", + "DESCRIPTION": "Éthérée. [#e087a4]Après-vie.[]. NL NL Gagnez 1 de expansioncontent:Flou. NL ", "EXTENDED_DESCRIPTION": [ "Gagnez !B! d'Armure." ] }, "hexamod:GiftsFromBeyond": { "NAME": "Cadeaux de l'Au-Delà", - "DESCRIPTION": "Au début de votre tour, ajoutez une carte hexamod:Après-vie aléatoire a votre main.", + "DESCRIPTION": "Au début de votre tour, ajoutez !M! carte hexamod:Après-vie aléatoire dans votre main.", "EXTENDED_DESCRIPTION": [ "Ces esprits sont trop puissants pour être invoqués directement." ] }, "hexamod:HauntedHand": { "NAME": "Main hantée", - "DESCRIPTION": "Éthérée. [#e087a4]Après-vie. NL Piochez !M! carte. NL ", - "UPGRADE_DESCRIPTION": "Éthérée. [#e087a4]Après-vie. NL Piochez !M! cartes. NL ", + "DESCRIPTION": "Éthérée. [#e087a4]Après-vie.[] NL Piochez !M! carte. NL ", + "UPGRADE_DESCRIPTION": "Éthérée. [#e087a4]Après-vie.[] NL Piochez !M! cartes. NL ", "EXTENDED_DESCRIPTION": [ - "Piochez des cartes jusqu'a en piochez une non-Éthérée." + "Piochez des cartes jusqu'à ce que vous en piochez une non-Éthérée." ] }, "hexamod:HauntingEcho": { @@ -189,20 +196,19 @@ }, "hexamod:HeatMetal": { "NAME": "Métal chaud", - "DESCRIPTION": "Infligez !D! dégâts. NL Appliquez !burny! de hexamod:Brûlure. NL Appliquez !M! de Vulnérabilité." - + "DESCRIPTION": "Infligez !D! dégâts. NL Appliquez !burny! de hexamod:Brûlure. NL Appliquez !M! de Vulnérabilité." }, "hexamod:HeatShield": { "NAME": "Bouclier de chaleur", - "DESCRIPTION": "Gagnez de l'Armure égale à la hexamod:Brûlure de l'ennemie, puis ralentis sa *Brûlure de 1 tour. Epuisement.", - "UPGRADE_DESCRIPTION": "Gagnez de l'Armure égale à la hexamod:Brûlure de l'ennemie, puis ralentis sa *Brûlure de 1 tour.", + "DESCRIPTION": "Gagnez de l'Armure égale à la hexamod:Brûlure de l'ennemi, puis décalez l'activation de sa *Brûlure de 1 tour. Épuisement.", + "UPGRADE_DESCRIPTION": "Gagnez de l'Armure égale à la hexamod:Brûlure de l'ennemi, puis décalez l'activation de sa *Brûlure de 1 tour.", "EXTENDED_DESCRIPTION": [ " NL (Gagnez !B! d'Armure.)" ] }, "hexamod:Hexaguard": { "NAME": "Hexagarde", - "DESCRIPTION": "Éthérée. [#e087a4]Après-vie.[] NL Piochez 2 carte. NL ", + "DESCRIPTION": "Éthérée. [#e087a4]Après-vie.[] NL Piochez 2 cartes. NL ", "EXTENDED_DESCRIPTION": [ "Gagnez !B! d'Armure." ] @@ -218,12 +224,12 @@ }, "hexamod:StokeTheFire": { "NAME": "Attiser le feu", - "DESCRIPTION": "Gagnez !B! d'Armure. NL Pour chaque Feu Follet hexamod:Enflammé, Améliorez une carte aléatoire dans votre main." + "DESCRIPTION": "Gagnez !B! d'Armure. NL Pour chaque Feu Follet *Enflammé, Améliorez une carte aléatoire dans votre main." }, "hexamod:NecessarySacrifice": { "NAME": "Sacrifice honorable", - "DESCRIPTION": "Épuisez 2 cartes. NL Si c'était des Attaques ou des Compétences, obtenez des cartes aléatoires du type opposé dans votre main.", - "UPGRADE_DESCRIPTION": "Épuisez 2 cartes. NL Si c'était des Attaques ou des Compétences, obtenez des cartes aléatoires du type opposé dans votre main. NL Elle s'améliore.", + "DESCRIPTION": "Épuisez 2 cartes. NL Si c'était des Attaques ou des Compétences, transformez-les en cartes aléatoires du type opposé.", + "UPGRADE_DESCRIPTION": "Épuisez 2 cartes. NL Si c'était des Attaques ou des Compétences, transformez-les en cartes aléatoires Améliorées du type opposé.", "EXTENDED_DESCRIPTION": [ "à Épuiser pour Sacrifice honorable." ] @@ -240,13 +246,11 @@ }, "hexamod:Poltergeist": { "NAME": "Poltergeist", - "DESCRIPTION": "Lorsque vous jouez une carte *Après-vie, infligez !M! dégâts à un ennemi aléatoire." - + "DESCRIPTION": "Lorsque vous jouez une carte *Éthérée, infligez !M! dégâts à un ennemi aléatoire." }, "hexamod:PhantomCloak": { "NAME": "Cape invisible", - "DESCRIPTION": "Éthérée. NL Gagnez !M! de Dextérité et perdez 1 de Force." - + "DESCRIPTION": "Éthérée. NL Gagnez !M! de Dextérité et perdez 1 de Force." }, "hexamod:PhantomFireball": { "NAME": "Boule de feu fantôme", @@ -255,33 +259,33 @@ }, "hexamod:PowerFromBeyond": { "NAME": "Pouvoir de l'Au-delà", - "DESCRIPTION": "Éthérée. [#e087a4]Après-vie.[] NL Gagnez [E] au prochain tour.", - "UPGRADE_DESCRIPTION": "Éthérée. [#e087a4]Après-vie.[] NL Gagnez [E] [E] au prochain tour.", + "DESCRIPTION": "Éthérée. [#e087a4]Après-vie.[] NL [#e087a4]Au[] [#e087a4]prochain[] [#e087a4]tour,[] [#e087a4]piochez[] !M! [#e087a4]cartes[] et gagnez [E] . NL ", + "UPGRADE_DESCRIPTION": "Éthérée. [#e087a4]Après-vie.[] NL [#e087a4]Au[] [#e087a4]prochain[] [#e087a4]tour,[] [#e087a4]piochez[] !M! [#e087a4]cartes[] et gagnez [E] [E] . NL", "EXTENDED_DESCRIPTION": [ - "Piochez !M! cartes au prochain tour." + "" ] }, "hexamod:Premonition": { "NAME": "Prémonition", - "DESCRIPTION": "Choisissez un type de carte puis jouez une carte aléatoire de se type de votre pioche. NL Épuisement.", - "UPGRADE_DESCRIPTION": "Choisissez un type de carte, puis jouez une carte aléatoire de se type de votre pioche.", + "DESCRIPTION": "Choisissez un type de carte, puis jouez une carte aléatoire de ce type de votre pioche. NL Épuisement.", + "UPGRADE_DESCRIPTION": "Choisissez un type de carte, puis jouez une carte aléatoire de ce type de votre pioche.", "EXTENDED_DESCRIPTION": [ "à jouer et Épuiser." ] }, "hexamod:RadiantFlame": { "NAME": "Flammes radiantes", - "DESCRIPTION": "Infligez !D! dégats. NL Enleve la hexamod:Brûlure de la cible et gagnez !M! hexamod:Intensité." + "DESCRIPTION": "Infligez !D! dégâts. NL Enlevez la hexamod:Brûlure de la cible et gagnez !M! hexamod:d'Intensité." }, "hexamod:RainOfEmbers": { "NAME": "Pluie de braises", - "DESCRIPTION": "Infligez !D! dégâts et appliquez !M! Faiblesse X fois.", - "UPGRADE_DESCRIPTION": "Infligez !D! dégâts et appliquez !M! Faiblesse X+1 fois." + "DESCRIPTION": "Infligez !D! dégâts et appliquez !M! de Faiblesse X fois.", + "UPGRADE_DESCRIPTION": "Infligez !D! dégâts et appliquez !M! de Faiblesse X+1 fois." }, "hexamod:NightmareVision": { - "NAME": "Vision de cauchemar", - "DESCRIPTION": "Hexamod:Rétractez. NL expansioncontent:Exhumez une carte Éthérée. NL Épuisement.", - "UPGRADE_DESCRIPTION": "Hexamod:Rétractez. NL expansioncontent:Exhumez !M! cartes Éthérées. NL Épuisement.", + "NAME": "Vision cauchemardesque", + "DESCRIPTION": "Hexamod:Rétractez. NL expansioncontent:Exhumez une carte *Éthérée. NL Épuisement.", + "UPGRADE_DESCRIPTION": "Hexamod:Rétractez. NL expansioncontent:Exhumez !M! cartes *Éthérées. NL Épuisement.", "EXTENDED_DESCRIPTION": [ "Choisissez une carte Éthérée à remettre dans votre main.", "Choisissez ", @@ -290,8 +294,7 @@ }, "hexamod:Incorporeal": { "NAME": "Incorporel", - "DESCRIPTION": "hexamod:Rétractez. NL Perdez !M! PV. NL Gagnez 1 Intangible. NL Épuisement." - + "DESCRIPTION": "hexamod:Rétractez. NL Perdez !M! PV. NL Gagnez 1 d'Intangible. NL Épuisement." }, "hexamod:Rewind": { "NAME": "Rembobinage", @@ -300,7 +303,7 @@ }, "hexamod:Sear": { "NAME": "Incinération", - "DESCRIPTION": "Éthérée. [#e087a4]Après-vie. NL Infligez !D! dégats. NL [#e087a4]Appliquez[] !burny! [#e087a4]Brûlure.[]" + "DESCRIPTION": "Éthérée. [#e087a4]Après-vie. NL Infligez !D! dégâts. NL [#e087a4]Appliquez[] !burny! [#e087a4]de[] [#e087a4]Brûlure.[]" }, "hexamod:SearingWound": { "NAME": "Blessure incinératrice", @@ -317,7 +320,7 @@ }, "hexamod:ShieldOfDarkness": { "NAME": "Bouclier de la nuit", - "DESCRIPTION": "Gagnez !B! d'Armure. NL Scrutez !M!. NL Épuisez les carte Éthérées défaussez" + "DESCRIPTION": "Gagnez !B! d'Armure. NL Scrutez !M!. NL Épuisez les cartse Éthérées défaussées." }, "hexamod:Kindle": { "NAME": "Allumage", @@ -330,7 +333,7 @@ }, "hexamod:SpectersWail": { "NAME": "Plainte spectrale", - "DESCRIPTION": "Éthérée. [#e087a4]Après-vie.[] NL [#e087a4]Infligez[] !D! [#e087a4]dégats[] [#e087a4]à[] [#e087a4]TOUS[] [#e087a4]les[] [#e087a4]ennemies[] 2 fois." + "DESCRIPTION": "Éthérée. [#e087a4]Après-vie.[] NL [#e087a4]Infligez[] !D! [#e087a4]dégâts[] [#e087a4]à[] [#e087a4]TOUS[] [#e087a4]les[] [#e087a4]ennemies[] 2 fois." }, "hexamod:BrightRitual": { "NAME": "Rituel éclatant", @@ -338,8 +341,7 @@ }, "hexamod:NaughtySpirit": { "NAME": "Étincelle spectrale", - "DESCRIPTION": "Appliquez !burny! hexamod:Brûlure. NL Si le feu follet actuel est hexamod:Enflammez, retournez cette carte dans votre main. hexamod:Rétractez." - + "DESCRIPTION": "Appliquez !burny! hexamod:Brûlure. NL Si le feu follet actuel est hexamod:Enflammez, retournez cette carte dans votre main. hexamod:Rétractez." }, "hexamod:StepThrough": { "NAME": "Passer à travers", @@ -361,7 +363,7 @@ }, "hexamod:SwordOfDarkness": { "NAME": "Épée de la nuit", - "DESCRIPTION": "Infligez !D! dégats. NL Scrutez !M!. NL Epuisez les cartes Éthérées defaussez." + "DESCRIPTION": "Infligez !D! dégâts. NL Scrutez !M!. NL Épuisez les cartes Éthérées défaussées." }, "hexamod:ThermalTransfer": { "NAME": "Transfert thermique", @@ -369,22 +371,22 @@ }, "hexamod:TimeOfNeed": { "NAME": "Moment de besoin", - "DESCRIPTION": "Retenue. NL Ajoutez un Pouvoir aléatoire dans votre main. NL Il coûte 1 de moins jusqu'à ce qu'il soit joué. NL Épuisement." + "DESCRIPTION": "Retenue. NL Ajoutez un Pouvoir aléatoire dans votre main. NL Il coûte 1 [E] de moins. NL Épuisement." }, "hexamod:TimeWarp": { "NAME": "Distorsion temporelle", "DESCRIPTION": "Infligez !D! dégâts. NL Lorsque vous hexamod:Avancez ou hexamod:Rétractez, remettez cette carte de votre défausse à votre main." }, "hexamod:FlareFlick": { - "NAME": "Décalage flamboyant!", - "DESCRIPTION": "Infligez !D! dégâts. NL hexamod:Enflammez le feu follet actuel et hexamod:Avancez.", - "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. NL hexamod:Enflammez le feu follet actuel. NL Choisissez de hexamod:Rétractez ou hexamod:Avancez.", - "EXTENDED_DESCRIPTION": ["hexamod:Avancez.","hexamod:Rétractez.", "Rien faire."] + "NAME": "Jet incandescent", + "DESCRIPTION": "Infligez !D! dégâts. NL hexamod:Enflammez le Feu Follet actuel et hexamod:Avancez.", + "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. NL hexamod:Enflammez le Feu Follet actuel. NL Vous pouvez choisir de hexamod:Rétracter ou hexamod:Avancer.", + "EXTENDED_DESCRIPTION": ["hexamod:Avancez.","hexamod:Rétractez.", "Ne rien faire."] }, "hexamod:TurnItUp": { "NAME": "Monter la température", - "DESCRIPTION": "Gagnez !M! hexamod:Intensité temporaire. NL Gagnez !M! Force temporaire. NL Gagnez !M! Dextérité temporaire.", - "UPGRADE_DESCRIPTION": "Retenue. NL Gagnez !M! hexamod:Intensité temporaire. NL Gagnez !M! Force temporaire. NL Gagnez !M! Dextérité temporaire." + "DESCRIPTION": "Gagnez !M! hexamod:d'Intensité , de Force et de Dextérité temporaires.", + "UPGRADE_DESCRIPTION": "Retenue. NL Gagnez !M! hexamod:d'Intensité , de Force et de Dextérité temporaires." }, "hexamod:UnleashSpirits": { "NAME": "Esprits déchaînés", @@ -401,7 +403,8 @@ }, "hexamod:WildfireWeapon": { "NAME": "Feu de guerre", - "DESCRIPTION": "Lorsqu'une Attaque inflige des dégâts non-bloqués, appliquez !M! de hexamod:Brûlure." + "DESCRIPTION": "Lorsqu'une Attaque inflige des dégâts non-bloqués, appliquez !M! de hexamod:Brûlure.", + "Translate_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 " }, "hexamod:FirstSeal": { "NAME": "Premier Sceau", @@ -430,8 +433,8 @@ }, "hexamod:SixthSeal": { "NAME": "Cinquième Sceau", - "DESCRIPTION": "hexamod:Sceau Éthéré. NL À la fin du combat, Améliorez une carte aléatoire pour chaque 13 carte non-améliorez de votre deck.", - "UPGRADE_DESCRIPTION": "hexamod:Sceau. NL À la fin du combat, Améliorez une carte aléatoire pour chaque 13 carte non-améliorez de votre deck.", + "DESCRIPTION": "hexamod:Sceau Éthéré. NL À la fin du combat, Améliorez une carte aléatoire pour toutes les 13 cartes non-améliorées de votre deck.", + "UPGRADE_DESCRIPTION": "hexamod:Sceau. NL À la fin du combat, Améliorez une carte aléatoire pour toutes les 13 cartes non-améliorées de votre deck.", "EXTENDED_DESCRIPTION": [ "( Améliorez ", " carte. ) NL ", @@ -439,16 +442,13 @@ ] }, "hexamod:LingeringShades": { - "NAME": "Nuances persistantes", - "DESCRIPTION": "hexamod:Rétractez. NL Appliquez !burny! hexamod:Brûlure. Retournez toutes les carte Éthérées de votre defausse a votre main." + "NAME": "Ombres persistantes", + "DESCRIPTION": "hexamod:Rétractez. NL Appliquez !burny! de hexamod:Brûlure. Remettez toutes les carte Éthérées de votre défausse à votre main." }, "hexamod:EtherStep": { - "NAME": "Recyclage cauchemardesque", - "DESCRIPTION": "Éthérée. [#e087a4]Après-vie.[] NL Epuisez 1 carte. NL piochez !M! carte. NL ", - "UPGRADE_DESCRIPTION": "Éthérée. [#e087a4]Après-vie.[] NL Epuisez 1 carte. NL piochez !M! cartes. NL ", - "EXTENDED_DESCRIPTION": [ - "Infligez !D! dégats." - ] + "NAME": "Pas éthéré", + "DESCRIPTION": "Éthérée. [#e087a4]Après-vie.[] NL [#e087a4]Infligez[] !D! [#e087a4]dégâts.[] NL Épuisez une carte. NL Piochez !M! carte.", + "UPGRADE_DESCRIPTION": "Éthérée. [#e087a4]Après-vie.[] NL [#e087a4]Infligez[] !D! [#e087a4]dégâts.[] NL Épuisez une carte. NL Piochez !M! cartes." }, "hexamod:OpposingAction": { "NAME": "Action opposée", @@ -457,17 +457,17 @@ }, "hexamod:SeventhEye": { "NAME": "Septième oeil", - "DESCRIPTION": "Cherchez une carte de votre pioche. NL Changer a un feu follet aléatoire. NL Epuisement.", - "UPGRADE_DESCRIPTION": "Cherchez une carte de votre pioche. NL Changer a un feu follet aléatoire. NL Epuisement." + "DESCRIPTION": "Récupérez une carte de votre pioche. NL Passez à un Feu Follet aléatoire. NL Épuisement.", + "UPGRADE_DESCRIPTION": "Récupérez une carte de votre pioche. NL Passez à un Feu Follet aléatoire. NL Épuisement." }, "hexamod:FlameDevourer": { "NAME": "Dévorer la flamme", - "DESCRIPTION": "hexamod:Rétractez. NL Si vous avez hexamod:Rétractez sur un feu follet hexamod:Enflammez, gagnez !B! Armure." + "DESCRIPTION": "Si le Feu Follet précédent est *Enflammé, *hexamod:Rétractez et gagnez !B! d'Armure." }, "hexamod:SpectralGrace": { "NAME": "Grâce spectrale", - "DESCRIPTION": "Défaussez !M! cartes. NL Infligez !D! dégats.", - "UPGRADE_DESCRIPTION": "Défaussez !M! cartes. NL Infligez !D! dégats." + "DESCRIPTION": "Défaussez !M! cartes. NL Infligez !D! dégâts.", + "UPGRADE_DESCRIPTION": "Défaussez !M! cartes. NL Infligez !D! dégâts." }, "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.", @@ -475,7 +475,7 @@ }, "hexamod:SoulSteal": { "NAME": "Bombe vivante", - "DESCRIPTION": "Applique !burny! hexamod:Brûlure. Quand il explose, il affecte TOUS les ennemis." + "DESCRIPTION": "Appliquez !burny! de hexamod:Brûlure. NL La prochaine fois que la hexamod:Brûlure de la cible s'active, cela affecte TOUS les ennemis." }, "hexamod:ApocalypticArmor": { "NAME": "Jour du Jugement dernier", @@ -484,7 +484,7 @@ }, "hexamod:RetreatToShadows": { "NAME": "Retour vers les ombres", - "DESCRIPTION": "hexamod:Rétractez. NL Perdre !M! PV. NL Gagnez 1 Intangible. NL Epuisement." + "DESCRIPTION": "hexamod:Rétractez. NL Perdre !M! PV. NL Gagnez 1 Intangible. NL Épuisement." }, "hexamod:SpectralSpark": { "NAME": "Esprit coquin", @@ -501,8 +501,8 @@ }, "hexamod:RecurringNightmare": { "NAME": "Vision de cauchemar", - "DESCRIPTION": "Hexamod:Rétractez. NL expansioncontent:Exhumez une carte *Éthérée. NL Epuisement.", - "UPGRADE_DESCRIPTION": "Hexamod:Rétractez. NL expansioncontent:Exhumez !M! cartes *Éthérée. NL Epuisement.", + "DESCRIPTION": "Hexamod:Rétractez. NL expansioncontent:Exhumez une carte *Éthérée. NL Épuisement.", + "UPGRADE_DESCRIPTION": "Hexamod:Rétractez. NL expansioncontent:Exhumez !M! cartes *Éthérée. NL Épuisement.", "EXTENDED_DESCRIPTION": [ "Choisissez une carte Éthérée a ajoutez a votre main.", "Choisissez ", @@ -531,8 +531,8 @@ }, "hexamod:GhostOfSpirePast": { "NAME": "Danse du démon", - "DESCRIPTION": "Chaque fois que vous hexamod:Rétractez , piochez 1 carte.", - "UPGRADE_DESCRIPTION": "Inné. NL La première fois que vous hexamod:Rétractez chaque tour, gagnez [E] et piochez 1 carte. NL hexamod:Rétractez." + "DESCRIPTION": "La première fois que vous hexamod:Avancez ou hexamod:Rétractez chaque tour, piochez une carte.", + "UPGRADE_DESCRIPTION": "Les !M! premières fois que vous hexamod:Avancez ou hexamod:Rétractez chaque tour, piochez une carte." }, "hexamod:GhostOfSpireFuture": { "NAME": "Dans les ombres", @@ -558,9 +558,9 @@ "UPGRADE_DESCRIPTION": "Retenue. NL Choisissez un type de Feu Follet pour remplacer le Feu Follet actuel. NL Épuisement.", "EXTENDED_DESCRIPTION": [ "Remplacez le Feu Follet actuel avec un Feu Follet hexamod:Renforceur", - "Remplacez le Feu Follet actuel avec un Feu Follet hexamod:Écrasent", + "Remplacez le Feu Follet actuel avec un Feu Follet hexamod:Écrasant", "Remplacez le Feu Follet actuel avec un Feu Follet hexamod:Incinérateur", - "Rien faire." + "Ne rien faire." ] } } diff --git a/src/main/resources/hexamodResources/localization/fra/EventStrings.json b/src/main/resources/hexamodResources/localization/fra/EventStrings.json index d8387b60e3..ed133c0910 100644 --- a/src/main/resources/hexamodResources/localization/fra/EventStrings.json +++ b/src/main/resources/hexamodResources/localization/fra/EventStrings.json @@ -7,25 +7,25 @@ "Alors que vous prenez la boîte blanche irisée, elle se @brise@ dans votre main ! Alors que vous récupérez les âmes qu'elle a brisées, un #ptesson #pnoir émerge et ~se~ ~loge~ dans votre corps.", "Vous prenez l'étrange boîte #ydorée, et ressentez une #pnoirceur vous traverser en l'ouvrant. A l'intérieur, vous trouvez une arme utile!", "Vous prenez la boîte pulsante, @BATTANT@ régulièrement, et vous la sentez @COULER@ dans votre bras. Une #pnausée répugnante vous envahit, mais vous vous sentez plus fort malgré tout...", - "Dès que vous saisissez l'artefact de la silhouette, les #pténèbres enveloppent la salle. Le spectre vous parle une fois de plus, ses mots apparaissent dans votre tête sans même que vous ne les entendiez. NL NL #p'Un #pchoix #pjudicieux. #pQue #pdites-vous #pd'un #pautre #pmarché, #pmon #pami #p? #pPrenez-en #pautant #pque #pvous #pvoulez...", - "Vous savez que les offres de cette #papparition ont un prix trop élevé. Vous devez y faire face, et quel heureux hasard ! Près du mur! Une #bBougie #bBleue! NL NL Vous arrachez la bougie du mur, #rvous #rbrûlant un peu, et la lancez vers le spectre, qui se dissipe dans une #bteinte #bsinistre. NL NL Il ne proposera plus d'offres à présent.", - "Vous savez que les offres de cette #papparition ont un prix trop élevé. Vous devez y faire face, et quel heureux hasard! Vous avez amené une #bBougie #bBleue! NL NL Vous jetez la bougie vers le spectre, qui se dissipe dans une #blueur #bsinistre. Il ne proposera plus d'offres à présent." + "Dès que vous saisissez l'artefact de la silhouette, les #pténèbres enveloppent la salle. Le spectre vous parle une fois de plus, ses mots apparaissent dans votre tête sans même que vous ne les entendiez. NL NL #p'Un #pchoix #pjudicieux. #pQue #pdites-vous #pd'un #pautre #pmarché, #pmon #pami #p?'", + "Vous savez que les offres de cette #papparition ont un prix trop élevé. Vous devez y faire face, et quel heureux hasard ! Près du mur! Une #bBougie #bAnti-Malédiction! NL NL Vous arrachez la bougie du mur, #rvous #rbrûlant un peu, et la lancez vers le spectre, qui se dissipe dans une #bteinte #bsinistre. NL NL Il ne proposera plus d'offres à présent.", + "Vous savez que les offres de cette #papparition ont un prix trop élevé. Vous devez y faire face, et quel heureux hasard! Vous avez amené une #bBougie #bAnti-Malédiction! NL NL Vous jetez la bougie vers le spectre, qui se dissipe dans une #blueur #bsinistre. Il ne proposera plus d'offres à présent." ], "OPTIONS": [ - "[Boîte de gauche] #gObtenez #gune #gPoupée #gDau-vou #gou #gune #gAmulette #gde #gpierre #gnoire. #rMaudit #rDeux #rfois #r- #rHantise.", + "[Boîte de gauche] #gObtenez #gPoupée #gDau-vou #gou #gAmulette #gde #gpierre #gnoire. #rSoyez #rMaudit #rdeux #rfois #r- #rHantise.", "[Marchander pour plus]", - "[Boîte de droite] #gObtenez #gune #gClé #gMaudite #gou #gune #gCloche #gd'appel. #rElle #rest #rUltra #rMaudite.", - "[Chasser] #gObtenez #gune #gBougie #gBleue. #rPerdez #r5 #rPV.", + "[Boîte de droite] #gObtenez #gune #gClé #gMaudite #gou #gune #gCloche #gd'appel #rCorrompue.", + "[Chasser] #gObtenez #gune #gBougie #gAnti-Malédiction. #rPerdez #r5 #rPV.", "[Chasser] Quittez.", - "[Échange pour du Pouvoir] #gGagnez une #gcarte #galéatoire #yRare. #rDevenez #rMaudit #r- #rAléatoire.", - "[Échange pour de la Vie] #gGain #g5 #gPV #gMax. #rDevenez #rMaudit #r- #rAléatoire.", - "[Échange pour des Âmes] #gGagnez #g100 #gÂmes. #rDevenez #rMaudit #r- #rAléatoire.", + "[Échange pour du Pouvoir] #gObtenez une #gcarte #galéatoire #yRare. #rMaudit #r- #rAléatoire.", + "[Échange pour de la Vie] #gGagnez #g12 #gPV #gMax. #rMaudit #r- #rAléatoire.", + "[Échange pour des Âmes] #gObtenez #g180 #gÂmes. #rMaudit #r- #rAléatoire.", "[Verrouillé] Échange terminé.", "[Quitter]" ] }, "hexamod:SealChamber": { - "NAME": "Chambre du Sceaux", + "NAME": "Chambre du Sceau", "DESCRIPTIONS": [ "Une structure menaçante se tient devant vous. La plupart des gens n'oseraient jamais s'en approcher, mais vous connaissez son utilisation et savez qu'elle peut être d'une grande utilité. NL Vous entrez dans la chambre, et vous vous préparez à faire un #rsacrifice...", "En payant avec une partie de votre âme, vous obtenez le sceau - une étape de plus sur la voie de votre pouvoir ultime.", @@ -34,26 +34,26 @@ ], "OPTIONS": [ "[Offrir] #rPerdez ", - " PV. #gGagnez #gle #gPremier #gSceau.", - " #yÂmes. #gGagnez #gle #gDeuxième #gSceau.", - ". #gGagnez #gle #gTroisième #gSceau.", - ". #gGagnez #gle #gQuatrième #gSceau.", + " PV. #gObtenez #gle #gPremier #gSceau.", + " #yÂmes. #gObtenez #gle #gDeuxième #gSceau.", + ". #gObtenez #gle #gTroisième #gSceau.", + ". #gObtenez #gle #gQuatrième #gSceau.", "[Verrouillé] Requiert plus d'Or.", "[Verrouillé] Requiert une carte Commune.", "[Verrouillé] Requiert une Potion.", "[Quitter]", "[Verrouillé] Offrande faite.", - ". #gGagnez #gle #gCinquieme #gSceau.", + ". #gObtenez #gle #gCinquieme #gSceau.", "[Verrouillé] Requiert une carte améliorer.", - " PV Max. #gGagnez #gle #gSixième #gSceau.", - "[Verrouillé] Requiert 2 PV Max." + " PV Max. #gObtenez #gle #gSixième #gSceau.", + "[Verrouillé] Requiert 2 PV Max." ] }, "hexamod:HexaFalling": { - "NAME": "HexaFalling", + "NAME": "HexaChute", "DESCRIPTIONS": [ - "Vous, qui n'êtes pas lié par les faibles lois de la gravité, flottez au-dessus de la fosse sans danger.", - "TODO..." + "Vous, qui n'êtes pas lié par les faibles lois de la gravité, ~flottez~ au-dessus de la fosse sans danger.", + "NL Ou alors, flotter à votre guise." ], "Translator Note": "the second sentence above is added after the vanilla one, which offers 3 choices [land](skill), [channel](power) and [strike](attack), you can preview below", "preview": "While in free fall you consider your options: Land safely with your greatest techniques. Channel a Power to survive the fall. Strike at the wall to hang on to it.", @@ -70,13 +70,13 @@ "Toujours enveloppé de #p~fumée~ #p~noire,~ votre corps dépérit, mais votre #pesprit #pbrûle #pplus #pfort que jamais. Vous comprenez comment le corporel et l'incorporel sont liés, d'une manière que vous n'auriez jamais cru possible.", "Dans l'obscurité, vous pouvez voir avec des yeux non voilés. Les esprits vous ont montré comment maîtriser votre forme, comment faire la transition entre ce monde et l'autre avec facilité.", "\"Bonne chance, être #pmaudit...\" NL ~\"Nous~ ~resterons~ ~ici~ ~à~ ~aider~ ~les~ ~autres...\"~ NL #r@\"HA@ #r@HA@ #r@HA@ #r@HAHAHA!\"@ NL NL Vous ne savez pas vraiment pourquoi le dernier a ri alors que le Conseil s'est éteint, mais vous êtes reconnaissant d'avoir acquis leurs connaissances.", - "\"Quelle déception...\" NL ~\"Tu~ ~n'échapperas~ ~jamais~ ~cet~ ~endroit...\"~ NL #r@\"HA@ #r@HA@ #r@HA@ #r@HAHAHA!\"@ NL NL Les formes s'estompent, laissant seulement ce rire troublant résonner dans vos oreilles." + "\"Quelle déception...\" NL ~\"Vous~ ~n'échapperez~ ~jamais~ ~cet~ ~endroit...\"~ NL #r@\"HA@ #r@HA@ #r@HA@ #r@HAHAHA!\"@ NL NL Les formes s'estompent, laissant seulement ce rire troublant résonner dans vos oreilles." ], "OPTIONS": [ "[Accepter] #rPerdez #r", " #rPV #rMax. Débloquez les options Étudier et Apprendre.", - "[Étudier] #rPerdez #rtoutes #rvos #rFrappes. #gGagnez #g3 #gJustice #gdu #gConseil.", - "[Apprendre] #rPerdez #rtoutes #rvos #rDéfenses. #gGagnez #g3 #gApparition.", + "[Étudier] #rPerdez #rtoutes #rvos #rFrappes. #gObtenez #g3 #gJustice #gdu #gConseil.", + "[Apprendre] #rPerdez #rtoutes #rvos #rDéfenses. #gObtenez #g.", "[Terminé]", "[Quitter]", "[Verrouillé] Vous ne pouvez pas encore partir.", @@ -93,4 +93,4 @@ "[Verrouillé] Requiert une Frappe ou une Défense." ] } -} \ No newline at end of file +} diff --git a/src/main/resources/hexamodResources/localization/fra/KeywordStrings.json b/src/main/resources/hexamodResources/localization/fra/KeywordStrings.json index defd085329..c2c9e0e4bd 100644 --- a/src/main/resources/hexamodResources/localization/fra/KeywordStrings.json +++ b/src/main/resources/hexamodResources/localization/fra/KeywordStrings.json @@ -14,6 +14,7 @@ "avancé", "avancer", "n'avancez", + "d'avancer", "advance", "advanced", "advancing" @@ -39,7 +40,7 @@ "d'intensité", "intensity" ], - "DESCRIPTION": "L'Intensité augmente les dégâts, l'Armure et la Brûlure appliqués par les Feu Follets lorsqu'ils sont Enflammés ." + "DESCRIPTION": "L'Intensité augmente les dégâts, la #yBrûlure [REMOVE_SPACE], et #yl'Armure [REMOVE_SPACE] appliqués par les Feu Follets lorsqu'ils sont #yEnflammés." }, { "ID": "soulburn", @@ -62,7 +63,7 @@ "extinguish", "extinguished" ], - "DESCRIPTION": "Permet au Feu Follet d'être Enflammé à nouveau, réinitialisant ses conditions d'Inflammation." + "DESCRIPTION": "Permet au Feu Follet d'être #yEnflammé à nouveau, réinitialisant ses conditions d'Inflammation." }, { "PROPER_NAME": "Inflammation", @@ -83,7 +84,7 @@ "sceau", "seal" ], - "DESCRIPTION": "Si les #b6 Sceaux ont été joués ce combat, obtenez #pLe #pSceau #pBrisé et retirez les Sceaux de votre deck." + "DESCRIPTION": "Les cartes Sceau peuvent être obtenues lors des combats d'Élite. Plus vous jouez une carte Sceau, plus vous avez de chances d'en trouver d'autres de différents types. Si les #b6 Sceaux ont été joués pendant un combat, obtenez #pLe #pSceau #pBrisé et retirez les Sceaux de votre deck." }, { "ID": "afterlife", @@ -91,15 +92,16 @@ "NAMES": [ "après-vie" ], - "DESCRIPTION": "Si cette carte est Épuisée, ses effets s'activent." + "DESCRIPTION": "L'effet en violet sera également déclenché si cette carte est #yÉpuisée [REMOVE_SPACE]." }, { - "PROPER_NAME": "Écrasent", + "PROPER_NAME": "Écrasant", "NAMES": [ - "écrasent", + "écrasant", "crushing" ], - "DESCRIPTION": "#yFeu #yFollet. #yEnflammé lorsque #b2 #yCompétences sont jouées alors que celui-ci est #yActif. #yInflammation: Lorsqu'il est #yEnflammé, infligez #b4 dégâts à un ennemi aléatoire deux fois." + "DESCRIPTION": "#yFeu #yFollet. #yEnflammé lorsque #b2 #yCompétences sont jouées alors que celui-ci est #yActif. #yInflammation [REMOVE_SPACE]: Lorsqu'il est #yEnflammé [REMOVE_SPACE], infligez #b4 dégâts à un ennemi aléatoire deux fois.", + "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 " }, { "PROPER_NAME": "Renforceur", @@ -107,7 +109,17 @@ "renforceur", "bolstering" ], - "DESCRIPTION": "#yFeu #yFollet. #yEnflammé lorsqu'un #yPouvoir est joué alors que celui-ci est #yActif. #yInflammation: Lorsqu'il est #yEnflammé, gagnez #b4 #yd'Armure et #b1 de #yForce." + "DESCRIPTION": "#yFeu #yFollet. #yEnflammé lorsqu'un #yPouvoir est joué alors que celui-ci est #yActif. #yInflammation [REMOVE_SPACE]: Lorsqu'il est #yEnflammé [REMOVE_SPACE], gagnez #b4 #yd'Armure et #b1 de #yForce [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": "Armure plaquée", + "NAMES": [ + "plated", + "plaquée" + ], + "DESCRIPTION": "À la fin de votre tour, gagnez de #yl'Armure égale à votre #yArmure #yPlaquée [REMOVE_SPACE]. Subir des dégâts d'Attaque non-bloqués réduit votre #yArmure #yPlaquée de #b1." }, { "PROPER_NAME": "Incinérateur", @@ -115,6 +127,7 @@ "incinérateur", "searing" ], - "DESCRIPTION": "#yFeu #yFollet. #yEnflammé lorsque #b2 #yAttaques sont jouées alors que celui-ci est #yActif. #yInflammation: Lorsqu'il est #yEnflammé, appliquez #b4 de #yBrûlure à un ennemi aléatoire." + "DESCRIPTION": "#yFeu #yFollet. #yEnflammé lorsque #b2 #yAttaques sont jouées alors que celui-ci est #yActif. #yInflammation [REMOVE_SPACE]: Lorsqu'il est #yEnflammé [REMOVE_SPACE], appliquez #b4 de #yBrûlure à un ennemi aléatoire, modifié deux fois par #yl'Intensité [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 " } -] \ No newline at end of file +] diff --git a/src/main/resources/hexamodResources/localization/fra/OrbStrings.json b/src/main/resources/hexamodResources/localization/fra/OrbStrings.json index 90cdbbe4ed..8de1f60dcb 100644 --- a/src/main/resources/hexamodResources/localization/fra/OrbStrings.json +++ b/src/main/resources/hexamodResources/localization/fra/OrbStrings.json @@ -2,63 +2,63 @@ "hexamod:SearingGhostflame": { "NAME": "Feu Follet Incinérateur", "DESCRIPTION": [ - "#yEnflammé. ", + "#yEnflammé [REMOVE_SPACE]. ", "Est #yEnflammé lorsque #b" , " #yAttaque est jouée.", " #yAttaques sont jouées.", "Est #yEnflammé lorsque 2 #b2 #yAttaques sont jouées pendant que vous êtes sur celui-ci.", - " NL NL #yInflammation: Appliquez #b", + " NL NL #yInflammation [REMOVE_SPACE]: Appliquez #b", " de #yBrûlure à un ennemi aléatoire.", - " NL NL À la fin de votre tour, si ceci est #yEnflammé, #yAvancez au prochain Feu Follet." + " NL NL À la fin de votre tour, si ceci est #yEnflammé [REMOVE_SPACE], #yAvancez au prochain Feu Follet." ] }, "hexamod:CrushingGhostflame": { - "NAME": "Feu Follet Écrasent", + "NAME": "Feu Follet Écrasant", "DESCRIPTION": [ - "#yEnflammé. ", + "#yEnflammé [REMOVE_SPACE]. ", "Est #yEnflammé lorsque #b" , " #yCompétence est jouée.", " #yCompétences sont jouées.", - "Est #yEnflammé lorsque #b2 #yCompétences sont jouées pendant que vous êtes sur celui-ci.", - " NL NL #yInflammation: Infligez #b", + "#yS'enflamme lorsque #b2 #yCompétences sont jouées pendant que vous êtes sur celui-ci.", + " NL NL #yInflammation [REMOVE_SPACE]: Infligez #b", " dégâts à un ennemi aléatoire.", - " NL NL À la fin de votre tour, si ceci est #yEnflammé, #yAvancez au prochain Feu Follet." + " NL NL À la fin de votre tour, si ceci est #yEnflammé [REMOVE_SPACE], #yAvancez au prochain Feu Follet." ] }, "hexamod:BolsteringGhostflame": { "NAME": "Feu Follet Renforceur", "DESCRIPTION": [ - "#yEnflammé. ", + "#yEnflammé [REMOVE_SPACE]. ", "Est #yEnflammé lorsqu'un #yPouvoir est joué.", "Est #yEnflammé lorsqu'un #yPouvoir est joué pendant que vous êtes sur celui-ci.", - " NL NL #yInflammation: Gagnez #b", + " NL NL #yInflammation [REMOVE_SPACE]: Gagnez #b", " #yd'Armure et #b1 de #yForce.", - " NL NL À la fin de votre tour, si ceci est #yEnflammé, #yAvancez au prochain Feu Follet." + " NL NL À la fin de votre tour, si ceci est #yEnflammé [REMOVE_SPACE], #yAvancez au prochain Feu Follet." ] }, "hexamod:InfernoGhostflame": { "NAME": "Feu Follet Infernal", "DESCRIPTION": [ - "#yEnflammé. S'éteindra à la fin de chaque tour. ", + "#yEnflammé [REMOVE_SPACE]. S'éteindra à la fin de chaque tour. ", "Est #yEnflammé lorsque vous dépensez [E] [E] [E] .", "Est #yEnflammé lorsque vous dépensez [E] [E] .", "Est #yEnflammé lorsque vous dépensez [E] .", "Error. Please report to mod dev: ", "Est #yEnflammé lorsque vous dépensez [E] [E] [E] pendant que vous êtes sur celui-ci. S'éteindra à la fin de chaque tour.", " NL NL #yInflammation: Infligez #b", - " dégâts à un ennemi aléatoire pour chaque #yFeu #yFollet #yEnflammé, puis #yÉteignez-les. si tous les feu follet etait #yEnflammé, gagnez #b2 #yIntensité.", - " NL NL À la fin de votre tour, si ceci est #yEnflammé, #yAvancez au prochain Feu Follet." + " dégâts à un ennemi aléatoire pour chaque #yFeu #yFollet #yEnflammé [REMOVE_SPACE], puis #yÉteignez-les. Si tous les Feux Follets sont #yEnflammés [REMOVE_SPACE], gagnez #b2 #yIntensité [REMOVE_SPACE].", + " NL NL À la fin de votre tour, si ceci est #yEnflammé [REMOVE_SPACE], #yAvancez au prochain Feu Follet." ] }, "hexamod:MayhemGhostflame": { "NAME": "Feu Follet Chaotique", "DESCRIPTION": [ - "#yEnflammé. ", + "#yEnflammé [REMOVE_SPACE]. ", "Est #yEnflammé lorsque vous terminez votre tour.", "Est #yEnflammé lorsque vou terminez votre tour sur celui-ci.", - " NL NL #yInflammation: #yScrutez #b.", - " puis jouez la carte au dessus de la pioche.", - " NL NL À la fin de votre tour, si ceci est #yEnflammé, #yAvancez au prochain Feu Follet." + " NL NL #yInflammation [REMOVE_SPACE]: #yScrutez #b.", + " puis jouez la carte au dessus de la pioche, modifié par #yl'Intensité [REMOVE_SPACE].", + " NL NL À la fin de votre tour, si ceci est #yEnflammé [REMOVE_SPACE], #yAvancez au prochain Feu Follet." ] } -} \ No newline at end of file +} diff --git a/src/main/resources/hexamodResources/localization/fra/PotionStrings.json b/src/main/resources/hexamodResources/localization/fra/PotionStrings.json index b13a17e0f5..31e60a4d1e 100644 --- a/src/main/resources/hexamodResources/localization/fra/PotionStrings.json +++ b/src/main/resources/hexamodResources/localization/fra/PotionStrings.json @@ -3,30 +3,30 @@ "NAME": "Cocktail molotov", "DESCRIPTIONS": [ "Appliquez #b", - " de #yBrûlure." + " de #yBrûlure [REMOVE_SPACE]." ] }, "hexamod:DoubleChargePotion": { "NAME": "Fluide combustible", "DESCRIPTIONS": [ - "#yEnflammez le Feu Follet #yActif #b", + "#yEnflammez le Feu Follet actuel #b", " fois." ] }, "hexamod:EctoCoolerPotion": { - "NAME": "Potion Ethérée", + "NAME": "Ecto-Fraîcheur", "DESCRIPTIONS": [ - "Choisissez #b1 carte #yEthérée parmi #b3 aléatoires de n'importe quelle classe dans votre main. Elle coûte #b0 ce tour.", - "hoisissez #b1 carte #yEthérée parmi #b3 aléatoires de n'importe quelle classe et ajoutez-en #b", + "Choisissez #b1 carte #yEthérée parmi #b3 aléatoires à obtenir dans votre main. Elle coûte #b0 ce tour.", + "Choisissez #b1 carte #yEthérée parmi #b3 aléatoires et ajoutez-en #b", " copies dans votre main. Elles coûtent #b0 ce tour." ] }, "hexamod:InfernoChargePotion": { "NAME": "Potion infernale", "DESCRIPTIONS": [ - "Vos feu follet affecte tous les ennemies pour se combat.", - "Vos feu follet affecte tous les ennemies #b", - " fois pour se combat." + "Vos Feux Follets affecte TOUS les ennemies pour ce combat.", + "Vos Feux Follets affecte TOUS les ennemies #b", + " fois pour ce combat." ] } -} \ No newline at end of file +} diff --git a/src/main/resources/hexamodResources/localization/fra/PowerStrings.json b/src/main/resources/hexamodResources/localization/fra/PowerStrings.json index 600cc0c998..1f1c96ad6b 100644 --- a/src/main/resources/hexamodResources/localization/fra/PowerStrings.json +++ b/src/main/resources/hexamodResources/localization/fra/PowerStrings.json @@ -5,14 +5,15 @@ "#yN'avancez pas à la fin de votre prochain tour.", "#yN'avancez pas à la fin de vos #b", " prochains tours." - ] + ], + "TRANSLATOR_NOTE": "not used not used not used not used not used not used not used not used" }, "hexamod:ApocalypticArmorPower": { "NAME": "Doomsday", "DESCRIPTIONS": [ "La prochaine fois que vous #yEnflammez #b", " Feu Follets, gagnez un tour supplémentaire.", - "La prochaine fois que vous #yEnflammez au moins un #b" + "La prochaine fois que vous #yEnflammez au moins #b" ] }, "hexamod:ApplyBurnAtTurnStartOncePower": { @@ -20,14 +21,16 @@ "DESCRIPTIONS": [ "Au début de votre prochain tour, appliquez #b", " de #yBrûlure à TOUS les ennemis." - ] + ], + "TRANSLATOR_NOTE": "not used not used not used not used not used not used not used not used" }, "hexamod:BurnPerTurnPower": { "NAME": "Métal fondu", "DESCRIPTIONS": [ "Applique #b", " de #yBrûlure après la prochain détonation de #yBrûlure sur cet ennemi." - ] + ], + "TRANSLATOR_NOTE": "not used not used not used not used not used not used not used not used" }, "hexamod:BurnPower": { "NAME": "Brûlure", @@ -42,8 +45,9 @@ "NAME": "Feu de guerre", "DESCRIPTIONS": [ "Lorsque vous infligez des dégâts non-bloqués, appliquez #b", - " de #yBrûlure." - ] + " de #yBrûlure [REMOVE_SPACE]." + ], + "TRANSLATOR_NOTE": "not used not used not used not used not used not used not used not used" }, "hexamod:CommonPostCombatPower": { "NAME": "Récompense scellée: Carte", @@ -56,17 +60,17 @@ "hexamod:CrispyPower_new": { "NAME": "Extra Croustillant", "DESCRIPTIONS": [ - "Quand #yBrûlure s'active sur une créature, applique #b", - " #yBrûlure sur eux apres activation." + "Quand la #yBrûlure s'active sur une créature, applique #b", + " #yBrûlure sur celle-ci après activation." ] }, "hexamod:EnhancePower": { "NAME": "Intensité", "DESCRIPTIONS": [ - "Augmentez les dégâts, la #yBrûlure, et l'Armure appliqué par les Feu Follets lorsqu'ils sont Enflammés par #b", - ".", - "Diminuez les dégâts, la #yBrûlure, et l'Armure appliqué par les Feu Follets lorsqu'ils sont Enflammés par #b", - "Double efficacité sur le #yFeu #yFollet #yIncinérateur." + "Augmentez les dégâts, la #yBrûlure [REMOVE_SPACE], et l'Armure appliquées par les Feu Follets lorsqu'ils sont Enflammés de #b", + " [REMOVE_SPACE].", + "Diminuez les dégâts, la #yBrûlure [REMOVE_SPACE], et l'Armure appliqué par les Feu Follets lorsqu'ils sont Enflammés de #b", + "Est deux fois plus efficace pour les #yFeux #yFollets #yIncinérateurs." ] }, "hexamod:EtherealRefundPower": { @@ -74,18 +78,19 @@ "DESCRIPTIONS": [ "Lorsque vous jouez une carte #yÉthérée ce tour, gagnez ", " ." - ] + ], + "TRANSLATOR_NOTE": "not used not used not used not used not used not used not used not used" }, "hexamod:FuturePower": { - "NAME": "Dans l'ombre", + "NAME": "Dans l'Ombre", "DESCRIPTIONS": [ - "Quand vous #yrétractez , vos prochaines #b", - " carte sera gratuite et sera #yÉpuiser.", - " cartes seront gratuites et seront #yÉpuiser." + "Lorsque vous #yRétractez [REMOVE_SPACE], vos prochaines #b", + " carte sera gratuite et sera #yÉpuisée [REMOVE_SPACE].", + " cartes seront gratuites et seront #yÉpuisées [REMOVE_SPACE]." ] }, "hexamod:FutureUpgradePower": { - "NAME": "Récompense scellée: Upgrade", + "NAME": "Récompense scellée: Amélioration", "DESCRIPTIONS": [ "À la fin du combat, #yAméliorez #b", " carte aléatoire dans votre deck.", @@ -93,30 +98,31 @@ ] }, "hexamod:StopFromAdvancingPower": { - "NAME": "Ici et maintenant", + "NAME": "Ici et Maintenant", "DESCRIPTIONS": [ - "A la fin de votre tour, #yÉteignait le feu follet actuel." + "À la fin de votre tour, #yÉteignez le Feu Follet actuel." ] }, "hexamod:GhostFlameBarrierPower": { - "NAME": "Barrière de feux follets", + "NAME": "Barrière de Feux Follets", "DESCRIPTIONS": [ - "Lorsque vous êtes attaqués, applique #b", + "Lorsque vous êtes attaqué, applique #b", " de #yBrûlure à l'attaquant." - ] + ], + "TRANSLATOR_NOTE": "not used not used not used not used not used not used not used not used" }, "hexamod:GiftsFromBeyondPower": { "NAME": "Cartes cadeaux", "DESCRIPTIONS": [ - "Au début de votre tour, ajouter #b", + "Au début de votre tour, obtenez #b", " carte #yAprès-vie dans votre main.", " cartes #yAprès-vie dans votre main." ] }, "hexamod:GoldPostCombatPower": { - "NAME": "Récompense scellée: Gold", + "NAME": "Récompense scellée: Or", "DESCRIPTIONS": [ - "L'Or gagné comme récompense pour ce combat est augmenté par #b", + "L'Or gagné comme récompense pour ce combat est augmenté de #b", " ." ] }, @@ -124,7 +130,7 @@ "NAME": "Forme infernale", "DESCRIPTIONS": [ "Au début de votre tour, gagnez #b", - " #yd'Intensité." + " #yd'Intensité [REMOVE_SPACE]." ] }, "hexamod:LoseEnhanceInTurnsPower": { @@ -133,22 +139,27 @@ "À la fin de votre tour, perdez #b", "Dans #b", " tours, perdez #b", - " #yd'Intensité." - ] + " #yd'Intensité [REMOVE_SPACE]." + ], + "TRANSLATOR_NOTE": "not used not used not used not used not used not used not used not used" }, "hexamod:ParanormalFormPower": { "NAME": "Poltergeist", "DESCRIPTIONS": [ - "Lorsque vous jouez une carte #yAprès-vie, un ennemie aléatoire perds #b", + "Lorsque vous jouez une carte #yÉthérée, un ennemi aléatoire perd #b", " PV." ] }, "hexamod:PastPower": { - "NAME": "Danse du démon", + "NAME": "Danse du Démon", "DESCRIPTIONS": [ - "A chaque fois que vous #yRétractez, piochez #b", - " carte.", - " cartes." + "La première fois que vous #yAvancez ou #yRétractez chaque tour, piochez une carte.", + "Les #b", + " premières fois que vous #yAvancez ou #yRétractez chaque tour, piochez une carte.", + " NL Cet effet peut être encore déclenché #b", + " fois de plus ce tour.", + " fois de plus ce tour.", + " NL Cet effet ne peut pas déclenché à nouveau ce tour." ] }, "hexamod:PotionPostCombatPower": { @@ -163,7 +174,7 @@ "NAME": "Flammes radiantes", "DESCRIPTIONS": [ "Chaque fois qu'un Feu Follet est #yEnflammé, gagnez #b", - " #yBlocage." + " #yd'Armure [REMOVE_SPACE]." ] }, "hexamod:SealPostCombatPower": { @@ -172,7 +183,8 @@ "À la fin du combat, obtenez #b", " cartes #ySceau supplémentaires.", " carte #ySceau supplémentaire." - ] + ], + "TRANSLATOR_NOTE": "not used not used not used not used not used not used not used not used" }, "hexamod:TimeStopPower": { "NAME": "Jugement dernier", @@ -183,7 +195,7 @@ ] }, "hexamod:VolcanoVisagePower": { - "NAME": "Façade du volcan", + "NAME": "Façade Volcanique", "DESCRIPTIONS": [ "Chaque fois que vous #yEnflammez un feu follet, appliquez #b", " de #yBrûlure à TOUS les ennemis." @@ -202,10 +214,10 @@ ] }, "hexamod:SoulburnOnExhaustPower": { - "NAME": "Infestation de brûlures", + "NAME": "Brûlure infestée", "DESCRIPTIONS": [ - "Chaque fois que vous #yÉpuiser une carte se tour, appliquez #b", - " #yBrûlure a cette créature." + "Chaque fois que vous #yÉpuisez une carte ce tour, appliquez #b", + " de #yBrûlure à cette créature." ] }, "hexamod:LoseIntensityPower": { @@ -225,17 +237,17 @@ "hexamod:InfernoPotionPower": { "NAME": "HexaBrûlure", "DESCRIPTIONS": [ - "Vos feu follet affecte tous les ennemies pour se combat.", - "Vos feu follet affecte tous les ennemies #b", - " fois pour se combat." + "Les effets de vos Feux Follets affecte tous les ennemies pour ce combat.", + "Les effets de vos Feux Follets affecte tous les ennemies #b", + " fois pour ce combat." ] }, "hexamod:PlayCardAndExhaustPower": { - "NAME": "Changement d'ombre", + "NAME": "Ombre déplacée", "DESCRIPTIONS": [ - "Votre prochaine carte et gratuite puis sera #yÉpuiser.", - "Vos prochaines #b", - " cartes seront gratuites puis seront #yÉpuiser." + "Votre prochaine carte est gratuite puis #ys'Épuise [REMOVE_SPACE].", + "Vos #b", + " prochaines cartes seront gratuites puis #ys'Épuisent [REMOVE_SPACE]." ] } -} \ No newline at end of file +} diff --git a/src/main/resources/hexamodResources/localization/fra/RelicStrings.json b/src/main/resources/hexamodResources/localization/fra/RelicStrings.json index baf70719d2..98d8c1830c 100644 --- a/src/main/resources/hexamodResources/localization/fra/RelicStrings.json +++ b/src/main/resources/hexamodResources/localization/fra/RelicStrings.json @@ -3,14 +3,17 @@ "NAME": "Marque d'esprit", "FLAVOR": "Un protecteur enchaîné.", "DESCRIPTIONS": [ - "La première fois que vous #yEnflammez un Feu Follet chaque tour, gagnez #b4 #yd'Armure." + "La première fois que vous #yhexamod:Enflammez un Feu Follet chaque tour, gagnez #b", + " #yd'Armure [REMOVE_SPACE]." ] }, "hexamod:TheBrokenSeal": { "NAME": "Le Sceau Brisé", "FLAVOR": "Un pouvoir illimité, sans limite, inextinguible.", "DESCRIPTIONS": [ - "Lorsque vous le récupérez, augmentez vos PV Max de #b10, puis soignez-vous entièrement. Commencez chaque combat avec #b2 de #yForce, #b2 de #yDextérité, et #b2 #yhexamod:d'Intensité. Vous ne pouvez pas obtenir #pLe #pSceau #pBrisé à nouveau." + "Lorsque vous le récupérez, augmentez vos PV Max de #b", + " [REMOVE_SPACE], puis soignez-vous entièrement. Commencez chaque combat avec #b", + " de #yForce [REMOVE_SPACE], de #yDextérité [REMOVE_SPACE], et #yhexamod:d'Intensité [REMOVE_SPACE]. Vous ne pouvez pas obtenir #pLe #pSceau #pBrisé à nouveau ainsi que les autres Sceaux." ] }, "hexamod:UnbrokenSoul": { @@ -18,86 +21,94 @@ "FLAVOR": "Voyons voir si je peux faire... mieux.", "DESCRIPTIONS": [ "Remplace ", - ".[] NL A chaque fois que vous #yEnflammez un Feu Follet , gagnez #b4 #yd'Armure ." + " [REMOVE_SPACE].[] NL Lorsque vous #yhexamod:Enflammez un Feu Follet, gagnez #b", + " #yd'Armure [REMOVE_SPACE]." ] }, "hexamod:IceCube": { - "NAME": " Charme de glace de Xanatos", + "NAME": "Charme de glace de Xanatos", "FLAVOR": "Je me sens... frigorifié.", "DESCRIPTIONS": [ - "Gagnez [E] au début de votre tour. La #yhexamod:Brûlure prend #b4 tours à s'activer, Commencez chaque combat avec #b1 de moins #yhexamod:d'Intensité." + "Gagnez [E] au début de votre tour. Commencez chaque combat avec #b", + " #yhexamod:d'Intensité de moins, et ne recevez aucune #yhexamod:Intensité du #yFeu #yFollet #Infernal [REMOVE_SPACE]." ] }, "hexamod:SoulStone": { - "NAME": "Pierre thermale", + "NAME": "Pierre d'âme", "FLAVOR": "Un feu animerait cette chose!", "DESCRIPTIONS": [ - "A chaque fois que vous #yEpuiser #b3 cartes, #yhexamod:Enflammez le Feu Follet actuel." + "À chaque fois que vous #yÉpuisez #b", + " cartes, #yhexamod:Enflammez le Feu Follet actuel." ] }, "hexamod:RecyclingMachine": { "NAME": "Recycleur", "FLAVOR": "Un jour, cet appareil sera recyclé à son tour.", "DESCRIPTIONS": [ - "La première fois qu'une carte #yÉthérée qui ne soit si Statut ni Malédiction #ys'Épuise chaque combat, ajoutez une copie de celle-ci dans votre main qui coûte 0 jusqu'à ce qu'elle soit jouée." + "La première fois qu'une carte #yÉthérée qui ne soit ni #yStatut ni #rMalédiction #ys'Épuise chaque combat, ajoutez une copie de celle-ci dans votre main qui coûte 0 jusqu'à ce qu'elle soit jouée." ] }, "hexamod:MatchstickCase": { "NAME": "Allumette sournoise en teck", "FLAVOR": "S'allume sur n'importe quelle surface!", "DESCRIPTIONS": [ - "Au début de chaque combat, #yhexamod:Enflammez le Feu Follet actuel et #yhexamod:Avancez." + "La première fois que vous #yhexamod:Enflammez chaque tour, vous pouvez choisir #yhexamod:d'Avancer ou de #yhexamod:Rétracter [REMOVE_SPACE]." ] }, "hexamod:InflammatoryLetter": { "NAME": "Pot de TOBSCo", "FLAVOR": "Un peu de piquant en plus, ça rend tout meilleur.", "DESCRIPTIONS": [ - "Commencez chaque combat avec #b1 #yhexamod:d'Intensité." + "Commencez chaque combat avec #b", + " #yhexamod:d'Intensité." ] }, "hexamod:SoulOfChaos": { "NAME": "Âme chaotique", "FLAVOR": "Le chaos, rendu manifeste.", "DESCRIPTIONS": [ - "Le deuxieme Feu Follet devient un #yFeu #yFollet #yChaotique. NL Le #yFeu #yFollet #yChaotique s'active lorsque vous terminez votre tour sur celui-ci. NL #yInflammation: Jouez la carte du haut de votre pioche." + "Au début de votre tour, avancez vers un Feu Follet aléatoire et randomisez-le. À la fin de votre tour, jouez la carte en haut de votre pioche." ] }, "hexamod:JarOfFuel": { "NAME": "Bouclier d'Olexa", "FLAVOR": "Protection sur demande.", "DESCRIPTIONS": [ - "Les cartes #yPouvoir compte pour la progression du #yFeu #yFollet #yIncinérateur et #yÉcrasent." + "Les cartes #yPouvoir comptent pour la progression des #yFeux #yFollets #yIncinérateur et #yÉcrasant [REMOVE_SPACE]." ] }, "hexamod:BolsterEngine": { "NAME": "Baguette des flammes ardentes", "FLAVOR": "Boucliers de feu! Le feu se renforce.", "DESCRIPTIONS": [ - "La première fois que vous jouez un #yPouvoir chaque combat, gagnez #b6 #yd'Armure et #b1 de #yForce." + "La première fois que vous jouez un #yPouvoir chaque combat, gagnez #b", + "6 #yd'Armure et #b", + "1 de #yForce [REMOVE_SPACE]." ] }, "hexamod:CandleOfCauterizing": { "NAME": "Bougie rouge", "FLAVOR": "Le feu, ça BRÛLE...", "DESCRIPTIONS": [ - "A chaque fois que vous appliqué #yhexamod:Brûlure, appliqué #b3 #yhexamod:Brûlure supplémentaire." + "Lorsque vous appliquez de la #yhexamod:Brûlure [REMOVE_SPACE], appliquez-en #b", + " de plus." ] }, "hexamod:Sixitude": { "NAME": "Étoile à six pointes", "FLAVOR": "Feu, feu, feu, feu, feu, FEU!", "DESCRIPTIONS": [ - "Lorsque vous jouez #b6 cartes, infligez #b6 dégâts à un ennemi aléatoire." + "Lorsque vous jouez #b", + " cartes qui ne coûtent pas #b0, obtenez un #gremlin:Écho d'une #yFrappe basique. Elle coûte #b0." ] }, "hexamod:Libra": { "NAME": "Balance", "FLAVOR": "Équilibre en toutes choses.", "DESCRIPTIONS": [ - "Choisissez n'importe quel nombre de vos frappes et défenses a #yTransformer en leur type opposer.", - "la balance de la justice a agit.", - "Choisissez n'importe quel nombre de carte a transformer en leur type opposer." + "Choisissez n'importe quel nombre de vos frappes et défenses à #yTransformer en leur type opposé.", + "La Balance de la justice a agi.", + "Choisissez n'importe quel nombre de cartes à transformer en leur type opposé." ] } } diff --git a/src/main/resources/hexamodResources/localization/fra/RunModStrings.json b/src/main/resources/hexamodResources/localization/fra/RunModStrings.json index 9e26dfeeb6..50433db1ba 100644 --- a/src/main/resources/hexamodResources/localization/fra/RunModStrings.json +++ b/src/main/resources/hexamodResources/localization/fra/RunModStrings.json @@ -1 +1,6 @@ -{} \ No newline at end of file +{ + "Slimebound:AllSplit": { + "NAME": "Slime the Spire", + "DESCRIPTION": "Tous les ennemis se divisent en deux ennemis Slime." + } +} diff --git a/src/main/resources/hexamodResources/localization/fra/UIStrings.json b/src/main/resources/hexamodResources/localization/fra/UIStrings.json index 6cf1e7be95..6a77246478 100644 --- a/src/main/resources/hexamodResources/localization/fra/UIStrings.json +++ b/src/main/resources/hexamodResources/localization/fra/UIStrings.json @@ -15,5 +15,11 @@ "Sceau", "hexamod:Sceau. NL " ] + }, + "hexamod:SealMode": { + "TEXT": [ + "Legacy Mode - Six Sceaux", + "Ajoute régulièrement des récompenses de Sceau pendant les combats. Rassemblez les Sceaux pour obtenir une relique spéciale. Jouer avec cette option activée rendra le jeu plus facile." + ] } } \ No newline at end of file diff --git a/src/main/resources/hexamodResources/localization/jpn/CardStrings.json b/src/main/resources/hexamodResources/localization/jpn/CardStrings.json index 47d513c3fd..12e8e9c1ae 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": "カリッカリ", @@ -105,14 +105,14 @@ "hexamod:Float": { "NAME": "浮遊", "DESCRIPTION": "カードを 1 枚引く。 NL hexamod:前進", - "UPGRADE_DESCRIPTION": "カードを 1 枚引く。 NL hexamod:後退 または hexamod:前進 を選択し行う。", + "UPGRADE_DESCRIPTION": "カードを 1 枚引く。 NL hexamod:後退 または hexamod:前進 を選択し行う。", "EXTENDED_DESCRIPTION": ["hexamod:前進","hexamod:後退", "留まる"] }, "hexamod:MatchstickFloat": { - "NAME": "こっそりチーク材マッチ", + "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:前進","hexamod:後退", "留まる"] + "EXTENDED_DESCRIPTION": ["hexamod:Advance.","hexamod:Retract.", "Do nothing."] }, "hexamod:Floatwork": { "NAME": "浮遊移動", @@ -123,12 +123,12 @@ }, "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": "即席インフェルノ", @@ -144,8 +144,8 @@ }, "hexamod:IntoShadow": { "NAME": "潜影", - "DESCRIPTION": "エセリアル NL あなたが hexamod:後退 を行う度、あなたは次のカードを自由にプレイし、廃棄する。", - "UPGRADE_DESCRIPTION": "あなたが hexamod:後退 を行う度、あなたは次のカードを自由にプレイし、廃棄する。", + "DESCRIPTION": "エセリアル NL hexamod:後退 を行う度、次のカードはコストが0になりプレイ後に廃棄される。", + "UPGRADE_DESCRIPTION": "hexamod:後退 を行う度、次のカードはコストが0になりプレイ後に廃棄される。", "EXTENDED_DESCRIPTION": [ "プレイして廃棄する" ], @@ -157,8 +157,8 @@ }, "hexamod:DevilsDance": { "NAME": "デビルズダンス", - "DESCRIPTION": " *後退 を行う度、 カードを1枚引く。 NL hexamod:後退", - "UPGRADE_DESCRIPTION": "天賦 NL *後退 を行う度、 [E] を得てカードを1枚引く。 NL hexamod:後退" + "DESCRIPTION": "各ターンで初めて hexamod:前進 または hexamod:後退 を行った時、 カードを1枚引く。", + "UPGRADE_DESCRIPTION": "各ターンで !M! 回まで hexamod:前進 または hexamod:後退 を行った時、 カードを1枚引く。" }, "hexamod:HereAndNow": { "NAME": "今ここで", @@ -168,7 +168,7 @@ "NAME": "ゴーストシールド", "DESCRIPTION": "エセリアル NL [#e087a4]死後[] NL 1 ブラー を得る。 NL ", "EXTENDED_DESCRIPTION": [ - " !B! ブロックを得る。" + "!B! ブロックを得る" ] }, "hexamod:GiftsFromBeyond": { @@ -188,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! ブロック。)" @@ -216,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": "価値ある犠牲", @@ -255,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": "彼方からの力", @@ -330,7 +330,7 @@ }, "hexamod:LivingBomb": { "NAME": "リビングボム", - "DESCRIPTION": " !burny! hexamod:ソウルバーン を与える。この敵に炸裂した時、敵全体にダメージを与える。" + "DESCRIPTION": "!burny! hexamod:ソウルバーン を与える。この敵に炸裂した時、敵全体にダメージを与える。" }, "hexamod:SpectersWail": { "NAME": "幽霊の泣き声", @@ -338,23 +338,24 @@ }, "hexamod:BrightRitual": { "NAME": "輝きの儀式", - "DESCRIPTION": "[E] を得てカードを1枚引く。これを *発火 しているゴーストフレイムの数だけ繰り返し、それらを hexamod:滅却 する。 NL 廃棄" + "DESCRIPTION": "一番目のゴーストフレイムに移動する。 NL [E] を得てカードを1枚引く。これを *発火 している数だけ繰り返し、それらを hexamod:滅却 する。 NL 廃棄" + }, "hexamod:NaughtySpirit": { "NAME": "イタズラな魂", - "DESCRIPTION": "!burny! hexamod:ソウルバーン を与える NL 現在のゴーストフレイムが hexamod:点火 状態の場合、このカードを手札に戻し、 hexamod:後退 する。" + "DESCRIPTION": "!burny! hexamod:ソウルバーン を与える NL 現在のゴーストフレイムが hexamod:点火 状態の場合、このカードを手札に戻す。 NL hexamod:後退" }, "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": { @@ -368,7 +369,7 @@ }, "hexamod:ThermalTransfer": { "NAME": "熱転送", - "DESCRIPTION": " !D! ダメージを与える。 NL 対象が *ソウルバーン 状態なら、 !B! ブロックを得る。" + "DESCRIPTION": "!D! ダメージを与える。 NL 対象が *ソウルバーン 状態なら、 !B! ブロックを得る。" }, "hexamod:TimeOfNeed": { "NAME": "必要な時", @@ -376,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": { @@ -391,7 +392,7 @@ }, "hexamod:UnleashSpirits": { "NAME": "解き放たれる霊", - "DESCRIPTION": "ランダムな敵に !D! ダメージを与える。 NL これを *廃棄 された *エセリアル の数だけ繰り返す。 NL 廃棄", + "DESCRIPTION": "ランダムな敵に !D! ダメージを与える。 NL これを 前のターンに *廃棄 された *エセリアル の数だけ繰り返す。", "UPGRADE_DESCRIPTION": " NL ( !M! 回)" }, "hexamod:UnlimitedPower": { @@ -444,15 +445,12 @@ }, "hexamod:LingeringShades": { "NAME": "残影", - "DESCRIPTION": "hexamod:後退 NL !burny! hexamod:ソウルバーン を与える。 NL 捨て札にあるエセリアルカード全てを山札に戻す。" + "DESCRIPTION": "hexamod:後退 NL !burny! hexamod:ソウルバーン を与える。 NL 捨て札にあるエセリアルカードを全て手札に戻す。" }, "hexamod:EtherStep": { "NAME": "エーテルステップ", - "DESCRIPTION": "エセリアル NL [#e087a4]死後[] NL 手札を1枚 廃棄 する。 NL カードを !M! 枚引く。 NL ", - "UPGRADE_DESCRIPTION": "エセリアル NL [#e087a4]死後[] NL 手札を1枚 廃棄 する。 NL カードを !M! 枚引く。 NL ", - "EXTENDED_DESCRIPTION": [ - "!D! ダメージを与える。" - ] + "DESCRIPTION": "エセリアル NL [#e087a4]死後[] NL !D! [#e087a4]ダメージを与える。[] NL 手札を1枚 廃棄 する。 NL カードを !M! 枚引く。", + "UPGRADE_DESCRIPTION": "エセリアル NL [#e087a4]死後[] NL !D! [#e087a4]ダメージを与える。[] NL 手札を1枚 廃棄 する。 NL カードを !M! 枚引く。" }, "hexamod:OpposingAction": { "NAME": "反抗", @@ -460,13 +458,13 @@ "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:後退 して !B! ブロックを得る。" + "DESCRIPTION": "直前のゴーストフレイムが hexamod:点火 されていた場合、 hexamod:後退 し、 !B! ブロックを得る。" }, "hexamod:SpectralGrace": { "NAME": "魂の恩寵", @@ -534,10 +532,10 @@ "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." - }, + "NAME": "デビルズダンス", + "DESCRIPTION": "各ターンで初めて hexamod:前進 または hexamod:後退 を行った時、 カードを1枚引く。", + "UPGRADE_DESCRIPTION": "各ターンで !M! 回まで hexamod:前進 または hexamod:後退 を行った時、 カードを1枚引く。" + }, "hexamod:GhostOfSpireFuture": { "NAME": "Into Shadow", "DESCRIPTION": "Ethereal. NL Whenever you hexamod:Retract, choose a card in your hand to play and Exhaust.", @@ -549,7 +547,7 @@ "hexamod:HexaLevel": { "NAME": "地獄化", "DESCRIPTION": "ターン開始時、 hexamod:火力 !M! を得る。", - "UPGRADE_DESCRIPTION": "hexamod:火力 !M! を得る。 NL ターン開始時、 !M! 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 e17f38119d..9c61830340 100644 --- a/src/main/resources/hexamodResources/localization/jpn/EventStrings.json +++ b/src/main/resources/hexamodResources/localization/jpn/EventStrings.json @@ -7,19 +7,19 @@ "あなたが虹色に輝く白い箱を受け取ると、それはあなたの手で @砕け散った@ !。砕けた魂を集めると突如 #p黒い手 が現れ、あなたの身体に ~入り込んだ~ 。", "あなたは奇妙な #y黄金 の箱を受け取り、それを開いた。 #p闇 が流れるのを感じる。中に入っていたのは便利な装備だった!", "あなたは脈打つ @鼓動@ を感じる箱を手に取った。鼓動があなたの腕に @流れ込む@ のを感じた。 #p吐き気を催した が、その分強くなった気がする...", - "あなたが霊の持つ遺物を握りしめた途端、部屋は #p闇 に覆われた。幽霊はもう一度あなたに話しかけるが、その言葉は耳を通り越し直接あなたの脳内に聞こえてきた。 NL NL ' #p賢明な選択だ。別の取引はどうだ、友よ?好きなだけ選んでくれ... '", + "あなたが霊の持つ遺物を握りしめた途端、部屋は #p闇 に覆われた。幽霊はもう一度あなたに話しかけるが、その言葉は耳を通り越し直接あなたの脳内に聞こえてきた。 NL NL ' #p賢明な選択だ。もう一度取引を行うか、友よ?好きなだけ選んでくれ... '", "この #p霊が 要求する取引には高すぎる代償が必要であることをあなたは知っている。何とか対処しなければ。そして、なんという幸運。壁に! #bブラックキャンドル が! NL NL あなたは壁からキャンドルをひったくり、 #r自分の身体を傷つけながらも それを霊へと投げつけると、霊は #b不気味な色合い になって消えていく。 NL NL この霊は最早どんな取引も行うことはないだろう。", - "この #p霊が 要求する取引には高すぎる代償が必要であることをあなたは知っている。何とか対処しなければ。しかし幸運なことにあなたの手には #bブラックキャンドル がある。それを霊へと投げつけると、霊は #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ランダムな呪い", - "[取引:ソウル] #g入手: #g100 #gソウル。 #rランダムな呪い", + "[取引:ライフ] #g入手: #g最大HP+12。 #rランダムな呪い", + "[取引:ソウル] #g入手: #g180 #gソウル。 #rランダムな呪い", "[Locked] 取引は終わった。", "[立ち去る]" ] @@ -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" ] }, @@ -93,4 +93,4 @@ "[Locked] 必要:ストライクまたは防御" ] } -} +} \ No newline at end of file diff --git a/src/main/resources/hexamodResources/localization/jpn/KeywordStrings.json b/src/main/resources/hexamodResources/localization/jpn/KeywordStrings.json index acbac9e39b..a194ecfef1 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": "火力", @@ -72,7 +72,7 @@ "seal", "封印" ], - "DESCRIPTION": "この戦闘で #b6 個すべての封印がプレイされた場合 (重複を除く)、 #p壊れた封印 を入手し、自分のデッキから封印を取り除く。" + "DESCRIPTION": "封印を持つカードはエリート及びボス戦でドロップする。また、封印カードを多くプレイしているほど異なる封印を見つけやすくなる。一度の戦闘で #b6 種類すべての封印がプレイされた場合、 #p壊れた封印 を入手し、デッキから #b6 種の封印を取り除く。" }, { "ID": "afterlife", @@ -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 a925382deb..005b3750fc 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占術 #b を行い", - " 山札の一番上のカードをプレイする。", + " 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/PotionStrings.json b/src/main/resources/hexamodResources/localization/jpn/PotionStrings.json index 2bdcfa4190..8aada66626 100644 --- a/src/main/resources/hexamodResources/localization/jpn/PotionStrings.json +++ b/src/main/resources/hexamodResources/localization/jpn/PotionStrings.json @@ -16,8 +16,8 @@ "hexamod:EctoCoolerPotion": { "NAME": "エクトクーラー", "DESCRIPTIONS": [ - "全てのクラスの ランダムな #yエセリアル を持つカード #b3 枚から #b1 枚を選択し、手札に加える。このターン、そのコストは #b0", - "全てのクラスの ランダムな #yエセリアル を持つカード #b3 枚から #b1 枚を選択し、 #b", + "ランダムな #yエセリアル を持つカード #b3 枚から #b1 枚を選択し、手札に加える。このターン、そのコストは #b0", + "ランダムな #yエセリアル を持つカード #b3 枚から #b1 枚を選択し、 #b", " 枚のコピーを手札に加える。このターン、そのコストは #b0" ] }, diff --git a/src/main/resources/hexamodResources/localization/jpn/PowerStrings.json b/src/main/resources/hexamodResources/localization/jpn/PowerStrings.json index 8c23129214..b990e4e57b 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倍になる。" ] }, @@ -153,9 +153,13 @@ "hexamod:PastPower": { "NAME": "デビルズダンス", "DESCRIPTIONS": [ - " #y後退 する度に、カードを #b", - " 枚引く。", - " 枚引く。" + "ターン毎に最初に #y前進 または #y後退 した時、カードを #b1 枚引く。", + "ターン毎に #b。", + " 回の間 #y前進 または #y後退 した時、カードを #b1 枚引く。", + " NL この効果はターン中あと #b", + " 発動出来る。", + " 発動出来る。", + " NL このターンはもう発動しない。" ] }, "hexamod:PotionPostCombatPower": { @@ -241,9 +245,9 @@ "hexamod:PlayCardAndExhaustPower": { "NAME": "変化する影", "DESCRIPTIONS": [ - "次のカードは自由にプレイ出来るが #y廃棄 される。 [REMOVE_SPACE].", + "次のカードは コストを支払わずにプレイ出来る。その後それらは #y廃棄 される。", "次の #b", - " 枚のカードは自由にプレイ出来るが #y廃棄 される。 [REMOVE_SPACE]." + " 枚のカードはコストを支払わずにプレイ出来る。その後それらは #y廃棄 される。" ] } } diff --git a/src/main/resources/hexamodResources/localization/jpn/RelicStrings.json b/src/main/resources/hexamodResources/localization/jpn/RelicStrings.json index 01752f92e7..1ccd582582 100644 --- a/src/main/resources/hexamodResources/localization/jpn/RelicStrings.json +++ b/src/main/resources/hexamodResources/localization/jpn/RelicStrings.json @@ -3,43 +3,49 @@ "NAME": "スピリットブランド", "FLAVOR": "拘束用のプロテクター", "DESCRIPTIONS": [ - "各ターンで 初めて #y点火 した時 #b4 #yブロック を得る。" + "各ターンで 初めて #y点火 した時 #b", + " #yブロック を得る。" ] }, "hexamod:TheBrokenSeal": { "NAME": "壊れた封印", "FLAVOR": "無制限で無制御で無尽蔵のパワー。", "DESCRIPTIONS": [ - "入手時、 最大HP + #b10 。HPを全回復。戦闘が #y筋力 #b2 #y敏捷性 #b2 更に #yhexamod:火力 #b2 上昇した状態で開始。このレリックを複数得る事は出来ない。" + "入手時、 最大HP + #b", + " 。HPを全回復。各戦闘開始時に #b", + " だけ #y筋力 、 #y敏捷性 、 #yhexamod:火力 が上昇する。このレリックを複数得る事は出来ない。" ] }, "hexamod:UnbrokenSoul": { "NAME": "エーテルのマーク", "FLAVOR": "もっといい物が出来るか試してみよう...。", "DESCRIPTIONS": [ - "スピリットブランド", - " [] NL と置き換える。 NL #y点火 した時 #b4 #yブロック を得る。" + "", + " スピリットブランド と置き換える。 NL #y点火 した時 #b", + " #yブロック を得る。" ] }, "hexamod:IceCube": { "NAME": "ザナトスの凍てつく護符", "FLAVOR": "なんだか...寒い。", "DESCRIPTIONS": [ - "ターン開始時 [E] を得る。 戦闘開始時 #b1 #yhexamod:火力 を失い、 #yhexamod:インフェルノゴーストフレイム から #yhexamod:火力 を得られなくなる。" + "ターン開始時 [E] を得る。 戦闘開始時 #b", + " #yhexamod:火力 を失い、 #yインフェルノゴーストフレイム から #y火力 を得られなくなる。" ] }, "hexamod:SoulStone": { "NAME": "ソウルストーン", "FLAVOR": "ソウルがあれば活気が出る!", "DESCRIPTIONS": [ - "#b3 枚のカードを #y廃棄 する度に、現在のゴーストフレイムが #yhexamod:点火 される。" + "#b", + " 枚のカードを #y廃棄 する度に、現在のゴーストフレイムが #yhexamod:点火 される。" ] }, "hexamod:RecyclingMachine": { "NAME": "リサイクラー", "FLAVOR": "何時の日かこれもリサイクルされるだろう。", "DESCRIPTIONS": [ - "各戦闘で初めて 呪い または 状態異常 を除く #yエセリアル カードが #y廃棄 された時、そのコピーを手札に加える。それはプレイするまでコスト #b0" + "各戦闘で初めて #r呪い または #y状態異常 を除く #yエセリアル カードが #y廃棄 された時、そのコピーを手札に加える。それはプレイするまでコスト #b0" ] }, "hexamod:MatchstickCase": { @@ -53,14 +59,15 @@ "NAME": "瓶詰めのTOBSCo", "FLAVOR": "熱を加えれば何でも美味しくなるさ。", "DESCRIPTIONS": [ - "戦闘開始時 #yhexamod:火力 1 を得る。" + "戦闘開始時 #yhexamod:火力 #b", + " を得る。" ] }, "hexamod:SoulOfChaos": { "NAME": "ソウルオブカオス", "FLAVOR": "メイヘムが現れた。", "DESCRIPTIONS": [ - "2つ目の #yシーリングゴーストフレイム が #yメイヘムゴーストフレイム になる。 NL #yメイヘムゴーストフレイム はその上でターン終了した時に発動する。 NL #y発火 : #y占術 #bn を行い、山札の一番上のカードをプレイする。 #bn は #y火力 + 1 の値が入る。" + "ターン開始時、ランダムなゴーストフレイムに移動し、それをランダムに変更する。ターン終了時、山札の一番上のカードをプレイする。" ] }, "hexamod:JarOfFuel": { @@ -74,28 +81,32 @@ "NAME": "トリッキーなボルスターロッド", "FLAVOR": "千冊の書物の研究に裏打ちされていた。知識は力なり!", "DESCRIPTIONS": [ - "各戦闘で初めて #yパワー をプレイした時、 #b6 #yブロック と #y筋力 #b1 を得る。" + "各戦闘で初めて #yパワー をプレイした時、 #b", + " #yブロック と #b", + " #y筋力 を得る。" ] }, "hexamod:CandleOfCauterizing": { "NAME": "赤いロウソク", "FLAVOR": "火が燃える...。", "DESCRIPTIONS": [ - "#yhexamod:ソウルバーン を与える度に追加で #b3 #yhexamod:ソウルバーン を与える。" + "#yhexamod:ソウルバーン を与える度に追加で #b", + " 追加で #yhexamod:ソウルバーン を付与する。" ] }, "hexamod:Sixitude": { "NAME": "Six-Point Brand", "FLAVOR": "炎、炎、炎、炎、炎、焔!", "DESCRIPTIONS": [ - "カードを #b6 枚プレイする度に ランダムな敵に #b6 ダメージを与える。" + "あなたが", + " 枚の #b0 コスト以外のカードをプレイする度、 手札にコストが #b0 になった #yストライク の #ygremlin:エコー を加える。" ] }, "hexamod:Libra": { - "NAME": "ライブラ", - "FLAVOR": "全ての物事のバランス", + "NAME": "天秤", + "FLAVOR": "全てのバランス", "DESCRIPTIONS": [ - "デッキ内のストライクと防御を好きなだけ選び、反対のタイプのランダムなカードに #y変換 する。", + "デッキ内のストライクと防御を好きなだけ選び、反対のタイプのランダムなカードに #y変化 させる。", "審判の天秤が傾く", "好きなカードを好きな枚数選び、反対のタイプに 変換 する。" ] diff --git a/src/main/resources/hexamodResources/localization/jpn/UIStrings.json b/src/main/resources/hexamodResources/localization/jpn/UIStrings.json index 8688323c1a..8a53061ada 100644 --- a/src/main/resources/hexamodResources/localization/jpn/UIStrings.json +++ b/src/main/resources/hexamodResources/localization/jpn/UIStrings.json @@ -15,5 +15,11 @@ "封印", "hexamod:封印 NL " ] + }, + "hexamod:SealMode": { + "TEXT": [ + "レガシーモード - 六つの封印", + "戦闘後、定期的に封印カードを報酬として追加する。封印を集めると特殊なレリックを入手できる。このオプションを有効にするとゲームが簡単になります。" + ] } } \ No newline at end of file diff --git a/src/main/resources/hexamodResources/localization/kor/CardStrings.json b/src/main/resources/hexamodResources/localization/kor/CardStrings.json index 2e83d78f9c..a9bf3252f3 100644 --- a/src/main/resources/hexamodResources/localization/kor/CardStrings.json +++ b/src/main/resources/hexamodResources/localization/kor/CardStrings.json @@ -1,4 +1,4 @@ -{ +{ "hexamod:AdvancingGuard": { "NAME": "팽창된 보호", "DESCRIPTION": "방어도를 !B! 얻습니다. NL hexamod:팽창합니다." @@ -11,12 +11,12 @@ "NAME": "지옥의 묵시록", "DESCRIPTION": "휘발성. NL [E] [E] 를 얻습니다. NL hexamod:지옥의 유령불꽃으로 이동합니다. NL 소멸.", "UPGRADE_DESCRIPTION": "휘발성. NL [E] [E] [E] 를 얻습니다. NL hexamod:지옥의 유령불꽃으로 이동합니다. NL 소멸.", - "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 " + "TRANSLATOR_NOTE:": "게임에 사용 안함 게임에 사용 안함 게임에 사용 안함 게임에 사용 안함 게임에 사용 안함 게임에 사용 안함 " }, "hexamod:Doomsday": { "NAME": "최후의 심판", - "DESCRIPTION": "모든 유령불꽃 !M! 개가 hexamod:점화되어 있다면 이번 턴 후에 내 턴을 추가로 진행합니다.", - "UPGRADE_DESCRIPTION": "유령불꽃 !M! 개 이상 hexamod:점화되어 있다면 이번 턴 후에 내 턴을 추가로 진행합니다." + "DESCRIPTION": "모든 유령불꽃 !M! 개가 *점화되어 있다면 이번 턴 후에 내 턴을 추가로 진행합니다.", + "UPGRADE_DESCRIPTION": "유령불꽃 !M! 개 이상 *점화되어 있다면 이번 턴 후에 내 턴을 추가로 진행합니다." }, "hexamod:BacktrackSmack": { "NAME": "되짚어 치기", @@ -38,7 +38,7 @@ }, "hexamod:BurningTouch": { "NAME": "불타는 접촉", - "DESCRIPTION": "hexamod:영혼화상을 !burny! 부여합니다. NL 대상이 hexamod:영혼화상을 보유한다면 2번 부여합니다." + "DESCRIPTION": "hexamod:영혼화상을 !burny! 부여합니다. NL 대상이 hexamod:영혼화상을 보유하면 2번 부여합니다." }, "hexamod:CatchUp": { "NAME": "따라잡기", @@ -64,7 +64,7 @@ "hexamod:DynamicBlow": { "NAME": "유동성 강타", "DESCRIPTION": "휘발성. NL 현재 유령불꽃이 hexamod:점화되어 있다면 hexamod:영혼화상을 !burny! 부여합니다. 아니라면 피해를 !D! 줍니다.", - "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 " + "TRANSLATOR_NOTE:": "게임에 사용 안함 게임에 사용 안함 게임에 사용 안함 게임에 사용 안함 게임에 사용 안함 게임에 사용 안함 " }, "hexamod:EmpoweredFlame": { "NAME": "힘찬 불꽃", @@ -89,7 +89,7 @@ }, "hexamod:FlamesFromBeyond": { "NAME": "저편의 불꽃", - "DESCRIPTION": "휘발성. [#e087a4]사후세계.[] NL [#e087a4]적[] [#e087a4]전체에게[] [#e087a4]영혼화상을[] !burny! [#e087a4]만큼[] 2번 [#e087a4]부여합니다.[] " + "DESCRIPTION": "휘발성. [#e087a4]사후세계.[] NL [#e087a4]적[] [#e087a4]전체에게[] [#e087a4]영혼화상을[] !burny! [#e087a4]만큼[] 2번 [#e087a4]부여합니다.[]" }, "hexamod:BadOmen": { "NAME": "흉조", @@ -99,26 +99,26 @@ "현재 유령 불꽃을 hexamod:부채 유령불꽃으로 변경합니다.", "현재 유령 불꽃을 hexamod:파쇄 유령불꽃으로 변경합니다.", "현재 유령 불꽃을 hexamod:작열 유령불꽃으로 변경합니다.", - "Don't replace." + "변경하지 않습니다." ] }, "hexamod:Float": { "NAME": "부유", "DESCRIPTION": "카드를 1장 뽑습니다. NL hexamod:팽창합니다.", "UPGRADE_DESCRIPTION": "카드를 1장 뽑습니다. NL hexamod:수축 또는 hexamod:팽창하거나 현재 상태를 유지합니다.", - "EXTENDED_DESCRIPTION": ["hexamod:팽창.", "hexamod:수축.", "유지."] + "EXTENDED_DESCRIPTION": ["hexamod:팽창.","hexamod:수축.", "유지."] }, "hexamod:MatchstickFloat": { - "NAME": "신출귀몰 티크재 발견", - "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "NAME": "교활하고 단단한 성냥깨비", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", - "EXTENDED_DESCRIPTION": ["hexamod:팽창.", "hexamod:수축.", "유지."] + "EXTENDED_DESCRIPTION": ["hexamod:팽창.","hexamod:수축.", "유지."] }, "hexamod:Floatwork": { "NAME": "떠돌기", "DESCRIPTION": "휘발성. [#e087a4]사후세계.[] NL 민첩을 1 얻습니다. NL ", "EXTENDED_DESCRIPTION": [ - "판금 갑옷을 !M! 얻습니다." + "expansioncontent:판금 *갑옷을 !M! 얻습니다." ] }, "hexamod:ForkedFlame": { @@ -132,33 +132,33 @@ }, "hexamod:InstantInferno": { "NAME": "즉발 지옥불", - "DESCRIPTION": "보존. NL hexamod:영혼화상을 !burny! 부여합니다. NL hexamod:지옥의 유령불꽃을 hexamod:점화합니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "보존. NL hexamod:영혼화상을 !burny! 부여합니다. NL hexamod:지옥의 유령불꽃을 hexamod:점화합니다. NL 소멸." + "DESCRIPTION": "보존. NL hexamod:영혼화상을 !burny! 부여합니다. NL hexamod:지옥의 유령불꽃으로 변경해 hexamod:지옥의 유령불꽃을 hexamod:점화합니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "보존. NL hexamod:영혼화상을 !burny! 부여합니다. NL hexamod:지옥의 유령불꽃으로 변경해 hexamod:지옥의 유령불꽃을 hexamod:점화합니다. NL 소멸." }, "hexamod:GhostLash": { "NAME": "유령 채찍", - "DESCRIPTION": "휘발성. [#e087a4]사후세계.[] NL [#e087a4]패해를 !D! [#e087a4]줍니다.[] 손에 있는 휘발성 카드 한장당 피해량이 !M! 증가합니다.", + "DESCRIPTION": "휘발성. [#e087a4]사후세계.[] NL [#e087a4]피해를[] !D! [#e087a4]줍니다.[]. NL 손에 있는 휘발성 카드 한장당 피해량이 !M! 증가합니다.", "EXTENDED_DESCRIPTION": [ "" ] }, "hexamod:IntoShadow": { "NAME": "그림자 속으로", - "DESCRIPTION": "휘발성. NL hexamod:수축할 때마다 카드를 1장 선택해 사용하고 소멸시킵니다.", - "UPGRADE_DESCRIPTION": "hexamod:수축할 때마다 카드를 1장 선택해 사용하고 소멸시킵니다.", + "DESCRIPTION": "휘발성. NL hexamod:수축할 때마다 다음으로 사용하는 카드의 비용은 0이 되고 소멸됩니다.", + "UPGRADE_DESCRIPTION": "hexamod:수축할 때마다 다음으로 사용하는 카드의 비용은 0이 되고 소멸됩니다.", "EXTENDED_DESCRIPTION": [ - "사용하고 소멸시킵니다." + "카드를 사용하고 소멸시킵니다." ], "TRANSLATOR_NOTE": [ " Vanilla uses hard coded sentence structure for the sentence above", " its former part is 'Choose a card to ' + above or 'Choose n cards to' + above, where n is a dynamic number.", " It will dynamically pick one so you only need to translate the verb(to do what)" - ] + ] }, "hexamod:DevilsDance": { "NAME": "악마의 춤", - "DESCRIPTION": "hexamod:수축할 때마다 카드를 1장 뽑습니다.", - "UPGRADE_DESCRIPTION": "선천성. NL 매 턴 처음으로 hexamod:수축하면 [E] 를 얻고 카드를 1장 뽑습니다. NL hexamod:수축합니다." + "DESCRIPTION": "매 턴 처음으로 hexamod:팽창 또는 hexamod:수축할 때마다 카드를 1장 뽑습니다.", + "UPGRADE_DESCRIPTION": "선천성. NL 매 턴 최대 !M! 번 hexamod:팽창 또는 hexamod:수축할 때마다 카드를 1장 뽑습니다." }, "hexamod:HereAndNow": { "NAME": "지금 당장", @@ -188,7 +188,7 @@ }, "hexamod:HauntingEcho": { "NAME": "귀신들린 메아리", - "DESCRIPTION": "피해를 !D! 줍니다. NL 현재 유령불꽃이 hexamod:점화되어 있다면 그 유령불꽃을 다시 hexamod:점화합니다." + "DESCRIPTION": "피해를 !D! 줍니다. NL 현재 유령불꽃이 *점화되어 있다면 그 유령불꽃을 다시 hexamod:점화합니다." }, "hexamod:HeatCrush": { "NAME": "열기 충돌", @@ -208,7 +208,7 @@ }, "hexamod:Hexaguard": { "NAME": "지옥 방어", - "DESCRIPTION": "휘발성. [#e087a4]사후세계.[] NL 카드를 !M! 장 뽑습니다. NL ", + "DESCRIPTION": "휘발성. [#e087a4]사후세계.[] NL 카드를 !M! 장 뽑습니다. NL ", "EXTENDED_DESCRIPTION": [ "방어도를 !B! 얻습니다." ] @@ -228,8 +228,8 @@ }, "hexamod:NecessarySacrifice": { "NAME": "대가 지불", - "DESCRIPTION": "카드를 2장 소멸시킵니다. NL 선택한 카드의 유형과 반대되는 무작위 카드를 얻습니다.", - "UPGRADE_DESCRIPTION": "카드를 2장 소멸시킵니다. NL 선택한 카드의 유형과 반대되는 무작위 카드를 얻습니다. NL 그 카드를 강화합니다.", + "DESCRIPTION": "카드를 2장 소멸시킵니다. NL 그 카드를 선택한 카드의 유형과 반대되는 카드로 sneckomod:변화시킵니다.", + "UPGRADE_DESCRIPTION": "카드를 2장 소멸시킵니다. NL 그 카드를 선택한 카드의 유형과 반대되는 강화된 카드로 sneckomod:변화시킵니다.", "EXTENDED_DESCRIPTION": [ "대가 지불로 소멸시킬 카드를 선택하십시오." ] @@ -250,26 +250,25 @@ }, "hexamod:PhantomCloak": { "NAME": "혼령의 망토", - "DESCRIPTION": "휘발성. NL 민첩을 !M! 얻고 힘을 1 잃습니다.", - "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": "휘발성. NL 민첩을 !M! 얻고 힘을 1 잃습니다." }, "hexamod:PhantomFireball": { "NAME": "혼령의 불덩이", "DESCRIPTION": "피해를 !D! 줍니다. NL 대상의 보유한 hexamod:영혼화상만큼 체력을 잃게 하고 hexamod:영혼화상을 제거합니다.", - "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL 대상의 보유한 hexamod:영혼화상만큼 -1 체력을 잃게 하고 hexamod:영혼화상을 제거합니다." + "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL 대상의 보유한 hexamod:영혼화상만큼 체력을 잃게 하고 hexamod:영혼화상을 제거하고 hexamod:영혼화상을 1 부여합니다." }, "hexamod:PowerFromBeyond": { "NAME": "저편의 힘", - "DESCRIPTION": "휘발성. [#e087a4]사후세계.[] NL 다음 턴에 [E] 를 얻습니다. NL ", - "UPGRADE_DESCRIPTION": "휘발성. [#e087a4]사후세계.[] NL 다음 턴에 [E] [E] 를 얻습니다. NL ", + "DESCRIPTION": "휘발성. [#e087a4]사후세계.[] NL [#e087a4]다음[] [#e087a4]턴에[] [#e087a4]카드를[] !M! 장 [#e087a4]뽑고[] [E] 를 얻습니다. NL ", + "UPGRADE_DESCRIPTION": "휘발성. [#e087a4]사후세계.[] NL [#e087a4]다음[] [#e087a4]턴에[] [#e087a4]카드를[] !M! 장 [#e087a4]뽑고[] [E] [E] 를 얻습니다. NL ", "EXTENDED_DESCRIPTION": [ - "다음 턴에 카드를 !M! 장 뽑습니다." + "" ] }, "hexamod:Premonition": { "NAME": "불길한 예감", - "DESCRIPTION": "카드를 1장 선택합니다. NL 선택한 카드를 사용하고 소멸시킵니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "카드를 1장 선택합니다. NL 선택한 카드를 사용하고 소멸시킵니다.", + "DESCRIPTION": "카드를 선택합니다. NL 뽑을 카드 더미에서 동일한 유형의 무작위 카드를 1장 사용합니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "카드를 선택합니다. NL 뽑을 카드 더미에서 동일한 유형의 무작위 카드를 1장 사용합니다.", "EXTENDED_DESCRIPTION": [ "사용하고 소멸시킬 카드를 선택하십시오." ] @@ -280,13 +279,13 @@ }, "hexamod:RainOfEmbers": { "NAME": "불씨의 비", - "DESCRIPTION": "피해를 !D! 만큼 X번 주고 약화를 !M! 만큼 X번 부여합니다.", - "UPGRADE_DESCRIPTION": "피해를 !D! 만큼 X번 주고 약화를 !M! 만큼 X번 부여합니다." + "DESCRIPTION": "피해를 !D! 만큼 X번 줍니다. NL 약화를 !M! 만큼 X번 부여합니다.", + "UPGRADE_DESCRIPTION": "피해를 !D! 만큼 X+1번 줍니다. NL 약화를 !M! 만큼 X+1번 부여합니다." }, "hexamod:NightmareVision": { "NAME": "악몽의 환영", - "DESCRIPTION": "hexamod:수축합니다. NL 휘발성 카드를 1장 expansioncontent:발굴합니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "hexamod:수축합니다. NL 휘발성 카드를 !M! 장 expansioncontent:발굴합니다. NL 소멸.", + "DESCRIPTION": "Hexamod:수축합니다. NL 휘발성 카드를 1장 expansioncontent:발굴합니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "Hexamod:수축합니다. NL 휘발성 카드를 !M! 장 expansioncontent:발굴합니다. NL 소멸.", "EXTENDED_DESCRIPTION": [ "가져올 휘발성 카드를 1장 선택하십시오.", "가져올 휘발성 카드를 ", @@ -304,7 +303,7 @@ }, "hexamod:Sear": { "NAME": "그을음", - "DESCRIPTION": "휘발성. [#e087a4]사후세계.[] NL 피해를 !D! 줍니다. NL [#e087a4]영혼화상을[] !burny! [#e087a4]만큼[#e087a4] [#e087a4]부여합니다.[#e087a4]" + "DESCRIPTION": "휘발성. [#e087a4]사후세계.[] NL 피해를 !D! 줍니다. NL [#e087a4]영혼화상을[] !burny! [#e087a4]부여합니다.[]" }, "hexamod:SearingWound": { "NAME": "화끈거리는 상처", @@ -321,11 +320,11 @@ }, "hexamod:ShieldOfDarkness": { "NAME": "밤의 방패", - "DESCRIPTION": "예지 !M! . NL *예지로 버린 휘발성 카드를 소멸시킵니다. NL 방어도를 !B! 얻습니다." + "DESCRIPTION": "예지 !M!. NL *예지로 버린 휘발성 카드를 소멸시킵니다. NL 방어도를 !B! 얻습니다." }, "hexamod:Kindle": { "NAME": "불붙이기", - "DESCRIPTION": "현재 유령불꽃이 *점화되어있지 않다면 hexamod:점화합니다.", + "DESCRIPTION": "현재 유령불꽃이 *점화되어 있지 않다면 hexamod:점화합니다.", "UPGRADE_DESCRIPTION": "현재 유령불꽃을 hexamod:점화합니다." }, "hexamod:LivingBomb": { @@ -334,7 +333,7 @@ }, "hexamod:SpectersWail": { "NAME": "망령의 통곡", - "DESCRIPTION": "휘발성. [#e087a4]사후세계.[] NL [#e087a4]적[] [#e087a4]전체에게[] [#e087a4]피해를[] !D! [#e087a4]만큼[] 2번 [#e087a4]줍니다.[]" + "DESCRIPTION": "휘발성. [#e087a4]사후세계.[] NL [#e087a4]적[] [#e087a4]전체에게[] [#e087a4]피해를[] !D! 만큼 2번 [#e087a4]줍니다.[]" }, "hexamod:BrightRitual": { "NAME": "눈부신 의식", @@ -342,7 +341,7 @@ }, "hexamod:NaughtySpirit": { "NAME": "악랄한 영", - "DESCRIPTION": "hexamod:수축합니다. NL hexamod:영혼화상을 !burny! 부여합니다. NL 현재 유령불꽃이 hexamod:점화된다면 이 카드를 가져오고 hexamod:수축합니다." + "DESCRIPTION": "hexamod:영혼화상을 !burny! 부여합니다. NL 현재 유령불꽃이 hexamod:점화된다면 이 카드를 가져오고 hexamod:수축합니다." }, "hexamod:StepThrough": { "NAME": "단계 밟기", @@ -355,16 +354,16 @@ "hexamod:StrikeFromBeyond": { "NAME": "저편의 타격", "DESCRIPTION": "피해를 !D! 줍니다. NL 뽑을 카드 더미에 있는 휘발성 카드를 1장 가져옵니다.", - "EXTENDED_DESCRIPTION": ["휘발성", "휘발성. NL "] + "EXTENDED_DESCRIPTION": ["휘발성","휘발성. NL "] }, "hexamod:SuperheatedStrike": { "NAME": "화끈한 타격", "DESCRIPTION": "휘발성. NL 피해를 !D! 줍니다. NL hexamod:영혼화상을 !burny! 부여합니다. NL 이 카드가 소멸되면 피해를 !M! 받습니다.", - "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 " + "TRANSLATOR_NOTE:": "게임에 사용 안함 게임에 사용 안함 게임에 사용 안함 게임에 사용 안함 게임에 사용 안함 게임에 사용 안함 " }, "hexamod:SwordOfDarkness": { "NAME": "밤의 검", - "DESCRIPTION": "예지 !M! . NL 예지로 버린 휘발성 카드를 소멸시킵니다. NL 피해를 !D! 줍니다." + "DESCRIPTION": "예지 !M! . NL *예지로 버린 휘발성 카드를 소멸시킵니다. NL 피해를 !D! 줍니다." }, "hexamod:ThermalTransfer": { "NAME": "열전사", @@ -372,7 +371,7 @@ }, "hexamod:TimeOfNeed": { "NAME": "필요의 때", - "DESCRIPTION": "보존. NL 무작위 파워 카드를 1장 얻습니다. NL 사용하기 전까지 그 카드의 비용이 1만큼 줄어듭니다. NL 소멸." + "DESCRIPTION": "보존. NL 무작위 파워 카드를 1장 얻습니다. 그 카드의 비용을 1 낮춥니다. NL 소멸." }, "hexamod:TimeWarp": { "NAME": "시간 왜곡", @@ -382,16 +381,16 @@ "NAME": "일렁이는 불", "DESCRIPTION": "피해를 !D! 줍니다. NL 현재 유령불꽃을 hexamod:점화하고 hexamod:팽창합니다.", "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL 현재 유령불꽃을 hexamod:점화합니다. NL hexamod:수축 또는 hexamod:팽창하거나 현재 상태를 유지합니다.", - "EXTENDED_DESCRIPTION": ["hexamod:팽창.", "hexamod:수축.", "유지."] + "EXTENDED_DESCRIPTION": ["hexamod:팽창.","hexamod:수축.", "유지."] }, "hexamod:TurnItUp": { "NAME": "때의 도래", - "DESCRIPTION": "hexamod:극열, 힘, 민첩을 !M! 얻습니다. NL 내 턴 종료 시 이 카드의 효과로 얻은 *극열, *힘, *민첩을 모두 잃습니다.", - "UPGRADE_DESCRIPTION": "보존. NL hexamod:극열, 힘, 민첩을 !M! 얻습니다. NL 내 턴 종료 시 이 카드의 효과로 얻은 *극열, *힘, *민첩을 모두 잃습니다." + "DESCRIPTION": "hexamod:극열, 힘, 민첩을 !M! 얻습니다. NL 내 턴 종료 시 이 카드로 얻은 *극열, *힘, *민첩을 모두 잃습니다.", + "UPGRADE_DESCRIPTION": "보존. NL hexamod:극열, 힘, 민첩을 !M! 얻습니다. NL 내 턴 종료 시 이 카드로 얻은 *극열, *힘, *민첩을 모두 잃습니다." }, "hexamod:UnleashSpirits": { "NAME": "퍼져나가는 영", - "DESCRIPTION": "무작위 적에게 피해를 !D! 줍니다. NL 저번 턴에 소멸된 휘발성 카드 한 장당 피해를 !D! 줍니다. NL 소멸.", + "DESCRIPTION": "무작위 적에게 피해를 !D! 줍니다. NL 저번 턴에 소멸된 휘발성 카드 한 장당 피해를 줍니다.", "UPGRADE_DESCRIPTION": " NL (피해를 !M! 번 줍니다.)" }, "hexamod:UnlimitedPower": { @@ -405,7 +404,7 @@ "hexamod:WildfireWeapon": { "NAME": "도깨비불 무기", "DESCRIPTION": "막히지 않은 피해를 줄 때마다 hexamod:영혼화상을 !M! 부여합니다.", - "Translate_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 " + "Translate_note": "사용안함사용안함사용안함사용안함사용안함사용안함사용안함사용안함사용안함사용안함사용안함사용안함 " }, "hexamod:FirstSeal": { "NAME": "첫 번째 봉인", @@ -427,37 +426,34 @@ "DESCRIPTION": "휘발성. hexamod:봉인. NL 전투 종료 시 포션 보상을 추가로 얻습니다.", "UPGRADE_DESCRIPTION": "hexamod:봉인. NL 전투 종료 시 포션 보상을 추가로 얻습니다." }, + "hexamod:FifthSeal": { + "NAME": "여섯 번째 봉인", + "DESCRIPTION": "휘발성. hexamod:봉인. NL 전투 종료 시 최대 체력을 !M! 얻습니다.", + "UPGRADE_DESCRIPTION": "hexamod:봉인. NL 전투 종료 시 최대 체력을 !M! 얻습니다." + }, "hexamod:SixthSeal": { "NAME": "다섯 번째 봉인", "DESCRIPTION": "휘발성. hexamod:봉인. NL 전투 종료 시 덱에 있는 카드 13장당 무작위 카드를 1장 강화합니다.", "UPGRADE_DESCRIPTION": "hexamod:봉인. NL 전투 종료 시 덱에 있는 카드 13장당 무작위 카드를 1장 강화합니다.", "EXTENDED_DESCRIPTION": [ - "( 카드를 ", + "(카드를 ", " 장 강화합니다. ) NL ", " 장 강화합니다. ) NL " ] }, - "hexamod:FifthSeal": { - "NAME": "여섯 번째 봉인", - "DESCRIPTION": "휘발성. hexamod:봉인. NL 전투 종료 시 최대 체력을 !M! 얻습니다.", - "UPGRADE_DESCRIPTION": "hexamod:봉인. NL 전투 종료 시 최대 체력을 !M! 얻습니다." - }, "hexamod:LingeringShades": { "NAME": "도사리는 음지", - "DESCRIPTION": "hexamod:수축합니다. NL hexamod:영혼화상을 !burny! 부여합니다. NL 버린 카드 더미에 있는 휘발성 카드를 모두 손으로 가져옵니다." + "DESCRIPTION": "hexamod:수축합니다. NL hexamod:영혼화상을 !burny! 부여합니다. NL 버린 카드 더미에 있는 휘발성 카드를 모두 가져옵니다." }, "hexamod:EtherStep": { "NAME": "에테르 걸음", - "DESCRIPTION": "휘발성. [#e087a4]사후세계.[] NL 카드를 1장 소멸시킵니다. NL 카드를 !M! 장 뽑습니다. NL ", - "UPGRADE_DESCRIPTION": "휘발성. [#e087a4]사후세계.[] NL 카드를 1장 소멸시킵니다. NL 카드를 !M! 장 뽑습니다. NL ", - "EXTENDED_DESCRIPTION": [ - "피해를 !D! 줍니다." - ] + "DESCRIPTION": "휘발성. [#e087a4]사후세계.[] NL [#e087a4]피해를[] !D! [#e087a4]줍니다.[]. NL 카드를 1장 소멸시킵니다. NL 카드를 !M! 장 뽑습니다.", + "UPGRADE_DESCRIPTION": "휘발성. [#e087a4]사후세계.[] NL [#e087a4]피해를[] !D! [#e087a4]줍니다.[]. NL 카드를 1장 소멸시킵니다. NL 카드를 !M! 장 뽑습니다." }, "hexamod:OpposingAction": { "NAME": "반발", - "DESCRIPTION": "hexamod:수축합니다. NL [E] 를 얻습니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "hexamod:수축합니다. NL [E] [E] 를 얻습니다. NL 소멸." + "DESCRIPTION": "hexamod:수축합니다. NL [E] [E] 를 얻습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "hexamod:수축합니다. NL [E] [E] [E] 를 얻습니다. NL 소멸." }, "hexamod:SeventhEye": { "NAME": "일곱 번째 눈", @@ -478,93 +474,93 @@ "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." + "NAME": "살아있는 폭탄", + "DESCRIPTION": "hexamod:영혼화상을 !burny! 부여합니다. NL 부여한 대상의 hexamod:영혼화상이 체력을 잃게 하고 제거된다면 적 전체를 대상으로 합니다." }, "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." + "NAME": "최후의 심판", + "DESCRIPTION": "모든 유령불꽃 !M! 개가 *점화되어 있다면 이번 턴 후에 내 턴을 추가로 진행합니다.", + "UPGRADE_DESCRIPTION": "유령불꽃 !M! 개 이상 *점화되어 있다면 이번 턴 후에 내 턴을 추가로 진행합니다." }, "hexamod:RetreatToShadows": { - "NAME": "Incorporeal", - "DESCRIPTION": "hexamod:Retract. NL Lose !M! HP. NL Gain 1 Intangible. NL Exhaust." + "NAME": "무체", + "DESCRIPTION": "hexamod:수축합니다. NL 체력을 !M! 잃습니다. NL 불가침을 1 얻습니다. NL 소멸." }, "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." + "NAME": "악랄한 영", + "DESCRIPTION": "hexamod:영혼화상을 !burny! 부여합니다. NL 현재 유령불꽃이 hexamod:점화된다면 이 카드를 가져옵니다. hexamod:수축합니다." }, "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." - }, + "NAME": "일렁이는 불", + "DESCRIPTION": "피해를 !D! 줍니다. NL 현재 유령불꽃을 hexamod:점화하고 hexamod:팽창합니다.", + "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL 현재 유령불꽃을 hexamod:점화합니다. NL hexamod:수축 또는 hexamod:팽창하거나 현재 상태를 유지합니다." + }, "hexamod:ParanormalForm": { - "NAME": "Poltergeist", - "DESCRIPTION": "Whenever you play an Ethereal card, a random enemy loses !M! HP." - }, + "NAME": "폴터가이스트", + "DESCRIPTION": "휘발성 카드를 사용할 때마다 무작위 적이 체력을 !M! 잃습니다." + }, "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.", + "NAME": "악몽의 환영", + "DESCRIPTION": "Hexamod:수축합니다. NL 휘발성 카드를 1장 expansioncontent:발굴합니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "Hexamod:수축합니다. NL 휘발성 카드를 !M! 장 expansioncontent:발굴합니다. NL 소멸.", "EXTENDED_DESCRIPTION": [ - "Choose an Ethereal card to return to your hand.", - "Choose ", - " Ethereal cards to return to your hand." + "가져올 휘발성 카드를 1장 선택하십시오.", + "가져올 휘발성 카드를 ", + " 장 선택하십시오." ] - }, + }, "hexamod:Haunt": { - "NAME": "Haunted Hand", - "DESCRIPTION": "Ethereal. [#e087a4]Afterlife.[] NL Draw !M! card. NL ", - "UPGRADE_DESCRIPTION": "Ethereal. [#e087a4]Afterlife.[] NL Draw !M! cards. NL ", + "NAME": "귀신들린 손", + "DESCRIPTION": "휘발성. [#e087a4]사후세계.[] NL 카드를 !M! 장 뽑습니다. NL ", + "UPGRADE_DESCRIPTION": "휘발성. [#e087a4]사후세계.[] NL 카드를 !M! 장 뽑습니다. 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." - }, + "NAME": "불 지피기", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL hexamod:점화된 유령불꽃 하나당 카드를 무작위로 1장 강화합니다." + }, "hexamod:SpectralAdrenaline": { - "NAME": "Bright Ritual", - "DESCRIPTION": "Gain [E] and draw 1 card for each *Ignited Ghostflame, then hexamod:Extinguish them. NL Exhaust." + "NAME": "눈부신 의식", + "DESCRIPTION": "hexamod:점화된 유령불꽃 하나당 [E] 를 얻고 카드를 1장 뽑습니다. NL 소멸." }, "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." + "NAME": "지금 당장", + "DESCRIPTION": "내 턴 시작 시 [E] 를 얻습니다. NL 내 턴 종료 시 현재 유령불꽃을 hexamod:소화합니다." }, "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." - ] - }, + "NAME": "악마의 춤", + "DESCRIPTION": "매 턴 처음으로 hexamod:팽창 또는 hexamod:수축할 때마다 카드를 1장 뽑습니다.", + "UPGRADE_DESCRIPTION": "선천성. NL 매 턴 최대 !M! 번 hexamod:팽창 또는 hexamod:수축할 때마다 카드를 1장 뽑습니다." + }, + "hexamod:GhostOfSpireFuture": { + "NAME": "그림자 속으로", + "DESCRIPTION": "휘발성. NL hexamod:수축할 때마다 카드를 1장 선택해 사용하고 소멸시킵니다.", + "UPGRADE_DESCRIPTION": "hexamod:수축할 때마다 카드를 1장 선택해 사용하고 소멸시킵니다.", + "EXTENDED_DESCRIPTION": [ + "카드를 사용하고 소멸시킵니다." + ] + }, "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", - "DESCRIPTION": "If the current Ghostflame is not *Ignited, hexamod:Ignite it.", - "UPGRADE_DESCRIPTION": "hexamod:Ignite the current Ghostflame." + "NAME": "불붙이기", + "DESCRIPTION": "현재 유령불꽃이 *점화되어 있지 않다면 hexamod:점화합니다.", + "UPGRADE_DESCRIPTION": "현재 유령불꽃을 hexamod:점화합니다." }, "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." - ] + "NAME": "흉조", + "DESCRIPTION": "현재 유령불꽃을 선택한 유령불꽃으로 변경합니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "보존. NL 현재 유령불꽃을 선택한 유령불꽃으로 변경합니다. NL 소멸.", + "EXTENDED_DESCRIPTION": [ + "현재 유령 불꽃을 hexamod:부채 유령불꽃으로 변경합니다.", + "현재 유령 불꽃을 hexamod:파쇄 유령불꽃으로 변경합니다.", + "현재 유령 불꽃을 hexamod:작열 유령불꽃으로 변경합니다.", + "변경하지 않습니다." + ] } } diff --git a/src/main/resources/hexamodResources/localization/kor/EventStrings.json b/src/main/resources/hexamodResources/localization/kor/EventStrings.json index bf2491d9b2..b95c601853 100644 --- a/src/main/resources/hexamodResources/localization/kor/EventStrings.json +++ b/src/main/resources/hexamodResources/localization/kor/EventStrings.json @@ -1,25 +1,25 @@ -{ +{ "hexamod:WanderingSpecter": { "NAME": "방황하는 혼령", "DESCRIPTIONS": [ - "이곳은 첨탑의 #p공동묘지 처럼 보입니다. 조심스럽게 지나가려다 묘하게 ~영적인~ 느낌이 당신의 걸음을 멈춰 세웁니다. 혼령이 #r거래를 제안하는 듯 두 손을 내밉니다. NL NL 혼령이 귀한 #b유물을 양손에 쥐고 있지만 그들이 얼마나 혹독한 대가를 원할지는 모를 일입니다.", - "당신은 거래해준 혼령에게 감사 인사를 전합니다. 마지막으로 #b혼령은 ~끝없는~ ~여정을~ 떠나기 전에 수고한다는 눈빛을 보냅니다. 마찬가지로 당신도 ~끝없는~ ~여정을~ 떠납니다. ", - "당신이 진주색 상자를 가져가려 하자마자 @산산조각나@ 버렸습니다! 부서진 상자에서 #p검은 #p파편이 당신의 몸에 박혀 스며들자 영혼이 모여드는 듯한 느낌이 듭니다.", - "당신이 이상하게 생긴 황금 상자를 열어 보니 어둠이 스며드는 느낌이 듭니다. 그 안에서 유용한 무기를 찾았지만요!", - "당신이 규칙적으로 @두근거리는@ 상자에 손을 집어넣자 팔을 타고 @고동이@ 전해져옵니다. 속이 울렁거리지만 이로 인해 더 강해진 거 같네요...", - "당신이 그림에 있는 유물에 손을 대자마자 #p어둠이 온 곳을 뒤덮습니다. 혼령이 다시 말을 걸어오자 머릿속에서 바로 단어가 떠오릅니다. NL NL #p'현명한 #p선택이야! #p이 #p친구야, #p다른 #p거래는 #p어떠신가? #p원하는 #p만큼 #p가져가라구...'", - "당신은 혼령이 제안하는 거래에는 엄청난 대가가 따른다는 것을 알고 있습니다. 하지만 운좋게도 그걸 다 치를 수 있죠! 왜냐면 저 벽쪽에! #b푸른 #b양초가! NL NL 당신은 벽에 걸려있는 양초를 낚아챕니다. 그 과정에서 #r당신도 #r약간 #r불태우긴 #r했지만 어쨌든 그걸 던지자 혼령은 #b섬뜩한 #b빛을 내며 사라집니다. NL NL 이제 더는 강매는 하지 않겠죠.", - "당신은 혼령이 제안하는 거래에는 엄청난 대가가 따른다는 것을 알고 있습니다. 하지만 운좋게도 그걸 다 치를 수 있죠! #b푸른 #b양초가 있으니까요! NL NL 양초를 던지자 혼령은 #b섬뜩한 #b빛을 내며 사라집니다. NL NL 이제 더는 강매는 하지 않겠죠." + "이곳은 첨탑의 #p공동묘지 처럼 보입니다. 조심스럽게 지나가려다 묘하게 ~영적인~ 느낌이 당신의 걸음을 멈춰 세웁니다. 혼령이 #r거래를 제안하는 듯 두 손을 내밉니다. NL NL 혼령이 귀한 #b유물을 양손에 쥐고 있지만 그들이 얼마나 혹독한 #r대가를 원할지는 모를 일입니다.", + "당신은 거래해준 혼령에게 감사 인사를 전합니다. 마지막으로 #b혼령은 ~끝없는~ ~여정을~ 떠나기 전에 수고한다는 눈빛을 보냅니다. 마찬가지로 당신도 ~끝없는~ ~여정을을~ 떠납니다. ", + "당신이 진주색 상자를 가져가려 하자마자 @산산조각나@ 버렸습니다! 부서진 상자에서 #p검은 #p파편이 당신의 몸에 박혀 ~스며들자~ 영혼이 모여드는 듯한 느낌이 듭니다.", + "당신이 이상하게 생긴 #y황금 상자를 열어 보니 #p어둠이 스며드는 느낌이 듭니다. 그 안에서 유용한 무기를 찾았지만요!", + "당신이 규칙적으로 @두근거리는@ 상자에 손을 집어넣자 팔을 타고 @고동이@ 전해져옵니다. 속이 #p울렁거리지만 이로 인해 더 강해진 거 같네요...", + "당신이 그림에 있는 유물에 손을 대자마자 #p어둠이 온 곳을 뒤덮습니다. 혼령이 다시 말을 걸어오자 머릿속에서 바로 단어가 떠오릅니다. NL NL #p'현명한 #p선택이야! #p이 #p친구야, #p다른 #p거래는 #p어떠신가?'", + "당신은 #p혼령이 제안하는 거래에는 엄청난 대가가 따른다는 것을 알고 있습니다. 하지만 운좋게도 그걸 다 치를 수 있죠! 왜냐면 저 벽쪽에! #b저주 #b해제 #b양초가! NL NL 당신은 벽에 걸려있는 양초를 낚아챕니다. 그 과정에서 #r당신도 #r약간 #r불태우긴 #r했지만 어쨌든 그걸 던지자 혼령은 #b섬뜩한 #b빛을 내며 사라집니다. NL NL 이제 더는 강매는 하지 않겠죠.", + "당신은 #p혼령이 제안하는 거래에는 엄청난 대가가 따른다는 것을 알고 있습니다. 하지만 운좋게도 그걸 다 치를 수 있죠! #b저주 #b해제 #b양초를 가졌으니까요! NL NL 양초를 던지자 혼령은 #b섬뜩한 #b빛을 내며 사라집니다. NL NL 이제 더는 강매는 하지 않겠죠." ], "OPTIONS": [ - "[왼쪽 상자] #g저주 #g인형 #g또는 #g흑옥 #g부적을 #g얻습니다. #r저주 #r- #r귀신들림.", + "[왼쪽 상자] #g저주 #g인형 #g또는 #g흑옥 #g부적을 #g얻습니다. #r저주 #r2장 #r- #r귀신들림.", "[좀 더 둘러본다]", - "[오른쪽 상자] #g저주받은 #g열쇠 #g또는 #g방울을 #g얻습니다. #r저주를 #r많이 #r받습니다.", - "[쫓는다] #g푸른 #g양초를 #g얻습니다. #r체력을 #r5 #r잃습니다.", + "[오른쪽 상자] #g저주받은 #g열쇠 #g또는 #g방울을 #g얻습니다.", + "[쫓는다] #g저주 #g해제 #g양초를 #g얻습니다. #r체력을 #r5 #r잃습니다.", "[쫓는다] 떠납니다.", - "[힘과 거래] #g무작위 #g희귀 #g카드를 #g받습니다. #r무작위 #r저주를 #r받습니다.", - "[생명과 거래] #g최대 #g체력을 #g5 #g얻습니다. #r무작위 #r저주를 #r받습니다.", - "[영혼과 거래] #g영혼을 #g100 #g얻습니다. #r무작위 #r저주를 #r받습니다.", + "[힘과 거래] #g무작위 #g희귀 #g카드를 #g얻습니다. #r무작위 #r저주를 #r받습니다.", + "[생명과 거래] #g최대 #g체력을 #g12 #g얻습니다. #r무작위 #r저주를 #r받습니다.", + "[영혼과 거래] #g영혼을 #g180 #g얻습니다. #r무작위 #r저주를 #r받습니다.", "[잠김] 거래를 마쳤습니다.", "[떠난다]" ] @@ -33,19 +33,19 @@ "이 봉인은 앞으로 전투에서 유용하게 사용될 것입니다." ], "OPTIONS": [ - "[바친다] ", + "[바친다] #r", " #r체력을 #r잃습니다. #g첫 #g번째 #g봉인을 #g얻습니다.", " #r영혼을 #r잃습니다. #g두 #g번째 #g봉인을 #g얻습니다.", - " 잃습니다. #g세 #g번째 #g봉인을 #g얻습니다.", - " 잃습니다. #g네 #g번째 #g봉인을 #g얻습니다.", + " #r잃습니다. #g세 #g번째 #g봉인을 #g얻습니다.", + " #r잃습니다. #g네 #g번째 #g봉인을 #g얻습니다.", "[잠김] 영혼이 더 필요합니다.", "[잠김] 일반 카드가 1장 필요합니다.", "[잠김] 포션이 1개 필요합니다.", "[떠난다]", "[잠김] 바쳐서 봉인을 얻었습니다.", - ". #g다섯 #g번째 #g봉인을 #g얻습니다.", + " #r잃습니다. #g다섯 #g번째 #g봉인을 #g얻습니다.", "[잠김] 강화된 카드가 필요합니다.", - " 최대 체력. #g여섯 #g#g번째 #g봉인을 #g얻습니다.", + " #r최대 #r체력을 #r잃습니다. #g여섯 #g번째 #g봉인을 #g얻습니다.", "[잠김] 최대 체력이 2 필요합니다." ] }, @@ -65,13 +65,13 @@ "hexamod:CouncilOfGhosts": { "NAME": "유령 의회", "DESCRIPTIONS": [ - "계속 내려가다 보니, #p~짙고~ #p~검은~ #p~연기~ 가 주변의 땅과 벽에서 차오르더니 가면을 쓴 세 형상으로 합쳐집니다. NL NL #r~\"파멸~ ~을~ ~피할~ ~수~ ~없었던~ ~존재~ ~같은데...\"~ NL \"우리는 그대의 고난도 익히 잘 알고 있지, #p저주받은 존재여... 우리의 #y~비밀을~ 알고 싶은가?\" ", + "계속 내려가다 보니, #p~짙고~ #p~검은~ #p~연기가~ 주변의 땅과 벽에서 차오르더니 가면을 쓴 세 형상으로 합쳐집니다. NL NL #r~\"파멸~ ~을~ ~피할~ ~수~ ~없었던~ ~존재~ ~같은데...\"~ NL \"우리는 그대의 고난도 익히 잘 알고 있지, #p저주받은 존재여... 우리의 #y~비밀을~ 알고 싶은가?\" ", "#y\"멋진 #y선택이야!\" NL 유령의 형상을 한것이 말을 하면 할수록 그것의 큰 입이 점점 더 커지는 것을 알아챕니다. #p~짙고~ #p~검은~ #p~연기~ 가 방에서 잔뜩 뿜어져 나와 방을 뒤덮습니다. 당신은 볼 수도, 숨쉴 수도 없습니다...", "#p~검은~ #p~연기~ 에 싸인 몸은 꺼져가지만 영혼은 이전보다 더 #p밝게 #p타오릅니다. NL 어떻게 정신과 육신이 이어져 있는지 전혀 상상치도 못한 방식으로 알게 됩니다.", "어둠 속에서도 무엇이든 뚜렷하게 볼 수 있습니다. 영혼들은 이 세상과 저 세상 사이를 쉽게 오갈 수 있도록 당신의 형상을 숙달하는 법을 알려주었습니다.", "\"행운을 빌지 #p저주받은 존재여...\" NL ~\"우리는~ ~남아서~ ~다른~ ~이들을~ ~돕기로~ ~하지...\"~ NL #r@\"크@ #r@하@ #r@하@ #r@하하핫!\"@ NL NL 의회가 사라질 때 마지막 존재가 왜 웃었는지는 아직 잘 모르겠지만 그들의 지식을 전수 받은 데 감사하는 마음을 가집니다.", "\"실망스럽군...\" NL ~\"영원히~ ~이~ ~곳을~ ~벗어날~ ~수는~ ~없거늘...\"~ NL #r@\"크@ #r@하@ #r@하@ #r@하하핫!\"@ NL NL 귓가에 섬뜩하게 울리는 웃음소리만을 남긴 채 형상은 사라져버렸습니다." - ], + ], "OPTIONS": [ "[승낙한다] #r최대 #r체력을 #r", " #r잃습니다. 배우거나 외울 수 있습니다.", @@ -79,7 +79,8 @@ "[외운다] #r모든 #r수비를 #r잃습니다. #g획득 #g", "[완수한다]", "[떠난다]", - "[잠김] 아직 떠날 수 없습니다." + "[잠김] 아직 떠날 수 없습니다.", + " #g영체화." ] }, "hexamod:BackToBasics": { @@ -88,7 +89,7 @@ "영혼은 검이자, 경험은 날카로운 돌입니다." ], "OPTIONS": [ - "[아쉬움] #g모든 #g타격과 #g수비에 #g휘발성을 #g추가합니다.", + "[미련] #g모든 #g타격과 #g수비에 #g휘발성을 #g추가합니다.", "[잠김] 타격 또는 수비가 필요합니다." ] } diff --git a/src/main/resources/hexamodResources/localization/kor/KeywordStrings.json b/src/main/resources/hexamodResources/localization/kor/KeywordStrings.json index c992e68b6e..16e6fd55f2 100644 --- a/src/main/resources/hexamodResources/localization/kor/KeywordStrings.json +++ b/src/main/resources/hexamodResources/localization/kor/KeywordStrings.json @@ -87,7 +87,7 @@ "ignite", "ignited" ], - "DESCRIPTION": "육각령을 둘러싼 유령불꽃에 아이콘으로 표시된 효과를 발동시킵니다." + "DESCRIPTION": "육각령을 둘러싼 유령불꽃을 지피며, 아이콘으로 표시된 효과를 발동시킵니다." }, { "PROPER_NAME": "봉인", @@ -95,7 +95,7 @@ "봉인", "seal" ], - "DESCRIPTION": "봉인 카드를 많이 사용할 수록 다른 봉인 카드를 얻기 쉬워집니다. NL 한 전투 동안 6종류의 #y봉인 카드를 모두 사용하면 #p파괴된 #p봉인 유물을 얻고 덱에 #y봉인 카드를 영구적으로 모두 제거합니다." + "DESCRIPTION": "봉인 카드는 엘리트 전투를 마치면 보상으로 받을 수 있습니다. 봉인 카드를 많이 사용할 수록 다른 봉인 카드를 얻기 쉬워집니다. NL 한 전투 동안 6종류의 #y봉인 카드를 모두 사용하면 #p파괴된 #p봉인 유물을 얻고 덱에 #y봉인 카드를 영구적으로 모두 제거합니다." }, { "ID": "afterlife", @@ -112,7 +112,7 @@ "파쇄", "crushing" ], - "DESCRIPTION": "#y유령불꽃의 한 종류입니다. NL #y스킬 카드를 #b2 번 사용한다면 점화됩니다. #y점화 시 무작위 적들에게 피해를 #b3 만큼 2번 줍니다.", + "DESCRIPTION": "#y유령불꽃의 한 종류입니다. NL #y스킬 카드를 #b2 번 사용한다면 점화됩니다. #y점화 시 무작위 적들에게 피해를 #b3 만큼 #b2 번 줍니다.", "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 " }, @@ -131,7 +131,7 @@ "작열", "searing" ], - "DESCRIPTION": "#y유령불꽃의 한 종류입니다. NL #y공격 카드를 2번 사용한다면 점화됩니다. #y점화 시 무작위 적에게 #y영혼화상을 #b4 부여합니다.", + "DESCRIPTION": "#y유령불꽃의 한 종류입니다. NL #y공격 카드를 2번 사용한다면 점화됩니다. #y점화 시 무작위 적에게 #y영혼화상을 #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 " }, { @@ -140,7 +140,7 @@ "지옥", "지옥의" ], - "DESCRIPTION": "#y유령불꽃의 한 종류입니다. NL 에너지를 3번 소모한다면 점화됩니다. NL #y점화 시 무작위 적들에게 #y점화된 유령불꽃당 피해를 #b4 주고 #y점화된 유령불꽃을 모두 #y소화시킵니다.", + "DESCRIPTION": "#y유령불꽃의 한 종류입니다. NL 에너지를 3번 소모한다면 점화됩니다. NL #y점화 시 무작위 적들에게 #y점화된 유령불꽃당 피해를 #b4 주고 #y점화된 유령불꽃을 모두 #y소화시키고 #y극열을 #b2 얻습니다.", "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 " }, { @@ -154,6 +154,7 @@ "ID": "plated", "PROPER_NAME": "판금 갑옷", "NAMES": [ + "판금", "판금_갑옷", "판금_갑옷을", "판금_갑옷과", diff --git a/src/main/resources/hexamodResources/localization/kor/MonsterStrings.json b/src/main/resources/hexamodResources/localization/kor/MonsterStrings.json index 9e26dfeeb6..22fdca1b26 100644 --- a/src/main/resources/hexamodResources/localization/kor/MonsterStrings.json +++ b/src/main/resources/hexamodResources/localization/kor/MonsterStrings.json @@ -1 +1 @@ -{} \ No newline at end of file +{} \ No newline at end of file diff --git a/src/main/resources/hexamodResources/localization/kor/OrbStrings.json b/src/main/resources/hexamodResources/localization/kor/OrbStrings.json index 34209f73ca..f73c7ccf54 100644 --- a/src/main/resources/hexamodResources/localization/kor/OrbStrings.json +++ b/src/main/resources/hexamodResources/localization/kor/OrbStrings.json @@ -8,7 +8,7 @@ " 번 사용하면 #y점화됩니다.", "#y활성화된 동안 #y공격 카드를 #b2 번 사용하면 이 유령불꽃이 #y점화됩니다.", " NL NL 무작위 적에게 #y영혼화상을 #b", - " 부여합니다.", + " 만큼 #b2 번 부여합니다.", " NL NL 내 턴 종료 시 이 유령불꽃이 #y점화됐다면 다음 유령불꽃으로 #y팽창합니다." ] }, @@ -21,7 +21,7 @@ " 번 사용하면 #y점화됩니다.", "#y활성화된 동안 #y스킬 카드를 #b2 번 사용하면 이 유령불꽃이 #y점화됩니다.", " NL NL #y점화 효과: 무작위 적에게 피해를 #b", - " 줍니다.", + " 만큼 #b2 번 줍니다.", " NL NL 내 턴 종료 시 이 유령불꽃이 #y점화됐다면 다음 유령불꽃으로 #y팽창합니다." ] }, diff --git a/src/main/resources/hexamodResources/localization/kor/PotionStrings.json b/src/main/resources/hexamodResources/localization/kor/PotionStrings.json index 3c3650f17c..43e7e24970 100644 --- a/src/main/resources/hexamodResources/localization/kor/PotionStrings.json +++ b/src/main/resources/hexamodResources/localization/kor/PotionStrings.json @@ -1,4 +1,4 @@ -{ +{ "hexamod:SoulburnPotion": { "NAME": "화염병", "DESCRIPTIONS": [ @@ -9,7 +9,7 @@ "hexamod:DoubleChargePotion": { "NAME": "가연성 가스", "DESCRIPTIONS": [ - "#y활성화된 유령불꽃을 #b", + "현재 유령불꽃을 #b", " 번 #y점화합니다." ] }, @@ -26,7 +26,7 @@ "DESCRIPTIONS": [ "이번 전투 동안 유령불꽃 효과가 적 전체에게 #b1 번 적용됩니다.", "이번 전투 동안 유령불꽃 효과가 적 전체에게 #b", - " 적용됩니다." + " 번 적용됩니다." ] } -} \ No newline at end of file +} diff --git a/src/main/resources/hexamodResources/localization/kor/PowerStrings.json b/src/main/resources/hexamodResources/localization/kor/PowerStrings.json index e1577371dc..2d8564605b 100644 --- a/src/main/resources/hexamodResources/localization/kor/PowerStrings.json +++ b/src/main/resources/hexamodResources/localization/kor/PowerStrings.json @@ -1,12 +1,12 @@ -{ +{ "hexamod:AgainPower": { "NAME": "지금 당장", "DESCRIPTIONS": [ "이번 턴 종료 시 #y팽창하지 않습니다.", "다음 #b", - " 턴까지 #y팽창하지 않습니다." + " 턴 동안 #y팽창하지 않습니다." ], - "TRANSLATOR_NOTE": "not used not used not used not used not used not used not used not used" + "TRANSLATOR_NOTE": "사용안함사용안함사용안함사용안함사용안함사용안함사용안함사용안함사용안함사용안함사용안함사용안함" }, "hexamod:ApocalypticArmorPower": { "NAME": "최후의 심판", @@ -22,7 +22,7 @@ "다음 내 턴 시작 시 적 전체에게 #y영혼화상을 #b", " 부여합니다." ], - "TRANSLATOR_NOTE": "not used not used not used not used not used not used not used not used" + "TRANSLATOR_NOTE": "사용안함사용안함사용안함사용안함사용안함사용안함사용안함사용안함사용안함사용안함사용안함사용안함" }, "hexamod:BurnPerTurnPower": { "NAME": "녹아내리는 금속", @@ -30,7 +30,7 @@ "이 적의 #y영혼화상이 체력을 잃게 하고 제거된다면 #y영혼화상을 #b", " 부여합니다." ], - "TRANSLATOR_NOTE": "not used not used not used not used not used not used not used not used" + "TRANSLATOR_NOTE": "사용안함사용안함사용안함사용안함사용안함사용안함사용안함사용안함사용안함사용안함사용안함사용안함" }, "hexamod:BurnPower": { "NAME": "영혼화상", @@ -47,12 +47,12 @@ "막히지 않은 피해를 줄 때마다 #y영혼화상을 #b", " 부여합니다." ], - "TRANSLATOR_NOTE": "not used not used not used not used not used not used not used not used" + "TRANSLATOR_NOTE": "사용안함사용안함사용안함사용안함사용안함사용안함사용안함사용안함사용안함사용안함사용안함사용안함" }, "hexamod:CommonPostCombatPower": { "NAME": "봉인의 대가: 카드", "DESCRIPTIONS": [ - "전투 종료 시 일반 카드를 추가로 #b", + "전투 종료 시 일반 카드 보상을 추가로 #b", " 개 얻습니다.", " 개 얻습니다." ] @@ -70,7 +70,7 @@ "유령불꽃의 #y점화 시 피해량, #y영혼화상, #y방어도 증가: #b", " .", "유령불꽃의 #y점화 시 피해량, #y영혼화상, #y방어도 감소: #b", - "타오르는 유령불에 두 배의 효과를 가집니다." + "#y작열 유령불꽃의 효과를 두 배로 만듭니다." ] }, "hexamod:EtherealRefundPower": { @@ -79,7 +79,7 @@ "#y휘발성 카드를 사용할 때마다 ", " 를 얻습니다." ], - "TRANSLATOR_NOTE": "not used not used not used not used not used not used not used not used" + "TRANSLATOR_NOTE": "사용안함사용안함사용안함사용안함사용안함사용안함사용안함사용안함사용안함사용안함사용안함사용안함" }, "hexamod:FuturePower": { "NAME": "그림자 속으로", @@ -109,7 +109,7 @@ "이번 턴 동안 공격을 받을 때마다 공격한 대상에게 #y영혼화상을 #b", " 부여합니다." ], - "TRANSLATOR_NOTE": "not used not used not used not used not used not used not used not used" + "TRANSLATOR_NOTE": "사용안함사용안함사용안함사용안함사용안함사용안함사용안함사용안함사용안함사용안함사용안함사용안함" }, "hexamod:GiftsFromBeyondPower": { "NAME": "카드 선물", @@ -141,7 +141,7 @@ " 턴 후에 #y극열을 #b", " 잃습니다." ], - "TRANSLATOR_NOTE": "not used not used not used not used not used not used not used not used" + "TRANSLATOR_NOTE": "사용안함사용안함사용안함사용안함사용안함사용안함사용안함사용안함사용안함사용안함사용안함사용안함" }, "hexamod:ParanormalFormPower": { "NAME": "폴터가이스트", @@ -153,9 +153,13 @@ "hexamod:PastPower": { "NAME": "악마의 춤", "DESCRIPTIONS": [ - "#y수축할 때마다 카드를 #b", - " 장 뽑습니다.", - " 장 뽑습니다." + "매 턴 처음으로 #y팽창 또는 #y수축할 때마다 카드를 #b1 장 뽑습니다.", + "매 턴 최대 #b", + " 번 #y팽창 또는 #y수축할 때마다 카드를 #b1 장 뽑습니다.", + " NL 이 효과는 이번 턴에 #b", + " 번 더 발동할 수 있습니다.", + " 번 더 발동할 수 있습니다.", + " NL 이번 턴에 더 이상 발동하지 않습니다." ] }, "hexamod:PotionPostCombatPower": { @@ -180,13 +184,13 @@ " 개 얻습니다.", " 개 얻습니다." ], - "TRANSLATOR_NOTE": "not used not used not used not used not used not used not used not used" + "TRANSLATOR_NOTE": "사용안함사용안함사용안함사용안함사용안함사용안함사용안함사용안함사용안함사용안함사용안함사용안함" }, "hexamod:TimeStopPower": { "NAME": "종말의 도래", "DESCRIPTIONS": [ "내 턴 종료 시 즉시 내 턴을 시작합니다.", - "내 턴 종료 시 다음 ", + "내 턴 종료 시 다음 #b", " 턴 동안 즉시 내 턴을 시작합니다." ] }, @@ -233,17 +237,17 @@ "hexamod:InfernoPotionPower": { "NAME": "육각염", "DESCRIPTIONS": [ - "이번 전투 동안 유령 불꽃이 적 전체에게 영향을 미칩니다.", - "이번 전투 동안 유령 불꽃이 적 전체에게 #b", - " 번 영향을 미칩니다." + "이번 전투 동안 유령불꽃이 적 전체를 대상으로 합니다.", + "이번 전투 동안 유령 불꽃이 #b", + " 번 적 전체를 대상으로 합니다." ] }, "hexamod:PlayCardAndExhaustPower": { "NAME": "그림자 이동", "DESCRIPTIONS": [ - "다음 카드를 #b1 장 비용 없이 사용 후 #y소멸시킵니다.", + "다음 카드를 #b1 장 비용 없이 사용하고 #y소멸시킵니다.", "다음 카드를 #b", - " 장 비용 없이 사용 후 #y소멸시킵니다." + " 장 비용 없이 사용하고 #y소멸시킵니다." ] } } diff --git a/src/main/resources/hexamodResources/localization/kor/RelicStrings.json b/src/main/resources/hexamodResources/localization/kor/RelicStrings.json index 0aad19ea39..d2743525c4 100644 --- a/src/main/resources/hexamodResources/localization/kor/RelicStrings.json +++ b/src/main/resources/hexamodResources/localization/kor/RelicStrings.json @@ -1,16 +1,19 @@ -{ +{ "hexamod:SpiritBrand": { "NAME": "영혼 낙인", "FLAVOR": "순환에 얽매인 수호자.", "DESCRIPTIONS": [ - "매 턴 처음 유령불꽃 #y점화 시 #y방어도를 #b4 얻습니다." + "매 턴 처음 유령불꽃 #yhexamod:점화 시 #y방어도를 #b", + " 얻습니다." ] }, "hexamod:TheBrokenSeal": { "NAME": "파괴된 봉인", "FLAVOR": "무한한, 무질서의, 무제한의 힘입니다.", "DESCRIPTIONS": [ - "획득 시 최대 체력을 #b10 증가 시키고 체력을 모두 회복합니다. #y힘 #b2 , #y민첩 #b2 , #yhexamod:극열 #b2 를 얻은 채로 전투를 시작합니다. #p파괴된 #p봉인과 봉인 카드를 다시 획득할 수 없습니다." + "획득 시 최대 체력이 #b", + " 증가하고 체력을 모두 회복합니다. #y힘과 #y민첩과 #yhexamod:극열을 #b", + " 얻은 채로 전투를 시작합니다. #p파괴된 #p봉인과 봉인 카드는 다시 획득할 수 없습니다." ] }, "hexamod:UnbrokenSoul": { @@ -18,49 +21,53 @@ "FLAVOR": "우리가 더 잘 해낼 수 있을지... 지켜봅니다.", "DESCRIPTIONS": [ "", - " 과 교체합니다.[] NL 유령불꽃을 #y점화할 때마다 #y방어도를 #b4 얻습니다." + "과[] 교체합니다. NL 유령불꽃을 #yhexamod:점화할 때마다 #y방어도를 #b", + " 얻습니다." ] }, "hexamod:IceCube": { "NAME": "자나토스의 얼음 부적", "FLAVOR": "차가움이... 느껴집니다.", "DESCRIPTIONS": [ - "내 턴 시작 시 [E] 를 얻습니다. 매 전투 시작 시 #yhexamod:극열을 #b1 잃습니다. 지옥 유령불꽃에서 #yhexamod:극열을 얻을 수 없습니다." + "내 턴 시작 시 [E] 를 얻습니다. 매 전투 시작 시 #yhexamod:극열을 #b", + " 잃습니다. #y지옥 유령불꽃에서 #yhexamod:극열을 얻을 수 없습니다." ] }, "hexamod:SoulStone": { "NAME": "영혼석", "FLAVOR": "영혼은 이걸 살아있는 것처럼 만들어주지!", "DESCRIPTIONS": [ - "카드를 #b3 장 소멸시킬 때마다 현재 유령불꽃을 #yhexamod:점화합니다." + "카드를 #b", + " 장 소멸시킬 때마다 현재 유령불꽃을 #yhexamod:점화합니다." ] }, "hexamod:RecyclingMachine": { "NAME": "재활용기", "FLAVOR": "언젠가 이것도 재활용될 것입니다.", "DESCRIPTIONS": [ - "매 전투 시 처음으로 상태이상과 저주를 제외한 #y휘발성 카드가 #y소멸하면 그 카드를 복사해서 얻습니다. 사용하기 전까지 그 카드의 비용은 0이 됩니다." + "매 전투 시 처음으로 #y상태이상과 #r저주를 제외한 #y휘발성 카드가 #y소멸하면 그 카드를 복사해서 얻습니다. 사용하기 전까지 그 카드의 비용은 0이 됩니다." ] }, "hexamod:MatchstickCase": { "NAME": "교활하고 단단한 성냥깨비", "FLAVOR": "어디든 불을 밝힐 수 있지!", "DESCRIPTIONS": [ - "매 턴 처음으로 유령불꽃을 #yhexamod:점화하면 #yhexamod:팽창 혹은 #yhexamod:수축할 수 있습니다." + "매 턴 처음으로 유령불꽃을 #yhexamod:점화하면 #yhexamod:팽창 또는 #yhexamod:수축할 수 있습니다." ] }, "hexamod:InflammatoryLetter": { "NAME": "탑스코 병", "FLAVOR": "약간의 열기로 모든 게 더 나아집니다.", "DESCRIPTIONS": [ - "#yhexamod:극열을 #b1 얻은 채로 전투를 시작합니다." + "#yhexamod:극열을 #b", + " 얻은 채로 전투를 시작합니다." ] }, "hexamod:SoulOfChaos": { "NAME": "혼돈의 영혼", "FLAVOR": "대혼란의 징조가 나타났습니다.", "DESCRIPTIONS": [ - "두 번째 유령불꽃이 #yhexamod:대혼란 유령불꽃이 됩니다." + "내 턴 시작 시 무작위 유령불꽃으로 이동하며 그 유령불꽃이 무작위로 정해집니다. 내 턴 종료 시 뽑을 카드 더미 맨 위에 있는 카드를 사용합니다." ] }, "hexamod:JarOfFuel": { @@ -74,30 +81,34 @@ "NAME": "까다로운 부채질 막대기", "FLAVOR": "천 권의 연구가 뒷받침해주고 있습니다. 아는 것이 힘이다!", "DESCRIPTIONS": [ - "매 전투 시 처음으로 #y파워 카드를 사용하면 #y힘을 #b1 얻고 #y방어도를 #b6 얻습니다." + "매 전투 시 처음으로 #y파워 카드를 사용하면 #y방어도를 #b", + " 얻고 #y힘을 #b", + " 얻습니다." ] }, "hexamod:CandleOfCauterizing": { "NAME": "붉은 양초", "FLAVOR": "불은 타오릅니다...", "DESCRIPTIONS": [ - "#yhexamod:영혼화상을 부여할 때마다 추가로 #y영혼화상을 #b3 부여합니다." + "#yhexamod:영혼화상을 부여할 때마다 추가로 #y영혼화상을 #b", + " 부여합니다." ] }, "hexamod:Sixitude": { "NAME": "낙인 6점", "FLAVOR": "불타라, 불타서, 불타고, 불태우고, 불태워서, 불타올라라!", "DESCRIPTIONS": [ - "카드를 #b6 장 사용할 때마다 무작위 적에게 피해를 #b6 줍니다." + "비용이 #b0 인 카드를 #b", + " 장 사용할 때마다 #y타격의 gremlin:메아리를 얻습니다. 그 카드의 비용은 #b0 입니다." ] }, "hexamod:Libra": { "NAME": "천칭 자리", "FLAVOR": "모든 게 균형잡혀 있습니다.", "DESCRIPTIONS": [ - "원하는 만큼 타격과 수비를 선택해 선택한 반대 유형으로 #y변환합니다.", + "원하는 만큼 타격과 수비를 선택해 선택한 반대 유형으로 #y변화합니다.", "정의의 척도 알림.", - "반대 유형으로 변환시키고 싶은 카드를 선택하십시오." + "반대 유형으로 변화시키고 싶은 카드를 선택하십시오." ] } -} \ No newline at end of file +} diff --git a/src/main/resources/hexamodResources/localization/kor/RunModStrings.json b/src/main/resources/hexamodResources/localization/kor/RunModStrings.json index 7de9c15888..87db0746f9 100644 --- a/src/main/resources/hexamodResources/localization/kor/RunModStrings.json +++ b/src/main/resources/hexamodResources/localization/kor/RunModStrings.json @@ -1,6 +1,6 @@ -{ +{ "Slimebound:AllSplit": { "NAME": "첨탑 슬라임", - "DESCRIPTION": "모든 적이 슬라임 두 마리로 분열합니다" + "DESCRIPTION": "모든 적이 슬라임 두 마리로 분열합니다." } } \ No newline at end of file diff --git a/src/main/resources/hexamodResources/localization/kor/UIStrings.json b/src/main/resources/hexamodResources/localization/kor/UIStrings.json index 53f0d3d462..e98eb12bfa 100644 --- a/src/main/resources/hexamodResources/localization/kor/UIStrings.json +++ b/src/main/resources/hexamodResources/localization/kor/UIStrings.json @@ -1,4 +1,4 @@ -{ +{ "hexamod:SealCommonReward": { "TEXT": [ "덱에 일반 카드를 추가" @@ -15,5 +15,11 @@ "봉인", "hexamod:봉인. NL " ] + }, + "hexamod:SealMode": { + "TEXT": [ + "과거 모드 - 여섯 봉인", + "전투 후 보상으로 봉인을 주기적으로 얻을 수 있습니다. 봉인을 모으면 특별한 봉인을 획득할 수 있습니다. 이 옵션 선택 시 게임이 쉬워집니다." + ] } -} +} \ No newline at end of file diff --git a/src/main/resources/hexamodResources/localization/ptb/EventStrings.json b/src/main/resources/hexamodResources/localization/ptb/EventStrings.json index 22bfd41dc1..6df05142b3 100644 --- a/src/main/resources/hexamodResources/localization/ptb/EventStrings.json +++ b/src/main/resources/hexamodResources/localization/ptb/EventStrings.json @@ -18,8 +18,8 @@ "[Espantar] #gObter uma #gVela #gAzul. #rPerder #r5 #rHP.", "[Espantar] Sair.", "[Trocar por Poder] #gObter um #gcarta #grara #yRara. #rTornar-se #rAmaldiçoado #r- #rAleatório.", - "[Trocar por Vida] #gObter #g5 #gHP #gMax. #rTornar-se #rAmaldiçoado #r- #rAleatório.", - "[Trocar por Almas] #gObter #g100 #gAlmas. #rTornar-se #rAmaldiçoado #r- #rAleatório.", + "[Trocar por Vida] #gObter #g12 #gHP #gMax. #rTornar-se #rAmaldiçoado #r- #rAleatório.", + "[Trocar por Almas] #gObter #g180 #gAlmas. #rTornar-se #rAmaldiçoado #r- #rAleatório.", "[Bloqueado] Troca Completa.", "[Sair]" ] diff --git a/src/main/resources/hexamodResources/localization/ptb/UIStrings.json b/src/main/resources/hexamodResources/localization/ptb/UIStrings.json index c4dec0077d..72bc4af2af 100644 --- a/src/main/resources/hexamodResources/localization/ptb/UIStrings.json +++ b/src/main/resources/hexamodResources/localization/ptb/UIStrings.json @@ -15,5 +15,11 @@ "Selo", "hexamod:Selo. NL " ] + }, + "hexamod:SealMode": { + "TEXT": [ + "Legacy Mode - Six Seals", + "Adds Seal rewards periodically in combat. Assemble the Seals to earn a special relic. Playing with this option enabled will make the game easier." + ] } } \ No newline at end of file diff --git a/src/main/resources/hexamodResources/localization/rus/EventStrings.json b/src/main/resources/hexamodResources/localization/rus/EventStrings.json index b036934fb6..a78cf95255 100644 --- a/src/main/resources/hexamodResources/localization/rus/EventStrings.json +++ b/src/main/resources/hexamodResources/localization/rus/EventStrings.json @@ -18,8 +18,8 @@ "[Прогнать] Получить #gСинюю #gсвечу. #rПотерять #r5 #rОЗ.", "[Прогнать] Уйти.", "[Сила] Получить #gслучайную #yРедкую #gкарту. #rПолучить #rслучайное #rПроклятие.", - "[Здоровье] Получить #g5 #gМакс #gОЗ. #rПолучить #rслучайное #rПроклятие.", - "[Души] Получить #g100 #gдуш. #rПолучить #rслучайное #rПроклятие.", + "[Здоровье] Получить #g12 #gМакс #gОЗ. #rПолучить #rслучайное #rПроклятие.", + "[Души] Получить #g180 #gдуш. #rПолучить #rслучайное #rПроклятие.", "[Закрыто] Сделка завершена.", "[Уйти]" ] diff --git a/src/main/resources/hexamodResources/localization/rus/KeywordStrings.json b/src/main/resources/hexamodResources/localization/rus/KeywordStrings.json index cb997ae8ae..170aa35dc0 100644 --- a/src/main/resources/hexamodResources/localization/rus/KeywordStrings.json +++ b/src/main/resources/hexamodResources/localization/rus/KeywordStrings.json @@ -3,9 +3,9 @@ "PROPER_NAME": "Активный", "NAMES": [ "активный", - "активен", - "активного", - "текущий" + "активен", + "активного", + "текущий" ], "DESCRIPTION": "Текущий (активный) Огонёк может быть #yЗажжён, при выполнении указанных условий." }, @@ -13,12 +13,11 @@ "PROPER_NAME": "Продвижение", "NAMES": [ "продвижение", - "продвижении", - "продвигает", + "продвижении", + "продвигает", "продвигаете", - "продвигается", - "продвигаетесь", - "продвинуть" + "продвигается", + "продвигаетесь" ], "DESCRIPTION": "Вы переходите к след. Огоньку и #yТушите его, если был #yЗажжён, или в конце вашего хода. Вы также переходите к след. Огоньку в конце вашего хода." }, @@ -26,11 +25,9 @@ "PROPER_NAME": "Откат", "NAMES": [ "откат", - "откате", - "отката", - "откатываете", - "откатывает", - "откатить" + "откате", + "отката", + "откатываете" ], "DESCRIPTION": "Вы переходите к предыдущему Огоньку и #yТушите его, если был #yЗажжён." }, @@ -38,20 +35,19 @@ "PROPER_NAME": "Интенсивность", "NAMES": [ "интенсивность", - "интенсивности" + "интенсивности" ], "DESCRIPTION": "Интенсивность увеличивает кол-во урона, #yОжога #yдуши и #yЗащиты, накладываемых Огоньками при #yЗажигании." }, { - "ID": "soulburn", "PROPER_NAME": "Ожог души", "NAMES": [ - "soulburn", - "soulburned", - "ожог_души", - "ожог", - "ожога", - "ожога_души" + "soulburn", + "soulburned", + "ожог_души", + "ожог", + "ожога", + "ожога_души" ], "DESCRIPTION": "Через #b3 хода, враг теряет ОЗ равное кол-ву, наложенного на него, #yОжога #yдуши, снимая этот эффект." }, @@ -59,29 +55,27 @@ "PROPER_NAME": "Тушение", "NAMES": [ "тушит", - "тушите", - "потушите", - "тушится", - "потушенный", - "потушен" + "тушите", + "потушите", + "тушится" ], "DESCRIPTION": "Даёт возможность #yЗажечь Огонёк ещё раз, сбраcывая условия для его #yЗажжения." }, { "PROPER_NAME": "Зажигание", "NAMES": [ - "ignite", - "force-ignite", + "ignite", + "force-ignite", "зажигает", - "зажигаете", + "зажигаете", "зажигается", - "зажгите", - "зажжёте", + "зажгите", + "зажжёте", "зажжёный", "зажжён", - "зажжётся", - "зажигаются", - "зажжение" + "зажжётся", + "зажигаются", + "зажжение" ], "DESCRIPTION": "Срабатывает эффект Зажжения (описанный при наводе на Огонёк)." }, @@ -90,18 +84,15 @@ "NAMES": [ "печать" ], - "DESCRIPTION": "Если все #b6 различных #yПечатей были сыграны в этом бою, вы получаете #pСломанную #pПечать и убираете из колоды все остальные #yПечати. Чем больше таких карт вы разыгрываете, тем чаще находите." + "DESCRIPTION": "Если все #b6 различных Печатей были сыграны в этом бою, вы получаете #pСломанную #pПечать и удаляете из колоды все остальные #yПечати." }, { - "ID": "afterlife", "PROPER_NAME": "Посмертие", "NAMES": [ "посмертие", - "посмертием", - "посмертную", - "посмертная" + "посмертием" ], - "DESCRIPTION": "Этот эффект срабатывает на карте, когда она #yСжигается или разыгрывается." + "DESCRIPTION": "Если эта карта #yСжигается, её эффект срабатывает." }, { "PROPER_NAME": "Сокрушающий", @@ -113,17 +104,17 @@ { "PROPER_NAME": "Укрепляющий", "NAMES": [ - "укрепляющий", - "укрепляющего" + "укрепляющий", + "укрепляющего" ], - "DESCRIPTION": "#yОгонёк. #yЗажигается, когда #yТалант был сыгран, пока #yОгонёк #yАктивен. #yЗажигание: даёт #b4 #yЗащиты и #b1 #yСилы." + "DESCRIPTION": "#yОгонёк. #yЗажигается, когда #yТалант был сыгран, пока #yОгонёк #yАктивенй. #yЗажигание: даёт #b4 #yЗащиты и #b1 #yСилы." }, { "PROPER_NAME": "Обжигающий", "NAMES": [ - "обжигающий", - "обжигающего" + "обжигающий", + "обжигающего" ], "DESCRIPTION": "#yОгонёк. #yЗажигается, когда #b2 #yАтаки были сыграны, пока #yОгонёк #yАктивен. #yЗажигание: накладывает #b4 #yОжога #yдуши на случ. врага." } -] \ No newline at end of file +] diff --git a/src/main/resources/hexamodResources/localization/rus/UIStrings.json b/src/main/resources/hexamodResources/localization/rus/UIStrings.json index 1deb7a9be9..b1dda9b4ed 100644 --- a/src/main/resources/hexamodResources/localization/rus/UIStrings.json +++ b/src/main/resources/hexamodResources/localization/rus/UIStrings.json @@ -15,5 +15,11 @@ "Печать", "hexamod:Печать. NL " ] + }, + "hexamod:SealMode": { + "TEXT": [ + "Legacy Mode - Six Seals", + "Adds Seal rewards periodically in combat. Assemble the Seals to earn a special relic. Playing with this option enabled will make the game easier." + ] } } \ 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 0000000000..9de22567fd --- /dev/null +++ b/src/main/resources/hexamodResources/localization/spa/CardStrings.json @@ -0,0 +1,528 @@ +{ + "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": "La primera vez que hexamod:Avances o hexamod:Retrocedas cada turno, roba una carta.", + "UPGRADE_DESCRIPTION": "Las primeras !M! veces que hexamod:Avances o hexamod:Retrocedas cada turno, roba una carta." + }, + "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! 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": "Cada vez que juegues una carta Etérea, un enemigo al azar 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! Débil X veces.", + "UPGRADE_DESCRIPTION": "Haz !D! de daño y aplica !M! 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 al azar. 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 " + }, + "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": "Bomba Viva", + "DESCRIPTION": "Aplica !burny! hexamod:QuemarAlma. Al detonar, afecta a TODOS los enemigos." + }, + "hexamod:ApocalypticArmor": { + "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:RetreatToShadows": { + "NAME": "Incorpóreo", + "DESCRIPTION": "hexamod:Retroceder. NL Pierde !M! PV. NL Gana 1 Intangible. NL Agota." + }, + "hexamod:SpectralSpark": { + "NAME": "Espíritu Travieso", + "DESCRIPTION": "Aplica !burny! hexamod:QuemarAlma. NL Si la llama fantasmal actual está hexamod:Incendiada, regresa esta carta a tu mano. hexamod:Retroceder." + }, + "hexamod:Toasty": { + "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." + }, + "hexamod:ParanormalForm": { + "NAME": "Poltergeist", + "DESCRIPTION": "Cada vez que juegues una carta Etérea, un enemigo al azar pierde !M! PV." + }, + "hexamod:RecurringNightmare": { + "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:Haunt": { + "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:InspiringFlames": { + "NAME": "Avivar la Llama", + "DESCRIPTION": "Gana !B! de Bloqueo. NL Por cada llama fantasmal *Incendiada, mejora una carta aleatoria en tu mano." + }, + "hexamod:SpectralAdrenaline": { + "NAME": "Ritual Radiante", + "DESCRIPTION": "Gana [E] y roba 1 por cada llama fantasmal *Incendiada, luego hexamod:extinguir. NL Agota." + }, + "hexamod:GhostOfSpirePresent": { + "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:GhostOfSpirePast": { + "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:GhostOfSpireFuture": { + "NAME": "En la Sombra", + "DESCRIPTION": "Etérea. NL Siempre que hexamod:Retrocedas, elige una carta en tu mano para jugar y Agotar.", + "UPGRADE_DESCRIPTION": "Siempre que hexamod:Retrocedas, elige una carta en tu mano para jugar y Agotar.", + "EXTENDED_DESCRIPTION": [ + "juega y se Agota." + ] + }, + "hexamod:HexaLevel": { + "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:SkipABeat": { + "NAME": "Avivar", + "DESCRIPTION": "Si la llama fantasmal actual no está *Incendiada, hexamod:Incendiala.", + "UPGRADE_DESCRIPTION": "hexamod:Incendia la llama fantasmal actual." + }, + "hexamod:FlameSwitch": { + "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." + ] + } +} + 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 0000000000..74cf6fe62e --- /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 0000000000..b8170aed31 --- /dev/null +++ b/src/main/resources/hexamodResources/localization/spa/EventStrings.json @@ -0,0 +1,95 @@ +{ + "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 #g12 #gPV #gMáximos. #rTe vuelves #rMaldito - #rAleatorio.", + "[Intercambiar por Almas] #gObtén #g180 #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." + ], + "preview": "Mientras caes libremente, consideras tus opciones: Aterrizar de forma segura con tus mejores técnicas. Canalizar un Poder para sobrevivir a la caída. Atacar la pared para aferrarte a ella.", + "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 0000000000..2a277dd7f6 --- /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 al azar." + }, + { + "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 al azar, 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 0000000000..9e26dfeeb6 --- /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 0000000000..4221bbb8fc --- /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 al azar.", + " 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 al azar.", + " 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 al azar 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 extracción, 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 0000000000..0616565517 --- /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 0000000000..d82671fb24 --- /dev/null +++ b/src/main/resources/hexamodResources/localization/spa/PowerStrings.json @@ -0,0 +1,245 @@ +{ + "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 al azar pierde #b", + " PV." + ] + }, + "hexamod:PastPower": { + "NAME": "Danza del Diablo", + "DESCRIPTIONS": [ + "La primera vez que #yAvances o #yRetrocedas cada turno, roba una carta.", + "Las primeras #b", + " vez que #yAvances o #yRetrocedas cada turno, roba una carta.", + " NL Este efecto puede activarse #b", + " veces más este turno.", + " vez más este turno.", + " NL Este efecto no se puede activar de nuevo este turno." + ] + }, + "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 0000000000..c1a2cc0d54 --- /dev/null +++ b/src/main/resources/hexamodResources/localization/spa/RelicStrings.json @@ -0,0 +1,115 @@ +{ + "hexamod:SpiritBrand": { + "NAME": "Marca Espiritual", + "FLAVOR": "Un protector encadenado.", + "DESCRIPTIONS": [ + "La primera vez que #yIncendies una llama fantasmal cada turno, gana #b", + " 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 #b", + " [REMOVE_SPACE], luego cura todo tu PV. Comienza cada combate con #b2", + " de #yFuerza [REMOVE_SPACE], #yDestreza [REMOVE_SPACE] e #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 #b", + " 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 #b", + " 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 #b", + " 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 #b", + " 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 extracción, #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 #b", + " de #yBloqueo y #b", + " de #yFuerza [REMOVE_SPACE]." + ] + }, + "hexamod:CandleOfCauterizing": { + "NAME": "Vela Roja", + "FLAVOR": "El fuego QUEMA...", + "DESCRIPTIONS": [ + "Cada vez que apliques #yQuemarAlma [REMOVE_SPACE], aplica #b", + " #yQuemarAlma adicionales [REMOVE_SPACE]." + ] + }, + "hexamod:Sixitude": { + "NAME": "Marca de Seis Puntas", + "FLAVOR": "¡Fuego, fuego, fuego, fuego, fuego, FUEGO!", + "DESCRIPTIONS": [ + "Cada vez que juegues #b", + " cartas de coste mayor a 0, 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 0000000000..f6539efb52 --- /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 0000000000..f7e7bcc86d --- /dev/null +++ b/src/main/resources/hexamodResources/localization/spa/UIStrings.json @@ -0,0 +1,25 @@ +{ + "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 " + ] + }, + "hexamod:SealMode": { + "TEXT": [ + "Legacy Mode - Six Seals", + "Adds Seal rewards periodically in combat. Assemble the Seals to earn a special relic. Playing with this option enabled will make the game easier." + ] + } +} diff --git a/src/main/resources/hexamodResources/localization/zhs/CardStrings.json b/src/main/resources/hexamodResources/localization/zhs/CardStrings.json index e2812a135c..2cc5df99cd 100644 --- a/src/main/resources/hexamodResources/localization/zhs/CardStrings.json +++ b/src/main/resources/hexamodResources/localization/zhs/CardStrings.json @@ -64,8 +64,8 @@ }, "hexamod:DevilsDance": { "NAME": "魔鬼之舞", - "DESCRIPTION": "hexamod:回退 时, NL 抽一张牌。", - "UPGRADE_DESCRIPTION": "固有 。 NL 每回合首次 hexamod:回退 时, NL 获得 [E] 并抽一张牌。 NL hexamod:回退 。" + "DESCRIPTION": "每回合第一次 hexamod:步进 或 hexamod:回退 时,抽一张牌。", + "UPGRADE_DESCRIPTION": "每回合首 !M! 次 hexamod:步进 或 hexamod:回退 时,抽一张牌。" }, "hexamod:IntoShadow": { "NAME": "遁入暗影", @@ -454,7 +454,7 @@ }, "hexamod:FlameDevourer": { "NAME": "噬火", - "DESCRIPTION": "若当前鬼火已 *点燃 , hexamod:回退 , NL 并获得 !B! 点 格挡 。" + "DESCRIPTION": "若上枚鬼火已 *点燃 , hexamod:回退 , NL 并获得 !B! 点 格挡 。" }, "hexamod:SpectralGrace": { "NAME": "幽雅", diff --git a/src/main/resources/hexamodResources/localization/zhs/EventStrings.json b/src/main/resources/hexamodResources/localization/zhs/EventStrings.json index 3e05f8a68b..469f5f8008 100644 --- a/src/main/resources/hexamodResources/localization/zhs/EventStrings.json +++ b/src/main/resources/hexamodResources/localization/zhs/EventStrings.json @@ -18,8 +18,8 @@ "[赶跑] #g获得黑蜡烛。 #r失去5点生命。", "[赶跑] 离开。", "[换取力量] #g获得一张随机稀有牌。 #r被诅咒-随机。", - "[换取生命] #g获得5点最大生命。 #r被诅咒-随机。", - "[换取灵魂] #g获得100灵魂。 #r被诅咒-随机。", + "[换取生命] #g获得12点最大生命。 #r被诅咒-随机。", + "[换取灵魂] #g获得180灵魂。 #r被诅咒-随机。", "[锁定] 交易完成。", "[离开]" ] diff --git a/src/main/resources/hexamodResources/localization/zhs/PotionStrings.json b/src/main/resources/hexamodResources/localization/zhs/PotionStrings.json index 2219b74539..82a079dfdd 100644 --- a/src/main/resources/hexamodResources/localization/zhs/PotionStrings.json +++ b/src/main/resources/hexamodResources/localization/zhs/PotionStrings.json @@ -16,9 +16,9 @@ "hexamod:EctoCoolerPotion": { "NAME": "外部冷却剂", "DESCRIPTIONS": [ - "从任意角色的 #b3 张随机 #y虚无 牌中选择 #b1 张加入手牌,其本回合首次耗能为 #b0 。", - "从任意角色的 #b3 张随机 #y虚无 牌中选择 #b1 张,将其 #b", - " 份复制品加入手牌,其本回合首次耗能为 #b0 。" + "从 #b3 张随机 #y虚无 牌中选择 #b1 张加入手牌,其本回合首次耗能为 #b0 。", + "从 #b3 张随机 #y虚无 牌中选择 #b1 张,将其 #b", + " 份复制品加入手牌,其本回合首次耗能为 #b0 。" ] }, "hexamod:InfernoChargePotion": { diff --git a/src/main/resources/hexamodResources/localization/zhs/PowerStrings.json b/src/main/resources/hexamodResources/localization/zhs/PowerStrings.json index 6d0f75ba05..0954221283 100644 --- a/src/main/resources/hexamodResources/localization/zhs/PowerStrings.json +++ b/src/main/resources/hexamodResources/localization/zhs/PowerStrings.json @@ -146,9 +146,13 @@ "hexamod:PastPower": { "NAME": "魔鬼之舞", "DESCRIPTIONS": [ - "每当你 #y回退 时,抽 #b", - " 张牌。", - " 张牌。" + "每回合第一次 #y步进 或 #y回退 时,抽一张牌。", + "每回合首 #b", + " 次 #y步进 或 #y回退 时,抽一张牌。", + " NL 此效果本回合触发次数剩余 #b", + " 次。", + " 次。", + " NL 此效果在本回合内不能再次触发。" ] }, "hexamod:PotionPostCombatPower": { diff --git a/src/main/resources/hexamodResources/localization/zhs/RelicStrings.json b/src/main/resources/hexamodResources/localization/zhs/RelicStrings.json index 37dd2adb00..2c8a409e5a 100644 --- a/src/main/resources/hexamodResources/localization/zhs/RelicStrings.json +++ b/src/main/resources/hexamodResources/localization/zhs/RelicStrings.json @@ -3,14 +3,17 @@ "NAME": "精神烙印", "FLAVOR": "对约束的一道保护。", "DESCRIPTIONS": [ - "每回合首次 #y点燃 时,获得 #b4 点 #y格挡 。" + "每回合首次 #y点燃 时,获得 #b", + " 点 #y格挡 。" ] }, "hexamod:TheBrokenSeal": { "NAME": "挣破的封印", "FLAVOR": "未阻,无限,不灭的力量。", "DESCRIPTIONS": [ - "拾起时,获得 #b10 点最大生命并回复所有生命。 NL 战斗开始时,获得 #b2 点 #y力量 、 #y敏捷 与 #yhexamod:热烈 。 NL 无法再获得本遗物与任何封印。" + "拾起时,获得 #b", + " 点最大生命并回复所有生命。 NL 战斗开始时,获得 #b", + " 点 #y力量 、 #y敏捷 与 #yhexamod:热烈 。 NL 无法再获得本遗物与任何封印。" ] }, "hexamod:UnbrokenSoul": { @@ -18,21 +21,24 @@ "FLAVOR": "看看我们能不能做得... 更好。", "DESCRIPTIONS": [ "替换 ", - " 。 NL #y点燃 一枚鬼火时,获得 #b4 点 #y格挡 。" + " 。 NL #y点燃 一枚鬼火时,获得 #b", + " 点 #y格挡 。" ] }, "hexamod:IceCube": { "NAME": "幽灵雪花", "FLAVOR": "我感觉……好冷。", "DESCRIPTIONS": [ - "回合开始时获得 [E] 。战斗开始时失去 #b1 点 #yhexamod:热烈 ,且无法再从 #y狱焱鬼火 获得 #y热烈 。" + "回合开始时获得 [E] 。战斗开始时失去 #b", + " 点 #yhexamod:热烈 ,且无法再从 #y狱焱鬼火 获得 #y热烈 。" ] }, "hexamod:SoulStone": { "NAME": "魂石", "FLAVOR": "只需一点灵魂就能使这玩意生效!", "DESCRIPTIONS": [ - "每当你 #y消耗 #b3 张牌, #yhexamod:点燃 当前鬼火。" + "每当你 #y消耗 #b", + " 张牌, #yhexamod:点燃 当前鬼火。" ] }, "hexamod:RecyclingMachine": { @@ -53,14 +59,15 @@ "NAME": "火种", "FLAVOR": "火使一切更美好。", "DESCRIPTIONS": [ - "战斗开始时,获得 #b1 点 #yhexamod:热烈 。" + "战斗开始时,获得 #b", + " 点 #yhexamod:热烈 。" ] }, "hexamod:SoulOfChaos": { "NAME": "混沌灵魂", "FLAVOR": "混乱,现出真身。", "DESCRIPTIONS": [ - "第 #b2 枚 #y灼热鬼火 变为 #y紊乱鬼火 。 NL 若停留在 #y紊乱鬼火 ,回合结束时其自动 #y点燃 。 NL #y点燃 :预见 #bn 后打出抽牌堆顶部的牌, #bn 受 #y热烈 加成。" + "回合开始时,随机切换至一枚鬼火并将其随机替换。回合结束时,打出抽牌堆顶部的牌。 " ] }, "hexamod:JarOfFuel": { @@ -74,21 +81,25 @@ "NAME": "高热之杖", "FLAVOR": "火焰护身!火焰助力。", "DESCRIPTIONS": [ - "每场战斗首次打出 #y能力 时,获得 #b6 点 #y格挡 与 #b1 点 #y力量 。" + "每场战斗首次打出 #y能力 时,获得 #b", + " 点 #y格挡 与 #b", + " 点 #y力量 。" ] }, "hexamod:CandleOfCauterizing": { "NAME": "红蜡烛", "FLAVOR": "烈焰炙烤...", "DESCRIPTIONS": [ - "每当你给予 #y灼魂 时,额外给予 #b3 层。" + "每当你给予 #y灼魂 时,额外给予 #b", + " 层。" ] }, "hexamod:Sixitude": { "NAME": "六点烙印", "FLAVOR": "点火,点火,点火,点火,点火,点 火!", "DESCRIPTIONS": [ - "每打出 #b6 张牌,获得 1 张耗能为0的基础 #y打击 的 #ygremlin:回响 。" + "每打出 #b", + " 张牌,获得 1 张耗能为0的基础 #y打击 的 #ygremlin:回响 。" ] }, "hexamod:Libra": { diff --git a/src/main/resources/hexamodResources/localization/zhs/UIStrings.json b/src/main/resources/hexamodResources/localization/zhs/UIStrings.json index 10837fad62..2ac1e83ba1 100644 --- a/src/main/resources/hexamodResources/localization/zhs/UIStrings.json +++ b/src/main/resources/hexamodResources/localization/zhs/UIStrings.json @@ -15,5 +15,11 @@ "封印", "hexamod:封印 。 NL " ] + }, + "hexamod:SealMode": { + "TEXT": [ + "Legacy Mode - Six Seals", + "Adds Seal rewards periodically in combat. Assemble the Seals to earn a special relic. Playing with this option enabled will make the game easier." + ] } } diff --git a/src/main/resources/hexamodResources/localization/zht/CardStrings.json b/src/main/resources/hexamodResources/localization/zht/CardStrings.json index 07aa2dc240..7b021eecd8 100644 --- a/src/main/resources/hexamodResources/localization/zht/CardStrings.json +++ b/src/main/resources/hexamodResources/localization/zht/CardStrings.json @@ -64,8 +64,8 @@ }, "hexamod:DevilsDance": { "NAME": "魔鬼之舞", - "DESCRIPTION": "hexamod:回退 時, NL 抽一張牌。", - "UPGRADE_DESCRIPTION": "固有 。 NL 每回合首次 hexamod:回退 時, NL 獲得 [E] 並抽一張牌。 NL hexamod:回退 。" + "DESCRIPTION": "每回合第一次 hexamod:步进 或 hexamod:回退 时,抽一张牌。", + "UPGRADE_DESCRIPTION": "每回合首 !M! 次 hexamod:步进 或 hexamod:回退 时,抽一张牌。" }, "hexamod:IntoShadow": { "NAME": "遁入暗影", diff --git a/src/main/resources/hexamodResources/localization/zht/EventStrings.json b/src/main/resources/hexamodResources/localization/zht/EventStrings.json index d8b08ce1b3..b84baa40ad 100644 --- a/src/main/resources/hexamodResources/localization/zht/EventStrings.json +++ b/src/main/resources/hexamodResources/localization/zht/EventStrings.json @@ -17,8 +17,8 @@ "[趕跑] #g獲得黑蠟燭。 #r失去5點生命。", "[趕跑] 離開。", "[換取力量] #g獲得一張隨機稀有牌。 #r被詛咒-隨機。", - "[換取生命] #g獲得5點最大生命。 #r被詛咒-隨機。", - "[換取靈魂] #g獲得100靈魂。 #r被詛咒-隨機。", + "[換取生命] #g獲得12點最大生命。 #r被詛咒-隨機。", + "[換取靈魂] #g獲得180靈魂。 #r被詛咒-隨機。", "[鎖定] 交易完成。", "[離開]" ] diff --git a/src/main/resources/hexamodResources/localization/zht/PotionStrings.json b/src/main/resources/hexamodResources/localization/zht/PotionStrings.json index 40fdd6f5e6..f4fadf56fe 100644 --- a/src/main/resources/hexamodResources/localization/zht/PotionStrings.json +++ b/src/main/resources/hexamodResources/localization/zht/PotionStrings.json @@ -14,13 +14,14 @@ ] }, "hexamod:EctoCoolerPotion": { - "NAME": "外部冷卻劑", + "NAME": "外部冷却剂", "DESCRIPTIONS": [ - "從任意角色的 #b3 張隨機 #y虛無 牌中選擇 #b1 張加入手牌,其本回合首次耗能為 #b0 。", - "從任意角色的 #b3 張隨機 #y虛無 牌中選擇 #b1 張,將其 #b", - " 份復製品加入手牌,其本回合首次耗能為 #b0 。" + "从 #b3 张随机 #y虚无 牌中选择 #b1 张加入手牌,其本回合首次耗能为 #b0 。", + "从 #b3 张随机 #y虚无 牌中选择 #b1 张,将其 #b", + " 份复制品加入手牌,其本回合首次耗能为 #b0 。" ] }, + "hexamod:InfernoChargePotion": { "NAME": "獄焱藥水", "DESCRIPTIONS": [ diff --git a/src/main/resources/hexamodResources/localization/zht/PowerStrings.json b/src/main/resources/hexamodResources/localization/zht/PowerStrings.json index 2e7a88b1e2..1d069c98fb 100644 --- a/src/main/resources/hexamodResources/localization/zht/PowerStrings.json +++ b/src/main/resources/hexamodResources/localization/zht/PowerStrings.json @@ -146,12 +146,13 @@ "hexamod:PastPower": { "NAME": "魔鬼之舞", "DESCRIPTIONS": [ - "每回合你前 #b", - "1 次", - " 次", - " #y回退 時,獲得 [E] 並抽 #b1 張牌。本回合已 #y回退 #b", + "每回合第一次 #y步进 或 #y回退 时,抽一张牌。", + "每回合首 #b", + " 次 #y步进 或 #y回退 时,抽一张牌。", + " NL 此效果本回合触发次数剩余 #b", " 次。", - " 次。" + " 次。", + " NL 此效果在本回合内不能再次触发。" ] }, "hexamod:PotionPostCombatPower": { diff --git a/src/main/resources/hexamodResources/localization/zht/RelicStrings.json b/src/main/resources/hexamodResources/localization/zht/RelicStrings.json index 8d1ea6b3b0..94c357cfc9 100644 --- a/src/main/resources/hexamodResources/localization/zht/RelicStrings.json +++ b/src/main/resources/hexamodResources/localization/zht/RelicStrings.json @@ -3,14 +3,17 @@ "NAME": "精神烙印", "FLAVOR": "對約束的一道保護。", "DESCRIPTIONS": [ - "每回合首次 #y點燃 時,獲得 #b4 點 #y格擋 。" + "每回合首次 #y點燃 時,獲得 #b", + " 點 #y格擋 。" ] }, "hexamod:TheBrokenSeal": { "NAME": "掙破的封印", "FLAVOR": "未阻,無限,不滅的力量。", "DESCRIPTIONS": [ - "拾起時,獲得 #b10 點最大生命並回復所有生命。戰鬥開始時獲得 #b2 點 #y力量 、 #y敏捷 與 #yhexamod:熱烈 。無法再獲得 #y破損容器 。" + "拾起時,獲得 #b", + " 點最大生命並回復所有生命。戰鬥開始時獲得 #b", + " 點 #y力量 、 #y敏捷 與 #yhexamod:熱烈 。無法再獲得 #y破損容器 。" ] }, "hexamod:UnbrokenSoul": { @@ -25,14 +28,16 @@ "NAME": "幽靈雪花", "FLAVOR": "我感覺……好冷。", "DESCRIPTIONS": [ - "回合開始時獲得 [E] 。 #yhexamod:灼魂 需要 #r4 回合才引爆,失去 #b1 點 #yhexamod:熱烈 。" + "回合開始時獲得 [E] 。 #yhexamod:灼魂 需要 #r4 回合才引爆,失去 #b", + " 點 #yhexamod:熱烈 。" ] }, "hexamod:SoulStone": { "NAME": "保暖石", "FLAVOR": "一點火苗就能激活這東西了!", "DESCRIPTIONS": [ - "若本場戰鬥引爆過 #yhexamod:灼魂 ,戰鬥勝利時回復 #b4 點生命。" + "若本場戰鬥引爆過 #yhexamod:灼魂 ,戰鬥勝利時回復 #b", + " 點生命。" ] }, "hexamod:RecyclingMachine": { @@ -53,14 +58,15 @@ "NAME": "火種", "FLAVOR": "火使一切更美好。", "DESCRIPTIONS": [ - "戰鬥開始時獲得 #b1 點 #yhexamod:熱烈 。" + "戰鬥開始時獲得 #b", + " 點 #yhexamod:熱烈 。" ] }, "hexamod:SoulOfChaos": { - "NAME": "混沌靈魂", - "FLAVOR": "混亂,現出真身。", + "NAME": "混沌灵魂", + "FLAVOR": "混乱,现出真身。", "DESCRIPTIONS": [ - "第 #b4 枚 #y鬼火 變為 #y紊乱鬼火 。 NL 若停留在 #y紊乱鬼火 ,回合結束時其自動 #y點燃 。 NL #y點燃 :打出抽牌堆頂部的牌。" + "回合开始时,随机切换至一枚鬼火并将其随机替换。回合结束时,打出抽牌堆顶部的牌。 " ] }, "hexamod:JarOfFuel": { @@ -74,21 +80,25 @@ "NAME": "高熱之杖", "FLAVOR": "火焰護身!火焰助力。", "DESCRIPTIONS": [ - "每場戰鬥首次打出 #y能力 牌時,獲得 #b6 點 #y格擋 與 #b1 點 #y力量 。" + "每場戰鬥首次打出 #y能力 牌時,獲得 #b", + " 點 #y格擋 與 #b", + " 點 #y力量 。" ] }, "hexamod:CandleOfCauterizing": { "NAME": "紅蠟燭", "FLAVOR": "烈焰炙烤...", "DESCRIPTIONS": [ - "每當你造成未被 #y格擋 的 #y攻擊 傷害,給予 #b2 層 #yhexamod:灼魂 。" + "每當你造成未被 #y格擋 的 #y攻擊 傷害,給予 #b", + " 層 #yhexamod:灼魂 。" ] }, "hexamod:Sixitude": { "NAME": "六點烙印", "FLAVOR": "點火,點火,點火,點火,點火,點 火!", "DESCRIPTIONS": [ - "每當你打出 #b6 張牌,獲得 1 張耗能為0的基礎 #y打擊 的 #ygremlin:回響 。" + "每當你打出 #b", + " 張牌,獲得 1 張耗能為0的基礎 #y打擊 的 #ygremlin:回響 。" ] } } diff --git a/src/main/resources/hexamodResources/localization/zht/UIStrings.json b/src/main/resources/hexamodResources/localization/zht/UIStrings.json index 839e4a30e2..e38838fbbd 100644 --- a/src/main/resources/hexamodResources/localization/zht/UIStrings.json +++ b/src/main/resources/hexamodResources/localization/zht/UIStrings.json @@ -15,5 +15,11 @@ "封印", "hexamod:封印. NL " ] + }, + "hexamod:SealMode": { + "TEXT": [ + "Legacy Mode - Six Seals", + "Adds Seal rewards periodically in combat. Assemble the Seals to earn a special relic. Playing with this option enabled will make the game easier." + ] } } \ No newline at end of file diff --git a/src/main/resources/reskinContent/localization/deu/UIStrings.json b/src/main/resources/reskinContent/localization/deu/UIStrings.json new file mode 100644 index 0000000000..3153db8179 --- /dev/null +++ b/src/main/resources/reskinContent/localization/deu/UIStrings.json @@ -0,0 +1,105 @@ +{ + "reskinContent:ReSkin": { + "TEXT": [ + "Skin", + "Original" + ] + }, + "reskinContent:PortraitAnimation": { + "TEXT": [ + "Avatar Typ" + ] + }, + "reskinContent:PortraitAnimationType": { + "TEXT": [ + "Statisch", + "Animiert", + "Alle Effekte" + ] + }, + "reskinContent:BetaArtUnlockEffect": { + "TEXT": [ + "Beta-Kartenbilder Der Wächter freigeschaltet!", + "Beta-Kartenbilder Der Schleimboss freigeschaltet!", + "Beta-Kartenbilder Der Hexageist freigeschaltet!", + "Beta-Kartenbilder Snecko freigeschaltet!", + "Beta-Kartenbilder Champ freigeschaltet!", + "Beta-Kartenbilder Das Automaton freigeschaltet!", + "Beta-Kartenbilder Gremlins freigeschaltet!", + "Beta-Kartenbilder Die Sammlerin freigeschaltet!" + ] + }, + + "reskinContent:ReSkinGuardian": { + "TEXT": [ + "Guardian Chan", + "Concept Art" + ], + "EXTRA_TEXT": [ + "Ein Konstrukt des Spire, dazu programmiert es zu verteidigen. NL Kann sich selbst auf Kommando vor Gefahr schützen.", + "Einer der frühen Entwürfe des Wächters. NL Hat auf dem Papier besser funktioniert." + ] + }, + "reskinContent:ReSkinSlime": { + "TEXT": [ + "Schlaifu", + "Schleimboss?" + ], + "EXTRA_TEXT": [ + "Dieser ungewöhnliche Schleim ernährt sich von leckeren Relitken. NL Er dient dem Herzen nur durch bloßem Zufall.", + "Ist das... der Schleimboss? Er sieht erschreckend zutraulich aus. NL Nun, da er den größten Hut von allen hat, muss er das Sagen haben..." + ] + }, + "reskinContent:ReSkinHexaghost": { + "TEXT": [ + "Hexago", + "Geistagon", + "Lampengeist" + ], + "EXTRA_TEXT": [ + "Ein verfluchter Geist des Spire. NL Fristet ein ewiges Dasein als Beschützer des Spire.", + "Macht sich an freien Tagen gerne auf die Jagd nach gelben Kreisen. NL Hat eine lähmende Angst vor Power Pellets.", + "Der alte Partner des Hexageistes. NL Gab das Vernichten von Abenteurern für eine lukrativere Tätigkeit auf: dem Verkauf von Wünschen." + ] + }, + "reskinContent:ReSkinSnecko": { + "TEXT": [ + "SSSSnecko", + "Sneckdor" + ], + "EXTRA_TEXT": [ + "Nutzt die Augen, um mittels kognitiver Verzerrung die eigene, schreckliche Form zu verschleiern. NL Studien kamen zum Ergebnis, dass verwirrte Wesen die Welt ganz anders wahrnehmen.", + "Dieses ambitionierte Snecko trat in die Fußstapfen seines Helden, suchend nach größerer Macht. NL Es nennt sich selbst \"Sneckdor\": vollkommen, und mit einem kräftigen Arm." + ] + }, + "reskinContent:ReSkinChamp": { + "TEXT": [ + "Chan-p", + "Champ am Waschtag" + ], + "EXTRA_TEXT": [ + "Das Schwert sieht zu schwer für sie aus - NL Allerdings ist sie die Einzige, die stark genug ist, es zu führen.", + "Es ist Waschtag. Nichts Sauberes mehr übrig..." + ] + }, + "reskinContent:ReSkinGremlin": { + "TEXT": [ + "Katzen" + ], + "EXTRA_TEXT": [ + "Ähmmmm.... Miau?" + ] + }, + "reskinContent:ReSkinBronze": { + "TEXT": [ + "Automaton", + "\"Automaton\"", + "Das Perfekte" + ], + "EXTRA_TEXT": [ + "", + "Jau! Das ist das Automaton, von Kopf bis Fuß! NL Noch nie etwas Anderes gesehen, das mehr nach Automaton aussieht!", + "[BOOT] Initialisierung... Hauptsystem Online - Keine Fehler gefunden NL [ZIEL] BALANCE muss VERSTÄRKT werden" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/reskinContent/localization/fra/UIStrings.json b/src/main/resources/reskinContent/localization/fra/UIStrings.json index bb8af9aaad..0165017094 100644 --- a/src/main/resources/reskinContent/localization/fra/UIStrings.json +++ b/src/main/resources/reskinContent/localization/fra/UIStrings.json @@ -24,7 +24,9 @@ "Art alternatif de l'Hexaplasme déverrouillé!", "Art alternatif du Geckobra déverrouillé!", "Art alternatif du Champion déverrouillé!", - "Art alternatif de l'Automate déverrouillé!" + "Art alternatif de l'Automate déverrouillé!", + "Art alternatif des Diablotins déverrouillé!", + "Art alternatif du Collecteur déverrouillé!" ] }, @@ -79,6 +81,14 @@ "Son épée semble impossible à manier, NL mais elle est en fait la seule personne assez forte pour la soulever.", "C'est le jour du linge." ] + }, + "reskinContent:ReSkinGremlin": { + "TEXT": [ + "Chats" + ], + "EXTRA_TEXT": [ + "Euuuuuh.... Miaou ?" + ] }, "reskinContent:ReSkinBronze": { "TEXT": [ @@ -93,4 +103,3 @@ ] } } - diff --git a/src/main/resources/reskinContent/localization/jpn/UIStrings.json b/src/main/resources/reskinContent/localization/jpn/UIStrings.json index 242244679a..dd23982580 100644 --- a/src/main/resources/reskinContent/localization/jpn/UIStrings.json +++ b/src/main/resources/reskinContent/localization/jpn/UIStrings.json @@ -25,8 +25,8 @@ "スネッコの代替アートをアンロック!", "チャンプの代替アートをアンロック!", "オートマトンの代替アートをアンロック!", - "グレムリンズの代替アートをアンロック!", - "コレクターの代替アートをアンロック!" + "グレムリン の代替アートをアンロック!", + "コレクター の代替アートをアンロック!" ] }, @@ -84,10 +84,10 @@ }, "reskinContent:ReSkinGremlin": { "TEXT": [ - "Cats" + "ねこ" ], "EXTRA_TEXT": [ - "うーん... ニャー?" + "うーん.... にゃ?" ] }, "reskinContent:ReSkinBronze": { @@ -100,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/spa/UIStrings.json b/src/main/resources/reskinContent/localization/spa/UIStrings.json new file mode 100644 index 0000000000..84e4da61a5 --- /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/localization/deu/CardStrings.json b/src/main/resources/slimeboundResources/localization/deu/CardStrings.json new file mode 100644 index 0000000000..5a797ccbe5 --- /dev/null +++ b/src/main/resources/slimeboundResources/localization/deu/CardStrings.json @@ -0,0 +1,386 @@ +{ + "Slimebound:AcidTongue": { + "NAME": "Haftender Glibber", + "DESCRIPTION": "Immer wenn slimeboundmod:Glibber angewendet wird, erhöhe die angewendete Anzahl um !M!." + }, + "Slimebound:BestDefense": { + "NAME": "Rücksichtslos", + "DESCRIPTION": "Deine *Tackle Karten fügen Gegnern !M! und dir 1 mehr Schaden zu." + }, + "Slimebound:CheckThePlaybook": { + "NAME": "Tackletaktik", + "DESCRIPTION": "Erhalte 3 zufällige *Tackle Karten. Sie kosten in diesem Kampf 1 weniger. NL Erschöpft." + }, + "Slimebound:Chomp": { + "NAME": "Hineinbeißen", + "DESCRIPTION": "Füge !D! Schaden zu. NL Ein zufälliger *Tackle auf deiner Hand kostet diesen Zug 0.", + "UPGRADE_DESCRIPTION": "Füge !D! Schaden zu. NL Ein zufälliger *Tackle auf deiner Hand kostet diesen Kampf 0." + }, + "Slimebound:ComboTackle": { + "NAME": "Flinker Tackle", + "DESCRIPTION": "Füge !D! Schaden zu. NL Erleide !SlimeboundSelfharm! Schaden. NL Ziehe !M! Karten." + }, + "Slimebound:CorrosiveSpit": { + "NAME": "Ätzende Spucke", + "DESCRIPTION": "Wende !slime! slimeboundmod:Glibber an." + }, + "Slimebound:Darklings": { + "NAME": "Dunkelingduo", + "DESCRIPTION": "Beschwöre !M! slimeboundmod:Dunkelinge. Zählt als slimeboundmod:Abspaltung. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Dunkelingtrio" + }, + "Slimebound:Defend_Slimebound": { + "NAME": "Verteidigen", + "DESCRIPTION": "Erhalte !B! Block." + }, + "Slimebound:DisruptingSlam": { + "NAME": "Böse Zunge", + "DESCRIPTION": "Füge ALLEN Gegnern !D! Schaden zu. NL expansioncontent:Exhumiere !M! zufällige *Wabbel Karten." + }, + "Slimebound:Dissolve": { + "NAME": "Fast Food", + "DESCRIPTION": "Ziehe !M! Karte. NL Erschöpfe eine Karte. Erhalte *Wabbel in Anzahl der Höhe ihrer Kosten. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Ziehe !M! Karten. NL Erschöpfe eine Karte. Erhalte *Wabbel in Anzahl der Höhe ihrer Kosten. NL Erschöpft." + }, + "Slimebound:DivideAndConquer": { + "NAME": "Kräfte bündeln", + "DESCRIPTION": "Füge für jeden Schleim einem zufälligen Gegner !D! Schaden zu. NL slimeboundmod:Absorbiere alle Schleime. NL Erschöpft." + }, + "Slimebound:DouseInSlime": { + "NAME": "Einschleimen", + "DESCRIPTION": "Wende !slime! slimeboundmod:Glibber an. NL Der Nächste Angriff auf diesen Gegner entfernt sein slimeboundmod:Glibber nicht." + }, + "Slimebound:DuplicatedForm": { + "NAME": "Gespaltene Form", + "DESCRIPTION": "Die erste in deinem Zug gespielte Karte, die auf Gegner abzielt, wird zweimal gespielt.", + "UPGRADE_DESCRIPTION": "Erhalte zu Beginn deines Zuges [E]. NL Die erste in deinem Zug gespielte Karte, die auf Gegner abzielt, wird zweimal gespielt.", + "EXTENDED_DESCRIPTION": [ + "Brauche... TP..." + ] + }, + "Slimebound:Equalize": { + "NAME": "Ausgleichen", + "DESCRIPTION": "Füge !D! Schaden zu. NL Heile !M! TP. NL slimeboundmod:Konsum: Spiele diese Karte ein zweites Mal. NL Erschöpft." + }, + "Slimebound:FinishingTackle": { + "NAME": "Eröffnungstackle", + "DESCRIPTION": "Füge !D! Schaden zu. NL Erleide !SlimeboundSelfharm! Schaden. slimeboundmod:Konsum: Wende !M! Verwundbar an." + }, + "Slimebound:FirmFortitude": { + "NAME": "Verflüssigen", + "DESCRIPTION": "Verliere 2 Stärke. NL Erhalte !M! slimeboundmod:Potenz." + }, + "Slimebound:FlameTackle": { + "NAME": "Flammentackle", + "DESCRIPTION": "Füge !D! Schaden zu. NL Erleide !SlimeboundSelfharm! Schaden. NL Deine *Tackle Karten fügen diesen Kampf !M! mehr Schaden zu." + }, + "Slimebound:FormOfPuddle": { + "NAME": "Pfützenform", + "DESCRIPTION": "Flüchtig. NL Erhalte 1 Immateriell. NL Erschöpft." + }, + "Slimebound:ForwardTackle": { + "NAME": "Offensivtackle", + "DESCRIPTION": "Füge !D! Schaden zu. NL Erleide !SlimeboundSelfharm! Schaden. NL slimeboundmod:Kommando 2 Mal.", + "UPGRADE_DESCRIPTION": "Füge !D! Schaden zu. NL Erleide !SlimeboundSelfharm! Schaden. NL slimeboundmod:Kommando 3 Mal." + }, + "Slimebound:Gluttony": { + "NAME": "Völlerei", + "DESCRIPTION": "Erhalte bei deinem ersten slimeboundmod:Konsum im Zug einen *Wabbel.", + "UPGRADE_DESCRIPTION": "Angeboren. NL Erhalte bei deinem ersten slimeboundmod:Konsum im Zug einen *Wabbel." + }, + "Slimebound:GoopSpray": { + "NAME": "Klebriger Nebel", + "DESCRIPTION": "Wende !slime! slimeboundmod:Glibber und !M! Schwach auf ALLE Gegner an." + }, + "Slimebound:GoopTackle": { + "NAME": "Doppeltackle", + "DESCRIPTION": "Füge !D! Schaden zu. NL Erleide !SlimeboundSelfharm! Schaden. NL Erhalte eine zufällige *Tackle Karte. Sie kostet diesen Zug 0.", + "UPGRADE_DESCRIPTION": "Füge !D! Schaden zu. NL Erleide !SlimeboundSelfharm! Schaden. NL Erhalte eine zufällige verbesserte *Tackle Karte. Sie kostet diesen Zug 0." + }, + "Slimebound:Grow": { + "NAME": "Wachsen", + "DESCRIPTION": "Verliere 1 Schleim-Slot. Erhalte !M! Stärke und !M! Geschicklichkeit." + }, + "Slimebound:GrowthPunch": { + "NAME": "Wachstumshieb", + "DESCRIPTION": "Erhalte !B! Block. NL Füge !D! Schaden zu. NL slimeboundmod:Konsum: Erhöhe Block und Schaden um !M!." + }, + "Slimebound:HauntingLick": { + "NAME": "Schauerwabbel", + "DESCRIPTION": "Wende !M! Verwundbar und !slime! slimeboundmod:Glibber an. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Wende !M! Verwundbar und !slime! slimeboundmod:Glibber an. NL Ziehe eine Karte. NL Erschöpft." + }, + "Slimebound:HungryTackle": { + "NAME": "Feuchter Tackle", + "DESCRIPTION": "Füge !D! Schaden zu. NL Erleide !SlimeboundSelfharm! Schaden. NL expansioncontent:Exhumiere eine zufällige *Wabbel Karte.", + "UPGRADE_DESCRIPTION": "Füge !D! Schaden zu. NL Erleide !SlimeboundSelfharm! Schaden. NL expansioncontent:Exhumiere 2 zufällige *Wabbel Karten." + }, + "Slimebound:ItLooksTasty": { + "NAME": "Schmackofatz", + "DESCRIPTION": "Füge !D! Schaden zu. slimeboundmod:Konsum: Erhalte einen *Wabbel.", + "UPGRADE_DESCRIPTION": "Füge !D! Schaden zu. slimeboundmod:Konsum: Erhalte einen *Wabbel+." + }, + "Slimebound:LeadByExample": { + "NAME": "Den Ton angeben", + "DESCRIPTION": "Die erste gespielte Karte des Zuges, die auf Gegner abzielt, erteilt ein slimeboundmod:Kommando.", + "UPGRADE_DESCRIPTION": "Die ersten !M! gespielten Karten des Zuges, die auf Gegner abzielen, erteilen ein slimeboundmod:Kommando." + }, + "Slimebound:LeechEnergy": { + "NAME": "Laben", + "DESCRIPTION": "Füge !D! Schaden zu. slimeboundmod:Konsum: Erhalte [E] und ziehe !M! Karte.", + "UPGRADE_DESCRIPTION": "Füge !D! Schaden zu. slimeboundmod:Konsum: Erhalte [E] und ziehe !M! Karten." + }, + "Slimebound:LeechLife": { + "NAME": "Aussaugen", + "DESCRIPTION": "Flüchtig. NL Füge !D! Schaden zu. Heile TP in Höhe des ungeblockten Schadens. NL Erschöpft." + }, + "Slimebound:LeechingTouch": { + "NAME": "Saugschlag", + "DESCRIPTION": "Füge !D! Schaden zu. NL slimeboundmod:Konsum: Erhalte Block in Höhe des slimeboundmod:Glibbers." + }, + "Slimebound:LevelUp": { + "NAME": "Level Up", + "DESCRIPTION": "Erhalte !M! slimeboundmod:Potenz.", + "UPGRADE_DESCRIPTION": "Erhalte !M! slimeboundmod:Potenz und 1 Schleim-Slot." + }, + "Slimebound:Lick": { + "NAME": "Wabbel", + "DESCRIPTION": "Wende !slime! slimeboundmod:Glibber an. NL Erschöpft - slimeboundmod:Begraben.", + "UPGRADE_DESCRIPTION": "Wende !M! Schwach und !slime! slimeboundmod:Glibber an. NL Ziehe eine Karte. NL Erschöpft - slimeboundmod:Begraben." + }, + "Slimebound:LivingWall": { + "NAME": "Lebendige Mauer", + "DESCRIPTION": "Erhalte !B! Block. NL Immer wenn dich in diesem Zug ein Gegner angreift, wende !slime! slimeboundmod:Glibber auf ihn an." + }, + "Slimebound:MassFeed": { + "NAME": "Massenschlingen", + "DESCRIPTION": "Füge ALLEN Gegnern !D! Schaden zu. NL Wenn tödlich, erhöhe deine max. TP um !M!. NL Erschöpft." + }, + "Slimebound:MassRepurpose": { + "NAME": "Massenwandlung", + "DESCRIPTION": "slimeboundmod:Absorbiere alle Schleime und slimeboundmod:spalte für jeden einen slimeboundmod:Spezialisten *ab. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "slimeboundmod:Absorbiere alle Schleime und slimeboundmod:spalte für jeden einen slimeboundmod:Spezialisten *ab. slimeboundmod:Kommandiere sie. NL Erschöpft." + }, + "Slimebound:MegaLick": { + "NAME": "Mega-Wabbel", + "DESCRIPTION": "Wende !M! Schwach und !slime! slimeboundmod:Glibber auf ALLE Gegner an. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Wende !M! Schwach und !slime! slimeboundmod:Glibber auf ALLE Gegner an. NL Ziehe eine Karte. NL Erschöpft." + }, + "Slimebound:MinionMaster": { + "NAME": "Bossaura", + "DESCRIPTION": "Immer wenn du eine Karte mit slimeboundmod:Kommando spielst, slimeboundmod:Kommandiere ein weiteres Mal.", + "UPGRADE_DESCRIPTION": "Angeboren. NL Immer wenn du eine Karte mit slimeboundmod:Kommando spielst, slimeboundmod:Kommandiere ein weiteres Mal." + }, + "Slimebound:Nibble": { + "NAME": "Knabber-Wabbel", + "DESCRIPTION": "Füge !D! Schaden zu. NL Erhalte einen *Wabbel. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Füge !D! Schaden zu. NL Erhalte einen *Wabbel. NL Ziehe eine Karte. NL Erschöpft." + }, + "Slimebound:OneTwoCombo": { + "NAME": "Doppelangriff", + "DESCRIPTION": "Füge !D! Schaden zu. NL slimeboundmod:Kommando. NL Nimm diese Karte vom Abwurfstapel auf die Hand, immer wenn du slimeboundmod:abspaltest.", + "UPGRADE_DESCRIPTION": "Füge !D! Schaden zu. NL slimeboundmod:Kommando zweimal. NL Nimm diese Karte vom Abwurfstapel auf die Hand, immer wenn du slimeboundmod:abspaltest." + }, + "Slimebound:OozeBath": { + "NAME": "Schlammbad", + "DESCRIPTION": "Der Gegner erhält immer zu Beginn seines Zuges !slime! slimeboundmod:Glibber. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Verdreifache den slimeboundmod:Glibber des Gegners. NL Erschöpft." + }, + "Slimebound:Overexert": { + "NAME": "Überanstrengen", + "DESCRIPTION": "Erhalte 5 slimeboundmod:Potenz. NL slimeboundmod:Absorbiere nach !M! Zügen alle Schleime.", + "UPGRADE_DESCRIPTION": "Erhalte 5 slimeboundmod:Potenz. NL slimeboundmod:Kommando zweimal. NL slimeboundmod:Absorbiere nach !M! Zügen alle Schleime." + }, + "Slimebound:Prepare": { + "NAME": "Vorbereiten", + "DESCRIPTION": "Erhalte !B! Block. NL Im nächsten Zug, NL ziehe !M! Karten und NL erhalte [E]. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Im nächsten Zug, ziehe !M! Karten und erhalte [E]. NL Behalte in diesem Zug bis zu !M! Karten. Erschöpft." + }, + "Slimebound:PrepareCrush": { + "NAME": "SCHLEIM...", + "DESCRIPTION": "Erhalte im nächsten Zug [E] [E] [E], *ZERSCHMETTERN! und !M! Stärke. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Erhalte im nächsten Zug [E] [E] [E] [E], *ZERSCHMETTERN!+ und !M! Stärke. NL Erschöpft.", + "EXTENDED_DESCRIPTION": [ + "~Schleim...~ NL #r~ZERSCHMETTERN!!!~" + ] + }, + "Slimebound:PressTheAttack": { + "NAME": "Vorantreiben", + "DESCRIPTION": "Füge !D! Schaden zu. slimeboundmod:Kommando.", + "UPGRADE_DESCRIPTION": "Füge !D! Schaden zu. slimeboundmod:Kommando zweimal." + }, + "Slimebound:ProtectTheBoss": { + "NAME": "Opferschleim", + "DESCRIPTION": "Verhindere deinen nächsten TP-Verlust durch Angriffsschaden, indem du deinen führenden Schleim slimeboundmod:absorbierst.", + "UPGRADE_DESCRIPTION": "Verhindere deine nächsten 2 TP-Verluste durch Angriffsschaden, indem du jeweils deinen führenden Schleim slimeboundmod:absorbierst." + }, + "Slimebound:RainOfGoop": { + "NAME": "Glibberregen", + "DESCRIPTION": "Wende !M! Mal auf einen zufälligen Gegner !slime! slimeboundmod:Glibber an.", + "UPGRADE_DESCRIPTION": "Wende !M! Mal auf einen zufälligen Gegner !slime! slimeboundmod:Glibber an." + }, + "Slimebound:RallyTheTroops": { + "NAME": "Schleimgeneral", + "DESCRIPTION": "Füge !D! Schaden zu. NL Die nächsten !M! gespielten Karten in diesem Zug slimeboundmod:Kommandieren." + }, + "Slimebound:Recollect": { + "NAME": "Anfeuchten", + "DESCRIPTION": "Erhalte !B! Block. NL expansioncontent:Exhumiere eine zufällige *Wabbel Karte.", + "UPGRADE_DESCRIPTION": "Erhalte !B! Block. NL expansioncontent:Exhumiere 2 zufällige *Wabbel Karten.", + "EXTENDED_DESCRIPTION": [ + "Nichts... Erschöpft..." + ] + }, + "Slimebound:Recycling": { + "NAME": "Sparsamkeit", + "DESCRIPTION": "expansioncontent:Exhumiere zu Beginn deines Zuges eine zufällige *Wabbel Karte.", + "UPGRADE_DESCRIPTION": "Angeboren. NL expansioncontent:Exhumiere zu Beginn deines Zuges eine zufällige *Wabbel Karte." + }, + "Slimebound:RejuvenatingLick": { + "NAME": "Doppel-Wabbel", + "DESCRIPTION": "Wende 2 Mal !slime! slimeboundmod:Glibber an. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Wende 2 Mal !slime! slimeboundmod:Glibber an. NL Ziehe eine Karte. NL Erschöpft." + }, + "Slimebound:Replication": { + "NAME": "Replizieren", + "DESCRIPTION": "Wähle eine Handkarte. Lege eine Kopie auf den Nachziehstapel. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Wähle eine Handkarte. Erhalte eine Kopie. NL Erschöpft.", + "EXTENDED_DESCRIPTION": [ + " zum Kopieren.", + " zum Kopieren." + ] + }, + "Slimebound:Repurpose": { + "NAME": "Umwandlung", + "DESCRIPTION": "slimeboundmod:Absorbiere deinen führenden Schleim um einen slimeboundmod:Spezialisten slimeboundmod:abzuspalten. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "slimeboundmod:Absorbiere deinen führenden Schleim um einen slimeboundmod:Spezialisten slimeboundmod:abzuspalten. NL slimeboundmod:Kommando. NL Erschöpft." + }, + "Slimebound:RollThrough": { + "NAME": "Durchrollen", + "DESCRIPTION": "Füge ALLEN Gegnern !D! Schaden zu. NL Du erleidest keinen Schaden von den nächsten !M! *Tackle Karten." + }, + "Slimebound:SamplingLick": { + "NAME": "Harter Wabbel", + "DESCRIPTION": "Wende !slime! slimeboundmod:Glibber an. NL Erhalte !B! Block. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Wende !slime! slimeboundmod:Glibber an. NL Erhalte !B! Block. NL Ziehe eine Karte. NL Erschöpft." + }, + "Slimebound:Schlurp": { + "NAME": "Schlürfen", + "DESCRIPTION": "Wende !slime! slimeboundmod:Glibber an. NL Erhalte !M! *Wabbel Karte.", + "UPGRADE_DESCRIPTION": "Wende !slime! slimeboundmod:Glibber an. NL Erhalte !M! *Wabbel Karten." + }, + "Slimebound:SelfFormingGoo": { + "NAME": "Umformen", + "DESCRIPTION": "Erhalte !B! Block. NL Lege eine Karte aus dem Abwurfstapel auf den Nachziehstapel." + }, + "Slimebound:ServeAndProtect": { + "NAME": "Wiedervereinigung", + "DESCRIPTION": "Erhalte für jeden Schleim !B! Block und 1 bronze:Verschwimmen. NL slimeboundmod:Absorbiere alle Schleime. NL Erschöpft." + }, + "Slimebound:SlimeBarrage": { + "NAME": "Schleimoffensive", + "DESCRIPTION": "Füge !D! Schaden zu. slimeboundmod:Kommando für alle Schleime.", + "UPGRADE_DESCRIPTION": "Füge !D! Schaden zu. slimeboundmod:Kommando zweimal für alle Schleime." + }, + "Slimebound:SlimeBrawl": { + "NAME": "Schleimkampf", + "DESCRIPTION": "Spiele die oberste Karte des Nachziehstapels. Wiederhole das für jeden Schleim. NL Erschöpft." + }, + "Slimebound:SlimeCrush": { + "NAME": "ZERSCHMETTERN!", + "DESCRIPTION": "Flüchtig. NL Füge !D! Schaden zu. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Flüchtig. NL Füge ALLEN Gegnern !D! Schaden zu. NL Erschöpft." + }, + "Slimebound:SlimeSlap": { + "NAME": "Schleimschelle", + "DESCRIPTION": "Füge !D! Schaden zu. NL Dieser Angriff entfernt keinen slimeboundmod:Glibber." + }, + "Slimebound:SlimeSpikes": { + "NAME": "Schleimstacheln", + "DESCRIPTION": "Erhalte !B! Block und !M! *temporäre Stacheln." + }, + "Slimebound:SlimeTap": { + "NAME": "Schleimquelle", + "DESCRIPTION": "slimeboundmod:Absorbiere deinen führenden Schleim um [E] zu erhalten und NL !M! Karte zu ziehen. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "slimeboundmod:Absorbiere deinen führenden Schleim um [E] [E] zu erhalten und NL !M! Karten zu ziehen. NL Erschöpft.", + "EXTENDED_DESCRIPTION": [ + "Brauche... Untergebene..." + ] + }, + "Slimebound:SpikyOuterGoop": { + "NAME": "Glibberrüstung", + "DESCRIPTION": "Erhalte immer, wenn du slimeboundmod:Konsumierst, !M! Block." + }, + "Slimebound:Split": { + "NAME": "Abspalten", + "DESCRIPTION": "slimeboundmod:Spalte einen slimeboundmod:Minischleim *ab. NL slimeboundmod:Kommando." + }, + "Slimebound:SplitAcid": { + "NAME": "Minischleim", + "DESCRIPTION": "slimeboundmod:Spalte einen slimeboundmod:Minischleim *ab. NL slimeboundmod:Kommando !M! Mal.", + "UPGRADE_DESCRIPTION": "slimeboundmod:Spalte einen slimeboundmod:Minischleim *ab. NL slimeboundmod:Kommando 3 Mal." + }, + "Slimebound:SplitBruiser": { + "NAME": "Kampfschleim", + "DESCRIPTION": "slimeboundmod:Spalte einen slimeboundmod:Kampfschleim *ab. NL slimeboundmod:Kommando !M! Mal.", + "UPGRADE_DESCRIPTION": "slimeboundmod:Spalte einen slimeboundmod:Kampfschleim *ab. NL slimeboundmod:Kommando 3 Mal." + }, + "Slimebound:SplitGreed": { + "NAME": "Gierschleim", + "DESCRIPTION": "Behalten. NL Beschwöre den *Gierschleim. Zählt als slimeboundmod:Abspaltung. NL Erschöpft." + }, + "Slimebound:SplitLeeching": { + "NAME": "Beschützerschleim", + "DESCRIPTION": "slimeboundmod:Spalte einen slimeboundmod:Beschützerschleim *ab. NL slimeboundmod:Kommando !M! Mal.", + "UPGRADE_DESCRIPTION": "slimeboundmod:Spalte einen slimeboundmod:Beschützerschleim *ab. NL slimeboundmod:Kommando 3 Mal." + }, + "Slimebound:SplitMire": { + "NAME": "Schlammschleim", + "DESCRIPTION": "slimeboundmod:Spalte einen slimeboundmod:Schlammschleim *ab. NL slimeboundmod:Kommando !M! Mal.", + "UPGRADE_DESCRIPTION": "slimeboundmod:Spalte einen slimeboundmod:Schlammschleim *ab. NL slimeboundmod:Kommando 3 Mal." + }, + "Slimebound:SplitScrap": { + "NAME": "Schrottschleim", + "DESCRIPTION": "Behalten. NL Beschwöre den *Schrottschleim. Zählt als slimeboundmod:Abspaltung. NL Erschöpft." + }, + "Slimebound:SplitSpecialist": { + "NAME": "Spezialschleim", + "DESCRIPTION": "Wähle 1 von 3 slimeboundmod:Spezialisten den du slimeboundmod:abspaltest. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Wähle 1 von 3 slimeboundmod:Spezialisten den du slimeboundmod:abspaltest. NL slimeboundmod:Kommando. NL Erschöpft." + }, + "Slimebound:Strike_Slimebound": { + "NAME": "Schlag", + "DESCRIPTION": "Füge !D! Schaden zu." + }, + "Slimebound:Tackle": { + "NAME": "Tackle", + "DESCRIPTION": "Füge !D! Schaden zu. NL Erleide !SlimeboundSelfharm! Schaden." + }, + "Slimebound:TagTeam": { + "NAME": "Spaltangriff", + "DESCRIPTION": "Füge !D! Schaden zu. NL slimeboundmod:Spalte einen zufälligen Schleim *ab. NL slimeboundmod:Kommando !M! Mal.", + "UPGRADE_DESCRIPTION": "Füge !D! Schaden zu. NL slimeboundmod:Spalte einen zufälligen slimeboundmod:Spezialisten *ab. NL slimeboundmod:Kommando !M! Mal." + }, + "Slimebound:Teamwork": { + "NAME": "Teamarbeit", + "DESCRIPTION": "slimeboundmod:Kommando X Mal. NL Erhalte X Mal !B! Block.", + "UPGRADE_DESCRIPTION": "slimeboundmod:Kommando X+1 Mal. NL Erhalte X+1 Mal !B! Block." + }, + "Slimebound:TongueLash": { + "NAME": "Zungenpeitsche", + "DESCRIPTION": "Füge !D! Schaden zu. Den Schaden für jede *erschöpfte *Wabbel Karte um !M! erhöht." + }, + "Slimebound:ViciousTackle": { + "NAME": "Bösartiger Tackle", + "DESCRIPTION": "Füge !D! Schaden zu. NL Erleide !SlimeboundSelfharm! Schaden. slimeboundmod:Glibber ist für diesen Angriff doppelt so effektiv.", + "UPGRADE_DESCRIPTION": "Füge !D! Schaden zu. NL Erleide !SlimeboundSelfharm! Schaden. slimeboundmod:Glibber ist für diesen Angriff doppelt so effektiv." + }, + "Slimebound:WasteNot": { + "NAME": "Götterspeise", + "DESCRIPTION": "expansioncontent:Exhumiere alle *Wabbel Karten. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "expansioncontent:Exhumiere alle *Wabbel Karten.", + "EXTENDED_DESCRIPTION": [ + "Nichts... Erschöpft..." + ] + } +} diff --git a/src/main/resources/slimeboundResources/localization/deu/CharacterStrings.json b/src/main/resources/slimeboundResources/localization/deu/CharacterStrings.json new file mode 100644 index 0000000000..d9a2f2ca69 --- /dev/null +++ b/src/main/resources/slimeboundResources/localization/deu/CharacterStrings.json @@ -0,0 +1,16 @@ +{ + "Slimebound": { + "NAMES": [ + "Der Schleimboss" + ], + "TEXT": [ + "Des Herzen schleimigster General. NL Kann alleine, oder zu mehreren kämpfen.", + "Muss... Herz... absorbieren...", + "Auf einer unbeleuchteten Straße triffst du auf ein paar vermummte Gestalten, die gerade mitten in irgendeinem dunklen Ritual sind. Als du näher kommst, wenden sie sich dir in gespenstischem Gleichklang zu. Der Größte von ihnen entblößt Fangzähne und streckt eine lange, blasse Hand nach dir aus. NL~„Schließ~ ~dich~ ~uns~ ~an,~ ~schleimiger~ ~Lord,~ ~und~ ~spüre~ ~die~ ~Wärme~ ~des~ ~Spire.“~" + ], + "KEYWORDS": [ + "Des Herzen schleimigster General.", + "Muss... Herz... absorbieren..." + ] + } +} \ No newline at end of file diff --git a/src/main/resources/slimeboundResources/localization/deu/EventStrings.json b/src/main/resources/slimeboundResources/localization/deu/EventStrings.json new file mode 100644 index 0000000000..8cf0b79b95 --- /dev/null +++ b/src/main/resources/slimeboundResources/localization/deu/EventStrings.json @@ -0,0 +1,105 @@ +{ + "Slimebound:Hunted": { + "NAME": "Auftritt des Bosses", + "DESCRIPTIONS": [ + "Eine drohende Stimme hallt im Spire... NL NL #r~SCHLEIM ZERSCHMETTERN!!!~ NL NL Der massive Schleim holt dich schnell ein und stellt sich dir in den Weg. Es sieht so aus als ob er seit dem Exordium noch weiter gewachsen ist. Auf dem Weg hierher hat er vieles absorbiert", + "Kann es wirklich so einfach sein?", + "Du besiegst den Schleimboss mit Leichtigkeit und nimmst all seine Habseligkeiten an dich, auch den Hut. Er hat ha auch Stil." + ], + "OPTIONS": [ + "[Kämpfen] #rKämpfe #rgegen #rden #rSchleimboss. Belohnung: #gWinzige #gMelone.", + "[FEIGHEIT] #rWerde #rverflucht #r- #rScham." + ] + }, + "Slimebound:WorldofGoop": { + "NAME": "Welt aus Schleim", + "DESCRIPTIONS": [ + "Du fällst in eine Pfütze. NL @SIE@ @IST@ @AUS@ #g@KLEBRIGEM@ #g@SCHLEIM!!@ NL Beruhigt nimmst du darin ein Bad - wann hast du sonst Zeit zum Entspannen? NL NL Beim Herausklettern merkst du, dass die #ySeelen einiger unglücklicher Abenteurer in der Pfütze langsam von einem gefräßigen Schleim verschlungen werden.", + "Bevor du gehst, konsumierst du selbst die verbliebenen #ySeelen, und die Kreatur bleibt mit einem enttäuschten Blick zurück.", + "Du konntest dich mit der Kreatur einigen: Du versogst sie mit #ySeelen und sie hilft dir im Kampf. NL Du verlässt das Schleimbad zusammen mit deinem neuen #gFreund." + ], + "OPTIONS": [ + "[Sammeln] #gErhalte #g75 #gGold.", + "[Rekrutieren] #rVerliere #r75 #rGold. #gErhalte #gden #yGierschleim.", + "[Verlassen]", + "[Gesperrt] Erfordert 75 Gold." + ] + }, + "Slimebound:SlimeTalk": { + "NAME": "TalkStrings", + "DESCRIPTIONS": [ + "~Nicht~ ~absorbieren!~", + "~Du~ ~willst~ ~unsere~ ~Seelen?~", + "~Es~ ~wird~ ~uns~ ~verschlingen...~", + "~Der~ ~Boss!~", + "Dieser Hut... NL #r~Ich~ #r~muss~ #r~ihn~ #r~haben!~", + "~Warum~", + "~lässt~ ~es~", + "~uns~ ~nicht~ ~spielen?~", + "~Es~ ~wird~ ~uns~ ~absorbieren...~", + "~Es~ ~ist~ ~zu~ ~srark...~", + "~Einer~ ~von~ ~uns...~", + "~COOLER~ #r~HUT!!!~" + ] + }, + "Slimebound:ScrapOoze": { + "NAME": "Schrottschlamm", + "DESCRIPTIONS": [ + "Jeder Schleim ist ein Verbündeter. Der Schrottschleim schließt sich dir an, da du ihm mehr Schrott und Schätze versprichst." + ], + "OPTIONS": [ + "[Rekrutieren] #rVerliere ", + ". #gErhalte #gden #gSchrottschleim [REMOVE_SPACE]. #rNur #rjetzt!", + "[Rekrutieren] Gesperrt (Du hast den Schrottschleim verärgert)", + "[Verlassen]", + "[Rekrutieren] Gesperrt (Erfordert Gewöhnliche oder Ungewöhnliche Relikte)" + ] + }, + "Slimebound:ArtOfSlimeWar": { + "NAME": "Die Kunst des Schleim-Krieges", + "DESCRIPTIONS": [ + "Du erblickst ein widerliches Podest mit einem #gglühenden #gBuch darauf. Es sieht so aus als würde das Buch von den komplizierten Kampftechniken des #gSchleimbosses und seiner Untertanen handeln.", + "Als du nach dem Buch greifst, hörst du, wie einige Fallen ausgelöst werden. Du wirst nicht allen ausweichen können.", + "Du stiehlst das Buch und schaffst es den Fallen auszuweichen, doch dabei fällst du in eine tiefe, widerliche Schleimpfütze.", + "Als du das Buch nimmst, steigen Stacheln von unten empor. Du vermeidest zwar aufgespießt zu werden, doch erleidest einige Kratzer", + "Du spürst etwas deiner Lebenskraft schwinden als du das Buch berührst. Hoffentlich war es das wert", + "Du lässt das Buch liegen und kümmerst dich weiter um deine Mission.", + "Du verstehst nicht wie die Schleim-Untergebenen eine Bedrohung für jemanden darstellen. Anscheinend besteht ihre Taktik daraus, ihre Körper gewaltvoll auf die Gegner zu stoßen. Vielleicht kannst du das ja nachmachen..." + ], + "OPTIONS": [ + "[Lesen] #gEntferne #galle #gSchläge. #gErhalte #g3 #gverbesserte #gTackles.", + "[Nehmen] #gErhalte #gBuch #gBefragen. #rLöse #reine #rFalle #raus.", + "[Verlassen]", + "[Ducken] #rWerde #rverflucht #r- #rEkel.", + "[Geduld] #rErleide #r", + " #rSchaden.", + "[Hast] #rVerliere #r", + " #rmax. #rTP." + ] + }, + "Slimebound:Darklings": { + "NAME": "Dunkelinge", + "DESCRIPTIONS": [ + "Drei unbekannte Schleimartige stellen sich dir in den Weg. Sie sehen feindlich gesinnt aus, doch dann bemerken sie, dass du eine ähnliche Konsistenz zu ihrer aufweist und werden neugierig.", + "Als du dich für die ~Konfrontation~ ~bereit~ ~machst,~ tun die schwarzen Schleime es dir gleich!", + "Nach einer kurzen Unterredung schließen sich die Schleime dir an. Sie verlassen ihren Posten nur kurz um dir zu helfen." + ], + "OPTIONS": [ + "[Rekrutieren] #gErhalte #gDunkelingduo. #rVerliere ", + "[Kämpfen]", + "[Verlassen]", + ".", + "[Gesperrt] Erfordert eine seltene Karte." + ] + }, + "Slimebound:BackToBasics": { + "NAME": "", + "DESCRIPTIONS": [ + "Wenn ein Schaf voranschreitet, folgen ihm alle." + ], + "OPTIONS": [ + "[Inspiration] Alle #gSchlag und #gVerteidigen Karten erhalten #gKommando.", + "[Gesperrt] Erfordert einen Schlag oder ein Verteidigen." + ] + } +} \ No newline at end of file diff --git a/src/main/resources/slimeboundResources/localization/deu/KeywordStrings.json b/src/main/resources/slimeboundResources/localization/deu/KeywordStrings.json new file mode 100644 index 0000000000..9bbd914b7a --- /dev/null +++ b/src/main/resources/slimeboundResources/localization/deu/KeywordStrings.json @@ -0,0 +1,271 @@ +[ + { + "NAMES": [ + "absorbieren", + "absorbiere", + "absorbiert", + "absorbierst", + "absorb", + "absorbing", + "absorbed" + ], + "PROPER_NAME": "Absorbieren", + "DESCRIPTION": "Vereinige dich einem Schleimuntertanen und erhalte dabei #b1 #yStärke [REMOVE_SPACE]." + }, + { + "NAMES": [ + "spalten", + "spalte", + "gespalten", + "gespaltet", + "abspalten", + "abspalte", + "abspaltest", + "abgespalten", + "abgespaltet", + "abgespalteten", + "abgespaltenen", + "abgespaltete", + "abgespaltene", + "abzuspalten", + "abspaltung", + "split", + "splitting" + ], + "PROPER_NAME": "Abspalten", + "DESCRIPTION": "Spalte einen Schleimuntertanen von dir ab. Er greift am Anfang jedes Zuges an. Wenn du keine Schleim-Slots übrig hast, wird dein ältester Schleimuntertan #yabsorbiert, und du erhältst #b1 #yStärke [REMOVE_SPACE]." + }, + { + "NAMES": [ + "glibber", + "glibbers", + "geglibbert", + "angeglibbert", + "goop", + "gooped" + ], + "PROPER_NAME": "Glibber", + "DESCRIPTION": "Der Schaden des nächsten #yAngriffs wird um die Anzahl des #yGlibbers erhöht. Ein #yAngriff entfernt sämtlichen #yGlibber und aktiviert #yKonsum Effekte." + }, + { + "NAMES": [ + "potenz", + "potency" + ], + "PROPER_NAME": "Potenz", + "DESCRIPTION": "Erhöht den Schaden deiner abgespalteten Schleimuntertanen. Sekundäreffekte erhöhen sich um pro #b2 Potenzpunkten um #b1 (aufgerundet)." + }, + { + "NAMES": [ + "kommando", + "kommandieren", + "kommandiere", + "kommandiert", + "kommandierst", + "command", + "commands" + ], + "PROPER_NAME": "Kommando", + "DESCRIPTION": "Gibt Schleimuntertanen das Angriffskommando. Falls nicht näher spezifiziert, greift nur der führende (jüngste) Schleimuntertan an." + }, + { + "NAMES": [ + "fackelschleim", + "torchhead slime", + "torchhead_slime" + ], + "PROPER_NAME": "Fackelschleim", + "DESCRIPTION": "Fügt mit seinem Angriff #b6 Schaden zu. Der Schaden erhöht sich zusätzlich durch #yStärke." + }, + { + "NAMES": [ + "kampfschleim", + "kampf", + "bruiser slime", + "bruiser_slime", + "bruiser slimes", + "bruiser_slimes", + "bruiser" + ], + "PROPER_NAME": "Kampfschleim", + "DESCRIPTION": "Fügt mit seinem Angriff 2 Mal #b3 Schaden zu." + }, + { + "NAMES": [ + "krähenschleim", + "cultist slime", + "cultist_slime" + ], + "PROPER_NAME": "Krähenschleim", + "DESCRIPTION": "Fügt mit seinem Angriff #b6 Schaden zu und erhöht danach seinen Schaden um #b1." + }, + { + "NAMES": [ + "beschützerschleim", + "leeching slime", + "leeching_slime", + "leeching slimes", + "leeching_slimes", + "leeching" + ], + "PROPER_NAME": "Beschützerschleim", + "DESCRIPTION": "Fügt mit seinem Angriff #b1 Schaden zu und gibt dir danach #b3 #yBlock." + }, + { + "NAMES": [ + "minischleim", + "guerilla slime", + "guerilla_slime", + "guerilla slimes", + "guerilla_slimes", + "guerilla" + ], + "PROPER_NAME": "Minischleim", + "DESCRIPTION": "Fügt mit seinem Angriff ALLEN Gegnern #b3 Schaden zu." + }, + { + "NAMES": [ + "schlammschleim", + "mire slime", + "mire_slime", + "mire slimes", + "mire_slimes", + "mire" + ], + "PROPER_NAME": "Schlammschleim", + "DESCRIPTION": "Fügt mit seinem Angriff #b2 Schaden zu und wendet danach #b2 #yGlibber an." + }, + { + "NAMES": [ + "strahlschleim", + "bronze slime", + "bronze_slime" + ], + "PROPER_NAME": "Strahlschleim", + "DESCRIPTION": "Fügt ALLEN Gegnern #b10 Schaden zu und setzt den nächsten Angriff aus." + }, + { + "NAMES": [ + "wabbel", + "wabbeln", + "wabbler", + "lick" + ], + "PROPER_NAME": "Wabbel", + "DESCRIPTION": "Karten, die 0 kosten und #yGlibber anwenden." + }, + { + "NAMES": [ + "geisterschleim", + "ghostflame slime", + "ghostflame_slime" + ], + "PROPER_NAME": "Geisterschleim", + "DESCRIPTION": "Fügt mit seinem Angriff #b2 Schaden zu und wendet danach #b6 #ySeelenfeuer an." + }, + { + "NAMES": [ + "langsam", + "slow" + ], + "PROPER_NAME": "Langsam", + "DESCRIPTION": "Erhält #b10% mehr Schaden für jede Karte, die in diesem Zug ausgespielt wird." + }, + { + "NAMES": [ + "tackle", + "tackles" + ], + "PROPER_NAME": "Tackle", + "DESCRIPTION": "#yAngriffe mit hohem Schaden, die auch dir etwas Schaden zufügen." + }, + { + "NAMES": [ + "spire boss", + "spire_boss" + ], + "PROPER_NAME": "Spire Boss", + "DESCRIPTION": "Starke, von Spire Bossen inspirierte Karten, die 0 kosten." + }, + { + "NAMES": [ + "dornenschleim", + "protector slime", + "protector_slime" + ], + "PROPER_NAME": "Dornenschleim", + "DESCRIPTION": "Fügt mit seinem Angriff #b4 Schaden zu und gibt dir danach #b4 #ytemporäre #yStacheln." + }, + { + "NAMES": [ + "spötterschleim", + "insulting slime", + "insulting_slime" + ], + "PROPER_NAME": "Spötterschleim", + "DESCRIPTION": "Fügt mit seinem Angriff #b4 Schaden zu und wendet danach #b1 #yVerwundbar an." + }, + { + "NAMES": [ + "dunkeling", + "dunkelinge", + "darkling slime", + "darkling_slime" + ], + "PROPER_NAME": "Dunkeling", + "DESCRIPTION": "Fügt mit seinem Angriff #b3 Schaden zu. Greift auch an, wenn ein anderer Dunkeling #ykommandiert wird." + }, + { + "NAMES": [ + "antiker schleim", + "antiker_schleim", + "antiken schleim", + "antiken_schleim", + "ancient slime", + "ancient_slime" + ], + "PROPER_NAME": "Antiker Schleim", + "DESCRIPTION": "Fügt mit seinem Angriff #b3 Schaden zu. Danach ziehst du #b1 Karte." + }, + { + "NAMES": [ + "zeitschleim", + "time slime", + "time_slime" + ], + "PROPER_NAME": "Zeitschleim", + "DESCRIPTION": "Fügt mit seinem Angriff #b4 Schaden zu, und wendet danach #b1 #ySchwach an." + }, + { + "NAMES": [ + "konsumieren", + "konsumierst", + "konsumiert", + "konsumiere", + "konsum", + "consume" + ], + "PROPER_NAME": "Konsumieren", + "DESCRIPTION": "#yGlibber des Gegners wird konsumiert, wenn er angegriffen wird. Manche #yAngriffe haben einen Bonuseffekt, wenn durch sie #ykonsumiert wird." + }, + { + "NAMES": [ + "spezialist", + "spezialisten", + "specialist", + "specialist" + ], + "PROPER_NAME": "Spezialist", + "DESCRIPTION": "Besondere Schleime mit stärkeren Angriffen ." + }, + { + "NAMES": [ + "begraben", + "begrabe", + "begrabene", + "buried" + ], + "PROPER_NAME": "Begraben", + "DESCRIPTION": "Begrabene Karten haben die niedrigste Priorität bei zufälligen #yExhumieren Effekten." + } +] diff --git a/src/main/resources/slimeboundResources/localization/deu/MonsterStrings.json b/src/main/resources/slimeboundResources/localization/deu/MonsterStrings.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/src/main/resources/slimeboundResources/localization/deu/MonsterStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/slimeboundResources/localization/deu/OrbStrings.json b/src/main/resources/slimeboundResources/localization/deu/OrbStrings.json new file mode 100644 index 0000000000..67dd654c55 --- /dev/null +++ b/src/main/resources/slimeboundResources/localization/deu/OrbStrings.json @@ -0,0 +1,121 @@ +{ + "Slimebound:EmptySlimeSlot": { + "NAME": "Schleim-Slot", + "DESCRIPTION": [ + "Schleimuntertane, die du von dir #yabspaltest [REMOVE_SPACE], finden hier Platz." + ] + }, + "Slimebound:BronzeSlime": { + "NAME": "Strahlschleim", + "DESCRIPTION": [ + "Fügt mit seinem Angriff ALLEN Gegnern #b", + " Schaden zu und setzt dann seinen nächsten Angriff aus.", + "" + ] + }, + "Slimebound:AttackSlime": { + "NAME": "Kampfschleim", + "DESCRIPTION": [ + "Fügt mit seinem Angriff 2 Mal #b", + " Schaden zu." + ] + }, + "Slimebound:ScrapOozeSlime": { + "NAME": "Schrottschleim", + "DESCRIPTION": [ + "Fügt mit seinem Angriff #b", + " Schaden zu. NL Kann nach dem #yAbsorbieren wiederbelebt werden." + ] + }, + "Slimebound:GreedOozeSlime": { + "NAME": "Gierschleim", + "DESCRIPTION": [ + "Fügt mit seinem Angriff #b", + " Schaden zu. NL Kann nach dem #yAbsorbieren wiederbelebt werden." + ] + }, + "Slimebound:TorchHeadSlime": { + "NAME": "Fackelschleim", + "DESCRIPTION": [ + "Fügt mit seinem Angriff #b", + " Schaden zu. Der Schaden erhöht sich zusätzlich durch #yStärke [REMOVE_SPACE]." + ] + }, + "Slimebound:CultistSlime": { + "NAME": "Krähenschleim", + "DESCRIPTION": [ + "Fügt mit seinem Angriff #b", + " Schaden zu und erhöht danach seinen Schaden um #b1 [REMOVE_SPACE]." + ] + }, + "Slimebound:ShieldSlime": { + "NAME": "Beschützerschleim", + "DESCRIPTION": [ + "Fügt mit seinem Angriff #b", + " Schaden zu und gibt dir danach #b", + " #yBlock [REMOVE_SPACE]." + ] + }, + "Slimebound:PoisonSlime": { + "NAME": "Minischleim", + "DESCRIPTION": [ + "Fügt mit seinem Angriff ALLEN Gegnern #b", + " Schaden zu." + ] + }, + "Slimebound:SlimingSlime": { + "NAME": "Schlammschleim", + "DESCRIPTION": [ + "Fügt mit seinem Angriff #b", + " Schaden zu und wendet danach #b", + " #yGlibber an." + ] + }, + "Slimebound:HexSlime": { + "NAME": "Geisterschleim", + "DESCRIPTION": [ + "Fügt mit seinem Angriff #b", + " Schaden zu und wendet danach #b", + " #ySeelenfeuer an." + ] + }, + "Slimebound:ChampSlime": { + "NAME": "Spötterschleim", + "DESCRIPTION": [ + "Fügt mit seinem Angriff #b", + " Schaden zu und wendet danach #b", + " #yVerwundbar an." + ] + }, + "Slimebound:SlowingSlime": { + "NAME": "Zeitschleim", + "DESCRIPTION": [ + "Fügt mit seinem Angriff #b", + " Schaden zu und wendet danach #b", + " #ySchwach an." + ] + }, + "Slimebound:ProtectorSlime": { + "NAME": "Dornenschleim", + "DESCRIPTION": [ + "Fügt mit seinem Angriff #b", + " Schaden zu und gibt dir danach #b", + " #ytemporäre #yStacheln [REMOVE_SPACE]." + ] + }, + "Slimebound:DrawingSlime": { + "NAME": "Antiker Schleim", + "DESCRIPTION": [ + "Fügt mit seinem Angriff #b", + " Schaden zu. Danach ziehst du #b", + " Karte. Du ziehst durch Potenz nicht mehr Karten." + ] + }, + "Slimebound:DarklingSlime": { + "NAME": "Dunkeling", + "DESCRIPTION": [ + "Fügt mit seinem Angriff #b", + " Schaden zu. Greift auch an, wenn ein anderer Dunkeling #kommandiert wird." + ] + } +} \ No newline at end of file diff --git a/src/main/resources/slimeboundResources/localization/deu/PotionStrings.json b/src/main/resources/slimeboundResources/localization/deu/PotionStrings.json new file mode 100644 index 0000000000..e5046afc7d --- /dev/null +++ b/src/main/resources/slimeboundResources/localization/deu/PotionStrings.json @@ -0,0 +1,30 @@ +{ + "Slimebound:SlimedPotion": { + "NAME": "Glibberkrug", + "DESCRIPTIONS": [ + "Wende #b", + " #yGlibber an." + ] + }, + "Slimebound:SlimyTonguePotion": { + "NAME": "Schleimelixier", + "DESCRIPTIONS": [ + "Wenn in diesem Kampf #yGlibber angewendet wird, erhöhe die angewendete Anzahl um #b", + " [REMOVE_SPACE]." + ] + }, + "Slimebound:SpawnSlimePotion": { + "NAME": "Armee aus der Flasche", + "DESCRIPTIONS": [ + "#ySpalte #b", + " zufällige Schleime #yab (Normale und #ySpezialisten [REMOVE_SPACE])." + ] + }, + "Slimebound:ThreeZeroPotion": { + "NAME": "Öliges Getränk", + "DESCRIPTIONS": [ + "Nimm #b", + " zufällige Karten, die 0 kosten, auf die Hand." + ] + } +} diff --git a/src/main/resources/slimeboundResources/localization/deu/PowerStrings.json b/src/main/resources/slimeboundResources/localization/deu/PowerStrings.json new file mode 100644 index 0000000000..d7aea18a45 --- /dev/null +++ b/src/main/resources/slimeboundResources/localization/deu/PowerStrings.json @@ -0,0 +1,521 @@ +{ + "Slimebound:PotencyPower": { + "NAME": "Potenz", + "DESCRIPTIONS": [ + "Erhöhe den Schaden deiner slimeboundmod:abgespaltenen Schleime um #b", + " und ihre Sekundäreffekte um #b", + " [REMOVE_SPACE]." + ] + }, + "Slimebound:SlimedPower": { + "NAME": "Glibber", + "DESCRIPTIONS": [ + "Der Schaden des nächsten #yAngriffs wird um #b", + " erhöht, wobeider ganze #yGlibber #ykonsumiert wird." + ] + }, + "Slimebound:PreventTackleDamagePower": { + "NAME": "Geschützt", + "DESCRIPTIONS": [ + "Du erleidest keinen Schaden von den #b", + " nächsten #yTackles die du spielst." + ] + }, + "Slimebound:SplitDailyTriggerPower": { + "NAME": "Teilung", + "DESCRIPTIONS": [ + "Wenn die TP bei oder unter #b50% sind, teilt sich ", + " in #b2 Schleime mit entsprechend vielen TP." + ] + }, + "Slimebound:SplitDailyPower": { + "NAME": "Spalten", + "DESCRIPTIONS": [ + "Der Gegner spaltet sich in diesem Zug." + ] + }, + "Slimebound:BuffAttackSlimesPower": { + "NAME": "Upgrade: Kämpfer", + "DESCRIPTIONS": [ + "#yKampfschleime fügen um #b", + " mehr Schaden zu." + ] + }, + "Slimebound:BuffPoisonSlimesPower": { + "NAME": "Upgrade: Gift", + "DESCRIPTIONS": [ + "#yGiftschleime wenden #b", + " mehr #yGift an." + ] + }, + "Slimebound:BuffSlimingSlimesPower": { + "NAME": "Upgrade: Schlamm", + "DESCRIPTIONS": [ + "#ySchlammschleime wenden #b", + " mehr #yGlibber an." + ] + }, + "Slimebound:BuffShieldSlimesPower": { + "NAME": "Upgrade: Beschützer", + "DESCRIPTIONS": [ + "#yBeschützerschleime fügen um #b", + " mehr Schaden zu." + ] + }, + "Slimebound:HexSlimePerTurnPower": { + "NAME": "Hexerkraft", + "DESCRIPTIONS": [ + "#ySpalte zu Beginn deines nächsten Zuges einen #Geisterschleim #yab [REMOVE_SPACE].", + "Spalte zu Beginn deiner nächsten #b", + " Züge einen #Geisterschleim #yab [REMOVE_SPACE]." + ] + }, + "Slimebound:ProtectTheBoss": { + "NAME": "Opferschleim", + "DESCRIPTIONS": [ + "Verhindere deinen nächsten TP-Verlust durch Angriffsschaden, indem du deinen führenden Schleim #yabsorbierst.", + "Verhindere deinen nächsten #b", + " TP-Verluste durch Angriffsschaden, indem du jeweils deinen führenden Schleim #yabsorbierst." + ] + }, + "Slimebound:SplitForLessPower": { + "NAME": "Schleimeffizienz", + "DESCRIPTIONS": [ + "#yAbspalten kostet #b", + " TP weniger. Nimm zu Beginn jedes Zuges #b", + " zufällige #yAbspalten Karte in die Hand.", + " zufällige #yAbspalten Karten in die Hand." + ] + }, + "Slimebound:ComboAttackPower": { + "NAME": "Den Ton angeben", + "DESCRIPTIONS": [ + "Die erste in deinem Zug gespielte Karte, die auf Gegner abzielt, #ykommandiert deinen führenden Schleim.", + "Die ersten #b", + " gespielten Karten des Zuges, die auf Gegner abzielen, #ykommandieren deinen führenden Schleim.", + " NL Dieser Effekt kann in diesem Zug noch #b", + " Mal aktiviert werden.", + " Mal aktiviert werden.", + " NL Dieser Effekt kann in diesem Zug nicht mehr aktiviert werden." + ] + }, + "Slimebound:RetainCardsOneTurnPower": { + "NAME": "Karten vorbereiten", + "DESCRIPTIONS": [ + "Behalte am Ende des Zuges #b", + " Karte.", + " Karten." + ] + }, + "Slimebound:EnergizedSlimeboundPower": { + "NAME": "Energiegeladen", + "DESCRIPTIONS": [ + "Du erhältst #b", + " [E] zusätzlich im nächsten Zug.", + " zusätzliche [E] im nächsten Zug.", + " - TRANSLATOR NOTE: - The above line is for plural if needed to distinguish from singular." + ] + }, + "Slimebound:SelfFormingGooPower": { + "NAME": "Wiedervereinigung", + "DESCRIPTIONS": [ + "Erhalte immer, wenn du einen Schleim absorbierst, #b", + " #yStärke [REMOVE_SPACE]." + ] + }, + "Slimebound:SelfFormingGooPowerPlus": { + "NAME": "Wiedervereinigung+", + "DESCRIPTIONS": [ + "Erhalte immer, wenn du einen Schleim absorbierst, #b", + " #yGeschicklichkeit [REMOVE_SPACE]." + ] + }, + "Slimebound:LoseSlimesPower": { + "NAME": "Überanstrengung", + "DESCRIPTIONS": [ + "#yAbsorbiere im nächsten Zug alle Schleimuntertanen.", + " Züge später #yAbsorbierst du alle Schleimuntertanen." + ] + }, + "Slimebound:TackleModifyDamagePower": { + "NAME": "Ramponiert", + "DESCRIPTIONS": [ + "Erleidet #b", + " mehr Schaden durch #yTackle Karten." + ] + }, + "Slimebound:LoseThornsPower": { + "NAME": "Temporäre Stacheln", + "DESCRIPTIONS": [ + "Verliere zu Beginn deines nächsten Zuges #b", + " #yStacheln [REMOVE_SPACE]." + ] + }, + "Slimebound:SlimedThornsPower": { + "NAME": "Lebendige Mauer", + "DESCRIPTIONS": [ + "Wenn du #yAngriffsschaden erleidest, werden beim Angreifer #b", + " #yGlibber angewendet." + ] + }, + "Slimebound:PreventSlimeDecayPower": { + "NAME": "Eingeschleimt", + "DESCRIPTIONS": [ + "Der nächste #yAngriff auf diesen Gegner entfernt keinen #yGlibber (der Schaden wird erhöht und die Boni durch den #yKonsum aktiviert).", + "Der nächsten #b", + " #yAngriffe auf diesen Gegner entfernen keinen #yGlibber (der Schaden wird erhöht und die Boni durch den #yKonsum aktiviert)." + ] + }, + "Slimebound:DuplicatedFormPower": { + "NAME": "Gespaltene Form", + "DESCRIPTIONS": [ + "Die erste in deinem Zug gespielte Karte, die auf Gegner abzielt, wird zweimal gespielt.", + "Die ersten #b", + " in deinem Zug gespielten Karten, die auf Gegner abzielen, werden zweimal gespielt." + ] + }, + "Slimebound:DuplicatedFormNoHealPower": { + "NAME": "Gespalten", + "DESCRIPTIONS": [ + "max. TP ist vorläufig um #b", + " reduziert." + ] + }, + "Slimebound:DuplicatedFormEnergyPower": { + "NAME": "Schleimenergie", + "DESCRIPTIONS": [ + "Erhalte zu Beginn deines Zuges #b", + " [E]." + ] + }, + "Slimebound:GluttonyPower": { + "NAME": "Völlerei", + "DESCRIPTIONS": [ + "Erhalte beim ersten #yKonsum im Zug einen einen #yWabbel.", + "Erhalte die ersten ", + " Male im Zug, an denen du #ykonsumierst [REMOVE_SPACE], einen #yWabbel [REMOVE_SPACE].", + " NL Dieser Effekt kann in diesem Zug noch #b", + " Mal aktiviert werden.", + " Mal aktiviert werden.", + " NL Dieser Effekt kann in diesem Zug nicht mehr aktiviert werden." + ] + }, + "Slimebound:GluttonyPowerUpgraded": { + "NAME": "Völlerei+", + "DESCRIPTIONS": [ + "Erhalte zu Beginn jedes Zuges #b", + " zufällige #yverbesserte #yWabbel Karte.", + " zufällige #yverbesserte #yWabbel Karten." + ] + }, + "Slimebound:PoisonThornsPower": { + "NAME": "Säureglibber", + "DESCRIPTIONS": [ + "Wende jedes Mal, wenn du #ykonsumierst [REMOVE_SPACE], #b", + " #yGift an." + ] + }, + "Slimebound:SlimeRitualPower": { + "NAME": "Ritual", + "DESCRIPTIONS": [ + "Erhalte am Ende deines Zuges #b", + " #yStärke [REMOVE_SPACE]." + ] + }, + "Slimebound:RecyclingPower": { + "NAME": "Recycling", + "DESCRIPTIONS": [ + "#yExhumiere am Anfang jedes Zuges #b", + " zufällige #yWabbel Karte.", + " zufällige #yWabbel Karten." + ] + }, + "Slimebound:RecyclingPowerUpgraded": { + "NAME": "Recycling+", + "DESCRIPTIONS": [ + "Heile immer wenn eine Karte die 0 kostet #yerschöpft #b", + " TP." + ] + }, + "Slimebound:AcidTonguePower": { + "NAME": "Säurezunge", + "DESCRIPTIONS": [ + "Wende immer, wenn du #yGlibber anwendest, #b", + " #yGift an." + ] + }, + "Slimebound:AcidTonguePowerUpgraded": { + "NAME": "Schleimzunge", + "DESCRIPTIONS": [ + "Immer wenn #yGlibber angewendet wird, erhöhe die angewendete Anzahl um #b", + " [REMOVE_SPACE]." + ] + }, + "Slimebound:SelfDamageSlimedPower": { + "NAME": "Loser Glibber", + "DESCRIPTIONS": [ + "Wende immer, wenn du TP verlierst, #b", + " #yGlibber auf einen zufälligen Gegner an." + ] + }, + "Slimebound:TackleBuffPower": { + "NAME": "Offensives Tackling", + "DESCRIPTIONS": [ + "#yTackle Karten fügen Gegnern #b", + " mehr Schaden zu." + ] + }, + "Slimebound:PolyBeamAgainPower": { + "NAME": "Abwechselnder Strahl", + "DESCRIPTIONS": [ + "Zu Beginn deines nächsten Zuges wird #yPoly-Strahl gespielt.", + "Zu Beginn deiner nächsten #b", + " Züge wird #yPoly-Strahl gespielt." + ] + }, + "Slimebound:PolyBeamAgainPowerUpgraded": { + "NAME": "Abwechselnder Strahl+", + "DESCRIPTIONS": [ + "Zu Beginn deines nächsten Zuges wird #yPoly-Strahl+ gespielt.", + "Zu Beginn deiner nächsten #b", + " Züge wird #yPoly-Strahl+ gespielt." + ] + }, + "Slimebound:FirmFortitudePower": { + "NAME": "Fühle unseren Schmerz", + "DESCRIPTIONS": [ + "Das nächste Mal, wenn du in deinem Zug Schaden erleiden oder TP verlieren würdest, nimmt stattdessen ein zufälliger Gegner den Schaden", + "Das nächsten #b", + " Male, an denen du in deinem Zug Schaden erleiden oder TP verlieren würdest, nimmt stattdessen ein zufälliger Gegner den Schaden.", + " NL Dieser Effekt kann in diesem Zug noch #b", + " Mal aktiviert werden.", + " Mal aktiviert werden.", + " NL Dieser Effekt kann in diesem Zug nicht mehr aktiviert werden." + ] + }, + "Slimebound:NextTurnGainStrengthPower": { + "NAME": "Aufladen", + "DESCRIPTIONS": [ + "Erhalte zu Beginn des nächsten Zuges #b", + " #yStärke." + ] + }, + "Slimebound:NextTurnGainSlimeCrush": { + "NAME": "Zerschmettern vorbereiten", + "DESCRIPTIONS": [ + "Nimm im nächsten Zug #gZERSCHMETTERN! auf die Hand.", + "Nimm im nächsten Zug #gZERSCHMETTERN!+ auf die Hand.", + "Nimm im nächsten Zug #b", + " #gZERSCHMETTERN! auf die Hand.", + " #gZERSCHMETTERN!+ auf die Hand." + ] + }, + "Slimebound:StunnedPower": { + "NAME": "Betäubt", + "DESCRIPTIONS": [ + "Überspringe deinen nächsten Zug.", + "Überspringe deine nächsten #b", + " Züge." + ] + }, + "Slimebound:NextTurnGainHyperBeam": { + "NAME": "Strahl vorbereiten", + "DESCRIPTIONS": [ + "Nimm im nächsten Zug einen #gHyperstrahl auf die Hand.", + "Nimm im nächsten Zug #b", + " #gHyperstrahlen auf die Hand." + ] + }, + "Slimebound:NextTurnGainDivider": { + "NAME": "Spalten vorbereiten", + "DESCRIPTIONS": [ + "Nimm im nächsten Zug #yTeilen auf die Hand.", + "Nimm im nächsten Zug #b", + " #yTeilen auf die Hand." + ] + }, + "Slimebound:StudyAutomatonPower": { + "NAME": "Automaton studieren", + "DESCRIPTIONS": [ + "Nimm zu Beginn deines nächsten Zuges eine zufällige Automaton Karte auf die Hand.", + "Nimm zu Beginn deiner nächsten ", + " Züge eine zufällige Automaton Karte auf die Hand." + ] + }, + "Slimebound:StudyAutomatonPowerUpgraded": { + "NAME": "Automaton studieren+", + "DESCRIPTIONS": [ + "Nimm zu Beginn deines nächsten Zuges eine zufällige verbesserte Automaton Karte auf die Hand.", + "Nimm zu Beginn deiner nächsten ", + " Züge eine zufällige verbesserte Automaton Karte auf die Hand." + ] + }, + "Slimebound:StudyAwakenedPower": { + "NAME": "Den Erweckten studieren", + "DESCRIPTIONS": [ + "Nimm zu Beginn deines nächsten Zuges eine zufällige Karte des Erweckten auf die Hand.", + "Nimm zu Beginn deiner nächsten ", + " Züge eine zufällige Karte des Erweckten auf die Hand." + ] + }, + "Slimebound:StudyAwakenedPowerUpgraded": { + "NAME": "Den Erweckten studieren+", + "DESCRIPTIONS": [ + "Nimm zu Beginn deines nächsten Zuges eine zufällige verbesserte Karte des Erweckten auf die Hand.", + "Nimm zu Beginn deiner nächsten ", + " Züge eine zufällige verbesserte Karte des Erweckten auf die Hand." + ] + }, + "Slimebound:AwakenedOnePower": { + "NAME": "Finsteres Ritual", + "DESCRIPTIONS": [ + "Erhalte wenn der Gegner nicht angreift ", + " Stärke." + ] + }, + "Slimebound:StudyChampPower": { + "NAME": "Champ studieren", + "DESCRIPTIONS": [ + "Nimm zu Beginn deines nächsten Zuges eine zufällige Champ Karte auf die Hand.", + "Nimm zu Beginn deiner nächsten ", + " Züge eine zufällige Champ Karte auf die Hand." + ] + }, + "Slimebound:StudyChampPowerUpgraded": { + "NAME": "Champ studieren+", + "DESCRIPTIONS": [ + "Nimm zu Beginn deines nächsten Zuges eine zufällige verbesserte Champ Karte auf die Hand.", + "Nimm zu Beginn deiner nächsten ", + " Züge eine zufällige verbesserte Champ Karte auf die Hand." + ] + }, + "Slimebound:StudyCollectorPower": { + "NAME": "Sammlerin studieren", + "DESCRIPTIONS": [ + "Nimm zu Beginn deines nächsten Zuges eine zufällige Sammlerin Karte auf die Hand.", + "Nimm zu Beginn deiner nächsten ", + " Züge eine zufällige Sammlerin Karte auf die Hand." + ] + }, + "Slimebound:StudyCollectorPowerUpgraded": { + "NAME": "Sammlerin studieren+", + "DESCRIPTIONS": [ + "Nimm zu Beginn deines nächsten Zuges eine zufällige verbesserte Sammlerin Karte auf die Hand.", + "Nimm zu Beginn deiner nächsten ", + " Züge eine zufällige verbesserte Sammlerin Karte auf die Hand." + ] + }, + "Slimebound:StudyGuardianPower": { + "NAME": "Wächter studieren", + "DESCRIPTIONS": [ + "Nimm zu Beginn deines nächsten Zuges eine zufällige Wächter Karte auf die Hand.", + "Nimm zu Beginn deiner nächsten ", + " Züge eine zufällige Wächter Karte auf die Hand." + ] + }, + "Slimebound:StudyGuardianPowerUpgraded": { + "NAME": "Wächter studieren+", + "DESCRIPTIONS": [ + "Nimm zu Beginn deines nächsten Zuges eine zufällige verbesserte Wächter Karte auf die Hand.", + "Nimm zu Beginn deiner nächsten ", + " Züge eine zufällige verbesserte Wächter Karte auf die Hand." + ] + }, + "Slimebound:StudyHexaghostPower": { + "NAME": "Hexageist studieren", + "DESCRIPTIONS": [ + "Nimm zu Beginn deines nächsten Zuges eine zufällige Hexageist Karte auf die Hand.", + "Nimm zu Beginn deiner nächsten ", + " Züge eine zufällige Hexageist Karte auf die Hand." + ] + }, + "Slimebound:StudyHexaghostPowerUpgraded": { + "NAME": "Hexageist studieren+", + "DESCRIPTIONS": [ + "Nimm zu Beginn deines nächsten Zuges eine zufällige verbesserte Hexageist Karte auf die Hand.", + "Nimm zu Beginn deiner nächsten ", + " Züge eine zufällige verbesserte Hexageist Karte auf die Hand." + ] + }, + "Slimebound:StudyShapesPower": { + "NAME": "Antike studieren", + "DESCRIPTIONS": [ + "Nimm zu Beginn deines nächsten Zuges eine zufällige Karte der Antiken auf die Hand.", + "Nimm zu Beginn deiner nächsten ", + " Züge eine zufällige Karte der Antiken auf die Hand." + ] + }, + "Slimebound:StudyShapesPowerUpgraded": { + "NAME": "Antike studieren+", + "DESCRIPTIONS": [ + "Nimm zu Beginn deines nächsten Zuges eine zufällige verbesserte Karte der Antiken auf die Hand.", + "Nimm zu Beginn deiner nächsten ", + " Züge eine zufällige verbesserte Karte der Antiken auf die Hand." + ] + }, + "Slimebound:StudyTimeEaterPower": { + "NAME": "Zeitfresser studieren", + "DESCRIPTIONS": [ + "Nimm zu Beginn deines nächsten Zuges eine zufällige Zeitfresser Karte auf die Hand.", + "Nimm zu Beginn deiner nächsten ", + " Züge eine zufällige Zeitfresser Karte auf die Hand." + ] + }, + "Slimebound:StudyTimeEaterPowerUpgraded": { + "NAME": "Zeitfresser studieren+", + "DESCRIPTIONS": [ + "Nimm zu Beginn deines nächsten Zuges eine zufällige verbesserte Zeitfresser Karte auf die Hand.", + "Nimm zu Beginn deiner nächsten ", + " Züge eine zufällige verbesserte Zeitfresser Karte auf die Hand." + ] + }, + "Slimebound:GreedRespawnPower": { + "NAME": "Gierschleim regenerieren", + "DESCRIPTIONS": [ + "Am Ende deines Zuges wird der #yGierschleim wiederbelebt." + ] + }, + "Slimebound:ScrapRespawnPower": { + "NAME": "Schrottschleim regenerieren", + "DESCRIPTIONS": [ + "Am Ende deines Zuges wird der #ySchrottschleim wiederbelebt." + ] + }, + "Slimebound:BuffSecondarySlimeEffectsPower": { + "NAME": "Bossaura", + "DESCRIPTIONS": [ + "Immer wenn du eine Karte mit slimeboundmod:Kommando spielst, #yKommandiere ein weiteres Mal.", + "Immer wenn du eine Karte mit slimeboundmod:Kommando spielst, #yKommandiere #b", + " weitere Male." + ] + }, + "Slimebound:TackleSelfDamagePreventPower": { + "NAME": "Rücksichtslos", + "DESCRIPTIONS": [ + " Erleide #b", + " mehr Schaden durch #yTackle Karten." + ] + }, + "Slimebound:GoopArmorPower": { + "NAME": "Glibberrüstung", + "DESCRIPTIONS": [ + "Erhalte immer, wenn du #ykonsumierst [REMOVE_SPACE], #b", + " #yBlock." + ] + }, + "Slimebound:CommandOnPlayPower": { + "NAME": "Schleimgeneral", + "DESCRIPTIONS": [ + "#yKommandiere das nächste Mal, wenn du eine Karte ausspielst.", + "#yKommandiere die nächsten ", + " Male, an denen du eine Karte ausspielst." + ] + }, + "Slimebound:GoopPerTurnPower": { + "NAME": "Schlammbad", + "DESCRIPTIONS": [ + "Erhält immer zu Beginn seines Zuges #b", + " #yGlibber [REMOVE_SPACE]." + ] + } +} diff --git a/src/main/resources/slimeboundResources/localization/deu/RelicStrings.json b/src/main/resources/slimeboundResources/localization/deu/RelicStrings.json new file mode 100644 index 0000000000..0707e0f421 --- /dev/null +++ b/src/main/resources/slimeboundResources/localization/deu/RelicStrings.json @@ -0,0 +1,112 @@ +{ + "Slimebound:AbsorbEndCombat": { + "NAME": "Herz aus Glibber", + "FLAVOR": "Ich fühle mich funky.", + "DESCRIPTIONS": [ + "Heile immer, wenn du #yslimeboundmod:konsumierst [REMOVE_SPACE], #b", + " TP. Heilt bis zu #b", + " TP pro Kampf." + ] + }, + "Slimebound:AbsorbEndCombatUpgraded": { + "NAME": "Dunkles Glibberherz", + "FLAVOR": "Das Geheimnis der Schleimwesen.", + "DESCRIPTIONS": [ + "Ersetzt ", + " [REMOVE_SPACE].[] NL Heile immer, wenn du #yslimeboundmod:konsumierst [REMOVE_SPACE], #b", + " TP. Heilt zu #b", + " TP pro Kampf." + ] + }, + "Slimebound:SlimedTailRelic": { + "NAME": "Schleimschwanz", + "FLAVOR": "Ein falscher, komplett in Schleim umhüllter Schwanz, um Gegner während des Kampfes hereinzulegen.", + "DESCRIPTIONS": [ + "Erhalte immer, wenn du einen Schleimuntertanen #yslimeboundmod:abspaltest [REMOVE_SPACE], #b", + " #yBlock [REMOVE_SPACE]." + ] + }, + "Slimebound:PotencyRelic": { + "NAME": "Stein von Nomakk", + "FLAVOR": "Wenn du ihn einem Schleim zeigst, beginnt er immer freudig zu wabbeln.", + "DESCRIPTIONS": [ + "Beginne jeden Kampf mit #b1 #yslimeboundmod:Potenz [REMOVE_SPACE]." + ] + }, + "Slimebound:DailySplitRelic": { + "NAME": "Slime the Spire", + "FLAVOR": "ALWAYS Split. Why is this a relic? Cause I can't figure out how to add the custom mod to the list of active mods UI!", + "DESCRIPTIONS": [ + "#bSpezial #bRun #bModifier NL Alle Gegner spalten sich bei #b50% TP." + ] + }, + "Slimebound:ScrapOozeRelic": { + "NAME": "Schrottschleim", + "FLAVOR": "Er trägt ein Relikt in sich - wie komme ich bloß da ran?", + "DESCRIPTIONS": [ + "#yslimeboundmod:Spalte zu Beginn des Kampfes einen #ySchrottschleim #yab - er kann wiederbelebt werden. Füttere ihn am Lagerfeuer um seinen Schaden zu ändern: #y+2 für #ySeltene [REMOVE_SPACE], #g+1 für #gUngewöhnliche [REMOVE_SPACE], #b-1 für #bGewöhnliche [REMOVE_SPACE], #r-2 für #rFlüche [REMOVE_SPACE].", + "Entferne eine Karte aus deinem Deck und ändere den Schaden des Schrottschleims.", + "Keine Karte für den Schrottschleim übrig.", + "Verschrotten" + ] + }, + "Slimebound:GreedOozeRelic": { + "NAME": "Gierschleim", + "FLAVOR": "Ein besonderer Schleim, der sich von Gold und Seelen ernährt.", + "DESCRIPTIONS": [ + "#yslimeboundmod:Spalte zu Beginn des Kampfes einen #yGierschleim #yab - er kann wiederbelebt werden. Der #yGierschleim frisst am Lagerfeuer #b50 #yGold und erhöht dadurch seinen Schaden um #b1." + ] + }, + "Slimebound:PreparedRelic": { + "NAME": "Schleimsuppe", + "FLAVOR": "Sie ist sehr gesund, aber sie schmeckt scheuslich.", + "DESCRIPTIONS": [ + "Immer wenn du an ein Lagerfeuer kommst, beginne den nächsten Kampf mit einer #yVorbereiten Karte, die diesen Zug #b0 kostet." + ] + }, + "Slimebound:AggressiveSlimeRelic": { + "NAME": "Schleimiger Bewohner", + "FLAVOR": "Es ist mir heimgefolgt. Darf ich es behalten?", + "DESCRIPTIONS": [ + "#yslimeboundmod:Spalte zu Beginn des Kampfes einen #yslimeboundmod:Kampfschleim #yab [REMOVE_SPACE]." + ] + }, + "Slimebound:SlimedSkullRelic": { + "NAME": "Schleimiger Schädel", + "FLAVOR": "Ein Snecko-Schädel in miserablem Zustand. Schmutzig und schleimig haftet der Dreck daran wie Klebstoff.", + "DESCRIPTIONS": [ + "Immer wenn du #yslimeboundmod:Glibber anwendest, wende #b", + " #yslimeboundmod:Glibber mehr an." + ] + }, + "Slimebound:MaxSlimesRelic": { + "NAME": "Jeremias' Banner", + "FLAVOR": "Du und welche Armee?", + "DESCRIPTIONS": [ + "Beginne jeden Kampf mit #b1 Schleim-Slot mehr und #yslimeboundmod:spalte einen zufälligen Schleim #yab [REMOVE_SPACE]." + ] + }, + "Slimebound:SelfDamagePreventRelic": { + "NAME": "Schutzausrüstung", + "FLAVOR": "Angriff ist die beste Verteidigung.", + "DESCRIPTIONS": [ + "Verringere den Schaden, den du durch #yslimeboundmod:Tackles erleidest, um #b", + " [REMOVE_SPACE]." + ] + }, + "Slimebound:TarBlob": { + "NAME": "Teerblob", + "FLAVOR": "Eine besonders schmutzige Schleimsorte.", + "DESCRIPTIONS": [ + "Verliere zu Beginn deines Kampfes #b1 Schleim-Slot. NL Erhalte in deinem Zug [E]." + ] + }, + "Slimebound:StickyStick": { + "NAME": "Schleimwürfel", + "FLAVOR": "Hey, er klebt an deinem Körper.", + "DESCRIPTIONS": [ + "Erhalte immer, wenn du einen #yStatus oder #rFluch ziehst, #b", + " #yBlock [REMOVE_SPACE]." + ] + } +} diff --git a/src/main/resources/slimeboundResources/localization/deu/RunModStrings.json b/src/main/resources/slimeboundResources/localization/deu/RunModStrings.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/src/main/resources/slimeboundResources/localization/deu/RunModStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/slimeboundResources/localization/deu/UIStrings.json b/src/main/resources/slimeboundResources/localization/deu/UIStrings.json new file mode 100644 index 0000000000..d4abf4ec95 --- /dev/null +++ b/src/main/resources/slimeboundResources/localization/deu/UIStrings.json @@ -0,0 +1,27 @@ +{ + "slimeboundConfigMenuText": { + "TEXT": [ + "Aktiviere Schleimboss Relikte für andere Charaktere.", + "Aktiviere Schleimboss Tränke für andere Charaktere.", + "Aktiviere Schleimboss Ereignisse für andere Charaktere.", + "Schalte alles frei (nicht empfohlen)" + ] + }, + "slimeboundmod:CommandMod": { + "TEXT": [ + " NL slimeboundmod:Kommando." + ] + }, + "slimeboundmod:lickDescriptor": { + "TEXT": [ + "Wabbel", + "slimeboundmod:Wabbel. NL " + ] + }, + "slimeboundmod:tackleDescriptor": { + "TEXT": [ + "Tackle", + "slimeboundmod:Tackle. NL " + ] + } +} \ No newline at end of file diff --git a/src/main/resources/slimeboundResources/localization/eng/CardStrings.json b/src/main/resources/slimeboundResources/localization/eng/CardStrings.json index ca265a83c0..fa614bf28a 100644 --- a/src/main/resources/slimeboundResources/localization/eng/CardStrings.json +++ b/src/main/resources/slimeboundResources/localization/eng/CardStrings.json @@ -149,7 +149,7 @@ "UPGRADE_DESCRIPTION": "Apply !M! Weak and !slime! slimeboundmod:Goop. NL Draw a card. NL Exhaust - slimeboundmod:Buried." }, "Slimebound:LivingWall": { - "NAME": "Living Wall", + "NAME": "Form of Wall", "DESCRIPTION": "Gain !B! Block. NL Apply !slime! slimeboundmod:Goop to attackers this turn." }, "Slimebound:MassFeed": { diff --git a/src/main/resources/slimeboundResources/localization/eng/EventStrings.json b/src/main/resources/slimeboundResources/localization/eng/EventStrings.json index b8d08090f8..df5d26a7e8 100644 --- a/src/main/resources/slimeboundResources/localization/eng/EventStrings.json +++ b/src/main/resources/slimeboundResources/localization/eng/EventStrings.json @@ -15,7 +15,7 @@ "NAME": "World of Goop", "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 [REMOVE_SPACE], leaving the creature with a sad look upon its amorphous face.", + "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 #ysouls if it will aid you in your quest. NL You and your newfound #gfriend exit the slime bath together." ], "OPTIONS": [ diff --git a/src/main/resources/slimeboundResources/localization/eng/KeywordStrings.json b/src/main/resources/slimeboundResources/localization/eng/KeywordStrings.json index a88713c887..5760c0ee51 100644 --- a/src/main/resources/slimeboundResources/localization/eng/KeywordStrings.json +++ b/src/main/resources/slimeboundResources/localization/eng/KeywordStrings.json @@ -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 #b1 #yStrength [REMOVE_SPACE]." + "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." }, { "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": [ diff --git a/src/main/resources/slimeboundResources/localization/eng/RelicStrings.json b/src/main/resources/slimeboundResources/localization/eng/RelicStrings.json index 97c88b98c0..d920ea85ae 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 [REMOVE_SPACE], heal #b2 HP, up to #b8 each combat." + "Whenever you #yslimeboundmod:Consume, heal #b", + " HP, up to #b", + " each combat." ] }, "Slimebound:AbsorbEndCombatUpgraded": { @@ -11,7 +13,9 @@ "FLAVOR": "The Secret of the Ooze.", "DESCRIPTIONS": [ "Replaces ", - " [REMOVE_SPACE].[] NL Whenever you #yslimeboundmod:Consume [REMOVE_SPACE], heal #b3 HP, up to #b15 each combat." + " [REMOVE_SPACE].[] NL Whenever you #yslimeboundmod:Consume, heal #b", + " HP, up to #b", + " each combat." ] }, "Slimebound:SlimedTailRelic": { @@ -71,7 +75,7 @@ "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", + "Whenever you apply #yslimeboundmod:Goop [REMOVE_SPACE], apply an additional #b", " #yslimeboundmod:Goop [REMOVE_SPACE]." ] }, @@ -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 [REMOVE_SPACE]." + "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": [ - "The first #b2 times you draw a #yStatus or #rCurse each turn, draw #b1 card. If the card was a #yVoid [REMOVE_SPACE], gain [E] [REMOVE_SPACE]." + "Whenever you draw a #yStatus or #rCurse [REMOVE_SPACE], gain #b", + " #yBlock [REMOVE_SPACE]." ] } } diff --git a/src/main/resources/slimeboundResources/localization/fra/CardStrings.json b/src/main/resources/slimeboundResources/localization/fra/CardStrings.json index d4e65c89f3..9dd72d4910 100644 --- a/src/main/resources/slimeboundResources/localization/fra/CardStrings.json +++ b/src/main/resources/slimeboundResources/localization/fra/CardStrings.json @@ -9,7 +9,7 @@ }, "Slimebound:CheckThePlaybook": { "NAME": "Manuel stratégique", - "DESCRIPTION": "Ajoutez 4 \"Tacles\" à votre main. Elles coûtent 1 [E] de moins durant ce combat. NL Épuisement." + "DESCRIPTION": "Ajoutez 3 \"Tacles\" à votre main. Elles coûtent 1 [E] de moins durant ce combat. NL Épuisement." }, "Slimebound:Chomp": { "NAME": "Mastication", @@ -18,7 +18,7 @@ }, "Slimebound:ComboTackle": { "NAME": "Tacle perçant", - "DESCRIPTION": "Infligez !D! dégâts. Subissez !SlimeboundSelfharm! dégâts. NL Piochez !M! cartes." + "DESCRIPTION": "Infligez !D! dégâts. Prenez !SlimeboundSelfharm! dégâts. NL Piochez !M! cartes." }, "Slimebound:CorrosiveSpit": { "NAME": "Crachat corrosif", @@ -35,12 +35,12 @@ }, "Slimebound:DisruptingSlam": { "NAME": "À table !", - "DESCRIPTION": "Infligez !D! dégâts à TOUS les ennemis. NL expansioncontent:Exhumez !M! cartes *Léchouille aléatoires." + "DESCRIPTION": "Infligez !D! dégâts à TOUS les ennemis. NL expansioncontent:Exhumez !M! cartes \"Léchouille\" aléatoires." }, "Slimebound:Dissolve": { "NAME": "Casse-croûte", - "DESCRIPTION": "Piochez !M! carte, puis Épuisez une carte. Ajoutez à votre main un nombre de *Léchouille égal au coût de la carte Épuisée. NL Épuisement.", - "UPGRADE_DESCRIPTION": "Piochez !M! cartes, puis Épuisez une carte. Ajoutez à votre main un nombre de *Léchouille égal au coût de la carte Épuisée. NL Épuisement." + "DESCRIPTION": "Piochez !M! carte. NL Épuisez une carte. Ajoutez à votre main un nombre de *Léchouille égal au coût de la carte Épuisée. NL Épuisement.", + "UPGRADE_DESCRIPTION": "Piochez !M! cartes. NL Épuisez une carte. Ajoutez à votre main un nombre de *Léchouille égal au coût de la carte Épuisée. NL Épuisement." }, "Slimebound:DivideAndConquer": { "NAME": "Diviser pour régner", @@ -64,24 +64,24 @@ }, "Slimebound:FinishingTackle": { "NAME": "Tacle d'ouverture", - "DESCRIPTION": "Infligez !D! dégâts. Subissez !SlimeboundSelfharm! dégâts. slimeboundmod:Consumez - Appliquez !M! de Vulnerabilité." + "DESCRIPTION": "Infligez !D! dégâts. Prenez !SlimeboundSelfharm! dégâts. slimeboundmod:Consumez - Appliquez !M! de Vulnerabilité." }, "Slimebound:FirmFortitude": { "NAME": "Liquidation", - "DESCRIPTION": "Injouable si vous avez de la Force négative. NL Perdez 2 de Force. NL Gagnez !M! de slimeboundmod:Potentiel." + "DESCRIPTION": "Perdez 2 de Force. NL Gagnez !M! de slimeboundmod:Potentiel." }, "Slimebound:FlameTackle": { "NAME": "Tacle enflammé", - "DESCRIPTION": "Infligez !D! dégâts. Subissez !SlimeboundSelfharm! dégâts. NL Vos \"Tacles\" infligent !M! dégâts supplémentaires ce combat." + "DESCRIPTION": "Infligez !D! dégâts. Prenez !SlimeboundSelfharm! dégâts. NL Vos \"Tacles\" infligent !M! dégâts supplémentaires ce combat." }, "Slimebound:FormOfPuddle": { "NAME": "Forme de flaque", - "DESCRIPTION": "Gagnez 1 d'Intangible. NL Épuisement." + "DESCRIPTION": "Éthérée. NL Gagnez 1 d'Intangible. NL Épuisement." }, "Slimebound:ForwardTackle": { "NAME": "Tacle frontal", - "DESCRIPTION": "Infligez !D! dégâts. Subissez !SlimeboundSelfharm! dégâts. NL slimeboundmod:Commandez deux fois.", - "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. Subissez !SlimeboundSelfharm! dégâts. NL slimeboundmod:Commandez trois fois." + "DESCRIPTION": "Infligez !D! dégâts. Prenez !SlimeboundSelfharm! dégâts. NL slimeboundmod:Commandez deux fois.", + "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. Prenez !SlimeboundSelfharm! dégâts. NL slimeboundmod:Commandez trois fois." }, "Slimebound:Gluttony": { "NAME": "Gloutonnerie", @@ -94,8 +94,8 @@ }, "Slimebound:GoopTackle": { "NAME": "Tacle combo", - "DESCRIPTION": "Infligez !D! dégâts. Subissez !SlimeboundSelfharm! dégâts. NL Ajoutez une carte \"Tacle\" aléatoire à votre main. Elle coûte 0 ce tour-ci.", - "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. Subissez !SlimeboundSelfharm! dégâts. NL Ajoutez une carte \"Tacle\" aléatoire Améliorée à votre main. Elle coûte 0 ce tour-ci." + "DESCRIPTION": "Infligez !D! dégâts. Prenez !SlimeboundSelfharm! dégâts. NL Ajoutez une carte \"Tacle\" aléatoire à votre main. Elle coûte 0 ce tour-ci.", + "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. Prenez !SlimeboundSelfharm! dégâts. NL Ajoutez une carte \"Tacle\" aléatoire Améliorée à votre main. Elle coûte 0 ce tour-ci." }, "Slimebound:Grow": { "NAME": "Croissance", @@ -103,7 +103,7 @@ }, "Slimebound:GrowthPunch": { "NAME": "Poing croissant", - "DESCRIPTION": "Infligez !D! dégâts. NL Gagnez !B! d'Armure. NL slimeboundmod:Consumez - Augmentez les effets de cette carte de !M! ce combat." + "DESCRIPTION": "Gagnez !B! d'Armure. NL Infligez !D! dégâts. NL slimeboundmod:Consumez - Augmentez les effets de cette carte de !M! ce combat." }, "Slimebound:HauntingLick": { "NAME": "Léchouille hantée", @@ -112,8 +112,8 @@ }, "Slimebound:HungryTackle": { "NAME": "Tacle affamé", - "DESCRIPTION": "Infligez !D! dégâts. Subissez !SlimeboundSelfharm! dégâts. NL expansioncontent:Exhumez une carte \"Léchouille\" aléatoire.", - "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. Subissez !SlimeboundSelfharm! dégâts. NL expansioncontent:Exhumez 2 cartes \"Léchouille\" aléatoires." + "DESCRIPTION": "Infligez !D! dégâts. Prenez !SlimeboundSelfharm! dégâts. NL expansioncontent:Exhumez une carte \"Léchouille\" aléatoire.", + "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. Prenez !SlimeboundSelfharm! dégâts. NL expansioncontent:Exhumez 2 cartes \"Léchouille\" aléatoires." }, "Slimebound:ItLooksTasty": { "NAME": "Ça a l'air bon", @@ -178,8 +178,8 @@ }, "Slimebound:OneTwoCombo": { "NAME": "Combo Un-Deux", - "DESCRIPTION": "Infligez !D! dégâts. NL Retourne de la défausse à votre main quand vous vous slimeboundmod:Divisez.", - "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. NL slimeboundmod:Commandez. NL Retourne de la défausse à votre main quand vous vous slimeboundmod:Divisez." + "DESCRIPTION": "Infligez !D! dégâts. NL Quand vous vous slimeboundmod:Divisez, reprenez cette carte de la défausse.", + "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. NL slimeboundmod:Commandez deux fois. NL Quand vous vous slimeboundmod:Divisez, reprenez cette carte de la défausse." }, "Slimebound:OozeBath": { "NAME": "Bain de boue", @@ -188,8 +188,8 @@ }, "Slimebound:Overexert": { "NAME": "Surmenage", - "DESCRIPTION": "Gagnez 4 de slimeboundmod:Potentiel. NL Dans !M! tours, slimeboundmod:Absorbez tous vos Slimes.", - "UPGRADE_DESCRIPTION": "Gagnez 4 de slimeboundmod:Potentiel. NL slimeboundmod:Commandez deux fois. NL Dans !M! tours, slimeboundmod:Absorbez tous vos Slimes." + "DESCRIPTION": "Gagnez 5 de slimeboundmod:Potentiel. NL Dans !M! tours, slimeboundmod:Absorbez tous vos Slimes.", + "UPGRADE_DESCRIPTION": "Gagnez 5 de slimeboundmod:Potentiel. NL slimeboundmod:Commandez deux fois. NL Dans !M! tours, slimeboundmod:Absorbez tous vos Slimes." }, "Slimebound:Prepare": { "NAME": "Préparation", @@ -212,7 +212,7 @@ "Slimebound:ProtectTheBoss": { "NAME": "Protéger le Boss", "DESCRIPTION": "Empêchez la prochaine fois que vous vous subirez des dégâts ennemis, slimeboundmod:Absorbant votre Slime en tête à la place.", - "UPGRADE_DESCRIPTION": "Empêchez les 2 prochaine fois que vous vous subirez des dégâts ennemis, slimeboundmod:Absorbant votre Slime en tête à la place." + "UPGRADE_DESCRIPTION": "Empêchez les 2 prochaines fois que vous vous subirez des dégâts ennemis, slimeboundmod:Absorbant votre Slime en tête à la place." }, "Slimebound:RainOfGoop": { "NAME": "Pluie visqueuse", @@ -243,8 +243,8 @@ }, "Slimebound:Replication": { "NAME": "Réplication", - "DESCRIPTION": "Choisissez une carte de votre main. NL Ajoutez une copie de celle-ci sur le haut de votre pioche. NL Épuisement.", - "UPGRADE_DESCRIPTION": "Choisissez une carte de votre main. NL Ajoutez une copie de celle-ci à votre main. NL Épuisement.", + "DESCRIPTION": "Choisissez une carte. NL Ajoutez une copie de celle-ci sur le haut de votre pioche. NL Épuisement.", + "UPGRADE_DESCRIPTION": "Choisissez une carte. NL Ajoutez une copie de celle-ci à votre main. NL Épuisement.", "EXTENDED_DESCRIPTION": [ " de laquelle ajouter une copie à votre main.", " de laquelle ajouter une copie au dessus de la pioche." @@ -257,7 +257,7 @@ }, "Slimebound:RollThrough": { "NAME": "Rouler au travers", - "DESCRIPTION": "Infligez !D! dégâts à TOUS les ennemis. NL Vous ne subissez pas de dégâts des !M! prochains \"Tacle\"." + "DESCRIPTION": "Infligez !D! dégâts à TOUS les ennemis. NL Vous ne subissez pas de dégâts des !M! prochains \"Tacles\"." }, "Slimebound:SamplingLick": { "NAME": "Léchouille baveuse", @@ -267,7 +267,7 @@ "Slimebound:Schlurp": { "NAME": "Sslurp", "DESCRIPTION": "Appliquez !slime! de slimeboundmod:Goop. NL Ajoutez !M! *Léchouille à votre main.", - "UPGRADE_DESCRIPTION": "Gagnez !B! d'Armure. NL Ajoutez !M! *Léchouilles à votre main." + "UPGRADE_DESCRIPTION": "Appliquez !slime! de slimeboundmod:Goop. NL Ajoutez !M! *Léchouilles à votre main." }, "Slimebound:SelfFormingGoo": { "NAME": "Reformation", @@ -278,7 +278,7 @@ "DESCRIPTION": "Gagnez !B! d'Armure et 1 bronze:Flou pour chaque Slime. NL slimeboundmod:Absorbez tous les Slimes. NL Épuisement." }, "Slimebound:SlimeBarrage": { - "NAME": "Empilez-les!", + "NAME": "Mêlée !", "DESCRIPTION": "Infligez !D! dégâts. slimeboundmod:Commandez TOUS les slimes.", "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. slimeboundmod:Commandez TOUS les slimes deux fois." }, @@ -313,31 +313,31 @@ }, "Slimebound:Split": { "NAME": "Invocation", - "DESCRIPTION": "slimeboundmod:Divisez-vous en un Slime aléatoire." + "DESCRIPTION": "slimeboundmod:Divisez-vous en un slimeboundmod:Slime_guerrier. NL slimeboundmod:Commandez." }, "Slimebound:SplitAcid": { - "NAME": "Invocation: Guerrier", - "DESCRIPTION": "slimeboundmod:Divisez-vous en slimeboundmod:Slime_guerrier. NL slimeboundmod:Commandez !M! fois. NL Épuisement.", - "UPGRADE_DESCRIPTION": "slimeboundmod:Divisez-vous en slimeboundmod:Slime_guerrier. NL slimeboundmod:Commandez trois fois. NL Épuisement." + "NAME": "Invocation : Guerrier", + "DESCRIPTION": "slimeboundmod:Divisez-vous en slimeboundmod:Slime_guerrier. NL slimeboundmod:Commandez !M! fois.", + "UPGRADE_DESCRIPTION": "slimeboundmod:Divisez-vous en slimeboundmod:Slime_guerrier. NL slimeboundmod:Commandez trois fois." }, "Slimebound:SplitBruiser": { - "NAME": "Invocation: Cogneur", - "DESCRIPTION": "slimeboundmod:Divisez-vous en slimeboundmod:Slime_cogneur. NL slimeboundmod:Commandez !M! fois. NL Épuisement.", - "UPGRADE_DESCRIPTION": "slimeboundmod:Divisez-vous en slimeboundmod:Slime_cogneur. NL slimeboundmod:Commandez trois fois. NL Épuisement." + "NAME": "Invocation : Cogneur", + "DESCRIPTION": "slimeboundmod:Divisez-vous en slimeboundmod:Slime_cogneur. NL slimeboundmod:Commandez !M! fois.", + "UPGRADE_DESCRIPTION": "slimeboundmod:Divisez-vous en slimeboundmod:Slime_cogneur. NL slimeboundmod:Commandez trois fois." }, "Slimebound:SplitGreed": { "NAME": "Ranimer le cupide", "DESCRIPTION": "Retenue. NL Invoquez le Slime cupide. NL Épuisement." }, "Slimebound:SplitLeeching": { - "NAME": "Invocation: Sangsue", - "DESCRIPTION": "slimeboundmod:Divisez-vous en slimeboundmod:Slime_sangsue. NL slimeboundmod:Commandez !M! fois. NL Épuisement.", - "UPGRADE_DESCRIPTION": "slimeboundmod:Divisez-vous en slimeboundmod:Slime_sangsue. NL slimeboundmod:Commandez trois fois. NL Épuisement." + "NAME": "Invocation : Sangsue", + "DESCRIPTION": "slimeboundmod:Divisez-vous en slimeboundmod:Slime_sangsue. NL slimeboundmod:Commandez !M! fois.", + "UPGRADE_DESCRIPTION": "slimeboundmod:Divisez-vous en slimeboundmod:Slime_sangsue. NL slimeboundmod:Commandez trois fois." }, "Slimebound:SplitMire": { - "NAME": "Invocation: Bourbier", - "DESCRIPTION": "slimeboundmod:Divisez-vous en slimeboundmod:Slime_bourbier. NL slimeboundmod:Commandez !M! fois. NL Épuisement.", - "UPGRADE_DESCRIPTION": "slimeboundmod:Divisez-vous en slimeboundmod:Slime_bourbier. NL slimeboundmod:Commandez trois fois. NL Épuisement." + "NAME": "Invocation : Bourbier", + "DESCRIPTION": "slimeboundmod:Divisez-vous en slimeboundmod:Slime_bourbier. NL slimeboundmod:Commandez !M! fois.", + "UPGRADE_DESCRIPTION": "slimeboundmod:Divisez-vous en slimeboundmod:Slime_bourbier. NL slimeboundmod:Commandez trois fois." }, "Slimebound:SplitScrap": { "NAME": "Ranimer le ferrailleux", @@ -354,7 +354,7 @@ }, "Slimebound:Tackle": { "NAME": "Tacle", - "DESCRIPTION": "Infligez !D! dégâts. Subissez !SlimeboundSelfharm! dégâts." + "DESCRIPTION": "Infligez !D! dégâts. Prenez !SlimeboundSelfharm! dégâts." }, "Slimebound:TagTeam": { "NAME": "Tandem", @@ -363,8 +363,8 @@ }, "Slimebound:Teamwork": { "NAME": "Travail d'équipe", - "DESCRIPTION": "slimeboundmod:Commandez X fois. NL Obtenez !B! d'Armure X fois.", - "UPGRADE_DESCRIPTION": "slimeboundmod:Commandez X+1 fois. NL Obtenez !B! d'Armure X+1 fois." + "DESCRIPTION": "slimeboundmod:Commandez X fois. NL Gagnez !B! d'Armure X fois.", + "UPGRADE_DESCRIPTION": "slimeboundmod:Commandez X+1 fois. NL Gagnez !B! d'Armure X+1 fois." }, "Slimebound:TongueLash": { "NAME": "Langue lacérante", @@ -372,8 +372,8 @@ }, "Slimebound:ViciousTackle": { "NAME": "Tacle vicieux", - "DESCRIPTION": "Infligez !D! dégâts. Subissez !SlimeboundSelfharm! dégâts. Cette carte gagne deux fois les dégâts bonus du slimeboundmod:Goop.", - "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. Subissez !SlimeboundSelfharm! dégâts. Cette gagne carte deux fois les dégâts ET le soin bonus du slimeboundmod:Goop." + "DESCRIPTION": "Infligez !D! dégâts. Prenez !SlimeboundSelfharm! dégâts. Cette carte gagne deux fois les dégâts bonus du slimeboundmod:Goop.", + "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. Prenez !SlimeboundSelfharm! dégâts. Cette gagne carte deux fois les dégâts ET le soin bonus du slimeboundmod:Goop." }, "Slimebound:WasteNot": { "NAME": "Pas de gaspillage", diff --git a/src/main/resources/slimeboundResources/localization/fra/EventStrings.json b/src/main/resources/slimeboundResources/localization/fra/EventStrings.json index ffd5fa3286..2e72b8619f 100644 --- a/src/main/resources/slimeboundResources/localization/fra/EventStrings.json +++ b/src/main/resources/slimeboundResources/localization/fra/EventStrings.json @@ -15,7 +15,7 @@ "NAME": "Monde visqueux", "DESCRIPTIONS": [ "Vous tombez dans une flaque. NL @ELLE@ @EST@ @FAITE@ @DE@ #g@SLIME!!@ NL Calmement, vous vous baignez alors que vous vous liez à la matière visqueuse, profitant d'un moment de répit. NL NL En sortant, vous remarquez dans la flaque des #yâmes perdues provenant d'aventuriers malchanceux, ainsi qu'une curieuse créature qui semble être attirée par ce métal que l'on appelle or.", - "Vous sortez du bain de slime revigorant, repêchant les #yâmes et laissant la créature avec un regard triste sur son visage amorphe..", + "Vous sortez du bain de slime revigorant, repêchant les #yâmes et laissant la créature avec un regard triste sur son visage amorphe.", "Vous réussissez à négocier un accord avec la créature pour lui fournir plus de métal brillant si elle vous aide dans votre quête. NL Vous et votre nouvel #yami sortez ensemble du bain de slime." ], "OPTIONS": [ diff --git a/src/main/resources/slimeboundResources/localization/fra/KeywordStrings.json b/src/main/resources/slimeboundResources/localization/fra/KeywordStrings.json index c15d8cb367..a3aaeaf315 100644 --- a/src/main/resources/slimeboundResources/localization/fra/KeywordStrings.json +++ b/src/main/resources/slimeboundResources/localization/fra/KeywordStrings.json @@ -9,7 +9,7 @@ "absorbed" ], "PROPER_NAME": "Absorber", - "DESCRIPTION": "Recombinez-vous avec votre #ySlime en tête, vous donnant 1 de #yForce." + "DESCRIPTION": "Recombinez-vous avec votre #ySlime en tête, vous donnant 1 de #yForce [REMOVE_SPACE]." }, { "NAMES": [ @@ -19,7 +19,7 @@ "splitting" ], "PROPER_NAME": "Division", - "DESCRIPTION": "Faites apparaître un sbire Slime, qui attaque au début de chaque tour. NL NL Si vous n'avez pas d'emplacement de Slime, votre Slime le plus ancien est automatiquement #yAbsorbé pour faire de la place, vous donnant 1 de #yForce." + "DESCRIPTION": "Faites apparaître un sbire Slime, qui attaque au début de chaque tour. NL NL Si vous n'avez pas d'emplacement de Slime libre, votre Slime le plus ancien est automatiquement #yAbsorbé pour faire de la place, vous donnant 1 de #yForce." }, { "NAMES": [ @@ -29,7 +29,7 @@ "gooped" ], "PROPER_NAME": "Goop", - "DESCRIPTION": "La prochaine attaque inflige #b1 dégât de plus par #yGoop, retirant alors tout le #yGoop et déclenchant les effets de #yConsumation." + "DESCRIPTION": "La prochaine attaque inflige #b1 dégât de plus par #yGoop [REMOVE_SPACE], retirant alors tout le #yGoop et déclenchant les effets de #yConsumation." }, { "NAMES": [ @@ -74,7 +74,7 @@ "bruiser" ], "PROPER_NAME": "Slime cogneur", - "DESCRIPTION": "Inflige #b5 dégâts chaque tour." + "DESCRIPTION": "Inflige #b3 dégâts deux fois chaque tour." }, { "NAMES": [ @@ -160,15 +160,7 @@ "ghostflame_slime" ], "PROPER_NAME": "Slime follet", - "DESCRIPTION": "Inflige #b3 dégâts et applique #b5 de #yBrûlure chaque tour." - }, - { - "NAMES": [ - "morphez", - "morph" - ], - "PROPER_NAME": "Morpher", - "DESCRIPTION": "Remplacez cette carte avec une carte aléatoire de votre classe, peu importe son type. Elle coûte #b1 énergie de moins." + "DESCRIPTION": "Inflige #b3 dégâts et applique #b6 de #yBrûlure chaque tour." }, { "NAMES": [ @@ -176,7 +168,7 @@ "slow" ], "PROPER_NAME": "Ralenti", - "DESCRIPTION": "Une créature ralentie reçoit #b10% de dégâts en plus par carte jouée dans un tour." + "DESCRIPTION": "Reçoit #b10% de dégâts en plus par carte jouée dans un tour." }, { "NAMES": [ @@ -254,7 +246,7 @@ "consume" ], "PROPER_NAME": "Consumer", - "DESCRIPTION": "Effet bonus qui s'active quand une #yAttaque est utilisée sur un ennemi qui a du #yGoop." + "DESCRIPTION": "Effet bonus qui s'active quand une #yAttaque est utilisée sur un ennemi qui a du #yGoop [REMOVE_SPACE]." }, { "NAMES": [ diff --git a/src/main/resources/slimeboundResources/localization/fra/OrbStrings.json b/src/main/resources/slimeboundResources/localization/fra/OrbStrings.json index 06ec1a9af3..1c935aec2c 100644 --- a/src/main/resources/slimeboundResources/localization/fra/OrbStrings.json +++ b/src/main/resources/slimeboundResources/localization/fra/OrbStrings.json @@ -2,7 +2,7 @@ "Slimebound:EmptySlimeSlot": { "NAME": "Emplacement de slime", "DESCRIPTION": [ - "Des sbires slimes peuvent être placés dans ces emplacements en vous #yDivisant." + "Des sbires slimes peuvent être placés dans ces emplacements en vous #yDivisant [REMOVE_SPACE]." ] }, "Slimebound:BronzeSlime": { @@ -17,35 +17,35 @@ "NAME": "Slime cogneur", "DESCRIPTION": [ "Inflige #b", - " dégâts au début de votre tour." + " dégâts deux fois au début de votre tour." ] }, "Slimebound:ScrapOozeSlime": { "NAME": "Slime ferrailleux", "DESCRIPTION": [ "Inflige #b", - " dégâts au début de votre tour. NL Ranimable si #yAbsorbé." + " dégâts au début de votre tour. NL Peut être ranimé si #yAbsorbé [REMOVE_SPACE]." ] }, "Slimebound:GreedOozeSlime": { "NAME": "Slime cupide", "DESCRIPTION": [ "Inflige #b", - " dégâts au début de votre tour. NL Ranimable si #yAbsorbé." + " dégâts au début de votre tour. NL Peut être ranimé si #yAbsorbé [REMOVE_SPACE]." ] }, "Slimebound:TorchHeadSlime": { "NAME": "Slime torche", "DESCRIPTION": [ "Inflige #b", - " dégâts au début de votre tour. Sa puissance est affectée par votre #yForce." + " dégâts au début de votre tour. Sa puissance est affectée par votre #yForce [REMOVE_SPACE]." ] }, "Slimebound:CultistSlime": { "NAME": "Slime cultiste", "DESCRIPTION": [ "Inflige #b", - " dégâts au début de votre tour. Après avoir attaqué, augmente ses dégâts de #b1." + " dégâts au début de votre tour. Après avoir attaqué, augmente ses dégâts de #b1 [REMOVE_SPACE]." ] }, "Slimebound:ShieldSlime": { @@ -53,7 +53,7 @@ "DESCRIPTION": [ "Inflige #b", " dégâts au début de votre tour et vous confère #b", - " #yd'Armure." + " #yd'Armure [REMOVE_SPACE]." ] }, "Slimebound:PoisonSlime": { @@ -100,7 +100,7 @@ "DESCRIPTION": [ "Inflige #b", " dégâts au début de votre tour et vous confère #b", - " #yd'Épines temporaires." + " #yd'Épines temporaires [REMOVE_SPACE]." ] }, "Slimebound:DrawingSlime": { @@ -108,14 +108,14 @@ "DESCRIPTION": [ "Inflige #b", " dégâts au début de votre tour et vous fait piocher #b", - " carte(s)." + " carte. La pioche ne varie pas avec le Potentiel." ] }, "Slimebound:DarklingSlime": { "NAME": "Slime ténébreux", "DESCRIPTION": [ "Inflige #b", - " dégâts au début de votre tour. Quand vous Commandez, tous les Ténébreux attaquent (peu importe leur position)." + " dégâts au début de votre tour. Lorsque vous Commandez, tous les Ténébreux attaquent (peu importe leur position)." ] } } diff --git a/src/main/resources/slimeboundResources/localization/fra/PotionStrings.json b/src/main/resources/slimeboundResources/localization/fra/PotionStrings.json index 28cc4ad8af..d3f9530a94 100644 --- a/src/main/resources/slimeboundResources/localization/fra/PotionStrings.json +++ b/src/main/resources/slimeboundResources/localization/fra/PotionStrings.json @@ -3,11 +3,11 @@ "NAME": "Jarre de Slime", "DESCRIPTIONS": [ "Appliquez #b", - " de #yGoop." + " de #yGoop [REMOVE_SPACE]." ] }, "Slimebound:SlimyTonguePotion": { - "NAME": "Elixir visqueux", + "NAME": "Élixir visqueux", "DESCRIPTIONS": [ "Lorsqu'un effet applique du #yGoop durant ce combat, appliquez-en #b", " de plus." @@ -16,8 +16,8 @@ "Slimebound:SpawnSlimePotion": { "NAME": "Armée dans une bouteille", "DESCRIPTIONS": [ - "Divisez-vous en #b", - " Slimes aléatoires (Normaux or #ySpécialistes)." + "#yDivisez-vous en #b", + " Slimes aléatoires (Normaux or #ySpécialistes [REMOVE_SPACE])." ] }, "Slimebound:ThreeZeroPotion": { diff --git a/src/main/resources/slimeboundResources/localization/fra/PowerStrings.json b/src/main/resources/slimeboundResources/localization/fra/PowerStrings.json index cb1ba3f9c8..bc14ea17a6 100644 --- a/src/main/resources/slimeboundResources/localization/fra/PowerStrings.json +++ b/src/main/resources/slimeboundResources/localization/fra/PowerStrings.json @@ -11,7 +11,7 @@ "NAME": "Goop", "DESCRIPTIONS": [ "La prochaine #yAttaque contre cette ennemi infligera #b", - " dégâts de plus, consumant tout le #yGoop." + " dégâts de plus, consumant tout le #yGoop [REMOVE_SPACE]." ] }, "Slimebound:PreventTackleDamagePower": { @@ -45,14 +45,14 @@ "NAME": "Amélioration : Acide", "DESCRIPTIONS": [ "Les Slimes #yVenimeux appliquent #b", - " de #yPoison en plus." + " de #yPoison en plus [REMOVE_SPACE]." ] }, "Slimebound:BuffSlimingSlimesPower": { "NAME": "Amélioration : Bourbier", "DESCRIPTIONS": [ "Les Slimes #yBourbier appliquent #b", - " de #yGoop en plus." + " de #yGoop en plus [REMOVE_SPACE]." ] }, "Slimebound:BuffShieldSlimesPower": { @@ -100,7 +100,7 @@ ] }, "Slimebound:RetainCardsOneTurnPower": { - "NAME": "Preparing Cards", + "NAME": "Préparation des cartes", "DESCRIPTIONS": [ "Retenez #b", " carte ce tour.", @@ -120,14 +120,14 @@ "NAME": "Reformation", "DESCRIPTIONS": [ "Lorsque vous Absorbez un Slime, gagnez #b", - " de Force." + " de Force [REMOVE_SPACE]." ] }, "Slimebound:SelfFormingGooPowerPlus": { "NAME": "Reformation+", "DESCRIPTIONS": [ "Lorsque vous Absorbez un Slime, gagnez #b", - " de Dextérité." + " de Dextérité [REMOVE_SPACE]." ] }, "Slimebound:LoseSlimesPower": { @@ -161,17 +161,17 @@ "Slimebound:PreventSlimeDecayPower": { "NAME": "Recouvert de Slime", "DESCRIPTIONS": [ - "La prochaine fois qu'une #yAttaque est utilisée sur cet ennemi, les bénéfices du #yGoop vont s'appliquer sans retirer de #yGoop.", + "La prochaine fois qu'une #yAttaque est utilisée sur cet ennemi, les bénéfices du #yGoop vont s'appliquer sans retirer de #yGoop [REMOVE_SPACE].", "Les #b", - " prochaines fois qu'une #yAttaque est utilisée sur cet ennemi, les bénéfices du #yGoop vont s'appliquer sans retirer de #yGoop." + " prochaines fois qu'une #yAttaque est utilisée sur cet ennemi, les bénéfices du #yGoop vont s'appliquer sans retirer de #yGoop [REMOVE_SPACE]." ] }, "Slimebound:DuplicatedFormPower": { "NAME": "Forme dupliquée", "DESCRIPTIONS": [ - "Chaque tour, la première carte que vous jouez qui cible des ennemis est jouée deux fois.", - "Chaque tour, les #b", - " premières cartes que vous jouez qui ciblent des ennemis sont jouées deux fois." + "La première carte que vous jouez chaque tour qui cible des ennemis est jouée deux fois.", + "Les #b", + " premières cartes que vous jouez chaque tour qui ciblent des ennemis sont jouées deux fois." ] }, "Slimebound:DuplicatedFormNoHealPower": { @@ -212,7 +212,7 @@ "NAME": "Goop acide", "DESCRIPTIONS": [ "Appliquez #b", - " #yPoison lorsque vous #yAttaquez un ennemi qui a du #yGoop." + " #yPoison lorsque vous #yAttaquez un ennemi qui a du #yGoop [REMOVE_SPACE]." ] }, "Slimebound:SlimeRitualPower": { @@ -241,7 +241,7 @@ "NAME": "Langue acide", "DESCRIPTIONS": [ "Appliquez #b", - " #yPoison lorsque vous appliquez du #yGoop." + " #yPoison lorsque vous appliquez du #yGoop [REMOVE_SPACE]." ] }, "Slimebound:AcidTonguePowerUpgraded": { @@ -252,7 +252,7 @@ ] }, "Slimebound:SelfDamageSlimedPower": { - "NAME": "Stray Goop", + "NAME": "Goop errant", "DESCRIPTIONS": [ "Appliquez #b", " #yGoop à un ennemi aléatoire lorsque vous perdez des PV." @@ -406,18 +406,18 @@ ] }, "Slimebound:StudyGuardianPower": { - "NAME": "Étude Guardien", + "NAME": "Étude Gardien", "DESCRIPTIONS": [ - "Gagnez une carte aléatoire du Guardien au début de votre prochain tour.", - "Gagnez une carte aléatoire du Guardien au début de vos ", + "Gagnez une carte aléatoire du Gardien au début de votre prochain tour.", + "Gagnez une carte aléatoire du Gardien au début de vos ", " prochains tours." ] }, "Slimebound:StudyGuardianPowerUpgraded": { - "NAME": "Étude Guardien+", + "NAME": "Étude Gardien+", "DESCRIPTIONS": [ - "Gagnez une carte aléatoire Améliorée du Guardien au début de votre prochain tour.", - "Gagnez une carte aléatoire Améliorée du Guardien au début de vos ", + "Gagnez une carte aléatoire Améliorée du Gardien au début de votre prochain tour.", + "Gagnez une carte aléatoire Améliorée du Gardien au début de vos ", " prochains tours." ] }, @@ -484,7 +484,7 @@ "Slimebound:BuffSecondarySlimeEffectsPower": { "NAME": "Maître des sbires", "DESCRIPTIONS": [ - "Lorsque vous jouez une carte avec l'effet #yCommande, #yCommandez une autre fois.", + "Lorsque vous jouez une carte avec l'effet #yCommande, #yCommandez une fois de plus.", "Lorsque vous jouez une carte avec l'effet #yCommande, #yCommandez #b", " fois de plus." ] diff --git a/src/main/resources/slimeboundResources/localization/fra/RelicStrings.json b/src/main/resources/slimeboundResources/localization/fra/RelicStrings.json index 70c45108d6..cb938c55d5 100644 --- a/src/main/resources/slimeboundResources/localization/fra/RelicStrings.json +++ b/src/main/resources/slimeboundResources/localization/fra/RelicStrings.json @@ -3,7 +3,9 @@ "NAME": "Cœur de gelée", "FLAVOR": "Je me sens si funky.", "DESCRIPTIONS": [ - "Lorsque vous #yslimeboundmod:Consumez, soignez-vous de #b2 PV, jusqu'à #b8 par combat." + "Lorsque vous #yslimeboundmod:Consumez [REMOVE_SPACE], soignez-vous de #b", + " PV, jusqu'à #b", + " par combat." ] }, "Slimebound:AbsorbEndCombatUpgraded": { @@ -11,22 +13,24 @@ "FLAVOR": "Le secret de la Vase.", "DESCRIPTIONS": [ "Remplace ", - ".[] NL Lorsque vous #yslimeboundmod:Consumez, soignez-vous de #b3 PV, jusqu'à #b15 par combat." + " [REMOVE_SPACE].[] NL Lorsque vous #yslimeboundmod:Consumez, soignez-vous de #b", + " PV, jusqu'à #b", + " par combat." ] }, "Slimebound:SlimedTailRelic": { "NAME": "Queue de slime", "FLAVOR": "Une fausse queue pour feinter les ennemis durant le combat, totalement recouverte de slime.", "DESCRIPTIONS": [ - "Lorsque vous vous slimeboundmod:Divisez, gagnez #b", - " #yd'Armure." + "Lorsque vous vous slimeboundmod:Divisez [REMOVE_SPACE], gagnez #b", + " #yd'Armure [REMOVE_SPACE]." ] }, "Slimebound:PotencyRelic": { "NAME": "Pierre de Nomakk", "FLAVOR": "Quand elle est présentée à un de vos sbires gluants, elle semble faire danser celui-ci.*.", "DESCRIPTIONS": [ - "Au début de chaque combat, gagnez #b1 de #yslimeboundmod:Potentiel." + "Au début de chaque combat, gagnez #b1 de #yslimeboundmod:Potentiel [REMOVE_SPACE]." ] }, "Slimebound:DailySplitRelic": { @@ -40,39 +44,39 @@ "NAME": "Slime ferrailleux", "FLAVOR": "", "DESCRIPTIONS": [ - "Au début de chaque combat, faites apparaître le #ySlime #yferrailleux. Il est ranimable si #yAbsorbé. NL Aux feux de camp, vous pouvez donner une carte au Slime ferrailleux, modifiant ses dégâts : NL #b+1 dégât pour les #gPeu #gcommunes NL #b+2 dégâts pour les #yRares NL #b-1 dégât pour les Communes NL #b-2 dégâts pour les #rMalédictions", + "Au début de chaque combat, invoquez le #ySlime #yferrailleux (peut être ranimé si #yAbsorbé [REMOVE_SPACE]). NL Aux sites de Repos, vous pouvez donner une carte au #ySlime #yferrailleux, modifiant ses dégâts : NL #b+1 dégât pour les #gPeu #gcommunes NL #b+2 dégâts pour les #yRares NL #b-1 dégât pour les Communes NL #b-2 dégâts pour les #rMalédictions", "Retirez une carte de votre deck et modifiez les dégâts du Slime ferrailleux.", "Rien à donner au Slime ferrailleux.", - "Donner au Ferrailleux" + "À la casse" ] }, "Slimebound:GreedOozeRelic": { "NAME": "Slime cupide", "FLAVOR": "Un ami trouvé dans la Tour qui adore les âmes et l'or.", "DESCRIPTIONS": [ - "Au début du combat, faites apparaître le #ySlime #ycupide. Il est ranimable si #yAbsorbé. NL Aux feux de camp, le #ySlime #ycupide vous prendra #b50 de vos âmes, augmentant ses dégâts de #b1." + "Au début du combat, faites apparaître le #ySlime #ycupide (peut être ranimé si #yAbsorbé [REMOVE_SPACE]). NL Aux sites de Repos, le #ySlime #ycupide vous prendra #b50 de vos âmes, augmentant ses dégâts de #b1." ] }, "Slimebound:PreparedRelic": { "NAME": "Soupe de slime", "FLAVOR": "Elle a un goût horrible, mais elle est incroyablement bonne pour la santé.", "DESCRIPTIONS": [ - "Lorsque vous accédez à un feu de camp, commencez le prochain combat avec une carte #yPréparation qui coûte #b0." + "Lorsque vous accédez à un Site de Repos, commencez le prochain combat avec une carte #yPréparation qui coûte #b0." ] }, "Slimebound:AggressiveSlimeRelic": { "NAME": "Squatteur visqueux", "FLAVOR": "Il m'a suivi jusqu'à la maison. Je peux le garder ?", "DESCRIPTIONS": [ - "Au début de chaque combat, #yslimeboundmod:Divisez-vous en #yslimeboundmod:Slime_cogneur." + "Au début de chaque combat, #yslimeboundmod:Divisez-vous en #yslimeboundmod:Slime_cogneur [REMOVE_SPACE]." ] }, "Slimebound:SlimedSkullRelic": { "NAME": "Crâne gluant", "FLAVOR": "Un crâne de Geckobra dans un état absolument épouvantable. Dégoûtant et gluant, la saleté et la crasse s'y accrochent comme de la colle.", "DESCRIPTIONS": [ - "Lorsque vous appliquez du #yslimeboundmod:Goop, appliquez #b", - " de #yslimeboundmod:Goop supplémentaire." + "Lorsque vous appliquez du #yslimeboundmod:Goop [REMOVE_SPACE], appliquez-en #b", + " de plus." ] }, "Slimebound:MaxSlimesRelic": { @@ -86,21 +90,23 @@ "NAME": "Équipement de protection", "FLAVOR": "La meilleure défense, c'est une bonne attaque.", "DESCRIPTIONS": [ - "Réduisez les dégâts que vous subissez des cartes \"Tacle\" de #b3." + "Réduisez les dégâts que vous subissez des cartes #yslimeboundmod:Tacle de #b", + " [REMOVE_SPACE]." ] }, "Slimebound:TarBlob": { "NAME": "Slime de goudrron", "FLAVOR": "Le mauvais genre de Slime.", "DESCRIPTIONS": [ - "Gagnez [E] au début de chaque tour. Au début de chaque combat, perdez #b1 emplacement de Slime." + "Gagnez [E] au début de chaque tour. Au début du combat, perdez #b1 emplacement de Slime." ] }, "Slimebound:StickyStick": { "NAME": "Cube gélatineux", "FLAVOR": "Hé, ça s'est collé à ton corps.", "DESCRIPTIONS": [ - "Lorsque vous piochez une carte #yStatut, piochez #b1 carte." + "Lorsque vous piochez un #yStatut ou une #rMalédiction [REMOVE_SPACE], gagnez #b", + " #yd'Armure [REMOVE_SPACE]." ] } } diff --git a/src/main/resources/slimeboundResources/localization/jpn/CardStrings.json b/src/main/resources/slimeboundResources/localization/jpn/CardStrings.json index 019b51c4ee..4b08123270 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,19 +60,19 @@ }, "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": " 筋力 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": "形を変える", @@ -80,8 +80,8 @@ }, "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": "レベルアップ!", @@ -149,12 +149,12 @@ "UPGRADE_DESCRIPTION": "脱力 !M! と slimeboundmod:汚泥 !slime! を与える。 NL カードを1枚引く。 NL 廃棄 - slimeboundmod:埋没" }, "Slimebound:LivingWall": { - "NAME": "リビングウォール", - "DESCRIPTION": " !B! ブロックを得る。 NL このターン攻撃してきた相手に slimeboundmod:汚泥 !slime! を与える。" + "NAME": "壁形態", + "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,18 +173,18 @@ }, "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:汚泥 !slime! を与える。 NL 廃棄", - "UPGRADE_DESCRIPTION": "敵の slimeboundmod:汚泥 を 3 倍にする。 NL 廃棄" + "UPGRADE_DESCRIPTION": "3体の敵に slimeboundmod:汚泥 を与える。 NL 廃棄" }, "Slimebound:Overexert": { "NAME": "過剰行使", @@ -193,7 +193,7 @@ }, "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:命令 する。", - "UPGRADE_DESCRIPTION": " !D! ダメージを与える。 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,33 +271,33 @@ }, "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": "スライム大騒動", - "DESCRIPTION": "産み出したスライムの数だけ山札の一番上のカードをプレイする。 NL 廃棄" + "DESCRIPTION": "スライムの数だけ山札の一番上のカードをプレイする。 NL 廃棄" }, "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,7 +313,7 @@ }, "Slimebound:Split": { "NAME": "分裂", - "DESCRIPTION": "ランダムな スライム に slimeboundmod:分裂 する。 slimeboundmod:命令 する。" + "DESCRIPTION": "slimeboundmod:ゲリラスライム に slimeboundmod:分裂 する。 NL slimeboundmod:命令" }, "Slimebound:SplitAcid": { "NAME": "分裂:ゲリラ", @@ -322,7 +322,7 @@ }, "Slimebound:SplitBruiser": { "NAME": "分裂:ブルーザー", - "DESCRIPTION": "slimeboundmod:ブルーザースライム に slimeboundmod:分裂 する。 NL !M! 回 slimeboundmod:命令 する。 ", + "DESCRIPTION": "slimeboundmod:ブルーザースライム に slimeboundmod:分裂 する。 NL !M! 回 slimeboundmod:命令 する。", "UPGRADE_DESCRIPTION": "slimeboundmod:ブルーザースライム に slimeboundmod:分裂 する。 NL 3 回 slimeboundmod:命令 する。" }, "Slimebound:SplitGreed": { @@ -336,8 +336,8 @@ }, "Slimebound:SplitMire": { "NAME": "分裂:マイア", - "DESCRIPTION": "slimeboundmod:マイアスライム に slimeboundmod:分裂 する。 NL !M! 回 slimeboundmod:命令 する。 ", - "UPGRADE_DESCRIPTION": "slimeboundmod:マイアスライム に slimeboundmod:分裂 する。 NL 3 回 slimeboundmod:命令 する。 " + "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": "無駄のない動き", @@ -383,4 +383,4 @@ "廃棄... されてない..." ] } -} +} \ No newline at end of file diff --git a/src/main/resources/slimeboundResources/localization/jpn/EventStrings.json b/src/main/resources/slimeboundResources/localization/jpn/EventStrings.json index b89bf093e4..2a62e79d3e 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 c83d894a25..96a70d4adc 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 06c17b3de5..71ea4d16a6 100644 --- a/src/main/resources/slimeboundResources/localization/jpn/OrbStrings.json +++ b/src/main/resources/slimeboundResources/localization/jpn/OrbStrings.json @@ -24,14 +24,14 @@ "NAME": "スクラップウーズ", "DESCRIPTION": [ "ターン開始時 #b", - " ダメージを与える。 NL 吸収されると復活することがある。" + " ダメージを与える。 NL 吸収しても復活させることが出来る。" ] }, "Slimebound:GreedOozeSlime": { "NAME": "グリードウーズ", "DESCRIPTION": [ "ターン開始時 #b", - " ダメージを与える。 NL 吸収されると復活することがある。" + " ダメージを与える。 NL 吸収しても復活させることが出来る。" ] }, "Slimebound:TorchHeadSlime": { @@ -108,7 +108,7 @@ "DESCRIPTION": [ "ターン開始時 #b", " ダメージを与え、カードを #b", - " 枚ドローする。" + " 枚ドローする。 この効果は #y効力 で増加しない。" ] }, "Slimebound:DarklingSlime": { @@ -118,4 +118,4 @@ " ダメージを与える。命令されると、全てのダークリングスライムが攻撃する。(ポジションを問わない)" ] } -} +} \ No newline at end of file diff --git a/src/main/resources/slimeboundResources/localization/jpn/RelicStrings.json b/src/main/resources/slimeboundResources/localization/jpn/RelicStrings.json index 986913de08..a0467cc799 100644 --- a/src/main/resources/slimeboundResources/localization/jpn/RelicStrings.json +++ b/src/main/resources/slimeboundResources/localization/jpn/RelicStrings.json @@ -3,7 +3,9 @@ "NAME": "ベタつく心臓", "FLAVOR": "とてもいい気分だ!", "DESCRIPTIONS": [ - "#yslimeboundmod:泥食い を行うたびに HPを #b2 回復する。1戦闘中 #b8 HPまで。" + "#yslimeboundmod:泥食い を行うたびに HPを #b", + " 回復する。一度の戦闘中に最大 #b", + " HP回復出来る。" ] }, "Slimebound:AbsorbEndCombatUpgraded": { @@ -11,7 +13,9 @@ "FLAVOR": "ウーズの秘密", "DESCRIPTIONS": [ " ", - " [] と置き換える。 NL #yslimeboundmod:泥食い を行うたびに HPを #b3 回復する。1戦闘中 #b15 HPまで。" + " [] と置き換える。 NL #yslimeboundmod:泥食い を行うたびに HPを #b", + " 回復する。一度の戦闘中に最大 #b", + " HP回復出来る。" ] }, "Slimebound:SlimedTailRelic": { @@ -86,7 +90,8 @@ "NAME": "プロテクトギア", "FLAVOR": "最高の護りこそが最適な攻撃だ", "DESCRIPTIONS": [ - "#yslimeboundmod:タックル の自傷ダメージを #b3 軽減する。" + "#yslimeboundmod:タックル の自傷ダメージを #b", + " 軽減する。" ] }, "Slimebound:TarBlob": { @@ -100,7 +105,8 @@ "NAME": "ゼラチナスキューブ", "FLAVOR": "やあ、身体にくっついてしまったよ", "DESCRIPTIONS": [ - " #y状態異常 カードを引いた時 カードを #b1 枚引く。" + "あなたが #y状態異常 または #r呪い カードを引いた時 #b", + " #yブロック を得る。" ] } } diff --git a/src/main/resources/slimeboundResources/localization/kor/CardStrings.json b/src/main/resources/slimeboundResources/localization/kor/CardStrings.json index fe722e3466..e820c79715 100644 --- a/src/main/resources/slimeboundResources/localization/kor/CardStrings.json +++ b/src/main/resources/slimeboundResources/localization/kor/CardStrings.json @@ -1,386 +1,386 @@ -{ - "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 +{ + "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:소비하면 *핥기를 얻습니다.", + "UPGRADE_DESCRIPTION": "선천성. NL 매 턴 처음으로 slimeboundmod:소비하면 *핥기를 얻습니다." + }, + "Slimebound:GoopSpray": { + "NAME": "끈적이 스프레이", + "DESCRIPTION": "적 전체에게 slimeboundmod:점액을 !slime! 부여하고 약화를 !M! 부여합니다." + }, + "Slimebound:GoopTackle": { + "NAME": "연속 태클", + "DESCRIPTION": "피해를 !D! 주고 반동 피해를 !SlimeboundSelfharm! 받습니다. NL 무작위 slimeboundmod:태클 카드를 1장 얻습니다. 그 카드의 비용은 0 이 됩니다.", + "UPGRADE_DESCRIPTION": "피해를 !D! 주고 반동 피해를 !SlimeboundSelfharm! 받습니다. NL 무작위 강화된 slimeboundmod:태클 카드를 1장 얻습니다. 그 카드의 비용은 0 이 됩니다." + }, + "Slimebound:Grow": { + "NAME": "성장", + "DESCRIPTION": "슬라임 슬롯을 1 잃고 힘과 민첩을 !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! 얻고 슬라임 슬롯을 1 얻습니다." + }, + "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 *핥기를 얻습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL *핥기를 얻습니다. 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! 장을 선택해 보존합니다. NL 소멸." + }, + "Slimebound:PrepareCrush": { + "NAME": "준비: 으깨기", + "DESCRIPTION": "다음 턴에 *슬라임 *으깬다를 얻고 [E] [E] [E] 을 얻고 힘을 !M! 얻습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "다음 턴에 *슬라임 *으깬다+를 얻고 [E] [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 버린 카드 더미에서 카드를 1장 선택해 뽑을 카드 더미 맨 위에 놓습니다." + }, + "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배로 늘립니다." + }, + "Slimebound:WasteNot": { + "NAME": "남기면 안돼", + "DESCRIPTION": "모든 *핥기 카드를 expansioncontent:발굴합니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "모든 *핥기 카드를 expansioncontent:발굴합니다.", + "EXTENDED_DESCRIPTION": [ + "소멸된 게... 없어..." + ] + } +} diff --git a/src/main/resources/slimeboundResources/localization/kor/EventStrings.json b/src/main/resources/slimeboundResources/localization/kor/EventStrings.json index 8690865b25..82329ce14e 100644 --- a/src/main/resources/slimeboundResources/localization/kor/EventStrings.json +++ b/src/main/resources/slimeboundResources/localization/kor/EventStrings.json @@ -1,105 +1,105 @@ -{ - "Slimebound:Hunted": { - "NAME": "보스 출현", - "DESCRIPTIONS": [ - "첨탑에 소리가 쩌렁쩌렁 울립니다... NL NL #r~슬라임 으깬다!!!~ NL NL 거대한 슬라임이 재빠르게 따라오더니 앞을 막아섭니다. 슬라임은 당신이 첨탑에 뿌려둔 흔적을 쫓아 태초를 벗어나 자신을 갈고닦으며 성장해 온 듯합니다.", - "그렇게 쉬울 줄 알았나?", - "가뿐하게 대왕 슬라임을 처치하고 소유권 소송으로부터 지켜냅니다. 누가봐도 아주 멋진 중절모긴 하죠." - ], - "OPTIONS": [ - "[맞선다] #r대왕 #r슬라임과 #r싸웁니다. 보상으로 #g작은 #g중절모 를 얻습니다.", - "[겁먹고 도망간다] #r저주를 #r받습니다. #r- #r수치." - ] - }, - "Slimebound:WorldofGoop": { - "NAME": "끈적이 천지", - "DESCRIPTIONS": [ - "당신은 웅덩이에 빠졌습니다. NL @웅덩이는@ @온통@ #g@끈적이@ #g@슬라임으로@ @되어있습니다!!@ NL 조용히 끈적이와 뒹구는 목욕을 즐기며 잠깐 동안의 여유를 만끽합니다. NL NL 웅덩이에서 나와 보니 불운한 모험가들의 #y영혼을 천천히 흡수하는 탐욕스런 생명체를 발견합니다.", - "상쾌한 슬라임 목욕을 마치고 #y영혼을 흡수한 다음, 슬픈 표정이 가물거리는 듯한 생명체를 뒤로한 채 떠납니다.", - "생명체와 협상 끝에 반짝이는 것을 제공하는 대신 당신의 여정에 합류하기로 했습니다. NL 당신과 새로 사귄 #g친구 는 슬라임 목욕을 마치고는 함께 자리를 떴습니다." - ], - "OPTIONS": [ - "[영혼을 모은다] #g영혼을 #g75 #g얻습니다.", - "[협상한다] #r영혼을 #r75 #r잃습니다. #g욕심쟁이 #g수액을 #y얻습니다.", - "[떠난다]", - "[잠금] 영혼이 75 필요합니다." - ] - }, - "Slimebound:SlimeTalk": { - "NAME": "TalkStrings", - "DESCRIPTIONS": [ - "~우릴~ ~흡수하지~ ~마라!~", - "~우리의~ ~영혼을~ ~가져가려고?~", - "~우릴~ ~잡아먹으려고...~", - "~대장!~", - "그 모자... NL #r~반드시~ #r~내가~ #r~가지겠다!~", - "~뭘~ ~하려...~", - "~...는~ ~거야...~", - "~우리랑~ ~같이~ ~놀자고?~", - "~우릴~ ~삼키려고~ ~할거야...~", - "~너무~ ~너무~ ~강해...~", - "~우리랑~ ~같아...~", - "~멋진~ #r~모자다!!!~" - ] - }, - "Slimebound:ScrapOoze": { - "NAME": "날붙이 수액", - "DESCRIPTIONS": [ - "다른 길을 걸을지라도 슬라임은 모두 친구입니다. 새로운 날붙이와 보물을 제공해주는 대신 날붙이 수액이 당신의 여정에 함께하기로 했습니다." - ], - "OPTIONS": [ - "[협상한다] ", - " #r을 #r잃습니다. #g날붙이 #g수액을 #g얻습니다. #r팔을 #r뻗어 #r뒤져본다 #r선택 #r시 #r잠금.", - "[협상한다] 잠금 (화난 날붙이 수액)", - "[떠난다]", - "[협상한다] 잠금 (일반 혹은 고급 유물이 필요)" - ] - }, - "Slimebound:ArtOfSlimeWar": { - "NAME": "슬라임 병법서", - "DESCRIPTIONS": [ - "당신은 우연히 #g빛나는 #g책이 놓인 역겨운 받침대를 발견했습니다. 이 책에는 #g대왕 #g슬라임 과 그 하수인들이 사용하던 복잡하고 정교한 병법이 적혀진 것 같습니다.", - "책에 닿자 몇 가지 함정이 발동되는 소리가 들립니다. 모두 피하기는 힘들어 보입니다.", - "당신은 책을 훔치고 함정을 피하려다 끔찍한 끈적이 웅덩이로 빠지고 말았습니다.", - "책을 집자 바닥에서 가시 함정이 튀어나왔습니다. 당신은 아슬아슬하게 도망쳤습니다. 다행히 크게 다치지는 않았습니다.", - "책이 받침대에서 떨어지자, 당신은 정기가 빠져나가는 기분이 듭니다. 그만한 가치가 있기를 비는 수밖에 없겠네요.", - "당신은 책을 내버려 두고 가던 길을 가기로 했습니다.", - "당신은 슬라임 하수인들이 어째서 위협이 되는지 전혀 이해할 수 없었습니다. 하수인들이 사용하는 유일한 전략은 적을 향해 맹렬히 몸을 던지는 것뿐이니까요. 뭐, 그게 먹혔나 봅니다..." - ], - "OPTIONS": [ - "[읽는다] #g모든 #g타격을 #g제거합니다. #g강화된 #g태클을 #g3장 #g받습니다.", - "[가진다] #g전술 #g교본 #g참조를 #g얻습니다. #r함정이 #r발동됩니다.", - "[떠난다]", - "[뛰어든다] #r저주를 #r받습니다. #r- #r끈적거림.", - "[기다린다] #r피해를 #r", - " #r입습니다.", - "[움켜쥐고 도망간다] #r최대 #r체력을 #r", - " #r잃습니다." - ] - }, - "Slimebound:Darklings": { - "NAME": "어두미들", - "DESCRIPTIONS": [ - "낯선 세 슬라임들이 앞을 가로막고 서(?)있습니다. 적대적인 거 같지만 당신이 다가가자 그들은 자신들과 유사하다며 호기심 어린 눈으로 쳐다봅니다.", - "~전투~ ~태세를~ 취하자, 새까만 슬라임들도 ~전투~ ~태세를~ 취합니다!", - "당신은 침입자였지만 짧은 대화를 나누자, 슬라임들은 편을 들다 못해 당신을 보호해주기로 했습니다. 그리고 당신을 돕고자 잠시 살던 곳을 떠나기로 했습니다." - ], - "OPTIONS": [ - "[협상한다] #g어두미를 #g얻습니다. #r희귀 #r카드를 #r잃습니다. #r- ", - "[싸운다]", - "[떠난다]", - ".", - "[잠금] 희귀 카드가 필요합니다." - ] - }, - "Slimebound:BackToBasics": { - "NAME": "", - "DESCRIPTIONS": [ - "양 한 마리가 나서면 나머지도 따르는 법입니다." - ], - "OPTIONS": [ - "[영감] #g모든 #g타격과 #g수비에 #g명령 #g효과를 #g추가합니다.", - "[잠금] 타격과 수비가 필요합니다." - ] - } +{ + "Slimebound:Hunted": { + "NAME": "보스 출현", + "DESCRIPTIONS": [ + "첨탑에 소리가 쩌렁쩌렁 울립니다... NL NL #r~슬라임~ #r~으깬다!!!~ NL NL 거대한 슬라임이 재빠르게 따라오더니 앞을 막아섭니다. 슬라임은 당신이 첨탑에 뿌려둔 흔적을 쫓아 태초를 벗어나 자신을 갈고닦으며 성장해 온 듯합니다.", + "그렇게 쉬울 줄 알았나?", + "가뿐하게 대왕 슬라임을 처치하고 소유권 소송으로부터 지켜냅니다. 누가봐도 아주 멋진 중절모긴 하죠." + ], + "OPTIONS": [ + "[맞선다] #r대왕 #r슬라임과 #r싸웁니다. #g보상으로 #g작은 #g중절모를 #g얻습니다.", + "[겁먹고 도망간다] #r저주를 #r받습니다. #r- #r수치." + ] + }, + "Slimebound:WorldofGoop": { + "NAME": "끈적이 천지", + "DESCRIPTIONS": [ + "당신은 웅덩이에 빠졌습니다. NL @웅덩이는@ @온통@ #g@끈적이@ #g@슬라임으로@ @되어있습니다!!@ NL 조용히 끈적이와 뒹구는 목욕을 즐기며 잠깐 동안의 여유를 만끽합니다. NL NL 웅덩이에서 나와 보니 불운한 모험가들의 #y영혼을 천천히 흡수하는 탐욕스런 생명체를 발견합니다.", + "상쾌한 슬라임 목욕을 마치고 #y영혼을 흡수한 다음, 슬픈 표정이 가물거리는 듯한 생명체를 뒤로한 채 떠납니다.", + "협상 끝에 더욱 맛난 #y영혼을 제공하는 것을 대가로 생명체는 당신의 여정에 합류하기로 했습니다. NL 당신과 새로 사귄 #g친구는 슬라임 목욕을 마치고는 함께 자리를 떴습니다." + ], + "OPTIONS": [ + "[영혼을 모은다] #g영혼을 #g75 #g얻습니다.", + "[협상한다] #r영혼을 #r75 #r잃습니다. #g욕심쟁이 #g수액을 #y얻습니다.", + "[떠난다]", + "[잠금] 영혼이 75 필요합니다." + ] + }, + "Slimebound:SlimeTalk": { + "NAME": "TalkStrings", + "DESCRIPTIONS": [ + "~우릴~ ~흡수하지~ ~마라!~", + "~우리의~ ~영혼을~ ~가져가려고?~", + "~우릴~ ~잡아먹으려고...~", + "~대장!~", + "그 모자... NL #r~반드시~ #r~내가~ #r~가지겠다!~", + "~뭘~ ~하려...~", + "~...는~ ~거야...~", + "~우리랑~ ~같이~ ~놀자고?~", + "~우릴~ ~삼키려고~ ~할거야...~", + "~너무~ ~너무~ ~강해...~", + "~우리랑~ ~같아...~", + "~멋진~ #r~모자다!!!~" + ] + }, + "Slimebound:ScrapOoze": { + "NAME": "날붙이 수액", + "DESCRIPTIONS": [ + "다른 길을 걸어도 슬라임은 모두 친구입니다. 새로운 날붙이와 보물을 제공해주는 대신 날붙이 수액이 당신의 여정에 함께하기로 했습니다." + ], + "OPTIONS": [ + "[협상한다] ", + " #r을 #r잃습니다. #g날붙이 #g수액을 #g얻습니다. #r팔을 #r뻗어 #r뒤져본다 #r선택 #r시 #r잠김.", + "[협상한다] 잠김 (날붙이 수액 화남)", + "[떠난다]", + "[협상한다] 잠김 (일반 또는 고급 유물 필요)" + ] + }, + "Slimebound:ArtOfSlimeWar": { + "NAME": "슬라임 병법서", + "DESCRIPTIONS": [ + "당신은 우연히 #g빛나는 #g책이 놓인 역겨운 받침대를 발견했습니다. 이 책에는 #g대왕 #g슬라임과 그 하수인들이 사용하던 복잡하고 정교한 병법이 적혀진 것 같습니다.", + "책에 닿자 몇 가지 함정이 발동되는 소리가 들립니다. 모두 피하기는 힘들어 보입니다.", + "당신은 책을 훔치고 함정을 피하려다 끔찍한 끈적이 웅덩이로 빠지고 말았습니다.", + "책을 집자 바닥에서 가시 함정이 튀어나왔습니다. 당신은 아슬아슬하게 도망쳤습니다. 다행히 크게 다치지는 않았습니다.", + "책이 받침대에서 떨어지자, 당신은 정기가 빠져나가는 기분이 듭니다. 그만한 가치가 있기를 비는 수밖에 없겠네요.", + "당신은 책을 내버려 두고 가던 길을 가기로 했습니다.", + "당신은 슬라임 하수인들이 어째서 위협이 되는지 전혀 이해할 수 없었습니다. 하수인들이 사용하는 유일한 전략은 적을 향해 맹렬히 몸을 던지는 것뿐이니까요. 뭐, 그게 먹혔나 봅니다..." + ], + "OPTIONS": [ + "[읽는다] #g모든 #g타격을 #g제거합니다. #g강화된 #g태클을 #g3장 #g얻습니다.", + "[가진다] #g전술 #g교본 #g참조를 #g얻습니다. #r함정이 #r발동됩니다.", + "[떠난다]", + "[뛰어든다] #r저주를 #r받습니다. #r- #r질척임.", + "[기다린다] #r피해를 #r", + " #r받습니다.", + "[움켜쥐고 도망간다] #r최대 #r체력을 #r", + " #r잃습니다." + ] + }, + "Slimebound:Darklings": { + "NAME": "어두미들", + "DESCRIPTIONS": [ + "낯선 세 슬라임들이 앞을 가로막고 서(?)있습니다. 적대적인 거 같지만 당신이 다가가자 그들은 자신들과 유사하다며 호기심 어린 눈으로 쳐다봅니다.", + "~전투~ ~태세를~ 취하자, 새까만 슬라임들도 ~전투~ ~태세를~ 취합니다!", + "당신은 침입자였지만 짧은 대화를 나누자, 슬라임들은 편을 들다 못해 당신을 보호해주기로 했습니다. 그리고 당신을 돕고자 잠시 살던 곳을 떠나기로 했습니다." + ], + "OPTIONS": [ + "[협상한다] #g어두미를 #g얻습니다. #r희귀 #r카드를 #r잃습니다. #r- ", + "[싸운다]", + "[떠난다]", + ".", + "[잠김] 희귀 카드가 필요합니다." + ] + }, + "Slimebound:BackToBasics": { + "NAME": "", + "DESCRIPTIONS": [ + "양 한 마리가 나서면 나머지도 따르는 법입니다." + ], + "OPTIONS": [ + "[영감] #g모든 #g타격과 #g수비에 #g명령 #g효과를 #g추가합니다.", + "[잠김] 타격 또는 수비가 필요합니다." + ] + } } \ No newline at end of file diff --git a/src/main/resources/slimeboundResources/localization/kor/KeywordStrings.json b/src/main/resources/slimeboundResources/localization/kor/KeywordStrings.json index b6563a129c..2ac3c24391 100644 --- a/src/main/resources/slimeboundResources/localization/kor/KeywordStrings.json +++ b/src/main/resources/slimeboundResources/localization/kor/KeywordStrings.json @@ -60,6 +60,7 @@ }, { "NAMES": [ + "불머리", "불머리 슬라임", "불머리_슬라임", "불머리_슬라임으로", @@ -71,6 +72,7 @@ }, { "NAMES": [ + "싸움꾼", "싸움꾼 슬라임", "싸움꾼_슬라임", "싸움꾼_슬라임으로", @@ -81,10 +83,11 @@ "bruiser" ], "PROPER_NAME": "싸움꾼 슬라임", - "DESCRIPTION": "내 턴 시작 시 피해를 #b3 만큼 2번 주는 슬라임입니다." + "DESCRIPTION": "내 턴 시작 시 피해를 #b3 만큼 #b2 번 주는 슬라임입니다." }, { "NAMES": [ + "광신자", "광신자 슬라임", "광신자_슬라임", "광신자_슬라임으로", @@ -96,6 +99,7 @@ }, { "NAMES": [ + "거머리", "거머리 슬라임", "거머리_슬라임", "거머리_슬라임으로", @@ -110,6 +114,7 @@ }, { "NAMES": [ + "특공대", "특공대 슬라임", "특공대_슬라임", "특공대_슬라임으로", @@ -124,6 +129,7 @@ }, { "NAMES": [ + "진흙탕", "진흙탕 슬라임", "진흙탕_슬라임", "진흙탕_슬라임으로", @@ -138,6 +144,7 @@ }, { "NAMES": [ + "청동", "청동 슬라임", "청동_슬라임", "청동_슬라임으로", @@ -157,6 +164,7 @@ }, { "NAMES": [ + "유령불꽃", "유령불꽃 슬라임", "유령불꽃_슬라임", "유령불꽃_슬라임으로", @@ -164,7 +172,7 @@ "ghostflame_slime" ], "PROPER_NAME": "유령불꽃 슬라임", - "DESCRIPTION": "내 턴 시작 시 피해를 #b3 주고 #y영혼화상을 #b5 부여하는 슬라임입니다." + "DESCRIPTION": "내 턴 시작 시 피해를 #b3 주고 #y영혼화상을 #b6 부여하는 슬라임입니다." }, { "NAMES": [ @@ -190,7 +198,7 @@ "tackles" ], "PROPER_NAME": "태클", - "DESCRIPTION": "강력한 #y공격과 함께 반동으로 약간의 피해를 받는 카드입니다." + "DESCRIPTION": "강력한 피해와 함께 반동으로 약간의 피해를 받는 #y공격 카드입니다." }, { "NAMES": [ @@ -204,6 +212,7 @@ }, { "NAMES": [ + "가시", "가시 슬라임", "가시_슬라임", "가시_슬라임으로", @@ -215,6 +224,7 @@ }, { "NAMES": [ + "욕쟁이", "욕쟁이 슬라임", "욕쟁이_슬라임", "욕쟁이_슬라임으로", @@ -226,6 +236,7 @@ }, { "NAMES": [ + "어두미", "어두미 슬라임", "어두미_슬라임", "어두미_슬라임으로", @@ -233,10 +244,11 @@ "darkling_slime" ], "PROPER_NAME": "어두미 슬라임", - "DESCRIPTION": "내 턴 시작 시 피해를 #b3 주는 슬라임입니다. 명령 시, 다른 어두미 슬라임도 공격합니다." + "DESCRIPTION": "내 턴 시작 시 피해를 #b3 주는 슬라임입니다. #y명령 시, 다른 어두미 슬라임도 공격합니다." }, { "NAMES": [ + "고대", "고대 슬라임", "고대_슬라임", "고대_슬라임으로", @@ -248,6 +260,7 @@ }, { "NAMES": [ + "시간", "시간 슬라임", "시간_슬라임", "시간_슬라임으로", @@ -261,6 +274,7 @@ "NAMES": [ "소비", "소비한", + "소비할", "소비하면", "소비했을", "consume" diff --git a/src/main/resources/slimeboundResources/localization/kor/MonsterStrings.json b/src/main/resources/slimeboundResources/localization/kor/MonsterStrings.json index 9e26dfeeb6..22fdca1b26 100644 --- a/src/main/resources/slimeboundResources/localization/kor/MonsterStrings.json +++ b/src/main/resources/slimeboundResources/localization/kor/MonsterStrings.json @@ -1 +1 @@ -{} \ No newline at end of file +{} \ No newline at end of file diff --git a/src/main/resources/slimeboundResources/localization/kor/OrbStrings.json b/src/main/resources/slimeboundResources/localization/kor/OrbStrings.json index 6a15ec4cc5..5c8265472d 100644 --- a/src/main/resources/slimeboundResources/localization/kor/OrbStrings.json +++ b/src/main/resources/slimeboundResources/localization/kor/OrbStrings.json @@ -1,121 +1,121 @@ -{ - "Slimebound:EmptySlimeSlot": { - "NAME": "슬라임 슬롯", - "DESCRIPTION": [ - "#y분열한 슬라임 부하들이 자리잡는 장소입니다." - ] - }, - "Slimebound:BronzeSlime": { - "NAME": "청동 슬라임", - "DESCRIPTION": [ - "내 턴 시작 시 적 전체에게 피해를 #b", - " 주고 공격 했다면 이 청동 슬라임의 다음 공격 턴을 넘깁니다.", - "" - ] - }, - "Slimebound:AttackSlime": { - "NAME": "싸움꾼 슬라임", - "DESCRIPTION": [ - "내 턴 시작 시 피해를 #b", - " 만큼 2번 줍니다." - ] - }, - "Slimebound:ScrapOozeSlime": { - "NAME": "날붙이 수액", - "DESCRIPTION": [ - "내 턴 시작 시 피해를 #b", - " 줍니다. NL #y흡수되어도 되살아납니다." - ] - }, - "Slimebound:GreedOozeSlime": { - "NAME": "욕심쟁이 수액", - "DESCRIPTION": [ - "내 턴 시작 시 피해를 #b", - " 줍니다. NL #y흡수되어도 되살아납니다." - ] - }, - "Slimebound:TorchHeadSlime": { - "NAME": "불머리 슬라임", - "DESCRIPTION": [ - "내 턴 시작 시 피해를 #b", - " 줍니다. 내 증가된 #y힘만큼 피해량이 증가합니다." - ] - }, - "Slimebound:CultistSlime": { - "NAME": "광신자 슬라임", - "DESCRIPTION": [ - "내 턴 시작 시 피해를 #b", - " 줍니다. 공격 후 피해량이 #b1 증가합니다." - ] - }, - "Slimebound:ShieldSlime": { - "NAME": "거머리 슬라임", - "DESCRIPTION": [ - "내 턴 시작 시 피해를 #b", - " 주고 #y방어도를 #b", - " 얻습니다." - ] - }, - "Slimebound:PoisonSlime": { - "NAME": "특공대 슬라임", - "DESCRIPTION": [ - "내 턴 시작 시 적 전체에게 피해를 #b", - " 줍니다." - ] - }, - "Slimebound:SlimingSlime": { - "NAME": "진흙탕 슬라임", - "DESCRIPTION": [ - "내 턴 시작 시 피해를 #b", - " 주고 #y점액을 #b", - " 부여합니다." - ] - }, - "Slimebound:HexSlime": { - "NAME": "유령불꽃 슬라임", - "DESCRIPTION": [ - "내 턴 시작 시 피해를 #b", - " 주고 #y영혼불꽃을 #b", - " 부여합니다." - ] - }, - "Slimebound:ChampSlime": { - "NAME": "욕쟁이 슬라임", - "DESCRIPTION": [ - "내 턴 시작 시 피해를 #b", - " 주고 #y취약을 #b", - " 부여합니다." - ] - }, - "Slimebound:SlowingSlime": { - "NAME": "시간 슬라임", - "DESCRIPTION": [ - "내 턴 시작 시 피해를 #b", - " 주고 #y약화를 #b", - " 부여합니다." - ] - }, - "Slimebound:ProtectorSlime": { - "NAME": "가시 슬라임", - "DESCRIPTION": [ - "내 턴 시작 시 피해를 #b", - " 주고 #y가시를 #b", - " 얻습니다. 턴 종료 시 이 효과로 얻은 #y가시를 잃습니다." - ] - }, - "Slimebound:DrawingSlime": { - "NAME": "고대의 슬라임", - "DESCRIPTION": [ - "내 턴 시작 시 피해를 #b", - " 주고 카드를 #b", - " 장 뽑아줍니다. 카드를 뽑아주는 효과는 잠재력으로 증가하지 않습니다." - ] - }, - "Slimebound:DarklingSlime": { - "NAME": "어두미 슬라임", - "DESCRIPTION": [ - "내 턴 시작 시 피해를 #b", - " 줍니다. 명령 시 모든 어두미 슬라임이 공격합니다." - ] - } +{ + "Slimebound:EmptySlimeSlot": { + "NAME": "슬라임 슬롯", + "DESCRIPTION": [ + "#y분열한 슬라임 부하들이 자리잡는 장소입니다." + ] + }, + "Slimebound:BronzeSlime": { + "NAME": "청동 슬라임", + "DESCRIPTION": [ + "내 턴 시작 시 적 전체에게 피해를 #b", + " 주고 공격 했다면 이 청동 슬라임의 다음 공격 턴을 넘깁니다.", + "" + ] + }, + "Slimebound:AttackSlime": { + "NAME": "싸움꾼 슬라임", + "DESCRIPTION": [ + "내 턴 시작 시 피해를 #b", + " 만큼 #b2 번 줍니다." + ] + }, + "Slimebound:ScrapOozeSlime": { + "NAME": "날붙이 수액", + "DESCRIPTION": [ + "내 턴 시작 시 피해를 #b", + " 줍니다. NL #y흡수돼도 되살아날 수 있습니다." + ] + }, + "Slimebound:GreedOozeSlime": { + "NAME": "욕심쟁이 수액", + "DESCRIPTION": [ + "내 턴 시작 시 피해를 #b", + " 줍니다. NL #y흡수돼도 되살아날 수 있습니다." + ] + }, + "Slimebound:TorchHeadSlime": { + "NAME": "불머리 슬라임", + "DESCRIPTION": [ + "내 턴 시작 시 피해를 #b", + " 줍니다. 내 #y힘만큼 피해량이 증가합니다." + ] + }, + "Slimebound:CultistSlime": { + "NAME": "광신자 슬라임", + "DESCRIPTION": [ + "내 턴 시작 시 피해를 #b", + " 줍니다. 공격 후 피해량이 #b1 증가합니다." + ] + }, + "Slimebound:ShieldSlime": { + "NAME": "거머리 슬라임", + "DESCRIPTION": [ + "내 턴 시작 시 피해를 #b", + " 주고 #y방어도를 #b", + " 얻습니다." + ] + }, + "Slimebound:PoisonSlime": { + "NAME": "특공대 슬라임", + "DESCRIPTION": [ + "내 턴 시작 시 적 전체에게 피해를 #b", + " 줍니다." + ] + }, + "Slimebound:SlimingSlime": { + "NAME": "진흙탕 슬라임", + "DESCRIPTION": [ + "내 턴 시작 시 피해를 #b", + " 주고 #y점액을 #b", + " 부여합니다." + ] + }, + "Slimebound:HexSlime": { + "NAME": "유령불꽃 슬라임", + "DESCRIPTION": [ + "내 턴 시작 시 피해를 #b", + " 주고 #y영혼화상을 #b", + " 부여합니다." + ] + }, + "Slimebound:ChampSlime": { + "NAME": "욕쟁이 슬라임", + "DESCRIPTION": [ + "내 턴 시작 시 피해를 #b", + " 주고 #y취약을 #b", + " 부여합니다." + ] + }, + "Slimebound:SlowingSlime": { + "NAME": "시간 슬라임", + "DESCRIPTION": [ + "내 턴 시작 시 피해를 #b", + " 주고 #y약화를 #b", + " 부여합니다." + ] + }, + "Slimebound:ProtectorSlime": { + "NAME": "가시 슬라임", + "DESCRIPTION": [ + "내 턴 시작 시 피해를 #b", + " 주고 #y가시를 #b", + " 얻습니다. 이번 턴이 끝날 때 이 효과로 얻은 #y가시를 잃습니다." + ] + }, + "Slimebound:DrawingSlime": { + "NAME": "고대의 슬라임", + "DESCRIPTION": [ + "내 턴 시작 시 피해를 #b", + " 주고 카드를 #b", + " 장 뽑아줍니다. 카드를 뽑아주는 효과는 #y잠재력으로 증가하지 않습니다." + ] + }, + "Slimebound:DarklingSlime": { + "NAME": "어두미 슬라임", + "DESCRIPTION": [ + "내 턴 시작 시 피해를 #b", + " 줍니다. #y명령 시 모든 #y어두미 슬라임이 공격합니다." + ] + } } \ No newline at end of file diff --git a/src/main/resources/slimeboundResources/localization/kor/PotionStrings.json b/src/main/resources/slimeboundResources/localization/kor/PotionStrings.json index 5e15479926..9411dfec61 100644 --- a/src/main/resources/slimeboundResources/localization/kor/PotionStrings.json +++ b/src/main/resources/slimeboundResources/localization/kor/PotionStrings.json @@ -1,30 +1,30 @@ -{ - "Slimebound:SlimedPotion": { - "NAME": "점액 병", - "DESCRIPTIONS": [ - "#y점액을 #b", - " 부여합니다." - ] - }, - "Slimebound:SlimyTonguePotion": { - "NAME": "점액질 엘릭서", - "DESCRIPTIONS": [ - "이번 전투에서 #y점액을 부여할 때마다 #b", - " 만큼 더 부여합니다." - ] - }, - "Slimebound:SpawnSlimePotion": { - "NAME": "병 속의 군단", - "DESCRIPTIONS": [ - "#y전문가를 포함한 무작위 슬라임을 #b", - " 마리 생성합니다." - ] - }, - "Slimebound:ThreeZeroPotion": { - "NAME": "수액 충전 음료", - "DESCRIPTIONS": [ - "비용이 0인 무작위 카드를 #b", - " 장 얻습니다." - ] - } -} +{ + "Slimebound:SlimedPotion": { + "NAME": "점액 병", + "DESCRIPTIONS": [ + "#y점액을 #b", + " 부여합니다." + ] + }, + "Slimebound:SlimyTonguePotion": { + "NAME": "점액질 엘릭서", + "DESCRIPTIONS": [ + "이번 전투에서 #y점액을 부여할 때마다 #b", + " 더 부여합니다." + ] + }, + "Slimebound:SpawnSlimePotion": { + "NAME": "병 속의 군단", + "DESCRIPTIONS": [ + "#y전문가를 포함한 무작위 슬라임 #b", + " 마리로 #y분열합니다." + ] + }, + "Slimebound:ThreeZeroPotion": { + "NAME": "수액 충전 음료", + "DESCRIPTIONS": [ + "비용이 0인 무작위 카드를 #b", + " 장 얻습니다." + ] + } +} diff --git a/src/main/resources/slimeboundResources/localization/kor/PowerStrings.json b/src/main/resources/slimeboundResources/localization/kor/PowerStrings.json index 63830393ed..98d0f47bb9 100644 --- a/src/main/resources/slimeboundResources/localization/kor/PowerStrings.json +++ b/src/main/resources/slimeboundResources/localization/kor/PowerStrings.json @@ -1,521 +1,521 @@ -{ - "Slimebound:PotencyPower": { - "NAME": "잠재력", - "DESCRIPTIONS": [ - "생성된 슬라임의 피해량을 #b", - " 증가시킵니다. 각 슬라임의 고유 효과를 #b", - " 증가시킵니다." - ] - }, - "Slimebound:SlimedPower": { - "NAME": "점액", - "DESCRIPTIONS": [ - "해당 적을 #y공격 시 피해량이 #b", - " 증가하고 모든 #y점액을 소모합니다." - ] - }, - "Slimebound:PreventTackleDamagePower": { - "NAME": "보호", - "DESCRIPTIONS": [ - "#y태클 카드를 사용하여 입는 반동 피해를 #b", - " 번 받지 않습니다." - ] - }, - "Slimebound:SplitDailyTriggerPower": { - "NAME": "슬라임 분열", - "DESCRIPTIONS": [ - "체력이 #b50% 이하라면 체력이 ", - "인 슬라임 #b2 마리로 분열합니다." - ] - }, - "Slimebound:SplitDailyPower": { - "NAME": "분열 중", - "DESCRIPTIONS": [ - "이 적은 이번 턴에 분열합니다." - ] - }, - "Slimebound:BuffAttackSlimesPower": { - "NAME": "강화: 싸움꾼", - "DESCRIPTIONS": [ - "#y싸움꾼 슬라임의 피해량이 #b", - " 증가합니다." - ] - }, - "Slimebound:BuffPoisonSlimesPower": { - "NAME": "강화: 산성", - "DESCRIPTIONS": [ - "#y산성 슬라임이 부여하는 중독이 #b", - " 만큼 추가로 부여됩니다." - ] - }, - "Slimebound:BuffSlimingSlimesPower": { - "NAME": "강화: 진흙탕", - "DESCRIPTIONS": [ - "#y진흙탕 슬라임이 부여하는 #y점액이 #b", - " 만큼 추가로 부여됩니다." - ] - }, - "Slimebound:BuffShieldSlimesPower": { - "NAME": "강화: 거머리", - "DESCRIPTIONS": [ - "#y거머리 슬라임의 피해량이 #b", - " 증가합니다." - ] - }, - "Slimebound:HexSlimePerTurnPower": { - "NAME": "육각의 힘", - "DESCRIPTIONS": [ - "다음 턴 시작 시 #y유령불꽃 슬라임을 생성합니다.", - "다음 #b", - " 턴 동안 시작 시 #y유령불꽃 슬라임을 생성합니다." - ] - }, - "Slimebound:ProtectTheBoss": { - "NAME": "두목을 지켜라", - "DESCRIPTIONS": [ - "다음 번 적의 공격으로 체력 잃는 것을 막아줍니다. 대신 최근에 생성한 슬라임을 #y흡수 합니다.", - "적의 공격으로 체력 잃는 것을 다음 #b", - " 번까지 막아줍니다. 대신 최근에 생성한 슬라임을 #y흡수 합니다." - ] - }, - "Slimebound:SplitForLessPower": { - "NAME": "효과적인 끈적이", - "DESCRIPTIONS": [ - "#y분열에 소모되는 체력을 #b", - " 줄입니다. 매 턴 무작위 #y분열 카드를 #b", - " 장 얻습니다.", - " 장 얻습니다." - ] - }, - "Slimebound:ComboAttackPower": { - "NAME": "시범을 보여주지", - "DESCRIPTIONS": [ - "가장 최근에 생성된 슬라임이 매 턴 처음으로 카드를 사용한 대상에게 공격합니다.", - "가장 최근에 생성된 슬라임이 매 턴 #b", - " 번까지 카드를 사용한 대상에게 공격합니다.", - " NL 이 효과는 이번 턴에 #b", - " 번 더 발동할 수 있습니다.", - " 번 더 발동할 수 있습니다.", - " NL 이번 턴에 더 이상 발동하지 않습니다." - ] - }, - "Slimebound:RetainCardsOneTurnPower": { - "NAME": "카드 준비", - "DESCRIPTIONS": [ - "이번 턴에 카드를 #b", - " 장 보존 합니다.", - " 장 보존 합니다." - ] - }, - "Slimebound:EnergizedSlimeboundPower": { - "NAME": "원기왕성", - "DESCRIPTIONS": [ - "다음 턴에 추가 [E] 를 #b", - " 번 얻습니다.", - " 번 얻습니다.", - " - TRANSLATOR NOTE: - The above line is for plural if needed to distinguish from singular." - ] - }, - "Slimebound:SelfFormingGooPower": { - "NAME": "재형성", - "DESCRIPTIONS": [ - "슬라임을 #y흡수할 때마다 #y힘을 #b", - " 얻습니다." - ] - }, - "Slimebound:SelfFormingGooPowerPlus": { - "NAME": "재형성+", - "DESCRIPTIONS": [ - "슬라임을 #y흡수할 때마다 #y민첩을 #b", - " 얻습니다." - ] - }, - "Slimebound:LoseSlimesPower": { - "NAME": "과로", - "DESCRIPTIONS": [ - "다음 턴에 모든 슬라임을 #y흡수 합니다.", - " 턴 후 모든 슬라임을 #y흡수 합니다." - ] - }, - "Slimebound:TackleModifyDamagePower": { - "NAME": "엉망진창", - "DESCRIPTIONS": [ - "이름에 \"태클\" 이 붙은 카드 하나당 피해량이 #b", - " 증가합니다." - ] - }, - "Slimebound:LoseThornsPower": { - "NAME": "사그라드는 가시", - "DESCRIPTIONS": [ - "턴 시작 시 #y가시를 #b", - " 잃습니다." - ] - }, - "Slimebound:SlimedThornsPower": { - "NAME": "살아있는 벽", - "DESCRIPTIONS": [ - "이번 턴에 공격자에게 #y점액을 #b", - " 부여합니다." - ] - }, - "Slimebound:PreventSlimeDecayPower": { - "NAME": "점액 투성이", - "DESCRIPTIONS": [ - "다음 #y공격은 #y점액을 소모하지 않고 #y점액 효과가 적용됩니다.", - "다음 #y공격은 #b", - " 번까지 #y점액을 소모하지 않고 #y점액 효과가 적용됩니다." - ] - }, - "Slimebound:DuplicatedFormPower": { - "NAME": "복제의 형상", - "DESCRIPTIONS": [ - "매 턴 처음으로 적에게 사용한 카드가 2번 사용됩니다.", - "매 턴 처음으로 적에게 사용한 카드 #b", - " 장이 2번 사용됩니다." - ] - }, - "Slimebound:DuplicatedFormNoHealPower": { - "NAME": "분열", - "DESCRIPTIONS": [ - "최대 체력이 일시적으로 #b", - " 감소합니다." - ] - }, - "Slimebound:DuplicatedFormEnergyPower": { - "NAME": "다 같이 한 몸", - "DESCRIPTIONS": [ - "매 턴 #b", - " [E] 를 얻습니다." - ] - }, - "Slimebound:GluttonyPower": { - "NAME": "폭식", - "DESCRIPTIONS": [ - "매 턴 처음으로 #y소비했을 때 #y핥기 카드를 1장 얻습니다.", - "매 턴 다음 #b", - " 번까지 #y소비했을 때 #y핥기 카드를 1장 얻습니다.", - " NL 이 효과는 이번 턴에 #b", - " 번 더 발동할 수 있습니다.", - " 번 더 발동할 수 있습니다.", - " NL 이번 턴에 더 이상 발동하지 않습니다." - ] - }, - "Slimebound:GluttonyPowerUpgraded": { - "NAME": "폭식+", - "DESCRIPTIONS": [ - "매 턴 무작위 #y강화된 #y핥기 카드를 #b", - " 장 얻습니다.", - " 장 얻습니다." - ] - }, - "Slimebound:PoisonThornsPower": { - "NAME": "산성 점액", - "DESCRIPTIONS": [ - "#y점액을 보유한 적을 공격하면 중독을 #b", - " 부여합니다." - ] - }, - "Slimebound:SlimeRitualPower": { - "NAME": "의식", - "DESCRIPTIONS": [ - "매 턴 시작 시 #y힘을 #b", - " 얻습니다." - ] - }, - "Slimebound:RecyclingPower": { - "NAME": "재수거", - "DESCRIPTIONS": [ - "내 턴 시작 시 #y소멸된 카드 더미에서 무작위 #y핥기 카드를 #b", - " 장 가져옵니다.", - " 장 가져옵니다." - ] - }, - "Slimebound:RecyclingPowerUpgraded": { - "NAME": "재수거+", - "DESCRIPTIONS": [ - "체력을 #b", - " 회복하고 #y소멸된 비용 0 카드를 1장 가져옵니다." - ] - }, - "Slimebound:AcidTonguePower": { - "NAME": "산성 혓바닥", - "DESCRIPTIONS": [ - "#y점액을 부여 부여할 때마다 #y중독을 #b", - " 부여합니다." - ] - }, - "Slimebound:AcidTonguePowerUpgraded": { - "NAME": "점액질 혓바닥", - "DESCRIPTIONS": [ - "부여하는 #y점액이 #b", - " 증가합니다." - ] - }, - "Slimebound:SelfDamageSlimedPower": { - "NAME": "흩어진 끈적이", - "DESCRIPTIONS": [ - "체력을 잃을 때마다 무작위 적에게 #y점액을 #b", - " 부여합니다." - ] - }, - "Slimebound:TackleBuffPower": { - "NAME": "공격적인 태클", - "DESCRIPTIONS": [ - "이름에 \"태클\" 이 붙은 카드 하나당 피해량이 #b", - " 증가합니다." - ] - }, - "Slimebound:PolyBeamAgainPower": { - "NAME": "교차 광선", - "DESCRIPTIONS": [ - "다음 내 턴 시작 시 #y다중 #y광선 을 사용합니다. ", - " 다음 #b", - " 턴 동안 내 턴 시작 시 #y다중 #y광선 을 사용합니다." - ] - }, - "Slimebound:PolyBeamAgainPowerUpgraded": { - "NAME": "교차 광선+", - "DESCRIPTIONS": [ - "다음 내 턴 시작 시 #y다중 #y광선+ 을 사용합니다. ", - " 다음 #b", - " 턴 동안 내 턴 시작 시 #y다중 #y광선+ 을 사용합니다." - ] - }, - "Slimebound:FirmFortitudePower": { - "NAME": "우리의 고통을 맛봐라", - "DESCRIPTIONS": [ - "다음 내 턴에 체력을 잃으면 적이 대신 피해를 받습니다.", - "다음 #b", - " 번동안 내 턴에 체력을 잃으면 적이 대신 피해를 받습니다.", - " NL 이 효과는 이번 턴에 #b", - " 번 더 발동할 수 있습니다.", - " 번 더 발동할 수 있습니다.", - " NL 이번 턴에 더 이상 발동하지 않습니다." - ] - }, - "Slimebound:NextTurnGainStrengthPower": { - "NAME": "힘 모으기", - "DESCRIPTIONS": [ - "다음 내 턴에 #y힘을 #b", - " 얻습니다." - ] - }, - "Slimebound:NextTurnGainSlimeCrush": { - "NAME": "으깨기 준비", - "DESCRIPTIONS": [ - "다음 내 턴에 #g슬라임 #g으깬다!!! 를 얻습니다.", - "다음 내 턴에 #g슬라임 #g으깬다!!!+ 를 얻습니다.", - "다음 내 턴에 #b", - " 장 #g슬라임 #g으깬다!!! 를 복사하여 얻습니다.", - " 장 #g슬라임 #g으깬다!!!+ 를 복사하여 얻습니다." - ] - }, - "Slimebound:StunnedPower": { - "NAME": "완전 탈진", - "DESCRIPTIONS": [ - "내 다음 턴을 강제로 넘깁니다.", - "내 다음 #b", - " 턴을 강제로 넘깁니다." - ] - }, - "Slimebound:NextTurnGainHyperBeam": { - "NAME": "빔 준비 중", - "DESCRIPTIONS": [ - "다음 내 턴에 #y초강력 #y광선 을 얻습니다.", - "다음 내 턴에 #y초강력 #y광선 을 #b", - " 장 복사하여 얻습니다." - ] - }, - "Slimebound:NextTurnGainDivider": { - "NAME": "분할 준비", - "DESCRIPTIONS": [ - "다음 내 턴에 #y분할을 얻습니다.", - "다음 내 턴에 #y분할을 #b", - " 장 복사하여 얻습니다." - ] - }, - "Slimebound:StudyAutomatonPower": { - "NAME": "자동인형 연구", - "DESCRIPTIONS": [ - "내 다음 턴에 무작위 자동인형 카드를 1장 얻습니다.", - "내 다음 #b", - " 턴 동안 무작위 자동인형 카드를 1장 얻습니다." - ] - }, - "Slimebound:StudyAutomatonPowerUpgraded": { - "NAME": "자동인형 연구+", - "DESCRIPTIONS": [ - "내 다음 턴에 무작위 강화된 자동인형 카드를 1장 얻습니다.", - "내 다음 #b", - " 턴 동안 무작위 강화된 자동인형 카드를 1장 얻습니다." - ] - }, - "Slimebound:StudyAwakenedPower": { - "NAME": "깨어난 자 연구", - "DESCRIPTIONS": [ - "내 다음 턴에 무작위 깨어난 자 카드를 1장 얻습니다.", - "내 다음 #b", - " 턴 동안 무작위 깨어난 자 카드를 1장 얻습니다." - ] - }, - "Slimebound:StudyAwakenedPowerUpgraded": { - "NAME": "깨어난자 연구+", - "DESCRIPTIONS": [ - "내 다음 턴에 무작위 강화된 깨어난 자 카드를 1장 얻습니다.", - "내 다음 #b", - " 턴 동안 무작위 강화된 깨어난 자 카드를 1장 얻습니다." - ] - }, - "Slimebound:AwakenedOnePower": { - "NAME": "어둠의 의식", - "DESCRIPTIONS": [ - "이 적이 이번 턴에 공격하지 않으면 #y힘을 #b", - " 을 얻습니다." - ] - }, - "Slimebound:StudyChampPower": { - "NAME": "투사 연구", - "DESCRIPTIONS": [ - "내 다음 턴에 무작위 투사 카드를 1장 얻습니다.", - "내 다음 #b", - " 턴 동안 무작위 투사 카드를 1장 얻습니다." - ] - }, - "Slimebound:StudyChampPowerUpgraded": { - "NAME": "투사 연구+", - "DESCRIPTIONS": [ - "내 다음 턴에 무작위 강화된 투사 카드를 1장 얻습니다.", - "내 다음 #b", - " 턴 동안 무작위 강화된 투사 카드를 1장 얻습니다." - ] - }, - "Slimebound:StudyCollectorPower": { - "NAME": "수집가 연구", - "DESCRIPTIONS": [ - "내 다음 턴에 무작위 수집가 카드를 1장 얻습니다.", - "내 다음 #b", - " 턴 동안 무작위 수집가 카드를 1장 얻습니다." - ] - }, - "Slimebound:StudyCollectorPowerUpgraded": { - "NAME": "수집가 연구+", - "DESCRIPTIONS": [ - "내 다음 턴에 무작위 강화된 수집가 카드를 1장 얻습니다.", - "내 다음 #b", - " 턴 동안 무작위 강화된 수집가 카드를 1장 얻습니다." - ] - }, - "Slimebound:StudyGuardianPower": { - "NAME": "수호자 연구", - "DESCRIPTIONS": [ - "내 다음 턴에 무작위 수호자 카드를 1장 얻습니다.", - "내 다음 #b", - " 턴 동안 무작위 수호자 카드를 1장 얻습니다." - ] - }, - "Slimebound:StudyGuardianPowerUpgraded": { - "NAME": "수호자 연구+", - "DESCRIPTIONS": [ - "내 다음 턴에 무작위 강화된 수호자 카드를 1장 얻습니다.", - "내 다음 #b", - " 턴 동안 무작위 강화된 수호자 카드를 1장 얻습니다." - ] - }, - "Slimebound:StudyHexaghostPower": { - "NAME": "육각령 연구", - "DESCRIPTIONS": [ - "내 다음 턴에 무작위 육각령 카드를 1장 얻습니다.", - "내 다음 #b", - " 턴 동안 무작위 육각령 카드를 1장 얻습니다." - ] - }, - "Slimebound:StudyHexaghostPowerUpgraded": { - "NAME": "육각령 연구+", - "DESCRIPTIONS": [ - "내 다음 턴에 무작위 강화된 육각령 카드를 1장 얻습니다.", - "내 다음 #b", - " 턴 동안 무작위 강화된 육각령 카드를 1장 얻습니다." - ] - }, - "Slimebound:StudyShapesPower": { - "NAME": "도누 & 데카 연구", - "DESCRIPTIONS": [ - "내 다음 턴에 무작위 도누 & 데카 카드를 1장 얻습니다.", - "내 다음 #b", - " 턴 동안 무작위 도누 & 데카 카드를 1장 얻습니다." - ] - }, - "Slimebound:StudyShapesPowerUpgraded": { - "NAME": "도누 & 데카 연구+", - "DESCRIPTIONS": [ - "내 다음 턴에 무작위 강화된 도누 & 데카 카드를 1장 얻습니다.", - "내 다음 #b", - " 턴 동안 무작위 강화된 도누 & 데카 카드를 1장 얻습니다." - ] - }, - "Slimebound:StudyTimeEaterPower": { - "NAME": "시간 포식자 연구", - "DESCRIPTIONS": [ - "내 다음 턴에 무작위 시간 포식자 카드를 1장 얻습니다.", - "내 다음 #b", - " 턴 동안 무작위 시간 포식자 카드를 1장 얻습니다." - ] - }, - "Slimebound:StudyTimeEaterPowerUpgraded": { - "NAME": "시간 포식자 연구+", - "DESCRIPTIONS": [ - "내 다음 턴에 무작위 강화된 시간 포식자 카드를 1장 얻습니다.", - "내 다음 #b", - " 턴 동안 무작위 강화된 시간 포식자 카드를 1장 얻습니다." - ] - }, - "Slimebound:GreedRespawnPower": { - "NAME": "욕심쟁이 수액 회복 중", - "DESCRIPTIONS": [ - "내 턴이 끝나면 #y욕심쟁이 #y수액 이 되살아납니다." - ] - }, - "Slimebound:ScrapRespawnPower": { - "NAME": "날붙이 수액 회복 중", - "DESCRIPTIONS": [ - "내 턴이 끝나면 #y날붙이 #y수액 이 되살아납니다." - ] - }, - "Slimebound:BuffSecondarySlimeEffectsPower": { - "NAME": "졸개 대장", - "DESCRIPTIONS": [ - "#y명령하면 한 번 더 #y명령합니다.", - "#y명령하면 #b", - " 번 더 #y명령합니다." - ] - }, - "Slimebound:TackleSelfDamagePreventPower": { - "NAME": "무모함", - "DESCRIPTIONS": [ - "이름에 \"태클\" 이 붙은 카드의 피해량이 #b", - " 증가합니다." - ] - }, - "Slimebound:GoopArmorPower": { - "NAME": "끈적이 갑옷", - "DESCRIPTIONS": [ - "#y점액을 보유한 적을 #y공격할 때마다 #y방어도를 #b", - " 얻습니다." - ] - }, - "Slimebound:CommandOnPlayPower": { - "NAME": "집결", - "DESCRIPTIONS": [ - "이번 턴에 다음으로 카드를 사용하면 1번 #y명령합니다.", - "이번 턴에 다음 #b", - " 번까지 카드를 사용할 때마다 1번 #y명령합니다." - ] - }, - "Slimebound:GoopPerTurnPower": { - "NAME": "점액 목욕", - "DESCRIPTIONS": [ - "적 턴 시작 시 #y점액을 #b", - " 부여합니다." - ] - } -} +{ + "Slimebound:PotencyPower": { + "NAME": "잠재력", + "DESCRIPTIONS": [ + "생성된 슬라임의 피해량을 #b", + " 증가시킵니다. 각 슬라임의 고유 효과를 #b", + " 증가시킵니다." + ] + }, + "Slimebound:SlimedPower": { + "NAME": "점액", + "DESCRIPTIONS": [ + "해당 적을 #y공격 시 피해량이 #b", + " 증가하고 모든 #y점액을 #y소비합니다." + ] + }, + "Slimebound:PreventTackleDamagePower": { + "NAME": "보호", + "DESCRIPTIONS": [ + "#y태클 카드를 사용해 입는 반동 피해를 #b", + " 번 받지 않습니다." + ] + }, + "Slimebound:SplitDailyTriggerPower": { + "NAME": "슬라임 분열", + "DESCRIPTIONS": [ + "체력이 #b50% 이하라면 체력이 ", + "인 슬라임 #b2 마리로 #y분열합니다." + ] + }, + "Slimebound:SplitDailyPower": { + "NAME": "분열 중", + "DESCRIPTIONS": [ + "이 적은 이번 턴에 분열합니다." + ] + }, + "Slimebound:BuffAttackSlimesPower": { + "NAME": "강화: 싸움꾼", + "DESCRIPTIONS": [ + "#y싸움꾼 슬라임의 피해량이 #b", + " 증가합니다." + ] + }, + "Slimebound:BuffPoisonSlimesPower": { + "NAME": "강화: 산성", + "DESCRIPTIONS": [ + "#y산성 슬라임이 부여하는 중독이 #b", + " 증가합니다." + ] + }, + "Slimebound:BuffSlimingSlimesPower": { + "NAME": "강화: 진흙탕", + "DESCRIPTIONS": [ + "#y진흙탕 슬라임이 부여하는 #y점액이 #b", + " 증가합니다." + ] + }, + "Slimebound:BuffShieldSlimesPower": { + "NAME": "강화: 거머리", + "DESCRIPTIONS": [ + "#y거머리 슬라임의 피해량이 #b", + " 증가합니다." + ] + }, + "Slimebound:HexSlimePerTurnPower": { + "NAME": "육각의 힘", + "DESCRIPTIONS": [ + "내 다음 턴 시작 시 #y유령불꽃 슬라임을 생성합니다.", + "내 다음 #b", + " 턴 동안 턴 시작 시 #y유령불꽃 슬라임을 생성합니다." + ] + }, + "Slimebound:ProtectTheBoss": { + "NAME": "두목을 지켜라", + "DESCRIPTIONS": [ + "다음 번 적의 공격으로 체력 잃는 것을 막아줍니다. 대신 최근에 생성한 슬라임을 #y흡수합니다.", + "적의 공격으로 체력 잃는 것을 #b", + " 번 막아줍니다. 대신 최근에 생성한 슬라임을 #y흡수합니다." + ] + }, + "Slimebound:SplitForLessPower": { + "NAME": "효과적인 끈적이", + "DESCRIPTIONS": [ + "#y분열에 소모되는 체력을 #b", + " 줄입니다. 매 턴 무작위 #y분열 카드를 #b", + " 장 얻습니다.", + " 장 얻습니다." + ] + }, + "Slimebound:ComboAttackPower": { + "NAME": "시범을 보여주지", + "DESCRIPTIONS": [ + "가장 최근에 생성된 슬라임이 매 턴 처음으로 카드를 사용한 대상에게 공격합니다.", + "가장 최근에 생성된 슬라임이 매 턴 최대 #b", + " 번 카드를 사용한 대상에게 공격합니다.", + " NL 이 효과는 이번 턴에 #b", + " 번 더 발동할 수 있습니다.", + " 번 더 발동할 수 있습니다.", + " NL 이번 턴에 더 이상 발동하지 않습니다." + ] + }, + "Slimebound:RetainCardsOneTurnPower": { + "NAME": "카드 준비", + "DESCRIPTIONS": [ + "이번 턴에 카드를 #b", + " 장 #y보존합니다.", + " 장 #y보존합니다." + ] + }, + "Slimebound:EnergizedSlimeboundPower": { + "NAME": "에너지 충전", + "DESCRIPTIONS": [ + "다음 턴에 에너지를 #b", + " 얻습니다.", + " 얻습니다.", + " - TRANSLATOR NOTE: - The above line is for plural if needed to distinguish from singular." + ] + }, + "Slimebound:SelfFormingGooPower": { + "NAME": "재형성", + "DESCRIPTIONS": [ + "슬라임을 #y흡수할 때마다 #y힘을 #b", + " 얻습니다." + ] + }, + "Slimebound:SelfFormingGooPowerPlus": { + "NAME": "재형성+", + "DESCRIPTIONS": [ + "슬라임을 #y흡수할 때마다 #y민첩을 #b", + " 얻습니다." + ] + }, + "Slimebound:LoseSlimesPower": { + "NAME": "과로", + "DESCRIPTIONS": [ + "다음 턴에 모든 슬라임을 #y흡수합니다.", + " 턴 후 모든 슬라임을 #y흡수합니다." + ] + }, + "Slimebound:TackleModifyDamagePower": { + "NAME": "엉망진창", + "DESCRIPTIONS": [ + "이름에 \"태클\" 이 붙은 카드 하나당 피해량이 #b", + " 증가합니다." + ] + }, + "Slimebound:LoseThornsPower": { + "NAME": "사그라드는 가시", + "DESCRIPTIONS": [ + "내 다음 턴 시작 시 #y가시를 #b", + " 잃습니다." + ] + }, + "Slimebound:SlimedThornsPower": { + "NAME": "살아있는 벽", + "DESCRIPTIONS": [ + "이번 턴에 공격자에게 #y점액을 #b", + " 부여합니다." + ] + }, + "Slimebound:PreventSlimeDecayPower": { + "NAME": "점액 투성이", + "DESCRIPTIONS": [ + "다음 #y공격은 #y점액을 소모하지 않고 #y점액 효과가 적용됩니다.", + "최대 #b", + " 번 다음 #y공격은 #y점액을 소모하지 않고 #y점액 효과가 적용됩니다." + ] + }, + "Slimebound:DuplicatedFormPower": { + "NAME": "복제의 형상", + "DESCRIPTIONS": [ + "매 턴 처음으로 적에게 사용한 카드가 #b2 번 사용됩니다.", + "매 턴 처음으로 적에게 사용한 카드 #b", + " 장이 #b2 번 사용됩니다." + ] + }, + "Slimebound:DuplicatedFormNoHealPower": { + "NAME": "분열", + "DESCRIPTIONS": [ + "최대 체력이 일시적으로 #b", + " 감소합니다." + ] + }, + "Slimebound:DuplicatedFormEnergyPower": { + "NAME": "다 같이 한 몸", + "DESCRIPTIONS": [ + "내 턴 시작 시 에너지를 #b", + " 얻습니다." + ] + }, + "Slimebound:GluttonyPower": { + "NAME": "폭식", + "DESCRIPTIONS": [ + "매 턴 처음으로 #y소비했을 때 #y핥기 카드를 얻습니다.", + "매 턴 최대 #b ", + " 번 #y소비했을 때 #y핥기 카드를 얻습니다.", + " NL 이 효과는 이번 턴에 #b", + " 번 더 발동할 수 있습니다.", + " 번 더 발동할 수 있습니다.", + " NL 이번 턴에 더 이상 발동하지 않습니다." + ] + }, + "Slimebound:GluttonyPowerUpgraded": { + "NAME": "폭식+", + "DESCRIPTIONS": [ + "매 턴 무작위 #y강화된 #y핥기 카드를 #b", + " 장 얻습니다.", + " 장 얻습니다." + ] + }, + "Slimebound:PoisonThornsPower": { + "NAME": "산성 점액", + "DESCRIPTIONS": [ + "#y점액을 보유한 적을 공격하면 #y중독을 #b", + " 부여합니다." + ] + }, + "Slimebound:SlimeRitualPower": { + "NAME": "의식", + "DESCRIPTIONS": [ + "매 턴 시작 시 #y힘을 #b", + " 얻습니다." + ] + }, + "Slimebound:RecyclingPower": { + "NAME": "재수거", + "DESCRIPTIONS": [ + "내 턴 시작 시 #y소멸된 카드 더미에서 무작위 #y핥기 카드를 #b", + " 장 가져옵니다.", + " 장 가져옵니다." + ] + }, + "Slimebound:RecyclingPowerUpgraded": { + "NAME": "재수거+", + "DESCRIPTIONS": [ + "체력을 #b", + " 회복하고 #y소멸된 비용이 #b0 인 카드를 #b1 장 가져옵니다." + ] + }, + "Slimebound:AcidTonguePower": { + "NAME": "산성 혓바닥", + "DESCRIPTIONS": [ + "#y점액을 부여할 때마다 #y중독을 #b", + " 부여합니다." + ] + }, + "Slimebound:AcidTonguePowerUpgraded": { + "NAME": "점액질 혓바닥", + "DESCRIPTIONS": [ + "부여하는 #y점액이 #b", + " 증가합니다." + ] + }, + "Slimebound:SelfDamageSlimedPower": { + "NAME": "흩어진 끈적이", + "DESCRIPTIONS": [ + "체력을 잃을 때마다 무작위 적에게 #y점액을 #b", + " 부여합니다." + ] + }, + "Slimebound:TackleBuffPower": { + "NAME": "공격적인 태클", + "DESCRIPTIONS": [ + "이름에 \"태클\" 이 붙은 카드 하나당 피해량이 #b", + " 증가합니다." + ] + }, + "Slimebound:PolyBeamAgainPower": { + "NAME": "교차 광선", + "DESCRIPTIONS": [ + "다음 내 턴 시작 시 #y다연발 #y광선을 사용합니다. ", + "다음 #b", + " 턴 동안 내 턴 시작 시 #y다연발 #y광선을 사용합니다." + ] + }, + "Slimebound:PolyBeamAgainPowerUpgraded": { + "NAME": "교차 광선+", + "DESCRIPTIONS": [ + "다음 내 턴 시작 시 #y다연발 #y광선+이 사용합니다. ", + "다음 #b", + " 턴 동안 내 턴 시작 시 #y다연발 #y광선+을 사용합니다." + ] + }, + "Slimebound:FirmFortitudePower": { + "NAME": "우리의 고통을 맛봐라", + "DESCRIPTIONS": [ + "내 턴에 다음으로 체력을 잃으면 적이 대신 피해를 받습니다.", + "#b", + " 번 다음으로 내 턴에 체력을 잃으면 적이 대신 피해를 받습니다.", + " NL 이 효과는 이번 턴에 #b", + " 번 더 발동할 수 있습니다.", + " 번 더 발동할 수 있습니다.", + " NL 이번 턴에 더 이상 발동하지 않습니다." + ] + }, + "Slimebound:NextTurnGainStrengthPower": { + "NAME": "힘 모으기", + "DESCRIPTIONS": [ + "다음 내 턴에 #y힘을 #b", + " 얻습니다." + ] + }, + "Slimebound:NextTurnGainSlimeCrush": { + "NAME": "으깨기 준비", + "DESCRIPTIONS": [ + "내 다음 턴에 #g슬라임 #g으깬다!!! 를 얻습니다.", + "내 다음 턴에 #g슬라임 #g으깬다!!!+ 를 얻습니다.", + "내 다음 턴에 #b", + " 장 #g슬라임 #g으깬다!!! 를 얻습니다.", + " 장 #g슬라임 #g으깬다!!!+ 를 얻습니다." + ] + }, + "Slimebound:StunnedPower": { + "NAME": "완전 탈진", + "DESCRIPTIONS": [ + "내 다음 턴을 강제로 넘깁니다.", + "내 다음 #b", + " 턴을 강제로 넘깁니다." + ] + }, + "Slimebound:NextTurnGainHyperBeam": { + "NAME": "빔 준비 중", + "DESCRIPTIONS": [ + "내 다음 턴에 #y파괴 #y광선을 얻습니다.", + "내 다음 턴에 #y파괴 #y광선을 #b", + " 장 얻습니다." + ] + }, + "Slimebound:NextTurnGainDivider": { + "NAME": "분할 준비", + "DESCRIPTIONS": [ + "내 다음 턴에 #y분할을 얻습니다.", + "내 다음 턴에 #y분할을 #b", + " 장 얻습니다." + ] + }, + "Slimebound:StudyAutomatonPower": { + "NAME": "자동인형 연구", + "DESCRIPTIONS": [ + "내 다음 턴 시작 시 무작위 #y청동 #y자동인형 카드를 #b1 장 얻습니다.", + "내 다음 #b ", + " 턴 동안 턴 시작 시 무작위 #y청동 #y자동인형 카드를 #b1 장 얻습니다." + ] + }, + "Slimebound:StudyAutomatonPowerUpgraded": { + "NAME": "자동인형 연구+", + "DESCRIPTIONS": [ + "내 다음 턴 시작 시 무작위 #y강화된 #y청동 #y자동인형 카드를 #b1 장 얻습니다.", + "내 다음 #b ", + " 턴 동안 턴 시작 시 무작위 #y강화된 #y청동 #y자동인형 카드를 #b1 장 얻습니다." + ] + }, + "Slimebound:StudyAwakenedPower": { + "NAME": "깨어난 자 연구", + "DESCRIPTIONS": [ + "내 다음 턴 시작 시 무작위 #y깨어난 #y자 카드를 #b1 장 얻습니다.", + "내 다음 #b ", + " 턴 동안 턴 시작 시 무작위 #y깨어난 #y자 카드를 #b1 장 얻습니다." + ] + }, + "Slimebound:StudyAwakenedPowerUpgraded": { + "NAME": "깨어난자 연구+", + "DESCRIPTIONS": [ + "내 다음 턴 시작 시 무작위 #y강화된 #y깨어난 #y자 카드를 #b1 장 얻습니다.", + "내 다음 #b ", + " 턴 동안 턴 시작 시 무작위 #y강화된 #y깨어난 #y자 카드를 #b1 장 얻습니다." + ] + }, + "Slimebound:AwakenedOnePower": { + "NAME": "어두운 의식", + "DESCRIPTIONS": [ + "이 적이 이번 턴에 공격하지 않으면 #y힘을 #b", + " 얻습니다." + ] + }, + "Slimebound:StudyChampPower": { + "NAME": "투사 연구", + "DESCRIPTIONS": [ + "내 다음 턴 시작 시 무작위 #y투사 카드를 #b1 장 얻습니다.", + "내 다음 #b ", + " 턴 동안 턴 시작 시 무작위 #y투사 카드를 #b1 장 얻습니다." + ] + }, + "Slimebound:StudyChampPowerUpgraded": { + "NAME": "투사 연구+", + "DESCRIPTIONS": [ + "내 다음 턴 시작 시 무작위 #y강화된 #y투사 카드를 #b1 장 얻습니다.", + "내 다음 #b ", + " 턴 동안 턴 시작 시 무작위 #y강화된 #y투사 카드를 #b1 장 얻습니다." + ] + }, + "Slimebound:StudyCollectorPower": { + "NAME": "수집가 연구", + "DESCRIPTIONS": [ + "내 다음 턴 시작 시 무작위 #y수집가 카드를 #b1 장 얻습니다.", + "내 다음 #b ", + " 턴 동안 턴 시작 시 무작위 #y수집가 카드를 #b1 장 얻습니다." + ] + }, + "Slimebound:StudyCollectorPowerUpgraded": { + "NAME": "수집가 연구+", + "DESCRIPTIONS": [ + "내 다음 턴 시작 시 무작위 #y강화된 #y수집가 카드를 #b1 장 얻습니다.", + "내 다음 #b ", + " 턴 동안 턴 시작 시 무작위 #y강화된 #y수집가 카드를 #b1 장 얻습니다." + ] + }, + "Slimebound:StudyGuardianPower": { + "NAME": "수호자 연구", + "DESCRIPTIONS": [ + "내 다음 턴 시작 시 무작위 #y수호자 카드를 #b1 장 얻습니다.", + "내 다음 #b ", + " 턴 동안 턴 시작 시 무작위 #y수호자 카드를 #b1 장 얻습니다." + ] + }, + "Slimebound:StudyGuardianPowerUpgraded": { + "NAME": "수호자 연구+", + "DESCRIPTIONS": [ + "내 다음 턴 시작 시 무작위 #y강화된 #y수호자 카드를 #b1 장 얻습니다.", + "내 다음 #b ", + " 턴 동안 턴 시작 시 무작위 #y강화된 #y수호자 카드를 #b1 장 얻습니다." + ] + }, + "Slimebound:StudyHexaghostPower": { + "NAME": "육각령 연구", + "DESCRIPTIONS": [ + "내 다음 턴 시작 시 무작위 #y육각령 카드를 #b1 장 얻습니다.", + "내 다음 #b ", + " 턴 동안 턴 시작 시 무작위 #y육각령 카드를 #b1 장 얻습니다." + ] + }, + "Slimebound:StudyHexaghostPowerUpgraded": { + "NAME": "육각령 연구+", + "DESCRIPTIONS": [ + "내 다음 턴 시작 시 무작위 #y강화된 #y육각령 카드를 #b1 장 얻습니다.", + "내 다음 #b ", + " 턴 동안 턴 시작 시 무작위 #y강화된 #y육각령 카드를 #b1 장 얻습니다." + ] + }, + "Slimebound:StudyShapesPower": { + "NAME": "도누 & 데카 연구", + "DESCRIPTIONS": [ + "내 다음 턴 시작 시 무작위 #y도누 #y& #y데카 카드를 #b1 장 얻습니다.", + "내 다음 #b ", + " 턴 동안 턴 시작 시 무작위 #y도누 #y& #y데카 카드를 #b1 장 얻습니다." + ] + }, + "Slimebound:StudyShapesPowerUpgraded": { + "NAME": "도누 & 데카 연구+", + "DESCRIPTIONS": [ + "내 다음 턴 시작 시 무작위 #y강화된 #y도누 #y& #y데카 카드를 #b1 장 얻습니다.", + "내 다음 #b ", + " 턴 동안 턴 시작 시 무작위 #y강화된 #y도누 #y& #y데카 카드를 #b1 장 얻습니다." + ] + }, + "Slimebound:StudyTimeEaterPower": { + "NAME": "시간 포식자 연구", + "DESCRIPTIONS": [ + "내 다음 턴 시작 시 무작위 #y시간 #y포식자 카드를 #b1 장 얻습니다.", + "내 다음 #b ", + " 턴 동안 턴 시작 시 무작위 #y시간 #y포식자 카드를 #b1 장 얻습니다." + ] + }, + "Slimebound:StudyTimeEaterPowerUpgraded": { + "NAME": "시간 포식자 연구+", + "DESCRIPTIONS": [ + "내 다음 턴 시작 시 무작위 #y강화된 #y시간 #y포식자 카드를 #b1 장 얻습니다.", + "내 다음 #b ", + " 턴 동안 턴 시작 시 무작위 #y강화된 #y시간 #y포식자 카드를 #b1 장 얻습니다." + ] + }, + "Slimebound:GreedRespawnPower": { + "NAME": "욕심쟁이 수액 회복 중", + "DESCRIPTIONS": [ + "내 턴이 끝나면 #y욕심쟁이 #y수액이 되살아납니다." + ] + }, + "Slimebound:ScrapRespawnPower": { + "NAME": "날붙이 수액 회복 중", + "DESCRIPTIONS": [ + "내 턴이 끝나면 #y날붙이 #y수액이 되살아납니다." + ] + }, + "Slimebound:BuffSecondarySlimeEffectsPower": { + "NAME": "졸개 대장", + "DESCRIPTIONS": [ + "#y명령하면 한 번 더 #y명령합니다.", + "#y명령하면 #b", + " 번 더 #y명령합니다." + ] + }, + "Slimebound:TackleSelfDamagePreventPower": { + "NAME": "무모함", + "DESCRIPTIONS": [ + "이름에 \"태클\" 이 붙은 카드의 피해량이 #b", + " 증가합니다." + ] + }, + "Slimebound:GoopArmorPower": { + "NAME": "끈적이 갑옷", + "DESCRIPTIONS": [ + "#y점액을 보유한 적을 #y공격할 때마다 #y방어도를 #b", + " 얻습니다." + ] + }, + "Slimebound:CommandOnPlayPower": { + "NAME": "집결", + "DESCRIPTIONS": [ + "이번 턴에 다음으로 카드를 사용하면 #y명령합니다.", + "이번 턴에 최대 #b", + " 번 카드를 사용할 때마다 #y명령합니다." + ] + }, + "Slimebound:GoopPerTurnPower": { + "NAME": "점액 목욕", + "DESCRIPTIONS": [ + "적 턴 시작 시 #y점액을 #b", + " 부여합니다." + ] + } +} diff --git a/src/main/resources/slimeboundResources/localization/kor/RelicStrings.json b/src/main/resources/slimeboundResources/localization/kor/RelicStrings.json index f0ba080071..2a976d7f28 100644 --- a/src/main/resources/slimeboundResources/localization/kor/RelicStrings.json +++ b/src/main/resources/slimeboundResources/localization/kor/RelicStrings.json @@ -1,106 +1,112 @@ -{ - "Slimebound:AbsorbEndCombat": { - "NAME": "끈끈이 심장", - "FLAVOR": "멋진 기분이다.", - "DESCRIPTIONS": [ - "#yslimeboundmod:소비했을 때마다 체력을 #b2 회복합니다. 전투마다 체력을 최대 #b8 회복할 수 있습니다." - ] - }, - "Slimebound:AbsorbEndCombatUpgraded": { - "NAME": "검은 끈끈이 심장", - "FLAVOR": "질척거리는 비밀.", - "DESCRIPTIONS": [ - "", - " 과 교체합니다.[] NL #yslimeboundmod:소비했을 때마다 체력을 #b3 회복합니다. 전투마다 체력을 최대 #b15 회복할 수 있습니다." - ] - }, - "Slimebound:SlimedTailRelic": { - "NAME": "슬라임 꼬리", - "FLAVOR": "전투 중에 적을 속이기 위한 가짜 꼬리로 점액으로 뒤덮여 있습니다.", - "DESCRIPTIONS": [ - "#y분열할 때마다 #y방어도를 #b", - " 얻습니다." - ] - }, - "Slimebound:PotencyRelic": { - "NAME": "노막의 돌", - "FLAVOR": "당신의 점액질 군단에게 선물하면 슬라임들이 춤추듯 움직입니다.", - "DESCRIPTIONS": [ - "전투 시작 시 #yslimeboundmod:잠재력을 #b1 얻습니다." - ] - }, - "Slimebound:DailySplitRelic": { - "NAME": "첨탑의 슬라임", - "FLAVOR": "계속계속 분열하고 있습니다. 이게 왜 유물일까요? 활성 모드 UI 목록에 커스텀 모드를 추가하는 방법을 못찾았기 때문이죠!", - "DESCRIPTIONS": [ - "#bCustom #bRun #bModifier NL All enemies form into two Slime enemies at #b50% HP." - ] - }, - "Slimebound:ScrapOozeRelic": { - "NAME": "날붙이 수액", - "FLAVOR": "", - "DESCRIPTIONS": [ - "전투 시작 시 #y날붙이 #y수액을 소환합니다. NL 휴식 장소에서 카드를 주면 등급에 따라 피해량이 증가하거나 감소합니다. NL 등급별 피해량 증감 : #y희귀 #b+2 NL #g특별 #b+1 NL 일반 #b-1 NL #r저주 #b-2 .", - "카드를 제거하고 날붙이 수액의 피해량을 조정합니다.", - "날붙이 수액에게 줄 게 없습니다.", - "날붙이" - ] - }, - "Slimebound:GreedOozeRelic": { - "NAME": "욕심쟁이 수액", - "FLAVOR": "첨탑에서 영혼을 탐욕스레 모으던 친구입니다.", - "DESCRIPTIONS": [ - "전투 시작 시 #y욕심쟁이 #y수액을 소환합니다. NL 휴식 장소에서 #b50 영혼을 뺏어가는 대신 #y욕심쟁이 #y수액의 피해량이 #b1 증가합니다." - ] - }, - "Slimebound:PreparedRelic": { - "NAME": "슬라임 수프", - "FLAVOR": "믿기지 않겠지만, 맛이 끔찍하긴 해도 건강에 매우 좋습니다.", - "DESCRIPTIONS": [ - "휴식 장소를 거친 다음 전투에서 비용이 #b0 인 #y준비 #y동작 카드를 얻습니다." - ] - }, - "Slimebound:AggressiveSlimeRelic": { - "NAME": "끈적이는 주민", - "FLAVOR": "집까지 따라왔으니까 데리고 다녀도 되겠지?", - "DESCRIPTIONS": [ - "전투 시작 시 #yslimeboundmod:싸움꾼_슬라임으로 #yslimeboundmod:분열합니다." - ] - }, - "Slimebound:SlimedSkullRelic": { - "NAME": "점액 투성이 해골", - "FLAVOR": "상태가 매우 안 좋은 스네코 해골입니다. 더럽고 끈적거리는 땟국물투성이입니다.", - "DESCRIPTIONS": [ - "#yslimeboundmod:점액을 부여할 때마다 #yslimeboundmod:점액을 #b", - " 추가로 부여합니다." - ] - }, - "Slimebound:MaxSlimesRelic": { - "NAME": "예레미아의 현수막", - "FLAVOR": "당신과 끈끈이 군단의 상징입니다.", - "DESCRIPTIONS": [ - "전투 시작 시 슬라임 슬롯을 #b1 개 얻고 무작위 슬라임으로 #yslimeboundmod:분열합니다." - ] - }, - "Slimebound:SelfDamagePreventRelic": { - "NAME": "보호구", - "FLAVOR": "공격이 최선의 방어인 법입니다.", - "DESCRIPTIONS": [ - "#yslimeboundmod:태클 카드를 사용할 때 입는 반동 피해를 #b3 줄입니다." - ] - }, - "Slimebound:TarBlob": { - "NAME": "타르 방울", - "FLAVOR": "나쁜 부류의 슬라임입니다.", - "DESCRIPTIONS": [ - "매 턴 시작 시 [E] 를 얻습니다. 전투 시작 시 슬라임 슬롯 #b하나 를 잃습니다." - ] - }, - "Slimebound:StickyStick": { - "NAME": "젤라틴 큐브", - "FLAVOR": "이봐요, 당신 몸에 딱 달라붙었다구요.", - "DESCRIPTIONS": [ - "2턴 동안 매 턴 #y상태이상 또는 #r저주를 뽑을 때마다 카드를 #b1 장 뽑습니다. #y공허를 뽑았다면 [E] 를 얻습니다." - ] - } -} +{ + "Slimebound:AbsorbEndCombat": { + "NAME": "끈끈이 심장", + "FLAVOR": "멋진 기분이다.", + "DESCRIPTIONS": [ + "#yslimeboundmod:소비할 때마다 체력을 #b", + " 회복합니다. 전투마다 체력을 최대 #b", + " 회복할 수 있습니다." + ] + }, + "Slimebound:AbsorbEndCombatUpgraded": { + "NAME": "검은 끈끈이 심장", + "FLAVOR": "질척거리는 비밀.", + "DESCRIPTIONS": [ + " ", + "과[] 교체합니다. NL #yslimeboundmod:소비할 때마다 체력을 #b", + " 회복합니다. 전투마다 체력을 최대 #b", + " 회복할 수 있습니다." + ] + }, + "Slimebound:SlimedTailRelic": { + "NAME": "슬라임 꼬리", + "FLAVOR": "전투 중에 적을 속이기 위한 가짜 꼬리로 점액으로 뒤덮여 있습니다.", + "DESCRIPTIONS": [ + "#y분열할 때마다 #y방어도를 #b", + " 얻습니다." + ] + }, + "Slimebound:PotencyRelic": { + "NAME": "노막의 돌", + "FLAVOR": "당신의 점액질 군단에게 선물하면 슬라임들이 춤추듯 움직입니다.", + "DESCRIPTIONS": [ + "전투 시작 시 #yslimeboundmod:잠재력을 #b1 얻습니다." + ] + }, + "Slimebound:DailySplitRelic": { + "NAME": "첨탑의 슬라임", + "FLAVOR": "계속계속 분열하고 있습니다. 이게 왜 유물일까요? 활성 모드 UI 목록에 커스텀 모드를 추가하는 방법을 못찾았기 때문이죠!", + "DESCRIPTIONS": [ + "#b커스텀 #b도전 #b조정 NL 모든 적이 체력이 #b50% 인 슬라임 두 마리가 됩니다." + ] + }, + "Slimebound:ScrapOozeRelic": { + "NAME": "날붙이 수액", + "FLAVOR": "", + "DESCRIPTIONS": [ + "전투 시작 시 #y날붙이 #y수액을 소환합니다. ( #y흡수돼도 되살아날 수 있습니다.) NL 휴식 장소에서 카드를 주면 등급에 따라 피해량이 증가하거나 감소합니다. NL 등급별 피해량 증감 : #y희귀 #b+2 NL #g특별 #b+1 NL 일반 #b-1 NL #r저주 #b-2 .", + "카드를 제거하고 날붙이 수액의 피해량을 조정합니다.", + "날붙이 수액에게 줄 게 없습니다.", + "날붙이" + ] + }, + "Slimebound:GreedOozeRelic": { + "NAME": "욕심쟁이 수액", + "FLAVOR": "첨탑에서 영혼을 탐욕스레 모으던 친구입니다.", + "DESCRIPTIONS": [ + "전투 시작 시 #y욕심쟁이 #y수액을 소환합니다. ( #y흡수돼도 되살아날 수 있습니다.) NL 휴식 장소에서 #y영혼을 #b50 뺏어가는 대신 #y욕심쟁이 #y수액의 피해량이 #b1 증가합니다." + ] + }, + "Slimebound:PreparedRelic": { + "NAME": "슬라임 수프", + "FLAVOR": "믿기지 않겠지만, 맛이 끔찍하긴 해도 건강에 매우 좋습니다.", + "DESCRIPTIONS": [ + "휴식 장소를 거친 다음 전투에서 비용이 #b0 인 #y준비 #y동작을 얻습니다." + ] + }, + "Slimebound:AggressiveSlimeRelic": { + "NAME": "끈적이는 주민", + "FLAVOR": "집까지 따라왔으니까 데리고 다녀도 되겠지?", + "DESCRIPTIONS": [ + "전투 시작 시 #yslimeboundmod:싸움꾼 #y슬라임으로 #yslimeboundmod:분열합니다." + ] + }, + "Slimebound:SlimedSkullRelic": { + "NAME": "점액 투성이 해골", + "FLAVOR": "상태가 매우 안 좋은 스네코 해골입니다. 더럽고 끈적거리는 땟국물투성이입니다.", + "DESCRIPTIONS": [ + "#yslimeboundmod:점액을 부여할 때마다 #yslimeboundmod:점액을 #b", + " 추가로 부여합니다." + ] + }, + "Slimebound:MaxSlimesRelic": { + "NAME": "예레미아의 현수막", + "FLAVOR": "당신과 끈끈이 군단의 상징입니다.", + "DESCRIPTIONS": [ + "전투 시작 시 슬라임 슬롯을 #b1 얻고 무작위 슬라임으로 #yslimeboundmod:분열합니다." + ] + }, + "Slimebound:SelfDamagePreventRelic": { + "NAME": "보호구", + "FLAVOR": "공격이 최선의 방어인 법입니다.", + "DESCRIPTIONS": [ + "#yslimeboundmod:태클 카드를 사용할 때 입는 반동 피해가 #b", + " 감소합니다." + ] + }, + "Slimebound:TarBlob": { + "NAME": "타르 방울", + "FLAVOR": "나쁜 부류의 슬라임입니다.", + "DESCRIPTIONS": [ + "내 턴 시작 시 [E] 를 얻습니다. 전투 시작 시 슬라임 슬롯을 #b1 잃습니다." + ] + }, + "Slimebound:StickyStick": { + "NAME": "젤라틴 큐브", + "FLAVOR": "이봐요, 당신 몸에 딱 달라붙었다구요.", + "DESCRIPTIONS": [ + "#y상태이상 또는 #r저주를 뽑을 때마다 #y방어도를 #b", + " 얻습니다." + ] + } +} diff --git a/src/main/resources/slimeboundResources/localization/kor/RunModStrings.json b/src/main/resources/slimeboundResources/localization/kor/RunModStrings.json index 9e26dfeeb6..22fdca1b26 100644 --- a/src/main/resources/slimeboundResources/localization/kor/RunModStrings.json +++ b/src/main/resources/slimeboundResources/localization/kor/RunModStrings.json @@ -1 +1 @@ -{} \ No newline at end of file +{} \ No newline at end of file diff --git a/src/main/resources/slimeboundResources/localization/kor/UIStrings.json b/src/main/resources/slimeboundResources/localization/kor/UIStrings.json index fb88326fea..3628fa00de 100644 --- a/src/main/resources/slimeboundResources/localization/kor/UIStrings.json +++ b/src/main/resources/slimeboundResources/localization/kor/UIStrings.json @@ -1,27 +1,27 @@ -{ - "slimeboundConfigMenuText": { - "TEXT": [ - "Allow other characters to encounter some Slimebound relics.", - "Allow other characters to encounter some Slimebound potions.", - "Allow other characters to encounter some Slimebound events.", - "모든 것을 해금합니다(비추천)" - ] - }, - "slimeboundmod:CommandMod": { - "TEXT": [ - " NL slimeboundmod:명령합니다." - ] - }, - "slimeboundmod:lickDescriptor": { - "TEXT": [ - "핥기", - "slimeboundmod:핥기. NL " - ] - }, - "slimeboundmod:tackleDescriptor": { - "TEXT": [ - "태클", - "slimeboundmod:태클. NL " - ] - } -} +{ + "slimeboundConfigMenuText": { + "TEXT": [ + "다른 캐릭터에게 대왕 슬라임의 유물이 등장하게 됩니다.", + "다른 캐릭터에게 대왕 슬라임의 포션이 등장하게 됩니다.", + "다른 캐릭터에게 대왕 슬라임의 이벤트가 등장하게 됩니다.", + "모든 것을 해금합니다 (비추천)." + ] + }, + "slimeboundmod:CommandMod": { + "TEXT": [ + " NL slimeboundmod:명령합니다." + ] + }, + "slimeboundmod:lickDescriptor": { + "TEXT": [ + "핥기", + "slimeboundmod:핥기. NL " + ] + }, + "slimeboundmod:tackleDescriptor": { + "TEXT": [ + "태클", + "slimeboundmod:태클. NL " + ] + } +} \ No newline at end of file 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 0000000000..8608431d0b --- /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 al azar 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! de daño adicional 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! 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! Vulnerable y !slime! slimeboundmod:Baba. NL Agota.", + "UPGRADE_DESCRIPTION": "Aplica !M! 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! 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! Débil y !slime! slimeboundmod:Baba a TODOS los enemigos. NL Agota.", + "UPGRADE_DESCRIPTION": "Aplica !M! 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 al azar !M! veces.", + "UPGRADE_DESCRIPTION": "Aplica !slime! slimeboundmod:Baba a un enemigo al azar !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 extracción. 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 extracción." + ] + }, + "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 extracción." + }, + "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 extracción. 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": "Retiene. 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": "Retiene. 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 0000000000..14cf083828 --- /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 0000000000..6fe9361055 --- /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 0000000000..5510182579 --- /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 0000000000..9e26dfeeb6 --- /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 0000000000..be60cad045 --- /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 0000000000..19689c5945 --- /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 0000000000..8d784aca45 --- /dev/null +++ b/src/main/resources/slimeboundResources/localization/spa/PowerStrings.json @@ -0,0 +1,524 @@ +{ + "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": [ + "Las Babas #yBrutas infligen #b", + " de daño adicional." + ] + }, + "Slimebound:BuffPoisonSlimesPower": { + "NAME": "Mejora: Ácida", + "DESCRIPTIONS": [ + "Las Babas #yVenenosas aplican #b", + " más de #yVeneno [REMOVE_SPACE]." + ] + }, + "Slimebound:BuffSlimingSlimesPower": { + "NAME": "Mejora: Lodosa", + "DESCRIPTIONS": [ + "Las Babas #yLodosas aplican #b", + " más de #yBaba [REMOVE_SPACE]." + ] + }, + "Slimebound:BuffShieldSlimesPower": { + "NAME": "Mejora: Absorbente", + "DESCRIPTIONS": [ + "Las Babas #yAbsorbentes infligen #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 #yDividida aleatoria a tu mano cada turno.", + " cartas #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.", + " - TRANSLATOR NOTE: - The above line is for plural if needed to distinguish from singular." + ] + }, + "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 al azar 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 0000000000..7f88d76e8b --- /dev/null +++ b/src/main/resources/slimeboundResources/localization/spa/RelicStrings.json @@ -0,0 +1,112 @@ +{ + "Slimebound:AbsorbEndCombat": { + "NAME": "Corazón de Baba", + "FLAVOR": "Me siento... viscoso.", + "DESCRIPTIONS": [ + "Cada vez que #yslimeboundmod:Consume [REMOVE_SPACE], sana #b", + " PV, hasta un máximo de #b", + " 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 #b", + " PV, hasta un máximo de #b", + " 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 #b", + " [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": [ + "Cuando robes una carta de #yEstado o una #rMaldición, roba #b1 carta. gana #b", + " #yBloqueo [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 0000000000..9e26dfeeb6 --- /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 0000000000..1ae328775c --- /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 b50d2e9a4c..ac412465bc 100644 --- a/src/main/resources/slimeboundResources/localization/zhs/CardStrings.json +++ b/src/main/resources/slimeboundResources/localization/zhs/CardStrings.json @@ -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/RelicStrings.json b/src/main/resources/slimeboundResources/localization/zhs/RelicStrings.json index df1eff76b7..b48c1290d6 100644 --- a/src/main/resources/slimeboundResources/localization/zhs/RelicStrings.json +++ b/src/main/resources/slimeboundResources/localization/zhs/RelicStrings.json @@ -3,7 +3,9 @@ "NAME": "黏液之心", "FLAVOR": "我可真时髦。", "DESCRIPTIONS": [ - " #yslimeboundmod:吞食黏液 时,回复 #b2 点生命。 NL (每场战斗最多 #b8 点)" + " #yslimeboundmod:吞食黏液 时,回复 #b", + " 点生命。 NL (每场战斗最多 #b", + " 点)" ] }, "Slimebound:AbsorbEndCombatUpgraded": { @@ -11,7 +13,9 @@ "FLAVOR": "黏浆中的秘密。", "DESCRIPTIONS": [ "替换 ", - " 。 NL #yslimeboundmod:吞食黏液 时,回复 #b3 点生命。 NL (每场战斗最多 #b15 点)" + " 。 NL #yslimeboundmod:吞食黏液 时,回复 #b", + " 点生命。 NL (每场战斗最多 #b", + " 点)" ] }, "Slimebound:SlimedTailRelic": { @@ -86,7 +90,8 @@ "NAME": "碰撞护具", "FLAVOR": "进攻是最好的防守!", "DESCRIPTIONS": [ - " #yslimeboundmod:冲撞 牌造成的自我伤害减少 #b3 点。" + " #yslimeboundmod:冲撞 牌造成的自我伤害减少 #b", + " 点。" ] }, "Slimebound:TarBlob": { @@ -100,7 +105,8 @@ "NAME": "粘胶立方体", "FLAVOR": "嘿,它粘到你身上了。", "DESCRIPTIONS": [ - "每回合前 #b2 次抽到 #y状态 或 #y诅咒 牌时再抽 #b1 张牌。若是 #y虚空 触发抽牌,再获得 [E] 。" + "每当你抽到一张 #y状态 或 #r诅咒 [REMOVE_SPACE]时,获得 #b", + "点 #y格挡 [REMOVE_SPACE]。" ] } } diff --git a/src/main/resources/slimeboundResources/localization/zht/RelicStrings.json b/src/main/resources/slimeboundResources/localization/zht/RelicStrings.json index 944042269b..9f0874824e 100644 --- a/src/main/resources/slimeboundResources/localization/zht/RelicStrings.json +++ b/src/main/resources/slimeboundResources/localization/zht/RelicStrings.json @@ -3,7 +3,9 @@ "NAME": "黏液之心", "FLAVOR": "我可真時髦。", "DESCRIPTIONS": [ - " #yslimeboundmod:吞食黏液 時,回復 #b2 點生命。 NL (每場戰鬥最多 #b8 點)" + " #yslimeboundmod:吞食黏液 時,回復 #b", + " 點生命。 NL (每場戰鬥最多 #b", + " 點)" ] }, "Slimebound:AbsorbEndCombatUpgraded": { @@ -11,7 +13,9 @@ "FLAVOR": "黏漿中的秘密。", "DESCRIPTIONS": [ "替換 ", - " 。 NL #yslimeboundmod:吞食黏液 時,回復 #b3 點生命。 NL (每場戰鬥最多 #b15 點)" + " 。 NL #yslimeboundmod:吞食黏液 時,回復 #b", + " 點生命。 NL (每場戰鬥最多 #b", + " 點)" ] }, "Slimebound:SlimedTailRelic": { @@ -86,7 +90,8 @@ "NAME": "碰撞護具", "FLAVOR": "進攻是最好的防守!", "DESCRIPTIONS": [ - " #yslimeboundmod:沖撞 牌造成的自我傷害減少 #b3 點。" + " #yslimeboundmod:沖撞 牌造成的自我傷害減少 #b", + " 點。" ] }, "Slimebound:TarBlob": { @@ -97,10 +102,11 @@ ] }, "Slimebound:StickyStick": { - "NAME": "粘膠立方體", + "NAME": "粘胶立方体", "FLAVOR": "嘿,它粘到你身上了。", "DESCRIPTIONS": [ - "每回合前 #b2 次抽到 #y狀態 或 #y詛咒 牌時再抽 #b1 張牌。若是 #y虛空 觸發抽牌,再獲得 [E] 。" + "每当你抽到一张 #y状态 或 #r诅咒 [REMOVE_SPACE]时,获得 #b", + "点 #y格挡 [REMOVE_SPACE]。" ] } } diff --git a/src/main/resources/sneckomodResources/images/betacards/Amass.png b/src/main/resources/sneckomodResources/images/betacards/Amass.png index fae3f48115..7e74973a66 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/Amass.png 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 index a986168f38..503f6dca78 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/Amass_p.png 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 index 9b4cc5974d..1c4a84e7ce 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/Behold.png 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 index d0983cfc36..349e10faa1 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/Behold_p.png and b/src/main/resources/sneckomodResources/images/betacards/Behold_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/CobraCoil.png b/src/main/resources/sneckomodResources/images/betacards/CobraCoil.png index a68615069c..754a633717 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/CobraCoil.png 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 index 1d4b4b39aa..c0c15021f6 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/CobraCoil_p.png 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 index 7b7cd32904..8f46784106 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/ComboString.png 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 index fd8dee2e7b..1e664a1f4f 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/ComboString_p.png 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 index cf0d1dfe82..39f4bc31f0 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/Cower.png 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 index 480a21d3d5..1a040f02b8 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/Cower_p.png 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 index 25e123d0a0..845e29b0cc 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/CrystalBoomerang.png 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 index c893b5bcb2..848334fecf 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/CrystalBoomerang_p.png and b/src/main/resources/sneckomodResources/images/betacards/CrystalBoomerang_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/DragonsHoard.png b/src/main/resources/sneckomodResources/images/betacards/DragonsHoard.png index 62446e94c9..658346c9d0 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/DragonsHoard.png 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 index 8d66491dcf..c46053e48c 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/DragonsHoard_p.png and b/src/main/resources/sneckomodResources/images/betacards/DragonsHoard_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/GildedShield.png b/src/main/resources/sneckomodResources/images/betacards/GildedShield.png index ca12fb533a..07226ece95 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/GildedShield.png 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 index 6e16b43fb8..9df102ae29 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/GildedShield_p.png 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 523bbe7a21..aad02e4a7f 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 cb26354734..f869938b80 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/InertBlade.png b/src/main/resources/sneckomodResources/images/betacards/InertBlade.png index cbc4d9496e..4c3137eb4a 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/InertBlade.png 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 index d0cf243790..6d2dfc8347 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/InertBlade_p.png 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 index 021fdadcb4..0ae550dfd8 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/Jackpot.png 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 index 7d74251cb7..6ccf97e2ba 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/Jackpot_p.png 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 index d9f79ef544..8fe2865d3a 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/Lacerate.png 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 index 3042714ed2..9d8ea29d9e 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/Lacerate_p.png 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 index 3db1c86eb3..635e2fda20 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/LastStrike.png 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 index 18c4bf42b9..8a4dbe055b 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/LastStrike_p.png and b/src/main/resources/sneckomodResources/images/betacards/LastStrike_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/LilGuardian.png b/src/main/resources/sneckomodResources/images/betacards/LilGuardian.png index 6fa8f11564..ab4c378a10 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/LilGuardian.png 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 index 9b9a83fd0d..a3f7468f89 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/LilGuardian_p.png and b/src/main/resources/sneckomodResources/images/betacards/LilGuardian_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/MakeshiftBlade.png b/src/main/resources/sneckomodResources/images/betacards/MakeshiftBlade.png index 3b554d0fdf..2085db04a7 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/MakeshiftBlade.png 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 index 1085381eb0..bc89b244e1 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/MakeshiftBlade_p.png 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 index 625c8408f1..b732689e78 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/MarkedCard.png 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 index 99e5afdc77..8ea4d17b64 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/MarkedCard_p.png and b/src/main/resources/sneckomodResources/images/betacards/MarkedCard_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/Mesmerize.png b/src/main/resources/sneckomodResources/images/betacards/Mesmerize.png index 849f36216e..27042f6f37 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/Mesmerize.png 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 index f8679ffbf2..a7a9d6276b 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/Mesmerize_p.png and b/src/main/resources/sneckomodResources/images/betacards/Mesmerize_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/OtherworldlySlash.png b/src/main/resources/sneckomodResources/images/betacards/OtherworldlySlash.png index 54b067d6b1..eaae3bc638 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/OtherworldlySlash.png 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 index b29c677d95..95acc3f1b3 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/OtherworldlySlash_p.png and b/src/main/resources/sneckomodResources/images/betacards/OtherworldlySlash_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/PoisonParadise.png b/src/main/resources/sneckomodResources/images/betacards/PoisonParadise.png index 9fd29b1d79..a7eec29c58 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/PoisonParadise.png 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 index 8da13102b4..15e0beba50 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/PoisonParadise_p.png 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 index d4332da494..676cfad88d 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/PowerShot.png 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 index 82f505ee1f..4643d746c2 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/PowerShot_p.png and b/src/main/resources/sneckomodResources/images/betacards/PowerShot_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/SerpentineSleuth.png b/src/main/resources/sneckomodResources/images/betacards/SerpentineSleuth.png index a3a8e7c6c2..54c0504f78 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/SerpentineSleuth.png 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 index 3c47375822..c779b81e4d 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/SerpentineSleuth_p.png and b/src/main/resources/sneckomodResources/images/betacards/SerpentineSleuth_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/Serpentscale.png b/src/main/resources/sneckomodResources/images/betacards/Serpentscale.png index a2fd5a1504..dfc50ccd59 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/Serpentscale.png 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 index 85ea778969..ba9d078392 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/Serpentscale_p.png and b/src/main/resources/sneckomodResources/images/betacards/Serpentscale_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/SnakeEyes.png b/src/main/resources/sneckomodResources/images/betacards/SnakeEyes.png index 2e9c21c0e2..cf4502c2af 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/SnakeEyes.png 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 index 1e69cb5031..8e0cc898b2 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/SnakeEyes_p.png 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 index 20cc02bebf..b38f5f7d7e 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/ThrowingCards.png 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 index 964dcab855..c023076789 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/ThrowingCards_p.png and b/src/main/resources/sneckomodResources/images/betacards/ThrowingCards_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/TrashCan.png b/src/main/resources/sneckomodResources/images/betacards/TrashCan.png index 50b55d6026..25fd6d7769 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/TrashCan.png 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 index 3c7daa4d33..1f4720a9e7 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/TrashCan_p.png and b/src/main/resources/sneckomodResources/images/betacards/TrashCan_p.png differ diff --git a/src/main/resources/sneckomodResources/images/betacards/Whack.png b/src/main/resources/sneckomodResources/images/betacards/Whack.png index 8351e78105..ee77efe93c 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/Whack.png 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 index 380872f703..de62260ca9 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/Whack_p.png 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 index 8fbd0aa344..8be1f05753 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/WideAngle.png 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 index ce91d22e07..ddf5a69435 100644 Binary files a/src/main/resources/sneckomodResources/images/betacards/WideAngle_p.png and b/src/main/resources/sneckomodResources/images/betacards/WideAngle_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/Lacerate.png b/src/main/resources/sneckomodResources/images/cards/Lacerate.png index 9cfddb9939..0589c6f54a 100644 Binary files a/src/main/resources/sneckomodResources/images/cards/Lacerate.png 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 index b931e6d66d..d82bce2a44 100644 Binary files a/src/main/resources/sneckomodResources/images/cards/Lacerate_p.png and b/src/main/resources/sneckomodResources/images/cards/Lacerate_p.png differ diff --git a/src/main/resources/sneckomodResources/images/cards/Mesermize_p.png b/src/main/resources/sneckomodResources/images/cards/Mesmerize_p.png similarity index 100% rename from src/main/resources/sneckomodResources/images/cards/Mesermize_p.png rename to src/main/resources/sneckomodResources/images/cards/Mesmerize_p.png diff --git a/src/main/resources/sneckomodResources/images/cards/PowerShot.png b/src/main/resources/sneckomodResources/images/cards/PowerShot.png index 9c7a31665e..676cfad88d 100644 Binary files a/src/main/resources/sneckomodResources/images/cards/PowerShot.png 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 index 09600905cd..4643d746c2 100644 Binary files a/src/main/resources/sneckomodResources/images/cards/PowerShot_p.png and b/src/main/resources/sneckomodResources/images/cards/PowerShot_p.png differ diff --git a/src/main/resources/sneckomodResources/localization/deu/CardStrings.json b/src/main/resources/sneckomodResources/localization/deu/CardStrings.json new file mode 100644 index 0000000000..945036b1f2 --- /dev/null +++ b/src/main/resources/sneckomodResources/localization/deu/CardStrings.json @@ -0,0 +1,617 @@ +{ + "sneckomod:Blunderbus": { + "NAME": "Irre Kanone", + "DESCRIPTION": "Füge ALLEN Gegnern !D! Schaden zu. NL Wiederhole das für jede Handkarte, die mindestens 3 kostet." + }, + "sneckomod:Tsunami": { + "NAME": "Überfluss", + "DESCRIPTION": "sneckomod:Überschuss Effekte verleihen zusätzlich NL !M! Block." + }, + "sneckomod:CheapStock": { + "NAME": "Ladenhüter", + "DESCRIPTION": "sneckomod:Irre zu Beginn jedes Zuges eine zufällige Handkarte mit den höchsten Kosten.", + "UPGRADE_DESCRIPTION": "sneckomod:Irre zu Beginn jedes Zuges !M! zufällige Handkarten mit den höchsten Kosten." + }, + "sneckomod:Cheat": { + "NAME": "Pures Glück", + "DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team.", + "UPGRADE_DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] + }, + "sneckomod:DangerNoodle": { + "NAME": "Verrückte Nudel", + "DESCRIPTION": "Füge !D! Schaden zu. NL sneckomod:Irre eine Karte. NL sneckomod:Geschenk: Kosten von mindestens 3.", + "DESCRIPTION_BATTLE": "Füge !D! Schaden zu. NL sneckomod:Irre eine Karte." + }, + "sneckomod:Deception": { + "NAME": "Verwirren", + "DESCRIPTION": "Erhalte !B! Block. NL Erhalte eine *Schockwelle. NL Erschöpft." + }, + "sneckomod:Defend": { + "NAME": "Verteidigen", + "DESCRIPTION": "Erhalte !B! Block." + }, + "sneckomod:DefensiveFlair": { + "NAME": "Kreative Abwehr", + "DESCRIPTION": "Erhalte !B! Block. NL Block wird für jede sneckomod:fremde Handkarte um !M! erhöht. NL sneckomod:Geschenk: Ungewöhnlich.", + "DESCRIPTION_BATTLE": "Erhalte !B! Block. NL Block wird für jede sneckomod:fremde Handkarte um !M! erhöht." + }, + "sneckomod:DiceBlock": { + "NAME": "Würfelblock", + "DESCRIPTION": "Erhalte !B! Block. NL sneckomod:Überschuss: Erhalte nochmal !B! Block." + }, + "sneckomod:DiceBoulder": { + "NAME": "Würfelroller", + "DESCRIPTION": "Erhalte !B! Block. NL Erhöhe für diesen Kampf das Block dieser Karte um !M! und die Kosten um !qqq!." + }, + "sneckomod:DiceCrush": { + "NAME": "Würfelwurf", + "DESCRIPTION": "Füge !D! Schaden zu. NL sneckomod:Überschuss: Ziehe 2 Karten." + }, + "sneckomod:DragonsHoard": { + "NAME": "Drachenhort", + "DESCRIPTION": "Flüchtig. NL Erhalte !M! Stärke. NL Erhalte !M! Geschicklichkeit.", + "UPGRADE_DESCRIPTION": "Erhalte !M! Stärke. NL Erhalte !M! Geschicklichkeit." + }, + "sneckomod:FourOfAKind": { + "NAME": "Poker", + "DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team.", + "UPGRADE_DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] + }, + "sneckomod:GlitteringGambit": { + "NAME": "Opulenz", + "DESCRIPTION": "Unspielbar. NL Kann nicht aus dem Deck entfernt werden. NL sneckomod:Geschenk: Verbesserte Seltene und !M! Gold.", + "UPGRADE_DESCRIPTION": "Unspielbar. Flüchtig. NL Kann nicht aus dem Deck entfernt werden. NL sneckomod:Geschenk: Verbesserte Seltene und !M! Gold.", + "DESCRIPTION_BATTLE": "Unspielbar.", + "UPGRADE_DESCRIPTION_BATTLE": "Unspielbar. NL Flüchtig." + }, + "sneckomod:ImmovableObject": { + "NAME": "Träges Objekt", + "DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] + }, + "sneckomod:IronFang": { + "NAME": "Eisenmaul", + "DESCRIPTION": "Füge ALLEN Gegnern !D! Schaden zu und wende !M! Schwach auf sie an." + }, + "sneckomod:ImprovisedAttack": { + "NAME": "Improvisationshieb", + "DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] + }, + "sneckomod:ImprovisedGuard": { + "NAME": "Improvisationsblock", + "DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] + }, + "sneckomod:LuckyBreak": { + "NAME": "Verschnaufpause", + "DESCRIPTION": "Erhalte !B! Block. NL Ziehe !M! Karte für jede Handkarte, die mindestens 2 kostet." + }, + "sneckomod:Nope": { + "NAME": "Transformation", + "DESCRIPTION": "Erhalte !B! Block. NL Erschöpfe eine Karte. Wenn sie eine Farbe hatte, dann erhalte eine zufällige Karte derselben Klasse.", + "UPGRADE_DESCRIPTION": "Erhalte !B! Block. NL Erschöpfe eine Karte. Wenn sie eine Farbe hatte, dann erhalte eine zufällige Karte derselben Klasse.", + "EXTENDED_DESCRIPTION": [ + "Erschöpfe für den Umtausch." + ] + }, + "sneckomod:SnakeEyes": { + "NAME": "Schlangenaugen", + "DESCRIPTION": "Deine nächste sneckomod:fremde Karte in diesem Zug wird zweimal ausgespielt. NL sneckomod:Geschenk: Seltene Fertigkeit.", + "UPGRADE_DESCRIPTION": "Deine nächsten 2 sneckomod:fremden Karten in diesem Zug werden zweimal ausgespielt. NL sneckomod:Geschenk: Seltene Fertigkeit.", + "DESCRIPTION_BATTLE": "Deine nächste sneckomod:fremde Karte in diesem Zug wird zweimal ausgespielt.", + "UPGRADE_DESCRIPTION_BATTLE": "Deine nächsten 2 sneckomod:fremden Karten in diesem Zug werden zweimal ausgespielt." + }, + "sneckomod:Memorize": { + "NAME": "Merken", + "DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team.", + "UPGRADE_DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team.", + "EXTENDED_DESCRIPTION": [ + " zum Identifizieren.", + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] + }, + "sneckomod:MintCondition": { + "NAME": "Überproduktion", + "DESCRIPTION": "sneckomod:Überschuss: NL Erhalte !M! Stärke." + }, + "sneckomod:MixItUp": { + "NAME": "Durchschütteln", + "DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] + }, + "sneckomod:MorePower": { + "NAME": "Mehr Power!", + "DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] + }, + "sneckomod:Mudshield": { + "NAME": "Irrlichtschild", + "DESCRIPTION": "Erhalte immer, wenn du eine Karte sneckomod:irrst, !M! Block." + }, + "sneckomod:OverwhelmingPresence": { + "NAME": "Überläufer", + "DESCRIPTION": "Flüchtig. NL Wenn du das erste Mal im Zug eine sneckomod:fremde Karte spielst, ziehe eine Karte.", + "UPGRADE_DESCRIPTION": "Wenn du das erste Mal im Zug eine sneckomod:fremde Karte spielst, ziehe eine Karte." + }, + "sneckomod:RiskySword": { + "NAME": "Irrläufer", + "DESCRIPTION": "Füge !D! Schaden zu. NL Der Schaden wird um !M! erhöht, wenn diese Karte sneckomod:geirrt wird." + }, + "sneckomod:PoisonParadise": { + "NAME": "Überdosis", + "DESCRIPTION": "sneckomod:Überschuss Effekte wenden zusätzlich NL !M! sneckomod:Toxin auf einen zufälligen Gegner an." + }, + "sneckomod:PureSnecko": { + "NAME": "Verlagern", + "DESCRIPTION": "Ziehe !M! Karten und sneckomod:irre sie." + }, + "sneckomod:QuickBite": { + "NAME": "Snek-Reflex", + "DESCRIPTION": "Füge !D! Schaden zu. NL Ziehe !M! Karte und NL sneckomod:irre sie.", + "UPGRADE_DESCRIPTION": "Füge !D! Schaden zu. NL Ziehe !M! Karten und NL sneckomod:irre sie." + }, + "sneckomod:QuickMove": { + "NAME": "Flinke Bewegung", + "DESCRIPTION": "Erhalte !B! Block. NL sneckomod:Überschuss: Wende !M! Verwundbar auf ALLE Gegner an." + }, + "sneckomod:RainOfDice": { + "NAME": "Würfelregen", + "DESCRIPTION": "Füge !D! Schaden zu. NL sneckomod:Irre eine Karte, und erhalte danach einen *Würfelregen. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Füge !D! Schaden zu. NL sneckomod:Irre eine Karte, und erhalte danach einen *Würfelregen+. NL Erschöpft." + }, + "sneckomod:Restock": { + "NAME": "Nachfüllen", + "DESCRIPTION": "Wird deine Hand ab. NL Ziehe !M! Karten, und sneckomod:irre dann alle Handkarten. NL Erschöpft." + }, + "sneckomod:Rotation": { + "NAME": "Rotation", + "DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team.", + "UPGRADE_DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] + }, + "sneckomod:SerpentBottle": { + "NAME": "Abverkauf", + "DESCRIPTION": "Ziehe !qqq! Karten. NL sneckomod:Irre eine Karte. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Ziehe !qqq! Karten. NL sneckomod:Irre !M! Karten. NL Erschöpft." + }, + "sneckomod:SerpentIdol": { + "NAME": "Viperngötze", + "DESCRIPTION": "Nimm 1 von !M! zufälligen sneckomod:fremden Karten auf die Hand. Sie kostet diesen Zug 0. NL Erschöpft." + }, + "sneckomod:SerpentMind": { + "NAME": "Exotische Form", + "DESCRIPTION": "Flüchtig. Erhalte am Ende des Zuges !M! Stärke für jede Klasse, von der du mindestens 1 Karte gespielt hast. NL sneckomod:Geschenk: Selten.", + "UPGRADE_DESCRIPTION": "Erhalte am Ende des Zuges !M! Stärke für jede Klasse, von der du mindestens 1 Karte gespielt hast. NL sneckomod:Geschenk: Selten.", + "DESCRIPTION_BATTLE": "Flüchtig. NL Erhalte am Ende des Zuges !M! Stärke für jede Klasse, von der du mindestens 1 Karte gespielt hast.", + "UPGRADE_DESCRIPTION_BATTLE": "Erhalte am Ende des Zuges !M! Stärke für jede Klasse, von der du mindestens 1 Karte gespielt hast." + }, + "sneckomod:SlitherThrough": { + "NAME": "Durchschlängeln", + "DESCRIPTION": "Füge !D! Schaden zu. NL sneckomod:Fremde Handkarten kosten diesen Zug !M! weniger. NL sneckomod:Geschenk: Ungewöhnlich.", + "DESCRIPTION_BATTLE": "Füge !D! Schaden zu. NL sneckomod:Fremde Handkarten kosten diesen Zug !M! weniger." + }, + "sneckomod:SnakeSap": { + "NAME": "Saugbiss", + "DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] + }, + "sneckomod:SnekBeam": { + "NAME": "Laserauge", + "DESCRIPTION": "Füge !D! Schaden zu. NL Erhalte [E]." + }, + "sneckomod:SnekBite": { + "NAME": "Snek-Biss", + "DESCRIPTION": "Füge !D! Schaden zu. NL sneckomod:Irre eine Karte.", + "UPGRADE_DESCRIPTION": "Füge !D! Schaden zu. NL sneckomod:Irre !M! Karten." + }, + "sneckomod:SoulCleanse": { + "NAME": "Seelenreinigung", + "DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team.", + "UPGRADE_DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] + }, + "sneckomod:SoulDraw": { + "NAME": "Seelenextrakt", + "DESCRIPTION": "Erhalte !M! zufällige sneckomod:fremde Karten. NL Sie erhalten Behalten. NL Erschöpft." + }, + "sneckomod:SoulExchange": { + "NAME": "Seelentausch", + "DESCRIPTION": "Behalten. NL sneckomod:Irre alle Handkarten. NL Erschöpft." + }, + "sneckomod:SoulRoll": { + "NAME": "Seelenwürfel", + "DESCRIPTION": "Behalten. NL Erhalte !B! Block. NL sneckomod:Irre eine Karte. NL Erschöpft." + }, + "sneckomod:Strike": { + "NAME": "Schlag", + "DESCRIPTION": "Füge !D! Schaden zu." + }, + "sneckomod:ToothAndClaw": { + "NAME": "Bis an die Zähne", + "DESCRIPTION": "Füge !D! Schaden zu. NL Erhalte für jede Klasse auf der Hand ein Messer. NL sneckomod:Geschenk: Ungewöhnlich.", + "UPGRADE_DESCRIPTION": "Füge !D! Schaden zu. NL Erhalte für jede Klasse auf der Hand ein Messer+. NL sneckomod:Geschenk: Ungewöhnlich.", + "DESCRIPTION_BATTLE": "Füge !D! Schaden zu. NL Erhalte für jede Klasse auf der Hand ein Messer.", + "UPGRADE_DESCRIPTION_BATTLE": "Füge !D! Schaden zu. NL Erhalte für jede Klasse auf der Hand ein Messer+." + }, + "sneckomod:TyphoonFang": { + "NAME": "Überbiss", + "DESCRIPTION": "Füge !D! Schaden zu. NL sneckomod:Überschuss: Wenn du in diesem Zug einen sneckomod:Überschuss Effekt aktivierst, spiele eine Kopie dieser Karte." + }, + "sneckomod:Yearn": { + "NAME": "Schmachten", + "DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] + }, + "sneckomod:TailWhip": { + "NAME": "Rutenhieb", + "DESCRIPTION": "Füge !D! Schaden zu. NL sneckomod:Überschuss: Wende !M! Schwach und !M! Verwundbar an." + }, + "sneckomod:Transmogrify": { + "NAME": "Replikator", + "DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team.", + "EXTENDED_DESCRIPTION": [ + "Keine Relikte zum Einsetzen.", + "Opfere ein Relikt.", + "Verliere ", + " und erhalte ein ", + " Relikt.", + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] + }, + "sneckomod:ToxicPersonality": { + "NAME": "Toxisches Wesen", + "DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] + }, + "sneckomod:TrashToTreasure": { + "NAME": "Verwerten", + "DESCRIPTION": "Erhalte !B! Block. NL Erschöpfe eine Karte. NL Erhalte [E] in Höhe ihrer Kosten. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Erhalte !B! Block. NL Erschöpfe eine Karte. NL Erhalte [E] in Höhe ihrer Kosten." + }, + "sneckomod:UnendingSupply": { + "NAME": "Exotischer Vorrat", + "DESCRIPTION": "Erhalte zu Beginn jedes Zuges ein gremlin:Echo einer zufälligen sneckomod:fremden Karte.", + "UPGRADE_DESCRIPTION": "Angeboren. NL Erhalte zu Beginn jedes Zuges ein gremlin:Echo einer zufälligen sneckomod:fremden Karte." +}, + "sneckomod:Unknown": { + "NAME": "??? Basis", + "DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team.", + "UPGRADE_DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team." + }, + "sneckomod:Unknown0Cost": { + "NAME": "??? Kosten 0", + "DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team.", + "UPGRADE_DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team." + }, + "sneckomod:Unknown1Cost": { + "NAME": "??? Kosten 1", + "DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team.", + "UPGRADE_DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team." + }, + "sneckomod:Unknown2Cost": { + "NAME": "??? Kosten 2", + "DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team.", + "UPGRADE_DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team." + }, + "sneckomod:Unknown3Cost": { + "NAME": "??? Kosten 3", + "DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team.", + "UPGRADE_DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team." + }, + "sneckomod:UnknownBlock": { + "NAME": "??? Block", + "DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team.", + "UPGRADE_DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team." + }, + "sneckomod:UnknownBoss": { + "NAME": "??? Boss", + "DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team.", + "UPGRADE_DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team." + }, + "sneckomod:UnknownClass": { + "NAME": "??? Charakter", + "DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team.", + "UPGRADE_DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team." + }, + "sneckomod:UnknownColorless": { + "NAME": "??? Farblos", + "DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team.", + "UPGRADE_DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team." + }, + "sneckomod:UnknownCommonAttack": { + "NAME": "??? G Angriff", + "DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team.", + "UPGRADE_DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team." + }, + "sneckomod:UnknownCommonSkill": { + "NAME": "??? G Fertigkeit", + "DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team.", + "UPGRADE_DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team." + }, + "sneckomod:UnknownDexterity": { + "NAME": "??? Geschicklichkeit", + "DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team.", + "UPGRADE_DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team." + }, + "sneckomod:UnknownDraw": { + "NAME": "??? Ziehen", + "DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team.", + "UPGRADE_DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team." + }, + "sneckomod:UnknownEthereal": { + "NAME": "??? Flüchtig", + "DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team.", + "UPGRADE_DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team." + }, + "sneckomod:UnknownExhaust": { + "NAME": "??? Erschöpft", + "DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team.", + "UPGRADE_DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team." + }, + "sneckomod:UnknownRareAttack": { + "NAME": "??? S Angriff", + "DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team.", + "UPGRADE_DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team." + }, + "sneckomod:UnknownRarePower": { + "NAME": "??? S Macht", + "DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team.", + "UPGRADE_DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team." + }, + "sneckomod:UnknownRareSkill": { + "NAME": "??? S Fertigkeit", + "DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team.", + "UPGRADE_DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team." + }, + "sneckomod:UnknownStrength": { + "NAME": "??? Stärke", + "DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team.", + "UPGRADE_DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team." + }, + "sneckomod:UnknownStrike": { + "NAME": "??? Schlag", + "DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team.", + "UPGRADE_DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team." + }, + "sneckomod:UnknownUncommonAttack": { + "NAME": "??? U Angriff", + "DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team.", + "UPGRADE_DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team." + }, + "sneckomod:UnknownUncommonPower": { + "NAME": "??? U Macht", + "DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team.", + "UPGRADE_DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team." + }, + "sneckomod:UnknownUncommonSkill": { + "NAME": "??? U Fertigkeit", + "DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team.", + "UPGRADE_DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team." + }, + "sneckomod:UnknownVulnerable": { + "NAME": "??? Verwundbar", + "DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team.", + "UPGRADE_DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team." + }, + "sneckomod:UnknownWeak": { + "NAME": "??? Schwach", + "DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team.", + "UPGRADE_DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team." + }, + "sneckomod:UnknownX": { + "NAME": "??? Kosten X", + "DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team.", + "UPGRADE_DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team." + }, + "sneckomod:UnlimitedRolls": { + "NAME": "Unendliche Würfel", + "DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team.", + "UPGRADE_DESCRIPTION": "Diese Karte sollte nicht auftauchen. NL Wenn du das liest, bist du auf einen Bug gestoßen. NL Bitte melde das dem Dev-Team.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] + }, + "sneckomod:Behold": { + "NAME": "Alle Hände voll", + "DESCRIPTION": "Füge !D! Schaden zu. NL sneckomod:Überschuss: NL Erhalte !M! Messer.", + "UPGRADE_DESCRIPTION": "Füge !D! Schaden zu. NL sneckomod:Überschuss: NL Erhalte !M! Messer." + }, + "sneckomod:SaveForLater": { + "NAME": "Übriglassen", + "DESCRIPTION": "Füge !D! Schaden zu. NL Behalte am Ende des Zuges !M! Karte.", + "UPGRADE_DESCRIPTION": "Füge !D! Schaden zu. NL Behalte am Ende des Zuges !M! Karten." + }, + "sneckomod:PowerShot": { + "NAME": "Machtrausch", + "DESCRIPTION": "Füge !D! Schaden zu. Nimm diese Karte vom Abwurfstapel auf die Hand, immer wenn du eine Macht spielst." + }, + "sneckomod:LilGuardian": { + "NAME": "Taschenschutz", + "DESCRIPTION": "Erhalte !B! Block. NL Wenn du eine Karte ausspielst, die mindestens 2 kostet, spiele diese Karte aus der Hand." + }, + "sneckomod:CrystalBoomerang": { + "NAME": "Bunter Bumerang", + "DESCRIPTION": "Schnappe eine Karte vom Abwurfstapel. NL Ist sie sneckomod:fremd, dann erhalte !B! Block." + }, + "sneckomod:ViperEssence": { + "NAME": "Vipernessenz", + "DESCRIPTION": "Flüchtig. NL sneckomod:Fremd. NL Erhalte !M! Stärke." + }, + "sneckomod:Amass": { + "NAME": "Anhäufen", + "DESCRIPTION": "Erhalte !B! Block. NL Block wird um die Summe der Kosten aller Handkarten erhöht.", + "UPGRADE_DESCRIPTION": "Erhalte !B! Block. NL Block wird um die DOPPELTE Summe der Kosten aller Handkarten erhöht." + }, + "sneckomod:Medusa": { + "NAME": "Giftschlange", + "DESCRIPTION": "Füge !D! Schaden zu. NL Wende !M! sneckomod:Toxin an. NL sneckomod:Geschenk: Gewöhnlicher Debuff.", + "DESCRIPTION_BATTLE": "Füge !D! Schaden zu. NL Wende !M! sneckomod:Toxin an." + }, + "sneckomod:Cower": { + "NAME": "Niederkauern", + "DESCRIPTION": "Erhalte !B! Block. NL Erhalte *Verkriechen. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Erhalte !B! Block. NL Erhalte *Verkriechen+. NL Erschöpft." + }, + "sneckomod:WideSting": { + "NAME": "Fernkampf", + "DESCRIPTION": "Füge ALLEN Gegnern !D! Schaden zu. NL Verbessere alle sneckomod:fremden Handkarten. NL sneckomod:Geschenk: Gewöhnlich.", + "DESCRIPTION_BATTLE": "Füge ALLEN Gegnern !D! Schaden zu. NL Verbessere alle sneckomod:fremden Handkarten." + }, + "sneckomod:GildedShield": { + "NAME": "Sneckoschuppe", + "DESCRIPTION": "Erhalte !B! Block. NL sneckomod:Irre diese Karte und nimm sie zurück auf die Hand." + }, + "sneckomod:Mesmerize": { + "NAME": "Hypnotisieren", + "DESCRIPTION": "ALLE Gegner verlieren !M! Stärke. NL sneckomod:Irre eine Karte. NL Erschöpft." + }, + "sneckomod:Serpentscale": { + "NAME": "Häuten", + "DESCRIPTION": "Füge !D! Schaden zu. NL Erhalte 1 expansioncontent:Panzerrüstung. NL sneckomod:Überschuss: Erhalte stattdessen !M! expansioncontent:Panzerrüstung." + }, + "sneckomod:OtherworldlySlash": { + "NAME": "Exotischer Hieb", + "DESCRIPTION": "Füge !D! Schaden zu - zweimal, wenn du in diesem Zug eine sneckomod:fremde Karte gespielt hast. NL sneckomod:Geschenk: Gewöhnlich.", + "DESCRIPTION_BATTLE": "Füge !D! Schaden - zweimal, wenn du in diesem Zug eine sneckomod:fremde Karte gespielt hast." + }, + "sneckomod:BeyondArmor": { + "NAME": "Fremde Rüstung", + "DESCRIPTION": "Erhalte !B! Block. NL Schnappe !M! zufällige sneckomod:fremde Karten vom Nachziehstapel. NL sneckomod:Geschenk: Gewöhnlich.", + "DESCRIPTION_BATTLE": "Erhalte !B! Block. NL Schnappe !M! zufällige sneckomod:fremde Karten vom Nachziehstapel." + }, + "sneckomod:BlunderGuard": { + "NAME": "Schwere Geschütze", + "DESCRIPTION": "Wenn du eine Karte spielst, die mindestes 3 kostet, erhalte !qqq! Block und !M! Stärke.", + "UPGRADE_DESCRIPTION": "Wenn du eine Karte spielst, die mindestes 3 kostet, erhalte !qqq! Block und !M! Stärke." + }, + "sneckomod:WideAngle": { + "NAME": "Wegfegen", + "DESCRIPTION": "Behalten. NL Füge ALLEN Gegnern !D! Schaden zu." + }, + "sneckomod:SerpentsNest": { + "NAME": "Schlangennest", + "DESCRIPTION": "Immer wenn du eine Macht spielst, füge ALLEN Gegnern !M! Schaden zu. NL sneckomod:Geschenk: Ungewöhnliche Macht.", + "DESCRIPTION_BATTLE": "Immer wenn du eine Macht spielst, füge ALLEN Gegnern !M! Schaden zu." + }, + "sneckomod:Whack": { + "NAME": "Verprügeln", + "DESCRIPTION": "Füge !D! Schaden zu. NL Erhalte *Verhauen. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Füge !D! Schaden zu. NL Erhalte *Verhauen+. NL Erschöpft." + }, + "sneckomod:CobraCoil": { + "NAME": "Würgeschlange", + "DESCRIPTION": "Füge !D! Schaden zu. NL Der Gegner erleidet am Ende seiner Züge !M! Schaden. NL sneckomod:Geschenk: Seltener Angriff." + }, + "sneckomod:Belittle": { + "NAME": "Niedermachen", + "DESCRIPTION": "Der Gegner verliert für jeden seiner Debuffs !M! TP. NL sneckomod:Geschenk: Ungewöhnlicher Debuff.", + "DESCRIPTION_BATTLE": "Der Gegner verliert für jeden seiner Debuffs !M! TP." + }, + "sneckomod:Jackpot": { + "NAME": "Jackpot", + "DESCRIPTION": "Behalten. NL Erhalte [E] [E]. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Behalten. NL Erhalte [E] [E] [E]. NL Erschöpft." + }, + "sneckomod:MakeshiftBlade": { + "NAME": "Nachtreten", + "DESCRIPTION": "Füge !D! Schaden zu. Wenn der Gegner mindestens !M! Debuffs hat, ziehe !qqq! Karten. NL sneckomod:Geschenk: Debuff.", + "DESCRIPTION_BATTLE": "Füge !D! Schaden zu. Wenn der Gegner mindestens !M! Debuffs hat, ziehe !qqq! Karten." + }, + "sneckomod:LatchOn": { + "NAME": "Vipernklaue", + "DESCRIPTION": "Füge ALLEN Gegnern !D! Schaden zu. NL Erhalte eine *Vipernessenz." + }, + "sneckomod:ComboString": { + "NAME": "Verkettung", + "DESCRIPTION": "Füge für jede sneckomod:fremde Karte, die in diesem Zug gespielt wurde, !D! Schaden zu. NL sneckomod:Geschenk: Ungewöhnlich.", + "EXTENDED_DESCRIPTION": [ + " NL (Trifft ", + " Mal.)" + ], + "DESCRIPTION_BATTLE": "Füge für jede sneckomod:fremde Karte, die in diesem Zug gespielt wurde, !D! Schaden zu." + }, + "sneckomod:ThrowingCards": { + "NAME": "Kartenwurf", + "DESCRIPTION": "Nimm X *FTL Karten auf die Hand. NL Erhalte [E]. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Nimm X *FTL+ Karten auf die Hand. NL Erhalte [E]. NL Erschöpft." + }, + "sneckomod:RoundaboutSwing": { + "NAME": "Umzingeln", + "DESCRIPTION": "Füge !D! Schaden zu. NL Lege eine Handkarte auf den Nachziehstapel. NL Ziehe im nächsten Zug !M! zusätzliche Karten." + }, + "sneckomod:MarkedCard": { + "NAME": "Falschspielen", + "DESCRIPTION": "sneckomod:Irre eine Karte. NL Sie wird weniger kosten. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Behalten. NL sneckomod:Irre eine Karte. NL Sie wird weniger kosten. NL Erschöpft." + }, + "sneckomod:InertBlade": { + "NAME": "Träge Klinge", + "DESCRIPTION": "Füge !D! Schaden zu. NL Bei Kosten... NL 1+: Ziehe !M! Karten. NL 2+: Erhalte !M! Stärke. NL 3+: Erhalte [E].", + "UPGRADE_DESCRIPTION": "Füge !D! Schaden zu. NL Bei Kosten... NL 1+: Ziehe !M! Karten. NL 2+: Erhalte !M! Stärke. NL 3+: Erhalte [E] [E]." + }, + "sneckomod:PerpetualSerpent": { + "NAME": "Ewige Schlange", + "DESCRIPTION": "Füge !D! Schaden zu. NL sneckomod:Überschuss: NL Erhalte [E] [E]." + }, + "sneckomod:LastStrike": { + "NAME": "Meisterschlag", + "DESCRIPTION": "Füge !D! Schaden zu. NL Wiederhole das für jede verschiedene Schlag Karte, die in diesem Kampf gespielt wurde. NL sneckomod:Geschenk: Schlag.", + "UPGRADE_DESCRIPTION": "Füge !D! Schaden zu. NL Wiederhole das für jede verschiedene Schlag Karte, die in diesem Kampf gespielt wurde. NL sneckomod:Geschenk: Schlag.", + "DESCRIPTION_BATTLE": "Füge !D! Schaden zu. NL Wiederhole das für jede verschiedene Schlag Karte, die in diesem Kampf gespielt wurde.", + "UPGRADE_DESCRIPTION_BATTLE": "Füge !D! Schaden zu. NL Wiederhole das für jede verschiedene Schlag Karte, die in diesem Kampf gespielt wurde.", + "EXTENDED_DESCRIPTION": [ + " NL (Trifft zusätzlich ", + " Mal.)" + ] + }, + "sneckomod:AceOfWands": { + "NAME": "Pentagrammkönig", + "DESCRIPTION": "Flüchtig. NL Erhalte immer, wenn du einen Debuff anwendest, !M! Block. NL sneckomod:Geschenk: Debuff.", + "UPGRADE_DESCRIPTION": "Erhalte immer, wenn du einen Debuff anwendest, !M! Block. NL sneckomod:Geschenk: Debuff." + }, + "sneckomod:FlashInThePan": { + "NAME": "Blitzschnell", + "DESCRIPTION": "Erhalte !B! Block. NL Wirf deine Hand ab und ziehe im nächsten Zug genauso viele zusätzliche Karten." + }, + "sneckomod:TrashCan": { + "NAME": "Mülleimer", + "DESCRIPTION": "Du kannst am Ende jedes Zuges eine Karte erschöpfen." + }, + "sneckomod:Lacerate": { + "NAME": "Giftgas", + "DESCRIPTION": "Wende !M! sneckomod:Toxin auf ALLE Gegner an. NL Erhalte eine *Lähmende *Wolke. NL Erschöpft.", + "UPGRADE_DESCRIPTION": "Wende !M! sneckomod:Toxin auf ALLE Gegner an. NL Erhalte eine *Lähmende *Wolke+. NL Erschöpft." + }, + "sneckomod:SerpentineSleuth": { + "NAME": "Vipernmacht", + "DESCRIPTION": "Flüchtig. NL Erhalte für jede ausgespielte Macht [E]. NL sneckomod:Geschenk: Seltene Macht.", + "DESCRIPTION_BATTLE": "Flüchtig. NL Erhalte für jede ausgespielte Macht [E]." + } +} \ No newline at end of file diff --git a/src/main/resources/sneckomodResources/localization/deu/CharacterStrings.json b/src/main/resources/sneckomodResources/localization/deu/CharacterStrings.json new file mode 100644 index 0000000000..06b62bec34 --- /dev/null +++ b/src/main/resources/sneckomodResources/localization/deu/CharacterStrings.json @@ -0,0 +1,13 @@ +{ + "sneckomod:theSnecko": { + "NAMES": [ + "Snecko", + "als Snecko" + ], + "TEXT": [ + "Eine schlangenartige Kreatur, deren natürliches Habitat die Stadt ist. NL Bekannt dafür, die Feinde mit einem starren Blick zu verwirren.", + "NL Sssssssss....", + "Auf einer unbeleuchteten Straße triffst du auf ein paar vermummte Gestalten, die gerade mitten in irgendeinem dunklen Ritual sind. Als du näher kommst, wenden sie sich dir in gespenstischem Gleichklang zu. Der Größte von ihnen entblößt Fangzähne und streckt eine lange, blasse Hand nach dir aus. NL ~„Schließ~ ~dich~ ~uns~ ~an,~ ~Schlange,~ ~und~ ~spüre~ ~die~ ~Wärme~ ~des~ ~Spire.“~" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/sneckomodResources/localization/deu/EventStrings.json b/src/main/resources/sneckomodResources/localization/deu/EventStrings.json new file mode 100644 index 0000000000..0eb6240f9d --- /dev/null +++ b/src/main/resources/sneckomodResources/localization/deu/EventStrings.json @@ -0,0 +1,53 @@ +{ + "sneckomod:D8": { + "NAME": "Mystisches Oktaeder", + "DESCRIPTIONS": [ + "Im Auge des Nebelfeldes erreichst du einen Ort der Ruhe. In der Mitte steht eine Ruine, über der ein #gmysteriöses #gOktaeder schwebt. Es rotiert ganz gemächlich und seine Oberfläche #b~glüht~ #b~schwach,~ als wäre es eine Art #y~urzeitliches~ #y~Artefakt.~ NL Als du danach greifst und die Oberfläche fast berührst, #b~leuchtet~ #b~es~ #b~stark~ #b~auf,~ und komplizierte Runensymbole werden daraus projiziert. Du fühlst ein #r@sanftes@ #r@Beben@ aus dem Untergrund. Die Luft in der Umgebung wird #pschwerer. Und die ganze Umgebubg hält sprichwörtlich die Luft an. Du musst dich entscheiden...", + "Das Relikt zersplittert in tausend Scherben, und du spürst wie sich die freigewordene #ymystische #yEnergie in deinen Körper einverleibt. Mit der Energie haben aber auch einige #r@Splitter@ den Weg in deinen Körper gefunden. NL NL Der Nebel hat sich plötzlich gelichtet. Gestärkt, aber auch verletzt verlässt du den Ort.", + "In dem Moment, an dem du mit der Oberfläche in Kontakt kommst, spürst du einen grässlichen #rSchmerz in dir. Du bleibst tapfer und steckst das Oktaeder ein. Dich überkommt ein unbekanntes Gefühl - altes, vergessenes Wissen wird dir plötzlich klar. Aufgaben, die bisher deine vollste Konzentration und Aufmerksamkeit gefordert haben, erscheinen dir nun wie ein Kinderspiel. NL NL Nachdem du wieder zu dir gekommen bist, bemerkst du, dass der Nebel verschwunden ist. Gestärkt, aber auch verletzt verlässt du den Ort.", + "Das nimmt bestimmt kein gutes Ende - vorsichtig machst du einige Schritte zurück und kämpfst dich weiter durch den Nebel." + ], + "OPTIONS": [ + "[Zerstören] #rVerliere #r", + " #r #rTP. #gErhalte eine #yseltene #yfremde Karte.", + "[Nehmen] #gErhalte das #gMystische #gOktaeder. #rWerde #rverflucht #r- #rSchmerz.", + "[Verlassen]", + "[Gesperrt] Erfordert eine Karte mit Überschuss." + ] + }, + "sneckomod:BackToBasics": { + "NAME": "", + "DESCRIPTIONS": [ + "Kreativität übertrifft Planung - jedes Mal aufs Neue!" + ], + "OPTIONS": [ + "[Improvisation] Alle #gSchlag und #gVerteidigen Karten werden #yfremd.", + "[Gesperrt] Erfordert einen Schlag oder ein Verteidigen." + ] + }, + "sneckomod:Serpent": { + "NAME": "Die Ssssslange", + "DESCRIPTIONS": [ + "Du kommst in einen Raum, wo du ein ein großes Loch im Boden findest. Als du dem Loch näherkommst, erscheint daraus eine enorme Schlangenkreatur, die dir nicht unähnlich ist. NL NL ~„Ho~ ~hooo!~ ~Hallo,~ ~Schlangenfreund!~ Ich stelle dir eine einfache Frage... NL NL Du hörst diese Kreatur sprechen, doch bist absolut perplex und kannst nichts verstehen. NL NL „Stimmst du zu?“", + "~„Exzellent!“~ NL NL Du hast noch immer keine Ahnung, was die Schlange von sich gegeben hat, aber du bemerkst, dass du sie glücklich gemacht hast. NL Die Kreatur bietet dir ein Souvenir an und schlängelt sich zurück in das Loch.", + "Die Schlange glotzt dich mit dem Anblick extremer Enttäuschung an - doch zur Verabschiedung lächelt sie wieder, und wünscht dir eine gute Reise." + ], + "OPTIONS": [ + "[Zustimmen] #gErhalte #gein #gSnecko #gRelikt. #rWerde #rverflucht #r- #rIrritation.", + "[Widersprechen]", + "[Verlassen]" + ] + }, + "sneckomod:SuspiciousHouse": { + "NAME": "Unheimliches Haus", + "DESCRIPTIONS": [ + "Deine Reise durch die Stadt wird durch ein lautes, gellendes Geschrei gestört, das unmöglich von einem Menschen kommen kann. Du gehst auf das Haus zu, von dem das Geschrei kam und siehst durch das Fenster, wie ein Stadtbewohner versucht eine schlangenartige Kreatur, die in einem Käfig sitzt, zum Schweigen zu bringen. NL NL Du betrittst das Haus - ~„HEY!~ Was hast du hier zu suchen?! @RAUS@ @HIER!“@ NL NL Das gefangene Tier ist verängstigt und verkriecht sich in eine Ecke des Käfigs. Es ist offensichtlich unglücklich hier.", + "„Du willst es? @Schön!@ Es ist den Ärger nicht wert.“ NL NL Der Bewohner öffnet mit einem frustrierten ~Säufzen~ den Käfig und greift hinein. Blitzschnell beißt die Kreatur mit der ganzen Stärke seines kleinen Kiefers in den Finger des Mannes. NL NL Bevor er noch das Tier zurückschlagen kann, intervenierst du und #rschlägst ihn zu Boden. Die Schlange kriecht voller Freude auf deinen ausgestreckten Arm, und ihr reist von nun an gemeinsam durch den Spire. Du nennst sie... #y'Clementine'.", + "Die Schlange glotzt dich mit dem Anblick extremer Enttäuschung an - doch zur Verabschiedung lächelt sie wieder, und wünscht dir eine gute Reise." + ], + "OPTIONS": [ + "[Retten] #gErhalte #gein #gSnecko-Junges. #rKämpfe #rgegen #reinen #rverärgerten #rZenturio.", + "[Verlassen]" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/sneckomodResources/localization/deu/KeywordStrings.json b/src/main/resources/sneckomodResources/localization/deu/KeywordStrings.json new file mode 100644 index 0000000000..6866e7ddc5 --- /dev/null +++ b/src/main/resources/sneckomodResources/localization/deu/KeywordStrings.json @@ -0,0 +1,89 @@ +[ + { + "PROPER_NAME": "Irrsicher", + "NAMES": [ + "irrsicher", + "irrsicherer", + "irrsichere", + "snekproof" + ], + "DESCRIPTION": "Die Kosten irrsicherer Karten können durch #yIrren und #yVerwirrung nicht verändert werden." + }, + { + "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": "Überschuss", + "NAMES": [ + "überschuss", + "Overflow", + "overflow" + ], + "DESCRIPTION": "Überschuss-Effekte werden aktiviert wenn beim Ausspielen mindestens #b5 ANDERE Karten auf der Hand sind." + }, + { + "PROPER_NAME": "Irren", + "NAMES": [ + "muddle", + "muddled", + "muddles", + "irre", + "irren", + "irrst", + "irrt", + "geirrt", + "geirrte" + ], + "DESCRIPTION": "Das Irren einer Karte verändert ihre Kosten in diesem Zug auf einen Zufallswert zwischen #b0 und #b3 [REMOVE_SPACE]. Durch das Irren werden die Kosten IMMER verändert." + }, + { + "PROPER_NAME": "Fremd", + "NAMES": [ + "fremdklasse", + "fremdklassen", + "fremd", + "fremde", + "fremden", + "offclass" + ], + "DESCRIPTION": "Alle Karten, die nicht dem eigenen Charakter zugehörig sind, zählen als #yfremd (darunter auch farblose Karten, #rFlüche [REMOVE_SPACE], und #yStatuskarten [REMOVE_SPACE])." + }, + { + "PROPER_NAME": "Geschenk", + "NAMES": [ + "geschenk", + "gift" + ], + "DESCRIPTION": "Wenn du diese Karte in dein Deck aufnimmst, erhältst du eine zusätzliche spezifische Kartenbelohnung." + }, + { + "PROPER_NAME": "Identifizieren", + "NAMES": [ + "identifiziert", + "identify" + ], + "DESCRIPTION": "Ersetze eine #yunindentifizierte Karte durch die Karte, die sie aktuell verkörpert." + }, + { + "PROPER_NAME": "Toxin", + "NAMES": [ + "toxin", + "venom" + ], + "DESCRIPTION": "Wesen mit #yToxin verlieren TP in dessen Höhe wenn sie einen Debuff, abgesehen von #yToxin [REMOVE_SPACE], erleiden." + }, + { + "PROPER_NAME": "Glück", + "NAMES": [ + "glück", + "glücklich", + "lucky" + ], + "DESCRIPTION": "#yÜberschuss Effekte werden unabhängig von der Anzahl der Handkarten aktiviert." + } +] \ No newline at end of file diff --git a/src/main/resources/sneckomodResources/localization/deu/MonsterStrings.json b/src/main/resources/sneckomodResources/localization/deu/MonsterStrings.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/src/main/resources/sneckomodResources/localization/deu/MonsterStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/sneckomodResources/localization/deu/OrbStrings.json b/src/main/resources/sneckomodResources/localization/deu/OrbStrings.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/src/main/resources/sneckomodResources/localization/deu/OrbStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/sneckomodResources/localization/deu/PotionStrings.json b/src/main/resources/sneckomodResources/localization/deu/PotionStrings.json new file mode 100644 index 0000000000..32f85878ed --- /dev/null +++ b/src/main/resources/sneckomodResources/localization/deu/PotionStrings.json @@ -0,0 +1,32 @@ +{ + "sneckomod:DiceRollPotion": { + "NAME": "Kartenflasche", + "DESCRIPTIONS": [ + "Erhalte am Ende des Kampfes #b", + " zusätzliche Kartenbelohnung mit #b3 #yverbesserten ungewöhnlichen #yfremden Karten.", + " zusätzliche Kartenbelohnungen mit jeweils #b3 #yverbesserten ungewöhnlichen #yfremden Karten." + ] + }, + "sneckomod:CheatPotion": { + "NAME": "Felix Felicis", + "DESCRIPTIONS": [ + "#yÜberschuss Effekte werden in diesem Zug immer aktiviert - unabhängig von der Anzahl der Handkarten.", + "#yÜberschuss Effekte werden in den nächsten #b", + " Zügen immer aktiviert - unabhängig von der Anzahl der Handkarten." + ] + }, + "sneckomod:MuddlingPotion": { + "NAME": "Irrer Energietrank", + "DESCRIPTIONS": [ + "#yIrre die #b", + " teuersten Karten auf der Hand. Karten, die durch diesen Trank #ygerirrt werden, können dadurch nicht #b3 kosten." + ] + }, + "sneckomod:OffclassReductionPotion": { + "NAME": "Exotischer Saft", + "DESCRIPTIONS": [ + "#yFremde Handkarten kosten #b", + " weniger." + ] + } +} diff --git a/src/main/resources/sneckomodResources/localization/deu/PowerStrings.json b/src/main/resources/sneckomodResources/localization/deu/PowerStrings.json new file mode 100644 index 0000000000..d017af8aea --- /dev/null +++ b/src/main/resources/sneckomodResources/localization/deu/PowerStrings.json @@ -0,0 +1,193 @@ +{ + "sneckomod:BlunderGuardPower": { + "NAME": "Tsunami", + "DESCRIPTIONS": [ + "#yÜberschuss Effekte verleihen zusätzlich #b", + " #yBlock [REMOVE_SPACE].", + " #yBlock [REMOVE_SPACE]." + ] + }, + "sneckomod:CheapStockPower": { + "NAME": "Ladenhüter", + "DESCRIPTIONS": [ + "#yIrre zu Beginn deines Zuges eine zufällige Handkarte mit den höchsten Kosten.", + "#yIrre zu Beginn deines Zuges #b", + " zufällige Handkarte mit den höchsten Kosten." + ] + }, + "sneckomod:CheatPower": { + "NAME": "Schummeln", + "DESCRIPTIONS": [ + "#yÜberschuss Effekte werden in diesem Zug immer aktiviert - unabhängig von der Anzahl der Handkarten.", + "#yÜberschuss Effekte werden in den nächsten #b", + " Zügen immer aktiviert - unabhängig von der Anzahl der Handkarten." + ] + }, + "sneckomod:MuddleDrawnCardsPower": { + "NAME": "Irrzug", + "DESCRIPTIONS": [ + "#yIrre die erste in diesem Zug gezogene Karte.", + "#yIrre die ersten #b", + " in diesem Zug gezogenen Karten. (noch ", + " übrig)" + ] + }, + "sneckomod:MudshieldPower": { + "NAME": "Irrlichtschild", + "DESCRIPTIONS": [ + "Erhalte immer, wenn du eine Karte #yirrst [REMOVE_SPACE], #b", + " #yBlock [REMOVE_SPACE]." + ] + }, + "sneckomod:OverwhelmingPresencePower": { + "NAME": "Überläufer", + "DESCRIPTIONS": [ + "Wenn du das erste Mal im Zug eine #yfremde Karte spielst, ziehe #b1 Karte.", + "Wenn du das erste Mal im Zug eine #yfremde Karte spielst, ziehe #b ", + " Karten." + ] + }, + "sneckomod:SerpentsNestPower": { + "NAME": "Schlangennest", + "DESCRIPTIONS": [ + "Immer wenn du eine #yMacht spielst, füge ALLEN Gegnern #b1 Schaden zu.", + "Immer wenn du eine #yMacht spielst, füge ALLEN Gegnern #b", + " Schaden zu." + ] + }, + "sneckomod:SerpentMindPower": { + "NAME": "Exotische Form", + "DESCRIPTIONS": [ + "Erhalte am Ende deines Zuges für jede #yKlasse [REMOVE_SPACE], von der du zumindest eine Karte gespielt hast, #b", + " #yStärke.", + " #yStärke." + ] + }, + "sneckomod:SnakeEyesPower": { + "NAME": "Schlangenaugen", + "DESCRIPTIONS": [ + "In diesem Zug spielst du deine nächste #yfremde Karte doppelt.", + "In diesem Zug spielst du deine nächsten #b", + " #yfremden Karten doppelt." + ] + }, + "sneckomod:UnendingSupplyPower": { + "NAME": "Exotischer Vorrat", + "DESCRIPTIONS": [ + "Nimm zu Beginn jedes Zuges #b", + "Nimm zu Beginn jedes Zuges ein #yEcho einer zufälligen #yfremden Karte auf die Hand.", + " #yEchos von zufälligen #yfremden Karten auf die Hand." + ] + }, + "sneckomod:UnknownUpgradedPostCombatPower": { + "NAME": "Verbesserte unidentifizierte Belohnung", + "DESCRIPTIONS": [ + "Erhalte nach dem Kampf #b", + " zusätzliche #yverbesserte #yunidentifizierte Kartenbelohnungen.", + " zusätzliche #yverbesserte #yunidentifizierte Kartenbelohnung.", + "NOTE FOR LOC: NOT USED DO NOT TRANSLATE." + + ] + }, + "sneckomod:UnlimitedRollsPower": { + "NAME": "Unbegrenzte Würfe", + "DESCRIPTIONS": [ + "Nimm am Anfang jedes Zuges einen #ySeelenwürfel+ der #yerschöpft auf die Hand." + ] + }, + "sneckomod:Transmogrifying": { + "NAME": "Materienumwandlung", + "DESCRIPTIONS": [ + " wird transformiert zu einem anderen ", + " Relikt.", + "NOTE FOR LOC: NOT USED DO NOT TRANSLATE." + ] + }, + "sneckomod:ToxicPersonalityPower": { + "NAME": "Toxische Persönlichkeit", + "DESCRIPTIONS": [ + "Immer wenn du einen Debuff anwendest, wende zusätzlich #b", + " #yToxin an.", + "NOTE FOR LOC: NOT USED DO NOT TRANSLATE." + ] + }, + "sneckomod:TyphoonPower": { + "NAME": "Taifun", + "DESCRIPTIONS": [ + "Wenn du in diesem Zug einen #bÜberschuss Effekt aktivierst, spiele eine Kopie von #yTaifunbiss [REMOVE_SPACE].", + "Wenn du in diesem Zug einen #bÜberschuss Effekt aktivierst, spiele #b", + " Kopie von #yTaifunbiss [REMOVE_SPACE]." + ] + }, + "sneckomod:TyphoonPlusPower": { + "NAME": "Taifun+", + "DESCRIPTIONS": [ + "Wenn du in diesem Zug einen #bÜberschuss Effekt aktivierst, spiele eine Kopie von #yTaifunbiss+ [REMOVE_SPACE].", + "Wenn du in diesem Zug einen #bÜberschuss Effekt aktivierst, spiele #b", + " Kopie von #yTaifunbiss+ [REMOVE_SPACE]." + ] + }, + "sneckomod:SerpentineSleuthPower": { + "NAME": "Vipernmacht", + "DESCRIPTIONS": [ + "Erhalte immer, wenn du eine #yMacht spielst [REMOVE_SPACE], #b", + " [E].", + " [E]." + ] + }, + "sneckomod:BigGunsStrengthPower": { + "NAME": "Schwere Geschütze", + "DESCRIPTIONS": [ + "Erhalte immer, wenn du eine Karte spielst, die mindestens #b3 kostet, #b", + " #yStärke [REMOVE_SPACE].", + " #yStärke [REMOVE_SPACE]." + ] + }, + "sneckomod:BigGunsBlockPower": { + "NAME": "Schwere Panzerung", + "DESCRIPTIONS": [ + "Erhalte immer, wenn du eine Karte spielst, die mindestens #b3 kostet, #b", + " #yBlock [REMOVE_SPACE].", + " #yBlock [REMOVE_SPACE]." + ] + }, + "sneckomod:AceOfWandsPower": { + "NAME": "König der Pentagramme", + "DESCRIPTIONS": [ + "Erhalte immer, wenn du einen Debuff anwendest, #b", + " #yBlock [REMOVE_SPACE].", + " #yBlock [REMOVE_SPACE]." + ] + }, + "sneckomod:LacerateDebuff": { + "NAME": "Offene Wunden", + "DESCRIPTIONS": [ + "Immer wenn du in diesem Zug einen Debuff auf diesen Gegner anwendest, wende zusätzlich #b", + " #yToxin an.", + " #yToxin an." + ] + }, + "sneckomod:FountainPower": { + "NAME": "Überfluss", + "DESCRIPTIONS": [ + "#yÜberschuss Effekte wenden zusätzlich #b", + " #yToxin auf einen zufälligen Gegner an.", + " #yToxin auf einen zufälligen Gegner an." + ] + }, + "sneckomod:TrashCanPower": { + "NAME": "Mülleimer", + "DESCRIPTIONS": [ + "Du kannst am Ende jedes Zuges eine Karte auf der Hand #yerschöpfen [REMOVE_SPACE].", + "Du kannst am Ende jedes Zuges bis zu #b", + " Karten auf der Hand #yerschöpfen [REMOVE_SPACE]." + ] + }, + "sneckomod:VenomDebuff": { + "NAME": "Toxin", + "DESCRIPTIONS": [ + "Immer wenn auf diesen Gegner ein Debuff, abgesehen von #yToxin, angewendet wird, verliert er #b", + " TP." + ] + } +} diff --git a/src/main/resources/sneckomodResources/localization/deu/RelicStrings.json b/src/main/resources/sneckomodResources/localization/deu/RelicStrings.json new file mode 100644 index 0000000000..0b9a9c2631 --- /dev/null +++ b/src/main/resources/sneckomodResources/localization/deu/RelicStrings.json @@ -0,0 +1,123 @@ +{ + "sneckomod:SneckoSoul": { + "NAME": "Sneckoseele", + "FLAVOR": "0...3...2...2...1", + "DESCRIPTIONS": [ + "Nimm zu Beginn jedes Kampfes einen #ySeelenwürfel auf die Hand." + ] + }, + "sneckomod:SuperSneckoSoul": { + "NAME": "Super-Sneckoseele", + "FLAVOR": "3120231321230320", + "DESCRIPTIONS": [ + "Ersetzt [#407B93]Sneckoseele[]. NL Nimm zu Beginn jedes ungeraden Zuges einen #ySeelenwürfel auf die Hand. NL Zu Beginn jedes geraden Zuges, ziehe eine zusätzliche Karte und #ysneckomod:irre sie." + ] + }, + "sneckomod:CleanMud": { + "NAME": "Sneckobeschwörerflöte", + "FLAVOR": "Sssssss...", + "DESCRIPTIONS": [ + "#ysneckomod:Geirrte Karten kosten niemals #b3 [REMOVE_SPACE]." + ] + }, + "sneckomod:ConfusingCodex": { + "NAME": "Ring des Snek", + "FLAVOR": "Unleserlich - Dienstag ist Deadline.", + "DESCRIPTIONS": [ + "Wende immer, wenn du #b", + " #ysneckomod:Überschuss Effekte aktivierst, #b1 #ySchwach und #yVerwundbar auf einen zufälligen Gegner an." + ] + }, + "sneckomod:CrystallizedMud": { + "NAME": "Hypnoseanhänger", + "FLAVOR": "Täuschender Nippes.", + "DESCRIPTIONS": [ + "Erhalte in deinem Zug [E]. #ysneckomod:Geirrte Karten kosten niemals #b0 [REMOVE_SPACE]." + ] + }, + "sneckomod:LoadedDie": { + "NAME": "Gezinkter Würfel", + "FLAVOR": "Mit Käse gefüllt.", + "DESCRIPTIONS": [ + "Erhalte immer, wenn eine Karte #ysneckomod:geirrt wird, #b", + " #yBlock [REMOVE_SPACE]." + ] + }, + "sneckomod:RareBoosterPack": { + "NAME": "Boosterpack", + "FLAVOR": "Noch Ungeöffnet.", + "DESCRIPTIONS": [ + "Nimm beim Aufheben #b1 von #b3 #yseltenen #fremden Karten in dein Deck auf." + ] + }, + "sneckomod:SleevedAce": { + "NAME": "Gezinkte Karte", + "FLAVOR": "Wir alle sind Asse.", + "DESCRIPTIONS": [ + "Nimm zu Beginn jedes Kampfes ein #yFalschspielen+ auf die Hand." + ] + }, + "sneckomod:UnknownEgg": { + "NAME": "Unidentifiziertes Ei", + "FLAVOR": "Was wird daraus schlüpfen? Zahle $1000 um zuzusehen.", + "DESCRIPTIONS": [ + "Jede #ysneckomod:fremde Karte, die du erhältst, ist #yverbessert [REMOVE_SPACE]. #yVerbessere beim Aufheben #b2 zufällige #yfremde Karten." + ] + }, + "sneckomod:SuperSneckoEye": { + "NAME": "Super-Snecko-Auge", + "FLAVOR": "0121012", + "DESCRIPTIONS": [ + "Ersetzt #ySnecko-Auge [REMOVE_SPACE]. Ziehe in jedem Zug #b4 Karten mehr. Beginne jeden Kampf #yVerwirrt [REMOVE_SPACE]." + ] + }, + "sneckomod:SneckoTalon": { + "NAME": "Abbild der Retromation", + "FLAVOR": "Oft als Retroabbild abgekürzt.", + "DESCRIPTIONS": [ + "Zu Beginn jedes Zuges kostet eine zufällige Handkarte #b1 weniger, bis du sie spielst." + ] + }, + "sneckomod:BlankCard": { + "NAME": "Leere Karte", + "FLAVOR": "Karten-Mimik.", + "DESCRIPTIONS": [ + "Nimm zu Beginn jedes Kampfes ein #ygremlin:Echo einer zufälligen Karte aus deinem Deck auf die Hand. Es kostet #b0 [REMOVE_SPACE]. (Erschafft keinen #rFluch oder #yStatus [REMOVE_SPACE])" + ] + }, + "sneckomod:D8": { + "NAME": "Mystisches Oktaeder", + "FLAVOR": "Es scheint auf einer Seite schwerer zu sein.", + "DESCRIPTIONS": [ + "Wähle beim Aufheben eine Karte mit #ysneckomod:Überschuss Effekt. Wenn du sie spielst, erhalte #b4 #yBlock und aktiviere den #yÜberschuss Effekt - unabhängig von der Anzahl der Handkarten.", + "Wähle eine Karte für ein ", + "Immer wenn du ", + " spielst, erhalte #b4 #yBlock und aktiviere den #yÜberschuss Effekt - unabhängig von der Anzahl der Handkarten.", + "Die eingelegte Karte wurde aus dem Deck #rentfernt [REMOVE_SPACE]. Das Relikt hat keine Wirkung mehr." + ] + }, + "sneckomod:BabySnecko": { + "NAME": "Snecko-Junges", + "FLAVOR": "Verwirrend bezaubernd - bezaubernd verwirrt.", + "DESCRIPTIONS": [ + "Füge zu Beginn deines Zuges einem zufälligen Gegner #b9 Schaden zu und #ysneckomod:irre #b2 zufällige Karten, die mindestens #b1 kosten." + ] + }, + "sneckomod:SneckoCommon": { + "NAME": "Gütesiegel", + "FLAVOR": "Ich bin der Eiserne, und das ist mein Lieblingsrelikt im Spire! - Werbebroschüre des Händlers", + "DESCRIPTIONS": [ + "Nimm beim Aufheben #b1 von #b5 ungewöhnlichen #ysneckomod:fremden #yMachtkarten in dein Deck auf." + ] + }, + "sneckomod:SneckoBoss": { + "NAME": "Glücksbringer", + "FLAVOR": "Sei deines Glückes Schmied.", + "DESCRIPTIONS": [ + "Wähle beim Aufheben #b1 von #b3 #yCharakteren [REMOVE_SPACE]. Für diese Klasse: Nimm #b3 #yverbesserte ungewöhnliche und #b2 seltene Karten in dein Deck auf. Erhalte nach jedem Kampf eine zusätzliche Kartenbelohnung.", + "Nimm beim Aufheben #b3 verbesserte ungewöhnliche und #b2 seltene ", + " Karten in dein Deck auf. Erhalte nach jedem Kampf eine zusätzliche ", + " Kartenbelohnung." + ] + } +} diff --git a/src/main/resources/sneckomodResources/localization/deu/RunModStrings.json b/src/main/resources/sneckomodResources/localization/deu/RunModStrings.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/src/main/resources/sneckomodResources/localization/deu/RunModStrings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/sneckomodResources/localization/deu/UIStrings.json b/src/main/resources/sneckomodResources/localization/deu/UIStrings.json new file mode 100644 index 0000000000..658d2fe076 --- /dev/null +++ b/src/main/resources/sneckomodResources/localization/deu/UIStrings.json @@ -0,0 +1,86 @@ +{ + "sneckomod:Unknown": { + "TEXT": [ + "Unidentifizierte", + " verbesserte ", + "Zu Beginn des Kampfes nehmen unidentifizierte Karten die Gestalt einer zufälligen Karte an, die ins Schema passt.", + " NL Gewählte Klassen:", + "Zu Beginn des Kampfes nehmen unidentifizierte Karten die Gestalt einer zufälligen Karte einer zufälligen fremden Klasse an, die ins Schema passt.", + "Zu Beginn des Kampfes nehmen unidentifizierte Karten die Gestalt einer zufälligen Karte einer fremden Klasse an, die ins Schema passt." + ] + }, + "sneckomod:UnknownNames": { + "TEXT": [ + "Unidentifizierte" + ] + }, + "sneckomod:UnknownClass": { + "TEXT": [ + "???", + " ", + " ", + "Character", + " ", + "You should never see this. Report to Vex", + "Verbesserte " + ] + }, + "sneckomod:UpgradedUnknownReward": { + "TEXT": [ + "Erhalte eine verbesserte unidentifizierte Karte", + "Wähle eine Karte." + ] + }, + "sneckomod:FreeRetainMod": { + "TEXT": [ + "Behalten. NL " + ] + }, + "sneckomod:ExhaustMod": { + "TEXT": [ + " NL Erschöpft." + ] + }, + "sneckomod:ChallengeMode": { + "TEXT": [ + "Alternativmodus - Reiner Snecko", + "Geschenke können von allen Klassen stammen. Für Spieler empfohlen, die mehr Zufall und einen Sieg durch Chaos bevorzugen." + ] + }, + "sneckomod:LockInBonfireOptions": { + "TEXT": [ + "Identifizieren", + "Wandle eine unidentifizierte Karte permenant in ihre aktuelle Gestalt um.", + "Erfordert eine unidentifizierte Karte.", + "Wähle eine Karte für dein Deck, und entferne die unidentifizierte Karte.", + "[Kleine Aktion] Wandle eine unidentifizierte Karte permenant in ihre aktuelle Gestalt um." + ] + }, + "sneckomod:CommonAttackReward": { + "TEXT": [ + "Erhalte eine fremde Karte", + "Wähle eine Karte." + ] + }, + "sneckomod:DiceRollPotionReward": { + "TEXT": [ + "Erhalte eine verbesserte Karte", + "Wähle eine Karte." + ] + }, + "sneckomod:ColorfulPowersCardReward": { + "TEXT": [ + "Erhalte eine verbesserte Macht", + "Wähle eine Karte." + ] + }, + "sneckomod:AtGameStart": { + "TEXT": [ + "", + " Karten", + "Geschenke enthalten in diesem Run Karten von: ", + " .", + "Wähle." + ] + } +} diff --git a/src/main/resources/sneckomodResources/localization/eng/CardStrings.json b/src/main/resources/sneckomodResources/localization/eng/CardStrings.json index fd3c0aa63a..32703ed69a 100644 --- a/src/main/resources/sneckomodResources/localization/eng/CardStrings.json +++ b/src/main/resources/sneckomodResources/localization/eng/CardStrings.json @@ -147,7 +147,8 @@ }, "sneckomod:OverwhelmingPresence": { "NAME": "Overwhelming", - "DESCRIPTION": "The first time you shuffle your deck each turn, gain [E] and draw !M! card." + "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", @@ -163,7 +164,8 @@ }, "sneckomod:QuickBite": { "NAME": "Snake Rake", - "DESCRIPTION": "Deal !D! damage. 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", @@ -524,7 +526,7 @@ }, "sneckomod:CobraCoil": { "NAME": "Cobra Coil", - "DESCRIPTION": "Deal !D! damage. NL Apply !M! *Constricted. NL sneckomod:Gift: Rare Attack." + "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", @@ -565,8 +567,8 @@ }, "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 !M! cards. NL They will always be cheaper. NL Exhaust." + "DESCRIPTION": "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", @@ -599,19 +601,16 @@ }, "sneckomod:TrashCan": { "NAME": "Trash Can", - "DESCRIPTION": "At the start of your turn, you may Exhaust a card.", - "UPGRADE_DESCRIPTION": "Innate. NL At the start of your turn, you may Exhaust a card." + "DESCRIPTION": "At the end of your turn, you may Exhaust a card." }, "sneckomod:Lacerate": { "NAME": "Lacerate", - "DESCRIPTION": "Deal !D! damage. Whenever this enemy is debuffed this turn they gain !M! sneckomod:Venom. sneckomod:Gift: *Crippling *Cloud.", - "DESCRIPTION_BATTLE": "Deal !D! damage. Whenever this enemy is debuffed this turn they gain !M! sneckomod:Venom." + "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.", - "UPGRADE_DESCRIPTION": "Ethereal. NL Whenever you play a Power, gain [E] [E]. NL sneckomod:Gift: Rare Power.", - "DESCRIPTION_BATTLE": "Ethereal. NL Whenever you play a Power, gain [E].", - "UPGRADE_DESCRIPTION_BATTLE": "Ethereal. NL Whenever you play a Power, gain [E] [E]." + "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 ba166ae748..f36b7d12a3 100644 --- a/src/main/resources/sneckomodResources/localization/eng/EventStrings.json +++ b/src/main/resources/sneckomodResources/localization/eng/EventStrings.json @@ -2,7 +2,7 @@ "sneckomod:D8": { "NAME": "Mystical Octahedron", "DESCRIPTIONS": [ - "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...", + "You walk into a room with large pedestal in the center where a #gmysterious #goctahedron silently floats, emanating a powerful energy. You decide...", "Relic go boom.", "Got relic.", "Decided to leave." diff --git a/src/main/resources/sneckomodResources/localization/eng/KeywordStrings.json b/src/main/resources/sneckomodResources/localization/eng/KeywordStrings.json index 703ddfb818..9491064b2b 100644 --- a/src/main/resources/sneckomodResources/localization/eng/KeywordStrings.json +++ b/src/main/resources/sneckomodResources/localization/eng/KeywordStrings.json @@ -9,15 +9,16 @@ { "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." + "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" + "Overflow", + "overflow" ], "DESCRIPTION": "Overflow effects activate if you have more than #b5 cards in hand." }, @@ -56,7 +57,7 @@ "NAMES": [ "venom" ], - "DESCRIPTION": "Creatures with #yVenom lose HP whenever they gain a debuff that isn't #yVenom." + "DESCRIPTION": "Creatures with #yVenom lose HP you apply a debuff that isn't #yVenom to them." }, { "PROPER_NAME": "Lucky", diff --git a/src/main/resources/sneckomodResources/localization/eng/PotionStrings.json b/src/main/resources/sneckomodResources/localization/eng/PotionStrings.json index d955411c94..ed8a8935ae 100644 --- a/src/main/resources/sneckomodResources/localization/eng/PotionStrings.json +++ b/src/main/resources/sneckomodResources/localization/eng/PotionStrings.json @@ -10,8 +10,8 @@ "sneckomod:CheatPotion": { "NAME": "Liquid Luck", "DESCRIPTIONS": [ - "Overflow effects always activate this turn regardless of hand size.", - "Overflow effects always activate for #b", + "#yOverflow effects always activate this turn regardless of hand size.", + "#yOverflow effects always activate for #b", " turns regardless of hand size." ] }, diff --git a/src/main/resources/sneckomodResources/localization/eng/PowerStrings.json b/src/main/resources/sneckomodResources/localization/eng/PowerStrings.json index 3dcd44c58d..e0c7bd55b7 100644 --- a/src/main/resources/sneckomodResources/localization/eng/PowerStrings.json +++ b/src/main/resources/sneckomodResources/localization/eng/PowerStrings.json @@ -42,17 +42,16 @@ "sneckomod:OverwhelmingPresencePower": { "NAME": "Overwhelming Presence", "DESCRIPTIONS": [ - "The first time you shuffle your deck each turn, gain [E] and draw #b1 card.", - "The first time you shuffle your deck each turn, gain ", - " [E] and draw #b", + "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 card, deal 1 damage to ALL enemies.", - "Whenever you play a #yPower card, deal #b", + "Whenever you play a #yPower, deal #b1 damage to ALL enemies.", + "Whenever you play a #yPower, deal #b", " damage to ALL enemies." ] }, @@ -77,7 +76,7 @@ "DESCRIPTIONS": [ "At the start of your turn, add #b", "At the start of your turn, add an #yEcho of a random #yOffclass card into your hand.", - " #yEchoes of a random #yOffclass cards into your hand." + " #yEchoes of random #yOffclass cards into your hand." ] }, "sneckomod:UnknownUpgradedPostCombatPower": { @@ -131,7 +130,7 @@ "sneckomod:SerpentineSleuthPower": { "NAME": "Serpentine Sleuth", "DESCRIPTIONS": [ - "Whenever you play a #yPower card, gain #b", + "Whenever you play a #yPower [REMOVE_SPACE], gain #b", " [E] .", " [E] ." ] @@ -139,7 +138,7 @@ "sneckomod:BigGunsStrengthPower": { "NAME": "Big Guns", "DESCRIPTIONS": [ - "Whenever you play a card that costs 3+, gain #b", + "Whenever you play a card that costs #b3 or more, gain #b", " #yStrength [REMOVE_SPACE].", " #yStrength [REMOVE_SPACE]." ] @@ -147,7 +146,7 @@ "sneckomod:BigGunsBlockPower": { "NAME": "Blunder Guard", "DESCRIPTIONS": [ - "Whenever you play a card that costs 3+, gain #b", + "Whenever you play a card that costs #b3 or more, gain #b", " #yBlock [REMOVE_SPACE].", " #yBlock [REMOVE_SPACE]." ] @@ -178,8 +177,8 @@ }, "sneckomod:TrashCanPower": { "NAME": "Trash Can", - "DESCRIPTIONS": ["At the start of your turn, you may #yExhaust a card.", - "At the start of your turn, you may #yExhaust up to #b", + "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." ] }, diff --git a/src/main/resources/sneckomodResources/localization/eng/RelicStrings.json b/src/main/resources/sneckomodResources/localization/eng/RelicStrings.json index 3cd42396f9..23b30a0b78 100644 --- a/src/main/resources/sneckomodResources/localization/eng/RelicStrings.json +++ b/src/main/resources/sneckomodResources/localization/eng/RelicStrings.json @@ -24,7 +24,8 @@ "NAME": "Ring of the Snek", "FLAVOR": "Illegible, unreadable, due by Thursday.", "DESCRIPTIONS": [ - "Whenever you activate #b3 #ysneckomod:Overflow effects, apply #b1 #yWeak and #yVulnerable to a random enemy." + "Whenever you activate #b", + " #ysneckomod:Overflow effects, apply #b1 #yWeak and #yVulnerable to a random enemy." ] }, "sneckomod:CrystallizedMud": { @@ -38,7 +39,8 @@ "NAME": "Loaded Die", "FLAVOR": "Cheese-stuffed.", "DESCRIPTIONS": [ - "Whenever a card is #ysneckomod:Muddled, gain #b1 #yBlock [REMOVE_SPACE]." + "Whenever a card is #ysneckomod:Muddled [REMOVE_SPACE], gain #b", + " #yBlock [REMOVE_SPACE]." ] }, "sneckomod:RareBoosterPack": { @@ -52,7 +54,7 @@ "NAME": "Sleeved Ace", "FLAVOR": "We're all aces.", "DESCRIPTIONS": [ - "At the start of each combat, gain a #yMarked #yCard [REMOVE_SPACE]." + "At the start of each combat, gain a #yMarked #yCard+ [REMOVE_SPACE]." ] }, "sneckomod:UnknownEgg": { @@ -73,7 +75,7 @@ "NAME": "Idol of Retromation", "FLAVOR": "Often called the Idol of Reto for short.", "DESCRIPTIONS": [ - "At the start of your turn, reduce the cost of a random card that costs at least #b1 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": { @@ -90,14 +92,15 @@ "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, gain #b4 #yBlock and activate its #ysneckomod:Overflow effect, even if you don't have more than #b5 cards in hand." + " 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 #b9 damage to a random enemy and #ysneckomod:Muddles #b2 random (not #b0 cost, #bX [REMOVE_SPACE], or #yUnplayable [REMOVE_SPACE]) cards in your hand 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": { diff --git a/src/main/resources/sneckomodResources/localization/eng/UIStrings.json b/src/main/resources/sneckomodResources/localization/eng/UIStrings.json index 4e8213a4ef..bdfb271321 100644 --- a/src/main/resources/sneckomodResources/localization/eng/UIStrings.json +++ b/src/main/resources/sneckomodResources/localization/eng/UIStrings.json @@ -43,8 +43,8 @@ }, "sneckomod:ChallengeMode": { "TEXT": [ - "Challenge Mode - Pure Snecko", - "Gifts can be from any class. Recommended for experienced Snecko players." + "Alternate Mode - Pure Snecko", + "Gifts can be from any class. Recommended for players who enjoy more randomness and achieving victory through chaos." ] }, "sneckomod:LockInBonfireOptions": { diff --git a/src/main/resources/sneckomodResources/localization/fra/CardStrings.json b/src/main/resources/sneckomodResources/localization/fra/CardStrings.json index 465f507436..2e785a5f0a 100644 --- a/src/main/resources/sneckomodResources/localization/fra/CardStrings.json +++ b/src/main/resources/sneckomodResources/localization/fra/CardStrings.json @@ -1,16 +1,33 @@ { + "sneckomod:Blunderbus": { + "NAME": "Trombourde", + "DESCRIPTION": "Infligez !D! dégâts à TOUS les ennemis. NL Répétez ceci pour chaque carte coûtant 3 [E] dans votre main." + }, + "sneckomod:Tsunami": { + "NAME": "Tsunami", + "DESCRIPTION": "Les effets sneckomod:Excédents donnent également !M! d'Armure." + }, "sneckomod:CheapStock": { "NAME": "Stock bon marché", - "DESCRIPTION": "Au début de votre tour, réduisez de 1 le coût de la carte sneckomod:Hors-Classe de votre main coûtant le plus." + "DESCRIPTION": "Au début de votre tour, sneckomod:Confondez la carte coûtant le plus d'énergie dans votre main.", + "UPGRADE_DESCRIPTION": "Au début de votre tour, sneckomod:Confondez les !M! cartes coûtant le plus d'énergie dans votre main." }, "sneckomod:Cheat": { - "NAME": "Pure chance", - "DESCRIPTION": "sneckomod:Gekoproof. NL Obtenez sneckomod:Chanceux jusqu'à la fin du tour. NL Épuisement.", - "UPGRADE_DESCRIPTION": "sneckomod:Gekoproof. NL Obtenez sneckomod:chanceux jusqu'à la fin du tour." + "NAME": "Pure Luck", + "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": "Infligez !D! dégâts. NL Répétez ceci pour chaque carte sneckomod:Hors-Classe dans votre main, puis Épuisez ces cartes." + "NAME": "Nouille mortelle", + "DESCRIPTION": "Infligez !D! dégâts. NL sneckomod:Confondez une carte. NL sneckomod:Cadeau: Coûtant 3 [E]", + "DESCRIPTION_BATTLE": "nfligez !D! dégâts. NL sneckomod:Confondez une carte." + }, + "sneckomod:Deception": { + "NAME": "Deception", + "DESCRIPTION": "Gagnez !B! d'Armure. NL Ajoutez une *Onde de choc dans votre main. NL Épuisement." }, "sneckomod:Defend": { "NAME": "Défense", @@ -18,315 +35,583 @@ }, "sneckomod:DefensiveFlair": { "NAME": "Flair passif", - "DESCRIPTION": "Gagnez !B! d'Armure, augmenté de !M! pour chaque carte sneckomod:Hors-Classe dans votre main." + "DESCRIPTION": "Gagnez !B! d'Armure, augmenté de !M! pour chaque carte sneckomod:Hors-Classe dans votre main. NL sneckomod:Cadeau: Peu Commune", + "DESCRIPTION_BATTLE": "Gagnez !B! d'Armure, augmenté de !M! pour chaque carte sneckomod:Hors-Classe dans votre main." }, "sneckomod:DiceBlock": { "NAME": "Armure de dés", - "DESCRIPTION": "Gagnez !M! - !B! d'Armure." + "DESCRIPTION": "Gagnez !B! d'Armure. NL sneckomod:Excédent : Gagnez !B! d'Armure à nouveau." }, "sneckomod:DiceBoulder": { "NAME": "Fléau de dés", - "DESCRIPTION": "Infligez !M! - !D! dégâts. NL Peut être Améliorée à l'infini." + "DESCRIPTION": "Gagnez !B! d'Armure. Augmentez l'Armure de cette carte de !M! et son coût de !qqq! ce combat." }, "sneckomod:DiceCrush": { "NAME": "Coup de dés", - "DESCRIPTION": "Infligez !M! - !D! dégâts." + "DESCRIPTION": "Infligez !D! dégâts. NL sneckomod:Excédent : Piochez 2 cartes." + }, + "sneckomod:DragonsHoard": { + "NAME": "Magot du dragon", + "DESCRIPTION": "Éthérée. NL Gagnez de !M! Force. NL Gagnez !M! de Dextérité.", + "UPGRADE_DESCRIPTION": "Gagnez de !M! Force. NL Gagnez !M! de Dextérité." + }, + "sneckomod:FourOfAKind": { + "NAME": "Carré", + "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": "Pari gagnant", - "DESCRIPTION": "sneckomod:Gekoproof. NL Gagnez !M! - 30 *Âmes. NL Épuisement." + "DESCRIPTION": "Injouable. NL Ne peut pas être retirée de votre deck. NL sneckomod:Cadeau: Rare Améliorée et !M! d'Or.", + "UPGRADE_DESCRIPTION": "Injouable. Éthérée. NL Ne peut pas être retirée de votre deck. NL sneckomod:Cadeau: Rare Améliorée et !M! d'Or.", + "DESCRIPTION_BATTLE": "Injouable.", + "UPGRADE_DESCRIPTION_BATTLE": "Injouable. NL Éthérée." + }, + "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": "Crocs d'acier", - "DESCRIPTION": "Gagnez !M! - !B! d'Armure. NL Infligez !qqq! - !D! dégâts." + "DESCRIPTION": "Infligez !D! dégâts et appliquez !M! de Faiblesse à TOUS les ennemis." }, "sneckomod:ImprovisedAttack": { "NAME": "Attaque improvisée", - "DESCRIPTION": "Infligez !D! dégâts. NL Ajoutez une Attaque sneckomod:Hors-Classe aléatoire dans votre main et sneckomod:Confondez-la." + "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": "Garde improvisée", - "DESCRIPTION": "Gagnez !B! d'Armure. NL Ajoutez une Compétence sneckomod:Hors-Classe aléatoire dans votre main et sneckomod:Confondez-la." + "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": "Coup de bol", + "DESCRIPTION": "Gagnez !B! d'Armure. NL Piochez !M! carte pour que carte en main coûtant 2 [E] ou plus." }, "sneckomod:Nope": { "NAME": "Nope", - "DESCRIPTION": "sneckomod:Gekoproof. NL Épuisez une carte de votre main. NL Remplacez-la par une carte aléatoire de la même classe.", - "UPGRADE_DESCRIPTION": "sneckomod:Gekoproof. NL Épuisez une carte de votre main. NL Remplacez-la par une carte aléatoire de la même classe. Elle coûte 1 [E] de moins.", + "DESCRIPTION": "Gagnez !B! d'Armure. NL Épuisez une carte. Si c'est une couleur, gagnez une carte aléatoire de la même classe.", + "UPGRADE_DESCRIPTION": "Gagnez !B! d'Armure. NL Épuisez une carte. Si c'est une couleur, gagnez une carte aléatoire de la même classe.", "EXTENDED_DESCRIPTION": [ " à Épuiser pour Nope." ] }, - "sneckomod:MasterEye": { - "NAME": "Œil magique", - "DESCRIPTION": "Devenez Confus. NL Piochez !M! cartes supplémentaires au début de chaque tour.", - "UPGRADE_DESCRIPTION": "Devenez Confus. NL Piochez !M! cartes supplémentaires au début de chaque tour." + "sneckomod:SnakeEyes": { + "NAME": "Snake Eyes", + "DESCRIPTION": "Ce tour, votre prochaine carte sneckomod:Hors-classe est jouée deux fois. NL sneckomod:Cadeau: Compétence Rare.", + "UPGRADE_DESCRIPTION": "Ce tour, vos 2 prochaines cartes sneckomod:Hors-classe sont jouées deux fois. NL sneckomod:Cadeau: Compétence Rare.", + "DESCRIPTION_BATTLE": "Ce tour, votre prochaine carte sneckomod:Hors-classe est jouée deux fois.", + "UPGRADE_DESCRIPTION_BATTLE": "Ce tour, vos 2 prochaines cartes sneckomod:Hors-classe sont jouées deux fois." }, "sneckomod:Memorize": { - "NAME": "Mémorisation", - "DESCRIPTION": "sneckomod:Gekoproof. Éphémère. NL Choisissez une carte de votre main qui était *Inconnue, et sneckomod:Identifiez-la.", - "UPGRADE_DESCRIPTION": "sneckomod:Gekoproof. Éphémère. Retenue. NL Choisissez une carte de votre main qui était *Inconnue, et sneckomod:Identifiez-la.", + "NAME": "Memorize", + "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": [ - " à Identifier." + " to Identify.", + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." ] + }, + "sneckomod:MintCondition": { + "NAME": "État impeccable", + "DESCRIPTION": "sneckomod:Excédent: Gagnez !M! de Force." }, "sneckomod:MixItUp": { "NAME": "Cocktail explosif", - "DESCRIPTION": "Infligez !D! dégâts !M! fois. NL *Transformez vos Potions. NL Épuisement." + "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": "Plus de puissance!", - "DESCRIPTION": "Obtenez une carte *Inconnue Améliorée supplémentaire lors des récompenses de fin de 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": "Bouclier de boue", - "DESCRIPTION": "Lorsque vous sneckomod:Confondez une carte, gagnez !M! d'Armure.", - "UPGRADE_DESCRIPTION": "Inné. NL Lorsque vous sneckomod:Confondez une carte, gagnez !M! d'Armure." + "DESCRIPTION": "Lorsque vous sneckomod:Confondez une carte, gagnez !M! d'Armure." + }, + "sneckomod:OverwhelmingPresence": { + "NAME": "Déferlante", + "DESCRIPTION": "Éthérée. NL La première fois que vous jouez une carte sneckomod:Hors-Classe chaque tour, piochez une carte.", + "UPGRADE_DESCRIPTION": "La première fois que vous jouez une carte sneckomod:Hors-Classe chaque tour, piochez une carte." + }, + "sneckomod:RiskySword": { + "NAME": "Épée risquée", + "DESCRIPTION": "Infligez !D! dégâts. NL Quand elle est sneckomod:Confondue, augmentez les dégâts de cette carte de !M! pour le combat." + }, + "sneckomod:PoisonParadise": { + "NAME": "Fontaine", + "DESCRIPTION": "Les effets sneckomod:Excédents appliquent également !M! de sneckomod:Venin à un ennemi aléatoire." }, "sneckomod:PureSnecko": { "NAME": "Shift", - "DESCRIPTION": "sneckomod:Gekoproof. NL Épuisez toutes les cartes sneckomod:Hors-Classe dans votre main, les remplaçant avec des nouvelles them with new ones.", - "UPGRADE_DESCRIPTION": "sneckomod:Gekoproof. NL Épuisez toutes les cartes sneckomod:Hors-Classe dans votre main, les remplaçant avec des nouvelles qui coûtent 1 [E] de moins." + "DESCRIPTION": "Piochez !M! cartes et sneckomod:Confondez-les." }, "sneckomod:QuickBite": { "NAME": "Coupe du serpent", - "DESCRIPTION": "Infligez !D! dégâts. NL Piochez !M! - 2 cartes. NL sneckomod:Confondez la carte coûtant le plus dans votre main." + "DESCRIPTION": "Infligez !D! dégâts. NL Piochez !M! carte et sneckomod:Confondez-la.", + "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. NL Piochez !M! cartes et sneckomod:Confondez-les." }, "sneckomod:QuickMove": { "NAME": "Mouvement vif", - "DESCRIPTION": "Gagnez !B! d'Armure. NL sneckomod:Confondez la carte coûtant le plus dans votre main.", - "UPGRADE_DESCRIPTION": "Gagnez !B! d'Armure. NL sneckomod:Confondez les !M! cartes coûtant le plus dans votre main." + "DESCRIPTION": "Gagnez !B! d'Armure. NL sneckomod:Excédent : Appliquez !M! de Vulnérabilité à TOUS les ennemis." }, "sneckomod:RainOfDice": { "NAME": "Pluie de dés", - "DESCRIPTION": "Infligez !qqq! - !D! dégâts à un ennemi aléatoire. NL sneckomod:Confondez cette carte et remettez-la dans votre main." + "DESCRIPTION": "Infligez !D! dégâts. NL sneckomod:Confondez une carte puis ajoutez *Pluie *de *Dés dans votre main. NL Épuisement.", + "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. NL sneckomod:Confondez une carte puis ajoutez *Pluie *de *Dés+ dans votre main. NL Épuisement." }, "sneckomod:Restock": { "NAME": "Réapprovisionnement", - "DESCRIPTION": "sneckomod:Gekoproof. NL Défaussez votre main. NL Piochez 5-10 cartes. NL Épuisement." + "DESCRIPTION": "Défaussez votre main. NL Piochez !M! cartes, puis sneckomod:Confondez votre main. NL Épuisement." }, "sneckomod:Rotation": { "NAME": "Rotation", - "DESCRIPTION": "sneckomod:Gekoproof. NL Défaussez toutes les cartes sneckomod:Hors-Classe. NL Piochez autant de cartes.", - "UPGRADE_DESCRIPTION": "sneckomod:Gekoproof. NL Défaussez toutes les cartes sneckomod:Hors-Classe. NL Piochez autant de cartes 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": "Vente au rabais", + "DESCRIPTION": "Piochez !qqq! cartes. NL sneckomod:Confondez une carte. NL Épuisement.", + "UPGRADE_DESCRIPTION": "Piochez !qqq! cartes. NL sneckomod:Confondez !M! cartes. NL Épuisement." }, "sneckomod:SerpentIdol": { "NAME": "Idole serpentine", - "DESCRIPTION": "sneckomod:Gekoproof. NL Choisissez 1 carte sneckomod:Hors-Classe parmi 3 à ajouter dans votre main. NL Elle coûte 0 ce tour-ci. NL Épuisement." + "DESCRIPTION": "Choisissez 1 carte sneckomod:Hors-Classe parmi 3 à ajouter dans votre main. NL Elle coûte 0 ce tour. NL Épuisement." }, "sneckomod:SerpentMind": { "NAME": "Forme exotique", - "DESCRIPTION": "sneckomod:Gekoproof. NL Lorsque vous jouez une carte sneckomod:Hors-Classe, piochez 1 carte.", - "UPGRADE_DESCRIPTION": "Lorsque vous jouez une carte sneckomod:Hors-Classe, piochez 1 carte." + "DESCRIPTION": "Éthérée. À la fin de votre tour, gagnez !M! de Force pour chaque couleur unique jouée. NL sneckomod:Cadeau: Rare.", + "UPGRADE_DESCRIPTION": "À la fin de votre tour, gagnez !M! de Force pour chaque couleur unique jouée. NL sneckomod:Cadeau: Rare.", + "DESCRIPTION_BATTLE": "À la fin de votre tour, gagnez !M! de Force pour chaque couleur unique jouée." }, - "sneckomod:SlitherStrike": { - "NAME": "Frappe rampante", - "DESCRIPTION": "Infligez !D! dégâts. NL Réduisez le coût de vos cartes sneckomod:Hors-Classe de votre main de 1 pour ce tour." + "sneckomod:SlitherThrough": { + "NAME": "Glissement sinueux", + "DESCRIPTION": "Infligez !D! dégâts. NL Réduisez le coût des cartes sneckomod:Hors-Classe de votre main de !M! ce tours. NL sneckomod:Cadeau: Peu Commune.", + "DESCRIPTION_BATTLE": "Infligez !D! dégâts. NL Réduisez le coût des cartes sneckomod:Hors-Classe de votre main de !M! ce tours." }, "sneckomod:SnakeSap": { "NAME": "Sève de serpent", - "DESCRIPTION": "sneckomod:Gekoproof. NL Infligez !qqq! - !D! dégâts. NL Gagnez 1 - !M! [E] . NL Épuisement." + "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:SnekBeam": { - "NAME": "Laser Geko", - "DESCRIPTION": "Infligez autant de dégâts à TOUS les ennemis qu'il y a de cartes Inconnues dans votre deck. NL Épuisement.", - "UPGRADE_DESCRIPTION": "Infligez autant de dégâts à TOUS les ennemis qu'il y a de cartes Inconnues dans votre deck.", - "EXTENDED_DESCRIPTION": [ - " NL (Inflige !D! dégâts.) NL Épuisement.", - " NL (Inflige !D! dégâts.)" - ] + "NAME": "Yeux laser", + "DESCRIPTION": "Infligez !D! dégâts. NL Gagnez [E]." }, "sneckomod:SnekBite": { "NAME": "Morsure de geko", - "DESCRIPTION": "Infligez !D! dégâts. NL sneckomod:Confondez la carte coûtant le plus dans votre main.", + "DESCRIPTION": "Infligez !D! dégâts. NL sneckomod:Confondez une carte.", "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. NL sneckomod:Confondez les !M! cartes le coûtant le plus dans votre main." }, "sneckomod:SoulCleanse": { "NAME": "Nettoyage de l'âme", - "DESCRIPTION": "sneckomod:Gekoproof. NL sneckomod:Confondez votre main. Les cartes sneckomod:Confondues de cette façon ne peuvent pas coûter 3. NL Épuisement.", - "UPGRADE_DESCRIPTION": "sneckomod:Gekoproof. NL sneckomod:Confondez votre main. Les cartes sneckomod:Confondues de cette façon ne peuvent pas coûter 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": "Tirage de l'âme", - "DESCRIPTION": "sneckomod:Gekoproof. NL Ajoutez !M! cartes sneckomod:Hors-Classe aléatoires dans votre main. NL Épuisement" + "DESCRIPTION": "Obtenez !M! cartes sneckomod:Hors-Classe aléatoires. Elles gagnent Retenue. NL Épuisement" }, "sneckomod:SoulExchange": { "NAME": "Échange de l'âme", - "DESCRIPTION": "sneckomod:Gekoproof. NL Piochez 1 carte, et choisissez une carte de votre main. *Transformez toute votre main cartes aléatoires de sa classe.", - "UPGRADE_DESCRIPTION": "sneckomod:Gekoproof. NL Piochez !M! cartes, et choisissez une carte de votre main. *Transformez toute votre main cartes aléatoires de sa classe.", - "EXTENDED_DESCRIPTION": [ - "à Épuiser pour Échange de l'âme." - ] + "DESCRIPTION": "Retain. NL sneckomod:Muddle your hand. NL Épuisement." }, "sneckomod:SoulRoll": { "NAME": "Lancer de l'âme", - "DESCRIPTION": "sneckomod:Gekoproof. NL sneckomod:Confondez votre main.", - "UPGRADE_DESCRIPTION": "sneckomod:Gekoproof. NL sneckomod:Confondez votre main. NL Piochez 1 carte." + "DESCRIPTION": "Retenue. NL Gagnez !B! d'Armure. NL sneckomod:Confondez une carte. NL Épuisement." }, "sneckomod:Strike": { "NAME": "Frappe", "DESCRIPTION": "Infligez !D! dégâts." }, + "sneckomod:ToothAndClaw": { + "NAME": "Dents et griffes", + "DESCRIPTION": "Infligez !D! dégâts. NL Gagnez un Surin pour chaque carte couleur unique dans votre main. NL sneckomod:Cadeau: Peu Commune.", + "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. NL Gagnez un Surin Amélioré pour chaque carte couleur unique dans votre main. NL sneckomod:Cadeau: Peu Commune.", + "DESCRIPTION_BATTLE": "Infligez !D! dégâts. NL Gagnez un Surin pour chaque carte couleur unique dans votre main.", + "UPGRADE_DESCRIPTION_BATTLE": "Infligez !D! dégâts. NL Gagnez un Surin Amélioré pour chaque carte couleur unique dans votre main." + }, + "sneckomod:TyphoonFang": { + "NAME": "Morsure Typhon", + "DESCRIPTION": "Infligez !D! dégâts. NL sneckomod:Excédent: Ce tour, lorsque vous activez un effet sneckomod:Excédent, jouez une copie de cette carte." + }, + "sneckomod:Yearn": { + "NAME": "Aspiration", + "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": "Fouet de queue", - "DESCRIPTION": "Infligez !D! dégâts. NL Appliquez !M! - 2 de Faiblesse. NL Appiquez !M! - 2 Vulnérabilité." + "DESCRIPTION": "Infligez !D! dégâts. NL sneckomod:Excédent : Appliquez !M! de Faiblesse et de Vulnérabilité." }, "sneckomod:Transmogrify": { "NAME": "Transfiguration", - "DESCRIPTION": "Choisissez 1 Relique à perdre parmi 2. NL Obtenez une Relique aléatoire de la même rareté. NL Épuisement.", + "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": [ "Je n'ai aucune Relique à échanger.", "Choisissez une Relique à perdre.", "Perdez ", " et obtenez une autre Relique ", - " ." + " .", + "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": "Déchet en trésor", - "DESCRIPTION": "sneckomod:Gekoproof. NL Épuisez une carte. NL Gagnez autant de [E] que son coût. NL Épuisement.", - "UPGRADE_DESCRIPTION": "sneckomod:Gekoproof. NL Épuisez une carte. NL Gagnez autant de [E] que son coût." + "DESCRIPTION": "Gagnez !B! d'Armure. NL Épuisez une carte. NL Gagnez autant de [E] que son coût. NL Épuisement.", + "UPGRADE_DESCRIPTION": "Gagnez !B! d'Armure. NL Épuisez une carte. NL Gagnez autant de [E] que son coût." }, "sneckomod:UnendingSupply": { "NAME": "Source inépuisable", - "DESCRIPTION": "Au début de chaque tour, ajoutez une carte sneckomod:Hors-Classe aléatoire à votre main." + "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": "??? Basique", - "DESCRIPTION": "Carte *Inconnue du deck de départ d'un Personnage.", - "UPGRADE_DESCRIPTION": "Carte *Inconnue Améliorée du deck de départ d'un Personnage." + "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": "??? coûtant 0", - "DESCRIPTION": "Carte *Inconnue coûtant 0.", - "UPGRADE_DESCRIPTION": "Carte *Inconnue Améliorée coûtant 0." + "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": "??? coûtant 1", - "DESCRIPTION": "Carte *Inconnue coûtant 1.", - "UPGRADE_DESCRIPTION": "Carte *Inconnue Améliorée coûtant 1." + "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": "??? coûtant 2", - "DESCRIPTION": "Carte *Inconnue coûtant 2.", - "UPGRADE_DESCRIPTION": "Carte *Inconnue Améliorée coûtant 2." + "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": "??? coûtant 3", - "DESCRIPTION": "Carte *Inconnue coûtant 3.", - "UPGRADE_DESCRIPTION": "Carte *Inconnue Améliorée coûtant 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." }, "sneckomod:UnknownBlock": { "NAME": "??? Armure", - "DESCRIPTION": "Carte *Inconnue d'Armure.", - "UPGRADE_DESCRIPTION": "Carte *Inconnue Améliorée d'Armure." + "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": "Carte Boss *Inconnue.", - "UPGRADE_DESCRIPTION": "Carte Boss *Inconnue Améliorée." + "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": "*Unknown YouShouldNeverSeeThis-ReportToDev Card.", - "UPGRADE_DESCRIPTION": "Carte *Unknown YouShouldNeverSeeThis-ReportToDev Améliorée." + "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": "??? Incolore", - "DESCRIPTION": "Carte *Inconnue Incolore.", - "UPGRADE_DESCRIPTION": "Carte *Inconnue Améliorée Incolore." + "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": "??? Attaque C", - "DESCRIPTION": "Carte Attaque *Inconnue Commune.", - "UPGRADE_DESCRIPTION": "Carte Attaque *Inconnue Améliorée Commune." + "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": "??? Compétence C", - "DESCRIPTION": "Carte Compétence *Inconnue Commune.", - "UPGRADE_DESCRIPTION": "Carte Compétence *Inconnue Améliorée Commune." + "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": "??? Dextérité", - "DESCRIPTION": "Carte *Inconnue qui donne de la Dextérité.", - "UPGRADE_DESCRIPTION": "Carte *Inconnue Améliorée qui donne de la Dextérité." + "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": "??? Pioche", - "DESCRIPTION": "Carte *Inconnue qui fait Piocher.", - "UPGRADE_DESCRIPTION": "Carte *Inconnue Améliorée qui fait Piocher." + "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": "??? Éthérée", - "DESCRIPTION": "Carte *Inconnue Éthérée.", - "UPGRADE_DESCRIPTION": "Carte *Inconnue Améliorée Éthérée." + "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": "??? Épuisable", - "DESCRIPTION": "Carte *Inconnue ayant Épuisement.", - "UPGRADE_DESCRIPTION": "Carte *Inconnue Améliorée ayant Épuisement." + "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": "??? Attaque R", - "DESCRIPTION": "Carte Attaque *Inconnue Rare.", - "UPGRADE_DESCRIPTION": "Carte Attaque *Inconnue Améliorée Rare." + "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": "??? Pouvoir R", - "DESCRIPTION": "Carte Pouvoir *Inconnue Rare.", - "UPGRADE_DESCRIPTION": "Carte Pouvoir *Inconnue Améliorée Rare." + "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": "??? Compétence R", - "DESCRIPTION": "Carte Compétence *Inconnue Rare.", - "UPGRADE_DESCRIPTION": "Carte Compétence *Inconnue Améliorée Rare." + "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": "??? Force", - "DESCRIPTION": "Carte *Inconnue qui donne de la Force.", - "UPGRADE_DESCRIPTION": "Carte *Inconnue Améliorée qui donne de la Force." + "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": "??? Frappe", - "DESCRIPTION": "Carte Frappe *Inconnue.", - "UPGRADE_DESCRIPTION": "Carte Frappe *Inconnue Améliorée." + "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": "??? Attaque PC", - "DESCRIPTION": "Carte Attaque *Inconnue Peu Commune.", - "UPGRADE_DESCRIPTION": "Carte Attaque *Inconnue Améliorée Peu Commune." + "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": "??? Pouvoir PC", - "DESCRIPTION": "Carte Pouvoir *Inconnue Peu Commune.", - "UPGRADE_DESCRIPTION": "Carte Pouvoir *Inconnue Améliorée Peu Commune." + "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": "??? Compétence PC", - "DESCRIPTION": "Carte Compétence *Inconnue Peu Commune.", - "UPGRADE_DESCRIPTION": "Carte Compétence *Inconnue Améliorée Peu Commune." + "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": "??? Vulnérabilité", - "DESCRIPTION": "Carte *Inconnue qui donne de la Vulnérabilité.", - "UPGRADE_DESCRIPTION": "Carte *Inconnue Améliorée qui donne de la Vulnérabilité." + "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": "??? Faiblesse", - "DESCRIPTION": "Carte *Inconnue qui donne de la Faiblesse.", - "UPGRADE_DESCRIPTION": "Carte *Inconnue Améliorée qui donne de la Faiblesse." + "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": "??? coûtant X", - "DESCRIPTION": "Carte *Inconnue coûtant X.", - "UPGRADE_DESCRIPTION": "Carte *Inconnue Améliorée coûtant X." + "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": "Lancers illimités", - "DESCRIPTION": "Au début de votre tour, ajoutez un gremlin:Écho de *Lancer *de *l'âme à votre main.", - "UPGRADE_DESCRIPTION": "Inné. NL Au début de votre tour, ajoutez un gremlin:Écho de *Lancer *de *l'âme à votre main." + "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": "Contemplez !", + "DESCRIPTION": "Infligez !D! dégâts. NL sneckomod:Excédent: Gagnez !M! Surins.", + "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. NL sneckomod:Excédent: Gagnez !M! Surins." + }, + "sneckomod:SaveForLater": { + "NAME": "Sous le coude", + "DESCRIPTION": "Infligez !D! dégâts. NL Retenez !M! carte à la fin de votre tour.", + "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. NL Retenez !M! cartes à la fin de votre tour." + }, + "sneckomod:PowerShot": { + "NAME": "Cartouche spéciale", + "DESCRIPTION": "Infligez !D! dégâts. Lorsque vous jouez un Pouvoir, remettez cette carte de votre défausse à votre main." + }, + "sneckomod:LilGuardian": { + "NAME": "P'tit Gardien", + "DESCRIPTION": "Gagnez !B! d'Armure. Lorsque vous jouez une carte coûtant 2 [E] ou plus, jouez ceci de votre main." + }, + "sneckomod:CrystalBoomerang": { + "NAME": "Boomerang de cristal", + "DESCRIPTION": "Mettez une carte de votre défausse à votre main. NL Si c'est une carte sneckomod:Hors-Classe, gagnez !B! d'Armure." + }, + "sneckomod:ViperEssence": { + "NAME": "Essence de vipère", + "DESCRIPTION": "Éthérée. NL sneckomod:Hors-Classe. NL Gagnez !M! de Force." + }, + "sneckomod:Amass": { + "NAME": "Amassage", + "DESCRIPTION": "Gagnez !B! d'Armure. NL Gagne de l'Armure supplémentaire égale au coût total en [E] de la main.", + "UPGRADE_DESCRIPTION": "Gagnez !B! d'Armure. NL Gagne de l'Armure supplémentaire égale à deux fois le coût total en [E] de la main." + }, + "sneckomod:Medusa": { + "NAME": "Méduse", + "DESCRIPTION": "Infligez !D! dégâts. NL Appliquez !M! de sneckomod:Venin. NL sneckomod:Cadeau: Débuff Commun.", + "DESCRIPTION_BATTLE": "Infligez !D! dégâts. NL Appliquez !M! de sneckomod:Venin." + }, + "sneckomod:Cower": { + "NAME": "Recroquevillement", + "DESCRIPTION": "Gagnez !B! d'Armure. NL Ajoutez une *Planque dans votre main. NL Épuisement.", + "UPGRADE_DESCRIPTION": "Gagnez !B! d'Armure. NL Ajoutez une *Planque+ dans votre main. NL Épuisement." }, "sneckomod:WideSting": { "NAME": "Piqûre profonde", - "DESCRIPTION": "Infligez !M! - !D! dégâts à TOUS les ennemis. NL Améliorez toutes les cartes sneckomod:Hors-Classe de votre main." + "DESCRIPTION": "Infligez !D! dégâts à TOUS les ennemis. NL Améliorez toutes les cartes sneckomod:Hors-Classe dans votre main. NL sneckomod:Cadeau: Commune.", + "DESCRIPTION_BATTLE": "Infligez !D! dégâts à TOUS les ennemis. NL Améliorez toutes les cartes sneckomod:Hors-Classe dans votre main." + }, + "sneckomod:GildedShield": { + "NAME": "Bouclier doré", + "DESCRIPTION": "Gagnez !B! d'Armure. NL sneckomod:Confondez cette carte, puis remettez-la dans votre main." + }, + "sneckomod:Mesmerize": { + "NAME": "Envoûtement", + "DESCRIPTION": "TOUS les ennemis perdent !M! de Force. NL sneckomod:Confondez une carte. NL Épuisement." + }, + "sneckomod:Serpentscale": { + "NAME": "Peau écailleuse", + "DESCRIPTION": "Infligez !D! dégâts. NL Gagnez 1 d'Armure* expansioncontent:Plaquée. NL sneckomod:Excédent: Gagnez !M! d'Armure* Plaquée* à la place instead." + }, + "sneckomod:OtherworldlySlash": { + "NAME": "Tranche inter-monde", + "DESCRIPTION": "Infligez !D! dégâts. NL Si vous avez joué une carte sneckomod:Hors-Classe ce tour, infligez !D! dégâts à nouveau. NL sneckomod:Cadeau: Commune.", + "DESCRIPTION_BATTLE": "Infligez !D! dégâts. NL Si vous avez joué une carte sneckomod:Hors-Classe ce tour, infligez !D! dégâts à nouveau." + }, + "sneckomod:BeyondArmor": { + "NAME": "Armure de l'Au-delà", + "DESCRIPTION": "Gagnez !B! d'Armure. NL Mettez !M! cartes sneckomod:Hors-Classe aléatoires de votre pioche dans votre main. NL sneckomod:Cadeau: Commune.", + "DESCRIPTION_BATTLE": "Gagnez !B! d'Armure. NL Mettez !M! cartes sneckomod:Hors-Classe aléatoires de votre pioche dans votre main." + }, + "sneckomod:BlunderGuard": { + "NAME": "Garde improvisée", + "DESCRIPTION": "Lorsque vous jouez une carte coûtant 3 [E] ou plus, gagnez !qqq! d'Armure et !M! de Force.", + "UPGRADE_DESCRIPTION": "Lorsque vous jouez une carte coûtant 3 [E] ou plus, gagnez !qqq! d'Armure et !M! de Force." + }, + "sneckomod:WideAngle": { + "NAME": "Grand angle", + "DESCRIPTION": "Retenue. NL Infligez !D! dégâts à TOUS les ennemis." + }, + "sneckomod:SerpentsNest": { + "NAME": "Nid de serpents", + "DESCRIPTION": "Lorsque vous jouez un Pouvoir, infligez !M! dégâts à TOUS les ennemis. NL sneckomod:Cadeau: Pouvoir Peu Commun.", + "DESCRIPTION_BATTLE": "Lorsque vous jouez un Pouvoir, infligez !M! dégâts à TOUS les ennemis." + }, + "sneckomod:Whack": { + "NAME": "Vlan !", + "DESCRIPTION": "Infligez !D! dégâts. NL Ajoutez un *Fracas dans votre main. NL Épuisement.", + "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. NL Ajoutez un *Fracas+ dans votre main. NL Épuisement." + }, + "sneckomod:CobraCoil": { + "NAME": "Spire du cobra", + "DESCRIPTION": "Infligez !D! dégâts. NL L'ennemi prend !M! dégâts à la fin de chacun de ses tours. NL sneckomod:Cadeau: Attaque Rare." + }, + "sneckomod:Belittle": { + "NAME": "Dépréciation", + "DESCRIPTION": "L'ennemi perd !M! PVs pour chaque débuff unique qu'ils ont. NL sneckomod:Cadeau: Débuff Peu Commun.", + "DESCRIPTION_BATTLE": "L'ennemi perd !M! PVs pour chaque débuff unique qu'ils ont." + }, + "sneckomod:Jackpot": { + "NAME": "Jackpot", + "DESCRIPTION": "Retenue. NL Gagnez [E] [E]. NL Épuisement.", + "UPGRADE_DESCRIPTION": "Retenue. NL Gagnez [E] [E] [E]. NL Épuisement." + }, + "sneckomod:MakeshiftBlade": { + "NAME": "Lame de fortune", + "DESCRIPTION": "Infligez !D! dégâts. Si la cible a au moins !M! débuffs, piochez !qqq! cartes. NL sneckomod:Cadeau: Débuff.", + "DESCRIPTION_BATTLE": "Infligez !D! dégâts. Si la cible a au moins !M! débuffs, piochez !qqq! cartes." + }, + "sneckomod:LatchOn": { + "NAME": "Parasitage", + "DESCRIPTION": "Infligez !D! dégâts à TOUS les ennemis. NL Ajoutez une *Essence *de *Vipère dans votre main." + }, + "sneckomod:ComboString": { + "NAME": "Chaîne de combos", + "DESCRIPTION": "Infligez !D! dégâts pour chaque carte sneckomod:Hors-Classe jouée ce tour. NL sneckomod:Cadeau: Peu Commune.", + "EXTENDED_DESCRIPTION": [ + " NL (touche ", + " x fois.)" + ], + "DESCRIPTION_BATTLE": "Infligez !D! dégâts pour chaque carte sneckomod:Hors-Classe jouée ce tour." + }, + "sneckomod:ThrowingCards": { + "NAME": "Lancer de cartes", + "DESCRIPTION": "Ajoutez X copies de *FTL dans votre main. NL Gagnez [E]. NL Épuisement.", + "UPGRADE_DESCRIPTION": "Ajoutez X copies de *FTL+ dans votre main. NL Gagnez [E]. NL Épuisement." + }, + "sneckomod:RoundaboutSwing": { + "NAME": "Swing circulaire", + "DESCRIPTION": "Infligez !D! dégâts. NL Placez une carte de votre main au dessus de votre pioche. NL Piochez !M! cartes supplémentaires au prochain tour." + }, + "sneckomod:MarkedCard": { + "NAME": "Carte Marquée", + "DESCRIPTION": "sneckomod:Confondez une carte. NL Elle sera toujours moins chère. NL Épuisement.", + "UPGRADE_DESCRIPTION": "Retenue. NL sneckomod:Confondez une carte. NL Elle sera toujours moins chère. NL Épuisement." + }, + "sneckomod:InertBlade": { + "NAME": "Lame inerte", + "DESCRIPTION": "Infligez !D! dégâts. NL Si ceci coûte... NL 1 [E] ou plus : Piochez !M! cartes. NL 2 [E] ou plus : Gagnez !M! de Force. NL 3 [E] ou plus : Gagnez [E].", + "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. NL Si ceci coûte... NL 1 [E] ou plus : Piochez !M! cartes. NL 2 [E] ou plus : Gagnez !M! de Force. NL 3 [E] ou plus : Gagnez [E] [E]." + }, + "sneckomod:PerpetualSerpent": { + "NAME": "Serpent perpétuel", + "DESCRIPTION": "Infligez !D! dégâts. NL sneckomod:Excédent : Gagnez [E] [E]." + }, + "sneckomod:LastStrike": { + "NAME": "Frappe finale", + "DESCRIPTION": "Infligez !D! dégâts. NL Répétez ceci pour chaque carte Frappe unique jouée ce combat. NL sneckomod:Cadeau: Frappe.", + "UPGRADE_DESCRIPTION": "Infligez !D! dégâts. NL Répétez ceci pour chaque carte Frappe unique jouée ce combat. NL sneckomod:Cadeau: Frappe.", + "DESCRIPTION_BATTLE": "Infligez !D! dégâts. NL Répétez ceci pour chaque carte Frappe unique jouée ce combat.", + "UPGRADE_DESCRIPTION_BATTLE": "Infligez !D! dégâts. NL Répétez ceci pour chaque carte Frappe unique jouée ce combat.", + "EXTENDED_DESCRIPTION": [ + " NL (touche ", + " x fois supplémentaires.)" + ] + }, + "sneckomod:AceOfWands": { + "NAME": "Reine des Pentacles", + "DESCRIPTION": "Éthérée. NL Lorsque vous appliquez un débuff sur un ennemi, gagnez !M! d'Armure. NL sneckomod:Cadeau: Débuff.", + "UPGRADE_DESCRIPTION": "Lorsque vous appliquez un débuff sur un ennemi, gagnez !M! d'Armure. NL sneckomod:Cadeau: Débuff." + }, + "sneckomod:FlashInThePan": { + "NAME": "Feu de paille", + "DESCRIPTION": "Gagnez !B! d'Armure. NL Défaussez votre main. NL Piochez autant de cartes au prochain tour." + }, + "sneckomod:TrashCan": { + "NAME": "Vide-ordures", + "DESCRIPTION": "À la fin de votre tour, vous pouvez Épuiser une carte." + }, + "sneckomod:Lacerate": { + "NAME": "Lacération", + "DESCRIPTION": "Appliquez !M! de sneckomod:Venin à TOUS les ennemis. NL Obtenez un *Nuage *Paralysant. NL Épuisement.", + "UPGRADE_DESCRIPTION": "Appliquez !M! de sneckomod:Venin à TOUS les ennemis. NL Obtenez un *Nuage *Paralysant+. NL Épuisement." + }, + "sneckomod:SerpentineSleuth": { + "NAME": "Détective serpent", + "DESCRIPTION": "Éthérée. NL Lorsque vous jouez un Pouvoir, gagnez [E]. NL sneckomod:Cadeau: Pouvoir Rare.", + "DESCRIPTION_BATTLE": "Éthérée. NL Lorsque vous jouez un Pouvoir, gagnez [E]." } } + diff --git a/src/main/resources/sneckomodResources/localization/fra/EventStrings.json b/src/main/resources/sneckomodResources/localization/fra/EventStrings.json index b5380154bc..8fe13251fb 100644 --- a/src/main/resources/sneckomodResources/localization/fra/EventStrings.json +++ b/src/main/resources/sneckomodResources/localization/fra/EventStrings.json @@ -2,17 +2,17 @@ "sneckomod:D8": { "NAME": "Octaèdre mystique", "DESCRIPTIONS": [ - "Approchez l'octaèdre mystique.", + "À travers la brume, vous arrivez dans un espace tranquille. Au centre des ruines, un #goctaèdre #mystérieux flotte silencieusement. Il tourne lentement, sa surface #b~brillant~ #b~faiblement,~ comme s'il s'agissait d'un #y~artéfact~ #y~primordial.~ NL Alors que vous tendez la main, sur le point de toucher sa surface, l'octaèdre #b~soudainement~ #b~s'illumine,~ et des runes complexes défilent dans un flot de lumière. Vous sentez un #r@léger@ #r@tremblement@ s'élever du sol, l'air environnant devient #pde #pplus #pen #pplus #plourd, et l'espace entier semble retenir son souffle, attendant votre prochaine action. Vous décidez...", "La relique fait boom.", "Vous obtenez la relique.", "Vous décidez de partir." ], "OPTIONS": [ "[Mettre en pièces] #rPerdez #r", - " #rPV . #gGagnez #g5 #gcartes #gInconnues", - "[Prendre] #gGagnez #gOctaèdre #gmystique. #rMaudit #r- #rDouleur.", + " #rPV . #gChoisissez #b1 Carte #yHors-Classe Rare parmi #b3 à Obtenir.", + "[Prendre] #gObtenez #gOctaèdre #gmystique. #rMaudit #r- #rDouleur.", "[Quitter]", - "[Verrouillé] Requiert une carte qui choisit un nombre aléatoire." + "[Verrouillé] Requiert une carte Excédente." ] }, "sneckomod:BackToBasics": { @@ -33,7 +33,7 @@ "Le serpent vous regarde d'un air extrêmement déçu, mais finit par sourire et vous souhaite un bon voyage." ], "OPTIONS": [ - "[D'accord] #gGagnez #gune #gRelique #galéatoire. #rSoyez #rMaudit #r- #rPerplexité.", + "[D'accord] #gObtenez #gune #gRelique #gdu #gGeckobra. #rSoyez #rMaudit #r- #rPerplexité.", "[Pas d'accord]", "[Quitter]" ] @@ -46,7 +46,7 @@ "Le serpent vous regarde d'un air extrêmement déçu, alors que vous quittez la maison." ], "OPTIONS": [ - "[Secourir] #gGagnez #gJeune #gGeckobra. #rSoyez #rMaudit #r- #rPerplexité.", + "[Secourir] #gGagnez #gJeune #gGeckobra. #rCombattez #run #rCenturion #ren #rColère.", "[Quitter]" ] } diff --git a/src/main/resources/sneckomodResources/localization/fra/KeywordStrings.json b/src/main/resources/sneckomodResources/localization/fra/KeywordStrings.json index 9e6ef632bb..7d410d53e5 100644 --- a/src/main/resources/sneckomodResources/localization/fra/KeywordStrings.json +++ b/src/main/resources/sneckomodResources/localization/fra/KeywordStrings.json @@ -7,11 +7,34 @@ ], "DESCRIPTION": "Les cartes Gekoproof ne sont pas affectées par la #yConfusion et ne peuvent pas être #yConfondues." }, + { + "PROPER_NAME": "Couleur", + "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": "Excédent", + "NAMES": [ + "Overflow", + "overflow", + "Excédent", + "Excédente", + "Excédentes", + "excédent", + "excédente", + "excédentes" + ], + "DESCRIPTION": "Les effets des cartes Excédentes s'activent si vous avez plus de #b5 cartes en main." + }, { "PROPER_NAME": "Confondre", "NAMES": [ "confondez", "confondues", + "confondez-la", "muddle", "muddled" ], @@ -24,8 +47,16 @@ "hors-classe", "offclass" ], - "DESCRIPTION": "Une carte Hors-classe est n'importe quelle carte obtensible d'une classe autre que la vôtre (y compris les cartes Incolores, les Malédictions et les Statuts)." + "DESCRIPTION": "Une carte Hors-classe est est une carte d'une autre classe que la vôtre (y compris les cartes Incolores, les Malédictions et les Statuts)." }, + { + "PROPER_NAME": "Cadeau", + "NAMES": [ + "gift", + "cadeau" + ], + "DESCRIPTION": "Lorsque vous obtenez cette carte, obtenez une récompense avec le type de carte suivant." + }, { "PROPER_NAME": "Identification", "NAMES": [ @@ -35,6 +66,14 @@ ], "DESCRIPTION": "Remplace une carte #yInconnue par sa carte aléatoire actuelle de façon permanente." }, + { + "PROPER_NAME": "Venin", + "NAMES": [ + "venom", + "venin" + ], + "DESCRIPTION": "Les Créatures avec du #yVenin perdent des PVs lorsque vous leur appliquez un débuff qui n'est pas du #yVenin." + }, { "PROPER_NAME": "Chanceux", "NAMES": [ @@ -42,6 +81,6 @@ "Chanceux", "chanceux" ], - "DESCRIPTION": "Les cartes qui génèrent un nombre aléatoire pour leurs effets choisissent le nombre maximal possible. (N'affecte pas l'action de Confondre)" + "DESCRIPTION": "Les effets des cartes Excédentes s'activeront ce tour, peu importe la taille de la main." } ] diff --git a/src/main/resources/sneckomodResources/localization/fra/PotionStrings.json b/src/main/resources/sneckomodResources/localization/fra/PotionStrings.json index b07e14e161..414a785d1f 100644 --- a/src/main/resources/sneckomodResources/localization/fra/PotionStrings.json +++ b/src/main/resources/sneckomodResources/localization/fra/PotionStrings.json @@ -1,32 +1,32 @@ { "sneckomod:DiceRollPotion": { - "NAME": "Potion potentiellement puissante", + "NAME": "Carte embouteillée", "DESCRIPTIONS": [ - "Infligez #b", - "-", - " dégâts." + "Utilisez ceci pendant le combat pour ajouter #b", + " récompense de carte avec #b3 cartes #yHors-Classe #yAméliorées Peu Communes dans les récompenses de la salle.", + " récompenses de carte avec #b3 cartes #yHors-Classe #yAméliorées Peu Communes dans les récompenses de la salle." ] }, "sneckomod:CheatPotion": { "NAME": "Chance liquide", "DESCRIPTIONS": [ - "Ce tour, les cartes qui choisissent un nombre aléatoire pour leurs effets choisissent le nombre maximum possible.", - "Pour #b", - " tours, les cartes qui choisissent un nombre aléatoire pour leurs effets choisissent le nombre maximum possible." + "Les effets des cartes Excédentes s'activeront ce tour, peu importe la taille de la main.", + "Les effets des cartes Excédentes s'activeront pendant #b", + " tours, peu importe la taille de la main." ] }, "sneckomod:MuddlingPotion": { "NAME": "Boisson énergisante dopée", "DESCRIPTIONS": [ "#yConfondez les #b", - " cartes qui coûtent le plus dans votre main. Les cartes #yConfondues de cette façon ne peuvent coûter 3." + " cartes qui coûtent le plus dans votre main. Les cartes #yConfondues de cette façon ne peuvent coûter 3 [REMOVE_SPACE]." ] }, "sneckomod:OffclassReductionPotion": { "NAME": "Breuvage exotique", "DESCRIPTIONS": [ "Réduisez le coût des cartes #yHors-classe dans votre main de #b", - "." + " [REMOVE_SPACE]." ] } -} \ No newline at end of file +} diff --git a/src/main/resources/sneckomodResources/localization/fra/PowerStrings.json b/src/main/resources/sneckomodResources/localization/fra/PowerStrings.json index 113f0087e9..8432680c2d 100644 --- a/src/main/resources/sneckomodResources/localization/fra/PowerStrings.json +++ b/src/main/resources/sneckomodResources/localization/fra/PowerStrings.json @@ -1,18 +1,26 @@ { + "sneckomod:BlunderGuardPower": { + "NAME": "Tsunami", + "DESCRIPTIONS": [ + "Les effets #yExcédents donnent également #b", + " #yd'Armure [REMOVE_SPACE].", + " #yd'Armure [REMOVE_SPACE]." + ] + }, "sneckomod:CheapStockPower": { "NAME": "Stock bon marché", "DESCRIPTIONS": [ - "Au début de votre tour, réduisez le coût de la carte #yHors-classe coûtant le plus de #b1.", - "Au début de votre tour, réduisez le coût de la carte #yHors-classe coûtant de #b1 #b", + "Au début de votre tour, #yConfondez votre carte coûtant le plus dans votre main.", + "Au début de votre tour, #yConfondez votre carte coûtant le plus dans votre main #b", " fois." ] }, "sneckomod:CheatPower": { "NAME": "Triche", "DESCRIPTIONS": [ - "Ce tour, les cartes qui génèrent un nombre aléatoire pour leurs effets choisissent le nombre maximum possible.", + "Ce tour, les cartes qui ont un effet #yExcédent l'activent toujours quand elles sont jouées.", "Pour les #b", - " prochains tours, les cartes qui génèrent un nombre aléatoire pour leurs effets choisissent le nombre maximum possible." + " prochains tours, les cartes qui ont un effet #yExcédent l'activent toujours quand elles sont jouées." ] }, "sneckomod:MuddleDrawnCardsPower": { @@ -28,43 +36,158 @@ "NAME": "Bouclier de boue", "DESCRIPTIONS": [ "Lorsque vous #yConfondez une carte, gagnez #b", - " #yd'Armure." + " #yd'Armure [REMOVE_SPACE]." ] }, - "sneckomod:SerpentMindPower": { - "NAME": "Esprit serpentin", + "sneckomod:OverwhelmingPresencePower": { + "NAME": "Présence écrasante", "DESCRIPTIONS": [ - "Lorsque vous jouez une carte #yHors-classe, piochez #b", - " carte.", + "La première fois que vous jouez une carte #yHors-Classe à chaque tour, piochez #b1 carte.", + "La première fois que vous jouez une carte #yHors-Classe à chaque tour, piochez #b", " cartes." ] }, + "sneckomod:SerpentsNestPower": { + "NAME": "Nid de serpents", + "DESCRIPTIONS": [ + "Lorsque vous jouez un #yPouvoir, infligez #b1 dégât à TOUS les ennemis.", + "Lorsque vous jouez un #yPouvoir, infligez #b", + " dégâts à TOUS les ennemis." + ] + }, + "sneckomod:SerpentMindPower": { + "NAME": "Forme exotique", + "DESCRIPTIONS": [ + "À la fin de votre tour, gagnez #b", + " de #yForce pour chaque couleur unique jouée ce tour.", + " de #yForce pour chaque couleur unique jouée ce tour." + ] + }, + "sneckomod:SnakeEyesPower": { + "NAME": "Snake Eyes", + "DESCRIPTIONS": [ + "Votre prochaine #yCarte #yHors-Classe est jouée deux fois ce tour.", + "Vos #b", + " prochaines #yCartes #yHors-Classe sont jouées deux fois ce tour." + ] + }, "sneckomod:UnendingSupplyPower": { "NAME": "Source inépuisable", "DESCRIPTIONS": [ "Au début de chaque tour, ajoutez #b", - " carte(s) #yHors-classe dans votre main." + "Au début de chaque tour, ajoutez un #yÉcho d'une carte #yHors-classe dans votre main.", + " #yÉchos de cartes #yHors-classe dans votre main." ] }, - "sneckomod:UnknownUpgradedPostCombatPower": { - "NAME": "Plus de puissance!", +"sneckomod:UnknownUpgradedPostCombatPower": { + "NAME": "Post-Combat Upgraded Unidentified", "DESCRIPTIONS": [ - "À la fin du combat, obtenez #b", - " cartes #yInconnues #yAméliorées supplémentaires.", - " carte #yInconnue #yAméliorée supplémentaire." + "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": "Lancers illimités", "DESCRIPTIONS": [ - "Au début de votre tour, ajoutez un #yLancer #de #yl'âme dans votre main avec Éthérée et Épuisement." + "Au début de votre tour, ajoutez un #yLancer #de #yl'Âme+ dans votre main avec Épuisement [REMOVE_SPACE]." ] }, "sneckomod:Transmogrifying": { - "NAME": "Transfigurant", + "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": "Typhon", + "DESCRIPTIONS": [ + "Ce tour, lorsque vous activez un #bExcédent [REMOVE_SPACE], jouez une copie de #yMorsure #yTyphon [REMOVE_SPACE].", + "Ce tour, lorsque vous activez un #bExcédent [REMOVE_SPACE], jouez #b", + " copies de #yMorsure #yTyphon [REMOVE_SPACE]." + ] + }, + "sneckomod:TyphoonPlusPower": { + "NAME": "Typhon+", "DESCRIPTIONS": [ - " est transformée en une autre relique ", - " ." + "Ce tour, lorsque vous activez un #bExcédent [REMOVE_SPACE], jouez une copie de #yMorsure #yTyphon+ [REMOVE_SPACE].", + "Ce tour, lorsque vous activez un #bExcédent [REMOVE_SPACE], jouez #b", + " copies de #yMorsure #yTyphon+ [REMOVE_SPACE]." ] - } + }, + "sneckomod:SerpentineSleuthPower": { + "NAME": "Détective serpent", + "DESCRIPTIONS": [ + "Lorsque vous jouez un #yPouvoir [REMOVE_SPACE], gagnez #b", + " [E] .", + " [E] ." + ] + }, + "sneckomod:BigGunsStrengthPower": { + "NAME": "Gros calibres", + "DESCRIPTIONS": [ + "Lorsque vous jouez une carte qui coûte 3 [E] ou plus, gagnez #b", + " de #yForce [REMOVE_SPACE].", + " de #yForce [REMOVE_SPACE]." + ] + }, + "sneckomod:BigGunsBlockPower": { + "NAME": "Garde improvisée", + "DESCRIPTIONS": [ + "Lorsque vous jouez une carte qui coûte 3 [E] ou plus, gagnez #b", + " #yd'Armure [REMOVE_SPACE].", + " #yd'Armure [REMOVE_SPACE]." + ] + }, + "sneckomod:AceOfWandsPower": { + "NAME": "Reine des Pentacles", + "DESCRIPTIONS": [ + "Lorsque vous appliquez un débuff à un ennemi, gagnez #b", + " #yd'Armure [REMOVE_SPACE].", + " #yd'Armure [REMOVE_SPACE]." + ] + }, + "sneckomod:LacerateDebuff": { + "NAME": "Lacération", + "DESCRIPTIONS": [ + "Lorsque vous appliquez un débuff à un ennemi, appliquez-leur #b", + " de #yVenin.", + " de #yVenin." + ] + }, + "sneckomod:FountainPower": { + "NAME": "Fontaine", + "DESCRIPTIONS": [ + "Les effets #yd'Excédent appliquent également #b", + " de #yVenin à un ennemi aléatoire.", + " de #yVenin à un ennemi aléatoire." + ] + }, + "sneckomod:TrashCanPower": { + "NAME": "Vide-ordures", + "DESCRIPTIONS": ["À la fin de votre tour, vous pouvez #yÉpuiser une carte.", + "À la fin de votre tour, vous pouvez #yÉpuiser jusqu'à #b", + " cartes." + ] + }, + "sneckomod:VenomDebuff": { + "NAME": "Venin", + "DESCRIPTIONS": [ + "Lorsque cette créature obtient un débuff qui #yn'est #ypas #yVenin, elle perd #b", + " PVs." + ] + } } + diff --git a/src/main/resources/sneckomodResources/localization/fra/RelicStrings.json b/src/main/resources/sneckomodResources/localization/fra/RelicStrings.json index 682d5c8ba9..2d2bd34958 100644 --- a/src/main/resources/sneckomodResources/localization/fra/RelicStrings.json +++ b/src/main/resources/sneckomodResources/localization/fra/RelicStrings.json @@ -3,28 +3,29 @@ "NAME": "Âme de Geckobra", "FLAVOR": "0...3...2...2...1", "DESCRIPTIONS": [ - "La première fois que vous jouez une carte #ysneckomod:Hors-classe chaque combat, gagnez [E] et piochez une carte." + "Au début de chaque combat, obtenez un #yLancer #yde #yl'Âme." ] }, "sneckomod:SuperSneckoSoul": { "NAME": "Super Âme de Geckobra", "FLAVOR": "3120231321230320", "DESCRIPTIONS": [ - "Remplace [#407B93]Âme de Geckobra[]. NL La première fois que vous jouez une carte #ysneckomod:Hors-classe chaque tour, gagnez [E]." + "Remplace [#407B93]Âme de Geckobra[]. NL Au début de chaque combat et tous les 2 tours, obtenez un #yLancer #yde #yl'Âme NL Pendant vos tours impairs, piochez une carte supplémentaire au début de ceux-ci, et #ysneckomod:Confondez-la." ] }, "sneckomod:CleanMud": { "NAME": "Flûte de charmeur de serpent", "FLAVOR": "Sssssss...", "DESCRIPTIONS": [ - "Les cartes #ysneckomod:Confondues ne peuvent pas coûter #b3." + "Les cartes #ysneckomod:Confondues ne peuvent pas coûter #b3 [REMOVE_SPACE]." ] }, "sneckomod:ConfusingCodex": { "NAME": "Anneau du geko", "FLAVOR": "Indéchiffrable, illisible, à rendre pour jeudi.", "DESCRIPTIONS": [ - "Au début du combat, appliquez #b0-2 de #yFaiblesse et de #yVulnérabilité à TOUS les ennemis." + "Lorsque vous activez #b", + " effets #ysneckomod:Excédents [REMOVE_SPACE], appliquez #b1 de #yFaiblesse et de #yVulnérabilité à un ennemi aléatoire." ] }, "sneckomod:CrystallizedMud": { @@ -38,83 +39,83 @@ "NAME": "Dé pipé", "FLAVOR": "Garantit d'arnaquer les plus naïfs.", "DESCRIPTIONS": [ - "Les cartes qui génèrent des nombres aléatoires ont +1 à leur minimum." + "Lorsqu'une carte est #ysneckomod:Confondue [REMOVE_SPACE], gagnez #b", + " #yd'Armure [REMOVE_SPACE]." ] }, "sneckomod:RareBoosterPack": { "NAME": "Boîte de cartes rares", "FLAVOR": "Excellent état.", "DESCRIPTIONS": [ - "Lorsque vous la récupérez, obtenez une carte #yInconnue #yRare de chaque type." + "Lorsque vous la récupérez, obtenez une carte #ysneckomod:Hors-Classe #yRare." ] }, "sneckomod:SleevedAce": { "NAME": "Atout dans la manche", "FLAVOR": "Nous sommes tous des as.", "DESCRIPTIONS": [ - "Au début du combat, ajoutez #yTricherie dans votre main avec #yRetenue." + "Au début du combat, obtenez une #yCarte #yMarquée+ [REMOVE_SPACE]." ] }, "sneckomod:UnknownEgg": { "NAME": "Œuf inconnu", "FLAVOR": "Qu'en sortira-t-il ? Payez 1000€ pour le voir.", "DESCRIPTIONS": [ - "#yIdentifier devient une action gratuite. NL Les cartes #yInconnues dans les récompenses sont #yAméliorées." + "Lorsque vous ajoutez une carte #ysneckomod:Hors-Classe à votre deck, #yAméliorez-la. Lorsque vous récupérez cette relique, #yAméliorez #b2 cartes #ysneckomod:Hors-Classe aléatoires." ] }, "sneckomod:SuperSneckoEye": { "NAME": "Super Œil de Geckobra", "FLAVOR": "0121012", "DESCRIPTIONS": [ - "Remplace #yŒil #yde #yGeckobra. Au début de votre tour, piochez #b2 cartes supplémentaires. Commencez chaque combat avec #yConfusion. La première fois que vous piochez une carte qui coûte #b3 chaque combat, réduisez son coût à #b0." + "Remplace #yŒil #yde #yGeckobra. Au début de votre tour, piochez #b4 cartes supplémentaires. Commencez chaque combat avec #yConfus." ] }, "sneckomod:SneckoTalon": { "NAME": "Idole de Rétromission", "FLAVOR": "On l'appelle Idole Rétro pour faire plus court.", "DESCRIPTIONS": [ - "Au début de votre tour, réduisez de #b1 le coût de la carte la plus chère de votre main pour le reste du tour." + "Au début de votre tour, réduisez de #b1 le coût d'une carte aléatoire de votre main jusqu'à ce qu'elle soit jouée." ] }, "sneckomod:BlankCard": { "NAME": "Carte vierge", "FLAVOR": "Mimique n'importe quelle carte.", "DESCRIPTIONS": [ - "Au début de chaque combat, ajoutez un #ygremlin:Écho d'une carte aléatoire de votre deck dans votre main. Elle coûte #b0." + "Au début de chaque combat, ajoutez un #ygremlin:Écho d'une carte aléatoire de votre deck dans votre main. Elle coûte #b0 [REMOVE_SPACE]." ] }, "sneckomod:D8": { "NAME": "Octaèdre mystique", "FLAVOR": "Il semble pencher d'un côté.", "DESCRIPTIONS": [ - "Lorsque vous le ramassez, choisissez une carte qui génère un nombre aléatoire pour ses effets. Désormais, cette carte choisit toujours le nombre maximum possible.", + "Lorsque vous le ramassez, choisissez une carte qui a un effet sneckomod:Excédent. Lorsque vous la jouez, gagnez #b4 #yd'Armure et activez son effet #yExcédent, même si vous n'avez pas #b5 cartes en main.", "Choisissez une carte pour ", "Lorsque ", - " est jouée, elle choisit toujours le nombre maximum possible pour ses effets." + " est jouée, gagnez #b4 #yd'Armure et activez son effet #yExcédent, même si vous n'avez pas #b5 cartes en main.", + "La carte attachée à cette relique a été #rretirée de votre deck, cette relique ne fonctionne plus désormais." ] }, "sneckomod:BabySnecko": { "NAME": "Jeune Geckobra", - "FLAVOR": "Incroyablement adorable.", + "FLAVOR": "Confusément adorable.", "DESCRIPTIONS": [ - "Infligez #b5 dégâts à un ennemi aléatoire au début de votre tour." + "Inflige #b9 dégâts à un ennemi aléatoire et #ysneckomod:Confondez #b2 cartes aléatoires (qui coûte au moins #b1 [E]) dans votre main au début de votre tour." ] }, "sneckomod:SneckoCommon": { "NAME": "Sceau d'approbation", "FLAVOR": "Je suis le Soldat de Fer et ceci est ma Relique favorite de la Tour. -Brochure de publicité pour le Marchand", "DESCRIPTIONS": [ - "Lorsque vous le ramassez, choisissez #b1 parmi #b3 cartes #yInconnues #yd'un #yPersonnage. Les cartes #Inconnues d'autres Personnages n'apparaissent plus.", - "Toutes les cartes Inconnues dans les récompenses futures seront des cartes de ", - " ." + "Lorsque vous le ramassez, choisissez #b1 carte #yPouvoir Peu Commune #ysneckomod:Hors-Classe parmi #b5 cartes à obtenir." ] }, "sneckomod:SneckoBoss": { "NAME": "Fer à cheval porte-bonheur", "FLAVOR": "Moi je fabrique ma chance - Vieux monsieur.", "DESCRIPTIONS": [ - "Lorsque vous le ramassez, choisissez #b1 parmi #b3 cartes #yInconnues #yd'un #yPersonnage. Ajoutez #b5 copies de celle-ci à votre deck. Tous les combats donnent en récompense supplémentaire une carte de ce personnage.", - "Lorsque vous le ramassez, obtenez #b5 cartes #yInconnues de ", + "Lorsque vous le ramassez, choisissez #b1 #yPersonnage parmi #b3 [REMOVE_SPACE]. Choisissez #b3 cartes Peu Communes #yAméliorées et #b2 cartes Rares à ajouter à votre deck. Tous les combats donnent en récompense supplémentaire une carte de ce personnage.", + "Lorsque vous le ramassez, obtenez #b3 cartes Peu Communes #yAméliorées et #b2 cartes Rares de ", " . Tous les combats donnent une carte récompense supplémentaire de ", " ." ] diff --git a/src/main/resources/sneckomodResources/localization/fra/UIStrings.json b/src/main/resources/sneckomodResources/localization/fra/UIStrings.json index c030c1486a..a8ff2c1210 100644 --- a/src/main/resources/sneckomodResources/localization/fra/UIStrings.json +++ b/src/main/resources/sneckomodResources/localization/fra/UIStrings.json @@ -43,8 +43,8 @@ }, "sneckomod:ChallengeMode": { "TEXT": [ - "Mode Challenge - Geckobra pur", - "Les cartes Inconnues peuvent être de n'importe quelle classe. Recommandé pour les joueurs de Geckobra experts." + "Mode Alternatif - Geckobra pur", + "Les Cadeaux peuvent être de n'importe quelle classe. Recommandé pour les joueurs qui aiment davantage le hasard et remporter la victoire dans le chaos." ] }, "sneckomod:LockInBonfireOptions": { @@ -56,6 +56,24 @@ "[Action gratuite] Verrouillez une carte Inconnue en carte permanente." ] }, + "sneckomod:CommonAttackReward": { + "TEXT": [ + "Ajoutez une carte Hors-classe dans votre deck", + "Prenez une Carte." + ] + }, + "sneckomod:DiceRollPotionReward": { + "TEXT": [ + "Ajoutez une carte Améliorée dans votre deck.", + "Prenez une Carte." + ] + }, + "sneckomod:ColorfulPowersCardReward": { + "TEXT": [ + "Ajoutez un Pouvoir Amélioré dans votre deck.", + "Prenez une Carte." + ] + }, "sneckomod:AtGameStart": { "TEXT": [ "", diff --git a/src/main/resources/sneckomodResources/localization/jpn/CardStrings.json b/src/main/resources/sneckomodResources/localization/jpn/CardStrings.json index dd2cf49701..837da9870c 100644 --- a/src/main/resources/sneckomodResources/localization/jpn/CardStrings.json +++ b/src/main/resources/sneckomodResources/localization/jpn/CardStrings.json @@ -1,80 +1,80 @@ { "sneckomod:Blunderbus": { "NAME": "ブランダーバス", - "DESCRIPTION": "敵全体に !D! ダメージを与える。 NL 手札にあるコスト3以上のカードの数だけこれを繰り返す。" + "DESCRIPTION": "敵全体に !D! ダメージを与える。 NL 手札の3コスト以上のカード1枚につきもう一度ダメージを与える。" }, "sneckomod:Tsunami": { - "NAME": "津波", - "DESCRIPTION": "sneckomod:オーバーフロー を起こすたび、 !M! ブロックを得る。" + "NAME": "ツナミ", + "DESCRIPTION": "sneckomod:オーバーフロー が発動した時、 !M! ブロック を得る。" }, "sneckomod:CheapStock": { "NAME": "チープストック", - "DESCRIPTION": "ターン開始時、手札の中で最もコストの高いカードを sneckomod:泥まみれ にする。", - "UPGRADE_DESCRIPTION": "ターン開始時、手札の中でコストの高いカードを !M! 枚 sneckomod:泥まみれ にする。" + "DESCRIPTION": "ターン開始時、手札の最もコストの高いカードを sneckomod:泥まみれ にする。", + "UPGRADE_DESCRIPTION": "ターン開始時、手札の最もコストの高いカードを !M! 枚 sneckomod:泥まみれ にする。" }, "sneckomod:Cheat": { - "NAME": "Pure Luck", - "DESCRIPTION": "This カード 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 カード 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 ", + "NAME": "純粋な運", + "DESCRIPTION": "sneckomod:蛇避け NL ターン終了まで sneckomod:幸運 状態になる。 NL 廃棄 ", + "UPGRADE_DESCRIPTION": "sneckomod:蛇避け NL ターン終了まで sneckomod:幸運 状態になる。", "EXTENDED_DESCRIPTION": [ - "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed カード " + "NOTE FOR LOC: NOT USED DO NOT TRANSLATE " ] }, "sneckomod:DangerNoodle": { "NAME": "デンジャーヌードル", - "DESCRIPTION": " !D! ダメージを与える。 NL カードを 1 枚 sneckomod:泥まみれ にする。 NL sneckomod:ギフト : 3 コスト", - "DESCRIPTION_BATTLE": " !D! ダメージを与える。 NL カードを 1 枚 sneckomod:泥まみれ にする。" + "DESCRIPTION": "!D! ダメージを与える。 NL 手札を1枚 sneckomod:泥まみれ にする。 NL sneckomod:ギフト : 3+ コスト", + "DESCRIPTION_BATTLE": "!D! ダメージを与える。 NL 手札を1枚 sneckomod:泥まみれ にする。" }, "sneckomod:Deception": { - "NAME": "欺瞞", - "DESCRIPTION": " !B! ブロックを得る。 NL *衝撃波 を手札に加える。 NL 廃棄 " + "NAME": "誤魔化し", + "DESCRIPTION": "!B! ブロックを得る。 NL 手札に *ショックウェーブ を加える。 NL 廃棄 " }, "sneckomod:Defend": { "NAME": "防御", - "DESCRIPTION": " !B! ブロックを得る。" + "DESCRIPTION": "!B! ブロックを得る。" }, "sneckomod:DefensiveFlair": { - "NAME": "ディフェンシブフレア", - "DESCRIPTION": " !B! ブロックを得る。 追加で !M! ブロックを手札の sneckomod:オフクラス の数だけ得る。 NL sneckomod:ギフト : アンコモン ", - "DESCRIPTION_BATTLE": " !B! ブロックを得る。 追加で !M! ブロックを手札の sneckomod:オフクラス の数だけ得る。" + "NAME": "防衛センス", + "DESCRIPTION": "!B! ブロックを得る。 NL 追加で手札の sneckomod:オフクラス カード1枚につき !M! ブロックを得る。 NL sneckomod:ギフト : アンコモン", + "DESCRIPTION_BATTLE": "!B! ブロックを得る。 NL 追加で手札の sneckomod:オフクラス カード1枚につき !M! ブロックを得る。" }, "sneckomod:DiceBlock": { - "NAME": "ダイスブロック", - "DESCRIPTION": " !B! ブロックを得る。 NL sneckomod:オーバーフロー :追加で !B! ブロックを得る。" + "NAME": "ブロックダイス", + "DESCRIPTION": "!B! ブロックを得る。 NL sneckomod:オーバーフロー : !B! ブロックをもう一度得る。" }, "sneckomod:DiceBoulder": { - "NAME": "ダイスボルダー", - "DESCRIPTION": " !B! ブロックを得る。 NL この戦闘中、このカードのブロックを !M! 増加し、コストを !qqq! 増加させる。" + "NAME": "落石ダイス", + "DESCRIPTION": "!B! ブロックを得る。 NL この戦闘中、このカードの効果が !M! 増加し、コストが !qqq! 増加する。" }, "sneckomod:DiceCrush": { - "NAME": "ダイスクラッシュ", - "DESCRIPTION": " !D! ダメージを与える。 NL sneckomod:オーバーフロー :2枚カードを引く。" + "NAME": "クラッシュダイス", + "DESCRIPTION": "!D! ダメージを与える。 NL sneckomod:オーバーフロー : カードを 2 枚引く。" }, "sneckomod:DragonsHoard": { "NAME": "ドラゴンの財宝", - "DESCRIPTION": "エセリアル NL 筋力 !M! を得る。 NL 敏捷性 !M! を得る。", - "UPGRADE_DESCRIPTION": " 筋力 !M! を得る。 NL 敏捷性 !M! を得る。" + "DESCRIPTION": "エセリアル NL 筋力 と 敏捷性 !M! を得る。", + "UPGRADE_DESCRIPTION": "筋力 と 敏捷性 !M! を得る。" }, "sneckomod:FourOfAKind": { "NAME": "Four Of A Kind", - "DESCRIPTION": "This カード 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 カード 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 ", + "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 カード " + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." ] }, "sneckomod:GlitteringGambit": { "NAME": "キラキラのまなざし", - "DESCRIPTION": "使用不可 NL デッキから削除できない。 NL sneckomod:ギフト : アップグレードされた レア と !M! ゴールド ", - "UPGRADE_DESCRIPTION": "使用不可 エセリアル NL デッキから削除できない。 NL sneckomod:ギフト : アップグレードされた レア と !M! ゴールド ", + "DESCRIPTION": "使用不可 NL デッキから削除することが出来ない。 NL sneckomod:ギフト : アップグレードレア + !M! ゴールド", + "UPGRADE_DESCRIPTION": "使用不可 NL エセリアル NL デッキから削除することが出来ない。 NL sneckomod:ギフト : アップグレードレア + !M! ゴールド", "DESCRIPTION_BATTLE": "使用不可", "UPGRADE_DESCRIPTION_BATTLE": "使用不可 NL エセリアル" }, "sneckomod:ImmovableObject": { - "NAME": "動かせない物体", - "DESCRIPTION": "This カード 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 ", + "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 カード " + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." ] }, "sneckomod:IronFang": { @@ -83,535 +83,534 @@ }, "sneckomod:ImprovisedAttack": { "NAME": "Improvised Attack", - "DESCRIPTION": "This カード 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 ", + "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 カード " + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." ] }, "sneckomod:ImprovisedGuard": { "NAME": "Improvised Guard", - "DESCRIPTION": "This カード 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 ", + "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 カード " + "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! 枚カードを引く。" + "NAME": "幸運のチャンス", + "DESCRIPTION": "!B! ブロックを得る。 NL 手札のコスト2以上のカード1枚につき カードを !M! 枚引く。" }, "sneckomod:Nope": { "NAME": "これじゃない", - "DESCRIPTION": " !B! ブロックを得る。 NL カードを 1 枚 廃棄 して、ランダムな同じクラスのカードを得る。", - "UPGRADE_DESCRIPTION": " !B! ブロックを得る。 NL カードを 1 枚 廃棄 して、ランダムな同じクラスのカードを得る。", + "DESCRIPTION": "!B! ブロックを得る。 NL カードを1枚廃棄する。無色以外の場合、そのカードと同じ色のカードを手札に加える。", + "UPGRADE_DESCRIPTION": "!B! ブロックを得る。 NL カードを1枚廃棄する。無色以外の場合、そのカードと同じ色のカードを手札に加える。", "EXTENDED_DESCRIPTION": [ - " NL 廃棄" + "これじゃないので廃棄する。" ] }, "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 回プレイされる。 " + "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": "Memorize", - "DESCRIPTION": "This カード 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 カード 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 ", + "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: You can just copy paste whatever this tls as for all of these removed カード " + " to Identify", + "NOTE FOR LOC: NOT USED DO NOT TRANSLATE " ] }, "sneckomod:MintCondition": { - "NAME": "ミントコンディション", + "NAME": "良好品質", "DESCRIPTION": "sneckomod:オーバーフロー : 筋力 !M! を得る。" }, "sneckomod:MixItUp": { - "NAME": "ミックス開始!", - "DESCRIPTION": "This カード 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 ", + "NAME": "Mix It Up!", + "DESCRIPTION": "*Transform your Potions NL !D! ダメージを与える。 !M! times NL 廃棄 ", "EXTENDED_DESCRIPTION": [ - "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed カード " + "NOTE FOR LOC: NOT USED DO NOT TRANSLATE " ] }, "sneckomod:MorePower": { - "NAME": "もっと力を!", - "DESCRIPTION": "This カード 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 ", + "NAME": "More Power!", + "DESCRIPTION": "Obtain an additional Upgraded *Unidentified card reward at the end of combat", "EXTENDED_DESCRIPTION": [ - "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed カード " + "NOTE FOR LOC: NOT USED DO NOT TRANSLATE " ] }, "sneckomod:Mudshield": { "NAME": "マッドシールド", - "DESCRIPTION": "カードを sneckomod:泥まみれ にする度に、 !M! ブロックを得る。" + "DESCRIPTION": "手札を1枚 sneckomod:泥まみれ にする毎に !M! ブロックを得る。" }, "sneckomod:OverwhelmingPresence": { - "NAME": "圧倒的", - "DESCRIPTION": "各ターンに初めてデッキをシャッフルした時、 [E] を得て、!M! 枚カードを引く。" + "NAME": "圧倒", + "DESCRIPTION": "エセリアル NL 各ターンで初めて sneckomod:オフクラス カードをプレイする度カードを1枚引く。", + "UPGRADE_DESCRIPTION": "各ターンで初めて sneckomod:オフクラス カードをプレイする度カードを1枚引く。" }, "sneckomod:RiskySword": { "NAME": "リスキーソード", - "DESCRIPTION": " !D! ダメージを与える。 NL このカードが sneckomod:泥まみれ だった場合、この戦闘中、 !M! ダメージ増加する。" + "DESCRIPTION": "!D! ダメージを与える。 NL sneckomod:泥まみれ になると、この戦闘中ダメージが !M! 増加する。" }, "sneckomod:PoisonParadise": { - "NAME": "噴水", - "DESCRIPTION": " sneckomod:オーバーフロー する度、ランダムな敵に sneckomod:蛇毒 !M! を与える。" + "NAME": "泉", + "DESCRIPTION": "sneckomod:オーバーフロー が発動する度、ランダムな敵に sneckomod:猛毒 !M! を与える。" }, "sneckomod:PureSnecko": { "NAME": "シフト", - "DESCRIPTION": " !M! 枚カードを引き、それらのカードを sneckomod:泥まみれ にする。" + "DESCRIPTION": "カードを !M! 枚引き、それらを sneckomod:泥まみれ にする。" }, "sneckomod:QuickBite": { "NAME": "スネークレーキ", - "DESCRIPTION": " !D! ダメージを与える。 NL 手札にある最もコストの高いカードを sneckomod:泥まみれ にする。" + "DESCRIPTION": "!D! ダメージを与える。 NL カードを !M! 枚引き、それらを sneckomod:泥まみれ にする。", + "UPGRADE_DESCRIPTION": "!D! ダメージを与える。 NL カードを !M! 枚引き、それらを sneckomod:泥まみれ にする。" }, "sneckomod:QuickMove": { "NAME": "素早い動き", - "DESCRIPTION": " !B! ブロックを得る。 NL sneckomod:オーバーフロー : 敵全体に 弱体 !M! を与える。" + "DESCRIPTION": "!B! ブロックを得る。 NL sneckomod:オーバーフロー : 敵全体に 弱体 !M! を与える。" }, "sneckomod:RainOfDice": { "NAME": "ダイスの雨", - "DESCRIPTION": " !D! ダメージを与える。 NL sneckomod:泥まみれ にしたこのカードを手札に加える。 NL 廃棄 ", - "UPGRADE_DESCRIPTION": " !D! ダメージを与える。 NL sneckomod:泥まみれ にしたこのカードを手札に加える。 NL 廃棄 " + "DESCRIPTION": "!D! ダメージを与える。 NL 手札を1枚 sneckomod:泥まみれ にし、 その後 *ダイスの雨 を手札に加える。 NL 廃棄 ", + "UPGRADE_DESCRIPTION": "!D! ダメージを与える。 NL 手札を1枚 sneckomod:泥まみれ にし、 その後 *ダイスの雨+ を手札に加える。 NL 廃棄 " }, "sneckomod:Restock": { - "NAME": "再ストック", - "DESCRIPTION": "手札を捨てる。 NL !M! 枚のカードを引いて、手札のカードを sneckomod:泥まみれ にする。 NL 廃棄 " + "NAME": "リストック", + "DESCRIPTION": "手札を捨てる。 NL カードを !M! 枚引き、それらを sneckomod:泥まみれ にする。 NL 廃棄 " }, "sneckomod:Rotation": { "NAME": "Rotation", - "DESCRIPTION": "This カード 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 カード 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 ", + "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: You can just copy paste whatever this tls as for all of these removed カード " + "NOTE FOR LOC: NOT USED DO NOT TRANSLATE " ] }, "sneckomod:SerpentBottle": { - "NAME": "割引セール", - "DESCRIPTION": " !qqq! 枚のカードを引く。 NL カードを sneckomod:泥まみれ にする。 NL 廃棄 ", - "UPGRADE_DESCRIPTION": " !qqq! 枚のカードを引く。 NL カードを !M! 枚 sneckomod:泥まみれ にする。 NL 廃棄 " + "NAME": "大安売り", + "DESCRIPTION": "カードを !qqq! 枚引く。 NL 手札を1枚 sneckomod:泥まみれ にする。 NL 廃棄 ", + "UPGRADE_DESCRIPTION": "カードを !qqq! 枚引く。 NL 手札を !M! 枚 sneckomod:泥まみれ にする。 NL 廃棄 " }, "sneckomod:SerpentIdol": { - "NAME": "蛇の像", - "DESCRIPTION": " !M! 枚のランダムな sneckomod:オフクラス から 1 枚手札に加える。このターンそのコストは 0 NL 廃棄 " + "NAME": "蛇の彫像", + "DESCRIPTION": "ランダムな !M! 枚の中から1枚の sneckomod:オフクラス カードを手札に加える。このターン、そのコストは0になる。 NL 廃棄 " }, "sneckomod:SerpentMind": { - "NAME": "エキゾチックフォーム", - "DESCRIPTION": "エセリアル NL ターン終了時に、プレイした 他色 ごとに 筋力 !M! を得る。 NL sneckomod:ギフト : レア ", - "UPGRADE_DESCRIPTION": "ターン終了時に、プレイした 他色 ごとに 筋力 !M! を得る。 NL sneckomod:ギフト : レア ", - "DESCRIPTION_BATTLE": "ターン終了時に、プレイした 他色 ごとに 筋力 !M! を得る。" + "NAME": "異邦化", + "DESCRIPTION": "エセリアル NL ターン中にプレイされたカードカラー毎に、ターン終了時 筋力 !M! を得る。 NL sneckomod:ギフト : レア", + "UPGRADE_DESCRIPTION": "ターン中にプレイされたカードカラー毎に、ターン終了時 筋力 !M! を得る。 NL sneckomod:ギフト : レア", + "DESCRIPTION_BATTLE": "ターン中にプレイされたカードカラー毎に、ターン終了時 筋力 !M! を得る。" }, "sneckomod:SlitherThrough": { - "NAME": "すり抜け", - "DESCRIPTION": " !D! ダメージを与える。 NL このターン、手札にある sneckomod:オフクラス カードのコストを !M! 減らす。 NL sneckomod:ギフト : アンコモン ", - "DESCRIPTION_BATTLE": " !D! ダメージを与える。 NL このターン、手札にある sneckomod:オフクラス カードのコストを !M! 減らす。" + "NAME": "するするー", + "DESCRIPTION": "!D! ダメージを与える。 NL このターン、手札にある sneckomod:オフクラス カードのコストを !M! 減少させる。 NL sneckomod:ギフト : アンコモン", + "DESCRIPTION_BATTLE": "!D! ダメージを与える。 NL このターン、手札にある sneckomod:オフクラス カードのコストを !M! 減少させる。" }, "sneckomod:SnakeSap": { "NAME": "Snake Sap", - "DESCRIPTION": "This カード 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 ", + "DESCRIPTION": "sneckomod:蛇避け NL !qqq! - !D! ダメージを与える。 NL - 1 を得る。 !M! [E] NL 廃棄 ", "EXTENDED_DESCRIPTION": [ - "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed カード " + "NOTE FOR LOC: NOT USED DO NOT TRANSLATE " ] }, "sneckomod:SnekBeam": { - "NAME": "スネッコビーム", - "DESCRIPTION": " !D! ダメージを与える。 NL [E] を得る。" + "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": "Soul Cleanse", - "DESCRIPTION": "This カード 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 カード 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 ", + "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: You can just copy paste whatever this tls as for all of these removed カード " + "NOTE FOR LOC: NOT USED DO NOT TRANSLATE " ] }, "sneckomod:SoulDraw": { "NAME": "ソウルドロー", - "DESCRIPTION": "ランダムで !M! 枚の sneckomod:オフクラス カードを得る。 NL それらは 保留 を得る。 NL 廃棄 " + "DESCRIPTION": "ランダムに sneckomod:オフクラス カードを !M! 枚得る。 NL それらに 保留 が付く。 NL 廃棄 " }, "sneckomod:SoulExchange": { - "NAME": "ソウル・エクスチェンジ", - "DESCRIPTION": " 保留 NL 手札を sneckomod:泥まみれ にする。 NL 廃棄 " + "NAME": "ソウルエクスチェンジ", + "DESCRIPTION": "保留 NL 手札を sneckomod:泥まみれ にする。 NL 廃棄 " }, "sneckomod:SoulRoll": { "NAME": "ソウルロール", - "DESCRIPTION": " 保留 NL !B! ブロックを得る。 NL 手札のカードを1枚 sneckomod:泥まみれ にする。 NL 廃棄 " + "DESCRIPTION": "保留 NL !B! ブロックを得る。 NL 手札を1枚 sneckomod:泥まみれ にする。 NL 廃棄 " }, "sneckomod:Strike": { "NAME": "ストライク", - "DESCRIPTION": " !D! ダメージを与える。" + "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 得る。 手札の固有色ごとに アップグレードされた ナイフ を得る。" + "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:オーバーフロー するたびに、このカードのコピーを 1 枚プレイする。" + "NAME": "暴風牙", + "DESCRIPTION": "!D! ダメージを与える。 NL sneckomod:オーバーフロー : このターン、 sneckomod:オーバーフロー が発動する度にこのカードのコピーをプレイする。" }, "sneckomod:Yearn": { "NAME": "Yearn", - "DESCRIPTION": "This カード 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 ", + "DESCRIPTION": "カードを !M! 枚引く。 NL Give them 保留 NL 廃棄 ", "EXTENDED_DESCRIPTION": [ - "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed カード " + "NOTE FOR LOC: NOT USED DO NOT TRANSLATE " ] }, "sneckomod:TailWhip": { "NAME": "テイルウィップ", - "DESCRIPTION": " !D! ダメージを与える。 NL sneckomod:オーバーフロー : 脱力 !M! と 弱体 !M! を与える。" + "DESCRIPTION": "!D! ダメージを与える。 NL sneckomod:オーバーフロー : 脱力 と 弱体 !M! を与える。" }, "sneckomod:Transmogrify": { "NAME": "Transmogrify", - "DESCRIPTION": "This カード 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 ", + "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 ", + "I have no Relicsss to ssswap", + "Choose a Relic to lose", "Lose ", - " と obtain another ", - " Relic ", - "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed カード " - ] + " and obtain another ", + " Relic", + "NOTE FOR LOC: NOT USED DO NOT TRANSLATE " + ] }, "sneckomod:ToxicPersonality": { "NAME": "Toxic Personality", - "DESCRIPTION": "This カード 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 ", + "DESCRIPTION": "Whenever you apply a debuff to an enemy, also sneckomod:猛毒 !M! を与える。 NL sneckomod:ギフト : アンコモン+ Debuff", "EXTENDED_DESCRIPTION": [ - "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed カード " + "NOTE FOR LOC: NOT USED DO NOT TRANSLATE " ] }, "sneckomod:TrashToTreasure": { "NAME": "ガラクタを宝物に", - "DESCRIPTION": " !B! ブロックを得る。 NL カードを1枚廃棄する。 NL コストに等しい [E] を得る。 NL 廃棄 ", - "UPGRADE_DESCRIPTION": " !B! ブロックを得る。 NL カードを1枚廃棄する。 NL コストに等しい [E] を得る。" + "DESCRIPTION": "!B! ブロックを得る。 NL カードを1枚廃棄し、そのカードコストに等しい [E] を得る。 NL 廃棄 ", + "UPGRADE_DESCRIPTION": "!B! ブロックを得る。 NL カードを1枚廃棄し、そのカードコストに等しい [E] を得る。" }, "sneckomod:UnendingSupply": { - "NAME": "無限サプライ", - "DESCRIPTION": "ターン開始時に、ランダムな sneckomod:オフクラス カードの gremlin:エコー を得る。", - "UPGRADE_DESCRIPTION": "天賦 NL ターン開始時に、ランダムな sneckomod:オフクラス カードの gremlin:エコー を得る。" + "NAME": "無尽蔵の供給", + "DESCRIPTION": "各ターン開始時、ランダムな sneckomod:オフクラス カード の gremlin:エコー を手札に加える。", + "UPGRADE_DESCRIPTION": "天賦 NL 各ターン開始時、ランダムな sneckomod:オフクラス カードの gremlin:エコー を手札に加える。" }, "sneckomod:Unknown": { - "NAME": "??? Basic", - "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 " + "NAME": "??? 基本", + "DESCRIPTION": "*未識別 NL 基本カード", + "UPGRADE_DESCRIPTION": "アップグレード済み NL *未識別 NL 基本カード" }, "sneckomod:Unknown0Cost": { - "NAME": "??? 0-Cost", - "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 " + "NAME": "??? 0-コスト", + "DESCRIPTION": "*未識別 NL 0 コストカード", + "UPGRADE_DESCRIPTION": "アップグレード済み NL *未識別 NL 0 コストカード" }, "sneckomod:Unknown1Cost": { - "NAME": "??? 1 -Cost", - "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 " + "NAME": "??? 1-コスト", + "DESCRIPTION": "*未識別 NL 1 コストカード", + "UPGRADE_DESCRIPTION": "アップグレード済み NL *未識別 NL 1 コストカード" }, "sneckomod:Unknown2Cost": { - "NAME": "??? 2-Cost", - "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 " + "NAME": "??? 2-コスト", + "DESCRIPTION": "*未識別 NL 2 コストカード", + "UPGRADE_DESCRIPTION": "アップグレード済み NL *未識別 NL 2 コストカード" }, "sneckomod:Unknown3Cost": { - "NAME": "??? 3-Cost", - "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 " + "NAME": "??? 3-コスト", + "DESCRIPTION": "*未識別 NL 3 コストカード", + "UPGRADE_DESCRIPTION": "アップグレード済み NL *未識別 NL 3 コストカード" }, "sneckomod:UnknownBlock": { - "NAME": "??? Block", - "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 " + "NAME": "??? ブロック", + "DESCRIPTION": "*未識別 NL ブロックカード", + "UPGRADE_DESCRIPTION": "アップグレード済み NL *未識別 NL ブロックカード" }, "sneckomod:UnknownBoss": { - "NAME": "??? Boss", - "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 " + "NAME": "??? ボス", + "DESCRIPTION": "*未識別 NL 無色のボスカード", + "UPGRADE_DESCRIPTION": "アップグレード済み NL *未識別 NL 無色のボスカード" }, "sneckomod:UnknownClass": { - "NAME": "??? Class", - "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 " + "NAME": "??? クラス", + "DESCRIPTION": "*未識別 NL 有り得ないカードだから開発者に報告して", + "UPGRADE_DESCRIPTION": "アップグレード済み NL *未識別 NL 有り得ないカードだから開発者に報告して" }, "sneckomod:UnknownColorless": { - "NAME": "??? Colorless", - "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 " + "NAME": "??? 無色", + "DESCRIPTION": "*未識別 NL 無色 カード", + "UPGRADE_DESCRIPTION": "アップグレード済み NL *未識別 NL 無色 カード" }, "sneckomod:UnknownCommonAttack": { - "NAME": "??? C 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 ", - "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 " + "NAME": "??? C アタック", + "DESCRIPTION": "*未識別 NL コモン アタック カード", + "UPGRADE_DESCRIPTION": "アップグレード済み NL *未識別 NL コモン アタック カード" }, "sneckomod:UnknownCommonSkill": { - "NAME": "??? C Skill", - "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 " + "NAME": "??? C スキル", + "DESCRIPTION": "*未識別 NL コモン スキル カード", + "UPGRADE_DESCRIPTION": "アップグレード済み NL *未識別 NL コモン スキル カード" }, - "sneckomod:UnknownDexterity": { - "NAME": "??? Dexterity", - "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:Unknown敏捷性": { + "NAME": "??? 敏捷性", + "DESCRIPTION": "*未識別 NL 敏捷性 カード", + "UPGRADE_DESCRIPTION": "アップグレード済み NL *未識別 NL 敏捷性 カード" }, "sneckomod:UnknownDraw": { - "NAME": "??? Draw", - "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 " + "NAME": "??? ドロー", + "DESCRIPTION": "*未識別 NL ドロー カード", + "UPGRADE_DESCRIPTION": "アップグレード済み NL *未識別 NL ドロー カード" }, - "sneckomod:UnknownEthereal": { - "NAME": "??? Ethereal", - "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:Unknownエセリアル": { + "NAME": "??? エセリアル", + "DESCRIPTION": "*未識別 NL エセリアル カード", + "UPGRADE_DESCRIPTION": "アップグレード済み NL *未識別 NL エセリアル カード" }, - "sneckomod:UnknownExhaust": { - "NAME": "??? 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 " + "sneckomod:Unknown廃棄": { + "NAME": "??? 廃棄 ", + "DESCRIPTION": "*未識別 NL 廃棄 カード", + "UPGRADE_DESCRIPTION": "アップグレード済み NL *未識別 NL 廃棄 カード" }, "sneckomod:UnknownRareAttack": { - "NAME": "??? R 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 ", - "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 " + "NAME": "??? R アタック", + "DESCRIPTION": "*未識別 NL レア アタック カード", + "UPGRADE_DESCRIPTION": "アップグレード済み NL *未識別 NL レア アタック カード" }, "sneckomod:UnknownRarePower": { - "NAME": "??? R Power", - "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 " + "NAME": "??? R パワー", + "DESCRIPTION": "*未識別 NL レア パワー カード", + "UPGRADE_DESCRIPTION": "アップグレード済み NL *未識別 NL レア パワー カード" }, "sneckomod:UnknownRareSkill": { - "NAME": "??? R Skill", - "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 " + "NAME": "??? R スキル", + "DESCRIPTION": "*未識別 NL レア スキル カード", + "UPGRADE_DESCRIPTION": "アップグレード済み NL *未識別 NL レア スキル カード" }, - "sneckomod:UnknownStrength": { - "NAME": "??? Strength", - "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:Unknown筋力": { + "NAME": "??? 筋力", + "DESCRIPTION": "*未識別 NL 筋力 カード", + "UPGRADE_DESCRIPTION": "アップグレード済み NL *未識別 NL 筋力 カード" }, "sneckomod:UnknownStrike": { - "NAME": "??? Strike", - "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 " + "NAME": "??? ストライク", + "DESCRIPTION": "*未識別 NL ストライク カード", + "UPGRADE_DESCRIPTION": "アップグレード済み NL *未識別 NL ストライク カード" }, "sneckomod:UnknownUncommonAttack": { - "NAME": "??? U 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 ", - "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 " + "NAME": "??? U アタック", + "DESCRIPTION": "*未識別 NL アンコモン アタック カード", + "UPGRADE_DESCRIPTION": "アップグレード済み NL *未識別 NL アンコモン アタック カード" }, "sneckomod:UnknownUncommonPower": { - "NAME": "??? U Power", - "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 " + "NAME": "??? U パワー", + "DESCRIPTION": "*未識別 NL アンコモン パワー カード", + "UPGRADE_DESCRIPTION": "アップグレード済み NL *未識別 NL アンコモン パワー カード" }, "sneckomod:UnknownUncommonSkill": { - "NAME": "??? U Skill", - "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 " + "NAME": "??? U スキル", + "DESCRIPTION": "*未識別 NL アンコモン スキル カード", + "UPGRADE_DESCRIPTION": "アップグレード済み NL *未識別 NL アンコモン スキル カード" }, - "sneckomod:UnknownVulnerable": { + "sneckomod:Unknown弱体": { "NAME": "??? 弱体", - "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 " + "DESCRIPTION": "*未識別 NL 弱体 カード", + "UPGRADE_DESCRIPTION": "アップグレード済み NL *未識別 NL 弱体 カード" }, - "sneckomod:UnknownWeak": { + "sneckomod:Unknown脱力": { "NAME": "??? 脱力", - "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 " + "DESCRIPTION": "*未識別 NL 脱力 カード", + "UPGRADE_DESCRIPTION": "アップグレード済み NL *未識別 NL 脱力 カード" }, "sneckomod:UnknownX": { - "NAME": "??? X-Cost", - "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 " + "NAME": "??? X-コスト", + "DESCRIPTION": "*未識別 NL X コスト カード", + "UPGRADE_DESCRIPTION": "アップグレード済み NL *未識別 NL X コスト カード" }, "sneckomod:UnlimitedRolls": { - "NAME": "Unlimited Rolls", - "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 ", + "NAME": "無限ロール", + "DESCRIPTION": "ターン開始時、 *廃棄 の付いた *ソウルロール を手札に加える。", + "UPGRADE_DESCRIPTION": "天賦 NL ターン開始時、 *廃棄 の付いた *ソウルロール を手札に加える。", "EXTENDED_DESCRIPTION": [ - "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards " + "NOTE FOR LOC: NOT USED DO NOT TRANSLATE " ] }, "sneckomod:Behold": { "NAME": "見よ!", - "DESCRIPTION": " !D! ダメージを与える。 NL sneckomod:オーバーフロー : ナイフ を !M! 枚得る。", - "UPGRADE_DESCRIPTION": " !D! ダメージを与える。 NL sneckomod:オーバーフロー : ナイフ を !M! 枚得る。" + "DESCRIPTION": "!D! ダメージを与える。 NL sneckomod:オーバーフロー : ナイフを !M! 枚手札に加える。", + "UPGRADE_DESCRIPTION": "!D! ダメージを与える。 NL sneckomod:オーバーフロー : ナイフを !M! 枚手札に加える。" }, "sneckomod:SaveForLater": { - "NAME": "後回し", - "DESCRIPTION": " !D! ダメージを与える。 NL ターン終了時、カードを !M! 枚 保留 する。", - "UPGRADE_DESCRIPTION": " !D! ダメージを与える。 NL ターン終了時、カードを !M! 枚 保留 する。" + "NAME": "また後で", + "DESCRIPTION": "!D! ダメージを与える。 NL このターン、 !M! 枚のカードを 保留 出来る。", + "UPGRADE_DESCRIPTION": "!D! ダメージを与える。 NL このターン、 !M! 枚のカードを 保留 出来る。" }, "sneckomod:PowerShot": { "NAME": "パワーショット", - "DESCRIPTION": " !D! ダメージを与える。パワーをプレイする度、これを捨て札から手札に戻す。" + "DESCRIPTION": "!D! ダメージを与える。 NL パワーをプレイする度、このカードを捨て札から手札に戻す。" }, "sneckomod:LilGuardian": { - "NAME": "リトルガーディアン", - "DESCRIPTION": " !B! ブロックを得る。 コストが 2 以上のカードをプレイするたび、これを手札からプレイする。" + "NAME": "小さな用心棒", + "DESCRIPTION": "!B! ブロックを得る。 NL このカードが手札にある時、2コスト以上のカードをプレイした場合このカードをプレイする。" }, "sneckomod:CrystalBoomerang": { - "NAME": "クリスタルブーメラン", - "DESCRIPTION": "捨て札からカードを 1 枚手札に入れる。 NL それが sneckomod:オフクラス の場合、 !B! ブロックを得る。" + "NAME": "水晶ブーメラン", + "DESCRIPTION": "捨て札からカードを1枚手札に加える。 NL それが sneckomod:オフクラス なら !B! ブロックを得る。" }, "sneckomod:ViperEssence": { - "NAME": "ヴァイパーエッセンス", - "DESCRIPTION": "エセリアル NL sneckomod:オフクラス NL 筋力 !M! を得る。" + "NAME": "毒蛇エキス", + "DESCRIPTION": "エセリアル NL sneckomod:オフクラス NL 筋力 !M! を得る。" }, "sneckomod:Amass": { "NAME": "蓄積", - "DESCRIPTION": " !B! ブロックを得る。 NL 手札の合計 [E] に等しい追加のブロックを得る。", - "UPGRADE_DESCRIPTION": " !B! ブロックを得る。 NL 手札の合計 [E] の 2 倍に等しい追加のブロックを得る。" + "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! を与える。" + "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 廃棄 " + "NAME": "縮み上がる", + "DESCRIPTION": "!B! ブロックを得る。 NL 手札に *隠れる を加える。 NL 廃棄 ", + "UPGRADE_DESCRIPTION": "!B! ブロックを得る。 NL 手札に *隠れる+ を加える。 NL 廃棄 " }, "sneckomod:WideSting": { - "NAME": "ワイルドストリング", - "DESCRIPTION": "敵に !D! ダメージを与える。 NL 手札にある sneckomod:オフクラス カードを全て アップグレードする。 NL sneckomod:ギフト : コモン ", - "DESCRIPTION_BATTLE": "敵に !D! ダメージを与える。 NL 手札にある sneckomod:オフクラス カードを全て アップグレードする。" + "NAME": "ワイドスティング", + "DESCRIPTION": "敵全体に !D! ダメージを与える。 NL 手札の全 sneckomod:オフクラス カードをアップグレードする。 NL sneckomod:ギフト :コモン", + "DESCRIPTION_BATTLE": "敵全体に !D! ダメージを与える。 NL 手札の全 sneckomod:オフクラス カードをアップグレードする。" }, "sneckomod:GildedShield": { - "NAME": "金箔の盾", - "DESCRIPTION": " !B! ブロックを得る。 NL このカードを sneckomod:泥まみれ にして手札に戻す。" + "NAME": "金ぴかの盾", + "DESCRIPTION": "!B! ブロックを得る。 NL このカードを sneckomod:泥まみれ にして手札に戻す。" }, "sneckomod:Mesmerize": { - "NAME": "魅了する", - "DESCRIPTION": "全ての敵が !M! 筋力 を失う。 NL カードを1枚選び sneckomod:泥まみれ にする。 NL 廃棄 " + "NAME": "魅惑", + "DESCRIPTION": "敵全体が筋力 !M! を失う。 NL 手札を1枚 sneckomod:泥まみれ にする。 NL 廃棄 " }, "sneckomod:Serpentscale": { - "NAME": "蛇鱗", - "DESCRIPTION": " !D! ダメージを与える。 NL 1 expansioncontent:プレートアーマー を得る。 NL sneckomod:オーバーフロー : 代わりに !M! *プレートアーマー を得る。" + "NAME": "蛇の鱗", + "DESCRIPTION": "!D! ダメージを与える。 NL *プレートアーマー 1 を得る。 NL sneckomod:オーバーフロー : 代わりに *プレートアーマー !M! を得る。" }, "sneckomod:OtherworldlySlash": { - "NAME": "オーバーワールドスラッシュ", - "DESCRIPTION": " !D! ダメージを与える。 NL このターンに sneckomod:オフクラス カードをプレイした場合、再度 !D! ダメージを与える。 NL sneckomod:ギフト : コモン ", - "DESCRIPTION_BATTLE": " !D! ダメージを与える。 NL このターンに sneckomod:オフクラス カードをプレイした場合、再度 !D! ダメージを与える。" + "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:オフクラス カードを手札に加える。" + "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! 筋力 を得る。" + "NAME": "失敗保険", + "DESCRIPTION": "コスト3以上のカードをプレイする度、 !qqq! ブロックと 筋力 !M! を得る。", + "UPGRADE_DESCRIPTION": "コスト3以上のカードをプレイする度、 !qqq! ブロックと 筋力 !M! を得る。" }, "sneckomod:WideAngle": { "NAME": "ワイドアングル", - "DESCRIPTION": " 保留 NL 敵に !D! ダメージを与える。" + "DESCRIPTION": "保留 NL 敵全体に !D! ダメージを与える。" }, "sneckomod:SerpentsNest": { - "NAME": "蛇の巣", - "DESCRIPTION": "パワーをプレイするたびに、敵全体に !M! ダメージを与える。 NL sneckomod:ギフト : アンコモン パワー ", - "DESCRIPTION_BATTLE": "パワーをプレイするたびに、敵全体に !M! ダメージを与える。" + "NAME": "蛇の巣窟", + "DESCRIPTION": "パワーをプレイする度、敵全体に !M! ダメージを与える。 NL sneckomod:ギフト : アンコモン パワー", + "DESCRIPTION_BATTLE": "パワーをプレイする度、敵全体に !M! ダメージを与える。" }, "sneckomod:Whack": { - "NAME": "バシッ!", + "NAME": "ぺちんっ!", "DESCRIPTION": " !D! ダメージを与える。 NL 手札に *ぶん殴り を加える。 NL 廃棄 ", "UPGRADE_DESCRIPTION": " !D! ダメージを与える。 NL 手札に *ぶん殴り+ を加える。 NL 廃棄 " }, "sneckomod:CobraCoil": { "NAME": "コブラコイル", - "DESCRIPTION": " !D! ダメージを与える。 NL *締め付け !M! を与える。 NL sneckomod:ギフト : レア アタック " + "DESCRIPTION": "!D! ダメージを与える。 NL 対象は各ターン終了時に !M! ダメージを受けるようになる。 NL sneckomod:ギフト レアアタック" }, "sneckomod:Belittle": { - "NAME": "軽蔑する", - "DESCRIPTION": "敵は、持っているデバフの種類の数だけ !M! HP を失う。 NL sneckomod:ギフト : アンコモン デバフ ", - "DESCRIPTION_BATTLE": "敵は、持っているデバフの種類の数だけ !M! HP を失う。" + "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 廃棄 " + "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! 枚のカードを引く。" + "NAME": "即席ブレード", + "DESCRIPTION": "!D! ダメージを与える。 対象がデバフを !qqq! 種以上受けていた場合、 カードを 3 枚引く。 NL sneckomod:ギフト : デバフ", + "DESCRIPTION_BATTLE": "!D! ダメージを与える。 対象がデバフを !qqq! 種以上受けていた場合、 カードを 3 枚引く。" }, "sneckomod:LatchOn": { - "NAME": "ラッチオン", - "DESCRIPTION": "敵に !D! ダメージを与える。 NL 手札に *ヴァイパーエッセンス を加える。" + "NAME": "しっかり掴む", + "DESCRIPTION": "敵全体に !D! ダメージを与える。 NL 手札に *毒蛇エキス を加える。" }, "sneckomod:ComboString": { "NAME": "コンボストリング", - "DESCRIPTION": " !D! ダメージを与える。このターンにプレイされた sneckomod:オフクラス カードの数だけ繰り返す。 NL sneckomod:ギフト : アンコモン ", + "DESCRIPTION": "このターンにプレイされた sneckomod:オフクラス カード1枚につき !D! ダメージを与える。 NL sneckomod:ギフト : アンコモン", "EXTENDED_DESCRIPTION": [ " NL ( ", - " x 回 )" + " x 回)" ], - "DESCRIPTION_BATTLE": " !D! ダメージを与える。このターンにプレイされた sneckomod:オフクラス カードの数だけ繰り返す。" + "DESCRIPTION_BATTLE": "このターンにプレイされた sneckomod:オフクラス カード1枚につき !D! ダメージを与える。" }, "sneckomod:ThrowingCards": { - "NAME": "カードを投げる", - "DESCRIPTION": " *FTL のコピーを X 枚手札に加える。 NL [E] を得る。 NL 廃棄 ", - "UPGRADE_DESCRIPTION": " *FTL+ のコピーを X 枚手札に加える。 NL [E] を得る。 NL 廃棄 " + "NAME": "カードスロー", + "DESCRIPTION": "手札に X枚の *FTL を加える。 NL [E] を得る。 NL 廃棄 ", + "UPGRADE_DESCRIPTION": "手札に X枚の *FTL+ を加える。 NL [E] を得る。 NL 廃棄 " }, "sneckomod:RoundaboutSwing": { - "NAME": "ラウンドアバウトスイング", - "DESCRIPTION": " !D! ダメージを与える。 NL 手札のカードを 1 枚、山札の一番上に置く。 NL 次のターンに !M! 枚のカードを追加で引く。" + "NAME": "回転スイング", + "DESCRIPTION": "!D! ダメージを与える。 NL 手札を1枚山札の一番上に置く。 NL 次のターン、 カードを !M! 枚引く。" }, "sneckomod:MarkedCard": { - "NAME": "カードにマーク", - "DESCRIPTION": " 保留 NL カードを sneckomod:泥まみれ にする。 NL そのカードはコストが必ず減少する。 NL 廃棄 ", - "UPGRADE_DESCRIPTION": " 保留 NL !M! 枚のカードを sneckomod:泥まみれ にする。 NL それらはコストが必ず減少する。 NL 廃棄 " + "NAME": "目印付きカード", + "DESCRIPTION": "手札を1枚 sneckomod:泥まみれ にする。 NL それは常にコストが下がる。 NL 廃棄 ", + "UPGRADE_DESCRIPTION": "保留 NL 手札を1枚 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] を得る。" + "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] を得る。" + "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 この戦闘でプレイした各ユニーク ストライクごとに繰り返す。", + "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 ( ", - " x 回 )" + " 回追加)" ] }, "sneckomod:AceOfWands": { - "NAME": "ペンタクルの女王", - "DESCRIPTION": "エセリアル NL 敵にデバフを与えるたびに得る。 !M! ブロックを得る。 NL sneckomod:ギフト : デバフ ", - "UPGRADE_DESCRIPTION": "敵にデバフを与えるたびに得る。 !M! ブロックを得る。 NL sneckomod:ギフト : デバフ " + "NAME": "五芒星の女王", + "DESCRIPTION": "エセリアル NL 敵にデバフをかける度、 !M! ブロックを得る。 NL sneckomod:ギフト : デバフ", + "UPGRADE_DESCRIPTION": "敵にデバフをかける度、 !M! ブロックを得る。 NL sneckomod:ギフト : デバフ" }, "sneckomod:FlashInThePan": { - "NAME": "一瞬の輝き", - "DESCRIPTION": " !B! ブロックを得る。 NL 次のターン、手札のカードを捨て、 NL より多くのカードを引く。 " + "NAME": "閃光の中で", + "DESCRIPTION": "!B! ブロックを得る。 NL 手札を捨てる。 NL 次のターン、同じ枚数のカードを引く。" }, "sneckomod:TrashCan": { - "NAME": "ごみ箱", - "DESCRIPTION": "ターン開始時に、カードを 1 枚 廃棄 できる。", - "UPGRADE_DESCRIPTION": "天賦 NL ターン開始時に、カードを 1 枚 廃棄 できる。" + "NAME": "ゴミ箱", + "DESCRIPTION": "ターン終了時、あなたはカードを1枚 廃棄 してもよい。" }, "sneckomod:Lacerate": { - "NAME": "裂傷", - "DESCRIPTION": " !D! ダメージを与える。 このターンにこの敵がデバフを受けるたびに、 sneckomod:蛇毒 !M! を得る。 sneckomod:ギフト : *毒霧 ", - "DESCRIPTION_BATTLE": " !D! ダメージを与える。 このターンにこの敵がデバフを受けるたびに、 sneckomod:蛇毒 !M! を得る。" + "NAME": "切り傷", + "DESCRIPTION": "敵全体に sneckomod:猛毒 !M! を与える。 NL 手札に *劇毒 を加える。 NL 廃棄", + "UPGRADE_DESCRIPTION": "敵全体に sneckomod:猛毒 !M! を与える。 NL 手札に *劇毒+ を加える。 NL 廃棄" }, "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] を得る。" + "NAME": "蛇探偵", + "DESCRIPTION": "エセリアル NL パワーをプレイする度 [E] を得る。 NL sneckomod:ギフト レアパワー", + "DESCRIPTION_BATTLE": "エセリアル NL パワーをプレイする度 [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 5cfe0df087..c51b01fa73 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入手: レア #yオフクラス カードを #b1 枚選択する。", + " #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,12 +42,12 @@ "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戦闘-怒ったセンチュリオン", "[立ち去る]" ] } -} +} \ No newline at end of file diff --git a/src/main/resources/sneckomodResources/localization/jpn/KeywordStrings.json b/src/main/resources/sneckomodResources/localization/jpn/KeywordStrings.json index f8cb9cd885..152b3b7da4 100644 --- a/src/main/resources/sneckomodResources/localization/jpn/KeywordStrings.json +++ b/src/main/resources/sneckomodResources/localization/jpn/KeywordStrings.json @@ -1,27 +1,26 @@ [ { - "PROPER_NAME": "Snekproof", + "PROPER_NAME": "蛇避け", "NAMES": [ - "snekproof" + "snekproof", + "蛇避け" ], - "DESCRIPTION": "Snekproof cards aren't affected by #yConfusion and cannot be #yMuddled. NOTE FOR LOC: NOT USED DO NOT TRANSLATE." + "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": "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", - "オーバーフロー" + "Overflow", "overflow", "オーバーフロー" ], - "DESCRIPTION": "オーバーフロー は、手札に #b5 以上カードがある場合に発動する。" + "DESCRIPTION": "手札が #b6 枚以上の場合に発動する効果。" }, { "PROPER_NAME": "泥まみれ", @@ -31,7 +30,7 @@ "muddles", "泥まみれ" ], - "DESCRIPTION": "カードを泥まみれにすると、そのターンのコストがランダムに #b0 から #b3 の間で変更される" + "DESCRIPTION": "このターンの間、カードを泥まみれにしてコストをランダムで #b0 ~ #b3 に変化させる。" }, { "PROPER_NAME": "オフクラス", @@ -39,7 +38,7 @@ "offclass", "オフクラス" ], - "DESCRIPTION": "オフクラスカードとは、自分のクラス以外のクラスから取得可能なカード。(無色カード、呪い、状態異常を含む)" + "DESCRIPTION": "オフクラス カードは自分以外のキャラクターのカードを指す。 (無色、呪い、状態異常カードを含む)" }, { "PROPER_NAME": "ギフト", @@ -47,22 +46,37 @@ "gift", "ギフト" ], - "DESCRIPTION": "このカードを取得すると、次のカードタイプのカード報酬を獲得。" + "DESCRIPTION": "このカードを取得したとき、次のカードタイプのカード報酬を得る。" }, { - "PROPER_NAME": "Identify", + "PROPER_NAME": "識別", "NAMES": [ - "identify" + "identify", + "識別" ], - "DESCRIPTION": "Replace an #yUnidentified card with its current random card permanently. NOTE FOR LOC: NOT USED DO NOT TRANSLATE." + "DESCRIPTION": " #y未識別 のランダムなカードを現在のカードに確定する。" }, { - "PROPER_NAME": "蛇毒", + "PROPER_NAME": "猛毒", "NAMES": [ "venom", - "蛇毒" + "猛毒" + ], + "DESCRIPTION": "#y猛毒 を持つ敵に #y猛毒 以外のデバフを与えた時HPを減少させる。" + }, + { + "PROPER_NAME": "抹消", + "NAMES": [ + "抹消" + ], + "DESCRIPTION": "使用後デッキから削除される。" + }, + { + "PROPER_NAME": "変身", + "NAMES": [ + "変身" ], - "DESCRIPTION": " #y蛇毒 を持つ敵は、 #y蛇毒 以外のデバフを獲得するたびに HP を失う。" + "DESCRIPTION": "カードやポーションを別の物に変化させる。" }, { "PROPER_NAME": "ラッキー", @@ -70,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 6c35104b4b..103ad265c6 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": [ - "戦闘後、カード報酬に ", - " #b3 枚の #yアップグレード された アンコモン #yオフクラス カードを追加する。", - " #b3 枚の #yアップグレード された アンコモン #yオフクラス カードを追加する。( #b 回発動。)" + "戦闘中に使用すると、戦闘終了時の報酬に #b", + " 回、 #b3 枚の #yアップグレード された アンコモン #yオフクラス カードを追加する。", + " 回、 #b3 枚の #yアップグレード された アンコモン #yオフクラス カードを追加する。" ] }, "sneckomod:CheatPotion": { "NAME": "液状の運", "DESCRIPTIONS": [ - "オーバーフローは、手札のサイズに関係なく、このターン、常に発動する。", - "オーバーフローは、手札のサイズに関係なく、 #b 常に発動する。", - " ターン、 " + "このターン、手札枚数に関係なく 常に #yオーバーフロー の効果が発動する。", + "#b", + " ターンの間、手札枚数に関係なく 常に #yオーバーフロー の効果が発動する。" ] }, "sneckomod:MuddlingPotion": { @@ -25,8 +25,8 @@ "sneckomod:OffclassReductionPotion": { "NAME": "エキゾチックな飲み物", "DESCRIPTIONS": [ - "手札にある #yオフクラス カードのコストを #b", - " 減らす。" + "手札の #yオフクラス カードのコストを #b", + " 軽減する。" ] } } diff --git a/src/main/resources/sneckomodResources/localization/jpn/PowerStrings.json b/src/main/resources/sneckomodResources/localization/jpn/PowerStrings.json index e6656af815..737e3a541c 100644 --- a/src/main/resources/sneckomodResources/localization/jpn/PowerStrings.json +++ b/src/main/resources/sneckomodResources/localization/jpn/PowerStrings.json @@ -1,188 +1,194 @@ { "sneckomod:BlunderGuardPower": { - "NAME": "津波", + "NAME": "ツナミ", "DESCRIPTIONS": [ - "#yオーバーフロー をする度、 #b を得る。", - " #yブロック ", - " #yブロック " + "#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:OverwhelmingPresencePower": { "NAME": "圧倒的な存在感", "DESCRIPTIONS": [ - "各ターンにデッキを初めてシャッフルすると、[E] を得て、#b1 枚のカードを引く。", - "各ターンにデッキを初めてシャッフルすると、[E] を得て、#b", - " 枚のカードを引く。" + "各ターン、初めてオフクラス カードをプレイした時 カードを #b1 枚引く。", + "各ターン、初めてオフクラス カードをプレイした時 カードを #b", + " 枚引く。" ] }, "sneckomod:SerpentsNestPower": { - "NAME": "蛇の巣", + "NAME": "蛇の巣窟", "DESCRIPTIONS": [ - "#yパワー カードをプレイするたび、敵全体に 1 ダメージを与える。", - "#yパワー カードをプレイするたび、敵全体に #b", + "#yパワー カードをプレイした時、敵全体に #b1 ダメージを与える。", + "#yパワー カードをプレイした時、敵全体に #b", " ダメージを与える。" ] }, + "sneckomod:SerpentMindPower": { + "NAME": "異邦化", + "DESCRIPTIONS": [ + "ターン終了時にこのターンに使用されたカード1色毎に #b", + " #y筋力 を得る。", + " #y筋力 を得る。" + ] + }, "sneckomod:SnakeEyesPower": { - "NAME": "スネッコアイ", + "NAME": "スネークアイズ", + "DESCRIPTIONS": [ + "このターン、次にプレイする #yオフクラス カードは2回プレイされる。", + "あと #b", + " ターンの間、次にプレイする #yオフクラス カードは2回プレイされる。" + ] + }, + "sneckomod:UnendingSupplyPower": { + "NAME": "無尽蔵の供給", + "DESCRIPTIONS": [ + "ターン開始時、手札に #b", + "ターン開始時、手札にランダムな #yオフクラス カードの #yエコー を加える。", + " 枚のランダムな #yオフクラス カードの #yエコー を加える。" + ] + }, + "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": "無限ロール", + "DESCRIPTIONS": [ + "ターン開始時、 #y廃棄 付の #yソウルロール+ を手札に加える。" + ] + }, + "sneckomod:Transmogrifying": { + "NAME": "Transmogrifying", "DESCRIPTIONS": [ - "このターン、次の #yオフクラス #yカード は 2 回プレイされる。", - "このターン、次の #b", - " #yオフクラス #yカード は 2 回プレイされる。" + " 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蛇毒 .", + " #y猛毒.", "NOTE FOR LOC: NOT USED DO NOT TRANSLATE." ] }, "sneckomod:TyphoonPower": { - "NAME": "タイフーン", + "NAME": "暴風", "DESCRIPTIONS": [ - "このターン、#bオーバーフロー するたび、#yタイフーンファング のコピーをプレイする。", - "このターン、#bオーバーフロー するたび、#b", - " コピーの #yタイフーンファング をプレイする。" + "このターン、 #bオーバーフロー がプレイされる度、 #y暴風牙 のコピーをプレイする。", + "このターン、 #bオーバーフロー がプレイされる度、 #y暴風牙 のコピーを #b", + " 枚プレイする。" ] }, "sneckomod:TyphoonPlusPower": { - "NAME": "タイフーン+", + "NAME": "暴風+", "DESCRIPTIONS": [ - "このターン #bオーバーフロー , するたび、 #yタイフーンファング+ のコピーをプレイする。", - "このターン #bオーバーフロー , するたび、 #b", - " コピーの #yタイフーンファング+ をプレイする。" + "このターン、 #bオーバーフロー がプレイされる度、 #y暴風牙+ のコピーをプレイする。", + "このターン、 #bオーバーフロー がプレイされる度、 #y暴風牙+ のコピーを #b", + " 枚プレイする。" ] }, "sneckomod:SerpentineSleuthPower": { - "NAME": "蛇の探偵", + "NAME": "蛇探偵", "DESCRIPTIONS": [ - "#yパワー カードをプレイするたび、 #b を得る。", - " [E] .", - " [E] ." + "#yパワー カードをプレイする度、 #b", + " [E] を得る。", + " [E] を得る。" ] }, "sneckomod:BigGunsStrengthPower": { - "NAME": "大砲", + "NAME": "ビッグガン", "DESCRIPTIONS": [ - "コストが 3 以上のカードをプレイするたびに、 #b を得る。", - " #y筋力 ", - " #y筋力 " + "コスト #b3 以上 のカードをプレイする度、 #y筋力 #b", + " を得る。", + " を得る。" ] }, "sneckomod:BigGunsBlockPower": { - "NAME": "ブランダーガード", + "NAME": "失敗保険", "DESCRIPTIONS": [ - "敵にデバフを適用するたびに、 #b を得る。", - " #yブロック ", - " #yブロック " + "コスト #b3 以上 のカードをプレイする度、 #b", + " #yブロック を得る。", + " #yブロック を得る。" ] }, "sneckomod:AceOfWandsPower": { - "NAME": "ペンタクルの女王", + "NAME": "五芒星の女王", "DESCRIPTIONS": [ - "このターンにこの敵にデバフを与えるたびに、 #b を得る。", - " #yブロック ", - " #yブロック " + "敵にデバフを与える度、 #b", + " #yブロック を得る。", + " #yブロック を得る。" ] }, "sneckomod:LacerateDebuff": { - "NAME": "裂傷", + "NAME": "切り傷", "DESCRIPTIONS": [ - "#yオーバーフロー すると #b 与える。", - " #y蛇毒 をランダムな敵に", - " #y蛇毒 をランダムな敵に" + "このターン、敵にデバフを与える度それらに #b", + " #y猛毒 を与える。", + " #y猛毒 を与える。" ] }, "sneckomod:FountainPower": { "NAME": "噴水", "DESCRIPTIONS": [ - "#yオーバーフロー すると #b 与える。", - " #y蛇毒 をランダムな敵に", - " #y蛇毒 をランダムな敵に" + "#yオーバーフロー が発動する度、ランダムな敵に #b", + " #y猛毒 を与える。", + " #y猛毒 を与える。" ] }, "sneckomod:TrashCanPower": { - "NAME": "ごみ箱", - "DESCRIPTIONS": ["ターン開始時に、カードを #y廃棄 しても良い。", - "ターン開始時に、カードを最大 #b 枚まで #y廃棄 しても良い。" + "NAME": "ゴミ箱", + "DESCRIPTIONS": [ + "ターン終了時、カードを1枚 #y廃棄 出来る。", + "ターン終了時、カードを最大 #b", + " 枚 #y廃棄 出来る。" ] }, "sneckomod:VenomDebuff": { - "NAME": "蛇毒", + "NAME": "猛毒", "DESCRIPTIONS": [ - " #y蛇毒 以外のデバフを受ける度、 #b を失う。", - " HP" + "この対象が #y猛毒以外 のデバフを受ける度、HPを #b", + " 失う。" ] - }, - "sneckomod:SerpentMindPower": { - "NAME": "蛇心", - "DESCRIPTIONS": [ - "#yオフクラス カードをプレイする度にカードを #b", - " 枚引く。", - " 枚引く。" - ] - }, - "sneckomod:UnendingSupplyPower": { - "NAME": "無限サプライ", - "DESCRIPTIONS": [ - "ターン開始時、 #b", - " 枚のランダムな #yオフクラス カードを手札に加える。" - ] - }, - "sneckomod:UnknownUpgradedPostCombatPower": { - "NAME": "戦闘後:アップグレード済み未識別", - "DESCRIPTIONS": [ - "戦闘終了後 #b", - " 枚の #yアップグレード済み #y未識別 カードを得る。", - " 枚の #yアップグレード済み #y未識別 カードを得る。" - ] - }, - "sneckomod:UnlimitedRollsPower": { - "NAME": "無限ロール", - "DESCRIPTIONS": [ - "ターン開始時、 #yエセリアル と #y廃棄 のついた #yソウルロール+ を手札に加える。" - ] - }, - "sneckomod:Transmogrifying": { - "NAME": "変貌", - "DESCRIPTIONS": [ - " は別の ", - " レリックに変貌しつつある。" - ] - } -} + } + } diff --git a/src/main/resources/sneckomodResources/localization/jpn/RelicStrings.json b/src/main/resources/sneckomodResources/localization/jpn/RelicStrings.json index ec04bc8982..88cd8b3875 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": [ - "戦闘開始時、 #yソウルロール を手札に加える。" + "各戦闘開始時、手札に #yソウルロール を加える。" ] }, "sneckomod:SuperSneckoSoul": { "NAME": "スネッコソウルSP", "FLAVOR": "3120231321230320", "DESCRIPTIONS": [ - " [#407B93]スネッコソウル[] と置き換える。 NL 戦闘開始時と 3 ターン毎に、 #yソウルロール を得る。 NL 他のターンでは、ターンの開始時に追加のカードを 1 枚引き、 #ysneckomod:泥まみれ にする。" + " [#407B93]スネッコソウル[] と置き換える。 NL 戦闘開始時と、1ターン置きに #yソウルロール を手札に加える。 NL それ以外のターンは追加で1枚のカードを引き、 #y泥まみれ にする。" ] }, "sneckomod:CleanMud": { @@ -24,7 +24,8 @@ "NAME": "蛇の指輪", "FLAVOR": "読めない、読みづらい。木曜日〆切。", "DESCRIPTIONS": [ - " #b3 回 #ysneckomod:オーバーフロー するたびに、ランダムな敵に #y脱力 #b1 と #y弱体 #b1 を与える。" + "あなたが", + " #ysneckomod:オーバーフロー の効果を #b3 回発動する度、ランダムな敵に #y弱体 #b1と #y脱力 #b1 を与える。" ] }, "sneckomod:CrystallizedMud": { @@ -38,81 +39,84 @@ "NAME": "いかさまダイス", "FLAVOR": "チーズがたっぷり詰まってる。", "DESCRIPTIONS": [ - "カードが #ysneckomod:泥まみれ になるたび、 #b1 #yブロック を得る。 " + "カードを #ysneckomod:泥まみれ にする度、 #b", + " #yブロック を得る。" ] }, "sneckomod:RareBoosterPack": { "NAME": "レアブースターボックス", "FLAVOR": "とてもミントなコンディション。", "DESCRIPTIONS": [ - "入手時、 #yレア #yオフクラス カードを得る。" + "入手時、 #ysneckomod:オフクラス の #yレア カードをデッキに加える。" ] }, "sneckomod:SleevedAce": { "NAME": "とっておきのエース", "FLAVOR": "俺たちはみんなエースだ。", "DESCRIPTIONS": [ - "戦闘開始時、 #yカードにマーク を手札に加える。 " + "各戦闘開始時、 #y目印付きカード+ を手札に加える。 " ] }, "sneckomod:UnknownEgg": { "NAME": "正体不明の卵", "FLAVOR": "何が生まれるのかって? $1000 払って確認してみてね。", "DESCRIPTIONS": [ - "デッキに #ysneckomod:オフクラス カードを追加するたびに、それを #yアップグレード する。取得時に、ランダムな #ysneckomod:オフクラス カードを #b2 枚 #yアップグレード する。" + "デッキに #ysneckomod:オフクラス カードを追加する度に、それらを #yアップグレード する。レリック入手時、ランダムな #ysneckomod:オフクラス カードを2枚 #yアップグレード する。" ] }, "sneckomod:SuperSneckoEye": { "NAME": "スネッコアイSP", "FLAVOR": "0121012", "DESCRIPTIONS": [ - " #yスネッコアイ と置き換える。ターン開始時、 4 枚カードを追加で引く。戦闘開始時に #y混乱 。" + " #yスネッコアイ と置き換える。ターン開始時、カードを #b4 枚追加で引く。戦闘開始時に 混乱 する。 " ] }, "sneckomod:SneckoTalon": { "NAME": "アイドル・オブ・レトロメーション", "FLAVOR": "略してレトのアイドルと呼ばれることが多いらしい。", "DESCRIPTIONS": [ - "ターン開始時にこのターンの間、手札の中でコストが #b1 以上のランダムな 1 枚のカードのコストを #b1 下げる。" + "ターン開始時、手札にある #b1 以上のコストを持つランダムなカード のコストをプレイされるまで #b1 減少させる。" ] }, "sneckomod:BlankCard": { "NAME": "白紙のカード", "FLAVOR": "偽装カード", "DESCRIPTIONS": [ - "戦闘開始時、デッキからランダムなカード1枚( #y状態異常 、 #r呪い を除く)の #ygremlin:エコー をあなたの手札に加える。そのコストは #b0 になる。" + "戦闘開始時、デッキからランダムな #r呪い や #y状態異常 以外のカード1枚の #ygremlin:エコー をコスト #b0 にしてあなたの手札に加える。" ] }, "sneckomod:D8": { "NAME": "神秘的な八面体", "FLAVOR": "片方に偏っているように見える。", "DESCRIPTIONS": [ - "拾ったとき、 #ysneckomod:オーバーフロー 効果を持つカードを 1 枚選択する。そのカードは、プレイするたび #b4 #yBlock を獲得し、たとえ手札に #b5 枚以上のカードがなくても、 #yオーバーフロー を発動する。", - " のカードを選択する。", - " がプレイされるたび、#b4 #yBlock を獲得し、たとえ手札に #b5 枚以上のカードがなくても、 #ysneckomod:オーバーフロー を発動する。" + "入手時、 #ysneckomod:オーバーフロー の効果を持つカードを選択する。そのカードをプレイする度、 #b4 #yブロック を得て、 #ysneckomod:オーバーフロー の効果を発動する。", + "選択したカードは ", + "いつでも ", + " がプレイされた時、 #b4 #yブロック を得て、常に #ysneckomod:オーバーフロー の効果を発動する。", + "このレリックの効果を受けたカードはデッキから #r削除 された。" ] }, "sneckomod:BabySnecko": { "NAME": "ヤングスネッコ", "FLAVOR": "ビミョーに可愛い", "DESCRIPTIONS": [ - "ターン開始時、ランダムな敵に #b9 ダメージを与え、手札にあるランダムな (コスト #b0、#bX 、または #y使用不可 ではない) カードを #b2 枚 #ysneckomod:泥まみれ にする。" + "ターン開始時、ランダムな敵に #b9 ダメージを与え、コスト0以外のランダムな手札2枚を #ysneckomod:泥まみれ にする。" ] }, "sneckomod:SneckoCommon": { "NAME": "認証シール", "FLAVOR": "俺の名はアイアンクラッド。これはスパイアで一番好きなレリックさ。 -商人の広告パンフレットより", "DESCRIPTIONS": [ - "入手時、 #b5 のアンコモン #ysneckomod:オフクラス #yパワー から #b1 枚を選択して取得する。" + "入手時、 #b5 枚の アンコモン #ysneckomod:オフクラス #b1 種 の #yパワー カード の中から #b1 枚を選びデッキに加える。" ] }, "sneckomod:SneckoBoss": { "NAME": "幸運の蹄鉄", "FLAVOR": "自分の運を自分で切り開く。", "DESCRIPTIONS": [ - "入手時、 #b3 枚の #yキャラクター カード から #b1 枚選び、 #b3 #yアップグレード アンコモン カードと #b2 レア カードを選択してデッキに加える。今後すべての戦闘で選ばれたキャラクターのカードを追加で報酬に加える。", - "入手時に得られた #b3 #yアップグレード アンコモン カードと #b2 レア ", - " カード。 今後すべての戦闘で追加報酬に ", + "入手時、 #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 c4c51bc663..e95deb3e9c 100644 --- a/src/main/resources/sneckomodResources/localization/jpn/UIStrings.json +++ b/src/main/resources/sneckomodResources/localization/jpn/UIStrings.json @@ -1,23 +1,23 @@ { "sneckomod:Unknown": { "TEXT": [ - "Unknown", + "未識別", " アップグレード済み ", - "戦闘開始時、Unknownのカードは選ばれたクラスの中から特定の制約を満たす他のランダムなカードに変身する。", + "戦闘開始時、未識別のカードは選ばれたクラスの中から特定の制約を満たす他のランダムなカードに変身する。", " NL 選ばれたクラス:", - "戦闘開始時、Unknownのカードは選ばれた任意のクラスの中から特定の制約を満たす他のランダムなカードに変身する。", - "戦闘開始時、Unknownのカードは選ばれた他のクラスの中から特定の制約を満たす他のランダムなカードに変身する。" + "戦闘開始時、未識別のカードは選ばれた任意のクラスの中から特定の制約を満たす他のランダムなカードに変身する。", + "戦闘開始時、未識別のカードは選ばれた他のクラスの中から特定の制約を満たす他のランダムなカードに変身する。" ] }, "sneckomod:UnknownNames": { "TEXT": [ - "Unknown" + "未識別" ] }, "sneckomod:UnknownClass": { "TEXT": [ "???", - "*Unknown NL ", + "*未識別 NL ", " カード", "クラス", "は ", @@ -27,7 +27,7 @@ }, "sneckomod:UpgradedUnknownReward": { "TEXT": [ - "Unknown+ のカードをデッキに加える。", + "未識別+ のカードをデッキに加える。", "カードを1枚選択" ] }, @@ -43,42 +43,42 @@ }, "sneckomod:ChallengeMode": { "TEXT": [ - "チャレンジモード-ピュアスネッコ", - "ギフトは全てのクラスから出る。スネッコ経験者にオススメです。" + "究極モード-ピュアスネッコ", + "ギフトは全クラスを対象にする。ランダム性重視のカオスなプレイを楽しみたいプレイヤー向けです。" ] }, "sneckomod:LockInBonfireOptions": { "TEXT": [ "識別", - "Unknownのカードを識別する。", - "Unknownのカードが必要。", - "Unknownのカードを選択し、Unknown状態を解除してデッキに加える。", - "[行動消費なし] Unknownのカードを識別する。" + "未識別のカードを識別する。", + "未識別のカードが必要。", + "未識別のカードを選択し、未識別状態を解除してデッキに加える。", + "[行動消費なし] 未識別のカードを識別する。" ] }, - "sneckomod:CommonAttackReward": { + "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 1354b1ee40..29358ec87a 100644 --- a/src/main/resources/sneckomodResources/localization/kor/CardStrings.json +++ b/src/main/resources/sneckomodResources/localization/kor/CardStrings.json @@ -1,617 +1,616 @@ -{ - "sneckomod:Blunderbus": { - "NAME": "어쩌다 한 탕", - "DESCRIPTION": "적 전체에게 피해를 !D! 줍니다. NL 손에 비용이 3 이상인 카드가 있다면 피해를 1번 추가로 줍니다." - }, - "sneckomod:Tsunami": { - "NAME": "해일", - "DESCRIPTION": "sneckomod:과중 효과가 발동할 때 방어도를 !M! 얻습니다." - }, - "sneckomod:CheapStock": { - "NAME": "값싼 재고품", - "DESCRIPTION": "내 턴 시작 시 손에 있는 카드 중 비용이 가장 높은 카드를 sneckomod:뒤엉키게 합니다.", - "UPGRADE_DESCRIPTION": "내 턴 시작 시 손에 있는 카드 중 비용이 가장 높은 카드를 !M! 장 sneckomod:뒤엉키게 합니다." - }, - "sneckomod:Cheat": { - "NAME": "천운", - "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:뒤엉키게 합니다. NL sneckomod:선물: 3+ cost.", - "DESCRIPTION_BATTLE": "피해를 !D! 줍니다. NL 카드를 sneckomod:뒤엉키게 합니다." - }, - "sneckomod:Deception": { - "NAME": "기만", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL *충격파를 얻습니다. NL 소멸." - }, - "sneckomod:Defend": { - "NAME": "수비", - "DESCRIPTION": "방어도를 !B! 얻습니다." - }, - "sneckomod:DefensiveFlair": { - "NAME": "수비적인 솜씨", - "DESCRIPTION": "방어도를 얻습니다. NL sneckomod:다른_직업 카드 한 장당 방어도가 !M! 합니다. NL sneckomod:선물: 특별 카드.", - "DESCRIPTION_BATTLE": "sneckomod:다른_직업 카드 한 장당 방어도가 !M! 합니다." - }, - "sneckomod:DiceBlock": { - "NAME": "주사위 막기", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL sneckomod:과중 시 방어도를 !B! 추가로 얻습니다." - }, - "sneckomod:DiceBoulder": { - "NAME": "주사위 바위", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL 이번 전투에서 방어도가 !M! 증가하고 비용이 !qqq! 증가합니다." - }, - "sneckomod:DiceCrush": { - "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": "사용불가. 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": "적 전체에게 피해를 !D! 주고 약화를 !M! 부여합니다." - }, - "sneckomod:ImprovisedAttack": { - "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:ImprovisedGuard": { - "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:LuckyBreak": { - "NAME": "횡재", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL 손에 있는 비용이 2 이상인 카드 한 장당 카드를 !M! 장 뽑습니다." - }, - "sneckomod:Nope": { - "NAME": "안돼", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL 카드를 소멸시킵니다. 소멸시킨 카드가 무색 카드가 아니라면 무작위 같은 직업 카드를 얻습니다.", - "UPGRADE_DESCRIPTION": "방어도를 !B! 얻습니다. NL 카드를 소멸시킵니다. 소멸시킨 카드가 무색 카드가 아니라면 무작위 같은 직업 카드를 얻습니다.", - "EXTENDED_DESCRIPTION": [ - "안돼로 소멸시킬 카드를 선택하십시오." - ] - }, - "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": "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 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. 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": "도전에서 만날 수 없는 카드입니다. 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! 얻습니다." - }, - "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": "카드를 !M! 뽑습니다. NL 그 카드를 sneckomod:뒤엉키게 합니다." - }, - "sneckomod:QuickBite": { - "NAME": "뱀 갈퀴", - "DESCRIPTION": "피해를 !D! 줍니다. NL 손에 있는 카드 중 비용이 가장 높은 카드를 sneckomod:뒤엉키게 합니다." - }, - "sneckomod:QuickMove": { - "NAME": "날랜 움직임", - "DESCRIPTION": "방어도를 !B! 얻습니다. NL sneckomod:과중 시 적 전체에게 취약을 !M! 부여합니다." - }, - "sneckomod:RainOfDice": { - "NAME": "주사위 비", - "DESCRIPTION": "피해를 !D! 줍니다. NL sneckomod:뒤엉키게 했다면 *주사위 *비를 얻습니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NLsneckomod:뒤엉키게 했다면 *주사위 *비+를 얻습니다. NL 소멸." - }, - "sneckomod:Restock": { - "NAME": "재보급", - "DESCRIPTION": "카드를 전부 버립니다. NL 카드를 !M! 장 뽑고 손에 있는 카드를 sneckomod:뒤엉키게 합니다. NL 소멸." - }, - "sneckomod:Rotation": { - "NAME": "순환", - "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:다른_직업 카드 !M! 장 중 하나를 선택해 얻습니다. 이번 턴에 그 카드의 비용은 0이 됩니다. NL 소멸." - }, - "sneckomod:SerpentMind": { - "NAME": "외세의 형상", - "DESCRIPTION": "휘발성. NL 내 턴 종료 시 이번 턴에 사용한 무색, 직업 카드 종류 하나당 힘을 !M! 얻습니다. NL sneckomod:선물: 희귀 카드.", - "UPGRADE_DESCRIPTION": "내 턴 종료 시 이번 턴에 사용한 무색, 직업 카드 종류 하나당 힘을 !M! 얻습니다. NL sneckomod:선물: 희귀 카드.", - "DESCRIPTION_BATTLE": "내 턴 종료 시 이번 턴에 사용한 무색, 직업 카드 종류 하나당 힘을 !M! 얻습니다." - }, - "sneckomod:SlitherThrough": { - "NAME": "유연한 통과", - "DESCRIPTION": "피해를 !D! 줍니다. NL 이번 턴에 sneckomod:다른_직업 카드의 비용을 !M! 장의 비용을 낯춥니다. NL sneckomod:선물: 특별 카드.", - "DESCRIPTION_BATTLE": "피해를 !D! 줍니다. NL 이번 턴에 sneckomod:다른_직업 카드의 비용을 !M! 장의 비용을 낯춥니다." - }, - "sneckomod:SnakeSap": { - "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:SnekBeam": { - "NAME": "눈빛 광선", - "DESCRIPTION": "피해를 !D! 줍니다. NL [E] 를 얻습니다." - }, - "sneckomod:SnekBite": { - "NAME": "스네코 물기", - "DESCRIPTION": "피해를 !D! 줍니다. NL 카드를 sneckomod:뒤엉키게 합니다.", - "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL 카드를 !M! 장 sneckomod:뒤엉키게 합니다." - }, - "sneckomod:SoulCleanse": { - "NAME": "영혼의 정화", - "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:다른_직업 카드를 !M! 장 얻습니다. NL 그 카드를 보존합니다. NL 소멸." - }, - "sneckomod:SoulExchange": { - "NAME": "영혼의 교환", - "DESCRIPTION": "보존. NL 카드를 전부 sneckomod:뒤엉키게 합니다. NL 소멸." - }, - "sneckomod:SoulRoll": { - "NAME": "영혼의 도박", - "DESCRIPTION": "보존. NL 방어도를 !B! 얻습니다. NL 카드를 sneckomod:뒤엉키게 합니다. NL 소멸." - }, - "sneckomod:Strike": { - "NAME": "타격", - "DESCRIPTION": "피해를 !D! 줍니다." - }, - "sneckomod:ToothAndClaw": { - "NAME": "사력", - "DESCRIPTION": "피해를 !D! 줍니다. 이번 턴에 손에 있는 무색, 직업 카드 종류 하나당 단도 를 얻습니다. NL sneckomod:선물: 특별 카드.", - "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. 이번 턴에 손에 있는 무색, 직업 카드 종류 하나당 강화된 단도 를 얻습니다. NL sneckomod:선물: 특별 카드.", - "DESCRIPTION_BATTLE": "피해를 !D! 줍니다. 이번 턴에 손에 있는 무색, 직업 카드 종류 하나당 단도 를 얻습니다.", - "UPGRADE_DESCRIPTION_BATTLE": "피해를 !D! 줍니다. 이번 턴에 손에 있는 무색, 직업 카드 종류 하나당 강화된 단도 를 얻습니다." - }, - "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 sneckomod:과중 시 약화 와 취약을 !M! 부여합니다." - }, - "sneckomod:Transmogrify": { - "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: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": "방어도를 !B! 얻습니다. NL 카드를 소멸시킵니다. NL 이 카드와 동일한 [E] 를 얻습니다. NL 소멸.", - "UPGRADE_DESCRIPTION": "방어도를 !B! 얻습니다. NL 카드를 소멸시킵니다. NL 이 카드와 동일한 [E] 를 얻습니다." - }, - "sneckomod:UnendingSupply": { - "NAME": "영원한 공급", - "DESCRIPTION": "내 턴 시작 시 무작위 sneckomod:다른_직업 카드의 gremlin:메아리를 얻습니다.", - "UPGRADE_DESCRIPTION": "선천성. NL 내 턴 시작 시 무작위 sneckomod:다른_직업 카드의 gremlin:메아리를 얻습니다." -}, - "sneckomod:Unknown": { - "NAME": "??? Basic", - "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", - "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." - }, - "sneckomod:Unknown0Cost": { - "NAME": "??? 0-Cost", - "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", - "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." - }, - "sneckomod:Unknown1Cost": { - "NAME": "??? 1-Cost", - "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", - "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." - }, - "sneckomod:Unknown2Cost": { - "NAME": "??? 2-Cost", - "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", - "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." - }, - "sneckomod:Unknown3Cost": { - "NAME": "??? 3-Cost", - "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", - "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." - }, - "sneckomod:UnknownBlock": { - "NAME": "??? Block", - "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", - "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." - }, - "sneckomod:UnknownBoss": { - "NAME": "??? Boss", - "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", - "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." - }, - "sneckomod:UnknownClass": { - "NAME": "??? Class", - "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", - "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." - }, - "sneckomod:UnknownColorless": { - "NAME": "??? Colorless", - "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", - "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." - }, - "sneckomod:UnknownCommonAttack": { - "NAME": "??? C Attack", - "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", - "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." - }, - "sneckomod:UnknownCommonSkill": { - "NAME": "??? C Skill", - "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", - "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." - }, - "sneckomod:UnknownDexterity": { - "NAME": "??? Dexterity", - "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", - "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." - }, - "sneckomod:UnknownDraw": { - "NAME": "??? Draw", - "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", - "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." - }, - "sneckomod:UnknownEthereal": { - "NAME": "??? Ethereal", - "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", - "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." - }, - "sneckomod:UnknownExhaust": { - "NAME": "??? Exhaust", - "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", - "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." - }, - "sneckomod:UnknownRareAttack": { - "NAME": "??? R Attack", - "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", - "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." - }, - "sneckomod:UnknownRarePower": { - "NAME": "??? R Power", - "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", - "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." - }, - "sneckomod:UnknownRareSkill": { - "NAME": "??? R Skill", - "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", - "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." - }, - "sneckomod:UnknownStrength": { - "NAME": "??? Strength", - "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", - "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." - }, - "sneckomod:UnknownStrike": { - "NAME": "??? Strike", - "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", - "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." - }, - "sneckomod:UnknownUncommonAttack": { - "NAME": "??? U Attack", - "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", - "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." - }, - "sneckomod:UnknownUncommonPower": { - "NAME": "??? U Power", - "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", - "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." - }, - "sneckomod:UnknownUncommonSkill": { - "NAME": "??? U Skill", - "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", - "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." - }, - "sneckomod:UnknownVulnerable": { - "NAME": "??? Vulnerable", - "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", - "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." - }, - "sneckomod:UnknownWeak": { - "NAME": "??? Weak", - "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", - "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." - }, - "sneckomod:UnknownX": { - "NAME": "??? X-Cost", - "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", - "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." - }, - "sneckomod:UnlimitedRolls": { - "NAME": "무제한 도박", - "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": "적 전체에게 피해를 !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] 를 얻습니다." - } -} \ No newline at end of file +{ + "sneckomod:Blunderbus": { + "NAME": "어쩌다 한 탕", + "DESCRIPTION": "적 전체에게 피해를 !D! 줍니다. NL 손에 있는 비용이 3 이상인 카드 한 장당 피해를 줍니다." + }, + "sneckomod:Tsunami": { + "NAME": "해일", + "DESCRIPTION": "sneckomod:과중 효과가 발동할 때 방어도를 !M! 얻습니다." + }, + "sneckomod:CheapStock": { + "NAME": "값싼 재고품", + "DESCRIPTION": "내 턴 시작 시 손에 있는 카드 중 비용이 가장 높은 카드를 sneckomod:뒤엉키게 합니다.", + "UPGRADE_DESCRIPTION": "내 턴 시작 시 손에 있는 카드 중 비용이 가장 높은 카드를 !M! 장 sneckomod:뒤엉키게 합니다." + }, + "sneckomod:Cheat": { + "NAME": "천운", + "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 카드를 1장 sneckomod:뒤엉키게 합니다. NL sneckomod:선물: 비용 3+ 카드.", + "DESCRIPTION_BATTLE": "피해를 !D! 줍니다. NL 카드를 1장 sneckomod:뒤엉키게 합니다." + }, + "sneckomod:Deception": { + "NAME": "기만", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL *충격파를 얻습니다. NL 소멸." + }, + "sneckomod:Defend": { + "NAME": "수비", + "DESCRIPTION": "방어도를 !B! 얻습니다." + }, + "sneckomod:DefensiveFlair": { + "NAME": "수비적인 솜씨", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 손에 있는 sneckomod:다른 *직업 카드 한 장당 방어도가 !M! 증가합니다. NL sneckomod:선물: 특별 카드.", + "DESCRIPTION_BATTLE": "방어도를 !B! 얻습니다. NL 손에 있는 sneckomod:다른 *직업 카드 한 장당 방어도가 !M! 증가합니다." + }, + "sneckomod:DiceBlock": { + "NAME": "주사위 막기", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL sneckomod:과중 시 방어도를 !B! 추가로 얻습니다." + }, + "sneckomod:DiceBoulder": { + "NAME": "주사위 바위", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 이번 전투 동안 방어도가 !M! 증가하고 비용이 !qqq! 증가합니다." + }, + "sneckomod:DiceCrush": { + "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": "사용불가. 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": "적 전체에게 피해를 !D! 주고 약화를 !M! 부여합니다." + }, + "sneckomod:ImprovisedAttack": { + "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:ImprovisedGuard": { + "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:LuckyBreak": { + "NAME": "횡재", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 손에 있는 비용이 2 이상인 카드 한 장당 카드를 !M! 장 뽑습니다." + }, + "sneckomod:Nope": { + "NAME": "안돼", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL 카드를 1장 소멸시킵니다. 소멸시킨 카드가 무색 카드가 아니라면 무작위 같은 직업 카드를 얻습니다.", + "UPGRADE_DESCRIPTION": "방어도를 !B! 얻습니다. NL 카드를 1장 소멸시킵니다. 소멸시킨 카드가 무색 카드가 아니라면 무작위 같은 직업 카드를 얻습니다.", + "EXTENDED_DESCRIPTION": [ + "안돼로 소멸시킬 카드를 선택하십시오." + ] + }, + "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": "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 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. 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": "도전에서 만날 수 없는 카드입니다. 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! 얻습니다." + }, + "sneckomod:OverwhelmingPresence": { + "NAME": "위압", + "DESCRIPTION": "휘발성. NL 매 턴 처음으로 sneckomod:다른 *직업 카드를 사용하면 카드를 1장 뽑습니다.", + "UPGRADE_DESCRIPTION": "매 턴 처음으로 sneckomod:다른 *직업 카드를 사용하면 카드를 1장 뽑습니다." + }, + "sneckomod:RiskySword": { + "NAME": "위험한 검", + "DESCRIPTION": "피해를 !D! 줍니다. NL sneckomod:뒤엉키게 했다면 이번 전투 동안 이 카드의 피해량이 !M! 증가합니다." + }, + "sneckomod:PoisonParadise": { + "NAME": "분수", + "DESCRIPTION": "sneckomod:과중 효과가 발동하면 무작위 적에게 sneckomod:뱀독을 !M! 부여합니다." + }, + "sneckomod:PureSnecko": { + "NAME": "갈아타기", + "DESCRIPTION": "카드를 !M! 장 뽑습니다. NL 그 카드를 sneckomod:뒤엉키게 합니다." + }, + "sneckomod:QuickBite": { + "NAME": "뱀 갈퀴", + "DESCRIPTION": "피해를 !D! 줍니다. NL 카드를 !M! 장 뽑습니다. NL 그 카드를 sneckomod:뒤엉키게 합니다.", + "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL 카드를 !M! 장 뽑습니다. NL 그 카드를 sneckomod:뒤엉키게 합니다." + }, + "sneckomod:QuickMove": { + "NAME": "날랜 움직임", + "DESCRIPTION": "방어도를 !B! 얻습니다. NL sneckomod:과중 시 적 전체에게 취약을 !M! 부여합니다." + }, + "sneckomod:RainOfDice": { + "NAME": "주사위 비", + "DESCRIPTION": "피해를 !D! 줍니다. NL 카드를 1장 sneckomod:뒤엉키게 하고 *주사위 *비를 얻습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL 카드를 1장 sneckomod:뒤엉키게 하고 *주사위 *비+를 얻습니다. NL 소멸." + }, + "sneckomod:Restock": { + "NAME": "재보급", + "DESCRIPTION": "카드를 전부 버립니다. NL 카드를 !M! 장 뽑고 손에 있는 카드를 sneckomod:뒤엉키게 합니다. NL 소멸." + }, + "sneckomod:Rotation": { + "NAME": "순환", + "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 카드를 1장 sneckomod:뒤엉키게 합니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "카드를 !qqq! 장 뽑습니다. NL 카드를 !M! 장 sneckomod:뒤엉키게 합니다. NL 소멸." + }, + "sneckomod:SerpentIdol": { + "NAME": "구렁이 우상", + "DESCRIPTION": "무작위 sneckomod:다른 *직업 카드 !M! 장 중 하나를 선택해 얻습니다. 이번 턴에 그 카드의 비용은 0이 됩니다. NL 소멸." + }, + "sneckomod:SerpentMind": { + "NAME": "외세의 형상", + "DESCRIPTION": "휘발성. NL 내 턴 종료 시 이번 턴에 사용한 무색, 직업 카드 종류 하나당 힘을 !M! 얻습니다. NL sneckomod:선물: 희귀 카드.", + "UPGRADE_DESCRIPTION": "내 턴 종료 시 이번 턴에 사용한 무색, 직업 카드 종류 하나당 힘을 !M! 얻습니다. NL sneckomod:선물: 희귀 카드.", + "DESCRIPTION_BATTLE": "내 턴 종료 시 이번 턴에 사용한 무색, 직업 카드 종류 하나당 힘을 !M! 얻습니다." + }, + "sneckomod:SlitherThrough": { + "NAME": "유연한 통과", + "DESCRIPTION": "피해를 !D! 줍니다. NL 이번 턴에 sneckomod:다른 *직업 카드 !M! 장의 비용을 낮춥니다. NL sneckomod:선물: 특별 카드.", + "DESCRIPTION_BATTLE": "피해를 !D! 줍니다. NL 이번 턴에 sneckomod:다른 *직업 카드 !M! 장의 비용을 낮춥니다." + }, + "sneckomod:SnakeSap": { + "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:SnekBeam": { + "NAME": "눈빛 광선", + "DESCRIPTION": "피해를 !D! 줍니다. NL [E] 를 얻습니다." + }, + "sneckomod:SnekBite": { + "NAME": "스네코 물기", + "DESCRIPTION": "피해를 !D! 줍니다. NL 카드를 1장 sneckomod:뒤엉키게 합니다.", + "UPGRADE_DESCRIPTION": "피해를 !D! 줍니다. NL 카드를 !M! 장 sneckomod:뒤엉키게 합니다." + }, + "sneckomod:SoulCleanse": { + "NAME": "영혼의 정화", + "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:다른 *직업 카드를 !M! 장 얻습니다. NL 그 카드들은 보존됩니다. NL 소멸." + }, + "sneckomod:SoulExchange": { + "NAME": "영혼의 교환", + "DESCRIPTION": "보존. NL 손에 있는 카드가 sneckomod:뒤엉킵니다. NL 소멸." + }, + "sneckomod:SoulRoll": { + "NAME": "영혼의 도박", + "DESCRIPTION": "보존. NL 방어도를 !B! 얻습니다. NL 카드를 1장 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": "선망", + "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 sneckomod:과중 시 약화와 취약을 !M! 부여합니다." + }, + "sneckomod:Transmogrify": { + "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: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": "방어도를 !B! 얻습니다. NL 카드를 1장 소멸시킵니다. NL 이 카드의 비용만큼 [E] 를 얻습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "방어도를 !B! 얻습니다. NL 카드를 1장 소멸시킵니다. NL 이 카드의 비용만큼 [E] 를 얻습니다." + }, + "sneckomod:UnendingSupply": { + "NAME": "영원한 공급", + "DESCRIPTION": "내 턴 시작 시 무작위 sneckomod:다른 *직업 카드의 gremlin:메아리를 얻습니다.", + "UPGRADE_DESCRIPTION": "선천성. NL 내 턴 시작 시 무작위 sneckomod:다른 *직업 카드의 gremlin:메아리를 얻습니다." +}, + "sneckomod:Unknown": { + "NAME": "??? 시작", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." + }, + "sneckomod:Unknown0Cost": { + "NAME": "??? 비용 0", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." + }, + "sneckomod:Unknown1Cost": { + "NAME": "??? 비용 1", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." + }, + "sneckomod:Unknown2Cost": { + "NAME": "??? 비용 2", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." + }, + "sneckomod:Unknown3Cost": { + "NAME": "??? 비용 3", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." + }, + "sneckomod:UnknownBlock": { + "NAME": "??? 방어도", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." + }, + "sneckomod:UnknownBoss": { + "NAME": "??? 보스", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." + }, + "sneckomod:UnknownClass": { + "NAME": "??? 직업", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." + }, + "sneckomod:UnknownColorless": { + "NAME": "??? 무색", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." + }, + "sneckomod:UnknownCommonAttack": { + "NAME": "??? 일반 공격", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." + }, + "sneckomod:UnknownCommonSkill": { + "NAME": "??? 일반 스킬", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." + }, + "sneckomod:UnknownDexterity": { + "NAME": "??? 민첩", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." + }, + "sneckomod:UnknownDraw": { + "NAME": "??? 뽑기", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." + }, + "sneckomod:UnknownEthereal": { + "NAME": "??? 휘발성", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." + }, + "sneckomod:UnknownExhaust": { + "NAME": "??? 소멸", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." + }, + "sneckomod:UnknownRareAttack": { + "NAME": "??? 희귀 공격", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." + }, + "sneckomod:UnknownRarePower": { + "NAME": "??? 희귀 파워", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." + }, + "sneckomod:UnknownRareSkill": { + "NAME": "??? 희귀 스킬", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." + }, + "sneckomod:UnknownStrength": { + "NAME": "??? 힘", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." + }, + "sneckomod:UnknownStrike": { + "NAME": "??? 타격", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." + }, + "sneckomod:UnknownUncommonAttack": { + "NAME": "??? 특별 공격", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." + }, + "sneckomod:UnknownUncommonPower": { + "NAME": "??? 특별 파워", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." + }, + "sneckomod:UnknownUncommonSkill": { + "NAME": "??? 특별 스킬", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." + }, + "sneckomod:UnknownVulnerable": { + "NAME": "??? 취약", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." + }, + "sneckomod:UnknownWeak": { + "NAME": "??? 약화", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." + }, + "sneckomod:UnknownX": { + "NAME": "??? 비용 X", + "DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요.", + "UPGRADE_DESCRIPTION": "도전에서 만날 수 없는 카드입니다. NL 이 카드를 발견했다면 버그가 발생했을 가능성이 큽니다. NL 부디 모드 개발자에게 버그를 제보해 주세요." + }, + "sneckomod:UnlimitedRolls": { + "NAME": "무제한 도박", + "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": "적 전체에게 피해를 !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 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 (피해를 ", + " 번 줍니다.)" + ], + "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 카드를 1장 뽑을 더미 맨 위에 놓습니다. NL 다음 턴에 카드를 !M! 장 더 뽑습니다." + }, + "sneckomod:MarkedCard": { + "NAME": "표시해 둔 카드", + "DESCRIPTION": "카드를 1장 sneckomod:뒤엉키게 합니다. NL 이 카드로 *뒤엉킨 카드는 항상 가장 낮은 비용으로 변경됩니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "보존. NL 카드를 1장 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": "내 턴 시작 시 카드를 소멸시킵니다." + }, + "sneckomod:Lacerate": { + "NAME": "갈기갈기", + "DESCRIPTION": "적 전체에게 sneckomod:뱀독을 !M! 부여합니다. NL *신경독을 얻습니다. NL 소멸.", + "UPGRADE_DESCRIPTION": "적 전체에게 sneckomod:뱀독을 !M! 부여합니다. NL *신경독+을 얻습니다. NL 소멸." + }, + "sneckomod:SerpentineSleuth": { + "NAME": "뱀 탐정", + "DESCRIPTION": "휘발성. NL 파워 카드를 사용할 때마다 [E] 를 얻습니다. NL sneckomod:선물: 희귀 파워 카드.", + "DESCRIPTION_BATTLE": "휘발성. NL 파워 카드를 사용할 때마다 [E] 를 얻습니다." + } +} diff --git a/src/main/resources/sneckomodResources/localization/kor/EventStrings.json b/src/main/resources/sneckomodResources/localization/kor/EventStrings.json index 0f1a06d663..d9c9dfa8eb 100644 --- a/src/main/resources/sneckomodResources/localization/kor/EventStrings.json +++ b/src/main/resources/sneckomodResources/localization/kor/EventStrings.json @@ -1,53 +1,53 @@ -{ - "sneckomod:D8": { - "NAME": "신비한 8면체", - "DESCRIPTIONS": [ - "신비한 8면체에게 다가갑니다.", - "유물이 터져버렸습니다.", - "유물을 얻었습니다.", - "떠나기로 합니다." - ], - "OPTIONS": [ - "[부순다] #r체력을 #r", - " #r잃습니다. #g다른 #g직업 #g카드 #g3장 #g중 #g하나를 #g선택해 #g얻습니다.", - "[가진다] #g신비한 #g8면체를 #g얻습니다. #r저주를 #r받습니다 #r- #r고통.", - "[떠난다]", - "[잠김] 무작위 과중 카드가 필요합니다." - ] - }, - "sneckomod:BackToBasics": { - "NAME": "", - "DESCRIPTIONS": [ - "창의성은 항상 계획을 능가합니다." - ], - "OPTIONS": [ - "[즉흥] #g모든 #g타격과 #g수비를 #g무작위 #g다른 #g직업 #g카드로 #g교체합니다.", - "[잠김] 타격과 수비가 필요합니다." - ] - }, - "sneckomod:Serpent": { - "NAME": "배애애애앰", - "DESCRIPTIONS": [ - "당신은 땅에 뚫린 큰 구멍을 보고 방으로 들어갔습니다. 구멍 앞에 도달하자 당신과 닮은 거대한 비늘로 뒤덮힌 생명체가 튀어나왔습니다. NL NL ~\"하~ ~하하!~ ~안녕~ ~안녕~ ~뱀~ ~친구!~ 뭐 좀 물어볼게...\" NL NL 뱀이 하는 말은 들었지만, 아무것도 알아듣지 못하고 @당혹스러워하는@ 자신을 발견할 수 있었습니다. NL NL \"너도 그렇게 생각하지?\"", - "~\"훌륭해!\"~ NL NL 질문이 무엇이었는지는 도무지 모르겠지만 당신은 뱀의 날을 제정한 거 같습니다. NL 뱀은 당신을 돕기 위해 장신구를 주더니 구멍으로 미끄러져 들어갑니다.", - "뱀은 매우 실망한 표정으로 당신을 노려봤지만 이내 미소를 지으며 당신의 여행이 잘되길 빕니다." - ], - "OPTIONS": [ - "[동의한다] #g스네코 #g유물을 #g얻습니다. #r저주를 #r받습니다 #r- #r당혹.", - "[동의하지 않는다]", - "[떠난다]" - ] - }, - "sneckomod:SuspiciousHouse": { - "NAME": "수상한 집", - "DESCRIPTIONS": [ - "도시를 다니다 보니 근처 집에서 괴물의 날카로운 비명이 귀를 찌릅니다. 확인해보니 도시의 주민이 우리에 갇힌 작은 구불거리는 생명체를 조용히시키고 있었습니다. NL NL ~\"어이!~ 내 집엔 왜 맘대로 들어와?! @나가!\"@ NL NL 우리에 갇힌 생명체는 깜짝 놀라 오크통의 구석으로 숨어들어갑니다. 이곳에서 행복하진 않은 게 분명해 보이네요.", - "\"이걸 원해? @좋아!@ 이것 가지고 소란 피우긴 싫으니까.\" NL NL 콧방귀를 뀌며 포획자는 자물쇠를 열고 우리에 손을 뻗습니다. 그 순간 뱀은 그 조그만 입으로 있는 힘껏 그의 손가락을 물어뜯습니다. NL NL 당신은 빠르게 나서서 남자가 생명체에게 해코지하기 전에 #r때려눕힙니다. 생명체는 함께 첨탑을 다니자는 제안에 기쁘다는 듯 손 위로 기어오릅니다. 그녀에게 이름을 붙여줘야겠네요... #y'클레멘타인' 이라고요.", - "뱀은 매우 실망한 표정으로 당신을 노려봤지만 이내 미소를 지으며 당신의 여행이 잘되길 빕니다." - ], - "OPTIONS": [ - "[구한다] #g어린 #g스네코를 #g얻습니다. #r성난 #r백부장과 #r싸웁니다.", - "[떠난다]" - ] - } +{ + "sneckomod:D8": { + "NAME": "신비한 8면체", + "DESCRIPTIONS": [ + "당신은 거대한 받침대 위에 신비한 힘을 발하는 #g신비한 #g8면체가 고요히 둥둥 떠 있는 곳에 들어서게 됩니다. 당신의 선택은...", + "유물이 터져버렸습니다.", + "유물을 얻었습니다.", + "떠나기로 합니다." + ], + "OPTIONS": [ + "[부순다] #r체력을 #r", + " #r잃습니다. #g다른 #g직업 #g카드 #g3장 #g중 #g하나를 #g선택해 #g얻습니다.", + "[가진다] #g신비한 #g8면체를 #g얻습니다. #r저주를 #r받습니다. #r- #r고통.", + "[떠난다]", + "[잠김] 무작위 과중 카드가 필요합니다." + ] + }, + "sneckomod:BackToBasics": { + "NAME": "", + "DESCRIPTIONS": [ + "창의성은 항상 계획을 능가합니다." + ], + "OPTIONS": [ + "[즉흥] #g모든 #g타격과 #g수비를 #g무작위 #g다른 #g직업 #g카드로 #g교체합니다.", + "[잠김] 타격 또는 수비가 필요합니다." + ] + }, + "sneckomod:Serpent": { + "NAME": "배애애애앰", + "DESCRIPTIONS": [ + "당신은 땅에 뚫린 큰 구멍을 보고 방으로 들어갔습니다. 구멍 앞에 도달하자 당신과 닮은 거대한 비늘로 뒤덮힌 생명체가 튀어나왔습니다. NL NL ~\"하~ ~하하!~ ~안녕~ ~안녕~ ~뱀~ ~친구!~ 뭐 좀 물어볼게...\" NL NL 뱀이 하는 말은 들었지만, 아무것도 알아듣지 못하고 @당혹스러워하는@ 자신을 발견할 수 있었습니다. NL NL \"너도 그렇게 생각하지?\"", + "~\"훌륭해!\"~ NL NL 질문이 무엇이었는지는 도무지 모르겠지만 당신이 뱀의 날을 제정한 것 같군요. NL 뱀은 당신을 돕기 위해 장신구를 주더니 구멍으로 미끄러져 들어갑니다.", + "뱀은 매우 실망한 표정으로 당신을 노려봤지만 이내 미소를 지으며 당신의 여행이 잘되길 빕니다." + ], + "OPTIONS": [ + "[동의한다] #g스네코 #g유물을 #g얻습니다. #r저주를 #r받습니다. #r- #r당혹.", + "[동의하지 않는다]", + "[떠난다]" + ] + }, + "sneckomod:SuspiciousHouse": { + "NAME": "수상한 집", + "DESCRIPTIONS": [ + "도시를 다니다 보니 근처 집에서 괴물의 날카로운 비명이 귀를 찌릅니다. 확인해보니 도시의 주민이 우리에 갇힌 작은 구불거리는 생명체를 조용히시키고 있었습니다. NL NL ~\"어이!~ 내 집엔 왜 맘대로 들어와?! @나가!\"@ NL NL 우리에 갇힌 생명체는 깜짝 놀라 오크통의 구석으로 숨어들어갑니다. 이곳에서 행복하진 않은 게 분명해 보이네요.", + "\"이걸 원해? @좋아!@ 이것 가지고 소란 피우긴 싫으니까.\" NL NL ~콧방귀를~ 뀌며 포획자는 자물쇠를 열고 우리에 손을 뻗습니다. 그 순간 뱀은 그 조그만 입으로 있는 힘껏 그의 손가락을 물어뜯습니다. NL NL 당신은 빠르게 나서서 남자가 생명체에게 해코지하기 전에 #r때려눕힙니다. 생명체는 함께 첨탑을 다니자는 제안에 기쁘다는 듯 손 위로 기어오릅니다. 그녀에게 이름을 붙여줘야겠네요... #y'클레멘타인' 이라고요.", + "뱀은 매우 실망한 표정으로 당신을 노려봤지만 이내 미소를 지으며 당신의 여행이 잘되길 빕니다." + ], + "OPTIONS": [ + "[구한다] #g어린 #g스네코를 #g얻습니다. #r성난 #r백부장과 #r싸웁니다.", + "[떠난다]" + ] + } } \ No newline at end of file diff --git a/src/main/resources/sneckomodResources/localization/kor/KeywordStrings.json b/src/main/resources/sneckomodResources/localization/kor/KeywordStrings.json index cfc3414a5c..643731f9b9 100644 --- a/src/main/resources/sneckomodResources/localization/kor/KeywordStrings.json +++ b/src/main/resources/sneckomodResources/localization/kor/KeywordStrings.json @@ -10,20 +10,22 @@ { "PROPER_NAME": "뒤엉킴", "NAMES": [ + "muddle", + "muddled", + "muddles", "뒤엉킴", "뒤엉킨", "뒤엉킬", "뒤엉키게", "뒤엉키고", - "뒤엉킵니다", - "muddle", - "muddled" + "뒤엉킵니다" ], "DESCRIPTION": "카드 비용이 뒤엉켜서 이번 턴 동안 #b0 에서 #b3 까지 무작위로 변경됩니다." }, { "PROPER_NAME": "다른 직업", "NAMES": [ + "다른", "다른 직업", "다른_직업", "offclass" @@ -56,8 +58,16 @@ { "PROPER_NAME": "변화", "NAMES": [ + "변화", + "변화된", + "변화하는", + "변화를", + "변화가", + "변화되거나", + "변화시키고", "변화합니다", - "변화시킵니다" + "변화시킵니다", + "TRANSFORM" ], "DESCRIPTION": "무작위로 정해진 카드로 교체됩니다." }, @@ -96,4 +106,4 @@ ], "DESCRIPTION": "적에게 해로운 효과를 부여할 때마다 체력을 잃게 만듭니다." } -] \ No newline at end of file +] diff --git a/src/main/resources/sneckomodResources/localization/kor/MonsterStrings.json b/src/main/resources/sneckomodResources/localization/kor/MonsterStrings.json index 9e26dfeeb6..22fdca1b26 100644 --- a/src/main/resources/sneckomodResources/localization/kor/MonsterStrings.json +++ b/src/main/resources/sneckomodResources/localization/kor/MonsterStrings.json @@ -1 +1 @@ -{} \ No newline at end of file +{} \ No newline at end of file diff --git a/src/main/resources/sneckomodResources/localization/kor/OrbStrings.json b/src/main/resources/sneckomodResources/localization/kor/OrbStrings.json index 9e26dfeeb6..22fdca1b26 100644 --- a/src/main/resources/sneckomodResources/localization/kor/OrbStrings.json +++ b/src/main/resources/sneckomodResources/localization/kor/OrbStrings.json @@ -1 +1 @@ -{} \ No newline at end of file +{} \ 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 ce15f1735f..fd040098a9 100644 --- a/src/main/resources/sneckomodResources/localization/kor/PotionStrings.json +++ b/src/main/resources/sneckomodResources/localization/kor/PotionStrings.json @@ -1,32 +1,32 @@ -{ - "sneckomod:DiceRollPotion": { - "NAME": "병 속의 카드", - "DESCRIPTIONS": [ - "전투에서 사용 시 #y강화된 #y다른 #y직업 카드 #b3 중 한 장을 얻는 카드 보상을 #b", - " 개 추가로 얻을 수 있습니다.", - " 개 추가로 얻을 수 있습니다." - ] - }, - "sneckomod:CheatPotion": { - "NAME": "액체화된 운", - "DESCRIPTIONS": [ - "이번 턴에 손에 있는 카드와 관계없이 #y과중 효과가 발동됩니다.", - "#b", - " 턴 동안 손에 있는 카드와 관계없이 #y과중 효과가 발동됩니다." - ] - }, - "sneckomod:MuddlingPotion": { - "NAME": "가시 돋친 에너지 음료", - "DESCRIPTIONS": [ - "비용이 가장 높은 카드가 #b", - " 장 #y뒤엉킵니다. 이 효과로 #y뒤엉킨 카드의 비용은 #b3이 되지 않습니다." - ] - }, - "sneckomod:OffclassReductionPotion": { - "NAME": "외세의 음료", - "DESCRIPTIONS": [ - "#y다른 #y직업 카드의 비용을 #b", - " 낮춥니다." - ] - } -} +{ + "sneckomod:DiceRollPotion": { + "NAME": "병 속의 카드", + "DESCRIPTIONS": [ + "전투에서 사용 시 #y강화된 #y특별 #y다른 #y직업 카드 #b3 장 중 #b1 장을 얻는 카드 보상을 #b", + " 개 추가로 얻을 수 있습니다.", + " 개 추가로 얻을 수 있습니다." + ] + }, + "sneckomod:CheatPotion": { + "NAME": "액체화된 운", + "DESCRIPTIONS": [ + "이번 턴에 손에 있는 카드와 관계없이 #y과중 효과가 발동됩니다.", + "#b", + " 턴 동안 손에 있는 카드와 관계없이 #y과중 효과가 발동됩니다." + ] + }, + "sneckomod:MuddlingPotion": { + "NAME": "가시 돋친 에너지 음료", + "DESCRIPTIONS": [ + "비용이 가장 높은 카드가 #b", + " 장 #y뒤엉킵니다. 이 효과로 #y뒤엉킨 카드의 비용은 #b3 이 되지 않습니다." + ] + }, + "sneckomod:OffclassReductionPotion": { + "NAME": "외세의 음료", + "DESCRIPTIONS": [ + "#y다른 #y직업 카드의 비용을 #b", + " 낮춥니다." + ] + } +} diff --git a/src/main/resources/sneckomodResources/localization/kor/PowerStrings.json b/src/main/resources/sneckomodResources/localization/kor/PowerStrings.json index bbf31c13cb..362b42928b 100644 --- a/src/main/resources/sneckomodResources/localization/kor/PowerStrings.json +++ b/src/main/resources/sneckomodResources/localization/kor/PowerStrings.json @@ -1,194 +1,193 @@ -{ - "sneckomod:BlunderGuardPower": { - "NAME": "해일", - "DESCRIPTIONS": [ - "#y과중 효과가 발동할 때 #y방어도를 #b", - " 얻습니다.", - " 얻습니다." - ] - }, - "sneckomod:CheapStockPower": { - "NAME": "값싼 재고품", - "DESCRIPTIONS": [ - "내 턴 시작 시 손에 있는 카드 중 비용이 가장 높은 카드를 #y뒤엉키게 합니다.", - "내 턴 시작 시 손에 있는 카드 중 비용이 가장 높은 카드를 #b", - " 장 #y뒤엉키게 합니다." - ] - }, - "sneckomod:CheatPower": { - "NAME": "천운", - "DESCRIPTIONS": [ - "이번 턴에 손에 있는 카드 장수와 관계없이 #y과중 효과가 발동합니다.", - "다음 #b", - " 턴 동안 손에 있는 카드 장수와 관계없이 #y과중 효과가 발동합니다." - ] - }, - "sneckomod:MuddleDrawnCardsPower": { - "NAME": "뽑는 카드 뒤엉킴", - "DESCRIPTIONS": [ - "다음으로 뽑은 카드가 #y뒤엉킵니다.", - "이번 턴 동안 다음 #b", - " 번까지 뽑은 카드가 #y뒤엉킵니다. (", - " 지속됩니다.)" - ] - }, - "sneckomod:MudshieldPower": { - "NAME": "진흙 방패", - "DESCRIPTIONS": [ - "카드를 #y뒤엉키게 할 때마다 #y방어도를 #b", - " 얻습니다." - ] - }, - "sneckomod:OverwhelmingPresencePower": { - "NAME": "위압", - "DESCRIPTIONS": [ - "매 턴 처음으로 덱이 섞이면 [E] 를 얻고 카드를 #b1 장 뽑습니다.", - "매 턴 처음으로 덱이 섞이면 ", - " [E] 를 얻고 카드를 #b", - " 장 뽑습니다." - ] - }, - "sneckomod:SerpentsNestPower": { - "NAME": "뱀 둥지", - "DESCRIPTIONS": [ - "#y파워 카드를 사용할 때마다 적 전체에게 피해를 #b1 줍니다.", - "#y파워 카드를 사용할 때마다 적 전체에게 피해를 #b", - " 줍니다." - ] - }, - "sneckomod:SerpentMindPower": { - "NAME": "외세의 형상", - "DESCRIPTIONS": [ - "내 턴 종료 시 이번 턴에 사용한 무색, 직업 카드 종류 하나당 #y힘을 #b", - " 얻습니다.", - " 얻습니다." - ] - }, - "sneckomod:SnakeEyesPower": { - "NAME": "뱀의 눈", - "DESCRIPTIONS": [ - "이번 턴에 다음으로 사용하는 #y다른 #y직업 카드 #b1 장이 2번 사용됩니다.", - "이번 턴에 다음으로 사용하는 #y다른 #y직업 카드 #b", - " 장이 2번 사용됩니다." - ] - }, - "sneckomod:UnendingSupplyPower": { - "NAME": "영원한 공급", - "DESCRIPTIONS": [ - "내 턴 시작 시 무작위 #y다른 #y직업 카드의 #y메아리를 #b", - "내 턴 시작 시 무작위 #y다른 #y직업 카드의 #y메아리를 얻습니다.", - " 장 얻습니다." - ] - }, - "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": "무제한 도박", - "DESCRIPTIONS": [ - "내 턴 시작 시 #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", - " 잃습니다." - ] - } - } +{ + "sneckomod:BlunderGuardPower": { + "NAME": "해일", + "DESCRIPTIONS": [ + "#y과중 효과가 발동할 때 #y방어도를 #b", + " 얻습니다.", + " 얻습니다." + ] + }, + "sneckomod:CheapStockPower": { + "NAME": "값싼 재고품", + "DESCRIPTIONS": [ + "내 턴 시작 시 손에 있는 카드 중 비용이 가장 높은 카드를 #y뒤엉키게 합니다.", + "내 턴 시작 시 손에 있는 카드 중 비용이 가장 높은 카드를 #b", + " 장 #y뒤엉키게 합니다." + ] + }, + "sneckomod:CheatPower": { + "NAME": "천운", + "DESCRIPTIONS": [ + "이번 턴에 손에 있는 카드 장수와 관계없이 #y과중 효과가 발동합니다.", + "다음 #b", + " 턴 동안 손에 있는 카드 장수와 관계없이 #y과중 효과가 발동합니다." + ] + }, + "sneckomod:MuddleDrawnCardsPower": { + "NAME": "뽑는 카드 뒤엉킴", + "DESCRIPTIONS": [ + "다음 뽑는 카드가 #y뒤엉킵니다.", + "다음 #b", + " 장 뽑는 뽑는 카드가 #y뒤엉킵니다. ( #b", + " 장 남음)" + ] + }, + "sneckomod:MudshieldPower": { + "NAME": "진흙 방패", + "DESCRIPTIONS": [ + "카드가 #y뒤엉킬 때마다 #y방어도를 #b", + " 얻습니다." + ] + }, + "sneckomod:OverwhelmingPresencePower": { + "NAME": "위압", + "DESCRIPTIONS": [ + "매 턴 처음으로 #y다른 #y직업 카드를 사용하면 카드를 #b1 장 뽑습니다.", + "매 턴 처음으로 #y다른 #y직업 카드를 사용하면 카드를 #b", + " 장 뽑습니다." + ] + }, + "sneckomod:SerpentsNestPower": { + "NAME": "뱀 둥지", + "DESCRIPTIONS": [ + "#y파워 카드를 사용할 때마다 적 전체에게 피해를 #b1 줍니다.", + "#y파워 카드를 사용할 때마다 적 전체에게 피해를 #b", + " 줍니다." + ] + }, + "sneckomod:SerpentMindPower": { + "NAME": "외세의 형상", + "DESCRIPTIONS": [ + "내 턴 종료 시 이번 턴에 사용한 무색, 직업 카드 종류 하나당 #y힘을 #b", + " 얻습니다.", + " 얻습니다." + ] + }, + "sneckomod:SnakeEyesPower": { + "NAME": "뱀의 눈", + "DESCRIPTIONS": [ + "이번 턴에 다음으로 사용하는 #y다른 #y직업 카드 #b1 장이 #b2 번 사용됩니다.", + "이번 턴에 다음으로 사용하는 #y다른 #y직업 카드 #b", + " 장이 #b2 번 사용됩니다." + ] + }, + "sneckomod:UnendingSupplyPower": { + "NAME": "영원한 공급", + "DESCRIPTIONS": [ + "내 턴 시작 시 무작위 #y다른 #y직업 카드의 #y메아리를 #b", + "내 턴 시작 시 무작위 #y다른 #y직업 카드의 #y메아리를 얻습니다.", + " 장 얻습니다." + ] + }, + "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: 번역하지 마세요." + + ] + }, + "sneckomod:UnlimitedRollsPower": { + "NAME": "무제한 도박", + "DESCRIPTIONS": [ + "내 턴 시작 시 #y소멸하는 #y영혼의 #y도박+를 얻습니다." + ] + }, + "sneckomod:Transmogrifying": { + "NAME": "유물 변환", + "DESCRIPTIONS": [ + " 유물이 ", + " 유물으로 변환됐습니다.", + "NOTE FOR LOC: 번역하지 마세요." + ] + }, + "sneckomod:ToxicPersonalityPower": { + "NAME": "Toxic Personality", + "DESCRIPTIONS": [ + "Whenever you apply a debuff to an enemy, apply #b", + " #yVenom [REMOVE_SPACE].", + "NOTE FOR LOC: 번역하지 마세요." + ] + }, + "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파워 카드를 사용할 때마다 #y에너지를 #b", + " 얻습니다.", + " 얻습니다." + ] + }, + "sneckomod:BigGunsStrengthPower": { + "NAME": "신의 한 수", + "DESCRIPTIONS": [ + "비용이 #b3 이상인 카드를 사용할 때마다 #y힘을 #b", + " 얻습니다.", + " 얻습니다." + ] + }, + "sneckomod:BigGunsBlockPower": { + "NAME": "어쩌다 수호", + "DESCRIPTIONS": [ + "비용이 #b3 이상인 카드를 사용할 때마다 #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", + " 장 #y소멸시킵니다." + ] + }, + + "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 3c4c1c200c..5621b1eaea 100644 --- a/src/main/resources/sneckomodResources/localization/kor/RelicStrings.json +++ b/src/main/resources/sneckomodResources/localization/kor/RelicStrings.json @@ -1,120 +1,123 @@ -{ - "sneckomod:SneckoSoul": { - "NAME": "스네코의 영혼", - "FLAVOR": "0...3...2...2...1", - "DESCRIPTIONS": [ - "매 전투 시작 시 #y영혼의 #y도박을 얻습니다." - ] - }, - "sneckomod:SuperSneckoSoul": { - "NAME": "강력한 스네코의 영혼", - "FLAVOR": "3120231321230320", - "DESCRIPTIONS": [ - "[#407B93]스네코의 [#407B93]영혼과[] 교체합니다. NL 매 턴 #y영혼의 #y도박을 얻습니다. NL 처음 턴이 지나고 매 턴 카드를 1장 더 뽑고 그 카드를 #ysneckomod:뒤엉키게 합니다." - ] - }, - "sneckomod:CleanMud": { - "NAME": "뱀 피리", - "FLAVOR": "스스스스슷...", - "DESCRIPTIONS": [ - "#ysneckomod:뒤엉킨 카드들의 비용이 #b3 이 되지 않습니다." - ] - }, - "sneckomod:ConfusingCodex": { - "NAME": "스네코 반지", - "FLAVOR": "목요일까지 해독하고 판독해야 하는데 어렵습니다.", - "DESCRIPTIONS": [ - "#ysneckomod:초과 효과가 발동한 카드를 3장 사용할 때마다 무작위 적에게 #y약화와 #y취약을 #b1 부여합니다." - ] - }, - "sneckomod:CrystallizedMud": { - "NAME": "유혹하는 펜던트", - "FLAVOR": "뭔가 눈길이 갑니다.", - "DESCRIPTIONS": [ - "내 턴 시작 시 [E] 를 얻습니다. #ysneckomod:뒤엉킨 카드의 비용이 #b0 이 되지 않습니다." - ] - }, - "sneckomod:LoadedDie": { - "NAME": "사기꾼 주사위", - "FLAVOR": "속임수로 가득 차 있습니다.", - "DESCRIPTIONS": [ - "카드를 #ysneckomod:뒤엉키게 할 때마다 #y방어도를 #b1 얻습니다." - ] - }, - "sneckomod:RareBoosterPack": { - "NAME": "희귀 카드 상자", - "FLAVOR": "새것이나 다름없습니다.", - "DESCRIPTIONS": [ - "획득 시 희귀 #ysneckomod:다른_직업 카드를 얻습니다." - ] - }, - "sneckomod:SleevedAce": { - "NAME": "소매 속 에이스", - "FLAVOR": "우리는 모두 에이스입니다.", - "DESCRIPTIONS": [ - "매 전투 시작 시 #y표시해 #y둔 #y카드를 얻습니다." - ] - }, - "sneckomod:UnknownEgg": { - "NAME": "Unknown 알", - "FLAVOR": "무엇이 태어날까요? 1000 골드를 내고 확인하세요.", - "DESCRIPTIONS": [ - "덱에 #ysneckomod:다른_직업 카드를 추가할 때마다 그 카드를 #y강화합니다. NL 획득 시 무작위 #ysneckomod:다른_직업 카드를 2장 #y강화합니다." - ] - }, - "sneckomod:SuperSneckoEye": { - "NAME": "초강력 스네코의 눈", - "FLAVOR": "0121012", - "DESCRIPTIONS": [ - "#y스네코의 #y눈과 교체합니다. 내 턴 시작 시 카드를 #b4 장 더 뽑습니다. 모든 전투를 #y혼란 상태로 시작합니다." - ] - }, - "sneckomod:SneckoTalon": { - "NAME": "레트로메이션의 우상", - "FLAVOR": "줄여서 레토의 우상이라고 불립니다.", - "DESCRIPTIONS": [ - "내 턴 시작 시 이번 턴에만 손에 있는 비용이 #b1 이상인 카드의 비용을 #b1 낮춥니다." - ] - }, - "sneckomod:BlankCard": { - "NAME": "비어있는 카드", - "FLAVOR": "흉내쟁이 카드입니다.", - "DESCRIPTIONS": [ - "매 전투 시작 시 덱에서 무작위로 선택된 카드의 #ygremlin:메아리를 얻습니다. 그 카드의 비용은 #b0 이 됩니다." - ] - }, - "sneckomod:D8": { - "NAME": "신비한 8면체", - "FLAVOR": "한쪽으로 무게가 몰려있는 것 같습니다.", - "DESCRIPTIONS": [ - "획득 시 #ysneckomod:과중 카드를 선택합니다. 그 카드를 사용하면 #y방어도를 #b4 추가로 얻고 손에 있는 카드 장수와 관계없이 #y과중 효과가 발동합니다.", - "카드를 선택하세요: ", - "", - " 카드를 사용하면 손에 있는 카드 장수와 관계없이 항상 #y과중 효과가 발동합니다." - ] - }, - "sneckomod:BabySnecko": { - "NAME": "어린 스네코", - "FLAVOR": "혼란스러울 정도로 사랑스럽습니다.", - "DESCRIPTIONS": [ - "내 턴 시작 시 무작위 적에게 피해를 #b9 주고 무작위 카드를 2장 #ysneckomod:뒤엉키게 합니다. 비용이 #b0, #bX 인 카드, #y사용불가 카드는 이 효과로 #y뒤엉키지 않습니다." - ] - }, - "sneckomod:SneckoCommon": { - "NAME": "승인 봉인", - "FLAVOR": "아이언클래드다. 이건 첨탑에서 내가 가장 좋아하는 유물이지. -상인의 광고 팸플릿", - "DESCRIPTIONS": [ - "획득 시 특별 #ysneckomod:다른_직업 파워 카드 #b5 장 중 #b1 장을 선택해 얻습니다." - ] - }, - "sneckomod:SneckoBoss": { - "NAME": "행운의 편자", - "FLAVOR": "행운은 스스로 쟁취하는 것입니다.", - "DESCRIPTIONS": [ - "획득 시 #y캐릭터 카드 #b3 종류 중 #b1 가지 고릅니다. 고른 #y캐릭터 카드의 #y강화된 특별 카드를 #b3 장, 희귀 카드를 #b2 장 선택해 덱에 추가합니다. 모든 전투에서 고른 캐릭터 카드 보상을 추가로 얻을 수 있습니다.", - "획득 시 ", - "의 #y강화된 특별 카드를 #b3 장, 희귀 카드를 #b2 장 얻습니다. 모든 전투에서 ", - " 카드 보상을 추가로 얻을 수 있습니다." - ] - } -} +{ + "sneckomod:SneckoSoul": { + "NAME": "스네코의 영혼", + "FLAVOR": "0...3...2...2...1", + "DESCRIPTIONS": [ + "매 전투 시작 시 #y영혼의 #y도박을 얻습니다." + ] + }, + "sneckomod:SuperSneckoSoul": { + "NAME": "강력한 스네코의 영혼", + "FLAVOR": "3120231321230320", + "DESCRIPTIONS": [ + "[#407B93]스네코의[] [#407B93]영혼과[] 교체합니다. NL 매 턴 #y영혼의 #y도박을 얻습니다. NL 처음 턴이 지나고 매 턴 카드를 1장 더 뽑고 그 카드를 #ysneckomod:뒤엉키게 합니다." + ] + }, + "sneckomod:CleanMud": { + "NAME": "뱀 피리", + "FLAVOR": "스스스스슷...", + "DESCRIPTIONS": [ + "#ysneckomod:뒤엉킨 카드들의 비용은 #b3 이 되지 않습니다." + ] + }, + "sneckomod:ConfusingCodex": { + "NAME": "스네코 반지", + "FLAVOR": "목요일까지 해독하고 판독해야 하는데 어렵습니다.", + "DESCRIPTIONS": [ + "#ysneckomod:과중 효과가 발동한 카드를 #b", + " 장 사용할 때마다 무작위 적에게 #y약화와 #y취약을 #b1 부여합니다." + ] + }, + "sneckomod:CrystallizedMud": { + "NAME": "유혹하는 펜던트", + "FLAVOR": "뭔가 눈길이 갑니다.", + "DESCRIPTIONS": [ + "내 턴 시작 시 [E] 를 얻습니다. #ysneckomod:뒤엉킨 카드의 비용은 #b0 이 되지 않습니다." + ] + }, + "sneckomod:LoadedDie": { + "NAME": "사기꾼 주사위", + "FLAVOR": "속임수로 가득 차 있습니다.", + "DESCRIPTIONS": [ + "#ysneckomod:뒤엉킬 때마다 #y방어도를 #b", + " 얻습니다." + ] + }, + "sneckomod:RareBoosterPack": { + "NAME": "희귀 카드 상자", + "FLAVOR": "새것이나 다름없습니다.", + "DESCRIPTIONS": [ + "획득 시 희귀 #ysneckomod:다른 #y직업 카드를 얻습니다." + ] + }, + "sneckomod:SleevedAce": { + "NAME": "소매 속 에이스", + "FLAVOR": "우리는 모두 에이스입니다.", + "DESCRIPTIONS": [ + "매 전투 시작 시 #y표시해 #y둔 #y카드를 얻습니다." + ] + }, + "sneckomod:UnknownEgg": { + "NAME": "Unknown 알", + "FLAVOR": "무엇이 태어날까요? 1000 골드를 내고 확인하세요.", + "DESCRIPTIONS": [ + "덱에 #ysneckomod:다른 #y직업 카드를 추가할 때마다 그 카드를 #y강화합니다. NL 획득 시 무작위 #ysneckomod:다른 #y직업 카드를 2장 #y강화합니다." + ] + }, + "sneckomod:SuperSneckoEye": { + "NAME": "초강력 스네코의 눈", + "FLAVOR": "0121012", + "DESCRIPTIONS": [ + "#y스네코의 #y눈과 교체합니다. 내 턴 시작 시 카드를 #b4 장 더 뽑습니다. 모든 전투를 #y혼란 상태로 시작합니다." + ] + }, + "sneckomod:SneckoTalon": { + "NAME": "레트로메이션의 우상", + "FLAVOR": "줄여서 레토의 우상이라고 불립니다.", + "DESCRIPTIONS": [ + "매 전투 시작 시 무작위 카드 1장의 비용을 낮춥니다. 그 카드의 비용은 사용하기 전까지 #b1 입니다." + ] + }, + "sneckomod:BlankCard": { + "NAME": "비어있는 카드", + "FLAVOR": "흉내쟁이 카드입니다.", + "DESCRIPTIONS": [ + "매 전투 시작 시 덱에서 무작위로 선택된 카드의 #ygremlin:메아리를 얻습니다. #y저주와 #y상태이상은 선택되지 않습니다. 그 카드의 비용은 #b0 이 됩니다." + ] + }, + "sneckomod:D8": { + "NAME": "신비한 8면체", + "FLAVOR": "한쪽으로 무게가 몰려있는 것 같습니다.", + "DESCRIPTIONS": [ + "획득 시 #ysneckomod:과중 카드를 선택합니다. 그 카드를 사용하면 #y방어도를 #b4 추가로 얻고 손에 있는 카드 장수와 관계없이 #y과중 효과가 발동합니다.", + "카드를 선택하세요: ", + "", + " 카드를 사용하면 손에 있는 카드 장수와 관계없이 항상 #y과중 효과가 발동합니다.", + "이 유물로 선택한 카드가 덱에서 #r제거되어 유물이 비활성화됐습니다." + ] + }, + "sneckomod:BabySnecko": { + "NAME": "어린 스네코", + "FLAVOR": "혼란스러울 정도로 사랑스럽습니다.", + "DESCRIPTIONS": [ + "내 턴 시작 시 무작위 적에게 피해를 #b9 주고 무작위 카드를 2장 #ysneckomod:뒤엉키게 합니다. 비용이 #b0, #bX 인 카드, #y사용불가 카드는 이 효과로 #y뒤엉키지 않습니다." + ] + }, + "sneckomod:SneckoCommon": { + "NAME": "승인 봉인", + "FLAVOR": "아이언클래드다. 이건 첨탑에서 내가 가장 좋아하는 유물이지. -상인의 광고 팸플릿", + "DESCRIPTIONS": [ + "획득 시 특별 #ysneckomod:다른 #y직업 #y파워 카드 #b5 장 중 #b1 장을 선택해 얻습니다." + ] + }, + "sneckomod:SneckoBoss": { + "NAME": "행운의 편자", + "FLAVOR": "행운은 스스로 쟁취하는 것입니다.", + "DESCRIPTIONS": [ + "획득 시 #y캐릭터 카드 #b3 종류 중 #b1 가지 선택합니다. 선택한 #y캐릭터 카드의 #y강화된 특별 카드를 #b3 장, 희귀 카드를 #b2 장 선택해 덱에 추가합니다. 모든 전투에서 선택한 캐릭터 카드 보상을 추가로 얻을 수 있습니다.", + "획득 시 ", + "의 #y강화된 특별 카드를 #b3 장, 희귀 카드를 #b2 장 얻습니다. 모든 전투에서 ", + " 카드 보상을 추가로 얻을 수 있습니다." + ] + } +} diff --git a/src/main/resources/sneckomodResources/localization/kor/RunModStrings.json b/src/main/resources/sneckomodResources/localization/kor/RunModStrings.json index 9e26dfeeb6..22fdca1b26 100644 --- a/src/main/resources/sneckomodResources/localization/kor/RunModStrings.json +++ b/src/main/resources/sneckomodResources/localization/kor/RunModStrings.json @@ -1 +1 @@ -{} \ No newline at end of file +{} \ No newline at end of file diff --git a/src/main/resources/sneckomodResources/localization/kor/UIStrings.json b/src/main/resources/sneckomodResources/localization/kor/UIStrings.json index 0060a16b76..b5c7d180a6 100644 --- a/src/main/resources/sneckomodResources/localization/kor/UIStrings.json +++ b/src/main/resources/sneckomodResources/localization/kor/UIStrings.json @@ -1,86 +1,86 @@ -{ - "sneckomod:Unknown": { - "TEXT": [ - "Unknown", - " 강화된 ", - "전투 시작 시 이 Unknown 카드는 해당 조건의 무작위 카드로 변합니다.", - " NL 선택한 캐릭터 카드:", - "전투 시작 시 해당 조건의 무작위 모든 직업 카드로 변합니다.", - "전투 시작 시 해당 조건의 무작위 다른 직업 카드로 변합니다." - ] - }, - "sneckomod:UnknownNames": { - "TEXT": [ - "Unknown" - ] - }, - "sneckomod:UnknownClass": { - "TEXT": [ - "???", - "*Unknown ", - " 카드.", - "캐릭터", - "", - "이 문구는 절대 볼 수 없습니다. Vex에게 제보하세요", - "강화된 " - ] - }, - "sneckomod:UpgradedUnknownReward": { - "TEXT": [ - "덱에 Unknown+ 카드를 추가", - "카드를 선택하세요" - ] - }, - "sneckomod:FreeRetainMod": { - "TEXT": [ - "보존. NL " - ] - }, - "sneckomod:ExhaustMod": { - "TEXT": [ - " NL 소멸." - ] - }, - "sneckomod:ChallengeMode": { - "TEXT": [ - "도전 모드 - 태초의 스네코", - "모든 직업 카드에 선물을 얻을 수 있습니다. 스네코 전문가라면 추천합니다." - ] - }, - "sneckomod:LockInBonfireOptions": { - "TEXT": [ - "식별", - "Unknown 카드를 영구적인 카드로 고정합니다.", - "Unknown 카드가 필요합니다.", - "선택한 카드는 덱에 추가되고 해당 Unknown 카드는 제거됩니다.", - "[자유 행동] Unknown 카드를 영구적인 카드로 고정합니다." - ] - }, - "sneckomod:CommonAttackReward": { - "TEXT": [ - "덱에 다른 직업 카드를 추가", - "카드를 선택하십시오." - ] - }, - "sneckomod:DiceRollPotionReward": { - "TEXT": [ - "덱에 강화된 카드를 추가", - "카드를 선택하십시오." - ] - }, - "sneckomod:ColorfulPowersCardReward": { - "TEXT": [ - "덱에 강화된 파워 카드를 추가.", - "카드를 선택하십시오." - ] - }, - "sneckomod:AtGameStart": { - "TEXT": [ - "", - " 카드", - "이번 도전에서 ", - "의 카드에 선물이 추가됩니다.", - "선택하십시오." - ] - } -} +{ + "sneckomod:Unknown": { + "TEXT": [ + "Unknown", + " 강화된 ", + "전투 시작 시 이 Unknown 카드는 해당 조건의 무작위 카드로 변합니다.", + " NL 선택한 캐릭터 카드:", + "전투 시작 시 해당 조건의 무작위 모든 직업 카드로 변합니다.", + "전투 시작 시 해당 조건의 무작위 다른 직업 카드로 변합니다." + ] + }, + "sneckomod:UnknownNames": { + "TEXT": [ + "Unknown" + ] + }, + "sneckomod:UnknownClass": { + "TEXT": [ + "???", + "*Unknown ", + " 카드.", + "캐릭터", + "", + "이 문구는 절대 볼 수 없습니다. Vex에게 제보하세요.", + "강화된 " + ] + }, + "sneckomod:UpgradedUnknownReward": { + "TEXT": [ + "덱에 Unknown+ 카드를 추가", + "카드를 선택하십시오." + ] + }, + "sneckomod:FreeRetainMod": { + "TEXT": [ + "보존. NL " + ] + }, + "sneckomod:ExhaustMod": { + "TEXT": [ + " NL 소멸." + ] + }, + "sneckomod:ChallengeMode": { + "TEXT": [ + "대체 모드 - 태초의 스네코", + "모든 직업 카드 선물을 얻을 수 있습니다. 극한의 무작위를 즐길 수 있으며, 극한의 혼돈을 이겨내고 싶다면 추천합니다." + ] + }, + "sneckomod:LockInBonfireOptions": { + "TEXT": [ + "식별", + "Unknown 카드를 영구적인 카드로 고정합니다.", + "Unknown 카드가 필요합니다.", + "선택한 카드는 덱에 추가되고 해당 Unknown 카드는 제거됩니다.", + "[자유 행동] Unknown 카드를 영구적인 카드로 고정합니다." + ] + }, + "sneckomod:CommonAttackReward": { + "TEXT": [ + "덱에 다른 직업 카드를 추가", + "카드를 선택하십시오." + ] + }, + "sneckomod:DiceRollPotionReward": { + "TEXT": [ + "덱에 강화된 카드를 추가", + "카드를 선택하십시오." + ] + }, + "sneckomod:ColorfulPowersCardReward": { + "TEXT": [ + "덱에 강화된 파워 카드를 추가", + "카드를 선택하십시오." + ] + }, + "sneckomod:AtGameStart": { + "TEXT": [ + "", + " 카드", + "이번 도전에서 ", + "의 카드 선물이 추가됩니다.", + "선택하십시오." + ] + } +} diff --git a/src/main/resources/sneckomodResources/localization/rus/CardStrings.json b/src/main/resources/sneckomodResources/localization/rus/CardStrings.json index df8afd085b..ee65e8a503 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 a5ffbd1c7a..b218e151a2 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 0ac4d24a97..ece7cccf52 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 e83757ca5c..580641cf34 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 1847a120a5..8b627ed0a1 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 8104af355d..5309d82264 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 c370da5ce7..bc79f64a53 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 0000000000..105fa7c6c2 --- /dev/null +++ b/src/main/resources/sneckomodResources/localization/spa/CardStrings.json @@ -0,0 +1,597 @@ +{ + "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.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] + }, + "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.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] + }, + "sneckomod:IronFang": { + "NAME": "Colmillo de Hierro", + "DESCRIPTION": "Haz !D! de daño y aplica !M! 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": "Etérea. NL La primera vez que juegues una carta sneckomod:Ajena cada turno, roba una carta.", + "UPGRADE_DESCRIPTION": "La primera vez que juegues una carta sneckomod:Ajena cada turno, roba una 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 al azar." + }, + "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 Roba !M! carta y sneckomod:Confundela.", + "UPGRADE_DESCRIPTION": "Haz !D! de daño. NL Roba !M! cartas y sneckomod:Confundelas." + }, + "sneckomod:QuickMove": { + "NAME": "Movimiento Rápido", + "DESCRIPTION": "Obtén !B! de Bloqueo. NL sneckomod:Exceso: Aplica !M! 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.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] + }, + "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.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] + }, + "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.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] + }, + "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.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] + }, + "sneckomod:TailWhip": { + "NAME": "Latigazo de Cola", + "DESCRIPTION": "Haz !D! de daño. NL sneckomod:Exceso: Aplica !M! 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.", + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] + }, + "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.", + "EXTENDED_DESCRIPTION": [ + "NOTE FOR LOC: You can just copy paste whatever this tls as for all of these removed cards." + ] + }, + "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! de 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! de 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! de Bloqueo. NL Obtiene Bloqueo adicional igual al coste total en [E] de tu mano.", + "UPGRADE_DESCRIPTION": "Gana !B! de 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! de Bloqueo. NL Añade un *Esconderse a tu mano. NL Agota.", + "UPGRADE_DESCRIPTION": "Gana !B! de 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! de 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! de Bloqueo. NL Mueve !M! cartas sneckomod:Ajenas aleatorias de tu mazo en tu mano. NL sneckomod:Regalo: Común.", + "DESCRIPTION_BATTLE": "Gana !B! de 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! de 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." + }, + "sneckomod:Lacerate": { + "NAME": "Lacerar", + "DESCRIPTION": "Aplica !D! sneckomod:Tóxico a TODOS los enemigos. NL Gana una *Nube *Paralizante. NL Agota.", + "UPGRADE_DESCRIPTION": "Aplica !D! sneckomod:Tóxico a TODOS los enemigos. NL Gana una *Nube *Paralizante+. NL Agota." + }, + "sneckomod:SerpentineSleuth": { + "NAME": "Sabueso Serpentino", + "DESCRIPTION": "Etérea. NL Cuando juegues un Poder, gana [E]. NL sneckomod:Regalo: Poder Raro.", + "DESCRIPTION_BATTLE": "Etérea. NL Cuando juegues un Poder, gana [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 0000000000..7bc18fe564 --- /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 0000000000..a160483c27 --- /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 0000000000..d4e10f67ac --- /dev/null +++ b/src/main/resources/sneckomodResources/localization/spa/KeywordStrings.json @@ -0,0 +1,82 @@ +[ + { + "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", + "confundela" + ], + "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." + } +] \ No newline at end of file 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 0000000000..9e26dfeeb6 --- /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 0000000000..9e26dfeeb6 --- /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 0000000000..a72e4ca864 --- /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 0000000000..c4c57f7d00 --- /dev/null +++ b/src/main/resources/sneckomodResources/localization/spa/PowerStrings.json @@ -0,0 +1,193 @@ +{ + "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 juegues una carta #yAjena cada turno, roba #b1 carta.", + "La primera vez que juegues una carta #yAjena cada turno, 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 al azar.", + " de #yTóxico a un enemigo al azar." + ] + }, + "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 0000000000..ce0486bebf --- /dev/null +++ b/src/main/resources/sneckomodResources/localization/spa/RelicStrings.json @@ -0,0 +1,123 @@ +{ + "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 #b", + " efectos de #ysneckomod:Exceso, aplica #b1 #yDébil y #yVulnerable a un enemigo al azar." + ] + }, + "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 #b", + " 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.", + "La carta adjunta a esta reliquia ha sido #rremovida de tu mazo, la reliquia ya no funciona." + ] + }, + "sneckomod:BabySnecko": { + "NAME": "Serpentija Joven", + "FLAVOR": "Desconcertantemente adorable.", + "DESCRIPTIONS": [ + "Inflige #b9 de daño a un enemigo al azar 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 0000000000..9e26dfeeb6 --- /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 0000000000..a57078d1fc --- /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": [ + "Retener. 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 a9f9deb0b3..77f4d49c62 100644 --- a/src/main/resources/sneckomodResources/localization/zhs/CardStrings.json +++ b/src/main/resources/sneckomodResources/localization/zhs/CardStrings.json @@ -1,16 +1,16 @@ { "sneckomod:Blunderbus": { "NAME": "火枪乱射", - "DESCRIPTION": "对所有敌人造成 !D! 点伤害。 NL 手牌中每有 1 张3+耗能牌重复 1 次。" + "DESCRIPTION": "对所有敌人造成 !D! 点伤害。 NL 手牌中每有 1 张 3+ 耗能牌重复 1 次。" }, "sneckomod:Tsunami": { "NAME": "巨浪", - "DESCRIPTION": "sneckomod:溢出 触发额外获得 !M! 点 格挡 。" + "DESCRIPTION": "sneckomod:溢出 触发 时 NL 获得 !M! 点 格挡 。" }, "sneckomod:CheapStock": { "NAME": "廉价存货", - "DESCRIPTION": "回合开始时, sneckomod:混淆 手牌中最高耗能的 1 张牌。", - "UPGRADE_DESCRIPTION": "回合开始时, sneckomod:混淆 手牌中最高耗能的 !M! 张牌。" + "DESCRIPTION": "回合开始时 NL sneckomod:混淆 手牌中最高耗能的 1 张牌。", + "UPGRADE_DESCRIPTION": "回合开始时 NL sneckomod:混淆 手牌中最高耗能的 !M! 张牌。" }, "sneckomod:Cheat": { "NAME": "纯粹的幸运?", @@ -35,7 +35,7 @@ }, "sneckomod:DefensiveFlair": { "NAME": "防御才华", - "DESCRIPTION": "获得 !B! 点 格挡 。 NL 手牌每有 1 张 sneckomod:异色 牌增加获得格挡 !M! 点。 NL sneckomod:赠礼 :罕见牌。", + "DESCRIPTION": "获得 !B! 点 格挡 。 NL 手牌每有 1 张 sneckomod:异色 牌 增加获得格挡 !M! 点。 NL sneckomod:赠礼 :罕见牌。", "DESCRIPTION_BATTLE": "获得 !B! 点 格挡 。 NL 手牌中每有 1 张 sneckomod:异色 牌增加获得格挡 !M! 点。" }, "sneckomod:DiceBlock": { @@ -44,7 +44,7 @@ }, "sneckomod:DiceBoulder": { "NAME": "巨型骰子", - "DESCRIPTION": "获得 !B! 点 格挡 。 NL 该牌在本场战斗中增加获得 格挡 !M! 点,增加耗能 !qqq! 点。" + "DESCRIPTION": "获得 !B! 点 格挡 。 NL 在本场战斗中,增加耗能 !qqq! 点,增加获得 格挡 !M! 点。" }, "sneckomod:DiceCrush": { "NAME": "骰子撞击", @@ -52,8 +52,8 @@ }, "sneckomod:DragonsHoard": { "NAME": "龙之秘藏", - "DESCRIPTION": "虚无 。 NL 获得 !M! 层 力量 。 NL 获得 !M! 层 敏捷 。", - "UPGRADE_DESCRIPTION": "获得 !M! 层 力量 。 NL 获得 !M! 层 敏捷 。" + "DESCRIPTION": "虚无 。 NL 获得 !M! 点 力量 。 NL 获得 !M! 点 敏捷 。", + "UPGRADE_DESCRIPTION": "获得 !M! 点 力量 。 NL 获得 !M! 点 敏捷 。" }, "sneckomod:FourOfAKind": { "NAME": "Four Of A Kind", @@ -97,22 +97,22 @@ }, "sneckomod:LuckyBreak": { "NAME": "好运降临", - "DESCRIPTION": "获得 !B! 点 格挡 。 NL 手牌中每有1张2+耗能牌,抽 !M! 张牌。" + "DESCRIPTION": "获得 !B! 点 格挡 。 NL 手牌中每有 1 张 2+耗能牌,抽 !M! 张牌。" }, "sneckomod:Nope": { "NAME": "不行", - "DESCRIPTION": "获得 !B! 点 格挡 。 NL 消耗 1 张牌。 NL 若它是某职业牌,获得 1 张随机该职业牌。", - "UPGRADE_DESCRIPTION": "获得 !B! 点 格挡 。 NL 消耗 1 张牌。 NL 若它是某职业牌,获得 1 张随机该职业牌。", + "DESCRIPTION": "获得 !B! 点 格挡 。 NL 消耗 1 张牌。 NL 获得 1 张被 消耗 牌的同色牌。 NL 状态与诅咒不会触发。", + "UPGRADE_DESCRIPTION": "获得 !B! 点 格挡 。 NL 消耗 1 张牌。 NL 获得 1 张被 消耗 牌的同色牌。 NL 状态与诅咒不会触发。", "EXTENDED_DESCRIPTION": [ "消耗 。" ] }, "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次。" + "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:Memorize": { "NAME": "Memorize", @@ -125,7 +125,7 @@ }, "sneckomod:MintCondition": { "NAME": "绝佳", - "DESCRIPTION": "sneckomod:溢出 :获得 !M! 层 力量 。" + "DESCRIPTION": "sneckomod:溢出 :获得 !M! 点 力量 。" }, "sneckomod:MixItUp": { "NAME": "Mix It Up!", @@ -143,27 +143,29 @@ }, "sneckomod:Mudshield": { "NAME": "泥浆屏障", - "DESCRIPTION": "每当你 sneckomod:混淆 1 张牌,获得 !M! 点 格挡 。" + "DESCRIPTION": "sneckomod:混淆 1 张牌时 NL 获得 !M! 点 格挡 。" }, "sneckomod:OverwhelmingPresence": { "NAME": "威压", - "DESCRIPTION": "回合的第 1 次洗牌时,获得 [E] 并抽 !M! 张牌。" + "DESCRIPTION": "虚无。 NL 每回合第一次打出 sneckomod:异色 牌时,抽一张牌。", + "UPGRADE_DESCRIPTION": "每回合第一次打出 sneckomod:异色 牌时,抽一张牌。" }, "sneckomod:RiskySword": { "NAME": "险刃", - "DESCRIPTION": "造成 !D! 点伤害。 NL 当本牌被 sneckomod:混淆 时,提高本牌在本场战斗中的伤害 !M! 点。" + "DESCRIPTION": "造成 !D! 点伤害。 NL 当本牌被 sneckomod:混淆 时,在本场战斗中提高本牌的伤害 !M! 点。" }, "sneckomod:PoisonParadise": { "NAME": "毒泉", - "DESCRIPTION": "sneckomod:溢出 效果额外给予随机敌人 !M! 层 sneckomod:剧毒 。" + "DESCRIPTION": "sneckomod:溢出 触发时 NL 给予随机敌人 !M! 点 sneckomod:剧毒 。" }, "sneckomod:PureSnecko": { "NAME": "变幻", - "DESCRIPTION": "抽 !M! 张牌。 NL sneckomod:混淆 这几张牌。" + "DESCRIPTION": "抽 !M! 张牌。 NL sneckomod:混淆 之。" }, "sneckomod:QuickBite": { - "NAME": "蛇耙", - "DESCRIPTION": "造成 !D! 点伤害。 NL sneckomod:混淆 手牌中最高耗能的 1 张牌。" + "NAME": "蛇削", + "DESCRIPTION": "造成 !D! 点伤害。 NL 抽 !M! 张牌。 NL sneckomod:混淆 之。", + "UPGRADE_DESCRIPTION": "造成 !D! 點傷害。 NL 抽 !M! 張牌。 NL sneckomod:混淆 這幾張牌。" }, "sneckomod:QuickMove": { "NAME": "迅捷步伐", @@ -176,7 +178,7 @@ }, "sneckomod:Restock": { "NAME": "换牌", - "DESCRIPTION": "丢弃所有手牌。 NL 抽 !M! 张牌。 NL sneckomod:混淆 全部手牌。 NL 消耗 。" + "DESCRIPTION": "丢弃所有手牌。 NL 抽 !M! 张牌。 NL sneckomod:混淆 所有手牌。 NL 消耗 。" }, "sneckomod:Rotation": { "NAME": "Rotation", @@ -193,18 +195,18 @@ }, "sneckomod:SerpentIdol": { "NAME": "蛇像", - "DESCRIPTION": "从随机 !M! 张其他职业牌牌中选择 1 张获得。 NL 本回合第 1 次打出为0耗能。 NL 消耗 。" + "DESCRIPTION": "从随机 !M! 张 异色 牌中选择 1 张获得。 NL 该牌本回合第 1 次打出为 0耗能 。 NL 消耗 。" }, "sneckomod:SerpentMind": { "NAME": "异色形态", - "DESCRIPTION": "虚无 。 NL 回合结束时,你在本回合每打出 1 种职业的牌,获得 !M! 层 力量 。 NL sneckomod:赠礼 :稀有牌。", - "UPGRADE_DESCRIPTION": "回合结束时,你在本回合每打出 1 种职业的牌,获得 !M! 层 力量 。 NL sneckomod:赠礼 :稀有牌。", - "DESCRIPTION_BATTLE": "回合结束时,你再本回合每打出 1 种职业的牌,获得 !M! 层 力量 。" + "DESCRIPTION": "虚无 。 NL 回合结束时 NL 在本回合每打出 1 色牌,获得 !M! 层 力量 。 NL sneckomod:赠礼 :稀有牌。", + "UPGRADE_DESCRIPTION": "回合结束时 NL 在本回合每打出 1 色牌,获得 !M! 层 力量 。 NL sneckomod:赠礼 :稀有牌。", + "DESCRIPTION_BATTLE": "回合结束时 NL 在本回合每打出 1 色牌,获得 !M! 层 力量 。" }, "sneckomod:SlitherThrough": { "NAME": "游蛇穿行", - "DESCRIPTION": "造成 !D! 点伤害。 NL 降低手牌中 sneckomod:异色 牌本回合下 1 次打出的耗能 !M! 点 1 次。 NL sneckomod:赠礼 :罕见牌。", - "DESCRIPTION_BATTLE": "造成 !D! 点伤害。 NL 降低手牌中 sneckomod:异色 牌本回合下 1 次打出的耗能 !M! 点 1 次。" + "DESCRIPTION": "造成 !D! 点伤害。 NL 降低手牌中 sneckomod:异色 牌本回合下 1 次打出的耗能 !M! 点。 NL sneckomod:赠礼 :罕见牌。", + "DESCRIPTION_BATTLE": "造成 !D! 点伤害。 NL 降低手牌中 sneckomod:异色 牌本回合下 1 次打出的耗能 !M! 点。" }, "sneckomod:SnakeSap": { "NAME": "Snake Sap", @@ -232,7 +234,7 @@ }, "sneckomod:SoulDraw": { "NAME": "灵魂抽取", - "DESCRIPTION": "获得随机 !M! 张其他职业牌。 NL 这 2 张牌获得 保留 。 NL 消耗 。" + "DESCRIPTION": "获得随机 !M! 张异色牌。 NL 这 2 张牌获得 保留 。 NL 消耗 。" }, "sneckomod:SoulExchange": { "NAME": "灵魂交换", @@ -248,10 +250,10 @@ }, "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 张 *小刀+ 。" + "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:TyphoonFang": { "NAME": "台风之牙", @@ -289,13 +291,13 @@ }, "sneckomod:TrashToTreasure": { "NAME": "变废为宝", - "DESCRIPTION": "获得 !B! 点 格挡 。 NL 消耗 1张牌。 NL 获得与其耗能相等的 [E] 。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "获得 !B! 点 格挡 。 NL 消耗 1张牌。 NL 获得与其耗能相等的 [E] 。" + "DESCRIPTION": "获得 !B! 点 格挡 。 NL 消耗 1 张牌。 NL 获得与其耗能相等 [E] 。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "获得 !B! 点 格挡 。 NL 消耗 1 张牌。 NL 获得与其耗能相等 [E] 。" }, "sneckomod:UnendingSupply": { "NAME": "无尽供给", - "DESCRIPTION": "回合开始时,获得随机 1 张 sneckomod:异色 牌的 gremlin:回响 。", - "UPGRADE_DESCRIPTION": "固有。 NL 回合开始时,获得随机 1 张 sneckomod:异色 牌的 gremlin:回响 。" + "DESCRIPTION": "回合开始时 NL 获得随机 1 张 sneckomod:异色 牌的 gremlin:回响 。", + "UPGRADE_DESCRIPTION": "固有。 NL 回合开始时 NL 获得随机 1 张 sneckomod:异色 牌的 gremlin:回响 。" }, "sneckomod:Unknown": { "NAME": "??? Basic", @@ -442,34 +444,34 @@ }, "sneckomod:SaveForLater": { "NAME": "保留待用", - "DESCRIPTION": "造成 !D! 点伤害。 NL 回合结束时 保留 !M! 张牌。", - "UPGRADE_DESCRIPTION": "造成 !D! 点伤害。 NL 回合结束时 保留 !M! 张牌。" + "DESCRIPTION": "造成 !D! 点伤害。 NL 回合结束时,保留 !M! 张牌。", + "UPGRADE_DESCRIPTION": "造成 !D! 点伤害。 NL 回合结束时,保留 !M! 张牌。" }, "sneckomod:PowerShot": { "NAME": "能力射击", - "DESCRIPTION": "造成 !D! 点伤害。 NL 当你打出 1 张能力牌,该牌从弃牌堆回到手牌。" + "DESCRIPTION": "造成 !D! 点伤害。 NL 当你打出 1 张能力牌,本牌从弃牌堆回到手牌。" }, "sneckomod:LilGuardian": { "NAME": "小小守护者", - "DESCRIPTION": "获得 !B! 点 格挡 。 NL 当你打出 1 张2+耗能的牌时,从你的手牌中打出该牌。" + "DESCRIPTION": "获得 !B! 点 格挡 。 NL 打出 1 张2+耗能的牌时,从你的手牌中打出本牌。" }, "sneckomod:CrystalBoomerang": { "NAME": "水晶回旋镖", - "DESCRIPTION": "从弃牌堆选择 1 张牌放入你的手牌。 NL 如果它是 sneckomod:异色 牌,获得 !B! 点 格挡 。" + "DESCRIPTION": "从弃牌堆选择 1 张牌放入你的手牌。 NL 若其 sneckomod:异色 ,获得 !B! 点 格挡 。" }, "sneckomod:ViperEssence": { "NAME": "蛇之精髓", - "DESCRIPTION": "虚无 。 NL 获得 !M! 层 力量 。" + "DESCRIPTION": "虚无 。 NL 获得 !M! 点 力量 。" }, "sneckomod:Amass": { "NAME": "积聚", - "DESCRIPTION": "获得 !B! 点 格挡。 NL 获得等同于手牌耗能之和的 格挡 。", - "UPGRADE_DESCRIPTION": "获得 !B! 点 格挡。 NL 获得等同于手牌耗能之和的 格挡 。" + "DESCRIPTION": "获得 !B! 点 格挡。 NL 获得等同于手牌耗能之和 格挡 。", + "UPGRADE_DESCRIPTION": "获得 !B! 点 格挡。 NL 获得等同于手牌耗能之和 格挡 。" }, "sneckomod:Medusa": { "NAME": "美杜莎", - "DESCRIPTION": "造成 !D! 伤害。 NL 给予 !M! 层 sneckomod:剧毒 。 NL sneckomod:赠礼 :普通负面效果牌。", - "DESCRIPTION_BATTLE": "造成 !D! 伤害。 NL 给予 !M! 层 sneckomod:剧毒 。" + "DESCRIPTION": "造成 !D! 伤害。 NL 给予 !M! 点 sneckomod:剧毒 。 NL sneckomod:赠礼 :普通负面效果牌。", + "DESCRIPTION_BATTLE": "造成 !D! 伤害。 NL 给予 !M! 点 sneckomod:剧毒 。" }, "sneckomod:Cower": { "NAME": "蜷缩", @@ -483,15 +485,15 @@ }, "sneckomod:GildedShield": { "NAME": "镀金盾牌", - "DESCRIPTION": "获得 !B! 点 格挡 。 NL sneckomod:混淆 该牌,然后回到手牌。" + "DESCRIPTION": "获得 !B! 点 格挡 。 NL sneckomod:混淆 本牌,回到手牌。" }, "sneckomod:Mesmerize": { "NAME": "催眠", - "DESCRIPTION": "所有敌人失去 !M! 层 力量 。 NL sneckomod:混淆 1 张牌。 NL 消耗 。" + "DESCRIPTION": "所有敌人失去 !M! 点 力量 。 NL sneckomod:混淆 1 张牌。 NL 消耗 。" }, "sneckomod:Serpentscale": { "NAME": "蛇鳞", - "DESCRIPTION": "造成 !D! 点伤害。 NL 获得 1 层 expansioncontent:多层护甲 。 NL sneckomod:溢出 : 转而获得 !M! 层 expansioncontent:多层护甲 。" + "DESCRIPTION": "造成 !D! 点伤害。 NL 获得 1 点 expansioncontent:多层护甲 。 NL sneckomod:溢出 : 转而获得 !M! 点 expansioncontent:多层护甲 。" }, "sneckomod:OtherworldlySlash": { "NAME": "异界斩击", @@ -505,8 +507,8 @@ }, "sneckomod:BlunderGuard": { "NAME": "枪火掩护", - "DESCRIPTION": "当你打出3+耗能牌时,获得 !qqq! 点 格挡 和 !M! 层 力量 。", - "UPGRADE_DESCRIPTION": "当你打出3+耗能牌时,获得 !qqq! 点 格挡 和 !M! 层 力量 。" + "DESCRIPTION": "打出 3+耗能 牌时 NL 获得 !qqq! 点 格挡 和 !M! 点 力量 。", + "UPGRADE_DESCRIPTION": "打出 3+耗能 牌时 NL 获得 !qqq! 点 格挡 和 !M! 点 力量 。" }, "sneckomod:WideAngle": { "NAME": "横扫", @@ -514,8 +516,8 @@ }, "sneckomod:SerpentsNest": { "NAME": "蛇巢", - "DESCRIPTION": "每当你打出 1 张能力牌,对所有敌人造成 !M! 点伤害。 NL sneckomod:赠礼 :罕见能力牌。", - "DESCRIPTION_BATTLE": "每当你打出 1 张能力牌,对所有敌人造成 !M! 点伤害。" + "DESCRIPTION": "打出 1 张能力牌时 NL 对所有敌人造成 !M! 点伤害。 NL sneckomod:赠礼 :罕见能力牌。", + "DESCRIPTION_BATTLE": "打出 1 张能力牌时 NL 对所有敌人造成 !M! 点伤害。" }, "sneckomod:Whack": { "NAME": "晨钟暮鼓", @@ -524,7 +526,7 @@ }, "sneckomod:CobraCoil": { "NAME": "眼镜蛇盘蜷", - "DESCRIPTION": "造成 !D! 点伤害。 NL 给予 !M! 层 *缠绕 。 NL sneckomod:赠礼 :稀有攻击牌。" + "DESCRIPTION": "造成 !D! 点伤害。 NL 给予 !M! 点 *缠绕 。 NL sneckomod:赠礼 :稀有攻击牌。" }, "sneckomod:Belittle": { "NAME": "看扁", @@ -538,8 +540,8 @@ }, "sneckomod:MakeshiftBlade": { "NAME": "权宜之刃", - "DESCRIPTION": "造成 !D! 点伤害。 NL 若目标敌人有至少 !M! 种负面效果,抽 !qqq! 张牌。 NL sneckomod:赠礼 :负面效果牌。", - "DESCRIPTION_BATTLE": "造成 !D! 点伤害。 NL 若目标敌人有至少 !M! 种负面效果,抽 !qqq! 张牌。" + "DESCRIPTION": "造成 !D! 点伤害。 NL 若敌人有至少 !M! 种负面效果,抽 !qqq! 张牌。 NL sneckomod:赠礼 :负面效果牌。", + "DESCRIPTION_BATTLE": "造成 !D! 点伤害。 NL 若敌人有至少 !M! 种负面效果,抽 !qqq! 张牌。" }, "sneckomod:LatchOn": { "NAME": "紧咬不放", @@ -547,12 +549,12 @@ }, "sneckomod:ComboString": { "NAME": "异色连击", - "DESCRIPTION": "造成 !D! 点伤害 X 次。 NL X 为你本回合打出的 sneckomod:异色 牌数。 NL sneckomod:赠礼 :罕见牌。", + "DESCRIPTION": "造成 !D! 点伤害 Y 次。 NL Y 为本回合打出的 sneckomod:异色 牌数。 NL sneckomod:赠礼 :罕见牌。", "EXTENDED_DESCRIPTION": [ " NL (本回合打出过 ", " 张 异色 牌。)" ], - "DESCRIPTION_BATTLE": "造成 !D! 点伤害 X 次。 X 为你本回合打出的 sneckomod:异色 牌数。" + "DESCRIPTION_BATTLE": "造成 !D! 点伤害 Y 次。 Y 为本回合打出的 sneckomod:异色 牌数。" }, "sneckomod:ThrowingCards": { "NAME": "投掷卡牌", @@ -561,17 +563,17 @@ }, "sneckomod:RoundaboutSwing": { "NAME": "回旋挥击", - "DESCRIPTION": "造成 !D! 点伤害。 NL 将 1 张手牌放到抽牌堆顶部。 NL 下回合额外抽 !M! 张牌。" + "DESCRIPTION": "造成 !D! 点伤害。 NL 将 1 张手牌放入抽牌堆顶部。 NL 下回合额外抽 !M! 张牌。" }, "sneckomod:MarkedCard": { "NAME": "记号牌", - "DESCRIPTION": "保留 。 NL sneckomod:混淆 1 张牌。 NL 不增加其耗能。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "保留 。 NL sneckomod:混淆 !M! 张牌。 NL 不增加其耗能。 NL 消耗 。" + "DESCRIPTION": "sneckomod:混淆 1 张牌。 NL 不增加其耗能。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "保留 。 NL sneckomod:混淆 1 张牌。 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] 。" + "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": "永恒之蛇", @@ -590,28 +592,25 @@ }, "sneckomod:AceOfWands": { "NAME": "五角星皇后", - "DESCRIPTION": "虚无 。 NL 每当你给予敌人 1 种负面效果时,获得 !M! 点 格挡 。 NL sneckomod:赠礼 :负面效果牌。", - "UPGRADE_DESCRIPTION": "每当你给予敌人 1 种负面效果时,获得 !M! 点 格挡 。 NL sneckomod:赠礼 :负面效果牌。" + "DESCRIPTION": "虚无 。 NL 给予敌人 1 种负面效果时 NL 获得 !M! 点 格挡 。 NL sneckomod:赠礼 :负面效果牌。", + "UPGRADE_DESCRIPTION": "给予敌人 1 种负面效果时 NL 获得 !M! 点 格挡 。 NL sneckomod:赠礼 :负面效果牌。" }, "sneckomod:FlashInThePan": { "NAME": "昙花一现", - "DESCRIPTION": "获得 !B! 点 格挡 。 NL 丢弃所有手牌。 NL 下回合开始时,抽等量的牌。" + "DESCRIPTION": "获得 !B! 点 格挡 。 NL 丢弃所有手牌。 NL 下回合开始时,抽等量牌。" }, "sneckomod:TrashCan": { "NAME": "垃圾桶", - "DESCRIPTION": "回合开始时,你可以 消耗 1 张牌。", - "UPGRADE_DESCRIPTION": "固有 。 NL 回合开始时,你可以 消耗 1 张牌。" + "DESCRIPTION": "回合结束时,你可以 消耗 1 张牌。" }, "sneckomod:Lacerate": { "NAME": "割裂", - "DESCRIPTION": "造成 !D! 点伤害。 NL 本回合当你给予目标敌人负面效果时,额外给予 !M! 层 sneckomod:剧毒 。 NL sneckomod:赠礼 : *致残毒云 。", - "DESCRIPTION_BATTLE": "造成 !D! 点伤害。 NL 本回合当你给予目标敌人负面效果时,额外给予 !M! sneckomod:剧毒 。" + "DESCRIPTION": "给予所有敌人 !M! 点 sneckomod:剧毒 。 NL 获得一张 *致残毒云 。 NL 消耗。", + "UPGRADE_DESCRIPTION": "给予所有敌人 !M! 点 sneckomod:剧毒 。 NL 获得一张 *致残毒云+ 。 NL 消耗。" }, "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] 。" + "DESCRIPTION": "虚无 。 NL 打出 1 张能力牌时 NL 获得 [E] 。 NL sneckomod:赠礼 :稀有能力牌。", + "DESCRIPTION_BATTLE": "虚无 。 NL 打出 1 张能力牌时 NL 获得 [E] 。" } } diff --git a/src/main/resources/sneckomodResources/localization/zhs/PowerStrings.json b/src/main/resources/sneckomodResources/localization/zhs/PowerStrings.json index 119c123338..e4b0eff09f 100644 --- a/src/main/resources/sneckomodResources/localization/zhs/PowerStrings.json +++ b/src/main/resources/sneckomodResources/localization/zhs/PowerStrings.json @@ -42,9 +42,8 @@ "sneckomod:OverwhelmingPresencePower": { "NAME": "威压", "DESCRIPTIONS": [ - "每回合你第 1 次洗牌,获得 [E] 并抽 #b1 张牌。", - "每回合你第 1 次洗牌,获得 ", - " 点 [E] 并抽 #b", + "每回合第一次打出 #y异色 牌时,抽 #b1 张牌。", + "每回合第一次打出 #y异色 牌时,抽 #b", " 张牌。" ] }, @@ -178,12 +177,11 @@ }, "sneckomod:TrashCanPower": { "NAME": "垃圾桶", - "DESCRIPTIONS": ["回合开始时,你可以 #y消耗 1张牌。", - "回合开始时,你可以至多 #y消耗 #b", + "DESCRIPTIONS": ["回合结束时,你可以 #y消耗 1张牌。", + "回合结束时,你可以至多 #y消耗 #b", " 张牌。" - ] - }, - + ] + }, "sneckomod:VenomDebuff": { "NAME": "剧毒", "DESCRIPTIONS": [ diff --git a/src/main/resources/sneckomodResources/localization/zhs/RelicStrings.json b/src/main/resources/sneckomodResources/localization/zhs/RelicStrings.json index b83a8e6750..7ba49bf1ea 100644 --- a/src/main/resources/sneckomodResources/localization/zhs/RelicStrings.json +++ b/src/main/resources/sneckomodResources/localization/zhs/RelicStrings.json @@ -24,7 +24,8 @@ "NAME": "异蛇戒指", "FLAVOR": "无法辨认,难以阅读,周四到期。", "DESCRIPTIONS": [ - "触发 #b3 次 #ysneckomod:溢出时,给予随机敌人 #b1 层 #y虚弱 与 #y易伤 。" + "触发 #b", + " 次 #ysneckomod:溢出 时,给予随机敌人 #b1 层 #y虚弱 与 #y易伤 。" ] }, "sneckomod:CrystallizedMud": { @@ -38,7 +39,8 @@ "NAME": "注料骰子", "FLAVOR": "灌了奶酪。", "DESCRIPTIONS": [ - "当1张牌被 #ysneckomod:混淆 时,获得 #b1 点 #y格挡 。" + "当1张牌被 #ysneckomod:混淆 时,获得 #b", + " 点 #y格挡 。" ] }, "sneckomod:RareBoosterPack": { diff --git a/src/main/resources/sneckomodResources/localization/zht/CardStrings.json b/src/main/resources/sneckomodResources/localization/zht/CardStrings.json index a1ca6ce8a5..63f0ccb428 100644 --- a/src/main/resources/sneckomodResources/localization/zht/CardStrings.json +++ b/src/main/resources/sneckomodResources/localization/zht/CardStrings.json @@ -146,8 +146,9 @@ "DESCRIPTION": "每當你 sneckomod:混淆 1 張牌,獲得 !M! 點 格擋 。" }, "sneckomod:OverwhelmingPresence": { - "NAME": "威壓", - "DESCRIPTION": "回合的第 1 次洗牌時,獲得 [E] 並抽 !M! 張牌。" + "NAME": "威压", + "DESCRIPTION": "虚无。 NL 每回合第一次打出 sneckomod:异色 牌时,抽一张牌。", + "UPGRADE_DESCRIPTION": "每回合第一次打出 sneckomod:异色 牌时,抽一张牌。" }, "sneckomod:RiskySword": { "NAME": "險刃", @@ -162,8 +163,9 @@ "DESCRIPTION": "抽 !M! 張牌。 NL sneckomod:混淆 這幾張牌。" }, "sneckomod:QuickBite": { - "NAME": "蛇耙", - "DESCRIPTION": "造成 !D! 點傷害。 NL sneckomod:混淆 手牌中最高耗能的 1 張牌。" + "NAME": "蛇削", + "DESCRIPTION": "造成 !D! 点伤害。 NL 抽 !M! 张牌。 NL sneckomod:混淆 之。", + "UPGRADE_DESCRIPTION": "造成 !D! 點傷害。 NL 抽 !M! 張牌。 NL sneckomod:混淆 這幾張牌。" }, "sneckomod:QuickMove": { "NAME": "迅捷步伐", @@ -564,9 +566,9 @@ "DESCRIPTION": "造成 !D! 點傷害。 NL 將 1 張手牌放到抽牌堆頂部。 NL 下回合額外抽 !M! 張牌。" }, "sneckomod:MarkedCard": { - "NAME": "記號牌", - "DESCRIPTION": "保留 。 NL sneckomod:混淆 1 張牌。 NL 不增加其耗能。 NL 消耗 。", - "UPGRADE_DESCRIPTION": "保留 。 NL sneckomod:混淆 !M! 張牌。 NL 不增加其耗能。 NL 消耗 。" + "NAME": "记号牌", + "DESCRIPTION": "sneckomod:混淆 1 张牌。 NL 不增加其耗能。 NL 消耗 。", + "UPGRADE_DESCRIPTION": "保留 。 NL sneckomod:混淆 1 张牌。 NL 不增加其耗能。 NL 消耗 。" }, "sneckomod:InertBlade": { "NAME": "鈍藏刀刃", @@ -599,19 +601,16 @@ }, "sneckomod:TrashCan": { "NAME": "垃圾桶", - "DESCRIPTION": "回合開始時,你可以 消耗 1 張牌。", - "UPGRADE_DESCRIPTION": "固有 。 NL 回合開始時,你可以 消耗 1 張牌。" + "DESCRIPTION": "回合结束时,你可以 消耗 1 张牌。" }, "sneckomod:Lacerate": { "NAME": "割裂", - "DESCRIPTION": "造成 !D! 點傷害。 NL 本回合當你給予目標敵人負面效果時,額外給予 !M! 層 sneckomod:劇毒 。 NL sneckomod:贈禮 : *致殘毒雲 。", - "DESCRIPTION_BATTLE": "造成 !D! 點傷害。 NL 本回合當你給予目標敵人負面效果時,額外給予 !M! sneckomod:劇毒 。" + "DESCRIPTION": "给予所有敌人 !M! 点 sneckomod:剧毒 。 NL 获得一张 *致残毒云 。 NL 消耗。", + "UPGRADE_DESCRIPTION": "给予所有敌人 !M! 点 sneckomod:剧毒 。 NL 获得一张 *致残毒云+ 。 NL 消耗。" }, "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] 。" + "NAME": "蛇侦探", + "DESCRIPTION": "虚无 。 NL 打出 1 张能力牌时 NL 获得 [E] 。 NL sneckomod:赠礼 :稀有能力牌。", + "DESCRIPTION_BATTLE": "虚无 。 NL 打出 1 张能力牌时 NL 获得 [E] 。" } } diff --git a/src/main/resources/sneckomodResources/localization/zht/PowerStrings.json b/src/main/resources/sneckomodResources/localization/zht/PowerStrings.json index 90a985a614..7f2aa3a2ba 100644 --- a/src/main/resources/sneckomodResources/localization/zht/PowerStrings.json +++ b/src/main/resources/sneckomodResources/localization/zht/PowerStrings.json @@ -40,12 +40,11 @@ ] }, "sneckomod:OverwhelmingPresencePower": { - "NAME": "威壓", + "NAME": "威压", "DESCRIPTIONS": [ - "每回合你第一次洗牌,獲得 [E] 並抽 #b1 張牌。", - "每回合你第一次洗牌,獲得 ", - " 點 [E] 並抽 #b", - " 張牌。" + "每回合第一次打出 #y异色 牌时,抽 #b1 张牌。", + "每回合第一次打出 #y异色 牌时,抽 #b", + " 张牌。" ] }, "sneckomod:SerpentsNestPower": { @@ -178,11 +177,11 @@ }, "sneckomod:TrashCanPower": { "NAME": "垃圾桶", - "DESCRIPTIONS": ["回合開始時,你可以 #y消耗 1張牌。", - "回合開始時,你可以至多 #y消耗 #b", - " 張牌。" - ] - }, + "DESCRIPTIONS": ["回合结束时,你可以 #y消耗 1张牌。", + "回合结束时,你可以至多 #y消耗 #b", + " 张牌。" + ] + }, "sneckomod:VenomDebuff": { "NAME": "劇毒", diff --git a/src/main/resources/sneckomodResources/localization/zht/RelicStrings.json b/src/main/resources/sneckomodResources/localization/zht/RelicStrings.json index 367aadc621..d9ba78c24e 100644 --- a/src/main/resources/sneckomodResources/localization/zht/RelicStrings.json +++ b/src/main/resources/sneckomodResources/localization/zht/RelicStrings.json @@ -24,7 +24,8 @@ "NAME": "異蛇戒指", "FLAVOR": "無法辨認,難以閱讀,周四到期。", "DESCRIPTIONS": [ - "觸發 #b3 次 #ysneckomod:溢出時,給予隨機敵人 #b1 層 #y虛弱 與 #y易傷 。" + "觸發 #b", + " 次 #ysneckomod:溢出時,給予隨機敵人 #b1 層 #y虛弱 與 #y易傷 。" ] }, "sneckomod:CrystallizedMud": { @@ -38,7 +39,8 @@ "NAME": "註料骰子", "FLAVOR": "灌了奶酪。", "DESCRIPTIONS": [ - "當1張牌被 #ysneckomod:混淆 時,獲得 #b1 點 #y格擋 。" + "當1張牌被 #ysneckomod:混淆 時,獲得 #b", + " 點 #y格擋 。" ] }, "sneckomod:RareBoosterPack": {