Page 1 of 1

Getting Started: Tools, Scripting and Modding

Posted: Fri, 30. Nov 18, 19:14
by euclid
Hi all :-)

Scripting and modding X4: Foundations is not that different from X Rebirth. So most of the information required for scripting and modding you can find there. In particular check the MD/Scripting basics. However, here a few things that you may find useful:

Unpacking the Game Files
The Catalog Tool from X Rebirth also works for X4: Foundations. You can download it here. Place it into the X4 root directory (i.e. where the X4.exe is located). To extract the files from the catalogues it is recommended to make a bat file (saved in the same root directory) for example unpack.bat that could look something like this:

Code: Select all

cd "Games\Steam\SteamApps\common\X4 Foundations"
XRCatTool.exe -in -in -in -in -in -in -in -in -in -out "E:\Games\Steam\SteamApps\common\X4 Foundations\unpacked"
The drive "E" is where you Steam games are located and the directory "unpacked" in this example is where the extracted files will be stored. Of course you are free to choose a name of your liking. The last "pause" is optional. Without that the command window will just close after the extraction has finished. If you leave that command you can check which files have been extracted and if there have been errors during the process.

Useful Tools
In order to find certain entries is the game files there are various unofficial helper programs available. Personally I like AstroGreb which you can download here. To create or edit MD or XML scripts you need a suitable editor. Quite popular is Notepad++ although I prefer Visual Studio Express.

Activate Mods in your Game
Suppose you have created a mod then you need to create a folder named extensions in the X4: Foundations root directory. Please note, there have been reports that an
extensions folder in the X4 main root directory does not activate any mods. Due to a current info from the developers the original idea was to place the extensions folder into
the X4 document folder. So please try that if you have trouble with starting mods from the main root folder. In any case you
are strongly advised to backup your saved games.

In the extensions folder create another folder for your mod. For example:
extensions > PlayerJump
In your mod folder you should create a content.xml which should look like this, for example:

Code: Select all

<?xml version="1.0" encoding="utf-8"?>
<content id="PJ" name="PlayerJump" description="Player Ship can Jump to a Target via Autopilot" author="Euclid" version="0.1" date="2018-15-09" save="0" enabled="1">
 <text language="44" name="PlayerJump" description="Player ship can jump via autopilot to a selected target" author="Euclid" />
 <text language="49" name="PlayerJump" description="Das Spielershiff benutz einen Hyperraumantrieb der durch den Autopiloten zu einem gewaehlten Ziel ausgeloest wird" author="Euclid" />
Of course your mod folder must also contain your scripts which requires to create either a folder md for mission director scripts or a folder aiscripts for XML scripts, or both if your mod has both types of scripts. In the above example this looks like this:
extensions > PlayerJump > content.xml, md > EuclidsPlayerJump.xml
Now all you need is to start you game. You can check the in-game settings "extensions" to confirm that the mod "PJ" is active.

For Linux users: Please check this thread for specifics on how to install mods.

Cheers Euclid

Re: Getting Started: Tools, Scripting and Modding

Posted: Tue, 4. Dec 18, 17:48
by euclid
When testing your scripts/mods it is useful to have the debug log enabled and/or being able to write some info from your scripts to a file.

1) To enable the debug log you need to add the command parameter -logfile debuglog.txt to the X4.exe. That can be done either in the Steam settings of via a shortcut to the X4.exe which would look something like this:

Code: Select all

E:\Games\Steam\SteamApps\common\X4 Foundations\X4.exe" -logfile debuglog.txt 
Of course you need to change the drive name (here E:) according to your own setup. The name debuglog.txt can be changed to whatever you prefer.

2) Writing information to a file is more involved. You need to add the command parameter -scriptlogfiles which creates a folder named logs within you X4 document folder and within that folder another folder which you have to name in your script. For example:

Code: Select all

<set_value name="$name" exact="'Euclid' + player.age"/>
<debug_to_file name="$name" directory="'Euclid'" text="'Time Stamp: ' + md.$SystemTimeAtGamestart + ' player age in hours = ' + player.age/1h" output="false" append="true" />
In this example a folder Euclid is created in the logs folder and all info of the debug_to_file command is written to a file which name will get a timestamp. That means a new file is generated if you call this script again. A simpler way is to use a static file name, for example:

Code: Select all

<debug_to_file name="'LoadoutTest'" directory="'Euclid'" text="' loadout' + $i + ' : ' + $loadout.{$i}" output="false" append="true" /> 
which writes the information to the same file LoadoutTest.

Cheers Euclid