finalizovany syrecky
This commit is contained in:
parent
01ec41f569
commit
8638d2a4ce
|
@ -0,0 +1 @@
|
|||
@start bin\wlua53 gui.lua
|
110
gui.lua
110
gui.lua
|
@ -1,5 +1,10 @@
|
|||
require "iuplua"
|
||||
|
||||
-- Hagen game engine
|
||||
-- (c) Severák 2019
|
||||
|
||||
-- nedoporučuju nikomu číst, protože zárodek vzniknul během jednoho odpoledne
|
||||
|
||||
-- globals
|
||||
|
||||
paramsNo = 0
|
||||
|
@ -16,7 +21,7 @@ menu2codes = {}
|
|||
|
||||
function verb(def)
|
||||
def.is_verb = true
|
||||
def.params = def.params or 0
|
||||
def.params = def.params or {}
|
||||
verb_ord[#verb_ord+1] = def
|
||||
return def
|
||||
end
|
||||
|
@ -39,9 +44,17 @@ function cls()
|
|||
end
|
||||
|
||||
function p(par)
|
||||
-- TODO - nedavat CRLF poprve
|
||||
text.value = text.value .. "\n" .. par
|
||||
-- TODO scrool to down
|
||||
if text.value=="" then
|
||||
text.value = par
|
||||
else
|
||||
-- TODO - nedavat CRLF poprve
|
||||
text.value = text.value .. "\n" .. par
|
||||
end
|
||||
text.scrollto = text.linecount .. ","
|
||||
end
|
||||
|
||||
function here()
|
||||
return game.me.w
|
||||
end
|
||||
|
||||
function move(what, where)
|
||||
|
@ -52,32 +65,50 @@ function walk(where)
|
|||
assert(game[where], "room " .. where .. " does not exist")
|
||||
move("me", where)
|
||||
cls()
|
||||
p(game[where].n)
|
||||
p(game[where].d)
|
||||
for i,item in ipairs(item_ord) do
|
||||
if item.d and item.w==here() then
|
||||
p(item.d)
|
||||
end
|
||||
end
|
||||
show_verbs()
|
||||
end
|
||||
|
||||
function _has_subj_of(verb)
|
||||
local parCode = verb.params[#params+1]
|
||||
for i,item in ipairs(item_ord) do
|
||||
if item[parCode] and (verb.global_reach or item.w==here() or item.w=="me") then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
function show_verbs()
|
||||
paramsNo = 0
|
||||
currVerb = ""
|
||||
params = {}
|
||||
local here = game[game.me.w]
|
||||
commands[1]=nil
|
||||
menu2codes={}
|
||||
for i,verb in ipairs(verb_ord) do
|
||||
if verb.always or here[verb._ref] then
|
||||
if verb.always or here[verb._ref] or _has_subj_of(verb) then
|
||||
local idx=commands.count+1
|
||||
commands[idx] = verb.n
|
||||
menu2codes[idx] = verb._ref
|
||||
end
|
||||
end
|
||||
paramsNo = 0
|
||||
currVerb = ""
|
||||
params = {}
|
||||
end
|
||||
|
||||
function show_items()
|
||||
local here = game[game.me.w]
|
||||
local verb = game[currVerb]
|
||||
local parCode = verb.params[#params+1]
|
||||
-- print("parCode="..parCode)
|
||||
commands[1]=nil
|
||||
menu2codes={}
|
||||
for i,item in ipairs(item_ord) do
|
||||
if item.w==game.me.w and item[currVerb] then
|
||||
if item[parCode] and (verb.global_reach or item.w==here() or item.w=="me") then
|
||||
local idx=commands.count+1
|
||||
commands[idx] = item.n
|
||||
menu2codes[idx] = item._ref
|
||||
|
@ -88,19 +119,25 @@ end
|
|||
function process_param(param)
|
||||
if paramsNo == 0 then
|
||||
currVerb = param
|
||||
paramsNo = game[currVerb].params
|
||||
paramsNo = #game[currVerb].params
|
||||
else
|
||||
params[#params+1]=param
|
||||
end
|
||||
-- print("param="..param)
|
||||
-- print("params="..table.concat(params," "))
|
||||
-- print("currVerb="..currVerb)
|
||||
-- print("paramsNo="..paramsNo)
|
||||
-- print("#params="..#params)
|
||||
-- print "---"
|
||||
|
||||
--[[
|
||||
print("param="..param)
|
||||
print("params="..table.concat(params," "))
|
||||
print("currVerb="..currVerb)
|
||||
print("paramsNo="..paramsNo)
|
||||
print("#params="..#params)
|
||||
print "---"
|
||||
]]
|
||||
|
||||
if #params==paramsNo then
|
||||
game[currVerb].act(table.unpack(params))
|
||||
if game.round then
|
||||
game.round()
|
||||
end
|
||||
show_verbs()
|
||||
else
|
||||
show_items()
|
||||
|
@ -118,7 +155,8 @@ game = {
|
|||
intro = room{
|
||||
n="void",
|
||||
d="YOU ARE IN A MAZE OF TWISTY LITTLE PASSAGES, ALL ALIKE."
|
||||
}
|
||||
},
|
||||
vars = {}
|
||||
}
|
||||
|
||||
-- GUI
|
||||
|
@ -136,12 +174,7 @@ function commands:action(text, i, selected)
|
|||
end
|
||||
end
|
||||
|
||||
function commands:button_cb(butt)
|
||||
if butt==1 then
|
||||
print "Click!"
|
||||
end
|
||||
end
|
||||
|
||||
-- TODO - ovladání pomoci klávesnice
|
||||
function commands:k_any(k)
|
||||
if k==iup.K_UP or k==iup.K_DOWN then
|
||||
-- print "<>"
|
||||
|
@ -153,19 +186,32 @@ end
|
|||
|
||||
vbox= iup.hbox{text, commands; expand=1}
|
||||
|
||||
window = iup.dialog{vbox, title = "Hagen", gap = "10", size="QUARTERxQUARTER"}
|
||||
window = iup.dialog{vbox, title = "Hagen", gap = "10", rastersize="640x480"}
|
||||
|
||||
window:show()
|
||||
|
||||
-- commands[commands.count+1] = "čekej"
|
||||
-- commands[commands.count+1] = "prozkoumej"
|
||||
-- commands[commands.count+1] = "o hře"
|
||||
|
||||
iup.SetFocus(commands)
|
||||
-- iup.SetFocus(commands)
|
||||
|
||||
local gamefile
|
||||
if arg[1] then
|
||||
gamefile = arg[1]
|
||||
else
|
||||
local hry = {"syrecky.lua"}
|
||||
local hra = iup.Alarm("Hagen engine", "vyberte hru:", "Syrečky")
|
||||
if hry[hra] then
|
||||
gamefile = hry[hra]
|
||||
else
|
||||
os.exit(1)
|
||||
end
|
||||
end
|
||||
|
||||
-- loads game
|
||||
load_game = loadfile("syrecky.lua", "t", setmetatable(game, {__index=_G}))
|
||||
load_game, err = loadfile(gamefile, "t", setmetatable(game, {__index=_G}))
|
||||
|
||||
if err then
|
||||
print(err)
|
||||
os.exit(1)
|
||||
end
|
||||
|
||||
load_game()
|
||||
|
||||
|
@ -179,8 +225,6 @@ end
|
|||
window.title = game.title
|
||||
walk("intro")
|
||||
|
||||
|
||||
|
||||
if (iup.MainLoopLevel()==0) then
|
||||
iup.MainLoop()
|
||||
end
|
178
syrecky.lua
178
syrecky.lua
|
@ -1,15 +1,24 @@
|
|||
-- Syrečky pro Hagen engine
|
||||
-- (c) Severák 2019
|
||||
|
||||
-- / port z ALAN verze
|
||||
|
||||
title = "Syrečky (demo)"
|
||||
title = "Syrečky (technologické demo)"
|
||||
|
||||
-- utils
|
||||
|
||||
local function randomp(texty)
|
||||
return function()
|
||||
p(texty[math.random(1, #texty)])
|
||||
end
|
||||
end
|
||||
|
||||
-- slovesa
|
||||
|
||||
cont=verb{
|
||||
n="pokračovat",
|
||||
act = function()
|
||||
walk("obyvak")
|
||||
walk(game[here()].cont)
|
||||
end
|
||||
}
|
||||
|
||||
|
@ -25,7 +34,7 @@ jih = verb{
|
|||
|
||||
desc = verb{
|
||||
n ="prozkoumej",
|
||||
params = 1,
|
||||
params = {"desc"},
|
||||
act = function(what)
|
||||
--print("zkoumam " .. what)
|
||||
local description = game[what].desc
|
||||
|
@ -36,108 +45,165 @@ desc = verb{
|
|||
if type(description)=='function' then
|
||||
description()
|
||||
end
|
||||
end,
|
||||
always = true
|
||||
end
|
||||
}
|
||||
|
||||
help=verb{
|
||||
n="nápověda",
|
||||
open = verb{
|
||||
n ="otevři",
|
||||
params = {"open"},
|
||||
act = function(what)
|
||||
local description = game[what].open
|
||||
if type(description)=='string' then
|
||||
p(description)
|
||||
end
|
||||
|
||||
if type(description)=='function' then
|
||||
description()
|
||||
end
|
||||
end
|
||||
}
|
||||
|
||||
give = verb{
|
||||
n = "dej",
|
||||
params = {"syrecky"},
|
||||
act = function()
|
||||
cls()
|
||||
p "Hra se hraje pomoci menu na leve straně. Az najdete syrecky zadejte:dej otci syrecky."
|
||||
end,
|
||||
-- always = true
|
||||
-- tohle je trošku hack
|
||||
if here()=="obyvak" then
|
||||
p "Dokázal jsi to! Dal jsi otci syrečky."
|
||||
p "Game over!"
|
||||
else
|
||||
p "Není tu nikdo, komu bys syrečky dal."
|
||||
end
|
||||
end
|
||||
}
|
||||
|
||||
-- předměty
|
||||
-- předměty a lokace
|
||||
|
||||
-- OBÝVÁK
|
||||
|
||||
obyvak = room{
|
||||
n="Obyvak",
|
||||
d="Normalni panelakovy obyvak. Na sever od nej je kuchyne.",
|
||||
n="Obývák",
|
||||
d="Normalní panelakový obývak. Na sever od něj je kuchyně.",
|
||||
sever="kuchyn"
|
||||
}
|
||||
|
||||
maska = item{
|
||||
n="masku",
|
||||
d="Plynova maska z dob ruske okupace.",
|
||||
desc="Stara protiplynova maska, patrne ruske vyroby. Nechapu co delala v pohovce.",
|
||||
desc="Stará protiplynová maska, patrně ruské výroby. Nechápu co dělala v pohovce.",
|
||||
w="pohovka"
|
||||
}
|
||||
|
||||
otec = item{
|
||||
n="otce",
|
||||
d="Na pohovce se vali otec a kouka se na bednu.",
|
||||
desc="Tvuj fotr. Fesak.",
|
||||
w="obyvak",
|
||||
-- todo - koukání na bednu
|
||||
--[[
|
||||
SCRIPT bedna.
|
||||
STEP
|
||||
"Otec se napil piva."
|
||||
STEP
|
||||
"$nGOOOOOOOOOOOOOOOL!!!!$n"
|
||||
"Otec se raduje, Sparta vede 1:0 ."
|
||||
STEP
|
||||
""
|
||||
STEP
|
||||
"Otec zacina byt nervozni.$n
|
||||
Otec: Tak kde jsou sakra ty syrecky?!$n"
|
||||
STEP
|
||||
"$nOtec: Mladej kde se flakas s tema syreckama?!$n"
|
||||
]]
|
||||
}
|
||||
|
||||
pohovka = item{
|
||||
n="pohovku",
|
||||
d="Stara prasiva pohovka sotva drzi. Pamatuje snad i druhou svetovou.",
|
||||
d="Stará prašivá pohovka sotva drží. Pamatuje snad i druhou světovou.",
|
||||
desc = function()
|
||||
if maska.w=='pohovka' then
|
||||
p "Z pohovky couha neco divneho, zkusim to vytahnout."
|
||||
p "Wow! Je to plynova maska!"
|
||||
p "Mam masku!"
|
||||
move("maska", "inv")
|
||||
p "Z pohovky čouhá něco divného, zkusím to vytáhnout."
|
||||
p "Wow! Je to plynová maska!"
|
||||
move("maska", "me")
|
||||
else
|
||||
p "V pohovce je uz jen prach."
|
||||
p "V pohovce je už jenom prach."
|
||||
end
|
||||
end,
|
||||
w="obyvak"
|
||||
}
|
||||
|
||||
otec = item{
|
||||
n="otce",
|
||||
d="Na pohovce se valí otec a kouka se na bednu.",
|
||||
desc="Tvůj fotr. Fešák.",
|
||||
w="obyvak"
|
||||
}
|
||||
|
||||
televize = item{
|
||||
n = "televizi",
|
||||
desc = randomp{"V telce běží zápas pražských S.", "Fanoušci v televizi hážou dělobuchy.", "Právě běží reklama.", "V televizi je Horst Fuchs: A když zavoláte do deseti minut, dostanete ke každému noži koťátko zdarma."},
|
||||
w = "obyvak"
|
||||
}
|
||||
|
||||
|
||||
-- KUCHYNĚ
|
||||
|
||||
kuchyn = room{
|
||||
n="Kuchyň",
|
||||
d="Kuchyn z doby komunismu. Na jih je obyvak.",
|
||||
d="Umakartová kuchyň z doby vrcholného komunismu. Na jih od ní je obyvák.",
|
||||
jih="obyvak"
|
||||
}
|
||||
|
||||
syrecky = item{
|
||||
n = "syrečky",
|
||||
desc = "Strašně smradlavé syrečky.",
|
||||
w = "lednice"
|
||||
w = "lednice",
|
||||
syrecky = true
|
||||
}
|
||||
|
||||
lednice = item{
|
||||
n="lednici",
|
||||
desc = "Obstarozni lednicka znacky CALEX. Hotova hrozba pro zivotni prostredi.",
|
||||
d="Spořádaně tu vrní obstarožní lednice",
|
||||
desc = "Obstarožní lednička značky CALEX. Hotová hrozba pro životní prostředí.",
|
||||
open = function()
|
||||
p "Oteviras lednicku. Dvere vrzou."
|
||||
p "Otevíráš ledničku. Dveře vržou."
|
||||
if syrecky.w=="lednice" then
|
||||
if maska.w=="inv" then
|
||||
p "Syrecky strasne smrdi, beres si na pomoc plynovou masku."
|
||||
|
||||
if maska.w=="me" then
|
||||
p "Syrečky strašne smrdí, bereš si na pomoc plynovou masku."
|
||||
move("syrecky", "me")
|
||||
p "Vypadáš přitom jak stalker ze stejnojmené počitačové hry, ale podařilo se ti vzít syrečky."
|
||||
else
|
||||
p "Straslivy smrad syrecku te donutil lednicku zase zavrit!"
|
||||
p "Strašlivý smrad syrečků tě donutil ledničku zase zavřít!"
|
||||
end
|
||||
else
|
||||
p "V lednici je uz jen prisera ktera zila v lednici vedle majonezy a za zelnym salatem... To me nezajima."
|
||||
p "V lednici však už je jen \"Příšera, která žila v lednici vedle majonézy a za zelným salátem\". A to tě nezajímá."
|
||||
end
|
||||
end,
|
||||
w="kuchyn"
|
||||
}
|
||||
|
||||
vyhled = item{
|
||||
n = "výhled",
|
||||
d = "A je tu krásný výhled na Jihozápadní město",
|
||||
w="kuchyn",
|
||||
desc = randomp{
|
||||
"Paneláky dnes vypadají patřičně depresivně.",
|
||||
"Před barákem zrovna někomu kradou auto.",
|
||||
"Před barákem zrovna policajti rozdávají pokuty.",
|
||||
"Děti si hrajou na hřišti.",
|
||||
"Důchodkyně pomlouvají tu dnešní mládež.",
|
||||
},
|
||||
open="Okno raději otvírat nebudu, mohl by se sem dostat smog."
|
||||
}
|
||||
|
||||
-- META
|
||||
|
||||
local sledovani = randomp{
|
||||
"Otec se napil piva.",
|
||||
"GOOOOOOOOOOOOOOOL!!!!\n",
|
||||
"Otec se raduje, Sparta vede 1:0 .",
|
||||
"Otec začína být nervózní.\nOtec: Tak kde jsou sakra ty syrečky?!"
|
||||
}
|
||||
|
||||
local zrani = randomp{
|
||||
"Otec spokojeně mlaská při žraní syrečků.",
|
||||
"Otec: To je dobrota, to je dobrota.",
|
||||
"Otec: Mňam, mňam..."
|
||||
}
|
||||
|
||||
function round()
|
||||
if here()=="obyvak" then
|
||||
if syrecky.w=="otec" then
|
||||
zrani()
|
||||
else
|
||||
sledovani()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
intro = room{
|
||||
d=[[DEMO HRA SYRECKY
|
||||
----------------
|
||||
Tvym cilem je donest otci syrecky z kuchyne.]],
|
||||
d=[[SYREČKY - technologické demo
|
||||
|
||||
Tvým cílem je donést otci syrečky z kuchyně.
|
||||
|
||||
Hru navrhnul Petr Kain v roce 2010, potom sloužila jako česká obdoba Cloak of Darkness.]],
|
||||
cont="obyvak"
|
||||
}
|
Loading…
Reference in New Issue