2012. október 2., kedd

Javított VMW-s déli pályaudvar és környéke

Javítottam a pályán pár dolgot:
- több száz méterrel odébb húztam az egészet mivel hogy a koordináták szerint nem ott volt ahol kellett volna lennie, így a betöltött domborzat sem stimmelt, mostmár nagyjából stimmel
-lecseréltem a csíkos vágányokat
-lecseréltem a route templatet a "magyaralap"-ra.

Pálya letöltése (aki szeretné folytassa a pályát, de jó lenne ha ezt jelezné is a többieknek nehogy párhuzamosan 2 pályát kezdjenek építeni)

Ami kell hozzá, természetesen a régi railworksos alap cuccok (amik ugye az új vásárlóknak már dlc-k....)

Ezen kívül az előző bejegyzés vágánycsomaga : http://railsimulator.hu/letolt.php?id=14
És a VMW csomag: http://railsimulator.hu/letolt.php?id=12


2012. szeptember 30., vasárnap

Vágánycsomag frissítés!

Frissítés a vágánycsomaghoz, a meglévő 2 vágány mellé még egy rozoga fatalpas, meg
ennek az olajos változata került bele. Tölthető a railsimulator.hu-ról.
http://railsimulator.hu/letolt.php?id=14

És a forrása modellekkel, textúrákkal: http://railsimulator.hu/files/tracks_forras.7z (lehet tanulmányozni hogy kell vágányt csinálni, és lofot (mivel a vágányok speciális loftok).

Mostantól ezek Track New HUN kezdetű nevekkel érhetők el a szerkesztőből, hogy meg lehessen különböztetni a csíkos vmw-s változatoktól.



2012. június 1., péntek

Railworks Replacer

Írtam egy kis Javas programot, ami a railworks adatfájljaiban tud Blueprint hivatkozások után keresni, és ezeket tömegesen lecserélni a kívánt hivatkozásra.
Ez azt jelenti hogy pl néhány perc alatt le tudsz cserélni a pályán egy jelzőrendszert, vagy vágánytípust, vagy bármilyen objektumot, mindet ami az adott adatfájlban előfordul.
Én pl 5 perc munkával lecseréltem a hagen-siegen pálya jelzőit Magyar jelzőkre, MINDET.
A programom használata elég egyértelmű. A file menü/open files opciójával kiválasztod a módosítandó xml-eket(többet is lehet), ez után a program betölti a bal oldali listába hogy milyen típusú blueprint hivatkozásokat talált. Kijelölöd amit szeretnél módosítani (többet is lehet), és katt a "Filter" gombra ekkor betölti a jobb oldali nagy táblázatba a talált blueprint hivatkozásokat(ezekből több százezer is lehet, de az azonos hivatkozásokból csak  egyet jelenít meg). Ez után a táblázat desired kezdetű elnevezésű oszlopaiban található cellák módosíthatók lesznek duplaklikkel. Ide kell beírni a kívánt értékeket. Ha valamit nem akarsz cserélni nem írsz oda semmit.
És ha kész vagy a "Execute" gombbal érvényesítheted a változtatásokat. Figyelem, egy xml-ben több százezer lecserélendő dolog is lehet, így a lecserélendő dolgok számának, és a megnyitott fájlok mennyiségének növekedésével, a változások fájlba írása is sokáig tarthat.
Például a hagen siegen pálya 50 megabájtos tracks.xml-jében, a kb 30 féle jelző lecserélésével úgy 20 másodpercig dolgozott a program, bár a többi xml általában kisebb, mert egyrészt tilekre vannak osztva, másrészt nem tartalmazza a pálya teljes sínhálózat információit, jelzőkkel, kilométerkövekkel, trackrulekkel, és felsővezetékrendszerrel.
A programban működik a ctrl-f -es keresés, táblázat oszlopfejlécre kattintva lehet rendezni.
A programhoz Java 7 kell.(letöltés)
És itt van maga a program ami úgy futtatható mint bármi más ha fent van a Java. Letöltés

És exe változatban (csak loader tehát java környezet még mindig kell hozzá, viszont ez ellenőrzi annak verzióját, és figyelmeztet ha nem jó, na meg ez akkor is elindul ha el van rontva a gépen a java futtatási beállítás, és jar-ra klikkelve nem történik semmi, emellett több memóriát ad a programnak, így a nagyobb routek (pl az 500+ km-es northern europe sem fog ki rajta, persze ehhez nem ár 3 giga ramnak lenni a gépben)).

