Skip to content

Commit

Permalink
0.10.5
Browse files Browse the repository at this point in the history
0.10.5

	Feature: Now supports Heart victories with effects and cutscenes! First mod to do so. The cutscene art is STILL IN BETA.
	Relic: Added new relic, Spiked Shell. Does Fibonacci damage at end of turn for each card played, if your hand is empty.
	Relic: Added new relic, Mystic Crock Pot. Increases the block and attack of retained cards by 10% each time retained.
	Relic: Added new relic, Heavy Switch. Self-retained cards no longer self-retain, but give regular retain.
	Relic: Added new relic, Spring Shield. Delayed Attacks play a ward each turn they are delayed for.
	Relic: Carbonhydrate, including Locked Carbon, is now Paper Twirtle.
	Art: Updated event relic art.
	Art: Goo colour on the switch card Goo now matches the colour of the effect icon they apply.
	Art: New art for Reap.
	Art: New character button for Custom character select.
	Animation: Disciple now has a skeletal animation.
	Balance: Chronometer and Chronograph no longer give confusion immunity.
	Feature: Retained card dialogue no longer adds self-retaining cards to your options.
	Text: Text updated for custom events.
	Text: Improved wording on Tiring Slam+ to be consistent with Perfected Strike.
	Text: Facsimile+ now correctly identifies that it no longer exhausts.
	Text: Fixed a typo in Maw Bank's description.
	Text: Chronograph text was changed to end of combat for consistency with vanilla.
	Text: Locked Calendar now has Innate on a separate line.
	Text: Chronometer and Chronogrpah description updated to be more clear about card retention discounts.
	Events: Events Relicator and Replicator can no longer occur on non-Disciple characters, avoiding potential crashes.
	Effect: Reap now does a larger, cleave-like effect.
	Effect: Misterioso now more clearly shows which cards get played from the exhaust pile.
	Effect: Added sounds to Back Four Seconds, Pendulum, Grave, Stagnate, Old Timer, Keepsakes, Cuckoo, Chronoelasticity, Tempo, and BPM.
	Effect: Hanging Clock relic now has the time eater end turn effect.
	Effect: Hanging Clock relic now counts on the relic, instead of applying a power.
	Balance: Recurrance+ now does 5 damage 2 times instead of 4 damage 2 times.
	Balance: Stun now will revert enemies to the last attack they were attempting, while Sleep advances them to the next when they wake.
	Balance: Wake Up Call now deals 44(60) damage when the enemy is next sleeping or stunned, instead of only when used and being self-retaining.
	Balance: Hands Up now does delayed strength, a custom power that is affected by Recurrance instead of Shackled.
	Balance: Shackled is no longer affected by Recurrance.
	Balance: Wake Up Call is now affected by Recurrance, in the form of adding more damage.
	Balance: Wake Up Call now costs 1 instead of 2.
	Bug: Clock and Load will now work when focus is applied.
	Bug: Fixed additional potential crashes with Pendulum and Recurrance tooltips in the Library screen.
	Bug: Using Tempo or BPM with Runic Dome no longer shows you the intent through the card preview.
	Bug: Self-retaining cards created by outside sources should now retain on the turn they are created.
	Bug: Replicas no longer refuse to unlock when orb slots are maxed but some slots are empty.
	Bug: Artifactor event no longer can occur twice on Disciple.
	Bug: Switch cards no longer upgrade themselves secretly in the background.
	Bug: Pattern Shift now correctly handles Maw roar once again.
	Bug: Attempted another fix to rotation of upgrade cards via Whetstone and War Paint.
	Bug: Bandit Leader and Bear now correctly shift after the first turn via Pattern Shift.
	Cleanup: Some code cleanup on cards.
	Bug: Thieves now run on waking up from Sleep.
	Bug: Event bottled replica relics now correctly lose energy the first turn.
	Bug: Fixed an issue where Pattern Shift wasn't consistent on the first mouse over on the first turn.
	Bug: Recurrance now interacts with The Bomb, same as with Delayed Attack.
  • Loading branch information
