Stanica s nástupištami a podporou prepravy pasažierov


V tomto tútoriale sa vám zjednodušene pokúsim ukázať ako si spraviť staničnú budovu s dvoma nástupišťami podporujúcimi prepravu pasažierov  a s niekoľko koľají naviac  Jednoducho celú kompletnú stanicu.
Stavba väčšieho celku má svôj význam, pretože obvikle jeden aj keď čo do polygónov rozsiahlý objekt v podstate hru a počítač zaťaží menej ako tá istá scéna poskladaná z viacej objektov. Preto je často lepšie postaviť si staničný areál ako jeden objekt. Je mi jasné, že nie každý má svoje vlastné všetky potrebné objekty a preto to nieje vždy možné, ale možno vás práve tieto riadky inšpirujú ešte k rozsiahlejšiemu stavaniu si vlastných objektov čo som si aj dal ako cieľ tejto stránky.
Nebudem popisovať ako stavať budovu, lampu, nakladaciu rampu,  trakčné vedenie, či perón stanice, lebo potrebné informácie nájdete popísané v iných mojich tútorialoch o stavbe objektov. Zameriam sa hlavne na stavbu samotných nástupíšť s podporou prepravy pasažierov. Náš cieľ bude ako celok vyzerať asi nejako nasledovne, pričom všetky objekty budú v jednej scéne - exportovanom objekte.




Pre tvorbu koľajníc hlavne ak chcem vytvoriť zložitejšiu štruktúru napríklad celej stanice aj s budovami a objektmi okolia sa mi dobre osvedčila pomôcka kde si vytvorím plane budúcich koľajníc, otextúrujem nejakou textúrou koľajníc a umiestňujem tak ako budú viesť budúce koľajnice. Mnohé veci si dokážem takto lepšie predstaviť a často to je i presnejšie.



Preto ako prvé ak chcete by ste si mali vytvoriť nejakú pomocnú orientačnú plochu koľajníc ktorú budete neskôr importovať do každého súboru. Je totiž vhodné ak staviate väčšie komplexy stavať tak, že si vytvoríte pomocný pôdoris, napríklad spomenuté zjednodušené koľajište a s ním ako vodítkom pracujete a modelujete vo viacerých gmax (3dmax) súboroch, pričom v každom vám určuje presnú orientaciu a umiestňovanie objektov.  V každom súbore budete modelovať iba určitú časť. Napríklad v jednom staničnú budovu a okolite objekty, v druhej kompletné trakčné vedenie, v tretej niektoré ďalšie objekty a povedzme v štvrtej samotné koľajnice a nástupištia. Nakoniec celú scénu poskladate a vyexportujete ako jeden objekt samozrejme už bez tohoto pomocného koľajiska. Práca je prehľadnejšia a hlavne u slabšieho počítača tak nezaťaží váš procesor. Ak totiž nemáte prave najnovší HW  môže sa vám stať,  že  pri väčšej scéne sa vám výrazne spomalý reakcia a to dosť zťaží prácu. Je tu však nutná presnosť a pevné a hľavne rovnaké, teda všade na rovnakých XY koordinátoch umiestnené orientačné body.

Preskočím teda modelovanie stanice a vôbec objektov a pôjdem rovno na modelovanie nástupíšť a koľajníc v samostatnom súbore.
Ako prvé si teda vytvoríme jedno plane o šírke 1.5m (pre úzke nástupište) a dĺžke 100m (bez aspoň jedného aj inak nefunkčného, alebo neviditeľného polygonu nieje možné exportovať objekt do TRS). To umiestnime do pozície X= 2,6, Y=0  a Z=0,1. Pomenujeme ho ako perón 1 a bude to naše prvé nástupište.