Frissítés:
  • január 4. blueprint táblázatnál oszlop szerinti rendezés hozzáadva (klikk a tábla fejlécre)
  • január 14. már nem kell manuálisan serzelni, be kell rakni a program mellé egy serz.exe-t és magától kicsomagol, visszacsomagol ha bin-t nyitsz meg. Ezen kívül a binekről módosítás előtt biztonsági másolatokat is készít bak fájlokba.
  • január 15. hozzáadva tábla mentés, és betöltés opció, tábla jobb felső sarkába kis ikonnal oszlop elrejtés, és tábla méretezés
  • január 16: többszálú változat letölthető
  • január 19-ig: kapott menthető táblázatot, és assets mappa böngészőt ahonnan duplaklikkel a blueprint bin fájlon lehet a kijelölt táblázat sorokba rakatni a hozzá tartozó adatokat
  • február 4: néhány sort a kódban átrendeztem, aminek az eredménye nagyobb fájloknál 20x-os gyorsulás lett a lecserélésnél (a serzelés tovább tart mint maga a lecserélés), kisebb fájloknál (pl scenery) valszeg nincs ekkora gyorsulás ha csak nem SSD meghajtón dolgoztatod, mert itt már a vinyó sebessége a korlát
  • feburár 11-ig: A fájl fa nézetben, light (fény blueprint)-re vagy azt tartalmazó mappákra jobbklikkelve,  lehet kapcsolgatni light blueprintek árnyék vetését (ami rohadt erőforrásigényes). Toggle ki/be kapcsolja (ha be volt kapcsolva, kikapcsolva, ha ki volt, akkor be), disable kikapcsolja, enable bekapcsolja. Ezen kívül induláskor megnézi még a program van-e új verzió, és ha igen figyelmeztet.
  • február 22-ig: vágányhálózat, és egyéb objektumok elhelyezési magasságát is van már lehetőség változtatni.
  • március 20: dav (hang fájl) dekóder(wav-ba), több fájlon egyszerre, akár mappákon is működik ha a mappában vannak konvertálható zip fájlok.
  • június 1: zip fájlok rwp-re konvertálása ugyan úgy működik mint a fenti dav dekóder funkció.

2012. május 20., vasárnap

Hagen-Siegen magyar jelzőrendszerrel és sebességkorlát táblákkal

Nem mostanában csináltam, nyilvánvalóan kell hozzá a magyar jelzőcsomag, és talán bár ebbe nem vagyok biztos, a magyar vágánycsomag is kell hozzá.

Az egész cserét a lentebb tárgyalt replacer programmal csináltam, pár perc volt az  egész. Nagyjából valósághűen feleltettem meg a német jelzőket a magyarokhoz, de mivel nem teljesen ugyanolyan a két jelzőrendszer, nem lett tökéletes, de nagyjából jó.

Pálya letöltése

Copy of hagen siegen néven található meg. A hagen siegen-re való scenariok tökéletesen működni fognak, az alapok be is vannak rakva a csomagba, ami nem alap, azt be kell másolni ennek a scenario mappájába.

2012. február 4., szombat

Magyar route alap, ha pályát építesz olvasd el!

A a railworksben egy pályát (route) egy templateroute segítségével kell létrehozni, ami tartalmazza az ég textúrák, a föld textúrák, és az időjárás beállításait, és a pálya alap középpontját.
A középpont a legfontosabb. Ez egy valós földrajzi koordináta, amihez képes az rw számolja a tileokat. Tehát a tileokba nincs benne, hogy ezen és ezen a földrajzi koordinátán vannak, hanem csak az van benne hogy a pálya középponthoz képest hány tile-nyi távolsában vannak. Emiatt érthető hogy ha 2 pálya nem ugyanazzal a középponttal lett létrehozva (a középpont nem jelenti azt hogy onnan kell kezdened a pályát, elmehetsz 100 km-el odébb és onnan is építhetsz, de a referenciapont a lényeg, a pályaközéppont), akkor elég kicsi az esélye hogy azt a 2 pályát eggyé tudod alakítani. Viszont ha ugyan az a középpontjuk akkor össze lehet kötni a pályákat, így sok kis elszigetelt railworks route-ból 1 pályahálózatot lehet csinálni.

Lehet eleve közösen is dolgozni, mégpedig úgy hogy valamilyen módon (pl dropbox) megosztják a közösen dolgozók a pályát, de egyszerre ugyan azokon a tileokon csak 1 ember dolgozik. pl valakik csinálnak egy közös mucsaröcsöge-bivajbasznád routet, akkor az egyik bivajbasznádon építget, a másik mucsaröcsögén. és mondjuk naponta frissítik a megváltozott tileokat.
A vágányoknál jelzőknél, lassújeleknél ez bonyolultabb dolog, mert ezek az egész routen 1 fájlban tárolódnak, a tracks.bin-ben, nincsenek tileonként leosztva. Erre vagy az a megoldás, hogy a a vágányokat és a hozzájuk kötött dolgokat 1 ember babrálja egyszerre, vagy a routemerger nevű eszköz, de én inkább az 1 emberes vágánymunkát ajánlanám.
Minden más, (földtextúra, egyéb objektumok, utak, stb) tileonként külön fájlban tárolódnak, így ezeket egyszerűen össze lehet fésülni. 1 tile egyébként 1x1 km és a szerkesztőben alul írja a tile koordinátáit.

