611 lines
15 KiB
Lua
611 lines
15 KiB
Lua
title = "Vlak ve 4:20"
|
|
|
|
--[[
|
|
|
|
NÁPADY:
|
|
|
|
slovesa:
|
|
|
|
- prozkoumej CO
|
|
- použij CO
|
|
- zkontroluj KOHO/CO (na kontrolu jízdenek)
|
|
- vyslechni KOHO (na nezávaznou konverzaci)
|
|
- čekej (může vyvolávat myšlení, TODO - před 4:15 trvá jedno čekání 5 minut)
|
|
|
|
GVD:
|
|
|
|
4.00 začátek hry
|
|
4.10 odjezd rychlíku
|
|
|
|
4.20 Markétov Rybník
|
|
? Markétov Mlýnská
|
|
? Obora
|
|
?
|
|
?
|
|
? Čertův hrádek
|
|
?
|
|
?
|
|
4.53 Zloduška
|
|
|
|
optimalizovat GVD na hraní - zastavení stojí 3 minuty (výstup, případná akce, )
|
|
|
|
* * *
|
|
|
|
- vyprávěno v první osobě s přeskoky do třetí
|
|
- in-character úvod o hrdinech, kteří udržují náš svět v pohybu /+snílni, blázni a spisovatelé)
|
|
- popisy tak na tři věty - první náladu, druhá předměty, třetí východy
|
|
- v inventáři - terminál, kleštičky, píšťalka
|
|
- upozornění ve stylu (Myslím, že je na čase vypravit vlak.)
|
|
|
|
- nekonečný mód?
|
|
|
|
- ve 4 ráno od Mňágy jako inspirace
|
|
-
|
|
- někde bude hrát Timekiller od And One
|
|
|
|
- na nějaké zastávce v lese půjde sbírat houby
|
|
|
|
]]
|
|
|
|
-- TODO - randomp
|
|
-- TODO - počítání zpoždění
|
|
|
|
-- čas:
|
|
vars.hh = 4
|
|
vars.mm = 0
|
|
|
|
vars.vlak_jede = false
|
|
vars.vlak_pozice = 1
|
|
|
|
vars.vypil_kafe = false
|
|
|
|
-- slovesa
|
|
hraj = verb{
|
|
n = "pokračuj",
|
|
act = function()
|
|
wait.always = true -- zapne sloveso čekej
|
|
inv.always = true
|
|
move("vypravka", "me")
|
|
move("cas", "me")
|
|
walk "hala"
|
|
end
|
|
}
|
|
|
|
jdi = verb{
|
|
n = "směr",
|
|
params = {"smer"},
|
|
act = function(kam)
|
|
if game[kam].msg then
|
|
p(game[kam].msg)
|
|
elseif type(game[kam].smer)=="function" then
|
|
game[kam].smer()
|
|
else
|
|
walk(game[kam].smer)
|
|
end
|
|
end
|
|
|
|
}
|
|
|
|
desc = verb{
|
|
n ="prozkoumej",
|
|
params = {"desc"},
|
|
act = function(what)
|
|
-- p("Zkoumáš " .. game[what].n .. ":")
|
|
local description = game[what].desc
|
|
if type(description)=='string' then
|
|
p(description)
|
|
elseif type(description)=='function' then
|
|
description()
|
|
end
|
|
end
|
|
}
|
|
|
|
use = verb{
|
|
n ="použij",
|
|
params = {"use"},
|
|
act = function(what)
|
|
local description = game[what].use
|
|
if type(description)=='string' then
|
|
p(description)
|
|
elseif type(description)=='function' then
|
|
description()
|
|
end
|
|
end
|
|
}
|
|
|
|
check = verb{
|
|
n ="zkontroluj",
|
|
params = {"check"},
|
|
act = function(what)
|
|
local description = game[what].check
|
|
if type(description)=='string' then
|
|
p(description)
|
|
elseif type(description)=='function' then
|
|
description()
|
|
end
|
|
end
|
|
}
|
|
|
|
talkto = verb{
|
|
n ="vyslechni",
|
|
params = {"talkto"},
|
|
act = function(what)
|
|
local description = game[what].talkto
|
|
if type(description)=='string' then
|
|
p(description)
|
|
elseif type(description)=='function' then
|
|
description()
|
|
end
|
|
end
|
|
}
|
|
|
|
wait = verb{
|
|
n ="čekej",
|
|
params = {},
|
|
always = false,
|
|
act = function()
|
|
p "OK. Čekám."
|
|
if vars.vlak_jede and trasa[vars.vlak_pozice] then
|
|
p(trasa[vars.vlak_pozice])
|
|
end
|
|
end
|
|
}
|
|
|
|
inv = verb{
|
|
n = "inventář",
|
|
params = {},
|
|
always = false,
|
|
act = function()
|
|
p "Mám sebou následující předměty:"
|
|
for i,item in ipairs(item_ord) do
|
|
if item.w=="me"and not item.nolist then
|
|
p(item.n)
|
|
end
|
|
end
|
|
end
|
|
}
|
|
|
|
|
|
-- lokace a předměty
|
|
|
|
-- nádražní hala
|
|
|
|
hala = room{
|
|
n = "Nádražní hala",
|
|
d = "Takhle po ránu je docela prázdná. Otevřeno má akorát jedna pokladna a automat na kafe. K nastupištím se chodí podchodem, nad kterým visí odjezdová tabule. První nástupiště (kde je můj vlak) má však vlastní dveře.",
|
|
exits = {
|
|
{"první nástupiště", "nastupiste1"},
|
|
{"podchod", true, "Můj vlak čeká na nástupišti 1a, nemusím chodit podchodem."},
|
|
{"ven", true, "Čeká mě ještě celá směna, teprve jsem přišel."},
|
|
}
|
|
}
|
|
|
|
automat = item{
|
|
n = "automat",
|
|
desc = [[Na boční stěně automatu je fotografie jakési překrásné zrzky.
|
|
Ach, patronko všech cestovatelů, tolik chvil jsme spolu prožili...]],
|
|
use = function()
|
|
if vars.vypil_kafe then
|
|
p "Jedno kafe mi prozatím stačí."
|
|
else
|
|
p "Objednáváš si z automatu kafe. Automat ho s hučením vaří."
|
|
p ""
|
|
p '"Á... Teplý kafe... Přesně tohle jsem potřeboval!"'
|
|
vars.vypil_kafe = true
|
|
-- TODO: kelímek do inventáře?
|
|
end
|
|
end,
|
|
w = "hala"
|
|
}
|
|
|
|
pokladna = item{
|
|
n = "pokladnu",
|
|
desc = "Takhle brzo ráno je otevřená jenom jedna pokladna. Sedí v ní Maruška a lakuje si nehty.",
|
|
use = "Jako nádražák jízdenky nepotřebuju.",
|
|
talkto = [[
|
|
"Tak co, Maruško, jak se vede?" - "Ále znáš to, děti zlobí, manžel chlastá..."
|
|
|
|
Maruška si stěžuje na život, takže je všechno v nejlepším pořádku.
|
|
]],
|
|
w = "hala"
|
|
}
|
|
|
|
bezdomovec = item{
|
|
n = "bezdomovce",
|
|
d = "Na lavičce spí nádražní bezdomovec.",
|
|
desc = "Vypadá dost zbědovaně, asi se mu něco stalo.",
|
|
check = [[
|
|
"Leopolde? Je ti něco?" -
|
|
Leopold ospale mžourá.
|
|
"Ale ne nic, jenom jsem včera trochu přebral..."
|
|
A zase usíná.
|
|
]],
|
|
talkto = "Spí jak zabitej. Nebo... přesněji řečeno... chrápe.",
|
|
w = "hala"
|
|
}
|
|
|
|
tabule = item{
|
|
n = "odjezdovou tabuli",
|
|
desc = function()
|
|
p "Starý poctivý pragotron který ukazuje:"
|
|
p ""
|
|
p("Čas: " .. string.format("%02d:%02d", vars.hh, vars.mm))
|
|
if vars.hh==4 and vars.mm<=10 then
|
|
p "R 263 na nást. 1 ve 4:10"
|
|
end
|
|
if vars.hh==4 and vars.mm<=20 then
|
|
p "Os 320 na nást. 1a ve 4:20"
|
|
end
|
|
end,
|
|
w = "hala"
|
|
}
|
|
|
|
-- první nástupiště
|
|
|
|
nastupiste1 = room{
|
|
n = "První nástupiště",
|
|
d = "Na prvním nástupišti není ani noha.",
|
|
exits = {
|
|
{"zpátky", "hala"},
|
|
{"dál", "nastupiste1a"}
|
|
}
|
|
}
|
|
|
|
rychlik = item{
|
|
n = "rychlík",
|
|
desc = "Expres 263 Juraj Jánošík ve směru Bratislava.",
|
|
d = "Stojí tu rychlík. Můj vlak je o něco dál.",
|
|
w = "nastupiste1"
|
|
}
|
|
|
|
-- nástupiště 1a
|
|
|
|
|
|
nastupiste1a = room{
|
|
n = "Nástupiště 1a",
|
|
d = "Na konci prvního nástupiště je ještě slepá kolej dlouhá tak akorát na jeden motorák, který evidentně jede někam do zapadákova, soudě dle zarostlosti kolejí.",
|
|
exits = {
|
|
{"zpět", "nastupiste1"},
|
|
{"dovnitř", function()
|
|
if is_here "vlak" then
|
|
walk("vagon1")
|
|
end
|
|
end}
|
|
}
|
|
}
|
|
|
|
-- TODO - strojvůdce stojí a kouří
|
|
-- TODO - koš
|
|
|
|
vlak = item{
|
|
n = "vlak",
|
|
d = "Stojí tu můj vlak.",
|
|
desc = "Motorová jednotka přezdívaná Nunčaki, protože je rozdělena kloubem na dvě části.",
|
|
w = "nastupiste1a"
|
|
}
|
|
|
|
|
|
-- VLAK:
|
|
|
|
trasa = {
|
|
-- nádraží
|
|
[2] = "Vlak sebou hází na výhybkách při výjezdu z nádraží. Po levé straně se oddděluje hlavní trať.",
|
|
[3] = "Vlak projíždí mezi rodinnými domky, právě vychází slunce.",
|
|
-- mlýnská
|
|
[5] = "Vlak přejíždí most nad čtyřproudovkou. Středem ulice projíždí poslední noční tramvaj. Nebo je to snad už první ranní?",
|
|
[6] = "Vlak projíždí po náspu mezi továrními halami a komíny.",
|
|
[7] = "Vlak s rachotem přejíždí most přes řeku Kliku.",
|
|
-- obora
|
|
[9] = "Vlak projíždí kolem stažených závor. Přes den u nich bývá delší fronta, teď je tam jen jedna dodávka.",
|
|
[10] = "Poslední domy města se míhají kolem trati.",
|
|
[11] = "Před projíždějícím vlakem utíkají zající a koroptve.",
|
|
[12] = "Široko daleko nic, co by stálo za pohled. Jen pole a dráty.",
|
|
-- pustá pole
|
|
[14] = "U polňačky vyplašil vlak vrány sedící na kříži nechráněného přejezdu.",
|
|
[15] = "Vlak projel okolo rybníčka zahaleného do mlhy.",
|
|
[16] = "Souběžně s tratí vede silnice. Jede po ní traktor.",
|
|
[17] = "Vlak míjí hřbitov na kraji vesnice.",
|
|
[18] = "Vlak projíždí mezi domy a zahradami.",
|
|
-- slaměná lhota
|
|
[19] = "Na přejezdu za okny čeká hovnocuc.",
|
|
[20] = "Občas je hranice mezi jednou vesnicí a druhou skoro neznatelná - jako třeba teď. Jenom cedule s názvem vesnice u souběžné silnice, jinak žádná nápověda.",
|
|
[21] = "Vlak zpomaluje a jede úzkým úsekem mezi domy, kde je trať vedena silnicí.",
|
|
-- čertův hrádek
|
|
[23] = "Nad údolím s chatičkami zlověstně vykukují věže Čertova hrádku.",
|
|
[24] = "Támhle v řece! To přece byla nahá holka!",
|
|
-- mokré hamry
|
|
[26] = "Vlak projíždí zářezem ve skále, skoro to vypadá na tunel.",
|
|
[27] = "Okolo oken se míhají stromy. Vlak projíždí lesem.",
|
|
[28] = "Před oknem se otevřelo úzké údolí, aby se vzápětí zase uzavřelo. Vlak projel po vidaduktu přes rokli.",
|
|
-- sanatorium
|
|
[30] = "Zpoza borovic vykukuje dlouhá zeď ústavu choromyslných táhnoucí se souběžně s tratí, po které jedeme.",
|
|
[31] = "Za polem se rýsují obrysy města, ke kterému se blížíme.",
|
|
[32] = "Vlak projíždí kolem jakéhosi zchátralého průmyslového areálu, asi sila."
|
|
}
|
|
|
|
function vystup()
|
|
if vars.vlak_jede then
|
|
p "Není možné vystupovat za jízdy"
|
|
else
|
|
walk(location_of "vlak")
|
|
end
|
|
end
|
|
|
|
kabina = room{
|
|
n = "Kabina strojvůce",
|
|
d = "...",
|
|
exits = {
|
|
{"zpět", "vagon1"}
|
|
}
|
|
}
|
|
|
|
-- TODO - videokamera
|
|
|
|
vagon1 = room{
|
|
n = "První vagón",
|
|
d = [[Podél velkých oken se táhne řada sedaček.
|
|
Na čele jsou dveře do kabiny strojvůdce s mozaikou železničních fotografií.]],
|
|
exits = {
|
|
{"do druhého vagónu", "vagon2"},
|
|
{"do kabiny strojvůdce", "kabina"},
|
|
{"ven", vystup}
|
|
}
|
|
}
|
|
|
|
okna1 = item{
|
|
n = "okna",
|
|
desc = function()
|
|
p "Koukáš z okna:"
|
|
p(trasa[vars.vlak_pozice])
|
|
end,
|
|
w = "vagon1"
|
|
}
|
|
|
|
vagon2 = room{
|
|
n = "Druhý vagón",
|
|
d = [[Podél velkých oken se táhne řada sedaček.
|
|
Od prvního vagonu se tento liší jen tím, že je tu navíc WC.]],
|
|
exits = {
|
|
{"do prvního vagónu", "vagon1"},
|
|
{"na wc", "wc"},
|
|
{"do zadní kabiny", "zadni_kabina"},
|
|
{"ven", vystup}
|
|
}
|
|
}
|
|
|
|
-- TODO - i zde okno
|
|
|
|
wc = room{
|
|
n = "WC",
|
|
d = "Záchod ve vlaku...",
|
|
exits = {{"ven", "vagon2"}}
|
|
}
|
|
|
|
-- na výhybkách bude házet
|
|
|
|
zadni_kabina = room{
|
|
n = "zadní kabina vlaku",
|
|
d = "...",
|
|
exits = {{"zpět", "vagon2"}}
|
|
}
|
|
|
|
-- TODO - všude (kromě záchoda) okna na pozorování ven
|
|
-- (v kabinách jako "prozkoumej trať")
|
|
|
|
-- zastávky
|
|
|
|
z_mlynska = room{
|
|
n = "Mlýnská",
|
|
d = "Zastávka Mlýnská smrdí novotou."
|
|
}
|
|
|
|
-- TODO - pasažér pankáč
|
|
|
|
z_obora = room{
|
|
n = "Obora",
|
|
d = "Malé nádražíčko mezi oboru, depem metra a sídlištěm."
|
|
}
|
|
|
|
-- TODO - pasažér zrzka
|
|
-- dialog se zrzkou se bude lišit podle toho, zda jí nejdřív zkontrolujeme lístky nebo oslovíme
|
|
|
|
z_pusta_pole = room{
|
|
n ="Pustá Pole",
|
|
d ="Jak už název napovídá, zastávka je v polích. A není tu zhola nic."
|
|
}
|
|
|
|
nic = item{
|
|
n = "nic",
|
|
desc = "Jak jsem říkal - nic tady není."
|
|
}
|
|
|
|
-- TODO - zde vystoupí pankáč, když neusne
|
|
|
|
z_slamena_lhota = room{
|
|
n = "Slaměná Lhota",
|
|
d = "V budově nádraží je slavná nádražní hospoda."
|
|
}
|
|
|
|
-- TODO - spící opilec na lavičce?
|
|
|
|
-- TODO - zde bude znít Time killer
|
|
|
|
z_certuv_hradek = room{
|
|
n = "Čertův Hrádek",
|
|
d = "Turistickou tvář zastávky doplňuje sádrový hrad mezi květináči s afrikány."
|
|
}
|
|
|
|
-- TODO - hrad a květináče
|
|
|
|
z_mokre_hamry = room{
|
|
n = "Mokré Hamry",
|
|
d = "Zastávka v lesním údolí. Sem jsem jako dítě jezdil na tábor."
|
|
}
|
|
|
|
-- TODO houby
|
|
|
|
z_sanatorium = room{
|
|
n = "Zloduška, sanatorium",
|
|
d = "..."
|
|
}
|
|
|
|
z_zloduska = room{
|
|
n = "Zloduška",
|
|
d = "Konečná stanice na kraji malého města."
|
|
}
|
|
|
|
-- TODO nádraží s dalším automatem na kafe
|
|
|
|
-- inventář
|
|
|
|
vypravka = item{
|
|
n = "výpravku",
|
|
desc = "Malá zelená výpravka, která mi slouží k tomu, abych dával vlaku znamení k odjezdu.",
|
|
use = function()
|
|
if is_here "vlak" then
|
|
if vars.hh==4 and vars.mm<18 then
|
|
p "Ještě je moc brzo na vypravování vlaku."
|
|
if not vars.vypil_kafe then
|
|
p "Místo toho bych si mohl dát kafe."
|
|
end
|
|
return
|
|
end
|
|
|
|
if vars.vlak_pozice==33 then
|
|
p "Tady moje jízda už ale skončila."
|
|
return
|
|
end
|
|
|
|
-- TODO - ve Zlodušce už mávat nepůjde, respektive přepne do nekonečného módu
|
|
|
|
p "Zamával jsem výpravkou a zapískal a vlak se dal do pohybu."
|
|
p "Nastoupil jsem:"
|
|
vars.vlak_jede = true
|
|
walk("vagon1", true)
|
|
-- TODO - až bude ve vlaku holka budem nastupovat za ní
|
|
elseif is_here "rychlik" then
|
|
p "Tohle není můj vlak, ten nemůžu vypravit."
|
|
else
|
|
p "Tady nemá moc smysl mávat výpravkou."
|
|
end
|
|
end
|
|
}
|
|
|
|
cas = item{
|
|
n = "čas",
|
|
check = function()
|
|
p("Právě je " .. vars.hh .. ":" .. vars.mm)
|
|
-- TODO - zde kontrolovat jízdní řád
|
|
end,
|
|
nolist = true
|
|
}
|
|
|
|
|
|
-- META
|
|
|
|
zastavky = {
|
|
[1] = "nastupiste1a",
|
|
[4] = "z_mlynska",
|
|
[8] = "z_obora",
|
|
[13] = "z_pusta_pole",
|
|
[19] = "z_slamena_lhota",
|
|
[22] = "z_certuv_hradek",
|
|
[25] = "z_mokre_hamry",
|
|
[29] = "z_sanatorium",
|
|
[33] = "z_zloduska"
|
|
}
|
|
|
|
function round()
|
|
-- plynutí času
|
|
vars.mm = vars.mm + 1
|
|
if vars.mm==60 then
|
|
vars.hh = vars.hh + 1
|
|
vars.mm = 1
|
|
end
|
|
|
|
-- TODO - události uváděť slovy "Potom" a "Mezitím"
|
|
|
|
-- upozornění na kafe:
|
|
if not vars.vypil_kafe then
|
|
if vars.hh==4 and vars.mm<16 and (vars.mm%3)==0 then
|
|
p "(Docela bych si dal kafe.)"
|
|
elseif vars.hh==4 and vars.mm==16 then
|
|
p "(To kafe už asi nestihnu.)"
|
|
end
|
|
end
|
|
|
|
-- nádražní hlášení
|
|
if vars.hh==4 and vars.mm==8 then
|
|
p "Mezitím zní nádražím hlášení:"
|
|
p "Z prvního nástupiště odjede expres číslo 263 Juraj Jánošík ve směru Nenastupovat, Trstina, Szombathély a Bratislava hlavná stanica. Vlak je připraven k odjezdu."
|
|
end
|
|
|
|
if vars.hh==4 and vars.mm==10 then
|
|
if is_here "rychlik" then
|
|
p "Z posledního vagonu rychlíku najednou vykouknul průvodčí a zapískal. Vlak obrzdil a se dal do pohybu. Docela pomalu na to, že je to mezinárodní expres."
|
|
end
|
|
move("rychlik","void")
|
|
end
|
|
|
|
if vars.hh==4 and vars.mm==18 then
|
|
p "Mezitím zní nádražím hlášení:"
|
|
p "Z nástupiště jedna Á odjede osobní vlak 320 ve směru Obora, Slaměná Lhota, Čertův hrádek a Zloduška. Vlak je připraven k odjezdu."
|
|
|
|
if game.me.w=="hala" then
|
|
p "(Měl bych jít k vlaku, když už ho hlásí.)"
|
|
end
|
|
end
|
|
|
|
-- upozornění na vlak
|
|
local varujeme_kde = {
|
|
hala = true,
|
|
nastupiste1 = true
|
|
}
|
|
if vars.vlak_pozice==1 and vars.hh==4 and vars.mm>18 and varujeme_kde[game.me.w] then
|
|
p "(Myslím, že bych už měl jít k vlaku.)"
|
|
end
|
|
|
|
-- jízda vlaku
|
|
if vars.vlak_jede == true then
|
|
vars.vlak_pozice = vars.vlak_pozice + 1
|
|
if zastavky[vars.vlak_pozice] then
|
|
p "Vlak brzdí před zastávkou a zastavuje."
|
|
p "(Vystupuju, abych mohl vypravit vlak.)"
|
|
p ""
|
|
vars.vlak_jede = false
|
|
move("vlak", zastavky[vars.vlak_pozice])
|
|
-- TODO - dovnitr_zastavka
|
|
walk(zastavky[vars.vlak_pozice], true)
|
|
-- TODO - nastupující lidi zde
|
|
end
|
|
end
|
|
end
|
|
|
|
intro = room{
|
|
d = [[(demoverze z 8.1.2021)
|
|
|
|
V této interaktivní povídce se stanete vlakvedoucím prvního ranního vlaku. Budete mít za úkol kontrolovat jízdenky a na každé zastávce vlak vypravit.
|
|
|
|
Ve 4:20 moc lidí nejezdí, ale místa pro melancholii je ve vlaku dost.]],
|
|
hraj = true
|
|
}
|
|
|
|
-- vytvoření průchodů
|
|
local pruchody = {}
|
|
for ref,obj in pairs(game) do
|
|
if type(obj)=='table' and obj.is_room and obj.exits then
|
|
for i,exit in ipairs(obj.exits) do
|
|
pruchody[ref .. "_exit" .. i] = item{
|
|
n = exit[1],
|
|
smer = exit[2],
|
|
w = ref,
|
|
msg = exit[3]
|
|
}
|
|
end
|
|
|
|
end
|
|
end
|
|
for ref,obj in pairs(pruchody) do
|
|
game[ref] = obj
|
|
end
|