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