X4: Foundations

X4: Foundations

View Stats:
Are carriers nerfed? (Include a first step modding tutorial / testimony)
It seems carriers can't keep as many ships as before.
Is there a way to roll back this change?
< >
Showing 1-15 of 15 comments
Open the Steam library, right click on X4, open the settings, go to the Beta tab, change to a previous version.
So i have to loose the new flight model and the hyperion if i want the old carriers?
Yes. You could also search for a mod which increases the internal ship capacity.
The Vanguard and Sentinel models of the Zeus and the Colossus had their hangar capacities reduced to match the E models of those ships while the Condor had its hangar capacity decreased and the Tokyo had its hangar capacity increased to bring the ratio of hangar capacity to docking pads into line with the newer carriers; the Shark and the Raptor are to my knowledge unchanged.

Whether or not this constitutes a nerf to carriers generally is debatable; using the full 40 S ship hangar capacities of the Colossus, Condor, and Zeus Sentinels and Vanguards wasn't especially practical given the very limited number of docks for launching and recovering fighters, and I don't see any reason to think that the "new" Tokyo with 72 hangar capacity would be worse than the "old" Tokyo with 40.
Originally posted by Rastapouet:
It seems carriers can't keep as many ships as before.
Is there a way to roll back this change?
The original ships had absurd storage capacity (like L miners being able to carry 40-50 ships), they finally reduced it.

Originally posted by Rastapouet:
So i have to loose the new flight model and the hyperion if i want the old carriers?
Yes. Or write/use mod.
Originally posted by joeball123:
The Vanguard and Sentinel models of the Zeus and the Colossus had their hangar capacities reduced to match the E models of those ships while the Condor had its hangar capacity decreased and the Tokyo had its hangar capacity increased to bring the ratio of hangar capacity to docking pads into line with the newer carriers; the Shark and the Raptor are to my knowledge unchanged.

Zeus E got buffed. Tokyo M capacity might have been nerfed. Raptor's M capacity was nerfed.
Originally posted by RaptorSolutions:
Originally posted by joeball123:
The Vanguard and Sentinel models of the Zeus and the Colossus had their hangar capacities reduced to match the E models of those ships while the Condor had its hangar capacity decreased and the Tokyo had its hangar capacity increased to bring the ratio of hangar capacity to docking pads into line with the newer carriers; the Shark and the Raptor are to my knowledge unchanged.

Zeus E got buffed. Tokyo M capacity might have been nerfed. Raptor's M capacity was nerfed.
Tokyo M capacity was halved, should be the same as the Raptor’s iirc.
Originally posted by RaptorSolutions:
Tokyo M capacity might have been nerfed. Raptor's M capacity was nerfed.
One, how much does anyone actually care about the reduction to the Tokyo's or the Raptor's M hangar capacity? Both of them only have one M dock, launching or recovering up to eleven M ships (using the old hangar capacity) through that single dock would take a lot of time, and with the carriers launching waves of eighteen or twenty-one S ships it isn't like the M ships are that significant of a component of their fighting power anyways.

Two, as far as I am aware, none of the changes that have been made to the game have significantly affected either your ability to buy ships or any carrier's ability to act as a repair facility, and as long as the ships you're using can more or less keep pace with your carrier having six birds up plus one ready to launch and four in the hangar is pretty much strictly superior to having one ready to launch and ten in the hangar at the start of a fight; even if you're only bringing along as many ships as can actually fit on the carrier, it's still no different than it was before until a fight lasts long enough that your carrier could actually have launched more ships if it had the old hangar capacity. This may be a "nerf" for some of the carriers, in the strict sense of it being a number that got smaller, but the old numbers tended to give the carriers with small numbers of docks more hangar capacity than was really practical, and if the change "forces" you to keep some of your S and M ships out and about where they can engage immediately instead of docked up on the carrier where they can't really do anything until everything else launches, or get a second carrier or shift some of the fighters over to the destroyers and fleet auxiliary or whatever to maintain similar hangar capacity while coincidentally achieving a higher launch rate, then there's also a reasonably good chance that this "nerf" has actually made your carrier group more effective.
In fact, my concerne IS for the M hangar capacity but not specificaly for military purpose as i'm using Raptor M hangars for personal and utilitary ships I keep with me because it is convenient and my first Odysseus Sentinel to stow my M boarding ships.