Azért hogy a magyar pályákat össze lehessen kötni, létrehoztam egy routealapot. Itt töltheted le, majd telepíteni kell az rwp-t ahogy szokás

 Használata egyszerű, tehát New Route és nézd a képet.
Majd create route és a szerkesztőn belül már beírhatod és ugorhatsz a koordinátára ahonnan építkezni akarsz, de a létrehozáskor nem szabad a kezdőkoordinátát megváltoztatni.

Ez a koordináta ugyan az mint a vmw-s magyarorszag nevű route és route template-é. Így az azokon alapuló pályákkal is össze lehet hozni.

Ha más kezdőponttal hoztál létre egy routet, 2 választás van:
-vagy dobod és újrakezded, ezzel a template-el, így össze lehet kötni a vmw-s és ennek az alapjain készülő pályákkal
-vagy nem dobod, de akkor marad egy elkülönült pálya, és nem lehet majd összegyúrni másik pályával.

2012. január 14., szombat

Magyar vágányok

2 féle magyar vágányt sikerült összehozni, a vmw pack textúráival (újra kellett csinálni, mivel nem volt meg az eredeti modell, és TS2012 fekete csík van a vágányokon).
Track rule is van hozzá, beállított magyarországra megfelelő ívtúlemeléssel.

(VMW-s ütközőbakokat, és váltókapcsolókat használ, ezek mellékelve is vannak a letöltésben, de külön kell engedélyezni a kockában az editorban a vmw-s asseteket, különben ezek nem fognak látszódni)

2012. január 13., péntek

Script hívások

Találtam még néhány ismeretlen script parancsot:
Jelzőknél:
  • string Call( "GetId" ) A jelzőknél az id szövegdobozba írt szöveget adja
  • string Call ( "GetLinkApproachControl", linkszám ) a linkszámon beállított approach control checkbox értékét adja vissza. "1" a kijelölt, "0" az üres
  •  string Call ( "GetLinkLimitedAspect", linkszám ) ugyan az mint a fent csak a limited aspect értékét adja