Tempus committed Nov 18, 2018
1 parent 45472cc commit 1efc4b3
Show file tree
Hide file tree
Showing 187 changed files with 1,977 additions and 939 deletions.
172 changes: 108 additions & 64 deletions src/main/java/ChronoMod.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,20 +29,13 @@
import com.megacrit.cardcrawl.audio.Sfx;
import com.megacrit.cardcrawl.audio.SoundMaster;
import com.megacrit.cardcrawl.core.CardCrawlGame;
import com.megacrit.cardcrawl.unlock.AbstractUnlock.UnlockType;
import com.megacrit.cardcrawl.unlock.AbstractUnlock;
import com.megacrit.cardcrawl.monsters.AbstractMonster;

import basemod.BaseMod;
import basemod.interfaces.EditCardsSubscriber;
import basemod.interfaces.EditCharactersSubscriber;
import basemod.interfaces.EditKeywordsSubscriber;
import basemod.interfaces.EditRelicsSubscriber;
import basemod.interfaces.EditStringsSubscriber;
import basemod.interfaces.SetUnlocksSubscriber;
import basemod.interfaces.PostInitializeSubscriber;
import basemod.interfaces.PostDeathSubscriber;
import basemod.interfaces.OnCardUseSubscriber;
import basemod.interfaces.PreStartGameSubscriber;
import basemod.interfaces.PostDrawSubscriber;
import basemod.interfaces.OnPowersModifiedSubscriber;
import basemod.interfaces.*;
import basemod.abstracts.CustomUnlockBundle;
import basemod.ReflectionHacks;