Pridelíme mu bitmapu ako textúru (stačí jednofarebná textúra s textom popisujúcim dĺžku, šírku a výšku nášho nástupišťa) a otextúrujeme ho pomocou  MODIFIERS - UV COORDINATES - UVW MAP - PLANAR.
Teraz si vytvoríme klon a ten posunieme o šírku koľaje teda 4m doprava. Tak dostaneme naše druhé nástupište ktoré pomenujeme napríklad perón 2. Samozrejme tento posun je určený vzdialenosťou ktorú chceme mať medzi jednotlivými koľajami, nástupišťami a je určený aj nielen šírkou perónov, ale aj tým či koľaje budú vedľa seba, proti sebe a vôbec tvarom stanice a koľají. Preto tieto čísla berte aj ako orientačné a iba pre tento konkrétny prípad. Tieto plane totiž budú neskôr určovať kam budeme v editori ťahať naše splyne nástupištia. Plochu bude vidno čo nám pomôže lepšie v editori prirovnať nástupište do predpokladanej pozície a preto musí mať šírku predpokladaného splyne nástupištia ktoré ju bude zakrývať a nesmie byť vyššie ako 0,1m nad povrchom. Je samozrejme možné spraviť aj celkom neviditeľné nástupište inakším texturovaním double textúrou, alebo plným alfa kanálom, ale osobne uprednostňujem takéto nástupištia lebo sa s nimi lepšie pracuje ak s nástupišťom ktoré má iba koľajnicu.
Teraz si prepneme na HELPERS na POINT a medzi nástupištia položíme pomocné body budúcich koľajníc. Položíme ich tak ako na obrázku vo vzdialenosti +2m vľavo od perónu, a na výške 0 (prípadne podľa potrieb) pričom na okrajoch budú vždy dva a jeden asi v jednej tretine vzdialenosti (neskôr popíšem prečo). Body označíme zdola nahor ako a.track0a, a.track0b, a.track0c, a.track0d a a.track0e.




Všetky body musia byť v rovine čo do osy X pretože určujú budúci priebeh kadiaľ povedie koľaj pričom krajné zároveň určujú hranice nástupišťa a spolu s ostatnými trigger. Ak by neboli v rovine koľaj by nebola rovná. Môže to ale byť aj úmyselné ak napríklad chcete postaviť nástupište do oblúka.
Teraz si vytvoríme rovnaké body pre druhý perón. Pre jednoduchosť je najlepšie všetky vytvorené označiť, vyklonovať,  posunúť a premenovať na a.track1a, a.track1b, a.track1c, a.track1d a a.track1e. To samé zopakujeme ešte raz pre tretiu koľaj ktorá ale už nebude nástupišťom, ale iba bežnou koľajou. Tu nám stačia iba dva krajné body označené ako track2a, a.track2b. Môžeme samozrejme vytvoriť i viac nástupíšť či viac samostatných koľajníc.





Keď máme hotové samotné koľaje a peróny pristúpime k asi najpracnejšej veci a to vytvoreniu pomocných bodov na ktorých sa nám budú zobrazovať nastupujúci a vystupujúci pasažieri. Ich počet určuje počet aký chceme mať na stanici a ktorý je zároveň aj ako maximálna hodnota v ponuke nastavenia stanice potom v editori.. Čím väčšia stanica s čím väčšou prevádzkou požaduje logicky aj viac pasažierova teda aj bodov ako malá provinčná stanička. Ich počet obvykle určuje dĺžka koľaje a šírka perónu. Predpokladám však ale že aj väčší počet je aj väčší nárok na jadro aj keď to nemám overené. Nesmie sa zabudnúť že musia byť dva druhy - zjednodušene povedané nastupujúci a vystupujúci pričom obvykle je vystupujúcich menej. V našom prípade to bude 80 ku 52 čo bežný štandard na 100 - metrovú koľaj stredne veľkej až veľkej stanice. Takže si takto vytvoríme príslušný počet pomocných bodov nad perónom vo výške 0.6m čo značí že sa bude jednať o perón 0.6m vysoký - pasažieri sa budú zobrazovať 0.6m nad povrchom - a každého natočíme tak aby sme nemali všetkých v jednom smere. Ich natáčanie bude určovať kam budú zobrazujúci sa pasažieri otočený.  Dbajte teda na správne natočenie a tiež aby ste pasažierov neumiestňovali mimo predpokladaného budúceho perónu, teda do vzduchu. Výsledkom bude jež z ktorého môžete spraviť klon a preniesť na vedľajšie nástupište, alebo rovnako vytvoriť znova každý bod.