Máshol:
  •  Call ("childnév:SetParameter", "SignalProgress", 0) ez valami olyasmi lehet mint a control value állítás csak nem járműveknél működék valami beépített control value szerűségekkel (pl signalprogress)
  • Call("childnév:Activate,(0/1)) pl lámpákat lehet vele kapcsolgatni.
  • Call("childnév:SetText, "szöveg", szám) child objekten megjelenítendő szöveg, a szám pedig 1 ha primary text, és 2 ha secondary.

2012. január 12., csütörtök

Jelzőcsomag frissítés

  • előjelző javítás
  • tolatásjelző működés
  • éberségi jelzéskép, és sebességkorlát küldés az elhaladó mozdonynak
  • bővebben a manualban

Letöltés
külön manual (bent van az rwp-ben is)

2011. december 23., péntek

Vonatbefolyásolás és az RW

Alapon sajnos az RW nem tud vonatbefolyásolást, tehát a jelzőképeket a mozdonyon megjeleníteni, sátorjelzőzni,  de nem is olyan nehéz a jelző scriptbe ezt berakni. Egyelőre a letölthető Magyar jelzőcsomag scriptjei nincsenek frissítve ezzel egyébként 1 sornyi kóddal jelzőfajtánként, kiadott jármű híján.

A jelzőképek használatához az engine scriptbe ennyit kell berakni:
function OnCustomSignalMessage ( arg )
  local messages=string.split(arg, "|") --| jelnél szétvágja az üzenetet
  local cabsignal=tonumber(messages[1]) --első darab az előjelzés
  speedlimit=tonumber(messages[2])*3.6 --2. darab az aktuális korlát, m/s-ben küldi a jelző
  if cabsignal<=6 or cabsignal>=0 then
   Call("*:SetControlValue", "CabSignal", 0, cabsignal)
  else
   Call("*:SetControlValue", "CabSignal", 0, 7)
  end
end

function string:split(delimiter)
  local result = { }
  local from  = 1
  local index = 1
  local delim_from, delim_to = string.find( self, delimiter, from  )
  while delim_from do
    result[index] = string.sub(self, from , delim_from - 1)
    from  = delim_to + 1
    delim_from, delim_to = string.find( self, delimiter, from  )
 index = index + 1
  end
  result[index] = string.sub(self, from)
  return result
end

Mint látható kell egy CabSignal nevű control value, aminek a max értéke 7 lehet (ha teljesen kikapcsolt állapotot is akarunk akkor 8).
Ezen kívül a modellben mindegyik jelzőlámpára/jelzésképre egy világító állapotú fénylap addatex materiallal.
A jelzésképek megjelenítését interior visibility objectek hozzáadásával lehet elérni. A lower és upper visibility threshold azt a tartományt jelöli aminél meg kell jelenítenie, a transform name-hez írt objektumot. Azon kívül elrejti. Az objektum nevét a lod paraméterek nélkül kell írni, így az 1_0000_max megjelenítéséhez csak annyit kell írni hogy max.

Elég egyértelműen leolvashatók a képről hogy a scriptből érkező melyik érték mit jelent. A képre nem fért rá még a 80-as, jelzés aminek száma 2, a 40-é 3, a 7-es kód pedig a nincs jel, vagyis fehér jelzést jelenti. Ezt a kódot adja a script, ha nem értelmezhető jelet kap, de bizonyos jelzők csak ezt a jelet adják (nem biztosított főjelző, tolatásjelzők).
Video milyen ez akcióban
Frissítés: sebességadatot is küldenek a jelzők, mint látható a speedlimit változóba kerül ez.

2011. december 22., csütörtök

Fények hozzáadása járművekhez/bármihez

TS2012-től kezdve vannak végre működő fények, amik még árnyékot is tudnak vetni. (igaz ezt a borzalmasan programozott optimalizálatlan grafikus motor miatt, nem ajánlott gyakran alkalmazni mert még játszhatatlanabbul fog futni a játék.)

Ugyan úgy kell a dolgokhoz hozzáadni, mint a füstforrásokat, vagy a hangokat, tehát child-ként.

Annyit kell csinálni, hogy létrehozunk egy spot light vagy point light blueprintet, meg lehet nézni melyik milyen fényt ad, mozdony reflektoroknál spot lightot szoktak használni.
A light component rész a lényeges, a többi általános blueprint beállítás.
Radius: nem éppen azt jelenti amit a szó jelentene, a terjedési távolságot állítja, tehát ez 70 méterig fog kivetülni.
Phi: szétterjedés szöge, milyen széles legyen a fénycsóva
Theta: halványodás átmenet értéke. Nagyobbnál fokozatosabban halványul, kisebbnél hirtelen.
Colour: elég egyértelmű
Alpha: nincs funkciója
Cast shadow: árnyékot vet (true) vagy nem (false), az árnyékvetés nagyon erőforrásigényes, pl mozdonynál csak a homlokfényszóróra állítanék be ilyet, a többi ne vessen árnyékot.
Day night cycle: ezt utcai lámpáknál érdemes használni, nappal lekapcsolja, éjjel meg fel.
Anim texture: animált textúra, pl mondjuk pislákolás, vagy valami, kérdés hogyan kell animált textúrát készíteni?
Projected texture: a beállított textúrát fogja kivetíteni a fény (volt is egy ilyen küldetés még a gta vice cityben ahol egy képet kellett kivetíteni egy felhőkarcolóra :D )

Ez után már csak childként hozzá kell adni valamihez.

Így valahogy. Az elnevezés fontos ha kapcsolgatni szeretnénk a H betűvel. Fwd_Headlight_XX a mozdony elejére, Bwd_Headlight_XX pedig a hátuljára való. Ez után az asset editorban lehet a helyükre mozgatni és forgatni a fényeket, mazochisták a koordinátamátrixot kézzel is szerkeszthetik.

2011. december 20., kedd

Magyar jelzőcsomag Railworkshöz a railsimulator.hu-n

Már jó ideje tölthető a MÁV jelzőcsomag a railworkshöz amit én és czkkrgbr hoztunk össze
Tartalmaz:
  • 4,3,2 és 1 fényű főjelzőket
  • kiegészítőfények
  • elő és ismétlőjelzőket utóbbit jelzőoszlop nélkül is jelzőhídra
  • dinamikus számozású szelvény és kilométerköveket (a pályaszerkesztőben lehet beleírni az értéket)
  • dinamikus sebesség jelző és előjelző táblák tehát arra a pályára beállított sebességet írják ki mindig amihez linkelték
  • moduláris felépítés, szóval blueprint editorral bárki rakhat össze olyan jelzőkonfigurációt amit akar

További információk az rwp railworksba telepítése után a manuals/HU/HunSignals.pdf-ben

Új script eventek

A legutóbbi október körüli updatenél beraktak 2 új script eventet, amit az engine scriptben lehet használni.
function OnCameraEnter(cabEndWithCamera, carriageCam)
-- cabEndWithCamera: 0 = none, 1 = front, 2 = back.
-- carriageCam: 0 if cab cam, 1 if carriage cam
-- no return value
Elég egyértelmű, ez akkor fut le, ha valami belső kamerára vált a user. Az első paraméterből kiderül melyik vezetőállásba váltott a játékos/nem vezetőállásba ennek értelmében kicsit érthetetlen a második paraméter hiszen az is arra való hogy megmondja hogy vezetőállás, vagy utaskamerára váltott, de ez az elsőből is kiderül.

Ez pedig akkor fut le ha külső kamerára vált
-- function OnCameraLeave()
-- no parameters, no return value

Ezekkel lehetséges külön vezetőállásból külön dolgok vezérlése, persze ez megint csak favágó módszer, inkább az lenne az értelmes ha a cabok control value-it el lehetne rendesen különíteni.

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 ;)

2010. augusztus 12., csütörtök

Mozdonyhoz hangok hozzárendelése

A railworksban, egy mozdonyhoz alapkiszerelésben 4 dolog kell: a modell, a textúrák, egy engine blueprint, és egy simulation blueprint.
Az engine blueprint tartalmazza amiből áll a mozdony, a simulation blueprint pedig a motor(ok), fékrendszerek működését, ezeknek az értékei nagyrészt egyértelműek, aki tud angolul tudni fogja mi hova kerül, aki nem az szótárazik :)
A hangoknál az engine blueprintre kell kitérni, azon belül az irányítási beállításokra, a Control Container Component/Control Values részbe.
A control valuek jelentik a felhasználóval való kommunikációt, és a játékon belüli kommunikációt is.
Itt kell megadni az irányítás mikéntjét, hogy milyen kapcsolók és kijelzők vannak (ez utóbbiak nem feltétlenül láthatók grafikusan is).
A control name egy hivatkozás valamire a játékban. Vagy egy input remapperre (billentyűzetkiosztás), vagy egy játékmotoron belüli logikai dologra, vagy akár lua scriptes dologra.

