Skip to content

Commit e28599e

Browse files
committed
Greed ooze relic and event and vfx
1 parent 05ba080 commit e28599e

18 files changed

Lines changed: 401 additions & 24 deletions

SlimeboundMod.jar

40.9 KB
Binary file not shown.

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
<groupId>slimebound</groupId>
55
<artifactId>slimebound</artifactId>
6-
<version>v0.11.4</version>
6+
<version>v1.0.0</version>
77
<packaging>jar</packaging>
88

99
<name>Slimebound Mod</name>

src/main/java/slimebound/SlimeboundMod.java

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,16 @@
1818
import com.megacrit.cardcrawl.core.CardCrawlGame;
1919
import com.megacrit.cardcrawl.core.Settings;
2020
import com.megacrit.cardcrawl.dungeons.AbstractDungeon;
21+
import com.megacrit.cardcrawl.dungeons.Exordium;
2122
import com.megacrit.cardcrawl.dungeons.TheBeyond;
2223
import com.megacrit.cardcrawl.dungeons.TheCity;
2324
import com.megacrit.cardcrawl.helpers.CardLibrary;
2425
import com.megacrit.cardcrawl.helpers.ModHelper;
2526
import com.megacrit.cardcrawl.localization.*;
2627
import com.megacrit.cardcrawl.monsters.AbstractMonster;
28+
import com.megacrit.cardcrawl.monsters.exordium.AcidSlime_L;
29+
import com.megacrit.cardcrawl.monsters.exordium.SlimeBoss;
30+
import com.megacrit.cardcrawl.monsters.exordium.SpikeSlime_L;
2731
import com.megacrit.cardcrawl.orbs.AbstractOrb;
2832
import com.megacrit.cardcrawl.powers.AbstractPower;
2933
import com.megacrit.cardcrawl.rooms.AbstractRoom;
@@ -37,6 +41,7 @@
3741
import slimebound.characters.SlimeboundCharacter;
3842
import slimebound.dailymods.AllSplit;
3943
import slimebound.events.Hunted;
44+
import slimebound.events.WorldOfGoopSlimebound;
4045
import slimebound.helpers.PoisonVariable;
4146
import slimebound.helpers.SelfDamageVariable;
4247
import slimebound.helpers.SlimedVariable;
@@ -216,6 +221,7 @@ public void receiveEditRelics() {
216221
BaseMod.addRelicToCustomPool(new StudyCardRelic(), AbstractCardEnum.SLIMEBOUND);
217222
BaseMod.addRelicToCustomPool(new SlimedSkullRelic(), AbstractCardEnum.SLIMEBOUND);
218223
BaseMod.addRelicToCustomPool(new ScrapOozeRelic(), AbstractCardEnum.SLIMEBOUND);
224+
BaseMod.addRelicToCustomPool(new GreedOozeRelic(), AbstractCardEnum.SLIMEBOUND);
219225

220226
}
221227

@@ -548,6 +554,8 @@ public void receivePostInitialize() {
548554
BaseMod.addEvent(Hunted.ID, Hunted.class, TheCity.ID);
549555
BaseMod.addEvent(Hunted.ID, Hunted.class, TheBeyond.ID);
550556

557+
BaseMod.addEvent(WorldOfGoopSlimebound.ID, WorldOfGoopSlimebound.class, Exordium.ID);
558+
551559
}
552560

553561

@@ -562,7 +570,7 @@ public void receiveCardUsed(AbstractCard c) {
562570
}
563571

564572

565-
this.printEnemies();
573+
// this.printEnemies();
566574

567575

568576