Body označíme povedzme ako a.passon01 až a.passon80 a a.passoff01 až a.passoff52 pre jedno nástupište a povedzme ako a.passon101 až a.passon180 a a.passoff101 až a.passoff152 pre druhé nástupište. Tým máme samotné nástupištia pre podporu pasažierov čo do modelovania vlastne hotové.
Teraz môžeme dotvoriť ostanú časť stanice,  pospáť všetký scény do jednéj kompletnej scény,  pokiaľ však takto nevznikne príliš obrovský objekt a kedy je lepšie exportovať a definovať viac im súborov. Pritom treba pred exportom odmazať všetky nepotrebné pomocné objekt.




Pristúpime teraz k tvorbe config.txt v ktorom musíme definovať okrem iného všetky pomocné body ktoré sme vytvorili. Config v našom prípade bude vlastne z viac časti.
Prvá je všeobecná časť.

kuid                           <kuid:XXXXXX:XXXXXX>
region                         "NASTUPISTIA"
type                            "Kompletne stanice"
kind                            "industry"
light                            1
nightmode                   "lamp"
icon-texture                "ico_stanica.bmp"
script                          "Station"
class                           "Station"
username                    "Rusovce"

Kde icon-texture definuje ľubovolnú bitmapu 64x64 pixelov ikony zobrazujúcej sa v hre v cestovnom poriadku. Parameter script nám určuje názov scriptu v ktorom su potrebné definície aby nám vlak vôbec zastavil a nabral pasažierov, čo zároveň určuje ako sa vlak bude chovať. Ostatne parametre sú vám predpokladám známe

Druhá časť je časť kde deklarujeme implementované externe kuid - pasažierov - a mesh teda exportovaný im súbor. Viac nájdete v CCG.

kuid-table {
    passenger                    <kuid:-3:10060>
}
mesh-table {
    default {
        mesh                    "stanica.im"
        auto-create                1
        }
}

Tretia časť configu  definuje použité koľaje. Všimnite si zhodu našich pomocných bodov z gmax, označenie a pomenovanie jednotlivých koľajníc.

