#SOGL V0.12, 110 78 bytes
θKKι"LUOEPM”;W:A≤{B"⁶Μ↓§QΕņj“L─"¶Ζq«╝γDyΜ2¶S◄Μ$‘č¹I6nēwι{_Cb:ƧRA=┌ΚKι=?aIc»+
Try it Here!
Could probably golf a byte or two from redoing everything
Explanation:
θ split on spaces
K pop the 1st item
K pop from the string the 1st character
ι remove the original string from stack
"”;W get the chars index in "LUOEPM"
:A save a copy to variable A
≤ put the power (used as the mana) on the bottom of the stack (with the thing above being the input array)
{ for the leftover items in the input do
B save the current name on B
"..“ push 456779223467234567
L─ base-10 decode it (yes, silly, but it converts it to an array of digits)
".‘ push "VEKIBGKRDN-SYVOFDZ"
č chop to characters
¹ create an array of those two
I rotate clockwise
6n group to an array with sub-arrays of length 6 (so each array in the array contains 3 items, corresponding to the categories, each with 6 arrays with the runes 1st letter (or "-" in the case of Ra) and base cost)
ē push variable e (default = user input number, which errors and defaults to 0) and after that increase it (aka `e++`)
w get that item in the array (the array is 1-indexed and the variable is not, so the array was created shifted (which somehow saves 0.9 ≈ 1 byte in the compression))
ι remove the original array
{ for each in that (current category) array
_ dump all contents on stack (so pushing the runes name and then base cost)
C save pop (base cost) on variable B
b: duplicate the name
ƧRA= push if pop = "RA"
┌* get that many (so 0 or 1) dashes
Κ prepend the "" or "-" to the name
K pop the 1st letter of the name
ι remove the modified name, leaving the 1st letter on the stack
=? if top 2 are equal (one of the dumped items and the 1st letter of the current inputs)
a push variable A (the power)
I increase it
c push variable C (the current base cost)
* multiply
» floor-divide by 2
+ add that to the power