Now it seems that the max M hangar is 8 on Colossus, Zeus and Shark.

So, I'm trying to mod the game:
- I have extracted shipstorage_gen_***.xml from 7.10
- I have created a content.xml that the game seems to reconize
- I have I recreated a folder tree like \assets\props\SurfaceElements\macros\ and put the
xml files in it
- I edited the 7.10 files from, for example:
<macros> <macro name="shipstorage_gen_m_01_macro" class="dockingbay"> <component ref="generic_dockingbay" /> <properties> <identification unique="0" /> <dock capacity="10" external="0" storage="1" /> <room walkable="0" /> <docksize tags="dock_m" /> </properties> </macro> </macros>

to

<diff xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > <replace sel='###/macros/macro[@name="shipstorage_gen_m_01_macro"][@class="dockingbay"]'> <component ref="generic_dockingbay" /> <properties> <identification unique="0" /> <dock capacity="10" external="0" storage="1" /> <room walkable="0" /> <docksize tags="dock_m" /> </properties> </replace> </diff>
- I created an ext_01.cat and .dat with all of that, so the mod content is
content.xml, ext_01.cat and ext_01.dat in a directory in extentions folder.

Annnnd it don't work. It's obvious that I didn't understand something!
in summary i'm trying to replace actual shipstorage_gen_***.xml by the 7.10 one
So if a modder read this, can i ask for help please?
that mod is editing the station docking bay modules. you'd need to edit the specific ship xml for each ship you want to change,

And assuming you're not planning on actually changing the ship model, the thing you'll want to edit is storage, not dock capacity.
Originally posted by Rastapouet:
In fact, my concerne IS for the M hangar capacity but not specificaly for military purpose as i'm using Raptor M hangars for personal and utilitary ships I keep with me because it is convenient and my first Odysseus Sentinel to stow my M boarding ships.

Now it seems that the max M hangar is 8 on Colossus, Zeus and Shark.

So, I'm trying to mod the game:
- I have extracted shipstorage_gen_***.xml from 7.10
- I have created a content.xml that the game seems to reconize
- I have I recreated a folder tree like \assets\props\SurfaceElements\macros\ and put the
xml files in it
- I edited the 7.10 files from, for example:
<macros> <macro name="shipstorage_gen_m_01_macro" class="dockingbay"> <component ref="generic_dockingbay" /> <properties> <identification unique="0" /> <dock capacity="10" external="0" storage="1" /> <room walkable="0" /> <docksize tags="dock_m" /> </properties> </macro> </macros>

to

<diff xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > <replace sel='###/macros/macro[@name="shipstorage_gen_m_01_macro"][@class="dockingbay"]'> <component ref="generic_dockingbay" /> <properties> <identification unique="0" /> <dock capacity="10" external="0" storage="1" /> <room walkable="0" /> <docksize tags="dock_m" /> </properties> </replace> </diff>
- I created an ext_01.cat and .dat with all of that, so the mod content is
content.xml, ext_01.cat and ext_01.dat in a directory in extentions folder.

Annnnd it don't work. It's obvious that I didn't understand something!
in summary i'm trying to replace actual shipstorage_gen_***.xml by the 7.10 one
So if a modder read this, can i ask for help please?

Your selector is not correct and you don't need to replace the entire definition, you can just update the one attribute directly. For example, to set capacity to 20 for that shipstorage:

<diff> <replace sel="/macros/macro[@name='shipstorage_gen_m_01_macro']/properties/dock/@capacity">20</replace> </diff>