attached-track {
    track_0 {
        track                    <kuid:-1:15>
        vertices {
            0                "a.track0a"
            1                "a.track0b"
            2                "a.track0c"
            3                "a.track0d"
            4                "a.track0e"
            5                "a.track0f"
            6                "a.track0g"
        }
    }
    track_1 {
        track                    <kuid:-1:15>
        vertices {
            0                "a.track1a"
            1                "a.track1b"
            2                "a.track1c"
            3                "a.track1d"
            4                "a.track1e"
            5                "a.track1f"
            6                "a.track1g"
            7                "a.track1h"
            8                "a.track1i"
            9                "a.track1j"
        }
    }

    track_2 {
        track                    <kuid:-1:15>
        vertices {
            0                "a.track2a"
            1                "a.track2b"
            2                "a.track2c"
            3                "a.track2d"
            4                "a.track2e"
            5                "a.track2f"
            6                "a.track2g"
        }
    }
    track_3 {
        track                    <kuid:-1:15>
        vertices {
            0                "a.track3a"
            1                "a.track3b"
            2                "a.track3c"
            3                "a.track3d"
            4                "a.track3e"
            5                "a.track3f"
        }
    }
    track_4 {
        track                    <kuid:-1:15>
        vertices {
            0                "a.track4a"
            1                "a.track4b"
            2                "a.track4c"
            3                "a.track4d"
            4                "a.track4e"
            5                "a.track4f"
        }
    }
    track_5 {
        track                    <kuid:-1:15>
        vertices {
            0                "a.track5a"
            1                "a.track5b"
            2                "a.track5c"
            3                "a.track5d"
            4                "a.track5e"
            5                "a.track5f"
        }
    }
    track_6 {
        track                    <kuid:-1:15>
        vertices {
            0                "a.track6a"
            1                "a.track6b"
            2                "a.track6c"
            3                "a.track6d"
            4                "a.track6e"
            5                "a.track6f"
        }
    }
    track_7 {
        track                    <kuid:-1:15>
        vertices {
            0                "a.track7a"
            1                "a.track7b"
            2                "a.track7c"
            3                "a.track7d"
            4                "a.track7e"
            5                "a.track7f"
        }
    }
    track_8 {
        track                    <kuid:-1:15>
        vertices {
            0                "a.track8a"
            1                "a.track8b"
            2                "a.track8c"
            3                "a.track8d"
            4                "a.track8e"
            5                "a.track8f"
        }
    }
    track_9 {
        track                    <kuid:-1:15>
        vertices {
            0                "a.track9a"
            1                "a.track9b"
            2                "a.track9c"
            3                "a.track9d"
            4                "a.track9e"
            5                "a.track9f"
        }
    }
    track_10 {
        track                    <kuid:-1:15>
        vertices {
            0                "a.track10a"
            1                "a.track10b"
            2                "a.track10c"
            3                "a.track10d"
            4                "a.track10e"
            5                "a.track10f"
        }
    }
    track_11 {
        track                    <kuid:-1:15>
        vertices {
            0                "a.track11a"
            1                "a.track11b"
            2                "a.track11c"
            3                "a.track11d"
        }
    }
    track_12 {
        track                    <kuid:-1:15>
        vertices {
            0                "a.track12a"
            1                "a.track12b"
            2                "a.track12c"
            3                "a.track12d"
        }
    }
}

Pomenovanie track_0, track_1, track_2, ...  nám určuje o ktorú koľaj ide. Parameter track nám určuje typ prvotne zobrazenej koľaje (zmení sa na tú ktorú k nej potom v editori pripojíte). Verticles potom definuje postupne body príslušnej koľaje od prvého po posledný. Pritom začiatok samotného  nástupišťa nemusí definovať hneď prvý bod ale povedzme až tretí čo popíšem neskôr. Prvý bod je absolútne prvý bod koľajnice na ktorú neskôr v editori pripojíme normálnu koľaj.  Ak nechcete abzy sa vami definovaná koľaj menila po pripojení koľaje v editore pridajte tag useadjoiningtracktype 0.

Ďalšou časťou je definícia trigra ktorý určuje ako sa daná stanica a vlak bude chovať. Doporučujem si prečítať CCG pretože toho je viac čo s ním má spoločné a čo by ste mali vedieť.


attached-trigger {
    trigger_track_0_a {
        att                    "a.track0a"
        radius                    5
        track                    "track_0"
    }
    trigger_track_0_b {
        att                    "a.track0b"
        radius                    27
        track                    "track_0"
    }
    trigger_track_0_c {
        att                    "a.track0c"
        radius                    27
        track                    "track_0"
    }
    trigger_track_0_d {
        att                    "a.track0d"
        radius                    27
        track                    "track_0"
    }
    trigger_track_0_e {
        att                    "a.track0e"
        radius                    5
        track                    "track_0"
    }
    trigger_track_1_a {
        att                    "a.track1c"
        radius                    5
        track                    "track_1"
    }
    trigger_track_1_b {
        att                    "a.track1d"
        radius                    27
        track                    "track_1"
    }
    trigger_track_1_c {
        att                    "a.track1e"
        radius                    27
        track                    "track_1"
    }
    trigger_track_1_d {
        att                    "a.track1f"
        radius                    27
        track                    "track_1"
    }
    trigger_track_1_e {
        att                    "a.track1g"
        radius                    5
        track                    "track_1"
    }
}

