#Spellforge (Noita-like Spellcrafting)
1 messages · Page 2 of 1
Hey it's either all or nothing 😄 so we go for the all side ^^
I’m pretty sure you’ve technically been able to do “instant cast/no travel” at range spells since like 0.49
it was just projectile spells and custom spells that didnt work
I had to actually avoid that issue with ironfist and on target enchantments
certainly easier now with SFP tho and proper sfx/vfx too
More delay...
I'm reworking homing
I tried to originally make it super light weight but it just feels bad
like so bad that I question the actual use of it
it misses even stationary targets most of the time
it was basically (forcevec) at launch at nearest target but delayed slightly so that it looked a bit normal (goes forward for a moment then curves towards a target), but it just doesn't work well. I need to actually do a low frequency polling for the projectile and steer it more actively
I'm thinking instead of per projectile lua brains I'll just make a sort of central homing conductor and have it manage projectiles that have homing
Have you considered making homing projectiles slower to make the homing more accurate?
With default speed it’s not going to be good I think
The projectiles of spells are hella fast

Homing on timer payload
new homing works
UI works

balancing time
then its READY

Almost release😊
alright mana costs are in
they are lenient
but still exist so its not just free
I'm going to try and fake the spell that shows when you hover over a spell you made
and then you guys can test it
I've got ||test builds||
soon

test of the fake spell recipe hoverover
need to add in actual damage stats still but just testing out the icons
Looks sick
noticed cast chance being excessively punishing for some reason, fixing this bug and then the test build is ready

its all WORKING
TEST BUILD
Requires SFP
add folder, enabled spellforge.omwscript
I have an important question. Two, in fact. What is Noita and why are your trees glowing as if they were from Fallout? 
Trees are glowing because of PBR texture bug
Noita is a wand crafting indie game
that's some peak immersive soundtrack 😄
[Eng] Noita is an amazing game with a bunch of secrets, some of which are still not open to the community. I love the unusual atmosphere of its world, I hope I managed to convey it.
Put Hämis👍 under the video
[Rus] Нойта - удивительная игра с кучей секретов, некоторые из которых до с...
this may explain our goals a bit
Welcome to Noita new people!
Noita Trigger Spells Guide: https://www.youtube.com/watch?v=g1-BgUYPC8Y
Twitch: https://www.twitch.tv/DunkOrSlam
Twitter: https://twitter.com/DunkOrSlam
#Noita
triggers/timers
multicasting
payloads
at some point in the future, actual wand building could be a thing
but I was focused more on this more 'organic' method of blending Noita with Morrowind
instead of wands and wandbuilding, its spellcrafting
Somebody said WANDS https://www.nexusmods.com/morrowind/mods/49427
yes yes wands
at some point
a consideration
would require a rework of how the modifiers currently work
they were built around the expectation of being put inside a spell recipe
true noita wand building would have to work around reading spells in a wand deck in sequential order and also accommodate spellwrapping.
so multicast wouldn't be cast the next spell 3 times, in a wand it should be cast the next 3 spell 'cards' in the wand
as a note, yes, the test mod is still bloated as fuk but I wanted people to play around while i clean it up
it won't have 50+ lua files on release
hopefully

Heyy congrats on the moves, great job!
I need to update sfp to official version so the piercing is supported🙌 will do that in 1-2hrs
@inner vector SFP is updated both on Git and Nexus to support piercing

Thanks to your earlier input it was fast merge ❤️
the only thing I can think of now is UI polish
and bugfixes
its probably almost release time

Yes the banners are here:
https://forums.nexusmods.com/topic/13535851-the-2026-morrowind-may-modathon-month-celebrating-24-years-of-morrowind/
The 2026 Morrowind May Modathon Month Modding Competition - May 1st-June 2nd Looking to participate? Use the Modathon Logo in your mod description! Got questions? Stop by the Modathon Discord Channel! Participating Mods: Commercium - Fair Trade (OpenMW) by Kildozery Enumeratio - Player Stats Coun...
If you want to submit for specific week achievement, you add the week one, otherwise just the general modathon 2026 banner
idk week 3 kinda seems sorta fitting too
quick note, download v1.01
1.0 had debug logs enabled and my old 32 projectile limit as default
now its 128 projectile limit
Expect madness from Nexus comments anyway 😄 They seem to be the best testers ever haha finding so weird bugs many times
already found a bug myself 
like the moment I fix something I break it
quick quick hide the mod
I havent tested a payload inside a payload inside a payload in a while
and well it dont work bro anymore oopsie
thats what I get for rushing
should have been testing all the features more often
Don't worry, I swear that it's only after release that you find most bugs
This is the shittiest part, it's like a jinx when pressing Upload button 😄

so excited to release
and its borked