import com.evacipated.cardcrawl.modthespire.lib.SpireInitializer;
Expand All @@ -64,7 +57,7 @@
public class ChronoMod implements
PostInitializeSubscriber, EditCardsSubscriber, EditCharactersSubscriber, EditKeywordsSubscriber, PreStartGameSubscriber,
EditStringsSubscriber, SetUnlocksSubscriber, EditRelicsSubscriber, OnCardUseSubscriber, PostDeathSubscriber, PostDrawSubscriber,
OnPowersModifiedSubscriber {
OnPowersModifiedSubscriber, PreMonsterTurnSubscriber {

public static final Logger logger = LogManager.getLogger(ChronoMod.class.getName());

Expand Down Expand Up @@ -147,13 +140,7 @@ public void receivePostInitialize() {
Texture badgeTexture = ImageMaster.loadImage("chrono_images/badge.png");
BaseMod.registerModBadge(badgeTexture, MOD_NAME, AUTHOR, DESCRIPTION, null);

BaseMod.addEvent(ArtifactorA.ID, ArtifactorA.class, Exordium.ID);
BaseMod.addEvent(ArtifactorA.ID, ArtifactorA.class, Exordium.ID);
// BaseMod.addEvent(ArtifactorB.ID, ArtifactorB.class, Exordium.ID);
// BaseMod.addEvent(ArtifactorC.ID, ArtifactorC.class, Exordium.ID);
BaseMod.addEvent(Replicator.ID, Replicator.class, TheCity.ID);
BaseMod.addEvent(Relicator.ID, Relicator.class, TheBeyond.ID);

BaseMod.addEvent(Artifactor.ID, Artifactor.class, Exordium.ID);
this.loadAudio();
}

Expand All @@ -164,7 +151,15 @@ public void loadAudio() {
map.put("CHRONO-SHARP2", new Sfx("chrono_audio/Slide_Sharp_02.ogg", false));
map.put("CHRONO-SLOWDOWN", new Sfx("chrono_audio/SlowDown.ogg", false));
map.put("CHRONO-SPEEDUP", new Sfx("chrono_audio/SpeedUp.ogg", false));
map.put("CHRONO-LOWWHOOSH", new Sfx("chrono_audio/LowWhoosh.ogg", false));
map.put("CHRONO-TICKINGCLEAN", new Sfx("chrono_audio/TickingClean.ogg", false));
map.put("CHRONO-TICKINGDIRTY", new Sfx("chrono_audio/TickingDirty.ogg", false));
map.put("CHRONO-TICK", new Sfx("chrono_audio/Tick.ogg", false));
map.put("CHRONO-CHIME", new Sfx("chrono_audio/Chime.ogg", false));
map.put("CHRONO-WINDUP", new Sfx("chrono_audio/WindUp.ogg", false));
map.put("CHRONO-SHORTSLEEP", new Sfx("chrono_audio/ShortSleep.ogg", false));
map.put("CHRONO-ELASTIC", new Sfx("chrono_audio/Elastic.ogg", false));
map.put("CHRONO-CUCKOO", new Sfx("chrono_audio/Cuckoo.ogg", false));
}

public void receivePostDeath() {
Expand Down Expand Up @@ -193,20 +188,32 @@ public void receiveEditRelics() {
BaseMod.addRelicToCustomPool(new Metronome(), Enum.CHRONO_GOLD);
// BaseMod.addRelicToCustomPool(new Lockbox(), Enum.CHRONO_GOLD);
BaseMod.addRelicToCustomPool(new Cryopreserver(), Enum.CHRONO_GOLD);
BaseMod.addRelicToCustomPool(new Carbonhydrate(), Enum.CHRONO_GOLD);
BaseMod.addRelicToCustomPool(new PaperTurtyl(), Enum.CHRONO_GOLD);
BaseMod.addRelicToCustomPool(new SlipperyGoo(), Enum.CHRONO_GOLD);
BaseMod.addRelicToCustomPool(new HangingClock(), Enum.CHRONO_GOLD);
BaseMod.addRelicToCustomPool(new BlueBox(), Enum.CHRONO_GOLD);
BaseMod.addRelicToCustomPool(new SpikedShell(), Enum.CHRONO_GOLD);
BaseMod.addRelicToCustomPool(new SpringShield(), Enum.CHRONO_GOLD);
BaseMod.addRelicToCustomPool(new HeavySwitch(), Enum.CHRONO_GOLD);
BaseMod.addRelicToCustomPool(new MysticCrockPot(), Enum.CHRONO_GOLD);
// BaseMod.addRelicToCustomPool(new SleevePocket(), Enum.CHRONO_GOLD);
BaseMod.addRelicToCustomPool(new WaitingRoom(), Enum.CHRONO_GOLD);

BaseMod.addRelicToCustomPool(new ReplicaCarbonhydrate(), Enum.CHRONO_GOLD);
BaseMod.addRelicToCustomPool(new ReplicaFlame(), Enum.CHRONO_GOLD);
BaseMod.addRelicToCustomPool(new ReplicaLightning(), Enum.CHRONO_GOLD);
BaseMod.addRelicToCustomPool(new ReplicaMercury(), Enum.CHRONO_GOLD);
BaseMod.addRelicToCustomPool(new ReplicaOrichalcum(), Enum.CHRONO_GOLD);
BaseMod.addRelicToCustomPool(new ReplicaThread(), Enum.CHRONO_GOLD);
BaseMod.addRelicToCustomPool(new ReplicaTornado(), Enum.CHRONO_GOLD);
BaseMod.addRelicToCustomPool(new ReplicaMedicine(), Enum.CHRONO_GOLD);
BaseMod.addRelicToCustomPool(new ReplicaWarPaint(), Enum.CHRONO_GOLD);

BaseMod.addRelicToCustomPool(new ReplicaScales(), Enum.CHRONO_GOLD);
BaseMod.addRelicToCustomPool(new ReplicaMercury(), Enum.CHRONO_GOLD);
BaseMod.addRelicToCustomPool(new ReplicaWhetstone(), Enum.CHRONO_GOLD);

BaseMod.addRelicToCustomPool(new ReplicaNitrogen(), Enum.CHRONO_GOLD);
BaseMod.addRelicToCustomPool(new ReplicaIceCream(), Enum.CHRONO_GOLD);
BaseMod.addRelicToCustomPool(new ReplicaHand(), Enum.CHRONO_GOLD);

BaseMod.addRelicToCustomPool(new ReplicaFlame(), Enum.CHRONO_GOLD);
BaseMod.addRelicToCustomPool(new ReplicaLightning(), Enum.CHRONO_GOLD);
BaseMod.addRelicToCustomPool(new ReplicaTornado(), Enum.CHRONO_GOLD);
}

public void setCompendiumSwitchCards() {
Expand Down Expand Up @@ -276,12 +283,12 @@ public void setGameSwitchCards() {
public void receiveEditCards() {
logger.info("Adding cards....");

// setCompendiumSwitchCards();
BaseMod.addCard(new SwitchReapSow());
BaseMod.addCard(new SwitchExoVibe());
BaseMod.addCard(new SwitchGoo());
BaseMod.addCard(new SwitchSavings());
BaseMod.addCard(new SwitchSharpShooter());
setCompendiumSwitchCards();
// BaseMod.addCard(new SwitchReapSow());
// BaseMod.addCard(new SwitchExoVibe());
// BaseMod.addCard(new SwitchGoo());
// BaseMod.addCard(new SwitchSavings());
// BaseMod.addCard(new SwitchSharpShooter());

// BaseMod.addCard(new ASecondTooLate());
BaseMod.addCard(new Accelerando());
Expand Down Expand Up @@ -334,7 +341,7 @@ public void receiveEditCards() {
BaseMod.addCard(new LockedBlood());
// BaseMod.addCard(new LockedCalipers());
BaseMod.addCard(new LockedCalendar());
BaseMod.addCard(new LockedCarbon());
BaseMod.addCard(new LockedTurtyl());
BaseMod.addCard(new LockedFlame());
// BaseMod.addCard(new LockedHand());
// BaseMod.addCard(new LockedIceCream());
Expand Down Expand Up @@ -462,40 +469,77 @@ public void receivePostDraw(AbstractCard c) {
}
}

public boolean receivePreMonsterTurn(AbstractMonster m) {
// if (m.ID == "TimeEater" && AbstractDungeon.player.chosenClass == Enum.CHRONO_CLASS) {
// switch (AbstractDungeon.actionManager.turn) {
// case 0:
// break;
// case 1:
// break;
// case 2:
// break;
// case 3:
// break;
// case 4:
// break;
// case 5:
// break;
// case 6:
// break;
// case 7:
// break;
// }
// }
return true;
}

public void receivePowersModified() {
if (AbstractDungeon.player.hasRelic(Chronometer.ID)) {
((Chronometer)AbstractDungeon.player.getRelic(Chronometer.ID)).removeConfusion();
}
if (AbstractDungeon.player.hasRelic(Chronograph.ID)) {
((Chronograph)AbstractDungeon.player.getRelic(Chronograph.ID)).removeConfusion();
}
// if (AbstractDungeon.player.hasRelic(Chronometer.ID)) {
// ((Chronometer)AbstractDungeon.player.getRelic(Chronometer.ID)).removeConfusion();
// }
// if (AbstractDungeon.player.hasRelic(Chronograph.ID)) {
// ((Chronograph)AbstractDungeon.player.getRelic(Chronograph.ID)).removeConfusion();
// }
}

// Disciple Unlocks
//
// Lv1:
// Echonomics, Analog, Resonant Call
//
// Lv2:
// SharpShooter, LockedBell, Facsimile
//
// Lv3:
// PaperTurtyl, Slippery Goo, Metronome
//
// Lv4:
// Beats Per Minute, Wake Up Call, Stagnate
//
// Lv5:
// Cryopreserver, HangingClock, BlueBox
//

@Override
public void receiveSetUnlocks() {
// UnlockTracker.addCard("Flicker");
// UnlockTracker.addCard("Transference");
// UnlockTracker.addCard("ForceRipple");
// // seeker unlock 1
// BaseMod.addUnlockBundle(new CustomUnlockBundle(
// "Flicker", "Transference", "ForceRipple"
// ), TheSeekerEnum.THE_SEEKER, 1);
//
// // seeker unlock 2
// BaseMod.addUnlockBundle(new CustomUnlockBundle(
// "Channel", "Shimmer", "ThoughtRaze"
// ), TheSeekerEnum.THE_SEEKER, 2);
// UnlockTracker.addCard("Channel");
// UnlockTracker.addCard("Shimmer");
// UnlockTracker.addCard("ThoughtRaze");
//
// // seeker unlock 3 (Vacuum tmp in place of Feedback)
// BaseMod.addUnlockBundle(new CustomUnlockBundle(
// "Convergence", "Hypothesis", "Nexus"
// ), TheSeekerEnum.THE_SEEKER, 3);
// UnlockTracker.addCard("Convergence");
// UnlockTracker.addCard("Hypothesis");
// UnlockTracker.addCard("Nexus");
}
BaseMod.addUnlockBundle(new CustomUnlockBundle(
"Echonomics", "Analog", "ResonantCall"
), Enum.CHRONO_CLASS, 1);

BaseMod.addUnlockBundle(new CustomUnlockBundle(
"SharpShooter", "LockedBell", "Facsimile"
), Enum.CHRONO_CLASS, 2);

BaseMod.addUnlockBundle(new CustomUnlockBundle(AbstractUnlock.UnlockType.RELIC,
"PaperTurtyl", "SlipperyGoo", "Metronome"
), Enum.CHRONO_CLASS, 3);

BaseMod.addUnlockBundle(new CustomUnlockBundle(
"BeatsPerMinute", "WakeUpCall", "Stagnate"
), Enum.CHRONO_CLASS, 4);

BaseMod.addUnlockBundle(new CustomUnlockBundle(AbstractUnlock.UnlockType.RELIC,
"Cryopreserver", "HangingClock", "BlueBox"
), Enum.CHRONO_CLASS, 5);
}
}
8 changes: 5 additions & 3 deletions src/main/java/actions/ChronoChannelAction.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,12 @@ public ChronoChannelAction(AbstractOrb newOrbType, boolean autoEvoke)
public void update()
{
if (AbstractDungeon.player.maxOrbs == 10) {
AbstractDungeon.effectList.add(new ThoughtBubble(AbstractDungeon.player.dialogX, AbstractDungeon.player.dialogY, 3.0F, "You cannot fit any more #rreplicas for now.", true));
if (!AbstractDungeon.player.hasEmptyOrb()) {
AbstractDungeon.effectList.add(new ThoughtBubble(AbstractDungeon.player.dialogX, AbstractDungeon.player.dialogY, 3.0F, "You cannot fit any more #rreplicas for now.", true));

this.isDone = true;
return;
this.isDone = true;
return;
}
} else {
AbstractDungeon.player.increaseMaxOrbSlots(1, false);
CardCrawlGame.sound.playA("GUARDIAN_ROLL_UP", 1.0F);
Expand Down
38 changes: 38 additions & 0 deletions src/main/java/actions/EndTurnAction.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package chronomuncher.actions;

import com.megacrit.cardcrawl.actions.AbstractGameAction;
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 com.megacrit.cardcrawl.orbs.EmptyOrbSlot;
import com.megacrit.cardcrawl.vfx.ThoughtBubble;
import com.megacrit.cardcrawl.core.CardCrawlGame;
import com.megacrit.cardcrawl.vfx.BorderFlashEffect;
import com.megacrit.cardcrawl.vfx.cardManip.ExhaustCardEffect;
import com.megacrit.cardcrawl.vfx.combat.TimeWarpTurnEndEffect;
import com.megacrit.cardcrawl.core.CardCrawlGame;
import com.megacrit.cardcrawl.cards.AbstractCard;
import com.badlogic.gdx.graphics.Color;

public class EndTurnAction extends AbstractGameAction
{
public EndTurnAction() {}

public void update()
{
AbstractDungeon.actionManager.cardQueue.clear();
for (AbstractCard c : AbstractDungeon.player.limbo.group) {
AbstractDungeon.effectList.add(new ExhaustCardEffect(c));
}
AbstractDungeon.player.limbo.group.clear();
AbstractDungeon.player.releaseCard();
AbstractDungeon.overlayMenu.endTurnButton.disable(true);

CardCrawlGame.sound.play("POWER_TIME_WARP", 0.05F);
AbstractDungeon.effectsQueue.add(new BorderFlashEffect(Color.GOLD, true));
AbstractDungeon.topLevelEffectsQueue.add(new TimeWarpTurnEndEffect());
this.isDone = true;
return;
}
}
1 change: 1 addition & 0 deletions src/main/java/actions/ModifyTimerAction.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ public void update()
if (this.amount > 0) {
CardCrawlGame.sound.play("CHRONO-SPEEDUP", 0.2F);
this.orb.timer++;
this.orb.timeElapsed--;
this.amount--;
}
else {
Expand Down
20 changes: 16 additions & 4 deletions src/main/java/actions/PatternShiftAction.java
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,8 @@ public static boolean nextIntent(AbstractMonster m) {
m.setMove((byte)1, AbstractMonster.Intent.ATTACK_DEFEND, ((DamageInfo)m.damage.get(0)).base);
break;
}
break;
m.createIntent();
return true;

case "BanditLeader":
switch (m.nextMove)
Expand All @@ -178,7 +179,8 @@ public static boolean nextIntent(AbstractMonster m) {
}
break;
}
break;
m.createIntent();
return true;

// Looter is annoying, just like Mugger
case "Looter":
Expand Down Expand Up @@ -342,6 +344,10 @@ else if ((m.intent == AbstractMonster.Intent.ATTACK)) {
ReflectionHacks.setPrivate(m, m.getClass(), "splitTriggered", false);
break;

case "Maw":
ReflectionHacks.setPrivate(m, m.getClass(), "roared", true);
break;

// Special case guardian stuff
case "TheGuardian":
switch (m.nextMove) {
Expand Down Expand Up @@ -640,7 +646,8 @@ public static boolean previewNextIntent(AbstractMonster m) {
m.setMove((byte)1, AbstractMonster.Intent.ATTACK_DEFEND, ((DamageInfo)m.damage.get(0)).base);
break;
}
break;
m.createIntent();
return true;

case "BanditLeader":
switch (m.nextMove)
Expand All @@ -659,7 +666,8 @@ public static boolean previewNextIntent(AbstractMonster m) {
}
break;
}
break;
m.createIntent();
return true;

// The Collector has all sorts of stuff, but you can skip his ult
case "TheCollector":
Expand Down Expand Up @@ -782,6 +790,10 @@ else if ((m.intent == AbstractMonster.Intent.ATTACK)) {
ReflectionHacks.setPrivate(m, m.getClass(), "splitTriggered", false);
break;

case "Maw":
ReflectionHacks.setPrivate(m, m.getClass(), "roared", true);
break;

// Special case guardian stuff
case "TheGuardian":
switch (m.nextMove) {
Expand Down
5 changes: 3 additions & 2 deletions src/main/java/actions/PlayExhaustedCardAction.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import com.megacrit.cardcrawl.actions.utility.QueueCardAction;
import com.megacrit.cardcrawl.actions.utility.UnlimboAction;
import com.megacrit.cardcrawl.cards.AbstractCard;
import com.megacrit.cardcrawl.cards.CardQueueItem;
import com.megacrit.cardcrawl.characters.AbstractPlayer;
import com.megacrit.cardcrawl.dungeons.AbstractDungeon;
import com.megacrit.cardcrawl.monsters.AbstractMonster;
Expand Down Expand Up @@ -55,7 +56,7 @@ public void update() {
tmp.unfadeOut();
tmp.freeToPlayOnce = true;
tmp.purgeOnUse = true;
tmp.target_x = (Settings.WIDTH / 2.0F - (200.0f * i * Settings.scale));
tmp.target_x = (Settings.WIDTH / 2.0F - (300.0f * Settings.scale));
tmp.target_y = (Settings.HEIGHT / 2.0F);
tmp.current_x = tmp.target_x;
tmp.current_y = tmp.target_y;
Expand All @@ -65,7 +66,7 @@ public void update() {
if (m != null) {
tmp.calculateCardDamage(m);
}
AbstractDungeon.player.useCard(tmp, m, card.energyOnUse);
AbstractDungeon.actionManager.cardQueue.add(0, new CardQueueItem(tmp, m, card.energyOnUse));
}

this.isDone = true;
Expand Down
Loading

0 comments on commit 1efc4b3

Please sign in to comment.