bl791/IFDB / games /source /russian /cloak_of_darkness_ru.awk
bl791's picture
download
raw
7.99 kB
#!/usr/bin/gawk -f
# To run type: awk -f cloak_of_darkness_ru.awk
# Cloak of Darkness demo and GNU AWK Interactive Fiction engine
# Copyright 2005 by Nick Moffitt
# This code is released under the WTFPL: http://sam.zoy.org/wtfpl/
# Just do what you want with it!
# Russian translation and modifications by Alexey Galkin, august 2022
BEGIN {
IGNORECASE = 1
EAST = "^в$|восток"
WEST = "^з$|запад"
NORTH = "^с$|север"
SOUTH = "^ю$|юг"
DROP = "бросить|положить"
TAKE = "взять|забрать|поднять"
EXAMINE = "^о$|осм|осмотреть|изучить|оглядеть"
INVENTORY = "^и$|инв|инвентарь"
QUIT = "выход|выйти|закончить"
player = "The Player"
dark[player] = "true"
score = 0
}
#initial input sanitizing
$2 { $2 = cansee($2) }
#############################################################
# Game Data Begins Here
#############################################################
BEGIN {
foyer = "Фойе Оперного театра"
description[foyer] = "Вы стоите в просторном зале, великолепно украшенном красным и золотым, со сверкающими люстрами над головой. Вход с улицы — на севере, а дверные проёмы — на юге и западе."
}
here == foyer && $1 ~ NORTH {
print "Вы только пришли, и, кроме того, погода снаружи, похоже, портится."
prompt()
}
here == foyer && $1 ~ WEST { go(cloakroom) ; prompt() }
here == foyer && $1 ~ SOUTH { go(bar) ; prompt() }
BEGIN {
cloakroom = "Гардероб"
description[cloakroom] = "Стены этой маленькой комнаты явно когда-то украшали крючки, хотя сейчас остался всего один. Выход — через дверь на востоке."
}
here == cloakroom && $1 ~ EAST { go(foyer) ; prompt() }
BEGIN {
hook = "маленький латунный крючок|крюк"
location[hook] = cloakroom
open[hook] = 1
invisible[hook] = 1
}
$2 == hook && $1 ~ /взять/ { print "Вы не можете это взять!"; prompt()}
$2 == hook && $1 ~ EXAMINE {
printf "Небольшой латунный крючок "
if (location[cloak] == hook) {
printf "на котором висит плащ."
} else {
printf "прикручен к стене."
}
}
BEGIN {
bar = "Бар в фойе"
description[bar] = "Бар выглядит гораздо хуже, чем вы представляли, после всей роскоши фойе на севере, и совершенно пуст. Кажется, в опилках на полу оставлено какое-то послание."
dark[bar] = 1
bumblings = 0
}
here == bar && $1 ~ NORTH { go(foyer) ; prompt() }
dark[bar] && here == bar {
print "В темноте? Вы можете наделать беспорядок!"
bumblings++
prompt()
}
BEGIN {
cloak = "бархатный плащ"
description[cloak] = "Красивый плащ из бархата, отороченный атласом и слегка забрызганный каплями дождя. Плащ настолько чёрный, что кажется, будто он высасывает свет из комнаты."
location[cloak] = player
}
$2 == cloak && ($1 ~ DROP || /повесить|снять/) {
if (here == cloakroom) {
delete dark[bar]
move(cloak, hook)
print "Вы осторожно вешаете чернильного цвета плащ на маленький латунный крючок. Вы чувствуете себя... как-то легче."
} else {
print "Это не лучшее место, чтобы оставить валяться здесь такой элегантный плащ!"
}
prompt()
}
$2 == cloak && $1 ~ TAKE || /надеть/ {
if (location[$2] == player ) {
print "У вас уже есть " $2 "."
prompt()
}
move($2, player)
dark[bar] = 1
print $2 ": взято."
prompt()
}
BEGIN {
message = "нацарапанное сообщение|послание|опилки"
location[message] = bar
invisible[message] = 1
}
$2 == message && ($1 ~ EXAMINE || /читать/) {
if (bumblings < 2) {
print "Аккуратно выведенное в опилках послание гласит: «ВЫ ПОБЕДИЛИ».\n"
exit 0
} else {
print "Послание на полу по неосторожности растоптано, не позволяя разобрать его содержание. Вы различаете лишь слова «ВЫ ПРОИГРАЛИ».\n"
exit 1
}
}
BEGIN {
here = foyer
print "\033[1mПЛАЩ ТЬМЫ\033[0m\n\nВы мчитесь сквозь дождливую ноябрьскую ночь и радуетесь, увидев яркие огни Оперного театра. Удивительно, что никого нет, но, эй, что вы ожидали от дешевой демо-игры...?"
printf "\n\n> "
}
#############################################################
# Game Data Ends Here
#############################################################
$1 ~ EAST || $1 ~ WEST || $1 ~ NORTH || $1 ~ SOUTH {
print "Вы не можете пойти в этом направлении."
prompt()
}
$1 ~ TAKE {
if (location[$2] == player ) {
print "У вас уже есть " $2 "."
prompt()
}
move($2, player)
print $2 ": взято."
prompt()
}
$1 ~ INVENTORY { inventory() ; prompt() }
$1 ~ EXAMINE && $2 { look($2) ; prompt()}
$1 ~ EXAMINE || ! $1 { look(here) ; prompt() } # пустая строка - вывод описания локации
$1 ~ QUIT {exit 1}
# Default verb confusion
{
print "Неизвестный глагол \"" $1 "\"."
prompt()
}
function prompt() {
printf "\n> "
next
}
function move(object, destination) {
location[object] = destination
}
function go(destination) {
here = destination
look(here)
}
function look(object) {
if (object == here) {
print "\033[1m" here "\033[0m"
}
if (dark[here]) {
print "Здесь темно — хоть глаз выколи. Вас может съесть гру."
prompt()
} else {
print description[object]
}
if (object == here) {
for (item in location) {
if (location[item] == here && !invisible[item]) {
print "\nЗдесь есть " item "."
}
if (location[item] == here && open[item]) {
for (subitem in location) {
if (location[subitem] == item) {
print "\nЗдесь есть \033[33m" subitem "\033[0m."
}
}
}
}
}
}
function inventory() {
print "У вас есть: "
for (item in location) {
if (location[item] == player) {
print " " item
}
}
}
function cansee(object) {
for (item in location) {
if (location[item] == here || location[item] == player) {
if (item ~ object) {
return item
}
if (open[item]) {
for (thing in location) {
if (location[thing] == item) {
if (thing ~ object) {
return thing
}
}
}
}
}
}
print "Я не вижу здесь \"" object "\"."
prompt()
}
# ex:ts=4 sw=4 tw=72 expandtab ai

Xet Storage Details

Size:
7.99 kB
·
Xet hash:
b1da31310d05667a04c098193f9b05f45f79d7b473d374b1195a69a0b61436af

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.