beware the uploaaaaad
BEWAAAARE
Bug-splatting is fun in it's own right, finally getting a product to a "finished" state after a few weeks of patching is a feeling of euphoria
Pressing escape whilst the spell menu is open unlocks movement again
Oh hell yeah, this works with Incantation - this is even stronger >:^)
It's interesting that it's working together like that on the go without patches 😄
I think it checks for the creation of dynamic spell ids
Then gives xp to Incantation whenever a spell with a dynamic id is cast
So it makes sense that it would
Though being able to gain xp for free when creating a free spell is a little cheesy, but that can be fixed another time
Tracking generated spells and generally objects can be a bit tricky, its IDs are like 0x04815 0xb851 etc etc
Surprisingly clean
Though something appears to be blocking my casting
[17:17:35.426 E] Error handling text key spellcast: target release: Weapon '"spellforge_invisible_static"' not found
[17:17:35.430 I] L@0x1[scripts/incantation/player.lua]: INCANTATION SKILL MOD: Cast custom spell 'Test' (+2.9 XP, +3 magicka [6.0% refund])
[17:17:35.446 I] Global[scripts/spellforge/global/init.lua]: [spellforge][global.executor][WARN] SPELLFORGE_COMPILED_RUNTIME_FALLBACK_BLOCKED spell_id=Generated:0x39fa recipe_id=58bd651c reason=feature_flag_disabled
[17:17:35.462 I] L@0x1[scripts/spellforge/player/init.lua]: [spellforge][player.init][ERROR] intercept dispatch failed spell_id=Generated:0x39fa err=live runtime required for Spellforge operator recipe: feature_flag_disabled
Did I not install something correctly?
Oh, I think I forgot to add lua physics to my list
Hmm, nope that's on
@inner vector Any idea what might be causing this?
Lua physics are no more required for Spell Framework Plus to work
Just fyi
Ah, good to know, though another mod I have still lists it iirc
Hmm, it works for just a plain Absorb Health spell
This works
This does not for some reason
Yeah, nothing using operators is working for me
Have you updated SFP to v1.81?
Yeah
Slowchu has to give a hand here, I haven't checked the Spellforge code at all yet
Ye, I'm in no rush though. So will let Slow have a gander when they get the chance
Me
I broke it
and fell asleep
cux it was 5am
Ahh
I work till 11pm
so it wont be fixed till tomrrow
hence why I was rushing to release
wont be out till at least halfway thru week 2 of mod a thon
maybe even further

That's fine though! Even in it's current state, I can use it as a spellcrafter on the fly to suit my mage character better than spending insane amount of gold
yeah I think I broke everything when cleaning up
I shouldn't have done that.
who cares if I have 70 files as long as it runs

Honestly mood
oh well, time for work. I'll try to fix it tonight
I think I might delete the nexus page and re-release for Week 3
I could probably clean this up into pretty much 5 files, but that's not how my brain works, and it's harder to maintain if I do that
MOOD
Hey I like that attitude haha 😄
It's like a projection of me haha, working on 1 laptop for a company while side to side there's my laptop with modding at the same time 😄
I wish the day had at least 30-36hrs, maybe it would be doable without pushing myself
Okay things are appearing to be working again
but I'm going to do a deep dive with testing this time
and also no DEBLOAT
Debloat is tough with ai code, needs extra caution and double testing from my observations 😄
at least I made some backups before I started the debloat
but I also had some changes I made that didnt get saved so I've had to fix that up as well
need to fix the window losing focus if you press esc, need to fix spell icon if you use a modifier as the first spell, need to fix spell creation overriding the spell you made, need to make the saved recipe list actually a list and not a single item, etc.
I've accepted just going for Week 3
I deleted the nexus page as well
Repaired rollback
please test repaired version
it was a rollback so its missing some recipe functionality
but it should be fairly stable now
some combos wont work but it should say something like effect_name_feature_deferred
thats basically what I'm going to add back in now that it seems stable again, the missing features
window focus should be fixed now too 😉
Will test :3
Escape now properly closes the window
[10:51:34.221 E] Error handling text key spellcast: target release: Weapon '"spellforge_invisible_static"' not found
[10:51:34.224 I] L@0x1[scripts/spellforge/player/init.lua]: [spellforge][player.init][INFO] intercept dispatch sent spell_id=Generated:0x3a05
[10:51:34.224 I] L@0x1[scripts/incantation/player.lua]: INCANTATION SKILL MOD: Cast custom spell 'New Spell' (+2.9 XP, +3 magicka [6.5% refund])
[10:51:34.245 I] Global[scripts/spellforge/global/init.lua]: [spellforge][global.executor][WARN] SPELLFORGE_COMPILED_RUNTIME_FALLBACK_BLOCKED spell_id=Generated:0x3a05 recipe_id=ffffffffc9c174b0 reason=not_single_group
[10:51:34.262 I] L@0x1[scripts/spellforge/player/init.lua]: [spellforge][player.init][ERROR] intercept dispatch failed spell_id=Generated:0x3a05 err=live runtime required for Spellforge operator recipe: not_single_group
[10:51:34.262 I] L@0x1[scripts/spellforge/player/init.lua]: [spellforge][player.init][INFO] SPELLFORGE_COMPILED_DISPATCH_SUPPRESSED spell_id=Generated:0x3a05 authorized=unknown reason=live runtime required for Spellforge operator recipe: not_single_group
Seems to be Operator issues again
Just having emitters works as normal
you might need to remake your spell
or try an earlier save
that doesnt have the mod
I remade the spell, lemme try another save
Same issue if I load a save before the mod
Oh it worked that time
Oh, I saw the issue, I accidentally entered
Emitter
Timer
Multicast
Burst
Spread
Emitter
instead of
Emitter
Timer
Multicast
Burst
Emitter
oh yeah
But the spell validated
burst and spread are both like
spell pattern
they cant be in the same payload
it should have rejected it

