Repository navigation
Changing Spell Values
Stormcaller has no config for spell values. Like Wizards, every value of a spell is in its spell file:
data/stormcaller/spell/<id>.json. A datapack that contains a file with the same path replaces the spell: damage,
cast time, cooldown, range, jumps, radius, duration, shock chance and everything else.
- Take the original file from the Stormcaller jar (
data/stormcaller/spell/<id>.json, the jar is a zip file) or from the source. - Put the changed copy into a datapack:
<world>/datapacks/stormcaller_tweaks/
pack.mcmeta
data/stormcaller/spell/thunderstorm.json
pack.mcmeta for Minecraft 1.21.1:
{
"pack": {
"pack_format": 48,
"description": "My Stormcaller changes"
}
}- Leave the world and join it again (singleplayer), or restart the server.
For modpacks: put the file into kubejs/data/stormcaller/spell/thunderstorm.json (with KubeJS installed). That
works for every world without a datapack per world.
- After joining the world again or restarting the server.
/reloaddoes not reload spells. - In multiplayer the server sends the spells to every client, so tooltips show the new values. Clients need nothing.
- A datapack replaces the whole file. If a later Stormcaller version changes the spell, your copy stays on the old state. After an update, compare your copy with the new file.
- The ids of the spells:
spark,lightning_bolt,chain_lightning,lightning_nova,static_shield,lightning_strike,thunderstorm,storm_elemental. Passives and skill tree nodes have their own files (see the list in the jar).
| Field | Meaning |
|---|---|
range |
Range in blocks (for Lightning Nova: the radius around you) |
tier |
Spell tier; RunelessRPG takes the mana cost from it |
active.cast.duration |
Cast time in seconds (missing = instant) |
cost.cooldown.duration |
Cooldown in seconds |
cost.item.id |
Rune that the spell costs (runes:lightning_stone) |
deliver.projectile.projectile.perks.ricochet |
Jumps to more targets (Spark 1, Lightning Bolt 2, Chain Lightning 4) |
deliver.projectile.projectile.perks.ricochet_range |
Range of a jump in blocks |
deliver.clouds[0].volume.radius |
Radius of the Thunderstorm cloud |
deliver.clouds[0].time_to_live_seconds |
Duration of the Thunderstorm cloud |
area_impact.radius |
Radius of Lightning Strike |
impacts[].action.damage.spell_power_coefficient |
Damage as a factor of Lightning Spell Power |
impacts[].action.custom.handler |
Stormcaller markers, see below |
Some values of Stormcaller cannot be expressed with the normal fields of Spell Engine. They are marker impacts in
the impacts list: a CUSTOM impact whose handler carries the number.
{ "action": { "type": "CUSTOM", "custom": { "intent": "HARMFUL", "handler": "stormcaller:shock/25" } } }- The number is the base shock chance in percent per hit; decimals work (
stormcaller:shock/12.5). Put it behind theDAMAGEimpact. - Each hit rolls once with this chance plus the Shock Chance of the caster (see Shock).
-
stormcaller:nova_shockalways shocks and uses the stun ofnova_stun_seconds(Lightning Nova). - Spells of other mods can get the marker too; their lightning hits then shock with that base chance.
- Without the marker, a spell's lightning hits only shock with the caster's Shock Chance.
{ "action": { "type": "CUSTOM", "custom": { "intent": "HARMFUL", "handler": "stormcaller:max_targets/3" } } }- The most enemies one hit of a Thunderstorm cloud (
stormcaller:storm_cloud) strikes. With more enemies below the cloud, that many are picked at random, each at most once per hit; with that many or fewer, all are hit. -
Without the marker (or with 0) there is no limit: the cloud strikes every enemy below it again. If you replace
thunderstorm.json, keep the marker. Its tooltip would then also say "up to 0 enemies". - The marker does nothing on its own; the cloud reads it from the spell.
Thunderstorm with 0.30 instead of 0.28 damage per hit and up to 4 instead of 3 targets. This is the complete file
data/stormcaller/spell/thunderstorm.json; only spell_power_coefficient and stormcaller:max_targets/4 are changed:
{
"school": "spell_power:lightning",
"range": 32.0,
"tier": 4,
"group": "lightning_storm",
"learn": {},
"active": {},
"release": {
"animation": {
"id": "spell_engine:one_handed_area_release"
},
"visuals": {
"particles": [
{
"id": "spell_engine:magic_spark",
"appearance": {
"color": 4294928127,
"motion": "BURST",
"scale": 0.8
},
"batch": {
"count": 12.0,
"shape": "SPHERE",
"anchor": "LAUNCH_POINT",
"min_speed": 0.05,
"max_speed": 0.25
}
}
]
},
"sound": {
"id": "spell_engine:generic_lightning_release",
"volume": 1.0,
"pitch": 1.0
}
},
"target": {
"type": "AIM",
"aim": {
"sticky": true
}
},
"deliver": {
"type": "CLOUD",
"clouds": [
{
"entity_type_id": "stormcaller:storm_cloud",
"spawn_ticks": 10,
"despawn_ticks": 10,
"volume": {
"radius": 4.0,
"area": {
"distance_dropoff": "NONE"
},
"sound": {
"id": "minecraft:entity.lightning_bolt.impact",
"volume": 0.4,
"pitch": 0.85,
"randomness": 0.15
}
},
"time_to_live_seconds": 6.0,
"impact_tick_interval": 20,
"spawn": {
"sound": {
"id": "minecraft:entity.lightning_bolt.thunder",
"volume": 0.45,
"pitch": 0.55,
"randomness": 0.05
}
}
}
]
},
"impacts": [
{
"action": {
"type": "CUSTOM",
"custom": {
"intent": "HARMFUL",
"handler": "stormcaller:fx_cloud_bolt"
}
}
},
{
"action": {
"type": "DAMAGE",
"damage": {
"spell_power_coefficient": 0.3,
"knockback": 0.0
}
},
"visuals": {
"particles": [
{
"id": "spell_engine:magic_spark",
"appearance": {
"color": 4294928127,
"motion": "BURST",
"scale": 0.7
},
"batch": {
"count": 6.0,
"shape": "SPHERE",
"anchor": "ENTITY",
"min_speed": 0.15,
"max_speed": 0.5
}
}
]
}
},
{
"action": {
"type": "CUSTOM",
"custom": {
"intent": "HARMFUL",
"handler": "stormcaller:shock/25"
}
}
},
{
"action": {
"type": "CUSTOM",
"custom": {
"intent": "HARMFUL",
"handler": "stormcaller:max_targets/4"
}
}
}
],
"cost": {
"exhaust": 0.4,
"cooldown": {
"duration": 24.0
},
"item": {
"id": "runes:lightning_stone"
}
}
}The spell tooltips read their numbers from the spell file, so a changed value shows up there by itself. Besides the
tokens of Spell Engine ({damage}, {ricochet}, {cloud_duration}, {cloud_radius}, {impact_range},
{trigger_chance}, {effect_duration}, {stash_duration}, {summon_duration} …) Stormcaller fills these:
| Token | Value |
|---|---|
{cloud_max_targets} |
Number of the stormcaller:max_targets/<n> marker |
{nova_stun} |
nova_stun_seconds from stormcaller-server.toml
|
{ricochet_range_add}, {cloud_radius_add}
|
Additions of modifier spells (Long Arc, Stormweave set) |
{static_rain_duration} |
Slow duration of Static Rain (skill tree) |
{conductor_cooldown} |
Cooldown of Chain Lightning, used by Chain Conductor (skill tree) |
{field_duration}, {field_radius}, {field_damage}, {field_shock}
|
The ground field of Charged Ground (charged_ground_field.json) |
{ball_duration}, {ball_pulse}, {ball_range}, {ball_targets}, {ball_cooldown}, {ball_zap_damage}, {ball_zap_shock}, {ball_discharge_damage}, {ball_discharge_shock}
|
Ball Lightning (trinkets.json and the spells ball_lightning_zap, ball_lightning_discharge) |
{ball_staff_max} |
Most staff balls at once ([ball_lightning] max_staff_balls). In the description of ball_lightning_staff the other {ball_…} tokens read its own helper spells ball_lightning_staff_zap and ball_lightning_staff_discharge
|
{charge_max}, {charge_ricochet}, {charge_decay}, {charge_shock}
|
Stored Charge ([stored_charge] of stormcaller-server.toml) |
The line "Shock chance: …" or "Always shocks." is added to every spell with a shock marker.
The mana cost with RunelessRPG comes from the spell's tier and RunelessRPG's tier table (4 / 5 / 7 / 10 / 14 for tier
0 to 4). To change it, change the tier table in RunelessRPG's server config or give single spells their own cost with
RunelessRPG's datapack, see its wiki page
Datapacks and tags.
- Static Shield damage reduction, Galvanic Rush speed, Storm Elemental base values, jewelry and Ball Lightning movement: JSON configs, see Configuration.
- Set bonuses:
data/stormcaller/equipment_set/fulgurite.jsonandstormweave.json; they point to the modifier spellsfulgurite_chain_lightningandstormweave_thunderstorm.
Stormcaller (RPG Series Plus) for NeoForge 1.21.1 · CurseForge (coming soon) · Source · Report a bug
Start
For players
For pack makers
Reference