diff --git a/.gitignore b/.gitignore
index b83d222..131be1a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,79 @@
-/target/
+*.class
+
+# IntelliJ
+.idea/
+out/
+*.iml
+
+# Eclipse
+.classpath
+.project
+.settings/
+
+# maven build target
+target/
+
+# Mobile Tools for Java (J2ME)
+.mtj.tmp/
+
+# Package Files #
+*.jar
+*.war
+*.ear
+
+# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
+hs_err_pid*
+
+# =========================
+# Operating System Files
+# =========================
+
+# OSX
+# =========================
+
+.DS_Store
+.AppleDouble
+.LSOverride
+
+# Thumbnails
+._*
+
+# Files that might appear in the root of a volume
+.DocumentRevisions-V100
+.fseventsd
+.Spotlight-V100
+.TemporaryItems
+.Trashes
+.VolumeIcon.icns
+
+# Directories potentially created on remote AFP share
+.AppleDB
+.AppleDesktop
+Network Trash Folder
+Temporary Items
+.apdisk
+
+# Windows
+# =========================
+
+# Windows image file caches
+Thumbs.db
+ehthumbs.db
+
+# Folder config file
+Desktop.ini
+
+# Recycle Bin used on file shares
+$RECYCLE.BIN/
+
+# Windows Installer files
+*.cab
+*.msi
+*.msm
+*.msp
+
+# Windows shortcuts
+*.lnk
+
+# Spriter files
+*.autosave.scml
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 4691d73..d3a5f66 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,75 +3,92 @@
sneckomod
sneckomod
- v0.0.19
+ v0.0.20
jar
Snecko Mod
A new silly character for Slay the Spire: The Snek
+
+
+ 1.8
+ 1.8
+ 12-17-2019
+ 5.16.0-beta.3
+ 3.14.1
+ 1.17.1
+ 1.4.5
+ 0.24.0
+ 1.5.3
+ 0.20.0
+ 0.10.11
+
+ D:\Program Files (x86)\Steam\steamapps
+
+
com.megacrit.cardcrawl
slaythespire
- 051
+ ${SlayTheSpire.version}
system
- ${basedir}/../lib/desktop-1.0.jar
+ ${Steam.path}/common/SlayTheSpire/desktop-1.0.jar
basemod
basemod
- 5.4.0
+ ${basemod.version}
system
- ${basedir}/../lib/BaseMod.jar
+ ${Steam.path}/workshop/content/646570/1605833019/BaseMod.jar
com.evacipated.cardcrawl
ModTheSpire
- 3.6.3
+ ${ModTheSpire.version}
system
- ${basedir}/../lib/ModTheSpire.jar
+ ${Steam.path}/workshop/content/646570/1605060445/ModTheSpire.jar
com.evacipated.cardcrawl
stslib
- 1.9.0
+ ${stslib.version}
system
- ${basedir}/../lib/STSLib.jar
+ ${Steam.path}/workshop/content/646570/1609158507/StSLib.jar
yohane
yohane
- 1.9.0
+ ${yohane.version}
system
- ${basedir}/../lib/Yohane.jar
+ ${Steam.path}/workshop/content/646570/1612593526/Yohane.jar
hubris
hubris
- 0.19.1
+ ${hubris.version}
system
- ${basedir}/../lib/Hubris.jar
+ ${Steam.path}/workshop/content/646570/1609159603/Hubris.jar
replaythespire
replaythespire
- 1.3.15
+ ${replaythespire.version}
system
- ${basedir}/../lib/ReplayTheSpireMod.jar
+ ${Steam.path}/workshop/content/646570/1610173938/ReplayTheSpireMod.jar
infinitespire
infinitespire
- 0.12.0
+ ${infintespire.version}
system
- ${basedir}/../lib/InfiniteSpire.jar
+ ${Steam.path}/workshop/content/646570/1610128058/InfiniteSpire.jar
chronomuncher
chronomuncher
- 0.12.0
+ ${chronomuncher.version}
system
- ${basedir}/../lib/TheDisciple.jar
+ ${Steam.path}/workshop/content/646570/1609846039/TheDisciple.jar
@@ -97,8 +114,7 @@
-
-
+
diff --git a/src/main/java/sneckomod/SneckoMod.java b/src/main/java/sneckomod/SneckoMod.java
index f72c399..b108084 100644
--- a/src/main/java/sneckomod/SneckoMod.java
+++ b/src/main/java/sneckomod/SneckoMod.java
@@ -37,7 +37,7 @@
@com.evacipated.cardcrawl.modthespire.lib.SpireInitializer
public class SneckoMod implements basemod.interfaces.PostBattleSubscriber, basemod.interfaces.OnStartBattleSubscriber, basemod.interfaces.PostInitializeSubscriber, basemod.interfaces.EditCharactersSubscriber, basemod.interfaces.EditRelicsSubscriber, basemod.interfaces.EditCardsSubscriber, basemod.interfaces.EditKeywordsSubscriber, basemod.interfaces.EditStringsSubscriber
{
- private static final com.badlogic.gdx.graphics.Color SNECKO_COLOR = com.megacrit.cardcrawl.helpers.CardHelper.getColor(220.0F, 55.0F, 220.0F);
+ private static final com.badlogic.gdx.graphics.Color SNECKO_COLOR = com.megacrit.cardcrawl.helpers.CardHelper.getColor(220, 55, 220);
private static final String SneckoMOD_ASSETS_FOLDER = "SneckoImages";
diff --git a/src/main/java/sneckomod/actions/ReduceMostExpensiveCardAction.java b/src/main/java/sneckomod/actions/ReduceMostExpensiveCardAction.java
new file mode 100644
index 0000000..4ee4aac
--- /dev/null
+++ b/src/main/java/sneckomod/actions/ReduceMostExpensiveCardAction.java
@@ -0,0 +1,39 @@
+package sneckomod.actions;
+
+import com.badlogic.gdx.graphics.Color;
+import com.megacrit.cardcrawl.actions.AbstractGameAction;
+import com.megacrit.cardcrawl.cards.AbstractCard;
+import com.megacrit.cardcrawl.dungeons.AbstractDungeon;
+import sneckomod.SneckoMod;
+import java.util.ArrayList;
+import java.util.Collections;
+
+public class ReduceMostExpensiveCardAction extends AbstractGameAction {
+ public ReduceMostExpensiveCardAction() {
+ }
+ public void update() {
+ ArrayList mostExpensive = new ArrayList();
+ int mostExpensiveCost = -1;
+ SneckoMod.logger.info("AbstractDungeon.player.hand.group.size() = " + AbstractDungeon.player.hand.group.size());
+ for (AbstractCard c : AbstractDungeon.player.hand.group) {
+ SneckoMod.logger.info("Card" +c.name +"has cost"+c.cost);
+ if (c.cost > mostExpensiveCost) {
+ mostExpensive.clear();
+ mostExpensive.add(c) ;
+ mostExpensiveCost = c.cost;
+ } else if (c.cost == mostExpensiveCost) {
+ mostExpensive.add(c);
+ }
+ }
+ if (mostExpensive.size() == 0) {
+ SneckoMod.logger.info("Tried to reduce most expensive cost with no cards in hand.");
+ } else {
+ Collections.shuffle(mostExpensive, AbstractDungeon.cardRandomRng.random);
+ AbstractCard mostExpensiveCard = mostExpensive.get(0);
+ mostExpensiveCard.modifyCostForCombat(-1);
+ mostExpensiveCard.isCostModified = true;
+ mostExpensiveCard.superFlash(Color.PURPLE.cpy());
+ }
+ tickDuration();
+ }
+}
diff --git a/src/main/java/sneckomod/cards/AbstractSneckoCard.java b/src/main/java/sneckomod/cards/AbstractSneckoCard.java
index 0c6875c..eb496b2 100644
--- a/src/main/java/sneckomod/cards/AbstractSneckoCard.java
+++ b/src/main/java/sneckomod/cards/AbstractSneckoCard.java
@@ -102,7 +102,7 @@ public void replaceUnknown(boolean toHand) {
SneckoMod.logger.info("Attempting to create new Unknown: " + this.name);
AbstractCard cUnknown; if (tmp.size() > 0) {
- cUnknown = CardLibrary.cards.get(tmp.get(AbstractDungeon.cardRng.random(0, tmp.size() - 1)));
+ cUnknown = CardLibrary.cards.get(tmp.get(AbstractDungeon.cardRng.random(0, tmp.size() - 1))).makeStatEquivalentCopy();
}
else {
cUnknown = new com.megacrit.cardcrawl.cards.colorless.Madness();
diff --git a/src/main/java/sneckomod/characters/SneckoCharacter.java b/src/main/java/sneckomod/characters/SneckoCharacter.java
index 1ab12b1..5b2f544 100644
--- a/src/main/java/sneckomod/characters/SneckoCharacter.java
+++ b/src/main/java/sneckomod/characters/SneckoCharacter.java
@@ -235,9 +235,9 @@ public void render(SpriteBatch sb) {
}
if (!(AbstractDungeon.getCurrRoom() instanceof RestRoom)) {
- if (this.damageFlash) {
- ShaderHelper.setShader(sb, ShaderHelper.Shader.WHITE_SILHOUETTE);
- }
+// if (this.damageFlash) {
+// ShaderHelper.setShader(sb, ShaderHelper.Shader.WHITE_SILHOUETTE);
+// }
Boolean renderCorpse = (Boolean)ReflectionHacks.getPrivate(this,AbstractPlayer.class,"renderCorpse");
@@ -248,13 +248,13 @@ public void render(SpriteBatch sb) {
sb.draw(this.img, this.drawX - (float)this.img.getWidth() * Settings.scale / 2.0F + this.animX, this.drawY, (float)this.img.getWidth() * Settings.scale, (float)this.img.getHeight() * Settings.scale, 0, 0, this.img.getWidth(), this.img.getHeight(), this.flipHorizontal, this.flipVertical);
}
- if (this.damageFlash) {
- ShaderHelper.setShader(sb, ShaderHelper.Shader.DEFAULT);
- --this.damageFlashFrames;
- if (this.damageFlashFrames == 0) {
- this.damageFlash = false;
- }
- }
+// if (this.damageFlash) {
+// ShaderHelper.setShader(sb, ShaderHelper.Shader.DEFAULT);
+// --this.damageFlashFrames;
+// if (this.damageFlashFrames == 0) {
+// this.damageFlash = false;
+// }
+// }
this.hb.render(sb);
this.healthHb.render(sb);
@@ -276,6 +276,9 @@ public void render(SpriteBatch sb) {
}
+ @Override
+ public String getPortraitImageName(){return "That Sneaky Snake";}
+
private static final com.megacrit.cardcrawl.localization.CharacterStrings charStrings = CardCrawlGame.languagePack.getCharacterString("Snecko");
public static final String NAME = charStrings.NAMES[0];
public static final String DESCRIPTION = charStrings.TEXT[0];
diff --git a/src/main/java/sneckomod/patches/SnekproofConfusionPatch.java b/src/main/java/sneckomod/patches/SnekproofConfusionPatch.java
new file mode 100644
index 0000000..155d02b
--- /dev/null
+++ b/src/main/java/sneckomod/patches/SnekproofConfusionPatch.java
@@ -0,0 +1,25 @@
+package sneckomod.patches;
+
+import com.evacipated.cardcrawl.modthespire.lib.*;
+import com.megacrit.cardcrawl.cards.AbstractCard;
+import com.megacrit.cardcrawl.powers.ConfusionPower;
+import static sneckomod.SneckoMod.SNEKPROOF;
+
+
+public class SnekproofConfusionPatch {
+ //Patches ConfusionPower to not randomize costs on Snekproof cards
+ @SpirePatch(
+ clz=ConfusionPower.class,
+ method = "onCardDraw"
+ )
+ public static class ConfusionPower_onCardDraw {
+ @SpirePrefixPatch
+ public static SpireReturn prefix(ConfusionPower __this, AbstractCard card) {
+
+ if (card.hasTag(SNEKPROOF)) {
+ return SpireReturn.Return(null);
+ }
+ return SpireReturn.Continue();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/sneckomod/patches/SnekproofRandomizeHandCostPatch.java b/src/main/java/sneckomod/patches/SnekproofRandomizeHandCostPatch.java
new file mode 100644
index 0000000..34e9fb5
--- /dev/null
+++ b/src/main/java/sneckomod/patches/SnekproofRandomizeHandCostPatch.java
@@ -0,0 +1,62 @@
+package sneckomod.patches;
+
+import com.evacipated.cardcrawl.modthespire.lib.*;
+import com.evacipated.cardcrawl.modthespire.patcher.PatchingException;
+import com.megacrit.cardcrawl.cards.AbstractCard;
+import com.megacrit.cardcrawl.actions.unique.RandomizeHandCostAction;
+import com.megacrit.cardcrawl.random.Random;
+import javassist.CannotCompileException;
+import javassist.CtBehavior;
+import sneckomod.SneckoMod;
+
+import java.util.ArrayList;
+
+import static sneckomod.SneckoMod.SNEKPROOF;
+
+public class SnekproofRandomizeHandCostPatch {
+ //Patches the RandomizeHandCostAction to not randomize costs on Snekproof cards
+ @SpirePatch(
+ clz= RandomizeHandCostAction.class,
+ method = "update"
+ )
+ public static class DoNotRandomizeSnekproofCosts {
+
+ @SpireInsertPatch(
+ locator = Locator.class,
+ localvars = {"card","newCost"}
+ )
+ //This method will be inserted after the RandomizeHandAction gets a newCost from the AbstractDungeon.cardRandomRng.random(3)
+ public static void Insert (RandomizeHandCostAction __this, AbstractCard card, @ByRef int[] newCost) {//
+ if (card.hasTag(SNEKPROOF)) {
+ SneckoMod.logger.info("Not randomizing cost of " + card.name + "since it has snekproof.");
+ newCost[0]=card.cost;
+ }
+ }
+
+ // ModTheSpire searches for a nested class that extends SpireInsertLocator
+ // This class will be the Locator for the @SpireInsertPatch
+ // When a Locator is not specified, ModTheSpire uses the default behavior for the @SpireInsertPatch
+ private static class Locator extends SpireInsertLocator {
+ // This is the abstract method from SpireInsertLocator that will be used to find the line
+ // numbers you want this patch inserted at
+ public int[] Locate(CtBehavior ctMethodToPatch) throws CannotCompileException, PatchingException {
+ // finalMatcher is the line that we want to insert our patch before -
+ // in this example we are using a `MethodCallMatcher` which is a type
+ // of matcher that matches a method call based on the type of the calling
+ // object and the name of the method being called. Here you can see that
+ // we're expecting the `end` method to be called on a `SpireBatch`
+ Matcher finalMatcher = new Matcher.MethodCallMatcher(Random.class, "random");
+
+ // the `new ArrayList()` specifies the prerequisites before the line can be matched -
+ // the LineFinder will search for all the prerequisites in order before it will match the finalMatcher -
+ // since we didn't specify any prerequisites here, the LineFinder will simply find the first expression
+ // that matches the finalMatcher.
+ int[] result = LineFinder.findInOrder(ctMethodToPatch, new ArrayList(), finalMatcher);
+ //we actually want the immediate next line, after the value has been assigned to newCost
+ result[0]++;
+ return result;
+ }
+ }
+
+ }
+}
diff --git a/src/main/java/sneckomod/powers/MasterEyePower.java b/src/main/java/sneckomod/powers/MasterEyePower.java
index b66afae..31d9280 100644
--- a/src/main/java/sneckomod/powers/MasterEyePower.java
+++ b/src/main/java/sneckomod/powers/MasterEyePower.java
@@ -12,6 +12,7 @@
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import sneckomod.SneckoMod;
+ import sneckomod.actions.ReduceMostExpensiveCardAction;
public class MasterEyePower extends AbstractPower
{
@@ -66,22 +67,9 @@ public void updateDescription()
public void atStartOfTurnPostDraw()
{
+ SneckoMod.logger.info("Beginning atStartOfTurnPostDraw for MasterEye");
super.atStartOfTurnPostDraw();
-
- AbstractCard mostExpensive = null;
- int mostExpensiveCost = -1;
-
- for (AbstractCard c : AbstractDungeon.player.hand.group) {
- if (c.cost > mostExpensiveCost) {
- mostExpensive = c;
- }
- }
-
- if (mostExpensive != null) {
- mostExpensive.modifyCostForTurn(-1);
- mostExpensive.isCostModified = true;
- mostExpensive.superFlash(Color.PURPLE.cpy());
- }
+ addToBot(new ReduceMostExpensiveCardAction());
}
}
diff --git a/src/main/java/sneckomod/relics/ReduceCostRelic.java b/src/main/java/sneckomod/relics/ReduceCostRelic.java
index ddd5c95..2a5a280 100644
--- a/src/main/java/sneckomod/relics/ReduceCostRelic.java
+++ b/src/main/java/sneckomod/relics/ReduceCostRelic.java
@@ -9,6 +9,7 @@
import com.megacrit.cardcrawl.relics.AbstractRelic;
import com.megacrit.cardcrawl.relics.AbstractRelic.RelicTier;
import sneckomod.SneckoMod;
+ import sneckomod.actions.ReduceMostExpensiveCardAction;
import sneckomod.characters.SneckoCharacter;
public class ReduceCostRelic extends CustomRelic
@@ -33,21 +34,7 @@ public String getUpdatedDescription()
public void atTurnStartPostDraw()
{
super.atTurnStartPostDraw();
- AbstractCard mostExpensive = null;
- int mostExpensiveCost = -1;
-
- for (AbstractCard c : AbstractDungeon.player.hand.group) {
- if (c.cost > mostExpensiveCost) {
- mostExpensive = c;
- }
- }
-
- if (mostExpensive != null) {
- flash();
- mostExpensive.modifyCostForTurn(-1);
- mostExpensive.isCostModified = true;
- mostExpensive.superFlash(Color.PURPLE.cpy());
- }
+ addToBot(new ReduceMostExpensiveCardAction());
}
public boolean canSpawn() {
diff --git a/src/main/resources/ModTheSpire.json b/src/main/resources/ModTheSpire.json
index 148168f..d986876 100644
--- a/src/main/resources/ModTheSpire.json
+++ b/src/main/resources/ModTheSpire.json
@@ -2,10 +2,10 @@
"modid": "SneckoMod",
"name": "Snecko Mod",
"author_list": ["Michael Mayhem"],
- "description": "Adds a new silly playable Snecko character: The Perplexed. ",
- "version": "0.0.19",
- "sts_version": "01-03-2019",
- "mts_version": "3.6.3",
+ "description": "Adds a new silly playable Snecko character: The Snek. ",
+ "version": "0.0.20",
+ "sts_version": "12-17-2019",
+ "mts_version": "3.14.1",
"dependencies": ["basemod", "stslib"],
"update_json": "https://api.github.com/repos/mikemayhemdev/Snecko_Mod/releases/latest"
}