Vegyük az egyik példát ami elég egyszerűen érthető:
Control Name: TrainBrakeControl (ez jóformán azt jelenti, hogy ezt a vonatfék billentyűi vezérlik (magyar billentyűzeten "é" és "á")
Default value: alap pozició (féknél a 0.70 azt jelenti alapon 70%-ra van behúzva a vonatfék)
Minimum value: minimum érték (féknél 0 mert 0% a minimum)
Maximum value: maximum érték (féknél 1 mert 100% a max)
A két fenti érték vezérli egyébként a kiírást is ha -1 és +1 akkor azt azt jelenti -100% tól 100%-ig mozgatható. Ha 0 és 1 az azt jelenti 0%-100% ha több mint 1 valamelyik, akkor az azt jelenti a játéknak hogy ez már nem % lesz hanem egy sima szám, és így is fogja kiírni.
A két description mező pedig azt jelenti mit ír ki a játék ha a vezérlő fölé viszed az egeret (feltéve ha van ilyen grafikusan látható vezérlő (animáció)) beállítva.
Apply to consist: alkalmazódjon ez az egész vonatra vagy nem (mivel a vonatfék alapból is alkalmazódik a vonatra), ezért itt false-ra van állítva.
Ezután az interface elements résznél lehet hozzáadni milyen típusú vezérlő ez (folyamatos, kapcsolós, te állítod be a kapcsoló szinteket, stb). Ennek is van egy alegysége ha olyan kapcsolót állítasz be aminek az állapotait neked kell beállítani, a Notch. Itt azt állítod be hogy hol vannak a kapcsolószintek, ez a rész pont olyan mint az MSTS-ben.

De nekünk a hangnál csak a fölső réteg a lényeg, de a vonatfék hangjai helyett kezdjünk egyszerűbbel, mondjuk egy RPM, és egy ampermérő értékkel, ha dízel elektromos mozdonyunk van.

Szóval adjunk hozzá egy control value-t, aminek a Control name-je "RPM" lesz (mint mondtam mivel ez egy hivatkozás és erre is fog hivatkozni más, fontos a pontos név). Default value kb tökmindegy, mert ezt nem mi vezéreljük hanem a játék motor szimulációja. Minimum 0 mivel le is állhat a motor :). Maximum pedig a max rpm amit élérhet a motor(vagy egy tetszőleges nagy szám ami nagyobb mint a motor max fordulatszáma). Lehet kevesebb is, akkor ez az érték ott megakad. Ha nagyobb akkor semmi sincs, akkor is csak odáig megy amíg a motor fordulatszáma megy.
A többi rész kitöltése akkor kell, ha ki is akarjuk ezt az értéket jelezni, (pl mutatókkal a cabban), tehát most nem érdekes.
Létrehozunk még egy Ammeter Control name-es control valuet, itt is mint előbb megadjuk a szélsőértékeket.


