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
This commit is contained in:
@@ -44,6 +44,7 @@ import java.util.Map.Entry;
|
|||||||
public class GuiSpellDisplay {
|
public class GuiSpellDisplay {
|
||||||
|
|
||||||
private static final ResourceLocation INDEX = new ResourceLocation(Wizardry.MODID, "textures/gui/spell_hud/_index.json");
|
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
|
/** 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
|
* mappings as specified by {@code _index.json} (these stack between resource packs). The keys in the map correspond
|
||||||
@@ -55,6 +56,11 @@ public class GuiSpellDisplay {
|
|||||||
private static final Gson gson = new Gson();
|
private static final Gson gson = new Gson();
|
||||||
private static final Random random = new Random();
|
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!) */
|
/** Width and height of the spell icon (very unlikely to change!) */
|
||||||
private static final int SPELL_ICON_SIZE = 32;
|
private static final int SPELL_ICON_SIZE = 32;
|
||||||
/** Number of ticks the spell switching animation plays for. */
|
/** Number of ticks the spell switching animation plays for. */
|
||||||
@@ -99,12 +105,7 @@ public class GuiSpellDisplay {
|
|||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public static void draw(RenderGameOverlayEvent.Post event){
|
public static void draw(RenderGameOverlayEvent.Post event){
|
||||||
|
|
||||||
if(event.getType() != RenderGameOverlayEvent.ElementType.TEXT
|
EntityPlayer player = Minecraft.getMinecraft().player;
|
||||||
&& event.getType() != RenderGameOverlayEvent.ElementType.HOTBAR) return;
|
|
||||||
|
|
||||||
Minecraft mc = Minecraft.getMinecraft();
|
|
||||||
|
|
||||||
EntityPlayer player = mc.player;
|
|
||||||
|
|
||||||
if(player.isSpectator()) return; // Spectators shouldn't have the spell HUD!
|
if(player.isSpectator()) return; // Spectators shouldn't have the spell HUD!
|
||||||
|
|
||||||
@@ -117,12 +118,74 @@ public class GuiSpellDisplay {
|
|||||||
wand = player.getHeldItemOffhand();
|
wand = player.getHeldItemOffhand();
|
||||||
mainHand = false;
|
mainHand = false;
|
||||||
// If the player isn't holding a spellcasting item that shows the HUD, then nothing else needs to be done.
|
// 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 width = event.getResolution().getScaledWidth();
|
||||||
int height = event.getResolution().getScaledHeight();
|
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 flipX = Wizardry.settings.spellHUDPosition.flipX;
|
||||||
boolean flipY = Wizardry.settings.spellHUDPosition.flipY;
|
boolean flipY = Wizardry.settings.spellHUDPosition.flipY;
|
||||||
|
|
||||||
@@ -169,14 +232,15 @@ public class GuiSpellDisplay {
|
|||||||
y = MathHelper.ceil(y/scale);
|
y = MathHelper.ceil(y/scale);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Maybe convert this to use ISpellCastingItem
|
||||||
Spell spell = WandHelper.getCurrentSpell(wand);
|
Spell spell = WandHelper.getCurrentSpell(wand);
|
||||||
int cooldown = WandHelper.getCurrentCooldown(wand);
|
int cooldown = WandHelper.getCurrentCooldown(wand);
|
||||||
int maxCooldown = WandHelper.getCurrentMaxCooldown(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) +
|
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 prevSpellName = getFormattedSpellName(WandHelper.getPreviousSpell(wand), player, WandHelper.getPreviousCooldown(wand));
|
||||||
String spellName = getFormattedSpellName(spell, player, cooldown);
|
String spellName = getFormattedSpellName(spell, player, cooldown);
|
||||||
@@ -184,7 +248,7 @@ public class GuiSpellDisplay {
|
|||||||
|
|
||||||
skin.drawText(x, y, flipX, flipY, prevSpellName, spellName, nextSpellName, animationProgress);
|
skin.drawText(x, y, flipX, flipY, prevSpellName, spellName, nextSpellName, animationProgress);
|
||||||
|
|
||||||
}else if(event.getType() == RenderGameOverlayEvent.ElementType.HOTBAR){
|
}else{
|
||||||
|
|
||||||
boolean discovered = true;
|
boolean discovered = true;
|
||||||
|
|
||||||
@@ -198,7 +262,7 @@ public class GuiSpellDisplay {
|
|||||||
// Doesn't really matter what progress is when in creative, but we might as well avoid the calculation.
|
// Doesn't really matter what progress is when in creative, but we might as well avoid the calculation.
|
||||||
if(!player.isCreative() && !spell.isContinuous){
|
if(!player.isCreative() && !spell.isContinuous){
|
||||||
// Subtracted partial tick time to make it smoother
|
// 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));
|
skin.drawBackground(x, y, flipX, flipY, icon, progress, player.isCreative(), player.isPotionActive(WizardryPotions.arcane_jammer));
|
||||||
|
|||||||
@@ -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
|
* 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
|
* 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
|
* event to cancel spells cast by entities that have the arcane jammer effect. For wands, this is called
|
||||||
* <i>before</i> mana, tier and cooldowns are checked. Also note that this event is only fired once for continuous
|
* <i>before</i> mana, tier and cooldowns are checked, and before charge-up. Also note that this event is only fired
|
||||||
* spells, when they start casting.<br>
|
* once for continuous spells, when they start casting.<br>
|
||||||
* <br>
|
* <br>
|
||||||
* This event is {@link Cancelable}. If this event is canceled, the spell is not cast, mana is not consumed, and the
|
* 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
|
* right-click action that caused it (if any) returns a result of FAIL, meaning that the right-click is passed to
|
||||||
|
|||||||
@@ -117,7 +117,8 @@ public interface ISpellCastingItem {
|
|||||||
/**
|
/**
|
||||||
* Casts the given spell using the given item stack. <b>This method does not perform any checks</b>; these are done
|
* Casts the given spell using the given item stack. <b>This method does not perform any checks</b>; these are done
|
||||||
* in {@link ISpellCastingItem#canCast(ItemStack, Spell, EntityPlayer, EnumHand, int, SpellModifiers)}. This method
|
* 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.
|
||||||
* <p></p>
|
* <p></p>
|
||||||
* <i>N.B. Continuous spell casting from outside of the items requires a bit of extra legwork, see
|
* <i>N.B. Continuous spell casting from outside of the items requires a bit of extra legwork, see
|
||||||
* {@link WizardData} for an example.</i>
|
* {@link WizardData} for an example.</i>
|
||||||
|
|||||||
@@ -355,18 +355,19 @@ public class ItemWand extends Item implements IWorkbenchItem, ISpellCastingItem,
|
|||||||
SpellModifiers modifiers = this.calculateModifiers(stack, player, spell);
|
SpellModifiers modifiers = this.calculateModifiers(stack, player, spell);
|
||||||
|
|
||||||
if(canCast(stack, spell, player, hand, 0, modifiers)){
|
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()){
|
if(!player.isHandActive()){
|
||||||
player.setActiveHand(hand);
|
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;
|
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, stack);
|
||||||
return new ActionResult<>(EnumActionResult.SUCCESS, player.getHeldItem(hand));
|
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
|
// All other (instant) spells
|
||||||
if(cast(stack, spell, player, hand, 0, modifiers)){
|
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);
|
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
|
@Override
|
||||||
public void onUsingTick(ItemStack stack, EntityLivingBase user, int count){
|
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);
|
Spell spell = WandHelper.getCurrentSpell(stack);
|
||||||
|
|
||||||
if(!spell.isContinuous) return;
|
|
||||||
|
|
||||||
SpellModifiers modifiers;
|
SpellModifiers modifiers;
|
||||||
|
|
||||||
if(WizardData.get(player) != null){
|
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
|
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)
|
if(spell.isContinuous){
|
||||||
// Don't call canCast when castingTick == 0 because we already did it in onItemRightClick
|
// Continuous spell charge-up is simple, just don't do anything until it's charged
|
||||||
if(castingTick == 0 || canCast(stack, spell, player, player.getActiveHand(), castingTick, modifiers)){
|
if(useTick >= spell.getChargeup()){
|
||||||
cast(stack, spell, player, player.getActiveHand(), castingTick, modifiers);
|
// 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{
|
}else{
|
||||||
// Stops the casting if it was interrupted, either by events or because the wand ran out of mana
|
// Non-continuous spells need to check they actually have a charge-up since ALL spells call setActiveHand
|
||||||
player.stopActiveHand();
|
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());
|
WizardryPacketHandler.net.sendToDimension(msg, world.provider.getDimension());
|
||||||
}
|
}
|
||||||
|
|
||||||
caster.setActiveHand(hand);
|
|
||||||
|
|
||||||
// Mana cost
|
// Mana cost
|
||||||
int cost = (int)(spell.getCost() * modifiers.get(SpellModifiers.COST) + 0.1f); // Weird floaty rounding
|
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
|
// 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
|
// Cooldown
|
||||||
if(!spell.isContinuous && !caster.isCreative()){ // Spells only have a cooldown in survival
|
if(!spell.isContinuous && !caster.isCreative()){ // Spells only have a cooldown in survival
|
||||||
WandHelper.setCurrentCooldown(stack, (int)(spell.getCooldown() * modifiers.get(WizardryItems.cooldown_upgrade)));
|
WandHelper.setCurrentCooldown(stack, (int)(spell.getCooldown() * modifiers.get(WizardryItems.cooldown_upgrade)));
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "healing",
|
"element": "healing",
|
||||||
"type": "alteration",
|
"type": "alteration",
|
||||||
"cost": 30,
|
"cost": 30,
|
||||||
"chargeup": 0,
|
"chargeup": 5,
|
||||||
"cooldown": 50,
|
"cooldown": 50,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"range": 10,
|
"range": 10,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "sorcery",
|
"element": "sorcery",
|
||||||
"type": "attack",
|
"type": "attack",
|
||||||
"cost": 75,
|
"cost": 75,
|
||||||
"chargeup": 0,
|
"chargeup": 20,
|
||||||
"cooldown": 300,
|
"cooldown": 300,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"range": 20,
|
"range": 20,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "sorcery",
|
"element": "sorcery",
|
||||||
"type": "construct",
|
"type": "construct",
|
||||||
"cost": 150,
|
"cost": 150,
|
||||||
"chargeup": 0,
|
"chargeup": 25,
|
||||||
"cooldown": 400,
|
"cooldown": 400,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"duration": 400,
|
"duration": 400,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "ice",
|
"element": "ice",
|
||||||
"type": "construct",
|
"type": "construct",
|
||||||
"cost": 40,
|
"cost": 40,
|
||||||
"chargeup": 0,
|
"chargeup": 10,
|
||||||
"cooldown": 100,
|
"cooldown": 100,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"duration": 600,
|
"duration": 600,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "lightning",
|
"element": "lightning",
|
||||||
"type": "attack",
|
"type": "attack",
|
||||||
"cost": 25,
|
"cost": 25,
|
||||||
"chargeup": 0,
|
"chargeup": 5,
|
||||||
"cooldown": 50,
|
"cooldown": 50,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"primary_damage": 10,
|
"primary_damage": 10,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "sorcery",
|
"element": "sorcery",
|
||||||
"type": "utility",
|
"type": "utility",
|
||||||
"cost": 20,
|
"cost": 20,
|
||||||
"chargeup": 0,
|
"chargeup": 10,
|
||||||
"cooldown": 100,
|
"cooldown": 100,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"range": 256,
|
"range": 256,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "sorcery",
|
"element": "sorcery",
|
||||||
"type": "defence",
|
"type": "defence",
|
||||||
"cost": 45,
|
"cost": 45,
|
||||||
"chargeup": 0,
|
"chargeup": 10,
|
||||||
"cooldown": 50,
|
"cooldown": 50,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"item_lifetime": 1800
|
"item_lifetime": 1800
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "sorcery",
|
"element": "sorcery",
|
||||||
"type": "alteration",
|
"type": "alteration",
|
||||||
"cost": 40,
|
"cost": 40,
|
||||||
"chargeup": 0,
|
"chargeup": 5,
|
||||||
"cooldown": 60,
|
"cooldown": 60,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"range": 10,
|
"range": 10,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "healing",
|
"element": "healing",
|
||||||
"type": "defence",
|
"type": "defence",
|
||||||
"cost": 25,
|
"cost": 25,
|
||||||
"chargeup": 0,
|
"chargeup": 10,
|
||||||
"cooldown": 40,
|
"cooldown": 40,
|
||||||
"base_properties": {}
|
"base_properties": {}
|
||||||
}
|
}
|
||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "necromancy",
|
"element": "necromancy",
|
||||||
"type": "alteration",
|
"type": "alteration",
|
||||||
"cost": 60,
|
"cost": 60,
|
||||||
"chargeup": 0,
|
"chargeup": 20,
|
||||||
"cooldown": 150,
|
"cooldown": 150,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"range": 10,
|
"range": 10,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "necromancy",
|
"element": "necromancy",
|
||||||
"type": "alteration",
|
"type": "alteration",
|
||||||
"cost": 35,
|
"cost": 35,
|
||||||
"chargeup": 0,
|
"chargeup": 10,
|
||||||
"cooldown": 100,
|
"cooldown": 100,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"range": 10
|
"range": 10
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "necromancy",
|
"element": "necromancy",
|
||||||
"type": "alteration",
|
"type": "alteration",
|
||||||
"cost": 40,
|
"cost": 40,
|
||||||
"chargeup": 0,
|
"chargeup": 10,
|
||||||
"cooldown": 100,
|
"cooldown": 100,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"range": 10,
|
"range": 10,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "necromancy",
|
"element": "necromancy",
|
||||||
"type": "attack",
|
"type": "attack",
|
||||||
"cost": 50,
|
"cost": 50,
|
||||||
"chargeup": 0,
|
"chargeup": 10,
|
||||||
"cooldown": 200,
|
"cooldown": 200,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"range": 12,
|
"range": 12,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "sorcery",
|
"element": "sorcery",
|
||||||
"type": "utility",
|
"type": "utility",
|
||||||
"cost": 40,
|
"cost": 40,
|
||||||
"chargeup": 0,
|
"chargeup": 10,
|
||||||
"cooldown": 200,
|
"cooldown": 200,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"decoy_lifetime": 600,
|
"decoy_lifetime": 600,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "healing",
|
"element": "healing",
|
||||||
"type": "defence",
|
"type": "defence",
|
||||||
"cost": 100,
|
"cost": 100,
|
||||||
"chargeup": 0,
|
"chargeup": 25,
|
||||||
"cooldown": 300,
|
"cooldown": 300,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"resistance_duration": 600,
|
"resistance_duration": 600,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "earth",
|
"element": "earth",
|
||||||
"type": "attack",
|
"type": "attack",
|
||||||
"cost": 75,
|
"cost": 75,
|
||||||
"chargeup": 0,
|
"chargeup": 25,
|
||||||
"cooldown": 250,
|
"cooldown": 250,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"effect_radius": 8,
|
"effect_radius": 8,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "necromancy",
|
"element": "necromancy",
|
||||||
"type": "attack",
|
"type": "attack",
|
||||||
"cost": 35,
|
"cost": 35,
|
||||||
"chargeup": 0,
|
"chargeup": 10,
|
||||||
"cooldown": 75,
|
"cooldown": 75,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"range": 10,
|
"range": 10,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "fire",
|
"element": "fire",
|
||||||
"type": "attack",
|
"type": "attack",
|
||||||
"cost": 15,
|
"cost": 15,
|
||||||
"chargeup": 0,
|
"chargeup": 15,
|
||||||
"cooldown": 0,
|
"cooldown": 0,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"range": 10,
|
"range": 10,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "fire",
|
"element": "fire",
|
||||||
"type": "defence",
|
"type": "defence",
|
||||||
"cost": 20,
|
"cost": 20,
|
||||||
"chargeup": 0,
|
"chargeup": 15,
|
||||||
"cooldown": 80,
|
"cooldown": 80,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"fire_resistance_duration": 600,
|
"fire_resistance_duration": 600,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "fire",
|
"element": "fire",
|
||||||
"type": "utility",
|
"type": "utility",
|
||||||
"cost": 45,
|
"cost": 45,
|
||||||
"chargeup": 0,
|
"chargeup": 10,
|
||||||
"cooldown": 50,
|
"cooldown": 50,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"item_lifetime": 1200,
|
"item_lifetime": 1200,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "healing",
|
"element": "healing",
|
||||||
"type": "utility",
|
"type": "utility",
|
||||||
"cost": 100,
|
"cost": 100,
|
||||||
"chargeup": 0,
|
"chargeup": 15,
|
||||||
"cooldown": 250,
|
"cooldown": 250,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"effect_radius": 5,
|
"effect_radius": 5,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "healing",
|
"element": "healing",
|
||||||
"type": "defence",
|
"type": "defence",
|
||||||
"cost": 75,
|
"cost": 75,
|
||||||
"chargeup": 0,
|
"chargeup": 20,
|
||||||
"cooldown": 300,
|
"cooldown": 300,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"absorption_duration": 1200,
|
"absorption_duration": 1200,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "healing",
|
"element": "healing",
|
||||||
"type": "defence",
|
"type": "defence",
|
||||||
"cost": 45,
|
"cost": 45,
|
||||||
"chargeup": 0,
|
"chargeup": 15,
|
||||||
"cooldown": 200,
|
"cooldown": 200,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"duration": 600,
|
"duration": 600,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "earth",
|
"element": "earth",
|
||||||
"type": "construct",
|
"type": "construct",
|
||||||
"cost": 100,
|
"cost": 100,
|
||||||
"chargeup": 0,
|
"chargeup": 20,
|
||||||
"cooldown": 250,
|
"cooldown": 250,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"effect_radius": 3,
|
"effect_radius": 3,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "earth",
|
"element": "earth",
|
||||||
"type": "attack",
|
"type": "attack",
|
||||||
"cost": 75,
|
"cost": 75,
|
||||||
"chargeup": 0,
|
"chargeup": 15,
|
||||||
"cooldown": 200,
|
"cooldown": 200,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"effect_radius": 5,
|
"effect_radius": 5,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "ice",
|
"element": "ice",
|
||||||
"type": "utility",
|
"type": "utility",
|
||||||
"cost": 45,
|
"cost": 45,
|
||||||
"chargeup": 0,
|
"chargeup": 10,
|
||||||
"cooldown": 50,
|
"cooldown": 50,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"item_lifetime": 1200,
|
"item_lifetime": 1200,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "fire",
|
"element": "fire",
|
||||||
"type": "projectile",
|
"type": "projectile",
|
||||||
"cost": 20,
|
"cost": 20,
|
||||||
"chargeup": 0,
|
"chargeup": 5,
|
||||||
"cooldown": 30,
|
"cooldown": 30,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"range": 20,
|
"range": 20,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "healing",
|
"element": "healing",
|
||||||
"type": "defence",
|
"type": "defence",
|
||||||
"cost": 15,
|
"cost": 15,
|
||||||
"chargeup": 0,
|
"chargeup": 10,
|
||||||
"cooldown": 40,
|
"cooldown": 40,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"health": 8
|
"health": 8
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "healing",
|
"element": "healing",
|
||||||
"type": "buff",
|
"type": "buff",
|
||||||
"cost": 20,
|
"cost": 20,
|
||||||
"chargeup": 0,
|
"chargeup": 10,
|
||||||
"cooldown": 65,
|
"cooldown": 65,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"ward_duration": 600,
|
"ward_duration": 600,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "healing",
|
"element": "healing",
|
||||||
"type": "defence",
|
"type": "defence",
|
||||||
"cost": 35,
|
"cost": 35,
|
||||||
"chargeup": 0,
|
"chargeup": 10,
|
||||||
"cooldown": 150,
|
"cooldown": 150,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"effect_radius": 5,
|
"effect_radius": 5,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "ice",
|
"element": "ice",
|
||||||
"type": "attack",
|
"type": "attack",
|
||||||
"cost": 75,
|
"cost": 75,
|
||||||
"chargeup": 0,
|
"chargeup": 20,
|
||||||
"cooldown": 300,
|
"cooldown": 300,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"range": 20,
|
"range": 20,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "healing",
|
"element": "healing",
|
||||||
"type": "construct",
|
"type": "construct",
|
||||||
"cost": 35,
|
"cost": 35,
|
||||||
"chargeup": 0,
|
"chargeup": 15,
|
||||||
"cooldown": 150,
|
"cooldown": 150,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"duration": 600,
|
"duration": 600,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "ice",
|
"element": "ice",
|
||||||
"type": "attack",
|
"type": "attack",
|
||||||
"cost": 70,
|
"cost": 70,
|
||||||
"chargeup": 0,
|
"chargeup": 20,
|
||||||
"cooldown": 250,
|
"cooldown": 250,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"effect_radius": 7,
|
"effect_radius": 7,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "ice",
|
"element": "ice",
|
||||||
"type": "projectile",
|
"type": "projectile",
|
||||||
"cost": 20,
|
"cost": 20,
|
||||||
"chargeup": 0,
|
"chargeup": 5,
|
||||||
"cooldown": 20,
|
"cooldown": 20,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"range": 15,
|
"range": 15,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "sorcery",
|
"element": "sorcery",
|
||||||
"type": "buff",
|
"type": "buff",
|
||||||
"cost": 35,
|
"cost": 35,
|
||||||
"chargeup": 0,
|
"chargeup": 15,
|
||||||
"cooldown": 200,
|
"cooldown": 200,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"invisibility_duration": 600,
|
"invisibility_duration": 600,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "lightning",
|
"element": "lightning",
|
||||||
"type": "utility",
|
"type": "utility",
|
||||||
"cost": 30,
|
"cost": 30,
|
||||||
"chargeup": 0,
|
"chargeup": 15,
|
||||||
"cooldown": 100,
|
"cooldown": 100,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"thunderstorm_chance": 0.2
|
"thunderstorm_chance": 0.2
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "healing",
|
"element": "healing",
|
||||||
"type": "defence",
|
"type": "defence",
|
||||||
"cost": 30,
|
"cost": 30,
|
||||||
"chargeup": 0,
|
"chargeup": 15,
|
||||||
"cooldown": 100,
|
"cooldown": 100,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"resistance_duration": 600,
|
"resistance_duration": 600,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "lightning",
|
"element": "lightning",
|
||||||
"type": "attack",
|
"type": "attack",
|
||||||
"cost": 40,
|
"cost": 40,
|
||||||
"chargeup": 0,
|
"chargeup": 10,
|
||||||
"cooldown": 80,
|
"cooldown": 80,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"range": 80
|
"range": 80
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "lightning",
|
"element": "lightning",
|
||||||
"type": "projectile",
|
"type": "projectile",
|
||||||
"cost": 25,
|
"cost": 25,
|
||||||
"chargeup": 0,
|
"chargeup": 5,
|
||||||
"cooldown": 60,
|
"cooldown": 60,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"range": 30,
|
"range": 30,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "lightning",
|
"element": "lightning",
|
||||||
"type": "attack",
|
"type": "attack",
|
||||||
"cost": 100,
|
"cost": 100,
|
||||||
"chargeup": 0,
|
"chargeup": 25,
|
||||||
"cooldown": 300,
|
"cooldown": 300,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"range": 40,
|
"range": 40,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "lightning",
|
"element": "lightning",
|
||||||
"type": "attack",
|
"type": "attack",
|
||||||
"cost": 15,
|
"cost": 15,
|
||||||
"chargeup": 0,
|
"chargeup": 15,
|
||||||
"cooldown": 0,
|
"cooldown": 0,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"primary_damage": 5,
|
"primary_damage": 5,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "fire",
|
"element": "fire",
|
||||||
"type": "attack",
|
"type": "attack",
|
||||||
"cost": 100,
|
"cost": 100,
|
||||||
"chargeup": 0,
|
"chargeup": 20,
|
||||||
"cooldown": 200,
|
"cooldown": 200,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"range": 40,
|
"range": 40,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "necromancy",
|
"element": "necromancy",
|
||||||
"type": "attack",
|
"type": "attack",
|
||||||
"cost": 40,
|
"cost": 40,
|
||||||
"chargeup": 0,
|
"chargeup": 10,
|
||||||
"cooldown": 150,
|
"cooldown": 150,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"range": 8,
|
"range": 8,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "lightning",
|
"element": "lightning",
|
||||||
"type": "alteration",
|
"type": "alteration",
|
||||||
"cost": 20,
|
"cost": 20,
|
||||||
"chargeup": 0,
|
"chargeup": 10,
|
||||||
"cooldown": 60,
|
"cooldown": 60,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"range": 10,
|
"range": 10,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "sorcery",
|
"element": "sorcery",
|
||||||
"type": "attack",
|
"type": "attack",
|
||||||
"cost": 40,
|
"cost": 40,
|
||||||
"chargeup": 0,
|
"chargeup": 20,
|
||||||
"cooldown": 100,
|
"cooldown": 100,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"range": 10,
|
"range": 10,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "necromancy",
|
"element": "necromancy",
|
||||||
"type": "attack",
|
"type": "attack",
|
||||||
"cost": 75,
|
"cost": 75,
|
||||||
"chargeup": 0,
|
"chargeup": 15,
|
||||||
"cooldown": 200,
|
"cooldown": 200,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"effect_radius": 5,
|
"effect_radius": 5,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "necromancy",
|
"element": "necromancy",
|
||||||
"type": "alteration",
|
"type": "alteration",
|
||||||
"cost": 100,
|
"cost": 100,
|
||||||
"chargeup": 0,
|
"chargeup": 15,
|
||||||
"cooldown": 300,
|
"cooldown": 300,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"range": 8,
|
"range": 8,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "healing",
|
"element": "healing",
|
||||||
"type": "attack",
|
"type": "attack",
|
||||||
"cost": 10,
|
"cost": 10,
|
||||||
"chargeup": 0,
|
"chargeup": 10,
|
||||||
"cooldown": 0,
|
"cooldown": 0,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"range": 10,
|
"range": 10,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "healing",
|
"element": "healing",
|
||||||
"type": "defence",
|
"type": "defence",
|
||||||
"cost": 50,
|
"cost": 50,
|
||||||
"chargeup": 0,
|
"chargeup": 20,
|
||||||
"cooldown": 80,
|
"cooldown": 80,
|
||||||
"base_properties": {}
|
"base_properties": {}
|
||||||
}
|
}
|
||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "healing",
|
"element": "healing",
|
||||||
"type": "alteration",
|
"type": "alteration",
|
||||||
"cost": 150,
|
"cost": 150,
|
||||||
"chargeup": 0,
|
"chargeup": 25,
|
||||||
"cooldown": 400,
|
"cooldown": 400,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"effect_radius": 8,
|
"effect_radius": 8,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "fire",
|
"element": "fire",
|
||||||
"type": "construct",
|
"type": "construct",
|
||||||
"cost": 30,
|
"cost": 30,
|
||||||
"chargeup": 0,
|
"chargeup": 10,
|
||||||
"cooldown": 100,
|
"cooldown": 100,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"duration": 600,
|
"duration": 600,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "healing",
|
"element": "healing",
|
||||||
"type": "buff",
|
"type": "buff",
|
||||||
"cost": 40,
|
"cost": 40,
|
||||||
"chargeup": 0,
|
"chargeup": 15,
|
||||||
"cooldown": 50,
|
"cooldown": 50,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"hunger_points": 16,
|
"hunger_points": 16,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "sorcery",
|
"element": "sorcery",
|
||||||
"type": "attack",
|
"type": "attack",
|
||||||
"cost": 65,
|
"cost": 65,
|
||||||
"chargeup": 0,
|
"chargeup": 20,
|
||||||
"cooldown": 150,
|
"cooldown": 150,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"blast_radius": 5,
|
"blast_radius": 5,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "earth",
|
"element": "earth",
|
||||||
"type": "minion",
|
"type": "minion",
|
||||||
"cost": 80,
|
"cost": 80,
|
||||||
"chargeup": 0,
|
"chargeup": 20,
|
||||||
"cooldown": 300,
|
"cooldown": 300,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"minion_lifetime": 600,
|
"minion_lifetime": 600,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "sorcery",
|
"element": "sorcery",
|
||||||
"type": "alteration",
|
"type": "alteration",
|
||||||
"cost": 100,
|
"cost": 100,
|
||||||
"chargeup": 0,
|
"chargeup": 15,
|
||||||
"cooldown": 200,
|
"cooldown": 200,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"slow_time_duration": 300,
|
"slow_time_duration": 300,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "sorcery",
|
"element": "sorcery",
|
||||||
"type": "utility",
|
"type": "utility",
|
||||||
"cost": 40,
|
"cost": 40,
|
||||||
"chargeup": 0,
|
"chargeup": 15,
|
||||||
"cooldown": 300,
|
"cooldown": 300,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"length": 25,
|
"length": 25,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "earth",
|
"element": "earth",
|
||||||
"type": "minion",
|
"type": "minion",
|
||||||
"cost": 45,
|
"cost": 45,
|
||||||
"chargeup": 0,
|
"chargeup": 10,
|
||||||
"cooldown": 200,
|
"cooldown": 200,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"minion_lifetime": 600,
|
"minion_lifetime": 600,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "lightning",
|
"element": "lightning",
|
||||||
"type": "construct",
|
"type": "construct",
|
||||||
"cost": 60,
|
"cost": 60,
|
||||||
"chargeup": 0,
|
"chargeup": 10,
|
||||||
"cooldown": 150,
|
"cooldown": 150,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"duration": 600,
|
"duration": 600,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "fire",
|
"element": "fire",
|
||||||
"type": "minion",
|
"type": "minion",
|
||||||
"cost": 40,
|
"cost": 40,
|
||||||
"chargeup": 0,
|
"chargeup": 10,
|
||||||
"cooldown": 200,
|
"cooldown": 200,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"minion_lifetime": 600,
|
"minion_lifetime": 600,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "ice",
|
"element": "ice",
|
||||||
"type": "minion",
|
"type": "minion",
|
||||||
"cost": 100,
|
"cost": 100,
|
||||||
"chargeup": 0,
|
"chargeup": 20,
|
||||||
"cooldown": 400,
|
"cooldown": 400,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"minion_lifetime": 600,
|
"minion_lifetime": 600,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "ice",
|
"element": "ice",
|
||||||
"type": "minion",
|
"type": "minion",
|
||||||
"cost": 40,
|
"cost": 40,
|
||||||
"chargeup": 0,
|
"chargeup": 10,
|
||||||
"cooldown": 200,
|
"cooldown": 200,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"minion_lifetime": 600,
|
"minion_lifetime": 600,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "sorcery",
|
"element": "sorcery",
|
||||||
"type": "minion",
|
"type": "minion",
|
||||||
"cost": 175,
|
"cost": 175,
|
||||||
"chargeup": 0,
|
"chargeup": 20,
|
||||||
"cooldown": 400,
|
"cooldown": 400,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"summon_radius": 2
|
"summon_radius": 2
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "lightning",
|
"element": "lightning",
|
||||||
"type": "minion",
|
"type": "minion",
|
||||||
"cost": 40,
|
"cost": 40,
|
||||||
"chargeup": 0,
|
"chargeup": 10,
|
||||||
"cooldown": 200,
|
"cooldown": 200,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"minion_lifetime": 600,
|
"minion_lifetime": 600,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "fire",
|
"element": "fire",
|
||||||
"type": "minion",
|
"type": "minion",
|
||||||
"cost": 150,
|
"cost": 150,
|
||||||
"chargeup": 0,
|
"chargeup": 20,
|
||||||
"cooldown": 400,
|
"cooldown": 400,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"minion_lifetime": 600,
|
"minion_lifetime": 600,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "necromancy",
|
"element": "necromancy",
|
||||||
"type": "minion",
|
"type": "minion",
|
||||||
"cost": 100,
|
"cost": 100,
|
||||||
"chargeup": 0,
|
"chargeup": 20,
|
||||||
"cooldown": 400,
|
"cooldown": 400,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"minion_lifetime": 600,
|
"minion_lifetime": 600,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "necromancy",
|
"element": "necromancy",
|
||||||
"type": "minion",
|
"type": "minion",
|
||||||
"cost": 100,
|
"cost": 100,
|
||||||
"chargeup": 0,
|
"chargeup": 20,
|
||||||
"cooldown": 400,
|
"cooldown": 400,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"minion_lifetime": 1200,
|
"minion_lifetime": 1200,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "earth",
|
"element": "earth",
|
||||||
"type": "minion",
|
"type": "minion",
|
||||||
"cost": 50,
|
"cost": 50,
|
||||||
"chargeup": 0,
|
"chargeup": 10,
|
||||||
"cooldown": 150,
|
"cooldown": 150,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"summon_radius": 2
|
"summon_radius": 2
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "lightning",
|
"element": "lightning",
|
||||||
"type": "minion",
|
"type": "minion",
|
||||||
"cost": 100,
|
"cost": 100,
|
||||||
"chargeup": 0,
|
"chargeup": 20,
|
||||||
"cooldown": 400,
|
"cooldown": 400,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"minion_lifetime": 600,
|
"minion_lifetime": 600,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "necromancy",
|
"element": "necromancy",
|
||||||
"type": "minion",
|
"type": "minion",
|
||||||
"cost": 35,
|
"cost": 35,
|
||||||
"chargeup": 0,
|
"chargeup": 10,
|
||||||
"cooldown": 150,
|
"cooldown": 150,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"minion_lifetime": 600,
|
"minion_lifetime": 600,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "lightning",
|
"element": "lightning",
|
||||||
"type": "attack",
|
"type": "attack",
|
||||||
"cost": 100,
|
"cost": 100,
|
||||||
"chargeup": 0,
|
"chargeup": 20,
|
||||||
"cooldown": 250,
|
"cooldown": 250,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"effect_radius": 10,
|
"effect_radius": 10,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "earth",
|
"element": "earth",
|
||||||
"type": "attack",
|
"type": "attack",
|
||||||
"cost": 35,
|
"cost": 35,
|
||||||
"chargeup": 0,
|
"chargeup": 10,
|
||||||
"cooldown": 80,
|
"cooldown": 80,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"duration": 200,
|
"duration": 200,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "healing",
|
"element": "healing",
|
||||||
"type": "buff",
|
"type": "buff",
|
||||||
"cost": 50,
|
"cost": 50,
|
||||||
"chargeup": 0,
|
"chargeup": 15,
|
||||||
"cooldown": 100,
|
"cooldown": 100,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"effect_duration": 400
|
"effect_duration": 400
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "sorcery",
|
"element": "sorcery",
|
||||||
"type": "utility",
|
"type": "utility",
|
||||||
"cost": 100,
|
"cost": 100,
|
||||||
"chargeup": 0,
|
"chargeup": 20,
|
||||||
"cooldown": 100,
|
"cooldown": 100,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"teleport_countdown": 75
|
"teleport_countdown": 75
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "sorcery",
|
"element": "sorcery",
|
||||||
"type": "utility",
|
"type": "utility",
|
||||||
"cost": 45,
|
"cost": 45,
|
||||||
"chargeup": 0,
|
"chargeup": 10,
|
||||||
"cooldown": 70,
|
"cooldown": 70,
|
||||||
"base_properties": {}
|
"base_properties": {}
|
||||||
}
|
}
|
||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "sorcery",
|
"element": "sorcery",
|
||||||
"type": "minion",
|
"type": "minion",
|
||||||
"cost": 50,
|
"cost": 50,
|
||||||
"chargeup": 0,
|
"chargeup": 10,
|
||||||
"cooldown": 200,
|
"cooldown": 200,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"minion_lifetime": 600,
|
"minion_lifetime": 600,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "ice",
|
"element": "ice",
|
||||||
"type": "utility",
|
"type": "utility",
|
||||||
"cost": 15,
|
"cost": 15,
|
||||||
"chargeup": 0,
|
"chargeup": 15,
|
||||||
"cooldown": 0,
|
"cooldown": 0,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"duration": 600,
|
"duration": 600,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "earth",
|
"element": "earth",
|
||||||
"type": "buff",
|
"type": "buff",
|
||||||
"cost": 30,
|
"cost": 30,
|
||||||
"chargeup": 0,
|
"chargeup": 15,
|
||||||
"cooldown": 250,
|
"cooldown": 250,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"water_breathing_duration": 1200,
|
"water_breathing_duration": 1200,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "necromancy",
|
"element": "necromancy",
|
||||||
"type": "attack",
|
"type": "attack",
|
||||||
"cost": 20,
|
"cost": 20,
|
||||||
"chargeup": 0,
|
"chargeup": 5,
|
||||||
"cooldown": 30,
|
"cooldown": 30,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"acceleration": 0.1
|
"acceleration": 0.1
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"element": "necromancy",
|
"element": "necromancy",
|
||||||
"type": "construct",
|
"type": "construct",
|
||||||
"cost": 150,
|
"cost": 150,
|
||||||
"chargeup": 0,
|
"chargeup": 25,
|
||||||
"cooldown": 300,
|
"cooldown": 300,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"duration": 500,
|
"duration": 500,
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 3.4 KiB |
Reference in New Issue
Block a user