From 7d650ebbc39017d0be6dc88e1c61805b9121edd3 Mon Sep 17 00:00:00 2001
From: Electroblob77 <35599699+Electroblob77@users.noreply.github.com>
Date: Thu, 11 Jun 2020 22:20:04 +0100
Subject: [PATCH] Add charge-up mechanic for more powerful spells - Implements
spell charge-up in ItemWand - Assigns chargeup values in json files for
spells that should have one - Adds a charge meter to the crosshair in
first-person - Updates some javadoc comments appropriately
---
.../wizardry/client/gui/GuiSpellDisplay.java | 112 ++++++++++++++----
.../wizardry/event/SpellCastEvent.java | 6 +-
.../wizardry/item/ISpellCastingItem.java | 3 +-
.../electroblob/wizardry/item/ItemWand.java | 50 +++++---
.../ebwizardry/spells/arcane_jammer.json | 2 +-
.../assets/ebwizardry/spells/arrow_rain.json | 2 +-
.../assets/ebwizardry/spells/black_hole.json | 2 +-
.../assets/ebwizardry/spells/blizzard.json | 2 +-
.../ebwizardry/spells/chain_lightning.json | 2 +-
.../ebwizardry/spells/clairvoyance.json | 2 +-
.../ebwizardry/spells/conjure_armour.json | 2 +-
.../assets/ebwizardry/spells/containment.json | 2 +-
.../ebwizardry/spells/cure_effects.json | 2 +-
.../spells/curse_of_enfeeblement.json | 2 +-
.../spells/curse_of_soulbinding.json | 2 +-
.../ebwizardry/spells/curse_of_undeath.json | 2 +-
.../assets/ebwizardry/spells/decay.json | 2 +-
.../assets/ebwizardry/spells/decoy.json | 2 +-
.../ebwizardry/spells/diamondflesh.json | 2 +-
.../assets/ebwizardry/spells/earthquake.json | 2 +-
.../assets/ebwizardry/spells/entrapment.json | 2 +-
.../assets/ebwizardry/spells/fire_breath.json | 2 +-
.../ebwizardry/spells/fire_resistance.json | 2 +-
.../assets/ebwizardry/spells/flaming_axe.json | 2 +-
.../ebwizardry/spells/font_of_mana.json | 2 +-
.../ebwizardry/spells/font_of_vitality.json | 2 +-
.../assets/ebwizardry/spells/forcefield.json | 2 +-
.../ebwizardry/spells/forest_of_thorns.json | 2 +-
.../ebwizardry/spells/forests_curse.json | 2 +-
.../assets/ebwizardry/spells/frost_axe.json | 2 +-
.../ebwizardry/spells/greater_fireball.json | 2 +-
.../ebwizardry/spells/greater_heal.json | 2 +-
.../ebwizardry/spells/greater_ward.json | 2 +-
.../assets/ebwizardry/spells/group_heal.json | 2 +-
.../assets/ebwizardry/spells/hailstorm.json | 2 +-
.../ebwizardry/spells/healing_aura.json | 2 +-
.../assets/ebwizardry/spells/ice_age.json | 2 +-
.../assets/ebwizardry/spells/ice_lance.json | 2 +-
.../ebwizardry/spells/invisibility.json | 2 +-
.../ebwizardry/spells/invoke_weather.json | 2 +-
.../assets/ebwizardry/spells/ironflesh.json | 2 +-
.../ebwizardry/spells/lightning_bolt.json | 2 +-
.../ebwizardry/spells/lightning_disc.json | 2 +-
.../ebwizardry/spells/lightning_hammer.json | 2 +-
.../ebwizardry/spells/lightning_web.json | 2 +-
.../assets/ebwizardry/spells/meteor.json | 2 +-
.../ebwizardry/spells/mind_control.json | 2 +-
.../assets/ebwizardry/spells/paralysis.json | 2 +-
.../assets/ebwizardry/spells/petrify.json | 2 +-
.../ebwizardry/spells/plague_of_darkness.json | 2 +-
.../assets/ebwizardry/spells/possession.json | 2 +-
.../spells/ray_of_purification.json | 2 +-
.../ebwizardry/spells/remove_curse.json | 2 +-
.../ebwizardry/spells/resurrection.json | 2 +-
.../ebwizardry/spells/ring_of_fire.json | 2 +-
.../assets/ebwizardry/spells/satiety.json | 2 +-
.../assets/ebwizardry/spells/shockwave.json | 2 +-
.../ebwizardry/spells/silverfish_swarm.json | 2 +-
.../assets/ebwizardry/spells/slow_time.json | 2 +-
.../ebwizardry/spells/spectral_pathway.json | 2 +-
.../ebwizardry/spells/spider_swarm.json | 2 +-
.../assets/ebwizardry/spells/stormcloud.json | 2 +-
.../ebwizardry/spells/summon_blaze.json | 2 +-
.../ebwizardry/spells/summon_ice_giant.json | 2 +-
.../ebwizardry/spells/summon_ice_wraith.json | 2 +-
.../ebwizardry/spells/summon_iron_golem.json | 2 +-
.../spells/summon_lightning_wraith.json | 2 +-
.../ebwizardry/spells/summon_phoenix.json | 2 +-
.../spells/summon_shadow_wraith.json | 2 +-
.../spells/summon_skeleton_legion.json | 2 +-
.../spells/summon_spirit_horse.json | 2 +-
.../spells/summon_storm_elemental.json | 2 +-
.../spells/summon_wither_skeleton.json | 2 +-
.../ebwizardry/spells/thunderstorm.json | 2 +-
.../assets/ebwizardry/spells/tornado.json | 2 +-
.../assets/ebwizardry/spells/transience.json | 2 +-
.../ebwizardry/spells/transportation.json | 2 +-
.../ebwizardry/spells/vanishing_box.json | 2 +-
.../assets/ebwizardry/spells/vex_swarm.json | 2 +-
.../ebwizardry/spells/wall_of_frost.json | 2 +-
.../ebwizardry/spells/water_breathing.json | 2 +-
.../ebwizardry/spells/wither_skull.json | 2 +-
.../ebwizardry/spells/zombie_apocalypse.json | 2 +-
.../textures/gui/spell_charge_meter.png | Bin 0 -> 3511 bytes
84 files changed, 204 insertions(+), 125 deletions(-)
create mode 100644 src/main/resources/assets/ebwizardry/textures/gui/spell_charge_meter.png
diff --git a/src/main/java/electroblob/wizardry/client/gui/GuiSpellDisplay.java b/src/main/java/electroblob/wizardry/client/gui/GuiSpellDisplay.java
index 96a7121e..93e25d45 100644
--- a/src/main/java/electroblob/wizardry/client/gui/GuiSpellDisplay.java
+++ b/src/main/java/electroblob/wizardry/client/gui/GuiSpellDisplay.java
@@ -44,7 +44,8 @@ import java.util.Map.Entry;
public class GuiSpellDisplay {
private static final ResourceLocation INDEX = new ResourceLocation(Wizardry.MODID, "textures/gui/spell_hud/_index.json");
-
+ private static final ResourceLocation CHARGE_METER = new ResourceLocation(Wizardry.MODID, "textures/gui/spell_charge_meter.png");
+
/** A map which stores all loaded HUD skin objects. This gets wiped on resource pack reload and repopulated with
* mappings as specified by {@code _index.json} (these stack between resource packs). The keys in the map correspond
* to the keys in {@code _index.json}, and are sorted in that order, with skins belonging to resource packs sorted
@@ -55,6 +56,11 @@ public class GuiSpellDisplay {
private static final Gson gson = new Gson();
private static final Random random = new Random();
+ /** Width of the charge meter. */
+ private static final int CHARGE_METER_WIDTH = 25;
+ /** Height of the charge meter. */
+ private static final int CHARGE_METER_HEIGHT = 9;
+
/** Width and height of the spell icon (very unlikely to change!) */
private static final int SPELL_ICON_SIZE = 32;
/** Number of ticks the spell switching animation plays for. */
@@ -99,12 +105,7 @@ public class GuiSpellDisplay {
@SubscribeEvent
public static void draw(RenderGameOverlayEvent.Post event){
- if(event.getType() != RenderGameOverlayEvent.ElementType.TEXT
- && event.getType() != RenderGameOverlayEvent.ElementType.HOTBAR) return;
-
- Minecraft mc = Minecraft.getMinecraft();
-
- EntityPlayer player = mc.player;
+ EntityPlayer player = Minecraft.getMinecraft().player;
if(player.isSpectator()) return; // Spectators shouldn't have the spell HUD!
@@ -117,12 +118,74 @@ public class GuiSpellDisplay {
wand = player.getHeldItemOffhand();
mainHand = false;
// If the player isn't holding a spellcasting item that shows the HUD, then nothing else needs to be done.
- if(!(wand.getItem() instanceof ISpellCastingItem && ((ISpellCastingItem)wand.getItem()).showSpellHUD(player, wand))) return;
+ if(!(wand.getItem() instanceof ISpellCastingItem && ((ISpellCastingItem)wand.getItem()).showSpellHUD(player, wand)))
+ return;
}
int width = event.getResolution().getScaledWidth();
int height = event.getResolution().getScaledHeight();
+ switch(event.getType()){
+ case CROSSHAIRS:
+ renderChargeMeter(player, wand, width, height, event.getPartialTicks());
+ break;
+ case HOTBAR:
+ renderSpellHUD(player, wand, mainHand, width, height, event.getPartialTicks(), false);
+ break;
+ case TEXT:
+ renderSpellHUD(player, wand, mainHand, width, height, event.getPartialTicks(), true);
+ break;
+ }
+
+ }
+
+ /**
+ * Renders the spell charge meter around the crosshairs.
+ * @param player A reference to the client player
+ * @param wand The wand the HUD is for
+ * @param width The width of the screen
+ * @param height The height of the screen
+ * @param partialTicks The current partial tick time
+ */
+ private static void renderChargeMeter(EntityPlayer player, ItemStack wand, int width, int height, float partialTicks){
+
+ if(Minecraft.getMinecraft().gameSettings.showDebugInfo) return; // Don't show charge meter in the debug screen
+ if(Minecraft.getMinecraft().gameSettings.thirdPersonView != 0) return; // Don't show in third person
+
+ Spell spell = WandHelper.getCurrentSpell(wand);
+
+ if(spell.getChargeup() <= 0) return;
+
+ // WHY WHY WHY are these methods named so misleadingly?! Sort yourselves out MCP!
+ // (getItemInUseCount returns the max count MINUS the use count, and getItemInUseMaxCount returns the use count)
+ if(player.getItemInUseMaxCount() == 0) return; // Not charging
+ float charge = (player.getItemInUseMaxCount() + partialTicks) / spell.getChargeup();
+ if(charge > 1) return; // Done charging
+
+ Minecraft.getMinecraft().renderEngine.bindTexture(CHARGE_METER);
+
+ int x1 = width/2 - CHARGE_METER_WIDTH/2;
+ int y = height/2 - CHARGE_METER_HEIGHT/2;
+ int w = (int)(CHARGE_METER_WIDTH/2 * charge);
+ int u = CHARGE_METER_WIDTH - w;
+
+ DrawingUtils.drawTexturedRect(x1, y, 0, 0, w, CHARGE_METER_HEIGHT, 32, 32);
+ DrawingUtils.drawTexturedRect(x1 + u, y, u, 0, w, CHARGE_METER_HEIGHT, 32, 32);
+
+ }
+
+ /**
+ * Renders the main spell HUD in the corner of the screen.
+ * @param player A reference to the client player
+ * @param wand The wand the HUD is for
+ * @param mainHand True if the wand is in the player's main hand, false if it is in their offhand
+ * @param width The width of the screen
+ * @param height The height of the screen
+ * @param partialTicks The current partial tick time
+ * @param textLayer True to render the text layer, false to render the background (hotbar layer)
+ */
+ private static void renderSpellHUD(EntityPlayer player, ItemStack wand, boolean mainHand, int width, int height, float partialTicks, boolean textLayer){
+
boolean flipX = Wizardry.settings.spellHUDPosition.flipX;
boolean flipY = Wizardry.settings.spellHUDPosition.flipY;
@@ -130,16 +193,16 @@ public class GuiSpellDisplay {
// ............. | This bit is true if the wand is on the left, false if it is on the right
flipX = flipX == ((mainHand ? player.getPrimaryHand() : player.getPrimaryHand().opposite()) == EnumHandSide.LEFT);
}
-
+
Skin skin = skins.get(Wizardry.settings.spellHUDSkin);
-
+
if(skin == null){
-
+
Wizardry.logger.info("The spell HUD skin '" + Wizardry.settings.spellHUDSkin + "' specified in the config"
+ " did not match any of the loaded skins; using the default skin as a fallback.");
-
+
skin = skins.get(Settings.DEFAULT_HUD_SKIN_KEY);
-
+
if(skin == null){
Wizardry.logger.warn("The default spell HUD skin is missing! A resource pack must have overridden it"
+ " with an invalid JSON file (default.json), please try again without any resource packs.");
@@ -148,7 +211,7 @@ public class GuiSpellDisplay {
}
GlStateManager.pushMatrix();
-
+
// 'Origin' of the spell hud (bottom left corner of the actual texture, always in the corner of the screen)
int x = flipX ? width : 0;
int y = flipY ? 0: height;
@@ -169,45 +232,46 @@ public class GuiSpellDisplay {
y = MathHelper.ceil(y/scale);
}
+ // TODO: Maybe convert this to use ISpellCastingItem
Spell spell = WandHelper.getCurrentSpell(wand);
int cooldown = WandHelper.getCurrentCooldown(wand);
int maxCooldown = WandHelper.getCurrentMaxCooldown(wand);
- if(event.getType() == RenderGameOverlayEvent.ElementType.TEXT){
-
+ if(textLayer){
+
float animationProgress = Math.signum(switchTimer) * ((SPELL_SWITCH_TIME - Math.abs(switchTimer) +
- event.getPartialTicks()) / SPELL_SWITCH_TIME);
-
+ partialTicks) / SPELL_SWITCH_TIME);
+
String prevSpellName = getFormattedSpellName(WandHelper.getPreviousSpell(wand), player, WandHelper.getPreviousCooldown(wand));
String spellName = getFormattedSpellName(spell, player, cooldown);
String nextSpellName = getFormattedSpellName(WandHelper.getNextSpell(wand), player, WandHelper.getNextCooldown(wand));
skin.drawText(x, y, flipX, flipY, prevSpellName, spellName, nextSpellName, animationProgress);
- }else if(event.getType() == RenderGameOverlayEvent.ElementType.HOTBAR){
+ }else{
boolean discovered = true;
if(!player.isCreative() && WizardData.get(player) != null){
discovered = WizardData.get(player).hasSpellBeenDiscovered(spell);
}
-
+
ResourceLocation icon = discovered ? spell.getIcon() : Spells.none.getIcon();
float progress = 1;
// Doesn't really matter what progress is when in creative, but we might as well avoid the calculation.
if(!player.isCreative() && !spell.isContinuous){
// Subtracted partial tick time to make it smoother
- progress = maxCooldown == 0 ? 1 : (maxCooldown - (float)cooldown + event.getPartialTicks()) / maxCooldown;
+ progress = maxCooldown == 0 ? 1 : (maxCooldown - (float)cooldown + partialTicks) / maxCooldown;
}
-
+
skin.drawBackground(x, y, flipX, flipY, icon, progress, player.isCreative(), player.isPotionActive(WizardryPotions.arcane_jammer));
-
+
}
GlStateManager.popMatrix();
}
-
+
/**
* Gets the name of the given spell, with formatting added according to its cooldown and whether the given player
* has discovered it.
diff --git a/src/main/java/electroblob/wizardry/event/SpellCastEvent.java b/src/main/java/electroblob/wizardry/event/SpellCastEvent.java
index ec471598..756cc77b 100644
--- a/src/main/java/electroblob/wizardry/event/SpellCastEvent.java
+++ b/src/main/java/electroblob/wizardry/event/SpellCastEvent.java
@@ -134,9 +134,9 @@ public abstract class SpellCastEvent extends Event {
/**
* SpellCastEvent.Pre is fired just before a spell is cast. Use this event to change the spell modifiers and
* generally alter the behaviour of the spell, or stop it from being cast entirely. For example, wizardry uses this
- * event to cancel spells cast by entities that have the arcane jammer effect. Note that for wands, this is called
- * before mana, tier and cooldowns are checked. Also note that this event is only fired once for continuous
- * spells, when they start casting.
+ * event to cancel spells cast by entities that have the arcane jammer effect. For wands, this is called
+ * before mana, tier and cooldowns are checked, and before charge-up. Also note that this event is only fired
+ * once for continuous spells, when they start casting.
*
* This event is {@link Cancelable}. If this event is canceled, the spell is not cast, mana is not consumed, and the
* right-click action that caused it (if any) returns a result of FAIL, meaning that the right-click is passed to
diff --git a/src/main/java/electroblob/wizardry/item/ISpellCastingItem.java b/src/main/java/electroblob/wizardry/item/ISpellCastingItem.java
index 2666a5bb..cc1e9884 100644
--- a/src/main/java/electroblob/wizardry/item/ISpellCastingItem.java
+++ b/src/main/java/electroblob/wizardry/item/ISpellCastingItem.java
@@ -117,7 +117,8 @@ public interface ISpellCastingItem {
/**
* Casts the given spell using the given item stack. This method does not perform any checks; these are done
* in {@link ISpellCastingItem#canCast(ItemStack, Spell, EntityPlayer, EnumHand, int, SpellModifiers)}. This method
- * also performs any post-casting logic, such as mana costs and cooldowns.
+ * also performs any post-casting logic, such as mana costs and cooldowns. This method does not handle charge-up
+ * times.
*
* N.B. Continuous spell casting from outside of the items requires a bit of extra legwork, see
* {@link WizardData} for an example.
diff --git a/src/main/java/electroblob/wizardry/item/ItemWand.java b/src/main/java/electroblob/wizardry/item/ItemWand.java
index e6820105..efff9c4b 100644
--- a/src/main/java/electroblob/wizardry/item/ItemWand.java
+++ b/src/main/java/electroblob/wizardry/item/ItemWand.java
@@ -355,18 +355,19 @@ public class ItemWand extends Item implements IWorkbenchItem, ISpellCastingItem,
SpellModifiers modifiers = this.calculateModifiers(stack, player, spell);
if(canCast(stack, spell, player, hand, 0, modifiers)){
- // Now we can cast continuous spells with scrolls!
- if(spell.isContinuous){
+
+ if(spell.isContinuous || spell.getChargeup() > 0){
+ // Spells that need the mouse to be held (continuous, charge-up or both)
if(!player.isHandActive()){
player.setActiveHand(hand);
- // Store the modifiers for use each tick
+ // Store the modifiers for use later
if(WizardData.get(player) != null) WizardData.get(player).itemCastingModifiers = modifiers;
- // Return the player's held item so spells can change it if they wish (e.g. possession)
- return new ActionResult<>(EnumActionResult.SUCCESS, player.getHeldItem(hand));
+ return new ActionResult<>(EnumActionResult.SUCCESS, stack);
}
}else{
+ // All other (instant) spells
if(cast(stack, spell, player, hand, 0, modifiers)){
- return new ActionResult<>(EnumActionResult.SUCCESS, player.getHeldItem(hand));
+ return new ActionResult<>(EnumActionResult.SUCCESS, stack);
}
}
}
@@ -374,7 +375,8 @@ public class ItemWand extends Item implements IWorkbenchItem, ISpellCastingItem,
return new ActionResult<>(EnumActionResult.FAIL, stack);
}
- // For continuous spells. The count argument actually decrements by 1 each tick.
+ // For continuous spells and spells with a charge-up time. The count argument actually decrements by 1 each tick.
+ // N.B. The first time this gets called is the tick AFTER onItemRightClick is called, not the same tick
@Override
public void onUsingTick(ItemStack stack, EntityLivingBase user, int count){
@@ -384,8 +386,6 @@ public class ItemWand extends Item implements IWorkbenchItem, ISpellCastingItem,
Spell spell = WandHelper.getCurrentSpell(stack);
- if(!spell.isContinuous) return;
-
SpellModifiers modifiers;
if(WizardData.get(player) != null){
@@ -394,15 +394,29 @@ public class ItemWand extends Item implements IWorkbenchItem, ISpellCastingItem,
modifiers = this.calculateModifiers(stack, (EntityPlayer)user, spell); // Fallback to the old way, should never be used
}
- int castingTick = stack.getMaxItemUseDuration() - count;
+ int useTick = stack.getMaxItemUseDuration() - count;
- // Continuous spells (these must check if they can be cast each tick since the mana changes)
- // Don't call canCast when castingTick == 0 because we already did it in onItemRightClick
- if(castingTick == 0 || canCast(stack, spell, player, player.getActiveHand(), castingTick, modifiers)){
- cast(stack, spell, player, player.getActiveHand(), castingTick, modifiers);
+ if(spell.isContinuous){
+ // Continuous spell charge-up is simple, just don't do anything until it's charged
+ if(useTick >= spell.getChargeup()){
+ // castingTick needs to be relative to when the spell actually started
+ int castingTick = useTick - spell.getChargeup();
+ // Continuous spells (these must check if they can be cast each tick since the mana changes)
+ // Don't call canCast when castingTick == 0 because we already did it in onItemRightClick - even
+ // with charge-up times, because we don't want to trigger events twice
+ if(castingTick == 0 || canCast(stack, spell, player, player.getActiveHand(), castingTick, modifiers)){
+ cast(stack, spell, player, player.getActiveHand(), castingTick, modifiers);
+ }else{
+ // Stops the casting if it was interrupted, either by events or because the wand ran out of mana
+ player.stopActiveHand();
+ }
+ }
}else{
- // Stops the casting if it was interrupted, either by events or because the wand ran out of mana
- player.stopActiveHand();
+ // Non-continuous spells need to check they actually have a charge-up since ALL spells call setActiveHand
+ if(spell.getChargeup() > 0 && useTick == spell.getChargeup()){
+ // Once the spell is charged, it's exactly the same as in onItemRightClick
+ cast(stack, spell, player, player.getActiveHand(), 0, modifiers);
+ }
}
}
}
@@ -450,8 +464,6 @@ public class ItemWand extends Item implements IWorkbenchItem, ISpellCastingItem,
WizardryPacketHandler.net.sendToDimension(msg, world.provider.getDimension());
}
- caster.setActiveHand(hand);
-
// Mana cost
int cost = (int)(spell.getCost() * modifiers.get(SpellModifiers.COST) + 0.1f); // Weird floaty rounding
// As of wizardry 4.2 mana cost is only divided over two intervals each second
@@ -461,6 +473,8 @@ public class ItemWand extends Item implements IWorkbenchItem, ISpellCastingItem,
}
+ caster.setActiveHand(hand);
+
// Cooldown
if(!spell.isContinuous && !caster.isCreative()){ // Spells only have a cooldown in survival
WandHelper.setCurrentCooldown(stack, (int)(spell.getCooldown() * modifiers.get(WizardryItems.cooldown_upgrade)));
diff --git a/src/main/resources/assets/ebwizardry/spells/arcane_jammer.json b/src/main/resources/assets/ebwizardry/spells/arcane_jammer.json
index 0192d840..336ca013 100644
--- a/src/main/resources/assets/ebwizardry/spells/arcane_jammer.json
+++ b/src/main/resources/assets/ebwizardry/spells/arcane_jammer.json
@@ -14,7 +14,7 @@
"element": "healing",
"type": "alteration",
"cost": 30,
- "chargeup": 0,
+ "chargeup": 5,
"cooldown": 50,
"base_properties": {
"range": 10,
diff --git a/src/main/resources/assets/ebwizardry/spells/arrow_rain.json b/src/main/resources/assets/ebwizardry/spells/arrow_rain.json
index e0c5602b..f3d3a3d9 100644
--- a/src/main/resources/assets/ebwizardry/spells/arrow_rain.json
+++ b/src/main/resources/assets/ebwizardry/spells/arrow_rain.json
@@ -14,7 +14,7 @@
"element": "sorcery",
"type": "attack",
"cost": 75,
- "chargeup": 0,
+ "chargeup": 20,
"cooldown": 300,
"base_properties": {
"range": 20,
diff --git a/src/main/resources/assets/ebwizardry/spells/black_hole.json b/src/main/resources/assets/ebwizardry/spells/black_hole.json
index 290ad352..22ddd6ca 100644
--- a/src/main/resources/assets/ebwizardry/spells/black_hole.json
+++ b/src/main/resources/assets/ebwizardry/spells/black_hole.json
@@ -14,7 +14,7 @@
"element": "sorcery",
"type": "construct",
"cost": 150,
- "chargeup": 0,
+ "chargeup": 25,
"cooldown": 400,
"base_properties": {
"duration": 400,
diff --git a/src/main/resources/assets/ebwizardry/spells/blizzard.json b/src/main/resources/assets/ebwizardry/spells/blizzard.json
index cda68e4c..b467d1c2 100644
--- a/src/main/resources/assets/ebwizardry/spells/blizzard.json
+++ b/src/main/resources/assets/ebwizardry/spells/blizzard.json
@@ -14,7 +14,7 @@
"element": "ice",
"type": "construct",
"cost": 40,
- "chargeup": 0,
+ "chargeup": 10,
"cooldown": 100,
"base_properties": {
"duration": 600,
diff --git a/src/main/resources/assets/ebwizardry/spells/chain_lightning.json b/src/main/resources/assets/ebwizardry/spells/chain_lightning.json
index 0f7fcc3c..3eec3ace 100644
--- a/src/main/resources/assets/ebwizardry/spells/chain_lightning.json
+++ b/src/main/resources/assets/ebwizardry/spells/chain_lightning.json
@@ -14,7 +14,7 @@
"element": "lightning",
"type": "attack",
"cost": 25,
- "chargeup": 0,
+ "chargeup": 5,
"cooldown": 50,
"base_properties": {
"primary_damage": 10,
diff --git a/src/main/resources/assets/ebwizardry/spells/clairvoyance.json b/src/main/resources/assets/ebwizardry/spells/clairvoyance.json
index e8b43887..3ec742cc 100644
--- a/src/main/resources/assets/ebwizardry/spells/clairvoyance.json
+++ b/src/main/resources/assets/ebwizardry/spells/clairvoyance.json
@@ -14,7 +14,7 @@
"element": "sorcery",
"type": "utility",
"cost": 20,
- "chargeup": 0,
+ "chargeup": 10,
"cooldown": 100,
"base_properties": {
"range": 256,
diff --git a/src/main/resources/assets/ebwizardry/spells/conjure_armour.json b/src/main/resources/assets/ebwizardry/spells/conjure_armour.json
index 7c688fc6..078b543b 100644
--- a/src/main/resources/assets/ebwizardry/spells/conjure_armour.json
+++ b/src/main/resources/assets/ebwizardry/spells/conjure_armour.json
@@ -14,7 +14,7 @@
"element": "sorcery",
"type": "defence",
"cost": 45,
- "chargeup": 0,
+ "chargeup": 10,
"cooldown": 50,
"base_properties": {
"item_lifetime": 1800
diff --git a/src/main/resources/assets/ebwizardry/spells/containment.json b/src/main/resources/assets/ebwizardry/spells/containment.json
index 4c5d86c5..0626f068 100644
--- a/src/main/resources/assets/ebwizardry/spells/containment.json
+++ b/src/main/resources/assets/ebwizardry/spells/containment.json
@@ -14,7 +14,7 @@
"element": "sorcery",
"type": "alteration",
"cost": 40,
- "chargeup": 0,
+ "chargeup": 5,
"cooldown": 60,
"base_properties": {
"range": 10,
diff --git a/src/main/resources/assets/ebwizardry/spells/cure_effects.json b/src/main/resources/assets/ebwizardry/spells/cure_effects.json
index 5d9c7b3e..8121a2df 100644
--- a/src/main/resources/assets/ebwizardry/spells/cure_effects.json
+++ b/src/main/resources/assets/ebwizardry/spells/cure_effects.json
@@ -14,7 +14,7 @@
"element": "healing",
"type": "defence",
"cost": 25,
- "chargeup": 0,
+ "chargeup": 10,
"cooldown": 40,
"base_properties": {}
}
\ No newline at end of file
diff --git a/src/main/resources/assets/ebwizardry/spells/curse_of_enfeeblement.json b/src/main/resources/assets/ebwizardry/spells/curse_of_enfeeblement.json
index 8fbb4684..0f39a656 100644
--- a/src/main/resources/assets/ebwizardry/spells/curse_of_enfeeblement.json
+++ b/src/main/resources/assets/ebwizardry/spells/curse_of_enfeeblement.json
@@ -14,7 +14,7 @@
"element": "necromancy",
"type": "alteration",
"cost": 60,
- "chargeup": 0,
+ "chargeup": 20,
"cooldown": 150,
"base_properties": {
"range": 10,
diff --git a/src/main/resources/assets/ebwizardry/spells/curse_of_soulbinding.json b/src/main/resources/assets/ebwizardry/spells/curse_of_soulbinding.json
index 12adc02a..bfac23df 100644
--- a/src/main/resources/assets/ebwizardry/spells/curse_of_soulbinding.json
+++ b/src/main/resources/assets/ebwizardry/spells/curse_of_soulbinding.json
@@ -14,7 +14,7 @@
"element": "necromancy",
"type": "alteration",
"cost": 35,
- "chargeup": 0,
+ "chargeup": 10,
"cooldown": 100,
"base_properties": {
"range": 10
diff --git a/src/main/resources/assets/ebwizardry/spells/curse_of_undeath.json b/src/main/resources/assets/ebwizardry/spells/curse_of_undeath.json
index f77ecc30..5e490e3f 100644
--- a/src/main/resources/assets/ebwizardry/spells/curse_of_undeath.json
+++ b/src/main/resources/assets/ebwizardry/spells/curse_of_undeath.json
@@ -14,7 +14,7 @@
"element": "necromancy",
"type": "alteration",
"cost": 40,
- "chargeup": 0,
+ "chargeup": 10,
"cooldown": 100,
"base_properties": {
"range": 10,
diff --git a/src/main/resources/assets/ebwizardry/spells/decay.json b/src/main/resources/assets/ebwizardry/spells/decay.json
index 1c3673ef..b2ca5024 100644
--- a/src/main/resources/assets/ebwizardry/spells/decay.json
+++ b/src/main/resources/assets/ebwizardry/spells/decay.json
@@ -14,7 +14,7 @@
"element": "necromancy",
"type": "attack",
"cost": 50,
- "chargeup": 0,
+ "chargeup": 10,
"cooldown": 200,
"base_properties": {
"range": 12,
diff --git a/src/main/resources/assets/ebwizardry/spells/decoy.json b/src/main/resources/assets/ebwizardry/spells/decoy.json
index 6d684c52..0a53ef69 100644
--- a/src/main/resources/assets/ebwizardry/spells/decoy.json
+++ b/src/main/resources/assets/ebwizardry/spells/decoy.json
@@ -14,7 +14,7 @@
"element": "sorcery",
"type": "utility",
"cost": 40,
- "chargeup": 0,
+ "chargeup": 10,
"cooldown": 200,
"base_properties": {
"decoy_lifetime": 600,
diff --git a/src/main/resources/assets/ebwizardry/spells/diamondflesh.json b/src/main/resources/assets/ebwizardry/spells/diamondflesh.json
index 9a969105..2867ca12 100644
--- a/src/main/resources/assets/ebwizardry/spells/diamondflesh.json
+++ b/src/main/resources/assets/ebwizardry/spells/diamondflesh.json
@@ -14,7 +14,7 @@
"element": "healing",
"type": "defence",
"cost": 100,
- "chargeup": 0,
+ "chargeup": 25,
"cooldown": 300,
"base_properties": {
"resistance_duration": 600,
diff --git a/src/main/resources/assets/ebwizardry/spells/earthquake.json b/src/main/resources/assets/ebwizardry/spells/earthquake.json
index 18401a07..90616d27 100644
--- a/src/main/resources/assets/ebwizardry/spells/earthquake.json
+++ b/src/main/resources/assets/ebwizardry/spells/earthquake.json
@@ -14,7 +14,7 @@
"element": "earth",
"type": "attack",
"cost": 75,
- "chargeup": 0,
+ "chargeup": 25,
"cooldown": 250,
"base_properties": {
"effect_radius": 8,
diff --git a/src/main/resources/assets/ebwizardry/spells/entrapment.json b/src/main/resources/assets/ebwizardry/spells/entrapment.json
index c6dc3d24..2e973aa7 100644
--- a/src/main/resources/assets/ebwizardry/spells/entrapment.json
+++ b/src/main/resources/assets/ebwizardry/spells/entrapment.json
@@ -14,7 +14,7 @@
"element": "necromancy",
"type": "attack",
"cost": 35,
- "chargeup": 0,
+ "chargeup": 10,
"cooldown": 75,
"base_properties": {
"range": 10,
diff --git a/src/main/resources/assets/ebwizardry/spells/fire_breath.json b/src/main/resources/assets/ebwizardry/spells/fire_breath.json
index aaf9401b..b89837e5 100644
--- a/src/main/resources/assets/ebwizardry/spells/fire_breath.json
+++ b/src/main/resources/assets/ebwizardry/spells/fire_breath.json
@@ -14,7 +14,7 @@
"element": "fire",
"type": "attack",
"cost": 15,
- "chargeup": 0,
+ "chargeup": 15,
"cooldown": 0,
"base_properties": {
"range": 10,
diff --git a/src/main/resources/assets/ebwizardry/spells/fire_resistance.json b/src/main/resources/assets/ebwizardry/spells/fire_resistance.json
index e143b964..2ac239a6 100644
--- a/src/main/resources/assets/ebwizardry/spells/fire_resistance.json
+++ b/src/main/resources/assets/ebwizardry/spells/fire_resistance.json
@@ -14,7 +14,7 @@
"element": "fire",
"type": "defence",
"cost": 20,
- "chargeup": 0,
+ "chargeup": 15,
"cooldown": 80,
"base_properties": {
"fire_resistance_duration": 600,
diff --git a/src/main/resources/assets/ebwizardry/spells/flaming_axe.json b/src/main/resources/assets/ebwizardry/spells/flaming_axe.json
index cbfab3ec..3014de16 100644
--- a/src/main/resources/assets/ebwizardry/spells/flaming_axe.json
+++ b/src/main/resources/assets/ebwizardry/spells/flaming_axe.json
@@ -14,7 +14,7 @@
"element": "fire",
"type": "utility",
"cost": 45,
- "chargeup": 0,
+ "chargeup": 10,
"cooldown": 50,
"base_properties": {
"item_lifetime": 1200,
diff --git a/src/main/resources/assets/ebwizardry/spells/font_of_mana.json b/src/main/resources/assets/ebwizardry/spells/font_of_mana.json
index c4bac0d8..66da2de7 100644
--- a/src/main/resources/assets/ebwizardry/spells/font_of_mana.json
+++ b/src/main/resources/assets/ebwizardry/spells/font_of_mana.json
@@ -14,7 +14,7 @@
"element": "healing",
"type": "utility",
"cost": 100,
- "chargeup": 0,
+ "chargeup": 15,
"cooldown": 250,
"base_properties": {
"effect_radius": 5,
diff --git a/src/main/resources/assets/ebwizardry/spells/font_of_vitality.json b/src/main/resources/assets/ebwizardry/spells/font_of_vitality.json
index f858b6ed..4d486150 100644
--- a/src/main/resources/assets/ebwizardry/spells/font_of_vitality.json
+++ b/src/main/resources/assets/ebwizardry/spells/font_of_vitality.json
@@ -14,7 +14,7 @@
"element": "healing",
"type": "defence",
"cost": 75,
- "chargeup": 0,
+ "chargeup": 20,
"cooldown": 300,
"base_properties": {
"absorption_duration": 1200,
diff --git a/src/main/resources/assets/ebwizardry/spells/forcefield.json b/src/main/resources/assets/ebwizardry/spells/forcefield.json
index bb6cbf3a..9e34fe86 100644
--- a/src/main/resources/assets/ebwizardry/spells/forcefield.json
+++ b/src/main/resources/assets/ebwizardry/spells/forcefield.json
@@ -14,7 +14,7 @@
"element": "healing",
"type": "defence",
"cost": 45,
- "chargeup": 0,
+ "chargeup": 15,
"cooldown": 200,
"base_properties": {
"duration": 600,
diff --git a/src/main/resources/assets/ebwizardry/spells/forest_of_thorns.json b/src/main/resources/assets/ebwizardry/spells/forest_of_thorns.json
index 4d5e2414..a8d44cad 100644
--- a/src/main/resources/assets/ebwizardry/spells/forest_of_thorns.json
+++ b/src/main/resources/assets/ebwizardry/spells/forest_of_thorns.json
@@ -14,7 +14,7 @@
"element": "earth",
"type": "construct",
"cost": 100,
- "chargeup": 0,
+ "chargeup": 20,
"cooldown": 250,
"base_properties": {
"effect_radius": 3,
diff --git a/src/main/resources/assets/ebwizardry/spells/forests_curse.json b/src/main/resources/assets/ebwizardry/spells/forests_curse.json
index 1e12f461..fb84dc46 100644
--- a/src/main/resources/assets/ebwizardry/spells/forests_curse.json
+++ b/src/main/resources/assets/ebwizardry/spells/forests_curse.json
@@ -14,7 +14,7 @@
"element": "earth",
"type": "attack",
"cost": 75,
- "chargeup": 0,
+ "chargeup": 15,
"cooldown": 200,
"base_properties": {
"effect_radius": 5,
diff --git a/src/main/resources/assets/ebwizardry/spells/frost_axe.json b/src/main/resources/assets/ebwizardry/spells/frost_axe.json
index e0d8912f..594de077 100644
--- a/src/main/resources/assets/ebwizardry/spells/frost_axe.json
+++ b/src/main/resources/assets/ebwizardry/spells/frost_axe.json
@@ -14,7 +14,7 @@
"element": "ice",
"type": "utility",
"cost": 45,
- "chargeup": 0,
+ "chargeup": 10,
"cooldown": 50,
"base_properties": {
"item_lifetime": 1200,
diff --git a/src/main/resources/assets/ebwizardry/spells/greater_fireball.json b/src/main/resources/assets/ebwizardry/spells/greater_fireball.json
index d94fc93c..8c2f6c44 100644
--- a/src/main/resources/assets/ebwizardry/spells/greater_fireball.json
+++ b/src/main/resources/assets/ebwizardry/spells/greater_fireball.json
@@ -14,7 +14,7 @@
"element": "fire",
"type": "projectile",
"cost": 20,
- "chargeup": 0,
+ "chargeup": 5,
"cooldown": 30,
"base_properties": {
"range": 20,
diff --git a/src/main/resources/assets/ebwizardry/spells/greater_heal.json b/src/main/resources/assets/ebwizardry/spells/greater_heal.json
index 5797115c..614285a5 100644
--- a/src/main/resources/assets/ebwizardry/spells/greater_heal.json
+++ b/src/main/resources/assets/ebwizardry/spells/greater_heal.json
@@ -14,7 +14,7 @@
"element": "healing",
"type": "defence",
"cost": 15,
- "chargeup": 0,
+ "chargeup": 10,
"cooldown": 40,
"base_properties": {
"health": 8
diff --git a/src/main/resources/assets/ebwizardry/spells/greater_ward.json b/src/main/resources/assets/ebwizardry/spells/greater_ward.json
index 9fde216e..e3aecb09 100644
--- a/src/main/resources/assets/ebwizardry/spells/greater_ward.json
+++ b/src/main/resources/assets/ebwizardry/spells/greater_ward.json
@@ -14,7 +14,7 @@
"element": "healing",
"type": "buff",
"cost": 20,
- "chargeup": 0,
+ "chargeup": 10,
"cooldown": 65,
"base_properties": {
"ward_duration": 600,
diff --git a/src/main/resources/assets/ebwizardry/spells/group_heal.json b/src/main/resources/assets/ebwizardry/spells/group_heal.json
index c1449e69..5ecaa49b 100644
--- a/src/main/resources/assets/ebwizardry/spells/group_heal.json
+++ b/src/main/resources/assets/ebwizardry/spells/group_heal.json
@@ -14,7 +14,7 @@
"element": "healing",
"type": "defence",
"cost": 35,
- "chargeup": 0,
+ "chargeup": 10,
"cooldown": 150,
"base_properties": {
"effect_radius": 5,
diff --git a/src/main/resources/assets/ebwizardry/spells/hailstorm.json b/src/main/resources/assets/ebwizardry/spells/hailstorm.json
index b7dd6e29..0d99a628 100644
--- a/src/main/resources/assets/ebwizardry/spells/hailstorm.json
+++ b/src/main/resources/assets/ebwizardry/spells/hailstorm.json
@@ -14,7 +14,7 @@
"element": "ice",
"type": "attack",
"cost": 75,
- "chargeup": 0,
+ "chargeup": 20,
"cooldown": 300,
"base_properties": {
"range": 20,
diff --git a/src/main/resources/assets/ebwizardry/spells/healing_aura.json b/src/main/resources/assets/ebwizardry/spells/healing_aura.json
index 18d81c27..44e855bf 100644
--- a/src/main/resources/assets/ebwizardry/spells/healing_aura.json
+++ b/src/main/resources/assets/ebwizardry/spells/healing_aura.json
@@ -14,7 +14,7 @@
"element": "healing",
"type": "construct",
"cost": 35,
- "chargeup": 0,
+ "chargeup": 15,
"cooldown": 150,
"base_properties": {
"duration": 600,
diff --git a/src/main/resources/assets/ebwizardry/spells/ice_age.json b/src/main/resources/assets/ebwizardry/spells/ice_age.json
index f7befce5..1dcdc711 100644
--- a/src/main/resources/assets/ebwizardry/spells/ice_age.json
+++ b/src/main/resources/assets/ebwizardry/spells/ice_age.json
@@ -14,7 +14,7 @@
"element": "ice",
"type": "attack",
"cost": 70,
- "chargeup": 0,
+ "chargeup": 20,
"cooldown": 250,
"base_properties": {
"effect_radius": 7,
diff --git a/src/main/resources/assets/ebwizardry/spells/ice_lance.json b/src/main/resources/assets/ebwizardry/spells/ice_lance.json
index a259d9b1..1e99c6e7 100644
--- a/src/main/resources/assets/ebwizardry/spells/ice_lance.json
+++ b/src/main/resources/assets/ebwizardry/spells/ice_lance.json
@@ -14,7 +14,7 @@
"element": "ice",
"type": "projectile",
"cost": 20,
- "chargeup": 0,
+ "chargeup": 5,
"cooldown": 20,
"base_properties": {
"range": 15,
diff --git a/src/main/resources/assets/ebwizardry/spells/invisibility.json b/src/main/resources/assets/ebwizardry/spells/invisibility.json
index 04fe24b1..18a95b75 100644
--- a/src/main/resources/assets/ebwizardry/spells/invisibility.json
+++ b/src/main/resources/assets/ebwizardry/spells/invisibility.json
@@ -14,7 +14,7 @@
"element": "sorcery",
"type": "buff",
"cost": 35,
- "chargeup": 0,
+ "chargeup": 15,
"cooldown": 200,
"base_properties": {
"invisibility_duration": 600,
diff --git a/src/main/resources/assets/ebwizardry/spells/invoke_weather.json b/src/main/resources/assets/ebwizardry/spells/invoke_weather.json
index 9c4ba918..2064207e 100644
--- a/src/main/resources/assets/ebwizardry/spells/invoke_weather.json
+++ b/src/main/resources/assets/ebwizardry/spells/invoke_weather.json
@@ -14,7 +14,7 @@
"element": "lightning",
"type": "utility",
"cost": 30,
- "chargeup": 0,
+ "chargeup": 15,
"cooldown": 100,
"base_properties": {
"thunderstorm_chance": 0.2
diff --git a/src/main/resources/assets/ebwizardry/spells/ironflesh.json b/src/main/resources/assets/ebwizardry/spells/ironflesh.json
index 31a017a7..089f63bd 100644
--- a/src/main/resources/assets/ebwizardry/spells/ironflesh.json
+++ b/src/main/resources/assets/ebwizardry/spells/ironflesh.json
@@ -14,7 +14,7 @@
"element": "healing",
"type": "defence",
"cost": 30,
- "chargeup": 0,
+ "chargeup": 15,
"cooldown": 100,
"base_properties": {
"resistance_duration": 600,
diff --git a/src/main/resources/assets/ebwizardry/spells/lightning_bolt.json b/src/main/resources/assets/ebwizardry/spells/lightning_bolt.json
index 9be2d4a5..716e6bd9 100644
--- a/src/main/resources/assets/ebwizardry/spells/lightning_bolt.json
+++ b/src/main/resources/assets/ebwizardry/spells/lightning_bolt.json
@@ -14,7 +14,7 @@
"element": "lightning",
"type": "attack",
"cost": 40,
- "chargeup": 0,
+ "chargeup": 10,
"cooldown": 80,
"base_properties": {
"range": 80
diff --git a/src/main/resources/assets/ebwizardry/spells/lightning_disc.json b/src/main/resources/assets/ebwizardry/spells/lightning_disc.json
index fd2f9ff9..6d9f49f7 100644
--- a/src/main/resources/assets/ebwizardry/spells/lightning_disc.json
+++ b/src/main/resources/assets/ebwizardry/spells/lightning_disc.json
@@ -14,7 +14,7 @@
"element": "lightning",
"type": "projectile",
"cost": 25,
- "chargeup": 0,
+ "chargeup": 5,
"cooldown": 60,
"base_properties": {
"range": 30,
diff --git a/src/main/resources/assets/ebwizardry/spells/lightning_hammer.json b/src/main/resources/assets/ebwizardry/spells/lightning_hammer.json
index 3d93cbb4..3ebeb686 100644
--- a/src/main/resources/assets/ebwizardry/spells/lightning_hammer.json
+++ b/src/main/resources/assets/ebwizardry/spells/lightning_hammer.json
@@ -14,7 +14,7 @@
"element": "lightning",
"type": "attack",
"cost": 100,
- "chargeup": 0,
+ "chargeup": 25,
"cooldown": 300,
"base_properties": {
"range": 40,
diff --git a/src/main/resources/assets/ebwizardry/spells/lightning_web.json b/src/main/resources/assets/ebwizardry/spells/lightning_web.json
index cc16ee60..27929704 100644
--- a/src/main/resources/assets/ebwizardry/spells/lightning_web.json
+++ b/src/main/resources/assets/ebwizardry/spells/lightning_web.json
@@ -14,7 +14,7 @@
"element": "lightning",
"type": "attack",
"cost": 15,
- "chargeup": 0,
+ "chargeup": 15,
"cooldown": 0,
"base_properties": {
"primary_damage": 5,
diff --git a/src/main/resources/assets/ebwizardry/spells/meteor.json b/src/main/resources/assets/ebwizardry/spells/meteor.json
index d56985aa..aa27a909 100644
--- a/src/main/resources/assets/ebwizardry/spells/meteor.json
+++ b/src/main/resources/assets/ebwizardry/spells/meteor.json
@@ -14,7 +14,7 @@
"element": "fire",
"type": "attack",
"cost": 100,
- "chargeup": 0,
+ "chargeup": 20,
"cooldown": 200,
"base_properties": {
"range": 40,
diff --git a/src/main/resources/assets/ebwizardry/spells/mind_control.json b/src/main/resources/assets/ebwizardry/spells/mind_control.json
index e019a77f..bb3402c8 100644
--- a/src/main/resources/assets/ebwizardry/spells/mind_control.json
+++ b/src/main/resources/assets/ebwizardry/spells/mind_control.json
@@ -14,7 +14,7 @@
"element": "necromancy",
"type": "attack",
"cost": 40,
- "chargeup": 0,
+ "chargeup": 10,
"cooldown": 150,
"base_properties": {
"range": 8,
diff --git a/src/main/resources/assets/ebwizardry/spells/paralysis.json b/src/main/resources/assets/ebwizardry/spells/paralysis.json
index 8691b64b..226df1e6 100644
--- a/src/main/resources/assets/ebwizardry/spells/paralysis.json
+++ b/src/main/resources/assets/ebwizardry/spells/paralysis.json
@@ -14,7 +14,7 @@
"element": "lightning",
"type": "alteration",
"cost": 20,
- "chargeup": 0,
+ "chargeup": 10,
"cooldown": 60,
"base_properties": {
"range": 10,
diff --git a/src/main/resources/assets/ebwizardry/spells/petrify.json b/src/main/resources/assets/ebwizardry/spells/petrify.json
index 9add942a..53ff72d4 100644
--- a/src/main/resources/assets/ebwizardry/spells/petrify.json
+++ b/src/main/resources/assets/ebwizardry/spells/petrify.json
@@ -14,7 +14,7 @@
"element": "sorcery",
"type": "attack",
"cost": 40,
- "chargeup": 0,
+ "chargeup": 20,
"cooldown": 100,
"base_properties": {
"range": 10,
diff --git a/src/main/resources/assets/ebwizardry/spells/plague_of_darkness.json b/src/main/resources/assets/ebwizardry/spells/plague_of_darkness.json
index 3da3cc81..d3d4d1ff 100644
--- a/src/main/resources/assets/ebwizardry/spells/plague_of_darkness.json
+++ b/src/main/resources/assets/ebwizardry/spells/plague_of_darkness.json
@@ -14,7 +14,7 @@
"element": "necromancy",
"type": "attack",
"cost": 75,
- "chargeup": 0,
+ "chargeup": 15,
"cooldown": 200,
"base_properties": {
"effect_radius": 5,
diff --git a/src/main/resources/assets/ebwizardry/spells/possession.json b/src/main/resources/assets/ebwizardry/spells/possession.json
index ade443bb..2ef90fee 100644
--- a/src/main/resources/assets/ebwizardry/spells/possession.json
+++ b/src/main/resources/assets/ebwizardry/spells/possession.json
@@ -14,7 +14,7 @@
"element": "necromancy",
"type": "alteration",
"cost": 100,
- "chargeup": 0,
+ "chargeup": 15,
"cooldown": 300,
"base_properties": {
"range": 8,
diff --git a/src/main/resources/assets/ebwizardry/spells/ray_of_purification.json b/src/main/resources/assets/ebwizardry/spells/ray_of_purification.json
index 940eb3e5..ee5b3f02 100644
--- a/src/main/resources/assets/ebwizardry/spells/ray_of_purification.json
+++ b/src/main/resources/assets/ebwizardry/spells/ray_of_purification.json
@@ -14,7 +14,7 @@
"element": "healing",
"type": "attack",
"cost": 10,
- "chargeup": 0,
+ "chargeup": 10,
"cooldown": 0,
"base_properties": {
"range": 10,
diff --git a/src/main/resources/assets/ebwizardry/spells/remove_curse.json b/src/main/resources/assets/ebwizardry/spells/remove_curse.json
index ca69c0bf..dce3fb10 100644
--- a/src/main/resources/assets/ebwizardry/spells/remove_curse.json
+++ b/src/main/resources/assets/ebwizardry/spells/remove_curse.json
@@ -14,7 +14,7 @@
"element": "healing",
"type": "defence",
"cost": 50,
- "chargeup": 0,
+ "chargeup": 20,
"cooldown": 80,
"base_properties": {}
}
\ No newline at end of file
diff --git a/src/main/resources/assets/ebwizardry/spells/resurrection.json b/src/main/resources/assets/ebwizardry/spells/resurrection.json
index 402e2f2d..d9124f5f 100644
--- a/src/main/resources/assets/ebwizardry/spells/resurrection.json
+++ b/src/main/resources/assets/ebwizardry/spells/resurrection.json
@@ -14,7 +14,7 @@
"element": "healing",
"type": "alteration",
"cost": 150,
- "chargeup": 0,
+ "chargeup": 25,
"cooldown": 400,
"base_properties": {
"effect_radius": 8,
diff --git a/src/main/resources/assets/ebwizardry/spells/ring_of_fire.json b/src/main/resources/assets/ebwizardry/spells/ring_of_fire.json
index 79f7510e..4b31b96a 100644
--- a/src/main/resources/assets/ebwizardry/spells/ring_of_fire.json
+++ b/src/main/resources/assets/ebwizardry/spells/ring_of_fire.json
@@ -14,7 +14,7 @@
"element": "fire",
"type": "construct",
"cost": 30,
- "chargeup": 0,
+ "chargeup": 10,
"cooldown": 100,
"base_properties": {
"duration": 600,
diff --git a/src/main/resources/assets/ebwizardry/spells/satiety.json b/src/main/resources/assets/ebwizardry/spells/satiety.json
index 06dc1140..a28a120e 100644
--- a/src/main/resources/assets/ebwizardry/spells/satiety.json
+++ b/src/main/resources/assets/ebwizardry/spells/satiety.json
@@ -14,7 +14,7 @@
"element": "healing",
"type": "buff",
"cost": 40,
- "chargeup": 0,
+ "chargeup": 15,
"cooldown": 50,
"base_properties": {
"hunger_points": 16,
diff --git a/src/main/resources/assets/ebwizardry/spells/shockwave.json b/src/main/resources/assets/ebwizardry/spells/shockwave.json
index c2fbf6dd..c84556dc 100644
--- a/src/main/resources/assets/ebwizardry/spells/shockwave.json
+++ b/src/main/resources/assets/ebwizardry/spells/shockwave.json
@@ -14,7 +14,7 @@
"element": "sorcery",
"type": "attack",
"cost": 65,
- "chargeup": 0,
+ "chargeup": 20,
"cooldown": 150,
"base_properties": {
"blast_radius": 5,
diff --git a/src/main/resources/assets/ebwizardry/spells/silverfish_swarm.json b/src/main/resources/assets/ebwizardry/spells/silverfish_swarm.json
index 9390042c..8bf95392 100644
--- a/src/main/resources/assets/ebwizardry/spells/silverfish_swarm.json
+++ b/src/main/resources/assets/ebwizardry/spells/silverfish_swarm.json
@@ -14,7 +14,7 @@
"element": "earth",
"type": "minion",
"cost": 80,
- "chargeup": 0,
+ "chargeup": 20,
"cooldown": 300,
"base_properties": {
"minion_lifetime": 600,
diff --git a/src/main/resources/assets/ebwizardry/spells/slow_time.json b/src/main/resources/assets/ebwizardry/spells/slow_time.json
index ec7eee50..0f4b666d 100644
--- a/src/main/resources/assets/ebwizardry/spells/slow_time.json
+++ b/src/main/resources/assets/ebwizardry/spells/slow_time.json
@@ -14,7 +14,7 @@
"element": "sorcery",
"type": "alteration",
"cost": 100,
- "chargeup": 0,
+ "chargeup": 15,
"cooldown": 200,
"base_properties": {
"slow_time_duration": 300,
diff --git a/src/main/resources/assets/ebwizardry/spells/spectral_pathway.json b/src/main/resources/assets/ebwizardry/spells/spectral_pathway.json
index 0e775f40..a7a91e1e 100644
--- a/src/main/resources/assets/ebwizardry/spells/spectral_pathway.json
+++ b/src/main/resources/assets/ebwizardry/spells/spectral_pathway.json
@@ -14,7 +14,7 @@
"element": "sorcery",
"type": "utility",
"cost": 40,
- "chargeup": 0,
+ "chargeup": 15,
"cooldown": 300,
"base_properties": {
"length": 25,
diff --git a/src/main/resources/assets/ebwizardry/spells/spider_swarm.json b/src/main/resources/assets/ebwizardry/spells/spider_swarm.json
index ffdc4197..c6358c95 100644
--- a/src/main/resources/assets/ebwizardry/spells/spider_swarm.json
+++ b/src/main/resources/assets/ebwizardry/spells/spider_swarm.json
@@ -14,7 +14,7 @@
"element": "earth",
"type": "minion",
"cost": 45,
- "chargeup": 0,
+ "chargeup": 10,
"cooldown": 200,
"base_properties": {
"minion_lifetime": 600,
diff --git a/src/main/resources/assets/ebwizardry/spells/stormcloud.json b/src/main/resources/assets/ebwizardry/spells/stormcloud.json
index 20a33a0a..96711f1a 100644
--- a/src/main/resources/assets/ebwizardry/spells/stormcloud.json
+++ b/src/main/resources/assets/ebwizardry/spells/stormcloud.json
@@ -14,7 +14,7 @@
"element": "lightning",
"type": "construct",
"cost": 60,
- "chargeup": 0,
+ "chargeup": 10,
"cooldown": 150,
"base_properties": {
"duration": 600,
diff --git a/src/main/resources/assets/ebwizardry/spells/summon_blaze.json b/src/main/resources/assets/ebwizardry/spells/summon_blaze.json
index 7621260f..cd3707e6 100644
--- a/src/main/resources/assets/ebwizardry/spells/summon_blaze.json
+++ b/src/main/resources/assets/ebwizardry/spells/summon_blaze.json
@@ -14,7 +14,7 @@
"element": "fire",
"type": "minion",
"cost": 40,
- "chargeup": 0,
+ "chargeup": 10,
"cooldown": 200,
"base_properties": {
"minion_lifetime": 600,
diff --git a/src/main/resources/assets/ebwizardry/spells/summon_ice_giant.json b/src/main/resources/assets/ebwizardry/spells/summon_ice_giant.json
index 810f0c67..92738b1a 100644
--- a/src/main/resources/assets/ebwizardry/spells/summon_ice_giant.json
+++ b/src/main/resources/assets/ebwizardry/spells/summon_ice_giant.json
@@ -14,7 +14,7 @@
"element": "ice",
"type": "minion",
"cost": 100,
- "chargeup": 0,
+ "chargeup": 20,
"cooldown": 400,
"base_properties": {
"minion_lifetime": 600,
diff --git a/src/main/resources/assets/ebwizardry/spells/summon_ice_wraith.json b/src/main/resources/assets/ebwizardry/spells/summon_ice_wraith.json
index 934b94b6..77a51efe 100644
--- a/src/main/resources/assets/ebwizardry/spells/summon_ice_wraith.json
+++ b/src/main/resources/assets/ebwizardry/spells/summon_ice_wraith.json
@@ -14,7 +14,7 @@
"element": "ice",
"type": "minion",
"cost": 40,
- "chargeup": 0,
+ "chargeup": 10,
"cooldown": 200,
"base_properties": {
"minion_lifetime": 600,
diff --git a/src/main/resources/assets/ebwizardry/spells/summon_iron_golem.json b/src/main/resources/assets/ebwizardry/spells/summon_iron_golem.json
index 01991e04..fca50afc 100644
--- a/src/main/resources/assets/ebwizardry/spells/summon_iron_golem.json
+++ b/src/main/resources/assets/ebwizardry/spells/summon_iron_golem.json
@@ -14,7 +14,7 @@
"element": "sorcery",
"type": "minion",
"cost": 175,
- "chargeup": 0,
+ "chargeup": 20,
"cooldown": 400,
"base_properties": {
"summon_radius": 2
diff --git a/src/main/resources/assets/ebwizardry/spells/summon_lightning_wraith.json b/src/main/resources/assets/ebwizardry/spells/summon_lightning_wraith.json
index e04aa12b..b2baf94e 100644
--- a/src/main/resources/assets/ebwizardry/spells/summon_lightning_wraith.json
+++ b/src/main/resources/assets/ebwizardry/spells/summon_lightning_wraith.json
@@ -14,7 +14,7 @@
"element": "lightning",
"type": "minion",
"cost": 40,
- "chargeup": 0,
+ "chargeup": 10,
"cooldown": 200,
"base_properties": {
"minion_lifetime": 600,
diff --git a/src/main/resources/assets/ebwizardry/spells/summon_phoenix.json b/src/main/resources/assets/ebwizardry/spells/summon_phoenix.json
index 13664fcf..827beb31 100644
--- a/src/main/resources/assets/ebwizardry/spells/summon_phoenix.json
+++ b/src/main/resources/assets/ebwizardry/spells/summon_phoenix.json
@@ -14,7 +14,7 @@
"element": "fire",
"type": "minion",
"cost": 150,
- "chargeup": 0,
+ "chargeup": 20,
"cooldown": 400,
"base_properties": {
"minion_lifetime": 600,
diff --git a/src/main/resources/assets/ebwizardry/spells/summon_shadow_wraith.json b/src/main/resources/assets/ebwizardry/spells/summon_shadow_wraith.json
index e699bf4b..2c30faaa 100644
--- a/src/main/resources/assets/ebwizardry/spells/summon_shadow_wraith.json
+++ b/src/main/resources/assets/ebwizardry/spells/summon_shadow_wraith.json
@@ -14,7 +14,7 @@
"element": "necromancy",
"type": "minion",
"cost": 100,
- "chargeup": 0,
+ "chargeup": 20,
"cooldown": 400,
"base_properties": {
"minion_lifetime": 600,
diff --git a/src/main/resources/assets/ebwizardry/spells/summon_skeleton_legion.json b/src/main/resources/assets/ebwizardry/spells/summon_skeleton_legion.json
index 3bc7f2a8..524a1c3f 100644
--- a/src/main/resources/assets/ebwizardry/spells/summon_skeleton_legion.json
+++ b/src/main/resources/assets/ebwizardry/spells/summon_skeleton_legion.json
@@ -14,7 +14,7 @@
"element": "necromancy",
"type": "minion",
"cost": 100,
- "chargeup": 0,
+ "chargeup": 20,
"cooldown": 400,
"base_properties": {
"minion_lifetime": 1200,
diff --git a/src/main/resources/assets/ebwizardry/spells/summon_spirit_horse.json b/src/main/resources/assets/ebwizardry/spells/summon_spirit_horse.json
index 73b29590..55e5a9ff 100644
--- a/src/main/resources/assets/ebwizardry/spells/summon_spirit_horse.json
+++ b/src/main/resources/assets/ebwizardry/spells/summon_spirit_horse.json
@@ -14,7 +14,7 @@
"element": "earth",
"type": "minion",
"cost": 50,
- "chargeup": 0,
+ "chargeup": 10,
"cooldown": 150,
"base_properties": {
"summon_radius": 2
diff --git a/src/main/resources/assets/ebwizardry/spells/summon_storm_elemental.json b/src/main/resources/assets/ebwizardry/spells/summon_storm_elemental.json
index 02c1f50d..51d117d6 100644
--- a/src/main/resources/assets/ebwizardry/spells/summon_storm_elemental.json
+++ b/src/main/resources/assets/ebwizardry/spells/summon_storm_elemental.json
@@ -14,7 +14,7 @@
"element": "lightning",
"type": "minion",
"cost": 100,
- "chargeup": 0,
+ "chargeup": 20,
"cooldown": 400,
"base_properties": {
"minion_lifetime": 600,
diff --git a/src/main/resources/assets/ebwizardry/spells/summon_wither_skeleton.json b/src/main/resources/assets/ebwizardry/spells/summon_wither_skeleton.json
index f16431f2..c1e77a0d 100644
--- a/src/main/resources/assets/ebwizardry/spells/summon_wither_skeleton.json
+++ b/src/main/resources/assets/ebwizardry/spells/summon_wither_skeleton.json
@@ -14,7 +14,7 @@
"element": "necromancy",
"type": "minion",
"cost": 35,
- "chargeup": 0,
+ "chargeup": 10,
"cooldown": 150,
"base_properties": {
"minion_lifetime": 600,
diff --git a/src/main/resources/assets/ebwizardry/spells/thunderstorm.json b/src/main/resources/assets/ebwizardry/spells/thunderstorm.json
index c414078e..5df426ea 100644
--- a/src/main/resources/assets/ebwizardry/spells/thunderstorm.json
+++ b/src/main/resources/assets/ebwizardry/spells/thunderstorm.json
@@ -14,7 +14,7 @@
"element": "lightning",
"type": "attack",
"cost": 100,
- "chargeup": 0,
+ "chargeup": 20,
"cooldown": 250,
"base_properties": {
"effect_radius": 10,
diff --git a/src/main/resources/assets/ebwizardry/spells/tornado.json b/src/main/resources/assets/ebwizardry/spells/tornado.json
index 87d8cfbd..e62b097f 100644
--- a/src/main/resources/assets/ebwizardry/spells/tornado.json
+++ b/src/main/resources/assets/ebwizardry/spells/tornado.json
@@ -14,7 +14,7 @@
"element": "earth",
"type": "attack",
"cost": 35,
- "chargeup": 0,
+ "chargeup": 10,
"cooldown": 80,
"base_properties": {
"duration": 200,
diff --git a/src/main/resources/assets/ebwizardry/spells/transience.json b/src/main/resources/assets/ebwizardry/spells/transience.json
index ff5886c2..651eae30 100644
--- a/src/main/resources/assets/ebwizardry/spells/transience.json
+++ b/src/main/resources/assets/ebwizardry/spells/transience.json
@@ -14,7 +14,7 @@
"element": "healing",
"type": "buff",
"cost": 50,
- "chargeup": 0,
+ "chargeup": 15,
"cooldown": 100,
"base_properties": {
"effect_duration": 400
diff --git a/src/main/resources/assets/ebwizardry/spells/transportation.json b/src/main/resources/assets/ebwizardry/spells/transportation.json
index 0dbfcbfb..8ba20ce8 100644
--- a/src/main/resources/assets/ebwizardry/spells/transportation.json
+++ b/src/main/resources/assets/ebwizardry/spells/transportation.json
@@ -14,7 +14,7 @@
"element": "sorcery",
"type": "utility",
"cost": 100,
- "chargeup": 0,
+ "chargeup": 20,
"cooldown": 100,
"base_properties": {
"teleport_countdown": 75
diff --git a/src/main/resources/assets/ebwizardry/spells/vanishing_box.json b/src/main/resources/assets/ebwizardry/spells/vanishing_box.json
index c6e1eab5..aff160d6 100644
--- a/src/main/resources/assets/ebwizardry/spells/vanishing_box.json
+++ b/src/main/resources/assets/ebwizardry/spells/vanishing_box.json
@@ -14,7 +14,7 @@
"element": "sorcery",
"type": "utility",
"cost": 45,
- "chargeup": 0,
+ "chargeup": 10,
"cooldown": 70,
"base_properties": {}
}
\ No newline at end of file
diff --git a/src/main/resources/assets/ebwizardry/spells/vex_swarm.json b/src/main/resources/assets/ebwizardry/spells/vex_swarm.json
index e54c7cc3..7c7c5f09 100644
--- a/src/main/resources/assets/ebwizardry/spells/vex_swarm.json
+++ b/src/main/resources/assets/ebwizardry/spells/vex_swarm.json
@@ -14,7 +14,7 @@
"element": "sorcery",
"type": "minion",
"cost": 50,
- "chargeup": 0,
+ "chargeup": 10,
"cooldown": 200,
"base_properties": {
"minion_lifetime": 600,
diff --git a/src/main/resources/assets/ebwizardry/spells/wall_of_frost.json b/src/main/resources/assets/ebwizardry/spells/wall_of_frost.json
index 87e3daf6..844c2150 100644
--- a/src/main/resources/assets/ebwizardry/spells/wall_of_frost.json
+++ b/src/main/resources/assets/ebwizardry/spells/wall_of_frost.json
@@ -14,7 +14,7 @@
"element": "ice",
"type": "utility",
"cost": 15,
- "chargeup": 0,
+ "chargeup": 15,
"cooldown": 0,
"base_properties": {
"duration": 600,
diff --git a/src/main/resources/assets/ebwizardry/spells/water_breathing.json b/src/main/resources/assets/ebwizardry/spells/water_breathing.json
index 9cee0e43..cb03821e 100644
--- a/src/main/resources/assets/ebwizardry/spells/water_breathing.json
+++ b/src/main/resources/assets/ebwizardry/spells/water_breathing.json
@@ -14,7 +14,7 @@
"element": "earth",
"type": "buff",
"cost": 30,
- "chargeup": 0,
+ "chargeup": 15,
"cooldown": 250,
"base_properties": {
"water_breathing_duration": 1200,
diff --git a/src/main/resources/assets/ebwizardry/spells/wither_skull.json b/src/main/resources/assets/ebwizardry/spells/wither_skull.json
index e1bc8083..a8fca3bb 100644
--- a/src/main/resources/assets/ebwizardry/spells/wither_skull.json
+++ b/src/main/resources/assets/ebwizardry/spells/wither_skull.json
@@ -14,7 +14,7 @@
"element": "necromancy",
"type": "attack",
"cost": 20,
- "chargeup": 0,
+ "chargeup": 5,
"cooldown": 30,
"base_properties": {
"acceleration": 0.1
diff --git a/src/main/resources/assets/ebwizardry/spells/zombie_apocalypse.json b/src/main/resources/assets/ebwizardry/spells/zombie_apocalypse.json
index 0b565af8..d6686e9e 100644
--- a/src/main/resources/assets/ebwizardry/spells/zombie_apocalypse.json
+++ b/src/main/resources/assets/ebwizardry/spells/zombie_apocalypse.json
@@ -14,7 +14,7 @@
"element": "necromancy",
"type": "construct",
"cost": 150,
- "chargeup": 0,
+ "chargeup": 25,
"cooldown": 300,
"base_properties": {
"duration": 500,
diff --git a/src/main/resources/assets/ebwizardry/textures/gui/spell_charge_meter.png b/src/main/resources/assets/ebwizardry/textures/gui/spell_charge_meter.png
new file mode 100644
index 0000000000000000000000000000000000000000..dd8b6019d29eacc5c825b50288223d54fc967416
GIT binary patch
literal 3511
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