triplea-game / triplea

TripleA is a turn based strategy game and board game engine, similar to Axis & Allies or Risk.
https://triplea-game.org/
GNU General Public License v3.0
1.32k stars 392 forks source link

Allied Air Units Cannot Be Taken as Casualties Offensively (1.10.14474) #4794

Open Cernelius opened 5 years ago

Cernelius commented 5 years ago

In World War II Classic (yet not anymore under v2 Rules onwards) you should be able to take allied air units as casualties in attack, when you send the carriers they are on in battle, but you cannot.

You can test this by starting "World War II Classic", adding 1 Russians Carrier and 2 British Fighters in Black Sea Zone, and sending the Carrier to attack the nearby Germans forces.

If @panther2 , or someone reliable, can confirm what I'm saying is correct, thanks.

The matter, then, would be that, assuming "World War II Classic" is V1 default, this behaviour should happen as default, but having a property for otherwise having what appears to be the current general behaviour, and that property in turn being set true by the "WW2V2" property.

I also see that there is a property called: "Allied Air Independent" that, according to https://github.com/triplea-maps/the_pact_of_steel/blob/master/map/games/pact_of_steel_2.xml, "if true, allied air on your carriers will participate in an attack".

I've tested it, and I confirm that is the behaviour, but I'm not sure if it is related to this matter in any ways, and I'm at loss about the application of that property, as I'm not aware of rulesets in which that should happen (maybe it was a custom property for some original games).

Cernelius commented 5 years ago

Also, I see there is a property in the classic.xml, called "Allied Air Dependents", and it is set as false. From what I remember and lacking any reference to it in pos2, I assume this is the logical opposite of "Allied Air Independent" and this property doesn't actually exist, in the current engine. However, if this would be the case, this would have been wrong, as well, since in that game allied air should not be able to fully take part in the attack, but just being eligible as casualty (it doesn't actually matter for that game, but I tend to think that also support should not work, beside those units rolling no dice themselves).

panther2 commented 5 years ago

@Cernelius

In World War II Classic (yet not anymore under v2 Rules onwards) you should be able to take allied air units as casualties in attack, when you send the carriers they are on in battle, but you cannot.

If @panther2 , or someone reliable, can confirm what I'm saying is correct, thanks.

That is correct. Allied units never attack together. What is special about v1 rules is, that in case a fighter is on an attacking allied carrier that fighter can be chosen as casualty (though not being part of the attacking/shooting forces).

Starting from and including v2 rules a fighter on an attacking allied carrier is simply cargo - it sinks with the carrier.

Cernelius commented 5 years ago

@panther2 But they are cargo in Classic too. I mean, if the attacking carrier with allied fighters is taken as casualty, the fighters are to be removed in the same moment the carrier is removed, not waiting till the end of the battle (like in the case of owned fighters, that always take off at start turn). Can you confirm this too?

The above can be generally relevant for several reasons, in TripleA custom games, albeit, as far as Classic only is concerned, I assume this would be relevant only for defending submarines, that cannot hit air units (since otherwise you never want to take the carrier out before any allied fighters on it, tho you can).

Cernelius commented 5 years ago

To be clear, this is a major bug for World War II Classic.

panther2 commented 5 years ago

...Can you confirm this too?

@Cernelius Yes, as the fighter(s) cannot take off from the attacking allied carrier.

ron-murhammer commented 5 years ago

It appears "Allied Air Dependents" was replaced with its inverse "Allied Air Independent": https://github.com/triplea-game/triplea/commit/09f2ada47f39a8f8e2eedffb94cceb69d6381a87. So "Allied Air Dependents" should be removed from all maps as it does nothing and replaced with "Allied Air Independent"=true if it was false.

I believe this should be set to true for any "classic rules" maps. Now whether this functions to fully meet the classic rules is still an open question but that appears to be what it was created for.

Cernelius commented 5 years ago

@ron-murhammer I cannot disagree more.

I believe this should be set to true for any "classic rules" maps. Now whether this functions to fully meet the classic rules is still an open question but that appears to be what it was created for.

As I said, the "Allied Air Independent" is not the v1, or anything else I'm aware of, behaviour, as it allows allied fighters on attacking carriers to actually attack, while the correct behaviour is that they can be taken as casualties, and nothing else.

In virtually all instances (exception being the naval bombardment, that, again, was correctly worded by v1 default, and just worked wrong, and was relatively recently renamed by v2 default, against my reiterated suggestions), v1 is the default setting. Introducing (for a second time) something that does not default to v1 rules implies making a spurious and confusing mix up of different rulesets, with the consequence that the default is no ruleset at all, and you need to, for example, recreate the v1 ruleset by knowing and hand picking every single option, to be false or true accordingly, which most mapmakers are not going to do, or not going to fully document for the user, or easily get wrong.

