2010. december 28., kedd

Az RW mezőgyengítés rejtelmei

Ez az amiben az rw nagyon csúnyán el van tévedve, de valamennyire azért működik, bár érezhető a hibás elgondolás rajta. Persze ez sincs túlságosan dokumentálva.
Szóval ezt a simulation blueprintben lehet állítani, az engine sim component részben, persze csak diesel electric subsystemmel, (elektromos mozdonynál még ez a gagyi mezőgyengítés sincs...).




Ott  van:
A tractive effort vs field divert proportion (persze az editorban helyesírási hibáktól hemzsegve valami más, de ez akar lenni)-be adandó csv, azt írja le, hogy a mezőgyengítések között, hogy alakuljon a vonóerő, kN-ban. Az első oszlop %-ot jelöl a következő mezőgyengítésig , tehát 0.0-tól 1.0 között kell szerepelnie a számoknak. Tehát 0.5-nél fél úton lesz a következő mezőgyengítésig. A második oszlop, pedig távhoz tartozó vonóerő kN-ban (bár még nem értem 100%-osan valós a mezőgyengítés mikéntjét, de ez a kN-es dolog komplett hülyeség, hiszen inkább az adott sebességen elérhető max vonóerő (amit a tractiveffort vs speed csv-ben megadtunk) %-át kéne itt megadni, nem egy konkrét vonóerő értéket, de valószínűleg ki is számítja ezt (pl ha a mozdonynak a tf vs speed csv-ben 392 kN-t adtunk meg max vonóerőnek, akkor itt megadott 392kN azt fogja jelenteni hogy az adott sebességen elérhető vonóerő 100%-a, de ez csak fejtegetés, a jelen esetben nem jelent semmit).

Majd fentebb a field divertnél állítjuk be a mezőgyengítési pontokat.
A speed to activate a mezőgyengítést aktiváló sebesség mph-ban (megint következetesek voltak a készítők, néhol m/s néhol mph, néhol km/h...), és max áramerősség aminél aktiválódik (ez is komplett hülyeségnek tűnik, főleg hogy sehogy sem lehet 2500 amper fölé nyomni, még xml-t editálva sem mert a serz elszáll hibával ha többet írsz mint 2500 amper, az editor meg ugye nem is engedi beírni).

M62 field divert csv-je
Mint látható a max vonóerő 392 kN, tehát a 100% és akkor számold ki hogy mennyi a többi, és így alakul a két mezőgyengítés között a vonóerő. Nyilvánvaló ha a 0.9-re 0 vonóerőt írtam volna, soha nem érte volna el a mezőgyengítést, 100-al viszont igen.
Fos az egész így is, de jobb mintha kihagynám az egész mezőgyengítést... Ezen túl meg az rs.comtól függ mikor méltóztatnak végre rendbe hozni a fizikát (bár nem sok az esély rá hogy valaha fogják... :( )

Majd remélhetőleg kiadom az m62 teljes source-ját, ott majd meg lehet nézni minden beállítást.

Frissítés: Bizonyára sokan észrevették, hogy mezőgyengítést használó járműveknél RW-ben mezőgyengítés előtt beáll egy értékre a ampermérő. Ez azért van mert a csv utolsó sorát egyszerűen kihagyja a konvertálásból a játék. Tehát szúrj be még egy sort, ugyanazokkal az értékekkel ami az addigi utolsó sorban volt, így az utolsó előtti sort figyelembe veszi és nem lesz ez a beállás, szépen folyamatosan fog változni az áramerősség.

Scriptelés (főként dinamikus dízelfüst) a játékhoz

Ez lua nyelven történik, amit egy kis programozási tudással nem lesz nehéz megszokni. Ezzel vannak programozva a jelzők, de mást is lehet velük, de sajnos a többi része nincs túl jól dokumentálva...

Itt a hivatalos dokumentáció, de van még függvény itt pár nagyon elrejtett, és nem mindig implementált függvény. És itt.
Illetve van még a SetEmitterActive, és a SetEmitterRate függvény, ami elengedhetetlen mondjuk a dinamikus dízeles füsthöz, és még a SetEmitterColour aminek 3 paramétere van, a vörös, zöld, és kék csatorna.
GetSimulationTime ez pedig elég egyértelmű.

Mozdonyhoz az enginescript, és simulation scriptben lehet nyúlni, ezeket meg kell adni a confignál.

Az enginescriptnek van egy fontos része, ami elengedhetetlen, ahhoz hogy irányítani lehessen a járművet:

function OnControlValueChange ( name, index, value)
   if Call( "*:ControlExists",name, index ) then
      Call( "*:SetControlValue", name, index, value );
   end
end

A dolog egyszerű ez az OnControlValueChange akkor aktiválódik, ha a kezelőfelületről a user valami vezérlőhöz hozzáér.

Pl ha a regulátort babrálja, akkor aktiválódik, a name változóba bekerül a Regulator szó, az index nemtudom mire jó, a value-be pedig az adott control állása, pl 50%-os regulátornál 0.5.
Ez után megnézi hogy létezik egyáltalán ilyen control value, majd a setcontrolvalue meghívásával beállítja a játékon belül. Tapasztalatom szerint ez nem aktiválódik olyan control valueknél, amelyek nem közvetlenül a felhasználótól függnek (pl RPM, Ammeter, vagy hasonló belső szimulációs dolgok), viszont előnye az hogy csak akkor fut le az egész, ha a felhasználó változtat.

Van még a function Setup(), amibe ágyazott kódok a jármű használatba vételekor egyszer lefutnak.
És a function Update(interval) ez minden szimulációs frame-nél (elvileg minden egyes megjelenített képkockánál) lefut, és az interval változóba az kerül be, hogy mennyi idő telt el az előző meghívás óta (biztos jó valamire :D).

Utóbbi kettő megtalálható a simulation scriptben is, persze ha szükség van rá, és igazából a simulation scriptben szoktak babrálni a géppel.

Jah azért leírom, hogy azok a Call(*:függvénynév, paraméterek) azok amik végül is a játékhoz hozzáférnek.
A * nem csak * lehet, lehet egy játékban elkülönített objektum neve is, ezt pl a fő fő blueprintben childként hozzáadott dolgoknál lehet használni.
 
 Ez pl a készülő M62-es engine blueprintjéből egy részlet.
Ott látható az M62smoke-néven hozzáadott füstforrás, aminek intenzitását scriptből tehát a Call(M62smoke:SetEmitterRate, ) formulával lehet vezérelni, külön névre szólóan.

Füsforrásokat, a szokásos rendben, az hangokhoz hasonlóan, meghatározott nevű mappában (vagy annak almappáiban hozzuk létre, különben nem működik. Ez pedig a Particles nevezetű mappa, aminek felismerését a blueprint editor egy fehér lap fölötti szőrös mikrofon ikonnal jelzi :) Ez után létre lehet hozni, egy Emitter blueprintet beállítani, majd az engine blueprintben hozzáadni childként a járművünkhöz, aztán az asset editorral previewelve, szépen a helyére húzni a füstforrást.

A füsforrás beállítása lásd itt ebben a szép kis pdf-ben, amit nem én írtam őszintén nem is tudom ki, de szépen le van írva. Igaz ez még xml-t wordpaddel hackelős időkben készült, mostmár könnyebb a helyzet blueprint editorral, de a nevek ugyan azok, így ugyanolyan jó az írás. A végére a piros betűs részre nincs szükség, hiszen a child pozicionálását ugye ma már az asset editorral szép 3d-ben el tudjuk végezni :).

Fontos megjegyeznem, hogy a doksiban olvasható emission rate az egy és ugyanaz mint amit a SetEmitterRate script függvénnyel állítunk, és mint olvasható ez a füstpamacsok kibocsájtása közt eltelt időt jelenti, tehát minél kisebb az szám annál kevesebb idő telik a füstpamacsok között, annál sűrűbb, vigyázzunk mert nagy sűrűség könnyen megfektet egy erős gépet is :).

Még egy említésre méltó függvény van, a SetEmitterActive, aminek egyetlen paramétere egy szám, ami 0 vagy 1. A füstforrás ki, be kapcsolására való.

Na de itt egy konkrét M62 füstscript a lényege az, hogy 700 amperes áramerősségig alapjárat füst, afölött az aktuális áramerősségtől függő erősebb füst, motor beindulásakor legyen egy erős füst, de amíg üzemanyagszivattyúzik (a hangja) addig ne füstöljön, majd kipróbálható lesz hogy néz/hallatszik ki a játékban, ha kész a szergej ;)