Skip to content

Commit

Permalink
Merge pull request #58 from GraysonnG/develop
Browse files Browse the repository at this point in the history
Merge Develop into Master 11/2/18
  • Loading branch information
GraysonnG authored Nov 2, 2018
2 parents f60ffc9 + 1ed4060 commit c7e368d
Show file tree
Hide file tree
Showing 20 changed files with 500 additions and 49 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>InfiniteSpire</groupId>
<artifactId>InfiniteSpire</artifactId>
<version>0.4.1</version>
<version>0.5.2</version>
<dependencies>
<dependency>
<groupId>com.megacrit.cardcrawl</groupId>
Expand Down
11 changes: 5 additions & 6 deletions src/main/java/infinitespire/InfiniteSpire.java
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@
@SpireInitializer
public class InfiniteSpire implements PostInitializeSubscriber, PostBattleSubscriber, EditRelicsSubscriber,
EditCardsSubscriber, EditKeywordsSubscriber, EditStringsSubscriber, PreDungeonUpdateSubscriber {
public static final String VERSION = "0.4.0";
public static final String VERSION = "0.5.2";
public static final Logger logger = LogManager.getLogger(InfiniteSpire.class.getName());

private static ArrayList<OnQuestRemovedSubscriber> onQuestRemovedSubscribers = new ArrayList<>();
Expand All @@ -77,6 +77,7 @@ public class InfiniteSpire implements PostInitializeSubscriber, PostBattleSubscr
public static boolean isEndless = false;
public static boolean hasDefeatedGuardian;
public static boolean shouldLoad = false;
public static boolean startWithEndlessQuest = true;

public static boolean isReplayLoaded = false;
public static boolean isFruityLoaded = false;
Expand All @@ -93,6 +94,7 @@ public static String createID(String id) {

public InfiniteSpire() {
BaseMod.subscribe(this);
BaseMod.subscribe(new InfiniteSpireInit());
}

public static void initialize() {
Expand All @@ -115,11 +117,6 @@ public static void initialize() {
public void receivePostInitialize() {
initializeQuestLog();

Texture modBadge = getTexture("img/infinitespire/modbadge.png");
BaseMod.registerModBadge(modBadge, "Infinite Spire", "Blank The Evil",
"Adds a new way to play Slay the Spire, no longer stop after the 3rd boss. Keep fighting and gain perks as you climb.",
null);

BaseMod.addEvent(EmptyRestSite.ID, EmptyRestSite.class, Exordium.ID);
BaseMod.addEvent(HoodedArmsDealer.ID, HoodedArmsDealer.class);
BaseMod.addEvent(PrismEvent.ID, PrismEvent.class, Exordium.ID);
Expand Down Expand Up @@ -212,6 +209,7 @@ public static void saveData() {
BottledSoul.save(config);
config.setBool("isGuardianDead", hasDefeatedGuardian);
config.setBool("isEndless", isEndless);
config.setBool("startWithEndlessQuest", startWithEndlessQuest);
config.save();
} catch (IOException e) {
e.printStackTrace();
Expand All @@ -234,6 +232,7 @@ public static void loadData() {
SpireConfig config = new SpireConfig("InfiniteSpire", "infiniteSpireConfig");
config.load();
isEndless = config.getBool("isEndless");
startWithEndlessQuest = config.getBool("startWithEndlessQuest");

if (AbstractDungeon.player != null)
BottledSoul.load(config);
Expand Down
36 changes: 36 additions & 0 deletions src/main/java/infinitespire/InfiniteSpireInit.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package infinitespire;

import basemod.BaseMod;
import basemod.ModLabeledToggleButton;
import basemod.ModPanel;
import basemod.interfaces.PostInitializeSubscriber;
import com.badlogic.gdx.graphics.Texture;
import com.megacrit.cardcrawl.core.Settings;
import com.megacrit.cardcrawl.helpers.FontHelper;
import infinitespire.util.TextureLoader;

public class InfiniteSpireInit implements PostInitializeSubscriber {

@Override
public void receivePostInitialize() {
InfiniteSpire.loadData();
Texture modBadge = TextureLoader.getTexture("img/infinitespire/modbadge.png");

ModPanel settingsPanel = new ModPanel();

ModLabeledToggleButton nightmareQuestDefault = new ModLabeledToggleButton("Start Game with Endless Quest",
350f, 500f, Settings.CREAM_COLOR, FontHelper.buttonLabelFont, InfiniteSpire.startWithEndlessQuest, settingsPanel,
(me) -> {},
(me) -> {
InfiniteSpire.startWithEndlessQuest = me.enabled;
InfiniteSpire.saveData();
});

nightmareQuestDefault.toggle.enabled = InfiniteSpire.startWithEndlessQuest;

settingsPanel.addUIElement(nightmareQuestDefault);

BaseMod.registerModBadge(modBadge, "Infinite Spire", "Blank The Evil",
"Adds a new way to play Slay the Spire, no longer stop after the 3rd boss. Keep fighting and gain perks as you climb.", settingsPanel);
}
}
170 changes: 160 additions & 10 deletions src/main/java/infinitespire/abstracts/BlackCard.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@

import basemod.ReflectionHacks;
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.evacipated.cardcrawl.modthespire.lib.SpireInsertPatch;
import com.evacipated.cardcrawl.modthespire.lib.SpirePatch;
import com.evacipated.cardcrawl.modthespire.lib.SpireReturn;
import com.evacipated.cardcrawl.modthespire.lib.*;
import com.evacipated.cardcrawl.modthespire.patcher.PatchingException;
import com.megacrit.cardcrawl.actions.animations.VFXAction;
import com.megacrit.cardcrawl.cards.AbstractCard;
import com.megacrit.cardcrawl.characters.AbstractPlayer;
Expand All @@ -17,6 +17,12 @@
import com.megacrit.cardcrawl.screens.SingleCardViewPopup;
import infinitespire.effects.BlackCardEffect;
import infinitespire.patches.CardColorEnumPatch;
import infinitespire.util.TextureLoader;
import javassist.CannotCompileException;
import javassist.CtBehavior;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public abstract class BlackCard extends Card {

Expand All @@ -42,11 +48,11 @@ public void use(AbstractPlayer abstractPlayer, AbstractMonster abstractMonster)
useWithEffect(abstractPlayer, abstractMonster);
}

@SpirePatch(cls = "com.megacrit.cardcrawl.cards.AbstractCard", method = "renderTitle")
public static class renderTitlePatch{
@SpirePatch(clz = AbstractCard.class, method = "renderTitle")
public static class RenderTitle {
//Inserted after: font.getData().setScale(this.drawScale);
@SpireInsertPatch(rloc=64, localvars = {"font", "renderColor"})
public static SpireReturn<?> Insert(AbstractCard __instance, SpriteBatch sb, BitmapFont font, Color renderColor) {
@SpireInsertPatch(rloc = 64, localvars = {"font", "renderColor"})
public static SpireReturn<?> blackCardTitleColorAdjust(AbstractCard __instance, SpriteBatch sb, BitmapFont font, Color renderColor) {
if(__instance instanceof BlackCard) {
Color color = Settings.CREAM_COLOR.cpy();
if(__instance.upgraded) {
Expand All @@ -59,11 +65,25 @@ public static SpireReturn<?> Insert(AbstractCard __instance, SpriteBatch sb, Bit
}
return SpireReturn.Continue();
}

private static class Locator extends SpireInsertLocator {
@Override
public int[] Locate(CtBehavior ctMethodToPatch) throws CannotCompileException, PatchingException {
Matcher matcher = new Matcher.MethodCallMatcher(
"com.badlogic.gdx.graphics.g2d.BitmapFont.BitmapFontData","setScale"
);

int[] lines = LineFinder.findInOrder(ctMethodToPatch, matcher);

return new int[] {lines[lines.length - 1]};
}
}
}

@SpirePatch(cls = "com.megacrit.cardcrawl.screens.SingleCardViewPopup", method = "renderTitle")
public static class renderSingleCardPopupTitle {
public static SpireReturn<?> Prefix(SingleCardViewPopup __instance, SpriteBatch sb) {
@SpirePatch(clz = SingleCardViewPopup.class, method = "renderTitle")
public static class RenderSingleCardPopupTitle {
@SpirePrefixPatch
public static SpireReturn<?> blackCardTitleColorAdjust(SingleCardViewPopup __instance, SpriteBatch sb) {
AbstractCard card = (AbstractCard) ReflectionHacks.getPrivate(__instance, __instance.getClass(), "card");
if(card instanceof BlackCard) {
if(card.isLocked) {
Expand All @@ -85,4 +105,134 @@ public static SpireReturn<?> Prefix(SingleCardViewPopup __instance, SpriteBatch
return SpireReturn.Continue();
}
}

@SpirePatch(clz = AbstractCard.class, method = "renderPortraitFrame")
public static class RenderCardFrame {
@SpirePrefixPatch
public static SpireReturn<Void> blackCardFrameRender(AbstractCard __instance, SpriteBatch sb, float x, float y) {
if(__instance instanceof BlackCard){
try {
Method renderHelperMethod = AbstractCard.class.getDeclaredMethod("renderHelper", SpriteBatch.class, Color.class, Texture.class, float.class, float.class);
Color renderColor = (Color) ReflectionHacks.getPrivate(__instance, AbstractCard.class, "renderColor");
renderHelperMethod.setAccessible(true);
switch(__instance.type) {
case ATTACK:
renderHelperMethod.invoke(__instance, sb, renderColor, TextureLoader.getTexture("img/infinitespire/cards/ui/512/boss-frame-attack.png"), x, y);
break;
case CURSE:
case STATUS:
case SKILL:
renderHelperMethod.invoke(__instance, sb, renderColor, TextureLoader.getTexture("img/infinitespire/cards/ui/512/boss-frame-skill.png"), x, y);
break;
case POWER:
renderHelperMethod.invoke(__instance, sb, renderColor, TextureLoader.getTexture("img/infinitespire/cards/ui/512/boss-frame-power.png"), x, y);
break;
}
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
e.printStackTrace();
}
return SpireReturn.Return(null);
}


return SpireReturn.Continue();
}
}

@SpirePatch(clz = SingleCardViewPopup.class, method = "renderFrame")
public static class RenderSingleCardFrame {

@SpireInsertPatch(
locator = Locator.class,
localvars = {"card"}
)
public static SpireReturn<Void> blackCardFrameRender(SingleCardViewPopup __instance, SpriteBatch sb, AbstractCard card){
if(card instanceof BlackCard) {
Texture img = null;
switch(card.type){
case ATTACK:
img = TextureLoader.getTexture("img/infinitespire/cards/ui/1024/boss-frame-attack.png");
break;
case POWER:
img = TextureLoader.getTexture("img/infinitespire/cards/ui/1024/boss-frame-power.png");
break;
case SKILL:
default:
img = TextureLoader.getTexture("img/infinitespire/cards/ui/1024/boss-frame-skill.png");
break;
}


if(img != null)
sb.draw(img, Settings.WIDTH / 2.0F - 512.0F, Settings.HEIGHT / 2.0F - 512.0F, 512.0F, 512.0F, 1024.0F, 1024.0F, Settings.scale, Settings.scale, 0.0F, 0, 0, 1024, 1024, false, false);
return SpireReturn.Return(null);
}

return SpireReturn.Continue();
}

private static class Locator extends SpireInsertLocator{
@Override
public int[] Locate(CtBehavior ctMethodToPatch) throws CannotCompileException, PatchingException {
Matcher finalMatcher = new Matcher.MethodCallMatcher(
"com.badlogic.gdx.graphics.g2d.SpriteBatch","draw");

return LineFinder.findInOrder(ctMethodToPatch, finalMatcher);
}
}
}

@SpirePatch(clz = AbstractCard.class, method = "renderType")
public static class RenderType {
@SpireInsertPatch(locator = Locator.class,
localvars = {"font", "text", "current_x", "current_y", "drawScale", "angle", "renderColor"})
public static SpireReturn<Void> blackCardTypeColorAdjust(AbstractCard __instance, SpriteBatch sb, BitmapFont font, String text, float curX, float curY, float dScale, float angle, Color renderColor) {
if(__instance instanceof BlackCard) {
Color textColor = Color.valueOf("d0beff").cpy();
textColor.a = renderColor.a;
FontHelper.renderRotatedText(sb, font, text, curX, curY - 22.0f * dScale * Settings.scale, 0.0f, -1.0f * dScale * Settings.scale, angle, false, textColor);
return SpireReturn.Return(null);
}

return SpireReturn.Continue();
}

private static class Locator extends SpireInsertLocator {
@Override
public int[] Locate(CtBehavior ctBehavior) throws CannotCompileException, PatchingException {
Matcher matcher = new Matcher.MethodCallMatcher(
"com.megacrit.cardcrawl.helpers.FontHelper", "renderRotatedText"
);

return LineFinder.findInOrder(ctBehavior, matcher);
}
}

}

@SpirePatch(clz = SingleCardViewPopup.class, method = "renderCardTypeText")
public static class RenderSingleCardType {

@SpireInsertPatch(locator = Locator.class,
localvars = {"card", "label"})
public static SpireReturn<Void> blackCardTypeColorAdjust(SingleCardViewPopup __instance, SpriteBatch sb, AbstractCard card, String label) {
if(card instanceof BlackCard) {
FontHelper.renderFontCentered(sb, FontHelper.SCP_cardTypeFont, label, Settings.WIDTH / 2.0f + 3.0f * Settings.scale, Settings.HEIGHT / 2.0f - 40.0f * Settings.scale, Color.valueOf("d0beff"));
return SpireReturn.Return(null);
}

return SpireReturn.Continue();
}

private static class Locator extends SpireInsertLocator {
@Override
public int[] Locate(CtBehavior ctBehavior) throws Exception {
Matcher matcher = new Matcher.MethodCallMatcher(
"com.megacrit.cardcrawl.helpers.FontHelper","renderFontCentered"
);

return LineFinder.findInOrder(ctBehavior, matcher);
}
}
}
}
15 changes: 14 additions & 1 deletion src/main/java/infinitespire/actions/AddQuestAction.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,24 +11,37 @@

public class AddQuestAction extends AbstractGameAction{
private ArrayList<Quest> quests;
private boolean doEffect;

public AddQuestAction(Quest questToAdd){
quests = new ArrayList<>();
quests.add(questToAdd);
doEffect = true;

}

public AddQuestAction(Collection<Quest> questsToAdd){
quests = new ArrayList<>();
quests.addAll(questsToAdd);
doEffect = true;
}

public AddQuestAction(Quest questToAdd, boolean doEffect){
this(questToAdd);
this.doEffect = doEffect;
}

public AddQuestAction(Collection<Quest> questsToAdd, boolean doEffect){
this(questsToAdd);
this.doEffect = doEffect;
}

@Override
public void update() {
for(Quest quest : quests) {
if (!InfiniteSpire.questLog.hasQuest(quest) && InfiniteSpire.questLog.getAmount(quest.type) < 7) {
InfiniteSpire.questLog.add(quest.createNew());
AbstractDungeon.topLevelEffects.add(new QuestLogUpdateEffect());
if(doEffect) AbstractDungeon.topLevelEffects.add(new QuestLogUpdateEffect());
InfiniteSpire.publishOnQuestAdded(quest);
}
}
Expand Down
5 changes: 4 additions & 1 deletion src/main/java/infinitespire/cards/Pacifist.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.megacrit.cardcrawl.cards.AbstractCard;
import com.megacrit.cardcrawl.characters.AbstractPlayer;
import com.megacrit.cardcrawl.dungeons.AbstractDungeon;
import com.megacrit.cardcrawl.monsters.AbstractMonster;
import com.megacrit.cardcrawl.relics.BlueCandle;
import infinitespire.abstracts.Card;
Expand Down Expand Up @@ -46,7 +47,9 @@ public void use(AbstractPlayer p, AbstractMonster m) {

@Override
public void triggerWhenDrawn() {
this.cost = -2;
if (AbstractDungeon.player.hasRelic(BlueCandle.ID)) {
this.cost = -2;
}
}


Expand Down
4 changes: 2 additions & 2 deletions src/main/java/infinitespire/events/EmptyRestSite.java
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ public void update() {
}
if (!AbstractDungeon.isScreenUp && !AbstractDungeon.gridSelectScreen.selectedCards.isEmpty() && AbstractDungeon.gridSelectScreen.forPurge) {
CardCrawlGame.sound.play("CARD_EXHAUST");
AbstractDungeon.topLevelEffects.add(new PurgeCardEffect(AbstractDungeon.gridSelectScreen.selectedCards.get(0), Settings.WIDTH / 2, Settings.HEIGHT / 2));
AbstractDungeon.topLevelEffects.add(new PurgeCardEffect(AbstractDungeon.gridSelectScreen.selectedCards.get(0), Settings.WIDTH / 2f, Settings.HEIGHT / 2f));
AbstractDungeon.player.masterDeck.removeCard(AbstractDungeon.gridSelectScreen.selectedCards.get(0));
AbstractDungeon.gridSelectScreen.selectedCards.clear();
}
Expand Down Expand Up @@ -109,7 +109,7 @@ protected void buttonEffect(int buttonPressed) {
CardCrawlGame.sound.play("SHOVEL");
AbstractDungeon.combatRewardScreen.open();
AbstractDungeon.combatRewardScreen.rewards.clear();
AbstractDungeon.combatRewardScreen.rewards.add(new RewardItem(AbstractDungeon.returnRandomRelic(AbstractDungeon.returnRandomRelicTier())));
AbstractDungeon.combatRewardScreen.rewards.add(new RewardItem(AbstractDungeon.returnRandomRelicEnd(AbstractDungeon.returnRandomRelicTier())));
AbstractDungeon.combatRewardScreen.positionRewards();
}
break;
Expand Down
Loading

0 comments on commit c7e368d

Please sign in to comment.