Keep in mind this will alter capacities on every single ship that uses this particular shipstorage definition. Also, I believe the macro you actually need to change for say the Colossus would be "shipstorage_gen_m_eight_macro". Gen_m_01 is the legacy defiinition and likely no longer used in 7.5. This example is the easiest way to change capacities, but personally, I'd probably create an entire new shipstorage definition like "shipstorage_mymodname_gen_m_twenty_macro" with a capacity of 20, then mod the carrier ship macro to use my new shipstorage macro. It's a bit more flexible that way and you aren't altering other ships you may not intend to.

Also, you don't need to repackage your mod as a .cat file unless you intend to distribute it via steam. Add "-prefersinglefiles" to your steam launch options and it will just read the XML files directly.
First, thank you, really, for your help.

I'm trying to create a ship storage M of 10 and apply it to the Odysseus Vanguard but without success for now.
I think i'm fighting against the selector!
I've done the -prefersinglefiles and have two xml in a directory in extentions: content.xml and my patch.

The code:
<?xml version="1.0" encoding="utf-8"?> <!-- By: Rastapouet 26/02/2025 --> <diff> <add sel="/macros"> <macro name="shipstorage_gen_m_10_macro" class="dockingbay"> <component ref="generic_dockingbay" /> <properties> <identification name="{20104,79701}" description="{20104,79702}" /> <dock capacity="10" storage="1" /> <room walkable="0" /> <docksize tags="dock_m" /> </properties> </macro> </add> <replace sel="/macros/macro[@name='ship_par_l_destroyer_01_a_macro']/connections/connection[@ref='con_shipstorage_m_01']"> <macro ref="shipstorage_gen_m_10_macro" connection="object" /> </replace> </diff>
I've tried to put the shipstorage_gen_m_10_macro in another file with and without the add tag (replaced by macros tag) but nothing seems to work.
I will try to find similar examples to learn but for now i'm not lucky!
Well, adding new stuff to the game is a bit more involved than that. While the files and their content don't need to be done exactly this way, I'll follow the game's convention on path and file name use.

You need to start with a file to add the names/descriptions/etc text of your modded items. The language file 0001-l044 is for English. Create a file <x4 install>/extensions/mymodname/t/0001-l044.xml with content:

<diff> <add sel="/language"> <page id="987654321" title="My Mod Name Text" descr="0" voice="no"> <t id="0001">My Mod Item Name</t> <t id="0002">My Mod Item Description</t> <t id="0003">My Mod Item 2 Name</t> <t id="0004">My Mod Item 2 Description</t> </page> </add> </diff>