Miután ez meg van, már meg is vannak a 2 hangot vezérlő értékek.
Még lesz pici dolgunk az engine blueprintben (összekötni az audiot a mozdonnyal), de ez akkor egyszerűbb ha már van is hang :)

A blueprint editorban, átvándorlunk az Audio főmappába (eddig ugye a RailVehicles)-ben voltunk)
Az Audio-n belül a nekünk tetszó (és nekünk átlátható) mappában jobb klikk, és "New Audio Control" és kiválasztjuk a szükséges típust, most Diesel Audio Control-t.

Miután ez megvan, el is érkeztünk a lényegi részhez.
Az activation distance azt jelenti, hogy ez az audio control a forrástól milyen távolságban aktiválódik, méterben.
Nyissuk meg a Sound részt, és adjuk hozzá az első hangunkat egy single sample soundot (a random sample sound nevéből adódóan véletlenszerűen megszólaló hangokra való, de az RPM és az áram búgása az nem véletlen).
Name: név (erre fogunk hivatkozni később, nálam ez az Ammeter, de akár kiskutya is lehet, a lényeg hogy erre hivatkozunk később))
Is looped (folyamatos-e): true (mert mind2 hangunk folyamatos)
Priority: ha elérik a hangok az egyszerre lejátszhatóak maximumát (ez integrált hangkártyáknál olyan 32 körül lehet), akkor ennek a hangnak milyen prioritása legyen (0-100-ig)
Base volume: az alap hangerő, 1 azt jelenti hogy alap hangerőn hangosítás és halkítás nélkül játssza le.
Volume variation: véletlenszerű hangerőváltozás mértéke (0 nincs változás)
Base pitch shift: alap hangmagasság (1 a változatlan)
Pitch shift variation: random hangmagasság változás mértéke (0 nincs változás)
Instance group: intance groupokat lejjebb lehet létrehozni, pl hangok kizárására lehet használni. Ha több hang 1 instance groupban van, akkor csak az a beállított mennyiség szólalhat meg egy időben), de erre most nincs szükség.
Sample: Pathname (szokásos fejlesztő, kiegészítőnév útvonal),  Filename magának a hangnak az elérési útja (blueprint editor jobbklik a hangfájlon "copy filename" majd ctrl-v a helyére)
(wav fájlokat fogad be, maximum 48khz-s 16biteset, stereot, de ilyen hangokhoz monot szokás használni, editoros lerakható környezeti hangokhoz kell stereo (pl madárcsicsergés)

Majd ezt megcsináljuk újra, immár az RPM hanggal és névvel.
Curve részleg: itt görbéket adhatunk meg, ami szerint befolyásolódnak majd a hangjaink.
A name megint csak egy azonosító, majd a curve pointoknál hozzáadhatjuk a görbék pontjait (nem értem hogy ha a motor, vonóerő stb tulajdonságoknál csv fájlos jelleggörbéket kell megadni, itt miért kell szépen bepötyögni).

X tengely a control value értéke, Y pedig a hangon történő változás. Mint látható ezt azt jelenti, hogy nincs 100 amper-ig hang, majd 100-nál 40%-os hangerő, 300-nál 61%, és 1200 ampernél eléri a 100%-os hangerőt (de akár 200%-os is lehetne).
Létrehoztam mégegy görbét az RPM-re, ott pedig az X tengely RPM értéke az Y-hoz írt szám szerint fogja a hangmagasságot változtatni, persze ezek a görbék önmagában semmit sem csinálnak, csak adatok.

Jön a modifier chain, vagyis a módosító lánc. Létrehozol egy modifier chain-t, az amperre, és a name szokás szerint azonosítóként viselkedik, amire majd hivatkozol.
Controller is global false (vannak globális control valuek amiket nem az engine blueprintben adsz meg, pl idő, de ez nem ilyen úgyhogy false)
Controller name: Na itt kötödik össze a görbe és az engine blueprint control value-ja, tehát akkor beírjuk hogy Ammeter, majd a legördülő menüből kiválasztjuk az előbb létrehozott amperhez tartozó görbét.

Majd ezt a lépést megismételjük az RPM controller name-el, és a hozzá tartozó görbével, és persze ezt is elnevezzük.

És jön a loop (mert az elején beállítottuk, hogy ez egy folyamatos, loopolt hang)
Létrehozunk egy Controlled loop-ot.
Play state: hol játssza le ezt a hangot: Inside (vezetőfülke, utastér), outside(külsőnézet), both(mindenhol)
Sound , értelem szerűen a soundoknál beállított hang azonosítója, nálam Ammeter).
Modifier chain, a fenti hangra alkalmazandó módosító lánc, nálam Ammeter Loops)
Controller name, újra a hangot vezérlő engine blueprintes control value, tehát Ammeter)
Loop condition: lejátszás feltétele: Value in range (intervallum között), Value changing up/down (érték fölfelé/lefelé változik), Value changing (érték változik bármerre).
Activate range start value: az intervallum eleje (nálam 0)
Activate range end value: az intervallum vége (nálam 2300 (ami ugye itt ampert jelent)).
Value is changeing gate time: változó érték utáni hang késleltetés (ha változik valami, akkor csak a beírt másodperc után jelenik meg ez a változás a hangban is).