Let me try that again on the more recent save
newer save is gonna be angry
This is getting validated despite not having trigger or timer
It's working on the newer save now
thats fine
burst is a multicast modifier
OH
I see
I mean its still technically 'fine'
its shooting a fireball, and 3 fireballs in a cone at the same time
Except it was firing as a single projectile
No error that I could see, lemme remake it and check again
Oh, hmmm - I think the operator that's throwing the error is Chain
can you paste it? 👀
This is what happens when I cast Fireblast
[11:11:40.117 E] Error handling text key spellcast: target release: Weapon '"spellforge_invisible_static"' not found
[11:11:40.120 I] L@0x1[scripts/spellforge/player/init.lua]: [spellforge][player.init][INFO] intercept dispatch sent spell_id=Generated:0x3a5a
[11:11:40.120 I] L@0x1[scripts/incantation/player.lua]: INCANTATION SKILL MOD: Cast custom spell 'Fireblast' (+3.5 XP, +7 magicka [10.0% refund])
[11:11:40.138 I] Global[scripts/spellforge/global/init.lua]: [spellforge][global.executor][WARN] SPELLFORGE_COMPILED_RUNTIME_FALLBACK_BLOCKED spell_id=Generated:0x3a5a recipe_id=ffffffffd6ec302b reason=not_single_group
[11:11:40.155 I] L@0x1[scripts/spellforge/player/init.lua]: [spellforge][player.init][ERROR] intercept dispatch failed spell_id=Generated:0x3a5a err=live runtime required for Spellforge operator recipe: not_single_group
[11:11:40.155 I] L@0x1[scripts/spellforge/player/init.lua]: [spellforge][player.init][INFO] SPELLFORGE_COMPILED_DISPATCH_SUPPRESSED spell_id=Generated:0x3a5a authorized=unknown reason=live runtime required for Spellforge operator recipe: not_single_group
Just to confirm, is Chain before or after the emitter? It validates both ways
This is for before
[11:15:07.259 E] Error handling text key spellcast: target release: Weapon '"spellforge_invisible_static"' not found
[11:15:07.264 I] L@0x1[scripts/spellforge/player/init.lua]: [spellforge][player.init][INFO] intercept dispatch sent spell_id=Generated:0x3a66
[11:15:07.265 I] L@0x1[scripts/incantation/player.lua]: INCANTATION SKILL MOD: Cast custom spell 'Touch of Wrath' (+3.5 XP, +7 magicka [11.0% refund])
[11:15:07.288 I] Global[scripts/spellforge/global/init.lua]: [spellforge][global.live_simple_dispatch][INFO] SPELLFORGE_CHAIN_RUNTIME_REJECTED reason=chain_multicast_deferred plan_recipe_id=2c4014e1 source_slot_id=nil payload_slot_id=nil requested_hops=3 max_hops=3
[11:15:07.288 I] Global[scripts/spellforge/global/init.lua]: [spellforge][global.executor][WARN] SPELLFORGE_COMPILED_RUNTIME_FALLBACK_BLOCKED spell_id=Generated:0x3a66 recipe_id=0b586304 reason=chain_multicast_deferred
[11:15:07.309 I] L@0x1[scripts/spellforge/player/init.lua]: [spellforge][player.init][ERROR] intercept dispatch failed spell_id=Generated:0x3a66 err=live runtime required for Spellforge operator recipe: chain_multicast_deferred
[11:15:07.309 I] L@0x1[scripts/spellforge/player/init.lua]: [spellforge][player.init][INFO] SPELLFORGE_COMPILED_DISPATCH_SUPPRESSED spell_id=Generated:0x3a66 authorized=unknown reason=live runtime required for Spellforge operator recipe: chain_multicast_deferred
This is for after, the preview seems to show a conflict, but validating it is a success
[11:17:07.056 E] Error handling text key spellcast: target release: Weapon '"spellforge_invisible_static"' not found
[11:17:07.060 I] L@0x1[scripts/spellforge/player/init.lua]: [spellforge][player.init][INFO] intercept dispatch sent spell_id=Generated:0x3a68
[11:17:07.060 I] L@0x1[scripts/incantation/player.lua]: INCANTATION SKILL MOD: Cast custom spell 'Touch of Wrath' (+1.6 XP, +3 magicka [11.0% refund])
[11:17:07.084 I] Global[scripts/spellforge/global/init.lua]: [spellforge][global.live_simple_dispatch][INFO] SPELLFORGE_CHAIN_RUNTIME_REJECTED reason=no_chain plan_recipe_id=ffffffffba7f3b23 source_slot_id=nil payload_slot_id=nil requested_hops=nil max_hops=0
[11:17:07.084 I] Global[scripts/spellforge/global/init.lua]: [spellforge][global.executor][WARN] SPELLFORGE_COMPILED_RUNTIME_FALLBACK_BLOCKED spell_id=Generated:0x3a68 recipe_id=345535e4 reason=no_chain
[11:17:07.112 I] L@0x1[scripts/spellforge/player/init.lua]: [spellforge][player.init][ERROR] intercept dispatch failed spell_id=Generated:0x3a68 err=live runtime required for Spellforge operator recipe: no_chain
[11:17:07.112 I] L@0x1[scripts/spellforge/player/init.lua]: [spellforge][player.init][INFO] SPELLFORGE_COMPILED_DISPATCH_SUPPRESSED spell_id=Generated:0x3a68 authorized=unknown reason=live runtime required for Spellforge operator recipe: no_chain
👍
chain is the missing link I think
For Fireblast, I need something to trigger the multicast for it to work. I put timer and it worked, same with trigger
I think then yeah, multicast needs to be at the start of a payload, or inside a payload
you should be able to do Multicast -> Fireball
but not fireball multicast fireball
but you can do Fireball -> Timer -> Multicast 8 -> Fireball
[11:22:51.751 E] Error handling text key spellcast: target release: Weapon '"spellforge_invisible_static"' not found
[11:22:51.755 I] L@0x1[scripts/spellforge/player/init.lua]: [spellforge][player.init][INFO] intercept dispatch sent spell_id=Generated:0x3aa3
[11:22:51.755 I] L@0x1[scripts/incantation/player.lua]: INCANTATION SKILL MOD: Cast custom spell 'Fireblast' (+3.2 XP, +8 magicka [14.0% refund])
[11:22:51.792 I] Global[scripts/spellforge/global/init.lua]: [spellforge][global.executor][WARN] SPELLFORGE_COMPILED_RUNTIME_FALLBACK_BLOCKED spell_id=Generated:0x3aa3 recipe_id=0b7dc0d6 reason=not_single_source_emission
[11:22:51.826 I] L@0x1[scripts/spellforge/player/init.lua]: [spellforge][player.init][ERROR] intercept dispatch failed spell_id=Generated:0x3aa3 err=live runtime required for Spellforge operator recipe: not_single_source_emission
[11:22:51.826 I] L@0x1[scripts/spellforge/player/init.lua]: [spellforge][player.init][INFO] SPELLFORGE_COMPILED_DISPATCH_SUPPRESSED spell_id=Generated:0x3aa3 authorized=unknown reason=live runtime required for Spellforge operator recipe: not_single_source_emission
This validates, but doesn't work
Understandable xD
so basically
simple payload works
spell -> trigger/timer -> stuff
but multicast spells into trigger seems wonky?
like multicast 3 fireball -> trigger/timer -> stuff
Homing doesn't seem to be working either - or is hard to tell if it is
This works
This does not
its kind of delayed on a main spell
[11:30:47.801 E] Error handling text key spellcast: target release: Weapon '"spellforge_invisible_static"' not found
[11:30:47.804 I] L@0x1[scripts/spellforge/player/init.lua]: [spellforge][player.init][INFO] intercept dispatch sent spell_id=Generated:0x3b70
[11:30:47.805 I] L@0x1[scripts/incantation/player.lua]: INCANTATION SKILL MOD: Cast custom spell 'Fireblast' (+2.6 XP, +8 magicka [16.5% refund])
[11:30:47.844 I] Global[scripts/spellforge/global/init.lua]: [spellforge][global.executor][WARN] SPELLFORGE_COMPILED_RUNTIME_FALLBACK_BLOCKED spell_id=Generated:0x3b70 recipe_id=fffffffff03828bc reason=not_single_source_emission
[11:30:47.879 I] L@0x1[scripts/spellforge/player/init.lua]: [spellforge][player.init][ERROR] intercept dispatch failed spell_id=Generated:0x3b70 err=live runtime required for Spellforge operator recipe: not_single_source_emission
[11:30:47.880 I] L@0x1[scripts/spellforge/player/init.lua]: [spellforge][player.init][INFO] SPELLFORGE_COMPILED_DISPATCH_SUPPRESSED spell_id=Generated:0x3b70 authorized=unknown reason=live runtime required for Spellforge operator recipe: not_single_source_emission
Also, by default, Spellforge spells seem to travel a LOT faster than vanilla spells
I'll take a look at that as well
Feels about 3x faster
Yeah homing doesn't seem to be doing anything on my end
And the projectiles are continuing as normal
Oh, also
If the initial emitter in this spell collides with an actor or the world
The timer effect still goes off after the duration, is that intentional?
Because if it is, it triggers from the original collision position, which feels weird if it hits an actor
hmmm
I think noita has it become a trigger spell if it hits before the timer goes off
I didnt think about that
shoot.
you can do sub seconds on timer
like 0,25 I think is lower limit
but yeah, homing does a raycast and it might just be outside the radius of detection
homing is the potential performance killer
0.5 is displayed as the lower limit
mine are still fast tho
you are right
I tested a vanilla fireball and it slow af
I'll also take a look at that
https://www.youtube.com/watch?v=g--0ywkwG4k
reduced timer to 0.5, it seems to either be:
Homing somehow isn't working
or
The new emitter is created inside the old one, instead of replacing the old one. The old one destroys the new one, causing the explosion, and the old one doesn't have homing so nothing changes
On a spell with just homing and an emitter, it's still not homing
idk why your spells are so fast 
My timescale is 30
What's yours?
30 is the default, so just want to rule that out xD
5.0

