Skip to content

Commit

Permalink
Smithing
Browse files Browse the repository at this point in the history
  • Loading branch information
Jedi515 committed Jan 2, 2019
1 parent 26db9e5 commit 7eab869
Show file tree
Hide file tree
Showing 9 changed files with 280 additions and 25 deletions.
4 changes: 2 additions & 2 deletions ModTheSpire.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
"modid": "jedi",
"name": "Jedi Mod",
"author_list": ["Jedi#3970"],
"description": "NEW:\nUNLIMITED PAAAAWAAAAAAH!!11\n\nCHANGE:\nMeditation now only drops your focus if it was above 0. \n\nSomewhat running out of ideas to add for base characters since, well, i'm late for the party.",
"description": "NEW:\nSteam support: SOON\nBloody Hammer: free smithing.\n\nCHANGE:\nMemes.\n",
"credits": "Big thanks to JohnnyDevo and kiooeht for helping with the code, Reiji for lock-on memes, Reina for being cursed, Rhapsody for spreading positivity and my college teachers for teaching me how to Java.",
"version": "0.2.3",
"version": "0.2.4",
"sts_version": "12-20-2018",
"mts_version": "3.6.0",
"dependencies": ["basemod", "stslib"],
Expand Down
24 changes: 23 additions & 1 deletion src/jedi.java
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,6 @@ public static void initialize()
isConspireLoaded = Loader.isModLoaded("conspire");
isGluttonLoaded = Loader.isModLoaded("GluttonMod");
isBeakedLoaded = Loader.isModLoaded("beakedthecultist-sts");

}

// BaseMod.addPotion(potionClass, liquidColor, hybridColor, spotsColor, potionID);
Expand Down Expand Up @@ -100,11 +99,14 @@ public void receiveEditCards()
BaseMod.addCard(new Fear());
BaseMod.addCard(new Hate());
BaseMod.addCard(new Suffering());
//WORK IT / MAKE IT / DO IT / MAKES US
BaseMod.addCard(new Harder());
BaseMod.addCard(new Better());
BaseMod.addCard(new Faster());
BaseMod.addCard(new Stronger());
//UNLIMITED PAAAWAAAAAAAH
BaseMod.addCard(new UnlimitedPower());
BaseMod.addCard(new BloodyHammer());

//Curses
BaseMod.addCard(new Frostbite());
Expand Down Expand Up @@ -190,4 +192,24 @@ public static AbstractCard returnTrulyRandomStrike()
}
return group.getRandomCard(true).makeCopy();
}

//As unused as it is now, will be useful for when kio makes customdiscovery action or something.
public CardGroup descriptionSearch(String[] keywords)
{
CardGroup toReturn = new CardGroup(CardGroup.CardGroupType.UNSPECIFIED);

for (AbstractCard c : CardLibrary.getAllCards())
{
for (String keyword : keywords)
{
if (c.rawDescription.toLowerCase().contains(keyword.toLowerCase()))
{
toReturn.addToBottom(c.makeStatEquivalentCopy());
//don't forget to markasseen when it pops on player screen
break;
}
}
}
return toReturn;
}
}
47 changes: 47 additions & 0 deletions src/mod/jedi/actions/RemoveSpecificOrbAction.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package mod.jedi.actions;

import com.megacrit.cardcrawl.actions.AbstractGameAction;
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 java.util.Collections;

public class RemoveSpecificOrbAction
extends AbstractGameAction
{
private AbstractOrb orb;

public RemoveSpecificOrbAction(AbstractOrb orb)
{
this.startDuration = this.duration = Settings.ACTION_DUR_FAST;
this.orb = orb;
this.actionType = ActionType.SPECIAL;
}

@Override
public void update()
{
if (this.duration == this.startDuration)
{
int position = AbstractDungeon.player.orbs.indexOf(this.orb);
if (position == -1)
{
this.isDone = true;
return;
}
for (int i = position + 1; i < AbstractDungeon.player.orbs.size(); ++i) {
Collections.swap(AbstractDungeon.player.orbs, i, i - 1);
}

AbstractDungeon.player.orbs.set(AbstractDungeon.player.orbs.size() - 1, new EmptyOrbSlot());

for (int i = position; i < AbstractDungeon.player.orbs.size(); ++i) {
((AbstractOrb) AbstractDungeon.player.orbs.get(i)).setSlot(i, AbstractDungeon.player.maxOrbs);
}
}
this.tickDuration();
}

}
92 changes: 92 additions & 0 deletions src/mod/jedi/actions/SmithInCombatAction.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
package mod.jedi.actions;