Especially since there is virtually no way for the user to actually know the full set of rules of the custom game he is playing (like, will my naval bombardment casualties return fire or not?), and mapmakers tend to be far from infallible and fully documenting (how many maps offer a rulebook like the one of TWW?), the default needs to be fully set to one clear ruleset; hence any deviation from it as default being regarded as bugs, by definition.

To make you a simple example of the factual problem, if you have the engine defaulting to v1 rules in most cases, but having a few instances, instead, defaulting to v2 rules, what will happen is that you will have a bunch of maps that work by v1 rules, either because the maker wanted them so or because he didn't care, and let the game go by the default, and when you play those games as a regular user, with no specific knowledge, you will just assume that you are playing "Classic" and, then, suddenly something works not by "Classic" rules, potentially heavily damaging, and substantially wasting, your gaming experience, which is very upsetting, especially if you are playing with someone that doesn't know the rules that well (and this would happen in all cases in which the mapmaker either missed to set the not-default Classic-yet-not-v1 property true or didn't document it in notes, if this was intended, informing the user that the game works by v1 rules with that exception). An example of this you already have if you play the "Game of Thrones" map. That map has nothing relevant documented it its notes, so you are going to assume that you are playing by "Classic" rules, which is what you are actually doing, except that, then, you are surprised to see that your naval bombardment casualties are not returning fire, while nothing told you that here you were under v2 rules, instead. The more inconsistent exceptions you add, the more unclear mapmaking is, the more cases like this will be frequent.

On top of that, you are likely to derive much confusion from the fact that the "TripleA behaviour" and the "Classic" ruleset are two different things, officialising a "v1 is not Classic, while v2 is Revised" concept, that really doesn't make sense.

Now, if you want to go with default v2, or whatever, I'm still a bit against, as I would rather have default the first numeral in the series, but, at least, then you change everything to be default v2, or whatever; but, if you are not doing that, then you take a ruleset that is default (I assume this being v1, as almost everything points at this, at it makes the most or only sense to have the starting point as default) and stick with it, in all cases, as this is the only thing that makes sense. Any other solution is just asking for confusion and game bugs, that for most abandoned custom maps you will not be even able to identify (as you would be left wordering if this was what the maker intended).

So, assuming the default is and remains v1, the only good way to solve this issue is to change the current default behaviour accordingly to correct v1 rules, and, then, having a new property that, when set true, changes the behaviour to v2, this property being, of course, also set true when the general property setting the game to v2 rules is true. Of course, this implies that all games not having the general v2 rules property set true will potentially be bugged at a map level (but most of them should end up being debugged, at the engine level, as, when v2 rules are not set, it normally means that the map is generally meant to work by v1 rules).

Regarding "Allied Air Independent", as I said, no matter for what obscure reasons it was originally made, that can only be a custom property, not referring to any main rulesets, that allows allied air to fully take part in attacks. I don't know if I would ever use this property (not meaning I would not; I just don't know, and it looks like a fairly cool option to have), but it seems something that may be of some interest, and I recall at least @Frostion liked to have this behaviour for the first map he made.

To be honest, the default behaviour should be relevant only for non-custom Classic games, as I cannot see why you would want to have such a strange behaviour, in your own game. This behaviour is so absurd that its change in Revised looks more like a fix than anything else, and probably Classic would have benefitted from an "errata" retroactively doing the same.

Regarding this thing of having the disabled "Allied Air Dependents", replaced with, assumingly, its inverse "Allied Air Independent", either you get back to the one that did that change, and possibly also the one that originally made the "Allied Air Dependents" property, or we can just stay here guessing about it the whole day. If we want to do this, my guess is that the default behaviour, when "Allied Air Dependents" was false, was working wrongly, while the v2 behaviour, when "Allied Air Dependents" was true, was working fine, and, instead of correctly adressing the matter, the v2 behaviour was just expanded generally, probably on the wrong assumption that here v1 and v2 worked the same, while the ex default, but wrong, behaviour turned into an option for mapmakers (just in case), unrelated to any particular rulesets. Again, I'm merely surmising, or rather crystal-gazing into the past, here; so, please, correct me.

On the actual proposal:

So "Allied Air Dependents" should be removed from all maps as it does nothing and replaced with "Allied Air Independent"=true if it was false.

