Land Transport Improvements
-
So I wanted to take a look at the current land transport logic to see if any fixes/improvement could be made and then program the AI to properly use them.
My current understanding is:
- Player must have MechanizedInfantry tech for them to function
- Land transport units must have "isLandTransport=true"
- Units that can be transported must have "isInfantry=true"
- "isLandTransport" units can only transport "isInfantry" units on a one-to-one basis
- "isInfantry" units can only be land transported if they haven't moved at all this turn
- "isLandTransport" can transport multiple units in the same turn (only limited by the amount of movement it has)
Anything I'm missing or incorrect on? Any known bugs? Any suggested improvements?
Addressed
- Add new parameter "isLandTransportable" that functions the same as "isInfantry" which will be considered deprecated (some time in the future it will be removed all together as it is a very confusing property with a bad history).
- Fix bug that didn't allow air transports and land transports to be moved in the same move.
- Have units with "isLandTransport" utilize the "transportCapacity" property to determine how many units they can transport and if not set then default to being able to transport 1 unit (keeps current functionality unchanged).
- Have "isLandTransportable" units utilize "transportCost" so they then function similar to sea transports. The goal then is to have the engine make a best effort to load all selected land transports and transportable units but if it selects them incorrectly then the player may need to move 1 land transport at a time.
Potential Future Changes
- Remove "MechanizedInfantry" tech requirement which would require updating existing maps that don't just give it to everyone to properly define the tech to set "isLandTransport" and "isLandTransportable" on the appropriate units
- Consider adding "isLandTransportfor" to be able to specific what types of units each can transport
-
@redrum That looks right.
I believe you got all of the parameters,
-
@redrum Ideally it would be nice if you could set carrying capacities like sea transports.
-
@redrum The AI handling land transports would be a big step forward!
I suggest testing it primarily with the armour units of v3 (when you have the tech), for the standard example, and the horses of Feudal Japan (everyone has the tech), for an extreme example, in which you have units able to do absolutely nothing else but transporting other ones (beside taking undefended territories).
You are missing nothing. The only thing is that you might want to keep in mind is that the land transport may be itself unable to blitz, but acquire this ability from another unit. I don't know if that unit can be the transported one (I guess not).
A same transport transporting multiple, sequentially, is likely an unintended behaviour, but I believe is really cool. Refer to "Domination 1914-Weltpolitik", for an example of that at work.Turning the page on the improvements (and excluding all fuel related matters):
I would want to premit that whatever improvements should not endanger the current gameplay simplicity of the system. The way how land transport plays out is very fine and much easier to handle than air transports; meaning that selecting the "armour" and the "infantry" and moving them together to the destination is much more user friendly than selecting the "bomber" then having to go through all of a series of pop-ups to configure what you are going to do. I believe that keeping the system as much user friendly as it is would be more important than improving what it can do, in case of conflicts.
- The most obvious improvement would be that this thing doesn't have to be a tech. It is not a big deal, as you can assign that tech default to everyone, at start game, but this is kind of a lame way of getting around an unnecessary restriction and, if you have a tech table in stats, it won't look very good. Anyways, don't get bogged down on this matter: it can remain a tech only, and mapmakers can just keep assigning the tech to everyone start game, not a big deal. This would be the same for air transports too.
- a) In my opinion, a considerable improvement would be if an option like "canLandTransport" is added, that has a list of units this unit can transport; so that you can have multiple transports transporting specific units (say, a "bicycle" can transport only "infantry", a "lorry" can transport only "infantry" and "artillery", while a "train" can transport also "armour"). Then the current "isLandTransport=true" and "isInfantry=true" can be supported as deprecated element to be recoded, at start game, as setting "canLandTransport" for the "isLandTransport=true" unit, with value equal to all units having "isInfantry=true" (kind of the same thing as now for the basic isArtillery options) (this would have the issue of breaking all maps having triggers setting these options during the game, but I believe we would just need to check if TWW does it or not).
b) A direct consequence of the above, unless restricted, would be allowing transporting units that transport other units. For example, a "bicycle" unit can transport an "infantry" unit, but they can both be transported by a "lorry" unit, thus the "bicycle" would have "canLandTransport" with value "infantry" but would be also in the value of the "canLandTransport" assigned to "lorry". - Another improvement may be that a unit can move only if it is transporting the unit it is meant to transport, otherwise it can't move. For example, you have a "bicycle" unit that can move an "infantry" unit of 2, but the "bicycle" alone can't move, if not transporting anything (also can load on transports only with the transported one).
- Another obvious improvement may be being able to transport 1 to any, instead of only 1 to 1 (like an "armour" can transport 2 infantry or 1 artillery or 1 AA gun); however, I believe this would be good only if both the current very good user-friendliness of the 1:1 case (requiring you no pop-up selections, like bombers and paratroopers do), as well as the ability of sequentially transport multiple units, one after the other, are both kept.
In my opinion, the system is very good already as it is, and none of the above improvements are really that good or needed; so my suggestion is not getting bogged down, and just eventually making what it is an easy addition (no clue), while fully keeping the current simplicity and features of the system. I think the above 4 points should be all the major things anyone might want to add, on top of the current system, if keeping fuel out of the discussion.
-
If isInfantry is only used in regards to making a unit land transportable, why should it not be renamed to isLandTransportable? I think this would make sense taken the isAirTransportable name in mind.
PoS2.xml seems not to indicate any other function then making units land transportable.
PS: I dont know if it is relevant, but there is also a blitz bug that you should maybe take into account? https://github.com/triplea-game/triplea/issues/444
-
@Frostion said in How Do Land Transports Work?:
If isInfantry is only used in regards to making a unit land transportable, why should it not be renamed to isLandTransportable? I think this would make sense taken the isAirTransportable name in mind.
That is one of the things I considered, but decided not to include, when I made my proposals before the 1.9 release, if you remember what I'm referring to, and would even more not do it now. Also, all my suggestions were agreed, but not all were made, due to various problems and reasons mostly I don't know, and, even so, there has been a bunch of problems of things not getting changed etc. (there has been a lot of map bugs related to the changes I suggested and we are still finding maps having "isImpassible" this month).
Naming and consistency has never been the strong point of TripleA, and, if we would go after each thing, we would have to rename a lot.
For example, on this line, also "artillery" should be renamed to "givesSupport" and "artillerySupportable" to "isSupportable", or something, or we should rename "attackAA" to "defensiveAttackAA", etc. etc.. Also, the opposite of "defense" would be "offense", not "attack", strictly speaking. Attack just means that you are making contact with the enemy, which you do in "defense" too, normally.
That is why I limited my suggestions only to really silly or duplicate or visible things (for example, "battleships" instead of "units" is visible to all users, since it is a "property", while "isInfantry" is only for mapmakers, as you can see it is already displayed to users as "can be Transported By Land", in the tooltips).
Let's say that "isInfantry" is definitely not a clear way to name the matter (and, yes, I confirm it just means it is land transportable), it obliges us to endlessly keep confirming to new mapmakers that it indeed just means land transportable, and can be taken as a small additional reason for doing something as per what I said at my point "2a" (but I would not do it just for changing the name itself).Just to give some background why the strange difference in naming between the land and the air transportable units, and pointing out that my memory / knowledge may fail, in the past (and we are talking of something before 2013 here) the "isInfantry" used to make a unit both land and air transportable, but, at least at some point, there were also the "isParatroop" and "isMechanized", that I don't remember if they were required beside the "isInfantry" or were another step before or after that. Whatever the case, the "isInfantry" was split, and the land part kept being named as "isInfantry", while the air part was either named as "isAirTransportable" or "isParatroop", I don't know. Also, back then, when the "isMechanized" option worked (then, until shortly before the 1.9 release, was just kept doing nothing, to avoid games crashing (I don't actually agree that a game being silently bugged is preferable than crashing, but just my opinion)), there was not an option to define what was the land transport, but the land transport was assumed to be any units able to blitz (and maybe there were other requisites to define what was the land transport; I don't really know). Again, I'm not sure of any of these, and I might totally be saying nonsense, and it is really not important; this is just to give you some not necessarily correct background of why you are seeing "isAirTransportable" and "isInfantry", instead of a more sensible "isLandTransportable" ("isInfantry" was just both, as I said). Could also be that "isInfantry" did other things, at any points, I duno.
-
@Cernel
Edit: Don't read the following post as it is misleading and false! I had misunderstood som XML functions concerning isInfantry.I just checked out my own old Star Wars maps, and all the land units there are either ”option name="artillery" value="true" or “option name="isInfantry" value="true".
"isInfantry" and "Artillery" both creates informing text in the tooltip popup, and I think they are made to supplement each other in the original version of TripleA.
isInfatry adds ”can receive attack bonus from other units” to the unit tooltips. Artillery adds “can give attack bonus to other units”.
So I guess isInfantry actually does at least one more thing then making a unit land transportable.
-
@Frostion
Yah, as I said, the discussion about what "isInfantry" is about is a recurring occurrence.
Maybe I should have really included a rename of "isInfantry" in my proposals... It will never end...No.
"isInfantry" just means that this unit is land transportable when the mechanized infantry tech is enabled for the player.
"artillerySupportable" is what makes the unit able to receive the standard support (”can receive attack bonus from other units”).
However, I cannot look into the code myself; so I would need a developer doing it and confirming it, if actual proof is wanted.
I took a look at "Star Wars: Galactic War" and I see that there are the following units that have "isInfantry" and don't have "artillerySupportable":Ewoks
Gamorrean-Guards
Gamorreans
Local-Criminals
Local-Forces
Pirates
SpecOps-Officers
Tusken-Raiders
WookieesYou can see in "Unit Help" that none of these units are reported as ”can receive attack bonus from other units”.
I see you don't have any tech in that game, either. You should remove "isInfantry" everywhere in there (no problems at all having it; just I suggest not having pointless coding).
p.s.: Why did Hepps up this post? Is there something I'm missing?
-
I see that "Carrying capacity" has been added to the "Suggestions".
Again, I suggest them being done only as long as:- The simplicity of the current 1:1 system can be fully kept, in that you can select the units you need and simply move them in pair, without having to go through any pop-ups or any other added steps (don't turn it into something that works like paratroopers; that is really not user friendly to play with). Also think about maps having a lot of transports to manage, each turn.
- The ability of carrying multiple units sequentially is kept (say, you have a unit that moves 12, thus you can move up to 4 transportable units of 3 territories each, on the same turn).
-
@Cernel Not exactly sure what redrum can do to the functionality of land transports with the stipulations you are giving him.
-
@Hepps Not much of a clue either. Mostly suggesting the land transport gameplay remaining something easy to play with (you pick 2 armours and 2 infantries and move them where you want; if you picked more infantries, the remaining ones are not moved, if they can't get there alone, nothing else needed, as it works now). Mainly worried it might become something like the current air transport, which is clearly much more clumsy / slower to play with. Also suggesting the ability of transporting multiple units one after the other being kept, even tho I've no current plans to use it myself (but there is at least 1 map that uses it, for trains, as I said).
-
@Cernel You seem to have a real issue with a simple 2 step process. The Air transport system actually works far better (IMHO) than any other transporting in the game. I personally don't find it "unfriendly" at all, and truth be told, much prefer it to the way sea transports currently work since you frequently have to do the loading and unloading separately for each transport anyways when you have multiples in a SZ since the engine does a piss poor job of validating where the units have been placed in the first place. It actually takes just as long as having a simple validation process would.
Personally I think giving land transports more flexibility/versatility in terms of capacity would totally supersede the functional efficiency if it was a difference of 2 clicks. Especially when you consider the effort it takes to move (building on the example you used) a train back and fourth... back and fourth... back and fourth.
What would be nice to retain would be the land transports ability to pick up and unload multiple times within the same turn.
Lastly, I think it is silly to restrict the potential of an improved system on account of a single map that could only be considered a "finished" product if we were being generous to the EXTREME.
-
In particular, I would encourage mapmakers making advanced maps to use the ability of land transporting multiple units sequentially, especially for trains. It makes a lot of sense that if you have a train, or something, you are able to choose if to make a single full max movement transporting a single unit or using less of your movement to transport a unit, while retaining the remaining one to move more units or reposition yourself. A reason why I don't like "naval" trains Civil War style is that you can transport only a number of units and move only till the destination, no matter how long the actual distance to cover (of course, fuel costs can give you a bonus for covering a shorter distance than your max). I would suggest land transport for trains, instead of that, just because it makes sense that if I have a train that can move 6 and transported a land unit for 3, then it should still move of additional 3, and maybe transporting a second land unit.
Related matters, for the same reasons, are that I surely also suggest to
- Keep the current ability of moving further alone after having transported the unit where you wanted.
- Keep the current ability to pick up the unit on the move (you don't have to start in the same territory of the unit you are transporting but, for example, if you have a movement 3 land transport, you can move of 1 into a territory and transport an infantry of 2 from that territory; this is not possible with air transports, but should remain possible with land ones).
Generally speaking, I suggest none of the current features being dropped in favour of new ones, though I've no clue how much that is feasible.
-
@redrum After further consideration (also thinking about the differences with air transports), I suggest to integrate the full list of current possibilities this way:
Change (I believe it is not that clear, as it is):
"isLandTransport" can transport multiple units in the same turn (only limited by the amount of movement it has)to:
- "isLandTransport" can still move on, and even transport additional units, after having already transported others, to destination, in the same turn (only limited by the amount of movement it has)
and add:
- "isLandTransport" can transport units starting from a territory it moved into, in the same turn (not only from the one it started from)
For example, in a map in which I have land transports that move 3 and can transport some movement 1 units, the AI should see that I can bring stuff also from a nearby territory, not only what is in the starting territory of the land transport. No clue if this would be too much on the AI, but I think it is a good and realistic behaviour regardless AI support.
-
@Hepps I personally find a bit annoying managing like bombers transporting infantry in WWIIv3, but it is survivable (and anyways that map is almost never played with tech, comprising me (BW v3 with tech would be a bigger current item, for sure)). I'm mostly just saying I like better the current land transport system, where you just pick what you want to move, and the engine validates it or not, based if you are trying to move enough transports for the transported at the same time, than, say, a system in which you would have to click on the "armour" unit and then select how many "armour" units are going to transport how many "infantry" units, then move them. But don't see it as unacceptable, in case, and I guess that more functionalities vs easier gameplay can be seen as a trade-off; would be nice not to make the system more complex to manage on the users from what it is, but I agree it is not a must.
I'm actually more on keeping all that it is currently possible, in term of what you can do (I think it is really cool to have freedom to move before and after transporting, and transporting multiple in sequence), and I'm not really that strong as I may have appeared on how stuff gets played out, eventually. -
@Frostion Cernel is correct that "isInfantry" is only used for land transports and "artillerySupportable" is used to pair with "artillery".
So I think initially I'm going to do the following as these are pretty easy changes that have no impact to existing maps but add some flexibility and clarity:
- Add new parameter "isLandTransportable" that functions the same as "isInfantry" which will be considered deprecated (some time in the future it will be removed all together as it is a very confusing property with a bad history)
- Have units with "isLandTransport" utilize the "transportCapacity" property to determine how many units they can transport and if not set then default to "1" (keeps current functionality unchanged). This at least gives the flexibility to have land transports each move more than 1 unit (though all land units will still just count as "1" cost for land transporting)
Eventual things I'd like to do but require significant effort:
- Have "isLandTransportable" units utilize "transportCost" so they then function like air transports. This would require a UI change to be able to select which units to then transport along with figuring out how to make it backwards compatible for existing maps.
- Remove "MechanizedInfantry" tech requirement which would require updating existing maps that don't just give it to everyone to properly define the tech to set "isLandTransport" and "isLandTransportable" on the appropriate units
-
@redrum That is a good intermediate step.
-
@redrum
One really nice about the current land transport is the ease of useSo maybe we could leave the current way as is, and treat it as the basic transport system
Then get a new one going with more capacity, which would be more complex, like the current air transport system
-
@redrum So, will all the current functionalities of land transports be kept whatever the new system? In particular I'm referring to:
- The ability to pick up a (not yet moved) unit on the move, not only from the starting territory.
- The ability to keep moving on and even transporting more after having already transported some.
I'm a bit worried by the "so they then function like air transports" thing.
Losing the simplicity of the current system would be a drawback, but I'm mainly concerned if this matter is going to keep all that it is currently possible? If not, I guess I would second on keeping the current land transport system too, tho I'm not a fan of the idea itself. Personally, I'm not really bothered much by the current limits, and for me it could stay as it is (of course, all good if all is purely additive, like these short term planned changes).
So, basically, what I'm asking, is the intention, whatever the changes may be, of nothing being lost of the possibilities currently already available (that you have already listed at the first post)?
-
@redrum So if you are working on this... while also trying to keep the same functionality....
Are you at the same time trying to find a way to create a method of specifying which units can transport which units?
IE. Let's say you have a train (don't know why I might choose that as an example) and the train is capable of transporting; tanks, Infantry, trucks, artillery, .... But you also have a truck which can potentially only transport Infantry and artillery.
Will there be a way to specify which type of transport can carry which type of unit?
I am thinking something like this...
<attachment name="unitattachment" attatchTo="Truck" javaClass="games.strategy.triplea.attachments.UnitAttachment" type="unitType">
<option name="movement" value="2"/>
<option name="attack" value="0"/>
<option name="defense" value="0"/>
<option name="canBeDamaged" value="true"/>
<option name="maxDamage" value="1"/>
<option name="canDieFromReachingMaxDamage" value="true"/>
<option name="isLandTransport" value="true"/>
<option name="isLandTransportfor" value="Infantry:Material:Artillery:AAgun"/>
<option name="TransportCapacity" value="2"/>
<option name="transportCost" value="2"/>
<option name="isInfrastructure" value="true"/>
<option name="requiresUnits" value="germanFactory"/>
<option name="requiresUnits" value="russianFactory"/>
<option name="requiresUnits" value="japaneseFactory"/>
<option name="requiresUnits" value="chineseFactory"/>
<option name="requiresUnits" value="britishFactory"/>
<option name="requiresUnits" value="italianFactory"/>
<option name="requiresUnits" value="americanFactory"/>
<option name="requiresUnits" value="spanishFactory"/>
<option name="requiresUnits" value="swedishFactory"/>
<option name="requiresUnits" value="turkishFactory"/>
<option name="requiresUnits" value="brazilianFactory"/>
<option name="isAAmovement" value="true"/>
</attachment>I'm not great at what makes for good coding.... I am just going off of some of the stuff that is already in current XML's.