I have no idea why
I have Just Beautiful Morrowind pack installed
maybe one of the mods turns down timescale
Timescale is increased (time sped up) outside of towns to simulate travel taking longer
So that might be messing with stuff
Also another thought? What's your FPS?
Mine is locked to 60 max, but tends to dip down to around 30-40 around cities
I think I set the projectile speed so that speed+ could do something
and vanilla spell be slow for me
just set the speed wrong methinks
but timescale could explain why yours are superfast
and mine are only semi-fast
I wonder if there's a way to set speed regardless of timescale. Because I have no mods that change timescale, but I have mods that change current time when doing stuff like alchemy, enchanting, talking, reading etc
It's using default engine spell speeds unless specified otherwise
its me
Earlier versions of SFP indeed had custom speeds set which was not solid solution
custom default speeds*
so many things to fix

spell speed first, then multicast/chain issues, then homing (unless speed fixes it)
But think of the satisfaction when it's all working 
I'd be glad it's here and not Nexus comments piling up 
😄
openMW expects an actual bolt record
when a spell fails
it casts a default vfx
that is also a weapon bolt
but I was just replacing it with a static nif
replace it with nil
so I need to make an actual invisible bolt
Should work
Then try Colony_assassin_act object
our spells we make are real spells but if a target spell has no effect or data it defaults to a placeholder vfx
or this meshes/EditorMarker.NIF
This one is good for handling stuff while invisible
I use it to attach vfx and stuff like that

or I could just ignore the error
its not like it actually does anything
its just the engine going "hey wait, this isnt a weapon" but its still invisible
I think chain issues are fixed, speed is next
but I sleep
5am

here you can test that out

maybe your chain spells wont be broken now

