Tippek, példatár a BVE-ben használatos
$Rnd és $Sub helyettesítők használatához
Tartalomjegyzék
A pálya mappaneve beírása csak
egyszer
Véletlenszerű hőmérséklet és
légnyomás
Szerelvény elhelyezése véletlenszerű
vágányra
Ugyanolyan típusú mozdony, de a színe
(festése) véletlenszerű
Egy szerelvényben 2 kocsi együttesen
első vagy másodosztályú
Egy szerelvény mozdonnyal, vagy
anélkül
Vegyes vonat véletlenszerű
összeállítással
Véletlenszerű helyen egy
járműobjektum, vagy utasobjektum
Ø A példák a BVE 2.6, BVE 4, és az openBVE programokban is használhatóak. Egyes példák azonban az alkalmazott parancsok miatt csak az openBVE-ben alkalmazhatóak. Ezek külön jelölve vannak. A példákban csak fájlok nevei vannak jelölve, a fájlok elérési útvonala nincs jelölve!
Ø Ügyelni kell arra, hogy a $Sub helyettesítőben használt indexszámok eltérőek legyenek, amikor azokat alkalmazzuk. Lehetőség szerint használjunk különböző értékeket.
Ø Fontos, hogy a helyettesítők használatánál az esetleges indexszámok összehangoltak, egymás mellettiek legyenek, vagy legalább az utolsó számjegyük egymás mellettiek legyenek, mert sok esetben a véletlenszám generálása során egymás melletti számokat kell megadni!
Ø Amennyiben véletlenszerű járműobjektumokat (szerelvényeket) szeretnénk látni a pályánkban, akkor sok esetben fontos, hogy a véletlenszerű választásra meghatározott objektumok azonos hosszúságúak legyenek! Ha ezek az objektumok nem azonos hosszúságúak, akkor a kocsik egymásba toldódva, vagy a kocsik között üres tér jelenhet meg.
$Rnd(Minimum; Maximum)
Ez a helyettesítő egy véletlenszerű számot generál, amely nem kisebb a Minimum értéknél és nem nagyobb a Maximum értéknél.
Minimum: Egy egész
szám, amely a számunkra megfelelő tartomány legkisebb értéke.
Maximum: Egy egész
szám, amely a számunkra megfelelő tartomány legnagyobb értéke.
Ez a helyettesítő
egy véletlenszámot generál a megadott tartományból. Ezeket a route fájlban a
parancsokba lehet írni, ha például olyan objektumot szeretnénk elhelyezni, ami
véletlenszerű legyen, vagy például véletlenszerű helyen jelenjen meg.
|
Példa a $Rnd
helyettesítő használatához: 10$Rnd(3;5)0, Track.FreeObj 0; 1 A példából származó lehetséges variációk: (A szelvényszám harmadik
számjegye 3, 4, vagy 5 lehet). 1030, Track.FreeObj 0; 1 1040, Track.FreeObj 0; 1 1050, Track.FreeObj 0; 1 |
$Sub(Index) = Érték
Index: Egy egész
szám, amely a változó indexszámát jelenti.
Érték: Egy definiált változó.
A használandó Értéket az Indexként definiáltként alkalmazza. Ez olyankor hasznos, ha egy véletlenszám tartományt többször szeretnénk használni.
$Sub(Index)
Index: Egy egész
szám, amely a változó indexszámát jelenti.
Ez helyettesíti az Indexhez rendelt Értéket.
|
Példa az említett
két helyettesítő alkalmazására: $Sub(0) = $Rnd(3;5) Ebben a példában mindhárom Track.Freeobj parancs ugyanazt a
véletlenszám helyettesítést használja, így mindhárom objektum biztosan ugyanazon a vágányon fog
megjelenni. Amennyiben egyénileg kicseréljük mindhárom
sorban a $Sub(0) helyettesítőt a
meghatározott $Rnd(3;5)
helyettesítőre, akkor az is lehetséges, hogy az objektumok más-más vágányon fognak megjelenni. |
$Sub(Index; Érték)
Index: Egy egész
szám, amely a változó indexszámát jelenti.
Érték: Egy definiált változó, az adott Indexhez ezentúl az Értéket rendeli hozzá a program.
Akkor alkalmazzuk,
ha az Indexszámot változatlanul
szeretnénk hagyni, de a hozzárendelt Értéket
meg akarjuk változtatni.
A $Rnd és a $Sub helyettesítők feldolgozása után a route fájlban lévő
kifejezések a szelvényszám szerint
növekvő sorrendbe rendeződnek.
|
Példa részlet egy
route fájlból: 1000, Track.FreeObj 0; 23 A feldolgozás
folyamán a program a $Rnd
helyettesítőt véletlenszerűen a „3”-as számra cseréli: 1000, Track.FreeObj 0; 23 Ezt követően a parancsok szelvényszám szerint növekvő sorrendbe rendeződnek: 1000, Track.FreeObj 0; 23 |
Ø A példákban szereplő alkalmazásoknak lehet több variációja is. Például ha az utolsó számjegy egymás melletti, de maga az egész szám is egymás melletti, akkor több féle alkalmazási mód közül választhatunk:
Például a 392 vagy a 393 véletlenszerű kiválasztásához az alábbiak közül mindegy melyiket alkalmazzuk:
Az első két számjegyet fixen beírjuk és a $Rnd helyettesítőt úgy használjuk, hogy az utolsó számjegyként 2 vagy 3 értéket adjon:
1000, .freeobj 1;39$Rnd(2;3)
Ez egyenértékű azzal, ha ez első számot fixen beírjuk és a $Rnd helyettesítőt úgy használjuk, hogy az utolsó két számjegyre 92 vagy 93 értéket adjon:
1000, .freeobj 1;3$Rnd(92;93)
Ez egyenértékű azzal, ha a $Rnd helyettesítőt úgy használjuk, hogy a teljes objektumszámot írjuk be az értékekbe:
1000, .freeobj 1;$Rnd(392;393)
Ø További lehetőség, hogy többféleképpen alkalmazhatunk olyan lehetőséget, ahol egy adott szakaszon más-más véletlenszerű számot szeretnénk használni:
A példában három darab $Sub helyettesítőt használunk három szakaszra, így szakaszonként azonosak az objektumok:
$Sub(101) = $Rnd(1;3)
$Sub(102) = $Rnd(1;3)
$Sub(103) = $Rnd(1;3)
Ezeket a $Sub helyettesítőket a kívánt szakaszokban (a példában két objektum jelent egy szakaszt) alkalmazzuk külön-külön:
1010, .freeobj
1;39$Sub(101)
1020, .freeobj 1;39$Sub(101)
1030, .freeobj 1;39$Sub(102)
1040, .freeobj 1;39$Sub(102)
1050, .freeobj 1;39$Sub(103)
1060, .freeobj 1;39$Sub(103)
Ez egyenértékű azzal, ha a egy darab $Sub helyettesítőt használunk, de a szakaszok elején ugyanazt az indexszámot használva megváltoztatjuk az értékét:
1010, .freeobj
1;39$Sub(101;$Rnd(1;3))
1020, .freeobj 1;39$Sub(101)
1030, .freeobj 1;39$Sub(101;$Rnd(1;3))
1040, .freeobj 1;39$Sub(101)
1050, .freeobj 1;39$Sub(101;$Rnd(1;3))
1060, .freeobj 1;39$Sub(101)
A pálya elején a $Sub helyettesítővel definiálhatjuk a pályánk mappanevét:
$Sub(0) = az_en_palyam_mappaja
Ezt követően a fájlok betöltéséhez használt parancsoknál a főmappánk neveként elég csak a $Sub(0) szövegrészt használni:
.Freeobj(301) $Sub(0)\jarmuvek\BzMot\BzMot
317\BzMot_317.b3d
.Freeobj(302) $Sub(0)\jarmuvek\m61-017\m61-017.b3d
.Freeobj(303) $Sub(0)\jarmuvek\m61-110\m61-110.b3d
Ez egyenértékű azzal, ha mindig a „az_en_palyam_mappaja” nevet írnánk be főmappaként:
.Freeobj(301)
az_en_palyam_mappaja\jarmuvek\BzMot\BzMot 317\BzMot_317.b3d
.Freeobj(302) az_en_palyam_mappaja\jarmuvek\m61-017\m61-017.b3d
.Freeobj(303) az_en_palyam_mappaja\jarmuvek\m61-110\m61-110.b3d
Előnye, hogy ha később valamilyen okból át akarjuk nevezni a pályánk mappáját, akkor elég csak a definiált helyettesítőnél átírni a hivatkozott mappa nevét, és nem kell az összes objektumnál. Természetesen ezt követően a pályánk csak úgy működik, ha valóban meg is változtatjuk a mappa nevét.
Ez a példa csak az openBVE-ben alkalmazható.
Az openBVE-ben lehetőség van többek között a hőmérséklet és légnyomás beállítására is. Mivel ez a valóságban jellemzően mindig más, a játékban is életszerűbb ha nem mindig azonos. A $Rnd helyettesítővel lehetőség van véletlenszerűen beállítani ezeket az adatokat.
A következő példa beírásával minden játék során a hőmérséklet 19.00 és 27.99 fok között változhat véletlenszerűen. (ügyeljünk a pontra az egész szám és a tizedesjegy között)
Route.Temperature $Rnd(19;27).$Rnd(0;99)
A következő példa beírásával minden játék során a légnyomás 100.000 és 102.999 kPa között változhat véletlenszerűen. (ügyeljünk a pontra az egész szám és a tizedesjegy között)
Route.Pressure 10$Rnd(0;2).$Rnd(0;999)
Ebben a példában egy
akárhány kocsis szerelvényt véletlenszerű vágányra tehetünk. Minden
játék során a szerelvény más-más vágányon lehet.
A példához definiálunk
objektumként egy Bzmot objektumot:
.Freeobj(301) BzMot_317.b3d
Ezt ha kétszer
elhelyezzük a pályában egymás mögött a megfelelő távolságban, akkor két
Bzmot-ból álló szerelvényünk lesz:
133, .freeobj 2;301
147, .freeobj 2;301
Definiáljunk egy $Sub helyettesítőt, amelyhez egy $Rnd helyettesítőt rendelünk, ekkor a $Sub megtartja azt a számot, amit a gép
véletlenszerűen kiválasztott:
$Sub(1) =
$Rnd(2;3)
a vágány indexszámába
helyezzük a Sub parancsot
így a Bz szerelvény mindkét
kocsija biztosan együtt áll a 2-es vagy a 3-as vágányon
133, .freeobj
$Sub(1);301
147, .freeobj $Sub(1);301
---------------------------------------------------------------
Ha külön tennék be a $Rnd parancsot $Sub nélkül?
133, .freeobj
$Rnd(2;3);301
147, .freeobj $Rnd(2;3);301
Így nem biztos hogy a két kocsi ugyanazon a vágányon lesz,
mert lehet hogy az egyik kocsi a 2-es, a másik a 3-as vágányra fog kerülni, ha épp
úgy "sorsol" a gép.
Ebben a példában
fontos, hogy a két mozdony azonos hosszúságú legyen, ha a mozdony mögött kocsik
is vannak!
Van két, különböző színű M61-es mozdonyunk, 302-es és 303-as indexszámmal.
.Freeobj(302) m61-017.b3d
.Freeobj(303) m61-110.b3d
Egy $Rnd helyettesítőt az objektum utolsó számjegyeként alkalmazzunk, úgy hogy 2 vagy 3 értéket adjon:
358, .freeobj 1;30$Rnd(2;3)
Ez egyenértékű azzal, ha a $Rnd helyettesítőt úgy használjuk, hogy a teljes objektumszámot írjuk be az értékekbe:
358, .freeobj 1;$Rnd(302;303)
Így minden játék során különböző színű mozdony jelenhet meg.
Ez a példa különböző hosszságú járműveket használ, ezért úgy biztosított a működése, ha a járművek egyedül jelennek meg! Természetesen, ha van két különböző típusú, ugyanolyan hosszú mozdonyunk, akkor a példát arra is felhasználhatjuk, hogy egy szerelvény elején mindig más típusú mozdony jelenjen meg.
Van két jáművünk, az egyik egy Bzmot, a másik egy M61-es, 301-es és 302-es indexszámmal.
.Freeobj(301) BzMot_317.b3d
.Freeobj(302) m61-017.b3d
Egy $Rnd helyettesítőt az objektum utolsó számjegyeként alkalmazzunk, úgy hogy 1 vagy 2 értéket adjon:
358, .freeobj 1;30$Rnd(1;2)
Így minden játék során különböző típusú mozdony jelenhet meg.
Egy olyan szerevényt helyezünk el, ami egy mozdonyból, és 5 kocsiból áll.
Ebből a mozdony mögötti 2 kocsi majd véletlenszerűen
változik. Ebben a példában fontos, hogy
a két kocsitípus azonos hosszúságú legyen!
A példában a mozdony 311-es, az 1. osztályú kocsi (A) 321-es, a 2. osztályú kocsi (B) 322-es indexszámon szerepel.
Az 1. osztályú kocsi
és a 2. osztályú kocsi is 24,5 méter! (egyenlő hosszúak)
.Freeobj(311) V43-3280.b3d
.Freeobj(321) A.b3d
.Freeobj(322) B.b3d
Helyezzünk el egy szerelvényt 5 darab 2. osztályú kocsival, a szerelvény a saját vonatunkkal párhuzamosan áll, azaz előbb az 5 kocsit, majd a mozdonyt tegyük be:
107,
.freeobj 1;322
131.5, .freeobj 1;322
156, freeobj 1;322
180.5, .freeobj 1;322
205, .freeobj 1;322
;mozdony
237.1, .freeobj 1;311
Azt szeretnénk, hogy a szerelvény mozdony mögötti 2 kocsija együttesen lehessen 1. osztályú kocsi is.
Ehhez definiáljunk egy $Sub helyettesítőt, amihez egy $Rnd helyettesítőt alkalmazunk, úgy hogy 1 és 2 értéket adjon.
$Sub(2) = $Rnd(1;2)
A mozdony mögötti két kocsinál az indexszám utolsó számjegyét cseréljük ki a definiált $Sub helyettesítőnkre:
107,
.freeobj 1;322
131.5, .freeobj 1;322
156, freeobj 1;322
;---------------------------------------
;első két kocsi első vagy másodosztályú
$Sub(2) = $Rnd(1;2)
180.5, .freeobj 1;32$Sub(2)
205, .freeobj 1;32$Sub(2)
237.1, .freeobj 1;311
Így minden játék alkalmával vagy olyan szerelvényt kapunk, amelynek
Ø mind az 5 kocsija 2. osztályú
vagy olyat, amelynek a
Ø mozdony mögötti két kocsija 1. osztályú, a másik három kocsi pedig 2. osztályú.
Az előbbi példához kapcsolódan olyan lehetőséget is készíthetünk, hogy a szerelvény elején vagy van mozdony vagy nincs. Ehhez először készítsünk egy üres objektumot, amiben nincsen semmi.
Ezt a fájlt nevezzük el „ures.b3d” –nek. A b3d fájl tartalma:
[MeshBuilder]
Vertex 0,0,0
Vertex 0,0,0
Vertex 0,0,0
Vertex 0,0,0
A route fájlban 312-es indexszámú objektumként definiáljuk be ezt az üres objektumot:
.Freeobj(312) ures.b3d
Az előbbi példában így nézett ki a szerelvényünk:
107,
.freeobj 1;322
131.5, .freeobj 1;322
156, .freeobj 1;322
;---------------------------------------
;első két kocsi első vagy másodosztályú
$Sub(2) = $Rnd(1;2)
180.5, .freeobj 1;32$Sub(2)
205, .freeobj 1;32$Sub(2)
237.1, .freeobj 1;311
A végén a mozdony objektumszámába illeszünk be egy $Rnd helyettesítőt, amely 1 vagy 2 értéket adjon vissza:
237.1, .freeobj 1;31$Rnd(1;2)
Így a variációk száma annyival bővült, hogy a szerelvény elején elképzelhető, hogy nem fogunk mozdonyt látni.
A példában a szerelvény 3 szakaszra van osztva, és az egyes szakaszokon véletlenszerűen rakomány fog megjelenni.
Ebben a példában
fontos, hogy a kocsik azonos hosszúságúak legyenek!
Objektumként definálva vannak az Es teherkocsik, szén rakománnyal, fa rakománnyal vagy üresen, és egy mozdony 311-es indexszámmal:
.Freeobj(351) es_fa.b3d
.Freeobj(352) es_szen.b3d
.Freeobj(353) es_ures.b3d
.Freeobj(311) V43-3280.b3d
Alkalmazás a route fájlban:
Mozdony elhelyezése:
;a mozdony
4298.45, .freeobj 2;311
A parancsokat úgy írjuk be, hogy az objektum indexének utolsó számjegyét a gép véletlenszerűen válassza ki. Definiálunk egy $Sub helyettesítőt, és hozzárendeljük azt, hogy a gép véletlenszerűen 1 és 3 közötti számot adjon. (a 351, 352, 353 számú objektumat teheti be a gép, attól függően hogy hogyan "sorsol")
A szerelvény kocsijait osszuk el három „szakaszra” például 3-5-2 arányban:
Első szakasz:
A szelvényszámok azért 10 méter különbséggel vannak, mert az Es kocsik 10 méter hosszúak, a mozdony meg ehhez igazodik, ott azért tizedesjegyű a szelvényszám.
4306, .freeobj 2;35$Sub(101;$Rnd(1;3))
4316, .freeobj 2;35$Sub(101)
4326, .freeobj 2;35$Sub(101)
Az első szakasz utáni első kocsinál ugyanezt a $Sub indexszámot használva újra véletlenszerű számot kérünk a géptől, majd csak a $Sub helyettesítőt használjuk a szakasz végéig:
4336, .freeobj 2;35$Sub(101;$Rnd(1;3))
4346, .freeobj 2;35$Sub(101)
4356, .freeobj 2;35$Sub(101)
4366, .freeobj 2;35$Sub(101)
4376, .freeobj 2;35$Sub(101)
A második szakasz utáni első kocsinál ugyanezt a $Sub indexszámot használva ismét véletlenszerű számot kérünk a géptől, majd csak a $Sub helyettesítőt használjuk a szakasz végéig:
4386, .freeobj 2;35$Sub(101;$Rnd(1;3))
4396, .freeobj 2;35$Sub(101)
Vagyis a fent említett 3 Es teherkocsiból képzünk különböző összeállítású szerelvényeket, és mivel a folyamat során háromszor kértünk véletlenszámot, így az egyes szakaszon más rakomány jelenhet meg.
így a következő 27 féle (három a harmadikon) kocsiösszeállítású
vonatot kaphatunk:
|
10 fa |
3 fa 7 szén |
3 fa 5 üres 2 fa |
Ez a példa úgy is működik, ha három különböző $Sub helyettesítőt használunk az egyes szakaszokra.
Minden játék során változhat a szerelvény összeállítása. Ha
mindezt kombináljuk azzal, hogy esetlegesen két különböző vágányon is megjelenhet, akkor minden játék betöltésekor 54
féle végeredményt kaphatunk.
Egy önállóan álló járművet a pályán mindig más helyen szeretnénk látni. Ez a példa csak abban az esetben működik, ha egy darab járműobjektumról van szó. Ehhez egy $Rnd helyettesítőt használhatunk a szelvényszámban, és így mondjuk 100 méter különséggel jelenhet meg az adott járműobjektum:
$Rnd(7;8)86, .freeobj 2;351
Így a járműobjektum vagy a 786-os vagy a 886-os szelvényszámnál fog megjelenni.
A példát arra is használhatjuk, hogy az utasok megjelenítésére használt objektum mindig más helyen jelenjen meg.
A pályában lehetőség szerint mindig más órában szeretnénk
játszani, például 8 óra és 16 óra között valamelyik órában. Ez a példa csak abban az esetben működik,
ha a pálya 1 órán belül lejátszható.
Definiáljunk egy $Sub helyettesítőt, amely 8 és 16 közötti számot adhat.
$Sub(200) = $Rnd(8;16)
Fontos, hogy a játék kezdete az egész óránál ne legyen kisebb, például „01 perc”, és az érkezési időpont az egész óránál ne legyen nagyobb, például „59 perc”. Az állomások parancsaiban az érkezési és indulási idő órájának számjegyeit cseréljük ki a definiált $Sub helyettesítőnkre:
150, .Sta állomás 01; $Sub(200).0030;$Sub(200).0100;
; 1; 1; ; ; 30; 110
2600, .Sta állomás 02; $Sub(200).0400;$Sub(200).0500; ; 1; 1; ; ; 30; 130
4200, .Sta állomás 03; $Sub(200).0800;$Sub(200).0900; ; 1; 1; ; ; 30; 150
6400, .Sta állomás 04; $Sub(200).1200;$Sub(200).1300; ; 1; 1; ; ; 30; 155
8300, .Sta állomás 05; $Sub(200).1600;$Sub(200).1700; ; 1; 1; ; ; 30; 140
10600, .Sta állomás 06; $Sub(200).2000;$Sub(200).2100; ; 1; 1; ; ; 30; 145
11900, .Sta állomás 07; $Sub(200).2300;$Sub(200).2400; ; 1; 1; ; ; 30; 120
15000, .Sta állomás 08; $Sub(200).2800;$Sub(200).2900; ; 1; 1; ; ; 30; 100
Így minden játék során véletlenszerűen más órában játszhatunk.
Amennyiben a pálya nem játszható le 1 órán belül, akkor nem biztosítható, hogy a következő órához megfelelő menetrendi időpontot határozzon meg a program.
Az állomások parancsaiban lehetőség van beállítani az utasmennyiséget. Ezt a Track.Sta parancs 10. paraméterében tehetjük meg:
150, .Sta állomás 01;10.0030;10.0100; ; 1; 1; ; ;
30; 110
2600, .Sta állomás 02;10.0400;10.0500; ; 1; 1; ; ; 30; 130
4200, .Sta állomás 03;10.0800;10.0900; ; 1; 1; ; ; 30; 150
6400, .Sta állomás 04;10.1200;10.1300; ; 1; 1; ; ; 30; 130
Ha azt szeretnénk, hogy minden állomáson változó legyen a vonaton tartózkodó utasmennyiség, akkor akár minden egyes állomás parancsában $Rnd helyettesítőt alkalmazhatunk:
150, .Sta állomás 01;10.0030;10.0100; ; 1; 1; ; ;
30; $Rnd(100;120)
2600, .Sta állomás 02;10.0400;10.0500; ; 1; 1; ; ; 30; $Rnd(118;137)
4200, .Sta állomás 03;10.0800;10.0900; ; 1; 1; ; ; 30; $Rnd(123;152)
6400, .Sta állomás 04;10.1200;10.1300; ; 1; 1; ; ; 30; $Rnd(115;141)
Így minden játék során változó zsúfoltságú vonatunk lesz.
© 2009