hagen/vlak420.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