V princípe si treba všimnúť označenie bodov a porovnať ho s umiestnením v gmaxe. Určuje to akýsi okruh pôsobenia či ako to zjednodušene nazvať na základe ktorého sa mení chovanie a reaguje AI. Preto sme ak si spomeniete ten jeden bod dali do tej jednej tretiny v smere kadiaľ pôjde vlak. Parameter att určuje názov bodu, radius polomer pôsobenia a track definuje koľaj. Každý triger musí mať rôzne pomenovanie a toto musí byť zhodne v označení scriptu ku ktorému prídeme neskôr. Tieto definované body však určujú hranice samotného nástupišťa. To značí, že koľaj môže začať bodom a.track1a, ďalší môže byť a.track1b, ale až bod a.track1c je prvý deklarovaný v tejto časti a teda určuje že až od neho začína samotné nástupište. To samé na opačnom konci. Tak vlastne môžete postaviť koľaj 300m dlhú, ale iba 50m z nej bude tvoriť samotné nástupište. Má to zmysel ak tvoríte kompletnú stanicu a nie iba samotné nástupištia kedy to je bezpredmetné.

Ďalšou časťou je definícia samotných bodov pasažierov.


queues {
    passengers_on_0 {
        passenger-queue 1
        size                    80
        initial-count                8
        product-kuid                <kuid:-3:10060>
        attachment-points {
            0 a.passon01
            1 a.passon02
            2 a.passon03
            3 a.passon04
            4 a.passon05
            5 a.passon06
            6 a.passon07
            7 a.passon08
            8 a.passon09
            9 a.passon10
            10 a.passon11
            11 a.passon12
            12 a.passon13
            13 a.passon14
            14 a.passon15
            15 a.passon16
            16 a.passon17
            17 a.passon18
            18 a.passon19
            19 a.passon20
            20 a.passon21
            21 a.passon22
            22 a.passon23
            23 a.passon24
            24 a.passon25
            25 a.passon26
            26 a.passon27
            27 a.passon28
            28 a.passon29
            29 a.passon30
            30 a.passon31
            31 a.passon32
            32 a.passon33
            33 a.passon34
            34 a.passon35
            35 a.passon36
            36 a.passon37
            37 a.passon38
            38 a.passon39
            39 a.passon40
            40 a.passon41
            41 a.passon42
            42 a.passon43
            43 a.passon44
            44 a.passon45
            45 a.passon46
            46 a.passon47
            47 a.passon48
            48 a.passon49
            49 a.passon50
            50 a.passon51
            51 a.passon52
            52 a.passon53
            53 a.passon54
            54 a.passon55
            55 a.passon56
            56 a.passon57
            57 a.passon58
            58 a.passon59
            59 a.passon60
            60 a.passon61
            61 a.passon62
            62 a.passon63
            63 a.passon64
            64 a.passon65
            65 a.passon66
            66 a.passon67
            67 a.passon68
            68 a.passon69
            69 a.passon70
            70 a.passon71
            71 a.passon72
            72 a.passon73
            73 a.passon74
            74 a.passon75
            75 a.passon76
            76 a.passon77
            77 a.passon78
            78 a.passon79
            79 a.passon80
        }
    }
    passengers_off_0 {
        passenger-queue 1
        size                    52
        initial-count                0
        product-kuid                <kuid:-3:10060>
        attachment-points {
            0 a.passoff01
            1 a.passoff02
            2 a.passoff03
            3 a.passoff04
            4 a.passoff05
            5 a.passoff06
            6 a.passoff07
            7 a.passoff08
            8 a.passoff09
            9 a.passoff10
            10 a.passoff11
            11 a.passoff12
            12 a.passoff13
            13 a.passoff14
            14 a.passoff15
            15 a.passoff16
            16 a.passoff17
            17 a.passoff18
            18 a.passoff19
            19 a.passoff20
            20 a.passoff21
            21 a.passoff22
            22 a.passoff23
            23 a.passoff24
            24 a.passoff25
            25 a.passoff26
            26 a.passoff27
            27 a.passoff28
            28 a.passoff29
            29 a.passoff30
            30 a.passoff31
            31 a.passoff32
            32 a.passoff33
            33 a.passoff34
            34 a.passoff35
            35 a.passoff36
            36 a.passoff37
            37 a.passoff38
            38 a.passoff39
            39 a.passoff40
            40 a.passoff41
            41 a.passoff42
            42 a.passoff43
            43 a.passoff44
            44 a.passoff45
            45 a.passoff46
            46 a.passoff47
            47 a.passoff48
            48 a.passoff49
            49 a.passoff50
            50 a.passoff51
            51 a.passoff52
        }
    }

    passengers_on_1 {
        passenger-queue 1
        size                    80
        initial-count                8
        product-kuid                <kuid:-3:10060>
        attachment-points {
            0 a.passon101
            1 a.passon102
            2 a.passon103
            3 a.passon104
            4 a.passon105
            5 a.passon106
            6 a.passon107
            7 a.passon108
            8 a.passon109
            9 a.passon110
            10 a.passon111
            11 a.passon112
            12 a.passon113
            13 a.passon114
            14 a.passon115
            15 a.passon116
            16 a.passon117
            17 a.passon118
            18 a.passon119
            19 a.passon120
            20 a.passon121
            21 a.passon122
            22 a.passon123
            23 a.passon124
            24 a.passon125
            25 a.passon126
            26 a.passon127
            27 a.passon128
            28 a.passon129
            29 a.passon130
            30 a.passon131
            31 a.passon132
            32 a.passon133
            33 a.passon134
            34 a.passon135
            35 a.passon136
            36 a.passon137
            37 a.passon138
            38 a.passon139
            39 a.passon140
            40 a.passon141
            41 a.passon142
            42 a.passon143
            43 a.passon144
            44 a.passon145
            45 a.passon146
            46 a.passon147
            47 a.passon148
            48 a.passon149
            49 a.passon150
            50 a.passon151
            51 a.passon152
            52 a.passon153
            53 a.passon154
            54 a.passon155
            55 a.passon156
            56 a.passon157
            57 a.passon158
            58 a.passon159
            59 a.passon160
            60 a.passon161
            61 a.passon162
            62 a.passon163
            63 a.passon164
            64 a.passon165
            65 a.passon166
            66 a.passon167
            67 a.passon168
            68 a.passon169
            69 a.passon170
            70 a.passon171
            71 a.passon172
            72 a.passon173
            73 a.passon174
            74 a.passon175
            75 a.passon176
            76 a.passon177
            77 a.passon178
            78 a.passon179
            79 a.passon180
        }
    }
    passengers_off_1 {
        passenger-queue 1
        size                    52
        initial-count                0
        product-kuid                <kuid:-3:10060>
        attachment-points {
            0 a.passoff101
            1 a.passoff102
            2 a.passoff103
            3 a.passoff104
            4 a.passoff105
            5 a.passoff106
            6 a.passoff107
            7 a.passoff108
            8 a.passoff109
            9 a.passoff110
            10 a.passoff111
            11 a.passoff112
            12 a.passoff113
            13 a.passoff114
            14 a.passoff115
            15 a.passoff116
            16 a.passoff117
            17 a.passoff118
            18 a.passoff119
            19 a.passoff120
            20 a.passoff121
            21 a.passoff122
            22 a.passoff123
            23 a.passoff124
            24 a.passoff125
            25 a.passoff126
            26 a.passoff127
            27 a.passoff128
            28 a.passoff129
            29 a.passoff130
            30 a.passoff131
            31 a.passof1f32
            32 a.passoff133
            33 a.passoff134
            34 a.passoff135
            35 a.passof136
            36 a.passoff137
            37 a.passoff138
            38 a.passoff139
            39 a.passoff140
            40 a.passoff141
            41 a.passoff142
            42 a.passoff143
            43 a.passoff144
            44 a.passoff145
            45 a.passoff146
            46 a.passoff147
            47 a.passoff148
            48 a.passoff149
            49 a.passoff150
            50 a.passoff151
            51 a.passoff152
        }
    }
}

