With a few bytes changed in a save file, and a few lines in the debug console, I've got what appears to be a nearly perfect Toorum mode working in Grimrock 2.
Want to try it out? 2.1.1.13 Toorum save file - Hard difficulty, no old school mode, no ironman, no single-use crystals. Just put Toorum.sav in your saves directory, rename it to quicksave.sav or autosave.sav or savegame01.sav or something (so that the game will actually find it) and load it up. It starts right at the beginning of the main campaign.
I haven't quite succeeded in automating the save file changes yet, so I have to do it by hand - hence my only providing one save at the moment. Hopefully I'll find the time to fully automate it soon.
This includes Toorum's enhanced movement speed, along with stats and traits mirroring the ones in Grimrock 1. Although he does not have the Thunderstruck trait, he does have the effect of the Thunderstruck trait (halved cooldowns). It's just not a trait.
I made him a Battle Mage, because that seemed like the closest parallel to Ranger, and started him with skills imitating his Grimrock 1 skills (Armors 8, Axes 5, Earth Magic 5 -> Armors 2, Heavy Weapons 1, Light Weapons 1, Earth Magic 1).
I haven't done a full playthrough with Toorum yet, so it's possible there are some issues I don't know about. But I've tested all the movement and cooldown related things I could think of, and everything's worked so far.
Note that, just like in Grimrock 1, the enhanced movement speed will not carry over if you import this save into a custom dungeon. There's nothing I can do about this. The reduced cooldown will import, however.
What the save editing consisted of:
SpoilerShow
Set bit 1 of the last value in the right 'PROP' chunk that has a string handle to 'flags' to enable Toorum movement speed. There may be more than one, in which case I resorted to trial-and-error. Find the 'STAT' chunk for champion 1 that has a string handle to 'cooldown_rate', and double the last value (from 100 to 200).
So why haven't I automated it yet? Because I can't figure out the rules for dereferencing the string handles. I had to manually find them by changing the string handles in highly visible fields, such as the string handle in the 'OPTS' chunk which is used for the difficulty displayed on the "Load Game" screen.
So why haven't I automated it yet? Because I can't figure out the rules for dereferencing the string handles. I had to manually find them by changing the string handles in highly visible fields, such as the string handle in the 'OPTS' chunk which is used for the difficulty displayed on the "Load Game" screen.