Hard or Does Nothing AI for unactive players
-
@redrum said in Hard or Does Nothing AI for unactive players:
No, ProAI uses a separate casualty selection that is more advanced than Weak/DoesNothing: https://github.com/triplea-game/triplea/blob/master/game-core/src/main/java/games/strategy/triplea/ai/pro/AbstractProAi.java#L346
Right, this is the reason why I would prefer avoiding using "Hard" AI (thus I need "Does Nothing" AI, or something like that), especially since it can be changed any time in the future. I don't want this player to "think" about what to select, but just always go by the autoselect. For example, if, on the last round of a battle, you have a 2/1 and a 1/4 units left and the killed defenders hit once, a thinking player may decide to take out the 2/1 unit, while this non-thinking player should always take out the 1/4 one, instead.
-
@Cernel Thanks. This sounds like the "convenient but not appropriate" anti-pattern. Lacking the right tool, we used an existing one that was not the right one but made it to work. Instead it sounds like the game engine should be modified to accommodate what you want without using an AI. In other words, instead of an inappropriate hack that is "easy", and breaks design at long term cost, we should instead look at requirements and how to natively support them.
-
@Cernel Weak and DNAI are in theory no different from Pro in terms of mutability guarantees. They could change. I'd suspect DNAI is the safest as 'doing nothing' is the most stable and should not be modified beyond the bounds of its intent. Since they both use the same casualty selection, it is subject to change. In practice probably not as we know there are dependencies, but the fact that such dependencies have been created is a problem and should be avoided and removed.
-
I'd actually argue that the regular neutrals on maps is the "hack" and weird "null" player isn't ideal. Really DNAI should be the standard neutral AI player always used for even regular neutrals like on NWO/WaW and should be flexible enough to allow triggers/phases. It should be well defined and generally not change. The problem is the "null" neutral was created in the engine first so I believe when the limitations of it not being a real "ai/player" were then realized later on (can't have triggers/phases/etc) the DNAI was created.
This isn't the case for weak/fast/hard AI which are meant to be "intelligent" AI that try to do all the possible actions given to them and optimize their chance of "winning".
-
@redrum Hack or not, a minor problem I have with "Neutral" is that it is a mandatory name, you cannot customize. In this particular game, the DNAI player is called "barbarians" and it would be quite silly to call it "Neutral", in the moment it is attacking everyone!
Also "Neutral" is a very bad name even for NWO and such, since we also have the relationship archetype "Neutral", that means the player is actually "Neutral", while the "Neutral" player itself is not "Neutral" at all, but always "Enemy" to everyone (that would be the archetype "War", not "Neutral", for relationships and politics). There is really nothing "Neutral" about the "Neutral" NWO player: it is an "Enemy" (to everyone) player that never moves or attack.
-
@Cernel Example: If you have "Neutral" relationship ships and you go in their sea zone, nobody attacks anybody (since everyone is neutral to each other), but if you have "Neutral" ships and you go in their sea zone, you must attack them (since everyone is at war with each other). Very bad mixing of the exactly same definition for two different and almost opposite things, if you ask me.
-
@Cernel Yeah, customizing the name is another good point about why the default "neutral" (null) player is less than ideal.
-
It almost seems there should be a third category of player for specific game mechanics, like neutral, or special players that should not receive resources. Such a category of player would be defined by a map and not available to change. With luck that would work in hosted games without any additional updates and would avoid the confusing situation where a player has to "know" which players to set to DNAI and which ones are meant to be played.
-
@LaFayette Still not following you. What you seem to be describing is essentially set players to default to DNAI and using isHidden=true.
-
@redrum Having neutral players be represented by null is a hack of its own. That is an implementation detail.
For example, Conquest, with a DNAI player, it should do the random placement of territory selection and place its units but otherwise not move. Let's say we wanted another player to be a neutral buffer that did not place. In such an example it would not place and would not have a turn. In this scenario you could replace the DNAI with another AI and it would still be a 1v1 if you play against it. But say you want to make it interesting with neutrals occupying part of the map, that could not be done. Hence potentially a "third player type" that is effectively a combination of DNAI, isHidden=true, and does not collect, spend, nor place units (and is in effect, a neutral)
-
@LaFayette DNAI will just not work with Conquest of the World because of the no capital bug I reported (it crashes).
-
@Cernel that is besides the point a bit. The fact you can't have some sort of working DNAI and also actual neutrals is more the point. It illustrates how the two concepts of a player that does not move and another that acts as a neutral are blurred. For the latter, it would be better to specify how many territories are to be occupied by a neutral rather than setting any specific player to DNAI. Hopefully that makes sense.
-
@redrum said in Hard or Does Nothing AI for unactive players:
What you seem to be describing is essentially set players to default to DNAI and using isHidden=true.
In essence, pretty much, but instead of using a combination of flags and exposing the implementation detail of DNAI, we create a primary attribute for it.
-
@LaFayette Yeah, that's why DNAI needs to be figured out and documented (and fixed to work with no capitals without crashing, possibly), as it is now going one way in the moment you can use it for attacking with its own phases and another way in the moment it substantially skips the collect phase, plus the strange behaviour of a first purchase then nevermore, that it is a complete surprise to everyone. Substantially, Veqryn made this AI probably based on something he was planning, but that never happened and, as far as I know, nothing was documented about all this more or less artificial and likely sigle-game tailored construct, that has been since available to all users and map makers.
I would personally prefer it being just 100% like assigning the player to somebody that just keeps skipping everything it can skip and clicks randomly on anything it must do (but this would require fixing the placement phase itself as being a must do, preferably with a property to allow having the current free-not-to-place behaviour for custom maps).