Lone Wolf Development Forums (http://forums.wolflair.com/index.php)
-   HL - Authoring Kit (http://forums.wolflair.com/forumdisplay.php?f=58)
-   -   EABA Powers (Scripting question) (http://forums.wolflair.com/showthread.php?t=62416)

 EightBitz April 9th, 2019 07:33 PM

EABA Powers (Scripting question)

I've started yet another project that I'm not sure if I'll make it through, but for now, I'm wondering if I could get some scripting help.

If I'm reading the rules correctly, each power costs 1 point to add to the character. After that, every point spent raises the power level by 2. So in the portal, I set the incrementer to have an interval of 2, and that's working fine. But I'm having trouble calculating the point cost.

The script I'm using is below, and this is what's happening.
I add a power. Now I'm left with 9 power points. (This is correct so far.)
Now I increment the power level. It goes from 1 to 3. (This is also correct.)
The problem is, I still have 9 power points. Going from 1 to 3 doesn't subtract a point from my resources.
After that, it works fine. Going from 3 to 5 subtracts 1 point, then 5 to 7 and so on.

I've tried different ways of coding the script, but I can't get it to work how I want.

And yes, I sometimes miss obvious things.

Code:

```    <!-- Each power that is added by the user costs 1 point         Each point spent after that buys 2 points.     -->     <eval index="1" phase="Setup" priority="5000"><![CDATA[       ~we must ignore bootstrapped abilities from races and abilities added via advances       if (isuser + origin.ishero >= 2) then         var uval as number         var cost as number         uval = field[trtUser].value               cost = (uval - 1) / 2         if (cost < 1) then             cost = 1         endif         hero.child[resPP].field[resSpent].value += cost       endif       ]]></eval>```

 Farling April 9th, 2019 11:34 PM

So "(uval -1) / 2"

Does that give the correct subtraction, or should it be "(uval + 1) / 2"?

 Mathias April 10th, 2019 07:30 AM

I would not trust an interval to protect what you're trying to do. Users can still edit the number and type in whatever they want. Instead, I would add a second field that is the power level, and is calculated at 2x field[trtUser].value. Then, you're having the user control the number of points they spent, and displaying the final power level separately. (Or adjust the finalize script on trtUser to display the power level, but that might look odd if the user edits it when it says 4, because they'd see a 2).

I'd read up on the Savage Worlds Wiki - they do a similar thing where the user needs to control dice sizes, and they also need to only show even numbers to the user, but still have a single click change the die size from d4 to d6.

 Mathias April 10th, 2019 07:35 AM

cost = (uval - 1) / 2

So, at a uval of 0, the cost = -1/2 (but then you apply a minimum)
At a uval of 2, the cost = 1/2 (and the minimum applies)
at 4, the cost = 3/2
At 6, the cost = 5/2

That doesn't match the costs you were describing.

 EightBitz April 10th, 2019 11:31 AM

Quote:
 Originally Posted by Farling (Post 277875) So "(uval -1) / 2" Does that give the correct subtraction, or should it be "(uval + 1) / 2"?
It gives the correct subtraction for the division by 2, but not, I now realize, for the final calculation. Your reply gave me this idea:

Code:

```        cost = (uval - 1) / 2         cost = round(cost,0,1) + 1```
And that works.

 All times are GMT -8. The time now is 11:02 PM.