Unit Option When Damaged Change Into Different Unit (Weakened Battleships)
-
Look to provide an option that when a unit is damaged or repaired that it changes into a different unit type. Based on discussion, "whenDamagedChangesInto" concept to replace units is a better direction than trying to alter unit stats.
XML Options
- whenHitPointsDamagedChangesInto - value="damage:transferAttributes:unitType"
- whenHitPointsRepairedChangesInto - value="damage:transferAttributes:unitType"
Initial example
<attachment name="unitAttachment" attachTo="germanBattleship" javaClass="games.strategy.triplea.attachments.UnitAttachment" type="unitType"> <option name="movement" value="4"/> <option name="attack" value="8"/> <option name="defense" value="8"/> <option name="canBombard" value="true"/> <option name="isSea" value="true"/> <option name="hitPoints" value="3"/> <option name="bombard" value="6"/> <option name="requiresUnits" value="germanDocks:germanFactory"/> <option name="consumesUnits" value="1:germanHull"/> <option name="whenHitPointsDamagedChangesInto" value="1:true:germanBattleshipDamaged"/> <option name="whenHitPointsDamagedChangesInto" value="2:true:germanBattleshipHeavyDamaged"/> </attachment> <attachment name="unitAttachment" attachTo="germanBattleshipDamaged" javaClass="games.strategy.triplea.attachments.UnitAttachment" type="unitType"> <option name="movement" value="2"/> <option name="attack" value="6"/> <option name="defense" value="6"/> <option name="canBombard" value="true"/> <option name="isSea" value="true"/> <option name="hitPoints" value="3"/> <option name="bombard" value="4"/> <option name="requiresUnits" value="germanDocks:germanFactory"/> <option name="consumesUnits" value="1:germanHull"/> <option name="whenHitPointsRepairedChangesInto" value="0:true:germanBattleship"/> <option name="whenHitPointsDamagedChangesInto" value="2:true:germanBattleshipHeavyDamaged"/> </attachment> <attachment name="unitAttachment" attachTo="germanBattleshipHeavyDamaged" javaClass="games.strategy.triplea.attachments.UnitAttachment" type="unitType"> <option name="movement" value="1"/> <option name="attack" value="4"/> <option name="defense" value="4"/> <option name="canBombard" value="true"/> <option name="isSea" value="true"/> <option name="hitPoints" value="3"/> <option name="bombard" value="2"/> <option name="requiresUnits" value="germanDocks:germanFactory"/> <option name="consumesUnits" value="1:germanHull"/> <option name="whenHitPointsRepairedChangesInto" value="0:true:germanBattleship"/> <option name="whenHitPointsRepairedChangesInto" value="1:true:germanBattleshipDamaged"/> </attachment>
Alternative Approach
In the initial post I suggested a property or attachment that would change a unit when it is damaged. Since then I have done more thinking on the matter and would like to table a suggestion that goes in a slightly different direction.The idea is to try and achieve the same effect of altering a units stats and abilities while retaining the same unit.
The suggestion is this... an attachment that defines when and how a unit behaves if damaged....
"WhenDamaged"value= "damagetaken: Att : Def : MV" />
"damagetaken" would be a numeric value representing the damage the unit has sustained. (so you could have multiple attachments to the same unit that has more than 2 hits)
"Att. " could be either the new attack value of the unit while it is damage, or a modifier (ie. -1 to the original attack value of the unit)
The other 2 would just be the same as the above except changing the chosen attribute.
So here is an example of a complete unit with what I am proposing included....
<attachment name="unitAttachment" attachTo="japaneseBattleship" javaClass="games.strategy.triplea.attachments.UnitAttachment" type="unitType">
<option name="movement" value="4"/>
<option name="attack" value="8"/>
<option name="defense" value="8"/>
<option name="canBombard" value="true"/>
<option name="isSea" value="true"/>
<option name="hitPoints" value="3"/>
<option name="bombard" value="6"/>
<option name="requiresUnits" value="japaneseDocks:japaneseFactory"/>
<option name="consumesUnits" value="1:japaneseHull"/>
<option name="whendamaged" value="1:6:6:2"/>
<option name="whendamaged" value="2:4:4:1"/>
</attachment>The reason for this different approach is related to trying to envision a way to keep it clean while versatile.
-
@hepps Thinking about this a little more, I don't think that approach is flexible enough. A use case I could even see in GD would be wanting to adjust bombard value or AA value which wouldn't be possible.
I think making it so all unit attributes can be adjusted is a better way to go. This pretty much means you need a separate "unit attachment" to define them. I think this leads to 2 options (1 was your original proposal):
- Turn unit into other unit(s) when damaged. This is probably the most flexible option as you could even have it so it splits into multiple units (think some fantasy unit).
- Create new "damagedAttachment" which has all the same options as "unitAttachment" and would be used to just override any original values of the unit. Benefit here is you still keep the same "unit" which is a bit more cohesive but might actually be more challenging since you could potentially be changing lots of the units attributes.
With any of these 3 options, you still have to add logic to repair to allow either the unit to be replaced or attributes adjusted.
-
@Hepps I think sticking with "whenDamagedChangesInto" concept is the way to go here and replacing units is gonna work best.
XML Options:
- whenHitPointsDamagedChangesInto - value="damage:unitType:keepDamage" count="numberOfUnits"
- whenHitPointsRepairedChangesInto - value="damage:unitType:keepDamage" count="numberOfUnits"
Initial example:
<attachment name="unitAttachment" attachTo="germanBattleship" javaClass="games.strategy.triplea.attachments.UnitAttachment" type="unitType"> <option name="movement" value="4"/> <option name="attack" value="8"/> <option name="defense" value="8"/> <option name="canBombard" value="true"/> <option name="isSea" value="true"/> <option name="hitPoints" value="3"/> <option name="bombard" value="6"/> <option name="requiresUnits" value="germanDocks:germanFactory"/> <option name="consumesUnits" value="1:germanHull"/> <option name="whenHitPointsDamagedChangesInto" value="1:germanBattleshipDamaged:true" count="1"/> <option name="whenHitPointsDamagedChangesInto" value="2:germanBattleshipHeavyDamaged:true" count="1"/> </attachment> <attachment name="unitAttachment" attachTo="germanBattleshipDamaged" javaClass="games.strategy.triplea.attachments.UnitAttachment" type="unitType"> <option name="movement" value="2"/> <option name="attack" value="6"/> <option name="defense" value="6"/> <option name="canBombard" value="true"/> <option name="isSea" value="true"/> <option name="hitPoints" value="3"/> <option name="bombard" value="4"/> <option name="requiresUnits" value="germanDocks:germanFactory"/> <option name="consumesUnits" value="1:germanHull"/> <option name="whenHitPointsRepairedChangesInto" value="0:germanBattleship:true" count="1"/> <option name="whenHitPointsDamagedChangesInto" value="2:germanBattleshipHeavyDamaged:true" count="1"/> </attachment> <attachment name="unitAttachment" attachTo="germanBattleshipHeavyDamaged" javaClass="games.strategy.triplea.attachments.UnitAttachment" type="unitType"> <option name="movement" value="1"/> <option name="attack" value="4"/> <option name="defense" value="4"/> <option name="canBombard" value="true"/> <option name="isSea" value="true"/> <option name="hitPoints" value="3"/> <option name="bombard" value="2"/> <option name="requiresUnits" value="germanDocks:germanFactory"/> <option name="consumesUnits" value="1:germanHull"/> <option name="whenHitPointsRepairedChangesInto" value="0:germanBattleship:true" count="1"/> <option name="whenHitPointsRepairedChangesInto" value="1:germanBattleshipDamaged:true" count="1"/> </attachment>
-
@redrum Looks great! Seems you have a good plan. I thought the changing of a unit would be far more troublesome.
-
@hepps A few things to consider:
-
Should we just have 1 unit option rather than 2 since they have the same format? Essentially replace 'whenHitPointsRepairedChangesInto' with 'whenHitPointsDamagedChangesInto' in my above example. Then both combat phase and repair phase just checks all of them?
-
Can a unit have multiple hit points and take bombing damage? This gets into whether this feature should only address HP damage or also bombing damage.
-
-
@redrum said in Unit Option When Damaged Change Into Different Unit (Weakened Battleships):
@hepps A few things to consider:
- Should we just have 1 unit option rather than 2 since they have the same format? Essentially replace 'whenHitPointsRepairedChangesInto' with 'whenHitPointsDamagedChangesInto' in my above example. Then both combat phase and repair phase just checks all of them?
I don't fully understand what you are asking here.
- Can a unit have multiple hit points and take bombing damage? This gets into whether this feature should only address HP damage or also bombing damage.
Ideally both. But I don't know what it involves to expand this out to bombing damage. If possible yes.
-
@redrum said in Unit Option When Damaged Change Into Different Unit (Weakened Battleships):
- Can a unit have multiple hit points and take bombing damage? This gets into whether this feature should only address HP damage or also bombing damage.
The one thing I noted which was a curious addition was to the WAW variant where fighters could inflict bombing damage on other normal units. In this case grounded aircraft. It is a very unique use of the attachment. Having looked over the XML I am still confused how the engine handles the two different types of damage... since it appears you can attach both to the same unit.
-
@hepps Hit point damage and bombing damage are treated completely separately. If either reaches 0 then the unit dies but they have no effect on each other. So in theory for this feature, you could set say battleships to have multiple hit points and be bombable. Then you could have different thresholds for each type of damage for it to turn into battleship_damaged. So we'd need separate unit options to handle each case, so something like this:
<option name="whenHitPointsDamagedChangesInto" value="1:germanBattleshipDamaged:true" count="1"/>
<option name="whenBombingDamagedChangesInto" value="1:germanBattleshipDamaged:true" count="1"/> -
@redrum Looks good. It would allow for a full range of options that can be picked by the designer.
-
@redrum Question Red. Does this theoretically mean that if you gave a unit 3 HP as well as 3 Bombing damage.... would the unit then be capable of sustaining 3+3 points of damage? I am curious how the engine would deal with a unit with 2 HPs of damage and 2 Bombing damage.
I'm guessing the two different types of damage would be unrelated to each other. Which could probably cause some issues and conflicts in how the unit is changed. Not that that is a huge issue as long as it is specified in the POS 2 XML.
-
@hepps Yeah, the 2 types of damage (combat vs bombing) are treated completely separately. So for a unit with 3 HP and 3 max bombing damage then could sustain 2 of each before dying.
-
@hepps as always you amaze me H because I was actually thinking the same thing. Obviously they need to be Pu related and tied together. Damage = damage. I wonder if its possible? Once again you thought of the question before I even asked it.
-
@prastle Well they wouldn't necessarily need to be tied together or related... as long as the sample XML clearly defines the uses and limitations/potential conflicts of using both systems on the same unit... then you can have 2 independent types of damage.
-
@hepps I cant see how independent would work when only one monetary system.
-
<option name="whenHitPointsDamagedChangesInto" value="1:germanBattleshipDamaged:true" count="1"/>
<option name="whenBombingDamagedChangesInto" value="1:germanBattleshipDamaged:true" count="1"/>So question on this in case I am missing something here...
Even though the 2 types of damage are independent of one another.... if the unit changed into the same "Damaged" unit at the end of the current combat phase... wouldn't then either type of damage be cumulative?
ie. I send my strat. Bomber in to bomb a undamaged BB. Let's say it achieves a hit and the bombing damage option then changes the unit into a damaged ship (if there is only 1 type of damaged ship), then that new unit would by virtue of the unit change automatically be changed to a unit having only 2 remaining HP.... so then if you had also launched an attack against the same battleship... during the same pound wouldn't the unit now still have only 2 HP at the start of the naval combat? therefore basically overrighting the bombing damage?
-
@hepps It would only work that way if the damaged BB unit had say max HP of 2 instead of 3. The reason is it would only carry over the damage of the unit being replaced (if 'keepDamage'=true) which would only be bombing damage in your case. So you'd end up with a damaged BB unit with 1 bombing damage and 0 hit point damage.
-
@redrum Ah ok. So you would then have to have 4 different types of damaged unit, causing all kinds of issues with unit changing and re-changing depending on the damage taken... that does present an issue.
-
@hepps So using both types of damage on multi hit units is probably not a realistic goal.
-
@hepps Agree. There would need to be further thought and logic to better handle units that can take both types of damage. Probably something like a damageConvert unit option which would translate bombing damage to HP and vice-versa. So say if a BB had 3 HP and 15 max bombing damage then you could have a 1-to-5 damage conversion ratio so it is damaged evenly (ex. if it takes 5 bombing damage then would take 1 HP damage).
You'd also have to think about how repair would work as well (again some conversion ratio so both are repaired at the same time or separate repairs). It gets pretty complicated pretty quickly.
-
@redrum Agreed.
Probably best if those two conversions were independent of one another.