Aj tu si všimnite zhodu s koľajnicou, resp. perónom a označením bodov ON a OFF a rozdielom v počtoch. Parameter         passenger-queue 1 je aktivátor, size určuje počet, initial-count určuje počiatočný stav (pred definíciou v editore) a product-kuid definuje kuid tovaru keďže sa vlastne jedná o priemysel a aj keď to znie komicky teda tovar.
  
Záver configu tvorí definícia procesov, prípadný pridaný zvuk a samotných nástupíšť pre zobrazenie v editori a definície v scripte. Aj tu si prečítajte CCG pretože aj tu je toho viac čo by bolo treba spomenúť a tento tútorial by sa stal už potom príručkou.


processes {
    passenger_spawn_0 {
        start-enabled                1
        duration                20
        outputs {
            0 {
                amount            1
                queue            "passengers_on_0"
            }
        }
    }
    passenger_delete_0 {
        start-enabled                1
        duration                3
        inputs {
            0 {
                amount            1
                queue            "passengers_off_0"
            }
        }
    }
    passenger_spawn_1 {
        start-enabled                1
        duration                20
        outputs {
            0 {
                amount            1
                queue            "passengers_on_1"
            }
        }
    }
    passenger_delete_1 {
        start-enabled                1
        duration                3
        inputs {
            0 {
                amount            1
                queue            "passengers_off_1"
            }
        }
    }
}
soundscript {
    dayloop {
        repeat-delay                0
        distance                8,130
        sound {
            stanicazvuk01.wav       
        }
    }
}
username-sk                                 "Stanica Rusovce"
string-table {
    brickstation_platform1                "Nastupiste 1"
    brickstation_platform2                "Nastupiste 2"
}
string-table-sk {
    brickstation_platform1                "Nastupiste 1"
    brickstation_platform2                "Nastupiste 2"
}