Will test after I've had some lunch 👍
i sleep. spells still fast sorry 
I bought Noita when it went on sale just because of this mod 😛
Chain works great :3
It works with Custom Spells, like Unofficial TR spells; but they're sorted by spell_id as opposed to spell name, so they appear out of order in the spell list - and while casting the Spellforge spell applies their effects, they don't appear in the tooltip
oh my god
You can make multi-summons with this mod
The TR bound item spells work, but the summons don't with this. I'm just testing whatever I can think of
Hmmm, some spell effects don't work at all
Levitate for example
Oh hmm
Levitate 25pts works
But not 100
Wait works now
I wonder what caused that
Reading about what this mod does made me realize..
Has anyone ever make a procedurally created and distributed spells mod for Morrowind? :v
I know about Fresh Loot
But is there any "Fresh Spells" per say?
What degree do you mean?
I'm pretty sure the TR spells are distributed to actors
And Spell Tomes allow you to learn spells without trainers
And distributes those too
I meant creating crafted spells on the go and giving them to appropriate NPCs
Probably too annoying to implement though, it could be an interesting difficulty mod, but thinking about it, maybe it's not worth it
Mutli-summons work, but only up to 4 actors I think
Yeah
4 actors, any more and they don't summon, but the spell still costs magicka
I think random generation with something like this is a bit temperamental, and I prefer the fact that almost all encounters are hand crafted
Some things are better hand crafted
Some other things are better procedural
Yes
depth of 3 is the limit to prevent the game turning into mush (imagine 3 payloads of 8 multicasts
) perhaps that is causing the issue
with the original spell being depth 0
Spell + Trigger (0) -> Spell + Trigger (1) -> Spell + Trigger (2) -> Spell (3)
speed fixed?
feel free to test
Vanilla spell

actually is too slow now..

about 50% too slow I'd say
feel free to test anyway, surely it will be better than the laser beams you have now
I'll keep working on it after I get some breakfast
please try this one #1495918381176590386 message
noticed a new bug
spells don't persist between saves
like they exist in the spellbook but dont resolve
might put speed on hold for now and fix that first,
the wierd thing is
I'm measuring varying speeds between casts
one cast comes out at 1350
one comes out at 1344
one comes out at 1374
the speed fed into SFP was 2500
default speed for Firespell shows 4500
4500 too fast by like 100%
1250 too slow (~50% too slow)
2500 too fast by like 7%
vanilla speed according to OpenMW code claims 1250 for a firespell

speed must mean something different for the engine compared to SFP
or idk
maybe im just stupid and did something wrong
Hmmm that’s very weird, I’m sure I’m feeding the engine defaults for the spells since the magic api from OpenMW has speed attribute
Might be something wrong on the SFP side still
If you can make a confirmation later I’ll get right to it
Although weird since I also manipulated speed before and it worked just fine
I wonder where the problem is

