Skip to content

Commit

Permalink
Make Duct Tape work with some cards like GA and Rampage
Browse files Browse the repository at this point in the history
  • Loading branch information
kiooeht committed Nov 9, 2018
1 parent f7b6201 commit 74717a7
Show file tree
Hide file tree
Showing 3 changed files with 92 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -403,7 +403,6 @@ public void receiveCustomModeMods(List<CustomMod> list)
{
list.add(new CustomMod(Hubris.ID, "r", true));
list.add(new CustomMod("hubris:Mercantile", "b", false));

}

private static void autoAddCards() throws URISyntaxException, IllegalAccessException, InstantiationException, NotFoundException, CannotCompileException
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -831,29 +831,24 @@ public AbstractCard makeCopy()
@Override
public AbstractCard makeStatEquivalentCopy()
{
DuctTapeCard card = (DuctTapeCard) makeCopy();
DuctTapeCard card = (DuctTapeCard) super.makeStatEquivalentCopy();

for (int i=0; i<cards.size(); ++i) {
card.cards.set(i, cards.get(i).makeStatEquivalentCopy());
}

card.name = this.name;
card.target = this.target;
card.upgraded = this.upgraded;
card.timesUpgraded = this.timesUpgraded;
card.baseDamage = this.baseDamage;
card.baseBlock = this.baseBlock;
card.baseMagicNumber = this.baseMagicNumber;
card.cost = this.cost;
card.costForTurn = this.costForTurn;
card.isCostModified = this.isCostModified;
card.isCostModifiedForTurn = this.isCostModifiedForTurn;
card.inBottleLightning = this.inBottleLightning;
card.inBottleFlame = this.inBottleFlame;
card.inBottleTornado = this.inBottleTornado;
card.isSeen = this.isSeen;
card.isLocked = this.isLocked;
card.misc = this.misc;
return card;
}

@Override
public AbstractCard makeSameInstanceOf()
{
DuctTapeCard card = (DuctTapeCard) super.makeSameInstanceOf();

for (int i=0; i<cards.size(); ++i) {
card.cards.get(i).uuid = cards.get(i).uuid;
}

return card;
}

Expand All @@ -867,4 +862,13 @@ public List<CardSave> makeCardSaves()

return ret;
}

public void checkCardUUIDs(HashSet<AbstractCard> foundCards, UUID uuid)
{
for (AbstractCard card : cards) {
if (card.uuid.equals(uuid)) {
foundCards.add(card);
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,21 @@

import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.evacipated.cardcrawl.mod.hubris.cards.DuctTapeCard;
import com.evacipated.cardcrawl.modthespire.lib.ByRef;
import com.evacipated.cardcrawl.modthespire.lib.SpireInsertPatch;
import com.evacipated.cardcrawl.modthespire.lib.SpirePatch;
import com.evacipated.cardcrawl.modthespire.lib.*;
import com.megacrit.cardcrawl.actions.defect.IncreaseMiscAction;
import com.megacrit.cardcrawl.cards.AbstractCard;
import com.megacrit.cardcrawl.cards.CardGroup;
import com.megacrit.cardcrawl.helpers.GetAllInBattleInstances;
import com.megacrit.cardcrawl.screens.SingleCardViewPopup;
import javassist.*;
import javassist.CannotCompileException;
import javassist.CtBehavior;
import javassist.expr.ExprEditor;
import javassist.expr.FieldAccess;
import javassist.expr.MethodCall;

import java.lang.reflect.Field;
import java.util.HashSet;
import java.util.UUID;

public class DuctTapePatch
{
Expand Down Expand Up @@ -125,4 +128,67 @@ public static void Insert1(SingleCardViewPopup __instance, SpriteBatch sb, @ByRe
}
}
}

@SpirePatch(
clz=GetAllInBattleInstances.class,
method="get"
)
public static class GetSubCardBattleInstances
{
public static ExprEditor Instrument()
{
return new ExprEditor() {
@Override
public void edit(FieldAccess f) throws CannotCompileException
{
if (f.getClassName().equals(AbstractCard.class.getName()) && f.getFieldName().equals("uuid")) {
f.replace("$_ = " + GetSubCardBattleInstances.class.getName() + ".DuctTapeCardCheck($0, cards, uuid);");
}
}
};
}

public static UUID DuctTapeCardCheck(AbstractCard card, HashSet<AbstractCard> cards, UUID uuid)
{
if (card instanceof DuctTapeCard) {
((DuctTapeCard) card).checkCardUUIDs(cards, uuid);
}
return card.uuid;
}
}

@SpirePatch(
clz=IncreaseMiscAction.class,
method="update"
)
public static class IncreaseMisc
{
@SpireInsertPatch(
locator=Locator.class,
localvars={"uuid", "c", "miscIncrease"}
)
public static void Insert(IncreaseMiscAction __instance, UUID uuid, AbstractCard c, int miscIncrease)
{
if (c instanceof DuctTapeCard) {
HashSet<AbstractCard> foundCards = new HashSet<>();
((DuctTapeCard) c).checkCardUUIDs(foundCards, uuid);
for (AbstractCard found : foundCards) {
found.misc += miscIncrease;
c.applyPowers();
c.baseBlock = c.misc;
c.isBlockModified = false;
}
}
}

private static class Locator extends SpireInsertLocator
{
@Override
public int[] Locate(CtBehavior ctMethodToPatch) throws Exception
{
Matcher finalMatcher = new Matcher.FieldAccessMatcher(AbstractCard.class, "uuid");
return LineFinder.findInOrder(ctMethodToPatch, finalMatcher);
}
}
}
}

0 comments on commit 74717a7

Please sign in to comment.