Hey all!
As I've spoken about frequently here and on the modding subforums, I've encountered (and fixed) a number of issues with the stock ship designs. After learning how to implement custom ships from Dumhed's excellent guide, I started playing around with Blueprints when I discovered that I wasn't really liking the standard design choices the AI ship designer makes.
I think there's a lot of improvements to be made to the standard stable of blurprints the AI has available. Just like how the AI may choose to use your own ship designs against you, I'd like for the AI to be able to use more optimal ship blueprints throughout the game, rather than at the precise tech point where I designed a particular ship.
As an example, here is the standard Small scout blueprint:
<ShipBlueprint> <InternalName>ExplorerBlueprint</InternalName> <ShipHullType>Small</ShipHullType> <Role>Assault</Role> <RequiredComponentType>Sensor</RequiredComponentType> <RequiredComponentType>LifeSupport</RequiredComponentType> <ComponentType>LifeSupport</ComponentType> <ComponentType>LifeSupport</ComponentType> <ComponentType>InterstellarDrive</ComponentType> <FillerComponentType>LifeSupport</FillerComponentType> <FillerComponentType>Sensor</FillerComponentType> </ShipBlueprint>
It has a sensor, then three life support units, then an engine, another life support unit, and finally another sensor. It then alternates life support and sensors.
In my opinion, sensors are more important than range for scouts. I'm only going to field X number of them, so I want them to be able to cover a decent amount of area ground and have good sensor coverage, rather than neccesarily being able to reach super-far afield. As such, this is my personal small scout design:
<ShipBlueprint> <InternalName>FedExplorerBlueprint</InternalName> <ShipHullType>Small</ShipHullType> <Role>Assault</Role> <RequiredComponentType>Sensor</RequiredComponentType> <RequiredComponentType>LifeSupport</RequiredComponentType> <ComponentType>InterstellarDrive</ComponentType> <ComponentType>LifeSupport</ComponentType> <ComponentType>Sensor</ComponentType> <ComponentType>LifeSupport</ComponentType> <ComponentType>InterstellarDrive</ComponentType> <FillerComponentType>Sensor</FillerComponentType> <FillerComponentType>LifeSupport</FillerComponentType> </ShipBlueprint>
This stars with a sensor and life support, before adding an engine, another life support, a second sensor module, more life support, another engine, and finally it will alternate sensors and life support.
This ensures the design will be able to travel faster and have more coverage than the base scout, at the cost of only gaining extreme range at higher miniaturization tech.
One issue I have with how the AI designs certain ships is that it loads up on unnecessary LifeSupport components. These are expensive. An example I've brought up in the past is the Transport, which at max tech can move fiftieen billion troops out past 300 hexes range beyond your borders, at a cost of over 1400 manufacturing capacity - more than a Battleship. 1200 of that 1400 manufacturing cost is due to Life Support modules.
I've taken to using this blueprint:
<ShipBlueprint> <InternalName>FedTransportBlueprint</InternalName> <ShipHullType>Cargo</ShipHullType> <Role>Support</Role> <RequiredComponentType>TransportModule</RequiredComponentType> <ComponentType>LifeSupport</ComponentType> <ComponentType>InterstellarDrive</ComponentType> <ComponentType>LifeSupport</ComponentType> <ComponentType>LifeSupport</ComponentType> <ComponentType>InterstellarDrive</ComponentType> <ComponentType>TransportModule</ComponentType> <ComponentType>LifeSupport</ComponentType> <ComponentType>InterstellarDrive</ComponentType> </ShipBlueprint>
It has the same movement capacity, but doesn't have cross-map range. This means it can only go where you have a reasonable projection of force already through having a starbase or planet nearby (and by 'near' I mean 50-140 hexes, depending on tech level). At max, it costs just 600 manufacturing - which in my opinion is still too high. It also carries 'only' 6 billion troops (enough to take a typical 15bn population planet). This is actually an advantage, as every time a battle is won, one involved troop ship is used up - if you want to carry more troops, take 2 or 3 troop ships, and all-but-1 of them will still be usable after a victory.
This is my constructor:
<ShipBlueprint> <InternalName>FedLongRangetConstructorBlueprint</InternalName> <ShipHullType>Cargo</ShipHullType> <Role>Support</Role> <RequiredComponentType>ConstructionModule</RequiredComponentType> <ComponentType>InterstellarDrive</ComponentType> <ComponentType>LifeSupport</ComponentType> <ComponentType>ConstructionModule</ComponentType> <ComponentType>LifeSupport</ComponentType> <ComponentType>InterstellarDrive</ComponentType> <ComponentType>ConstructionModule</ComponentType> <ComponentType>Sensor</ComponentType> <ComponentType>ConstructionModule</ComponentType> <ComponentType>ConstructionModule</ComponentType> <FillerComponentType>InterstellarDrive</FillerComponentType> <FillerComponentType>LifeSupport</FillerComponentType> </ShipBlueprint>
It gets far more movement allowance than the standard model, so you get your starbases in far-flung reaches sooner. It also simply includes a plan to max out at 5 construction modules, rather than alternate construction modules with crazy expensive and unnecessary life-support.
These kind of optimizations are possible for all kinds of ships, these were just some civilian vessels.
Barring the AI gaining an ability to check its upgrade process for stuff like 'is this tech upgrade improving my Damage by substantially more than my cost?' and the like - which is something Stardock might be able to do if so inclined but is probably beyond our ability - what we can do is write better ship blueprint setups so the AI is less likely to blow its production capacity unnecessarily.
This might be a cool thing to implement in the future once the AI is more settled down. Having subopimal ship building at lower AI intelligence, and more optimal ship builds with higher AI intelligence.
Right now the higher AI levels get simple boosts to production, so ship production is not something they are lacking.
Well, I don't dispute that exactly.
I'm working off what Frogboy said:
Really helpful: [..] Maybe it's sending out crappy fleets. Maybe its fallen way behind militarily. Maybe its ships are crappy. These are things that I'm interested in.
The top AI's (genius and Godlike) do get a load of handicapping bonuses, which lets them keep up with human production. But the there's a definite difficulty curve, with the game getting progressively easier the longer you go on. Of course this is because you get stronger, but I think it's also because the AI gets weaker toward the late game.
In my experience, the Genius are a good challenge early on, but become quite weak during the Age of War - in part I think because their ships rapidly become more expensive. Godlike AI are overwhelmingly strong early on, but get in to some trouble later on in a similar way.
They do well early on because each early colony gets huge boost from great base multipliers; but as they can't specialize (yet), a human player (who also produces more efficiently) closes that gap as human planets get progressively better. I don't like that difficulty curve, as it puts even more emphasis on the age of Expansion.
Giving the AI a huge tech advantage causes them to get a lot of military soon, making the player follow suit to stop 'you are weak/ripe for conquest' wars, forcing a particular play style.
So while the handicapping bonuses help the AI, especially early on, these bonuses only scale its production & research. They don't make the AI any smarter or more interesting. Further, these handicapping bonuses have to be extreme because it's making inefficient use of resources. The less the AI needs to 'cheat' by multiplying its base resources, the better, in my opinion.
I see this as a serious mistake the AI makes: the higher tech it gets, the more expensive it makes its ships, but the expense is not nearly in line with its increase in power/usefulness. This problem is compounded by the current AI efficiency weakness - its production starts out strong, but increases are broadly linear, while player production increases exponentially due to building placement.
The main current bonus levels at Genius:
It also gets something called 'freewartechchance' at 0.10. I believe that means it get's a free military tech every 10 turns.
In short, Genius AI has about 1.7x the production capacity of a player, 1.25x the research, all multiplied by the free GoodsAndServices; its ships are a bit stronger with the extra capacity and power multiplication, and its maintenance isn't a big deal.
Compare the Godlike AI.
The main current bonus levels at Godlike:
'Freewartechchance' at 0.40, so basically 2 free (military?) techs per 5 turns.
It also gets on average 375 free credits per turn past a certain level.
So Godlike AI has 6x the manufacturing, (3x the base and 0.5 cost) means each planet can run like a full manufacturing and econ planet at once. Its ships evade a decent amount of attacks, take more punishment, and do significantly more damage with the more stuff they can carry.
This doesn't change anything about the AI's performance aside from there just being... more stuff. It can out-produce you by a fair bit, it will *massively* out-tech you. Is it challenging? Certainly. Is it challenging in a fun way? I don't really think so.
My intention with allowing the AI to make better ships is to reduce the need for it to have a huge tech and economic advantage just to keep up with players.
Goodsandservices is an approval bonus.
Huh, looks like I completley misunderstood that! revising post.
One question, is it possible to alter blueprints based on map size? On Insane, life support is more important than on tiny, and it would be nice to account for that.
My thought, I still think your new blueprints have too much life support towards the end (granted I play on large maps generally).
Range to me is something that is important early to early mid game, but stabilizes towards the mid game. At that point, I am extending range through new planets and new starbases. I don't need my ships to get greater and greater range as the game goes on by default. The long distance constructor is nice once in a while, but I would rather the AI build a fleet of good solid ships and miss out on an odd chance it needs the long distance than to waste its time with distance it shouldn't use.
Also, I personally don't ever add sensors to constructors, just wasted manu imo.
Not that I know of.
My thought, I still think your new blueprints have too much life support towards the end (granted I play on large maps generally).Range to me is something that is important early to early mid game, but stabilizes towards the mid game. At that point, I am extending range through new planets and new starbases. I don't need my ships to get greater and greater range as the game goes on by default. The long distance constructor is nice once in a while, but I would rather the AI build a fleet of good solid ships and miss out on an odd chance it needs the long distance than to waste its time with distance it shouldn't use.Also, I personally don't ever add sensors to constructors, just wasted manu imo.
Yah, that may well be true on the 'still too much range' thing, but only toward the end-game. Removing the sensor is also a good idea - it's rarely worth the price on that type of 'disposable' ship.
I'm definitely struggling using the system they made. On paper, being able to go through pre-made ships seems "easier" but in reality, I'm really having a hard time getting the AI to make the kinds of ships I want it to have.
For example, I currently have no way to make the ships faster on big maps. In GalCiv II, I had the AI design the ships from scratch. It was really hard to do but it resulted in fllexible, adaptive AI ships. They were ugly but they were lethal.
Yeah, the whole AI model is currently very script-driven rather than decision-driven; the whole philosophy is very much removed from your GC2 model.
Could you not just give the AI another scripted list of favoured ships, and then tie that to map size by inserting a trigger? It's not as good as the AI custom-building from scratch, but given scripting as the base model, focusing more on implementing triggers would appear to be the way to go - that way, you (and we modders) can produce more scripts for each eventuality.
Ah well, we'll find a way to make it work with the current system
I had a little thread here with one idea I had about for letting the current blueprint model handle that kind of thing. Basically it would mean replacing the current simple 'ComponentType = 1 main shipstat' with broader types, requiring a few relatively simple calculations to choose the desirable values.
Would it be possible to tell the game to not just build 'engine -> ECM -> Armor' but rather:
defensive system<CheckStrongestCurrentRivalForMainAttackType>
engine until <CheckAverageDistanceBetweenStars/balancingvariable>
As I only started working with XML's a month ago I have no idea how hard something like that would be to implement.
As always TurielD, I appreciate you taking the time to go through all this. I'm this close --> <-- to taking one of my own developers and having them build me an editor for all this stuff. . Reading too much XML hurts my head with all it's verbosity. I know I don't use a script to decide what my ship designs are, I use my goals. If I want to attack an enemy that is further, THEN I put on life support to reach them, or I build my island hopping strategy or I build starbases to extend my range. Anything other than, "fill that puppy up with life support", just because.
Additional questions on the first entry above and random thoughts.
<ShipBlueprint><InternalName>ExplorerBlueprint</InternalName><ShipHullType>Small</ShipHullType><Role>Assault</Role><RequiredComponentType>Sensor</RequiredComponentType><RequiredComponentType>LifeSupport</RequiredComponentType><ComponentType>LifeSupport</ComponentType><ComponentType>LifeSupport</ComponentType><ComponentType>InterstellarDrive</ComponentType><FillerComponentType>LifeSupport</FillerComponentType><FillerComponentType>Sensor</FillerComponentType></ShipBlueprint>
Role = Assault? on a explorer with no weapons in blueprint? (and yes, I know you copied that directly)
Maybe support instead.
I wonder when the AI is building fleets, does it try to piece together a package of ships based upon a FleetDefinition that uses Roles as guidance? or maybe it's looking at attack defense values or maybe its using some "power" rating of ships to decide.
Does the AI build a fleet with a goal in mind? Planetary assault, Combat patrol, Escort, Space superiority? Those type of things?
Would be nice to know what types of factors are included in the fleet composition evaluation and if a fitness function tests the fleet for it's intended purpose? And if so, if any of these incorrect role definitions cause it to have issues.
Thank you, and that would be a welcome tool... I was gonna make one myself for tech trees.
Well, doesn't matter much - that just determines where it appears in the battle line and who it target. The AI picks what the ship does in the ShipClassDefs.xml file:
<ShipClass> <InternalName>TerranScout</InternalName> <DisplayName>TerranScout_Class_Name</DisplayName> <Description>TerranScout_Dec</Description> <ThumbnailOverride>Temp_Terran_Scout_Alpha_01.png</ThumbnailOverride> <ShipHullType>Tiny</ShipHullType> <ShipRule>Scout</ShipRule> <ShipDesign>Terran_Scout_01T</ShipDesign> <AIShipClass>Scout</AIShipClass> <StrategicIcon>Scout</StrategicIcon> <BlueprintDef>ScoutBlueprint</BlueprintDef> </ShipClass>
so it shouldn't be joining those up with fleets or intentionally sending them in to combat anyway... avoiding combat on the other hand, not so much.
Don't know tbh, I think Naselus is the one who's most up on that particular angle. I'm more with the individual ship designs and design styles
I've seen nothing in the xml to suggest it does. The AI builds semi-randomly; it has a list of possible things to build and then rolls a virtual dice to decide which one it picks. It does use the ship's roles to set the possible 'scores' on the dice roll (so it'll pick between 'assault', 'scout', 'colony', 'esxort' etc), but I think it just lumps it's fleets together from whatever's closest to the waypoint. You could therefore try to make it do 'proper' fleets by setting it to do 30% escorts, 30% capitals, 20% assault, 10% on everything else etc.
EDIT:
Something like
[code]
<AIStrategy> <InternalName>Fleetstrat</InternalName> <TurnStart>0</TurnStart> <TurnEnd>200</TurnEnd> <TurnLifetime>2</TurnLifetime> <PlayerAtWar>AtWar</PlayerAtWar> <Spending>SpendUntilBroke</Spending> <SpendUntilBrokeBuffer>500</SpendUntilBrokeBuffer> <WealthSlider>0.2</WealthSlider> <ManufacturingSlider>0.50</ManufacturingSlider> <ResearchSlider>0.30</ResearchSlider> <MilitarySlider>0.90</MilitarySlider> <StarbaseDefenderFillCap>0.8</StarbaseDefenderFillCap> <ShipyardDefenderFillCap>0.8</ShipyardDefenderFillCap> <PlanetDefenderFillCap>5</PlanetDefenderFillCap> <PreferToRush>Wealth</PreferToRush> <BuildShip> <ShipClass>Constructor</ShipClass> <Weight>2</Weight> </BuildShip> <BuildShip> <ShipClass>Colony</ShipClass> <Weight>5</Weight> </BuildShip> <BuildShip> <ShipClass>Sentinel</ShipClass> <Weight>5</Weight> </BuildShip> <BuildShip> <ShipClass>Escort</ShipClass> <Weight>20</Weight> </BuildShip> <BuildShip> <ShipClass>CapitalShip</ShipClass> <Weight>20</Weight> </BuildShip> <BuildShip> <ShipClass>Assault</ShipClass> <Weight>10</Weight> </BuildShip> <BuildShip> <ShipClass>Freighter</ShipClass> <Weight>2</Weight> </BuildShip> <TechWeightOffset> <UseOffset>true</UseOffset> <WeightOffset> <Military>0</Military> <Growth>0</Growth> <Tech>0</Tech> <Diplomacy>0</Diplomacy> <Expansion>0</Expansion> <Wealth>0</Wealth> <Influence>0</Influence> <Fortification>0</Fortification> </WeightOffset> </TechWeightOffset> </AIStrategy>
[/code]
Should do it.
I think the trick will be getting the AI to follow starts like that on a 'regional' or perhaps per planet basis, once the AI is able to specialize individual worlds. I doubt that's something we'll be able to do from our end though, that ball's over in Stardock's court.
Yeah, the whole AI model is currently very script-driven rather than decision-driven; the whole philosophy is very much removed from your GC2 model. Could you not just give the AI another scripted list of favoured ships, and then tie that to map size by inserting a trigger? It's not as good as the AI custom-building from scratch, but given scripting as the base model, focusing more on implementing triggers would appear to be the way to go - that way, you (and we modders) can produce more scripts for each eventuality.
I'd like to see the AI get back into dynamically designing ships. This scripted ship stuff is for the birds.
I, uh, suspect you're the only one around here who could actually make that happen
Though there's a whole bunch of us who'd love to help if there's XML-level coding, prioritizing or refining to be done...
There are many great features available to you once you register, including:
Sign in or Create Account