XML Layout szerkesztés Joystick-okhoz

Level 1

Sokan döntenek úgy, hogy szeretnék ezt a BDSSE (Best Damn Space Simulator Ever, valaha volt átkozottul legjobb űrszimulátor) űrszimulátort joystickkal, sőt HOTAS-al (Hands On Throttle And Stick, joystick és gázkar) játszani, viszont ami nekik van, azzal túl érzékeny, és nem az a felsőbb kategóriájú példány, amihez bármi szofisztikált dedikált vezérlőalkalmazást is adtak volna. Szerencsére van megodás.

Mivel a játék a Cryengine-re épül, így rendkívül széleskörű testreszabhatósággal bír vezérlés téren is, amennyiben egy kicsit értünk az XML-ekhez. Az alábbiakban igyekszem egyszerűen és érthetően leírni, mit és hogy is érhetünk el vele, a bejegyzés későbbiekben tovább is bővülhet majd, illetve későbbi cikkekben összetettebb konfig témákról lesz szó, mint a nem-linearitás, a dead zone-ok, stb… Emellett azt tudni kell, hogy ez egy fejlesztés alatt álló játék, tehát bármikor blokkolhatnak/elfedhetnek bizonyos paramétereket, hogy ne lehessen változtatni rajta külsőleg. Ez nem azt jelenti hogy a programban ne lenne ez megtalálható, hanem azt, hogy nem engedik külsőleg felülírni

Mi is az az XML?

Egyszerűen megfogalmazva, az XML egy leírónyelv, amiben nyitó és záróelemekkel határolunk körbe adatokat, amiket a rendszer így megért. Egyetlen célja az adatok tartalmazása és struktúrálása.

A nyitó tag-ek <tag> formában, míg a zárók </tag> formában találhatóak. Ez jelzi a rendszernek, hogy a két elem közti adat egy “tag” adat (tehát pl lehet <szin> piros </szin> formában jelezni, hogy a szín adatunk értéke piros)
Erre azért lesz szükség, mivel a Star Citizenben az összes joystick mappolása ilyen xml-ekben van, pl:

<!– Saitek X55 HOTAS mapping –>
<ActionMaps version=”0″ >
<CustomisationUIHeader device=”joystick” label=”JoystickSaitekX55″ image=”JoystickSaitekX55″ />

<options type=”joystick” instance=”1″>
<!– Make all main stick piloting input linear –><pilot_move_main exponent=”1″ />
</options>
</ActionMaps>

Star Citizen layout xml-ek

A Star Citizen az xml-jeit a \CitizenClient\Data\Controls\Mappings\ mappában tartja, itt vannak a leosztások billentyűzethez, joystick-ekhez, gamepadhoz…  Ezekről azt kell tudni, hogy egy rövidebb xml-lel csupán a teljes vezérlés pár részét is felül lehet írni, tehát nem kell végigszerkeszteni mindent egy végeláthatatlanul nagy xml-ben.

Éppen ezért teljesen működőképes, ha az ember a játékban beállítgatja, melyik gomb mit csináljon, és az xml-ben már csak egyéb, esetleg nem beállítható elemekkel írja felül az eredeti vezérlést. A legfájóbb probléma, a nagyon nagy érzékenységű joystick vezérlés például nálam csupán egy ekkora xml-lel van ellensúlyozva:

<!– MagniMapping –>
<ActionMaps version=”0″ >

<options type=”joystick” instance=”1″>

<pilot_move_x invert=”0″ sensitivity=”0.8″ exponent=”1″>
</pilot_move_x>
<pilot_move_y invert=”0″ sensitivity=”0.7″ exponent=”1″>
</pilot_move_y>
<pilot_move_rotz invert=”0″ sensitivity=”0.3″ exponent=”1″>
</pilot_move_rotz>

</options>

</ActionMaps>

A fenti blokkot csak bele kell másolnunk egy saját xml file-ba (legyen mondjuk a neve custom.xml), és el kell helyeznünk a fent leírt mappában. Innentől kezdve játékon belül már csak aktiválni kell, amire a pp_rebindkeys utasítás használható, amit a konzol behozása mellett tudunk beírni (a konzolt a ~ -val lehet behozni, ami a 0-s gomb). Szóval amennyiben a custom.xml a fenti mappában van, a konzolba írjuk be, hogy pp_rebindKeys custom.xml,  és már életbe is léptek a változtatások.