@@ -571,7 +579,7 @@ public void receiveCardUsed(AbstractCard c) {
571579

572580
public boolean receivePreMonsterTurn(AbstractMonster abstractMonster) {
573581
slimeDelay = true;
574-
this.printEnemies();
582+
// this.printEnemies();
575583

576584
return true;
577585
}
@@ -584,10 +592,11 @@ public void receiveCustomModeMods(List<CustomMod> l) {
584592
public void receiveOnBattleStart(AbstractRoom room) {
585593
powersPlayedThisCombat = 0;
586594
if (ModHelper.isModEnabled(AllSplit.ID))
587-
logger.info("Daily Mod detecthed");
595+
//logger.info("Daily Mod detecthed");
588596
for (AbstractMonster m : AbstractDungeon.getMonsters().monsters){
589-
logger.info("Daily Mod adding buff to " + m.name);
590-
this.printEnemies();
597+
if (m.id != AcidSlime_L.ID && m.id != SpikeSlime_L.ID && m.id != SlimeBoss.ID)
598+
//logger.info("Daily Mod adding buff to " + m.name);
599+
//this.printEnemies();
591600
AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(m, m, new SplitDailyTriggerPower(m, 1),1));
592601

593602
}

src/main/java/slimebound/events/WorldOfGoopSlimebound.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,10 @@
1717
import com.megacrit.cardcrawl.vfx.RainingGoldEffect;
1818
import com.megacrit.cardcrawl.vfx.combat.FlashAtkImgEffect;
1919
import slimebound.relics.AggressiveSlimeRelic;
20+
import slimebound.relics.GreedOozeRelic;
2021

2122
public class WorldOfGoopSlimebound extends AbstractImageEvent {
22-
public static final String ID = "World of Goop";
23+
public static final String ID = "Slimebound:WorldofGoop";
2324
private static final EventStrings eventStrings;
2425
public static final String NAME;
2526
public static final String[] DESCRIPTIONS;
@@ -47,8 +48,8 @@ public WorldOfGoopSlimebound() {
4748
this.goldLoss = AbstractDungeon.player.gold;
4849
}
4950

50-
this.imageEventText.updateDialogOption(0, "[Gather Gold] #gGain #g75 #gGold.");
51-
this.imageEventText.updateDialogOption(1, "[Recruit] Gain #gGreed #gOoze.");
51+
this.imageEventText.updateDialogOption(0, OPTIONS[0]);
52+
this.imageEventText.updateDialogOption(1, OPTIONS[1]);
5253
}
5354

5455
public void onEnterRoom() {
@@ -65,16 +66,17 @@ protected void buttonEffect(int buttonPressed) {
6566
case 0:
6667
this.imageEventText.updateBodyText(GOLD_DIALOG);
6768
this.imageEventText.clearAllDialogs();
69+
this.imageEventText.setDialogOption(OPTIONS[2]);
6870
AbstractDungeon.effectList.add(new RainingGoldEffect(this.gold));
6971
AbstractDungeon.player.gainGold(this.gold);
70-
imageEventText.updateBodyText("You exit the invigorating slime bath, fishing out the #ygold, leaving the creature with a sad look upon its amorphous face.");
72+
imageEventText.updateBodyText(GOLD_DIALOG);
7173
this.screen = WorldOfGoopSlimebound.CurScreen.RESULT;
7274
return;
7375
case 1:
74-
imageEventText.updateBodyText("You succeed in negotiating a deal with the creature to provide it with more shiny metal if it will aid you in your quest. NL You and your new-found #gfriend exit the slime bath together.");
76+
imageEventText.updateBodyText(LEAVE_DIALOG);
7577
this.imageEventText.clearAllDialogs();
76-
this.imageEventText.setDialogOption("Leave");
77-
AbstractDungeon.getCurrRoom().spawnRelicAndObtain(Settings.WIDTH / 2.0f, Settings.HEIGHT / 2.0f, RelicLibrary.getRelic(AggressiveSlimeRelic.ID).makeCopy());
78+
this.imageEventText.setDialogOption(OPTIONS[2]);
79+
AbstractDungeon.getCurrRoom().spawnRelicAndObtain(Settings.WIDTH / 2.0f, Settings.HEIGHT / 2.0f, RelicLibrary.getRelic(GreedOozeRelic.ID).makeCopy());
7880

7981
this.screen = WorldOfGoopSlimebound.CurScreen.RESULT;
8082
return;
@@ -88,7 +90,7 @@ protected void buttonEffect(int buttonPressed) {
8890
}
8991

9092
static {
91-
eventStrings = CardCrawlGame.languagePack.getEventString("World of Goop");
93+
eventStrings = CardCrawlGame.languagePack.getEventString("Slimebound:WorldofGoop");
9294
NAME = eventStrings.NAME;
9395
DESCRIPTIONS = eventStrings.DESCRIPTIONS;
9496
OPTIONS = eventStrings.OPTIONS;
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
package slimebound.orbs;
2+
3+
4+
import com.badlogic.gdx.Gdx;
5+
import com.badlogic.gdx.graphics.Color;
6+
import com.badlogic.gdx.graphics.Texture;
7+
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
8+
import com.megacrit.cardcrawl.actions.AbstractGameAction;
9+
import com.megacrit.cardcrawl.core.Settings;
10+
import com.megacrit.cardcrawl.dungeons.AbstractDungeon;
11+
import com.megacrit.cardcrawl.orbs.AbstractOrb;
12+
import com.megacrit.cardcrawl.vfx.ChestShineEffect;
13+
import com.megacrit.cardcrawl.vfx.scene.SpookyChestEffect;
14+
import slimebound.actions.SlimeAutoAttack;
15+
import slimebound.relics.GreedOozeRelic;
16+
import slimebound.relics.ScrapOozeRelic;
17+
import slimebound.vfx.*;
18+
19+
20+
public class GreedOozeSlime
21+
extends SpawnedSlime {
22+
public static final String ID = "Slimebound:GreedOozeSlime";
23+
24+
public float attachmentX;
25+
public float attachmentY;
26+
27+
private GoldCoinsParticle goldcoinsVFX;
28+
private float shinyTimer;
29+
30+
31+
public GreedOozeSlime() {
32+
33+
super(ID, -17,new Color (1F,1F,0F/255F,100F),"images/monsters/theBottom/slimeS/skeleton.atlas","images/monsters/theBottom/slimeS/skeleton.json","idle",.85F,new Color(1F,1F,30F/255F,2F), 0, 3, true, new Color(1F,1F,30F/255F, 1), SlimeFlareEffect.OrbFlareColor.AGGRESSIVE, new Texture("SlimeboundImages/orbs/4.png"), "SlimeboundImages/orbs/aggressive.png");
34+
spawnVFX();
35+
if (AbstractDungeon.player.hasRelic(GreedOozeRelic.ID)){
36+
applyUniqueFocus(AbstractDungeon.player.getRelic(GreedOozeRelic.ID).counter);
37+
}
38+
39+
}
40+
41+
public void updateDescription() {
42+
this.description = this.descriptions[0] + this.passiveAmount + this.descriptions[1];
43+
}
44+
45+
46+
public void postSpawnEffects(){
47+
this.goldcoinsVFX = new GoldCoinsParticle(this);
48+
AbstractDungeon.effectList.add(this.goldcoinsVFX);
49+
}
50+
51+
@Override
52+
public void onEvoke() {
53+
super.onEvoke();
54+
this.goldcoinsVFX.finish();
55+
}
56+
57+
public void activateEffectUnique() {
58+
59+
60+
AbstractDungeon.actionManager.addToBottom(new SlimeAutoAttack(AbstractDungeon.player,this.passiveAmount, AbstractGameAction.AttackEffect.SLASH_HORIZONTAL,this,false,false,false,0,false,0,false));
61+
62+
}
63+
64+
@Override
65+
public void render(SpriteBatch sb) {
66+
super.render(sb);
67+
this.attachmentX = this.skeleton.findBone("eyeback").getX();
68+
this.attachmentY = this.skeleton.findBone("eyeback").getY();
69+
70+
updateShiny();
71+
}
72+
73+
private void updateShiny() {
74+
this.shinyTimer -= Gdx.graphics.getDeltaTime();
75+
if (this.shinyTimer < 0.0F && !Settings.DISABLE_EFFECTS) {
76+
this.shinyTimer = 0.2F;
77+
AbstractDungeon.topLevelEffects.add(new GreedGlowParticle(this));
78+
}
79+
80+
81+
}
82+
public AbstractOrb makeCopy() {
83+
return new GreedOozeSlime();
84+
}
85+
}
86+
87+

src/main/java/slimebound/orbs/SpawnedSlime.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,9 @@ public void onEvoke() {
254254
if (this instanceof ScrapOozeSlime){
255255
AbstractDungeon.actionManager.addToBottom(new SlimeSpawnAction(new slimebound.orbs.ScrapOozeSlime(), false, false));
256256

257+
} else if (this instanceof GreedOozeSlime){
258+
AbstractDungeon.actionManager.addToBottom(new SlimeSpawnAction(new slimebound.orbs.GreedOozeSlime(), false, false));
259+
257260
} else {
258261
AbstractDungeon.actionManager.addToBottom(new HealAction(AbstractDungeon.player, AbstractDungeon.player, 3));
259262
}

src/main/java/slimebound/powers/SplitDailyTriggerPower.java

Lines changed: 38 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ public int onAttacked(DamageInfo info, int damageAmount) {
8787
public void atStartOfTurn() {
8888
if (isActive) {
8989
AbstractMonster m = (AbstractMonster) this.owner;
90-
float saveX = m.hb_x;
90+
float saveX = m.hb.cX;
9191
float saveY = AbstractDungeon.floorY;
9292
AbstractDungeon.actionManager.addToBottom(new CannotLoseAction());
9393
AbstractDungeon.actionManager.addToBottom(new AnimateShakeAction(m, 1.0F, 0.1F));
@@ -99,40 +99,70 @@ public void atStartOfTurn() {
9999
//AbstractDungeon.getMonsters().monsters.remove(m);
100100

101101
if (m.currentHealth < 20) {
102-
AbstractMonster mini1 = new AcidSlime_S(saveX - 55F, MathUtils.random(-4.0F, 4.0F), 0);
102+
AbstractMonster mini1 = new AcidSlime_S(saveX - 55F, -4F, 0);
103103
mini1.maxHealth = m.currentHealth;
104104
mini1.currentHealth = m.currentHealth;
105+
mini1.drawX = m.drawX +55F;
106+
105107
mini1.usePreBattleAction();
106108
mini1.useUniversalPreBattleAction();
107-
108-
AbstractMonster mini2 = new SpikeSlime_S(saveX + 55F, MathUtils.random(-4.0F, 4.0F), 0);
109+
AbstractMonster mini2 = new SpikeSlime_S(saveX + 55F, 4F, 0);
109110
mini2.maxHealth = m.currentHealth;
110111
mini2.currentHealth = m.currentHealth;
112+
mini2.drawX = m.drawX -55F;
111113
mini2.usePreBattleAction();
112114
mini2.useUniversalPreBattleAction();
113115

114116
AbstractDungeon.actionManager.addToBottom(new SpawnMonsterAction(mini1, false));
115117
AbstractDungeon.actionManager.addToBottom(new SpawnMonsterAction(mini2, false));
116118

117119
} else if (m.currentHealth < 40) {
118-
AbstractDungeon.actionManager.addToBottom(new SpawnMonsterAction(new AcidSlime_M(saveX - 134.0F, MathUtils.random(-4.0F, 4.0F), 0, m.currentHealth), false));
119-
AbstractDungeon.actionManager.addToBottom(new SpawnMonsterAction(new SpikeSlime_M(saveX + 134.0F, MathUtils.random(-4.0F, 4.0F), 0, m.currentHealth), false));
120+
AbstractMonster mini1 = new AcidSlime_M(saveX - 70F, -4F, 0,m.currentHealth);
121+
122+
mini1.drawX = m.drawX +70F;
123+
124+
mini1.usePreBattleAction();
125+
mini1.useUniversalPreBattleAction();
126+
AbstractMonster mini2 = new SpikeSlime_M(saveX + 70F, 4F, 0,m.currentHealth);
127+
128+
mini2.drawX = m.drawX -70F;
129+
mini2.usePreBattleAction();
130+
mini2.useUniversalPreBattleAction();
131+
132+
AbstractDungeon.actionManager.addToBottom(new SpawnMonsterAction(mini1, false));
133+
AbstractDungeon.actionManager.addToBottom(new SpawnMonsterAction(mini2, false));
120134
} else if (m.currentHealth < 80) {
121-
AbstractDungeon.actionManager.addToBottom(new SpawnMonsterAction(new AcidSlime_L(saveX - 134.0F, MathUtils.random(-4.0F, 4.0F), 0, m.currentHealth), false));
122-
AbstractDungeon.actionManager.addToBottom(new SpawnMonsterAction(new SpikeSlime_L(saveX + 134.0F, MathUtils.random(-4.0F, 4.0F), 0, m.currentHealth), false));
135+
AbstractMonster mini1 = new AcidSlime_L(saveX - 100F, -4F, 0,m.currentHealth);
136+
137+
mini1.drawX = m.drawX +100F;
138+
139+
mini1.usePreBattleAction();
140+
mini1.useUniversalPreBattleAction();
141+
AbstractMonster mini2 = new SpikeSlime_L(saveX + 100F, 4F, 0,m.currentHealth);
142+
143+
mini2.drawX = m.drawX -100F;
144+
mini2.usePreBattleAction();
145+
mini2.useUniversalPreBattleAction();
146+
147+
AbstractDungeon.actionManager.addToBottom(new SpawnMonsterAction(mini1, false));
148+
AbstractDungeon.actionManager.addToBottom(new SpawnMonsterAction(mini2, false));
123149
} else {
124150
AbstractMonster boss1 = new SlimeBoss();
125151
// boss1.hb_x = saveX + 134.0F;
126152
boss1.drawX = m.drawX + 134.0F;
127153
boss1.maxHealth = m.currentHealth;
128154
boss1.currentHealth = m.currentHealth;
129155

156+
boss1.usePreBattleAction();
157+
boss1.useUniversalPreBattleAction();
130158
AbstractMonster boss2 = new SlimeBoss();
131159
//boss2.hb_x = saveX - 134.0F;
132160
boss2.drawX = m.drawX - 134.0F;
133161
boss2.maxHealth = m.currentHealth;
134162
boss2.currentHealth = m.currentHealth;
135163

164+
boss2.usePreBattleAction();
165+
boss2.useUniversalPreBattleAction();
136166
AbstractDungeon.actionManager.addToBottom(new SpawnMonsterAction(boss1, false));
137167
AbstractDungeon.actionManager.addToBottom(new SpawnMonsterAction(boss2, false));
138168
}

src/main/java/slimebound/relics/AggressiveSlimeRelic.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public class AggressiveSlimeRelic extends CustomRelic {
1515

1616
public AggressiveSlimeRelic() {
1717
super(ID, new Texture(slimebound.SlimeboundMod.getResourcePath(IMG_PATH)), new Texture(slimebound.SlimeboundMod.getResourcePath(OUTLINE_IMG_PATH)),
18-
RelicTier.SPECIAL, LandingSound.FLAT);
18+
RelicTier.COMMON, LandingSound.FLAT);
1919
}
2020

2121
@Override

0 commit comments

Comments
 (0)