Majd ezt megcsináljuk az RPM-el is.

Ezzel kész a hangvezérlés, már csak össze kell kötni a mozdonyunkkal.

Ugyan ebben a mappában, létre kell hoznunk még egy proxyt ami semmit nem csinál csak mint egy hálózati proxy :)
Tehát new Sound blueprint. Mivel ez nem egy route editorban választható lerakható hangforrás, semmit sem kell kitölteni, csak a Sound component/ proxy name részbe bepastelni a jobbklikk copy filenamezett audio control fájlunkat amit előbb fejeztünk be, és a type-nál kiválasztani hogy rail vehicle. Ez kész is van, de ennek is copy filename.
Mentés, vissza az engine blueprinthez, megkeressük a container component részt, majd hozzáadunk egy childet, adunk neki valami nevet, szokásos provider/product páros, és az előbb copyzott sound blueprint nevet be ctrl-vzzük a blueprint id-hez. Ezzel összekötöttük a mozdonyt a hangunkkal.
Export, és mehet a próba.

Ez a motorhang, a forgóvázaknak is lehetnek külön hangjai(hasonló módon), ahol más control valuek is elérhetők pl (kanyarban kerekekre ható oldalirányú erők(csikorgáshoz)), és furcsa módon van ehhez külön kinevezett érték, nem kell childrenként hozzáadni: Bogey audio control, és van még coupling audio control is, a csatolási hangokhoz.

 Előző bejegyszésemben: http://hunrailworks.blogspot.com/2010/08/rail-simulator-fejlesztoi-peldafajlok.html
találhatóak az Rs fejlesztői fájlok, kiegészítve az általam dízel elektromos mozdonyhoz hozzáadott motorhangokkal, gyakorlatilag azokkal amit itt leírtam. Nagyon ajánlom megnézni, mert vizuálisan könnyebb :)

Frissítés: -EnableSoundDebugDialogs parancssori indítóparaméter nagyon hasznos. Kiírja az objektumokra melyik milyen hangot ad ki, milyen hangerőn, és az az vezérlő control value milyen értéken van. Egyébként mivel az összes control valuet kírja, a gyári mozdonyoktól el lehet lesni mik használhatóak, de az rw wiki-n is fel van sorolva pár beépített control value (egyébként erre a keretprogramban beállítható controldialog akármi paraméter is jó, de ez szerintem jobb mert ugyan azt tudja, csak még többet is).
Ez a paraméter csak akkor fog érvényesülni, ha nyomsz egy save settingst a keretprogramban (ahol a grafikát kell beállítani, és mented).

2010. augusztus 9., hétfő

Pályaépítési tutorialok

Az RS.com-nál csináltak szép kis youtube videos pályaépítési tutorialokat, bár ezek nincsenek annyira az előtérben. Nagyon jók, mivel bemutatja a dolgokat, talán még angoltudás nélkül is érthetőek.

2010. augusztus 2., hétfő

Railworks ASTER GDEM domborzat

A Railworks hivatalosan csak a 90m-es felbontású SRTM domborzati adatok betöltését támogatja a szerkesztőben, viszont a 9x nagyobb 30m-es felbontású ASTER adatokat is meg lehet etetni vele, egy körülményes konvertálási folyamat után.

minden második kép SRTM, értelem szerűen a többi ASTER (szerintem egyértelműen látható, hogy az ASTER dem-et használva, jóval lágyabbak az ívek és részletesebb a domborzat)
Viszont nem tökéletes az ASTER dem-sem, ugyanis vízfelületeknél anomáliák jelentkeznek (gyak hepehupákat tartalmaz minden helyen ahol a valóságban víz van, így ezt a szerkesztőben kell korrigálni).