Este ako doplnok uvádzam že vaše nástupište môžete mať jasne oddelené od okolia ak do configu k nemu pridate zakočovacie  červené šipky ako sú napríklad na fixed track. Musíte ich deklarovať v sekcii MESH-TABLE pod EFFECTS. Pridelujú sa obvilkle krajným bodov vašej definovanej koľaje. Aj tu ako u definovaných fixed track os Y príslušneho bodu, ktorá musí smerovať smerom von z koľaje, určuje takto smer orientacie. Tag surveyor-only 1 zabezpečí že sa atachnutý mesh zobrazí iba v editore.


effects {
         arow0 {
                  kind attachmend
                  track a.track0a
                  default-mesh <KUID:-3:10092>
                  surveyor-only 1
                   }
        arow1 {
                  kind attachmend
                  track a.track0g
                  default-mesh <KUID:-3:10092>
                  surveyor-only 1
                   }
            }


A teraz prichádzame k scriptu. Je to príkazový súbor umiestnený v rovnakom adresáre ako config.txt a deklarovaný v config.txt s vlastným programovacím jazykom s koncovkou gs v ktorom sa dá mnohé naprogramovať. Popísať všetko by bolo príliš zložité keďže sa jedná o programovací jazyk a všetko vlastne nájdete v dokumentácii k TRS.
Princíp je ten, že tu definujete čo a ako sa má chovať pre každú koľaj zvlášť. Zjednodušene by sa to dalo popísať ako ak platí nejaká podmienka tak potom  ....,  pričom sa odvolávate na v configu deklarovaé triggre. Preto si porovnajte označenia triggrov, koľajníc a nástupíšť z configu zhodné s deklaráciami v scripte a hlavne naštudujte čo najviac o štruktúre tohoto jayzka z dokumentácie. V podstate vám stačí často jednoducho si požičať nieči už hotový script (samozrejme s vedomím autora) a ten použiť vo svojom objekte. Ale nieje nič krajšie ako dokázať si ho vytvoriť sám a možno aj na váš objekt naisť lepšie riešenie ako našiel autor objektu ktorý vám bol povedzme inšpiráciou. Na tomto scripte je založených mnoho efektov, ale aj objektov či vám určite dobre známich stavebníc.


include "GenericPassengerStation.gs"
 

class Station isclass GenericPassengerStation
{
 
  bool TriggerSupportsMassStoppedLoad(Vehicle vehicle, string triggerName)
  {
    bool vehicleToTrain = vehicle.GetFacingRelativeToTrain();

    if (triggerName == "trigger_track_0_a" or triggerName == "trigger_track_0_e")
    {
      int direction = vehicle.GetRelationToTrack(me, "track_0");
      if (!vehicleToTrain)
          direction = -direction;

      if (direction == Vehicle.DIRECTION_BACKWARD and triggerName == "trigger_track_0_e")
        return true;
   
      if (direction == Vehicle.DIRECTION_FORWARD and triggerName == "trigger_track_0_a")
        return true;
    }

    if (triggerName == "trigger_track_0_a" or triggerName == "trigger_track_0_b" or triggerName == "trigger_track_0_c" or triggerName == "trigger_track_0_d" or triggerName == "trigger_track_0_e")
    {
      if (vehicle.GetMyTrain().IsStopped())
        return true;
    }

    if (triggerName == "trigger_track_1_a" or triggerName == "trigger_track_1_e")
    {
      int direction = vehicle.GetRelationToTrack(me, "track_1");
      if (!vehicleToTrain)
          direction = -direction;

      if (direction == Vehicle.DIRECTION_BACKWARD and triggerName == "trigger_track_1_e")
        return true;
   
      if (direction == Vehicle.DIRECTION_FORWARD and triggerName == "trigger_track_1_a")
        return true;
    }

    if (triggerName == "trigger_track_1_a" or triggerName == "trigger_track_1_b" or triggerName == "trigger_track_1_c" or triggerName == "trigger_track_1_d" or triggerName == "trigger_track_1_e")
    {
      if (vehicle.GetMyTrain().IsStopped())
        return true;
    }
    return false;
  }


    void GetTrackAndSide(Vehicle vehicle, string triggerName, TrackLoadInfo retInfo)
    {
    if (triggerName == "trigger_track_0_a" or triggerName == "trigger_track_0_b" or triggerName == "trigger_track_0_c" or triggerName == "trigger_track_0_d" or triggerName == "trigger_track_0_e")
    {
      retInfo.trackName = "track_0";
            retInfo.trainLeftSide = ((vehicle.GetRelationToTrack(me, retInfo.trackName) != Vehicle.DIRECTION_FORWARD) == vehicle.GetDirectionRelativeToTrain());
            retInfo.platformIndex = 0;
    }
    if (triggerName == "trigger_track_1_a" or triggerName == "trigger_track_1_b" or triggerName == "trigger_track_1_c" or triggerName == "trigger_track_1_d" or triggerName == "trigger_track_1_e")
    {
      retInfo.trackName = "track_1";
            retInfo.trainLeftSide = ((vehicle.GetRelationToTrack(me, retInfo.trackName) != Vehicle.DIRECTION_FORWARD) == vehicle.GetDirectionRelativeToTrain());
            retInfo.platformIndex = 1;
    }
    }


 public void Init(void) {
  inherited();
  InitPassengerStation(2);
  StationMain();
 }



  public void AppendDriverDestinations(string[] destNames, string[] destTracks)
  {
    StringTable stringTable = GetAsset().GetStringTable();

    destNames[destNames.size()] = stringTable.GetString("rusovce_platform1");
    destTracks[destTracks.size()] = "track_0";

    destNames[destNames.size()] = stringTable.GetString("rusovce_platform2");
    destTracks[destTracks.size()] = "track_1";
  }
   
};



Ak niečomu nebudete rozumieť môžete ma kľudne kontaktovať emailom. Ťažisko však zamerajte na naštudovanie dokumentácie k TRS..

Takto máte vašu stanicu a koľaje s podporou pasažierov hotové a ak ste postupovali správne bude vám aj fungovať. Ak vám hra zahlási chybu hľadajte na prvom mieste nezhodu v pomenovaniach a deklaráciach v config.txt a scripte.