I can send you later an earlier version of OSSC that had speed spells modifiable by the in game settings, maybe that will make a clue?
For common effects it short-circuits before that:
if n:find("fire") then out.speed = 4500
elseif frost then 2500
elseif shock then 3200
...
elseif school == "destruction" then out.speed = 4500
...
else
baseSpeed = core.getGMST("fTargetSpellSpeed") or 1000
effectSpeedMult = mgef.speed or 1.0
out.speed = effectSpeedMult * baseSpeed
end
Then launchSpell uses:
local speed = data.speed or auto.speed or 1500
So if Spellforge does not pass data.speed, Fire/Destruction gets 4500 from SFP auto-detect, not MagicEffect.speed × vanilla GMST.```
the machine spirit has said thus
Ahh I need to remove the hardcoded values, silly me it got left behind from the early stages
But that I can do in few hrs
no worries 
-- (Vanilla ESM records universally mandate 1.0 multiplier/1000 speed, so we inject fast Oblivion speeds here).
if n:find("fire") then out.speed = 4500
elseif n:find("frost") or n:find("cold") then out.speed = 2500
elseif n:find("shock") or n:find("lightning") then out.speed = 3200
elseif n:find("poison") then out.speed = 2900
elseif n:find("restor") or n:find("heal") then out.speed = 2800
elseif school == "illusion" then out.speed = 3000
elseif school == "alteration" then out.speed = 2900
elseif school == "conjuration" then out.speed = 3000
elseif school == "mysticism" then out.speed = 2900
elseif school == "destruction" then out.speed = 4500
elseif school == "restoration" then out.speed = 2800
else
local baseSpeed = 1000
pcall(function() baseSpeed = core.getGMST("fTargetSpellSpeed") or 1000 end)
local effectSpeedMult = (mgef and mgef.speed) and mgef.speed or 1.0
out.speed = effectSpeedMult * baseSpeed
end```
the original snippet was trunicated
You can comment out the part with the elements and see what will happen
If fire etc and leave only the formula
It should base completely on the engine
So only keep the code from base speed = 1000
any thoughts on race weight
there is no way to detect it afaik
but maybe a toggle?
race weight changes how fast your spells move
I had hardcoded values somewhere for race weight
Can send you that later
While making a different mod
I did that
I could do it on my side as well
But why it affects, I have no idea completely
but I suppose a toggle in SFP makes more sense
Seems like a bug
pcall(function()
baseSpeed = core.getGMST("fTargetSpellMaxSpeed") or 1000
end)
local effectSpeedMult = (mgef and mgef.speed) and tonumber(mgef.speed) or 1.0
out.speed = effectSpeedMult * baseSpeed```
I'll try this out and see if it fixes the default speed issue
I’ll check it later
Todd?
Bug?
no no no
big race move fast, throw fast, cast fast

Well I want to replicate vanilla, and it does not happen like this in Vanilla cast yes?
Ohh
it depends on this setting
I’ll implement that for sure then!
it would need to be a toggle, no?
because I dont think we can directly detect if its enabled
maybe try and compare movement speed to established norms?

Just a toggle which will add the race into formula
Easy fix
So grateful for your mod and work
Truly a battletest for sfp
Yup
I'm gonna assume it should be the native path
and people can disable it
because I'm willing to bet 99% of people don't use that toggle
in the launcher
Just worth noting in the description of the mod and that’s all 🙌
what im saying is most people WILL have race weights enabled since its the default vanilla function, the toggle in the launcher disables it when you turn it on.
nope
the only thing I can think of detecting movement speed
if the setting in the launcher is enabled, every race has the same base movement speed
kind of a hacky way
to detect it
Interesting, might do the trick
I mean it shouldnt cause much issue
idk its still kinda hacky tho
a toggle would be better
I’ll implement this and will remove the hardcoded values of the speeds a bit later 🙌
oh god
if you save while a projectile is alive it bricks your save
I guess I have to make the stupid weapon record
ok it works
even on the old saves

😮
How you handled that?
I made a custom bolt record
named spellforge_invisible_static
and assigned it meshes/EditorMarker.NIF as the mesh
or do you mean how did I cause that?
yeah vanilla morrowind has a lot of nuances that most people wouldn't know about
by assigning the spell record we made with spellforge_invisible_static.nif as the bolt VFX
if you cast a target spell with no effect inside of it
the engine doesnt just fail
it defaults
to a white projectile
since spellforge makes containers that the mod reads as spells, we needed to surpress that
but the vfx isnt just a vfx
its an actual weapon record
bolt type
its stupid beyond belief
absolutely mind boggling work Todd
so just setting our spell id to that invisible mesh technically worked
but like I showed, if you saved while a spell existed the engine is like
WHERE IS THE WEAPON?
so I needed to make an actual invisible bolt
because engine is STOOPID

lol I had to make a patch for a landmass mod called Kalendaar to get it to play nice with Stats Window Extender because it was dumping factions into the morrowind category and swapping reputation (it'd set Morrowind rep to 0 when in Kalendaar, and lose Kalendaar's rep when you left it)

Save fix both big and small
Please Enable spellforge.omwaddon
-# Recipes now persist between saves. Old save spells sadly won't work.
You'll have to delete them and remake them
Hold shift and click on the spell in your spell book to delete a spell
no its too slow... 
why is SFP even with vanilla cast speed too slow

pcall(function()
baseSpeed = core.getGMST("fTargetSpellMaxSpeed") or 1000
end)
local effectSpeedMult = (mgef and mgef.speed) and tonumber(mgef.speed) or 1.0
out.speed = effectSpeedMult * baseSpeed```
its like the vanilla engine is faster
MagicEffect auto-detect: fire damage | Final Speed: 1250
Launched ... spd=1250
our mod confirmed SFP launched it at the right speed
1250
Looking at OpenMW 0.51 RC2, native spells go through ProjectileManager::launchMagicBolt / moveMagicBolts, create a physics projectile with mPhysics->addProjectile, and every update call projectile->setVelocity(direction * (fTargetSpellMaxSpeed * mSpeed * raceWeight)).
SFP helpers are object projectiles: createObject -> teleport -> addScript -> send MagExp_InitProjectile -> local onUpdate computes velocity*dt -> sendGlobalEvent MagExp_ProjectileMove -> global teleport.
So the same numeric speed is not going through the same backend.```
I think its not that vanilla is faster, its that SFP has latency from the extra steps involved in moving a projectile
oh well, our estimated speed (save fix has it) is pretty spot on
Please check newest OSSC, it launches effects aligned to the vanilla speed, something must be in the implementation different on your side 🥸

I will take a look, thanks!
And that is even without removing the „hardcoded” part from sfp, so maybe there’s a missing link in the Spellforge
Just wild guessing though
I love how much mods expose the jank of the original engine
Hey but we learn this way 🙌
maybe it is the simulation timer
mine is at 5.0

thats like 6x less that default
Ahh the timescale
timescale 5.0
This gives me a hint that I need to account for timescale, or rather ignore timescale
In SFP
🙌
is it?
Might be
the missing link?
I’ll test later
Yeah, then it is that
Timescale 30 is vanilla
yeah so idk must be MY mod
I totally need to look into this issue
But I know some mods change timecale, or players change it to make days longer
But that at the same time it needs to act properly if someone for example introduces time slow mod
Hmmm
Tough one here
How to tackle that…
So if OSSC is aligned to vanilla, the likely difference is not just SFP's speed formula. Spellforge is launching generated helper spells with a different payload/record shape.
We’ll test a Spellforge diagnostic that sends the exact OSSC-style MagExp_CastRequest payload using a real vanilla spellId and no speed. If that matches vanilla, then the issue is in Spellforge’s generated helper spell record or launch metadata rather than SFP’s base projectile speed.```
Do all time slow mods work by just changing the timescale?
idk everything seems to run fine at 5.0
the NPCs move normal speed
nothing is 'slow'
I didnt even know I had it installed to change it
yeah days take longer
but idk how it ties into timing stuff in mods
maybe simulationtime gets longer
or runs slower

TODD WHY
have you tested the Save Fix version? It has a better temp fix for speed, and it also prevents a critical bug AND it also preserves spells between saves (going forward only though)
please enable Spellforge.omwaddon ASAP 
Will test in a little bit, just woke up xD
Ossc is not updated on github
Check from nexus please
Havent had the chance to update ossc on git yet 😅
im looking at the nexus version now
not really much changed
the positioning changed a bit
its also slow still for me