A konvertálási folyamat így történhet:
Gyurci73 hozzászólása:
 Namost én a nem freeware Global Mapper programot használtam a konverzióhoz, ami a következőképpen zajlik:
- Global Mapper elindít
- File menü / Batch Convert/Reproject kiválaszt
- Convert From bekérődoboz -> Geotiff kiválaszt
- Convert To bekérődoboz -> BIL 16bit Elevation Samples kiválaszt
- A feljövő ablakban bal oldalt: Add Files -> Geotiff fájl kiválaszt
- ugyanitt a jobb (Destination Files rész):
File Names-nél kiválasztani a Use Source Files Name
alul a görgethető részen megkeresni és bepipálni: Use Big Endian for Elevation
- megnyomni az ok gombot, megvárni míg elkészül
Készen vagyunk, már csak a megfelelő fájlnévre kell átnevezni(HGT) és bemásolni a Railworks megfelelő mappájába!

Ha ez megvan szokásos helyre rakva a HGT fájlokat (rw mappa\DEM\SRTM), szokásos módon a szerkesztőben a T billenytűvel tölthető be a domborzat, persze csak megfelelő route templateval, olyan koordinátákon ami a berakott fájlok által le van fedve.

Route template létrehozása

RW számára emészthető formátumba konvertált ASTER DEM, egész Magyarországról

2010. augusztus 1., vasárnap

Rail Simulator fejlesztői példafájlok

A Rail Simulatorhoz tartozó példafájlok tökéletesek a Railworkshoz is. Tartalmaznak példaépületeket, mozdonyokat, vágányokat, vagonokat, és sokféle objektumot a játékhoz, nyers 3dsmax modellekkel, és eredeti configfájlokkal, amik szabadon tanulmányozhatóak, így egyszerűen lehet megtanulni a dolgokat.

Íme (a Railworks mappába kell kicsomagolni, mivel a tömörített fájl a könyvtárstruktúrát tartalmazza oda kell kerülni a dolgoknak ahová kell. Ezután már lehet is a blueprint editorban gányolni, vagy akár kipróbálni ezeket a fantasztikus színvilágú példaobjektumokat a játékban :D)
(letölthető ez "hivatalos formában is" (nehéz megtalálni), de annak olyan "okos" telepítője van, hogy amíg nincs egy Rail Simulator a gépeden Mk2-es patchel nem hajlandó feltelepülni/kicsomagolni magát (ilyen microsoftra hajazó "én jobban tudom mi kell a felhasználónak mint ő, úgyhogy kuss" típusú telepítő)

Mivel a példafájlokban egy igen fontos dolog maradt le (mozdonyhangok), ezért én kiderítettem hogyan kell ezeket hozzáadni, bekonfigurálni.

Ezt a fájlt szintén az rw főmappába kicsomagolva, felülíródik a dízel-elektromos példa mozdony, az általam hozzáadott hangbeállításokkal, így ezt is lehet tanulmányozni.
Beállítottam egy "motorhangot" és egy generátor "áramzúgós" hangot, amelyek persze a megfelelő értéktől változnak (motor fordulatszám, ampermérő).

2010. július 31., szombat

Crossoverek (vágánykeresztek) sajátosságai RW-ben

Alap vágánytávolság, dupla kereszt
Sajnos a Railworksban, már a Rail Simulatoros idők óta van egy hiba, hogy a vágánykereszteket bizonyos esetekben rosszul rendereli a játék (összecsúszik néhány vezetősín). Bár megígérték hogy javítják, de ki tudja mikor lesz ez? :D
Alap vágánytávolság


Picivel megnövelve a távolságot, az offset tool(5méterre állítva) segítségével, a szimpla keresztnél már minden jó, viszont a dupla keresztnél még nem.
Tíz méteres offsetre állítva, már a dupla kereszt is jó, de lehet hogy kisebb távolsággal is, ki kell tesztelni.

Viszont a szimpla vágánykereszthez alap vágánytávnál is van egy trükk, amivel jó lesz: az összekötő vágányt középen a split tool-al kettévágod, majd weld tool-al összeforrasztod.
Ez megint csak hülyén fog kinézni, de ez nem maradandó. Ahogy újratöltöd az editor/pályát szép és jó lesz.
Ez a trükk sajnos dupla vágánykeresztnél nem lehetséges, ugyanis a kereszteződés közepén nem lehet normálisan szétvágni, így ott marad a nagyobb vágánytávolság, vagy a várás a bug javítására.