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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