import com.evacipated.cardcrawl.mod.stslib.StSLib;
import com.megacrit.cardcrawl.actions.AbstractGameAction;
import com.megacrit.cardcrawl.cards.AbstractCard;
import com.megacrit.cardcrawl.characters.AbstractPlayer;
import com.megacrit.cardcrawl.core.Settings;
import com.megacrit.cardcrawl.dungeons.AbstractDungeon;
import mod.jedi.cards.red.UnlimitedPower;

import java.util.ArrayList;

public class SmithInCombatAction
extends AbstractGameAction
{
private ArrayList<AbstractCard> cannotUpgrade = new ArrayList();
private String updateBodyText = "Select a card for permanent upgrade";

public SmithInCombatAction()
{
this.duration = Settings.ACTION_DUR_FAST;
this.actionType = ActionType.SPECIAL;
}

@Override
public void update()
{
AbstractPlayer p = AbstractDungeon.player;
//Checks on if cards in hand can have their master deck equivalent upgraded

if (this.duration == Settings.ACTION_DUR_FAST) {
for (AbstractCard c : p.hand.group) {
AbstractCard masterC = StSLib.getMasterDeckEquivalent(c);
if ((masterC == null) || (!masterC.canUpgrade()) || (c instanceof UnlimitedPower)) {
this.cannotUpgrade.add(c);
}
}
// if no cards in hand can have their master deck version upgraded
if (this.cannotUpgrade.size() == p.hand.group.size()) {
this.isDone = true;
return;
}
// if only one can...
if (p.hand.group.size() - this.cannotUpgrade.size() == 1) {
for (AbstractCard c : p.hand.group) {
AbstractCard masterC = StSLib.getMasterDeckEquivalent(c);
if (masterC != null && masterC.canUpgrade()) {
masterC.upgrade();
if (c.canUpgrade()) {
c.upgrade();
}
c.superFlash();

this.isDone = true;
return;
}
}
}
// and now if there's more than one
p.hand.group.removeAll(this.cannotUpgrade);
AbstractDungeon.handCardSelectScreen.open(updateBodyText, 1, false, false, false, true);
this.tickDuration();
return;
}
if (!AbstractDungeon.handCardSelectScreen.wereCardsRetrieved)
{
for (AbstractCard c : AbstractDungeon.handCardSelectScreen.selectedCards.group)
{
if (c.canUpgrade())
{
c.upgrade();
}
p.hand.addToTop(c);
c.superFlash();
AbstractCard cardToSmith = StSLib.getMasterDeckEquivalent(c);
if (cardToSmith != null && cardToSmith.canUpgrade())
{
p.masterDeck.getSpecificCard(cardToSmith).upgrade();
}
}
for (AbstractCard c : this.cannotUpgrade)
{
p.hand.addToTop(c);
}
p.hand.refreshHandLayout();
}

AbstractDungeon.handCardSelectScreen.wereCardsRetrieved = true;
AbstractDungeon.handCardSelectScreen.selectedCards.group.clear();
this.isDone = true;
}
}
32 changes: 10 additions & 22 deletions src/mod/jedi/cards/blue/Bruteforce.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import com.megacrit.cardcrawl.orbs.EmptyOrbSlot;
import com.megacrit.cardcrawl.orbs.Lightning;
import com.megacrit.cardcrawl.vfx.combat.LightningEffect;
import mod.jedi.actions.RemoveSpecificOrbAction;

import java.util.Collections;