doing that would cause all maps having the "Allied Air Dependents" property spelled out as false to be bugged, by introducing a wrong behaviour to them (that here I'm assuming was deliberately substantially disabled as a strange tentative process of debugging). On top of that, you would perform a very inconsistent mass change, as usually false properties are simply omitted, thus you would miss all the games that would have had this property false, but (not caring about offering the user the option) they just omitted it, for brevity. Anyways, before doing anything like that, I think it would be mandatory to contact (for his history and opinion) the original maker of the change, if not of the whole behaviour and property.

Going back looking at the nebulous past, with the additional limit of not being a developer, it appears that (like in the case of naval bombardment casualties) here everything was correctly worded and assigned, and if the actual behaviour was effectively the opposite of the new property, there was the bug of attacking allied fighters being able to attack, as default, that should have been addressed by making them unable to do so, while still being eligible casualties, as per correct v1 rules. Then, the "Allied Air Dependents" property would have turned the behaviour into the cargo-only one (that is now incorrectly the default), for all v2 rules and following games.

Cernelius commented 5 years ago

I don't think the current behaviour of the "Allied Air Independent" (terrible naming, in my opinion, as how the hell somebody normal is supposed to guess what that means; why wasn't it called "Allied Air Attacks In Sea Zones", or anything meaningful?) should be really discussed here, as that has little to do with the matter at hand; so I rather suggest opening a new issue if anyone wants to do something on that thing, otherwise here we add the confusion of talking of something that has nothing to do with both Classic and Revised rules.

However, since by now that has become more than just a side note, as I intended it when firstly mentioned, I want to clarify that the current behaviour of "Allied Air Independent" differs from "Classic" rules for at least two major matters:

  1. The allied air in attacking carriers attacks too.
  2. The allied air in attacking carriers is not immediately destroyed if/when you remove the carrier it is supposed to be cargo of*.

*and the program generally doesn't allow you to see which air is on what carrier

Regarding the number 2, since attacking allied air is not removed if the carrier is removed, but, apparently, it crashes thereafter, it should be further indagate what is going to happen if, for example, there is another empty carrier or an island in a sea zone where allied air lost the carrier it was supposed to be the cargo of. Personally, I tend to think that the number 2 might be just a bug (but no way to know, as this property is not a rule of any actual games I'm aware of, and I don't know if and where its intended behaviour may be fully documented, if anywhere (if @panther2 can confirm this too)).

Cernelius commented 5 years ago

And if the now non-existent "Allied Air Dependents" property was originally supposed to give the "cargo-only" behaviour of v2 (just speculating), that is a nonsensical name too, as the Allied air is "dependent" in Classic too, and you should remove it immediately when you remove the carrier it is cargo of, since, differently from the turn player air, it doesn't take off, as @panther2 confirmed, already.

ron-murhammer commented 5 years ago

@Cernelius Can you summarize all that? I skimmed it but that's too much to read.

After I looked a little closer, it doesn't appear "Allied Air Dependents" or its inversion was created to handle this v1 rule. So while I'm considering just removing that property all together given so few maps use it and its poorly named, that is a separate issue that is being discussed on the forum that we can ignore for this issue: https://forums.triplea-game.org/topic/1341/allied-air-independent-property

Given that, I think the easiest way to fix this is to just allow the v1 allied fighter on carrier functionality if both ww2v2 and ww2v3 are false: Allied fighters on an attacking carrier can be chosen as casualties though are not being part of the attacking/shooting forces and still dependents that sink with their carrier.

Cernelius commented 5 years ago

allow the v1 allied fighter on carrier functionality if both ww2v2 and ww2v3 are false: Allied fighters on an attacking carrier can be chosen as casualties though are not being part of the attacking/shooting forces and still dependents that sink with their carrier.

Yeah, most of what I said comes down to this, and I agree, tho I would not say that they are not part of the attacking force, as substantially they are, and I think this one deserves a property. Also, I'm not sure how the ww2v2 and ww2v3 work in all cases in which something is set by ww2v2 and it works the same way in v3 too? Is it actually working this way in all such cases, set both by ww2v2 and ww2v3 (say, for example, "Submersible Subs")? Whatever the case, my suggestion is consistency.

This adds a little bit to the need of seeing where the fighters actually are, since in Classic a submarine might force you to take a carrier before allied fighters or in some cases you might want to save them for something to come.

Mostly I strongly think that we really need to stick with v1=Classic, v2=Revised, etc. allright? Most mapmakers are kinda easy so really better not making mandatory to know the rules like @panther2 to be a mapmaker and get allright, since we will keep having games in which the mapmaker sets just nothing, and goes all default; so the default should really be a specific ruleset 100%.