Hmm
It's spinning
I can't find the object to ori either
Spell speed is perfect though
Doesn't appear with "vanilla" spellforges
Can see 4 objects there
Aaaand they seem to last forever
Not a fix immediately needed on your end - will likely be something that needs to be changed between this and Incantation, but while spells persist between saves, they're "made" again, granting incantation exp
@hushed granite Not sure if you're still updating Incantation, but in case you are, this might be nice to know
did you enable the omwaddon?
Yup
Also, when a timer triggers, one of the projectiles (assuming the original) is detonating still, is this intended?
yes
The spinning objects disappear when the game restarts btw
Still speen
SpEEeEEen

oh derp
I put meshes twice
meshes/meshes/spellforge
sleep deprivation 
lemme check that real quick if it fixes it
Then it must be something in the payload of Spellforge or its the timescale difference
There we go, works now
idk when I set the speed manually it seems to work just fine for Tyrus
im more confused
😖
The engine must interpret something around this timescale
I’ll try to search through cpp files of openMW when I have time, maybe there will be something
Delving through the grimoires and records of OpenMW documentation and code:
Ts feels like it for real
But yeah source code of openmw is a encyclopedia truly
Praise the search function on github tho
idk I dont think its tied
I think it uses simulation time
mPhysics->stepSimulation(duration, ...);
mProjectileManager->processHits();```
I’ll hop on soon and test ingame how its doing on my setup, with changing timescale
Need to pinpoint this down to avoid problems in the future
The dreaded nexus comments
😄
updated test build for anyone else wanting to test
has the new omwaddon
add folder -> enable spellforge omwaddon and omwscripts
Y opens the menu
I've tested my vanilla casts of the spells and they fly fine, must be something Spellforge related with these projectile speeds...
When changing the timescale nothing happens on my end with vanilla spells, it flies the same

maybe my install is cursed
Try launching fully vanilla game and see
Hmm
I get no VFX with a vanilla setup

the spell with the speed fix still seem to be the correct speed as vanilla so im not quite sure wtf is going on
What you mean, nothing launches? Logs are desperately needed !
spell launches, hits a wall, no explosion
idk im trying to figure out
how to make my session pure
just disabling all the mods except vanilla and spellforge and SFP still loads stuff
sad thing is I cannot reproduce, works fine on my end
just shot few fireballs and they explode fine
Try moving out storages from the openmw document files
I tried deleted the config files and the launcher repopulates them
I dont want to delete my modded setup just to test mods
and new content list doesnt actually swap out directory loads
create a new list profile
and then force remove directories all of them in the new config
right side the paper icon with yellow dot
right down corner
and then go to data directories
its still full
I made another list and it didnt do anything
omg
my old list isnt saved
well guess my old saves are gone now.
no idea what the load order was
restoring the backup didnt change anything
the launcher overwrite the backup
What...
Man that suckks
And the data directories you need to remove if you want to use a vanilla install btw, even if the mods are not enabled, some of them still go through because of being in the data directories list
Untick some from the list, even if you click Uncheck All it still doesnt do that, you need to do it by hand
Had the same issue in the past
In the Content Files, disable leftover esps
its not in the list
Hmmm
This is some weird stuff truly
I had such problems with launcher when doing vanilla list but not as the mod wasnt on the list and it still asked for it ...
ah
the esp file
the launcher restored on its own
the cfg
which still had all the esp in the content list
but not the launcher
idfk I'm starting to really hate the launcher
should just use MO2 like everyone else
Glad you got it sorted
anyway....
speed fix vs vanilla looks the same still
so launching at 2250 speed is about the same as a vanilla cast at 1250 speed

let me try switching to auto-speed through SFP
and see what it looks like
ok lemme try new fresh character
[00:31:25.177 I] Global[scripts/omw_magexp/magexp_global.lua]: [MagExp] Launched 'fireball' [Colony_Assassin_act] spd=1250 spin=4.07
Wtf
Why
It seems like the default value in your install is borked for whatever reason
since the vanilla cast does the same speed
😐
[00:33:09.258 I] Global[scripts/omw_magexp/magexp_global.lua]: [MagExp] Launched 'Generated:0x150' [Colony_Assassin_act] spd=2250 spin=4.07
speed fix cast
see also not exploding now 
But it worked earlier... some changes in the spellforge maybe?
since sfp was left untouched since the update
Or was it directly after the update?
the VFX stopped working when I tried to load in vanilla
a fresh install would be great but that's a lot of extra trouble
Maybe some data files contamination?
meshes/e/magic_area_dst.nif
I wonder if a mod overwrote it
but then why would vanilla casts still work
wtf
nop
im just stupid
i figured it out
lol, lmao even
my fresh character doesn't have a target fire spell, so it didn't autopopulate with area setting
so I switched it to target and 0 aoe
I'm stupid forgive me
no just the missing explosion
the AI seems to insist the speed issue is because the way vanilla spells actually exist
they are run as a physics thingy
SFP is an object helper

Let me test OSSC next
if its working fine then its 1000% my mod being stupid
I dont know what to tell you @cyan phoenix
OSSC is too slow when i cast with it
let me disable spellforge so only SFP and OSSC
just to make sure
still slow 
And for me ossc doesn't work with spellforge
normal cast works
well, ossc works but it has invisible vfx
Yeah
are you casting a spellforge spell WITH OSSC?
Yes
yeah it doesn't know what to do then
it doesn't have the vanilla animation keys to read
so it launches nothing
You need to add the keys from Ossc
if I.AnimationController then
local groups = {
'quickcast','quickbuff','qcconj','qctouch',
'qcalt','qcalts','qcill','qcsnap','qcdrain','qcskrow'
}
for _, g in ipairs(groups) do
I.AnimationController.addTextKeyHandler(g, onTextKey)
end
Yeah it's the vanilla speed
destruction fire spells are the fastest
poison are slowest
lemme check fully vanilla list
I swear to the Divine if I just have the wrong multipliers for elemental speed im gonna
KILL A GOD

backup openmw.cfg
and delete it
after you make your fresh vanilla profile
mine still had a bunch of data paths in the cfg so it wouldnt launch
oh im wrong
frost is the slowest
0.8
poison is 1.0
so 1000 base speed
The OSSC anims have "release" keys that you should be able to listen for. The vanilla cast anims use it

Do still have the old install?
Yeah
I had this problem too, I think it doesn't completely isolate the new install so it's reading somewhere from the old one
my mod has claimed another soul
Nah it's just that you can't really have multiple versions installed or it gets confused
You are too greedy with the blood of Magnus, the subversion of aetherium is destabilizing the very fabric of reality
Removed the install from add/remove programs in windows and it still the same
Shit...
I think it's correlation not causation
Its okay I just need to fix it somehow
are you using interface reimagined
There's nothing quite like the feeling of bricking somebody else's save. Just be happy it's not up on nexus 
I installed it now and nothing changed
Time to remove everything regarding openMW with regedit and maybe that'll help...
it seems like it takes some cfg from not the proper place
you turned all the mods off right
Yes
go to your documents folder, my games, openMW, take the file player_storage.bin, move it to another folder, try running openMW again and see if the issue pops up
not even my mod itself, they just tried to switch to a vanilla profile and it bricked their install 
but it was to test my mod
so I feel responsible

Yeah ik it's all that same feeling in the gut though. This is just normal openmw install bs though, happens to me all the time
might have to move global_storage.bin too
i used to have openMW crash on me randomly and mess up all my mod settings and gui 😐
Yeah I got used to running mods with default settings
shit, it now even doesn't launch when I restored everything
as it was before trying to launch vanilla only

Okay the speed is the same on fully vanilla setup for me
so yeah, no idea what's happening here
vanilla and spellforge spell with vanilla cast
ossc doesnt yield a spell, I'll look into that later on
OSSC doesnt cast vanilla spells for you?
oh
I can even hear hitting an actor with the spell
spellforge is supressing the projectile?
(the hit spell sound)
but it should only suppress the placeholder spell
this is the log of casting a vanilla spell and then spellforge spell
but it might've to do with the invisible marker, I am almost sure
these are base vfxes yes, it should default to it by element but I dunno
Maybe some fault on sfp side, but on the other hand the vanilla spell is flying normally
so most probably some sfp-spellforge-ossc communication issue
I'm confused
I have spellforge and OSSC and it works'
spellforge SPELLS with OSSC will NOT work
spellforge spells aren't spells
they are like
like
you are shooting a lua file
and the mod reads it
and then tells SFP what to do
OSSC is just sending an empty spell as far as spellforge is concerned so it just kills the projectile like its supposed to when it sees the placeholder and nothing else happens because the spell itself doesn't actually cast any effects
so yeah I need to add in detection for OSSC animation key
so it actually shoots the spell with quickcast
[MagExp] [DETONATE] Spawning VFX: meshes/spellforge/invisible_marker.nif at (-566.64971923828125
this might be because this file is NC (no collision)
i need to explain better
it visually kills the placeholder projectile
it still fires it
invisible
it does exist
ah yeah it has no collision
so it never hits anything
hmmm...
shoot.
but being no collision is not good
I need to add collision
if you can get this file I can make it collision for you
since I needed to make it 1st time two days ago
its in the mod
Allright one moment
shit I don't know how to do it 😄 I know how to add flag for no collision
but whats the flag for collision haha
I'll just give the mesh collision and swap it out
If you can do that would be great
lemme try and remember how to do things
the limit of my experience is making a box and this tiny triangle.
so I probably didnt set collision on accident
😅
I think I did it right?

maybe not
I'll work on adding in the animation keys from OSSC
Although I don't know, it seems to only read the start key of the custom casting anims, at least the logs say so that it fallbacks to 1.00 timer. But it detects the start key so it somehow works
?
the file didn't help, I see this though
[13:07:13.732 I] L@0x5c1f[scripts/omw_magexp/magexp_projectile_local.lua]: [MagExp] Adding VFX model: meshes/spellforge/invisible_marker.nif
[13:07:13.732 I] L@0x5c1f[scripts/omw_magexp/magexp_projectile_local.lua]: [MagExp] VFX handle: FAILED
No promise I'll take a look at it today tho
[13:07:13.726 I] Global[scripts/omw_magexp/magexp_global.lua]: [MagExp] MagicEffect auto-detect: fire damage | Final Speed: 4500
[13:07:13.726 I] Global[scripts/omw_magexp/magexp_global.lua]: [MagExp] Attempting to create projectile with recordId: Colony_Assassin_act
[13:07:13.726 I] Global[scripts/omw_magexp/magexp_global.lua]: [MagExp] Created projectile object: @0x5c1f
[13:07:13.726 I] Global[scripts/omw_magexp/magexp_global.lua]: [MagExp] Teleporting projectile to: Addamasartus (-126.98485565185546875, 3538.90966796875, -565.03314208984375)
[13:07:13.727 I] Global[scripts/omw_magexp/magexp_global.lua]: [MagExp] Launched 'Generated:0x328' [Colony_Assassin_act] spd=4500 spin=4.07
[13:07:13.732 I] L@0x5c1f[scripts/omw_magexp/magexp_projectile_local.lua]: [MagExp] Adding VFX model: meshes/spellforge/invisible_marker.nif
[13:07:13.732 I] L@0x5c1f[scripts/omw_magexp/magexp_projectile_local.lua]: [MagExp] VFX handle: FAILED
it tries to add 2 invisible objects, one Colony_assassin and one invisible_marker
That's why there is no collision or visual
spellforge?