Expand All @@ -30,35 +31,34 @@ public class Bruteforce
public static final String UPGRADE_DESCRIPTION = cardStrings.UPGRADE_DESCRIPTION;
public static final int COST = 2;
public static final String IMG_PATH = "resources/jedi/images/cards/jedi_beta.png";
private int hitsTillBreak;
private DamageInfo info;

public Bruteforce()
{
super(ID, NAME, IMG_PATH, COST, DESCRIPTION, CardType.SKILL, CardColor.BLUE, CardRarity.RARE, CardTarget.ENEMY);
this.magicNumber = this.baseMagicNumber = 2;
this.magicNumber = this.baseMagicNumber = 3;
this.exhaust = true;
}


@Override
public void use(AbstractPlayer p, AbstractMonster m) {
this.hitsTillBreak = 0;
this.info = evokeInfo();
while (this.hitsTillBreak < this.magicNumber || (AbstractDungeon.getCurrRoom().monsters.areMonstersBasicallyDead()))
int hitsTillBreak = 0;
DamageInfo info = evokeInfo();
while (hitsTillBreak < this.magicNumber || (AbstractDungeon.getCurrRoom().monsters.areMonstersBasicallyDead()))
{
AbstractCreature mo = AbstractDungeon.getRandomMonster();
if (m == mo)
{
this.hitsTillBreak++;
hitsTillBreak++;
}
if (mo != null) {
float speedTime = 0.2F / (float)AbstractDungeon.player.orbs.size();
if (Settings.FAST_MODE) {
speedTime = 0.0F;
}

this.info.output = AbstractOrb.applyLockOn(mo, this.info.base);
AbstractDungeon.actionManager.addToBottom(new DamageAction(mo, this.info, AbstractGameAction.AttackEffect.NONE, true));
info.output = AbstractOrb.applyLockOn(mo, info.base);
AbstractDungeon.actionManager.addToBottom(new DamageAction(mo, info, AbstractGameAction.AttackEffect.NONE, true));
AbstractDungeon.actionManager.addToBottom(new VFXAction(new LightningEffect(mo.drawX, mo.drawY), speedTime));
AbstractDungeon.actionManager.addToBottom(new SFXAction("ORB_LIGHTNING_EVOKE"));
}
Expand All @@ -69,19 +69,7 @@ public void use(AbstractPlayer p, AbstractMonster m) {
{
if (o instanceof Lightning)
{
int position = AbstractDungeon.player.orbs.indexOf(o);
AbstractOrb orbSlot = new EmptyOrbSlot();

int i;
for(i = position + 1; i < AbstractDungeon.player.orbs.size(); ++i) {
Collections.swap(AbstractDungeon.player.orbs, i, i - 1);
}

AbstractDungeon.player.orbs.set(AbstractDungeon.player.orbs.size() - 1, orbSlot);

for(i = position; i < AbstractDungeon.player.orbs.size(); ++i) {
((AbstractOrb)AbstractDungeon.player.orbs.get(i)).setSlot(i, AbstractDungeon.player.maxOrbs);
}
AbstractDungeon.actionManager.addToBottom(new RemoveSpecificOrbAction(o));
return;
}
}
Expand Down
5 changes: 5 additions & 0 deletions src/mod/jedi/cards/green/StudyDiscard.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package mod.jedi.cards.green;

public class StudyDiscard
{
}
43 changes: 43 additions & 0 deletions src/mod/jedi/cards/green/StudyPoison.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package mod.jedi.cards.green;

import basemod.abstracts.CustomCard;
import com.megacrit.cardcrawl.characters.AbstractPlayer;
import com.megacrit.cardcrawl.core.CardCrawlGame;
import com.megacrit.cardcrawl.helpers.GameDictionary;
import com.megacrit.cardcrawl.localization.CardStrings;
import com.megacrit.cardcrawl.monsters.AbstractMonster;

//I'm just gonna wait till kio makes customdiscovery really.
public class StudyPoison
extends CustomCard
{
public static final String ID = "jedi:studypoison";
private static final CardStrings cardStrings = CardCrawlGame.languagePack.getCardStrings(ID);
public static final String NAME = cardStrings.NAME;
public static final String DESCRIPTION = cardStrings.DESCRIPTION;
public static final String UPGRADE_DESCRIPTION = cardStrings.UPGRADE_DESCRIPTION;
public static final int COST = 1;
public static final String IMG_PATH = "resources/jedi/images/cards/jedi_beta.png";

public StudyPoison()
{
super(ID, NAME, IMG_PATH, COST, DESCRIPTION, CardType.SKILL, CardColor.GREEN, CardRarity.UNCOMMON, CardTarget.NONE);
this.exhaust = true;
}

public void use(AbstractPlayer p, AbstractMonster m)
{
// GameDictionary.POISON;
}

public void upgrade()
{
if(!this.upgraded)
{
upgradeName();
this.exhaust = false;
this.rawDescription = UPGRADE_DESCRIPTION;
initializeDescription();
}
}
}
52 changes: 52 additions & 0 deletions src/mod/jedi/cards/red/BloodyHammer.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package mod.jedi.cards.red;

import basemod.abstracts.CustomCard;
import com.megacrit.cardcrawl.actions.animations.VFXAction;
import com.megacrit.cardcrawl.actions.common.LoseHPAction;
import com.megacrit.cardcrawl.characters.AbstractPlayer;
import com.megacrit.cardcrawl.core.CardCrawlGame;
import com.megacrit.cardcrawl.core.Settings;
import com.megacrit.cardcrawl.dungeons.AbstractDungeon;
import com.megacrit.cardcrawl.localization.CardStrings;
import com.megacrit.cardcrawl.monsters.AbstractMonster;
import com.megacrit.cardcrawl.vfx.UpgradeShineEffect;
import mod.jedi.actions.SmithInCombatAction;

public class BloodyHammer
extends CustomCard
{
public static final String ID = "jedi:bloodyhammer";
private static final CardStrings cardStrings = CardCrawlGame.languagePack.getCardStrings(ID);
public static final String NAME = cardStrings.NAME;
public static final String DESCRIPTION = cardStrings.DESCRIPTION;
public static final String UPGRADE_DESCRIPTION = cardStrings.UPGRADE_DESCRIPTION;
public static final int COST = 1;
public static final String IMG_PATH = "resources/jedi/images/cards/jedi_beta.png";

public BloodyHammer()
{
super(ID, NAME, IMG_PATH, COST, DESCRIPTION, CardType.SKILL, CardColor.RED, CardRarity.RARE, CardTarget.NONE);
this.magicNumber = this.baseMagicNumber = 8;
this.purgeOnUse = true;
this.exhaust = true;
}

public void use(AbstractPlayer p, AbstractMonster m)
{
AbstractDungeon.actionManager.addToBottom(new LoseHPAction(p, p, this.magicNumber));
AbstractDungeon.actionManager.addToBottom(new SmithInCombatAction());
AbstractDungeon.actionManager.addToBottom(new VFXAction(new UpgradeShineEffect(Settings.WIDTH/2, Settings.HEIGHT/2)));
}

public void upgrade()
{
if(!this.upgraded)
{
upgradeName();
this.purgeOnUse = false;
this.exhaust = true;
this.rawDescription = UPGRADE_DESCRIPTION;
initializeDescription();
}
}
}
6 changes: 6 additions & 0 deletions src/resources/jedi/localization/cardStrings.json
Original file line number Diff line number Diff line change
Expand Up @@ -162,5 +162,11 @@
"NAME": "Bruteforce",
"DESCRIPTION": "Can only be used if you have Lightning Channeled. NL Evoke your rightmost Lightning Orb till it hits selected enemy !M! times.",
"UPGRADE_DESCRIPTION": "No Lightning Orbs channeled!"
},
"jedi:bloodyhammer":
{
"NAME": "Bloody Hammer",
"DESCRIPTION": "Lose !M! HP. NL Permanently upgrade a card in your hand. NL Purge.",
"UPGRADE_DESCRIPTION": "Lose !M! HP. NL Permanently upgrade a card in your hand. NL Exhaust."
}
}

0 comments on commit 7eab869

Please sign in to comment.