A fenti példámban a move_x (tehát x tengely mentén való elmozdulás) sensitivity értékét csak 0.8-ra vettem (előre-hátra kicsit kevésbé intenzíven bólint, mivel minden kiolvasott értéket 0.8-al szoroz)), a jobbra-balra “roll” érzékenységét 0.7-re, míg a “yaw”, tehát az orr mozgását nagyon levettem, egészen 0.3-ra. Mindegyiknél az exponent érték 1, tehát lineáris (a non-linear elmozdulásokról későbbi cikkben lesz majd szó), és egyik tengely sincs invertálva. Természetesen ez mindenkinek más és más tud lenni, egyéni ízlés szerint, úgyhogy amit javaslok:

Indítsunk egy free flight-ot, a settingsben állítsuk a megjelenítést ablakos módra. Így gond nélkül tudunk váltogatni az xml-ünk és a játék között. Repülés közben változtatunk egy kicsit az értékeken, majd visszaváltunk a játékba, és ismét beírjuk a konzolba a pp_rebindkeys custom.xml parancsot, így az frissül, és máris más lesz a hatás. Ezzel rendkívül sok dolgot lehet állítani, érzékenységet, léptéket, holttereket, gombokat, anélkül hogy a fő beállítások elvesznének (illetve ez nem egészen igaz, mert patch-ek esetén a default gombok visszaállnak (mivel azok a \CitizenClient\Data\GameData.pak\Libs\Config\defaultProfile.xml-ből táplálkoznak), tehát hiába raktuk egy gombra mondjuk az elsődleges és másodlagos fegyvereket, patch után ez elveszik, míg a mi file-unkban lévő beállításokat bármikor elő lehet hozni a pp_rebindkeys paranccsal, tehát aki nagyon nem szeret patchenként konfigolni, az beleírhatja a gombkiosztását is az xml-be. Egyébként lehet nézegetni a fenti mappában lévő xml-eket, van ami nagyon felüldefiniálja az eredeti default kiosztást, pl a layout_hotas_warthog.xml, míg van ami alig érinti, pl az x55-ösé.

Példa lehetőség:

Attack group 2 mappolása egy joy gombra:

<ActionMaps ignoreVersion=”1″ >
<actionmap name=”spaceship_weapons”>
<action name=”v_attack1_group2″>
<rebind device=”joystick” input=”js1_button15″ />
</action>
</actionmap>
</ActionMaps>

Látható, hogy a spaceship weapons nevű actionmap-ba kell tenni a fegyverekkel kapcsolatos mappolásokat, amiket így ahogy van a fő ActionMaps blokkon belül kell elhelyezni. Ez nem tesz mást, mint a v_attack1_group2 nevű utasítást (attack group 2-vel lő) köti rá a joystick típusú eszköz js1_button15-ös gombjára (a js1 az egyes joy-t jelenti, tehát igen, lehet akár 3 joy-t és négy gázkart is rákötni, csak az js2_button15 vagy hasonló lesz. Tehát a fenti példát figyelembevéve, azt, hogy ugyanazon a gombon legyen az elsődleges és másodlagos fegyverek tüzelése is:

<ActionMaps ignoreVersion=”1″ >
<actionmap name=”spaceship_weapons”>
<action name=”v_attack1_group1″>
<rebind device=”joystick” input=”js1_button1″ />
</action>
<action name=”v_attack1_group2″>
<rebind device=”joystick” input=”js1_button1″ />
</action>
</actionmap>
</ActionMaps>

Kommentek:

A <!– és -> elemek közé tett blokkokat az xml parser nem veszi figyelembe, tehát kikommentelhetőek vele komplett kódrészletek, vagy tarthatóak egy azon változtatásból több variáns, hogy azt lehessen aktiválni amelyiket szeretnénk…

Hol érdemes szétnézni:

Egy elképesztően alaposan kivitelezett összefoglaló a mappolásról, példákkal, stb. :
https://forums.robertsspaceindustries.com/discussion/110454/actionmap-and-controller-mapping/p1

Pár előre elkészített leosztás (amit persze finomíthatunk utólag):
https://forums.robertsspaceindustries.com/discussion/110454/actionmap-and-controller-mapping/p1#Comment_2057079

ActionMap generáló programok: SCJMapper, JoyConfig4SC

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöljük.