Roll20 uses cookies to improve your experience on our site. Cookies enable you to enjoy certain features, social sharing functionality, and tailor message and display ads to your interests on our site and others. They also help us understand how our site is being used. By continuing to use our site, you consent to our use of cookies. Update your cookie preferences .
×
Create a free account

[HELP] IKRPG damage spiral

Ok, so in IKRPG (as in Warmachine/Hordes) there is the concept of a damage spiral. It is 6 columns total. The 6 columns together represent your vitality. The 6 columns are also paired off into 1-2, 3-4, and 5-6. Each pairing share 2 damage boxes. Also if the pairing is completely boxed (all damaged) then you suffer the effects of that such as rolling one less dice. In Roll 20 you can only have 3 "bars" which in theory could be used for the 3 pairings. However keeping track of which boxes on each of the 6 columns is damaged is important. For example if you have 4 damage in the first pairing, then 2 of the 4 damage boxes are shared by column 1 and 2. So if I suffer 4 damage to column 2 then I would still have one damage box left in that pairing because the damage box from column one didn't get ticked. The damage did however spill over into column 3. To be clear I am not looking to automate the damage rolls or automate the damage recording. I simply want a method/framework that players can use to accurately record the damage based on IKRPG rules. So my question is, How would you approch making this "life spiral" concept? Is there a way to add 3 more bars? Even if you could add 3 more bars, how do you get them to share damage on SOME of the damage boxes? Can this be programed into some other part of the API to allow the users to treat it as the normal damage boxes? By that I would like my players to be able to enter things like "-3" on one column to record damage. Even if this is done via the chat like "/ikrpg -3 c1" to record 3 damage to column 1. But Would I just do that via attributes? Even if I did, how would I handle the sharing of damage? Any help would be great in pointing me towards where to start this. Here are some examples of what the "life spiral" looks like. You roll 1D6 to determine the column to damage.
It looks like this is something that is going to be pretty difficult to work into the current layout of what character sheets look like in Roll20. If I were running it, I would set up my attributes as Physique1 Physique2 Agility3 Agility4 Intellect5 Intellect6 and then use the fields to track damage. (At least, if I'm understanding correctly how the damage works). You'll need a visual in front of you as well.. I'm sure you can probably find an online version of the sheet that you can edit as you go, maybe post a link to each character's in their bio section?
1393702317
Lithl
Pro
Sheet Author
API Scripter
Zerg Cow said: But Would I just do that via attributes? Even if I did, how would I handle the sharing of damage? As Jarrod suggests, I would make 6 attributes on the character sheet to represent the character's health. In the script, I would use a "default" maxium for each attribute (6 by default, although I believe characters can have lower maximums. I've only played IK once.) which you would then reduce by 2 if the paired health track has taken enough damage. Something along these lines (not including the code to access/modify existing health attributes): var health = [ {cur: getAttr('Physique 1'), max: 6}, // "getAttr" is not an existing function, merely a sample placeholder {cur: getAttr('Physique 2'), max: 6}, {cur: getAttr('Agility 3'), max: 6}, // etc. ]; var barHit = // get d6 value or just supply manually to script as a parameter var damage = // get damage amount // Reduce maximums based on existing damage _.each(health, function(track, num, list) { var pair; if (num % 2 == 0) { // Phy1, Agi3, Int5 pair = list[num + 1]; } else { // Phy2, Agi4, Int6 pair = list[num - 1]; } if (pair.cur > 4) { track.max -= 2; if (track.cur > track.max) { track.cur = track.max } } }); // Apply damage, and overflow to adjacent bars as needed health[barHit].cur += damage; while (health[barHit].cur > health[barHit].max) { if (_.filter(health, function(track) { return track.cur < track.max; }).length == 0) { sendChat('System', 'Your character is dead!'); break; } damage = health[barHit].cur - health[barHit].max; health[barHit].cur = health[barHit].max; barHit++; if (barHit == health.length) { barHit = 0; } health[barHit].cur += damage; }