mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-03-22 23:05:36 +08:00
161 lines
7.9 KiB
Markdown
161 lines
7.9 KiB
Markdown
# CSL2XSB
|
|
Converts CSL packages to the XSB format for use in [LiveTraffic](https://twinfan.gitbook.io/livetraffic/) or more specifically: as expected by
|
|
the [XPMP2 library](https://github.com/TwinFan/XPMP2), a success to the
|
|
classic libxplanemp.
|
|
|
|
`CSL2XSB` updates some CSL dataRefs (engine/prop rotation, reversers) so they become available to LiveTraffic (and other XPMP2-driven plugins).
|
|
|
|
Tested with the following CSL model providers:
|
|
|
|
- [Bluebell Package](https://forums.x-plane.org/index.php?/files/file/37041-bluebell-obj8-csl-packages/)
|
|
- [X-CSL](https://csl.x-air.ru/?lang_id=43)
|
|
|
|
As this is a Python 3 script you [need Python 3](https://www.python.org/downloads/).
|
|
Tested with Python 3.7.3.
|
|
|
|
## Simple usage in Windows
|
|
|
|
- [Download](https://www.python.org/downloads/) and install Python 3 using the latest "Windows x86-64 web-based installer"
|
|
- Important: Check (select) the option "Add Python 3.x to PATH" at the bottom of the "Install Python" window.
|
|
- Click on "Install Now". Python will install.
|
|
- When done, click "Close" in the "Setup was successfull" screen. Now you've got Python 3.
|
|
- Download a CSL package like from X-CSL.
|
|
- Make a copy of it!
|
|
- Put the `CSL2XSB.py` script into the base directory of the that copy.
|
|
- Double-lick the `CSL2XSB.py` script in the explorer to start it. It will ask you if you want to run the script in that current directory. Enter "y" and hit Enter.
|
|
|
|
## Synopsis
|
|
|
|
```
|
|
usage: CSL2XSB.py [-h] [--noupdate] [--norecursion] [-v] [--replaceDR TEXT]
|
|
[path]
|
|
|
|
CSL2XSB 0.3.1: Convert CSL packages to XPMP2 format, convert some animation
|
|
dataRefs. Tested with: Bluebell, X-CSL.
|
|
|
|
positional arguments:
|
|
path Base path, searched recursively for CSL packages
|
|
identified by existing xsb_aircraft.txt files
|
|
|
|
optional arguments:
|
|
-h, --help show this help message and exit
|
|
--noupdate Suppress update of OBJ8 files if there are no additional
|
|
textures
|
|
--norecursion Do not search directories recursively
|
|
-v, --verbose More detailed output about every change
|
|
--replaceDR TEXT Replace dataRef's root 'libxplanemp' with TEXT. CAUTION:
|
|
This works with LiveTraffic up to v1.5 only. CSLs'
|
|
animations/lights will no longer work with standard
|
|
multipayer clients nor with LiveTraffic starting from
|
|
v2.0!
|
|
```
|
|
|
|
This will likely produce many new files, especially new `.OBJ` files, so disk usage increases.
|
|
|
|
## Background
|
|
|
|
The format of CSL packages has originally been defined with the creation of the
|
|
[libxplanemp library](https://github.com/kuroneko/libxplanemp/wiki).
|
|
Since then, various dialects evolved, e.g. in X-IvAp or PilotEdge or the like.
|
|
That means that CSL packages created for these clients cannot to their
|
|
full extend be used in LiveTraffic, which uses the original format.
|
|
There are disputes about how future-proof each format is.
|
|
|
|
To make other packages accessible to LiveTraffic (and likely, though not tested:
|
|
XSquawkBox) this Python script `CSL2XSB.py` converts their format.
|
|
|
|
This only works for the - nowadays most common - OBJ8 format, which is the only
|
|
format supported by XPMP2ever.
|
|
|
|
- `xsb_aircraft.txt` file:
|
|
- Validates entries in `xsb_aircraft.txt` file and corrects some common errors
|
|
- Warns about non-existing `.obj` or texture files, which will cause error
|
|
when actually using that model.
|
|
- Comments out models of unsupported format (`.acf` or OBJ7)
|
|
|
|
- `.obj` files referred to by `xsb_aircraft.txt` file:
|
|
- Rewrites OBJ8 models for which texture have been defined in additional
|
|
parameters to the `OBJ8` command, which cannot be supported in XPMP2 and
|
|
X-Plane's instancing.
|
|
- Replaces a number of older dataRef names (dating back to WT times) with
|
|
those now offered by XPMP2, so that additional animations like props, rotors,
|
|
or reversers become accessible.
|
|
- Removes unsupported commands `TEXTURE`, `HASGEAR`, `OFFSET`.
|
|
|
|
## Package-specific Information
|
|
|
|
### X-CSL
|
|
|
|
X-CSL packages can be downloaded [here](https://csl.x-air.ru/downloads?lang_id=43).
|
|
If you don't already have the package (e.g. because you use X-IvAp)
|
|
then download and start the installer. The installer will _not_ identify
|
|
LiveTraffic as a supported plugin. Instead, from the menu select
|
|
`File > Select Custom Path` and specify a path where the CSL packages are
|
|
to be downloaded to and where they later can be updated.
|
|
|
|
Do not let `CSL2XSB.py` run on this original download. Always make a copy of
|
|
the entire folder into a folder LiveTraffic can reach, e.g. to
|
|
`<...>/LiveTraffic/Resources/X-CSL`. Now run the script on this copy,
|
|
e.g. like this:
|
|
```
|
|
python CSL2XSB.py <...>/LiveTraffic/Resources/X-CSL
|
|
```
|
|
(Note that in some environments like Mac OS you need to specifically call
|
|
`python3` instead of just `python`.)
|
|
|
|
You can always repeat the above call and the script shall do it just again
|
|
(e.g. in case you modified any files manually). It keeps copies of original
|
|
files that it needs for a repeated run.
|
|
|
|
What the script then does is, in brief, as follows:
|
|
1. It searches for `xsb_aircraft.txt` files. If it does not find any in the
|
|
current directory it will recursively dig deeper into the folder structure.
|
|
So it will eventually find all folders below `X-CSL`.
|
|
2. It copies the `xsb_aircraft.txt` file to `xsb_aircraft.txt.orig` and
|
|
reads that to create a new `xsb_aircraft.txt` file.
|
|
3. **The `OBJ8 SOLID/LIGHTS/GLASS` lines are at the core:**
|
|
Here, additional parameters often define the texture files to use.
|
|
The original format does not support these texture parameters.
|
|
Instead, the textures are to be defined in the `.OBJ` file.
|
|
- To remedy this, the script now also reads the `.OBJ` file and
|
|
writes a _new_ version of it replacing the `TEXTURE` and `TEXTURE_LIT` lines.
|
|
- This new `.OBJ` file is then referred to in the `OBJ8 SOLID/LIGHTS` line
|
|
in the output version of `xsb_aircraft.txt`.
|
|
(An original `OBJ8 GLASS` line will be written to output as `OBJ8 SOLID` as `GLASS` is now deprecated.)
|
|
- The availability of the referred texture and lit-texture files is tested.
|
|
Some of them do not exist in the package, which causes warnings by the script.
|
|
This is a problem in the original X-CSL package. In a few cases,
|
|
the script can find a replacement by just replacing the extension of the texture file.
|
|
4. Minor other changes:
|
|
- Replace the non-existing ICAO aircraft designator `MD80` with `MD81`.
|
|
- Remove deprecated lines like `LOW_LOD` from `xsb_aircraft.txt`
|
|
- Replace `:` or spaces in `OBJ8` aircraft names with `_`.
|
|
|
|
The size of the complete X-CSL package increases from about 2 GB to about
|
|
3.2 GB due to the additionally created `.OBJ` files.
|
|
|
|
The resulting folder structures and its files should be usable by LiveTraffic
|
|
and produce no more warnings in `Log.txt`.
|
|
|
|
See LiveTraffic's [documentation on CSL settings](https://twinfan.gitbook.io/livetraffic/setup/configuration/settings-csl) for how to provide LiveTraffic with the path to the converted X-CSL package.
|
|
|
|
### Bluebell
|
|
|
|
The Bluebell package is the standard package recommended for usage with LiveTraffic.
|
|
Many CSL objects in the Bluebell package are capable of turning rotors or
|
|
open reversers. But as there was no `libxplanemp` CSL dataRef to control
|
|
these animation they stayed unchanged in the `.obj` files when the Bluebell
|
|
package was originally created, e.g. like `cjs/world_traffic/engine_rotation_angle1`.
|
|
|
|
XPMP2 (used by LiveTraffic) now implements more CSL dataRefs than in the
|
|
standard `libxplanemp` version, e.g. for engine/prop rotation and
|
|
reversers animation, and tries to stick to a
|
|
[standard set by PilotEdge](https://www.pilotedge.net/pages/csl-authoring)
|
|
as far as possible.
|
|
|
|
`CSL2XSB` replaces the unchanged dataRefs with the ones LiveTraffic now supports
|
|
so that rotors do rotate etc. The example above will be replaced with
|
|
`libxplanemp/engines/engine_rotation_angle_deg`.
|
|
For a complete list of replacement dataRefs see the very beginning of the script
|
|
in the map called `_DR`.
|