The page ID, here I've given the example of 987654321, needs to be globally unique. It cannot be the same ID the game already uses or any other mod might use. Pick something unique to you. The t iD's must only be unique with the page. How this is used is that anywhere you see {####,####} for name, description, etc, you need to fill it as {page ID, t ID}. Add as many <t> elements to this list as needed.


Now you need to add an index entry for each new item. The two types of indexes are for macros and components. If you don't have an index entry the game will not know about your new items.

For new macros, create a file <x4 install>/extensions/mymodname/index/macros.xml with content:

<diff> <add sel="/index"> <entry name="shipstorage_gen_m_10_macro" value="extensions\mymodname\assets\props\surfaceelements\macros\shipstorage_gen_m_10_macro" /> </add> </diff>

You can add more <entry> elements to this list as needed. The path here must match where the file is located in your mod's directories. For components, you just create a components.xml in the same index folder with the same content for your new component name and its filepath.

Each item you add to the game must have a unique name/ID. To ensure that I generally recommend inserting your mod name into the names of your items. I didn't do that for the tutorial here but for example, you could use mymodname_shipstorage_gen_m_10_macro to avoid potential conflicts in case some other mod would happen to use the same generic shipstorage_gen_m_10_macro item name.


Now create your new shipstorage definition. Because it is a new item it does need a full object definition. Each new item will get its own separate file per convention. Note where I've used the info from the <t> entries defined previously for name and description. Create a file <x4 install>/extensions/mymodname/assets/props/surfaceelements/macros/shipstorage_gen_m_10_macro.xml with content:

<macros> <macro name="shipstorage_gen_m_10_macro" class="dockingbay"> <component ref="generic_dockingbay" /> <properties> <identification name="{987654321,0001}" description="{987654321,0002}" /> <dock capacity="10" storage="1" /> <room walkable="0" /> <docksize tags="dock_m" /> </properties> </macro> </macros>


It's not needed in this specific case, but as a note, if the new item you were creating were a ware (that is, something that is produced from parts) such as a new ship, a new weapon, a new engine, a new station module, etc, you would also need to create an entry in a ware library file mymodname/libraries/wares.xml to define the production for it.


Finally, you can make the alteration to the existing ship definition to use your new shipstorage.

Create a file <x4 install>/extensions/mymodname/assets/units/size_l/macros/ship_par_l_destroyer_01_a_macro.xml with content:

<diff> <replace sel="/macros/macro[@name='ship_par_l_destroyer_01_a_macro']/connections/connection[@ref='con_shipstorage_m_01']/macro/@ref">shipstorage_gen_m_10_macro</replace> </diff>


And assuming you have the mymodname/content.xml correct that your mod shows up in game and you can enable it, that should be all you need for this particular task. Please note, I didn't actually implement this mod in-game to check for any errors I might have made above.

Here's a link to some more X4 modding tools and resources: https://forum.egosoft.com/viewtopic.php?t=402382&sid=66d4c74361a7208790a99191cc699a65 For example, an XML patching guide: https://forum.egosoft.com/viewtopic.php?t=354310
Ok, it works!

I had to edit the save file too for my existing ship (replace the shipstorage M macro connection for this ship) but it works.

Now i'm trying to do the same for the Split Raptor but yet without success.
I think i have seen something (like something to add in selector of the replace code) for editing DLC ships somewhere but i don't find where it was. It is that or I wrote something wrong.

I will verify tomorrow. For now it's late and i'm tired.
I will post the final working code too in case it help another beginner.

Anyway your tutorial is perfect, thank you again!
Well, all seems to works!

So, as i promised, here a little tutorial from me, a beginner, for beginners.
I will try to stay understandable, but my native language is not english.

First, make a backup copy of your saves (\Documents\Egosoft\X4\XXXXXXX\save\[all files])! Or even a backup copy of your game if you are afraid of doing something wrong!
Please note you will modify your game and you can break something. I'm not responsible of your actions!


Now that being said, you will need some tools:
- X Catalog Tool[www.egosoft.com] (note you will need an Egosoft account) to extract the game files
- An xml capable editor like Notepad++[notepad-plus-plus.org] to edit game files.
- A software capable to compress and uncompress .gz (the saves of the game are in this format) like 7Z[7-zip.org].

My goal on this project is to modify the post X4 7.50 Split Raptor and Paranid Odysseus Vanguard to make them have the same ship M storage capacity as before the 7.50 update.


--> Here we go.

First part - Extraction of the data and analysis (otional if you just want to see the code i made)
  • Create a directory somewhere to extract game files (expect more than 20 GB). I think it's a good idea to name it from game version like "X4 v7.50".
  • Launch XTool (XRCatToolGUI.exe) and drag and drop all .cat that are under \X4 Foundations\ on the X Catalog Tool window (it can take some time and freez but be patient)
    Then hit extract all and select your "X4 v7.50" directory. Then hit clear.
  • As i will edit the Raptor from Split DLC, i need to see the data of the DLC too, so create a new directory with the name "extensions" under "X4 v7.50" then another directory "ego_dlc_split" under your new "extentions" directory.
  • Drag and drop all .cat from the game under \X4 Foundations\extensions\ego_dlc_split\ on X Catalog Tool window then extract all under your \X4 v7.50\extentions\ego_dlc_split\
  • Close X Catalog Tool. Now you can see data if you open a .xml file in the xml editor.
  • To know what we're looking for, we can use a website like Roguey[roguey.co.uk]. We can see that the Odysseus Vanguard internal code name (XML macro line) is ship_par_l_destroyer_01_a_macro and it's ship_spl_xl_carrier_01_a_macro for the Raptor.
  • Search for ship_par_l_destroyer_01_a_macro in your "X4 v7.50" directory. You can see it's under \X4 v7.50\assets\units\size_l\macros\. Open it.
    We are looking for a ship M storage (dock are the dock pads, not the ship storage) and we found:
    <connection ref="con_shipstorage_m_01"> <macro ref="shipstorage_gen_m_two_macro" connection="object" /> </connection>
  • It mean this ship have a connection named con_shipstorage_m_01 to the macro shipstorage_gen_m_two_macro. It's what we are looking for and have to change!
  • If you looking for macro shipstorage_gen_m_two_macro.xml in files then you see it under your \X4 v7.50\assets\props\SurfaceElements\macros\
    This information is important so we know now how to structure our mod directories..
  • Now you can do the same search for the Raptor.



Second part - Execution
Here I redirect you to the previous post of SiliconStew and his excellent tutorial (post #14 - look at the links too)!
Try to understand the sel=. I may have wrong here because it's my interpretation. It's path (\xxx\xxx\xxx\) and attribute (@xxx). The [] are here to keep it at a block (a one thing is an attribute equal something [@attribute=xx_xxx])



Third part - The result
As you know the Raptor come with the Split Vendetta DLC... It's a special case.
To edit it you must put your patch xml in a directory ego_dlc_split under a directory extensions under your mod directory!
Add <dependency id="ego_dlc_split" optional="false" name="Split Vendetta"></dependency> in your content.xml
And you have to put your mod in the \X4 Foundations\extensions\ directory (dont forget to add "-prefersinglefiles" to your steam launch options and it will read the XML files)
So at the end we have:
X4 Foundations extensions Your Mod assets props SurfaceElements macros YourMod_shipstorage_gen_m_10_macro.xml YourMod_shipstorage_gen_m_30_macro.xml units size_l macros ship_par_l_destroyer_01_a_macro.xml extensions ego_dlc_split assets units size_xl macros ship_spl_xl_carrier_01_a_macro.xml Index macros.xml t 0001-l044.xml content.xml
The code
content.xml
<?xml version="1.0" encoding="UTF-8"?> <content enabled="1" save="0" date="2025-02-28" version="750" author="Rastapouet" description="Restore ships M storage capacity as it was before 7.50 For Raptor and Odysseus Vanguard" name="Old Dock Capacity Raptor and Odysseus V" id="Pouet_ODC_ROv"> <dependency id="ego_dlc_split" optional="false" name="Split Vendetta"></dependency> <text language="7" author="Rastapouet" description="Restore ships M storage capacity as it was before 7.50 For Raptor and Odysseus Vanguard" name="Old Dock Capacity ROv"/> <text language="33" author="Rastapouet" description="Restore ships M storage capacity as it was before 7.50 For Raptor (30 ships) and Odysseus Vanguard (10 ships)" name="Old Dock Cap. ROv"/> <text language="34" author="Rastapouet" description="Restore ships M storage capacity as it was before 7.50 For Raptor (30 ships) and Odysseus Vanguard (10 ships)" name="Old Dock Cap. ROv"/> <text language="39" author="Rastapouet" description="Restore ships M storage capacity as it was before 7.50 For Raptor (30 ships) and Odysseus Vanguard (10 ships)" name="Old Dock Cap. ROv"/> <text language="44" author="Rastapouet" description="Restore ships M storage capacity as it was before 7.50 For Raptor (30 ships) and Odysseus Vanguard (10 ships)" name="Old Dock Cap. ROv"/> <text language="49" author="Rastapouet" description="Restore ships M storage capacity as it was before 7.50 For Raptor (30 ships) and Odysseus Vanguard (10 ships)" name="Old Dock Cap. ROv"/> <text language="55" author="Rastapouet" description="Restore ships M storage capacity as it was before 7.50 For Raptor (30 ships) and Odysseus Vanguard (10 ships)" name="Old Dock Cap. ROv"/> <text language="81" author="Rastapouet" description="Restore ships M storage capacity as it was before 7.50 For Raptor (30 ships) and Odysseus Vanguard (10 ships)" name="Old Dock Cap. ROv"/> <text language="82" author="Rastapouet" description="Restore ships M storage capacity as it was before 7.50 For Raptor (30 ships) and Odysseus Vanguard (10 ships)" name="Old Dock Cap. ROv"/> <text language="86" author="Rastapouet" description="Restore ships M storage capacity as it was before 7.50 For Raptor (30 ships) and Odysseus Vanguard (10 ships)" name="Old Dock Cap. ROv"/> <text language="88" author="Rastapouet" description="Restore ships M storage capacity as it was before 7.50 For Raptor (30 ships) and Odysseus Vanguard (10 ships)" name="Old Dock Cap. ROv"/> </content>
0001-l044.xml
Please use another page id if you want to publish your mod on the web!
<?xml version="1.0" encoding="UTF-8"?> <diff> <add sel="/language"> <page id="92006196910" title="Old Dock Capacity Raptor and Odysseus V" descr="0" voice="no"> <t id="0001">ten M ships storage</t> <t id="0002">A definition of a storage of 10 M ships</t> <t id="0003">thirty M ships storage</t> <t id="0004">A definition of a storage of 30 M ships</t> </page> </add> </diff>
macros.xml
<?xml version="1.0" encoding="UTF-8"?> <diff> <add sel="/index"> <entry name="pouet_shipstorage_gen_m_10_macro" value="extensions\Pouet_ODC_ROv\assets\props\SurfaceElements\macros\pouet_shipstorage_gen_m_10_macro" /> <entry name="pouet_shipstorage_gen_m_30_macro" value="extensions\Pouet_ODC_ROv\assets\props\SurfaceElements\macros\pouet_shipstorage_gen_m_30_macro" /> </add> </diff>
pouet_shipstorage_gen_m_10_macro.xml
<?xml version="1.0" encoding="utf-8"?> <macros> <macro name="pouet_shipstorage_gen_m_10_macro" class="dockingbay"> <component ref="generic_dockingbay" /> <properties> <identification name="{92006196910,0001}" description="{92006196910,0002}" /> <dock capacity="10" storage="1" /> <room walkable="0" /> <docksize tags="dock_m" /> </properties> </macro> </macros>
pouet_shipstorage_gen_m_30_macro.xml
<?xml version="1.0" encoding="utf-8"?> <macros> <macro name="pouet_shipstorage_gen_m_30_macro" class="dockingbay"> <component ref="generic_dockingbay" /> <properties> <identification name="{92006196910,0003}" description="{92006196910,0004}" /> <dock capacity="30" storage="1" /> <room walkable="0" /> <docksize tags="dock_m" /> </properties> </macro> </macros>
ship_par_l_destroyer_01_a_macro.xml
<?xml version="1.0" encoding="UTF-8"?> <diff> <replace sel="/macros/macro[@name='ship_par_l_destroyer_01_a_macro']/connections/connection[@ref='con_shipstorage_m_01']/macro/@ref">pouet_shipstorage_gen_m_10_macro</replace> </diff>
ship_spl_xl_carrier_01_a_macro.xml
<?xml version="1.0" encoding="UTF-8"?> <diff> <replace sel="/macros/macro[@name='ship_spl_xl_carrier_01_a_macro']/connections/connection[@ref='con_shipstorage_03']/macro/@ref">pouet_shipstorage_gen_m_30_macro</replace> </diff>



Flying ships
All of this change new ships but already flying ships are in the saves and seems not changed.
In my case, i want to change 2 of my ships so I look at their id in the game (the FCV-837 thing after the name of your ship).
Then i open the save and looking for the first id (use the search, it's a big file!) then the connection ref and change the macro ref then looking for the second id then the connection ref and change the macro ref.
If you understand what i was doing in macro then you certainly understand the idea.



Final words
Keep in mind modding will need work, information search, motivation and will but it's rewarding and you will quickly know if you like it.
I hope this tutorial will help some people and I want to thank the people in this thread and especially SiliconStew who helped me a lot.
X4 have a good community.
< >
Showing 1-15 of 15 comments
Per page: 1530 50

Date Posted: Feb 24, 2025 @ 1:49pm
Posts: 15